From a89a9114b176dc7bbba06e191eeafde2b9247fac Mon Sep 17 00:00:00 2001 From: Thinkia Date: Mon, 24 Dec 2018 14:18:14 +0800 Subject: [PATCH 1/2] add rotateAxis --- dist/claygl.es.js | 377 +++++++++++++++++++++++++++++++---------- dist/claygl.js | 377 +++++++++++++++++++++++++++++++---------- example/app_basic.html | 3 +- src/glmatrix/quat.js | 54 +++--- src/glmatrix/vec3.js | 4 + src/math/Quaternion.js | 21 ++- 6 files changed, 624 insertions(+), 212 deletions(-) diff --git a/dist/claygl.es.js b/dist/claygl.es.js index 5ba476e77..b774200a9 100644 --- a/dist/claygl.es.js +++ b/dist/claygl.es.js @@ -3363,6 +3363,10 @@ vec3.normalize = function(out, a) { out[0] = a[0] * len; out[1] = a[1] * len; out[2] = a[2] * len; + }else{ + out[0] = 0; + out[1] = 0; + out[2] = 1; } return out; }; @@ -4837,6 +4841,22 @@ quat.setAxisAngle = function(out, axis, rad) { return out; }; +/** + * zh : 绕单位向量自转 + * @param out {quat} + * @param quat2 {quat} + * @param axis {vec3} + * @param rad {Number} + */ + +quat.rotateAxis = function (out,quat2,axis,rad) { + + vec3.normalize(axis,axis); + quat.setAxisAngle(quat2,axis,rad); + quat.multiply(out,out,quat2); + +}; + /** * Adds two quat's * @@ -4892,16 +4912,13 @@ quat.scale = vec4.scale; * @param {number} rad angle (in radians) to rotate * @returns {quat} out */ -quat.rotateX = function (out, a, rad) { - rad *= 0.5; +quat.rotateX = function (out,rad) { - var ax = a[0], ay = a[1], az = a[2], aw = a[3], - bx = Math.sin(rad), bw = Math.cos(rad); + var quat2 =[0,0,0,1]; + var axis = [1,0,0]; + + quat.rotateAxis(out,quat2,axis,rad); - out[0] = ax * bw + aw * bx; - out[1] = ay * bw + az * bx; - out[2] = az * bw - ay * bx; - out[3] = aw * bw - ax * bx; return out; }; @@ -4913,16 +4930,13 @@ quat.rotateX = function (out, a, rad) { * @param {number} rad angle (in radians) to rotate * @returns {quat} out */ -quat.rotateY = function (out, a, rad) { - rad *= 0.5; +quat.rotateY = function (out,rad) { - var ax = a[0], ay = a[1], az = a[2], aw = a[3], - by = Math.sin(rad), bw = Math.cos(rad); + var quat2 =[0,0,0,1]; + var axis = [0,1,0]; + + quat.rotateAxis(out,quat2,axis,rad); - out[0] = ax * bw - az * by; - out[1] = ay * bw + aw * by; - out[2] = az * bw + ax * by; - out[3] = aw * bw - ay * by; return out; }; @@ -4934,16 +4948,12 @@ quat.rotateY = function (out, a, rad) { * @param {number} rad angle (in radians) to rotate * @returns {quat} out */ -quat.rotateZ = function (out, a, rad) { - rad *= 0.5; +quat.rotateZ = function (out,rad) { + var quat2 =[0,0,0,1]; + var axis = [0,0,1]; - var ax = a[0], ay = a[1], az = a[2], aw = a[3], - bz = Math.sin(rad), bw = Math.cos(rad); + quat.rotateAxis(out,quat2,axis,rad); - out[0] = ax * bw + ay * bz; - out[1] = ay * bw - ax * bz; - out[2] = az * bw + aw * bz; - out[3] = aw * bw - az * bz; return out; }; @@ -6682,14 +6692,16 @@ function GLInfo(_gl) { }; function createExtension(name) { - var ext = _gl.getExtension(name); - if (!ext) { - ext = _gl.getExtension('MOZ_' + name); - } - if (!ext) { - ext = _gl.getExtension('WEBKIT_' + name); + if (_gl.getExtension) { + var ext = _gl.getExtension(name); + if (!ext) { + ext = _gl.getExtension('MOZ_' + name); + } + if (!ext) { + ext = _gl.getExtension('WEBKIT_' + name); + } + extensions[name] = ext; } - extensions[name] = ext; } } @@ -8785,6 +8797,15 @@ var GLProgram = Base.extend({ _gl.linkProgram(program); + _gl.deleteShader(vertexShader); + _gl.deleteShader(fragmentShader); + + this._program = program; + + // Save code. + this.vertexCode = vertexShaderCode; + this.fragmentCode = fragmentShaderCode; + if (!_gl.getProgramParameter(program, _gl.LINK_STATUS)) { return 'Could not link program\n' + _gl.getProgramInfoLog(program); } @@ -8795,14 +8816,6 @@ var GLProgram = Base.extend({ this._locations[uniformSymbol] = _gl.getUniformLocation(program, uniformSymbol); } - _gl.deleteShader(vertexShader); - _gl.deleteShader(fragmentShader); - - this._program = program; - - // Save code. - this.vertexCode = vertexShaderCode; - this.fragmentCode = fragmentShaderCode; } }); @@ -9659,7 +9672,7 @@ Shader.source = function (name) { return obj; }; -var prezGlsl = "@export clay.prez.vertex\nuniform mat4 WVP : WORLDVIEWPROJECTION;\nattribute vec3 pos : POSITION;\nattribute vec2 uv : TEXCOORD_0;\n@import clay.chunk.skinning_header\nvarying vec2 v_Texcoord;\nvoid main()\n{\n vec3 P = pos;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n P = (skinMatrixWS * vec4(pos, 1.0)).xyz;\n#endif\n gl_Position = WVP * vec4(P, 1.0);\n v_Texcoord = uv;\n}\n@end\n@export clay.prez.fragment\nuniform sampler2D alphaMap;\nuniform float alphaCutoff: 0.0;\nvarying vec2 v_Texcoord;\nvoid main()\n{\n if (alphaCutoff > 0.0) {\n if (texture2D(alphaMap, v_Texcoord).a <= alphaCutoff) {\n discard;\n }\n }\n gl_FragColor = vec4(0.0,0.0,0.0,1.0);\n}\n@end"; +var prezGlsl = "@export clay.prez.vertex\nuniform mat4 WVP : WORLDVIEWPROJECTION;\nattribute vec3 pos : POSITION;\nattribute vec2 uv : TEXCOORD_0;\nuniform vec2 uvRepeat : [1.0, 1.0];\nuniform vec2 uvOffset : [0.0, 0.0];\n@import clay.chunk.skinning_header\nvarying vec2 v_Texcoord;\nvoid main()\n{\n vec3 P = pos;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n P = (skinMatrixWS * vec4(pos, 1.0)).xyz;\n#endif\n gl_Position = WVP * vec4(P, 1.0);\n v_Texcoord = uv * uvRepeat + uvOffset;\n}\n@end\n@export clay.prez.fragment\nuniform sampler2D alphaMap;\nuniform float alphaCutoff: 0.0;\nvarying vec2 v_Texcoord;\nvoid main()\n{\n if (alphaCutoff > 0.0) {\n if (texture2D(alphaMap, v_Texcoord).a <= alphaCutoff) {\n discard;\n }\n }\n gl_FragColor = vec4(0.0,0.0,0.0,1.0);\n}\n@end"; /* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved. @@ -10829,8 +10842,10 @@ var Renderer = Base.extend(function () { // set the display size of the canvas. var dpr = this.devicePixelRatio; if (width != null) { - canvas.style.width = width + 'px'; - canvas.style.height = height + 'px'; + if (canvas.style) { + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } // set the size of the drawingBuffer canvas.width = width * dpr; canvas.height = height * dpr; @@ -11113,6 +11128,7 @@ var Renderer = Base.extend(function () { else { this.trigger('error', errorMsg); } + } }, @@ -11695,6 +11711,12 @@ var Renderer = Base.extend(function () { } return 0; } + else if (symbol === 'uvRepeat') { + return renderable.material.get('uvRepeat'); + } + else if (symbol === 'uvOffset') { + return renderable.material.get('uvOffset'); + } else { return depthMaterial.get(symbol); } @@ -13181,6 +13203,19 @@ Quaternion.prototype = { this._dirty = true; return this; }, + /** + * + * @param axis + * @param rad + */ + rotateAxis:function (axis,rad) { + + var quat2 = new Quaternion().array; + + quat.rotateAxis(this.array,quat2,axis,rad); + this._dirty = true; + return this; + }, /** * Rotate self by a given radian about X axis @@ -13188,7 +13223,8 @@ Quaternion.prototype = { * @return {clay.Quaternion} */ rotateX: function (rad) { - quat.rotateX(this.array, this.array, rad); + + quat.rotateX(this.array, rad); this._dirty = true; return this; }, @@ -13199,7 +13235,8 @@ Quaternion.prototype = { * @return {clay.Quaternion} */ rotateY: function (rad) { - quat.rotateY(this.array, this.array, rad); + + quat.rotateY(this.array, rad); this._dirty = true; return this; }, @@ -13210,7 +13247,7 @@ Quaternion.prototype = { * @return {clay.Quaternion} */ rotateZ: function (rad) { - quat.rotateZ(this.array, this.array, rad); + quat.rotateZ(this.array, rad); this._dirty = true; return this; }, @@ -19162,9 +19199,7 @@ var Texture2D = Texture.extend(function () { isRenderable: function () { if (this.image) { - return this.image.nodeName === 'CANVAS' - || this.image.nodeName === 'VIDEO' - || this.image.complete; + return this.image.width > 0 && this.image.height > 0; } else { return !!(this.width && this.height); @@ -19500,9 +19535,7 @@ Object.defineProperty(TextureCube.prototype, 'height', { } }); function isImageRenderable(image) { - return image.nodeName === 'CANVAS' || - image.nodeName === 'VIDEO' || - image.complete; + return image.width > 0 && image.height > 0; } /** @@ -19888,7 +19921,7 @@ var Orthographic$1 = Camera.extend( } }); -var standardEssl = "\n@export clay.standard.chunk.varying\nvarying vec2 v_Texcoord;\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\nvarying vec3 v_Barycentric;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n#if defined(AOMAP_ENABLED)\nvarying vec2 v_Texcoord2;\n#endif\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n@end\n@export clay.standard.chunk.light_header\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n@import clay.header.ambient_cubemap_light\n#endif\n#ifdef POINT_LIGHT_COUNT\n@import clay.header.point_light\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n#ifdef SPOT_LIGHT_COUNT\n@import clay.header.spot_light\n#endif\n@end\n@export clay.standard.vertex\n#define SHADER_NAME standard\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 worldInverseTranspose : WORLDINVERSETRANSPOSE;\nuniform mat4 world : WORLD;\nuniform vec2 uvRepeat : [1.0, 1.0];\nuniform vec2 uvOffset : [0.0, 0.0];\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\n#if defined(AOMAP_ENABLED)\nattribute vec2 texcoord2 : TEXCOORD_1;\n#endif\nattribute vec3 normal : NORMAL;\nattribute vec4 tangent : TANGENT;\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\n#endif\nattribute vec3 barycentric;\n@import clay.standard.chunk.varying\n@import clay.chunk.skinning_header\nvoid main()\n{\n vec3 skinnedPosition = position;\n vec3 skinnedNormal = normal;\n vec3 skinnedTangent = tangent.xyz;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n skinnedNormal = (skinMatrixWS * vec4(normal, 0.0)).xyz;\n skinnedTangent = (skinMatrixWS * vec4(tangent.xyz, 0.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition, 1.0);\n v_Texcoord = texcoord * uvRepeat + uvOffset;\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n v_Barycentric = barycentric;\n v_Normal = normalize((worldInverseTranspose * vec4(skinnedNormal, 0.0)).xyz);\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n v_Tangent = normalize((worldInverseTranspose * vec4(skinnedTangent, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n#endif\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n#if defined(AOMAP_ENABLED)\n v_Texcoord2 = texcoord2;\n#endif\n}\n@end\n@export clay.standard.fragment\n#define PI 3.14159265358979\n#define GLOSSINESS_CHANNEL 0\n#define ROUGHNESS_CHANNEL 0\n#define METALNESS_CHANNEL 1\n#define DIFFUSEMAP_ALPHA_ALPHA\n@import clay.standard.chunk.varying\nuniform mat4 viewInverse : VIEWINVERSE;\n#ifdef NORMALMAP_ENABLED\nuniform sampler2D normalMap;\n#endif\nuniform float normalScale: 1.0;\n#ifdef DIFFUSEMAP_ENABLED\nuniform sampler2D diffuseMap;\n#endif\n#ifdef SPECULARMAP_ENABLED\nuniform sampler2D specularMap;\n#endif\n#ifdef USE_ROUGHNESS\nuniform float roughness : 0.5;\n #ifdef ROUGHNESSMAP_ENABLED\nuniform sampler2D roughnessMap;\n #endif\n#else\nuniform float glossiness: 0.5;\n #ifdef GLOSSINESSMAP_ENABLED\nuniform sampler2D glossinessMap;\n #endif\n#endif\n#ifdef METALNESSMAP_ENABLED\nuniform sampler2D metalnessMap;\n#endif\n#ifdef OCCLUSIONMAP_ENABLED\nuniform sampler2D occlusionMap;\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\nuniform samplerCube environmentMap;\n #ifdef PARALLAX_CORRECTED\nuniform vec3 environmentBoxMin;\nuniform vec3 environmentBoxMax;\n #endif\n#endif\n#ifdef BRDFLOOKUP_ENABLED\nuniform sampler2D brdfLookup;\n#endif\n#ifdef EMISSIVEMAP_ENABLED\nuniform sampler2D emissiveMap;\n#endif\n#ifdef SSAOMAP_ENABLED\nuniform sampler2D ssaoMap;\nuniform vec4 viewport : VIEWPORT;\n#endif\n#ifdef AOMAP_ENABLED\nuniform sampler2D aoMap;\nuniform float aoIntensity;\n#endif\nuniform vec3 color : [1.0, 1.0, 1.0];\nuniform float alpha : 1.0;\n#ifdef ALPHA_TEST\nuniform float alphaCutoff: 0.9;\n#endif\n#ifdef USE_METALNESS\nuniform float metalness : 0.0;\n#else\nuniform vec3 specularColor : [0.1, 0.1, 0.1];\n#endif\nuniform vec3 emission : [0.0, 0.0, 0.0];\nuniform float emissionIntensity: 1;\nuniform float lineWidth : 0.0;\nuniform vec4 lineColor : [0.0, 0.0, 0.0, 0.6];\n#ifdef ENVIRONMENTMAP_PREFILTER\nuniform float maxMipmapLevel: 5;\n#endif\n@import clay.standard.chunk.light_header\n@import clay.util.calculate_attenuation\n@import clay.util.edge_factor\n@import clay.util.rgbm\n@import clay.util.srgb\n@import clay.plugin.compute_shadow_map\n@import clay.util.parallax_correct\n@import clay.util.ACES\nfloat G_Smith(float g, float ndv, float ndl)\n{\n float roughness = 1.0 - g;\n float k = roughness * roughness / 2.0;\n float G1V = ndv / (ndv * (1.0 - k) + k);\n float G1L = ndl / (ndl * (1.0 - k) + k);\n return G1L * G1V;\n}\nvec3 F_Schlick(float ndv, vec3 spec) {\n return spec + (1.0 - spec) * pow(1.0 - ndv, 5.0);\n}\nfloat D_Phong(float g, float ndh) {\n float a = pow(8192.0, g);\n return (a + 2.0) / 8.0 * pow(ndh, a);\n}\nfloat D_GGX(float g, float ndh) {\n float r = 1.0 - g;\n float a = r * r;\n float tmp = ndh * ndh * (a - 1.0) + 1.0;\n return a / (PI * tmp * tmp);\n}\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\nuniform float parallaxOcclusionScale : 0.02;\nuniform float parallaxMaxLayers : 20;\nuniform float parallaxMinLayers : 5;\nuniform sampler2D parallaxOcclusionMap;\nmat3 transpose(in mat3 inMat)\n{\n vec3 i0 = inMat[0];\n vec3 i1 = inMat[1];\n vec3 i2 = inMat[2];\n return mat3(\n vec3(i0.x, i1.x, i2.x),\n vec3(i0.y, i1.y, i2.y),\n vec3(i0.z, i1.z, i2.z)\n );\n}\nvec2 parallaxUv(vec2 uv, vec3 viewDir)\n{\n float numLayers = mix(parallaxMaxLayers, parallaxMinLayers, abs(dot(vec3(0.0, 0.0, 1.0), viewDir)));\n float layerHeight = 1.0 / numLayers;\n float curLayerHeight = 0.0;\n vec2 deltaUv = viewDir.xy * parallaxOcclusionScale / (viewDir.z * numLayers);\n vec2 curUv = uv;\n float height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n for (int i = 0; i < 30; i++) {\n curLayerHeight += layerHeight;\n curUv -= deltaUv;\n height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n if (height < curLayerHeight) {\n break;\n }\n }\n vec2 prevUv = curUv + deltaUv;\n float next = height - curLayerHeight;\n float prev = 1.0 - texture2D(parallaxOcclusionMap, prevUv).r - curLayerHeight + layerHeight;\n return mix(curUv, prevUv, next / (next - prev));\n}\n#endif\nvoid main() {\n vec4 albedoColor = vec4(color, alpha);\n#ifdef VERTEX_COLOR\n albedoColor *= v_Color;\n#endif\n#ifdef SRGB_DECODE\n albedoColor = sRGBToLinear(albedoColor);\n#endif\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n vec2 uv = v_Texcoord;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n mat3 tbn = mat3(v_Tangent, v_Bitangent, v_Normal);\n#endif\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\n uv = parallaxUv(v_Texcoord, normalize(transpose(tbn) * -V));\n#endif\n#ifdef DIFFUSEMAP_ENABLED\n vec4 texel = texture2D(diffuseMap, uv);\n #ifdef SRGB_DECODE\n texel = sRGBToLinear(texel);\n #endif\n albedoColor.rgb *= texel.rgb;\n #ifdef DIFFUSEMAP_ALPHA_ALPHA\n albedoColor.a *= texel.a;\n #endif\n#endif\n#ifdef USE_METALNESS\n float m = metalness;\n #ifdef METALNESSMAP_ENABLED\n float m2 = texture2D(metalnessMap, uv)[METALNESS_CHANNEL];\n m = clamp(m2 + (m - 0.5) * 2.0, 0.0, 1.0);\n #endif\n vec3 baseColor = albedoColor.rgb;\n albedoColor.rgb = baseColor * (1.0 - m);\n vec3 spec = mix(vec3(0.04), baseColor, m);\n#else\n vec3 spec = specularColor;\n#endif\n#ifdef USE_ROUGHNESS\n float g = clamp(1.0 - roughness, 0.0, 1.0);\n #ifdef ROUGHNESSMAP_ENABLED\n float g2 = 1.0 - texture2D(roughnessMap, uv)[ROUGHNESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#else\n float g = glossiness;\n #ifdef GLOSSINESSMAP_ENABLED\n float g2 = texture2D(glossinessMap, uv)[GLOSSINESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#endif\n#ifdef SPECULARMAP_ENABLED\n spec *= sRGBToLinear(texture2D(specularMap, uv)).rgb;\n#endif\n vec3 N = v_Normal;\n#ifdef DOUBLE_SIDED\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n#ifdef NORMALMAP_ENABLED\n if (dot(v_Tangent, v_Tangent) > 0.0) {\n vec3 normalTexel = texture2D(normalMap, uv).xyz;\n if (dot(normalTexel, normalTexel) > 0.0) { N = (normalTexel * 2.0 - 1.0);\n N = normalize(N * vec3(normalScale, normalScale, 1.0));\n tbn[1] = -tbn[1];\n N = normalize(tbn * N);\n }\n }\n#endif\n vec3 diffuseTerm = vec3(0.0, 0.0, 0.0);\n vec3 specularTerm = vec3(0.0, 0.0, 0.0);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n vec3 fresnelTerm = F_Schlick(ndv, spec);\n#ifdef AMBIENT_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += ambientLightColor[_idx_];\n }}\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += calcAmbientSHLight(_idx_, N) * ambientSHLightColor[_idx_];\n }}\n#endif\n#ifdef POINT_LIGHT_COUNT\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsPoint[POINT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfPointLights(v_WorldPosition, shadowContribsPoint);\n }\n#endif\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_COUNT; _idx_++)\n {{\n vec3 lightPosition = pointLightPosition[_idx_];\n vec3 lc = pointLightColor[_idx_];\n float range = pointLightRange[_idx_];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsPoint[_idx_];\n }\n#endif\n vec3 li = lc * ndl * attenuation * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++)\n {{\n vec3 L = -normalize(directionalLightDirection[_idx_]);\n vec3 lc = directionalLightColor[_idx_];\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsDir[_idx_];\n }\n#endif\n vec3 li = lc * ndl * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef SPOT_LIGHT_COUNT\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsSpot[SPOT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfSpotLights(v_WorldPosition, shadowContribsSpot);\n }\n#endif\n for(int i = 0; i < SPOT_LIGHT_COUNT; i++)\n {\n vec3 lightPosition = spotLightPosition[i];\n vec3 spotLightDirection = -normalize(spotLightDirection[i]);\n vec3 lc = spotLightColor[i];\n float range = spotLightRange[i];\n float a = spotLightUmbraAngleCosine[i];\n float b = spotLightPenumbraAngleCosine[i];\n float falloffFactor = spotLightFalloffFactor[i];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n float c = dot(spotLightDirection, L);\n float falloff;\n falloff = clamp((c - a) /(b - a), 0.0, 1.0);\n falloff = pow(falloff, falloffFactor);\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsSpot[i];\n }\n#endif\n vec3 li = lc * attenuation * (1.0 - falloff) * shadowContrib * ndl;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }\n#endif\n vec4 outColor = albedoColor;\n outColor.rgb *= max(diffuseTerm, vec3(0.0));\n outColor.rgb += max(specularTerm, vec3(0.0));\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n vec3 L = reflect(-V, N);\n float rough2 = clamp(1.0 - g, 0.0, 1.0);\n float bias2 = rough2 * 5.0;\n vec2 brdfParam2 = texture2D(ambientCubemapLightBRDFLookup[0], vec2(rough2, ndv)).xy;\n vec3 envWeight2 = spec * brdfParam2.x + brdfParam2.y;\n vec3 envTexel2;\n for(int _idx_ = 0; _idx_ < AMBIENT_CUBEMAP_LIGHT_COUNT; _idx_++)\n {{\n #ifdef SUPPORT_TEXTURE_LOD\n envTexel2 = RGBMDecode(textureCubeLodEXT(ambientCubemapLightCubemap[_idx_], L, bias2), 8.12);\n #else\n envTexel2 = RGBMDecode(textureCube(ambientCubemapLightCubemap[_idx_], L), 8.12);\n #endif\n outColor.rgb += ambientCubemapLightColor[_idx_] * envTexel2 * envWeight2;\n }}\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\n vec3 envWeight = g * fresnelTerm;\n vec3 L = reflect(-V, N);\n #ifdef PARALLAX_CORRECTED\n L = parallaxCorrect(L, v_WorldPosition, environmentBoxMin, environmentBoxMax);\n#endif\n #ifdef ENVIRONMENTMAP_PREFILTER\n float rough = clamp(1.0 - g, 0.0, 1.0);\n float bias = rough * maxMipmapLevel;\n #ifdef SUPPORT_TEXTURE_LOD\n vec3 envTexel = decodeHDR(textureCubeLodEXT(environmentMap, L, bias)).rgb;\n #else\n vec3 envTexel = decodeHDR(textureCube(environmentMap, L)).rgb;\n #endif\n #ifdef BRDFLOOKUP_ENABLED\n vec2 brdfParam = texture2D(brdfLookup, vec2(rough, ndv)).xy;\n envWeight = spec * brdfParam.x + brdfParam.y;\n #endif\n #else\n vec3 envTexel = textureCube(environmentMap, L).xyz;\n #endif\n outColor.rgb += envTexel * envWeight;\n#endif\n float aoFactor = 1.0;\n#ifdef SSAOMAP_ENABLED\n aoFactor = min(texture2D(ssaoMap, (gl_FragCoord.xy - viewport.xy) / viewport.zw).r, aoFactor);\n#endif\n#ifdef AOMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(aoMap, v_Texcoord2).r) * aoIntensity, 0.0, 1.0), aoFactor);\n#endif\n#ifdef OCCLUSIONMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(occlusionMap, v_Texcoord).r), 0.0, 1.0), aoFactor);\n#endif\n outColor.rgb *= aoFactor;\n vec3 lEmission = emission;\n#ifdef EMISSIVEMAP_ENABLED\n lEmission *= texture2D(emissiveMap, uv).rgb;\n#endif\n outColor.rgb += lEmission * emissionIntensity;\n if(lineWidth > 0.)\n {\n outColor.rgb = mix(outColor.rgb, lineColor.rgb, (1.0 - edgeFactor(lineWidth)) * lineColor.a);\n }\n#ifdef ALPHA_TEST\n if (outColor.a < alphaCutoff) {\n discard;\n }\n#endif\n#ifdef TONEMAPPING\n outColor.rgb = ACESToneMapping(outColor.rgb);\n#endif\n#ifdef SRGB_ENCODE\n outColor = linearTosRGB(outColor);\n#endif\n gl_FragColor = encodeHDR(outColor);\n}\n@end\n@export clay.standardMR.vertex\n@import clay.standard.vertex\n@end\n@export clay.standardMR.fragment\n#define USE_METALNESS\n#define USE_ROUGHNESS\n@import clay.standard.fragment\n@end"; +var standardEssl = "\n@export clay.standard.chunk.varying\nvarying vec2 v_Texcoord;\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\nvarying vec3 v_Barycentric;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n#if defined(AOMAP_ENABLED)\nvarying vec2 v_Texcoord2;\n#endif\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n@end\n@export clay.standard.chunk.light_header\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n@import clay.header.ambient_cubemap_light\n#endif\n#ifdef POINT_LIGHT_COUNT\n@import clay.header.point_light\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n#ifdef SPOT_LIGHT_COUNT\n@import clay.header.spot_light\n#endif\n@end\n@export clay.standard.vertex\n#define SHADER_NAME standard\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 worldInverseTranspose : WORLDINVERSETRANSPOSE;\nuniform mat4 world : WORLD;\nuniform vec2 uvRepeat = vec2(1.0, 1.0);\nuniform vec2 uvOffset = vec2(0.0, 0.0);\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\n#if defined(AOMAP_ENABLED)\nattribute vec2 texcoord2 : TEXCOORD_1;\n#endif\nattribute vec3 normal : NORMAL;\nattribute vec4 tangent : TANGENT;\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\n#endif\nattribute vec3 barycentric;\n@import clay.standard.chunk.varying\n@import clay.chunk.skinning_header\nvoid main()\n{\n vec3 skinnedPosition = position;\n vec3 skinnedNormal = normal;\n vec3 skinnedTangent = tangent.xyz;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n skinnedNormal = (skinMatrixWS * vec4(normal, 0.0)).xyz;\n skinnedTangent = (skinMatrixWS * vec4(tangent.xyz, 0.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition, 1.0);\n v_Texcoord = texcoord * uvRepeat + uvOffset;\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n v_Barycentric = barycentric;\n v_Normal = normalize((worldInverseTranspose * vec4(skinnedNormal, 0.0)).xyz);\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n v_Tangent = normalize((worldInverseTranspose * vec4(skinnedTangent, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n#endif\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n#if defined(AOMAP_ENABLED)\n v_Texcoord2 = texcoord2;\n#endif\n}\n@end\n@export clay.standard.fragment\n#define PI 3.14159265358979\n#define GLOSSINESS_CHANNEL 0\n#define ROUGHNESS_CHANNEL 0\n#define METALNESS_CHANNEL 1\n#define DIFFUSEMAP_ALPHA_ALPHA\n@import clay.standard.chunk.varying\nuniform mat4 viewInverse : VIEWINVERSE;\n#ifdef NORMALMAP_ENABLED\nuniform sampler2D normalMap;\n#endif\nuniform float normalScale: 1.0;\n#ifdef DIFFUSEMAP_ENABLED\nuniform sampler2D diffuseMap;\n#endif\n#ifdef SPECULARMAP_ENABLED\nuniform sampler2D specularMap;\n#endif\n#ifdef USE_ROUGHNESS\nuniform float roughness : 0.5;\n #ifdef ROUGHNESSMAP_ENABLED\nuniform sampler2D roughnessMap;\n #endif\n#else\nuniform float glossiness: 0.5;\n #ifdef GLOSSINESSMAP_ENABLED\nuniform sampler2D glossinessMap;\n #endif\n#endif\n#ifdef METALNESSMAP_ENABLED\nuniform sampler2D metalnessMap;\n#endif\n#ifdef OCCLUSIONMAP_ENABLED\nuniform sampler2D occlusionMap;\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\nuniform samplerCube environmentMap;\n #ifdef PARALLAX_CORRECTED\nuniform vec3 environmentBoxMin;\nuniform vec3 environmentBoxMax;\n #endif\n#endif\n#ifdef BRDFLOOKUP_ENABLED\nuniform sampler2D brdfLookup;\n#endif\n#ifdef EMISSIVEMAP_ENABLED\nuniform sampler2D emissiveMap;\n#endif\n#ifdef SSAOMAP_ENABLED\nuniform sampler2D ssaoMap;\nuniform vec4 viewport : VIEWPORT;\n#endif\n#ifdef AOMAP_ENABLED\nuniform sampler2D aoMap;\nuniform float aoIntensity;\n#endif\nuniform vec3 color : [1.0, 1.0, 1.0];\nuniform float alpha : 1.0;\n#ifdef ALPHA_TEST\nuniform float alphaCutoff: 0.9;\n#endif\n#ifdef USE_METALNESS\nuniform float metalness : 0.0;\n#else\nuniform vec3 specularColor : [0.1, 0.1, 0.1];\n#endif\nuniform vec3 emission : [0.0, 0.0, 0.0];\nuniform float emissionIntensity: 1;\nuniform float lineWidth : 0.0;\nuniform vec4 lineColor : [0.0, 0.0, 0.0, 0.6];\n#ifdef ENVIRONMENTMAP_PREFILTER\nuniform float maxMipmapLevel: 5;\n#endif\n@import clay.standard.chunk.light_header\n@import clay.util.calculate_attenuation\n@import clay.util.edge_factor\n@import clay.util.rgbm\n@import clay.util.srgb\n@import clay.plugin.compute_shadow_map\n@import clay.util.parallax_correct\n@import clay.util.ACES\nfloat G_Smith(float g, float ndv, float ndl)\n{\n float roughness = 1.0 - g;\n float k = roughness * roughness / 2.0;\n float G1V = ndv / (ndv * (1.0 - k) + k);\n float G1L = ndl / (ndl * (1.0 - k) + k);\n return G1L * G1V;\n}\nvec3 F_Schlick(float ndv, vec3 spec) {\n return spec + (1.0 - spec) * pow(1.0 - ndv, 5.0);\n}\nfloat D_Phong(float g, float ndh) {\n float a = pow(8192.0, g);\n return (a + 2.0) / 8.0 * pow(ndh, a);\n}\nfloat D_GGX(float g, float ndh) {\n float r = 1.0 - g;\n float a = r * r;\n float tmp = ndh * ndh * (a - 1.0) + 1.0;\n return a / (PI * tmp * tmp);\n}\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\nuniform float parallaxOcclusionScale : 0.02;\nuniform float parallaxMaxLayers : 20;\nuniform float parallaxMinLayers : 5;\nuniform sampler2D parallaxOcclusionMap;\nmat3 transpose(in mat3 inMat)\n{\n vec3 i0 = inMat[0];\n vec3 i1 = inMat[1];\n vec3 i2 = inMat[2];\n return mat3(\n vec3(i0.x, i1.x, i2.x),\n vec3(i0.y, i1.y, i2.y),\n vec3(i0.z, i1.z, i2.z)\n );\n}\nvec2 parallaxUv(vec2 uv, vec3 viewDir)\n{\n float numLayers = mix(parallaxMaxLayers, parallaxMinLayers, abs(dot(vec3(0.0, 0.0, 1.0), viewDir)));\n float layerHeight = 1.0 / numLayers;\n float curLayerHeight = 0.0;\n vec2 deltaUv = viewDir.xy * parallaxOcclusionScale / (viewDir.z * numLayers);\n vec2 curUv = uv;\n float height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n for (int i = 0; i < 30; i++) {\n curLayerHeight += layerHeight;\n curUv -= deltaUv;\n height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n if (height < curLayerHeight) {\n break;\n }\n }\n vec2 prevUv = curUv + deltaUv;\n float next = height - curLayerHeight;\n float prev = 1.0 - texture2D(parallaxOcclusionMap, prevUv).r - curLayerHeight + layerHeight;\n return mix(curUv, prevUv, next / (next - prev));\n}\n#endif\nvoid main() {\n vec4 albedoColor = vec4(color, alpha);\n#ifdef VERTEX_COLOR\n albedoColor *= v_Color;\n#endif\n#ifdef SRGB_DECODE\n albedoColor = sRGBToLinear(albedoColor);\n#endif\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n vec2 uv = v_Texcoord;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n mat3 tbn = mat3(v_Tangent, v_Bitangent, v_Normal);\n#endif\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\n uv = parallaxUv(v_Texcoord, normalize(transpose(tbn) * -V));\n#endif\n#ifdef DIFFUSEMAP_ENABLED\n vec4 texel = texture2D(diffuseMap, uv);\n #ifdef SRGB_DECODE\n texel = sRGBToLinear(texel);\n #endif\n albedoColor.rgb *= texel.rgb;\n #ifdef DIFFUSEMAP_ALPHA_ALPHA\n albedoColor.a *= texel.a;\n #endif\n#endif\n#ifdef USE_METALNESS\n float m = metalness;\n #ifdef METALNESSMAP_ENABLED\n float m2 = texture2D(metalnessMap, uv)[METALNESS_CHANNEL];\n m = clamp(m2 + (m - 0.5) * 2.0, 0.0, 1.0);\n #endif\n vec3 baseColor = albedoColor.rgb;\n albedoColor.rgb = baseColor * (1.0 - m);\n vec3 spec = mix(vec3(0.04), baseColor, m);\n#else\n vec3 spec = specularColor;\n#endif\n#ifdef USE_ROUGHNESS\n float g = clamp(1.0 - roughness, 0.0, 1.0);\n #ifdef ROUGHNESSMAP_ENABLED\n float g2 = 1.0 - texture2D(roughnessMap, uv)[ROUGHNESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#else\n float g = glossiness;\n #ifdef GLOSSINESSMAP_ENABLED\n float g2 = texture2D(glossinessMap, uv)[GLOSSINESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#endif\n#ifdef SPECULARMAP_ENABLED\n spec *= sRGBToLinear(texture2D(specularMap, uv)).rgb;\n#endif\n vec3 N = v_Normal;\n#ifdef DOUBLE_SIDED\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n#ifdef NORMALMAP_ENABLED\n if (dot(v_Tangent, v_Tangent) > 0.0) {\n vec3 normalTexel = texture2D(normalMap, uv).xyz;\n if (dot(normalTexel, normalTexel) > 0.0) { N = (normalTexel * 2.0 - 1.0);\n N = normalize(N * vec3(normalScale, normalScale, 1.0));\n tbn[1] = -tbn[1];\n N = normalize(tbn * N);\n }\n }\n#endif\n vec3 diffuseTerm = vec3(0.0, 0.0, 0.0);\n vec3 specularTerm = vec3(0.0, 0.0, 0.0);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n vec3 fresnelTerm = F_Schlick(ndv, spec);\n#ifdef AMBIENT_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += ambientLightColor[_idx_];\n }}\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += calcAmbientSHLight(_idx_, N) * ambientSHLightColor[_idx_];\n }}\n#endif\n#ifdef POINT_LIGHT_COUNT\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsPoint[POINT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfPointLights(v_WorldPosition, shadowContribsPoint);\n }\n#endif\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_COUNT; _idx_++)\n {{\n vec3 lightPosition = pointLightPosition[_idx_];\n vec3 lc = pointLightColor[_idx_];\n float range = pointLightRange[_idx_];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsPoint[_idx_];\n }\n#endif\n vec3 li = lc * ndl * attenuation * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++)\n {{\n vec3 L = -normalize(directionalLightDirection[_idx_]);\n vec3 lc = directionalLightColor[_idx_];\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsDir[_idx_];\n }\n#endif\n vec3 li = lc * ndl * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef SPOT_LIGHT_COUNT\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsSpot[SPOT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfSpotLights(v_WorldPosition, shadowContribsSpot);\n }\n#endif\n for(int i = 0; i < SPOT_LIGHT_COUNT; i++)\n {\n vec3 lightPosition = spotLightPosition[i];\n vec3 spotLightDirection = -normalize(spotLightDirection[i]);\n vec3 lc = spotLightColor[i];\n float range = spotLightRange[i];\n float a = spotLightUmbraAngleCosine[i];\n float b = spotLightPenumbraAngleCosine[i];\n float falloffFactor = spotLightFalloffFactor[i];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n float c = dot(spotLightDirection, L);\n float falloff;\n falloff = clamp((c - a) /(b - a), 0.0, 1.0);\n falloff = pow(falloff, falloffFactor);\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsSpot[i];\n }\n#endif\n vec3 li = lc * attenuation * (1.0 - falloff) * shadowContrib * ndl;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }\n#endif\n vec4 outColor = albedoColor;\n outColor.rgb *= max(diffuseTerm, vec3(0.0));\n outColor.rgb += max(specularTerm, vec3(0.0));\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n vec3 L = reflect(-V, N);\n float rough2 = clamp(1.0 - g, 0.0, 1.0);\n float bias2 = rough2 * 5.0;\n vec2 brdfParam2 = texture2D(ambientCubemapLightBRDFLookup[0], vec2(rough2, ndv)).xy;\n vec3 envWeight2 = spec * brdfParam2.x + brdfParam2.y;\n vec3 envTexel2;\n for(int _idx_ = 0; _idx_ < AMBIENT_CUBEMAP_LIGHT_COUNT; _idx_++)\n {{\n #ifdef SUPPORT_TEXTURE_LOD\n envTexel2 = RGBMDecode(textureCubeLodEXT(ambientCubemapLightCubemap[_idx_], L, bias2), 8.12);\n #else\n envTexel2 = RGBMDecode(textureCube(ambientCubemapLightCubemap[_idx_], L), 8.12);\n #endif\n outColor.rgb += ambientCubemapLightColor[_idx_] * envTexel2 * envWeight2;\n }}\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\n vec3 envWeight = g * fresnelTerm;\n vec3 L = reflect(-V, N);\n #ifdef PARALLAX_CORRECTED\n L = parallaxCorrect(L, v_WorldPosition, environmentBoxMin, environmentBoxMax);\n#endif\n #ifdef ENVIRONMENTMAP_PREFILTER\n float rough = clamp(1.0 - g, 0.0, 1.0);\n float bias = rough * maxMipmapLevel;\n #ifdef SUPPORT_TEXTURE_LOD\n vec3 envTexel = decodeHDR(textureCubeLodEXT(environmentMap, L, bias)).rgb;\n #else\n vec3 envTexel = decodeHDR(textureCube(environmentMap, L)).rgb;\n #endif\n #ifdef BRDFLOOKUP_ENABLED\n vec2 brdfParam = texture2D(brdfLookup, vec2(rough, ndv)).xy;\n envWeight = spec * brdfParam.x + brdfParam.y;\n #endif\n #else\n vec3 envTexel = textureCube(environmentMap, L).xyz;\n #endif\n outColor.rgb += envTexel * envWeight;\n#endif\n float aoFactor = 1.0;\n#ifdef SSAOMAP_ENABLED\n aoFactor = min(texture2D(ssaoMap, (gl_FragCoord.xy - viewport.xy) / viewport.zw).r, aoFactor);\n#endif\n#ifdef AOMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(aoMap, v_Texcoord2).r) * aoIntensity, 0.0, 1.0), aoFactor);\n#endif\n#ifdef OCCLUSIONMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(occlusionMap, v_Texcoord).r), 0.0, 1.0), aoFactor);\n#endif\n outColor.rgb *= aoFactor;\n vec3 lEmission = emission;\n#ifdef EMISSIVEMAP_ENABLED\n lEmission *= texture2D(emissiveMap, uv).rgb;\n#endif\n outColor.rgb += lEmission * emissionIntensity;\n if(lineWidth > 0.)\n {\n outColor.rgb = mix(outColor.rgb, lineColor.rgb, (1.0 - edgeFactor(lineWidth)) * lineColor.a);\n }\n#ifdef ALPHA_TEST\n if (outColor.a < alphaCutoff) {\n discard;\n }\n#endif\n#ifdef TONEMAPPING\n outColor.rgb = ACESToneMapping(outColor.rgb);\n#endif\n#ifdef SRGB_ENCODE\n outColor = linearTosRGB(outColor);\n#endif\n gl_FragColor = encodeHDR(outColor);\n}\n@end\n@export clay.standardMR.vertex\n@import clay.standard.vertex\n@end\n@export clay.standardMR.fragment\n#define USE_METALNESS\n#define USE_ROUGHNESS\n@import clay.standard.fragment\n@end"; // Import standard shader Shader['import'](standardEssl); @@ -20768,7 +20801,8 @@ function getAccessorData(json, lib, accessorIdx, isIndices) { if (quantizeExtension) { var decodedArr = new vendor.Float32Array(size * accessorInfo.count); var decodeMatrix = quantizeExtension.decodeMatrix; - var decodeOffset, decodeScale; + var decodeOffset; + var decodeScale; var decodeOffset = new Array(size); var decodeScale = new Array(size); for (var k = 0; k < size; k++) { @@ -20786,6 +20820,34 @@ function getAccessorData(json, lib, accessorIdx, isIndices) { return arr; } +function base64ToBinary(input, charStart) { + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + var lookup = new Uint8Array(130); + for (var i = 0; i < chars.length; i++) { + lookup[chars.charCodeAt(i)] = i; + } + // Ignore + var len = input.length - charStart; + if (input.charAt(len - 1) === '=') { len--; } + if (input.charAt(len - 1) === '=') { len--; } + + var uarray = new Uint8Array((len / 4) * 3); + + for (var i = 0, j = charStart; i < uarray.length;) { + var c1 = lookup[input.charCodeAt(j++)]; + var c2 = lookup[input.charCodeAt(j++)]; + var c3 = lookup[input.charCodeAt(j++)]; + var c4 = lookup[input.charCodeAt(j++)]; + + uarray[i++] = (c1 << 2) | (c2 >> 4); + uarray[i++] = ((c2 & 15) << 4) | (c3 >> 2); + uarray[i++] = ((c3 & 3) << 6) | c4; + } + + return uarray.buffer; +} + + /** * @typedef {Object} clay.loader.GLTF.Result * @property {Object} json @@ -21019,7 +21081,7 @@ function () { loading++; var path = bufferInfo.uri; - self._loadBuffer(path, function (buffer) { + self._loadBuffers(path, function (buffer) { lib.buffers[idx] = buffer; checkLoad(); }, checkLoad); @@ -21101,7 +21163,7 @@ function () { * Binary file path resolver. User can override it * @param {string} path */ - resolveBinaryPath: function (path) { + resolveBufferPath: function (path) { if (path && path.match(/^data:(.*?)base64,/)) { return path; } @@ -21129,18 +21191,15 @@ function () { return util$1.relative2absolute(path, rootPath); }, - _getShader: function () { - if (typeof this.shader === 'string') { - return this.shaderLibrary.get(this.shader); - } - else if (this.shader instanceof Shader) { - return this.shader; - } - }, - - _loadBuffer: function (path, onsuccess, onerror) { + /** + * Buffer loader + * @param {string} + * @param {Function} onsuccess + * @param {Function} onerror + */ + loadBuffer: function (path, onsuccess, onerror) { vendor.request.get({ - url: this.resolveBinaryPath(path), + url: path, responseType: 'arraybuffer', onload: function (buffer) { onsuccess && onsuccess(buffer); @@ -21151,6 +21210,32 @@ function () { }); }, + _getShader: function () { + if (typeof this.shader === 'string') { + return this.shaderLibrary.get(this.shader); + } + else if (this.shader instanceof Shader) { + return this.shader; + } + }, + + _loadBuffers: function (path, onsuccess, onerror) { + var base64Prefix = 'data:application/octet-stream;base64,'; + var strStart = path.substr(0, base64Prefix.length); + if (strStart === base64Prefix) { + onsuccess( + base64ToBinary(path, base64Prefix.length) + ); + } + else { + this.loadBuffer( + this.resolveBufferPath(path), + onsuccess, + onerror + ); + } + }, + // https://github.com/KhronosGroup/glTF/issues/100 // https://github.com/KhronosGroup/glTF/issues/193 _parseSkins: function (json, lib) { @@ -21494,7 +21579,7 @@ function () { var material; var diffuseMap, glossinessMap, specularMap, normalMap, emissiveMap, occlusionMap; var enabledTextures = []; - // TODO texCoord + // TODO texCoord if (specularGlossinessMatInfo.diffuseTexture) { diffuseMap = lib.textures[specularGlossinessMatInfo.diffuseTexture.index] || null; diffuseMap && enabledTextures.push('diffuseMap'); @@ -22780,7 +22865,9 @@ var Skybox$1 = Mesh.extend(function () { environmentMap: null, - culling: false + culling: false, + + _dummyCamera: new Perspective$1() }; }, function () { var scene = this.scene; @@ -22851,8 +22938,17 @@ var Skybox$1 = Mesh.extend(function () { }, renderSkybox: function (renderer, camera) { + var dummyCamera = this._dummyCamera; + dummyCamera.aspect = renderer.getViewportAspect(); + dummyCamera.fov = camera.fov || 50; + dummyCamera.updateProjectionMatrix(); + Matrix4.invert(dummyCamera.invProjectionMatrix, dummyCamera.projectionMatrix); + dummyCamera.worldTransform.copy(camera.worldTransform); + dummyCamera.viewMatrix.copy(camera.viewMatrix); + this.position.copy(camera.getWorldPosition()); this.update(); + // Don't remember to disable blend renderer.gl.disable(renderer.gl.BLEND); if (this.material.get('lod') > 0) { @@ -22861,7 +22957,7 @@ var Skybox$1 = Mesh.extend(function () { else { this.material.undefine('fragment', 'LOD'); } - renderer.renderPass([this], camera); + renderer.renderPass([this], dummyCamera); } }); @@ -24113,7 +24209,7 @@ function isPowerOfTwo$2(width, height) { (height & (height-1)) === 0; } -var shadowmapEssl = "@export clay.sm.depth.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\n@import clay.chunk.skinning_header\nvarying vec4 v_ViewPosition;\nvarying vec2 v_Texcoord;\nvoid main(){\n vec3 skinnedPosition = position;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n#endif\n v_ViewPosition = worldViewProjection * vec4(skinnedPosition, 1.0);\n gl_Position = v_ViewPosition;\n v_Texcoord = texcoord;\n}\n@end\n@export clay.sm.depth.fragment\nvarying vec4 v_ViewPosition;\nvarying vec2 v_Texcoord;\nuniform float bias : 0.001;\nuniform float slopeScale : 1.0;\nuniform sampler2D alphaMap;\nuniform float alphaCutoff: 0.0;\n@import clay.util.encode_float\nvoid main(){\n float depth = v_ViewPosition.z / v_ViewPosition.w;\n if (alphaCutoff > 0.0) {\n if (texture2D(alphaMap, v_Texcoord).a <= alphaCutoff) {\n discard;\n }\n }\n#ifdef USE_VSM\n depth = depth * 0.5 + 0.5;\n float moment1 = depth;\n float moment2 = depth * depth;\n #ifdef SUPPORT_STANDARD_DERIVATIVES\n float dx = dFdx(depth);\n float dy = dFdy(depth);\n moment2 += 0.25*(dx*dx+dy*dy);\n #endif\n gl_FragColor = vec4(moment1, moment2, 0.0, 1.0);\n#else\n #ifdef SUPPORT_STANDARD_DERIVATIVES\n float dx = dFdx(depth);\n float dy = dFdy(depth);\n depth += sqrt(dx*dx + dy*dy) * slopeScale + bias;\n #else\n depth += bias;\n #endif\n gl_FragColor = encodeFloat(depth * 0.5 + 0.5);\n#endif\n}\n@end\n@export clay.sm.debug_depth\nuniform sampler2D depthMap;\nvarying vec2 v_Texcoord;\n@import clay.util.decode_float\nvoid main() {\n vec4 tex = texture2D(depthMap, v_Texcoord);\n#ifdef USE_VSM\n gl_FragColor = vec4(tex.rgb, 1.0);\n#else\n float depth = decodeFloat(tex);\n gl_FragColor = vec4(depth, depth, depth, 1.0);\n#endif\n}\n@end\n@export clay.sm.distance.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 world : WORLD;\nattribute vec3 position : POSITION;\n@import clay.chunk.skinning_header\nvarying vec3 v_WorldPosition;\nvoid main (){\n vec3 skinnedPosition = position;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition , 1.0);\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n}\n@end\n@export clay.sm.distance.fragment\nuniform vec3 lightPosition;\nuniform float range : 100;\nvarying vec3 v_WorldPosition;\n@import clay.util.encode_float\nvoid main(){\n float dist = distance(lightPosition, v_WorldPosition);\n#ifdef USE_VSM\n gl_FragColor = vec4(dist, dist * dist, 0.0, 0.0);\n#else\n dist = dist / range;\n gl_FragColor = encodeFloat(dist);\n#endif\n}\n@end\n@export clay.plugin.shadow_map_common\n@import clay.util.decode_float\nfloat tapShadowMap(sampler2D map, vec2 uv, float z){\n vec4 tex = texture2D(map, uv);\n return step(z, decodeFloat(tex) * 2.0 - 1.0);\n}\nfloat pcf(sampler2D map, vec2 uv, float z, float textureSize, vec2 scale) {\n float shadowContrib = tapShadowMap(map, uv, z);\n vec2 offset = vec2(1.0 / textureSize) * scale;\n#ifdef PCF_KERNEL_SIZE\n for (int _idx_ = 0; _idx_ < PCF_KERNEL_SIZE; _idx_++) {{\n shadowContrib += tapShadowMap(map, uv + offset * pcfKernel[_idx_], z);\n }}\n return shadowContrib / float(PCF_KERNEL_SIZE + 1);\n#else\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, 0.0), z);\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(0.0, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, 0.0), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, -offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, -offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(0.0, -offset.y), z);\n return shadowContrib / 9.0;\n#endif\n}\nfloat pcf(sampler2D map, vec2 uv, float z, float textureSize) {\n return pcf(map, uv, z, textureSize, vec2(1.0));\n}\nfloat chebyshevUpperBound(vec2 moments, float z){\n float p = 0.0;\n z = z * 0.5 + 0.5;\n if (z <= moments.x) {\n p = 1.0;\n }\n float variance = moments.y - moments.x * moments.x;\n variance = max(variance, 0.0000001);\n float mD = moments.x - z;\n float pMax = variance / (variance + mD * mD);\n pMax = clamp((pMax-0.4)/(1.0-0.4), 0.0, 1.0);\n return max(p, pMax);\n}\nfloat computeShadowContrib(\n sampler2D map, mat4 lightVPM, vec3 position, float textureSize, vec2 scale, vec2 offset\n) {\n vec4 posInLightSpace = lightVPM * vec4(position, 1.0);\n posInLightSpace.xyz /= posInLightSpace.w;\n float z = posInLightSpace.z;\n if(all(greaterThan(posInLightSpace.xyz, vec3(-0.99, -0.99, -1.0))) &&\n all(lessThan(posInLightSpace.xyz, vec3(0.99, 0.99, 1.0)))){\n vec2 uv = (posInLightSpace.xy+1.0) / 2.0;\n #ifdef USE_VSM\n vec2 moments = texture2D(map, uv * scale + offset).xy;\n return chebyshevUpperBound(moments, z);\n #else\n return pcf(map, uv * scale + offset, z, textureSize, scale);\n #endif\n }\n return 1.0;\n}\nfloat computeShadowContrib(sampler2D map, mat4 lightVPM, vec3 position, float textureSize) {\n return computeShadowContrib(map, lightVPM, position, textureSize, vec2(1.0), vec2(0.0));\n}\nfloat computeShadowContribOmni(samplerCube map, vec3 direction, float range)\n{\n float dist = length(direction);\n vec4 shadowTex = textureCube(map, direction);\n#ifdef USE_VSM\n vec2 moments = shadowTex.xy;\n float variance = moments.y - moments.x * moments.x;\n float mD = moments.x - dist;\n float p = variance / (variance + mD * mD);\n if(moments.x + 0.001 < dist){\n return clamp(p, 0.0, 1.0);\n }else{\n return 1.0;\n }\n#else\n return step(dist, (decodeFloat(shadowTex) + 0.0002) * range);\n#endif\n}\n@end\n@export clay.plugin.compute_shadow_map\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT) || defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT) || defined(POINT_LIGHT_SHADOWMAP_COUNT)\n#ifdef SPOT_LIGHT_SHADOWMAP_COUNT\nuniform sampler2D spotLightShadowMaps[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform mat4 spotLightMatrices[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform float spotLightShadowMapSizes[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\n#ifdef DIRECTIONAL_LIGHT_SHADOWMAP_COUNT\n#if defined(SHADOW_CASCADE)\nuniform sampler2D directionalLightShadowMaps[1]:unconfigurable;\nuniform mat4 directionalLightMatrices[SHADOW_CASCADE]:unconfigurable;\nuniform float directionalLightShadowMapSizes[1]:unconfigurable;\nuniform float shadowCascadeClipsNear[SHADOW_CASCADE]:unconfigurable;\nuniform float shadowCascadeClipsFar[SHADOW_CASCADE]:unconfigurable;\n#else\nuniform sampler2D directionalLightShadowMaps[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform mat4 directionalLightMatrices[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform float directionalLightShadowMapSizes[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\n#endif\n#ifdef POINT_LIGHT_SHADOWMAP_COUNT\nuniform samplerCube pointLightShadowMaps[POINT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\nuniform bool shadowEnabled : true;\n#ifdef PCF_KERNEL_SIZE\nuniform vec2 pcfKernel[PCF_KERNEL_SIZE];\n#endif\n@import clay.plugin.shadow_map_common\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\nvoid computeShadowOfSpotLights(vec3 position, inout float shadowContribs[SPOT_LIGHT_COUNT] ) {\n float shadowContrib;\n for(int _idx_ = 0; _idx_ < SPOT_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n shadowContrib = computeShadowContrib(\n spotLightShadowMaps[_idx_], spotLightMatrices[_idx_], position,\n spotLightShadowMapSizes[_idx_]\n );\n shadowContribs[_idx_] = shadowContrib;\n }}\n for(int _idx_ = SPOT_LIGHT_SHADOWMAP_COUNT; _idx_ < SPOT_LIGHT_COUNT; _idx_++){{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n#ifdef SHADOW_CASCADE\nvoid computeShadowOfDirectionalLights(vec3 position, inout float shadowContribs[DIRECTIONAL_LIGHT_COUNT]){\n float depth = (2.0 * gl_FragCoord.z - gl_DepthRange.near - gl_DepthRange.far)\n / (gl_DepthRange.far - gl_DepthRange.near);\n float shadowContrib;\n shadowContribs[0] = 1.0;\n for (int _idx_ = 0; _idx_ < SHADOW_CASCADE; _idx_++) {{\n if (\n depth >= shadowCascadeClipsNear[_idx_] &&\n depth <= shadowCascadeClipsFar[_idx_]\n ) {\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[0], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[0],\n vec2(1.0 / float(SHADOW_CASCADE), 1.0),\n vec2(float(_idx_) / float(SHADOW_CASCADE), 0.0)\n );\n shadowContribs[0] = shadowContrib;\n }\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#else\nvoid computeShadowOfDirectionalLights(vec3 position, inout float shadowContribs[DIRECTIONAL_LIGHT_COUNT]){\n float shadowContrib;\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[_idx_], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[_idx_]\n );\n shadowContribs[_idx_] = shadowContrib;\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\nvoid computeShadowOfPointLights(vec3 position, inout float shadowContribs[POINT_LIGHT_COUNT] ){\n vec3 lightPosition;\n vec3 direction;\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n lightPosition = pointLightPosition[_idx_];\n direction = position - lightPosition;\n shadowContribs[_idx_] = computeShadowContribOmni(pointLightShadowMaps[_idx_], direction, pointLightRange[_idx_]);\n }}\n for(int _idx_ = POINT_LIGHT_SHADOWMAP_COUNT; _idx_ < POINT_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n@end"; +var shadowmapEssl = "@export clay.sm.depth.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\nuniform vec2 uvRepeat = vec2(1.0, 1.0);\nuniform vec2 uvOffset = vec2(0.0, 0.0);\n@import clay.chunk.skinning_header\nvarying vec4 v_ViewPosition;\nvarying vec2 v_Texcoord;\nvoid main(){\n vec3 skinnedPosition = position;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n#endif\n v_ViewPosition = worldViewProjection * vec4(skinnedPosition, 1.0);\n gl_Position = v_ViewPosition;\n v_Texcoord = texcoord * uvRepeat + uvOffset;\n}\n@end\n@export clay.sm.depth.fragment\nvarying vec4 v_ViewPosition;\nvarying vec2 v_Texcoord;\nuniform float bias : 0.001;\nuniform float slopeScale : 1.0;\nuniform sampler2D alphaMap;\nuniform float alphaCutoff: 0.0;\n@import clay.util.encode_float\nvoid main(){\n float depth = v_ViewPosition.z / v_ViewPosition.w;\n if (alphaCutoff > 0.0) {\n if (texture2D(alphaMap, v_Texcoord).a <= alphaCutoff) {\n discard;\n }\n }\n#ifdef USE_VSM\n depth = depth * 0.5 + 0.5;\n float moment1 = depth;\n float moment2 = depth * depth;\n #ifdef SUPPORT_STANDARD_DERIVATIVES\n float dx = dFdx(depth);\n float dy = dFdy(depth);\n moment2 += 0.25*(dx*dx+dy*dy);\n #endif\n gl_FragColor = vec4(moment1, moment2, 0.0, 1.0);\n#else\n #ifdef SUPPORT_STANDARD_DERIVATIVES\n float dx = dFdx(depth);\n float dy = dFdy(depth);\n depth += sqrt(dx*dx + dy*dy) * slopeScale + bias;\n #else\n depth += bias;\n #endif\n gl_FragColor = encodeFloat(depth * 0.5 + 0.5);\n#endif\n}\n@end\n@export clay.sm.debug_depth\nuniform sampler2D depthMap;\nvarying vec2 v_Texcoord;\n@import clay.util.decode_float\nvoid main() {\n vec4 tex = texture2D(depthMap, v_Texcoord);\n#ifdef USE_VSM\n gl_FragColor = vec4(tex.rgb, 1.0);\n#else\n float depth = decodeFloat(tex);\n gl_FragColor = vec4(depth, depth, depth, 1.0);\n#endif\n}\n@end\n@export clay.sm.distance.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 world : WORLD;\nattribute vec3 position : POSITION;\n@import clay.chunk.skinning_header\nvarying vec3 v_WorldPosition;\nvoid main (){\n vec3 skinnedPosition = position;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition , 1.0);\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n}\n@end\n@export clay.sm.distance.fragment\nuniform vec3 lightPosition;\nuniform float range : 100;\nvarying vec3 v_WorldPosition;\n@import clay.util.encode_float\nvoid main(){\n float dist = distance(lightPosition, v_WorldPosition);\n#ifdef USE_VSM\n gl_FragColor = vec4(dist, dist * dist, 0.0, 0.0);\n#else\n dist = dist / range;\n gl_FragColor = encodeFloat(dist);\n#endif\n}\n@end\n@export clay.plugin.shadow_map_common\n@import clay.util.decode_float\nfloat tapShadowMap(sampler2D map, vec2 uv, float z){\n vec4 tex = texture2D(map, uv);\n return step(z, decodeFloat(tex) * 2.0 - 1.0);\n}\nfloat pcf(sampler2D map, vec2 uv, float z, float textureSize, vec2 scale) {\n float shadowContrib = tapShadowMap(map, uv, z);\n vec2 offset = vec2(1.0 / textureSize) * scale;\n#ifdef PCF_KERNEL_SIZE\n for (int _idx_ = 0; _idx_ < PCF_KERNEL_SIZE; _idx_++) {{\n shadowContrib += tapShadowMap(map, uv + offset * pcfKernel[_idx_], z);\n }}\n return shadowContrib / float(PCF_KERNEL_SIZE + 1);\n#else\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, 0.0), z);\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(0.0, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, 0.0), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, -offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, -offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(0.0, -offset.y), z);\n return shadowContrib / 9.0;\n#endif\n}\nfloat pcf(sampler2D map, vec2 uv, float z, float textureSize) {\n return pcf(map, uv, z, textureSize, vec2(1.0));\n}\nfloat chebyshevUpperBound(vec2 moments, float z){\n float p = 0.0;\n z = z * 0.5 + 0.5;\n if (z <= moments.x) {\n p = 1.0;\n }\n float variance = moments.y - moments.x * moments.x;\n variance = max(variance, 0.0000001);\n float mD = moments.x - z;\n float pMax = variance / (variance + mD * mD);\n pMax = clamp((pMax-0.4)/(1.0-0.4), 0.0, 1.0);\n return max(p, pMax);\n}\nfloat computeShadowContrib(\n sampler2D map, mat4 lightVPM, vec3 position, float textureSize, vec2 scale, vec2 offset\n) {\n vec4 posInLightSpace = lightVPM * vec4(position, 1.0);\n posInLightSpace.xyz /= posInLightSpace.w;\n float z = posInLightSpace.z;\n if(all(greaterThan(posInLightSpace.xyz, vec3(-0.99, -0.99, -1.0))) &&\n all(lessThan(posInLightSpace.xyz, vec3(0.99, 0.99, 1.0)))){\n vec2 uv = (posInLightSpace.xy+1.0) / 2.0;\n #ifdef USE_VSM\n vec2 moments = texture2D(map, uv * scale + offset).xy;\n return chebyshevUpperBound(moments, z);\n #else\n return pcf(map, uv * scale + offset, z, textureSize, scale);\n #endif\n }\n return 1.0;\n}\nfloat computeShadowContrib(sampler2D map, mat4 lightVPM, vec3 position, float textureSize) {\n return computeShadowContrib(map, lightVPM, position, textureSize, vec2(1.0), vec2(0.0));\n}\nfloat computeShadowContribOmni(samplerCube map, vec3 direction, float range)\n{\n float dist = length(direction);\n vec4 shadowTex = textureCube(map, direction);\n#ifdef USE_VSM\n vec2 moments = shadowTex.xy;\n float variance = moments.y - moments.x * moments.x;\n float mD = moments.x - dist;\n float p = variance / (variance + mD * mD);\n if(moments.x + 0.001 < dist){\n return clamp(p, 0.0, 1.0);\n }else{\n return 1.0;\n }\n#else\n return step(dist, (decodeFloat(shadowTex) + 0.0002) * range);\n#endif\n}\n@end\n@export clay.plugin.compute_shadow_map\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT) || defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT) || defined(POINT_LIGHT_SHADOWMAP_COUNT)\n#ifdef SPOT_LIGHT_SHADOWMAP_COUNT\nuniform sampler2D spotLightShadowMaps[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform mat4 spotLightMatrices[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform float spotLightShadowMapSizes[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\n#ifdef DIRECTIONAL_LIGHT_SHADOWMAP_COUNT\n#if defined(SHADOW_CASCADE)\nuniform sampler2D directionalLightShadowMaps[1]:unconfigurable;\nuniform mat4 directionalLightMatrices[SHADOW_CASCADE]:unconfigurable;\nuniform float directionalLightShadowMapSizes[1]:unconfigurable;\nuniform float shadowCascadeClipsNear[SHADOW_CASCADE]:unconfigurable;\nuniform float shadowCascadeClipsFar[SHADOW_CASCADE]:unconfigurable;\n#else\nuniform sampler2D directionalLightShadowMaps[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform mat4 directionalLightMatrices[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform float directionalLightShadowMapSizes[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\n#endif\n#ifdef POINT_LIGHT_SHADOWMAP_COUNT\nuniform samplerCube pointLightShadowMaps[POINT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\nuniform bool shadowEnabled : true;\n#ifdef PCF_KERNEL_SIZE\nuniform vec2 pcfKernel[PCF_KERNEL_SIZE];\n#endif\n@import clay.plugin.shadow_map_common\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\nvoid computeShadowOfSpotLights(vec3 position, inout float shadowContribs[SPOT_LIGHT_COUNT] ) {\n float shadowContrib;\n for(int _idx_ = 0; _idx_ < SPOT_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n shadowContrib = computeShadowContrib(\n spotLightShadowMaps[_idx_], spotLightMatrices[_idx_], position,\n spotLightShadowMapSizes[_idx_]\n );\n shadowContribs[_idx_] = shadowContrib;\n }}\n for(int _idx_ = SPOT_LIGHT_SHADOWMAP_COUNT; _idx_ < SPOT_LIGHT_COUNT; _idx_++){{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n#ifdef SHADOW_CASCADE\nvoid computeShadowOfDirectionalLights(vec3 position, inout float shadowContribs[DIRECTIONAL_LIGHT_COUNT]){\n float depth = (2.0 * gl_FragCoord.z - gl_DepthRange.near - gl_DepthRange.far)\n / (gl_DepthRange.far - gl_DepthRange.near);\n float shadowContrib;\n shadowContribs[0] = 1.0;\n for (int _idx_ = 0; _idx_ < SHADOW_CASCADE; _idx_++) {{\n if (\n depth >= shadowCascadeClipsNear[_idx_] &&\n depth <= shadowCascadeClipsFar[_idx_]\n ) {\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[0], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[0],\n vec2(1.0 / float(SHADOW_CASCADE), 1.0),\n vec2(float(_idx_) / float(SHADOW_CASCADE), 0.0)\n );\n shadowContribs[0] = shadowContrib;\n }\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#else\nvoid computeShadowOfDirectionalLights(vec3 position, inout float shadowContribs[DIRECTIONAL_LIGHT_COUNT]){\n float shadowContrib;\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[_idx_], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[_idx_]\n );\n shadowContribs[_idx_] = shadowContrib;\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\nvoid computeShadowOfPointLights(vec3 position, inout float shadowContribs[POINT_LIGHT_COUNT] ){\n vec3 lightPosition;\n vec3 direction;\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n lightPosition = pointLightPosition[_idx_];\n direction = position - lightPosition;\n shadowContribs[_idx_] = computeShadowContribOmni(pointLightShadowMaps[_idx_], direction, pointLightRange[_idx_]);\n }}\n for(int _idx_ = POINT_LIGHT_SHADOWMAP_COUNT; _idx_ < POINT_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n@end"; var targets$2 = ['px', 'nx', 'py', 'ny', 'pz', 'nz']; @@ -24132,6 +24228,12 @@ function getDepthMaterialUniform(renderable, depthMaterial, symbol) { } return 0; } + else if (symbol === 'uvRepeat') { + return renderable.material.get('uvRepeat'); + } + else if (symbol === 'uvOffset') { + return renderable.material.get('uvOffset'); + } else { return depthMaterial.get(symbol); } @@ -25459,6 +25561,7 @@ var EVE_NAMES = ['click', 'dblclick', 'mouseover', 'mouseout', 'mousemove', /** * @typedef {Object} StandardMaterialMRConfig + * @property {string} [name] * @property {string} [shader='standardMR'] * @property {Color} [color] * @property {number} [alpha] @@ -26143,6 +26246,10 @@ App3D.prototype.createMaterial = function (matConfig) { var material = new Material({ shader: shader }); + if (matConfig.name) { + material.name = matConfig.name; + } + var texturesLoading = []; function makeTextureSetter(key) { return function (texture) { @@ -26285,6 +26392,7 @@ App3D.prototype.createSphere = function (material, parentNode, subdivision) { return this.createMesh(sphere, material, parentNode); }; +// TODO may be modified? /** * Create a plane mesh and add it to the scene or the given parent node. * @function @@ -33153,10 +33261,11 @@ var FreeControl = Base.extend(function() { this.trigger('change'); }, - _detectMovementChange: function () { + _detectMovementChange: function (frameTime) { if (this._moveForward || this._moveBackward || this._moveLeft || this._moveRight) { this.trigger('change'); } + this.update(frameTime); }, _keyDown: function(e) { @@ -33758,6 +33867,12 @@ var InfinitePlane = Mesh.extend({ })() }); +var MOUSE_BUTTON_KEY_MAP = { + left: 0, + middle: 1, + right: 2 +}; + function convertToArray(val) { if (!Array.isArray(val)) { val = [val, val]; @@ -33774,6 +33889,9 @@ var OrbitControl = Base.extend(function () { return /** @lends clay.plugin.OrbitControl# */ { + /** + * @type {clay.Timeline} + */ timeline: null, /** @@ -33804,6 +33922,22 @@ var OrbitControl = Base.extend(function () { */ maxDistance: 1000, + /** + * Only available when camera is orthographic + */ + maxOrthographicSize: 300, + + /** + * Only available when camera is orthographic + */ + minOrthographicSize: 30, + + /** + * Aspect of orthographic camera + * Only available when camera is orthographic + */ + orthographicAspect: 1, + /** * Minimum alpha rotation */ @@ -33838,6 +33972,9 @@ var OrbitControl = Base.extend(function () { */ autoRotateSpeed: 60, + panMouseButton: 'middle', + rotateMouseButton: 'left', + /** * Pan or rotate * @type {String} @@ -33915,6 +34052,9 @@ var OrbitControl = Base.extend(function () { if (this.timeline) { this.timeline.on('frame', this.update, this); } + if (this.target) { + this.decomposeTransform(); + } }, /** @@ -33957,6 +34097,23 @@ var OrbitControl = Base.extend(function () { this._needsUpdate = true; }, + /** + * Get size of orthographic viewing volume + * @return {number} + */ + getOrthographicSize: function () { + return this._orthoSize; + }, + + /** + * Set size of orthographic viewing volume + * @param {number} size + */ + setOrthographicSize: function (size) { + this._orthoSize = size; + this._needsUpdate = true; + }, + /** * Get alpha rotation * Alpha angle for top-down rotation. Positive to rotate to top. @@ -34022,6 +34179,7 @@ var OrbitControl = Base.extend(function () { 'autoRotateDirection', 'autoRotateSpeed', 'damping', 'minDistance', 'maxDistance', + 'minOrthographicSize', 'maxOrthographicSize', 'orthographicAspect', 'minAlpha', 'maxAlpha', 'minBeta', 'maxBeta', 'rotateSensitivity', 'zoomSensitivity', 'panSensitivity' ].forEach(function (key) { @@ -34033,6 +34191,9 @@ var OrbitControl = Base.extend(function () { if (opts.distance != null) { this.setDistance(opts.distance); } + if (opts.orthographicSize != null) { + this.setOrthographicSize(opts.orthographicSize); + } if (opts.alpha != null) { this.setAlpha(opts.alpha); @@ -34044,11 +34205,17 @@ var OrbitControl = Base.extend(function () { if (opts.center) { this.setCenter(opts.center); } + + if (this.target) { + this._updateTransform(); + this.target.update(); + } }, /** * @param {Object} opts * @param {number} opts.distance + * @param {number} opts.orthographicSize * @param {number} opts.alpha * @param {number} opts.beta * @param {Array.} opts.center @@ -34069,6 +34236,10 @@ var OrbitControl = Base.extend(function () { obj.distance = this.getDistance(); target.distance = opts.distance; } + if (opts.orthographicSize != null) { + obj.orthographicSize = this.getOrthographicSize(); + target.orthographicSize = opts.orthographicSize; + } if (opts.alpha != null) { obj.alpha = this.getAlpha(); target.alpha = opts.alpha; @@ -34095,6 +34266,9 @@ var OrbitControl = Base.extend(function () { if (obj.distance != null) { self.setDistance(obj.distance); } + if (obj.orthographicSize != null) { + self.setOrthographicSize(obj.orthographicSize); + } if (obj.center != null) { self.setCenter(obj.center); } @@ -34144,7 +34318,7 @@ var OrbitControl = Base.extend(function () { } // Fixed deltaTime - this._updateDistance(Math.min(deltaTime, 50)); + this._updateDistanceOrSize(Math.min(deltaTime, 50)); this._updatePan(Math.min(deltaTime, 50)); this._updateRotate(Math.min(deltaTime, 50)); @@ -34169,15 +34343,31 @@ var OrbitControl = Base.extend(function () { this._vectorDamping(velocity, this.damping); }, - _updateDistance: function (deltaTime) { + _updateDistanceOrSize: function (deltaTime) { this._setDistance(this._distance + this._zoomSpeed * deltaTime / 20); - this._zoomSpeed *= this.damping; + if (!(this.target instanceof Perspective$1)) { + this._setOrthoSize(this._orthoSize + this._zoomSpeed * deltaTime / 20); + } + + this._zoomSpeed *= Math.pow(this.damping, deltaTime / 16); }, _setDistance: function (distance) { this._distance = Math.max(Math.min(distance, this.maxDistance), this.minDistance); }, + _setOrthoSize: function (size) { + this._orthoSize = Math.max(Math.min(size, this.maxOrthographicSize), this.minOrthographicSize); + var camera = this.target; + var cameraHeight = this._orthoSize; + // TODO + var cameraWidth = cameraHeight * this.orthographicAspect; + camera.left = -cameraWidth / 2; + camera.right = cameraWidth / 2; + camera.top = cameraHeight / 2; + camera.bottom = -cameraHeight / 2; + }, + _updatePan: function (deltaTime) { var velocity = this._panVelocity; var len = this._distance; @@ -34241,15 +34431,6 @@ var OrbitControl = Base.extend(function () { return; } - // FIXME euler order...... - // FIXME alpha is not certain when beta is 90 or -90 - // var euler = new Vector3(); - // euler.eulerFromMat3( - // new Matrix3().fromQuat(this.target.rotation), 'ZYX' - // ); - // euler.eulerFromQuat( - // this.target.rotation.normalize(), 'ZYX' - // ); this.target.updateWorldTransform(); var forward = this.target.worldTransform.z; @@ -34263,6 +34444,9 @@ var OrbitControl = Base.extend(function () { this.setAlpha(this.getAlpha()); this._setDistance(this.target.position.dist(this._center)); + if (!(this.target instanceof Perspective$1)){ + this._setOrthoSize(this.target.top - this.target.bottom); + } }, _mouseDownHandler: function (e) { @@ -34282,12 +34466,10 @@ var OrbitControl = Base.extend(function () { this._processGesture(e, 'start'); } else { - // Left button. - if (e.button === 0) { + if (e.button === MOUSE_BUTTON_KEY_MAP[this.rotateMouseButton]) { this._mode = 'rotate'; } - // Middle button. - else if (e.button === 1) { + else if (e.button === MOUSE_BUTTON_KEY_MAP[this.panMouseButton]) { this._mode = 'pan'; /** @@ -34379,11 +34561,21 @@ var OrbitControl = Base.extend(function () { _zoomHandler: function (e, delta) { - var distance = Math.max(Math.min( - this._distance - this.minDistance, - this.maxDistance - this._distance - )); - this._zoomSpeed = delta * Math.max(distance / 40 * this.zoomSensitivity, 0.2); + var speed; + if (this.target instanceof Perspective$1) { + speed = Math.max(Math.max(Math.min( + this._distance - this.minDistance, + this.maxDistance - this._distance + )) / 20, 0.5); + } + else { + speed = Math.max(Math.max(Math.min( + this._orthoSize - this.minOrthographicSize, + this.maxOrthographicSize - this._orthoSize + )) / 20, 0.5); + } + + this._zoomSpeed = (delta > 0 ? -1 : 1) * speed * this.zoomSensitivity; this._rotating = false; @@ -35393,3 +35585,4 @@ var vr = { }; export { animation, application, async, Camera, camera, compositor, core, createCompositor, deferred, dep, FrameBuffer, Geometry, geometry, GeometryBase, Joint, Light, light, loader, Material, math, BoundingBox, Frustum, Matrix2, Matrix2d, Matrix3, Matrix4, Plane$1 as Plane, Quaternion, Ray, Value, Vector2, Vector3, Vector4, Mesh, Node, particle, picking, plugin, prePass, Renderable, Renderer, Scene, Shader, shader, Skeleton, StandardMaterial, StaticGeometry, Texture, Texture2D, TextureCube, Timeline, util, version, vr }; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xheWdsLmVzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvYW5pbWF0aW9uL2Vhc2luZy5qcyIsIi4uL3NyYy9hbmltYXRpb24vQ2xpcC5qcyIsIi4uL3NyYy9hbmltYXRpb24vQW5pbWF0b3IuanMiLCIuLi9zcmMvYW5pbWF0aW9uL0JsZW5kMURDbGlwLmpzIiwiLi4vc3JjL3V0aWwvZGVsYXVuYXkuanMiLCIuLi9zcmMvZ2xtYXRyaXgvY29tbW9uLmpzIiwiLi4vc3JjL2dsbWF0cml4L3ZlYzIuanMiLCIuLi9zcmMvbWF0aC9WZWN0b3IyLmpzIiwiLi4vc3JjL2FuaW1hdGlvbi9CbGVuZDJEQ2xpcC5qcyIsIi4uL3NyYy9nbG1hdHJpeC92ZWMzLmpzIiwiLi4vc3JjL2dsbWF0cml4L3ZlYzQuanMiLCIuLi9zcmMvZ2xtYXRyaXgvbWF0My5qcyIsIi4uL3NyYy9nbG1hdHJpeC9xdWF0LmpzIiwiLi4vc3JjL2FuaW1hdGlvbi9TYW1wbGVyVHJhY2suanMiLCIuLi9zcmMvY29yZS9taXhpbi9leHRlbmQuanMiLCIuLi9zcmMvY29yZS9taXhpbi9ub3RpZmllci5qcyIsIi4uL3NyYy9jb3JlL3V0aWwuanMiLCIuLi9zcmMvY29yZS9CYXNlLmpzIiwiLi4vc3JjL2NvcmUvcmVxdWVzdC5qcyIsIi4uL3NyYy9jb3JlL3ZlbmRvci5qcyIsIi4uL3NyYy9UaW1lbGluZS5qcyIsIi4uL3NyYy9hbmltYXRpb24vVGltZWxpbmUuanMiLCIuLi9zcmMvYW5pbWF0aW9uL1RyYWNrQ2xpcC5qcyIsIi4uL3NyYy9jb3JlL0dMSW5mby5qcyIsIi4uL3NyYy9jb3JlL2dsZW51bS5qcyIsIi4uL3NyYy9jb3JlL0xpbmtlZExpc3QuanMiLCIuLi9zcmMvY29yZS9MUlUuanMiLCIuLi9zcmMvY29yZS9jb2xvci5qcyIsIi4uL3NyYy9NYXRlcmlhbC5qcyIsIi4uL3NyYy9ncHUvR0xQcm9ncmFtLmpzIiwiLi4vc3JjL2dwdS9Qcm9ncmFtTWFuYWdlci5qcyIsIi4uL3NyYy9TaGFkZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9wcmV6Lmdsc2wuanMiLCIuLi9zcmMvZ2xtYXRyaXgvbWF0NC5qcyIsIi4uL3NyYy9SZW5kZXJlci5qcyIsIi4uL3NyYy9tYXRoL1ZlY3RvcjMuanMiLCIuLi9zcmMvbWF0aC9RdWF0ZXJuaW9uLmpzIiwiLi4vc3JjL21hdGgvTWF0cml4NC5qcyIsIi4uL3NyYy9tYXRoL0JvdW5kaW5nQm94LmpzIiwiLi4vc3JjL05vZGUuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9oZWFkZXIvY2FsY0FtYmllbnRTSExpZ2h0Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9oZWFkZXIvbGlnaHQuanMiLCIuLi9zcmMvTGlnaHQuanMiLCIuLi9zcmMvbWF0aC9QbGFuZS5qcyIsIi4uL3NyYy9tYXRoL0ZydXN0dW0uanMiLCIuLi9zcmMvbWF0aC9SYXkuanMiLCIuLi9zcmMvQ2FtZXJhLmpzIiwiLi4vc3JjL1NjZW5lLmpzIiwiLi4vc3JjL2NvcmUvQ2FjaGUuanMiLCIuLi9zcmMvR2VvbWV0cnlCYXNlLmpzIiwiLi4vc3JjL0dlb21ldHJ5LmpzIiwiLi4vc3JjL2dlb21ldHJ5L1BsYW5lLmpzIiwiLi4vc3JjL2dlb21ldHJ5L0N1YmUuanMiLCIuLi9zcmMvZ2VvbWV0cnkvU3BoZXJlLmpzIiwiLi4vc3JjL2dlb21ldHJ5L1BhcmFtZXRyaWNTdXJmYWNlLmpzIiwiLi4vc3JjL1RleHR1cmUuanMiLCIuLi9zcmMvbWF0aC91dGlsLmpzIiwiLi4vc3JjL1RleHR1cmUyRC5qcyIsIi4uL3NyYy9UZXh0dXJlQ3ViZS5qcyIsIi4uL3NyYy9SZW5kZXJhYmxlLmpzIiwiLi4vc3JjL01lc2guanMiLCIuLi9zcmMvY2FtZXJhL1BlcnNwZWN0aXZlLmpzIiwiLi4vc3JjL2NhbWVyYS9PcnRob2dyYXBoaWMuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9zdGFuZGFyZC5nbHNsLmpzIiwiLi4vc3JjL1N0YW5kYXJkTWF0ZXJpYWwuanMiLCIuLi9zcmMvc2hhZGVyL2xpYnJhcnkuanMiLCIuLi9zcmMvSm9pbnQuanMiLCIuLi9zcmMvU2tlbGV0b24uanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS91dGlsLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9iYXNpYy5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvbGFtYmVydC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2Uvd2lyZWZyYW1lLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9za3lib3guZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvYnVpbHRpbi5qcyIsIi4uL3NyYy9sb2FkZXIvR0xURi5qcyIsIi4uL3NyYy9saWdodC9EaXJlY3Rpb25hbC5qcyIsIi4uL3NyYy9saWdodC9Qb2ludC5qcyIsIi4uL3NyYy9saWdodC9TcG90LmpzIiwiLi4vc3JjL2xpZ2h0L0FtYmllbnQuanMiLCIuLi9zcmMvRnJhbWVCdWZmZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3ZlcnRleC5nbHNsLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvUGFzcy5qcyIsIi4uL3NyYy9wbHVnaW4vU2t5Ym94LmpzIiwiLi4vc3JjL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAuanMiLCIuLi9zcmMvdXRpbC9kZHMuanMiLCIuLi9zcmMvdXRpbC9oZHIuanMiLCIuLi9zcmMvdXRpbC90ZXh0dXJlLmpzIiwiLi4vc3JjL3V0aWwvc2hhZGVyL2ludGVncmF0ZUJSREYuZ2xzbC5qcyIsIi4uL3NyYy91dGlsL3NoYWRlci9wcmVmaWx0ZXIuZ2xzbC5qcyIsIi4uL3NyYy91dGlsL2N1YmVtYXAuanMiLCIuLi9zcmMvbGlnaHQvQW1iaWVudEN1YmVtYXAuanMiLCIuLi9zcmMvbGlnaHQvQW1iaWVudFNILmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvVGV4dHVyZVBvb2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9zaGFkb3dtYXAuZ2xzbC5qcyIsIi4uL3NyYy9wcmVQYXNzL1NoYWRvd01hcC5qcyIsIi4uL3NyYy9waWNraW5nL1JheVBpY2tpbmcuanMiLCIuLi9zcmMvdXRpbC9zaC5qcyIsIi4uL3NyYy9hcHBsaWNhdGlvbi5qcyIsIi4uL3NyYy9hc3luYy9UYXNrLmpzIiwiLi4vc3JjL2FzeW5jL1Rhc2tHcm91cC5qcyIsIi4uL3NyYy9jb21wb3NpdG9yL0NvbXBvc2l0b3JOb2RlLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvR3JhcGguanMiLCIuLi9zcmMvY29tcG9zaXRvci9Db21wb3NpdG9yLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvU2NlbmVOb2RlLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvVGV4dHVyZU5vZGUuanMiLCIuLi9zcmMvY29tcG9zaXRvci9GaWx0ZXJOb2RlLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9jb2xvcmFkanVzdC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9ibHVyLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2x1bS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9sdXQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvdmlnbmV0dGUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3Ivb3V0cHV0Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2JyaWdodC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9kb3duc2FtcGxlLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3Vwc2FtcGxlLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2hkci5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9sZW5zZmxhcmUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvYmxlbmQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvZnhhYS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9yZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yLmpzIiwiLi4vc3JjL2NyZWF0ZUNvbXBvc2l0b3IuanMiLCIuLi9zcmMvY29tcG9zaXRvci9jcmVhdGVDb21wb3NpdG9yLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZ2J1ZmZlci5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvY2h1bmsuZ2xzbC5qcyIsIi4uL3NyYy9kZWZlcnJlZC9HQnVmZmVyLmpzIiwiLi4vc3JjL2dlb21ldHJ5L0NvbmUuanMiLCIuLi9zcmMvZ2VvbWV0cnkvQ3lsaW5kZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9saWdodHZvbHVtZS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvc3BvdC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZGlyZWN0aW9uYWwuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnRzaC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudGN1YmVtYXAuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL3BvaW50Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcGhlcmUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL3R1YmUuZ2xzbC5qcyIsIi4uL3NyYy9kZWZlcnJlZC9SZW5kZXJlci5qcyIsIi4uL3NyYy9nbG1hdHJpeC9tYXQyLmpzIiwiLi4vc3JjL2dsbWF0cml4L21hdDJkLmpzIiwiLi4vc3JjL2dsbWF0cml4L2luZGV4LmpzIiwiLi4vc3JjL2RlcC9nbG1hdHJpeC5qcyIsIi4uL3NyYy9saWdodC9TcGhlcmUuanMiLCIuLi9zcmMvbGlnaHQvVHViZS5qcyIsIi4uL3NyYy9sb2FkZXIvRlguanMiLCIuLi9zcmMvbWF0aC9NYXRyaXgyLmpzIiwiLi4vc3JjL21hdGgvTWF0cml4MmQuanMiLCIuLi9zcmMvbWF0aC9NYXRyaXgzLmpzIiwiLi4vc3JjL21hdGgvVmFsdWUuanMiLCIuLi9zcmMvbWF0aC9WZWN0b3I0LmpzIiwiLi4vc3JjL3BhcnRpY2xlL1BhcnRpY2xlLmpzIiwiLi4vc3JjL3BhcnRpY2xlL0VtaXR0ZXIuanMiLCIuLi9zcmMvcGFydGljbGUvRmllbGQuanMiLCIuLi9zcmMvcGFydGljbGUvRm9yY2VGaWVsZC5qcyIsIi4uL3NyYy9wYXJ0aWNsZS9wYXJ0aWNsZS5nbHNsLmpzIiwiLi4vc3JjL3BhcnRpY2xlL1BhcnRpY2xlUmVuZGVyYWJsZS5qcyIsIi4uL3NyYy9waWNraW5nL2NvbG9yLmdsc2wuanMiLCIuLi9zcmMvcGlja2luZy9QaXhlbFBpY2tpbmcuanMiLCIuLi9zcmMvcGx1Z2luL0ZyZWVDb250cm9sLmpzIiwiLi4vc3JjL3BsdWdpbi9HYW1lcGFkQ29udHJvbC5qcyIsIi4uL3NyYy9wbHVnaW4vR2VzdHVyZU1nci5qcyIsIi4uL3NyYy9wbHVnaW4vSW5maW5pdGVQbGFuZS5qcyIsIi4uL3NyYy9wbHVnaW4vT3JiaXRDb250cm9sLmpzIiwiLi4vc3JjL1N0YXRpY0dlb21ldHJ5LmpzIiwiLi4vc3JjL3V0aWwvbWVzaC5qcyIsIi4uL3NyYy91dGlsL3RyYW5zZmVyYWJsZS5qcyIsIi4uL3NyYy92ZXJzaW9uLmpzIiwiLi4vc3JjL3ZyL291dHB1dC5nbHNsLmpzIiwiLi4vc3JjL3ZyL0NhcmRib2FyZERpc3RvcnRlci5qcyIsIi4uL3NyYy92ci9TdGVyZW9DYW1lcmEuanMiLCIuLi9zcmMvY2xheWdsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIOe8k+WKqOWHveaVsOadpeiHqiBodHRwczovL2dpdGh1Yi5jb20vc29sZS90d2Vlbi5qcy9ibG9iL21hc3Rlci9zcmMvVHdlZW4uanNcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkuYW5pbWF0aW9uLmVhc2luZ1xyXG4gKi9cclxudmFyIGVhc2luZyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5saW5lYXJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxpbmVhcjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFkcmF0aWNJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1YWRyYXRpY091dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIGsgKiAoMiAtIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFkcmF0aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC0gMC41ICogKC0tayAqIChrIC0gMikgLSAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuY3ViaWNJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY3ViaWNJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrICogayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmN1YmljT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjdWJpY091dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiAtLWsgKiBrICogayArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmN1YmljSW5PdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGN1YmljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwLjUgKiAoKGsgLT0gMikgKiBrICogayArIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFydGljSW5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHF1YXJ0aWNJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrICogayAqIGsgKiBrO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFydGljT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWFydGljT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSAoLS1rICogayAqIGsgKiBrKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcucXVhcnRpY0luT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWFydGljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGsgKiBrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLSAwLjUgKiAoKGsgLT0gMikgKiBrICogayAqIGsgLSAyKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcucXVpbnRpY0luXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWludGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gayAqIGsgKiBrICogayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1aW50aWNPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHF1aW50aWNPdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gLS1rICogayAqIGsgKiBrICogayArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1aW50aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVpbnRpY0luT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMC41ICogayAqIGsgKiBrICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwLjUgKiAoKGsgLT0gMikgKiBrICogayAqIGsgKiBrICsgMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnNpbnVzb2lkYWxJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2ludXNvaWRhbEluOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSBNYXRoLmNvcyhrICogTWF0aC5QSSAvIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5zaW51c29pZGFsT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzaW51c29pZGFsT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguc2luKGsgKiBNYXRoLlBJIC8gMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnNpbnVzb2lkYWxJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2ludXNvaWRhbEluT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqICgxIC0gTWF0aC5jb3MoTWF0aC5QSSAqIGspKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZXhwb25lbnRpYWxJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrID09PSAwID8gMCA6IE1hdGgucG93KDEwMjQsIGsgLSAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGV4cG9uZW50aWFsT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIGsgPT09IDEgPyAxIDogMSAtIE1hdGgucG93KDIsIC0gMTAgKiBrKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZXhwb25lbnRpYWxJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMC41ICogTWF0aC5wb3coMTAyNCwgayAtIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMC41ICogKC0gTWF0aC5wb3coMiwgLSAxMCAqIChrIC0gMSkpICsgMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmNpcmN1bGFySW5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNpcmN1bGFySW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gMSAtIE1hdGguc3FydCgxIC0gayAqIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jaXJjdWxhck91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY2lyY3VsYXJPdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KDEgLSAoLS1rICogaykpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jaXJjdWxhckluT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjaXJjdWxhckluT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLSAwLjUgKiAoTWF0aC5zcXJ0KDEgLSBrICogaykgLSAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqIChNYXRoLnNxcnQoMSAtIChrIC09IDIpICogaykgKyAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZWxhc3RpY0luXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBlbGFzdGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICB2YXIgcywgYSA9IDAuMSwgcCA9IDAuNDtcclxuICAgICAgICBpZiAoayA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGsgPT09IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYSB8fCBhIDwgMSkge1xyXG4gICAgICAgICAgICBhID0gMTsgcyA9IHAgLyA0O1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBzID0gcCAqIE1hdGguYXNpbigxIC8gYSkgLyAoMiAqIE1hdGguUEkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLSAoYSAqIE1hdGgucG93KDIsIDEwICogKGsgLT0gMSkpICpcclxuICAgICAgICAgICAgICAgICAgICBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZWxhc3RpY091dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZWxhc3RpY091dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHZhciBzLCBhID0gMC4xLCBwID0gMC40O1xyXG4gICAgICAgIGlmIChrID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhIHx8IGEgPCAxKSB7XHJcbiAgICAgICAgICAgIGEgPSAxOyBzID0gcCAvIDQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHMgPSBwICogTWF0aC5hc2luKDEgLyBhKSAvICgyICogTWF0aC5QSSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoYSAqIE1hdGgucG93KDIsIC0gMTAgKiBrKSAqXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICsgMSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmVsYXN0aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZWxhc3RpY0luT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMsIGEgPSAwLjEsIHAgPSAwLjQ7XHJcbiAgICAgICAgaWYgKGsgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWEgfHwgYSA8IDEpIHtcclxuICAgICAgICAgICAgYSA9IDE7IHMgPSBwIC8gNDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgcyA9IHAgKiBNYXRoLmFzaW4oMSAvIGEpIC8gKDIgKiBNYXRoLlBJKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLSAwLjUgKiAoYSAqIE1hdGgucG93KDIsIDEwICogKGsgLT0gMSkpXHJcbiAgICAgICAgICAgICAgICAqIE1hdGguc2luKChrIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYSAqIE1hdGgucG93KDIsIC0xMCAqIChrIC09IDEpKVxyXG4gICAgICAgICAgICAgICAgKiBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICogMC41ICsgMTtcclxuXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmJhY2tJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYmFja0luOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMgPSAxLjcwMTU4O1xyXG4gICAgICAgIHJldHVybiBrICogayAqICgocyArIDEpICogayAtIHMpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5iYWNrT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBiYWNrT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMgPSAxLjcwMTU4O1xyXG4gICAgICAgIHJldHVybiAtLWsgKiBrICogKChzICsgMSkgKiBrICsgcykgKyAxO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5iYWNrSW5PdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJhY2tJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHZhciBzID0gMS43MDE1OCAqIDEuNTI1O1xyXG4gICAgICAgIGlmICgoayAqPSAyKSA8IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDAuNSAqIChrICogayAqICgocyArIDEpICogayAtIHMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqICgoayAtPSAyKSAqIGsgKiAoKHMgKyAxKSAqIGsgKyBzKSArIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5ib3VuY2VJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYm91bmNlSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gMSAtIGVhc2luZy5ib3VuY2VPdXQoMSAtIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5ib3VuY2VPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJvdW5jZU91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrIDwgKDEgLyAyLjc1KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gNy41NjI1ICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGsgPCAoMiAvIDIuNzUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA3LjU2MjUgKiAoayAtPSAoMS41IC8gMi43NSkpICogayArIDAuNzU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChrIDwgKDIuNSAvIDIuNzUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA3LjU2MjUgKiAoayAtPSAoMi4yNSAvIDIuNzUpKSAqIGsgKyAwLjkzNzU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDcuNTYyNSAqIChrIC09ICgyLjYyNSAvIDIuNzUpKSAqIGsgKyAwLjk4NDM3NTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmJvdW5jZUluT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBib3VuY2VJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrIDwgMC41KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlYXNpbmcuYm91bmNlSW4oayAqIDIpICogMC41O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZWFzaW5nLmJvdW5jZU91dChrICogMiAtIDEpICogMC41ICsgMC41O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZWFzaW5nO1xyXG4iLCJpbXBvcnQgRWFzaW5nIGZyb20gJy4vZWFzaW5nJztcclxuXHJcbmZ1bmN0aW9uIG5vb3AgKCkge31cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hbmltYXRpb24uQ2xpcFxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGVdXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbnxudW1iZXJ9IFtvcHRzLmxvb3BdIElmIGxvb3AgaXMgYSBudW1iZXIsIGl0IGluZGljYXRlIHRoZSBsb29wIGNvdW50IG9mIGFuaW1hdGlvblxyXG4gKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW29wdHMuZWFzaW5nXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZyYW1lXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZpbmlzaF1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25yZXN0YXJ0XVxyXG4gKi9cclxudmFyIENsaXAgPSBmdW5jdGlvbiAob3B0cykge1xyXG5cclxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGhpcy5uYW1lID0gb3B0cy5uYW1lIHx8ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAqL1xyXG4gICAgdGhpcy50YXJnZXQgPSBvcHRzLnRhcmdldDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubGlmZSA9IG9wdHMubGlmZSB8fCAxMDAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5kZWxheSA9IG9wdHMuZGVsYXkgfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZ2FwID0gb3B0cy5nYXAgfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucGxheWJhY2tSYXRlID0gb3B0cy5wbGF5YmFja1JhdGUgfHwgMTtcclxuXHJcblxyXG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XHJcblxyXG4gICAgdGhpcy5fbG9vcCA9IG9wdHMubG9vcCA9PSBudWxsID8gZmFsc2UgOiBvcHRzLmxvb3A7XHJcbiAgICB0aGlzLnNldExvb3AodGhpcy5fbG9vcCk7XHJcblxyXG4gICAgaWYgKG9wdHMuZWFzaW5nICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLnNldEVhc2luZyhvcHRzLmVhc2luZyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIHRoaXMub25mcmFtZSA9IG9wdHMub25mcmFtZSB8fCBub29wO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICB0aGlzLm9uZmluaXNoID0gb3B0cy5vbmZpbmlzaCB8fCBub29wO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICB0aGlzLm9ucmVzdGFydCA9IG9wdHMub25yZXN0YXJ0IHx8IG5vb3A7XHJcblxyXG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbn07XHJcblxyXG5DbGlwLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBnYXA6IDAsXHJcblxyXG4gICAgbGlmZTogMCxcclxuXHJcbiAgICBkZWxheTogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfGJvb2xlYW59IGxvb3BcclxuICAgICAqL1xyXG4gICAgc2V0TG9vcDogZnVuY3Rpb24gKGxvb3ApIHtcclxuICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcclxuICAgICAgICBpZiAobG9vcCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGxvb3AgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb29wUmVtYWluZWQgPSBsb29wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9vcFJlbWFpbmVkID0gSW5maW5pdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IGVhc2luZ1xyXG4gICAgICovXHJcbiAgICBzZXRFYXNpbmc6IGZ1bmN0aW9uIChlYXNpbmcpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGVhc2luZykgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGVhc2luZyA9IEVhc2luZ1tlYXNpbmddO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVhc2luZyA9IGVhc2luZztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRpbWVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgc3RlcDogZnVuY3Rpb24gKHRpbWUsIGRlbHRhVGltZSwgc2lsZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSB0aW1lICsgdGhpcy5kZWxheTtcclxuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFRpbWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWx0YVRpbWUgPSB0aW1lIC0gdGhpcy5fY3VycmVudFRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gdGltZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3BhdXNlZCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZSA8IHRoaXMuX3N0YXJ0VGltZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQRU5ESUdOIFN5bmMgP1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZSh0aW1lLCBkZWx0YVRpbWUpO1xyXG5cclxuICAgICAgICB2YXIgcGVyY2VudCA9IE1hdGgubWluKHRoaXMuX2VsYXBzZWRUaW1lIC8gdGhpcy5saWZlLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKHBlcmNlbnQgPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzY2hlZHVsZTtcclxuICAgICAgICBpZiAodGhpcy5lYXNpbmcpIHtcclxuICAgICAgICAgICAgc2NoZWR1bGUgPSB0aGlzLmVhc2luZyhwZXJjZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHNjaGVkdWxlID0gcGVyY2VudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2lsZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZSgnZnJhbWUnLCBzY2hlZHVsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGVyY2VudCA9PT0gMSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fbG9vcCAmJiB0aGlzLl9sb29wUmVtYWluZWQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXN0YXJ0SW5Mb29wKHRpbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9vcFJlbWFpbmVkLS07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Jlc3RhcnQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gTWFyayB0aGlzIGNsaXAgdG8gYmUgZGVsZXRlZFxyXG4gICAgICAgICAgICAgICAgLy8gSW4gdGhlIGFuaW1hdGlvbi51cGRhdGVcclxuICAgICAgICAgICAgICAgIHRoaXMuX25lZWRzUmVtb3ZlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2ZpbmlzaCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRpbWVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgc2V0VGltZTogZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGVwKHRpbWUgKyB0aGlzLl9zdGFydFRpbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZXN0YXJ0OiBmdW5jdGlvbiAodGltZSkge1xyXG4gICAgICAgIC8vIElmIHVzZXIgbGVhdmUgdGhlIHBhZ2UgZm9yIGEgd2hpbGUsIHdoZW4gaGUgZ2V0cyBiYWNrXHJcbiAgICAgICAgLy8gQWxsIGNsaXBzIG1heSBiZSBleHBpcmVkIGFuZCBhbGwgc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nIHZhbHVlKHBvc2l0aW9uKVxyXG4gICAgICAgIC8vIEl0IGlzIGNsZWFybHkgd3JvbmcsIHNvIHdlIHVzZSByZW1haW5kZXIgdG8gYWRkIGEgb2Zmc2V0XHJcblxyXG4gICAgICAgIHZhciByZW1haW5kZXIgPSAwO1xyXG4gICAgICAgIC8vIFJlbWFpbmRlciBpZ25vcmVkIGlmIHJlc3RhcnQgaXMgaW52b2tlZCBtYW51YWxseVxyXG4gICAgICAgIGlmICh0aW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2VsYXBzZSh0aW1lKTtcclxuICAgICAgICAgICAgcmVtYWluZGVyID0gdGhpcy5fZWxhcHNlZFRpbWUgJSB0aGlzLmxpZmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRpbWUgPSB0aW1lIHx8IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWUgLSByZW1haW5kZXIgKyB0aGlzLmRlbGF5O1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fbmVlZHNSZW1vdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0RWxhcHNlZFRpbWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZWxhcHNlZFRpbWU7XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZXN0YXJ0SW5Mb29wOiBmdW5jdGlvbiAodGltZSkge1xyXG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWUgKyB0aGlzLmdhcDtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIF9lbGFwc2U6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YVRpbWUpIHtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSArPSBkZWx0YVRpbWUgKiB0aGlzLnBsYXliYWNrUmF0ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZmlyZTogZnVuY3Rpb24gKGV2ZW50VHlwZSwgYXJnKSB7XHJcbiAgICAgICAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudFR5cGU7XHJcbiAgICAgICAgaWYgKHRoaXNbZXZlbnROYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzW2V2ZW50TmFtZV0odGhpcy50YXJnZXQsIGFyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjbGlwID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKTtcclxuICAgICAgICBjbGlwLm5hbWUgPSB0aGlzLm5hbWU7XHJcbiAgICAgICAgY2xpcC5fbG9vcCA9IHRoaXMuX2xvb3A7XHJcbiAgICAgICAgY2xpcC5fbG9vcFJlbWFpbmVkID0gdGhpcy5fbG9vcFJlbWFpbmVkO1xyXG5cclxuICAgICAgICBjbGlwLmxpZmUgPSB0aGlzLmxpZmU7XHJcbiAgICAgICAgY2xpcC5nYXAgPSB0aGlzLmdhcDtcclxuICAgICAgICBjbGlwLmRlbGF5ID0gdGhpcy5kZWxheTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNsaXA7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXVzZSB0aGUgY2xpcC5cclxuICAgICAqL1xyXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3VtZSB0aGUgY2xpcC5cclxuICAgICAqL1xyXG4gICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICB9XHJcbn07XHJcbkNsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2xpcDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENsaXA7XHJcbiIsImltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcbmltcG9ydCBlYXNpbmdGdW5jcyBmcm9tICcuL2Vhc2luZyc7XHJcblxyXG52YXIgYXJyYXlTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRHZXR0ZXIodGFyZ2V0LCBrZXkpIHtcclxuICAgIHJldHVybiB0YXJnZXRba2V5XTtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0U2V0dGVyKHRhcmdldCwga2V5LCB2YWx1ZSkge1xyXG4gICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW50ZXJwb2xhdGVOdW1iZXIocDAsIHAxLCBwZXJjZW50KSB7XHJcbiAgICByZXR1cm4gKHAxIC0gcDApICogcGVyY2VudCArIHAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUFycmF5KHAwLCBwMSwgcGVyY2VudCwgb3V0LCBhcnJEaW0pIHtcclxuICAgIHZhciBsZW4gPSBwMC5sZW5ndGg7XHJcbiAgICBpZiAoYXJyRGltID09IDEpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIG91dFtpXSA9IGludGVycG9sYXRlTnVtYmVyKHAwW2ldLCBwMVtpXSwgcGVyY2VudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIGxlbjIgPSBwMFswXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgb3V0W2ldW2pdID0gaW50ZXJwb2xhdGVOdW1iZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgcDBbaV1bal0sIHAxW2ldW2pdLCBwZXJjZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FycmF5TGlrZShkYXRhKSB7XHJcbiAgICBpZiAodHlwZW9mKGRhdGEpID09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YoZGF0YSkgPT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YoZGF0YS5sZW5ndGgpID09ICdudW1iZXInO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9uZVZhbHVlKHZhbHVlKSB7XHJcbiAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpKSB7XHJcbiAgICAgICAgdmFyIGxlbiA9IHZhbHVlLmxlbmd0aDtcclxuICAgICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWVbMF0pKSB7XHJcbiAgICAgICAgICAgIHZhciByZXQgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmV0LnB1c2goYXJyYXlTbGljZS5jYWxsKHZhbHVlW2ldKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2F0bXVsbFJvbUludGVycG9sYXRlQXJyYXkoXHJcbiAgICBwMCwgcDEsIHAyLCBwMywgdCwgdDIsIHQzLCBvdXQsIGFyckRpbVxyXG4pIHtcclxuICAgIHZhciBsZW4gPSBwMC5sZW5ndGg7XHJcbiAgICBpZiAoYXJyRGltID09IDEpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIG91dFtpXSA9IGNhdG11bGxSb21JbnRlcnBvbGF0ZShcclxuICAgICAgICAgICAgICAgIHAwW2ldLCBwMVtpXSwgcDJbaV0sIHAzW2ldLCB0LCB0MiwgdDNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciBsZW4yID0gcDBbMF0ubGVuZ3RoO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW4yOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIG91dFtpXVtqXSA9IGNhdG11bGxSb21JbnRlcnBvbGF0ZShcclxuICAgICAgICAgICAgICAgICAgICBwMFtpXVtqXSwgcDFbaV1bal0sIHAyW2ldW2pdLCBwM1tpXVtqXSxcclxuICAgICAgICAgICAgICAgICAgICB0LCB0MiwgdDNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhdG11bGxSb21JbnRlcnBvbGF0ZShwMCwgcDEsIHAyLCBwMywgdCwgdDIsIHQzKSB7XHJcbiAgICB2YXIgdjAgPSAocDIgLSBwMCkgKiAwLjU7XHJcbiAgICB2YXIgdjEgPSAocDMgLSBwMSkgKiAwLjU7XHJcbiAgICByZXR1cm4gKDIgKiAocDEgLSBwMikgKyB2MCArIHYxKSAqIHQzXHJcbiAgICAgICAgICAgICsgKC0gMyAqIChwMSAtIHAyKSAtIDIgKiB2MCAtIHYxKSAqIHQyXHJcbiAgICAgICAgICAgICsgdjAgKiB0ICsgcDE7XHJcbn1cclxuXHJcbi8vIGFycjAgaXMgc291cmNlIGFycmF5LCBhcnIxIGlzIHRhcmdldCBhcnJheS5cclxuLy8gRG8gc29tZSBwcmVwcm9jZXNzIHRvIGF2b2lkIGVycm9yIGhhcHBlbmVkIHdoZW4gaW50ZXJwb2xhdGluZyBmcm9tIGFycjAgdG8gYXJyMVxyXG5mdW5jdGlvbiBmaWxsQXJyKGFycjAsIGFycjEsIGFyckRpbSkge1xyXG4gICAgdmFyIGFycjBMZW4gPSBhcnIwLmxlbmd0aDtcclxuICAgIHZhciBhcnIxTGVuID0gYXJyMS5sZW5ndGg7XHJcbiAgICBpZiAoYXJyMExlbiAhPT0gYXJyMUxlbikge1xyXG4gICAgICAgIC8vIEZJWE1FIE5vdCB3b3JrIGZvciBUeXBlZEFycmF5XHJcbiAgICAgICAgdmFyIGlzUHJldmlvdXNMYXJnZXIgPSBhcnIwTGVuID4gYXJyMUxlbjtcclxuICAgICAgICBpZiAoaXNQcmV2aW91c0xhcmdlcikge1xyXG4gICAgICAgICAgICAvLyBDdXQgdGhlIHByZXZpb3VzXHJcbiAgICAgICAgICAgIGFycjAubGVuZ3RoID0gYXJyMUxlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIEZpbGwgdGhlIHByZXZpb3VzXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBhcnIwTGVuOyBpIDwgYXJyMUxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhcnIwLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgYXJyRGltID09PSAxID8gYXJyMVtpXSA6IGFycmF5U2xpY2UuY2FsbChhcnIxW2ldKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEhhbmRsaW5nIE5hTiB2YWx1ZVxyXG4gICAgdmFyIGxlbjIgPSBhcnIwWzBdICYmIGFycjBbMF0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyckRpbSA9PT0gMSkge1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4oYXJyMFtpXSkpIHtcclxuICAgICAgICAgICAgICAgIGFycjBbaV0gPSBhcnIxW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKGFycjBbaV1bal0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyMFtpXVtqXSA9IGFycjFbaV1bal07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXJyYXlTYW1lKGFycjAsIGFycjEsIGFyckRpbSkge1xyXG4gICAgaWYgKGFycjAgPT09IGFycjEpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBsZW4gPSBhcnIwLmxlbmd0aDtcclxuICAgIGlmIChsZW4gIT09IGFycjEubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGFyckRpbSA9PT0gMSkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFycjBbaV0gIT09IGFycjFbaV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBsZW4yID0gYXJyMFswXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFycjBbaV1bal0gIT09IGFycjFbaV1bal0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlVHJhY2tDbGlwKGFuaW1hdG9yLCBnbG9iYWxFYXNpbmcsIG9uZVRyYWNrRG9uZSwga2V5ZnJhbWVzLCBwcm9wTmFtZSwgaW50ZXJwb2xhdGVyLCBtYXhUaW1lKSB7XHJcbiAgICB2YXIgZ2V0dGVyID0gYW5pbWF0b3IuX2dldHRlcjtcclxuICAgIHZhciBzZXR0ZXIgPSBhbmltYXRvci5fc2V0dGVyO1xyXG4gICAgdmFyIHVzZVNwbGluZSA9IGdsb2JhbEVhc2luZyA9PT0gJ3NwbGluZSc7XHJcblxyXG4gICAgdmFyIHRyYWNrTGVuID0ga2V5ZnJhbWVzLmxlbmd0aDtcclxuICAgIGlmICghdHJhY2tMZW4pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBHdWVzcyBkYXRhIHR5cGVcclxuICAgIHZhciBmaXJzdFZhbCA9IGtleWZyYW1lc1swXS52YWx1ZTtcclxuICAgIHZhciBpc1ZhbHVlQXJyYXkgPSBpc0FycmF5TGlrZShmaXJzdFZhbCk7XHJcblxyXG4gICAgLy8gRm9yIHZlcnRpY2VzIG1vcnBoaW5nXHJcbiAgICB2YXIgYXJyRGltID0gKFxyXG4gICAgICAgICAgICBpc1ZhbHVlQXJyYXlcclxuICAgICAgICAgICAgJiYgaXNBcnJheUxpa2UoZmlyc3RWYWxbMF0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgID8gMiA6IDE7XHJcbiAgICAvLyBTb3J0IGtleWZyYW1lIGFzIGFzY2VuZGluZ1xyXG4gICAga2V5ZnJhbWVzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xyXG4gICAgICAgIHJldHVybiBhLnRpbWUgLSBiLnRpbWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQZXJjZW50cyBvZiBlYWNoIGtleWZyYW1lXHJcbiAgICB2YXIga2ZQZXJjZW50cyA9IFtdO1xyXG4gICAgLy8gVmFsdWUgb2YgZWFjaCBrZXlmcmFtZVxyXG4gICAgdmFyIGtmVmFsdWVzID0gW107XHJcbiAgICAvLyBFYXNpbmcgZnVuY3Mgb2YgZWFjaCBrZXlmcmFtZS5cclxuICAgIHZhciBrZkVhc2luZ3MgPSBbXTtcclxuXHJcbiAgICB2YXIgcHJldlZhbHVlID0ga2V5ZnJhbWVzWzBdLnZhbHVlO1xyXG4gICAgdmFyIGlzQWxsVmFsdWVFcXVhbCA9IHRydWU7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWNrTGVuOyBpKyspIHtcclxuICAgICAgICBrZlBlcmNlbnRzLnB1c2goa2V5ZnJhbWVzW2ldLnRpbWUgLyBtYXhUaW1lKTtcclxuXHJcbiAgICAgICAgLy8gQXNzdW1lIHZhbHVlIGlzIGEgY29sb3Igd2hlbiBpdCBpcyBhIHN0cmluZ1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGtleWZyYW1lc1tpXS52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdmFsdWUgaXMgZXF1YWwsIGRlZXAgY2hlY2sgaWYgdmFsdWUgaXMgYXJyYXlcclxuICAgICAgICBpZiAoISgoaXNWYWx1ZUFycmF5ICYmIGlzQXJyYXlTYW1lKHZhbHVlLCBwcmV2VmFsdWUsIGFyckRpbSkpXHJcbiAgICAgICAgICAgIHx8ICghaXNWYWx1ZUFycmF5ICYmIHZhbHVlID09PSBwcmV2VmFsdWUpKSkge1xyXG4gICAgICAgICAgICBpc0FsbFZhbHVlRXF1YWwgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJldlZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGtmVmFsdWVzLnB1c2godmFsdWUpO1xyXG4gICAgICAgIGtmRWFzaW5ncy5wdXNoKGtleWZyYW1lc1tpXS5lYXNpbmcpO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzQWxsVmFsdWVFcXVhbCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbGFzdFZhbHVlID0ga2ZWYWx1ZXNbdHJhY2tMZW4gLSAxXTtcclxuICAgIC8vIFBvbHlmaWxsIGFycmF5IGFuZCBOYU4gdmFsdWVcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhY2tMZW4gLSAxOyBpKyspIHtcclxuICAgICAgICBpZiAoaXNWYWx1ZUFycmF5KSB7XHJcbiAgICAgICAgICAgIGZpbGxBcnIoa2ZWYWx1ZXNbaV0sIGxhc3RWYWx1ZSwgYXJyRGltKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihrZlZhbHVlc1tpXSkgJiYgIWlzTmFOKGxhc3RWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGtmVmFsdWVzW2ldID0gbGFzdFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaXNWYWx1ZUFycmF5ICYmIGZpbGxBcnIoZ2V0dGVyKGFuaW1hdG9yLl90YXJnZXQsIHByb3BOYW1lKSwgbGFzdFZhbHVlLCBhcnJEaW0pO1xyXG5cclxuICAgIC8vIENhY2hlIHRoZSBrZXkgb2YgbGFzdCBmcmFtZSB0byBzcGVlZCB1cCB3aGVuXHJcbiAgICAvLyBhbmltYXRpb24gcGxheWJhY2sgaXMgc2VxdWVuY3lcclxuICAgIHZhciBjYWNoZUtleSA9IDA7XHJcbiAgICB2YXIgY2FjaGVQZXJjZW50ID0gMDtcclxuICAgIHZhciBzdGFydDtcclxuICAgIHZhciBpLCB3O1xyXG4gICAgdmFyIHAwLCBwMSwgcDIsIHAzO1xyXG5cclxuICAgIHZhciBvbmZyYW1lID0gZnVuY3Rpb24odGFyZ2V0LCBwZXJjZW50KSB7XHJcbiAgICAgICAgLy8gRmluZCB0aGUgcmFuZ2Uga2V5ZnJhbWVzXHJcbiAgICAgICAgLy8ga2YxLS0tLS1rZjItLS0tLS0tLS1jdXJyZW50LS0tLS0tLS1rZjNcclxuICAgICAgICAvLyBmaW5kIGtmMihpKSBhbmQga2YzKGkgKyAxKSBhbmQgZG8gaW50ZXJwb2xhdGlvblxyXG4gICAgICAgIGlmIChwZXJjZW50IDwgY2FjaGVQZXJjZW50KSB7XHJcbiAgICAgICAgICAgIC8vIFN0YXJ0IGZyb20gbmV4dCBrZXlcclxuICAgICAgICAgICAgc3RhcnQgPSBNYXRoLm1pbihjYWNoZUtleSArIDEsIHRyYWNrTGVuIC0gMSk7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtmUGVyY2VudHNbaV0gPD0gcGVyY2VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkgPSBNYXRoLm1pbihpLCB0cmFja0xlbiAtIDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChpID0gY2FjaGVLZXk7IGkgPCB0cmFja0xlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2ZQZXJjZW50c1tpXSA+IHBlcmNlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpID0gTWF0aC5taW4oaSAtIDEsIHRyYWNrTGVuIC0gMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhY2hlS2V5ID0gaTtcclxuICAgICAgICBjYWNoZVBlcmNlbnQgPSBwZXJjZW50O1xyXG5cclxuICAgICAgICB2YXIgcmFuZ2UgPSAoa2ZQZXJjZW50c1tpICsgMV0gLSBrZlBlcmNlbnRzW2ldKTtcclxuICAgICAgICBpZiAocmFuZ2UgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdyA9IChwZXJjZW50IC0ga2ZQZXJjZW50c1tpXSkgLyByYW5nZTtcclxuICAgICAgICAgICAgLy8gQ2xhbXAgMCAtIDFcclxuICAgICAgICAgICAgdyA9IE1hdGgubWF4KE1hdGgubWluKDEsIHcpLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdyA9IGtmRWFzaW5nc1tpICsgMV0odyk7XHJcblxyXG4gICAgICAgIGlmICh1c2VTcGxpbmUpIHtcclxuICAgICAgICAgICAgcDEgPSBrZlZhbHVlc1tpXTtcclxuICAgICAgICAgICAgcDAgPSBrZlZhbHVlc1tpID09PSAwID8gaSA6IGkgLSAxXTtcclxuICAgICAgICAgICAgcDIgPSBrZlZhbHVlc1tpID4gdHJhY2tMZW4gLSAyID8gdHJhY2tMZW4gLSAxIDogaSArIDFdO1xyXG4gICAgICAgICAgICBwMyA9IGtmVmFsdWVzW2kgPiB0cmFja0xlbiAtIDMgPyB0cmFja0xlbiAtIDEgOiBpICsgMl07XHJcbiAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXIodGFyZ2V0LCBwcm9wTmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAwLCBwMSwgcDIsIHAzLCB3XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1ZhbHVlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGNhdG11bGxSb21JbnRlcnBvbGF0ZUFycmF5KFxyXG4gICAgICAgICAgICAgICAgICAgIHAwLCBwMSwgcDIsIHAzLCB3LCB3KncsIHcqdyp3LFxyXG4gICAgICAgICAgICAgICAgICAgIGdldHRlcih0YXJnZXQsIHByb3BOYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICBhcnJEaW1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhdG11bGxSb21JbnRlcnBvbGF0ZShwMCwgcDEsIHAyLCBwMywgdywgdyp3LCB3KncqdylcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXIodGFyZ2V0LCBwcm9wTmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtmVmFsdWVzW2ldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZlZhbHVlc1tpICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1ZhbHVlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGludGVycG9sYXRlQXJyYXkoXHJcbiAgICAgICAgICAgICAgICAgICAga2ZWYWx1ZXNbaV0sIGtmVmFsdWVzW2krMV0sIHcsXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0dGVyKHRhcmdldCwgcHJvcE5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyckRpbVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVOdW1iZXIoa2ZWYWx1ZXNbaV0sIGtmVmFsdWVzW2krMV0sIHcpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgY2xpcCA9IG5ldyBDbGlwKHtcclxuICAgICAgICB0YXJnZXQ6IGFuaW1hdG9yLl90YXJnZXQsXHJcbiAgICAgICAgbGlmZTogbWF4VGltZSxcclxuICAgICAgICBsb29wOiBhbmltYXRvci5fbG9vcCxcclxuICAgICAgICBkZWxheTogYW5pbWF0b3IuX2RlbGF5LFxyXG4gICAgICAgIG9uZnJhbWU6IG9uZnJhbWUsXHJcbiAgICAgICAgb25maW5pc2g6IG9uZVRyYWNrRG9uZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGdsb2JhbEVhc2luZyAmJiBnbG9iYWxFYXNpbmcgIT09ICdzcGxpbmUnKSB7XHJcbiAgICAgICAgY2xpcC5zZXRFYXNpbmcoZ2xvYmFsRWFzaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2xpcDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBBbmltYXRvciBvYmplY3QgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSBBbmltYXRpb24ucHJvdG90eXBlLmFuaW1hdGUgbWV0aG9kLlxyXG4gKiBBZnRlciBjcmVhdGVkLCB3ZSBjYW4gdXNlIHtAbGluayBjbGF5LmFuaW1hdGlvbi5BbmltYXRvciN3aGVufSB0byBhZGQgYWxsIGtleWZyYW1lcyBhbmQge0BsaW5rIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yI3N0YXJ0fSBpdC5cclxuICogQ2xpcHMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYW5kIGFkZGVkIHRvIHRoZSBhbmltYXRpb24gaW5zdGFuY2Ugd2hpY2ggY3JlYXRlZCB0aGlzIGRlZmVycmVkIG9iamVjdC5cclxuICpcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcclxuICogQHBhcmFtIHtib29sZWFufSBsb29wXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdldHRlclxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXJcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gaW50ZXJwb2xhdGVyXHJcbiAqL1xyXG5mdW5jdGlvbiBBbmltYXRvcih0YXJnZXQsIGxvb3AsIGdldHRlciwgc2V0dGVyLCBpbnRlcnBvbGF0ZXIpIHtcclxuICAgIHRoaXMuX3RyYWNrcyA9IHt9O1xyXG4gICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0O1xyXG5cclxuICAgIHRoaXMuX2xvb3AgPSBsb29wIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuX2dldHRlciA9IGdldHRlciB8fCBkZWZhdWx0R2V0dGVyO1xyXG4gICAgdGhpcy5fc2V0dGVyID0gc2V0dGVyIHx8IGRlZmF1bHRTZXR0ZXI7XHJcblxyXG4gICAgdGhpcy5faW50ZXJwb2xhdGVyID0gaW50ZXJwb2xhdGVyIHx8IG51bGw7XHJcblxyXG4gICAgdGhpcy5fZGVsYXkgPSAwO1xyXG5cclxuICAgIHRoaXMuX2RvbmVMaXN0ID0gW107XHJcblxyXG4gICAgdGhpcy5fb25mcmFtZUxpc3QgPSBbXTtcclxuXHJcbiAgICB0aGlzLl9jbGlwTGlzdCA9IFtdO1xyXG5cclxuICAgIHRoaXMuX21heFRpbWUgPSAwO1xyXG5cclxuICAgIHRoaXMuX2xhc3RLRlRpbWUgPSAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub29wRWFzaW5nKHcpIHtcclxuICAgIHJldHVybiB3O1xyXG59XHJcblxyXG5BbmltYXRvci5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IEFuaW1hdG9yLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgS2V5ZnJhbWUgdGltZSB1c2luZyBtaWxsaXNlY29uZFxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEga2V5LXZhbHVlIG9iamVjdC4gVmFsdWUgY2FuIGJlIG51bWJlciwgMWQgYW5kIDJkIGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW2Vhc2luZ11cclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICB3aGVuOiBmdW5jdGlvbiAodGltZSwgcHJvcHMsIGVhc2luZykge1xyXG5cclxuICAgICAgICB0aGlzLl9tYXhUaW1lID0gTWF0aC5tYXgodGltZSwgdGhpcy5fbWF4VGltZSk7XHJcblxyXG4gICAgICAgIGVhc2luZyA9ICh0eXBlb2YgZWFzaW5nID09PSAnZnVuY3Rpb24nID8gZWFzaW5nIDogZWFzaW5nRnVuY3NbZWFzaW5nXSkgfHwgbm9vcEVhc2luZztcclxuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBwcm9wcykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RyYWNrc1twcm9wTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrc1twcm9wTmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgIC8vIElmIHRpbWUgaXMgMFxyXG4gICAgICAgICAgICAgICAgLy8gIFRoZW4gcHJvcHMgaXMgZ2l2ZW4gaW5pdGlhbGl6ZSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgLy8gRWxzZVxyXG4gICAgICAgICAgICAgICAgLy8gIEluaXRpYWxpemUgdmFsdWUgZnJvbSBjdXJyZW50IHByb3AgdmFsdWVcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tzW3Byb3BOYW1lXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNsb25lVmFsdWUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXR0ZXIodGhpcy5fdGFyZ2V0LCBwcm9wTmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWFzaW5nOiBlYXNpbmdcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl90cmFja3NbcHJvcE5hbWVdLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGltZTogcGFyc2VJbnQodGltZSksXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogcHJvcHNbcHJvcE5hbWVdLFxyXG4gICAgICAgICAgICAgICAgZWFzaW5nOiBlYXNpbmdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgRHVyaW5nIHRpbWUgc2luY2UgbGFzdCBrZXlmcmFtZVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEga2V5LXZhbHVlIG9iamVjdC4gVmFsdWUgY2FuIGJlIG51bWJlciwgMWQgYW5kIDJkIGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW2Vhc2luZ11cclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICB0aGVuOiBmdW5jdGlvbiAoZHVyaW5nVGltZSwgcHJvcHMsIGVhc2luZykge1xyXG4gICAgICAgIHRoaXMud2hlbihkdXJpbmdUaW1lICsgdGhpcy5fbGFzdEtGVGltZSwgcHJvcHMsIGVhc2luZyk7XHJcbiAgICAgICAgdGhpcy5fbGFzdEtGVGltZSArPSBkdXJpbmdUaW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogY2FsbGJhY2sgd2hlbiBydW5uaW5nIGFuaW1hdGlvblxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrIGNhbGxiYWNrIGhhdmUgdHdvIGFyZ3MsIGFuaW1hdGluZyB0YXJnZXQgYW5kIGN1cnJlbnQgcGVyY2VudFxyXG4gICAgICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQW5pbWF0b3J9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGR1cmluZzogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5fb25mcmFtZUxpc3QucHVzaChjYWxsYmFjayk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9kb25lQ2FsbGJhY2s6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBDbGVhciBhbGwgdHJhY2tzXHJcbiAgICAgICAgdGhpcy5fdHJhY2tzID0ge307XHJcbiAgICAgICAgLy8gQ2xlYXIgYWxsIGNsaXBzXHJcbiAgICAgICAgdGhpcy5fY2xpcExpc3QubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgdmFyIGRvbmVMaXN0ID0gdGhpcy5fZG9uZUxpc3Q7XHJcbiAgICAgICAgdmFyIGxlbiA9IGRvbmVMaXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRvbmVMaXN0W2ldLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU3RhcnQgdGhlIGFuaW1hdGlvblxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfEZ1bmN0aW9ufSBlYXNpbmdcclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKGdsb2JhbEVhc2luZykge1xyXG5cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGNsaXBDb3VudCA9IDA7XHJcblxyXG4gICAgICAgIHZhciBvbmVUcmFja0RvbmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY2xpcENvdW50LS07XHJcbiAgICAgICAgICAgIGlmIChjbGlwQ291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuX2RvbmVDYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIGxhc3RDbGlwO1xyXG4gICAgICAgIHZhciBjbGlwTWF4VGltZSA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gdGhpcy5fdHJhY2tzKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gY3JlYXRlVHJhY2tDbGlwKFxyXG4gICAgICAgICAgICAgICAgdGhpcywgZ2xvYmFsRWFzaW5nLCBvbmVUcmFja0RvbmUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja3NbcHJvcE5hbWVdLCBwcm9wTmFtZSwgc2VsZi5faW50ZXJwb2xhdGVyLCBzZWxmLl9tYXhUaW1lXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICBjbGlwTWF4VGltZSA9IE1hdGgubWF4KGNsaXBNYXhUaW1lLCBjbGlwLmxpZmUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpcExpc3QucHVzaChjbGlwKTtcclxuICAgICAgICAgICAgICAgIGNsaXBDb3VudCsrO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIElmIHN0YXJ0IGFmdGVyIGFkZGVkIHRvIGFuaW1hdGlvblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRpb24uYWRkQ2xpcChjbGlwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsYXN0Q2xpcCA9IGNsaXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFkZCBkdXJpbmcgY2FsbGJhY2sgb24gdGhlIGxhc3QgY2xpcFxyXG4gICAgICAgIGlmIChsYXN0Q2xpcCkge1xyXG4gICAgICAgICAgICB2YXIgb2xkT25GcmFtZSA9IGxhc3RDbGlwLm9uZnJhbWU7XHJcbiAgICAgICAgICAgIGxhc3RDbGlwLm9uZnJhbWUgPSBmdW5jdGlvbiAodGFyZ2V0LCBwZXJjZW50KSB7XHJcbiAgICAgICAgICAgICAgICBvbGRPbkZyYW1lKHRhcmdldCwgcGVyY2VudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLl9vbmZyYW1lTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX29uZnJhbWVMaXN0W2ldKHRhcmdldCwgcGVyY2VudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNsaXBDb3VudCkge1xyXG4gICAgICAgICAgICB0aGlzLl9kb25lQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcCB0aGUgYW5pbWF0aW9uXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NsaXBMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gdGhpcy5fY2xpcExpc3RbaV07XHJcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uLnJlbW92ZUNsaXAoY2xpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NsaXBMaXN0ID0gW107XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxheSBnaXZlbiBtaWxsaXNlY29uZHNcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gdGltZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQW5pbWF0b3J9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGRlbGF5OiBmdW5jdGlvbiAodGltZSl7XHJcbiAgICAgICAgdGhpcy5fZGVsYXkgPSB0aW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgYWZ0ZXIgYW5pbWF0aW9uIGZpbmlzaGVkXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5BbmltYXRvcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmFuaW1hdGlvbi5BbmltYXRvci5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgZG9uZTogZnVuY3Rpb24gKGZ1bmMpIHtcclxuICAgICAgICBpZiAoZnVuYykge1xyXG4gICAgICAgICAgICB0aGlzLl9kb25lTGlzdC5wdXNoKGZ1bmMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhbGwgY2xpcHMgY3JlYXRlZCBpbiBzdGFydCBtZXRob2QuXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5DbGlwW119XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGdldENsaXBzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBMaXN0O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0b3I7XHJcbiIsIi8vIDFEIEJsZW5kIGNsaXAgb2YgYmxlbmQgdHJlZVxyXG4vLyBodHRwOi8vZG9jcy51bml0eTNkLmNvbS9Eb2N1bWVudGF0aW9uL01hbnVhbC8xREJsZW5kaW5nLmh0bWxcclxuXHJcbmltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcblxyXG52YXIgY2xpcFNvcnRGdW5jID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhLnBvc2l0aW9uIDwgYi5wb3NpdGlvbjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcC5JQ2xpcElucHV0XHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwb3NpdGlvblxyXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiAxZCBibGVuZGluZyBub2RlIGluIGFuaW1hdGlvbiBibGVuZCB0cmVlLlxyXG4gKiBvdXRwdXQgY2xpcCBtdXN0IGhhdmUgYmxlbmQxRCBhbmQgY29weSBtZXRob2RcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGlvXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cclxuICogQHBhcmFtIHtvYmplY3RbXX0gW29wdHMuaW5wdXRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMucG9zaXRpb25dXHJcbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gW29wdHMub3V0cHV0XVxyXG4gKi9cclxudmFyIEJsZW5kMURDbGlwID0gZnVuY3Rpb24gKG9wdHMpIHtcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XHJcbiAgICAvKipcclxuICAgICAqIE91dHB1dCBjbGlwIG11c3QgaGF2ZSBibGVuZDFEIGFuZCBjb3B5IG1ldGhvZFxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkNsaXB9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3V0cHV0ID0gb3B0cy5vdXRwdXQgfHwgbnVsbDtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwLklDbGlwSW5wdXRbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5pbnB1dHMgPSBvcHRzLmlucHV0cyB8fCBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IDA7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVLZXkgPSAwO1xyXG4gICAgdGhpcy5fY2FjaGVQb3NpdGlvbiA9IC1JbmZpbml0eTtcclxuXHJcbiAgICB0aGlzLmlucHV0cy5zb3J0KGNsaXBTb3J0RnVuYyk7XHJcbn07XHJcblxyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUgPSBuZXcgQ2xpcCgpO1xyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZDFEQ2xpcDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb25cclxuICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5DbGlwfSBpbnB1dENsaXBcclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRdXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwLklDbGlwSW5wdXR9XHJcbiAqL1xyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuYWRkSW5wdXQgPSBmdW5jdGlvbiAocG9zaXRpb24sIGlucHV0Q2xpcCwgb2Zmc2V0KSB7XHJcbiAgICB2YXIgb2JqID0ge1xyXG4gICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcclxuICAgICAgICBjbGlwOiBpbnB1dENsaXAsXHJcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQgfHwgMFxyXG4gICAgfTtcclxuICAgIHRoaXMubGlmZSA9IE1hdGgubWF4KGlucHV0Q2xpcC5saWZlLCB0aGlzLmxpZmUpO1xyXG5cclxuICAgIGlmICghdGhpcy5pbnB1dHMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbiAgICB2YXIgbGVuID0gdGhpcy5pbnB1dHMubGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMuaW5wdXRzWzBdLnBvc2l0aW9uID4gcG9zaXRpb24pIHtcclxuICAgICAgICB0aGlzLmlucHV0cy51bnNoaWZ0KG9iaik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5wdXRzW2xlbiAtIDFdLnBvc2l0aW9uIDw9IHBvc2l0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIga2V5ID0gdGhpcy5fZmluZEtleShwb3NpdGlvbik7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMuc3BsaWNlKGtleSwgb2JqKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG59O1xyXG5cclxuQmxlbmQxRENsaXAucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAodGltZSwgZFRpbWUsIHNpbGVudCkge1xyXG5cclxuICAgIHZhciByZXQgPSBDbGlwLnByb3RvdHlwZS5zdGVwLmNhbGwodGhpcywgdGltZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcclxuICAgICAgICB0aGlzLnNldFRpbWUodGhpcy5nZXRFbGFwc2VkVGltZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXHJcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufTtcclxuXHJcbkJsZW5kMURDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIHZhciBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb247XHJcbiAgICB2YXIgaW5wdXRzID0gdGhpcy5pbnB1dHM7XHJcbiAgICB2YXIgbGVuID0gaW5wdXRzLmxlbmd0aDtcclxuICAgIHZhciBtaW4gPSBpbnB1dHNbMF0ucG9zaXRpb247XHJcbiAgICB2YXIgbWF4ID0gaW5wdXRzW2xlbi0xXS5wb3NpdGlvbjtcclxuXHJcbiAgICBpZiAocG9zaXRpb24gPD0gbWluIHx8IHBvc2l0aW9uID49IG1heCkge1xyXG4gICAgICAgIHZhciBpbjAgPSBwb3NpdGlvbiA8PSBtaW4gPyBpbnB1dHNbMF0gOiBpbnB1dHNbbGVuLTFdO1xyXG4gICAgICAgIHZhciBjbGlwID0gaW4wLmNsaXA7XHJcbiAgICAgICAgdmFyIG9mZnNldCA9IGluMC5vZmZzZXQ7XHJcbiAgICAgICAgY2xpcC5zZXRUaW1lKCh0aW1lICsgb2Zmc2V0KSAlIGNsaXAubGlmZSk7XHJcbiAgICAgICAgLy8gSW5wdXQgY2xpcCBpcyBhIGJsZW5kIGNsaXBcclxuICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgaWYgKGNsaXAub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCkge1xyXG4gICAgICAgICAgICB0aGlzLm91dHB1dC5jb3B5KGNsaXAub3V0cHV0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm91dHB1dC5jb3B5KGNsaXApO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIGtleSA9IHRoaXMuX2ZpbmRLZXkocG9zaXRpb24pO1xyXG4gICAgICAgIHZhciBpbjEgPSBpbnB1dHNba2V5XTtcclxuICAgICAgICB2YXIgaW4yID0gaW5wdXRzW2tleSArIDFdO1xyXG4gICAgICAgIHZhciBjbGlwMSA9IGluMS5jbGlwO1xyXG4gICAgICAgIHZhciBjbGlwMiA9IGluMi5jbGlwO1xyXG4gICAgICAgIC8vIFNldCB0aW1lIG9uIGlucHV0IGNsaXBzXHJcbiAgICAgICAgY2xpcDEuc2V0VGltZSgodGltZSArIGluMS5vZmZzZXQpICUgY2xpcDEubGlmZSk7XHJcbiAgICAgICAgY2xpcDIuc2V0VGltZSgodGltZSArIGluMi5vZmZzZXQpICUgY2xpcDIubGlmZSk7XHJcblxyXG4gICAgICAgIHZhciB3ID0gKHRoaXMucG9zaXRpb24gLSBpbjEucG9zaXRpb24pIC8gKGluMi5wb3NpdGlvbiAtIGluMS5wb3NpdGlvbik7XHJcblxyXG4gICAgICAgIHZhciBjMSA9IGNsaXAxLm91dHB1dCBpbnN0YW5jZW9mIENsaXAgPyBjbGlwMS5vdXRwdXQgOiBjbGlwMTtcclxuICAgICAgICB2YXIgYzIgPSBjbGlwMi5vdXRwdXQgaW5zdGFuY2VvZiBDbGlwID8gY2xpcDIub3V0cHV0IDogY2xpcDI7XHJcbiAgICAgICAgdGhpcy5vdXRwdXQuYmxlbmQxRChjMSwgYzIsIHcpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsb25lIGEgbmV3IEJsZW5kMUQgY2xpcFxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNsb25lSW5wdXRzIFRydWUgaWYgY2xvbmUgdGhlIGlucHV0IGNsaXBzXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwfVxyXG4gKi9cclxuQmxlbmQxRENsaXAucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKGNsb25lSW5wdXRzKSB7XHJcbiAgICB2YXIgY2xpcCA9IENsaXAucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICBjbGlwLm91dHB1dCA9IHRoaXMub3V0cHV0LmNsb25lKCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGlucHV0Q2xpcCA9IGNsb25lSW5wdXRzID8gdGhpcy5pbnB1dHNbaV0uY2xpcC5jbG9uZSh0cnVlKSA6IHRoaXMuaW5wdXRzW2ldLmNsaXA7XHJcbiAgICAgICAgY2xpcC5hZGRJbnB1dCh0aGlzLmlucHV0c1tpXS5wb3NpdGlvbiwgaW5wdXRDbGlwLCB0aGlzLmlucHV0c1tpXS5vZmZzZXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsaXA7XHJcbn07XHJcblxyXG4vLyBGaW5kIHRoZSBrZXkgd2hlcmUgcG9zaXRpb24gaW4gcmFuZ2UgW2lucHV0c1trZXldLnBvc2l0aW9uLCBpbnB1dHNba2V5KzFdLnBvc2l0aW9uKVxyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuX2ZpbmRLZXkgPSBmdW5jdGlvbiAocG9zaXRpb24pIHtcclxuICAgIHZhciBrZXkgPSAtMTtcclxuICAgIHZhciBpbnB1dHMgPSB0aGlzLmlucHV0cztcclxuICAgIHZhciBsZW4gPSBpbnB1dHMubGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMuX2NhY2hlUG9zaXRpb24gPCBwb3NpdGlvbikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9jYWNoZUtleTsgaSA8IGxlbi0xOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0c1tpXS5wb3NpdGlvbiAmJiBwb3NpdGlvbiA8IGlucHV0c1tpKzFdLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBrZXkgPSBpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgcyA9IE1hdGgubWluKGxlbi0yLCB0aGlzLl9jYWNoZUtleSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IHM7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSBpbnB1dHNbaV0ucG9zaXRpb24gJiYgcG9zaXRpb24gPCBpbnB1dHNbaSsxXS5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAga2V5ID0gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChrZXkgPj0gMCkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlS2V5ID0ga2V5O1xyXG4gICAgICAgIHRoaXMuX2NhY2hlUG9zaXRpb24gPSBwb3NpdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ga2V5O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmxlbmQxRENsaXA7IiwiLy8gRGVsYXVuYXkgVHJpYW5ndWxhdGlvblxyXG4vLyBNb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9pcm9ud2FsbGFieS9kZWxhdW5heVxyXG52YXIgRVBTSUxPTiA9IDEuMCAvIDEwNDg1NzYuMDtcclxuXHJcbmZ1bmN0aW9uIHN1cGVydHJpYW5nbGUodmVydGljZXMpIHtcclxuICAgIHZhciB4bWluID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xyXG4gICAgdmFyIHltaW4gPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XHJcbiAgICB2YXIgeG1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcclxuICAgIHZhciB5bWF4ID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xyXG4gICAgdmFyIGksIGR4LCBkeSwgZG1heCwgeG1pZCwgeW1pZDtcclxuXHJcbiAgICBmb3IgKGkgPSB2ZXJ0aWNlcy5sZW5ndGg7IGktLTsgKSB7XHJcbiAgICAgICAgaWYgKHZlcnRpY2VzW2ldWzBdIDwgeG1pbikgeyB4bWluID0gdmVydGljZXNbaV1bMF07IH1cclxuICAgICAgICBpZiAodmVydGljZXNbaV1bMF0gPiB4bWF4KSB7IHhtYXggPSB2ZXJ0aWNlc1tpXVswXTsgfVxyXG4gICAgICAgIGlmICh2ZXJ0aWNlc1tpXVsxXSA8IHltaW4pIHsgeW1pbiA9IHZlcnRpY2VzW2ldWzFdOyB9XHJcbiAgICAgICAgaWYgKHZlcnRpY2VzW2ldWzFdID4geW1heCkgeyB5bWF4ID0gdmVydGljZXNbaV1bMV07IH1cclxuICAgIH1cclxuXHJcbiAgICBkeCA9IHhtYXggLSB4bWluO1xyXG4gICAgZHkgPSB5bWF4IC0geW1pbjtcclxuICAgIGRtYXggPSBNYXRoLm1heChkeCwgZHkpO1xyXG4gICAgeG1pZCA9IHhtaW4gKyBkeCAqIDAuNTtcclxuICAgIHltaWQgPSB5bWluICsgZHkgKiAwLjU7XHJcblxyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICBbeG1pZCAtIDIwICogZG1heCwgeW1pZCAtICAgICAgZG1heF0sXHJcbiAgICAgICAgW3htaWQgICAgICAgICAgICAsIHltaWQgKyAyMCAqIGRtYXhdLFxyXG4gICAgICAgIFt4bWlkICsgMjAgKiBkbWF4LCB5bWlkIC0gICAgICBkbWF4XVxyXG4gICAgXTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2lyY3VtY2lyY2xlKHZlcnRpY2VzLCBpLCBqLCBrKSB7XHJcbiAgICB2YXIgeDEgPSB2ZXJ0aWNlc1tpXVswXSxcclxuICAgICAgICAgICAgeTEgPSB2ZXJ0aWNlc1tpXVsxXSxcclxuICAgICAgICAgICAgeDIgPSB2ZXJ0aWNlc1tqXVswXSxcclxuICAgICAgICAgICAgeTIgPSB2ZXJ0aWNlc1tqXVsxXSxcclxuICAgICAgICAgICAgeDMgPSB2ZXJ0aWNlc1trXVswXSxcclxuICAgICAgICAgICAgeTMgPSB2ZXJ0aWNlc1trXVsxXSxcclxuICAgICAgICAgICAgZmFic3kxeTIgPSBNYXRoLmFicyh5MSAtIHkyKSxcclxuICAgICAgICAgICAgZmFic3kyeTMgPSBNYXRoLmFicyh5MiAtIHkzKSxcclxuICAgICAgICAgICAgeGMsIHljLCBtMSwgbTIsIG14MSwgbXgyLCBteTEsIG15MiwgZHgsIGR5O1xyXG5cclxuICAgIC8qIENoZWNrIGZvciBjb2luY2lkZW50IHBvaW50cyAqL1xyXG4gICAgaWYgKGZhYnN5MXkyIDwgRVBTSUxPTiAmJiBmYWJzeTJ5MyA8IEVQU0lMT04pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VlayEgQ29pbmNpZGVudCBwb2ludHMhJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZhYnN5MXkyIDwgRVBTSUxPTikge1xyXG4gICAgICAgIG0yICA9IC0oKHgzIC0geDIpIC8gKHkzIC0geTIpKTtcclxuICAgICAgICBteDIgPSAoeDIgKyB4MykgLyAyLjA7XHJcbiAgICAgICAgbXkyID0gKHkyICsgeTMpIC8gMi4wO1xyXG4gICAgICAgIHhjICA9ICh4MiArIHgxKSAvIDIuMDtcclxuICAgICAgICB5YyAgPSBtMiAqICh4YyAtIG14MikgKyBteTI7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoZmFic3kyeTMgPCBFUFNJTE9OKSB7XHJcbiAgICAgICAgbTEgID0gLSgoeDIgLSB4MSkgLyAoeTIgLSB5MSkpO1xyXG4gICAgICAgIG14MSA9ICh4MSArIHgyKSAvIDIuMDtcclxuICAgICAgICBteTEgPSAoeTEgKyB5MikgLyAyLjA7XHJcbiAgICAgICAgeGMgID0gKHgzICsgeDIpIC8gMi4wO1xyXG4gICAgICAgIHljICA9IG0xICogKHhjIC0gbXgxKSArIG15MTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBtMSAgPSAtKCh4MiAtIHgxKSAvICh5MiAtIHkxKSk7XHJcbiAgICAgICAgbTIgID0gLSgoeDMgLSB4MikgLyAoeTMgLSB5MikpO1xyXG4gICAgICAgIG14MSA9ICh4MSArIHgyKSAvIDIuMDtcclxuICAgICAgICBteDIgPSAoeDIgKyB4MykgLyAyLjA7XHJcbiAgICAgICAgbXkxID0gKHkxICsgeTIpIC8gMi4wO1xyXG4gICAgICAgIG15MiA9ICh5MiArIHkzKSAvIDIuMDtcclxuICAgICAgICB4YyAgPSAobTEgKiBteDEgLSBtMiAqIG14MiArIG15MiAtIG15MSkgLyAobTEgLSBtMik7XHJcbiAgICAgICAgeWMgID0gKGZhYnN5MXkyID4gZmFic3kyeTMpID9cclxuICAgICAgICAgICAgbTEgKiAoeGMgLSBteDEpICsgbXkxIDpcclxuICAgICAgICAgICAgbTIgKiAoeGMgLSBteDIpICsgbXkyO1xyXG4gICAgfVxyXG5cclxuICAgIGR4ID0geDIgLSB4YztcclxuICAgIGR5ID0geTIgLSB5YztcclxuICAgIHJldHVybiB7aTogaSwgajogaiwgazogaywgeDogeGMsIHk6IHljLCByOiBkeCAqIGR4ICsgZHkgKiBkeX07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZHVwKGVkZ2VzKSB7XHJcbiAgICB2YXIgaSwgaiwgYSwgYiwgbSwgbjtcclxuXHJcbiAgICBmb3IgKGogPSBlZGdlcy5sZW5ndGg7IGo7ICkge1xyXG4gICAgICAgIGIgPSBlZGdlc1stLWpdO1xyXG4gICAgICAgIGEgPSBlZGdlc1stLWpdO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSBqOyBpOyApIHtcclxuICAgICAgICAgICAgbiA9IGVkZ2VzWy0taV07XHJcbiAgICAgICAgICAgIG0gPSBlZGdlc1stLWldO1xyXG5cclxuICAgICAgICAgICAgaWYgKChhID09PSBtICYmIGIgPT09IG4pIHx8IChhID09PSBuICYmIGIgPT09IG0pKSB7XHJcbiAgICAgICAgICAgICAgICBlZGdlcy5zcGxpY2UoaiwgMik7XHJcbiAgICAgICAgICAgICAgICBlZGdlcy5zcGxpY2UoaSwgMik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxudmFyIGRlbGF1bmF5ID0ge1xyXG4gICAgdHJpYW5ndWxhdGU6IGZ1bmN0aW9uKHZlcnRpY2VzLCBrZXkpIHtcclxuICAgICAgICB2YXIgbiA9IHZlcnRpY2VzLmxlbmd0aDtcclxuICAgICAgICB2YXIgaSwgaiwgaW5kaWNlcywgc3QsIG9wZW4sIGNsb3NlZCwgZWRnZXMsIGR4LCBkeSwgYSwgYiwgYztcclxuXHJcbiAgICAgICAgLyogQmFpbCBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIHZlcnRpY2VzIHRvIGZvcm0gYW55IHRyaWFuZ2xlcy4gKi9cclxuICAgICAgICBpZiAobiA8IDMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogU2xpY2Ugb3V0IHRoZSBhY3R1YWwgdmVydGljZXMgZnJvbSB0aGUgcGFzc2VkIG9iamVjdHMuIChEdXBsaWNhdGUgdGhlXHJcbiAgICAgICAgICAgICogYXJyYXkgZXZlbiBpZiB3ZSBkb24ndCwgdGhvdWdoLCBzaW5jZSB3ZSBuZWVkIHRvIG1ha2UgYSBzdXBlcnRyaWFuZ2xlXHJcbiAgICAgICAgICAgICogbGF0ZXIgb24hKSAqL1xyXG4gICAgICAgIHZlcnRpY2VzID0gdmVydGljZXMuc2xpY2UoMCk7XHJcblxyXG4gICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgICAgZm9yIChpID0gbjsgaS0tOyApIHtcclxuICAgICAgICAgICAgICAgIHZlcnRpY2VzW2ldID0gdmVydGljZXNbaV1ba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogTWFrZSBhbiBhcnJheSBvZiBpbmRpY2VzIGludG8gdGhlIHZlcnRleCBhcnJheSwgc29ydGVkIGJ5IHRoZVxyXG4gICAgICAgICAgICAqIHZlcnRpY2VzJyB4LXBvc2l0aW9uLiBGb3JjZSBzdGFibGUgc29ydGluZyBieSBjb21wYXJpbmcgaW5kaWNlcyBpZlxyXG4gICAgICAgICAgICAqIHRoZSB4LXBvc2l0aW9ucyBhcmUgZXF1YWwuICovXHJcbiAgICAgICAgaW5kaWNlcyA9IG5ldyBBcnJheShuKTtcclxuXHJcbiAgICAgICAgZm9yIChpID0gbjsgaS0tOyApIHtcclxuICAgICAgICAgICAgaW5kaWNlc1tpXSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpbmRpY2VzLnNvcnQoZnVuY3Rpb24oaSwgaikge1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IHZlcnRpY2VzW2pdWzBdIC0gdmVydGljZXNbaV1bMF07XHJcbiAgICAgICAgICAgIHJldHVybiBkaWZmICE9PSAwID8gZGlmZiA6IGkgLSBqO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvKiBOZXh0LCBmaW5kIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgc3VwZXJ0cmlhbmdsZSAod2hpY2ggY29udGFpbnMgYWxsIG90aGVyXHJcbiAgICAgICAgICAgICogdHJpYW5nbGVzKSwgYW5kIGFwcGVuZCB0aGVtIG9udG8gdGhlIGVuZCBvZiBhIChjb3B5IG9mKSB0aGUgdmVydGV4XHJcbiAgICAgICAgICAgICogYXJyYXkuICovXHJcbiAgICAgICAgc3QgPSBzdXBlcnRyaWFuZ2xlKHZlcnRpY2VzKTtcclxuICAgICAgICB2ZXJ0aWNlcy5wdXNoKHN0WzBdLCBzdFsxXSwgc3RbMl0pO1xyXG5cclxuICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBvcGVuIGxpc3QgKGNvbnRhaW5pbmcgdGhlIHN1cGVydHJpYW5nbGUgYW5kIG5vdGhpbmdcclxuICAgICAgICAgICAgKiBlbHNlKSBhbmQgdGhlIGNsb3NlZCBsaXN0ICh3aGljaCBpcyBlbXB0eSBzaW5jZSB3ZSBoYXZuJ3QgcHJvY2Vzc2VkXHJcbiAgICAgICAgICAgICogYW55IHRyaWFuZ2xlcyB5ZXQpLiAqL1xyXG4gICAgICAgIG9wZW4gICA9IFtjaXJjdW1jaXJjbGUodmVydGljZXMsIG4gKyAwLCBuICsgMSwgbiArIDIpXTtcclxuICAgICAgICBjbG9zZWQgPSBbXTtcclxuICAgICAgICBlZGdlcyAgPSBbXTtcclxuXHJcbiAgICAgICAgLyogSW5jcmVtZW50YWxseSBhZGQgZWFjaCB2ZXJ0ZXggdG8gdGhlIG1lc2guICovXHJcbiAgICAgICAgZm9yIChpID0gaW5kaWNlcy5sZW5ndGg7IGktLTsgZWRnZXMubGVuZ3RoID0gMCkge1xyXG4gICAgICAgICAgICBjID0gaW5kaWNlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8qIEZvciBlYWNoIG9wZW4gdHJpYW5nbGUsIGNoZWNrIHRvIHNlZSBpZiB0aGUgY3VycmVudCBwb2ludCBpc1xyXG4gICAgICAgICAgICAgICAgKiBpbnNpZGUgaXQncyBjaXJjdW1jaXJjbGUuIElmIGl0IGlzLCByZW1vdmUgdGhlIHRyaWFuZ2xlIGFuZCBhZGRcclxuICAgICAgICAgICAgICAgICogaXQncyBlZGdlcyB0byBhbiBlZGdlIGxpc3QuICovXHJcbiAgICAgICAgICAgIGZvciAoaiA9IG9wZW4ubGVuZ3RoOyBqLS07ICkge1xyXG4gICAgICAgICAgICAgICAgLyogSWYgdGhpcyBwb2ludCBpcyB0byB0aGUgcmlnaHQgb2YgdGhpcyB0cmlhbmdsZSdzIGNpcmN1bWNpcmNsZSxcclxuICAgICAgICAgICAgICAgICAgICAqIHRoZW4gdGhpcyB0cmlhbmdsZSBzaG91bGQgbmV2ZXIgZ2V0IGNoZWNrZWQgYWdhaW4uIFJlbW92ZSBpdFxyXG4gICAgICAgICAgICAgICAgICAgICogZnJvbSB0aGUgb3BlbiBsaXN0LCBhZGQgaXQgdG8gdGhlIGNsb3NlZCBsaXN0LCBhbmQgc2tpcC4gKi9cclxuICAgICAgICAgICAgICAgIGR4ID0gdmVydGljZXNbY11bMF0gLSBvcGVuW2pdLng7XHJcbiAgICAgICAgICAgICAgICBpZiAoZHggPiAwLjAgJiYgZHggKiBkeCA+IG9wZW5bal0ucikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlZC5wdXNoKG9wZW5bal0pO1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZW4uc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8qIElmIHdlJ3JlIG91dHNpZGUgdGhlIGNpcmN1bWNpcmNsZSwgc2tpcCB0aGlzIHRyaWFuZ2xlLiAqL1xyXG4gICAgICAgICAgICAgICAgZHkgPSB2ZXJ0aWNlc1tjXVsxXSAtIG9wZW5bal0ueTtcclxuICAgICAgICAgICAgICAgIGlmIChkeCAqIGR4ICsgZHkgKiBkeSAtIG9wZW5bal0uciA+IEVQU0lMT04pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvKiBSZW1vdmUgdGhlIHRyaWFuZ2xlIGFuZCBhZGQgaXQncyBlZGdlcyB0byB0aGUgZWRnZSBsaXN0LiAqL1xyXG4gICAgICAgICAgICAgICAgZWRnZXMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmksIG9wZW5bal0uaixcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmosIG9wZW5bal0uayxcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmssIG9wZW5bal0uaVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIG9wZW4uc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKiBSZW1vdmUgYW55IGRvdWJsZWQgZWRnZXMuICovXHJcbiAgICAgICAgICAgIGRlZHVwKGVkZ2VzKTtcclxuXHJcbiAgICAgICAgICAgIC8qIEFkZCBhIG5ldyB0cmlhbmdsZSBmb3IgZWFjaCBlZGdlLiAqL1xyXG4gICAgICAgICAgICBmb3IgKGogPSBlZGdlcy5sZW5ndGg7IGo7ICkge1xyXG4gICAgICAgICAgICAgICAgYiA9IGVkZ2VzWy0tal07XHJcbiAgICAgICAgICAgICAgICBhID0gZWRnZXNbLS1qXTtcclxuICAgICAgICAgICAgICAgIG9wZW4ucHVzaChjaXJjdW1jaXJjbGUodmVydGljZXMsIGEsIGIsIGMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogQ29weSBhbnkgcmVtYWluaW5nIG9wZW4gdHJpYW5nbGVzIHRvIHRoZSBjbG9zZWQgbGlzdCwgYW5kIHRoZW5cclxuICAgICAgICAgICAgKiByZW1vdmUgYW55IHRyaWFuZ2xlcyB0aGF0IHNoYXJlIGEgdmVydGV4IHdpdGggdGhlIHN1cGVydHJpYW5nbGUsXHJcbiAgICAgICAgICAgICogYnVpbGRpbmcgYSBsaXN0IG9mIHRyaXBsZXRzIHRoYXQgcmVwcmVzZW50IHRyaWFuZ2xlcy4gKi9cclxuICAgICAgICBmb3IgKGkgPSBvcGVuLmxlbmd0aDsgaS0tOyApIHtcclxuICAgICAgICAgICAgY2xvc2VkLnB1c2gob3BlbltpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wZW4ubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChpID0gY2xvc2VkLmxlbmd0aDsgaS0tOyApIHtcclxuICAgICAgICAgICAgaWYgKGNsb3NlZFtpXS5pIDwgbiAmJiBjbG9zZWRbaV0uaiA8IG4gJiYgY2xvc2VkW2ldLmsgPCBuKSB7XHJcbiAgICAgICAgICAgICAgICBvcGVuLnB1c2goY2xvc2VkW2ldLmksIGNsb3NlZFtpXS5qLCBjbG9zZWRbaV0uayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIFlheSwgd2UncmUgZG9uZSEgKi9cclxuICAgICAgICByZXR1cm4gb3BlbjtcclxuICAgIH0sXHJcbiAgICBjb250YWluczogZnVuY3Rpb24odHJpLCBwKSB7XHJcbiAgICAgICAgLyogQm91bmRpbmcgYm94IHRlc3QgZmlyc3QsIGZvciBxdWljayByZWplY3Rpb25zLiAqL1xyXG4gICAgICAgIGlmICgocFswXSA8IHRyaVswXVswXSAmJiBwWzBdIDwgdHJpWzFdWzBdICYmIHBbMF0gPCB0cmlbMl1bMF0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFswXSA+IHRyaVswXVswXSAmJiBwWzBdID4gdHJpWzFdWzBdICYmIHBbMF0gPiB0cmlbMl1bMF0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFsxXSA8IHRyaVswXVsxXSAmJiBwWzFdIDwgdHJpWzFdWzFdICYmIHBbMV0gPCB0cmlbMl1bMV0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFsxXSA+IHRyaVswXVsxXSAmJiBwWzFdID4gdHJpWzFdWzFdICYmIHBbMV0gPiB0cmlbMl1bMV0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGEgPSB0cmlbMV1bMF0gLSB0cmlbMF1bMF07XHJcbiAgICAgICAgdmFyIGIgPSB0cmlbMl1bMF0gLSB0cmlbMF1bMF07XHJcbiAgICAgICAgdmFyIGMgPSB0cmlbMV1bMV0gLSB0cmlbMF1bMV07XHJcbiAgICAgICAgdmFyIGQgPSB0cmlbMl1bMV0gLSB0cmlbMF1bMV07XHJcbiAgICAgICAgdmFyIGkgPSBhICogZCAtIGIgKiBjO1xyXG5cclxuICAgICAgICAvKiBEZWdlbmVyYXRlIHRyaS4gKi9cclxuICAgICAgICBpZiAoaSA9PT0gMC4wKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHUgPSAoZCAqIChwWzBdIC0gdHJpWzBdWzBdKSAtIGIgKiAocFsxXSAtIHRyaVswXVsxXSkpIC8gaSxcclxuICAgICAgICAgICAgICAgIHYgPSAoYSAqIChwWzFdIC0gdHJpWzBdWzFdKSAtIGMgKiAocFswXSAtIHRyaVswXVswXSkpIC8gaTtcclxuXHJcbiAgICAgICAgLyogSWYgd2UncmUgb3V0c2lkZSB0aGUgdHJpLCBmYWlsLiAqL1xyXG4gICAgICAgIGlmICh1IDwgMC4wIHx8IHYgPCAwLjAgfHwgKHUgKyB2KSA+IDEuMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBbdSwgdl07XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBkZWxhdW5heTtcclxuIiwiXHJcbmV4cG9ydCB2YXIgR0xNQVRfRVBTSUxPTiA9IDAuMDAwMDAxO1xyXG5cclxuLy8gVXNlIEFycmF5IGluc3RlYWQgb2YgRmxvYXQzMkFycmF5LiBJdCBzZWVtcyB0byBiZSBtdWNoIGZhc3RlciBhbmQgaGlnaGVyIHByZWNpc2lvbi5cclxuZXhwb3J0IHZhciBHTE1BVF9BUlJBWV9UWVBFID0gQXJyYXk7XHJcbi8vIGlmKCFHTE1BVF9BUlJBWV9UWVBFKSB7XHJcbi8vICAgICBHTE1BVF9BUlJBWV9UWVBFID0gKHR5cGVvZiBGbG9hdDMyQXJyYXkgIT09ICd1bmRlZmluZWQnKSA/IEZsb2F0MzJBcnJheSA6IEFycmF5O1xyXG4vLyB9XHJcblxyXG5leHBvcnQgdmFyIEdMTUFUX1JBTkRPTSA9IE1hdGgucmFuZG9tO1xyXG4iLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgMiBEaW1lbnNpb25hbCBWZWN0b3JcclxuICogQG5hbWUgdmVjMlxyXG4gKi9cclxuXHJcbnZhciB2ZWMyID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjMlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjMn0gYSBuZXcgMkQgdmVjdG9yXHJcbiAqL1xyXG52ZWMyLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDIpO1xyXG4gICAgb3V0WzBdID0gMDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMiBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBhIG5ldyAyRCB2ZWN0b3JcclxuICovXHJcbnZlYzIuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMik7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMyIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gYSBuZXcgMkQgdmVjdG9yXHJcbiAqL1xyXG52ZWMyLmZyb21WYWx1ZXMgPSBmdW5jdGlvbih4LCB5KSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMik7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzIgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMiB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5KSB7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTdWJ0cmFjdHMgdmVjdG9yIGIgZnJvbSB2ZWN0b3IgYVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnN1YnRyYWN0ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMi5zdWIgPSB2ZWMyLnN1YnRyYWN0O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm11bHRpcGx5ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMi5tdWwgPSB2ZWMyLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLmRpdmlkZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAvIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpdmlkZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLmRpdiA9IHZlYzIuZGl2aWRlO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1pbmltdW0gb2YgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gTWF0aC5taW4oYVswXSwgYlswXSk7XHJcbiAgICBvdXRbMV0gPSBNYXRoLm1pbihhWzFdLCBiWzFdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMyIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYjtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWMyJ3MgYWZ0ZXIgc2NhbGluZyB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWVcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYiBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgKGJbMF0gKiBzY2FsZSk7XHJcbiAgICBvdXRbMV0gPSBhWzFdICsgKGJbMV0gKiBzY2FsZSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMyLmRpc3RhbmNlID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgdmFyIHggPSBiWzBdIC0gYVswXSxcclxuICAgICAgICB5ID0gYlsxXSAtIGFbMV07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuZGlzdCA9IHZlYzIuZGlzdGFuY2U7XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMyLnNxdWFyZWREaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXHJcbiAgICAgICAgeSA9IGJbMV0gLSBhWzFdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuc3FyRGlzdCA9IHZlYzIuc3F1YXJlZERpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWMyLmxlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLmxlbiA9IHZlYzIubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWMyLnNxdWFyZWRMZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLnNxckxlbiA9IHZlYzIuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gLWFbMF07XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5pbnZlcnNlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcclxuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xyXG4gIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogTm9ybWFsaXplIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgdmFyIGxlbiA9IHgqeCArIHkqeTtcclxuICAgIGlmIChsZW4gPiAwKSB7XHJcbiAgICAgICAgLy9UT0RPOiBldmFsdWF0ZSB1c2Ugb2YgZ2xtX2ludnNxcnQgaGVyZT9cclxuICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgICAgb3V0WzBdID0gYVswXSAqIGxlbjtcclxuICAgICAgICBvdXRbMV0gPSBhWzFdICogbGVuO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXHJcbnZlYzIuZG90ID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbXB1dGVzIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHR3byB2ZWMyJ3NcclxuICogTm90ZSB0aGF0IHRoZSBjcm9zcyBwcm9kdWN0IG11c3QgYnkgZGVmaW5pdGlvbiBwcm9kdWNlIGEgM0QgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzIuY3Jvc3MgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZhciB6ID0gYVswXSAqIGJbMV0gLSBhWzFdICogYlswXTtcclxuICAgIG91dFswXSA9IG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSB6O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIubGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcclxuICAgIHZhciBheCA9IGFbMF0sXHJcbiAgICAgICAgYXkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XHJcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHZlY3RvciB3aXRoIHRoZSBnaXZlbiBzY2FsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3NjYWxlXSBMZW5ndGggb2YgdGhlIHJlc3VsdGluZyB2ZWN0b3IuIElmIG9tbWl0dGVkLCBhIHVuaXQgdmVjdG9yIHdpbGwgYmUgcmV0dXJuZWRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5yYW5kb20gPSBmdW5jdGlvbiAob3V0LCBzY2FsZSkge1xyXG4gICAgc2NhbGUgPSBzY2FsZSB8fCAxLjA7XHJcbiAgICB2YXIgciA9IEdMTUFUX1JBTkRPTSgpICogMi4wICogTWF0aC5QSTtcclxuICAgIG91dFswXSA9IE1hdGguY29zKHIpICogc2NhbGU7XHJcbiAgICBvdXRbMV0gPSBNYXRoLnNpbihyKSAqIHNjYWxlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDJ9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIudHJhbnNmb3JtTWF0MiA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzJdICogeTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDJkfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnRyYW5zZm9ybU1hdDJkID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV07XHJcbiAgICBvdXRbMF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHkgKyBtWzVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQzXHJcbiAqIDNyZCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDN9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIudHJhbnNmb3JtTWF0MyA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzNdICogeSArIG1bNl07XHJcbiAgICBvdXRbMV0gPSBtWzFdICogeCArIG1bNF0gKiB5ICsgbVs3XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMiB3aXRoIGEgbWF0NFxyXG4gKiAzcmQgdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcwJ1xyXG4gKiA0dGggdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQ0fSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnRyYW5zZm9ybU1hdDQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZhciB4ID0gYVswXSxcclxuICAgICAgICB5ID0gYVsxXTtcclxuICAgIG91dFswXSA9IG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzEyXTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzEzXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybSBzb21lIG9wZXJhdGlvbiBvdmVyIGFuIGFycmF5IG9mIHZlYzJzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3ZlclxyXG4gKiBAcGFyYW0ge051bWJlcn0gc3RyaWRlIE51bWJlciBvZiBlbGVtZW50cyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHZlYzIuIElmIDAgYXNzdW1lcyB0aWdodGx5IHBhY2tlZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IE51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjMnMgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggdmVjdG9yIGluIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW2FyZ10gYWRkaXRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGZuXHJcbiAqIEByZXR1cm5zIHtBcnJheX0gYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuZm9yRWFjaCA9IChmdW5jdGlvbigpIHtcclxuICAgIHZhciB2ZWMgPSB2ZWMyLmNyZWF0ZSgpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbihhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcclxuICAgICAgICB2YXIgaSwgbDtcclxuICAgICAgICBpZighc3RyaWRlKSB7XHJcbiAgICAgICAgICAgIHN0cmlkZSA9IDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZighb2Zmc2V0KSB7XHJcbiAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjb3VudCkge1xyXG4gICAgICAgICAgICBsID0gTWF0aC5taW4oKGNvdW50ICogc3RyaWRlKSArIG9mZnNldCwgYS5sZW5ndGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGwgPSBhLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihpID0gb2Zmc2V0OyBpIDwgbDsgaSArPSBzdHJpZGUpIHtcclxuICAgICAgICAgICAgdmVjWzBdID0gYVtpXTsgdmVjWzFdID0gYVtpKzFdO1xyXG4gICAgICAgICAgICBmbih2ZWMsIHZlYywgYXJnKTtcclxuICAgICAgICAgICAgYVtpXSA9IHZlY1swXTsgYVtpKzFdID0gdmVjWzFdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjMjsiLCJpbXBvcnQgdmVjMiBmcm9tICcuLi9nbG1hdHJpeC92ZWMyJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuVmVjdG9yMlxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKi9cclxudmFyIFZlY3RvcjIgPSBmdW5jdGlvbih4LCB5KSB7XHJcblxyXG4gICAgeCA9IHggfHwgMDtcclxuICAgIHkgPSB5IHx8IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIFZlY3RvcjIsIHJlYWQgYW5kIHdyaXRlIG9mIHgsIHkgd2lsbCBjaGFuZ2UgdGhlIHZhbHVlcyBpbiBhcnJheVxyXG4gICAgICogQWxsIG1ldGhvZHMgYWxzbyBvcGVyYXRlIG9uIHRoZSBhcnJheSBpbnN0ZWFkIG9mIHgsIHkgY29tcG9uZW50c1xyXG4gICAgICogQG5hbWUgYXJyYXlcclxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IyI1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFycmF5ID0gdmVjMi5mcm9tVmFsdWVzKHgsIHkpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlydHkgZmxhZyBpcyB1c2VkIGJ5IHRoZSBOb2RlIHRvIGRldGVybWluZVxyXG4gICAgICogaWYgdGhlIG1hdHJpeCBpcyB1cGRhdGVkIHRvIGxhdGVzdFxyXG4gICAgICogQG5hbWUgX2RpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjIjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcblZlY3RvcjIucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBWZWN0b3IyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGIgdG8gc2VsZlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCBhbmQgeSBjb21wb25lbnRzXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24oeCwgeSkge1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSB4O1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSB5O1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCBhbmQgeSBjb21wb25lbnRzIGZyb20gYXJyYXlcclxuICAgICAqIEBwYXJhbSAge0Zsb2F0MzJBcnJheXxudW1iZXJbXX0gYXJyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNldEFycmF5OiBmdW5jdGlvbihhcnIpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0gYXJyWzBdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSBhcnJbMV07XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBWZWN0b3IyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIodGhpcy54LCB0aGlzLnkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgeCwgeSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcm9zcyBwcm9kdWN0IG9mIHNlbGYgYW5kIGIsIHdyaXR0ZW4gdG8gYSBWZWN0b3IzIG91dFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBjcm9zczogZnVuY3Rpb24ob3V0LCBiKSB7XHJcbiAgICAgICAgdmVjMi5jcm9zcyhvdXQuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBkaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5kaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuZGlzdGFuY2UodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIGRpdmlkZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGRpdjogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuZGl2KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXZpZGUgc2VsZiBieSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgZGl2aWRlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5kaXZpZGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5kb3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2YgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIubGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIubGVuZ3RoKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIExpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbGVycDogZnVuY3Rpb24oYSwgYiwgdCkge1xyXG4gICAgICAgIHZlYzIubGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWluaW11bSBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbWluOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5taW4odGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1heGltdW0gb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIG1heDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIubWF4KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBtdWw6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXV0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOZWdhdGUgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBuZWdhdGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZlYzIubmVnYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWxpemUgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZlYzIubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSByYW5kb20geCwgeSBjb21wb25lbnRzIHdpdGggYSBnaXZlbiBzY2FsZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICByYW5kb206IGZ1bmN0aW9uKHNjYWxlKSB7XHJcbiAgICAgICAgdmVjMi5yYW5kb20odGhpcy5hcnJheSwgc2NhbGUpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24ocykge1xyXG4gICAgICAgIHZlYzIuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIGIgYW5kIGFkZCB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlQW5kQWRkOiBmdW5jdGlvbihiLCBzKSB7XHJcbiAgICAgICAgdmVjMi5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5zcXJEaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZERpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3F1YXJlZERpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkTGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3FyTGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3F1YXJlZExlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3Igc3VidHJhY3RcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzdWI6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLnN1Yih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgYiBmcm9tIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzdWJ0cmFjdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuc3VidHJhY3QodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgyIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQyOiBmdW5jdGlvbihtKSB7XHJcbiAgICAgICAgdmVjMi50cmFuc2Zvcm1NYXQyKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4MmQgbVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQyZDogZnVuY3Rpb24obSkge1xyXG4gICAgICAgIHZlYzIudHJhbnNmb3JtTWF0MmQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgbS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgzIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQzOiBmdW5jdGlvbihtKSB7XHJcbiAgICAgICAgdmVjMi50cmFuc2Zvcm1NYXQzKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4NCBtXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtTWF0NDogZnVuY3Rpb24obSkge1xyXG4gICAgICAgIHZlYzIudHJhbnNmb3JtTWF0NCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLy8gR2V0dGVyIGFuZCBTZXR0ZXJcclxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xyXG5cclxuICAgIHZhciBwcm90byA9IFZlY3RvcjIucHJvdG90eXBlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yMlxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzBdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVswXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yMlxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8vIFN1cHBseSBtZXRob2RzIHRoYXQgYXJlIG5vdCBpbiBwbGFjZVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5hZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5KSB7XHJcbiAgICB2ZWMyLnNldChvdXQuYXJyYXksIHgsIHkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGIpIHtcclxuICAgIHZlYzIuY29weShvdXQuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5jcm9zcyA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMi5jcm9zcyhvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLmRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5kaXN0YW5jZShhLmFycmF5LCBiLmFycmF5KTtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIuZGlzdGFuY2UgPSBWZWN0b3IyLmRpc3Q7XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuZGl2ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMyLmRpdmlkZShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5kaXZpZGUgPSBWZWN0b3IyLmRpdjtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMi5kb3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5kb3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIubGVuID0gZnVuY3Rpb24oYikge1xyXG4gICAgcmV0dXJuIHZlYzIubGVuZ3RoKGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLy8gVmVjdG9yMi5sZW5ndGggPSBWZWN0b3IyLmxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5sZXJwID0gZnVuY3Rpb24ob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2ZWMyLmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5taW4gPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIubWluKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMi5tYXgob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIubXVsdGlwbHkob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIubXVsdGlwbHkgPSBWZWN0b3IyLm11bDtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMi5uZWdhdGUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMi5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIucmFuZG9tID0gZnVuY3Rpb24ob3V0LCBzY2FsZSkge1xyXG4gICAgdmVjMi5yYW5kb20ob3V0LmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgc2NhbGUpIHtcclxuICAgIHZlYzIuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICB2ZWMyLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLnNxckRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5zcXJEaXN0KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMi5zcXVhcmVkRGlzdGFuY2UgPSBWZWN0b3IyLnNxckRpc3Q7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIuc3FyTGVuID0gZnVuY3Rpb24oYSkge1xyXG4gICAgcmV0dXJuIHZlYzIuc3FyTGVuKGEuYXJyYXkpO1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLnNxdWFyZWRMZW5ndGggPSBWZWN0b3IyLnNxckxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc3ViID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMyLnN1YnRyYWN0KG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLnN1YnRyYWN0ID0gVmVjdG9yMi5zdWI7XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MiA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQyKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9ICBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MmQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZlYzIudHJhbnNmb3JtTWF0MmQob3V0LmFycmF5LCBhLmFycmF5LCBtLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtNYXRyaXgzfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MyA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQzKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQ0KG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBWZWN0b3IyO1xyXG4iLCIvLyAyRCBCbGVuZCBjbGlwIG9mIGJsZW5kIHRyZWVcclxuLy8gaHR0cDovL2RvY3MudW5pdHkzZC5jb20vRG9jdW1lbnRhdGlvbi9NYW51YWwvMkRCbGVuZGluZy5odG1sXHJcbmltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcbmltcG9ydCBkZWxhdW5heSBmcm9tICcuLi91dGlsL2RlbGF1bmF5JztcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi4vbWF0aC9WZWN0b3IyJztcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmFuaW1hdGlvbi5CbGVuZDJEQ2xpcC5JQ2xpcElucHV0XHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5WZWN0b3IyfSBwb3NpdGlvblxyXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiAyZCBibGVuZGluZyBub2RlIGluIGFuaW1hdGlvbiBibGVuZCB0cmVlLlxyXG4gKiBvdXRwdXQgY2xpcCBtdXN0IGhhdmUgYmxlbmQyRCBtZXRob2RcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5CbGVuZDJEQ2xpcFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGlvXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cclxuICogQHBhcmFtIHtvYmplY3RbXX0gW29wdHMuaW5wdXRzXVxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yMn0gW29wdHMucG9zaXRpb25dXHJcbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gW29wdHMub3V0cHV0XVxyXG4gKi9cclxudmFyIEJsZW5kMkRDbGlwID0gZnVuY3Rpb24gKG9wdHMpIHtcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XHJcbiAgICAvKipcclxuICAgICAqIE91dHB1dCBjbGlwIG11c3QgaGF2ZSBibGVuZDJEIG1ldGhvZFxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkNsaXB9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3V0cHV0ID0gb3B0cy5vdXRwdXQgfHwgbnVsbDtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkJsZW5kMkRDbGlwLklDbGlwSW5wdXRbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5pbnB1dHMgPSBvcHRzLmlucHV0cyB8fCBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVUcmlhbmdsZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5fdHJpYW5nbGVzID0gW107XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlVHJpYW5nbGVzKCk7XHJcbn07XHJcblxyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUgPSBuZXcgQ2xpcCgpO1xyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZDJEQ2xpcDtcclxuLyoqXHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IyfSBwb3NpdGlvblxyXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGlucHV0Q2xpcFxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldF1cclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQmxlbmQyRENsaXAuSUNsaXBJbnB1dH1cclxuICovXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5hZGRJbnB1dCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgaW5wdXRDbGlwLCBvZmZzZXQpIHtcclxuICAgIHZhciBvYmogPSB7XHJcbiAgICAgICAgcG9zaXRpb24gOiBwb3NpdGlvbixcclxuICAgICAgICBjbGlwIDogaW5wdXRDbGlwLFxyXG4gICAgICAgIG9mZnNldCA6IG9mZnNldCB8fCAwXHJcbiAgICB9O1xyXG4gICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgdGhpcy5saWZlID0gTWF0aC5tYXgoaW5wdXRDbGlwLmxpZmUsIHRoaXMubGlmZSk7XHJcbiAgICAvLyBUT0RPIENoYW5nZSB0byBpbmNyZW1lbnRhbGx5IGFkZGluZ1xyXG4gICAgdGhpcy5fdXBkYXRlVHJpYW5nbGVzKCk7XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxufTtcclxuXHJcbi8vIERlbGF1bmF5IHRyaWFuZ3VsYXRlXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5fdXBkYXRlVHJpYW5nbGVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGlucHV0cyA9IHRoaXMuaW5wdXRzLm1hcChmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIHJldHVybiBhLnBvc2l0aW9uO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl90cmlhbmdsZXMgPSBkZWxhdW5heS50cmlhbmd1bGF0ZShpbnB1dHMsICdhcnJheScpO1xyXG59O1xyXG5cclxuQmxlbmQyRENsaXAucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAodGltZSwgZFRpbWUsIHNpbGVudCkge1xyXG5cclxuICAgIHZhciByZXQgPSBDbGlwLnByb3RvdHlwZS5zdGVwLmNhbGwodGhpcywgdGltZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcclxuICAgICAgICB0aGlzLnNldFRpbWUodGhpcy5nZXRFbGFwc2VkVGltZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXHJcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufTtcclxuXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIHZhciByZXMgPSB0aGlzLl9maW5kVHJpYW5nbGUodGhpcy5wb3NpdGlvbik7XHJcbiAgICBpZiAoIXJlcykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIEluIEJhcnljZW50cmljXHJcbiAgICB2YXIgYSA9IHJlc1sxXTsgLy8gUGVyY2VudCBvZiBjbGlwMlxyXG4gICAgdmFyIGIgPSByZXNbMl07IC8vIFBlcmNlbnQgb2YgY2xpcDNcclxuXHJcbiAgICB2YXIgdHJpID0gcmVzWzBdO1xyXG5cclxuICAgIHZhciBpbjEgPSB0aGlzLmlucHV0c1t0cmkuaW5kaWNlc1swXV07XHJcbiAgICB2YXIgaW4yID0gdGhpcy5pbnB1dHNbdHJpLmluZGljZXNbMV1dO1xyXG4gICAgdmFyIGluMyA9IHRoaXMuaW5wdXRzW3RyaS5pbmRpY2VzWzJdXTtcclxuICAgIHZhciBjbGlwMSA9IGluMS5jbGlwO1xyXG4gICAgdmFyIGNsaXAyID0gaW4yLmNsaXA7XHJcbiAgICB2YXIgY2xpcDMgPSBpbjMuY2xpcDtcclxuXHJcbiAgICBjbGlwMS5zZXRUaW1lKCh0aW1lICsgaW4xLm9mZnNldCkgJSBjbGlwMS5saWZlKTtcclxuICAgIGNsaXAyLnNldFRpbWUoKHRpbWUgKyBpbjIub2Zmc2V0KSAlIGNsaXAyLmxpZmUpO1xyXG4gICAgY2xpcDMuc2V0VGltZSgodGltZSArIGluMy5vZmZzZXQpICUgY2xpcDMubGlmZSk7XHJcblxyXG4gICAgdmFyIGMxID0gY2xpcDEub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAxLm91dHB1dCA6IGNsaXAxO1xyXG4gICAgdmFyIGMyID0gY2xpcDIub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAyLm91dHB1dCA6IGNsaXAyO1xyXG4gICAgdmFyIGMzID0gY2xpcDMub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAzLm91dHB1dCA6IGNsaXAzO1xyXG5cclxuICAgIHRoaXMub3V0cHV0LmJsZW5kMkQoYzEsIGMyLCBjMywgYSwgYik7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xvbmUgYSBuZXcgQmxlbmQyRCBjbGlwXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2xvbmVJbnB1dHMgVHJ1ZSBpZiBjbG9uZSB0aGUgaW5wdXQgY2xpcHNcclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQmxlbmQyRENsaXB9XHJcbiAqL1xyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoY2xvbmVJbnB1dHMpIHtcclxuICAgIHZhciBjbGlwID0gQ2xpcC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgIGNsaXAub3V0cHV0ID0gdGhpcy5vdXRwdXQuY2xvbmUoKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgaW5wdXRDbGlwID0gY2xvbmVJbnB1dHMgPyB0aGlzLmlucHV0c1tpXS5jbGlwLmNsb25lKHRydWUpIDogdGhpcy5pbnB1dHNbaV0uY2xpcDtcclxuICAgICAgICBjbGlwLmFkZElucHV0KHRoaXMuaW5wdXRzW2ldLnBvc2l0aW9uLCBpbnB1dENsaXAsIHRoaXMuaW5wdXRzW2ldLm9mZnNldCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xpcDtcclxufTtcclxuXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5fZmluZFRyaWFuZ2xlID0gZnVuY3Rpb24gKHBvc2l0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fY2FjaGVUcmlhbmdsZSkge1xyXG4gICAgICAgIHZhciByZXMgPSBkZWxhdW5heS5jb250YWlucyh0aGlzLl9jYWNoZVRyaWFuZ2xlLnZlcnRpY2VzLCBwb3NpdGlvbi5hcnJheSk7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuX2NhY2hlVHJpYW5nbGUsIHJlc1swXSwgcmVzWzFdXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RyaWFuZ2xlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciB0cmkgPSB0aGlzLl90cmlhbmdsZXNbaV07XHJcbiAgICAgICAgdmFyIHJlcyA9IGRlbGF1bmF5LmNvbnRhaW5zKHRyaS52ZXJ0aWNlcywgdGhpcy5wb3NpdGlvbi5hcnJheSk7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWNoZVRyaWFuZ2xlID0gdHJpO1xyXG4gICAgICAgICAgICByZXR1cm4gW3RyaSwgcmVzWzBdLCByZXNbMV1dO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJsZW5kMkRDbGlwOyIsIlxyXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTMsIEJyYW5kb24gSm9uZXMsIENvbGluIE1hY0tlbnppZSBJVi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuXHJcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXHJcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcclxuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcclxuICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxyXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxyXG4gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxyXG4gICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXHJcblxyXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcclxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcclxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxyXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxyXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcclxuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xyXG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cclxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcclxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcclxuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovXHJcblxyXG5pbXBvcnQgeyBHTE1BVF9SQU5ET00sIEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcblxyXG4vKipcclxuICogQGNsYXNzIDMgRGltZW5zaW9uYWwgVmVjdG9yXHJcbiAqIEBuYW1lIHZlYzNcclxuICovXHJcblxyXG52YXIgdmVjMyA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5IHZlYzNcclxuICpcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cclxudmVjMy5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgzKTtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cclxudmVjMy5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgzKTtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjM30gYSBuZXcgM0QgdmVjdG9yXHJcbiAqL1xyXG52ZWMzLmZyb21WYWx1ZXMgPSBmdW5jdGlvbih4LCB5LCB6KSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMyk7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIG91dFsyXSA9IHo7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWMzIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBzb3VyY2UgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzIHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHopIHtcclxuICAgIG91dFswXSA9IHg7XHJcbiAgICBvdXRbMV0gPSB5O1xyXG4gICAgb3V0WzJdID0gejtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXSArIGJbMl07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuc3VidHJhY3QgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuc3ViID0gdmVjMy5zdWJ0cmFjdDtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5tdWx0aXBseSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAqIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdICogYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gKiBiWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5tdWwgPSB2ZWMzLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmRpdmlkZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAvIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gLyBiWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuZGl2ID0gdmVjMy5kaXZpZGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1heGltdW0gb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gTWF0aC5tYXgoYVswXSwgYlswXSk7XHJcbiAgICBvdXRbMV0gPSBNYXRoLm1heChhWzFdLCBiWzFdKTtcclxuICAgIG91dFsyXSA9IE1hdGgubWF4KGFbMl0sIGJbMl0pO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMzIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYjtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiO1xyXG4gICAgb3V0WzJdID0gYVsyXSAqIGI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzMncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIG91dFswXSA9IGFbMF0gKyAoYlswXSAqIHNjYWxlKTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyAoYlsxXSAqIHNjYWxlKTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyAoYlsyXSAqIHNjYWxlKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXHJcbnZlYzMuZGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSArIHoqeik7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuZGlzdCA9IHZlYzMuZGlzdGFuY2U7XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMzLnNxdWFyZWREaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXHJcbiAgICAgICAgeSA9IGJbMV0gLSBhWzFdLFxyXG4gICAgICAgIHogPSBiWzJdIC0gYVsyXTtcclxuICAgIHJldHVybiB4KnggKyB5KnkgKyB6Kno7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWREaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMzLnNxckRpc3QgPSB2ZWMzLnNxdWFyZWREaXN0YW5jZTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKi9cclxudmVjMy5sZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdLFxyXG4gICAgICAgIHogPSBhWzJdO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCh4KnggKyB5KnkgKyB6KnopO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5sZW4gPSB2ZWMzLmxlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKi9cclxudmVjMy5zcXVhcmVkTGVuZ3RoID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHZhciB4ID0gYVswXSxcclxuICAgICAgICB5ID0gYVsxXSxcclxuICAgICAgICB6ID0gYVsyXTtcclxuICAgIHJldHVybiB4KnggKyB5KnkgKyB6Kno7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5zcXJMZW4gPSB2ZWMzLnNxdWFyZWRMZW5ndGg7XHJcblxyXG4vKipcclxuICogTmVnYXRlcyB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBuZWdhdGVcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5uZWdhdGUgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IC1hWzBdO1xyXG4gICAgb3V0WzFdID0gLWFbMV07XHJcbiAgICBvdXRbMl0gPSAtYVsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5pbnZlcnNlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcclxuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xyXG4gIG91dFsyXSA9IDEuMCAvIGFbMl07XHJcbiAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl07XHJcbiAgICB2YXIgbGVuID0geCp4ICsgeSp5ICsgeip6O1xyXG4gICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgICAvL1RPRE86IGV2YWx1YXRlIHVzZSBvZiBnbG1faW52c3FydCBoZXJlP1xyXG4gICAgICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcclxuICAgICAgICBvdXRbMF0gPSBhWzBdICogbGVuO1xyXG4gICAgICAgIG91dFsxXSA9IGFbMV0gKiBsZW47XHJcbiAgICAgICAgb3V0WzJdID0gYVsyXSAqIGxlbjtcclxuICAgIH1lbHNle1xyXG4gICAgICAgIG91dFswXSA9IDA7XHJcbiAgICAgICAgb3V0WzFdID0gMDtcclxuICAgICAgICBvdXRbMl0gPSAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXHJcbnZlYzMuZG90ID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdICsgYVsyXSAqIGJbMl07XHJcbn07XHJcblxyXG4vKipcclxuICogQ29tcHV0ZXMgdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmNyb3NzID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLCBheSA9IGFbMV0sIGF6ID0gYVsyXSxcclxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdO1xyXG5cclxuICAgIG91dFswXSA9IGF5ICogYnogLSBheiAqIGJ5O1xyXG4gICAgb3V0WzFdID0gYXogKiBieCAtIGF4ICogYno7XHJcbiAgICBvdXRbMl0gPSBheCAqIGJ5IC0gYXkgKiBieDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmxlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLFxyXG4gICAgICAgIGF5ID0gYVsxXSxcclxuICAgICAgICBheiA9IGFbMl07XHJcbiAgICBvdXRbMF0gPSBheCArIHQgKiAoYlswXSAtIGF4KTtcclxuICAgIG91dFsxXSA9IGF5ICsgdCAqIChiWzFdIC0gYXkpO1xyXG4gICAgb3V0WzJdID0gYXogKyB0ICogKGJbMl0gLSBheik7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMucmFuZG9tID0gZnVuY3Rpb24gKG91dCwgc2NhbGUpIHtcclxuICAgIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xyXG5cclxuICAgIHZhciByID0gR0xNQVRfUkFORE9NKCkgKiAyLjAgKiBNYXRoLlBJO1xyXG4gICAgdmFyIHogPSAoR0xNQVRfUkFORE9NKCkgKiAyLjApIC0gMS4wO1xyXG4gICAgdmFyIHpTY2FsZSA9IE1hdGguc3FydCgxLjAteip6KSAqIHNjYWxlO1xyXG5cclxuICAgIG91dFswXSA9IE1hdGguY29zKHIpICogelNjYWxlO1xyXG4gICAgb3V0WzFdID0gTWF0aC5zaW4ocikgKiB6U2NhbGU7XHJcbiAgICBvdXRbMl0gPSB6ICogc2NhbGU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDQuXHJcbiAqIDR0aCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XTtcclxuICAgIHcgPSB3IHx8IDEuMDtcclxuICAgIG91dFswXSA9IChtWzBdICogeCArIG1bNF0gKiB5ICsgbVs4XSAqIHogKyBtWzEyXSkgLyB3O1xyXG4gICAgb3V0WzFdID0gKG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzldICogeiArIG1bMTNdKSAvIHc7XHJcbiAgICBvdXRbMl0gPSAobVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdKSAvIHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gdGhlIDN4MyBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy50cmFuc2Zvcm1NYXQzID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sIHkgPSBhWzFdLCB6ID0gYVsyXTtcclxuICAgIG91dFswXSA9IHggKiBtWzBdICsgeSAqIG1bM10gKyB6ICogbVs2XTtcclxuICAgIG91dFsxXSA9IHggKiBtWzFdICsgeSAqIG1bNF0gKyB6ICogbVs3XTtcclxuICAgIG91dFsyXSA9IHggKiBtWzJdICsgeSAqIG1bNV0gKyB6ICogbVs4XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMyB3aXRoIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy50cmFuc2Zvcm1RdWF0ID0gZnVuY3Rpb24ob3V0LCBhLCBxKSB7XHJcbiAgICAvLyBiZW5jaG1hcmtzOiBodHRwOi8vanNwZXJmLmNvbS9xdWF0ZXJuaW9uLXRyYW5zZm9ybS12ZWMzLWltcGxlbWVudGF0aW9uc1xyXG5cclxuICAgIHZhciB4ID0gYVswXSwgeSA9IGFbMV0sIHogPSBhWzJdLFxyXG4gICAgICAgIHF4ID0gcVswXSwgcXkgPSBxWzFdLCBxeiA9IHFbMl0sIHF3ID0gcVszXSxcclxuXHJcbiAgICAgICAgLy8gY2FsY3VsYXRlIHF1YXQgKiB2ZWNcclxuICAgICAgICBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeSxcclxuICAgICAgICBpeSA9IHF3ICogeSArIHF6ICogeCAtIHF4ICogeixcclxuICAgICAgICBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeCxcclxuICAgICAgICBpdyA9IC1xeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7XHJcblxyXG4gICAgLy8gY2FsY3VsYXRlIHJlc3VsdCAqIGludmVyc2UgcXVhdFxyXG4gICAgb3V0WzBdID0gaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeTtcclxuICAgIG91dFsxXSA9IGl5ICogcXcgKyBpdyAqIC1xeSArIGl6ICogLXF4IC0gaXggKiAtcXo7XHJcbiAgICBvdXRbMl0gPSBpeiAqIHF3ICsgaXcgKiAtcXogKyBpeCAqIC1xeSAtIGl5ICogLXF4O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGUgYSAzRCB2ZWN0b3IgYXJvdW5kIHRoZSB4LWF4aXNcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgdmVjMyBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLnJvdGF0ZVggPSBmdW5jdGlvbihvdXQsIGEsIGIsIGMpe1xyXG4gICB2YXIgcCA9IFtdLCByPVtdO1xyXG4gICAgICAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXHJcbiAgICAgIHBbMF0gPSBhWzBdIC0gYlswXTtcclxuICAgICAgcFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcFsyXSA9IGFbMl0gLSBiWzJdO1xyXG5cclxuICAgICAgLy9wZXJmb3JtIHJvdGF0aW9uXHJcbiAgICAgIHJbMF0gPSBwWzBdO1xyXG4gICAgICByWzFdID0gcFsxXSpNYXRoLmNvcyhjKSAtIHBbMl0qTWF0aC5zaW4oYyk7XHJcbiAgICAgIHJbMl0gPSBwWzFdKk1hdGguc2luKGMpICsgcFsyXSpNYXRoLmNvcyhjKTtcclxuXHJcbiAgICAgIC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cclxuICAgICAgb3V0WzBdID0gclswXSArIGJbMF07XHJcbiAgICAgIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xyXG4gICAgICBvdXRbMl0gPSByWzJdICsgYlsyXTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHktYXhpc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCBUaGUgcmVjZWl2aW5nIHZlYzNcclxuICogQHBhcmFtIHt2ZWMzfSBhIFRoZSB2ZWMzIHBvaW50IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IGMgVGhlIGFuZ2xlIG9mIHJvdGF0aW9uXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMucm90YXRlWSA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgYyl7XHJcbiAgICB2YXIgcCA9IFtdLCByPVtdO1xyXG4gICAgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxyXG4gICAgcFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgcFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcFsyXSA9IGFbMl0gLSBiWzJdO1xyXG5cclxuICAgIC8vcGVyZm9ybSByb3RhdGlvblxyXG4gICAgclswXSA9IHBbMl0qTWF0aC5zaW4oYykgKyBwWzBdKk1hdGguY29zKGMpO1xyXG4gICAgclsxXSA9IHBbMV07XHJcbiAgICByWzJdID0gcFsyXSpNYXRoLmNvcyhjKSAtIHBbMF0qTWF0aC5zaW4oYyk7XHJcblxyXG4gICAgLy90cmFuc2xhdGUgdG8gY29ycmVjdCBwb3NpdGlvblxyXG4gICAgb3V0WzBdID0gclswXSArIGJbMF07XHJcbiAgICBvdXRbMV0gPSByWzFdICsgYlsxXTtcclxuICAgIG91dFsyXSA9IHJbMl0gKyBiWzJdO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlIGEgM0QgdmVjdG9yIGFyb3VuZCB0aGUgei1heGlzXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IFRoZSByZWNlaXZpbmcgdmVjM1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7dmVjM30gYiBUaGUgb3JpZ2luIG9mIHRoZSByb3RhdGlvblxyXG4gKiBAcGFyYW0ge051bWJlcn0gYyBUaGUgYW5nbGUgb2Ygcm90YXRpb25cclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5yb3RhdGVaID0gZnVuY3Rpb24ob3V0LCBhLCBiLCBjKXtcclxuICAgIHZhciBwID0gW10sIHI9W107XHJcbiAgICAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXHJcbiAgICBwWzBdID0gYVswXSAtIGJbMF07XHJcbiAgICBwWzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBwWzJdID0gYVsyXSAtIGJbMl07XHJcblxyXG4gICAgLy9wZXJmb3JtIHJvdGF0aW9uXHJcbiAgICByWzBdID0gcFswXSpNYXRoLmNvcyhjKSAtIHBbMV0qTWF0aC5zaW4oYyk7XHJcbiAgICByWzFdID0gcFswXSpNYXRoLnNpbihjKSArIHBbMV0qTWF0aC5jb3MoYyk7XHJcbiAgICByWzJdID0gcFsyXTtcclxuXHJcbiAgICAvL3RyYW5zbGF0ZSB0byBjb3JyZWN0IHBvc2l0aW9uXHJcbiAgICBvdXRbMF0gPSByWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xyXG4gICAgb3V0WzJdID0gclsyXSArIGJbMl07XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQZXJmb3JtIHNvbWUgb3BlcmF0aW9uIG92ZXIgYW4gYXJyYXkgb2YgdmVjM3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGEgdGhlIGFycmF5IG9mIHZlY3RvcnMgdG8gaXRlcmF0ZSBvdmVyXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdHJpZGUgTnVtYmVyIG9mIGVsZW1lbnRzIGJldHdlZW4gdGhlIHN0YXJ0IG9mIGVhY2ggdmVjMy4gSWYgMCBhc3N1bWVzIHRpZ2h0bHkgcGFja2VkXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNraXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50IE51bWJlciBvZiB2ZWMzcyB0byBpdGVyYXRlIG92ZXIuIElmIDAgaXRlcmF0ZXMgb3ZlciBlbnRpcmUgYXJyYXlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gRnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCB2ZWN0b3IgaW4gdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXJnXSBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gZm5cclxuICogQHJldHVybnMge0FycmF5fSBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5mb3JFYWNoID0gKGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIHZlYyA9IHZlYzMuY3JlYXRlKCk7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGEsIHN0cmlkZSwgb2Zmc2V0LCBjb3VudCwgZm4sIGFyZykge1xyXG4gICAgICAgIHZhciBpLCBsO1xyXG4gICAgICAgIGlmKCFzdHJpZGUpIHtcclxuICAgICAgICAgICAgc3RyaWRlID0gMztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCFvZmZzZXQpIHtcclxuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGNvdW50KSB7XHJcbiAgICAgICAgICAgIGwgPSBNYXRoLm1pbigoY291bnQgKiBzdHJpZGUpICsgb2Zmc2V0LCBhLmxlbmd0aCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbCA9IGEubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKGkgPSBvZmZzZXQ7IGkgPCBsOyBpICs9IHN0cmlkZSkge1xyXG4gICAgICAgICAgICB2ZWNbMF0gPSBhW2ldOyB2ZWNbMV0gPSBhW2krMV07IHZlY1syXSA9IGFbaSsyXTtcclxuICAgICAgICAgICAgZm4odmVjLCB2ZWMsIGFyZyk7XHJcbiAgICAgICAgICAgIGFbaV0gPSB2ZWNbMF07IGFbaSsxXSA9IHZlY1sxXTsgYVtpKzJdID0gdmVjWzJdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgYW5nbGUgYmV0d2VlbiB0d28gM0QgdmVjdG9yc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYW5nbGUgaW4gcmFkaWFuc1xyXG4gKi9cclxudmVjMy5hbmdsZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuXHJcbiAgICB2YXIgdGVtcEEgPSB2ZWMzLmZyb21WYWx1ZXMoYVswXSwgYVsxXSwgYVsyXSk7XHJcbiAgICB2YXIgdGVtcEIgPSB2ZWMzLmZyb21WYWx1ZXMoYlswXSwgYlsxXSwgYlsyXSk7XHJcblxyXG4gICAgdmVjMy5ub3JtYWxpemUodGVtcEEsIHRlbXBBKTtcclxuICAgIHZlYzMubm9ybWFsaXplKHRlbXBCLCB0ZW1wQik7XHJcblxyXG4gICAgdmFyIGNvc2luZSA9IHZlYzMuZG90KHRlbXBBLCB0ZW1wQik7XHJcblxyXG4gICAgaWYoY29zaW5lID4gMS4wKXtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguYWNvcyhjb3NpbmUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjMzsiLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfUkFORE9NLCBHTE1BVF9BUlJBWV9UWVBFIH0gZnJvbSAnLi9jb21tb24nO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyA0IERpbWVuc2lvbmFsIFZlY3RvclxyXG4gKiBAbmFtZSB2ZWM0XHJcbiAqL1xyXG5cclxuZXhwb3J0IHZhciB2ZWM0ID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjNFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjNH0gYSBuZXcgNEQgdmVjdG9yXHJcbiAqL1xyXG52ZWM0LmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xyXG4gICAgb3V0WzBdID0gMDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWM0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cclxudmVjNC5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIG91dFszXSA9IGFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjNCBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cclxudmVjNC5mcm9tVmFsdWVzID0gZnVuY3Rpb24oeCwgeSwgeiwgdykge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xyXG4gICAgb3V0WzBdID0geDtcclxuICAgIG91dFsxXSA9IHk7XHJcbiAgICBvdXRbMl0gPSB6O1xyXG4gICAgb3V0WzNdID0gdztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHosIHcpIHtcclxuICAgIG91dFswXSA9IHg7XHJcbiAgICBvdXRbMV0gPSB5O1xyXG4gICAgb3V0WzJdID0gejtcclxuICAgIG91dFszXSA9IHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0LmFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSArIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXSArIGJbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQuc3VidHJhY3QgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcclxuICAgIG91dFszXSA9IGFbM10gLSBiWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjNC5zdWIgPSB2ZWM0LnN1YnRyYWN0O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0Lm11bHRpcGx5ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXSAqIGJbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdICogYlszXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQubXVsID0gdmVjNC5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBEaXZpZGVzIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5kaXZpZGUgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLyBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAvIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC8gYlsyXTtcclxuICAgIG91dFszXSA9IGFbM10gLyBiWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQuZGl2ID0gdmVjNC5kaXZpZGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XHJcbiAgICBvdXRbM10gPSBNYXRoLm1pbihhWzNdLCBiWzNdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5tYXgoYVsyXSwgYlsyXSk7XHJcbiAgICBvdXRbM10gPSBNYXRoLm1heChhWzNdLCBiWzNdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2NhbGVzIGEgdmVjNCBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAqIGI7XHJcbiAgICBvdXRbMV0gPSBhWzFdICogYjtcclxuICAgIG91dFsyXSA9IGFbMl0gKiBiO1xyXG4gICAgb3V0WzNdID0gYVszXSAqIGI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIG91dFswXSA9IGFbMF0gKyAoYlswXSAqIHNjYWxlKTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyAoYlsxXSAqIHNjYWxlKTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyAoYlsyXSAqIHNjYWxlKTtcclxuICAgIG91dFszXSA9IGFbM10gKyAoYlszXSAqIHNjYWxlKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXHJcbnZlYzQuZGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl0sXHJcbiAgICAgICAgdyA9IGJbM10gLSBhWzNdO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCh4KnggKyB5KnkgKyB6KnogKyB3KncpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5kaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmRpc3QgPSB2ZWM0LmRpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cclxudmVjNC5zcXVhcmVkRGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl0sXHJcbiAgICAgICAgdyA9IGJbM10gLSBhWzNdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeSArIHoqeiArIHcqdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQuc3FyRGlzdCA9IHZlYzQuc3F1YXJlZERpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWM0Lmxlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IGFbM107XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSArIHoqeiArIHcqdyk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0Lmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmxlbiA9IHZlYzQubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWM0LnNxdWFyZWRMZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdLFxyXG4gICAgICAgIHogPSBhWzJdLFxyXG4gICAgICAgIHcgPSBhWzNdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeSArIHoqeiArIHcqdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LnNxckxlbiA9IHZlYzQuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0Lm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gLWFbMF07XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIG91dFsyXSA9IC1hWzJdO1xyXG4gICAgb3V0WzNdID0gLWFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGludmVyc2Ugb2YgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gaW52ZXJ0XHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQuaW52ZXJzZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gIG91dFswXSA9IDEuMCAvIGFbMF07XHJcbiAgb3V0WzFdID0gMS4wIC8gYVsxXTtcclxuICBvdXRbMl0gPSAxLjAgLyBhWzJdO1xyXG4gIG91dFszXSA9IDEuMCAvIGFbM107XHJcbiAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IGFbM107XHJcbiAgICB2YXIgbGVuID0geCp4ICsgeSp5ICsgeip6ICsgdyp3O1xyXG4gICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgICAgb3V0WzBdID0gYVswXSAqIGxlbjtcclxuICAgICAgICBvdXRbMV0gPSBhWzFdICogbGVuO1xyXG4gICAgICAgIG91dFsyXSA9IGFbMl0gKiBsZW47XHJcbiAgICAgICAgb3V0WzNdID0gYVszXSAqIGxlbjtcclxuICAgIH1cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqL1xyXG52ZWM0LmRvdCA9IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICByZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdICsgYVszXSAqIGJbM107XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0LmxlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLFxyXG4gICAgICAgIGF5ID0gYVsxXSxcclxuICAgICAgICBheiA9IGFbMl0sXHJcbiAgICAgICAgYXcgPSBhWzNdO1xyXG4gICAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XHJcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcclxuICAgIG91dFsyXSA9IGF6ICsgdCAqIChiWzJdIC0gYXopO1xyXG4gICAgb3V0WzNdID0gYXcgKyB0ICogKGJbM10gLSBhdyk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQucmFuZG9tID0gZnVuY3Rpb24gKG91dCwgc2NhbGUpIHtcclxuICAgIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xyXG5cclxuICAgIC8vVE9ETzogVGhpcyBpcyBhIHByZXR0eSBhd2Z1bCB3YXkgb2YgZG9pbmcgdGhpcy4gRmluZCBzb21ldGhpbmcgYmV0dGVyLlxyXG4gICAgb3V0WzBdID0gR0xNQVRfUkFORE9NKCk7XHJcbiAgICBvdXRbMV0gPSBHTE1BVF9SQU5ET00oKTtcclxuICAgIG91dFsyXSA9IEdMTUFUX1JBTkRPTSgpO1xyXG4gICAgb3V0WzNdID0gR0xNQVRfUkFORE9NKCk7XHJcbiAgICB2ZWM0Lm5vcm1hbGl6ZShvdXQsIG91dCk7XHJcbiAgICB2ZWM0LnNjYWxlKG91dCwgb3V0LCBzY2FsZSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIG1hdDQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sIHcgPSBhWzNdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzRdICogeSArIG1bOF0gKiB6ICsgbVsxMl0gKiB3O1xyXG4gICAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzVdICogeSArIG1bOV0gKiB6ICsgbVsxM10gKiB3O1xyXG4gICAgb3V0WzJdID0gbVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdICogdztcclxuICAgIG91dFszXSA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XSAqIHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBxdWF0ZXJuaW9uIHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQudHJhbnNmb3JtUXVhdCA9IGZ1bmN0aW9uKG91dCwgYSwgcSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sXHJcbiAgICAgICAgcXggPSBxWzBdLCBxeSA9IHFbMV0sIHF6ID0gcVsyXSwgcXcgPSBxWzNdLFxyXG5cclxuICAgICAgICAvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY1xyXG4gICAgICAgIGl4ID0gcXcgKiB4ICsgcXkgKiB6IC0gcXogKiB5LFxyXG4gICAgICAgIGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6LFxyXG4gICAgICAgIGl6ID0gcXcgKiB6ICsgcXggKiB5IC0gcXkgKiB4LFxyXG4gICAgICAgIGl3ID0gLXF4ICogeCAtIHF5ICogeSAtIHF6ICogejtcclxuXHJcbiAgICAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XHJcbiAgICBvdXRbMF0gPSBpeCAqIHF3ICsgaXcgKiAtcXggKyBpeSAqIC1xeiAtIGl6ICogLXF5O1xyXG4gICAgb3V0WzFdID0gaXkgKiBxdyArIGl3ICogLXF5ICsgaXogKiAtcXggLSBpeCAqIC1xejtcclxuICAgIG91dFsyXSA9IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXg7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWM0cy5cclxuICpcclxuICogQHBhcmFtIHtBcnJheX0gYSB0aGUgYXJyYXkgb2YgdmVjdG9ycyB0byBpdGVyYXRlIG92ZXJcclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWM0LiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcclxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnQgTnVtYmVyIG9mIHZlYzRzIHRvIGl0ZXJhdGUgb3Zlci4gSWYgMCBpdGVyYXRlcyBvdmVyIGVudGlyZSBhcnJheVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxyXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmZvckVhY2ggPSAoZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgdmVjID0gdmVjNC5jcmVhdGUoKTtcclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24oYSwgc3RyaWRlLCBvZmZzZXQsIGNvdW50LCBmbiwgYXJnKSB7XHJcbiAgICAgICAgdmFyIGksIGw7XHJcbiAgICAgICAgaWYoIXN0cmlkZSkge1xyXG4gICAgICAgICAgICBzdHJpZGUgPSA0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIW9mZnNldCkge1xyXG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoY291bnQpIHtcclxuICAgICAgICAgICAgbCA9IE1hdGgubWluKChjb3VudCAqIHN0cmlkZSkgKyBvZmZzZXQsIGEubGVuZ3RoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsID0gYS5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7XHJcbiAgICAgICAgICAgIHZlY1swXSA9IGFbaV07IHZlY1sxXSA9IGFbaSsxXTsgdmVjWzJdID0gYVtpKzJdOyB2ZWNbM10gPSBhW2krM107XHJcbiAgICAgICAgICAgIGZuKHZlYywgdmVjLCBhcmcpO1xyXG4gICAgICAgICAgICBhW2ldID0gdmVjWzBdOyBhW2krMV0gPSB2ZWNbMV07IGFbaSsyXSA9IHZlY1syXTsgYVtpKzNdID0gdmVjWzNdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjNDsiLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgM3gzIE1hdHJpeFxyXG4gKiBAbmFtZSBtYXQzXHJcbiAqL1xyXG5cclxudmFyIG1hdDMgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDNcclxuICpcclxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcclxuICovXHJcbm1hdDMuY3JlYXRlID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoOSk7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMTtcclxuICAgIG91dFs1XSA9IDA7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcGllcyB0aGUgdXBwZXItbGVmdCAzeDMgdmFsdWVzIGludG8gdGhlIGdpdmVuIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgM3gzIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgICB0aGUgc291cmNlIDR4NCBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5mcm9tTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVs0XTtcclxuICAgIG91dFs0XSA9IGFbNV07XHJcbiAgICBvdXRbNV0gPSBhWzZdO1xyXG4gICAgb3V0WzZdID0gYVs4XTtcclxuICAgIG91dFs3XSA9IGFbOV07XHJcbiAgICBvdXRbOF0gPSBhWzEwXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcclxuICovXHJcbm1hdDMuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoOSk7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQzIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICBvdXRbNV0gPSBhWzVdO1xyXG4gICAgb3V0WzZdID0gYVs2XTtcclxuICAgIG91dFs3XSA9IGFbN107XHJcbiAgICBvdXRbOF0gPSBhWzhdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgYSBtYXQzIHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDE7XHJcbiAgICBvdXRbNV0gPSAwO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXHJcbiAgICBpZiAob3V0ID09PSBhKSB7XHJcbiAgICAgICAgdmFyIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGExMiA9IGFbNV07XHJcbiAgICAgICAgb3V0WzFdID0gYVszXTtcclxuICAgICAgICBvdXRbMl0gPSBhWzZdO1xyXG4gICAgICAgIG91dFszXSA9IGEwMTtcclxuICAgICAgICBvdXRbNV0gPSBhWzddO1xyXG4gICAgICAgIG91dFs2XSA9IGEwMjtcclxuICAgICAgICBvdXRbN10gPSBhMTI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG91dFswXSA9IGFbMF07XHJcbiAgICAgICAgb3V0WzFdID0gYVszXTtcclxuICAgICAgICBvdXRbMl0gPSBhWzZdO1xyXG4gICAgICAgIG91dFszXSA9IGFbMV07XHJcbiAgICAgICAgb3V0WzRdID0gYVs0XTtcclxuICAgICAgICBvdXRbNV0gPSBhWzddO1xyXG4gICAgICAgIG91dFs2XSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzddID0gYVs1XTtcclxuICAgICAgICBvdXRbOF0gPSBhWzhdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF0sXHJcblxyXG4gICAgICAgIGIwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMSxcclxuICAgICAgICBiMTEgPSAtYTIyICogYTEwICsgYTEyICogYTIwLFxyXG4gICAgICAgIGIyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMCxcclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxyXG4gICAgICAgIGRldCA9IGEwMCAqIGIwMSArIGEwMSAqIGIxMSArIGEwMiAqIGIyMTtcclxuXHJcbiAgICBpZiAoIWRldCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuICAgIG91dFswXSA9IGIwMSAqIGRldDtcclxuICAgIG91dFsxXSA9ICgtYTIyICogYTAxICsgYTAyICogYTIxKSAqIGRldDtcclxuICAgIG91dFsyXSA9IChhMTIgKiBhMDEgLSBhMDIgKiBhMTEpICogZGV0O1xyXG4gICAgb3V0WzNdID0gYjExICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGEyMiAqIGEwMCAtIGEwMiAqIGEyMCkgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoLWExMiAqIGEwMCArIGEwMiAqIGExMCkgKiBkZXQ7XHJcbiAgICBvdXRbNl0gPSBiMjEgKiBkZXQ7XHJcbiAgICBvdXRbN10gPSAoLWEyMSAqIGEwMCArIGEwMSAqIGEyMCkgKiBkZXQ7XHJcbiAgICBvdXRbOF0gPSAoYTExICogYTAwIC0gYTAxICogYTEwKSAqIGRldDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYWRqdWdhdGUgb2YgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xyXG5tYXQzLmFkam9pbnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XTtcclxuXHJcbiAgICBvdXRbMF0gPSAoYTExICogYTIyIC0gYTEyICogYTIxKTtcclxuICAgIG91dFsxXSA9IChhMDIgKiBhMjEgLSBhMDEgKiBhMjIpO1xyXG4gICAgb3V0WzJdID0gKGEwMSAqIGExMiAtIGEwMiAqIGExMSk7XHJcbiAgICBvdXRbM10gPSAoYTEyICogYTIwIC0gYTEwICogYTIyKTtcclxuICAgIG91dFs0XSA9IChhMDAgKiBhMjIgLSBhMDIgKiBhMjApO1xyXG4gICAgb3V0WzVdID0gKGEwMiAqIGExMCAtIGEwMCAqIGExMik7XHJcbiAgICBvdXRbNl0gPSAoYTEwICogYTIxIC0gYTExICogYTIwKTtcclxuICAgIG91dFs3XSA9IChhMDEgKiBhMjAgLSBhMDAgKiBhMjEpO1xyXG4gICAgb3V0WzhdID0gKGEwMCAqIGExMSAtIGEwMSAqIGExMCk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cclxubWF0My5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF07XHJcblxyXG4gICAgcmV0dXJuIGEwMCAqIChhMjIgKiBhMTEgLSBhMTIgKiBhMjEpICsgYTAxICogKC1hMjIgKiBhMTAgKyBhMTIgKiBhMjApICsgYTAyICogKGEyMSAqIGExMCAtIGExMSAqIGEyMCk7XHJcbn07XHJcblxyXG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0MydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMubXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF0sXHJcblxyXG4gICAgICAgIGIwMCA9IGJbMF0sIGIwMSA9IGJbMV0sIGIwMiA9IGJbMl0sXHJcbiAgICAgICAgYjEwID0gYlszXSwgYjExID0gYls0XSwgYjEyID0gYls1XSxcclxuICAgICAgICBiMjAgPSBiWzZdLCBiMjEgPSBiWzddLCBiMjIgPSBiWzhdO1xyXG5cclxuICAgIG91dFswXSA9IGIwMCAqIGEwMCArIGIwMSAqIGExMCArIGIwMiAqIGEyMDtcclxuICAgIG91dFsxXSA9IGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMTtcclxuICAgIG91dFsyXSA9IGIwMCAqIGEwMiArIGIwMSAqIGExMiArIGIwMiAqIGEyMjtcclxuXHJcbiAgICBvdXRbM10gPSBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjA7XHJcbiAgICBvdXRbNF0gPSBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjE7XHJcbiAgICBvdXRbNV0gPSBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjI7XHJcblxyXG4gICAgb3V0WzZdID0gYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwO1xyXG4gICAgb3V0WzddID0gYjIwICogYTAxICsgYjIxICogYTExICsgYjIyICogYTIxO1xyXG4gICAgb3V0WzhdID0gYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDMubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxubWF0My5tdWwgPSBtYXQzLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zbGF0ZSBhIG1hdDMgYnkgdGhlIGdpdmVuIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My50cmFuc2xhdGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcclxuICAgICAgICB4ID0gdlswXSwgeSA9IHZbMV07XHJcblxyXG4gICAgb3V0WzBdID0gYTAwO1xyXG4gICAgb3V0WzFdID0gYTAxO1xyXG4gICAgb3V0WzJdID0gYTAyO1xyXG5cclxuICAgIG91dFszXSA9IGExMDtcclxuICAgIG91dFs0XSA9IGExMTtcclxuICAgIG91dFs1XSA9IGExMjtcclxuXHJcbiAgICBvdXRbNl0gPSB4ICogYTAwICsgeSAqIGExMCArIGEyMDtcclxuICAgIG91dFs3XSA9IHggKiBhMDEgKyB5ICogYTExICsgYTIxO1xyXG4gICAgb3V0WzhdID0geCAqIGEwMiArIHkgKiBhMTIgKyBhMjI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXQzIGJ5IHRoZSBnaXZlbiBhbmdsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5yb3RhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcclxuXHJcbiAgICAgICAgcyA9IE1hdGguc2luKHJhZCksXHJcbiAgICAgICAgYyA9IE1hdGguY29zKHJhZCk7XHJcblxyXG4gICAgb3V0WzBdID0gYyAqIGEwMCArIHMgKiBhMTA7XHJcbiAgICBvdXRbMV0gPSBjICogYTAxICsgcyAqIGExMTtcclxuICAgIG91dFsyXSA9IGMgKiBhMDIgKyBzICogYTEyO1xyXG5cclxuICAgIG91dFszXSA9IGMgKiBhMTAgLSBzICogYTAwO1xyXG4gICAgb3V0WzRdID0gYyAqIGExMSAtIHMgKiBhMDE7XHJcbiAgICBvdXRbNV0gPSBjICogYTEyIC0gcyAqIGEwMjtcclxuXHJcbiAgICBvdXRbNl0gPSBhMjA7XHJcbiAgICBvdXRbN10gPSBhMjE7XHJcbiAgICBvdXRbOF0gPSBhMjI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MyBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKiovXHJcbm1hdDMuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciB4ID0gdlswXSwgeSA9IHZbMV07XHJcblxyXG4gICAgb3V0WzBdID0geCAqIGFbMF07XHJcbiAgICBvdXRbMV0gPSB4ICogYVsxXTtcclxuICAgIG91dFsyXSA9IHggKiBhWzJdO1xyXG5cclxuICAgIG91dFszXSA9IHkgKiBhWzNdO1xyXG4gICAgb3V0WzRdID0geSAqIGFbNF07XHJcbiAgICBvdXRbNV0gPSB5ICogYVs1XTtcclxuXHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcGllcyB0aGUgdmFsdWVzIGZyb20gYSBtYXQyZCBpbnRvIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gY29weVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqKi9cclxubWF0My5mcm9tTWF0MmQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gMDtcclxuXHJcbiAgICBvdXRbM10gPSBhWzJdO1xyXG4gICAgb3V0WzRdID0gYVszXTtcclxuICAgIG91dFs1XSA9IDA7XHJcblxyXG4gICAgb3V0WzZdID0gYVs0XTtcclxuICAgIG91dFs3XSA9IGFbNV07XHJcbiAgICBvdXRbOF0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4qIENhbGN1bGF0ZXMgYSAzeDMgbWF0cml4IGZyb20gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuKlxyXG4qIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuKiBAcGFyYW0ge3F1YXR9IHEgUXVhdGVybmlvbiB0byBjcmVhdGUgbWF0cml4IGZyb21cclxuKlxyXG4qIEByZXR1cm5zIHttYXQzfSBvdXRcclxuKi9cclxubWF0My5mcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEpIHtcclxuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXSxcclxuICAgICAgICB4MiA9IHggKyB4LFxyXG4gICAgICAgIHkyID0geSArIHksXHJcbiAgICAgICAgejIgPSB6ICsgeixcclxuXHJcbiAgICAgICAgeHggPSB4ICogeDIsXHJcbiAgICAgICAgeXggPSB5ICogeDIsXHJcbiAgICAgICAgeXkgPSB5ICogeTIsXHJcbiAgICAgICAgenggPSB6ICogeDIsXHJcbiAgICAgICAgenkgPSB6ICogeTIsXHJcbiAgICAgICAgenogPSB6ICogejIsXHJcbiAgICAgICAgd3ggPSB3ICogeDIsXHJcbiAgICAgICAgd3kgPSB3ICogeTIsXHJcbiAgICAgICAgd3ogPSB3ICogejI7XHJcblxyXG4gICAgb3V0WzBdID0gMSAtIHl5IC0geno7XHJcbiAgICBvdXRbM10gPSB5eCAtIHd6O1xyXG4gICAgb3V0WzZdID0genggKyB3eTtcclxuXHJcbiAgICBvdXRbMV0gPSB5eCArIHd6O1xyXG4gICAgb3V0WzRdID0gMSAtIHh4IC0geno7XHJcbiAgICBvdXRbN10gPSB6eSAtIHd4O1xyXG5cclxuICAgIG91dFsyXSA9IHp4IC0gd3k7XHJcbiAgICBvdXRbNV0gPSB6eSArIHd4O1xyXG4gICAgb3V0WzhdID0gMSAtIHh4IC0geXk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4qIENhbGN1bGF0ZXMgYSAzeDMgbm9ybWFsIG1hdHJpeCAodHJhbnNwb3NlIGludmVyc2UpIGZyb20gdGhlIDR4NCBtYXRyaXhcclxuKlxyXG4qIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuKiBAcGFyYW0ge21hdDR9IGEgTWF0NCB0byBkZXJpdmUgdGhlIG5vcm1hbCBtYXRyaXggZnJvbVxyXG4qXHJcbiogQHJldHVybnMge21hdDN9IG91dFxyXG4qL1xyXG5tYXQzLm5vcm1hbEZyb21NYXQ0ID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM10sXHJcbiAgICAgICAgYTEwID0gYVs0XSwgYTExID0gYVs1XSwgYTEyID0gYVs2XSwgYTEzID0gYVs3XSxcclxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSwgYTIzID0gYVsxMV0sXHJcbiAgICAgICAgYTMwID0gYVsxMl0sIGEzMSA9IGFbMTNdLCBhMzIgPSBhWzE0XSwgYTMzID0gYVsxNV0sXHJcblxyXG4gICAgICAgIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMCxcclxuICAgICAgICBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTAsXHJcbiAgICAgICAgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwLFxyXG4gICAgICAgIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMSxcclxuICAgICAgICBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTEsXHJcbiAgICAgICAgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyLFxyXG4gICAgICAgIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMCxcclxuICAgICAgICBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzAsXHJcbiAgICAgICAgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwLFxyXG4gICAgICAgIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMSxcclxuICAgICAgICBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzEsXHJcbiAgICAgICAgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyLFxyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XHJcbiAgICAgICAgZGV0ID0gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xyXG5cclxuICAgIGlmICghZGV0KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBkZXQgPSAxLjAgLyBkZXQ7XHJcblxyXG4gICAgb3V0WzBdID0gKGExMSAqIGIxMSAtIGExMiAqIGIxMCArIGExMyAqIGIwOSkgKiBkZXQ7XHJcbiAgICBvdXRbMV0gPSAoYTEyICogYjA4IC0gYTEwICogYjExIC0gYTEzICogYjA3KSAqIGRldDtcclxuICAgIG91dFsyXSA9IChhMTAgKiBiMTAgLSBhMTEgKiBiMDggKyBhMTMgKiBiMDYpICogZGV0O1xyXG5cclxuICAgIG91dFszXSA9IChhMDIgKiBiMTAgLSBhMDEgKiBiMTEgLSBhMDMgKiBiMDkpICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGEwMCAqIGIxMSAtIGEwMiAqIGIwOCArIGEwMyAqIGIwNykgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcclxuXHJcbiAgICBvdXRbNl0gPSAoYTMxICogYjA1IC0gYTMyICogYjA0ICsgYTMzICogYjAzKSAqIGRldDtcclxuICAgIG91dFs3XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xyXG4gICAgb3V0WzhdID0gKGEzMCAqIGIwNCAtIGEzMSAqIGIwMiArIGEzMyAqIGIwMCkgKiBkZXQ7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXHJcbm1hdDMuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpICsgTWF0aC5wb3coYVs0XSwgMikgKyBNYXRoLnBvdyhhWzVdLCAyKSArIE1hdGgucG93KGFbNl0sIDIpICsgTWF0aC5wb3coYVs3XSwgMikgKyBNYXRoLnBvdyhhWzhdLCAyKSkpXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbWF0MzsiLCJcclxuXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB7IEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vdmVjMyc7XHJcbmltcG9ydCB2ZWM0IGZyb20gJy4vdmVjNCc7XHJcbmltcG9ydCBtYXQzIGZyb20gJy4vbWF0Myc7XHJcblxyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyBRdWF0ZXJuaW9uXHJcbiAqIEBuYW1lIHF1YXRcclxuICovXHJcblxyXG52YXIgcXVhdCA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgcXVhdFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gYSBuZXcgcXVhdGVybmlvblxyXG4gKi9cclxucXVhdC5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldHMgYSBxdWF0ZXJuaW9uIHRvIHJlcHJlc2VudCB0aGUgc2hvcnRlc3Qgcm90YXRpb24gZnJvbSBvbmVcclxuICogdmVjdG9yIHRvIGFub3RoZXIuXHJcbiAqXHJcbiAqIEJvdGggdmVjdG9ycyBhcmUgYXNzdW1lZCB0byBiZSB1bml0IGxlbmd0aC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uLlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGluaXRpYWwgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgZGVzdGluYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQucm90YXRpb25UbyA9IChmdW5jdGlvbigpIHtcclxuICAgIHZhciB0bXB2ZWMzID0gdmVjMy5jcmVhdGUoKTtcclxuICAgIHZhciB4VW5pdFZlYzMgPSB2ZWMzLmZyb21WYWx1ZXMoMSwwLDApO1xyXG4gICAgdmFyIHlVbml0VmVjMyA9IHZlYzMuZnJvbVZhbHVlcygwLDEsMCk7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgICAgIHZhciBkb3QgPSB2ZWMzLmRvdChhLCBiKTtcclxuICAgICAgICBpZiAoZG90IDwgLTAuOTk5OTk5KSB7XHJcbiAgICAgICAgICAgIHZlYzMuY3Jvc3ModG1wdmVjMywgeFVuaXRWZWMzLCBhKTtcclxuICAgICAgICAgICAgaWYgKHZlYzMubGVuZ3RoKHRtcHZlYzMpIDwgMC4wMDAwMDEpXHJcbiAgICAgICAgICAgICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIHlVbml0VmVjMywgYSk7XHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHRtcHZlYzMsIHRtcHZlYzMpO1xyXG4gICAgICAgICAgICBxdWF0LnNldEF4aXNBbmdsZShvdXQsIHRtcHZlYzMsIE1hdGguUEkpO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZG90ID4gMC45OTk5OTkpIHtcclxuICAgICAgICAgICAgb3V0WzBdID0gMDtcclxuICAgICAgICAgICAgb3V0WzFdID0gMDtcclxuICAgICAgICAgICAgb3V0WzJdID0gMDtcclxuICAgICAgICAgICAgb3V0WzNdID0gMTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIGEsIGIpO1xyXG4gICAgICAgICAgICBvdXRbMF0gPSB0bXB2ZWMzWzBdO1xyXG4gICAgICAgICAgICBvdXRbMV0gPSB0bXB2ZWMzWzFdO1xyXG4gICAgICAgICAgICBvdXRbMl0gPSB0bXB2ZWMzWzJdO1xyXG4gICAgICAgICAgICBvdXRbM10gPSAxICsgZG90O1xyXG4gICAgICAgICAgICByZXR1cm4gcXVhdC5ub3JtYWxpemUob3V0LCBvdXQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pKCk7XHJcblxyXG4vKipcclxuICogU2V0cyB0aGUgc3BlY2lmaWVkIHF1YXRlcm5pb24gd2l0aCB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW5cclxuICogYXhlcy4gRWFjaCBheGlzIGlzIGEgdmVjMyBhbmQgaXMgZXhwZWN0ZWQgdG8gYmUgdW5pdCBsZW5ndGggYW5kXHJcbiAqIHBlcnBlbmRpY3VsYXIgdG8gYWxsIG90aGVyIHNwZWNpZmllZCBheGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IHZpZXcgIHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSB2aWV3aW5nIGRpcmVjdGlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHJpZ2h0IHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBsb2NhbCBcInJpZ2h0XCIgZGlyZWN0aW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gdXAgICAgdGhlIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGxvY2FsIFwidXBcIiBkaXJlY3Rpb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5zZXRBeGVzID0gKGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG1hdHIgPSBtYXQzLmNyZWF0ZSgpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbihvdXQsIHZpZXcsIHJpZ2h0LCB1cCkge1xyXG4gICAgICAgIG1hdHJbMF0gPSByaWdodFswXTtcclxuICAgICAgICBtYXRyWzNdID0gcmlnaHRbMV07XHJcbiAgICAgICAgbWF0cls2XSA9IHJpZ2h0WzJdO1xyXG5cclxuICAgICAgICBtYXRyWzFdID0gdXBbMF07XHJcbiAgICAgICAgbWF0cls0XSA9IHVwWzFdO1xyXG4gICAgICAgIG1hdHJbN10gPSB1cFsyXTtcclxuXHJcbiAgICAgICAgbWF0clsyXSA9IC12aWV3WzBdO1xyXG4gICAgICAgIG1hdHJbNV0gPSAtdmlld1sxXTtcclxuICAgICAgICBtYXRyWzhdID0gLXZpZXdbMl07XHJcblxyXG4gICAgICAgIHJldHVybiBxdWF0Lm5vcm1hbGl6ZShvdXQsIHF1YXQuZnJvbU1hdDMob3V0LCBtYXRyKSk7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgcXVhdCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXRlcm5pb24gdG8gY2xvbmVcclxuICogQHJldHVybnMge3F1YXR9IGEgbmV3IHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmNsb25lID0gdmVjNC5jbG9uZTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHF1YXQgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBhIG5ldyBxdWF0ZXJuaW9uXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5mcm9tVmFsdWVzID0gdmVjNC5mcm9tVmFsdWVzO1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBxdWF0IHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgc291cmNlIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuY29weSA9IHZlYzQuY29weTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBxdWF0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LnNldCA9IHZlYzQuc2V0O1xyXG5cclxuLyoqXHJcbiAqIFNldCBhIHF1YXQgdG8gdGhlIGlkZW50aXR5IHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldHMgYSBxdWF0IGZyb20gdGhlIGdpdmVuIGFuZ2xlIGFuZCByb3RhdGlvbiBheGlzLFxyXG4gKiB0aGVuIHJldHVybnMgaXQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IGF4aXMgdGhlIGF4aXMgYXJvdW5kIHdoaWNoIHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSBpbiByYWRpYW5zXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICoqL1xyXG5xdWF0LnNldEF4aXNBbmdsZSA9IGZ1bmN0aW9uKG91dCwgYXhpcywgcmFkKSB7XHJcbiAgICByYWQgPSByYWQgKiAwLjU7XHJcbiAgICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XHJcbiAgICBvdXRbMF0gPSBzICogYXhpc1swXTtcclxuICAgIG91dFsxXSA9IHMgKiBheGlzWzFdO1xyXG4gICAgb3V0WzJdID0gcyAqIGF4aXNbMl07XHJcbiAgICBvdXRbM10gPSBNYXRoLmNvcyhyYWQpO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiB6aCA6IOe7leWNleS9jeWQkemHj+iHqui9rFxyXG4gKiBAcGFyYW0gb3V0ICB7cXVhdH1cclxuICogQHBhcmFtIHF1YXQyICB7cXVhdH1cclxuICogQHBhcmFtIGF4aXMgICB7dmVjM31cclxuICogQHBhcmFtIHJhZCAgICB7TnVtYmVyfVxyXG4gKi9cclxuXHJcbnF1YXQucm90YXRlQXhpcyA9IGZ1bmN0aW9uIChvdXQscXVhdDIsYXhpcyxyYWQpIHtcclxuXHJcbiAgICB2ZWMzLm5vcm1hbGl6ZShheGlzLGF4aXMpO1xyXG4gICAgcXVhdC5zZXRBeGlzQW5nbGUocXVhdDIsYXhpcyxyYWQpO1xyXG4gICAgcXVhdC5tdWx0aXBseShvdXQsb3V0LHF1YXQyKTtcclxuXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBZGRzIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmFkZCA9IHZlYzQuYWRkO1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHF1YXQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5tdWx0aXBseSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmFyIGF4ID0gYVswXSwgYXkgPSBhWzFdLCBheiA9IGFbMl0sIGF3ID0gYVszXSxcclxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdLCBidyA9IGJbM107XHJcblxyXG4gICAgb3V0WzBdID0gYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieTtcclxuICAgIG91dFsxXSA9IGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYno7XHJcbiAgICBvdXRbMl0gPSBheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4O1xyXG4gICAgb3V0WzNdID0gYXcgKiBidyAtIGF4ICogYnggLSBheSAqIGJ5IC0gYXogKiBiejtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQubXVsID0gcXVhdC5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgYSBxdWF0IGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5zY2FsZSA9IHZlYzQuc2NhbGU7XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIHF1YXRlcm5pb24gYnkgdGhlIGdpdmVuIGFuZ2xlIGFib3V0IHRoZSBYIGF4aXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgcXVhdCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byByb3RhdGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBhbmdsZSAoaW4gcmFkaWFucykgdG8gcm90YXRlXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQucm90YXRlWCA9IGZ1bmN0aW9uIChvdXQscmFkKSB7XHJcblxyXG4gICAgdmFyIHF1YXQyID1bMCwwLDAsMV07XHJcbiAgICB2YXIgYXhpcyA9IFsxLDAsMF07XHJcblxyXG4gICAgcXVhdC5yb3RhdGVBeGlzKG91dCxxdWF0MixheGlzLHJhZCk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgcXVhdGVybmlvbiBieSB0aGUgZ2l2ZW4gYW5nbGUgYWJvdXQgdGhlIFkgYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCBxdWF0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGFuZ2xlIChpbiByYWRpYW5zKSB0byByb3RhdGVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5yb3RhdGVZID0gZnVuY3Rpb24gKG91dCxyYWQpIHtcclxuXHJcbiAgICB2YXIgcXVhdDIgPVswLDAsMCwxXTtcclxuICAgIHZhciBheGlzID0gWzAsMSwwXTtcclxuXHJcbiAgICBxdWF0LnJvdGF0ZUF4aXMob3V0LHF1YXQyLGF4aXMscmFkKTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBxdWF0ZXJuaW9uIGJ5IHRoZSBnaXZlbiBhbmdsZSBhYm91dCB0aGUgWiBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHF1YXQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgYW5nbGUgKGluIHJhZGlhbnMpIHRvIHJvdGF0ZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xyXG5xdWF0LnJvdGF0ZVogPSBmdW5jdGlvbiAob3V0LHJhZCkge1xyXG4gICAgdmFyIHF1YXQyID1bMCwwLDAsMV07XHJcbiAgICB2YXIgYXhpcyA9IFswLDAsMV07XHJcblxyXG4gICAgcXVhdC5yb3RhdGVBeGlzKG91dCxxdWF0MixheGlzLHJhZCk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBXIGNvbXBvbmVudCBvZiBhIHF1YXQgZnJvbSB0aGUgWCwgWSwgYW5kIFogY29tcG9uZW50cy5cclxuICogQXNzdW1lcyB0aGF0IHF1YXRlcm5pb24gaXMgMSB1bml0IGluIGxlbmd0aC5cclxuICogQW55IGV4aXN0aW5nIFcgY29tcG9uZW50IHdpbGwgYmUgaWdub3JlZC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBXIGNvbXBvbmVudCBvZlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xyXG5xdWF0LmNhbGN1bGF0ZVcgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sIHkgPSBhWzFdLCB6ID0gYVsyXTtcclxuXHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIG91dFsyXSA9IHo7XHJcbiAgICBvdXRbM10gPSBNYXRoLnNxcnQoTWF0aC5hYnMoMS4wIC0geCAqIHggLSB5ICogeSAtIHogKiB6KSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuZG90ID0gdmVjNC5kb3Q7XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50IGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQubGVycCA9IHZlYzQubGVycDtcclxuXHJcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIHNwaGVyaWNhbCBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuc2xlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICAvLyBiZW5jaG1hcmtzOlxyXG4gICAgLy8gICAgaHR0cDovL2pzcGVyZi5jb20vcXVhdGVybmlvbi1zbGVycC1pbXBsZW1lbnRhdGlvbnNcclxuXHJcbiAgICB2YXIgYXggPSBhWzBdLCBheSA9IGFbMV0sIGF6ID0gYVsyXSwgYXcgPSBhWzNdLFxyXG4gICAgICAgIGJ4ID0gYlswXSwgYnkgPSBiWzFdLCBieiA9IGJbMl0sIGJ3ID0gYlszXTtcclxuXHJcbiAgICB2YXIgICAgICAgIG9tZWdhLCBjb3NvbSwgc2lub20sIHNjYWxlMCwgc2NhbGUxO1xyXG5cclxuICAgIC8vIGNhbGMgY29zaW5lXHJcbiAgICBjb3NvbSA9IGF4ICogYnggKyBheSAqIGJ5ICsgYXogKiBieiArIGF3ICogYnc7XHJcbiAgICAvLyBhZGp1c3Qgc2lnbnMgKGlmIG5lY2Vzc2FyeSlcclxuICAgIGlmICggY29zb20gPCAwLjAgKSB7XHJcbiAgICAgICAgY29zb20gPSAtY29zb207XHJcbiAgICAgICAgYnggPSAtIGJ4O1xyXG4gICAgICAgIGJ5ID0gLSBieTtcclxuICAgICAgICBieiA9IC0gYno7XHJcbiAgICAgICAgYncgPSAtIGJ3O1xyXG4gICAgfVxyXG4gICAgLy8gY2FsY3VsYXRlIGNvZWZmaWNpZW50c1xyXG4gICAgaWYgKCAoMS4wIC0gY29zb20pID4gMC4wMDAwMDEgKSB7XHJcbiAgICAgICAgLy8gc3RhbmRhcmQgY2FzZSAoc2xlcnApXHJcbiAgICAgICAgb21lZ2EgID0gTWF0aC5hY29zKGNvc29tKTtcclxuICAgICAgICBzaW5vbSAgPSBNYXRoLnNpbihvbWVnYSk7XHJcbiAgICAgICAgc2NhbGUwID0gTWF0aC5zaW4oKDEuMCAtIHQpICogb21lZ2EpIC8gc2lub207XHJcbiAgICAgICAgc2NhbGUxID0gTWF0aC5zaW4odCAqIG9tZWdhKSAvIHNpbm9tO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBcImZyb21cIiBhbmQgXCJ0b1wiIHF1YXRlcm5pb25zIGFyZSB2ZXJ5IGNsb3NlXHJcbiAgICAgICAgLy8gIC4uLiBzbyB3ZSBjYW4gZG8gYSBsaW5lYXIgaW50ZXJwb2xhdGlvblxyXG4gICAgICAgIHNjYWxlMCA9IDEuMCAtIHQ7XHJcbiAgICAgICAgc2NhbGUxID0gdDtcclxuICAgIH1cclxuICAgIC8vIGNhbGN1bGF0ZSBmaW5hbCB2YWx1ZXNcclxuICAgIG91dFswXSA9IHNjYWxlMCAqIGF4ICsgc2NhbGUxICogYng7XHJcbiAgICBvdXRbMV0gPSBzY2FsZTAgKiBheSArIHNjYWxlMSAqIGJ5O1xyXG4gICAgb3V0WzJdID0gc2NhbGUwICogYXogKyBzY2FsZTEgKiBiejtcclxuICAgIG91dFszXSA9IHNjYWxlMCAqIGF3ICsgc2NhbGUxICogYnc7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBpbnZlcnNlIG9mIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gY2FsY3VsYXRlIGludmVyc2Ugb2ZcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sXHJcbiAgICAgICAgZG90ID0gYTAqYTAgKyBhMSphMSArIGEyKmEyICsgYTMqYTMsXHJcbiAgICAgICAgaW52RG90ID0gZG90ID8gMS4wL2RvdCA6IDA7XHJcblxyXG4gICAgLy8gVE9ETzogV291bGQgYmUgZmFzdGVyIHRvIHJldHVybiBbMCwwLDAsMF0gaW1tZWRpYXRlbHkgaWYgZG90ID09IDBcclxuXHJcbiAgICBvdXRbMF0gPSAtYTAqaW52RG90O1xyXG4gICAgb3V0WzFdID0gLWExKmludkRvdDtcclxuICAgIG91dFsyXSA9IC1hMippbnZEb3Q7XHJcbiAgICBvdXRbM10gPSBhMyppbnZEb3Q7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGNvbmp1Z2F0ZSBvZiBhIHF1YXRcclxuICogSWYgdGhlIHF1YXRlcm5pb24gaXMgbm9ybWFsaXplZCwgdGhpcyBmdW5jdGlvbiBpcyBmYXN0ZXIgdGhhbiBxdWF0LmludmVyc2UgYW5kIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBjb25qdWdhdGUgb2ZcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5jb25qdWdhdGUgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSAtYVswXTtcclxuICAgIG91dFsxXSA9IC1hWzFdO1xyXG4gICAgb3V0WzJdID0gLWFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQubGVuZ3RoID0gdmVjNC5sZW5ndGg7XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Lmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmxlbiA9IHF1YXQubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5zcXVhcmVkTGVuZ3RoID0gdmVjNC5zcXVhcmVkTGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5zcXVhcmVkTGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuc3FyTGVuID0gcXVhdC5zcXVhcmVkTGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIE5vcm1hbGl6ZSBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0ZXJuaW9uIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5ub3JtYWxpemUgPSB2ZWM0Lm5vcm1hbGl6ZTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgcXVhdGVybmlvbiBmcm9tIHRoZSBnaXZlbiAzeDMgcm90YXRpb24gbWF0cml4LlxyXG4gKlxyXG4gKiBOT1RFOiBUaGUgcmVzdWx0YW50IHF1YXRlcm5pb24gaXMgbm90IG5vcm1hbGl6ZWQsIHNvIHlvdSBzaG91bGQgYmUgc3VyZVxyXG4gKiB0byByZW5vcm1hbGl6ZSB0aGUgcXVhdGVybmlvbiB5b3Vyc2VsZiB3aGVyZSBuZWNlc3NhcnkuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge21hdDN9IG0gcm90YXRpb24gbWF0cml4XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmZyb21NYXQzID0gZnVuY3Rpb24ob3V0LCBtKSB7XHJcbiAgICAvLyBBbGdvcml0aG0gaW4gS2VuIFNob2VtYWtlJ3MgYXJ0aWNsZSBpbiAxOTg3IFNJR0dSQVBIIGNvdXJzZSBub3Rlc1xyXG4gICAgLy8gYXJ0aWNsZSBcIlF1YXRlcm5pb24gQ2FsY3VsdXMgYW5kIEZhc3QgQW5pbWF0aW9uXCIuXHJcbiAgICB2YXIgZlRyYWNlID0gbVswXSArIG1bNF0gKyBtWzhdO1xyXG4gICAgdmFyIGZSb290O1xyXG5cclxuICAgIGlmICggZlRyYWNlID4gMC4wICkge1xyXG4gICAgICAgIC8vIHx3fCA+IDEvMiwgbWF5IGFzIHdlbGwgY2hvb3NlIHcgPiAxLzJcclxuICAgICAgICBmUm9vdCA9IE1hdGguc3FydChmVHJhY2UgKyAxLjApOyAgLy8gMndcclxuICAgICAgICBvdXRbM10gPSAwLjUgKiBmUm9vdDtcclxuICAgICAgICBmUm9vdCA9IDAuNS9mUm9vdDsgIC8vIDEvKDR3KVxyXG4gICAgICAgIG91dFswXSA9IChtWzVdLW1bN10pKmZSb290O1xyXG4gICAgICAgIG91dFsxXSA9IChtWzZdLW1bMl0pKmZSb290O1xyXG4gICAgICAgIG91dFsyXSA9IChtWzFdLW1bM10pKmZSb290O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAvLyB8d3wgPD0gMS8yXHJcbiAgICAgICAgdmFyIGkgPSAwO1xyXG4gICAgICAgIGlmICggbVs0XSA+IG1bMF0gKVxyXG4gICAgICAgICAgaSA9IDE7XHJcbiAgICAgICAgaWYgKCBtWzhdID4gbVtpKjMraV0gKVxyXG4gICAgICAgICAgaSA9IDI7XHJcbiAgICAgICAgdmFyIGogPSAoaSsxKSUzO1xyXG4gICAgICAgIHZhciBrID0gKGkrMiklMztcclxuXHJcbiAgICAgICAgZlJvb3QgPSBNYXRoLnNxcnQobVtpKjMraV0tbVtqKjMral0tbVtrKjMra10gKyAxLjApO1xyXG4gICAgICAgIG91dFtpXSA9IDAuNSAqIGZSb290O1xyXG4gICAgICAgIGZSb290ID0gMC41IC8gZlJvb3Q7XHJcbiAgICAgICAgb3V0WzNdID0gKG1baiozK2tdIC0gbVtrKjMral0pICogZlJvb3Q7XHJcbiAgICAgICAgb3V0W2pdID0gKG1baiozK2ldICsgbVtpKjMral0pICogZlJvb3Q7XHJcbiAgICAgICAgb3V0W2tdID0gKG1bayozK2ldICsgbVtpKjMra10pICogZlJvb3Q7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHF1YXQ7IiwiLy8gU2FtcGxlciBjbGlwIGlzIGVzcGVjaWFsbHkgZm9yIHRoZSBhbmltYXRpb24gc2FtcGxlciBpbiBnbFRGXHJcbi8vIFVzZSBUeXBlZCBBcnJheSBjYW4gcmVkdWNlIGEgbG90IG9mIGhlYXAgbWVtb3J5XHJcblxyXG5pbXBvcnQgcXVhdCBmcm9tICcuLi9nbG1hdHJpeC9xdWF0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG4vLyBsZXJwIGZ1bmN0aW9uIHdpdGggb2Zmc2V0IGluIGxhcmdlIGFycmF5XHJcbmZ1bmN0aW9uIHZlYzNsZXJwKG91dCwgYSwgYiwgdCwgb2EsIG9iKSB7XHJcbiAgICB2YXIgYXggPSBhW29hXTtcclxuICAgIHZhciBheSA9IGFbb2EgKyAxXTtcclxuICAgIHZhciBheiA9IGFbb2EgKyAyXTtcclxuICAgIG91dFswXSA9IGF4ICsgdCAqIChiW29iXSAtIGF4KTtcclxuICAgIG91dFsxXSA9IGF5ICsgdCAqIChiW29iICsgMV0gLSBheSk7XHJcbiAgICBvdXRbMl0gPSBheiArIHQgKiAoYltvYiArIDJdIC0gYXopO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHF1YXRTbGVycChvdXQsIGEsIGIsIHQsIG9hLCBvYikge1xyXG4gICAgLy8gYmVuY2htYXJrczpcclxuICAgIC8vICAgIGh0dHA6Ly9qc3BlcmYuY29tL3F1YXRlcm5pb24tc2xlcnAtaW1wbGVtZW50YXRpb25zXHJcblxyXG4gICAgdmFyIGF4ID0gYVswICsgb2FdLCBheSA9IGFbMSArIG9hXSwgYXogPSBhWzIgKyBvYV0sIGF3ID0gYVszICsgb2FdLFxyXG4gICAgICAgIGJ4ID0gYlswICsgb2JdLCBieSA9IGJbMSArIG9iXSwgYnogPSBiWzIgKyBvYl0sIGJ3ID0gYlszICsgb2JdO1xyXG5cclxuICAgIHZhciBvbWVnYSwgY29zb20sIHNpbm9tLCBzY2FsZTAsIHNjYWxlMTtcclxuXHJcbiAgICAvLyBjYWxjIGNvc2luZVxyXG4gICAgY29zb20gPSBheCAqIGJ4ICsgYXkgKiBieSArIGF6ICogYnogKyBhdyAqIGJ3O1xyXG4gICAgLy8gYWRqdXN0IHNpZ25zIChpZiBuZWNlc3NhcnkpXHJcbiAgICBpZiAoY29zb20gPCAwLjApIHtcclxuICAgICAgICBjb3NvbSA9IC1jb3NvbTtcclxuICAgICAgICBieCA9IC0gYng7XHJcbiAgICAgICAgYnkgPSAtIGJ5O1xyXG4gICAgICAgIGJ6ID0gLSBiejtcclxuICAgICAgICBidyA9IC0gYnc7XHJcbiAgICB9XHJcbiAgICAvLyBjYWxjdWxhdGUgY29lZmZpY2llbnRzXHJcbiAgICBpZiAoKDEuMCAtIGNvc29tKSA+IDAuMDAwMDAxKSB7XHJcbiAgICAgICAgLy8gc3RhbmRhcmQgY2FzZSAoc2xlcnApXHJcbiAgICAgICAgb21lZ2EgID0gTWF0aC5hY29zKGNvc29tKTtcclxuICAgICAgICBzaW5vbSAgPSBNYXRoLnNpbihvbWVnYSk7XHJcbiAgICAgICAgc2NhbGUwID0gTWF0aC5zaW4oKDEuMCAtIHQpICogb21lZ2EpIC8gc2lub207XHJcbiAgICAgICAgc2NhbGUxID0gTWF0aC5zaW4odCAqIG9tZWdhKSAvIHNpbm9tO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gJ2Zyb20nIGFuZCAndG8nIHF1YXRlcm5pb25zIGFyZSB2ZXJ5IGNsb3NlXHJcbiAgICAgICAgLy8gIC4uLiBzbyB3ZSBjYW4gZG8gYSBsaW5lYXIgaW50ZXJwb2xhdGlvblxyXG4gICAgICAgIHNjYWxlMCA9IDEuMCAtIHQ7XHJcbiAgICAgICAgc2NhbGUxID0gdDtcclxuICAgIH1cclxuICAgIC8vIGNhbGN1bGF0ZSBmaW5hbCB2YWx1ZXNcclxuICAgIG91dFswXSA9IHNjYWxlMCAqIGF4ICsgc2NhbGUxICogYng7XHJcbiAgICBvdXRbMV0gPSBzY2FsZTAgKiBheSArIHNjYWxlMSAqIGJ5O1xyXG4gICAgb3V0WzJdID0gc2NhbGUwICogYXogKyBzY2FsZTEgKiBiejtcclxuICAgIG91dFszXSA9IHNjYWxlMCAqIGF3ICsgc2NhbGUxICogYnc7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNhbXBsZXJUcmFjayBtYW5hZ2VzIGBwb3NpdGlvbmAsIGByb3RhdGlvbmAsIGBzY2FsZWAgdHJhY2tzIGluIGFuaW1hdGlvbiBvZiBzaW5nbGUgc2NlbmUgbm9kZS5cclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2tcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubmFtZV0gVHJhY2sgbmFtZVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW29wdHMudGFyZ2V0XSBUYXJnZXQgbm9kZSdzIHRyYW5zZm9ybSB3aWxsIHVwZGF0ZWQgYXV0b21hdGljYWxseVxyXG4gKi9cclxudmFyIFNhbXBsZXJUcmFjayA9IGZ1bmN0aW9uIChvcHRzKSB7XHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICB0aGlzLm5hbWUgPSBvcHRzLm5hbWUgfHwgJyc7XHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRhcmdldCA9IG9wdHMudGFyZ2V0IHx8IG51bGw7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtBcnJheX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0aW9uIGlzIHJlcHJlc2VudGVkIGJ5IGEgcXVhdGVybmlvblxyXG4gICAgICogQHR5cGUge0FycmF5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnJvdGF0aW9uID0gcXVhdC5jcmVhdGUoKTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge0FycmF5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnNjYWxlID0gdmVjMy5mcm9tVmFsdWVzKDEsIDEsIDEpO1xyXG5cclxuICAgIHRoaXMuY2hhbm5lbHMgPSB7XHJcbiAgICAgICAgdGltZTogbnVsbCxcclxuICAgICAgICBwb3NpdGlvbjogbnVsbCxcclxuICAgICAgICByb3RhdGlvbjogbnVsbCxcclxuICAgICAgICBzY2FsZTogbnVsbFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLl9jYWNoZUtleSA9IDA7XHJcbiAgICB0aGlzLl9jYWNoZVRpbWUgPSAwO1xyXG59O1xyXG5cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIGlmICghdGhpcy5jaGFubmVscy50aW1lKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGNoYW5uZWxzID0gdGhpcy5jaGFubmVscztcclxuICAgIHZhciBsZW4gPSBjaGFubmVscy50aW1lLmxlbmd0aDtcclxuICAgIHZhciBrZXkgPSAtMTtcclxuICAgIC8vIE9ubHkgb25lIGZyYW1lXHJcbiAgICBpZiAobGVuID09PSAxKSB7XHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnJvdGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHF1YXQuY29weSh0aGlzLnJvdGF0aW9uLCBjaGFubmVscy5yb3RhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFubmVscy5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICB2ZWMzLmNvcHkodGhpcy5wb3NpdGlvbiwgY2hhbm5lbHMucG9zaXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbm5lbHMuc2NhbGUpIHtcclxuICAgICAgICAgICAgdmVjMy5jb3B5KHRoaXMuc2NhbGUsIGNoYW5uZWxzLnNjYWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gQ2xhbXBcclxuICAgIGVsc2UgaWYgKHRpbWUgPD0gY2hhbm5lbHMudGltZVswXSkge1xyXG4gICAgICAgIHRpbWUgPSBjaGFubmVscy50aW1lWzBdO1xyXG4gICAgICAgIGtleSA9IDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aW1lID49IGNoYW5uZWxzLnRpbWVbbGVuIC0gMV0pIHtcclxuICAgICAgICB0aW1lID0gY2hhbm5lbHMudGltZVtsZW4gLSAxXTtcclxuICAgICAgICBrZXkgPSBsZW4gLSAyO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRpbWUgPCB0aGlzLl9jYWNoZVRpbWUpIHtcclxuICAgICAgICAgICAgdmFyIHMgPSBNYXRoLm1pbihsZW4gLSAxLCB0aGlzLl9jYWNoZUtleSArIDEpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gczsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChjaGFubmVscy50aW1lW2kgLSAxXSA8PSB0aW1lICYmIGNoYW5uZWxzLnRpbWVbaV0gPiB0aW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gaSAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9jYWNoZUtleTsgaSA8IGxlbiAtIDE7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoYW5uZWxzLnRpbWVbaV0gPD0gdGltZSAmJiBjaGFubmVscy50aW1lW2kgKyAxXSA+IHRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGtleSA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSBrZXk7XHJcbiAgICAgICAgdGhpcy5fY2FjaGVUaW1lID0gdGltZTtcclxuICAgICAgICB2YXIgc3RhcnQgPSBrZXk7XHJcbiAgICAgICAgdmFyIGVuZCA9IGtleSArIDE7XHJcbiAgICAgICAgdmFyIHN0YXJ0VGltZSA9IGNoYW5uZWxzLnRpbWVbc3RhcnRdO1xyXG4gICAgICAgIHZhciBlbmRUaW1lID0gY2hhbm5lbHMudGltZVtlbmRdO1xyXG4gICAgICAgIHZhciByYW5nZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XHJcbiAgICAgICAgdmFyIHBlcmNlbnQgPSByYW5nZSA9PT0gMCA/IDAgOiAodGltZSAtIHN0YXJ0VGltZSkgLyByYW5nZTtcclxuXHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnJvdGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHF1YXRTbGVycCh0aGlzLnJvdGF0aW9uLCBjaGFubmVscy5yb3RhdGlvbiwgY2hhbm5lbHMucm90YXRpb24sIHBlcmNlbnQsIHN0YXJ0ICogNCwgZW5kICogNCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFubmVscy5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICB2ZWMzbGVycCh0aGlzLnBvc2l0aW9uLCBjaGFubmVscy5wb3NpdGlvbiwgY2hhbm5lbHMucG9zaXRpb24sIHBlcmNlbnQsIHN0YXJ0ICogMywgZW5kICogMyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFubmVscy5zY2FsZSkge1xyXG4gICAgICAgICAgICB2ZWMzbGVycCh0aGlzLnNjYWxlLCBjaGFubmVscy5zY2FsZSwgY2hhbm5lbHMuc2NhbGUsIHBlcmNlbnQsIHN0YXJ0ICogMywgZW5kICogMyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gTG9vcCBoYW5kbGluZ1xyXG4gICAgaWYgKGtleSA9PT0gbGVuIC0gMikge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlS2V5ID0gMDtcclxuICAgICAgICB0aGlzLl9jYWNoZVRpbWUgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlVGFyZ2V0KCk7XHJcbn07XHJcblxyXG4vKipcclxuICogVXBkYXRlIHRyYW5zZm9ybSBvZiB0YXJnZXQgbm9kZSBtYW51YWxseVxyXG4gKi9cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS51cGRhdGVUYXJnZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgY2hhbm5lbHMgPSB0aGlzLmNoYW5uZWxzO1xyXG4gICAgaWYgKHRoaXMudGFyZ2V0KSB7XHJcbiAgICAgICAgLy8gT25seSB1cGRhdGUgdGFyZ2V0IHByb3AgaWYgaGF2ZSBkYXRhLlxyXG4gICAgICAgIGlmIChjaGFubmVscy5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldC5wb3NpdGlvbi5zZXRBcnJheSh0aGlzLnBvc2l0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnJvdGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnJvdGF0aW9uLnNldEFycmF5KHRoaXMucm90YXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbm5lbHMuc2NhbGUpIHtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXQuc2NhbGUuc2V0QXJyYXkodGhpcy5zY2FsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuZ2V0TWF4VGltZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLmNoYW5uZWxzLnRpbWVbdGhpcy5jaGFubmVscy50aW1lLmxlbmd0aCAtIDFdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFRpbWVcclxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFRpbWVcclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfVxyXG4gKi9cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5nZXRTdWJUcmFjayA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUpIHtcclxuXHJcbiAgICB2YXIgc3ViQ2xpcCA9IG5ldyBTYW1wbGVyVHJhY2soe1xyXG4gICAgICAgIG5hbWU6IHRoaXMubmFtZVxyXG4gICAgfSk7XHJcbiAgICB2YXIgbWluVGltZSA9IHRoaXMuY2hhbm5lbHMudGltZVswXTtcclxuICAgIHN0YXJ0VGltZSA9IE1hdGgubWluKE1hdGgubWF4KHN0YXJ0VGltZSwgbWluVGltZSksIHRoaXMubGlmZSk7XHJcbiAgICBlbmRUaW1lID0gTWF0aC5taW4oTWF0aC5tYXgoZW5kVGltZSwgbWluVGltZSksIHRoaXMubGlmZSk7XHJcblxyXG4gICAgdmFyIHJhbmdlU3RhcnQgPSB0aGlzLl9maW5kUmFuZ2Uoc3RhcnRUaW1lKTtcclxuICAgIHZhciByYW5nZUVuZCA9IHRoaXMuX2ZpbmRSYW5nZShlbmRUaW1lKTtcclxuXHJcbiAgICB2YXIgY291bnQgPSByYW5nZUVuZFswXSAtIHJhbmdlU3RhcnRbMF0gKyAxO1xyXG4gICAgaWYgKHJhbmdlU3RhcnRbMV0gPT09IDAgJiYgcmFuZ2VFbmRbMV0gPT09IDApIHtcclxuICAgICAgICBjb3VudCAtPSAxO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhbm5lbHMucm90YXRpb24pIHtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhbm5lbHMucG9zaXRpb24pIHtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnBvc2l0aW9uID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhbm5lbHMuc2NhbGUpIHtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnNjYWxlID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhbm5lbHMudGltZSkge1xyXG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMudGltZSA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQpO1xyXG4gICAgfVxyXG4gICAgLy8gQ2xpcCBhdCB0aGUgc3RhcnRcclxuICAgIHRoaXMuc2V0VGltZShzdGFydFRpbWUpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uW2ldID0gdGhpcy5yb3RhdGlvbltpXTtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnBvc2l0aW9uW2ldID0gdGhpcy5wb3NpdGlvbltpXTtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnNjYWxlW2ldID0gdGhpcy5zY2FsZVtpXTtcclxuICAgIH1cclxuICAgIHN1YkNsaXAuY2hhbm5lbHMudGltZVswXSA9IDA7XHJcbiAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uWzNdID0gdGhpcy5yb3RhdGlvblszXTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGNvdW50LTE7IGkrKykge1xyXG4gICAgICAgIHZhciBpMjtcclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDM7IGorKykge1xyXG4gICAgICAgICAgICBpMiA9IHJhbmdlU3RhcnRbMF0gKyBpO1xyXG4gICAgICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uW2kgKiA0ICsgal0gPSB0aGlzLmNoYW5uZWxzLnJvdGF0aW9uW2kyICogNCArIGpdO1xyXG4gICAgICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnBvc2l0aW9uW2kgKiAzICsgal0gPSB0aGlzLmNoYW5uZWxzLnBvc2l0aW9uW2kyICogMyArIGpdO1xyXG4gICAgICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnNjYWxlW2kgKiAzICsgal0gPSB0aGlzLmNoYW5uZWxzLnNjYWxlW2kyICogMyArIGpdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnRpbWVbaV0gPSB0aGlzLmNoYW5uZWxzLnRpbWVbaTJdIC0gc3RhcnRUaW1lO1xyXG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMucm90YXRpb25baSAqIDQgKyAzXSA9IHRoaXMuY2hhbm5lbHMucm90YXRpb25baTIgKiA0ICsgM107XHJcbiAgICB9XHJcbiAgICAvLyBDbGlwIGF0IHRoZSBlbmRcclxuICAgIHRoaXMuc2V0VGltZShlbmRUaW1lKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvblsoY291bnQgLSAxKSAqIDQgKyBpXSA9IHRoaXMucm90YXRpb25baV07XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5wb3NpdGlvblsoY291bnQgLSAxKSAqIDMgKyBpXSA9IHRoaXMucG9zaXRpb25baV07XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5zY2FsZVsoY291bnQgLSAxKSAqIDMgKyBpXSA9IHRoaXMuc2NhbGVbaV07XHJcbiAgICB9XHJcbiAgICBzdWJDbGlwLmNoYW5uZWxzLnRpbWVbKGNvdW50IC0gMSldID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcclxuICAgIHN1YkNsaXAuY2hhbm5lbHMucm90YXRpb25bKGNvdW50IC0gMSkgKiA0ICsgM10gPSB0aGlzLnJvdGF0aW9uWzNdO1xyXG5cclxuICAgIC8vIFRPRE8gc2V0IGJhY2sgP1xyXG4gICAgc3ViQ2xpcC5saWZlID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcclxuICAgIHJldHVybiBzdWJDbGlwO1xyXG59O1xyXG5cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5fZmluZFJhbmdlID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIHZhciBjaGFubmVscyA9IHRoaXMuY2hhbm5lbHM7XHJcbiAgICB2YXIgbGVuID0gY2hhbm5lbHMudGltZS5sZW5ndGg7XHJcbiAgICB2YXIgc3RhcnQgPSAtMTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnRpbWVbaV0gPD0gdGltZSAmJiBjaGFubmVscy50aW1lW2krMV0gPiB0aW1lKSB7XHJcbiAgICAgICAgICAgIHN0YXJ0ID0gaTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgcGVyY2VudCA9IDA7XHJcbiAgICBpZiAoc3RhcnQgPj0gMCkge1xyXG4gICAgICAgIHZhciBzdGFydFRpbWUgPSBjaGFubmVscy50aW1lW3N0YXJ0XTtcclxuICAgICAgICB2YXIgZW5kVGltZSA9IGNoYW5uZWxzLnRpbWVbc3RhcnQrMV07XHJcbiAgICAgICAgdmFyIHBlcmNlbnQgPSAodGltZS1zdGFydFRpbWUpIC8gKGVuZFRpbWUtc3RhcnRUaW1lKTtcclxuICAgIH1cclxuICAgIC8vIFBlcmNlbnQgWzAsIDEpXHJcbiAgICByZXR1cm4gW3N0YXJ0LCBwZXJjZW50XTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiAxRCBibGVuZGluZyBiZXR3ZWVuIHR3byBjbGlwc1xyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMVxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMyXHJcbiAqIEBwYXJhbSAge251bWJlcn0gd1xyXG4gKi9cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5ibGVuZDFEID0gZnVuY3Rpb24gKHQxLCB0Miwgdykge1xyXG4gICAgdmVjMy5sZXJwKHRoaXMucG9zaXRpb24sIHQxLnBvc2l0aW9uLCB0Mi5wb3NpdGlvbiwgdyk7XHJcbiAgICB2ZWMzLmxlcnAodGhpcy5zY2FsZSwgdDEuc2NhbGUsIHQyLnNjYWxlLCB3KTtcclxuICAgIHF1YXQuc2xlcnAodGhpcy5yb3RhdGlvbiwgdDEucm90YXRpb24sIHQyLnJvdGF0aW9uLCB3KTtcclxufTtcclxuLyoqXHJcbiAqIDJEIGJsZW5kaW5nIGJldHdlZW4gdGhyZWUgY2xpcHNcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzFcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMlxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMzXHJcbiAqIEBwYXJhbSAge251bWJlcn0gZlxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IGdcclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuYmxlbmQyRCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcTEgPSBxdWF0LmNyZWF0ZSgpO1xyXG4gICAgdmFyIHEyID0gcXVhdC5jcmVhdGUoKTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodDEsIHQyLCB0MywgZiwgZykge1xyXG4gICAgICAgIHZhciBhID0gMSAtIGYgLSBnO1xyXG5cclxuICAgICAgICB0aGlzLnBvc2l0aW9uWzBdID0gdDEucG9zaXRpb25bMF0gKiBhICsgdDIucG9zaXRpb25bMF0gKiBmICsgdDMucG9zaXRpb25bMF0gKiBnO1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25bMV0gPSB0MS5wb3NpdGlvblsxXSAqIGEgKyB0Mi5wb3NpdGlvblsxXSAqIGYgKyB0My5wb3NpdGlvblsxXSAqIGc7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvblsyXSA9IHQxLnBvc2l0aW9uWzJdICogYSArIHQyLnBvc2l0aW9uWzJdICogZiArIHQzLnBvc2l0aW9uWzJdICogZztcclxuXHJcbiAgICAgICAgdGhpcy5zY2FsZVswXSA9IHQxLnNjYWxlWzBdICogYSArIHQyLnNjYWxlWzBdICogZiArIHQzLnNjYWxlWzBdICogZztcclxuICAgICAgICB0aGlzLnNjYWxlWzFdID0gdDEuc2NhbGVbMV0gKiBhICsgdDIuc2NhbGVbMV0gKiBmICsgdDMuc2NhbGVbMV0gKiBnO1xyXG4gICAgICAgIHRoaXMuc2NhbGVbMl0gPSB0MS5zY2FsZVsyXSAqIGEgKyB0Mi5zY2FsZVsyXSAqIGYgKyB0My5zY2FsZVsyXSAqIGc7XHJcblxyXG4gICAgICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYmIyMDU0MDModj12cy44NSkuYXNweFxyXG4gICAgICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbWljcm9zb2Z0LmRpcmVjdHhfc2RrLnF1YXRlcm5pb24ueG1xdWF0ZXJuaW9uYmFyeWNlbnRyaWModj12cy44NSkuYXNweFxyXG4gICAgICAgIHZhciBzID0gZiArIGc7XHJcbiAgICAgICAgaWYgKHMgPT09IDApIHtcclxuICAgICAgICAgICAgcXVhdC5jb3B5KHRoaXMucm90YXRpb24sIHQxLnJvdGF0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHF1YXQuc2xlcnAocTEsIHQxLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbiwgcyk7XHJcbiAgICAgICAgICAgIHF1YXQuc2xlcnAocTIsIHQxLnJvdGF0aW9uLCB0My5yb3RhdGlvbiwgcyk7XHJcbiAgICAgICAgICAgIHF1YXQuc2xlcnAodGhpcy5yb3RhdGlvbiwgcTEsIHEyLCBnIC8gcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufSkoKTtcclxuLyoqXHJcbiAqIEFkZGl0aXZlIGJsZW5kaW5nIGJldHdlZW4gdHdvIGNsaXBzXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzJcclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuYWRkaXRpdmVCbGVuZCA9IGZ1bmN0aW9uICh0MSwgdDIpIHtcclxuICAgIHZlYzMuYWRkKHRoaXMucG9zaXRpb24sIHQxLnBvc2l0aW9uLCB0Mi5wb3NpdGlvbik7XHJcbiAgICB2ZWMzLmFkZCh0aGlzLnNjYWxlLCB0MS5zY2FsZSwgdDIuc2NhbGUpO1xyXG4gICAgcXVhdC5tdWx0aXBseSh0aGlzLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbiwgdDEucm90YXRpb24pO1xyXG59O1xyXG4vKipcclxuICogU3VidHJhY3RpdmUgYmxlbmRpbmcgYmV0d2VlbiB0d28gY2xpcHNcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzFcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMlxyXG4gKi9cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5zdWJ0cmFjdGl2ZUJsZW5kID0gZnVuY3Rpb24gKHQxLCB0Mikge1xyXG4gICAgdmVjMy5zdWIodGhpcy5wb3NpdGlvbiwgdDEucG9zaXRpb24sIHQyLnBvc2l0aW9uKTtcclxuICAgIHZlYzMuc3ViKHRoaXMuc2NhbGUsIHQxLnNjYWxlLCB0Mi5zY2FsZSk7XHJcbiAgICBxdWF0LmludmVydCh0aGlzLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbik7XHJcbiAgICBxdWF0Lm11bHRpcGx5KHRoaXMucm90YXRpb24sIHRoaXMucm90YXRpb24sIHQxLnJvdGF0aW9uKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDbG9uZSBhIG5ldyBTYW1wbGVyVHJhY2tcclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfVxyXG4gKi9cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB0cmFjayA9IFNhbXBsZXJUcmFjay5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgIHRyYWNrLmNoYW5uZWxzID0ge1xyXG4gICAgICAgIHRpbWU6IHRoaXMuY2hhbm5lbHMudGltZSB8fCBudWxsLFxyXG4gICAgICAgIHBvc2l0aW9uOiB0aGlzLmNoYW5uZWxzLnBvc2l0aW9uIHx8IG51bGwsXHJcbiAgICAgICAgcm90YXRpb246IHRoaXMuY2hhbm5lbHMucm90YXRpb24gfHwgbnVsbCxcclxuICAgICAgICBzY2FsZTogdGhpcy5jaGFubmVscy5zY2FsZSB8fCBudWxsXHJcbiAgICB9O1xyXG4gICAgdmVjMy5jb3B5KHRyYWNrLnBvc2l0aW9uLCB0aGlzLnBvc2l0aW9uKTtcclxuICAgIHF1YXQuY29weSh0cmFjay5yb3RhdGlvbiwgdGhpcy5yb3RhdGlvbik7XHJcbiAgICB2ZWMzLmNvcHkodHJhY2suc2NhbGUsIHRoaXMuc2NhbGUpO1xyXG5cclxuICAgIHRyYWNrLnRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG4gICAgdHJhY2sudXBkYXRlVGFyZ2V0KCk7XHJcblxyXG4gICAgcmV0dXJuIHRyYWNrO1xyXG5cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNhbXBsZXJUcmFjaztcclxuIiwiLyoqXHJcbiAqIEV4dGVuZCBhIHN1YiBjbGFzcyBmcm9tIGJhc2UgY2xhc3NcclxuICogQHBhcmFtIHtvYmplY3R8RnVuY3Rpb259IG1ha2VEZWZhdWx0T3B0IGRlZmF1bHQgb3B0aW9uIG9mIHRoaXMgc3ViIGNsYXNzLCBtZXRob2Qgb2YgdGhlIHN1YiBjYW4gdXNlIHRoaXMueHh4IHRvIGFjY2VzcyB0aGlzIG9wdGlvblxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaW5pdGlhbGl6ZV0gSW5pdGlhbGl6ZSBhZnRlciB0aGUgc3ViIGNsYXNzIGlzIGluc3RhbnRpYXRlZFxyXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3RvXSBQcm90b3R5cGUgbWV0aG9kcy9wcm9wZXJ0aWVzIG9mIHRoZSBzdWIgY2xhc3NcclxuICogQG1lbWJlck9mIGNsYXkuY29yZS5taXhpbi5leHRlbmRcclxuICogQHJldHVybiB7RnVuY3Rpb259XHJcbiAqL1xyXG5mdW5jdGlvbiBkZXJpdmUobWFrZURlZmF1bHRPcHQsIGluaXRpYWxpemUvKm9wdGlvbmFsKi8sIHByb3RvLypvcHRpb25hbCovKSB7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsaXplID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgcHJvdG8gPSBpbml0aWFsaXplO1xyXG4gICAgICAgIGluaXRpYWxpemUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBfc3VwZXIgPSB0aGlzO1xyXG5cclxuICAgIHZhciBwcm9wTGlzdDtcclxuICAgIGlmICghKG1ha2VEZWZhdWx0T3B0IGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XHJcbiAgICAgICAgLy8gT3B0aW1pemUgdGhlIHByb3BlcnR5IGl0ZXJhdGUgaWYgaXQgaGF2ZSBiZWVuIGZpeGVkXHJcbiAgICAgICAgcHJvcExpc3QgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBtYWtlRGVmYXVsdE9wdCkge1xyXG4gICAgICAgICAgICBpZiAobWFrZURlZmF1bHRPcHQuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wTGlzdC5wdXNoKHByb3BOYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIgc3ViID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG5cclxuICAgICAgICAvLyBjYWxsIHN1cGVyIGNvbnN0cnVjdG9yXHJcbiAgICAgICAgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcblxyXG4gICAgICAgIGlmIChtYWtlRGVmYXVsdE9wdCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIC8vIEludm9rZSBtYWtlRGVmYXVsdE9wdCBlYWNoIHRpbWUgaWYgaXQgaXMgYSBmdW5jdGlvbiwgU28gd2UgY2FuIG1ha2Ugc3VyZSBlYWNoXHJcbiAgICAgICAgICAgIC8vIHByb3BlcnR5IGluIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgc2hhcmVkIGJ5IG11dGlwbGUgaW5zdGFuY2VzXHJcbiAgICAgICAgICAgIGV4dGVuZCh0aGlzLCBtYWtlRGVmYXVsdE9wdC5jYWxsKHRoaXMsIG9wdGlvbnMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGV4dGVuZFdpdGhQcm9wTGlzdCh0aGlzLCBtYWtlRGVmYXVsdE9wdCwgcHJvcExpc3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IHN1Yikge1xyXG4gICAgICAgICAgICAvLyBJbml0aWFsaXplIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHRoZSBvcmRlciBvZiBpbmhlcml0XHJcbiAgICAgICAgICAgIHZhciBpbml0aWFsaXplcnMgPSBzdWIuX19pbml0aWFsaXplcnNfXztcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGluaXRpYWxpemVyc1tpXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8vIHNhdmUgc3VwZXIgY29uc3RydWN0b3JcclxuICAgIHN1Yi5fX3N1cGVyX18gPSBfc3VwZXI7XHJcbiAgICAvLyBJbml0aWFsaXplIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGFsbCB0aGUgc3VwZXIgY29uc3RydWN0b3IgaXMgY2FsbGVkXHJcbiAgICBpZiAoIV9zdXBlci5fX2luaXRpYWxpemVyc19fKSB7XHJcbiAgICAgICAgc3ViLl9faW5pdGlhbGl6ZXJzX18gPSBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc3ViLl9faW5pdGlhbGl6ZXJzX18gPSBfc3VwZXIuX19pbml0aWFsaXplcnNfXy5zbGljZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGluaXRpYWxpemUpIHtcclxuICAgICAgICBzdWIuX19pbml0aWFsaXplcnNfXy5wdXNoKGluaXRpYWxpemUpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBDdG9yID0gZnVuY3Rpb24oKSB7fTtcclxuICAgIEN0b3IucHJvdG90eXBlID0gX3N1cGVyLnByb3RvdHlwZTtcclxuICAgIHN1Yi5wcm90b3R5cGUgPSBuZXcgQ3RvcigpO1xyXG4gICAgc3ViLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YjtcclxuICAgIGV4dGVuZChzdWIucHJvdG90eXBlLCBwcm90byk7XHJcblxyXG4gICAgLy8gZXh0ZW5kIHRoZSBkZXJpdmUgbWV0aG9kIGFzIGEgc3RhdGljIG1ldGhvZDtcclxuICAgIHN1Yi5leHRlbmQgPSBfc3VwZXIuZXh0ZW5kO1xyXG5cclxuICAgIC8vIERFUENSQVRFRFxyXG4gICAgc3ViLmRlcml2ZSA9IF9zdXBlci5leHRlbmQ7XHJcblxyXG4gICAgcmV0dXJuIHN1YjtcclxufVxyXG5cclxuZnVuY3Rpb24gZXh0ZW5kKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICBpZiAoIXNvdXJjZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGZvciAodmFyIG5hbWUgaW4gc291cmNlKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG4gICAgICAgICAgICB0YXJnZXRbbmFtZV0gPSBzb3VyY2VbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBleHRlbmRXaXRoUHJvcExpc3QodGFyZ2V0LCBzb3VyY2UsIHByb3BMaXN0KSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHByb3BOYW1lID0gcHJvcExpc3RbaV07XHJcbiAgICAgICAgdGFyZ2V0W3Byb3BOYW1lXSA9IHNvdXJjZVtwcm9wTmFtZV07XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAYWxpYXMgY2xheS5jb3JlLm1peGluLmV4dGVuZFxyXG4gKiBAbWl4aW5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuXHJcbiAgICBleHRlbmQ6IGRlcml2ZSxcclxuXHJcbiAgICAvLyBERVBDUkFURURcclxuICAgIGRlcml2ZTogZGVyaXZlXHJcbn07XHJcbiIsImZ1bmN0aW9uIEhhbmRsZXIoYWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICB0aGlzLmFjdGlvbiA9IGFjdGlvbjtcclxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbn1cclxuLyoqXHJcbiAqIEBtaXhpblxyXG4gKiBAYWxpYXMgY2xheS5jb3JlLm1peGluLm5vdGlmaWVyXHJcbiAqL1xyXG52YXIgbm90aWZpZXIgPSB7XHJcbiAgICAvKipcclxuICAgICAqIFRyaWdnZXIgZXZlbnRcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxyXG4gICAgICovXHJcbiAgICB0cmlnZ2VyOiBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc093blByb3BlcnR5KCdfX2hhbmRsZXJzX18nKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5fX2hhbmRsZXJzX18uaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGhkbHMgPSB0aGlzLl9faGFuZGxlcnNfX1tuYW1lXTtcclxuICAgICAgICB2YXIgbCA9IGhkbHMubGVuZ3RoLCBpID0gLTEsIGFyZ3MgPSBhcmd1bWVudHM7XHJcbiAgICAgICAgLy8gT3B0aW1pemUgYWR2aXNlIGZyb20gYmFja2JvbmVcclxuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIHdoaWxlICgrK2kgPCBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGRsc1tpXS5hY3Rpb24uY2FsbChoZGxzW2ldLmNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhkbHNbaV0uYWN0aW9uLmNhbGwoaGRsc1tpXS5jb250ZXh0LCBhcmdzWzFdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKCsraSA8IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCwgYXJnc1sxXSwgYXJnc1syXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgIHdoaWxlICgrK2kgPCBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGRsc1tpXS5hY3Rpb24uY2FsbChoZGxzW2ldLmNvbnRleHQsIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhkbHNbaV0uYWN0aW9uLmNhbGwoaGRsc1tpXS5jb250ZXh0LCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHdoaWxlICgrK2kgPCBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGRsc1tpXS5hY3Rpb24uYXBwbHkoaGRsc1tpXS5jb250ZXh0LCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXIgZXZlbnQgaGFuZGxlclxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBvbjogZnVuY3Rpb24obmFtZSwgYWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICAgICAgaWYgKCFuYW1lIHx8ICFhY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9faGFuZGxlcnNfXyB8fCAodGhpcy5fX2hhbmRsZXJzX189e30pO1xyXG4gICAgICAgIGlmICghaGFuZGxlcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhhcyhuYW1lLCBhY3Rpb24pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBuZXcgSGFuZGxlcihhY3Rpb24sIGNvbnRleHQgfHwgdGhpcyk7XHJcbiAgICAgICAgaGFuZGxlcnNbbmFtZV0ucHVzaChoYW5kbGVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXIgZXZlbnQsIGV2ZW50IHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgb25jZSBhbmQgdGhlbiByZW1vdmVkXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIG9uY2U6IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XHJcbiAgICAgICAgICAgIHNlbGYub2ZmKG5hbWUsIHdyYXBwZXIpO1xyXG4gICAgICAgICAgICBhY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub24obmFtZSwgd3JhcHBlciwgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2Ygb25jZSgnYmVmb3JlJyArIG5hbWUpXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIGJlZm9yZTogZnVuY3Rpb24obmFtZSwgYWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICAgICAgaWYgKCFuYW1lIHx8ICFhY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBuYW1lID0gJ2JlZm9yZScgKyBuYW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2Ygb25jZSgnYWZ0ZXInICsgbmFtZSlcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGFjdGlvblxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgYWZ0ZXI6IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmFtZSA9ICdhZnRlcicgKyBuYW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2Ygb24oJ3N1Y2Nlc3MnKVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGFjdGlvblxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgc3VjY2VzczogZnVuY3Rpb24oYWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub25jZSgnc3VjY2VzcycsIGFjdGlvbiwgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2Ygb24oJ2Vycm9yJylcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIGVycm9yOiBmdW5jdGlvbihhY3Rpb24sIGNvbnRleHQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vbmNlKCdlcnJvcicsIGFjdGlvbiwgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGV2ZW50IGxpc3RlbmVyXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBvZmY6IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbikge1xyXG5cclxuICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9faGFuZGxlcnNfXyB8fCAodGhpcy5fX2hhbmRsZXJzX189e30pO1xyXG5cclxuICAgICAgICBpZiAoIWFjdGlvbikge1xyXG4gICAgICAgICAgICBoYW5kbGVyc1tuYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChoYW5kbGVyc1tuYW1lXSkge1xyXG4gICAgICAgICAgICB2YXIgaGRscyA9IGhhbmRsZXJzW25hbWVdO1xyXG4gICAgICAgICAgICB2YXIgcmV0YWlucyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhkbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gJiYgaGRsc1tpXS5hY3Rpb24gIT09IGFjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldGFpbnMucHVzaChoZGxzW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBoYW5kbGVyc1tuYW1lXSA9IHJldGFpbnM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiByZWdpc3RlcmVkIHRoZSBldmVudCBoYW5kbGVyXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gIGFjdGlvblxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaGFzOiBmdW5jdGlvbihuYW1lLCBhY3Rpb24pIHtcclxuICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9faGFuZGxlcnNfXztcclxuXHJcbiAgICAgICAgaWYgKCEgaGFuZGxlcnMgfHxcclxuICAgICAgICAgICAgISBoYW5kbGVyc1tuYW1lXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBoZGxzID0gaGFuZGxlcnNbbmFtZV07XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChoZGxzW2ldLmFjdGlvbiA9PT0gYWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5vdGlmaWVyOyIsInZhciBndWlkID0gMDtcclxuXHJcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xyXG52YXIgbmF0aXZlRm9yRWFjaCA9IEFycmF5UHJvdG8uZm9yRWFjaDtcclxuXHJcbi8qKlxyXG4gKiBVdGlsIGZ1bmN0aW9uc1xyXG4gKiBAbmFtZXNwYWNlIGNsYXkuY29yZS51dGlsXHJcbiAqL1xyXG52YXIgdXRpbCA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIEdVSURcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBnZW5HVUlEOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuICsrZ3VpZDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFJlbGF0aXZlIHBhdGggdG8gYWJzb2x1dGUgcGF0aFxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBwYXRoXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGJhc2VQYXRoXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgcmVsYXRpdmUyYWJzb2x1dGU6IGZ1bmN0aW9uIChwYXRoLCBiYXNlUGF0aCkge1xyXG4gICAgICAgIGlmICghYmFzZVBhdGggfHwgcGF0aC5tYXRjaCgvXlxcLy8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcGF0aFBhcnRzID0gcGF0aC5zcGxpdCgnLycpO1xyXG4gICAgICAgIHZhciBiYXNlUGF0aFBhcnRzID0gYmFzZVBhdGguc3BsaXQoJy8nKTtcclxuXHJcbiAgICAgICAgdmFyIGl0ZW0gPSBwYXRoUGFydHNbMF07XHJcbiAgICAgICAgd2hpbGUoaXRlbSA9PT0gJy4nIHx8IGl0ZW0gPT09ICcuLicpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gPT09ICcuLicpIHtcclxuICAgICAgICAgICAgICAgIGJhc2VQYXRoUGFydHMucG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGF0aFBhcnRzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBwYXRoUGFydHNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBiYXNlUGF0aFBhcnRzLmpvaW4oJy8nKSArICcvJyArIHBhdGhQYXJ0cy5qb2luKCcvJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXh0ZW5kIHRhcmdldCB3aXRoIHNvdXJjZVxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gc291cmNlXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgZXh0ZW5kOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgICAgICBpZiAoc291cmNlKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gc291cmNlW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXh0ZW5kIHByb3BlcnRpZXMgdG8gdGFyZ2V0IGlmIG5vdCBleGlzdC5cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHNvdXJjZVxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIGRlZmF1bHRzOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgICAgICBpZiAoc291cmNlKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BOYW1lIGluIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldFtwcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wTmFtZV0gPSBzb3VyY2VbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBFeHRlbmQgcHJvcGVydGllcyB3aXRoIGEgZ2l2ZW4gcHJvcGVydHkgbGlzdCB0byBhdm9pZCBmb3IuLmluLi4gaXRlcmF0aW9uLlxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gc291cmNlXHJcbiAgICAgKiBAcGFyYW0gIHtBcnJheS48c3RyaW5nPn0gcHJvcExpc3RcclxuICAgICAqIEByZXR1cm4ge09iamVjdH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBleHRlbmRXaXRoUHJvcExpc3Q6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgcHJvcExpc3QpIHtcclxuICAgICAgICBpZiAoc291cmNlKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcm9wTmFtZSA9IHByb3BMaXN0W2ldO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BOYW1lXSA9IHNvdXJjZVtwcm9wTmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEV4dGVuZCBwcm9wZXJ0aWVzIHRvIHRhcmdldCBpZiBub3QgZXhpc3QuIFdpdGggYSBnaXZlbiBwcm9wZXJ0eSBsaXN0IGF2b2lkIGZvci4uaW4uLiBpdGVyYXRpb24uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBzb3VyY2VcclxuICAgICAqIEBwYXJhbSAge0FycmF5LjxzdHJpbmc+fSBwcm9wTGlzdFxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIGRlZmF1bHRzV2l0aFByb3BMaXN0OiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIHByb3BMaXN0KSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJvcE5hbWUgPSBwcm9wTGlzdFtpXTtcclxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRbcHJvcE5hbWVdID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcE5hbWVdID0gc291cmNlW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fEFycmF5fSBvYmpcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBpdGVyYXRvclxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBlYWNoOiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xyXG4gICAgICAgIGlmICghKG9iaiAmJiBpdGVyYXRvcikpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqLmZvckVhY2ggJiYgb2JqLmZvckVhY2ggPT09IG5hdGl2ZUZvckVhY2gpIHtcclxuICAgICAgICAgICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChvYmoubGVuZ3RoID09PSArIG9iai5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG9iai5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2tleV0sIGtleSwgb2JqKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyBvYmplY3RcclxuICAgICAqIEBwYXJhbSAge30gIG9ialxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBpc09iamVjdDogZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHJldHVybiBvYmogPT09IE9iamVjdChvYmopO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElzIGFycmF5ID9cclxuICAgICAqIEBwYXJhbSAge30gIG9ialxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBpc0FycmF5OiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkob2JqKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyBhcnJheSBsaWtlLCB3aGljaCBoYXZlIGEgbGVuZ3RoIHByb3BlcnR5XHJcbiAgICAgKiBAcGFyYW0gIHt9ICBvYmpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgaXNBcnJheUxpa2U6IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICBpZiAoIW9iaikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqLmxlbmd0aCA9PT0gKyBvYmoubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHt9IG9ialxyXG4gICAgICogQHJldHVybiB7fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgaWYgKCF1dGlsLmlzT2JqZWN0KG9iaikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9iajtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodXRpbC5pc0FycmF5KG9iaikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9iai5zbGljZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh1dGlsLmlzQXJyYXlMaWtlKG9iaikpIHsgLy8gaXMgdHlwZWQgYXJyYXlcclxuICAgICAgICAgICAgdmFyIHJldCA9IG5ldyBvYmouY29uc3RydWN0b3Iob2JqLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICByZXRbaV0gPSBvYmpbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1dGlsLmV4dGVuZCh7fSwgb2JqKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCB1dGlsO1xyXG4iLCJpbXBvcnQgZXh0ZW5kTWl4aW4gZnJvbSAnLi9taXhpbi9leHRlbmQnO1xyXG5pbXBvcnQgbm90aWZpZXJNaXhpbiBmcm9tICcuL21peGluL25vdGlmaWVyJztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi91dGlsJztcclxuXHJcbi8qKlxyXG4gKiBCYXNlIGNsYXNzIG9mIGFsbCBvYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5jb3JlLkJhc2VcclxuICogQG1peGVzIGNsYXkuY29yZS5taXhpbi5ub3RpZmllclxyXG4gKi9cclxudmFyIEJhc2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuX191aWRfXyA9IHV0aWwuZ2VuR1VJRCgpO1xyXG59O1xyXG5cclxuQmFzZS5fX2luaXRpYWxpemVyc19fID0gW1xyXG4gICAgZnVuY3Rpb24gKG9wdHMpIHtcclxuICAgICAgICB1dGlsLmV4dGVuZCh0aGlzLCBvcHRzKTtcclxuICAgIH1cclxuXTtcclxuXHJcbnV0aWwuZXh0ZW5kKEJhc2UsIGV4dGVuZE1peGluKTtcclxudXRpbC5leHRlbmQoQmFzZS5wcm90b3R5cGUsIG5vdGlmaWVyTWl4aW4pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmFzZTtcclxuIiwiZnVuY3Rpb24gZ2V0KG9wdGlvbnMpIHtcclxuXHJcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcblxyXG4gICAgeGhyLm9wZW4oJ2dldCcsIG9wdGlvbnMudXJsKTtcclxuICAgIC8vIFdpdGggcmVzcG9uc2UgdHlwZSBzZXQgYnJvd3NlciBjYW4gZ2V0IGFuZCBwdXQgYmluYXJ5IGRhdGFcclxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvRE9NL1hNTEh0dHBSZXF1ZXN0L1NlbmRpbmdfYW5kX1JlY2VpdmluZ19CaW5hcnlfRGF0YVxyXG4gICAgLy8gRGVmYXVsdCBpcyB0ZXh0LCBhbmQgaXQgY2FuIGJlIHNldFxyXG4gICAgLy8gYXJyYXlidWZmZXIsIGJsb2IsIGRvY3VtZW50LCBqc29uLCB0ZXh0XHJcbiAgICB4aHIucmVzcG9uc2VUeXBlID0gb3B0aW9ucy5yZXNwb25zZVR5cGUgfHwgJ3RleHQnO1xyXG5cclxuICAgIGlmIChvcHRpb25zLm9ucHJvZ3Jlc3MpIHtcclxuICAgICAgICAvL2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvRE9NL1hNTEh0dHBSZXF1ZXN0L1VzaW5nX1hNTEh0dHBSZXF1ZXN0XHJcbiAgICAgICAgeGhyLm9ucHJvZ3Jlc3MgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmxlbmd0aENvbXB1dGFibGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwZXJjZW50ID0gZS5sb2FkZWQgLyBlLnRvdGFsO1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vbnByb2dyZXNzKHBlcmNlbnQsIGUubG9hZGVkLCBlLnRvdGFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMub25wcm9ncmVzcyhudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIGlmICh4aHIuc3RhdHVzID49IDQwMCkge1xyXG4gICAgICAgICAgICBvcHRpb25zLm9uZXJyb3IgJiYgb3B0aW9ucy5vbmVycm9yKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvcHRpb25zLm9ubG9hZCAmJiBvcHRpb25zLm9ubG9hZCh4aHIucmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBpZiAob3B0aW9ucy5vbmVycm9yKSB7XHJcbiAgICAgICAgeGhyLm9uZXJyb3IgPSBvcHRpb25zLm9uZXJyb3I7XHJcbiAgICB9XHJcbiAgICB4aHIuc2VuZChudWxsKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgZ2V0OiBnZXRcclxufTtcclxuIiwiaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcclxuXHJcbnZhciBzdXBwb3J0V2ViR0w7XHJcblxyXG52YXIgdmVuZG9yID0ge307XHJcblxyXG4vKipcclxuICogSWYgc3VwcG9ydCBXZWJHTFxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKi9cclxudmVuZG9yLnN1cHBvcnRXZWJHTCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChzdXBwb3J0V2ViR0wgPT0gbnVsbCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgdmFyIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJykgfHwgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcpO1xyXG4gICAgICAgICAgICBpZiAoIWdsKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBzdXBwb3J0V2ViR0wgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1cHBvcnRXZWJHTDtcclxufTtcclxuXHJcbnZlbmRvci5JbnQ4QXJyYXkgPSB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IEFycmF5IDogSW50OEFycmF5O1xyXG5cclxudmVuZG9yLlVpbnQ4QXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IFVpbnQ4QXJyYXk7XHJcblxyXG52ZW5kb3IuVWludDE2QXJyYXkgPSB0eXBlb2YgVWludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBVaW50MTZBcnJheTtcclxuXHJcbnZlbmRvci5VaW50MzJBcnJheSA9IHR5cGVvZiBVaW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IFVpbnQzMkFycmF5O1xyXG5cclxudmVuZG9yLkludDE2QXJyYXkgPSB0eXBlb2YgSW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEludDE2QXJyYXk7XHJcblxyXG52ZW5kb3IuRmxvYXQzMkFycmF5ID0gdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEZsb2F0MzJBcnJheTtcclxuXHJcbnZlbmRvci5GbG9hdDY0QXJyYXkgPSB0eXBlb2YgRmxvYXQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IEFycmF5IDogRmxvYXQ2NEFycmF5O1xyXG5cclxudmFyIGcgPSB7fTtcclxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBnID0gd2luZG93O1xyXG59XHJcbmVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBnID0gZ2xvYmFsO1xyXG59XHJcblxyXG5cclxudmVuZG9yLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGcucmVxdWVzdEFuaW1hdGlvbkZyYW1lXHJcbiAgICB8fCBnLm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lXHJcbiAgICB8fCBnLm1velJlcXVlc3RBbmltYXRpb25GcmFtZVxyXG4gICAgfHwgZy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcclxuICAgIHx8IGZ1bmN0aW9uIChmdW5jKXsgc2V0VGltZW91dChmdW5jLCAxNik7IH07XHJcblxyXG52ZW5kb3IuY3JlYXRlQ2FudmFzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG59O1xyXG5cclxudmVuZG9yLmNyZWF0ZUltYWdlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIG5ldyBnLkltYWdlKCk7XHJcbn07XHJcblxyXG52ZW5kb3IucmVxdWVzdCA9IHtcclxuICAgIGdldDogcmVxdWVzdC5nZXRcclxufTtcclxuXHJcbnZlbmRvci5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGRvbSwgdHlwZSwgZnVuYywgdXNlQ2FwdHVyZSkge1xyXG4gICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZnVuYywgdXNlQ2FwdHVyZSk7XHJcbn07XHJcblxyXG52ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChkb20sIHR5cGUsIGZ1bmMpIHtcclxuICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmMpO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVuZG9yO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCBBbmltYXRvciBmcm9tICcuL2FuaW1hdGlvbi9BbmltYXRvcic7XHJcblxyXG5cclxuLyoqXHJcbiAqIEFuaW1hdGlvbiBpcyBnbG9iYWwgdGltZWxpbmUgdGhhdCBzY2hlZHVsZSBhbGwgY2xpcHMuIGVhY2ggZnJhbWUgYW5pbWF0aW9uIHdpbGwgc2V0IHRoZSB0aW1lIG9mIGNsaXBzIHRvIGN1cnJlbnQgYW5kIHVwZGF0ZSB0aGUgc3RhdGVzIG9mIGNsaXBzXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlRpbWVsaW5lXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIHZhciBhbmltYXRpb24gPSBuZXcgY2xheS5UaW1lbGluZSgpO1xyXG4gKiB2YXIgbm9kZSA9IG5ldyBjbGF5Lk5vZGUoKTtcclxuICogYW5pbWF0aW9uLmFuaW1hdGUobm9kZS5wb3NpdGlvbilcclxuICogICAgIC53aGVuKDEwMDAsIHtcclxuICogICAgICAgICB4OiA1MDAsXHJcbiAqICAgICAgICAgeTogNTAwXHJcbiAqICAgICB9KVxyXG4gKiAgICAgLndoZW4oMjAwMCwge1xyXG4gKiAgICAgICAgIHg6IDEwMCxcclxuICogICAgICAgICB5OiAxMDBcclxuICogICAgIH0pXHJcbiAqICAgICAud2hlbigzMDAwLCB7XHJcbiAqICAgICAgICAgejogMTBcclxuICogICAgIH0pXHJcbiAqICAgICAuc3RhcnQoJ3NwbGluZScpO1xyXG4gKi9cclxudmFyIFRpbWVsaW5lID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5UaW1lbGluZSMgKi97XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogc3RhZ2UgaXMgYW4gb2JqZWN0IHdpdGggcmVuZGVyIG1ldGhvZCwgZWFjaCBmcmFtZSBpZiB0aGVyZSBleGlzdHMgYW55IGFuaW1hdGluZyBjbGlwcywgc3RhZ2UucmVuZGVyIHdpbGwgYmUgY2FsbGVkXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzdGFnZTogbnVsbCxcclxuXHJcbiAgICAgICAgX2NsaXBzOiBbXSxcclxuXHJcbiAgICAgICAgX3J1bm5pbmc6IGZhbHNlLFxyXG5cclxuICAgICAgICBfdGltZTogMCxcclxuXHJcbiAgICAgICAgX3BhdXNlZDogZmFsc2UsXHJcblxyXG4gICAgICAgIF9wYXVzZWRUaW1lOiAwXHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuVGltZWxpbmUucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBhbmltYXRvclxyXG4gICAgICogQHBhcmFtIHtjbGF5LmFuaW1hdGUuQW5pbWF0b3J9IGFuaW1hdG9yXHJcbiAgICAgKi9cclxuICAgIGFkZEFuaW1hdG9yOiBmdW5jdGlvbiAoYW5pbWF0b3IpIHtcclxuICAgICAgICBhbmltYXRvci5hbmltYXRpb24gPSB0aGlzO1xyXG4gICAgICAgIHZhciBjbGlwcyA9IGFuaW1hdG9yLmdldENsaXBzKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGlwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFkZENsaXAoY2xpcHNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICAgICAqL1xyXG4gICAgYWRkQ2xpcDogZnVuY3Rpb24gKGNsaXApIHtcclxuICAgICAgICBpZiAodGhpcy5fY2xpcHMuaW5kZXhPZihjbGlwKSA8IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2xpcHMucHVzaChjbGlwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uQ2xpcH0gY2xpcFxyXG4gICAgICovXHJcbiAgICByZW1vdmVDbGlwOiBmdW5jdGlvbiAoY2xpcCkge1xyXG4gICAgICAgIHZhciBpZHggPSB0aGlzLl9jbGlwcy5pbmRleE9mKGNsaXApO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jbGlwcy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGFuaW1hdG9yXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuYW5pbWF0ZS5BbmltYXRvcn0gYW5pbWF0b3JcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQW5pbWF0b3I6IGZ1bmN0aW9uIChhbmltYXRvcikge1xyXG4gICAgICAgIHZhciBjbGlwcyA9IGFuaW1hdG9yLmdldENsaXBzKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGlwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNsaXAoY2xpcHNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhbmltYXRvci5hbmltYXRpb24gPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciB0aW1lID0gRGF0ZS5ub3coKSAtIHRoaXMuX3BhdXNlZFRpbWU7XHJcbiAgICAgICAgdmFyIGRlbHRhID0gdGltZSAtIHRoaXMuX3RpbWU7XHJcbiAgICAgICAgdmFyIGNsaXBzID0gdGhpcy5fY2xpcHM7XHJcbiAgICAgICAgdmFyIGxlbiA9IGNsaXBzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdmFyIGRlZmVycmVkRXZlbnRzID0gW107XHJcbiAgICAgICAgdmFyIGRlZmVycmVkQ2xpcHMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gY2xpcHNbaV07XHJcbiAgICAgICAgICAgIHZhciBlID0gY2xpcC5zdGVwKHRpbWUsIGRlbHRhLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIC8vIFRocm93IG91dCB0aGUgZXZlbnRzIG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyXHJcbiAgICAgICAgICAgIC8vIHN0YWdlLnJlbmRlciwgbGlrZSBmaW5pc2hcclxuICAgICAgICAgICAgaWYgKGUpIHtcclxuICAgICAgICAgICAgICAgIGRlZmVycmVkRXZlbnRzLnB1c2goZSk7XHJcbiAgICAgICAgICAgICAgICBkZWZlcnJlZENsaXBzLnB1c2goY2xpcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgZmluaXNoZWQgY2xpcFxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOykge1xyXG4gICAgICAgICAgICBpZiAoY2xpcHNbaV0uX25lZWRzUmVtb3ZlKSB7XHJcbiAgICAgICAgICAgICAgICBjbGlwc1tpXSA9IGNsaXBzW2xlbi0xXTtcclxuICAgICAgICAgICAgICAgIGNsaXBzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgbGVuLS07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxlbiA9IGRlZmVycmVkRXZlbnRzLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRlZmVycmVkQ2xpcHNbaV0uZmlyZShkZWZlcnJlZEV2ZW50c1tpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90aW1lID0gdGltZTtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdmcmFtZScsIGRlbHRhKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc3RhZ2UgJiYgdGhpcy5zdGFnZS5yZW5kZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFnZS5yZW5kZXIoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFydCBydW5uaW5nIGFuaW1hdGlvblxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5fcnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fdGltZSA9IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3BhdXNlZFRpbWUgPSAwO1xyXG5cclxuICAgICAgICB2YXIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gdmVuZG9yLnJlcXVlc3RBbmltYXRpb25GcmFtZTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcCgpIHtcclxuICAgICAgICAgICAgaWYgKHNlbGYuX3J1bm5pbmcpIHtcclxuXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFzZWxmLl9wYXVzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLl91cGRhdGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xyXG5cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFN0b3AgcnVubmluZyBhbmltYXRpb25cclxuICAgICAqL1xyXG4gICAgc3RvcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXVzZVxyXG4gICAgICovXHJcbiAgICBwYXVzZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlU3RhcnQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN1bWVcclxuICAgICAqL1xyXG4gICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wYXVzZWRUaW1lICs9IERhdGUubm93KCkgLSB0aGlzLl9wYXVzZVN0YXJ0O1xyXG4gICAgICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGFsbCBjbGlwc1xyXG4gICAgICovXHJcbiAgICByZW1vdmVDbGlwc0FsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NsaXBzID0gW107XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYW4gYW5pbWF0b3JcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtvcHRpb25zXVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW29wdGlvbnMubG9vcF1cclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb3B0aW9ucy5nZXR0ZXJdXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW29wdGlvbnMuc2V0dGVyXVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvcHRpb25zLmludGVycG9sYXRlcl1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICovXHJcbiAgICBhbmltYXRlOiBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zKSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICAgICAgdmFyIGFuaW1hdG9yID0gbmV3IEFuaW1hdG9yKFxyXG4gICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgIG9wdGlvbnMubG9vcCxcclxuICAgICAgICAgICAgb3B0aW9ucy5nZXR0ZXIsXHJcbiAgICAgICAgICAgIG9wdGlvbnMuc2V0dGVyLFxyXG4gICAgICAgICAgICBvcHRpb25zLmludGVycG9sYXRlclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYW5pbWF0b3IuYW5pbWF0aW9uID0gdGhpcztcclxuICAgICAgICByZXR1cm4gYW5pbWF0b3I7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGltZWxpbmU7XHJcbiIsIi8vIERFUFJFQ0FURURcclxuaW1wb3J0IFRpbWVsaW5lIGZyb20gJy4uL1RpbWVsaW5lJztcclxuZXhwb3J0IGRlZmF1bHQgVGltZWxpbmU7IiwiaW1wb3J0IENsaXAgZnJvbSAnLi9DbGlwJztcclxuXHJcbmltcG9ydCBxdWF0IGZyb20gJy4uL2dsbWF0cml4L3F1YXQnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcblxyXG4vKipcclxuICpcclxuICogQW5pbWF0aW9uIGNsaXAgdGhhdCBtYW5hZ2UgYSBjb2xsZWN0aW9uIG9mIHtAbGluayBjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t9XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hbmltYXRpb24uVHJhY2tDbGlwXHJcbiAqXHJcbiAqIEBleHRlbmRzIGNsYXkuYW5pbWF0aW9uLkNsaXBcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubmFtZV1cclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzLnRhcmdldF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmxpZmVdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5kZWxheV1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmdhcF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLnBsYXliYWNrUmF0aW9dXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbnxudW1iZXJ9IFtvcHRzLmxvb3BdIElmIGxvb3AgaXMgYSBudW1iZXIsIGl0IGluZGljYXRlIHRoZSBsb29wIGNvdW50IG9mIGFuaW1hdGlvblxyXG4gKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW29wdHMuZWFzaW5nXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZyYW1lXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZpbmlzaF1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25yZXN0YXJ0XVxyXG4gKiBAcGFyYW0ge0FycmF5LjxjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2s+fSBbb3B0cy50cmFja3NdXHJcbiAqL1xyXG52YXIgVHJhY2tDbGlwID0gZnVuY3Rpb24gKG9wdHMpIHtcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja1tdfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRyYWNrcyA9IG9wdHMudHJhY2tzIHx8IFtdO1xyXG5cclxuICAgIHRoaXMuY2FsY0xpZmVGcm9tVHJhY2tzKCk7XHJcbn07XHJcblxyXG5UcmFja0NsaXAucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGlwLnByb3RvdHlwZSk7XHJcblxyXG5UcmFja0NsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHJhY2tDbGlwO1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5zdGVwID0gZnVuY3Rpb24gKHRpbWUsIGRUaW1lLCBzaWxlbnQpIHtcclxuXHJcbiAgICB2YXIgcmV0ID0gQ2xpcC5wcm90b3R5cGUuc3RlcC5jYWxsKHRoaXMsIHRpbWUsIGRUaW1lLCB0cnVlKTtcclxuXHJcbiAgICBpZiAocmV0ICE9PSAnZmluaXNoJykge1xyXG4gICAgICAgIHZhciB0aW1lID0gdGhpcy5nZXRFbGFwc2VkVGltZSgpO1xyXG4gICAgICAgIC8vIFRPRE8gbGlmZSBtYXkgYmUgY2hhbmdlZC5cclxuICAgICAgICBpZiAodGhpcy5fcmFuZ2UpIHtcclxuICAgICAgICAgICAgdGltZSA9IHRoaXMuX3JhbmdlWzBdICsgdGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUaW1lKHRpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBFTkRJTkcgU2NoZWR1bGVcclxuICAgIGlmICghc2lsZW50ICYmIHJldCAhPT0gJ3BhdXNlZCcpIHtcclxuICAgICAgICB0aGlzLmZpcmUoJ2ZyYW1lJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSByYW5nZVxyXG4gKi9cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5zZXRSYW5nZSA9IGZ1bmN0aW9uIChyYW5nZSkge1xyXG4gICAgdGhpcy5jYWxjTGlmZUZyb21UcmFja3MoKTtcclxuICAgIHRoaXMuX3JhbmdlID0gcmFuZ2U7XHJcbiAgICBpZiAocmFuZ2UpIHtcclxuICAgICAgICByYW5nZVsxXSA9IE1hdGgubWluKHJhbmdlWzFdLCB0aGlzLmxpZmUpO1xyXG4gICAgICAgIHJhbmdlWzBdID0gTWF0aC5taW4ocmFuZ2VbMF0sIHRoaXMubGlmZSk7XHJcbiAgICAgICAgdGhpcy5saWZlID0gKHJhbmdlWzFdIC0gcmFuZ2VbMF0pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLnRyYWNrc1tpXS5zZXRUaW1lKHRpbWUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5jYWxjTGlmZUZyb21UcmFja3MgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmxpZmUgPSAwO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHRoaXMubGlmZSA9IE1hdGgubWF4KHRoaXMubGlmZSwgdGhpcy50cmFja3NbaV0uZ2V0TWF4VGltZSgpKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja30gdHJhY2tcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuYWRkVHJhY2sgPSBmdW5jdGlvbiAodHJhY2spIHtcclxuICAgIHRoaXMudHJhY2tzLnB1c2godHJhY2spO1xyXG4gICAgdGhpcy5jYWxjTGlmZUZyb21UcmFja3MoKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja30gdHJhY2tcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUucmVtb3ZlVGFyY2sgPSBmdW5jdGlvbiAodHJhY2spIHtcclxuICAgIHZhciBpZHggPSB0aGlzLnRyYWNrcy5pbmRleE9mKHRyYWNrKTtcclxuICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgIHRoaXMudHJhY2tzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFRpbWVcclxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFRpbWVcclxuICogQHBhcmFtIHtib29sZWFufSBpc0xvb3BcclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfVxyXG4gKi9cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5nZXRTdWJDbGlwID0gZnVuY3Rpb24gKHN0YXJ0VGltZSwgZW5kVGltZSwgaXNMb29wKSB7XHJcbiAgICB2YXIgc3ViQ2xpcCA9IG5ldyBUcmFja0NsaXAoe1xyXG4gICAgICAgIG5hbWU6IHRoaXMubmFtZVxyXG4gICAgfSk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBzdWJUcmFjayA9IHRoaXMudHJhY2tzW2ldLmdldFN1YlRyYWNrKHN0YXJ0VGltZSwgZW5kVGltZSk7XHJcbiAgICAgICAgc3ViQ2xpcC5hZGRUcmFjayhzdWJUcmFjayk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzTG9vcCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5zZXRMb29wKGlzTG9vcCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3ViQ2xpcC5saWZlID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcclxuXHJcbiAgICByZXR1cm4gc3ViQ2xpcDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiAxZCBibGVuZGluZyBmcm9tIHR3byBza2lubmluZyBjbGlwc1xyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDJcclxuICogQHBhcmFtICB7bnVtYmVyfSB3XHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLmJsZW5kMUQgPSBmdW5jdGlvbiAoY2xpcDEsIGNsaXAyLCB3KSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGMxID0gY2xpcDEudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciBjMiA9IGNsaXAyLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgdENsaXAgPSB0aGlzLnRyYWNrc1tpXTtcclxuXHJcbiAgICAgICAgdENsaXAuYmxlbmQxRChjMSwgYzIsIHcpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZGl0aXZlIGJsZW5kaW5nIGZyb20gdHdvIHNraW5uaW5nIGNsaXBzXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDFcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMlxyXG4gKi9cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5hZGRpdGl2ZUJsZW5kID0gZnVuY3Rpb24gKGNsaXAxLCBjbGlwMikge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBjMSA9IGNsaXAxLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgYzIgPSBjbGlwMi50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIHRDbGlwID0gdGhpcy50cmFja3NbaV07XHJcblxyXG4gICAgICAgIHRDbGlwLmFkZGl0aXZlQmxlbmQoYzEsIGMyKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBTdWJ0cmFjdGl2ZSBibGVuZGluZyBmcm9tIHR3byBza2lubmluZyBjbGlwc1xyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDJcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuc3VidHJhY3RpdmVCbGVuZCA9IGZ1bmN0aW9uIChjbGlwMSwgY2xpcDIpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYzEgPSBjbGlwMS50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIGMyID0gY2xpcDIudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciB0Q2xpcCA9IHRoaXMudHJhY2tzW2ldO1xyXG5cclxuICAgICAgICB0Q2xpcC5zdWJ0cmFjdGl2ZUJsZW5kKGMxLCBjMik7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogMkQgYmxlbmRpbmcgZnJvbSB0aHJlZSBza2lubmluZyBjbGlwc1xyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDJcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwM1xyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IGZcclxuICogQHBhcmFtICB7bnVtYmVyfSBnXHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLmJsZW5kMkQgPSBmdW5jdGlvbiAoY2xpcDEsIGNsaXAyLCBjbGlwMywgZiwgZykge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBjMSA9IGNsaXAxLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgYzIgPSBjbGlwMi50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIGMzID0gY2xpcDMudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciB0Q2xpcCA9IHRoaXMudHJhY2tzW2ldO1xyXG5cclxuICAgICAgICB0Q2xpcC5ibGVuZDJEKGMxLCBjMiwgYzMsIGYsIGcpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgU1JUIG9mIGFsbCBqb2ludHMgY2xpcHMgZnJvbSBhbm90aGVyIFRyYWNrQ2xpcFxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXBcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChjbGlwKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHNUcmFjayA9IGNsaXAudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciB0VHJhY2sgPSB0aGlzLnRyYWNrc1tpXTtcclxuXHJcbiAgICAgICAgdmVjMy5jb3B5KHRUcmFjay5wb3NpdGlvbiwgc1RyYWNrLnBvc2l0aW9uKTtcclxuICAgICAgICB2ZWMzLmNvcHkodFRyYWNrLnNjYWxlLCBzVHJhY2suc2NhbGUpO1xyXG4gICAgICAgIHF1YXQuY29weSh0VHJhY2sucm90YXRpb24sIHNUcmFjay5yb3RhdGlvbik7XHJcbiAgICB9XHJcbn07XHJcblxyXG5UcmFja0NsaXAucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGNsaXAgPSBDbGlwLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNsaXAuYWRkVHJhY2sodGhpcy50cmFja3NbaV0uY2xvbmUoKSk7XHJcbiAgICB9XHJcbiAgICBjbGlwLmxpZmUgPSB0aGlzLmxpZmU7XHJcbiAgICByZXR1cm4gY2xpcDtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRyYWNrQ2xpcDtcclxuIiwidmFyIEVYVEVOU0lPTl9MSVNUID0gW1xyXG4gICAgJ09FU190ZXh0dXJlX2Zsb2F0JyxcclxuICAgICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0JyxcclxuICAgICdPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXInLFxyXG4gICAgJ09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyJyxcclxuICAgICdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMnLFxyXG4gICAgJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JyxcclxuICAgICdPRVNfZWxlbWVudF9pbmRleF91aW50JyxcclxuICAgICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycsXHJcbiAgICAnV0VCR0xfZGVwdGhfdGV4dHVyZScsXHJcbiAgICAnRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyxcclxuICAgICdFWFRfc2hhZGVyX3RleHR1cmVfbG9kJyxcclxuICAgICdXRUJHTF9kcmF3X2J1ZmZlcnMnLFxyXG4gICAgJ0VYVF9mcmFnX2RlcHRoJyxcclxuICAgICdFWFRfc1JHQidcclxuXTtcclxuXHJcbnZhciBQQVJBTUVURVJfTkFNRVMgPSBbXHJcbiAgICAnTUFYX1RFWFRVUkVfU0laRScsXHJcbiAgICAnTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSdcclxuXTtcclxuXHJcbmZ1bmN0aW9uIEdMSW5mbyhfZ2wpIHtcclxuICAgIHZhciBleHRlbnNpb25zID0ge307XHJcbiAgICB2YXIgcGFyYW1ldGVycyA9IHt9O1xyXG5cclxuICAgIC8vIEdldCB3ZWJnbCBleHRlbnNpb25cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgRVhURU5TSU9OX0xJU1QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgZXh0TmFtZSA9IEVYVEVOU0lPTl9MSVNUW2ldO1xyXG4gICAgICAgIGNyZWF0ZUV4dGVuc2lvbihleHROYW1lKTtcclxuICAgIH1cclxuICAgIC8vIEdldCBwYXJhbWV0ZXJzXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IFBBUkFNRVRFUl9OQU1FUy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBuYW1lID0gUEFSQU1FVEVSX05BTUVTW2ldO1xyXG4gICAgICAgIHBhcmFtZXRlcnNbbmFtZV0gPSBfZ2wuZ2V0UGFyYW1ldGVyKF9nbFtuYW1lXSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIGlmICghKG5hbWUgaW4gZXh0ZW5zaW9ucykpIHtcclxuICAgICAgICAgICAgY3JlYXRlRXh0ZW5zaW9uKG5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXh0ZW5zaW9uc1tuYW1lXTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5nZXRQYXJhbWV0ZXIgPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBwYXJhbWV0ZXJzW25hbWVdO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmdldE1heEpvaW50TnVtYmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAxNTtcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gY3JlYXRlRXh0ZW5zaW9uKG5hbWUpIHtcclxuICAgICAgICBpZiAoX2dsLmdldEV4dGVuc2lvbikge1xyXG4gICAgICAgICAgICB2YXIgZXh0ID0gX2dsLmdldEV4dGVuc2lvbihuYW1lKTtcclxuICAgICAgICAgICAgaWYgKCFleHQpIHtcclxuICAgICAgICAgICAgICAgIGV4dCA9IF9nbC5nZXRFeHRlbnNpb24oJ01PWl8nICsgbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFleHQpIHtcclxuICAgICAgICAgICAgICAgIGV4dCA9IF9nbC5nZXRFeHRlbnNpb24oJ1dFQktJVF8nICsgbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZXh0ZW5zaW9uc1tuYW1lXSA9IGV4dDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdMSW5mbztcclxuIiwiLyoqXHJcbiAqIEBuYW1lc3BhY2UgY2xheS5jb3JlLmdsZW51bVxyXG4gKiBAc2VlIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc3BlY3MvbGF0ZXN0LzEuMC8jNS4xNFxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgLyogQ2xlYXJCdWZmZXJNYXNrICovXHJcbiAgICBERVBUSF9CVUZGRVJfQklUICAgICAgICAgICAgICAgOiAweDAwMDAwMTAwLFxyXG4gICAgU1RFTkNJTF9CVUZGRVJfQklUICAgICAgICAgICAgIDogMHgwMDAwMDQwMCxcclxuICAgIENPTE9SX0JVRkZFUl9CSVQgICAgICAgICAgICAgICA6IDB4MDAwMDQwMDAsXHJcblxyXG4gICAgLyogQmVnaW5Nb2RlICovXHJcbiAgICBQT0lOVFMgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDAsXHJcbiAgICBMSU5FUyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDEsXHJcbiAgICBMSU5FX0xPT1AgICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDIsXHJcbiAgICBMSU5FX1NUUklQICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDMsXHJcbiAgICBUUklBTkdMRVMgICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDQsXHJcbiAgICBUUklBTkdMRV9TVFJJUCAgICAgICAgICAgICAgICAgOiAweDAwMDUsXHJcbiAgICBUUklBTkdMRV9GQU4gICAgICAgICAgICAgICAgICAgOiAweDAwMDYsXHJcblxyXG4gICAgLyogQWxwaGFGdW5jdGlvbiAobm90IHN1cHBvcnRlZCBpbiBFUzIwKSAqL1xyXG4gICAgLyogICAgICBORVZFUiAqL1xyXG4gICAgLyogICAgICBMRVNTICovXHJcbiAgICAvKiAgICAgIEVRVUFMICovXHJcbiAgICAvKiAgICAgIExFUVVBTCAqL1xyXG4gICAgLyogICAgICBHUkVBVEVSICovXHJcbiAgICAvKiAgICAgIE5PVEVRVUFMICovXHJcbiAgICAvKiAgICAgIEdFUVVBTCAqL1xyXG4gICAgLyogICAgICBBTFdBWVMgKi9cclxuXHJcbiAgICAvKiBCbGVuZGluZ0ZhY3RvckRlc3QgKi9cclxuICAgIFpFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXHJcbiAgICBPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxLFxyXG4gICAgU1JDX0NPTE9SICAgICAgICAgICAgICAgICAgICAgIDogMHgwMzAwLFxyXG4gICAgT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgIDogMHgwMzAxLFxyXG4gICAgU1JDX0FMUEhBICAgICAgICAgICAgICAgICAgICAgIDogMHgwMzAyLFxyXG4gICAgT05FX01JTlVTX1NSQ19BTFBIQSAgICAgICAgICAgIDogMHgwMzAzLFxyXG4gICAgRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgIDogMHgwMzA0LFxyXG4gICAgT05FX01JTlVTX0RTVF9BTFBIQSAgICAgICAgICAgIDogMHgwMzA1LFxyXG5cclxuICAgIC8qIEJsZW5kaW5nRmFjdG9yU3JjICovXHJcbiAgICAvKiAgICAgIFpFUk8gKi9cclxuICAgIC8qICAgICAgT05FICovXHJcbiAgICBEU1RfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgOiAweDAzMDYsXHJcbiAgICBPTkVfTUlOVVNfRFNUX0NPTE9SICAgICAgICAgICAgOiAweDAzMDcsXHJcbiAgICBTUkNfQUxQSEFfU0FUVVJBVEUgICAgICAgICAgICAgOiAweDAzMDgsXHJcbiAgICAvKiAgICAgIFNSQ19BTFBIQSAqL1xyXG4gICAgLyogICAgICBPTkVfTUlOVVNfU1JDX0FMUEhBICovXHJcbiAgICAvKiAgICAgIERTVF9BTFBIQSAqL1xyXG4gICAgLyogICAgICBPTkVfTUlOVVNfRFNUX0FMUEhBICovXHJcblxyXG4gICAgLyogQmxlbmRFcXVhdGlvblNlcGFyYXRlICovXHJcbiAgICBGVU5DX0FERCAgICAgICAgICAgICAgICAgICAgICAgOiAweDgwMDYsXHJcbiAgICBCTEVORF9FUVVBVElPTiAgICAgICAgICAgICAgICAgOiAweDgwMDksXHJcbiAgICBCTEVORF9FUVVBVElPTl9SR0IgICAgICAgICAgICAgOiAweDgwMDksIC8qIHNhbWUgYXMgQkxFTkRfRVFVQVRJT04gKi9cclxuICAgIEJMRU5EX0VRVUFUSU9OX0FMUEhBICAgICAgICAgICA6IDB4ODgzRCxcclxuXHJcbiAgICAvKiBCbGVuZFN1YnRyYWN0ICovXHJcbiAgICBGVU5DX1NVQlRSQUNUICAgICAgICAgICAgICAgICAgOiAweDgwMEEsXHJcbiAgICBGVU5DX1JFVkVSU0VfU1VCVFJBQ1QgICAgICAgICAgOiAweDgwMEIsXHJcblxyXG4gICAgLyogU2VwYXJhdGUgQmxlbmQgRnVuY3Rpb25zICovXHJcbiAgICBCTEVORF9EU1RfUkdCICAgICAgICAgICAgICAgICAgOiAweDgwQzgsXHJcbiAgICBCTEVORF9TUkNfUkdCICAgICAgICAgICAgICAgICAgOiAweDgwQzksXHJcbiAgICBCTEVORF9EU1RfQUxQSEEgICAgICAgICAgICAgICAgOiAweDgwQ0EsXHJcbiAgICBCTEVORF9TUkNfQUxQSEEgICAgICAgICAgICAgICAgOiAweDgwQ0IsXHJcbiAgICBDT05TVEFOVF9DT0xPUiAgICAgICAgICAgICAgICAgOiAweDgwMDEsXHJcbiAgICBPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgICAgICAgOiAweDgwMDIsXHJcbiAgICBDT05TVEFOVF9BTFBIQSAgICAgICAgICAgICAgICAgOiAweDgwMDMsXHJcbiAgICBPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgICAgICAgOiAweDgwMDQsXHJcbiAgICBCTEVORF9DT0xPUiAgICAgICAgICAgICAgICAgICAgOiAweDgwMDUsXHJcblxyXG4gICAgLyogQnVmZmVyIE9iamVjdHMgKi9cclxuICAgIEFSUkFZX0JVRkZFUiAgICAgICAgICAgICAgICAgICA6IDB4ODg5MixcclxuICAgIEVMRU1FTlRfQVJSQVlfQlVGRkVSICAgICAgICAgICA6IDB4ODg5MyxcclxuICAgIEFSUkFZX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICA6IDB4ODg5NCxcclxuICAgIEVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICA6IDB4ODg5NSxcclxuXHJcbiAgICBTVFJFQU1fRFJBVyAgICAgICAgICAgICAgICAgICAgOiAweDg4RTAsXHJcbiAgICBTVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAgOiAweDg4RTQsXHJcbiAgICBEWU5BTUlDX0RSQVcgICAgICAgICAgICAgICAgICAgOiAweDg4RTgsXHJcblxyXG4gICAgQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgIDogMHg4NzY0LFxyXG4gICAgQlVGRkVSX1VTQUdFICAgICAgICAgICAgICAgICAgIDogMHg4NzY1LFxyXG5cclxuICAgIENVUlJFTlRfVkVSVEVYX0FUVFJJQiAgICAgICAgICA6IDB4ODYyNixcclxuXHJcbiAgICAvKiBDdWxsRmFjZU1vZGUgKi9cclxuICAgIEZST05UICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDQwNCxcclxuICAgIEJBQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDQwNSxcclxuICAgIEZST05UX0FORF9CQUNLICAgICAgICAgICAgICAgICA6IDB4MDQwOCxcclxuXHJcbiAgICAvKiBEZXB0aEZ1bmN0aW9uICovXHJcbiAgICAvKiAgICAgIE5FVkVSICovXHJcbiAgICAvKiAgICAgIExFU1MgKi9cclxuICAgIC8qICAgICAgRVFVQUwgKi9cclxuICAgIC8qICAgICAgTEVRVUFMICovXHJcbiAgICAvKiAgICAgIEdSRUFURVIgKi9cclxuICAgIC8qICAgICAgTk9URVFVQUwgKi9cclxuICAgIC8qICAgICAgR0VRVUFMICovXHJcbiAgICAvKiAgICAgIEFMV0FZUyAqL1xyXG5cclxuICAgIC8qIEVuYWJsZUNhcCAqL1xyXG4gICAgLyogVEVYVFVSRV8yRCAqL1xyXG4gICAgQ1VMTF9GQUNFICAgICAgICAgICAgICAgICAgICAgIDogMHgwQjQ0LFxyXG4gICAgQkxFTkQgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwQkUyLFxyXG4gICAgRElUSEVSICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwQkQwLFxyXG4gICAgU1RFTkNJTF9URVNUICAgICAgICAgICAgICAgICAgIDogMHgwQjkwLFxyXG4gICAgREVQVEhfVEVTVCAgICAgICAgICAgICAgICAgICAgIDogMHgwQjcxLFxyXG4gICAgU0NJU1NPUl9URVNUICAgICAgICAgICAgICAgICAgIDogMHgwQzExLFxyXG4gICAgUE9MWUdPTl9PRkZTRVRfRklMTCAgICAgICAgICAgIDogMHg4MDM3LFxyXG4gICAgU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFICAgICAgIDogMHg4MDlFLFxyXG4gICAgU0FNUExFX0NPVkVSQUdFICAgICAgICAgICAgICAgIDogMHg4MEEwLFxyXG5cclxuICAgIC8qIEVycm9yQ29kZSAqL1xyXG4gICAgTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgIDogMCxcclxuICAgIElOVkFMSURfRU5VTSAgICAgICAgICAgICAgICAgICA6IDB4MDUwMCxcclxuICAgIElOVkFMSURfVkFMVUUgICAgICAgICAgICAgICAgICA6IDB4MDUwMSxcclxuICAgIElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA6IDB4MDUwMixcclxuICAgIE9VVF9PRl9NRU1PUlkgICAgICAgICAgICAgICAgICA6IDB4MDUwNSxcclxuXHJcbiAgICAvKiBGcm9udEZhY2VEaXJlY3Rpb24gKi9cclxuICAgIENXICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDkwMCxcclxuICAgIENDVyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDkwMSxcclxuXHJcbiAgICAvKiBHZXRQTmFtZSAqL1xyXG4gICAgTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDogMHgwQjIxLFxyXG4gICAgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFICAgICAgIDogMHg4NDZELFxyXG4gICAgQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFICAgICAgIDogMHg4NDZFLFxyXG4gICAgQ1VMTF9GQUNFX01PREUgICAgICAgICAgICAgICAgIDogMHgwQjQ1LFxyXG4gICAgRlJPTlRfRkFDRSAgICAgICAgICAgICAgICAgICAgIDogMHgwQjQ2LFxyXG4gICAgREVQVEhfUkFOR0UgICAgICAgICAgICAgICAgICAgIDogMHgwQjcwLFxyXG4gICAgREVQVEhfV1JJVEVNQVNLICAgICAgICAgICAgICAgIDogMHgwQjcyLFxyXG4gICAgREVQVEhfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgIDogMHgwQjczLFxyXG4gICAgREVQVEhfRlVOQyAgICAgICAgICAgICAgICAgICAgIDogMHgwQjc0LFxyXG4gICAgU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAgICAgIDogMHgwQjkxLFxyXG4gICAgU1RFTkNJTF9GVU5DICAgICAgICAgICAgICAgICAgIDogMHgwQjkyLFxyXG4gICAgU1RFTkNJTF9GQUlMICAgICAgICAgICAgICAgICAgIDogMHgwQjk0LFxyXG4gICAgU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUwgICAgICAgIDogMHgwQjk1LFxyXG4gICAgU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MgICAgICAgIDogMHgwQjk2LFxyXG4gICAgU1RFTkNJTF9SRUYgICAgICAgICAgICAgICAgICAgIDogMHgwQjk3LFxyXG4gICAgU1RFTkNJTF9WQUxVRV9NQVNLICAgICAgICAgICAgIDogMHgwQjkzLFxyXG4gICAgU1RFTkNJTF9XUklURU1BU0sgICAgICAgICAgICAgIDogMHgwQjk4LFxyXG4gICAgU1RFTkNJTF9CQUNLX0ZVTkMgICAgICAgICAgICAgIDogMHg4ODAwLFxyXG4gICAgU1RFTkNJTF9CQUNLX0ZBSUwgICAgICAgICAgICAgIDogMHg4ODAxLFxyXG4gICAgU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCAgIDogMHg4ODAyLFxyXG4gICAgU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyAgIDogMHg4ODAzLFxyXG4gICAgU1RFTkNJTF9CQUNLX1JFRiAgICAgICAgICAgICAgIDogMHg4Q0EzLFxyXG4gICAgU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0sgICAgICAgIDogMHg4Q0E0LFxyXG4gICAgU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyAgICAgICAgIDogMHg4Q0E1LFxyXG4gICAgVklFV1BPUlQgICAgICAgICAgICAgICAgICAgICAgIDogMHgwQkEyLFxyXG4gICAgU0NJU1NPUl9CT1ggICAgICAgICAgICAgICAgICAgIDogMHgwQzEwLFxyXG4gICAgLyogICAgICBTQ0lTU09SX1RFU1QgKi9cclxuICAgIENPTE9SX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICA6IDB4MEMyMixcclxuICAgIENPTE9SX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA6IDB4MEMyMyxcclxuICAgIFVOUEFDS19BTElHTk1FTlQgICAgICAgICAgICAgICA6IDB4MENGNSxcclxuICAgIFBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgICA6IDB4MEQwNSxcclxuICAgIE1BWF9URVhUVVJFX1NJWkUgICAgICAgICAgICAgICA6IDB4MEQzMyxcclxuICAgIE1BWF9WSUVXUE9SVF9ESU1TICAgICAgICAgICAgICA6IDB4MEQzQSxcclxuICAgIFNVQlBJWEVMX0JJVFMgICAgICAgICAgICAgICAgICA6IDB4MEQ1MCxcclxuICAgIFJFRF9CSVRTICAgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1MixcclxuICAgIEdSRUVOX0JJVFMgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1MyxcclxuICAgIEJMVUVfQklUUyAgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1NCxcclxuICAgIEFMUEhBX0JJVFMgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1NSxcclxuICAgIERFUFRIX0JJVFMgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1NixcclxuICAgIFNURU5DSUxfQklUUyAgICAgICAgICAgICAgICAgICA6IDB4MEQ1NyxcclxuICAgIFBPTFlHT05fT0ZGU0VUX1VOSVRTICAgICAgICAgICA6IDB4MkEwMCxcclxuICAgIC8qICAgICAgUE9MWUdPTl9PRkZTRVRfRklMTCAqL1xyXG4gICAgUE9MWUdPTl9PRkZTRVRfRkFDVE9SICAgICAgICAgIDogMHg4MDM4LFxyXG4gICAgVEVYVFVSRV9CSU5ESU5HXzJEICAgICAgICAgICAgIDogMHg4MDY5LFxyXG4gICAgU0FNUExFX0JVRkZFUlMgICAgICAgICAgICAgICAgIDogMHg4MEE4LFxyXG4gICAgU0FNUExFUyAgICAgICAgICAgICAgICAgICAgICAgIDogMHg4MEE5LFxyXG4gICAgU0FNUExFX0NPVkVSQUdFX1ZBTFVFICAgICAgICAgIDogMHg4MEFBLFxyXG4gICAgU0FNUExFX0NPVkVSQUdFX0lOVkVSVCAgICAgICAgIDogMHg4MEFCLFxyXG5cclxuICAgIC8qIEdldFRleHR1cmVQYXJhbWV0ZXIgKi9cclxuICAgIC8qICAgICAgVEVYVFVSRV9NQUdfRklMVEVSICovXHJcbiAgICAvKiAgICAgIFRFWFRVUkVfTUlOX0ZJTFRFUiAqL1xyXG4gICAgLyogICAgICBURVhUVVJFX1dSQVBfUyAqL1xyXG4gICAgLyogICAgICBURVhUVVJFX1dSQVBfVCAqL1xyXG5cclxuICAgIENPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTICAgICA6IDB4ODZBMyxcclxuXHJcbiAgICAvKiBIaW50TW9kZSAqL1xyXG4gICAgRE9OVF9DQVJFICAgICAgICAgICAgICAgICAgICAgIDogMHgxMTAwLFxyXG4gICAgRkFTVEVTVCAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxMTAxLFxyXG4gICAgTklDRVNUICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxMTAyLFxyXG5cclxuICAgIC8qIEhpbnRUYXJnZXQgKi9cclxuICAgIEdFTkVSQVRFX01JUE1BUF9ISU5UICAgICAgICAgICAgOiAweDgxOTIsXHJcblxyXG4gICAgLyogRGF0YVR5cGUgKi9cclxuICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTQwMCxcclxuICAgIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICA6IDB4MTQwMSxcclxuICAgIFNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTQwMixcclxuICAgIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICA6IDB4MTQwMyxcclxuICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTQwNCxcclxuICAgIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICA6IDB4MTQwNSxcclxuICAgIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTQwNixcclxuXHJcbiAgICAvKiBQaXhlbEZvcm1hdCAqL1xyXG4gICAgREVQVEhfQ09NUE9ORU5UICAgICAgICAgICAgICAgIDogMHgxOTAyLFxyXG4gICAgQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxOTA2LFxyXG4gICAgUkdCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxOTA3LFxyXG4gICAgUkdCQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxOTA4LFxyXG4gICAgTFVNSU5BTkNFICAgICAgICAgICAgICAgICAgICAgIDogMHgxOTA5LFxyXG4gICAgTFVNSU5BTkNFX0FMUEhBICAgICAgICAgICAgICAgIDogMHgxOTBBLFxyXG5cclxuICAgIC8qIFBpeGVsVHlwZSAqL1xyXG4gICAgLyogICAgICBVTlNJR05FRF9CWVRFICovXHJcbiAgICBVTlNJR05FRF9TSE9SVF80XzRfNF80ICAgICAgICAgOiAweDgwMzMsXHJcbiAgICBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgOiAweDgwMzQsXHJcbiAgICBVTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAgICAgOiAweDgzNjMsXHJcblxyXG4gICAgLyogU2hhZGVycyAqL1xyXG4gICAgRlJBR01FTlRfU0hBREVSICAgICAgICAgICAgICAgICAgOiAweDhCMzAsXHJcbiAgICBWRVJURVhfU0hBREVSICAgICAgICAgICAgICAgICAgICA6IDB4OEIzMSxcclxuICAgIE1BWF9WRVJURVhfQVRUUklCUyAgICAgICAgICAgICAgIDogMHg4ODY5LFxyXG4gICAgTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgOiAweDhERkIsXHJcbiAgICBNQVhfVkFSWUlOR19WRUNUT1JTICAgICAgICAgICAgICA6IDB4OERGQyxcclxuICAgIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTIDogMHg4QjRELFxyXG4gICAgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgOiAweDhCNEMsXHJcbiAgICBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgICAgICAgICA6IDB4ODg3MixcclxuICAgIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMgICAgIDogMHg4REZELFxyXG4gICAgU0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgOiAweDhCNEYsXHJcbiAgICBERUxFVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgICA6IDB4OEI4MCxcclxuICAgIExJTktfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjgyLFxyXG4gICAgVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgOiAweDhCODMsXHJcbiAgICBBVFRBQ0hFRF9TSEFERVJTICAgICAgICAgICAgICAgICA6IDB4OEI4NSxcclxuICAgIEFDVElWRV9VTklGT1JNUyAgICAgICAgICAgICAgICAgIDogMHg4Qjg2LFxyXG4gICAgQUNUSVZFX0FUVFJJQlVURVMgICAgICAgICAgICAgICAgOiAweDhCODksXHJcbiAgICBTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04gICAgICAgICA6IDB4OEI4QyxcclxuICAgIENVUlJFTlRfUFJPR1JBTSAgICAgICAgICAgICAgICAgIDogMHg4QjhELFxyXG5cclxuICAgIC8qIFN0ZW5jaWxGdW5jdGlvbiAqL1xyXG4gICAgTkVWRVIgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjAwLFxyXG4gICAgTEVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjAxLFxyXG4gICAgRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjAyLFxyXG4gICAgTEVRVUFMICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjAzLFxyXG4gICAgR1JFQVRFUiAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjA0LFxyXG4gICAgTk9URVFVQUwgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjA1LFxyXG4gICAgR0VRVUFMICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjA2LFxyXG4gICAgQUxXQVlTICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjA3LFxyXG5cclxuICAgIC8qIFN0ZW5jaWxPcCAqL1xyXG4gICAgLyogICAgICBaRVJPICovXHJcbiAgICBLRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDFFMDAsXHJcbiAgICBSRVBMQUNFICAgICAgICAgICAgICAgICAgICAgICAgOiAweDFFMDEsXHJcbiAgICBJTkNSICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDFFMDIsXHJcbiAgICBERUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDFFMDMsXHJcbiAgICBJTlZFUlQgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE1MEEsXHJcbiAgICBJTkNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgOiAweDg1MDcsXHJcbiAgICBERUNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgOiAweDg1MDgsXHJcblxyXG4gICAgLyogU3RyaW5nTmFtZSAqL1xyXG4gICAgVkVORE9SICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRjAwLFxyXG4gICAgUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRjAxLFxyXG4gICAgVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRjAyLFxyXG5cclxuICAgIC8qIFRleHR1cmVNYWdGaWx0ZXIgKi9cclxuICAgIE5FQVJFU1QgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MjYwMCxcclxuICAgIExJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MjYwMSxcclxuXHJcbiAgICAvKiBUZXh0dXJlTWluRmlsdGVyICovXHJcbiAgICAvKiAgICAgIE5FQVJFU1QgKi9cclxuICAgIC8qICAgICAgTElORUFSICovXHJcbiAgICBORUFSRVNUX01JUE1BUF9ORUFSRVNUICAgICAgICAgOiAweDI3MDAsXHJcbiAgICBMSU5FQVJfTUlQTUFQX05FQVJFU1QgICAgICAgICAgOiAweDI3MDEsXHJcbiAgICBORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgOiAweDI3MDIsXHJcbiAgICBMSU5FQVJfTUlQTUFQX0xJTkVBUiAgICAgICAgICAgOiAweDI3MDMsXHJcblxyXG4gICAgLyogVGV4dHVyZVBhcmFtZXRlck5hbWUgKi9cclxuICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiAgICAgICAgICAgICA6IDB4MjgwMCxcclxuICAgIFRFWFRVUkVfTUlOX0ZJTFRFUiAgICAgICAgICAgICA6IDB4MjgwMSxcclxuICAgIFRFWFRVUkVfV1JBUF9TICAgICAgICAgICAgICAgICA6IDB4MjgwMixcclxuICAgIFRFWFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICA6IDB4MjgwMyxcclxuXHJcbiAgICAvKiBUZXh0dXJlVGFyZ2V0ICovXHJcbiAgICBURVhUVVJFXzJEICAgICAgICAgICAgICAgICAgICAgOiAweDBERTEsXHJcbiAgICBURVhUVVJFICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE3MDIsXHJcblxyXG4gICAgVEVYVFVSRV9DVUJFX01BUCAgICAgICAgICAgICAgIDogMHg4NTEzLFxyXG4gICAgVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQICAgICAgIDogMHg4NTE0LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICAgIDogMHg4NTE1LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YICAgIDogMHg4NTE2LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZICAgIDogMHg4NTE3LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZICAgIDogMHg4NTE4LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aICAgIDogMHg4NTE5LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aICAgIDogMHg4NTFBLFxyXG4gICAgTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSAgICAgIDogMHg4NTFDLFxyXG5cclxuICAgIC8qIFRleHR1cmVVbml0ICovXHJcbiAgICBURVhUVVJFMCAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzAsXHJcbiAgICBURVhUVVJFMSAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzEsXHJcbiAgICBURVhUVVJFMiAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzIsXHJcbiAgICBURVhUVVJFMyAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzMsXHJcbiAgICBURVhUVVJFNCAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzQsXHJcbiAgICBURVhUVVJFNSAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzUsXHJcbiAgICBURVhUVVJFNiAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzYsXHJcbiAgICBURVhUVVJFNyAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzcsXHJcbiAgICBURVhUVVJFOCAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzgsXHJcbiAgICBURVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzksXHJcbiAgICBURVhUVVJFMTAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0EsXHJcbiAgICBURVhUVVJFMTEgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0IsXHJcbiAgICBURVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0MsXHJcbiAgICBURVhUVVJFMTMgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0QsXHJcbiAgICBURVhUVVJFMTQgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0UsXHJcbiAgICBURVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0YsXHJcbiAgICBURVhUVVJFMTYgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDAsXHJcbiAgICBURVhUVVJFMTcgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDEsXHJcbiAgICBURVhUVVJFMTggICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDIsXHJcbiAgICBURVhUVVJFMTkgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDMsXHJcbiAgICBURVhUVVJFMjAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDQsXHJcbiAgICBURVhUVVJFMjEgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDUsXHJcbiAgICBURVhUVVJFMjIgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDYsXHJcbiAgICBURVhUVVJFMjMgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDcsXHJcbiAgICBURVhUVVJFMjQgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDgsXHJcbiAgICBURVhUVVJFMjUgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDksXHJcbiAgICBURVhUVVJFMjYgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REEsXHJcbiAgICBURVhUVVJFMjcgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REIsXHJcbiAgICBURVhUVVJFMjggICAgICAgICAgICAgICAgICAgICAgOiAweDg0REMsXHJcbiAgICBURVhUVVJFMjkgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REQsXHJcbiAgICBURVhUVVJFMzAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REUsXHJcbiAgICBURVhUVVJFMzEgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REYsXHJcbiAgICBBQ1RJVkVfVEVYVFVSRSAgICAgICAgICAgICAgICAgOiAweDg0RTAsXHJcblxyXG4gICAgLyogVGV4dHVyZVdyYXBNb2RlICovXHJcbiAgICBSRVBFQVQgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDI5MDEsXHJcbiAgICBDTEFNUF9UT19FREdFICAgICAgICAgICAgICAgICAgOiAweDgxMkYsXHJcbiAgICBNSVJST1JFRF9SRVBFQVQgICAgICAgICAgICAgICAgOiAweDgzNzAsXHJcblxyXG4gICAgLyogVW5pZm9ybSBUeXBlcyAqL1xyXG4gICAgRkxPQVRfVkVDMiAgICAgICAgICAgICAgICAgICAgIDogMHg4QjUwLFxyXG4gICAgRkxPQVRfVkVDMyAgICAgICAgICAgICAgICAgICAgIDogMHg4QjUxLFxyXG4gICAgRkxPQVRfVkVDNCAgICAgICAgICAgICAgICAgICAgIDogMHg4QjUyLFxyXG4gICAgSU5UX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjUzLFxyXG4gICAgSU5UX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU0LFxyXG4gICAgSU5UX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU1LFxyXG4gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU2LFxyXG4gICAgQk9PTF9WRUMyICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU3LFxyXG4gICAgQk9PTF9WRUMzICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU4LFxyXG4gICAgQk9PTF9WRUM0ICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU5LFxyXG4gICAgRkxPQVRfTUFUMiAgICAgICAgICAgICAgICAgICAgIDogMHg4QjVBLFxyXG4gICAgRkxPQVRfTUFUMyAgICAgICAgICAgICAgICAgICAgIDogMHg4QjVCLFxyXG4gICAgRkxPQVRfTUFUNCAgICAgICAgICAgICAgICAgICAgIDogMHg4QjVDLFxyXG4gICAgU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAgIDogMHg4QjVFLFxyXG4gICAgU0FNUExFUl9DVUJFICAgICAgICAgICAgICAgICAgIDogMHg4QjYwLFxyXG5cclxuICAgIC8qIFZlcnRleCBBcnJheXMgKi9cclxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAgOiAweDg2MjIsXHJcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX1NJWkUgICAgICAgICAgIDogMHg4NjIzLFxyXG4gICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUgICAgICAgICA6IDB4ODYyNCxcclxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSAgICAgICAgICAgOiAweDg2MjUsXHJcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQgICAgIDogMHg4ODZBLFxyXG4gICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSICAgICAgICA6IDB4ODY0NSxcclxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkcgOiAweDg4OUYsXHJcblxyXG4gICAgLyogU2hhZGVyIFNvdXJjZSAqL1xyXG4gICAgQ09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgIDogMHg4QjgxLFxyXG5cclxuICAgIC8qIFNoYWRlciBQcmVjaXNpb24tU3BlY2lmaWVkIFR5cGVzICovXHJcbiAgICBMT1dfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgOiAweDhERjAsXHJcbiAgICBNRURJVU1fRkxPQVQgICAgICAgICAgICAgICAgICAgOiAweDhERjEsXHJcbiAgICBISUdIX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgOiAweDhERjIsXHJcbiAgICBMT1dfSU5UICAgICAgICAgICAgICAgICAgICAgICAgOiAweDhERjMsXHJcbiAgICBNRURJVU1fSU5UICAgICAgICAgICAgICAgICAgICAgOiAweDhERjQsXHJcbiAgICBISUdIX0lOVCAgICAgICAgICAgICAgICAgICAgICAgOiAweDhERjUsXHJcblxyXG4gICAgLyogRnJhbWVidWZmZXIgT2JqZWN0LiAqL1xyXG4gICAgRlJBTUVCVUZGRVIgICAgICAgICAgICAgICAgICAgIDogMHg4RDQwLFxyXG4gICAgUkVOREVSQlVGRkVSICAgICAgICAgICAgICAgICAgIDogMHg4RDQxLFxyXG5cclxuICAgIFJHQkE0ICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4ODA1NixcclxuICAgIFJHQjVfQTEgICAgICAgICAgICAgICAgICAgICAgICA6IDB4ODA1NyxcclxuICAgIFJHQjU2NSAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEQ2MixcclxuICAgIERFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA6IDB4ODFBNSxcclxuICAgIFNURU5DSUxfSU5ERVggICAgICAgICAgICAgICAgICA6IDB4MTkwMSxcclxuICAgIFNURU5DSUxfSU5ERVg4ICAgICAgICAgICAgICAgICA6IDB4OEQ0OCxcclxuICAgIERFUFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICA6IDB4ODRGOSxcclxuXHJcbiAgICBSRU5ERVJCVUZGRVJfV0lEVEggICAgICAgICAgICAgOiAweDhENDIsXHJcbiAgICBSRU5ERVJCVUZGRVJfSEVJR0hUICAgICAgICAgICAgOiAweDhENDMsXHJcbiAgICBSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUICAgOiAweDhENDQsXHJcbiAgICBSRU5ERVJCVUZGRVJfUkVEX1NJWkUgICAgICAgICAgOiAweDhENTAsXHJcbiAgICBSRU5ERVJCVUZGRVJfR1JFRU5fU0laRSAgICAgICAgOiAweDhENTEsXHJcbiAgICBSRU5ERVJCVUZGRVJfQkxVRV9TSVpFICAgICAgICAgOiAweDhENTIsXHJcbiAgICBSRU5ERVJCVUZGRVJfQUxQSEFfU0laRSAgICAgICAgOiAweDhENTMsXHJcbiAgICBSRU5ERVJCVUZGRVJfREVQVEhfU0laRSAgICAgICAgOiAweDhENTQsXHJcbiAgICBSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFICAgICAgOiAweDhENTUsXHJcblxyXG4gICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSAgICAgICAgICAgOiAweDhDRDAsXHJcbiAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAgICA6IDB4OENEMSxcclxuICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTCAgICAgICAgIDogMHg4Q0QyLFxyXG4gICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0UgOiAweDhDRDMsXHJcblxyXG4gICAgQ09MT1JfQVRUQUNITUVOVDAgICAgICAgICAgICAgIDogMHg4Q0UwLFxyXG4gICAgREVQVEhfQVRUQUNITUVOVCAgICAgICAgICAgICAgIDogMHg4RDAwLFxyXG4gICAgU1RFTkNJTF9BVFRBQ0hNRU5UICAgICAgICAgICAgIDogMHg4RDIwLFxyXG4gICAgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UICAgICAgIDogMHg4MjFBLFxyXG5cclxuICAgIE5PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXHJcblxyXG4gICAgRlJBTUVCVUZGRVJfQ09NUExFVEUgICAgICAgICAgICAgICAgICAgICAgOiAweDhDRDUsXHJcbiAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgICAgICAgICA6IDB4OENENixcclxuICAgIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UIDogMHg4Q0Q3LFxyXG4gICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TICAgICAgICAgOiAweDhDRDksXHJcbiAgICBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCAgICAgICAgICAgICAgICAgICA6IDB4OENERCxcclxuXHJcbiAgICBGUkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgOiAweDhDQTYsXHJcbiAgICBSRU5ERVJCVUZGRVJfQklORElORyAgICAgICAgICAgOiAweDhDQTcsXHJcbiAgICBNQVhfUkVOREVSQlVGRkVSX1NJWkUgICAgICAgICAgOiAweDg0RTgsXHJcblxyXG4gICAgSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gIDogMHgwNTA2LFxyXG5cclxuICAgIC8qIFdlYkdMLXNwZWNpZmljIGVudW1zICovXHJcbiAgICBVTlBBQ0tfRkxJUF9ZX1dFQkdMICAgICAgICAgICAgOiAweDkyNDAsXHJcbiAgICBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgOiAweDkyNDEsXHJcbiAgICBDT05URVhUX0xPU1RfV0VCR0wgICAgICAgICAgICAgOiAweDkyNDIsXHJcbiAgICBVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIDogMHg5MjQzLFxyXG4gICAgQlJPV1NFUl9ERUZBVUxUX1dFQkdMICAgICAgICAgIDogMHg5MjQ0LFxyXG59O1xyXG4iLCIvKipcclxuICogU2ltcGxlIGRvdWJsZSBsaW5rZWQgbGlzdC4gQ29tcGFyZWQgd2l0aCBhcnJheSwgaXQgaGFzIE8oMSkgcmVtb3ZlIG9wZXJhdGlvbi5cclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmNvcmUuTGlua2VkTGlzdFxyXG4gKi9cclxudmFyIExpbmtlZExpc3QgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuaGVhZCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMudGFpbCA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5fbGVuZ3RoID0gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnNlcnQgYSBuZXcgdmFsdWUgYXQgdGhlIHRhaWxcclxuICogQHBhcmFtICB7fSB2YWxcclxuICogQHJldHVybiB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbiAodmFsKSB7XHJcbiAgICB2YXIgZW50cnkgPSBuZXcgTGlua2VkTGlzdC5FbnRyeSh2YWwpO1xyXG4gICAgdGhpcy5pbnNlcnRFbnRyeShlbnRyeSk7XHJcbiAgICByZXR1cm4gZW50cnk7XHJcbn07XHJcblxyXG4vKipcclxuICogSW5zZXJ0IGEgbmV3IHZhbHVlIGF0IGlkeFxyXG4gKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAqIEBwYXJhbSAge30gdmFsXHJcbiAqIEByZXR1cm4ge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuaW5zZXJ0QXQgPSBmdW5jdGlvbiAoaWR4LCB2YWwpIHtcclxuICAgIGlmIChpZHggPCAwKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIG5leHQgPSB0aGlzLmhlYWQ7XHJcbiAgICB2YXIgY3Vyc29yID0gMDtcclxuICAgIHdoaWxlIChuZXh0ICYmIGN1cnNvciAhPSBpZHgpIHtcclxuICAgICAgICBuZXh0ID0gbmV4dC5uZXh0O1xyXG4gICAgICAgIGN1cnNvcisrO1xyXG4gICAgfVxyXG4gICAgaWYgKG5leHQpIHtcclxuICAgICAgICB2YXIgZW50cnkgPSBuZXcgTGlua2VkTGlzdC5FbnRyeSh2YWwpO1xyXG4gICAgICAgIHZhciBwcmV2ID0gbmV4dC5wcmV2O1xyXG4gICAgICAgIGlmICghcHJldikgeyAvL25leHQgaXMgaGVhZFxyXG4gICAgICAgICAgICB0aGlzLmhlYWQgPSBlbnRyeTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHByZXYubmV4dCA9IGVudHJ5O1xyXG4gICAgICAgICAgICBlbnRyeS5wcmV2ID0gcHJldjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZW50cnkubmV4dCA9IG5leHQ7XHJcbiAgICAgICAgbmV4dC5wcmV2ID0gZW50cnk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmluc2VydCh2YWwpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlRW50cnkgPSBmdW5jdGlvbiAodmFsLCBuZXh0KSB7XHJcbiAgICB2YXIgZW50cnkgPSBuZXcgTGlua2VkTGlzdC5FbnRyeSh2YWwpO1xyXG4gICAgdmFyIHByZXYgPSBuZXh0LnByZXY7XHJcbiAgICBpZiAoIXByZXYpIHsgLy9uZXh0IGlzIGhlYWRcclxuICAgICAgICB0aGlzLmhlYWQgPSBlbnRyeTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHByZXYubmV4dCA9IGVudHJ5O1xyXG4gICAgICAgIGVudHJ5LnByZXYgPSBwcmV2O1xyXG4gICAgfVxyXG4gICAgZW50cnkubmV4dCA9IG5leHQ7XHJcbiAgICBuZXh0LnByZXYgPSBlbnRyeTtcclxuXHJcbiAgICB0aGlzLl9sZW5ndGgrKztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnNlcnQgYW4gZW50cnkgYXQgdGhlIHRhaWxcclxuICogQHBhcmFtICB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9IGVudHJ5XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5pbnNlcnRFbnRyeSA9IGZ1bmN0aW9uIChlbnRyeSkge1xyXG4gICAgaWYgKCF0aGlzLmhlYWQpIHtcclxuICAgICAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBlbnRyeTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMudGFpbC5uZXh0ID0gZW50cnk7XHJcbiAgICAgICAgZW50cnkucHJldiA9IHRoaXMudGFpbDtcclxuICAgICAgICB0aGlzLnRhaWwgPSBlbnRyeTtcclxuICAgIH1cclxuICAgIHRoaXMuX2xlbmd0aCsrO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSBlbnRyeS5cclxuICogQHBhcmFtICB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9IGVudHJ5XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoZW50cnkpIHtcclxuICAgIHZhciBwcmV2ID0gZW50cnkucHJldjtcclxuICAgIHZhciBuZXh0ID0gZW50cnkubmV4dDtcclxuICAgIGlmIChwcmV2KSB7XHJcbiAgICAgICAgcHJldi5uZXh0ID0gbmV4dDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIElzIGhlYWRcclxuICAgICAgICB0aGlzLmhlYWQgPSBuZXh0O1xyXG4gICAgfVxyXG4gICAgaWYgKG5leHQpIHtcclxuICAgICAgICBuZXh0LnByZXYgPSBwcmV2O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gSXMgdGFpbFxyXG4gICAgICAgIHRoaXMudGFpbCA9IHByZXY7XHJcbiAgICB9XHJcbiAgICBlbnRyeS5uZXh0ID0gZW50cnkucHJldiA9IG51bGw7XHJcbiAgICB0aGlzLl9sZW5ndGgtLTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZW1vdmUgZW50cnkgYXQgaW5kZXguXHJcbiAqIEBwYXJhbSAge251bWJlcn0gaWR4XHJcbiAqIEByZXR1cm4ge31cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLnJlbW92ZUF0ID0gZnVuY3Rpb24gKGlkeCkge1xyXG4gICAgaWYgKGlkeCA8IDApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgY3VyciA9IHRoaXMuaGVhZDtcclxuICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgd2hpbGUgKGN1cnIgJiYgY3Vyc29yICE9IGlkeCkge1xyXG4gICAgICAgIGN1cnIgPSBjdXJyLm5leHQ7XHJcbiAgICAgICAgY3Vyc29yKys7XHJcbiAgICB9XHJcbiAgICBpZiAoY3Vycikge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlKGN1cnIpO1xyXG4gICAgICAgIHJldHVybiBjdXJyLnZhbHVlO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogR2V0IGhlYWQgdmFsdWVcclxuICogQHJldHVybiB7fVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuZ2V0SGVhZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLmhlYWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oZWFkLnZhbHVlO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogR2V0IHRhaWwgdmFsdWVcclxuICogQHJldHVybiB7fVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuZ2V0VGFpbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLnRhaWwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50YWlsLnZhbHVlO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogR2V0IHZhbHVlIGF0IGlkeFxyXG4gKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAqIEByZXR1cm4ge31cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmdldEF0ID0gZnVuY3Rpb24gKGlkeCkge1xyXG4gICAgaWYgKGlkeCA8IDApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgY3VyciA9IHRoaXMuaGVhZDtcclxuICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgd2hpbGUgKGN1cnIgJiYgY3Vyc29yICE9IGlkeCkge1xyXG4gICAgICAgIGN1cnIgPSBjdXJyLm5leHQ7XHJcbiAgICAgICAgY3Vyc29yKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3Vyci52YWx1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHt9IHZhbHVlXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHZhciBjdXJyID0gdGhpcy5oZWFkO1xyXG4gICAgdmFyIGN1cnNvciA9IDA7XHJcbiAgICB3aGlsZSAoY3Vycikge1xyXG4gICAgICAgIGlmIChjdXJyLnZhbHVlID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY3Vyc29yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyID0gY3Vyci5uZXh0O1xyXG4gICAgICAgIGN1cnNvcisrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLl9sZW5ndGg7XHJcbn07XHJcblxyXG4vKipcclxuICogSWYgbGlzdCBpcyBlbXB0eVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLl9sZW5ndGggPT09IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7RnVuY3Rpb259IGNiXHJcbiAqIEBwYXJhbSAge30gY29udGV4dFxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYiwgY29udGV4dCkge1xyXG4gICAgdmFyIGN1cnIgPSB0aGlzLmhlYWQ7XHJcbiAgICB2YXIgaWR4ID0gMDtcclxuICAgIHZhciBoYXZlQ29udGV4dCA9IHR5cGVvZihjb250ZXh0KSAhPSAndW5kZWZpbmVkJztcclxuICAgIHdoaWxlIChjdXJyKSB7XHJcbiAgICAgICAgaWYgKGhhdmVDb250ZXh0KSB7XHJcbiAgICAgICAgICAgIGNiLmNhbGwoY29udGV4dCwgY3Vyci52YWx1ZSwgaWR4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNiKGN1cnIudmFsdWUsIGlkeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cnIgPSBjdXJyLm5leHQ7XHJcbiAgICAgICAgaWR4Kys7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xlYXIgdGhlIGxpc3RcclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy50YWlsID0gdGhpcy5oZWFkID0gbnVsbDtcclxuICAgIHRoaXMuX2xlbmd0aCA9IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBwYXJhbSB7fSB2YWxcclxuICovXHJcbkxpbmtlZExpc3QuRW50cnkgPSBmdW5jdGlvbiAodmFsKSB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt9XHJcbiAgICAgKi9cclxuICAgIHRoaXMudmFsdWUgPSB2YWw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubmV4dCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucHJldiA9IG51bGw7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaW5rZWRMaXN0O1xyXG4iLCJpbXBvcnQgTGlua2VkTGlzdCBmcm9tICcuL0xpbmtlZExpc3QnO1xyXG5cclxuLyoqXHJcbiAqIExSVSBDYWNoZVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuY29yZS5MUlVcclxuICovXHJcbnZhciBMUlUgPSBmdW5jdGlvbiAobWF4U2l6ZSkge1xyXG5cclxuICAgIHRoaXMuX2xpc3QgPSBuZXcgTGlua2VkTGlzdCgpO1xyXG5cclxuICAgIHRoaXMuX21hcCA9IHt9O1xyXG5cclxuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplIHx8IDEwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBjYWNoZSBtYXggc2l6ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gc2l6ZVxyXG4gKi9cclxuTFJVLnByb3RvdHlwZS5zZXRNYXhTaXplID0gZnVuY3Rpb24gKHNpemUpIHtcclxuICAgIHRoaXMuX21heFNpemUgPSBzaXplO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge3N0cmluZ30ga2V5XHJcbiAqIEBwYXJhbSAge30gdmFsdWVcclxuICovXHJcbkxSVS5wcm90b3R5cGUucHV0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgIGlmICghdGhpcy5fbWFwLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICB2YXIgbGVuID0gdGhpcy5fbGlzdC5sZW5ndGgoKTtcclxuICAgICAgICBpZiAobGVuID49IHRoaXMuX21heFNpemUgJiYgbGVuID4gMCkge1xyXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWRcclxuICAgICAgICAgICAgdmFyIGxlYXN0VXNlZEVudHJ5ID0gdGhpcy5fbGlzdC5oZWFkO1xyXG4gICAgICAgICAgICB0aGlzLl9saXN0LnJlbW92ZShsZWFzdFVzZWRFbnRyeSk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9tYXBbbGVhc3RVc2VkRW50cnkua2V5XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuX2xpc3QuaW5zZXJ0KHZhbHVlKTtcclxuICAgICAgICBlbnRyeS5rZXkgPSBrZXk7XHJcbiAgICAgICAgdGhpcy5fbWFwW2tleV0gPSBlbnRyeTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGtleVxyXG4gKiBAcmV0dXJuIHt9XHJcbiAqL1xyXG5MUlUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgIHZhciBlbnRyeSA9IHRoaXMuX21hcFtrZXldO1xyXG4gICAgaWYgKHRoaXMuX21hcC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgLy8gUHV0IHRoZSBsYXRlc3QgdXNlZCBlbnRyeSBpbiB0aGUgdGFpbFxyXG4gICAgICAgIGlmIChlbnRyeSAhPT0gdGhpcy5fbGlzdC50YWlsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpc3QucmVtb3ZlKGVudHJ5KTtcclxuICAgICAgICAgICAgdGhpcy5fbGlzdC5pbnNlcnRFbnRyeShlbnRyeSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxyXG4gKi9cclxuTFJVLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICB2YXIgZW50cnkgPSB0aGlzLl9tYXBba2V5XTtcclxuICAgIGlmICh0eXBlb2YoZW50cnkpICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9tYXBba2V5XTtcclxuICAgICAgICB0aGlzLl9saXN0LnJlbW92ZShlbnRyeSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xlYXIgdGhlIGNhY2hlXHJcbiAqL1xyXG5MUlUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fbGlzdC5jbGVhcigpO1xyXG4gICAgdGhpcy5fbWFwID0ge307XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMUlU7XHJcbiIsIi8qKlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkuY29yZS5jb2xvclxyXG4gKi9cclxuaW1wb3J0IExSVSBmcm9tICcuLi9jb3JlL0xSVSc7XHJcblxyXG52YXIgY29sb3JVdGlsID0ge307XHJcblxyXG52YXIga0NTU0NvbG9yVGFibGUgPSB7XHJcbiAgICAndHJhbnNwYXJlbnQnOiBbMCwwLDAsMF0sICdhbGljZWJsdWUnOiBbMjQwLDI0OCwyNTUsMV0sXHJcbiAgICAnYW50aXF1ZXdoaXRlJzogWzI1MCwyMzUsMjE1LDFdLCAnYXF1YSc6IFswLDI1NSwyNTUsMV0sXHJcbiAgICAnYXF1YW1hcmluZSc6IFsxMjcsMjU1LDIxMiwxXSwgJ2F6dXJlJzogWzI0MCwyNTUsMjU1LDFdLFxyXG4gICAgJ2JlaWdlJzogWzI0NSwyNDUsMjIwLDFdLCAnYmlzcXVlJzogWzI1NSwyMjgsMTk2LDFdLFxyXG4gICAgJ2JsYWNrJzogWzAsMCwwLDFdLCAnYmxhbmNoZWRhbG1vbmQnOiBbMjU1LDIzNSwyMDUsMV0sXHJcbiAgICAnYmx1ZSc6IFswLDAsMjU1LDFdLCAnYmx1ZXZpb2xldCc6IFsxMzgsNDMsMjI2LDFdLFxyXG4gICAgJ2Jyb3duJzogWzE2NSw0Miw0MiwxXSwgJ2J1cmx5d29vZCc6IFsyMjIsMTg0LDEzNSwxXSxcclxuICAgICdjYWRldGJsdWUnOiBbOTUsMTU4LDE2MCwxXSwgJ2NoYXJ0cmV1c2UnOiBbMTI3LDI1NSwwLDFdLFxyXG4gICAgJ2Nob2NvbGF0ZSc6IFsyMTAsMTA1LDMwLDFdLCAnY29yYWwnOiBbMjU1LDEyNyw4MCwxXSxcclxuICAgICdjb3JuZmxvd2VyYmx1ZSc6IFsxMDAsMTQ5LDIzNywxXSwgJ2Nvcm5zaWxrJzogWzI1NSwyNDgsMjIwLDFdLFxyXG4gICAgJ2NyaW1zb24nOiBbMjIwLDIwLDYwLDFdLCAnY3lhbic6IFswLDI1NSwyNTUsMV0sXHJcbiAgICAnZGFya2JsdWUnOiBbMCwwLDEzOSwxXSwgJ2RhcmtjeWFuJzogWzAsMTM5LDEzOSwxXSxcclxuICAgICdkYXJrZ29sZGVucm9kJzogWzE4NCwxMzQsMTEsMV0sICdkYXJrZ3JheSc6IFsxNjksMTY5LDE2OSwxXSxcclxuICAgICdkYXJrZ3JlZW4nOiBbMCwxMDAsMCwxXSwgJ2RhcmtncmV5JzogWzE2OSwxNjksMTY5LDFdLFxyXG4gICAgJ2RhcmtraGFraSc6IFsxODksMTgzLDEwNywxXSwgJ2RhcmttYWdlbnRhJzogWzEzOSwwLDEzOSwxXSxcclxuICAgICdkYXJrb2xpdmVncmVlbic6IFs4NSwxMDcsNDcsMV0sICdkYXJrb3JhbmdlJzogWzI1NSwxNDAsMCwxXSxcclxuICAgICdkYXJrb3JjaGlkJzogWzE1Myw1MCwyMDQsMV0sICdkYXJrcmVkJzogWzEzOSwwLDAsMV0sXHJcbiAgICAnZGFya3NhbG1vbic6IFsyMzMsMTUwLDEyMiwxXSwgJ2RhcmtzZWFncmVlbic6IFsxNDMsMTg4LDE0MywxXSxcclxuICAgICdkYXJrc2xhdGVibHVlJzogWzcyLDYxLDEzOSwxXSwgJ2RhcmtzbGF0ZWdyYXknOiBbNDcsNzksNzksMV0sXHJcbiAgICAnZGFya3NsYXRlZ3JleSc6IFs0Nyw3OSw3OSwxXSwgJ2Rhcmt0dXJxdW9pc2UnOiBbMCwyMDYsMjA5LDFdLFxyXG4gICAgJ2Rhcmt2aW9sZXQnOiBbMTQ4LDAsMjExLDFdLCAnZGVlcHBpbmsnOiBbMjU1LDIwLDE0NywxXSxcclxuICAgICdkZWVwc2t5Ymx1ZSc6IFswLDE5MSwyNTUsMV0sICdkaW1ncmF5JzogWzEwNSwxMDUsMTA1LDFdLFxyXG4gICAgJ2RpbWdyZXknOiBbMTA1LDEwNSwxMDUsMV0sICdkb2RnZXJibHVlJzogWzMwLDE0NCwyNTUsMV0sXHJcbiAgICAnZmlyZWJyaWNrJzogWzE3OCwzNCwzNCwxXSwgJ2Zsb3JhbHdoaXRlJzogWzI1NSwyNTAsMjQwLDFdLFxyXG4gICAgJ2ZvcmVzdGdyZWVuJzogWzM0LDEzOSwzNCwxXSwgJ2Z1Y2hzaWEnOiBbMjU1LDAsMjU1LDFdLFxyXG4gICAgJ2dhaW5zYm9ybyc6IFsyMjAsMjIwLDIyMCwxXSwgJ2dob3N0d2hpdGUnOiBbMjQ4LDI0OCwyNTUsMV0sXHJcbiAgICAnZ29sZCc6IFsyNTUsMjE1LDAsMV0sICdnb2xkZW5yb2QnOiBbMjE4LDE2NSwzMiwxXSxcclxuICAgICdncmF5JzogWzEyOCwxMjgsMTI4LDFdLCAnZ3JlZW4nOiBbMCwxMjgsMCwxXSxcclxuICAgICdncmVlbnllbGxvdyc6IFsxNzMsMjU1LDQ3LDFdLCAnZ3JleSc6IFsxMjgsMTI4LDEyOCwxXSxcclxuICAgICdob25leWRldyc6IFsyNDAsMjU1LDI0MCwxXSwgJ2hvdHBpbmsnOiBbMjU1LDEwNSwxODAsMV0sXHJcbiAgICAnaW5kaWFucmVkJzogWzIwNSw5Miw5MiwxXSwgJ2luZGlnbyc6IFs3NSwwLDEzMCwxXSxcclxuICAgICdpdm9yeSc6IFsyNTUsMjU1LDI0MCwxXSwgJ2toYWtpJzogWzI0MCwyMzAsMTQwLDFdLFxyXG4gICAgJ2xhdmVuZGVyJzogWzIzMCwyMzAsMjUwLDFdLCAnbGF2ZW5kZXJibHVzaCc6IFsyNTUsMjQwLDI0NSwxXSxcclxuICAgICdsYXduZ3JlZW4nOiBbMTI0LDI1MiwwLDFdLCAnbGVtb25jaGlmZm9uJzogWzI1NSwyNTAsMjA1LDFdLFxyXG4gICAgJ2xpZ2h0Ymx1ZSc6IFsxNzMsMjE2LDIzMCwxXSwgJ2xpZ2h0Y29yYWwnOiBbMjQwLDEyOCwxMjgsMV0sXHJcbiAgICAnbGlnaHRjeWFuJzogWzIyNCwyNTUsMjU1LDFdLCAnbGlnaHRnb2xkZW5yb2R5ZWxsb3cnOiBbMjUwLDI1MCwyMTAsMV0sXHJcbiAgICAnbGlnaHRncmF5JzogWzIxMSwyMTEsMjExLDFdLCAnbGlnaHRncmVlbic6IFsxNDQsMjM4LDE0NCwxXSxcclxuICAgICdsaWdodGdyZXknOiBbMjExLDIxMSwyMTEsMV0sICdsaWdodHBpbmsnOiBbMjU1LDE4MiwxOTMsMV0sXHJcbiAgICAnbGlnaHRzYWxtb24nOiBbMjU1LDE2MCwxMjIsMV0sICdsaWdodHNlYWdyZWVuJzogWzMyLDE3OCwxNzAsMV0sXHJcbiAgICAnbGlnaHRza3libHVlJzogWzEzNSwyMDYsMjUwLDFdLCAnbGlnaHRzbGF0ZWdyYXknOiBbMTE5LDEzNiwxNTMsMV0sXHJcbiAgICAnbGlnaHRzbGF0ZWdyZXknOiBbMTE5LDEzNiwxNTMsMV0sICdsaWdodHN0ZWVsYmx1ZSc6IFsxNzYsMTk2LDIyMiwxXSxcclxuICAgICdsaWdodHllbGxvdyc6IFsyNTUsMjU1LDIyNCwxXSwgJ2xpbWUnOiBbMCwyNTUsMCwxXSxcclxuICAgICdsaW1lZ3JlZW4nOiBbNTAsMjA1LDUwLDFdLCAnbGluZW4nOiBbMjUwLDI0MCwyMzAsMV0sXHJcbiAgICAnbWFnZW50YSc6IFsyNTUsMCwyNTUsMV0sICdtYXJvb24nOiBbMTI4LDAsMCwxXSxcclxuICAgICdtZWRpdW1hcXVhbWFyaW5lJzogWzEwMiwyMDUsMTcwLDFdLCAnbWVkaXVtYmx1ZSc6IFswLDAsMjA1LDFdLFxyXG4gICAgJ21lZGl1bW9yY2hpZCc6IFsxODYsODUsMjExLDFdLCAnbWVkaXVtcHVycGxlJzogWzE0NywxMTIsMjE5LDFdLFxyXG4gICAgJ21lZGl1bXNlYWdyZWVuJzogWzYwLDE3OSwxMTMsMV0sICdtZWRpdW1zbGF0ZWJsdWUnOiBbMTIzLDEwNCwyMzgsMV0sXHJcbiAgICAnbWVkaXVtc3ByaW5nZ3JlZW4nOiBbMCwyNTAsMTU0LDFdLCAnbWVkaXVtdHVycXVvaXNlJzogWzcyLDIwOSwyMDQsMV0sXHJcbiAgICAnbWVkaXVtdmlvbGV0cmVkJzogWzE5OSwyMSwxMzMsMV0sICdtaWRuaWdodGJsdWUnOiBbMjUsMjUsMTEyLDFdLFxyXG4gICAgJ21pbnRjcmVhbSc6IFsyNDUsMjU1LDI1MCwxXSwgJ21pc3R5cm9zZSc6IFsyNTUsMjI4LDIyNSwxXSxcclxuICAgICdtb2NjYXNpbic6IFsyNTUsMjI4LDE4MSwxXSwgJ25hdmFqb3doaXRlJzogWzI1NSwyMjIsMTczLDFdLFxyXG4gICAgJ25hdnknOiBbMCwwLDEyOCwxXSwgJ29sZGxhY2UnOiBbMjUzLDI0NSwyMzAsMV0sXHJcbiAgICAnb2xpdmUnOiBbMTI4LDEyOCwwLDFdLCAnb2xpdmVkcmFiJzogWzEwNywxNDIsMzUsMV0sXHJcbiAgICAnb3JhbmdlJzogWzI1NSwxNjUsMCwxXSwgJ29yYW5nZXJlZCc6IFsyNTUsNjksMCwxXSxcclxuICAgICdvcmNoaWQnOiBbMjE4LDExMiwyMTQsMV0sICdwYWxlZ29sZGVucm9kJzogWzIzOCwyMzIsMTcwLDFdLFxyXG4gICAgJ3BhbGVncmVlbic6IFsxNTIsMjUxLDE1MiwxXSwgJ3BhbGV0dXJxdW9pc2UnOiBbMTc1LDIzOCwyMzgsMV0sXHJcbiAgICAncGFsZXZpb2xldHJlZCc6IFsyMTksMTEyLDE0NywxXSwgJ3BhcGF5YXdoaXAnOiBbMjU1LDIzOSwyMTMsMV0sXHJcbiAgICAncGVhY2hwdWZmJzogWzI1NSwyMTgsMTg1LDFdLCAncGVydSc6IFsyMDUsMTMzLDYzLDFdLFxyXG4gICAgJ3BpbmsnOiBbMjU1LDE5MiwyMDMsMV0sICdwbHVtJzogWzIyMSwxNjAsMjIxLDFdLFxyXG4gICAgJ3Bvd2RlcmJsdWUnOiBbMTc2LDIyNCwyMzAsMV0sICdwdXJwbGUnOiBbMTI4LDAsMTI4LDFdLFxyXG4gICAgJ3JlZCc6IFsyNTUsMCwwLDFdLCAncm9zeWJyb3duJzogWzE4OCwxNDMsMTQzLDFdLFxyXG4gICAgJ3JveWFsYmx1ZSc6IFs2NSwxMDUsMjI1LDFdLCAnc2FkZGxlYnJvd24nOiBbMTM5LDY5LDE5LDFdLFxyXG4gICAgJ3NhbG1vbic6IFsyNTAsMTI4LDExNCwxXSwgJ3NhbmR5YnJvd24nOiBbMjQ0LDE2NCw5NiwxXSxcclxuICAgICdzZWFncmVlbic6IFs0NiwxMzksODcsMV0sICdzZWFzaGVsbCc6IFsyNTUsMjQ1LDIzOCwxXSxcclxuICAgICdzaWVubmEnOiBbMTYwLDgyLDQ1LDFdLCAnc2lsdmVyJzogWzE5MiwxOTIsMTkyLDFdLFxyXG4gICAgJ3NreWJsdWUnOiBbMTM1LDIwNiwyMzUsMV0sICdzbGF0ZWJsdWUnOiBbMTA2LDkwLDIwNSwxXSxcclxuICAgICdzbGF0ZWdyYXknOiBbMTEyLDEyOCwxNDQsMV0sICdzbGF0ZWdyZXknOiBbMTEyLDEyOCwxNDQsMV0sXHJcbiAgICAnc25vdyc6IFsyNTUsMjUwLDI1MCwxXSwgJ3NwcmluZ2dyZWVuJzogWzAsMjU1LDEyNywxXSxcclxuICAgICdzdGVlbGJsdWUnOiBbNzAsMTMwLDE4MCwxXSwgJ3Rhbic6IFsyMTAsMTgwLDE0MCwxXSxcclxuICAgICd0ZWFsJzogWzAsMTI4LDEyOCwxXSwgJ3RoaXN0bGUnOiBbMjE2LDE5MSwyMTYsMV0sXHJcbiAgICAndG9tYXRvJzogWzI1NSw5OSw3MSwxXSwgJ3R1cnF1b2lzZSc6IFs2NCwyMjQsMjA4LDFdLFxyXG4gICAgJ3Zpb2xldCc6IFsyMzgsMTMwLDIzOCwxXSwgJ3doZWF0JzogWzI0NSwyMjIsMTc5LDFdLFxyXG4gICAgJ3doaXRlJzogWzI1NSwyNTUsMjU1LDFdLCAnd2hpdGVzbW9rZSc6IFsyNDUsMjQ1LDI0NSwxXSxcclxuICAgICd5ZWxsb3cnOiBbMjU1LDI1NSwwLDFdLCAneWVsbG93Z3JlZW4nOiBbMTU0LDIwNSw1MCwxXVxyXG59O1xyXG5cclxuZnVuY3Rpb24gY2xhbXBDc3NCeXRlKGkpIHsgIC8vIENsYW1wIHRvIGludGVnZXIgMCAuLiAyNTUuXHJcbiAgICBpID0gTWF0aC5yb3VuZChpKTsgIC8vIFNlZW1zIHRvIGJlIHdoYXQgQ2hyb21lIGRvZXMgKHZzIHRydW5jYXRpb24pLlxyXG4gICAgcmV0dXJuIGkgPCAwID8gMCA6IGkgPiAyNTUgPyAyNTUgOiBpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbGFtcENzc0FuZ2xlKGkpIHsgIC8vIENsYW1wIHRvIGludGVnZXIgMCAuLiAzNjAuXHJcbiAgICBpID0gTWF0aC5yb3VuZChpKTsgIC8vIFNlZW1zIHRvIGJlIHdoYXQgQ2hyb21lIGRvZXMgKHZzIHRydW5jYXRpb24pLlxyXG4gICAgcmV0dXJuIGkgPCAwID8gMCA6IGkgPiAzNjAgPyAzNjAgOiBpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbGFtcENzc0Zsb2F0KGYpIHsgIC8vIENsYW1wIHRvIGZsb2F0IDAuMCAuLiAxLjAuXHJcbiAgICByZXR1cm4gZiA8IDAgPyAwIDogZiA+IDEgPyAxIDogZjtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VDc3NJbnQoc3RyKSB7ICAvLyBpbnQgb3IgcGVyY2VudGFnZS5cclxuICAgIGlmIChzdHIubGVuZ3RoICYmIHN0ci5jaGFyQXQoc3RyLmxlbmd0aCAtIDEpID09PSAnJScpIHtcclxuICAgICAgICByZXR1cm4gY2xhbXBDc3NCeXRlKHBhcnNlRmxvYXQoc3RyKSAvIDEwMCAqIDI1NSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xhbXBDc3NCeXRlKHBhcnNlSW50KHN0ciwgMTApKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VDc3NGbG9hdChzdHIpIHsgIC8vIGZsb2F0IG9yIHBlcmNlbnRhZ2UuXHJcbiAgICBpZiAoc3RyLmxlbmd0aCAmJiBzdHIuY2hhckF0KHN0ci5sZW5ndGggLSAxKSA9PT0gJyUnKSB7XHJcbiAgICAgICAgcmV0dXJuIGNsYW1wQ3NzRmxvYXQocGFyc2VGbG9hdChzdHIpIC8gMTAwKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjbGFtcENzc0Zsb2F0KHBhcnNlRmxvYXQoc3RyKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNzc0h1ZVRvUmdiKG0xLCBtMiwgaCkge1xyXG4gICAgaWYgKGggPCAwKSB7XHJcbiAgICAgICAgaCArPSAxO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaCA+IDEpIHtcclxuICAgICAgICBoIC09IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGggKiA2IDwgMSkge1xyXG4gICAgICAgIHJldHVybiBtMSArIChtMiAtIG0xKSAqIGggKiA2O1xyXG4gICAgfVxyXG4gICAgaWYgKGggKiAyIDwgMSkge1xyXG4gICAgICAgIHJldHVybiBtMjtcclxuICAgIH1cclxuICAgIGlmIChoICogMyA8IDIpIHtcclxuICAgICAgICByZXR1cm4gbTEgKyAobTIgLSBtMSkgKiAoMi8zIC0gaCkgKiA2O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG0xO1xyXG59XHJcblxyXG5mdW5jdGlvbiBsZXJwTnVtYmVyKGEsIGIsIHApIHtcclxuICAgIHJldHVybiBhICsgKGIgLSBhKSAqIHA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldFJnYmEob3V0LCByLCBnLCBiLCBhKSB7XHJcbiAgICBvdXRbMF0gPSByOyBvdXRbMV0gPSBnOyBvdXRbMl0gPSBiOyBvdXRbM10gPSBhO1xyXG4gICAgcmV0dXJuIG91dDtcclxufVxyXG5mdW5jdGlvbiBjb3B5UmdiYShvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IGFbMF07IG91dFsxXSA9IGFbMV07IG91dFsyXSA9IGFbMl07IG91dFszXSA9IGFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59XHJcblxyXG52YXIgY29sb3JDYWNoZSA9IG5ldyBMUlUoMjApO1xyXG52YXIgbGFzdFJlbW92ZWRBcnIgPSBudWxsO1xyXG5cclxuZnVuY3Rpb24gcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycikge1xyXG4gICAgLy8gUmV1c2UgcmVtb3ZlZCBhcnJheVxyXG4gICAgaWYgKGxhc3RSZW1vdmVkQXJyKSB7XHJcbiAgICAgICAgY29weVJnYmEobGFzdFJlbW92ZWRBcnIsIHJnYmFBcnIpO1xyXG4gICAgfVxyXG4gICAgbGFzdFJlbW92ZWRBcnIgPSBjb2xvckNhY2hlLnB1dChjb2xvclN0ciwgbGFzdFJlbW92ZWRBcnIgfHwgKHJnYmFBcnIuc2xpY2UoKSkpO1xyXG59XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5jb3JlLmNvbG9yLnBhcnNlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclN0clxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBvdXRcclxuICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59XHJcbiAqL1xyXG5jb2xvclV0aWwucGFyc2UgPSBmdW5jdGlvbiAoY29sb3JTdHIsIHJnYmFBcnIpIHtcclxuICAgIGlmICghY29sb3JTdHIpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZ2JhQXJyID0gcmdiYUFyciB8fCBbXTtcclxuXHJcbiAgICB2YXIgY2FjaGVkID0gY29sb3JDYWNoZS5nZXQoY29sb3JTdHIpO1xyXG4gICAgaWYgKGNhY2hlZCkge1xyXG4gICAgICAgIHJldHVybiBjb3B5UmdiYShyZ2JhQXJyLCBjYWNoZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbG9yU3RyIG1heSBiZSBub3Qgc3RyaW5nXHJcbiAgICBjb2xvclN0ciA9IGNvbG9yU3RyICsgJyc7XHJcbiAgICAvLyBSZW1vdmUgYWxsIHdoaXRlc3BhY2UsIG5vdCBjb21wbGlhbnQsIGJ1dCBzaG91bGQganVzdCBiZSBtb3JlIGFjY2VwdGluZy5cclxuICAgIHZhciBzdHIgPSBjb2xvclN0ci5yZXBsYWNlKC8gL2csICcnKS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIC8vIENvbG9yIGtleXdvcmRzIChhbmQgdHJhbnNwYXJlbnQpIGxvb2t1cC5cclxuICAgIGlmIChzdHIgaW4ga0NTU0NvbG9yVGFibGUpIHtcclxuICAgICAgICBjb3B5UmdiYShyZ2JhQXJyLCBrQ1NTQ29sb3JUYWJsZVtzdHJdKTtcclxuICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcclxuICAgICAgICByZXR1cm4gcmdiYUFycjtcclxuICAgIH1cclxuXHJcbiAgICAvLyAjYWJjIGFuZCAjYWJjMTIzIHN5bnRheC5cclxuICAgIGlmIChzdHIuY2hhckF0KDApID09PSAnIycpIHtcclxuICAgICAgICBpZiAoc3RyLmxlbmd0aCA9PT0gNCkge1xyXG4gICAgICAgICAgICB2YXIgaXYgPSBwYXJzZUludChzdHIuc3Vic3RyKDEpLCAxNik7ICAvLyBUT0RPKGRlYW5tKTogU3RyaWN0ZXIgcGFyc2luZy5cclxuICAgICAgICAgICAgaWYgKCEoaXYgPj0gMCAmJiBpdiA8PSAweGZmZikpIHtcclxuICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47ICAvLyBDb3ZlcnMgTmFOLlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldFJnYmEocmdiYUFycixcclxuICAgICAgICAgICAgICAgICgoaXYgJiAweGYwMCkgPj4gNCkgfCAoKGl2ICYgMHhmMDApID4+IDgpLFxyXG4gICAgICAgICAgICAgICAgKGl2ICYgMHhmMCkgfCAoKGl2ICYgMHhmMCkgPj4gNCksXHJcbiAgICAgICAgICAgICAgICAoaXYgJiAweGYpIHwgKChpdiAmIDB4ZikgPDwgNCksXHJcbiAgICAgICAgICAgICAgICAxXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHB1dFRvQ2FjaGUoY29sb3JTdHIsIHJnYmFBcnIpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmdiYUFycjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3RyLmxlbmd0aCA9PT0gNykge1xyXG4gICAgICAgICAgICB2YXIgaXYgPSBwYXJzZUludChzdHIuc3Vic3RyKDEpLCAxNik7ICAvLyBUT0RPKGRlYW5tKTogU3RyaWN0ZXIgcGFyc2luZy5cclxuICAgICAgICAgICAgaWYgKCEoaXYgPj0gMCAmJiBpdiA8PSAweGZmZmZmZikpIHtcclxuICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47ICAvLyBDb3ZlcnMgTmFOLlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldFJnYmEocmdiYUFycixcclxuICAgICAgICAgICAgICAgIChpdiAmIDB4ZmYwMDAwKSA+PiAxNixcclxuICAgICAgICAgICAgICAgIChpdiAmIDB4ZmYwMCkgPj4gOCxcclxuICAgICAgICAgICAgICAgIGl2ICYgMHhmZixcclxuICAgICAgICAgICAgICAgIDFcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycik7XHJcbiAgICAgICAgICAgIHJldHVybiByZ2JhQXJyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIG9wID0gc3RyLmluZGV4T2YoJygnKSwgZXAgPSBzdHIuaW5kZXhPZignKScpO1xyXG4gICAgaWYgKG9wICE9PSAtMSAmJiBlcCArIDEgPT09IHN0ci5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgZm5hbWUgPSBzdHIuc3Vic3RyKDAsIG9wKTtcclxuICAgICAgICB2YXIgcGFyYW1zID0gc3RyLnN1YnN0cihvcCArIDEsIGVwIC0gKG9wICsgMSkpLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgdmFyIGFscGhhID0gMTsgIC8vIFRvIGFsbG93IGNhc2UgZmFsbHRocm91Z2guXHJcbiAgICAgICAgc3dpdGNoIChmbmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlICdyZ2JhJzpcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhbHBoYSA9IHBhcnNlQ3NzRmxvYXQocGFyYW1zLnBvcCgpKTsgLy8ganNoaW50IGlnbm9yZTpsaW5lXHJcbiAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaC5cclxuICAgICAgICAgICAgY2FzZSAncmdiJzpcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VDc3NJbnQocGFyYW1zWzBdKSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJzZUNzc0ludChwYXJhbXNbMV0pLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlQ3NzSW50KHBhcmFtc1syXSksXHJcbiAgICAgICAgICAgICAgICAgICAgYWxwaGFcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZ2JhQXJyO1xyXG4gICAgICAgICAgICBjYXNlICdoc2xhJzpcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwYXJhbXNbM10gPSBwYXJzZUNzc0Zsb2F0KHBhcmFtc1szXSk7XHJcbiAgICAgICAgICAgICAgICBoc2xhMnJnYmEocGFyYW1zLCByZ2JhQXJyKTtcclxuICAgICAgICAgICAgICAgIHB1dFRvQ2FjaGUoY29sb3JTdHIsIHJnYmFBcnIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJnYmFBcnI7XHJcbiAgICAgICAgICAgIGNhc2UgJ2hzbCc6XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaHNsYTJyZ2JhKHBhcmFtcywgcmdiYUFycik7XHJcbiAgICAgICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZ2JhQXJyO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xyXG4gICAgcmV0dXJuO1xyXG59O1xyXG5cclxuY29sb3JVdGlsLnBhcnNlVG9GbG9hdCA9IGZ1bmN0aW9uIChjb2xvclN0ciwgcmdiYUFycikge1xyXG4gICAgcmdiYUFyciA9IGNvbG9yVXRpbC5wYXJzZShjb2xvclN0ciwgcmdiYUFycik7XHJcbiAgICBpZiAoIXJnYmFBcnIpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZ2JhQXJyWzBdIC89IDI1NTtcclxuICAgIHJnYmFBcnJbMV0gLz0gMjU1O1xyXG4gICAgcmdiYUFyclsyXSAvPSAyNTU7XHJcbiAgICByZXR1cm4gcmdiYUFycjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci5oc2xhMnJnYmFcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gaHNsYVxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSByZ2JhXHJcbiAqIEByZXR1cm4ge0FycmF5LjxudW1iZXI+fSByZ2JhXHJcbiAqL1xyXG5mdW5jdGlvbiBoc2xhMnJnYmEoaHNsYSwgcmdiYSkge1xyXG4gICAgdmFyIGggPSAoKChwYXJzZUZsb2F0KGhzbGFbMF0pICUgMzYwKSArIDM2MCkgJSAzNjApIC8gMzYwOyAgLy8gMCAuLiAxXHJcbiAgICAvLyBOT1RFKGRlYW5tKTogQWNjb3JkaW5nIHRvIHRoZSBDU1Mgc3BlYyBzL2wgc2hvdWxkIG9ubHkgYmVcclxuICAgIC8vIHBlcmNlbnRhZ2VzLCBidXQgd2UgZG9uJ3QgYm90aGVyIGFuZCBsZXQgZmxvYXQgb3IgcGVyY2VudGFnZS5cclxuICAgIHZhciBzID0gcGFyc2VDc3NGbG9hdChoc2xhWzFdKTtcclxuICAgIHZhciBsID0gcGFyc2VDc3NGbG9hdChoc2xhWzJdKTtcclxuICAgIHZhciBtMiA9IGwgPD0gMC41ID8gbCAqIChzICsgMSkgOiBsICsgcyAtIGwgKiBzO1xyXG4gICAgdmFyIG0xID0gbCAqIDIgLSBtMjtcclxuXHJcbiAgICByZ2JhID0gcmdiYSB8fCBbXTtcclxuICAgIHNldFJnYmEocmdiYSxcclxuICAgICAgICBjbGFtcENzc0J5dGUoY3NzSHVlVG9SZ2IobTEsIG0yLCBoICsgMSAvIDMpICogMjU1KSxcclxuICAgICAgICBjbGFtcENzc0J5dGUoY3NzSHVlVG9SZ2IobTEsIG0yLCBoKSAqIDI1NSksXHJcbiAgICAgICAgY2xhbXBDc3NCeXRlKGNzc0h1ZVRvUmdiKG0xLCBtMiwgaCAtIDEgLyAzKSAqIDI1NSksXHJcbiAgICAgICAgMVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoaHNsYS5sZW5ndGggPT09IDQpIHtcclxuICAgICAgICByZ2JhWzNdID0gaHNsYVszXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmdiYTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci5yZ2JhMmhzbGFcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcmdiYVxyXG4gKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn0gaHNsYVxyXG4gKi9cclxuZnVuY3Rpb24gcmdiYTJoc2xhKHJnYmEpIHtcclxuICAgIGlmICghcmdiYSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSR0IgZnJvbSAwIHRvIDI1NVxyXG4gICAgdmFyIFIgPSByZ2JhWzBdIC8gMjU1O1xyXG4gICAgdmFyIEcgPSByZ2JhWzFdIC8gMjU1O1xyXG4gICAgdmFyIEIgPSByZ2JhWzJdIC8gMjU1O1xyXG5cclxuICAgIHZhciB2TWluID0gTWF0aC5taW4oUiwgRywgQik7IC8vIE1pbi4gdmFsdWUgb2YgUkdCXHJcbiAgICB2YXIgdk1heCA9IE1hdGgubWF4KFIsIEcsIEIpOyAvLyBNYXguIHZhbHVlIG9mIFJHQlxyXG4gICAgdmFyIGRlbHRhID0gdk1heCAtIHZNaW47IC8vIERlbHRhIFJHQiB2YWx1ZVxyXG5cclxuICAgIHZhciBMID0gKHZNYXggKyB2TWluKSAvIDI7XHJcbiAgICB2YXIgSDtcclxuICAgIHZhciBTO1xyXG4gICAgLy8gSFNMIHJlc3VsdHMgZnJvbSAwIHRvIDFcclxuICAgIGlmIChkZWx0YSA9PT0gMCkge1xyXG4gICAgICAgIEggPSAwO1xyXG4gICAgICAgIFMgPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKEwgPCAwLjUpIHtcclxuICAgICAgICAgICAgUyA9IGRlbHRhIC8gKHZNYXggKyB2TWluKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIFMgPSBkZWx0YSAvICgyIC0gdk1heCAtIHZNaW4pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGRlbHRhUiA9ICgoKHZNYXggLSBSKSAvIDYpICsgKGRlbHRhIC8gMikpIC8gZGVsdGE7XHJcbiAgICAgICAgdmFyIGRlbHRhRyA9ICgoKHZNYXggLSBHKSAvIDYpICsgKGRlbHRhIC8gMikpIC8gZGVsdGE7XHJcbiAgICAgICAgdmFyIGRlbHRhQiA9ICgoKHZNYXggLSBCKSAvIDYpICsgKGRlbHRhIC8gMikpIC8gZGVsdGE7XHJcblxyXG4gICAgICAgIGlmIChSID09PSB2TWF4KSB7XHJcbiAgICAgICAgICAgIEggPSBkZWx0YUIgLSBkZWx0YUc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKEcgPT09IHZNYXgpIHtcclxuICAgICAgICAgICAgSCA9ICgxIC8gMykgKyBkZWx0YVIgLSBkZWx0YUI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKEIgPT09IHZNYXgpIHtcclxuICAgICAgICAgICAgSCA9ICgyIC8gMykgKyBkZWx0YUcgLSBkZWx0YVI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoSCA8IDApIHtcclxuICAgICAgICAgICAgSCArPSAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEggPiAxKSB7XHJcbiAgICAgICAgICAgIEggLT0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGhzbGEgPSBbSCAqIDM2MCwgUywgTF07XHJcblxyXG4gICAgaWYgKHJnYmFbM10gIT0gbnVsbCkge1xyXG4gICAgICAgIGhzbGEucHVzaChyZ2JhWzNdKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaHNsYTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci5saWZ0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxyXG4gKiBAcGFyYW0ge251bWJlcn0gbGV2ZWxcclxuICogQHJldHVybiB7c3RyaW5nfVxyXG4gKi9cclxuY29sb3JVdGlsLmxpZnQgPSBmdW5jdGlvbiAoY29sb3IsIGxldmVsKSB7XHJcbiAgICB2YXIgY29sb3JBcnIgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xyXG4gICAgaWYgKGNvbG9yQXJyKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGxldmVsIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgY29sb3JBcnJbaV0gPSBjb2xvckFycltpXSAqICgxIC0gbGV2ZWwpIHwgMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yQXJyW2ldID0gKCgyNTUgLSBjb2xvckFycltpXSkgKiBsZXZlbCArIGNvbG9yQXJyW2ldKSB8IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yVXRpbC5zdHJpbmdpZnkoY29sb3JBcnIsIGNvbG9yQXJyLmxlbmd0aCA9PT0gNCA/ICdyZ2JhJyA6ICdyZ2InKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci50b0hleFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcclxuICogQHJldHVybiB7c3RyaW5nfVxyXG4gKi9cclxuY29sb3JVdGlsLnRvSGV4ID0gZnVuY3Rpb24gKGNvbG9yKSB7XHJcbiAgICB2YXIgY29sb3JBcnIgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xyXG4gICAgaWYgKGNvbG9yQXJyKSB7XHJcbiAgICAgICAgcmV0dXJuICgoMSA8PCAyNCkgKyAoY29sb3JBcnJbMF0gPDwgMTYpICsgKGNvbG9yQXJyWzFdIDw8IDgpICsgKCtjb2xvckFyclsyXSkpLnRvU3RyaW5nKDE2KS5zbGljZSgxKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBNYXAgdmFsdWUgdG8gY29sb3IuIEZhc3RlciB0aGFuIGxlcnAgbWV0aG9kcyBiZWNhdXNlIGNvbG9yIGlzIHJlcHJlc2VudGVkIGJ5IHJnYmEgYXJyYXkuXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvclxyXG4gKiBAcGFyYW0ge251bWJlcn0gbm9ybWFsaXplZFZhbHVlIEEgZmxvYXQgYmV0d2VlbiAwIGFuZCAxLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxBcnJheS48bnVtYmVyPj59IGNvbG9ycyBMaXN0IG9mIHJnYmEgY29sb3IgYXJyYXlcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gW291dF0gTWFwcGVkIGdiYSBjb2xvciBhcnJheVxyXG4gKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn0gd2lsbCBiZSBudWxsL3VuZGVmaW5lZCBpZiBpbnB1dCBpbGxlZ2FsLlxyXG4gKi9cclxuY29sb3JVdGlsLmZhc3RMZXJwID0gZnVuY3Rpb24gKG5vcm1hbGl6ZWRWYWx1ZSwgY29sb3JzLCBvdXQpIHtcclxuICAgIGlmICghKGNvbG9ycyAmJiBjb2xvcnMubGVuZ3RoKVxyXG4gICAgICAgIHx8ICEobm9ybWFsaXplZFZhbHVlID49IDAgJiYgbm9ybWFsaXplZFZhbHVlIDw9IDEpXHJcbiAgICApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgb3V0ID0gb3V0IHx8IFtdO1xyXG5cclxuICAgIHZhciB2YWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZSAqIChjb2xvcnMubGVuZ3RoIC0gMSk7XHJcbiAgICB2YXIgbGVmdEluZGV4ID0gTWF0aC5mbG9vcih2YWx1ZSk7XHJcbiAgICB2YXIgcmlnaHRJbmRleCA9IE1hdGguY2VpbCh2YWx1ZSk7XHJcbiAgICB2YXIgbGVmdENvbG9yID0gY29sb3JzW2xlZnRJbmRleF07XHJcbiAgICB2YXIgcmlnaHRDb2xvciA9IGNvbG9yc1tyaWdodEluZGV4XTtcclxuICAgIHZhciBkdiA9IHZhbHVlIC0gbGVmdEluZGV4O1xyXG4gICAgb3V0WzBdID0gY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzBdLCByaWdodENvbG9yWzBdLCBkdikpO1xyXG4gICAgb3V0WzFdID0gY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzFdLCByaWdodENvbG9yWzFdLCBkdikpO1xyXG4gICAgb3V0WzJdID0gY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzJdLCByaWdodENvbG9yWzJdLCBkdikpO1xyXG4gICAgb3V0WzNdID0gY2xhbXBDc3NGbG9hdChsZXJwTnVtYmVyKGxlZnRDb2xvclszXSwgcmlnaHRDb2xvclszXSwgZHYpKTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59XHJcblxyXG5jb2xvclV0aWwuZmFzdE1hcFRvQ29sb3IgPSBjb2xvclV0aWwuZmFzdExlcnA7XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtudW1iZXJ9IG5vcm1hbGl6ZWRWYWx1ZSBBIGZsb2F0IGJldHdlZW4gMCBhbmQgMS5cclxuICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gY29sb3JzIENvbG9yIGxpc3QuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGZ1bGxPdXRwdXQgRGVmYXVsdCBmYWxzZS5cclxuICogQHJldHVybiB7KHN0cmluZ3xPYmplY3QpfSBSZXN1bHQgY29sb3IuIElmIGZ1bGxPdXRwdXQsXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtjb2xvcjogLi4uLCBsZWZ0SW5kZXg6IC4uLiwgcmlnaHRJbmRleDogLi4uLCB2YWx1ZTogLi4ufSxcclxuICovXHJcbmNvbG9yVXRpbC5sZXJwID0gZnVuY3Rpb24gKG5vcm1hbGl6ZWRWYWx1ZSwgY29sb3JzLCBmdWxsT3V0cHV0KSB7XHJcbiAgICBpZiAoIShjb2xvcnMgJiYgY29sb3JzLmxlbmd0aClcclxuICAgICAgICB8fCAhKG5vcm1hbGl6ZWRWYWx1ZSA+PSAwICYmIG5vcm1hbGl6ZWRWYWx1ZSA8PSAxKVxyXG4gICAgKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB2YWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZSAqIChjb2xvcnMubGVuZ3RoIC0gMSk7XHJcbiAgICB2YXIgbGVmdEluZGV4ID0gTWF0aC5mbG9vcih2YWx1ZSk7XHJcbiAgICB2YXIgcmlnaHRJbmRleCA9IE1hdGguY2VpbCh2YWx1ZSk7XHJcbiAgICB2YXIgbGVmdENvbG9yID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yc1tsZWZ0SW5kZXhdKTtcclxuICAgIHZhciByaWdodENvbG9yID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yc1tyaWdodEluZGV4XSk7XHJcbiAgICB2YXIgZHYgPSB2YWx1ZSAtIGxlZnRJbmRleDtcclxuXHJcbiAgICB2YXIgY29sb3IgPSBjb2xvclV0aWwuc3RyaW5naWZ5KFxyXG4gICAgICAgIFtcclxuICAgICAgICAgICAgY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzBdLCByaWdodENvbG9yWzBdLCBkdikpLFxyXG4gICAgICAgICAgICBjbGFtcENzc0J5dGUobGVycE51bWJlcihsZWZ0Q29sb3JbMV0sIHJpZ2h0Q29sb3JbMV0sIGR2KSksXHJcbiAgICAgICAgICAgIGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclsyXSwgcmlnaHRDb2xvclsyXSwgZHYpKSxcclxuICAgICAgICAgICAgY2xhbXBDc3NGbG9hdChsZXJwTnVtYmVyKGxlZnRDb2xvclszXSwgcmlnaHRDb2xvclszXSwgZHYpKVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgJ3JnYmEnXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBmdWxsT3V0cHV0XHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIGNvbG9yOiBjb2xvcixcclxuICAgICAgICAgICAgbGVmdEluZGV4OiBsZWZ0SW5kZXgsXHJcbiAgICAgICAgICAgIHJpZ2h0SW5kZXg6IHJpZ2h0SW5kZXgsXHJcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICA6IGNvbG9yO1xyXG59XHJcblxyXG4vKipcclxuICogQGRlcHJlY2F0ZWRcclxuICovXHJcbmNvbG9yVXRpbC5tYXBUb0NvbG9yID0gY29sb3JVdGlsLmxlcnA7XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5jb3JlLmNvbG9yXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxyXG4gKiBAcGFyYW0ge251bWJlcj19IGggMCB+IDM2MCwgaWdub3JlIHdoZW4gbnVsbC5cclxuICogQHBhcmFtIHtudW1iZXI9fSBzIDAgfiAxLCBpZ25vcmUgd2hlbiBudWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcj19IGwgMCB+IDEsIGlnbm9yZSB3aGVuIG51bGwuXHJcbiAqIEByZXR1cm4ge3N0cmluZ30gQ29sb3Igc3RyaW5nIGluIHJnYmEgZm9ybWF0LlxyXG4gKi9cclxuY29sb3JVdGlsLm1vZGlmeUhTTCA9IGZ1bmN0aW9uIChjb2xvciwgaCwgcywgbCkge1xyXG4gICAgY29sb3IgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xyXG5cclxuICAgIGlmIChjb2xvcikge1xyXG4gICAgICAgIGNvbG9yID0gcmdiYTJoc2xhKGNvbG9yKTtcclxuICAgICAgICBoICE9IG51bGwgJiYgKGNvbG9yWzBdID0gY2xhbXBDc3NBbmdsZShoKSk7XHJcbiAgICAgICAgcyAhPSBudWxsICYmIChjb2xvclsxXSA9IHBhcnNlQ3NzRmxvYXQocykpO1xyXG4gICAgICAgIGwgIT0gbnVsbCAmJiAoY29sb3JbMl0gPSBwYXJzZUNzc0Zsb2F0KGwpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbG9yVXRpbC5zdHJpbmdpZnkoaHNsYTJyZ2JhKGNvbG9yKSwgJ3JnYmEnKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxyXG4gKiBAcGFyYW0ge251bWJlcj19IGFscGhhIDAgfiAxXHJcbiAqIEByZXR1cm4ge3N0cmluZ30gQ29sb3Igc3RyaW5nIGluIHJnYmEgZm9ybWF0LlxyXG4gKi9cclxuY29sb3JVdGlsLm1vZGlmeUFscGhhID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSkge1xyXG4gICAgY29sb3IgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xyXG5cclxuICAgIGlmIChjb2xvciAmJiBhbHBoYSAhPSBudWxsKSB7XHJcbiAgICAgICAgY29sb3JbM10gPSBjbGFtcENzc0Zsb2F0KGFscGhhKTtcclxuICAgICAgICByZXR1cm4gY29sb3JVdGlsLnN0cmluZ2lmeShjb2xvciwgJ3JnYmEnKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyckNvbG9yIGxpa2UgWzEyLDMzLDQ0LDAuNF1cclxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgJ3JnYmEnLCAnaHN2YScsIC4uLlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFJlc3VsdCBjb2xvci4gKElmIGlucHV0IGlsbGVnYWwsIHJldHVybiB1bmRlZmluZWQpLlxyXG4gKi9cclxuY29sb3JVdGlsLnN0cmluZ2lmeSA9IGZ1bmN0aW9uIChhcnJDb2xvciwgdHlwZSkge1xyXG4gICAgaWYgKCFhcnJDb2xvciB8fCAhYXJyQ29sb3IubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGNvbG9yU3RyID0gYXJyQ29sb3JbMF0gKyAnLCcgKyBhcnJDb2xvclsxXSArICcsJyArIGFyckNvbG9yWzJdO1xyXG4gICAgaWYgKHR5cGUgPT09ICdyZ2JhJyB8fCB0eXBlID09PSAnaHN2YScgfHwgdHlwZSA9PT0gJ2hzbGEnKSB7XHJcbiAgICAgICAgY29sb3JTdHIgKz0gJywnICsgYXJyQ29sb3JbM107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHlwZSArICcoJyArIGNvbG9yU3RyICsgJyknO1xyXG59O1xyXG5cclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjb2xvclV0aWw7IiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCBjb2xvclV0aWwgZnJvbSAnLi9jb3JlL2NvbG9yJztcclxudmFyIHBhcnNlQ29sb3IgPSBjb2xvclV0aWwucGFyc2VUb0Zsb2F0O1xyXG5cclxudmFyIHByb2dyYW1LZXlDYWNoZSA9IHt9O1xyXG5cclxuZnVuY3Rpb24gZ2V0RGVmaW5lQ29kZShkZWZpbmVzKSB7XHJcbiAgICB2YXIgZGVmaW5lS2V5cyA9IE9iamVjdC5rZXlzKGRlZmluZXMpO1xyXG4gICAgZGVmaW5lS2V5cy5zb3J0KCk7XHJcbiAgICB2YXIgZGVmaW5lU3RyID0gW107XHJcbiAgICAvLyBDdXN0b20gRGVmaW5lc1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWZpbmVLZXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IGRlZmluZUtleXNbaV07XHJcbiAgICAgICAgdmFyIHZhbHVlID0gZGVmaW5lc1trZXldO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaChrZXkgKyAnICcgKyB2YWx1ZS50b1N0cmluZygpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGVmaW5lU3RyLmpvaW4oJ1xcbicpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQcm9ncmFtS2V5KHZlcnRleERlZmluZXMsIGZyYWdtZW50RGVmaW5lcywgZW5hYmxlZFRleHR1cmVzKSB7XHJcbiAgICBlbmFibGVkVGV4dHVyZXMuc29ydCgpO1xyXG4gICAgdmFyIGRlZmluZVN0ciA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkVGV4dHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgc3ltYm9sID0gZW5hYmxlZFRleHR1cmVzW2ldO1xyXG4gICAgICAgIGRlZmluZVN0ci5wdXNoKHN5bWJvbCk7XHJcbiAgICB9XHJcbiAgICB2YXIga2V5ID0gZ2V0RGVmaW5lQ29kZSh2ZXJ0ZXhEZWZpbmVzKSArICdcXG4nXHJcbiAgICAgICAgKyBnZXREZWZpbmVDb2RlKGZyYWdtZW50RGVmaW5lcykgKyAnXFxuJ1xyXG4gICAgICAgICsgZGVmaW5lU3RyLmpvaW4oJ1xcbicpO1xyXG5cclxuICAgIGlmIChwcm9ncmFtS2V5Q2FjaGVba2V5XSkge1xyXG4gICAgICAgIHJldHVybiBwcm9ncmFtS2V5Q2FjaGVba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgaWQgPSB1dGlsLmdlbkdVSUQoKTtcclxuICAgIHByb2dyYW1LZXlDYWNoZVtrZXldID0gaWQ7XHJcbiAgICByZXR1cm4gaWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNYXRlcmlhbCBkZWZpbmVzIHRoZSBhcHBlYXJhbmNlIG9mIG1lc2ggc3VyZmFjZSwgbGlrZSBgY29sb3JgLCBgcm91Z2huZXNzYCwgYG1ldGFsbmVzc2AsIGV0Yy5cclxuICogSXQgY29udGFpbnMgYSB7QGxpbmsgY2xheS5TaGFkZXJ9IGFuZCBjb3JyZXNwb25kaW5nIHVuaWZvcm1zLlxyXG4gKlxyXG4gKiBIZXJlIGlzIGEgYmFzaWMgZXhhbXBsZSB0byBjcmVhdGUgYSBzdGFuZGFyZCBtYXRlcmlhbFxyXG5gYGBqc1xyXG52YXIgbWF0ZXJpYWwgPSBuZXcgY2xheS5NYXRlcmlhbCh7XHJcbiAgICBzaGFkZXI6IG5ldyBjbGF5LlNoYWRlcihcclxuICAgICAgICBjbGF5LlNoYWRlci5zb3VyY2UoJ2NsYXkudmVydGV4JyksXHJcbiAgICAgICAgY2xheS5TaGFkZXIuc291cmNlKCdjbGF5LmZyYWdtZW50JylcclxuICAgIClcclxufSk7XHJcbmBgYFxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5NYXRlcmlhbFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIE1hdGVyaWFsID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5NYXRlcmlhbCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbmFtZTogJycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgLy8gdW5pZm9ybXM6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlNoYWRlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBzaGFkZXI6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRlcHRoVGVzdDogdHJ1ZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGVwdGhNYXNrOiB0cnVlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQmxlbmQgZnVuYyBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gdGhlIG1hdGVyaWFsXHJcbiAgICAgICAgICogaGF2ZSBjdXN0b20gYmxlbmRpbmdcclxuICAgICAgICAgKiBUaGUgZ2wgY29udGV4dCB3aWxsIGJlIHRoZSBvbmx5IGFyZ3VtZW50IHBhc3NlZCBpbiB0aG8gdGhlXHJcbiAgICAgICAgICogYmxlbmQgZnVuY3Rpb25cclxuICAgICAgICAgKiBEZXRhaWwgb2YgYmxlbmQgZnVuY3Rpb24gaW4gV2ViR0w6XHJcbiAgICAgICAgICogaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9nbGVzL3NwZWNzLzIuMC9lc19mdWxsX3NwZWNfMi4wLjI1LnBkZlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogRXhhbXBsZSA6XHJcbiAgICAgICAgICogZnVuY3Rpb24oX2dsKSB7XHJcbiAgICAgICAgICogIF9nbC5ibGVuZEVxdWF0aW9uKF9nbC5GVU5DX0FERCk7XHJcbiAgICAgICAgICogIF9nbC5ibGVuZEZ1bmMoX2dsLlNSQ19BTFBIQSwgX2dsLk9ORV9NSU5VU19TUkNfQUxQSEEpO1xyXG4gICAgICAgICAqIH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBibGVuZDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdXBkYXRlIHRleHR1cmUgc3RhdHVzIGF1dG9tYXRpY2FsbHkuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXV0b1VwZGF0ZVRleHR1cmVTdGF0dXM6IHRydWUsXHJcblxyXG4gICAgICAgIHVuaWZvcm1zOiB7fSxcclxuICAgICAgICB2ZXJ0ZXhEZWZpbmVzOiB7fSxcclxuICAgICAgICBmcmFnbWVudERlZmluZXM6IHt9LFxyXG4gICAgICAgIF90ZXh0dXJlU3RhdHVzOiB7fSxcclxuXHJcbiAgICAgICAgLy8gc2hhZG93VHJhbnNwYXJlbnRNYXAgOiBudWxsXHJcblxyXG4gICAgICAgIC8vIFBFTkRJTkcgZW5hYmxlIHRoZSB1bmlmb3JtIHRoYXQgb25seSB1c2VkIGluIHNoYWRlci5cclxuICAgICAgICBfZW5hYmxlZFVuaWZvcm1zOiBudWxsLFxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCF0aGlzLm5hbWUpIHtcclxuICAgICAgICB0aGlzLm5hbWUgPSAnTUFURVJJQUxfJyArIHRoaXMuX191aWRfXztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaGFkZXIpIHtcclxuICAgICAgICAvLyBLZWVwIHN0YXR1cywgbWFpbmx5IHByZXNldCB1bmlmb3JtcywgdmVydGV4RGVmaW5lcyBhbmQgZnJhZ21lbnREZWZpbmVzXHJcbiAgICAgICAgdGhpcy5hdHRhY2hTaGFkZXIodGhpcy5zaGFkZXIsIHRydWUpO1xyXG4gICAgfVxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuTWF0ZXJpYWwucHJvdG90eXBlICovXHJcbntcclxuICAgIHByZWNpc2lvbjogJ2hpZ2hwJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBtYXRlcmlhbCB1bmlmb3JtXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogIG1hdC5zZXRVbmlmb3JtKCdjb2xvcicsIFsxLCAxLCAxLCAxXSk7XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcnxhcnJheXxjbGF5LlRleHR1cmV8QXJyYXlCdWZmZXJWaWV3fSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBzZXRVbmlmb3JtOiBmdW5jdGlvbiAoc3ltYm9sLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5pZm9ybSB2YWx1ZSBcIicgKyBzeW1ib2wgKyAnXCIgaXMgdW5kZWZpbmVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB1bmlmb3JtID0gdGhpcy51bmlmb3Jtc1tzeW1ib2xdO1xyXG4gICAgICAgIGlmICh1bmlmb3JtKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIGFzIGEgY29sb3IuIEludmFsaWQgY29sb3Igc3RyaW5nIHdpbGwgcmV0dXJuIG51bGwuXHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlQ29sb3IodmFsdWUpIHx8IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB1bmlmb3JtLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvVXBkYXRlVGV4dHVyZVN0YXR1cyAmJiB1bmlmb3JtLnR5cGUgPT09ICd0Jykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVUZXh0dXJlKHN5bWJvbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVUZXh0dXJlKHN5bWJvbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9ialxyXG4gICAgICovXHJcbiAgICBzZXRVbmlmb3JtczogZnVuY3Rpb24ob2JqKSB7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xyXG4gICAgICAgICAgICB2YXIgdmFsID0gb2JqW2tleV07XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShrZXksIHZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gIHN5bWJvbFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNVbmlmb3JtRW5hYmxlZDogZnVuY3Rpb24gKHN5bWJvbCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkVW5pZm9ybXMuaW5kZXhPZihzeW1ib2wpID49IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEVuYWJsZWRVbmlmb3JtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkVW5pZm9ybXM7XHJcbiAgICB9LFxyXG4gICAgZ2V0VGV4dHVyZVVuaWZvcm1zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVVbmlmb3JtcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBvZiBzZXRVbmlmb3JtIGFuZCBzZXRVbmlmb3Jtc1xyXG4gICAgICogQHBhcmFtIHtvYmplY3R8c3RyaW5nfSBzeW1ib2xcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfGFycmF5fGNsYXkuVGV4dHVyZXxBcnJheUJ1ZmZlclZpZXd9IFt2YWx1ZV1cclxuICAgICAqL1xyXG4gICAgc2V0OiBmdW5jdGlvbiAoc3ltYm9sLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2Yoc3ltYm9sKSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHN5bWJvbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IHN5bWJvbFtrZXldO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKGtleSwgdmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKHN5bWJvbCwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCB1bmlmb3JtIHZhbHVlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfGFycmF5fGNsYXkuVGV4dHVyZXxBcnJheUJ1ZmZlclZpZXd9XHJcbiAgICAgKi9cclxuICAgIGdldDogZnVuY3Rpb24gKHN5bWJvbCkge1xyXG4gICAgICAgIHZhciB1bmlmb3JtID0gdGhpcy51bmlmb3Jtc1tzeW1ib2xdO1xyXG4gICAgICAgIGlmICh1bmlmb3JtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmlmb3JtLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEF0dGFjaCBhIHNoYWRlciBpbnN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5TaGFkZXJ9IHNoYWRlclxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0ga2VlcFN0YXR1cyBJZiB0cnkgdG8ga2VlcCB1bmlmb3JtIGFuZCB0ZXh0dXJlXHJcbiAgICAgKi9cclxuICAgIGF0dGFjaFNoYWRlcjogZnVuY3Rpb24oc2hhZGVyLCBrZWVwU3RhdHVzKSB7XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsVW5pZm9ybXMgPSB0aGlzLnVuaWZvcm1zO1xyXG5cclxuICAgICAgICAvLyBJZ25vcmUgaWYgdW5pZm9ybSBjYW4gdXNlIGluIHNoYWRlci5cclxuICAgICAgICB0aGlzLnVuaWZvcm1zID0gc2hhZGVyLmNyZWF0ZVVuaWZvcm1zKCk7XHJcbiAgICAgICAgdGhpcy5zaGFkZXIgPSBzaGFkZXI7XHJcblxyXG4gICAgICAgIHZhciB1bmlmb3JtcyA9IHRoaXMudW5pZm9ybXM7XHJcbiAgICAgICAgdGhpcy5fZW5hYmxlZFVuaWZvcm1zID0gT2JqZWN0LmtleXModW5pZm9ybXMpO1xyXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB1bmlmb3JtcyBhcmUgc2V0IGluIHNhbWUgb3JkZXIgdG8gYXZvaWQgdGV4dHVyZSBzbG90IHdyb25nXHJcbiAgICAgICAgdGhpcy5fZW5hYmxlZFVuaWZvcm1zLnNvcnQoKTtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlVW5pZm9ybXMgPSB0aGlzLl9lbmFibGVkVW5pZm9ybXMuZmlsdGVyKGZ1bmN0aW9uICh1bmlmb3JtTmFtZSkge1xyXG4gICAgICAgICAgICB2YXIgdHlwZSA9IHRoaXMudW5pZm9ybXNbdW5pZm9ybU5hbWVdLnR5cGU7XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlID09PSAndCcgfHwgdHlwZSA9PT0gJ3R2JztcclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgdmFyIG9yaWdpbmFsVmVydGV4RGVmaW5lcyA9IHRoaXMudmVydGV4RGVmaW5lcztcclxuICAgICAgICB2YXIgb3JpZ2luYWxGcmFnbWVudERlZmluZXMgPSB0aGlzLmZyYWdtZW50RGVmaW5lcztcclxuXHJcbiAgICAgICAgdGhpcy52ZXJ0ZXhEZWZpbmVzID0gdXRpbC5jbG9uZShzaGFkZXIudmVydGV4RGVmaW5lcyk7XHJcbiAgICAgICAgdGhpcy5mcmFnbWVudERlZmluZXMgPSB1dGlsLmNsb25lKHNoYWRlci5mcmFnbWVudERlZmluZXMpO1xyXG5cclxuICAgICAgICBpZiAoa2VlcFN0YXR1cykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gb3JpZ2luYWxVbmlmb3Jtcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1zW3N5bWJvbF0pIHtcclxuICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtc1tzeW1ib2xdLnZhbHVlID0gb3JpZ2luYWxVbmlmb3Jtc1tzeW1ib2xdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB1dGlsLmRlZmF1bHRzKHRoaXMudmVydGV4RGVmaW5lcywgb3JpZ2luYWxWZXJ0ZXhEZWZpbmVzKTtcclxuICAgICAgICAgICAgdXRpbC5kZWZhdWx0cyh0aGlzLmZyYWdtZW50RGVmaW5lcywgb3JpZ2luYWxGcmFnbWVudERlZmluZXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc2hhZGVyLnRleHR1cmVzKSB7XHJcbiAgICAgICAgICAgIHRleHR1cmVTdGF0dXNba2V5XSA9IHtcclxuICAgICAgICAgICAgICAgIHNoYWRlclR5cGU6IHNoYWRlci50ZXh0dXJlc1trZXldLnNoYWRlclR5cGUsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBzaGFkZXIudGV4dHVyZXNba2V5XS50eXBlLFxyXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogKGtlZXBTdGF0dXMgJiYgdGhpcy5fdGV4dHVyZVN0YXR1c1trZXldKSA/IHRoaXMuX3RleHR1cmVTdGF0dXNba2V5XS5lbmFibGVkIDogZmFsc2VcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3RleHR1cmVTdGF0dXMgPSB0ZXh0dXJlU3RhdHVzO1xyXG5cclxuICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgbWF0ZXJpYWwgYW5kIGtlZXAgdW5pZm9ybXMsIHNoYWRlciB3aWxsIG5vdCBiZSBjbG9uZWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0ZXJpYWx9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG1hdGVyaWFsID0gbmV3IHRoaXMuY29uc3RydWN0b3Ioe1xyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXHJcbiAgICAgICAgICAgIHNoYWRlcjogdGhpcy5zaGFkZXJcclxuICAgICAgICB9KTtcclxuICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gdGhpcy51bmlmb3Jtcykge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC51bmlmb3Jtc1tzeW1ib2xdLnZhbHVlID0gdGhpcy51bmlmb3Jtc1tzeW1ib2xdLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtYXRlcmlhbC5kZXB0aFRlc3QgPSB0aGlzLmRlcHRoVGVzdDtcclxuICAgICAgICBtYXRlcmlhbC5kZXB0aE1hc2sgPSB0aGlzLmRlcHRoTWFzaztcclxuICAgICAgICBtYXRlcmlhbC50cmFuc3BhcmVudCA9IHRoaXMudHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgbWF0ZXJpYWwuYmxlbmQgPSB0aGlzLmJsZW5kO1xyXG5cclxuICAgICAgICBtYXRlcmlhbC52ZXJ0ZXhEZWZpbmVzID0gdXRpbC5jbG9uZSh0aGlzLnZlcnRleERlZmluZXMpO1xyXG4gICAgICAgIG1hdGVyaWFsLmZyYWdtZW50RGVmaW5lcyA9IHV0aWwuY2xvbmUodGhpcy5mcmFnbWVudERlZmluZXMpO1xyXG4gICAgICAgIG1hdGVyaWFsLmVuYWJsZVRleHR1cmUodGhpcy5nZXRFbmFibGVkVGV4dHVyZXMoKSk7XHJcbiAgICAgICAgbWF0ZXJpYWwucHJlY2lzaW9uID0gdGhpcy5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYSAjZGVmaW5lIG1hY3JvIGluIHNoYWRlciBjb2RlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHNoYWRlclR5cGUgQ2FuIGJlIHZlcnRleCwgZnJhZ21lbnQgb3IgYm90aFxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW3ZhbF1cclxuICAgICAqL1xyXG4gICAgZGVmaW5lOiBmdW5jdGlvbiAoc2hhZGVyVHlwZSwgc3ltYm9sLCB2YWwpIHtcclxuICAgICAgICB2YXIgdmVydGV4RGVmaW5lcyA9IHRoaXMudmVydGV4RGVmaW5lcztcclxuICAgICAgICB2YXIgZnJhZ21lbnREZWZpbmVzID0gdGhpcy5mcmFnbWVudERlZmluZXM7XHJcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgIT09ICd2ZXJ0ZXgnICYmIHNoYWRlclR5cGUgIT09ICdmcmFnbWVudCcgJiYgc2hhZGVyVHlwZSAhPT0gJ2JvdGgnXHJcbiAgICAgICAgICAgICYmIGFyZ3VtZW50cy5sZW5ndGggPCAzXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIHNoYWRlclR5cGUgZGVmYXVsdCB0byBiZSAnYm90aCdcclxuICAgICAgICAgICAgdmFsID0gc3ltYm9sO1xyXG4gICAgICAgICAgICBzeW1ib2wgPSBzaGFkZXJUeXBlO1xyXG4gICAgICAgICAgICBzaGFkZXJUeXBlID0gJ2JvdGgnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YWwgPSB2YWwgIT0gbnVsbCA/IHZhbCA6IG51bGw7XHJcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgPT09ICd2ZXJ0ZXgnIHx8IHNoYWRlclR5cGUgPT09ICdib3RoJykge1xyXG4gICAgICAgICAgICBpZiAodmVydGV4RGVmaW5lc1tzeW1ib2xdICE9PSB2YWwpIHtcclxuICAgICAgICAgICAgICAgIHZlcnRleERlZmluZXNbc3ltYm9sXSA9IHZhbDtcclxuICAgICAgICAgICAgICAgIC8vIE1hcmsgYXMgZGlydHlcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2hhZGVyVHlwZSA9PT0gJ2ZyYWdtZW50JyB8fCBzaGFkZXJUeXBlID09PSAnYm90aCcpIHtcclxuICAgICAgICAgICAgaWYgKGZyYWdtZW50RGVmaW5lc1tzeW1ib2xdICE9PSB2YWwpIHtcclxuICAgICAgICAgICAgICAgIGZyYWdtZW50RGVmaW5lc1tzeW1ib2xdID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRlclR5cGUgIT09ICdib3RoJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgYSAjZGVmaW5lIG1hY3JvIGluIHNoYWRlciBjb2RlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHNoYWRlclR5cGUgQ2FuIGJlIHZlcnRleCwgZnJhZ21lbnQgb3IgYm90aFxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcclxuICAgICAqL1xyXG4gICAgdW5kZWZpbmU6IGZ1bmN0aW9uIChzaGFkZXJUeXBlLCBzeW1ib2wpIHtcclxuICAgICAgICBpZiAoc2hhZGVyVHlwZSAhPT0gJ3ZlcnRleCcgJiYgc2hhZGVyVHlwZSAhPT0gJ2ZyYWdtZW50JyAmJiBzaGFkZXJUeXBlICE9PSAnYm90aCdcclxuICAgICAgICAgICAgJiYgYXJndW1lbnRzLmxlbmd0aCA8IDJcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgLy8gc2hhZGVyVHlwZSBkZWZhdWx0IHRvIGJlICdib3RoJ1xyXG4gICAgICAgICAgICBzeW1ib2wgPSBzaGFkZXJUeXBlO1xyXG4gICAgICAgICAgICBzaGFkZXJUeXBlID0gJ2JvdGgnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2hhZGVyVHlwZSA9PT0gJ3ZlcnRleCcgfHwgc2hhZGVyVHlwZSA9PT0gJ2JvdGgnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVmaW5lZCgndmVydGV4Jywgc3ltYm9sKSkge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudmVydGV4RGVmaW5lc1tzeW1ib2xdO1xyXG4gICAgICAgICAgICAgICAgLy8gTWFyayBhcyBkaXJ0eVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzaGFkZXJUeXBlID09PSAnZnJhZ21lbnQnIHx8IHNoYWRlclR5cGUgPT09ICdib3RoJykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0RlZmluZWQoJ2ZyYWdtZW50Jywgc3ltYm9sKSkge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZnJhZ21lbnREZWZpbmVzW3N5bWJvbF07XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hhZGVyVHlwZSAhPT0gJ2JvdGgnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIG1hY3JvIGlzIGRlZmluZWQgaW4gc2hhZGVyLlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJUeXBlIENhbiBiZSB2ZXJ0ZXgsIGZyYWdtZW50IG9yIGJvdGhcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKi9cclxuICAgIGlzRGVmaW5lZDogZnVuY3Rpb24gKHNoYWRlclR5cGUsIHN5bWJvbCkge1xyXG4gICAgICAgIC8vIFBFTkRJTkcgaGFzT3duUHJvcGVydHkgP1xyXG4gICAgICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICd2ZXJ0ZXgnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmVydGV4RGVmaW5lc1tzeW1ib2xdICE9PSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ZyYWdtZW50JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyYWdtZW50RGVmaW5lc1tzeW1ib2xdICE9PSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogR2V0IG1hY3JvIHZhbHVlIGRlZmluZWQgaW4gc2hhZGVyLlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJUeXBlIENhbiBiZSB2ZXJ0ZXgsIGZyYWdtZW50IG9yIGJvdGhcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKi9cclxuICAgIGdldERlZmluZTogZnVuY3Rpb24gKHNoYWRlclR5cGUsIHN5bWJvbCkge1xyXG4gICAgICAgIHN3aXRjaChzaGFkZXJUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3ZlcnRleCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52ZXJ0ZXhEZWZpbmVzW3N5bWJvbF07XHJcbiAgICAgICAgICAgIGNhc2UgJ2ZyYWdtZW50JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyYWdtZW50RGVmaW5lc1tzeW1ib2xdO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZSBhIHRleHR1cmUsIGFjdHVhbGx5IGl0IHdpbGwgYWRkIGEgI2RlZmluZSBtYWNybyBpbiB0aGUgc2hhZGVyIGNvZGVcclxuICAgICAqIEZvciBleGFtcGxlLCBpZiB0ZXh0dXJlIHN5bWJvbCBpcyBkaWZmdXNlTWFwLCBpdCB3aWxsIGFkZCBhIGxpbmUgYCNkZWZpbmUgRElGRlVTRU1BUF9FTkFCTEVEYCBpbiB0aGUgc2hhZGVyIGNvZGVcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKi9cclxuICAgIGVuYWJsZVRleHR1cmU6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzeW1ib2wpKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9sLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZVRleHR1cmUoc3ltYm9sW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc3RhdHVzID0gdGhpcy5fdGV4dHVyZVN0YXR1c1tzeW1ib2xdO1xyXG4gICAgICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgICAgICAgdmFyIGlzRW5hYmxlZCA9IHN0YXR1cy5lbmFibGVkO1xyXG4gICAgICAgICAgICBpZiAoIWlzRW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRW5hYmxlIGFsbCB0ZXh0dXJlcyB1c2VkIGluIHRoZSBzaGFkZXJcclxuICAgICAqL1xyXG4gICAgZW5hYmxlVGV4dHVyZXNBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZVN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXM7XHJcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRleHR1cmVTdGF0dXMpIHtcclxuICAgICAgICAgICAgdGV4dHVyZVN0YXR1c1tzeW1ib2xdLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGlzYWJsZSBhIHRleHR1cmUsIGl0IHJlbW92ZSBhICNkZWZpbmUgbWFjcm8gaW4gdGhlIHNoYWRlclxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcclxuICAgICAqL1xyXG4gICAgZGlzYWJsZVRleHR1cmU6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzeW1ib2wpKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9sLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVUZXh0dXJlKHN5bWJvbFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXNbc3ltYm9sXTtcclxuICAgICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHZhciBpc0Rpc2FibGVkID0gISBzdGF0dXMuZW5hYmxlZDtcclxuICAgICAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXMuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGlzYWJsZSBhbGwgdGV4dHVyZXMgdXNlZCBpbiB0aGUgc2hhZGVyXHJcbiAgICAgKi9cclxuICAgIGRpc2FibGVUZXh0dXJlc0FsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlU3RhdHVzID0gdGhpcy5fdGV4dHVyZVN0YXR1cztcclxuICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gdGV4dHVyZVN0YXR1cykge1xyXG4gICAgICAgICAgICB0ZXh0dXJlU3RhdHVzW3N5bWJvbF0uZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogSWYgdGV4dHVyZSBvZiBnaXZlbiB0eXBlIGlzIGVuYWJsZWQuXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBzeW1ib2xcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzVGV4dHVyZUVuYWJsZWQ6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZVN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXM7XHJcbiAgICAgICAgcmV0dXJuICEhdGV4dHVyZVN0YXR1c1tzeW1ib2xdXHJcbiAgICAgICAgICAgICYmIHRleHR1cmVTdGF0dXNbc3ltYm9sXS5lbmFibGVkO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhbGwgZW5hYmxlZCB0ZXh0dXJlc1xyXG4gICAgICogQHJldHVybiB7c3RyaW5nW119XHJcbiAgICAgKi9cclxuICAgIGdldEVuYWJsZWRUZXh0dXJlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBlbmFibGVkVGV4dHVyZXMgPSBbXTtcclxuICAgICAgICB2YXIgdGV4dHVyZVN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXM7XHJcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRleHR1cmVTdGF0dXMpIHtcclxuICAgICAgICAgICAgaWYgKHRleHR1cmVTdGF0dXNbc3ltYm9sXS5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBlbmFibGVkVGV4dHVyZXMucHVzaChzeW1ib2wpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlbmFibGVkVGV4dHVyZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFyayBkZWZpbmVzIGFyZSB1cGRhdGVkLlxyXG4gICAgICovXHJcbiAgICBkaXJ0eURlZmluZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFByb2dyYW1LZXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3Byb2dyYW1LZXkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9IGdldFByb2dyYW1LZXkoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZlcnRleERlZmluZXMsIHRoaXMuZnJhZ21lbnREZWZpbmVzLCB0aGlzLmdldEVuYWJsZWRUZXh0dXJlcygpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9ncmFtS2V5O1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1hdGVyaWFsO1xyXG4iLCJpbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuXHJcbnZhciBTSEFERVJfU1RBVEVfVE9fRU5BQkxFID0gMTtcclxudmFyIFNIQURFUl9TVEFURV9LRUVQX0VOQUJMRSA9IDI7XHJcbnZhciBTSEFERVJfU1RBVEVfUEVORElORyA9IDM7XHJcblxyXG4vLyBFbmFibGUgYXR0cmlidXRlIG9wZXJhdGlvbiBpcyBnbG9iYWwgdG8gYWxsIHByb2dyYW1zXHJcbi8vIEhlcmUgc2F2ZWQgdGhlIGxpc3Qgb2YgYWxsIGVuYWJsZWQgYXR0cmlidXRlIGluZGV4XHJcbi8vIGh0dHA6Ly93d3cubWpic2hhdy5jb20vMjAxMy8wMy93ZWJnbC1maXhpbmctaW52YWxpZG9wZXJhdGlvbi5odG1sXHJcbnZhciBlbmFibGVkQXR0cmlidXRlTGlzdCA9IHt9O1xyXG5cclxuLy8gc29tZSB1dGlsIGZ1bmN0aW9uc1xyXG5mdW5jdGlvbiBhZGRMaW5lTnVtYmVycyhzdHJpbmcpIHtcclxuICAgIHZhciBjaHVua3MgPSBzdHJpbmcuc3BsaXQoJ1xcbicpO1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gY2h1bmtzLmxlbmd0aDsgaSA8IGlsOyBpICsrKSB7XHJcbiAgICAgICAgLy8gQ2hyb21lIHJlcG9ydHMgc2hhZGVyIGVycm9ycyBvbiBsaW5lc1xyXG4gICAgICAgIC8vIHN0YXJ0aW5nIGNvdW50aW5nIGZyb20gMVxyXG4gICAgICAgIGNodW5rc1tpXSA9IChpICsgMSkgKyAnOiAnICsgY2h1bmtzW2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNodW5rcy5qb2luKCdcXG4nKTtcclxufVxyXG5cclxuLy8gUmV0dXJuIHRydWUgb3IgZXJyb3IgbXNnIGlmIGVycm9yIGhhcHBlbmVkXHJcbmZ1bmN0aW9uIGNoZWNrU2hhZGVyRXJyb3JNc2coX2dsLCBzaGFkZXIsIHNoYWRlclN0cmluZykge1xyXG4gICAgaWYgKCFfZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgX2dsLkNPTVBJTEVfU1RBVFVTKSkge1xyXG4gICAgICAgIHJldHVybiBbX2dsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSwgYWRkTGluZU51bWJlcnMoc2hhZGVyU3RyaW5nKV0uam9pbignXFxuJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbnZhciB0bXBGbG9hdDMyQXJyYXkxNiA9IG5ldyB2ZW5kb3IuRmxvYXQzMkFycmF5KDE2KTtcclxuXHJcbnZhciBHTFByb2dyYW0gPSBCYXNlLmV4dGVuZCh7XHJcblxyXG4gICAgdW5pZm9ybVNlbWFudGljczoge30sXHJcbiAgICBhdHRyaWJ1dGVzOiB7fVxyXG5cclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fbG9jYXRpb25zID0ge307XHJcblxyXG4gICAgdGhpcy5fdGV4dHVyZVNsb3QgPSAwO1xyXG5cclxuICAgIHRoaXMuX3Byb2dyYW0gPSBudWxsO1xyXG59LCB7XHJcblxyXG4gICAgYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVNsb3QgPSAwO1xyXG4gICAgICAgIHJlbmRlcmVyLmdsLnVzZVByb2dyYW0odGhpcy5fcHJvZ3JhbSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGhhc1VuaWZvcm06IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl9sb2NhdGlvbnNbc3ltYm9sXTtcclxuICAgICAgICByZXR1cm4gbG9jYXRpb24gIT09IG51bGwgJiYgbG9jYXRpb24gIT09IHVuZGVmaW5lZDtcclxuICAgIH0sXHJcblxyXG4gICAgdXNlVGV4dHVyZVNsb3Q6IGZ1bmN0aW9uIChyZW5kZXJlciwgdGV4dHVyZSwgc2xvdCkge1xyXG4gICAgICAgIGlmICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLmdsLmFjdGl2ZVRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRTAgKyBzbG90KTtcclxuICAgICAgICAgICAgLy8gTWF5YmUgdGV4dHVyZSBpcyBub3QgbG9hZGVkIHlldDtcclxuICAgICAgICAgICAgaWYgKHRleHR1cmUuaXNSZW5kZXJhYmxlKCkpIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBCaW5kIHRleHR1cmUgdG8gbnVsbFxyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS51bmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjdXJyZW50VGV4dHVyZVNsb3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZVNsb3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlc2V0VGV4dHVyZVNsb3Q6IGZ1bmN0aW9uIChzbG90KSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVNsb3QgPSBzbG90IHx8IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIHRha2VDdXJyZW50VGV4dHVyZVNsb3Q6IGZ1bmN0aW9uIChyZW5kZXJlciwgdGV4dHVyZSkge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlU2xvdCA9IHRoaXMuX3RleHR1cmVTbG90O1xyXG5cclxuICAgICAgICB0aGlzLnVzZVRleHR1cmVTbG90KHJlbmRlcmVyLCB0ZXh0dXJlLCB0ZXh0dXJlU2xvdCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3RleHR1cmVTbG90Kys7XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlU2xvdDtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0VW5pZm9ybTogZnVuY3Rpb24gKF9nbCwgdHlwZSwgc3ltYm9sLCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciBsb2NhdGlvbk1hcCA9IHRoaXMuX2xvY2F0aW9ucztcclxuICAgICAgICB2YXIgbG9jYXRpb24gPSBsb2NhdGlvbk1hcFtzeW1ib2xdO1xyXG4gICAgICAgIC8vIFVuaWZvcm0gaXMgbm90IGV4aXN0ZWQgaW4gdGhlIHNoYWRlclxyXG4gICAgICAgIGlmIChsb2NhdGlvbiA9PT0gbnVsbCB8fCBsb2NhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdtNCc6XHJcbiAgICAgICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBVc2UgRmxvYXQzMkFycmF5IGlzIG11Y2ggZmFzdGVyIHRoYW4gYXJyYXkgd2hlbiB1bmlmb3JtTWF0cml4NGZ2LlxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG1wRmxvYXQzMkFycmF5MTZbaV0gPSB2YWx1ZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0bXBGbG9hdDMyQXJyYXkxNjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzJpJzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMmYnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICczaSc6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICczZic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICc0aSc6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnNGYnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzFpJzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICcxZic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMWZ2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMWl2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMml2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMmZ2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnM2l2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnM2Z2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnNGl2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnNGZ2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbTInOlxyXG4gICAgICAgICAgICBjYXNlICdtMnYnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbTMnOlxyXG4gICAgICAgICAgICBjYXNlICdtM3YnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbTR2JzpcclxuICAgICAgICAgICAgICAgIC8vIFJhdyB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIEFycmF5LmlzQXJyYXkodmFsdWVbMF0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkodmFsdWUubGVuZ3RoICogMTYpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB2YWx1ZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxNjsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtjdXJzb3IrK10gPSBpdGVtW2pdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBmYWxzZSwgYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7ICAgLy8gQXJyYXlCdWZmZXJWaWV3XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFVuaWZvcm1PZlNlbWFudGljOiBmdW5jdGlvbiAoX2dsLCBzZW1hbnRpYywgdmFsKSB7XHJcbiAgICAgICAgdmFyIHNlbWFudGljSW5mbyA9IHRoaXMudW5pZm9ybVNlbWFudGljc1tzZW1hbnRpY107XHJcbiAgICAgICAgaWYgKHNlbWFudGljSW5mbykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRVbmlmb3JtKF9nbCwgc2VtYW50aWNJbmZvLnR5cGUsIHNlbWFudGljSW5mby5zeW1ib2wsIHZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVXNlZCBmb3IgY3JlYXRpbmcgVkFPXHJcbiAgICAvLyBFbmFibGUgdGhlIGF0dHJpYnV0ZXMgcGFzc2VkIGluIGFuZCBkaXNhYmxlIHRoZSByZXN0XHJcbiAgICAvLyBFeGFtcGxlIFVzYWdlOlxyXG4gICAgLy8gZW5hYmxlQXR0cmlidXRlcyhyZW5kZXJlciwgW1wicG9zaXRpb25cIiwgXCJ0ZXhjb29yZHNcIl0pXHJcbiAgICBlbmFibGVBdHRyaWJ1dGVzOiBmdW5jdGlvbiAocmVuZGVyZXIsIGF0dHJpYkxpc3QsIHZhbykge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgcHJvZ3JhbSA9IHRoaXMuX3Byb2dyYW07XHJcblxyXG4gICAgICAgIHZhciBsb2NhdGlvbk1hcCA9IHRoaXMuX2xvY2F0aW9ucztcclxuXHJcbiAgICAgICAgdmFyIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0O1xyXG4gICAgICAgIGlmICh2YW8pIHtcclxuICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHQgPSB2YW8uX19lbmFibGVkQXR0cmlidXRlTGlzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0ID0gZW5hYmxlZEF0dHJpYnV0ZUxpc3RbcmVuZGVyZXIuX191aWRfX107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHQpIHtcclxuICAgICAgICAgICAgLy8gSW4gdmVydGV4IGFycmF5IG9iamVjdCBjb250ZXh0XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkcgRWFjaCB2YW8gb2JqZWN0IG5lZWRzIHRvIGVuYWJsZSBhdHRyaWJ1dGVzIGFnYWluP1xyXG4gICAgICAgICAgICBpZiAodmFvKSB7XHJcbiAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFxyXG4gICAgICAgICAgICAgICAgICAgID0gdmFvLl9fZW5hYmxlZEF0dHJpYnV0ZUxpc3RcclxuICAgICAgICAgICAgICAgICAgICA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRcclxuICAgICAgICAgICAgICAgICAgICA9IGVuYWJsZWRBdHRyaWJ1dGVMaXN0W3JlbmRlcmVyLl9fdWlkX19dXHJcbiAgICAgICAgICAgICAgICAgICAgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbG9jYXRpb25MaXN0ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBzeW1ib2wgPSBhdHRyaWJMaXN0W2ldO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuYXR0cmlidXRlc1tzeW1ib2xdKSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbkxpc3RbaV0gPSAtMTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGxvY2F0aW9uTWFwW3N5bWJvbF07XHJcbiAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IF9nbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgLy8gQXR0cmliIGxvY2F0aW9uIGlzIGEgbnVtYmVyIGZyb20gMCB0byAuLi5cclxuICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbkxpc3RbaV0gPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uTWFwW3N5bWJvbF0gPSBsb2NhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsb2NhdGlvbkxpc3RbaV0gPSBsb2NhdGlvbjtcclxuXHJcbiAgICAgICAgICAgIGlmICghZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbbG9jYXRpb25dKSB7XHJcbiAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtsb2NhdGlvbl0gPSBTSEFERVJfU1RBVEVfVE9fRU5BQkxFO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbbG9jYXRpb25dID0gU0hBREVSX1NUQVRFX0tFRVBfRU5BQkxFO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaChlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtpXSl7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFNIQURFUl9TVEFURV9UT19FTkFCTEU6XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0W2ldID0gU0hBREVSX1NUQVRFX1BFTkRJTkc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFNIQURFUl9TVEFURV9LRUVQX0VOQUJMRTpcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtpXSA9IFNIQURFUl9TVEFURV9QRU5ESU5HO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgLy8gRXhwaXJlZFxyXG4gICAgICAgICAgICAgICAgY2FzZSBTSEFERVJfU1RBVEVfUEVORElORzpcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0W2ldID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uTGlzdDtcclxuICAgIH0sXHJcblxyXG4gICAgYnVpbGRQcm9ncmFtOiBmdW5jdGlvbiAoX2dsLCBzaGFkZXIsIHZlcnRleFNoYWRlckNvZGUsIGZyYWdtZW50U2hhZGVyQ29kZSkge1xyXG4gICAgICAgIHZhciB2ZXJ0ZXhTaGFkZXIgPSBfZ2wuY3JlYXRlU2hhZGVyKF9nbC5WRVJURVhfU0hBREVSKTtcclxuICAgICAgICB2YXIgcHJvZ3JhbSA9IF9nbC5jcmVhdGVQcm9ncmFtKCk7XHJcblxyXG4gICAgICAgIF9nbC5zaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJDb2RlKTtcclxuICAgICAgICBfZ2wuY29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpO1xyXG5cclxuICAgICAgICB2YXIgZnJhZ21lbnRTaGFkZXIgPSBfZ2wuY3JlYXRlU2hhZGVyKF9nbC5GUkFHTUVOVF9TSEFERVIpO1xyXG4gICAgICAgIF9nbC5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyQ29kZSk7XHJcbiAgICAgICAgX2dsLmNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpO1xyXG5cclxuICAgICAgICB2YXIgbXNnID0gY2hlY2tTaGFkZXJFcnJvck1zZyhfZ2wsIHZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyQ29kZSk7XHJcbiAgICAgICAgaWYgKG1zZykge1xyXG4gICAgICAgICAgICByZXR1cm4gbXNnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtc2cgPSBjaGVja1NoYWRlckVycm9yTXNnKF9nbCwgZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyQ29kZSk7XHJcbiAgICAgICAgaWYgKG1zZykge1xyXG4gICAgICAgICAgICByZXR1cm4gbXNnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgX2dsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpO1xyXG4gICAgICAgIF9nbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpO1xyXG4gICAgICAgIC8vIEZvcmNlIHRoZSBwb3NpdGlvbiBiaW5kIHRvIGxvY2F0aW9uIDA7XHJcbiAgICAgICAgaWYgKHNoYWRlci5hdHRyaWJ1dGVTZW1hbnRpY3NbJ1BPU0lUSU9OJ10pIHtcclxuICAgICAgICAgICAgX2dsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAwLCBzaGFkZXIuYXR0cmlidXRlU2VtYW50aWNzWydQT1NJVElPTiddLnN5bWJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBFbHNlIGNob29zZSBhbiBhdHRyaWJ1dGUgYW5kIGJpbmQgdG8gbG9jYXRpb24gMDtcclxuICAgICAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpO1xyXG4gICAgICAgICAgICBfZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDAsIGtleXNbMF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgX2dsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xyXG5cclxuICAgICAgICBfZ2wuZGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcik7XHJcbiAgICAgICAgX2dsLmRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb2dyYW0gPSBwcm9ncmFtO1xyXG5cclxuICAgICAgICAvLyBTYXZlIGNvZGUuXHJcbiAgICAgICAgdGhpcy52ZXJ0ZXhDb2RlID0gdmVydGV4U2hhZGVyQ29kZTtcclxuICAgICAgICB0aGlzLmZyYWdtZW50Q29kZSA9IGZyYWdtZW50U2hhZGVyQ29kZTtcclxuXHJcbiAgICAgICAgaWYgKCFfZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBfZ2wuTElOS19TVEFUVVMpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnQ291bGQgbm90IGxpbmsgcHJvZ3JhbVxcbicgKyBfZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDYWNoZSB1bmlmb3JtIGxvY2F0aW9uc1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2hhZGVyLnVuaWZvcm1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtU3ltYm9sID0gc2hhZGVyLnVuaWZvcm1zW2ldO1xyXG4gICAgICAgICAgICB0aGlzLl9sb2NhdGlvbnNbdW5pZm9ybVN5bWJvbF0gPSBfZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIHVuaWZvcm1TeW1ib2wpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgR0xQcm9ncmFtOyIsImltcG9ydCBHTFByb2dyYW0gZnJvbSAnLi9HTFByb2dyYW0nO1xyXG5cclxudmFyIGxvb3BSZWdleCA9IC9mb3JcXHMqP1xcKGludFxccyo/X2lkeF9cXHMqXFw9XFxzKihbXFx3LV0rKVxcO1xccypfaWR4X1xccyo8XFxzKihbXFx3LV0rKTtcXHMqX2lkeF9cXHMqXFwrXFwrXFxzKlxcKVxccypcXHtcXHsoW1xcc1xcU10rPykoPz1cXH1cXH0pXFx9XFx9L2c7XHJcblxyXG5mdW5jdGlvbiB1bnJvbGxMb29wKHNoYWRlclN0ciwgZGVmaW5lcywgbGlnaHRzTnVtYmVycykge1xyXG4gICAgLy8gTG9vcCB1bnJvbGwgZnJvbSB0aHJlZS5qcywgaHR0cHM6Ly9naXRodWIuY29tL21yZG9vYi90aHJlZS5qcy9ibG9iL21hc3Rlci9zcmMvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUHJvZ3JhbS5qcyNMMTc1XHJcbiAgICAvLyBJbiBzb21lIGNhc2UgbGlrZSBzaGFkb3dNYXAgaW4gbG9vcCB1c2UgJ2knIHRvIGluZGV4IHZhbHVlIG11Y2ggc2xvd2VyLlxyXG5cclxuICAgIC8vIExvb3AgdXNlIF9pZHhfIGFuZCBpbmNyZWFzZWQgd2l0aCBfaWR4XysrIHdpbGwgYmUgdW5yb2xsZWRcclxuICAgIC8vIFVzZSB7eyB9fSB0byBtYXRjaCB0aGUgcGFpciBzbyB0aGUgaWYgc3RhdGVtZW50IHdpbGwgbm90IGJlIGFmZmVjdGVkXHJcbiAgICAvLyBXcml0ZSBsaWtlIGZvbGxvd2luZ1xyXG4gICAgLy8gZm9yIChpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IDQ7IF9pZHhfKyspIHt7XHJcbiAgICAvLyAgICAgdmVjMyBjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlc1tfaWR4X10sIHV2KS5yZ2I7XHJcbiAgICAvLyB9fVxyXG4gICAgZnVuY3Rpb24gcmVwbGFjZShtYXRjaCwgc3RhcnQsIGVuZCwgc25pcHBldCkge1xyXG4gICAgICAgIHZhciB1bnJvbGwgPSAnJztcclxuICAgICAgICAvLyBUcnkgdG8gdHJlYXQgYXMgZGVmaW5lXHJcbiAgICAgICAgaWYgKGlzTmFOKHN0YXJ0KSkge1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgaW4gZGVmaW5lcykge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQgPSBkZWZpbmVzW3N0YXJ0XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gbGlnaHROdW1iZXJEZWZpbmVzW3N0YXJ0XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNOYU4oZW5kKSkge1xyXG4gICAgICAgICAgICBpZiAoZW5kIGluIGRlZmluZXMpIHtcclxuICAgICAgICAgICAgICAgIGVuZCA9IGRlZmluZXNbZW5kXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVuZCA9IGxpZ2h0TnVtYmVyRGVmaW5lc1tlbmRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE8gRXJyb3IgY2hlY2tpbmdcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaWR4ID0gcGFyc2VJbnQoc3RhcnQpOyBpZHggPCBwYXJzZUludChlbmQpOyBpZHgrKykge1xyXG4gICAgICAgICAgICAvLyBQRU5ESU5HIEFkZCBzY29wZT9cclxuICAgICAgICAgICAgdW5yb2xsICs9ICd7J1xyXG4gICAgICAgICAgICAgICAgKyBzbmlwcGV0XHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL2Zsb2F0XFxzKlxcKFxccypfaWR4X1xccypcXCkvZywgaWR4LnRvRml4ZWQoMSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL19pZHhfL2csIGlkeClcclxuICAgICAgICAgICAgKyAnfSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdW5yb2xsO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBsaWdodE51bWJlckRlZmluZXMgPSB7fTtcclxuICAgIGZvciAodmFyIGxpZ2h0VHlwZSBpbiBsaWdodHNOdW1iZXJzKSB7XHJcbiAgICAgICAgbGlnaHROdW1iZXJEZWZpbmVzW2xpZ2h0VHlwZSArICdfQ09VTlQnXSA9IGxpZ2h0c051bWJlcnNbbGlnaHRUeXBlXTtcclxuICAgIH1cclxuICAgIHJldHVybiBzaGFkZXJTdHIucmVwbGFjZShsb29wUmVnZXgsIHJlcGxhY2UpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXREZWZpbmVDb2RlKGRlZmluZXMsIGxpZ2h0c051bWJlcnMsIGVuYWJsZWRUZXh0dXJlcykge1xyXG4gICAgdmFyIGRlZmluZVN0ciA9IFtdO1xyXG4gICAgaWYgKGxpZ2h0c051bWJlcnMpIHtcclxuICAgICAgICBmb3IgKHZhciBsaWdodFR5cGUgaW4gbGlnaHRzTnVtYmVycykge1xyXG4gICAgICAgICAgICB2YXIgY291bnQgPSBsaWdodHNOdW1iZXJzW2xpZ2h0VHlwZV07XHJcbiAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGRlZmluZVN0ci5wdXNoKCcjZGVmaW5lICcgKyBsaWdodFR5cGUudG9VcHBlckNhc2UoKSArICdfQ09VTlQgJyArIGNvdW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChlbmFibGVkVGV4dHVyZXMpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuYWJsZWRUZXh0dXJlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgc3ltYm9sID0gZW5hYmxlZFRleHR1cmVzW2ldO1xyXG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaCgnI2RlZmluZSAnICsgc3ltYm9sLnRvVXBwZXJDYXNlKCkgKyAnX0VOQUJMRUQnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBDdXN0b20gRGVmaW5lc1xyXG4gICAgZm9yICh2YXIgc3ltYm9sIGluIGRlZmluZXMpIHtcclxuICAgICAgICB2YXIgdmFsdWUgPSBkZWZpbmVzW3N5bWJvbF07XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGRlZmluZVN0ci5wdXNoKCcjZGVmaW5lICcgKyBzeW1ib2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaCgnI2RlZmluZSAnICsgc3ltYm9sICsgJyAnICsgdmFsdWUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlZmluZVN0ci5qb2luKCdcXG4nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uQ29kZShleHRzKSB7XHJcbiAgICAvLyBFeHRlbnNpb24gZGVjbGFyYXRpb24gbXVzdCBiZWZvcmUgYWxsIG5vbi1wcmVwcm9jZXNzb3IgY29kZXNcclxuICAgIC8vIFRPRE8gdmVydGV4ID8gZXh0ZW5zaW9uIGVudW0gP1xyXG4gICAgdmFyIGV4dGVuc2lvblN0ciA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZXh0ZW5zaW9uU3RyLnB1c2goJyNleHRlbnNpb24gR0xfJyArIGV4dHNbaV0gKyAnIDogZW5hYmxlJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXh0ZW5zaW9uU3RyLmpvaW4oJ1xcbicpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQcmVjaXNpb25Db2RlKHByZWNpc2lvbikge1xyXG4gICAgcmV0dXJuIFsncHJlY2lzaW9uJywgcHJlY2lzaW9uLCAnZmxvYXQnXS5qb2luKCcgJykgKyAnO1xcbidcclxuICAgICAgICArIFsncHJlY2lzaW9uJywgcHJlY2lzaW9uLCAnaW50J10uam9pbignICcpICsgJztcXG4nXHJcbiAgICAgICAgLy8gZGVwdGggdGV4dHVyZSBtYXkgaGF2ZSBwcmVjaXNpb24gcHJvYmxlbSBvbiBpT1MgZGV2aWNlLlxyXG4gICAgICAgICsgWydwcmVjaXNpb24nLCBwcmVjaXNpb24sICdzYW1wbGVyMkQnXS5qb2luKCcgJykgKyAnO1xcbic7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFByb2dyYW1NYW5hZ2VyKHJlbmRlcmVyKSB7XHJcbiAgICB0aGlzLl9yZW5kZXJlciA9IHJlbmRlcmVyO1xyXG4gICAgdGhpcy5fY2FjaGUgPSB7fTtcclxufVxyXG5cclxuUHJvZ3JhbU1hbmFnZXIucHJvdG90eXBlLmdldFByb2dyYW0gPSBmdW5jdGlvbiAocmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHNjZW5lKSB7XHJcbiAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuXHJcbiAgICB2YXIgaXNTa2lubmVkTWVzaCA9IHJlbmRlcmFibGUuaXNTa2lubmVkTWVzaCAmJiByZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2goKTtcclxuICAgIHZhciBrZXkgPSAncycgKyBtYXRlcmlhbC5zaGFkZXIuc2hhZGVySUQgKyAnbScgKyBtYXRlcmlhbC5nZXRQcm9ncmFtS2V5KCk7XHJcbiAgICBpZiAoc2NlbmUpIHtcclxuICAgICAgICBrZXkgKz0gJ3NlJyArIHNjZW5lLmdldFByb2dyYW1LZXkocmVuZGVyYWJsZS5saWdodEdyb3VwKTtcclxuICAgIH1cclxuICAgIGlmIChpc1NraW5uZWRNZXNoKSB7XHJcbiAgICAgICAga2V5ICs9ICcsJyArIHJlbmRlcmFibGUuam9pbnRzLmxlbmd0aDtcclxuICAgIH1cclxuICAgIHZhciBwcm9ncmFtID0gY2FjaGVba2V5XTtcclxuXHJcbiAgICBpZiAocHJvZ3JhbSkge1xyXG4gICAgICAgIHJldHVybiBwcm9ncmFtO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBsaWdodHNOdW1iZXJzID0gc2NlbmUgPyBzY2VuZS5nZXRMaWdodHNOdW1iZXJzKHJlbmRlcmFibGUubGlnaHRHcm91cCkgOiB7fTtcclxuICAgIHZhciByZW5kZXJlciA9IHRoaXMuX3JlbmRlcmVyO1xyXG4gICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgdmFyIGVuYWJsZWRUZXh0dXJlcyA9IG1hdGVyaWFsLmdldEVuYWJsZWRUZXh0dXJlcygpO1xyXG4gICAgdmFyIHNraW5EZWZpbmVDb2RlID0gJyc7XHJcbiAgICBpZiAoaXNTa2lubmVkTWVzaCkge1xyXG4gICAgICAgIHZhciBza2luRGVmaW5lcyA9IHtcclxuICAgICAgICAgICAgU0tJTk5JTkc6IG51bGwsXHJcbiAgICAgICAgICAgIEpPSU5UX0NPVU5UOiByZW5kZXJhYmxlLmpvaW50cy5sZW5ndGhcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChyZW5kZXJhYmxlLmpvaW50cy5sZW5ndGggPiByZW5kZXJlci5nZXRNYXhKb2ludE51bWJlcigpKSB7XHJcbiAgICAgICAgICAgIHNraW5EZWZpbmVzLlVTRV9TS0lOX01BVFJJQ0VTX1RFWFRVUkUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPIEFkZCBza2lubmluZyBjb2RlP1xyXG4gICAgICAgIHNraW5EZWZpbmVDb2RlID0gJ1xcbicgKyBnZXREZWZpbmVDb2RlKHNraW5EZWZpbmVzKSArICdcXG4nO1xyXG4gICAgfVxyXG4gICAgLy8gVE9ETyBPcHRpbWl6ZSBrZXkgZ2VuZXJhdGlvblxyXG4gICAgLy8gVkVSVEVYXHJcbiAgICB2YXIgdmVydGV4RGVmaW5lU3RyID0gc2tpbkRlZmluZUNvZGUgKyBnZXREZWZpbmVDb2RlKG1hdGVyaWFsLnZlcnRleERlZmluZXMsIGxpZ2h0c051bWJlcnMsIGVuYWJsZWRUZXh0dXJlcyk7XHJcbiAgICAvLyBGUkFHTUVOVFxyXG4gICAgdmFyIGZyYWdtZW50RGVmaW5lU3RyID0gc2tpbkRlZmluZUNvZGUgKyBnZXREZWZpbmVDb2RlKG1hdGVyaWFsLmZyYWdtZW50RGVmaW5lcywgbGlnaHRzTnVtYmVycywgZW5hYmxlZFRleHR1cmVzKTtcclxuXHJcbiAgICB2YXIgdmVydGV4Q29kZSA9IHZlcnRleERlZmluZVN0ciArICdcXG4nICsgbWF0ZXJpYWwuc2hhZGVyLnZlcnRleDtcclxuXHJcbiAgICB2YXIgZXh0ZW5zaW9ucyA9IFtcclxuICAgICAgICAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyxcclxuICAgICAgICAnRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCdcclxuICAgIF0uZmlsdGVyKGZ1bmN0aW9uIChleHQpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oZXh0KSAhPSBudWxsO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGV4dGVuc2lvbnMuaW5kZXhPZignRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCcpID49IDApIHtcclxuICAgICAgICBmcmFnbWVudERlZmluZVN0ciArPSAnXFxuI2RlZmluZSBTVVBQT1JUX1RFWFRVUkVfTE9EJztcclxuICAgIH1cclxuICAgIGlmIChleHRlbnNpb25zLmluZGV4T2YoJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycpID49IDApIHtcclxuICAgICAgICBmcmFnbWVudERlZmluZVN0ciArPSAnXFxuI2RlZmluZSBTVVBQT1JUX1NUQU5EQVJEX0RFUklWQVRJVkVTJztcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZnJhZ21lbnRDb2RlID0gZ2V0RXh0ZW5zaW9uQ29kZShleHRlbnNpb25zKSArICdcXG4nXHJcbiAgICAgICAgKyBnZXRQcmVjaXNpb25Db2RlKG1hdGVyaWFsLnByZWNpc2lvbikgKyAnXFxuJ1xyXG4gICAgICAgICsgZnJhZ21lbnREZWZpbmVTdHIgKyAnXFxuJ1xyXG4gICAgICAgICsgbWF0ZXJpYWwuc2hhZGVyLmZyYWdtZW50O1xyXG5cclxuICAgIHZhciBmaW5hbFZlcnRleENvZGUgPSB1bnJvbGxMb29wKHZlcnRleENvZGUsIG1hdGVyaWFsLnZlcnRleERlZmluZXMsIGxpZ2h0c051bWJlcnMpO1xyXG4gICAgdmFyIGZpbmFsRnJhZ21lbnRDb2RlID0gdW5yb2xsTG9vcChmcmFnbWVudENvZGUsIG1hdGVyaWFsLmZyYWdtZW50RGVmaW5lcywgbGlnaHRzTnVtYmVycyk7XHJcblxyXG4gICAgdmFyIHByb2dyYW0gPSBuZXcgR0xQcm9ncmFtKCk7XHJcbiAgICBwcm9ncmFtLnVuaWZvcm1TZW1hbnRpY3MgPSBtYXRlcmlhbC5zaGFkZXIudW5pZm9ybVNlbWFudGljcztcclxuICAgIHByb2dyYW0uYXR0cmlidXRlcyA9IG1hdGVyaWFsLnNoYWRlci5hdHRyaWJ1dGVzO1xyXG4gICAgdmFyIGVycm9yTXNnID0gcHJvZ3JhbS5idWlsZFByb2dyYW0oX2dsLCBtYXRlcmlhbC5zaGFkZXIsIGZpbmFsVmVydGV4Q29kZSwgZmluYWxGcmFnbWVudENvZGUpO1xyXG4gICAgcHJvZ3JhbS5fX2Vycm9yID0gZXJyb3JNc2c7XHJcblxyXG4gICAgY2FjaGVba2V5XSA9IHByb2dyYW07XHJcblxyXG4gICAgcmV0dXJuIHByb2dyYW07XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQcm9ncmFtTWFuYWdlcjsiLCIvKipcclxuICogTWFpbmx5IGRvIHRoZSBwYXJzZSBhbmQgY29tcGlsZSBvZiBzaGFkZXIgc3RyaW5nXHJcbiAqIFN1cHBvcnQgc2hhZGVyIGNvZGUgY2h1bmsgaW1wb3J0IGFuZCBleHBvcnRcclxuICogU3VwcG9ydCBzaGFkZXIgc2VtYW50aWNzXHJcbiAqIGh0dHA6Ly93d3cubnZpZGlhLmNvbS9vYmplY3QvdXNpbmdfc2FzLmh0bWxcclxuICogaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9jb2xsYWRhMmpzb24vaXNzdWVzLzQ1XHJcbiAqL1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcblxyXG52YXIgdW5pZm9ybVJlZ2V4ID0gL3VuaWZvcm1cXHMrKGJvb2x8ZmxvYXR8aW50fHZlYzJ8dmVjM3x2ZWM0fGl2ZWMyfGl2ZWMzfGl2ZWM0fG1hdDJ8bWF0M3xtYXQ0fHNhbXBsZXIyRHxzYW1wbGVyQ3ViZSlcXHMrKFtcXHNcXFNdKj8pOy9nO1xyXG52YXIgYXR0cmlidXRlUmVnZXggPSAvYXR0cmlidXRlXFxzKyhmbG9hdHxpbnR8dmVjMnx2ZWMzfHZlYzQpXFxzKyhbXFxzXFxTXSo/KTsvZztcclxuLy8gT25seSBwYXJzZSBudW1iZXIgZGVmaW5lLlxyXG52YXIgZGVmaW5lUmVnZXggPSAvI2RlZmluZVxccysoXFx3Kyk/KFxccytbXFxkLS5dKyk/XFxzKjs/XFxzKlxcbi9nO1xyXG5cclxudmFyIHVuaWZvcm1UeXBlTWFwID0ge1xyXG4gICAgJ2Jvb2wnOiAnMWknLFxyXG4gICAgJ2ludCc6ICcxaScsXHJcbiAgICAnc2FtcGxlcjJEJzogJ3QnLFxyXG4gICAgJ3NhbXBsZXJDdWJlJzogJ3QnLFxyXG4gICAgJ2Zsb2F0JzogJzFmJyxcclxuICAgICd2ZWMyJzogJzJmJyxcclxuICAgICd2ZWMzJzogJzNmJyxcclxuICAgICd2ZWM0JzogJzRmJyxcclxuICAgICdpdmVjMic6ICcyaScsXHJcbiAgICAnaXZlYzMnOiAnM2knLFxyXG4gICAgJ2l2ZWM0JzogJzRpJyxcclxuICAgICdtYXQyJzogJ20yJyxcclxuICAgICdtYXQzJzogJ20zJyxcclxuICAgICdtYXQ0JzogJ200J1xyXG59O1xyXG5cclxuZnVuY3Rpb24gY3JlYXRlWmVyb0FycmF5KGxlbikge1xyXG4gICAgdmFyIGFyciA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGFycltpXSA9IDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyO1xyXG59XHJcblxyXG52YXIgdW5pZm9ybVZhbHVlQ29uc3RydWN0b3IgPSB7XHJcbiAgICAnYm9vbCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH0sXHJcbiAgICAnaW50JzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMDsgfSxcclxuICAgICdmbG9hdCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDA7IH0sXHJcbiAgICAnc2FtcGxlcjJEJzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVsbDsgfSxcclxuICAgICdzYW1wbGVyQ3ViZSc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH0sXHJcblxyXG4gICAgJ3ZlYzInOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoMik7IH0sXHJcbiAgICAndmVjMyc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSgzKTsgfSxcclxuICAgICd2ZWM0JzogZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlWmVyb0FycmF5KDQpOyB9LFxyXG5cclxuICAgICdpdmVjMic6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSgyKTsgfSxcclxuICAgICdpdmVjMyc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSgzKTsgfSxcclxuICAgICdpdmVjNCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSg0KTsgfSxcclxuXHJcbiAgICAnbWF0Mic6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSg0KTsgfSxcclxuICAgICdtYXQzJzogZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlWmVyb0FycmF5KDkpOyB9LFxyXG4gICAgJ21hdDQnOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoMTYpOyB9LFxyXG5cclxuICAgICdhcnJheSc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtdOyB9XHJcbn07XHJcblxyXG52YXIgYXR0cmlidXRlU2VtYW50aWNzID0gW1xyXG4gICAgJ1BPU0lUSU9OJyxcclxuICAgICdOT1JNQUwnLFxyXG4gICAgJ0JJTk9STUFMJyxcclxuICAgICdUQU5HRU5UJyxcclxuICAgICdURVhDT09SRCcsXHJcbiAgICAnVEVYQ09PUkRfMCcsXHJcbiAgICAnVEVYQ09PUkRfMScsXHJcbiAgICAnQ09MT1InLFxyXG4gICAgLy8gU2tpbm5pbmdcclxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi9ibG9iL21hc3Rlci9zcGVjaWZpY2F0aW9uL1JFQURNRS5tZCNzZW1hbnRpY3NcclxuICAgICdKT0lOVCcsXHJcbiAgICAnV0VJR0hUJ1xyXG5dO1xyXG52YXIgdW5pZm9ybVNlbWFudGljcyA9IFtcclxuICAgICdTS0lOX01BVFJJWCcsXHJcbiAgICAvLyBJbmZvcm1hdGlvbiBhYm91dCB2aWV3cG9ydFxyXG4gICAgJ1ZJRVdQT1JUX1NJWkUnLFxyXG4gICAgJ1ZJRVdQT1JUJyxcclxuICAgICdERVZJQ0VQSVhFTFJBVElPJyxcclxuICAgIC8vIFdpbmRvdyBzaXplIGZvciB3aW5kb3cgcmVsYXRpdmUgY29vcmRpbmF0ZVxyXG4gICAgLy8gaHR0cHM6Ly93d3cub3BlbmdsLm9yZy9zZGsvZG9jcy9tYW4vaHRtbC9nbF9GcmFnQ29vcmQueGh0bWxcclxuICAgICdXSU5ET1dfU0laRScsXHJcbiAgICAvLyBJbmZvbWF0aW9uIGFib3V0IGNhbWVyYVxyXG4gICAgJ05FQVInLFxyXG4gICAgJ0ZBUicsXHJcbiAgICAvLyBUaW1lXHJcbiAgICAnVElNRSdcclxuXTtcclxudmFyIG1hdHJpeFNlbWFudGljcyA9IFtcclxuICAgICdXT1JMRCcsXHJcbiAgICAnVklFVycsXHJcbiAgICAnUFJPSkVDVElPTicsXHJcbiAgICAnV09STERWSUVXJyxcclxuICAgICdWSUVXUFJPSkVDVElPTicsXHJcbiAgICAnV09STERWSUVXUFJPSkVDVElPTicsXHJcbiAgICAnV09STERJTlZFUlNFJyxcclxuICAgICdWSUVXSU5WRVJTRScsXHJcbiAgICAnUFJPSkVDVElPTklOVkVSU0UnLFxyXG4gICAgJ1dPUkxEVklFV0lOVkVSU0UnLFxyXG4gICAgJ1ZJRVdQUk9KRUNUSU9OSU5WRVJTRScsXHJcbiAgICAnV09STERWSUVXUFJPSkVDVElPTklOVkVSU0UnLFxyXG4gICAgJ1dPUkxEVFJBTlNQT1NFJyxcclxuICAgICdWSUVXVFJBTlNQT1NFJyxcclxuICAgICdQUk9KRUNUSU9OVFJBTlNQT1NFJyxcclxuICAgICdXT1JMRFZJRVdUUkFOU1BPU0UnLFxyXG4gICAgJ1ZJRVdQUk9KRUNUSU9OVFJBTlNQT1NFJyxcclxuICAgICdXT1JMRFZJRVdQUk9KRUNUSU9OVFJBTlNQT1NFJyxcclxuICAgICdXT1JMRElOVkVSU0VUUkFOU1BPU0UnLFxyXG4gICAgJ1ZJRVdJTlZFUlNFVFJBTlNQT1NFJyxcclxuICAgICdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRScsXHJcbiAgICAnV09STERWSUVXSU5WRVJTRVRSQU5TUE9TRScsXHJcbiAgICAnVklFV1BST0pFQ1RJT05JTlZFUlNFVFJBTlNQT1NFJyxcclxuICAgICdXT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRSdcclxuXTtcclxuXHJcbnZhciBhdHRyaWJ1dGVTaXplTWFwID0ge1xyXG4gICAgLy8gV2ViR0wgZG9lcyBub3Qgc3VwcG9ydCBpbnRlZ2VyIGF0dHJpYnV0ZXNcclxuICAgICd2ZWM0JzogNCxcclxuICAgICd2ZWMzJzogMyxcclxuICAgICd2ZWMyJzogMixcclxuICAgICdmbG9hdCc6IDFcclxufTtcclxuXHJcblxyXG52YXIgc2hhZGVySURDYWNoZSA9IHt9O1xyXG52YXIgc2hhZGVyQ29kZUNhY2hlID0ge307XHJcblxyXG5mdW5jdGlvbiBnZXRTaGFkZXJJRCh2ZXJ0ZXgsIGZyYWdtZW50KSB7XHJcbiAgICB2YXIga2V5ID0gJ3ZlcnRleDonICsgdmVydGV4ICsgJ2ZyYWdtZW50OicgKyBmcmFnbWVudDtcclxuICAgIGlmIChzaGFkZXJJRENhY2hlW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gc2hhZGVySURDYWNoZVtrZXldO1xyXG4gICAgfVxyXG4gICAgdmFyIGlkID0gdXRpbC5nZW5HVUlEKCk7XHJcbiAgICBzaGFkZXJJRENhY2hlW2tleV0gPSBpZDtcclxuXHJcbiAgICBzaGFkZXJDb2RlQ2FjaGVbaWRdID0ge1xyXG4gICAgICAgIHZlcnRleDogdmVydGV4LFxyXG4gICAgICAgIGZyYWdtZW50OiBmcmFnbWVudFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gaWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUNvbW1lbnQoY29kZSkge1xyXG4gICAgcmV0dXJuIGNvZGUucmVwbGFjZSgvWyBcXHRdKlxcL1xcLy4qXFxuL2csICcnICkgICAvLyByZW1vdmUgLy9cclxuICAgICAgICAucmVwbGFjZSgvWyBcXHRdKlxcL1xcKltcXHNcXFNdKj9cXCpcXC8vZywgJycgKTsgLy8gcmVtb3ZlIC8qICovXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxvZ1N5bnRheEVycm9yKCkge1xyXG4gICAgY29uc29sZS5lcnJvcignV3JvbmcgdW5pZm9ybS9hdHRyaWJ1dGVzIHN5bnRheCcpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZURlY2xhcmF0aW9ucyh0eXBlLCBsaW5lKSB7XHJcbiAgICB2YXIgc3BlcmF0b3JzUmVnZXhwID0gL1ssPVxcKFxcKTpdLztcclxuICAgIHZhciB0b2tlbnMgPSBsaW5lXHJcbiAgICAgICAgLy8gQ29udmVydCBgc3ltYm9sOiBbMSwyLDNdYCB0byBgc3ltYm9sOiB2ZWMzKDEsMiwzKWBcclxuICAgICAgICAucmVwbGFjZSgvOlxccypcXFtcXHMqKC4qKVxccypcXF0vZywgJz0nICsgdHlwZSArICcoJDEpJylcclxuICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCAnJylcclxuICAgICAgICAuc3BsaXQoLyg/PVssPVxcKFxcKTpdKS9nKTtcclxuXHJcbiAgICB2YXIgbmV3VG9rZW5zID0gW107XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0b2tlbnNbaV0ubWF0Y2goc3BlcmF0b3JzUmVnZXhwKSkge1xyXG4gICAgICAgICAgICBuZXdUb2tlbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHRva2Vuc1tpXS5jaGFyQXQoMCksXHJcbiAgICAgICAgICAgICAgICB0b2tlbnNbaV0uc2xpY2UoMSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG5ld1Rva2Vucy5wdXNoKHRva2Vuc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdG9rZW5zID0gbmV3VG9rZW5zO1xyXG5cclxuICAgIHZhciBUWVBFX1NZTUJPTCA9IDA7XHJcbiAgICB2YXIgVFlQRV9BU1NJR04gPSAxO1xyXG4gICAgdmFyIFRZUEVfVkVDID0gMjtcclxuICAgIHZhciBUWVBFX0FSUiA9IDM7XHJcbiAgICB2YXIgVFlQRV9TRU1BTlRJQyA9IDQ7XHJcbiAgICB2YXIgVFlQRV9OT1JNQUwgPSA1O1xyXG5cclxuICAgIHZhciBvcFR5cGUgPSBUWVBFX1NZTUJPTDtcclxuICAgIHZhciBkZWNsYXJhdGlvbnMgPSB7fTtcclxuICAgIHZhciBkZWNsYXJhdGlvblZhbHVlID0gbnVsbDtcclxuICAgIHZhciBjdXJyZW50RGVjbGFyYXRpb247XHJcblxyXG4gICAgYWRkU3ltYm9sKHRva2Vuc1swXSk7XHJcblxyXG4gICAgZnVuY3Rpb24gYWRkU3ltYm9sKHN5bWJvbCkge1xyXG4gICAgICAgIGlmICghc3ltYm9sKSB7XHJcbiAgICAgICAgICAgIGxvZ1N5bnRheEVycm9yKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBhcnJSZXN1bHQgPSBzeW1ib2wubWF0Y2goL1xcWyguKj8pXFxdLyk7XHJcbiAgICAgICAgY3VycmVudERlY2xhcmF0aW9uID0gc3ltYm9sLnJlcGxhY2UoL1xcWyguKj8pXFxdLywgJycpO1xyXG4gICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dID0ge307XHJcbiAgICAgICAgaWYgKGFyclJlc3VsdCkge1xyXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS5pc0FycmF5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0uYXJyYXlTaXplID0gYXJyUmVzdWx0WzFdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTtcclxuICAgICAgICBpZiAoIXRva2VuKSB7ICAgLy8gRW1wdHkgdG9rZW47XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodG9rZW4gPT09ICc9Jykge1xyXG4gICAgICAgICAgICBpZiAob3BUeXBlICE9PSBUWVBFX1NZTUJPTFxyXG4gICAgICAgICAgICAmJiBvcFR5cGUgIT09IFRZUEVfQVJSKSB7XHJcbiAgICAgICAgICAgICAgICBsb2dTeW50YXhFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3BUeXBlID0gVFlQRV9BU1NJR047XHJcblxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodG9rZW4gPT09ICc6Jykge1xyXG4gICAgICAgICAgICBvcFR5cGUgPSBUWVBFX1NFTUFOVElDO1xyXG5cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRva2VuID09PSAnLCcpIHtcclxuICAgICAgICAgICAgaWYgKG9wVHlwZSA9PT0gVFlQRV9WRUMpIHtcclxuICAgICAgICAgICAgICAgIGlmICghKGRlY2xhcmF0aW9uVmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dTeW50YXhFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25WYWx1ZS5wdXNoKCt0b2tlbnNbKytpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvcFR5cGUgPSBUWVBFX05PUk1BTDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRva2VuID09PSAnKScpIHtcclxuICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0udmFsdWUgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheShkZWNsYXJhdGlvblZhbHVlKTtcclxuICAgICAgICAgICAgZGVjbGFyYXRpb25WYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIG9wVHlwZSA9IFRZUEVfTk9STUFMO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodG9rZW4gPT09ICcoJykge1xyXG4gICAgICAgICAgICBpZiAob3BUeXBlICE9PSBUWVBFX1ZFQykge1xyXG4gICAgICAgICAgICAgICAgbG9nU3ludGF4RXJyb3IoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghKGRlY2xhcmF0aW9uVmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpIHtcclxuICAgICAgICAgICAgICAgIGxvZ1N5bnRheEVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWNsYXJhdGlvblZhbHVlLnB1c2goK3Rva2Vuc1srK2ldKTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRva2VuLmluZGV4T2YoJ3ZlYycpID49IDApIHtcclxuICAgICAgICAgICAgaWYgKG9wVHlwZSAhPT0gVFlQRV9BU1NJR05cclxuICAgICAgICAgICAgLy8gQ29tcGF0aXRhYmxlIHdpdGggb2xkIHN5bnRheCBgc3ltYm9sOiBbMSwyLDNdYFxyXG4gICAgICAgICAgICAmJiBvcFR5cGUgIT09IFRZUEVfU0VNQU5USUMpIHtcclxuICAgICAgICAgICAgICAgIGxvZ1N5bnRheEVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcFR5cGUgPSBUWVBFX1ZFQztcclxuICAgICAgICAgICAgZGVjbGFyYXRpb25WYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob3BUeXBlID09PSBUWVBFX0FTU0lHTikge1xyXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS52YWx1ZSA9IHRva2VuID09PSAndHJ1ZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS52YWx1ZSA9IHBhcnNlRmxvYXQodG9rZW4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob3BUeXBlID09PSBUWVBFX1NFTUFOVElDKSB7XHJcbiAgICAgICAgICAgIHZhciBzZW1hbnRpYyA9IHRva2VuO1xyXG4gICAgICAgICAgICBpZiAoYXR0cmlidXRlU2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDBcclxuICAgICAgICAgICAgICAgIHx8IHVuaWZvcm1TZW1hbnRpY3MuaW5kZXhPZihzZW1hbnRpYykgPj0gMFxyXG4gICAgICAgICAgICAgICAgfHwgbWF0cml4U2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDBcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS5zZW1hbnRpYyA9IHNlbWFudGljO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHNlbWFudGljID09PSAnaWdub3JlJyB8fCBzZW1hbnRpYyA9PT0gJ3VuY29uZmlndXJhYmxlJykge1xyXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0uaWdub3JlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBwYXJzZSBhcyBhIGRlZmF1bHQgdHZhbHVlLlxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdib29sJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dLnZhbHVlID0gc2VtYW50aWMgPT09ICd0cnVlJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dLnZhbHVlID0gcGFyc2VGbG9hdChzZW1hbnRpYyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0cmVhdCBhcyBzeW1ib2wuXHJcbiAgICAgICAgYWRkU3ltYm9sKHRva2VuKTtcclxuICAgICAgICBvcFR5cGUgPSBUWVBFX1NZTUJPTDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGVjbGFyYXRpb25zO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKiBAYWxpYXMgY2xheS5TaGFkZXJcclxuICogQHBhcmFtIHtzdHJpbmd9IHZlcnRleFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZnJhZ21lbnRcclxuICogQGV4YW1wbGVcclxuICogLy8gQ3JlYXRlIGEgcGhvbmcgc2hhZGVyXHJcbiAqIHZhciBzaGFkZXIgPSBuZXcgY2xheS5TaGFkZXIoXHJcbiAqICAgICAgY2xheS5TaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkLnZlcnRleCcpLFxyXG4gKiAgICAgIGNsYXkuU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZC5mcmFnbWVudCcpXHJcbiAqICk7XHJcbiAqL1xyXG5mdW5jdGlvbiBTaGFkZXIodmVydGV4LCBmcmFnbWVudCkge1xyXG4gICAgLy8gRmlyc3QgYXJndW1lbnQgY2FuIGJlIHsgdmVydGV4LCBmcmFnbWVudCB9XHJcbiAgICBpZiAodHlwZW9mIHZlcnRleCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICBmcmFnbWVudCA9IHZlcnRleC5mcmFnbWVudDtcclxuICAgICAgICB2ZXJ0ZXggPSB2ZXJ0ZXgudmVydGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHZlcnRleCA9IHJlbW92ZUNvbW1lbnQodmVydGV4KTtcclxuICAgIGZyYWdtZW50ID0gcmVtb3ZlQ29tbWVudChmcmFnbWVudCk7XHJcblxyXG4gICAgdGhpcy5fc2hhZGVySUQgPSBnZXRTaGFkZXJJRCh2ZXJ0ZXgsIGZyYWdtZW50KTtcclxuXHJcbiAgICB0aGlzLl92ZXJ0ZXhDb2RlID0gU2hhZGVyLnBhcnNlSW1wb3J0KHZlcnRleCk7XHJcbiAgICB0aGlzLl9mcmFnbWVudENvZGUgPSBTaGFkZXIucGFyc2VJbXBvcnQoZnJhZ21lbnQpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXR0cmlidXRlU2VtYW50aWNzID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLm1hdHJpeFNlbWFudGljcyA9IHt9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy51bmlmb3JtU2VtYW50aWNzID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLm1hdHJpeFNlbWFudGljS2V5cyA9IFtdO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy51bmlmb3JtVGVtcGxhdGVzID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSB7fTtcclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMudGV4dHVyZXMgPSB7fTtcclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMudmVydGV4RGVmaW5lcyA9IHt9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy5mcmFnbWVudERlZmluZXMgPSB7fTtcclxuXHJcbiAgICB0aGlzLl9wYXJzZUF0dHJpYnV0ZXMoKTtcclxuICAgIHRoaXMuX3BhcnNlVW5pZm9ybXMoKTtcclxuICAgIHRoaXMuX3BhcnNlRGVmaW5lcygpO1xyXG59XHJcblxyXG5TaGFkZXIucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBTaGFkZXIsXHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgbmV3IHVuaWZvcm0gaW5zdGFuY2UgZm9yIG1hdGVyaWFsXHJcbiAgICBjcmVhdGVVbmlmb3JtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB1bmlmb3JtcyA9IHt9O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gdGhpcy51bmlmb3JtVGVtcGxhdGVzKXtcclxuICAgICAgICAgICAgdmFyIHVuaWZvcm1UcGwgPSB0aGlzLnVuaWZvcm1UZW1wbGF0ZXNbc3ltYm9sXTtcclxuICAgICAgICAgICAgdW5pZm9ybXNbc3ltYm9sXSA9IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IHVuaWZvcm1UcGwudHlwZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB1bmlmb3JtVHBsLnZhbHVlKClcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1bmlmb3JtcztcclxuICAgIH0sXHJcblxyXG4gICAgX3BhcnNlSW1wb3J0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fdmVydGV4Q29kZSA9IFNoYWRlci5wYXJzZUltcG9ydCh0aGlzLnZlcnRleCk7XHJcbiAgICAgICAgdGhpcy5fZnJhZ21lbnRDb2RlID0gU2hhZGVyLnBhcnNlSW1wb3J0KHRoaXMuZnJhZ21lbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfYWRkU2VtYW50aWNVbmlmb3JtOiBmdW5jdGlvbiAoc3ltYm9sLCB1bmlmb3JtVHlwZSwgc2VtYW50aWMpIHtcclxuICAgICAgICAvLyBUaGlzIGNhc2UgaXMgb25seSBmb3IgU0tJTl9NQVRSSVhcclxuICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZVNlbWFudGljcy5pbmRleE9mKHNlbWFudGljKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlU2VtYW50aWNzW3NlbWFudGljXSA9IHtcclxuICAgICAgICAgICAgICAgIHN5bWJvbDogc3ltYm9sLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdW5pZm9ybVR5cGVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobWF0cml4U2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDApIHtcclxuICAgICAgICAgICAgdmFyIGlzVHJhbnNwb3NlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBzZW1hbnRpY05vVHJhbnNwb3NlID0gc2VtYW50aWM7XHJcbiAgICAgICAgICAgIGlmIChzZW1hbnRpYy5tYXRjaCgvVFJBTlNQT1NFJC8pKSB7XHJcbiAgICAgICAgICAgICAgICBpc1RyYW5zcG9zZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBzZW1hbnRpY05vVHJhbnNwb3NlID0gc2VtYW50aWMuc2xpY2UoMCwgLTkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubWF0cml4U2VtYW50aWNzW3NlbWFudGljXSA9IHtcclxuICAgICAgICAgICAgICAgIHN5bWJvbDogc3ltYm9sLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdW5pZm9ybVR5cGUsXHJcbiAgICAgICAgICAgICAgICBpc1RyYW5zcG9zZTogaXNUcmFuc3Bvc2UsXHJcbiAgICAgICAgICAgICAgICBzZW1hbnRpY05vVHJhbnNwb3NlOiBzZW1hbnRpY05vVHJhbnNwb3NlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHVuaWZvcm1TZW1hbnRpY3MuaW5kZXhPZihzZW1hbnRpYykgPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1TZW1hbnRpY3Nbc2VtYW50aWNdID0ge1xyXG4gICAgICAgICAgICAgICAgc3ltYm9sOiBzeW1ib2wsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB1bmlmb3JtVHlwZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2FkZE1hdGVyaWFsVW5pZm9ybTogZnVuY3Rpb24gKHN5bWJvbCwgdHlwZSwgdW5pZm9ybVR5cGUsIGRlZmF1bHRWYWx1ZUZ1bmMsIGlzQXJyYXksIG1hdGVyaWFsVW5pZm9ybXMpIHtcclxuICAgICAgICBtYXRlcmlhbFVuaWZvcm1zW3N5bWJvbF0gPSB7XHJcbiAgICAgICAgICAgIHR5cGU6IHVuaWZvcm1UeXBlLFxyXG4gICAgICAgICAgICB2YWx1ZTogaXNBcnJheSA/IHVuaWZvcm1WYWx1ZUNvbnN0cnVjdG9yWydhcnJheSddIDogKGRlZmF1bHRWYWx1ZUZ1bmMgfHwgdW5pZm9ybVZhbHVlQ29uc3RydWN0b3JbdHlwZV0pLFxyXG4gICAgICAgICAgICBzZW1hbnRpYzogbnVsbFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZVVuaWZvcm1zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHVuaWZvcm1zID0ge307XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHZhciBzaGFkZXJUeXBlID0gJ3ZlcnRleCc7XHJcbiAgICAgICAgdGhpcy5fdW5pZm9ybUxpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5fdmVydGV4Q29kZSA9IHRoaXMuX3ZlcnRleENvZGUucmVwbGFjZSh1bmlmb3JtUmVnZXgsIF91bmlmb3JtUGFyc2VyKTtcclxuICAgICAgICBzaGFkZXJUeXBlID0gJ2ZyYWdtZW50JztcclxuICAgICAgICB0aGlzLl9mcmFnbWVudENvZGUgPSB0aGlzLl9mcmFnbWVudENvZGUucmVwbGFjZSh1bmlmb3JtUmVnZXgsIF91bmlmb3JtUGFyc2VyKTtcclxuXHJcbiAgICAgICAgc2VsZi5tYXRyaXhTZW1hbnRpY0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLm1hdHJpeFNlbWFudGljcyk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIG1ha2VEZWZhdWx0VmFsdWVGdW5jKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPSBudWxsID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0gOiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gX3VuaWZvcm1QYXJzZXIoc3RyLCB0eXBlLCBjb250ZW50KSB7XHJcbiAgICAgICAgICAgIHZhciBkZWNsYXJlZFVuaWZvcm1zID0gcGFyc2VEZWNsYXJhdGlvbnModHlwZSwgY29udGVudCk7XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtTWFpblN0ciA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gZGVjbGFyZWRVbmlmb3Jtcykge1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtSW5mbyA9IGRlY2xhcmVkVW5pZm9ybXNbc3ltYm9sXTtcclxuICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpYyA9IHVuaWZvcm1JbmZvLnNlbWFudGljO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRtcFN0ciA9IHN5bWJvbDtcclxuICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtVHlwZSA9IHVuaWZvcm1UeXBlTWFwW3R5cGVdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZUZ1bmMgPSBtYWtlRGVmYXVsdFZhbHVlRnVuYyhkZWNsYXJlZFVuaWZvcm1zW3N5bWJvbF0udmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlY2xhcmVkVW5pZm9ybXNbc3ltYm9sXS5pc0FycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG1wU3RyICs9ICdbJyArIGRlY2xhcmVkVW5pZm9ybXNbc3ltYm9sXS5hcnJheVNpemUgKyAnXSc7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pZm9ybVR5cGUgKz0gJ3YnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHVuaWZvcm1NYWluU3RyLnB1c2godG1wU3RyKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZWxmLl91bmlmb3JtTGlzdC5wdXNoKHN5bWJvbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF1bmlmb3JtSW5mby5pZ25vcmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3NhbXBsZXIyRCcgfHwgdHlwZSA9PT0gJ3NhbXBsZXJDdWJlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXh0dXJlIGlzIGRlZmF1bHQgZGlzYWJsZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXh0dXJlc1tzeW1ib2xdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyVHlwZTogc2hhZGVyVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIFNob3VsZCBub3QgZGVjbGFyZSBtdWx0aXBsZSBzeW1ib2xzIGlmIGhhdmUgc2VtYW50aWMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZFNlbWFudGljVW5pZm9ybShzeW1ib2wsIHVuaWZvcm1UeXBlLCBzZW1hbnRpYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRNYXRlcmlhbFVuaWZvcm0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2wsIHR5cGUsIHVuaWZvcm1UeXBlLCBkZWZhdWx0VmFsdWVGdW5jLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbGFyZWRVbmlmb3Jtc1tzeW1ib2xdLmlzQXJyYXksIHVuaWZvcm1zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB1bmlmb3JtTWFpblN0ci5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICA/ICd1bmlmb3JtICcgKyB0eXBlICsgJyAnICsgdW5pZm9ybU1haW5TdHIuam9pbignLCcpICsgJztcXG4nIDogJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVuaWZvcm1UZW1wbGF0ZXMgPSB1bmlmb3JtcztcclxuICAgIH0sXHJcblxyXG4gICAgX3BhcnNlQXR0cmlidXRlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0ge307XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuX3ZlcnRleENvZGUgPSB0aGlzLl92ZXJ0ZXhDb2RlLnJlcGxhY2UoYXR0cmlidXRlUmVnZXgsIF9hdHRyaWJ1dGVQYXJzZXIpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBfYXR0cmlidXRlUGFyc2VyKHN0ciwgdHlwZSwgY29udGVudCkge1xyXG4gICAgICAgICAgICB2YXIgZGVjbGFyZWRBdHRyaWJ1dGVzID0gcGFyc2VEZWNsYXJhdGlvbnModHlwZSwgY29udGVudCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2l6ZSA9IGF0dHJpYnV0ZVNpemVNYXBbdHlwZV0gfHwgMTtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU1haW5TdHIgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIGRlY2xhcmVkQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlbWFudGljID0gZGVjbGFyZWRBdHRyaWJ1dGVzW3N5bWJvbF0uc2VtYW50aWM7XHJcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3N5bWJvbF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBDYW4gb25seSBiZSBmbG9hdFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdmbG9hdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICBzZW1hbnRpYzogc2VtYW50aWMgfHwgbnVsbFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gU2hvdWxkIG5vdCBkZWNsYXJlIG11bHRpcGxlIHN5bWJvbHMgaWYgaGF2ZSBzZW1hbnRpYy5cclxuICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVTZW1hbnRpY3MuaW5kZXhPZihzZW1hbnRpYykgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rb3duIHNlbWFudGljIFwiJyArIHNlbWFudGljICsgJ1wiJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmF0dHJpYnV0ZVNlbWFudGljc1tzZW1hbnRpY10gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2w6IHN5bWJvbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVNYWluU3RyLnB1c2goc3ltYm9sKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuICdhdHRyaWJ1dGUgJyArIHR5cGUgKyAnICcgKyBhdHRyaWJ1dGVNYWluU3RyLmpvaW4oJywnKSArICc7XFxuJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZURlZmluZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHNoYWRlclR5cGUgPSAndmVydGV4JztcclxuICAgICAgICB0aGlzLl92ZXJ0ZXhDb2RlID0gdGhpcy5fdmVydGV4Q29kZS5yZXBsYWNlKGRlZmluZVJlZ2V4LCBfZGVmaW5lUGFyc2VyKTtcclxuICAgICAgICBzaGFkZXJUeXBlID0gJ2ZyYWdtZW50JztcclxuICAgICAgICB0aGlzLl9mcmFnbWVudENvZGUgPSB0aGlzLl9mcmFnbWVudENvZGUucmVwbGFjZShkZWZpbmVSZWdleCwgX2RlZmluZVBhcnNlcik7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQYXJzZXIoc3RyLCBzeW1ib2wsIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhciBkZWZpbmVzID0gc2hhZGVyVHlwZSA9PT0gJ3ZlcnRleCcgPyBzZWxmLnZlcnRleERlZmluZXMgOiBzZWxmLmZyYWdtZW50RGVmaW5lcztcclxuICAgICAgICAgICAgaWYgKCFkZWZpbmVzW3N5bWJvbF0pIHsgLy8gSGF2ZW4ndCBiZWVuIGRlZmluZWQgYnkgdXNlclxyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lc1tzeW1ib2xdID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lc1tzeW1ib2xdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmluZXNbc3ltYm9sXSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGNhbiBwYXJzZSB0byBmbG9hdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChpc05hTihwYXJzZUZsb2F0KHZhbHVlKSkgPyB2YWx1ZS50cmltKCkgOiBwYXJzZUZsb2F0KHZhbHVlKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgc2hhZGVyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlNoYWRlcn1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgY29kZSA9IHNoYWRlckNvZGVDYWNoZVt0aGlzLl9zaGFkZXJJRF07XHJcbiAgICAgICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoY29kZS52ZXJ0ZXgsIGNvZGUuZnJhZ21lbnQpO1xyXG4gICAgICAgIHJldHVybiBzaGFkZXI7XHJcbiAgICB9XHJcbn07XHJcblxyXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZGVyLnByb3RvdHlwZSwgJ3NoYWRlcklEJywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhZGVySUQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZGVyLnByb3RvdHlwZSwgJ3ZlcnRleCcsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZlcnRleENvZGU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZGVyLnByb3RvdHlwZSwgJ2ZyYWdtZW50Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhZ21lbnRDb2RlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlci5wcm90b3R5cGUsICd1bmlmb3JtcycsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VuaWZvcm1MaXN0O1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG52YXIgaW1wb3J0UmVnZXggPSAvKEBpbXBvcnQpXFxzKihbMC05YS16QS1aX1xcLVxcLl0qKS9nO1xyXG5TaGFkZXIucGFyc2VJbXBvcnQgPSBmdW5jdGlvbiAoc2hhZGVyU3RyKSB7XHJcbiAgICBzaGFkZXJTdHIgPSBzaGFkZXJTdHIucmVwbGFjZShpbXBvcnRSZWdleCwgZnVuY3Rpb24gKHN0ciwgaW1wb3J0U3ltYm9sLCBpbXBvcnROYW1lKSB7XHJcbiAgICAgICAgdmFyIHN0ciA9IFNoYWRlci5zb3VyY2UoaW1wb3J0TmFtZSk7XHJcbiAgICAgICAgaWYgKHN0cikge1xyXG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwYXJzZVxyXG4gICAgICAgICAgICByZXR1cm4gU2hhZGVyLnBhcnNlSW1wb3J0KHN0cik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTaGFkZXIgY2h1bmsgXCInICsgaW1wb3J0TmFtZSArICdcIiBub3QgZXhpc3RlZCBpbiBsaWJyYXJ5Jyk7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBzaGFkZXJTdHI7XHJcbn07XHJcblxyXG52YXIgZXhwb3J0UmVnZXggPSAvKEBleHBvcnQpXFxzKihbMC05YS16QS1aX1xcLVxcLl0qKVxccypcXG4oW1xcc1xcU10qPylAZW5kL2c7XHJcblxyXG4vKipcclxuICogSW1wb3J0IHNoYWRlciBzb3VyY2VcclxuICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJTdHJcclxuICogQG1lbWJlck9mIGNsYXkuU2hhZGVyXHJcbiAqL1xyXG5TaGFkZXJbJ2ltcG9ydCddID0gZnVuY3Rpb24gKHNoYWRlclN0cikge1xyXG4gICAgc2hhZGVyU3RyLnJlcGxhY2UoZXhwb3J0UmVnZXgsIGZ1bmN0aW9uIChzdHIsIGV4cG9ydFN5bWJvbCwgZXhwb3J0TmFtZSwgY29kZSkge1xyXG4gICAgICAgIHZhciBjb2RlID0gY29kZS5yZXBsYWNlKC8oXltcXHNcXHRcXHhhMFxcdTMwMDBdKyl8KFtcXHUzMDAwXFx4YTBcXHNcXHRdK1xceDI0KS9nLCAnJyk7XHJcbiAgICAgICAgaWYgKGNvZGUpIHtcclxuICAgICAgICAgICAgdmFyIHBhcnRzID0gZXhwb3J0TmFtZS5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICB2YXIgb2JqID0gU2hhZGVyLmNvZGVzO1xyXG4gICAgICAgICAgICB2YXIgaSA9IDA7XHJcbiAgICAgICAgICAgIHZhciBrZXk7XHJcbiAgICAgICAgICAgIHdoaWxlIChpIDwgcGFydHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAga2V5ID0gcGFydHNbaSsrXTtcclxuICAgICAgICAgICAgICAgIGlmICghb2JqW2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb2JqID0gb2JqW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAga2V5ID0gcGFydHNbaV07XHJcbiAgICAgICAgICAgIG9ialtrZXldID0gY29kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvZGU7XHJcbiAgICB9KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBMaWJyYXJ5IHRvIHN0b3JlIGFsbCB0aGUgbG9hZGVkIHNoYWRlciBjb2Rlc1xyXG4gKiBAdHlwZSB7T2JqZWN0fVxyXG4gKiBAcmVhZE9ubHlcclxuICogQG1lbWJlck9mIGNsYXkuU2hhZGVyXHJcbiAqL1xyXG5TaGFkZXIuY29kZXMgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgc2hhZGVyIHNvdXJjZVxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICogQHJldHVybiB7c3RyaW5nfVxyXG4gKi9cclxuU2hhZGVyLnNvdXJjZSA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICB2YXIgcGFydHMgPSBuYW1lLnNwbGl0KCcuJyk7XHJcbiAgICB2YXIgb2JqID0gU2hhZGVyLmNvZGVzO1xyXG4gICAgdmFyIGkgPSAwO1xyXG4gICAgd2hpbGUgKG9iaiAmJiBpIDwgcGFydHMubGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IHBhcnRzW2krK107XHJcbiAgICAgICAgb2JqID0gb2JqW2tleV07XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAvLyBGSVhNRSBVc2UgZGVmYXVsdCBpbnN0ZWFkXHJcbiAgICAgICAgY29uc29sZS5lcnJvcignU2hhZGVyIFwiJyArIG5hbWUgKyAnXCIgbm90IGV4aXN0ZWQgaW4gbGlicmFyeScpO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiBvYmo7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTaGFkZXI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LnByZXoudmVydGV4XFxudW5pZm9ybSBtYXQ0IFdWUCA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdXYgOiBURVhDT09SRF8wO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA6IFsxLjAsIDEuMF07XFxudW5pZm9ybSB2ZWMyIHV2T2Zmc2V0IDogWzAuMCwgMC4wXTtcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzMgUCA9IHBvcztcXG4jaWZkZWYgU0tJTk5JTkdcXG4gQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuIFAgPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3MsIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSBXVlAgKiB2ZWM0KFAsIDEuMCk7XFxuIHZfVGV4Y29vcmQgPSB1diAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkucHJlei5mcmFnbWVudFxcbnVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuMDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52b2lkIG1haW4oKVxcbntcXG4gaWYgKGFscGhhQ3V0b2ZmID4gMC4wKSB7XFxuIGlmICh0ZXh0dXJlMkQoYWxwaGFNYXAsIHZfVGV4Y29vcmQpLmEgPD0gYWxwaGFDdXRvZmYpIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiB9XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLDAuMCwwLjAsMS4wKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHtHTE1BVF9FUFNJTE9OLCBHTE1BVF9BUlJBWV9UWVBFIH0gZnJvbSAnLi9jb21tb24nO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyA0eDQgTWF0cml4XHJcbiAqIEBuYW1lIG1hdDRcclxuICovXHJcblxyXG52YXIgbWF0NCA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0NFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bWF0NH0gYSBuZXcgNHg0IG1hdHJpeFxyXG4gKi9cclxubWF0NC5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgxNik7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMDtcclxuICAgIG91dFs1XSA9IDE7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDA7XHJcbiAgICBvdXRbOV0gPSAwO1xyXG4gICAgb3V0WzEwXSA9IDE7XHJcbiAgICBvdXRbMTFdID0gMDtcclxuICAgIG91dFsxMl0gPSAwO1xyXG4gICAgb3V0WzEzXSA9IDA7XHJcbiAgICBvdXRbMTRdID0gMDtcclxuICAgIG91dFsxNV0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDQgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gYSBuZXcgNHg0IG1hdHJpeFxyXG4gKi9cclxubWF0NC5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgxNik7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICBvdXRbOV0gPSBhWzldO1xyXG4gICAgb3V0WzEwXSA9IGFbMTBdO1xyXG4gICAgb3V0WzExXSA9IGFbMTFdO1xyXG4gICAgb3V0WzEyXSA9IGFbMTJdO1xyXG4gICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgb3V0WzE1XSA9IGFbMTVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0NCB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIG91dFszXSA9IGFbM107XHJcbiAgICBvdXRbNF0gPSBhWzRdO1xyXG4gICAgb3V0WzVdID0gYVs1XTtcclxuICAgIG91dFs2XSA9IGFbNl07XHJcbiAgICBvdXRbN10gPSBhWzddO1xyXG4gICAgb3V0WzhdID0gYVs4XTtcclxuICAgIG91dFs5XSA9IGFbOV07XHJcbiAgICBvdXRbMTBdID0gYVsxMF07XHJcbiAgICBvdXRbMTFdID0gYVsxMV07XHJcbiAgICBvdXRbMTJdID0gYVsxMl07XHJcbiAgICBvdXRbMTNdID0gYVsxM107XHJcbiAgICBvdXRbMTRdID0gYVsxNF07XHJcbiAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBhIG1hdDQgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMDtcclxuICAgIG91dFs1XSA9IDE7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDA7XHJcbiAgICBvdXRbOV0gPSAwO1xyXG4gICAgb3V0WzEwXSA9IDE7XHJcbiAgICBvdXRbMTFdID0gMDtcclxuICAgIG91dFsxMl0gPSAwO1xyXG4gICAgb3V0WzEzXSA9IDA7XHJcbiAgICBvdXRbMTRdID0gMDtcclxuICAgIG91dFsxNV0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXHJcbiAgICBpZiAob3V0ID09PSBhKSB7XHJcbiAgICAgICAgdmFyIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM10sXHJcbiAgICAgICAgICAgIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXHJcbiAgICAgICAgICAgIGEyMyA9IGFbMTFdO1xyXG5cclxuICAgICAgICBvdXRbMV0gPSBhWzRdO1xyXG4gICAgICAgIG91dFsyXSA9IGFbOF07XHJcbiAgICAgICAgb3V0WzNdID0gYVsxMl07XHJcbiAgICAgICAgb3V0WzRdID0gYTAxO1xyXG4gICAgICAgIG91dFs2XSA9IGFbOV07XHJcbiAgICAgICAgb3V0WzddID0gYVsxM107XHJcbiAgICAgICAgb3V0WzhdID0gYTAyO1xyXG4gICAgICAgIG91dFs5XSA9IGExMjtcclxuICAgICAgICBvdXRbMTFdID0gYVsxNF07XHJcbiAgICAgICAgb3V0WzEyXSA9IGEwMztcclxuICAgICAgICBvdXRbMTNdID0gYTEzO1xyXG4gICAgICAgIG91dFsxNF0gPSBhMjM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG91dFswXSA9IGFbMF07XHJcbiAgICAgICAgb3V0WzFdID0gYVs0XTtcclxuICAgICAgICBvdXRbMl0gPSBhWzhdO1xyXG4gICAgICAgIG91dFszXSA9IGFbMTJdO1xyXG4gICAgICAgIG91dFs0XSA9IGFbMV07XHJcbiAgICAgICAgb3V0WzVdID0gYVs1XTtcclxuICAgICAgICBvdXRbNl0gPSBhWzldO1xyXG4gICAgICAgIG91dFs3XSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFs4XSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzldID0gYVs2XTtcclxuICAgICAgICBvdXRbMTBdID0gYVsxMF07XHJcbiAgICAgICAgb3V0WzExXSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxMl0gPSBhWzNdO1xyXG4gICAgICAgIG91dFsxM10gPSBhWzddO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzExXTtcclxuICAgICAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnZlcnRzIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxyXG4gICAgICAgIGExMCA9IGFbNF0sIGExMSA9IGFbNV0sIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXHJcbiAgICAgICAgYTIwID0gYVs4XSwgYTIxID0gYVs5XSwgYTIyID0gYVsxMF0sIGEyMyA9IGFbMTFdLFxyXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF0sIGEzMyA9IGFbMTVdLFxyXG5cclxuICAgICAgICBiMDAgPSBhMDAgKiBhMTEgLSBhMDEgKiBhMTAsXHJcbiAgICAgICAgYjAxID0gYTAwICogYTEyIC0gYTAyICogYTEwLFxyXG4gICAgICAgIGIwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMCxcclxuICAgICAgICBiMDMgPSBhMDEgKiBhMTIgLSBhMDIgKiBhMTEsXHJcbiAgICAgICAgYjA0ID0gYTAxICogYTEzIC0gYTAzICogYTExLFxyXG4gICAgICAgIGIwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMixcclxuICAgICAgICBiMDYgPSBhMjAgKiBhMzEgLSBhMjEgKiBhMzAsXHJcbiAgICAgICAgYjA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwLFxyXG4gICAgICAgIGIwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMCxcclxuICAgICAgICBiMDkgPSBhMjEgKiBhMzIgLSBhMjIgKiBhMzEsXHJcbiAgICAgICAgYjEwID0gYTIxICogYTMzIC0gYTIzICogYTMxLFxyXG4gICAgICAgIGIxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMixcclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxyXG4gICAgICAgIGRldCA9IGIwMCAqIGIxMSAtIGIwMSAqIGIxMCArIGIwMiAqIGIwOSArIGIwMyAqIGIwOCAtIGIwNCAqIGIwNyArIGIwNSAqIGIwNjtcclxuXHJcbiAgICBpZiAoIWRldCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuICAgIG91dFswXSA9IChhMTEgKiBiMTEgLSBhMTIgKiBiMTAgKyBhMTMgKiBiMDkpICogZGV0O1xyXG4gICAgb3V0WzFdID0gKGEwMiAqIGIxMCAtIGEwMSAqIGIxMSAtIGEwMyAqIGIwOSkgKiBkZXQ7XHJcbiAgICBvdXRbMl0gPSAoYTMxICogYjA1IC0gYTMyICogYjA0ICsgYTMzICogYjAzKSAqIGRldDtcclxuICAgIG91dFszXSA9IChhMjIgKiBiMDQgLSBhMjEgKiBiMDUgLSBhMjMgKiBiMDMpICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGExMiAqIGIwOCAtIGExMCAqIGIxMSAtIGExMyAqIGIwNykgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoYTAwICogYjExIC0gYTAyICogYjA4ICsgYTAzICogYjA3KSAqIGRldDtcclxuICAgIG91dFs2XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xyXG4gICAgb3V0WzddID0gKGEyMCAqIGIwNSAtIGEyMiAqIGIwMiArIGEyMyAqIGIwMSkgKiBkZXQ7XHJcbiAgICBvdXRbOF0gPSAoYTEwICogYjEwIC0gYTExICogYjA4ICsgYTEzICogYjA2KSAqIGRldDtcclxuICAgIG91dFs5XSA9IChhMDEgKiBiMDggLSBhMDAgKiBiMTAgLSBhMDMgKiBiMDYpICogZGV0O1xyXG4gICAgb3V0WzEwXSA9IChhMzAgKiBiMDQgLSBhMzEgKiBiMDIgKyBhMzMgKiBiMDApICogZGV0O1xyXG4gICAgb3V0WzExXSA9IChhMjEgKiBiMDIgLSBhMjAgKiBiMDQgLSBhMjMgKiBiMDApICogZGV0O1xyXG4gICAgb3V0WzEyXSA9IChhMTEgKiBiMDcgLSBhMTAgKiBiMDkgLSBhMTIgKiBiMDYpICogZGV0O1xyXG4gICAgb3V0WzEzXSA9IChhMDAgKiBiMDkgLSBhMDEgKiBiMDcgKyBhMDIgKiBiMDYpICogZGV0O1xyXG4gICAgb3V0WzE0XSA9IChhMzEgKiBiMDEgLSBhMzAgKiBiMDMgLSBhMzIgKiBiMDApICogZGV0O1xyXG4gICAgb3V0WzE1XSA9IChhMjAgKiBiMDMgLSBhMjEgKiBiMDEgKyBhMjIgKiBiMDApICogZGV0O1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYWRqdWdhdGUgb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LmFkam9pbnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxyXG4gICAgICAgIGExMCA9IGFbNF0sIGExMSA9IGFbNV0sIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXHJcbiAgICAgICAgYTIwID0gYVs4XSwgYTIxID0gYVs5XSwgYTIyID0gYVsxMF0sIGEyMyA9IGFbMTFdLFxyXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF0sIGEzMyA9IGFbMTVdO1xyXG5cclxuICAgIG91dFswXSAgPSAgKGExMSAqIChhMjIgKiBhMzMgLSBhMjMgKiBhMzIpIC0gYTIxICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgKyBhMzEgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSk7XHJcbiAgICBvdXRbMV0gID0gLShhMDEgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMSAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMxICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMikpO1xyXG4gICAgb3V0WzJdICA9ICAoYTAxICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgLSBhMTEgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMSAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpKTtcclxuICAgIG91dFszXSAgPSAtKGEwMSAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpIC0gYTExICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMikgKyBhMjEgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XHJcbiAgICBvdXRbNF0gID0gLShhMTAgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMCAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpICsgYTMwICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikpO1xyXG4gICAgb3V0WzVdICA9ICAoYTAwICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjAgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMCAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpKTtcclxuICAgIG91dFs2XSAgPSAtKGEwMCAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpIC0gYTEwICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzAgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XHJcbiAgICBvdXRbN10gID0gIChhMDAgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSAtIGExMCAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpICsgYTIwICogKGEwMiAqIGExMyAtIGEwMyAqIGExMikpO1xyXG4gICAgb3V0WzhdICA9ICAoYTEwICogKGEyMSAqIGEzMyAtIGEyMyAqIGEzMSkgLSBhMjAgKiAoYTExICogYTMzIC0gYTEzICogYTMxKSArIGEzMCAqIChhMTEgKiBhMjMgLSBhMTMgKiBhMjEpKTtcclxuICAgIG91dFs5XSAgPSAtKGEwMCAqIChhMjEgKiBhMzMgLSBhMjMgKiBhMzEpIC0gYTIwICogKGEwMSAqIGEzMyAtIGEwMyAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTIzIC0gYTAzICogYTIxKSk7XHJcbiAgICBvdXRbMTBdID0gIChhMDAgKiAoYTExICogYTMzIC0gYTEzICogYTMxKSAtIGExMCAqIChhMDEgKiBhMzMgLSBhMDMgKiBhMzEpICsgYTMwICogKGEwMSAqIGExMyAtIGEwMyAqIGExMSkpO1xyXG4gICAgb3V0WzExXSA9IC0oYTAwICogKGExMSAqIGEyMyAtIGExMyAqIGEyMSkgLSBhMTAgKiAoYTAxICogYTIzIC0gYTAzICogYTIxKSArIGEyMCAqIChhMDEgKiBhMTMgLSBhMDMgKiBhMTEpKTtcclxuICAgIG91dFsxMl0gPSAtKGExMCAqIChhMjEgKiBhMzIgLSBhMjIgKiBhMzEpIC0gYTIwICogKGExMSAqIGEzMiAtIGExMiAqIGEzMSkgKyBhMzAgKiAoYTExICogYTIyIC0gYTEyICogYTIxKSk7XHJcbiAgICBvdXRbMTNdID0gIChhMDAgKiAoYTIxICogYTMyIC0gYTIyICogYTMxKSAtIGEyMCAqIChhMDEgKiBhMzIgLSBhMDIgKiBhMzEpICsgYTMwICogKGEwMSAqIGEyMiAtIGEwMiAqIGEyMSkpO1xyXG4gICAgb3V0WzE0XSA9IC0oYTAwICogKGExMSAqIGEzMiAtIGExMiAqIGEzMSkgLSBhMTAgKiAoYTAxICogYTMyIC0gYTAyICogYTMxKSArIGEzMCAqIChhMDEgKiBhMTIgLSBhMDIgKiBhMTEpKTtcclxuICAgIG91dFsxNV0gPSAgKGEwMCAqIChhMTEgKiBhMjIgLSBhMTIgKiBhMjEpIC0gYTEwICogKGEwMSAqIGEyMiAtIGEwMiAqIGEyMSkgKyBhMjAgKiAoYTAxICogYTEyIC0gYTAyICogYTExKSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cclxubWF0NC5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSwgYTAzID0gYVszXSxcclxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXSxcclxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdLCBhMzMgPSBhWzE1XSxcclxuXHJcbiAgICAgICAgYjAwID0gYTAwICogYTExIC0gYTAxICogYTEwLFxyXG4gICAgICAgIGIwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMCxcclxuICAgICAgICBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTAsXHJcbiAgICAgICAgYjAzID0gYTAxICogYTEyIC0gYTAyICogYTExLFxyXG4gICAgICAgIGIwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMSxcclxuICAgICAgICBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTIsXHJcbiAgICAgICAgYjA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwLFxyXG4gICAgICAgIGIwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMCxcclxuICAgICAgICBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzAsXHJcbiAgICAgICAgYjA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxLFxyXG4gICAgICAgIGIxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMSxcclxuICAgICAgICBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzI7XHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxyXG4gICAgcmV0dXJuIGIwMCAqIGIxMSAtIGIwMSAqIGIxMCArIGIwMiAqIGIwOSArIGIwMyAqIGIwOCAtIGIwNCAqIGIwNyArIGIwNSAqIGIwNjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ0J3NcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0NH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxyXG4gICAgICAgIGExMCA9IGFbNF0sIGExMSA9IGFbNV0sIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXHJcbiAgICAgICAgYTIwID0gYVs4XSwgYTIxID0gYVs5XSwgYTIyID0gYVsxMF0sIGEyMyA9IGFbMTFdLFxyXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF0sIGEzMyA9IGFbMTVdO1xyXG5cclxuICAgIC8vIENhY2hlIG9ubHkgdGhlIGN1cnJlbnQgbGluZSBvZiB0aGUgc2Vjb25kIG1hdHJpeFxyXG4gICAgdmFyIGIwICA9IGJbMF0sIGIxID0gYlsxXSwgYjIgPSBiWzJdLCBiMyA9IGJbM107XHJcbiAgICBvdXRbMF0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjAgKyBiMyphMzA7XHJcbiAgICBvdXRbMV0gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjEgKyBiMyphMzE7XHJcbiAgICBvdXRbMl0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjIgKyBiMyphMzI7XHJcbiAgICBvdXRbM10gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XHJcblxyXG4gICAgYjAgPSBiWzRdOyBiMSA9IGJbNV07IGIyID0gYls2XTsgYjMgPSBiWzddO1xyXG4gICAgb3V0WzRdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xyXG4gICAgb3V0WzVdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxICsgYjMqYTMxO1xyXG4gICAgb3V0WzZdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYjMqYTMyO1xyXG4gICAgb3V0WzddID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xyXG5cclxuICAgIGIwID0gYls4XTsgYjEgPSBiWzldOyBiMiA9IGJbMTBdOyBiMyA9IGJbMTFdO1xyXG4gICAgb3V0WzhdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xyXG4gICAgb3V0WzldID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxICsgYjMqYTMxO1xyXG4gICAgb3V0WzEwXSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMiArIGIzKmEzMjtcclxuICAgIG91dFsxMV0gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XHJcblxyXG4gICAgYjAgPSBiWzEyXTsgYjEgPSBiWzEzXTsgYjIgPSBiWzE0XTsgYjMgPSBiWzE1XTtcclxuICAgIG91dFsxMl0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjAgKyBiMyphMzA7XHJcbiAgICBvdXRbMTNdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxICsgYjMqYTMxO1xyXG4gICAgb3V0WzE0XSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMiArIGIzKmEzMjtcclxuICAgIG91dFsxNV0gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIGFmZmluZSBtYXQ0J3NcclxuICogQWRkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9waXNzYW5nXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQubXVsdGlwbHlBZmZpbmUgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLFxyXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF07XHJcblxyXG4gICAgLy8gQ2FjaGUgb25seSB0aGUgY3VycmVudCBsaW5lIG9mIHRoZSBzZWNvbmQgbWF0cml4XHJcbiAgICB2YXIgYjAgID0gYlswXSwgYjEgPSBiWzFdLCBiMiA9IGJbMl07XHJcbiAgICBvdXRbMF0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjA7XHJcbiAgICBvdXRbMV0gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjE7XHJcbiAgICBvdXRbMl0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjI7XHJcbiAgICAvLyBvdXRbM10gPSAwO1xyXG5cclxuICAgIGIwID0gYls0XTsgYjEgPSBiWzVdOyBiMiA9IGJbNl07XHJcbiAgICBvdXRbNF0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjA7XHJcbiAgICBvdXRbNV0gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjE7XHJcbiAgICBvdXRbNl0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjI7XHJcbiAgICAvLyBvdXRbN10gPSAwO1xyXG5cclxuICAgIGIwID0gYls4XTsgYjEgPSBiWzldOyBiMiA9IGJbMTBdO1xyXG4gICAgb3V0WzhdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwO1xyXG4gICAgb3V0WzldID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxO1xyXG4gICAgb3V0WzEwXSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMjtcclxuICAgIC8vIG91dFsxMV0gPSAwO1xyXG5cclxuICAgIGIwID0gYlsxMl07IGIxID0gYlsxM107IGIyID0gYlsxNF07XHJcbiAgICBvdXRbMTJdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYTMwO1xyXG4gICAgb3V0WzEzXSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGEzMTtcclxuICAgIG91dFsxNF0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjIgKyBhMzI7XHJcbiAgICAvLyBvdXRbMTVdID0gMTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQ0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbm1hdDQubXVsID0gbWF0NC5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDQubXVsdGlwbHlBZmZpbmV9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxubWF0NC5tdWxBZmZpbmUgPSBtYXQ0Lm11bHRpcGx5QWZmaW5lO1xyXG4vKipcclxuICogVHJhbnNsYXRlIGEgbWF0NCBieSB0aGUgZ2l2ZW4gdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHRyYW5zbGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgdmVjdG9yIHRvIHRyYW5zbGF0ZSBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHYpIHtcclxuICAgIHZhciB4ID0gdlswXSwgeSA9IHZbMV0sIHogPSB2WzJdLFxyXG4gICAgICAgIGEwMCwgYTAxLCBhMDIsIGEwMyxcclxuICAgICAgICBhMTAsIGExMSwgYTEyLCBhMTMsXHJcbiAgICAgICAgYTIwLCBhMjEsIGEyMiwgYTIzO1xyXG5cclxuICAgIGlmIChhID09PSBvdXQpIHtcclxuICAgICAgICBvdXRbMTJdID0gYVswXSAqIHggKyBhWzRdICogeSArIGFbOF0gKiB6ICsgYVsxMl07XHJcbiAgICAgICAgb3V0WzEzXSA9IGFbMV0gKiB4ICsgYVs1XSAqIHkgKyBhWzldICogeiArIGFbMTNdO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzJdICogeCArIGFbNl0gKiB5ICsgYVsxMF0gKiB6ICsgYVsxNF07XHJcbiAgICAgICAgb3V0WzE1XSA9IGFbM10gKiB4ICsgYVs3XSAqIHkgKyBhWzExXSAqIHogKyBhWzE1XTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYTAwID0gYVswXTsgYTAxID0gYVsxXTsgYTAyID0gYVsyXTsgYTAzID0gYVszXTtcclxuICAgICAgICBhMTAgPSBhWzRdOyBhMTEgPSBhWzVdOyBhMTIgPSBhWzZdOyBhMTMgPSBhWzddO1xyXG4gICAgICAgIGEyMCA9IGFbOF07IGEyMSA9IGFbOV07IGEyMiA9IGFbMTBdOyBhMjMgPSBhWzExXTtcclxuXHJcbiAgICAgICAgb3V0WzBdID0gYTAwOyBvdXRbMV0gPSBhMDE7IG91dFsyXSA9IGEwMjsgb3V0WzNdID0gYTAzO1xyXG4gICAgICAgIG91dFs0XSA9IGExMDsgb3V0WzVdID0gYTExOyBvdXRbNl0gPSBhMTI7IG91dFs3XSA9IGExMztcclxuICAgICAgICBvdXRbOF0gPSBhMjA7IG91dFs5XSA9IGEyMTsgb3V0WzEwXSA9IGEyMjsgb3V0WzExXSA9IGEyMztcclxuXHJcbiAgICAgICAgb3V0WzEyXSA9IGEwMCAqIHggKyBhMTAgKiB5ICsgYTIwICogeiArIGFbMTJdO1xyXG4gICAgICAgIG91dFsxM10gPSBhMDEgKiB4ICsgYTExICogeSArIGEyMSAqIHogKyBhWzEzXTtcclxuICAgICAgICBvdXRbMTRdID0gYTAyICogeCArIGExMiAqIHkgKyBhMjIgKiB6ICsgYVsxNF07XHJcbiAgICAgICAgb3V0WzE1XSA9IGEwMyAqIHggKyBhMTMgKiB5ICsgYTIzICogeiArIGFbMTVdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2NhbGVzIHRoZSBtYXQ0IGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7dmVjM30gdiB0aGUgdmVjMyB0byBzY2FsZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICoqL1xyXG5tYXQ0LnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICB2YXIgeCA9IHZbMF0sIHkgPSB2WzFdLCB6ID0gdlsyXTtcclxuXHJcbiAgICBvdXRbMF0gPSBhWzBdICogeDtcclxuICAgIG91dFsxXSA9IGFbMV0gKiB4O1xyXG4gICAgb3V0WzJdID0gYVsyXSAqIHg7XHJcbiAgICBvdXRbM10gPSBhWzNdICogeDtcclxuICAgIG91dFs0XSA9IGFbNF0gKiB5O1xyXG4gICAgb3V0WzVdID0gYVs1XSAqIHk7XHJcbiAgICBvdXRbNl0gPSBhWzZdICogeTtcclxuICAgIG91dFs3XSA9IGFbN10gKiB5O1xyXG4gICAgb3V0WzhdID0gYVs4XSAqIHo7XHJcbiAgICBvdXRbOV0gPSBhWzldICogejtcclxuICAgIG91dFsxMF0gPSBhWzEwXSAqIHo7XHJcbiAgICBvdXRbMTFdID0gYVsxMV0gKiB6O1xyXG4gICAgb3V0WzEyXSA9IGFbMTJdO1xyXG4gICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgb3V0WzE1XSA9IGFbMTVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0NCBieSB0aGUgZ2l2ZW4gYW5nbGVcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEBwYXJhbSB7dmVjM30gYXhpcyB0aGUgYXhpcyB0byByb3RhdGUgYXJvdW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkLCBheGlzKSB7XHJcbiAgICB2YXIgeCA9IGF4aXNbMF0sIHkgPSBheGlzWzFdLCB6ID0gYXhpc1syXSxcclxuICAgICAgICBsZW4gPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KSxcclxuICAgICAgICBzLCBjLCB0LFxyXG4gICAgICAgIGEwMCwgYTAxLCBhMDIsIGEwMyxcclxuICAgICAgICBhMTAsIGExMSwgYTEyLCBhMTMsXHJcbiAgICAgICAgYTIwLCBhMjEsIGEyMiwgYTIzLFxyXG4gICAgICAgIGIwMCwgYjAxLCBiMDIsXHJcbiAgICAgICAgYjEwLCBiMTEsIGIxMixcclxuICAgICAgICBiMjAsIGIyMSwgYjIyO1xyXG5cclxuICAgIGlmIChNYXRoLmFicyhsZW4pIDwgR0xNQVRfRVBTSUxPTikgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgIGxlbiA9IDEgLyBsZW47XHJcbiAgICB4ICo9IGxlbjtcclxuICAgIHkgKj0gbGVuO1xyXG4gICAgeiAqPSBsZW47XHJcblxyXG4gICAgcyA9IE1hdGguc2luKHJhZCk7XHJcbiAgICBjID0gTWF0aC5jb3MocmFkKTtcclxuICAgIHQgPSAxIC0gYztcclxuXHJcbiAgICBhMDAgPSBhWzBdOyBhMDEgPSBhWzFdOyBhMDIgPSBhWzJdOyBhMDMgPSBhWzNdO1xyXG4gICAgYTEwID0gYVs0XTsgYTExID0gYVs1XTsgYTEyID0gYVs2XTsgYTEzID0gYVs3XTtcclxuICAgIGEyMCA9IGFbOF07IGEyMSA9IGFbOV07IGEyMiA9IGFbMTBdOyBhMjMgPSBhWzExXTtcclxuXHJcbiAgICAvLyBDb25zdHJ1Y3QgdGhlIGVsZW1lbnRzIG9mIHRoZSByb3RhdGlvbiBtYXRyaXhcclxuICAgIGIwMCA9IHggKiB4ICogdCArIGM7IGIwMSA9IHkgKiB4ICogdCArIHogKiBzOyBiMDIgPSB6ICogeCAqIHQgLSB5ICogcztcclxuICAgIGIxMCA9IHggKiB5ICogdCAtIHogKiBzOyBiMTEgPSB5ICogeSAqIHQgKyBjOyBiMTIgPSB6ICogeSAqIHQgKyB4ICogcztcclxuICAgIGIyMCA9IHggKiB6ICogdCArIHkgKiBzOyBiMjEgPSB5ICogeiAqIHQgLSB4ICogczsgYjIyID0geiAqIHogKiB0ICsgYztcclxuXHJcbiAgICAvLyBQZXJmb3JtIHJvdGF0aW9uLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxyXG4gICAgb3V0WzBdID0gYTAwICogYjAwICsgYTEwICogYjAxICsgYTIwICogYjAyO1xyXG4gICAgb3V0WzFdID0gYTAxICogYjAwICsgYTExICogYjAxICsgYTIxICogYjAyO1xyXG4gICAgb3V0WzJdID0gYTAyICogYjAwICsgYTEyICogYjAxICsgYTIyICogYjAyO1xyXG4gICAgb3V0WzNdID0gYTAzICogYjAwICsgYTEzICogYjAxICsgYTIzICogYjAyO1xyXG4gICAgb3V0WzRdID0gYTAwICogYjEwICsgYTEwICogYjExICsgYTIwICogYjEyO1xyXG4gICAgb3V0WzVdID0gYTAxICogYjEwICsgYTExICogYjExICsgYTIxICogYjEyO1xyXG4gICAgb3V0WzZdID0gYTAyICogYjEwICsgYTEyICogYjExICsgYTIyICogYjEyO1xyXG4gICAgb3V0WzddID0gYTAzICogYjEwICsgYTEzICogYjExICsgYTIzICogYjEyO1xyXG4gICAgb3V0WzhdID0gYTAwICogYjIwICsgYTEwICogYjIxICsgYTIwICogYjIyO1xyXG4gICAgb3V0WzldID0gYTAxICogYjIwICsgYTExICogYjIxICsgYTIxICogYjIyO1xyXG4gICAgb3V0WzEwXSA9IGEwMiAqIGIyMCArIGExMiAqIGIyMSArIGEyMiAqIGIyMjtcclxuICAgIG91dFsxMV0gPSBhMDMgKiBiMjAgKyBhMTMgKiBiMjEgKyBhMjMgKiBiMjI7XHJcblxyXG4gICAgaWYgKGEgIT09IG91dCkgeyAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCBsYXN0IHJvd1xyXG4gICAgICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgICAgICBvdXRbMTNdID0gYVsxM107XHJcbiAgICAgICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhWzE1XTtcclxuICAgIH1cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIG1hdHJpeCBieSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBYIGF4aXNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQucm90YXRlWCA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgdmFyIHMgPSBNYXRoLnNpbihyYWQpLFxyXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpLFxyXG4gICAgICAgIGExMCA9IGFbNF0sXHJcbiAgICAgICAgYTExID0gYVs1XSxcclxuICAgICAgICBhMTIgPSBhWzZdLFxyXG4gICAgICAgIGExMyA9IGFbN10sXHJcbiAgICAgICAgYTIwID0gYVs4XSxcclxuICAgICAgICBhMjEgPSBhWzldLFxyXG4gICAgICAgIGEyMiA9IGFbMTBdLFxyXG4gICAgICAgIGEyMyA9IGFbMTFdO1xyXG5cclxuICAgIGlmIChhICE9PSBvdXQpIHsgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgcm93c1xyXG4gICAgICAgIG91dFswXSAgPSBhWzBdO1xyXG4gICAgICAgIG91dFsxXSAgPSBhWzFdO1xyXG4gICAgICAgIG91dFsyXSAgPSBhWzJdO1xyXG4gICAgICAgIG91dFszXSAgPSBhWzNdO1xyXG4gICAgICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgICAgICBvdXRbMTNdID0gYVsxM107XHJcbiAgICAgICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhWzE1XTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXHJcbiAgICBvdXRbNF0gPSBhMTAgKiBjICsgYTIwICogcztcclxuICAgIG91dFs1XSA9IGExMSAqIGMgKyBhMjEgKiBzO1xyXG4gICAgb3V0WzZdID0gYTEyICogYyArIGEyMiAqIHM7XHJcbiAgICBvdXRbN10gPSBhMTMgKiBjICsgYTIzICogcztcclxuICAgIG91dFs4XSA9IGEyMCAqIGMgLSBhMTAgKiBzO1xyXG4gICAgb3V0WzldID0gYTIxICogYyAtIGExMSAqIHM7XHJcbiAgICBvdXRbMTBdID0gYTIyICogYyAtIGExMiAqIHM7XHJcbiAgICBvdXRbMTFdID0gYTIzICogYyAtIGExMyAqIHM7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXRyaXggYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWSBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LnJvdGF0ZVkgPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcclxuICAgIHZhciBzID0gTWF0aC5zaW4ocmFkKSxcclxuICAgICAgICBjID0gTWF0aC5jb3MocmFkKSxcclxuICAgICAgICBhMDAgPSBhWzBdLFxyXG4gICAgICAgIGEwMSA9IGFbMV0sXHJcbiAgICAgICAgYTAyID0gYVsyXSxcclxuICAgICAgICBhMDMgPSBhWzNdLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sXHJcbiAgICAgICAgYTIxID0gYVs5XSxcclxuICAgICAgICBhMjIgPSBhWzEwXSxcclxuICAgICAgICBhMjMgPSBhWzExXTtcclxuXHJcbiAgICBpZiAoYSAhPT0gb3V0KSB7IC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIHJvd3NcclxuICAgICAgICBvdXRbNF0gID0gYVs0XTtcclxuICAgICAgICBvdXRbNV0gID0gYVs1XTtcclxuICAgICAgICBvdXRbNl0gID0gYVs2XTtcclxuICAgICAgICBvdXRbN10gID0gYVs3XTtcclxuICAgICAgICBvdXRbMTJdID0gYVsxMl07XHJcbiAgICAgICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgICAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxyXG4gICAgb3V0WzBdID0gYTAwICogYyAtIGEyMCAqIHM7XHJcbiAgICBvdXRbMV0gPSBhMDEgKiBjIC0gYTIxICogcztcclxuICAgIG91dFsyXSA9IGEwMiAqIGMgLSBhMjIgKiBzO1xyXG4gICAgb3V0WzNdID0gYTAzICogYyAtIGEyMyAqIHM7XHJcbiAgICBvdXRbOF0gPSBhMDAgKiBzICsgYTIwICogYztcclxuICAgIG91dFs5XSA9IGEwMSAqIHMgKyBhMjEgKiBjO1xyXG4gICAgb3V0WzEwXSA9IGEwMiAqIHMgKyBhMjIgKiBjO1xyXG4gICAgb3V0WzExXSA9IGEwMyAqIHMgKyBhMjMgKiBjO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0cml4IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFogYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5yb3RhdGVaID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICB2YXIgcyA9IE1hdGguc2luKHJhZCksXHJcbiAgICAgICAgYyA9IE1hdGguY29zKHJhZCksXHJcbiAgICAgICAgYTAwID0gYVswXSxcclxuICAgICAgICBhMDEgPSBhWzFdLFxyXG4gICAgICAgIGEwMiA9IGFbMl0sXHJcbiAgICAgICAgYTAzID0gYVszXSxcclxuICAgICAgICBhMTAgPSBhWzRdLFxyXG4gICAgICAgIGExMSA9IGFbNV0sXHJcbiAgICAgICAgYTEyID0gYVs2XSxcclxuICAgICAgICBhMTMgPSBhWzddO1xyXG5cclxuICAgIGlmIChhICE9PSBvdXQpIHsgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgbGFzdCByb3dcclxuICAgICAgICBvdXRbOF0gID0gYVs4XTtcclxuICAgICAgICBvdXRbOV0gID0gYVs5XTtcclxuICAgICAgICBvdXRbMTBdID0gYVsxMF07XHJcbiAgICAgICAgb3V0WzExXSA9IGFbMTFdO1xyXG4gICAgICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgICAgICBvdXRbMTNdID0gYVsxM107XHJcbiAgICAgICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhWzE1XTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXHJcbiAgICBvdXRbMF0gPSBhMDAgKiBjICsgYTEwICogcztcclxuICAgIG91dFsxXSA9IGEwMSAqIGMgKyBhMTEgKiBzO1xyXG4gICAgb3V0WzJdID0gYTAyICogYyArIGExMiAqIHM7XHJcbiAgICBvdXRbM10gPSBhMDMgKiBjICsgYTEzICogcztcclxuICAgIG91dFs0XSA9IGExMCAqIGMgLSBhMDAgKiBzO1xyXG4gICAgb3V0WzVdID0gYTExICogYyAtIGEwMSAqIHM7XHJcbiAgICBvdXRbNl0gPSBhMTIgKiBjIC0gYTAyICogcztcclxuICAgIG91dFs3XSA9IGExMyAqIGMgLSBhMDMgKiBzO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBxdWF0ZXJuaW9uIHJvdGF0aW9uIGFuZCB2ZWN0b3IgdHJhbnNsYXRpb25cclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgdmVjKTtcclxuICogICAgIHZhciBxdWF0TWF0ID0gbWF0NC5jcmVhdGUoKTtcclxuICogICAgIHF1YXQ0LnRvTWF0NChxdWF0LCBxdWF0TWF0KTtcclxuICogICAgIG1hdDQubXVsdGlwbHkoZGVzdCwgcXVhdE1hdCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0NH0gcSBSb3RhdGlvbiBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gdiBUcmFuc2xhdGlvbiB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbiA9IGZ1bmN0aW9uIChvdXQsIHEsIHYpIHtcclxuICAgIC8vIFF1YXRlcm5pb24gbWF0aFxyXG4gICAgdmFyIHggPSBxWzBdLCB5ID0gcVsxXSwgeiA9IHFbMl0sIHcgPSBxWzNdLFxyXG4gICAgICAgIHgyID0geCArIHgsXHJcbiAgICAgICAgeTIgPSB5ICsgeSxcclxuICAgICAgICB6MiA9IHogKyB6LFxyXG5cclxuICAgICAgICB4eCA9IHggKiB4MixcclxuICAgICAgICB4eSA9IHggKiB5MixcclxuICAgICAgICB4eiA9IHggKiB6MixcclxuICAgICAgICB5eSA9IHkgKiB5MixcclxuICAgICAgICB5eiA9IHkgKiB6MixcclxuICAgICAgICB6eiA9IHogKiB6MixcclxuICAgICAgICB3eCA9IHcgKiB4MixcclxuICAgICAgICB3eSA9IHcgKiB5MixcclxuICAgICAgICB3eiA9IHcgKiB6MjtcclxuXHJcbiAgICBvdXRbMF0gPSAxIC0gKHl5ICsgenopO1xyXG4gICAgb3V0WzFdID0geHkgKyB3ejtcclxuICAgIG91dFsyXSA9IHh6IC0gd3k7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0geHkgLSB3ejtcclxuICAgIG91dFs1XSA9IDEgLSAoeHggKyB6eik7XHJcbiAgICBvdXRbNl0gPSB5eiArIHd4O1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IHh6ICsgd3k7XHJcbiAgICBvdXRbOV0gPSB5eiAtIHd4O1xyXG4gICAgb3V0WzEwXSA9IDEgLSAoeHggKyB5eSk7XHJcbiAgICBvdXRbMTFdID0gMDtcclxuICAgIG91dFsxMl0gPSB2WzBdO1xyXG4gICAgb3V0WzEzXSA9IHZbMV07XHJcbiAgICBvdXRbMTRdID0gdlsyXTtcclxuICAgIG91dFsxNV0gPSAxO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tYXQ0LmZyb21RdWF0ID0gZnVuY3Rpb24gKG91dCwgcSkge1xyXG4gICAgdmFyIHggPSBxWzBdLCB5ID0gcVsxXSwgeiA9IHFbMl0sIHcgPSBxWzNdLFxyXG4gICAgICAgIHgyID0geCArIHgsXHJcbiAgICAgICAgeTIgPSB5ICsgeSxcclxuICAgICAgICB6MiA9IHogKyB6LFxyXG5cclxuICAgICAgICB4eCA9IHggKiB4MixcclxuICAgICAgICB5eCA9IHkgKiB4MixcclxuICAgICAgICB5eSA9IHkgKiB5MixcclxuICAgICAgICB6eCA9IHogKiB4MixcclxuICAgICAgICB6eSA9IHogKiB5MixcclxuICAgICAgICB6eiA9IHogKiB6MixcclxuICAgICAgICB3eCA9IHcgKiB4MixcclxuICAgICAgICB3eSA9IHcgKiB5MixcclxuICAgICAgICB3eiA9IHcgKiB6MjtcclxuXHJcbiAgICBvdXRbMF0gPSAxIC0geXkgLSB6ejtcclxuICAgIG91dFsxXSA9IHl4ICsgd3o7XHJcbiAgICBvdXRbMl0gPSB6eCAtIHd5O1xyXG4gICAgb3V0WzNdID0gMDtcclxuXHJcbiAgICBvdXRbNF0gPSB5eCAtIHd6O1xyXG4gICAgb3V0WzVdID0gMSAtIHh4IC0geno7XHJcbiAgICBvdXRbNl0gPSB6eSArIHd4O1xyXG4gICAgb3V0WzddID0gMDtcclxuXHJcbiAgICBvdXRbOF0gPSB6eCArIHd5O1xyXG4gICAgb3V0WzldID0genkgLSB3eDtcclxuICAgIG91dFsxMF0gPSAxIC0geHggLSB5eTtcclxuICAgIG91dFsxMV0gPSAwO1xyXG5cclxuICAgIG91dFsxMl0gPSAwO1xyXG4gICAgb3V0WzEzXSA9IDA7XHJcbiAgICBvdXRbMTRdID0gMDtcclxuICAgIG91dFsxNV0gPSAxO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgZnJ1c3R1bSBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtOdW1iZXJ9IGxlZnQgTGVmdCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmlnaHQgUmlnaHQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IGJvdHRvbSBCb3R0b20gYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IHRvcCBUb3AgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LmZydXN0dW0gPSBmdW5jdGlvbiAob3V0LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xyXG4gICAgdmFyIHJsID0gMSAvIChyaWdodCAtIGxlZnQpLFxyXG4gICAgICAgIHRiID0gMSAvICh0b3AgLSBib3R0b20pLFxyXG4gICAgICAgIG5mID0gMSAvIChuZWFyIC0gZmFyKTtcclxuICAgIG91dFswXSA9IChuZWFyICogMikgKiBybDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSAobmVhciAqIDIpICogdGI7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IChyaWdodCArIGxlZnQpICogcmw7XHJcbiAgICBvdXRbOV0gPSAodG9wICsgYm90dG9tKSAqIHRiO1xyXG4gICAgb3V0WzEwXSA9IChmYXIgKyBuZWFyKSAqIG5mO1xyXG4gICAgb3V0WzExXSA9IC0xO1xyXG4gICAgb3V0WzEyXSA9IDA7XHJcbiAgICBvdXRbMTNdID0gMDtcclxuICAgIG91dFsxNF0gPSAoZmFyICogbmVhciAqIDIpICogbmY7XHJcbiAgICBvdXRbMTVdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtudW1iZXJ9IGZvdnkgVmVydGljYWwgZmllbGQgb2YgdmlldyBpbiByYWRpYW5zXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhc3BlY3QgQXNwZWN0IHJhdGlvLiB0eXBpY2FsbHkgdmlld3BvcnQgd2lkdGgvaGVpZ2h0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZWFyIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5wZXJzcGVjdGl2ZSA9IGZ1bmN0aW9uIChvdXQsIGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKSB7XHJcbiAgICB2YXIgZiA9IDEuMCAvIE1hdGgudGFuKGZvdnkgLyAyKSxcclxuICAgICAgICBuZiA9IDEgLyAobmVhciAtIGZhcik7XHJcbiAgICBvdXRbMF0gPSBmIC8gYXNwZWN0O1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMDtcclxuICAgIG91dFs1XSA9IGY7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDA7XHJcbiAgICBvdXRbOV0gPSAwO1xyXG4gICAgb3V0WzEwXSA9IChmYXIgKyBuZWFyKSAqIG5mO1xyXG4gICAgb3V0WzExXSA9IC0xO1xyXG4gICAgb3V0WzEyXSA9IDA7XHJcbiAgICBvdXRbMTNdID0gMDtcclxuICAgIG91dFsxNF0gPSAoMiAqIGZhciAqIG5lYXIpICogbmY7XHJcbiAgICBvdXRbMTVdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgb3J0aG9nb25hbCBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBib3VuZHNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge251bWJlcn0gbGVmdCBMZWZ0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByaWdodCBSaWdodCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gYm90dG9tIEJvdHRvbSBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gdG9wIFRvcCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gbmVhciBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBmYXIgRmFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQub3J0aG8gPSBmdW5jdGlvbiAob3V0LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xyXG4gICAgdmFyIGxyID0gMSAvIChsZWZ0IC0gcmlnaHQpLFxyXG4gICAgICAgIGJ0ID0gMSAvIChib3R0b20gLSB0b3ApLFxyXG4gICAgICAgIG5mID0gMSAvIChuZWFyIC0gZmFyKTtcclxuICAgIG91dFswXSA9IC0yICogbHI7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDA7XHJcbiAgICBvdXRbNF0gPSAwO1xyXG4gICAgb3V0WzVdID0gLTIgKiBidDtcclxuICAgIG91dFs2XSA9IDA7XHJcbiAgICBvdXRbN10gPSAwO1xyXG4gICAgb3V0WzhdID0gMDtcclxuICAgIG91dFs5XSA9IDA7XHJcbiAgICBvdXRbMTBdID0gMiAqIG5mO1xyXG4gICAgb3V0WzExXSA9IDA7XHJcbiAgICBvdXRbMTJdID0gKGxlZnQgKyByaWdodCkgKiBscjtcclxuICAgIG91dFsxM10gPSAodG9wICsgYm90dG9tKSAqIGJ0O1xyXG4gICAgb3V0WzE0XSA9IChmYXIgKyBuZWFyKSAqIG5mO1xyXG4gICAgb3V0WzE1XSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIGxvb2stYXQgbWF0cml4IHdpdGggdGhlIGdpdmVuIGV5ZSBwb3NpdGlvbiwgZm9jYWwgcG9pbnQsIGFuZCB1cCBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHt2ZWMzfSBleWUgUG9zaXRpb24gb2YgdGhlIHZpZXdlclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGNlbnRlciBQb2ludCB0aGUgdmlld2VyIGlzIGxvb2tpbmcgYXRcclxuICogQHBhcmFtIHt2ZWMzfSB1cCB2ZWMzIHBvaW50aW5nIHVwXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQubG9va0F0ID0gZnVuY3Rpb24gKG91dCwgZXllLCBjZW50ZXIsIHVwKSB7XHJcbiAgICB2YXIgeDAsIHgxLCB4MiwgeTAsIHkxLCB5MiwgejAsIHoxLCB6MiwgbGVuLFxyXG4gICAgICAgIGV5ZXggPSBleWVbMF0sXHJcbiAgICAgICAgZXlleSA9IGV5ZVsxXSxcclxuICAgICAgICBleWV6ID0gZXllWzJdLFxyXG4gICAgICAgIHVweCA9IHVwWzBdLFxyXG4gICAgICAgIHVweSA9IHVwWzFdLFxyXG4gICAgICAgIHVweiA9IHVwWzJdLFxyXG4gICAgICAgIGNlbnRlcnggPSBjZW50ZXJbMF0sXHJcbiAgICAgICAgY2VudGVyeSA9IGNlbnRlclsxXSxcclxuICAgICAgICBjZW50ZXJ6ID0gY2VudGVyWzJdO1xyXG5cclxuICAgIGlmIChNYXRoLmFicyhleWV4IC0gY2VudGVyeCkgPCBHTE1BVF9FUFNJTE9OICYmXHJcbiAgICAgICAgTWF0aC5hYnMoZXlleSAtIGNlbnRlcnkpIDwgR0xNQVRfRVBTSUxPTiAmJlxyXG4gICAgICAgIE1hdGguYWJzKGV5ZXogLSBjZW50ZXJ6KSA8IEdMTUFUX0VQU0lMT04pIHtcclxuICAgICAgICByZXR1cm4gbWF0NC5pZGVudGl0eShvdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHowID0gZXlleCAtIGNlbnRlcng7XHJcbiAgICB6MSA9IGV5ZXkgLSBjZW50ZXJ5O1xyXG4gICAgejIgPSBleWV6IC0gY2VudGVyejtcclxuXHJcbiAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KHowICogejAgKyB6MSAqIHoxICsgejIgKiB6Mik7XHJcbiAgICB6MCAqPSBsZW47XHJcbiAgICB6MSAqPSBsZW47XHJcbiAgICB6MiAqPSBsZW47XHJcblxyXG4gICAgeDAgPSB1cHkgKiB6MiAtIHVweiAqIHoxO1xyXG4gICAgeDEgPSB1cHogKiB6MCAtIHVweCAqIHoyO1xyXG4gICAgeDIgPSB1cHggKiB6MSAtIHVweSAqIHowO1xyXG4gICAgbGVuID0gTWF0aC5zcXJ0KHgwICogeDAgKyB4MSAqIHgxICsgeDIgKiB4Mik7XHJcbiAgICBpZiAoIWxlbikge1xyXG4gICAgICAgIHgwID0gMDtcclxuICAgICAgICB4MSA9IDA7XHJcbiAgICAgICAgeDIgPSAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZW4gPSAxIC8gbGVuO1xyXG4gICAgICAgIHgwICo9IGxlbjtcclxuICAgICAgICB4MSAqPSBsZW47XHJcbiAgICAgICAgeDIgKj0gbGVuO1xyXG4gICAgfVxyXG5cclxuICAgIHkwID0gejEgKiB4MiAtIHoyICogeDE7XHJcbiAgICB5MSA9IHoyICogeDAgLSB6MCAqIHgyO1xyXG4gICAgeTIgPSB6MCAqIHgxIC0gejEgKiB4MDtcclxuXHJcbiAgICBsZW4gPSBNYXRoLnNxcnQoeTAgKiB5MCArIHkxICogeTEgKyB5MiAqIHkyKTtcclxuICAgIGlmICghbGVuKSB7XHJcbiAgICAgICAgeTAgPSAwO1xyXG4gICAgICAgIHkxID0gMDtcclxuICAgICAgICB5MiA9IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxlbiA9IDEgLyBsZW47XHJcbiAgICAgICAgeTAgKj0gbGVuO1xyXG4gICAgICAgIHkxICo9IGxlbjtcclxuICAgICAgICB5MiAqPSBsZW47XHJcbiAgICB9XHJcblxyXG4gICAgb3V0WzBdID0geDA7XHJcbiAgICBvdXRbMV0gPSB5MDtcclxuICAgIG91dFsyXSA9IHowO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IHgxO1xyXG4gICAgb3V0WzVdID0geTE7XHJcbiAgICBvdXRbNl0gPSB6MTtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSB4MjtcclxuICAgIG91dFs5XSA9IHkyO1xyXG4gICAgb3V0WzEwXSA9IHoyO1xyXG4gICAgb3V0WzExXSA9IDA7XHJcbiAgICBvdXRbMTJdID0gLSh4MCAqIGV5ZXggKyB4MSAqIGV5ZXkgKyB4MiAqIGV5ZXopO1xyXG4gICAgb3V0WzEzXSA9IC0oeTAgKiBleWV4ICsgeTEgKiBleWV5ICsgeTIgKiBleWV6KTtcclxuICAgIG91dFsxNF0gPSAtKHowICogZXlleCArIHoxICogZXlleSArIHoyICogZXlleik7XHJcbiAgICBvdXRbMTVdID0gMTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cclxubWF0NC5mcm9iID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybihNYXRoLnNxcnQoTWF0aC5wb3coYVswXSwgMikgKyBNYXRoLnBvdyhhWzFdLCAyKSArIE1hdGgucG93KGFbMl0sIDIpICsgTWF0aC5wb3coYVszXSwgMikgKyBNYXRoLnBvdyhhWzRdLCAyKSArIE1hdGgucG93KGFbNV0sIDIpICsgTWF0aC5wb3coYVs2XSwgMikgKyBNYXRoLnBvdyhhWzddLCAyKSArIE1hdGgucG93KGFbOF0sIDIpICsgTWF0aC5wb3coYVs5XSwgMikgKyBNYXRoLnBvdyhhWzEwXSwgMikgKyBNYXRoLnBvdyhhWzExXSwgMikgKyBNYXRoLnBvdyhhWzEyXSwgMikgKyBNYXRoLnBvdyhhWzEzXSwgMikgKyBNYXRoLnBvdyhhWzE0XSwgMikgKyBNYXRoLnBvdyhhWzE1XSwgMikgKSlcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG1hdDQ7IiwiLy8gVE9ETyBSZXNvdXJjZXMgbGlrZSBzaGFkZXIsIHRleHR1cmUsIGdlb21ldHJ5IHJlZmVyZW5jZSBtYW5hZ2VtZW50XHJcbi8vIFRyYWNlIGFuZCBmaW5kIG91dCB3aGljaCBzaGFkZXIsIHRleHR1cmUsIGdlb21ldHJ5IGNhbiBiZSBkZXN0cm95ZWRcclxuaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgR0xJbmZvIGZyb20gJy4vY29yZS9HTEluZm8nO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4vY29yZS92ZW5kb3InO1xyXG5cclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tICcuL21hdGgvVmVjdG9yMic7XHJcbmltcG9ydCBQcm9ncmFtTWFuYWdlciBmcm9tICcuL2dwdS9Qcm9ncmFtTWFuYWdlcic7XHJcblxyXG4vLyBMaWdodCBoZWFkZXJcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuL1NoYWRlcic7XHJcblxyXG5pbXBvcnQgcHJlekVzc2wgZnJvbSAnLi9zaGFkZXIvc291cmNlL3ByZXouZ2xzbC5qcyc7XHJcblNoYWRlclsnaW1wb3J0J10ocHJlekVzc2wpO1xyXG5cclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcbnZhciBtYXQ0Q3JlYXRlID0gbWF0NC5jcmVhdGU7XHJcblxyXG52YXIgZXJyb3JTaGFkZXIgPSB7fTtcclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRHZXRNYXRlcmlhbChyZW5kZXJhYmxlKSB7XHJcbiAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbDtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0R2V0VW5pZm9ybShyZW5kZXJhYmxlLCBtYXRlcmlhbCwgc3ltYm9sKSB7XHJcbiAgICByZXR1cm4gbWF0ZXJpYWwudW5pZm9ybXNbc3ltYm9sXS52YWx1ZTtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0SXNNYXRlcmlhbENoYW5nZWQocmVuZGVyYWJsZWQsIHByZXZSZW5kZXJhYmxlLCBtYXRlcmlhbCwgcHJldk1hdGVyaWFsKSB7XHJcbiAgICByZXR1cm4gbWF0ZXJpYWwgIT09IHByZXZNYXRlcmlhbDtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0SWZSZW5kZXIocmVuZGVyYWJsZSkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5vb3AoKSB7fVxyXG5cclxudmFyIGF0dHJpYnV0ZUJ1ZmZlclR5cGVNYXAgPSB7XHJcbiAgICBmbG9hdDogZ2xlbnVtLkZMT0FULFxyXG4gICAgYnl0ZTogZ2xlbnVtLkJZVEUsXHJcbiAgICB1Ynl0ZTogZ2xlbnVtLlVOU0lHTkVEX0JZVEUsXHJcbiAgICBzaG9ydDogZ2xlbnVtLlNIT1JULFxyXG4gICAgdXNob3J0OiBnbGVudW0uVU5TSUdORURfU0hPUlRcclxufTtcclxuXHJcbmZ1bmN0aW9uIFZlcnRleEFycmF5T2JqZWN0KGF2YWlsYWJsZUF0dHJpYnV0ZXMsIGF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMsIGluZGljZXNCdWZmZXIpIHtcclxuICAgIHRoaXMuYXZhaWxhYmxlQXR0cmlidXRlcyA9IGF2YWlsYWJsZUF0dHJpYnV0ZXM7XHJcbiAgICB0aGlzLmF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMgPSBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzO1xyXG4gICAgdGhpcy5pbmRpY2VzQnVmZmVyID0gaW5kaWNlc0J1ZmZlcjtcclxuXHJcbiAgICB0aGlzLnZhbyA9IG51bGw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFBsYWNlSG9sZGVyVGV4dHVyZShyZW5kZXJlcikge1xyXG4gICAgdmFyIGJsYW5rQ2FudmFzO1xyXG4gICAgdmFyIHdlYmdsVGV4dHVyZTtcclxuICAgIHRoaXMuYmluZCA9IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIGlmICghYmxhbmtDYW52YXMpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBFbnZpcm9ubWVudCBub3Qgc3VwcG9ydCBjcmVhdGVDYW52YXMuXHJcbiAgICAgICAgICAgIGJsYW5rQ2FudmFzID0gdmVuZG9yLmNyZWF0ZUNhbnZhcygpO1xyXG4gICAgICAgICAgICBibGFua0NhbnZhcy53aWR0aCA9IGJsYW5rQ2FudmFzLmhlaWdodCA9IDE7XHJcbiAgICAgICAgICAgIGJsYW5rQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgZmlyc3RCaW5kID0gIXdlYmdsVGV4dHVyZTtcclxuICAgICAgICBpZiAoZmlyc3RCaW5kKSB7XHJcbiAgICAgICAgICAgIHdlYmdsVGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgd2ViZ2xUZXh0dXJlKTtcclxuICAgICAgICBpZiAoZmlyc3RCaW5kKSB7XHJcbiAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgYmxhbmtDYW52YXMpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aGlzLnVuYmluZCA9IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHJlbmRlcmVyLmdsLmJpbmRUZXh0dXJlKHJlbmRlcmVyLmdsLlRFWFRVUkVfMkQsIG51bGwpO1xyXG4gICAgfTtcclxuICAgIHRoaXMuaXNSZW5kZXJhYmxlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuUmVuZGVyZXJcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBSZW5kZXJlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuUmVuZGVyZXIjICovIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxDYW52YXNFbGVtZW50fVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNhbnZhczogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FudmFzIHdpZHRoLCBzZXQgYnkgcmVzaXplIG1ldGhvZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfd2lkdGg6IDEwMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FudmFzIHdpZHRoLCBzZXQgYnkgcmVzaXplIG1ldGhvZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfaGVpZ2h0OiAxMDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERldmljZSBwaXhlbCByYXRpbywgc2V0IGJ5IHNldERldmljZVBpeGVsUmF0aW8gbWV0aG9kXHJcbiAgICAgICAgICogU3BlY2lhbGx5IGZvciBoaWdoIGRlZmluYXRpb24gZGlzcGxheVxyXG4gICAgICAgICAqIEBzZWUgaHR0cDovL3d3dy5raHJvbm9zLm9yZy93ZWJnbC93aWtpL0hhbmRsaW5nSGlnaERQSVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBkZXZpY2VQaXhlbFJhdGlvOiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRldmljZVBpeGVsUmF0aW8pIHx8IDEuMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2xlYXIgY29sb3JcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyW119XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xlYXJDb2xvcjogWzAuMCwgMC4wLCAwLjAsIDAuMF0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERlZmF1bHQ6XHJcbiAgICAgICAgICogICAgIF9nbC5DT0xPUl9CVUZGRVJfQklUIHwgX2dsLkRFUFRIX0JVRkZFUl9CSVQgfCBfZ2wuU1RFTkNJTF9CVUZGRVJfQklUXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGVhckJpdDogMTc2NjQsXHJcblxyXG4gICAgICAgIC8vIFNldHRpbmdzIHdoZW4gZ2V0dGluZyBjb250ZXh0XHJcbiAgICAgICAgLy8gaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9zcGVjcy9sYXRlc3QvIzIuNFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgYWxwaGEsIGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFscGhhOiB0cnVlLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBkZXB0aCBidWZmZXIsIGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRlcHRoOiB0cnVlLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBzdGVuY2lsIGJ1ZmZlciwgZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHN0ZW5jaWw6IGZhbHNlLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBhbnRpYWxpYXMsIGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFudGlhbGlhczogdHJ1ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgcHJlbXVsdGlwbGllZCBhbHBoYSwgZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0cnVlLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHByZXNlcnZlIGRyYXdpbmcgYnVmZmVyLCBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0aHJvdyBjb250ZXh0IGVycm9yLCB1c3VhbGx5IHR1cm5lZCBvbiBpbiBkZWJ1ZyBtb2RlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhyb3dFcnJvcjogdHJ1ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXZWJHTCBDb250ZXh0IGNyZWF0ZWQgZnJvbSBnaXZlbiBjYW52YXNcclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdsOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFJlbmRlcmVyIHZpZXdwb3J0LCByZWFkLW9ubHksIGNhbiBiZSBzZXQgYnkgc2V0Vmlld3BvcnQgbWV0aG9kXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICB2aWV3cG9ydDoge30sXHJcblxyXG4gICAgICAgIC8vIFNldCBieSBGcmFtZUJ1ZmZlciNiaW5kXHJcbiAgICAgICAgX19jdXJyZW50RnJhbWVCdWZmZXI6IG51bGwsXHJcblxyXG4gICAgICAgIF92aWV3cG9ydFN0YWNrOiBbXSxcclxuICAgICAgICBfY2xlYXJTdGFjazogW10sXHJcblxyXG4gICAgICAgIF9zY2VuZVJlbmRlcmluZzogbnVsbFxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIGlmICghdGhpcy5jYW52YXMpIHtcclxuICAgICAgICB0aGlzLmNhbnZhcyA9IHZlbmRvci5jcmVhdGVDYW52YXMoKTtcclxuICAgIH1cclxuICAgIHZhciBjYW52YXMgPSB0aGlzLmNhbnZhcztcclxuICAgIHRyeSB7XHJcbiAgICAgICAgdmFyIG9wdHMgPSB7XHJcbiAgICAgICAgICAgIGFscGhhOiB0aGlzLmFscGhhLFxyXG4gICAgICAgICAgICBkZXB0aDogdGhpcy5kZXB0aCxcclxuICAgICAgICAgICAgc3RlbmNpbDogdGhpcy5zdGVuY2lsLFxyXG4gICAgICAgICAgICBhbnRpYWxpYXM6IHRoaXMuYW50aWFsaWFzLFxyXG4gICAgICAgICAgICBwcmVtdWx0aXBsaWVkQWxwaGE6IHRoaXMucHJlbXVsdGlwbGllZEFscGhhLFxyXG4gICAgICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5nbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIG9wdHMpXHJcbiAgICAgICAgICAgIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBvcHRzKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmdsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZ2xpbmZvID0gbmV3IEdMSW5mbyh0aGlzLmdsKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2wudGFyZ2V0UmVuZGVyZXIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQWxyZWFkeSBjcmVhdGVkIGEgcmVuZGVyZXInKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nbC50YXJnZXRSZW5kZXJlciA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMucmVzaXplKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIHRocm93ICdFcnJvciBjcmVhdGluZyBXZWJHTCBDb250ZXh0ICcgKyBlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEluaXQgbWFuYWdlcnNcclxuICAgIHRoaXMuX3Byb2dyYW1NZ3IgPSBuZXcgUHJvZ3JhbU1hbmFnZXIodGhpcyk7XHJcblxyXG4gICAgdGhpcy5fcGxhY2Vob2xkZXJUZXh0dXJlID0gbmV3IFBsYWNlSG9sZGVyVGV4dHVyZSh0aGlzKTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LlJlbmRlcmVyLnByb3RvdHlwZS4gKiovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogUmVzaXplIHRoZSBjYW52YXNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxyXG4gICAgICovXHJcbiAgICByZXNpemU6IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgICAgICB2YXIgY2FudmFzID0gdGhpcy5jYW52YXM7XHJcbiAgICAgICAgLy8gaHR0cDovL3d3dy5raHJvbm9zLm9yZy93ZWJnbC93aWtpL0hhbmRsaW5nSGlnaERQSVxyXG4gICAgICAgIC8vIHNldCB0aGUgZGlzcGxheSBzaXplIG9mIHRoZSBjYW52YXMuXHJcbiAgICAgICAgdmFyIGRwciA9IHRoaXMuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICBpZiAod2lkdGggIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoY2FudmFzLnN0eWxlKSB7XHJcbiAgICAgICAgICAgICAgICBjYW52YXMuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XHJcbiAgICAgICAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHNpemUgb2YgdGhlIGRyYXdpbmdCdWZmZXJcclxuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGggKiBkcHI7XHJcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKiBkcHI7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IGNhbnZhcy53aWR0aCAvIGRwcjtcclxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gY2FudmFzLmhlaWdodCAvIGRwcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0Vmlld3BvcnQoMCwgMCwgdGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHJlbmRlcmVyIHdpZHRoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldFdpZHRoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCByZW5kZXJlciBoZWlnaHRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0SGVpZ2h0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdmlld3BvcnQgYXNwZWN0LFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXRWaWV3cG9ydEFzcGVjdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7XHJcbiAgICAgICAgcmV0dXJuIHZpZXdwb3J0LndpZHRoIC8gdmlld3BvcnQuaGVpZ2h0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBkZXZpY2VQaXhlbFJhdGlvXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGV2aWNlUGl4ZWxSYXRpb1xyXG4gICAgICovXHJcbiAgICBzZXREZXZpY2VQaXhlbFJhdGlvOiBmdW5jdGlvbihkZXZpY2VQaXhlbFJhdGlvKSB7XHJcbiAgICAgICAgdGhpcy5kZXZpY2VQaXhlbFJhdGlvID0gZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICB0aGlzLnJlc2l6ZSh0aGlzLl93aWR0aCwgdGhpcy5faGVpZ2h0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZGV2aWNlUGl4ZWxSYXRpb1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRldmljZVBpeGVsUmF0aW9cclxuICAgICAqL1xyXG4gICAgZ2V0RGV2aWNlUGl4ZWxSYXRpbzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRldmljZVBpeGVsUmF0aW87XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IFdlYkdMIGV4dGVuc2lvblxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge29iamVjdH1cclxuICAgICAqL1xyXG4gICAgZ2V0R0xFeHRlbnNpb246IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dsaW5mby5nZXRFeHRlbnNpb24obmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IFdlYkdMIHBhcmFtZXRlclxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4geyp9XHJcbiAgICAgKi9cclxuICAgIGdldEdMUGFyYW1ldGVyOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nbGluZm8uZ2V0UGFyYW1ldGVyKG5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCByZW5kZXJpbmcgdmlld3BvcnRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfE9iamVjdH0geFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aF1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0XVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtkZXZpY2VQaXhlbFJhdGlvXVxyXG4gICAgICogICAgICAgIERlZmF1bHRseSB1c2UgdGhlIHJlbmRlcmVyZSBkZXZpY2VQaXhlbFJhdGlvXHJcbiAgICAgKiAgICAgICAgSXQgbmVlZHMgdG8gYmUgMSB3aGVuIHNldFZpZXdwb3J0IGlzIGNhbGxlZCBieSBmcmFtZUJ1ZmZlclxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiAgc2V0Vmlld3BvcnQoMCwwLHdpZHRoLGhlaWdodCwxKVxyXG4gICAgICogIHNldFZpZXdwb3J0KHtcclxuICAgICAqICAgICAgeDogMCxcclxuICAgICAqICAgICAgeTogMCxcclxuICAgICAqICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICogICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAqICAgICAgZGV2aWNlUGl4ZWxSYXRpbzogMVxyXG4gICAgICogIH0pXHJcbiAgICAgKi9cclxuICAgIHNldFZpZXdwb3J0OiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgZHByKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgdmFyIG9iaiA9IHg7XHJcblxyXG4gICAgICAgICAgICB4ID0gb2JqLng7XHJcbiAgICAgICAgICAgIHkgPSBvYmoueTtcclxuICAgICAgICAgICAgd2lkdGggPSBvYmoud2lkdGg7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IG9iai5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGRwciA9IG9iai5kZXZpY2VQaXhlbFJhdGlvO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkcHIgPSBkcHIgfHwgdGhpcy5kZXZpY2VQaXhlbFJhdGlvO1xyXG5cclxuICAgICAgICB0aGlzLmdsLnZpZXdwb3J0KFxyXG4gICAgICAgICAgICB4ICogZHByLCB5ICogZHByLCB3aWR0aCAqIGRwciwgaGVpZ2h0ICogZHByXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBVc2UgYSBmcmVzaCBuZXcgb2JqZWN0LCBub3Qgd3JpdGUgcHJvcGVydHkuXHJcbiAgICAgICAgdGhpcy52aWV3cG9ydCA9IHtcclxuICAgICAgICAgICAgeDogeCxcclxuICAgICAgICAgICAgeTogeSxcclxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICAgICAgZGV2aWNlUGl4ZWxSYXRpbzogZHByXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQdXNoIGN1cnJlbnQgdmlld3BvcnQgaW50byBhIHN0YWNrXHJcbiAgICAgKi9cclxuICAgIHNhdmVWaWV3cG9ydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3ZpZXdwb3J0U3RhY2sucHVzaCh0aGlzLnZpZXdwb3J0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3Agdmlld3BvcnQgZnJvbSBzdGFjaywgcmVzdG9yZSBpbiB0aGUgcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgcmVzdG9yZVZpZXdwb3J0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3ZpZXdwb3J0U3RhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZpZXdwb3J0KHRoaXMuX3ZpZXdwb3J0U3RhY2sucG9wKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQdXNoIGN1cnJlbnQgY2xlYXIgaW50byBhIHN0YWNrXHJcbiAgICAgKi9cclxuICAgIHNhdmVDbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFyU3RhY2sucHVzaCh7XHJcbiAgICAgICAgICAgIGNsZWFyQml0OiB0aGlzLmNsZWFyQml0LFxyXG4gICAgICAgICAgICBjbGVhckNvbG9yOiB0aGlzLmNsZWFyQ29sb3JcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3AgY2xlYXIgZnJvbSBzdGFjaywgcmVzdG9yZSBpbiB0aGUgcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgcmVzdG9yZUNsZWFyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NsZWFyU3RhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB2YXIgb3B0ID0gdGhpcy5fY2xlYXJTdGFjay5wb3AoKTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckNvbG9yID0gb3B0LmNsZWFyQ29sb3I7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJCaXQgPSBvcHQuY2xlYXJCaXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBiaW5kU2NlbmVSZW5kZXJpbmc6IGZ1bmN0aW9uIChzY2VuZSkge1xyXG4gICAgICAgIHRoaXMuX3NjZW5lUmVuZGVyaW5nID0gc2NlbmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIHRoZSBzY2VuZSBpbiBjYW1lcmEgdG8gdGhlIHNjcmVlbiBvciBiaW5kZWQgb2ZmbGluZSBmcmFtZWJ1ZmZlclxyXG4gICAgICogQHBhcmFtICB7Y2xheS5TY2VuZX0gICAgICAgc2NlbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQ2FtZXJhfSAgICAgIGNhbWVyYVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgIFtub3RVcGRhdGVTY2VuZV0gSWYgbm90IGNhbGwgdGhlIHNjZW5lLnVwZGF0ZSBtZXRob2RzIGluIHRoZSByZW5kZXJpbmcsIGRlZmF1bHQgdHJ1ZVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgIFtwcmVaXSAgICAgICAgICAgSWYgdXNlIHByZVogb3B0aW1pemF0aW9uLCBkZWZhdWx0IGZhbHNlXHJcbiAgICAgKiBAcmV0dXJuIHtJUmVuZGVySW5mb31cclxuICAgICAqL1xyXG4gICAgcmVuZGVyOiBmdW5jdGlvbihzY2VuZSwgY2FtZXJhLCBub3RVcGRhdGVTY2VuZSwgcHJlWikge1xyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICB2YXIgY2xlYXJDb2xvciA9IHRoaXMuY2xlYXJDb2xvcjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJCaXQpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIE11c3Qgc2V0IGRlcHRoIGFuZCBjb2xvciBtYXNrIHRydWUgYmVmb3JlIGNsZWFyXHJcbiAgICAgICAgICAgIF9nbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIF9nbC5kZXB0aE1hc2sodHJ1ZSk7XHJcbiAgICAgICAgICAgIHZhciB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7XHJcbiAgICAgICAgICAgIHZhciBuZWVkc1NjaXNzb3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgdmFyIHZpZXdwb3J0RHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICAgICAgaWYgKHZpZXdwb3J0LndpZHRoICE9PSB0aGlzLl93aWR0aCB8fCB2aWV3cG9ydC5oZWlnaHQgIT09IHRoaXMuX2hlaWdodFxyXG4gICAgICAgICAgICAgICAgfHwgKHZpZXdwb3J0RHByICYmIHZpZXdwb3J0RHByICE9PSB0aGlzLmRldmljZVBpeGVsUmF0aW8pXHJcbiAgICAgICAgICAgICAgICB8fCB2aWV3cG9ydC54IHx8IHZpZXdwb3J0LnlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBuZWVkc1NjaXNzb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMTU0NDYwOC9ob3ctdG8tY2xlYXItYS1yZWN0YW5nbGUtYXJlYS1pbi13ZWJnbFxyXG4gICAgICAgICAgICAgICAgLy8gT25seSBjbGVhciB0aGUgdmlld3BvcnRcclxuICAgICAgICAgICAgICAgIF9nbC5lbmFibGUoX2dsLlNDSVNTT1JfVEVTVCk7XHJcbiAgICAgICAgICAgICAgICBfZ2wuc2Npc3Nvcih2aWV3cG9ydC54ICogdmlld3BvcnREcHIsIHZpZXdwb3J0LnkgKiB2aWV3cG9ydERwciwgdmlld3BvcnQud2lkdGggKiB2aWV3cG9ydERwciwgdmlld3BvcnQuaGVpZ2h0ICogdmlld3BvcnREcHIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF9nbC5jbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pO1xyXG4gICAgICAgICAgICBfZ2wuY2xlYXIodGhpcy5jbGVhckJpdCk7XHJcbiAgICAgICAgICAgIGlmIChuZWVkc1NjaXNzb3IpIHtcclxuICAgICAgICAgICAgICAgIF9nbC5kaXNhYmxlKF9nbC5TQ0lTU09SX1RFU1QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiB0aGUgc2NlbmUgaGF2ZSBiZWVuIHVwZGF0ZWQgaW4gdGhlIHByZXBhc3MgbGlrZSBzaGFkb3cgbWFwXHJcbiAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byB1cGRhdGUgaXQgYWdhaW5cclxuICAgICAgICBpZiAoIW5vdFVwZGF0ZVNjZW5lKSB7XHJcbiAgICAgICAgICAgIHNjZW5lLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjZW5lLnVwZGF0ZUxpZ2h0cygpO1xyXG5cclxuICAgICAgICBjYW1lcmEgPSBjYW1lcmEgfHwgc2NlbmUuZ2V0TWFpbkNhbWVyYSgpO1xyXG4gICAgICAgIGlmICghY2FtZXJhKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NhblxcJ3QgZmluZCBjYW1lcmEgaW4gdGhlIHNjZW5lLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhbWVyYS51cGRhdGUoKTtcclxuICAgICAgICB2YXIgcmVuZGVyTGlzdCA9IHNjZW5lLnVwZGF0ZVJlbmRlckxpc3QoY2FtZXJhLCB0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2NlbmVSZW5kZXJpbmcgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgdmFyIG9wYXF1ZUxpc3QgPSByZW5kZXJMaXN0Lm9wYXF1ZTtcclxuICAgICAgICB2YXIgdHJhbnNwYXJlbnRMaXN0ID0gcmVuZGVyTGlzdC50cmFuc3BhcmVudDtcclxuICAgICAgICB2YXIgc2NlbmVNYXRlcmlhbCA9IHNjZW5lLm1hdGVyaWFsO1xyXG5cclxuICAgICAgICBzY2VuZS50cmlnZ2VyKCdiZWZvcmVyZW5kZXInLCB0aGlzLCBzY2VuZSwgY2FtZXJhLCByZW5kZXJMaXN0KTtcclxuXHJcbiAgICAgICAgLy8gUmVuZGVyIHByZSB6XHJcbiAgICAgICAgaWYgKHByZVopIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJQcmVaKG9wYXF1ZUxpc3QsIHNjZW5lLCBjYW1lcmEpO1xyXG4gICAgICAgICAgICBfZ2wuZGVwdGhGdW5jKF9nbC5MRVFVQUwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgX2dsLmRlcHRoRnVuYyhfZ2wuTEVTUyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIGRlcHRoIG9mIHRyYW5zcGFyZW50IGxpc3QuXHJcbiAgICAgICAgdmFyIHdvcmxkVmlld01hdCA9IG1hdDRDcmVhdGUoKTtcclxuICAgICAgICB2YXIgcG9zVmlld1NwYWNlID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zcGFyZW50TGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyYWJsZSA9IHRyYW5zcGFyZW50TGlzdFtpXTtcclxuICAgICAgICAgICAgbWF0NC5tdWx0aXBseUFmZmluZSh3b3JsZFZpZXdNYXQsIGNhbWVyYS52aWV3TWF0cml4LmFycmF5LCByZW5kZXJhYmxlLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgdmVjMy50cmFuc2Zvcm1NYXQ0KHBvc1ZpZXdTcGFjZSwgcmVuZGVyYWJsZS5wb3NpdGlvbi5hcnJheSwgd29ybGRWaWV3TWF0KTtcclxuICAgICAgICAgICAgcmVuZGVyYWJsZS5fX2RlcHRoID0gcG9zVmlld1NwYWNlWzJdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVuZGVyIG9wYXF1ZSBsaXN0XHJcbiAgICAgICAgdGhpcy5yZW5kZXJQYXNzKG9wYXF1ZUxpc3QsIGNhbWVyYSwge1xyXG4gICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzY2VuZU1hdGVyaWFsIHx8IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNvcnRDb21wYXJlOiB0aGlzLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyh0cmFuc3BhcmVudExpc3QsIGNhbWVyYSwge1xyXG4gICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzY2VuZU1hdGVyaWFsIHx8IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNvcnRDb21wYXJlOiB0aGlzLnRyYW5zcGFyZW50U29ydENvbXBhcmVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2NlbmUudHJpZ2dlcignYWZ0ZXJyZW5kZXInLCB0aGlzLCBzY2VuZSwgY2FtZXJhLCByZW5kZXJMaXN0KTtcclxuXHJcbiAgICAgICAgLy8gQ2xlYW51cFxyXG4gICAgICAgIHRoaXMuX3NjZW5lUmVuZGVyaW5nID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0UHJvZ3JhbTogZnVuY3Rpb24gKHJlbmRlcmFibGUsIHJlbmRlck1hdGVyaWFsLCBzY2VuZSkge1xyXG4gICAgICAgIHJlbmRlck1hdGVyaWFsID0gcmVuZGVyTWF0ZXJpYWwgfHwgcmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3JhbU1nci5nZXRQcm9ncmFtKHJlbmRlcmFibGUsIHJlbmRlck1hdGVyaWFsLCBzY2VuZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlUHJvZ3JhbTogZnVuY3Rpb24gKHByb2dyYW0pIHtcclxuICAgICAgICBpZiAocHJvZ3JhbS5fX2Vycm9yKSB7XHJcbiAgICAgICAgICAgIHZhciBlcnJvck1zZyA9IHByb2dyYW0uX19lcnJvcjtcclxuICAgICAgICAgICAgaWYgKGVycm9yU2hhZGVyW3Byb2dyYW0uX191aWRfX10pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlcnJvclNoYWRlcltwcm9ncmFtLl9fdWlkX19dID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRocm93RXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2Vycm9yJywgZXJyb3JNc2cpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZVByb2dyYW1zOiBmdW5jdGlvbiAobGlzdCwgc2NlbmUsIHBhc3NDb25maWcpIHtcclxuICAgICAgICB2YXIgZ2V0TWF0ZXJpYWwgPSAocGFzc0NvbmZpZyAmJiBwYXNzQ29uZmlnLmdldE1hdGVyaWFsKSB8fCBkZWZhdWx0R2V0TWF0ZXJpYWw7XHJcbiAgICAgICAgc2NlbmUgPSBzY2VuZSB8fCBudWxsO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyYWJsZSA9IGxpc3RbaV07XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJNYXRlcmlhbCA9IGdldE1hdGVyaWFsLmNhbGwodGhpcywgcmVuZGVyYWJsZSk7XHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHByZXZSZW5kZXJhYmxlID0gbGlzdFtpIC0gMV07XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJldkpvaW50c0xlbiA9IHByZXZSZW5kZXJhYmxlLmpvaW50cyA/IHByZXZSZW5kZXJhYmxlLmpvaW50cy5sZW5ndGggOiAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50c0xlbiA9IHJlbmRlcmFibGUuam9pbnRzID8gcmVuZGVyYWJsZS5qb2ludHMubGVuZ3RoIDogMDtcclxuICAgICAgICAgICAgICAgIC8vIEtlZXAgcHJvZ3JhbSBub3QgY2hhbmdlIGlmIGpvaW50cywgbWF0ZXJpYWwsIGxpZ2h0R3JvdXAgYXJlIHNhbWUgb2YgdHdvIHJlbmRlcmFibGVzLlxyXG4gICAgICAgICAgICAgICAgaWYgKGpvaW50c0xlbiA9PT0gcHJldkpvaW50c0xlblxyXG4gICAgICAgICAgICAgICAgICAgICYmIHJlbmRlcmFibGUubWF0ZXJpYWwgPT09IHByZXZSZW5kZXJhYmxlLm1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgcmVuZGVyYWJsZS5saWdodEdyb3VwID09PSBwcmV2UmVuZGVyYWJsZS5saWdodEdyb3VwXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLl9fcHJvZ3JhbSA9IHByZXZSZW5kZXJhYmxlLl9fcHJvZ3JhbTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHByb2dyYW0gPSB0aGlzLl9wcm9ncmFtTWdyLmdldFByb2dyYW0ocmVuZGVyYWJsZSwgcmVuZGVyTWF0ZXJpYWwsIHNjZW5lKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pO1xyXG5cclxuICAgICAgICAgICAgcmVuZGVyYWJsZS5fX3Byb2dyYW0gPSBwcm9ncmFtO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW5kZXIgYSBzaW5nbGUgcmVuZGVyYWJsZSBsaXN0IGluIGNhbWVyYSBpbiBzZXF1ZW5jZVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmFibGVbXX0gbGlzdCBMaXN0IG9mIGFsbCByZW5kZXJhYmxlcy5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5DYW1lcmF9IFtjYW1lcmFdIENhbWVyYSBwcm92aWRlIHZpZXcgbWF0cml4IGFuZCBwb3JqZWN0aW9uIG1hdHJpeC4gSXQgY2FuIGJlIG51bGwuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3Bhc3NDb25maWddXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5nZXRNYXRlcmlhbF0gR2V0IHJlbmRlcmFibGUgbWF0ZXJpYWwuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5nZXRVbmlmb3JtXSBHZXQgbWF0ZXJpYWwgdW5pZm9ybSB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXNzQ29uZmlnLmlzTWF0ZXJpYWxDaGFuZ2VkXSBJZiBtYXRlcmlhbCBjaGFuZ2VkLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuYmVmb3JlUmVuZGVyXSBCZWZvcmUgcmVuZGVyIGVhY2ggcmVuZGVyYWJsZS5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXNzQ29uZmlnLmFmdGVyUmVuZGVyXSBBZnRlciByZW5kZXIgZWFjaCByZW5kZXJhYmxlXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5pZlJlbmRlcl0gSWYgcmVuZGVyIHRoZSByZW5kZXJhYmxlLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuc29ydENvbXBhcmVdIFNvcnQgY29tcGFyZSBmdW5jdGlvbi5cclxuICAgICAqIEByZXR1cm4ge0lSZW5kZXJJbmZvfVxyXG4gICAgICovXHJcbiAgICByZW5kZXJQYXNzOiBmdW5jdGlvbihsaXN0LCBjYW1lcmEsIHBhc3NDb25maWcpIHtcclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZXJlbmRlcnBhc3MnLCB0aGlzLCBsaXN0LCBjYW1lcmEsIHBhc3NDb25maWcpO1xyXG5cclxuICAgICAgICBwYXNzQ29uZmlnID0gcGFzc0NvbmZpZyB8fCB7fTtcclxuICAgICAgICBwYXNzQ29uZmlnLmdldE1hdGVyaWFsID0gcGFzc0NvbmZpZy5nZXRNYXRlcmlhbCB8fCBkZWZhdWx0R2V0TWF0ZXJpYWw7XHJcbiAgICAgICAgcGFzc0NvbmZpZy5nZXRVbmlmb3JtID0gcGFzc0NvbmZpZy5nZXRVbmlmb3JtIHx8IGRlZmF1bHRHZXRVbmlmb3JtO1xyXG4gICAgICAgIC8vIFBFTkRJTkcgQmV0dGVyIHNvbHV0aW9uP1xyXG4gICAgICAgIHBhc3NDb25maWcuaXNNYXRlcmlhbENoYW5nZWQgPSBwYXNzQ29uZmlnLmlzTWF0ZXJpYWxDaGFuZ2VkIHx8IGRlZmF1bHRJc01hdGVyaWFsQ2hhbmdlZDtcclxuICAgICAgICBwYXNzQ29uZmlnLmJlZm9yZVJlbmRlciA9IHBhc3NDb25maWcuYmVmb3JlUmVuZGVyIHx8IG5vb3A7XHJcbiAgICAgICAgcGFzc0NvbmZpZy5hZnRlclJlbmRlciA9IHBhc3NDb25maWcuYWZ0ZXJSZW5kZXIgfHwgbm9vcDtcclxuXHJcbiAgICAgICAgdmFyIGlmUmVuZGVyT2JqZWN0ID0gcGFzc0NvbmZpZy5pZlJlbmRlciB8fCBkZWZhdWx0SWZSZW5kZXI7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlUHJvZ3JhbXMobGlzdCwgdGhpcy5fc2NlbmVSZW5kZXJpbmcsIHBhc3NDb25maWcpO1xyXG4gICAgICAgIGlmIChwYXNzQ29uZmlnLnNvcnRDb21wYXJlKSB7XHJcbiAgICAgICAgICAgIGxpc3Quc29ydChwYXNzQ29uZmlnLnNvcnRDb21wYXJlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNvbWUgY29tbW9uIGJ1aWx0aW4gdW5pZm9ybXNcclxuICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xyXG4gICAgICAgIHZhciB2RHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICB2YXIgdmlld3BvcnRVbmlmb3JtID0gW1xyXG4gICAgICAgICAgICB2aWV3cG9ydC54ICogdkRwciwgdmlld3BvcnQueSAqIHZEcHIsXHJcbiAgICAgICAgICAgIHZpZXdwb3J0LndpZHRoICogdkRwciwgdmlld3BvcnQuaGVpZ2h0ICogdkRwclxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdmFyIHdpbmRvd0RwciA9IHRoaXMuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICB2YXIgd2luZG93U2l6ZVVuaWZvcm0gPSB0aGlzLl9fY3VycmVudEZyYW1lQnVmZmVyXHJcbiAgICAgICAgICAgID8gW3RoaXMuX19jdXJyZW50RnJhbWVCdWZmZXIuZ2V0VGV4dHVyZVdpZHRoKCksIHRoaXMuX19jdXJyZW50RnJhbWVCdWZmZXIuZ2V0VGV4dHVyZUhlaWdodCgpXVxyXG4gICAgICAgICAgICA6IFt0aGlzLl93aWR0aCAqIHdpbmRvd0RwciwgdGhpcy5faGVpZ2h0ICogd2luZG93RHByXTtcclxuICAgICAgICAvLyBERVBSRUNBVEVEXHJcbiAgICAgICAgdmFyIHZpZXdwb3J0U2l6ZVVuaWZvcm0gPSBbXHJcbiAgICAgICAgICAgIHZpZXdwb3J0VW5pZm9ybVsyXSwgdmlld3BvcnRVbmlmb3JtWzNdXHJcbiAgICAgICAgXTtcclxuICAgICAgICB2YXIgdGltZSA9IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSB2aWV3IGFuZCBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICAgIGlmIChjYW1lcmEpIHtcclxuICAgICAgICAgICAgbWF0NC5jb3B5KG1hdHJpY2VzLlZJRVcsIGNhbWVyYS52aWV3TWF0cml4LmFycmF5KTtcclxuICAgICAgICAgICAgbWF0NC5jb3B5KG1hdHJpY2VzLlBST0pFQ1RJT04sIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmFycmF5KTtcclxuICAgICAgICAgICAgbWF0NC5jb3B5KG1hdHJpY2VzLlZJRVdJTlZFUlNFLCBjYW1lcmEud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWF0NC5pZGVudGl0eShtYXRyaWNlcy5WSUVXKTtcclxuICAgICAgICAgICAgbWF0NC5pZGVudGl0eShtYXRyaWNlcy5QUk9KRUNUSU9OKTtcclxuICAgICAgICAgICAgbWF0NC5pZGVudGl0eShtYXRyaWNlcy5WSUVXSU5WRVJTRSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1hdDQubXVsdGlwbHkobWF0cmljZXMuVklFV1BST0pFQ1RJT04sIG1hdHJpY2VzLlBST0pFQ1RJT04sIG1hdHJpY2VzLlZJRVcpO1xyXG4gICAgICAgIG1hdDQuaW52ZXJ0KG1hdHJpY2VzLlBST0pFQ1RJT05JTlZFUlNFLCBtYXRyaWNlcy5QUk9KRUNUSU9OKTtcclxuICAgICAgICBtYXQ0LmludmVydChtYXRyaWNlcy5WSUVXUFJPSkVDVElPTklOVkVSU0UsIG1hdHJpY2VzLlZJRVdQUk9KRUNUSU9OKTtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHRoaXMuZ2w7XHJcbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5fc2NlbmVSZW5kZXJpbmc7XHJcblxyXG4gICAgICAgIHZhciBwcmV2TWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIHByZXZQcm9ncmFtO1xyXG4gICAgICAgIHZhciBwcmV2UmVuZGVyYWJsZTtcclxuXHJcbiAgICAgICAgLy8gU3RhdHVzXHJcbiAgICAgICAgdmFyIGRlcHRoVGVzdCwgZGVwdGhNYXNrO1xyXG4gICAgICAgIHZhciBjdWxsaW5nLCBjdWxsRmFjZSwgZnJvbnRGYWNlO1xyXG4gICAgICAgIHZhciB0cmFuc3BhcmVudDtcclxuICAgICAgICB2YXIgZHJhd0lEO1xyXG4gICAgICAgIHZhciBjdXJyZW50VkFPO1xyXG4gICAgICAgIHZhciBtYXRlcmlhbFRha2VzVGV4dHVyZVNsb3Q7XHJcblxyXG4gICAgICAgIC8vIHZhciB2YW9FeHQgPSB0aGlzLmdldEdMRXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpO1xyXG4gICAgICAgIC8vIG5vdCB1c2UgdmFvRXh0LCBzb21lIHBsYXRmb3JtcyBtYXkgbWVzcyBpdCB1cC5cclxuICAgICAgICB2YXIgdmFvRXh0ID0gbnVsbDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJhYmxlID0gbGlzdFtpXTtcclxuICAgICAgICAgICAgdmFyIGlzU2NlbmVOb2RlID0gcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybSAhPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgd29ybGRNO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFpZlJlbmRlck9iamVjdChyZW5kZXJhYmxlKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFNraW5uZWQgbWVzaCB3aWxsIHRyYW5zZm9ybWVkIHRvIGpvaW50IHNwYWNlLiBJZ25vcmUgdGhlIG1lc2ggdHJhbnNmb3JtXHJcbiAgICAgICAgICAgIGlmIChpc1NjZW5lTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgd29ybGRNID0gKHJlbmRlcmFibGUuaXNTa2lubmVkTWVzaCAmJiByZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2goKSlcclxuICAgICAgICAgICAgICAgICAgICA/IG1hdHJpY2VzLklERU5USVRZIDogcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSByZW5kZXJhYmxlLmdlb21ldHJ5O1xyXG4gICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBwYXNzQ29uZmlnLmdldE1hdGVyaWFsLmNhbGwodGhpcywgcmVuZGVyYWJsZSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcHJvZ3JhbSA9IHJlbmRlcmFibGUuX19wcm9ncmFtO1xyXG4gICAgICAgICAgICB2YXIgc2hhZGVyID0gbWF0ZXJpYWwuc2hhZGVyO1xyXG5cclxuICAgICAgICAgICAgdmFyIGN1cnJlbnREcmF3SUQgPSBnZW9tZXRyeS5fX3VpZF9fICsgJy0nICsgcHJvZ3JhbS5fX3VpZF9fO1xyXG4gICAgICAgICAgICB2YXIgZHJhd0lEQ2hhbmdlZCA9IGN1cnJlbnREcmF3SUQgIT09IGRyYXdJRDtcclxuICAgICAgICAgICAgZHJhd0lEID0gY3VycmVudERyYXdJRDtcclxuICAgICAgICAgICAgaWYgKGRyYXdJRENoYW5nZWQgJiYgdmFvRXh0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPIFNlZW1zIG5lZWQgdG8gYmUgYm91bmQgdG8gbnVsbCBpbW1lZGlhdGVseSAob3IgYmVmb3JlIGJpbmQgYW5vdGhlciBwcm9ncmFtPykgaWYgdmFvIGlzIGNoYW5nZWRcclxuICAgICAgICAgICAgICAgIHZhb0V4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzU2NlbmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBtYXQ0LmNvcHkobWF0cmljZXMuV09STEQsIHdvcmxkTSk7XHJcbiAgICAgICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KG1hdHJpY2VzLldPUkxEVklFV1BST0pFQ1RJT04sIG1hdHJpY2VzLlZJRVdQUk9KRUNUSU9OLCB3b3JsZE0pO1xyXG4gICAgICAgICAgICAgICAgbWF0NC5tdWx0aXBseUFmZmluZShtYXRyaWNlcy5XT1JMRFZJRVcsIG1hdHJpY2VzLlZJRVcsIHdvcmxkTSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRElOVkVSU0UgfHxcclxuICAgICAgICAgICAgICAgICAgICBzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxESU5WRVJTRVRSQU5TUE9TRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdDQuaW52ZXJ0KG1hdHJpY2VzLldPUkxESU5WRVJTRSwgd29ybGRNKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxEVklFV0lOVkVSU0UgfHxcclxuICAgICAgICAgICAgICAgICAgICBzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxEVklFV0lOVkVSU0VUUkFOU1BPU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXQ0LmludmVydChtYXRyaWNlcy5XT1JMRFZJRVdJTlZFUlNFLCBtYXRyaWNlcy5XT1JMRFZJRVcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRlci5tYXRyaXhTZW1hbnRpY3MuV09STERWSUVXUFJPSkVDVElPTklOVkVSU0UgfHxcclxuICAgICAgICAgICAgICAgICAgICBzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFVFJBTlNQT1NFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0NC5pbnZlcnQobWF0cmljZXMuV09STERWSUVXUFJPSkVDVElPTklOVkVSU0UsIG1hdHJpY2VzLldPUkxEVklFV1BST0pFQ1RJT04pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBCZWZvcmUgcmVuZGVyIGhvb2tcclxuICAgICAgICAgICAgcmVuZGVyYWJsZS5iZWZvcmVSZW5kZXIgJiYgcmVuZGVyYWJsZS5iZWZvcmVSZW5kZXIodGhpcyk7XHJcbiAgICAgICAgICAgIHBhc3NDb25maWcuYmVmb3JlUmVuZGVyLmNhbGwodGhpcywgcmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHByZXZNYXRlcmlhbCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcHJvZ3JhbUNoYW5nZWQgPSBwcm9ncmFtICE9PSBwcmV2UHJvZ3JhbTtcclxuICAgICAgICAgICAgaWYgKHByb2dyYW1DaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTZXQgbGlnaHRzIG51bWJlclxyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5iaW5kKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy8gU2V0IHNvbWUgY29tbW9uIHVuaWZvcm1zXHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKF9nbCwgJ1ZJRVdQT1JUJywgdmlld3BvcnRVbmlmb3JtKTtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnV0lORE9XX1NJWkUnLCB3aW5kb3dTaXplVW5pZm9ybSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FtZXJhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdORUFSJywgY2FtZXJhLm5lYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnRkFSJywgY2FtZXJhLmZhcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKF9nbCwgJ0RFVklDRVBJWEVMUkFUSU8nLCB2RHByKTtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnVElNRScsIHRpbWUpO1xyXG4gICAgICAgICAgICAgICAgLy8gREVQUkVDQVRFRFxyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdWSUVXUE9SVF9TSVpFJywgdmlld3BvcnRTaXplVW5pZm9ybSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU2V0IGxpZ2h0cyB1bmlmb3Jtc1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBuZWVkcyBvcHRpbWl6ZWRcclxuICAgICAgICAgICAgICAgIGlmIChzY2VuZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lLnNldExpZ2h0VW5pZm9ybXMocHJvZ3JhbSwgcmVuZGVyYWJsZS5saWdodEdyb3VwLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0gPSBwcmV2UHJvZ3JhbTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gUHJvZ3JhbSBjaGFuZ2VzIGFsc28gbmVlZHMgcmVzZXQgdGhlIG1hdGVyaWFscy5cclxuICAgICAgICAgICAgaWYgKHByb2dyYW1DaGFuZ2VkIHx8IHBhc3NDb25maWcuaXNNYXRlcmlhbENoYW5nZWQoXHJcbiAgICAgICAgICAgICAgICByZW5kZXJhYmxlLCBwcmV2UmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHByZXZNYXRlcmlhbFxyXG4gICAgICAgICAgICApKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWwuZGVwdGhUZXN0ICE9PSBkZXB0aFRlc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5kZXB0aFRlc3QgPyBfZ2wuZW5hYmxlKF9nbC5ERVBUSF9URVNUKSA6IF9nbC5kaXNhYmxlKF9nbC5ERVBUSF9URVNUKTtcclxuICAgICAgICAgICAgICAgICAgICBkZXB0aFRlc3QgPSBtYXRlcmlhbC5kZXB0aFRlc3Q7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWwuZGVwdGhNYXNrICE9PSBkZXB0aE1hc2spIHtcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuZGVwdGhNYXNrKG1hdGVyaWFsLmRlcHRoTWFzayk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVwdGhNYXNrID0gbWF0ZXJpYWwuZGVwdGhNYXNrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnRyYW5zcGFyZW50ICE9PSB0cmFuc3BhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zcGFyZW50ID8gX2dsLmVuYWJsZShfZ2wuQkxFTkQpIDogX2dsLmRpc2FibGUoX2dsLkJMRU5EKTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc3BhcmVudCA9IG1hdGVyaWFsLnRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjYWNoZSBibGVuZGluZ1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmJsZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmJsZW5kKF9nbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IGJsZW5kIGZ1bmN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9nbC5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoX2dsLkZVTkNfQURELCBfZ2wuRlVOQ19BREQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfZ2wuYmxlbmRGdW5jU2VwYXJhdGUoX2dsLlNSQ19BTFBIQSwgX2dsLk9ORV9NSU5VU19TUkNfQUxQSEEsIF9nbC5PTkUsIF9nbC5PTkVfTUlOVVNfU1JDX0FMUEhBKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxUYWtlc1RleHR1cmVTbG90ID0gdGhpcy5fYmluZE1hdGVyaWFsKFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGUsIG1hdGVyaWFsLCBwcm9ncmFtLFxyXG4gICAgICAgICAgICAgICAgICAgIHByZXZSZW5kZXJhYmxlIHx8IG51bGwsIHByZXZNYXRlcmlhbCB8fCBudWxsLCBwcmV2UHJvZ3JhbSB8fCBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NDb25maWcuZ2V0VW5pZm9ybVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHByZXZNYXRlcmlhbCA9IG1hdGVyaWFsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgbWF0cml4U2VtYW50aWNLZXlzID0gc2hhZGVyLm1hdHJpeFNlbWFudGljS2V5cztcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1NjZW5lTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBtYXRyaXhTZW1hbnRpY0tleXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWMgPSBtYXRyaXhTZW1hbnRpY0tleXNba107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbWFudGljSW5mbyA9IHNoYWRlci5tYXRyaXhTZW1hbnRpY3Nbc2VtYW50aWNdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXRyaXggPSBtYXRyaWNlc1tzZW1hbnRpY107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbWFudGljSW5mby5pc1RyYW5zcG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4Tm9UcmFuc3Bvc2UgPSBtYXRyaWNlc1tzZW1hbnRpY0luZm8uc2VtYW50aWNOb1RyYW5zcG9zZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdDQudHJhbnNwb3NlKG1hdHJpeCwgbWF0cml4Tm9UcmFuc3Bvc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCBzZW1hbnRpY0luZm8udHlwZSwgc2VtYW50aWNJbmZvLnN5bWJvbCwgbWF0cml4KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHJlbmRlcmFibGUuY3VsbEZhY2UgIT09IGN1bGxGYWNlKSB7XHJcbiAgICAgICAgICAgICAgICBjdWxsRmFjZSA9IHJlbmRlcmFibGUuY3VsbEZhY2U7XHJcbiAgICAgICAgICAgICAgICBfZ2wuY3VsbEZhY2UoY3VsbEZhY2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLmZyb250RmFjZSAhPT0gZnJvbnRGYWNlKSB7XHJcbiAgICAgICAgICAgICAgICBmcm9udEZhY2UgPSByZW5kZXJhYmxlLmZyb250RmFjZTtcclxuICAgICAgICAgICAgICAgIF9nbC5mcm9udEZhY2UoZnJvbnRGYWNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5jdWxsaW5nICE9PSBjdWxsaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBjdWxsaW5nID0gcmVuZGVyYWJsZS5jdWxsaW5nO1xyXG4gICAgICAgICAgICAgICAgY3VsbGluZyA/IF9nbC5lbmFibGUoX2dsLkNVTExfRkFDRSkgOiBfZ2wuZGlzYWJsZShfZ2wuQ1VMTF9GQUNFKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBUT0RPIE5vdCB1cGRhdGUgc2tlbGV0b24gaW4gZWFjaCByZW5kZXJhYmxlLlxyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVTa2VsZXRvbihyZW5kZXJhYmxlLCBwcm9ncmFtLCBtYXRlcmlhbFRha2VzVGV4dHVyZVNsb3QpO1xyXG4gICAgICAgICAgICBpZiAoZHJhd0lEQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudFZBTyA9IHRoaXMuX2JpbmRWQU8odmFvRXh0LCBzaGFkZXIsIGdlb21ldHJ5LCBwcm9ncmFtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJPYmplY3QocmVuZGVyYWJsZSwgY3VycmVudFZBTyk7XHJcblxyXG4gICAgICAgICAgICAvLyBBZnRlciByZW5kZXIgaG9va1xyXG4gICAgICAgICAgICBwYXNzQ29uZmlnLmFmdGVyUmVuZGVyKHRoaXMsIHJlbmRlcmFibGUpO1xyXG4gICAgICAgICAgICByZW5kZXJhYmxlLmFmdGVyUmVuZGVyICYmIHJlbmRlcmFibGUuYWZ0ZXJSZW5kZXIodGhpcyk7XHJcblxyXG4gICAgICAgICAgICBwcmV2UHJvZ3JhbSA9IHByb2dyYW07XHJcbiAgICAgICAgICAgIHByZXZSZW5kZXJhYmxlID0gcmVuZGVyYWJsZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRPRE8gU2VlbXMgbmVlZCB0byBiZSBib3VuZCB0byBudWxsIGltbWVkaWF0ZWx5IGlmIHZhbyBpcyBjaGFuZ2VkP1xyXG4gICAgICAgIGlmICh2YW9FeHQpIHtcclxuICAgICAgICAgICAgdmFvRXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJyZW5kZXJwYXNzJywgdGhpcywgbGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TWF4Sm9pbnROdW1iZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2xpbmZvLmdldE1heEpvaW50TnVtYmVyKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVTa2VsZXRvbjogZnVuY3Rpb24gKG9iamVjdCwgcHJvZ3JhbSwgc2xvdCkge1xyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBza2VsZXRvbiA9IG9iamVjdC5za2VsZXRvbjtcclxuICAgICAgICAvLyBTZXQgcG9zZSBtYXRyaWNlcyBvZiBza2lubmVkIG1lc2hcclxuICAgICAgICBpZiAoc2tlbGV0b24pIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBVcGRhdGUgYmVmb3JlIGN1bGxpbmcuXHJcbiAgICAgICAgICAgIHNrZWxldG9uLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICBpZiAob2JqZWN0LmpvaW50cy5sZW5ndGggPiB0aGlzLl9nbGluZm8uZ2V0TWF4Sm9pbnROdW1iZXIoKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNraW5NYXRyaWNlc1RleHR1cmUgPSBza2VsZXRvbi5nZXRTdWJTa2luTWF0cmljZXNUZXh0dXJlKG9iamVjdC5fX3VpZF9fLCBvYmplY3Quam9pbnRzKTtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0udXNlVGV4dHVyZVNsb3QodGhpcywgc2tpbk1hdHJpY2VzVGV4dHVyZSwgc2xvdCk7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCAnMWknLCAnc2tpbk1hdHJpY2VzVGV4dHVyZScsIHNsb3QpO1xyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFmJywgJ3NraW5NYXRyaWNlc1RleHR1cmVTaXplJywgc2tpbk1hdHJpY2VzVGV4dHVyZS53aWR0aCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2tpbk1hdHJpY2VzQXJyYXkgPSBza2VsZXRvbi5nZXRTdWJTa2luTWF0cmljZXMob2JqZWN0Ll9fdWlkX18sIG9iamVjdC5qb2ludHMpO1xyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdTS0lOX01BVFJJWCcsIHNraW5NYXRyaWNlc0FycmF5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3JlbmRlck9iamVjdDogZnVuY3Rpb24gKHJlbmRlcmFibGUsIHZhbykge1xyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBnZW9tZXRyeSA9IHJlbmRlcmFibGUuZ2VvbWV0cnk7XHJcblxyXG4gICAgICAgIHZhciBnbERyYXdNb2RlID0gcmVuZGVyYWJsZS5tb2RlO1xyXG4gICAgICAgIGlmIChnbERyYXdNb2RlID09IG51bGwpIHtcclxuICAgICAgICAgICAgZ2xEcmF3TW9kZSA9IDB4MDAwNDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGlmIChnbERyYXdNb2RlID09PSBnbGVudW0uTElORVMgfHwgZ2xEcmF3TW9kZSA9PT0gZ2xlbnVtLkxJTkVfU1RSSVAgfHwgZ2xEcmF3TW9kZSA9PT0gZ2xlbnVtLkxJTkVfTE9PUCkge1xyXG4gICAgICAgIC8vICAgICBfZ2wubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKTtcclxuICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgIGlmICh2YW8uaW5kaWNlc0J1ZmZlcikge1xyXG4gICAgICAgICAgICB2YXIgdWludEV4dCA9IHRoaXMuZ2V0R0xFeHRlbnNpb24oJ09FU19lbGVtZW50X2luZGV4X3VpbnQnKTtcclxuICAgICAgICAgICAgdmFyIHVzZVVpbnRFeHQgPSB1aW50RXh0ICYmIChnZW9tZXRyeS5pbmRpY2VzIGluc3RhbmNlb2YgVWludDMyQXJyYXkpO1xyXG4gICAgICAgICAgICB2YXIgaW5kaWNlc1R5cGUgPSB1c2VVaW50RXh0ID8gX2dsLlVOU0lHTkVEX0lOVCA6IF9nbC5VTlNJR05FRF9TSE9SVDtcclxuXHJcbiAgICAgICAgICAgIF9nbC5kcmF3RWxlbWVudHMoZ2xEcmF3TW9kZSwgdmFvLmluZGljZXNCdWZmZXIuY291bnQsIGluZGljZXNUeXBlLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIFVzZSB2ZXJ0ZXggbnVtYmVyIGluIGJ1ZmZlclxyXG4gICAgICAgICAgICAvLyB2ZXJ0ZXhDb3VudCBtYXkgZ2V0IHRoZSB3cm9uZyB2YWx1ZSB3aGVuIGdlb21ldHJ5IGZvcmdldCB0byBtYXJrIGRpcnR5IGFmdGVyIHVwZGF0ZVxyXG4gICAgICAgICAgICBfZ2wuZHJhd0FycmF5cyhnbERyYXdNb2RlLCAwLCBnZW9tZXRyeS52ZXJ0ZXhDb3VudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfYmluZE1hdGVyaWFsOiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHByb2dyYW0sIHByZXZSZW5kZXJhYmxlLCBwcmV2TWF0ZXJpYWwsIHByZXZQcm9ncmFtLCBnZXRVbmlmb3JtVmFsdWUpIHtcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuICAgICAgICAvLyBQRU5ESU5HIFNhbWUgdGV4dHVyZSBpbiBkaWZmZXJlbnQgbWF0ZXJpYWwgdGFrZSBkaWZmZXJlbnQgc2xvdD9cclxuXHJcbiAgICAgICAgLy8gTWF5IHVzZSBzaGFkZXIgb2Ygb3RoZXIgbWF0ZXJpYWwgaWYgc2hhZGVyIGNvZGUgYXJlIHNhbWVcclxuICAgICAgICB2YXIgc2FtZVByb2dyYW0gPSBwcmV2UHJvZ3JhbSA9PT0gcHJvZ3JhbTtcclxuXHJcbiAgICAgICAgdmFyIGN1cnJlbnRUZXh0dXJlU2xvdCA9IHByb2dyYW0uY3VycmVudFRleHR1cmVTbG90KCk7XHJcbiAgICAgICAgdmFyIGVuYWJsZWRVbmlmb3JtcyA9IG1hdGVyaWFsLmdldEVuYWJsZWRVbmlmb3JtcygpO1xyXG4gICAgICAgIHZhciB0ZXh0dXJlVW5pZm9ybXMgPSBtYXRlcmlhbC5nZXRUZXh0dXJlVW5pZm9ybXMoKTtcclxuICAgICAgICB2YXIgcGxhY2Vob2xkZXJUZXh0dXJlID0gdGhpcy5fcGxhY2Vob2xkZXJUZXh0dXJlO1xyXG5cclxuICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IHRleHR1cmVVbmlmb3Jtcy5sZW5ndGg7IHUrKykge1xyXG4gICAgICAgICAgICB2YXIgc3ltYm9sID0gdGV4dHVyZVVuaWZvcm1zW3VdO1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybVZhbHVlID0gZ2V0VW5pZm9ybVZhbHVlKHJlbmRlcmFibGUsIG1hdGVyaWFsLCBzeW1ib2wpO1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybVR5cGUgPSBtYXRlcmlhbC51bmlmb3Jtc1tzeW1ib2xdLnR5cGU7XHJcbiAgICAgICAgICAgIC8vIE5vdCB1c2UgYGluc3RhbmNlb2ZgIHRvIGRldGVybWluZSBpZiBhIHZhbHVlIGlzIHRleHR1cmUgaW4gTWF0ZXJpYWwjYmluZC5cclxuICAgICAgICAgICAgLy8gVXNlIHR5cGUgaW5zdGVhZCwgaW4gc29tZSBjYXNlIHRleHR1cmUgbWF5IGJlIGluIGRpZmZlcmVudCBuYW1lc3BhY2VzLlxyXG4gICAgICAgICAgICAvLyBUT0RPIER1Y2sgdHlwZSB2YWxpZGF0ZS5cclxuICAgICAgICAgICAgaWYgKHVuaWZvcm1UeXBlID09PSAndCcgJiYgdW5pZm9ybVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBSZXNldCBzbG90XHJcbiAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWUuX19zbG90ID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUgPT09ICd0dicpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybVZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1WYWx1ZVtpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWVbaV0uX19zbG90ID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwbGFjZWhvbGRlclRleHR1cmUuX19zbG90ID0gLTE7XHJcblxyXG4gICAgICAgIC8vIFNldCB1bmlmb3Jtc1xyXG4gICAgICAgIGZvciAodmFyIHUgPSAwOyB1IDwgZW5hYmxlZFVuaWZvcm1zLmxlbmd0aDsgdSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBzeW1ib2wgPSBlbmFibGVkVW5pZm9ybXNbdV07XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtID0gbWF0ZXJpYWwudW5pZm9ybXNbc3ltYm9sXTtcclxuICAgICAgICAgICAgdmFyIHVuaWZvcm1WYWx1ZSA9IGdldFVuaWZvcm1WYWx1ZShyZW5kZXJhYmxlLCBtYXRlcmlhbCwgc3ltYm9sKTtcclxuICAgICAgICAgICAgdmFyIHVuaWZvcm1UeXBlID0gdW5pZm9ybS50eXBlO1xyXG4gICAgICAgICAgICB2YXIgaXNUZXh0dXJlID0gdW5pZm9ybVR5cGUgPT09ICd0JztcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1RleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdW5pZm9ybVZhbHVlIHx8ICF1bmlmb3JtVmFsdWUuaXNSZW5kZXJhYmxlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWUgPSBwbGFjZWhvbGRlclRleHR1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgICAgICAvLyBXaGVuIGJpbmRpbmcgdHdvIG1hdGVyaWFscyB3aXRoIHRoZSBzYW1lIHNoYWRlclxyXG4gICAgICAgICAgICAvLyBNYW55IHVuaWZvcm1zIHdpbGwgYmUgYmUgc2V0IHR3aWNlIGV2ZW4gaWYgdGhleSBoYXZlIHRoZSBzYW1lIHZhbHVlXHJcbiAgICAgICAgICAgIC8vIFNvIGFkZCBhIGV2YWx1YXRpb24gdG8gc2VlIGlmIHRoZSB1bmlmb3JtIGlzIHJlYWxseSBuZWVkZWQgdG8gYmUgc2V0XHJcbiAgICAgICAgICAgIGlmIChwcmV2TWF0ZXJpYWwgJiYgc2FtZVByb2dyYW0pIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcmV2VW5pZm9ybVZhbHVlID0gZ2V0VW5pZm9ybVZhbHVlKHByZXZSZW5kZXJhYmxlLCBwcmV2TWF0ZXJpYWwsIHN5bWJvbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2VW5pZm9ybVZhbHVlIHx8ICFwcmV2VW5pZm9ybVZhbHVlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZVbmlmb3JtVmFsdWUgPSBwbGFjZWhvbGRlclRleHR1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChwcmV2VW5pZm9ybVZhbHVlID09PSB1bmlmb3JtVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0aWxsIHRha2UgdGhlIHNsb3QgdG8gbWFrZSBzdXJlIHNhbWUgdGV4dHVyZSBpbiBkaWZmZXJlbnQgbWF0ZXJpYWxzIGhhdmUgc2FtZSBzbG90LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnRha2VDdXJyZW50VGV4dHVyZVNsb3QodGhpcywgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVuaWZvcm1UeXBlID09PSAndHYnICYmIHVuaWZvcm1WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1WYWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS50YWtlQ3VycmVudFRleHR1cmVTbG90KHRoaXMsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodW5pZm9ybVZhbHVlID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzVGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1WYWx1ZS5fX3Nsb3QgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNsb3QgPSBwcm9ncmFtLmN1cnJlbnRUZXh0dXJlU2xvdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCAnMWknLCBzeW1ib2wsIHNsb3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHsgLy8gVGV4dHVyZSB1bmlmb3JtIGlzIGVuYWJsZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS50YWtlQ3VycmVudFRleHR1cmVTbG90KHRoaXMsIHVuaWZvcm1WYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1WYWx1ZS5fX3Nsb3QgPSBzbG90O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIHVuaWZvcm0gdXNlIHNhbWUgdGV4dHVyZS4uXHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCAnMWknLCBzeW1ib2wsIHVuaWZvcm1WYWx1ZS5fX3Nsb3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodW5pZm9ybVZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1WYWx1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIFRleHR1cmUgQXJyYXlcclxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVHlwZSA9PT0gJ3R2Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvZ3JhbS5oYXNVbmlmb3JtKHN5bWJvbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJyID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmlmb3JtVmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtVmFsdWVbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS5fX3Nsb3QgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2xvdCA9IHByb2dyYW0uY3VycmVudFRleHR1cmVTbG90KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChzbG90KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdCh0aGlzLCB0ZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuX19zbG90ID0gc2xvdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRleHR1cmUuX19zbG90KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFpdicsIHN5bWJvbCwgYXJyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShfZ2wsIHVuaWZvcm0udHlwZSwgc3ltYm9sLCB1bmlmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCB1bmlmb3JtLnR5cGUsIHN5bWJvbCwgdW5pZm9ybVZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbmV3U2xvdCA9IHByb2dyYW0uY3VycmVudFRleHR1cmVTbG90KCk7XHJcbiAgICAgICAgLy8gVGV4dHVyZSBzbG90IG1heWJlIHVzZWQgb3V0IG9mIG1hdGVyaWFsLlxyXG4gICAgICAgIHByb2dyYW0ucmVzZXRUZXh0dXJlU2xvdChjdXJyZW50VGV4dHVyZVNsb3QpO1xyXG4gICAgICAgIHJldHVybiBuZXdTbG90O1xyXG4gICAgfSxcclxuXHJcbiAgICBfYmluZFZBTzogZnVuY3Rpb24gKHZhb0V4dCwgc2hhZGVyLCBnZW9tZXRyeSwgcHJvZ3JhbSkge1xyXG4gICAgICAgIHZhciBpc1N0YXRpYyA9ICFnZW9tZXRyeS5keW5hbWljO1xyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICB2YXIgdmFvSWQgPSB0aGlzLl9fdWlkX18gKyAnLScgKyBwcm9ncmFtLl9fdWlkX187XHJcbiAgICAgICAgdmFyIHZhbyA9IGdlb21ldHJ5Ll9fdmFvQ2FjaGVbdmFvSWRdO1xyXG4gICAgICAgIGlmICghdmFvKSB7XHJcbiAgICAgICAgICAgIHZhciBjaHVua3MgPSBnZW9tZXRyeS5nZXRCdWZmZXJDaHVua3ModGhpcyk7XHJcbiAgICAgICAgICAgIGlmICghY2h1bmtzIHx8ICFjaHVua3MubGVuZ3RoKSB7ICAvLyBFbXB0eSBtZXNoXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNodW5rID0gY2h1bmtzWzBdO1xyXG4gICAgICAgICAgICB2YXIgYXR0cmlidXRlQnVmZmVycyA9IGNodW5rLmF0dHJpYnV0ZUJ1ZmZlcnM7XHJcbiAgICAgICAgICAgIHZhciBpbmRpY2VzQnVmZmVyID0gY2h1bmsuaW5kaWNlc0J1ZmZlcjtcclxuXHJcbiAgICAgICAgICAgIHZhciBhdmFpbGFibGVBdHRyaWJ1dGVzID0gW107XHJcbiAgICAgICAgICAgIHZhciBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUJ1ZmZlckluZm8gPSBhdHRyaWJ1dGVCdWZmZXJzW2FdO1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWMgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLnNlbWFudGljO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN5bWJvbDtcclxuICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpY0luZm8gPSBzaGFkZXIuYXR0cmlidXRlU2VtYW50aWNzW3NlbWFudGljXTtcclxuICAgICAgICAgICAgICAgICAgICBzeW1ib2wgPSBzZW1hbnRpY0luZm8gJiYgc2VtYW50aWNJbmZvLnN5bWJvbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbCA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc3ltYm9sICYmIHByb2dyYW0uYXR0cmlidXRlc1tzeW1ib2xdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlQXR0cmlidXRlcy5wdXNoKGF0dHJpYnV0ZUJ1ZmZlckluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMucHVzaChzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YW8gPSBuZXcgVmVydGV4QXJyYXlPYmplY3QoXHJcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlQXR0cmlidXRlU3ltYm9scyxcclxuICAgICAgICAgICAgICAgIGluZGljZXNCdWZmZXJcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1N0YXRpYykge1xyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkuX192YW9DYWNoZVt2YW9JZF0gPSB2YW87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBuZWVkc0JpbmRBdHRyaWJ1dGVzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIHZlcnRleCBvYmplY3QgYXJyYXkgY29zdCBhIGxvdFxyXG4gICAgICAgIC8vIFNvIHdlIGRvbid0IHVzZSBpdCBvbiB0aGUgZHluYW1pYyBvYmplY3RcclxuICAgICAgICBpZiAodmFvRXh0ICYmIGlzU3RhdGljKSB7XHJcbiAgICAgICAgICAgIC8vIFVzZSB2ZXJ0ZXggYXJyYXkgb2JqZWN0XHJcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9ibG9nLnRvamljb2RlLmNvbS8yMDEyLzEwL29lc3ZlcnRleGFycmF5b2JqZWN0LWV4dGVuc2lvbi5odG1sXHJcbiAgICAgICAgICAgIGlmICh2YW8udmFvID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHZhby52YW8gPSB2YW9FeHQuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5lZWRzQmluZEF0dHJpYnV0ZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YW9FeHQuYmluZFZlcnRleEFycmF5T0VTKHZhby52YW8pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGF2YWlsYWJsZUF0dHJpYnV0ZXMgPSB2YW8uYXZhaWxhYmxlQXR0cmlidXRlcztcclxuICAgICAgICB2YXIgaW5kaWNlc0J1ZmZlciA9IHZhby5pbmRpY2VzQnVmZmVyO1xyXG5cclxuICAgICAgICBpZiAobmVlZHNCaW5kQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICB2YXIgbG9jYXRpb25MaXN0ID0gcHJvZ3JhbS5lbmFibGVBdHRyaWJ1dGVzKHRoaXMsIHZhby5hdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzLCAodmFvRXh0ICYmIGlzU3RhdGljICYmIHZhbykpO1xyXG4gICAgICAgICAgICAvLyBTZXR0aW5nIGF0dHJpYnV0ZXM7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXZhaWxhYmxlQXR0cmlidXRlcy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gbG9jYXRpb25MaXN0W2FdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUJ1ZmZlckluZm8gPSBhdmFpbGFibGVBdHRyaWJ1dGVzW2FdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGF0dHJpYnV0ZUJ1ZmZlckluZm8uYnVmZmVyO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNpemUgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLnNpemU7XHJcbiAgICAgICAgICAgICAgICB2YXIgZ2xUeXBlID0gYXR0cmlidXRlQnVmZmVyVHlwZU1hcFthdHRyaWJ1dGVCdWZmZXJJbmZvLnR5cGVdIHx8IF9nbC5GTE9BVDtcclxuXHJcbiAgICAgICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlcihfZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgX2dsLnZlcnRleEF0dHJpYlBvaW50ZXIobG9jYXRpb24sIHNpemUsIGdsVHlwZSwgZmFsc2UsIDAsIDApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZ2VvbWV0cnkuaXNVc2VJbmRpY2VzKCkpIHtcclxuICAgICAgICAgICAgICAgIF9nbC5iaW5kQnVmZmVyKF9nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgaW5kaWNlc0J1ZmZlci5idWZmZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmFvO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW5kZXJQcmVaOiBmdW5jdGlvbiAobGlzdCwgc2NlbmUsIGNhbWVyYSkge1xyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBwcmVaUGFzc01hdGVyaWFsID0gdGhpcy5fcHJlek1hdGVyaWFsIHx8IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LnByZXoudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucHJlei5mcmFnbWVudCcpKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX3ByZXpNYXRlcmlhbCA9IHByZVpQYXNzTWF0ZXJpYWw7XHJcblxyXG4gICAgICAgIF9nbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgIF9nbC5kZXB0aE1hc2sodHJ1ZSk7XHJcblxyXG4gICAgICAgIC8vIFN0YXR1c1xyXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyhsaXN0LCBjYW1lcmEsIHtcclxuICAgICAgICAgICAgaWZSZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIXJlbmRlcmFibGUuaWdub3JlUHJlWjtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBwcmV2UmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdEEgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdEIgPSBwcmV2UmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtYXRBLmdldCgnZGlmZnVzZU1hcCcpICE9PSBtYXRCLmdldCgnZGlmZnVzZU1hcCcpXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgKG1hdEEuZ2V0KCdhbHBoYUN1dG9mZicpIHx8IDApICE9PSAobWF0Qi5nZXQoJ2FscGhhQ3V0b2ZmJykgfHwgMCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGdldFVuaWZvcm06IGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBkZXB0aE1hdGVyaWFsLCBzeW1ib2wpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzeW1ib2wgPT09ICdhbHBoYU1hcCcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ2RpZmZ1c2VNYXAnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ2FscGhhQ3V0b2ZmJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLm1hdGVyaWFsLmlzRGVmaW5lZCgnZnJhZ21lbnQnLCAnQUxQSEFfVEVTVCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdkaWZmdXNlTWFwJylcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFscGhhQ3V0b2ZmID0gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ2FscGhhQ3V0b2ZmJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbHBoYUN1dG9mZiB8fCAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3V2UmVwZWF0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgndXZSZXBlYXQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3V2T2Zmc2V0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgndXZPZmZzZXQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXB0aE1hdGVyaWFsLmdldChzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZVpQYXNzTWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNvcnQ6IHRoaXMub3BhcXVlU29ydENvbXBhcmVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgX2dsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgZ2l2ZW4gc2NlbmUsIGluY2x1ZGluZyBhbGwgZ2VvbWV0cmlzLCB0ZXh0dXJlcyBhbmQgc2hhZGVycyBpbiB0aGUgc2NlbmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZVNjZW5lOiBmdW5jdGlvbihzY2VuZSkge1xyXG4gICAgICAgIHRoaXMuZGlzcG9zZU5vZGUoc2NlbmUsIHRydWUsIHRydWUpO1xyXG4gICAgICAgIHNjZW5lLmRpc3Bvc2UoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdpdmVuIG5vZGUsIGluY2x1ZGluZyBhbGwgZ2VvbWV0cmllcywgdGV4dHVyZXMgYW5kIHNoYWRlcnMgYXR0YWNoZWQgb24gaXQgb3IgaXRzIGRlc2NlbmRhbnRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBub2RlXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkaXNwb3NlR2VvbWV0cnk9ZmFsc2VdIElmIGRpc3Bvc2UgdGhlIGdlb21ldHJpZXMgdXNlZCBpbiB0aGUgZGVzY2VuZGFudCBtZXNoXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkaXNwb3NlVGV4dHVyZT1mYWxzZV0gSWYgZGlzcG9zZSB0aGUgdGV4dHVyZXMgdXNlZCBpbiB0aGUgZGVzY2VuZGFudCBtZXNoXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VOb2RlOiBmdW5jdGlvbihyb290LCBkaXNwb3NlR2VvbWV0cnksIGRpc3Bvc2VUZXh0dXJlKSB7XHJcbiAgICAgICAgLy8gRGV0dGFjaGVkIGZyb20gcGFyZW50XHJcbiAgICAgICAgaWYgKHJvb3QuZ2V0UGFyZW50KCkpIHtcclxuICAgICAgICAgICAgcm9vdC5nZXRQYXJlbnQoKS5yZW1vdmUocm9vdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBkaXNwb3NlZE1hcCA9IHt9O1xyXG4gICAgICAgIHJvb3QudHJhdmVyc2UoZnVuY3Rpb24obm9kZSkge1xyXG4gICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBub2RlLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICBpZiAobm9kZS5nZW9tZXRyeSAmJiBkaXNwb3NlR2VvbWV0cnkpIHtcclxuICAgICAgICAgICAgICAgIG5vZGUuZ2VvbWV0cnkuZGlzcG9zZSh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGlzcG9zZVRleHR1cmUgJiYgbWF0ZXJpYWwgJiYgIWRpc3Bvc2VkTWFwW21hdGVyaWFsLl9fdWlkX19dKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZVVuaWZvcm1zID0gbWF0ZXJpYWwuZ2V0VGV4dHVyZVVuaWZvcm1zKCk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IHRleHR1cmVVbmlmb3Jtcy5sZW5ndGg7IHUrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtTmFtZSA9IHRleHR1cmVVbmlmb3Jtc1t1XTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gbWF0ZXJpYWwudW5pZm9ybXNbdW5pZm9ybU5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtVHlwZSA9IG1hdGVyaWFsLnVuaWZvcm1zW3VuaWZvcm1OYW1lXS50eXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodW5pZm9ybVR5cGUgPT09ICd0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWwuZGlzcG9zZSAmJiB2YWwuZGlzcG9zZSh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUgPT09ICd0dicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB2YWwubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxba10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxba10uZGlzcG9zZSAmJiB2YWxba10uZGlzcG9zZSh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRpc3Bvc2VkTWFwW21hdGVyaWFsLl9fdWlkX19dID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBQYXJ0aWNsZSBzeXN0ZW0gYW5kIEFtYmllbnRDdWJlbWFwIGxpZ2h0IG5lZWQgdG8gZGlzcG9zZVxyXG4gICAgICAgICAgICBpZiAobm9kZS5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLmRpc3Bvc2UodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdpdmVuIGdlb21ldHJ5XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuR2VvbWV0cnl9IGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VHZW9tZXRyeTogZnVuY3Rpb24oZ2VvbWV0cnkpIHtcclxuICAgICAgICBnZW9tZXRyeS5kaXNwb3NlKHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgZ2l2ZW4gdGV4dHVyZVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlRleHR1cmV9IHRleHR1cmVcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZVRleHR1cmU6IGZ1bmN0aW9uKHRleHR1cmUpIHtcclxuICAgICAgICB0ZXh0dXJlLmRpc3Bvc2UodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBnaXZlbiBmcmFtZSBidWZmZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5GcmFtZUJ1ZmZlcn0gZnJhbWVCdWZmZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZUZyYW1lQnVmZmVyOiBmdW5jdGlvbihmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgIGZyYW1lQnVmZmVyLmRpc3Bvc2UodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAoKSB7fSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgc2NyZWVuIGNvb3JkcyB0byBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcyhOREMpXHJcbiAgICAgKiBTY3JlZW4gY29vcmRzIGNhbiBnZXQgZnJvbSBtb3VzZSBldmVudCwgaXQgaXMgcG9zaXRpb25lZCByZWxhdGl2ZSB0byBjYW52YXMgZWxlbWVudFxyXG4gICAgICogTkRDIGNhbiBiZSB1c2VkIGluIHJheSBjYXN0aW5nIHdpdGggQ2FtZXJhLnByb3RvdHlwZS5jYXN0UmF5IG1ldGhvZHNcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgICAgIHhcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gICAgICAgeVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBbb3V0XVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzY3JlZW5Ub05EQzogZnVuY3Rpb24oeCwgeSwgb3V0KSB7XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSW52ZXJ0IHk7XHJcbiAgICAgICAgeSA9IHRoaXMuX2hlaWdodCAtIHk7XHJcblxyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7XHJcbiAgICAgICAgdmFyIGFyciA9IG91dC5hcnJheTtcclxuICAgICAgICBhcnJbMF0gPSAoeCAtIHZpZXdwb3J0LngpIC8gdmlld3BvcnQud2lkdGg7XHJcbiAgICAgICAgYXJyWzBdID0gYXJyWzBdICogMiAtIDE7XHJcbiAgICAgICAgYXJyWzFdID0gKHkgLSB2aWV3cG9ydC55KSAvIHZpZXdwb3J0LmhlaWdodDtcclxuICAgICAgICBhcnJbMV0gPSBhcnJbMV0gKiAyIC0gMTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH1cclxufSk7XHJcblxyXG4vKipcclxuICogT3BhcXVlIHJlbmRlcmFibGVzIGNvbXBhcmUgZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5SZW5kZXJhYmxlfSB4XHJcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyYWJsZX0geVxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKiBAc3RhdGljXHJcbiAqL1xyXG5SZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZSA9IFJlbmRlcmVyLnByb3RvdHlwZS5vcGFxdWVTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uKHgsIHkpIHtcclxuICAgIC8vIFByaW9yaXR5IHJlbmRlck9yZGVyIC0+IHByb2dyYW0gLT4gbWF0ZXJpYWwgLT4gZ2VvbWV0cnlcclxuICAgIGlmICh4LnJlbmRlck9yZGVyID09PSB5LnJlbmRlck9yZGVyKSB7XHJcbiAgICAgICAgaWYgKHguX19wcm9ncmFtID09PSB5Ll9fcHJvZ3JhbSkge1xyXG4gICAgICAgICAgICBpZiAoeC5tYXRlcmlhbCA9PT0geS5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHguZ2VvbWV0cnkuX191aWRfXyAtIHkuZ2VvbWV0cnkuX191aWRfXztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geC5tYXRlcmlhbC5fX3VpZF9fIC0geS5tYXRlcmlhbC5fX3VpZF9fO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoeC5fX3Byb2dyYW0gJiYgeS5fX3Byb2dyYW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHguX19wcm9ncmFtLl9fdWlkX18gLSB5Ll9fcHJvZ3JhbS5fX3VpZF9fO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHJldHVybiB4LnJlbmRlck9yZGVyIC0geS5yZW5kZXJPcmRlcjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc3BhcmVudCByZW5kZXJhYmxlcyBjb21wYXJlIGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyYWJsZX0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmFibGV9IGJcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICogQHN0YXRpY1xyXG4gKi9cclxuUmVuZGVyZXIudHJhbnNwYXJlbnRTb3J0Q29tcGFyZSA9IFJlbmRlcmVyLnByb3RvdHlwZS50cmFuc3BhcmVudFNvcnRDb21wYXJlID0gZnVuY3Rpb24oeCwgeSkge1xyXG4gICAgLy8gUHJpb3JpdHkgcmVuZGVyT3JkZXIgLT4gZGVwdGggLT4gcHJvZ3JhbSAtPiBtYXRlcmlhbCAtPiBnZW9tZXRyeVxyXG5cclxuICAgIGlmICh4LnJlbmRlck9yZGVyID09PSB5LnJlbmRlck9yZGVyKSB7XHJcbiAgICAgICAgaWYgKHguX19kZXB0aCA9PT0geS5fX2RlcHRoKSB7XHJcbiAgICAgICAgICAgIGlmICh4Ll9fcHJvZ3JhbSA9PT0geS5fX3Byb2dyYW0pIHtcclxuICAgICAgICAgICAgICAgIGlmICh4Lm1hdGVyaWFsID09PSB5Lm1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguZ2VvbWV0cnkuX191aWRfXyAtIHkuZ2VvbWV0cnkuX191aWRfXztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB4Lm1hdGVyaWFsLl9fdWlkX18gLSB5Lm1hdGVyaWFsLl9fdWlkX187XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHguX19wcm9ncmFtICAmJiB5Ll9fcHJvZ3JhbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHguX19wcm9ncmFtLl9fdWlkX18gLSB5Ll9fcHJvZ3JhbS5fX3VpZF9fO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBEZXB0aCBpcyBuZWdhdGl2ZVxyXG4gICAgICAgIC8vIFNvIGZhcnRoZXIgb2JqZWN0IGhhcyBzbWFsbGVyIGRlcHRoIHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHguX19kZXB0aCAtIHkuX19kZXB0aDtcclxuICAgIH1cclxuICAgIHJldHVybiB4LnJlbmRlck9yZGVyIC0geS5yZW5kZXJPcmRlcjtcclxufTtcclxuXHJcbi8vIFRlbXBvcmFyeSB2YXJpYWJsZXNcclxudmFyIG1hdHJpY2VzID0ge1xyXG4gICAgSURFTlRJVFk6IG1hdDRDcmVhdGUoKSxcclxuXHJcbiAgICBXT1JMRDogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFVzogbWF0NENyZWF0ZSgpLFxyXG4gICAgUFJPSkVDVElPTjogbWF0NENyZWF0ZSgpLFxyXG4gICAgV09STERWSUVXOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBWSUVXUFJPSkVDVElPTjogbWF0NENyZWF0ZSgpLFxyXG4gICAgV09STERWSUVXUFJPSkVDVElPTjogbWF0NENyZWF0ZSgpLFxyXG5cclxuICAgIFdPUkxESU5WRVJTRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV0lOVkVSU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFBST0pFQ1RJT05JTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdJTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBWSUVXUFJPSkVDVElPTklOVkVSU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXHJcblxyXG4gICAgV09STERUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFZJRVdUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFBST0pFQ1RJT05UUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFV1RSQU5TUE9TRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV1BST0pFQ1RJT05UUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFV1BST0pFQ1RJT05UUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxESU5WRVJTRVRSQU5TUE9TRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV0lOVkVSU0VUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFBST0pFQ1RJT05JTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdJTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBWSUVXUFJPSkVDVElPTklOVkVSU0VUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKClcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LlJlbmRlcmVyLkNPTE9SX0JVRkZFUl9CSVRcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmVyLkNPTE9SX0JVRkZFUl9CSVQgPSBnbGVudW0uQ09MT1JfQlVGRkVSX0JJVDtcclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuUmVuZGVyZXIuREVQVEhfQlVGRkVSX0JJVFxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyZXIuREVQVEhfQlVGRkVSX0JJVCA9IGdsZW51bS5ERVBUSF9CVUZGRVJfQklUO1xyXG4vKipcclxuICogQG5hbWUgY2xheS5SZW5kZXJlci5TVEVOQ0lMX0JVRkZFUl9CSVRcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmVyLlNURU5DSUxfQlVGRkVSX0JJVCA9IGdsZW51bS5TVEVOQ0lMX0JVRkZFUl9CSVQ7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBSZW5kZXJlcjtcclxuIiwiaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlZlY3RvcjNcclxuICogQHBhcmFtIHtudW1iZXJ9IHhcclxuICogQHBhcmFtIHtudW1iZXJ9IHlcclxuICogQHBhcmFtIHtudW1iZXJ9IHpcclxuICovXHJcbnZhciBWZWN0b3IzID0gZnVuY3Rpb24oeCwgeSwgeikge1xyXG5cclxuICAgIHggPSB4IHx8IDA7XHJcbiAgICB5ID0geSB8fCAwO1xyXG4gICAgeiA9IHogfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JhZ2Ugb2YgVmVjdG9yMywgcmVhZCBhbmQgd3JpdGUgb2YgeCwgeSwgeiB3aWxsIGNoYW5nZSB0aGUgdmFsdWVzIGluIGFycmF5XHJcbiAgICAgKiBBbGwgbWV0aG9kcyBhbHNvIG9wZXJhdGUgb24gdGhlIGFycmF5IGluc3RlYWQgb2YgeCwgeSwgeiBjb21wb25lbnRzXHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjMjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSB2ZWMzLmZyb21WYWx1ZXMoeCwgeSwgeik7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXJ0eSBmbGFnIGlzIHVzZWQgYnkgdGhlIE5vZGUgdG8gZGV0ZXJtaW5lXHJcbiAgICAgKiBpZiB0aGUgbWF0cml4IGlzIHVwZGF0ZWQgdG8gbGF0ZXN0XHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yMyNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuVmVjdG9yMy5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IFZlY3RvcjMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYiB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCwgeSBhbmQgeiBjb21wb25lbnRzXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB6XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24gKHgsIHksIHopIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0geDtcclxuICAgICAgICB0aGlzLmFycmF5WzFdID0geTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gejtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSBhcnJbMF07XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IGFyclsxXTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gYXJyWzJdO1xyXG5cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgVmVjdG9yM1xyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yMyh0aGlzLngsIHRoaXMueSwgdGhpcy56KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGZyb20gYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcm9zcyBwcm9kdWN0IG9mIHNlbGYgYW5kIGIsIHdyaXR0ZW4gdG8gYSBWZWN0b3IzIG91dFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgY3Jvc3M6IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgdmVjMy5jcm9zcyh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIGRpc3RhbmNlXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGlzdDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5kaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLmRpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBkaXZpZGVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBkaXY6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5kaXYodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpdmlkZSBzZWxmIGJ5IGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBkaXZpZGU6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5kaXZpZGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMuZG90KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIG9mIGxlbmd0aFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBsZW46IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5sZW4odGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMubGVuZ3RoKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogTGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBhIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgdFxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBsZXJwOiBmdW5jdGlvbiAoYSwgYiwgdCkge1xyXG4gICAgICAgIHZlYzMubGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWluaW11bSBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgbWluOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMubWluKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXhpbXVtIG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBtYXg6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5tYXgodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICB2ZWMzLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXV0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5tdWx0aXBseSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTmVnYXRlIHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgbmVnYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmVjMy5uZWdhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbGl6ZSBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZlYzMubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSByYW5kb20geCwgeSwgeiBjb21wb25lbnRzIHdpdGggYSBnaXZlbiBzY2FsZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICByYW5kb206IGZ1bmN0aW9uIChzY2FsZSkge1xyXG4gICAgICAgIHZlYzMucmFuZG9tKHRoaXMuYXJyYXksIHNjYWxlKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgc2VsZlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgc2NhbGU6IGZ1bmN0aW9uIChzKSB7XHJcbiAgICAgICAgdmVjMy5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgYiBhbmQgYWRkIHRvIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgc2NhbGVBbmRBZGQ6IGZ1bmN0aW9uIChiLCBzKSB7XHJcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckRpc3Q6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMuc3FyRGlzdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxdWFyZWREaXN0YW5jZTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5zcXVhcmVkRGlzdGFuY2UodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWRMZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3FyTGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMuc3FyTGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLnNxdWFyZWRMZW5ndGgodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHN1YnRyYWN0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgc3ViOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuc3ViKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdWJ0cmFjdCBiIGZyb20gc2VsZlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHN1YnRyYWN0OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuc3VidHJhY3QodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgzIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQzOiBmdW5jdGlvbiAobSkge1xyXG4gICAgICAgIHZlYzMudHJhbnNmb3JtTWF0Myh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNmb3JtIHNlbGYgd2l0aCBhIE1hdHJpeDQgbVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRyYW5zZm9ybU1hdDQ6IGZ1bmN0aW9uIChtKSB7XHJcbiAgICAgICAgdmVjMy50cmFuc2Zvcm1NYXQ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBRdWF0ZXJuaW9uIHFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1RdWF0OiBmdW5jdGlvbiAocSkge1xyXG4gICAgICAgIHZlYzMudHJhbnNmb3JtUXVhdCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBxLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhc25mb3JtIHNlbGYgaW50byBwcm9qZWN0aW9uIHNwYWNlIHdpdGggbVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGFwcGx5UHJvamVjdGlvbjogZnVuY3Rpb24gKG0pIHtcclxuICAgICAgICB2YXIgdiA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgbSA9IG0uYXJyYXk7XHJcblxyXG4gICAgICAgIC8vIFBlcnNwZWN0aXZlIHByb2plY3Rpb25cclxuICAgICAgICBpZiAobVsxNV0gPT09IDApIHtcclxuICAgICAgICAgICAgdmFyIHcgPSAtMSAvIHZbMl07XHJcbiAgICAgICAgICAgIHZbMF0gPSBtWzBdICogdlswXSAqIHc7XHJcbiAgICAgICAgICAgIHZbMV0gPSBtWzVdICogdlsxXSAqIHc7XHJcbiAgICAgICAgICAgIHZbMl0gPSAobVsxMF0gKiB2WzJdICsgbVsxNF0pICogdztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZbMF0gPSBtWzBdICogdlswXSArIG1bMTJdO1xyXG4gICAgICAgICAgICB2WzFdID0gbVs1XSAqIHZbMV0gKyBtWzEzXTtcclxuICAgICAgICAgICAgdlsyXSA9IG1bMTBdICogdlsyXSArIG1bMTRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICBldWxlckZyb21RdWF0OiBmdW5jdGlvbihxLCBvcmRlcikge1xyXG4gICAgICAgIFZlY3RvcjMuZXVsZXJGcm9tUXVhdCh0aGlzLCBxLCBvcmRlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIGV1bGVyRnJvbU1hdDM6IGZ1bmN0aW9uIChtLCBvcmRlcikge1xyXG4gICAgICAgIFZlY3RvcjMuZXVsZXJGcm9tTWF0Myh0aGlzLCBtLCBvcmRlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xyXG4vLyBHZXR0ZXIgYW5kIFNldHRlclxyXG5pZiAoZGVmaW5lUHJvcGVydHkpIHtcclxuXHJcbiAgICB2YXIgcHJvdG8gPSBWZWN0b3IzLnByb3RvdHlwZTtcclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgeFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzBdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVswXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneScsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMV07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzFdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHpcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd6Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVsyXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMl0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5cclxuLy8gU3VwcGx5IG1ldGhvZHMgdGhhdCBhcmUgbm90IGluIHBsYWNlXHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLmFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5hZGQob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB4XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHlcclxuICogQHBhcmFtICB7bnVtYmVyfSAgelxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnNldCA9IGZ1bmN0aW9uKG91dCwgeCwgeSwgeikge1xyXG4gICAgdmVjMy5zZXQob3V0LmFycmF5LCB4LCB5LCB6KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLmNvcHkgPSBmdW5jdGlvbihvdXQsIGIpIHtcclxuICAgIHZlYzMuY29weShvdXQuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5jcm9zcyA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5jcm9zcyhvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5kaXN0ID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgcmV0dXJuIHZlYzMuZGlzdGFuY2UoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5kaXN0YW5jZSA9IFZlY3RvcjMuZGlzdDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMuZGl2ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMzLmRpdmlkZShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMuZGl2aWRlID0gVmVjdG9yMy5kaXY7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IzLmRvdCA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHJldHVybiB2ZWMzLmRvdChhLmFycmF5LCBiLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5sZW4gPSBmdW5jdGlvbihiKSB7XHJcbiAgICByZXR1cm4gdmVjMy5sZW5ndGgoYi5hcnJheSk7XHJcbn07XHJcblxyXG4vLyBWZWN0b3IzLmxlbmd0aCA9IFZlY3RvcjMubGVuO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgdFxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLmxlcnAgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHQpIHtcclxuICAgIHZlYzMubGVycChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5taW4ob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMzLm1heChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5tdWx0aXBseShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5tdWx0aXBseSA9IFZlY3RvcjMubXVsO1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMubmVnYXRlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2ZWMzLm5lZ2F0ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2ZWMzLm5vcm1hbGl6ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5yYW5kb20gPSBmdW5jdGlvbihvdXQsIHNjYWxlKSB7XHJcbiAgICB2ZWMzLnJhbmRvbShvdXQuYXJyYXksIHNjYWxlKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBzY2FsZSkge1xyXG4gICAgdmVjMy5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHNjYWxlKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjMuc3FyRGlzdCA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHJldHVybiB2ZWMzLnNxckRpc3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IzLnNxdWFyZWREaXN0YW5jZSA9IFZlY3RvcjMuc3FyRGlzdDtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IzLnNxckxlbiA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHJldHVybiB2ZWMzLnNxckxlbihhLmFycmF5KTtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5zcXVhcmVkTGVuZ3RoID0gVmVjdG9yMy5zcXJMZW47XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnN1YiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5zdWJ0cmFjdChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5zdWJ0cmFjdCA9IFZlY3RvcjMuc3ViO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtNYXRyaXgzfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMudHJhbnNmb3JtTWF0MyA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMy50cmFuc2Zvcm1NYXQzKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnRyYW5zZm9ybU1hdDQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZlYzMudHJhbnNmb3JtTWF0NChvdXQuYXJyYXksIGEuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnRyYW5zZm9ybVF1YXQgPSBmdW5jdGlvbihvdXQsIGEsIHEpIHtcclxuICAgIHZlYzMudHJhbnNmb3JtUXVhdChvdXQuYXJyYXksIGEuYXJyYXksIHEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gY2xhbXAodmFsLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIHZhbCA8IG1pbiA/IG1pbiA6ICh2YWwgPiBtYXggPyBtYXggOiB2YWwpO1xyXG59XHJcbnZhciBhdGFuMiA9IE1hdGguYXRhbjI7XHJcbnZhciBhc2luID0gTWF0aC5hc2luO1xyXG52YXIgYWJzID0gTWF0aC5hYnM7XHJcbi8qKlxyXG4gKiBDb252ZXJ0IHF1YXRlcm5pb24gdG8gZXVsZXIgYW5nbGVcclxuICogUXVhdGVybmlvbiBtdXN0IGJlIG5vcm1hbGl6ZWRcclxuICogRnJvbSB0aHJlZS5qc1xyXG4gKi9cclxuVmVjdG9yMy5ldWxlckZyb21RdWF0ID0gZnVuY3Rpb24gKG91dCwgcSwgb3JkZXIpIHtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcSA9IHEuYXJyYXk7XHJcblxyXG4gICAgdmFyIHRhcmdldCA9IG91dC5hcnJheTtcclxuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXTtcclxuICAgIHZhciB4MiA9IHggKiB4O1xyXG4gICAgdmFyIHkyID0geSAqIHk7XHJcbiAgICB2YXIgejIgPSB6ICogejtcclxuICAgIHZhciB3MiA9IHcgKiB3O1xyXG5cclxuICAgIHZhciBvcmRlciA9IChvcmRlciB8fCAnWFlaJykudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICBzd2l0Y2ggKG9yZGVyKSB7XHJcbiAgICAgICAgY2FzZSAnWFlaJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoMiAqICh4ICogdyAtIHkgKiB6KSwgKHcyIC0geDIgLSB5MiArIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGFzaW4oY2xhbXAoMiAqICh4ICogeiArIHkgKiB3KSwgLSAxLCAxKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKDIgKiAoeiAqIHcgLSB4ICogeSksICh3MiArIHgyIC0geTIgLSB6MikpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWFonOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhc2luKGNsYW1wKDIgKiAoeCAqIHcgLSB5ICogeiksIC0gMSwgMSkpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMigyICogKHggKiB6ICsgeSAqIHcpLCAodzIgLSB4MiAtIHkyICsgejIpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIoMiAqICh4ICogeSArIHogKiB3KSwgKHcyIC0geDIgKyB5MiAtIHoyKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1pYWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGFzaW4oY2xhbXAoMiAqICh4ICogdyArIHkgKiB6KSwgLSAxLCAxKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKDIgKiAoeSAqIHcgLSB6ICogeCksICh3MiAtIHgyIC0geTIgKyB6MikpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigyICogKHogKiB3IC0geCAqIHkpLCAodzIgLSB4MiArIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWllYJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoMiAqICh4ICogdyArIHogKiB5KSwgKHcyIC0geDIgLSB5MiArIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGFzaW4oY2xhbXAoMiAqICh5ICogdyAtIHggKiB6KSwgLSAxLCAxKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKDIgKiAoeCAqIHkgKyB6ICogdyksICh3MiArIHgyIC0geTIgLSB6MikpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWlgnOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMigyICogKHggKiB3IC0geiAqIHkpLCAodzIgLSB4MiArIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoMiAqICh5ICogdyAtIHggKiB6KSwgKHcyICsgeDIgLSB5MiAtIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGFzaW4oY2xhbXAoMiAqICh4ICogeSArIHogKiB3KSwgLSAxLCAxKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1haWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKDIgKiAoeCAqIHcgKyB5ICogeiksICh3MiAtIHgyICsgeTIgLSB6MikpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMigyICogKHggKiB6ICsgeSAqIHcpLCAodzIgKyB4MiAtIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXNpbihjbGFtcCgyICogKHogKiB3IC0geCAqIHkpLCAtIDEsIDEpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmtvd24gb3JkZXI6ICcgKyBvcmRlcik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgcm90YXRpb24gbWF0cml4IHRvIGV1bGVyIGFuZ2xlXHJcbiAqIGZyb20gdGhyZWUuanNcclxuICovXHJcblZlY3RvcjMuZXVsZXJGcm9tTWF0MyA9IGZ1bmN0aW9uIChvdXQsIG0sIG9yZGVyKSB7XHJcbiAgICAvLyBhc3N1bWVzIHRoZSB1cHBlciAzeDMgb2YgbSBpcyBhIHB1cmUgcm90YXRpb24gbWF0cml4IChpLmUsIHVuc2NhbGVkKVxyXG4gICAgdmFyIHRlID0gbS5hcnJheTtcclxuICAgIHZhciBtMTEgPSB0ZVswXSwgbTEyID0gdGVbM10sIG0xMyA9IHRlWzZdO1xyXG4gICAgdmFyIG0yMSA9IHRlWzFdLCBtMjIgPSB0ZVs0XSwgbTIzID0gdGVbN107XHJcbiAgICB2YXIgbTMxID0gdGVbMl0sIG0zMiA9IHRlWzVdLCBtMzMgPSB0ZVs4XTtcclxuICAgIHZhciB0YXJnZXQgPSBvdXQuYXJyYXk7XHJcblxyXG4gICAgdmFyIG9yZGVyID0gKG9yZGVyIHx8ICdYWVonKS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgIHN3aXRjaCAob3JkZXIpIHtcclxuICAgICAgICBjYXNlICdYWVonOlxyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhc2luKGNsYW1wKG0xMywgLTEsIDEpKTtcclxuICAgICAgICAgICAgaWYgKGFicyhtMTMpIDwgMC45OTk5OSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoLW0yMywgbTMzKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKC1tMTIsIG0xMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMihtMzIsIG0yMik7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1lYWic6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGFzaW4oLWNsYW1wKG0yMywgLTEsIDEpKTtcclxuICAgICAgICAgICAgaWYgKGFicyhtMjMpIDwgMC45OTk5OSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIobTEzLCBtMzMpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIobTIxLCBtMjIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoLW0zMSwgbTExKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWlhZJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXNpbihjbGFtcChtMzIsIC0xLCAxKSk7XHJcbiAgICAgICAgICAgIGlmIChhYnMobTMyKSA8IDAuOTk5OTkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKC1tMzEsIG0zMyk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigtbTEyLCBtMjIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKG0yMSwgbTExKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdaWVgnOlxyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhc2luKC1jbGFtcChtMzEsIC0xLCAxKSk7XHJcbiAgICAgICAgICAgIGlmIChhYnMobTMxKSA8IDAuOTk5OTkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKG0zMiwgbTMzKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKG0yMSwgbTExKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigtbTEyLCBtMjIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1laWCc6XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGFzaW4oY2xhbXAobTIxLCAtMSwgMSkpO1xyXG4gICAgICAgICAgICBpZiAoYWJzKG0yMSkgPCAwLjk5OTk5KSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMigtbTIzLCBtMjIpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoLW0zMSwgbTExKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMihtMTMsIG0zMyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWFpZJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXNpbigtY2xhbXAobTEyLCAtMSwgMSkpO1xyXG4gICAgICAgICAgICBpZiAoYWJzKG0xMikgPCAwLjk5OTk5KSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMihtMzIsIG0yMik7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMihtMTMsIG0xMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMigtbTIzLCBtMzMpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua293biBvcmRlcjogJyArIG9yZGVyKTtcclxuICAgIH1cclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhWZWN0b3IzLCB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqL1xyXG4gICAgUE9TSVRJVkVfWDoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMSwgMCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICovXHJcbiAgICBORUdBVElWRV9YOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygtMSwgMCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICovXHJcbiAgICBQT1NJVElWRV9ZOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLCAxLCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKi9cclxuICAgIE5FR0FUSVZFX1k6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKDAsIC0xLCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKi9cclxuICAgIFBPU0lUSVZFX1o6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKDAsIDAsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgTkVHQVRJVkVfWjoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMCwgMCwgLTEpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqL1xyXG4gICAgVVA6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKDAsIDEsIDApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqL1xyXG4gICAgWkVSTzoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yMztcclxuIiwiaW1wb3J0IHF1YXQgZnJvbSAnLi4vZ2xtYXRyaXgvcXVhdCc7XHJcbmltcG9ydCBtYXQzIGZyb20gJy4uL2dsbWF0cml4L21hdDMnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5RdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB6XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XHJcbiAqL1xyXG52YXIgUXVhdGVybmlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6LCB3KSB7XHJcblxyXG4gICAgeCA9IHggfHwgMDtcclxuICAgIHkgPSB5IHx8IDA7XHJcbiAgICB6ID0geiB8fCAwO1xyXG4gICAgdyA9IHcgPT09IHVuZGVmaW5lZCA/IDEgOiB3O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcmFnZSBvZiBRdWF0ZXJuaW9uLCByZWFkIGFuZCB3cml0ZSBvZiB4LCB5LCB6LCB3IHdpbGwgY2hhbmdlIHRoZSB2YWx1ZXMgaW4gYXJyYXlcclxuICAgICAqIEFsbCBtZXRob2RzIGFsc28gb3BlcmF0ZSBvbiB0aGUgYXJyYXkgaW5zdGVhZCBvZiB4LCB5LCB6LCB3IGNvbXBvbmVudHNcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuUXVhdGVybmlvbiNcclxuICAgICAqL1xyXG4gICAgdGhpcy5hcnJheSA9IHF1YXQuZnJvbVZhbHVlcyh4LCB5LCB6LCB3KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpcnR5IGZsYWcgaXMgdXNlZCBieSB0aGUgTm9kZSB0byBkZXRlcm1pbmVcclxuICAgICAqIGlmIHRoZSBtYXRyaXggaXMgdXBkYXRlZCB0byBsYXRlc3RcclxuICAgICAqIEBuYW1lIF9kaXJ0eVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5RdWF0ZXJuaW9uI1xyXG4gICAgICovXHJcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbn07XHJcblxyXG5RdWF0ZXJuaW9uLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogUXVhdGVybmlvbixcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBiIHRvIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcXVhdC5hZGQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgdyBjb21wb25lbnQgZnJvbSB4LCB5LCB6IGNvbXBvbmVudFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBjYWxjdWxhdGVXOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcXVhdC5jYWxjdWxhdGVXKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCwgeSBhbmQgeiBjb21wb25lbnRzXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB6XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB3XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24gKHgsIHksIHosIHcpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0geDtcclxuICAgICAgICB0aGlzLmFycmF5WzFdID0geTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gejtcclxuICAgICAgICB0aGlzLmFycmF5WzNdID0gdztcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHksIHogYW5kIHcgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSBhcnJbMF07XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IGFyclsxXTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gYXJyWzJdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbM10gPSBhcnJbM107XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBRdWF0ZXJuaW9uXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBRdWF0ZXJuaW9uKHRoaXMueCwgdGhpcy55LCB0aGlzLnosIHRoaXMudyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgY29uanVnYXRlIG9mIHNlbGYgSWYgdGhlIHF1YXRlcm5pb24gaXMgbm9ybWFsaXplZCxcclxuICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgZmFzdGVyIHRoYW4gaW52ZXJ0IGFuZCBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBjb25qdWdhdGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBxdWF0LmNvbmp1Z2F0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHF1YXQuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRG90IHByb2R1Y3Qgb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRvdDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICByZXR1cm4gcXVhdC5kb3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gdGhlIGdpdmVuIDN4MyByb3RhdGlvbiBtYXRyaXhcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBmcm9tTWF0MzogZnVuY3Rpb24gKG0pIHtcclxuICAgICAgICBxdWF0LmZyb21NYXQzKHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZnJvbSB0aGUgZ2l2ZW4gNHg0IHJvdGF0aW9uIG1hdHJpeFxyXG4gICAgICogVGhlIDR0aCBjb2x1bW4gYW5kIDR0aCByb3cgd2lsbCBiZSBkcm9wZWRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBmcm9tTWF0NDogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbTMgPSBtYXQzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobSkge1xyXG4gICAgICAgICAgICBtYXQzLmZyb21NYXQ0KG0zLCBtLmFycmF5KTtcclxuICAgICAgICAgICAgLy8gVE9ETyBOb3QgbGlrZSBtYXQ0LCBtYXQzIGluIGdsbWF0cml4IHNlZW1zIHRvIGJlIHJvdy1iYXNlZFxyXG4gICAgICAgICAgICBtYXQzLnRyYW5zcG9zZShtMywgbTMpO1xyXG4gICAgICAgICAgICBxdWF0LmZyb21NYXQzKHRoaXMuYXJyYXksIG0zKTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0byBpZGVudGl0eSBxdWF0ZXJuaW9uXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIGlkZW50aXR5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcXVhdC5pZGVudGl0eSh0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnZlcnQgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBpbnZlcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBxdWF0LmludmVydCh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBvZiBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHF1YXQubGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBxdWF0Lmxlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGEgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB0XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIGxlcnA6IGZ1bmN0aW9uIChhLCBiLCB0KSB7XHJcbiAgICAgICAgcXVhdC5sZXJwKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBtdWw6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcXVhdC5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseUxlZnRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBtdWxMZWZ0OiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIHF1YXQubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11dGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHF1YXQubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11dGlwbHkgYSBhbmQgc2VsZlxyXG4gICAgICogUXVhdGVybmlvbiBtdXRpcGx5IGlzIG5vdCBjb21tdXRhdGl2ZSwgc28gdGhlIHJlc3VsdCBvZiBtdXRpcGx5TGVmdCBpcyBkaWZmZXJlbnQgd2l0aCBtdWx0aXBseS5cclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uIChhKSB7XHJcbiAgICAgICAgcXVhdC5tdWx0aXBseSh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTm9ybWFsaXplIHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcXVhdC5ub3JtYWxpemUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBheGlzXHJcbiAgICAgKiBAcGFyYW0gcmFkXHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZUF4aXM6ZnVuY3Rpb24gKGF4aXMscmFkKSB7XHJcblxyXG4gICAgICAgIHZhciBxdWF0MiA9IG5ldyBRdWF0ZXJuaW9uKCkuYXJyYXk7XHJcblxyXG4gICAgICAgIHF1YXQucm90YXRlQXhpcyh0aGlzLmFycmF5LHF1YXQyLGF4aXMscmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWCBheGlzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVg6IGZ1bmN0aW9uIChyYWQpIHtcclxuXHJcbiAgICAgICAgcXVhdC5yb3RhdGVYKHRoaXMuYXJyYXksIHJhZCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuIGFib3V0IFkgYXhpc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICByb3RhdGVZOiBmdW5jdGlvbiAocmFkKSB7XHJcblxyXG4gICAgICAgIHF1YXQucm90YXRlWSh0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBaIGF4aXNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgcm90YXRlWjogZnVuY3Rpb24gKHJhZCkge1xyXG4gICAgICAgIHF1YXQucm90YXRlWih0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHNlbGYgdG8gcmVwcmVzZW50IHRoZSBzaG9ydGVzdCByb3RhdGlvbiBmcm9tIFZlY3RvcjMgYSB0byBWZWN0b3IzIGIuXHJcbiAgICAgKiBhIGFuZCBiIG5lZWRzIHRvIGJlIG5vcm1hbGl6ZWRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHJvdGF0aW9uVG86IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgcXVhdC5yb3RhdGlvblRvKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgc2VsZiB3aXRoIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBheGVzXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gdmlld1xyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHJpZ2h0XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gdXBcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgc2V0QXhlczogZnVuY3Rpb24gKHZpZXcsIHJpZ2h0LCB1cCkge1xyXG4gICAgICAgIHF1YXQuc2V0QXhlcyh0aGlzLmFycmF5LCB2aWV3LmFycmF5LCByaWdodC5hcnJheSwgdXAuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHNlbGYgd2l0aCBhIHJvdGF0aW9uIGF4aXMgYW5kIHJvdGF0aW9uIGFuZ2xlXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gYXhpc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBzZXRBeGlzQW5nbGU6IGZ1bmN0aW9uIChheGlzLCByYWQpIHtcclxuICAgICAgICBxdWF0LnNldEF4aXNBbmdsZSh0aGlzLmFycmF5LCBheGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm0gc3BoZXJpY2FsIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gdFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBzbGVycDogZnVuY3Rpb24gKGEsIGIsIHQpIHtcclxuICAgICAgICBxdWF0LnNsZXJwKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3Igc3F1YXJlZExlbmd0aFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXJMZW46IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gcXVhdC5zcXJMZW4odGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3F1YXJlZCBsZW5ndGggb2Ygc2VsZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXVhcmVkTGVuZ3RoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHF1YXQuc3F1YXJlZExlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZnJvbSBldWxlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHZcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcmRlclxyXG4gICAgICovXHJcbiAgICBmcm9tRXVsZXI6IGZ1bmN0aW9uICh2LCBvcmRlcikge1xyXG4gICAgICAgIHJldHVybiBRdWF0ZXJuaW9uLmZyb21FdWxlcih0aGlzLCB2LCBvcmRlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuICdbJyArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwodGhpcy5hcnJheSwgJywnKSArICddJztcclxuICAgIH0sXHJcblxyXG4gICAgdG9BcnJheTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcclxuLy8gR2V0dGVyIGFuZCBTZXR0ZXJcclxuaWYgKGRlZmluZVByb3BlcnR5KSB7XHJcblxyXG4gICAgdmFyIHByb3RvID0gUXVhdGVybmlvbi5wcm90b3R5cGU7XHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5RdWF0ZXJuaW9uXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd4Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVswXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgeVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlF1YXRlcm5pb25cclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB6XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuUXVhdGVybmlvblxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneicsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMl07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzJdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHdcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5RdWF0ZXJuaW9uXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd3Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVszXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbM10gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG4vLyBTdXBwbHkgbWV0aG9kcyB0aGF0IGFyZSBub3QgaW4gcGxhY2VcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uYWRkID0gZnVuY3Rpb24gKG91dCwgYSwgYikge1xyXG4gICAgcXVhdC5hZGQob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICB4XHJcbiAqIEBwYXJhbSAge251bWJlcn0gICAgIHlcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgelxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICB3XHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uc2V0ID0gZnVuY3Rpb24gKG91dCwgeCwgeSwgeiwgdykge1xyXG4gICAgcXVhdC5zZXQob3V0LmFycmF5LCB4LCB5LCB6LCB3KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmNvcHkgPSBmdW5jdGlvbiAob3V0LCBiKSB7XHJcbiAgICBxdWF0LmNvcHkob3V0LmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5jYWxjdWxhdGVXID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgcXVhdC5jYWxjdWxhdGVXKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uY29uanVnYXRlID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgcXVhdC5jb25qdWdhdGUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmlkZW50aXR5ID0gZnVuY3Rpb24gKG91dCkge1xyXG4gICAgcXVhdC5pZGVudGl0eShvdXQuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmludmVydCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIHF1YXQuaW52ZXJ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmRvdCA9IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICByZXR1cm4gcXVhdC5kb3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblF1YXRlcm5pb24ubGVuID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybiBxdWF0Lmxlbmd0aChhLmFycmF5KTtcclxufTtcclxuXHJcbi8vIFF1YXRlcm5pb24ubGVuZ3RoID0gUXVhdGVybmlvbi5sZW47XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICB0XHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ubGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcclxuICAgIHF1YXQubGVycChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgdFxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnNsZXJwID0gZnVuY3Rpb24gKG91dCwgYSwgYiwgdCkge1xyXG4gICAgcXVhdC5zbGVycChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5tdWwgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICBxdWF0Lm11bHRpcGx5KG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5tdWx0aXBseSA9IFF1YXRlcm5pb24ubXVsO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICByYWRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5yb3RhdGVYID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICBxdWF0LnJvdGF0ZVgob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICByYWRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5yb3RhdGVZID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICBxdWF0LnJvdGF0ZVkob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICByYWRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5yb3RhdGVaID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICBxdWF0LnJvdGF0ZVoob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gICAgYXhpc1xyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICByYWRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5zZXRBeGlzQW5nbGUgPSBmdW5jdGlvbiAob3V0LCBheGlzLCByYWQpIHtcclxuICAgIHF1YXQuc2V0QXhpc0FuZ2xlKG91dC5hcnJheSwgYXhpcy5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5ub3JtYWxpemUgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBxdWF0Lm5vcm1hbGl6ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnNxckxlbiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4gcXVhdC5zcXJMZW4oYS5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnNxdWFyZWRMZW5ndGggPSBRdWF0ZXJuaW9uLnNxckxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9ICAgIG1cclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5mcm9tTWF0MyA9IGZ1bmN0aW9uIChvdXQsIG0pIHtcclxuICAgIHF1YXQuZnJvbU1hdDMob3V0LmFycmF5LCBtLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICAgIHZpZXdcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICByaWdodFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICAgIHVwXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uc2V0QXhlcyA9IGZ1bmN0aW9uIChvdXQsIHZpZXcsIHJpZ2h0LCB1cCkge1xyXG4gICAgcXVhdC5zZXRBeGVzKG91dC5hcnJheSwgdmlldy5hcnJheSwgcmlnaHQuYXJyYXksIHVwLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICAgIGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICBiXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ucm90YXRpb25UbyA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIHF1YXQucm90YXRpb25UbyhvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBxdWF0ZXJuaW9uIGZyb20gZXVsZXJcclxuICogQHBhcmFtIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gdlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gb3JkZXJcclxuICovXHJcblF1YXRlcm5pb24uZnJvbUV1bGVyID0gZnVuY3Rpb24gKG91dCwgdiwgb3JkZXIpIHtcclxuXHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICB2ID0gdi5hcnJheTtcclxuICAgIHZhciB0YXJnZXQgPSBvdXQuYXJyYXk7XHJcbiAgICB2YXIgYzEgPSBNYXRoLmNvcyh2WzBdIC8gMik7XHJcbiAgICB2YXIgYzIgPSBNYXRoLmNvcyh2WzFdIC8gMik7XHJcbiAgICB2YXIgYzMgPSBNYXRoLmNvcyh2WzJdIC8gMik7XHJcbiAgICB2YXIgczEgPSBNYXRoLnNpbih2WzBdIC8gMik7XHJcbiAgICB2YXIgczIgPSBNYXRoLnNpbih2WzFdIC8gMik7XHJcbiAgICB2YXIgczMgPSBNYXRoLnNpbih2WzJdIC8gMik7XHJcblxyXG4gICAgdmFyIG9yZGVyID0gKG9yZGVyIHx8ICdYWVonKS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgIC8vIGh0dHA6Ly93d3cubWF0aHdvcmtzLmNvbS9tYXRsYWJjZW50cmFsL2ZpbGVleGNoYW5nZS9cclxuICAgIC8vICAyMDY5Ni1mdW5jdGlvbi10by1jb252ZXJ0LWJldHdlZW4tZGNtLWV1bGVyLWFuZ2xlcy1xdWF0ZXJuaW9ucy1hbmQtZXVsZXItdmVjdG9ycy9cclxuICAgIC8vICBjb250ZW50L1NwaW5DYWxjLm1cclxuXHJcbiAgICBzd2l0Y2ggKG9yZGVyKSB7XHJcbiAgICAgICAgY2FzZSAnWFlaJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gczEgKiBjMiAqIGMzICsgYzEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBjMSAqIHMyICogYzMgLSBzMSAqIGMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGMxICogYzIgKiBzMyArIHMxICogczIgKiBjMztcclxuICAgICAgICAgICAgdGFyZ2V0WzNdID0gYzEgKiBjMiAqIGMzIC0gczEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWFonOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBzMSAqIGMyICogYzMgKyBjMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGMxICogczIgKiBjMyAtIHMxICogYzIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYzEgKiBjMiAqIHMzIC0gczEgKiBzMiAqIGMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbM10gPSBjMSAqIGMyICogYzMgKyBzMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1pYWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IHMxICogYzIgKiBjMyAtIGMxICogczIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYzEgKiBzMiAqIGMzICsgczEgKiBjMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBjMSAqIGMyICogczMgKyBzMSAqIHMyICogYzM7XHJcbiAgICAgICAgICAgIHRhcmdldFszXSA9IGMxICogYzIgKiBjMyAtIHMxICogczIgKiBzMztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWllYJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gczEgKiBjMiAqIGMzIC0gYzEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBjMSAqIHMyICogYzMgKyBzMSAqIGMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGMxICogYzIgKiBzMyAtIHMxICogczIgKiBjMztcclxuICAgICAgICAgICAgdGFyZ2V0WzNdID0gYzEgKiBjMiAqIGMzICsgczEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWlgnOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBzMSAqIGMyICogYzMgKyBjMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGMxICogczIgKiBjMyArIHMxICogYzIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYzEgKiBjMiAqIHMzIC0gczEgKiBzMiAqIGMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbM10gPSBjMSAqIGMyICogYzMgLSBzMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1haWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IHMxICogYzIgKiBjMyAtIGMxICogczIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYzEgKiBzMiAqIGMzIC0gczEgKiBjMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBjMSAqIGMyICogczMgKyBzMSAqIHMyICogYzM7XHJcbiAgICAgICAgICAgIHRhcmdldFszXSA9IGMxICogYzIgKiBjMyArIHMxICogczIgKiBzMztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBRdWF0ZXJuaW9uO1xyXG4iLCJpbXBvcnQgbWF0NCBmcm9tICcuLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcbmltcG9ydCBxdWF0IGZyb20gJy4uL2dsbWF0cml4L3F1YXQnO1xyXG5pbXBvcnQgbWF0MyBmcm9tICcuLi9nbG1hdHJpeC9tYXQzJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9WZWN0b3IzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuTWF0cml4NFxyXG4gKi9cclxudmFyIE1hdHJpeDQgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICB0aGlzLl9heGlzWCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICB0aGlzLl9heGlzWSA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICB0aGlzLl9heGlzWiA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIE1hdHJpeDRcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4NCNcclxuICAgICAqL1xyXG4gICAgdGhpcy5hcnJheSA9IG1hdDQuY3JlYXRlKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4NCNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuTWF0cml4NC5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IE1hdHJpeDQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gYXJyW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGFkanVnYXRlIG9mIHNlbGYsIGluLXBsYWNlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGFkam9pbnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDQuYWRqb2ludCh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgTWF0cml4NFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgTWF0cml4NCgpKS5jb3B5KHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgZnJvbSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24oYSkge1xyXG4gICAgICAgIG1hdDQuY29weSh0aGlzLmFycmF5LCBhLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIG1hdHJpeCBkZXRlcm1pbmFudFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkZXRlcm1pbmFudDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdDQuZGV0ZXJtaW5hbnQodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHVwcGVyIDN4MyBwYXJ0IGZyb20gcXVhdGVybmlvblxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGZyb21RdWF0OiBmdW5jdGlvbihxKSB7XHJcbiAgICAgICAgbWF0NC5mcm9tUXVhdCh0aGlzLmFycmF5LCBxLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gYSBxdWF0ZXJuaW9uIHJvdGF0aW9uIGFuZCBhIHZlY3RvciB0cmFuc2xhdGlvblxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgZnJvbVJvdGF0aW9uVHJhbnNsYXRpb246IGZ1bmN0aW9uKHEsIHYpIHtcclxuICAgICAgICBtYXQ0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKHRoaXMuYXJyYXksIHEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZnJvbSBNYXRyaXgyZCwgaXQgaXMgdXNlZCB3aGVuIGNvbnZlcnRpbmcgYSAyZCBzaGFwZSB0byAzZCBzcGFjZS5cclxuICAgICAqIEluIDNkIHNwYWNlIGl0IGlzIGVxdWl2YWxlbnQgdG8gcmFuc2xhdGUgb24geHkgcGxhbmUgYW5kIHJvdGF0ZSBhYm91dCB6IGF4aXNcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG0yZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBmcm9tTWF0MmQ6IGZ1bmN0aW9uKG0yZCkge1xyXG4gICAgICAgIE1hdHJpeDQuZnJvbU1hdDJkKHRoaXMsIG0yZCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gZnJ1c3R1bSBib3VuZHNcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gbGVmdFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSByaWdodFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBib3R0b21cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gdG9wXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IG5lYXJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gZmFyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGZydXN0dW06IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xyXG4gICAgICAgIG1hdDQuZnJ1c3R1bSh0aGlzLmFycmF5LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcik7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0byBhIGlkZW50aXR5IG1hdHJpeFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBpZGVudGl0eTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0NC5pZGVudGl0eSh0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0IHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgaW52ZXJ0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQ0LmludmVydCh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGFzIGEgbWF0cml4IHdpdGggdGhlIGdpdmVuIGV5ZSBwb3NpdGlvbiwgZm9jYWwgcG9pbnQsIGFuZCB1cCBheGlzXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGV5ZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBjZW50ZXJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gdXBcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgbG9va0F0OiBmdW5jdGlvbihleWUsIGNlbnRlciwgdXApIHtcclxuICAgICAgICBtYXQ0Lmxvb2tBdCh0aGlzLmFycmF5LCBleWUuYXJyYXksIGNlbnRlci5hcnJheSwgdXAuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXV0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDQubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgbXVsTGVmdDogZnVuY3Rpb24oYSkge1xyXG4gICAgICAgIG1hdDQubXVsKHRoaXMuYXJyYXksIGEuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQ0Lm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBhIGFuZCBzZWxmLCBhIGlzIG9uIHRoZSBsZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbihhKSB7XHJcbiAgICAgICAgbWF0NC5tdWx0aXBseSh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGFzIGEgb3J0aG9ncmFwaGljIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGxlZnRcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gcmlnaHRcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gYm90dG9tXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRvcFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBuZWFyXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGZhclxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBvcnRobzogZnVuY3Rpb24obGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcclxuICAgICAgICBtYXQ0Lm9ydGhvKHRoaXMuYXJyYXksIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYXMgYSBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBmb3Z5XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGFzcGVjdFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBuZWFyXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGZhclxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBwZXJzcGVjdGl2ZTogZnVuY3Rpb24oZm92eSwgYXNwZWN0LCBuZWFyLCBmYXIpIHtcclxuICAgICAgICBtYXQ0LnBlcnNwZWN0aXZlKHRoaXMuYXJyYXksIGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgcmFkIGFib3V0IGF4aXMuXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHJvdGFpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgcmFkXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGF4aXNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgcm90YXRlOiBmdW5jdGlvbihyYWQsIGF4aXMpIHtcclxuICAgICAgICBtYXQ0LnJvdGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQsIGF4aXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBYIGF4aXMuXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHJvdGFpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVg6IGZ1bmN0aW9uKHJhZCkge1xyXG4gICAgICAgIG1hdDQucm90YXRlWCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBZIGF4aXMuXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHJvdGFpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVk6IGZ1bmN0aW9uKHJhZCkge1xyXG4gICAgICAgIG1hdDQucm90YXRlWSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBaIGF4aXMuXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHJvdGFpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVo6IGZ1bmN0aW9uKHJhZCkge1xyXG4gICAgICAgIG1hdDQucm90YXRlWih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBzZWxmIGJ5IHNcclxuICAgICAqIEVxdWFsIHRvIHJpZ2h0LW11bHRpcGx5IGEgc2NhbGUgbWF0cml4XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICBzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbih2KSB7XHJcbiAgICAgICAgbWF0NC5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNsYXRlIHNlbGYgYnkgdi5cclxuICAgICAqIEVxdWFsIHRvIHJpZ2h0LW11bHRpcGx5IGEgdHJhbnNsYXRlIG1hdHJpeFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgdlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uKHYpIHtcclxuICAgICAgICBtYXQ0LnRyYW5zbGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNwb3NlIHNlbGYsIGluLXBsYWNlLlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc3Bvc2U6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDQudHJhbnNwb3NlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNvbXBvc2UgYSBtYXRyaXggdG8gU1JUXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW3NjYWxlXVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlF1YXRlcm5pb259IHJvdGF0aW9uXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yfSBwb3NpdGlvblxyXG4gICAgICogQHNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbWljcm9zb2Z0LnhuYS5mcmFtZXdvcmsubWF0cml4LmRlY29tcG9zZS5hc3B4XHJcbiAgICAgKi9cclxuICAgIGRlY29tcG9zZU1hdHJpeDogKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgeCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHkgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB6ID0gdmVjMy5jcmVhdGUoKTtcclxuXHJcbiAgICAgICAgdmFyIG0zID0gbWF0My5jcmVhdGUoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjYWxlLCByb3RhdGlvbiwgcG9zaXRpb24pIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgICAgIHZlYzMuc2V0KHgsIGVsWzBdLCBlbFsxXSwgZWxbMl0pO1xyXG4gICAgICAgICAgICB2ZWMzLnNldCh5LCBlbFs0XSwgZWxbNV0sIGVsWzZdKTtcclxuICAgICAgICAgICAgdmVjMy5zZXQoeiwgZWxbOF0sIGVsWzldLCBlbFsxMF0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHN4ID0gdmVjMy5sZW5ndGgoeCk7XHJcbiAgICAgICAgICAgIHZhciBzeSA9IHZlYzMubGVuZ3RoKHkpO1xyXG4gICAgICAgICAgICB2YXIgc3ogPSB2ZWMzLmxlbmd0aCh6KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGlmIGRldGVybWluZSBpcyBuZWdhdGl2ZSwgd2UgbmVlZCB0byBpbnZlcnQgb25lIHNjYWxlXHJcbiAgICAgICAgICAgIHZhciBkZXQgPSB0aGlzLmRldGVybWluYW50KCk7XHJcbiAgICAgICAgICAgIGlmIChkZXQgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBzeCA9IC1zeDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNjYWxlKSB7XHJcbiAgICAgICAgICAgICAgICBzY2FsZS5zZXQoc3gsIHN5LCBzeik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNldChlbFsxMl0sIGVsWzEzXSwgZWxbMTRdKTtcclxuXHJcbiAgICAgICAgICAgIG1hdDMuZnJvbU1hdDQobTMsIGVsKTtcclxuICAgICAgICAgICAgLy8gTm90IGxpa2UgbWF0NCwgbWF0MyBpbiBnbG1hdHJpeCBzZWVtcyB0byBiZSByb3ctYmFzZWRcclxuICAgICAgICAgICAgLy8gU2VlbXMgZml4ZWQgaW4gZ2wtbWF0cml4IDIuMi4yXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90b2ppL2dsLW1hdHJpeC9pc3N1ZXMvMTE0XHJcbiAgICAgICAgICAgIC8vIG1hdDMudHJhbnNwb3NlKG0zLCBtMyk7XHJcblxyXG4gICAgICAgICAgICBtM1swXSAvPSBzeDtcclxuICAgICAgICAgICAgbTNbMV0gLz0gc3g7XHJcbiAgICAgICAgICAgIG0zWzJdIC89IHN4O1xyXG5cclxuICAgICAgICAgICAgbTNbM10gLz0gc3k7XHJcbiAgICAgICAgICAgIG0zWzRdIC89IHN5O1xyXG4gICAgICAgICAgICBtM1s1XSAvPSBzeTtcclxuXHJcbiAgICAgICAgICAgIG0zWzZdIC89IHN6O1xyXG4gICAgICAgICAgICBtM1s3XSAvPSBzejtcclxuICAgICAgICAgICAgbTNbOF0gLz0gc3o7XHJcblxyXG4gICAgICAgICAgICBxdWF0LmZyb21NYXQzKHJvdGF0aW9uLmFycmF5LCBtMyk7XHJcbiAgICAgICAgICAgIHF1YXQubm9ybWFsaXplKHJvdGF0aW9uLmFycmF5LCByb3RhdGlvbi5hcnJheSk7XHJcblxyXG4gICAgICAgICAgICByb3RhdGlvbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICBwb3NpdGlvbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xyXG5cclxuaWYgKGRlZmluZVByb3BlcnR5KSB7XHJcbiAgICB2YXIgcHJvdG8gPSBNYXRyaXg0LnByb3RvdHlwZTtcclxuICAgIC8qKlxyXG4gICAgICogWiBBeGlzIG9mIGxvY2FsIHRyYW5zZm9ybVxyXG4gICAgICogQG5hbWUgelxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3onLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgICAgIHRoaXMuX2F4aXNaLnNldChlbFs4XSwgZWxbOV0sIGVsWzEwXSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9heGlzWjtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBIZXJlIGhhcyBhIHByb2JsZW1cclxuICAgICAgICAgICAgLy8gSWYgb25seSBzZXQgYW4gaXRlbSBvZiB2ZWN0b3Igd2lsbCBub3Qgd29ya1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB2ID0gdi5hcnJheTtcclxuICAgICAgICAgICAgZWxbOF0gPSB2WzBdO1xyXG4gICAgICAgICAgICBlbFs5XSA9IHZbMV07XHJcbiAgICAgICAgICAgIGVsWzEwXSA9IHZbMl07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBZIEF4aXMgb2YgbG9jYWwgdHJhbnNmb3JtXHJcbiAgICAgKiBAbmFtZSB5XHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4NFxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneScsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5hcnJheTtcclxuICAgICAgICAgICAgdGhpcy5fYXhpc1kuc2V0KGVsWzRdLCBlbFs1XSwgZWxbNl0pO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXhpc1k7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgICAgIHYgPSB2LmFycmF5O1xyXG4gICAgICAgICAgICBlbFs0XSA9IHZbMF07XHJcbiAgICAgICAgICAgIGVsWzVdID0gdlsxXTtcclxuICAgICAgICAgICAgZWxbNl0gPSB2WzJdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogWCBBeGlzIG9mIGxvY2FsIHRyYW5zZm9ybVxyXG4gICAgICogQG5hbWUgeFxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgICAgIHRoaXMuX2F4aXNYLnNldChlbFswXSwgZWxbMV0sIGVsWzJdKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F4aXNYO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB2ID0gdi5hcnJheTtcclxuICAgICAgICAgICAgZWxbMF0gPSB2WzBdO1xyXG4gICAgICAgICAgICBlbFsxXSA9IHZbMV07XHJcbiAgICAgICAgICAgIGVsWzJdID0gdlsyXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG59XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuYWRqb2ludCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0NC5hZGpvaW50KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0NC5jb3B5KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbk1hdHJpeDQuZGV0ZXJtaW5hbnQgPSBmdW5jdGlvbihhKSB7XHJcbiAgICByZXR1cm4gbWF0NC5kZXRlcm1pbmFudChhLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICBtYXQ0LmlkZW50aXR5KG91dC5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgbGVmdFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICByaWdodFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBib3R0b21cclxuICogQHBhcmFtICB7bnVtYmVyfSAgdG9wXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIG5lYXJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgZmFyXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQub3J0aG8gPSBmdW5jdGlvbihvdXQsIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XHJcbiAgICBtYXQ0Lm9ydGhvKG91dC5hcnJheSwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIGZvdnlcclxuICogQHBhcmFtICB7bnVtYmVyfSAgYXNwZWN0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIG5lYXJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgZmFyXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQucGVyc3BlY3RpdmUgPSBmdW5jdGlvbihvdXQsIGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKSB7XHJcbiAgICBtYXQ0LnBlcnNwZWN0aXZlKG91dC5hcnJheSwgZm92eSwgYXNwZWN0LCBuZWFyLCBmYXIpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gZXllXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gY2VudGVyXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gdXBcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5sb29rQXQgPSBmdW5jdGlvbihvdXQsIGV5ZSwgY2VudGVyLCB1cCkge1xyXG4gICAgbWF0NC5sb29rQXQob3V0LmFycmF5LCBleWUuYXJyYXksIGNlbnRlci5hcnJheSwgdXAuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0NC5pbnZlcnQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQubXVsID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBtYXQ0Lm11bChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQubXVsdGlwbHkgPSBNYXRyaXg0Lm11bDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9ICAgIG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5mcm9tUXVhdCA9IGZ1bmN0aW9uKG91dCwgcSkge1xyXG4gICAgbWF0NC5mcm9tUXVhdChvdXQuYXJyYXksIHEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gICAgb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICAgIHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbiA9IGZ1bmN0aW9uKG91dCwgcSwgdikge1xyXG4gICAgbWF0NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihvdXQuYXJyYXksIHEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbTRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gbTJkXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuZnJvbU1hdDJkID0gZnVuY3Rpb24obTQsIG0yZCkge1xyXG4gICAgbTQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHZhciBtMmQgPSBtMmQuYXJyYXk7XHJcbiAgICB2YXIgbTQgPSBtNC5hcnJheTtcclxuXHJcbiAgICBtNFswXSA9IG0yZFswXTtcclxuICAgIG00WzRdID0gbTJkWzJdO1xyXG4gICAgbTRbMTJdID0gbTJkWzRdO1xyXG5cclxuICAgIG00WzFdID0gbTJkWzFdO1xyXG4gICAgbTRbNV0gPSBtMmRbM107XHJcbiAgICBtNFsxM10gPSBtMmRbNV07XHJcblxyXG4gICAgcmV0dXJuIG00O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICByYWRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBheGlzXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQucm90YXRlID0gZnVuY3Rpb24ob3V0LCBhLCByYWQsIGF4aXMpIHtcclxuICAgIG1hdDQucm90YXRlKG91dC5hcnJheSwgYS5hcnJheSwgcmFkLCBheGlzLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQucm90YXRlWCA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XHJcbiAgICBtYXQ0LnJvdGF0ZVgob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICByYWRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5yb3RhdGVZID0gZnVuY3Rpb24ob3V0LCBhLCByYWQpIHtcclxuICAgIG1hdDQucm90YXRlWShvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHJhZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnJvdGF0ZVogPSBmdW5jdGlvbihvdXQsIGEsIHJhZCkge1xyXG4gICAgbWF0NC5yb3RhdGVaKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSB2XHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIG1hdDQuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC50cmFuc3Bvc2UgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDQudHJhbnNwb3NlKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgbWF0NC50cmFuc2xhdGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1hdHJpeDQ7XHJcbiIsImltcG9ydCBWZWN0b3IzIGZyb20gJy4vVmVjdG9yMyc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxudmFyIHZlYzNTZXQgPSB2ZWMzLnNldDtcclxudmFyIHZlYzNDb3B5ID0gdmVjMy5jb3B5O1xyXG5cclxuLyoqXHJcbiAqIEF4aXMgYWxpZ25lZCBib3VuZGluZyBib3hcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LkJvdW5kaW5nQm94XHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBbbWluXVxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW21heF1cclxuICovXHJcbnZhciBCb3VuZGluZ0JveCA9IGZ1bmN0aW9uIChtaW4sIG1heCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWluaW11bSBjb29yZHMgb2YgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLm1pbiA9IG1pbiB8fCBuZXcgVmVjdG9yMyhJbmZpbml0eSwgSW5maW5pdHksIEluZmluaXR5KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1heGltdW0gY29vcmRzIG9mIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5tYXggPSBtYXggfHwgbmV3IFZlY3RvcjMoLUluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eSk7XHJcblxyXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XHJcbn07XHJcblxyXG5Cb3VuZGluZ0JveC5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IEJvdW5kaW5nQm94LFxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgbWluIGFuZCBtYXggY29vcmRzIGZyb20gYSB2ZXJ0aWNlcyBhcnJheVxyXG4gICAgICogQHBhcmFtICB7YXJyYXl9IHZlcnRpY2VzXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUZyb21WZXJ0aWNlczogZnVuY3Rpb24gKHZlcnRpY2VzKSB7XHJcbiAgICAgICAgaWYgKHZlcnRpY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluO1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHZhciBtaW5BcnIgPSBtaW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXhBcnIgPSBtYXguYXJyYXk7XHJcbiAgICAgICAgICAgIHZlYzNDb3B5KG1pbkFyciwgdmVydGljZXNbMF0pO1xyXG4gICAgICAgICAgICB2ZWMzQ29weShtYXhBcnIsIHZlcnRpY2VzWzBdKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZlcnRleCA9IHZlcnRpY2VzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhbMF0gPCBtaW5BcnJbMF0pIHsgbWluQXJyWzBdID0gdmVydGV4WzBdOyB9XHJcbiAgICAgICAgICAgICAgICBpZiAodmVydGV4WzFdIDwgbWluQXJyWzFdKSB7IG1pbkFyclsxXSA9IHZlcnRleFsxXTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleFsyXSA8IG1pbkFyclsyXSkgeyBtaW5BcnJbMl0gPSB2ZXJ0ZXhbMl07IH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodmVydGV4WzBdID4gbWF4QXJyWzBdKSB7IG1heEFyclswXSA9IHZlcnRleFswXTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleFsxXSA+IG1heEFyclsxXSkgeyBtYXhBcnJbMV0gPSB2ZXJ0ZXhbMV07IH1cclxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhbMl0gPiBtYXhBcnJbMl0pIHsgbWF4QXJyWzJdID0gdmVydGV4WzJdOyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWluLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIG1heC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVbmlvbiBvcGVyYXRpb24gd2l0aCBhbm90aGVyIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5Cb3VuZGluZ0JveH0gYmJveFxyXG4gICAgICovXHJcbiAgICB1bmlvbjogZnVuY3Rpb24gKGJib3gpIHtcclxuICAgICAgICB2YXIgbWluID0gdGhpcy5taW47XHJcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xyXG4gICAgICAgIHZlYzMubWluKG1pbi5hcnJheSwgbWluLmFycmF5LCBiYm94Lm1pbi5hcnJheSk7XHJcbiAgICAgICAgdmVjMy5tYXgobWF4LmFycmF5LCBtYXguYXJyYXksIGJib3gubWF4LmFycmF5KTtcclxuICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICBtYXguX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcnNlY3Rpb24gb3BlcmF0aW9uIHdpdGggYW5vdGhlciBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQm91bmRpbmdCb3h9IGJib3hcclxuICAgICAqL1xyXG4gICAgaW50ZXJzZWN0aW9uOiBmdW5jdGlvbiAoYmJveCkge1xyXG4gICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbjtcclxuICAgICAgICB2YXIgbWF4ID0gdGhpcy5tYXg7XHJcbiAgICAgICAgdmVjMy5tYXgobWluLmFycmF5LCBtaW4uYXJyYXksIGJib3gubWluLmFycmF5KTtcclxuICAgICAgICB2ZWMzLm1pbihtYXguYXJyYXksIG1heC5hcnJheSwgYmJveC5tYXguYXJyYXkpO1xyXG4gICAgICAgIG1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIG1heC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGludGVyc2VjdCB3aXRoIGFub3RoZXIgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkJvdW5kaW5nQm94fSBiYm94XHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RCb3VuZGluZ0JveDogZnVuY3Rpb24gKGJib3gpIHtcclxuICAgICAgICB2YXIgX21pbiA9IHRoaXMubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBfbWF4ID0gdGhpcy5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgIHZhciBfbWluMiA9IGJib3gubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBfbWF4MiA9IGJib3gubWF4LmFycmF5O1xyXG5cclxuICAgICAgICByZXR1cm4gISAoX21pblswXSA+IF9tYXgyWzBdIHx8IF9taW5bMV0gPiBfbWF4MlsxXSB8fCBfbWluWzJdID4gX21heDJbMl1cclxuICAgICAgICAgICAgfHwgX21heFswXSA8IF9taW4yWzBdIHx8IF9tYXhbMV0gPCBfbWluMlsxXSB8fCBfbWF4WzJdIDwgX21pbjJbMl0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGNvbnRhaW4gYW5vdGhlciBib3VuZGluZyBib3ggZW50aXJlbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQm91bmRpbmdCb3h9IGJib3hcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGNvbnRhaW5Cb3VuZGluZ0JveDogZnVuY3Rpb24gKGJib3gpIHtcclxuXHJcbiAgICAgICAgdmFyIF9taW4gPSB0aGlzLm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heCA9IHRoaXMubWF4LmFycmF5O1xyXG5cclxuICAgICAgICB2YXIgX21pbjIgPSBiYm94Lm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heDIgPSBiYm94Lm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgcmV0dXJuIF9taW5bMF0gPD0gX21pbjJbMF0gJiYgX21pblsxXSA8PSBfbWluMlsxXSAmJiBfbWluWzJdIDw9IF9taW4yWzJdXHJcbiAgICAgICAgICAgICYmIF9tYXhbMF0gPj0gX21heDJbMF0gJiYgX21heFsxXSA+PSBfbWF4MlsxXSAmJiBfbWF4WzJdID49IF9tYXgyWzJdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGNvbnRhaW4gcG9pbnQgZW50aXJlbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gcG9pbnRcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGNvbnRhaW5Qb2ludDogZnVuY3Rpb24gKHApIHtcclxuICAgICAgICB2YXIgX21pbiA9IHRoaXMubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBfbWF4ID0gdGhpcy5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgIHZhciBfcCA9IHAuYXJyYXk7XHJcblxyXG4gICAgICAgIHJldHVybiBfbWluWzBdIDw9IF9wWzBdICYmIF9taW5bMV0gPD0gX3BbMV0gJiYgX21pblsyXSA8PSBfcFsyXVxyXG4gICAgICAgICAgICAmJiBfbWF4WzBdID49IF9wWzBdICYmIF9tYXhbMV0gPj0gX3BbMV0gJiYgX21heFsyXSA+PSBfcFsyXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBib3VuZGluZyBib3ggaXMgZmluaXRlXHJcbiAgICAgKi9cclxuICAgIGlzRmluaXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF9taW4gPSB0aGlzLm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heCA9IHRoaXMubWF4LmFycmF5O1xyXG4gICAgICAgIHJldHVybiBpc0Zpbml0ZShfbWluWzBdKSAmJiBpc0Zpbml0ZShfbWluWzFdKSAmJiBpc0Zpbml0ZShfbWluWzJdKVxyXG4gICAgICAgICAgICAmJiBpc0Zpbml0ZShfbWF4WzBdKSAmJiBpc0Zpbml0ZShfbWF4WzFdKSAmJiBpc0Zpbml0ZShfbWF4WzJdKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhbiBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCB0byB0aGUgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBhcHBseVRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG4gICAgICAgIHRoaXMudHJhbnNmb3JtRnJvbSh0aGlzLCBtYXRyaXgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBmcm9tIGFub3RoZXIgYm91bmRpbmcgYm94IGFuZCBhbiBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeC5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5Cb3VuZGluZ0JveH0gc291cmNlXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gbWF0cml4XHJcbiAgICAgKi9cclxuICAgIHRyYW5zZm9ybUZyb206IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gaHR0cDovL2Rldi50aGVvbWFkZXIuY29tL3RyYW5zZm9ybS1ib3VuZGluZy1ib3hlcy9cclxuICAgICAgICB2YXIgeGEgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB4YiA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHlhID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgeWIgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB6YSA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHpiID0gdmVjMy5jcmVhdGUoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UsIG1hdHJpeCkge1xyXG4gICAgICAgICAgICB2YXIgbWluID0gc291cmNlLm1pbi5hcnJheTtcclxuICAgICAgICAgICAgdmFyIG1heCA9IHNvdXJjZS5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgICAgICB2YXIgbSA9IG1hdHJpeC5hcnJheTtcclxuXHJcbiAgICAgICAgICAgIHhhWzBdID0gbVswXSAqIG1pblswXTsgeGFbMV0gPSBtWzFdICogbWluWzBdOyB4YVsyXSA9IG1bMl0gKiBtaW5bMF07XHJcbiAgICAgICAgICAgIHhiWzBdID0gbVswXSAqIG1heFswXTsgeGJbMV0gPSBtWzFdICogbWF4WzBdOyB4YlsyXSA9IG1bMl0gKiBtYXhbMF07XHJcblxyXG4gICAgICAgICAgICB5YVswXSA9IG1bNF0gKiBtaW5bMV07IHlhWzFdID0gbVs1XSAqIG1pblsxXTsgeWFbMl0gPSBtWzZdICogbWluWzFdO1xyXG4gICAgICAgICAgICB5YlswXSA9IG1bNF0gKiBtYXhbMV07IHliWzFdID0gbVs1XSAqIG1heFsxXTsgeWJbMl0gPSBtWzZdICogbWF4WzFdO1xyXG5cclxuICAgICAgICAgICAgemFbMF0gPSBtWzhdICogbWluWzJdOyB6YVsxXSA9IG1bOV0gKiBtaW5bMl07IHphWzJdID0gbVsxMF0gKiBtaW5bMl07XHJcbiAgICAgICAgICAgIHpiWzBdID0gbVs4XSAqIG1heFsyXTsgemJbMV0gPSBtWzldICogbWF4WzJdOyB6YlsyXSA9IG1bMTBdICogbWF4WzJdO1xyXG5cclxuICAgICAgICAgICAgbWluID0gdGhpcy5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgIG1heCA9IHRoaXMubWF4LmFycmF5O1xyXG4gICAgICAgICAgICBtaW5bMF0gPSBNYXRoLm1pbih4YVswXSwgeGJbMF0pICsgTWF0aC5taW4oeWFbMF0sIHliWzBdKSArIE1hdGgubWluKHphWzBdLCB6YlswXSkgKyBtWzEyXTtcclxuICAgICAgICAgICAgbWluWzFdID0gTWF0aC5taW4oeGFbMV0sIHhiWzFdKSArIE1hdGgubWluKHlhWzFdLCB5YlsxXSkgKyBNYXRoLm1pbih6YVsxXSwgemJbMV0pICsgbVsxM107XHJcbiAgICAgICAgICAgIG1pblsyXSA9IE1hdGgubWluKHhhWzJdLCB4YlsyXSkgKyBNYXRoLm1pbih5YVsyXSwgeWJbMl0pICsgTWF0aC5taW4oemFbMl0sIHpiWzJdKSArIG1bMTRdO1xyXG5cclxuICAgICAgICAgICAgbWF4WzBdID0gTWF0aC5tYXgoeGFbMF0sIHhiWzBdKSArIE1hdGgubWF4KHlhWzBdLCB5YlswXSkgKyBNYXRoLm1heCh6YVswXSwgemJbMF0pICsgbVsxMl07XHJcbiAgICAgICAgICAgIG1heFsxXSA9IE1hdGgubWF4KHhhWzFdLCB4YlsxXSkgKyBNYXRoLm1heCh5YVsxXSwgeWJbMV0pICsgTWF0aC5tYXgoemFbMV0sIHpiWzFdKSArIG1bMTNdO1xyXG4gICAgICAgICAgICBtYXhbMl0gPSBNYXRoLm1heCh4YVsyXSwgeGJbMl0pICsgTWF0aC5tYXgoeWFbMl0sIHliWzJdKSArIE1hdGgubWF4KHphWzJdLCB6YlsyXSkgKyBtWzE0XTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubWluLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubWF4Ll9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IGEgcHJvamVjdGlvbiBtYXRyaXggdG8gdGhlIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtYXRyaXhcclxuICAgICAqL1xyXG4gICAgYXBwbHlQcm9qZWN0aW9uOiBmdW5jdGlvbiAobWF0cml4KSB7XHJcbiAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBtYXggPSB0aGlzLm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgdmFyIG0gPSBtYXRyaXguYXJyYXk7XHJcbiAgICAgICAgLy8gbWluIGluIG1pbiB6XHJcbiAgICAgICAgdmFyIHYxMCA9IG1pblswXTtcclxuICAgICAgICB2YXIgdjExID0gbWluWzFdO1xyXG4gICAgICAgIHZhciB2MTIgPSBtaW5bMl07XHJcbiAgICAgICAgLy8gbWF4IGluIG1pbiB6XHJcbiAgICAgICAgdmFyIHYyMCA9IG1heFswXTtcclxuICAgICAgICB2YXIgdjIxID0gbWF4WzFdO1xyXG4gICAgICAgIHZhciB2MjIgPSBtaW5bMl07XHJcbiAgICAgICAgLy8gbWF4IGluIG1heCB6XHJcbiAgICAgICAgdmFyIHYzMCA9IG1heFswXTtcclxuICAgICAgICB2YXIgdjMxID0gbWF4WzFdO1xyXG4gICAgICAgIHZhciB2MzIgPSBtYXhbMl07XHJcblxyXG4gICAgICAgIGlmIChtWzE1XSA9PT0gMSkgeyAgLy8gT3J0aG9ncmFwaGljIHByb2plY3Rpb25cclxuICAgICAgICAgICAgbWluWzBdID0gbVswXSAqIHYxMCArIG1bMTJdO1xyXG4gICAgICAgICAgICBtaW5bMV0gPSBtWzVdICogdjExICsgbVsxM107XHJcbiAgICAgICAgICAgIG1heFsyXSA9IG1bMTBdICogdjEyICsgbVsxNF07XHJcblxyXG4gICAgICAgICAgICBtYXhbMF0gPSBtWzBdICogdjMwICsgbVsxMl07XHJcbiAgICAgICAgICAgIG1heFsxXSA9IG1bNV0gKiB2MzEgKyBtWzEzXTtcclxuICAgICAgICAgICAgbWluWzJdID0gbVsxMF0gKiB2MzIgKyBtWzE0XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciB3ID0gLTEgLyB2MTI7XHJcbiAgICAgICAgICAgIG1pblswXSA9IG1bMF0gKiB2MTAgKiB3O1xyXG4gICAgICAgICAgICBtaW5bMV0gPSBtWzVdICogdjExICogdztcclxuICAgICAgICAgICAgbWF4WzJdID0gKG1bMTBdICogdjEyICsgbVsxNF0pICogdztcclxuXHJcbiAgICAgICAgICAgIHcgPSAtMSAvIHYyMjtcclxuICAgICAgICAgICAgbWF4WzBdID0gbVswXSAqIHYyMCAqIHc7XHJcbiAgICAgICAgICAgIG1heFsxXSA9IG1bNV0gKiB2MjEgKiB3O1xyXG5cclxuICAgICAgICAgICAgdyA9IC0xIC8gdjMyO1xyXG4gICAgICAgICAgICBtaW5bMl0gPSAobVsxMF0gKiB2MzIgKyBtWzE0XSkgKiB3O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubWF4Ll9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVWZXJ0aWNlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XHJcbiAgICAgICAgaWYgKCF2ZXJ0aWNlcykge1xyXG4gICAgICAgICAgICAvLyBDdWJlIHZlcnRpY2VzXHJcbiAgICAgICAgICAgIHZlcnRpY2VzID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNlc1tpXSA9IHZlYzMuZnJvbVZhbHVlcygwLCAwLCAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIEVpZ2h0IGNvb3JkcyBvZiBib3VuZGluZyBib3hcclxuICAgICAgICAgICAgICogQHR5cGUge0Zsb2F0MzJBcnJheVtdfVxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbWluID0gdGhpcy5taW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4LmFycmF5O1xyXG4gICAgICAgIC8vLS0tIG1pbiB6XHJcbiAgICAgICAgLy8gbWluIHhcclxuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzBdLCBtaW5bMF0sIG1pblsxXSwgbWluWzJdKTtcclxuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzFdLCBtaW5bMF0sIG1heFsxXSwgbWluWzJdKTtcclxuICAgICAgICAvLyBtYXggeFxyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbMl0sIG1heFswXSwgbWluWzFdLCBtaW5bMl0pO1xyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbM10sIG1heFswXSwgbWF4WzFdLCBtaW5bMl0pO1xyXG5cclxuICAgICAgICAvLy0tIG1heCB6XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s0XSwgbWluWzBdLCBtaW5bMV0sIG1heFsyXSk7XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s1XSwgbWluWzBdLCBtYXhbMV0sIG1heFsyXSk7XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s2XSwgbWF4WzBdLCBtaW5bMV0sIG1heFsyXSk7XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s3XSwgbWF4WzBdLCBtYXhbMV0sIG1heFsyXSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29weSB2YWx1ZXMgZnJvbSBhbm90aGVyIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5Cb3VuZGluZ0JveH0gYmJveFxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbiAoYmJveCkge1xyXG4gICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbjtcclxuICAgICAgICB2YXIgbWF4ID0gdGhpcy5tYXg7XHJcbiAgICAgICAgdmVjM0NvcHkobWluLmFycmF5LCBiYm94Lm1pbi5hcnJheSk7XHJcbiAgICAgICAgdmVjM0NvcHkobWF4LmFycmF5LCBiYm94Lm1heC5hcnJheSk7XHJcbiAgICAgICAgbWluLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LkJvdW5kaW5nQm94fVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIGJvdW5kaW5nQm94LmNvcHkodGhpcyk7XHJcbiAgICAgICAgcmV0dXJuIGJvdW5kaW5nQm94O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQm91bmRpbmdCb3g7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgUXVhdGVybmlvbiBmcm9tICcuL21hdGgvUXVhdGVybmlvbic7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4vbWF0aC9NYXRyaXg0JztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcblxyXG52YXIgbmFtZUlkID0gMDtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5Ob2RlXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgTm9kZSA9IEJhc2UuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5Ob2RlIyAqL3tcclxuICAgIC8qKlxyXG4gICAgICogU2NlbmUgbm9kZSBuYW1lXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICBuYW1lOiAnJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBvc2l0aW9uIHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgbm9kZS4gYWthIHRyYW5zbGF0aW9uLlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgcG9zaXRpb246IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGlvbiByZWxhdGl2ZSB0byBpdHMgcGFyZW50IG5vZGUuIFJlcHJlc2VudGVkIGJ5IGEgcXVhdGVybmlvblxyXG4gICAgICogQHR5cGUge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgcm90YXRpb246IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSByZWxhdGl2ZSB0byBpdHMgcGFyZW50IG5vZGVcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggcmVsYXRpdmUgdG8gaXRzIHJvb3Qgc2NlbmUuXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICB3b3JsZFRyYW5zZm9ybTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFmZmluZSB0cmFuc2Zvcm0gbWF0cml4IHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgbm9kZS5cclxuICAgICAqIENvbXBvc2l0ZWQgd2l0aCBwb3NpdGlvbiwgcm90YXRpb24gYW5kIHNjYWxlLlxyXG4gICAgICogQHR5cGUge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgbG9jYWxUcmFuc2Zvcm06IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgbG9jYWwgdHJhbnNmb3JtIGlzIHVwZGF0ZSBmcm9tIFNSVChzY2FsZSwgcm90YXRpb24sIHRyYW5zbGF0aW9uLCB3aGljaCBpcyBwb3NpdGlvbiBoZXJlKSBlYWNoIGZyYW1lXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgYXV0b1VwZGF0ZUxvY2FsVHJhbnNmb3JtOiB0cnVlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFyZW50IG9mIGN1cnJlbnQgc2NlbmUgbm9kZVxyXG4gICAgICogQHR5cGUgez9jbGF5Lk5vZGV9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfcGFyZW50OiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcm9vdCBzY2VuZSBtb3VudGVkLiBOdWxsIGlmIGl0IGlzIGEgaXNvbGF0ZWQgbm9kZVxyXG4gICAgICogQHR5cGUgez9jbGF5LlNjZW5lfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX3NjZW5lOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9uZWVkc1VwZGF0ZVdvcmxkVHJhbnNmb3JtOiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9pbkl0ZXJhdGluZzogZmFsc2UsXHJcblxyXG4gICAgLy8gRGVwdGggZm9yIHRyYW5zcGFyZW50IGxpc3Qgc29ydGluZ1xyXG4gICAgX19kZXB0aDogMFxyXG5cclxufSwgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gKHRoaXMudHlwZSB8fCAnTk9ERScpICsgJ18nICsgKG5hbWVJZCsrKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMucG9zaXRpb24pIHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5yb3RhdGlvbikge1xyXG4gICAgICAgIHRoaXMucm90YXRpb24gPSBuZXcgUXVhdGVybmlvbigpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnNjYWxlKSB7XHJcbiAgICAgICAgdGhpcy5zY2FsZSA9IG5ldyBWZWN0b3IzKDEsIDEsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgdGhpcy5sb2NhbFRyYW5zZm9ybSA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4gICAgdGhpcy5fY2hpbGRyZW4gPSBbXTtcclxuXHJcbn0sXHJcbi8qKkBsZW5kcyBjbGF5Lk5vZGUucHJvdG90eXBlLiAqL1xyXG57XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmVjdG9yM31cclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICB0YXJnZXQ6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIElmIG5vZGUgYW5kIGl0cyBjaGlscmVuIGludmlzaWJsZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgaW52aXNpYmxlOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIE5vZGUgaXMgYSBza2lubmVkIG1lc2hcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzU2tpbm5lZE1lc2g6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhIHJlbmRlcmFibGUgc2NlbmUgbm9kZSwgbGlrZSBNZXNoIGFuZCBQYXJ0aWNsZVN5c3RlbVxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNSZW5kZXJhYmxlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgbmFtZSBvZiB0aGUgc2NlbmUgbm9kZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqL1xyXG4gICAgc2V0TmFtZTogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLl9zY2VuZTtcclxuICAgICAgICBpZiAoc2NlbmUpIHtcclxuICAgICAgICAgICAgdmFyIG5vZGVSZXBvc2l0b3J5ID0gc2NlbmUuX25vZGVSZXBvc2l0b3J5O1xyXG4gICAgICAgICAgICBkZWxldGUgbm9kZVJlcG9zaXRvcnlbdGhpcy5uYW1lXTtcclxuICAgICAgICAgICAgbm9kZVJlcG9zaXRvcnlbbmFtZV0gPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBhIGNoaWxkIG5vZGVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBub2RlXHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICB2YXIgb3JpZ2luYWxQYXJlbnQgPSBub2RlLl9wYXJlbnQ7XHJcbiAgICAgICAgaWYgKG9yaWdpbmFsUGFyZW50ID09PSB0aGlzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9yaWdpbmFsUGFyZW50KSB7XHJcbiAgICAgICAgICAgIG9yaWdpbmFsUGFyZW50LnJlbW92ZShub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbm9kZS5fcGFyZW50ID0gdGhpcztcclxuICAgICAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKG5vZGUpO1xyXG5cclxuICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLl9zY2VuZTtcclxuICAgICAgICBpZiAoc2NlbmUgJiYgc2NlbmUgIT09IG5vZGUuc2NlbmUpIHtcclxuICAgICAgICAgICAgbm9kZS50cmF2ZXJzZSh0aGlzLl9hZGRTZWxmVG9TY2VuZSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1hcmsgY2hpbGRyZW4gbmVlZHMgdXBkYXRlIHRyYW5zZm9ybVxyXG4gICAgICAgIC8vIEluIGNhc2UgY2hpbGQgYXJlIHJlbW92ZSBhbmQgYWRkZWQgYWdhaW4gYWZ0ZXIgcGFyZW50IG1vdmVkXHJcbiAgICAgICAgbm9kZS5fbmVlZHNVcGRhdGVXb3JsZFRyYW5zZm9ybSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIHRoZSBnaXZlbiBjaGlsZCBzY2VuZSBub2RlXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxyXG4gICAgICovXHJcbiAgICByZW1vdmU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcbiAgICAgICAgdmFyIGlkeCA9IGNoaWxkcmVuLmluZGV4T2Yobm9kZSk7XHJcbiAgICAgICAgaWYgKGlkeCA8IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgbm9kZS5fcGFyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3NjZW5lKSB7XHJcbiAgICAgICAgICAgIG5vZGUudHJhdmVyc2UodGhpcy5fcmVtb3ZlU2VsZkZyb21TY2VuZSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhbGwgY2hpbGRyZW5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcblxyXG4gICAgICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGNoaWxkcmVuLmxlbmd0aDsgaWR4KyspIHtcclxuICAgICAgICAgICAgY2hpbGRyZW5baWR4XS5fcGFyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zY2VuZSkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5baWR4XS50cmF2ZXJzZSh0aGlzLl9yZW1vdmVTZWxmRnJvbVNjZW5lLCB0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fY2hpbGRyZW4gPSBbXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIHNjZW5lIG1vdW50ZWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuU2NlbmV9XHJcbiAgICAgKi9cclxuICAgIGdldFNjZW5lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NjZW5lO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBwYXJlbnQgbm9kZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5TY2VuZX1cclxuICAgICAqL1xyXG4gICAgZ2V0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcclxuICAgIH0sXHJcblxyXG4gICAgX3JlbW92ZVNlbGZGcm9tU2NlbmU6IGZ1bmN0aW9uIChkZXNjZW5kYW50KSB7XHJcbiAgICAgICAgZGVzY2VuZGFudC5fc2NlbmUucmVtb3ZlRnJvbVNjZW5lKGRlc2NlbmRhbnQpO1xyXG4gICAgICAgIGRlc2NlbmRhbnQuX3NjZW5lID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgX2FkZFNlbGZUb1NjZW5lOiBmdW5jdGlvbiAoZGVzY2VuZGFudCkge1xyXG4gICAgICAgIHRoaXMuX3NjZW5lLmFkZFRvU2NlbmUoZGVzY2VuZGFudCk7XHJcbiAgICAgICAgZGVzY2VuZGFudC5fc2NlbmUgPSB0aGlzLl9zY2VuZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhbmNlc3RvciBvZiB0aGUgZ2l2ZW4gc2NlbmUgbm9kZVxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk5vZGV9IG5vZGVcclxuICAgICAqL1xyXG4gICAgaXNBbmNlc3RvcjogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICB2YXIgcGFyZW50ID0gbm9kZS5fcGFyZW50O1xyXG4gICAgICAgIHdoaWxlKHBhcmVudCkge1xyXG4gICAgICAgICAgICBpZiAocGFyZW50ID09PSB0aGlzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQuX3BhcmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhIG5ldyBjcmVhdGVkIGFycmF5IG9mIGFsbCBjaGlsZHJlbiBub2Rlc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlW119XHJcbiAgICAgKi9cclxuICAgIGNoaWxkcmVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuLnNsaWNlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGNoaWxkIHNjZW5lIG5vZGUgYXQgZ2l2ZW4gaW5kZXguXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XHJcbiAgICAgKi9cclxuICAgIGNoaWxkQXQ6IGZ1bmN0aW9uIChpZHgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW5baWR4XTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZmlyc3QgY2hpbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2hpbGRCeU5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0ubmFtZSA9PT0gbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBmaXJzdCBkZXNjZW5kYW50IGhhdmUgdGhlIGdpdmVuIG5hbWVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XHJcbiAgICAgKi9cclxuICAgIGdldERlc2NlbmRhbnRCeU5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkLm5hbWUgPT09IG5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXMgPSBjaGlsZC5nZXREZXNjZW5kYW50QnlOYW1lKG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUXVlcnkgZGVzY2VuZGFudCBub2RlIGJ5IHBhdGhcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogIG5vZGUucXVlcnlOb2RlKCdyb290L3BhcmVudC9jaGlsZCcpO1xyXG4gICAgICovXHJcbiAgICBxdWVyeU5vZGU6IGZ1bmN0aW9uIChwYXRoKSB7XHJcbiAgICAgICAgaWYgKCFwYXRoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETyBOYW1lIGhhdmUgc2xhc2ggP1xyXG4gICAgICAgIHZhciBwYXRoQXJyID0gcGF0aC5zcGxpdCgnLycpO1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhBcnIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSBwYXRoQXJyW2ldO1xyXG4gICAgICAgICAgICAvLyBTa2lwIGVtcHR5XHJcbiAgICAgICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IGN1cnJlbnQuX2NoaWxkcmVuO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltqXTtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5uYW1lID09PSBuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBFYXJseSByZXR1cm4gaWYgbm90IGZvdW5kXHJcbiAgICAgICAgICAgIGlmICghZm91bmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHF1ZXJ5IHBhdGgsIHJlbGF0aXZlIHRvIHJvb3ROb2RlKGRlZmF1bHQgaXMgc2NlbmUpXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3Jvb3ROb2RlXVxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICBnZXRQYXRoOiBmdW5jdGlvbiAocm9vdE5vZGUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJy8nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLl9wYXJlbnQ7XHJcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLm5hbWU7XHJcbiAgICAgICAgd2hpbGUgKGN1cnJlbnQuX3BhcmVudCkge1xyXG4gICAgICAgICAgICBwYXRoID0gY3VycmVudC5uYW1lICsgJy8nICsgcGF0aDtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnQuX3BhcmVudCA9PSByb290Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuX3BhcmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFjdXJyZW50Ll9wYXJlbnQgJiYgcm9vdE5vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlcHRoIGZpcnN0IHRyYXZlcnNlIGFsbCBpdHMgZGVzY2VuZGFudCBzY2VuZSBub2Rlcy5cclxuICAgICAqXHJcbiAgICAgKiAqKldBUk4qKiBEb24ndCBkbyBgYWRkYCwgYHJlbW92ZWAgb3BlcmF0aW9uIGluIHRoZSBjYWxsYmFjayBkdXJpbmcgdHJhdmVyc2UuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAgICogQHBhcmFtIHtOb2RlfSBbY29udGV4dF1cclxuICAgICAqL1xyXG4gICAgdHJhdmVyc2U6IGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4dCkge1xyXG4gICAgICAgIGNhbGxiYWNrLmNhbGwoY29udGV4dCwgdGhpcyk7XHJcbiAgICAgICAgdmFyIF9jaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IF9jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBfY2hpbGRyZW5baV0udHJhdmVyc2UoY2FsbGJhY2ssIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmF2ZXJzZSBhbGwgY2hpbGRyZW4gbm9kZXMuXHJcbiAgICAgKlxyXG4gICAgICogKipXQVJOKiogRE9OJ1QgZG8gYGFkZGAsIGByZW1vdmVgIG9wZXJhdGlvbiBpbiB0aGUgY2FsbGJhY2sgZHVyaW5nIGl0ZXJhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAgICogQHBhcmFtIHtOb2RlfSBbY29udGV4dF1cclxuICAgICAqL1xyXG4gICAgZWFjaENoaWxkOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNvbnRleHQpIHtcclxuICAgICAgICB2YXIgX2NoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcbiAgICAgICAgZm9yKHZhciBpID0gMCwgbGVuID0gX2NoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IF9jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgY2FsbGJhY2suY2FsbChjb250ZXh0LCBjaGlsZCwgaSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgbG9jYWwgdHJhbnNmb3JtIGFuZCBkZWNvbXBvc2UgdG8gU1JUXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gbWF0cml4XHJcbiAgICAgKi9cclxuICAgIHNldExvY2FsVHJhbnNmb3JtOiBmdW5jdGlvbiAobWF0cml4KSB7XHJcbiAgICAgICAgbWF0NC5jb3B5KHRoaXMubG9jYWxUcmFuc2Zvcm0uYXJyYXksIG1hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5kZWNvbXBvc2VMb2NhbFRyYW5zZm9ybSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlY29tcG9zZSB0aGUgbG9jYWwgdHJhbnNmb3JtIHRvIFNSVFxyXG4gICAgICovXHJcbiAgICBkZWNvbXBvc2VMb2NhbFRyYW5zZm9ybTogZnVuY3Rpb24gKGtlZXBTY2FsZSkge1xyXG4gICAgICAgIHZhciBzY2FsZSA9ICFrZWVwU2NhbGUgPyB0aGlzLnNjYWxlOiBudWxsO1xyXG4gICAgICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0uZGVjb21wb3NlTWF0cml4KHNjYWxlLCB0aGlzLnJvdGF0aW9uLCB0aGlzLnBvc2l0aW9uKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHdvcmxkIHRyYW5zZm9ybSBhbmQgZGVjb21wb3NlIHRvIFNSVFxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBzZXRXb3JsZFRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG4gICAgICAgIG1hdDQuY29weSh0aGlzLndvcmxkVHJhbnNmb3JtLmFycmF5LCBtYXRyaXguYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuZGVjb21wb3NlV29ybGRUcmFuc2Zvcm0oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNvbXBvc2UgdGhlIHdvcmxkIHRyYW5zZm9ybSB0byBTUlRcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICovXHJcbiAgICBkZWNvbXBvc2VXb3JsZFRyYW5zZm9ybTogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIHRtcCA9IG1hdDQuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoa2VlcFNjYWxlKSB7XHJcbiAgICAgICAgICAgIHZhciBsb2NhbFRyYW5zZm9ybSA9IHRoaXMubG9jYWxUcmFuc2Zvcm07XHJcbiAgICAgICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XHJcbiAgICAgICAgICAgIC8vIEFzc3VtZSB3b3JsZCB0cmFuc2Zvcm0gaXMgdXBkYXRlZFxyXG4gICAgICAgICAgICBpZiAodGhpcy5fcGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBtYXQ0LmludmVydCh0bXAsIHRoaXMuX3BhcmVudC53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KGxvY2FsVHJhbnNmb3JtLmFycmF5LCB0bXAsIHdvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1hdDQuY29weShsb2NhbFRyYW5zZm9ybS5hcnJheSwgd29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBzY2FsZSA9ICFrZWVwU2NhbGUgPyB0aGlzLnNjYWxlOiBudWxsO1xyXG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5kZWNvbXBvc2VNYXRyaXgoc2NhbGUsIHRoaXMucm90YXRpb24sIHRoaXMucG9zaXRpb24pO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIHRyYW5zZm9ybU5lZWRzVXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24uX2RpcnR5XHJcbiAgICAgICAgICAgIHx8IHRoaXMucm90YXRpb24uX2RpcnR5XHJcbiAgICAgICAgICAgIHx8IHRoaXMuc2NhbGUuX2RpcnR5O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBsb2NhbCB0cmFuc2Zvcm0gZnJvbSBTUlRcclxuICAgICAqIE5vdGljZSB0aGF0IGxvY2FsIHRyYW5zZm9ybSB3aWxsIG5vdCBiZSB1cGRhdGVkIGlmIF9kaXJ0eSBtYXJrIG9mIHBvc2l0aW9uLCByb3RhdGlvbiwgc2NhbGUgaXMgYWxsIGZhbHNlXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUxvY2FsVHJhbnNmb3JtOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgcm90YXRpb24gPSB0aGlzLnJvdGF0aW9uO1xyXG4gICAgICAgIHZhciBzY2FsZSA9IHRoaXMuc2NhbGU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybU5lZWRzVXBkYXRlKCkpIHtcclxuICAgICAgICAgICAgdmFyIG0gPSB0aGlzLmxvY2FsVHJhbnNmb3JtLmFycmF5O1xyXG5cclxuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIG9yZGVyLCBzY2FsZS0+cm90YXRpb24tPnBvc2l0aW9uXHJcbiAgICAgICAgICAgIG1hdDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24obSwgcm90YXRpb24uYXJyYXksIHBvc2l0aW9uLmFycmF5KTtcclxuXHJcbiAgICAgICAgICAgIG1hdDQuc2NhbGUobSwgbSwgc2NhbGUuYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgcm90YXRpb24uX2RpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNjYWxlLl9kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBwb3NpdGlvbi5fZGlydHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgd29ybGQgdHJhbnNmb3JtLCBhc3N1bWUgaXRzIHBhcmVudCB3b3JsZCB0cmFuc2Zvcm0gaGF2ZSBiZWVuIHVwZGF0ZWRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF91cGRhdGVXb3JsZFRyYW5zZm9ybVRvcERvd246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbG9jYWxUcmFuc2Zvcm0gPSB0aGlzLmxvY2FsVHJhbnNmb3JtLmFycmF5O1xyXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0uYXJyYXk7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5QWZmaW5lKFxyXG4gICAgICAgICAgICAgICAgd29ybGRUcmFuc2Zvcm0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnQud29ybGRUcmFuc2Zvcm0uYXJyYXksXHJcbiAgICAgICAgICAgICAgICBsb2NhbFRyYW5zZm9ybVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWF0NC5jb3B5KHdvcmxkVHJhbnNmb3JtLCBsb2NhbFRyYW5zZm9ybSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB3b3JsZCB0cmFuc2Zvcm0gYmVmb3JlIHdob2xlIHNjZW5lIGlzIHVwZGF0ZWQuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVdvcmxkVHJhbnNmb3JtOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gRmluZCB0aGUgcm9vdCBub2RlIHdoaWNoIHRyYW5zZm9ybSBuZWVkcyB1cGRhdGU7XHJcbiAgICAgICAgdmFyIHJvb3ROb2RlSXNEaXJ0eSA9IHRoaXM7XHJcbiAgICAgICAgd2hpbGUgKHJvb3ROb2RlSXNEaXJ0eSAmJiByb290Tm9kZUlzRGlydHkuZ2V0UGFyZW50KClcclxuICAgICAgICAgICAgJiYgcm9vdE5vZGVJc0RpcnR5LmdldFBhcmVudCgpLnRyYW5zZm9ybU5lZWRzVXBkYXRlKClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcm9vdE5vZGVJc0RpcnR5ID0gcm9vdE5vZGVJc0RpcnR5LmdldFBhcmVudCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb290Tm9kZUlzRGlydHkudXBkYXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIGxvY2FsIHRyYW5zZm9ybSBhbmQgd29ybGQgdHJhbnNmb3JtIHJlY3Vyc2l2ZWx5XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlVXBkYXRlV29ybGRcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZm9yY2VVcGRhdGVXb3JsZCkge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9VcGRhdGVMb2NhbFRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gaXMgbWFudWFsbHkgc2V0dGVkXHJcbiAgICAgICAgICAgIGZvcmNlVXBkYXRlV29ybGQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZvcmNlVXBkYXRlV29ybGQgfHwgdGhpcy5fbmVlZHNVcGRhdGVXb3JsZFRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVXb3JsZFRyYW5zZm9ybVRvcERvd24oKTtcclxuICAgICAgICAgICAgZm9yY2VVcGRhdGVXb3JsZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0gPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZShmb3JjZVVwZGF0ZVdvcmxkKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGJvdW5kaW5nIGJveCBvZiBub2RlXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW2ZpbHRlcl1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuQm91bmRpbmdCb3h9IFtvdXRdXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LkJvdW5kaW5nQm94fVxyXG4gICAgICovXHJcbiAgICAvLyBUT0RPIFNraW5uaW5nXHJcbiAgICBnZXRCb3VuZGluZ0JveDogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmdW5jdGlvbiBkZWZhdWx0RmlsdGVyIChlbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIWVsLmludmlzaWJsZSAmJiBlbC5nZW9tZXRyeTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHRtcEJCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB2YXIgdG1wTWF0NCA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgdmFyIGludldvcmxkVHJhbnNmb3JtID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZpbHRlciwgb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG91dCB8fCBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICAgICAgZmlsdGVyID0gZmlsdGVyIHx8IGRlZmF1bHRGaWx0ZXI7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fcGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBNYXRyaXg0LmludmVydChpbnZXb3JsZFRyYW5zZm9ybSwgdGhpcy5fcGFyZW50LndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIE1hdHJpeDQuaWRlbnRpdHkoaW52V29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRyYXZlcnNlKGZ1bmN0aW9uIChtZXNoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWVzaC5nZW9tZXRyeSAmJiBtZXNoLmdlb21ldHJ5LmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG1wQkJveC5jb3B5KG1lc2guZ2VvbWV0cnkuYm91bmRpbmdCb3gpO1xyXG4gICAgICAgICAgICAgICAgICAgIE1hdHJpeDQubXVsdGlwbHkodG1wTWF0NCwgaW52V29ybGRUcmFuc2Zvcm0sIG1lc2gud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcEJCb3guYXBwbHlUcmFuc2Zvcm0odG1wTWF0NCk7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0LnVuaW9uKHRtcEJCb3gpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCB0aGlzLCBkZWZhdWx0RmlsdGVyKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgd29ybGQgcG9zaXRpb24sIGV4dHJhY3RlZCBmcm9tIHdvcmxkIHRyYW5zZm9ybVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBbb3V0XVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBnZXRXb3JsZFBvc2l0aW9uOiBmdW5jdGlvbiAob3V0KSB7XHJcbiAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybU5lZWRzVXBkYXRlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbSA9IHRoaXMud29ybGRUcmFuc2Zvcm0uYXJyYXk7XHJcbiAgICAgICAgaWYgKG91dCkge1xyXG4gICAgICAgICAgICB2YXIgYXJyID0gb3V0LmFycmF5O1xyXG4gICAgICAgICAgICBhcnJbMF0gPSBtWzEyXTtcclxuICAgICAgICAgICAgYXJyWzFdID0gbVsxM107XHJcbiAgICAgICAgICAgIGFyclsyXSA9IG1bMTRdO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKG1bMTJdLCBtWzEzXSwgbVsxNF0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBub2RlXHJcbiAgICAgKiBAcmV0dXJuIHtOb2RlfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBub2RlID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKTtcclxuXHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcblxyXG4gICAgICAgIG5vZGUuc2V0TmFtZSh0aGlzLm5hbWUpO1xyXG4gICAgICAgIG5vZGUucG9zaXRpb24uY29weSh0aGlzLnBvc2l0aW9uKTtcclxuICAgICAgICBub2RlLnJvdGF0aW9uLmNvcHkodGhpcy5yb3RhdGlvbik7XHJcbiAgICAgICAgbm9kZS5zY2FsZS5jb3B5KHRoaXMuc2NhbGUpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG5vZGUuYWRkKGNoaWxkcmVuW2ldLmNsb25lKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHRoZSBub2RlIGFyb3VuZCBhIGF4aXMgYnkgYW5nbGUgZGVncmVlcywgYXhpcyBwYXNzZXMgdGhyb3VnaCBwb2ludFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHBvaW50IENlbnRlciBwb2ludFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IGF4aXMgIENlbnRlciBheGlzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gICAgICAgYW5nbGUgUm90YXRpb24gYW5nbGVcclxuICAgICAqIEBzZWUgaHR0cDovL2RvY3MudW5pdHkzZC5jb20vRG9jdW1lbnRhdGlvbi9TY3JpcHRSZWZlcmVuY2UvVHJhbnNmb3JtLlJvdGF0ZUFyb3VuZC5odG1sXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqL1xyXG4gICAgcm90YXRlQXJvdW5kOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB2YXIgUlRNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuICAgICAgICAvLyBUT0RPIGltcHJvdmUgcGVyZm9ybWFuY2VcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHBvaW50LCBheGlzLCBhbmdsZSkge1xyXG5cclxuICAgICAgICAgICAgdi5jb3B5KHRoaXMucG9zaXRpb24pLnN1YnRyYWN0KHBvaW50KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBsb2NhbFRyYW5zZm9ybSA9IHRoaXMubG9jYWxUcmFuc2Zvcm07XHJcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLmlkZW50aXR5KCk7XHJcbiAgICAgICAgICAgIC8vIHBhcmVudCBub2RlXHJcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZShwb2ludCk7XHJcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLnJvdGF0ZShhbmdsZSwgYXhpcyk7XHJcblxyXG4gICAgICAgICAgICBSVE1hdHJpeC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbih0aGlzLnJvdGF0aW9uLCB2KTtcclxuICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm0ubXVsdGlwbHkoUlRNYXRyaXgpO1xyXG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5zY2FsZSh0aGlzLnNjYWxlKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGVjb21wb3NlTG9jYWxUcmFuc2Zvcm0oKTtcclxuICAgICAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGVXb3JsZFRyYW5zZm9ybSA9IHRydWU7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW3VwXVxyXG4gICAgICogQHNlZSBodHRwOi8vd3d3Lm9wZW5nbC5vcmcvc2RrL2RvY3MvbWFuMi94aHRtbC9nbHVMb29rQXQueG1sXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqL1xyXG4gICAgbG9va0F0OiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdXApIHtcclxuICAgICAgICAgICAgbS5sb29rQXQodGhpcy5wb3NpdGlvbiwgdGFyZ2V0LCB1cCB8fCB0aGlzLmxvY2FsVHJhbnNmb3JtLnkpLmludmVydCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNldExvY2FsVHJhbnNmb3JtKG0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKClcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBOb2RlO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcInZlYzMgY2FsY0FtYmllbnRTSExpZ2h0KGludCBpZHgsIHZlYzMgTikge1xcbiBpbnQgb2Zmc2V0ID0gOSAqIGlkeDtcXG4gcmV0dXJuIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzBdXFxuICsgYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbMV0gKiBOLnhcXG4gKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1syXSAqIE4ueVxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzNdICogTi56XFxuICsgYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbNF0gKiBOLnggKiBOLnpcXG4gKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1s1XSAqIE4ueiAqIE4ueVxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzZdICogTi55ICogTi54XFxuICsgYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbN10gKiAoMy4wICogTi56ICogTi56IC0gMS4wKVxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzhdICogKE4ueCAqIE4ueCAtIE4ueSAqIE4ueSk7XFxufVwiO1xyXG4iLCJpbXBvcnQgY2FsY0FtYmllbnRTSExpZ2h0RXNzbCBmcm9tICcuL2NhbGNBbWJpZW50U0hMaWdodC5nbHNsLmpzJztcclxuXHJcbnZhciB1bmlmb3JtVmVjM1ByZWZpeCA9ICd1bmlmb3JtIHZlYzMgJztcclxudmFyIHVuaWZvcm1GbG9hdFByZWZpeCA9ICd1bmlmb3JtIGZsb2F0ICc7XHJcbnZhciBleHBvcnRIZWFkZXJQcmVmaXggPSAnQGV4cG9ydCBjbGF5LmhlYWRlci4nO1xyXG52YXIgZXhwb3J0RW5kID0gJ0BlbmQnO1xyXG52YXIgdW5jb25maWd1cmFibGUgPSAnOnVuY29uZmlndXJhYmxlOyc7XHJcbmV4cG9ydCBkZWZhdWx0IFtcclxuICAgIGV4cG9ydEhlYWRlclByZWZpeCArICdkaXJlY3Rpb25hbF9saWdodCcsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdkaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9uW0RJUkVDVElPTkFMX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ2RpcmVjdGlvbmFsTGlnaHRDb2xvcltESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICBleHBvcnRFbmQsXHJcblxyXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ2FtYmllbnRfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnYW1iaWVudExpZ2h0Q29sb3JbQU1CSUVOVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICBleHBvcnRFbmQsXHJcblxyXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ2FtYmllbnRfc2hfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnYW1iaWVudFNITGlnaHRDb2xvcltBTUJJRU5UX1NIX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ2FtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzW0FNQklFTlRfU0hfTElHSFRfQ09VTlQgKiA5XScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIGNhbGNBbWJpZW50U0hMaWdodEVzc2wsXHJcbiAgICBleHBvcnRFbmQsXHJcblxyXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ2FtYmllbnRfY3ViZW1hcF9saWdodCcsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdhbWJpZW50Q3ViZW1hcExpZ2h0Q29sb3JbQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgICd1bmlmb3JtIHNhbXBsZXJDdWJlIGFtYmllbnRDdWJlbWFwTGlnaHRDdWJlbWFwW0FNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgYW1iaWVudEN1YmVtYXBMaWdodEJSREZMb29rdXBbQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIGV4cG9ydEVuZCxcclxuXHJcbiAgICBleHBvcnRIZWFkZXJQcmVmaXggKyAncG9pbnRfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAncG9pbnRMaWdodFBvc2l0aW9uW1BPSU5UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1GbG9hdFByZWZpeCArICdwb2ludExpZ2h0UmFuZ2VbUE9JTlRfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAncG9pbnRMaWdodENvbG9yW1BPSU5UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIGV4cG9ydEVuZCxcclxuXHJcbiAgICBleHBvcnRIZWFkZXJQcmVmaXggKyAnc3BvdF9saWdodCcsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdzcG90TGlnaHRQb3NpdGlvbltTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ3Nwb3RMaWdodERpcmVjdGlvbltTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1GbG9hdFByZWZpeCArICdzcG90TGlnaHRSYW5nZVtTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1GbG9hdFByZWZpeCArICdzcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lW1NQT1RfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgdW5pZm9ybUZsb2F0UHJlZml4ICsgJ3Nwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmVbU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAnc3BvdExpZ2h0RmFsbG9mZkZhY3RvcltTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ3Nwb3RMaWdodENvbG9yW1NQT1RfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgZXhwb3J0RW5kXHJcbl0uam9pbignXFxuJyk7XHJcbiIsImltcG9ydCBOb2RlIGZyb20gJy4vTm9kZSc7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi9TaGFkZXInO1xyXG5cclxuaW1wb3J0IGxpZ2h0U2hhZGVyIGZyb20gJy4vc2hhZGVyL3NvdXJjZS9oZWFkZXIvbGlnaHQnO1xyXG5TaGFkZXJbJ2ltcG9ydCddKGxpZ2h0U2hhZGVyKTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5MaWdodFxyXG4gKiBAZXh0ZW5kcyBjbGF5Lk5vZGVcclxuICovXHJcbnZhciBMaWdodCA9IE5vZGUuZXh0ZW5kKGZ1bmN0aW9uKCl7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LkxpZ2h0IyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTGlnaHQgUkdCIGNvbG9yXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcltdfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbG9yOiBbMSwgMSwgMV0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIExpZ2h0IGludGVuc2l0eVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW50ZW5zaXR5OiAxLjAsXHJcblxyXG4gICAgICAgIC8vIENvbmZpZyBmb3Igc2hhZG93IG1hcFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGxpZ2h0IGNhc3Qgc2hhZG93XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2FzdFNoYWRvdzogdHJ1ZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2hhZG93IG1hcCBzaXplXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzaGFkb3dSZXNvbHV0aW9uOiA1MTIsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIExpZ2h0IGdyb3VwLCBzaGFkZXIgd2l0aCBzYW1lIGBsaWdodEdyb3VwYCB3aWxsIGJlIGFmZmVjdGVkXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBPbmx5IHVzZWZ1bCBpbiBmb3J3YXJkIHJlbmRlcmluZ1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ3JvdXA6IDBcclxuICAgIH07XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5MaWdodC5wcm90b3R5cGUuICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogTGlnaHQgdHlwZVxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LkxpZ2h0I1xyXG4gICAgICovXHJcbiAgICB0eXBlOiAnJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTGlnaHR9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5MaWdodC5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBsaWdodCA9IE5vZGUucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICAgICAgbGlnaHQuY29sb3IgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmNvbG9yKTtcclxuICAgICAgICBsaWdodC5pbnRlbnNpdHkgPSB0aGlzLmludGVuc2l0eTtcclxuICAgICAgICBsaWdodC5jYXN0U2hhZG93ID0gdGhpcy5jYXN0U2hhZG93O1xyXG4gICAgICAgIGxpZ2h0LnNoYWRvd1Jlc29sdXRpb24gPSB0aGlzLnNoYWRvd1Jlc29sdXRpb247XHJcblxyXG4gICAgICAgIHJldHVybiBsaWdodDtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaWdodDtcclxuIiwiaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9WZWN0b3IzJztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0NCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5pbXBvcnQgdmVjNCBmcm9tICcuLi9nbG1hdHJpeC92ZWM0JztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuUGxhbmVcclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFtub3JtYWxdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZGlzdGFuY2VdXHJcbiAqL1xyXG52YXIgUGxhbmUgPSBmdW5jdGlvbihub3JtYWwsIGRpc3RhbmNlKSB7XHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbCBvZiB0aGUgcGxhbmVcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubm9ybWFsID0gbm9ybWFsIHx8IG5ldyBWZWN0b3IzKDAsIDEsIDApO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29uc3RhbnQgb2YgdGhlIHBsYW5lIGVxdWF0aW9uLCB1c2VkIGFzIGRpc3RhbmNlIHRvIHRoZSBvcmlnaW5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZGlzdGFuY2UgPSBkaXN0YW5jZSB8fCAwO1xyXG59O1xyXG5cclxuUGxhbmUucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBQbGFuZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGZyb20gYSBnaXZlbiBwb2ludCB0byB0aGUgcGxhbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gcG9pbnRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGlzdGFuY2VUb1BvaW50OiBmdW5jdGlvbihwb2ludCkge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLmRvdChwb2ludC5hcnJheSwgdGhpcy5ub3JtYWwuYXJyYXkpIC0gdGhpcy5kaXN0YW5jZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIHByb2plY3Rpb24gcG9pbnQgb24gdGhlIHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHBvaW50XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBwcm9qZWN0UG9pbnQ6IGZ1bmN0aW9uKHBvaW50LCBvdXQpIHtcclxuICAgICAgICBpZiAoIW91dCkge1xyXG4gICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZCA9IHRoaXMuZGlzdGFuY2VUb1BvaW50KHBvaW50KTtcclxuICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgcG9pbnQuYXJyYXksIHRoaXMubm9ybWFsLmFycmF5LCAtZCk7XHJcbiAgICAgICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWxpemUgdGhlIHBsYW5lJ3Mgbm9ybWFsIGFuZCBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGludkxlbiA9IDEgLyB2ZWMzLmxlbih0aGlzLm5vcm1hbC5hcnJheSk7XHJcbiAgICAgICAgdmVjMy5zY2FsZSh0aGlzLm5vcm1hbC5hcnJheSwgaW52TGVuKTtcclxuICAgICAgICB0aGlzLmRpc3RhbmNlICo9IGludkxlbjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgcGxhbmUgaW50ZXJzZWN0IGEgZnJ1c3R1bVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5GcnVzdHVtfSBGcnVzdHVtXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RGcnVzdHVtOiBmdW5jdGlvbihmcnVzdHVtKSB7XHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgYWxsIGNvb3JkcyBvZiBmcnVzdHVtIGlzIG9uIHBsYW5lIGFsbCB1bmRlciBwbGFuZVxyXG4gICAgICAgIHZhciBjb29yZHMgPSBmcnVzdHVtLnZlcnRpY2VzO1xyXG4gICAgICAgIHZhciBub3JtYWwgPSB0aGlzLm5vcm1hbC5hcnJheTtcclxuICAgICAgICB2YXIgb25QbGFuZSA9IHZlYzMuZG90KGNvb3Jkc1swXS5hcnJheSwgbm9ybWFsKSA+IHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCh2ZWMzLmRvdChjb29yZHNbaV0uYXJyYXksIG5vcm1hbCkgPiB0aGlzLmRpc3RhbmNlKSAhPSBvblBsYW5lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIHBsYW5lIGFuZCBhIGdpdmVuIGxpbmVcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHN0YXJ0IHN0YXJ0IHBvaW50IG9mIGxpbmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBlbmQgZW5kIHBvaW50IG9mIGxpbmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBbb3V0XVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RMaW5lOiAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHJkID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCwgb3V0KSB7XHJcbiAgICAgICAgICAgIHZhciBkMCA9IHRoaXMuZGlzdGFuY2VUb1BvaW50KHN0YXJ0KTtcclxuICAgICAgICAgICAgdmFyIGQxID0gdGhpcy5kaXN0YW5jZVRvUG9pbnQoZW5kKTtcclxuICAgICAgICAgICAgaWYgKChkMCA+IDAgJiYgZDEgPiAwKSB8fCAoZDAgPCAwICYmIGQxIDwgMCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFJheSBpbnRlcnNlY3Rpb25cclxuICAgICAgICAgICAgdmFyIHBuID0gdGhpcy5ub3JtYWwuYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBkID0gdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdmFyIHJvID0gc3RhcnQuYXJyYXk7XHJcbiAgICAgICAgICAgIC8vIGRpcmVjdGlvblxyXG4gICAgICAgICAgICB2ZWMzLnN1YihyZCwgZW5kLmFycmF5LCBzdGFydC5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHJkLCByZCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZGl2aWRlciA9IHZlYzMuZG90KHBuLCByZCk7XHJcbiAgICAgICAgICAgIC8vIHJheSBpcyBwYXJhbGxlbCB0byB0aGUgcGxhbmVcclxuICAgICAgICAgICAgaWYgKGRpdmlkZXIgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB0ID0gKHZlYzMuZG90KHBuLCBybykgLSBkKSAvIGRpdmlkZXI7XHJcbiAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBybywgcmQsIC10KTtcclxuICAgICAgICAgICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhbiBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCB0byBwbGFuZVxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGFwcGx5VHJhbnNmb3JtOiAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGludmVyc2VUcmFuc3Bvc2UgPSBtYXQ0LmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciBub3JtYWx2NCA9IHZlYzQuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHBvaW50djQgPSB2ZWM0LmNyZWF0ZSgpO1xyXG4gICAgICAgIHBvaW50djRbM10gPSAxO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihtNCkge1xyXG4gICAgICAgICAgICBtNCA9IG00LmFycmF5O1xyXG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gcG9pbnQgb24gcGxhbmVcclxuICAgICAgICAgICAgdmVjMy5zY2FsZShwb2ludHY0LCB0aGlzLm5vcm1hbC5hcnJheSwgdGhpcy5kaXN0YW5jZSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChwb2ludHY0LCBwb2ludHY0LCBtNCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzdGFuY2UgPSB2ZWMzLmRvdChwb2ludHY0LCB0aGlzLm5vcm1hbC5hcnJheSk7XHJcbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSBwbGFuZSBub3JtYWxcclxuICAgICAgICAgICAgbWF0NC5pbnZlcnQoaW52ZXJzZVRyYW5zcG9zZSwgbTQpO1xyXG4gICAgICAgICAgICBtYXQ0LnRyYW5zcG9zZShpbnZlcnNlVHJhbnNwb3NlLCBpbnZlcnNlVHJhbnNwb3NlKTtcclxuICAgICAgICAgICAgbm9ybWFsdjRbM10gPSAwO1xyXG4gICAgICAgICAgICB2ZWMzLmNvcHkobm9ybWFsdjQsIHRoaXMubm9ybWFsLmFycmF5KTtcclxuICAgICAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KG5vcm1hbHY0LCBub3JtYWx2NCwgaW52ZXJzZVRyYW5zcG9zZSk7XHJcbiAgICAgICAgICAgIHZlYzMuY29weSh0aGlzLm5vcm1hbC5hcnJheSwgbm9ybWFsdjQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGFub3RoZXIgcGxhbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gcGxhbmVcclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24ocGxhbmUpIHtcclxuICAgICAgICB2ZWMzLmNvcHkodGhpcy5ub3JtYWwuYXJyYXksIHBsYW5lLm5vcm1hbC5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5ub3JtYWwuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpc3RhbmNlID0gcGxhbmUuZGlzdGFuY2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgcGxhbmVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUGxhbmV9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgcGxhbmUgPSBuZXcgUGxhbmUoKTtcclxuICAgICAgICBwbGFuZS5jb3B5KHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBwbGFuZTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBsYW5lO1xyXG4iLCJpbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCBQbGFuZSBmcm9tICcuL1BsYW5lJztcclxuXHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxudmFyIHZlYzNTZXQgPSB2ZWMzLnNldDtcclxudmFyIHZlYzNDb3B5ID0gdmVjMy5jb3B5O1xyXG52YXIgdmVjM1RyYW5mb3JtTWF0NCA9IHZlYzMudHJhbnNmb3JtTWF0NDtcclxudmFyIG1hdGhNaW4gPSBNYXRoLm1pbjtcclxudmFyIG1hdGhNYXggPSBNYXRoLm1heDtcclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5GcnVzdHVtXHJcbiAqL1xyXG52YXIgRnJ1c3R1bSA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWlnaHQgcGxhbmVzIHRvIGVuY2xvc2UgdGhlIGZydXN0dW1cclxuICAgICAqIEB0eXBlIHtjbGF5LlBsYW5lW119XHJcbiAgICAgKi9cclxuICAgIHRoaXMucGxhbmVzID0gW107XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICB0aGlzLnBsYW5lcy5wdXNoKG5ldyBQbGFuZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEJvdW5kaW5nIGJveCBvZiBmcnVzdHVtXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAqL1xyXG4gICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWlnaHQgdmVydGljZXMgb2YgZnJ1c3R1bVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheVtdfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZlcnRpY2VzID0gW107XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xyXG4gICAgICAgIHRoaXMudmVydGljZXNbaV0gPSB2ZWMzLmZyb21WYWx1ZXMoMCwgMCwgMCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5GcnVzdHVtLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICAvLyBodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDEyMDUzMTIzMTAwNS9odHRwOi8vY3Jhenlqb2tlLmZyZWUuZnIvZG9jLzNEL3BsYW5lJTIwZXh0cmFjdGlvbi5wZGZcclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZydXN0dW0gZnJvbSBhIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gcHJvamVjdGlvbk1hdHJpeFxyXG4gICAgICovXHJcbiAgICBzZXRGcm9tUHJvamVjdGlvbjogZnVuY3Rpb24ocHJvamVjdGlvbk1hdHJpeCkge1xyXG5cclxuICAgICAgICB2YXIgcGxhbmVzID0gdGhpcy5wbGFuZXM7XHJcbiAgICAgICAgdmFyIG0gPSBwcm9qZWN0aW9uTWF0cml4LmFycmF5O1xyXG4gICAgICAgIHZhciBtMCA9IG1bMF0sIG0xID0gbVsxXSwgbTIgPSBtWzJdLCBtMyA9IG1bM107XHJcbiAgICAgICAgdmFyIG00ID0gbVs0XSwgbTUgPSBtWzVdLCBtNiA9IG1bNl0sIG03ID0gbVs3XTtcclxuICAgICAgICB2YXIgbTggPSBtWzhdLCBtOSA9IG1bOV0sIG0xMCA9IG1bMTBdLCBtMTEgPSBtWzExXTtcclxuICAgICAgICB2YXIgbTEyID0gbVsxMl0sIG0xMyA9IG1bMTNdLCBtMTQgPSBtWzE0XSwgbTE1ID0gbVsxNV07XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSBwbGFuZXNcclxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1swXS5ub3JtYWwuYXJyYXksIG0zIC0gbTAsIG03IC0gbTQsIG0xMSAtIG04KTtcclxuICAgICAgICBwbGFuZXNbMF0uZGlzdGFuY2UgPSAtKG0xNSAtIG0xMik7XHJcbiAgICAgICAgcGxhbmVzWzBdLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1sxXS5ub3JtYWwuYXJyYXksIG0zICsgbTAsIG03ICsgbTQsIG0xMSArIG04KTtcclxuICAgICAgICBwbGFuZXNbMV0uZGlzdGFuY2UgPSAtKG0xNSArIG0xMik7XHJcbiAgICAgICAgcGxhbmVzWzFdLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1syXS5ub3JtYWwuYXJyYXksIG0zICsgbTEsIG03ICsgbTUsIG0xMSArIG05KTtcclxuICAgICAgICBwbGFuZXNbMl0uZGlzdGFuY2UgPSAtKG0xNSArIG0xMyk7XHJcbiAgICAgICAgcGxhbmVzWzJdLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1szXS5ub3JtYWwuYXJyYXksIG0zIC0gbTEsIG03IC0gbTUsIG0xMSAtIG05KTtcclxuICAgICAgICBwbGFuZXNbM10uZGlzdGFuY2UgPSAtKG0xNSAtIG0xMyk7XHJcbiAgICAgICAgcGxhbmVzWzNdLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1s0XS5ub3JtYWwuYXJyYXksIG0zIC0gbTIsIG03IC0gbTYsIG0xMSAtIG0xMCk7XHJcbiAgICAgICAgcGxhbmVzWzRdLmRpc3RhbmNlID0gLShtMTUgLSBtMTQpO1xyXG4gICAgICAgIHBsYW5lc1s0XS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbNV0ubm9ybWFsLmFycmF5LCBtMyArIG0yLCBtNyArIG02LCBtMTEgKyBtMTApO1xyXG4gICAgICAgIHBsYW5lc1s1XS5kaXN0YW5jZSA9IC0obTE1ICsgbTE0KTtcclxuICAgICAgICBwbGFuZXNbNV0ubm9ybWFsaXplKCk7XHJcblxyXG4gICAgICAgIC8vIFBlcnNwZWN0aXZlIHByb2plY3Rpb25cclxuICAgICAgICB2YXIgYm91bmRpbmdCb3ggPSB0aGlzLmJvdW5kaW5nQm94O1xyXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XHJcbiAgICAgICAgaWYgKG0xNSA9PT0gMCkgIHtcclxuICAgICAgICAgICAgdmFyIGFzcGVjdCA9IG01IC8gbTA7XHJcbiAgICAgICAgICAgIHZhciB6TmVhciA9IC1tMTQgLyAobTEwIC0gMSk7XHJcbiAgICAgICAgICAgIHZhciB6RmFyID0gLW0xNCAvIChtMTAgKyAxKTtcclxuICAgICAgICAgICAgdmFyIGZhclkgPSAtekZhciAvIG01O1xyXG4gICAgICAgICAgICB2YXIgbmVhclkgPSAtek5lYXIgLyBtNTtcclxuICAgICAgICAgICAgLy8gVXBkYXRlIGJvdW5kaW5nIGJveFxyXG4gICAgICAgICAgICBib3VuZGluZ0JveC5taW4uc2V0KC1mYXJZICogYXNwZWN0LCAtZmFyWSwgekZhcik7XHJcbiAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1heC5zZXQoZmFyWSAqIGFzcGVjdCwgZmFyWSwgek5lYXIpO1xyXG4gICAgICAgICAgICAvLyB1cGRhdGUgdmVydGljZXNcclxuICAgICAgICAgICAgLy8tLS0gbWluIHpcclxuICAgICAgICAgICAgLy8gbWluIHhcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1swXSwgLWZhclkgKiBhc3BlY3QsIC1mYXJZLCB6RmFyKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1sxXSwgLWZhclkgKiBhc3BlY3QsIGZhclksIHpGYXIpO1xyXG4gICAgICAgICAgICAvLyBtYXggeFxyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzJdLCBmYXJZICogYXNwZWN0LCAtZmFyWSwgekZhcik7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbM10sIGZhclkgKiBhc3BlY3QsIGZhclksIHpGYXIpO1xyXG4gICAgICAgICAgICAvLy0tIG1heCB6XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNF0sIC1uZWFyWSAqIGFzcGVjdCwgLW5lYXJZLCB6TmVhcik7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNV0sIC1uZWFyWSAqIGFzcGVjdCwgbmVhclksIHpOZWFyKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s2XSwgbmVhclkgKiBhc3BlY3QsIC1uZWFyWSwgek5lYXIpO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzddLCBuZWFyWSAqIGFzcGVjdCwgbmVhclksIHpOZWFyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7IC8vIE9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uXHJcbiAgICAgICAgICAgIHZhciBsZWZ0ID0gKC0xIC0gbTEyKSAvIG0wO1xyXG4gICAgICAgICAgICB2YXIgcmlnaHQgPSAoMSAtIG0xMikgLyBtMDtcclxuICAgICAgICAgICAgdmFyIHRvcCA9ICgxIC0gbTEzKSAvIG01O1xyXG4gICAgICAgICAgICB2YXIgYm90dG9tID0gKC0xIC0gbTEzKSAvIG01O1xyXG4gICAgICAgICAgICB2YXIgbmVhciA9ICgtMSAtIG0xNCkgLyBtMTA7XHJcbiAgICAgICAgICAgIHZhciBmYXIgPSAoMSAtIG0xNCkgLyBtMTA7XHJcblxyXG5cclxuICAgICAgICAgICAgYm91bmRpbmdCb3gubWluLnNldChNYXRoLm1pbihsZWZ0LCByaWdodCksIE1hdGgubWluKGJvdHRvbSwgdG9wKSwgTWF0aC5taW4oZmFyLCBuZWFyKSk7XHJcbiAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1heC5zZXQoTWF0aC5tYXgocmlnaHQsIGxlZnQpLCBNYXRoLm1heCh0b3AsIGJvdHRvbSksIE1hdGgubWF4KG5lYXIsIGZhcikpO1xyXG5cclxuICAgICAgICAgICAgdmFyIG1pbiA9IGJvdW5kaW5nQm94Lm1pbi5hcnJheTtcclxuICAgICAgICAgICAgdmFyIG1heCA9IGJvdW5kaW5nQm94Lm1heC5hcnJheTtcclxuICAgICAgICAgICAgLy8tLS0gbWluIHpcclxuICAgICAgICAgICAgLy8gbWluIHhcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1swXSwgbWluWzBdLCBtaW5bMV0sIG1pblsyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbMV0sIG1pblswXSwgbWF4WzFdLCBtaW5bMl0pO1xyXG4gICAgICAgICAgICAvLyBtYXggeFxyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzJdLCBtYXhbMF0sIG1pblsxXSwgbWluWzJdKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1szXSwgbWF4WzBdLCBtYXhbMV0sIG1pblsyXSk7XHJcbiAgICAgICAgICAgIC8vLS0gbWF4IHpcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s0XSwgbWluWzBdLCBtaW5bMV0sIG1heFsyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNV0sIG1pblswXSwgbWF4WzFdLCBtYXhbMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzZdLCBtYXhbMF0sIG1pblsxXSwgbWF4WzJdKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s3XSwgbWF4WzBdLCBtYXhbMV0sIG1heFsyXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IGEgYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggYW5kIHNldCB0byB0aGUgZ2l2ZW4gYm91bmRpbmcgYm94XHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBwYXJhbSB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAqIEBwYXJhbSB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAqL1xyXG4gICAgZ2V0VHJhbnNmb3JtZWRCb3VuZGluZ0JveDogKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgdG1wVmVjMyA9IHZlYzMuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihiYm94LCBtYXRyaXgpIHtcclxuICAgICAgICAgICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcclxuXHJcbiAgICAgICAgICAgIHZhciBtNCA9IG1hdHJpeC5hcnJheTtcclxuICAgICAgICAgICAgdmFyIG1pbiA9IGJib3gubWluO1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gYmJveC5tYXg7XHJcbiAgICAgICAgICAgIHZhciBtaW5BcnIgPSBtaW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXhBcnIgPSBtYXguYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciB2ID0gdmVydGljZXNbMF07XHJcbiAgICAgICAgICAgIHZlYzNUcmFuZm9ybU1hdDQodG1wVmVjMywgdiwgbTQpO1xyXG4gICAgICAgICAgICB2ZWMzQ29weShtaW5BcnIsIHRtcFZlYzMpO1xyXG4gICAgICAgICAgICB2ZWMzQ29weShtYXhBcnIsIHRtcFZlYzMpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHYgPSB2ZXJ0aWNlc1tpXTtcclxuICAgICAgICAgICAgICAgIHZlYzNUcmFuZm9ybU1hdDQodG1wVmVjMywgdiwgbTQpO1xyXG5cclxuICAgICAgICAgICAgICAgIG1pbkFyclswXSA9IG1hdGhNaW4odG1wVmVjM1swXSwgbWluQXJyWzBdKTtcclxuICAgICAgICAgICAgICAgIG1pbkFyclsxXSA9IG1hdGhNaW4odG1wVmVjM1sxXSwgbWluQXJyWzFdKTtcclxuICAgICAgICAgICAgICAgIG1pbkFyclsyXSA9IG1hdGhNaW4odG1wVmVjM1syXSwgbWluQXJyWzJdKTtcclxuXHJcbiAgICAgICAgICAgICAgICBtYXhBcnJbMF0gPSBtYXRoTWF4KHRtcFZlYzNbMF0sIG1heEFyclswXSk7XHJcbiAgICAgICAgICAgICAgICBtYXhBcnJbMV0gPSBtYXRoTWF4KHRtcFZlYzNbMV0sIG1heEFyclsxXSk7XHJcbiAgICAgICAgICAgICAgICBtYXhBcnJbMl0gPSBtYXRoTWF4KHRtcFZlYzNbMl0sIG1heEFyclsyXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICBtYXguX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBiYm94O1xyXG4gICAgICAgIH07XHJcbiAgICB9KSAoKVxyXG59O1xyXG5leHBvcnQgZGVmYXVsdCBGcnVzdHVtO1xyXG4iLCJpbXBvcnQgVmVjdG9yMyBmcm9tICcuL1ZlY3RvcjMnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcbnZhciBFUFNJTE9OID0gMWUtNTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuUmF5XHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBbb3JpZ2luXVxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW2RpcmVjdGlvbl1cclxuICovXHJcbnZhciBSYXkgPSBmdW5jdGlvbiAob3JpZ2luLCBkaXJlY3Rpb24pIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW4gfHwgbmV3IFZlY3RvcjMoKTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5kaXJlY3Rpb24gPSBkaXJlY3Rpb24gfHwgbmV3IFZlY3RvcjMoKTtcclxufTtcclxuXHJcblJheS5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IFJheSxcclxuXHJcbiAgICAvLyBodHRwOi8vd3d3LnNpZ2dyYXBoLm9yZy9lZHVjYXRpb24vbWF0ZXJpYWxzL0h5cGVyR3JhcGgvcmF5dHJhY2UvcmF5cGxhbmVfaW50ZXJzZWN0aW9uLmh0bVxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgaW50ZXJzZWN0aW9uIHBvaW50IGJldHdlZW4gcmF5IGFuZCBhIGdpdmUgcGxhbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUGxhbmV9IHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IFtvdXRdXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdFBsYW5lOiBmdW5jdGlvbiAocGxhbmUsIG91dCkge1xyXG4gICAgICAgIHZhciBwbiA9IHBsYW5lLm5vcm1hbC5hcnJheTtcclxuICAgICAgICB2YXIgZCA9IHBsYW5lLmRpc3RhbmNlO1xyXG4gICAgICAgIHZhciBybyA9IHRoaXMub3JpZ2luLmFycmF5O1xyXG4gICAgICAgIHZhciByZCA9IHRoaXMuZGlyZWN0aW9uLmFycmF5O1xyXG5cclxuICAgICAgICB2YXIgZGl2aWRlciA9IHZlYzMuZG90KHBuLCByZCk7XHJcbiAgICAgICAgLy8gcmF5IGlzIHBhcmFsbGVsIHRvIHRoZSBwbGFuZVxyXG4gICAgICAgIGlmIChkaXZpZGVyID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW91dCkge1xyXG4gICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdCA9ICh2ZWMzLmRvdChwbiwgcm8pIC0gZCkgLyBkaXZpZGVyO1xyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBybywgcmQsIC10KTtcclxuICAgICAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1pcnJvciB0aGUgcmF5IGFnYWluc3QgcGxhbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUGxhbmV9IHBsYW5lXHJcbiAgICAgKi9cclxuICAgIG1pcnJvckFnYWluc3RQbGFuZTogZnVuY3Rpb24gKHBsYW5lKSB7XHJcbiAgICAgICAgLy8gRGlzdGFuY2UgdG8gcGxhbmVcclxuICAgICAgICB2YXIgZCA9IHZlYzMuZG90KHBsYW5lLm5vcm1hbC5hcnJheSwgdGhpcy5kaXJlY3Rpb24uYXJyYXkpO1xyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQodGhpcy5kaXJlY3Rpb24uYXJyYXksIHRoaXMuZGlyZWN0aW9uLmFycmF5LCBwbGFuZS5ub3JtYWwuYXJyYXksIC1kICogMik7XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZGlzdGFuY2VUb1BvaW50OiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2ID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYsIHBvaW50LCB0aGlzLm9yaWdpbi5hcnJheSk7XHJcbiAgICAgICAgICAgIC8vIERpc3RhbmNlIGZyb20gcHJvamVjdGlvbiBwb2ludCB0byBvcmlnaW5cclxuICAgICAgICAgICAgdmFyIGIgPSB2ZWMzLmRvdCh2LCB0aGlzLmRpcmVjdGlvbi5hcnJheSk7XHJcbiAgICAgICAgICAgIGlmIChiIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzMuZGlzdGFuY2UodGhpcy5vcmlnaW4uYXJyYXksIHBvaW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBTcXVhcmVkIGRpc3RhbmNlIGZyb20gY2VudGVyIHRvIG9yaWdpblxyXG4gICAgICAgICAgICB2YXIgYzIgPSB2ZWMzLmxlblNxdWFyZWQodik7XHJcbiAgICAgICAgICAgIC8vIFNxdWFyZWQgZGlzdGFuY2UgZnJvbSBjZW50ZXIgdG8gcHJvamVjdGlvbiBwb2ludFxyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KGMyIC0gYiAqIGIpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIHJheSBhbmQgc3BoZXJlXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGNlbnRlclxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSByYWRpdXNcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdFNwaGVyZTogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdiA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjZW50ZXIsIHJhZGl1cywgb3V0KSB7XHJcbiAgICAgICAgICAgIHZhciBvcmlnaW4gPSB0aGlzLm9yaWdpbi5hcnJheTtcclxuICAgICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmFycmF5O1xyXG4gICAgICAgICAgICBjZW50ZXIgPSBjZW50ZXIuYXJyYXk7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYsIGNlbnRlciwgb3JpZ2luKTtcclxuICAgICAgICAgICAgLy8gRGlzdGFuY2UgZnJvbSBwcm9qZWN0aW9uIHBvaW50IHRvIG9yaWdpblxyXG4gICAgICAgICAgICB2YXIgYiA9IHZlYzMuZG90KHYsIGRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgIC8vIFNxdWFyZWQgZGlzdGFuY2UgZnJvbSBjZW50ZXIgdG8gb3JpZ2luXHJcbiAgICAgICAgICAgIHZhciBjMiA9IHZlYzMuc3F1YXJlZExlbmd0aCh2KTtcclxuICAgICAgICAgICAgLy8gU3F1YXJlZCBkaXN0YW5jZSBmcm9tIGNlbnRlciB0byBwcm9qZWN0aW9uIHBvaW50XHJcbiAgICAgICAgICAgIHZhciBkMiA9IGMyIC0gYiAqIGI7XHJcblxyXG4gICAgICAgICAgICB2YXIgcjIgPSByYWRpdXMgKiByYWRpdXM7XHJcbiAgICAgICAgICAgIC8vIE5vIGludGVyc2VjdGlvblxyXG4gICAgICAgICAgICBpZiAoZDIgPiByMikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgYSA9IE1hdGguc3FydChyMiAtIGQyKTtcclxuICAgICAgICAgICAgLy8gRmlyc3QgaW50ZXJzZWN0IHBvaW50XHJcbiAgICAgICAgICAgIHZhciB0MCA9IGIgLSBhO1xyXG4gICAgICAgICAgICAvLyBTZWNvbmQgaW50ZXJzZWN0IHBvaW50XHJcbiAgICAgICAgICAgIHZhciB0MSA9IGIgKyBhO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHQwIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHQxIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIG9yaWdpbiwgZGlyZWN0aW9uLCB0MSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBvcmlnaW4sIGRpcmVjdGlvbiwgdDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8vIGh0dHA6Ly93d3cuc2NyYXRjaGFwaXhlbC5jb20vbGVzc29ucy8zZC1iYXNpYy1sZXNzb25zL2xlc3Nvbi03LWludGVyc2VjdGluZy1zaW1wbGUtc2hhcGVzL3JheS1ib3gtaW50ZXJzZWN0aW9uL1xyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgaW50ZXJzZWN0aW9uIHBvaW50IGJldHdlZW4gcmF5IGFuZCBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Cb3VuZGluZ0JveH0gYmJveFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdEJvdW5kaW5nQm94OiBmdW5jdGlvbiAoYmJveCwgb3V0KSB7XHJcbiAgICAgICAgdmFyIGRpciA9IHRoaXMuZGlyZWN0aW9uLmFycmF5O1xyXG4gICAgICAgIHZhciBvcmlnaW4gPSB0aGlzLm9yaWdpbi5hcnJheTtcclxuICAgICAgICB2YXIgbWluID0gYmJveC5taW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIG1heCA9IGJib3gubWF4LmFycmF5O1xyXG5cclxuICAgICAgICB2YXIgaW52ZGlyeCA9IDEgLyBkaXJbMF07XHJcbiAgICAgICAgdmFyIGludmRpcnkgPSAxIC8gZGlyWzFdO1xyXG4gICAgICAgIHZhciBpbnZkaXJ6ID0gMSAvIGRpclsyXTtcclxuXHJcbiAgICAgICAgdmFyIHRtaW4sIHRtYXgsIHR5bWluLCB0eW1heCwgdHptaW4sIHR6bWF4O1xyXG4gICAgICAgIGlmIChpbnZkaXJ4ID49IDApIHtcclxuICAgICAgICAgICAgdG1pbiA9IChtaW5bMF0gLSBvcmlnaW5bMF0pICogaW52ZGlyeDtcclxuICAgICAgICAgICAgdG1heCA9IChtYXhbMF0gLSBvcmlnaW5bMF0pICogaW52ZGlyeDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRtYXggPSAobWluWzBdIC0gb3JpZ2luWzBdKSAqIGludmRpcng7XHJcbiAgICAgICAgICAgIHRtaW4gPSAobWF4WzBdIC0gb3JpZ2luWzBdKSAqIGludmRpcng7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbnZkaXJ5ID49IDApIHtcclxuICAgICAgICAgICAgdHltaW4gPSAobWluWzFdIC0gb3JpZ2luWzFdKSAqIGludmRpcnk7XHJcbiAgICAgICAgICAgIHR5bWF4ID0gKG1heFsxXSAtIG9yaWdpblsxXSkgKiBpbnZkaXJ5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdHltYXggPSAobWluWzFdIC0gb3JpZ2luWzFdKSAqIGludmRpcnk7XHJcbiAgICAgICAgICAgIHR5bWluID0gKG1heFsxXSAtIG9yaWdpblsxXSkgKiBpbnZkaXJ5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCh0bWluID4gdHltYXgpIHx8ICh0eW1pbiA+IHRtYXgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5bWluID4gdG1pbiB8fCB0bWluICE9PSB0bWluKSB7XHJcbiAgICAgICAgICAgIHRtaW4gPSB0eW1pbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5bWF4IDwgdG1heCB8fCB0bWF4ICE9PSB0bWF4KSB7XHJcbiAgICAgICAgICAgIHRtYXggPSB0eW1heDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpbnZkaXJ6ID49IDApIHtcclxuICAgICAgICAgICAgdHptaW4gPSAobWluWzJdIC0gb3JpZ2luWzJdKSAqIGludmRpcno7XHJcbiAgICAgICAgICAgIHR6bWF4ID0gKG1heFsyXSAtIG9yaWdpblsyXSkgKiBpbnZkaXJ6O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdHptYXggPSAobWluWzJdIC0gb3JpZ2luWzJdKSAqIGludmRpcno7XHJcbiAgICAgICAgICAgIHR6bWluID0gKG1heFsyXSAtIG9yaWdpblsyXSkgKiBpbnZkaXJ6O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCh0bWluID4gdHptYXgpIHx8ICh0em1pbiA+IHRtYXgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR6bWluID4gdG1pbiB8fCB0bWluICE9PSB0bWluKSB7XHJcbiAgICAgICAgICAgIHRtaW4gPSB0em1pbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR6bWF4IDwgdG1heCB8fCB0bWF4ICE9PSB0bWF4KSB7XHJcbiAgICAgICAgICAgIHRtYXggPSB0em1heDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRtYXggPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHQgPSB0bWluID49IDAgPyB0bWluIDogdG1heDtcclxuXHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIG9yaWdpbiwgZGlyLCB0KTtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL00lQzMlQjZsbGVyJUUyJTgwJTkzVHJ1bWJvcmVfaW50ZXJzZWN0aW9uX2FsZ29yaXRobVxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgaW50ZXJzZWN0aW9uIHBvaW50IGJldHdlZW4gcmF5IGFuZCB0aHJlZSB0cmlhbmdsZSB2ZXJ0aWNlc1xyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IGFcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gY1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgc2luZ2xlU2lkZWQsIENXIHRyaWFuZ2xlIHdpbGwgYmUgaWdub3JlZFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFtvdXRdXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW2JhcnljZW50ZXJpY10gYmFyeWNlbnRyaWMgY29vcmRzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdFRyaWFuZ2xlOiAoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2YXIgZUJBID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgZUNBID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgQU8gPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB2Q3Jvc3MgPSB2ZWMzLmNyZWF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMsIHNpbmdsZVNpZGVkLCBvdXQsIGJhcnljZW50ZXJpYykge1xyXG4gICAgICAgICAgICB2YXIgZGlyID0gdGhpcy5kaXJlY3Rpb24uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBvcmlnaW4gPSB0aGlzLm9yaWdpbi5hcnJheTtcclxuICAgICAgICAgICAgYSA9IGEuYXJyYXk7XHJcbiAgICAgICAgICAgIGIgPSBiLmFycmF5O1xyXG4gICAgICAgICAgICBjID0gYy5hcnJheTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMuc3ViKGVCQSwgYiwgYSk7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKGVDQSwgYywgYSk7XHJcblxyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKHZDcm9zcywgZUNBLCBkaXIpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRldCA9IHZlYzMuZG90KGVCQSwgdkNyb3NzKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzaW5nbGVTaWRlZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRldCA+IC1FUFNJTE9OKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGV0ID4gLUVQU0lMT04gJiYgZGV0IDwgRVBTSUxPTikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2ZWMzLnN1YihBTywgb3JpZ2luLCBhKTtcclxuICAgICAgICAgICAgdmFyIHUgPSB2ZWMzLmRvdCh2Q3Jvc3MsIEFPKSAvIGRldDtcclxuICAgICAgICAgICAgaWYgKHUgPCAwIHx8IHUgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVjMy5jcm9zcyh2Q3Jvc3MsIGVCQSwgQU8pO1xyXG4gICAgICAgICAgICB2YXIgdiA9IHZlYzMuZG90KGRpciwgdkNyb3NzKSAvIGRldDtcclxuXHJcbiAgICAgICAgICAgIGlmICh2IDwgMCB8fCB2ID4gMSB8fCAodSArIHYgPiAxKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlYzMuY3Jvc3ModkNyb3NzLCBlQkEsIGVDQSk7XHJcbiAgICAgICAgICAgIHZhciB0ID0gLXZlYzMuZG90KEFPLCB2Q3Jvc3MpIC8gZGV0O1xyXG5cclxuICAgICAgICAgICAgaWYgKHQgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGJhcnljZW50ZXJpYykge1xyXG4gICAgICAgICAgICAgICAgVmVjdG9yMy5zZXQoYmFyeWNlbnRlcmljLCAoMSAtIHUgLSB2KSwgdSwgdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIG9yaWdpbiwgZGlyLCB0KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhbiBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCB0byB0aGUgcmF5XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBhcHBseVRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG4gICAgICAgIFZlY3RvcjMuYWRkKHRoaXMuZGlyZWN0aW9uLCB0aGlzLmRpcmVjdGlvbiwgdGhpcy5vcmlnaW4pO1xyXG4gICAgICAgIFZlY3RvcjMudHJhbnNmb3JtTWF0NCh0aGlzLm9yaWdpbiwgdGhpcy5vcmlnaW4sIG1hdHJpeCk7XHJcbiAgICAgICAgVmVjdG9yMy50cmFuc2Zvcm1NYXQ0KHRoaXMuZGlyZWN0aW9uLCB0aGlzLmRpcmVjdGlvbiwgbWF0cml4KTtcclxuXHJcbiAgICAgICAgVmVjdG9yMy5zdWIodGhpcy5kaXJlY3Rpb24sIHRoaXMuZGlyZWN0aW9uLCB0aGlzLm9yaWdpbik7XHJcbiAgICAgICAgVmVjdG9yMy5ub3JtYWxpemUodGhpcy5kaXJlY3Rpb24sIHRoaXMuZGlyZWN0aW9uKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IHZhbHVlcyBmcm9tIGFub3RoZXIgcmF5XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuUmF5fSByYXlcclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24gKHJheSkge1xyXG4gICAgICAgIFZlY3RvcjMuY29weSh0aGlzLm9yaWdpbiwgcmF5Lm9yaWdpbik7XHJcbiAgICAgICAgVmVjdG9yMy5jb3B5KHRoaXMuZGlyZWN0aW9uLCByYXkuZGlyZWN0aW9uKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyByYXlcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUmF5fVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciByYXkgPSBuZXcgUmF5KCk7XHJcbiAgICAgICAgcmF5LmNvcHkodGhpcyk7XHJcbiAgICAgICAgcmV0dXJuIHJheTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJheTtcclxuIiwiaW1wb3J0IE5vZGUgZnJvbSAnLi9Ob2RlJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgRnJ1c3R1bSBmcm9tICcuL21hdGgvRnJ1c3R1bSc7XHJcbmltcG9ydCBSYXkgZnJvbSAnLi9tYXRoL1JheSc7XHJcblxyXG5pbXBvcnQgdmVjNCBmcm9tICcuL2dsbWF0cml4L3ZlYzQnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5DYW1lcmFcclxuICogQGV4dGVuZHMgY2xheS5Ob2RlXHJcbiAqL1xyXG52YXIgQ2FtZXJhID0gTm9kZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5DYW1lcmEjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW1lcmEgcHJvamVjdGlvbiBtYXRyaXhcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6IG5ldyBNYXRyaXg0KCksXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludmVyc2Ugb2YgY2FtZXJhIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTWF0cml4NH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBpbnZQcm9qZWN0aW9uTWF0cml4OiBuZXcgTWF0cml4NCgpLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBWaWV3IG1hdHJpeCwgZXF1YWwgdG8gaW52ZXJzZSBvZiBjYW1lcmEncyB3b3JsZCBtYXRyaXhcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZpZXdNYXRyaXg6IG5ldyBNYXRyaXg0KCksXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbWVyYSBmcnVzdHVtIGluIHZpZXcgc3BhY2VcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5GcnVzdHVtfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZydXN0dW06IG5ldyBGcnVzdHVtKClcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuQ2FtZXJhLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgICAgICBOb2RlLnByb3RvdHlwZS51cGRhdGUuY2FsbCh0aGlzLCBmb3JjZSk7XHJcbiAgICAgICAgTWF0cml4NC5pbnZlcnQodGhpcy52aWV3TWF0cml4LCB0aGlzLndvcmxkVHJhbnNmb3JtKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgTWF0cml4NC5pbnZlcnQodGhpcy5pbnZQcm9qZWN0aW9uTWF0cml4LCB0aGlzLnByb2plY3Rpb25NYXRyaXgpO1xyXG5cclxuICAgICAgICB0aGlzLmZydXN0dW0uc2V0RnJvbVByb2plY3Rpb24odGhpcy5wcm9qZWN0aW9uTWF0cml4KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY2FtZXJhIHZpZXcgbWF0cml4XHJcbiAgICAgKi9cclxuICAgIHNldFZpZXdNYXRyaXg6IGZ1bmN0aW9uICh2aWV3TWF0cml4KSB7XHJcbiAgICAgICAgTWF0cml4NC5jb3B5KHRoaXMudmlld01hdHJpeCwgdmlld01hdHJpeCk7XHJcbiAgICAgICAgTWF0cml4NC5pbnZlcnQodGhpcy53b3JsZFRyYW5zZm9ybSwgdmlld01hdHJpeCk7XHJcbiAgICAgICAgdGhpcy5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlY29tcG9zZSBjYW1lcmEgcHJvamVjdGlvbiBtYXRyaXhcclxuICAgICAqL1xyXG4gICAgZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY2FtZXJhIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gcHJvamVjdGlvbk1hdHJpeFxyXG4gICAgICovXHJcbiAgICBzZXRQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAocHJvamVjdGlvbk1hdHJpeCkge1xyXG4gICAgICAgIE1hdHJpeDQuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgsIHByb2plY3Rpb25NYXRyaXgpO1xyXG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeCwgcHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgdGhpcy5kZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgcHJvamVjdGlvbiBtYXRyaXgsIGNhbGxlZCBhZnRlciB1cGRhdGVcclxuICAgICAqL1xyXG4gICAgdXBkYXRlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYXN0IGEgcGlja2luZyByYXkgZnJvbSBjYW1lcmEgbmVhciBwbGFuZSB0byBmYXIgcGxhbmVcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjJ9IG5kY1xyXG4gICAgICogQHBhcmFtIHtjbGF5LlJheX0gW291dF1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuUmF5fVxyXG4gICAgICovXHJcbiAgICBjYXN0UmF5OiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2NCA9IHZlYzQuY3JlYXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChuZGMsIG91dCkge1xyXG4gICAgICAgICAgICB2YXIgcmF5ID0gb3V0ICE9PSB1bmRlZmluZWQgPyBvdXQgOiBuZXcgUmF5KCk7XHJcbiAgICAgICAgICAgIHZhciB4ID0gbmRjLmFycmF5WzBdO1xyXG4gICAgICAgICAgICB2YXIgeSA9IG5kYy5hcnJheVsxXTtcclxuICAgICAgICAgICAgdmVjNC5zZXQodjQsIHgsIHksIC0xLCAxKTtcclxuICAgICAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KHY0LCB2NCwgdGhpcy5pbnZQcm9qZWN0aW9uTWF0cml4LmFycmF5KTtcclxuICAgICAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KHY0LCB2NCwgdGhpcy53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzMuc2NhbGUocmF5Lm9yaWdpbi5hcnJheSwgdjQsIDEgLyB2NFszXSk7XHJcblxyXG4gICAgICAgICAgICB2ZWM0LnNldCh2NCwgeCwgeSwgMSwgMSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2NCwgdjQsIHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2NCwgdjQsIHRoaXMud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlKHY0LCB2NCwgMSAvIHY0WzNdKTtcclxuICAgICAgICAgICAgdmVjMy5zdWIocmF5LmRpcmVjdGlvbi5hcnJheSwgdjQsIHJheS5vcmlnaW4uYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUocmF5LmRpcmVjdGlvbi5hcnJheSwgcmF5LmRpcmVjdGlvbi5hcnJheSk7XHJcbiAgICAgICAgICAgIHJheS5kaXJlY3Rpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmF5Lm9yaWdpbi5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJheTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQG5hbWUgY2xvbmVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuQ2FtZXJhfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuQ2FtZXJhLnByb3RvdHlwZVxyXG4gICAgICovXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ2FtZXJhO1xyXG4iLCJpbXBvcnQgTm9kZSBmcm9tICcuL05vZGUnO1xyXG5pbXBvcnQgTGlnaHQgZnJvbSAnLi9MaWdodCc7XHJcbmltcG9ydCBDYW1lcmEgZnJvbSAnLi9DYW1lcmEnO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi9tYXRoL0JvdW5kaW5nQm94JztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgbWF0NCBmcm9tICcuL2dsbWF0cml4L21hdDQnO1xyXG5pbXBvcnQgTFJVQ2FjaGUgZnJvbSAnLi9jb3JlL0xSVSc7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4vbWF0aC9NYXRyaXg0JztcclxuXHJcbnZhciBJREVOVElUWSA9IG1hdDQuY3JlYXRlKCk7XHJcbnZhciBXT1JMRFZJRVcgPSBtYXQ0LmNyZWF0ZSgpO1xyXG5cclxudmFyIHByb2dyYW1LZXlDYWNoZSA9IHt9O1xyXG5cclxuZnVuY3Rpb24gZ2V0UHJvZ3JhbUtleShsaWdodE51bWJlcnMpIHtcclxuICAgIHZhciBkZWZpbmVTdHIgPSBbXTtcclxuICAgIHZhciBsaWdodFR5cGVzID0gT2JqZWN0LmtleXMobGlnaHROdW1iZXJzKTtcclxuICAgIGxpZ2h0VHlwZXMuc29ydCgpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaWdodFR5cGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0VHlwZSA9IGxpZ2h0VHlwZXNbaV07XHJcbiAgICAgICAgZGVmaW5lU3RyLnB1c2gobGlnaHRUeXBlICsgJyAnICsgbGlnaHROdW1iZXJzW2xpZ2h0VHlwZV0pO1xyXG4gICAgfVxyXG4gICAgdmFyIGtleSA9IGRlZmluZVN0ci5qb2luKCdcXG4nKTtcclxuXHJcbiAgICBpZiAocHJvZ3JhbUtleUNhY2hlW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gcHJvZ3JhbUtleUNhY2hlW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGlkID0gdXRpbC5nZW5HVUlEKCk7XHJcbiAgICBwcm9ncmFtS2V5Q2FjaGVba2V5XSA9IGlkO1xyXG4gICAgcmV0dXJuIGlkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBSZW5kZXJMaXN0KCkge1xyXG5cclxuICAgIHRoaXMub3BhcXVlID0gW107XHJcbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gW107XHJcblxyXG4gICAgdGhpcy5fb3BhcXVlQ291bnQgPSAwO1xyXG4gICAgdGhpcy5fdHJhbnNwYXJlbnRDb3VudCA9IDA7XHJcbn1cclxuXHJcblJlbmRlckxpc3QucHJvdG90eXBlLnN0YXJ0Q291bnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9vcGFxdWVDb3VudCA9IDA7XHJcbiAgICB0aGlzLl90cmFuc3BhcmVudENvdW50ID0gMDtcclxufTtcclxuXHJcblJlbmRlckxpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChvYmplY3QsIGlzVHJhbnNwYXJlbnQpIHtcclxuICAgIGlmIChpc1RyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgdGhpcy50cmFuc3BhcmVudFt0aGlzLl90cmFuc3BhcmVudENvdW50KytdID0gb2JqZWN0O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vcGFxdWVbdGhpcy5fb3BhcXVlQ291bnQrK10gPSBvYmplY3Q7XHJcbiAgICB9XHJcbn07XHJcblxyXG5SZW5kZXJMaXN0LnByb3RvdHlwZS5lbmRDb3VudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMudHJhbnNwYXJlbnQubGVuZ3RoID0gdGhpcy5fdHJhbnNwYXJlbnRDb3VudDtcclxuICAgIHRoaXMub3BhcXVlLmxlbmd0aCA9IHRoaXMuX29wYXF1ZUNvdW50O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IGNsYXkuU2NlbmUuUmVuZGVyTGlzdFxyXG4gKiBAcHJvcGVydHkge0FycmF5LjxjbGF5LlJlbmRlcmFibGU+fSBvcGFxdWVcclxuICogQHByb3BlcnR5IHtBcnJheS48Y2xheS5SZW5kZXJhYmxlPn0gdHJhbnNwYXJlbnRcclxuICovXHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuU2NlbmVcclxuICogQGV4dGVuZHMgY2xheS5Ob2RlXHJcbiAqL1xyXG52YXIgU2NlbmUgPSBOb2RlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlNjZW5lIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogR2xvYmFsIG1hdGVyaWFsIG9mIHNjZW5lXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTWF0ZXJpYWx9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWF0ZXJpYWw6IG51bGwsXHJcblxyXG4gICAgICAgIGxpZ2h0czogW10sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNjZW5lIGJvdW5kaW5nIGJveCBpbiB2aWV3IHNwYWNlLlxyXG4gICAgICAgICAqIFVzZWQgd2hlbiBjYW1lcmEgbmVlZHMgdG8gYWR1anN0IHRoZSBuZWFyIGFuZCBmYXIgcGxhbmUgYXV0b21hdGljYWxseVxyXG4gICAgICAgICAqIHNvIHRoYXQgdGhlIHZpZXcgZnJ1c3R1bSBjb250YWlucyB0aGUgdmlzaWJsZSBvYmplY3RzIGFzIHRpZ2h0bHkgYXMgcG9zc2libGUuXHJcbiAgICAgICAgICogTm90aWNlOlxyXG4gICAgICAgICAqICBJdCBpcyB1cGRhdGVkIGFmdGVyIHJlbmRlcmluZyAoaW4gdGhlIHN0ZXAgb2YgZnJ1c3R1bSBjdWxsaW5nIHBhc3NpbmdseSkuIFNvIG1heSBiZSBub3Qgc28gYWNjdXJhdGUsIGJ1dCBzYXZlcyBhIGxvdCBvZiBjYWxjdWxhdGlvblxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdmlld0JvdW5kaW5nQm94TGFzdEZyYW1lOiBuZXcgQm91bmRpbmdCb3goKSxcclxuXHJcbiAgICAgICAgLy8gVW5pZm9ybXMgZm9yIHNoYWRvdyBtYXAuXHJcbiAgICAgICAgc2hhZG93VW5pZm9ybXM6IHt9LFxyXG5cclxuICAgICAgICBfY2FtZXJhTGlzdDogW10sXHJcblxyXG4gICAgICAgIC8vIFByb3BlcnRpZXMgdG8gc2F2ZSB0aGUgbGlnaHQgaW5mb3JtYXRpb24gaW4gdGhlIHNjZW5lXHJcbiAgICAgICAgLy8gV2lsbCBiZSBzZXQgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxyXG4gICAgICAgIF9saWdodFVuaWZvcm1zOiB7fSxcclxuXHJcbiAgICAgICAgX3ByZXZpb3VzTGlnaHROdW1iZXI6IHt9LFxyXG5cclxuICAgICAgICBfbGlnaHROdW1iZXI6IHtcclxuICAgICAgICAgICAgLy8gZ3JvdXBJZDoge1xyXG4gICAgICAgICAgICAgICAgLy8gUE9JTlRfTElHSFQ6IDAsXHJcbiAgICAgICAgICAgICAgICAvLyBESVJFQ1RJT05BTF9MSUdIVDogMCxcclxuICAgICAgICAgICAgICAgIC8vIFNQT1RfTElHSFQ6IDAsXHJcbiAgICAgICAgICAgICAgICAvLyBBTUJJRU5UX0xJR0hUOiAwLFxyXG4gICAgICAgICAgICAgICAgLy8gQU1CSUVOVF9TSF9MSUdIVDogMFxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2xpZ2h0UHJvZ3JhbUtleXM6IHt9LFxyXG5cclxuICAgICAgICBfbm9kZVJlcG9zaXRvcnk6IHt9LFxyXG5cclxuICAgICAgICBfcmVuZGVyTGlzdHM6IG5ldyBMUlVDYWNoZSgyMClcclxuXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9zY2VuZSA9IHRoaXM7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5TY2VuZS5wcm90b3R5cGUuICovXHJcbntcclxuXHJcbiAgICAvLyBBZGQgbm9kZSB0byBzY2VuZVxyXG4gICAgYWRkVG9TY2VuZTogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbWVyYSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fY2FtZXJhTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0ZvdW5kIG11bHRpcGxlIGNhbWVyYSBpbiBvbmUgc2NlbmUuIFVzZSB0aGUgZmlzdCBvbmUuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fY2FtZXJhTGlzdC5wdXNoKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgTGlnaHQpIHtcclxuICAgICAgICAgICAgdGhpcy5saWdodHMucHVzaChub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5vZGUubmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub2RlUmVwb3NpdG9yeVtub2RlLm5hbWVdID0gbm9kZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFJlbW92ZSBub2RlIGZyb20gc2NlbmVcclxuICAgIHJlbW92ZUZyb21TY2VuZTogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICB2YXIgaWR4O1xyXG4gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgQ2FtZXJhKSB7XHJcbiAgICAgICAgICAgIGlkeCA9IHRoaXMuX2NhbWVyYUxpc3QuaW5kZXhPZihub2RlKTtcclxuICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYW1lcmFMaXN0LnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBMaWdodCkge1xyXG4gICAgICAgICAgICBpZHggPSB0aGlzLmxpZ2h0cy5pbmRleE9mKG5vZGUpO1xyXG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlnaHRzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlLm5hbWUpIHtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX25vZGVSZXBvc2l0b3J5W25vZGUubmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBub2RlIGJ5IG5hbWVcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7Tm9kZX1cclxuICAgICAqIEBERVBSRUNBVEVEXHJcbiAgICAgKi9cclxuICAgIGdldE5vZGU6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVSZXBvc2l0b3J5W25hbWVdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBtYWluIGNhbWVyYSBvZiB0aGUgc2NlbmUuXHJcbiAgICAgKiBAcGFyYW0ge2NsYXlnbC5DYW1lcmF9IGNhbWVyYVxyXG4gICAgICovXHJcbiAgICBzZXRNYWluQ2FtZXJhOiBmdW5jdGlvbiAoY2FtZXJhKSB7XHJcbiAgICAgICAgdmFyIGlkeCA9IHRoaXMuX2NhbWVyYUxpc3QuaW5kZXhPZihjYW1lcmEpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jYW1lcmFMaXN0LnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jYW1lcmFMaXN0LnVuc2hpZnQoY2FtZXJhKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBtYWluIGNhbWVyYSBvZiB0aGUgc2NlbmUuXHJcbiAgICAgKi9cclxuICAgIGdldE1haW5DYW1lcmE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2FtZXJhTGlzdFswXTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TGlnaHRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGlnaHRzO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVMaWdodHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbGlnaHRzID0gdGhpcy5saWdodHM7XHJcbiAgICAgICAgdGhpcy5fcHJldmlvdXNMaWdodE51bWJlciA9IHRoaXMuX2xpZ2h0TnVtYmVyO1xyXG5cclxuICAgICAgICB2YXIgbGlnaHROdW1iZXIgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbGlnaHQgPSBsaWdodHNbaV07XHJcbiAgICAgICAgICAgIGlmIChsaWdodC5pbnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBncm91cCA9IGxpZ2h0Lmdyb3VwO1xyXG4gICAgICAgICAgICBpZiAoIWxpZ2h0TnVtYmVyW2dyb3VwXSkge1xyXG4gICAgICAgICAgICAgICAgbGlnaHROdW1iZXJbZ3JvdXBdID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gVXNlciBjYW4gdXNlIGFueSB0eXBlIG9mIGxpZ2h0XHJcbiAgICAgICAgICAgIGxpZ2h0TnVtYmVyW2dyb3VwXVtsaWdodC50eXBlXSA9IGxpZ2h0TnVtYmVyW2dyb3VwXVtsaWdodC50eXBlXSB8fCAwO1xyXG4gICAgICAgICAgICBsaWdodE51bWJlcltncm91cF1bbGlnaHQudHlwZV0rKztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fbGlnaHROdW1iZXIgPSBsaWdodE51bWJlcjtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgZ3JvdXBJZCBpbiBsaWdodE51bWJlcikge1xyXG4gICAgICAgICAgICB0aGlzLl9saWdodFByb2dyYW1LZXlzW2dyb3VwSWRdID0gZ2V0UHJvZ3JhbUtleShsaWdodE51bWJlcltncm91cElkXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl91cGRhdGVMaWdodFVuaWZvcm1zKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBub2RlIGFuZCBpdCdzIGNoaWxkcmVuLCBpbmNsdWRpbmcgbWVzaCwgY2FtZXJhLCBsaWdodCwgZXRjLlxyXG4gICAgICogVW5saWtlIHVzaW5nIGBOb2RlI2Nsb25lYC4gSXQgd2lsbCBjbG9uZSBza2VsZXRvbiBhbmQgcmVtYXAgdGhlIGpvaW50cy4gTWF0ZXJpYWwgd2lsbCBhbHNvIGJlIGNsb25lZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICBjbG9uZU5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgdmFyIG5ld05vZGUgPSBub2RlLmNsb25lKCk7XHJcbiAgICAgICAgdmFyIGNsb25lZE5vZGVzTWFwID0ge307XHJcbiAgICAgICAgZnVuY3Rpb24gYnVpbGROb2Rlc01hcChzTm9kZSwgdE5vZGUpIHtcclxuICAgICAgICAgICAgY2xvbmVkTm9kZXNNYXBbc05vZGUuX191aWRfX10gPSB0Tm9kZTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc05vZGUuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc0NoaWxkID0gc05vZGUuX2NoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRDaGlsZCA9IHROb2RlLl9jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgIGJ1aWxkTm9kZXNNYXAoc0NoaWxkLCB0Q2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJ1aWxkTm9kZXNNYXAobm9kZSwgbmV3Tm9kZSk7XHJcblxyXG4gICAgICAgIG5ld05vZGUudHJhdmVyc2UoZnVuY3Rpb24gKG5ld0NoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5za2VsZXRvbikge1xyXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQuc2tlbGV0b24gPSBuZXdDaGlsZC5za2VsZXRvbi5jbG9uZShjbG9uZWROb2Rlc01hcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdDaGlsZC5tYXRlcmlhbCA9IG5ld0NoaWxkLm1hdGVyaWFsLmNsb25lKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ld05vZGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhdmVyc2UgdGhlIHNjZW5lIGFuZCBhZGQgdGhlIHJlbmRlcmFibGUgb2JqZWN0IHRvIHRoZSByZW5kZXIgbGlzdC5cclxuICAgICAqIEl0IG5lZWRzIGNhbWVyYSBmb3IgdGhlIGZydXN0dW0gY3VsbGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdXBkYXRlU2NlbmVCb3VuZGluZ0JveFxyXG4gICAgICogQHJldHVybiB7Y2xheS5TY2VuZS5SZW5kZXJMaXN0fVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVSZW5kZXJMaXN0OiBmdW5jdGlvbiAoY2FtZXJhLCB1cGRhdGVTY2VuZUJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgdmFyIGlkID0gY2FtZXJhLl9fdWlkX187XHJcbiAgICAgICAgdmFyIHJlbmRlckxpc3QgPSB0aGlzLl9yZW5kZXJMaXN0cy5nZXQoaWQpO1xyXG4gICAgICAgIGlmICghcmVuZGVyTGlzdCkge1xyXG4gICAgICAgICAgICByZW5kZXJMaXN0ID0gbmV3IFJlbmRlckxpc3QoKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyTGlzdHMucHV0KGlkLCByZW5kZXJMaXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyTGlzdC5zdGFydENvdW50KCk7XHJcblxyXG4gICAgICAgIGlmICh1cGRhdGVTY2VuZUJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lLm1pbi5zZXQoSW5maW5pdHksIEluZmluaXR5LCBJbmZpbml0eSk7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lLm1heC5zZXQoLUluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc2NlbmVNYXRlcmlhbFRyYW5zcGFyZW50ID0gdGhpcy5tYXRlcmlhbCAmJiB0aGlzLm1hdGVyaWFsLnRyYW5zcGFyZW50IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2RvVXBkYXRlUmVuZGVyTGlzdCh0aGlzLCBjYW1lcmEsIHNjZW5lTWF0ZXJpYWxUcmFuc3BhcmVudCwgcmVuZGVyTGlzdCwgdXBkYXRlU2NlbmVCb3VuZGluZ0JveCk7XHJcblxyXG4gICAgICAgIHJlbmRlckxpc3QuZW5kQ291bnQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlbmRlckxpc3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHJlbmRlciBsaXN0LiBVc2VkIGFmdGVyIHtAbGluayBjbGF5LlNjZW5lI3VwZGF0ZVJlbmRlckxpc3R9XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuU2NlbmUuUmVuZGVyTGlzdH1cclxuICAgICAqL1xyXG4gICAgZ2V0UmVuZGVyTGlzdDogZnVuY3Rpb24gKGNhbWVyYSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJMaXN0cy5nZXQoY2FtZXJhLl9fdWlkX18pO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZG9VcGRhdGVSZW5kZXJMaXN0OiBmdW5jdGlvbiAocGFyZW50LCBjYW1lcmEsIHNjZW5lTWF0ZXJpYWxUcmFuc3BhcmVudCwgcmVuZGVyTGlzdCwgdXBkYXRlU2NlbmVCb3VuZGluZ0JveCkge1xyXG4gICAgICAgIGlmIChwYXJlbnQuaW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETyBPcHRpbWl6ZVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50Ll9jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBwYXJlbnQuX2NoaWxkcmVuW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoaWxkLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBGcnVzdHVtIGN1bGxpbmdcclxuICAgICAgICAgICAgICAgIHZhciB3b3JsZE0gPSBjaGlsZC5pc1NraW5uZWRNZXNoKCkgPyBJREVOVElUWSA6IGNoaWxkLndvcmxkVHJhbnNmb3JtLmFycmF5O1xyXG4gICAgICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gY2hpbGQuZ2VvbWV0cnk7XHJcblxyXG4gICAgICAgICAgICAgICAgbWF0NC5tdWx0aXBseUFmZmluZShXT1JMRFZJRVcsIGNhbWVyYS52aWV3TWF0cml4LmFycmF5LCB3b3JsZE0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZVNjZW5lQm91bmRpbmdCb3ggJiYgIWdlb21ldHJ5LmJvdW5kaW5nQm94IHx8ICF0aGlzLmlzRnJ1c3R1bUN1bGxlZChjaGlsZCwgY2FtZXJhLCBXT1JMRFZJRVcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGlzdC5hZGQoY2hpbGQsIGNoaWxkLm1hdGVyaWFsLnRyYW5zcGFyZW50IHx8IHNjZW5lTWF0ZXJpYWxUcmFuc3BhcmVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNoaWxkLl9jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kb1VwZGF0ZVJlbmRlckxpc3QoY2hpbGQsIGNhbWVyYSwgc2NlbmVNYXRlcmlhbFRyYW5zcGFyZW50LCByZW5kZXJMaXN0LCB1cGRhdGVTY2VuZUJvdW5kaW5nQm94KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBhbiBzY2VuZSBvYmplY3QgaXMgY3VsbGVkIGJ5IGNhbWVyYSBmcnVzdHVtXHJcbiAgICAgKlxyXG4gICAgICogT2JqZWN0IGNhbiBiZSBhIHJlbmRlcmFibGUgb3IgYSBsaWdodFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBvYmplY3RcclxuICAgICAqIEBwYXJhbSB7Y2xheS5DYW1lcmF9IGNhbWVyYVxyXG4gICAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gd29ybGRWaWV3TWF0IHJlcHJlc2VudGVkIHdpdGggYXJyYXlcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHByb2plY3Rpb25NYXQgcmVwcmVzZW50ZWQgd2l0aCBhcnJheVxyXG4gICAgICovXHJcbiAgICBpc0ZydXN0dW1DdWxsZWQ6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gRnJ1c3R1bSBjdWxsaW5nXHJcbiAgICAgICAgLy8gaHR0cDovL3d3dy5jc2UuY2hhbG1lcnMuc2UvfnVmZmUvdmZjX2Jib3gucGRmXHJcbiAgICAgICAgdmFyIGN1bGxpbmdCb3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHZhciBjdWxsaW5nTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBjYW1lcmEsIHdvcmxkVmlld01hdCkge1xyXG4gICAgICAgICAgICAvLyBCb3VuZGluZyBib3ggY2FuIGJlIGEgcHJvcGVydHkgb2Ygb2JqZWN0KGxpa2UgbGlnaHQpIG9yIHJlbmRlcmFibGUuZ2VvbWV0cnlcclxuICAgICAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgICAgICB2YXIgZ2VvQkJveCA9IG9iamVjdC5ib3VuZGluZ0JveDtcclxuICAgICAgICAgICAgaWYgKCFnZW9CQm94KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNrZWxldG9uICYmIG9iamVjdC5za2VsZXRvbi5ib3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdlb0JCb3ggPSBvYmplY3Quc2tlbGV0b24uYm91bmRpbmdCb3g7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBnZW9CQm94ID0gb2JqZWN0Lmdlb21ldHJ5LmJvdW5kaW5nQm94O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWdlb0JCb3gpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY3VsbGluZ01hdHJpeC5hcnJheSA9IHdvcmxkVmlld01hdDtcclxuICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94LnRyYW5zZm9ybUZyb20oZ2VvQkJveCwgY3VsbGluZ01hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICAvLyBQYXNzaW5nbHkgdXBkYXRlIHRoZSBzY2VuZSBib3VuZGluZyBib3hcclxuICAgICAgICAgICAgLy8gRklYTUUgZXhjbHVkZSB2ZXJ5IGxhcmdlIG1lc2ggbGlrZSBncm91bmQgcGxhbmUgb3IgdGVycmFpbiA/XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIE9ubHkgcmVuZGVyZXJhYmxlIHdoaWNoIGNhc3Qgc2hhZG93ID9cclxuXHJcbiAgICAgICAgICAgIC8vIEZJWE1FIGJvdW5kaW5nQm94IGJlY29tZXMgbXVjaCBsYXJnZXIgYWZ0ZXIgdHJhbnNmb3JtZC5cclxuICAgICAgICAgICAgaWYgKG9iamVjdC5jYXN0U2hhZG93KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS51bmlvbihjdWxsaW5nQm91bmRpbmdCb3gpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIElnbm9yZSBmcnVzdHVtIGN1bGxpbmcgaWYgb2JqZWN0IGlzIHNraW5uZWQgbWVzaC5cclxuICAgICAgICAgICAgaWYgKG9iamVjdC5mcnVzdHVtQ3VsbGluZykgIHtcclxuICAgICAgICAgICAgICAgIGlmICghY3VsbGluZ0JvdW5kaW5nQm94LmludGVyc2VjdEJvdW5kaW5nQm94KGNhbWVyYS5mcnVzdHVtLmJvdW5kaW5nQm94KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGN1bGxpbmdNYXRyaXguYXJyYXkgPSBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5hcnJheTtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBjdWxsaW5nQm91bmRpbmdCb3gubWF4LmFycmF5WzJdID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGN1bGxpbmdCb3VuZGluZ0JveC5taW4uYXJyYXlbMl0gPCAwXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBDbGlwIGluIHRoZSBuZWFyIHBsYW5lXHJcbiAgICAgICAgICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94Lm1heC5hcnJheVsyXSA9IC0xZS0yMDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjdWxsaW5nQm91bmRpbmdCb3guYXBwbHlQcm9qZWN0aW9uKGN1bGxpbmdNYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBtaW4gPSBjdWxsaW5nQm91bmRpbmdCb3gubWluLmFycmF5O1xyXG4gICAgICAgICAgICAgICAgdmFyIG1heCA9IGN1bGxpbmdCb3VuZGluZ0JveC5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIG1heFswXSA8IC0xIHx8IG1pblswXSA+IDFcclxuICAgICAgICAgICAgICAgICAgICB8fCBtYXhbMV0gPCAtMSB8fCBtaW5bMV0gPiAxXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgbWF4WzJdIDwgLTEgfHwgbWluWzJdID4gMVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICBfdXBkYXRlTGlnaHRVbmlmb3JtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsaWdodHMgPSB0aGlzLmxpZ2h0cztcclxuICAgICAgICAvLyBQdXQgdGhlIGxpZ2h0IGNhc3Qgc2hhZG93IGJlZm9yZSB0aGUgbGlnaHQgbm90IGNhc3Qgc2hhZG93XHJcbiAgICAgICAgbGlnaHRzLnNvcnQobGlnaHRTb3J0RnVuYyk7XHJcblxyXG4gICAgICAgIHZhciBsaWdodFVuaWZvcm1zID0gdGhpcy5fbGlnaHRVbmlmb3JtcztcclxuICAgICAgICBmb3IgKHZhciBncm91cCBpbiBsaWdodFVuaWZvcm1zKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiBsaWdodFVuaWZvcm1zW2dyb3VwXSkge1xyXG4gICAgICAgICAgICAgICAgbGlnaHRVbmlmb3Jtc1tncm91cF1bc3ltYm9sXS52YWx1ZS5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgbGlnaHQgPSBsaWdodHNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAobGlnaHQuaW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGdyb3VwID0gbGlnaHQuZ3JvdXA7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gbGlnaHQudW5pZm9ybVRlbXBsYXRlcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHVuaWZvcm1UcGwgPSBsaWdodC51bmlmb3JtVGVtcGxhdGVzW3N5bWJvbF07XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB1bmlmb3JtVHBsLnZhbHVlKGxpZ2h0KTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWxpZ2h0VW5pZm9ybXNbZ3JvdXBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGlnaHRVbmlmb3Jtc1tncm91cF0gPSB7fTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghbGlnaHRVbmlmb3Jtc1tncm91cF1bc3ltYm9sXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0VW5pZm9ybXNbZ3JvdXBdW3N5bWJvbF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogW11cclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIGx1ID0gbGlnaHRVbmlmb3Jtc1tncm91cF1bc3ltYm9sXTtcclxuICAgICAgICAgICAgICAgIGx1LnR5cGUgPSB1bmlmb3JtVHBsLnR5cGUgKyAndic7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHVuaWZvcm1UcGwudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzFpJzpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICcxZic6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGx1LnZhbHVlLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICcyZic6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnM2YnOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzRmJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWx1ZS5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbHUudmFsdWUucHVzaCh2YWx1ZVtqXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVW5rb3duIGxpZ2h0IHVuaWZvcm0gdHlwZSAnICsgdW5pZm9ybVRwbC50eXBlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TGlnaHRHcm91cHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbGlnaHRHcm91cHMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBncm91cElkIGluIHRoaXMuX2xpZ2h0TnVtYmVyKSB7XHJcbiAgICAgICAgICAgIGxpZ2h0R3JvdXBzLnB1c2goZ3JvdXBJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaWdodEdyb3VwcztcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TnVtYmVyQ2hhbmdlZExpZ2h0R3JvdXBzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0R3JvdXBzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgZ3JvdXBJZCBpbiB0aGlzLl9saWdodE51bWJlcikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0xpZ2h0TnVtYmVyQ2hhbmdlZChncm91cElkKSkge1xyXG4gICAgICAgICAgICAgICAgbGlnaHRHcm91cHMucHVzaChncm91cElkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbGlnaHRHcm91cHM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIERldGVybWluZSBpZiBsaWdodCBncm91cCBpcyBkaWZmZXJlbnQgd2l0aCBzaW5jZSBsYXN0IGZyYW1lXHJcbiAgICAvLyBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHVwZGF0ZSBzaGFkZXIgYW5kIHNjZW5lJ3MgdW5pZm9ybXMgaW4gUmVuZGVyZXIucmVuZGVyXHJcbiAgICBpc0xpZ2h0TnVtYmVyQ2hhbmdlZDogZnVuY3Rpb24gKGxpZ2h0R3JvdXApIHtcclxuICAgICAgICB2YXIgcHJldkxpZ2h0TnVtYmVyID0gdGhpcy5fcHJldmlvdXNMaWdodE51bWJlcjtcclxuICAgICAgICB2YXIgY3VycmVudExpZ2h0TnVtYmVyID0gdGhpcy5fbGlnaHROdW1iZXI7XHJcbiAgICAgICAgLy8gUEVORElORyBQZXJmb3JtYW5jZVxyXG4gICAgICAgIGZvciAodmFyIHR5cGUgaW4gY3VycmVudExpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdKSB7XHJcbiAgICAgICAgICAgIGlmICghcHJldkxpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY3VycmVudExpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdW3R5cGVdICE9PSBwcmV2TGlnaHROdW1iZXJbbGlnaHRHcm91cF1bdHlwZV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIHR5cGUgaW4gcHJldkxpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdKSB7XHJcbiAgICAgICAgICAgIGlmICghY3VycmVudExpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY3VycmVudExpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdW3R5cGVdICE9PSBwcmV2TGlnaHROdW1iZXJbbGlnaHRHcm91cF1bdHlwZV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TGlnaHRzTnVtYmVyczogZnVuY3Rpb24gKGxpZ2h0R3JvdXApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGlnaHROdW1iZXJbbGlnaHRHcm91cF07XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFByb2dyYW1LZXk6IGZ1bmN0aW9uIChsaWdodEdyb3VwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0UHJvZ3JhbUtleXNbbGlnaHRHcm91cF07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldExpZ2h0VW5pZm9ybXM6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gc2V0VW5pZm9ybXModW5pZm9ybXMsIHByb2dyYW0sIHJlbmRlcmVyKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiB1bmlmb3Jtcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGx1ID0gdW5pZm9ybXNbc3ltYm9sXTtcclxuICAgICAgICAgICAgICAgIGlmIChsdS50eXBlID09PSAndHYnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9ncmFtLmhhc1VuaWZvcm0oc3ltYm9sKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRleFNsb3RzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsdS52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IGx1LnZhbHVlW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2xvdCA9IHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdChyZW5kZXJlciwgdGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleFNsb3RzLnB1c2goc2xvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShyZW5kZXJlci5nbCwgJzFpdicsIHN5bWJvbCwgdGV4U2xvdHMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKHJlbmRlcmVyLmdsLCBsdS50eXBlLCBzeW1ib2wsIGx1LnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9ncmFtLCBsaWdodEdyb3VwLCByZW5kZXJlcikge1xyXG4gICAgICAgICAgICBzZXRVbmlmb3Jtcyh0aGlzLl9saWdodFVuaWZvcm1zW2xpZ2h0R3JvdXBdLCBwcm9ncmFtLCByZW5kZXJlcik7XHJcbiAgICAgICAgICAgIC8vIFNldCBzaGFkb3dzXHJcbiAgICAgICAgICAgIHNldFVuaWZvcm1zKHRoaXMuc2hhZG93VW5pZm9ybXMsIHByb2dyYW0sIHJlbmRlcmVyKTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2Ugc2VsZiwgY2xlYXIgYWxsIHRoZSBzY2VuZSBvYmplY3RzXHJcbiAgICAgKiBCdXQgcmVzb3VyY2VzIG9mIGdsIGxpa2UgdGV4dXR1cmUsIHNoYWRlciB3aWxsIG5vdCBiZSBkaXNwb3NlZC5cclxuICAgICAqIE1vc3RseSB5b3Ugc2hvdWxkIHVzZSBkaXNwb3NlU2NlbmUgbWV0aG9kIGluIFJlbmRlcmVyIHRvIGRvIGRpc3Bvc2UuXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9vcGFxdWVMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5fdHJhbnNwYXJlbnRMaXN0ID0gW107XHJcblxyXG4gICAgICAgIHRoaXMubGlnaHRzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuX2xpZ2h0VW5pZm9ybXMgPSB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGlnaHROdW1iZXIgPSB7fTtcclxuICAgICAgICB0aGlzLl9ub2RlUmVwb3NpdG9yeSA9IHt9O1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmZ1bmN0aW9uIGxpZ2h0U29ydEZ1bmMoYSwgYikge1xyXG4gICAgaWYgKGIuY2FzdFNoYWRvdyAmJiAhYS5jYXN0U2hhZG93KSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNjZW5lO1xyXG4iLCJ2YXIgRElSVFlfUFJFRklYID0gJ19fZHRfXyc7XHJcblxyXG52YXIgQ2FjaGUgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdGhpcy5fY29udGV4dElkID0gMDtcclxuXHJcbiAgICB0aGlzLl9jYWNoZXMgPSBbXTtcclxuXHJcbiAgICB0aGlzLl9jb250ZXh0ID0ge307XHJcbn07XHJcblxyXG5DYWNoZS5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgdXNlOiBmdW5jdGlvbiAoY29udGV4dElkLCBkb2N1bWVudFNjaGVtYSkge1xyXG4gICAgICAgIHZhciBjYWNoZXMgPSB0aGlzLl9jYWNoZXM7XHJcbiAgICAgICAgaWYgKCFjYWNoZXNbY29udGV4dElkXSkge1xyXG4gICAgICAgICAgICBjYWNoZXNbY29udGV4dElkXSA9IHt9O1xyXG5cclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50U2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZXNbY29udGV4dElkXSA9IGRvY3VtZW50U2NoZW1hKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY29udGV4dElkID0gY29udGV4dElkO1xyXG5cclxuICAgICAgICB0aGlzLl9jb250ZXh0ID0gY2FjaGVzW2NvbnRleHRJZF07XHJcbiAgICB9LFxyXG5cclxuICAgIHB1dDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9jb250ZXh0W2tleV0gPSB2YWx1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHRba2V5XTtcclxuICAgIH0sXHJcblxyXG4gICAgZGlydHk6IGZ1bmN0aW9uIChmaWVsZCkge1xyXG4gICAgICAgIGZpZWxkID0gZmllbGQgfHwgJyc7XHJcbiAgICAgICAgdmFyIGtleSA9IERJUlRZX1BSRUZJWCArIGZpZWxkO1xyXG4gICAgICAgIHRoaXMucHV0KGtleSwgdHJ1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGRpcnR5QWxsOiBmdW5jdGlvbiAoZmllbGQpIHtcclxuICAgICAgICBmaWVsZCA9IGZpZWxkIHx8ICcnO1xyXG4gICAgICAgIHZhciBrZXkgPSBESVJUWV9QUkVGSVggKyBmaWVsZDtcclxuICAgICAgICB2YXIgY2FjaGVzID0gdGhpcy5fY2FjaGVzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FjaGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChjYWNoZXNbaV0pIHtcclxuICAgICAgICAgICAgICAgIGNhY2hlc1tpXVtrZXldID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZnJlc2g6IGZ1bmN0aW9uIChmaWVsZCkge1xyXG4gICAgICAgIGZpZWxkID0gZmllbGQgfHwgJyc7XHJcbiAgICAgICAgdmFyIGtleSA9IERJUlRZX1BSRUZJWCArIGZpZWxkO1xyXG4gICAgICAgIHRoaXMucHV0KGtleSwgZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICBmcmVzaEFsbDogZnVuY3Rpb24gKGZpZWxkKSB7XHJcbiAgICAgICAgZmllbGQgPSBmaWVsZCB8fCAnJztcclxuICAgICAgICB2YXIga2V5ID0gRElSVFlfUFJFRklYICsgZmllbGQ7XHJcbiAgICAgICAgdmFyIGNhY2hlcyA9IHRoaXMuX2NhY2hlcztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhY2hlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoY2FjaGVzW2ldKSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZXNbaV1ba2V5XSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBpc0RpcnR5OiBmdW5jdGlvbiAoZmllbGQpIHtcclxuICAgICAgICBmaWVsZCA9IGZpZWxkIHx8ICcnO1xyXG4gICAgICAgIHZhciBrZXkgPSBESVJUWV9QUkVGSVggKyBmaWVsZDtcclxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuX2NvbnRleHQ7XHJcbiAgICAgICAgcmV0dXJuICAhY29udGV4dC5oYXNPd25Qcm9wZXJ0eShrZXkpXHJcbiAgICAgICAgICAgIHx8IGNvbnRleHRba2V5XSA9PT0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZGVsZXRlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHRJZCkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9jYWNoZXNbY29udGV4dElkXTtcclxuICAgICAgICB0aGlzLl9jb250ZXh0ID0ge307XHJcbiAgICB9LFxyXG5cclxuICAgIGRlbGV0ZTogZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9jb250ZXh0W2tleV07XHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyQWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fY2FjaGVzID0ge307XHJcbiAgICB9LFxyXG5cclxuICAgIGdldENvbnRleHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dDtcclxuICAgIH0sXHJcblxyXG4gICAgZWFjaENvbnRleHQgOiBmdW5jdGlvbiAoY2IsIGNvbnRleHQpIHtcclxuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuX2NhY2hlcyk7XHJcbiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgY2IgJiYgY2IuY2FsbChjb250ZXh0LCBrZXkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBtaXNzOiBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuICEgdGhpcy5fY29udGV4dC5oYXNPd25Qcm9wZXJ0eShrZXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuQ2FjaGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FjaGU7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDYWNoZTtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgQ2FjaGUgZnJvbSAnLi9jb3JlL0NhY2hlJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxuXHJcbmZ1bmN0aW9uIGdldEFycmF5Q3RvckJ5VHlwZSAodHlwZSkge1xyXG4gICAgcmV0dXJuICh7XHJcbiAgICAgICAgJ2J5dGUnOiB2ZW5kb3IuSW50OEFycmF5LFxyXG4gICAgICAgICd1Ynl0ZSc6IHZlbmRvci5VaW50OEFycmF5LFxyXG4gICAgICAgICdzaG9ydCc6IHZlbmRvci5JbnQxNkFycmF5LFxyXG4gICAgICAgICd1c2hvcnQnOiB2ZW5kb3IuVWludDE2QXJyYXlcclxuICAgIH0pW3R5cGVdIHx8IHZlbmRvci5GbG9hdDMyQXJyYXk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1ha2VBdHRyS2V5KGF0dHJOYW1lKSB7XHJcbiAgICByZXR1cm4gJ2F0dHJfJyArIGF0dHJOYW1lO1xyXG59XHJcbi8qKlxyXG4gKiBHZW9tZXRyeUJhc2UgYXR0cmlidXRlXHJcbiAqIEBhbGlhcyBjbGF5Lkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGVcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqL1xyXG5mdW5jdGlvbiBBdHRyaWJ1dGUobmFtZSwgdHlwZSwgc2l6ZSwgc2VtYW50aWMpIHtcclxuICAgIC8qKlxyXG4gICAgICogQXR0cmlidXRlIG5hbWVcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAvKipcclxuICAgICAqIEF0dHJpYnV0ZSB0eXBlXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyBgJ2J5dGUnYFxyXG4gICAgICogICsgYCd1Ynl0ZSdgXHJcbiAgICAgKiAgKyBgJ3Nob3J0J2BcclxuICAgICAqICArIGAndXNob3J0J2BcclxuICAgICAqICArIGAnZmxvYXQnYCBNb3N0IGNvbW1vbmx5IHVzZWQuXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBTaXplIG9mIGF0dHJpYnV0ZSBjb21wb25lbnQuIDEgLSA0LlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5zaXplID0gc2l6ZTtcclxuICAgIC8qKlxyXG4gICAgICogU2VtYW50aWMgb2YgdGhpcyBhdHRyaWJ1dGUuXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyBgJ1BPU0lUSU9OJ2BcclxuICAgICAqICArIGAnTk9STUFMJ2BcclxuICAgICAqICArIGAnQklOT1JNQUwnYFxyXG4gICAgICogICsgYCdUQU5HRU5UJ2BcclxuICAgICAqICArIGAnVEVYQ09PUkQnYFxyXG4gICAgICogICsgYCdURVhDT09SRF8wJ2BcclxuICAgICAqICArIGAnVEVYQ09PUkRfMSdgXHJcbiAgICAgKiAgKyBgJ0NPTE9SJ2BcclxuICAgICAqICArIGAnSk9JTlQnYFxyXG4gICAgICogICsgYCdXRUlHSFQnYFxyXG4gICAgICpcclxuICAgICAqIEluIHNoYWRlciwgYXR0cmlidXRlIHdpdGggc2FtZSBzZW1hbnRpYyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgbWFwcGVkLiBGb3IgZXhhbXBsZTpcclxuICAgICAqIGBgYGdsc2xcclxuICAgICAqIGF0dHJpYnV0ZSB2ZWMzIHBvczogUE9TSVRJT05cclxuICAgICAqIGBgYFxyXG4gICAgICogd2lsbCB1c2UgdGhlIGF0dHJpYnV0ZSB2YWx1ZSB3aXRoIHNlbWFudGljIFBPU0lUSU9OIGluIGdlb21ldHJ5LCBubyBtYXR0ZXIgd2hhdCBuYW1lIGl0IHVzZWQuXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnNlbWFudGljID0gc2VtYW50aWMgfHwgJyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWx1ZSBvZiB0aGUgYXR0cmlidXRlLlxyXG4gICAgICogQHR5cGUge1R5cGVkQXJyYXl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG5cclxuICAgIC8vIEluaXQgZ2V0dGVyIHNldHRlclxyXG4gICAgc3dpdGNoIChzaXplKSB7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICB0aGlzLmdldCA9IGZ1bmN0aW9uIChpZHgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlW2lkeF07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gZnVuY3Rpb24gKGlkeCwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaWR4XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvLyBDb3B5IGZyb20gc291cmNlIHRvIHRhcmdldFxyXG4gICAgICAgICAgICB0aGlzLmNvcHkgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbdGFyZ2V0XSA9IHRoaXMudmFsdWVbdGFyZ2V0XTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICB0aGlzLmdldCA9IGZ1bmN0aW9uIChpZHgsIG91dCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBvdXRbMF0gPSBhcnJbaWR4ICogMl07XHJcbiAgICAgICAgICAgICAgICBvdXRbMV0gPSBhcnJbaWR4ICogMiArIDFdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZXQgPSBmdW5jdGlvbiAoaWR4LCB2YWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeCAqIDJdID0gdmFsWzBdO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeCAqIDIgKyAxXSA9IHZhbFsxXTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5jb3B5ID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIHNvdXJjZSAqPSAyO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ICo9IDI7XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0XSA9IGFycltzb3VyY2VdO1xyXG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldCArIDFdID0gYXJyW3NvdXJjZSArIDFdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24gKGlkeCwgb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4MyA9IGlkeCAqIDM7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIG91dFswXSA9IGFycltpZHgzXTtcclxuICAgICAgICAgICAgICAgIG91dFsxXSA9IGFycltpZHgzICsgMV07XHJcbiAgICAgICAgICAgICAgICBvdXRbMl0gPSBhcnJbaWR4MyArIDJdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZXQgPSBmdW5jdGlvbiAoaWR4LCB2YWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpZHgzID0gaWR4ICogMztcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeDNdID0gdmFsWzBdO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeDMgKyAxXSA9IHZhbFsxXTtcclxuICAgICAgICAgICAgICAgIGFycltpZHgzICsgMl0gPSB2YWxbMl07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuY29weSA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2UgKj0gMztcclxuICAgICAgICAgICAgICAgIHRhcmdldCAqPSAzO1xyXG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldF0gPSBhcnJbc291cmNlXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAxXSA9IGFycltzb3VyY2UgKyAxXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAyXSA9IGFycltzb3VyY2UgKyAyXTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICB0aGlzLmdldCA9IGZ1bmN0aW9uIChpZHgsIG91dCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4NCA9IGlkeCAqIDQ7XHJcbiAgICAgICAgICAgICAgICBvdXRbMF0gPSBhcnJbaWR4NF07XHJcbiAgICAgICAgICAgICAgICBvdXRbMV0gPSBhcnJbaWR4NCArIDFdO1xyXG4gICAgICAgICAgICAgICAgb3V0WzJdID0gYXJyW2lkeDQgKyAyXTtcclxuICAgICAgICAgICAgICAgIG91dFszXSA9IGFycltpZHg0ICsgM107XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNldCA9IGZ1bmN0aW9uIChpZHgsIHZhbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4NCA9IGlkeCAqIDQ7XHJcbiAgICAgICAgICAgICAgICBhcnJbaWR4NF0gPSB2YWxbMF07XHJcbiAgICAgICAgICAgICAgICBhcnJbaWR4NCArIDFdID0gdmFsWzFdO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeDQgKyAyXSA9IHZhbFsyXTtcclxuICAgICAgICAgICAgICAgIGFycltpZHg0ICsgM10gPSB2YWxbM107XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuY29weSA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2UgKj0gNDtcclxuICAgICAgICAgICAgICAgIHRhcmdldCAqPSA0O1xyXG4gICAgICAgICAgICAgICAgLy8gY29weVdpdGhpbiBpcyBleHRyZW1lbHkgc2xvd1xyXG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldF0gPSBhcnJbc291cmNlXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAxXSA9IGFycltzb3VyY2UgKyAxXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAyXSA9IGFycltzb3VyY2UgKyAyXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAzXSA9IGFycltzb3VyY2UgKyAzXTtcclxuICAgICAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFNldCBpdGVtIHZhbHVlIGF0IGdpdmUgaW5kZXguIFNlY29uZCBwYXJhbWV0ZXIgdmFsIGlzIG51bWJlciBpZiBzaXplIGlzIDFcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBuYW1lIGNsYXkuR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZSNzZXRcclxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gKiBAcGFyYW0ge251bWJlcltdfG51bWJlcn0gdmFsXHJcbiAqIEBleGFtcGxlXHJcbiAqIGdlb21ldHJ5LmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKS5zZXQoMCwgWzEsIDEsIDFdKTtcclxuICovXHJcblxyXG4vKipcclxuICogR2V0IGl0ZW0gdmFsdWUgYXQgZ2l2ZSBpbmRleC4gU2Vjb25kIHBhcmFtZXRlciBvdXQgaXMgbm8gbmVlZCBpZiBzaXplIGlzIDFcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBuYW1lIGNsYXkuR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZSNzZXRcclxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gKiBAcGFyYW0ge251bWJlcltdfSBbb3V0XVxyXG4gKiBAZXhhbXBsZVxyXG4gKiBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJykuZ2V0KDAsIG91dCk7XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEluaXRpYWxpemUgYXR0cmlidXRlIHdpdGggZ2l2ZW4gdmVydGV4IGNvdW50XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBuVmVydGV4XHJcbiAqL1xyXG5BdHRyaWJ1dGUucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoblZlcnRleCkge1xyXG4gICAgaWYgKCF0aGlzLnZhbHVlIHx8IHRoaXMudmFsdWUubGVuZ3RoICE9IG5WZXJ0ZXggKiB0aGlzLnNpemUpIHtcclxuICAgICAgICB2YXIgQXJyYXlDb25zdHJ1Y3RvciA9IGdldEFycmF5Q3RvckJ5VHlwZSh0aGlzLnR5cGUpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihuVmVydGV4ICogdGhpcy5zaXplKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbml0aWFsaXplIGF0dHJpYnV0ZSB3aXRoIGdpdmVuIGFycmF5LiBXaGljaCBjYW4gYmUgMSBkaW1lbnNpb25hbCBvciAyIGRpbWVuc2lvbmFsXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XHJcbiAqIEBleGFtcGxlXHJcbiAqICBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJykuZnJvbUFycmF5KFxyXG4gKiAgICAgIFstMSwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMF1cclxuICogICk7XHJcbiAqICBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJykuZnJvbUFycmF5KFxyXG4gKiAgICAgIFsgWy0xLCAwLCAwXSwgWzEsIDAsIDBdLCBbMCwgMSwgMF0gXVxyXG4gKiAgKTtcclxuICovXHJcbkF0dHJpYnV0ZS5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KSB7XHJcbiAgICB2YXIgQXJyYXlDb25zdHJ1Y3RvciA9IGdldEFycmF5Q3RvckJ5VHlwZSh0aGlzLnR5cGUpO1xyXG4gICAgdmFyIHZhbHVlO1xyXG4gICAgLy8gQ29udmVydCAyZCBhcnJheSB0byBmbGF0XHJcbiAgICBpZiAoYXJyYXlbMF0gJiYgKGFycmF5WzBdLmxlbmd0aCkpIHtcclxuICAgICAgICB2YXIgbiA9IDA7XHJcbiAgICAgICAgdmFyIHNpemUgPSB0aGlzLnNpemU7XHJcbiAgICAgICAgdmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihhcnJheS5sZW5ndGggKiBzaXplKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZVtuKytdID0gYXJyYXlbaV1bal07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YWx1ZSA9IG5ldyBBcnJheUNvbnN0cnVjdG9yKGFycmF5KTtcclxuICAgIH1cclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxufTtcclxuXHJcbkF0dHJpYnV0ZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbihjb3B5VmFsdWUpIHtcclxuICAgIHZhciByZXQgPSBuZXcgQXR0cmlidXRlKHRoaXMubmFtZSwgdGhpcy50eXBlLCB0aGlzLnNpemUsIHRoaXMuc2VtYW50aWMpO1xyXG4gICAgLy8gRklYTUVcclxuICAgIGlmIChjb3B5VmFsdWUpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ3RvZG8nKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXQ7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBBdHRyaWJ1dGVCdWZmZXIobmFtZSwgdHlwZSwgYnVmZmVyLCBzaXplLCBzZW1hbnRpYykge1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIHRoaXMudHlwZSA9IHR5cGU7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcclxuICAgIHRoaXMuc2l6ZSA9IHNpemU7XHJcbiAgICB0aGlzLnNlbWFudGljID0gc2VtYW50aWM7XHJcblxyXG4gICAgLy8gVG8gYmUgc2V0IGluIG1lc2hcclxuICAgIC8vIHN5bWJvbCBpbiB0aGUgc2hhZGVyXHJcbiAgICB0aGlzLnN5bWJvbCA9ICcnO1xyXG5cclxuICAgIC8vIE5lZWRzIHJlbW92ZSBmbGFnXHJcbiAgICB0aGlzLm5lZWRzUmVtb3ZlID0gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEluZGljZXNCdWZmZXIoYnVmZmVyKSB7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcclxuICAgIHRoaXMuY291bnQgPSAwO1xyXG59XHJcblxyXG4vKipcclxuICogQmFzZSBvZiBhbGwgZ2VvbWV0cnkuIFVzZSB7QGxpbmsgY2xheS5HZW9tZXRyeX0gZm9yIGNvbW1vbiAzRCB1c2FnZS5cclxuICogQGNvbnN0cnVjdG9yIGNsYXkuR2VvbWV0cnlCYXNlXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgR2VvbWV0cnlCYXNlID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5HZW9tZXRyeUJhc2UjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBdHRyaWJ1dGVzIG9mIGdlb21ldHJ5LlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3QuPHN0cmluZywgY2xheS5HZW9tZXRyeUJhc2UuQXR0cmlidXRlPn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhdHRyaWJ1dGVzOiB7fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW5kaWNlcyBvZiBnZW9tZXRyeS5cclxuICAgICAgICAgKiBAdHlwZSB7VWludDE2QXJyYXl8VWludDMyQXJyYXl9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5kaWNlczogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdmVydGljZXMgZGF0YSBkeW5hbWljYWxseSB1cGRhdGVkLlxyXG4gICAgICAgICAqIEF0dHJpYnV0ZXMgdmFsdWUgY2FuJ3QgYmUgY2hhbmdlZCBhZnRlciBmaXJzdCByZW5kZXIgaWYgZHlhbm1pYyBpcyBmYWxzZS5cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkeW5hbWljOiB0cnVlLFxyXG5cclxuICAgICAgICBfZW5hYmxlZEF0dHJpYnV0ZXM6IG51bGwsXHJcblxyXG4gICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAvLyBJbml0IGl0IGhlcmUgdG8gYXZvaWQgZGVvcHRpbWl6YXRpb24gd2hlbiBpdCdzIGFzc2lnbmVkIGluIGFwcGxpY2F0aW9uIGR5bmFtaWNhbGx5XHJcbiAgICAgICAgX191c2VkOiAwXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbigpIHtcclxuICAgIC8vIFVzZSBjYWNoZVxyXG4gICAgdGhpcy5fY2FjaGUgPSBuZXcgQ2FjaGUoKTtcclxuXHJcbiAgICB0aGlzLl9hdHRyaWJ1dGVMaXN0ID0gT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKTtcclxuXHJcbiAgICB0aGlzLl9fdmFvQ2FjaGUgPSB7fTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5Lkdlb21ldHJ5QmFzZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBNYWluIGF0dHJpYnV0ZSB3aWxsIGJlIHVzZWQgdG8gY291bnQgdmVydGV4IG51bWJlclxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgbWFpbkF0dHJpYnV0ZTogJycsXHJcbiAgICAvKipcclxuICAgICAqIFVzZXIgZGVmaW5lZCBwaWNraW5nIGFsZ29yaXRobSBpbnN0ZWFkIG9mIGRlZmF1bHRcclxuICAgICAqIHRyaWFuZ2xlIHJheSBpbnRlcnNlY3Rpb25cclxuICAgICAqIHgsIHkgYXJlIE5EQy5cclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqICh4LCB5LCByZW5kZXJlciwgY2FtZXJhLCByZW5kZXJhYmxlLCBvdXQpID0+IGJvb2xlYW5cclxuICAgICAqIGBgYFxyXG4gICAgICogQHR5cGUgez9GdW5jdGlvbn1cclxuICAgICAqL1xyXG4gICAgcGljazogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZXIgZGVmaW5lZCByYXkgcGlja2luZyBhbGdvcml0aG0gaW5zdGVhZCBvZiBkZWZhdWx0XHJcbiAgICAgKiB0cmlhbmdsZSByYXkgaW50ZXJzZWN0aW9uXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAocmF5OiBjbGF5LlJheSwgcmVuZGVyYWJsZTogY2xheS5SZW5kZXJhYmxlLCBvdXQ6IEFycmF5KSA9PiBib29sZWFuXHJcbiAgICAgKiBgYGBcclxuICAgICAqIEB0eXBlIHs/RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIHBpY2tCeVJheTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmsgYXR0cmlidXRlcyBhbmQgaW5kaWNlcyBpbiBnZW9tZXRyeSBuZWVkcyB0byB1cGRhdGUuXHJcbiAgICAgKiBVc3VhbGx5IGNhbGxlZCBhZnRlciB5b3UgY2hhbmdlIHRoZSBkYXRhIGluIGF0dHJpYnV0ZXMuXHJcbiAgICAgKi9cclxuICAgIGRpcnR5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGVuYWJsZWRBdHRyaWJ1dGVzID0gdGhpcy5nZXRFbmFibGVkQXR0cmlidXRlcygpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5hYmxlZEF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5kaXJ0eUF0dHJpYnV0ZShlbmFibGVkQXR0cmlidXRlc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlydHlJbmRpY2VzKCk7XHJcbiAgICAgICAgdGhpcy5fZW5hYmxlZEF0dHJpYnV0ZXMgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLl9jYWNoZS5kaXJ0eSgnYW55Jyk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIHRoZSBpbmRpY2VzIG5lZWRzIHRvIHVwZGF0ZS5cclxuICAgICAqL1xyXG4gICAgZGlydHlJbmRpY2VzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fY2FjaGUuZGlydHlBbGwoJ2luZGljZXMnKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIE1hcmsgdGhlIGF0dHJpYnV0ZXMgbmVlZHMgdG8gdXBkYXRlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFthdHRyTmFtZV1cclxuICAgICAqL1xyXG4gICAgZGlydHlBdHRyaWJ1dGU6IGZ1bmN0aW9uIChhdHRyTmFtZSkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlLmRpcnR5QWxsKG1ha2VBdHRyS2V5KGF0dHJOYW1lKSk7XHJcbiAgICAgICAgdGhpcy5fY2FjaGUuZGlydHlBbGwoJ2F0dHJpYnV0ZXMnKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBpbmRpY2VzIG9mIHRyaWFuZ2xlIGF0IGdpdmVuIGluZGV4LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gICAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gb3V0XHJcbiAgICAgKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgZ2V0VHJpYW5nbGVJbmRpY2VzOiBmdW5jdGlvbiAoaWR4LCBvdXQpIHtcclxuICAgICAgICBpZiAoaWR4IDwgdGhpcy50cmlhbmdsZUNvdW50ICYmIGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgICAgICBvdXQgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICAgICAgb3V0WzBdID0gaW5kaWNlc1tpZHggKiAzXTtcclxuICAgICAgICAgICAgb3V0WzFdID0gaW5kaWNlc1tpZHggKiAzICsgMV07XHJcbiAgICAgICAgICAgIG91dFsyXSA9IGluZGljZXNbaWR4ICogMyArIDJdO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgaW5kaWNlcyBvZiB0cmlhbmdsZSBhdCBnaXZlbiBpbmRleC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxyXG4gICAgICovXHJcbiAgICBzZXRUcmlhbmdsZUluZGljZXM6IGZ1bmN0aW9uIChpZHgsIGFycikge1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG4gICAgICAgIGluZGljZXNbaWR4ICogM10gPSBhcnJbMF07XHJcbiAgICAgICAgaW5kaWNlc1tpZHggKiAzICsgMV0gPSBhcnJbMV07XHJcbiAgICAgICAgaW5kaWNlc1tpZHggKiAzICsgMl0gPSBhcnJbMl07XHJcbiAgICB9LFxyXG5cclxuICAgIGlzVXNlSW5kaWNlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuaW5kaWNlcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplIGluZGljZXMgZnJvbSBhbiBhcnJheS5cclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XHJcbiAgICAgKi9cclxuICAgIGluaXRJbmRpY2VzRnJvbUFycmF5OiBmdW5jdGlvbiAoYXJyYXkpIHtcclxuICAgICAgICB2YXIgdmFsdWU7XHJcbiAgICAgICAgdmFyIEFycmF5Q29uc3RydWN0b3IgPSB0aGlzLnZlcnRleENvdW50ID4gMHhmZmZmXHJcbiAgICAgICAgICAgID8gdmVuZG9yLlVpbnQzMkFycmF5IDogdmVuZG9yLlVpbnQxNkFycmF5O1xyXG4gICAgICAgIC8vIENvbnZlcnQgMmQgYXJyYXkgdG8gZmxhdFxyXG4gICAgICAgIGlmIChhcnJheVswXSAmJiAoYXJyYXlbMF0ubGVuZ3RoKSkge1xyXG4gICAgICAgICAgICB2YXIgbiA9IDA7XHJcbiAgICAgICAgICAgIHZhciBzaXplID0gMztcclxuXHJcbiAgICAgICAgICAgIHZhbHVlID0gbmV3IEFycmF5Q29uc3RydWN0b3IoYXJyYXkubGVuZ3RoICogc2l6ZSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVbbisrXSA9IGFycmF5W2ldW2pdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IG5ldyBBcnJheUNvbnN0cnVjdG9yKGFycmF5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW5kaWNlcyA9IHZhbHVlO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgbmV3IGF0dHJpYnV0ZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZW1hbnRpY11cclxuICAgICAqL1xyXG4gICAgY3JlYXRlQXR0cmlidXRlOiBmdW5jdGlvbiAobmFtZSwgdHlwZSwgc2l6ZSwgc2VtYW50aWMpIHtcclxuICAgICAgICB2YXIgYXR0cmliID0gbmV3IEF0dHJpYnV0ZShuYW1lLCB0eXBlLCBzaXplLCBzZW1hbnRpYyk7XHJcbiAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlc1tuYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW25hbWVdID0gYXR0cmliO1xyXG4gICAgICAgIHRoaXMuX2F0dHJpYnV0ZUxpc3QucHVzaChuYW1lKTtcclxuICAgICAgICByZXR1cm4gYXR0cmliO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGF0dHJpYnV0ZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQXR0cmlidXRlOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVMaXN0ID0gdGhpcy5fYXR0cmlidXRlTGlzdDtcclxuICAgICAgICB2YXIgaWR4ID0gYXR0cmlidXRlTGlzdC5pbmRleE9mKG5hbWUpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICBhdHRyaWJ1dGVMaXN0LnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhdHRyaWJ1dGVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGV9XHJcbiAgICAgKi9cclxuICAgIGdldEF0dHJpYnV0ZTogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBlbmFibGVkIGF0dHJpYnV0ZXMgbmFtZSBsaXN0XHJcbiAgICAgKiBBdHRyaWJ1dGUgd2hpY2ggaGFzIHRoZSBzYW1lIHZlcnRleCBudW1iZXIgd2l0aCBwb3NpdGlvbiBpcyB0cmVhdGVkIGFzIGEgZW5hYmxlZCBhdHRyaWJ1dGVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfVxyXG4gICAgICovXHJcbiAgICBnZXRFbmFibGVkQXR0cmlidXRlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBlbmFibGVkQXR0cmlidXRlcyA9IHRoaXMuX2VuYWJsZWRBdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVMaXN0ID0gdGhpcy5fYXR0cmlidXRlTGlzdDtcclxuICAgICAgICAvLyBDYWNoZVxyXG4gICAgICAgIGlmIChlbmFibGVkQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gZW5hYmxlZEF0dHJpYnV0ZXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgdmFyIG5WZXJ0ZXggPSB0aGlzLnZlcnRleENvdW50O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZUxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVMaXN0W2ldO1xyXG4gICAgICAgICAgICB2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoYXR0cmliLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXR0cmliLnZhbHVlLmxlbmd0aCA9PT0gblZlcnRleCAqIGF0dHJpYi5zaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2VuYWJsZWRBdHRyaWJ1dGVzID0gcmVzdWx0O1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRCdWZmZXJDaHVua3M6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcclxuICAgICAgICB2YXIgaXNBdHRyaWJ1dGVzRGlydHkgPSBjYWNoZS5pc0RpcnR5KCdhdHRyaWJ1dGVzJyk7XHJcbiAgICAgICAgdmFyIGlzSW5kaWNlc0RpcnR5ID0gY2FjaGUuaXNEaXJ0eSgnaW5kaWNlcycpO1xyXG4gICAgICAgIGlmIChpc0F0dHJpYnV0ZXNEaXJ0eSB8fCBpc0luZGljZXNEaXJ0eSkge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVCdWZmZXIocmVuZGVyZXIuZ2wsIGlzQXR0cmlidXRlc0RpcnR5LCBpc0luZGljZXNEaXJ0eSk7XHJcbiAgICAgICAgICAgIHZhciBlbmFibGVkQXR0cmlidXRlcyA9IHRoaXMuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkQXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY2FjaGUuZnJlc2gobWFrZUF0dHJLZXkoZW5hYmxlZEF0dHJpYnV0ZXNbaV0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYWNoZS5mcmVzaCgnYXR0cmlidXRlcycpO1xyXG4gICAgICAgICAgICBjYWNoZS5mcmVzaCgnaW5kaWNlcycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYWNoZS5mcmVzaCgnYW55Jyk7XHJcbiAgICAgICAgcmV0dXJuIGNhY2hlLmdldCgnY2h1bmtzJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVCdWZmZXI6IGZ1bmN0aW9uIChfZ2wsIGlzQXR0cmlidXRlc0RpcnR5LCBpc0luZGljZXNEaXJ0eSkge1xyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG4gICAgICAgIHZhciBjaHVua3MgPSBjYWNoZS5nZXQoJ2NodW5rcycpO1xyXG4gICAgICAgIHZhciBmaXJzdFVwZGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghY2h1bmtzKSB7XHJcbiAgICAgICAgICAgIGNodW5rcyA9IFtdO1xyXG4gICAgICAgICAgICAvLyBJbnRpYWxpemVcclxuICAgICAgICAgICAgY2h1bmtzWzBdID0ge1xyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlQnVmZmVyczogW10sXHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzQnVmZmVyOiBudWxsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNhY2hlLnB1dCgnY2h1bmtzJywgY2h1bmtzKTtcclxuICAgICAgICAgICAgZmlyc3RVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNodW5rID0gY2h1bmtzWzBdO1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVCdWZmZXJzID0gY2h1bmsuYXR0cmlidXRlQnVmZmVycztcclxuICAgICAgICB2YXIgaW5kaWNlc0J1ZmZlciA9IGNodW5rLmluZGljZXNCdWZmZXI7XHJcblxyXG4gICAgICAgIGlmIChpc0F0dHJpYnV0ZXNEaXJ0eSB8fCBmaXJzdFVwZGF0ZSkge1xyXG4gICAgICAgICAgICB2YXIgYXR0cmlidXRlTGlzdCA9IHRoaXMuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVCdWZmZXJNYXAgPSB7fTtcclxuICAgICAgICAgICAgaWYgKCFmaXJzdFVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlQnVmZmVyTWFwW2F0dHJpYnV0ZUJ1ZmZlcnNbaV0ubmFtZV0gPSBhdHRyaWJ1dGVCdWZmZXJzW2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIElmIHNvbWUgYXR0cmlidXRlcyByZW1vdmVkXHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYXR0cmlidXRlTGlzdC5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVMaXN0W2tdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgYnVmZmVySW5mbztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWZpcnN0VXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVySW5mbyA9IGF0dHJpYnV0ZUJ1ZmZlck1hcFtuYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBidWZmZXI7XHJcbiAgICAgICAgICAgICAgICBpZiAoYnVmZmVySW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlckluZm8uYnVmZmVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gX2dsLmNyZWF0ZUJ1ZmZlcigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNhY2hlLmlzRGlydHkobWFrZUF0dHJLZXkobmFtZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSB1cGRhdGUgd2hlbiB0aGV5IGFyZSBkaXJ0eS5cclxuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBVc2UgQnVmZmVyU3ViRGF0YT9cclxuICAgICAgICAgICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlcihfZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9nbC5idWZmZXJEYXRhKF9nbC5BUlJBWV9CVUZGRVIsIGF0dHJpYnV0ZS52YWx1ZSwgdGhpcy5keW5hbWljID8gZ2xlbnVtLkRZTkFNSUNfRFJBVyA6IGdsZW51bS5TVEFUSUNfRFJBVyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlQnVmZmVyc1trXSA9IG5ldyBBdHRyaWJ1dGVCdWZmZXIobmFtZSwgYXR0cmlidXRlLnR5cGUsIGJ1ZmZlciwgYXR0cmlidXRlLnNpemUsIGF0dHJpYnV0ZS5zZW1hbnRpYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUmVtb3ZlIHVudXNlZCBhdHRyaWJ1dGVzIGJ1ZmZlcnMuXHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGs7IGkgPCBhdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZGVsZXRlQnVmZmVyKGF0dHJpYnV0ZUJ1ZmZlcnNbaV0uYnVmZmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aCA9IGs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNVc2VJbmRpY2VzKCkgJiYgKGlzSW5kaWNlc0RpcnR5IHx8IGZpcnN0VXBkYXRlKSkge1xyXG4gICAgICAgICAgICBpZiAoIWluZGljZXNCdWZmZXIpIHtcclxuICAgICAgICAgICAgICAgIGluZGljZXNCdWZmZXIgPSBuZXcgSW5kaWNlc0J1ZmZlcihfZ2wuY3JlYXRlQnVmZmVyKCkpO1xyXG4gICAgICAgICAgICAgICAgY2h1bmsuaW5kaWNlc0J1ZmZlciA9IGluZGljZXNCdWZmZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW5kaWNlc0J1ZmZlci5jb3VudCA9IHRoaXMuaW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIF9nbC5iaW5kQnVmZmVyKF9nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgaW5kaWNlc0J1ZmZlci5idWZmZXIpO1xyXG4gICAgICAgICAgICBfZ2wuYnVmZmVyRGF0YShfZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kaWNlcywgdGhpcy5keW5hbWljID8gZ2xlbnVtLkRZTkFNSUNfRFJBVyA6IGdsZW51bS5TVEFUSUNfRFJBVyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgZ2VvbWV0cnkgZGF0YSBpbiBHTCBjb250ZXh0LlxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuXHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcblxyXG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcclxuICAgICAgICB2YXIgY2h1bmtzID0gY2FjaGUuZ2V0KCdjaHVua3MnKTtcclxuICAgICAgICBpZiAoY2h1bmtzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY2h1bmtzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBjaHVua3NbY107XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBjaHVuay5hdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnMgPSBjaHVuay5hdHRyaWJ1dGVCdWZmZXJzW2tdO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLmdsLmRlbGV0ZUJ1ZmZlcihhdHRyaWJzLmJ1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNodW5rLmluZGljZXNCdWZmZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5nbC5kZWxldGVCdWZmZXIoY2h1bmsuaW5kaWNlc0J1ZmZlci5idWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9fdmFvQ2FjaGUpIHtcclxuICAgICAgICAgICAgdmFyIHZhb0V4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9fdmFvQ2FjaGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YW8gPSB0aGlzLl9fdmFvQ2FjaGVbaWRdLnZhbztcclxuICAgICAgICAgICAgICAgIGlmICh2YW8pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YW9FeHQuZGVsZXRlVmVydGV4QXJyYXlPRVModmFvKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9fdmFvQ2FjaGUgPSB7fTtcclxuICAgICAgICBjYWNoZS5kZWxldGVDb250ZXh0KHJlbmRlcmVyLl9fdWlkX18pO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIGNsYXkuR2VvbWV0cnlCYXNlI3ZlcnRleENvdW50XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHZW9tZXRyeUJhc2UucHJvdG90eXBlLCAndmVydGV4Q291bnQnLCB7XHJcblxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBtYWluQXR0cmlidXRlID0gdGhpcy5hdHRyaWJ1dGVzW3RoaXMubWFpbkF0dHJpYnV0ZV07XHJcblxyXG4gICAgICAgICAgICBpZiAoIW1haW5BdHRyaWJ1dGUpIHtcclxuICAgICAgICAgICAgICAgIG1haW5BdHRyaWJ1dGUgPSB0aGlzLmF0dHJpYnV0ZXNbdGhpcy5fYXR0cmlidXRlTGlzdFswXV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghbWFpbkF0dHJpYnV0ZSB8fCAhbWFpbkF0dHJpYnV0ZS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG1haW5BdHRyaWJ1dGUudmFsdWUubGVuZ3RoIC8gbWFpbkF0dHJpYnV0ZS5zaXplO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBjbGF5Lkdlb21ldHJ5QmFzZSN0cmlhbmdsZUNvdW50XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHZW9tZXRyeUJhc2UucHJvdG90eXBlLCAndHJpYW5nbGVDb3VudCcsIHtcclxuXHJcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICAgICAgaWYgKCFpbmRpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbmRpY2VzLmxlbmd0aCAvIDM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuR2VvbWV0cnlCYXNlLlNUQVRJQ19EUkFXID0gZ2xlbnVtLlNUQVRJQ19EUkFXO1xyXG5HZW9tZXRyeUJhc2UuRFlOQU1JQ19EUkFXID0gZ2xlbnVtLkRZTkFNSUNfRFJBVztcclxuR2VvbWV0cnlCYXNlLlNUUkVBTV9EUkFXID0gZ2xlbnVtLlNUUkVBTV9EUkFXO1xyXG5cclxuR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZUJ1ZmZlciA9IEF0dHJpYnV0ZUJ1ZmZlcjtcclxuR2VvbWV0cnlCYXNlLkluZGljZXNCdWZmZXIgPSBJbmRpY2VzQnVmZmVyO1xyXG5cclxuR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdlb21ldHJ5QmFzZTtcclxuIiwiaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi9nbG1hdHJpeC92ZWMzJztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCBHZW9tZXRyeUJhc2UgZnJvbSAnLi9HZW9tZXRyeUJhc2UnO1xyXG5cclxudmFyIHZlYzNDcmVhdGUgPSB2ZWMzLmNyZWF0ZTtcclxudmFyIHZlYzNBZGQgPSB2ZWMzLmFkZDtcclxudmFyIHZlYzNTZXQgPSB2ZWMzLnNldDtcclxuXHJcbnZhciBBdHRyaWJ1dGUgPSBHZW9tZXRyeUJhc2UuQXR0cmlidXRlO1xyXG5cclxuLyoqXHJcbiAqIEdlb21ldHJ5IGluIENsYXlHTCBjb250YWlucyB2ZXJ0ZXggYXR0cmlidXRlcyBvZiBtZXNoLiBUaGVzZSB2ZXJ0ZXggYXR0cmlidXRlcyB3aWxsIGJlIGZpbmFsbHkgcHJvdmlkZWQgdG8gdGhlIHtAbGluayBjbGF5LlNoYWRlcn0uXHJcbiAqIERpZmZlcmVudCB7QGxpbmsgY2xheS5TaGFkZXJ9IG5lZWRzIGRpZmZlcmVudCBhdHRyaWJ1dGVzLiBIZXJlIGlzIGEgbGlzdCBvZiBhdHRyaWJ1dGVzIHVzZWQgaW4gdGhlIGJ1aWx0aW4gc2hhZGVycy5cclxuICpcclxuICogKyBwb3NpdGlvbjogYGNsYXkuYmFzaWNgLCBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgdGV4Y29vcmQwOiBgY2xheS5iYXNpY2AsIGBjbGF5LmxhbWJlcnRgLCBgY2xheS5zdGFuZGFyZGBcclxuICogKyBjb2xvcjogYGNsYXkuYmFzaWNgLCBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgd2VpZ2h0OiBgY2xheS5iYXNpY2AsIGBjbGF5LmxhbWJlcnRgLCBgY2xheS5zdGFuZGFyZGBcclxuICogKyBqb2ludDogYGNsYXkuYmFzaWNgLCBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgbm9ybWFsOiBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgdGFuZ2VudDogYGNsYXkuc3RhbmRhcmRgXHJcbiAqXHJcbiAqICMjIyMgQ3JlYXRlIGEgcHJvY2VkdXJhbCBnZW9tZXRyeVxyXG4gKlxyXG4gKiBDbGF5R0wgcHJvdmlkZXMgYSBjb3VwbGUgb2YgYnVpbHRpbiBwcm9jZWR1cmFsIGdlb21ldHJpZXMuIElubGN1ZGluZzpcclxuICpcclxuICogICsge0BsaW5rIGNsYXkuZ2VvbWV0cnkuQ3ViZX1cclxuICogICsge0BsaW5rIGNsYXkuZ2VvbWV0cnkuU3BoZXJlfVxyXG4gKiAgKyB7QGxpbmsgY2xheS5nZW9tZXRyeS5QbGFuZX1cclxuICogICsge0BsaW5rIGNsYXkuZ2VvbWV0cnkuQ3lsaW5kZXJ9XHJcbiAqICArIHtAbGluayBjbGF5Lmdlb21ldHJ5LkNvbmV9XHJcbiAqICArIHtAbGluayBjbGF5Lmdlb21ldHJ5LlBhcmFtZXRyaWNTdXJmYWNlfVxyXG4gKlxyXG4gKiBJdCdzIHNpbXBsZSB0byBjcmVhdGUgYSBiYXNpYyBnZW9tZXRyeSB3aXRoIHRoZXNlIGNsYXNzZXMuXHJcbiAqXHJcbmBgYGpzXHJcbnZhciBzcGhlcmUgPSBuZXcgY2xheS5nZW9tZXRyeS5TcGhlcmUoe1xyXG4gICAgcmFkaXVzOiAyXHJcbn0pO1xyXG5gYGBcclxuICpcclxuICogIyMjIyBDcmVhdGUgdGhlIGdlb21ldHJ5IGRhdGEgYnkgeW91cnNlbGZcclxuICpcclxuICogVXN1YWxseSB0aGUgdmVydGV4IGF0dHJpYnV0ZXMgZGF0YSBhcmUgY3JlYXRlZCBieSB0aGUge0BsaW5rIGNsYXkubG9hZGVyLkdMVEZ9IG9yIHByb2NlZHVyYWwgZ2VvbWV0cmllcyBsaWtlIHtAbGluayBjbGF5Lmdlb21ldHJ5LlNwaGVyZX0uXHJcbiAqIEJlc2lkZXMgdGhlc2UsIHlvdSBjYW4gY3JlYXRlIHRoZSBkYXRhIG1hbnVhbGx5LiBIZXJlIGlzIGEgc2ltcGxlIGV4YW1wbGUgdG8gY3JlYXRlIGEgdHJpYW5nbGUuXHJcbmBgYGpzXHJcbnZhciBUUklBTkdMRV9QT1NJVElPTlMgPSBbXHJcbiAgICBbLTAuNSwgLTAuNSwgMF0sXHJcbiAgICBbMC41LCAtMC41LCAwXSxcclxuICAgIFswLCAwLjUsIDBdXHJcbl07XHJcbnZhciBnZW9tZXRyeSA9IG5ldyBjbGF5LlN0YXRpY0dlb21ldHJ5QmFzZSgpO1xyXG4vLyBBZGQgdHJpYW5nbGUgdmVydGljZXMgdG8gcG9zaXRpb24gYXR0cmlidXRlLlxyXG5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmZyb21BcnJheShUUklBTkdMRV9QT1NJVElPTlMpO1xyXG5gYGBcclxuICogVGhlbiB5b3UgY2FuIHVzZSB0aGUgdXRpbGl0eSBtZXRob2RzIGxpa2UgYGdlbmVyYXRlVmVydGV4Tm9ybWFsc2AsIGBnZW5lcmF0ZVRhbmdlbnRzYCB0byBjcmVhdGUgdGhlIHJlbWFpbmluZyBuZWNlc3NhcnkgYXR0cmlidXRlcy5cclxuICpcclxuICpcclxuICogIyMjIyBVc2Ugd2l0aCBjdXN0b20gc2hhZGVyc1xyXG4gKlxyXG4gKiBJZiB5b3Ugd2FuJ3QgdG8gd3JpdGUgY3VzdG9tIHNoYWRlcnMuIERvbid0IGZvcmdldCB0byBhZGQgU0VNQU5USUNTIHRvIHRoZXNlIGF0dHJpYnV0ZXMuIEZvciBleGFtcGxlXHJcbiAqXHJcbiBgYGBnbHNsXHJcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcclxudW5pZm9ybSBtYXQ0IHdvcmxkSW52ZXJzZVRyYW5zcG9zZSA6IFdPUkxESU5WRVJTRVRSQU5TUE9TRTtcclxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XHJcblxyXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xyXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZCA6IFRFWENPT1JEXzA7XHJcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbCA6IE5PUk1BTDtcclxuYGBgXHJcbiAqIFRoZXNlIGBQT1NJVElPTmAsIGBURVhDT09SRF8wYCwgYE5PUk1BTGAgYXJlIFNFTUFOVElDUyB3aGljaCB3aWxsIG1hcCB0aGUgYXR0cmlidXRlcyBpbiBzaGFkZXIgdG8gdGhlIGF0dHJpYnV0ZXMgaW4gdGhlIEdlb21ldHJ5QmFzZVxyXG4gKlxyXG4gKiBBdmFpbGFibGUgYXR0cmlidXRlcyBTRU1BTlRJQ1MgaW5jbHVkZXMgYFBPU0lUSU9OYCwgYFRFWENPT1JEXzBgLCBgVEVYQ09PUkRfMWAgYE5PUk1BTGAsIGBUQU5HRU5UYCwgYENPTE9SYCwgYFdFSUdIVGAsIGBKT0lOVGAuXHJcbiAqXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlCYXNlXHJcbiAqL1xyXG52YXIgR2VvbWV0cnkgPSBHZW9tZXRyeUJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuR2VvbWV0cnkjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBdHRyaWJ1dGVzIG9mIGdlb21ldHJ5LiBJbmNsdWRpbmc6XHJcbiAgICAgICAgICogICsgYHBvc2l0aW9uYFxyXG4gICAgICAgICAqICArIGB0ZXhjb29yZDBgXHJcbiAgICAgICAgICogICsgYHRleGNvb3JkMWBcclxuICAgICAgICAgKiAgKyBgbm9ybWFsYFxyXG4gICAgICAgICAqICArIGB0YW5nZW50YFxyXG4gICAgICAgICAqICArIGBjb2xvcmBcclxuICAgICAgICAgKiAgKyBgd2VpZ2h0YFxyXG4gICAgICAgICAqICArIGBqb2ludGBcclxuICAgICAgICAgKiAgKyBgYmFyeWNlbnRyaWNgXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIGNsYXkuR2VvbWV0cnkuQXR0cmlidXRlPn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgQXR0cmlidXRlKCdwb3NpdGlvbicsICdmbG9hdCcsIDMsICdQT1NJVElPTicpLFxyXG4gICAgICAgICAgICB0ZXhjb29yZDA6IG5ldyBBdHRyaWJ1dGUoJ3RleGNvb3JkMCcsICdmbG9hdCcsIDIsICdURVhDT09SRF8wJyksXHJcbiAgICAgICAgICAgIHRleGNvb3JkMTogbmV3IEF0dHJpYnV0ZSgndGV4Y29vcmQxJywgJ2Zsb2F0JywgMiwgJ1RFWENPT1JEXzEnKSxcclxuICAgICAgICAgICAgbm9ybWFsOiBuZXcgQXR0cmlidXRlKCdub3JtYWwnLCAnZmxvYXQnLCAzLCAnTk9STUFMJyksXHJcbiAgICAgICAgICAgIHRhbmdlbnQ6IG5ldyBBdHRyaWJ1dGUoJ3RhbmdlbnQnLCAnZmxvYXQnLCA0LCAnVEFOR0VOVCcpLFxyXG4gICAgICAgICAgICBjb2xvcjogbmV3IEF0dHJpYnV0ZSgnY29sb3InLCAnZmxvYXQnLCA0LCAnQ09MT1InKSxcclxuICAgICAgICAgICAgLy8gU2tpbm5pbmcgYXR0cmlidXRlc1xyXG4gICAgICAgICAgICAvLyBFYWNoIHZlcnRleCBjYW4gYmUgYmluZCB0byA0IGJvbmVzLCBiZWNhdXNlIHRoZVxyXG4gICAgICAgICAgICAvLyBzdW0gb2Ygd2VpZ2h0cyBpcyAxLCBzbyB0aGUgd2VpZ2h0cyBpcyBzdG9yZWQgaW4gdmVjMyBhbmQgdGhlIGxhc3RcclxuICAgICAgICAgICAgLy8gY2FuIGJlIGNhbGN1bGF0ZWQgYnkgMS13Lngtdy55LXcuelxyXG4gICAgICAgICAgICB3ZWlnaHQ6IG5ldyBBdHRyaWJ1dGUoJ3dlaWdodCcsICdmbG9hdCcsIDMsICdXRUlHSFQnKSxcclxuICAgICAgICAgICAgam9pbnQ6IG5ldyBBdHRyaWJ1dGUoJ2pvaW50JywgJ2Zsb2F0JywgNCwgJ0pPSU5UJyksXHJcbiAgICAgICAgICAgIC8vIEZvciB3aXJlZnJhbWUgZGlzcGxheVxyXG4gICAgICAgICAgICAvLyBodHRwOi8vY29kZWZsb3cub3JnL2VudHJpZXMvMjAxMi9hdWcvMDIvZWFzeS13aXJlZnJhbWUtZGlzcGxheS13aXRoLWJhcnljZW50cmljLWNvb3JkaW5hdGVzL1xyXG4gICAgICAgICAgICBiYXJ5Y2VudHJpYzogbmV3IEF0dHJpYnV0ZSgnYmFyeWNlbnRyaWMnLCAnZmxvYXQnLCAzLCBudWxsKSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbGN1bGF0ZWQgYm91bmRpbmcgYm94IG9mIGdlb21ldHJ5LlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LkJvdW5kaW5nQm94fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGJvdW5kaW5nQm94OiBudWxsXHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuR2VvbWV0cnkucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICBtYWluQXR0cmlidXRlOiAncG9zaXRpb24nLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIGJvdW5kaW5nQm94IG9mIEdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUJvdW5kaW5nQm94OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGJib3ggPSB0aGlzLmJvdW5kaW5nQm94O1xyXG4gICAgICAgIGlmICghYmJveCkge1xyXG4gICAgICAgICAgICBiYm94ID0gdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcG9zQXJyID0gdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIGlmIChwb3NBcnIgJiYgcG9zQXJyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YXIgbWluID0gYmJveC5taW47XHJcbiAgICAgICAgICAgIHZhciBtYXggPSBiYm94Lm1heDtcclxuICAgICAgICAgICAgdmFyIG1pbkFyciA9IG1pbi5hcnJheTtcclxuICAgICAgICAgICAgdmFyIG1heEFyciA9IG1heC5hcnJheTtcclxuICAgICAgICAgICAgdmVjMy5zZXQobWluQXJyLCBwb3NBcnJbMF0sIHBvc0FyclsxXSwgcG9zQXJyWzJdKTtcclxuICAgICAgICAgICAgdmVjMy5zZXQobWF4QXJyLCBwb3NBcnJbMF0sIHBvc0FyclsxXSwgcG9zQXJyWzJdKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDM7IGkgPCBwb3NBcnIubGVuZ3RoOykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHggPSBwb3NBcnJbaSsrXTtcclxuICAgICAgICAgICAgICAgIHZhciB5ID0gcG9zQXJyW2krK107XHJcbiAgICAgICAgICAgICAgICB2YXIgeiA9IHBvc0FycltpKytdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHggPCBtaW5BcnJbMF0pIHsgbWluQXJyWzBdID0geDsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHkgPCBtaW5BcnJbMV0pIHsgbWluQXJyWzFdID0geTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHogPCBtaW5BcnJbMl0pIHsgbWluQXJyWzJdID0gejsgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh4ID4gbWF4QXJyWzBdKSB7IG1heEFyclswXSA9IHg7IH1cclxuICAgICAgICAgICAgICAgIGlmICh5ID4gbWF4QXJyWzFdKSB7IG1heEFyclsxXSA9IHk7IH1cclxuICAgICAgICAgICAgICAgIGlmICh6ID4gbWF4QXJyWzJdKSB7IG1heEFyclsyXSA9IHo7IH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIG5vcm1hbHMgcGVyIHZlcnRleC5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVWZXJ0ZXhOb3JtYWxzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZlcnRleENvdW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIHZhciBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICghbm9ybWFscyB8fCBub3JtYWxzLmxlbmd0aCAhPT0gcG9zaXRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWUgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheShwb3NpdGlvbnMubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFJlc2V0XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9ybWFscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsc1tpXSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwMSA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgcDIgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHAzID0gdmVjM0NyZWF0ZSgpO1xyXG5cclxuICAgICAgICB2YXIgdjIxID0gdmVjM0NyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB2MzIgPSB2ZWMzQ3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHZhciBuID0gdmVjM0NyZWF0ZSgpO1xyXG5cclxuICAgICAgICB2YXIgbGVuID0gaW5kaWNlcyA/IGluZGljZXMubGVuZ3RoIDogdGhpcy52ZXJ0ZXhDb3VudDtcclxuICAgICAgICB2YXIgaTEsIGkyLCBpMztcclxuICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGxlbjspIHtcclxuICAgICAgICAgICAgaWYgKGluZGljZXMpIHtcclxuICAgICAgICAgICAgICAgIGkxID0gaW5kaWNlc1tmKytdO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBpbmRpY2VzW2YrK107XHJcbiAgICAgICAgICAgICAgICBpMyA9IGluZGljZXNbZisrXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGkxID0gZisrO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBmKys7XHJcbiAgICAgICAgICAgICAgICBpMyA9IGYrKztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVjM1NldChwMSwgcG9zaXRpb25zW2kxKjNdLCBwb3NpdGlvbnNbaTEqMysxXSwgcG9zaXRpb25zW2kxKjMrMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHAyLCBwb3NpdGlvbnNbaTIqM10sIHBvc2l0aW9uc1tpMiozKzFdLCBwb3NpdGlvbnNbaTIqMysyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQocDMsIHBvc2l0aW9uc1tpMyozXSwgcG9zaXRpb25zW2kzKjMrMV0sIHBvc2l0aW9uc1tpMyozKzJdKTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYyMSwgcDEsIHAyKTtcclxuICAgICAgICAgICAgdmVjMy5zdWIodjMyLCBwMiwgcDMpO1xyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKG4sIHYyMSwgdjMyKTtcclxuICAgICAgICAgICAgLy8gQWxyZWFkeSBiZSB3ZWlnaHRlZCBieSB0aGUgdHJpYW5nbGUgYXJlYVxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsc1tpMSozK2ldID0gbm9ybWFsc1tpMSozK2ldICsgbltpXTtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTIqMytpXSA9IG5vcm1hbHNbaTIqMytpXSArIG5baV07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kzKjMraV0gPSBub3JtYWxzW2kzKjMraV0gKyBuW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vcm1hbHMubGVuZ3RoOykge1xyXG4gICAgICAgICAgICB2ZWMzU2V0KG4sIG5vcm1hbHNbaV0sIG5vcm1hbHNbaSsxXSwgbm9ybWFsc1tpKzJdKTtcclxuICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUobiwgbik7XHJcbiAgICAgICAgICAgIG5vcm1hbHNbaSsrXSA9IG5bMF07XHJcbiAgICAgICAgICAgIG5vcm1hbHNbaSsrXSA9IG5bMV07XHJcbiAgICAgICAgICAgIG5vcm1hbHNbaSsrXSA9IG5bMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlydHkoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBub3JtYWxzIHBlciBmYWNlLlxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZUZhY2VOb3JtYWxzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZlcnRleENvdW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc1VuaXF1ZVZlcnRleCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVVbmlxdWVWZXJ0ZXgoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIHZhciBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcblxyXG4gICAgICAgIHZhciBwMSA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgcDIgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHAzID0gdmVjM0NyZWF0ZSgpO1xyXG5cclxuICAgICAgICB2YXIgdjIxID0gdmVjM0NyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB2MzIgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIG4gPSB2ZWMzQ3JlYXRlKCk7XHJcblxyXG4gICAgICAgIGlmICghbm9ybWFscykge1xyXG4gICAgICAgICAgICBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHBvc2l0aW9ucy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbGVuID0gaW5kaWNlcyA/IGluZGljZXMubGVuZ3RoIDogdGhpcy52ZXJ0ZXhDb3VudDtcclxuICAgICAgICB2YXIgaTEsIGkyLCBpMztcclxuICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGxlbjspIHtcclxuICAgICAgICAgICAgaWYgKGluZGljZXMpIHtcclxuICAgICAgICAgICAgICAgIGkxID0gaW5kaWNlc1tmKytdO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBpbmRpY2VzW2YrK107XHJcbiAgICAgICAgICAgICAgICBpMyA9IGluZGljZXNbZisrXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGkxID0gZisrO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBmKys7XHJcbiAgICAgICAgICAgICAgICBpMyA9IGYrKztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVjM1NldChwMSwgcG9zaXRpb25zW2kxKjNdLCBwb3NpdGlvbnNbaTEqMysxXSwgcG9zaXRpb25zW2kxKjMrMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHAyLCBwb3NpdGlvbnNbaTIqM10sIHBvc2l0aW9uc1tpMiozKzFdLCBwb3NpdGlvbnNbaTIqMysyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQocDMsIHBvc2l0aW9uc1tpMyozXSwgcG9zaXRpb25zW2kzKjMrMV0sIHBvc2l0aW9uc1tpMyozKzJdKTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYyMSwgcDEsIHAyKTtcclxuICAgICAgICAgICAgdmVjMy5zdWIodjMyLCBwMiwgcDMpO1xyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKG4sIHYyMSwgdjMyKTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKG4sIG4pO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTEqMyArIGldID0gbltpXTtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTIqMyArIGldID0gbltpXTtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTMqMyArIGldID0gbltpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgdGFuZ2VudHMgYXR0cmlidXRlcy5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVUYW5nZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgblZlcnRleCA9IHRoaXMudmVydGV4Q291bnQ7XHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgaWYgKCFhdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWUpIHtcclxuICAgICAgICAgICAgYXR0cmlidXRlcy50YW5nZW50LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShuVmVydGV4ICogNCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0ZXhjb29yZHMgPSBhdHRyaWJ1dGVzLnRleGNvb3JkMC52YWx1ZTtcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICB2YXIgdGFuZ2VudHMgPSBhdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWU7XHJcbiAgICAgICAgdmFyIG5vcm1hbHMgPSBhdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKCF0ZXhjb29yZHMpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdHZW9tZXRyeSB3aXRob3V0IHRleGNvb3JkcyBjYW5cXCd0IGdlbmVyYXRlIHRhbmdlbnRzLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGFuMSA9IFtdO1xyXG4gICAgICAgIHZhciB0YW4yID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVmVydGV4OyBpKyspIHtcclxuICAgICAgICAgICAgdGFuMVtpXSA9IFswLjAsIDAuMCwgMC4wXTtcclxuICAgICAgICAgICAgdGFuMltpXSA9IFswLjAsIDAuMCwgMC4wXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzZGlyID0gWzAuMCwgMC4wLCAwLjBdO1xyXG4gICAgICAgIHZhciB0ZGlyID0gWzAuMCwgMC4wLCAwLjBdO1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG5cclxuICAgICAgICB2YXIgbGVuID0gaW5kaWNlcyA/IGluZGljZXMubGVuZ3RoIDogdGhpcy52ZXJ0ZXhDb3VudDtcclxuICAgICAgICB2YXIgaTEsIGkyLCBpMztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjspIHtcclxuICAgICAgICAgICAgaWYgKGluZGljZXMpIHtcclxuICAgICAgICAgICAgICAgIGkxID0gaW5kaWNlc1tpKytdO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBpbmRpY2VzW2krK107XHJcbiAgICAgICAgICAgICAgICBpMyA9IGluZGljZXNbaSsrXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGkxID0gaSsrO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBpKys7XHJcbiAgICAgICAgICAgICAgICBpMyA9IGkrKztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHN0MXMgPSB0ZXhjb29yZHNbaTEgKiAyXSxcclxuICAgICAgICAgICAgICAgIHN0MnMgPSB0ZXhjb29yZHNbaTIgKiAyXSxcclxuICAgICAgICAgICAgICAgIHN0M3MgPSB0ZXhjb29yZHNbaTMgKiAyXSxcclxuICAgICAgICAgICAgICAgIHN0MXQgPSB0ZXhjb29yZHNbaTEgKiAyICsgMV0sXHJcbiAgICAgICAgICAgICAgICBzdDJ0ID0gdGV4Y29vcmRzW2kyICogMiArIDFdLFxyXG4gICAgICAgICAgICAgICAgc3QzdCA9IHRleGNvb3Jkc1tpMyAqIDIgKyAxXSxcclxuXHJcbiAgICAgICAgICAgICAgICBwMXggPSBwb3NpdGlvbnNbaTEgKiAzXSxcclxuICAgICAgICAgICAgICAgIHAyeCA9IHBvc2l0aW9uc1tpMiAqIDNdLFxyXG4gICAgICAgICAgICAgICAgcDN4ID0gcG9zaXRpb25zW2kzICogM10sXHJcbiAgICAgICAgICAgICAgICBwMXkgPSBwb3NpdGlvbnNbaTEgKiAzICsgMV0sXHJcbiAgICAgICAgICAgICAgICBwMnkgPSBwb3NpdGlvbnNbaTIgKiAzICsgMV0sXHJcbiAgICAgICAgICAgICAgICBwM3kgPSBwb3NpdGlvbnNbaTMgKiAzICsgMV0sXHJcbiAgICAgICAgICAgICAgICBwMXogPSBwb3NpdGlvbnNbaTEgKiAzICsgMl0sXHJcbiAgICAgICAgICAgICAgICBwMnogPSBwb3NpdGlvbnNbaTIgKiAzICsgMl0sXHJcbiAgICAgICAgICAgICAgICBwM3ogPSBwb3NpdGlvbnNbaTMgKiAzICsgMl07XHJcblxyXG4gICAgICAgICAgICB2YXIgeDEgPSBwMnggLSBwMXgsXHJcbiAgICAgICAgICAgICAgICB4MiA9IHAzeCAtIHAxeCxcclxuICAgICAgICAgICAgICAgIHkxID0gcDJ5IC0gcDF5LFxyXG4gICAgICAgICAgICAgICAgeTIgPSBwM3kgLSBwMXksXHJcbiAgICAgICAgICAgICAgICB6MSA9IHAyeiAtIHAxeixcclxuICAgICAgICAgICAgICAgIHoyID0gcDN6IC0gcDF6O1xyXG5cclxuICAgICAgICAgICAgdmFyIHMxID0gc3QycyAtIHN0MXMsXHJcbiAgICAgICAgICAgICAgICBzMiA9IHN0M3MgLSBzdDFzLFxyXG4gICAgICAgICAgICAgICAgdDEgPSBzdDJ0IC0gc3QxdCxcclxuICAgICAgICAgICAgICAgIHQyID0gc3QzdCAtIHN0MXQ7XHJcblxyXG4gICAgICAgICAgICB2YXIgciA9IDEuMCAvIChzMSAqIHQyIC0gdDEgKiBzMik7XHJcbiAgICAgICAgICAgIHNkaXJbMF0gPSAodDIgKiB4MSAtIHQxICogeDIpICogcjtcclxuICAgICAgICAgICAgc2RpclsxXSA9ICh0MiAqIHkxIC0gdDEgKiB5MikgKiByO1xyXG4gICAgICAgICAgICBzZGlyWzJdID0gKHQyICogejEgLSB0MSAqIHoyKSAqIHI7XHJcblxyXG4gICAgICAgICAgICB0ZGlyWzBdID0gKHMxICogeDIgLSBzMiAqIHgxKSAqIHI7XHJcbiAgICAgICAgICAgIHRkaXJbMV0gPSAoczEgKiB5MiAtIHMyICogeTEpICogcjtcclxuICAgICAgICAgICAgdGRpclsyXSA9IChzMSAqIHoyIC0gczIgKiB6MSkgKiByO1xyXG5cclxuICAgICAgICAgICAgdmVjM0FkZCh0YW4xW2kxXSwgdGFuMVtpMV0sIHNkaXIpO1xyXG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjFbaTJdLCB0YW4xW2kyXSwgc2Rpcik7XHJcbiAgICAgICAgICAgIHZlYzNBZGQodGFuMVtpM10sIHRhbjFbaTNdLCBzZGlyKTtcclxuICAgICAgICAgICAgdmVjM0FkZCh0YW4yW2kxXSwgdGFuMltpMV0sIHRkaXIpO1xyXG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjJbaTJdLCB0YW4yW2kyXSwgdGRpcik7XHJcbiAgICAgICAgICAgIHZlYzNBZGQodGFuMltpM10sIHRhbjJbaTNdLCB0ZGlyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHRtcCA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgbkNyb3NzVCA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgbiA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5WZXJ0ZXg7IGkrKykge1xyXG4gICAgICAgICAgICBuWzBdID0gbm9ybWFsc1tpICogM107XHJcbiAgICAgICAgICAgIG5bMV0gPSBub3JtYWxzW2kgKiAzICsgMV07XHJcbiAgICAgICAgICAgIG5bMl0gPSBub3JtYWxzW2kgKiAzICsgMl07XHJcbiAgICAgICAgICAgIHZhciB0ID0gdGFuMVtpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIEdyYW0tU2NobWlkdCBvcnRob2dvbmFsaXplXHJcbiAgICAgICAgICAgIHZlYzMuc2NhbGUodG1wLCBuLCB2ZWMzLmRvdChuLCB0KSk7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHRtcCwgdCwgdG1wKTtcclxuICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUodG1wLCB0bXApO1xyXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgaGFuZGVkbmVzcy5cclxuICAgICAgICAgICAgdmVjMy5jcm9zcyhuQ3Jvc3NULCBuLCB0KTtcclxuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDRdID0gdG1wWzBdO1xyXG4gICAgICAgICAgICB0YW5nZW50c1tpICogNCArIDFdID0gdG1wWzFdO1xyXG4gICAgICAgICAgICB0YW5nZW50c1tpICogNCArIDJdID0gdG1wWzJdO1xyXG4gICAgICAgICAgICAvLyBQRU5ESU5HIGNhbiBjb25maWcgP1xyXG4gICAgICAgICAgICB0YW5nZW50c1tpICogNCArIDNdID0gdmVjMy5kb3QobkNyb3NzVCwgdGFuMltpXSkgPCAwLjAgPyAtMS4wIDogMS4wO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdmVydGljZXMgYXJlIG5vdCBzaGFyZWQgYnkgZGlmZmVyZW50IGluZGljZXMuXHJcbiAgICAgKi9cclxuICAgIGlzVW5pcXVlVmVydGV4OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNVc2VJbmRpY2VzKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmVydGV4Q291bnQgPT09IHRoaXMuaW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYSB1bmlxdWUgdmVydGV4IGZvciBlYWNoIGluZGV4LlxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZVVuaXF1ZVZlcnRleDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCB8fCAhdGhpcy5pbmRpY2VzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmluZGljZXMubGVuZ3RoID4gMHhmZmZmKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5kaWNlcyA9IG5ldyB2ZW5kb3IuVWludDMyQXJyYXkodGhpcy5pbmRpY2VzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlTmFtZUxpc3QgPSB0aGlzLmdldEVuYWJsZWRBdHRyaWJ1dGVzKCk7XHJcblxyXG4gICAgICAgIHZhciBvbGRBdHRyVmFsdWVzID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBhdHRyaWJ1dGVOYW1lTGlzdC5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVMaXN0W2FdO1xyXG4gICAgICAgICAgICBvbGRBdHRyVmFsdWVzW25hbWVdID0gYXR0cmlidXRlc1tuYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgYXR0cmlidXRlc1tuYW1lXS5pbml0KHRoaXMuaW5kaWNlcy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGN1cnNvciA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpaSA9IGluZGljZXNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmlidXRlTmFtZUxpc3QubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZUxpc3RbYV07XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBhdHRyaWJ1dGVzW25hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNpemUgPSBhdHRyaWJ1dGVzW25hbWVdLnNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzaXplOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtjdXJzb3IgKiBzaXplICsga10gPSBvbGRBdHRyVmFsdWVzW25hbWVdW2lpICogc2l6ZSArIGtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGluZGljZXNbaV0gPSBjdXJzb3I7XHJcbiAgICAgICAgICAgIGN1cnNvcisrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIGJhcnljZW50cmljIGNvb3JkaW5hdGVzIGZvciB3aXJlZnJhbWUgZHJhdy5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVCYXJ5Y2VudHJpYzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNVbmlxdWVWZXJ0ZXgoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlVW5pcXVlVmVydGV4KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgYXJyYXkgPSBhdHRyaWJ1dGVzLmJhcnljZW50cmljLnZhbHVlO1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG4gICAgICAgIC8vIEFscmVhZHkgZXhpc3RlZDtcclxuICAgICAgICBpZiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoID09PSBpbmRpY2VzLmxlbmd0aCAqIDMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhcnJheSA9IGF0dHJpYnV0ZXMuYmFyeWNlbnRyaWMudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KGluZGljZXMubGVuZ3RoICogMyk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHRoaXMudmVydGV4Q291bnQgLyAzKTspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAzOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBpaSA9IGluZGljZXMgPyBpbmRpY2VzW2krK10gOiAoaSAqIDMgKyBqKTtcclxuICAgICAgICAgICAgICAgIGFycmF5W2lpICogMyArIGpdID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgdHJhbnNmb3JtIHRvIGdlb21ldHJ5IGF0dHJpYnV0ZXMuXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gbWF0cml4XHJcbiAgICAgKi9cclxuICAgIGFwcGx5VHJhbnNmb3JtOiBmdW5jdGlvbiAobWF0cml4KSB7XHJcblxyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIHZhciBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcbiAgICAgICAgdmFyIHRhbmdlbnRzID0gYXR0cmlidXRlcy50YW5nZW50LnZhbHVlO1xyXG5cclxuICAgICAgICBtYXRyaXggPSBtYXRyaXguYXJyYXk7XHJcbiAgICAgICAgLy8gTm9ybWFsIE1hdHJpeFxyXG4gICAgICAgIHZhciBpbnZlcnNlVHJhbnNwb3NlTWF0cml4ID0gbWF0NC5jcmVhdGUoKTtcclxuICAgICAgICBtYXQ0LmludmVydChpbnZlcnNlVHJhbnNwb3NlTWF0cml4LCBtYXRyaXgpO1xyXG4gICAgICAgIG1hdDQudHJhbnNwb3NlKGludmVyc2VUcmFuc3Bvc2VNYXRyaXgsIGludmVyc2VUcmFuc3Bvc2VNYXRyaXgpO1xyXG5cclxuICAgICAgICB2YXIgdmVjM1RyYW5zZm9ybU1hdDQgPSB2ZWMzLnRyYW5zZm9ybU1hdDQ7XHJcbiAgICAgICAgdmFyIHZlYzNGb3JFYWNoID0gdmVjMy5mb3JFYWNoO1xyXG4gICAgICAgIHZlYzNGb3JFYWNoKHBvc2l0aW9ucywgMywgMCwgbnVsbCwgdmVjM1RyYW5zZm9ybU1hdDQsIG1hdHJpeCk7XHJcbiAgICAgICAgaWYgKG5vcm1hbHMpIHtcclxuICAgICAgICAgICAgdmVjM0ZvckVhY2gobm9ybWFscywgMywgMCwgbnVsbCwgdmVjM1RyYW5zZm9ybU1hdDQsIGludmVyc2VUcmFuc3Bvc2VNYXRyaXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGFuZ2VudHMpIHtcclxuICAgICAgICAgICAgdmVjM0ZvckVhY2godGFuZ2VudHMsIDQsIDAsIG51bGwsIHZlYzNUcmFuc2Zvcm1NYXQ0LCBpbnZlcnNlVHJhbnNwb3NlTWF0cml4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdlb21ldHJ5IGRhdGEgaW4gR0wgY29udGV4dC5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcblxyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG5cclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICAgICAgdmFyIGNodW5rcyA9IGNhY2hlLmdldCgnY2h1bmtzJyk7XHJcbiAgICAgICAgaWYgKGNodW5rcykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNodW5rcy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNodW5rID0gY2h1bmtzW2NdO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgY2h1bmsuYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJzID0gY2h1bmsuYXR0cmlidXRlQnVmZmVyc1trXTtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5nbC5kZWxldGVCdWZmZXIoYXR0cmlicy5idWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjaHVuay5pbmRpY2VzQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKGNodW5rLmluZGljZXNCdWZmZXIuYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fX3Zhb0NhY2hlKSB7XHJcbiAgICAgICAgICAgIHZhciB2YW9FeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fX3Zhb0NhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFvID0gdGhpcy5fX3Zhb0NhY2hlW2lkXS52YW87XHJcbiAgICAgICAgICAgICAgICBpZiAodmFvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFvRXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHZhbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fX3Zhb0NhY2hlID0ge307XHJcbiAgICAgICAgY2FjaGUuZGVsZXRlQ29udGV4dChyZW5kZXJlci5fX3VpZF9fKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuR2VvbWV0cnkuU1RBVElDX0RSQVcgPSBHZW9tZXRyeUJhc2UuU1RBVElDX0RSQVc7XHJcbkdlb21ldHJ5LkRZTkFNSUNfRFJBVyA9IEdlb21ldHJ5QmFzZS5EWU5BTUlDX0RSQVc7XHJcbkdlb21ldHJ5LlNUUkVBTV9EUkFXID0gR2VvbWV0cnlCYXNlLlNUUkVBTV9EUkFXO1xyXG5cclxuR2VvbWV0cnkuQXR0cmlidXRlQnVmZmVyID0gR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZUJ1ZmZlcjtcclxuR2VvbWV0cnkuSW5kaWNlc0J1ZmZlciA9IEdlb21ldHJ5QmFzZS5JbmRpY2VzQnVmZmVyO1xyXG5cclxuR2VvbWV0cnkuQXR0cmlidXRlID0gQXR0cmlidXRlO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgR2VvbWV0cnk7XHJcbiIsImltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5nZW9tZXRyeS5QbGFuZVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC53aWR0aFNlZ21lbnRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5oZWlnaHRTZWdtZW50c11cclxuICovXHJcbnZhciBQbGFuZSA9IEdlb21ldHJ5LmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5Lmdlb21ldHJ5LlBsYW5lIyAqL1xyXG57XHJcbiAgICBkeW5hbWljOiBmYWxzZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd2lkdGhTZWdtZW50czogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaGVpZ2h0U2VnbWVudHM6IDFcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5QbGFuZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCBwbGFuZSBnZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICBidWlsZDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGhlaWdodFNlZ21lbnRzID0gdGhpcy5oZWlnaHRTZWdtZW50cztcclxuICAgICAgICB2YXIgd2lkdGhTZWdtZW50cyA9IHRoaXMud2lkdGhTZWdtZW50cztcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gW107XHJcbiAgICAgICAgdmFyIHRleGNvb3JkcyA9IFtdO1xyXG4gICAgICAgIHZhciBub3JtYWxzID0gW107XHJcbiAgICAgICAgdmFyIGZhY2VzID0gW107XHJcblxyXG4gICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDw9IGhlaWdodFNlZ21lbnRzOyB5KyspIHtcclxuICAgICAgICAgICAgdmFyIHQgPSB5IC8gaGVpZ2h0U2VnbWVudHM7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDw9IHdpZHRoU2VnbWVudHM7IHgrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHMgPSB4IC8gd2lkdGhTZWdtZW50cztcclxuXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChbMiAqIHMgLSAxLCAyICogdCAtIDEsIDBdKTtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXhjb29yZHMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXhjb29yZHMucHVzaChbcywgdF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBub3JtYWxzLnB1c2goWzAsIDAsIDFdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh4IDwgd2lkdGhTZWdtZW50cyAmJiB5IDwgaGVpZ2h0U2VnbWVudHMpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHggKyB5ICogKHdpZHRoU2VnbWVudHMgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKFtpLCBpICsgMSwgaSArIHdpZHRoU2VnbWVudHMgKyAxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFjZXMucHVzaChbaSArIHdpZHRoU2VnbWVudHMgKyAxLCBpICsgMSwgaSArIHdpZHRoU2VnbWVudHMgKyAyXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF0dHJpYnV0ZXMucG9zaXRpb24uZnJvbUFycmF5KHBvc2l0aW9ucyk7XHJcbiAgICAgICAgYXR0cmlidXRlcy50ZXhjb29yZDAuZnJvbUFycmF5KHRleGNvb3Jkcyk7XHJcbiAgICAgICAgYXR0cmlidXRlcy5ub3JtYWwuZnJvbUFycmF5KG5vcm1hbHMpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRJbmRpY2VzRnJvbUFycmF5KGZhY2VzKTtcclxuXHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldCgtMSwgLTEsIDApO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWF4LnNldCgxLCAxLCAwKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQbGFuZTtcclxuIiwiaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IFBsYW5lIGZyb20gJy4vUGxhbmUnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5cclxudmFyIHBsYW5lTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5nZW9tZXRyeS5DdWJlXHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LndpZHRoU2VnbWVudHNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmhlaWdodFNlZ21lbnRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5kZXB0aFNlZ21lbnRzXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHQuaW5zaWRlXVxyXG4gKi9cclxudmFyIEN1YmUgPSBHZW9tZXRyeS5leHRlbmQoXHJcbi8qKkBsZW5kcyBjbGF5Lmdlb21ldHJ5LkN1YmUjICovXHJcbntcclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB3aWR0aFNlZ21lbnRzOiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBoZWlnaHRTZWdtZW50czogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGVwdGhTZWdtZW50czogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGluc2lkZTogZmFsc2VcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5DdWJlLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGN1YmUgZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgcGxhbmVzID0ge1xyXG4gICAgICAgICAgICAncHgnOiBjcmVhdGVQbGFuZSgncHgnLCB0aGlzLmRlcHRoU2VnbWVudHMsIHRoaXMuaGVpZ2h0U2VnbWVudHMpLFxyXG4gICAgICAgICAgICAnbngnOiBjcmVhdGVQbGFuZSgnbngnLCB0aGlzLmRlcHRoU2VnbWVudHMsIHRoaXMuaGVpZ2h0U2VnbWVudHMpLFxyXG4gICAgICAgICAgICAncHknOiBjcmVhdGVQbGFuZSgncHknLCB0aGlzLndpZHRoU2VnbWVudHMsIHRoaXMuZGVwdGhTZWdtZW50cyksXHJcbiAgICAgICAgICAgICdueSc6IGNyZWF0ZVBsYW5lKCdueScsIHRoaXMud2lkdGhTZWdtZW50cywgdGhpcy5kZXB0aFNlZ21lbnRzKSxcclxuICAgICAgICAgICAgJ3B6JzogY3JlYXRlUGxhbmUoJ3B6JywgdGhpcy53aWR0aFNlZ21lbnRzLCB0aGlzLmhlaWdodFNlZ21lbnRzKSxcclxuICAgICAgICAgICAgJ256JzogY3JlYXRlUGxhbmUoJ256JywgdGhpcy53aWR0aFNlZ21lbnRzLCB0aGlzLmhlaWdodFNlZ21lbnRzKSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgYXR0ckxpc3QgPSBbJ3Bvc2l0aW9uJywgJ3RleGNvb3JkMCcsICdub3JtYWwnXTtcclxuICAgICAgICB2YXIgdmVydGV4TnVtYmVyID0gMDtcclxuICAgICAgICB2YXIgZmFjZU51bWJlciA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgcG9zIGluIHBsYW5lcykge1xyXG4gICAgICAgICAgICB2ZXJ0ZXhOdW1iZXIgKz0gcGxhbmVzW3Bvc10udmVydGV4Q291bnQ7XHJcbiAgICAgICAgICAgIGZhY2VOdW1iZXIgKz0gcGxhbmVzW3Bvc10uaW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYXR0ckxpc3QubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2F0dHJMaXN0W2tdXS5pbml0KHZlcnRleE51bWJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW5kaWNlcyA9IG5ldyB2ZW5kb3IuVWludDE2QXJyYXkoZmFjZU51bWJlcik7XHJcbiAgICAgICAgdmFyIGZhY2VPZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciB2ZXJ0ZXhPZmZzZXQgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIHBvcyBpbiBwbGFuZXMpIHtcclxuICAgICAgICAgICAgdmFyIHBsYW5lID0gcGxhbmVzW3Bvc107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYXR0ckxpc3QubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyTmFtZSA9IGF0dHJMaXN0W2tdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJBcnJheSA9IHBsYW5lLmF0dHJpYnV0ZXNbYXR0ck5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJTaXplID0gcGxhbmUuYXR0cmlidXRlc1thdHRyTmFtZV0uc2l6ZTtcclxuICAgICAgICAgICAgICAgIHZhciBpc05vcm1hbCA9IGF0dHJOYW1lID09PSAnbm9ybWFsJztcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0ckFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gYXR0ckFycmF5W2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluc2lkZSAmJiBpc05vcm1hbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IC12YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2F0dHJOYW1lXS52YWx1ZVtpICsgYXR0clNpemUgKiB2ZXJ0ZXhPZmZzZXRdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGxlbiA9IHBsYW5lLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYW5lLmluZGljZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5kaWNlc1tpICsgZmFjZU9mZnNldF0gPSB2ZXJ0ZXhPZmZzZXQgKyBwbGFuZS5pbmRpY2VzW3RoaXMuaW5zaWRlID8gKGxlbiAtIGkgLSAxKSA6IGldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZhY2VPZmZzZXQgKz0gcGxhbmUuaW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIHZlcnRleE9mZnNldCArPSBwbGFuZS52ZXJ0ZXhDb3VudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1heC5zZXQoMSwgMSwgMSk7XHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5taW4uc2V0KC0xLCAtMSwgLTEpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVBsYW5lKHBvcywgd2lkdGhTZWdtZW50cywgaGVpZ2h0U2VnbWVudHMpIHtcclxuXHJcbiAgICBwbGFuZU1hdHJpeC5pZGVudGl0eSgpO1xyXG5cclxuICAgIHZhciBwbGFuZSA9IG5ldyBQbGFuZSh7XHJcbiAgICAgICAgd2lkdGhTZWdtZW50czogd2lkdGhTZWdtZW50cyxcclxuICAgICAgICBoZWlnaHRTZWdtZW50czogaGVpZ2h0U2VnbWVudHNcclxuICAgIH0pO1xyXG5cclxuICAgIHN3aXRjaChwb3MpIHtcclxuICAgICAgICBjYXNlICdweCc6XHJcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5QT1NJVElWRV9YKTtcclxuICAgICAgICAgICAgTWF0cml4NC5yb3RhdGVZKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgTWF0aC5QSSAvIDIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdueCc6XHJcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5ORUdBVElWRV9YKTtcclxuICAgICAgICAgICAgTWF0cml4NC5yb3RhdGVZKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgLU1hdGguUEkgLyAyKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAncHknOlxyXG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuUE9TSVRJVkVfWSk7XHJcbiAgICAgICAgICAgIE1hdHJpeDQucm90YXRlWChwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIC1NYXRoLlBJIC8gMik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ255JzpcclxuICAgICAgICAgICAgTWF0cml4NC50cmFuc2xhdGUocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgICAgICAgICBNYXRyaXg0LnJvdGF0ZVgocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBNYXRoLlBJIC8gMik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3B6JzpcclxuICAgICAgICAgICAgTWF0cml4NC50cmFuc2xhdGUocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBWZWN0b3IzLlBPU0lUSVZFX1opO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdueic6XHJcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5ORUdBVElWRV9aKTtcclxuICAgICAgICAgICAgTWF0cml4NC5yb3RhdGVZKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgTWF0aC5QSSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcGxhbmUuYXBwbHlUcmFuc2Zvcm0ocGxhbmVNYXRyaXgpO1xyXG4gICAgcmV0dXJuIHBsYW5lO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDdWJlO1xyXG4iLCJpbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuU3BoZXJlXHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHRTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwaGlTdGFydF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwaGlMZW5ndGhdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbdGhldGFTdGFydF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFt0aGV0YUxlbmd0aF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtyYWRpdXNdXHJcbiAqL1xyXG52YXIgU3BoZXJlID0gR2VvbWV0cnkuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5TcGhlcmUjICovIHtcclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB3aWR0aFNlZ21lbnRzOiA0MCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaGVpZ2h0U2VnbWVudHM6IDIwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcGhpU3RhcnQ6IDAsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHBoaUxlbmd0aDogTWF0aC5QSSAqIDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGV0YVN0YXJ0OiAwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGV0YUxlbmd0aDogTWF0aC5QSSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJhZGl1czogMVxyXG5cclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5TcGhlcmUucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgc3BoZXJlIGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGJ1aWxkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgaGVpZ2h0U2VnbWVudHMgPSB0aGlzLmhlaWdodFNlZ21lbnRzO1xyXG4gICAgICAgIHZhciB3aWR0aFNlZ21lbnRzID0gdGhpcy53aWR0aFNlZ21lbnRzO1xyXG5cclxuICAgICAgICB2YXIgcG9zaXRpb25BdHRyID0gdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciB0ZXhjb29yZEF0dHIgPSB0aGlzLmF0dHJpYnV0ZXMudGV4Y29vcmQwO1xyXG4gICAgICAgIHZhciBub3JtYWxBdHRyID0gdGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtcclxuXHJcbiAgICAgICAgdmFyIHZlcnRleENvdW50ID0gKHdpZHRoU2VnbWVudHMgKyAxKSAqIChoZWlnaHRTZWdtZW50cyArIDEpO1xyXG4gICAgICAgIHBvc2l0aW9uQXR0ci5pbml0KHZlcnRleENvdW50KTtcclxuICAgICAgICB0ZXhjb29yZEF0dHIuaW5pdCh2ZXJ0ZXhDb3VudCk7XHJcbiAgICAgICAgbm9ybWFsQXR0ci5pbml0KHZlcnRleENvdW50KTtcclxuXHJcbiAgICAgICAgdmFyIEluZGljZXNDdG9yID0gdmVydGV4Q291bnQgPiAweGZmZmYgPyBVaW50MzJBcnJheSA6IFVpbnQxNkFycmF5O1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzID0gbmV3IEluZGljZXNDdG9yKHdpZHRoU2VnbWVudHMgKiBoZWlnaHRTZWdtZW50cyAqIDYpO1xyXG5cclxuICAgICAgICB2YXIgeCwgeSwgeixcclxuICAgICAgICAgICAgdSwgdixcclxuICAgICAgICAgICAgaSwgajtcclxuXHJcbiAgICAgICAgdmFyIHJhZGl1cyA9IHRoaXMucmFkaXVzO1xyXG4gICAgICAgIHZhciBwaGlTdGFydCA9IHRoaXMucGhpU3RhcnQ7XHJcbiAgICAgICAgdmFyIHBoaUxlbmd0aCA9IHRoaXMucGhpTGVuZ3RoO1xyXG4gICAgICAgIHZhciB0aGV0YVN0YXJ0ID0gdGhpcy50aGV0YVN0YXJ0O1xyXG4gICAgICAgIHZhciB0aGV0YUxlbmd0aCA9IHRoaXMudGhldGFMZW5ndGg7XHJcbiAgICAgICAgdmFyIHJhZGl1cyA9IHRoaXMucmFkaXVzO1xyXG5cclxuICAgICAgICB2YXIgcG9zID0gW107XHJcbiAgICAgICAgdmFyIHV2ID0gW107XHJcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XHJcbiAgICAgICAgdmFyIGRpdmlkZXIgPSAxIC8gcmFkaXVzO1xyXG4gICAgICAgIGZvciAoaiA9IDA7IGogPD0gaGVpZ2h0U2VnbWVudHM7IGogKyspIHtcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8PSB3aWR0aFNlZ21lbnRzOyBpICsrKSB7XHJcbiAgICAgICAgICAgICAgICB1ID0gaSAvIHdpZHRoU2VnbWVudHM7XHJcbiAgICAgICAgICAgICAgICB2ID0gaiAvIGhlaWdodFNlZ21lbnRzO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFggYXhpcyBpcyBpbnZlcnRlZCBzbyB0ZXh0dXJlIGNhbiBiZSBtYXBwZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0XHJcbiAgICAgICAgICAgICAgICB4ID0gLXJhZGl1cyAqIE1hdGguY29zKHBoaVN0YXJ0ICsgdSAqIHBoaUxlbmd0aCkgKiBNYXRoLnNpbih0aGV0YVN0YXJ0ICsgdiAqIHRoZXRhTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHkgPSByYWRpdXMgKiBNYXRoLmNvcyh0aGV0YVN0YXJ0ICsgdiAqIHRoZXRhTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHogPSByYWRpdXMgKiBNYXRoLnNpbihwaGlTdGFydCArIHUgKiBwaGlMZW5ndGgpICogTWF0aC5zaW4odGhldGFTdGFydCArIHYgKiB0aGV0YUxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcG9zWzBdID0geDsgcG9zWzFdID0geTsgcG9zWzJdID0gejtcclxuICAgICAgICAgICAgICAgIHV2WzBdID0gdTsgdXZbMV0gPSB2O1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25BdHRyLnNldChvZmZzZXQsIHBvcyk7XHJcbiAgICAgICAgICAgICAgICB0ZXhjb29yZEF0dHIuc2V0KG9mZnNldCwgdXYpO1xyXG4gICAgICAgICAgICAgICAgcG9zWzBdICo9IGRpdmlkZXI7XHJcbiAgICAgICAgICAgICAgICBwb3NbMV0gKj0gZGl2aWRlcjtcclxuICAgICAgICAgICAgICAgIHBvc1syXSAqPSBkaXZpZGVyO1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsQXR0ci5zZXQob2Zmc2V0LCBwb3MpO1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0Kys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpMSwgaTIsIGkzLCBpNDtcclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IHdpZHRoU2VnbWVudHMgKyAxO1xyXG5cclxuICAgICAgICB2YXIgbiA9IDA7XHJcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGhlaWdodFNlZ21lbnRzOyBqICsrKSB7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB3aWR0aFNlZ21lbnRzOyBpICsrKSB7XHJcbiAgICAgICAgICAgICAgICBpMiA9IGogKiBsZW4gKyBpO1xyXG4gICAgICAgICAgICAgICAgaTEgPSAoaiAqIGxlbiArIGkgKyAxKTtcclxuICAgICAgICAgICAgICAgIGk0ID0gKGogKyAxKSAqIGxlbiArIGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgaTMgPSAoaiArIDEpICogbGVuICsgaTtcclxuXHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMTtcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGkyO1xyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTQ7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTI7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMztcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGk0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5tYXguc2V0KHJhZGl1cywgcmFkaXVzLCByYWRpdXMpO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldCgtcmFkaXVzLCAtcmFkaXVzLCAtcmFkaXVzKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTcGhlcmU7XHJcbiIsImltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuUGFyYW1ldHJpY1N1cmZhY2VcclxuICogQGV4dGVuZHMgY2xheS5HZW9tZXRyeVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdF1cclxuICogQHBhcmFtIHtPYmplY3R9IFtnZW5lcmF0b3JdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdlbmVyYXRvci54XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdlbmVyYXRvci55XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdlbmVyYXRvci56XHJcbiAqIEBwYXJhbSB7QXJyYXl9IFtnZW5lcmF0b3IudT1bMCwgMSwgMC4wNV1dXHJcbiAqIEBwYXJhbSB7QXJyYXl9IFtnZW5lcmF0b3Iudj1bMCwgMSwgMC4wNV1dXHJcbiAqL1xyXG52YXIgUGFyYW1ldHJpY1N1cmZhY2UgPSBHZW9tZXRyeS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5QYXJhbWV0cmljU3VyZmFjZSMgKi9cclxue1xyXG4gICAgZHluYW1pYzogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRvcjogbnVsbFxyXG5cclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5QYXJhbWV0cmljU3VyZmFjZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCBwYXJhbWV0cmljIHN1cmZhY2UgZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgYnVpbGQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZ2VuZXJhdG9yID0gdGhpcy5nZW5lcmF0b3I7XHJcblxyXG4gICAgICAgIGlmICghZ2VuZXJhdG9yIHx8ICFnZW5lcmF0b3IueCB8fCAhZ2VuZXJhdG9yLnkgfHwgIWdlbmVyYXRvci56KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBnZW5lcmF0b3InKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHhGdW5jID0gZ2VuZXJhdG9yLng7XHJcbiAgICAgICAgdmFyIHlGdW5jID0gZ2VuZXJhdG9yLnk7XHJcbiAgICAgICAgdmFyIHpGdW5jID0gZ2VuZXJhdG9yLno7XHJcbiAgICAgICAgdmFyIHVSYW5nZSA9IGdlbmVyYXRvci51IHx8IFswLCAxLCAwLjA1XTtcclxuICAgICAgICB2YXIgdlJhbmdlID0gZ2VuZXJhdG9yLnYgfHwgWzAsIDEsIDAuMDVdO1xyXG5cclxuICAgICAgICB2YXIgdU51bSA9IE1hdGguZmxvb3IoKHVSYW5nZVsxXSAtIHVSYW5nZVswXSArIHVSYW5nZVsyXSkgLyB1UmFuZ2VbMl0pO1xyXG4gICAgICAgIHZhciB2TnVtID0gTWF0aC5mbG9vcigodlJhbmdlWzFdIC0gdlJhbmdlWzBdICsgdlJhbmdlWzJdKSAvIHZSYW5nZVsyXSk7XHJcblxyXG4gICAgICAgIGlmICghaXNGaW5pdGUodU51bSkgfHwgIWlzRmluaXRlKHZOdW0pKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5maW5pdGUgZ2VuZXJhdG9yJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdmVydGV4TnVtID0gdU51bSAqIHZOdW07XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLmluaXQodmVydGV4TnVtKTtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMudGV4Y29vcmQwLmluaXQodmVydGV4TnVtKTtcclxuXHJcbiAgICAgICAgdmFyIHBvcyA9IFtdO1xyXG4gICAgICAgIHZhciB0ZXhjb29yZCA9IFtdO1xyXG4gICAgICAgIHZhciBuVmVydGV4ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZOdW07IGorKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVOdW07IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHUgPSBpICogdVJhbmdlWzJdICsgdVJhbmdlWzBdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHYgPSBqICogdlJhbmdlWzJdICsgdlJhbmdlWzBdO1xyXG4gICAgICAgICAgICAgICAgcG9zWzBdID0geEZ1bmModSwgdik7XHJcbiAgICAgICAgICAgICAgICBwb3NbMV0gPSB5RnVuYyh1LCB2KTtcclxuICAgICAgICAgICAgICAgIHBvc1syXSA9IHpGdW5jKHUsIHYpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRleGNvb3JkWzBdID0gaSAvICh1TnVtIC0gMSk7XHJcbiAgICAgICAgICAgICAgICB0ZXhjb29yZFsxXSA9IGogLyAodk51bSAtIDEpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbi5zZXQoblZlcnRleCwgcG9zKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy50ZXhjb29yZDAuc2V0KG5WZXJ0ZXgsIHRleGNvb3JkKTtcclxuICAgICAgICAgICAgICAgIG5WZXJ0ZXgrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIEluZGljZXNDdG9yID0gdmVydGV4TnVtID4gMHhmZmZmID8gVWludDMyQXJyYXkgOiBVaW50MTZBcnJheTtcclxuICAgICAgICB2YXIgbkluZGljZXMgPSAodU51bSAtIDEpICogKHZOdW0gLSAxKSAqIDY7XHJcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXMgPSBuZXcgSW5kaWNlc0N0b3IobkluZGljZXMpO1xyXG5cclxuICAgICAgICB2YXIgbiA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2TnVtIC0gMTsgaisrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdU51bSAtIDE7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGkyID0gaiAqIHVOdW0gKyBpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGkxID0gKGogKiB1TnVtICsgaSArIDEpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGk0ID0gKGogKyAxKSAqIHVOdW0gKyBpICsgMTtcclxuICAgICAgICAgICAgICAgIHZhciBpMyA9IChqICsgMSkgKiB1TnVtICsgaTtcclxuXHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMTtcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGkyO1xyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTQ7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTI7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMztcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGk0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdlbmVyYXRlVmVydGV4Tm9ybWFscygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQYXJhbWV0cmljU3VyZmFjZTtcclxuIiwiLyoqXHJcbiAqIEJhc2UgY2xhc3MgZm9yIGFsbCB0ZXh0dXJlcyBsaWtlIGNvbXByZXNzZWQgdGV4dHVyZSwgdGV4dHVyZTJkLCB0ZXh0dXJlY3ViZVxyXG4gKiBUT0RPIG1hcHBpbmdcclxuICovXHJcbmltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IENhY2hlIGZyb20gJy4vY29yZS9DYWNoZSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlRleHR1cmVcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBUZXh0dXJlID0gQmFzZS5leHRlbmQoIC8qKiBAbGVuZHMgY2xheS5UZXh0dXJlIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIFRleHR1cmUgd2lkdGgsIHJlYWRvbmx5IHdoZW4gdGhlIHRleHR1cmUgc291cmNlIGlzIGltYWdlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB3aWR0aDogNTEyLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0dXJlIGhlaWdodCwgcmVhZG9ubHkgd2hlbiB0aGUgdGV4dHVyZSBzb3VyY2UgaXMgaW1hZ2VcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodDogNTEyLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXhlbCBkYXRhIHR5cGUuXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlVOU0lHTkVEX0JZVEV9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkhBTEZfRkxPQVR9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkZMT0FUfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuVU5TSUdORURfSU5UfVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdHlwZTogZ2xlbnVtLlVOU0lHTkVEX0JZVEUsXHJcbiAgICAvKipcclxuICAgICAqIEZvcm1hdCBvZiB0ZXhlbCBkYXRhXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlJHQkF9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkRFUFRIX0NPTVBPTkVOVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuREVQVEhfU1RFTkNJTH1cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGZvcm1hdDogZ2xlbnVtLlJHQkEsXHJcbiAgICAvKipcclxuICAgICAqIFRleHR1cmUgd3JhcC4gRGVmYXVsdCB0byBiZSBSRVBFQVQuXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkNMQU1QX1RPX0VER0V9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlJFUEVBVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTUlSUk9SRURfUkVQRUFUfVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd3JhcFM6IGdsZW51bS5SRVBFQVQsXHJcbiAgICAvKipcclxuICAgICAqIFRleHR1cmUgd3JhcC4gRGVmYXVsdCB0byBiZSBSRVBFQVQuXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkNMQU1QX1RPX0VER0V9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlJFUEVBVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTUlSUk9SRURfUkVQRUFUfVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd3JhcFQ6IGdsZW51bS5SRVBFQVQsXHJcbiAgICAvKipcclxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTkVBUkVTVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTElORUFSfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5MSU5FQVJfTUlQTUFQX05FQVJFU1R9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLk5FQVJFU1RfTUlQTUFQX0xJTkVBUn1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTElORUFSX01JUE1BUF9MSU5FQVJ9XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBtaW5GaWx0ZXI6IGdsZW51bS5MSU5FQVJfTUlQTUFQX0xJTkVBUixcclxuICAgIC8qKlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ORUFSRVNUfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5MSU5FQVJ9XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBtYWdGaWx0ZXI6IGdsZW51bS5MSU5FQVIsXHJcbiAgICAvKipcclxuICAgICAqIElmIGVuYWJsZSBtaW1hcC5cclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICB1c2VNaXBtYXA6IHRydWUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbmlzb3Ryb3BpYyBmaWx0ZXJpbmcsIGVuYWJsZWQgaWYgdmFsdWUgaXMgbGFyZ2VyIHRoYW4gMVxyXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBhbmlzb3Ryb3BpYzogMSxcclxuICAgIC8vIHBpeGVsU3RvcmVpIHBhcmFtZXRlcnMsIG5vdCBhdmFpbGFibGUgd2hlbiB0ZXh0dXJlIGlzIHVzZWQgYXMgcmVuZGVyIHRhcmdldFxyXG4gICAgLy8gaHR0cDovL3d3dy5raHJvbm9zLm9yZy9vcGVuZ2xlcy9zZGsvZG9jcy9tYW4veGh0bWwvZ2xQaXhlbFN0b3JlaS54bWxcclxuICAgIC8qKlxyXG4gICAgICogSWYgZmxpcCBpbiB5IGF4aXMgZm9yIGdpdmVuIGltYWdlIHNvdXJjZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgKi9cclxuICAgIGZsaXBZOiB0cnVlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBmbGFnIHRvIGluZGljYXRlIGlmIHRleHR1cmUgc291cmNlIGlzIHNSR0JcclxuICAgICAqL1xyXG4gICAgc1JHQjogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDRcclxuICAgICAqL1xyXG4gICAgdW5wYWNrQWxpZ25tZW50OiA0LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgKi9cclxuICAgIHByZW11bHRpcGx5QWxwaGE6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHluYW1pYyBvcHRpb24gZm9yIHRleHR1cmUgbGlrZSB2aWRlb1xyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG5cclxuICAgIE5QT1Q6IGZhbHNlLFxyXG5cclxuICAgIC8vIFBFTkRJTkdcclxuICAgIC8vIEluaXQgaXQgaGVyZSB0byBhdm9pZCBkZW9wdGltaXphdGlvbiB3aGVuIGl0J3MgYXNzaWduZWQgaW4gYXBwbGljYXRpb24gZHluYW1pY2FsbHlcclxuICAgIF9fdXNlZDogMFxyXG5cclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fY2FjaGUgPSBuZXcgQ2FjaGUoKTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LlRleHR1cmUucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICBnZXRXZWJHTFRleHR1cmU6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcblxyXG4gICAgICAgIGlmIChjYWNoZS5taXNzKCd3ZWJnbF90ZXh0dXJlJykpIHtcclxuICAgICAgICAgICAgLy8gSW4gYSBuZXcgZ2wgY29udGV4dCwgY3JlYXRlIG5ldyB0ZXh0dXJlIGFuZCBzZXQgZGlydHkgdHJ1ZVxyXG4gICAgICAgICAgICBjYWNoZS5wdXQoJ3dlYmdsX3RleHR1cmUnLCBfZ2wuY3JlYXRlVGV4dHVyZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZHluYW1pYykge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZShyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNhY2hlLmlzRGlydHkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZShyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIGNhY2hlLmZyZXNoKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGJpbmQ6IGZ1bmN0aW9uICgpIHt9LFxyXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAoKSB7fSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmsgdGV4dHVyZSBpcyBkaXJ0eSBhbmQgdXBkYXRlIGluIHRoZSBuZXh0IGZyYW1lXHJcbiAgICAgKi9cclxuICAgIGRpcnR5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NhY2hlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlLmRpcnR5QWxsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChyZW5kZXJlcikge30sXHJcblxyXG4gICAgLy8gVXBkYXRlIHRoZSBjb21tb24gcGFyYW1ldGVycyBvZiB0ZXh0dXJlXHJcbiAgICB1cGRhdGVDb21tb246IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19GTElQX1lfV0VCR0wsIHRoaXMuZmxpcFkpO1xyXG4gICAgICAgIF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xyXG4gICAgICAgIF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX0FMSUdOTUVOVCwgdGhpcy51bnBhY2tBbGlnbm1lbnQpO1xyXG5cclxuICAgICAgICAvLyBVc2Ugb2Ygbm9uZS1wb3dlciBvZiB0d28gdGV4dHVyZVxyXG4gICAgICAgIC8vIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvd2ViZ2wvd2lraS9XZWJHTF9hbmRfT3BlbkdMX0RpZmZlcmVuY2VzXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ID09PSBnbGVudW0uREVQVEhfQ09NUE9ORU5UKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlTWlwbWFwID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc1JHQkV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfc1JHQicpO1xyXG4gICAgICAgIC8vIEZhbGxiYWNrXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ID09PSBUZXh0dXJlLlNSR0IgJiYgIXNSR0JFeHQpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSBUZXh0dXJlLlJHQjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ID09PSBUZXh0dXJlLlNSR0JfQUxQSEEgJiYgIXNSR0JFeHQpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSBUZXh0dXJlLlJHQkE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLk5QT1QgPSAhdGhpcy5pc1Bvd2VyT2ZUd28oKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0QXZhaWxhYmxlV3JhcFM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5OUE9UKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBnbGVudW0uQ0xBTVBfVE9fRURHRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud3JhcFM7XHJcbiAgICB9LFxyXG4gICAgZ2V0QXZhaWxhYmxlV3JhcFQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5OUE9UKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBnbGVudW0uQ0xBTVBfVE9fRURHRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud3JhcFQ7XHJcbiAgICB9LFxyXG4gICAgZ2V0QXZhaWxhYmxlTWluRmlsdGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG1pbkZpbHRlciA9IHRoaXMubWluRmlsdGVyO1xyXG4gICAgICAgIGlmICh0aGlzLk5QT1QgfHwgIXRoaXMudXNlTWlwbWFwKSB7XHJcbiAgICAgICAgICAgIGlmIChtaW5GaWx0ZXIgPT09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUIHx8XHJcbiAgICAgICAgICAgICAgICBtaW5GaWx0ZXIgPT09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9MSU5FQVJcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2xlbnVtLk5FQVJFU1Q7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobWluRmlsdGVyID09PSBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVIgfHxcclxuICAgICAgICAgICAgICAgIG1pbkZpbHRlciA9PT0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTkVBUkVTVFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBnbGVudW0uTElORUFSO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1pbkZpbHRlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1pbkZpbHRlcjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZ2V0QXZhaWxhYmxlTWFnRmlsdGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFnRmlsdGVyO1xyXG4gICAgfSxcclxuXHJcbiAgICBuZXh0SGlnaGVzdFBvd2VyT2ZUd286IGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgLS14O1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgMzI7IGkgPDw9IDEpIHtcclxuICAgICAgICAgICAgeCA9IHggfCB4ID4+IGk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB4ICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG5cclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuXHJcbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG5cclxuICAgICAgICB2YXIgd2ViZ2xUZXh0dXJlID0gY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJyk7XHJcbiAgICAgICAgaWYgKHdlYmdsVGV4dHVyZSl7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLmdsLmRlbGV0ZVRleHR1cmUod2ViZ2xUZXh0dXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FjaGUuZGVsZXRlQ29udGV4dChyZW5kZXJlci5fX3VpZF9fKTtcclxuXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXN0IGlmIGltYWdlIG9mIHRleHR1cmUgaXMgdmFsaWQgYW5kIGxvYWRlZC5cclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzUmVuZGVyYWJsZTogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXN0IGlmIHRleHR1cmUgc2l6ZSBpcyBwb3dlciBvZiB0d29cclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzUG93ZXJPZlR3bzogZnVuY3Rpb24gKCkge31cclxufSk7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZS5wcm90b3R5cGUsICd3aWR0aCcsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XHJcbiAgICB9XHJcbn0pO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZS5wcm90b3R5cGUsICdoZWlnaHQnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyogRGF0YVR5cGUgKi9cclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5CWVRFID0gZ2xlbnVtLkJZVEU7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5VTlNJR05FRF9CWVRFID0gZ2xlbnVtLlVOU0lHTkVEX0JZVEU7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5TSE9SVCA9IGdsZW51bS5TSE9SVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlVOU0lHTkVEX1NIT1JUID0gZ2xlbnVtLlVOU0lHTkVEX1NIT1JUO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuSU5UID0gZ2xlbnVtLklOVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlVOU0lHTkVEX0lOVCA9IGdsZW51bS5VTlNJR05FRF9JTlQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5GTE9BVCA9IGdsZW51bS5GTE9BVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkhBTEZfRkxPQVQgPSAweDhENjE7XHJcblxyXG4vKipcclxuICogVU5TSUdORURfSU5UXzI0XzhfV0VCR0wgZm9yIFdFQkdMX2RlcHRoX3RleHR1cmUgZXh0ZW5zaW9uXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMID0gMzQwNDI7XHJcblxyXG4vKiBQaXhlbEZvcm1hdCAqL1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuREVQVEhfQ09NUE9ORU5UID0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkRFUFRIX1NURU5DSUwgPSBnbGVudW0uREVQVEhfU1RFTkNJTDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkFMUEhBID0gZ2xlbnVtLkFMUEhBO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuUkdCID0gZ2xlbnVtLlJHQjtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlJHQkEgPSBnbGVudW0uUkdCQTtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkxVTUlOQU5DRSA9IGdsZW51bS5MVU1JTkFOQ0U7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5MVU1JTkFOQ0VfQUxQSEEgPSBnbGVudW0uTFVNSU5BTkNFX0FMUEhBO1xyXG5cclxuLyoqXHJcbiAqIEBzZWUgaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvZXh0ZW5zaW9ucy9FWFRfc1JHQi9cclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuU1JHQiA9IDB4OEM0MDtcclxuLyoqXHJcbiAqIEBzZWUgaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvZXh0ZW5zaW9ucy9FWFRfc1JHQi9cclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuU1JHQl9BTFBIQSA9IDB4OEM0MjtcclxuXHJcbi8qIENvbXByZXNzZWQgVGV4dHVyZSAqL1xyXG5UZXh0dXJlLkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgPSAweDgzRjA7XHJcblRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQgPSAweDgzRjE7XHJcblRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQgPSAweDgzRjI7XHJcblRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQgPSAweDgzRjM7XHJcblxyXG4vKiBUZXh0dXJlTWFnRmlsdGVyICovXHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5ORUFSRVNUID0gZ2xlbnVtLk5FQVJFU1Q7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5MSU5FQVIgPSBnbGVudW0uTElORUFSO1xyXG5cclxuLyogVGV4dHVyZU1pbkZpbHRlciAqL1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCA9IGdsZW51bS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTElORUFSX01JUE1BUF9ORUFSRVNUID0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTkVBUkVTVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLk5FQVJFU1RfTUlQTUFQX0xJTkVBUiA9IGdsZW51bS5ORUFSRVNUX01JUE1BUF9MSU5FQVI7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5MSU5FQVJfTUlQTUFQX0xJTkVBUiA9IGdsZW51bS5MSU5FQVJfTUlQTUFQX0xJTkVBUjtcclxuXHJcbi8qIFRleHR1cmVXcmFwTW9kZSAqL1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuUkVQRUFUID0gZ2xlbnVtLlJFUEVBVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkNMQU1QX1RPX0VER0UgPSBnbGVudW0uQ0xBTVBfVE9fRURHRTtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLk1JUlJPUkVEX1JFUEVBVCA9IGdsZW51bS5NSVJST1JFRF9SRVBFQVQ7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZTtcclxuIiwidmFyIG1hdGhVdGlsID0ge307XHJcblxyXG5tYXRoVXRpbC5pc1Bvd2VyT2ZUd28gPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHJldHVybiAodmFsdWUgJiAodmFsdWUgLSAxKSkgPT09IDA7XHJcbn07XHJcblxyXG5tYXRoVXRpbC5uZXh0UG93ZXJPZlR3byA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgdmFsdWUgLS07XHJcbiAgICB2YWx1ZSB8PSB2YWx1ZSA+PiAxO1xyXG4gICAgdmFsdWUgfD0gdmFsdWUgPj4gMjtcclxuICAgIHZhbHVlIHw9IHZhbHVlID4+IDQ7XHJcbiAgICB2YWx1ZSB8PSB2YWx1ZSA+PiA4O1xyXG4gICAgdmFsdWUgfD0gdmFsdWUgPj4gMTY7XHJcbiAgICB2YWx1ZSArKztcclxuXHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn07XHJcblxyXG5tYXRoVXRpbC5uZWFyZXN0UG93ZXJPZlR3byA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIE1hdGgucG93KCAyLCBNYXRoLnJvdW5kKCBNYXRoLmxvZyggdmFsdWUgKSAvIE1hdGguTE4yICkgKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG1hdGhVdGlsO1xyXG4iLCJpbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgbWF0aFV0aWwgZnJvbSAnLi9tYXRoL3V0aWwnO1xyXG52YXIgaXNQb3dlck9mVHdvID0gbWF0aFV0aWwuaXNQb3dlck9mVHdvO1xyXG5cclxuZnVuY3Rpb24gbmVhcmVzdFBvd2VyT2ZUd28odmFsKSB7XHJcbiAgICByZXR1cm4gTWF0aC5wb3coMiwgTWF0aC5yb3VuZChNYXRoLmxvZyh2YWwpIC8gTWF0aC5MTjIpKTtcclxufVxyXG5mdW5jdGlvbiBjb252ZXJ0VGV4dHVyZVRvUG93ZXJPZlR3byh0ZXh0dXJlLCBjYW52YXMpIHtcclxuICAgIC8vIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciB3aWR0aCA9IG5lYXJlc3RQb3dlck9mVHdvKHRleHR1cmUud2lkdGgpO1xyXG4gICAgdmFyIGhlaWdodCA9IG5lYXJlc3RQb3dlck9mVHdvKHRleHR1cmUuaGVpZ2h0KTtcclxuICAgIGNhbnZhcyA9IGNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcclxuICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGN0eC5kcmF3SW1hZ2UodGV4dHVyZS5pbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgcmV0dXJuIGNhbnZhcztcclxufVxyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlRleHR1cmUyRFxyXG4gKiBAZXh0ZW5kcyBjbGF5LlRleHR1cmVcclxuICpcclxuICogQGV4YW1wbGVcclxuICogICAgIC4uLlxyXG4gKiAgICAgdmFyIG1hdCA9IG5ldyBjbGF5Lk1hdGVyaWFsKHtcclxuICogICAgICAgICBzaGFkZXI6IGNsYXkuc2hhZGVyLmxpYnJhcnkuZ2V0KCdjbGF5LnBob25nJywgJ2RpZmZ1c2VNYXAnKVxyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgZGlmZnVzZU1hcCA9IG5ldyBjbGF5LlRleHR1cmUyRCgpO1xyXG4gKiAgICAgZGlmZnVzZU1hcC5sb2FkKCdhc3NldHMvdGV4dHVyZXMvZGlmZnVzZS5qcGcnKTtcclxuICogICAgIG1hdC5zZXQoJ2RpZmZ1c2VNYXAnLCBkaWZmdXNlTWFwKTtcclxuICogICAgIC4uLlxyXG4gKiAgICAgZGlmZnVzZU1hcC5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICogICAgICAgICAvLyBXYWl0IGZvciB0aGUgZGlmZnVzZSB0ZXh0dXJlIGxvYWRlZFxyXG4gKiAgICAgICAgIGFuaW1hdGlvbi5vbignZnJhbWUnLCBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcbiAqICAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTtcclxuICogICAgICAgICB9KTtcclxuICogICAgIH0pO1xyXG4gKi9cclxudmFyIFRleHR1cmUyRCA9IFRleHR1cmUuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuVGV4dHVyZTJEIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUgez9IVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtbmV0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIC8vIFRPRE8gbWFyayBkaXJ0eSB3aGVuIGFzc2lnbmVkLlxyXG4gICAgICAgIGltYWdlOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFBpeGVscyBkYXRhLiBXaWxsIGJlIGlnbm9yZWQgaWYgaW1hZ2UgaXMgc2V0LlxyXG4gICAgICAgICAqIEB0eXBlIHs/VWludDhBcnJheXxGbG9hdDMyQXJyYXl9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcGl4ZWxzOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48T2JqZWN0Pn1cclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqICAgICBbe1xyXG4gICAgICAgICAqICAgICAgICAgaW1hZ2U6IG1pcG1hcDAsXHJcbiAgICAgICAgICogICAgICAgICBwaXhlbHM6IG51bGxcclxuICAgICAgICAgKiAgICAgfSwge1xyXG4gICAgICAgICAqICAgICAgICAgaW1hZ2U6IG1pcG1hcDEsXHJcbiAgICAgICAgICogICAgICAgICBwaXhlbHM6IG51bGxcclxuICAgICAgICAgKiAgICAgfSwgLi4uLl1cclxuICAgICAgICAgKi9cclxuICAgICAgICBtaXBtYXBzOiBbXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgY29udmVydCB0ZXh0dXJlIHRvIHBvd2VyLW9mLXR3b1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnZlcnRUb1BPVDogZmFsc2VcclxuICAgIH07XHJcbn0sIHtcclxuXHJcbiAgICB0ZXh0dXJlVHlwZTogJ3RleHR1cmUyRCcsXHJcblxyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV8yRCwgdGhpcy5fY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJykpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUNvbW1vbihyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHZhciBnbEZvcm1hdCA9IHRoaXMuZm9ybWF0O1xyXG4gICAgICAgIHZhciBnbFR5cGUgPSB0aGlzLnR5cGU7XHJcblxyXG4gICAgICAgIC8vIENvbnZlcnQgdG8gcG90IGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gdXNpbmcgaW1hZ2UvY2FudmFzL3ZpZGVvIGVsZW1lbnQuXHJcbiAgICAgICAgdmFyIGNvbnZlcnRUb1BPVCA9ICEhKHRoaXMuY29udmVydFRvUE9UXHJcbiAgICAgICAgICAgICYmICF0aGlzLm1pcG1hcHMubGVuZ3RoICYmIHRoaXMuaW1hZ2VcclxuICAgICAgICAgICAgJiYgKHRoaXMud3JhcFMgPT09IFRleHR1cmUuUkVQRUFUIHx8IHRoaXMud3JhcFQgPT09IFRleHR1cmUuUkVQRUFUKVxyXG4gICAgICAgICAgICAmJiB0aGlzLk5QT1RcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV8yRCwgX2dsLlRFWFRVUkVfV1JBUF9TLCBjb252ZXJ0VG9QT1QgPyB0aGlzLndyYXBTIDogdGhpcy5nZXRBdmFpbGFibGVXcmFwUygpKTtcclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV8yRCwgX2dsLlRFWFRVUkVfV1JBUF9ULCBjb252ZXJ0VG9QT1QgPyB0aGlzLndyYXBUIDogdGhpcy5nZXRBdmFpbGFibGVXcmFwVCgpKTtcclxuXHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfMkQsIF9nbC5URVhUVVJFX01BR19GSUxURVIsIGNvbnZlcnRUb1BPVCA/IHRoaXMubWFnRmlsdGVyIDogdGhpcy5nZXRBdmFpbGFibGVNYWdGaWx0ZXIoKSk7XHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfMkQsIF9nbC5URVhUVVJFX01JTl9GSUxURVIsIGNvbnZlcnRUb1BPVCA/IHRoaXMubWluRmlsdGVyIDogdGhpcy5nZXRBdmFpbGFibGVNaW5GaWx0ZXIoKSk7XHJcblxyXG4gICAgICAgIHZhciBhbmlzb3Ryb3BpY0V4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKTtcclxuICAgICAgICBpZiAoYW5pc290cm9waWNFeHQgJiYgdGhpcy5hbmlzb3Ryb3BpYyA+IDEpIHtcclxuICAgICAgICAgICAgX2dsLnRleFBhcmFtZXRlcmYoX2dsLlRFWFRVUkVfMkQsIGFuaXNvdHJvcGljRXh0LlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULCB0aGlzLmFuaXNvdHJvcGljKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIGZsb2F0IHR5cGUgaWYgYnJvd3NlciBkb24ndCBoYXZlIGhhbGYgZmxvYXQgZXh0ZW5zaW9uXHJcbiAgICAgICAgaWYgKGdsVHlwZSA9PT0gMzYxOTMpIHtcclxuICAgICAgICAgICAgdmFyIGhhbGZGbG9hdEV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Jyk7XHJcbiAgICAgICAgICAgIGlmICghaGFsZkZsb2F0RXh0KSB7XHJcbiAgICAgICAgICAgICAgICBnbFR5cGUgPSBnbGVudW0uRkxPQVQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1pcG1hcHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1pcG1hcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBtaXBtYXAgPSB0aGlzLm1pcG1hcHNbaV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVUZXh0dXJlRGF0YShfZ2wsIG1pcG1hcCwgaSwgd2lkdGgsIGhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgd2lkdGggLz0gMjtcclxuICAgICAgICAgICAgICAgIGhlaWdodCAvPSAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVUZXh0dXJlRGF0YShfZ2wsIHRoaXMsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlLCBjb252ZXJ0VG9QT1QpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMudXNlTWlwbWFwICYmICghdGhpcy5OUE9UIHx8IGNvbnZlcnRUb1BPVCkpIHtcclxuICAgICAgICAgICAgICAgIF9nbC5nZW5lcmF0ZU1pcG1hcChfZ2wuVEVYVFVSRV8yRCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVUZXh0dXJlRGF0YTogZnVuY3Rpb24gKF9nbCwgZGF0YSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIGNvbnZlcnRUb1BPVCkge1xyXG4gICAgICAgIGlmIChkYXRhLmltYWdlKSB7XHJcbiAgICAgICAgICAgIHZhciBpbWdEYXRhID0gZGF0YS5pbWFnZTtcclxuICAgICAgICAgICAgaWYgKGNvbnZlcnRUb1BPVCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcG90Q2FudmFzID0gY29udmVydFRleHR1cmVUb1Bvd2VyT2ZUd28odGhpcywgdGhpcy5fcG90Q2FudmFzKTtcclxuICAgICAgICAgICAgICAgIGltZ0RhdGEgPSB0aGlzLl9wb3RDYW52YXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgX2dsLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfMkQsIGxldmVsLCBnbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1nRGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBDYW4gYmUgdXNlZCBhcyBhIGJsYW5rIHRleHR1cmUgd2hlbiB3cml0aW5nIHJlbmRlciB0byB0ZXh0dXJlKFJUVClcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgZ2xGb3JtYXQgPD0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVFxyXG4gICAgICAgICAgICAgICAgJiYgZ2xGb3JtYXQgPj0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgX2dsLmNvbXByZXNzZWRUZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgZ2xGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGRhdGEucGl4ZWxzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIElzIGEgcmVuZGVyIHRhcmdldCBpZiBwaXhlbHMgaXMgbnVsbFxyXG4gICAgICAgICAgICAgICAgX2dsLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfMkQsIGxldmVsLCBnbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgZGF0YS5waXhlbHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5UZXh0dXJlMkQucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlTWlwbWFwOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlTWlwbWFwICYmICF0aGlzLk5QT1QpIHtcclxuICAgICAgICAgICAgX2dsLmJpbmRUZXh0dXJlKF9nbC5URVhUVVJFXzJELCB0aGlzLl9jYWNoZS5nZXQoJ3dlYmdsX3RleHR1cmUnKSk7XHJcbiAgICAgICAgICAgIF9nbC5nZW5lcmF0ZU1pcG1hcChfZ2wuVEVYVFVSRV8yRCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gaXNQb3dlck9mVHdvKHRoaXMud2lkdGgpICYmIGlzUG93ZXJPZlR3byh0aGlzLmhlaWdodCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGlzUmVuZGVyYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlLndpZHRoID4gMCAmJiB0aGlzLmltYWdlLmhlaWdodCA+IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gISEodGhpcy53aWR0aCAmJiB0aGlzLmhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBiaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICByZW5kZXJlci5nbC5iaW5kVGV4dHVyZShyZW5kZXJlci5nbC5URVhUVVJFXzJELCB0aGlzLmdldFdlYkdMVGV4dHVyZShyZW5kZXJlcikpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1bmJpbmQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHJlbmRlcmVyLmdsLmJpbmRUZXh0dXJlKHJlbmRlcmVyLmdsLlRFWFRVUkVfMkQsIG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICBsb2FkOiBmdW5jdGlvbiAoc3JjLCBjcm9zc09yaWdpbikge1xyXG4gICAgICAgIHZhciBpbWFnZSA9IHZlbmRvci5jcmVhdGVJbWFnZSgpO1xyXG4gICAgICAgIGlmIChjcm9zc09yaWdpbikge1xyXG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9IGNyb3NzT3JpZ2luO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLmRpcnR5KCk7XHJcbiAgICAgICAgICAgIHNlbGYudHJpZ2dlcignc3VjY2VzcycsIHNlbGYpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaW1hZ2Uub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdlcnJvcicsIHNlbGYpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGltYWdlLnNyYyA9IHNyYztcclxuICAgICAgICB0aGlzLmltYWdlID0gaW1hZ2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZXh0dXJlMkQucHJvdG90eXBlLCAnd2lkdGgnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZS53aWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUZXh0dXJlIGZyb20gaW1hZ2UgY2FuXFwndCBzZXQgd2lkdGgnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl93aWR0aCAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZXh0dXJlMkQucHJvdG90eXBlLCAnaGVpZ2h0Jywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2UuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUZXh0dXJlIGZyb20gaW1hZ2UgY2FuXFwndCBzZXQgaGVpZ2h0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faGVpZ2h0ICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlMkQ7XHJcbiIsImltcG9ydCBUZXh0dXJlIGZyb20gJy4vVGV4dHVyZSc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4vY29yZS91dGlsJztcclxuaW1wb3J0IG1hdGhVdGlsIGZyb20gJy4vbWF0aC91dGlsJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxudmFyIGlzUG93ZXJPZlR3byA9IG1hdGhVdGlsLmlzUG93ZXJPZlR3bztcclxuXHJcbnZhciB0YXJnZXRMaXN0ID0gWydweCcsICdueCcsICdweScsICdueScsICdweicsICdueiddO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlRleHR1cmVDdWJlXHJcbiAqIEBleHRlbmRzIGNsYXkuVGV4dHVyZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgLi4uXHJcbiAqICAgICB2YXIgbWF0ID0gbmV3IGNsYXkuTWF0ZXJpYWwoe1xyXG4gKiAgICAgICAgIHNoYWRlcjogY2xheS5zaGFkZXIubGlicmFyeS5nZXQoJ2NsYXkucGhvbmcnLCAnZW52aXJvbm1lbnRNYXAnKVxyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgZW52TWFwID0gbmV3IGNsYXkuVGV4dHVyZUN1YmUoKTtcclxuICogICAgIGVudk1hcC5sb2FkKHtcclxuICogICAgICAgICAncHgnOiAnYXNzZXRzL3RleHR1cmVzL3NreS9weC5qcGcnLFxyXG4gKiAgICAgICAgICdueCc6ICdhc3NldHMvdGV4dHVyZXMvc2t5L254LmpwZydcclxuICogICAgICAgICAncHknOiAnYXNzZXRzL3RleHR1cmVzL3NreS9weS5qcGcnXHJcbiAqICAgICAgICAgJ255JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvbnkuanBnJ1xyXG4gKiAgICAgICAgICdweic6ICdhc3NldHMvdGV4dHVyZXMvc2t5L3B6LmpwZydcclxuICogICAgICAgICAnbnonOiAnYXNzZXRzL3RleHR1cmVzL3NreS9uei5qcGcnXHJcbiAqICAgICB9KTtcclxuICogICAgIG1hdC5zZXQoJ2Vudmlyb25tZW50TWFwJywgZW52TWFwKTtcclxuICogICAgIC4uLlxyXG4gKiAgICAgZW52TWFwLnN1Y2Nlc3MoZnVuY3Rpb24gKCkge1xyXG4gKiAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBza3kgdGV4dHVyZSBsb2FkZWRcclxuICogICAgICAgICBhbmltYXRpb24ub24oJ2ZyYW1lJywgZnVuY3Rpb24gKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAqICAgICAgICAgfSk7XHJcbiAqICAgICB9KTtcclxuICovXHJcbnZhciBUZXh0dXJlQ3ViZSA9IFRleHR1cmUuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuVGV4dHVyZUN1YmUjICove1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIC8vIFBFTkRJTkcgY3ViZW1hcCBzaG91bGQgbm90IGZsaXBZIGluIGRlZmF1bHQuXHJcbiAgICAgICAgLy8gZmxpcFk6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1uZXR9IHB4XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gbnhcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9IVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtbmV0fSBweVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1uZXR9IG55XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gcHpcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9IVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtbmV0fSBuelxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGltYWdlOiB7XHJcbiAgICAgICAgICAgIHB4OiBudWxsLFxyXG4gICAgICAgICAgICBueDogbnVsbCxcclxuICAgICAgICAgICAgcHk6IG51bGwsXHJcbiAgICAgICAgICAgIG55OiBudWxsLFxyXG4gICAgICAgICAgICBwejogbnVsbCxcclxuICAgICAgICAgICAgbno6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFBpeGVscyBkYXRhIG9mIGVhY2ggc2lkZS4gV2lsbCBiZSBpZ25vcmVkIGlmIGltYWdlcyBhcmUgc2V0LlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/VWludDhBcnJheX0gcHhcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBueFxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P1VpbnQ4QXJyYXl9IHB5XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/VWludDhBcnJheX0gbnlcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBwelxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P1VpbnQ4QXJyYXl9IG56XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcGl4ZWxzOiB7XHJcbiAgICAgICAgICAgIHB4OiBudWxsLFxyXG4gICAgICAgICAgICBueDogbnVsbCxcclxuICAgICAgICAgICAgcHk6IG51bGwsXHJcbiAgICAgICAgICAgIG55OiBudWxsLFxyXG4gICAgICAgICAgICBwejogbnVsbCxcclxuICAgICAgICAgICAgbno6IG51bGxcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPE9iamVjdD59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWlwbWFwczogW11cclxuICAgIH07XHJcbn0sIHtcclxuXHJcbiAgICB0ZXh0dXJlVHlwZTogJ3RleHR1cmVDdWJlJyxcclxuXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIHRoaXMuX2NhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVDb21tb24ocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB2YXIgZ2xGb3JtYXQgPSB0aGlzLmZvcm1hdDtcclxuICAgICAgICB2YXIgZ2xUeXBlID0gdGhpcy50eXBlO1xyXG5cclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgX2dsLlRFWFRVUkVfV1JBUF9TLCB0aGlzLmdldEF2YWlsYWJsZVdyYXBTKCkpO1xyXG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFX0NVQkVfTUFQLCBfZ2wuVEVYVFVSRV9XUkFQX1QsIHRoaXMuZ2V0QXZhaWxhYmxlV3JhcFQoKSk7XHJcblxyXG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFX0NVQkVfTUFQLCBfZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCB0aGlzLmdldEF2YWlsYWJsZU1hZ0ZpbHRlcigpKTtcclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgX2dsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgdGhpcy5nZXRBdmFpbGFibGVNaW5GaWx0ZXIoKSk7XHJcblxyXG4gICAgICAgIHZhciBhbmlzb3Ryb3BpY0V4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKTtcclxuICAgICAgICBpZiAoYW5pc290cm9waWNFeHQgJiYgdGhpcy5hbmlzb3Ryb3BpYyA+IDEpIHtcclxuICAgICAgICAgICAgX2dsLnRleFBhcmFtZXRlcmYoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIGFuaXNvdHJvcGljRXh0LlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULCB0aGlzLmFuaXNvdHJvcGljKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIGZsb2F0IHR5cGUgaWYgYnJvd3NlciBkb24ndCBoYXZlIGhhbGYgZmxvYXQgZXh0ZW5zaW9uXHJcbiAgICAgICAgaWYgKGdsVHlwZSA9PT0gMzYxOTMpIHtcclxuICAgICAgICAgICAgdmFyIGhhbGZGbG9hdEV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Jyk7XHJcbiAgICAgICAgICAgIGlmICghaGFsZkZsb2F0RXh0KSB7XHJcbiAgICAgICAgICAgICAgICBnbFR5cGUgPSBnbGVudW0uRkxPQVQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1pcG1hcHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1pcG1hcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBtaXBtYXAgPSB0aGlzLm1pcG1hcHNbaV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVUZXh0dXJlRGF0YShfZ2wsIG1pcG1hcCwgaSwgd2lkdGgsIGhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSk7XHJcbiAgICAgICAgICAgICAgICB3aWR0aCAvPSAyO1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0IC89IDI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVRleHR1cmVEYXRhKF9nbCwgdGhpcywgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLk5QT1QgJiYgdGhpcy51c2VNaXBtYXApIHtcclxuICAgICAgICAgICAgICAgIF9nbC5nZW5lcmF0ZU1pcG1hcChfZ2wuVEVYVFVSRV9DVUJFX01BUCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgbnVsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVUZXh0dXJlRGF0YTogZnVuY3Rpb24gKF9nbCwgZGF0YSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGFyZ2V0TGlzdFtpXTtcclxuICAgICAgICAgICAgdmFyIGltZyA9IGRhdGEuaW1hZ2UgJiYgZGF0YS5pbWFnZVt0YXJnZXRdO1xyXG4gICAgICAgICAgICBpZiAoaW1nKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wudGV4SW1hZ2UyRChfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSwgbGV2ZWwsIGdsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgX2dsLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIGxldmVsLCBnbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgZGF0YS5waXhlbHMgJiYgZGF0YS5waXhlbHNbdGFyZ2V0XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlRleHR1cmVDdWJlLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZU1pcG1hcDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIGlmICh0aGlzLnVzZU1pcG1hcCAmJiAhdGhpcy5OUE9UKSB7XHJcbiAgICAgICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGhpcy5fY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJykpO1xyXG4gICAgICAgICAgICBfZ2wuZ2VuZXJhdGVNaXBtYXAoX2dsLlRFWFRVUkVfQ1VCRV9NQVApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuZ2wuYmluZFRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGhpcy5nZXRXZWJHTFRleHR1cmUocmVuZGVyZXIpKTtcclxuICAgIH0sXHJcblxyXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICByZW5kZXJlci5nbC5iaW5kVGV4dHVyZShyZW5kZXJlci5nbC5URVhUVVJFX0NVQkVfTUFQLCBudWxsKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gT3ZlcndyaXRlIHRoZSBpc1Bvd2VyT2ZUd28gbWV0aG9kXHJcbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXNQb3dlck9mVHdvKHRoaXMuaW1hZ2UucHgud2lkdGgpXHJcbiAgICAgICAgICAgICAgICAmJiBpc1Bvd2VyT2ZUd28odGhpcy5pbWFnZS5weC5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzUG93ZXJPZlR3byh0aGlzLndpZHRoKVxyXG4gICAgICAgICAgICAgICAgJiYgaXNQb3dlck9mVHdvKHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGlzUmVuZGVyYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlLnB4KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpc0ltYWdlUmVuZGVyYWJsZSh0aGlzLmltYWdlLnB4KVxyXG4gICAgICAgICAgICAgICAgJiYgaXNJbWFnZVJlbmRlcmFibGUodGhpcy5pbWFnZS5ueClcclxuICAgICAgICAgICAgICAgICYmIGlzSW1hZ2VSZW5kZXJhYmxlKHRoaXMuaW1hZ2UucHkpXHJcbiAgICAgICAgICAgICAgICAmJiBpc0ltYWdlUmVuZGVyYWJsZSh0aGlzLmltYWdlLm55KVxyXG4gICAgICAgICAgICAgICAgJiYgaXNJbWFnZVJlbmRlcmFibGUodGhpcy5pbWFnZS5weilcclxuICAgICAgICAgICAgICAgICYmIGlzSW1hZ2VSZW5kZXJhYmxlKHRoaXMuaW1hZ2UubnopO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICEhKHRoaXMud2lkdGggJiYgdGhpcy5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgbG9hZDogZnVuY3Rpb24gKGltYWdlTGlzdCwgY3Jvc3NPcmlnaW4pIHtcclxuICAgICAgICB2YXIgbG9hZGluZyA9IDA7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHV0aWwuZWFjaChpbWFnZUxpc3QsIGZ1bmN0aW9uIChzcmMsIHRhcmdldCl7XHJcbiAgICAgICAgICAgIHZhciBpbWFnZSA9IHZlbmRvci5jcmVhdGVJbWFnZSgpO1xyXG4gICAgICAgICAgICBpZiAoY3Jvc3NPcmlnaW4pIHtcclxuICAgICAgICAgICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgbG9hZGluZyAtLTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2FkaW5nID09PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmRpcnR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdzdWNjZXNzJywgc2VsZik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGltYWdlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nIC0tO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgbG9hZGluZysrO1xyXG4gICAgICAgICAgICBpbWFnZS5zcmMgPSBzcmM7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VbdGFyZ2V0XSA9IGltYWdlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxufSk7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZUN1YmUucHJvdG90eXBlLCAnd2lkdGgnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZSAmJiB0aGlzLmltYWdlLnB4KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlLnB4LndpZHRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XHJcbiAgICB9LFxyXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZSAmJiB0aGlzLmltYWdlLnB4KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGV4dHVyZSBmcm9tIGltYWdlIGNhblxcJ3Qgc2V0IHdpZHRoJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fd2lkdGggIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZUN1YmUucHJvdG90eXBlLCAnaGVpZ2h0Jywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UgJiYgdGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZS5weC5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XHJcbiAgICB9LFxyXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZSAmJiB0aGlzLmltYWdlLnB4KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGV4dHVyZSBmcm9tIGltYWdlIGNhblxcJ3Qgc2V0IGhlaWdodCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2hlaWdodCAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5mdW5jdGlvbiBpc0ltYWdlUmVuZGVyYWJsZShpbWFnZSkge1xyXG4gICAgcmV0dXJuIGltYWdlLndpZHRoID4gMCAmJiBpbWFnZS5oZWlnaHQgPiAwO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlQ3ViZTtcclxuIiwiaW1wb3J0IE5vZGUgZnJvbSAnLi9Ob2RlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuUmVuZGVyYWJsZVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lk5vZGVcclxuICovXHJcbnZhciBSZW5kZXJhYmxlID0gTm9kZS5leHRlbmQoLyoqIEBsZW5kcyBjbGF5LlJlbmRlcmFibGUjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuTWF0ZXJpYWx9XHJcbiAgICAgKi9cclxuICAgIG1hdGVyaWFsOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuR2VvbWV0cnl9XHJcbiAgICAgKi9cclxuICAgIGdlb21ldHJ5OiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbW9kZTogZ2xlbnVtLlRSSUFOR0xFUyxcclxuXHJcbiAgICBfcmVuZGVySW5mbzogbnVsbFxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuUmVuZGVyYWJsZS5wcm90b3R5cGUgKi9cclxue1xyXG5cclxuICAgIF9fcHJvZ3JhbTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdyb3VwIG9mIHJlY2VpdmVkIGxpZ2h0LlxyXG4gICAgICovXHJcbiAgICBsaWdodEdyb3VwOiAwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW5kZXIgb3JkZXIsIE5vZGVzIHdpdGggc21hbGxlciB2YWx1ZSByZW5kZXJzIGJlZm9yZSBub2RlcyB3aXRoIGxhcmdlciB2YWx1ZXMuXHJcbiAgICAgKiBAdHlwZSB7TnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByZW5kZXJPcmRlcjogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZWQgd2hlbiBtb2RlIGlzIExJTkVTLCBMSU5FX1NUUklQIG9yIExJTkVfTE9PUFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgLy8gbGluZVdpZHRoOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgZW5hYmxlIGN1bGxpbmdcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBjdWxsaW5nOiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGVjaWZ5IHdoaWNoIHNpZGUgb2YgcG9seWdvbiB3aWxsIGJlIGN1bGxlZC5cclxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcclxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuQkFDS31cclxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuRlJPTlR9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5SZW5kZXJhYmxlLkZST05UX0FORF9CQUNLfVxyXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViR0xSZW5kZXJpbmdDb250ZXh0L2N1bGxGYWNlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjdWxsRmFjZTogZ2xlbnVtLkJBQ0ssXHJcbiAgICAvKipcclxuICAgICAqIFNwZWNpZnkgd2hpY2ggc2lkZSBpcyBmcm9udCBmYWNlLlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuUmVuZGVyYWJsZS5DV31cclxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuQ0NXfVxyXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViR0xSZW5kZXJpbmdDb250ZXh0L2Zyb250RmFjZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZnJvbnRGYWNlOiBnbGVudW0uQ0NXLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgZW5hYmxlIHNvZnR3YXJlIGZydXN0dW0gY3VsbGluZ1xyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGZydXN0dW1DdWxsaW5nOiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgcmVjZWl2ZVNoYWRvdzogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGNhc3RTaGFkb3c6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpZ25vcmVQaWNraW5nOiBmYWxzZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlnbm9yZVByZVo6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlnbm9yZUdCdWZmZXI6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNSZW5kZXJhYmxlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAvLyBUT0RPIFNoYWRlciA/XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VvbWV0cnkgJiYgdGhpcy5tYXRlcmlhbCAmJiB0aGlzLm1hdGVyaWFsLnNoYWRlciAmJiAhdGhpcy5pbnZpc2libGVcclxuICAgICAgICAgICAgJiYgdGhpcy5nZW9tZXRyeS52ZXJ0ZXhDb3VudCA+IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmVmb3JlIHJlbmRlciBob29rXHJcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIGJlZm9yZVJlbmRlcjogZnVuY3Rpb24gKF9nbCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCZWZvcmUgcmVuZGVyIGhvb2tcclxuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cclxuICAgICAqL1xyXG4gICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uIChfZ2wsIHJlbmRlclN0YXQpIHt9LFxyXG5cclxuICAgIGdldEJvdW5kaW5nQm94OiBmdW5jdGlvbiAoZmlsdGVyLCBvdXQpIHtcclxuICAgICAgICBvdXQgPSBOb2RlLnByb3RvdHlwZS5nZXRCb3VuZGluZ0JveC5jYWxsKHRoaXMsIGZpbHRlciwgb3V0KTtcclxuICAgICAgICBpZiAodGhpcy5nZW9tZXRyeSAmJiB0aGlzLmdlb21ldHJ5LmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIG91dC51bmlvbih0aGlzLmdlb21ldHJ5LmJvdW5kaW5nQm94KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgcmVuZGVyYWJsZVxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlJlbmRlcmFibGV9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXHJcbiAgICAgICAgICAgICdjYXN0U2hhZG93JywgJ3JlY2VpdmVTaGFkb3cnLFxyXG4gICAgICAgICAgICAnbW9kZScsICdjdWxsaW5nJywgJ2N1bGxGYWNlJywgJ2Zyb250RmFjZScsXHJcbiAgICAgICAgICAgICdmcnVzdHVtQ3VsbGluZycsXHJcbiAgICAgICAgICAgICdyZW5kZXJPcmRlcicsICdsaW5lV2lkdGgnLFxyXG4gICAgICAgICAgICAnaWdub3JlUGlja2luZycsICdpZ25vcmVQcmVaJywgJ2lnbm9yZUdCdWZmZXInXHJcbiAgICAgICAgXTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJhYmxlID0gTm9kZS5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIHJlbmRlcmFibGUuZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xyXG4gICAgICAgICAgICByZW5kZXJhYmxlLm1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbDtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBwcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgLy8gVHJ5IG5vdCB0byBvdmVyd3JpdGUgdGhlIHByb3RvdHlwZSBwcm9wZXJ0eVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlbmRlcmFibGVbbmFtZV0gIT09IHRoaXNbbmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlW25hbWVdID0gdGhpc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGU7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKClcclxufSk7XHJcblxyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuUE9JTlRTID0gZ2xlbnVtLlBPSU5UUztcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLkxJTkVTID0gZ2xlbnVtLkxJTkVTO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuTElORV9MT09QID0gZ2xlbnVtLkxJTkVfTE9PUDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLkxJTkVfU1RSSVAgPSBnbGVudW0uTElORV9TVFJJUDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLlRSSUFOR0xFUyA9IGdsZW51bS5UUklBTkdMRVM7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5UUklBTkdMRV9TVFJJUCA9IGdsZW51bS5UUklBTkdMRV9TVFJJUDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLlRSSUFOR0xFX0ZBTiA9IGdsZW51bS5UUklBTkdMRV9GQU47XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5CQUNLID0gZ2xlbnVtLkJBQ0s7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5GUk9OVCA9IGdsZW51bS5GUk9OVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLkZST05UX0FORF9CQUNLID0gZ2xlbnVtLkZST05UX0FORF9CQUNLO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuQ1cgPSBnbGVudW0uQ1c7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5DQ1cgPSBnbGVudW0uQ0NXO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUmVuZGVyYWJsZTtcclxuIiwiaW1wb3J0IFJlbmRlcmFibGUgZnJvbSAnLi9SZW5kZXJhYmxlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5NZXNoXHJcbiAqIEBleHRlbmRzIGNsYXkuUmVuZGVyYWJsZVxyXG4gKi9cclxudmFyIE1lc2ggPSBSZW5kZXJhYmxlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkuTWVzaCMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VkIHdoZW4gaXQgaXMgYSBza2lubmVkIG1lc2hcclxuICAgICAqIEB0eXBlIHtjbGF5LlNrZWxldG9ufVxyXG4gICAgICovXHJcbiAgICBza2VsZXRvbjogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogSm9pbnRzIGluZGljZXMgTWVzaGVzIGNhbiBzaGFyZSB0aGUgb25lIHNrZWxldG9uIGluc3RhbmNlIGFuZCBlYWNoIG1lc2ggY2FuIHVzZSBvbmUgcGFydCBvZiBqb2ludHMuIEpvaW50cyBpbmRpY2VzIGluZGljYXRlIHRoZSBpbmRleCBvZiBqb2ludCBpbiB0aGUgc2tlbGV0b24gaW5zdGFuY2VcclxuICAgICAqIEB0eXBlIHtudW1iZXJbXX1cclxuICAgICAqL1xyXG4gICAgam9pbnRzOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgc3RvcmUgdGhlIHNraW4gbWF0cmljZXMgaW4gdmVydGV4IHRleHR1cmVcclxuICAgICAqIEB0eXBlIHtib29sfVxyXG4gICAgICovXHJcbiAgICB1c2VTa2luTWF0cmljZXNUZXh0dXJlOiBmYWxzZVxyXG5cclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCF0aGlzLmpvaW50cykge1xyXG4gICAgICAgIHRoaXMuam9pbnRzID0gW107XHJcbiAgICB9XHJcbn0sIHtcclxuXHJcbiAgICBpc1NraW5uZWRNZXNoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuc2tlbGV0b24gJiYgdGhpcy5qb2ludHMgJiYgdGhpcy5qb2ludHMubGVuZ3RoID4gMCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG1lc2ggPSBSZW5kZXJhYmxlLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIG1lc2guc2tlbGV0b24gPSB0aGlzLnNrZWxldG9uO1xyXG4gICAgICAgIGlmICh0aGlzLmpvaW50cykge1xyXG4gICAgICAgICAgICBtZXNoLmpvaW50cyA9IHRoaXMuam9pbnRzLnNsaWNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtZXNoO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbi8vIEVudW1zXHJcbk1lc2guUE9JTlRTID0gZ2xlbnVtLlBPSU5UUztcclxuTWVzaC5MSU5FUyA9IGdsZW51bS5MSU5FUztcclxuTWVzaC5MSU5FX0xPT1AgPSBnbGVudW0uTElORV9MT09QO1xyXG5NZXNoLkxJTkVfU1RSSVAgPSBnbGVudW0uTElORV9TVFJJUDtcclxuTWVzaC5UUklBTkdMRVMgPSBnbGVudW0uVFJJQU5HTEVTO1xyXG5NZXNoLlRSSUFOR0xFX1NUUklQID0gZ2xlbnVtLlRSSUFOR0xFX1NUUklQO1xyXG5NZXNoLlRSSUFOR0xFX0ZBTiA9IGdsZW51bS5UUklBTkdMRV9GQU47XHJcblxyXG5NZXNoLkJBQ0sgPSBnbGVudW0uQkFDSztcclxuTWVzaC5GUk9OVCA9IGdsZW51bS5GUk9OVDtcclxuTWVzaC5GUk9OVF9BTkRfQkFDSyA9IGdsZW51bS5GUk9OVF9BTkRfQkFDSztcclxuTWVzaC5DVyA9IGdsZW51bS5DVztcclxuTWVzaC5DQ1cgPSBnbGVudW0uQ0NXO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWVzaDtcclxuIiwiaW1wb3J0IENhbWVyYSBmcm9tICcuLi9DYW1lcmEnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNhbWVyYS5QZXJzcGVjdGl2ZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LkNhbWVyYVxyXG4gKi9cclxudmFyIFBlcnNwZWN0aXZlID0gQ2FtZXJhLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkuY2FtZXJhLlBlcnNwZWN0aXZlIyAqL3tcclxuICAgIC8qKlxyXG4gICAgICogVmVydGljYWwgZmllbGQgb2YgdmlldyBpbiBkZWdyZWVzXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBmb3Y6IDUwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBBc3BlY3QgcmF0aW8sIHR5cGljYWxseSB2aWV3cG9ydCB3aWR0aCAvIGhlaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYXNwZWN0OiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBuZWFyOiAwLjEsXHJcbiAgICAvKipcclxuICAgICAqIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZmFyOiAyMDAwXHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jYW1lcmEuUGVyc3BlY3RpdmUucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICB1cGRhdGVQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgcmFkID0gdGhpcy5mb3YgLyAxODAgKiBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5wZXJzcGVjdGl2ZShyYWQsIHRoaXMuYXNwZWN0LCB0aGlzLm5lYXIsIHRoaXMuZmFyKTtcclxuICAgIH0sXHJcbiAgICBkZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG0gPSB0aGlzLnByb2plY3Rpb25NYXRyaXguYXJyYXk7XHJcbiAgICAgICAgdmFyIHJhZCA9IE1hdGguYXRhbigxIC8gbVs1XSkgKiAyO1xyXG4gICAgICAgIHRoaXMuZm92ID0gcmFkIC8gTWF0aC5QSSAqIDE4MDtcclxuICAgICAgICB0aGlzLmFzcGVjdCA9IG1bNV0gLyBtWzBdO1xyXG4gICAgICAgIHRoaXMubmVhciA9IG1bMTRdIC8gKG1bMTBdIC0gMSk7XHJcbiAgICAgICAgdGhpcy5mYXIgPSBtWzE0XSAvIChtWzEwXSArIDEpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybiB7Y2xheS5jYW1lcmEuUGVyc3BlY3RpdmV9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgY2FtZXJhID0gQ2FtZXJhLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGNhbWVyYS5mb3YgPSB0aGlzLmZvdjtcclxuICAgICAgICBjYW1lcmEuYXNwZWN0ID0gdGhpcy5hc3BlY3Q7XHJcbiAgICAgICAgY2FtZXJhLm5lYXIgPSB0aGlzLm5lYXI7XHJcbiAgICAgICAgY2FtZXJhLmZhciA9IHRoaXMuZmFyO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FtZXJhO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBlcnNwZWN0aXZlO1xyXG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gJy4uL0NhbWVyYSc7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jYW1lcmEuT3J0aG9ncmFwaGljXHJcbiAqIEBleHRlbmRzIGNsYXkuQ2FtZXJhXHJcbiAqL1xyXG52YXIgT3J0aG9ncmFwaGljID0gQ2FtZXJhLmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5LmNhbWVyYS5PcnRob2dyYXBoaWMjICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVmdDogLTEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJpZ2h0OiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBuZWFyOiAtMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZmFyOiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0b3A6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJvdHRvbTogLTFcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LmNhbWVyYS5PcnRob2dyYXBoaWMucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICB1cGRhdGVQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbigpIHtcclxuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXgub3J0aG8odGhpcy5sZWZ0LCB0aGlzLnJpZ2h0LCB0aGlzLmJvdHRvbSwgdGhpcy50b3AsIHRoaXMubmVhciwgdGhpcy5mYXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBkZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG0gPSB0aGlzLnByb2plY3Rpb25NYXRyaXguYXJyYXk7XHJcbiAgICAgICAgdGhpcy5sZWZ0ID0gKC0xIC0gbVsxMl0pIC8gbVswXTtcclxuICAgICAgICB0aGlzLnJpZ2h0ID0gKDEgLSBtWzEyXSkgLyBtWzBdO1xyXG4gICAgICAgIHRoaXMudG9wID0gKDEgLSBtWzEzXSkgLyBtWzVdO1xyXG4gICAgICAgIHRoaXMuYm90dG9tID0gKC0xIC0gbVsxM10pIC8gbVs1XTtcclxuICAgICAgICB0aGlzLm5lYXIgPSAtKC0xIC0gbVsxNF0pIC8gbVsxMF07XHJcbiAgICAgICAgdGhpcy5mYXIgPSAtKDEgLSBtWzE0XSkgLyBtWzEwXTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuY2FtZXJhLk9ydGhvZ3JhcGhpY31cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBjYW1lcmEgPSBDYW1lcmEucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICAgICAgY2FtZXJhLmxlZnQgPSB0aGlzLmxlZnQ7XHJcbiAgICAgICAgY2FtZXJhLnJpZ2h0ID0gdGhpcy5yaWdodDtcclxuICAgICAgICBjYW1lcmEubmVhciA9IHRoaXMubmVhcjtcclxuICAgICAgICBjYW1lcmEuZmFyID0gdGhpcy5mYXI7XHJcbiAgICAgICAgY2FtZXJhLnRvcCA9IHRoaXMudG9wO1xyXG4gICAgICAgIGNhbWVyYS5ib3R0b20gPSB0aGlzLmJvdHRvbTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNhbWVyYTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBPcnRob2dyYXBoaWM7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LnN0YW5kYXJkLmNodW5rLnZhcnlpbmdcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Ob3JtYWw7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG4jaWYgZGVmaW5lZChQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEKSB8fCBkZWZpbmVkKE5PUk1BTE1BUF9FTkFCTEVEKVxcbnZhcnlpbmcgdmVjMyB2X1RhbmdlbnQ7XFxudmFyeWluZyB2ZWMzIHZfQml0YW5nZW50O1xcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKEFPTUFQX0VOQUJMRUQpXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQyO1xcbiNlbmRpZlxcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnN0YW5kYXJkLmNodW5rLmxpZ2h0X2hlYWRlclxcbiNpZmRlZiBBTUJJRU5UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5hbWJpZW50X2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfU0hfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLmFtYmllbnRfc2hfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5hbWJpZW50X2N1YmVtYXBfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgUE9JTlRfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLnBvaW50X2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIERJUkVDVElPTkFMX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5kaXJlY3Rpb25hbF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBTUE9UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5zcG90X2xpZ2h0XFxuI2VuZGlmXFxuQGVuZFxcbkBleHBvcnQgY2xheS5zdGFuZGFyZC52ZXJ0ZXhcXG4jZGVmaW5lIFNIQURFUl9OQU1FIHN0YW5kYXJkXFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gbWF0NCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgOiBXT1JMRElOVkVSU0VUUkFOU1BPU0U7XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxudW5pZm9ybSB2ZWMyIHV2UmVwZWF0ID0gdmVjMigxLjAsIDEuMCk7XFxudW5pZm9ybSB2ZWMyIHV2T2Zmc2V0ID0gdmVjMigwLjAsIDAuMCk7XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZCA6IFRFWENPT1JEXzA7XFxuI2lmIGRlZmluZWQoQU9NQVBfRU5BQkxFRClcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZDIgOiBURVhDT09SRF8xO1xcbiNlbmRpZlxcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbCA6IE5PUk1BTDtcXG5hdHRyaWJ1dGUgdmVjNCB0YW5nZW50IDogVEFOR0VOVDtcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuYXR0cmlidXRlIHZlYzQgYV9Db2xvciA6IENPTE9SO1xcbiNlbmRpZlxcbmF0dHJpYnV0ZSB2ZWMzIGJhcnljZW50cmljO1xcbkBpbXBvcnQgY2xheS5zdGFuZGFyZC5jaHVuay52YXJ5aW5nXFxuQGltcG9ydCBjbGF5LmNodW5rLnNraW5uaW5nX2hlYWRlclxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiB2ZWMzIHNraW5uZWROb3JtYWwgPSBub3JtYWw7XFxuIHZlYzMgc2tpbm5lZFRhbmdlbnQgPSB0YW5nZW50Lnh5ejtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuIHNraW5uZWROb3JtYWwgPSAoc2tpbk1hdHJpeFdTICogdmVjNChub3JtYWwsIDAuMCkpLnh5ejtcXG4gc2tpbm5lZFRhbmdlbnQgPSAoc2tpbk1hdHJpeFdTICogdmVjNCh0YW5nZW50Lnh5eiwgMC4wKSkueHl6O1xcbiNlbmRpZlxcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkICogdXZSZXBlYXQgKyB1dk9mZnNldDtcXG4gdl9Xb3JsZFBvc2l0aW9uID0gKHdvcmxkICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gdl9CYXJ5Y2VudHJpYyA9IGJhcnljZW50cmljO1xcbiB2X05vcm1hbCA9IG5vcm1hbGl6ZSgod29ybGRJbnZlcnNlVHJhbnNwb3NlICogdmVjNChza2lubmVkTm9ybWFsLCAwLjApKS54eXopO1xcbiNpZiBkZWZpbmVkKFBBUkFMTEFYT0NDTFVTSU9OTUFQX0VOQUJMRUQpIHx8IGRlZmluZWQoTk9STUFMTUFQX0VOQUJMRUQpXFxuIHZfVGFuZ2VudCA9IG5vcm1hbGl6ZSgod29ybGRJbnZlcnNlVHJhbnNwb3NlICogdmVjNChza2lubmVkVGFuZ2VudCwgMC4wKSkueHl6KTtcXG4gdl9CaXRhbmdlbnQgPSBub3JtYWxpemUoY3Jvc3Modl9Ob3JtYWwsIHZfVGFuZ2VudCkgKiB0YW5nZW50LncpO1xcbiNlbmRpZlxcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gdl9Db2xvciA9IGFfQ29sb3I7XFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoQU9NQVBfRU5BQkxFRClcXG4gdl9UZXhjb29yZDIgPSB0ZXhjb29yZDI7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc3RhbmRhcmQuZnJhZ21lbnRcXG4jZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzlcXG4jZGVmaW5lIEdMT1NTSU5FU1NfQ0hBTk5FTCAwXFxuI2RlZmluZSBST1VHSE5FU1NfQ0hBTk5FTCAwXFxuI2RlZmluZSBNRVRBTE5FU1NfQ0hBTk5FTCAxXFxuI2RlZmluZSBESUZGVVNFTUFQX0FMUEhBX0FMUEhBXFxuQGltcG9ydCBjbGF5LnN0YW5kYXJkLmNodW5rLnZhcnlpbmdcXG51bmlmb3JtIG1hdDQgdmlld0ludmVyc2UgOiBWSUVXSU5WRVJTRTtcXG4jaWZkZWYgTk9STUFMTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7XFxuI2VuZGlmXFxudW5pZm9ybSBmbG9hdCBub3JtYWxTY2FsZTogMS4wO1xcbiNpZmRlZiBESUZGVVNFTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBTUEVDVUxBUk1BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJNYXA7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9ST1VHSE5FU1NcXG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcyA6IDAuNTtcXG4gI2lmZGVmIFJPVUdITkVTU01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgcm91Z2huZXNzTWFwO1xcbiAjZW5kaWZcXG4jZWxzZVxcbnVuaWZvcm0gZmxvYXQgZ2xvc3NpbmVzczogMC41O1xcbiAjaWZkZWYgR0xPU1NJTkVTU01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgZ2xvc3NpbmVzc01hcDtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIE1FVEFMTkVTU01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBPQ0NMVVNJT05NQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIG9jY2x1c2lvbk1hcDtcXG4jZW5kaWZcXG4jaWZkZWYgRU5WSVJPTk1FTlRNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlckN1YmUgZW52aXJvbm1lbnRNYXA7XFxuICNpZmRlZiBQQVJBTExBWF9DT1JSRUNURURcXG51bmlmb3JtIHZlYzMgZW52aXJvbm1lbnRCb3hNaW47XFxudW5pZm9ybSB2ZWMzIGVudmlyb25tZW50Qm94TWF4O1xcbiAjZW5kaWZcXG4jZW5kaWZcXG4jaWZkZWYgQlJERkxPT0tVUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgYnJkZkxvb2t1cDtcXG4jZW5kaWZcXG4jaWZkZWYgRU1JU1NJVkVNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBTU0FPTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBzc2FvTWFwO1xcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydCA6IFZJRVdQT1JUO1xcbiNlbmRpZlxcbiNpZmRlZiBBT01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgYW9NYXA7XFxudW5pZm9ybSBmbG9hdCBhb0ludGVuc2l0eTtcXG4jZW5kaWZcXG51bmlmb3JtIHZlYzMgY29sb3IgOiBbMS4wLCAxLjAsIDEuMF07XFxudW5pZm9ybSBmbG9hdCBhbHBoYSA6IDEuMDtcXG4jaWZkZWYgQUxQSEFfVEVTVFxcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuOTtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX01FVEFMTkVTU1xcbnVuaWZvcm0gZmxvYXQgbWV0YWxuZXNzIDogMC4wO1xcbiNlbHNlXFxudW5pZm9ybSB2ZWMzIHNwZWN1bGFyQ29sb3IgOiBbMC4xLCAwLjEsIDAuMV07XFxuI2VuZGlmXFxudW5pZm9ybSB2ZWMzIGVtaXNzaW9uIDogWzAuMCwgMC4wLCAwLjBdO1xcbnVuaWZvcm0gZmxvYXQgZW1pc3Npb25JbnRlbnNpdHk6IDE7XFxudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGggOiAwLjA7XFxudW5pZm9ybSB2ZWM0IGxpbmVDb2xvciA6IFswLjAsIDAuMCwgMC4wLCAwLjZdO1xcbiNpZmRlZiBFTlZJUk9OTUVOVE1BUF9QUkVGSUxURVJcXG51bmlmb3JtIGZsb2F0IG1heE1pcG1hcExldmVsOiA1O1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5zdGFuZGFyZC5jaHVuay5saWdodF9oZWFkZXJcXG5AaW1wb3J0IGNsYXkudXRpbC5jYWxjdWxhdGVfYXR0ZW51YXRpb25cXG5AaW1wb3J0IGNsYXkudXRpbC5lZGdlX2ZhY3RvclxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkudXRpbC5zcmdiXFxuQGltcG9ydCBjbGF5LnBsdWdpbi5jb21wdXRlX3NoYWRvd19tYXBcXG5AaW1wb3J0IGNsYXkudXRpbC5wYXJhbGxheF9jb3JyZWN0XFxuQGltcG9ydCBjbGF5LnV0aWwuQUNFU1xcbmZsb2F0IEdfU21pdGgoZmxvYXQgZywgZmxvYXQgbmR2LCBmbG9hdCBuZGwpXFxue1xcbiBmbG9hdCByb3VnaG5lc3MgPSAxLjAgLSBnO1xcbiBmbG9hdCBrID0gcm91Z2huZXNzICogcm91Z2huZXNzIC8gMi4wO1xcbiBmbG9hdCBHMVYgPSBuZHYgLyAobmR2ICogKDEuMCAtIGspICsgayk7XFxuIGZsb2F0IEcxTCA9IG5kbCAvIChuZGwgKiAoMS4wIC0gaykgKyBrKTtcXG4gcmV0dXJuIEcxTCAqIEcxVjtcXG59XFxudmVjMyBGX1NjaGxpY2soZmxvYXQgbmR2LCB2ZWMzIHNwZWMpIHtcXG4gcmV0dXJuIHNwZWMgKyAoMS4wIC0gc3BlYykgKiBwb3coMS4wIC0gbmR2LCA1LjApO1xcbn1cXG5mbG9hdCBEX1Bob25nKGZsb2F0IGcsIGZsb2F0IG5kaCkge1xcbiBmbG9hdCBhID0gcG93KDgxOTIuMCwgZyk7XFxuIHJldHVybiAoYSArIDIuMCkgLyA4LjAgKiBwb3cobmRoLCBhKTtcXG59XFxuZmxvYXQgRF9HR1goZmxvYXQgZywgZmxvYXQgbmRoKSB7XFxuIGZsb2F0IHIgPSAxLjAgLSBnO1xcbiBmbG9hdCBhID0gciAqIHI7XFxuIGZsb2F0IHRtcCA9IG5kaCAqIG5kaCAqIChhIC0gMS4wKSArIDEuMDtcXG4gcmV0dXJuIGEgLyAoUEkgKiB0bXAgKiB0bXApO1xcbn1cXG4jaWZkZWYgUEFSQUxMQVhPQ0NMVVNJT05NQVBfRU5BQkxFRFxcbnVuaWZvcm0gZmxvYXQgcGFyYWxsYXhPY2NsdXNpb25TY2FsZSA6IDAuMDI7XFxudW5pZm9ybSBmbG9hdCBwYXJhbGxheE1heExheWVycyA6IDIwO1xcbnVuaWZvcm0gZmxvYXQgcGFyYWxsYXhNaW5MYXllcnMgOiA1O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHBhcmFsbGF4T2NjbHVzaW9uTWFwO1xcbm1hdDMgdHJhbnNwb3NlKGluIG1hdDMgaW5NYXQpXFxue1xcbiB2ZWMzIGkwID0gaW5NYXRbMF07XFxuIHZlYzMgaTEgPSBpbk1hdFsxXTtcXG4gdmVjMyBpMiA9IGluTWF0WzJdO1xcbiByZXR1cm4gbWF0MyhcXG4gdmVjMyhpMC54LCBpMS54LCBpMi54KSxcXG4gdmVjMyhpMC55LCBpMS55LCBpMi55KSxcXG4gdmVjMyhpMC56LCBpMS56LCBpMi56KVxcbiApO1xcbn1cXG52ZWMyIHBhcmFsbGF4VXYodmVjMiB1diwgdmVjMyB2aWV3RGlyKVxcbntcXG4gZmxvYXQgbnVtTGF5ZXJzID0gbWl4KHBhcmFsbGF4TWF4TGF5ZXJzLCBwYXJhbGxheE1pbkxheWVycywgYWJzKGRvdCh2ZWMzKDAuMCwgMC4wLCAxLjApLCB2aWV3RGlyKSkpO1xcbiBmbG9hdCBsYXllckhlaWdodCA9IDEuMCAvIG51bUxheWVycztcXG4gZmxvYXQgY3VyTGF5ZXJIZWlnaHQgPSAwLjA7XFxuIHZlYzIgZGVsdGFVdiA9IHZpZXdEaXIueHkgKiBwYXJhbGxheE9jY2x1c2lvblNjYWxlIC8gKHZpZXdEaXIueiAqIG51bUxheWVycyk7XFxuIHZlYzIgY3VyVXYgPSB1djtcXG4gZmxvYXQgaGVpZ2h0ID0gMS4wIC0gdGV4dHVyZTJEKHBhcmFsbGF4T2NjbHVzaW9uTWFwLCBjdXJVdikucjtcXG4gZm9yIChpbnQgaSA9IDA7IGkgPCAzMDsgaSsrKSB7XFxuIGN1ckxheWVySGVpZ2h0ICs9IGxheWVySGVpZ2h0O1xcbiBjdXJVdiAtPSBkZWx0YVV2O1xcbiBoZWlnaHQgPSAxLjAgLSB0ZXh0dXJlMkQocGFyYWxsYXhPY2NsdXNpb25NYXAsIGN1clV2KS5yO1xcbiBpZiAoaGVpZ2h0IDwgY3VyTGF5ZXJIZWlnaHQpIHtcXG4gYnJlYWs7XFxuIH1cXG4gfVxcbiB2ZWMyIHByZXZVdiA9IGN1clV2ICsgZGVsdGFVdjtcXG4gZmxvYXQgbmV4dCA9IGhlaWdodCAtIGN1ckxheWVySGVpZ2h0O1xcbiBmbG9hdCBwcmV2ID0gMS4wIC0gdGV4dHVyZTJEKHBhcmFsbGF4T2NjbHVzaW9uTWFwLCBwcmV2VXYpLnIgLSBjdXJMYXllckhlaWdodCArIGxheWVySGVpZ2h0O1xcbiByZXR1cm4gbWl4KGN1clV2LCBwcmV2VXYsIG5leHQgLyAobmV4dCAtIHByZXYpKTtcXG59XFxuI2VuZGlmXFxudm9pZCBtYWluKCkge1xcbiB2ZWM0IGFsYmVkb0NvbG9yID0gdmVjNChjb2xvciwgYWxwaGEpO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gYWxiZWRvQ29sb3IgKj0gdl9Db2xvcjtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9ERUNPREVcXG4gYWxiZWRvQ29sb3IgPSBzUkdCVG9MaW5lYXIoYWxiZWRvQ29sb3IpO1xcbiNlbmRpZlxcbiB2ZWMzIGV5ZVBvcyA9IHZpZXdJbnZlcnNlWzNdLnh5ejtcXG4gdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvcyAtIHZfV29ybGRQb3NpdGlvbik7XFxuIHZlYzIgdXYgPSB2X1RleGNvb3JkO1xcbiNpZiBkZWZpbmVkKFBBUkFMTEFYT0NDTFVTSU9OTUFQX0VOQUJMRUQpIHx8IGRlZmluZWQoTk9STUFMTUFQX0VOQUJMRUQpXFxuIG1hdDMgdGJuID0gbWF0Myh2X1RhbmdlbnQsIHZfQml0YW5nZW50LCB2X05vcm1hbCk7XFxuI2VuZGlmXFxuI2lmZGVmIFBBUkFMTEFYT0NDTFVTSU9OTUFQX0VOQUJMRURcXG4gdXYgPSBwYXJhbGxheFV2KHZfVGV4Y29vcmQsIG5vcm1hbGl6ZSh0cmFuc3Bvc2UodGJuKSAqIC1WKSk7XFxuI2VuZGlmXFxuI2lmZGVmIERJRkZVU0VNQVBfRU5BQkxFRFxcbiB2ZWM0IHRleGVsID0gdGV4dHVyZTJEKGRpZmZ1c2VNYXAsIHV2KTtcXG4gI2lmZGVmIFNSR0JfREVDT0RFXFxuIHRleGVsID0gc1JHQlRvTGluZWFyKHRleGVsKTtcXG4gI2VuZGlmXFxuIGFsYmVkb0NvbG9yLnJnYiAqPSB0ZXhlbC5yZ2I7XFxuICNpZmRlZiBESUZGVVNFTUFQX0FMUEhBX0FMUEhBXFxuIGFsYmVkb0NvbG9yLmEgKj0gdGV4ZWwuYTtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9NRVRBTE5FU1NcXG4gZmxvYXQgbSA9IG1ldGFsbmVzcztcXG4gI2lmZGVmIE1FVEFMTkVTU01BUF9FTkFCTEVEXFxuIGZsb2F0IG0yID0gdGV4dHVyZTJEKG1ldGFsbmVzc01hcCwgdXYpW01FVEFMTkVTU19DSEFOTkVMXTtcXG4gbSA9IGNsYW1wKG0yICsgKG0gLSAwLjUpICogMi4wLCAwLjAsIDEuMCk7XFxuICNlbmRpZlxcbiB2ZWMzIGJhc2VDb2xvciA9IGFsYmVkb0NvbG9yLnJnYjtcXG4gYWxiZWRvQ29sb3IucmdiID0gYmFzZUNvbG9yICogKDEuMCAtIG0pO1xcbiB2ZWMzIHNwZWMgPSBtaXgodmVjMygwLjA0KSwgYmFzZUNvbG9yLCBtKTtcXG4jZWxzZVxcbiB2ZWMzIHNwZWMgPSBzcGVjdWxhckNvbG9yO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfUk9VR0hORVNTXFxuIGZsb2F0IGcgPSBjbGFtcCgxLjAgLSByb3VnaG5lc3MsIDAuMCwgMS4wKTtcXG4gI2lmZGVmIFJPVUdITkVTU01BUF9FTkFCTEVEXFxuIGZsb2F0IGcyID0gMS4wIC0gdGV4dHVyZTJEKHJvdWdobmVzc01hcCwgdXYpW1JPVUdITkVTU19DSEFOTkVMXTtcXG4gZyA9IGNsYW1wKGcyICsgKGcgLSAwLjUpICogMi4wLCAwLjAsIDEuMCk7XFxuICNlbmRpZlxcbiNlbHNlXFxuIGZsb2F0IGcgPSBnbG9zc2luZXNzO1xcbiAjaWZkZWYgR0xPU1NJTkVTU01BUF9FTkFCTEVEXFxuIGZsb2F0IGcyID0gdGV4dHVyZTJEKGdsb3NzaW5lc3NNYXAsIHV2KVtHTE9TU0lORVNTX0NIQU5ORUxdO1xcbiBnID0gY2xhbXAoZzIgKyAoZyAtIDAuNSkgKiAyLjAsIDAuMCwgMS4wKTtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIFNQRUNVTEFSTUFQX0VOQUJMRURcXG4gc3BlYyAqPSBzUkdCVG9MaW5lYXIodGV4dHVyZTJEKHNwZWN1bGFyTWFwLCB1dikpLnJnYjtcXG4jZW5kaWZcXG4gdmVjMyBOID0gdl9Ob3JtYWw7XFxuI2lmZGVmIERPVUJMRV9TSURFRFxcbiBpZiAoZG90KE4sIFYpIDwgMC4wKSB7XFxuIE4gPSAtTjtcXG4gfVxcbiNlbmRpZlxcbiNpZmRlZiBOT1JNQUxNQVBfRU5BQkxFRFxcbiBpZiAoZG90KHZfVGFuZ2VudCwgdl9UYW5nZW50KSA+IDAuMCkge1xcbiB2ZWMzIG5vcm1hbFRleGVsID0gdGV4dHVyZTJEKG5vcm1hbE1hcCwgdXYpLnh5ejtcXG4gaWYgKGRvdChub3JtYWxUZXhlbCwgbm9ybWFsVGV4ZWwpID4gMC4wKSB7IE4gPSAobm9ybWFsVGV4ZWwgKiAyLjAgLSAxLjApO1xcbiBOID0gbm9ybWFsaXplKE4gKiB2ZWMzKG5vcm1hbFNjYWxlLCBub3JtYWxTY2FsZSwgMS4wKSk7XFxuIHRiblsxXSA9IC10Ym5bMV07XFxuIE4gPSBub3JtYWxpemUodGJuICogTik7XFxuIH1cXG4gfVxcbiNlbmRpZlxcbiB2ZWMzIGRpZmZ1c2VUZXJtID0gdmVjMygwLjAsIDAuMCwgMC4wKTtcXG4gdmVjMyBzcGVjdWxhclRlcm0gPSB2ZWMzKDAuMCwgMC4wLCAwLjApO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gdmVjMyBmcmVzbmVsVGVybSA9IEZfU2NobGljayhuZHYsIHNwZWMpO1xcbiNpZmRlZiBBTUJJRU5UX0xJR0hUX0NPVU5UXFxuIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IEFNQklFTlRfTElHSFRfQ09VTlQ7IF9pZHhfKyspXFxuIHt7XFxuIGRpZmZ1c2VUZXJtICs9IGFtYmllbnRMaWdodENvbG9yW19pZHhfXTtcXG4gfX1cXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVFxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX1NIX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7e1xcbiBkaWZmdXNlVGVybSArPSBjYWxjQW1iaWVudFNITGlnaHQoX2lkeF8sIE4pICogYW1iaWVudFNITGlnaHRDb2xvcltfaWR4X107XFxuIH19XFxuI2VuZGlmXFxuI2lmZGVmIFBPSU5UX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBmbG9hdCBzaGFkb3dDb250cmlic1BvaW50W1BPSU5UX0xJR0hUX0NPVU5UXTtcXG4gaWYoc2hhZG93RW5hYmxlZClcXG4ge1xcbiBjb21wdXRlU2hhZG93T2ZQb2ludExpZ2h0cyh2X1dvcmxkUG9zaXRpb24sIHNoYWRvd0NvbnRyaWJzUG9pbnQpO1xcbiB9XFxuI2VuZGlmXFxuIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IFBPSU5UX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7e1xcbiB2ZWMzIGxpZ2h0UG9zaXRpb24gPSBwb2ludExpZ2h0UG9zaXRpb25bX2lkeF9dO1xcbiB2ZWMzIGxjID0gcG9pbnRMaWdodENvbG9yW19pZHhfXTtcXG4gZmxvYXQgcmFuZ2UgPSBwb2ludExpZ2h0UmFuZ2VbX2lkeF9dO1xcbiB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgcmFuZ2UpO1xcbiBMIC89IGRpc3Q7XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kbCA9IGNsYW1wKGRvdChOLCBMKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgc2hhZG93Q29udHJpYiA9IDEuMDtcXG4jaWYgZGVmaW5lZChQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGlmKHNoYWRvd0VuYWJsZWQpXFxuIHtcXG4gc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzUG9pbnRbX2lkeF9dO1xcbiB9XFxuI2VuZGlmXFxuIHZlYzMgbGkgPSBsYyAqIG5kbCAqIGF0dGVudWF0aW9uICogc2hhZG93Q29udHJpYjtcXG4gZGlmZnVzZVRlcm0gKz0gbGk7XFxuIHNwZWN1bGFyVGVybSArPSBsaSAqIGZyZXNuZWxUZXJtICogRF9QaG9uZyhnLCBuZGgpO1xcbiB9fVxcbiNlbmRpZlxcbiNpZmRlZiBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVFxcbiNpZiBkZWZpbmVkKERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gZmxvYXQgc2hhZG93Q29udHJpYnNEaXJbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdO1xcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIGNvbXB1dGVTaGFkb3dPZkRpcmVjdGlvbmFsTGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNEaXIpO1xcbiB9XFxuI2VuZGlmXFxuIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IERJUkVDVElPTkFMX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7e1xcbiB2ZWMzIEwgPSAtbm9ybWFsaXplKGRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb25bX2lkeF9dKTtcXG4gdmVjMyBsYyA9IGRpcmVjdGlvbmFsTGlnaHRDb2xvcltfaWR4X107XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kbCA9IGNsYW1wKGRvdChOLCBMKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgc2hhZG93Q29udHJpYiA9IDEuMDtcXG4jaWYgZGVmaW5lZChESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGlmKHNoYWRvd0VuYWJsZWQpXFxuIHtcXG4gc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzRGlyW19pZHhfXTtcXG4gfVxcbiNlbmRpZlxcbiB2ZWMzIGxpID0gbGMgKiBuZGwgKiBzaGFkb3dDb250cmliO1xcbiBkaWZmdXNlVGVybSArPSBsaTtcXG4gc3BlY3VsYXJUZXJtICs9IGxpICogZnJlc25lbFRlcm0gKiBEX1Bob25nKGcsIG5kaCk7XFxuIH19XFxuI2VuZGlmXFxuI2lmZGVmIFNQT1RfTElHSFRfQ09VTlRcXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gZmxvYXQgc2hhZG93Q29udHJpYnNTcG90W1NQT1RfTElHSFRfQ09VTlRdO1xcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIGNvbXB1dGVTaGFkb3dPZlNwb3RMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic1Nwb3QpO1xcbiB9XFxuI2VuZGlmXFxuIGZvcihpbnQgaSA9IDA7IGkgPCBTUE9UX0xJR0hUX0NPVU5UOyBpKyspXFxuIHtcXG4gdmVjMyBsaWdodFBvc2l0aW9uID0gc3BvdExpZ2h0UG9zaXRpb25baV07XFxuIHZlYzMgc3BvdExpZ2h0RGlyZWN0aW9uID0gLW5vcm1hbGl6ZShzcG90TGlnaHREaXJlY3Rpb25baV0pO1xcbiB2ZWMzIGxjID0gc3BvdExpZ2h0Q29sb3JbaV07XFxuIGZsb2F0IHJhbmdlID0gc3BvdExpZ2h0UmFuZ2VbaV07XFxuIGZsb2F0IGEgPSBzcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lW2ldO1xcbiBmbG9hdCBiID0gc3BvdExpZ2h0UGVudW1icmFBbmdsZUNvc2luZVtpXTtcXG4gZmxvYXQgZmFsbG9mZkZhY3RvciA9IHNwb3RMaWdodEZhbGxvZmZGYWN0b3JbaV07XFxuIHZlYzMgTCA9IGxpZ2h0UG9zaXRpb24gLSB2X1dvcmxkUG9zaXRpb247XFxuIGZsb2F0IGRpc3QgPSBsZW5ndGgoTCk7XFxuIGZsb2F0IGF0dGVudWF0aW9uID0gbGlnaHRBdHRlbnVhdGlvbihkaXN0LCByYW5nZSk7XFxuIEwgLz0gZGlzdDtcXG4gZmxvYXQgYyA9IGRvdChzcG90TGlnaHREaXJlY3Rpb24sIEwpO1xcbiBmbG9hdCBmYWxsb2ZmO1xcbiBmYWxsb2ZmID0gY2xhbXAoKGMgLSBhKSAvKGIgLSBhKSwgMC4wLCAxLjApO1xcbiBmYWxsb2ZmID0gcG93KGZhbGxvZmYsIGZhbGxvZmZGYWN0b3IpO1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGlmIChzaGFkb3dFbmFibGVkKVxcbiB7XFxuIHNoYWRvd0NvbnRyaWIgPSBzaGFkb3dDb250cmlic1Nwb3RbaV07XFxuIH1cXG4jZW5kaWZcXG4gdmVjMyBsaSA9IGxjICogYXR0ZW51YXRpb24gKiAoMS4wIC0gZmFsbG9mZikgKiBzaGFkb3dDb250cmliICogbmRsO1xcbiBkaWZmdXNlVGVybSArPSBsaTtcXG4gc3BlY3VsYXJUZXJtICs9IGxpICogZnJlc25lbFRlcm0gKiBEX1Bob25nKGcsIG5kaCk7XFxuIH1cXG4jZW5kaWZcXG4gdmVjNCBvdXRDb2xvciA9IGFsYmVkb0NvbG9yO1xcbiBvdXRDb2xvci5yZ2IgKj0gbWF4KGRpZmZ1c2VUZXJtLCB2ZWMzKDAuMCkpO1xcbiBvdXRDb2xvci5yZ2IgKz0gbWF4KHNwZWN1bGFyVGVybSwgdmVjMygwLjApKTtcXG4jaWZkZWYgQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXFxuIHZlYzMgTCA9IHJlZmxlY3QoLVYsIE4pO1xcbiBmbG9hdCByb3VnaDIgPSBjbGFtcCgxLjAgLSBnLCAwLjAsIDEuMCk7XFxuIGZsb2F0IGJpYXMyID0gcm91Z2gyICogNS4wO1xcbiB2ZWMyIGJyZGZQYXJhbTIgPSB0ZXh0dXJlMkQoYW1iaWVudEN1YmVtYXBMaWdodEJSREZMb29rdXBbMF0sIHZlYzIocm91Z2gyLCBuZHYpKS54eTtcXG4gdmVjMyBlbnZXZWlnaHQyID0gc3BlYyAqIGJyZGZQYXJhbTIueCArIGJyZGZQYXJhbTIueTtcXG4gdmVjMyBlbnZUZXhlbDI7XFxuIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IEFNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge3tcXG4gI2lmZGVmIFNVUFBPUlRfVEVYVFVSRV9MT0RcXG4gZW52VGV4ZWwyID0gUkdCTURlY29kZSh0ZXh0dXJlQ3ViZUxvZEVYVChhbWJpZW50Q3ViZW1hcExpZ2h0Q3ViZW1hcFtfaWR4X10sIEwsIGJpYXMyKSwgOC4xMik7XFxuICNlbHNlXFxuIGVudlRleGVsMiA9IFJHQk1EZWNvZGUodGV4dHVyZUN1YmUoYW1iaWVudEN1YmVtYXBMaWdodEN1YmVtYXBbX2lkeF9dLCBMKSwgOC4xMik7XFxuICNlbmRpZlxcbiBvdXRDb2xvci5yZ2IgKz0gYW1iaWVudEN1YmVtYXBMaWdodENvbG9yW19pZHhfXSAqIGVudlRleGVsMiAqIGVudldlaWdodDI7XFxuIH19XFxuI2VuZGlmXFxuI2lmZGVmIEVOVklST05NRU5UTUFQX0VOQUJMRURcXG4gdmVjMyBlbnZXZWlnaHQgPSBnICogZnJlc25lbFRlcm07XFxuIHZlYzMgTCA9IHJlZmxlY3QoLVYsIE4pO1xcbiAjaWZkZWYgUEFSQUxMQVhfQ09SUkVDVEVEXFxuIEwgPSBwYXJhbGxheENvcnJlY3QoTCwgdl9Xb3JsZFBvc2l0aW9uLCBlbnZpcm9ubWVudEJveE1pbiwgZW52aXJvbm1lbnRCb3hNYXgpO1xcbiNlbmRpZlxcbiAjaWZkZWYgRU5WSVJPTk1FTlRNQVBfUFJFRklMVEVSXFxuIGZsb2F0IHJvdWdoID0gY2xhbXAoMS4wIC0gZywgMC4wLCAxLjApO1xcbiBmbG9hdCBiaWFzID0gcm91Z2ggKiBtYXhNaXBtYXBMZXZlbDtcXG4gI2lmZGVmIFNVUFBPUlRfVEVYVFVSRV9MT0RcXG4gdmVjMyBlbnZUZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZUxvZEVYVChlbnZpcm9ubWVudE1hcCwgTCwgYmlhcykpLnJnYjtcXG4gI2Vsc2VcXG4gdmVjMyBlbnZUZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZShlbnZpcm9ubWVudE1hcCwgTCkpLnJnYjtcXG4gI2VuZGlmXFxuICNpZmRlZiBCUkRGTE9PS1VQX0VOQUJMRURcXG4gdmVjMiBicmRmUGFyYW0gPSB0ZXh0dXJlMkQoYnJkZkxvb2t1cCwgdmVjMihyb3VnaCwgbmR2KSkueHk7XFxuIGVudldlaWdodCA9IHNwZWMgKiBicmRmUGFyYW0ueCArIGJyZGZQYXJhbS55O1xcbiAjZW5kaWZcXG4gI2Vsc2VcXG4gdmVjMyBlbnZUZXhlbCA9IHRleHR1cmVDdWJlKGVudmlyb25tZW50TWFwLCBMKS54eXo7XFxuICNlbmRpZlxcbiBvdXRDb2xvci5yZ2IgKz0gZW52VGV4ZWwgKiBlbnZXZWlnaHQ7XFxuI2VuZGlmXFxuIGZsb2F0IGFvRmFjdG9yID0gMS4wO1xcbiNpZmRlZiBTU0FPTUFQX0VOQUJMRURcXG4gYW9GYWN0b3IgPSBtaW4odGV4dHVyZTJEKHNzYW9NYXAsIChnbF9GcmFnQ29vcmQueHkgLSB2aWV3cG9ydC54eSkgLyB2aWV3cG9ydC56dykuciwgYW9GYWN0b3IpO1xcbiNlbmRpZlxcbiNpZmRlZiBBT01BUF9FTkFCTEVEXFxuIGFvRmFjdG9yID0gbWluKDEuMCAtIGNsYW1wKCgxLjAgLSB0ZXh0dXJlMkQoYW9NYXAsIHZfVGV4Y29vcmQyKS5yKSAqIGFvSW50ZW5zaXR5LCAwLjAsIDEuMCksIGFvRmFjdG9yKTtcXG4jZW5kaWZcXG4jaWZkZWYgT0NDTFVTSU9OTUFQX0VOQUJMRURcXG4gYW9GYWN0b3IgPSBtaW4oMS4wIC0gY2xhbXAoKDEuMCAtIHRleHR1cmUyRChvY2NsdXNpb25NYXAsIHZfVGV4Y29vcmQpLnIpLCAwLjAsIDEuMCksIGFvRmFjdG9yKTtcXG4jZW5kaWZcXG4gb3V0Q29sb3IucmdiICo9IGFvRmFjdG9yO1xcbiB2ZWMzIGxFbWlzc2lvbiA9IGVtaXNzaW9uO1xcbiNpZmRlZiBFTUlTU0lWRU1BUF9FTkFCTEVEXFxuIGxFbWlzc2lvbiAqPSB0ZXh0dXJlMkQoZW1pc3NpdmVNYXAsIHV2KS5yZ2I7XFxuI2VuZGlmXFxuIG91dENvbG9yLnJnYiArPSBsRW1pc3Npb24gKiBlbWlzc2lvbkludGVuc2l0eTtcXG4gaWYobGluZVdpZHRoID4gMC4pXFxuIHtcXG4gb3V0Q29sb3IucmdiID0gbWl4KG91dENvbG9yLnJnYiwgbGluZUNvbG9yLnJnYiwgKDEuMCAtIGVkZ2VGYWN0b3IobGluZVdpZHRoKSkgKiBsaW5lQ29sb3IuYSk7XFxuIH1cXG4jaWZkZWYgQUxQSEFfVEVTVFxcbiBpZiAob3V0Q29sb3IuYSA8IGFscGhhQ3V0b2ZmKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4jZW5kaWZcXG4jaWZkZWYgVE9ORU1BUFBJTkdcXG4gb3V0Q29sb3IucmdiID0gQUNFU1RvbmVNYXBwaW5nKG91dENvbG9yLnJnYik7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfRU5DT0RFXFxuIG91dENvbG9yID0gbGluZWFyVG9zUkdCKG91dENvbG9yKTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKG91dENvbG9yKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zdGFuZGFyZE1SLnZlcnRleFxcbkBpbXBvcnQgY2xheS5zdGFuZGFyZC52ZXJ0ZXhcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnN0YW5kYXJkTVIuZnJhZ21lbnRcXG4jZGVmaW5lIFVTRV9NRVRBTE5FU1NcXG4jZGVmaW5lIFVTRV9ST1VHSE5FU1NcXG5AaW1wb3J0IGNsYXkuc3RhbmRhcmQuZnJhZ21lbnRcXG5AZW5kXCI7XHJcbiIsImltcG9ydCBNYXRlcmlhbCBmcm9tICcuL01hdGVyaWFsJztcclxuXHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi9TaGFkZXInO1xyXG5pbXBvcnQgc3RhbmRhcmRFc3NsIGZyb20gJy4vc2hhZGVyL3NvdXJjZS9zdGFuZGFyZC5nbHNsLmpzJztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5cclxuLy8gSW1wb3J0IHN0YW5kYXJkIHNoYWRlclxyXG5TaGFkZXJbJ2ltcG9ydCddKHN0YW5kYXJkRXNzbCk7XHJcblxyXG52YXIgVEVYVFVSRV9QUk9QRVJUSUVTID0gWydkaWZmdXNlTWFwJywgJ25vcm1hbE1hcCcsICdyb3VnaG5lc3NNYXAnLCAnbWV0YWxuZXNzTWFwJywgJ2VtaXNzaXZlTWFwJywgJ2Vudmlyb25tZW50TWFwJywgJ2JyZGZMb29rdXAnLCAnc3Nhb01hcCcsICdhb01hcCddO1xyXG52YXIgU0lNUExFX1BST1BFUlRJRVMgPSBbJ2NvbG9yJywgJ2VtaXNzaW9uJywgJ2VtaXNzaW9uSW50ZW5zaXR5JywgJ2FscGhhJywgJ3JvdWdobmVzcycsICdtZXRhbG5lc3MnLCAndXZSZXBlYXQnLCAndXZPZmZzZXQnLCAnYW9JbnRlbnNpdHknLCAnYWxwaGFDdXRvZmYnLCAnbm9ybWFsU2NhbGUnXTtcclxudmFyIFBST1BFUlRJRVNfQ0hBTkdFX1NIQURFUiA9IFsnbGluZWFyJywgJ2VuY29kZVJHQk0nLCAnZGVjb2RlUkdCTScsICdkb3VibGVTaWRlZCcsICdhbHBoYVRlc3QnLCAncm91Z2huZXNzQ2hhbm5lbCcsICdtZXRhbG5lc3NDaGFubmVsJywgJ2Vudmlyb25tZW50TWFwUHJlZmlsdGVyZWQnXTtcclxuXHJcbnZhciBOVU1fREVGSU5FX01BUCA9IHtcclxuICAgICdyb3VnaG5lc3NDaGFubmVsJzogJ1JPVUdITkVTU19DSEFOTkVMJyxcclxuICAgICdtZXRhbG5lc3NDaGFubmVsJzogJ01FVEFMTkVTU19DSEFOTkVMJ1xyXG59O1xyXG52YXIgQk9PTF9ERUZJTkVfTUFQID0ge1xyXG4gICAgJ2xpbmVhcic6ICdTUkdCX0RFQ09ERScsXHJcbiAgICAnZW5jb2RlUkdCTSc6ICdSR0JNX0VOQ09ERScsXHJcbiAgICAnZGVjb2RlUkdCTSc6ICdSR0JNX0RFQ09ERScsXHJcbiAgICAnZG91YmxlU2lkZWQnOiAnRE9VQkxFX1NJREVEJyxcclxuICAgICdhbHBoYVRlc3QnOiAnQUxQSEFfVEVTVCcsXHJcbiAgICAnZW52aXJvbm1lbnRNYXBQcmVmaWx0ZXJlZCc6ICdFTlZJUk9OTUVOVE1BUF9QUkVGSUxURVInXHJcbn07XHJcblxyXG5cclxudmFyIHN0YW5kYXJkU2hhZGVyO1xyXG4vKipcclxuICogU3RhbmRhcmQgbWF0ZXJpYWwgd2l0aG91dCBjdXN0b20gc2hhZGVyLlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5TdGFuZGFyZE1hdGVyaWFsXHJcbiAqIEBleHRlbmRzIGNsYXkuQmFzZVxyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgbWF0ID0gbmV3IGNsYXkuU3RhbmRhcmRNYXRlcmlhbCh7XHJcbiAqICAgICBjb2xvcjogWzEsIDEsIDFdLFxyXG4gKiAgICAgZGlmZnVzZU1hcDogZGlmZnVzZVRleHR1cmVcclxuICogfSk7XHJcbiAqIG1hdC5yb3VnaG5lc3MgPSAxO1xyXG4gKi9cclxudmFyIFN0YW5kYXJkTWF0ZXJpYWwgPSBNYXRlcmlhbC5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFzdGFuZGFyZFNoYWRlcikge1xyXG4gICAgICAgIHN0YW5kYXJkU2hhZGVyID0gbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkTVIudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmRNUi5mcmFnbWVudCcpKTtcclxuICAgIH1cclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuU3RhbmRhcmRNYXRlcmlhbCMgKi8ge1xyXG4gICAgICAgIHNoYWRlcjogc3RhbmRhcmRTaGFkZXJcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uIChvcHRpb24pIHtcclxuICAgIC8vIFBFTkRJTkdcclxuICAgIHV0aWwuZXh0ZW5kKHRoaXMsIG9wdGlvbik7XHJcbiAgICAvLyBFeHRlbmQgYWZ0ZXIgc2hhZGVyIGlzIGNyZWF0ZWQuXHJcbiAgICB1dGlsLmRlZmF1bHRzKHRoaXMsIC8qKiBAbGVuZHMgY2xheS5TdGFuZGFyZE1hdGVyaWFsIyAqLyAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBbMSwgMSwgMV1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb2xvcjogWzEsIDEsIDFdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgICAgICogQGRlZmF1bHQgWzAsIDAsIDBdXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW1pc3Npb246IFswLCAwLCAwXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW1pc3Npb25JbnRlbnNpdHk6IDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMC41XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcm91Z2huZXNzOiAwLjUsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1ldGFsbmVzczogMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYWxwaGE6IDEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFscGhhVGVzdDogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEN1dG9mZiB0aHJlc2hvbGQgZm9yIGFscGhhIHRlc3RcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFscGhhQ3V0b2ZmOiAwLjksXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNjYWxhciBtdWx0aXBsaWVyIGFwcGxpZWQgdG8gZWFjaCBub3JtYWwgdmVjdG9yIG9mIG5vcm1hbCB0ZXh0dXJlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFhYWCBUaGlzIHZhbHVlIGlzIGNvbnNpZGVyZWQgb25seSBpZiBhIG5vcm1hbCB0ZXh0dXJlIGlzIHNwZWNpZmllZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBub3JtYWxTY2FsZTogMS4wLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBUT0RPIE11c3QgZGlzYWJsZSBjdWxsaW5nLlxyXG4gICAgICAgIGRvdWJsZVNpZGVkOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRpZmZ1c2VNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBub3JtYWxNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICByb3VnaG5lc3NNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBtZXRhbG5lc3NNYXA6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVtaXNzaXZlTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlQ3ViZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbnZpcm9ubWVudE1hcDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW52aXJvbm1lbnRCb3g6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQlJERiBMb29rdXAgaXMgZ2VuZXJhdGVkIGJ5IGNsYXkudXRpbC5jdWJlbWFwLmludGVncmF0ZUJyZGZcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYnJkZkxvb2t1cDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNzYW9NYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhb01hcDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFsxLCAxXVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHV2UmVwZWF0OiBbMSwgMV0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBbMCwgMF1cclxuICAgICAgICAgKi9cclxuICAgICAgICB1dk9mZnNldDogWzAsIDBdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKi9cclxuICAgICAgICBhb0ludGVuc2l0eTogMSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXBQcmVmaWx0ZXJlZDogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGxpbmVhcjogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVuY29kZVJHQk06IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkZWNvZGVSR0JNOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge051bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICByb3VnaG5lc3NDaGFubmVsOiAwLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtOdW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWV0YWxuZXNzQ2hhbm5lbDogMVxyXG4gICAgfSk7XHJcbn0sIHtcclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG1hdGVyaWFsID0gbmV3IFN0YW5kYXJkTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBURVhUVVJFX1BST1BFUlRJRVMuZm9yRWFjaChmdW5jdGlvbiAocHJvcE5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXNbcHJvcE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbFtwcm9wTmFtZV0gPSB0aGlzW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgICAgIFNJTVBMRV9QUk9QRVJUSUVTLmNvbmNhdChQUk9QRVJUSUVTX0NIQU5HRV9TSEFERVIpLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsW3Byb3BOYW1lXSA9IHRoaXNbcHJvcE5hbWVdO1xyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcclxuICAgIH1cclxufSk7XHJcblxyXG5TSU1QTEVfUFJPUEVSVElFUy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wTmFtZSkge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCBwcm9wTmFtZSwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQocHJvcE5hbWUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKHByb3BOYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxuVEVYVFVSRV9QUk9QRVJUSUVTLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsIHByb3BOYW1lLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChwcm9wTmFtZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFVuaWZvcm0ocHJvcE5hbWUsIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufSk7XHJcblxyXG5QUk9QRVJUSUVTX0NIQU5HRV9TSEFERVIuZm9yRWFjaChmdW5jdGlvbiAocHJvcE5hbWUpIHtcclxuICAgIHZhciBwcml2YXRlS2V5ID0gJ18nICsgcHJvcE5hbWU7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsIHByb3BOYW1lLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3ByaXZhdGVLZXldO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpc1twcml2YXRlS2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAocHJvcE5hbWUgaW4gTlVNX0RFRklORV9NQVApIHtcclxuICAgICAgICAgICAgICAgIHZhciBkZWZpbmVOYW1lID0gTlVNX0RFRklORV9NQVBbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWZpbmUoJ2ZyYWdtZW50JywgZGVmaW5lTmFtZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZU5hbWUgPSBCT09MX0RFRklORV9NQVBbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPyB0aGlzLmRlZmluZSgnZnJhZ21lbnQnLCBkZWZpbmVOYW1lKSA6IHRoaXMudW5kZWZpbmUoJ2ZyYWdtZW50JywgZGVmaW5lTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufSk7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICdlbnZpcm9ubWVudEJveCcsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBlbnZCb3ggPSB0aGlzLl9lbnZpcm9ubWVudEJveDtcclxuICAgICAgICBpZiAoZW52Qm94KSB7XHJcbiAgICAgICAgICAgIGVudkJveC5taW4uc2V0QXJyYXkodGhpcy5nZXQoJ2Vudmlyb25tZW50Qm94TWluJykpO1xyXG4gICAgICAgICAgICBlbnZCb3gubWF4LnNldEFycmF5KHRoaXMuZ2V0KCdlbnZpcm9ubWVudEJveE1heCcpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVudkJveDtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9lbnZpcm9ubWVudEJveCA9IHZhbHVlO1xyXG5cclxuICAgICAgICB2YXIgdW5pZm9ybXMgPSB0aGlzLnVuaWZvcm1zID0gdGhpcy51bmlmb3JtcyB8fCB7fTtcclxuICAgICAgICB1bmlmb3Jtc1snZW52aXJvbm1lbnRCb3hNaW4nXSA9IHVuaWZvcm1zWydlbnZpcm9ubWVudEJveE1pbiddIHx8IHtcclxuICAgICAgICAgICAgdmFsdWU6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHVuaWZvcm1zWydlbnZpcm9ubWVudEJveE1heCddID0gdW5pZm9ybXNbJ2Vudmlyb25tZW50Qm94TWF4J10gfHwge1xyXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIFRPRE8gQ2FuJ3QgZGV0ZWN0IG9wZXJhdGlvbiBsaWtlIGJveC5taW4gPSBuZXcgVmVjdG9yKClcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKCdlbnZpcm9ubWVudEJveE1pbicsIHZhbHVlLm1pbi5hcnJheSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybSgnZW52aXJvbm1lbnRCb3hNYXgnLCB2YWx1ZS5tYXguYXJyYXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmaW5lKCdmcmFnbWVudCcsICdQQVJBTExBWF9DT1JSRUNURUQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1BBUkFMTEFYX0NPUlJFQ1RFRCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTdGFuZGFyZE1hdGVyaWFsO1xyXG4iLCJpbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcblxyXG52YXIgX2xpYnJhcnkgPSB7fTtcclxuXHJcbmZ1bmN0aW9uIFNoYWRlckxpYnJhcnkgKCkge1xyXG4gICAgdGhpcy5fcG9vbCA9IHt9O1xyXG59XHJcblxyXG5TaGFkZXJMaWJyYXJ5LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICB2YXIga2V5ID0gbmFtZTtcclxuXHJcbiAgICBpZiAodGhpcy5fcG9vbFtrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvb2xba2V5XTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBzb3VyY2UgPSBfbGlicmFyeVtuYW1lXTtcclxuICAgICAgICBpZiAoIXNvdXJjZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTaGFkZXIgXCInICsgbmFtZSArICdcIicgKyAnIGlzIG5vdCBpbiB0aGUgbGlicmFyeScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKHNvdXJjZS52ZXJ0ZXgsIHNvdXJjZS5mcmFnbWVudCk7XHJcbiAgICAgICAgdGhpcy5fcG9vbFtrZXldID0gc2hhZGVyO1xyXG4gICAgICAgIHJldHVybiBzaGFkZXI7XHJcbiAgICB9XHJcbn07XHJcblxyXG5TaGFkZXJMaWJyYXJ5LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5fcG9vbCA9IHt9O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gdGVtcGxhdGUobmFtZSwgdmVydGV4LCBmcmFnbWVudCkge1xyXG4gICAgX2xpYnJhcnlbbmFtZV0gPSB7XHJcbiAgICAgICAgdmVydGV4OiB2ZXJ0ZXgsXHJcbiAgICAgICAgZnJhZ21lbnQ6IGZyYWdtZW50XHJcbiAgICB9O1xyXG59XHJcblxyXG52YXIgZGVmYXVsdExpYnJhcnkgPSBuZXcgU2hhZGVyTGlicmFyeSgpO1xyXG5cclxuLyoqXHJcbiAqICMjIyBCdWlsaW4gc2hhZGVyc1xyXG4gKiArIGNsYXkuc3RhbmRhcmRcclxuICogKyBjbGF5LmJhc2ljXHJcbiAqICsgY2xheS5sYW1iZXJ0XHJcbiAqICsgY2xheS53aXJlZnJhbWVcclxuICpcclxuICogQG5hbWVzcGFjZSBjbGF5LnNoYWRlci5saWJyYXJ5XHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIG5ldyBzaGFkZXIgbGlicmFyeS5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlTGlicmFyeTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgU2hhZGVyTGlicmFyeSgpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogR2V0IHNoYWRlciBmcm9tIGRlZmF1bHQgbGlicmFyeS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlNoYWRlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnNoYWRlci5saWJyYXJ5XHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogICAgIGNsYXkuc2hhZGVyLmxpYnJhcnkuZ2V0KCdjbGF5LnN0YW5kYXJkJylcclxuICAgICAqL1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRMaWJyYXJ5LmdldC5hcHBseShkZWZhdWx0TGlicmFyeSwgYXJndW1lbnRzKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnNoYWRlci5saWJyYXJ5XHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gdmVydGV4IC0gVmVydGV4IHNoYWRlciBjb2RlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGZyYWdtZW50IC0gRnJhZ21lbnQgc2hhZGVyIGNvZGVcclxuICAgICAqL1xyXG4gICAgdGVtcGxhdGU6IHRlbXBsYXRlLFxyXG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gZGVmYXVsdExpYnJhcnkuY2xlYXIoKTtcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LkpvaW50XHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgSm9pbnQgPSBCYXNlLmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5LkpvaW50IyAqL1xyXG57XHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvaXNzdWVzLzE5MyNpc3N1ZWNvbW1lbnQtMjkyMTY1NzZcclxuICAgIC8qKlxyXG4gICAgICogSm9pbnQgbmFtZVxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgbmFtZTogJycsXHJcbiAgICAvKipcclxuICAgICAqIEluZGV4IG9mIGpvaW50IGluIHRoZSBza2VsZXRvblxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaW5kZXg6IC0xLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NlbmUgbm9kZSBhdHRhY2hlZCB0b1xyXG4gICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgbm9kZTogbnVsbFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEpvaW50O1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBKb2ludCBmcm9tICcuL0pvaW50JztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vVGV4dHVyZSc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuL21hdGgvTWF0cml4NCc7XHJcblxyXG5pbXBvcnQgbWF0NCBmcm9tICcuL2dsbWF0cml4L21hdDQnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuL2dsbWF0cml4L3ZlYzMnO1xyXG5pbXBvcnQgcXVhdCBmcm9tICcuL2dsbWF0cml4L3F1YXQnO1xyXG5cclxuXHJcbnZhciB0bXBCb3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG52YXIgdG1wTWF0NCA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuU2tlbGV0b25cclxuICovXHJcbnZhciBTa2VsZXRvbiA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuU2tlbGV0b24jICove1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZWxhdGl2ZSByb290IG5vZGUgdGhhdCBub3QgYWZmZWN0IHRyYW5zZm9ybSBvZiBqb2ludC5cclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlbGF0aXZlUm9vdE5vZGU6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBuYW1lOiAnJyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogam9pbnRzXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxjbGF5LkpvaW50Pn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBqb2ludHM6IFtdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBib3VuZGluZyBib3ggd2l0aCBib3VuZCBnZW9tZXRyeS5cclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBib3VuZGluZ0JveDogbnVsbCxcclxuXHJcbiAgICAgICAgX2NsaXBzOiBbXSxcclxuXHJcbiAgICAgICAgLy8gTWF0cml4IHRvIGpvaW50IHNwYWNlIChyZWxhdGl2ZSB0byByb290IGpvaW50KVxyXG4gICAgICAgIF9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXk6IG51bGwsXHJcblxyXG4gICAgICAgIC8vIFVzZSBzdWJhcnJheSBpbnN0ZWFkIG9mIGNvcHkgYmFjayBlYWNoIHRpbWUgY29tcHV0aW5nIG1hdHJpeFxyXG4gICAgICAgIC8vIGh0dHA6Ly9qc3BlcmYuY29tL3N1YmFycmF5LXZzLWNvcHktZm9yLWFycmF5LXRyYW5zZm9ybS81XHJcbiAgICAgICAgX2pvaW50TWF0cmljZXNTdWJBcnJheXM6IFtdLFxyXG5cclxuICAgICAgICAvLyBqb2ludE1hdHJpeCAqIGN1cnJlbnRQb3NlTWF0cml4XHJcbiAgICAgICAgLy8gd29ybGRUcmFuc2Zvcm0gaXMgcmVsYXRpdmUgdG8gdGhlIHJvb3QgYm9uZVxyXG4gICAgICAgIC8vIHN0aWxsIGluIG1vZGVsIHNwYWNlIG5vdCB3b3JsZCBzcGFjZVxyXG4gICAgICAgIF9za2luTWF0cmljZXNBcnJheTogbnVsbCxcclxuXHJcbiAgICAgICAgX3NraW5NYXRyaWNlc1N1YkFycmF5czogW10sXHJcblxyXG4gICAgICAgIF9zdWJTa2luTWF0cmljZXNBcnJheToge31cclxuICAgIH07XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5Ta2VsZXRvbi5wcm90b3R5cGUgKi9cclxue1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGEgc2tpbm5pbmcgY2xpcCBhbmQgY3JlYXRlIGEgbWFwIGJldHdlZW4gY2xpcCBhbmQgc2tlbGV0b25cclxuICAgICAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uU2tpbm5pbmdDbGlwfSBjbGlwXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW21hcFJ1bGVdIE1hcCBiZXR3ZWVuIGpvaW50IG5hbWUgaW4gc2tlbGV0b24gYW5kIGpvaW50IG5hbWUgaW4gY2xpcFxyXG4gICAgICovXHJcbiAgICBhZGRDbGlwOiBmdW5jdGlvbiAoY2xpcCwgbWFwUnVsZSkge1xyXG4gICAgICAgIC8vIENsaXAgaGF2ZSBiZWVuIGV4aXN0cyBpblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fY2xpcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NsaXBzW2ldLmNsaXAgPT09IGNsaXApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBNYXAgdGhlIGpvaW50IGluZGV4IGluIHNrZWxldG9uIHRvIGpvaW50IHBvc2UgaW5kZXggaW4gY2xpcFxyXG4gICAgICAgIHZhciBtYXBzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBtYXBzW2ldID0gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIENyZWF0ZSBhdmF0YXJcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsaXAudHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2pdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRyYWNrID0gY2xpcC50cmFja3NbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgam9pbnROYW1lID0gam9pbnQubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmIChtYXBSdWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgam9pbnROYW1lID0gbWFwUnVsZVtqb2ludE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRyYWNrLm5hbWUgPT09IGpvaW50TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcHNbal0gPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9jbGlwcy5wdXNoKHtcclxuICAgICAgICAgICAgbWFwczogbWFwcyxcclxuICAgICAgICAgICAgY2xpcDogY2xpcFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpcHMubGVuZ3RoIC0gMTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLlNraW5uaW5nQ2xpcH0gY2xpcFxyXG4gICAgICovXHJcbiAgICByZW1vdmVDbGlwOiBmdW5jdGlvbiAoY2xpcCkge1xyXG4gICAgICAgIHZhciBpZHggPSAtMTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NsaXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9jbGlwc1tpXS5jbGlwID09PSBjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICBpZHggPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkeCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2xpcHMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGFsbCBjbGlwc1xyXG4gICAgICovXHJcbiAgICByZW1vdmVDbGlwc0FsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NsaXBzID0gW107XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGNsaXAgYnkgaW5kZXhcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gaW5kZXhcclxuICAgICAqL1xyXG4gICAgZ2V0Q2xpcDogZnVuY3Rpb24gKGluZGV4KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NsaXBzW2luZGV4XSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xpcHNbaW5kZXhdLmNsaXA7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2xpcE51bWJlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGlwcy5sZW5ndGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIGpvaW50IG1hdHJpY2VzIGZyb20gbm9kZSB0cmFuc2Zvcm1cclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICovXHJcbiAgICB1cGRhdGVKb2ludE1hdHJpY2VzOiAoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2YXIgbTQgPSBtYXQ0LmNyZWF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuam9pbnRzLmxlbmd0aCAqIDE2KTtcclxuICAgICAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuam9pbnRzLmxlbmd0aCAqIDE2KTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgbWF0NC5jb3B5KG00LCBqb2ludC5ub2RlLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgICAgIG1hdDQuaW52ZXJ0KG00LCBtNCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IGkgKiAxNjtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheVtvZmZzZXQgKyBqXSA9IG00W2pdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1hdHJpY2VzU3ViQXJyYXlzKCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgYm91bmRpbmdCb3ggb2YgZWFjaCBqb2ludCBib3VuZCB0byBnZW9tZXRyeS5cclxuICAgICAqIEFTU1VNRSBza2VsZXRvbiBhbmQgZ2VvbWV0cnkgam9pbnRzIGFyZSBtYXRjaGVkLlxyXG4gICAgICogQHBhcmFtIHtjbGF5Lkdlb21ldHJ5fSBnZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVKb2ludHNCb3VuZGluZ0JveGVzOiBmdW5jdGlvbiAoZ2VvbWV0cnkpIHtcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IGF0dHJpYnV0ZXMucG9zaXRpb247XHJcbiAgICAgICAgdmFyIGpvaW50QXR0ciA9IGF0dHJpYnV0ZXMuam9pbnQ7XHJcbiAgICAgICAgdmFyIHdlaWdodEF0dHIgPSBhdHRyaWJ1dGVzLndlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIGpvaW50c0JvdW5kaW5nQm94ZXMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGpvaW50c0JvdW5kaW5nQm94ZXNbaV0gPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICAgICAgam9pbnRzQm91bmRpbmdCb3hlc1tpXS5fX3VwZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2dHhKb2ludCA9IFtdO1xyXG4gICAgICAgIHZhciB2dHhQb3MgPSBbXTtcclxuICAgICAgICB2YXIgdnR4V2VpZ2h0ID0gW107XHJcbiAgICAgICAgdmFyIG1heEpvaW50SWR4ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb21ldHJ5LnZlcnRleENvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgam9pbnRBdHRyLmdldChpLCB2dHhKb2ludCk7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uQXR0ci5nZXQoaSwgdnR4UG9zKTtcclxuICAgICAgICAgICAgd2VpZ2h0QXR0ci5nZXQoaSwgdnR4V2VpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgNDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodnR4V2VpZ2h0W2tdID4gMC4wMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBqb2ludElkeCA9IHZ0eEpvaW50W2tdO1xyXG4gICAgICAgICAgICAgICAgICAgIG1heEpvaW50SWR4ID0gTWF0aC5tYXgobWF4Sm9pbnRJZHgsIGpvaW50SWR4KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1pbiA9IGpvaW50c0JvdW5kaW5nQm94ZXNbam9pbnRJZHhdLm1pbi5hcnJheTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWF4ID0gam9pbnRzQm91bmRpbmdCb3hlc1tqb2ludElkeF0ubWF4LmFycmF5O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBqb2ludHNCb3VuZGluZ0JveGVzW2pvaW50SWR4XS5fX3VwZGF0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBtaW4gPSB2ZWMzLm1pbihtaW4sIG1pbiwgdnR4UG9zKTtcclxuICAgICAgICAgICAgICAgICAgICBtYXggPSB2ZWMzLm1heChtYXgsIG1heCwgdnR4UG9zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fam9pbnRzQm91bmRpbmdCb3hlcyA9IGpvaW50c0JvdW5kaW5nQm94ZXM7XHJcblxyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuXHJcbiAgICAgICAgaWYgKG1heEpvaW50SWR4IDwgdGhpcy5qb2ludHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0dlb21ldHJ5IGpvaW50cyBhbmQgc2tlbGV0b24gam9pbnRzIGRvblxcJ3QgbWF0Y2gnKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHNldEpvaW50TWF0cmljZXNBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheSA9IGFycjtcclxuICAgICAgICB0aGlzLl9za2luTWF0cmljZXNBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYXJyLmxlbmd0aCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVNYXRyaWNlc1N1YkFycmF5cygpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVNYXRyaWNlc1N1YkFycmF5czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fam9pbnRNYXRyaWNlc1N1YkFycmF5c1tpXSA9IHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheS5zdWJhcnJheShpICogMTYsIChpKzEpICogMTYpO1xyXG4gICAgICAgICAgICB0aGlzLl9za2luTWF0cmljZXNTdWJBcnJheXNbaV0gPSB0aGlzLl9za2luTWF0cmljZXNBcnJheS5zdWJhcnJheShpICogMTYsIChpKzEpICogMTYpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgc2tpbm5pbmcgbWF0cmljZXNcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuX3NldFBvc2UoKTtcclxuXHJcbiAgICAgICAgdmFyIGpvaW50c0JvdW5kaW5nQm94ZXMgPSB0aGlzLl9qb2ludHNCb3VuZGluZ0JveGVzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2ldO1xyXG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzU3ViQXJyYXlzW2ldLFxyXG4gICAgICAgICAgICAgICAgam9pbnQubm9kZS53b3JsZFRyYW5zZm9ybS5hcnJheSxcclxuICAgICAgICAgICAgICAgIHRoaXMuX2pvaW50TWF0cmljZXNTdWJBcnJheXNbaV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5taW4uc2V0KEluZmluaXR5LCBJbmZpbml0eSwgSW5maW5pdHkpO1xyXG4gICAgICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1heC5zZXQoLUluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJib3ggPSBqb2ludHNCb3VuZGluZ0JveGVzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJib3guX191cGRhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG1wQm91bmRpbmdCb3guY29weShiYm94KTtcclxuICAgICAgICAgICAgICAgICAgICB0bXBNYXQ0LmFycmF5ID0gdGhpcy5fc2tpbk1hdHJpY2VzU3ViQXJyYXlzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcEJvdW5kaW5nQm94LmFwcGx5VHJhbnNmb3JtKHRtcE1hdDQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvdW5kaW5nQm94LnVuaW9uKHRtcEJvdW5kaW5nQm94KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0U3ViU2tpbk1hdHJpY2VzOiBmdW5jdGlvbiAobWVzaElkLCBqb2ludHMpIHtcclxuICAgICAgICB2YXIgc3ViQXJyYXkgPSB0aGlzLl9zdWJTa2luTWF0cmljZXNBcnJheVttZXNoSWRdO1xyXG4gICAgICAgIGlmICghc3ViQXJyYXkpIHtcclxuICAgICAgICAgICAgc3ViQXJyYXlcclxuICAgICAgICAgICAgICAgID0gdGhpcy5fc3ViU2tpbk1hdHJpY2VzQXJyYXlbbWVzaElkXVxyXG4gICAgICAgICAgICAgICAgPSBuZXcgRmxvYXQzMkFycmF5KGpvaW50cy5sZW5ndGggKiAxNik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpZHggPSBqb2ludHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7IGorKykge1xyXG4gICAgICAgICAgICAgICAgc3ViQXJyYXlbY3Vyc29yKytdID0gdGhpcy5fc2tpbk1hdHJpY2VzQXJyYXlbaWR4ICogMTYgKyBqXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3ViQXJyYXk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFN1YlNraW5NYXRyaWNlc1RleHR1cmU6IGZ1bmN0aW9uIChtZXNoSWQsIGpvaW50cykge1xyXG4gICAgICAgIHZhciBza2luTWF0cmljZXMgPSB0aGlzLmdldFN1YlNraW5NYXRyaWNlcyhtZXNoSWQsIGpvaW50cyk7XHJcbiAgICAgICAgdmFyIHNpemU7XHJcbiAgICAgICAgdmFyIG51bUpvaW50cyA9IHRoaXMuam9pbnRzLmxlbmd0aDtcclxuICAgICAgICBpZiAobnVtSm9pbnRzID4gMjU2KSB7XHJcbiAgICAgICAgICAgIHNpemUgPSA2NDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobnVtSm9pbnRzID4gNjQpIHtcclxuICAgICAgICAgICAgc2l6ZSA9IDMyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChudW1Kb2ludHMgPiAxNikge1xyXG4gICAgICAgICAgICBzaXplID0gMTY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzaXplID0gODtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fc2tpbk1hdHJpY2VzVGV4dHVyZSA9IHRoaXMuX3NraW5NYXRyaWNlc1RleHR1cmUgfHwgbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIHR5cGU6IFRleHR1cmUuRkxPQVQsXHJcbiAgICAgICAgICAgIG1pbkZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxyXG4gICAgICAgICAgICBtYWdGaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICAgICAgdXNlTWlwbWFwOiBmYWxzZSxcclxuICAgICAgICAgICAgZmxpcFk6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGV4dHVyZS53aWR0aCA9IHNpemU7XHJcbiAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSBzaXplO1xyXG5cclxuICAgICAgICBpZiAoIXRleHR1cmUucGl4ZWxzIHx8IHRleHR1cmUucGl4ZWxzLmxlbmd0aCAhPT0gc2l6ZSAqIHNpemUgKiA0KSB7XHJcbiAgICAgICAgICAgIHRleHR1cmUucGl4ZWxzID0gbmV3IEZsb2F0MzJBcnJheShzaXplICogc2l6ZSAqIDQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZXh0dXJlLnBpeGVscy5zZXQoc2tpbk1hdHJpY2VzKTtcclxuICAgICAgICB0ZXh0dXJlLmRpcnR5KCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRTa2luTWF0cmljZXNUZXh0dXJlOiBmdW5jdGlvbiAoKSB7XHJcblxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fc2tpbk1hdHJpY2VzVGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldFBvc2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5fY2xpcHNbMF0pIHtcclxuICAgICAgICAgICAgdmFyIGNsaXAgPSB0aGlzLl9jbGlwc1swXS5jbGlwO1xyXG4gICAgICAgICAgICB2YXIgbWFwcyA9IHRoaXMuX2NsaXBzWzBdLm1hcHM7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChtYXBzW2ldID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHBvc2UgPSBjbGlwLnRyYWNrc1ttYXBzW2ldXTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBOb3QgdXBkYXRlIGlmIHRoZXJlIGlzIG5vIGRhdGEuXHJcbiAgICAgICAgICAgICAgICAvLyBQRU5ESU5HIElmIHN5bmMgcG9zZS5wb3NpdGlvbiwgcG9zZS5yb3RhdGlvbiwgcG9zZS5zY2FsZVxyXG4gICAgICAgICAgICAgICAgaWYgKHBvc2UuY2hhbm5lbHMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZWMzLmNvcHkoam9pbnQubm9kZS5wb3NpdGlvbi5hcnJheSwgcG9zZS5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocG9zZS5jaGFubmVscy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHF1YXQuY29weShqb2ludC5ub2RlLnJvdGF0aW9uLmFycmF5LCBwb3NlLnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwb3NlLmNoYW5uZWxzLnNjYWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5jb3B5KGpvaW50Lm5vZGUuc2NhbGUuYXJyYXksIHBvc2Uuc2NhbGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGpvaW50Lm5vZGUucG9zaXRpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGpvaW50Lm5vZGUucm90YXRpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGpvaW50Lm5vZGUuc2NhbGUuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uIChjbG9uZWROb2Rlc01hcCkge1xyXG4gICAgICAgIHZhciBza2VsZXRvbiA9IG5ldyBTa2VsZXRvbigpO1xyXG4gICAgICAgIHNrZWxldG9uLm5hbWUgPSB0aGlzLm5hbWU7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5ld0pvaW50ID0gbmV3IEpvaW50KCk7XHJcbiAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2ldO1xyXG4gICAgICAgICAgICBuZXdKb2ludC5uYW1lID0gam9pbnQubmFtZTtcclxuICAgICAgICAgICAgbmV3Sm9pbnQuaW5kZXggPSBqb2ludC5pbmRleDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjbG9uZWROb2Rlc01hcCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5ld05vZGUgPSBjbG9uZWROb2Rlc01hcFtqb2ludC5ub2RlLl9fdWlkX19dO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghbmV3Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NhblxcJ3QgZmluZCBub2RlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbmV3Sm9pbnQubm9kZSA9IG5ld05vZGUgfHwgam9pbnQubm9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5ld0pvaW50Lm5vZGUgPSBqb2ludC5ub2RlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBza2VsZXRvbi5qb2ludHMucHVzaChuZXdKb2ludCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5KSB7XHJcbiAgICAgICAgICAgIHZhciBsZW4gPSB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkubGVuZ3RoO1xyXG4gICAgICAgICAgICBza2VsZXRvbi5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheShsZW4pO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbi5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5W2ldID0gdGhpcy5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5W2ldO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBza2VsZXRvbi5fc2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGxlbik7XHJcblxyXG4gICAgICAgICAgICBza2VsZXRvbi51cGRhdGVNYXRyaWNlc1N1YkFycmF5cygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2tlbGV0b24uX2pvaW50c0JvdW5kaW5nQm94ZSA9ICh0aGlzLl9qb2ludHNCb3VuZGluZ0JveGVzIHx8IFtdKS5tYXAoZnVuY3Rpb24gKGJib3gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGJib3guY2xvbmUoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2tlbGV0b24udXBkYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBza2VsZXRvbjtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTa2VsZXRvbjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJcXG5AZXhwb3J0IGNsYXkudXRpbC5yYW5kXFxuaGlnaHAgZmxvYXQgcmFuZCh2ZWMyIHV2KSB7XFxuIGNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1MztcXG4gaGlnaHAgZmxvYXQgZHQgPSBkb3QodXYueHksIHZlYzIoYSxiKSksIHNuID0gbW9kKGR0LCAzLjE0MTU5MjY1MzU4OTc5Myk7XFxuIHJldHVybiBmcmFjdChzaW4oc24pICogYyk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5jYWxjdWxhdGVfYXR0ZW51YXRpb25cXG51bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uRmFjdG9yIDogNS4wO1xcbmZsb2F0IGxpZ2h0QXR0ZW51YXRpb24oZmxvYXQgZGlzdCwgZmxvYXQgcmFuZ2UpXFxue1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IDEuMDtcXG4gYXR0ZW51YXRpb24gPSBkaXN0KmRpc3QvKHJhbmdlKnJhbmdlKzEuMCk7XFxuIGZsb2F0IGF0dF9zID0gYXR0ZW51YXRpb25GYWN0b3I7XFxuIGF0dGVudWF0aW9uID0gMS4wLyhhdHRlbnVhdGlvbiphdHRfcysxLjApO1xcbiBhdHRfcyA9IDEuMC8oYXR0X3MrMS4wKTtcXG4gYXR0ZW51YXRpb24gPSBhdHRlbnVhdGlvbiAtIGF0dF9zO1xcbiBhdHRlbnVhdGlvbiAvPSAxLjAgLSBhdHRfcztcXG4gcmV0dXJuIGNsYW1wKGF0dGVudWF0aW9uLCAwLjAsIDEuMCk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5lZGdlX2ZhY3RvclxcbiNpZmRlZiBTVVBQT1JUX1NUQU5EQVJEX0RFUklWQVRJVkVTXFxuZmxvYXQgZWRnZUZhY3RvcihmbG9hdCB3aWR0aClcXG57XFxuIHZlYzMgZCA9IGZ3aWR0aCh2X0JhcnljZW50cmljKTtcXG4gdmVjMyBhMyA9IHNtb290aHN0ZXAodmVjMygwLjApLCBkICogd2lkdGgsIHZfQmFyeWNlbnRyaWMpO1xcbiByZXR1cm4gbWluKG1pbihhMy54LCBhMy55KSwgYTMueik7XFxufVxcbiNlbHNlXFxuZmxvYXQgZWRnZUZhY3RvcihmbG9hdCB3aWR0aClcXG57XFxuIHJldHVybiAxLjA7XFxufVxcbiNlbmRpZlxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5lbmNvZGVfZmxvYXRcXG52ZWM0IGVuY29kZUZsb2F0KGNvbnN0IGluIGZsb2F0IGRlcHRoKVxcbntcXG4gY29uc3QgdmVjNCBiaXRTaGlmdHMgPSB2ZWM0KDI1Ni4wKjI1Ni4wKjI1Ni4wLCAyNTYuMCoyNTYuMCwgMjU2LjAsIDEuMCk7XFxuIGNvbnN0IHZlYzQgYml0X21hc2sgPSB2ZWM0KDAuMCwgMS4wLzI1Ni4wLCAxLjAvMjU2LjAsIDEuMC8yNTYuMCk7XFxuIHZlYzQgcmVzID0gZnJhY3QoZGVwdGggKiBiaXRTaGlmdHMpO1xcbiByZXMgLT0gcmVzLnh4eXogKiBiaXRfbWFzaztcXG4gcmV0dXJuIHJlcztcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbmZsb2F0IGRlY29kZUZsb2F0KGNvbnN0IGluIHZlYzQgY29sb3IpXFxue1xcbiBjb25zdCB2ZWM0IGJpdFNoaWZ0cyA9IHZlYzQoMS4wLygyNTYuMCoyNTYuMCoyNTYuMCksIDEuMC8oMjU2LjAqMjU2LjApLCAxLjAvMjU2LjAsIDEuMCk7XFxuIHJldHVybiBkb3QoY29sb3IsIGJpdFNoaWZ0cyk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5mbG9hdFxcbkBpbXBvcnQgY2xheS51dGlsLmVuY29kZV9mbG9hdFxcbkBpbXBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5yZ2JtX2RlY29kZVxcbnZlYzMgUkdCTURlY29kZSh2ZWM0IHJnYm0sIGZsb2F0IHJhbmdlKSB7XFxuIHJldHVybiByYW5nZSAqIHJnYm0ucmdiICogcmdibS5hO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucmdibV9lbmNvZGVcXG52ZWM0IFJHQk1FbmNvZGUodmVjMyBjb2xvciwgZmxvYXQgcmFuZ2UpIHtcXG4gaWYgKGRvdChjb2xvciwgY29sb3IpID09IDAuMCkge1xcbiByZXR1cm4gdmVjNCgwLjApO1xcbiB9XFxuIHZlYzQgcmdibTtcXG4gY29sb3IgLz0gcmFuZ2U7XFxuIHJnYm0uYSA9IGNsYW1wKG1heChtYXgoY29sb3IuciwgY29sb3IuZyksIG1heChjb2xvci5iLCAxZS02KSksIDAuMCwgMS4wKTtcXG4gcmdibS5hID0gY2VpbChyZ2JtLmEgKiAyNTUuMCkgLyAyNTUuMDtcXG4gcmdibS5yZ2IgPSBjb2xvciAvIHJnYm0uYTtcXG4gcmV0dXJuIHJnYm07XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibV9kZWNvZGVcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtX2VuY29kZVxcbnZlYzQgZGVjb2RlSERSKHZlYzQgY29sb3IpXFxue1xcbiNpZiBkZWZpbmVkKFJHQk1fREVDT0RFKSB8fCBkZWZpbmVkKFJHQk0pXFxuIHJldHVybiB2ZWM0KFJHQk1EZWNvZGUoY29sb3IsIDguMTIpLCAxLjApO1xcbiNlbHNlXFxuIHJldHVybiBjb2xvcjtcXG4jZW5kaWZcXG59XFxudmVjNCBlbmNvZGVIRFIodmVjNCBjb2xvcilcXG57XFxuI2lmIGRlZmluZWQoUkdCTV9FTkNPREUpIHx8IGRlZmluZWQoUkdCTSlcXG4gcmV0dXJuIFJHQk1FbmNvZGUoY29sb3IueHl6LCA4LjEyKTtcXG4jZWxzZVxcbiByZXR1cm4gY29sb3I7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5zcmdiXFxudmVjNCBzUkdCVG9MaW5lYXIoaW4gdmVjNCB2YWx1ZSkge1xcbiByZXR1cm4gdmVjNChtaXgocG93KHZhbHVlLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoMC4wNTIxMzI3MDE0KSwgdmVjMygyLjQpKSwgdmFsdWUucmdiICogMC4wNzczOTkzODA4LCB2ZWMzKGxlc3NUaGFuRXF1YWwodmFsdWUucmdiLCB2ZWMzKDAuMDQwNDUpKSkpLCB2YWx1ZS53KTtcXG59XFxudmVjNCBsaW5lYXJUb3NSR0IoaW4gdmVjNCB2YWx1ZSkge1xcbiByZXR1cm4gdmVjNChtaXgocG93KHZhbHVlLnJnYiwgdmVjMygwLjQxNjY2KSkgKiAxLjA1NSAtIHZlYzMoMC4wNTUpLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMyhsZXNzVGhhbkVxdWFsKHZhbHVlLnJnYiwgdmVjMygwLjAwMzEzMDgpKSkpLCB2YWx1ZS53KTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG4jaWZkZWYgU0tJTk5JTkdcXG5hdHRyaWJ1dGUgdmVjMyB3ZWlnaHQgOiBXRUlHSFQ7XFxuYXR0cmlidXRlIHZlYzQgam9pbnQgOiBKT0lOVDtcXG4jaWZkZWYgVVNFX1NLSU5fTUFUUklDRVNfVEVYVFVSRVxcbnVuaWZvcm0gc2FtcGxlcjJEIHNraW5NYXRyaWNlc1RleHR1cmUgOiBpZ25vcmU7XFxudW5pZm9ybSBmbG9hdCBza2luTWF0cmljZXNUZXh0dXJlU2l6ZTogaWdub3JlO1xcbm1hdDQgZ2V0U2tpbk1hdHJpeChzYW1wbGVyMkQgdGV4LCBmbG9hdCBpZHgpIHtcXG4gZmxvYXQgaiA9IGlkeCAqIDQuMDtcXG4gZmxvYXQgeCA9IG1vZChqLCBza2luTWF0cmljZXNUZXh0dXJlU2l6ZSk7XFxuIGZsb2F0IHkgPSBmbG9vcihqIC8gc2tpbk1hdHJpY2VzVGV4dHVyZVNpemUpICsgMC41O1xcbiB2ZWMyIHNjYWxlID0gdmVjMihza2luTWF0cmljZXNUZXh0dXJlU2l6ZSk7XFxuIHJldHVybiBtYXQ0KFxcbiB0ZXh0dXJlMkQodGV4LCB2ZWMyKHggKyAwLjUsIHkpIC8gc2NhbGUpLFxcbiB0ZXh0dXJlMkQodGV4LCB2ZWMyKHggKyAxLjUsIHkpIC8gc2NhbGUpLFxcbiB0ZXh0dXJlMkQodGV4LCB2ZWMyKHggKyAyLjUsIHkpIC8gc2NhbGUpLFxcbiB0ZXh0dXJlMkQodGV4LCB2ZWMyKHggKyAzLjUsIHkpIC8gc2NhbGUpXFxuICk7XFxufVxcbm1hdDQgZ2V0U2tpbk1hdHJpeChmbG9hdCBpZHgpIHtcXG4gcmV0dXJuIGdldFNraW5NYXRyaXgoc2tpbk1hdHJpY2VzVGV4dHVyZSwgaWR4KTtcXG59XFxuI2Vsc2VcXG51bmlmb3JtIG1hdDQgc2tpbk1hdHJpeFtKT0lOVF9DT1VOVF0gOiBTS0lOX01BVFJJWDtcXG5tYXQ0IGdldFNraW5NYXRyaXgoZmxvYXQgaWR4KSB7XFxuIHJldHVybiBza2luTWF0cml4W2ludChpZHgpXTtcXG59XFxuI2VuZGlmXFxuI2VuZGlmXFxuQGVuZFxcbkBleHBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbm1hdDQgc2tpbk1hdHJpeFdTID0gZ2V0U2tpbk1hdHJpeChqb2ludC54KSAqIHdlaWdodC54O1xcbmlmICh3ZWlnaHQueSA+IDFlLTQpXFxue1xcbiBza2luTWF0cml4V1MgKz0gZ2V0U2tpbk1hdHJpeChqb2ludC55KSAqIHdlaWdodC55O1xcbn1cXG5pZiAod2VpZ2h0LnogPiAxZS00KVxcbntcXG4gc2tpbk1hdHJpeFdTICs9IGdldFNraW5NYXRyaXgoam9pbnQueikgKiB3ZWlnaHQuejtcXG59XFxuZmxvYXQgd2VpZ2h0VyA9IDEuMC13ZWlnaHQueC13ZWlnaHQueS13ZWlnaHQuejtcXG5pZiAod2VpZ2h0VyA+IDFlLTQpXFxue1xcbiBza2luTWF0cml4V1MgKz0gZ2V0U2tpbk1hdHJpeChqb2ludC53KSAqIHdlaWdodFc7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5wYXJhbGxheF9jb3JyZWN0XFxudmVjMyBwYXJhbGxheENvcnJlY3QoaW4gdmVjMyBkaXIsIGluIHZlYzMgcG9zLCBpbiB2ZWMzIGJveE1pbiwgaW4gdmVjMyBib3hNYXgpIHtcXG4gdmVjMyBmaXJzdCA9IChib3hNYXggLSBwb3MpIC8gZGlyO1xcbiB2ZWMzIHNlY29uZCA9IChib3hNaW4gLSBwb3MpIC8gZGlyO1xcbiB2ZWMzIGZ1cnRoZXIgPSBtYXgoZmlyc3QsIHNlY29uZCk7XFxuIGZsb2F0IGRpc3QgPSBtaW4oZnVydGhlci54LCBtaW4oZnVydGhlci55LCBmdXJ0aGVyLnopKTtcXG4gdmVjMyBmaXhlZFBvcyA9IHBvcyArIGRpciAqIGRpc3Q7XFxuIHZlYzMgYm94Q2VudGVyID0gKGJveE1heCArIGJveE1pbikgKiAwLjU7XFxuIHJldHVybiBub3JtYWxpemUoZml4ZWRQb3MgLSBib3hDZW50ZXIpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuY2xhbXBfc2FtcGxlXFxudmVjNCBjbGFtcFNhbXBsZShjb25zdCBpbiBzYW1wbGVyMkQgdGV4dHVyZSwgY29uc3QgaW4gdmVjMiBjb29yZClcXG57XFxuI2lmZGVmIFNURVJFT1xcbiBmbG9hdCBleWUgPSBzdGVwKDAuNSwgY29vcmQueCkgKiAwLjU7XFxuIHZlYzIgY29vcmRDbGFtcGVkID0gY2xhbXAoY29vcmQsIHZlYzIoZXllLCAwLjApLCB2ZWMyKDAuNSArIGV5ZSwgMS4wKSk7XFxuI2Vsc2VcXG4gdmVjMiBjb29yZENsYW1wZWQgPSBjbGFtcChjb29yZCwgdmVjMigwLjApLCB2ZWMyKDEuMCkpO1xcbiNlbmRpZlxcbiByZXR1cm4gdGV4dHVyZTJEKHRleHR1cmUsIGNvb3JkQ2xhbXBlZCk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5BQ0VTXFxudmVjMyBBQ0VTVG9uZU1hcHBpbmcodmVjMyBjb2xvcilcXG57XFxuIGNvbnN0IGZsb2F0IEEgPSAyLjUxO1xcbiBjb25zdCBmbG9hdCBCID0gMC4wMztcXG4gY29uc3QgZmxvYXQgQyA9IDIuNDM7XFxuIGNvbnN0IGZsb2F0IEQgPSAwLjU5O1xcbiBjb25zdCBmbG9hdCBFID0gMC4xNDtcXG4gcmV0dXJuIChjb2xvciAqIChBICogY29sb3IgKyBCKSkgLyAoY29sb3IgKiAoQyAqIGNvbG9yICsgRCkgKyBFKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5iYXNpYy52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxudW5pZm9ybSB2ZWMyIHV2UmVwZWF0IDogWzEuMCwgMS4wXTtcXG51bmlmb3JtIHZlYzIgdXZPZmZzZXQgOiBbMC4wLCAwLjBdO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkIDogVEVYQ09PUkRfMDtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIGJhcnljZW50cmljO1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuYXR0cmlidXRlIHZlYzQgYV9Db2xvciA6IENPTE9SO1xcbnZhcnlpbmcgdmVjNCB2X0NvbG9yO1xcbiNlbmRpZlxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkICogdXZSZXBlYXQgKyB1dk9mZnNldDtcXG4gdl9CYXJ5Y2VudHJpYyA9IGJhcnljZW50cmljO1xcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuIHZfQ29sb3IgPSBhX0NvbG9yO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmJhc2ljLmZyYWdtZW50XFxuI2RlZmluZSBESUZGVVNFTUFQX0FMUEhBX0FMUEhBXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZU1hcDtcXG51bmlmb3JtIHZlYzMgY29sb3IgOiBbMS4wLCAxLjAsIDEuMF07XFxudW5pZm9ybSB2ZWMzIGVtaXNzaW9uIDogWzAuMCwgMC4wLCAwLjBdO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGEgOiAxLjA7XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG51bmlmb3JtIGZsb2F0IGFscGhhQ3V0b2ZmOiAwLjk7XFxuI2VuZGlmXFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbnZhcnlpbmcgdmVjNCB2X0NvbG9yO1xcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoIDogMC4wO1xcbnVuaWZvcm0gdmVjNCBsaW5lQ29sb3IgOiBbMC4wLCAwLjAsIDAuMCwgMC42XTtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG5AaW1wb3J0IGNsYXkudXRpbC5lZGdlX2ZhY3RvclxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkudXRpbC5zcmdiXFxuQGltcG9ydCBjbGF5LnV0aWwuQUNFU1xcbnZvaWQgbWFpbigpXFxue1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCBhbHBoYSk7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbiBnbF9GcmFnQ29sb3IgKj0gdl9Db2xvcjtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9ERUNPREVcXG4gZ2xfRnJhZ0NvbG9yID0gc1JHQlRvTGluZWFyKGdsX0ZyYWdDb2xvcik7XFxuI2VuZGlmXFxuI2lmZGVmIERJRkZVU0VNQVBfRU5BQkxFRFxcbiB2ZWM0IHRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRChkaWZmdXNlTWFwLCB2X1RleGNvb3JkKSk7XFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIHRleGVsID0gc1JHQlRvTGluZWFyKHRleGVsKTtcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChESUZGVVNFTUFQX0FMUEhBX0FMUEhBKVxcbiBnbF9GcmFnQ29sb3IuYSA9IHRleGVsLmE7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gdGV4ZWwucmdiO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IucmdiICs9IGVtaXNzaW9uO1xcbiBpZiggbGluZVdpZHRoID4gMC4pXFxuIHtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peChnbF9GcmFnQ29sb3IucmdiLCBsaW5lQ29sb3IucmdiLCAoMS4wIC0gZWRnZUZhY3RvcihsaW5lV2lkdGgpKSAqIGxpbmVDb2xvci5hKTtcXG4gfVxcbiNpZmRlZiBBTFBIQV9URVNUXFxuIGlmIChnbF9GcmFnQ29sb3IuYSA8IGFscGhhQ3V0b2ZmKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4jZW5kaWZcXG4jaWZkZWYgVE9ORU1BUFBJTkdcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IEFDRVNUb25lTWFwcGluZyhnbF9GcmFnQ29sb3IucmdiKTtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9FTkNPREVcXG4gZ2xfRnJhZ0NvbG9yID0gbGluZWFyVG9zUkdCKGdsX0ZyYWdDb2xvcik7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihnbF9GcmFnQ29sb3IpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LmxhbWJlcnQudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gbWF0NCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgOiBXT1JMRElOVkVSU0VUUkFOU1BPU0U7XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxudW5pZm9ybSB2ZWMyIHV2UmVwZWF0IDogWzEuMCwgMS4wXTtcXG51bmlmb3JtIHZlYzIgdXZPZmZzZXQgOiBbMC4wLCAwLjBdO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbCA6IE5PUk1BTDtcXG5hdHRyaWJ1dGUgdmVjMyBiYXJ5Y2VudHJpYztcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuYXR0cmlidXRlIHZlYzQgYV9Db2xvciA6IENPTE9SO1xcbnZhcnlpbmcgdmVjNCB2X0NvbG9yO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Ob3JtYWw7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4gdmVjMyBza2lubmVkTm9ybWFsID0gbm9ybWFsO1xcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gc2tpbm5lZE5vcm1hbCA9IChza2luTWF0cml4V1MgKiB2ZWM0KG5vcm1hbCwgMC4wKSkueHl6O1xcbiNlbmRpZlxcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KCBza2lubmVkUG9zaXRpb24sIDEuMCApO1xcbiB2X1RleGNvb3JkID0gdGV4Y29vcmQgKiB1dlJlcGVhdCArIHV2T2Zmc2V0O1xcbiB2X05vcm1hbCA9IG5vcm1hbGl6ZSggKCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgKiB2ZWM0KHNraW5uZWROb3JtYWwsIDAuMCkgKS54eXogKTtcXG4gdl9Xb3JsZFBvc2l0aW9uID0gKCB3b3JsZCAqIHZlYzQoIHNraW5uZWRQb3NpdGlvbiwgMS4wKSApLnh5ejtcXG4gdl9CYXJ5Y2VudHJpYyA9IGJhcnljZW50cmljO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gdl9Db2xvciA9IGFfQ29sb3I7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkubGFtYmVydC5mcmFnbWVudFxcbiNkZWZpbmUgRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZhcnlpbmcgdmVjMyB2X05vcm1hbDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGRpZmZ1c2VNYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzEuMCwgMS4wLCAxLjBdO1xcbnVuaWZvcm0gdmVjMyBlbWlzc2lvbiA6IFswLjAsIDAuMCwgMC4wXTtcXG51bmlmb3JtIGZsb2F0IGFscGhhIDogMS4wO1xcbiNpZmRlZiBBTFBIQV9URVNUXFxudW5pZm9ybSBmbG9hdCBhbHBoYUN1dG9mZjogMC45O1xcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoIDogMC4wO1xcbnVuaWZvcm0gdmVjNCBsaW5lQ29sb3IgOiBbMC4wLCAwLjAsIDAuMCwgMC42XTtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxudmFyeWluZyB2ZWM0IHZfQ29sb3I7XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLmFtYmllbnRfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuYW1iaWVudF9zaF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBQT0lOVF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIucG9pbnRfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgRElSRUNUSU9OQUxfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLmRpcmVjdGlvbmFsX2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIFNQT1RfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLnNwb3RfbGlnaHRcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkudXRpbC5jYWxjdWxhdGVfYXR0ZW51YXRpb25cXG5AaW1wb3J0IGNsYXkudXRpbC5lZGdlX2ZhY3RvclxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkucGx1Z2luLmNvbXB1dGVfc2hhZG93X21hcFxcbkBpbXBvcnQgY2xheS51dGlsLkFDRVNcXG52b2lkIG1haW4oKVxcbntcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgYWxwaGEpO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gZ2xfRnJhZ0NvbG9yICo9IHZfQ29sb3I7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIGdsX0ZyYWdDb2xvciA9IHNSR0JUb0xpbmVhcihnbF9GcmFnQ29sb3IpO1xcbiNlbmRpZlxcbiNpZmRlZiBESUZGVVNFTUFQX0VOQUJMRURcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQoIGRpZmZ1c2VNYXAsIHZfVGV4Y29vcmQgKTtcXG4jaWZkZWYgU1JHQl9ERUNPREVcXG4gdGV4LnJnYiA9IHBvdyh0ZXgucmdiLCB2ZWMzKDIuMikpO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IucmdiICo9IHRleC5yZ2I7XFxuI2lmZGVmIERJRkZVU0VNQVBfQUxQSEFfQUxQSEFcXG4gZ2xfRnJhZ0NvbG9yLmEgKj0gdGV4LmE7XFxuI2VuZGlmXFxuI2VuZGlmXFxuIHZlYzMgZGlmZnVzZUNvbG9yID0gdmVjMygwLjAsIDAuMCwgMC4wKTtcXG4jaWZkZWYgQU1CSUVOVF9MSUdIVF9DT1VOVFxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7XFxuIGRpZmZ1c2VDb2xvciArPSBhbWJpZW50TGlnaHRDb2xvcltfaWR4X107XFxuIH1cXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVFxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX1NIX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7e1xcbiBkaWZmdXNlQ29sb3IgKz0gY2FsY0FtYmllbnRTSExpZ2h0KF9pZHhfLCB2X05vcm1hbCkgKiBhbWJpZW50U0hMaWdodENvbG9yW19pZHhfXTtcXG4gfX1cXG4jZW5kaWZcXG4jaWZkZWYgUE9JTlRfTElHSFRfQ09VTlRcXG4jaWYgZGVmaW5lZChQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWJzUG9pbnRbUE9JTlRfTElHSFRfQ09VTlRdO1xcbiBpZiggc2hhZG93RW5hYmxlZCApXFxuIHtcXG4gY29tcHV0ZVNoYWRvd09mUG9pbnRMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic1BvaW50KTtcXG4gfVxcbiNlbmRpZlxcbiBmb3IoaW50IGkgPSAwOyBpIDwgUE9JTlRfTElHSFRfQ09VTlQ7IGkrKylcXG4ge1xcbiB2ZWMzIGxpZ2h0UG9zaXRpb24gPSBwb2ludExpZ2h0UG9zaXRpb25baV07XFxuIHZlYzMgbGlnaHRDb2xvciA9IHBvaW50TGlnaHRDb2xvcltpXTtcXG4gZmxvYXQgcmFuZ2UgPSBwb2ludExpZ2h0UmFuZ2VbaV07XFxuIHZlYzMgbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKGxpZ2h0RGlyZWN0aW9uKTtcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIHJhbmdlKTtcXG4gbGlnaHREaXJlY3Rpb24gLz0gZGlzdDtcXG4gZmxvYXQgbmRsID0gZG90KCB2X05vcm1hbCwgbGlnaHREaXJlY3Rpb24gKTtcXG4gZmxvYXQgc2hhZG93Q29udHJpYiA9IDEuMDtcXG4jaWYgZGVmaW5lZChQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGlmKCBzaGFkb3dFbmFibGVkIClcXG4ge1xcbiBzaGFkb3dDb250cmliID0gc2hhZG93Q29udHJpYnNQb2ludFtpXTtcXG4gfVxcbiNlbmRpZlxcbiBkaWZmdXNlQ29sb3IgKz0gbGlnaHRDb2xvciAqIGNsYW1wKG5kbCwgMC4wLCAxLjApICogYXR0ZW51YXRpb24gKiBzaGFkb3dDb250cmliO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIERJUkVDVElPTkFMX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBmbG9hdCBzaGFkb3dDb250cmlic0RpcltESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF07XFxuIGlmKHNoYWRvd0VuYWJsZWQpXFxuIHtcXG4gY29tcHV0ZVNoYWRvd09mRGlyZWN0aW9uYWxMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic0Rpcik7XFxuIH1cXG4jZW5kaWZcXG4gZm9yKGludCBpID0gMDsgaSA8IERJUkVDVElPTkFMX0xJR0hUX0NPVU5UOyBpKyspXFxuIHtcXG4gdmVjMyBsaWdodERpcmVjdGlvbiA9IC1kaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9uW2ldO1xcbiB2ZWMzIGxpZ2h0Q29sb3IgPSBkaXJlY3Rpb25hbExpZ2h0Q29sb3JbaV07XFxuIGZsb2F0IG5kbCA9IGRvdCh2X05vcm1hbCwgbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uKSk7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZiggc2hhZG93RW5hYmxlZCApXFxuIHtcXG4gc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzRGlyW2ldO1xcbiB9XFxuI2VuZGlmXFxuIGRpZmZ1c2VDb2xvciArPSBsaWdodENvbG9yICogY2xhbXAobmRsLCAwLjAsIDEuMCkgKiBzaGFkb3dDb250cmliO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIFNQT1RfTElHSFRfQ09VTlRcXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gZmxvYXQgc2hhZG93Q29udHJpYnNTcG90W1NQT1RfTElHSFRfQ09VTlRdO1xcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIGNvbXB1dGVTaGFkb3dPZlNwb3RMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic1Nwb3QpO1xcbiB9XFxuI2VuZGlmXFxuIGZvcihpbnQgaSA9IDA7IGkgPCBTUE9UX0xJR0hUX0NPVU5UOyBpKyspXFxuIHtcXG4gdmVjMyBsaWdodFBvc2l0aW9uID0gLXNwb3RMaWdodFBvc2l0aW9uW2ldO1xcbiB2ZWMzIHNwb3RMaWdodERpcmVjdGlvbiA9IC1ub3JtYWxpemUoIHNwb3RMaWdodERpcmVjdGlvbltpXSApO1xcbiB2ZWMzIGxpZ2h0Q29sb3IgPSBzcG90TGlnaHRDb2xvcltpXTtcXG4gZmxvYXQgcmFuZ2UgPSBzcG90TGlnaHRSYW5nZVtpXTtcXG4gZmxvYXQgYSA9IHNwb3RMaWdodFVtYnJhQW5nbGVDb3NpbmVbaV07XFxuIGZsb2F0IGIgPSBzcG90TGlnaHRQZW51bWJyYUFuZ2xlQ29zaW5lW2ldO1xcbiBmbG9hdCBmYWxsb2ZmRmFjdG9yID0gc3BvdExpZ2h0RmFsbG9mZkZhY3RvcltpXTtcXG4gdmVjMyBsaWdodERpcmVjdGlvbiA9IGxpZ2h0UG9zaXRpb24gLSB2X1dvcmxkUG9zaXRpb247XFxuIGZsb2F0IGRpc3QgPSBsZW5ndGgobGlnaHREaXJlY3Rpb24pO1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgcmFuZ2UpO1xcbiBsaWdodERpcmVjdGlvbiAvPSBkaXN0O1xcbiBmbG9hdCBjID0gZG90KHNwb3RMaWdodERpcmVjdGlvbiwgbGlnaHREaXJlY3Rpb24pO1xcbiBmbG9hdCBmYWxsb2ZmO1xcbiBmYWxsb2ZmID0gY2xhbXAoKGMgLSBhKSAvKCBiIC0gYSksIDAuMCwgMS4wKTtcXG4gZmFsbG9mZiA9IHBvdyhmYWxsb2ZmLCBmYWxsb2ZmRmFjdG9yKTtcXG4gZmxvYXQgbmRsID0gZG90KHZfTm9ybWFsLCBsaWdodERpcmVjdGlvbik7XFxuIG5kbCA9IGNsYW1wKG5kbCwgMC4wLCAxLjApO1xcbiBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiNpZiBkZWZpbmVkKFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZiggc2hhZG93RW5hYmxlZCApXFxuIHtcXG4gc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzU3BvdFtpXTtcXG4gfVxcbiNlbmRpZlxcbiBkaWZmdXNlQ29sb3IgKz0gbGlnaHRDb2xvciAqIG5kbCAqIGF0dGVudWF0aW9uICogKDEuMC1mYWxsb2ZmKSAqIHNoYWRvd0NvbnRyaWI7XFxuIH1cXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yLnJnYiAqPSBkaWZmdXNlQ29sb3I7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgKz0gZW1pc3Npb247XFxuIGlmKGxpbmVXaWR0aCA+IDAuKVxcbiB7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoZ2xfRnJhZ0NvbG9yLnJnYiwgbGluZUNvbG9yLnJnYiwgKDEuMCAtIGVkZ2VGYWN0b3IobGluZVdpZHRoKSkgKiBsaW5lQ29sb3IuYSk7XFxuIH1cXG4jaWZkZWYgQUxQSEFfVEVTVFxcbiBpZiAoZ2xfRnJhZ0NvbG9yLmEgPCBhbHBoYUN1dG9mZikge1xcbiBkaXNjYXJkO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIFRPTkVNQVBQSU5HXFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBBQ0VTVG9uZU1hcHBpbmcoZ2xfRnJhZ0NvbG9yLnJnYik7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfRU5DT0RFXFxuIGdsX0ZyYWdDb2xvciA9IGxpbmVhclRvc1JHQihnbF9GcmFnQ29sb3IpO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoZ2xfRnJhZ0NvbG9yKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS53aXJlZnJhbWUudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzMgYmFyeWNlbnRyaWM7XFxuQGltcG9ydCBjbGF5LmNodW5rLnNraW5uaW5nX2hlYWRlclxcbnZhcnlpbmcgdmVjMyB2X0JhcnljZW50cmljO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCApO1xcbiB2X0JhcnljZW50cmljID0gYmFyeWNlbnRyaWM7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkud2lyZWZyYW1lLmZyYWdtZW50XFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzAuMCwgMC4wLCAwLjBdO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGEgOiAxLjA7XFxudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGggOiAxLjA7XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuQGltcG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG52b2lkIG1haW4oKVxcbntcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGNvbG9yO1xcbiBnbF9GcmFnQ29sb3IuYSA9ICgxLjAtZWRnZUZhY3RvcihsaW5lV2lkdGgpKSAqIGFscGhhO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LnNreWJveC52ZXJ0ZXhcXG4jZGVmaW5lIFNIQURFUl9OQU1FIHNreWJveFxcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudm9pZCBtYWluKClcXG57XFxuIHZfV29ybGRQb3NpdGlvbiA9ICh3b3JsZCAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5za3lib3guZnJhZ21lbnRcXG4jZGVmaW5lIFBJIDMuMTQxNTkyNlxcbnVuaWZvcm0gbWF0NCB2aWV3SW52ZXJzZSA6IFZJRVdJTlZFUlNFO1xcbiNpZmRlZiBFUVVJUkVDVEFOR1VMQVJcXG51bmlmb3JtIHNhbXBsZXIyRCBlbnZpcm9ubWVudE1hcDtcXG4jZWxzZVxcbnVuaWZvcm0gc2FtcGxlckN1YmUgZW52aXJvbm1lbnRNYXA7XFxuI2VuZGlmXFxudW5pZm9ybSBmbG9hdCBsb2Q6IDAuMDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkudXRpbC5zcmdiXFxuQGltcG9ydCBjbGF5LnV0aWwuQUNFU1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIGV5ZVBvcyA9IHZpZXdJbnZlcnNlWzNdLnh5ejtcXG4gdmVjMyBWID0gbm9ybWFsaXplKHZfV29ybGRQb3NpdGlvbiAtIGV5ZVBvcyk7XFxuI2lmZGVmIEVRVUlSRUNUQU5HVUxBUlxcbiBmbG9hdCBwaGkgPSBhY29zKFYueSk7XFxuIGZsb2F0IHRoZXRhID0gYXRhbigtVi54LCBWLnopICsgUEkgKiAwLjU7XFxuIHZlYzIgdXYgPSB2ZWMyKHRoZXRhIC8gMi4wIC8gUEksIHBoaSAvIFBJKTtcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlMkQoZW52aXJvbm1lbnRNYXAsIGZyYWN0KHV2KSkpO1xcbiNlbHNlXFxuICNpZiBkZWZpbmVkKExPRCkgfHwgZGVmaW5lZChTVVBQT1JUX1RFWFRVUkVfTE9EKVxcbiB2ZWM0IHRleGVsID0gZGVjb2RlSERSKHRleHR1cmVDdWJlTG9kRVhUKGVudmlyb25tZW50TWFwLCBWLCBsb2QpKTtcXG4gI2Vsc2VcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZShlbnZpcm9ubWVudE1hcCwgVikpO1xcbiAjZW5kaWZcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9ERUNPREVcXG4gdGV4ZWwgPSBzUkdCVG9MaW5lYXIodGV4ZWwpO1xcbiNlbmRpZlxcbiNpZmRlZiBUT05FTUFQUElOR1xcbiB0ZXhlbC5yZ2IgPSBBQ0VTVG9uZU1hcHBpbmcodGV4ZWwucmdiKTtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9FTkNPREVcXG4gdGV4ZWwgPSBsaW5lYXJUb3NSR0IodGV4ZWwpO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNCh0ZXhlbC5yZ2IsIDEuMCkpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBsaWdodEVzc2wgZnJvbSAnLi9zb3VyY2UvaGVhZGVyL2xpZ2h0JztcclxuaW1wb3J0IHV0aWxFc3NsIGZyb20gJy4vc291cmNlL3V0aWwuZ2xzbC5qcyc7XHJcblxyXG5pbXBvcnQgYmFzaWNFc3NsIGZyb20gJy4vc291cmNlL2Jhc2ljLmdsc2wuanMnO1xyXG5pbXBvcnQgbGFtYmVydEVzc2wgZnJvbSAnLi9zb3VyY2UvbGFtYmVydC5nbHNsLmpzJztcclxuaW1wb3J0IHN0YW5kYXJkRXNzbCBmcm9tICcuL3NvdXJjZS9zdGFuZGFyZC5nbHNsLmpzJztcclxuaW1wb3J0IHdpcmVmcmFtZUVzc2wgZnJvbSAnLi9zb3VyY2Uvd2lyZWZyYW1lLmdsc2wuanMnO1xyXG5pbXBvcnQgc2t5Ym94RXNzbCBmcm9tICcuL3NvdXJjZS9za3lib3guZ2xzbC5qcyc7XHJcbmltcG9ydCBwcmV6RXNzbCBmcm9tICcuL3NvdXJjZS9wcmV6Lmdsc2wuanMnO1xyXG5cclxuaW1wb3J0IGxpYnJhcnkgZnJvbSAnLi9saWJyYXJ5JztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5cclxuXHJcblNoYWRlclsnaW1wb3J0J10obGlnaHRFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXSh1dGlsRXNzbCk7XHJcblxyXG4vLyBTb21lIGJ1aWxkIGluIHNoYWRlcnNcclxuU2hhZGVyWydpbXBvcnQnXShiYXNpY0Vzc2wpO1xyXG5TaGFkZXJbJ2ltcG9ydCddKGxhbWJlcnRFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXShzdGFuZGFyZEVzc2wpO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHdpcmVmcmFtZUVzc2wpO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHNreWJveEVzc2wpO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHByZXpFc3NsKTtcclxuXHJcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuYmFzaWMnLCBTaGFkZXIuc291cmNlKCdjbGF5LmJhc2ljLnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LmJhc2ljLmZyYWdtZW50JykpO1xyXG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LmxhbWJlcnQnLCBTaGFkZXIuc291cmNlKCdjbGF5LmxhbWJlcnQudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkubGFtYmVydC5mcmFnbWVudCcpKTtcclxubGlicmFyeS50ZW1wbGF0ZSgnY2xheS53aXJlZnJhbWUnLCBTaGFkZXIuc291cmNlKCdjbGF5LndpcmVmcmFtZS52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS53aXJlZnJhbWUuZnJhZ21lbnQnKSk7XHJcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuc2t5Ym94JywgU2hhZGVyLnNvdXJjZSgnY2xheS5za3lib3gudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkuc2t5Ym94LmZyYWdtZW50JykpO1xyXG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LnByZXonLCBTaGFkZXIuc291cmNlKCdjbGF5LnByZXoudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucHJlei5mcmFnbWVudCcpKTtcclxubGlicmFyeS50ZW1wbGF0ZSgnY2xheS5zdGFuZGFyZCcsIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmQudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmQuZnJhZ21lbnQnKSk7XHJcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuc3RhbmRhcmRNUicsIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmRNUi52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZE1SLmZyYWdtZW50JykpO1xyXG5cclxuLy8gVE9ETyBNdXN0IGV4cG9ydCBhIG1vZHVsZSBhbmQgYmUgdXNlZCBpbiB0aGUgb3RoZXIgbW9kdWxlcy4gT3IgaXQgd2lsbCBiZSB0cmVlIHNoYWtlZFxyXG5leHBvcnQgZGVmYXVsdCBsaWJyYXJ5OyIsIi8qKlxyXG4gKiBnbFRGIExvYWRlclxyXG4gKiBTcGVjaWZpY2F0aW9uIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi9ibG9iL21hc3Rlci9zcGVjaWZpY2F0aW9uL1JFQURNRS5tZFxyXG4gKlxyXG4gKiBUT0RPIE1vcnBoIHRhcmdldHNcclxuICovXHJcbmltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4uL2NvcmUvdXRpbCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5cclxuaW1wb3J0IFNjZW5lIGZyb20gJy4uL1NjZW5lJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IFN0YW5kYXJkTWF0ZXJpYWwgZnJvbSAnLi4vU3RhbmRhcmRNYXRlcmlhbCc7XHJcbmltcG9ydCBNZXNoIGZyb20gJy4uL01lc2gnO1xyXG5pbXBvcnQgTm9kZSBmcm9tICcuLi9Ob2RlJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcclxuaW1wb3J0IHNoYWRlckxpYnJhcnkgZnJvbSAnLi4vc2hhZGVyL2xpYnJhcnknO1xyXG5pbXBvcnQgU2tlbGV0b24gZnJvbSAnLi4vU2tlbGV0b24nO1xyXG5pbXBvcnQgSm9pbnQgZnJvbSAnLi4vSm9pbnQnO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IE9ydGhvZ3JhcGhpY0NhbWVyYSBmcm9tICcuLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcblxyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcblxyXG5pbXBvcnQgVHJhY2tDbGlwIGZyb20gJy4uL2FuaW1hdGlvbi9UcmFja0NsaXAnO1xyXG5pbXBvcnQgU2FtcGxlclRyYWNrIGZyb20gJy4uL2FuaW1hdGlvbi9TYW1wbGVyVHJhY2snO1xyXG5cclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuXHJcbi8vIEltcG9ydCBidWlsdGluIHNoYWRlclxyXG5pbXBvcnQgJy4uL3NoYWRlci9idWlsdGluJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5cclxudmFyIHNlbWFudGljQXR0cmlidXRlTWFwID0ge1xyXG4gICAgJ05PUk1BTCc6ICdub3JtYWwnLFxyXG4gICAgJ1BPU0lUSU9OJzogJ3Bvc2l0aW9uJyxcclxuICAgICdURVhDT09SRF8wJzogJ3RleGNvb3JkMCcsXHJcbiAgICAnVEVYQ09PUkRfMSc6ICd0ZXhjb29yZDEnLFxyXG4gICAgJ1dFSUdIVFNfMCc6ICd3ZWlnaHQnLFxyXG4gICAgJ0pPSU5UU18wJzogJ2pvaW50JyxcclxuICAgICdDT0xPUl8wJzogJ2NvbG9yJ1xyXG59O1xyXG5cclxudmFyIEFSUkFZX0NUT1JfTUFQID0ge1xyXG4gICAgNTEyMDogdmVuZG9yLkludDhBcnJheSxcclxuICAgIDUxMjE6IHZlbmRvci5VaW50OEFycmF5LFxyXG4gICAgNTEyMjogdmVuZG9yLkludDE2QXJyYXksXHJcbiAgICA1MTIzOiB2ZW5kb3IuVWludDE2QXJyYXksXHJcbiAgICA1MTI1OiB2ZW5kb3IuVWludDMyQXJyYXksXHJcbiAgICA1MTI2OiB2ZW5kb3IuRmxvYXQzMkFycmF5XHJcbn07XHJcbnZhciBTSVpFX01BUCA9IHtcclxuICAgIFNDQUxBUjogMSxcclxuICAgIFZFQzI6IDIsXHJcbiAgICBWRUMzOiAzLFxyXG4gICAgVkVDNDogNCxcclxuICAgIE1BVDI6IDQsXHJcbiAgICBNQVQzOiA5LFxyXG4gICAgTUFUNDogMTZcclxufTtcclxuXHJcbmZ1bmN0aW9uIGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIGFjY2Vzc29ySWR4LCBpc0luZGljZXMpIHtcclxuICAgIHZhciBhY2Nlc3NvckluZm8gPSBqc29uLmFjY2Vzc29yc1thY2Nlc3NvcklkeF07XHJcblxyXG4gICAgdmFyIGJ1ZmZlciA9IGxpYi5idWZmZXJWaWV3c1thY2Nlc3NvckluZm8uYnVmZmVyVmlld107XHJcbiAgICB2YXIgYnl0ZU9mZnNldCA9IGFjY2Vzc29ySW5mby5ieXRlT2Zmc2V0IHx8IDA7XHJcbiAgICB2YXIgQXJyYXlDdG9yID0gQVJSQVlfQ1RPUl9NQVBbYWNjZXNzb3JJbmZvLmNvbXBvbmVudFR5cGVdIHx8IHZlbmRvci5GbG9hdDMyQXJyYXk7XHJcblxyXG4gICAgdmFyIHNpemUgPSBTSVpFX01BUFthY2Nlc3NvckluZm8udHlwZV07XHJcbiAgICBpZiAoc2l6ZSA9PSBudWxsICYmIGlzSW5kaWNlcykge1xyXG4gICAgICAgIHNpemUgPSAxO1xyXG4gICAgfVxyXG4gICAgdmFyIGFyciA9IG5ldyBBcnJheUN0b3IoYnVmZmVyLCBieXRlT2Zmc2V0LCBzaXplICogYWNjZXNzb3JJbmZvLmNvdW50KTtcclxuXHJcbiAgICB2YXIgcXVhbnRpemVFeHRlbnNpb24gPSBhY2Nlc3NvckluZm8uZXh0ZW5zaW9ucyAmJiBhY2Nlc3NvckluZm8uZXh0ZW5zaW9uc1snV0VCM0RfcXVhbnRpemVkX2F0dHJpYnV0ZXMnXTtcclxuICAgIGlmIChxdWFudGl6ZUV4dGVuc2lvbikge1xyXG4gICAgICAgIHZhciBkZWNvZGVkQXJyID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoc2l6ZSAqIGFjY2Vzc29ySW5mby5jb3VudCk7XHJcbiAgICAgICAgdmFyIGRlY29kZU1hdHJpeCA9IHF1YW50aXplRXh0ZW5zaW9uLmRlY29kZU1hdHJpeDtcclxuICAgICAgICB2YXIgZGVjb2RlT2Zmc2V0O1xyXG4gICAgICAgIHZhciBkZWNvZGVTY2FsZTtcclxuICAgICAgICB2YXIgZGVjb2RlT2Zmc2V0ID0gbmV3IEFycmF5KHNpemUpO1xyXG4gICAgICAgIHZhciBkZWNvZGVTY2FsZSA9IG5ldyBBcnJheShzaXplKTtcclxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHNpemU7IGsrKykge1xyXG4gICAgICAgICAgICBkZWNvZGVPZmZzZXRba10gPSBkZWNvZGVNYXRyaXhbc2l6ZSAqIChzaXplICsgMSkgKyBrXTtcclxuICAgICAgICAgICAgZGVjb2RlU2NhbGVba10gPSBkZWNvZGVNYXRyaXhbayAqIChzaXplICsgMSkgKyBrXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY2Nlc3NvckluZm8uY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHNpemU7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgZGVjb2RlZEFycltpICogc2l6ZSArIGtdID0gYXJyW2kgKiBzaXplICsga10gKiBkZWNvZGVTY2FsZVtrXSArIGRlY29kZU9mZnNldFtrXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXJyID0gZGVjb2RlZEFycjtcclxuICAgIH1cclxuICAgIHJldHVybiBhcnI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJhc2U2NFRvQmluYXJ5KGlucHV0LCBjaGFyU3RhcnQpIHtcclxuICAgIHZhciBjaGFycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcclxuICAgIHZhciBsb29rdXAgPSBuZXcgVWludDhBcnJheSgxMzApO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxvb2t1cFtjaGFycy5jaGFyQ29kZUF0KGkpXSA9IGk7XHJcbiAgICB9XHJcbiAgICAvLyBJZ25vcmVcclxuICAgIHZhciBsZW4gPSBpbnB1dC5sZW5ndGggLSBjaGFyU3RhcnQ7XHJcbiAgICBpZiAoaW5wdXQuY2hhckF0KGxlbiAtIDEpID09PSAnPScpIHsgbGVuLS07IH1cclxuICAgIGlmIChpbnB1dC5jaGFyQXQobGVuIC0gMSkgPT09ICc9JykgeyBsZW4tLTsgfVxyXG5cclxuICAgIHZhciB1YXJyYXkgPSBuZXcgVWludDhBcnJheSgobGVuIC8gNCkgKiAzKTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IGNoYXJTdGFydDsgaSA8IHVhcnJheS5sZW5ndGg7KSB7XHJcbiAgICAgICAgdmFyIGMxID0gbG9va3VwW2lucHV0LmNoYXJDb2RlQXQoaisrKV07XHJcbiAgICAgICAgdmFyIGMyID0gbG9va3VwW2lucHV0LmNoYXJDb2RlQXQoaisrKV07XHJcbiAgICAgICAgdmFyIGMzID0gbG9va3VwW2lucHV0LmNoYXJDb2RlQXQoaisrKV07XHJcbiAgICAgICAgdmFyIGM0ID0gbG9va3VwW2lucHV0LmNoYXJDb2RlQXQoaisrKV07XHJcblxyXG4gICAgICAgIHVhcnJheVtpKytdID0gKGMxIDw8IDIpIHwgKGMyID4+IDQpO1xyXG4gICAgICAgIHVhcnJheVtpKytdID0gKChjMiAmIDE1KSA8PCA0KSB8IChjMyA+PiAyKTtcclxuICAgICAgICB1YXJyYXlbaSsrXSA9ICgoYzMgJiAzKSA8PCA2KSB8IGM0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1YXJyYXkuYnVmZmVyO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IGNsYXkubG9hZGVyLkdMVEYuUmVzdWx0XHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBqc29uXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICogQHByb3BlcnR5IHtjbGF5Lk5vZGV9IHJvb3ROb2RlXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5DYW1lcmFbXX0gY2FtZXJhc1xyXG4gKiBAcHJvcGVydHkge2NsYXkuVGV4dHVyZVtdfSB0ZXh0dXJlc1xyXG4gKiBAcHJvcGVydHkge2NsYXkuTWF0ZXJpYWxbXX0gbWF0ZXJpYWxzXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5Ta2VsZXRvbltdfSBza2VsZXRvbnNcclxuICogQHByb3BlcnR5IHtjbGF5Lk1lc2hbXX0gbWVzaGVzXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwW119IGNsaXBzXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5Ob2RlW119IG5vZGVzXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxvYWRlci5HTFRGXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgR0xURkxvYWRlciA9IEJhc2UuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5sb2FkZXIuR0xURiMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgcm9vdE5vZGU6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFJvb3QgcGF0aCBmb3IgdXJpIHBhcnNpbmcuXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICByb290UGF0aDogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvb3QgcGF0aCBmb3IgdGV4dHVyZSB1cmkgcGFyc2luZy4gRGVmYXVsdGx5IHVzZSB0aGUgcm9vdFBhdGhcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHRleHR1cmVSb290UGF0aDogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvb3QgcGF0aCBmb3IgYnVmZmVyIHVyaSBwYXJzaW5nLiBEZWZhdWx0bHkgdXNlIHRoZSByb290UGF0aFxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgYnVmZmVyUm9vdFBhdGg6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaGFkZXIgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSBtYXRlcmlhbHMuXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfGNsYXkuU2hhZGVyfVxyXG4gICAgICogQGRlZmF1bHQgJ2NsYXkuc3RhbmRhcmQnXHJcbiAgICAgKi9cclxuICAgIHNoYWRlcjogJ2NsYXkuc3RhbmRhcmQnLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdXNlIHtAbGluayBjbGF5LlN0YW5kYXJkTWF0ZXJpYWx9XHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB1c2VTdGFuZGFyZE1hdGVyaWFsOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGxvYWRpbmcgdGhlIGNhbWVyYXMuXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaW5jbHVkZUNhbWVyYTogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGxvYWRpbmcgdGhlIGFuaW1hdGlvbnMuXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaW5jbHVkZUFuaW1hdGlvbjogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogSWYgbG9hZGluZyB0aGUgbWVzaGVzXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaW5jbHVkZU1lc2g6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIElmIGxvYWRpbmcgdGhlIHRleHR1cmVzLlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGluY2x1ZGVUZXh0dXJlOiB0cnVlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgY3Jvc3NPcmlnaW46ICcnLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL2lzc3Vlcy82NzRcclxuICAgICAqL1xyXG4gICAgdGV4dHVyZUZsaXBZOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGNvbnZlcnQgdGV4dHVyZSB0byBwb3dlci1vZi10d29cclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICB0ZXh0dXJlQ29udmVydFRvUE9UOiBmYWxzZSxcclxuXHJcbiAgICBzaGFkZXJMaWJyYXJ5OiBudWxsXHJcbn0sXHJcbmZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghdGhpcy5zaGFkZXJMaWJyYXJ5KSB7XHJcbiAgICAgICAgdGhpcy5zaGFkZXJMaWJyYXJ5ID0gc2hhZGVyTGlicmFyeS5jcmVhdGVMaWJyYXJ5KCk7XHJcbiAgICB9XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5sb2FkZXIuR0xURi5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXHJcbiAgICAgKi9cclxuICAgIGxvYWQ6IGZ1bmN0aW9uICh1cmwpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGlzQmluYXJ5ID0gdXJsLmVuZHNXaXRoKCcuZ2xiJyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJvb3RQYXRoID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5yb290UGF0aCA9IHVybC5zbGljZSgwLCB1cmwubGFzdEluZGV4T2YoJy8nKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZW5kb3IucmVxdWVzdC5nZXQoe1xyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgb25wcm9ncmVzczogZnVuY3Rpb24gKHBlcmNlbnQsIGxvYWRlZCwgdG90YWwpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcigncHJvZ3Jlc3MnLCBwZXJjZW50LCBsb2FkZWQsIHRvdGFsKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25lcnJvcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignZXJyb3InLCBlKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBpc0JpbmFyeSA/ICdhcnJheWJ1ZmZlcicgOiAndGV4dCcsXHJcbiAgICAgICAgICAgIG9ubG9hZDogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0JpbmFyeSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VCaW5hcnkoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFyc2UgZ2xURiBiaW5hcnlcclxuICAgICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGJ1ZmZlclxyXG4gICAgICogQHJldHVybiB7Y2xheS5sb2FkZXIuR0xURi5SZXN1bHR9XHJcbiAgICAgKi9cclxuICAgIHBhcnNlQmluYXJ5OiBmdW5jdGlvbiAoYnVmZmVyKSB7XHJcbiAgICAgICAgdmFyIGhlYWRlciA9IG5ldyBVaW50MzJBcnJheShidWZmZXIsIDAsIDQpO1xyXG4gICAgICAgIGlmIChoZWFkZXJbMF0gIT09IDB4NDY1NDZDNjcpIHtcclxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsICdJbnZhbGlkIGdsVEYgYmluYXJ5IGZvcm1hdDogSW52YWxpZCBoZWFkZXInKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaGVhZGVyWzBdIDwgMikge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2Vycm9yJywgJ09ubHkgZ2xURjIuMCBpcyBzdXBwb3J0ZWQuJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIsIDEyKTtcclxuXHJcbiAgICAgICAgdmFyIGpzb247XHJcbiAgICAgICAgdmFyIGJ1ZmZlcnMgPSBbXTtcclxuICAgICAgICAvLyBSZWFkIGNodW5rc1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YVZpZXcuYnl0ZUxlbmd0aDspIHtcclxuICAgICAgICAgICAgdmFyIGNodW5rTGVuZ3RoID0gZGF0YVZpZXcuZ2V0VWludDMyKGksIHRydWUpO1xyXG4gICAgICAgICAgICBpICs9IDQ7XHJcbiAgICAgICAgICAgIHZhciBjaHVua1R5cGUgPSBkYXRhVmlldy5nZXRVaW50MzIoaSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGkgKz0gNDtcclxuXHJcbiAgICAgICAgICAgIC8vIGpzb25cclxuICAgICAgICAgICAgaWYgKGNodW5rVHlwZSA9PT0gMHg0RTRGNTM0QSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlciwgaSArIDEyLCBjaHVua0xlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPLCBmb3IgdGhlIGJyb3dzZXIgbm90IHN1cHBvcnQgVGV4dERlY29kZXIuXHJcbiAgICAgICAgICAgICAgICB2YXIgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0ciA9IGRlY29kZXIuZGVjb2RlKGFycik7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKHN0cik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCAnSlNPTiBQYXJzZSBlcnJvcjonICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY2h1bmtUeXBlID09PSAweDAwNEU0OTQyKSB7XHJcbiAgICAgICAgICAgICAgICBidWZmZXJzLnB1c2goYnVmZmVyLnNsaWNlKGkgKyAxMiwgaSArIDEyICsgY2h1bmtMZW5ndGgpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaSArPSBjaHVua0xlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFqc29uKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCAnSW52YWxpZCBnbFRGIGJpbmFyeSBmb3JtYXQ6IENhblxcJ3QgZmluZCBKU09OLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZShqc29uLCBidWZmZXJzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0ganNvblxyXG4gICAgICogQHBhcmFtIHtBcnJheUJ1ZmZlcltdfSBbYnVmZmVyXVxyXG4gICAgICogQHJldHVybiB7Y2xheS5sb2FkZXIuR0xURi5SZXN1bHR9XHJcbiAgICAgKi9cclxuICAgIHBhcnNlOiBmdW5jdGlvbiAoanNvbiwgYnVmZmVycykge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgdmFyIGxpYiA9IHtcclxuICAgICAgICAgICAganNvbjoganNvbixcclxuICAgICAgICAgICAgYnVmZmVyczogW10sXHJcbiAgICAgICAgICAgIGJ1ZmZlclZpZXdzOiBbXSxcclxuICAgICAgICAgICAgbWF0ZXJpYWxzOiBbXSxcclxuICAgICAgICAgICAgdGV4dHVyZXM6IFtdLFxyXG4gICAgICAgICAgICBtZXNoZXM6IFtdLFxyXG4gICAgICAgICAgICBqb2ludHM6IFtdLFxyXG4gICAgICAgICAgICBza2VsZXRvbnM6IFtdLFxyXG4gICAgICAgICAgICBjYW1lcmFzOiBbXSxcclxuICAgICAgICAgICAgbm9kZXM6IFtdLFxyXG4gICAgICAgICAgICBjbGlwczogW11cclxuICAgICAgICB9O1xyXG4gICAgICAgIC8vIE1vdW50IG9uIHRoZSByb290IG5vZGUgaWYgZ2l2ZW5cclxuICAgICAgICB2YXIgcm9vdE5vZGUgPSB0aGlzLnJvb3ROb2RlIHx8IG5ldyBTY2VuZSgpO1xyXG5cclxuICAgICAgICB2YXIgbG9hZGluZyA9IDA7XHJcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tMb2FkKCkge1xyXG4gICAgICAgICAgICBsb2FkaW5nLS07XHJcbiAgICAgICAgICAgIGlmIChsb2FkaW5nID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBhZnRlckxvYWRCdWZmZXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBhbHJlYWR5IGxvYWQgYnVmZmVyc1xyXG4gICAgICAgIGlmIChidWZmZXJzKSB7XHJcbiAgICAgICAgICAgIGxpYi5idWZmZXJzID0gYnVmZmVycy5zbGljZSgpO1xyXG4gICAgICAgICAgICBhZnRlckxvYWRCdWZmZXIodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBMb2FkIGJ1ZmZlcnNcclxuICAgICAgICAgICAgdXRpbC5lYWNoKGpzb24uYnVmZmVycywgZnVuY3Rpb24gKGJ1ZmZlckluZm8sIGlkeCkge1xyXG4gICAgICAgICAgICAgICAgbG9hZGluZysrO1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhdGggPSBidWZmZXJJbmZvLnVyaTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZWxmLl9sb2FkQnVmZmVycyhwYXRoLCBmdW5jdGlvbiAoYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGliLmJ1ZmZlcnNbaWR4XSA9IGJ1ZmZlcjtcclxuICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWQoKTtcclxuICAgICAgICAgICAgICAgIH0sIGNoZWNrTG9hZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZ2V0UmVzdWx0KCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAganNvbjoganNvbixcclxuICAgICAgICAgICAgICAgIHNjZW5lOiBzZWxmLnJvb3ROb2RlID8gbnVsbCA6IHJvb3ROb2RlLFxyXG4gICAgICAgICAgICAgICAgcm9vdE5vZGU6IHNlbGYucm9vdE5vZGUgPyByb290Tm9kZSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBjYW1lcmFzOiBsaWIuY2FtZXJhcyxcclxuICAgICAgICAgICAgICAgIHRleHR1cmVzOiBsaWIudGV4dHVyZXMsXHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbHM6IGxpYi5tYXRlcmlhbHMsXHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbnM6IGxpYi5za2VsZXRvbnMsXHJcbiAgICAgICAgICAgICAgICBtZXNoZXM6IGxpYi5pbnN0YW5jZWRNZXNoZXMsXHJcbiAgICAgICAgICAgICAgICBjbGlwczogbGliLmNsaXBzLFxyXG4gICAgICAgICAgICAgICAgbm9kZXM6IGxpYi5ub2Rlc1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gYWZ0ZXJMb2FkQnVmZmVyKGltbWVkaWF0ZWx5KSB7XHJcbiAgICAgICAgICAgIC8vIEJ1ZmZlciBub3QgbG9hZCBjb21wbGV0ZS5cclxuICAgICAgICAgICAgaWYgKGxpYi5idWZmZXJzLmxlbmd0aCAhPT0ganNvbi5idWZmZXJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdlcnJvcicsICdCdWZmZXIgbm90IGxvYWQgY29tcGxldGUuJyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAganNvbi5idWZmZXJWaWV3cy5mb3JFYWNoKGZ1bmN0aW9uIChidWZmZXJWaWV3SW5mbywgaWR4KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBQRU5ESU5HIFBlcmZvcm1hbmNlXHJcbiAgICAgICAgICAgICAgICBsaWIuYnVmZmVyVmlld3NbaWR4XSA9IGxpYi5idWZmZXJzW2J1ZmZlclZpZXdJbmZvLmJ1ZmZlcl1cclxuICAgICAgICAgICAgICAgICAgICAuc2xpY2UoYnVmZmVyVmlld0luZm8uYnl0ZU9mZnNldCB8fCAwLCAoYnVmZmVyVmlld0luZm8uYnl0ZU9mZnNldCB8fCAwKSArIChidWZmZXJWaWV3SW5mby5ieXRlTGVuZ3RoIHx8IDApKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxpYi5idWZmZXJzID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHNlbGYuaW5jbHVkZU1lc2gpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmluY2x1ZGVUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VUZXh0dXJlcyhqc29uLCBsaWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VNYXRlcmlhbHMoanNvbiwgbGliKTtcclxuICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlTWVzaGVzKGpzb24sIGxpYik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2VsZi5fcGFyc2VOb2Rlcyhqc29uLCBsaWIpO1xyXG5cclxuICAgICAgICAgICAgLy8gT25seSBzdXBwb3J0IG9uZSBzY2VuZS5cclxuICAgICAgICAgICAgaWYgKGpzb24uc2NlbmVzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2NlbmVJbmZvID0ganNvbi5zY2VuZXNbanNvbi5zY2VuZSB8fCAwXTsgLy8gRGVmYXVsdCB1c2UgdGhlIGZpcnN0IHNjZW5lLlxyXG4gICAgICAgICAgICAgICAgaWYgKHNjZW5lSW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NlbmVJbmZvLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gbGliLm5vZGVzW3NjZW5lSW5mby5ub2Rlc1tpXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3ROb2RlLmFkZChub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxmLmluY2x1ZGVNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZVNraW5zKGpzb24sIGxpYik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxmLmluY2x1ZGVBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlQW5pbWF0aW9ucyhqc29uLCBsaWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpbW1lZGlhdGVseSkge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdzdWNjZXNzJywgZ2V0UmVzdWx0KCkpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3N1Y2Nlc3MnLCBnZXRSZXN1bHQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBnZXRSZXN1bHQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCaW5hcnkgZmlsZSBwYXRoIHJlc29sdmVyLiBVc2VyIGNhbiBvdmVycmlkZSBpdFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcclxuICAgICAqL1xyXG4gICAgcmVzb2x2ZUJ1ZmZlclBhdGg6IGZ1bmN0aW9uIChwYXRoKSB7XHJcbiAgICAgICAgaWYgKHBhdGggJiYgcGF0aC5tYXRjaCgvXmRhdGE6KC4qPyliYXNlNjQsLykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhdGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcm9vdFBhdGggPSB0aGlzLmJ1ZmZlclJvb3RQYXRoO1xyXG4gICAgICAgIGlmIChyb290UGF0aCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJvb3RQYXRoID0gdGhpcy5yb290UGF0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHV0aWwucmVsYXRpdmUyYWJzb2x1dGUocGF0aCwgcm9vdFBhdGgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRleHR1cmUgZmlsZSBwYXRoIHJlc29sdmVyLiBVc2VyIGNhbiBvdmVycmlkZSBpdFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcclxuICAgICAqL1xyXG4gICAgcmVzb2x2ZVRleHR1cmVQYXRoOiBmdW5jdGlvbiAocGF0aCkge1xyXG4gICAgICAgIGlmIChwYXRoICYmIHBhdGgubWF0Y2goL15kYXRhOiguKj8pYmFzZTY0LC8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJvb3RQYXRoID0gdGhpcy50ZXh0dXJlUm9vdFBhdGg7XHJcbiAgICAgICAgaWYgKHJvb3RQYXRoID09IG51bGwpIHtcclxuICAgICAgICAgICAgcm9vdFBhdGggPSB0aGlzLnJvb3RQYXRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdXRpbC5yZWxhdGl2ZTJhYnNvbHV0ZShwYXRoLCByb290UGF0aCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnVmZmVyIGxvYWRlclxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9XHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbnN1Y2Nlc3NcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9uZXJyb3JcclxuICAgICAqL1xyXG4gICAgbG9hZEJ1ZmZlcjogZnVuY3Rpb24gKHBhdGgsIG9uc3VjY2Vzcywgb25lcnJvcikge1xyXG4gICAgICAgIHZlbmRvci5yZXF1ZXN0LmdldCh7XHJcbiAgICAgICAgICAgIHVybDogcGF0aCxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxyXG4gICAgICAgICAgICBvbmxvYWQ6IGZ1bmN0aW9uIChidWZmZXIpIHtcclxuICAgICAgICAgICAgICAgIG9uc3VjY2VzcyAmJiBvbnN1Y2Nlc3MoYnVmZmVyKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25lcnJvcjogZnVuY3Rpb24gKGJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgb25lcnJvciAmJiBvbmVycm9yKGJ1ZmZlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgX2dldFNoYWRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zaGFkZXIgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNoYWRlckxpYnJhcnkuZ2V0KHRoaXMuc2hhZGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5zaGFkZXIgaW5zdGFuY2VvZiBTaGFkZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hhZGVyO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2xvYWRCdWZmZXJzOiBmdW5jdGlvbiAocGF0aCwgb25zdWNjZXNzLCBvbmVycm9yKSB7XHJcbiAgICAgICAgdmFyIGJhc2U2NFByZWZpeCA9ICdkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsJztcclxuICAgICAgICB2YXIgc3RyU3RhcnQgPSBwYXRoLnN1YnN0cigwLCBiYXNlNjRQcmVmaXgubGVuZ3RoKTtcclxuICAgICAgICBpZiAoc3RyU3RhcnQgPT09IGJhc2U2NFByZWZpeCkge1xyXG4gICAgICAgICAgICBvbnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICBiYXNlNjRUb0JpbmFyeShwYXRoLCBiYXNlNjRQcmVmaXgubGVuZ3RoKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkQnVmZmVyKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlQnVmZmVyUGF0aChwYXRoKSxcclxuICAgICAgICAgICAgICAgIG9uc3VjY2VzcyxcclxuICAgICAgICAgICAgICAgIG9uZXJyb3JcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi9pc3N1ZXMvMTAwXHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvaXNzdWVzLzE5M1xyXG4gICAgX3BhcnNlU2tpbnM6IGZ1bmN0aW9uIChqc29uLCBsaWIpIHtcclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIHNrZWxldG9ucyBhbmQgam9pbnRzXHJcbiAgICAgICAgdmFyIGhhdmVJbnZCaW5kTWF0cmljZXMgPSBmYWxzZTtcclxuICAgICAgICB1dGlsLmVhY2goanNvbi5za2lucywgZnVuY3Rpb24gKHNraW5JbmZvLCBpZHgpIHtcclxuICAgICAgICAgICAgdmFyIHNrZWxldG9uID0gbmV3IFNrZWxldG9uKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHNraW5JbmZvLm5hbWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2tpbkluZm8uam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9kZUlkeCA9IHNraW5JbmZvLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBub2RlID0gbGliLm5vZGVzW25vZGVJZHhdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50ID0gbmV3IEpvaW50KHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBub2RlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBpbmRleDogc2tlbGV0b24uam9pbnRzLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbi5qb2ludHMucHVzaChqb2ludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2tlbGV0b24ucmVsYXRpdmVSb290Tm9kZSA9IGxpYi5ub2Rlc1tza2luSW5mby5za2VsZXRvbl0gfHwgdGhpcy5yb290Tm9kZTtcclxuICAgICAgICAgICAgaWYgKHNraW5JbmZvLmludmVyc2VCaW5kTWF0cmljZXMpIHtcclxuICAgICAgICAgICAgICAgIGhhdmVJbnZCaW5kTWF0cmljZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIElCTUluZm8gPSBqc29uLmFjY2Vzc29yc1tza2luSW5mby5pbnZlcnNlQmluZE1hdHJpY2VzXTtcclxuICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBsaWIuYnVmZmVyVmlld3NbSUJNSW5mby5idWZmZXJWaWV3XTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gSUJNSW5mby5ieXRlT2Zmc2V0IHx8IDA7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IElCTUluZm8uY291bnQgKiAxNjtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgc2l6ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2tlbGV0b24uc2V0Sm9pbnRNYXRyaWNlc0FycmF5KGFycmF5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNrZWxldG9uLnVwZGF0ZUpvaW50TWF0cmljZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsaWIuc2tlbGV0b25zW2lkeF0gPSBza2VsZXRvbjtcclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZW5hYmxlU2tpbm5pbmdGb3JNZXNoKG1lc2gsIHNrZWxldG9uLCBqb2ludEluZGljZXMpIHtcclxuICAgICAgICAgICAgbWVzaC5za2VsZXRvbiA9IHNrZWxldG9uO1xyXG4gICAgICAgICAgICBtZXNoLmpvaW50cyA9IGpvaW50SW5kaWNlcztcclxuXHJcbiAgICAgICAgICAgIGlmICghc2tlbGV0b24uYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgICAgIHNrZWxldG9uLnVwZGF0ZUpvaW50c0JvdW5kaW5nQm94ZXMobWVzaC5nZW9tZXRyeSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGdldEpvaW50SW5kZXgoam9pbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGpvaW50LmluZGV4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24ubm9kZXMsIGZ1bmN0aW9uIChub2RlSW5mbywgbm9kZUlkeCkge1xyXG4gICAgICAgICAgICBpZiAobm9kZUluZm8uc2tpbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2tpbklkeCA9IG5vZGVJbmZvLnNraW47XHJcbiAgICAgICAgICAgICAgICB2YXIgc2tlbGV0b24gPSBsaWIuc2tlbGV0b25zW3NraW5JZHhdO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBub2RlID0gbGliLm5vZGVzW25vZGVJZHhdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50SW5kaWNlcyA9IHNrZWxldG9uLmpvaW50cy5tYXAoZ2V0Sm9pbnRJbmRleCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIE1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVTa2lubmluZ0Zvck1lc2gobm9kZSwgc2tlbGV0b24sIGpvaW50SW5kaWNlcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBNZXNoIGhhdmUgbXVsdGlwbGUgcHJpbWl0aXZlc1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4oKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZVNraW5uaW5nRm9yTWVzaChjaGlsZHJlbltpXSwgc2tlbGV0b24sIGpvaW50SW5kaWNlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZVRleHR1cmVzOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24udGV4dHVyZXMsIGZ1bmN0aW9uICh0ZXh0dXJlSW5mbywgaWR4KXtcclxuICAgICAgICAgICAgLy8gc2FtcGxlcnMgaXMgb3B0aW9uYWxcclxuICAgICAgICAgICAgdmFyIHNhbXBsZXJJbmZvID0gKGpzb24uc2FtcGxlcnMgJiYganNvbi5zYW1wbGVyc1t0ZXh0dXJlSW5mby5zYW1wbGVyXSkgfHwge307XHJcbiAgICAgICAgICAgIHZhciBwYXJhbWV0ZXJzID0ge307XHJcbiAgICAgICAgICAgIFsnd3JhcFMnLCAnd3JhcFQnLCAnbWFnRmlsdGVyJywgJ21pbkZpbHRlciddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHNhbXBsZXJJbmZvW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW25hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB1dGlsLmRlZmF1bHRzKHBhcmFtZXRlcnMsIHtcclxuICAgICAgICAgICAgICAgIHdyYXBTOiBUZXh0dXJlLlJFUEVBVCxcclxuICAgICAgICAgICAgICAgIHdyYXBUOiBUZXh0dXJlLlJFUEVBVCxcclxuICAgICAgICAgICAgICAgIGZsaXBZOiB0aGlzLnRleHR1cmVGbGlwWSxcclxuICAgICAgICAgICAgICAgIGNvbnZlcnRUb1BPVDogdGhpcy50ZXh0dXJlQ29udmVydFRvUE9UXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRleHR1cmVJbmZvLnRhcmdldCB8fCBnbGVudW0uVEVYVFVSRV8yRDtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdCA9IHRleHR1cmVJbmZvLmZvcm1hdDtcclxuICAgICAgICAgICAgaWYgKGZvcm1hdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmZvcm1hdCA9IGZvcm1hdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gZ2xlbnVtLlRFWFRVUkVfMkQpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRChwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHZhciBpbWFnZUluZm8gPSBqc29uLmltYWdlc1t0ZXh0dXJlSW5mby5zb3VyY2VdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHVyaTtcclxuICAgICAgICAgICAgICAgIGlmIChpbWFnZUluZm8udXJpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJpID0gdGhpcy5yZXNvbHZlVGV4dHVyZVBhdGgoaW1hZ2VJbmZvLnVyaSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpbWFnZUluZm8uYnVmZmVyVmlldyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJpID0gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbbGliLmJ1ZmZlclZpZXdzW2ltYWdlSW5mby5idWZmZXJWaWV3XV0sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogaW1hZ2VJbmZvLm1pbWVUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHVyaSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHR1cmUubG9hZCh1cmksIHRoaXMuY3Jvc3NPcmlnaW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpYi50ZXh0dXJlc1tpZHhdID0gdGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfS0hSQ29tbW9uTWF0ZXJpYWxUb1N0YW5kYXJkOiBmdW5jdGlvbiAobWF0ZXJpYWxJbmZvLCBsaWIpIHtcclxuICAgICAgICB2YXIgdW5pZm9ybXMgPSB7fTtcclxuICAgICAgICB2YXIgY29tbW9uTWF0ZXJpYWxJbmZvID0gbWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnNbJ0tIUl9tYXRlcmlhbHNfY29tbW9uJ107XHJcbiAgICAgICAgdW5pZm9ybXMgPSBjb21tb25NYXRlcmlhbEluZm8udmFsdWVzIHx8IHt9O1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHVuaWZvcm1zLmRpZmZ1c2UgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIHVuaWZvcm1zLmRpZmZ1c2UgPSBsaWIudGV4dHVyZXNbdW5pZm9ybXMuZGlmZnVzZV0gfHwgbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiB1bmlmb3Jtcy5lbWlzc2lvbiA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgdW5pZm9ybXMuZW1pc3Npb24gPSBsaWIudGV4dHVyZXNbdW5pZm9ybXMuZW1pc3Npb25dIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZW5hYmxlZFRleHR1cmVzID0gW107XHJcbiAgICAgICAgaWYgKHVuaWZvcm1zWydkaWZmdXNlJ10gaW5zdGFuY2VvZiBUZXh0dXJlMkQpIHtcclxuICAgICAgICAgICAgZW5hYmxlZFRleHR1cmVzLnB1c2goJ2RpZmZ1c2VNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdub3JtYWxNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHVuaWZvcm1zWydlbWlzc2lvbiddIGluc3RhbmNlb2YgVGV4dHVyZTJEKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdlbWlzc2l2ZU1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIGlzU3RhbmRhcmRNYXRlcmlhbCA9IHRoaXMudXNlU3RhbmRhcmRNYXRlcmlhbDtcclxuICAgICAgICBpZiAoaXNTdGFuZGFyZE1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsID0gbmV3IFN0YW5kYXJkTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbWF0ZXJpYWxJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBkb3VibGVTaWRlZDogbWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbWF0ZXJpYWxJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBzaGFkZXI6IHRoaXMuX2dldFNoYWRlcigpXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfUk9VR0hORVNTJyk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX01FVEFMTkVTUycpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZCkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHVuaWZvcm1zLnRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlcHRoTWFzayA9IGZhbHNlO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZXB0aFRlc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC50cmFuc3BhcmVudCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGlmZnVzZVByb3AgPSB1bmlmb3Jtc1snZGlmZnVzZSddO1xyXG4gICAgICAgIGlmIChkaWZmdXNlUHJvcCkge1xyXG4gICAgICAgICAgICAvLyBDb2xvclxyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkaWZmdXNlUHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGRpZmZ1c2VQcm9wID0gZGlmZnVzZVByb3Auc2xpY2UoMCwgMyk7XHJcbiAgICAgICAgICAgICAgICBpc1N0YW5kYXJkTWF0ZXJpYWwgPyAobWF0ZXJpYWwuY29sb3IgPSBkaWZmdXNlUHJvcClcclxuICAgICAgICAgICAgICAgICAgICA6IG1hdGVyaWFsLnNldCgnY29sb3InLCBkaWZmdXNlUHJvcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7IC8vIFRleHR1cmVcclxuICAgICAgICAgICAgICAgIGlzU3RhbmRhcmRNYXRlcmlhbCA/IChtYXRlcmlhbC5kaWZmdXNlTWFwID0gZGlmZnVzZVByb3ApXHJcbiAgICAgICAgICAgICAgICAgICAgOiBtYXRlcmlhbC5zZXQoJ2RpZmZ1c2VNYXAnLCBkaWZmdXNlUHJvcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGVtaXNzaW9uUHJvcCA9IHVuaWZvcm1zWydlbWlzc2lvbiddO1xyXG4gICAgICAgIGlmIChlbWlzc2lvblByb3AgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBDb2xvclxyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbWlzc2lvblByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBlbWlzc2lvblByb3AgPSBlbWlzc2lvblByb3Auc2xpY2UoMCwgMyk7XHJcbiAgICAgICAgICAgICAgICBpc1N0YW5kYXJkTWF0ZXJpYWwgPyAobWF0ZXJpYWwuZW1pc3Npb24gPSBlbWlzc2lvblByb3ApXHJcbiAgICAgICAgICAgICAgICAgICAgOiBtYXRlcmlhbC5zZXQoJ2VtaXNzaW9uJywgZW1pc3Npb25Qcm9wKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHsgLy8gVGV4dHVyZVxyXG4gICAgICAgICAgICAgICAgaXNTdGFuZGFyZE1hdGVyaWFsID8gKG1hdGVyaWFsLmVtaXNzaXZlTWFwID0gZW1pc3Npb25Qcm9wKVxyXG4gICAgICAgICAgICAgICAgICAgIDogbWF0ZXJpYWwuc2V0KCdlbWlzc2l2ZU1hcCcsIGVtaXNzaW9uUHJvcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyB0ZXhDb29yZFxyXG4gICAgICAgICAgICB2YXIgbm9ybWFsVGV4dHVyZUluZGV4ID0gbWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUuaW5kZXg7XHJcbiAgICAgICAgICAgIGlmIChpc1N0YW5kYXJkTWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLm5vcm1hbE1hcCA9IGxpYi50ZXh0dXJlc1tub3JtYWxUZXh0dXJlSW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ25vcm1hbE1hcCcsIGxpYi50ZXh0dXJlc1tub3JtYWxUZXh0dXJlSW5kZXhdIHx8IG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1bmlmb3Jtc1snc2hpbmluZXNzJ10gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB2YXIgZ2xvc3NpbmVzcyA9IE1hdGgubG9nKHVuaWZvcm1zWydzaGluaW5lc3MnXSkgLyBNYXRoLmxvZyg4MTkyKTtcclxuICAgICAgICAgICAgLy8gVW5pZm9ybSBnbG9zc2luZXNzXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnZ2xvc3NpbmVzcycsIGdsb3NzaW5lc3MpO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ3JvdWdobmVzcycsIDEgLSBnbG9zc2luZXNzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnZ2xvc3NpbmVzcycsIDAuMyk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgncm91Z2huZXNzJywgMC4zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHVuaWZvcm1zWydzcGVjdWxhciddICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdzcGVjdWxhckNvbG9yJywgdW5pZm9ybXNbJ3NwZWN1bGFyJ10uc2xpY2UoMCwgMykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodW5pZm9ybXNbJ3RyYW5zcGFyZW5jeSddICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdhbHBoYScsIHVuaWZvcm1zWyd0cmFuc3BhcmVuY3knXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWw7XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYnJNZXRhbGxpY1JvdWdobmVzc1RvU3RhbmRhcmQ6IGZ1bmN0aW9uIChtYXRlcmlhbEluZm8sIG1ldGFsbGljUm91Z2huZXNzTWF0SW5mbywgbGliKSB7XHJcbiAgICAgICAgdmFyIGFscGhhVGVzdCA9IG1hdGVyaWFsSW5mby5hbHBoYU1vZGUgPT09ICdNQVNLJztcclxuXHJcbiAgICAgICAgdmFyIGlzU3RhbmRhcmRNYXRlcmlhbCA9IHRoaXMudXNlU3RhbmRhcmRNYXRlcmlhbDtcclxuICAgICAgICB2YXIgbWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIGRpZmZ1c2VNYXAsIHJvdWdobmVzc01hcCwgbWV0YWxuZXNzTWFwLCBub3JtYWxNYXAsIGVtaXNzaXZlTWFwLCBvY2NsdXNpb25NYXA7XHJcbiAgICAgICAgdmFyIGVuYWJsZWRUZXh0dXJlcyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc2NhbGFyIG11bHRpcGxpZXIgYXBwbGllZCB0byBlYWNoIG5vcm1hbCB2ZWN0b3Igb2YgdGhlIG5vcm1hbCB0ZXh0dXJlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFhYWCBUaGlzIHZhbHVlIGlzIGlnbm9yZWQgaWYgYG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlYCBpcyBub3Qgc3BlY2lmaWVkLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZhciBub3JtYWxTY2FsZSA9IDEuMDtcclxuXHJcbiAgICAgICAgLy8gVE9ETyB0ZXhDb29yZFxyXG4gICAgICAgIGlmIChtZXRhbGxpY1JvdWdobmVzc01hdEluZm8uYmFzZUNvbG9yVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwID0gbGliLnRleHR1cmVzW21ldGFsbGljUm91Z2huZXNzTWF0SW5mby5iYXNlQ29sb3JUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdkaWZmdXNlTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtZXRhbGxpY1JvdWdobmVzc01hdEluZm8ubWV0YWxsaWNSb3VnaG5lc3NUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIHJvdWdobmVzc01hcCA9IG1ldGFsbmVzc01hcCA9IGxpYi50ZXh0dXJlc1ttZXRhbGxpY1JvdWdobmVzc01hdEluZm8ubWV0YWxsaWNSb3VnaG5lc3NUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICByb3VnaG5lc3NNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ21ldGFsbmVzc01hcCcsICdyb3VnaG5lc3NNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlKSB7XHJcblxyXG4gICAgICAgICAgICBub3JtYWxNYXAgPSBsaWIudGV4dHVyZXNbbWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIG5vcm1hbE1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnbm9ybWFsTWFwJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlLnNjYWxlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsU2NhbGUgPSBtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZS5zY2FsZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5lbWlzc2l2ZVRleHR1cmUpIHtcclxuICAgICAgICAgICAgZW1pc3NpdmVNYXAgPSBsaWIudGV4dHVyZXNbbWF0ZXJpYWxJbmZvLmVtaXNzaXZlVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgZW1pc3NpdmVNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ2VtaXNzaXZlTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ub2NjbHVzaW9uVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBvY2NsdXNpb25NYXAgPSBsaWIudGV4dHVyZXNbbWF0ZXJpYWxJbmZvLm9jY2x1c2lvblRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIG9jY2x1c2lvbk1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnb2NjbHVzaW9uTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBiYXNlQ29sb3IgPSBtZXRhbGxpY1JvdWdobmVzc01hdEluZm8uYmFzZUNvbG9yRmFjdG9yIHx8IFsxLCAxLCAxLCAxXTtcclxuXHJcbiAgICAgICAgdmFyIGNvbW1vblByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICAgIGRpZmZ1c2VNYXA6IGRpZmZ1c2VNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgcm91Z2huZXNzTWFwOiByb3VnaG5lc3NNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgbWV0YWxuZXNzTWFwOiBtZXRhbG5lc3NNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgbm9ybWFsTWFwOiBub3JtYWxNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgb2NjbHVzaW9uTWFwOiBvY2NsdXNpb25NYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgZW1pc3NpdmVNYXA6IGVtaXNzaXZlTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGNvbG9yOiBiYXNlQ29sb3Iuc2xpY2UoMCwgMyksXHJcbiAgICAgICAgICAgIGFscGhhOiBiYXNlQ29sb3JbM10sXHJcbiAgICAgICAgICAgIG1ldGFsbmVzczogbWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLm1ldGFsbGljRmFjdG9yIHx8IDAsXHJcbiAgICAgICAgICAgIHJvdWdobmVzczogbWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLnJvdWdobmVzc0ZhY3RvciB8fCAwLFxyXG4gICAgICAgICAgICBlbWlzc2lvbjogbWF0ZXJpYWxJbmZvLmVtaXNzaXZlRmFjdG9yIHx8IFswLCAwLCAwXSxcclxuICAgICAgICAgICAgZW1pc3Npb25JbnRlbnNpdHk6IDEsXHJcbiAgICAgICAgICAgIGFscGhhQ3V0b2ZmOiBtYXRlcmlhbEluZm8uYWxwaGFDdXRvZmYgfHwgMCxcclxuICAgICAgICAgICAgbm9ybWFsU2NhbGU6IG5vcm1hbFNjYWxlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoY29tbW9uUHJvcGVydGllcy5yb3VnaG5lc3NNYXApIHtcclxuICAgICAgICAgICAgLy8gSW4gZ2xURiBtZXRhbGxpY0ZhY3RvciB3aWxsIGRvIG11bHRpcGx5LCB3aGljaCBpcyBkaWZmZXJlbnQgZnJvbSBTdGFuZGFyZE1hdGVyaWFsLlxyXG4gICAgICAgICAgICAvLyBTbyBzaW1wbHkgaWdub3JlIGl0XHJcbiAgICAgICAgICAgIGNvbW1vblByb3BlcnRpZXMubWV0YWxuZXNzID0gMC41O1xyXG4gICAgICAgICAgICBjb21tb25Qcm9wZXJ0aWVzLnJvdWdobmVzcyA9IDAuNTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RhbmRhcmRNYXRlcmlhbCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBTdGFuZGFyZE1hdGVyaWFsKHV0aWwuZXh0ZW5kKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgYWxwaGFUZXN0OiBhbHBoYVRlc3QsXHJcbiAgICAgICAgICAgICAgICBkb3VibGVTaWRlZDogbWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkLFxyXG4gICAgICAgICAgICAgICAgLy8gRyBjaGFubmVsXHJcbiAgICAgICAgICAgICAgICByb3VnaG5lc3NDaGFubmVsOiAxLFxyXG4gICAgICAgICAgICAgICAgLy8gQiBDaGFubmVsXHJcbiAgICAgICAgICAgICAgICBtZXRhbG5lc3NDaGFubmVsOiAyXHJcbiAgICAgICAgICAgIH0sIGNvbW1vblByb3BlcnRpZXMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBtYXRlcmlhbEluZm8ubmFtZSxcclxuICAgICAgICAgICAgICAgIHNoYWRlcjogdGhpcy5fZ2V0U2hhZGVyKClcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9ST1VHSE5FU1MnKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfTUVUQUxORVNTJyk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUk9VR0hORVNTX0NIQU5ORUwnLCAxKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdNRVRBTE5FU1NfQ0hBTk5FTCcsIDIpO1xyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdESUZGVVNFTUFQX0FMUEhBX0FMUEhBJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYWxwaGFUZXN0KSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ0RPVUJMRV9TSURFRCcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoY29tbW9uUHJvcGVydGllcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmFscGhhTW9kZSA9PT0gJ0JMRU5EJykge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZXB0aE1hc2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGJyU3BlY3VsYXJHbG9zc2luZXNzVG9TdGFuZGFyZDogZnVuY3Rpb24gKG1hdGVyaWFsSW5mbywgc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mbywgbGliKSB7XHJcbiAgICAgICAgdmFyIGFscGhhVGVzdCA9IG1hdGVyaWFsSW5mby5hbHBoYU1vZGUgPT09ICdNQVNLJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXNlU3RhbmRhcmRNYXRlcmlhbCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTdGFuZGFyZE1hdGVyaWFsIGRvZXNuXFwndCBzdXBwb3J0IHNwZWN1bGFyIGdsb3NzaW5lc3Mgd29ya2Zsb3cgeWV0Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIGRpZmZ1c2VNYXAsIGdsb3NzaW5lc3NNYXAsIHNwZWN1bGFyTWFwLCBub3JtYWxNYXAsIGVtaXNzaXZlTWFwLCBvY2NsdXNpb25NYXA7XHJcbiAgICAgICAgdmFyIGVuYWJsZWRUZXh0dXJlcyA9IFtdO1xyXG4gICAgICAgIC8vIFRPRE8gdGV4Q29vcmRcclxuICAgICAgICBpZiAoc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mby5kaWZmdXNlVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwID0gbGliLnRleHR1cmVzW3NwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uZGlmZnVzZVRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIGRpZmZ1c2VNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ2RpZmZ1c2VNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uc3BlY3VsYXJHbG9zc2luZXNzVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBnbG9zc2luZXNzTWFwID0gc3BlY3VsYXJNYXAgPSBsaWIudGV4dHVyZXNbc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mby5zcGVjdWxhckdsb3NzaW5lc3NUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBnbG9zc2luZXNzTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdzcGVjdWxhck1hcCcsICdnbG9zc2luZXNzTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBub3JtYWxNYXAgPSBsaWIudGV4dHVyZXNbbWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIG5vcm1hbE1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnbm9ybWFsTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8uZW1pc3NpdmVUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5lbWlzc2l2ZVRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdlbWlzc2l2ZU1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLm9jY2x1c2lvblRleHR1cmUpIHtcclxuICAgICAgICAgICAgb2NjbHVzaW9uTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5vY2NsdXNpb25UZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBvY2NsdXNpb25NYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ29jY2x1c2lvbk1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGlmZnVzZUNvbG9yID0gc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mby5kaWZmdXNlRmFjdG9yIHx8IFsxLCAxLCAxLCAxXTtcclxuXHJcbiAgICAgICAgdmFyIGNvbW1vblByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICAgIGRpZmZ1c2VNYXA6IGRpZmZ1c2VNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgZ2xvc3NpbmVzc01hcDogZ2xvc3NpbmVzc01hcCB8fCBudWxsLFxyXG4gICAgICAgICAgICBzcGVjdWxhck1hcDogc3BlY3VsYXJNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgbm9ybWFsTWFwOiBub3JtYWxNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgZW1pc3NpdmVNYXA6IGVtaXNzaXZlTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG9jY2x1c2lvbk1hcDogb2NjbHVzaW9uTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGNvbG9yOiBkaWZmdXNlQ29sb3Iuc2xpY2UoMCwgMyksXHJcbiAgICAgICAgICAgIGFscGhhOiBkaWZmdXNlQ29sb3JbM10sXHJcbiAgICAgICAgICAgIHNwZWN1bGFyQ29sb3I6IHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uc3BlY3VsYXJGYWN0b3IgfHwgWzEsIDEsIDFdLFxyXG4gICAgICAgICAgICBnbG9zc2luZXNzOiBzcGVjdWxhckdsb3NzaW5lc3NNYXRJbmZvLmdsb3NzaW5lc3NGYWN0b3IgfHwgMCxcclxuICAgICAgICAgICAgZW1pc3Npb246IG1hdGVyaWFsSW5mby5lbWlzc2l2ZUZhY3RvciB8fCBbMCwgMCwgMF0sXHJcbiAgICAgICAgICAgIGVtaXNzaW9uSW50ZW5zaXR5OiAxLFxyXG4gICAgICAgICAgICBhbHBoYUN1dG9mZjogbWF0ZXJpYWxJbmZvLmFscGhhQ3V0b2ZmID09IG51bGwgPyAwLjkgOiBtYXRlcmlhbEluZm8uYWxwaGFDdXRvZmZcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChjb21tb25Qcm9wZXJ0aWVzLmdsb3NzaW5lc3NNYXApIHtcclxuICAgICAgICAgICAgLy8gSWdub3JlIHNwZWN1bGFyRmFjdG9yXHJcbiAgICAgICAgICAgIGNvbW1vblByb3BlcnRpZXMuZ2xvc3NpbmVzcyA9IDAuNTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbW1vblByb3BlcnRpZXMuc3BlY3VsYXJNYXApIHtcclxuICAgICAgICAgICAgLy8gSWdub3JlIHNwZWN1bGFyRmFjdG9yXHJcbiAgICAgICAgICAgIGNvbW1vblByb3BlcnRpZXMuc3BlY3VsYXJDb2xvciA9IFsxLCAxLCAxXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgbmFtZTogbWF0ZXJpYWxJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgIHNoYWRlcjogdGhpcy5fZ2V0U2hhZGVyKClcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdHTE9TU0lORVNTX0NIQU5ORUwnLCAzKTtcclxuICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ0RJRkZVU0VNQVBfQUxQSEFfQUxQSEEnKTtcclxuXHJcbiAgICAgICAgaWYgKGFscGhhVGVzdCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ0RPVUJMRV9TSURFRCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWF0ZXJpYWwuc2V0KGNvbW1vblByb3BlcnRpZXMpO1xyXG5cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmFscGhhTW9kZSA9PT0gJ0JMRU5EJykge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZXB0aE1hc2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGFyc2VNYXRlcmlhbHM6IGZ1bmN0aW9uIChqc29uLCBsaWIpIHtcclxuICAgICAgICB1dGlsLmVhY2goanNvbi5tYXRlcmlhbHMsIGZ1bmN0aW9uIChtYXRlcmlhbEluZm8sIGlkeCkge1xyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnMgJiYgbWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnNbJ0tIUl9tYXRlcmlhbHNfY29tbW9uJ10pIHtcclxuICAgICAgICAgICAgICAgIGxpYi5tYXRlcmlhbHNbaWR4XSA9IHRoaXMuX0tIUkNvbW1vbk1hdGVyaWFsVG9TdGFuZGFyZChtYXRlcmlhbEluZm8sIGxpYik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnMgJiYgbWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnNbJ0tIUl9tYXRlcmlhbHNfcGJyU3BlY3VsYXJHbG9zc2luZXNzJ10pIHtcclxuICAgICAgICAgICAgICAgIGxpYi5tYXRlcmlhbHNbaWR4XSA9IHRoaXMuX3BiclNwZWN1bGFyR2xvc3NpbmVzc1RvU3RhbmRhcmQobWF0ZXJpYWxJbmZvLCBtYXRlcmlhbEluZm8uZXh0ZW5zaW9uc1snS0hSX21hdGVyaWFsc19wYnJTcGVjdWxhckdsb3NzaW5lc3MnXSwgbGliKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxpYi5tYXRlcmlhbHNbaWR4XSA9IHRoaXMuX3Bick1ldGFsbGljUm91Z2huZXNzVG9TdGFuZGFyZChtYXRlcmlhbEluZm8sIG1hdGVyaWFsSW5mby5wYnJNZXRhbGxpY1JvdWdobmVzcyB8fCB7fSwgbGliKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGFyc2VNZXNoZXM6IGZ1bmN0aW9uIChqc29uLCBsaWIpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIHV0aWwuZWFjaChqc29uLm1lc2hlcywgZnVuY3Rpb24gKG1lc2hJbmZvLCBpZHgpIHtcclxuICAgICAgICAgICAgbGliLm1lc2hlc1tpZHhdID0gW107XHJcbiAgICAgICAgICAgIC8vIEdlb21ldHJ5XHJcbiAgICAgICAgICAgIGZvciAodmFyIHBwID0gMDsgcHAgPCBtZXNoSW5mby5wcmltaXRpdmVzLmxlbmd0aDsgcHArKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHByaW1pdGl2ZUluZm8gPSBtZXNoSW5mby5wcmltaXRpdmVzW3BwXTtcclxuICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IG5ldyBHZW9tZXRyeSh7XHJcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUEVORElHTlxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG1lc2hJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgYm91bmRpbmdCb3g6IG5ldyBCb3VuZGluZ0JveCgpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIC8vIFBhcnNlIGF0dHJpYnV0ZXNcclxuICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpY3MgPSBPYmplY3Qua2V5cyhwcmltaXRpdmVJbmZvLmF0dHJpYnV0ZXMpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgc3MgPSAwOyBzcyA8IHNlbWFudGljcy5sZW5ndGg7IHNzKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWMgPSBzZW1hbnRpY3Nbc3NdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhY2Nlc3NvcklkeCA9IHByaW1pdGl2ZUluZm8uYXR0cmlidXRlc1tzZW1hbnRpY107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUluZm8gPSBqc29uLmFjY2Vzc29yc1thY2Nlc3NvcklkeF07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBzZW1hbnRpY0F0dHJpYnV0ZU1hcFtzZW1hbnRpY107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGVOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IFNJWkVfTUFQW2F0dHJpYnV0ZUluZm8udHlwZV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUFycmF5ID0gZ2V0QWNjZXNzb3JEYXRhKGpzb24sIGxpYiwgYWNjZXNzb3JJZHgpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFdlYkdMIGF0dHJpYnV0ZSBidWZmZXIgbm90IHN1cHBvcnQgdWludDMyLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIERpcmVjdCB1c2UgRmxvYXQzMkFycmF5IG1heSBhbHNvIGhhdmUgaXNzdWUuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZUFycmF5IGluc3RhbmNlb2YgdmVuZG9yLlVpbnQzMkFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShhdHRyaWJ1dGVBcnJheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYyA9PT0gJ1dFSUdIVFNfMCcgJiYgc2l6ZSA9PT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZWlnaHQgZGF0YSBpbiBRVEVLIGhhcyBvbmx5IDMgY29tcG9uZW50LCB0aGUgbGFzdCBjb21wb25lbnQgY2FuIGJlIGV2YWx1YXRlZCBzaW5jZSBpdCBpcyBub3JtYWxpemVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3ZWlnaHRBcnJheSA9IG5ldyBhdHRyaWJ1dGVBcnJheS5jb25zdHJ1Y3RvcihhdHRyaWJ1dGVJbmZvLmNvdW50ICogMyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlSW5mby5jb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTQgPSBpICogNCwgaTMgPSBpICogMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3MSA9IGF0dHJpYnV0ZUFycmF5W2k0XSwgdzIgPSBhdHRyaWJ1dGVBcnJheVtpNCArIDFdLCB3MyA9IGF0dHJpYnV0ZUFycmF5W2k0ICsgMl0sIHc0ID0gYXR0cmlidXRlQXJyYXlbaTQgKyAzXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3U3VtID0gdzEgKyB3MiArIHczICsgdzQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRBcnJheVtpM10gPSB3MSAvIHdTdW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRBcnJheVtpMyArIDFdID0gdzIgLyB3U3VtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0QXJyYXlbaTMgKyAyXSA9IHczIC8gd1N1bTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdLnZhbHVlID0gd2VpZ2h0QXJyYXk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbWFudGljID09PSAnQ09MT1JfMCcgJiYgc2l6ZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JBcnJheSA9IG5ldyBhdHRyaWJ1dGVBcnJheS5jb25zdHJ1Y3RvcihhdHRyaWJ1dGVJbmZvLmNvdW50ICogNCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlSW5mby5jb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTQgPSBpICogNCwgaTMgPSBpICogMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yQXJyYXlbaTRdID0gYXR0cmlidXRlQXJyYXlbaTNdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JBcnJheVtpNCArIDFdID0gYXR0cmlidXRlQXJyYXlbaTMgKyAxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yQXJyYXlbaTQgKyAyXSA9IGF0dHJpYnV0ZUFycmF5W2kzICsgMl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckFycmF5W2k0ICsgM10gPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0udmFsdWUgPSBjb2xvckFycmF5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXS52YWx1ZSA9IGF0dHJpYnV0ZUFycmF5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZVR5cGUgPSAnZmxvYXQnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVBcnJheSBpbnN0YW5jZW9mIHZlbmRvci5VaW50MTZBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVUeXBlID0gJ3VzaG9ydCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZUFycmF5IGluc3RhbmNlb2YgdmVuZG9yLkludDE2QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9ICdzaG9ydCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZUFycmF5IGluc3RhbmNlb2YgdmVuZG9yLlVpbnQ4QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9ICd1Ynl0ZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZUFycmF5IGluc3RhbmNlb2YgdmVuZG9yLkludDhBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVUeXBlID0gJ2J5dGUnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdLnR5cGUgPSBhdHRyaWJ1dGVUeXBlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMgPT09ICdQT1NJVElPTicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQm91bmRpbmcgQm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaW4gPSBhdHRyaWJ1dGVJbmZvLm1pbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heCA9IGF0dHJpYnV0ZUluZm8ubWF4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5ib3VuZGluZ0JveC5taW4uc2V0KG1pblswXSwgbWluWzFdLCBtaW5bMl0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmJvdW5kaW5nQm94Lm1heC5zZXQobWF4WzBdLCBtYXhbMV0sIG1heFsyXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gUGFyc2UgaW5kaWNlc1xyXG4gICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZUluZm8uaW5kaWNlcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlcyA9IGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIHByaW1pdGl2ZUluZm8uaW5kaWNlcywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdlb21ldHJ5LnZlcnRleENvdW50IDw9IDB4ZmZmZiAmJiBnZW9tZXRyeS5pbmRpY2VzIGluc3RhbmNlb2YgdmVuZG9yLlVpbnQzMkFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgdmVuZG9yLlVpbnQxNkFycmF5KGdlb21ldHJ5LmluZGljZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZihnZW9tZXRyeS5pbmRpY2VzIGluc3RhbmNlb2YgdmVuZG9yLlVpbnQ4QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlcyA9IG5ldyB2ZW5kb3IuVWludDE2QXJyYXkoZ2VvbWV0cnkuaW5kaWNlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IGxpYi5tYXRlcmlhbHNbcHJpbWl0aXZlSW5mby5tYXRlcmlhbF07XHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWxJbmZvID0gKGpzb24ubWF0ZXJpYWxzIHx8IFtdKVtwcmltaXRpdmVJbmZvLm1hdGVyaWFsXTtcclxuICAgICAgICAgICAgICAgIC8vIFVzZSBkZWZhdWx0IG1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXI6IHNlbGYuX2dldFNoYWRlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgbWVzaCA9IG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogZ2VvbWV0cnksXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IFtNZXNoLlBPSU5UUywgTWVzaC5MSU5FUywgTWVzaC5MSU5FX0xPT1AsIE1lc2guTElORV9TVFJJUCwgTWVzaC5UUklBTkdMRVMsIE1lc2guVFJJQU5HTEVfU1RSSVAsIE1lc2guVFJJQU5HTEVfRkFOXVtwcmltaXRpdmVJbmZvLm1vZGVdIHx8IE1lc2guVFJJQU5HTEVTLFxyXG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZUdCdWZmZXI6IG1hdGVyaWFsLnRyYW5zcGFyZW50XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbEluZm8gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc2guY3VsbGluZyA9ICFtYXRlcmlhbEluZm8uZG91YmxlU2lkZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1lc2guZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNoLmdlb21ldHJ5LmdlbmVyYXRlVmVydGV4Tm9ybWFscygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCgobWF0ZXJpYWwgaW5zdGFuY2VvZiBTdGFuZGFyZE1hdGVyaWFsKSAmJiBtYXRlcmlhbC5ub3JtYWxNYXApXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgKG1hdGVyaWFsLmlzVGV4dHVyZUVuYWJsZWQoJ25vcm1hbE1hcCcpKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMudGFuZ2VudC52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNoLmdlb21ldHJ5LmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobWVzaC5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC5kZWZpbmUoJ1ZFUlRFWF9DT0xPUicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG1lc2gubmFtZSA9IEdMVEZMb2FkZXIuZ2VuZXJhdGVNZXNoTmFtZShqc29uLm1lc2hlcywgaWR4LCBwcCk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGliLm1lc2hlc1tpZHhdLnB1c2gobWVzaCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2luc3RhbmNlQ2FtZXJhOiBmdW5jdGlvbiAoanNvbiwgbm9kZUluZm8pIHtcclxuICAgICAgICB2YXIgY2FtZXJhSW5mbyA9IGpzb24uY2FtZXJhc1tub2RlSW5mby5jYW1lcmFdO1xyXG5cclxuICAgICAgICBpZiAoY2FtZXJhSW5mby50eXBlID09PSAncGVyc3BlY3RpdmUnKSB7XHJcbiAgICAgICAgICAgIHZhciBwZXJzcGVjdGl2ZUluZm8gPSBjYW1lcmFJbmZvLnBlcnNwZWN0aXZlIHx8IHt9O1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG5vZGVJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBhc3BlY3Q6IHBlcnNwZWN0aXZlSW5mby5hc3BlY3RSYXRpbyxcclxuICAgICAgICAgICAgICAgIGZvdjogcGVyc3BlY3RpdmVJbmZvLnlmb3YgLyBNYXRoLlBJICogMTgwLFxyXG4gICAgICAgICAgICAgICAgZmFyOiBwZXJzcGVjdGl2ZUluZm8uemZhcixcclxuICAgICAgICAgICAgICAgIG5lYXI6IHBlcnNwZWN0aXZlSW5mby56bmVhclxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBvcnRob2dyYXBoaWNJbmZvID0gY2FtZXJhSW5mby5vcnRob2dyYXBoaWMgfHwge307XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3J0aG9ncmFwaGljQ2FtZXJhKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG5vZGVJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB0b3A6IG9ydGhvZ3JhcGhpY0luZm8ueW1hZyxcclxuICAgICAgICAgICAgICAgIHJpZ2h0OiBvcnRob2dyYXBoaWNJbmZvLnhtYWcsXHJcbiAgICAgICAgICAgICAgICBsZWZ0OiAtb3J0aG9ncmFwaGljSW5mby54bWFnLFxyXG4gICAgICAgICAgICAgICAgYm90dG9tOiAtb3J0aG9ncmFwaGljSW5mby55bWFnLFxyXG4gICAgICAgICAgICAgICAgbmVhcjogb3J0aG9ncmFwaGljSW5mby56bmVhcixcclxuICAgICAgICAgICAgICAgIGZhcjogb3J0aG9ncmFwaGljSW5mby56ZmFyXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3BhcnNlTm9kZXM6IGZ1bmN0aW9uIChqc29uLCBsaWIpIHtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gaW5zdGFuY2VNZXNoKG1lc2gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG1lc2gubmFtZSxcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBtZXNoLmdlb21ldHJ5LFxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWw6IG1lc2gubWF0ZXJpYWwsXHJcbiAgICAgICAgICAgICAgICBjdWxsaW5nOiBtZXNoLmN1bGxpbmcsXHJcbiAgICAgICAgICAgICAgICBtb2RlOiBtZXNoLm1vZGVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsaWIuaW5zdGFuY2VkTWVzaGVzID0gW107XHJcblxyXG4gICAgICAgIHV0aWwuZWFjaChqc29uLm5vZGVzLCBmdW5jdGlvbiAobm9kZUluZm8sIGlkeCkge1xyXG4gICAgICAgICAgICB2YXIgbm9kZTtcclxuICAgICAgICAgICAgaWYgKG5vZGVJbmZvLmNhbWVyYSAhPSBudWxsICYmIHRoaXMuaW5jbHVkZUNhbWVyYSkge1xyXG4gICAgICAgICAgICAgICAgbm9kZSA9IHRoaXMuX2luc3RhbmNlQ2FtZXJhKGpzb24sIG5vZGVJbmZvKTtcclxuICAgICAgICAgICAgICAgIGxpYi5jYW1lcmFzLnB1c2gobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobm9kZUluZm8ubWVzaCAhPSBudWxsICYmIHRoaXMuaW5jbHVkZU1lc2gpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcmltaXRpdmVzID0gbGliLm1lc2hlc1tub2RlSW5mby5tZXNoXTtcclxuICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIG5vZGUgd2l0aCBtZXNoIGRpcmVjdGx5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBpbnN0YW5jZU1lc2gocHJpbWl0aXZlc1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0TmFtZShub2RlSW5mby5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGliLmluc3RhbmNlZE1lc2hlcy5wdXNoKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5ldyBOb2RlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0TmFtZShub2RlSW5mby5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwcmltaXRpdmVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3TWVzaCA9IGluc3RhbmNlTWVzaChwcmltaXRpdmVzW2pdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkKG5ld01lc2gpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliLmluc3RhbmNlZE1lc2hlcy5wdXNoKG5ld01lc2gpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbm9kZSA9IG5ldyBOb2RlKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBQRU5ESU5HIER1bHBsaWNhdGUgbmFtZS5cclxuICAgICAgICAgICAgICAgIG5vZGUuc2V0TmFtZShub2RlSW5mby5uYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobm9kZUluZm8ubWF0cml4KSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLmxvY2FsVHJhbnNmb3JtLnNldEFycmF5KG5vZGVJbmZvLm1hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICBub2RlLmRlY29tcG9zZUxvY2FsVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZUluZm8udHJhbnNsYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnBvc2l0aW9uLnNldEFycmF5KG5vZGVJbmZvLnRyYW5zbGF0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChub2RlSW5mby5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUucm90YXRpb24uc2V0QXJyYXkobm9kZUluZm8ucm90YXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGVJbmZvLnNjYWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zY2FsZS5zZXRBcnJheShub2RlSW5mby5zY2FsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxpYi5ub2Rlc1tpZHhdID0gbm9kZTtcclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgLy8gQnVpbGQgaGllcmFyY2h5XHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24ubm9kZXMsIGZ1bmN0aW9uIChub2RlSW5mbywgaWR4KSB7XHJcbiAgICAgICAgICAgIHZhciBub2RlID0gbGliLm5vZGVzW2lkeF07XHJcbiAgICAgICAgICAgIGlmIChub2RlSW5mby5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlSW5mby5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZElkeCA9IG5vZGVJbmZvLmNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IGxpYi5ub2Rlc1tjaGlsZElkeF07XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hZGQoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICBfcGFyc2VBbmltYXRpb25zOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tDaGFubmVsUGF0aChjaGFubmVsSW5mbykge1xyXG4gICAgICAgICAgICBpZiAoY2hhbm5lbEluZm8ucGF0aCA9PT0gJ3dlaWdodHMnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0dMVEZMb2FkZXIgbm90IHN1cHBvcnQgbW9ycGggdGFyZ2V0cyB5ZXQuJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBnZXRDaGFubmVsSGFzaChjaGFubmVsSW5mbywgYW5pbWF0aW9uSW5mbykge1xyXG4gICAgICAgICAgICByZXR1cm4gY2hhbm5lbEluZm8udGFyZ2V0Lm5vZGUgKyAnXycgKyBhbmltYXRpb25JbmZvLnNhbXBsZXJzW2NoYW5uZWxJbmZvLnNhbXBsZXJdLmlucHV0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRpbWVBY2Nlc3Nvck11bHRpcGxpZWQgPSB7fTtcclxuICAgICAgICB1dGlsLmVhY2goanNvbi5hbmltYXRpb25zLCBmdW5jdGlvbiAoYW5pbWF0aW9uSW5mbywgaWR4KSB7XHJcbiAgICAgICAgICAgIHZhciBjaGFubmVscyA9IGFuaW1hdGlvbkluZm8uY2hhbm5lbHMuZmlsdGVyKGNoZWNrQ2hhbm5lbFBhdGgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjaGFubmVscy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdHJhY2tzID0ge307XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbm5lbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjaGFubmVsSW5mbyA9IGNoYW5uZWxzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNoYW5uZWxIYXNoID0gZ2V0Q2hhbm5lbEhhc2goY2hhbm5lbEluZm8sIGFuaW1hdGlvbkluZm8pO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciB0YXJnZXROb2RlID0gbGliLm5vZGVzW2NoYW5uZWxJbmZvLnRhcmdldC5ub2RlXTtcclxuICAgICAgICAgICAgICAgIHZhciB0cmFjayA9IHRyYWNrc1tjaGFubmVsSGFzaF07XHJcbiAgICAgICAgICAgICAgICB2YXIgc2FtcGxlckluZm8gPSBhbmltYXRpb25JbmZvLnNhbXBsZXJzW2NoYW5uZWxJbmZvLnNhbXBsZXJdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghdHJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICB0cmFjayA9IHRyYWNrc1tjaGFubmVsSGFzaF0gPSBuZXcgU2FtcGxlclRyYWNrKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGFyZ2V0Tm9kZSA/IHRhcmdldE5vZGUubmFtZSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldE5vZGVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFjay50YXJnZXROb2RlSW5kZXggPSBjaGFubmVsSW5mby50YXJnZXQubm9kZTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFjay5jaGFubmVscy50aW1lID0gZ2V0QWNjZXNzb3JEYXRhKGpzb24sIGxpYiwgc2FtcGxlckluZm8uaW5wdXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBmcmFtZUxlbiA9IHRyYWNrLmNoYW5uZWxzLnRpbWUubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGltZUFjY2Vzc29yTXVsdGlwbGllZFtzYW1wbGVySW5mby5pbnB1dF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBmcmFtZUxlbjsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5jaGFubmVscy50aW1lW2tdICo9IDEwMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZUFjY2Vzc29yTXVsdGlwbGllZFtzYW1wbGVySW5mby5pbnB1dF0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZXJwb2xhdGlvbiA9IHNhbXBsZXJJbmZvLmludGVycG9sYXRpb24gfHwgJ0xJTkVBUic7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbiAhPT0gJ0xJTkVBUicpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0dMVEZMb2FkZXIgb25seSBzdXBwb3J0IExJTkVBUiBpbnRlcnBvbGF0aW9uLicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBwYXRoID0gY2hhbm5lbEluZm8udGFyZ2V0LnBhdGg7XHJcbiAgICAgICAgICAgICAgICBpZiAocGF0aCA9PT0gJ3RyYW5zbGF0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGggPSAncG9zaXRpb24nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRyYWNrLmNoYW5uZWxzW3BhdGhdID0gZ2V0QWNjZXNzb3JEYXRhKGpzb24sIGxpYiwgc2FtcGxlckluZm8ub3V0cHV0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdHJhY2tzTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBoYXNoIGluIHRyYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdHJhY2tzTGlzdC5wdXNoKHRyYWNrc1toYXNoXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNsaXAgPSBuZXcgVHJhY2tDbGlwKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGFuaW1hdGlvbkluZm8ubmFtZSxcclxuICAgICAgICAgICAgICAgIGxvb3A6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB0cmFja3M6IHRyYWNrc0xpc3RcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxpYi5jbGlwcy5wdXNoKGNsaXApO1xyXG4gICAgICAgIH0sIHRoaXMpO1xyXG5cclxuXHJcbiAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgIHZhciBtYXhMaWZlID0gbGliLmNsaXBzLnJlZHVjZShmdW5jdGlvbiAobWF4VGltZSwgY2xpcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgobWF4VGltZSwgY2xpcC5saWZlKTtcclxuICAgICAgICB9LCAwKTtcclxuICAgICAgICBsaWIuY2xpcHMuZm9yRWFjaChmdW5jdGlvbiAoY2xpcCkge1xyXG4gICAgICAgICAgICBjbGlwLmxpZmUgPSBtYXhMaWZlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gbGliLmNsaXBzO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbkdMVEZMb2FkZXIuZ2VuZXJhdGVNZXNoTmFtZSA9IGZ1bmN0aW9uIChtZXNoZXMsIGlkeCwgcHJpbWl0aXZlSWR4KSB7XHJcbiAgICB2YXIgbWVzaEluZm8gPSBtZXNoZXNbaWR4XTtcclxuICAgIHZhciBtZXNoTmFtZSA9IG1lc2hJbmZvLm5hbWUgfHwgKCdtZXNoXycgKyBpZHgpO1xyXG4gICAgcmV0dXJuIHByaW1pdGl2ZUlkeCA9PT0gMCA/IG1lc2hOYW1lIDogKG1lc2hOYW1lICsgJyQnICsgcHJpbWl0aXZlSWR4KTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdMVEZMb2FkZXI7XHJcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuRGlyZWN0aW9uYWxcclxuICogQGV4dGVuZHMgY2xheS5MaWdodFxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgdmFyIGxpZ2h0ID0gbmV3IGNsYXkubGlnaHQuRGlyZWN0aW9uYWwoe1xyXG4gKiAgICAgICAgIGludGVuc2l0eTogMC41LFxyXG4gKiAgICAgICAgIGNvbG9yOiBbMS4wLCAwLjAsIDAuMF1cclxuICogICAgIH0pO1xyXG4gKiAgICAgbGlnaHQucG9zaXRpb24uc2V0KDEwLCAxMCwgMTApO1xyXG4gKiAgICAgbGlnaHQubG9va0F0KGNsYXkuVmVjdG9yMy5aRVJPKTtcclxuICogICAgIHNjZW5lLmFkZChsaWdodCk7XHJcbiAqL1xyXG52YXIgRGlyZWN0aW9uYWxMaWdodCA9IExpZ2h0LmV4dGVuZCgvKiogQGxlbmRzIGNsYXkubGlnaHQuRGlyZWN0aW9uYWwjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2hhZG93QmlhczogMC4wMDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNoYWRvd1Nsb3BlU2NhbGU6IDIuMCxcclxuICAgIC8qKlxyXG4gICAgICogU2hhZG93IGNhc2NhZGUuXHJcbiAgICAgKiBVc2UgUFNTTSB0ZWNobmlxdWUgd2hlbiBpdCBpcyBsYXJnZXIgdGhhbiAxIGFuZCBoYXZlIGEgdW5pcXVlIGRpcmVjdGlvbmFsIGxpZ2h0IGluIHNjZW5lLlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2hhZG93Q2FzY2FkZTogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEF2YWlsYWJsZSB3aGVuIHNoYWRvd0Nhc2NhZGUgaXMgbGFyZ2VyIHRoYW4gMSBhbmQgaGF2ZSBhIHVuaXF1ZSBkaXJlY3Rpb25hbCBsaWdodCBpbiBzY2VuZS5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNhc2NhZGVTcGxpdExvZ0ZhY3RvcjogMC4yXHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnRElSRUNUSU9OQUxfTElHSFQnLFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBkaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9uOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLl9fZGlyID0gaW5zdGFuY2UuX19kaXIgfHwgbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICAgICAgICAgIC8vIERpcmVjdGlvbiBpcyB0YXJnZXQgdG8gZXllXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuX19kaXIuY29weShpbnN0YW5jZS53b3JsZFRyYW5zZm9ybS56KS5ub3JtYWxpemUoKS5uZWdhdGUoKS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGlyZWN0aW9uYWxMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0gKiBpbnRlbnNpdHksIGNvbG9yWzFdICogaW50ZW5zaXR5LCBjb2xvclsyXSAqIGludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuRGlyZWN0aW9uYWwucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0ID0gTGlnaHQucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICAgICAgbGlnaHQuc2hhZG93QmlhcyA9IHRoaXMuc2hhZG93QmlhcztcclxuICAgICAgICBsaWdodC5zaGFkb3dTbG9wZVNjYWxlID0gdGhpcy5zaGFkb3dTbG9wZVNjYWxlO1xyXG4gICAgICAgIHJldHVybiBsaWdodDtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEaXJlY3Rpb25hbExpZ2h0O1xyXG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LlBvaW50XHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICovXHJcbnZhciBQb2ludExpZ2h0ID0gTGlnaHQuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5saWdodC5Qb2ludCMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYW5nZTogMTAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY2FzdFNoYWRvdzogZmFsc2VcclxufSwge1xyXG5cclxuICAgIHR5cGU6ICdQT0lOVF9MSUdIVCcsXHJcblxyXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xyXG4gICAgICAgIHBvaW50TGlnaHRQb3NpdGlvbjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvaW50TGlnaHRSYW5nZToge1xyXG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5yYW5nZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcG9pbnRMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSAqIGludGVuc2l0eSwgY29sb3JbMV0gKiBpbnRlbnNpdHksIGNvbG9yWzJdICogaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkubGlnaHQuUG9pbnR9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5Qb2ludC5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBsaWdodCA9IExpZ2h0LnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGxpZ2h0LnJhbmdlID0gdGhpcy5yYW5nZTtcclxuICAgICAgICByZXR1cm4gbGlnaHQ7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUG9pbnRMaWdodDtcclxuIiwiaW1wb3J0IExpZ2h0IGZyb20gJy4uL0xpZ2h0JztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5saWdodC5TcG90XHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICovXHJcbnZhciBTcG90TGlnaHQgPSBMaWdodC5leHRlbmQoLyoqQGxlbmRzIGNsYXkubGlnaHQuU3BvdCAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJhbmdlOiAyMCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdW1icmFBbmdsZTogMzAsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHBlbnVtYnJhQW5nbGU6IDQ1LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBmYWxsb2ZmRmFjdG9yOiAyLjAsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNoYWRvd0JpYXM6IDAuMDAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzaGFkb3dTbG9wZVNjYWxlOiAyLjBcclxufSwge1xyXG5cclxuICAgIHR5cGU6ICdTUE9UX0xJR0hUJyxcclxuXHJcbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XHJcbiAgICAgICAgc3BvdExpZ2h0UG9zaXRpb246IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BvdExpZ2h0UmFuZ2U6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJhbmdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmNvcyhpbnN0YW5jZS51bWJyYUFuZ2xlICogTWF0aC5QSSAvIDE4MCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmU6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguY29zKGluc3RhbmNlLnBlbnVtYnJhQW5nbGUgKiBNYXRoLlBJIC8gMTgwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BvdExpZ2h0RmFsbG9mZkZhY3Rvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZmFsbG9mZkZhY3RvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BvdExpZ2h0RGlyZWN0aW9uOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLl9fZGlyID0gaW5zdGFuY2UuX19kaXIgfHwgbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICAgICAgICAgIC8vIERpcmVjdGlvbiBpcyB0YXJnZXQgdG8gZXllXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuX19kaXIuY29weShpbnN0YW5jZS53b3JsZFRyYW5zZm9ybS56KS5uZWdhdGUoKS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BvdExpZ2h0Q29sb3I6IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSAqIGludGVuc2l0eSwgY29sb3JbMV0gKiBpbnRlbnNpdHksIGNvbG9yWzJdICogaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkubGlnaHQuU3BvdH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LlNwb3QucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0ID0gTGlnaHQucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICAgICAgbGlnaHQucmFuZ2UgPSB0aGlzLnJhbmdlO1xyXG4gICAgICAgIGxpZ2h0LnVtYnJhQW5nbGUgPSB0aGlzLnVtYnJhQW5nbGU7XHJcbiAgICAgICAgbGlnaHQucGVudW1icmFBbmdsZSA9IHRoaXMucGVudW1icmFBbmdsZTtcclxuICAgICAgICBsaWdodC5mYWxsb2ZmRmFjdG9yID0gdGhpcy5mYWxsb2ZmRmFjdG9yO1xyXG4gICAgICAgIGxpZ2h0LnNoYWRvd0JpYXMgPSB0aGlzLnNoYWRvd0JpYXM7XHJcbiAgICAgICAgbGlnaHQuc2hhZG93U2xvcGVTY2FsZSA9IHRoaXMuc2hhZG93U2xvcGVTY2FsZTtcclxuICAgICAgICByZXR1cm4gbGlnaHQ7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BvdExpZ2h0O1xyXG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkFtYmllbnRcclxuICogQGV4dGVuZHMgY2xheS5MaWdodFxyXG4gKi9cclxudmFyIEFtYmllbnRMaWdodCA9IExpZ2h0LmV4dGVuZCh7XHJcblxyXG4gICAgY2FzdFNoYWRvdzogZmFsc2VcclxuXHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnQU1CSUVOVF9MSUdIVCcsXHJcblxyXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xyXG4gICAgICAgIGFtYmllbnRMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSppbnRlbnNpdHksIGNvbG9yWzFdKmludGVuc2l0eSwgY29sb3JbMl0qaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAbmFtZSBjbG9uZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5BbWJpZW50fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuQW1iaWVudC5wcm90b3R5cGVcclxuICAgICAqL1xyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFtYmllbnRMaWdodDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi9UZXh0dXJlQ3ViZSc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCBDYWNoZSBmcm9tICcuL2NvcmUvQ2FjaGUnO1xyXG5cclxudmFyIEtFWV9GUkFNRUJVRkZFUiA9ICdmcmFtZWJ1ZmZlcic7XHJcbnZhciBLRVlfUkVOREVSQlVGRkVSID0gJ3JlbmRlcmJ1ZmZlcic7XHJcbnZhciBLRVlfUkVOREVSQlVGRkVSX1dJRFRIID0gS0VZX1JFTkRFUkJVRkZFUiArICdfd2lkdGgnO1xyXG52YXIgS0VZX1JFTkRFUkJVRkZFUl9IRUlHSFQgPSBLRVlfUkVOREVSQlVGRkVSICsgJ19oZWlnaHQnO1xyXG52YXIgS0VZX1JFTkRFUkJVRkZFUl9BVFRBQ0hFRCA9IEtFWV9SRU5ERVJCVUZGRVIgKyAnX2F0dGFjaGVkJztcclxudmFyIEtFWV9ERVBUSFRFWFRVUkVfQVRUQUNIRUQgPSAnZGVwdGh0ZXh0dXJlX2F0dGFjaGVkJztcclxuXHJcbnZhciBHTF9GUkFNRUJVRkZFUiA9IGdsZW51bS5GUkFNRUJVRkZFUjtcclxudmFyIEdMX1JFTkRFUkJVRkZFUiA9IGdsZW51bS5SRU5ERVJCVUZGRVI7XHJcbnZhciBHTF9ERVBUSF9BVFRBQ0hNRU5UID0gZ2xlbnVtLkRFUFRIX0FUVEFDSE1FTlQ7XHJcbnZhciBHTF9DT0xPUl9BVFRBQ0hNRU5UMCA9IGdsZW51bS5DT0xPUl9BVFRBQ0hNRU5UMDtcclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LkZyYW1lQnVmZmVyXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgRnJhbWVCdWZmZXIgPSBCYXNlLmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5LkZyYW1lQnVmZmVyIyAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIElmIHVzZSBkZXB0aCBidWZmZXJcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBkZXB0aEJ1ZmZlcjogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgKi9cclxuICAgIHZpZXdwb3J0OiBudWxsLFxyXG5cclxuICAgIF93aWR0aDogMCxcclxuICAgIF9oZWlnaHQ6IDAsXHJcblxyXG4gICAgX3RleHR1cmVzOiBudWxsLFxyXG5cclxuICAgIF9ib3VuZFJlbmRlcmVyOiBudWxsLFxyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBVc2UgY2FjaGVcclxuICAgIHRoaXMuX2NhY2hlID0gbmV3IENhY2hlKCk7XHJcblxyXG4gICAgdGhpcy5fdGV4dHVyZXMgPSB7fTtcclxufSxcclxuXHJcbi8qKkBsZW5kcyBjbGF5LkZyYW1lQnVmZmVyLnByb3RvdHlwZS4gKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYXR0YWNoZWQgdGV4dHVyZSB3aWR0aFxyXG4gICAgICoge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgLy8gRklYTUUgQ2FuJ3QgdXNlIGJlZm9yZSAjYmluZFxyXG4gICAgZ2V0VGV4dHVyZVdpZHRoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhdHRhY2hlZCB0ZXh0dXJlIGhlaWdodFxyXG4gICAgICoge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0VGV4dHVyZUhlaWdodDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmluZCB0aGUgZnJhbWVidWZmZXIgdG8gZ2l2ZW4gcmVuZGVyZXIgYmVmb3JlIHJlbmRlcmluZ1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcblxyXG4gICAgICAgIGlmIChyZW5kZXJlci5fX2N1cnJlbnRGcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgICAgICAvLyBBbHJlYWR5IGJvdW5kXHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJlci5fX2N1cnJlbnRGcmFtZUJ1ZmZlciA9PT0gdGhpcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JlbmRlcmVyIGFscmVhZHkgYm91bmQgd2l0aCBhbm90aGVyIGZyYW1lYnVmZmVyLiBVbmJpbmQgaXQgZmlyc3QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyZXIuX19jdXJyZW50RnJhbWVCdWZmZXIgPSB0aGlzO1xyXG5cclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIF9nbC5iaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIHRoaXMuX2dldEZyYW1lQnVmZmVyR0wocmVuZGVyZXIpKTtcclxuICAgICAgICB0aGlzLl9ib3VuZFJlbmRlcmVyID0gcmVuZGVyZXI7XHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcblxyXG4gICAgICAgIGNhY2hlLnB1dCgndmlld3BvcnQnLCByZW5kZXJlci52aWV3cG9ydCk7XHJcblxyXG4gICAgICAgIHZhciBoYXNUZXh0dXJlQXR0YWNoZWQgPSBmYWxzZTtcclxuICAgICAgICB2YXIgd2lkdGg7XHJcbiAgICAgICAgdmFyIGhlaWdodDtcclxuICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMuX3RleHR1cmVzKSB7XHJcbiAgICAgICAgICAgIGhhc1RleHR1cmVBdHRhY2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XTtcclxuICAgICAgICAgICAgaWYgKG9iaikge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBEbyB3aWR0aCwgaGVpZ2h0IGNoZWNraW5nLCBtYWtlIHN1cmUgc2l6ZSBhcmUgc2FtZVxyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBvYmoudGV4dHVyZS53aWR0aDtcclxuICAgICAgICAgICAgICAgIGhlaWdodCA9IG9iai50ZXh0dXJlLmhlaWdodDtcclxuICAgICAgICAgICAgICAgIC8vIEF0dGFjaCB0ZXh0dXJlc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZG9BdHRhY2gocmVuZGVyZXIsIG9iai50ZXh0dXJlLCBhdHRhY2htZW50LCBvYmoudGFyZ2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fd2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmICghaGFzVGV4dHVyZUF0dGFjaGVkICYmIHRoaXMuZGVwdGhCdWZmZXIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignTXVzdCBhdHRhY2ggdGV4dHVyZSBiZWZvcmUgYmluZCwgb3IgcmVuZGVyYnVmZmVyIG1heSBoYXZlIGluY29ycmVjdCB3aWR0aCBhbmQgaGVpZ2h0LicpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy52aWV3cG9ydCkge1xyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCh0aGlzLnZpZXdwb3J0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQsIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXMgPSBjYWNoZS5nZXQoJ2F0dGFjaGVkX3RleHR1cmVzJyk7XHJcbiAgICAgICAgaWYgKGF0dGFjaGVkVGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiBhdHRhY2hlZFRleHR1cmVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG9EZXRhY2goX2dsLCBhdHRhY2htZW50LCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY2FjaGUuZ2V0KEtFWV9ERVBUSFRFWFRVUkVfQVRUQUNIRUQpICYmIHRoaXMuZGVwdGhCdWZmZXIpIHtcclxuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHJlbmRlciBidWZmZXJcclxuICAgICAgICAgICAgaWYgKGNhY2hlLm1pc3MoS0VZX1JFTkRFUkJVRkZFUikpIHtcclxuICAgICAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSLCBfZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJidWZmZXIgPSBjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUik7XHJcblxyXG4gICAgICAgICAgICBpZiAod2lkdGggIT09IGNhY2hlLmdldChLRVlfUkVOREVSQlVGRkVSX1dJRFRIKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IGhlaWdodCAhPT0gY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVJfSEVJR0hUKSkge1xyXG4gICAgICAgICAgICAgICAgX2dsLmJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgX2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBfZ2wuREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgY2FjaGUucHV0KEtFWV9SRU5ERVJCVUZGRVJfV0lEVEgsIHdpZHRoKTtcclxuICAgICAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSX0hFSUdIVCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgIF9nbC5iaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUl9BVFRBQ0hFRCkpIHtcclxuICAgICAgICAgICAgICAgIF9nbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgY2FjaGUucHV0KEtFWV9SRU5ERVJCVUZGRVJfQVRUQUNIRUQsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVuYmluZCB0aGUgZnJhbWUgYnVmZmVyIGFmdGVyIHJlbmRlcmluZ1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICAvLyBSZW1vdmUgc3RhdHVzIHJlY29yZCBvbiByZW5kZXJlclxyXG4gICAgICAgIHJlbmRlcmVyLl9fY3VycmVudEZyYW1lQnVmZmVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICBfZ2wuYmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBudWxsKTtcclxuICAgICAgICB0aGlzLl9ib3VuZFJlbmRlcmVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5fY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IHRoaXMuX2NhY2hlLmdldCgndmlld3BvcnQnKTtcclxuICAgICAgICAvLyBSZXNldCB2aWV3cG9ydDtcclxuICAgICAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodmlld3BvcnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVNaXBtYXAocmVuZGVyZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBCZWNhdXNlIHRoZSBkYXRhIG9mIHRleHR1cmUgaXMgY2hhbmdlZCBvdmVyIHRpbWUsXHJcbiAgICAvLyBIZXJlIHVwZGF0ZSB0aGUgbWlwbWFwcyBvZiB0ZXh0dXJlIGVhY2ggdGltZSBhZnRlciByZW5kZXJlZDtcclxuICAgIHVwZGF0ZU1pcG1hcDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gdGhpcy5fdGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgdmFyIG9iaiA9IHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgICAgICBpZiAob2JqKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IG9iai50ZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgLy8gRklYTUUgc29tZSB0ZXh0dXJlIGZvcm1hdCBjYW4ndCBnZW5lcmF0ZSBtaXBtYXBcclxuICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS5OUE9UICYmIHRleHR1cmUudXNlTWlwbWFwXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgdGV4dHVyZS5taW5GaWx0ZXIgPT09IFRleHR1cmUuTElORUFSX01JUE1BUF9MSU5FQVIpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGV4dHVyZS50ZXh0dXJlVHlwZSA9PT0gJ3RleHR1cmVDdWJlJyA/IGdsZW51bS5URVhUVVJFX0NVQkVfTUFQIDogZ2xlbnVtLlRFWFRVUkVfMkQ7XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZS5nZXRXZWJHTFRleHR1cmUocmVuZGVyZXIpKTtcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuZ2VuZXJhdGVNaXBtYXAodGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuYmluZFRleHR1cmUodGFyZ2V0LCBudWxsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG5cclxuICAgIC8vIDB4OENENSwgMzYwNTMsIEZSQU1FQlVGRkVSX0NPTVBMRVRFXHJcbiAgICAvLyAweDhDRDYsIDM2MDU0LCBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlRcclxuICAgIC8vIDB4OENENywgMzYwNTUsIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UXHJcbiAgICAvLyAweDhDRDksIDM2MDU3LCBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlNcclxuICAgIC8vIDB4OENERCwgMzYwNjEsIEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEXHJcbiAgICBjaGVja1N0YXR1czogZnVuY3Rpb24gKF9nbCkge1xyXG4gICAgICAgIHJldHVybiBfZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTF9GUkFNRUJVRkZFUik7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXRGcmFtZUJ1ZmZlckdMOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcblxyXG4gICAgICAgIGlmIChjYWNoZS5taXNzKEtFWV9GUkFNRUJVRkZFUikpIHtcclxuICAgICAgICAgICAgY2FjaGUucHV0KEtFWV9GUkFNRUJVRkZFUiwgcmVuZGVyZXIuZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KEtFWV9GUkFNRUJVRkZFUik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXR0YWNoIGEgdGV4dHVyZShSVFQpIHRvIHRoZSBmcmFtZWJ1ZmZlclxyXG4gICAgICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSB0ZXh0dXJlXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFthdHRhY2htZW50PWdsLkNPTE9SX0FUVEFDSE1FTlQwXVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbdGFyZ2V0PWdsLlRFWFRVUkVfMkRdXHJcbiAgICAgKi9cclxuICAgIGF0dGFjaDogZnVuY3Rpb24gKHRleHR1cmUsIGF0dGFjaG1lbnQsIHRhcmdldCkge1xyXG5cclxuICAgICAgICBpZiAoIXRleHR1cmUud2lkdGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdGV4dHVyZSBhdHRhY2hlZCB0byBjb2xvciBidWZmZXIgaXMgbm90IGEgdmFsaWQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE8gd2lkdGggYW5kIGhlaWdodCBjaGVja1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgZGVwdGhfdGV4dHVyZSBleHRlbnNpb24gaXMgZW5hYmxlZCwgZGV2ZWxvcGVyc1xyXG4gICAgICAgIC8vIENhbiBhdHRhY2ggYSBkZXB0aCB0ZXh0dXJlIHRvIHRoZSBkZXB0aCBidWZmZXJcclxuICAgICAgICAvLyBodHRwOi8vYmxvZy50b2ppY29kZS5jb20vMjAxMi8wNy91c2luZy13ZWJnbGRlcHRodGV4dHVyZS5odG1sXHJcbiAgICAgICAgYXR0YWNobWVudCA9IGF0dGFjaG1lbnQgfHwgR0xfQ09MT1JfQVRUQUNITUVOVDA7XHJcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0IHx8IGdsZW51bS5URVhUVVJFXzJEO1xyXG5cclxuICAgICAgICB2YXIgYm91bmRSZW5kZXJlciA9IHRoaXMuX2JvdW5kUmVuZGVyZXI7XHJcbiAgICAgICAgdmFyIF9nbCA9IGJvdW5kUmVuZGVyZXIgJiYgYm91bmRSZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgYXR0YWNoZWRUZXh0dXJlcztcclxuXHJcbiAgICAgICAgaWYgKF9nbCkge1xyXG4gICAgICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICAgICAgY2FjaGUudXNlKGJvdW5kUmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICAgICAgICAgIGF0dGFjaGVkVGV4dHVyZXMgPSBjYWNoZS5nZXQoJ2F0dGFjaGVkX3RleHR1cmVzJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDaGVjayBpZiB0ZXh0dXJlIGF0dGFjaGVkXHJcbiAgICAgICAgdmFyIHByZXZpb3VzID0gdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF07XHJcbiAgICAgICAgaWYgKHByZXZpb3VzICYmIHByZXZpb3VzLnRhcmdldCA9PT0gdGFyZ2V0XHJcbiAgICAgICAgICAgICYmIHByZXZpb3VzLnRleHR1cmUgPT09IHRleHR1cmVcclxuICAgICAgICAgICAgJiYgKGF0dGFjaGVkVGV4dHVyZXMgJiYgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSAhPSBudWxsKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2FuQXR0YWNoID0gdHJ1ZTtcclxuICAgICAgICBpZiAoYm91bmRSZW5kZXJlcikge1xyXG4gICAgICAgICAgICBjYW5BdHRhY2ggPSB0aGlzLl9kb0F0dGFjaChib3VuZFJlbmRlcmVyLCB0ZXh0dXJlLCBhdHRhY2htZW50LCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAvLyBTZXQgdmlld3BvcnQgYWdhaW4gaW5jYXNlIGF0dGFjaGVkIHRvIGRpZmZlcmVudCBzaXplIHRleHR1cmVzLlxyXG4gICAgICAgICAgICBpZiAoIXRoaXMudmlld3BvcnQpIHtcclxuICAgICAgICAgICAgICAgIGJvdW5kUmVuZGVyZXIuc2V0Vmlld3BvcnQoMCwgMCwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2FuQXR0YWNoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdID0gdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF0gfHwge307XHJcbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdLnRleHR1cmUgPSB0ZXh0dXJlO1xyXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XS50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfZG9BdHRhY2g6IGZ1bmN0aW9uIChyZW5kZXJlciwgdGV4dHVyZSwgYXR0YWNobWVudCwgdGFyZ2V0KSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0ZXh0dXJlIGlzIGFsd2F5cyB1cGRhdGVkXHJcbiAgICAgICAgLy8gQmVjYXVzZSB0ZXh0dXJlIHdpZHRoIG9yIGhlaWdodCBtYXkgYmUgY2hhbmdlZCBhbmQgaW4gdGhpcyB3ZSBjYW4ndCBiZSBub3RpZmllZFxyXG4gICAgICAgIC8vIEZJWE1FIGF3a3dhcmQ7XHJcbiAgICAgICAgdmFyIHdlYmdsVGV4dHVyZSA9IHRleHR1cmUuZ2V0V2ViR0xUZXh0dXJlKHJlbmRlcmVyKTtcclxuICAgICAgICAvLyBBc3N1bWUgY2FjaGUgaGFzIGJlZW4gdXNlZC5cclxuICAgICAgICB2YXIgYXR0YWNoZWRUZXh0dXJlcyA9IHRoaXMuX2NhY2hlLmdldCgnYXR0YWNoZWRfdGV4dHVyZXMnKTtcclxuICAgICAgICBpZiAoYXR0YWNoZWRUZXh0dXJlcyAmJiBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdKSB7XHJcbiAgICAgICAgICAgIHZhciBvYmogPSBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0ZXh0dXJlIGFuZCB0YXJnZXQgbm90IGNoYW5nZWRcclxuICAgICAgICAgICAgaWYgKG9iai50ZXh0dXJlID09PSB0ZXh0dXJlICYmIG9iai50YXJnZXQgPT09IHRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF0dGFjaG1lbnQgPSArYXR0YWNobWVudDtcclxuXHJcbiAgICAgICAgdmFyIGNhbkF0dGFjaCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGF0dGFjaG1lbnQgPT09IEdMX0RFUFRIX0FUVEFDSE1FTlQgfHwgYXR0YWNobWVudCA9PT0gZ2xlbnVtLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkge1xyXG4gICAgICAgICAgICB2YXIgZXh0ZW5zaW9uID0gcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oJ1dFQkdMX2RlcHRoX3RleHR1cmUnKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghZXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdEZXB0aCB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXInKTtcclxuICAgICAgICAgICAgICAgIGNhbkF0dGFjaCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlLmZvcm1hdCAhPT0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVFxyXG4gICAgICAgICAgICAgICAgJiYgdGV4dHVyZS5mb3JtYXQgIT09IGdsZW51bS5ERVBUSF9TVEVOQ0lMXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVGhlIHRleHR1cmUgYXR0YWNoZWQgdG8gZGVwdGggYnVmZmVyIGlzIG5vdCBhIHZhbGlkLicpO1xyXG4gICAgICAgICAgICAgICAgY2FuQXR0YWNoID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIERpc3Bvc2UgcmVuZGVyIGJ1ZmZlciBjcmVhdGVkIHByZXZpb3VzXHJcbiAgICAgICAgICAgIGlmIChjYW5BdHRhY2gpIHtcclxuICAgICAgICAgICAgICAgIHZhciByZW5kZXJidWZmZXIgPSB0aGlzLl9jYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUik7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9ERVBUSF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9nbC5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUiwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSX0FUVEFDSEVELCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5wdXQoS0VZX0RFUFRIVEVYVFVSRV9BVFRBQ0hFRCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1pcG1hcCBsZXZlbCBjYW4gb25seSBiZSAwXHJcbiAgICAgICAgX2dsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBhdHRhY2htZW50LCB0YXJnZXQsIHdlYmdsVGV4dHVyZSwgMCk7XHJcblxyXG4gICAgICAgIGlmICghYXR0YWNoZWRUZXh0dXJlcykge1xyXG4gICAgICAgICAgICBhdHRhY2hlZFRleHR1cmVzID0ge307XHJcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlLnB1dCgnYXR0YWNoZWRfdGV4dHVyZXMnLCBhdHRhY2hlZFRleHR1cmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSA9IGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0gfHwge307XHJcbiAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XS50ZXh0dXJlID0gdGV4dHVyZTtcclxuICAgICAgICBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdLnRhcmdldCA9IHRhcmdldDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNhbkF0dGFjaDtcclxuICAgIH0sXHJcblxyXG4gICAgX2RvRGV0YWNoOiBmdW5jdGlvbiAoX2dsLCBhdHRhY2htZW50LCB0YXJnZXQpIHtcclxuICAgICAgICAvLyBEZXRhY2ggYSB0ZXh0dXJlIGZyb20gZnJhbWVidWZmZXJcclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL1dlYkdML2Jsb2IvbWFzdGVyL2NvbmZvcm1hbmNlLXN1aXRlcy8xLjAuMC9jb25mb3JtYW5jZS9mcmFtZWJ1ZmZlci10ZXN0Lmh0bWwjTDE0NVxyXG4gICAgICAgIF9nbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgYXR0YWNobWVudCwgdGFyZ2V0LCBudWxsLCAwKTtcclxuXHJcbiAgICAgICAgLy8gQXNzdW1lIGNhY2hlIGhhcyBiZWVuIHVzZWQuXHJcbiAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXMgPSB0aGlzLl9jYWNoZS5nZXQoJ2F0dGFjaGVkX3RleHR1cmVzJyk7XHJcbiAgICAgICAgaWYgKGF0dGFjaGVkVGV4dHVyZXMgJiYgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSkge1xyXG4gICAgICAgICAgICBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhdHRhY2htZW50ID09PSBHTF9ERVBUSF9BVFRBQ0hNRU5UIHx8IGF0dGFjaG1lbnQgPT09IGdsZW51bS5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FjaGUucHV0KEtFWV9ERVBUSFRFWFRVUkVfQVRUQUNIRUQsIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0YWNoIGEgdGV4dHVyZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbYXR0YWNobWVudD1nbC5DT0xPUl9BVFRBQ0hNRU5UMF1cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW3RhcmdldD1nbC5URVhUVVJFXzJEXVxyXG4gICAgICovXHJcbiAgICBkZXRhY2g6IGZ1bmN0aW9uIChhdHRhY2htZW50LCB0YXJnZXQpIHtcclxuICAgICAgICAvLyBUT0RPIGRlcHRoIGV4dGVuc2lvbiBjaGVjayA/XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF0gPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLl9ib3VuZFJlbmRlcmVyKSB7XHJcbiAgICAgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG4gICAgICAgICAgICBjYWNoZS51c2UodGhpcy5fYm91bmRSZW5kZXJlci5fX3VpZF9fKTtcclxuICAgICAgICAgICAgdGhpcy5fZG9EZXRhY2godGhpcy5fYm91bmRSZW5kZXJlci5nbCwgYXR0YWNobWVudCwgdGFyZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlXHJcbiAgICAgKiBAcGFyYW0gIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IF9nbFxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG5cclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJCdWZmZXIgPSBjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUik7XHJcbiAgICAgICAgaWYgKHJlbmRlckJ1ZmZlcikge1xyXG4gICAgICAgICAgICBfZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlckJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBmcmFtZUJ1ZmZlciA9IGNhY2hlLmdldChLRVlfRlJBTUVCVUZGRVIpO1xyXG4gICAgICAgIGlmIChmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgICAgICBfZ2wuZGVsZXRlRnJhbWVidWZmZXIoZnJhbWVCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYWNoZS5kZWxldGVDb250ZXh0KHJlbmRlcmVyLl9fdWlkX18pO1xyXG5cclxuICAgICAgICAvLyBDbGVhciBjYWNoZSBmb3IgcmV1c2luZ1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmVzID0ge307XHJcblxyXG4gICAgfVxyXG59KTtcclxuXHJcbkZyYW1lQnVmZmVyLkRFUFRIX0FUVEFDSE1FTlQgPSBHTF9ERVBUSF9BVFRBQ0hNRU5UO1xyXG5GcmFtZUJ1ZmZlci5DT0xPUl9BVFRBQ0hNRU5UMCA9IEdMX0NPTE9SX0FUVEFDSE1FTlQwO1xyXG5GcmFtZUJ1ZmZlci5TVEVOQ0lMX0FUVEFDSE1FTlQgPSBnbGVudW0uU1RFTkNJTF9BVFRBQ0hNRU5UO1xyXG5GcmFtZUJ1ZmZlci5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgPSBnbGVudW0uREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRnJhbWVCdWZmZXI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2X1RleGNvb3JkID0gdGV4Y29vcmQ7XFxuIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxufVxcbkBlbmRcIjtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IE9ydGhvQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9PcnRob2dyYXBoaWMnO1xyXG5pbXBvcnQgUGxhbmUgZnJvbSAnLi4vZ2VvbWV0cnkvUGxhbmUnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBNZXNoIGZyb20gJy4uL01lc2gnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IHZlcnRleEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3ZlcnRleC5nbHNsLmpzJztcclxuXHJcblNoYWRlclsnaW1wb3J0J10odmVydGV4R2xzbCk7XHJcblxyXG52YXIgcGxhbmVHZW8gPSBuZXcgUGxhbmUoKTtcclxudmFyIG1lc2ggPSBuZXcgTWVzaCh7XHJcbiAgICBnZW9tZXRyeTogcGxhbmVHZW8sXHJcbiAgICBmcnVzdHVtQ3VsbGluZzogZmFsc2VcclxufSk7XHJcbnZhciBjYW1lcmEgPSBuZXcgT3J0aG9DYW1lcmEoKTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLlBhc3NcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBQYXNzID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLlBhc3MjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGcmFnbWVudCBzaGFkZXIgc3RyaW5nXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBQRU5ESU5HIHNoYWRlciBvciBmcmFnbWVudCA/XHJcbiAgICAgICAgZnJhZ21lbnQ6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG91dHB1dHM6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lk1hdGVyaWFsfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1hdGVyaWFsOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBibGVuZFdpdGhQcmV2aW91czogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtCb29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNsZWFyQ29sb3I6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGVhckRlcHRoOiB0cnVlXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICB2YXIgc2hhZGVyID0gbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IudmVydGV4JyksIHRoaXMuZnJhZ21lbnQpO1xyXG4gICAgdmFyIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICBzaGFkZXI6IHNoYWRlclxyXG4gICAgfSk7XHJcbiAgICBtYXRlcmlhbC5lbmFibGVUZXh0dXJlc0FsbCgpO1xyXG5cclxuICAgIHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbDtcclxuXHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLlBhc3MucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSB7fSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBzZXRVbmlmb3JtOiBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwuc2V0VW5pZm9ybShuYW1lLCB2YWx1ZSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge31cclxuICAgICAqL1xyXG4gICAgZ2V0VW5pZm9ybTogZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICAgIHZhciB1bmlmb3JtID0gdGhpcy5tYXRlcmlhbC51bmlmb3Jtc1tuYW1lXTtcclxuICAgICAgICBpZiAodW5pZm9ybSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5pZm9ybS52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmV9IHRleHR1cmVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gYXR0YWNobWVudFxyXG4gICAgICovXHJcbiAgICBhdHRhY2hPdXRwdXQ6IGZ1bmN0aW9uKHRleHR1cmUsIGF0dGFjaG1lbnQpIHtcclxuICAgICAgICBpZiAoIXRoaXMub3V0cHV0cykge1xyXG4gICAgICAgICAgICB0aGlzLm91dHB1dHMgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXR0YWNobWVudCA9IGF0dGFjaG1lbnQgfHwgZ2xlbnVtLkNPTE9SX0FUVEFDSE1FTlQwO1xyXG4gICAgICAgIHRoaXMub3V0cHV0c1thdHRhY2htZW50XSA9IHRleHR1cmU7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmV9IHRleHR1cmVcclxuICAgICAqL1xyXG4gICAgZGV0YWNoT3V0cHV0OiBmdW5jdGlvbih0ZXh0dXJlKSB7XHJcbiAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0c1thdHRhY2htZW50XSA9PT0gdGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRzW2F0dGFjaG1lbnRdID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYmluZDogZnVuY3Rpb24ocmVuZGVyZXIsIGZyYW1lQnVmZmVyKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5vdXRwdXRzW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBmcmFtZUJ1ZmZlci5hdHRhY2godGV4dHVyZSwgYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHVuYmluZDogZnVuY3Rpb24ocmVuZGVyZXIsIGZyYW1lQnVmZmVyKSB7XHJcbiAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkZyYW1lQnVmZmVyfSBbZnJhbWVCdWZmZXJdXHJcbiAgICAgKi9cclxuICAgIHJlbmRlcjogZnVuY3Rpb24ocmVuZGVyZXIsIGZyYW1lQnVmZmVyKSB7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgaWYgKGZyYW1lQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmluZChyZW5kZXJlciwgZnJhbWVCdWZmZXIpO1xyXG4gICAgICAgICAgICAvLyBNUlQgU3VwcG9ydCBpbiBjaHJvbWVcclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc2RrL3Rlc3RzL2NvbmZvcm1hbmNlL2V4dGVuc2lvbnMvZXh0LWRyYXctYnVmZmVycy5odG1sXHJcbiAgICAgICAgICAgIHZhciBleHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX2RyYXdfYnVmZmVycycpO1xyXG4gICAgICAgICAgICBpZiAoZXh0ICYmIHRoaXMub3V0cHV0cykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ1ZnMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9ICthdHRhY2htZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50ID49IF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCAmJiBhdHRhY2htZW50IDw9IF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCArIDgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnVmcy5wdXNoKGF0dGFjaG1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGV4dC5kcmF3QnVmZmVyc0VYVChidWZzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXInLCB0aGlzLCByZW5kZXJlcik7XHJcblxyXG4gICAgICAgIC8vIEZJWE1FIERvbid0IGNsZWFyIGluIGVhY2ggcGFzcyBpbiBkZWZhdWx0LCBsZXQgdGhlIGNvbG9yIG92ZXJ3cml0ZSB0aGUgYnVmZmVyXHJcbiAgICAgICAgLy8gRklYTUUgcGl4ZWxzIG1heSBiZSBkaXNjYXJkXHJcbiAgICAgICAgdmFyIGNsZWFyQml0ID0gdGhpcy5jbGVhckRlcHRoID8gX2dsLkRFUFRIX0JVRkZFUl9CSVQgOiAwO1xyXG4gICAgICAgIF9nbC5kZXB0aE1hc2sodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJDb2xvcikge1xyXG4gICAgICAgICAgICBjbGVhckJpdCA9IGNsZWFyQml0IHwgX2dsLkNPTE9SX0JVRkZFUl9CSVQ7XHJcbiAgICAgICAgICAgIF9nbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHZhciBjYyA9IHRoaXMuY2xlYXJDb2xvcjtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2MpKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuY2xlYXJDb2xvcihjY1swXSwgY2NbMV0sIGNjWzJdLCBjY1szXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgX2dsLmNsZWFyKGNsZWFyQml0KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYmxlbmRXaXRoUHJldmlvdXMpIHtcclxuICAgICAgICAgICAgLy8gQmxlbmQgd2l0aCBwcmV2aW91cyByZW5kZXJlZCBzY2VuZSBpbiB0aGUgZmluYWwgb3V0cHV0XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIENvbmZpZ3VyZSBibGVuZC5cclxuICAgICAgICAgICAgLy8gRklYTUUgSXQgd2lsbCBjYXVzZSBzY3JlZW4gYmxpbmvvvJ9cclxuICAgICAgICAgICAgX2dsLmVuYWJsZShfZ2wuQkxFTkQpO1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIF9nbC5kaXNhYmxlKF9nbC5CTEVORCk7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudHJhbnNwYXJlbnQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyUXVhZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJyZW5kZXInLCB0aGlzLCByZW5kZXJlcik7XHJcblxyXG4gICAgICAgIGlmIChmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgICAgICB0aGlzLnVuYmluZChyZW5kZXJlciwgZnJhbWVCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaW1wbHkgZG8gcXVhZCByZW5kZXJpbmdcclxuICAgICAqL1xyXG4gICAgcmVuZGVyUXVhZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgbWVzaC5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XHJcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhbbWVzaF0sIGNhbWVyYSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7fVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBhc3M7XHJcbiIsIi8vIFRPRE8gU2hvdWxkIG5vdCBkZXJpdmVkIGZyb20gbWVzaD9cclxuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XHJcbmltcG9ydCBDdWJlR2VvbWV0cnkgZnJvbSAnLi4vZ2VvbWV0cnkvQ3ViZSc7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XHJcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tICcuLi9jYW1lcmEvUGVyc3BlY3RpdmUnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5cclxuaW1wb3J0IHNreWJveEVzc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9za3lib3guZ2xzbC5qcyc7XHJcblNoYWRlci5pbXBvcnQoc2t5Ym94RXNzbCk7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wbHVnaW4uU2t5Ym94XHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICB2YXIgc2t5VGV4ID0gbmV3IGNsYXkuVGV4dHVyZUN1YmUoKTtcclxuICogICAgIHNreVRleC5sb2FkKHtcclxuICogICAgICAgICAncHgnOiAnYXNzZXRzL3RleHR1cmVzL3NreS9weC5qcGcnLFxyXG4gKiAgICAgICAgICdueCc6ICdhc3NldHMvdGV4dHVyZXMvc2t5L254LmpwZydcclxuICogICAgICAgICAncHknOiAnYXNzZXRzL3RleHR1cmVzL3NreS9weS5qcGcnXHJcbiAqICAgICAgICAgJ255JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvbnkuanBnJ1xyXG4gKiAgICAgICAgICdweic6ICdhc3NldHMvdGV4dHVyZXMvc2t5L3B6LmpwZydcclxuICogICAgICAgICAnbnonOiAnYXNzZXRzL3RleHR1cmVzL3NreS9uei5qcGcnXHJcbiAqICAgICB9KTtcclxuICogICAgIHZhciBza3lib3ggPSBuZXcgY2xheS5wbHVnaW4uU2t5Ym94KHtcclxuICogICAgICAgICBzY2VuZTogc2NlbmVcclxuICogICAgIH0pO1xyXG4gKiAgICAgc2t5Ym94Lm1hdGVyaWFsLnNldCgnZW52aXJvbm1lbnRNYXAnLCBza3lUZXgpO1xyXG4gKi9cclxudmFyIFNreWJveCA9IE1lc2guZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgc2t5Ym94U2hhZGVyID0gbmV3IFNoYWRlcih7XHJcbiAgICAgICAgdmVydGV4OiBTaGFkZXIuc291cmNlKCdjbGF5LnNreWJveC52ZXJ0ZXgnKSxcclxuICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5za3lib3guZnJhZ21lbnQnKVxyXG4gICAgfSk7XHJcbiAgICB2YXIgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgIHNoYWRlcjogc2t5Ym94U2hhZGVyLFxyXG4gICAgICAgIGRlcHRoTWFzazogZmFsc2VcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuU2NlbmV9XHJcbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucGx1Z2luLlNreWJveC5wcm90b3R5cGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBzY2VuZTogbnVsbCxcclxuXHJcbiAgICAgICAgZ2VvbWV0cnk6IG5ldyBDdWJlR2VvbWV0cnkoKSxcclxuXHJcbiAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxyXG5cclxuICAgICAgICBlbnZpcm9ubWVudE1hcDogbnVsbCxcclxuXHJcbiAgICAgICAgY3VsbGluZzogZmFsc2UsXHJcblxyXG4gICAgICAgIF9kdW1teUNhbWVyYTogbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKClcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7XHJcbiAgICBpZiAoc2NlbmUpIHtcclxuICAgICAgICB0aGlzLmF0dGFjaFNjZW5lKHNjZW5lKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmVudmlyb25tZW50TWFwKSB7XHJcbiAgICAgICAgdGhpcy5zZXRFbnZpcm9ubWVudE1hcCh0aGlzLmVudmlyb25tZW50TWFwKTtcclxuICAgIH1cclxufSwgLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5Ta3lib3gjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogQXR0YWNoIHRoZSBza3lib3ggdG8gdGhlIHNjZW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlNjZW5lfSBzY2VuZVxyXG4gICAgICovXHJcbiAgICBhdHRhY2hTY2VuZTogZnVuY3Rpb24gKHNjZW5lKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5kZXRhY2hTY2VuZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY2VuZS5za3lib3ggPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7XHJcbiAgICAgICAgc2NlbmUub24oJ2JlZm9yZXJlbmRlcicsIHRoaXMuX2JlZm9yZVJlbmRlclNjZW5lLCB0aGlzKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERldGFjaCBmcm9tIHNjZW5lXHJcbiAgICAgKi9cclxuICAgIGRldGFjaFNjZW5lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5vZmYoJ2JlZm9yZXJlbmRlcicsIHRoaXMuX2JlZm9yZVJlbmRlclNjZW5lKTtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5za3lib3ggPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIHNreWJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5kZXRhY2hTY2VuZSgpO1xyXG4gICAgICAgIHRoaXMuZ2VvbWV0cnkuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZW52aXJvbm1lbnQgbWFwXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVGV4dHVyZUN1YmV9IGVudk1hcFxyXG4gICAgICovXHJcbiAgICBzZXRFbnZpcm9ubWVudE1hcDogZnVuY3Rpb24gKGVudk1hcCkge1xyXG4gICAgICAgIGlmIChlbnZNYXAudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlMkQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwuZGVmaW5lKCdFUVVJUkVDVEFOR1VMQVInKTtcclxuICAgICAgICAgICAgLy8gTElORUFSIGZpbHRlciBjYW4gcmVtb3ZlIHRoZSBhcnRpZmFjdHMgaW4gcG9sZVxyXG4gICAgICAgICAgICBlbnZNYXAubWluRmlsdGVyID0gVGV4dHVyZS5MSU5FQVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnVuZGVmaW5lKCdFUVVJUkVDVEFOR1VMQVInKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC5zZXQoJ2Vudmlyb25tZW50TWFwJywgZW52TWFwKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBlbnZpcm9ubWVudCBtYXBcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZUN1YmV9XHJcbiAgICAgKi9cclxuICAgIGdldEVudmlyb25tZW50TWFwOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0ZXJpYWwuZ2V0KCdlbnZpcm9ubWVudE1hcCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfYmVmb3JlUmVuZGVyU2NlbmU6IGZ1bmN0aW9uKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJTa3lib3gocmVuZGVyZXIsIGNhbWVyYSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbmRlclNreWJveDogZnVuY3Rpb24gKHJlbmRlcmVyLCBjYW1lcmEpIHtcclxuICAgICAgICB2YXIgZHVtbXlDYW1lcmEgPSB0aGlzLl9kdW1teUNhbWVyYTtcclxuICAgICAgICBkdW1teUNhbWVyYS5hc3BlY3QgPSByZW5kZXJlci5nZXRWaWV3cG9ydEFzcGVjdCgpO1xyXG4gICAgICAgIGR1bW15Q2FtZXJhLmZvdiA9IGNhbWVyYS5mb3YgfHwgNTA7XHJcbiAgICAgICAgZHVtbXlDYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KGR1bW15Q2FtZXJhLmludlByb2plY3Rpb25NYXRyaXgsIGR1bW15Q2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xyXG4gICAgICAgIGR1bW15Q2FtZXJhLndvcmxkVHJhbnNmb3JtLmNvcHkoY2FtZXJhLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICBkdW1teUNhbWVyYS52aWV3TWF0cml4LmNvcHkoY2FtZXJhLnZpZXdNYXRyaXgpO1xyXG5cclxuICAgICAgICB0aGlzLnBvc2l0aW9uLmNvcHkoY2FtZXJhLmdldFdvcmxkUG9zaXRpb24oKSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgLy8gRG9uJ3QgcmVtZW1iZXIgdG8gZGlzYWJsZSBibGVuZFxyXG4gICAgICAgIHJlbmRlcmVyLmdsLmRpc2FibGUocmVuZGVyZXIuZ2wuQkxFTkQpO1xyXG4gICAgICAgIGlmICh0aGlzLm1hdGVyaWFsLmdldCgnbG9kJykgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdMT0QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ0xPRCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKFt0aGlzXSwgZHVtbXlDYW1lcmEpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNreWJveDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcblxyXG52YXIgdGFyZ2V0cyA9IFsncHgnLCAnbngnLCAncHknLCAnbnknLCAncHonLCAnbnonXTtcclxuXHJcbi8qKlxyXG4gKiBQYXNzIHJlbmRlcmluZyBzY2VuZSB0byBhIGVudmlyb25tZW50IGN1YmUgbWFwXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXBcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICogQGV4YW1wbGVcclxuICogICAgIC8vIEV4YW1wbGUgb2YgY2FyIHJlZmxlY3Rpb25cclxuICogICAgIHZhciBlbnZNYXAgPSBuZXcgY2xheS5UZXh0dXJlQ3ViZSh7XHJcbiAqICAgICAgICAgd2lkdGg6IDI1NixcclxuICogICAgICAgICBoZWlnaHQ6IDI1NlxyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgZW52UGFzcyA9IG5ldyBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAoe1xyXG4gKiAgICAgICAgIHBvc2l0aW9uOiBjYXIucG9zaXRpb24sXHJcbiAqICAgICAgICAgdGV4dHVyZTogZW52TWFwXHJcbiAqICAgICB9KTtcclxuICogICAgIHZhciBjYXJCb2R5ID0gY2FyLmdldENoaWxkQnlOYW1lKCdib2R5Jyk7XHJcbiAqICAgICBjYXJCb2R5Lm1hdGVyaWFsLmVuYWJsZVRleHR1cmUoJ2Vudmlyb25tZW50TWFwJyk7XHJcbiAqICAgICBjYXJCb2R5Lm1hdGVyaWFsLnNldCgnZW52aXJvbm1lbnRNYXAnLCBlbnZNYXApO1xyXG4gKiAgICAgLi4uXHJcbiAqICAgICBhbmltYXRpb24ub24oJ2ZyYW1lJywgZnVuY3Rpb24oZnJhbWVUaW1lKSB7XHJcbiAqICAgICAgICAgZW52UGFzcy5yZW5kZXIocmVuZGVyZXIsIHNjZW5lKTtcclxuICogICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAqICAgICB9KTtcclxuICovXHJcbnZhciBFbnZpcm9ubWVudE1hcFBhc3MgPSBCYXNlLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHZhciByZXQgPSAvKiogQGxlbmRzIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbWVyYSBwb3NpdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCNcclxuICAgICAgICAgKi9cclxuICAgICAgICBwb3NpdGlvbjogbmV3IFZlY3RvcjMoKSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW1lcmEgZmFyIHBsYW5lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAbWVtYmVyT2YgY2xheS5wcmVQYXNzLkVudmlyb25tZW50TWFwI1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZhcjogMTAwMCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW1lcmEgbmVhciBwbGFuZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCNcclxuICAgICAgICAgKi9cclxuICAgICAgICBuZWFyOiAwLjEsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRW52aXJvbm1lbnQgY3ViZSBtYXBcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlQ3ViZX1cclxuICAgICAgICAgKiBAbWVtYmVyT2YgY2xheS5wcmVQYXNzLkVudmlyb25tZW50TWFwI1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRleHR1cmU6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFVzZWQgaWYgeW91IHdhbid0IGhhdmUgc2hhZG93IGluIGVudmlyb25tZW50IG1hcFxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LnByZVBhc3MuU2hhZG93TWFwfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNoYWRvd01hcFBhc3M6IG51bGwsXHJcbiAgICB9O1xyXG4gICAgdmFyIGNhbWVyYXMgPSByZXQuX2NhbWVyYXMgPSB7XHJcbiAgICAgICAgcHg6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXHJcbiAgICAgICAgbng6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXHJcbiAgICAgICAgcHk6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXHJcbiAgICAgICAgbnk6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXHJcbiAgICAgICAgcHo6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXHJcbiAgICAgICAgbno6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSlcclxuICAgIH07XHJcbiAgICBjYW1lcmFzLnB4Lmxvb2tBdChWZWN0b3IzLlBPU0lUSVZFX1gsIFZlY3RvcjMuTkVHQVRJVkVfWSk7XHJcbiAgICBjYW1lcmFzLm54Lmxvb2tBdChWZWN0b3IzLk5FR0FUSVZFX1gsIFZlY3RvcjMuTkVHQVRJVkVfWSk7XHJcbiAgICBjYW1lcmFzLnB5Lmxvb2tBdChWZWN0b3IzLlBPU0lUSVZFX1ksIFZlY3RvcjMuUE9TSVRJVkVfWik7XHJcbiAgICBjYW1lcmFzLm55Lmxvb2tBdChWZWN0b3IzLk5FR0FUSVZFX1ksIFZlY3RvcjMuTkVHQVRJVkVfWik7XHJcbiAgICBjYW1lcmFzLnB6Lmxvb2tBdChWZWN0b3IzLlBPU0lUSVZFX1osIFZlY3RvcjMuTkVHQVRJVkVfWSk7XHJcbiAgICBjYW1lcmFzLm56Lmxvb2tBdChWZWN0b3IzLk5FR0FUSVZFX1osIFZlY3RvcjMuTkVHQVRJVkVfWSk7XHJcblxyXG4gICAgLy8gRklYTUUgSW4gd2luZG93cywgdXNlIG9uZSBmcmFtZWJ1ZmZlciBvbmx5IHJlbmRlcnMgb25lIHNpZGUgb2YgY3ViZW1hcFxyXG4gICAgcmV0Ll9mcmFtZUJ1ZmZlciA9IG5ldyBGcmFtZUJ1ZmZlcigpO1xyXG5cclxuICAgIHJldHVybiByZXQ7XHJcbn0sICAvKiogQGxlbmRzIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHRhcmdldFxyXG4gICAgICogQHJldHVybiAge2NsYXkuQ2FtZXJhfVxyXG4gICAgICovXHJcbiAgICBnZXRDYW1lcmE6IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2FtZXJhc1t0YXJnZXRdO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuU2NlbmV9IHNjZW5lXHJcbiAgICAgKiBAcGFyYW0gIHtib29sZWFufSBbbm90VXBkYXRlU2NlbmU9ZmFsc2VdXHJcbiAgICAgKi9cclxuICAgIHJlbmRlcjogZnVuY3Rpb24ocmVuZGVyZXIsIHNjZW5lLCBub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBpZiAoIW5vdFVwZGF0ZVNjZW5lKSB7XHJcbiAgICAgICAgICAgIHNjZW5lLnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUd2VhayBmb3ZcclxuICAgICAgICAvLyBodHRwOi8vdGhlLXdpdG5lc3MubmV0L25ld3MvMjAxMi8wMi9zZWFtbGVzcy1jdWJlLW1hcC1maWx0ZXJpbmcvXHJcbiAgICAgICAgdmFyIG4gPSB0aGlzLnRleHR1cmUud2lkdGg7XHJcbiAgICAgICAgdmFyIGZvdiA9IDIgKiBNYXRoLmF0YW4obiAvIChuIC0gMC41KSkgLyBNYXRoLlBJICogMTgwO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGFyZ2V0c1tpXTtcclxuICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuX2NhbWVyYXNbdGFyZ2V0XTtcclxuICAgICAgICAgICAgVmVjdG9yMy5jb3B5KGNhbWVyYS5wb3NpdGlvbiwgdGhpcy5wb3NpdGlvbik7XHJcblxyXG4gICAgICAgICAgICBjYW1lcmEuZmFyID0gdGhpcy5mYXI7XHJcbiAgICAgICAgICAgIGNhbWVyYS5uZWFyID0gdGhpcy5uZWFyO1xyXG4gICAgICAgICAgICBjYW1lcmEuZm92ID0gZm92O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hhZG93TWFwUGFzcykge1xyXG4gICAgICAgICAgICAgICAgY2FtZXJhLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBib3VuZGluZ0JveExhc3RGcmFtZVxyXG4gICAgICAgICAgICAgICAgdmFyIGJib3ggPSBzY2VuZS5nZXRCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgICAgICAgICAgYmJveC5hcHBseVRyYW5zZm9ybShjYW1lcmEudmlld01hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICBzY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUuY29weShiYm94KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYWRvd01hcFBhc3MucmVuZGVyKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5hdHRhY2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmUsIF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCxcclxuICAgICAgICAgICAgICAgIF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBFbnZpcm9ubWVudE1hcFBhc3M7XHJcbiIsImltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XHJcblxyXG4vLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2JiOTQzOTkxKHY9dnMuODUpLmFzcHhcclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3Rvamkvd2ViZ2wtdGV4dHVyZS11dGlscy9ibG9iL21hc3Rlci90ZXh0dXJlLXV0aWwvZGRzLmpzXHJcbnZhciBERFNfTUFHSUMgPSAweDIwNTM0NDQ0O1xyXG5cclxudmFyIEREU0RfQ0FQUyA9IDB4MTtcclxudmFyIEREU0RfSEVJR0hUID0gMHgyO1xyXG52YXIgRERTRF9XSURUSCA9IDB4NDtcclxudmFyIEREU0RfUElUQ0ggPSAweDg7XHJcbnZhciBERFNEX1BJWEVMRk9STUFUID0gMHgxMDAwO1xyXG52YXIgRERTRF9NSVBNQVBDT1VOVCA9IDB4MjAwMDA7XHJcbnZhciBERFNEX0xJTkVBUlNJWkUgPSAweDgwMDAwO1xyXG52YXIgRERTRF9ERVBUSCA9IDB4ODAwMDAwO1xyXG5cclxudmFyIEREU0NBUFNfQ09NUExFWCA9IDB4ODtcclxudmFyIEREU0NBUFNfTUlQTUFQID0gMHg0MDAwMDA7XHJcbnZhciBERFNDQVBTX1RFWFRVUkUgPSAweDEwMDA7XHJcblxyXG52YXIgRERTQ0FQUzJfQ1VCRU1BUCA9IDB4MjAwO1xyXG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9QT1NJVElWRVggPSAweDQwMDtcclxudmFyIEREU0NBUFMyX0NVQkVNQVBfTkVHQVRJVkVYID0gMHg4MDA7XHJcbnZhciBERFNDQVBTMl9DVUJFTUFQX1BPU0lUSVZFWSA9IDB4MTAwMDtcclxudmFyIEREU0NBUFMyX0NVQkVNQVBfTkVHQVRJVkVZID0gMHgyMDAwO1xyXG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9QT1NJVElWRVogPSAweDQwMDA7XHJcbnZhciBERFNDQVBTMl9DVUJFTUFQX05FR0FUSVZFWiA9IDB4ODAwMDtcclxudmFyIEREU0NBUFMyX1ZPTFVNRSA9IDB4MjAwMDAwO1xyXG5cclxudmFyIEREUEZfQUxQSEFQSVhFTFMgPSAweDE7XHJcbnZhciBERFBGX0FMUEhBID0gMHgyO1xyXG52YXIgRERQRl9GT1VSQ0MgPSAweDQ7XHJcbnZhciBERFBGX1JHQiA9IDB4NDA7XHJcbnZhciBERFBGX1lVViA9IDB4MjAwO1xyXG52YXIgRERQRl9MVU1JTkFOQ0UgPSAweDIwMDAwO1xyXG5cclxuZnVuY3Rpb24gZm91ckNDVG9JbnQzMih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlLmNoYXJDb2RlQXQoMCkgK1xyXG4gICAgICAgICh2YWx1ZS5jaGFyQ29kZUF0KDEpIDw8IDgpICtcclxuICAgICAgICAodmFsdWUuY2hhckNvZGVBdCgyKSA8PCAxNikgK1xyXG4gICAgICAgICh2YWx1ZS5jaGFyQ29kZUF0KDMpIDw8IDI0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW50MzJUb0ZvdXJDQyh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoXHJcbiAgICAgICAgdmFsdWUgJiAweGZmLFxyXG4gICAgICAgICh2YWx1ZSA+PiA4KSAmIDB4ZmYsXHJcbiAgICAgICAgKHZhbHVlID4+IDE2KSAmIDB4ZmYsXHJcbiAgICAgICAgKHZhbHVlID4+IDI0KSAmIDB4ZmZcclxuICAgICk7XHJcbn1cclxuXHJcbnZhciBoZWFkZXJMZW5ndGhJbnQgPSAzMTsgLy8gVGhlIGhlYWRlciBsZW5ndGggaW4gMzIgYml0IGludHNcclxuXHJcbnZhciBGT1VSQ0NfRFhUMSA9IGZvdXJDQ1RvSW50MzIoJ0RYVDEnKTtcclxudmFyIEZPVVJDQ19EWFQzID0gZm91ckNDVG9JbnQzMignRFhUMycpO1xyXG52YXIgRk9VUkNDX0RYVDUgPSBmb3VyQ0NUb0ludDMyKCdEWFQ1Jyk7XHJcbi8vIE9mZnNldHMgaW50byB0aGUgaGVhZGVyIGFycmF5XHJcbnZhciBvZmZfbWFnaWMgPSAwO1xyXG5cclxudmFyIG9mZl9zaXplID0gMTtcclxudmFyIG9mZl9mbGFncyA9IDI7XHJcbnZhciBvZmZfaGVpZ2h0ID0gMztcclxudmFyIG9mZl93aWR0aCA9IDQ7XHJcblxyXG52YXIgb2ZmX21pcG1hcENvdW50ID0gNztcclxuXHJcbnZhciBvZmZfcGZGbGFncyA9IDIwO1xyXG52YXIgb2ZmX3BmRm91ckNDID0gMjE7XHJcblxyXG52YXIgb2ZmX2NhcHMgPSAyNztcclxudmFyIG9mZl9jYXBzMiA9IDI4O1xyXG52YXIgb2ZmX2NhcHMzID0gMjk7XHJcbnZhciBvZmZfY2FwczQgPSAzMDtcclxuXHJcbnZhciByZXQgPSB7XHJcbiAgICBwYXJzZTogZnVuY3Rpb24oYXJyYXlCdWZmZXIsIG91dCkge1xyXG4gICAgICAgIHZhciBoZWFkZXIgPSBuZXcgSW50MzJBcnJheShhcnJheUJ1ZmZlciwgMCwgaGVhZGVyTGVuZ3RoSW50KTtcclxuICAgICAgICBpZiAoaGVhZGVyW29mZl9tYWdpY10gIT09IEREU19NQUdJQykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFoZWFkZXIob2ZmX3BmRmxhZ3MpICYgRERQRl9GT1VSQ0MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZm91ckNDID0gaGVhZGVyKG9mZl9wZkZvdXJDQyk7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gaGVhZGVyW29mZl93aWR0aF07XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IGhlYWRlcltvZmZfaGVpZ2h0XTtcclxuICAgICAgICB2YXIgaXNDdWJlTWFwID0gaGVhZGVyW29mZl9jYXBzMl0gJiBERFNDQVBTMl9DVUJFTUFQO1xyXG4gICAgICAgIHZhciBoYXNNaXBtYXAgPSBoZWFkZXJbb2ZmX2ZsYWdzXSAmIEREU0RfTUlQTUFQQ09VTlQ7XHJcbiAgICAgICAgdmFyIGJsb2NrQnl0ZXMsIGludGVybmFsRm9ybWF0O1xyXG4gICAgICAgIHN3aXRjaChmb3VyQ0MpIHtcclxuICAgICAgICAgICAgY2FzZSBGT1VSQ0NfRFhUMTpcclxuICAgICAgICAgICAgICAgIGJsb2NrQnl0ZXMgPSA4O1xyXG4gICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSBUZXh0dXJlLkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBGT1VSQ0NfRFhUMzpcclxuICAgICAgICAgICAgICAgIGJsb2NrQnl0ZXMgPSAxNjtcclxuICAgICAgICAgICAgICAgIGludGVybmFsRm9ybWF0ID0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEZPVVJDQ19EWFQ1OlxyXG4gICAgICAgICAgICAgICAgYmxvY2tCeXRlcyA9IDE2O1xyXG4gICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSBUZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRhdGFPZmZzZXQgPSBoZWFkZXJbb2ZmX3NpemVdICsgNDtcclxuICAgICAgICAvLyBUT0RPOiBTdXBwb3NlIGFsbCBmYWNlIGFyZSBleGlzdGVkXHJcbiAgICAgICAgdmFyIGZhY2VOdW1iZXIgPSBpc0N1YmVNYXAgPyA2IDogMTtcclxuICAgICAgICB2YXIgbWlwbWFwQ291bnQgPSAxO1xyXG4gICAgICAgIGlmIChoYXNNaXBtYXApIHtcclxuICAgICAgICAgICAgbWlwbWFwQ291bnQgPSBNYXRoLm1heCgxLCBoZWFkZXJbb2ZmX21pcG1hcENvdW50XSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZXMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGZhY2VOdW1iZXI7IGYrKykge1xyXG4gICAgICAgICAgICB2YXIgX3dpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgICAgIHZhciBfaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgICAgICB0ZXh0dXJlc1tmXSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IF93aWR0aCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogX2hlaWdodCxcclxuICAgICAgICAgICAgICAgIGZvcm1hdDogaW50ZXJuYWxGb3JtYXRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHZhciBtaXBtYXBzID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWlwbWFwQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRhdGFMZW5ndGggPSBNYXRoLm1heCg0LCBfd2lkdGgpIC8gNCAqIE1hdGgubWF4KDQsIF9oZWlnaHQpIC8gNCAqIGJsb2NrQnl0ZXM7XHJcbiAgICAgICAgICAgICAgICB2YXIgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIsIGRhdGFPZmZzZXQsIGRhdGFMZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRhdGFPZmZzZXQgKz0gZGF0YUxlbmd0aDtcclxuICAgICAgICAgICAgICAgIF93aWR0aCAqPSAwLjU7XHJcbiAgICAgICAgICAgICAgICBfaGVpZ2h0ICo9IDAuNTtcclxuICAgICAgICAgICAgICAgIG1pcG1hcHNbaV0gPSBieXRlQXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGV4dHVyZXNbZl0ucGl4ZWxzID0gbWlwbWFwc1swXTtcclxuICAgICAgICAgICAgaWYgKGhhc01pcG1hcCkge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZXNbZl0ubWlwbWFwcyA9IG1pcG1hcHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIC8vIHJldHVybiBpc0N1YmVNYXAgPyB0ZXh0dXJlcyA6IHRleHR1cmVzWzBdO1xyXG4gICAgICAgIGlmIChvdXQpIHtcclxuICAgICAgICAgICAgb3V0LndpZHRoID0gdGV4dHVyZXNbMF0ud2lkdGg7XHJcbiAgICAgICAgICAgIG91dC5oZWlnaHQgPSB0ZXh0dXJlc1swXS5oZWlnaHQ7XHJcbiAgICAgICAgICAgIG91dC5mb3JtYXQgPSB0ZXh0dXJlc1swXS5mb3JtYXQ7XHJcbiAgICAgICAgICAgIG91dC5waXhlbHMgPSB0ZXh0dXJlc1swXS5waXhlbHM7XHJcbiAgICAgICAgICAgIG91dC5taXBtYXBzID0gdGV4dHVyZXNbMF0ubWlwbWFwcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlc1swXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCByZXQ7XHJcbiIsImltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbnZhciB0b0NoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xyXG5cclxudmFyIE1JTkVMRU4gPSA4O1xyXG52YXIgTUFYRUxFTiA9IDB4N2ZmZjtcclxuZnVuY3Rpb24gcmdiZTJmbG9hdChyZ2JlLCBidWZmZXIsIG9mZnNldCwgZXhwb3N1cmUpIHtcclxuICAgIGlmIChyZ2JlWzNdID4gMCkge1xyXG4gICAgICAgIHZhciBmID0gTWF0aC5wb3coMi4wLCByZ2JlWzNdIC0gMTI4IC0gOCArIGV4cG9zdXJlKTtcclxuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMF0gPSByZ2JlWzBdICogZjtcclxuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMV0gPSByZ2JlWzFdICogZjtcclxuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMl0gPSByZ2JlWzJdICogZjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGJ1ZmZlcltvZmZzZXQgKyAwXSA9IDA7XHJcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDFdID0gMDtcclxuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMl0gPSAwO1xyXG4gICAgfVxyXG4gICAgYnVmZmVyW29mZnNldCArIDNdID0gMS4wO1xyXG4gICAgcmV0dXJuIGJ1ZmZlcjtcclxufVxyXG5cclxuZnVuY3Rpb24gdWludDgyc3RyaW5nKGFycmF5LCBvZmZzZXQsIHNpemUpIHtcclxuICAgIHZhciBzdHIgPSAnJztcclxuICAgIGZvciAodmFyIGkgPSBvZmZzZXQ7IGkgPCBzaXplOyBpKyspIHtcclxuICAgICAgICBzdHIgKz0gdG9DaGFyKGFycmF5W2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvcHlyZ2JlKHMsIHQpIHtcclxuICAgIHRbMF0gPSBzWzBdO1xyXG4gICAgdFsxXSA9IHNbMV07XHJcbiAgICB0WzJdID0gc1syXTtcclxuICAgIHRbM10gPSBzWzNdO1xyXG59XHJcblxyXG4vLyBUT0RPIDogY2hlY2tcclxuZnVuY3Rpb24gb2xkUmVhZENvbG9ycyhzY2FuLCBidWZmZXIsIG9mZnNldCwgeG1heCkge1xyXG4gICAgdmFyIHJzaGlmdCA9IDAsIHggPSAwLCBsZW4gPSB4bWF4O1xyXG4gICAgd2hpbGUgKGxlbiA+IDApIHtcclxuICAgICAgICBzY2FuW3hdWzBdID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgICAgICBzY2FuW3hdWzFdID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgICAgICBzY2FuW3hdWzJdID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgICAgICBzY2FuW3hdWzNdID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgICAgICBpZiAoc2Nhblt4XVswXSA9PT0gMSAmJiBzY2FuW3hdWzFdID09PSAxICYmIHNjYW5beF1bMl0gPT09IDEpIHtcclxuICAgICAgICAgICAgLy8gZXhwIGlzIGNvdW50IG9mIHJlcGVhdGVkIHBpeGVsc1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gKHNjYW5beF1bM10gPDwgcnNoaWZ0KSA+Pj4gMDsgaSA+IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgY29weXJnYmUoc2Nhblt4LTFdLCBzY2FuW3hdKTtcclxuICAgICAgICAgICAgICAgIHgrKztcclxuICAgICAgICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJzaGlmdCArPSA4O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHgrKztcclxuICAgICAgICAgICAgbGVuLS07XHJcbiAgICAgICAgICAgIHJzaGlmdCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9mZnNldDtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVhZENvbG9ycyhzY2FuLCBidWZmZXIsIG9mZnNldCwgeG1heCkge1xyXG4gICAgaWYgKCh4bWF4IDwgTUlORUxFTikgfCAoeG1heCA+IE1BWEVMRU4pKSB7XHJcbiAgICAgICAgcmV0dXJuIG9sZFJlYWRDb2xvcnMoc2NhbiwgYnVmZmVyLCBvZmZzZXQsIHhtYXgpO1xyXG4gICAgfVxyXG4gICAgdmFyIGkgPSBidWZmZXJbb2Zmc2V0KytdO1xyXG4gICAgaWYgKGkgIT0gMikge1xyXG4gICAgICAgIHJldHVybiBvbGRSZWFkQ29sb3JzKHNjYW4sIGJ1ZmZlciwgb2Zmc2V0IC0gMSwgeG1heCk7XHJcbiAgICB9XHJcbiAgICBzY2FuWzBdWzFdID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgIHNjYW5bMF1bMl0gPSBidWZmZXJbb2Zmc2V0KytdO1xyXG5cclxuICAgIGkgPSBidWZmZXJbb2Zmc2V0KytdO1xyXG4gICAgaWYgKCgoKHNjYW5bMF1bMl0gPDwgOCkgPj4+IDApIHwgaSkgPj4+IDAgIT09IHhtYXgpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XHJcbiAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB4bWF4Oykge1xyXG4gICAgICAgICAgICB2YXIgY29kZSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgICAgIGlmIChjb2RlID4gMTI4KSB7XHJcbiAgICAgICAgICAgICAgICBjb2RlID0gKGNvZGUgJiAxMjcpID4+PiAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY29kZS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nhblt4KytdW2ldID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvZGUtLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjYW5beCsrXVtpXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2Zmc2V0O1xyXG59XHJcblxyXG5cclxudmFyIHJldCA9IHtcclxuICAgIC8vIGh0dHA6Ly93d3cuZ3JhcGhpY3MuY29ybmVsbC5lZHUvfmJqdy9yZ2JlLmh0bWxcclxuICAgIC8vIEJsZW5kZXIgc291cmNlXHJcbiAgICAvLyBodHRwOi8vcmFkc2l0ZS5sYmwuZ292L3JhZGlhbmNlL3JlZmVyL05vdGVzL3BpY3R1cmVfZm9ybWF0Lmh0bWxcclxuICAgIHBhcnNlUkdCRTogZnVuY3Rpb24oYXJyYXlCdWZmZXIsIHRleHR1cmUsIGV4cG9zdXJlKSB7XHJcbiAgICAgICAgaWYgKGV4cG9zdXJlID09IG51bGwpIHtcclxuICAgICAgICAgICAgZXhwb3N1cmUgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGF0YSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKTtcclxuICAgICAgICB2YXIgc2l6ZSA9IGRhdGEubGVuZ3RoO1xyXG4gICAgICAgIGlmICh1aW50ODJzdHJpbmcoZGF0YSwgMCwgMikgIT09ICcjPycpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBmaW5kIGVtcHR5IGxpbmUsIG5leHQgbGluZSBpcyByZXNvbHV0aW9uIGluZm9cclxuICAgICAgICBmb3IgKHZhciBpID0gMjsgaSA8IHNpemU7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodG9DaGFyKGRhdGFbaV0pID09PSAnXFxuJyAmJiB0b0NoYXIoZGF0YVtpKzFdKSA9PT0gJ1xcbicpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpID49IHNpemUpIHsgLy8gbm90IGZvdW5kXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZmluZCByZXNvbHV0aW9uIGluZm8gbGluZVxyXG4gICAgICAgIGkgKz0gMjtcclxuICAgICAgICB2YXIgc3RyID0gJyc7XHJcbiAgICAgICAgZm9yICg7IGkgPCBzaXplOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIF9jaGFyID0gdG9DaGFyKGRhdGFbaV0pO1xyXG4gICAgICAgICAgICBpZiAoX2NoYXIgPT09ICdcXG4nKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdHIgKz0gX2NoYXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIC1ZIE0gK1ggTlxyXG4gICAgICAgIHZhciB0bXAgPSBzdHIuc3BsaXQoJyAnKTtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gcGFyc2VJbnQodG1wWzFdKTtcclxuICAgICAgICB2YXIgd2lkdGggPSBwYXJzZUludCh0bXBbM10pO1xyXG4gICAgICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZWFkIGFuZCBkZWNvZGUgYWN0dWFsIGRhdGFcclxuICAgICAgICB2YXIgb2Zmc2V0ID0gaSsxO1xyXG4gICAgICAgIHZhciBzY2FubGluZSA9IFtdO1xyXG4gICAgICAgIC8vIG1lbXplcm9cclxuICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcclxuICAgICAgICAgICAgc2NhbmxpbmVbeF0gPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHNjYW5saW5lW3hdW2pdID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcGl4ZWxzID0gbmV3IEZsb2F0MzJBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpO1xyXG4gICAgICAgIHZhciBvZmZzZXQyID0gMDtcclxuICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkQ29sb3JzKHNjYW5saW5lLCBkYXRhLCBvZmZzZXQsIHdpZHRoKTtcclxuICAgICAgICAgICAgaWYgKCFvZmZzZXQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xyXG4gICAgICAgICAgICAgICAgcmdiZTJmbG9hdChzY2FubGluZVt4XSwgcGl4ZWxzLCBvZmZzZXQyLCBleHBvc3VyZSk7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQyICs9IDQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGV4dHVyZSkge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZXh0dXJlLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgdGV4dHVyZS5waXhlbHMgPSBwaXhlbHM7XHJcbiAgICAgICAgLy8gSEFMRl9GTE9BVCBjYW4ndCB1c2UgRmxvYXQzMkFycmF5XHJcbiAgICAgICAgdGV4dHVyZS50eXBlID0gVGV4dHVyZS5GTE9BVDtcclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgcGFyc2VSR0JFRnJvbVBORzogZnVuY3Rpb24ocG5nKSB7XHJcblxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgcmV0O1xyXG4iLCJpbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgRW52aXJvbm1lbnRNYXBQYXNzIGZyb20gJy4uL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAnO1xyXG5pbXBvcnQgU2t5ZG9tZSBmcm9tICcuLi9wbHVnaW4vU2t5ZG9tZSc7XHJcbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XHJcblxyXG5pbXBvcnQgZGRzIGZyb20gJy4vZGRzJztcclxuaW1wb3J0IGhkciBmcm9tICcuL2hkcic7XHJcblxyXG4vKipcclxuICogQGFsaWFzIGNsYXkudXRpbC50ZXh0dXJlXHJcbiAqL1xyXG52YXIgdGV4dHVyZVV0aWwgPSB7XHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ3xvYmplY3R9IHBhdGhcclxuICAgICAqIEBwYXJhbSAge29iamVjdH0gW29wdGlvbl1cclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb25zdWNjZXNzXVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvbmVycm9yXVxyXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlfVxyXG4gICAgICovXHJcbiAgICBsb2FkVGV4dHVyZTogZnVuY3Rpb24gKHBhdGgsIG9wdGlvbiwgb25zdWNjZXNzLCBvbmVycm9yKSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmU7XHJcbiAgICAgICAgaWYgKHR5cGVvZihvcHRpb24pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIG9uc3VjY2VzcyA9IG9wdGlvbjtcclxuICAgICAgICAgICAgb25lcnJvciA9IG9uc3VjY2VzcztcclxuICAgICAgICAgICAgb3B0aW9uID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvcHRpb24gPSBvcHRpb24gfHwge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YocGF0aCkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXRoLm1hdGNoKC8uaGRyJC8pIHx8IG9wdGlvbi5maWxlVHlwZSA9PT0gJ2hkcicpIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgc1JHQjogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZVV0aWwuX2ZldGNoVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhkci5wYXJzZVJHQkUoZGF0YSwgdGV4dHVyZSwgb3B0aW9uLmV4cG9zdXJlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5kaXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbnN1Y2Nlc3MgJiYgb25zdWNjZXNzKHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgb25lcnJvclxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHBhdGgubWF0Y2goLy5kZHMkLykgfHwgb3B0aW9uLmZpbGVUeXBlID09PSAnZGRzJykge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlVXRpbC5fZmV0Y2hUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGRzLnBhcnNlKGRhdGEsIHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLmRpcnR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uc3VjY2VzcyAmJiBvbnN1Y2Nlc3ModGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBvbmVycm9yXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoKTtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUubG9hZChwYXRoKTtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUuc3VjY2VzcyhvbnN1Y2Nlc3MpO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5lcnJvcihvbmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgcGF0aCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mKHBhdGgucHgpICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmVDdWJlKCk7XHJcbiAgICAgICAgICAgIHRleHR1cmUubG9hZChwYXRoKTtcclxuICAgICAgICAgICAgdGV4dHVyZS5zdWNjZXNzKG9uc3VjY2Vzcyk7XHJcbiAgICAgICAgICAgIHRleHR1cmUuZXJyb3Iob25lcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIExvYWQgYSBwYW5vcmFtYSB0ZXh0dXJlIGFuZCByZW5kZXIgaXQgdG8gYSBjdWJlIG1hcFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gcGF0aFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5UZXh0dXJlQ3ViZX0gY3ViZU1hcFxyXG4gICAgICogQHBhcmFtICB7b2JqZWN0fSBbb3B0aW9uXVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW29wdGlvbi5lbmNvZGVSR0JNXVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbb3B0aW9uLmV4cG9zdXJlXVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvbnN1Y2Nlc3NdXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW29uZXJyb3JdXHJcbiAgICAgKi9cclxuICAgIGxvYWRQYW5vcmFtYTogZnVuY3Rpb24gKHJlbmRlcmVyLCBwYXRoLCBjdWJlTWFwLCBvcHRpb24sIG9uc3VjY2Vzcywgb25lcnJvcikge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZihvcHRpb24pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIG9uc3VjY2VzcyA9IG9wdGlvbjtcclxuICAgICAgICAgICAgb25lcnJvciA9IG9uc3VjY2VzcztcclxuICAgICAgICAgICAgb3B0aW9uID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvcHRpb24gPSBvcHRpb24gfHwge307XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0ZXh0dXJlVXRpbC5sb2FkVGV4dHVyZShwYXRoLCBvcHRpb24sIGZ1bmN0aW9uICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgdGV4dHVyZS5mbGlwWSA9IG9wdGlvbi5mbGlwWSB8fCBmYWxzZTtcclxuICAgICAgICAgICAgc2VsZi5wYW5vcmFtYVRvQ3ViZU1hcChyZW5kZXJlciwgdGV4dHVyZSwgY3ViZU1hcCwgb3B0aW9uKTtcclxuICAgICAgICAgICAgdGV4dHVyZS5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgb25zdWNjZXNzICYmIG9uc3VjY2VzcyhjdWJlTWFwKTtcclxuICAgICAgICB9LCBvbmVycm9yKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW5kZXIgYSBwYW5vcmFtYSB0ZXh0dXJlIHRvIGEgY3ViZSBtYXBcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmUyRH0gcGFub3JhbWFNYXBcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZUN1YmV9IGN1YmVNYXBcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtib29sZWFufSBbb3B0aW9uLmVuY29kZVJHQk1dXHJcbiAgICAgKi9cclxuICAgIHBhbm9yYW1hVG9DdWJlTWFwOiBmdW5jdGlvbiAocmVuZGVyZXIsIHBhbm9yYW1hTWFwLCBjdWJlTWFwLCBvcHRpb24pIHtcclxuICAgICAgICB2YXIgZW52aXJvbm1lbnRNYXBQYXNzID0gbmV3IEVudmlyb25tZW50TWFwUGFzcygpO1xyXG4gICAgICAgIHZhciBza3lkb21lID0gbmV3IFNreWRvbWUoe1xyXG4gICAgICAgICAgICBzY2VuZTogbmV3IFNjZW5lKClcclxuICAgICAgICB9KTtcclxuICAgICAgICBza3lkb21lLnNldEVudmlyb25tZW50TWFwKHBhbm9yYW1hTWFwKTtcclxuXHJcbiAgICAgICAgb3B0aW9uID0gb3B0aW9uIHx8IHt9O1xyXG4gICAgICAgIGlmIChvcHRpb24uZW5jb2RlUkdCTSkge1xyXG4gICAgICAgICAgICBza3lkb21lLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUkdCTV9FTkNPREUnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNoYXJlIHNSR0JcclxuICAgICAgICBjdWJlTWFwLnNSR0IgPSBwYW5vcmFtYU1hcC5zUkdCO1xyXG5cclxuICAgICAgICBlbnZpcm9ubWVudE1hcFBhc3MudGV4dHVyZSA9IGN1YmVNYXA7XHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXBQYXNzLnJlbmRlcihyZW5kZXJlciwgc2t5ZG9tZS5zY2VuZSk7XHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXBQYXNzLnRleHR1cmUgPSBudWxsO1xyXG4gICAgICAgIGVudmlyb25tZW50TWFwUGFzcy5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICByZXR1cm4gY3ViZU1hcDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGhlaWdodCBtYXAgdG8gbm9ybWFsIG1hcFxyXG4gICAgICogQHBhcmFtIHtIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fSBpbWFnZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tCdW1wPWZhbHNlXVxyXG4gICAgICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodFRvTm9ybWFsOiBmdW5jdGlvbiAoaW1hZ2UsIGNoZWNrQnVtcCkge1xyXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICB2YXIgd2lkdGggPSBjYW52YXMud2lkdGggPSBpbWFnZS53aWR0aDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gY2FudmFzLmhlaWdodCA9IGltYWdlLmhlaWdodDtcclxuICAgICAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgY2hlY2tCdW1wID0gY2hlY2tCdW1wIHx8IGZhbHNlO1xyXG4gICAgICAgIHZhciBzcmNEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICB2YXIgZHN0RGF0YSA9IGN0eC5jcmVhdGVJbWFnZURhdGEod2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcmNEYXRhLmRhdGEubGVuZ3RoOyBpICs9IDQpIHtcclxuICAgICAgICAgICAgaWYgKGNoZWNrQnVtcCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHIgPSBzcmNEYXRhLmRhdGFbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgZyA9IHNyY0RhdGEuZGF0YVtpICsgMV07XHJcbiAgICAgICAgICAgICAgICB2YXIgYiA9IHNyY0RhdGEuZGF0YVtpICsgMl07XHJcbiAgICAgICAgICAgICAgICB2YXIgZGlmZiA9IE1hdGguYWJzKHIgLSBnKSArIE1hdGguYWJzKGcgLSBiKTtcclxuICAgICAgICAgICAgICAgIGlmIChkaWZmID4gMjApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0dpdmVuIGltYWdlIGlzIG5vdCBhIGhlaWdodCBtYXAnKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gTW9kaWZpZWQgZnJvbSBodHRwOi8vbXJkb29iLmNvbS9sYWIvamF2YXNjcmlwdC9oZWlnaHQybm9ybWFsL1xyXG4gICAgICAgICAgICB2YXIgeDEsIHkxLCB4MiwgeTI7XHJcbiAgICAgICAgICAgIGlmIChpICUgKHdpZHRoICogNCkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIGxlZnQgZWRnZVxyXG4gICAgICAgICAgICAgICAgeDEgPSBzcmNEYXRhLmRhdGFbaV07XHJcbiAgICAgICAgICAgICAgICB4MiA9IHNyY0RhdGEuZGF0YVtpICsgNF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaSAlICh3aWR0aCAqIDQpID09PSAod2lkdGggLSAxKSAqIDQpIHtcclxuICAgICAgICAgICAgICAgIC8vIHJpZ2h0IGVkZ2VcclxuICAgICAgICAgICAgICAgIHgxID0gc3JjRGF0YS5kYXRhW2kgLSA0XTtcclxuICAgICAgICAgICAgICAgIHgyID0gc3JjRGF0YS5kYXRhW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgeDEgPSBzcmNEYXRhLmRhdGFbaSAtIDRdO1xyXG4gICAgICAgICAgICAgICAgeDIgPSBzcmNEYXRhLmRhdGFbaSArIDRdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaSA8IHdpZHRoICogNCkge1xyXG4gICAgICAgICAgICAgICAgLy8gdG9wIGVkZ2VcclxuICAgICAgICAgICAgICAgIHkxID0gc3JjRGF0YS5kYXRhW2ldO1xyXG4gICAgICAgICAgICAgICAgeTIgPSBzcmNEYXRhLmRhdGFbaSArIHdpZHRoICogNF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaSA+IHdpZHRoICogKGhlaWdodCAtIDEpICogNCkge1xyXG4gICAgICAgICAgICAgICAgLy8gYm90dG9tIGVkZ2VcclxuICAgICAgICAgICAgICAgIHkxID0gc3JjRGF0YS5kYXRhW2kgLSB3aWR0aCAqIDRdO1xyXG4gICAgICAgICAgICAgICAgeTIgPSBzcmNEYXRhLmRhdGFbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB5MSA9IHNyY0RhdGEuZGF0YVtpIC0gd2lkdGggKiA0XTtcclxuICAgICAgICAgICAgICAgIHkyID0gc3JjRGF0YS5kYXRhW2kgKyB3aWR0aCAqIDRdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkc3REYXRhLmRhdGFbaV0gPSAoeDEgLSB4MikgKyAxMjc7XHJcbiAgICAgICAgICAgIGRzdERhdGEuZGF0YVtpICsgMV0gPSAoeTEgLSB5MikgKyAxMjc7XHJcbiAgICAgICAgICAgIGRzdERhdGEuZGF0YVtpICsgMl0gPSAyNTU7XHJcbiAgICAgICAgICAgIGRzdERhdGEuZGF0YVtpICsgM10gPSAyNTU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoZHN0RGF0YSwgMCwgMCk7XHJcbiAgICAgICAgcmV0dXJuIGNhbnZhcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGhlaWdodCBtYXAgdG8gbm9ybWFsIG1hcFxyXG4gICAgICogQHBhcmFtIHtIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fSBpbWFnZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tCdW1wPWZhbHNlXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt0aHJlc2hvbGQ9MjBdXHJcbiAgICAgKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH1cclxuICAgICAqL1xyXG4gICAgaXNIZWlnaHRJbWFnZTogZnVuY3Rpb24gKGltZywgZG93blNjYWxlU2l6ZSwgdGhyZXNob2xkKSB7XHJcbiAgICAgICAgaWYgKCFpbWcgfHwgIWltZy53aWR0aCB8fCAhaW1nLmhlaWdodCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIHZhciBzaXplID0gZG93blNjYWxlU2l6ZSB8fCAzMjtcclxuICAgICAgICB0aHJlc2hvbGQgPSB0aHJlc2hvbGQgfHwgMjA7XHJcbiAgICAgICAgY2FudmFzLndpZHRoID0gY2FudmFzLmhlaWdodCA9IHNpemU7XHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIHNpemUsIHNpemUpO1xyXG4gICAgICAgIHZhciBzcmNEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCBzaXplLCBzaXplKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNyY0RhdGEuZGF0YS5sZW5ndGg7IGkgKz0gNCkge1xyXG4gICAgICAgICAgICB2YXIgciA9IHNyY0RhdGEuZGF0YVtpXTtcclxuICAgICAgICAgICAgdmFyIGcgPSBzcmNEYXRhLmRhdGFbaSArIDFdO1xyXG4gICAgICAgICAgICB2YXIgYiA9IHNyY0RhdGEuZGF0YVtpICsgMl07XHJcbiAgICAgICAgICAgIHZhciBkaWZmID0gTWF0aC5hYnMociAtIGcpICsgTWF0aC5hYnMoZyAtIGIpO1xyXG4gICAgICAgICAgICBpZiAoZGlmZiA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZmV0Y2hUZXh0dXJlOiBmdW5jdGlvbiAocGF0aCwgb25zdWNjZXNzLCBvbmVycm9yKSB7XHJcbiAgICAgICAgdmVuZG9yLnJlcXVlc3QuZ2V0KHtcclxuICAgICAgICAgICAgdXJsOiBwYXRoLFxyXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicsXHJcbiAgICAgICAgICAgIG9ubG9hZDogb25zdWNjZXNzLFxyXG4gICAgICAgICAgICBvbmVycm9yOiBvbmVycm9yXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgY2hlc3Nib2FyZCB0ZXh0dXJlXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFtzaXplXVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbdW5pdFNpemVdXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IFtjb2xvcjFdXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IFtjb2xvcjJdXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAqL1xyXG4gICAgY3JlYXRlQ2hlc3Nib2FyZDogZnVuY3Rpb24gKHNpemUsIHVuaXRTaXplLCBjb2xvcjEsIGNvbG9yMikge1xyXG4gICAgICAgIHNpemUgPSBzaXplIHx8IDUxMjtcclxuICAgICAgICB1bml0U2l6ZSA9IHVuaXRTaXplIHx8IDY0O1xyXG4gICAgICAgIGNvbG9yMSA9IGNvbG9yMSB8fCAnYmxhY2snO1xyXG4gICAgICAgIGNvbG9yMiA9IGNvbG9yMiB8fCAnd2hpdGUnO1xyXG5cclxuICAgICAgICB2YXIgcmVwZWF0ID0gTWF0aC5jZWlsKHNpemUgLyB1bml0U2l6ZSk7XHJcblxyXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBjYW52YXMud2lkdGggPSBzaXplO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBzaXplO1xyXG4gICAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBjdHguZmlsbFN0eWxlID0gY29sb3IyO1xyXG4gICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBzaXplLCBzaXplKTtcclxuXHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGNvbG9yMTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcGVhdDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmVwZWF0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBpc0ZpbGwgPSBqICUgMiA/IChpICUgMikgOiAoaSAlIDIgLSAxKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc0ZpbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoaSAqIHVuaXRTaXplLCBqICogdW5pdFNpemUsIHVuaXRTaXplLCB1bml0U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjYW52YXMsXHJcbiAgICAgICAgICAgIGFuaXNvdHJvcGljOiA4XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIGJsYW5rIHB1cmUgY29sb3IgMXgxIHRleHR1cmVcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gY29sb3JcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICovXHJcbiAgICBjcmVhdGVCbGFuazogZnVuY3Rpb24gKGNvbG9yKSB7XHJcbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IDE7XHJcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IDE7XHJcbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvcjtcclxuICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgMSwgMSk7XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjYW52YXNcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCB0ZXh0dXJlVXRpbDtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCIjZGVmaW5lIFNBTVBMRV9OVU1CRVIgMTAyNFxcbiNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OVxcbnVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbERpc3RyaWJ1dGlvbjtcXG51bmlmb3JtIHZlYzIgdmlld3BvcnRTaXplIDogWzUxMiwgMjU2XTtcXG5jb25zdCB2ZWMzIE4gPSB2ZWMzKDAuMCwgMC4wLCAxLjApO1xcbmNvbnN0IGZsb2F0IGZTYW1wbGVOdW1iZXIgPSBmbG9hdChTQU1QTEVfTlVNQkVSKTtcXG52ZWMzIGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQgaSwgZmxvYXQgcm91Z2huZXNzLCB2ZWMzIE4pIHtcXG4gdmVjMyBIID0gdGV4dHVyZTJEKG5vcm1hbERpc3RyaWJ1dGlvbiwgdmVjMihyb3VnaG5lc3MsIGkpKS5yZ2I7XFxuIHZlYzMgdXBWZWN0b3IgPSBhYnMoTi55KSA+IDAuOTk5ID8gdmVjMygxLjAsIDAuMCwgMC4wKSA6IHZlYzMoMC4wLCAxLjAsIDAuMCk7XFxuIHZlYzMgdGFuZ2VudFggPSBub3JtYWxpemUoY3Jvc3MoTiwgdXBWZWN0b3IpKTtcXG4gdmVjMyB0YW5nZW50WiA9IGNyb3NzKE4sIHRhbmdlbnRYKTtcXG4gcmV0dXJuIG5vcm1hbGl6ZSh0YW5nZW50WCAqIEgueCArIE4gKiBILnkgKyB0YW5nZW50WiAqIEgueik7XFxufVxcbmZsb2F0IEdfU21pdGgoZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBOb1YsIGZsb2F0IE5vTCkge1xcbiBmbG9hdCBrID0gcm91Z2huZXNzICogcm91Z2huZXNzIC8gMi4wO1xcbiBmbG9hdCBHMVYgPSBOb1YgLyAoTm9WICogKDEuMCAtIGspICsgayk7XFxuIGZsb2F0IEcxTCA9IE5vTCAvIChOb0wgKiAoMS4wIC0gaykgKyBrKTtcXG4gcmV0dXJuIEcxTCAqIEcxVjtcXG59XFxudm9pZCBtYWluKCkge1xcbiB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC8gdmlld3BvcnRTaXplO1xcbiBmbG9hdCBOb1YgPSB1di54O1xcbiBmbG9hdCByb3VnaG5lc3MgPSB1di55O1xcbiB2ZWMzIFY7XFxuIFYueCA9IHNxcnQoMS4wIC0gTm9WICogTm9WKTtcXG4gVi55ID0gMC4wO1xcbiBWLnogPSBOb1Y7XFxuIGZsb2F0IEEgPSAwLjA7XFxuIGZsb2F0IEIgPSAwLjA7XFxuIGZvciAoaW50IGkgPSAwOyBpIDwgU0FNUExFX05VTUJFUjsgaSsrKSB7XFxuIHZlYzMgSCA9IGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQoaSkgLyBmU2FtcGxlTnVtYmVyLCByb3VnaG5lc3MsIE4pO1xcbiB2ZWMzIEwgPSByZWZsZWN0KC1WLCBIKTtcXG4gZmxvYXQgTm9MID0gY2xhbXAoTC56LCAwLjAsIDEuMCk7XFxuIGZsb2F0IE5vSCA9IGNsYW1wKEgueiwgMC4wLCAxLjApO1xcbiBmbG9hdCBWb0ggPSBjbGFtcChkb3QoViwgSCksIDAuMCwgMS4wKTtcXG4gaWYgKE5vTCA+IDAuMCkge1xcbiBmbG9hdCBHID0gR19TbWl0aChyb3VnaG5lc3MsIE5vViwgTm9MKTtcXG4gZmxvYXQgR19WaXMgPSBHICogVm9IIC8gKE5vSCAqIE5vVik7XFxuIGZsb2F0IEZjID0gcG93KDEuMCAtIFZvSCwgNS4wKTtcXG4gQSArPSAoMS4wIC0gRmMpICogR19WaXM7XFxuIEIgKz0gRmMgKiBHX1ZpcztcXG4gfVxcbiB9XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMihBLCBCKSAvIGZTYW1wbGVOdW1iZXIsIDAuMCwgMS4wKTtcXG59XFxuXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiI2RlZmluZSBTSEFERVJfTkFNRSBwcmVmaWx0ZXJcXG4jZGVmaW5lIFNBTVBMRV9OVU1CRVIgMTAyNFxcbiNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OVxcbnVuaWZvcm0gbWF0NCB2aWV3SW52ZXJzZSA6IFZJRVdJTlZFUlNFO1xcbnVuaWZvcm0gc2FtcGxlckN1YmUgZW52aXJvbm1lbnRNYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsRGlzdHJpYnV0aW9uO1xcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzIDogMC41O1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZlYzMgaW1wb3J0YW5jZVNhbXBsZU5vcm1hbChmbG9hdCBpLCBmbG9hdCByb3VnaG5lc3MsIHZlYzMgTikge1xcbiB2ZWMzIEggPSB0ZXh0dXJlMkQobm9ybWFsRGlzdHJpYnV0aW9uLCB2ZWMyKHJvdWdobmVzcywgaSkpLnJnYjtcXG4gdmVjMyB1cFZlY3RvciA9IGFicyhOLnkpID4gMC45OTkgPyB2ZWMzKDEuMCwgMC4wLCAwLjApIDogdmVjMygwLjAsIDEuMCwgMC4wKTtcXG4gdmVjMyB0YW5nZW50WCA9IG5vcm1hbGl6ZShjcm9zcyhOLCB1cFZlY3RvcikpO1xcbiB2ZWMzIHRhbmdlbnRaID0gY3Jvc3MoTiwgdGFuZ2VudFgpO1xcbiByZXR1cm4gbm9ybWFsaXplKHRhbmdlbnRYICogSC54ICsgTiAqIEgueSArIHRhbmdlbnRaICogSC56KTtcXG59XFxudm9pZCBtYWluKCkge1xcbiB2ZWMzIGV5ZVBvcyA9IHZpZXdJbnZlcnNlWzNdLnh5ejtcXG4gdmVjMyBWID0gbm9ybWFsaXplKHZfV29ybGRQb3NpdGlvbiAtIGV5ZVBvcyk7XFxuIHZlYzMgTiA9IFY7XFxuIHZlYzMgcHJlZmlsdGVyZWRDb2xvciA9IHZlYzMoMC4wKTtcXG4gZmxvYXQgdG90YWxXZWlnaHQgPSAwLjA7XFxuIGZsb2F0IGZNYXhTYW1wbGVOdW1iZXIgPSBmbG9hdChTQU1QTEVfTlVNQkVSKTtcXG4gZm9yIChpbnQgaSA9IDA7IGkgPCBTQU1QTEVfTlVNQkVSOyBpKyspIHtcXG4gdmVjMyBIID0gaW1wb3J0YW5jZVNhbXBsZU5vcm1hbChmbG9hdChpKSAvIGZNYXhTYW1wbGVOdW1iZXIsIHJvdWdobmVzcywgTik7XFxuIHZlYzMgTCA9IHJlZmxlY3QoLVYsIEgpO1xcbiBmbG9hdCBOb0wgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gaWYgKE5vTCA+IDAuMCkge1xcbiBwcmVmaWx0ZXJlZENvbG9yICs9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZShlbnZpcm9ubWVudE1hcCwgTCkpLnJnYiAqIE5vTDtcXG4gdG90YWxXZWlnaHQgKz0gTm9MO1xcbiB9XFxuIH1cXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHZlYzQocHJlZmlsdGVyZWRDb2xvciAvIHRvdGFsV2VpZ2h0LCAxLjApKTtcXG59XFxuXCI7XHJcbiIsIi8vIEN1YmVtYXAgcHJlZmlsdGVyIHV0aWxpdHlcclxuLy8gaHR0cDovL3d3dy51bnJlYWxlbmdpbmUuY29tL2ZpbGVzL2Rvd25sb2Fkcy8yMDEzU2lnZ3JhcGhQcmVzZW50YXRpb25zTm90ZXMucGRmXHJcbi8vIGh0dHA6Ly9odHRwLmRldmVsb3Blci5udmlkaWEuY29tL0dQVUdlbXMzL2dwdWdlbXMzX2NoMjAuaHRtbFxyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgUGFzcyBmcm9tICcuLi9jb21wb3NpdG9yL1Bhc3MnO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcbmltcG9ydCBTa3lib3ggZnJvbSAnLi4vcGx1Z2luL1NreWJveCc7XHJcbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XHJcbmltcG9ydCBFbnZpcm9ubWVudE1hcFBhc3MgZnJvbSAnLi4vcHJlUGFzcy9FbnZpcm9ubWVudE1hcCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgdGV4dHVyZVV0aWwgZnJvbSAnLi90ZXh0dXJlJztcclxuXHJcbmltcG9ydCBpbnRlZ3JhdGVCUkRGU2hhZGVyQ29kZSBmcm9tICcuL3NoYWRlci9pbnRlZ3JhdGVCUkRGLmdsc2wuanMnO1xyXG5pbXBvcnQgcHJlZmlsdGVyRnJhZ0NvZGUgZnJvbSAnLi9zaGFkZXIvcHJlZmlsdGVyLmdsc2wuanMnO1xyXG5cclxudmFyIGN1YmVtYXBVdGlsID0ge307XHJcblxyXG52YXIgdGFyZ2V0cyA9IFsncHgnLCAnbngnLCAncHknLCAnbnknLCAncHonLCAnbnonXTtcclxuXHJcbi8vIFRPRE8gRG93bnNhbXBsZVxyXG4vKipcclxuICogQG5hbWUgY2xheS51dGlsLmN1YmVtYXAucHJlZmlsdGVyRW52aXJvbm1lbnRNYXBcclxuICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSBlbnZNYXBcclxuICogQHBhcmFtICB7T2JqZWN0fSBbdGV4dHVyZU9wdHNdXHJcbiAqIEBwYXJhbSAge251bWJlcn0gW3RleHR1cmVPcHRzLndpZHRoPTY0XVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFt0ZXh0dXJlT3B0cy5oZWlnaHQ9NjRdXHJcbiAqIEBwYXJhbSAge251bWJlcn0gW3RleHR1cmVPcHRzLnR5cGVdXHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFt0ZXh0dXJlT3B0cy5lbmNvZGVSR0JNPWZhbHNlXVxyXG4gKiBAcGFyYW0gIHtib29sZWFufSBbdGV4dHVyZU9wdHMuZGVjb2RlUkdCTT1mYWxzZV1cclxuICogQHBhcmFtICB7Y2xheS5UZXh0dXJlMkR9IFtub3JtYWxEaXN0cmlidXRpb25dXHJcbiAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZTJEfSBbYnJkZkxvb2t1cF1cclxuICovXHJcbmN1YmVtYXBVdGlsLnByZWZpbHRlckVudmlyb25tZW50TWFwID0gZnVuY3Rpb24gKFxyXG4gICAgcmVuZGVyZXIsIGVudk1hcCwgdGV4dHVyZU9wdHMsIG5vcm1hbERpc3RyaWJ1dGlvbiwgYnJkZkxvb2t1cFxyXG4pIHtcclxuICAgIC8vIE5vdCBjcmVhdGUgb3RoZXIgcmVuZGVyZXIsIGl0IGlzIGVhc3kgaGF2aW5nIGlzc3VlIG9mIGNyb3NzIHJlZmVyZW5jZSBvZiByZXNvdXJjZXMgbGlrZSBmcmFtZWJ1ZmZlclxyXG4gICAgLy8gUEVORElORyBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI/XHJcbiAgICBpZiAoIWJyZGZMb29rdXAgfHwgIW5vcm1hbERpc3RyaWJ1dGlvbikge1xyXG4gICAgICAgIG5vcm1hbERpc3RyaWJ1dGlvbiA9IGN1YmVtYXBVdGlsLmdlbmVyYXRlTm9ybWFsRGlzdHJpYnV0aW9uKCk7XHJcbiAgICAgICAgYnJkZkxvb2t1cCA9IGN1YmVtYXBVdGlsLmludGVncmF0ZUJSREYocmVuZGVyZXIsIG5vcm1hbERpc3RyaWJ1dGlvbik7XHJcbiAgICB9XHJcbiAgICB0ZXh0dXJlT3B0cyA9IHRleHR1cmVPcHRzIHx8IHt9O1xyXG5cclxuICAgIHZhciB3aWR0aCA9IHRleHR1cmVPcHRzLndpZHRoIHx8IDY0O1xyXG4gICAgdmFyIGhlaWdodCA9IHRleHR1cmVPcHRzLmhlaWdodCB8fCA2NDtcclxuXHJcbiAgICB2YXIgdGV4dHVyZVR5cGUgPSB0ZXh0dXJlT3B0cy50eXBlIHx8IGVudk1hcC50eXBlO1xyXG5cclxuICAgIC8vIFVzZSBzYW1lIHR5cGUgd2l0aCBnaXZlbiBlbnZNYXBcclxuICAgIHZhciBwcmVmaWx0ZXJlZEN1YmVNYXAgPSBuZXcgVGV4dHVyZUN1YmUoe1xyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICB0eXBlOiB0ZXh0dXJlVHlwZSxcclxuICAgICAgICBmbGlwWTogZmFsc2UsXHJcbiAgICAgICAgbWlwbWFwczogW11cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghcHJlZmlsdGVyZWRDdWJlTWFwLmlzUG93ZXJPZlR3bygpKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdXaWR0aCBhbmQgaGVpZ2h0IG11c3QgYmUgcG93ZXIgb2YgdHdvIHRvIGVuYWJsZSBtaXBtYXAuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHNpemUgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KTtcclxuICAgIHZhciBtaXBtYXBOdW0gPSBNYXRoLmxvZyhzaXplKSAvIE1hdGgubG9nKDIpICsgMTtcclxuXHJcbiAgICB2YXIgcHJlZmlsdGVyTWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcih7XHJcbiAgICAgICAgICAgIHZlcnRleDogU2hhZGVyLnNvdXJjZSgnY2xheS5za3lib3gudmVydGV4JyksXHJcbiAgICAgICAgICAgIGZyYWdtZW50OiBwcmVmaWx0ZXJGcmFnQ29kZVxyXG4gICAgICAgIH0pXHJcbiAgICB9KTtcclxuICAgIHByZWZpbHRlck1hdGVyaWFsLnNldCgnbm9ybWFsRGlzdHJpYnV0aW9uJywgbm9ybWFsRGlzdHJpYnV0aW9uKTtcclxuXHJcbiAgICB0ZXh0dXJlT3B0cy5lbmNvZGVSR0JNICYmIHByZWZpbHRlck1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUkdCTV9FTkNPREUnKTtcclxuICAgIHRleHR1cmVPcHRzLmRlY29kZVJHQk0gJiYgcHJlZmlsdGVyTWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdSR0JNX0RFQ09ERScpO1xyXG5cclxuICAgIHZhciBkdW1teVNjZW5lID0gbmV3IFNjZW5lKCk7XHJcbiAgICB2YXIgc2t5RW52O1xyXG5cclxuICAgIGlmIChlbnZNYXAudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlMkQnKSB7XHJcbiAgICAgICAgLy8gQ29udmVydCBwYW5vcmFtYSB0byBjdWJlbWFwXHJcbiAgICAgICAgdmFyIGVudkN1YmVtYXAgPSBuZXcgVGV4dHVyZUN1YmUoe1xyXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICAgICAgICAvLyBGSVhNRSBGTE9BVCB0eXBlIHdpbGwgY2F1c2UgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UIGVycm9yIG9uIGlPU1xyXG4gICAgICAgICAgICB0eXBlOiB0ZXh0dXJlVHlwZSA9PT0gVGV4dHVyZS5GTE9BVCA/XHJcbiAgICAgICAgICAgICAgICBUZXh0dXJlLkhBTEZfRkxPQVQgOiB0ZXh0dXJlVHlwZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRleHR1cmVVdGlsLnBhbm9yYW1hVG9DdWJlTWFwKHJlbmRlcmVyLCBlbnZNYXAsIGVudkN1YmVtYXAsIHtcclxuICAgICAgICAgICAgLy8gUEVORElORyBlbmNvZGVSR0JNIHNvIGl0IGNhbiBiZSBkZWNvZGVkIGFzIFJHQk1cclxuICAgICAgICAgICAgZW5jb2RlUkdCTTogdGV4dHVyZU9wdHMuZGVjb2RlUkdCTVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGVudk1hcCA9IGVudkN1YmVtYXA7XHJcbiAgICB9XHJcbiAgICBza3lFbnYgPSBuZXcgU2t5Ym94KHtcclxuICAgICAgICBzY2VuZTogZHVtbXlTY2VuZSxcclxuICAgICAgICBtYXRlcmlhbDogcHJlZmlsdGVyTWF0ZXJpYWxcclxuICAgIH0pO1xyXG4gICAgc2t5RW52Lm1hdGVyaWFsLnNldCgnZW52aXJvbm1lbnRNYXAnLCBlbnZNYXApO1xyXG5cclxuICAgIHZhciBlbnZNYXBQYXNzID0gbmV3IEVudmlyb25tZW50TWFwUGFzcyh7XHJcbiAgICAgICAgdGV4dHVyZTogcHJlZmlsdGVyZWRDdWJlTWFwXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBGb3JjZSB0byBiZSBVTlNJR05FRF9CWVRFXHJcbiAgICBpZiAodGV4dHVyZU9wdHMuZW5jb2RlUkdCTSkge1xyXG4gICAgICAgIHRleHR1cmVUeXBlID0gcHJlZmlsdGVyZWRDdWJlTWFwLnR5cGUgPSBUZXh0dXJlLlVOU0lHTkVEX0JZVEU7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJlbmRlclRhcmdldFRtcCA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICB0eXBlOiB0ZXh0dXJlVHlwZVxyXG4gICAgfSk7XHJcbiAgICB2YXIgZnJhbWVCdWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoe1xyXG4gICAgICAgIGRlcHRoQnVmZmVyOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgICB2YXIgQXJyYXlDdG9yID0gdmVuZG9yW3RleHR1cmVUeXBlID09PSBUZXh0dXJlLlVOU0lHTkVEX0JZVEUgPyAnVWludDhBcnJheScgOiAnRmxvYXQzMkFycmF5J107XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pcG1hcE51bTsgaSsrKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS50aW1lKCdwcmVmaWx0ZXInKTtcclxuICAgICAgICBwcmVmaWx0ZXJlZEN1YmVNYXAubWlwbWFwc1tpXSA9IHtcclxuICAgICAgICAgICAgcGl4ZWxzOiB7fVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgc2t5RW52Lm1hdGVyaWFsLnNldCgncm91Z2huZXNzJywgaSAvIChtaXBtYXBOdW0gLSAxKSk7XHJcblxyXG4gICAgICAgIC8vIFR3ZWFrIGZvdlxyXG4gICAgICAgIC8vIGh0dHA6Ly90aGUtd2l0bmVzcy5uZXQvbmV3cy8yMDEyLzAyL3NlYW1sZXNzLWN1YmUtbWFwLWZpbHRlcmluZy9cclxuICAgICAgICB2YXIgbiA9IHJlbmRlclRhcmdldFRtcC53aWR0aDtcclxuICAgICAgICB2YXIgZm92ID0gMiAqIE1hdGguYXRhbihuIC8gKG4gLSAwLjUpKSAvIE1hdGguUEkgKiAxODA7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGFyZ2V0cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICB2YXIgcGl4ZWxzID0gbmV3IEFycmF5Q3RvcihyZW5kZXJUYXJnZXRUbXAud2lkdGggKiByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0ICogNCk7XHJcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChyZW5kZXJUYXJnZXRUbXApO1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBjYW1lcmEgPSBlbnZNYXBQYXNzLmdldENhbWVyYSh0YXJnZXRzW2pdKTtcclxuICAgICAgICAgICAgY2FtZXJhLmZvdiA9IGZvdjtcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyKGR1bW15U2NlbmUsIGNhbWVyYSk7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLmdsLnJlYWRQaXhlbHMoXHJcbiAgICAgICAgICAgICAgICAwLCAwLCByZW5kZXJUYXJnZXRUbXAud2lkdGgsIHJlbmRlclRhcmdldFRtcC5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBUZXh0dXJlLlJHQkEsIHRleHR1cmVUeXBlLCBwaXhlbHNcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgLy8gdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgICAgICAvLyBjYW52YXMud2lkdGggPSByZW5kZXJUYXJnZXRUbXAud2lkdGg7XHJcbiAgICAgICAgICAgIC8vIGNhbnZhcy5oZWlnaHQgPSByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0O1xyXG4gICAgICAgICAgICAvLyB2YXIgaW1hZ2VEYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YShyZW5kZXJUYXJnZXRUbXAud2lkdGgsIHJlbmRlclRhcmdldFRtcC5oZWlnaHQpO1xyXG4gICAgICAgICAgICAvLyBmb3IgKHZhciBrID0gMDsgayA8IHBpeGVscy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAvLyAgICAgaW1hZ2VEYXRhLmRhdGFba10gPSBwaXhlbHNba107XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgLy8gY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xyXG4gICAgICAgICAgICAvLyBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNhbnZhcyk7XHJcblxyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICBwcmVmaWx0ZXJlZEN1YmVNYXAubWlwbWFwc1tpXS5waXhlbHNbdGFyZ2V0c1tqXV0gPSBwaXhlbHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXJUYXJnZXRUbXAud2lkdGggLz0gMjtcclxuICAgICAgICByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0IC89IDI7XHJcbiAgICAgICAgcmVuZGVyVGFyZ2V0VG1wLmRpcnR5KCk7XHJcbiAgICAgICAgLy8gY29uc29sZS50aW1lRW5kKCdwcmVmaWx0ZXInKTtcclxuICAgIH1cclxuXHJcbiAgICBmcmFtZUJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIHJlbmRlclRhcmdldFRtcC5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIHNreUVudi5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIC8vIFJlbW92ZSBncHUgcmVzb3VyY2UgYWxsdWNhdGVkIGluIHJlbmRlcmVyXHJcbiAgICBub3JtYWxEaXN0cmlidXRpb24uZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgLy8gcmVuZGVyZXIuZGlzcG9zZSgpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXA6IHByZWZpbHRlcmVkQ3ViZU1hcCxcclxuICAgICAgICBicmRmTG9va3VwOiBicmRmTG9va3VwLFxyXG4gICAgICAgIG5vcm1hbERpc3RyaWJ1dGlvbjogbm9ybWFsRGlzdHJpYnV0aW9uLFxyXG4gICAgICAgIG1heE1pcG1hcExldmVsOiBtaXBtYXBOdW1cclxuICAgIH07XHJcbn07XHJcblxyXG5jdWJlbWFwVXRpbC5pbnRlZ3JhdGVCUkRGID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBub3JtYWxEaXN0cmlidXRpb24pIHtcclxuICAgIG5vcm1hbERpc3RyaWJ1dGlvbiA9IG5vcm1hbERpc3RyaWJ1dGlvbiB8fCBjdWJlbWFwVXRpbC5nZW5lcmF0ZU5vcm1hbERpc3RyaWJ1dGlvbigpO1xyXG4gICAgdmFyIGZyYW1lYnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKHtcclxuICAgICAgICBkZXB0aEJ1ZmZlcjogZmFsc2VcclxuICAgIH0pO1xyXG4gICAgdmFyIHBhc3MgPSBuZXcgUGFzcyh7XHJcbiAgICAgICAgZnJhZ21lbnQ6IGludGVncmF0ZUJSREZTaGFkZXJDb2RlXHJcbiAgICB9KTtcclxuXHJcbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgIHdpZHRoOiA1MTIsXHJcbiAgICAgICAgaGVpZ2h0OiAyNTYsXHJcbiAgICAgICAgdHlwZTogVGV4dHVyZS5IQUxGX0ZMT0FULFxyXG4gICAgICAgIHdyYXBTOiBUZXh0dXJlLkNMQU1QX1RPX0VER0UsXHJcbiAgICAgICAgd3JhcFQ6IFRleHR1cmUuQ0xBTVBfVE9fRURHRSxcclxuICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICBtYWdGaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICB1c2VNaXBtYXA6IGZhbHNlXHJcbiAgICB9KTtcclxuICAgIHBhc3Muc2V0VW5pZm9ybSgnbm9ybWFsRGlzdHJpYnV0aW9uJywgbm9ybWFsRGlzdHJpYnV0aW9uKTtcclxuICAgIHBhc3Muc2V0VW5pZm9ybSgndmlld3BvcnRTaXplJywgWzUxMiwgMjU2XSk7XHJcbiAgICBwYXNzLmF0dGFjaE91dHB1dCh0ZXh0dXJlKTtcclxuICAgIHBhc3MucmVuZGVyKHJlbmRlcmVyLCBmcmFtZWJ1ZmZlcik7XHJcblxyXG4gICAgLy8gRklYTUUgT25seSBjaHJvbWUgYW5kIGZpcmVmb3ggY2FuIHJlYWRQaXhlbHMgd2l0aCBmbG9hdCB0eXBlLlxyXG4gICAgLy8gZnJhbWVidWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAvLyB2YXIgcGl4ZWxzID0gbmV3IEZsb2F0MzJBcnJheSg1MTIgKiAyNTYgKiA0KTtcclxuICAgIC8vIHJlbmRlcmVyLmdsLnJlYWRQaXhlbHMoXHJcbiAgICAvLyAgICAgMCwgMCwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQsXHJcbiAgICAvLyAgICAgVGV4dHVyZS5SR0JBLCBUZXh0dXJlLkZMT0FULCBwaXhlbHNcclxuICAgIC8vICk7XHJcbiAgICAvLyB0ZXh0dXJlLnBpeGVscyA9IHBpeGVscztcclxuICAgIC8vIHRleHR1cmUuZmxpcFkgPSBmYWxzZTtcclxuICAgIC8vIHRleHR1cmUuZGlydHkoKTtcclxuICAgIC8vIGZyYW1lYnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgZnJhbWVidWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgcmV0dXJuIHRleHR1cmU7XHJcbn07XHJcblxyXG5jdWJlbWFwVXRpbC5nZW5lcmF0ZU5vcm1hbERpc3RyaWJ1dGlvbiA9IGZ1bmN0aW9uIChyb3VnaG5lc3NMZXZlbHMsIHNhbXBsZVNpemUpIHtcclxuXHJcbiAgICAvLyBodHRwOi8vaG9sZ2VyLmRhbW1lcnR6Lm9yZy9zdHVmZi9ub3Rlc19IYW1tZXJzbGV5T25IZW1pc3BoZXJlLmh0bWxcclxuICAgIC8vIEdMU0wgbm90IHN1cHBvcnQgYml0IG9wZXJhdGlvbiwgdXNlIGxvb2t1cCBpbnN0ZWFkXHJcbiAgICAvLyBWIC0+IGkgLyBOLCBVIC0+IHJvdWdobmVzc1xyXG4gICAgdmFyIHJvdWdobmVzc0xldmVscyA9IHJvdWdobmVzc0xldmVscyB8fCAyNTY7XHJcbiAgICB2YXIgc2FtcGxlU2l6ZSA9IHNhbXBsZVNpemUgfHwgMTAyNDtcclxuXHJcbiAgICB2YXIgbm9ybWFsRGlzdHJpYnV0aW9uID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgd2lkdGg6IHJvdWdobmVzc0xldmVscyxcclxuICAgICAgICBoZWlnaHQ6IHNhbXBsZVNpemUsXHJcbiAgICAgICAgdHlwZTogVGV4dHVyZS5GTE9BVCxcclxuICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICBtYWdGaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICB3cmFwUzogVGV4dHVyZS5DTEFNUF9UT19FREdFLFxyXG4gICAgICAgIHdyYXBUOiBUZXh0dXJlLkNMQU1QX1RPX0VER0UsXHJcbiAgICAgICAgdXNlTWlwbWFwOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgICB2YXIgcGl4ZWxzID0gbmV3IEZsb2F0MzJBcnJheShzYW1wbGVTaXplICogcm91Z2huZXNzTGV2ZWxzICogNCk7XHJcbiAgICB2YXIgdG1wID0gW107XHJcblxyXG4gICAgLy8gZnVuY3Rpb24gc29ydEZ1bmMoYSwgYikge1xyXG4gICAgLy8gICAgIHJldHVybiBNYXRoLmFicyhiKSAtIE1hdGguYWJzKGEpO1xyXG4gICAgLy8gfVxyXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCByb3VnaG5lc3NMZXZlbHM7IGorKykge1xyXG4gICAgICAgIHZhciByb3VnaG5lc3MgPSBqIC8gcm91Z2huZXNzTGV2ZWxzO1xyXG4gICAgICAgIHZhciBhID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNhbXBsZVNpemU7IGkrKykge1xyXG4gICAgICAgICAgICAvLyBodHRwOi8vaG9sZ2VyLmRhbW1lcnR6Lm9yZy9zdHVmZi9ub3Rlc19IYW1tZXJzbGV5T25IZW1pc3BoZXJlLmh0bWxcclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT3BlcmF0b3JzL0JpdHdpc2VfT3BlcmF0b3JzXHJcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTkwODQ5Mi91bnNpZ25lZC1pbnRlZ2VyLWluLWphdmFzY3JpcHRcclxuICAgICAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xODIyMzUwL3doYXQtaXMtdGhlLWphdmFzY3JpcHQtb3BlcmF0b3ItYW5kLWhvdy1kby15b3UtdXNlLWl0XHJcbiAgICAgICAgICAgIHZhciB5ID0gKGkgPDwgMTYgfCBpID4+PiAxNikgPj4+IDA7XHJcbiAgICAgICAgICAgIHkgPSAoKHkgJiAxNDMxNjU1NzY1KSA8PCAxIHwgKHkgJiAyODYzMzExNTMwKSA+Pj4gMSkgPj4+IDA7XHJcbiAgICAgICAgICAgIHkgPSAoKHkgJiA4NTg5OTM0NTkpIDw8IDIgfCAoeSAmIDM0MzU5NzM4MzYpID4+PiAyKSA+Pj4gMDtcclxuICAgICAgICAgICAgeSA9ICgoeSAmIDI1MjY0NTEzNSkgPDwgNCB8ICh5ICYgNDA0MjMyMjE2MCkgPj4+IDQpID4+PiAwO1xyXG4gICAgICAgICAgICB5ID0gKCgoeSAmIDE2NzExOTM1KSA8PCA4IHwgKHkgJiA0Mjc4MjU1MzYwKSA+Pj4gOCkgPj4+IDApIC8gNDI5NDk2NzI5NjtcclxuXHJcbiAgICAgICAgICAgIC8vIENERlxyXG4gICAgICAgICAgICB2YXIgY29zVGhldGEgPSBNYXRoLnNxcnQoKDEgLSB5KSAvICgxICsgKGEgKiBhIC0gMS4wKSAqIHkpKTtcclxuICAgICAgICAgICAgdG1wW2ldID0gY29zVGhldGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNhbXBsZVNpemU7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gKGkgKiByb3VnaG5lc3NMZXZlbHMgKyBqKSAqIDQ7XHJcbiAgICAgICAgICAgIHZhciBjb3NUaGV0YSA9IHRtcFtpXTtcclxuICAgICAgICAgICAgdmFyIHNpblRoZXRhID0gTWF0aC5zcXJ0KDEuMCAtIGNvc1RoZXRhICogY29zVGhldGEpO1xyXG4gICAgICAgICAgICB2YXIgeCA9IGkgLyBzYW1wbGVTaXplO1xyXG4gICAgICAgICAgICB2YXIgcGhpID0gMi4wICogTWF0aC5QSSAqIHg7XHJcbiAgICAgICAgICAgIHBpeGVsc1tvZmZzZXRdID0gc2luVGhldGEgKiBNYXRoLmNvcyhwaGkpO1xyXG4gICAgICAgICAgICBwaXhlbHNbb2Zmc2V0ICsgMV0gPSBjb3NUaGV0YTtcclxuICAgICAgICAgICAgcGl4ZWxzW29mZnNldCArIDJdID0gc2luVGhldGEgKiBNYXRoLnNpbihwaGkpO1xyXG4gICAgICAgICAgICBwaXhlbHNbb2Zmc2V0ICsgM10gPSAxLjA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbm9ybWFsRGlzdHJpYnV0aW9uLnBpeGVscyA9IHBpeGVscztcclxuXHJcbiAgICByZXR1cm4gbm9ybWFsRGlzdHJpYnV0aW9uO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY3ViZW1hcFV0aWw7XHJcbiIsIi8vIGh0dHBzOi8vZG9jcy51bnJlYWxlbmdpbmUuY29tL2xhdGVzdC9JTlQvRW5naW5lL1JlbmRlcmluZy9MaWdodGluZ0FuZFNoYWRvd3MvQW1iaWVudEN1YmVtYXAvXHJcbmltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcbmltcG9ydCBjdWJlbWFwVXRpbCBmcm9tICcuLi91dGlsL2N1YmVtYXAnO1xyXG5cclxuLyoqXHJcbiAqIEFtYmllbnQgY3ViZW1hcCBsaWdodCBwcm92aWRlcyBzcGVjdWxhciBwYXJ0cyBvZiBJbWFnZSBCYXNlZCBMaWdodGluZy5cclxuICogV2hpY2ggaXMgYSBiYXNpYyByZXF1aXJlbWVudCBmb3IgUGh5c2ljYWxseSBCYXNlZCBSZW5kZXJpbmdcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuQW1iaWVudEN1YmVtYXBcclxuICogQGV4dGVuZHMgY2xheS5MaWdodFxyXG4gKi9cclxudmFyIEFtYmllbnRDdWJlbWFwTGlnaHQgPSBMaWdodC5leHRlbmQoe1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVGV4dHVyZUN1YmV9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5BbWJpZW50Q3ViZW1hcCNcclxuICAgICAqL1xyXG4gICAgY3ViZW1hcDogbnVsbCxcclxuXHJcbiAgICAvLyBUT0RPXHJcbiAgICAvLyByYW5nZTogMTAwLFxyXG5cclxuICAgIGNhc3RTaGFkb3c6IGZhbHNlLFxyXG5cclxuICAgIF9ub3JtYWxEaXN0cmlidXRpb246IG51bGwsXHJcbiAgICBfYnJkZkxvb2t1cDogbnVsbFxyXG5cclxufSwgLyoqIEBsZW5kcyBjbGF5LmxpZ2h0LkFtYmllbnRDdWJlbWFwIyAqLyB7XHJcblxyXG4gICAgdHlwZTogJ0FNQklFTlRfQ1VCRU1BUF9MSUdIVCcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEbyBwcmVmaXRlcmluZyB0aGUgY3ViZW1hcFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTMyXVxyXG4gICAgICovXHJcbiAgICBwcmVmaWx0ZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2l6ZSkge1xyXG4gICAgICAgIGlmICghcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oJ0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QnKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RldmljZSBub3Qgc3VwcG9ydCB0ZXh0dXJlQ3ViZUxvZEVYVCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5fYnJkZkxvb2t1cCkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3JtYWxEaXN0cmlidXRpb24gPSBjdWJlbWFwVXRpbC5nZW5lcmF0ZU5vcm1hbERpc3RyaWJ1dGlvbigpO1xyXG4gICAgICAgICAgICB0aGlzLl9icmRmTG9va3VwID0gY3ViZW1hcFV0aWwuaW50ZWdyYXRlQlJERihyZW5kZXJlciwgdGhpcy5fbm9ybWFsRGlzdHJpYnV0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGN1YmVtYXAgPSB0aGlzLmN1YmVtYXA7XHJcbiAgICAgICAgaWYgKGN1YmVtYXAuX19wcmVmaWx0ZXJlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcmVzdWx0ID0gY3ViZW1hcFV0aWwucHJlZmlsdGVyRW52aXJvbm1lbnRNYXAoXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLCBjdWJlbWFwLCB7XHJcbiAgICAgICAgICAgICAgICBlbmNvZGVSR0JNOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHNpemUsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHNpemVcclxuICAgICAgICAgICAgfSwgdGhpcy5fbm9ybWFsRGlzdHJpYnV0aW9uLCB0aGlzLl9icmRmTG9va3VwXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmN1YmVtYXAgPSByZXN1bHQuZW52aXJvbm1lbnRNYXA7XHJcbiAgICAgICAgdGhpcy5jdWJlbWFwLl9fcHJlZmlsdGVyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBjdWJlbWFwLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRCUkRGTG9va3VwOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JyZGZMb29rdXA7XHJcbiAgICB9LFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBhbWJpZW50Q3ViZW1hcExpZ2h0Q29sb3I6IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSppbnRlbnNpdHksIGNvbG9yWzFdKmludGVuc2l0eSwgY29sb3JbMl0qaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGFtYmllbnRDdWJlbWFwTGlnaHRDdWJlbWFwOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICd0JyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmN1YmVtYXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBhbWJpZW50Q3ViZW1hcExpZ2h0QlJERkxvb2t1cDoge1xyXG4gICAgICAgICAgICB0eXBlOiAndCcsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5fYnJkZkxvb2t1cDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAbmFtZSBjbG9uZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5BbWJpZW50Q3ViZW1hcH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LkFtYmllbnRDdWJlbWFwLnByb3RvdHlwZVxyXG4gICAgICovXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW1iaWVudEN1YmVtYXBMaWdodDtcclxuIiwiaW1wb3J0IExpZ2h0IGZyb20gJy4uL0xpZ2h0JztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XHJcblxyXG4vKipcclxuICogU3BoZXJpY2FsIEhhcm1vbmljIEFtYmllbnQgTGlnaHRcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuQW1iaWVudFNIXHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICovXHJcbnZhciBBbWJpZW50U0hMaWdodCA9IExpZ2h0LmV4dGVuZCh7XHJcblxyXG4gICAgY2FzdFNoYWRvdzogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGhlcmljYWwgSGFybW9uaWMgQ29lZmZpY2llbnRzXHJcbiAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5BbWJpZW50U0gjXHJcbiAgICAgKi9cclxuICAgIGNvZWZmaWNpZW50czogW10sXHJcblxyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9jb2VmZmljaWVudHNUbXBBcnIgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSg5ICogMyk7XHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnQU1CSUVOVF9TSF9MSUdIVCcsXHJcblxyXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xyXG4gICAgICAgIGFtYmllbnRTSExpZ2h0Q29sb3I6IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSAqIGludGVuc2l0eSwgY29sb3JbMV0gKiBpbnRlbnNpdHksIGNvbG9yWzJdICogaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2VmZmljaWVudHNUbXBBcnIgPSBpbnN0YW5jZS5fY29lZmZpY2llbnRzVG1wQXJyO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnN0YW5jZS5jb2VmZmljaWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2VmZmljaWVudHNUbXBBcnJbaV0gPSBpbnN0YW5jZS5jb2VmZmljaWVudHNbaV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29lZmZpY2llbnRzVG1wQXJyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBuYW1lIGNsb25lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmxpZ2h0LkFtYmllbnR9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5BbWJpZW50LnByb3RvdHlwZVxyXG4gICAgICovXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW1iaWVudFNITGlnaHQ7XHJcbiIsImltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4uL2NvcmUvdXRpbCc7XHJcblxyXG52YXIgVGV4dHVyZVBvb2wgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdGhpcy5fcG9vbCA9IHt9O1xyXG5cclxuICAgIHRoaXMuX2FsbG9jYXRlZFRleHR1cmVzID0gW107XHJcbn07XHJcblxyXG5UZXh0dXJlUG9vbC5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IFRleHR1cmVQb29sLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24gKHBhcmFtZXRlcnMpIHtcclxuICAgICAgICB2YXIga2V5ID0gZ2VuZXJhdGVLZXkocGFyYW1ldGVycyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wb29sLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcG9vbFtrZXldID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsaXN0ID0gdGhpcy5fcG9vbFtrZXldO1xyXG4gICAgICAgIGlmICghbGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICB0aGlzLl9hbGxvY2F0ZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxpc3QucG9wKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIHB1dDogZnVuY3Rpb24gKHRleHR1cmUpIHtcclxuICAgICAgICB2YXIga2V5ID0gZ2VuZXJhdGVLZXkodGV4dHVyZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wb29sLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcG9vbFtrZXldID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsaXN0ID0gdGhpcy5fcG9vbFtrZXldO1xyXG4gICAgICAgIGxpc3QucHVzaCh0ZXh0dXJlKTtcclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXI6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXNbaV0uZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3Bvb2wgPSB7fTtcclxuICAgICAgICB0aGlzLl9hbGxvY2F0ZWRUZXh0dXJlcyA9IFtdO1xyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIGRlZmF1bHRQYXJhbXMgPSB7XHJcbiAgICB3aWR0aDogNTEyLFxyXG4gICAgaGVpZ2h0OiA1MTIsXHJcbiAgICB0eXBlOiBnbGVudW0uVU5TSUdORURfQllURSxcclxuICAgIGZvcm1hdDogZ2xlbnVtLlJHQkEsXHJcbiAgICB3cmFwUzogZ2xlbnVtLkNMQU1QX1RPX0VER0UsXHJcbiAgICB3cmFwVDogZ2xlbnVtLkNMQU1QX1RPX0VER0UsXHJcbiAgICBtaW5GaWx0ZXI6IGdsZW51bS5MSU5FQVJfTUlQTUFQX0xJTkVBUixcclxuICAgIG1hZ0ZpbHRlcjogZ2xlbnVtLkxJTkVBUixcclxuICAgIHVzZU1pcG1hcDogdHJ1ZSxcclxuICAgIGFuaXNvdHJvcGljOiAxLFxyXG4gICAgZmxpcFk6IHRydWUsXHJcbiAgICB1bnBhY2tBbGlnbm1lbnQ6IDQsXHJcbiAgICBwcmVtdWx0aXBseUFscGhhOiBmYWxzZVxyXG59O1xyXG5cclxudmFyIGRlZmF1bHRQYXJhbVByb3BMaXN0ID0gT2JqZWN0LmtleXMoZGVmYXVsdFBhcmFtcyk7XHJcblxyXG5mdW5jdGlvbiBnZW5lcmF0ZUtleShwYXJhbWV0ZXJzKSB7XHJcbiAgICB1dGlsLmRlZmF1bHRzV2l0aFByb3BMaXN0KHBhcmFtZXRlcnMsIGRlZmF1bHRQYXJhbXMsIGRlZmF1bHRQYXJhbVByb3BMaXN0KTtcclxuICAgIGZhbGxCYWNrKHBhcmFtZXRlcnMpO1xyXG5cclxuICAgIHZhciBrZXkgPSAnJztcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVmYXVsdFBhcmFtUHJvcExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgbmFtZSA9IGRlZmF1bHRQYXJhbVByb3BMaXN0W2ldO1xyXG4gICAgICAgIHZhciBjaHVuayA9IHBhcmFtZXRlcnNbbmFtZV0udG9TdHJpbmcoKTtcclxuICAgICAgICBrZXkgKz0gY2h1bms7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ga2V5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBmYWxsQmFjayh0YXJnZXQpIHtcclxuXHJcbiAgICB2YXIgSVBPVCA9IGlzUG93ZXJPZlR3byh0YXJnZXQud2lkdGgsIHRhcmdldC5oZWlnaHQpO1xyXG5cclxuICAgIGlmICh0YXJnZXQuZm9ybWF0ID09PSBnbGVudW0uREVQVEhfQ09NUE9ORU5UKSB7XHJcbiAgICAgICAgdGFyZ2V0LnVzZU1pcG1hcCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghSVBPVCB8fCAhdGFyZ2V0LnVzZU1pcG1hcCkge1xyXG4gICAgICAgIGlmICh0YXJnZXQubWluRmlsdGVyID09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUIHx8XHJcbiAgICAgICAgICAgIHRhcmdldC5taW5GaWx0ZXIgPT0gZ2xlbnVtLk5FQVJFU1RfTUlQTUFQX0xJTkVBUikge1xyXG4gICAgICAgICAgICB0YXJnZXQubWluRmlsdGVyID0gZ2xlbnVtLk5FQVJFU1Q7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgdGFyZ2V0Lm1pbkZpbHRlciA9PSBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVIgfHxcclxuICAgICAgICAgICAgdGFyZ2V0Lm1pbkZpbHRlciA9PSBnbGVudW0uTElORUFSX01JUE1BUF9ORUFSRVNUXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRhcmdldC5taW5GaWx0ZXIgPSBnbGVudW0uTElORUFSO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghSVBPVCkge1xyXG4gICAgICAgIHRhcmdldC53cmFwUyA9IGdsZW51bS5DTEFNUF9UT19FREdFO1xyXG4gICAgICAgIHRhcmdldC53cmFwVCA9IGdsZW51bS5DTEFNUF9UT19FREdFO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1Bvd2VyT2ZUd28od2lkdGgsIGhlaWdodCkge1xyXG4gICAgcmV0dXJuICh3aWR0aCAmICh3aWR0aC0xKSkgPT09IDAgJiZcclxuICAgICAgICAgICAgKGhlaWdodCAmIChoZWlnaHQtMSkpID09PSAwO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlUG9vbDtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuc20uZGVwdGgudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA9IHZlYzIoMS4wLCAxLjApO1xcbnVuaWZvcm0gdmVjMiB1dk9mZnNldCA9IHZlYzIoMC4wLCAwLjApO1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52YXJ5aW5nIHZlYzQgdl9WaWV3UG9zaXRpb247XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudm9pZCBtYWluKCl7XFxuIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiNlbmRpZlxcbiB2X1ZpZXdQb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG4gZ2xfUG9zaXRpb24gPSB2X1ZpZXdQb3NpdGlvbjtcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkICogdXZSZXBlYXQgKyB1dk9mZnNldDtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zbS5kZXB0aC5mcmFnbWVudFxcbnZhcnlpbmcgdmVjNCB2X1ZpZXdQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIGZsb2F0IGJpYXMgOiAwLjAwMTtcXG51bmlmb3JtIGZsb2F0IHNsb3BlU2NhbGUgOiAxLjA7XFxudW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XFxudW5pZm9ybSBmbG9hdCBhbHBoYUN1dG9mZjogMC4wO1xcbkBpbXBvcnQgY2xheS51dGlsLmVuY29kZV9mbG9hdFxcbnZvaWQgbWFpbigpe1xcbiBmbG9hdCBkZXB0aCA9IHZfVmlld1Bvc2l0aW9uLnogLyB2X1ZpZXdQb3NpdGlvbi53O1xcbiBpZiAoYWxwaGFDdXRvZmYgPiAwLjApIHtcXG4gaWYgKHRleHR1cmUyRChhbHBoYU1hcCwgdl9UZXhjb29yZCkuYSA8PSBhbHBoYUN1dG9mZikge1xcbiBkaXNjYXJkO1xcbiB9XFxuIH1cXG4jaWZkZWYgVVNFX1ZTTVxcbiBkZXB0aCA9IGRlcHRoICogMC41ICsgMC41O1xcbiBmbG9hdCBtb21lbnQxID0gZGVwdGg7XFxuIGZsb2F0IG1vbWVudDIgPSBkZXB0aCAqIGRlcHRoO1xcbiAjaWZkZWYgU1VQUE9SVF9TVEFOREFSRF9ERVJJVkFUSVZFU1xcbiBmbG9hdCBkeCA9IGRGZHgoZGVwdGgpO1xcbiBmbG9hdCBkeSA9IGRGZHkoZGVwdGgpO1xcbiBtb21lbnQyICs9IDAuMjUqKGR4KmR4K2R5KmR5KTtcXG4gI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQobW9tZW50MSwgbW9tZW50MiwgMC4wLCAxLjApO1xcbiNlbHNlXFxuICNpZmRlZiBTVVBQT1JUX1NUQU5EQVJEX0RFUklWQVRJVkVTXFxuIGZsb2F0IGR4ID0gZEZkeChkZXB0aCk7XFxuIGZsb2F0IGR5ID0gZEZkeShkZXB0aCk7XFxuIGRlcHRoICs9IHNxcnQoZHgqZHggKyBkeSpkeSkgKiBzbG9wZVNjYWxlICsgYmlhcztcXG4gI2Vsc2VcXG4gZGVwdGggKz0gYmlhcztcXG4gI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUZsb2F0KGRlcHRoICogMC41ICsgMC41KTtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zbS5kZWJ1Z19kZXB0aFxcbnVuaWZvcm0gc2FtcGxlcjJEIGRlcHRoTWFwO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbnZvaWQgbWFpbigpIHtcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQoZGVwdGhNYXAsIHZfVGV4Y29vcmQpO1xcbiNpZmRlZiBVU0VfVlNNXFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQodGV4LnJnYiwgMS4wKTtcXG4jZWxzZVxcbiBmbG9hdCBkZXB0aCA9IGRlY29kZUZsb2F0KHRleCk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoZGVwdGgsIGRlcHRoLCBkZXB0aCwgMS4wKTtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zbS5kaXN0YW5jZS52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG52b2lkIG1haW4gKCl7XFxuIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiNlbmRpZlxcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiAsIDEuMCk7XFxuIHZfV29ybGRQb3NpdGlvbiA9ICh3b3JsZCAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApKS54eXo7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc20uZGlzdGFuY2UuZnJhZ21lbnRcXG51bmlmb3JtIHZlYzMgbGlnaHRQb3NpdGlvbjtcXG51bmlmb3JtIGZsb2F0IHJhbmdlIDogMTAwO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxuQGltcG9ydCBjbGF5LnV0aWwuZW5jb2RlX2Zsb2F0XFxudm9pZCBtYWluKCl7XFxuIGZsb2F0IGRpc3QgPSBkaXN0YW5jZShsaWdodFBvc2l0aW9uLCB2X1dvcmxkUG9zaXRpb24pO1xcbiNpZmRlZiBVU0VfVlNNXFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoZGlzdCwgZGlzdCAqIGRpc3QsIDAuMCwgMC4wKTtcXG4jZWxzZVxcbiBkaXN0ID0gZGlzdCAvIHJhbmdlO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVGbG9hdChkaXN0KTtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG5AaW1wb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG5mbG9hdCB0YXBTaGFkb3dNYXAoc2FtcGxlcjJEIG1hcCwgdmVjMiB1diwgZmxvYXQgeil7XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKG1hcCwgdXYpO1xcbiByZXR1cm4gc3RlcCh6LCBkZWNvZGVGbG9hdCh0ZXgpICogMi4wIC0gMS4wKTtcXG59XFxuZmxvYXQgcGNmKHNhbXBsZXIyRCBtYXAsIHZlYzIgdXYsIGZsb2F0IHosIGZsb2F0IHRleHR1cmVTaXplLCB2ZWMyIHNjYWxlKSB7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSB0YXBTaGFkb3dNYXAobWFwLCB1diwgeik7XFxuIHZlYzIgb2Zmc2V0ID0gdmVjMigxLjAgLyB0ZXh0dXJlU2l6ZSkgKiBzY2FsZTtcXG4jaWZkZWYgUENGX0tFUk5FTF9TSVpFXFxuIGZvciAoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBQQ0ZfS0VSTkVMX1NJWkU7IF9pZHhfKyspIHt7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYgKyBvZmZzZXQgKiBwY2ZLZXJuZWxbX2lkeF9dLCB6KTtcXG4gfX1cXG4gcmV0dXJuIHNoYWRvd0NvbnRyaWIgLyBmbG9hdChQQ0ZfS0VSTkVMX1NJWkUgKyAxKTtcXG4jZWxzZVxcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIob2Zmc2V0LngsIDAuMCksIHopO1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIob2Zmc2V0LngsIG9mZnNldC55KSwgeik7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigtb2Zmc2V0LngsIG9mZnNldC55KSwgeik7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigwLjAsIG9mZnNldC55KSwgeik7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigtb2Zmc2V0LngsIDAuMCksIHopO1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIoLW9mZnNldC54LCAtb2Zmc2V0LnkpLCB6KTtcXG4gc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKG9mZnNldC54LCAtb2Zmc2V0LnkpLCB6KTtcXG4gc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKDAuMCwgLW9mZnNldC55KSwgeik7XFxuIHJldHVybiBzaGFkb3dDb250cmliIC8gOS4wO1xcbiNlbmRpZlxcbn1cXG5mbG9hdCBwY2Yoc2FtcGxlcjJEIG1hcCwgdmVjMiB1diwgZmxvYXQgeiwgZmxvYXQgdGV4dHVyZVNpemUpIHtcXG4gcmV0dXJuIHBjZihtYXAsIHV2LCB6LCB0ZXh0dXJlU2l6ZSwgdmVjMigxLjApKTtcXG59XFxuZmxvYXQgY2hlYnlzaGV2VXBwZXJCb3VuZCh2ZWMyIG1vbWVudHMsIGZsb2F0IHope1xcbiBmbG9hdCBwID0gMC4wO1xcbiB6ID0geiAqIDAuNSArIDAuNTtcXG4gaWYgKHogPD0gbW9tZW50cy54KSB7XFxuIHAgPSAxLjA7XFxuIH1cXG4gZmxvYXQgdmFyaWFuY2UgPSBtb21lbnRzLnkgLSBtb21lbnRzLnggKiBtb21lbnRzLng7XFxuIHZhcmlhbmNlID0gbWF4KHZhcmlhbmNlLCAwLjAwMDAwMDEpO1xcbiBmbG9hdCBtRCA9IG1vbWVudHMueCAtIHo7XFxuIGZsb2F0IHBNYXggPSB2YXJpYW5jZSAvICh2YXJpYW5jZSArIG1EICogbUQpO1xcbiBwTWF4ID0gY2xhbXAoKHBNYXgtMC40KS8oMS4wLTAuNCksIDAuMCwgMS4wKTtcXG4gcmV0dXJuIG1heChwLCBwTWF4KTtcXG59XFxuZmxvYXQgY29tcHV0ZVNoYWRvd0NvbnRyaWIoXFxuIHNhbXBsZXIyRCBtYXAsIG1hdDQgbGlnaHRWUE0sIHZlYzMgcG9zaXRpb24sIGZsb2F0IHRleHR1cmVTaXplLCB2ZWMyIHNjYWxlLCB2ZWMyIG9mZnNldFxcbikge1xcbiB2ZWM0IHBvc0luTGlnaHRTcGFjZSA9IGxpZ2h0VlBNICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gcG9zSW5MaWdodFNwYWNlLnh5eiAvPSBwb3NJbkxpZ2h0U3BhY2UudztcXG4gZmxvYXQgeiA9IHBvc0luTGlnaHRTcGFjZS56O1xcbiBpZihhbGwoZ3JlYXRlclRoYW4ocG9zSW5MaWdodFNwYWNlLnh5eiwgdmVjMygtMC45OSwgLTAuOTksIC0xLjApKSkgJiZcXG4gYWxsKGxlc3NUaGFuKHBvc0luTGlnaHRTcGFjZS54eXosIHZlYzMoMC45OSwgMC45OSwgMS4wKSkpKXtcXG4gdmVjMiB1diA9IChwb3NJbkxpZ2h0U3BhY2UueHkrMS4wKSAvIDIuMDtcXG4gI2lmZGVmIFVTRV9WU01cXG4gdmVjMiBtb21lbnRzID0gdGV4dHVyZTJEKG1hcCwgdXYgKiBzY2FsZSArIG9mZnNldCkueHk7XFxuIHJldHVybiBjaGVieXNoZXZVcHBlckJvdW5kKG1vbWVudHMsIHopO1xcbiAjZWxzZVxcbiByZXR1cm4gcGNmKG1hcCwgdXYgKiBzY2FsZSArIG9mZnNldCwgeiwgdGV4dHVyZVNpemUsIHNjYWxlKTtcXG4gI2VuZGlmXFxuIH1cXG4gcmV0dXJuIDEuMDtcXG59XFxuZmxvYXQgY29tcHV0ZVNoYWRvd0NvbnRyaWIoc2FtcGxlcjJEIG1hcCwgbWF0NCBsaWdodFZQTSwgdmVjMyBwb3NpdGlvbiwgZmxvYXQgdGV4dHVyZVNpemUpIHtcXG4gcmV0dXJuIGNvbXB1dGVTaGFkb3dDb250cmliKG1hcCwgbGlnaHRWUE0sIHBvc2l0aW9uLCB0ZXh0dXJlU2l6ZSwgdmVjMigxLjApLCB2ZWMyKDAuMCkpO1xcbn1cXG5mbG9hdCBjb21wdXRlU2hhZG93Q29udHJpYk9tbmkoc2FtcGxlckN1YmUgbWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgcmFuZ2UpXFxue1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKGRpcmVjdGlvbik7XFxuIHZlYzQgc2hhZG93VGV4ID0gdGV4dHVyZUN1YmUobWFwLCBkaXJlY3Rpb24pO1xcbiNpZmRlZiBVU0VfVlNNXFxuIHZlYzIgbW9tZW50cyA9IHNoYWRvd1RleC54eTtcXG4gZmxvYXQgdmFyaWFuY2UgPSBtb21lbnRzLnkgLSBtb21lbnRzLnggKiBtb21lbnRzLng7XFxuIGZsb2F0IG1EID0gbW9tZW50cy54IC0gZGlzdDtcXG4gZmxvYXQgcCA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgbUQgKiBtRCk7XFxuIGlmKG1vbWVudHMueCArIDAuMDAxIDwgZGlzdCl7XFxuIHJldHVybiBjbGFtcChwLCAwLjAsIDEuMCk7XFxuIH1lbHNle1xcbiByZXR1cm4gMS4wO1xcbiB9XFxuI2Vsc2VcXG4gcmV0dXJuIHN0ZXAoZGlzdCwgKGRlY29kZUZsb2F0KHNoYWRvd1RleCkgKyAwLjAwMDIpICogcmFuZ2UpO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnBsdWdpbi5jb21wdXRlX3NoYWRvd19tYXBcXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVCkgfHwgZGVmaW5lZChESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpIHx8IGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiNpZmRlZiBTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVFxcbnVuaWZvcm0gc2FtcGxlcjJEIHNwb3RMaWdodFNoYWRvd01hcHNbU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gbWF0NCBzcG90TGlnaHRNYXRyaWNlc1tTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBmbG9hdCBzcG90TGlnaHRTaGFkb3dNYXBTaXplc1tTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxuI2VuZGlmXFxuI2lmZGVmIERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVFxcbiNpZiBkZWZpbmVkKFNIQURPV19DQVNDQURFKVxcbnVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzWzFdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXNbU0hBRE9XX0NBU0NBREVdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gZmxvYXQgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzWzFdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gZmxvYXQgc2hhZG93Q2FzY2FkZUNsaXBzTmVhcltTSEFET1dfQ0FTQ0FERV06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBmbG9hdCBzaGFkb3dDYXNjYWRlQ2xpcHNGYXJbU0hBRE9XX0NBU0NBREVdOnVuY29uZmlndXJhYmxlO1xcbiNlbHNlXFxudW5pZm9ybSBzYW1wbGVyMkQgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHNbRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIG1hdDQgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzW0RJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBmbG9hdCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXNbRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG4jZW5kaWZcXG4jZW5kaWZcXG4jaWZkZWYgUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UXFxudW5pZm9ybSBzYW1wbGVyQ3ViZSBwb2ludExpZ2h0U2hhZG93TWFwc1tQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbiNlbmRpZlxcbnVuaWZvcm0gYm9vbCBzaGFkb3dFbmFibGVkIDogdHJ1ZTtcXG4jaWZkZWYgUENGX0tFUk5FTF9TSVpFXFxudW5pZm9ybSB2ZWMyIHBjZktlcm5lbFtQQ0ZfS0VSTkVMX1NJWkVdO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG52b2lkIGNvbXB1dGVTaGFkb3dPZlNwb3RMaWdodHModmVjMyBwb3NpdGlvbiwgaW5vdXQgZmxvYXQgc2hhZG93Q29udHJpYnNbU1BPVF9MSUdIVF9DT1VOVF0gKSB7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWI7XFxuIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmliID0gY29tcHV0ZVNoYWRvd0NvbnRyaWIoXFxuIHNwb3RMaWdodFNoYWRvd01hcHNbX2lkeF9dLCBzcG90TGlnaHRNYXRyaWNlc1tfaWR4X10sIHBvc2l0aW9uLFxcbiBzcG90TGlnaHRTaGFkb3dNYXBTaXplc1tfaWR4X11cXG4gKTtcXG4gc2hhZG93Q29udHJpYnNbX2lkeF9dID0gc2hhZG93Q29udHJpYjtcXG4gfX1cXG4gZm9yKGludCBfaWR4XyA9IFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XyA8IFNQT1RfTElHSFRfQ09VTlQ7IF9pZHhfKyspe3tcXG4gc2hhZG93Q29udHJpYnNbX2lkeF9dID0gMS4wO1xcbiB9fVxcbn1cXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuI2lmZGVmIFNIQURPV19DQVNDQURFXFxudm9pZCBjb21wdXRlU2hhZG93T2ZEaXJlY3Rpb25hbExpZ2h0cyh2ZWMzIHBvc2l0aW9uLCBpbm91dCBmbG9hdCBzaGFkb3dDb250cmlic1tESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF0pe1xcbiBmbG9hdCBkZXB0aCA9ICgyLjAgKiBnbF9GcmFnQ29vcmQueiAtIGdsX0RlcHRoUmFuZ2UubmVhciAtIGdsX0RlcHRoUmFuZ2UuZmFyKVxcbiAvIChnbF9EZXB0aFJhbmdlLmZhciAtIGdsX0RlcHRoUmFuZ2UubmVhcik7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWI7XFxuIHNoYWRvd0NvbnRyaWJzWzBdID0gMS4wO1xcbiBmb3IgKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgU0hBRE9XX0NBU0NBREU7IF9pZHhfKyspIHt7XFxuIGlmIChcXG4gZGVwdGggPj0gc2hhZG93Q2FzY2FkZUNsaXBzTmVhcltfaWR4X10gJiZcXG4gZGVwdGggPD0gc2hhZG93Q2FzY2FkZUNsaXBzRmFyW19pZHhfXVxcbiApIHtcXG4gc2hhZG93Q29udHJpYiA9IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwc1swXSwgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzW19pZHhfXSwgcG9zaXRpb24sXFxuIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBTaXplc1swXSxcXG4gdmVjMigxLjAgLyBmbG9hdChTSEFET1dfQ0FTQ0FERSksIDEuMCksXFxuIHZlYzIoZmxvYXQoX2lkeF8pIC8gZmxvYXQoU0hBRE9XX0NBU0NBREUpLCAwLjApXFxuICk7XFxuIHNoYWRvd0NvbnRyaWJzWzBdID0gc2hhZG93Q29udHJpYjtcXG4gfVxcbiB9fVxcbiBmb3IoaW50IF9pZHhfID0gRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XyA8IERJUkVDVElPTkFMX0xJR0hUX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmlic1tfaWR4X10gPSAxLjA7XFxuIH19XFxufVxcbiNlbHNlXFxudm9pZCBjb21wdXRlU2hhZG93T2ZEaXJlY3Rpb25hbExpZ2h0cyh2ZWMzIHBvc2l0aW9uLCBpbm91dCBmbG9hdCBzaGFkb3dDb250cmlic1tESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF0pe1xcbiBmbG9hdCBzaGFkb3dDb250cmliO1xcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQ7IF9pZHhfKyspIHt7XFxuIHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYihcXG4gZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHNbX2lkeF9dLCBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXNbX2lkeF9dLCBwb3NpdGlvbixcXG4gZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzW19pZHhfXVxcbiApO1xcbiBzaGFkb3dDb250cmlic1tfaWR4X10gPSBzaGFkb3dDb250cmliO1xcbiB9fVxcbiBmb3IoaW50IF9pZHhfID0gRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XyA8IERJUkVDVElPTkFMX0xJR0hUX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmlic1tfaWR4X10gPSAxLjA7XFxuIH19XFxufVxcbiNlbmRpZlxcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG52b2lkIGNvbXB1dGVTaGFkb3dPZlBvaW50TGlnaHRzKHZlYzMgcG9zaXRpb24sIGlub3V0IGZsb2F0IHNoYWRvd0NvbnRyaWJzW1BPSU5UX0xJR0hUX0NPVU5UXSApe1xcbiB2ZWMzIGxpZ2h0UG9zaXRpb247XFxuIHZlYzMgZGlyZWN0aW9uO1xcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQ7IF9pZHhfKyspIHt7XFxuIGxpZ2h0UG9zaXRpb24gPSBwb2ludExpZ2h0UG9zaXRpb25bX2lkeF9dO1xcbiBkaXJlY3Rpb24gPSBwb3NpdGlvbiAtIGxpZ2h0UG9zaXRpb247XFxuIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IGNvbXB1dGVTaGFkb3dDb250cmliT21uaShwb2ludExpZ2h0U2hhZG93TWFwc1tfaWR4X10sIGRpcmVjdGlvbiwgcG9pbnRMaWdodFJhbmdlW19pZHhfXSk7XFxuIH19XFxuIGZvcihpbnQgX2lkeF8gPSBQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQ7IF9pZHhfIDwgUE9JTlRfTElHSFRfQ09VTlQ7IF9pZHhfKyspIHt7XFxuIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IDEuMDtcXG4gfX1cXG59XFxuI2VuZGlmXFxuI2VuZGlmXFxuQGVuZFwiO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgRnJ1c3R1bSBmcm9tICcuLi9tYXRoL0ZydXN0dW0nO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgUmVuZGVyZXIgZnJvbSAnLi4vUmVuZGVyZXInO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XHJcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tICcuLi9jYW1lcmEvUGVyc3BlY3RpdmUnO1xyXG5pbXBvcnQgT3J0aG9DYW1lcmEgZnJvbSAnLi4vY2FtZXJhL09ydGhvZ3JhcGhpYyc7XHJcblxyXG5pbXBvcnQgUGFzcyBmcm9tICcuLi9jb21wb3NpdG9yL1Bhc3MnO1xyXG5pbXBvcnQgVGV4dHVyZVBvb2wgZnJvbSAnLi4vY29tcG9zaXRvci9UZXh0dXJlUG9vbCc7XHJcblxyXG5pbXBvcnQgbWF0NCBmcm9tICcuLi9nbG1hdHJpeC9tYXQ0JztcclxuXHJcbnZhciB0YXJnZXRzID0gWydweCcsICdueCcsICdweScsICdueScsICdweicsICdueiddO1xyXG5cclxuaW1wb3J0IHNoYWRvd21hcEVzc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9zaGFkb3dtYXAuZ2xzbC5qcyc7XHJcblNoYWRlclsnaW1wb3J0J10oc2hhZG93bWFwRXNzbCk7XHJcblxyXG5mdW5jdGlvbiBnZXREZXB0aE1hdGVyaWFsVW5pZm9ybShyZW5kZXJhYmxlLCBkZXB0aE1hdGVyaWFsLCBzeW1ib2wpIHtcclxuICAgIGlmIChzeW1ib2wgPT09ICdhbHBoYU1hcCcpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ2RpZmZ1c2VNYXAnKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ2FscGhhQ3V0b2ZmJykge1xyXG4gICAgICAgIGlmIChyZW5kZXJhYmxlLm1hdGVyaWFsLmlzRGVmaW5lZCgnZnJhZ21lbnQnLCAnQUxQSEFfVEVTVCcpXHJcbiAgICAgICAgICAgICYmIHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdkaWZmdXNlTWFwJylcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdmFyIGFscGhhQ3V0b2ZmID0gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ2FscGhhQ3V0b2ZmJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBhbHBoYUN1dG9mZiB8fCAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3V2UmVwZWF0Jykge1xyXG4gICAgICAgIHJldHVybiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgndXZSZXBlYXQnKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3V2T2Zmc2V0Jykge1xyXG4gICAgICAgIHJldHVybiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgndXZPZmZzZXQnKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBkZXB0aE1hdGVyaWFsLmdldChzeW1ib2wpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0RlcHRoTWF0ZXJpYWxDaGFuZ2VkKHJlbmRlcmFibGUsIHByZXZSZW5kZXJhYmxlKSB7XHJcbiAgICB2YXIgbWF0QSA9IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICB2YXIgbWF0QiA9IHByZXZSZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgcmV0dXJuIG1hdEEuZ2V0KCdkaWZmdXNlTWFwJykgIT09IG1hdEIuZ2V0KCdkaWZmdXNlTWFwJylcclxuICAgICAgICB8fCAobWF0QS5nZXQoJ2FscGhhQ3V0b2ZmJykgfHwgMCkgIT09IChtYXRCLmdldCgnYWxwaGFDdXRvZmYnKSB8fCAwKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFBhc3MgcmVuZGVyaW5nIHNoYWRvdyBtYXAuXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnByZVBhc3MuU2hhZG93TWFwXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICB2YXIgc2hhZG93TWFwUGFzcyA9IG5ldyBjbGF5LnByZVBhc3MuU2hhZG93TWFwKHtcclxuICogICAgICAgICBzb2Z0U2hhZG93OiBjbGF5LnByZVBhc3MuU2hhZG93TWFwLlZTTVxyXG4gKiAgICAgfSk7XHJcbiAqICAgICAuLi5cclxuICogICAgIGFuaW1hdGlvbi5vbignZnJhbWUnLCBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcbiAqICAgICAgICAgc2hhZG93TWFwUGFzcy5yZW5kZXIocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpO1xyXG4gKiAgICAgICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTtcclxuICogICAgIH0pO1xyXG4gKi9cclxudmFyIFNoYWRvd01hcFBhc3MgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LnByZVBhc3MuU2hhZG93TWFwIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU29mdCBzaGFkb3cgdGVjaG5pcXVlLlxyXG4gICAgICAgICAqIENhbiBiZSB7QGxpbmsgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5QQ0Z9IG9yIHtAbGluayBjbGF5LnByZVBhc3MuU2hhZG93TWFwLlZTTX1cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNvZnRTaGFkb3c6IFNoYWRvd01hcFBhc3MuUENGLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTb2Z0IHNoYWRvdyBibHVyIHNpemVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNoYWRvd0JsdXI6IDEuMCxcclxuXHJcbiAgICAgICAgbGlnaHRGcnVzdHVtQmlhczogJ2F1dG8nLFxyXG5cclxuICAgICAgICBrZXJuZWxQQ0Y6IG5ldyBGbG9hdDMyQXJyYXkoW1xyXG4gICAgICAgICAgICAxLCAwLFxyXG4gICAgICAgICAgICAxLCAxLFxyXG4gICAgICAgICAgICAtMSwgMSxcclxuICAgICAgICAgICAgMCwgMSxcclxuICAgICAgICAgICAgLTEsIDAsXHJcbiAgICAgICAgICAgIC0xLCAtMSxcclxuICAgICAgICAgICAgMSwgLTEsXHJcbiAgICAgICAgICAgIDAsIC0xXHJcbiAgICAgICAgXSksXHJcblxyXG4gICAgICAgIHByZWNpc2lvbjogJ2hpZ2hwJyxcclxuXHJcbiAgICAgICAgX2xhc3RSZW5kZXJOb3RDYXN0U2hhZG93OiBmYWxzZSxcclxuXHJcbiAgICAgICAgX2ZyYW1lQnVmZmVyOiBuZXcgRnJhbWVCdWZmZXIoKSxcclxuXHJcbiAgICAgICAgX3RleHR1cmVzOiB7fSxcclxuICAgICAgICBfc2hhZG93TWFwTnVtYmVyOiB7XHJcbiAgICAgICAgICAgICdQT0lOVF9MSUdIVCc6IDAsXHJcbiAgICAgICAgICAgICdESVJFQ1RJT05BTF9MSUdIVCc6IDAsXHJcbiAgICAgICAgICAgICdTUE9UX0xJR0hUJzogMFxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9kZXB0aE1hdGVyaWFsczoge30sXHJcbiAgICAgICAgX2Rpc3RhbmNlTWF0ZXJpYWxzOiB7fSxcclxuXHJcbiAgICAgICAgX3JlY2VpdmVyczogW10sXHJcbiAgICAgICAgX2xpZ2h0c0Nhc3RTaGFkb3c6IFtdLFxyXG5cclxuICAgICAgICBfbGlnaHRDYW1lcmFzOiB7fSxcclxuICAgICAgICBfbGlnaHRNYXRlcmlhbHM6IHt9LFxyXG5cclxuICAgICAgICBfdGV4dHVyZVBvb2w6IG5ldyBUZXh0dXJlUG9vbCgpXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBHYXVzc2lhbiBmaWx0ZXIgcGFzcyBmb3IgVlNNXHJcbiAgICB0aGlzLl9nYXVzc2lhblBhc3NIID0gbmV3IFBhc3Moe1xyXG4gICAgICAgIGZyYWdtZW50OiBTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IuZ2F1c3NpYW5fYmx1cicpXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2dhdXNzaWFuUGFzc1YgPSBuZXcgUGFzcyh7XHJcbiAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkuY29tcG9zaXRvci5nYXVzc2lhbl9ibHVyJylcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzSC5zZXRVbmlmb3JtKCdibHVyU2l6ZScsIHRoaXMuc2hhZG93Qmx1cik7XHJcbiAgICB0aGlzLl9nYXVzc2lhblBhc3NILnNldFVuaWZvcm0oJ2JsdXJEaXInLCAwLjApO1xyXG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzVi5zZXRVbmlmb3JtKCdibHVyU2l6ZScsIHRoaXMuc2hhZG93Qmx1cik7XHJcbiAgICB0aGlzLl9nYXVzc2lhblBhc3NWLnNldFVuaWZvcm0oJ2JsdXJEaXInLCAxLjApO1xyXG5cclxuICAgIHRoaXMuX291dHB1dERlcHRoUGFzcyA9IG5ldyBQYXNzKHtcclxuICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5zbS5kZWJ1Z19kZXB0aCcpXHJcbiAgICB9KTtcclxufSwge1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZW5kZXIgc2NlbmUgdG8gc2hhZG93IHRleHR1cmVzXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtICB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQ2FtZXJhfSBzY2VuZUNhbWVyYVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW25vdFVwZGF0ZVNjZW5lPWZhbHNlXVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIHJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgc2NlbmVDYW1lcmEsIG5vdFVwZGF0ZVNjZW5lKSB7XHJcbiAgICAgICAgaWYgKCFzY2VuZUNhbWVyYSkge1xyXG4gICAgICAgICAgICBzY2VuZUNhbWVyYSA9IHNjZW5lLmdldE1haW5DYW1lcmEoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXInLCB0aGlzLCByZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhKTtcclxuICAgICAgICB0aGlzLl9yZW5kZXJTaGFkb3dQYXNzKHJlbmRlcmVyLCBzY2VuZSwgc2NlbmVDYW1lcmEsIG5vdFVwZGF0ZVNjZW5lKTtcclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2FmdGVycmVuZGVyJywgdGhpcywgcmVuZGVyZXIsIHNjZW5lLCBzY2VuZUNhbWVyYSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVidWcgcmVuZGVyaW5nIG9mIHNoYWRvdyB0ZXh0dXJlc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gc2l6ZVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIHJlbmRlckRlYnVnOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNpemUpIHtcclxuICAgICAgICByZW5kZXJlci5zYXZlQ2xlYXIoKTtcclxuICAgICAgICB2YXIgdmlld3BvcnQgPSByZW5kZXJlci52aWV3cG9ydDtcclxuICAgICAgICB2YXIgeCA9IDAsIHkgPSAwO1xyXG4gICAgICAgIHZhciB3aWR0aCA9IHNpemUgfHwgdmlld3BvcnQud2lkdGggLyA0O1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSB3aWR0aDtcclxuICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXREZXB0aFBhc3MubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfVlNNJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXREZXB0aFBhc3MubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9WU00nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl90ZXh0dXJlcykge1xyXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW25hbWVdO1xyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCh4LCB5LCB3aWR0aCAqIHRleHR1cmUud2lkdGggLyB0ZXh0dXJlLmhlaWdodCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0RGVwdGhQYXNzLnNldFVuaWZvcm0oJ2RlcHRoTWFwJywgdGV4dHVyZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dERlcHRoUGFzcy5yZW5kZXIocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB4ICs9IHdpZHRoICogdGV4dHVyZS53aWR0aCAvIHRleHR1cmUuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCh2aWV3cG9ydCk7XHJcbiAgICAgICAgcmVuZGVyZXIucmVzdG9yZUNsZWFyKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVSZWNlaXZlcnM6IGZ1bmN0aW9uIChyZW5kZXJlciwgbWVzaCkge1xyXG4gICAgICAgIGlmIChtZXNoLnJlY2VpdmVTaGFkb3cpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVjZWl2ZXJzLnB1c2gobWVzaCk7XHJcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuc2V0KCdzaGFkb3dFbmFibGVkJywgMSk7XHJcblxyXG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLnNldCgncGNmS2VybmVsJywgdGhpcy5rZXJuZWxQQ0YpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC5zZXQoJ3NoYWRvd0VuYWJsZWQnLCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XHJcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfVlNNJyk7XHJcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1BDRl9LRVJORUxfU0laRScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xyXG4gICAgICAgICAgICB2YXIga2VybmVsUENGID0gdGhpcy5rZXJuZWxQQ0Y7XHJcbiAgICAgICAgICAgIGlmIChrZXJuZWxQQ0YgJiYga2VybmVsUENGLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1BDRl9LRVJORUxfU0laRScsIGtlcm5lbFBDRi5sZW5ndGggLyAyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1BDRl9LRVJORUxfU0laRScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNjZW5lLnRyYXZlcnNlKGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl91cGRhdGVSZWNlaXZlcnMocmVuZGVyZXIsIHJlbmRlcmFibGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBsaWdodCA9IHNjZW5lLmxpZ2h0c1tpXTtcclxuICAgICAgICAgICAgaWYgKGxpZ2h0LmNhc3RTaGFkb3cgJiYgIWxpZ2h0LmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRzQ2FzdFNoYWRvdy5wdXNoKGxpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3JlbmRlclNoYWRvd1Bhc3M6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhLCBub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgIC8vIHJlc2V0XHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl9zaGFkb3dNYXBOdW1iZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2hhZG93TWFwTnVtYmVyW25hbWVdID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fbGlnaHRzQ2FzdFNoYWRvdy5sZW5ndGggPSAwO1xyXG4gICAgICAgIHRoaXMuX3JlY2VpdmVycy5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIGlmICghbm90VXBkYXRlU2NlbmUpIHtcclxuICAgICAgICAgICAgc2NlbmUudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2VuZUNhbWVyYSkge1xyXG4gICAgICAgICAgICBzY2VuZUNhbWVyYS51cGRhdGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNjZW5lLnVwZGF0ZUxpZ2h0cygpO1xyXG4gICAgICAgIHRoaXMuX3VwZGF0ZShyZW5kZXJlciwgc2NlbmUpO1xyXG5cclxuICAgICAgICAvLyBOZWVkcyB0byB1cGRhdGUgdGhlIHJlY2VpdmVycyBhZ2FpbiBpZiBzaGFkb3dzIGNvbWUgZnJvbSAxIHRvIDAuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9saWdodHNDYXN0U2hhZG93Lmxlbmd0aCAmJiB0aGlzLl9sYXN0UmVuZGVyTm90Q2FzdFNoYWRvdykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9sYXN0UmVuZGVyTm90Q2FzdFNoYWRvdyA9IHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cgPT09IDA7XHJcblxyXG4gICAgICAgIF9nbC5lbmFibGUoX2dsLkRFUFRIX1RFU1QpO1xyXG4gICAgICAgIF9nbC5kZXB0aE1hc2sodHJ1ZSk7XHJcbiAgICAgICAgX2dsLmRpc2FibGUoX2dsLkJMRU5EKTtcclxuXHJcbiAgICAgICAgLy8gQ2xlYXIgd2l0aCBoaWdoLXosIHNvIHRoZSBwYXJ0IG5vdCByZW5kZXJlZCB3aWxsIG5vdCBiZWVuIHNoYWRvd2VkXHJcbiAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIC8vIFRPRE8gcmVzdG9yZVxyXG4gICAgICAgIF9nbC5jbGVhckNvbG9yKDEuMCwgMS4wLCAxLjAsIDEuMCk7XHJcblxyXG4gICAgICAgIC8vIFNoYWRvdyB1bmlmb3Jtc1xyXG4gICAgICAgIHZhciBzcG90TGlnaHRTaGFkb3dNYXBzID0gW107XHJcbiAgICAgICAgdmFyIHNwb3RMaWdodE1hdHJpY2VzID0gW107XHJcbiAgICAgICAgdmFyIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzID0gW107XHJcbiAgICAgICAgdmFyIGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlcyA9IFtdO1xyXG4gICAgICAgIHZhciBzaGFkb3dDYXNjYWRlQ2xpcHMgPSBbXTtcclxuICAgICAgICB2YXIgcG9pbnRMaWdodFNoYWRvd01hcHMgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIGRpckxpZ2h0SGFzQ2FzY2FkZTtcclxuICAgICAgICAvLyBDcmVhdGUgdGV4dHVyZXMgZm9yIHNoYWRvdyBtYXBcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGxpZ2h0ID0gdGhpcy5fbGlnaHRzQ2FzdFNoYWRvd1tpXTtcclxuICAgICAgICAgICAgaWYgKGxpZ2h0LnR5cGUgPT09ICdESVJFQ1RJT05BTF9MSUdIVCcpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGlyTGlnaHRIYXNDYXNjYWRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdPbmx5IG9uZSBkaXJlZWN0aW9uYWwgbGlnaHQgc3VwcG9ydGVkIHdpdGggc2hhZG93IGNhc2NhZGUnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChsaWdodC5zaGFkb3dDYXNjYWRlID4gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignU3VwcG9ydCBhdCBtb3N0IDQgY2FzY2FkZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGxpZ2h0LnNoYWRvd0Nhc2NhZGUgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlyTGlnaHRIYXNDYXNjYWRlID0gbGlnaHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJEaXJlY3Rpb25hbExpZ2h0U2hhZG93KFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lQ2FtZXJhLFxyXG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwcyxcclxuICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobGlnaHQudHlwZSA9PT0gJ1NQT1RfTElHSFQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclNwb3RMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlcixcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZSxcclxuICAgICAgICAgICAgICAgICAgICBsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBzcG90TGlnaHRNYXRyaWNlcyxcclxuICAgICAgICAgICAgICAgICAgICBzcG90TGlnaHRTaGFkb3dNYXBzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxpZ2h0LnR5cGUgPT09ICdQT0lOVF9MSUdIVCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyUG9pbnRMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlcixcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZSxcclxuICAgICAgICAgICAgICAgICAgICBsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBwb2ludExpZ2h0U2hhZG93TWFwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fc2hhZG93TWFwTnVtYmVyW2xpZ2h0LnR5cGVdKys7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBsaWdodFR5cGUgaW4gdGhpcy5fc2hhZG93TWFwTnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHZhciBudW1iZXIgPSB0aGlzLl9zaGFkb3dNYXBOdW1iZXJbbGlnaHRUeXBlXTtcclxuICAgICAgICAgICAgdmFyIGtleSA9IGxpZ2h0VHlwZSArICdfU0hBRE9XTUFQX0NPVU5UJztcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9yZWNlaXZlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fcmVjZWl2ZXJzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5mcmFnbWVudERlZmluZXNba2V5XSAhPT0gbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlciA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsIGtleSwgbnVtYmVyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50Jywga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9yZWNlaXZlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG1lc2ggPSB0aGlzLl9yZWNlaXZlcnNbaV07XHJcbiAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IG1lc2gubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIGlmIChkaXJMaWdodEhhc0Nhc2NhZGUpIHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnU0hBRE9XX0NBU0NBREUnLCBkaXJMaWdodEhhc0Nhc2NhZGUuc2hhZG93Q2FzY2FkZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnU0hBRE9XX0NBU0NBREUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNoYWRvd1VuaWZvcm1zID0gc2NlbmUuc2hhZG93VW5pZm9ybXM7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGdldFNpemUodGV4dHVyZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZS5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXMgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcy5tYXAoZ2V0U2l6ZSk7XHJcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzID0geyB2YWx1ZTogZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMsIHR5cGU6ICd0dicgfTtcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzID0geyB2YWx1ZTogZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzLCB0eXBlOiAnbTR2JyB9O1xyXG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5kaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXMgPSB7IHZhbHVlOiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXMsIHR5cGU6ICcxZnYnIH07XHJcbiAgICAgICAgICAgIGlmIChkaXJMaWdodEhhc0Nhc2NhZGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyID0gc2hhZG93Q2FzY2FkZUNsaXBzLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93Q2FzY2FkZUNsaXBzRmFyID0gc2hhZG93Q2FzY2FkZUNsaXBzLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgc2hhZG93Q2FzY2FkZUNsaXBzRmFyLnNoaWZ0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSBmcm9tIGZhciB0byBuZWFyXHJcbiAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyLnJldmVyc2UoKTtcclxuICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwc0Zhci5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcy5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc2hhZG93Q2FzY2FkZUNsaXBzTmVhciA9IHsgdmFsdWU6IHNoYWRvd0Nhc2NhZGVDbGlwc05lYXIsIHR5cGU6ICcxZnYnIH07XHJcbiAgICAgICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zaGFkb3dDYXNjYWRlQ2xpcHNGYXIgPSB7IHZhbHVlOiBzaGFkb3dDYXNjYWRlQ2xpcHNGYXIsIHR5cGU6ICcxZnYnIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzcG90TGlnaHRTaGFkb3dNYXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIHNwb3RMaWdodFNoYWRvd01hcFNpemVzID0gc3BvdExpZ2h0U2hhZG93TWFwcy5tYXAoZ2V0U2l6ZSk7XHJcbiAgICAgICAgICAgIHZhciBzaGFkb3dVbmlmb3JtcyA9IHNjZW5lLnNoYWRvd1VuaWZvcm1zO1xyXG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zcG90TGlnaHRTaGFkb3dNYXBzID0geyB2YWx1ZTogc3BvdExpZ2h0U2hhZG93TWFwcywgdHlwZTogJ3R2JyB9O1xyXG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zcG90TGlnaHRNYXRyaWNlcyA9IHsgdmFsdWU6IHNwb3RMaWdodE1hdHJpY2VzLCB0eXBlOiAnbTR2JyB9O1xyXG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zcG90TGlnaHRTaGFkb3dNYXBTaXplcyA9IHsgdmFsdWU6IHNwb3RMaWdodFNoYWRvd01hcFNpemVzLCB0eXBlOiAnMWZ2JyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBvaW50TGlnaHRTaGFkb3dNYXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMucG9pbnRMaWdodFNoYWRvd01hcHMgPSB7IHZhbHVlOiBwb2ludExpZ2h0U2hhZG93TWFwcywgdHlwZTogJ3R2JyB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcmVuZGVyRGlyZWN0aW9uYWxMaWdodFNoYWRvdzogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIHNwbGl0RnJ1c3R1bSA9IG5ldyBGcnVzdHVtKCk7XHJcbiAgICAgICAgdmFyIHNwbGl0UHJvak1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgdmFyIGNyb3BCQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdmFyIGNyb3BNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBsaWdodFZpZXdNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBsaWdodFZpZXdQcm9qTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICB2YXIgbGlnaHRQcm9qTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhLCBsaWdodCwgc2hhZG93Q2FzY2FkZUNsaXBzLCBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgZGVmYXVsdFNoYWRvd01hdGVyaWFsID0gdGhpcy5fZ2V0RGVwdGhNYXRlcmlhbChsaWdodCk7XHJcbiAgICAgICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGUuc2hhZG93RGVwdGhNYXRlcmlhbCB8fCBkZWZhdWx0U2hhZG93TWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGlzRGVwdGhNYXRlcmlhbENoYW5nZWQsXHJcbiAgICAgICAgICAgICAgICBnZXRVbmlmb3JtOiBnZXREZXB0aE1hdGVyaWFsVW5pZm9ybSxcclxuICAgICAgICAgICAgICAgIGlmUmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLmNhc3RTaGFkb3c7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc29ydENvbXBhcmU6IFJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAvLyBGaXJzdCBmcmFtZVxyXG4gICAgICAgICAgICBpZiAoIXNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5pc0Zpbml0ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYm91bmRpbmdCb3ggPSBzY2VuZS5nZXRCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgICAgICAgICAgc2NlbmUudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgLmNvcHkoYm91bmRpbmdCb3gpLmFwcGx5VHJhbnNmb3JtKHNjZW5lQ2FtZXJhLnZpZXdNYXRyaXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIENvbnNpZGVyaW5nIG1vdmluZyBzcGVlZCBzaW5jZSB0aGUgYm91bmRpbmcgYm94IGlzIGZyb20gbGFzdCBmcmFtZVxyXG4gICAgICAgICAgICAvLyBUT0RPOiBhZGQgYSBiaWFzXHJcbiAgICAgICAgICAgIHZhciBjbGlwcGVkRmFyID0gTWF0aC5taW4oLXNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5taW4ueiwgc2NlbmVDYW1lcmEuZmFyKTtcclxuICAgICAgICAgICAgdmFyIGNsaXBwZWROZWFyID0gTWF0aC5tYXgoLXNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5tYXgueiwgc2NlbmVDYW1lcmEubmVhcik7XHJcblxyXG4gICAgICAgICAgICB2YXIgbGlnaHRDYW1lcmEgPSB0aGlzLl9nZXREaXJlY3Rpb25hbExpZ2h0Q2FtZXJhKGxpZ2h0LCBzY2VuZSwgc2NlbmVDYW1lcmEpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGx2cE1hdDRBcnIgPSBsaWdodFZpZXdQcm9qTWF0cml4LmFycmF5O1xyXG4gICAgICAgICAgICBsaWdodFByb2pNYXRyaXguY29weShsaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICAgICAgbWF0NC5pbnZlcnQobGlnaHRWaWV3TWF0cml4LmFycmF5LCBsaWdodENhbWVyYS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgIG1hdDQubXVsdGlwbHkobGlnaHRWaWV3TWF0cml4LmFycmF5LCBsaWdodFZpZXdNYXRyaXguYXJyYXksIHNjZW5lQ2FtZXJhLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgbWF0NC5tdWx0aXBseShsdnBNYXQ0QXJyLCBsaWdodFByb2pNYXRyaXguYXJyYXksIGxpZ2h0Vmlld01hdHJpeC5hcnJheSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgY2xpcFBsYW5lcyA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgaXNQZXJzcGVjdGl2ZSA9IHNjZW5lQ2FtZXJhIGluc3RhbmNlb2YgUGVyc3BlY3RpdmVDYW1lcmE7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2NhbGVaID0gKHNjZW5lQ2FtZXJhLm5lYXIgKyBzY2VuZUNhbWVyYS5mYXIpIC8gKHNjZW5lQ2FtZXJhLm5lYXIgLSBzY2VuZUNhbWVyYS5mYXIpO1xyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0WiA9IDIgKiBzY2VuZUNhbWVyYS5uZWFyICogc2NlbmVDYW1lcmEuZmFyIC8gKHNjZW5lQ2FtZXJhLm5lYXIgLSBzY2VuZUNhbWVyYS5mYXIpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBsaWdodC5zaGFkb3dDYXNjYWRlOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjbG9nID0gY2xpcHBlZE5lYXIgKiBNYXRoLnBvdyhjbGlwcGVkRmFyIC8gY2xpcHBlZE5lYXIsIGkgLyBsaWdodC5zaGFkb3dDYXNjYWRlKTtcclxuICAgICAgICAgICAgICAgIHZhciBjdW5pID0gY2xpcHBlZE5lYXIgKyAoY2xpcHBlZEZhciAtIGNsaXBwZWROZWFyKSAqIGkgLyBsaWdodC5zaGFkb3dDYXNjYWRlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGMgPSBjbG9nICogbGlnaHQuY2FzY2FkZVNwbGl0TG9nRmFjdG9yICsgY3VuaSAqICgxIC0gbGlnaHQuY2FzY2FkZVNwbGl0TG9nRmFjdG9yKTtcclxuICAgICAgICAgICAgICAgIGNsaXBQbGFuZXMucHVzaChjKTtcclxuICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwcy5wdXNoKC0oLWMgKiBzY2FsZVogKyBvZmZzZXRaKSAvIC1jKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX2dldFRleHR1cmUobGlnaHQsIGxpZ2h0LnNoYWRvd0Nhc2NhZGUpO1xyXG4gICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcy5wdXNoKHRleHR1cmUpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHZpZXdwb3J0ID0gcmVuZGVyZXIudmlld3BvcnQ7XHJcblxyXG4gICAgICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmF0dGFjaCh0ZXh0dXJlKTtcclxuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIF9nbC5jbGVhcihfZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IF9nbC5ERVBUSF9CVUZGRVJfQklUKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlnaHQuc2hhZG93Q2FzY2FkZTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHNwbGl0dGVkIGZydXN0dW1cclxuICAgICAgICAgICAgICAgIHZhciBuZWFyUGxhbmUgPSBjbGlwUGxhbmVzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGZhclBsYW5lID0gY2xpcFBsYW5lc1tpICsgMV07XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNQZXJzcGVjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdDQucGVyc3BlY3RpdmUoc3BsaXRQcm9qTWF0cml4LmFycmF5LCBzY2VuZUNhbWVyYS5mb3YgLyAxODAgKiBNYXRoLlBJLCBzY2VuZUNhbWVyYS5hc3BlY3QsIG5lYXJQbGFuZSwgZmFyUGxhbmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0NC5vcnRobyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRQcm9qTWF0cml4LmFycmF5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2VuZUNhbWVyYS5sZWZ0LCBzY2VuZUNhbWVyYS5yaWdodCwgc2NlbmVDYW1lcmEuYm90dG9tLCBzY2VuZUNhbWVyYS50b3AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lYXJQbGFuZSwgZmFyUGxhbmVcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc3BsaXRGcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uKHNwbGl0UHJvak1hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICBzcGxpdEZydXN0dW0uZ2V0VHJhbnNmb3JtZWRCb3VuZGluZ0JveChjcm9wQkJveCwgbGlnaHRWaWV3TWF0cml4KTtcclxuICAgICAgICAgICAgICAgIGNyb3BCQm94LmFwcGx5UHJvamVjdGlvbihsaWdodFByb2pNYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIF9taW4gPSBjcm9wQkJveC5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgICAgICB2YXIgX21heCA9IGNyb3BCQm94Lm1heC5hcnJheTtcclxuICAgICAgICAgICAgICAgIF9taW5bMF0gPSBNYXRoLm1heChfbWluWzBdLCAtMSk7XHJcbiAgICAgICAgICAgICAgICBfbWluWzFdID0gTWF0aC5tYXgoX21pblsxXSwgLTEpO1xyXG4gICAgICAgICAgICAgICAgX21heFswXSA9IE1hdGgubWluKF9tYXhbMF0sIDEpO1xyXG4gICAgICAgICAgICAgICAgX21heFsxXSA9IE1hdGgubWluKF9tYXhbMV0sIDEpO1xyXG4gICAgICAgICAgICAgICAgY3JvcE1hdHJpeC5vcnRobyhfbWluWzBdLCBfbWF4WzBdLCBfbWluWzFdLCBfbWF4WzFdLCAxLCAtMSk7XHJcbiAgICAgICAgICAgICAgICBsaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4Lm11bHRpcGx5TGVmdChjcm9wTWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93U2l6ZSA9IGxpZ2h0LnNoYWRvd1Jlc29sdXRpb24gfHwgNTEyO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFJldmVyc2VkLCBsZWZ0IHRvIHJpZ2h0ID0+IGZhciB0byBuZWFyXHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCgobGlnaHQuc2hhZG93Q2FzY2FkZSAtIGkgLSAxKSAqIHNoYWRvd1NpemUsIDAsIHNoYWRvd1NpemUsIHNoYWRvd1NpemUsIDEpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciByZW5kZXJMaXN0ID0gc2NlbmUudXBkYXRlUmVuZGVyTGlzdChsaWdodENhbWVyYSk7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKHJlbmRlckxpc3Qub3BhcXVlLCBsaWdodENhbWVyYSwgcGFzc0NvbmZpZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gRmlsdGVyIGZvciBWU01cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2F1c3NpYW5GaWx0ZXIocmVuZGVyZXIsIHRleHR1cmUsIHRleHR1cmUud2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgICAgICAgICAgbWF0cml4LmNvcHkobGlnaHRDYW1lcmEudmlld01hdHJpeClcclxuICAgICAgICAgICAgICAgICAgICAubXVsdGlwbHlMZWZ0KGxpZ2h0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlcy5wdXNoKG1hdHJpeC5hcnJheSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5jb3B5KGxpZ2h0UHJvak1hdHJpeCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCh2aWV3cG9ydCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgcmVuZGVyU3BvdExpZ2h0U2hhZG93OiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBsaWdodCwgc3BvdExpZ2h0TWF0cmljZXMsIHNwb3RMaWdodFNoYWRvd01hcHMpIHtcclxuXHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9nZXRUZXh0dXJlKGxpZ2h0KTtcclxuICAgICAgICB2YXIgbGlnaHRDYW1lcmEgPSB0aGlzLl9nZXRTcG90TGlnaHRDYW1lcmEobGlnaHQpO1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUpO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICBfZ2wuY2xlYXIoX2dsLkNPTE9SX0JVRkZFUl9CSVQgfCBfZ2wuREVQVEhfQlVGRkVSX0JJVCk7XHJcblxyXG4gICAgICAgIHZhciBkZWZhdWx0U2hhZG93TWF0ZXJpYWwgPSB0aGlzLl9nZXREZXB0aE1hdGVyaWFsKGxpZ2h0KTtcclxuICAgICAgICB2YXIgcGFzc0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5zaGFkb3dEZXB0aE1hdGVyaWFsIHx8IGRlZmF1bHRTaGFkb3dNYXRlcmlhbDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGlzRGVwdGhNYXRlcmlhbENoYW5nZWQsXHJcbiAgICAgICAgICAgIGdldFVuaWZvcm06IGdldERlcHRoTWF0ZXJpYWxVbmlmb3JtLFxyXG4gICAgICAgICAgICBpZlJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLmNhc3RTaGFkb3c7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNvcnRDb21wYXJlOiBSZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJMaXN0ID0gc2NlbmUudXBkYXRlUmVuZGVyTGlzdChsaWdodENhbWVyYSk7XHJcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhyZW5kZXJMaXN0Lm9wYXF1ZSwgbGlnaHRDYW1lcmEsIHBhc3NDb25maWcpO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAvLyBGaWx0ZXIgZm9yIFZTTVxyXG4gICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2dhdXNzaWFuRmlsdGVyKHJlbmRlcmVyLCB0ZXh0dXJlLCB0ZXh0dXJlLndpZHRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIG1hdHJpeC5jb3B5KGxpZ2h0Q2FtZXJhLndvcmxkVHJhbnNmb3JtKVxyXG4gICAgICAgICAgICAuaW52ZXJ0KClcclxuICAgICAgICAgICAgLm11bHRpcGx5TGVmdChsaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgc3BvdExpZ2h0U2hhZG93TWFwcy5wdXNoKHRleHR1cmUpO1xyXG4gICAgICAgIHNwb3RMaWdodE1hdHJpY2VzLnB1c2gobWF0cml4LmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVuZGVyUG9pbnRMaWdodFNoYWRvdzogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgbGlnaHQsIHBvaW50TGlnaHRTaGFkb3dNYXBzKSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9nZXRUZXh0dXJlKGxpZ2h0KTtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgcG9pbnRMaWdodFNoYWRvd01hcHMucHVzaCh0ZXh0dXJlKTtcclxuXHJcbiAgICAgICAgdmFyIGRlZmF1bHRTaGFkb3dNYXRlcmlhbCA9IHRoaXMuX2dldERlcHRoTWF0ZXJpYWwobGlnaHQpO1xyXG4gICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLnNoYWRvd0RlcHRoTWF0ZXJpYWwgfHwgZGVmYXVsdFNoYWRvd01hdGVyaWFsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnZXRVbmlmb3JtOiBnZXREZXB0aE1hdGVyaWFsVW5pZm9ybSxcclxuICAgICAgICAgICAgc29ydENvbXBhcmU6IFJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIHJlbmRlckxpc3RFYWNoU2lkZSA9IHtcclxuICAgICAgICAgICAgcHg6IFtdLCBweTogW10sIHB6OiBbXSwgbng6IFtdLCBueTogW10sIG56OiBbXVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIGJib3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB2YXIgbGlnaHRXb3JsZFBvc2l0aW9uID0gbGlnaHQuZ2V0V29ybGRQb3NpdGlvbigpLmFycmF5O1xyXG4gICAgICAgIHZhciBsaWdodEJCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB2YXIgcmFuZ2UgPSBsaWdodC5yYW5nZTtcclxuICAgICAgICBsaWdodEJCb3gubWluLnNldEFycmF5KGxpZ2h0V29ybGRQb3NpdGlvbik7XHJcbiAgICAgICAgbGlnaHRCQm94Lm1heC5zZXRBcnJheShsaWdodFdvcmxkUG9zaXRpb24pO1xyXG4gICAgICAgIHZhciBleHRlbnQgPSBuZXcgVmVjdG9yMyhyYW5nZSwgcmFuZ2UsIHJhbmdlKTtcclxuICAgICAgICBsaWdodEJCb3gubWF4LmFkZChleHRlbnQpO1xyXG4gICAgICAgIGxpZ2h0QkJveC5taW4uc3ViKGV4dGVudCk7XHJcblxyXG4gICAgICAgIHZhciB0YXJnZXRzTmVlZFJlbmRlciA9IHsgcHg6IGZhbHNlLCBweTogZmFsc2UsIHB6OiBmYWxzZSwgbng6IGZhbHNlLCBueTogZmFsc2UsIG56OiBmYWxzZSB9O1xyXG4gICAgICAgIHNjZW5lLnRyYXZlcnNlKGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLmlzUmVuZGVyYWJsZSgpICYmIHJlbmRlcmFibGUuY2FzdFNoYWRvdykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gcmVuZGVyYWJsZS5nZW9tZXRyeTtcclxuICAgICAgICAgICAgICAgIGlmICghZ2VvbWV0cnkuYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGlzdEVhY2hTaWRlW3RhcmdldHNbaV1dLnB1c2gocmVuZGVyYWJsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJib3gudHJhbnNmb3JtRnJvbShnZW9tZXRyeS5ib3VuZGluZ0JveCwgcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWJib3guaW50ZXJzZWN0Qm91bmRpbmdCb3gobGlnaHRCQm94KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBiYm94LnVwZGF0ZVZlcnRpY2VzKCk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRzTmVlZFJlbmRlclt0YXJnZXRzW2ldXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdnR4ID0gYmJveC52ZXJ0aWNlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IHZ0eFswXSAtIGxpZ2h0V29ybGRQb3NpdGlvblswXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IHZ0eFsxXSAtIGxpZ2h0V29ybGRQb3NpdGlvblsxXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeiA9IHZ0eFsyXSAtIGxpZ2h0V29ybGRQb3NpdGlvblsyXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYWJzeCA9IE1hdGguYWJzKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhYnN5ID0gTWF0aC5hYnMoeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFic3ogPSBNYXRoLmFicyh6KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWJzeCA+IGFic3kpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFic3ggPiBhYnN6KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzTmVlZFJlbmRlclt4ID4gMCA/ICdweCcgOiAnbngnXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzTmVlZFJlbmRlclt6ID4gMCA/ICdweicgOiAnbnonXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYnN5ID4gYWJzeikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c05lZWRSZW5kZXJbeSA+IDAgPyAncHknIDogJ255J10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c05lZWRSZW5kZXJbeiA+IDAgPyAncHonIDogJ256J10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YXJnZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldHNOZWVkUmVuZGVyW3RhcmdldHNbaV1dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxpc3RFYWNoU2lkZVt0YXJnZXRzW2ldXS5wdXNoKHJlbmRlcmFibGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGFyZ2V0c1tpXTtcclxuICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuX2dldFBvaW50TGlnaHRDYW1lcmEobGlnaHQsIHRhcmdldCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5hdHRhY2godGV4dHVyZSwgX2dsLkNPTE9SX0FUVEFDSE1FTlQwLCBfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICBfZ2wuY2xlYXIoX2dsLkNPTE9SX0JVRkZFUl9CSVQgfCBfZ2wuREVQVEhfQlVGRkVSX0JJVCk7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKHJlbmRlckxpc3RFYWNoU2lkZVt0YXJnZXRdLCBjYW1lcmEsIHBhc3NDb25maWcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2dldERlcHRoTWF0ZXJpYWw6IGZ1bmN0aW9uIChsaWdodCkge1xyXG4gICAgICAgIHZhciBzaGFkb3dNYXRlcmlhbCA9IHRoaXMuX2xpZ2h0TWF0ZXJpYWxzW2xpZ2h0Ll9fdWlkX19dO1xyXG4gICAgICAgIHZhciBpc1BvaW50TGlnaHQgPSBsaWdodC50eXBlID09PSAnUE9JTlRfTElHSFQnO1xyXG4gICAgICAgIGlmICghc2hhZG93TWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgdmFyIHNoYWRlclByZWZpeCA9IGlzUG9pbnRMaWdodCA/ICdjbGF5LnNtLmRpc3RhbmNlLicgOiAnY2xheS5zbS5kZXB0aC4nO1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IHRoaXMucHJlY2lzaW9uLFxyXG4gICAgICAgICAgICAgICAgc2hhZGVyOiBuZXcgU2hhZGVyKFNoYWRlci5zb3VyY2Uoc2hhZGVyUHJlZml4ICsgJ3ZlcnRleCcpLCBTaGFkZXIuc291cmNlKHNoYWRlclByZWZpeCArICdmcmFnbWVudCcpKVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2xpZ2h0TWF0ZXJpYWxzW2xpZ2h0Ll9fdWlkX19dID0gc2hhZG93TWF0ZXJpYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsaWdodC5zaGFkb3dTbG9wZVNjYWxlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwuc2V0VW5pZm9ybSgnc2xvcGVTY2FsZScsIGxpZ2h0LnNoYWRvd1Nsb3BlU2NhbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGlnaHQuc2hhZG93QmlhcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHNoYWRvd01hdGVyaWFsLnNldFVuaWZvcm0oJ2JpYXMnLCBsaWdodC5zaGFkb3dCaWFzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc29mdFNoYWRvdyA9PT0gU2hhZG93TWFwUGFzcy5WU00pIHtcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfVlNNJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzUG9pbnRMaWdodCkge1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbC5zZXQoJ2xpZ2h0UG9zaXRpb24nLCBsaWdodC5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXkpO1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbC5zZXQoJ3JhbmdlJywgbGlnaHQucmFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHNoYWRvd01hdGVyaWFsO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZ2F1c3NpYW5GaWx0ZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgdGV4dHVyZSwgc2l6ZSkge1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXIgPSB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBzaXplLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IHNpemUsXHJcbiAgICAgICAgICAgIHR5cGU6IFRleHR1cmUuRkxPQVRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciB0bXBUZXh0dXJlID0gdGhpcy5fdGV4dHVyZVBvb2wuZ2V0KHBhcmFtZXRlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmF0dGFjaCh0bXBUZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NILnNldFVuaWZvcm0oJ3RleHR1cmUnLCB0ZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NILnNldFVuaWZvcm0oJ3RleHR1cmVXaWR0aCcsIHNpemUpO1xyXG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc0gucmVuZGVyKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUpO1xyXG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc1Yuc2V0VW5pZm9ybSgndGV4dHVyZScsIHRtcFRleHR1cmUpO1xyXG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc1Yuc2V0VW5pZm9ybSgndGV4dHVyZUhlaWdodCcsIHNpemUpO1xyXG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc1YucmVuZGVyKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl90ZXh0dXJlUG9vbC5wdXQodG1wVGV4dHVyZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXRUZXh0dXJlOiBmdW5jdGlvbiAobGlnaHQsIGNhc2NhZGUpIHtcclxuICAgICAgICB2YXIga2V5ID0gbGlnaHQuX191aWRfXztcclxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW2tleV07XHJcbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBsaWdodC5zaGFkb3dSZXNvbHV0aW9uIHx8IDUxMjtcclxuICAgICAgICBjYXNjYWRlID0gY2FzY2FkZSB8fCAxO1xyXG4gICAgICAgIGlmICghdGV4dHVyZSkge1xyXG4gICAgICAgICAgICBpZiAobGlnaHQudHlwZSA9PT0gJ1BPSU5UX0xJR0hUJykge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlQ3ViZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBBdCBtb3N0IDQgY2FzY2FkZVxyXG4gICAgICAgICAgICAvLyBUT0RPIHNoYXJlIHdpdGggaGVpZ2h0ID9cclxuICAgICAgICAgICAgdGV4dHVyZS53aWR0aCA9IHJlc29sdXRpb24gKiBjYXNjYWRlO1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmhlaWdodCA9IHJlc29sdXRpb247XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnR5cGUgPSBUZXh0dXJlLkZMT0FUO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5hbmlzb3Ryb3BpYyA9IDQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLm1pbkZpbHRlciA9IGdsZW51bS5ORUFSRVNUO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5tYWdGaWx0ZXIgPSBnbGVudW0uTkVBUkVTVDtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUudXNlTWlwbWFwID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXNba2V5XSA9IHRleHR1cmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgX2dldFBvaW50TGlnaHRDYW1lcmE6IGZ1bmN0aW9uIChsaWdodCwgdGFyZ2V0KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9saWdodENhbWVyYXMucG9pbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5fbGlnaHRDYW1lcmFzLnBvaW50ID0ge1xyXG4gICAgICAgICAgICAgICAgcHg6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxyXG4gICAgICAgICAgICAgICAgbng6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxyXG4gICAgICAgICAgICAgICAgcHk6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxyXG4gICAgICAgICAgICAgICAgbnk6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxyXG4gICAgICAgICAgICAgICAgcHo6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxyXG4gICAgICAgICAgICAgICAgbno6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLl9saWdodENhbWVyYXMucG9pbnRbdGFyZ2V0XTtcclxuXHJcbiAgICAgICAgY2FtZXJhLmZhciA9IGxpZ2h0LnJhbmdlO1xyXG4gICAgICAgIGNhbWVyYS5mb3YgPSA5MDtcclxuICAgICAgICBjYW1lcmEucG9zaXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgICAgIHN3aXRjaCAodGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3B4JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9YLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ254JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9YLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3B5JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9ZLCBWZWN0b3IzLlBPU0lUSVZFX1opO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ255JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9ZLCBWZWN0b3IzLk5FR0FUSVZFX1opO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3B6JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9aLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ256JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9aLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpZ2h0LmdldFdvcmxkUG9zaXRpb24oY2FtZXJhLnBvc2l0aW9uKTtcclxuICAgICAgICBjYW1lcmEudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBjYW1lcmE7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXREaXJlY3Rpb25hbExpZ2h0Q2FtZXJhOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsaWdodFZpZXdNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBzY2VuZVZpZXdCb3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHZhciBsaWdodFZpZXdCQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgLy8gQ2FtZXJhIG9mIGRpcmVjdGlvbmFsIGxpZ2h0IHdpbGwgYmUgYWRqdXN0ZWRcclxuICAgICAgICAvLyB0byBjb250YWluIHRoZSB2aWV3IGZydXN0dW0gYW5kIHNjZW5lIGJvdW5kaW5nIGJveCBhcyB0aWdodGx5IGFzIHBvc3NpYmxlXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChsaWdodCwgc2NlbmUsIHNjZW5lQ2FtZXJhKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fbGlnaHRDYW1lcmFzLmRpcmVjdGlvbmFsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9saWdodENhbWVyYXMuZGlyZWN0aW9uYWwgPSBuZXcgT3J0aG9DYW1lcmEoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fbGlnaHRDYW1lcmFzLmRpcmVjdGlvbmFsO1xyXG5cclxuICAgICAgICAgICAgc2NlbmVWaWV3Qm91bmRpbmdCb3guY29weShzY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUpO1xyXG4gICAgICAgICAgICBzY2VuZVZpZXdCb3VuZGluZ0JveC5pbnRlcnNlY3Rpb24oc2NlbmVDYW1lcmEuZnJ1c3R1bS5ib3VuZGluZ0JveCk7XHJcbiAgICAgICAgICAgIC8vIE1vdmUgdG8gdGhlIGNlbnRlciBvZiBmcnVzdHVtKGluIHdvcmxkIHNwYWNlKVxyXG4gICAgICAgICAgICBjYW1lcmEucG9zaXRpb25cclxuICAgICAgICAgICAgICAgIC5jb3B5KHNjZW5lVmlld0JvdW5kaW5nQm94Lm1pbilcclxuICAgICAgICAgICAgICAgIC5hZGQoc2NlbmVWaWV3Qm91bmRpbmdCb3gubWF4KVxyXG4gICAgICAgICAgICAgICAgLnNjYWxlKDAuNSlcclxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm1NYXQ0KHNjZW5lQ2FtZXJhLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgY2FtZXJhLnJvdGF0aW9uLmNvcHkobGlnaHQucm90YXRpb24pO1xyXG4gICAgICAgICAgICBjYW1lcmEuc2NhbGUuY29weShsaWdodC5zY2FsZSk7XHJcbiAgICAgICAgICAgIGNhbWVyYS51cGRhdGVXb3JsZFRyYW5zZm9ybSgpO1xyXG5cclxuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHRvIGxpZ2h0IHZpZXcgc3BhY2VcclxuICAgICAgICAgICAgTWF0cml4NC5pbnZlcnQobGlnaHRWaWV3TWF0cml4LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KGxpZ2h0Vmlld01hdHJpeCwgbGlnaHRWaWV3TWF0cml4LCBzY2VuZUNhbWVyYS53b3JsZFRyYW5zZm9ybSk7XHJcblxyXG4gICAgICAgICAgICBsaWdodFZpZXdCQm94LmNvcHkoc2NlbmVWaWV3Qm91bmRpbmdCb3gpLmFwcGx5VHJhbnNmb3JtKGxpZ2h0Vmlld01hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgbWluID0gbGlnaHRWaWV3QkJveC5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXggPSBsaWdodFZpZXdCQm94Lm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgICAgIC8vIE1vdmUgY2FtZXJhIHRvIGFkanVzdCB0aGUgbmVhciB0byAwXHJcbiAgICAgICAgICAgIGNhbWVyYS5wb3NpdGlvbi5zZXQoKG1pblswXSArIG1heFswXSkgLyAyLCAobWluWzFdICsgbWF4WzFdKSAvIDIsIG1heFsyXSlcclxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm1NYXQ0KGNhbWVyYS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIGNhbWVyYS5uZWFyID0gMDtcclxuICAgICAgICAgICAgY2FtZXJhLmZhciA9IC1taW5bMl0gKyBtYXhbMl07XHJcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSByZWNlaXZlcnMgbm90IGluIHRoZSBmcnVzdHVtIHdpbGwgc3RpbCByZWNlaXZlIHRoZSBzaGFkb3cuXHJcbiAgICAgICAgICAgIGlmIChpc05hTih0aGlzLmxpZ2h0RnJ1c3R1bUJpYXMpKSB7XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEuZmFyICo9IDQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEuZmFyICs9IHRoaXMubGlnaHRGcnVzdHVtQmlhcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYW1lcmEubGVmdCA9IG1pblswXTtcclxuICAgICAgICAgICAgY2FtZXJhLnJpZ2h0ID0gbWF4WzBdO1xyXG4gICAgICAgICAgICBjYW1lcmEudG9wID0gbWF4WzFdO1xyXG4gICAgICAgICAgICBjYW1lcmEuYm90dG9tID0gbWluWzFdO1xyXG4gICAgICAgICAgICBjYW1lcmEudXBkYXRlKHRydWUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGNhbWVyYTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICBfZ2V0U3BvdExpZ2h0Q2FtZXJhOiBmdW5jdGlvbiAobGlnaHQpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2xpZ2h0Q2FtZXJhcy5zcG90KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpZ2h0Q2FtZXJhcy5zcG90ID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLl9saWdodENhbWVyYXMuc3BvdDtcclxuICAgICAgICAvLyBVcGRhdGUgcHJvcGVydGllc1xyXG4gICAgICAgIGNhbWVyYS5mb3YgPSBsaWdodC5wZW51bWJyYUFuZ2xlICogMjtcclxuICAgICAgICBjYW1lcmEuZmFyID0gbGlnaHQucmFuZ2U7XHJcbiAgICAgICAgY2FtZXJhLndvcmxkVHJhbnNmb3JtLmNvcHkobGlnaHQud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgIGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgbWF0NC5pbnZlcnQoY2FtZXJhLnZpZXdNYXRyaXguYXJyYXksIGNhbWVyYS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjYW1lcmE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcnxXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFtyZW5kZXJlcl1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuU2hhZG93TWFwLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICAvLyBQRU5ESU5HIFJlbmRlcmVyIG9yIFdlYkdMUmVuZGVyaW5nQ29udGV4dFxyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsIHx8IHJlbmRlcmVyO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuZGlzcG9zZShfZ2wpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl90ZXh0dXJlcykge1xyXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlc1tuYW1lXS5kaXNwb3NlKF9nbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90ZXh0dXJlUG9vbC5jbGVhcihyZW5kZXJlci5nbCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2RlcHRoTWF0ZXJpYWxzID0ge307XHJcbiAgICAgICAgdGhpcy5fZGlzdGFuY2VNYXRlcmlhbHMgPSB7fTtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0Q2FtZXJhcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX3NoYWRvd01hcE51bWJlciA9IHtcclxuICAgICAgICAgICAgJ1BPSU5UX0xJR0hUJzogMCxcclxuICAgICAgICAgICAgJ0RJUkVDVElPTkFMX0xJR0hUJzogMCxcclxuICAgICAgICAgICAgJ1NQT1RfTElHSFQnOiAwXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLl9tZXNoTWF0ZXJpYWxzID0ge307XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcmVjZWl2ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fcmVjZWl2ZXJzW2ldO1xyXG4gICAgICAgICAgICAvLyBNZXNoIG1heSBiZSBkaXNwb3NlZFxyXG4gICAgICAgICAgICBpZiAobWVzaC5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdQT0lOVF9MSUdIVF9TSEFET1dfQ09VTlQnKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dfQ09VTlQnKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdBTUJJRU5UX0xJR0hUX1NIQURPV19DT1VOVCcpO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdzaGFkb3dFbmFibGVkJywgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3JlY2VpdmVycyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cgPSBbXTtcclxuICAgIH1cclxufSk7XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5WU01cclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblNoYWRvd01hcFBhc3MuVlNNID0gMTtcclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LnByZVBhc3MuU2hhZG93TWFwLlBDRlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuU2hhZG93TWFwUGFzcy5QQ0YgPSAyO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2hhZG93TWFwUGFzcztcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFJheSBmcm9tICcuLi9tYXRoL1JheSc7XHJcbmltcG9ydCBWZWN0b3IyIGZyb20gJy4uL21hdGgvVmVjdG9yMic7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4uL21hdGgvTWF0cml4NCc7XHJcbmltcG9ydCBSZW5kZXJhYmxlIGZyb20gJy4uL1JlbmRlcmFibGUnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGlja2luZy5SYXlQaWNraW5nXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgUmF5UGlja2luZyA9IEJhc2UuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5waWNraW5nLlJheVBpY2tpbmcjICove1xyXG4gICAgLyoqXHJcbiAgICAgKiBUYXJnZXQgc2NlbmVcclxuICAgICAqIEB0eXBlIHtjbGF5LlNjZW5lfVxyXG4gICAgICovXHJcbiAgICBzY2VuZTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogVGFyZ2V0IGNhbWVyYVxyXG4gICAgICogQHR5cGUge2NsYXkuQ2FtZXJhfVxyXG4gICAgICovXHJcbiAgICBjYW1lcmE6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFRhcmdldCByZW5kZXJlclxyXG4gICAgICogQHR5cGUge2NsYXkuUmVuZGVyZXJ9XHJcbiAgICAgKi9cclxuICAgIHJlbmRlcmVyOiBudWxsXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX3JheSA9IG5ldyBSYXkoKTtcclxuICAgIHRoaXMuX25kYyA9IG5ldyBWZWN0b3IyKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5waWNraW5nLlJheVBpY2tpbmcucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpY2sgdGhlIG5lYXJlc3QgaW50ZXJzZWN0aW9uIG9iamVjdCBpbiB0aGUgc2NlbmVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0geCBNb3VzZSBwb3NpdGlvbiB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHkgTW91c2UgcG9zaXRpb24geVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW2ZvcmNlUGlja0FsbD1mYWxzZV0gaWdub3JlIGlnbm9yZVBpY2tpbmdcclxuICAgICAqIEByZXR1cm4ge2NsYXkucGlja2luZy5SYXlQaWNraW5nfkludGVyc2VjdGlvbn1cclxuICAgICAqL1xyXG4gICAgcGljazogZnVuY3Rpb24gKHgsIHksIGZvcmNlUGlja0FsbCkge1xyXG4gICAgICAgIHZhciBvdXQgPSB0aGlzLnBpY2tBbGwoeCwgeSwgW10sIGZvcmNlUGlja0FsbCk7XHJcbiAgICAgICAgcmV0dXJuIG91dFswXSB8fCBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpY2sgYWxsIGludGVyc2VjdGlvbiBvYmplY3RzLCB3aWNoIHdpbGwgYmUgc29ydGVkIGZyb20gbmVhciB0byBmYXJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0geCBNb3VzZSBwb3NpdGlvbiB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHkgTW91c2UgcG9zaXRpb24geVxyXG4gICAgICogQHBhcmFtICB7QXJyYXl9IFtvdXRwdXRdXHJcbiAgICAgKiBAcGFyYW0gIHtib29sZWFufSBbZm9yY2VQaWNrQWxsPWZhbHNlXSBpZ25vcmUgaWdub3JlUGlja2luZ1xyXG4gICAgICogQHJldHVybiB7QXJyYXkuPGNsYXkucGlja2luZy5SYXlQaWNraW5nfkludGVyc2VjdGlvbj59XHJcbiAgICAgKi9cclxuICAgIHBpY2tBbGw6IGZ1bmN0aW9uICh4LCB5LCBvdXRwdXQsIGZvcmNlUGlja0FsbCkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2NyZWVuVG9OREMoeCwgeSwgdGhpcy5fbmRjKTtcclxuICAgICAgICB0aGlzLmNhbWVyYS5jYXN0UmF5KHRoaXMuX25kYywgdGhpcy5fcmF5KTtcclxuXHJcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0IHx8IFtdO1xyXG5cclxuICAgICAgICB0aGlzLl9pbnRlcnNlY3ROb2RlKHRoaXMuc2NlbmUsIG91dHB1dCwgZm9yY2VQaWNrQWxsIHx8IGZhbHNlKTtcclxuXHJcbiAgICAgICAgb3V0cHV0LnNvcnQodGhpcy5faW50ZXJzZWN0aW9uQ29tcGFyZUZ1bmMpO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfSxcclxuXHJcbiAgICBfaW50ZXJzZWN0Tm9kZTogZnVuY3Rpb24gKG5vZGUsIG91dCwgZm9yY2VQaWNrQWxsKSB7XHJcbiAgICAgICAgaWYgKChub2RlIGluc3RhbmNlb2YgUmVuZGVyYWJsZSkgJiYgbm9kZS5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICBpZiAoKCFub2RlLmlnbm9yZVBpY2tpbmcgfHwgZm9yY2VQaWNrQWxsKVxyXG4gICAgICAgICAgICAgICAgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdHJpYW5nbGUgbWVzaCBzdXBwb3J0IHJheSBwaWNraW5nXHJcbiAgICAgICAgICAgICAgICAgICAgKG5vZGUubW9kZSA9PT0gZ2xlbnVtLlRSSUFOR0xFUyAmJiBub2RlLmdlb21ldHJ5LmlzVXNlSW5kaWNlcygpKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9yIGlmIGdlb21ldHJ5IGhhcyBpdCdzIG93biBwaWNrQnlSYXksIHBpY2ssIGltcGxlbWVudGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgbm9kZS5nZW9tZXRyeS5waWNrQnlSYXlcclxuICAgICAgICAgICAgICAgICAgICB8fCBub2RlLmdlb21ldHJ5LnBpY2tcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcnNlY3RSZW5kZXJhYmxlKG5vZGUsIG91dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLl9jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9pbnRlcnNlY3ROb2RlKG5vZGUuX2NoaWxkcmVuW2ldLCBvdXQsIGZvcmNlUGlja0FsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfaW50ZXJzZWN0UmVuZGVyYWJsZTogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB2YXIgdjIgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIHZhciB2MyA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgdmFyIHJheSA9IG5ldyBSYXkoKTtcclxuICAgICAgICB2YXIgd29ybGRJbnZlcnNlID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBvdXQpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBpc1NraW5uZWRNZXNoID0gcmVuZGVyYWJsZS5pc1NraW5uZWRNZXNoKCk7XHJcbiAgICAgICAgICAgIHJheS5jb3B5KHRoaXMuX3JheSk7XHJcbiAgICAgICAgICAgIE1hdHJpeDQuaW52ZXJ0KHdvcmxkSW52ZXJzZSwgcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybSk7XHJcblxyXG4gICAgICAgICAgICAvLyBTa2lubmVkIG1lc2ggd2lsbCBpZ25vcmUgdGhlIHdvcmxkIHRyYW5zZm9ybS5cclxuICAgICAgICAgICAgaWYgKCFpc1NraW5uZWRNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICByYXkuYXBwbHlUcmFuc2Zvcm0od29ybGRJbnZlcnNlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gcmVuZGVyYWJsZS5nZW9tZXRyeTtcclxuXHJcbiAgICAgICAgICAgIHZhciBiYm94ID0gaXNTa2lubmVkTWVzaCA/IHJlbmRlcmFibGUuc2tlbGV0b24uYm91bmRpbmdCb3ggOiBnZW9tZXRyeS5ib3VuZGluZ0JveDtcclxuXHJcbiAgICAgICAgICAgIGlmIChiYm94ICYmICFyYXkuaW50ZXJzZWN0Qm91bmRpbmdCb3goYmJveCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBVc2UgdXNlciBkZWZpbmVkIHBpY2tpbmcgYWxnb3JpdGhtXHJcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeS5waWNrKSB7XHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5waWNrKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25kYy54LCB0aGlzLl9uZGMueSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGUsIG91dFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBVc2UgdXNlciBkZWZpbmVkIHJheSBwaWNraW5nIGFsZ29yaXRobVxyXG4gICAgICAgICAgICBlbHNlIGlmIChnZW9tZXRyeS5waWNrQnlSYXkpIHtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LnBpY2tCeVJheShyYXksIHJlbmRlcmFibGUsIG91dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBjdWxsQmFjayA9IChyZW5kZXJhYmxlLmN1bGxGYWNlID09PSBnbGVudW0uQkFDSyAmJiByZW5kZXJhYmxlLmZyb250RmFjZSA9PT0gZ2xlbnVtLkNDVylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHJlbmRlcmFibGUuY3VsbEZhY2UgPT09IGdsZW51bS5GUk9OVCAmJiByZW5kZXJhYmxlLmZyb250RmFjZSA9PT0gZ2xlbnVtLkNXKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwb2ludDtcclxuICAgICAgICAgICAgdmFyIGluZGljZXMgPSBnZW9tZXRyeS5pbmRpY2VzO1xyXG4gICAgICAgICAgICB2YXIgcG9zaXRpb25BdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcclxuICAgICAgICAgICAgdmFyIHdlaWdodEF0dHIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLndlaWdodDtcclxuICAgICAgICAgICAgdmFyIGpvaW50QXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMuam9pbnQ7XHJcbiAgICAgICAgICAgIHZhciBza2luTWF0cmljZXNBcnJheTtcclxuICAgICAgICAgICAgdmFyIHNraW5NYXRyaWNlcyA9IFtdO1xyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB2YWxpZC5cclxuICAgICAgICAgICAgaWYgKCFwb3NpdGlvbkF0dHIgfHwgIXBvc2l0aW9uQXR0ci52YWx1ZSB8fCAhaW5kaWNlcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc1NraW5uZWRNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICBza2luTWF0cmljZXNBcnJheSA9IHJlbmRlcmFibGUuc2tlbGV0b24uZ2V0U3ViU2tpbk1hdHJpY2VzKHJlbmRlcmFibGUuX191aWRfXywgcmVuZGVyYWJsZS5qb2ludHMpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZW5kZXJhYmxlLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNraW5NYXRyaWNlc1tpXSA9IHNraW5NYXRyaWNlc1tpXSB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDE2OyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpbk1hdHJpY2VzW2ldW2tdID0gc2tpbk1hdHJpY2VzQXJyYXlbaSAqIDE2ICsga107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHBvcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHdlaWdodCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50ID0gW107XHJcbiAgICAgICAgICAgICAgICB2YXIgc2tpbm5lZFBvcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRtcCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNraW5uZWRQb3NpdGlvbkF0dHIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5uZWRQb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgIGlmICghc2tpbm5lZFBvc2l0aW9uQXR0ciB8fCAhc2tpbm5lZFBvc2l0aW9uQXR0ci52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmNyZWF0ZUF0dHJpYnV0ZSgnc2tpbm5lZFBvc2l0aW9uJywgJ2YnLCAzKTtcclxuICAgICAgICAgICAgICAgICAgICBza2lubmVkUG9zaXRpb25BdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5za2lubmVkUG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgc2tpbm5lZFBvc2l0aW9uQXR0ci5pbml0KGdlb21ldHJ5LnZlcnRleENvdW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvbWV0cnkudmVydGV4Q291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uQXR0ci5nZXQoaSwgcG9zKTtcclxuICAgICAgICAgICAgICAgICAgICB3ZWlnaHRBdHRyLmdldChpLCB3ZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGpvaW50QXR0ci5nZXQoaSwgam9pbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdlaWdodFszXSA9IDEgLSB3ZWlnaHRbMF0gLSB3ZWlnaHRbMV0gLSB3ZWlnaHRbMl07XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5zZXQoc2tpbm5lZFBvcywgMCwgMCwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCA0OyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpvaW50W2tdID49IDAgJiYgd2VpZ2h0W2tdID4gMWUtNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMy50cmFuc2Zvcm1NYXQ0KHRtcCwgcG9zLCBza2luTWF0cmljZXNbam9pbnRba11dKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQoc2tpbm5lZFBvcywgc2tpbm5lZFBvcywgdG1wLCB3ZWlnaHRba10pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNraW5uZWRQb3NpdGlvbkF0dHIuc2V0KGksIHNraW5uZWRQb3MpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpICs9IDMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpMSA9IGluZGljZXNbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgaTIgPSBpbmRpY2VzW2kgKyAxXTtcclxuICAgICAgICAgICAgICAgIHZhciBpMyA9IGluZGljZXNbaSArIDJdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsUG9zQXR0ciA9IGlzU2tpbm5lZE1lc2hcclxuICAgICAgICAgICAgICAgICAgICA/IGdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbm5lZFBvc2l0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgOiBwb3NpdGlvbkF0dHI7XHJcbiAgICAgICAgICAgICAgICBmaW5hbFBvc0F0dHIuZ2V0KGkxLCB2MS5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICBmaW5hbFBvc0F0dHIuZ2V0KGkyLCB2Mi5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICBmaW5hbFBvc0F0dHIuZ2V0KGkzLCB2My5hcnJheSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGN1bGxCYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnQgPSByYXkuaW50ZXJzZWN0VHJpYW5nbGUodjEsIHYyLCB2MywgcmVuZGVyYWJsZS5jdWxsaW5nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50ID0gcmF5LmludGVyc2VjdFRyaWFuZ2xlKHYxLCB2MywgdjIsIHJlbmRlcmFibGUuY3VsbGluZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9pbnRXID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yMy50cmFuc2Zvcm1NYXQ0KHBvaW50VywgcG9pbnQsIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBwb2ludCBtYXliZSBub3QgcmlnaHQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjMuY29weShwb2ludFcsIHBvaW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0LnB1c2gobmV3IFJheVBpY2tpbmcuSW50ZXJzZWN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludCwgcG9pbnRXLCByZW5kZXJhYmxlLCBbaTEsIGkyLCBpM10sIGkgLyAzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3IzLmRpc3QocG9pbnRXLCB0aGlzLl9yYXkub3JpZ2luKVxyXG4gICAgICAgICAgICAgICAgICAgICkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgX2ludGVyc2VjdGlvbkNvbXBhcmVGdW5jOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgIHJldHVybiBhLmRpc3RhbmNlIC0gYi5kaXN0YW5jZTtcclxuICAgIH1cclxufSk7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGlja2luZy5SYXlQaWNraW5nfkludGVyc2VjdGlvblxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gcG9pbnRcclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHBvaW50V29ybGRcclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IHRhcmdldFxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB0cmlhbmdsZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gdHJpYW5nbGVJbmRleFxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2VcclxuICovXHJcblJheVBpY2tpbmcuSW50ZXJzZWN0aW9uID0gZnVuY3Rpb24gKHBvaW50LCBwb2ludFdvcmxkLCB0YXJnZXQsIHRyaWFuZ2xlLCB0cmlhbmdsZUluZGV4LCBkaXN0YW5jZSkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcnNlY3Rpb24gcG9pbnQgaW4gbG9jYWwgdHJhbnNmb3JtIGNvb3JkaW5hdGVzXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnBvaW50ID0gcG9pbnQ7XHJcbiAgICAvKipcclxuICAgICAqIEludGVyc2VjdGlvbiBwb2ludCBpbiB3b3JsZCB0cmFuc2Zvcm0gY29vcmRpbmF0ZXNcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucG9pbnRXb3JsZCA9IHBvaW50V29ybGQ7XHJcbiAgICAvKipcclxuICAgICAqIEludGVyc2VjdGlvbiBzY2VuZSBub2RlXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJzZWN0aW9uIHRyaWFuZ2xlLCB3aGljaCBpcyBhbiBhcnJheSBvZiB2ZXJ0ZXggaW5kZXhcclxuICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgdGhpcy50cmlhbmdsZSA9IHRyaWFuZ2xlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRleCBvZiBpbnRlcnNlY3Rpb24gdHJpYW5nbGUuXHJcbiAgICAgKi9cclxuICAgIHRoaXMudHJpYW5nbGVJbmRleCA9IHRyaWFuZ2xlSW5kZXg7XHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGZyb20gaW50ZXJzZWN0aW9uIHBvaW50IHRvIHJheSBvcmlnaW5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZGlzdGFuY2UgPSBkaXN0YW5jZTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJheVBpY2tpbmc7XHJcbiIsIi8vIFNwaGVyaWNhbCBIYXJtb25pYyBIZWxwZXJzXHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBQYXNzIGZyb20gJy4uL2NvbXBvc2l0b3IvUGFzcyc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgU2t5Ym94IGZyb20gJy4uL3BsdWdpbi9Ta3lib3gnO1xyXG5pbXBvcnQgU2t5ZG9tZSBmcm9tICcuLi9wbHVnaW4vU2t5ZG9tZSc7XHJcbmltcG9ydCBFbnZpcm9ubWVudE1hcFBhc3MgZnJvbSAnLi4vcHJlUGFzcy9FbnZpcm9ubWVudE1hcCc7XHJcbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG52YXIgc2ggPSB7fTtcclxuXHJcbmltcG9ydCBwcm9qZWN0RW52TWFwU2hhZGVyQ29kZSBmcm9tICcuL3NoYWRlci9wcm9qZWN0RW52TWFwLmdsc2wuanMnO1xyXG5cclxudmFyIHRhcmdldHMgPSBbJ3B4JywgJ254JywgJ3B5JywgJ255JywgJ3B6JywgJ256J107XHJcblxyXG4vLyBQcm9qZWN0IG9uIGdwdSwgYnV0IG5lZWRzIGJyb3dzZXIgdG8gc3VwcG9ydCByZWFkUGl4ZWxzIGFzIEZsb2F0MzJBcnJheS5cclxuZnVuY3Rpb24gcHJvamVjdEVudmlyb25tZW50TWFwR1BVKHJlbmRlcmVyLCBlbnZNYXApIHtcclxuICAgIHZhciBzaFRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICB3aWR0aDogOSxcclxuICAgICAgICBoZWlnaHQ6IDEsXHJcbiAgICAgICAgdHlwZTogVGV4dHVyZS5GTE9BVFxyXG4gICAgfSk7XHJcbiAgICB2YXIgcGFzcyA9IG5ldyBQYXNzKHtcclxuICAgICAgICBmcmFnbWVudDogcHJvamVjdEVudk1hcFNoYWRlckNvZGVcclxuICAgIH0pO1xyXG4gICAgcGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1RFWFRVUkVfU0laRScsIGVudk1hcC53aWR0aCk7XHJcbiAgICBwYXNzLnNldFVuaWZvcm0oJ2Vudmlyb25tZW50TWFwJywgZW52TWFwKTtcclxuXHJcbiAgICB2YXIgZnJhbWVidWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcclxuICAgIGZyYW1lYnVmZmVyLmF0dGFjaChzaFRleHR1cmUpO1xyXG4gICAgcGFzcy5yZW5kZXIocmVuZGVyZXIsIGZyYW1lYnVmZmVyKTtcclxuXHJcbiAgICBmcmFtZWJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgIC8vIFRPRE8gT25seSBjaHJvbWUgYW5kIGZpcmVmb3ggc3VwcG9ydCBGbG9hdDMyQXJyYXlcclxuICAgIHZhciBwaXhlbHMgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSg5ICogNCk7XHJcbiAgICByZW5kZXJlci5nbC5yZWFkUGl4ZWxzKDAsIDAsIDksIDEsIFRleHR1cmUuUkdCQSwgVGV4dHVyZS5GTE9BVCwgcGl4ZWxzKTtcclxuXHJcbiAgICB2YXIgY29lZmYgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSg5ICogMyk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDk7IGkrKykge1xyXG4gICAgICAgIGNvZWZmW2kgKiAzXSA9IHBpeGVsc1tpICogNF07XHJcbiAgICAgICAgY29lZmZbaSAqIDMgKyAxXSA9IHBpeGVsc1tpICogNCArIDFdO1xyXG4gICAgICAgIGNvZWZmW2kgKiAzICsgMl0gPSBwaXhlbHNbaSAqIDQgKyAyXTtcclxuICAgIH1cclxuICAgIGZyYW1lYnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgZnJhbWVidWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICBwYXNzLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgcmV0dXJuIGNvZWZmO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYXJtb25pY3Mobm9ybWFsLCBpbmRleCl7XHJcbiAgICB2YXIgeCA9IG5vcm1hbFswXTtcclxuICAgIHZhciB5ID0gbm9ybWFsWzFdO1xyXG4gICAgdmFyIHogPSBub3JtYWxbMl07XHJcblxyXG4gICAgaWYgKGluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIDEuMDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGluZGV4ID09PSAxKSB7XHJcbiAgICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmRleCA9PT0gMikge1xyXG4gICAgICAgIHJldHVybiB5O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaW5kZXggPT09IDMpIHtcclxuICAgICAgICByZXR1cm4gejtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGluZGV4ID09PSA0KSB7XHJcbiAgICAgICAgcmV0dXJuIHggKiB6O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaW5kZXggPT09IDUpIHtcclxuICAgICAgICByZXR1cm4geSAqIHo7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmRleCA9PT0gNikge1xyXG4gICAgICAgIHJldHVybiB4ICogeTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGluZGV4ID09PSA3KSB7XHJcbiAgICAgICAgcmV0dXJuIDMuMCAqIHogKiB6IC0gMS4wO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHggKiB4IC0geSAqIHk7XHJcbiAgICB9XHJcbn1cclxuXHJcbnZhciBub3JtYWxUcmFuc2Zvcm0gPSB7XHJcbiAgICBweDogWzIsIDEsIDAsIC0xLCAtMSwgMV0sXHJcbiAgICBueDogWzIsIDEsIDAsIDEsIC0xLCAtMV0sXHJcbiAgICBweTogWzAsIDIsIDEsIDEsIC0xLCAtMV0sXHJcbiAgICBueTogWzAsIDIsIDEsIDEsIDEsIDFdLFxyXG4gICAgcHo6IFswLCAxLCAyLCAtMSwgLTEsIC0xXSxcclxuICAgIG56OiBbMCwgMSwgMiwgMSwgLTEsIDFdXHJcbn07XHJcblxyXG4vLyBQcm9qZWN0IG9uIGNwdS5cclxuZnVuY3Rpb24gcHJvamVjdEVudmlyb25tZW50TWFwQ1BVKHJlbmRlcmVyLCBjdWJlUGl4ZWxzLCB3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICB2YXIgY29lZmYgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSg5ICogMyk7XHJcbiAgICB2YXIgbm9ybWFsID0gdmVjMy5jcmVhdGUoKTtcclxuICAgIHZhciB0ZXhlbCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICB2YXIgZmV0Y2hOb3JtYWwgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgZm9yICh2YXIgbSA9IDA7IG0gPCA5OyBtKyspIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRhcmdldHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgdmFyIHBpeGVscyA9IGN1YmVQaXhlbHNbdGFyZ2V0c1trXV07XHJcblxyXG4gICAgICAgICAgICB2YXIgc2lkZVJlc3VsdCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIHZhciBkaXZpZGVyID0gMDtcclxuICAgICAgICAgICAgdmFyIGkgPSAwO1xyXG4gICAgICAgICAgICB2YXIgdHJhbnNmb3JtID0gbm9ybWFsVHJhbnNmb3JtW3RhcmdldHNba11dO1xyXG4gICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsWzBdID0geCAvICh3aWR0aCAtIDEuMCkgKiAyLjAgLSAxLjA7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBGbGlwIHk/XHJcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsWzFdID0geSAvIChoZWlnaHQgLSAxLjApICogMi4wIC0gMS4wO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbFsyXSA9IC0xLjA7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUobm9ybWFsLCBub3JtYWwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmZXRjaE5vcm1hbFswXSA9IG5vcm1hbFt0cmFuc2Zvcm1bMF1dICogdHJhbnNmb3JtWzNdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZldGNoTm9ybWFsWzFdID0gbm9ybWFsW3RyYW5zZm9ybVsxXV0gKiB0cmFuc2Zvcm1bNF07XHJcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2hOb3JtYWxbMl0gPSBub3JtYWxbdHJhbnNmb3JtWzJdXSAqIHRyYW5zZm9ybVs1XTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMF0gPSBwaXhlbHNbaSsrXSAvIDI1NTtcclxuICAgICAgICAgICAgICAgICAgICB0ZXhlbFsxXSA9IHBpeGVsc1tpKytdIC8gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzJdID0gcGl4ZWxzW2krK10gLyAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUkdCTSBEZWNvZGVcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSBwaXhlbHNbaSsrXSAvIDI1NSAqIDguMTI7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMF0gKj0gc2NhbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMV0gKj0gc2NhbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMl0gKj0gc2NhbGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQoc2lkZVJlc3VsdCwgc2lkZVJlc3VsdCwgdGV4ZWwsIGhhcm1vbmljcyhmZXRjaE5vcm1hbCwgbSkgKiAtbm9ybWFsWzJdKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyAtbm9ybWFsLnogZXF1YWxzIGNvcyh0aGV0YSkgb2YgTGFtYmVydGlhblxyXG4gICAgICAgICAgICAgICAgICAgIGRpdmlkZXIgKz0gLW5vcm1hbFsyXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHJlc3VsdCwgcmVzdWx0LCBzaWRlUmVzdWx0LCAxIC8gZGl2aWRlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb2VmZlttICogM10gPSByZXN1bHRbMF0gLyA2LjA7XHJcbiAgICAgICAgY29lZmZbbSAqIDMgKyAxXSA9IHJlc3VsdFsxXSAvIDYuMDtcclxuICAgICAgICBjb2VmZlttICogMyArIDJdID0gcmVzdWx0WzJdIC8gNi4wO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvZWZmO1xyXG59XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSBlbnZNYXBcclxuICogQHBhcmFtICB7T2JqZWN0fSBbdGV4dHVyZU9wdHNdXHJcbiAqIEBwYXJhbSAge09iamVjdH0gW3RleHR1cmVPcHRzLmxvZF1cclxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3RleHR1cmVPcHRzLmRlY29kZVJHQk1dXHJcbiAqL1xyXG5zaC5wcm9qZWN0RW52aXJvbm1lbnRNYXAgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGVudk1hcCwgb3B0cykge1xyXG5cclxuICAgIC8vIFRPRE8gc1JHQlxyXG5cclxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG4gICAgb3B0cy5sb2QgPSBvcHRzLmxvZCB8fCAwO1xyXG5cclxuICAgIHZhciBza3lib3g7XHJcbiAgICB2YXIgZHVtbXlTY2VuZSA9IG5ldyBTY2VuZSgpO1xyXG4gICAgdmFyIHNpemUgPSA2NDtcclxuICAgIGlmIChlbnZNYXAudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlMkQnKSB7XHJcbiAgICAgICAgc2t5Ym94ID0gbmV3IFNreWRvbWUoe1xyXG4gICAgICAgICAgICBzY2VuZTogZHVtbXlTY2VuZSxcclxuICAgICAgICAgICAgZW52aXJvbm1lbnRNYXA6IGVudk1hcFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgc2l6ZSA9IChlbnZNYXAuaW1hZ2UgJiYgZW52TWFwLmltYWdlLnB4KSA/IGVudk1hcC5pbWFnZS5weC53aWR0aCA6IGVudk1hcC53aWR0aDtcclxuICAgICAgICBza3lib3ggPSBuZXcgU2t5Ym94KHtcclxuICAgICAgICAgICAgc2NlbmU6IGR1bW15U2NlbmUsXHJcbiAgICAgICAgICAgIGVudmlyb25tZW50TWFwOiBlbnZNYXBcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIENvbnZlcnQgdG8gcmdibVxyXG4gICAgdmFyIHdpZHRoID0gTWF0aC5jZWlsKHNpemUgLyBNYXRoLnBvdygyLCBvcHRzLmxvZCkpO1xyXG4gICAgdmFyIGhlaWdodCA9IE1hdGguY2VpbChzaXplIC8gTWF0aC5wb3coMiwgb3B0cy5sb2QpKTtcclxuICAgIHZhciByZ2JtVGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGhlaWdodFxyXG4gICAgfSk7XHJcbiAgICB2YXIgZnJhbWVidWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcclxuICAgIHNreWJveC5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fRU5DT0RFJyk7XHJcbiAgICBpZiAob3B0cy5kZWNvZGVSR0JNKSB7XHJcbiAgICAgICAgc2t5Ym94Lm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUkdCTV9ERUNPREUnKTtcclxuICAgIH1cclxuICAgIHNreWJveC5tYXRlcmlhbC5zZXQoJ2xvZCcsIG9wdHMubG9kKTtcclxuICAgIHZhciBlbnZNYXBQYXNzID0gbmV3IEVudmlyb25tZW50TWFwUGFzcyh7XHJcbiAgICAgICAgdGV4dHVyZTogcmdibVRleHR1cmVcclxuICAgIH0pO1xyXG4gICAgdmFyIGN1YmVQaXhlbHMgPSB7fTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFyZ2V0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGN1YmVQaXhlbHNbdGFyZ2V0c1tpXV0gPSBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpO1xyXG4gICAgICAgIHZhciBjYW1lcmEgPSBlbnZNYXBQYXNzLmdldENhbWVyYSh0YXJnZXRzW2ldKTtcclxuICAgICAgICBjYW1lcmEuZm92ID0gOTA7XHJcbiAgICAgICAgZnJhbWVidWZmZXIuYXR0YWNoKHJnYm1UZXh0dXJlKTtcclxuICAgICAgICBmcmFtZWJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICByZW5kZXJlci5yZW5kZXIoZHVtbXlTY2VuZSwgY2FtZXJhKTtcclxuICAgICAgICByZW5kZXJlci5nbC5yZWFkUGl4ZWxzKFxyXG4gICAgICAgICAgICAwLCAwLCB3aWR0aCwgaGVpZ2h0LFxyXG4gICAgICAgICAgICBUZXh0dXJlLlJHQkEsIFRleHR1cmUuVU5TSUdORURfQllURSwgY3ViZVBpeGVsc1t0YXJnZXRzW2ldXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZnJhbWVidWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBza3lib3guZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICBmcmFtZWJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIHJnYm1UZXh0dXJlLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG5cclxuICAgIHJldHVybiBwcm9qZWN0RW52aXJvbm1lbnRNYXBDUFUocmVuZGVyZXIsIGN1YmVQaXhlbHMsIHdpZHRoLCBoZWlnaHQpO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgc2g7XHJcbiIsIlxyXG4vKipcclxuICogSGVscGVycyBmb3IgY3JlYXRpbmcgYSBjb21tb24gM2QgYXBwbGljYXRpb24uXHJcbiAqIEBuYW1lc3BhY2UgY2xheS5hcHBsaWNhdGlvblxyXG4gKi9cclxuXHJcbiAvLyBUT0RPIGNyZWF0ZUNvbXBvc2l0b3JcclxuIC8vIFRPRE8gRGlzcG9zZSB0ZXN0LiBnZW9DYWNoZSB0ZXN0LlxyXG4gLy8gVE9ETyBUb25lbWFwcGluZyBleHBvc3VyZVxyXG4gLy8gVE9ETyBmaXRNb2RlbC5cclxuIC8vIFRPRE8gUGFydGljbGUgP1xyXG5pbXBvcnQgUmVuZGVyZXIgZnJvbSAnLi9SZW5kZXJlcic7XHJcbmltcG9ydCBTY2VuZSBmcm9tICcuL1NjZW5lJztcclxuaW1wb3J0IFRpbWVsaW5lIGZyb20gJy4vVGltZWxpbmUnO1xyXG5pbXBvcnQgQ3ViZUdlbyBmcm9tICcuL2dlb21ldHJ5L0N1YmUnO1xyXG5pbXBvcnQgU3BoZXJlR2VvIGZyb20gJy4vZ2VvbWV0cnkvU3BoZXJlJztcclxuaW1wb3J0IFBsYW5lR2VvIGZyb20gJy4vZ2VvbWV0cnkvUGxhbmUnO1xyXG5pbXBvcnQgUGFyYW1ldHJpY1N1cmZhY2VHZW8gZnJvbSAnLi9nZW9tZXRyeS9QYXJhbWV0cmljU3VyZmFjZSc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi9UZXh0dXJlQ3ViZSc7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vVGV4dHVyZSc7XHJcbmltcG9ydCBNZXNoIGZyb20gJy4vTWVzaCc7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuL01hdGVyaWFsJztcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IE9ydGhvZ3JhcGhpY0NhbWVyYSBmcm9tICcuL2NhbWVyYS9PcnRob2dyYXBoaWMnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBHTFRGTG9hZGVyIGZyb20gJy4vbG9hZGVyL0dMVEYnO1xyXG5pbXBvcnQgTm9kZSBmcm9tICcuL05vZGUnO1xyXG5pbXBvcnQgRGlyZWN0aW9uYWxMaWdodCBmcm9tICcuL2xpZ2h0L0RpcmVjdGlvbmFsJztcclxuaW1wb3J0IFBvaW50TGlnaHQgZnJvbSAnLi9saWdodC9Qb2ludCc7XHJcbmltcG9ydCBTcG90TGlnaHQgZnJvbSAnLi9saWdodC9TcG90JztcclxuaW1wb3J0IEFtYmllbnRMaWdodCBmcm9tICcuL2xpZ2h0L0FtYmllbnQnO1xyXG5pbXBvcnQgQW1iaWVudEN1YmVtYXBMaWdodCBmcm9tICcuL2xpZ2h0L0FtYmllbnRDdWJlbWFwJztcclxuaW1wb3J0IEFtYmllbnRTSExpZ2h0IGZyb20gJy4vbGlnaHQvQW1iaWVudFNIJztcclxuaW1wb3J0IFNoYWRvd01hcFBhc3MgZnJvbSAnLi9wcmVQYXNzL1NoYWRvd01hcCc7XHJcbmltcG9ydCBSYXlQaWNraW5nIGZyb20gJy4vcGlja2luZy9SYXlQaWNraW5nJztcclxuaW1wb3J0IExSVUNhY2hlIGZyb20gJy4vY29yZS9MUlUnO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCBzaFV0aWwgZnJvbSAnLi91dGlsL3NoJztcclxuaW1wb3J0IHRleHR1cmVVdGlsIGZyb20gJy4vdXRpbC90ZXh0dXJlJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxuXHJcbmltcG9ydCBjb2xvclV0aWwgZnJvbSAnLi9jb3JlL2NvbG9yJztcclxudmFyIHBhcnNlQ29sb3IgPSBjb2xvclV0aWwucGFyc2VUb0Zsb2F0O1xyXG5cclxuaW1wb3J0IHNoYWRlckxpYnJhcnkgZnJvbSAnLi9zaGFkZXIvYnVpbHRpbic7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi9TaGFkZXInO1xyXG5cclxuXHJcbnZhciBFVkVfTkFNRVMgPSBbJ2NsaWNrJywgJ2RibGNsaWNrJywgJ21vdXNlb3ZlcicsICdtb3VzZW91dCcsICdtb3VzZW1vdmUnLFxyXG4gICAgJ3RvdWNoc3RhcnQnLCAndG91Y2hlbmQnLCAndG91Y2htb3ZlJyxcclxuICAgICdtb3VzZXdoZWVsJywgJ0RPTU1vdXNlU2Nyb2xsJ1xyXG5dO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtzdHJpbmd8SFRNTENhbnZhc0VsZW1lbnR8SFRNTEltYWdlRWxlbWVudHxIVE1MVmlkZW9FbGVtZW50fSBJbWFnZUxpa2VcclxuICovXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7c3RyaW5nfEhUTUxDYW52YXNFbGVtZW50fEhUTUxJbWFnZUVsZW1lbnR8SFRNTFZpZGVvRWxlbWVudHxjbGF5LlRleHR1cmUyRH0gVGV4dHVyZUxpa2VcclxuICovXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7c3RyaW5nfEFycmF5LjxudW1iZXI+fSBDb2xvclxyXG4gKi9cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtIVE1MRWxlbWVudHxzdHJpbmd9IERvbVF1ZXJ5XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFwcDNETmFtZXNwYWNlXHJcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGluaXQgSW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIGluaXRpbmcgYXBwLlxyXG4gKiAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHJldHVybiBhIHByb21pc2UgaW4gaW5pdCB0byBzdGFydCB0aGUgbG9vcCBhc3luY2hyb25vdXNseSB3aGVuIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkLlxyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBsb29wIExvb3AgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCBlYWNoIGZyYW1lLlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthdXRvUmVuZGVyPXRydWVdIElmIHJlbmRlciBhdXRvbWF0aWNhbGx5IGVhY2ggZnJhbWUuXHJcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IFtiZWZvcmVSZW5kZXJdXHJcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IFthZnRlclJlbmRlcl1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFt3aWR0aF0gQ29udGFpbmVyIHdpZHRoLlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2hlaWdodF0gQ29udGFpbmVyIGhlaWdodC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtkZXZpY2VQaXhlbFJhdGlvXVxyXG4gKiBAcHJvcGVydHkge09iamVjdC48c3RyaW5nLCBGdW5jdGlvbj59IFttZXRob2RzXSBNZXRob2RzIHRoYXQgd2lsbCBiZSBpbmplY3RlZCB0byBBcHAzRCNtZXRob2RzLlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2dyYXBoaWNdIEdyYXBoaWMgY29uZmlndXJhdGlvbiBpbmNsdWRpbmcgc2hhZG93LCBjb2xvciBzcGFjZS5cclxuICogQHByb3BlcnR5IHtib29sZWFufSBbZ3JhcGhpYy5zaGFkb3c9ZmFsc2VdIElmIGVuYWJsZSBzaGFkb3dcclxuICogQHByb3BlcnR5IHtib29sZWFufSBbZ3JhcGhpYy5saW5lYXI9ZmFsc2VdIElmIHVzZSBsaW5lYXIgY29sb3Igc3BhY2VcclxuICogQHByb3BlcnR5IHtib29sZWFufSBbZ3JhcGhpYy50b25lbWFwcGluZz1mYWxzZV0gSWYgZW5hYmxlIEFDRVMgdG9uZSBtYXBwaW5nLlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtldmVudD1mYWxzZV0gSWYgZW5hYmxlIG1vdXNlL3RvdWNoIGV2ZW50LiBJdCB3aWxsIHNsb3cgZG93biB0aGUgc3lzdGVtIGlmIGdlb21ldHJpZXMgYXJlIGNvbXBsZXguXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0YW5kYXJkTWF0ZXJpYWxNUkNvbmZpZ1xyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2hhZGVyPSdzdGFuZGFyZE1SJ11cclxuICogQHByb3BlcnR5IHtDb2xvcn0gW2NvbG9yXVxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2FscGhhXVxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21ldGFsbmVzc11cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtyb3VnaG5lc3NdXHJcbiAqIEBwcm9wZXJ0eSB7Q29sb3J9IFtlbWlzc2lvbl1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtlbWlzc2lvbkludGVuc2l0eV1cclxuICogQHByb3BlcnR5IHtib29sZWFufSBbdHJhbnNwYXJlbnRdXHJcbiAqIEBwcm9wZXJ0eSB7VGV4dHVyZUxpa2V9IFtkaWZmdXNlTWFwXVxyXG4gKiBAcHJvcGVydHkge1RleHR1cmVMaWtlfSBbbm9ybWFsTWFwXVxyXG4gKiBAcHJvcGVydHkge1RleHR1cmVMaWtlfSBbcm91Z2huZXNzTWFwXVxyXG4gKiBAcHJvcGVydHkge1RleHR1cmVMaWtlfSBbbWV0YWxuZXNzTWFwXVxyXG4gKiBAcHJvcGVydHkge1RleHR1cmVMaWtlfSBbZW1pc3NpdmVNYXBdXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFVzaW5nIEFwcDNEIGlzIGEgbXVjaCBtb3JlIGNvbnZlbmllbnQgd2F5IHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHlvdXIgM0QgYXBwbGljYXRpb24uXHJcbiAqXHJcbiAqIEl0IHByb3ZpZGVzIHRoZSBhYmlsaXRpZXMgdG86XHJcbiAqXHJcbiAqICsgTWFuYWdlIGFwcGxpY2F0aW9uIGxvb3AgYW5kIHJlbmRlcmluZy5cclxuICogKyBDb2xsZWN0IEdQVSByZXNvdXJjZSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbWVtb3J5IGxlYWsgY29uY2Vybi5cclxuICogKyBNb3VzZSBldmVudCBtYW5hZ2VtZW50LlxyXG4gKiArIENyZWF0ZSBzY2VuZSBvYmplY3RzLCBtYXRlcmlhbHMsIHRleHR1cmVzIHdpdGggc2ltcGxlciBjb2RlLlxyXG4gKiArIExvYWQgbW9kZWxzIHdpdGggb25lIGxpbmUgb2YgY29kZS5cclxuICogKyBQcm9taXNlZCBpbnRlcmZhY2VzLlxyXG4gKlxyXG4gKiBIZXJlIGlzIGEgYmFzaWMgZXhhbXBsZSB0byBjcmVhdGUgYSByb3RhdGluZyBjdWJlLlxyXG4gKlxyXG5gYGBqc1xyXG52YXIgYXBwID0gY2xheS5hcHBsaWNhdGlvbi5jcmVhdGUoJyN2aWV3cG9ydCcsIHtcclxuICAgIGluaXQ6IGZ1bmN0aW9uIChhcHApIHtcclxuICAgICAgICAvLyBDcmVhdGUgYSBwZXJzcGVjdGl2ZSBjYW1lcmEuXHJcbiAgICAgICAgLy8gRmlyc3QgcGFyYW1ldGVyIGlzIHRoZSBjYW1lcmEgcG9zaXRpb24uIFdoaWNoIGlzIGluIGZyb250IG9mIHRoZSBjdWJlLlxyXG4gICAgICAgIC8vIFNlY29uZCBwYXJhbWV0ZXIgaXMgdGhlIGNhbWVyYSBsb29rQXQgdGFyZ2V0LiBXaGljaCBpcyB0aGUgb3JpZ2luIG9mIHRoZSB3b3JsZCwgYW5kIHdoZXJlIHRoZSBjdWJlIHB1dHMuXHJcbiAgICAgICAgdGhpcy5fY2FtZXJhID0gYXBwLmNyZWF0ZUNhbWVyYShbMCwgMiwgNV0sIFswLCAwLCAwXSk7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgc2FtcGxlIGN1YmVcclxuICAgICAgICB0aGlzLl9jdWJlID0gYXBwLmNyZWF0ZUN1YmUoKTtcclxuICAgICAgICAvLyBDcmVhdGUgYSBkaXJlY3Rpb25hbCBsaWdodC4gVGhlIGRpcmVjdGlvbiBpcyBmcm9tIHRvcCByaWdodCB0byBsZWZ0IGJvdHRvbSwgYXdheSBmcm9tIGNhbWVyYS5cclxuICAgICAgICB0aGlzLl9tYWluTGlnaHQgPSBhcHAuY3JlYXRlRGlyZWN0aW9uYWxMaWdodChbLTEsIC0xLCAtMV0pO1xyXG4gICAgfSxcclxuICAgIGxvb3A6IGZ1bmN0aW9uIChhcHApIHtcclxuICAgICAgICAvLyBTaW1wbHkgcm90YXRpbmcgdGhlIGN1YmUgZXZlcnkgZnJhbWUuXHJcbiAgICAgICAgdGhpcy5fY3ViZS5yb3RhdGlvbi5yb3RhdGVZKGFwcC5mcmFtZVRpbWUgLyAxMDAwKTtcclxuICAgIH1cclxufSk7XHJcbmBgYFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuYXBwbGljYXRpb24uQXBwM0RcclxuICogQHBhcmFtIHtEb21RdWVyeX0gZG9tIENvbnRhaW5lciBkb20gZWxlbWVudCBvciBhIHNlbGVjdG9yIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGluIGBxdWVyeVNlbGVjdG9yYFxyXG4gKiBAcGFyYW0ge0FwcDNETmFtZXNwYWNlfSBhcHBOUyBPcHRpb25zIGFuZCBuYW1lc3BhY2UgdXNlZCBpbiBjcmVhdGluZyBhcHAzRFxyXG4gKi9cclxuZnVuY3Rpb24gQXBwM0QoZG9tLCBhcHBOUykge1xyXG5cclxuICAgIGFwcE5TID0gYXBwTlMgfHwge307XHJcbiAgICBhcHBOUy5ncmFwaGljID0gYXBwTlMuZ3JhcGhpYyB8fCB7fTtcclxuXHJcbiAgICBpZiAoYXBwTlMuYXV0b1JlbmRlciA9PSBudWxsKSB7XHJcbiAgICAgICAgYXBwTlMuYXV0b1JlbmRlciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBkb20gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgZG9tID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihkb20pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZG9tKSB7IHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkb20nKTsgfVxyXG5cclxuICAgIHZhciBpc0RvbUNhbnZhcyA9ICFkb20ubm9kZU5hbWUgIC8vIE5vdCBpbiBkb20gZW52aXJvbm1lbnRcclxuICAgICAgICB8fCBkb20ubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0NBTlZBUyc7XHJcblxyXG4gICAgdmFyIHJlbmRlcmVyT3B0cyA9IHt9O1xyXG4gICAgaXNEb21DYW52YXMgJiYgKHJlbmRlcmVyT3B0cy5jYW52YXMgPSBkb20pO1xyXG4gICAgYXBwTlMuZGV2aWNlUGl4ZWxSYXRpbyAmJiAocmVuZGVyZXJPcHRzLmRldmljZVBpeGVsUmF0aW8gPSBhcHBOUy5kZXZpY2VQaXhlbFJhdGlvKTtcclxuXHJcbiAgICB2YXIgZ1JlbmRlcmVyID0gbmV3IFJlbmRlcmVyKHJlbmRlcmVyT3B0cyk7XHJcbiAgICB2YXIgZ1dpZHRoID0gYXBwTlMud2lkdGggfHwgZG9tLmNsaWVudFdpZHRoO1xyXG4gICAgdmFyIGdIZWlnaHQgPSBhcHBOUy5oZWlnaHQgfHwgZG9tLmNsaWVudEhlaWdodDtcclxuXHJcbiAgICB2YXIgZ1NjZW5lID0gbmV3IFNjZW5lKCk7XHJcbiAgICB2YXIgZ1RpbWVsaW5lID0gbmV3IFRpbWVsaW5lKCk7XHJcbiAgICB2YXIgZ1NoYWRvd1Bhc3MgPSBhcHBOUy5ncmFwaGljLnNoYWRvdyAmJiBuZXcgU2hhZG93TWFwUGFzcygpO1xyXG4gICAgdmFyIGdSYXlQaWNraW5nID0gYXBwTlMuZXZlbnQgJiYgbmV3IFJheVBpY2tpbmcoe1xyXG4gICAgICAgIHNjZW5lOiBnU2NlbmUsXHJcbiAgICAgICAgcmVuZGVyZXI6IGdSZW5kZXJlclxyXG4gICAgfSk7XHJcblxyXG4gICAgIWlzRG9tQ2FudmFzICYmIGRvbS5hcHBlbmRDaGlsZChnUmVuZGVyZXIuY2FudmFzKTtcclxuXHJcbiAgICBnUmVuZGVyZXIucmVzaXplKGdXaWR0aCwgZ0hlaWdodCk7XHJcblxyXG4gICAgdmFyIGdGcmFtZVRpbWUgPSAwO1xyXG4gICAgdmFyIGdFbGFwc2VkVGltZSA9IDA7XHJcblxyXG4gICAgZ1RpbWVsaW5lLnN0YXJ0KCk7XHJcblxyXG4gICAgdmFyIHVzZXJNZXRob2RzID0ge307XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gYXBwTlMubWV0aG9kcykge1xyXG4gICAgICAgIHVzZXJNZXRob2RzW2tleV0gPSBhcHBOUy5tZXRob2RzW2tleV0uYmluZChhcHBOUywgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENvbnRhaW5lciBkb20gZWxlbWVudFxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjY29udGFpbmVyXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnRhaW5lcjogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvbTsgfSB9LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjcmVuZGVyZXJcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5SZW5kZXJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICByZW5kZXJlcjogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdSZW5kZXJlcjsgfX0sXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5BcHAzRCNzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlJlbmRlcmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNjZW5lOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1NjZW5lOyB9fSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI3RpbWVsaW5lXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuUmVuZGVyZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGltZWxpbmU6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnVGltZWxpbmU7IH19LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRpbWUgZWxhcHNlZCBzaW5jZSBsYXN0IGZyYW1lLiBDYW4gYmUgdXNlZCBpbiBsb29wIHRvIGNhbGN1bGF0ZSB0aGUgbW92ZW1lbnQuXHJcbiAgICAgICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5BcHAzRCNmcmFtZVRpbWVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZyYW1lVGltZTogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdGcmFtZVRpbWU7IH19LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRpbWUgZWxhcHNlZCBzaW5jZSBhcHBsaWNhdGlvbiBjcmVhdGVkLlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjZWxhcHNlZFRpbWVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVsYXBzZWRUaW1lOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ0VsYXBzZWRUaW1lOyB9fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2lkdGggb2Ygdmlld3BvcnQuXHJcbiAgICAgICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5BcHAzRCN3aWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgd2lkdGg6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnUmVuZGVyZXIuZ2V0V2lkdGgoKTsgfX0sXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSGVpZ2h0IG9mIHZpZXdwb3J0LlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjaGVpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBoZWlnaHQ6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnUmVuZGVyZXIuZ2V0SGVpZ2h0KCk7IH19LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNZXRob2RzIGZyb20ge0BsaW5rIGNsYXkuYXBwbGljYXRpb24uY3JlYXRlfVxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjbWV0aG9kc1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWV0aG9kczogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVzZXJNZXRob2RzOyB9IH0sXHJcblxyXG4gICAgICAgIF9zaGFkb3dQYXNzOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1NoYWRvd1Bhc3M7IH0gfSxcclxuXHJcbiAgICAgICAgX2FwcE5TOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXBwTlM7IH0gfSxcclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzaXplIHRoZSBhcHBsaWNhdGlvbi4gV2lsbCB1c2UgdGhlIGNvbnRhaW5lciBjbGllbnRXaWR0aC9jbGllbnRIZWlnaHQgaWYgd2lkdGgvaGVpZ2h0IGluIHBhcmFtZXRlcnMgYXJlIG5vdCBnaXZlbi5cclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQG1lbWJlck9mIHtjbGF5LmFwcGxpY2F0aW9uLkFwcDNEfVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aF1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0XVxyXG4gICAgICovXHJcbiAgICB0aGlzLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICAgICAgZ1dpZHRoID0gd2lkdGggfHwgYXBwTlMud2lkdGggfHwgZG9tLmNsaWVudFdpZHRoO1xyXG4gICAgICAgIGdIZWlnaHQgPSBoZWlnaHQgfHwgZG9tLmhlaWdodCB8fCBkb20uY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgIGdSZW5kZXJlci5yZXNpemUoZ1dpZHRoLCBnSGVpZ2h0KTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIHRoZSBhcHBsaWNhdGlvblxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKi9cclxuICAgIHRoaXMuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmIChhcHBOUy5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgIGFwcE5TLmRpc3Bvc2UodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdUaW1lbGluZS5zdG9wKCk7XHJcbiAgICAgICAgZ1JlbmRlcmVyLmRpc3Bvc2VTY2VuZShnU2NlbmUpO1xyXG4gICAgICAgIGdTaGFkb3dQYXNzICYmIGdTaGFkb3dQYXNzLmRpc3Bvc2UoZ1JlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgZG9tLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIEVWRV9OQU1FUy5mb3JFYWNoKGZ1bmN0aW9uIChldmVUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXNbbWFrZUhhbmRsZXJOYW1lKGV2ZVR5cGUpXSAmJiB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sIG1ha2VIYW5kbGVyTmFtZShldmVUeXBlKSk7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9O1xyXG5cclxuICAgIGdSYXlQaWNraW5nICYmIHRoaXMuX2luaXRNb3VzZUV2ZW50cyhnUmF5UGlja2luZyk7XHJcblxyXG4gICAgdGhpcy5fZ2VvQ2FjaGUgPSBuZXcgTFJVQ2FjaGUoMjApO1xyXG4gICAgdGhpcy5fdGV4Q2FjaGUgPSBuZXcgTFJVQ2FjaGUoMjApO1xyXG5cclxuICAgIC8vIEdQVSBSZXNvdXJjZXMuXHJcbiAgICB0aGlzLl90ZXh0dXJlc0xpc3QgPSB7fTtcclxuICAgIHRoaXMuX2dlb21ldHJpZXNMaXN0ID0ge307XHJcblxyXG4gICAgLy8gRG8gaW5pdCB0aGUgYXBwbGljYXRpb24uXHJcbiAgICB2YXIgaW5pdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoYXBwTlMuaW5pdCAmJiBhcHBOUy5pbml0KHRoaXMpKTtcclxuICAgIC8vIFVzZSB0aGUgaW5pdGVkIGNhbWVyYS5cclxuICAgIGdSYXlQaWNraW5nICYmIChnUmF5UGlja2luZy5jYW1lcmEgPSBnU2NlbmUuZ2V0TWFpbkNhbWVyYSgpKTtcclxuXHJcbiAgICBpZiAoIWFwcE5TLmxvb3ApIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ01pc3MgbG9vcCBtZXRob2QuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgaW5pdFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZ1RpbWVsaW5lLm9uKCdmcmFtZScsIGZ1bmN0aW9uIChmcmFtZVRpbWUpIHtcclxuICAgICAgICAgICAgZ0ZyYW1lVGltZSA9IGZyYW1lVGltZTtcclxuICAgICAgICAgICAgZ0VsYXBzZWRUaW1lICs9IGZyYW1lVGltZTtcclxuXHJcbiAgICAgICAgICAgIHZhciBjYW1lcmEgPSBnU2NlbmUuZ2V0TWFpbkNhbWVyYSgpO1xyXG4gICAgICAgICAgICBpZiAoY2FtZXJhKSB7XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEuYXNwZWN0ID0gZ1JlbmRlcmVyLmdldFZpZXdwb3J0QXNwZWN0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ1JheVBpY2tpbmcgJiYgKGdSYXlQaWNraW5nLmNhbWVyYSA9IGNhbWVyYSk7XHJcblxyXG4gICAgICAgICAgICBhcHBOUy5sb29wICYmIGFwcE5TLmxvb3Aoc2VsZik7XHJcblxyXG4gICAgICAgICAgICBpZiAoYXBwTlMuYXV0b1JlbmRlcikge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yZW5kZXIoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2VsZi5jb2xsZWN0UmVzb3VyY2VzKCk7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBnU2NlbmUub24oJ2JlZm9yZXJlbmRlcicsIGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgcmVuZGVyTGlzdCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pblJlbmRlcikge1xyXG4gICAgICAgICAgICAvLyBPbmx5IHVwZGF0ZSBncmFwaGljIG9wdGlvbnMgd2hlbiB1c2luZyAjcmVuZGVyIGZ1bmN0aW9uLlxyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVHcmFwaGljT3B0aW9ucyhhcHBOUy5ncmFwaGljLCByZW5kZXJMaXN0Lm9wYXF1ZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVHcmFwaGljT3B0aW9ucyhhcHBOUy5ncmFwaGljLCByZW5kZXJMaXN0LnRyYW5zcGFyZW50LCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgdGhpcyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSW1hZ2VMaWtlRWxlbWVudCh2YWwpIHtcclxuICAgIHJldHVybiAodHlwZW9mIEltYWdlICE9PSAndW5kZWZpbmVkJyAmJiB2YWwgaW5zdGFuY2VvZiBJbWFnZSlcclxuICAgICAgICB8fCAodHlwZW9mIEhUTUxDYW52YXNFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB2YWwgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudClcclxuICAgICAgICB8fCAodHlwZW9mIEhUTUxWaWRlb0VsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHZhbCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRLZXlGcm9tSW1hZ2VMaWtlKHZhbCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgPyB2YWwgOiAodmFsLl9fa2V5X18gfHwgKHZhbC5fX2tleV9fID0gdXRpbC5nZW5HVUlEKCkpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbWFrZUhhbmRsZXJOYW1lKGV2ZVR5cGUpIHtcclxuICAgIHJldHVybiAnXycgKyBldmVUeXBlICsgJ0hhbmRsZXInO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYWNrYWdlRXZlbnQoZXZlbnRUeXBlLCBwaWNrUmVzdWx0LCBvZmZzZXRYLCBvZmZzZXRZLCB3aGVlbERlbHRhKSB7XHJcbiAgICB2YXIgZXZlbnQgPSB1dGlsLmNsb25lKHBpY2tSZXN1bHQpO1xyXG4gICAgZXZlbnQudHlwZSA9IGV2ZW50VHlwZTtcclxuICAgIGV2ZW50Lm9mZnNldFggPSBvZmZzZXRYO1xyXG4gICAgZXZlbnQub2Zmc2V0WSA9IG9mZnNldFk7XHJcbiAgICBpZiAod2hlZWxEZWx0YSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGV2ZW50LndoZWVsRGVsdGEgPSB3aGVlbERlbHRhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGV2ZW50O1xyXG59XHJcblxyXG5mdW5jdGlvbiBidWJibGluZ0V2ZW50KHRhcmdldCwgZXZlbnQpIHtcclxuICAgIHdoaWxlICh0YXJnZXQgJiYgIWV2ZW50LmNhbmNlbEJ1YmJsZSkge1xyXG4gICAgICAgIHRhcmdldC50cmlnZ2VyKGV2ZW50LnR5cGUsIGV2ZW50KTtcclxuICAgICAgICB0YXJnZXQgPSB0YXJnZXQuZ2V0UGFyZW50KCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbkFwcDNELnByb3RvdHlwZS5faW5pdE1vdXNlRXZlbnRzID0gZnVuY3Rpb24gKHJheVBpY2tpbmcpIHtcclxuICAgIHZhciBkb20gPSB0aGlzLmNvbnRhaW5lcjtcclxuXHJcbiAgICB2YXIgb2xkVGFyZ2V0ID0gbnVsbDtcclxuICAgIEVWRV9OQU1FUy5mb3JFYWNoKGZ1bmN0aW9uIChfZXZlVHlwZSkge1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgX2V2ZVR5cGUsIHRoaXNbbWFrZUhhbmRsZXJOYW1lKF9ldmVUeXBlKV0gPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBpZiAoIXJheVBpY2tpbmcuY2FtZXJhKSB7IC8vIE5vdCBoYXZlIGNhbWVyYSB5ZXQuXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCAmJiBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYm94ID0gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0WCwgb2Zmc2V0WTtcclxuICAgICAgICAgICAgdmFyIGV2ZVR5cGUgPSBfZXZlVHlwZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChldmVUeXBlLmluZGV4T2YoJ3RvdWNoJykgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRvdWNoID0gZXZlVHlwZSAhPT0gJ3RvdWNoZW5kJ1xyXG4gICAgICAgICAgICAgICAgICAgID8gZS50YXJnZXRUb3VjaGVzWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgOiBlLmNoYW5nZWRUb3VjaGVzWzBdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZVR5cGUgPT09ICd0b3VjaHN0YXJ0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZVR5cGUgPSAnbW91c2Vkb3duJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZVR5cGUgPT09ICd0b3VjaGVuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVUeXBlID0gJ21vdXNldXAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXZlVHlwZSA9PT0gJ3RvdWNobW92ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVUeXBlID0gJ21vdXNlbW92ZSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBvZmZzZXRYID0gdG91Y2guY2xpZW50WCAtIGJveC5sZWZ0O1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0WSA9IHRvdWNoLmNsaWVudFkgLSBib3gudG9wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0WCA9IGUuY2xpZW50WCAtIGJveC5sZWZ0O1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0WSA9IGUuY2xpZW50WSAtIGJveC50b3A7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBwaWNrUmVzdWx0ID0gcmF5UGlja2luZy5waWNrKG9mZnNldFgsIG9mZnNldFkpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAoZXZlVHlwZSA9PT0gJ0RPTU1vdXNlU2Nyb2xsJyB8fCBldmVUeXBlID09PSAnbW91c2V3aGVlbCcpIHtcclxuICAgICAgICAgICAgICAgIGRlbHRhID0gKGUud2hlZWxEZWx0YSkgPyBlLndoZWVsRGVsdGEgLyAxMjAgOiAtKGUuZGV0YWlsIHx8IDApIC8gMztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHBpY2tSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIC8vIEp1c3QgaWdub3JlIHNpbGVudCBlbGVtZW50LlxyXG4gICAgICAgICAgICAgICAgaWYgKHBpY2tSZXN1bHQudGFyZ2V0LnNpbGVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlVHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBQRU5ESU5HIHRvdWNoZG93biBzaG91bGQgdHJpZ2dlciBtb3VzZW92ZXIgZXZlbnQgP1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXRDaGFuZ2VkID0gcGlja1Jlc3VsdC50YXJnZXQgIT09IG9sZFRhcmdldDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbGRUYXJnZXQgJiYgYnViYmxpbmdFdmVudChvbGRUYXJnZXQsIHBhY2thZ2VFdmVudCgnbW91c2VvdXQnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG9sZFRhcmdldFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvZmZzZXRYLCBvZmZzZXRZKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJ1YmJsaW5nRXZlbnQocGlja1Jlc3VsdC50YXJnZXQsIHBhY2thZ2VFdmVudCgnbW91c2Vtb3ZlJywgcGlja1Jlc3VsdCwgb2Zmc2V0WCwgb2Zmc2V0WSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1YmJsaW5nRXZlbnQocGlja1Jlc3VsdC50YXJnZXQsIHBhY2thZ2VFdmVudCgnbW91c2VvdmVyJywgcGlja1Jlc3VsdCwgb2Zmc2V0WCwgb2Zmc2V0WSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1YmJsaW5nRXZlbnQocGlja1Jlc3VsdC50YXJnZXQsIHBhY2thZ2VFdmVudChldmVUeXBlLCBwaWNrUmVzdWx0LCBvZmZzZXRYLCBvZmZzZXRZLCBkZWx0YSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb2xkVGFyZ2V0ID0gcGlja1Jlc3VsdC50YXJnZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAob2xkVGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KG9sZFRhcmdldCwgcGFja2FnZUV2ZW50KCdtb3VzZW91dCcsIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG9sZFRhcmdldFxyXG4gICAgICAgICAgICAgICAgfSwgb2Zmc2V0WCwgb2Zmc2V0WSkpO1xyXG4gICAgICAgICAgICAgICAgb2xkVGFyZ2V0ID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgdGhpcyk7XHJcbn07XHJcblxyXG5BcHAzRC5wcm90b3R5cGUuX3VwZGF0ZUdyYXBoaWNPcHRpb25zID0gZnVuY3Rpb24gKGdyYXBoaWNPcHRzLCBsaXN0LCBpc1NreWJveCkge1xyXG4gICAgdmFyIGVuYWJsZVRvbmVtYXBwaW5nID0gISFncmFwaGljT3B0cy50b25lbWFwcGluZztcclxuICAgIHZhciBpc0xpbmVhclNwYWNlID0gISFncmFwaGljT3B0cy5saW5lYXI7XHJcblxyXG4gICAgdmFyIHByZXZNYXRlcmlhbDtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgbWF0ID0gbGlzdFtpXS5tYXRlcmlhbDtcclxuICAgICAgICBpZiAobWF0ID09PSBwcmV2TWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbmFibGVUb25lbWFwcGluZyA/IG1hdC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1RPTkVNQVBQSU5HJykgOiBtYXQudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1RPTkVNQVBQSU5HJyk7XHJcbiAgICAgICAgaWYgKGlzTGluZWFyU3BhY2UpIHtcclxuICAgICAgICAgICAgdmFyIGRlY29kZVNSR0IgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoaXNTa3lib3ggJiYgbWF0LmdldCgnZW52aXJvbm1lbnRNYXAnKSAmJiAhbWF0LmdldCgnZW52aXJvbm1lbnRNYXAnKS5zUkdCKSB7XHJcbiAgICAgICAgICAgICAgICBkZWNvZGVTUkdCID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVjb2RlU1JHQiAmJiBtYXQuZGVmaW5lKCdmcmFnbWVudCcsICdTUkdCX0RFQ09ERScpO1xyXG4gICAgICAgICAgICBtYXQuZGVmaW5lKCdmcmFnbWVudCcsICdTUkdCX0VOQ09ERScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWF0LnVuZGVmaW5lKCdmcmFnbWVudCcsICdTUkdCX0RFQ09ERScpO1xyXG4gICAgICAgICAgICBtYXQudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NSR0JfRU5DT0RFJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcmV2TWF0ZXJpYWwgPSBtYXQ7XHJcbiAgICB9XHJcbn07XHJcblxyXG5BcHAzRC5wcm90b3R5cGUuX2RvUmVuZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSkge1xyXG4gICAgdmFyIGNhbWVyYSA9IHNjZW5lLmdldE1haW5DYW1lcmEoKTtcclxuICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhLCB0cnVlKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBEbyByZW5kZXJcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9pblJlbmRlciA9IHRydWU7XHJcbiAgICB2YXIgYXBwTlMgPSB0aGlzLl9hcHBOUztcclxuICAgIGFwcE5TLmJlZm9yZVJlbmRlciAmJiBhcHBOUy5iZWZvcmVSZW5kZXIoc2VsZik7XHJcblxyXG4gICAgdmFyIHNjZW5lID0gdGhpcy5zY2VuZTtcclxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcbiAgICB2YXIgc2hhZG93UGFzcyA9IHRoaXMuX3NoYWRvd1Bhc3M7XHJcblxyXG4gICAgc2NlbmUudXBkYXRlKCk7XHJcbiAgICB2YXIgc2t5Ym94TGlzdCA9IFtdO1xyXG4gICAgc2NlbmUuc2t5Ym94ICYmIHNreWJveExpc3QucHVzaChzY2VuZS5za3lib3gpO1xyXG4gICAgc2NlbmUuc2t5ZG9tZSAmJiBza3lib3hMaXN0LnB1c2goc2NlbmUuc2t5ZG9tZSk7XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlR3JhcGhpY09wdGlvbnMoYXBwTlMuZ3JhcGhpYywgc2t5Ym94TGlzdCwgdHJ1ZSk7XHJcbiAgICAvLyBSZW5kZXIgc2hhZG93IHBhc3NcclxuICAgIHNoYWRvd1Bhc3MgJiYgc2hhZG93UGFzcy5yZW5kZXIocmVuZGVyZXIsIHNjZW5lLCBudWxsLCB0cnVlKTtcclxuXHJcbiAgICB0aGlzLl9kb1JlbmRlcihyZW5kZXJlciwgc2NlbmUsIHRydWUpO1xyXG5cclxuICAgIGFwcE5TLmFmdGVyUmVuZGVyICYmIGFwcE5TLmFmdGVyUmVuZGVyKHNlbGYpO1xyXG4gICAgdGhpcy5faW5SZW5kZXIgPSBmYWxzZTtcclxufTtcclxuXHJcbkFwcDNELnByb3RvdHlwZS5jb2xsZWN0UmVzb3VyY2VzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcclxuICAgIHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7XHJcbiAgICB2YXIgdGV4dHVyZXNMaXN0ID0gdGhpcy5fdGV4dHVyZXNMaXN0O1xyXG4gICAgdmFyIGdlb21ldHJpZXNMaXN0ID0gdGhpcy5fZ2VvbWV0cmllc0xpc3Q7XHJcbiAgICAvLyBNYXJrIGFsbCByZXNvdXJjZXMgdW51c2VkO1xyXG4gICAgbWFya1VudXNlZCh0ZXh0dXJlc0xpc3QpO1xyXG4gICAgbWFya1VudXNlZChnZW9tZXRyaWVzTGlzdCk7XHJcblxyXG4gICAgLy8gQ29sbGVjdCByZXNvdXJjZXMgdXNlZCBpbiB0aGlzIGZyYW1lLlxyXG4gICAgdmFyIG5ld1RleHR1cmVzTGlzdCA9IFtdO1xyXG4gICAgdmFyIG5ld0dlb21ldHJpZXNMaXN0ID0gW107XHJcbiAgICBjb2xsZWN0UmVzb3VyY2VzKHNjZW5lLCBuZXdUZXh0dXJlc0xpc3QsIG5ld0dlb21ldHJpZXNMaXN0KTtcclxuXHJcbiAgICAvLyBEaXNwb3NlIHRob3NlIHVuc2VkIHJlc291cmNlcy5cclxuICAgIGNoZWNrQW5kRGlzcG9zZShyZW5kZXJlciwgdGV4dHVyZXNMaXN0KTtcclxuICAgIGNoZWNrQW5kRGlzcG9zZShyZW5kZXJlciwgZ2VvbWV0cmllc0xpc3QpO1xyXG5cclxuICAgIHRoaXMuX3RleHR1cmVzTGlzdCA9IG5ld1RleHR1cmVzTGlzdDtcclxuICAgIHRoaXMuX2dlb21ldHJpZXNMaXN0ID0gbmV3R2VvbWV0cmllc0xpc3Q7XHJcbn07XHJcblxyXG5cclxuZnVuY3Rpb24gbWFya1VudXNlZChyZXNvdXJjZUxpc3QpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzb3VyY2VMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcmVzb3VyY2VMaXN0W2ldLl9fdXNlZCA9IDA7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNoZWNrQW5kRGlzcG9zZShyZW5kZXJlciwgcmVzb3VyY2VMaXN0KSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc291cmNlTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICghcmVzb3VyY2VMaXN0W2ldLl9fdXNlZCkge1xyXG4gICAgICAgICAgICByZXNvdXJjZUxpc3RbaV0uZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVVc2VkKHJlc291cmNlLCBsaXN0KSB7XHJcbiAgICByZXNvdXJjZS5fX3VzZWQgPSByZXNvdXJjZS5fX3VzZWQgfHwgMDtcclxuICAgIHJlc291cmNlLl9fdXNlZCsrO1xyXG4gICAgaWYgKHJlc291cmNlLl9fdXNlZCA9PT0gMSkge1xyXG4gICAgICAgIC8vIERvbid0IHB1c2ggdG8gdGhlIGxpc3QgdHdpY2UuXHJcbiAgICAgICAgbGlzdC5wdXNoKHJlc291cmNlKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjb2xsZWN0UmVzb3VyY2VzKHNjZW5lLCB0ZXh0dXJlUmVzb3VyY2VMaXN0LCBnZW9tZXRyeVJlc291cmNlTGlzdCkge1xyXG4gICAgdmFyIHByZXZNYXRlcmlhbDtcclxuICAgIHZhciBwcmV2R2VvbWV0cnk7XHJcbiAgICBzY2VuZS50cmF2ZXJzZShmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgIGlmIChyZW5kZXJhYmxlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IHJlbmRlcmFibGUuZ2VvbWV0cnk7XHJcbiAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcblxyXG4gICAgICAgICAgICAvLyBUT0RPIG9wdGltaXplISFcclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsICE9PSBwcmV2TWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlVW5pZm9ybXMgPSBtYXRlcmlhbC5nZXRUZXh0dXJlVW5pZm9ybXMoKTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHUgPSAwOyB1IDwgdGV4dHVyZVVuaWZvcm1zLmxlbmd0aDsgdSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWZvcm1OYW1lID0gdGV4dHVyZVVuaWZvcm1zW3VdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBtYXRlcmlhbC51bmlmb3Jtc1t1bmlmb3JtTmFtZV0udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWZvcm1UeXBlID0gbWF0ZXJpYWwudW5pZm9ybXNbdW5pZm9ybU5hbWVdLnR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVHlwZSA9PT0gJ3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVVzZWQodmFsLCB0ZXh0dXJlUmVzb3VyY2VMaXN0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUgPT09ICd0dicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB2YWwubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxba10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVVc2VkKHZhbFtrXSwgdGV4dHVyZVJlc291cmNlTGlzdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGdlb21ldHJ5ICE9PSBwcmV2R2VvbWV0cnkpIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZWQoZ2VvbWV0cnksIGdlb21ldHJ5UmVzb3VyY2VMaXN0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcHJldk1hdGVyaWFsID0gbWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIHByZXZHZW9tZXRyeSA9IGdlb21ldHJ5O1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgLy8gVHJhY2sgQW1iaWVudEN1YmVtYXBcclxuICAgICAgICBpZiAoc2NlbmUubGlnaHRzW2tdLmN1YmVtYXApIHtcclxuICAgICAgICAgICAgdXBkYXRlVXNlZChzY2VuZS5saWdodHNba10uY3ViZW1hcCwgdGV4dHVyZVJlc291cmNlTGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBMb2FkIGEgdGV4dHVyZSBmcm9tIGltYWdlIG9yIHN0cmluZy5cclxuICogQHBhcmFtIHtJbWFnZUxpa2V9IGltZ1xyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIFRleHR1cmUgb3B0aW9ucy5cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbGlwWT10cnVlXSBJZiBmbGlwWS4gU2VlIHtAbGluayBjbGF5LlRleHR1cmUuZmxpcFl9XHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuY29udmVydFRvUE9UPWZhbHNlXSBGb3JjZSBjb252ZXJ0IE5vbmUgUG93ZXIgb2YgVHdvIHRleHR1cmUgdG8gUG93ZXIgb2YgdHdvIHNvIGl0IGNhbiBiZSB0aWxlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmFuaXNvdHJvcGljXSBBbmlzb3Ryb3BpYyBmaWx0ZXJpbmcuIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLmFuaXNvdHJvcGljfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMud3JhcFM9Y2xheS5UZXh0dXJlLlJFUEVBVF0gU2VlIHtAbGluayBjbGF5LlRleHR1cmUud3JhcFN9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy53cmFwVD1jbGF5LlRleHR1cmUuUkVQRUFUXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS53cmFwVH1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLm1pbkZpbHRlcj1jbGF5LlRleHR1cmUuTElORUFSX01JUE1BUF9MSU5FQVJdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLm1pbkZpbHRlcn1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLm1hZ0ZpbHRlcj1jbGF5LlRleHR1cmUuTElORUFSXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5tYWdGaWx0ZXJ9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5leHBvc3VyZV0gT25seSBiZSB1c2VkIHdoZW4gc291cmNlIGlzIGEgSERSIGltYWdlLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt1c2VDYWNoZV0gSWYgdXNlIGNhY2hlLlxyXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgYXBwLmxvYWRUZXh0dXJlKCdkaWZmdXNlTWFwLmpwZycpXHJcbiAqICAgICAgLnRoZW4oZnVuY3Rpb24gKHRleHR1cmUpIHtcclxuICogICAgICAgICAgbWF0ZXJpYWwuc2V0KCdkaWZmdXNlTWFwJywgdGV4dHVyZSk7XHJcbiAqICAgICAgfSk7XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUubG9hZFRleHR1cmUgPSBmdW5jdGlvbiAodXJsT3JJbWcsIG9wdHMsIHVzZUNhY2hlKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICB2YXIga2V5ID0gZ2V0S2V5RnJvbUltYWdlTGlrZSh1cmxPckltZyk7XHJcbiAgICBpZiAodXNlQ2FjaGUpIHtcclxuICAgICAgICBpZiAodGhpcy5fdGV4Q2FjaGUuZ2V0KGtleSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleENhY2hlLmdldChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIFRPRE8gUHJvbWlzZSA/XHJcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZSA9IHNlbGYubG9hZFRleHR1cmVTeW5jKHVybE9ySW1nLCBvcHRzKTtcclxuICAgICAgICBpZiAoIXRleHR1cmUuaXNSZW5kZXJhYmxlKCkpIHtcclxuICAgICAgICAgICAgdGV4dHVyZS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLl9kaXNwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc29sdmUodGV4dHVyZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmVycm9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLl9kaXNwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUodGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAodXNlQ2FjaGUpIHtcclxuICAgICAgICB0aGlzLl90ZXhDYWNoZS5wdXQoa2V5LCBwcm9taXNlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcm9taXNlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHRleHR1cmUgZnJvbSBpbWFnZSBvciBzdHJpbmcgc3luY2hyb25vdXNseS4gVGV4dHVyZSBjYW4gYmUgdXNlIGRpcmVjdGx5IGFuZCBkb24ndCBoYXZlIHRvIHdhaXQgZm9yIGl0J3MgbG9hZGVkLlxyXG4gKiBAcGFyYW0ge0ltYWdlTGlrZX0gaW1nXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gVGV4dHVyZSBvcHRpb25zLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmZsaXBZPXRydWVdIElmIGZsaXBZLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5mbGlwWX1cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5jb252ZXJ0VG9QT1Q9ZmFsc2VdIEZvcmNlIGNvbnZlcnQgTm9uZSBQb3dlciBvZiBUd28gdGV4dHVyZSB0byBQb3dlciBvZiB0d28gc28gaXQgY2FuIGJlIHRpbGVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuYW5pc290cm9waWNdIEFuaXNvdHJvcGljIGZpbHRlcmluZy4gU2VlIHtAbGluayBjbGF5LlRleHR1cmUuYW5pc290cm9waWN9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy53cmFwUz1jbGF5LlRleHR1cmUuUkVQRUFUXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS53cmFwU31cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLndyYXBUPWNsYXkuVGV4dHVyZS5SRVBFQVRdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLndyYXBUfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMubWluRmlsdGVyPWNsYXkuVGV4dHVyZS5MSU5FQVJfTUlQTUFQX0xJTkVBUl0gU2VlIHtAbGluayBjbGF5LlRleHR1cmUubWluRmlsdGVyfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMubWFnRmlsdGVyPWNsYXkuVGV4dHVyZS5MSU5FQVJdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLm1hZ0ZpbHRlcn1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmV4cG9zdXJlXSBPbmx5IGJlIHVzZWQgd2hlbiBzb3VyY2UgaXMgYSBIRFIgaW1hZ2UuXHJcbiAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgdmFyIHRleHR1cmUgPSBhcHAubG9hZFRleHR1cmUoJ2RpZmZ1c2VNYXAuanBnJywge1xyXG4gKiAgICAgIGFuaXNvdHJvcGljOiA4LFxyXG4gKiAgICAgIGZsaXBZOiBmYWxzZVxyXG4gKiAgfSk7XHJcbiAqICBtYXRlcmlhbC5zZXQoJ2RpZmZ1c2VNYXAnLCB0ZXh0dXJlKTtcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5sb2FkVGV4dHVyZVN5bmMgPSBmdW5jdGlvbiAodXJsT3JJbWcsIG9wdHMpIHtcclxuICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRChvcHRzKTtcclxuICAgIGlmICh0eXBlb2YgdXJsT3JJbWcgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgaWYgKHVybE9ySW1nLm1hdGNoKC8uaGRyJHxeZGF0YTphcHBsaWNhdGlvblxcL29jdGV0LXN0cmVhbS8pKSB7XHJcbiAgICAgICAgICAgIHRleHR1cmUgPSB0ZXh0dXJlVXRpbC5sb2FkVGV4dHVyZSh1cmxPckltZywge1xyXG4gICAgICAgICAgICAgICAgZXhwb3N1cmU6IG9wdHMgJiYgb3B0cy5leHBvc3VyZSxcclxuICAgICAgICAgICAgICAgIGZpbGVUeXBlOiAnaGRyJ1xyXG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmRpcnR5KCk7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnRyaWdnZXIoJ3N1Y2Nlc3MnKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRzKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlW2tleV0gPSBvcHRzW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRleHR1cmUubG9hZCh1cmxPckltZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNJbWFnZUxpa2VFbGVtZW50KHVybE9ySW1nKSkge1xyXG4gICAgICAgIHRleHR1cmUuaW1hZ2UgPSB1cmxPckltZztcclxuICAgICAgICB0ZXh0dXJlLmR5bmFtaWMgPSB1cmxPckltZyBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGV4dHVyZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSB0ZXh0dXJlIGZyb20gaW1hZ2Ugb3Igc3RyaW5nIHN5bmNocm9ub3VzbHkuIFRleHR1cmUgY2FuIGJlIHVzZSBkaXJlY3RseSBhbmQgZG9uJ3QgaGF2ZSB0byB3YWl0IGZvciBpdCdzIGxvYWRlZC5cclxuICogQHBhcmFtIHtJbWFnZUxpa2V9IGltZ1xyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIFRleHR1cmUgb3B0aW9ucy5cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbGlwWT1mYWxzZV0gSWYgZmxpcFkuIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLmZsaXBZfVxyXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgYXBwLmxvYWRUZXh0dXJlQ3ViZSh7XHJcbiAqICAgICAgcHg6ICdza3lib3gvcHguanBnJywgcHk6ICdza3lib3gvcHkuanBnJywgcHo6ICdza3lib3gvcHouanBnJyxcclxuICogICAgICBueDogJ3NreWJveC9ueC5qcGcnLCBueTogJ3NreWJveC9ueS5qcGcnLCBuejogJ3NreWJveC9uei5qcGcnXHJcbiAqICB9KS50aGVuKGZ1bmN0aW9uICh0ZXh0dXJlKSB7XHJcbiAqICAgICAgc2t5Ym94LnNldEVudmlyb25tZW50TWFwKHRleHR1cmUpO1xyXG4gKiAgfSlcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5sb2FkVGV4dHVyZUN1YmUgPSBmdW5jdGlvbiAoaW1nTGlzdCwgb3B0cykge1xyXG4gICAgdmFyIHRleHR1cmVDdWJlID0gdGhpcy5sb2FkVGV4dHVyZUN1YmVTeW5jKGltZ0xpc3QsIG9wdHMpO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBpZiAodGV4dHVyZUN1YmUuaXNSZW5kZXJhYmxlKCkpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0ZXh0dXJlQ3ViZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0ZXh0dXJlQ3ViZS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodGV4dHVyZUN1YmUpO1xyXG4gICAgICAgICAgICB9KS5lcnJvcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgdGV4dHVyZSBmcm9tIGltYWdlIG9yIHN0cmluZyBzeW5jaHJvbm91c2x5LiBUZXh0dXJlIGNhbiBiZSB1c2UgZGlyZWN0bHkgYW5kIGRvbid0IGhhdmUgdG8gd2FpdCBmb3IgaXQncyBsb2FkZWQuXHJcbiAqIEBwYXJhbSB7SW1hZ2VMaWtlfSBpbWdcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSBUZXh0dXJlIG9wdGlvbnMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZmxpcFk9ZmFsc2VdIElmIGZsaXBZLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5mbGlwWX1cclxuICogQHJldHVybiB7Y2xheS5UZXh0dXJlQ3ViZX1cclxuICogQGV4YW1wbGVcclxuICogIHZhciB0ZXh0dXJlID0gYXBwLmxvYWRUZXh0dXJlQ3ViZVN5bmMoe1xyXG4gKiAgICAgIHB4OiAnc2t5Ym94L3B4LmpwZycsIHB5OiAnc2t5Ym94L3B5LmpwZycsIHB6OiAnc2t5Ym94L3B6LmpwZycsXHJcbiAqICAgICAgbng6ICdza3lib3gvbnguanBnJywgbnk6ICdza3lib3gvbnkuanBnJywgbno6ICdza3lib3gvbnouanBnJ1xyXG4gKiAgfSk7XHJcbiAqICBza3lib3guc2V0RW52aXJvbm1lbnRNYXAodGV4dHVyZSk7XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUubG9hZFRleHR1cmVDdWJlU3luYyA9IGZ1bmN0aW9uIChpbWdMaXN0LCBvcHRzKSB7XHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuICAgIG9wdHMuZmxpcFkgPSBvcHRzLmZsaXBZIHx8IGZhbHNlO1xyXG4gICAgdmFyIHRleHR1cmVDdWJlID0gbmV3IFRleHR1cmVDdWJlKG9wdHMpO1xyXG4gICAgaWYgKCFpbWdMaXN0IHx8ICFpbWdMaXN0LnB4IHx8ICFpbWdMaXN0Lm54IHx8ICFpbWdMaXN0LnB5IHx8ICFpbWdMaXN0Lm55IHx8ICFpbWdMaXN0LnB6IHx8ICFpbWdMaXN0Lm56KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGN1YmVtYXAgZm9ybWF0LiBTaG91bGQgYmUgYW4gb2JqZWN0IGluY2x1ZGluZyBweCxueCxweSxueSxweixueicpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBpbWdMaXN0LnB4ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRleHR1cmVDdWJlLmxvYWQoaW1nTGlzdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0ZXh0dXJlQ3ViZS5pbWFnZSA9IHV0aWwuY2xvbmUoaW1nTGlzdCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGV4dHVyZUN1YmU7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgbWF0ZXJpYWwuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fFN0YW5kYXJkTWF0ZXJpYWxNUkNvbmZpZ30gbWF0ZXJpYWxDb25maWcuIG1hdGVyaWFsQ29uZmlnIGNvbnRhaW5zIGBzaGFkZXJgLCBgdHJhbnNwYXJlbnRgIGFuZCB1bmlmb3JtcyB0aGF0IHVzZWQgaW4gY29ycmVzcG9uZGluZyB1bmlmb3Jtcy5cclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmlmb3JtcyBjYW4gYmUgYGNvbG9yYCwgYGFscGhhYCBgZGlmZnVzZU1hcGAgZXRjLlxyXG4gKiBAcGFyYW0ge3N0cmluZ3xjbGF5LlNoYWRlcn0gW3NoYWRlcj0nY2xheS5zdGFuZGFyZE1SJ10gRGVmYXVsdCB0byBiZSBzdGFuZGFyZCBzaGFkZXIgd2l0aCBtZXRhbG5lc3MgYW5kIHJvdWdobmVzcyB3b3JrZmxvdy5cclxuICogQHBhcmFtIHtib29sZWFufSBbdHJhbnNwYXJlbnQ9ZmFsc2VdIElmIG1hdGVyaWFsIGlzIHRyYW5zcGFyZW50LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt0ZXh0dXJlQ29udmVydFRvUE9UPWZhbHNlXSBGb3JjZSBjb252ZXJ0IE5vbmUgUG93ZXIgb2YgVHdvIHRleHR1cmUgdG8gUG93ZXIgb2YgdHdvIHNvIGl0IGNhbiBiZSB0aWxlZC5cclxuICogQHBhcmFtIHtib29sZWFufSBbdGV4dHVyZUZsaXBZPXRydWVdIElmIGZsaXAgeSBvZiB0ZXh0dXJlLlxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbdGV4dHVyZUxvYWRlZF0gQ2FsbGJhY2sgd2hlbiBzaW5nbGUgdGV4dHVyZSBsb2FkZWQuXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFt0ZXh0dXJlc1JlYWR5XSBDYWxsYmFjayB3aGVuIGFsbCB0ZXh0dXJlIGxvYWRlZC5cclxuICogQHJldHVybiB7Y2xheS5NYXRlcmlhbH1cclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVNYXRlcmlhbCA9IGZ1bmN0aW9uIChtYXRDb25maWcpIHtcclxuICAgIG1hdENvbmZpZyA9IG1hdENvbmZpZyB8fCB7fTtcclxuICAgIG1hdENvbmZpZy5zaGFkZXIgPSBtYXRDb25maWcuc2hhZGVyIHx8ICdjbGF5LnN0YW5kYXJkTVInO1xyXG4gICAgdmFyIHNoYWRlciA9IG1hdENvbmZpZy5zaGFkZXIgaW5zdGFuY2VvZiBTaGFkZXIgPyBtYXRDb25maWcuc2hhZGVyIDogc2hhZGVyTGlicmFyeS5nZXQobWF0Q29uZmlnLnNoYWRlcik7XHJcbiAgICB2YXIgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgIHNoYWRlcjogc2hhZGVyXHJcbiAgICB9KTtcclxuICAgIGlmIChtYXRDb25maWcubmFtZSkge1xyXG4gICAgICAgIG1hdGVyaWFsLm5hbWUgPSBtYXRDb25maWcubmFtZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdGV4dHVyZXNMb2FkaW5nID0gW107XHJcbiAgICBmdW5jdGlvbiBtYWtlVGV4dHVyZVNldHRlcihrZXkpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRleHR1cmUpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybShrZXksIHRleHR1cmUpO1xyXG4gICAgICAgICAgICBtYXRDb25maWcudGV4dHVyZUxvYWRlZCAmJiBtYXRDb25maWcudGV4dHVyZUxvYWRlZChrZXksIHRleHR1cmUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZm9yICh2YXIga2V5IGluIG1hdENvbmZpZykge1xyXG4gICAgICAgIGlmIChtYXRlcmlhbC51bmlmb3Jtc1trZXldKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWwgPSBtYXRDb25maWdba2V5XTtcclxuICAgICAgICAgICAgaWYgKChtYXRlcmlhbC51bmlmb3Jtc1trZXldLnR5cGUgPT09ICd0JyB8fCBpc0ltYWdlTGlrZUVsZW1lbnQodmFsKSlcclxuICAgICAgICAgICAgICAgICYmICEodmFsIGluc3RhbmNlb2YgVGV4dHVyZSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUcnkgdG8gbG9hZCBhIHRleHR1cmUuXHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlc0xvYWRpbmcucHVzaCh0aGlzLmxvYWRUZXh0dXJlKHZhbCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1BPVDogbWF0Q29uZmlnLnRleHR1cmVDb252ZXJ0VG9QT1QgfHwgZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZmxpcFk6IG1hdENvbmZpZy50ZXh0dXJlRmxpcFkgPT0gbnVsbCA/IHRydWUgOiBtYXRDb25maWcudGV4dHVyZUZsaXBZXHJcbiAgICAgICAgICAgICAgICB9KS50aGVuKG1ha2VUZXh0dXJlU2V0dGVyKGtleSkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oa2V5LCB2YWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChtYXRDb25maWcudHJhbnNwYXJlbnQpIHtcclxuICAgICAgICBtYXRDb25maWcuZGVwdGhNYXNrID0gZmFsc2U7XHJcbiAgICAgICAgbWF0Q29uZmlnLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKG1hdENvbmZpZy50ZXh0dXJlc1JlYWR5KSB7XHJcbiAgICAgICAgUHJvbWlzZS5hbGwodGV4dHVyZXNMb2FkaW5nKS50aGVuKGZ1bmN0aW9uICh0ZXh0dXJlcykge1xyXG4gICAgICAgICAgICBtYXRDb25maWcudGV4dHVyZXNSZWFkeSh0ZXh0dXJlcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1hdGVyaWFsO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGN1YmUgbWVzaCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZSBvciB0aGUgZ2l2ZW4gcGFyZW50IG5vZGUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge09iamVjdHxjbGF5Lk1hdGVyaWFsfSBbbWF0ZXJpYWxdXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fG51bWJlcn0gW3N1YmRpdmlzaW9uPTFdIFN1YmRpdmlzaW9uIG9mIGN1YmUuXHJcbiAqICAgICAgICAgIENhbiBiZSBhIG51bWJlciB0byByZXByZXNlbnQgYm90aCB3aWR0aCwgaGVpZ2h0IGFuZCBkZXB0aCBkaW1lbnNpb25zLiBPciBhbiBhcnJheSB0byByZXByZXNlbnQgdGhlbSByZXNwZWN0aXZlbHkuXHJcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICogQGV4YW1wbGVcclxuICogIC8vIENyZWF0ZSBhIHdoaXRlIGN1YmUuXHJcbiAqICBhcHAuY3JlYXRlQ3ViZSgpXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQ3ViZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCwgcGFyZW50Tm9kZSwgc3ViZGl2KSB7XHJcbiAgICBpZiAoc3ViZGl2ID09IG51bGwpIHtcclxuICAgICAgICBzdWJkaXYgPSAxO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBzdWJkaXYgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gW3N1YmRpdiwgc3ViZGl2LCBzdWJkaXZdO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBnZW9LZXkgPSAnY3ViZS0nICsgc3ViZGl2LmpvaW4oJy0nKTtcclxuICAgIHZhciBjdWJlID0gdGhpcy5fZ2VvQ2FjaGUuZ2V0KGdlb0tleSk7XHJcbiAgICBpZiAoIWN1YmUpIHtcclxuICAgICAgICBjdWJlID0gbmV3IEN1YmVHZW8oe1xyXG4gICAgICAgICAgICB3aWR0aFNlZ21lbnRzOiBzdWJkaXZbMF0sXHJcbiAgICAgICAgICAgIGhlaWdodFNlZ21lbnRzOiBzdWJkaXZbMV0sXHJcbiAgICAgICAgICAgIGRlcHRoU2VnbWVudHM6IHN1YmRpdlsyXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGN1YmUuZ2VuZXJhdGVUYW5nZW50cygpO1xyXG4gICAgICAgIHRoaXMuX2dlb0NhY2hlLnB1dChnZW9LZXksIGN1YmUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVzaChjdWJlLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgY3ViZSBtZXNoIHRoYXQgY2FtZXJhIGlzIGluc2lkZSB0aGUgY3ViZS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7T2JqZWN0fGNsYXkuTWF0ZXJpYWx9IFttYXRlcmlhbF1cclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtwYXJlbnROb2RlXSBQYXJlbnQgbm9kZSB0byBhcHBlbmQuIERlZmF1bHQgdG8gYmUgc2NlbmUuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58bnVtYmVyfSBbc3ViZGl2aXNpb249MV0gU3ViZGl2aXNpb24gb2YgY3ViZS5cclxuICogICAgICAgICAgQ2FuIGJlIGEgbnVtYmVyIHRvIHJlcHJlc2VudCBib3RoIHdpZHRoLCBoZWlnaHQgYW5kIGRlcHRoIGRpbWVuc2lvbnMuIE9yIGFuIGFycmF5IHRvIHJlcHJlc2VudCB0aGVtIHJlc3BlY3RpdmVseS5cclxuICogQHJldHVybiB7Y2xheS5NZXNofVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgLy8gQ3JlYXRlIGEgd2hpdGUgY3ViZSBpbnNpZGUuXHJcbiAqICBhcHAuY3JlYXRlQ3ViZUluc2lkZSgpXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQ3ViZUluc2lkZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCwgcGFyZW50Tm9kZSwgc3ViZGl2KSB7XHJcbiAgICBpZiAoc3ViZGl2ID09IG51bGwpIHtcclxuICAgICAgICBzdWJkaXYgPSAxO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBzdWJkaXYgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gW3N1YmRpdiwgc3ViZGl2LCBzdWJkaXZdO1xyXG4gICAgfVxyXG4gICAgdmFyIGdlb0tleSA9ICdjdWJlSW5zaWRlLScgKyBzdWJkaXYuam9pbignLScpO1xyXG4gICAgdmFyIGN1YmUgPSB0aGlzLl9nZW9DYWNoZS5nZXQoZ2VvS2V5KTtcclxuICAgIGlmICghY3ViZSkge1xyXG4gICAgICAgIGN1YmUgPSBuZXcgQ3ViZUdlbyh7XHJcbiAgICAgICAgICAgIGluc2lkZTogdHJ1ZSxcclxuICAgICAgICAgICAgd2lkdGhTZWdtZW50czogc3ViZGl2WzBdLFxyXG4gICAgICAgICAgICBoZWlnaHRTZWdtZW50czogc3ViZGl2WzFdLFxyXG4gICAgICAgICAgICBkZXB0aFNlZ21lbnRzOiBzdWJkaXZbMl1cclxuICAgICAgICB9KTtcclxuICAgICAgICBjdWJlLmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgICAgICB0aGlzLl9nZW9DYWNoZS5wdXQoZ2VvS2V5LCBjdWJlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVNZXNoKGN1YmUsIG1hdGVyaWFsLCBwYXJlbnROb2RlKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBzcGhlcmUgbWVzaCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZSBvciB0aGUgZ2l2ZW4gcGFyZW50IG5vZGUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge09iamVjdHxjbGF5Lk1hdGVyaWFsfSBbbWF0ZXJpYWxdXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N1YmRpdmlzaW9uPTIwXSBTdWJkaXZpc2lvbiBvZiBzcGhlcmUuXHJcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICogQGV4YW1wbGVcclxuICogIC8vIENyZWF0ZSBhIHNlbWktdHJhbnNwYXJlbnQgc3BoZXJlLlxyXG4gKiAgYXBwLmNyZWF0ZVNwaGVyZSh7XHJcbiAqICAgICAgY29sb3I6IFswLCAwLCAxXSxcclxuICogICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICogICAgICBhbHBoYTogMC41XHJcbiAqICB9KVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZVNwaGVyZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCwgcGFyZW50Tm9kZSwgc3ViZGl2aXNpb24pIHtcclxuICAgIGlmIChzdWJkaXZpc2lvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgc3ViZGl2aXNpb24gPSAyMDtcclxuICAgIH1cclxuICAgIHZhciBnZW9LZXkgPSAnc3BoZXJlLScgKyBzdWJkaXZpc2lvbjtcclxuICAgIHZhciBzcGhlcmUgPSB0aGlzLl9nZW9DYWNoZS5nZXQoZ2VvS2V5KTtcclxuICAgIGlmICghc3BoZXJlKSB7XHJcbiAgICAgICAgc3BoZXJlID0gbmV3IFNwaGVyZUdlbyh7XHJcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IHN1YmRpdmlzaW9uICogMixcclxuICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IHN1YmRpdmlzaW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc3BoZXJlLmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgICAgICB0aGlzLl9nZW9DYWNoZS5wdXQoZ2VvS2V5LCBzcGhlcmUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVzaChzcGhlcmUsIG1hdGVyaWFsLCBwYXJlbnROb2RlKTtcclxufTtcclxuXHJcbi8vIFRPRE8gbWF5IGJlIG1vZGlmaWVkP1xyXG4vKipcclxuICogQ3JlYXRlIGEgcGxhbmUgbWVzaCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZSBvciB0aGUgZ2l2ZW4gcGFyZW50IG5vZGUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge09iamVjdHxjbGF5Lk1hdGVyaWFsfSBbbWF0ZXJpYWxdXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fG51bWJlcn0gW3N1YmRpdmlzaW9uPTFdIFN1YmRpdmlzaW9uIG9mIHBsYW5lLlxyXG4gKiAgICAgICAgICBDYW4gYmUgYSBudW1iZXIgdG8gcmVwcmVzZW50IGJvdGggd2lkdGggYW5kIGhlaWdodCBkaW1lbnNpb25zLiBPciBhbiBhcnJheSB0byByZXByZXNlbnQgdGhlbSByZXNwZWN0aXZlbHkuXHJcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICogQGV4YW1wbGVcclxuICogIC8vIENyZWF0ZSBhIHJlZCBjb2xvciBwbGFuZS5cclxuICogIGFwcC5jcmVhdGVQbGFuZSh7XHJcbiAqICAgICAgY29sb3I6IFsxLCAwLCAwXVxyXG4gKiAgfSlcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVQbGFuZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCwgcGFyZW50Tm9kZSwgc3ViZGl2KSB7XHJcbiAgICBpZiAoc3ViZGl2ID09IG51bGwpIHtcclxuICAgICAgICBzdWJkaXYgPSAxO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBzdWJkaXYgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gW3N1YmRpdiwgc3ViZGl2XTtcclxuICAgIH1cclxuICAgIHZhciBnZW9LZXkgPSAncGxhbmUtJyArIHN1YmRpdi5qb2luKCctJyk7XHJcbiAgICB2YXIgcGxhbmVHZW8gPSB0aGlzLl9nZW9DYWNoZS5nZXQoZ2VvS2V5KTtcclxuICAgIGlmICghcGxhbmVHZW8pIHtcclxuICAgICAgICBwbGFuZUdlbyA9IG5ldyBQbGFuZUdlbyh7XHJcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IHN1YmRpdlswXSxcclxuICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IHN1YmRpdlsxXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHBsYW5lR2VvLmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgICAgICB0aGlzLl9nZW9DYWNoZS5wdXQoZ2VvS2V5LCBwbGFuZUdlbyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVNZXNoKHBsYW5lR2VvLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIG1lc2ggd2l0aCBwYXJhbWV0cmljIHN1cmZhY2UgZnVuY3Rpb25cclxuICogQHBhcmFtIHtPYmplY3R8Y2xheS5NYXRlcmlhbH0gW21hdGVyaWFsXVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRvIGFwcGVuZC4gRGVmYXVsdCB0byBiZSBzY2VuZS5cclxuICogQHBhcmFtIHtPYmplY3R9IGdlbmVyYXRvclxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IueFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IueVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IuelxyXG4gKiBAcGFyYW0ge0FycmF5fSBbZ2VuZXJhdG9yLnU9WzAsIDEsIDAuMDVdXVxyXG4gKiBAcGFyYW0ge0FycmF5fSBbZ2VuZXJhdG9yLnY9WzAsIDEsIDAuMDVdXVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlUGFyYW1ldHJpY1N1cmZhY2UgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIHBhcmVudE5vZGUsIGdlbmVyYXRvcikge1xyXG4gICAgdmFyIGdlbyA9IG5ldyBQYXJhbWV0cmljU3VyZmFjZUdlbyh7XHJcbiAgICAgICAgZ2VuZXJhdG9yOiBnZW5lcmF0b3JcclxuICAgIH0pO1xyXG4gICAgZ2VvLmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZU1lc2goZ2VvLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGdlbmVyYWwgbWVzaCB3aXRoIGdpdmVuIGdlb21ldHJ5IGluc3RhbmNlIGFuZCBtYXRlcmlhbCBjb25maWcuXHJcbiAqIEBwYXJhbSB7Y2xheS5HZW9tZXRyeX0gZ2VvbWV0cnlcclxuICogQHJldHVybiB7Y2xheS5NZXNofVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZU1lc2ggPSBmdW5jdGlvbiAoZ2VvbWV0cnksIG1hdCwgcGFyZW50Tm9kZSkge1xyXG4gICAgdmFyIG1lc2ggPSBuZXcgTWVzaCh7XHJcbiAgICAgICAgZ2VvbWV0cnk6IGdlb21ldHJ5LFxyXG4gICAgICAgIG1hdGVyaWFsOiBtYXQgaW5zdGFuY2VvZiBNYXRlcmlhbCA/IG1hdCA6IHRoaXMuY3JlYXRlTWF0ZXJpYWwobWF0KVxyXG4gICAgfSk7XHJcbiAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZSB8fCB0aGlzLnNjZW5lO1xyXG4gICAgcGFyZW50Tm9kZS5hZGQobWVzaCk7XHJcbiAgICByZXR1cm4gbWVzaDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYW4gZW1wdHkgbm9kZVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gcGFyZW50Tm9kZVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlTm9kZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlKSB7XHJcbiAgICB2YXIgbm9kZSA9IG5ldyBOb2RlKCk7XHJcbiAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZSB8fCB0aGlzLnNjZW5lO1xyXG4gICAgcGFyZW50Tm9kZS5hZGQobm9kZSk7XHJcbiAgICByZXR1cm4gbm9kZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBwZXJzcGVjdGl2ZSBvciBvcnRob2dyYXBoaWMgY2FtZXJhIGFuZCBhZGQgaXQgdG8gdGhlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gcG9zaXRpb25cclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5LlZlY3RvcjN9IHRhcmdldFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3R5cGU9XCJwZXJzcGVjdGl2ZVwiXSBDYW4gYmUgJ3BlcnNwZWN0aXZlJyBvciAnb3J0aG9ncmFwaGljJyhpbiBzaG9ydCAnb3J0aG8nKVxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gW2V4dGVudF0gRXh0ZW50IGlzIGF2YWlsYWJsZSBvbmx5IGlmIHR5cGUgaXMgb3J0aG9ncmFwaGljLlxyXG4gKiBAcmV0dXJuIHtjbGF5LmNhbWVyYS5QZXJzcGVjdGl2ZXxjbGF5LmNhbWVyYS5PcnRob2dyYXBoaWN9XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQ2FtZXJhID0gZnVuY3Rpb24gKHBvc2l0aW9uLCB0YXJnZXQsIHR5cGUsIGV4dGVudCkge1xyXG4gICAgdmFyIENhbWVyYUN0b3I7XHJcbiAgICB2YXIgaXNPcnRobyA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09ICdvcnRobycgfHwgdHlwZSA9PT0gJ29ydGhvZ3JhcGhpYycpIHtcclxuICAgICAgICBpc09ydGhvID0gdHJ1ZTtcclxuICAgICAgICBDYW1lcmFDdG9yID0gT3J0aG9ncmFwaGljQ2FtZXJhO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHR5cGUgJiYgdHlwZSAhPT0gJ3BlcnNwZWN0aXZlJykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmtvd24gY2FtZXJhIHR5cGUgJyArIHR5cGUgKyAnLiBVc2UgZGVmYXVsdCBwZXJzcGVjdGl2ZSBjYW1lcmEnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgQ2FtZXJhQ3RvciA9IFBlcnNwZWN0aXZlQ2FtZXJhO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjYW1lcmEgPSBuZXcgQ2FtZXJhQ3RvcigpO1xyXG4gICAgaWYgKHBvc2l0aW9uIGluc3RhbmNlb2YgVmVjdG9yMykge1xyXG4gICAgICAgIGNhbWVyYS5wb3NpdGlvbi5jb3B5KHBvc2l0aW9uKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHBvc2l0aW9uIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICBjYW1lcmEucG9zaXRpb24uc2V0QXJyYXkocG9zaXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKHRhcmdldFswXSwgdGFyZ2V0WzFdLCB0YXJnZXRbMl0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcclxuICAgICAgICBjYW1lcmEubG9va0F0KHRhcmdldCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4dGVudCAmJiBpc09ydGhvKSB7XHJcbiAgICAgICAgZXh0ZW50ID0gZXh0ZW50LmFycmF5IHx8IGV4dGVudDtcclxuICAgICAgICBjYW1lcmEubGVmdCA9IC1leHRlbnRbMF0gLyAyO1xyXG4gICAgICAgIGNhbWVyYS5yaWdodCA9IGV4dGVudFswXSAvIDI7XHJcbiAgICAgICAgY2FtZXJhLnRvcCA9IGV4dGVudFsxXSAvIDI7XHJcbiAgICAgICAgY2FtZXJhLmJvdHRvbSA9IC1leHRlbnRbMV0gLyAyO1xyXG4gICAgICAgIGNhbWVyYS5uZWFyID0gMDtcclxuICAgICAgICBjYW1lcmEuZmFyID0gZXh0ZW50WzJdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgY2FtZXJhLmFzcGVjdCA9IHRoaXMucmVuZGVyZXIuZ2V0Vmlld3BvcnRBc3BlY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChjYW1lcmEpO1xyXG5cclxuICAgIHJldHVybiBjYW1lcmE7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgZGlyZWN0aW9uYWwgbGlnaHQgYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58Y2xheS5WZWN0b3IzfSBkaXIgQSBWZWN0b3IzIG9yIGFycmF5IHRvIHJlcHJlc2VudCB0aGUgZGlyZWN0aW9uLlxyXG4gKiBAcGFyYW0ge0NvbG9yfSBbY29sb3I9JyNmZmYnXSBDb2xvciBvZiBkaXJlY3Rpb25hbCBsaWdodCwgZGVmYXVsdCB0byBiZSB3aGl0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtpbnRlbnNpdHldIEludGVuc2l0eSBvZiBkaXJlY3Rpb25hbCBsaWdodCwgZGVmYXVsdCB0byBiZSAxLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgYXBwLmNyZWF0ZURpcmVjdGlvbmFsTGlnaHQoWy0xLCAtMSwgLTFdLCAnI2ZmZicsIDIpO1xyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZURpcmVjdGlvbmFsTGlnaHQgPSBmdW5jdGlvbiAoZGlyLCBjb2xvciwgaW50ZW5zaXR5KSB7XHJcbiAgICB2YXIgbGlnaHQgPSBuZXcgRGlyZWN0aW9uYWxMaWdodCgpO1xyXG4gICAgaWYgKGRpciBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcclxuICAgICAgICBkaXIgPSBkaXIuYXJyYXk7XHJcbiAgICB9XHJcbiAgICBsaWdodC5wb3NpdGlvbi5zZXRBcnJheShkaXIpLm5lZ2F0ZSgpO1xyXG4gICAgbGlnaHQubG9va0F0KFZlY3RvcjMuWkVSTyk7XHJcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbG9yID0gcGFyc2VDb2xvcihjb2xvcik7XHJcbiAgICB9XHJcbiAgICBjb2xvciAhPSBudWxsICYmIChsaWdodC5jb2xvciA9IGNvbG9yKTtcclxuICAgIGludGVuc2l0eSAhPSBudWxsICYmIChsaWdodC5pbnRlbnNpdHkgPSBpbnRlbnNpdHkpO1xyXG5cclxuICAgIHRoaXMuc2NlbmUuYWRkKGxpZ2h0KTtcclxuICAgIHJldHVybiBsaWdodDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBzcG90IGxpZ2h0IGFuZCBhZGQgaXQgdG8gdGhlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gcG9zaXRpb24gUG9zaXRpb24gb2YgdGhlIHNwb3QgbGlnaHQuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58Y2xheS5WZWN0b3IzfSBbdGFyZ2V0XSBUYXJnZXQgcG9zaXRpb24gd2hlcmUgc3BvdCBsaWdodCBwb2ludHMgdG8uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcmFuZ2U9MjBdIEZhbGxvZmYgcmFuZ2Ugb2Ygc3BvdCBsaWdodC4gRGVmYXVsdCB0byBiZSAyMC5cclxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2Ygc3BvdCBsaWdodCwgZGVmYXVsdCB0byBiZSB3aGl0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtpbnRlbnNpdHk9MV0gSW50ZW5zaXR5IG9mIHNwb3QgbGlnaHQsIGRlZmF1bHQgdG8gYmUgMS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt1bWJyYUFuZ2xlPTMwXSBVbWJyYSBhbmdsZSBvZiBzcG90IGxpZ2h0LiBEZWZhdWx0IHRvIGJlIDMwIGRlZ3JlZSBmcm9tIHRoZSBtaWRkbGUgbGluZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwZW51bWJyYUFuZ2xlPTQ1XSBQZW51bWJyYSBhbmdsZSBvZiBzcG90IGxpZ2h0LiBEZWZhdWx0IHRvIGJlIDQ1IGRlZ3JlZSBmcm9tIHRoZSBtaWRkbGUgbGluZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogIGFwcC5jcmVhdGVTcG90TGlnaHQoWzUsIDUsIDVdLCBbMCwgMCwgMF0sIDIwLCAjOTAwKTtcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVTcG90TGlnaHQgPSBmdW5jdGlvbiAocG9zaXRpb24sIHRhcmdldCwgcmFuZ2UsIGNvbG9yLCBpbnRlbnNpdHksIHVtYnJhQW5nbGUsIHBlbnVtYnJhQW5nbGUpIHtcclxuICAgIHZhciBsaWdodCA9IG5ldyBTcG90TGlnaHQoKTtcclxuICAgIGxpZ2h0LnBvc2l0aW9uLnNldEFycmF5KHBvc2l0aW9uIGluc3RhbmNlb2YgVmVjdG9yMyA/IHBvc2l0aW9uLmFycmF5IDogcG9zaXRpb24pO1xyXG5cclxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKHRhcmdldFswXSwgdGFyZ2V0WzFdLCB0YXJnZXRbMl0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcclxuICAgICAgICBsaWdodC5sb29rQXQodGFyZ2V0KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbG9yID0gcGFyc2VDb2xvcihjb2xvcik7XHJcbiAgICB9XHJcbiAgICByYW5nZSAhPSBudWxsICYmIChsaWdodC5yYW5nZSA9IHJhbmdlKTtcclxuICAgIGNvbG9yICE9IG51bGwgJiYgKGxpZ2h0LmNvbG9yID0gY29sb3IpO1xyXG4gICAgaW50ZW5zaXR5ICE9IG51bGwgJiYgKGxpZ2h0LmludGVuc2l0eSA9IGludGVuc2l0eSk7XHJcbiAgICB1bWJyYUFuZ2xlICE9IG51bGwgJiYgKGxpZ2h0LnVtYnJhQW5nbGUgPSB1bWJyYUFuZ2xlKTtcclxuICAgIHBlbnVtYnJhQW5nbGUgIT0gbnVsbCAmJiAobGlnaHQucGVudW1icmFBbmdsZSA9IHBlbnVtYnJhQW5nbGUpO1xyXG5cclxuICAgIHRoaXMuc2NlbmUuYWRkKGxpZ2h0KTtcclxuXHJcbiAgICByZXR1cm4gbGlnaHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgcG9pbnQgbGlnaHQuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58Y2xheS5WZWN0b3IzfSBwb3NpdGlvbiBQb3NpdGlvbiBvZiBwb2ludCBsaWdodC4uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcmFuZ2U9MTAwXSBGYWxsb2ZmIHJhbmdlIG9mIHBvaW50IGxpZ2h0LlxyXG4gKiBAcGFyYW0ge0NvbG9yfSBbY29sb3I9JyNmZmYnXSBDb2xvciBvZiBwb2ludCBsaWdodC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtpbnRlbnNpdHk9MV0gSW50ZW5zaXR5IG9mIHBvaW50IGxpZ2h0LlxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZVBvaW50TGlnaHQgPSBmdW5jdGlvbiAocG9zaXRpb24sIHJhbmdlLCBjb2xvciwgaW50ZW5zaXR5KSB7XHJcbiAgICB2YXIgbGlnaHQgPSBuZXcgUG9pbnRMaWdodCgpO1xyXG4gICAgbGlnaHQucG9zaXRpb24uc2V0QXJyYXkocG9zaXRpb24gaW5zdGFuY2VvZiBWZWN0b3IzID8gcG9zaXRpb24uYXJyYXkgOiBwb3NpdGlvbik7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb2xvciA9IHBhcnNlQ29sb3IoY29sb3IpO1xyXG4gICAgfVxyXG4gICAgcmFuZ2UgIT0gbnVsbCAmJiAobGlnaHQucmFuZ2UgPSByYW5nZSk7XHJcbiAgICBjb2xvciAhPSBudWxsICYmIChsaWdodC5jb2xvciA9IGNvbG9yKTtcclxuICAgIGludGVuc2l0eSAhPSBudWxsICYmIChsaWdodC5pbnRlbnNpdHkgPSBpbnRlbnNpdHkpO1xyXG5cclxuICAgIHRoaXMuc2NlbmUuYWRkKGxpZ2h0KTtcclxuXHJcbiAgICByZXR1cm4gbGlnaHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgYW1iaWVudCBsaWdodC5cclxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2YgYW1iaWVudCBsaWdodC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtpbnRlbnNpdHk9MV0gSW50ZW5zaXR5IG9mIGFtYmllbnQgbGlnaHQuXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQW1iaWVudExpZ2h0ID0gZnVuY3Rpb24gKGNvbG9yLCBpbnRlbnNpdHkpIHtcclxuICAgIHZhciBsaWdodCA9IG5ldyBBbWJpZW50TGlnaHQoKTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbG9yID0gcGFyc2VDb2xvcihjb2xvcik7XHJcbiAgICB9XHJcbiAgICBjb2xvciAhPSBudWxsICYmIChsaWdodC5jb2xvciA9IGNvbG9yKTtcclxuICAgIGludGVuc2l0eSAhPSBudWxsICYmIChsaWdodC5pbnRlbnNpdHkgPSBpbnRlbnNpdHkpO1xyXG5cclxuICAgIHRoaXMuc2NlbmUuYWRkKGxpZ2h0KTtcclxuXHJcbiAgICByZXR1cm4gbGlnaHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFuIGN1YmVtYXAgYW1iaWVudCBsaWdodCBhbmQgYW4gc3BoZXJpY2FsIGhhcm1vbmljIGFtYmllbnQgbGlnaHRcclxuICogZm9yIHNwZWN1bGFyIGFuZCBkaWZmdXNlIGxpZ2h0aW5nIGluIFBCUiByZW5kZXJpbmdcclxuICogQHBhcmFtIHtJbWFnZUxpa2V8VGV4dHVyZUN1YmV9IFtlbnZJbWFnZV0gUGFub3JhbWEgZW52aXJvbm1lbnQgaW1hZ2UsIEhEUiBmb3JtYXQgaXMgYmV0dGVyLiBPciBhIHByZSBsb2FkZWQgdGV4dHVyZSBjdWJlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3BlY3VsYXJJbnRlbnN0aXR5PTAuN10gSW50ZW5zaXR5IG9mIHNwZWN1bGFyIGxpZ2h0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2RpZmZ1c2VJbnRlbnN0aXR5PTAuN10gSW50ZW5zaXR5IG9mIGRpZmZ1c2UgbGlnaHQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZXhwb3N1cmU9MV0gRXhwb3N1cmUgb2YgSERSIGltYWdlLiBPbmx5IGlmIGltYWdlIGluIGZpcnN0IHBhcmFtdGVyIGlzIEhEUi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVmaWx0ZXJlZEN1YmVtYXBTaXplPTMyXSBUaGUgc2l6ZSBvZiBwcmVmaWxlcnRlZCBjdWJlbWFwLiBMYXJnZXIgdmFsdWUgd2lsbCB0YWtlIG1vcmUgdGltZSB0byBkbyBleHBlbnNpdmUgcHJlZmlsdGVyaW5nLlxyXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZUFtYmllbnRDdWJlbWFwTGlnaHQgPSBmdW5jdGlvbiAoZW52SW1hZ2UsIHNwZWNJbnRlbnNpdHksIGRpZmZJbnRlbnNpdHksIGV4cG9zdXJlLCBwcmVmaWx0ZXJlZEN1YmVtYXBTaXplKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICBpZiAoZXhwb3N1cmUgPT0gbnVsbCkge1xyXG4gICAgICAgIGV4cG9zdXJlID0gMDtcclxuICAgIH1cclxuICAgIGlmIChwcmVmaWx0ZXJlZEN1YmVtYXBTaXplID09IG51bGwpIHtcclxuICAgICAgICBwcmVmaWx0ZXJlZEN1YmVtYXBTaXplID0gMzI7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHNjZW5lID0gdGhpcy5zY2VuZTtcclxuXHJcbiAgICB2YXIgbG9hZFByb21pc2U7XHJcbiAgICBpZiAoZW52SW1hZ2UudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlQ3ViZScpIHtcclxuICAgICAgICBsb2FkUHJvbWlzZSA9IGVudkltYWdlLmlzUmVuZGVyYWJsZSgpXHJcbiAgICAgICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKGVudkltYWdlKVxyXG4gICAgICAgICAgICA6IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgICAgIGVudkltYWdlLnN1Y2Nlc3MoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZW52SW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgbG9hZFByb21pc2UgPSB0aGlzLmxvYWRUZXh0dXJlKGVudkltYWdlLCB7XHJcbiAgICAgICAgICAgIGV4cG9zdXJlOiBleHBvc3VyZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsb2FkUHJvbWlzZS50aGVuKGZ1bmN0aW9uIChlbnZUZXh0dXJlKSB7XHJcbiAgICAgICAgdmFyIHNwZWNMaWdodCA9IG5ldyBBbWJpZW50Q3ViZW1hcExpZ2h0KHtcclxuICAgICAgICAgICAgaW50ZW5zaXR5OiBzcGVjSW50ZW5zaXR5ICE9IG51bGwgPyBzcGVjSW50ZW5zaXR5IDogMC43XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc3BlY0xpZ2h0LmN1YmVtYXAgPSBlbnZUZXh0dXJlO1xyXG4gICAgICAgIGVudlRleHR1cmUuZmxpcFkgPSBmYWxzZTtcclxuICAgICAgICAvLyBUT0RPIENhY2hlIHByZWZpbHRlciA/XHJcbiAgICAgICAgc3BlY0xpZ2h0LnByZWZpbHRlcihzZWxmLnJlbmRlcmVyLCAzMik7XHJcblxyXG4gICAgICAgIHZhciBkaWZmTGlnaHQgPSBuZXcgQW1iaWVudFNITGlnaHQoe1xyXG4gICAgICAgICAgICBpbnRlbnNpdHk6IGRpZmZJbnRlbnNpdHkgIT0gbnVsbCA/IGRpZmZJbnRlbnNpdHkgOiAwLjcsXHJcbiAgICAgICAgICAgIGNvZWZmaWNpZW50czogc2hVdGlsLnByb2plY3RFbnZpcm9ubWVudE1hcChcclxuICAgICAgICAgICAgICAgIHNlbGYucmVuZGVyZXIsIHNwZWNMaWdodC5jdWJlbWFwLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9kOiAxXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9KTtcclxuICAgICAgICBzY2VuZS5hZGQoc3BlY0xpZ2h0KTtcclxuICAgICAgICBzY2VuZS5hZGQoZGlmZkxpZ2h0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc3BlY3VsYXI6IHNwZWNMaWdodCxcclxuICAgICAgICAgICAgZGlmZnVzZTogZGlmZkxpZ2h0LFxyXG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBlbnZpcm9ubWVudCBtYXBcclxuICAgICAgICAgICAgZW52aXJvbm1lbnRNYXA6IGVudlRleHR1cmVcclxuICAgICAgICB9O1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogTG9hZCBhIFtnbFRGXShodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYpIGZvcm1hdCBtb2RlbC5cclxuICogWW91IGNhbiBjb252ZXJ0IEZCWC9EQUUvT0JKIGZvcm1hdCBtb2RlbHMgdG8gW2dsVEZdKGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURikgd2l0aCBbZmJ4MmdsdGZdKGh0dHBzOi8vZ2l0aHViLmNvbS9waXNzYW5nL2NsYXlnbCNmYngtdG8tZ2x0ZjIwLWNvbnZlcnRlcikgcHl0aG9uIHNjcmlwdCxcclxuICogb3Igc2ltcGx5IHVzaW5nIHRoZSBbQ2xheSBWaWV3ZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9waXNzYW5nL2NsYXktdmlld2VyKSBjbGllbnQgYXBwbGljYXRpb24uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcclxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcclxuICogQHBhcmFtIHtzdHJpbmd8Y2xheS5TaGFkZXJ9IFtvcHRzLnNoYWRlcj0nY2xheS5zdGFuZGFyZCddICdiYXNpYyd8J2xhbWJlcnQnfCdzdGFuZGFyZCcuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMud2FpdFRleHR1cmVMb2FkZWQ9ZmFsc2VdIElmIGFkZCB0byBzY2VuZSB1dGlsIHRleHR1cmVzIGFyZSBhbGwgbG9hZGVkLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmF1dG9QbGF5QW5pbWF0aW9uPXRydWVdIElmIGF1dG9wbGF5IHRoZSBhbmltYXRpb24gb2YgbW9kZWwuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMudXBBeGlzPSd5J10gQ2hhbmdlIG1vZGVsIHRvIHkgdXAgaWYgdXBBeGlzIGlzICd6J1xyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnRleHR1cmVGbGlwWT1mYWxzZV1cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy50ZXh0dXJlQ29udmVydFRvUE9UPWZhbHNlXSBJZiBjb252ZXJ0IHRleHR1cmUgdG8gcG93ZXItb2YtdHdvXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy50ZXh0dXJlUm9vdFBhdGhdIFJvb3QgcGF0aCBvZiB0ZXh0dXJlLiBEZWZhdWx0IHRvIGJlIHJlbGF0aXZlIHdpdGggZ2xURiBmaWxlLlxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRoYXQgbW9kZWwgd2lsbCBiZSBtb3VudGVkLiBEZWZhdWx0IHRvIGJlIHNjZW5lXHJcbiAqIEByZXR1cm4ge1Byb21pc2V9XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUubG9hZE1vZGVsID0gZnVuY3Rpb24gKHVybCwgb3B0cywgcGFyZW50Tm9kZSkge1xyXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFVSTC4nKTtcclxuICAgIH1cclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuICAgIGlmIChvcHRzLmF1dG9QbGF5QW5pbWF0aW9uID09IG51bGwpIHtcclxuICAgICAgICBvcHRzLmF1dG9QbGF5QW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBzaGFkZXIgPSBvcHRzLnNoYWRlciB8fCAnY2xheS5zdGFuZGFyZCc7XHJcblxyXG4gICAgdmFyIGxvYWRlck9wdHMgPSB7XHJcbiAgICAgICAgcm9vdE5vZGU6IG5ldyBOb2RlKCksXHJcbiAgICAgICAgc2hhZGVyOiBzaGFkZXIsXHJcbiAgICAgICAgdGV4dHVyZVJvb3RQYXRoOiBvcHRzLnRleHR1cmVSb290UGF0aCxcclxuICAgICAgICBjcm9zc09yaWdpbjogJ0Fub255bW91cycsXHJcbiAgICAgICAgdGV4dHVyZUZsaXBZOiBvcHRzLnRleHR1cmVGbGlwWSxcclxuICAgICAgICB0ZXh0dXJlQ29udmVydFRvUE9UOiBvcHRzLnRleHR1cmVDb252ZXJ0VG9QT1RcclxuICAgIH07XHJcbiAgICBpZiAob3B0cy51cEF4aXMgJiYgb3B0cy51cEF4aXMudG9Mb3dlckNhc2UoKSA9PT0gJ3onKSB7XHJcbiAgICAgICAgbG9hZGVyT3B0cy5yb290Tm9kZS5yb3RhdGlvbi5pZGVudGl0eSgpLnJvdGF0ZVgoLU1hdGguUEkgLyAyKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbG9hZGVyID0gbmV3IEdMVEZMb2FkZXIobG9hZGVyT3B0cyk7XHJcblxyXG4gICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgdGhpcy5zY2VuZTtcclxuICAgIHZhciB0aW1lbGluZSA9IHRoaXMudGltZWxpbmU7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBhZnRlckxvYWQocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLl9kaXNwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwYXJlbnROb2RlLmFkZChyZXN1bHQucm9vdE5vZGUpO1xyXG4gICAgICAgICAgICBpZiAob3B0cy5hdXRvUGxheUFuaW1hdGlvbikge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LmNsaXBzLmZvckVhY2goZnVuY3Rpb24gKGNsaXApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aW1lbGluZS5hZGRDbGlwKGNsaXApO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsb2FkZXIuc3VjY2VzcyhmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLl9kaXNwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIW9wdHMud2FpdFRleHR1cmVMb2FkZWQpIHtcclxuICAgICAgICAgICAgICAgIGFmdGVyTG9hZChyZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwocmVzdWx0LnRleHR1cmVzLm1hcChmdW5jdGlvbiAodGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLnN1Y2Nlc3MocmVzb2x2ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZXJyb3IocmVzb2x2ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSkudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJMb2FkKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJMb2FkKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxvYWRlci5lcnJvcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxvYWRlci5sb2FkKHVybCk7XHJcbiAgICB9KTtcclxufTtcclxuXHJcblxyXG4vLyBUT0RPIGNsb25lTW9kZWxcclxuXHJcbi8qKlxyXG4gKiBTaW1pbGFyIHRvIGBhcHAuc2NlbmUuY2xvbmVOb2RlYCwgZXhjZXB0IGl0IHdpbGwgbW91bnQgdGhlIGNsb25lZCBub2RlIHRvIHRoZSBzY2VuZSBhdXRvbWF0aWNhbGx5LlxyXG4gKiBTZWUgbW9yZSBpbiB7QGxpbmsgY2xheS5TY2VuZSNjbG9uZU5vZGV9XHJcbiAqXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBub2RlXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdGhhdCBuZXcgY2xvbmVkIG5vZGUgd2lsbCBiZSBtb3VudGVkLlxyXG4gKiAgICAgICAgICBEZWZhdWx0IHRvIGhhdmUgc2FtZSBwYXJlbnQgd2l0aCBzb3VyY2Ugbm9kZS5cclxuICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNsb25lTm9kZSA9IGZ1bmN0aW9uIChub2RlLCBwYXJlbnROb2RlKSB7XHJcbiAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZSB8fCBub2RlLmdldFBhcmVudCgpO1xyXG5cclxuICAgIHZhciBuZXdOb2RlID0gdGhpcy5zY2VuZS5jbG9uZU5vZGUobm9kZSwgcGFyZW50Tm9kZSk7XHJcbiAgICBpZiAocGFyZW50Tm9kZSkge1xyXG4gICAgICAgIHBhcmVudE5vZGUuYWRkKG5ld05vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXdOb2RlO1xyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIEFwcDNEOiBBcHAzRCxcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgM0QgYXBwbGljYXRpb24gdGhhdCB3aWxsIG1hbmFnZSB0aGUgYXBwIGluaXRpYWxpemF0aW9uIGFuZCBsb29wLlxyXG4gICAgICpcclxuICAgICAqIFNlZSBtb3JlIGRldGFpbHMgYXQge0BsaW5rIGNsYXkuYXBwbGljYXRpb24uQXBwM0R9XHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5jcmVhdGVcclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8c3RyaW5nfSBkb20gQ29udGFpbmVyIGRvbSBlbGVtZW50IG9yIGEgc2VsZWN0b3Igc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgaW4gYHF1ZXJ5U2VsZWN0b3JgXHJcbiAgICAgKiBAcGFyYW0ge0FwcDNETmFtZXNwYWNlfSBhcHBOUyBPcHRpb25zIGFuZCBuYW1lc3BhY2UgdXNlZCBpbiBjcmVhdGluZyBhcHAzRFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2NsYXkuYXBwbGljYXRpb24uQXBwM0R9XHJcbiAgICAgKlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqICBjbGF5LmFwcGxpY2F0aW9uLmNyZWF0ZSgnI2FwcCcsIHtcclxuICAgICAqICAgICAgaW5pdDogZnVuY3Rpb24gKGFwcCkge1xyXG4gICAgICogICAgICAgICAgYXBwLmNyZWF0ZUN1YmUoKTtcclxuICAgICAqICAgICAgICAgIHZhciBjYW1lcmEgPSBhcHAuY3JlYXRlQ2FtZXJhKCk7XHJcbiAgICAgKiAgICAgICAgICBjYW1lcmEucG9zaXRpb24uc2V0KDAsIDAsIDIpO1xyXG4gICAgICogICAgICB9LFxyXG4gICAgICogICAgICBsb29wOiBmdW5jdGlvbiAoKSB7IC8vIG5vb3AgfVxyXG4gICAgICogIH0pXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZTogZnVuY3Rpb24gKGRvbSwgYXBwTlMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEFwcDNEKGRvbSwgYXBwTlMpO1xyXG4gICAgfVxyXG59OyIsImltcG9ydCBub3RpZmllciBmcm9tICcuLi9jb3JlL21peGluL25vdGlmaWVyJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCB1dGlsICBmcm9tICcuLi9jb3JlL3V0aWwnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hc3luYy5UYXNrXHJcbiAqIEBtaXhlcyBjbGF5LmNvcmUubWl4aW4ubm90aWZpZXJcclxuICovXHJcbmZ1bmN0aW9uIFRhc2soKSB7XHJcbiAgICB0aGlzLl9mdWxsZmlsbGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9yZWplY3RlZCA9IGZhbHNlO1xyXG59O1xyXG4vKipcclxuICogVGFzayBzdWNjZXNzZWRcclxuICogQHBhcmFtIHt9IGRhdGFcclxuICovXHJcblRhc2sucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICB0aGlzLl9mdWxsZmlsbGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuX3JlamVjdGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnRyaWdnZXIoJ3N1Y2Nlc3MnLCBkYXRhKTtcclxufTtcclxuLyoqXHJcbiAqIFRhc2sgZmFpbGVkXHJcbiAqIEBwYXJhbSB7fSBlcnJcclxuICovXHJcblRhc2sucHJvdG90eXBlLnJlamVjdCA9IGZ1bmN0aW9uKGVycikge1xyXG4gICAgdGhpcy5fcmVqZWN0ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5fZnVsbGZpbGxlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsIGVycik7XHJcbn07XHJcbi8qKlxyXG4gKiBJZiB0YXNrIHN1Y2Nlc3NlZFxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKi9cclxuVGFzay5wcm90b3R5cGUuaXNGdWxsZmlsbGVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZnVsbGZpbGxlZDtcclxufTtcclxuLyoqXHJcbiAqIElmIHRhc2sgZmFpbGVkXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAqL1xyXG5UYXNrLnByb3RvdHlwZS5pc1JlamVjdGVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVqZWN0ZWQ7XHJcbn07XHJcbi8qKlxyXG4gKiBJZiB0YXNrIGZpbmlzaGVkLCBlaXRoZXIgc3VjY2Vzc2VkIG9yIGZhaWxlZFxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKi9cclxuVGFzay5wcm90b3R5cGUuaXNTZXR0bGVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZnVsbGZpbGxlZCB8fCB0aGlzLl9yZWplY3RlZDtcclxufTtcclxuXHJcbnV0aWwuZXh0ZW5kKFRhc2sucHJvdG90eXBlLCBub3RpZmllcik7XHJcblxyXG5mdW5jdGlvbiBtYWtlUmVxdWVzdFRhc2sodXJsLCByZXNwb25zZVR5cGUpIHtcclxuICAgIHZhciB0YXNrID0gbmV3IFRhc2soKTtcclxuICAgIHZlbmRvci5yZXF1ZXN0LmdldCh7XHJcbiAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgcmVzcG9uc2VUeXBlOiByZXNwb25zZVR5cGUsXHJcbiAgICAgICAgb25sb2FkOiBmdW5jdGlvbihyZXMpIHtcclxuICAgICAgICAgICAgdGFzay5yZXNvbHZlKHJlcyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvbmVycm9yOiBmdW5jdGlvbihlcnJvcikge1xyXG4gICAgICAgICAgICB0YXNrLnJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGFzaztcclxufVxyXG4vKipcclxuICogTWFrZSBhIHZlbmRvci5yZXF1ZXN0IHRhc2tcclxuICogQHBhcmFtICB7c3RyaW5nfG9iamVjdHxvYmplY3RbXXxzdHJpbmdbXX0gdXJsXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gW3Jlc3BvbnNlVHlwZV1cclxuICogQGV4YW1wbGVcclxuICogICAgIHZhciB0YXNrID0gVGFzay5tYWtlUmVxdWVzdFRhc2soJy4vYS5qc29uJyk7XHJcbiAqICAgICB2YXIgdGFzayA9IFRhc2subWFrZVJlcXVlc3RUYXNrKHtcclxuICogICAgICAgICB1cmw6ICdiLmJpbicsXHJcbiAqICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXHJcbiAqICAgICB9KTtcclxuICogICAgIHZhciB0YXNrcyA9IFRhc2subWFrZVJlcXVlc3RUYXNrKFsnLi9hLmpzb24nLCAnLi9iLmpzb24nXSk7XHJcbiAqICAgICB2YXIgdGFza3MgPSBUYXNrLm1ha2VSZXF1ZXN0VGFzayhbXHJcbiAqICAgICAgICAge3VybDogJ2EuanNvbid9LFxyXG4gKiAgICAgICAgIHt1cmw6ICdiLmJpbicsIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ31cclxuICogICAgIF0pO1xyXG4gKiBAcmV0dXJuIHtjbGF5LmFzeW5jLlRhc2t8Y2xheS5hc3luYy5UYXNrW119XHJcbiAqL1xyXG5UYXNrLm1ha2VSZXF1ZXN0VGFzayA9IGZ1bmN0aW9uKHVybCwgcmVzcG9uc2VUeXBlKSB7XHJcbiAgICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gbWFrZVJlcXVlc3RUYXNrKHVybCwgcmVzcG9uc2VUeXBlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHVybC51cmwpIHsgICAvLyAgQ29uZmlndXJlIG9iamVjdFxyXG4gICAgICAgIHZhciBvYmogPSB1cmw7XHJcbiAgICAgICAgcmV0dXJuIG1ha2VSZXF1ZXN0VGFzayhvYmoudXJsLCBvYmoucmVzcG9uc2VUeXBlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodXJsKSkgeyAgLy8gVXJsIGxpc3RcclxuICAgICAgICB2YXIgdXJsTGlzdCA9IHVybDtcclxuICAgICAgICB2YXIgdGFza3MgPSBbXTtcclxuICAgICAgICB1cmxMaXN0LmZvckVhY2goZnVuY3Rpb24ob2JqKSB7XHJcbiAgICAgICAgICAgIHZhciB1cmwsIHJlc3BvbnNlVHlwZTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICB1cmwgPSBvYmo7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoT2JqZWN0KG9iaikgPT09IG9iaikge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gb2JqLnVybDtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZSA9IG9iai5yZXNwb25zZVR5cGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGFza3MucHVzaChtYWtlUmVxdWVzdFRhc2sodXJsLCByZXNwb25zZVR5cGUpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGFza3M7XHJcbiAgICB9XHJcbn07XHJcbi8qKlxyXG4gKiBAcmV0dXJuIHtjbGF5LmFzeW5jLlRhc2t9XHJcbiAqL1xyXG5UYXNrLm1ha2VUYXNrID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gbmV3IFRhc2soKTtcclxufTtcclxuXHJcbnV0aWwuZXh0ZW5kKFRhc2sucHJvdG90eXBlLCBub3RpZmllcik7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUYXNrO1xyXG4iLCJpbXBvcnQgdXRpbCBmcm9tICcuLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgVGFzayBmcm9tICcuL1Rhc2snO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hc3luYy5UYXNrR3JvdXBcclxuICogQGV4dGVuZHMgY2xheS5hc3luYy5UYXNrXHJcbiAqL1xyXG52YXIgVGFza0dyb3VwID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIFRhc2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuXHJcbiAgICB0aGlzLl90YXNrcyA9IFtdO1xyXG5cclxuICAgIHRoaXMuX2Z1bGZpbGxlZE51bWJlciA9IDA7XHJcblxyXG4gICAgdGhpcy5fcmVqZWN0ZWROdW1iZXIgPSAwO1xyXG59O1xyXG5cclxudmFyIEN0b3IgPSBmdW5jdGlvbiAoKXt9O1xyXG5DdG9yLnByb3RvdHlwZSA9IFRhc2sucHJvdG90eXBlO1xyXG5UYXNrR3JvdXAucHJvdG90eXBlID0gbmV3IEN0b3IoKTtcclxuXHJcblRhc2tHcm91cC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUYXNrR3JvdXA7XHJcblxyXG4vKipcclxuICogV2FpdCBmb3IgYWxsIGdpdmVuIHRhc2tzIHN1Y2Nlc3NlZCwgdGFzayBjYW4gYWxzbyBiZSBhbnkgbm90aWZpZXIgb2JqZWN0IHdoaWNoIHdpbGwgdHJpZ2dlciBzdWNjZXNzIGFuZCBlcnJvciBldmVudHMuIExpa2Uge0BsaW5rIGNsYXkuVGV4dHVyZTJEfSwge0BsaW5rIGNsYXkuVGV4dHVyZUN1YmV9LCB7QGxpbmsgY2xheS5sb2FkZXIuR0xURn0uXHJcbiAqIEBwYXJhbSAge0FycmF5LjxjbGF5LmFzeW5jLlRhc2s+fSB0YXNrc1xyXG4gKiBAY2hhaW5hYmxlXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICAvLyBMb2FkIHRleHR1cmUgbGlzdFxyXG4gKiAgICAgdmFyIGxpc3QgPSBbJ2EuanBnJywgJ2IuanBnJywgJ2MuanBnJ11cclxuICogICAgIHZhciB0ZXh0dXJlcyA9IGxpc3QubWFwKGZ1bmN0aW9uIChzcmMpIHtcclxuICogICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBjbGF5LlRleHR1cmUyRCgpO1xyXG4gKiAgICAgICAgIHRleHR1cmUubG9hZChzcmMpO1xyXG4gKiAgICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgdGFza0dyb3VwID0gbmV3IGNsYXkuYXN5bmMuVGFza0dyb3VwKCk7XHJcbiAqICAgICB0YXNrR3JvdXAuYWxsKHRleHR1cmVzKS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICogICAgICAgICAvLyBEbyBzb21lIHRoaW5nIGFmdGVyIGFsbCB0ZXh0dXJlcyBsb2FkZWRcclxuICogICAgIH0pO1xyXG4gKi9cclxuVGFza0dyb3VwLnByb3RvdHlwZS5hbGwgPSBmdW5jdGlvbiAodGFza3MpIHtcclxuICAgIHZhciBjb3VudCA9IDA7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICB2YXIgZGF0YSA9IFtdO1xyXG4gICAgdGhpcy5fdGFza3MgPSB0YXNrcztcclxuICAgIHRoaXMuX2Z1bGZpbGxlZE51bWJlciA9IDA7XHJcbiAgICB0aGlzLl9yZWplY3RlZE51bWJlciA9IDA7XHJcblxyXG4gICAgdXRpbC5lYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaywgaWR4KSB7XHJcbiAgICAgICAgaWYgKCF0YXNrIHx8ICF0YXNrLm9uY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgIHRhc2sub25jZSgnc3VjY2VzcycsIGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgY291bnQtLTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuX2Z1bGZpbGxlZE51bWJlcisrO1xyXG4gICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICAgIC8vIFNvbWUgdGFza3MgbGlrZSB0ZXh0dXJlLCBsb2FkZXIgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSB0YXNrXHJcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBzdGF0ZXMgaGVyZVxyXG4gICAgICAgICAgICB0YXNrLl9mdWxmaWxsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0YXNrLl9yZWplY3RlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgZGF0YVtpZHhdID0gcmVzO1xyXG4gICAgICAgICAgICBpZiAoY291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRhc2sub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICBzZWxmLl9yZWplY3RlZE51bWJlciArKztcclxuXHJcbiAgICAgICAgICAgIHRhc2suX2Z1bGZpbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0YXNrLl9yZWplY3RlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBzZWxmLnJlamVjdCh0YXNrKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgaWYgKGNvdW50ID09PSAwKSB7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHNlbGYucmVzb2x2ZShkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG4vKipcclxuICogV2FpdCBmb3IgYWxsIGdpdmVuIHRhc2tzIGZpbmlzaGVkLCBlaXRoZXIgc3VjY2Vzc2VkIG9yIGZhaWxlZFxyXG4gKiBAcGFyYW0gIHtBcnJheS48Y2xheS5hc3luYy5UYXNrPn0gdGFza3NcclxuICogQHJldHVybiB7Y2xheS5hc3luYy5UYXNrR3JvdXB9XHJcbiAqL1xyXG5UYXNrR3JvdXAucHJvdG90eXBlLmFsbFNldHRsZWQgPSBmdW5jdGlvbiAodGFza3MpIHtcclxuICAgIHZhciBjb3VudCA9IDA7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICB2YXIgZGF0YSA9IFtdO1xyXG4gICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3N1Y2Nlc3MnLCBkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHRoaXMuX3Rhc2tzID0gdGFza3M7XHJcblxyXG4gICAgdXRpbC5lYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaywgaWR4KSB7XHJcbiAgICAgICAgaWYgKCF0YXNrIHx8ICF0YXNrLm9uY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgIHRhc2sub25jZSgnc3VjY2VzcycsIGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgY291bnQtLTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuX2Z1bGZpbGxlZE51bWJlcisrO1xyXG5cclxuICAgICAgICAgICAgdGFzay5fZnVsZmlsbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGRhdGFbaWR4XSA9IHJlcztcclxuICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0YXNrLm9uY2UoJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICBjb3VudC0tO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5fcmVqZWN0ZWROdW1iZXIrKztcclxuXHJcbiAgICAgICAgICAgIHRhc2suX2Z1bGZpbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0YXNrLl9yZWplY3RlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICAgIGRhdGFbaWR4XSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG4vKipcclxuICogR2V0IHN1Y2Nlc3NlZCBzdWIgdGFza3MgbnVtYmVyLCByZWN1cnNpdmUgY2FuIGJlIHRydWUgaWYgc3ViIHRhc2sgaXMgYWxzbyBhIFRhc2tHcm91cC5cclxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3JlY3Vyc2l2ZV1cclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVGFza0dyb3VwLnByb3RvdHlwZS5nZXRGdWxmaWxsZWROdW1iZXIgPSBmdW5jdGlvbiAocmVjdXJzaXZlKSB7XHJcbiAgICBpZiAocmVjdXJzaXZlKSB7XHJcbiAgICAgICAgdmFyIG5GdWxmaWxsZWQgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGFza3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRhc2sgaW5zdGFuY2VvZiBUYXNrR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIG5GdWxmaWxsZWQgKz0gdGFzay5nZXRGdWxmaWxsZWROdW1iZXIocmVjdXJzaXZlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKHRhc2suX2Z1bGZpbGxlZCkge1xyXG4gICAgICAgICAgICAgICAgbkZ1bGZpbGxlZCArPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuRnVsZmlsbGVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZnVsZmlsbGVkTnVtYmVyO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBmYWlsZWQgc3ViIHRhc2tzIG51bWJlciwgcmVjdXJzaXZlIGNhbiBiZSB0cnVlIGlmIHN1YiB0YXNrIGlzIGFsc28gYSBUYXNrR3JvdXAuXHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFtyZWN1cnNpdmVdXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblRhc2tHcm91cC5wcm90b3R5cGUuZ2V0UmVqZWN0ZWROdW1iZXIgPSBmdW5jdGlvbiAocmVjdXJzaXZlKSB7XHJcbiAgICBpZiAocmVjdXJzaXZlKSB7XHJcbiAgICAgICAgdmFyIG5SZWplY3RlZCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFzayA9IHRoaXMuX3Rhc2tzW2ldO1xyXG4gICAgICAgICAgICBpZiAodGFzayBpbnN0YW5jZW9mIFRhc2tHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgblJlamVjdGVkICs9IHRhc2suZ2V0UmVqZWN0ZWROdW1iZXIocmVjdXJzaXZlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKHRhc2suX3JlamVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBuUmVqZWN0ZWQgKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gblJlamVjdGVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVqZWN0ZWROdW1iZXI7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IGZpbmlzaGVkIHN1YiB0YXNrcyBudW1iZXIsIHJlY3Vyc2l2ZSBjYW4gYmUgdHJ1ZSBpZiBzdWIgdGFzayBpcyBhbHNvIGEgVGFza0dyb3VwLlxyXG4gKiBAcGFyYW0gIHtib29sZWFufSBbcmVjdXJzaXZlXVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5UYXNrR3JvdXAucHJvdG90eXBlLmdldFNldHRsZWROdW1iZXIgPSBmdW5jdGlvbiAocmVjdXJzaXZlKSB7XHJcblxyXG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xyXG4gICAgICAgIHZhciBuU2V0dGxlZCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFzayA9IHRoaXMuX3Rhc2tzW2ldO1xyXG4gICAgICAgICAgICBpZiAodGFzayBpbnN0YW5jZW9mIFRhc2tHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgblNldHRsZWQgKz0gdGFzay5nZXRTZXR0bGVkTnVtYmVyKHJlY3Vyc2l2ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZih0YXNrLl9yZWplY3RlZCB8fCB0YXNrLl9mdWxmaWxsZWQpIHtcclxuICAgICAgICAgICAgICAgIG5TZXR0bGVkICs9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5TZXR0bGVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZnVsZmlsbGVkTnVtYmVyICsgdGhpcy5fcmVqZWN0ZWROdW1iZXI7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IGFsbCBzdWIgdGFza3MgbnVtYmVyLCByZWN1cnNpdmUgY2FuIGJlIHRydWUgaWYgc3ViIHRhc2sgaXMgYWxzbyBhIFRhc2tHcm91cC5cclxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3JlY3Vyc2l2ZV1cclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVGFza0dyb3VwLnByb3RvdHlwZS5nZXRUYXNrTnVtYmVyID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xyXG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xyXG4gICAgICAgIHZhciBuVGFzayA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFzayA9IHRoaXMuX3Rhc2tzW2ldO1xyXG4gICAgICAgICAgICBpZiAodGFzayBpbnN0YW5jZW9mIFRhc2tHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgblRhc2sgKz0gdGFzay5nZXRUYXNrTnVtYmVyKHJlY3Vyc2l2ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuVGFzayArPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuVGFzaztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rhc2tzLmxlbmd0aDtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRhc2tHcm91cDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuXHJcbi8vIFBFTkRJTkdcclxuLy8gVXNlIHRvcG9sb2dpY2FsIHNvcnQgP1xyXG5cclxuLyoqXHJcbiAqIE5vZGUgb2YgZ3JhcGggYmFzZWQgcG9zdCBwcm9jZXNzaW5nLlxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqXHJcbiAqL1xyXG52YXIgQ29tcG9zaXRvck5vZGUgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvck5vZGUjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG5hbWU6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnB1dCBsaW5rcywgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBncmFwaFxyXG4gICAgICAgICAqIEBleGFtcGxlOlxyXG4gICAgICAgICAqICAgICBpbnB1dE5hbWU6IHtcclxuICAgICAgICAgKiAgICAgICAgIG5vZGU6IHNvbWVOb2RlLFxyXG4gICAgICAgICAqICAgICAgICAgcGluOiAneHh4eCdcclxuICAgICAgICAgKiAgICAgfVxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5wdXRMaW5rczoge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE91dHB1dCBsaW5rcywgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBncmFwaFxyXG4gICAgICAgICAqIEBleGFtcGxlOlxyXG4gICAgICAgICAqICAgICBvdXRwdXROYW1lOiB7XHJcbiAgICAgICAgICogICAgICAgICBub2RlOiBzb21lTm9kZSxcclxuICAgICAgICAgKiAgICAgICAgIHBpbjogJ3h4eHgnXHJcbiAgICAgICAgICogICAgIH1cclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG91dHB1dExpbmtzOiB7fSxcclxuXHJcbiAgICAgICAgLy8gU2F2ZSB0aGUgb3V0cHV0IHRleHR1cmUgb2YgcHJldmlvdXMgZnJhbWVcclxuICAgICAgICAvLyBXaWxsIGJlIHVzZWQgd2hlbiB0aGVyZSBleGlzdCBhIGNpcmN1bGFyIHJlZmVyZW5jZVxyXG4gICAgICAgIF9wcmV2T3V0cHV0VGV4dHVyZXM6IHt9LFxyXG4gICAgICAgIF9vdXRwdXRUZXh0dXJlczoge30sXHJcblxyXG4gICAgICAgIC8vIEV4YW1wbGU6IHsgbmFtZTogMiB9XHJcbiAgICAgICAgX291dHB1dFJlZmVyZW5jZXM6IHt9LFxyXG5cclxuICAgICAgICBfcmVuZGVyaW5nOiBmYWxzZSxcclxuICAgICAgICAvLyBJZiByZW5kZXJlZCBpbiB0aGlzIGZyYW1lXHJcbiAgICAgICAgX3JlbmRlcmVkOiBmYWxzZSxcclxuXHJcbiAgICAgICAgX2NvbXBvc2l0b3I6IG51bGxcclxuICAgIH07XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgLy8gVE9ETyBSZW1vdmUgcGFyYW1ldGVyIGZ1bmN0aW9uIGNhbGxiYWNrXHJcbiAgICB1cGRhdGVQYXJhbWV0ZXI6IGZ1bmN0aW9uIChvdXRwdXROYW1lLCByZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW291dHB1dE5hbWVdO1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzID0gb3V0cHV0SW5mby5wYXJhbWV0ZXJzO1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzQ29weSA9IG91dHB1dEluZm8uX3BhcmFtZXRlcnNDb3B5O1xyXG4gICAgICAgIGlmICghcGFyYW1ldGVyc0NvcHkpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHkgPSBvdXRwdXRJbmZvLl9wYXJhbWV0ZXJzQ29weSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3dpZHRoJyAmJiBrZXkgIT09ICdoZWlnaHQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHlba2V5XSA9IHBhcmFtZXRlcnNba2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgd2lkdGgsIGhlaWdodDtcclxuICAgICAgICBpZiAocGFyYW1ldGVycy53aWR0aCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gcGFyYW1ldGVycy53aWR0aC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gcGFyYW1ldGVycy53aWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMuaGVpZ2h0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gcGFyYW1ldGVycy5oZWlnaHQuY2FsbCh0aGlzLCByZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBwYXJhbWV0ZXJzLmhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBwYXJhbWV0ZXJzQ29weS53aWR0aCAhPT0gd2lkdGhcclxuICAgICAgICAgICAgfHwgcGFyYW1ldGVyc0NvcHkuaGVpZ2h0ICE9PSBoZWlnaHRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX291dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXS5kaXNwb3NlKHJlbmRlcmVyLmdsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwYXJhbWV0ZXJzQ29weS53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHBhcmFtZXRlcnNDb3B5LmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnNDb3B5O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBwYXJhbWV0ZXJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge30gdmFsdWVcclxuICAgICAqL1xyXG4gICAgc2V0UGFyYW1ldGVyOiBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHt9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcGFyYW1ldGVyIHZhbHVlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge31cclxuICAgICAqL1xyXG4gICAgZ2V0UGFyYW1ldGVyOiBmdW5jdGlvbiAobmFtZSkge30sXHJcbiAgICAvKipcclxuICAgICAqIFNldCBwYXJhbWV0ZXJzXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqXHJcbiAgICAgKi9cclxuICAgIHNldFBhcmFtZXRlcnM6IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9iaikge1xyXG4gICAgICAgICAgICB0aGlzLnNldFBhcmFtZXRlcihuYW1lLCBvYmpbbmFtZV0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7fSxcclxuXHJcbiAgICBnZXRPdXRwdXQ6IGZ1bmN0aW9uIChyZW5kZXJlciAvKm9wdGlvbmFsKi8sIG5hbWUpIHtcclxuICAgICAgICBpZiAobmFtZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIFJldHVybiB0aGUgb3V0cHV0IHRleHR1cmUgd2l0aG91dCByZW5kZXJpbmdcclxuICAgICAgICAgICAgbmFtZSA9IHJlbmRlcmVyO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW25hbWVdO1xyXG4gICAgICAgIGlmICghb3V0cHV0SW5mbykge1xyXG4gICAgICAgICAgICByZXR1cm4gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQWxyZWFkeSBiZWVuIHJlbmRlcmVkIGluIHRoaXMgZnJhbWVcclxuICAgICAgICBpZiAodGhpcy5fcmVuZGVyZWQpIHtcclxuICAgICAgICAgICAgLy8gRm9yY2UgcmV0dXJuIHRleHR1cmUgaW4gbGFzdCBmcmFtZVxyXG4gICAgICAgICAgICBpZiAob3V0cHV0SW5mby5vdXRwdXRMYXN0RnJhbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIC8vIFRPRE9cclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyaW5nICAgLy8gU29sdmUgQ2lyY3VsYXIgUmVmZXJlbmNlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBibGFuayB0ZXh0dXJlIGF0IGZpcnN0IHBhc3NcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tuYW1lXSA9IHRoaXMuX2NvbXBvc2l0b3IuYWxsb2NhdGVUZXh0dXJlKG91dHB1dEluZm8ucGFyYW1ldGVycyB8fCB7fSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tuYW1lXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW1vdmVSZWZlcmVuY2U6IGZ1bmN0aW9uIChvdXRwdXROYW1lKSB7XHJcbiAgICAgICAgdGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXS0tO1xyXG4gICAgICAgIGlmICh0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW291dHB1dE5hbWVdID09PSAwKSB7XHJcbiAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW291dHB1dE5hbWVdO1xyXG4gICAgICAgICAgICBpZiAob3V0cHV0SW5mby5rZWVwTGFzdEZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdID0gdGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBPdXRwdXQgb2YgdGhpcyBub2RlIGhhdmUgYWxyZWF5IGJlZW4gdXNlZCBieSBhbGwgb3RoZXIgbm9kZXNcclxuICAgICAgICAgICAgICAgIC8vIFB1dCB0aGUgdGV4dHVyZSBiYWNrIHRvIHRoZSBwb29sLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGxpbms6IGZ1bmN0aW9uIChpbnB1dFBpbk5hbWUsIGZyb21Ob2RlLCBmcm9tUGluTmFtZSkge1xyXG5cclxuICAgICAgICAvLyBUaGUgcmVsYXRpb25zaGlwIGZyb20gb3V0cHV0IHBpbiB0byBpbnB1dCBwaW4gaXMgb25lLW9uLW11bHRpcGxlXHJcbiAgICAgICAgdGhpcy5pbnB1dExpbmtzW2lucHV0UGluTmFtZV0gPSB7XHJcbiAgICAgICAgICAgIG5vZGU6IGZyb21Ob2RlLFxyXG4gICAgICAgICAgICBwaW46IGZyb21QaW5OYW1lXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoIWZyb21Ob2RlLm91dHB1dExpbmtzW2Zyb21QaW5OYW1lXSkge1xyXG4gICAgICAgICAgICBmcm9tTm9kZS5vdXRwdXRMaW5rc1tmcm9tUGluTmFtZV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnJvbU5vZGUub3V0cHV0TGlua3NbZnJvbVBpbk5hbWVdLnB1c2goe1xyXG4gICAgICAgICAgICBub2RlOiB0aGlzLFxyXG4gICAgICAgICAgICBwaW46IGlucHV0UGluTmFtZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBFbmFibGVkIHRoZSBwaW4gdGV4dHVyZSBpbiBzaGFkZXJcclxuICAgICAgICB0aGlzLnBhc3MubWF0ZXJpYWwuZW5hYmxlVGV4dHVyZShpbnB1dFBpbk5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRMaW5rcyA9IHt9O1xyXG4gICAgICAgIHRoaXMub3V0cHV0TGlua3MgPSB7fTtcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlUmVmZXJlbmNlOiBmdW5jdGlvbiAob3V0cHV0TmFtZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5fcmVuZGVyaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGlucHV0TmFtZSBpbiB0aGlzLmlucHV0TGlua3MpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsaW5rID0gdGhpcy5pbnB1dExpbmtzW2lucHV0TmFtZV07XHJcbiAgICAgICAgICAgICAgICBsaW5rLm5vZGUudXBkYXRlUmVmZXJlbmNlKGxpbmsucGluKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG91dHB1dE5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXSArKztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGJlZm9yZUZyYW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm91dHB1dExpbmtzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dFJlZmVyZW5jZXNbbmFtZV0gPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYWZ0ZXJGcmFtZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIFB1dCBiYWNrIGFsbCB0aGUgdGV4dHVyZXMgdG8gcG9vbFxyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5vdXRwdXRMaW5rcykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tuYW1lXSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ua2VlcExhc3RGcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV0gPSB0aGlzLl9vdXRwdXRUZXh0dXJlc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbXBvc2l0b3JOb2RlO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgR3JhcGhOb2RlIGZyb20gJy4vQ29tcG9zaXRvck5vZGUnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNvbXBvc2l0b3IuR3JhcGhcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBHcmFwaCA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5HcmFwaCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48Y2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlPn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBub2RlczogW11cclxuICAgIH07XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkdyYXBoLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIHRvIHVwZGF0ZVxyXG4gICAgICovXHJcbiAgICBkaXJ0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7Y2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlfSBub2RlXHJcbiAgICAgKi9cclxuICAgIGFkZE5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm5vZGVzLmluZGV4T2Yobm9kZSkgPj0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm5vZGVzLnB1c2gobm9kZSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZXxzdHJpbmd9IG5vZGVcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlTm9kZTogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIG5vZGUgPSB0aGlzLmdldE5vZGVCeU5hbWUobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpZHggPSB0aGlzLm5vZGVzLmluZGV4T2Yobm9kZSk7XHJcbiAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZXMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlfVxyXG4gICAgICovXHJcbiAgICBnZXROb2RlQnlOYW1lOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ub2Rlc1tpXS5uYW1lID09PSBuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ub2Rlc1tpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBsaW5rcyBvZiBncmFwaFxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5ub2Rlc1tpXS5jbGVhcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUcmF2ZXJzZSBhbGwgdGhlIG5vZGVzIGFuZCBidWlsZCB0aGUgZ3JhcGhcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLm5vZGVzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFub2RlLmlucHV0cykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yICh2YXIgaW5wdXROYW1lIGluIG5vZGUuaW5wdXRzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGUuaW5wdXRzW2lucHV0TmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChub2RlLnBhc3MgJiYgIW5vZGUucGFzcy5tYXRlcmlhbC5pc1VuaWZvcm1FbmFibGVkKGlucHV0TmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpbiAnICArIG5vZGUubmFtZSArICcuJyArIGlucHV0TmFtZSArICcgbm90IHVzZWQuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgZnJvbVBpbkluZm8gPSBub2RlLmlucHV0c1tpbnB1dE5hbWVdO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBmcm9tUGluID0gdGhpcy5maW5kUGluKGZyb21QaW5JbmZvKTtcclxuICAgICAgICAgICAgICAgIGlmIChmcm9tUGluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5saW5rKGlucHV0TmFtZSwgZnJvbVBpbi5ub2RlLCBmcm9tUGluLnBpbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZyb21QaW5JbmZvID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ05vZGUgJyArIGZyb21QaW5JbmZvICsgJyBub3QgZXhpc3QnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUGluIG9mICcgKyBmcm9tUGluSW5mby5ub2RlICsgJy4nICsgZnJvbVBpbkluZm8ucGluICsgJyBub3QgZXhpc3QnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmRQaW46IGZ1bmN0aW9uIChpbnB1dCkge1xyXG4gICAgICAgIHZhciBub2RlO1xyXG4gICAgICAgIC8vIFRyeSB0byB0YWtlIGlucHV0IGFzIGEgZGlyZWN0bHkgYSBub2RlXHJcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgfHwgaW5wdXQgaW5zdGFuY2VvZiBHcmFwaE5vZGUpIHtcclxuICAgICAgICAgICAgaW5wdXQgPSB7XHJcbiAgICAgICAgICAgICAgICBub2RlOiBpbnB1dFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dC5ub2RlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB0bXAgPSB0aGlzLm5vZGVzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRtcC5uYW1lID09PSBpbnB1dC5ub2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHRtcDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbm9kZSA9IGlucHV0Lm5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlKSB7XHJcbiAgICAgICAgICAgIHZhciBpbnB1dFBpbiA9IGlucHV0LnBpbjtcclxuICAgICAgICAgICAgaWYgKCFpbnB1dFBpbikge1xyXG4gICAgICAgICAgICAgICAgLy8gVXNlIGZpcnN0IHBpbiBkZWZhdWx0bHlcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFBpbiA9IE9iamVjdC5rZXlzKG5vZGUub3V0cHV0cylbMF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5vZGUub3V0cHV0c1tpbnB1dFBpbl0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBwaW46IGlucHV0UGluXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdyYXBoO1xyXG4iLCJpbXBvcnQgR3JhcGggZnJvbSAnLi9HcmFwaCc7XHJcbmltcG9ydCBUZXh0dXJlUG9vbCBmcm9tICcuL1RleHR1cmVQb29sJztcclxuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcclxuXHJcbi8qKlxyXG4gKiBDb21wb3NpdG9yIHByb3ZpZGUgZ3JhcGggYmFzZWQgcG9zdCBwcm9jZXNzaW5nXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvbXBvc2l0b3IuR3JhcGhcclxuICpcclxuICovXHJcbnZhciBDb21wb3NpdG9yID0gR3JhcGguZXh0ZW5kKGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAvLyBPdXRwdXQgbm9kZVxyXG4gICAgICAgIF9vdXRwdXRzOiBbXSxcclxuXHJcbiAgICAgICAgX3RleHR1cmVQb29sOiBuZXcgVGV4dHVyZVBvb2woKSxcclxuXHJcbiAgICAgICAgX2ZyYW1lQnVmZmVyOiBuZXcgRnJhbWVCdWZmZXIoe1xyXG4gICAgICAgICAgICBkZXB0aEJ1ZmZlcjogZmFsc2VcclxuICAgICAgICB9KVxyXG4gICAgfTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvci5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgYWRkTm9kZTogZnVuY3Rpb24obm9kZSkge1xyXG4gICAgICAgIEdyYXBoLnByb3RvdHlwZS5hZGROb2RlLmNhbGwodGhpcywgbm9kZSk7XHJcbiAgICAgICAgbm9kZS5fY29tcG9zaXRvciA9IHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgIGlmICh0aGlzLl9kaXJ0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0cy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5ub2Rlc1tpXS5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0cy5wdXNoKHRoaXMubm9kZXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSByZWZlcmVuY2UgbnVtYmVyIG9mIGVhY2ggb3V0cHV0IHRleHR1cmVcclxuICAgICAgICAgICAgdGhpcy5ub2Rlc1tpXS5iZWZvcmVGcmFtZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vdXRwdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHNbaV0udXBkYXRlUmVmZXJlbmNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX291dHB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0c1tpXS5yZW5kZXIocmVuZGVyZXIsIGZyYW1lQnVmZmVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAvLyBDbGVhciB1cFxyXG4gICAgICAgICAgICB0aGlzLm5vZGVzW2ldLmFmdGVyRnJhbWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFsbG9jYXRlVGV4dHVyZTogZnVuY3Rpb24gKHBhcmFtZXRlcnMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZVBvb2wuZ2V0KHBhcmFtZXRlcnMpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZWxlYXNlVGV4dHVyZTogZnVuY3Rpb24gKHBhcmFtZXRlcnMpIHtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlUG9vbC5wdXQocGFyYW1ldGVycyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEZyYW1lQnVmZmVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lQnVmZmVyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgY29tcG9zaXRvclxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlUG9vbC5jbGVhcihyZW5kZXJlcik7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ29tcG9zaXRvcjtcclxuIiwiaW1wb3J0IENvbXBvc2l0b3JOb2RlIGZyb20gJy4vQ29tcG9zaXRvck5vZGUnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLlNjZW5lTm9kZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvck5vZGVcclxuICovXHJcbnZhciBTY2VuZU5vZGUgPSBDb21wb3NpdG9yTm9kZS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLlNjZW5lTm9kZSMgKi9cclxue1xyXG4gICAgbmFtZTogJ3NjZW5lJyxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuU2NlbmV9XHJcbiAgICAgKi9cclxuICAgIHNjZW5lOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5DYW1lcmF9XHJcbiAgICAgKi9cclxuICAgIGNhbWVyYTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGF1dG9VcGRhdGVTY2VuZTogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIHByZVo6IGZhbHNlXHJcblxyXG59LCBmdW5jdGlvbigpIHtcclxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcclxufSwge1xyXG4gICAgcmVuZGVyOiBmdW5jdGlvbihyZW5kZXJlcikge1xyXG5cclxuICAgICAgICB0aGlzLl9yZW5kZXJpbmcgPSB0cnVlO1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXInKTtcclxuXHJcbiAgICAgICAgdmFyIHJlbmRlckluZm87XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5vdXRwdXRzKSB7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJJbmZvID0gcmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsIHRoaXMuY2FtZXJhLCAhdGhpcy5hdXRvVXBkYXRlU2NlbmUsIHRoaXMucHJlWik7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBmcmFtZUJ1ZmZlciA9IHRoaXMuZnJhbWVCdWZmZXI7XHJcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHRoaXMudXBkYXRlUGFyYW1ldGVyKG5hbWUsIHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9jb21wb3NpdG9yLmFsbG9jYXRlVGV4dHVyZShwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdID0gdGV4dHVyZTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0YWNobWVudCA9IG91dHB1dEluZm8uYXR0YWNobWVudCB8fCBfZ2wuQ09MT1JfQVRUQUNITUVOVDA7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKGF0dGFjaG1lbnQpID09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9IF9nbFthdHRhY2htZW50XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaCh0ZXh0dXJlLCBhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIC8vIE1SVCBTdXBwb3J0IGluIGNocm9tZVxyXG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9zZGsvdGVzdHMvY29uZm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZHJhdy1idWZmZXJzLmh0bWxcclxuICAgICAgICAgICAgdmFyIGV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfZHJhd19idWZmZXJzJyk7XHJcbiAgICAgICAgICAgIGlmIChleHQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBidWZzID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMub3V0cHV0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQgPSBwYXJzZUludChhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBfZ2wuQ09MT1JfQVRUQUNITUVOVDAgJiYgYXR0YWNobWVudCA8PSBfZ2wuQ09MT1JfQVRUQUNITUVOVDAgKyA4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZnMucHVzaChhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBleHQuZHJhd0J1ZmZlcnNFWFQoYnVmcyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEFsd2F5cyBjbGVhclxyXG4gICAgICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNhdmVDbGVhcigpO1xyXG4gICAgICAgICAgICByZW5kZXJlci5jbGVhckJpdCA9IGdsZW51bS5ERVBUSF9CVUZGRVJfQklUIHwgZ2xlbnVtLkNPTE9SX0JVRkZFUl9CSVQ7XHJcbiAgICAgICAgICAgIHJlbmRlckluZm8gPSByZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSwgdGhpcy5jYW1lcmEsICF0aGlzLmF1dG9VcGRhdGVTY2VuZSwgdGhpcy5wcmVaKTtcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVzdG9yZUNsZWFyKCk7XHJcblxyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdhZnRlcnJlbmRlcicsIHJlbmRlckluZm8pO1xyXG5cclxuICAgICAgICB0aGlzLl9yZW5kZXJpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9yZW5kZXJlZCA9IHRydWU7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2NlbmVOb2RlO1xyXG4iLCJpbXBvcnQgQ29tcG9zaXRvck5vZGUgZnJvbSAnLi9Db21wb3NpdG9yTm9kZSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5UZXh0dXJlTm9kZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvck5vZGVcclxuICovXHJcbnZhciBUZXh0dXJlTm9kZSA9IENvbXBvc2l0b3JOb2RlLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5UZXh0dXJlTm9kZSMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0ZXh0dXJlOiBudWxsLFxyXG5cclxuICAgICAgICAvLyBUZXh0dXJlIG5vZGUgbXVzdCBoYXZlIG91dHB1dCB3aXRob3V0IHBhcmFtZXRlcnNcclxuICAgICAgICBvdXRwdXRzOiB7XHJcbiAgICAgICAgICAgIGNvbG9yOiB7fVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxufSwge1xyXG5cclxuICAgIGdldE91dHB1dDogZnVuY3Rpb24gKHJlbmRlcmVyLCBuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gRG8gbm90aGluZ1xyXG4gICAgYmVmb3JlRnJhbWU6IGZ1bmN0aW9uICgpIHt9LFxyXG4gICAgYWZ0ZXJGcmFtZTogZnVuY3Rpb24gKCkge31cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlTm9kZTtcclxuIiwiLy8gVE9ETyBTaGFkZXIgbGlicmFyeVxyXG5pbXBvcnQgUGFzcyBmcm9tICcuL1Bhc3MnO1xyXG5pbXBvcnQgQ29tcG9zaXRvck5vZGUgZnJvbSAnLi9Db21wb3NpdG9yTm9kZSc7XHJcblxyXG4vLyBUT0RPIGN1cmxub2lzZSBkZW1vIHdyb25nXHJcblxyXG4vLyBQRU5ESU5HXHJcbi8vIFVzZSB0b3BvbG9naWNhbCBzb3J0ID9cclxuXHJcbi8qKlxyXG4gKiBGaWx0ZXIgbm9kZVxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLkZpbHRlck5vZGVcclxuICogQGV4dGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgICB2YXIgbm9kZSA9IG5ldyBjbGF5LmNvbXBvc2l0b3IuRmlsdGVyTm9kZSh7XHJcbiAgICAgICAgbmFtZTogJ2Z4YWEnLFxyXG4gICAgICAgIHNoYWRlcjogY2xheS5TaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IuZnhhYScpLFxyXG4gICAgICAgIGlucHV0czoge1xyXG4gICAgICAgICAgICB0ZXh0dXJlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogJ3NjZW5lJyxcclxuICAgICAgICAgICAgICAgICAgICBwaW46ICdjb2xvcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gTXVsdGlwbGUgb3V0cHV0cyBpcyBwcmVzZXJ2ZWQgZm9yIE1SVCBzdXBwb3J0IGluIFdlYkdMMi4wXHJcbiAgICAgICAgb3V0cHV0czoge1xyXG4gICAgICAgICAgICBjb2xvcjoge1xyXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudDogY2xheS5GcmFtZUJ1ZmZlci5DT0xPUl9BVFRBQ0hNRU5UMFxyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogY2xheS5UZXh0dXJlLlJHQkEsXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDUxMixcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDUxMlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8vIE5vZGUgd2lsbCBrZWVwIHRoZSBSVFQgcmVuZGVyZWQgaW4gbGFzdCBmcmFtZVxyXG4gICAgICAgICAgICAgICAga2VlcExhc3RGcmFtZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBub2RlIG91dHB1dCB0aGUgUlRUIHJlbmRlcmVkIGluIGxhc3QgZnJhbWVcclxuICAgICAgICAgICAgICAgIG91dHB1dExhc3RGcmFtZTogdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAqXHJcbiAgICAqL1xyXG52YXIgRmlsdGVyTm9kZSA9IENvbXBvc2l0b3JOb2RlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuRmlsdGVyTm9kZSMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbmFtZTogJycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5wdXRzOiB7fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvdXRwdXRzOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNoYWRlcjogJycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElucHV0IGxpbmtzLCB3aWxsIGJlIHVwZGF0ZWQgYnkgdGhlIGdyYXBoXHJcbiAgICAgICAgICogQGV4YW1wbGU6XHJcbiAgICAgICAgICogICAgIGlucHV0TmFtZToge1xyXG4gICAgICAgICAqICAgICAgICAgbm9kZTogc29tZU5vZGUsXHJcbiAgICAgICAgICogICAgICAgICBwaW46ICd4eHh4J1xyXG4gICAgICAgICAqICAgICB9XHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBpbnB1dExpbmtzOiB7fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogT3V0cHV0IGxpbmtzLCB3aWxsIGJlIHVwZGF0ZWQgYnkgdGhlIGdyYXBoXHJcbiAgICAgICAgICogQGV4YW1wbGU6XHJcbiAgICAgICAgICogICAgIG91dHB1dE5hbWU6IHtcclxuICAgICAgICAgKiAgICAgICAgIG5vZGU6IHNvbWVOb2RlLFxyXG4gICAgICAgICAqICAgICAgICAgcGluOiAneHh4eCdcclxuICAgICAgICAgKiAgICAgfVxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb3V0cHV0TGlua3M6IHt9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5jb21wb3NpdG9yLlBhc3N9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcGFzczogbnVsbCxcclxuXHJcbiAgICAgICAgLy8gU2F2ZSB0aGUgb3V0cHV0IHRleHR1cmUgb2YgcHJldmlvdXMgZnJhbWVcclxuICAgICAgICAvLyBXaWxsIGJlIHVzZWQgd2hlbiB0aGVyZSBleGlzdCBhIGNpcmN1bGFyIHJlZmVyZW5jZVxyXG4gICAgICAgIF9wcmV2T3V0cHV0VGV4dHVyZXM6IHt9LFxyXG4gICAgICAgIF9vdXRwdXRUZXh0dXJlczoge30sXHJcblxyXG4gICAgICAgIC8vIEV4YW1wbGU6IHsgbmFtZTogMiB9XHJcbiAgICAgICAgX291dHB1dFJlZmVyZW5jZXM6IHt9LFxyXG5cclxuICAgICAgICBfcmVuZGVyaW5nOiBmYWxzZSxcclxuICAgICAgICAvLyBJZiByZW5kZXJlZCBpbiB0aGlzIGZyYW1lXHJcbiAgICAgICAgX3JlbmRlcmVkOiBmYWxzZSxcclxuXHJcbiAgICAgICAgX2NvbXBvc2l0b3I6IG51bGxcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgcGFzcyA9IG5ldyBQYXNzKHtcclxuICAgICAgICBmcmFnbWVudDogdGhpcy5zaGFkZXJcclxuICAgIH0pO1xyXG4gICAgdGhpcy5wYXNzID0gcGFzcztcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuRmlsdGVyTm9kZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZXJlbmRlcicsIHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpbnB1dE5hbWUgaW4gdGhpcy5pbnB1dExpbmtzKSB7XHJcbiAgICAgICAgICAgIHZhciBsaW5rID0gdGhpcy5pbnB1dExpbmtzW2lucHV0TmFtZV07XHJcbiAgICAgICAgICAgIHZhciBpbnB1dFRleHR1cmUgPSBsaW5rLm5vZGUuZ2V0T3V0cHV0KHJlbmRlcmVyLCBsaW5rLnBpbik7XHJcbiAgICAgICAgICAgIHRoaXMucGFzcy5zZXRVbmlmb3JtKGlucHV0TmFtZSwgaW5wdXRUZXh0dXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gT3V0cHV0XHJcbiAgICAgICAgaWYgKCF0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXNzLm91dHB1dHMgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5nZXRGcmFtZUJ1ZmZlcigpLnVuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBhc3MucmVuZGVyKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBhc3Mub3V0cHV0cyA9IHt9O1xyXG5cclxuICAgICAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXMgPSB7fTtcclxuICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJhbWV0ZXJzID0gdGhpcy51cGRhdGVQYXJhbWV0ZXIobmFtZSwgcmVuZGVyZXIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKHBhcmFtZXRlcnMud2lkdGgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQYXJhbWV0ZXIobmFtZSwgcmVuZGVyZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIG91dHB1dEluZm8gPSB0aGlzLm91dHB1dHNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX2NvbXBvc2l0b3IuYWxsb2NhdGVUZXh0dXJlKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV0gPSB0ZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dGFjaG1lbnQgPSBvdXRwdXRJbmZvLmF0dGFjaG1lbnQgfHwgX2dsLkNPTE9SX0FUVEFDSE1FTlQwO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihhdHRhY2htZW50KSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50ID0gX2dsW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSA9IHRleHR1cmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5nZXRGcmFtZUJ1ZmZlcigpLmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiBhdHRhY2hlZFRleHR1cmVzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBGSVhNRSBhdHRhY2htZW50IGNoYW5nZXMgaW4gZGlmZmVyZW50IG5vZGVzXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb21wb3NpdG9yLmdldEZyYW1lQnVmZmVyKCkuYXR0YWNoKFxyXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0sIGF0dGFjaG1lbnRcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucGFzcy5yZW5kZXIocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgZGF0YSBvZiB0ZXh0dXJlIGlzIGNoYW5nZWQgb3ZlciB0aW1lLFxyXG4gICAgICAgICAgICAvLyBIZXJlIHVwZGF0ZSB0aGUgbWlwbWFwcyBvZiB0ZXh0dXJlIGVhY2ggdGltZSBhZnRlciByZW5kZXJlZDtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5nZXRGcmFtZUJ1ZmZlcigpLnVwZGF0ZU1pcG1hcChyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpbnB1dE5hbWUgaW4gdGhpcy5pbnB1dExpbmtzKSB7XHJcbiAgICAgICAgICAgIHZhciBsaW5rID0gdGhpcy5pbnB1dExpbmtzW2lucHV0TmFtZV07XHJcbiAgICAgICAgICAgIGxpbmsubm9kZS5yZW1vdmVSZWZlcmVuY2UobGluay5waW4pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2FmdGVycmVuZGVyJywgcmVuZGVyZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBUT0RPIFJlbW92ZSBwYXJhbWV0ZXIgZnVuY3Rpb24gY2FsbGJhY2tcclxuICAgIHVwZGF0ZVBhcmFtZXRlcjogZnVuY3Rpb24gKG91dHB1dE5hbWUsIHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIG91dHB1dEluZm8gPSB0aGlzLm91dHB1dHNbb3V0cHV0TmFtZV07XHJcbiAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSBvdXRwdXRJbmZvLnBhcmFtZXRlcnM7XHJcbiAgICAgICAgdmFyIHBhcmFtZXRlcnNDb3B5ID0gb3V0cHV0SW5mby5fcGFyYW1ldGVyc0NvcHk7XHJcbiAgICAgICAgaWYgKCFwYXJhbWV0ZXJzQ29weSkge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJzQ29weSA9IG91dHB1dEluZm8uX3BhcmFtZXRlcnNDb3B5ID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSAnd2lkdGgnICYmIGtleSAhPT0gJ2hlaWdodCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzQ29weVtrZXldID0gcGFyYW1ldGVyc1trZXldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB3aWR0aCwgaGVpZ2h0O1xyXG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVycy53aWR0aCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHBhcmFtZXRlcnMud2lkdGguY2FsbCh0aGlzLCByZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHBhcmFtZXRlcnMud2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVycy5oZWlnaHQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gcGFyYW1ldGVycy5oZWlnaHQuY2FsbCh0aGlzLCByZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBwYXJhbWV0ZXJzLmhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2lkdGggPSBNYXRoLmNlaWwod2lkdGgpO1xyXG4gICAgICAgIGhlaWdodCA9IE1hdGguY2VpbChoZWlnaHQpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHkud2lkdGggIT09IHdpZHRoXHJcbiAgICAgICAgICAgIHx8IHBhcmFtZXRlcnNDb3B5LmhlaWdodCAhPT0gaGVpZ2h0XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0uZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcGFyYW1ldGVyc0NvcHkud2lkdGggPSB3aWR0aDtcclxuICAgICAgICBwYXJhbWV0ZXJzQ29weS5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJhbWV0ZXJzQ29weTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcGFyYW1ldGVyXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHBhcmFtIHt9IHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHNldFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5wYXNzLnNldFVuaWZvcm0obmFtZSwgdmFsdWUpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogR2V0IHBhcmFtZXRlciB2YWx1ZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHt9XHJcbiAgICAgKi9cclxuICAgIGdldFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXNzLmdldFVuaWZvcm0obmFtZSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcGFyYW1ldGVyc1xyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9ialxyXG4gICAgICovXHJcbiAgICBzZXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBvYmopIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXIobmFtZSwgb2JqW25hbWVdKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLy8gLyoqXHJcbiAgICAvLyAgKiBTZXQgc2hhZGVyIGNvZGVcclxuICAgIC8vICAqIEBwYXJhbSB7c3RyaW5nfSBzaGFkZXJTdHJcclxuICAgIC8vICAqL1xyXG4gICAgLy8gc2V0U2hhZGVyOiBmdW5jdGlvbiAoc2hhZGVyU3RyKSB7XHJcbiAgICAvLyAgICAgdmFyIG1hdGVyaWFsID0gdGhpcy5wYXNzLm1hdGVyaWFsO1xyXG4gICAgLy8gICAgIG1hdGVyaWFsLnNoYWRlci5zZXRGcmFnbWVudChzaGFkZXJTdHIpO1xyXG4gICAgLy8gICAgIG1hdGVyaWFsLmF0dGFjaFNoYWRlcihtYXRlcmlhbC5zaGFkZXIsIHRydWUpO1xyXG4gICAgLy8gfSxcclxuICAgIC8qKlxyXG4gICAgICogUHJveHkgb2YgcGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgeHh4KTtcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFt2YWxdXHJcbiAgICAgKi9cclxuICAgIGRlZmluZTogZnVuY3Rpb24gKHN5bWJvbCwgdmFsKSB7XHJcbiAgICAgICAgdGhpcy5wYXNzLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCBzeW1ib2wsIHZhbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJveHkgb2YgcGFzcy5tYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCB4eHgpXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICovXHJcbiAgICB1bmRlZmluZTogZnVuY3Rpb24gKHN5bWJvbCkge1xyXG4gICAgICAgIHRoaXMucGFzcy5tYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCBzeW1ib2wpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW1vdmVSZWZlcmVuY2U6IGZ1bmN0aW9uIChvdXRwdXROYW1lKSB7XHJcbiAgICAgICAgdGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXS0tO1xyXG4gICAgICAgIGlmICh0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW291dHB1dE5hbWVdID09PSAwKSB7XHJcbiAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW291dHB1dE5hbWVdO1xyXG4gICAgICAgICAgICBpZiAob3V0cHV0SW5mby5rZWVwTGFzdEZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdID0gdGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBPdXRwdXQgb2YgdGhpcyBub2RlIGhhdmUgYWxyZWF5IGJlZW4gdXNlZCBieSBhbGwgb3RoZXIgbm9kZXNcclxuICAgICAgICAgICAgICAgIC8vIFB1dCB0aGUgdGV4dHVyZSBiYWNrIHRvIHRoZSBwb29sLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgQ29tcG9zaXRvck5vZGUucHJvdG90eXBlLmNsZWFyLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIC8vIERlZmF1bHQgZGlzYWJsZSBhbGwgdGV4dHVyZVxyXG4gICAgICAgIHRoaXMucGFzcy5tYXRlcmlhbC5kaXNhYmxlVGV4dHVyZXNBbGwoKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGaWx0ZXJOb2RlO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmNvbG9yYWRqdXN0XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGJyaWdodG5lc3MgOiAwLjA7XFxudW5pZm9ybSBmbG9hdCBjb250cmFzdCA6IDEuMDtcXG51bmlmb3JtIGZsb2F0IGV4cG9zdXJlIDogMC4wO1xcbnVuaWZvcm0gZmxvYXQgZ2FtbWEgOiAxLjA7XFxudW5pZm9ybSBmbG9hdCBzYXR1cmF0aW9uIDogMS4wO1xcbmNvbnN0IHZlYzMgdyA9IHZlYzMoMC4yMTI1LCAwLjcxNTQsIDAuMDcyMSk7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9IGNsYW1wKHRleC5yZ2IgKyB2ZWMzKGJyaWdodG5lc3MpLCAwLjAsIDEuMCk7XFxuIGNvbG9yID0gY2xhbXAoIChjb2xvci12ZWMzKDAuNSkpKmNvbnRyYXN0K3ZlYzMoMC41KSwgMC4wLCAxLjApO1xcbiBjb2xvciA9IGNsYW1wKCBjb2xvciAqIHBvdygyLjAsIGV4cG9zdXJlKSwgMC4wLCAxLjApO1xcbiBjb2xvciA9IGNsYW1wKCBwb3coY29sb3IsIHZlYzMoZ2FtbWEpKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBsdW1pbmFuY2UgPSBkb3QoIGNvbG9yLCB3ICk7XFxuIGNvbG9yID0gbWl4KHZlYzMobHVtaW5hbmNlKSwgY29sb3IsIHNhdHVyYXRpb24pO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5icmlnaHRuZXNzXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGJyaWdodG5lc3MgOiAwLjA7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9IHRleC5yZ2IgKyB2ZWMzKGJyaWdodG5lc3MpO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5jb250cmFzdFxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBjb250cmFzdCA6IDEuMDtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQoIHRleHR1cmUsIHZfVGV4Y29vcmQpO1xcbiB2ZWMzIGNvbG9yID0gKHRleC5yZ2ItdmVjMygwLjUpKSpjb250cmFzdCt2ZWMzKDAuNSk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIHRleC5hKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmV4cG9zdXJlXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGV4cG9zdXJlIDogMC4wO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9IHRleC5yZ2IgKiBwb3coMi4wLCBleHBvc3VyZSk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIHRleC5hKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmdhbW1hXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGdhbW1hIDogMS4wO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9IHBvdyh0ZXgucmdiLCB2ZWMzKGdhbW1hKSk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIHRleC5hKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLnNhdHVyYXRpb25cXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gZmxvYXQgc2F0dXJhdGlvbiA6IDEuMDtcXG5jb25zdCB2ZWMzIHcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9IHRleC5yZ2I7XFxuIGZsb2F0IGx1bWluYW5jZSA9IGRvdChjb2xvciwgdyk7XFxuIGNvbG9yID0gbWl4KHZlYzMobHVtaW5hbmNlKSwgY29sb3IsIHNhdHVyYXRpb24pO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5rZXJuZWwuZ2F1c3NpYW5fOVxcbmZsb2F0IGdhdXNzaWFuS2VybmVsWzldO1xcbmdhdXNzaWFuS2VybmVsWzBdID0gMC4wNztcXG5nYXVzc2lhbktlcm5lbFsxXSA9IDAuMDk7XFxuZ2F1c3NpYW5LZXJuZWxbMl0gPSAwLjEyO1xcbmdhdXNzaWFuS2VybmVsWzNdID0gMC4xNDtcXG5nYXVzc2lhbktlcm5lbFs0XSA9IDAuMTY7XFxuZ2F1c3NpYW5LZXJuZWxbNV0gPSAwLjE0O1xcbmdhdXNzaWFuS2VybmVsWzZdID0gMC4xMjtcXG5nYXVzc2lhbktlcm5lbFs3XSA9IDAuMDk7XFxuZ2F1c3NpYW5LZXJuZWxbOF0gPSAwLjA3O1xcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5rZXJuZWwuZ2F1c3NpYW5fMTNcXG5mbG9hdCBnYXVzc2lhbktlcm5lbFsxM107XFxuZ2F1c3NpYW5LZXJuZWxbMF0gPSAwLjAyO1xcbmdhdXNzaWFuS2VybmVsWzFdID0gMC4wMztcXG5nYXVzc2lhbktlcm5lbFsyXSA9IDAuMDY7XFxuZ2F1c3NpYW5LZXJuZWxbM10gPSAwLjA4O1xcbmdhdXNzaWFuS2VybmVsWzRdID0gMC4xMTtcXG5nYXVzc2lhbktlcm5lbFs1XSA9IDAuMTM7XFxuZ2F1c3NpYW5LZXJuZWxbNl0gPSAwLjE0O1xcbmdhdXNzaWFuS2VybmVsWzddID0gMC4xMztcXG5nYXVzc2lhbktlcm5lbFs4XSA9IDAuMTE7XFxuZ2F1c3NpYW5LZXJuZWxbOV0gPSAwLjA4O1xcbmdhdXNzaWFuS2VybmVsWzEwXSA9IDAuMDY7XFxuZ2F1c3NpYW5LZXJuZWxbMTFdID0gMC4wMztcXG5nYXVzc2lhbktlcm5lbFsxMl0gPSAwLjAyO1xcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5nYXVzc2lhbl9ibHVyXFxuI2RlZmluZSBTSEFERVJfTkFNRSBnYXVzc2lhbl9ibHVyXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTt2YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIGZsb2F0IGJsdXJTaXplIDogMi4wO1xcbnVuaWZvcm0gdmVjMiB0ZXh0dXJlU2l6ZSA6IFs1MTIuMCwgNTEyLjBdO1xcbnVuaWZvcm0gZmxvYXQgYmx1ckRpciA6IDAuMDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwuY2xhbXBfc2FtcGxlXFxudm9pZCBtYWluICh2b2lkKVxcbntcXG4gQGltcG9ydCBjbGF5LmNvbXBvc2l0b3Iua2VybmVsLmdhdXNzaWFuXzlcXG4gdmVjMiBvZmYgPSBibHVyU2l6ZSAvIHRleHR1cmVTaXplO1xcbiBvZmYgKj0gdmVjMigxLjAgLSBibHVyRGlyLCBibHVyRGlyKTtcXG4gdmVjNCBzdW0gPSB2ZWM0KDAuMCk7XFxuIGZsb2F0IHdlaWdodEFsbCA9IDAuMDtcXG4gZm9yIChpbnQgaSA9IDA7IGkgPCA5OyBpKyspIHtcXG4gZmxvYXQgdyA9IGdhdXNzaWFuS2VybmVsW2ldO1xcbiB2ZWM0IHRleGVsID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBmbG9hdChpIC0gNCkgKiBvZmYpKTtcXG4gc3VtICs9IHRleGVsICogdztcXG4gd2VpZ2h0QWxsICs9IHc7XFxuIH1cXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHN1bSAvIG1heCh3ZWlnaHRBbGwsIDAuMDEpKTtcXG59XFxuQGVuZFxcblwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmhkci5sb2dfbHVtXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG5jb25zdCB2ZWMzIHcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQpKTtcXG4gZmxvYXQgbHVtaW5hbmNlID0gZG90KHRleC5yZ2IsIHcpO1xcbiBsdW1pbmFuY2UgPSBsb2cobHVtaW5hbmNlICsgMC4wMDEpO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNCh2ZWMzKGx1bWluYW5jZSksIDEuMCkpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuaGRyLmx1bV9hZGFwdGlvblxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGFkYXB0ZWRMdW07XFxudW5pZm9ybSBzYW1wbGVyMkQgY3VycmVudEx1bTtcXG51bmlmb3JtIGZsb2F0IGZyYW1lVGltZSA6IDAuMDI7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiBmbG9hdCBmQWRhcHRlZEx1bSA9IGRlY29kZUhEUih0ZXh0dXJlMkQoYWRhcHRlZEx1bSwgdmVjMigwLjUsIDAuNSkpKS5yO1xcbiBmbG9hdCBmQ3VycmVudEx1bSA9IGV4cChlbmNvZGVIRFIodGV4dHVyZTJEKGN1cnJlbnRMdW0sIHZlYzIoMC41LCAwLjUpKSkucik7XFxuIGZBZGFwdGVkTHVtICs9IChmQ3VycmVudEx1bSAtIGZBZGFwdGVkTHVtKSAqICgxLjAgLSBwb3coMC45OCwgMzAuMCAqIGZyYW1lVGltZSkpO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNCh2ZWMzKGZBZGFwdGVkTHVtKSwgMS4wKSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5sdW1cXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbmNvbnN0IHZlYzMgdyA9IHZlYzMoMC4yMTI1LCAwLjcxNTQsIDAuMDcyMSk7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkICk7XFxuIGZsb2F0IGx1bWluYW5jZSA9IGRvdCh0ZXgucmdiLCB3KTtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGx1bWluYW5jZSksIDEuMCk7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5sdXRcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGxvb2t1cDtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIGZsb2F0IGJsdWVDb2xvciA9IHRleC5iICogNjMuMDtcXG4gdmVjMiBxdWFkMTtcXG4gcXVhZDEueSA9IGZsb29yKGZsb29yKGJsdWVDb2xvcikgLyA4LjApO1xcbiBxdWFkMS54ID0gZmxvb3IoYmx1ZUNvbG9yKSAtIChxdWFkMS55ICogOC4wKTtcXG4gdmVjMiBxdWFkMjtcXG4gcXVhZDIueSA9IGZsb29yKGNlaWwoYmx1ZUNvbG9yKSAvIDguMCk7XFxuIHF1YWQyLnggPSBjZWlsKGJsdWVDb2xvcikgLSAocXVhZDIueSAqIDguMCk7XFxuIHZlYzIgdGV4UG9zMTtcXG4gdGV4UG9zMS54ID0gKHF1YWQxLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIHRleC5yKTtcXG4gdGV4UG9zMS55ID0gKHF1YWQxLnkgKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIHRleC5nKTtcXG4gdmVjMiB0ZXhQb3MyO1xcbiB0ZXhQb3MyLnggPSAocXVhZDIueCAqIDAuMTI1KSArIDAuNS81MTIuMCArICgoMC4xMjUgLSAxLjAvNTEyLjApICogdGV4LnIpO1xcbiB0ZXhQb3MyLnkgPSAocXVhZDIueSAqIDAuMTI1KSArIDAuNS81MTIuMCArICgoMC4xMjUgLSAxLjAvNTEyLjApICogdGV4LmcpO1xcbiB2ZWM0IG5ld0NvbG9yMSA9IHRleHR1cmUyRChsb29rdXAsIHRleFBvczEpO1xcbiB2ZWM0IG5ld0NvbG9yMiA9IHRleHR1cmUyRChsb29rdXAsIHRleFBvczIpO1xcbiB2ZWM0IG5ld0NvbG9yID0gbWl4KG5ld0NvbG9yMSwgbmV3Q29sb3IyLCBmcmFjdChibHVlQ29sb3IpKTtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChuZXdDb2xvci5yZ2IsIHRleC53KTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLnZpZ25ldHRlXFxuI2RlZmluZSBPVVRQVVRfQUxQSEFcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gZmxvYXQgZGFya25lc3M6IDE7XFxudW5pZm9ybSBmbG9hdCBvZmZzZXQ6IDE7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSB0ZXhlbC5yZ2I7XFxuIHZlYzIgdXYgPSAodl9UZXhjb29yZCAtIHZlYzIoMC41KSkgKiB2ZWMyKG9mZnNldCk7XFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUih2ZWM0KG1peCh0ZXhlbC5yZ2IsIHZlYzMoMS4wIC0gZGFya25lc3MpLCBkb3QodXYsIHV2KSksIHRleGVsLmEpKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLm91dHB1dFxcbiNkZWZpbmUgT1VUUFVUX0FMUEhBXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSB0ZXgucmdiO1xcbiNpZmRlZiBPVVRQVVRfQUxQSEFcXG4gZ2xfRnJhZ0NvbG9yLmEgPSB0ZXguYTtcXG4jZWxzZVxcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGdsX0ZyYWdDb2xvcik7XFxuI2lmZGVmIFBSRU1VTFRJUExZX0FMUEhBXFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7XFxuI2VuZGlmXFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5icmlnaHRcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gZmxvYXQgdGhyZXNob2xkIDogMTtcXG51bmlmb3JtIGZsb2F0IHNjYWxlIDogMS4wO1xcbnVuaWZvcm0gdmVjMiB0ZXh0dXJlU2l6ZTogWzUxMiwgNTEyXTtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5jb25zdCB2ZWMzIGx1bVdlaWdodCA9IHZlYzMoMC4yMTI1LCAwLjcxNTQsIDAuMDcyMSk7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZlYzQgbWVkaWFuKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IGMpXFxue1xcbiByZXR1cm4gYSArIGIgKyBjIC0gbWluKG1pbihhLCBiKSwgYykgLSBtYXgobWF4KGEsIGIpLCBjKTtcXG59XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQpKTtcXG4jaWZkZWYgQU5USV9GTElDS0VSXFxuIHZlYzMgZCA9IDEuMCAvIHRleHR1cmVTaXplLnh5eCAqIHZlYzMoMS4wLCAxLjAsIDAuMCk7XFxuIHZlYzQgczEgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQgLSBkLnh6KSk7XFxuIHZlYzQgczIgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh6KSk7XFxuIHZlYzQgczMgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQgLSBkLnp5KSk7XFxuIHZlYzQgczQgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp5KSk7XFxuIHRleGVsID0gbWVkaWFuKG1lZGlhbih0ZXhlbCwgczEsIHMyKSwgczMsIHM0KTtcXG4jZW5kaWZcXG4gZmxvYXQgbHVtID0gZG90KHRleGVsLnJnYiAsIGx1bVdlaWdodCk7XFxuIHZlYzQgY29sb3I7XFxuIGlmIChsdW0gPiB0aHJlc2hvbGQgJiYgdGV4ZWwuYSA+IDAuMClcXG4ge1xcbiBjb2xvciA9IHZlYzQodGV4ZWwucmdiICogc2NhbGUsIHRleGVsLmEgKiBzY2FsZSk7XFxuIH1cXG4gZWxzZVxcbiB7XFxuIGNvbG9yID0gdmVjNCgwLjApO1xcbiB9XFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihjb2xvcik7XFxufVxcbkBlbmRcXG5cIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5kb3duc2FtcGxlXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemUgOiBbNTEyLCA1MTJdO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5mbG9hdCBicmlnaHRuZXNzKHZlYzMgYylcXG57XFxuIHJldHVybiBtYXgobWF4KGMuciwgYy5nKSwgYy5iKTtcXG59XFxuQGltcG9ydCBjbGF5LnV0aWwuY2xhbXBfc2FtcGxlXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgZCA9IHZlYzQoLTEuMCwgLTEuMCwgMS4wLCAxLjApIC8gdGV4dHVyZVNpemUueHl4eTtcXG4jaWZkZWYgQU5USV9GTElDS0VSXFxuIHZlYzMgczEgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHkpKS5yZ2I7XFxuIHZlYzMgczIgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuenkpKS5yZ2I7XFxuIHZlYzMgczMgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHcpKS5yZ2I7XFxuIHZlYzMgczQgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuencpKS5yZ2I7XFxuIGZsb2F0IHMxdyA9IDEuMCAvIChicmlnaHRuZXNzKHMxKSArIDEuMCk7XFxuIGZsb2F0IHMydyA9IDEuMCAvIChicmlnaHRuZXNzKHMyKSArIDEuMCk7XFxuIGZsb2F0IHMzdyA9IDEuMCAvIChicmlnaHRuZXNzKHMzKSArIDEuMCk7XFxuIGZsb2F0IHM0dyA9IDEuMCAvIChicmlnaHRuZXNzKHM0KSArIDEuMCk7XFxuIGZsb2F0IG9uZURpdmlkZVN1bSA9IDEuMCAvIChzMXcgKyBzMncgKyBzM3cgKyBzNHcpO1xcbiB2ZWM0IGNvbG9yID0gdmVjNChcXG4gKHMxICogczF3ICsgczIgKiBzMncgKyBzMyAqIHMzdyArIHM0ICogczR3KSAqIG9uZURpdmlkZVN1bSxcXG4gMS4wXFxuICk7XFxuI2Vsc2VcXG4gdmVjNCBjb2xvciA9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eSkpO1xcbiBjb2xvciArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuenkpKTtcXG4gY29sb3IgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh3KSk7XFxuIGNvbG9yICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56dykpO1xcbiBjb2xvciAqPSAwLjI1O1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoY29sb3IpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IudXBzYW1wbGVcXG4jZGVmaW5lIEhJR0hfUVVBTElUWVxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMiwgNTEyXTtcXG51bmlmb3JtIGZsb2F0IHNhbXBsZVNjYWxlOiAwLjU7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZvaWQgbWFpbigpXFxue1xcbiNpZmRlZiBISUdIX1FVQUxJVFlcXG4gdmVjNCBkID0gdmVjNCgxLjAsIDEuMCwgLTEuMCwgMC4wKSAvIHRleHR1cmVTaXplLnh5eHkgKiBzYW1wbGVTY2FsZTtcXG4gdmVjNCBzO1xcbiBzID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgLSBkLnh5KSk7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgLSBkLnd5KSkgKiAyLjA7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgLSBkLnp5KSk7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp3KSkgKiAyLjA7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKSkgKiA0LjA7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh3KSkgKiAyLjA7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp5KSk7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnd5KSkgKiAyLjA7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh5KSk7XFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihzIC8gMTYuMCk7XFxuI2Vsc2VcXG4gdmVjNCBkID0gdmVjNCgtMS4wLCAtMS4wLCArMS4wLCArMS4wKSAvIHRleHR1cmVTaXplLnh5eHk7XFxuIHZlYzQgcztcXG4gcyA9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eSkpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56eSkpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54dykpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56dykpO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIocyAvIDQuMCk7XFxuI2VuZGlmXFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5oZHIuY29tcG9zaXRlXFxuI2RlZmluZSBUT05FTUFQUElOR1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxuI2lmZGVmIEJMT09NX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBibG9vbTtcXG4jZW5kaWZcXG4jaWZkZWYgTEVOU0ZMQVJFX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBsZW5zZmxhcmU7XFxudW5pZm9ybSBzYW1wbGVyMkQgbGVuc2RpcnQ7XFxuI2VuZGlmXFxuI2lmZGVmIExVTV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbHVtO1xcbiNlbmRpZlxcbiNpZmRlZiBMVVRfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGx1dDtcXG4jZW5kaWZcXG4jaWZkZWYgQ09MT1JfQ09SUkVDVElPTlxcbnVuaWZvcm0gZmxvYXQgYnJpZ2h0bmVzcyA6IDAuMDtcXG51bmlmb3JtIGZsb2F0IGNvbnRyYXN0IDogMS4wO1xcbnVuaWZvcm0gZmxvYXQgc2F0dXJhdGlvbiA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVklHTkVUVEVcXG51bmlmb3JtIGZsb2F0IHZpZ25ldHRlRGFya25lc3M6IDEuMDtcXG51bmlmb3JtIGZsb2F0IHZpZ25ldHRlT2Zmc2V0OiAxLjA7XFxuI2VuZGlmXFxudW5pZm9ybSBmbG9hdCBleHBvc3VyZSA6IDEuMDtcXG51bmlmb3JtIGZsb2F0IGJsb29tSW50ZW5zaXR5IDogMC4yNTtcXG51bmlmb3JtIGZsb2F0IGxlbnNmbGFyZUludGVuc2l0eSA6IDE7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwuc3JnYlxcbnZlYzMgQUNFU1RvbmVNYXBwaW5nKHZlYzMgY29sb3IpXFxue1xcbiBjb25zdCBmbG9hdCBBID0gMi41MTtcXG4gY29uc3QgZmxvYXQgQiA9IDAuMDM7XFxuIGNvbnN0IGZsb2F0IEMgPSAyLjQzO1xcbiBjb25zdCBmbG9hdCBEID0gMC41OTtcXG4gY29uc3QgZmxvYXQgRSA9IDAuMTQ7XFxuIHJldHVybiAoY29sb3IgKiAoQSAqIGNvbG9yICsgQikpIC8gKGNvbG9yICogKEMgKiBjb2xvciArIEQpICsgRSk7XFxufVxcbmZsb2F0IGV5ZUFkYXB0aW9uKGZsb2F0IGZMdW0pXFxue1xcbiByZXR1cm4gbWl4KDAuMiwgZkx1bSwgMC41KTtcXG59XFxuI2lmZGVmIExVVF9FTkFCTEVEXFxudmVjMyBsdXRUcmFuc2Zvcm0odmVjMyBjb2xvcikge1xcbiBmbG9hdCBibHVlQ29sb3IgPSBjb2xvci5iICogNjMuMDtcXG4gdmVjMiBxdWFkMTtcXG4gcXVhZDEueSA9IGZsb29yKGZsb29yKGJsdWVDb2xvcikgLyA4LjApO1xcbiBxdWFkMS54ID0gZmxvb3IoYmx1ZUNvbG9yKSAtIChxdWFkMS55ICogOC4wKTtcXG4gdmVjMiBxdWFkMjtcXG4gcXVhZDIueSA9IGZsb29yKGNlaWwoYmx1ZUNvbG9yKSAvIDguMCk7XFxuIHF1YWQyLnggPSBjZWlsKGJsdWVDb2xvcikgLSAocXVhZDIueSAqIDguMCk7XFxuIHZlYzIgdGV4UG9zMTtcXG4gdGV4UG9zMS54ID0gKHF1YWQxLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIGNvbG9yLnIpO1xcbiB0ZXhQb3MxLnkgPSAocXVhZDEueSAqIDAuMTI1KSArIDAuNS81MTIuMCArICgoMC4xMjUgLSAxLjAvNTEyLjApICogY29sb3IuZyk7XFxuIHZlYzIgdGV4UG9zMjtcXG4gdGV4UG9zMi54ID0gKHF1YWQyLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIGNvbG9yLnIpO1xcbiB0ZXhQb3MyLnkgPSAocXVhZDIueSAqIDAuMTI1KSArIDAuNS81MTIuMCArICgoMC4xMjUgLSAxLjAvNTEyLjApICogY29sb3IuZyk7XFxuIHZlYzQgbmV3Q29sb3IxID0gdGV4dHVyZTJEKGx1dCwgdGV4UG9zMSk7XFxuIHZlYzQgbmV3Q29sb3IyID0gdGV4dHVyZTJEKGx1dCwgdGV4UG9zMik7XFxuIHZlYzQgbmV3Q29sb3IgPSBtaXgobmV3Q29sb3IxLCBuZXdDb2xvcjIsIGZyYWN0KGJsdWVDb2xvcikpO1xcbiByZXR1cm4gbmV3Q29sb3IucmdiO1xcbn1cXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ZWwgPSB2ZWM0KDAuMCk7XFxuIHZlYzQgb3JpZ2luYWxUZXhlbCA9IHZlYzQoMC4wKTtcXG4jaWZkZWYgVEVYVFVSRV9FTkFCTEVEXFxuIHRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuIG9yaWdpbmFsVGV4ZWwgPSB0ZXhlbDtcXG4jZW5kaWZcXG4jaWZkZWYgQkxPT01fRU5BQkxFRFxcbiB2ZWM0IGJsb29tVGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZTJEKGJsb29tLCB2X1RleGNvb3JkKSk7XFxuIHRleGVsLnJnYiArPSBibG9vbVRleGVsLnJnYiAqIGJsb29tSW50ZW5zaXR5O1xcbiB0ZXhlbC5hICs9IGJsb29tVGV4ZWwuYSAqIGJsb29tSW50ZW5zaXR5O1xcbiNlbmRpZlxcbiNpZmRlZiBMRU5TRkxBUkVfRU5BQkxFRFxcbiB0ZXhlbCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKGxlbnNmbGFyZSwgdl9UZXhjb29yZCkpICogdGV4dHVyZTJEKGxlbnNkaXJ0LCB2X1RleGNvb3JkKSAqIGxlbnNmbGFyZUludGVuc2l0eTtcXG4jZW5kaWZcXG4gdGV4ZWwuYSA9IG1pbih0ZXhlbC5hLCAxLjApO1xcbiNpZmRlZiBMVU1fRU5BQkxFRFxcbiBmbG9hdCBmTHVtID0gdGV4dHVyZTJEKGx1bSwgdmVjMigwLjUsIDAuNSkpLnI7XFxuIGZsb2F0IGFkYXB0ZWRMdW1EZXN0ID0gMy4wIC8gKG1heCgwLjEsIDEuMCArIDEwLjAqZXllQWRhcHRpb24oZkx1bSkpKTtcXG4gZmxvYXQgZXhwb3N1cmVCaWFzID0gYWRhcHRlZEx1bURlc3QgKiBleHBvc3VyZTtcXG4jZWxzZVxcbiBmbG9hdCBleHBvc3VyZUJpYXMgPSBleHBvc3VyZTtcXG4jZW5kaWZcXG4jaWZkZWYgVE9ORU1BUFBJTkdcXG4gdGV4ZWwucmdiICo9IGV4cG9zdXJlQmlhcztcXG4gdGV4ZWwucmdiID0gQUNFU1RvbmVNYXBwaW5nKHRleGVsLnJnYik7XFxuI2VuZGlmXFxuIHRleGVsID0gbGluZWFyVG9zUkdCKHRleGVsKTtcXG4jaWZkZWYgTFVUX0VOQUJMRURcXG4gdGV4ZWwucmdiID0gbHV0VHJhbnNmb3JtKGNsYW1wKHRleGVsLnJnYix2ZWMzKDAuMCksdmVjMygxLjApKSk7XFxuI2VuZGlmXFxuI2lmZGVmIENPTE9SX0NPUlJFQ1RJT05cXG4gdGV4ZWwucmdiID0gY2xhbXAodGV4ZWwucmdiICsgdmVjMyhicmlnaHRuZXNzKSwgMC4wLCAxLjApO1xcbiB0ZXhlbC5yZ2IgPSBjbGFtcCgodGV4ZWwucmdiIC0gdmVjMygwLjUpKSpjb250cmFzdCt2ZWMzKDAuNSksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbHVtID0gZG90KHRleGVsLnJnYiwgdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKSk7XFxuIHRleGVsLnJnYiA9IG1peCh2ZWMzKGx1bSksIHRleGVsLnJnYiwgc2F0dXJhdGlvbik7XFxuI2VuZGlmXFxuI2lmZGVmIFZJR05FVFRFXFxuIHZlYzIgdXYgPSAodl9UZXhjb29yZCAtIHZlYzIoMC41KSkgKiB2ZWMyKHZpZ25ldHRlT2Zmc2V0KTtcXG4gdGV4ZWwucmdiID0gbWl4KHRleGVsLnJnYiwgdmVjMygxLjAgLSB2aWduZXR0ZURhcmtuZXNzKSwgZG90KHV2LCB1dikpO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodGV4ZWwpO1xcbiNpZmRlZiBERUJVR1xcbiAjaWYgREVCVUcgPT0gMVxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSkpO1xcbiAjZWxpZiBERUJVRyA9PSAyXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihkZWNvZGVIRFIodGV4dHVyZTJEKGJsb29tLCB2X1RleGNvb3JkKSkgKiBibG9vbUludGVuc2l0eSk7XFxuICNlbGlmIERFQlVHID09IDNcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGRlY29kZUhEUih0ZXh0dXJlMkQobGVuc2ZsYXJlLCB2X1RleGNvb3JkKSAqIGxlbnNmbGFyZUludGVuc2l0eSkpO1xcbiAjZW5kaWZcXG4jZW5kaWZcXG4gaWYgKG9yaWdpbmFsVGV4ZWwuYSA8PSAwLjAxICYmIGdsX0ZyYWdDb2xvci5hID4gMWUtNSkge1xcbiBnbF9GcmFnQ29sb3IuYSA9IGRvdChnbF9GcmFnQ29sb3IucmdiLCB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpKTtcXG4gfVxcbiNpZmRlZiBQUkVNVUxUSVBMWV9BTFBIQVxcbiBnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hO1xcbiNlbmRpZlxcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IubGVuc2ZsYXJlXFxuI2RlZmluZSBTQU1QTEVfTlVNQkVSIDhcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGxlbnNjb2xvcjtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemUgOiBbNTEyLCA1MTJdO1xcbnVuaWZvcm0gZmxvYXQgZGlzcGVyc2FsIDogMC4zO1xcbnVuaWZvcm0gZmxvYXQgaGFsb1dpZHRoIDogMC40O1xcbnVuaWZvcm0gZmxvYXQgZGlzdG9ydGlvbiA6IDEuMDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudmVjNCB0ZXh0dXJlRGlzdG9ydGVkKFxcbiBpbiB2ZWMyIHRleGNvb3JkLFxcbiBpbiB2ZWMyIGRpcmVjdGlvbixcXG4gaW4gdmVjMyBkaXN0b3J0aW9uXFxuKSB7XFxuIHJldHVybiB2ZWM0KFxcbiBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHRleGNvb3JkICsgZGlyZWN0aW9uICogZGlzdG9ydGlvbi5yKSkucixcXG4gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB0ZXhjb29yZCArIGRpcmVjdGlvbiAqIGRpc3RvcnRpb24uZykpLmcsXFxuIGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdGV4Y29vcmQgKyBkaXJlY3Rpb24gKiBkaXN0b3J0aW9uLmIpKS5iLFxcbiAxLjBcXG4gKTtcXG59XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzIgdGV4Y29vcmQgPSAtdl9UZXhjb29yZCArIHZlYzIoMS4wKTsgdmVjMiB0ZXh0dXJlT2Zmc2V0ID0gMS4wIC8gdGV4dHVyZVNpemU7XFxuIHZlYzIgZ2hvc3RWZWMgPSAodmVjMigwLjUpIC0gdGV4Y29vcmQpICogZGlzcGVyc2FsO1xcbiB2ZWMyIGhhbG9WZWMgPSBub3JtYWxpemUoZ2hvc3RWZWMpICogaGFsb1dpZHRoO1xcbiB2ZWMzIGRpc3RvcnRpb24gPSB2ZWMzKC10ZXh0dXJlT2Zmc2V0LnggKiBkaXN0b3J0aW9uLCAwLjAsIHRleHR1cmVPZmZzZXQueCAqIGRpc3RvcnRpb24pO1xcbiB2ZWM0IHJlc3VsdCA9IHZlYzQoMC4wKTtcXG4gZm9yIChpbnQgaSA9IDA7IGkgPCBTQU1QTEVfTlVNQkVSOyBpKyspXFxuIHtcXG4gdmVjMiBvZmZzZXQgPSBmcmFjdCh0ZXhjb29yZCArIGdob3N0VmVjICogZmxvYXQoaSkpO1xcbiBmbG9hdCB3ZWlnaHQgPSBsZW5ndGgodmVjMigwLjUpIC0gb2Zmc2V0KSAvIGxlbmd0aCh2ZWMyKDAuNSkpO1xcbiB3ZWlnaHQgPSBwb3coMS4wIC0gd2VpZ2h0LCAxMC4wKTtcXG4gcmVzdWx0ICs9IHRleHR1cmVEaXN0b3J0ZWQob2Zmc2V0LCBub3JtYWxpemUoZ2hvc3RWZWMpLCBkaXN0b3J0aW9uKSAqIHdlaWdodDtcXG4gfVxcbiByZXN1bHQgKj0gdGV4dHVyZTJEKGxlbnNjb2xvciwgdmVjMihsZW5ndGgodmVjMigwLjUpIC0gdGV4Y29vcmQpKSAvIGxlbmd0aCh2ZWMyKDAuNSkpKTtcXG4gZmxvYXQgd2VpZ2h0ID0gbGVuZ3RoKHZlYzIoMC41KSAtIGZyYWN0KHRleGNvb3JkICsgaGFsb1ZlYykpIC8gbGVuZ3RoKHZlYzIoMC41KSk7XFxuIHdlaWdodCA9IHBvdygxLjAgLSB3ZWlnaHQsIDEwLjApO1xcbiB2ZWMyIG9mZnNldCA9IGZyYWN0KHRleGNvb3JkICsgaGFsb1ZlYyk7XFxuIHJlc3VsdCArPSB0ZXh0dXJlRGlzdG9ydGVkKG9mZnNldCwgbm9ybWFsaXplKGdob3N0VmVjKSwgZGlzdG9ydGlvbikgKiB3ZWlnaHQ7XFxuIGdsX0ZyYWdDb2xvciA9IHJlc3VsdDtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmJsZW5kXFxuI2RlZmluZSBTSEFERVJfTkFNRSBibGVuZFxcbiNpZmRlZiBURVhUVVJFMV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTE7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQxIDogMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFMl9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTI7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQyIDogMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFM19FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTM7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQzIDogMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTQ7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQ0IDogMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTU7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQ1IDogMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNl9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTY7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQ2IDogMS4wO1xcbiNlbmRpZlxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB2ZWM0KDAuMCk7XFxuI2lmZGVmIFRFWFRVUkUxX0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTEsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDE7XFxuI2VuZGlmXFxuI2lmZGVmIFRFWFRVUkUyX0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTIsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDI7XFxuI2VuZGlmXFxuI2lmZGVmIFRFWFRVUkUzX0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTMsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDM7XFxuI2VuZGlmXFxuI2lmZGVmIFRFWFRVUkU0X0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTQsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDQ7XFxuI2VuZGlmXFxuI2lmZGVmIFRFWFRVUkU1X0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTUsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDU7XFxuI2VuZGlmXFxuI2lmZGVmIFRFWFRVUkU2X0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTYsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDY7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUih0ZXgpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZnhhYVxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSB2ZWM0IHZpZXdwb3J0IDogVklFV1BPUlQ7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gKDEuMC8xMjguMClcXG4jZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAoMS4wLzguMClcXG4jZGVmaW5lIEZYQUFfU1BBTl9NQVggOC4wXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMyIHJlc29sdXRpb24gPSAxLjAgLyB2aWV3cG9ydC56dztcXG4gdmVjMyByZ2JOVyA9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIC0xLjAsIC0xLjAgKSApICogcmVzb2x1dGlvbiApICkueHl6O1xcbiB2ZWMzIHJnYk5FID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMS4wLCAtMS4wICkgKSAqIHJlc29sdXRpb24gKSApLnh5ejtcXG4gdmVjMyByZ2JTVyA9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIC0xLjAsIDEuMCApICkgKiByZXNvbHV0aW9uICkgKS54eXo7XFxuIHZlYzMgcmdiU0UgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAxLjAsIDEuMCApICkgKiByZXNvbHV0aW9uICkgKS54eXo7XFxuIHZlYzQgcmdiYU0gPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgZ2xfRnJhZ0Nvb3JkLnh5ICogcmVzb2x1dGlvbiApICk7XFxuIHZlYzMgcmdiTSA9IHJnYmFNLnh5ejtcXG4gZmxvYXQgb3BhY2l0eSA9IHJnYmFNLnc7XFxuIHZlYzMgbHVtYSA9IHZlYzMoIDAuMjk5LCAwLjU4NywgMC4xMTQgKTtcXG4gZmxvYXQgbHVtYU5XID0gZG90KCByZ2JOVywgbHVtYSApO1xcbiBmbG9hdCBsdW1hTkUgPSBkb3QoIHJnYk5FLCBsdW1hICk7XFxuIGZsb2F0IGx1bWFTVyA9IGRvdCggcmdiU1csIGx1bWEgKTtcXG4gZmxvYXQgbHVtYVNFID0gZG90KCByZ2JTRSwgbHVtYSApO1xcbiBmbG9hdCBsdW1hTSA9IGRvdCggcmdiTSwgbHVtYSApO1xcbiBmbG9hdCBsdW1hTWluID0gbWluKCBsdW1hTSwgbWluKCBtaW4oIGx1bWFOVywgbHVtYU5FICksIG1pbiggbHVtYVNXLCBsdW1hU0UgKSApICk7XFxuIGZsb2F0IGx1bWFNYXggPSBtYXgoIGx1bWFNLCBtYXgoIG1heCggbHVtYU5XLCBsdW1hTkUpICwgbWF4KCBsdW1hU1csIGx1bWFTRSApICkgKTtcXG4gdmVjMiBkaXI7XFxuIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gZGlyLnkgPSAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuIGZsb2F0IGRpclJlZHVjZSA9IG1heCggKCBsdW1hTlcgKyBsdW1hTkUgKyBsdW1hU1cgKyBsdW1hU0UgKSAqICggMC4yNSAqIEZYQUFfUkVEVUNFX01VTCApLCBGWEFBX1JFRFVDRV9NSU4gKTtcXG4gZmxvYXQgcmNwRGlyTWluID0gMS4wIC8gKCBtaW4oIGFicyggZGlyLnggKSwgYWJzKCBkaXIueSApICkgKyBkaXJSZWR1Y2UgKTtcXG4gZGlyID0gbWluKCB2ZWMyKCBGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gbWF4KCB2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuIGRpciAqIHJjcERpck1pbikpICogcmVzb2x1dGlvbjtcXG4gdmVjMyByZ2JBID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAqIHJlc29sdXRpb24gKyBkaXIgKiAoIDEuMCAvIDMuMCAtIDAuNSApICkgKS54eXo7XFxuIHJnYkEgKz0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAqIHJlc29sdXRpb24gKyBkaXIgKiAoIDIuMCAvIDMuMCAtIDAuNSApICkgKS54eXo7XFxuIHJnYkEgKj0gMC41O1xcbiB2ZWMzIHJnYkIgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgZ2xfRnJhZ0Nvb3JkLnh5ICogcmVzb2x1dGlvbiArIGRpciAqIC0wLjUgKSApLnh5ejtcXG4gcmdiQiArPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgZ2xfRnJhZ0Nvb3JkLnh5ICogcmVzb2x1dGlvbiArIGRpciAqIDAuNSApICkueHl6O1xcbiByZ2JCICo9IDAuMjU7XFxuIHJnYkIgKz0gcmdiQSAqIDAuNTtcXG4gZmxvYXQgbHVtYUIgPSBkb3QoIHJnYkIsIGx1bWEgKTtcXG4gaWYgKCAoIGx1bWFCIDwgbHVtYU1pbiApIHx8ICggbHVtYUIgPiBsdW1hTWF4ICkgKVxcbiB7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoIHJnYkEsIG9wYWNpdHkgKTtcXG4gfVxcbiBlbHNlIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCggcmdiQiwgb3BhY2l0eSApO1xcbiB9XFxufVxcbkBlbmRcIjtcclxuIiwiaW1wb3J0IGNvbG9yYWRqdXN0RXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2NvbG9yYWRqdXN0Lmdsc2wuanMnO1xyXG5pbXBvcnQgYmx1ckVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9ibHVyLmdsc2wuanMnO1xyXG5pbXBvcnQgbHVtRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2x1bS5nbHNsLmpzJztcclxuaW1wb3J0IGx1dEVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9sdXQuZ2xzbC5qcyc7XHJcbmltcG9ydCB2aWdlbnR0ZUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci92aWduZXR0ZS5nbHNsLmpzJztcclxuaW1wb3J0IG91dHB1dEVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9vdXRwdXQuZ2xzbC5qcyc7XHJcbmltcG9ydCBicmlnaHRFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvYnJpZ2h0Lmdsc2wuanMnO1xyXG5pbXBvcnQgZG93bnNhbXBsZUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9kb3duc2FtcGxlLmdsc2wuanMnO1xyXG5pbXBvcnQgdXBzYW1wbGVFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvdXBzYW1wbGUuZ2xzbC5qcyc7XHJcbmltcG9ydCBoZHJFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvaGRyLmdsc2wuanMnO1xyXG5pbXBvcnQgbGVuc2ZsYXJlRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2xlbnNmbGFyZS5nbHNsLmpzJztcclxuaW1wb3J0IGJsZW5kRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2JsZW5kLmdsc2wuanMnO1xyXG5pbXBvcnQgZnhhYUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9meGFhLmdsc2wuanMnO1xyXG4vLyBpbXBvcnQgZnhhYTNFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvZnhhYTMuZ2xzbC5qcyc7XHJcblxyXG4vLyBUT0RPIE11c3QgZXhwb3J0IGEgbW9kdWxlIGFuZCBiZSB1c2VkIGluIHRoZSBvdGhlciBtb2R1bGVzLiBPciBpdCB3aWxsIGJlIHRyZWUgc2hha2VkXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKFNoYWRlcikge1xyXG4gICAgLy8gU29tZSBidWlsZCBpbiBzaGFkZXJzXHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGNvbG9yYWRqdXN0RXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGJsdXJFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10obHVtRXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGx1dEVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXSh2aWdlbnR0ZUVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShvdXRwdXRFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10oYnJpZ2h0RXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGRvd25zYW1wbGVFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10odXBzYW1wbGVFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10oaGRyRXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGxlbnNmbGFyZUVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShibGVuZEVzc2wpO1xyXG5cclxuICAgIFNoYWRlclsnaW1wb3J0J10oZnhhYUVzc2wpO1xyXG5cclxufSIsImltcG9ydCB1dGlsIGZyb20gJy4vY29yZS91dGlsJztcclxuaW1wb3J0IENvbXBvc2l0b3IgZnJvbSAnLi9jb21wb3NpdG9yL0NvbXBvc2l0b3InO1xyXG5pbXBvcnQgQ29tcG9TY2VuZU5vZGUgZnJvbSAnLi9jb21wb3NpdG9yL1NjZW5lTm9kZSc7XHJcbmltcG9ydCBDb21wb1RleHR1cmVOb2RlIGZyb20gJy4vY29tcG9zaXRvci9UZXh0dXJlTm9kZSc7XHJcbmltcG9ydCBDb21wb0ZpbHRlck5vZGUgZnJvbSAnLi9jb21wb3NpdG9yL0ZpbHRlck5vZGUnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4vU2hhZGVyJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuL1RleHR1cmVDdWJlJztcclxuXHJcbmltcG9ydCByZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yIGZyb20gJy4vc2hhZGVyL3JlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3InO1xyXG5cclxucmVnaXN0ZXJCdWlsdGluQ29tcG9zaXRvcihTaGFkZXIpO1xyXG5cclxudmFyIHNoYWRlclNvdXJjZVJlZyA9IC9eI3NvdXJjZVxcKCguKj8pXFwpLztcclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LmNyZWF0ZUNvbXBvc2l0b3JcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBqc29uXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHJldHVybiB7Y2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3J9XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVDb21wb3NpdG9yKGpzb24sIG9wdHMpIHtcclxuICAgIHZhciBjb21wb3NpdG9yID0gbmV3IENvbXBvc2l0b3IoKTtcclxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG5cclxuICAgIHZhciBsaWIgPSB7XHJcbiAgICAgICAgdGV4dHVyZXM6IHt9LFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IHt9XHJcbiAgICB9O1xyXG4gICAgdmFyIGFmdGVyTG9hZCA9IGZ1bmN0aW9uKHNoYWRlckxpYiwgdGV4dHVyZUxpYikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwganNvbi5ub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbm9kZUluZm8gPSBqc29uLm5vZGVzW2ldO1xyXG4gICAgICAgICAgICB2YXIgbm9kZSA9IGNyZWF0ZU5vZGUobm9kZUluZm8sIGxpYiwgb3B0cyk7XHJcbiAgICAgICAgICAgIGlmIChub2RlKSB7XHJcbiAgICAgICAgICAgICAgICBjb21wb3NpdG9yLmFkZE5vZGUobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGZvciAodmFyIG5hbWUgaW4ganNvbi5wYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgdmFyIHBhcmFtSW5mbyA9IGpzb24ucGFyYW1ldGVyc1tuYW1lXTtcclxuICAgICAgICBsaWIucGFyYW1ldGVyc1tuYW1lXSA9IGNvbnZlcnRQYXJhbWV0ZXIocGFyYW1JbmZvKTtcclxuICAgIH1cclxuICAgIC8vIFRPRE8gbG9hZCB0ZXh0dXJlIGFzeW5jaHJvbm91c1xyXG4gICAgbG9hZFRleHR1cmVzKGpzb24sIGxpYiwgb3B0cywgZnVuY3Rpb24odGV4dHVyZUxpYikge1xyXG4gICAgICAgIGxpYi50ZXh0dXJlcyA9IHRleHR1cmVMaWI7XHJcbiAgICAgICAgYWZ0ZXJMb2FkKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gY29tcG9zaXRvcjtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlTm9kZShub2RlSW5mbywgbGliLCBvcHRzKSB7XHJcbiAgICB2YXIgdHlwZSA9IG5vZGVJbmZvLnR5cGUgfHwgJ2ZpbHRlcic7XHJcbiAgICB2YXIgc2hhZGVyU291cmNlO1xyXG4gICAgdmFyIGlucHV0cztcclxuICAgIHZhciBvdXRwdXRzO1xyXG5cclxuICAgIGlmICh0eXBlID09PSAnZmlsdGVyJykge1xyXG4gICAgICAgIHZhciBzaGFkZXJFeHAgPSBub2RlSW5mby5zaGFkZXIudHJpbSgpO1xyXG4gICAgICAgIHZhciByZXMgPSBzaGFkZXJTb3VyY2VSZWcuZXhlYyhzaGFkZXJFeHApO1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgc2hhZGVyU291cmNlID0gU2hhZGVyLnNvdXJjZShyZXNbMV0udHJpbSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2hhZGVyRXhwLmNoYXJBdCgwKSA9PT0gJyMnKSB7XHJcbiAgICAgICAgICAgIHNoYWRlclNvdXJjZSA9IGxpYi5zaGFkZXJzW3NoYWRlckV4cC5zdWJzdHIoMSldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXNoYWRlclNvdXJjZSkge1xyXG4gICAgICAgICAgICBzaGFkZXJTb3VyY2UgPSBzaGFkZXJFeHA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghc2hhZGVyU291cmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5vZGVJbmZvLmlucHV0cykge1xyXG4gICAgICAgIGlucHV0cyA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gbm9kZUluZm8uaW5wdXRzKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZUluZm8uaW5wdXRzW25hbWVdID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgaW5wdXRzW25hbWVdID0gbm9kZUluZm8uaW5wdXRzW25hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaW5wdXRzW25hbWVdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGVJbmZvLmlucHV0c1tuYW1lXS5ub2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIHBpbjogbm9kZUluZm8uaW5wdXRzW25hbWVdLnBpblxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChub2RlSW5mby5vdXRwdXRzKSB7XHJcbiAgICAgICAgb3V0cHV0cyA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gbm9kZUluZm8ub3V0cHV0cykge1xyXG4gICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IG5vZGVJbmZvLm91dHB1dHNbbmFtZV07XHJcbiAgICAgICAgICAgIG91dHB1dHNbbmFtZV0gPSB7fTtcclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8uYXR0YWNobWVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRzW25hbWVdLmF0dGFjaG1lbnQgPSBvdXRwdXRJbmZvLmF0dGFjaG1lbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ua2VlcExhc3RGcmFtZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRzW25hbWVdLmtlZXBMYXN0RnJhbWUgPSBvdXRwdXRJbmZvLmtlZXBMYXN0RnJhbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ub3V0cHV0TGFzdEZyYW1lICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dHNbbmFtZV0ub3V0cHV0TGFzdEZyYW1lID0gb3V0cHV0SW5mby5vdXRwdXRMYXN0RnJhbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ucGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0c1tuYW1lXS5wYXJhbWV0ZXJzID0gY29udmVydFBhcmFtZXRlcihvdXRwdXRJbmZvLnBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIG5vZGU7XHJcbiAgICBpZiAodHlwZSA9PT0gJ3NjZW5lJykge1xyXG4gICAgICAgIG5vZGUgPSBuZXcgQ29tcG9TY2VuZU5vZGUoe1xyXG4gICAgICAgICAgICBuYW1lOiBub2RlSW5mby5uYW1lLFxyXG4gICAgICAgICAgICBzY2VuZTogb3B0cy5zY2VuZSxcclxuICAgICAgICAgICAgY2FtZXJhOiBvcHRzLmNhbWVyYSxcclxuICAgICAgICAgICAgb3V0cHV0czogb3V0cHV0c1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ3RleHR1cmUnKSB7XHJcbiAgICAgICAgbm9kZSA9IG5ldyBDb21wb1RleHR1cmVOb2RlKHtcclxuICAgICAgICAgICAgbmFtZTogbm9kZUluZm8ubmFtZSxcclxuICAgICAgICAgICAgb3V0cHV0czogb3V0cHV0c1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8gRGVmYXVsdCBpcyBmaWx0ZXJcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIG5vZGUgPSBuZXcgQ29tcG9GaWx0ZXJOb2RlKHtcclxuICAgICAgICAgICAgbmFtZTogbm9kZUluZm8ubmFtZSxcclxuICAgICAgICAgICAgc2hhZGVyOiBzaGFkZXJTb3VyY2UsXHJcbiAgICAgICAgICAgIGlucHV0czogaW5wdXRzLFxyXG4gICAgICAgICAgICBvdXRwdXRzOiBvdXRwdXRzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAobm9kZSkge1xyXG4gICAgICAgIGlmIChub2RlSW5mby5wYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gbm9kZUluZm8ucGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IG5vZGVJbmZvLnBhcmFtZXRlcnNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWwuY2hhckF0KDApID09PSAnIycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gbGliLnRleHR1cmVzW3ZhbC5zdWJzdHIoMSldO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5vbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZWZvcmVyZW5kZXInLCBjcmVhdGVTaXplU2V0SGFuZGxlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCB0cnlDb252ZXJ0RXhwcih2YWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUub24oJ2JlZm9yZXJlbmRlcicsIHZhbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBub2RlLnNldFBhcmFtZXRlcihuYW1lLCB2YWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlSW5mby5kZWZpbmVzICYmIG5vZGUucGFzcykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIG5vZGVJbmZvLmRlZmluZXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBub2RlSW5mby5kZWZpbmVzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgbm9kZS5wYXNzLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCBuYW1lLCB2YWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vZGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRXaWR0aEZ1bmMod2lkdGgsIGhlaWdodCkge1xyXG4gICAgcmV0dXJuIHdpZHRoO1xyXG59XHJcbmZ1bmN0aW9uIGRlZmF1bHRIZWlnaHRGdW5jKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHJldHVybiBoZWlnaHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbnZlcnRQYXJhbWV0ZXIocGFyYW1JbmZvKSB7XHJcbiAgICB2YXIgcGFyYW0gPSB7fTtcclxuICAgIGlmICghcGFyYW1JbmZvKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcmFtO1xyXG4gICAgfVxyXG4gICAgWyd0eXBlJywgJ21pbkZpbHRlcicsICdtYWdGaWx0ZXInLCAnd3JhcFMnLCAnd3JhcFQnLCAnZmxpcFknLCAndXNlTWlwbWFwJ11cclxuICAgICAgICAuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWwgPSBwYXJhbUluZm9bbmFtZV07XHJcbiAgICAgICAgICAgIGlmICh2YWwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgLy8gQ29udmVydCBzdHJpbmcgdG8gZW51bVxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gVGV4dHVyZVt2YWxdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcGFyYW1bbmFtZV0gPSB2YWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB2YXIgc2l6ZVNjYWxlID0gcGFyYW1JbmZvLnNjYWxlIHx8IDE7XHJcbiAgICBbJ3dpZHRoJywgJ2hlaWdodCddXHJcbiAgICAgICAgLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICAgICAgICBpZiAocGFyYW1JbmZvW25hbWVdICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBwYXJhbUluZm9bbmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtW25hbWVdID0gY3JlYXRlU2l6ZVBhcnNlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgdHJ5Q29udmVydEV4cHIodmFsKSwgc2l6ZVNjYWxlXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtW25hbWVdID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICBpZiAoIXBhcmFtLndpZHRoKSB7XHJcbiAgICAgICAgcGFyYW0ud2lkdGggPSBkZWZhdWx0V2lkdGhGdW5jO1xyXG4gICAgfVxyXG4gICAgaWYgKCFwYXJhbS5oZWlnaHQpIHtcclxuICAgICAgICBwYXJhbS5oZWlnaHQgPSBkZWZhdWx0SGVpZ2h0RnVuYztcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyYW1JbmZvLnVzZU1pcG1hcCAhPSBudWxsKSB7XHJcbiAgICAgICAgcGFyYW0udXNlTWlwbWFwID0gcGFyYW1JbmZvLnVzZU1pcG1hcDtcclxuICAgIH1cclxuICAgIHJldHVybiBwYXJhbTtcclxufVxyXG5cclxuZnVuY3Rpb24gbG9hZFRleHR1cmVzKGpzb24sIGxpYiwgb3B0cywgY2FsbGJhY2spIHtcclxuICAgIGlmICghanNvbi50ZXh0dXJlcykge1xyXG4gICAgICAgIGNhbGxiYWNrKHt9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgdGV4dHVyZXMgPSB7fTtcclxuICAgIHZhciBsb2FkaW5nID0gMDtcclxuXHJcbiAgICB2YXIgY2JkID0gZmFsc2U7XHJcbiAgICB2YXIgdGV4dHVyZVJvb3RQYXRoID0gb3B0cy50ZXh0dXJlUm9vdFBhdGg7XHJcbiAgICB1dGlsLmVhY2goanNvbi50ZXh0dXJlcywgZnVuY3Rpb24odGV4dHVyZUluZm8sIG5hbWUpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZTtcclxuICAgICAgICB2YXIgcGF0aCA9IHRleHR1cmVJbmZvLnBhdGg7XHJcbiAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSBjb252ZXJ0UGFyYW1ldGVyKHRleHR1cmVJbmZvLnBhcmFtZXRlcnMpO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGgpICYmIHBhdGgubGVuZ3RoID09PSA2KSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlUm9vdFBhdGgpIHtcclxuICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoLm1hcChmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHV0aWwucmVsYXRpdmUyYWJzb2x1dGUoaXRlbSwgdGV4dHVyZVJvb3RQYXRoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZUN1YmUocGFyYW1ldGVycyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlUm9vdFBhdGgpIHtcclxuICAgICAgICAgICAgICAgIHBhdGggPSB1dGlsLnJlbGF0aXZlMmFic29sdXRlKHBhdGgsIHRleHR1cmVSb290UGF0aCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQocGFyYW1ldGVycyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0ZXh0dXJlLmxvYWQocGF0aCk7XHJcbiAgICAgICAgbG9hZGluZysrO1xyXG4gICAgICAgIHRleHR1cmUub25jZSgnc3VjY2VzcycsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB0ZXh0dXJlc1tuYW1lXSA9IHRleHR1cmU7XHJcbiAgICAgICAgICAgIGxvYWRpbmctLTtcclxuICAgICAgICAgICAgaWYgKGxvYWRpbmcgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHRleHR1cmVzKTtcclxuICAgICAgICAgICAgICAgIGNiZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChsb2FkaW5nID09PSAwICYmICFjYmQpIHtcclxuICAgICAgICBjYWxsYmFjayh0ZXh0dXJlcyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVNpemVTZXRIYW5kbGVyKG5hbWUsIGV4cHJGdW5jKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgLy8gUEVORElORyB2aWV3cG9ydCBzaXplIG9yIHdpbmRvdyBzaXplXHJcbiAgICAgICAgdmFyIGRwciA9IHJlbmRlcmVyLmdldERldmljZVBpeGVsUmF0aW8oKTtcclxuICAgICAgICAvLyBQRU5ESU5HIElmIG11bHRpcGx5IGRwciA/XHJcbiAgICAgICAgdmFyIHdpZHRoID0gcmVuZGVyZXIuZ2V0V2lkdGgoKTtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gcmVuZGVyZXIuZ2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGV4cHJGdW5jKHdpZHRoLCBoZWlnaHQsIGRwcik7XHJcbiAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXIobmFtZSwgcmVzdWx0KTtcclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVNpemVQYXJzZXIobmFtZSwgZXhwckZ1bmMsIHNjYWxlKSB7XHJcbiAgICBzY2FsZSA9IHNjYWxlIHx8IDE7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIGRwciA9IHJlbmRlcmVyLmdldERldmljZVBpeGVsUmF0aW8oKTtcclxuICAgICAgICB2YXIgd2lkdGggPSByZW5kZXJlci5nZXRXaWR0aCgpICogc2NhbGU7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IHJlbmRlcmVyLmdldEhlaWdodCgpICogc2NhbGU7XHJcbiAgICAgICAgcmV0dXJuIGV4cHJGdW5jKHdpZHRoLCBoZWlnaHQsIGRwcik7XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiB0cnlDb252ZXJ0RXhwcihzdHJpbmcpIHtcclxuICAgIC8vIFBFTkRJTkdcclxuICAgIHZhciBleHByUmVzID0gL15leHByXFwoKC4qKVxcKSQvLmV4ZWMoc3RyaW5nKTtcclxuICAgIGlmIChleHByUmVzKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIGZ1bmMgPSBuZXcgRnVuY3Rpb24oJ3dpZHRoJywgJ2hlaWdodCcsICdkcHInLCAncmV0dXJuICcgKyBleHByUmVzWzFdKTtcclxuICAgICAgICAgICAgLy8gVHJ5IHJ1biB0XHJcbiAgICAgICAgICAgIGZ1bmMoMSwgMSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZnVuYztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGV4cHJlc3Npb24uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVDb21wb3NpdG9yO1xyXG4iLCIvLyBERVBSRUNBVEVEXHJcbmltcG9ydCBjcmVhdGVDb21wb3NpdG9yIGZyb20gJy4uL2NyZWF0ZUNvbXBvc2l0b3InO1xyXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVDb21wb3NpdG9yOyIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuI2lmIGRlZmluZWQoU0VDT05EX1BBU1MpIHx8IGRlZmluZWQoRklSU1RfUEFTUylcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZCA6IFRFWENPT1JEXzA7XFxudW5pZm9ybSB2ZWMyIHV2UmVwZWF0O1xcbnVuaWZvcm0gdmVjMiB1dk9mZnNldDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG4jZW5kaWZcXG4jaWZkZWYgRklSU1RfUEFTU1xcbnVuaWZvcm0gbWF0NCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgOiBXT1JMRElOVkVSU0VUUkFOU1BPU0U7XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxudmFyeWluZyB2ZWMzIHZfTm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbCA6IE5PUk1BTDtcXG5hdHRyaWJ1dGUgdmVjNCB0YW5nZW50IDogVEFOR0VOVDtcXG52YXJ5aW5nIHZlYzMgdl9UYW5nZW50O1xcbnZhcnlpbmcgdmVjMyB2X0JpdGFuZ2VudDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG4jaWZkZWYgVEhJUkRfUEFTU1xcbnVuaWZvcm0gbWF0NCBwcmV2V29ybGRWaWV3UHJvamVjdGlvbjtcXG52YXJ5aW5nIHZlYzQgdl9WaWV3UG9zaXRpb247XFxudmFyeWluZyB2ZWM0IHZfUHJldlZpZXdQb3NpdGlvbjtcXG4jaWZkZWYgU0tJTk5JTkdcXG4jaWZkZWYgVVNFX1NLSU5fTUFUUklDRVNfVEVYVFVSRVxcbnVuaWZvcm0gc2FtcGxlcjJEIHByZXZTa2luTWF0cmljZXNUZXh0dXJlO1xcbm1hdDQgZ2V0UHJldlNraW5NYXRyaXgoZmxvYXQgaWR4KSB7XFxuIHJldHVybiBnZXRTa2luTWF0cml4KHByZXZTa2luTWF0cmljZXNUZXh0dXJlLCBpZHgpO1xcbn1cXG4jZWxzZVxcbnVuaWZvcm0gbWF0NCBwcmV2U2tpbk1hdHJpeFtKT0lOVF9DT1VOVF07XFxubWF0NCBnZXRQcmV2U2tpbk1hdHJpeChmbG9hdCBpZHgpIHtcXG4gcmV0dXJuIHByZXZTa2luTWF0cml4W2ludChpZHgpXTtcXG59XFxuI2VuZGlmXFxuI2VuZGlmXFxuI2VuZGlmXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuIHZlYzMgcHJldlNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiNpZmRlZiBGSVJTVF9QQVNTXFxuIHZlYzMgc2tpbm5lZE5vcm1hbCA9IG5vcm1hbDtcXG4gdmVjMyBza2lubmVkVGFuZ2VudCA9IHRhbmdlbnQueHl6O1xcbiBib29sIGhhc1RhbmdlbnQgPSBkb3QodGFuZ2VudCwgdGFuZ2VudCkgPiAwLjA7XFxuI2VuZGlmXFxuI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiAjaWZkZWYgRklSU1RfUEFTU1xcbiBza2lubmVkTm9ybWFsID0gKHNraW5NYXRyaXhXUyAqIHZlYzQobm9ybWFsLCAwLjApKS54eXo7XFxuIGlmIChoYXNUYW5nZW50KSB7XFxuIHNraW5uZWRUYW5nZW50ID0gKHNraW5NYXRyaXhXUyAqIHZlYzQodGFuZ2VudC54eXosIDAuMCkpLnh5ejtcXG4gfVxcbiAjZW5kaWZcXG4gI2lmZGVmIFRISVJEX1BBU1NcXG4ge1xcbiBtYXQ0IHByZXZTa2luTWF0cml4V1MgPSBnZXRQcmV2U2tpbk1hdHJpeChqb2ludC54KSAqIHdlaWdodC54O1xcbiBpZiAod2VpZ2h0LnkgPiAxZS00KSB7IHByZXZTa2luTWF0cml4V1MgKz0gZ2V0UHJldlNraW5NYXRyaXgoam9pbnQueSkgKiB3ZWlnaHQueTsgfVxcbiBpZiAod2VpZ2h0LnogPiAxZS00KSB7IHByZXZTa2luTWF0cml4V1MgKz0gZ2V0UHJldlNraW5NYXRyaXgoam9pbnQueikgKiB3ZWlnaHQuejsgfVxcbiBmbG9hdCB3ZWlnaHRXID0gMS4wLXdlaWdodC54LXdlaWdodC55LXdlaWdodC56O1xcbiBpZiAod2VpZ2h0VyA+IDFlLTQpIHsgcHJldlNraW5NYXRyaXhXUyArPSBnZXRQcmV2U2tpbk1hdHJpeChqb2ludC53KSAqIHdlaWdodFc7IH1cXG4gcHJldlNraW5uZWRQb3NpdGlvbiA9IChwcmV2U2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiB9XFxuICNlbmRpZlxcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKFNFQ09ORF9QQVNTKSB8fCBkZWZpbmVkKEZJUlNUX1BBU1MpXFxuIHZfVGV4Y29vcmQgPSB0ZXhjb29yZCAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxuI2VuZGlmXFxuI2lmZGVmIEZJUlNUX1BBU1NcXG4gdl9Ob3JtYWwgPSBub3JtYWxpemUoKHdvcmxkSW52ZXJzZVRyYW5zcG9zZSAqIHZlYzQoc2tpbm5lZE5vcm1hbCwgMC4wKSkueHl6KTtcXG4gaWYgKGhhc1RhbmdlbnQpIHtcXG4gdl9UYW5nZW50ID0gbm9ybWFsaXplKCh3b3JsZEludmVyc2VUcmFuc3Bvc2UgKiB2ZWM0KHNraW5uZWRUYW5nZW50LCAwLjApKS54eXopO1xcbiB2X0JpdGFuZ2VudCA9IG5vcm1hbGl6ZShjcm9zcyh2X05vcm1hbCwgdl9UYW5nZW50KSAqIHRhbmdlbnQudyk7XFxuIH1cXG4gdl9Xb3JsZFBvc2l0aW9uID0gKHdvcmxkICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4jaWZkZWYgVEhJUkRfUEFTU1xcbiB2X1ZpZXdQb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG4gdl9QcmV2Vmlld1Bvc2l0aW9uID0gcHJldldvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHByZXZTa2lubmVkUG9zaXRpb24sIDEuMCk7XFxuI2VuZGlmXFxuIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIxLmZyYWdtZW50XFxudW5pZm9ybSBtYXQ0IHZpZXdJbnZlcnNlIDogVklFV0lOVkVSU0U7XFxudW5pZm9ybSBmbG9hdCBnbG9zc2luZXNzO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZhcnlpbmcgdmVjMyB2X05vcm1hbDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcXG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlTWFwO1xcbnZhcnlpbmcgdmVjMyB2X1RhbmdlbnQ7XFxudmFyeWluZyB2ZWMzIHZfQml0YW5nZW50O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHJvdWdoR2xvc3NNYXA7XFxudW5pZm9ybSBib29sIHVzZVJvdWdoR2xvc3NNYXA7XFxudW5pZm9ybSBib29sIHVzZVJvdWdobmVzcztcXG51bmlmb3JtIGJvb2wgZG91YmxlU2lkZWQ7XFxudW5pZm9ybSBmbG9hdCBhbHBoYUN1dG9mZjogMC4wO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE6IDEuMDtcXG51bmlmb3JtIGludCByb3VnaEdsb3NzQ2hhbm5lbDogMDtcXG5mbG9hdCBpbmRleGluZ1RleGVsKGluIHZlYzQgdGV4ZWwsIGluIGludCBpZHgpIHtcXG4gaWYgKGlkeCA9PSAzKSByZXR1cm4gdGV4ZWwuYTtcXG4gZWxzZSBpZiAoaWR4ID09IDEpIHJldHVybiB0ZXhlbC5nO1xcbiBlbHNlIGlmIChpZHggPT0gMikgcmV0dXJuIHRleGVsLmI7XFxuIGVsc2UgcmV0dXJuIHRleGVsLnI7XFxufVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIE4gPSB2X05vcm1hbDtcXG4gaWYgKGRvdWJsZVNpZGVkKSB7XFxuIHZlYzMgZXllUG9zID0gdmlld0ludmVyc2VbM10ueHl6O1xcbiB2ZWMzIFYgPSBleWVQb3MgLSB2X1dvcmxkUG9zaXRpb247XFxuIGlmIChkb3QoTiwgVikgPCAwLjApIHtcXG4gTiA9IC1OO1xcbiB9XFxuIH1cXG4gaWYgKGFscGhhQ3V0b2ZmID4gMC4wKSB7XFxuIGZsb2F0IGEgPSB0ZXh0dXJlMkQoZGlmZnVzZU1hcCwgdl9UZXhjb29yZCkuYSAqIGFscGhhO1xcbiBpZiAoYSA8IGFscGhhQ3V0b2ZmKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4gfVxcbiBpZiAoZG90KHZfVGFuZ2VudCwgdl9UYW5nZW50KSA+IDAuMCkge1xcbiB2ZWMzIG5vcm1hbFRleGVsID0gdGV4dHVyZTJEKG5vcm1hbE1hcCwgdl9UZXhjb29yZCkueHl6O1xcbiBpZiAoZG90KG5vcm1hbFRleGVsLCBub3JtYWxUZXhlbCkgPiAwLjApIHsgTiA9IG5vcm1hbFRleGVsICogMi4wIC0gMS4wO1xcbiBtYXQzIHRibiA9IG1hdDModl9UYW5nZW50LCB2X0JpdGFuZ2VudCwgdl9Ob3JtYWwpO1xcbiBOID0gbm9ybWFsaXplKHRibiAqIE4pO1xcbiB9XFxuIH1cXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IChOICsgMS4wKSAqIDAuNTtcXG4gZmxvYXQgZyA9IGdsb3NzaW5lc3M7XFxuIGlmICh1c2VSb3VnaEdsb3NzTWFwKSB7XFxuIGZsb2F0IGcyID0gaW5kZXhpbmdUZXhlbCh0ZXh0dXJlMkQocm91Z2hHbG9zc01hcCwgdl9UZXhjb29yZCksIHJvdWdoR2xvc3NDaGFubmVsKTtcXG4gaWYgKHVzZVJvdWdobmVzcykge1xcbiBnMiA9IDEuMCAtIGcyO1xcbiB9XFxuIGcgPSBjbGFtcChnMiArIChnIC0gMC41KSAqIDIuMCwgMC4wLCAxLjApO1xcbiB9XFxuIGdsX0ZyYWdDb2xvci5hID0gZyArIDAuMDA1O1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIyLmZyYWdtZW50XFxudW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZU1hcDtcXG51bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7XFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgbWV0YWxuZXNzO1xcbnVuaWZvcm0gYm9vbCB1c2VNZXRhbG5lc3NNYXA7XFxudW5pZm9ybSBib29sIGxpbmVhcjtcXG51bmlmb3JtIGZsb2F0IGFscGhhQ3V0b2ZmOiAwLjA7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTogMS4wO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnNyZ2JcXG52b2lkIG1haW4oKVxcbntcXG4gZmxvYXQgbSA9IG1ldGFsbmVzcztcXG4gaWYgKHVzZU1ldGFsbmVzc01hcCkge1xcbiB2ZWM0IG1ldGFsbmVzc1RleGVsID0gdGV4dHVyZTJEKG1ldGFsbmVzc01hcCwgdl9UZXhjb29yZCk7XFxuIG0gPSBjbGFtcChtZXRhbG5lc3NUZXhlbC5yICsgKG0gKiAyLjAgLSAxLjApLCAwLjAsIDEuMCk7XFxuIH1cXG4gdmVjNCB0ZXhlbCA9IHRleHR1cmUyRChkaWZmdXNlTWFwLCB2X1RleGNvb3JkKTtcXG4gaWYgKGxpbmVhcikge1xcbiB0ZXhlbCA9IHNSR0JUb0xpbmVhcih0ZXhlbCk7XFxuIH1cXG4gaWYgKGFscGhhQ3V0b2ZmID4gMC4wKSB7XFxuIGZsb2F0IGEgPSB0ZXhlbC5hICogYWxwaGE7XFxuIGlmIChhIDwgYWxwaGFDdXRvZmYpIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiB9XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSB0ZXhlbC5yZ2IgKiBjb2xvcjtcXG4gZ2xfRnJhZ0NvbG9yLmEgPSBtICsgMC4wMDU7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuZGVmZXJyZWQuZ2J1ZmZlcjMuZnJhZ21lbnRcXG51bmlmb3JtIGJvb2wgZmlyc3RSZW5kZXI7XFxudmFyeWluZyB2ZWM0IHZfVmlld1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCB2X1ByZXZWaWV3UG9zaXRpb247XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzIgYSA9IHZfVmlld1Bvc2l0aW9uLnh5IC8gdl9WaWV3UG9zaXRpb24udztcXG4gdmVjMiBiID0gdl9QcmV2Vmlld1Bvc2l0aW9uLnh5IC8gdl9QcmV2Vmlld1Bvc2l0aW9uLnc7XFxuIGlmIChmaXJzdFJlbmRlcikge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuIH1cXG4gZWxzZSB7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoKGEgLSBiKSAqIDAuNSArIDAuNSwgMC4wLCAxLjApO1xcbiB9XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuZGVmZXJyZWQuZ2J1ZmZlci5kZWJ1Z1xcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmU0O1xcbnVuaWZvcm0gaW50IGRlYnVnOiAwO1xcbnZvaWQgbWFpbiAoKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiBpZiAoZGVidWcgPT0gMCkge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KE4sIDEuMCk7XFxuIH1cXG4gZWxzZSBpZiAoZGVidWcgPT0gMSkge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMoeiksIDEuMCk7XFxuIH1cXG4gZWxzZSBpZiAoZGVidWcgPT0gMikge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbiB9XFxuIGVsc2UgaWYgKGRlYnVnID09IDMpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGdsb3NzaW5lc3MpLCAxLjApO1xcbiB9XFxuIGVsc2UgaWYgKGRlYnVnID09IDQpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKG1ldGFsbmVzcyksIDEuMCk7XFxuIH1cXG4gZWxzZSBpZiAoZGVidWcgPT0gNSkge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGFsYmVkbywgMS4wKTtcXG4gfVxcbiBlbHNlIHtcXG4gdmVjNCBjb2xvciA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTQsIHV2KTtcXG4gY29sb3IucmcgLT0gMC41O1xcbiBjb2xvci5yZyAqPSAyLjA7XFxuIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbiB9XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMTtcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTI7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUzO1xcbnVuaWZvcm0gdmVjMiB3aW5kb3dTaXplOiBXSU5ET1dfU0laRTtcXG51bmlmb3JtIHZlYzQgdmlld3BvcnQ6IFZJRVdQT1JUO1xcbnVuaWZvcm0gbWF0NCB2aWV3UHJvamVjdGlvbkludjtcXG4jaWZkZWYgREVQVEhfRU5DT0RFRFxcbkBpbXBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbiNlbmRpZlxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHkgLyB3aW5kb3dTaXplO1xcbiB2ZWMyIHV2MiA9IChnbF9GcmFnQ29vcmQueHkgLSB2aWV3cG9ydC54eSkgLyB2aWV3cG9ydC56dztcXG4gdmVjNCB0ZXhlbDEgPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUxLCB1dik7XFxuIHZlYzQgdGV4ZWwzID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMywgdXYpO1xcbiBpZiAoZG90KHRleGVsMS5yZ2IsIHZlYzMoMS4wKSkgPT0gMC4wKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4gZmxvYXQgZ2xvc3NpbmVzcyA9IHRleGVsMS5hO1xcbiBmbG9hdCBtZXRhbG5lc3MgPSB0ZXhlbDMuYTtcXG4gdmVjMyBOID0gdGV4ZWwxLnJnYiAqIDIuMCAtIDEuMDtcXG4gZmxvYXQgeiA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTIsIHV2KS5yICogMi4wIC0gMS4wO1xcbiB2ZWMyIHh5ID0gdXYyICogMi4wIC0gMS4wO1xcbiB2ZWM0IHByb2plY3RlZFBvcyA9IHZlYzQoeHksIHosIDEuMCk7XFxuIHZlYzQgcDQgPSB2aWV3UHJvamVjdGlvbkludiAqIHByb2plY3RlZFBvcztcXG4gdmVjMyBwb3NpdGlvbiA9IHA0Lnh5eiAvIHA0Lnc7XFxuIHZlYzMgYWxiZWRvID0gdGV4ZWwzLnJnYjtcXG4gdmVjMyBkaWZmdXNlQ29sb3IgPSBhbGJlZG8gKiAoMS4wIC0gbWV0YWxuZXNzKTtcXG4gdmVjMyBzcGVjdWxhckNvbG9yID0gbWl4KHZlYzMoMC4wNCksIGFsYmVkbywgbWV0YWxuZXNzKTtcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxuZmxvYXQgRF9QaG9uZyhpbiBmbG9hdCBnLCBpbiBmbG9hdCBuZGgpIHtcXG4gZmxvYXQgYSA9IHBvdyg4MTkyLjAsIGcpO1xcbiByZXR1cm4gKGEgKyAyLjApIC8gOC4wICogcG93KG5kaCwgYSk7XFxufVxcbmZsb2F0IERfR0dYKGluIGZsb2F0IGcsIGluIGZsb2F0IG5kaCkge1xcbiBmbG9hdCByID0gMS4wIC0gZztcXG4gZmxvYXQgYSA9IHIgKiByO1xcbiBmbG9hdCB0bXAgPSBuZGggKiBuZGggKiAoYSAtIDEuMCkgKyAxLjA7XFxuIHJldHVybiBhIC8gKDMuMTQxNTkyNiAqIHRtcCAqIHRtcCk7XFxufVxcbnZlYzMgRl9TY2hsaWNrKGluIGZsb2F0IG5kdiwgdmVjMyBzcGVjKSB7XFxuIHJldHVybiBzcGVjICsgKDEuMCAtIHNwZWMpICogcG93KDEuMCAtIG5kdiwgNS4wKTtcXG59XFxudmVjMyBsaWdodEVxdWF0aW9uKFxcbiBpbiB2ZWMzIGxpZ2h0Q29sb3IsIGluIHZlYzMgZGlmZnVzZUNvbG9yLCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsXFxuIGluIGZsb2F0IG5kbCwgaW4gZmxvYXQgbmRoLCBpbiBmbG9hdCBuZHYsIGluIGZsb2F0IGdcXG4pXFxue1xcbiByZXR1cm4gbmRsICogbGlnaHRDb2xvclxcbiAqIChkaWZmdXNlQ29sb3IgKyBEX1Bob25nKGcsIG5kaCkgKiBGX1NjaGxpY2sobmR2LCBzcGVjdWxhckNvbG9yKSk7XFxufVxcbkBlbmRcIjtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgUGFzcyBmcm9tICcuLi9jb21wb3NpdG9yL1Bhc3MnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgbWF0NCBmcm9tICcuLi9nbG1hdHJpeC9tYXQ0JztcclxuXHJcbmltcG9ydCBnYnVmZmVyRXNzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL2didWZmZXIuZ2xzbC5qcyc7XHJcbmltcG9ydCBjaHVua0Vzc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9jaHVuay5nbHNsLmpzJztcclxuXHJcblNoYWRlci5pbXBvcnQoZ2J1ZmZlckVzc2wpO1xyXG5TaGFkZXIuaW1wb3J0KGNodW5rRXNzbCk7XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVGaWxsQ2FudmFzKGNvbG9yKSB7XHJcbiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBjYW52YXMud2lkdGggPSBjYW52YXMuaGVpZ2h0ID0gMTtcclxuICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvciB8fCAnIzAwMCc7XHJcbiAgICBjdHguZmlsbFJlY3QoMCwgMCwgMSwgMSk7XHJcblxyXG4gICAgcmV0dXJuIGNhbnZhcztcclxufVxyXG5cclxuLy8gVE9ETyBzcGVjdWxhckNvbG9yXHJcbi8vIFRPRE8gUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRcclxuZnVuY3Rpb24gZ2V0R2V0VW5pZm9ybUhvb2sxKGRlZmF1bHROb3JtYWxNYXAsIGRlZmF1bHRSb3VnaG5lc3NNYXAsIGRlZmF1bHREaWZmdXNlTWFwKSB7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBnQnVmZmVyTWF0LCBzeW1ib2wpIHtcclxuICAgICAgICB2YXIgc3RhbmRhcmRNYXRlcmlhbCA9IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgaWYgKHN5bWJvbCA9PT0gJ2RvdWJsZVNpZGVkJykge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0RPVUJMRV9TSURFRCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd1dlJlcGVhdCcgfHwgc3ltYm9sID09PSAndXZPZmZzZXQnIHx8IHN5bWJvbCA9PT0gJ2FscGhhJykge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5nZXQoc3ltYm9sKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAnbm9ybWFsTWFwJykge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5nZXQoc3ltYm9sKSB8fCBkZWZhdWx0Tm9ybWFsTWFwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdkaWZmdXNlTWFwJykge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5nZXQoc3ltYm9sKSB8fCBkZWZhdWx0RGlmZnVzZU1hcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAnYWxwaGFDdXRvZmYnKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxyXG4gICAgICAgICAgICBpZiAoc3RhbmRhcmRNYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFscGhhQ3V0b2ZmID0gc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ2FscGhhQ3V0b2ZmJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWxwaGFDdXRvZmYgfHwgMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciB1c2VSb3VnaG5lc3NXb3JrZmxvdyA9IHN0YW5kYXJkTWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsICdVU0VfUk9VR0hORVNTJyk7XHJcbiAgICAgICAgICAgIHZhciByb3VnaEdsb3NzTWFwID0gdXNlUm91Z2huZXNzV29ya2Zsb3cgPyBzdGFuZGFyZE1hdGVyaWFsLmdldCgncm91Z2huZXNzTWFwJykgOiBzdGFuZGFyZE1hdGVyaWFsLmdldCgnZ2xvc3NpbmVzc01hcCcpO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnZ2xvc3NpbmVzcyc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZVJvdWdobmVzc1dvcmtmbG93ID8gKDEuMCAtIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdyb3VnaG5lc3MnKSkgOiBzdGFuZGFyZE1hdGVyaWFsLmdldCgnZ2xvc3NpbmVzcycpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncm91Z2hHbG9zc01hcCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvdWdoR2xvc3NNYXA7XHJcbiAgICAgICAgICAgICAgICBjYXNlICd1c2VSb3VnaEdsb3NzTWFwJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFyb3VnaEdsb3NzTWFwO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAndXNlUm91Z2huZXNzJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNlUm91Z2huZXNzV29ya2Zsb3c7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdyb3VnaEdsb3NzQ2hhbm5lbCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZVJvdWdobmVzc1dvcmtmbG93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc3RhbmRhcmRNYXRlcmlhbC5nZXREZWZpbmUoJ2ZyYWdtZW50JywgJ1JPVUdITkVTU19DSEFOTkVMJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGFuZGFyZE1hdGVyaWFsLmdldERlZmluZSgnZnJhZ21lbnQnLCAnR0xPU1NJTkVTU19DSEFOTkVMJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRHZXRVbmlmb3JtSG9vazIoZGVmYXVsdERpZmZ1c2VNYXAsIGRlZmF1bHRNZXRhbG5lc3NNYXApIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgZ0J1ZmZlck1hdCwgc3ltYm9sKSB7XHJcbiAgICAgICAgdmFyIHN0YW5kYXJkTWF0ZXJpYWwgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgICAgIHN3aXRjaCAoc3ltYm9sKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbG9yJzpcclxuICAgICAgICAgICAgY2FzZSAndXZSZXBlYXQnOlxyXG4gICAgICAgICAgICBjYXNlICd1dk9mZnNldCc6XHJcbiAgICAgICAgICAgIGNhc2UgJ2FscGhhJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1hdGVyaWFsLmdldChzeW1ib2wpO1xyXG4gICAgICAgICAgICBjYXNlICdtZXRhbG5lc3MnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdtZXRhbG5lc3MnKSB8fCAwO1xyXG4gICAgICAgICAgICBjYXNlICdkaWZmdXNlTWFwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1hdGVyaWFsLmdldChzeW1ib2wpIHx8IGRlZmF1bHREaWZmdXNlTWFwO1xyXG4gICAgICAgICAgICBjYXNlICdtZXRhbG5lc3NNYXAnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KHN5bWJvbCkgfHwgZGVmYXVsdE1ldGFsbmVzc01hcDtcclxuICAgICAgICAgICAgY2FzZSAndXNlTWV0YWxuZXNzTWFwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAhIXN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdtZXRhbG5lc3NNYXAnKTtcclxuICAgICAgICAgICAgY2FzZSAnbGluZWFyJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1hdGVyaWFsLmlzRGVmaW5lZCgnU1JHQl9ERUNPREUnKTtcclxuICAgICAgICAgICAgY2FzZSAnYWxwaGFDdXRvZmYnOlxyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBESUZGVVNFTUFQX0FMUEhBX0FMUEhBXHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhbmRhcmRNYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhbHBoYUN1dG9mZiA9IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdhbHBoYUN1dG9mZicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhbHBoYUN1dG9mZiB8fCAwLjA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMC4wO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHQnVmZmVyIGlzIHByb3ZpZGVkIGZvciBkZWZlcnJlZCByZW5kZXJpbmcgYW5kIFNTQU8sIFNTUiBwYXNzLlxyXG4gKiBJdCB3aWxsIGRvIHRocmVlIHBhc3NlcyByZW5kZXJpbmcgdG8gZm91ciB0YXJnZXQgdGV4dHVyZXMuIFNlZVxyXG4gKiArIHtAbGluayBjbGF5LmRlZmVycmVkLkdCdWZmZXIjZ2V0VGFyZ2V0VGV4dHVyZTF9XHJcbiAqICsge0BsaW5rIGNsYXkuZGVmZXJyZWQuR0J1ZmZlciNnZXRUYXJnZXRUZXh0dXJlMn1cclxuICogKyB7QGxpbmsgY2xheS5kZWZlcnJlZC5HQnVmZmVyI2dldFRhcmdldFRleHR1cmUzfVxyXG4gKiArIHtAbGluayBjbGF5LmRlZmVycmVkLkdCdWZmZXIjZ2V0VGFyZ2V0VGV4dHVyZTR9XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5kZWZlcnJlZC5HQnVmZmVyXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgR0J1ZmZlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgY29tbW9uVGV4dHVyZU9wdHMgPSB7XHJcbiAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgd3JhcFM6IFRleHR1cmUuQ0xBTVBfVE9fRURHRSxcclxuICAgICAgICB3cmFwVDogVGV4dHVyZS5DTEFNUF9UT19FREdFLFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmRlZmVycmVkLkdCdWZmZXIjICovIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIGdidWZmZXIgdGV4dHVyZSAxLlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVuYWJsZVRhcmdldFRleHR1cmUxOiB0cnVlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgZ2J1ZmZlciB0ZXh0dXJlIDIuXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW5hYmxlVGFyZ2V0VGV4dHVyZTI6IHRydWUsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBnYnVmZmVyIHRleHR1cmUgMy5cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbmFibGVUYXJnZXRUZXh0dXJlMzogdHJ1ZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIGdidWZmZXIgdGV4dHVyZSA0LlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVuYWJsZVRhcmdldFRleHR1cmU0OiBmYWxzZSxcclxuXHJcbiAgICAgICAgcmVuZGVyVHJhbnNwYXJlbnQ6IGZhbHNlLFxyXG5cclxuICAgICAgICBfZ0J1ZmZlclJlbmRlckxpc3Q6IFtdLFxyXG4gICAgICAgIC8vIC0gUjogbm9ybWFsLnhcclxuICAgICAgICAvLyAtIEc6IG5vcm1hbC55XHJcbiAgICAgICAgLy8gLSBCOiBub3JtYWwuelxyXG4gICAgICAgIC8vIC0gQTogZ2xvc3NpbmVzc1xyXG4gICAgICAgIF9nQnVmZmVyVGV4MTogbmV3IFRleHR1cmUyRChPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkhBTEZfRkxPQVRcclxuICAgICAgICB9LCBjb21tb25UZXh0dXJlT3B0cykpLFxyXG5cclxuICAgICAgICAvLyAtIFI6IGRlcHRoXHJcbiAgICAgICAgX2dCdWZmZXJUZXgyOiBuZXcgVGV4dHVyZTJEKE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICAvLyBmb3JtYXQ6IFRleHR1cmUuREVQVEhfQ09NUE9ORU5ULFxyXG4gICAgICAgICAgICAvLyB0eXBlOiBUZXh0dXJlLlVOU0lHTkVEX0lOVFxyXG5cclxuICAgICAgICAgICAgZm9ybWF0OiBUZXh0dXJlLkRFUFRIX1NURU5DSUwsXHJcbiAgICAgICAgICAgIHR5cGU6IFRleHR1cmUuVU5TSUdORURfSU5UXzI0XzhfV0VCR0xcclxuICAgICAgICB9LCBjb21tb25UZXh0dXJlT3B0cykpLFxyXG5cclxuICAgICAgICAvLyAtIFI6IGFsYmVkby5yXHJcbiAgICAgICAgLy8gLSBHOiBhbGJlZG8uZ1xyXG4gICAgICAgIC8vIC0gQjogYWxiZWRvLmJcclxuICAgICAgICAvLyAtIEE6IG1ldGFsbmVzc1xyXG4gICAgICAgIF9nQnVmZmVyVGV4MzogbmV3IFRleHR1cmUyRChjb21tb25UZXh0dXJlT3B0cyksXHJcblxyXG4gICAgICAgIF9nQnVmZmVyVGV4NDogbmV3IFRleHR1cmUyRChPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgLy8gRkxPQVQgVGV4dHVyZSBoYXMgYnVnIG9uIGlPUy4gaXMgSEFMRl9GTE9BVCBlbm91Z2g/XHJcbiAgICAgICAgICAgIHR5cGU6IFRleHR1cmUuSEFMRl9GTE9BVFxyXG4gICAgICAgIH0sIGNvbW1vblRleHR1cmVPcHRzKSksXHJcblxyXG4gICAgICAgIF9kZWZhdWx0Tm9ybWFsTWFwOiBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgaW1hZ2U6IGNyZWF0ZUZpbGxDYW52YXMoJyMwMDAnKVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIF9kZWZhdWx0Um91Z2huZXNzTWFwOiBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgaW1hZ2U6IGNyZWF0ZUZpbGxDYW52YXMoJyNmZmYnKVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIF9kZWZhdWx0TWV0YWxuZXNzTWFwOiBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgaW1hZ2U6IGNyZWF0ZUZpbGxDYW52YXMoJyNmZmYnKVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIF9kZWZhdWx0RGlmZnVzZU1hcDogbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjZmZmJylcclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgX2ZyYW1lQnVmZmVyOiBuZXcgRnJhbWVCdWZmZXIoKSxcclxuXHJcbiAgICAgICAgX2dCdWZmZXJNYXRlcmlhbDE6IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlci52ZXJ0ZXgnKSxcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlcjEuZnJhZ21lbnQnKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB2ZXJ0ZXhEZWZpbmVzOiB7XHJcbiAgICAgICAgICAgICAgICBGSVJTVF9QQVNTOiBudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZyYWdtZW50RGVmaW5lczoge1xyXG4gICAgICAgICAgICAgICAgRklSU1RfUEFTUzogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgX2dCdWZmZXJNYXRlcmlhbDI6IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlci52ZXJ0ZXgnKSxcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlcjIuZnJhZ21lbnQnKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB2ZXJ0ZXhEZWZpbmVzOiB7XHJcbiAgICAgICAgICAgICAgICBTRUNPTkRfUEFTUzogbnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmcmFnbWVudERlZmluZXM6IHtcclxuICAgICAgICAgICAgICAgIFNFQ09ORF9QQVNTOiBudWxsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBfZ0J1ZmZlck1hdGVyaWFsMzogbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgc2hhZGVyOiBuZXcgU2hhZGVyKFxyXG4gICAgICAgICAgICAgICAgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5nYnVmZmVyLnZlcnRleCcpLFxyXG4gICAgICAgICAgICAgICAgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5nYnVmZmVyMy5mcmFnbWVudCcpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHZlcnRleERlZmluZXM6IHtcclxuICAgICAgICAgICAgICAgIFRISVJEX1BBU1M6IG51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZnJhZ21lbnREZWZpbmVzOiB7XHJcbiAgICAgICAgICAgICAgICBUSElSRF9QQVNTOiBudWxsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgX2RlYnVnUGFzczogbmV3IFBhc3Moe1xyXG4gICAgICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5nYnVmZmVyLmRlYnVnJylcclxuICAgICAgICB9KVxyXG4gICAgfTtcclxufSwgLyoqIEBsZW5kcyBjbGF5LmRlZmVycmVkLkdCdWZmZXIjICove1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IEcgQnVmZmVyIHNpemUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcclxuICAgICAqL1xyXG4gICAgcmVzaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9nQnVmZmVyVGV4MS53aWR0aCA9PT0gd2lkdGhcclxuICAgICAgICAgICAgJiYgdGhpcy5fZ0J1ZmZlclRleDEuaGVpZ2h0ID09PSBoZWlnaHRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4MS53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXgxLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDIud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4Mi5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXgzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4NC53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXg0LmhlaWdodCA9IGhlaWdodDtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVE9ETyBpcyBkcHIgbmVlZGVkP1xyXG4gICAgc2V0Vmlld3BvcnQ6IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkcHIpIHtcclxuICAgICAgICB2YXIgdmlld3BvcnQ7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICB2aWV3cG9ydCA9IHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2aWV3cG9ydCA9IHtcclxuICAgICAgICAgICAgICAgIHg6IHgsIHk6IHksXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgZGV2aWNlUGl4ZWxSYXRpbzogZHByIHx8IDFcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudmlld3BvcnQgPSB2aWV3cG9ydDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0Vmlld3BvcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5fZnJhbWVCdWZmZXIudmlld3BvcnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lQnVmZmVyLnZpZXdwb3J0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHg6IDAsIHk6IDAsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5fZ0J1ZmZlclRleDEud2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMuX2dCdWZmZXJUZXgxLmhlaWdodCxcclxuICAgICAgICAgICAgICAgIGRldmljZVBpeGVsUmF0aW86IDFcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIEdCdWZmZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5DYW1lcmF9IGNhbWVyYVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIG9wdHMpIHtcclxuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIHZhciBmcmFtZUJ1ZmZlciA9IHRoaXMuX2ZyYW1lQnVmZmVyO1xyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IGZyYW1lQnVmZmVyLnZpZXdwb3J0O1xyXG5cclxuICAgICAgICB2YXIgcmVuZGVyTGlzdCA9IHNjZW5lLnVwZGF0ZVJlbmRlckxpc3QoY2FtZXJhLCB0cnVlKTtcclxuXHJcbiAgICAgICAgdmFyIG9wYXF1ZUxpc3QgPSByZW5kZXJMaXN0Lm9wYXF1ZTtcclxuICAgICAgICB2YXIgdHJhbnNwYXJlbnRMaXN0ID0gcmVuZGVyTGlzdC50cmFuc3BhcmVudDtcclxuXHJcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XHJcbiAgICAgICAgdmFyIGdCdWZmZXJSZW5kZXJMaXN0ID0gdGhpcy5fZ0J1ZmZlclJlbmRlckxpc3Q7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcGFxdWVMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghb3BhcXVlTGlzdFtpXS5pZ25vcmVHQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICBnQnVmZmVyUmVuZGVyTGlzdFtvZmZzZXQrK10gPSBvcGFxdWVMaXN0W2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnJlbmRlclRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhbnNwYXJlbnRMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRyYW5zcGFyZW50TGlzdFtpXS5pZ25vcmVHQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ0J1ZmZlclJlbmRlckxpc3Rbb2Zmc2V0KytdID0gdHJhbnNwYXJlbnRMaXN0W2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdCdWZmZXJSZW5kZXJMaXN0Lmxlbmd0aCA9IG9mZnNldDtcclxuXHJcbiAgICAgICAgZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTtcclxuICAgICAgICBnbC5kZXB0aE1hc2sodHJ1ZSk7XHJcbiAgICAgICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xyXG4gICAgICAgIGdsLmRpc2FibGUoZ2wuQkxFTkQpO1xyXG5cclxuICAgICAgICB2YXIgZW5hYmxlVGFyZ2V0VGV4dHVyZTEgPSB0aGlzLmVuYWJsZVRhcmdldFRleHR1cmUxO1xyXG4gICAgICAgIHZhciBlbmFibGVUYXJnZXRUZXh0dXJlMiA9IHRoaXMuZW5hYmxlVGFyZ2V0VGV4dHVyZTI7XHJcbiAgICAgICAgdmFyIGVuYWJsZVRhcmdldFRleHR1cmUzID0gdGhpcy5lbmFibGVUYXJnZXRUZXh0dXJlMztcclxuICAgICAgICB2YXIgZW5hYmxlVGFyZ2V0VGV4dHVyZTQgPSB0aGlzLmVuYWJsZVRhcmdldFRleHR1cmU0O1xyXG4gICAgICAgIGlmICghZW5hYmxlVGFyZ2V0VGV4dHVyZTEgJiYgIWVuYWJsZVRhcmdldFRleHR1cmUzICYmICFlbmFibGVUYXJnZXRUZXh0dXJlNCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NhblxcJ3QgZGlzYWJsZSB0YXJnZXRUZXh0dXJlMSwgdGFyZ2V0VGV4dHVyZTMsIHRhcmdldFRleHR1cmU0IGJvdGgnKTtcclxuICAgICAgICAgICAgZW5hYmxlVGFyZ2V0VGV4dHVyZTEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVuYWJsZVRhcmdldFRleHR1cmUyKSB7XHJcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChvcHRzLnRhcmdldFRleHR1cmUyIHx8IHRoaXMuX2dCdWZmZXJUZXgyLCByZW5kZXJlci5nbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gY2xlYXJWaWV3cG9ydCgpIHtcclxuICAgICAgICAgICAgaWYgKHZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICAgICAgICAgIC8vIHVzZSBzY2lzc29yIHRvIG1ha2Ugc3VyZSBvbmx5IGNsZWFyIHRoZSB2aWV3cG9ydFxyXG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XHJcbiAgICAgICAgICAgICAgICBnbC5zY2lzc29yKHZpZXdwb3J0LnggKiBkcHIsIHZpZXdwb3J0LnkgKiBkcHIsIHZpZXdwb3J0LndpZHRoICogZHByLCB2aWV3cG9ydC5oZWlnaHQgKiBkcHIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJfQklUKTtcclxuICAgICAgICAgICAgaWYgKHZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlKGdsLlNDSVNTT1JfVEVTVCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGlzTWF0ZXJpYWxDaGFuZ2VkKHJlbmRlcmFibGUsIHByZXZSZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLm1hdGVyaWFsICE9PSBwcmV2UmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFBFTkRJTkcsIHNjZW5lLmJvdW5kaW5nQm94TGFzdEZyYW1lIG5lZWRzIGJlIHVwZGF0ZWQgaWYgaGF2ZSBzaGFkb3dcclxuICAgICAgICByZW5kZXJlci5iaW5kU2NlbmVSZW5kZXJpbmcoc2NlbmUpO1xyXG4gICAgICAgIGlmIChlbmFibGVUYXJnZXRUZXh0dXJlMSkge1xyXG4gICAgICAgICAgICAvLyBQYXNzIDFcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYXR0YWNoKG9wdHMudGFyZ2V0VGV4dHVyZTEgfHwgdGhpcy5fZ0J1ZmZlclRleDEpO1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIGNsZWFyVmlld3BvcnQoKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBnQnVmZmVyTWF0ZXJpYWwxID0gdGhpcy5fZ0J1ZmZlck1hdGVyaWFsMTtcclxuICAgICAgICAgICAgdmFyIHBhc3NDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnQnVmZmVyTWF0ZXJpYWwxO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGdldFVuaWZvcm06IGdldEdldFVuaWZvcm1Ib29rMSh0aGlzLl9kZWZhdWx0Tm9ybWFsTWFwLCB0aGlzLl9kZWZhdWx0Um91Z2huZXNzTWFwLCB0aGlzLl9kZWZhdWx0RGlmZnVzZU1hcCksXHJcbiAgICAgICAgICAgICAgICBpc01hdGVyaWFsQ2hhbmdlZDogaXNNYXRlcmlhbENoYW5nZWQsXHJcbiAgICAgICAgICAgICAgICBzb3J0Q29tcGFyZTogcmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy8gRklYTUUgVXNlIE1SVCBpZiBwb3NzaWJsZVxyXG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKGdCdWZmZXJSZW5kZXJMaXN0LCBjYW1lcmEsIHBhc3NDb25maWcpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuYWJsZVRhcmdldFRleHR1cmUzKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBQYXNzIDJcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYXR0YWNoKG9wdHMudGFyZ2V0VGV4dHVyZTMgfHwgdGhpcy5fZ0J1ZmZlclRleDMpO1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIGNsZWFyVmlld3BvcnQoKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBnQnVmZmVyTWF0ZXJpYWwyID0gdGhpcy5fZ0J1ZmZlck1hdGVyaWFsMjtcclxuICAgICAgICAgICAgdmFyIHBhc3NDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnQnVmZmVyTWF0ZXJpYWwyO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGdldFVuaWZvcm06IGdldEdldFVuaWZvcm1Ib29rMih0aGlzLl9kZWZhdWx0RGlmZnVzZU1hcCwgdGhpcy5fZGVmYXVsdE1ldGFsbmVzc01hcCksXHJcbiAgICAgICAgICAgICAgICBpc01hdGVyaWFsQ2hhbmdlZDogaXNNYXRlcmlhbENoYW5nZWQsXHJcbiAgICAgICAgICAgICAgICBzb3J0Q29tcGFyZTogcmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhnQnVmZmVyUmVuZGVyTGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbmFibGVUYXJnZXRUZXh0dXJlNCkge1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYXR0YWNoKG9wdHMudGFyZ2V0VGV4dHVyZTQgfHwgdGhpcy5fZ0J1ZmZlclRleDQpO1xyXG5cclxuICAgICAgICAgICAgY2xlYXJWaWV3cG9ydCgpO1xyXG5cclxuICAgICAgICAgICAgLy8gUmVtb3ZlIGppdHRlcmluZyBpbiB0ZW1wb3JhbCBhYS5cclxuICAgICAgICAgICAgLy8gUEVORElORy4gQmV0dGVyIHNvbHV0aW9uP1xyXG4gICAgICAgICAgICBjYW1lcmEudXBkYXRlKCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZ0J1ZmZlck1hdGVyaWFsMyA9IHRoaXMuX2dCdWZmZXJNYXRlcmlhbDM7XHJcbiAgICAgICAgICAgIHZhciBjYW1lcmFWaWV3UHJvaiA9IG1hdDQuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIG1hdDQubXVsdGlwbHkoY2FtZXJhVmlld1Byb2osIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmFycmF5LCBjYW1lcmEudmlld01hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ0J1ZmZlck1hdGVyaWFsMztcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCByZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzU2tpbm5lZE1lc2ggPSByZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2goKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTa2lubmVkTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2tlbGV0b24gPSByZW5kZXJhYmxlLnNrZWxldG9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgam9pbnRzID0gcmVuZGVyYWJsZS5qb2ludHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqb2ludHMubGVuZ3RoID4gcmVuZGVyZXIuZ2V0TWF4Sm9pbnROdW1iZXIoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNraW5NYXRyaWNlc1RleHR1cmUgPSBza2VsZXRvbi5nZXRTdWJTa2luTWF0cmljZXNUZXh0dXJlKHJlbmRlcmFibGUuX191aWRfXywgam9pbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZSA9IHJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzVGV4dHVyZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJldlNraW5NYXRyaWNlc1RleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZSA9IHJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzVGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkZMT0FULFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZU1pcG1hcDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsaXBZOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHMubGVuZ3RoICE9PSBza2luTWF0cmljZXNUZXh0dXJlLnBpeGVscy5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZTa2luTWF0cmljZXNUZXh0dXJlLnBpeGVscyA9IG5ldyBGbG9hdDMyQXJyYXkoc2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBza2luTWF0cmljZXNUZXh0dXJlLnBpeGVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHNbaV0gPSBza2luTWF0cmljZXNUZXh0dXJlLnBpeGVsc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS53aWR0aCA9IHNraW5NYXRyaWNlc1RleHR1cmUud2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS5oZWlnaHQgPSBza2luTWF0cmljZXNUZXh0dXJlLmhlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBza2luTWF0cmljZXNBcnJheSA9IHNrZWxldG9uLmdldFN1YlNraW5NYXRyaWNlcyhyZW5kZXJhYmxlLl9fdWlkX18sIGpvaW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzQXJyYXkgfHwgcmVuZGVyYWJsZS5fX3ByZXZTa2luTWF0cmljZXNBcnJheS5sZW5ndGggIT09IHNraW5NYXRyaWNlc0FycmF5Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHNraW5NYXRyaWNlc0FycmF5Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc0FycmF5LnNldChza2luTWF0cmljZXNBcnJheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyYWJsZS5fX3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uID0gcmVuZGVyYWJsZS5fX3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uIHx8IG1hdDQuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIHdvcmxkIHRyYW5zZm9ybSBvZiBza2lubmVkIG1lc2guXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdDQuY29weShyZW5kZXJhYmxlLl9fcHJldldvcmxkVmlld1Byb2plY3Rpb24sIGNhbWVyYVZpZXdQcm9qKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdDQubXVsdGlwbHkocmVuZGVyYWJsZS5fX3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uLCBjYW1lcmFWaWV3UHJvaiwgcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGdldFVuaWZvcm06IGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBnQnVmZmVyTWF0LCBzeW1ib2wpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sID09PSAncHJldldvcmxkVmlld1Byb2plY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLl9fcHJldldvcmxkVmlld1Byb2plY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3ByZXZTa2luTWF0cml4Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5fX3ByZXZTa2luTWF0cmljZXNBcnJheTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAncHJldlNraW5NYXRyaWNlc1RleHR1cmUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc1RleHR1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ2ZpcnN0UmVuZGVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXJlbmRlcmFibGUuX19wcmV2V29ybGRWaWV3UHJvamVjdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnQnVmZmVyTWF0LmdldChzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBpc01hdGVyaWFsQ2hhbmdlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyB1cGRhdGUgcHJldldvcmxkVmlld1Byb2plY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzb3J0Q29tcGFyZTogcmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmVcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoZ0J1ZmZlclJlbmRlckxpc3QsIGNhbWVyYSwgcGFzc0NvbmZpZyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXJlci5iaW5kU2NlbmVSZW5kZXJpbmcobnVsbCk7XHJcbiAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWJ1ZyBvdXRwdXQgb2YgZ0J1ZmZlci4gVXNlIGB0eXBlYCBwYXJhbWV0ZXIgdG8gY2hvb3MgdGhlIGRlYnVnIG91dHB1dCB0eXBlLCB3aGljaCBjYW4gYmU6XHJcbiAgICAgKlxyXG4gICAgICogKyAnbm9ybWFsJ1xyXG4gICAgICogKyAnZGVwdGgnXHJcbiAgICAgKiArICdwb3NpdGlvbidcclxuICAgICAqICsgJ2dsb3NzaW5lc3MnXHJcbiAgICAgKiArICdtZXRhbG5lc3MnXHJcbiAgICAgKiArICdhbGJlZG8nXHJcbiAgICAgKiArICd2ZWxvY2l0eSdcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZT0nbm9ybWFsJ11cclxuICAgICAqL1xyXG4gICAgcmVuZGVyRGVidWc6IGZ1bmN0aW9uIChyZW5kZXJlciwgY2FtZXJhLCB0eXBlLCB2aWV3cG9ydCkge1xyXG4gICAgICAgIHZhciBkZWJ1Z1R5cGVzID0ge1xyXG4gICAgICAgICAgICBub3JtYWw6IDAsXHJcbiAgICAgICAgICAgIGRlcHRoOiAxLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogMixcclxuICAgICAgICAgICAgZ2xvc3NpbmVzczogMyxcclxuICAgICAgICAgICAgbWV0YWxuZXNzOiA0LFxyXG4gICAgICAgICAgICBhbGJlZG86IDUsXHJcbiAgICAgICAgICAgIHZlbG9jaXR5OiA2XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoZGVidWdUeXBlc1t0eXBlXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5rb3duIHR5cGUgXCInICsgdHlwZSArICdcIicpO1xyXG4gICAgICAgICAgICAvLyBEZWZhdWx0IHVzZSBub3JtYWxcclxuICAgICAgICAgICAgdHlwZSA9ICdub3JtYWwnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyZXIuc2F2ZUNsZWFyKCk7XHJcbiAgICAgICAgcmVuZGVyZXIuc2F2ZVZpZXdwb3J0KCk7XHJcbiAgICAgICAgcmVuZGVyZXIuY2xlYXJCaXQgPSByZW5kZXJlci5nbC5ERVBUSF9CVUZGRVJfQklUO1xyXG5cclxuICAgICAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodmlld3BvcnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdmlld1Byb2plY3Rpb25JbnYgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIE1hdHJpeDQubXVsdGlwbHkodmlld1Byb2plY3Rpb25JbnYsIGNhbWVyYS53b3JsZFRyYW5zZm9ybSwgY2FtZXJhLmludlByb2plY3Rpb25NYXRyaXgpO1xyXG5cclxuICAgICAgICB2YXIgZGVidWdQYXNzID0gdGhpcy5fZGVidWdQYXNzO1xyXG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCd2aWV3cG9ydFNpemUnLCBbcmVuZGVyZXIuZ2V0V2lkdGgoKSwgcmVuZGVyZXIuZ2V0SGVpZ2h0KCldKTtcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUxJywgdGhpcy5fZ0J1ZmZlclRleDEpO1xyXG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTInLCB0aGlzLl9nQnVmZmVyVGV4Mik7XHJcbiAgICAgICAgZGVidWdQYXNzLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMycsIHRoaXMuX2dCdWZmZXJUZXgzKTtcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmU0JywgdGhpcy5fZ0J1ZmZlclRleDQpO1xyXG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCdkZWJ1ZycsIGRlYnVnVHlwZXNbdHlwZV0pO1xyXG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCd2aWV3UHJvamVjdGlvbkludicsIHZpZXdQcm9qZWN0aW9uSW52LmFycmF5KTtcclxuICAgICAgICBkZWJ1Z1Bhc3MucmVuZGVyKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgcmVuZGVyZXIucmVzdG9yZVZpZXdwb3J0KCk7XHJcbiAgICAgICAgcmVuZGVyZXIucmVzdG9yZUNsZWFyKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGZpcnN0IHRhcmdldCB0ZXh0dXJlLlxyXG4gICAgICogQ2hhbm5lbCBzdG9yYWdlOlxyXG4gICAgICogKyBSOiBub3JtYWwueCAqIDAuNSArIDAuNVxyXG4gICAgICogKyBHOiBub3JtYWwueSAqIDAuNSArIDAuNVxyXG4gICAgICogKyBCOiBub3JtYWwueiAqIDAuNSArIDAuNVxyXG4gICAgICogKyBBOiBnbG9zc2luZXNzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAqL1xyXG4gICAgZ2V0VGFyZ2V0VGV4dHVyZTE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ0J1ZmZlclRleDE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHNlY29uZCB0YXJnZXQgdGV4dHVyZS5cclxuICAgICAqIENoYW5uZWwgc3RvcmFnZTpcclxuICAgICAqICsgUjogZGVwdGhcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICovXHJcbiAgICBnZXRUYXJnZXRUZXh0dXJlMjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nQnVmZmVyVGV4MjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhpcmQgdGFyZ2V0IHRleHR1cmUuXHJcbiAgICAgKiBDaGFubmVsIHN0b3JhZ2U6XHJcbiAgICAgKiArIFI6IGFsYmVkby5yXHJcbiAgICAgKiArIEc6IGFsYmVkby5nXHJcbiAgICAgKiArIEI6IGFsYmVkby5iXHJcbiAgICAgKiArIEE6IG1ldGFsbmVzc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgKi9cclxuICAgIGdldFRhcmdldFRleHR1cmUzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dCdWZmZXJUZXgzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBmb3VydGggdGFyZ2V0IHRleHR1cmUuXHJcbiAgICAgKiBDaGFubmVsIHN0b3JhZ2U6XHJcbiAgICAgKiArIFI6IHZlbG9jaXR5LnJcclxuICAgICAqICsgRzogdmVsb2NpdHkuZ1xyXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgKi9cclxuICAgIGdldFRhcmdldFRleHR1cmU0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dCdWZmZXJUZXg0O1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4MS5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4Mi5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4My5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdE5vcm1hbE1hcC5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9kZWZhdWx0Um91Z2huZXNzTWFwLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRNZXRhbG5lc3NNYXAuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdERpZmZ1c2VNYXAuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgR0J1ZmZlcjsiLCJpbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5pbXBvcnQgdmVjMiBmcm9tICcuLi9nbG1hdHJpeC92ZWMyJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5nZW9tZXRyeS5Db25lXHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LnRvcFJhZGl1c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuYm90dG9tUmFkaXVzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5oZWlnaHRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmNhcFNlZ21lbnRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5oZWlnaHRTZWdtZW50c11cclxuICovXHJcbnZhciBDb25lID0gR2VvbWV0cnkuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5Db25lIyAqLyB7XHJcbiAgICBkeW5hbWljOiBmYWxzZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdG9wUmFkaXVzOiAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYm90dG9tUmFkaXVzOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaGVpZ2h0OiAyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY2FwU2VnbWVudHM6IDIwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaGVpZ2h0U2VnbWVudHM6IDFcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5Db25lLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGNvbmUgZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBbXTtcclxuICAgICAgICB2YXIgdGV4Y29vcmRzID0gW107XHJcbiAgICAgICAgdmFyIGZhY2VzID0gW107XHJcbiAgICAgICAgcG9zaXRpb25zLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGV4Y29vcmRzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgZmFjZXMubGVuZ3RoID0gMDtcclxuICAgICAgICAvLyBUb3AgY2FwXHJcbiAgICAgICAgdmFyIGNhcFNlZ1JhZGlhbCA9IE1hdGguUEkgKiAyIC8gdGhpcy5jYXBTZWdtZW50cztcclxuXHJcbiAgICAgICAgdmFyIHRvcENhcCA9IFtdO1xyXG4gICAgICAgIHZhciBib3R0b21DYXAgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIHIxID0gdGhpcy50b3BSYWRpdXM7XHJcbiAgICAgICAgdmFyIHIyID0gdGhpcy5ib3R0b21SYWRpdXM7XHJcbiAgICAgICAgdmFyIHkgPSB0aGlzLmhlaWdodCAvIDI7XHJcblxyXG4gICAgICAgIHZhciBjMSA9IHZlYzMuZnJvbVZhbHVlcygwLCB5LCAwKTtcclxuICAgICAgICB2YXIgYzIgPSB2ZWMzLmZyb21WYWx1ZXMoMCwgLXksIDApO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jYXBTZWdtZW50czsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB0aGV0YSA9IGkgKiBjYXBTZWdSYWRpYWw7XHJcbiAgICAgICAgICAgIHZhciB4ID0gcjEgKiBNYXRoLnNpbih0aGV0YSk7XHJcbiAgICAgICAgICAgIHZhciB6ID0gcjEgKiBNYXRoLmNvcyh0aGV0YSk7XHJcbiAgICAgICAgICAgIHRvcENhcC5wdXNoKHZlYzMuZnJvbVZhbHVlcyh4LCB5LCB6KSk7XHJcblxyXG4gICAgICAgICAgICB4ID0gcjIgKiBNYXRoLnNpbih0aGV0YSk7XHJcbiAgICAgICAgICAgIHogPSByMiAqIE1hdGguY29zKHRoZXRhKTtcclxuICAgICAgICAgICAgYm90dG9tQ2FwLnB1c2godmVjMy5mcm9tVmFsdWVzKHgsIC15LCB6KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBCdWlsZCB0b3AgY2FwXHJcbiAgICAgICAgcG9zaXRpb25zLnB1c2goYzEpO1xyXG4gICAgICAgIC8vIEZJWE1FXHJcbiAgICAgICAgdGV4Y29vcmRzLnB1c2godmVjMi5mcm9tVmFsdWVzKDAsIDEpKTtcclxuICAgICAgICB2YXIgbiA9IHRoaXMuY2FwU2VnbWVudHM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcG9zaXRpb25zLnB1c2godG9wQ2FwW2ldKTtcclxuICAgICAgICAgICAgLy8gRklYTUVcclxuICAgICAgICAgICAgdGV4Y29vcmRzLnB1c2godmVjMi5mcm9tVmFsdWVzKGkgLyBuLCAwKSk7XHJcbiAgICAgICAgICAgIGZhY2VzLnB1c2goWzAsIGkrMSwgKGkrMSkgJSBuICsgMV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQnVpbGQgYm90dG9tIGNhcFxyXG4gICAgICAgIHZhciBvZmZzZXQgPSBwb3NpdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIHBvc2l0aW9ucy5wdXNoKGMyKTtcclxuICAgICAgICB0ZXhjb29yZHMucHVzaCh2ZWMyLmZyb21WYWx1ZXMoMCwgMSkpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKGJvdHRvbUNhcFtpXSk7XHJcbiAgICAgICAgICAgIC8vIEZJWE1FXHJcbiAgICAgICAgICAgIHRleGNvb3Jkcy5wdXNoKHZlYzIuZnJvbVZhbHVlcyhpIC8gbiwgMCkpO1xyXG4gICAgICAgICAgICBmYWNlcy5wdXNoKFtvZmZzZXQsIG9mZnNldCsoKGkrMSkgJSBuICsgMSksIG9mZnNldCtpKzFdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEJ1aWxkIHNpZGVcclxuICAgICAgICBvZmZzZXQgPSBwb3NpdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIHZhciBuMiA9IHRoaXMuaGVpZ2h0U2VnbWVudHM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuMisxOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB2ID0gaiAvIG4yO1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2godmVjMy5sZXJwKHZlYzMuY3JlYXRlKCksIHRvcENhcFtpXSwgYm90dG9tQ2FwW2ldLCB2KSk7XHJcbiAgICAgICAgICAgICAgICB0ZXhjb29yZHMucHVzaCh2ZWMyLmZyb21WYWx1ZXMoaSAvIG4sIHYpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG4yOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBpMSA9IGkgKiAobjIgKyAxKSArIGo7XHJcbiAgICAgICAgICAgICAgICB2YXIgaTIgPSAoKGkgKyAxKSAlIG4pICogKG4yICsgMSkgKyBqO1xyXG4gICAgICAgICAgICAgICAgdmFyIGkzID0gKChpICsgMSkgJSBuKSAqIChuMiArIDEpICsgaiArIDE7XHJcbiAgICAgICAgICAgICAgICB2YXIgaTQgPSBpICogKG4yICsgMSkgKyBqICsgMTtcclxuICAgICAgICAgICAgICAgIGZhY2VzLnB1c2goW29mZnNldCtpMiwgb2Zmc2V0K2kxLCBvZmZzZXQraTRdKTtcclxuICAgICAgICAgICAgICAgIGZhY2VzLnB1c2goW29mZnNldCtpNCwgb2Zmc2V0K2kzLCBvZmZzZXQraTJdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLmZyb21BcnJheShwb3NpdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy50ZXhjb29yZDAuZnJvbUFycmF5KHRleGNvb3Jkcyk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdEluZGljZXNGcm9tQXJyYXkoZmFjZXMpO1xyXG5cclxuICAgICAgICB0aGlzLmdlbmVyYXRlVmVydGV4Tm9ybWFscygpO1xyXG5cclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdmFyIHIgPSBNYXRoLm1heCh0aGlzLnRvcFJhZGl1cywgdGhpcy5ib3R0b21SYWRpdXMpO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldCgtciwgLXRoaXMuaGVpZ2h0LzIsIC1yKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1heC5zZXQociwgdGhpcy5oZWlnaHQvMiwgcik7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ29uZTtcclxuIiwiaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IENvbmVHZW9tZXRyeSBmcm9tICcuL0NvbmUnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lmdlb21ldHJ5LkN5bGluZGVyXHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LnJhZGl1c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5jYXBTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0U2VnbWVudHNdXHJcbiAqL1xyXG52YXIgQ3lsaW5kZXIgPSBHZW9tZXRyeS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5DeWxpbmRlciMgKi9cclxue1xyXG4gICAgZHluYW1pYzogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJhZGl1czogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodDogMixcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNhcFNlZ21lbnRzOiA1MCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodFNlZ21lbnRzOiAxXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ3lsaW5kZXIucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgY3lsaW5kZXIgZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBjb25lID0gbmV3IENvbmVHZW9tZXRyeSh7XHJcbiAgICAgICAgICAgIHRvcFJhZGl1czogdGhpcy5yYWRpdXMsXHJcbiAgICAgICAgICAgIGJvdHRvbVJhZGl1czogdGhpcy5yYWRpdXMsXHJcbiAgICAgICAgICAgIGNhcFNlZ21lbnRzOiB0aGlzLmNhcFNlZ21lbnRzLFxyXG4gICAgICAgICAgICBoZWlnaHRTZWdtZW50czogdGhpcy5oZWlnaHRTZWdtZW50cyxcclxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWUgPSBjb25lLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWU7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZSA9IGNvbmUuYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnRleGNvb3JkMC52YWx1ZSA9IGNvbmUuYXR0cmlidXRlcy50ZXhjb29yZDAudmFsdWU7XHJcbiAgICAgICAgdGhpcy5pbmRpY2VzID0gY29uZS5pbmRpY2VzO1xyXG5cclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gY29uZS5ib3VuZGluZ0JveDtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDeWxpbmRlcjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQubGlnaHRfdm9sdW1lLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbnZhcnlpbmcgdmVjMyB2X1Bvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbiB2X1Bvc2l0aW9uID0gcG9zaXRpb247XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuc3BvdF9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0RGlyZWN0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gZmxvYXQgdW1icmFBbmdsZUNvc2luZTtcXG51bmlmb3JtIGZsb2F0IHBlbnVtYnJhQW5nbGVDb3NpbmU7XFxudW5pZm9ybSBmbG9hdCBsaWdodFJhbmdlO1xcbnVuaWZvcm0gZmxvYXQgZmFsbG9mZkZhY3RvcjtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRTaGFkb3dNYXA7XFxudW5pZm9ybSBtYXQ0IGxpZ2h0TWF0cml4O1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRTaGFkb3dNYXBTaXplO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG52b2lkIG1haW4oKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gcG9zaXRpb247XFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gTCAvPSBkaXN0O1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgbGlnaHRSYW5nZSk7XFxuIGZsb2F0IGMgPSBkb3QoLW5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiksIEwpO1xcbiBmbG9hdCBmYWxsb2ZmID0gY2xhbXAoKGMgLSB1bWJyYUFuZ2xlQ29zaW5lKSAvIChwZW51bWJyYUFuZ2xlQ29zaW5lIC0gdW1icmFBbmdsZUNvc2luZSksIDAuMCwgMS4wKTtcXG4gZmFsbG9mZiA9IHBvdyhmYWxsb2ZmLCBmYWxsb2ZmRmFjdG9yKTtcXG4gdmVjMyBIID0gbm9ybWFsaXplKEwgKyBWKTtcXG4gZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9ICgxLjAgLSBmYWxsb2ZmKSAqIGF0dGVudWF0aW9uICogbGlnaHRFcXVhdGlvbihcXG4gbGlnaHRDb2xvciwgZGlmZnVzZUNvbG9yLCBzcGVjdWxhckNvbG9yLCBuZGwsIG5kaCwgbmR2LCBnbG9zc2luZXNzXFxuICk7XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYihcXG4gbGlnaHRTaGFkb3dNYXAsIGxpZ2h0TWF0cml4LCBwb3NpdGlvbiwgbGlnaHRTaGFkb3dNYXBTaXplXFxuICk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gc2hhZG93Q29udHJpYjtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcXG5cIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuZGlyZWN0aW9uYWxfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodERpcmVjdGlvbjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRTaGFkb3dNYXA7XFxudW5pZm9ybSBmbG9hdCBsaWdodFNoYWRvd01hcFNpemU7XFxudW5pZm9ybSBtYXQ0IGxpZ2h0TWF0cmljZXNbU0hBRE9XX0NBU0NBREVdO1xcbnVuaWZvcm0gZmxvYXQgc2hhZG93Q2FzY2FkZUNsaXBzTmVhcltTSEFET1dfQ0FTQ0FERV07XFxudW5pZm9ybSBmbG9hdCBzaGFkb3dDYXNjYWRlQ2xpcHNGYXJbU0hBRE9XX0NBU0NBREVdO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG52b2lkIG1haW4oKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMzIEwgPSAtbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uKTtcXG4gdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvc2l0aW9uIC0gcG9zaXRpb24pO1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kdiA9IGNsYW1wKGRvdChOLCBWKSwgMC4wLCAxLjApO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRFcXVhdGlvbihcXG4gbGlnaHRDb2xvciwgZGlmZnVzZUNvbG9yLCBzcGVjdWxhckNvbG9yLCBuZGwsIG5kaCwgbmR2LCBnbG9zc2luZXNzXFxuICk7XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuIGZvciAoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBTSEFET1dfQ0FTQ0FERTsgX2lkeF8rKykge3tcXG4gaWYgKFxcbiB6ID49IHNoYWRvd0Nhc2NhZGVDbGlwc05lYXJbX2lkeF9dICYmXFxuIHogPD0gc2hhZG93Q2FzY2FkZUNsaXBzRmFyW19pZHhfXVxcbiApIHtcXG4gc2hhZG93Q29udHJpYiA9IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiBsaWdodFNoYWRvd01hcCwgbGlnaHRNYXRyaWNlc1tfaWR4X10sIHBvc2l0aW9uLCBsaWdodFNoYWRvd01hcFNpemUsXFxuIHZlYzIoMS4wIC8gZmxvYXQoU0hBRE9XX0NBU0NBREUpLCAxLjApLFxcbiB2ZWMyKGZsb2F0KF9pZHhfKSAvIGZsb2F0KFNIQURPV19DQVNDQURFKSwgMC4wKVxcbiApO1xcbiB9XFxuIH19XFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gc2hhZG93Q29udHJpYjtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcXG5cIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuYW1iaWVudF9saWdodFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMTtcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTM7XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSB2ZWMyIHdpbmRvd1NpemU6IFdJTkRPV19TSVpFO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC8gd2luZG93U2l6ZTtcXG4gdmVjNCB0ZXhlbDEgPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUxLCB1dik7XFxuIGlmIChkb3QodGV4ZWwxLnJnYiwgdmVjMygxLjApKSA9PSAwLjApIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiB2ZWMzIGFsYmVkbyA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTMsIHV2KS5yZ2I7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBsaWdodENvbG9yICogYWxiZWRvO1xcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5hbWJpZW50X3NoX2xpZ2h0XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUxO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMztcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2VmZmljaWVudHNbOV07XFxudW5pZm9ybSB2ZWMyIHdpbmRvd1NpemU6IFdJTkRPV19TSVpFO1xcbnZlYzMgY2FsY0FtYmllbnRTSExpZ2h0KHZlYzMgTikge1xcbiByZXR1cm4gbGlnaHRDb2VmZmljaWVudHNbMF1cXG4gKyBsaWdodENvZWZmaWNpZW50c1sxXSAqIE4ueFxcbiArIGxpZ2h0Q29lZmZpY2llbnRzWzJdICogTi55XFxuICsgbGlnaHRDb2VmZmljaWVudHNbM10gKiBOLnpcXG4gKyBsaWdodENvZWZmaWNpZW50c1s0XSAqIE4ueCAqIE4uelxcbiArIGxpZ2h0Q29lZmZpY2llbnRzWzVdICogTi56ICogTi55XFxuICsgbGlnaHRDb2VmZmljaWVudHNbNl0gKiBOLnkgKiBOLnhcXG4gKyBsaWdodENvZWZmaWNpZW50c1s3XSAqICgzLjAgKiBOLnogKiBOLnogLSAxLjApXFxuICsgbGlnaHRDb2VmZmljaWVudHNbOF0gKiAoTi54ICogTi54IC0gTi55ICogTi55KTtcXG59XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHkgLyB3aW5kb3dTaXplO1xcbiB2ZWM0IHRleGVsMSA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTEsIHV2KTtcXG4gaWYgKGRvdCh0ZXhlbDEucmdiLCB2ZWMzKDEuMCkpID09IDAuMCkge1xcbiBkaXNjYXJkO1xcbiB9XFxuIHZlYzMgTiA9IHRleGVsMS5yZ2IgKiAyLjAgLSAxLjA7XFxuIHZlYzMgYWxiZWRvID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMywgdXYpLnJnYjtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGxpZ2h0Q29sb3IgKiBhbGJlZG8gKiBjYWxjQW1iaWVudFNITGlnaHQoTik7XFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmFtYmllbnRfY3ViZW1hcF9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSBzYW1wbGVyQ3ViZSBsaWdodEN1YmVtYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgYnJkZkxvb2t1cDtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiBAaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gdmVjMyBMID0gcmVmbGVjdCgtViwgTik7XFxuIGZsb2F0IG5kdiA9IGNsYW1wKGRvdChOLCBWKSwgMC4wLCAxLjApO1xcbiBmbG9hdCByb3VnaCA9IGNsYW1wKDEuMCAtIGdsb3NzaW5lc3MsIDAuMCwgMS4wKTtcXG4gZmxvYXQgYmlhcyA9IHJvdWdoICogNS4wO1xcbiB2ZWMyIGJyZGZQYXJhbSA9IHRleHR1cmUyRChicmRmTG9va3VwLCB2ZWMyKHJvdWdoLCBuZHYpKS54eTtcXG4gdmVjMyBlbnZXZWlnaHQgPSBzcGVjdWxhckNvbG9yICogYnJkZlBhcmFtLnggKyBicmRmUGFyYW0ueTtcXG4gdmVjMyBlbnZUZXhlbCA9IFJHQk1EZWNvZGUodGV4dHVyZUN1YmVMb2RFWFQobGlnaHRDdWJlbWFwLCBMLCBiaWFzKSwgOC4xMik7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBsaWdodENvbG9yICogZW52VGV4ZWwgKiBlbnZXZWlnaHQ7XFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLnBvaW50X2xpZ2h0XFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2hlYWRcXG5AaW1wb3J0IGNsYXkudXRpbC5jYWxjdWxhdGVfYXR0ZW51YXRpb25cXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfZXF1YXRpb25cXG51bmlmb3JtIHZlYzMgbGlnaHRQb3NpdGlvbjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIGZsb2F0IGxpZ2h0UmFuZ2U7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlckN1YmUgbGlnaHRTaGFkb3dNYXA7XFxudW5pZm9ybSBmbG9hdCBsaWdodFNoYWRvd01hcFNpemU7XFxuI2VuZGlmXFxudmFyeWluZyB2ZWMzIHZfUG9zaXRpb247XFxuQGltcG9ydCBjbGF5LnBsdWdpbi5zaGFkb3dfbWFwX2NvbW1vblxcbnZvaWQgbWFpbigpXFxue1xcbiBAaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuIHZlYzMgTCA9IGxpZ2h0UG9zaXRpb24gLSBwb3NpdGlvbjtcXG4gdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvc2l0aW9uIC0gcG9zaXRpb24pO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiBMIC89IGRpc3Q7XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kbCA9IGNsYW1wKGRvdChOLCBMKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IGF0dGVudWF0aW9uID0gbGlnaHRBdHRlbnVhdGlvbihkaXN0LCBsaWdodFJhbmdlKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGF0dGVudWF0aW9uICogbGlnaHRFcXVhdGlvbihcXG4gbGlnaHRDb2xvciwgZGlmZnVzZUNvbG9yLCBzcGVjdWxhckNvbG9yLCBuZGwsIG5kaCwgbmR2LCBnbG9zc2luZXNzXFxuICk7XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYk9tbmkoXFxuIGxpZ2h0U2hhZG93TWFwLCAtTCAqIGRpc3QsIGxpZ2h0UmFuZ2VcXG4gKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiAqPSBjbGFtcChzaGFkb3dDb250cmliLCAwLjAsIDEuMCk7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLnNwaGVyZV9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSBmbG9hdCBsaWdodFJhbmdlO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRSYWRpdXM7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMyB2X1Bvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiBAaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuIHZlYzMgTCA9IGxpZ2h0UG9zaXRpb24gLSBwb3NpdGlvbjtcXG4gdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvc2l0aW9uIC0gcG9zaXRpb24pO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiB2ZWMzIFIgPSByZWZsZWN0KFYsIE4pO1xcbiBmbG9hdCB0bXAgPSBkb3QoTCwgUik7XFxuIHZlYzMgY1RvUiA9IHRtcCAqIFIgLSBMO1xcbiBmbG9hdCBkID0gbGVuZ3RoKGNUb1IpO1xcbiBMID0gTCArIGNUb1IgKiBjbGFtcChsaWdodFJhZGl1cyAvIGQsIDAuMCwgMS4wKTtcXG4gTCA9IG5vcm1hbGl6ZShMKTtcXG4gdmVjMyBIID0gbm9ybWFsaXplKEwgKyBWKTtcXG4gZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIGxpZ2h0UmFuZ2UpO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRDb2xvciAqIG5kbCAqIGF0dGVudWF0aW9uO1xcbiBnbG9zc2luZXNzID0gY2xhbXAoZ2xvc3NpbmVzcyAtIGxpZ2h0UmFkaXVzIC8gMi4wIC8gZGlzdCwgMC4wLCAxLjApO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gYXR0ZW51YXRpb24gKiBsaWdodEVxdWF0aW9uKFxcbiBsaWdodENvbG9yLCBkaWZmdXNlQ29sb3IsIHNwZWN1bGFyQ29sb3IsIG5kbCwgbmRoLCBuZHYsIGdsb3NzaW5lc3NcXG4gKTtcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQudHViZV9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSBmbG9hdCBsaWdodFJhbmdlO1xcbnVuaWZvcm0gdmVjMyBsaWdodEV4dGVuZDtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZfUG9zaXRpb247XFxudm9pZCBtYWluKClcXG57XFxuIEBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5nYnVmZmVyX3JlYWRcXG4gdmVjMyBMID0gbGlnaHRQb3NpdGlvbiAtIHBvc2l0aW9uO1xcbiB2ZWMzIFYgPSBub3JtYWxpemUoZXllUG9zaXRpb24gLSBwb3NpdGlvbik7XFxuIHZlYzMgUiA9IHJlZmxlY3QoViwgTik7XFxuIHZlYzMgTDAgPSBsaWdodFBvc2l0aW9uIC0gbGlnaHRFeHRlbmQgLSBwb3NpdGlvbjtcXG4gdmVjMyBMMSA9IGxpZ2h0UG9zaXRpb24gKyBsaWdodEV4dGVuZCAtIHBvc2l0aW9uO1xcbiB2ZWMzIExEID0gTDEgLSBMMDtcXG4gZmxvYXQgbGVuMCA9IGxlbmd0aChMMCk7XFxuIGZsb2F0IGxlbjEgPSBsZW5ndGgoTDEpO1xcbiBmbG9hdCBpcnJhID0gMi4wICogY2xhbXAoZG90KE4sIEwwKSAvICgyLjAgKiBsZW4wKSArIGRvdChOLCBMMSkgLyAoMi4wICogbGVuMSksIDAuMCwgMS4wKTtcXG4gZmxvYXQgTEREb3RSID0gZG90KFIsIExEKTtcXG4gZmxvYXQgdCA9IChMRERvdFIgKiBkb3QoUiwgTDApIC0gZG90KEwwLCBMRCkpIC8gKGRvdChMRCwgTEQpIC0gTEREb3RSICogTEREb3RSKTtcXG4gdCA9IGNsYW1wKHQsIDAuMCwgMS4wKTtcXG4gTCA9IEwwICsgdCAqIExEO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiBMIC89IGRpc3Q7XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gZ2xvc3NpbmVzcyA9IGNsYW1wKGdsb3NzaW5lc3MgLSAwLjAgLyAyLjAgLyBkaXN0LCAwLjAsIDEuMCk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBsaWdodENvbG9yICogaXJyYSAqIGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgbGlnaHRSYW5nZSlcXG4gKiAoZGlmZnVzZUNvbG9yICsgRF9QaG9uZyhnbG9zc2luZXNzLCBuZGgpICogRl9TY2hsaWNrKG5kdiwgc3BlY3VsYXJDb2xvcikpO1xcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xyXG4iLCIvLyBMaWdodC1wcmUgcGFzcyBkZWZlcnJlZCByZW5kZXJpbmdcclxuLy8gaHR0cDovL3d3dy5yZWFsdGltZXJlbmRlcmluZy5jb20vYmxvZy9kZWZlcnJlZC1saWdodGluZy1hcHByb2FjaGVzL1xyXG5pbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcbmltcG9ydCBGdWxsUXVhZFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XHJcbmltcG9ydCBTcGhlcmVHZW8gZnJvbSAnLi4vZ2VvbWV0cnkvU3BoZXJlJztcclxuaW1wb3J0IENvbmVHZW8gZnJvbSAnLi4vZ2VvbWV0cnkvQ29uZSc7XHJcbmltcG9ydCBDeWxpbmRlckdlbyBmcm9tICcuLi9nZW9tZXRyeS9DeWxpbmRlcic7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4uL21hdGgvTWF0cml4NCc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBHQnVmZmVyIGZyb20gJy4vR0J1ZmZlcic7XHJcblxyXG5pbXBvcnQgcHJlekdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9wcmV6Lmdsc2wuanMnO1xyXG5pbXBvcnQgdXRpbEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS91dGlsLmdsc2wuanMnO1xyXG5cclxuaW1wb3J0IGxpZ2h0dm9sdW1lR2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL2xpZ2h0dm9sdW1lLmdsc2wuanMnO1xyXG4vLyBMaWdodCBzaGFkZXJzXHJcbmltcG9ydCBzcG90R2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL3Nwb3QuZ2xzbC5qcyc7XHJcbmltcG9ydCBkaXJlY3Rpb25hbEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9kaXJlY3Rpb25hbC5nbHNsLmpzJztcclxuaW1wb3J0IGFtYmllbnRHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudC5nbHNsLmpzJztcclxuaW1wb3J0IGFtYmllbnRzaEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9hbWJpZW50c2guZ2xzbC5qcyc7XHJcbmltcG9ydCBhbWJpZW50Y3ViZW1hcEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9hbWJpZW50Y3ViZW1hcC5nbHNsLmpzJztcclxuaW1wb3J0IHBvaW50R2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL3BvaW50Lmdsc2wuanMnO1xyXG5pbXBvcnQgc3BoZXJlR2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL3NwaGVyZS5nbHNsLmpzJztcclxuaW1wb3J0IHR1YmVHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvdHViZS5nbHNsLmpzJztcclxuXHJcblNoYWRlci5pbXBvcnQocHJlekdsc2wpO1xyXG5TaGFkZXIuaW1wb3J0KHV0aWxHbHNsKTtcclxuU2hhZGVyLmltcG9ydChsaWdodHZvbHVtZUdsc2wpO1xyXG5cclxuLy8gTGlnaHQgc2hhZGVyc1xyXG5TaGFkZXIuaW1wb3J0KHNwb3RHbHNsKTtcclxuU2hhZGVyLmltcG9ydChkaXJlY3Rpb25hbEdsc2wpO1xyXG5TaGFkZXIuaW1wb3J0KGFtYmllbnRHbHNsKTtcclxuU2hhZGVyLmltcG9ydChhbWJpZW50c2hHbHNsKTtcclxuU2hhZGVyLmltcG9ydChhbWJpZW50Y3ViZW1hcEdsc2wpO1xyXG5TaGFkZXIuaW1wb3J0KHBvaW50R2xzbCk7XHJcblNoYWRlci5pbXBvcnQoc3BoZXJlR2xzbCk7XHJcblNoYWRlci5pbXBvcnQodHViZUdsc2wpO1xyXG5cclxuU2hhZGVyLmltcG9ydChwcmV6R2xzbCk7XHJcblxyXG4vKipcclxuICogRGVmZXJyZWQgcmVuZGVyZXJcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmRlZmVycmVkLlJlbmRlcmVyXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgRGVmZXJyZWRSZW5kZXJlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgZnVsbFF1YWRWZXJ0ZXggPSBTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IudmVydGV4Jyk7XHJcbiAgICB2YXIgbGlnaHRWb2x1bWVWZXJ0ZXggPSBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmxpZ2h0X3ZvbHVtZS52ZXJ0ZXgnKTtcclxuXHJcbiAgICB2YXIgZGlyZWN0aW9uYWxMaWdodFNoYWRlciA9IG5ldyBTaGFkZXIoZnVsbFF1YWRWZXJ0ZXgsIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZGlyZWN0aW9uYWxfbGlnaHQnKSk7XHJcblxyXG4gICAgdmFyIGxpZ2h0QWNjdW11bGF0ZUJsZW5kRnVuYyA9IGZ1bmN0aW9uIChnbCkge1xyXG4gICAgICAgIGdsLmJsZW5kRXF1YXRpb24oZ2wuRlVOQ19BREQpO1xyXG4gICAgICAgIGdsLmJsZW5kRnVuY1NlcGFyYXRlKGdsLk9ORSwgZ2wuT05FLCBnbC5PTkUsIGdsLk9ORSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBjcmVhdGVMaWdodFBhc3NNYXQgPSBmdW5jdGlvbiAoc2hhZGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogc2hhZGVyLFxyXG4gICAgICAgICAgICBibGVuZDogbGlnaHRBY2N1bXVsYXRlQmxlbmRGdW5jLFxyXG4gICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgICAgICAgZGVwdGhNYXNrOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgY3JlYXRlVm9sdW1lU2hhZGVyID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFNoYWRlcihsaWdodFZvbHVtZVZlcnRleCwgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC4nICsgbmFtZSkpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBSb3RhdGUgYW5kIHBvc2l0aW9uaW5nIHRvIGZpdCB0aGUgc3BvdCBsaWdodFxyXG4gICAgLy8gV2hpY2ggdGhlIGN1c3Agb2YgY29uZSBwb2ludGluZyB0byB0aGUgcG9zaXRpdmUgelxyXG4gICAgLy8gYW5kIHBvc2l0aW9uZWQgb24gdGhlIG9yaWdpblxyXG4gICAgdmFyIGNvbmVHZW8gPSBuZXcgQ29uZUdlbyh7XHJcbiAgICAgICAgY2FwU2VnbWVudHM6IDEwXHJcbiAgICB9KTtcclxuICAgIHZhciBtYXQgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgbWF0LnJvdGF0ZVgoTWF0aC5QSSAvIDIpXHJcbiAgICAgICAgLnRyYW5zbGF0ZShuZXcgVmVjdG9yMygwLCAtMSwgMCkpO1xyXG5cclxuICAgIGNvbmVHZW8uYXBwbHlUcmFuc2Zvcm0obWF0KTtcclxuXHJcbiAgICB2YXIgY3lsaW5kZXJHZW8gPSBuZXcgQ3lsaW5kZXJHZW8oe1xyXG4gICAgICAgIGNhcFNlZ21lbnRzOiAxMFxyXG4gICAgfSk7XHJcbiAgICAvLyBBbGlnbiB3aXRoIHggYXhpc1xyXG4gICAgbWF0LmlkZW50aXR5KCkucm90YXRlWihNYXRoLlBJIC8gMik7XHJcbiAgICBjeWxpbmRlckdlby5hcHBseVRyYW5zZm9ybShtYXQpO1xyXG5cclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuZGVmZXJyZWQuUmVuZGVyZXIjICovIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUHJvdmlkZSBTaGFkb3dNYXBQYXNzIGZvciBzaGFkb3cgcmVuZGVyaW5nLlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LnByZVBhc3MuU2hhZG93TWFwfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNoYWRvd01hcFBhc3M6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIGF1dG8gcmVzaXppbmcgZnJvbSBnaXZlbiBkZWZ1YWx0IHJlbmRlcmVyIHNpemUuXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXV0b1Jlc2l6ZTogdHJ1ZSxcclxuXHJcbiAgICAgICAgX2NyZWF0ZUxpZ2h0UGFzc01hdDogY3JlYXRlTGlnaHRQYXNzTWF0LFxyXG5cclxuICAgICAgICBfZ0J1ZmZlcjogbmV3IEdCdWZmZXIoKSxcclxuXHJcbiAgICAgICAgX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlcjogbmV3IEZyYW1lQnVmZmVyKCksXHJcblxyXG4gICAgICAgIF9saWdodEFjY3VtVGV4OiBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgLy8gRklYTUUgRGV2aWNlIG5vdCBzdXBwb3J0IGZsb2F0IHRleHR1cmVcclxuICAgICAgICAgICAgdHlwZTogVGV4dHVyZS5IQUxGX0ZMT0FULFxyXG4gICAgICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1RcclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgX2Z1bGxRdWFkUGFzczogbmV3IEZ1bGxRdWFkUGFzcyh7XHJcbiAgICAgICAgICAgIGJsZW5kV2l0aFByZXZpb3VzOiB0cnVlXHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIF9kaXJlY3Rpb25hbExpZ2h0TWF0OiBjcmVhdGVMaWdodFBhc3NNYXQoZGlyZWN0aW9uYWxMaWdodFNoYWRlciksXHJcblxyXG4gICAgICAgIF9hbWJpZW50TWF0OiBjcmVhdGVMaWdodFBhc3NNYXQobmV3IFNoYWRlcihcclxuICAgICAgICAgICAgZnVsbFF1YWRWZXJ0ZXgsIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuYW1iaWVudF9saWdodCcpXHJcbiAgICAgICAgKSksXHJcbiAgICAgICAgX2FtYmllbnRTSE1hdDogY3JlYXRlTGlnaHRQYXNzTWF0KG5ldyBTaGFkZXIoXHJcbiAgICAgICAgICAgIGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmFtYmllbnRfc2hfbGlnaHQnKVxyXG4gICAgICAgICkpLFxyXG4gICAgICAgIF9hbWJpZW50Q3ViZW1hcE1hdDogY3JlYXRlTGlnaHRQYXNzTWF0KG5ldyBTaGFkZXIoXHJcbiAgICAgICAgICAgIGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmFtYmllbnRfY3ViZW1hcF9saWdodCcpXHJcbiAgICAgICAgKSksXHJcblxyXG4gICAgICAgIF9zcG90TGlnaHRTaGFkZXI6IGNyZWF0ZVZvbHVtZVNoYWRlcignc3BvdF9saWdodCcpLFxyXG4gICAgICAgIF9wb2ludExpZ2h0U2hhZGVyOiBjcmVhdGVWb2x1bWVTaGFkZXIoJ3BvaW50X2xpZ2h0JyksXHJcblxyXG4gICAgICAgIF9zcGhlcmVMaWdodFNoYWRlcjogY3JlYXRlVm9sdW1lU2hhZGVyKCdzcGhlcmVfbGlnaHQnKSxcclxuICAgICAgICBfdHViZUxpZ2h0U2hhZGVyOiBjcmVhdGVWb2x1bWVTaGFkZXIoJ3R1YmVfbGlnaHQnKSxcclxuXHJcbiAgICAgICAgX2xpZ2h0U3BoZXJlR2VvOiBuZXcgU3BoZXJlR2VvKHtcclxuICAgICAgICAgICAgd2lkdGhTZWdtZW50czogMTAsXHJcbiAgICAgICAgICAgIGhlaWdodFNlZ2VtZW50czogMTBcclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgX2xpZ2h0Q29uZUdlbzogY29uZUdlbyxcclxuXHJcbiAgICAgICAgX2xpZ2h0Q3lsaW5kZXJHZW86IGN5bGluZGVyR2VvLFxyXG5cclxuICAgICAgICBfb3V0cHV0UGFzczogbmV3IEZ1bGxRdWFkUGFzcyh7XHJcbiAgICAgICAgICAgIGZyYWdtZW50OiBTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3Iub3V0cHV0JylcclxuICAgICAgICB9KVxyXG4gICAgfTtcclxufSwgLyoqIEBsZW5kcyBjbGF5LmRlZmVycmVkLlJlbmRlcmVyIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIERvIHJlbmRlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LlNjZW5lfSBzY2VuZVxyXG4gICAgICogQHBhcmFtIHtjbGF5LkNhbWVyYX0gY2FtZXJhXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnJlbmRlclRvVGFyZ2V0ID0gZmFsc2VdIElmIG5vdCBvdXB1dCBhbmQgcmVuZGVyIHRvIHRoZSB0YXJnZXQgdGV4dHVyZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5ub3RVcGRhdGVTaGFkb3cgPSB0cnVlXSBJZiBub3QgdXBkYXRlIHRoZSBzaGFkb3cuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLm5vdFVwZGF0ZVNjZW5lID0gdHJ1ZV0gSWYgbm90IHVwZGF0ZSB0aGUgc2NlbmUuXHJcbiAgICAgKi9cclxuICAgIHJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBvcHRzKSB7XHJcblxyXG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG4gICAgICAgIG9wdHMucmVuZGVyVG9UYXJnZXQgPSBvcHRzLnJlbmRlclRvVGFyZ2V0IHx8IGZhbHNlO1xyXG4gICAgICAgIG9wdHMubm90VXBkYXRlU2hhZG93ID0gb3B0cy5ub3RVcGRhdGVTaGFkb3cgfHwgZmFsc2U7XHJcbiAgICAgICAgb3B0cy5ub3RVcGRhdGVTY2VuZSA9IG9wdHMubm90VXBkYXRlU2NlbmUgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICghb3B0cy5ub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgICAgICBzY2VuZS51cGRhdGUoZmFsc2UsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY2VuZS51cGRhdGVMaWdodHMoKTtcclxuICAgICAgICAvLyBSZW5kZXIgbGlzdCB3aWxsIGJlIHVwZGF0ZWQgaW4gZ2J1ZmZlci5cclxuXHJcbiAgICAgICAgY2FtZXJhLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgICAgLy8gUEVORElORyBGb3Igc3RlcmVvIHJlbmRlcmluZ1xyXG4gICAgICAgIHZhciBkcHIgPSByZW5kZXJlci5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZVxyXG4gICAgICAgICAgICAmJiAocmVuZGVyZXIuZ2V0V2lkdGgoKSAqIGRwciAhPT0gdGhpcy5fbGlnaHRBY2N1bVRleC53aWR0aFxyXG4gICAgICAgICAgICB8fCByZW5kZXJlci5nZXRIZWlnaHQoKSAqIGRwciAhPT0gdGhpcy5fbGlnaHRBY2N1bVRleC5oZWlnaHQpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzaXplKHJlbmRlcmVyLmdldFdpZHRoKCkgKiBkcHIsIHJlbmRlcmVyLmdldEhlaWdodCgpICogZHByKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2dCdWZmZXIudXBkYXRlKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKTtcclxuXHJcbiAgICAgICAgLy8gQWNjdW11bGF0ZSBsaWdodCBidWZmZXJcclxuICAgICAgICB0aGlzLl9hY2N1bXVsYXRlTGlnaHRCdWZmZXIocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsICFvcHRzLm5vdFVwZGF0ZVNoYWRvdyk7XHJcblxyXG4gICAgICAgIGlmICghb3B0cy5yZW5kZXJUb1RhcmdldCkge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRQYXNzLnNldFVuaWZvcm0oJ3RleHR1cmUnLCB0aGlzLl9saWdodEFjY3VtVGV4KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dFBhc3MucmVuZGVyKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5fZ0J1ZmZlci5yZW5kZXJEZWJ1ZyhyZW5kZXJlciwgY2FtZXJhLCAnbm9ybWFsJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICovXHJcbiAgICBnZXRUYXJnZXRUZXh0dXJlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0QWNjdW1UZXg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybiB7Y2xheS5GcmFtZUJ1ZmZlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0VGFyZ2V0RnJhbWVCdWZmZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGlnaHRBY2N1bUZyYW1lQnVmZmVyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuZGVmZXJyZWQuR0J1ZmZlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0R0J1ZmZlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nQnVmZmVyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBUT0RPIGlzIGRwciBuZWVkZWQ/XHJcbiAgICBzZXRWaWV3cG9ydDogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIGRwcikge1xyXG4gICAgICAgIHRoaXMuX2dCdWZmZXIuc2V0Vmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZHByKTtcclxuICAgICAgICB0aGlzLl9saWdodEFjY3VtRnJhbWVCdWZmZXIudmlld3BvcnQgPSB0aGlzLl9nQnVmZmVyLmdldFZpZXdwb3J0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIGdldEZ1bGxRdWFkTGlnaHRQYXNzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuX2Z1bGxRdWFkUGFzcztcclxuICAgIC8vIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcmVuZGVyZXIgc2l6ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxyXG4gICAgICovXHJcbiAgICByZXNpemU6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICAgICAgdGhpcy5fbGlnaHRBY2N1bVRleC53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0QWNjdW1UZXguaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICAvLyBQRU5ESU5HIHZpZXdwb3J0ID9cclxuICAgICAgICB0aGlzLl9nQnVmZmVyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuICAgIH0sXHJcblxyXG4gICAgX2FjY3VtdWxhdGVMaWdodEJ1ZmZlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCB1cGRhdGVTaGFkb3cpIHtcclxuICAgICAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgbGlnaHRBY2N1bVRleCA9IHRoaXMuX2xpZ2h0QWNjdW1UZXg7XHJcbiAgICAgICAgdmFyIGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlciA9IHRoaXMuX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlcjtcclxuXHJcbiAgICAgICAgdmFyIGV5ZVBvc2l0aW9uID0gY2FtZXJhLmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHZvbHVtZSBtZXNoZXNcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIXNjZW5lLmxpZ2h0c1tpXS5pbnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUxpZ2h0UHJveHkoc2NlbmUubGlnaHRzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNoYWRvd01hcFBhc3MgPSB0aGlzLnNoYWRvd01hcFBhc3M7XHJcbiAgICAgICAgaWYgKHNoYWRvd01hcFBhc3MgJiYgdXBkYXRlU2hhZG93KSB7XHJcbiAgICAgICAgICAgIGdsLmNsZWFyQ29sb3IoMSwgMSwgMSwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVMaWdodFNoYWRvdyhyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZWxpZ2h0YWNjdW11bGF0ZScsIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCB1cGRhdGVTaGFkb3cpO1xyXG5cclxuICAgICAgICBsaWdodEFjY3VtRnJhbWVCdWZmZXIuYXR0YWNoKGxpZ2h0QWNjdW1UZXgpO1xyXG4gICAgICAgIGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB2YXIgY2xlYXJDb2xvciA9IHJlbmRlcmVyLmNsZWFyQ29sb3I7XHJcblxyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlci52aWV3cG9ydDtcclxuICAgICAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgICAgICAgdmFyIGRwciA9IHZpZXdwb3J0LmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgICAgIC8vIHVzZSBzY2lzc29yIHRvIG1ha2Ugc3VyZSBvbmx5IGNsZWFyIHRoZSB2aWV3cG9ydFxyXG4gICAgICAgICAgICBnbC5lbmFibGUoZ2wuU0NJU1NPUl9URVNUKTtcclxuICAgICAgICAgICAgZ2wuc2Npc3Nvcih2aWV3cG9ydC54ICogZHByLCB2aWV3cG9ydC55ICogZHByLCB2aWV3cG9ydC53aWR0aCAqIGRwciwgdmlld3BvcnQuaGVpZ2h0ICogZHByKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ2wuY2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTtcclxuICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUKTtcclxuICAgICAgICBnbC5lbmFibGUoZ2wuQkxFTkQpO1xyXG4gICAgICAgIGlmICh2aWV3cG9ydCkge1xyXG4gICAgICAgICAgICBnbC5kaXNhYmxlKGdsLlNDSVNTT1JfVEVTVCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ3N0YXJ0bGlnaHRhY2N1bXVsYXRlJywgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpO1xyXG5cclxuICAgICAgICB2YXIgdmlld1Byb2plY3Rpb25JbnYgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIE1hdHJpeDQubXVsdGlwbHkodmlld1Byb2plY3Rpb25JbnYsIGNhbWVyYS53b3JsZFRyYW5zZm9ybSwgY2FtZXJhLmludlByb2plY3Rpb25NYXRyaXgpO1xyXG5cclxuICAgICAgICB2YXIgdm9sdW1lTWVzaExpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY2VuZS5saWdodHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGxpZ2h0ID0gc2NlbmUubGlnaHRzW2ldO1xyXG4gICAgICAgICAgICBpZiAobGlnaHQuaW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHVUcGwgPSBsaWdodC51bmlmb3JtVGVtcGxhdGVzO1xyXG5cclxuICAgICAgICAgICAgdmFyIHZvbHVtZU1lc2ggPSBsaWdodC52b2x1bWVNZXNoIHx8IGxpZ2h0Ll9fdm9sdW1lTWVzaDtcclxuXHJcbiAgICAgICAgICAgIGlmICh2b2x1bWVNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSB2b2x1bWVNZXNoLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgLy8gVm9sdW1lIG1lc2ggd2lsbCBhZmZlY3QgdGhlIHNjZW5lIGJvdW5kaW5nIGJveCB3aGVuIHJlbmRlcmluZ1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgY2FzdFNoYWRvdyBpcyB0cnVlXHJcbiAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLmNhc3RTaGFkb3cgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdW5rbm93bkxpZ2h0VHlwZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChsaWdodC50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnUE9JTlRfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvbG9yJywgdVRwbC5wb2ludExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYW5nZScsIHVUcGwucG9pbnRMaWdodFJhbmdlLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UG9zaXRpb24nLCB1VHBsLnBvaW50TGlnaHRQb3NpdGlvbi52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdTUE9UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRQb3NpdGlvbicsIHVUcGwuc3BvdExpZ2h0UG9zaXRpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuc3BvdExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYW5nZScsIHVUcGwuc3BvdExpZ2h0UmFuZ2UudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHREaXJlY3Rpb24nLCB1VHBsLnNwb3RMaWdodERpcmVjdGlvbi52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCd1bWJyYUFuZ2xlQ29zaW5lJywgdVRwbC5zcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ3BlbnVtYnJhQW5nbGVDb3NpbmUnLCB1VHBsLnNwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmUudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnZmFsbG9mZkZhY3RvcicsIHVUcGwuc3BvdExpZ2h0RmFsbG9mZkZhY3Rvci52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdTUEhFUkVfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvbG9yJywgdVRwbC5zcGhlcmVMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UmFuZ2UnLCB1VHBsLnNwaGVyZUxpZ2h0UmFuZ2UudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYWRpdXMnLCB1VHBsLnNwaGVyZUxpZ2h0UmFkaXVzLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UG9zaXRpb24nLCB1VHBsLnNwaGVyZUxpZ2h0UG9zaXRpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnVFVCRV9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLnR1YmVMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UmFuZ2UnLCB1VHBsLnR1YmVMaWdodFJhbmdlLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0RXh0ZW5kJywgdVRwbC50dWJlTGlnaHRFeHRlbmQudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRQb3NpdGlvbicsIHVUcGwudHViZUxpZ2h0UG9zaXRpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93bkxpZ2h0VHlwZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHVua25vd25MaWdodFR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdleWVQb3NpdGlvbicsIGV5ZVBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ3ZpZXdQcm9qZWN0aW9uSW52Jywgdmlld1Byb2plY3Rpb25JbnYuYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUxJywgdGhpcy5fZ0J1ZmZlci5nZXRUYXJnZXRUZXh0dXJlMSgpKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMicsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTIoKSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTMnLCB0aGlzLl9nQnVmZmVyLmdldFRhcmdldFRleHR1cmUzKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZvbHVtZU1lc2hMaXN0LnB1c2godm9sdW1lTWVzaCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhc3MgPSB0aGlzLl9mdWxsUXVhZFBhc3M7XHJcbiAgICAgICAgICAgICAgICB2YXIgdW5rbm93bkxpZ2h0VHlwZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gRnVsbCBxdWFkIGxpZ2h0XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGxpZ2h0LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdBTUJJRU5UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbCA9IHRoaXMuX2FtYmllbnRNYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuYW1iaWVudExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQU1CSUVOVF9TSF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwgPSB0aGlzLl9hbWJpZW50U0hNYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuYW1iaWVudFNITGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29lZmZpY2llbnRzJywgdVRwbC5hbWJpZW50U0hMaWdodENvZWZmaWNpZW50cy52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdBTUJJRU5UX0NVQkVNQVBfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsID0gdGhpcy5fYW1iaWVudEN1YmVtYXBNYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuYW1iaWVudEN1YmVtYXBMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDdWJlbWFwJywgdVRwbC5hbWJpZW50Q3ViZW1hcExpZ2h0Q3ViZW1hcC52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2JyZGZMb29rdXAnLCB1VHBsLmFtYmllbnRDdWJlbWFwTGlnaHRCUkRGTG9va3VwLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RJUkVDVElPTkFMX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc1NoYWRvdyA9IHNoYWRvd01hcFBhc3MgJiYgbGlnaHQuY2FzdFNoYWRvdztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbCA9IHRoaXMuX2RpcmVjdGlvbmFsTGlnaHRNYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWxbaGFzU2hhZG93ID8gJ2RlZmluZScgOiAndW5kZWZpbmUnXSgnZnJhZ21lbnQnLCAnU0hBRE9XTUFQX0VOQUJMRUQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NoYWRvdykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NIQURPV19DQVNDQURFJywgbGlnaHQuc2hhZG93Q2FzY2FkZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvbG9yJywgdVRwbC5kaXJlY3Rpb25hbExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodERpcmVjdGlvbicsIHVUcGwuZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbi52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmtvbncgbGlnaHQgdHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duTGlnaHRUeXBlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh1bmtub3duTGlnaHRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHBhc3NNYXRlcmlhbCA9IHBhc3MubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnZXllUG9zaXRpb24nLCBleWVQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgndmlld1Byb2plY3Rpb25JbnYnLCB2aWV3UHJvamVjdGlvbkludi5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUxJywgdGhpcy5fZ0J1ZmZlci5nZXRUYXJnZXRUZXh0dXJlMSgpKTtcclxuICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTInLCB0aGlzLl9nQnVmZmVyLmdldFRhcmdldFRleHR1cmUyKCkpO1xyXG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMycsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTMoKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRvd01hcFBhc3MgJiYgbGlnaHQuY2FzdFNoYWRvdykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcCcsIGxpZ2h0Ll9fc2hhZG93TWFwKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRNYXRyaWNlcycsIGxpZ2h0Ll9fbGlnaHRNYXRyaWNlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ3NoYWRvd0Nhc2NhZGVDbGlwc05lYXInLCBsaWdodC5fX2Nhc2NhZGVDbGlwc05lYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdzaGFkb3dDYXNjYWRlQ2xpcHNGYXInLCBsaWdodC5fX2Nhc2NhZGVDbGlwc0Zhcik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcFNpemUnLCBsaWdodC5zaGFkb3dSZXNvbHV0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXNzLnJlbmRlclF1YWQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9yZW5kZXJWb2x1bWVNZXNoTGlzdChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdm9sdW1lTWVzaExpc3QpO1xyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2xpZ2h0YWNjdW11bGF0ZScsIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKTtcclxuXHJcbiAgICAgICAgbGlnaHRBY2N1bUZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJsaWdodGFjY3VtdWxhdGUnLCByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBfcHJlcGFyZUxpZ2h0U2hhZG93OiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB3b3JsZFZpZXcgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpIHtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGlnaHQgPSBzY2VuZS5saWdodHNbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgdm9sdW1lTWVzaCA9IGxpZ2h0LnZvbHVtZU1lc2ggfHwgbGlnaHQuX192b2x1bWVNZXNoO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFsaWdodC5jYXN0U2hhZG93IHx8IGxpZ2h0LmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCAobGlnaHQudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BPSU5UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdTUE9UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRnJ1c3R1bSBjdWxsaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdHJpeDQubXVsdGlwbHkod29ybGRWaWV3LCBjYW1lcmEudmlld01hdHJpeCwgdm9sdW1lTWVzaC53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2VuZS5pc0ZydXN0dW1DdWxsZWQodm9sdW1lTWVzaCwgY2FtZXJhLCB3b3JsZFZpZXcuYXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVNpbmdsZUxpZ2h0U2hhZG93KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIGxpZ2h0LCB2b2x1bWVNZXNoLm1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RJUkVDVElPTkFMX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVNpbmdsZUxpZ2h0U2hhZG93KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIGxpZ2h0LCBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICBfcHJlcGFyZVNpbmdsZUxpZ2h0U2hhZG93OiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIGxpZ2h0LCBtYXRlcmlhbCkge1xyXG4gICAgICAgIHN3aXRjaCAobGlnaHQudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdQT0lOVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93TWFwcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFkb3dNYXBQYXNzLnJlbmRlclBvaW50TGlnaHRTaGFkb3coXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBsaWdodCwgc2hhZG93TWFwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0U2hhZG93TWFwJywgc2hhZG93TWFwc1swXSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcFNpemUnLCBsaWdodC5zaGFkb3dSZXNvbHV0aW9uKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdTUE9UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgIHZhciBzaGFkb3dNYXBzID0gW107XHJcbiAgICAgICAgICAgICAgICB2YXIgbGlnaHRNYXRyaWNlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFkb3dNYXBQYXNzLnJlbmRlclNwb3RMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlciwgc2NlbmUsIGxpZ2h0LCBsaWdodE1hdHJpY2VzLCBzaGFkb3dNYXBzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXAnLCBzaGFkb3dNYXBzWzBdKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0TWF0cml4JywgbGlnaHRNYXRyaWNlc1swXSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcFNpemUnLCBsaWdodC5zaGFkb3dSZXNvbHV0aW9uKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdESVJFQ1RJT05BTF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93TWFwcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpZ2h0TWF0cmljZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciBjYXNjYWRlQ2xpcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhZG93TWFwUGFzcy5yZW5kZXJEaXJlY3Rpb25hbExpZ2h0U2hhZG93KFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBsaWdodCwgY2FzY2FkZUNsaXBzLCBsaWdodE1hdHJpY2VzLCBzaGFkb3dNYXBzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNhc2NhZGVDbGlwc05lYXIgPSBjYXNjYWRlQ2xpcHMuc2xpY2UoKTtcclxuICAgICAgICAgICAgICAgIHZhciBjYXNjYWRlQ2xpcHNGYXIgPSBjYXNjYWRlQ2xpcHMuc2xpY2UoKTtcclxuICAgICAgICAgICAgICAgIGNhc2NhZGVDbGlwc05lYXIucG9wKCk7XHJcbiAgICAgICAgICAgICAgICBjYXNjYWRlQ2xpcHNGYXIuc2hpZnQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBJdGVyYXRlIGZyb20gZmFyIHRvIG5lYXJcclxuICAgICAgICAgICAgICAgIGNhc2NhZGVDbGlwc05lYXIucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgY2FzY2FkZUNsaXBzRmFyLnJldmVyc2UoKTtcclxuICAgICAgICAgICAgICAgIGxpZ2h0TWF0cmljZXMucmV2ZXJzZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxpZ2h0Ll9fY2FzY2FkZUNsaXBzTmVhciA9IGNhc2NhZGVDbGlwc05lYXI7XHJcbiAgICAgICAgICAgICAgICBsaWdodC5fX2Nhc2NhZGVDbGlwc0ZhciA9IGNhc2NhZGVDbGlwc0ZhcjtcclxuICAgICAgICAgICAgICAgIGxpZ2h0Ll9fc2hhZG93TWFwID0gc2hhZG93TWFwc1swXTtcclxuICAgICAgICAgICAgICAgIGxpZ2h0Ll9fbGlnaHRNYXRyaWNlcyA9IGxpZ2h0TWF0cmljZXM7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFVwZGF0ZSBsaWdodCB2b2x1bWUgbWVzaFxyXG4gICAgLy8gTGlnaHQgdm9sdW1lIG1lc2ggaXMgcmVuZGVyZWQgaW4gbGlnaHQgYWNjdW11bGF0ZSBwYXNzIGluc3RlYWQgb2YgZnVsbCBxdWFkLlxyXG4gICAgLy8gSXQgd2lsbCByZWR1Y2UgcGl4ZWxzIHNpZ25pZmljYW50bHkgd2hlbiBsb2NhbCBsaWdodCBpcyByZWxhdGl2ZWx5IHNtYWxsLlxyXG4gICAgLy8gQW5kIHdlIGNhbiB1c2UgY3VzdG9tIHZvbHVtZSBtZXNoIHRvIHNoYXBlIHRoZSBsaWdodC5cclxuICAgIC8vXHJcbiAgICAvLyBTZWUgXCJEZWZlcnJlZCBTaGFkaW5nIE9wdGltaXphdGlvbnNcIiBpbiBHREMyMDExXHJcbiAgICBfdXBkYXRlTGlnaHRQcm94eTogZnVuY3Rpb24gKGxpZ2h0KSB7XHJcbiAgICAgICAgdmFyIHZvbHVtZU1lc2g7XHJcbiAgICAgICAgaWYgKGxpZ2h0LnZvbHVtZU1lc2gpIHtcclxuICAgICAgICAgICAgdm9sdW1lTWVzaCA9IGxpZ2h0LnZvbHVtZU1lc2g7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGxpZ2h0LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIE9ubHkgbG9jYWwgbGlnaHQgKHBvaW50IGFuZCBzcG90KSBuZWVkcyB2b2x1bWUgbWVzaC5cclxuICAgICAgICAgICAgICAgIC8vIERpcmVjdGlvbmFsIGFuZCBhbWJpZW50IGxpZ2h0IHJlbmRlcnMgaW4gZnVsbCBxdWFkXHJcbiAgICAgICAgICAgICAgICBjYXNlICdQT0lOVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdTUEhFUkVfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzaGFkZXIgPSBsaWdodC50eXBlID09PSAnU1BIRVJFX0xJR0hUJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX3NwaGVyZUxpZ2h0U2hhZGVyIDogdGhpcy5fcG9pbnRMaWdodFNoYWRlcjtcclxuICAgICAgICAgICAgICAgICAgICAvLyBWb2x1bWUgbWVzaCBjcmVhdGVkIGF1dG9tYXRpY2FsbHlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWxpZ2h0Ll9fdm9sdW1lTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaWdodC5fX3ZvbHVtZU1lc2ggPSBuZXcgTWVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbDogdGhpcy5fY3JlYXRlTGlnaHRQYXNzTWF0KHNoYWRlciksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogdGhpcy5fbGlnaHRTcGhlcmVHZW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEaXNhYmxlIGN1bGxpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGxpZ2h0IHZvbHVtZSBtZXNoIGludGVyc2VjdCBjYW1lcmEgbmVhciBwbGFuZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCBtZXNoIGluc2lkZSBjYW4gc3RpbGwgYmUgcmVuZGVyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1bGxpbmc6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByID0gbGlnaHQucmFuZ2UgKyAobGlnaHQucmFkaXVzIHx8IDApO1xyXG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2guc2NhbGUuc2V0KHIsIHIsIHIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnU1BPVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQuX192b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoIHx8IG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWw6IHRoaXMuX2NyZWF0ZUxpZ2h0UGFzc01hdCh0aGlzLl9zcG90TGlnaHRTaGFkZXIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogdGhpcy5fbGlnaHRDb25lR2VvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdWxsaW5nOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2ggPSBsaWdodC5fX3ZvbHVtZU1lc2g7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFzcGVjdCA9IE1hdGgudGFuKGxpZ2h0LnBlbnVtYnJhQW5nbGUgKiBNYXRoLlBJIC8gMTgwKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBsaWdodC5yYW5nZTtcclxuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLnNjYWxlLnNldChhc3BlY3QgKiByYW5nZSwgYXNwZWN0ICogcmFuZ2UsIHJhbmdlIC8gMik7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdUVUJFX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICBsaWdodC5fX3ZvbHVtZU1lc2ggPSBsaWdodC5fX3ZvbHVtZU1lc2ggfHwgbmV3IE1lc2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbDogdGhpcy5fY3JlYXRlTGlnaHRQYXNzTWF0KHRoaXMuX3R1YmVMaWdodFNoYWRlciksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5OiB0aGlzLl9saWdodEN5bGluZGVyR2VvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdWxsaW5nOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2ggPSBsaWdodC5fX3ZvbHVtZU1lc2g7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gbGlnaHQucmFuZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5zY2FsZS5zZXQobGlnaHQubGVuZ3RoIC8gMiArIHJhbmdlLCByYW5nZSwgcmFuZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2b2x1bWVNZXNoKSB7XHJcbiAgICAgICAgICAgIHZvbHVtZU1lc2gudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIC8vIEFwcGx5IGxpZ2h0IHRyYW5zZm9ybVxyXG4gICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHZvbHVtZU1lc2gud29ybGRUcmFuc2Zvcm0sIGxpZ2h0LndvcmxkVHJhbnNmb3JtLCB2b2x1bWVNZXNoLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgdmFyIGhhc1NoYWRvdyA9IHRoaXMuc2hhZG93TWFwUGFzcyAmJiBsaWdodC5jYXN0U2hhZG93O1xyXG4gICAgICAgICAgICB2b2x1bWVNZXNoLm1hdGVyaWFsW2hhc1NoYWRvdyA/ICdkZWZpbmUnIDogJ3VuZGVmaW5lJ10oJ2ZyYWdtZW50JywgJ1NIQURPV01BUF9FTkFCTEVEJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfcmVuZGVyVm9sdW1lTWVzaExpc3Q6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHdvcmxkVmlldyA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgdmFyIHByZVpNYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LnByZXoudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucHJlei5mcmFnbWVudCcpKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGZ1bmN0aW9uIGdldFByZVpNYXRlcmlhbCgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByZVpNYXRlcmlhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdm9sdW1lTWVzaExpc3QpIHtcclxuICAgICAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgICAgICBnbC5kZXB0aEZ1bmMoZ2wuTEVRVUFMKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm9sdW1lTWVzaExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB2b2x1bWVNZXNoID0gdm9sdW1lTWVzaExpc3RbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gRnJ1c3R1bSBjdWxsaW5nXHJcbiAgICAgICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHdvcmxkVmlldywgY2FtZXJhLnZpZXdNYXRyaXgsIHZvbHVtZU1lc2gud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNjZW5lLmlzRnJ1c3R1bUN1bGxlZCh2b2x1bWVNZXNoLCBjYW1lcmEsIHdvcmxkVmlldy5hcnJheSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBVc2UgcHJleiB0byBhdm9pZCBvbmUgcGl4ZWwgcmVuZGVyZWQgdHdpY2VcclxuICAgICAgICAgICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBnbC5kZXB0aE1hc2sodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBkZXB0aE1hc2sgbXVzdCBiZSBlbmFibGVkIGJlZm9yZSBjbGVhciBERVBUSF9CVUZGRVJcclxuICAgICAgICAgICAgICAgIGdsLmNsZWFyKGdsLkRFUFRIX0JVRkZFUl9CSVQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoW3ZvbHVtZU1lc2hdLCBjYW1lcmEsIHtcclxuICAgICAgICAgICAgICAgICAgICBnZXRNYXRlcmlhbDogZ2V0UHJlWk1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBSZW5kZXIgbGlnaHRcclxuICAgICAgICAgICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLm1hdGVyaWFsLmRlcHRoTWFzayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKFt2b2x1bWVNZXNoXSwgY2FtZXJhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZ2wuZGVwdGhGdW5jKGdsLkxFU1MpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGlnaHRBY2N1bUZyYW1lQnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0QWNjdW1UZXguZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2xpZ2h0Q29uZUdlby5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9saWdodEN5bGluZGVyR2VvLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0U3BoZXJlR2VvLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9mdWxsUXVhZFBhc3MuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fb3V0cHV0UGFzcy5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlyZWN0aW9uYWxMaWdodE1hdC5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5zaGFkb3dNYXBQYXNzLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IERlZmVycmVkUmVuZGVyZXI7XHJcbiIsIlxyXG5cclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgMngyIE1hdHJpeFxyXG4gKiBAbmFtZSBtYXQyXHJcbiAqL1xyXG5cclxudmFyIG1hdDIgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDJcclxuICpcclxuICogQHJldHVybnMge21hdDJ9IGEgbmV3IDJ4MiBtYXRyaXhcclxuICovXHJcbm1hdDIuY3JlYXRlID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoNCk7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDIgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gYSBuZXcgMngyIG1hdHJpeFxyXG4gKi9cclxubWF0Mi5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIG91dFszXSA9IGFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQyIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2V0IGEgbWF0MiB0byB0aGUgaWRlbnRpdHkgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcclxuICAgIG91dFswXSA9IDE7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zcG9zZSB0aGUgdmFsdWVzIG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cclxubWF0Mi50cmFuc3Bvc2UgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIC8vIElmIHdlIGFyZSB0cmFuc3Bvc2luZyBvdXJzZWx2ZXMgd2UgY2FuIHNraXAgYSBmZXcgc3RlcHMgYnV0IGhhdmUgdG8gY2FjaGUgc29tZSB2YWx1ZXNcclxuICAgIGlmIChvdXQgPT09IGEpIHtcclxuICAgICAgICB2YXIgYTEgPSBhWzFdO1xyXG4gICAgICAgIG91dFsxXSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzJdID0gYTE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG91dFswXSA9IGFbMF07XHJcbiAgICAgICAgb3V0WzFdID0gYVsyXTtcclxuICAgICAgICBvdXRbMl0gPSBhWzFdO1xyXG4gICAgICAgIG91dFszXSA9IGFbM107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnZlcnRzIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cclxubWF0Mi5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sXHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcclxuICAgICAgICBkZXQgPSBhMCAqIGEzIC0gYTIgKiBhMTtcclxuXHJcbiAgICBpZiAoIWRldCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuICAgIG91dFswXSA9ICBhMyAqIGRldDtcclxuICAgIG91dFsxXSA9IC1hMSAqIGRldDtcclxuICAgIG91dFsyXSA9IC1hMiAqIGRldDtcclxuICAgIG91dFszXSA9ICBhMCAqIGRldDtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGFkanVnYXRlIG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cclxubWF0Mi5hZGpvaW50ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICAvLyBDYWNoaW5nIHRoaXMgdmFsdWUgaXMgbmVzc2VjYXJ5IGlmIG91dCA9PSBhXHJcbiAgICB2YXIgYTAgPSBhWzBdO1xyXG4gICAgb3V0WzBdID0gIGFbM107XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIG91dFsyXSA9IC1hWzJdO1xyXG4gICAgb3V0WzNdID0gIGEwO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkZXRlcm1pbmFudCBvZiBhXHJcbiAqL1xyXG5tYXQyLmRldGVybWluYW50ID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybiBhWzBdICogYVszXSAtIGFbMl0gKiBhWzFdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xyXG5tYXQyLm11bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYikge1xyXG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXTtcclxuICAgIHZhciBiMCA9IGJbMF0sIGIxID0gYlsxXSwgYjIgPSBiWzJdLCBiMyA9IGJbM107XHJcbiAgICBvdXRbMF0gPSBhMCAqIGIwICsgYTIgKiBiMTtcclxuICAgIG91dFsxXSA9IGExICogYjAgKyBhMyAqIGIxO1xyXG4gICAgb3V0WzJdID0gYTAgKiBiMiArIGEyICogYjM7XHJcbiAgICBvdXRbM10gPSBhMSAqIGIyICsgYTMgKiBiMztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQyLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbm1hdDIubXVsID0gbWF0Mi5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0MiBieSB0aGUgZ2l2ZW4gYW5nbGVcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLFxyXG4gICAgICAgIHMgPSBNYXRoLnNpbihyYWQpLFxyXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpO1xyXG4gICAgb3V0WzBdID0gYTAgKiAgYyArIGEyICogcztcclxuICAgIG91dFsxXSA9IGExICogIGMgKyBhMyAqIHM7XHJcbiAgICBvdXRbMl0gPSBhMCAqIC1zICsgYTIgKiBjO1xyXG4gICAgb3V0WzNdID0gYTEgKiAtcyArIGEzICogYztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2NhbGVzIHRoZSBtYXQyIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgdGhlIHZlYzIgdG8gc2NhbGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqKi9cclxubWF0Mi5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXSxcclxuICAgICAgICB2MCA9IHZbMF0sIHYxID0gdlsxXTtcclxuICAgIG91dFswXSA9IGEwICogdjA7XHJcbiAgICBvdXRbMV0gPSBhMSAqIHYwO1xyXG4gICAgb3V0WzJdID0gYTIgKiB2MTtcclxuICAgIG91dFszXSA9IGEzICogdjE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cclxubWF0Mi5mcm9iID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybihNYXRoLnNxcnQoTWF0aC5wb3coYVswXSwgMikgKyBNYXRoLnBvdyhhWzFdLCAyKSArIE1hdGgucG93KGFbMl0sIDIpICsgTWF0aC5wb3coYVszXSwgMikpKVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgTCwgRCBhbmQgVSBtYXRyaWNlcyAoTG93ZXIgdHJpYW5ndWxhciwgRGlhZ29uYWwgYW5kIFVwcGVyIHRyaWFuZ3VsYXIpIGJ5IGZhY3Rvcml6aW5nIHRoZSBpbnB1dCBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBMIHRoZSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IEQgdGhlIGRpYWdvbmFsIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IFUgdGhlIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgaW5wdXQgbWF0cml4IHRvIGZhY3Rvcml6ZVxyXG4gKi9cclxuXHJcbm1hdDIuTERVID0gZnVuY3Rpb24gKEwsIEQsIFUsIGEpIHtcclxuICAgIExbMl0gPSBhWzJdL2FbMF07XHJcbiAgICBVWzBdID0gYVswXTtcclxuICAgIFVbMV0gPSBhWzFdO1xyXG4gICAgVVszXSA9IGFbM10gLSBMWzJdICogVVsxXTtcclxuICAgIHJldHVybiBbTCwgRCwgVV07XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbWF0MjsiLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgMngzIE1hdHJpeFxyXG4gKiBAbmFtZSBtYXQyZFxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogQSBtYXQyZCBjb250YWlucyBzaXggZWxlbWVudHMgZGVmaW5lZCBhczpcclxuICogPHByZT5cclxuICogW2EsIGMsIHR4LFxyXG4gKiAgYiwgZCwgdHldXHJcbiAqIDwvcHJlPlxyXG4gKiBUaGlzIGlzIGEgc2hvcnQgZm9ybSBmb3IgdGhlIDN4MyBtYXRyaXg6XHJcbiAqIDxwcmU+XHJcbiAqIFthLCBjLCB0eCxcclxuICogIGIsIGQsIHR5LFxyXG4gKiAgMCwgMCwgMV1cclxuICogPC9wcmU+XHJcbiAqIFRoZSBsYXN0IHJvdyBpcyBpZ25vcmVkIHNvIHRoZSBhcnJheSBpcyBzaG9ydGVyIGFuZCBvcGVyYXRpb25zIGFyZSBmYXN0ZXIuXHJcbiAqL1xyXG5cclxudmFyIG1hdDJkID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBtYXQyZFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IGEgbmV3IDJ4MyBtYXRyaXhcclxuICovXHJcbm1hdDJkLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDYpO1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMTtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSAwO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDJkIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgbWF0cml4IHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gYSBuZXcgMngzIG1hdHJpeFxyXG4gKi9cclxubWF0MmQuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoNik7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQyZCB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xyXG5tYXQyZC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBhIG1hdDJkIHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xyXG5tYXQyZC5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMTtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSAwO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnZlcnRzIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXHJcbm1hdDJkLmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmFyIGFhID0gYVswXSwgYWIgPSBhWzFdLCBhYyA9IGFbMl0sIGFkID0gYVszXSxcclxuICAgICAgICBhdHggPSBhWzRdLCBhdHkgPSBhWzVdO1xyXG5cclxuICAgIHZhciBkZXQgPSBhYSAqIGFkIC0gYWIgKiBhYztcclxuICAgIGlmKCFkZXQpe1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuICAgIG91dFswXSA9IGFkICogZGV0O1xyXG4gICAgb3V0WzFdID0gLWFiICogZGV0O1xyXG4gICAgb3V0WzJdID0gLWFjICogZGV0O1xyXG4gICAgb3V0WzNdID0gYWEgKiBkZXQ7XHJcbiAgICBvdXRbNF0gPSAoYWMgKiBhdHkgLSBhZCAqIGF0eCkgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoYWIgKiBhdHggLSBhYSAqIGF0eSkgKiBkZXQ7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkZXRlcm1pbmFudCBvZiBhXHJcbiAqL1xyXG5tYXQyZC5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4gYVswXSAqIGFbM10gLSBhWzFdICogYVsyXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQyZCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xyXG5tYXQyZC5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sIGE0ID0gYVs0XSwgYTUgPSBhWzVdLFxyXG4gICAgICAgIGIwID0gYlswXSwgYjEgPSBiWzFdLCBiMiA9IGJbMl0sIGIzID0gYlszXSwgYjQgPSBiWzRdLCBiNSA9IGJbNV07XHJcbiAgICBvdXRbMF0gPSBhMCAqIGIwICsgYTIgKiBiMTtcclxuICAgIG91dFsxXSA9IGExICogYjAgKyBhMyAqIGIxO1xyXG4gICAgb3V0WzJdID0gYTAgKiBiMiArIGEyICogYjM7XHJcbiAgICBvdXRbM10gPSBhMSAqIGIyICsgYTMgKiBiMztcclxuICAgIG91dFs0XSA9IGEwICogYjQgKyBhMiAqIGI1ICsgYTQ7XHJcbiAgICBvdXRbNV0gPSBhMSAqIGI0ICsgYTMgKiBiNSArIGE1O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDJkLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbm1hdDJkLm11bCA9IG1hdDJkLm11bHRpcGx5O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0MmQgYnkgdGhlIGdpdmVuIGFuZ2xlXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xyXG5tYXQyZC5yb3RhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sIGE0ID0gYVs0XSwgYTUgPSBhWzVdLFxyXG4gICAgICAgIHMgPSBNYXRoLnNpbihyYWQpLFxyXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpO1xyXG4gICAgb3V0WzBdID0gYTAgKiAgYyArIGEyICogcztcclxuICAgIG91dFsxXSA9IGExICogIGMgKyBhMyAqIHM7XHJcbiAgICBvdXRbMl0gPSBhMCAqIC1zICsgYTIgKiBjO1xyXG4gICAgb3V0WzNdID0gYTEgKiAtcyArIGEzICogYztcclxuICAgIG91dFs0XSA9IGE0O1xyXG4gICAgb3V0WzVdID0gYTU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MmQgYnkgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGdpdmVuIHZlYzJcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICoqL1xyXG5tYXQyZC5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXSwgYTQgPSBhWzRdLCBhNSA9IGFbNV0sXHJcbiAgICAgICAgdjAgPSB2WzBdLCB2MSA9IHZbMV07XHJcbiAgICBvdXRbMF0gPSBhMCAqIHYwO1xyXG4gICAgb3V0WzFdID0gYTEgKiB2MDtcclxuICAgIG91dFsyXSA9IGEyICogdjE7XHJcbiAgICBvdXRbM10gPSBhMyAqIHYxO1xyXG4gICAgb3V0WzRdID0gYTQ7XHJcbiAgICBvdXRbNV0gPSBhNTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNsYXRlcyB0aGUgbWF0MmQgYnkgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGdpdmVuIHZlYzJcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHRyYW5zbGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqKi9cclxubWF0MmQudHJhbnNsYXRlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLCBhNCA9IGFbNF0sIGE1ID0gYVs1XSxcclxuICAgICAgICB2MCA9IHZbMF0sIHYxID0gdlsxXTtcclxuICAgIG91dFswXSA9IGEwO1xyXG4gICAgb3V0WzFdID0gYTE7XHJcbiAgICBvdXRbMl0gPSBhMjtcclxuICAgIG91dFszXSA9IGEzO1xyXG4gICAgb3V0WzRdID0gYTAgKiB2MCArIGEyICogdjEgKyBhNDtcclxuICAgIG91dFs1XSA9IGExICogdjAgKyBhMyAqIHYxICsgYTU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQyZFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gY2FsY3VsYXRlIEZyb2Jlbml1cyBub3JtIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IEZyb2Jlbml1cyBub3JtXHJcbiAqL1xyXG5tYXQyZC5mcm9iID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybihNYXRoLnNxcnQoTWF0aC5wb3coYVswXSwgMikgKyBNYXRoLnBvdyhhWzFdLCAyKSArIE1hdGgucG93KGFbMl0sIDIpICsgTWF0aC5wb3coYVszXSwgMikgKyBNYXRoLnBvdyhhWzRdLCAyKSArIE1hdGgucG93KGFbNV0sIDIpICsgMSkpXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbWF0MmQ7IiwiLyoqXHJcbiAqIEBmaWxlb3ZlcnZpZXcgZ2wtbWF0cml4IC0gSGlnaCBwZXJmb3JtYW5jZSBtYXRyaXggYW5kIHZlY3RvciBvcGVyYXRpb25zXHJcbiAqIEBhdXRob3IgQnJhbmRvbiBKb25lc1xyXG4gKiBAYXV0aG9yIENvbGluIE1hY0tlbnppZSBJVlxyXG4gKiBAdmVyc2lvbiAyLjIuMlxyXG4gKi9cclxuXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB2ZWMyIGZyb20gJy4vdmVjMic7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vdmVjMyc7XHJcbmltcG9ydCB2ZWM0IGZyb20gJy4vdmVjNCc7XHJcbmltcG9ydCBtYXQyIGZyb20gJy4vbWF0Mic7XHJcbmltcG9ydCBtYXQyZCBmcm9tICcuL21hdDJkJztcclxuaW1wb3J0IG1hdDMgZnJvbSAnLi9tYXQzJztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9tYXQ0JztcclxuaW1wb3J0IHF1YXQgZnJvbSAnLi9xdWF0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIHZlYzI6IHZlYzIsXHJcbiAgICB2ZWMzOiB2ZWMzLFxyXG4gICAgdmVjNDogdmVjNCxcclxuICAgIG1hdDI6IG1hdDIsXHJcbiAgICBtYXQyZDogbWF0MmQsXHJcbiAgICBtYXQzOiBtYXQzLFxyXG4gICAgbWF0NDogbWF0NCxcclxuICAgIHF1YXQ6IHF1YXRcclxufTtcclxuIiwiLy8gREVQUkVDQVRFRFxyXG5pbXBvcnQgZ2xtYXRyaXggZnJvbSAnLi4vZ2xtYXRyaXgnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZ2xtYXRyaXg7XHJcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuU3BoZXJlXHJcbiAqIEBleHRlbmRzIHtjbGF5LkxpZ2h0fVxyXG4gKi9cclxudmFyIFNwaGVyZUxpZ2h0ID0gTGlnaHQuZXh0ZW5kKFxyXG4vKiogQGxlbmRzIGNsYXkubGlnaHQuU3BoZXJlIyAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJhbmdlOiAxMDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYWRpdXM6IDVcclxufSwge1xyXG5cclxuICAgIHR5cGU6ICdTUEhFUkVfTElHSFQnLFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBzcGhlcmVMaWdodFBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BoZXJlTGlnaHRSYW5nZToge1xyXG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5yYW5nZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BoZXJlTGlnaHRSYWRpdXM6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmFkaXVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzcGhlcmVMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSppbnRlbnNpdHksIGNvbG9yWzFdKmludGVuc2l0eSwgY29sb3JbMl0qaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTcGhlcmVMaWdodDtcclxuIiwiaW1wb3J0IExpZ2h0IGZyb20gJy4uL0xpZ2h0JztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5saWdodC5UdWJlXHJcbiAqIEBleHRlbmRzIHtjbGF5LkxpZ2h0fVxyXG4gKi9cclxudmFyIFR1YmVMaWdodCA9IExpZ2h0LmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5LmxpZ2h0LlR1YmUjICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcmFuZ2U6IDEwMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogMTBcclxufSwge1xyXG5cclxuICAgIHR5cGU6ICdUVUJFX0xJR0hUJyxcclxuXHJcbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XHJcbiAgICAgICAgdHViZUxpZ2h0UG9zaXRpb246IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0V29ybGRQb3NpdGlvbigpLmFycmF5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdHViZUxpZ2h0RXh0ZW5kOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBFeHRlbmQgaW4geCBheGlzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguY29weShpbnN0YW5jZS53b3JsZFRyYW5zZm9ybS54KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubm9ybWFsaXplKCkuc2NhbGUoaW5zdGFuY2UubGVuZ3RoIC8gMikuYXJyYXk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KSgpXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdHViZUxpZ2h0UmFuZ2U6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmFuZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICB0dWJlTGlnaHRDb2xvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0qaW50ZW5zaXR5LCBjb2xvclsxXSppbnRlbnNpdHksIGNvbG9yWzJdKmludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVHViZUxpZ2h0O1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IGNyZWF0ZUNvbXBvc2l0b3IgZnJvbSAnLi4vY3JlYXRlQ29tcG9zaXRvcic7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubG9hZGVyLkZYXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgRlhMb2FkZXIgPSBCYXNlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkubG9hZGVyLkZYIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHJvb3RQYXRoOiAnJyxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGV4dHVyZVJvb3RQYXRoOiAnJyxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgc2hhZGVyUm9vdFBhdGg6ICcnLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuU2NlbmV9XHJcbiAgICAgKi9cclxuICAgIHNjZW5lOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuQ2FtZXJhfVxyXG4gICAgICovXHJcbiAgICBjYW1lcmE6IG51bGxcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LmxvYWRlci5GWC5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHVybFxyXG4gICAgICovXHJcbiAgICBsb2FkOiBmdW5jdGlvbih1cmwpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5yb290UGF0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnJvb3RQYXRoID0gdXJsLnNsaWNlKDAsIHVybC5sYXN0SW5kZXhPZignLycpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZlbmRvci5yZXF1ZXN0LmdldCh7XHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICBvbnByb2dyZXNzOiBmdW5jdGlvbihwZXJjZW50LCBsb2FkZWQsIHRvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3Byb2dyZXNzJywgcGVyY2VudCwgbG9hZGVkLCB0b3RhbCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uZXJyb3I6IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignZXJyb3InLCBlKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgIG9ubG9hZDogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGNyZWF0ZUNvbXBvc2l0b3IoSlNPTi5wYXJzZShkYXRhKSwge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHR1cmVSb290UGF0aDogdGhpcy50ZXh0dXJlUm9vdFBhdGggfHwgdGhpcy5yb290UGF0aCxcclxuICAgICAgICAgICAgICAgICAgICBjYW1lcmE6IHRoaXMuY2FtZXJhLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lOiB0aGlzLnNjZW5lXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZYTG9hZGVyO1xyXG4iLCJpbXBvcnQgbWF0MiBmcm9tICcuLi9nbG1hdHJpeC9tYXQyJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuTWF0cml4MlxyXG4gKi9cclxudmFyIE1hdHJpeDIgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JhZ2Ugb2YgTWF0cml4MlxyXG4gICAgICogQG5hbWUgYXJyYXlcclxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5NYXRyaXgyI1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFycmF5ID0gbWF0Mi5jcmVhdGUoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIF9kaXJ0eVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5NYXRyaXgyI1xyXG4gICAgICovXHJcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbn07XHJcblxyXG5NYXRyaXgyLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogTWF0cml4MixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBjb21wb25lbnRzIGZyb20gYXJyYXlcclxuICAgICAqIEBwYXJhbSAge0Zsb2F0MzJBcnJheXxudW1iZXJbXX0gYXJyXHJcbiAgICAgKi9cclxuICAgIHNldEFycmF5OiBmdW5jdGlvbiAoYXJyKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbaV0gPSBhcnJbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IE1hdHJpeDJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAobmV3IE1hdHJpeDIoKSkuY29weSh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGZyb20gYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQyLmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgYWRqdWdhdGUgb2Ygc2VsZiwgaW4tcGxhY2VcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgYWRqb2ludDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0Mi5hZGpvaW50KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgbWF0cml4IGRldGVybWluYW50XHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRldGVybWluYW50OiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbWF0Mi5kZXRlcm1pbmFudCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdG8gYSBpZGVudGl0eSBtYXRyaXhcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgaWRlbnRpdHk6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDIuaWRlbnRpdHkodGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydCBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIGludmVydDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0Mi5pbnZlcnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdXRpcGx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgbXVsOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0Mi5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseUxlZnRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBtdWxMZWZ0OiBmdW5jdGlvbihhKSB7XHJcbiAgICAgICAgbWF0Mi5tdWwodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDIubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IGEgYW5kIHNlbGYsIGEgaXMgb24gdGhlIGxlZnRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uKGEpIHtcclxuICAgICAgICBtYXQyLm11bHRpcGx5KHRoaXMuYXJyYXksIGEuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhblxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgIHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICByb3RhdGU6IGZ1bmN0aW9uKHJhZCkge1xyXG4gICAgICAgIG1hdDIucm90YXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHJhZCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHNlbGYgYnkgc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24odikge1xyXG4gICAgICAgIG1hdDIuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgdi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNwb3NlIHNlbGYsIGluLXBsYWNlLlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc3Bvc2U6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDIudHJhbnNwb3NlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7TWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge01hdHJpeDJ9IGFcclxuICogQHJldHVybiB7TWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIuYWRqb2ludCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0Mi5hZGpvaW50KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0Mi5jb3B5KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbk1hdHJpeDIuZGV0ZXJtaW5hbnQgPSBmdW5jdGlvbihhKSB7XHJcbiAgICByZXR1cm4gbWF0Mi5kZXRlcm1pbmFudChhLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IG91dFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICBtYXQyLmlkZW50aXR5KG91dC5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBtYXQyLmludmVydChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gKi9cclxuTWF0cml4Mi5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG1hdDIubXVsKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gKi9cclxuTWF0cml4Mi5tdWx0aXBseSA9IE1hdHJpeDIubXVsO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIucm90YXRlID0gZnVuY3Rpb24ob3V0LCBhLCByYWQpIHtcclxuICAgIG1hdDIucm90YXRlKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICBtYXQyLnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtNYXRyaXgyfSBvdXRcclxuICogQHBhcmFtICB7TWF0cml4Mn0gYVxyXG4gKiBAcmV0dXJuIHtNYXRyaXgyfVxyXG4gKi9cclxuTWF0cml4Mi50cmFuc3Bvc2UgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDIudHJhbnNwb3NlKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRyaXgyO1xyXG4iLCJpbXBvcnQgbWF0MmQgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0MmQnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5NYXRyaXgyZFxyXG4gKi9cclxudmFyIE1hdHJpeDJkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAvKipcclxuICAgICAqIFN0b3JhZ2Ugb2YgTWF0cml4MmRcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MmQjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSBtYXQyZC5jcmVhdGUoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIF9kaXJ0eVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5NYXRyaXgyZCNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuTWF0cml4MmQucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBNYXRyaXgyZCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBjb21wb25lbnRzIGZyb20gYXJyYXlcclxuICAgICAqIEBwYXJhbSAge0Zsb2F0MzJBcnJheXxudW1iZXJbXX0gYXJyXHJcbiAgICAgKi9cclxuICAgIHNldEFycmF5OiBmdW5jdGlvbiAoYXJyKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbaV0gPSBhcnJbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IE1hdHJpeDJkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgTWF0cml4MmQoKSkuY29weSh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGZyb20gYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDJkLmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBtYXRyaXggZGV0ZXJtaW5hbnRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGV0ZXJtaW5hbnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBtYXQyZC5kZXRlcm1pbmFudCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdG8gYSBpZGVudGl0eSBtYXRyaXhcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIGlkZW50aXR5OiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQyZC5pZGVudGl0eSh0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0IHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIGludmVydDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0MmQuaW52ZXJ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXV0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgbXVsOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0MmQubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBtdWxMZWZ0OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0MmQubXVsKHRoaXMuYXJyYXksIGIuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDJkLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBhIGFuZCBzZWxmLCBhIGlzIG9uIHRoZSBsZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQyZC5tdWx0aXBseSh0aGlzLmFycmF5LCBiLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW5cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gICByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZTogZnVuY3Rpb24ocmFkKSB7XHJcbiAgICAgICAgbWF0MmQucm90YXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHJhZCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHNlbGYgYnkgc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgc2NhbGU6IGZ1bmN0aW9uKHMpIHtcclxuICAgICAgICBtYXQyZC5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNsYXRlIHNlbGYgYnkgdlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgdlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgdHJhbnNsYXRlOiBmdW5jdGlvbih2KSB7XHJcbiAgICAgICAgbWF0MmQudHJhbnNsYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDJkLmNvcHkob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbk1hdHJpeDJkLmRldGVybWluYW50ID0gZnVuY3Rpb24oYSkge1xyXG4gICAgcmV0dXJuIG1hdDJkLmRldGVybWluYW50KGEuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcclxuICAgIG1hdDJkLmlkZW50aXR5KG91dC5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0MmQuaW52ZXJ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQubXVsID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBtYXQyZC5tdWwob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQubXVsdGlwbHkgPSBNYXRyaXgyZC5tdWw7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgIHJhZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQucm90YXRlID0gZnVuY3Rpb24ob3V0LCBhLCByYWQpIHtcclxuICAgIG1hdDJkLnJvdGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIG1hdDJkLnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQudHJhbnNsYXRlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICBtYXQyZC50cmFuc2xhdGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1hdHJpeDJkO1xyXG4iLCJpbXBvcnQgbWF0MyBmcm9tICcuLi9nbG1hdHJpeC9tYXQzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuTWF0cml4M1xyXG4gKi9cclxudmFyIE1hdHJpeDMgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIE1hdHJpeDNcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MyNcclxuICAgICAqL1xyXG4gICAgdGhpcy5hcnJheSA9IG1hdDMuY3JlYXRlKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MyNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuTWF0cml4My5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IE1hdHJpeDMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gYXJyW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGFkanVnYXRlIG9mIHNlbGYsIGluLXBsYWNlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGFkam9pbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBtYXQzLmFkam9pbnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IE1hdHJpeDNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gKG5ldyBNYXRyaXgzKCkpLmNvcHkodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIG1hdDMuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIG1hdHJpeCBkZXRlcm1pbmFudFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkZXRlcm1pbmFudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBtYXQzLmRldGVybWluYW50KHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIE1hdHJpeDJkIGFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDJkOiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIG1hdDMuZnJvbU1hdDJkKHRoaXMuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3BpZXMgdGhlIHVwcGVyLWxlZnQgM3gzIHZhbHVlcyBvZiBNYXRyaXg0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDQ6IGZ1bmN0aW9uIChhKSB7XHJcbiAgICAgICAgbWF0My5mcm9tTWF0NCh0aGlzLmFycmF5LCBhLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyBhIHJvdGF0aW9uIG1hdHJpeCBmcm9tIHRoZSBnaXZlbiBxdWF0ZXJuaW9uXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgZnJvbVF1YXQ6IGZ1bmN0aW9uIChxKSB7XHJcbiAgICAgICAgbWF0My5mcm9tUXVhdCh0aGlzLmFycmF5LCBxLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRvIGEgaWRlbnRpdHkgbWF0cml4XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGlkZW50aXR5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbWF0My5pZGVudGl0eSh0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0IHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgaW52ZXJ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbWF0My5pbnZlcnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdXRpcGx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgbXVsOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIG1hdDMubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgbXVsTGVmdDogZnVuY3Rpb24gKGEpIHtcclxuICAgICAgICBtYXQzLm11bCh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIG1hdDMubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IGEgYW5kIHNlbGYsIGEgaXMgb24gdGhlIGxlZnRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uIChhKSB7XHJcbiAgICAgICAgbWF0My5tdWx0aXBseSh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW5cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gICByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgcm90YXRlOiBmdW5jdGlvbiAocmFkKSB7XHJcbiAgICAgICAgbWF0My5yb3RhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgc2VsZiBieSBzXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9ICBzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbiAodikge1xyXG4gICAgICAgIG1hdDMuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgdi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zbGF0ZSBzZWxmIGJ5IHZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAodikge1xyXG4gICAgICAgIG1hdDMudHJhbnNsYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgYSAzeDMgbm9ybWFsIG1hdHJpeCAodHJhbnNwb3NlIGludmVyc2UpIGZyb20gdGhlIDR4NCBtYXRyaXhcclxuICAgICAqIEBwYXJhbSB7Y2xheS5NYXRyaXg0fSBhXHJcbiAgICAgKi9cclxuICAgIG5vcm1hbEZyb21NYXQ0OiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIG1hdDMubm9ybWFsRnJvbU1hdDQodGhpcy5hcnJheSwgYS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zcG9zZSBzZWxmLCBpbi1wbGFjZS5cclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgdHJhbnNwb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbWF0My50cmFuc3Bvc2UodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSk7XHJcbiAgICB9XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5hZGpvaW50ID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgbWF0My5hZGpvaW50KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuY29weSA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMuY29weShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5NYXRyaXgzLmRldGVybWluYW50ID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybiBtYXQzLmRldGVybWluYW50KGEuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuaWRlbnRpdHkgPSBmdW5jdGlvbiAob3V0KSB7XHJcbiAgICBtYXQzLmlkZW50aXR5KG91dC5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuaW52ZXJ0ID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgbWF0My5pbnZlcnQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLm11bCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIG1hdDMubXVsKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5tdWx0aXBseSA9IE1hdHJpeDMubXVsO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gIG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuZnJvbU1hdDJkID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgbWF0My5mcm9tTWF0MmQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5mcm9tTWF0NCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMuZnJvbU1hdDQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9ICAgIG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5mcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEpIHtcclxuICAgIG1hdDMuZnJvbVF1YXQob3V0LmFycmF5LCBxLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5ub3JtYWxGcm9tTWF0NCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMubm9ybWFsRnJvbU1hdDQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICBtYXQzLnJvdGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLnNjYWxlID0gZnVuY3Rpb24gKG91dCwgYSwgdikge1xyXG4gICAgbWF0My5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLnRyYW5zcG9zZSA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMudHJhbnNwb3NlKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHYpIHtcclxuICAgIG1hdDMudHJhbnNsYXRlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRyaXgzO1xyXG4iLCJpbXBvcnQgVmVjdG9yMyBmcm9tICcuL1ZlY3RvcjMnO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tICcuL1ZlY3RvcjInO1xyXG5cclxuLyoqXHJcbiAqIFJhbmRvbSBvciBjb25zdGFudCAxZCwgMmQsIDNkIHZlY3RvciBnZW5lcmF0b3JcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlZhbHVlXHJcbiAqL1xyXG52YXIgVmFsdWUgPSBmdW5jdGlvbigpIHt9O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcnxjbGF5LlZlY3RvcjJ8Y2xheS5WZWN0b3IzfSBbb3V0XVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ8Y2xheS5WZWN0b3IyfGNsYXkuVmVjdG9yM31cclxuICovXHJcblZhbHVlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihvdXQpIHt9O1xyXG5cclxuLy8gQ29uc3RhbnRcclxudmFyIENvbnN0YW50VmFsdWUgPSBmdW5jdGlvbih2YWwpIHtcclxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgIH07XHJcbn07XHJcbkNvbnN0YW50VmFsdWUucHJvdG90eXBlID0gbmV3IFZhbHVlKCk7XHJcbkNvbnN0YW50VmFsdWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29uc3RhbnRWYWx1ZTtcclxuXHJcbi8vIFZlY3RvclxyXG52YXIgVmVjdG9yVmFsdWUgPSBmdW5jdGlvbih2YWwpIHtcclxuICAgIHZhciBDb25zdHJ1Y3RvciA9IHZhbC5jb25zdHJ1Y3RvcjtcclxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IENvbnN0cnVjdG9yKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG91dC5jb3B5KHZhbCk7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH07XHJcbn07XHJcblZlY3RvclZhbHVlLnByb3RvdHlwZSA9IG5ldyBWYWx1ZSgpO1xyXG5WZWN0b3JWYWx1ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWZWN0b3JWYWx1ZTtcclxuLy9SYW5kb20gMURcclxudmFyIFJhbmRvbTFEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIHZhciByYW5nZSA9IG1heCAtIG1pbjtcclxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiByYW5nZSArIG1pbjtcclxuICAgIH07XHJcbn07XHJcblJhbmRvbTFELnByb3RvdHlwZSA9IG5ldyBWYWx1ZSgpO1xyXG5SYW5kb20xRC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSYW5kb20xRDtcclxuXHJcbi8vIFJhbmRvbTJEXHJcbnZhciBSYW5kb20yRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XHJcbiAgICB2YXIgcmFuZ2VYID0gbWF4LnggLSBtaW4ueDtcclxuICAgIHZhciByYW5nZVkgPSBtYXgueSAtIG1pbi55O1xyXG5cclxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgVmVjdG9yMi5zZXQoXHJcbiAgICAgICAgICAgIG91dCxcclxuICAgICAgICAgICAgcmFuZ2VYICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVswXSxcclxuICAgICAgICAgICAgcmFuZ2VZICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVsxXVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9O1xyXG59O1xyXG5SYW5kb20yRC5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcclxuUmFuZG9tMkQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZG9tMkQ7XHJcblxyXG52YXIgUmFuZG9tM0QgPSBmdW5jdGlvbihtaW4sIG1heCkge1xyXG4gICAgdmFyIHJhbmdlWCA9IG1heC54IC0gbWluLng7XHJcbiAgICB2YXIgcmFuZ2VZID0gbWF4LnkgLSBtaW4ueTtcclxuICAgIHZhciByYW5nZVogPSBtYXgueiAtIG1pbi56O1xyXG5cclxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgVmVjdG9yMy5zZXQoXHJcbiAgICAgICAgICAgIG91dCxcclxuICAgICAgICAgICAgcmFuZ2VYICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVswXSxcclxuICAgICAgICAgICAgcmFuZ2VZICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVsxXSxcclxuICAgICAgICAgICAgcmFuZ2VaICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVsyXVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9O1xyXG59O1xyXG5SYW5kb20zRC5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcclxuUmFuZG9tM0QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZG9tM0Q7XHJcblxyXG4vLyBGYWN0b3J5IG1ldGhvZHNcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBjb25zdGFudCAxZCB2YWx1ZSBnZW5lcmF0b3JcclxuICogQHBhcmFtICB7bnVtYmVyfSBjb25zdGFudFxyXG4gKiBAcmV0dXJuIHtjbGF5LlZhbHVlfVxyXG4gKi9cclxuVmFsdWUuY29uc3RhbnQgPSBmdW5jdGlvbihjb25zdGFudCkge1xyXG4gICAgcmV0dXJuIG5ldyBDb25zdGFudFZhbHVlKGNvbnN0YW50KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBjb25zdGFudCB2ZWN0b3IgdmFsdWUoMmQgb3IgM2QpIGdlbmVyYXRvclxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ8Y2xheS5WZWN0b3IzfSB2ZWN0b3JcclxuICogQHJldHVybiB7Y2xheS5WYWx1ZX1cclxuICovXHJcblZhbHVlLnZlY3RvciA9IGZ1bmN0aW9uKHZlY3Rvcikge1xyXG4gICAgcmV0dXJuIG5ldyBWZWN0b3JWYWx1ZSh2ZWN0b3IpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHJhbmRvbSAxZCB2YWx1ZSBnZW5lcmF0b3JcclxuICogQHBhcmFtICB7bnVtYmVyfSBtaW5cclxuICogQHBhcmFtICB7bnVtYmVyfSBtYXhcclxuICogQHJldHVybiB7Y2xheS5WYWx1ZX1cclxuICovXHJcblZhbHVlLnJhbmRvbTFEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIHJldHVybiBuZXcgUmFuZG9tMUQobWluLCBtYXgpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHJhbmRvbSAyZCB2YWx1ZSBnZW5lcmF0b3JcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBtaW5cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBtYXhcclxuICogQHJldHVybiB7Y2xheS5WYWx1ZX1cclxuICovXHJcblZhbHVlLnJhbmRvbTJEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIHJldHVybiBuZXcgUmFuZG9tMkQobWluLCBtYXgpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHJhbmRvbSAzZCB2YWx1ZSBnZW5lcmF0b3JcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBtaW5cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBtYXhcclxuICogQHJldHVybiB7Y2xheS5WYWx1ZX1cclxuICovXHJcblZhbHVlLnJhbmRvbTNEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIHJldHVybiBuZXcgUmFuZG9tM0QobWluLCBtYXgpO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVmFsdWU7XHJcbiIsImltcG9ydCB2ZWM0IGZyb20gJy4uL2dsbWF0cml4L3ZlYzQnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5WZWN0b3I0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB6XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XHJcbiAqL1xyXG52YXIgVmVjdG9yNCA9IGZ1bmN0aW9uKHgsIHksIHosIHcpIHtcclxuXHJcbiAgICB4ID0geCB8fCAwO1xyXG4gICAgeSA9IHkgfHwgMDtcclxuICAgIHogPSB6IHx8IDA7XHJcbiAgICB3ID0gdyB8fCAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcmFnZSBvZiBWZWN0b3I0LCByZWFkIGFuZCB3cml0ZSBvZiB4LCB5LCB6LCB3IHdpbGwgY2hhbmdlIHRoZSB2YWx1ZXMgaW4gYXJyYXlcclxuICAgICAqIEFsbCBtZXRob2RzIGFsc28gb3BlcmF0ZSBvbiB0aGUgYXJyYXkgaW5zdGVhZCBvZiB4LCB5LCB6LCB3IGNvbXBvbmVudHNcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yNCNcclxuICAgICAqL1xyXG4gICAgdGhpcy5hcnJheSA9IHZlYzQuZnJvbVZhbHVlcyh4LCB5LCB6LCB3KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpcnR5IGZsYWcgaXMgdXNlZCBieSB0aGUgTm9kZSB0byBkZXRlcm1pbmVcclxuICAgICAqIGlmIHRoZSBtYXRyaXggaXMgdXBkYXRlZCB0byBsYXRlc3RcclxuICAgICAqIEBuYW1lIF9kaXJ0eVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3I0I1xyXG4gICAgICovXHJcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbn07XHJcblxyXG5WZWN0b3I0LnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogVmVjdG9yNCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBiIHRvIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0LmFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50c1xyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgelxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgd1xyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKHgsIHksIHosIHcpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0geDtcclxuICAgICAgICB0aGlzLmFycmF5WzFdID0geTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gejtcclxuICAgICAgICB0aGlzLmFycmF5WzNdID0gdztcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHksIHogYW5kIHcgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24oYXJyKSB7XHJcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IGFyclswXTtcclxuICAgICAgICB0aGlzLmFycmF5WzFdID0gYXJyWzFdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMl0gPSBhcnJbMl07XHJcbiAgICAgICAgdGhpcy5hcnJheVszXSA9IGFyclszXTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IFZlY3RvcjRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yNCh0aGlzLngsIHRoaXMueSwgdGhpcy56LCB0aGlzLncpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgZnJvbSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIGRpc3RhbmNlXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGlzdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHJldHVybiB2ZWM0LmRpc3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzdGFuY2UgYmV0d2VlbiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGlzdGFuY2U6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5kaXN0YW5jZSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgZGl2aWRlXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgZGl2OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5kaXYodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpdmlkZSBzZWxmIGJ5IGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBkaXZpZGU6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0LmRpdmlkZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRG90IHByb2R1Y3Qgb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRvdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHJldHVybiB2ZWM0LmRvdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBvZiBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVuOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5sZW4odGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVuZ3RoOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5sZW5ndGgodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBMaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGEgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB0XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIGxlcnA6IGZ1bmN0aW9uKGEsIGIsIHQpIHtcclxuICAgICAgICB2ZWM0LmxlcnAodGhpcy5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgdCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1pbmltdW0gb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIG1pbjogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQubWluKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXhpbXVtIG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBtYXg6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0Lm1heCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgbXVsOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11dGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5tdWx0aXBseSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTmVnYXRlIHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgbmVnYXRlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2ZWM0Lm5lZ2F0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTm9ybWFsaXplIHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2ZWM0Lm5vcm1hbGl6ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgcmFuZG9tIHgsIHksIHosIHcgY29tcG9uZW50cyB3aXRoIGEgZ2l2ZW4gc2NhbGVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gc2NhbGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgcmFuZG9tOiBmdW5jdGlvbihzY2FsZSkge1xyXG4gICAgICAgIHZlYzQucmFuZG9tKHRoaXMuYXJyYXksIHNjYWxlKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgc2VsZlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgc2NhbGU6IGZ1bmN0aW9uKHMpIHtcclxuICAgICAgICB2ZWM0LnNjYWxlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHMpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIGIgYW5kIGFkZCB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlQW5kQWRkOiBmdW5jdGlvbihiLCBzKSB7XHJcbiAgICAgICAgdmVjNC5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5zcXJEaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZERpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQuc3F1YXJlZERpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkTGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQuc3FyTGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQuc3F1YXJlZExlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3Igc3VidHJhY3RcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBzdWI6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0LnN1Yih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgYiBmcm9tIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBzdWJ0cmFjdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQuc3VidHJhY3QodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXg0IG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQ0OiBmdW5jdGlvbihtKSB7XHJcbiAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgUXVhdGVybmlvbiBxXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtUXVhdDogZnVuY3Rpb24ocSkge1xyXG4gICAgICAgIHZlYzQudHJhbnNmb3JtUXVhdCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBxLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xyXG4vLyBHZXR0ZXIgYW5kIFNldHRlclxyXG5pZiAoZGVmaW5lUHJvcGVydHkpIHtcclxuXHJcbiAgICB2YXIgcHJvdG8gPSBWZWN0b3I0LnByb3RvdHlwZTtcclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgeFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzBdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVswXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yNFxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneScsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMV07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzFdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHpcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3I0XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd6Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVsyXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMl0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgd1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3cnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzNdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVszXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8vIFN1cHBseSBtZXRob2RzIHRoYXQgYXJlIG5vdCBpbiBwbGFjZVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5hZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzQuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHpcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHosIHcpIHtcclxuICAgIHZlYzQuc2V0KG91dC5hcnJheSwgeCwgeSwgeiwgdyk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBiKSB7XHJcbiAgICB2ZWM0LmNvcHkob3V0LmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQuZGlzdCA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHJldHVybiB2ZWM0LmRpc3RhbmNlKGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQuZGlzdGFuY2UgPSBWZWN0b3I0LmRpc3Q7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LmRpdiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjNC5kaXZpZGUob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LmRpdmlkZSA9IFZlY3RvcjQuZGl2O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yNC5kb3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjNC5kb3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQubGVuID0gZnVuY3Rpb24oYikge1xyXG4gICAgcmV0dXJuIHZlYzQubGVuZ3RoKGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLy8gVmVjdG9yNC5sZW5ndGggPSBWZWN0b3I0LmxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5sZXJwID0gZnVuY3Rpb24ob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2ZWM0LmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWM0Lm1pbihvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5tYXggPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzQubWF4KG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0Lm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjNC5tdWx0aXBseShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubXVsdGlwbHkgPSBWZWN0b3I0Lm11bDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5uZWdhdGUgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZlYzQubmVnYXRlKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2ZWM0Lm5vcm1hbGl6ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQucmFuZG9tID0gZnVuY3Rpb24ob3V0LCBzY2FsZSkge1xyXG4gICAgdmVjNC5yYW5kb20ob3V0LmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHNjYWxlKSB7XHJcbiAgICB2ZWM0LnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIHZlYzQuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LnNxckRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjNC5zcXJEaXN0KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQuc3F1YXJlZERpc3RhbmNlID0gVmVjdG9yNC5zcXJEaXN0O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LnNxckxlbiA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHJldHVybiB2ZWM0LnNxckxlbihhLmFycmF5KTtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yNC5zcXVhcmVkTGVuZ3RoID0gVmVjdG9yNC5zcXJMZW47XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LnN1YiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjNC5zdWJ0cmFjdChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5zdWJ0cmFjdCA9IFZlY3RvcjQuc3ViO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC50cmFuc2Zvcm1NYXQ0ID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2ZWM0LnRyYW5zZm9ybU1hdDQob3V0LmFycmF5LCBhLmFycmF5LCBtLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQudHJhbnNmb3JtUXVhdCA9IGZ1bmN0aW9uKG91dCwgYSwgcSkge1xyXG4gICAgdmVjNC50cmFuc2Zvcm1RdWF0KG91dC5hcnJheSwgYS5hcnJheSwgcS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBWZWN0b3I0O1xyXG4iLCJpbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkucGFydGljbGUuUGFydGljbGVcclxuICovXHJcbnZhciBQYXJ0aWNsZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZSBldWxlciBhbmdsZSB0byByZXByZXNlbnQgcGFydGljbGUgcm90YXRpb25cclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucm90YXRpb24gPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUgez9jbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMudmVsb2NpdHkgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUgez9jbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuYW5ndWxhclZlbG9jaXR5ID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubGlmZSA9IDE7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmFnZSA9IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnNwcml0ZVNpemUgPSAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy53ZWlnaHQgPSAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkucGFydGljbGUuRW1pdHRlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5lbWl0dGVyID0gbnVsbDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBVcGRhdGUgcGFydGljbGUgcG9zaXRpb25cclxuICogQHBhcmFtICB7bnVtYmVyfSBkZWx0YVRpbWVcclxuICovXHJcblBhcnRpY2xlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbihkZWx0YVRpbWUpIHtcclxuICAgIGlmICh0aGlzLnZlbG9jaXR5KSB7XHJcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZCh0aGlzLnBvc2l0aW9uLmFycmF5LCB0aGlzLnBvc2l0aW9uLmFycmF5LCB0aGlzLnZlbG9jaXR5LmFycmF5LCBkZWx0YVRpbWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYW5ndWxhclZlbG9jaXR5KSB7XHJcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZCh0aGlzLnJvdGF0aW9uLmFycmF5LCB0aGlzLnJvdGF0aW9uLmFycmF5LCB0aGlzLmFuZ3VsYXJWZWxvY2l0eS5hcnJheSwgZGVsdGFUaW1lKTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBhcnRpY2xlO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgUGFydGljbGUgZnJvbSAnLi9QYXJ0aWNsZSc7XHJcbmltcG9ydCBWYWx1ZSBmcm9tICcuLi9tYXRoL1ZhbHVlJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wYXJ0aWNsZS5FbWl0dGVyXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgRW1pdHRlciA9IEJhc2UuZXh0ZW5kKCAvKiogQGxlbmRzIGNsYXkucGFydGljbGUuRW1pdHRlciMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBNYXhpbXVtIG51bWJlciBvZiBwYXJ0aWNsZXMgY3JlYXRlZCBieSB0aGlzIGVtaXR0ZXJcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIG1heDogMTAwMCxcclxuICAgIC8qKlxyXG4gICAgICogTnVtYmVyIG9mIHBhcnRpY2xlcyBjcmVhdGVkIGJ5IHRoaXMgZW1pdHRlciBlYWNoIHNob3RcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGFtb3VudDogMjAsXHJcblxyXG4gICAgLy8gSW5pdCBzdGF0dXMgZm9yIGVhY2ggcGFydGljbGVcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgbGlmZSBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgbGlmZTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgcG9zaXRpb24gZ2VuZXJhdG9yXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmFsdWUuPGNsYXkuVmVjdG9yMz59XHJcbiAgICAgKi9cclxuICAgIHBvc2l0aW9uOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJ0aWNsZSByb3RhdGlvbiBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48Y2xheS5WZWN0b3IzPn1cclxuICAgICAqL1xyXG4gICAgcm90YXRpb246IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRpY2xlIHZlbG9jaXR5IGdlbmVyYXRvclxyXG4gICAgICogQHR5cGUgez9jbGF5LlZhbHVlLjxjbGF5LlZlY3RvcjM+fVxyXG4gICAgICovXHJcbiAgICB2ZWxvY2l0eTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgYW5ndWxhciB2ZWxvY2l0eSBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48Y2xheS5WZWN0b3IzPn1cclxuICAgICAqL1xyXG4gICAgYW5ndWxhclZlbG9jaXR5OiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJ0aWNsZSBzcHJpdGUgc2l6ZSBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgc3ByaXRlU2l6ZTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgd2VpZ2h0IGdlbmVyYXRvclxyXG4gICAgICogQHR5cGUgez9jbGF5LlZhbHVlLjxudW1iZXI+fVxyXG4gICAgICovXHJcbiAgICB3ZWlnaHQ6IG51bGwsXHJcblxyXG4gICAgX3BhcnRpY2xlUG9vbDogbnVsbFxyXG5cclxufSwgZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgdGhpcy5fcGFydGljbGVQb29sID0gW107XHJcblxyXG4gICAgLy8gVE9ETyBSZWR1Y2UgaGVhcCBtZW1vcnlcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXg7IGkrKykge1xyXG4gICAgICAgIHZhciBwYXJ0aWNsZSA9IG5ldyBQYXJ0aWNsZSgpO1xyXG4gICAgICAgIHBhcnRpY2xlLmVtaXR0ZXIgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuX3BhcnRpY2xlUG9vbC5wdXNoKHBhcnRpY2xlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmVsb2NpdHkpIHtcclxuICAgICAgICAgICAgcGFydGljbGUudmVsb2NpdHkgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5hbmd1bGFyVmVsb2NpdHkpIHtcclxuICAgICAgICAgICAgcGFydGljbGUuYW5ndWxhclZlbG9jaXR5ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEVtaXR0ZXIgbnVtYmVyIG9mIHBhcnRpY2xlcyBhbmQgcHVzaCB0aGVtIHRvIGEgZ2l2ZW4gcGFydGljbGUgbGlzdC4gRW1taXQgbnVtYmVyIGlzIGRlZmluZWQgYnkgYW1vdW50IHByb3BlcnR5XHJcbiAgICAgKiBAcGFyYW0gIHtBcnJheS48Y2xheS5wYXJ0aWNsZS5QYXJ0aWNsZT59IG91dFxyXG4gICAgICovXHJcbiAgICBlbWl0OiBmdW5jdGlvbihvdXQpIHtcclxuICAgICAgICB2YXIgYW1vdW50ID0gTWF0aC5taW4odGhpcy5fcGFydGljbGVQb29sLmxlbmd0aCwgdGhpcy5hbW91bnQpO1xyXG5cclxuICAgICAgICB2YXIgcGFydGljbGU7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBwYXJ0aWNsZSA9IHRoaXMuX3BhcnRpY2xlUG9vbC5wb3AoKTtcclxuICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBwYXJ0aWNsZSBzdGF0dXNcclxuICAgICAgICAgICAgaWYgKHRoaXMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24uZ2V0KHBhcnRpY2xlLnBvc2l0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGlvbi5nZXQocGFydGljbGUucm90YXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZlbG9jaXR5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZlbG9jaXR5LmdldChwYXJ0aWNsZS52ZWxvY2l0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuYW5ndWxhclZlbG9jaXR5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuZ3VsYXJWZWxvY2l0eS5nZXQocGFydGljbGUuYW5ndWxhclZlbG9jaXR5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5saWZlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZS5saWZlID0gdGhpcy5saWZlLmdldCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNwcml0ZVNpemUpIHtcclxuICAgICAgICAgICAgICAgIHBhcnRpY2xlLnNwcml0ZVNpemUgPSB0aGlzLnNwcml0ZVNpemUuZ2V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMud2VpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZS53ZWlnaHQgPSB0aGlzLndlaWdodC5nZXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYXJ0aWNsZS5hZ2UgPSAwO1xyXG5cclxuICAgICAgICAgICAgb3V0LnB1c2gocGFydGljbGUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEtpbGwgYSBkZWFkIHBhcnRpY2xlIGFuZCBwdXQgaXQgYmFjayBpbiB0aGUgcG9vbFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5wYXJ0aWNsZS5QYXJ0aWNsZX0gcGFydGljbGVcclxuICAgICAqL1xyXG4gICAga2lsbDogZnVuY3Rpb24ocGFydGljbGUpIHtcclxuICAgICAgICB0aGlzLl9wYXJ0aWNsZVBvb2wucHVzaChwYXJ0aWNsZSk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGNvbnN0YW50IDFkIHZhbHVlIGdlbmVyYXRvci4gQWxpYXMgZm9yIHtAbGluayBjbGF5LlZhbHVlLmNvbnN0YW50fVxyXG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLmNvbnN0YW50XHJcbiAqL1xyXG5FbWl0dGVyLmNvbnN0YW50ID0gVmFsdWUuY29uc3RhbnQ7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgY29uc3RhbnQgdmVjdG9yIHZhbHVlKDJkIG9yIDNkKSBnZW5lcmF0b3IuIEFsaWFzIGZvciB7QGxpbmsgY2xheS5WYWx1ZS52ZWN0b3J9XHJcbiAqIEBmdW5jdGlvbiBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIudmVjdG9yXHJcbiAqL1xyXG5FbWl0dGVyLnZlY3RvciA9IFZhbHVlLnZlY3RvcjtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gMWQgdmFsdWUgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkuVmFsdWUucmFuZG9tMUR9XHJcbiAqIEBmdW5jdGlvbiBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIucmFuZG9tMURcclxuICovXHJcbkVtaXR0ZXIucmFuZG9tMUQgPSBWYWx1ZS5yYW5kb20xRDtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gMmQgdmFsdWUgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkuVmFsdWUucmFuZG9tMkR9XHJcbiAqIEBmdW5jdGlvbiBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIucmFuZG9tMkRcclxuICovXHJcbkVtaXR0ZXIucmFuZG9tMkQgPSBWYWx1ZS5yYW5kb20yRDtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gM2QgdmFsdWUgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkuVmFsdWUucmFuZG9tM0R9XHJcbiAqIEBmdW5jdGlvbiBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIucmFuZG9tM0RcclxuICovXHJcbkVtaXR0ZXIucmFuZG9tM0QgPSBWYWx1ZS5yYW5kb20zRDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEVtaXR0ZXI7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wYXJ0aWNsZS5GaWVsZFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEZpZWxkID0gQmFzZS5leHRlbmQoe30sIHtcclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgYSBmaWVsZCB0byB0aGUgcGFydGljbGUgYW5kIHVwZGF0ZSB0aGUgcGFydGljbGUgdmVsb2NpdHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gdmVsb2NpdHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gcG9zaXRpb25cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gd2VpZ2h0XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGRlbHRhVGltZVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkucGFydGljbGUuRmllbGQucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGFwcGx5VG86IGZ1bmN0aW9uKHZlbG9jaXR5LCBwb3NpdGlvbiwgd2VpZ2h0LCBkZWx0YVRpbWUpIHt9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRmllbGQ7XHJcbiIsImltcG9ydCBGaWVsZCBmcm9tICcuL0ZpZWxkJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGFydGljbGUuRm9yY2VGaWVsZFxyXG4gKiBAZXh0ZW5kcyBjbGF5LnBhcnRpY2xlLkZpZWxkXHJcbiAqL1xyXG52YXIgRm9yY2VGaWVsZCA9IEZpZWxkLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZm9yY2U6IG5ldyBWZWN0b3IzKClcclxuICAgIH07XHJcbn0sIHtcclxuICAgIGFwcGx5VG86IGZ1bmN0aW9uKHZlbG9jaXR5LCBwb3NpdGlvbiwgd2VpZ2h0LCBkZWx0YVRpbWUpIHtcclxuICAgICAgICBpZiAod2VpZ2h0ID4gMCkge1xyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHZlbG9jaXR5LmFycmF5LCB2ZWxvY2l0eS5hcnJheSwgdGhpcy5mb3JjZS5hcnJheSwgZGVsdGFUaW1lIC8gd2VpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRm9yY2VGaWVsZDtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkucGFydGljbGUudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlldyA6IFdPUkxEVklFVztcXG51bmlmb3JtIG1hdDQgcHJvamVjdGlvbiA6IFBST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XFxuI2lmZGVmIFVWX0FOSU1BVElPTlxcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkMCA6IFRFWENPT1JEXzA7XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQxIDogVEVYQ09PUkRfMTtcXG52YXJ5aW5nIHZlYzIgdl9VdjA7XFxudmFyeWluZyB2ZWMyIHZfVXYxO1xcbiNlbmRpZlxcbnZhcnlpbmcgZmxvYXQgdl9BZ2U7XFxudm9pZCBtYWluKCkge1xcbiB2X0FnZSA9IG5vcm1hbC54O1xcbiBmbG9hdCByb3RhdGlvbiA9IG5vcm1hbC55O1xcbiB2ZWM0IHdvcmxkVmlld1Bvc2l0aW9uID0gd29ybGRWaWV3ICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogd29ybGRWaWV3UG9zaXRpb247XFxuIGZsb2F0IHcgPSBnbF9Qb3NpdGlvbi53O1xcbiBnbF9Qb2ludFNpemUgPSBub3JtYWwueiAqIHByb2plY3Rpb25bMF0ueCAvIHc7XFxuICNpZmRlZiBVVl9BTklNQVRJT05cXG4gdl9VdjAgPSB0ZXhjb29yZDA7XFxuIHZfVXYxID0gdGV4Y29vcmQxO1xcbiAjZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5wYXJ0aWNsZS5mcmFnbWVudFxcbnVuaWZvcm0gc2FtcGxlcjJEIHNwcml0ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudDtcXG51bmlmb3JtIHZlYzMgY29sb3IgOiBbMS4wLCAxLjAsIDEuMF07XFxudW5pZm9ybSBmbG9hdCBhbHBoYSA6IDEuMDtcXG52YXJ5aW5nIGZsb2F0IHZfQWdlO1xcbiNpZmRlZiBVVl9BTklNQVRJT05cXG52YXJ5aW5nIHZlYzIgdl9VdjA7XFxudmFyeWluZyB2ZWMyIHZfVXYxO1xcbiNlbmRpZlxcbnZvaWQgbWFpbigpIHtcXG4gdmVjNCBjb2xvciA9IHZlYzQoY29sb3IsIGFscGhhKTtcXG4gI2lmZGVmIFNQUklURV9FTkFCTEVEXFxuICNpZmRlZiBVVl9BTklNQVRJT05cXG4gY29sb3IgKj0gdGV4dHVyZTJEKHNwcml0ZSwgbWl4KHZfVXYwLCB2X1V2MSwgZ2xfUG9pbnRDb29yZCkpO1xcbiAjZWxzZVxcbiBjb2xvciAqPSB0ZXh0dXJlMkQoc3ByaXRlLCBnbF9Qb2ludENvb3JkKTtcXG4gI2VuZGlmXFxuICNlbmRpZlxcbiAjaWZkZWYgR1JBRElFTlRfRU5BQkxFRFxcbiBjb2xvciAqPSB0ZXh0dXJlMkQoZ3JhZGllbnQsIHZlYzIodl9BZ2UsIDAuNSkpO1xcbiAjZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcbkBlbmRcIjtcclxuIiwiaW1wb3J0IFJlbmRlcmFibGUgZnJvbSAnLi4vUmVuZGVyYWJsZSc7XHJcblxyXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcblxyXG5pbXBvcnQgcGFydGljbGVFc3NsIGZyb20gJy4vcGFydGljbGUuZ2xzbC5qcyc7XHJcblNoYWRlclsnaW1wb3J0J10ocGFydGljbGVFc3NsKTtcclxuXHJcbnZhciBwYXJ0aWNsZVNoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5wYXJ0aWNsZS52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5wYXJ0aWNsZS5mcmFnbWVudCcpKTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wYXJ0aWNsZS5QYXJ0aWNsZVJlbmRlcmFibGVcclxuICogQGV4dGVuZHMgY2xheS5SZW5kZXJhYmxlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICB2YXIgcGFydGljbGVSZW5kZXJhYmxlID0gbmV3IGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlKHtcclxuICogICAgICAgICBzcHJpdGVBbmltYXRpb25UaWxlWDogNCxcclxuICogICAgICAgICBzcHJpdGVBbmltYXRpb25UaWxlWTogNCxcclxuICogICAgICAgICBzcHJpdGVBbmltYXRpb25SZXBlYXQ6IDFcclxuICogICAgIH0pO1xyXG4gKiAgICAgc2NlbmUuYWRkKHBhcnRpY2xlUmVuZGVyYWJsZSk7XHJcbiAqICAgICAvLyBFbmFibGUgdXYgYW5pbWF0aW9uIGluIHRoZSBzaGFkZXJcclxuICogICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5tYXRlcmlhbC5kZWZpbmUoJ2JvdGgnLCAnVVZfQU5JTUFUSU9OJyk7XHJcbiAqICAgICB2YXIgRW1pdHRlciA9IGNsYXkucGFydGljbGUuRW1pdHRlcjtcclxuICogICAgIHZhciBWZWN0b3IzID0gY2xheS5WZWN0b3IzO1xyXG4gKiAgICAgdmFyIGVtaXR0ZXIgPSBuZXcgRW1pdHRlcih7XHJcbiAqICAgICAgICAgbWF4OiAyMDAwLFxyXG4gKiAgICAgICAgIGFtb3VudDogMTAwLFxyXG4gKiAgICAgICAgIGxpZmU6IEVtaXR0ZXIucmFuZG9tMUQoMTAsIDIwKSxcclxuICogICAgICAgICBwb3NpdGlvbjogRW1pdHRlci52ZWN0b3IobmV3IFZlY3RvcjMoKSksXHJcbiAqICAgICAgICAgdmVsb2NpdHk6IEVtaXR0ZXIucmFuZG9tM0QobmV3IFZlY3RvcjMoLTEwLCAwLCAtMTApLCBuZXcgVmVjdG9yMygxMCwgMCwgMTApKTtcclxuICogICAgIH0pO1xyXG4gKiAgICAgcGFydGljbGVSZW5kZXJhYmxlLmFkZEVtaXR0ZXIoZW1pdHRlcik7XHJcbiAqICAgICB2YXIgZ3Jhdml0eUZpZWxkID0gbmV3IGNsYXkucGFydGljbGUuRm9yY2VGaWVsZCgpO1xyXG4gKiAgICAgZ3Jhdml0eUZpZWxkLmZvcmNlLnkgPSAtMTA7XHJcbiAqICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuYWRkRmllbGQoZ3Jhdml0eUZpZWxkKTtcclxuICogICAgIC4uLlxyXG4gKiAgICAgYW5pbWF0aW9uLm9uKCdmcmFtZScsIGZ1bmN0aW9uKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS51cGRhdGVQYXJ0aWNsZXMoZnJhbWVUaW1lKTtcclxuICogICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAqICAgICB9KTtcclxuICovXHJcbnZhciBQYXJ0aWNsZVJlbmRlcmFibGUgPSBSZW5kZXJhYmxlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBsb29wOiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgb25lc2hvdDogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIER1cmF0aW9uIG9mIHBhcnRpY2xlIHN5c3RlbSBpbiBtaWxsaXNlY29uZHNcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGR1cmF0aW9uOiAxLFxyXG5cclxuICAgIC8vIFVWIEFuaW1hdGlvblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcHJpdGVBbmltYXRpb25UaWxlWDogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3ByaXRlQW5pbWF0aW9uVGlsZVk6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNwcml0ZUFuaW1hdGlvblJlcGVhdDogMCxcclxuXHJcbiAgICBtb2RlOiBSZW5kZXJhYmxlLlBPSU5UUyxcclxuXHJcbiAgICBpZ25vcmVQaWNraW5nOiB0cnVlLFxyXG5cclxuICAgIF9lbGFwc2VkVGltZTogMCxcclxuXHJcbiAgICBfZW1pdHRpbmc6IHRydWVcclxuXHJcbn0sIGZ1bmN0aW9uKCl7XHJcblxyXG4gICAgdGhpcy5nZW9tZXRyeSA9IG5ldyBHZW9tZXRyeSh7XHJcbiAgICAgICAgZHluYW1pYzogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogcGFydGljbGVTaGFkZXIsXHJcbiAgICAgICAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAgICAgICAgICBkZXB0aE1hc2s6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwuZW5hYmxlVGV4dHVyZSgnc3ByaXRlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcGFydGljbGVzID0gW107XHJcbiAgICB0aGlzLl9maWVsZHMgPSBbXTtcclxuICAgIHRoaXMuX2VtaXR0ZXJzID0gW107XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5wYXJ0aWNsZS5QYXJ0aWNsZVJlbmRlcmFibGUucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICBjdWxsaW5nOiBmYWxzZSxcclxuXHJcbiAgICBmcnVzdHVtQ3VsbGluZzogZmFsc2UsXHJcblxyXG4gICAgY2FzdFNoYWRvdzogZmFsc2UsXHJcbiAgICByZWNlaXZlU2hhZG93OiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBlbWl0dGVyXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkucGFydGljbGUuRW1pdHRlcn0gZW1pdHRlclxyXG4gICAgICovXHJcbiAgICBhZGRFbWl0dGVyOiBmdW5jdGlvbihlbWl0dGVyKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdHRlcnMucHVzaChlbWl0dGVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgZW1pdHRlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LnBhcnRpY2xlLkVtaXR0ZXJ9IGVtaXR0ZXJcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlRW1pdHRlcjogZnVuY3Rpb24oZW1pdHRlcikge1xyXG4gICAgICAgIHRoaXMuX2VtaXR0ZXJzLnNwbGljZSh0aGlzLl9lbWl0dGVycy5pbmRleE9mKGVtaXR0ZXIpLCAxKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgZmllbGRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5wYXJ0aWNsZS5GaWVsZH0gZmllbGRcclxuICAgICAqL1xyXG4gICAgYWRkRmllbGQ6IGZ1bmN0aW9uKGZpZWxkKSB7XHJcbiAgICAgICAgdGhpcy5fZmllbGRzLnB1c2goZmllbGQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBmaWVsZFxyXG4gICAgICogQHBhcmFtIHtjbGF5LnBhcnRpY2xlLkZpZWxkfSBmaWVsZFxyXG4gICAgICovXHJcbiAgICByZW1vdmVGaWVsZDogZnVuY3Rpb24oZmllbGQpIHtcclxuICAgICAgICB0aGlzLl9maWVsZHMuc3BsaWNlKHRoaXMuX2ZpZWxkcy5pbmRleE9mKGZpZWxkKSwgMSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXQgdGhlIHBhcnRpY2xlIHN5c3RlbS5cclxuICAgICAqL1xyXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vIFB1dCBhbGwgdGhlIHBhcnRpY2xlcyBiYWNrXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHAgPSB0aGlzLl9wYXJ0aWNsZXNbaV07XHJcbiAgICAgICAgICAgIHAuZW1pdHRlci5raWxsKHApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XHJcbiAgICAgICAgdGhpcy5fZW1pdHRpbmcgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gZGVsdGFUaW1lXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVBhcnRpY2xlczogZnVuY3Rpb24oZGVsdGFUaW1lKSB7XHJcblxyXG4gICAgICAgIC8vIE1TID0+IFNlY29uZHNcclxuICAgICAgICBkZWx0YVRpbWUgLz0gMTAwMDtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSArPSBkZWx0YVRpbWU7XHJcblxyXG4gICAgICAgIHZhciBwYXJ0aWNsZXMgPSB0aGlzLl9wYXJ0aWNsZXM7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9lbWl0dGluZykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2VtaXR0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0dGVyc1tpXS5lbWl0KHBhcnRpY2xlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMub25lc2hvdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQWdpbmdcclxuICAgICAgICB2YXIgbGVuID0gcGFydGljbGVzLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjspIHtcclxuICAgICAgICAgICAgdmFyIHAgPSBwYXJ0aWNsZXNbaV07XHJcbiAgICAgICAgICAgIHAuYWdlICs9IGRlbHRhVGltZTtcclxuICAgICAgICAgICAgaWYgKHAuYWdlID49IHAubGlmZSkge1xyXG4gICAgICAgICAgICAgICAgcC5lbWl0dGVyLmtpbGwocCk7XHJcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZXNbaV0gPSBwYXJ0aWNsZXNbbGVuLTFdO1xyXG4gICAgICAgICAgICAgICAgcGFydGljbGVzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgbGVuLS07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gVXBkYXRlXHJcbiAgICAgICAgICAgIHZhciBwID0gcGFydGljbGVzW2ldO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fZmllbGRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmllbGRzW2pdLmFwcGx5VG8ocC52ZWxvY2l0eSwgcC5wb3NpdGlvbiwgcC53ZWlnaHQsIGRlbHRhVGltZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcC51cGRhdGUoZGVsdGFUaW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVZlcnRpY2VzKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVWZXJ0aWNlczogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcclxuICAgICAgICAvLyBJZiBoYXMgdXYgYW5pbWF0aW9uXHJcbiAgICAgICAgdmFyIGFuaW1UaWxlWCA9IHRoaXMuc3ByaXRlQW5pbWF0aW9uVGlsZVg7XHJcbiAgICAgICAgdmFyIGFuaW1UaWxlWSA9IHRoaXMuc3ByaXRlQW5pbWF0aW9uVGlsZVk7XHJcbiAgICAgICAgdmFyIGFuaW1SZXBlYXQgPSB0aGlzLnNwcml0ZUFuaW1hdGlvblJlcGVhdDtcclxuICAgICAgICB2YXIgblV2QW5pbUZyYW1lID0gYW5pbVRpbGVZICogYW5pbVRpbGVYICogYW5pbVJlcGVhdDtcclxuICAgICAgICB2YXIgaGFzVXZBbmltYXRpb24gPSBuVXZBbmltRnJhbWUgPiAxO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIC8vIFB1dCBwYXJ0aWNsZSBzdGF0dXMgaW4gbm9ybWFsXHJcbiAgICAgICAgdmFyIG5vcm1hbHMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZTtcclxuICAgICAgICB2YXIgdXZzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDAudmFsdWU7XHJcbiAgICAgICAgdmFyIHV2czIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMS52YWx1ZTtcclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IHRoaXMuX3BhcnRpY2xlcy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKCFwb3NpdGlvbnMgfHwgcG9zaXRpb25zLmxlbmd0aCAhPT0gbGVuICogMykge1xyXG4gICAgICAgICAgICAvLyBUT0RPIE9wdGltaXplXHJcbiAgICAgICAgICAgIHBvc2l0aW9ucyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KGxlbiAqIDMpO1xyXG4gICAgICAgICAgICBub3JtYWxzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KGxlbiAqIDMpO1xyXG4gICAgICAgICAgICBpZiAoaGFzVXZBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHV2cyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMudGV4Y29vcmQwLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShsZW4gKiAyKTtcclxuICAgICAgICAgICAgICAgIHV2czIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMS52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkobGVuICogMik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpbnZBbmltVGlsZVggPSAxIC8gYW5pbVRpbGVYO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHBhcnRpY2xlID0gdGhpcy5fcGFydGljbGVzW2ldO1xyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gaSAqIDM7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMzsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnNbb2Zmc2V0ICsgal0gPSBwYXJ0aWNsZS5wb3NpdGlvbi5hcnJheVtqXTtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbb2Zmc2V0XSA9IHBhcnRpY2xlLmFnZSAvIHBhcnRpY2xlLmxpZmU7XHJcbiAgICAgICAgICAgICAgICAvLyBub3JtYWxzW29mZnNldCArIDFdID0gcGFydGljbGUucm90YXRpb247XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW29mZnNldCArIDFdID0gMDtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbb2Zmc2V0ICsgMl0gPSBwYXJ0aWNsZS5zcHJpdGVTaXplO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBvZmZzZXQyID0gaSAqIDI7XHJcbiAgICAgICAgICAgIGlmIChoYXNVdkFuaW1hdGlvbikge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICAgICAgdmFyIHAgPSBwYXJ0aWNsZS5hZ2UgLyBwYXJ0aWNsZS5saWZlO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0YWdlID0gTWF0aC5yb3VuZChwICogKG5VdkFuaW1GcmFtZSAtIDEpKSAqIGFuaW1SZXBlYXQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgdiA9IE1hdGguZmxvb3Ioc3RhZ2UgKiBpbnZBbmltVGlsZVgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHUgPSBzdGFnZSAtIHYgKiBhbmltVGlsZVg7XHJcbiAgICAgICAgICAgICAgICB1dnNbb2Zmc2V0Ml0gPSB1IC8gYW5pbVRpbGVYO1xyXG4gICAgICAgICAgICAgICAgdXZzW29mZnNldDIgKyAxXSA9IDEgLSB2IC8gYW5pbVRpbGVZO1xyXG4gICAgICAgICAgICAgICAgdXZzMltvZmZzZXQyXSA9ICh1ICsgMSkgLyBhbmltVGlsZVg7XHJcbiAgICAgICAgICAgICAgICB1dnMyW29mZnNldDIgKyAxXSA9IDEgLSAodiArIDEpIC8gYW5pbVRpbGVZO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZW9tZXRyeS5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzRmluaXNoZWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9lbGFwc2VkVGltZSA+IHRoaXMuZHVyYXRpb24gJiYgIXRoaXMubG9vcDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbihyZW5kZXJlcikge1xyXG4gICAgICAgIC8vIFB1dCBhbGwgdGhlIHBhcnRpY2xlcyBiYWNrXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHAgPSB0aGlzLl9wYXJ0aWNsZXNbaV07XHJcbiAgICAgICAgICAgIHAuZW1pdHRlci5raWxsKHApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdlb21ldHJ5LmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIC8vIFRPRE8gRGlzcG9zZSB0ZXh0dXJlID9cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LnBhcnRpY2xlLlBhcnRpY2xlUmVuZGVyYWJsZX1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBwYXJ0aWNsZVJlbmRlcmFibGUgPSBuZXcgUGFydGljbGVSZW5kZXJhYmxlKHtcclxuICAgICAgICAgICAgbWF0ZXJpYWw6IHRoaXMubWF0ZXJpYWxcclxuICAgICAgICB9KTtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUubG9vcCA9IHRoaXMubG9vcDtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuZHVyYXRpb24gPSB0aGlzLmR1cmF0aW9uO1xyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5vbmVzaG90ID0gdGhpcy5vbmVzaG90O1xyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5zcHJpdGVBbmltYXRpb25SZXBlYXQgPSB0aGlzLnNwcml0ZUFuaW1hdGlvblJlcGVhdDtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuc3ByaXRlQW5pbWF0aW9uVGlsZVkgPSB0aGlzLnNwcml0ZUFuaW1hdGlvblRpbGVZO1xyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5zcHJpdGVBbmltYXRpb25UaWxlWCA9IHRoaXMuc3ByaXRlQW5pbWF0aW9uVGlsZVg7XHJcblxyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5wb3NpdGlvbi5jb3B5KHRoaXMucG9zaXRpb24pO1xyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5yb3RhdGlvbi5jb3B5KHRoaXMucm90YXRpb24pO1xyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5zY2FsZS5jb3B5KHRoaXMuc2NhbGUpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5hZGQodGhpcy5fY2hpbGRyZW5baV0uY2xvbmUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXJ0aWNsZVJlbmRlcmFibGU7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGFydGljbGVSZW5kZXJhYmxlO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5waWNraW5nLmNvbG9yLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52b2lkIG1haW4oKXtcXG4gdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4gI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiAjZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxufVxcbkBlbmRcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnBpY2tpbmcuY29sb3IuZnJhZ21lbnRcXG51bmlmb3JtIHZlYzQgY29sb3IgOiBbMS4wLCAxLjAsIDEuMCwgMS4wXTtcXG52b2lkIG1haW4oKSB7XFxuIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5cclxuaW1wb3J0IGNvbG9yRXNzbCBmcm9tICcuL2NvbG9yLmdsc2wuanMnO1xyXG5TaGFkZXIuaW1wb3J0KGNvbG9yRXNzbCk7XHJcblxyXG4vKipcclxuICogUGl4ZWwgcGlja2luZyBpcyBncHUgYmFzZWQgcGlja2luZywgd2hpY2ggaXMgZmFzdCBhbmQgYWNjdXJhdGUuXHJcbiAqIEJ1dCBub3QgbGlrZSByYXkgcGlja2luZywgaXQgY2FuJ3QgZ2V0IHRoZSBpbnRlcnNlY3Rpb24gcG9pbnQgYW5kIHRyaWFuZ2xlLlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5waWNraW5nLlBpeGVsUGlja2luZ1xyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIFBpeGVsUGlja2luZyA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5waWNraW5nLlBpeGVsUGlja2luZyMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRhcmdldCByZW5kZXJlclxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlJlbmRlcmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlbmRlcmVyOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERvd25zYW1wbGUgcmF0aW8gb2YgaGlkZGVuIGZyYW1lIGJ1ZmZlclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZG93blNhbXBsZVJhdGlvOiAxLFxyXG5cclxuICAgICAgICB3aWR0aDogMTAwLFxyXG4gICAgICAgIGhlaWdodDogMTAwLFxyXG5cclxuICAgICAgICBsb29rdXBPZmZzZXQ6IDEsXHJcblxyXG4gICAgICAgIF9mcmFtZUJ1ZmZlcjogbnVsbCxcclxuICAgICAgICBfdGV4dHVyZTogbnVsbCxcclxuICAgICAgICBfc2hhZGVyOiBudWxsLFxyXG5cclxuICAgICAgICBfaWRNYXRlcmlhbHM6IFtdLFxyXG4gICAgICAgIF9sb29rdXBUYWJsZTogW10sXHJcblxyXG4gICAgICAgIF9tZXNoTWF0ZXJpYWxzOiBbXSxcclxuXHJcbiAgICAgICAgX2lkT2Zmc2V0OiAwXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMucmVuZGVyZXIuZ2V0V2lkdGgoKTtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuZ2V0SGVpZ2h0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pbml0KCk7XHJcbn0sIC8qKiBAbGVuZHMgY2xheS5waWNraW5nLlBpeGVsUGlja2luZy5wcm90b3R5cGUgKi8ge1xyXG4gICAgX2luaXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGggKiB0aGlzLmRvd25TYW1wbGVSYXRpbyxcclxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCAqIHRoaXMuZG93blNhbXBsZVJhdGlvXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2hhZGVyID0gbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LnBpY2tpbmcuY29sb3IudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucGlja2luZy5jb2xvci5mcmFnbWVudCcpKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFNldCBwaWNraW5nIHByZXNpc2lvblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhdGlvXHJcbiAgICAgKi9cclxuICAgIHNldFByZWNpc2lvbjogZnVuY3Rpb24ocmF0aW8pIHtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlLndpZHRoID0gdGhpcy53aWR0aCAqIHJhdGlvO1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgKiByYXRpbztcclxuICAgICAgICB0aGlzLmRvd25TYW1wbGVSYXRpbyA9IHJhdGlvO1xyXG4gICAgfSxcclxuICAgIHJlc2l6ZTogZnVuY3Rpb24od2lkdGgsIGhlaWdodCkge1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmUud2lkdGggPSB3aWR0aCAqIHRoaXMuZG93blNhbXBsZVJhdGlvO1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5kb3duU2FtcGxlUmF0aW87XHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmUuZGlydHkoKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0aGUgcGlja2luZyBmcmFtZWJ1ZmZlclxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhdGlvXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24oc2NlbmUsIGNhbWVyYSkge1xyXG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcbiAgICAgICAgaWYgKHJlbmRlcmVyLmdldFdpZHRoKCkgIT09IHRoaXMud2lkdGggfHwgcmVuZGVyZXIuZ2V0SGVpZ2h0KCkgIT09IHRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzaXplKHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRoaXMuX3RleHR1cmUpO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2lkT2Zmc2V0ID0gdGhpcy5sb29rdXBPZmZzZXQ7XHJcbiAgICAgICAgdGhpcy5fc2V0TWF0ZXJpYWwoc2NlbmUpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTtcclxuICAgICAgICB0aGlzLl9yZXN0b3JlTWF0ZXJpYWwoKTtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfc2V0TWF0ZXJpYWw6IGZ1bmN0aW9uKHJvb3QpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0wOyBpIDwgcm9vdC5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkID0gcm9vdC5fY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5nZW9tZXRyeSAmJiBjaGlsZC5tYXRlcmlhbCAmJiBjaGlsZC5tYXRlcmlhbC5zaGFkZXIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpZCA9IHRoaXMuX2lkT2Zmc2V0Kys7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gaWQgLSB0aGlzLmxvb2t1cE9mZnNldDtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IHRoaXMuX2lkTWF0ZXJpYWxzW2lkeF07XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXI6IHRoaXMuX3NoYWRlclxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IHBhY2tJRChpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3JbMF0gLz0gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yWzFdIC89IDI1NTtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvclsyXSAvPSAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3JbM10gPSAxLjA7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdjb2xvcicsIGNvbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pZE1hdGVyaWFsc1tpZHhdID0gbWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXNoTWF0ZXJpYWxzW2lkeF0gPSBjaGlsZC5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvb2t1cFRhYmxlW2lkeF0gPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgIGNoaWxkLm1hdGVyaWFsID0gbWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNoaWxkLl9jaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldE1hdGVyaWFsKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaWNrIHRoZSBvYmplY3RcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0geCBNb3VzZSBwb3NpdGlvbiB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHkgTW91c2UgcG9zaXRpb24geVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICBwaWNrOiBmdW5jdGlvbih4LCB5KSB7XHJcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcclxuXHJcbiAgICAgICAgdmFyIHJhdGlvID0gdGhpcy5kb3duU2FtcGxlUmF0aW87XHJcbiAgICAgICAgeCA9IE1hdGguY2VpbChyYXRpbyAqIHgpO1xyXG4gICAgICAgIHkgPSBNYXRoLmNlaWwocmF0aW8gKiAodGhpcy5oZWlnaHQgLSB5KSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgIHZhciBwaXhlbCA9IG5ldyBVaW50OEFycmF5KDQpO1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICAvLyBUT0RPIG91dCBvZiBib3VuZHMgP1xyXG4gICAgICAgIC8vIHByZXNlcnZlRHJhd2luZ0J1ZmZlciA/XHJcbiAgICAgICAgX2dsLnJlYWRQaXhlbHMoeCwgeSwgMSwgMSwgX2dsLlJHQkEsIF9nbC5VTlNJR05FRF9CWVRFLCBwaXhlbCk7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAvLyBTa2lwIGludGVycG9sYXRlZCBwaXhlbCBiZWNhdXNlIG9mIGFudGkgYWxpYXNcclxuICAgICAgICBpZiAocGl4ZWxbM10gPT09IDI1NSkge1xyXG4gICAgICAgICAgICB2YXIgaWQgPSB1bnBhY2tJRChwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdKTtcclxuICAgICAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZWwgPSB0aGlzLl9sb29rdXBUYWJsZVtpZCAtIHRoaXMubG9va3VwT2Zmc2V0XTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3Jlc3RvcmVNYXRlcmlhbDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9sb29rdXBUYWJsZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9sb29rdXBUYWJsZVtpXS5tYXRlcmlhbCA9IHRoaXMuX21lc2hNYXRlcmlhbHNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbihyZW5kZXJlcikge1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmZ1bmN0aW9uIHBhY2tJRChpZCl7XHJcbiAgICB2YXIgciA9IGlkID4+IDE2O1xyXG4gICAgdmFyIGcgPSAoaWQgLSAociA8PCA4KSkgPj4gODtcclxuICAgIHZhciBiID0gaWQgLSAociA8PCAxNikgLSAoZzw8OCk7XHJcbiAgICByZXR1cm4gW3IsIGcsIGJdO1xyXG59XHJcblxyXG5mdW5jdGlvbiB1bnBhY2tJRChyLCBnLCBiKXtcclxuICAgIHJldHVybiAociA8PCAxNikgKyAoZzw8OCkgKyBiO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQaXhlbFBpY2tpbmc7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5cclxudmFyIGRvYyA9IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgPyB7fSA6IGRvY3VtZW50O1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBsdWdpbi5GcmVlQ29udHJvbFxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgdmFyIGNvbnRyb2wgPSBuZXcgY2xheS5wbHVnaW4uRnJlZUNvbnRyb2woe1xyXG4gKiAgICAgICAgIHRhcmdldDogY2FtZXJhLFxyXG4gKiAgICAgICAgIGRvbUVsZW1lbnQ6IHJlbmRlcmVyLmNhbnZhc1xyXG4gKiAgICAgfSk7XHJcbiAqICAgICAuLi5cclxuICogICAgIHRpbWVsaW5lLm9uKCdmcmFtZScsIGZ1bmN0aW9uKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgIGNvbnRyb2wudXBkYXRlKGZyYW1lVGltZSk7XHJcbiAqICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xyXG4gKiAgICAgfSk7XHJcbiAqL1xyXG52YXIgRnJlZUNvbnRyb2wgPSBCYXNlLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkucGx1Z2luLkZyZWVDb250cm9sIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2NlbmUgbm9kZSB0byBjb250cm9sLCBtb3N0bHkgaXQgaXMgYSBjYW1lcmFcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRhcmdldDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGFyZ2V0IGRvbSB0byBiaW5kIHdpdGggbW91c2UgZXZlbnRzXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRvbUVsZW1lbnQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1vdXNlIG1vdmUgc2Vuc2l0aXZpdHlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNlbnNpdGl2aXR5OiAxLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUYXJnZXQgbW92ZSBzcGVlZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc3BlZWQ6IDAuNCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVXAgYXhpc1xyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdXA6IG5ldyBWZWN0b3IzKDAsIDEsIDApLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBsb2NrIHZlcnRpY2FsIG1vdmVtZW50XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdmVydGljYWxNb3ZlTG9jazogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRpbWVsaW5lfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRpbWVsaW5lOiBudWxsLFxyXG5cclxuICAgICAgICBfbW92ZUZvcndhcmQ6IGZhbHNlLFxyXG4gICAgICAgIF9tb3ZlQmFja3dhcmQ6IGZhbHNlLFxyXG4gICAgICAgIF9tb3ZlTGVmdDogZmFsc2UsXHJcbiAgICAgICAgX21vdmVSaWdodDogZmFsc2UsXHJcblxyXG4gICAgICAgIF9vZmZzZXRQaXRjaDogMCxcclxuICAgICAgICBfb2Zmc2V0Um9sbDogMFxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLl9sb2NrQ2hhbmdlID0gdGhpcy5fbG9ja0NoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fa2V5RG93biA9IHRoaXMuX2tleURvd24uYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX2tleVVwID0gdGhpcy5fa2V5VXAuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX21vdXNlTW92ZSA9IHRoaXMuX21vdXNlTW92ZS5iaW5kKHRoaXMpO1xyXG5cclxuICAgIGlmICh0aGlzLmRvbUVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5GcmVlQ29udHJvbC5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBpbml0IGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgaW5pdDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gVXNlIHBvaW50ZXIgbG9ja1xyXG4gICAgICAgIC8vIGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL3BvaW50ZXJsb2NrL2ludHJvL1xyXG4gICAgICAgIHZhciBlbCA9IHRoaXMuZG9tRWxlbWVudDtcclxuXHJcbiAgICAgICAgLy9NdXN0IHJlcXVlc3QgcG9pbnRlciBsb2NrIGFmdGVyIGNsaWNrIGV2ZW50LCBjYW4ndCBub3QgZG8gaXQgZGlyZWN0bHlcclxuICAgICAgICAvL1doeSA/ID9cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ2NsaWNrJywgdGhpcy5fcmVxdWVzdFBvaW50ZXJMb2NrKTtcclxuXHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9jLCAncG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLl9sb2NrQ2hhbmdlKTtcclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb2MsICdtb3pwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvYywgJ3dlYmtpdHBvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5fbG9ja0NoYW5nZSk7XHJcblxyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvYywgJ2tleWRvd24nLCB0aGlzLl9rZXlEb3duKTtcclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb2MsICdrZXl1cCcsIHRoaXMuX2tleVVwKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGltZWxpbmUpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lbGluZS5vbignZnJhbWUnLCB0aGlzLl9kZXRlY3RNb3ZlbWVudENoYW5nZSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgY29udHJvbFxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIGVsID0gdGhpcy5kb21FbGVtZW50O1xyXG5cclxuICAgICAgICBlbC5leGl0UG9pbnRlckxvY2sgPSBlbC5leGl0UG9pbnRlckxvY2tcclxuICAgICAgICAgICAgfHwgZWwubW96RXhpdFBvaW50ZXJMb2NrXHJcbiAgICAgICAgICAgIHx8IGVsLndlYmtpdEV4aXRQb2ludGVyTG9jaztcclxuXHJcbiAgICAgICAgaWYgKGVsLmV4aXRQb2ludGVyTG9jaykge1xyXG4gICAgICAgICAgICBlbC5leGl0UG9pbnRlckxvY2soKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGVsLCAnY2xpY2snLCB0aGlzLl9yZXF1ZXN0UG9pbnRlckxvY2spO1xyXG5cclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2MsICdwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvYywgJ21venBvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5fbG9ja0NoYW5nZSk7XHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9jLCAnd2Via2l0cG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLl9sb2NrQ2hhbmdlKTtcclxuXHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9jLCAna2V5ZG93bicsIHRoaXMuX2tleURvd24pO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvYywgJ2tleXVwJywgdGhpcy5fa2V5VXApO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aW1lbGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lLm9mZignZnJhbWUnLCB0aGlzLl9kZXRlY3RNb3ZlbWVudENoYW5nZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfcmVxdWVzdFBvaW50ZXJMb2NrOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgZWwgPSB0aGlzO1xyXG4gICAgICAgIGVsLnJlcXVlc3RQb2ludGVyTG9jayA9IGVsLnJlcXVlc3RQb2ludGVyTG9ja1xyXG4gICAgICAgICAgICB8fCBlbC5tb3pSZXF1ZXN0UG9pbnRlckxvY2tcclxuICAgICAgICAgICAgfHwgZWwud2Via2l0UmVxdWVzdFBvaW50ZXJMb2NrO1xyXG5cclxuICAgICAgICBlbC5yZXF1ZXN0UG9pbnRlckxvY2soKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250cm9sIHVwZGF0ZS4gU2hvdWxkIGJlIGludm9rZWQgZXZlcnkgZnJhbWVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcmFtZVRpbWUgRnJhbWUgdGltZVxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChmcmFtZVRpbWUpIHtcclxuICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XHJcblxyXG4gICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMudGFyZ2V0LnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS54Lm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgIHZhciB6QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS56Lm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy52ZXJ0aWNhbE1vdmVMb2NrKSB7XHJcbiAgICAgICAgICAgIHpBeGlzLnkgPSAwO1xyXG4gICAgICAgICAgICB6QXhpcy5ub3JtYWxpemUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzcGVlZCA9IHRoaXMuc3BlZWQgKiBmcmFtZVRpbWUgLyAyMDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX21vdmVGb3J3YXJkKSB7XHJcbiAgICAgICAgICAgIC8vIE9wcG9zaXRlIGRpcmVjdGlvbiBvZiB6XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHpBeGlzLCAtc3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZUJhY2t3YXJkKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHpBeGlzLCBzcGVlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlTGVmdCkge1xyXG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh4QXhpcywgLXNwZWVkIC8gMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlUmlnaHQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoeEF4aXMsIHNwZWVkIC8gMik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0YXJnZXQucm90YXRlQXJvdW5kKHRhcmdldC5wb3NpdGlvbiwgdGhpcy51cCwgLXRoaXMuX29mZnNldFBpdGNoICogZnJhbWVUaW1lICogTWF0aC5QSSAvIDM2MCk7XHJcbiAgICAgICAgdmFyIHhBeGlzID0gdGFyZ2V0LmxvY2FsVHJhbnNmb3JtLng7XHJcbiAgICAgICAgdGFyZ2V0LnJvdGF0ZUFyb3VuZCh0YXJnZXQucG9zaXRpb24sIHhBeGlzLCAtdGhpcy5fb2Zmc2V0Um9sbCAqIGZyYW1lVGltZSAqIE1hdGguUEkgLyAzNjApO1xyXG5cclxuICAgICAgICB0aGlzLl9vZmZzZXRSb2xsID0gdGhpcy5fb2Zmc2V0UGl0Y2ggPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICBfbG9ja0NoYW5nZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBkb2MucG9pbnRlckxvY2tFbGVtZW50ID09PSB0aGlzLmRvbUVsZW1lbnRcclxuICAgICAgICAgICAgfHwgZG9jLm1velBvaW50ZXJMb2NrRWxlbWVudCA9PT0gdGhpcy5kb21FbGVtZW50XHJcbiAgICAgICAgICAgIHx8IGRvYy53ZWJraXRQb2ludGVyTG9ja0VsZW1lbnQgPT09IHRoaXMuZG9tRWxlbWVudFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb2MsICdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmUsIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvYywgJ21vdXNlbW92ZScsIHRoaXMuX21vdXNlTW92ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfbW91c2VNb3ZlOiBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgdmFyIGR4ID0gZS5tb3ZlbWVudFggfHwgZS5tb3pNb3ZlbWVudFggfHwgZS53ZWJraXRNb3ZlbWVudFggfHwgMDtcclxuICAgICAgICB2YXIgZHkgPSBlLm1vdmVtZW50WSB8fCBlLm1vek1vdmVtZW50WSB8fCBlLndlYmtpdE1vdmVtZW50WSB8fCAwO1xyXG5cclxuICAgICAgICB0aGlzLl9vZmZzZXRQaXRjaCArPSBkeCAqIHRoaXMuc2Vuc2l0aXZpdHkgLyAyMDA7XHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0Um9sbCArPSBkeSAqIHRoaXMuc2Vuc2l0aXZpdHkgLyAyMDA7XHJcblxyXG4gICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGV2ZW50IHRvIHJlbWluZCByZW5kZXJlciBkbyByZW5kZXJcclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2NoYW5nZScpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZGV0ZWN0TW92ZW1lbnRDaGFuZ2U6IGZ1bmN0aW9uIChmcmFtZVRpbWUpIHtcclxuICAgICAgICBpZiAodGhpcy5fbW92ZUZvcndhcmQgfHwgdGhpcy5fbW92ZUJhY2t3YXJkIHx8IHRoaXMuX21vdmVMZWZ0IHx8IHRoaXMuX21vdmVSaWdodCkge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2NoYW5nZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0ZShmcmFtZVRpbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfa2V5RG93bjogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIHN3aXRjaChlLmtleUNvZGUpIHtcclxuICAgICAgICAgICAgY2FzZSA4NzogLy93XHJcbiAgICAgICAgICAgIGNhc2UgMzc6IC8vdXAgYXJyb3dcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVGb3J3YXJkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDgzOiAvL3NcclxuICAgICAgICAgICAgY2FzZSA0MDogLy9kb3duIGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlQmFja3dhcmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNjU6IC8vYVxyXG4gICAgICAgICAgICBjYXNlIDM3OiAvL2xlZnQgYXJyb3dcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVMZWZ0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDY4OiAvL2RcclxuICAgICAgICAgICAgY2FzZSAzOTogLy9yaWdodCBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZVJpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBldmVudCB0byByZW1pbmQgcmVuZGVyZXIgZG8gcmVuZGVyXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2UnKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2tleVVwOiBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgc3dpdGNoKGUua2V5Q29kZSkge1xyXG4gICAgICAgICAgICBjYXNlIDg3OiAvL3dcclxuICAgICAgICAgICAgY2FzZSAzNzogLy91cCBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUZvcndhcmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDgzOiAvL3NcclxuICAgICAgICAgICAgY2FzZSA0MDogLy9kb3duIGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlQmFja3dhcmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDY1OiAvL2FcclxuICAgICAgICAgICAgY2FzZSAzNzogLy9sZWZ0IGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlTGVmdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNjg6IC8vZFxyXG4gICAgICAgICAgICBjYXNlIDM5OiAvL3JpZ2h0IGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlUmlnaHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGcmVlQ29udHJvbDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XHJcblxyXG4vKipcclxuICogR2FtZXBhZCBDb250cm9sIHBsdWdpbi5cclxuICpcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGx1Z2luLkdhbWVwYWRDb250cm9sXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgaW5pdDogZnVuY3Rpb24oYXBwKSB7XHJcbiAqICAgICB0aGlzLl9nYW1lcGFkQ29udHJvbCA9IG5ldyBjbGF5LnBsdWdpbi5HYW1lcGFkQ29udHJvbCh7XHJcbiAqICAgICAgICAgdGFyZ2V0OiBjYW1lcmEsXHJcbiAqICAgICAgICAgb25TdGFuZGFyZEdhbWVwYWRSZWFkeTogY3VzdG9tQ2FsbGJhY2tcclxuICogICAgIH0pO1xyXG4gKiAgIH0sXHJcbiAqXHJcbiAqICAgbG9vcDogZnVuY3Rpb24oYXBwKSB7XHJcbiAqICAgICB0aGlzLl9nYW1lcGFkQ29udHJvbC51cGRhdGUoYXBwLmZyYW1lVGltZSk7XHJcbiAqICAgfVxyXG4gKi9cclxudmFyIEdhbWVwYWRDb250cm9sID0gQmFzZS5leHRlbmQoZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5wbHVnaW4uR2FtZXBhZENvbnRyb2wjICovIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2NlbmUgbm9kZSB0byBjb250cm9sLCBtb3N0bHkgaXQgaXMgYSBjYW1lcmEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRhcmdldDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTW92ZSBzcGVlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbW92ZVNwZWVkOiAwLjEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIExvb2sgYXJvdW5kIHNwZWVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBsb29rQXJvdW5kU3BlZWQ6IDAuMSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVXAgYXhpcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdXA6IG5ldyBWZWN0b3IzKDAsIDEsIDApLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lbGluZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRpbWVsaW5lfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRpbWVsaW5lOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhIHN0YW5kYXJkIGdhbWVwYWQgaXMgcmVhZHkgdG8gdXNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uU3RhbmRhcmRHYW1lcGFkUmVhZHk6IGZ1bmN0aW9uKGdhbWVwYWQpe30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGEgZ2FtZXBhZCBpcyBkaXNjb25uZWN0ZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb25HYW1lcGFkRGlzY29ubmVjdGVkOiBmdW5jdGlvbihnYW1lcGFkKXt9LFxyXG5cclxuICAgICAgICAvLyBQcml2YXRlIHByb3BlcnRpZXM6XHJcblxyXG4gICAgICAgIF9tb3ZlRm9yd2FyZDogZmFsc2UsXHJcbiAgICAgICAgX21vdmVCYWNrd2FyZDogZmFsc2UsXHJcbiAgICAgICAgX21vdmVMZWZ0OiBmYWxzZSxcclxuICAgICAgICBfbW92ZVJpZ2h0OiBmYWxzZSxcclxuXHJcbiAgICAgICAgX29mZnNldFBpdGNoOiAwLFxyXG4gICAgICAgIF9vZmZzZXRSb2xsOiAwLFxyXG5cclxuICAgICAgICBfY29ubmVjdGVkR2FtZXBhZEluZGV4OiAwLFxyXG4gICAgICAgIF9zdGFuZGFyZEdhbWVwYWRBdmFpbGFibGU6IGZhbHNlLFxyXG4gICAgICAgIF9nYW1lcGFkQXhpc1RocmVzaG9sZDogMC4zXHJcblxyXG4gICAgfTtcclxuXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIHRoaXMuX2NoZWNrR2FtZXBhZENvbXBhdGliaWxpdHkgPSB0aGlzLl9jaGVja0dhbWVwYWRDb21wYXRpYmlsaXR5LmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9kaXNjb25uZWN0R2FtZXBhZCA9IHRoaXMuX2Rpc2Nvbm5lY3RHYW1lcGFkLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9nZXRTdGFuZGFyZEdhbWVwYWQgPSB0aGlzLl9nZXRTdGFuZGFyZEdhbWVwYWQuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX3NjYW5QcmVzc2VkR2FtZXBhZEJ1dHRvbnMgPSB0aGlzLl9zY2FuUHJlc3NlZEdhbWVwYWRCdXR0b25zLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9zY2FuSW5jbGluZWRHYW1lcGFkQXhlcyA9IHRoaXMuX3NjYW5JbmNsaW5lZEdhbWVwYWRBeGVzLmJpbmQodGhpcyk7XHJcblxyXG4gICAgdGhpcy51cGRhdGUgPSB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpO1xyXG5cclxuICAgIC8vIElmIGJyb3dzZXIgc3VwcG9ydHMgR2FtZXBhZCBBUEk6XHJcbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvci5nZXRHYW1lcGFkcyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5HYW1lcGFkQ29udHJvbC5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0LiBjb250cm9sLlxyXG4gICAgICovXHJcbiAgICBpbml0OiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hlbiB1c2VyIGJlZ2lucyB0byBpbnRlcmFjdCB3aXRoIGNvbm5lY3RlZCBnYW1lcGFkOlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vZ2FtZXBhZC8jZG9tLWdhbWVwYWRldmVudFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKHdpbmRvdywgJ2dhbWVwYWRjb25uZWN0ZWQnLCB0aGlzLl9jaGVja0dhbWVwYWRDb21wYXRpYmlsaXR5KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGltZWxpbmUpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lbGluZS5vbignZnJhbWUnLCB0aGlzLnVwZGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csICdnYW1lcGFkZGlzY29ubmVjdGVkJywgdGhpcy5fZGlzY29ubmVjdEdhbWVwYWQpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGNvbnRyb2wuXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3csICdnYW1lcGFkY29ubmVjdGVkJywgdGhpcy5fY2hlY2tHYW1lcGFkQ29tcGF0aWJpbGl0eSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZWxpbmUub2ZmKCdmcmFtZScsIHRoaXMudXBkYXRlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKHdpbmRvdywgJ2dhbWVwYWRkaXNjb25uZWN0ZWQnLCB0aGlzLl9kaXNjb25uZWN0R2FtZXBhZCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnRyb2wncyB1cGRhdGUuIFNob3VsZCBiZSBpbnZva2VkIGV2ZXJ5IGZyYW1lLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcmFtZVRpbWUgRnJhbWUgdGltZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fc3RhbmRhcmRHYW1lcGFkQXZhaWxhYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NjYW5QcmVzc2VkR2FtZXBhZEJ1dHRvbnMoKTtcclxuICAgICAgICB0aGlzLl9zY2FuSW5jbGluZWRHYW1lcGFkQXhlcygpO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGFyZ2V0IGRlcGVuZGluZyBvbiB1c2VyIGlucHV0LlxyXG5cclxuICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XHJcblxyXG4gICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMudGFyZ2V0LnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS54Lm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgIHZhciB6QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS56Lm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2YXIgbW92ZVNwZWVkID0gdGhpcy5tb3ZlU3BlZWQgKiBmcmFtZVRpbWUgLyAyMDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX21vdmVGb3J3YXJkKSB7XHJcbiAgICAgICAgICAgIC8vIE9wcG9zaXRlIGRpcmVjdGlvbiBvZiB6LlxyXG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh6QXhpcywgLW1vdmVTcGVlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlQmFja3dhcmQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoekF4aXMsIG1vdmVTcGVlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlTGVmdCkge1xyXG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh4QXhpcywgLW1vdmVTcGVlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlUmlnaHQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoeEF4aXMsIG1vdmVTcGVlZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0YXJnZXQucm90YXRlQXJvdW5kKHRhcmdldC5wb3NpdGlvbiwgdGhpcy51cCwgLXRoaXMuX29mZnNldFBpdGNoICogZnJhbWVUaW1lICogTWF0aC5QSSAvIDM2MCk7XHJcbiAgICAgICAgdmFyIHhBeGlzID0gdGFyZ2V0LmxvY2FsVHJhbnNmb3JtLng7XHJcbiAgICAgICAgdGFyZ2V0LnJvdGF0ZUFyb3VuZCh0YXJnZXQucG9zaXRpb24sIHhBeGlzLCAtdGhpcy5fb2Zmc2V0Um9sbCAqIGZyYW1lVGltZSAqIE1hdGguUEkgLyAzNjApO1xyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIElmIG5lY2Vzc2FyeTogdHJpZ2dlciBgdXBkYXRlYCBldmVudC5cclxuICAgICAgICAgKiBYWFggVGhpcyBjYW4gZWNvbm9taXplIHJlbmRlcmluZyBPUHMuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYgKHRoaXMuX21vdmVGb3J3YXJkID09PSB0cnVlIHx8IHRoaXMuX21vdmVCYWNrd2FyZCA9PT0gdHJ1ZSB8fCB0aGlzLl9tb3ZlTGVmdCA9PT0gdHJ1ZVxyXG4gICAgICAgICAgICB8fCB0aGlzLl9tb3ZlUmlnaHQgPT09IHRydWUgfHwgdGhpcy5fb2Zmc2V0UGl0Y2ggIT09IDAgfHwgdGhpcy5fb2Zmc2V0Um9sbCAhPT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndXBkYXRlJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZXNldCB2YWx1ZXMgdG8gYXZvaWQgbG9zdCBvZiBjb250cm9sLlxyXG5cclxuICAgICAgICB0aGlzLl9tb3ZlRm9yd2FyZCA9IHRoaXMuX21vdmVCYWNrd2FyZCA9IHRoaXMuX21vdmVMZWZ0ID0gdGhpcy5fbW92ZVJpZ2h0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0UGl0Y2ggPSB0aGlzLl9vZmZzZXRSb2xsID0gMDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFByaXZhdGUgbWV0aG9kczpcclxuXHJcbiAgICBfY2hlY2tHYW1lcGFkQ29tcGF0aWJpbGl0eTogZnVuY3Rpb24oZXZlbnQpIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgY29ubmVjdGVkIGdhbWVwYWQgaGFzIGEgKipzdGFuZGFyZCoqIGxheW91dDpcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2dhbWVwYWQvI3JlbWFwcGluZyBhYm91dCBzdGFuZGFyZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAoZXZlbnQuZ2FtZXBhZC5tYXBwaW5nID09PSAnc3RhbmRhcmQnKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9zdGFuZGFyZEdhbWVwYWRJbmRleCA9IGV2ZW50LmdhbWVwYWQuaW5kZXg7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YW5kYXJkR2FtZXBhZEF2YWlsYWJsZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm9uU3RhbmRhcmRHYW1lcGFkUmVhZHkoZXZlbnQuZ2FtZXBhZCk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIF9kaXNjb25uZWN0R2FtZXBhZDogZnVuY3Rpb24oZXZlbnQpIHtcclxuXHJcbiAgICAgICAgdGhpcy5fc3RhbmRhcmRHYW1lcGFkQXZhaWxhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMub25HYW1lcGFkRGlzY29ubmVjdGVkKGV2ZW50LmdhbWVwYWQpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgX2dldFN0YW5kYXJkR2FtZXBhZDogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBuYXZpZ2F0b3IuZ2V0R2FtZXBhZHMoKVt0aGlzLl9zdGFuZGFyZEdhbWVwYWRJbmRleF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBfc2NhblByZXNzZWRHYW1lcGFkQnV0dG9uczogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBnYW1lcGFkQnV0dG9ucyA9IHRoaXMuX2dldFN0YW5kYXJkR2FtZXBhZCgpLmJ1dHRvbnM7XHJcblxyXG4gICAgICAgIC8vIEZvciBlYWNoIGdhbWVwYWQgYnV0dG9uOlxyXG4gICAgICAgIGZvciAodmFyIGdhbWVwYWRCdXR0b25JZCA9IDA7IGdhbWVwYWRCdXR0b25JZCA8IGdhbWVwYWRCdXR0b25zLmxlbmd0aDsgZ2FtZXBhZEJ1dHRvbklkKyspIHtcclxuXHJcbiAgICAgICAgICAgIC8vIEdldCB1c2VyIGlucHV0LlxyXG4gICAgICAgICAgICB2YXIgZ2FtZXBhZEJ1dHRvbiA9IGdhbWVwYWRCdXR0b25zW2dhbWVwYWRCdXR0b25JZF07XHJcblxyXG4gICAgICAgICAgICBpZiAoZ2FtZXBhZEJ1dHRvbi5wcmVzc2VkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChnYW1lcGFkQnV0dG9uSWQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRC1wYWQgVXBcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlRm9yd2FyZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBELXBhZCBEb3duXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUJhY2t3YXJkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEQtcGFkIExlZnRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlTGVmdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBELXBhZCBSaWdodFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVSaWdodCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgX3NjYW5JbmNsaW5lZEdhbWVwYWRBeGVzOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIGdhbWVwYWRBeGVzID0gdGhpcy5fZ2V0U3RhbmRhcmRHYW1lcGFkKCkuYXhlcztcclxuXHJcbiAgICAgICAgLy8gRm9yIGVhY2ggZ2FtZXBhZCBheGlzOlxyXG4gICAgICAgIGZvciAodmFyIGdhbWVwYWRBeGlzSWQgPSAwOyBnYW1lcGFkQXhpc0lkIDwgZ2FtZXBhZEF4ZXMubGVuZ3RoOyBnYW1lcGFkQXhpc0lkKyspIHtcclxuXHJcbiAgICAgICAgICAgIC8vIEdldCB1c2VyIGlucHV0LlxyXG4gICAgICAgICAgICB2YXIgZ2FtZXBhZEF4aXMgPSBnYW1lcGFkQXhlc1tnYW1lcGFkQXhpc0lkXTtcclxuXHJcbiAgICAgICAgICAgIC8vIFhYWCBXZSB1c2UgYSB0aHJlc2hvbGQgYmVjYXVzZSBheGVzIGFyZSBuZXZlciBuZXV0cmFsLlxyXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMoZ2FtZXBhZEF4aXMpID4gdGhpcy5fZ2FtZXBhZEF4aXNUaHJlc2hvbGQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGdhbWVwYWRBeGlzSWQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTGVmdCBzdGljayBYwrFcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVMZWZ0ID0gZ2FtZXBhZEF4aXMgPCAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlUmlnaHQgPSBnYW1lcGFkQXhpcyA+IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBMZWZ0IHN0aWNrIFnCsVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUZvcndhcmQgPSBnYW1lcGFkQXhpcyA8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVCYWNrd2FyZCA9IGdhbWVwYWRBeGlzID4gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFJpZ2h0IHN0aWNrIFjCsVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2Zmc2V0UGl0Y2ggKz0gZ2FtZXBhZEF4aXMgKiB0aGlzLmxvb2tBcm91bmRTcGVlZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFJpZ2h0IHN0aWNrIFnCsVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2Zmc2V0Um9sbCArPSBnYW1lcGFkQXhpcyAqIHRoaXMubG9va0Fyb3VuZFNwZWVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdhbWVwYWRDb250cm9sO1xyXG4iLCJ2YXIgR2VzdHVyZU1nciA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB0aGlzLl90cmFjayA9IFtdO1xyXG59O1xyXG5cclxuR2VzdHVyZU1nci5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IEdlc3R1cmVNZ3IsXHJcblxyXG4gICAgcmVjb2duaXplOiBmdW5jdGlvbiAoZXZlbnQsIHRhcmdldCwgcm9vdCkge1xyXG4gICAgICAgIHRoaXMuX2RvVHJhY2soZXZlbnQsIHRhcmdldCwgcm9vdCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlY29nbml6ZShldmVudCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2subGVuZ3RoID0gMDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgX2RvVHJhY2s6IGZ1bmN0aW9uIChldmVudCwgdGFyZ2V0LCByb290KSB7XHJcbiAgICAgICAgdmFyIHRvdWNoZXMgPSBldmVudC50YXJnZXRUb3VjaGVzO1xyXG5cclxuICAgICAgICBpZiAoIXRvdWNoZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRyYWNrSXRlbSA9IHtcclxuICAgICAgICAgICAgcG9pbnRzOiBbXSxcclxuICAgICAgICAgICAgdG91Y2hlczogW10sXHJcbiAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxyXG4gICAgICAgICAgICBldmVudDogZXZlbnRcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdG91Y2hlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdG91Y2ggPSB0b3VjaGVzW2ldO1xyXG4gICAgICAgICAgICB0cmFja0l0ZW0ucG9pbnRzLnB1c2goW3RvdWNoLmNsaWVudFgsIHRvdWNoLmNsaWVudFldKTtcclxuICAgICAgICAgICAgdHJhY2tJdGVtLnRvdWNoZXMucHVzaCh0b3VjaCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90cmFjay5wdXNoKHRyYWNrSXRlbSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZWNvZ25pemU6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiByZWNvZ25pemVycykge1xyXG4gICAgICAgICAgICBpZiAocmVjb2duaXplcnMuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGdlc3R1cmVJbmZvID0gcmVjb2duaXplcnNbZXZlbnROYW1lXSh0aGlzLl90cmFjaywgZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGdlc3R1cmVJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdlc3R1cmVJbmZvO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZnVuY3Rpb24gZGlzdChwb2ludFBhaXIpIHtcclxuICAgIHZhciBkeCA9IHBvaW50UGFpclsxXVswXSAtIHBvaW50UGFpclswXVswXTtcclxuICAgIHZhciBkeSA9IHBvaW50UGFpclsxXVsxXSAtIHBvaW50UGFpclswXVsxXTtcclxuXHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2VudGVyKHBvaW50UGFpcikge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICAocG9pbnRQYWlyWzBdWzBdICsgcG9pbnRQYWlyWzFdWzBdKSAvIDIsXHJcbiAgICAgICAgKHBvaW50UGFpclswXVsxXSArIHBvaW50UGFpclsxXVsxXSkgLyAyXHJcbiAgICBdO1xyXG59XHJcblxyXG52YXIgcmVjb2duaXplcnMgPSB7XHJcblxyXG4gICAgcGluY2g6IGZ1bmN0aW9uICh0cmFjaywgZXZlbnQpIHtcclxuICAgICAgICB2YXIgdHJhY2tMZW4gPSB0cmFjay5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmICghdHJhY2tMZW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHBpbmNoRW5kID0gKHRyYWNrW3RyYWNrTGVuIC0gMV0gfHwge30pLnBvaW50cztcclxuICAgICAgICB2YXIgcGluY2hQcmUgPSAodHJhY2tbdHJhY2tMZW4gLSAyXSB8fCB7fSkucG9pbnRzIHx8IHBpbmNoRW5kO1xyXG5cclxuICAgICAgICBpZiAocGluY2hQcmVcclxuICAgICAgICAgICAgJiYgcGluY2hQcmUubGVuZ3RoID4gMVxyXG4gICAgICAgICAgICAmJiBwaW5jaEVuZFxyXG4gICAgICAgICAgICAmJiBwaW5jaEVuZC5sZW5ndGggPiAxXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHZhciBwaW5jaFNjYWxlID0gZGlzdChwaW5jaEVuZCkgLyBkaXN0KHBpbmNoUHJlKTtcclxuICAgICAgICAgICAgIWlzRmluaXRlKHBpbmNoU2NhbGUpICYmIChwaW5jaFNjYWxlID0gMSk7XHJcblxyXG4gICAgICAgICAgICBldmVudC5waW5jaFNjYWxlID0gcGluY2hTY2FsZTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwaW5jaENlbnRlciA9IGNlbnRlcihwaW5jaEVuZCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnBpbmNoWCA9IHBpbmNoQ2VudGVyWzBdO1xyXG4gICAgICAgICAgICBldmVudC5waW5jaFkgPSBwaW5jaENlbnRlclsxXTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAncGluY2gnLFxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB0cmFja1swXS50YXJnZXQsXHJcbiAgICAgICAgICAgICAgICBldmVudDogZXZlbnRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHZXN0dXJlTWdyO1xyXG4iLCJpbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IFBsYW5lIGZyb20gJy4uL21hdGgvUGxhbmUnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgUmF5IGZyb20gJy4uL21hdGgvUmF5JztcclxuXHJcbnZhciB1dnMgPSBbWzAsIDBdLCBbMCwgMV0sIFsxLCAxXSwgWzEsIDBdXTtcclxudmFyIHRyaXMgPSBbMCwgMSwgMiwgMiwgMywgMF07XHJcblxyXG52YXIgSW5maW5pdGVQbGFuZSA9IE1lc2guZXh0ZW5kKHtcclxuXHJcbiAgICBjYW1lcmE6IG51bGwsXHJcblxyXG4gICAgcGxhbmU6IG51bGwsXHJcblxyXG4gICAgbWF4R3JpZDogMCxcclxuXHJcbiAgICAvLyBUT0RPXHJcbiAgICBmcnVzdHVtQ3VsbGluZzogZmFsc2VcclxuXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe1xyXG4gICAgICAgIGR5bmFtaWM6IHRydWVcclxuICAgIH0pO1xyXG4gICAgZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5pbml0KDYpO1xyXG4gICAgZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwuaW5pdCg2KTtcclxuICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXMudGV4Y29vcmQwLmluaXQoNik7XHJcbiAgICBnZW9tZXRyeS5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDYpO1xyXG5cclxuICAgIHRoaXMucGxhbmUgPSBuZXcgUGxhbmUoKTtcclxufSwge1xyXG5cclxuICAgIHVwZGF0ZUdlb21ldHJ5OiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciBjb29yZHMgPSB0aGlzLl91blByb2plY3RHcmlkKCk7XHJcbiAgICAgICAgaWYgKCFjb29yZHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcG9zaXRpb25BdHRyID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciBub3JtYWxBdHRyID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLm5vcm1hbDtcclxuICAgICAgICB2YXIgdGV4Y29vcmRzID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMDtcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuZ2VvbWV0cnkuaW5kaWNlcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGlkeCA9IHRyaXNbaV07XHJcbiAgICAgICAgICAgIHBvc2l0aW9uQXR0ci5zZXQoaSwgY29vcmRzW2lkeF0uYXJyYXkpO1xyXG4gICAgICAgICAgICBub3JtYWxBdHRyLnNldChpLCB0aGlzLnBsYW5lLm5vcm1hbC5hcnJheSk7XHJcbiAgICAgICAgICAgIHRleGNvb3Jkcy5zZXQoaSwgdXZzW2lkeF0pO1xyXG4gICAgICAgICAgICBpbmRpY2VzW2ldID0gaTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZW9tZXRyeS5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBodHRwOi8vZmlsZWFkbWluLmNzLmx0aC5zZS9ncmFwaGljcy90aGVzZXMvcHJvamVjdHMvcHJvamdyaWQvXHJcbiAgICBfdW5Qcm9qZWN0R3JpZDogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIHBsYW5lVmlld1NwYWNlID0gbmV3IFBsYW5lKCk7XHJcbiAgICAgICAgdmFyIGxpbmVzID0gW1xyXG4gICAgICAgICAgICAwLCAxLCAwLCAyLCAxLCAzLCAyLCAzLFxyXG4gICAgICAgICAgICA0LCA1LCA0LCA2LCA1LCA3LCA2LCA3LFxyXG4gICAgICAgICAgICAwLCA0LCAxLCA1LCAyLCA2LCAzLCA3XHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB2YXIgZW5kID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbiAgICAgICAgdmFyIHBvaW50cyA9IFtdO1xyXG5cclxuICAgICAgICAvLyAxLS0tLTJcclxuICAgICAgICAvLyB8ICAgIHxcclxuICAgICAgICAvLyAwLS0tLTNcclxuICAgICAgICB2YXIgY29vcmRzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcclxuICAgICAgICAgICAgY29vcmRzW2ldID0gbmV3IFZlY3RvcjMoMCwgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcmF5ID0gbmV3IFJheSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBwbGFuZVZpZXdTcGFjZS5jb3B5KHRoaXMucGxhbmUpO1xyXG4gICAgICAgICAgICBwbGFuZVZpZXdTcGFjZS5hcHBseVRyYW5zZm9ybSh0aGlzLmNhbWVyYS52aWV3TWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBmcnVzdHVtVmVydGljZXMgPSB0aGlzLmNhbWVyYS5mcnVzdHVtLnZlcnRpY2VzO1xyXG5cclxuICAgICAgICAgICAgdmFyIG5Qb2ludHMgPSAwO1xyXG4gICAgICAgICAgICAvLyBJbnRlcnNlY3Qgd2l0aCBsaW5lcyBvZiBmcnVzdHVtXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTI7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQuYXJyYXkgPSBmcnVzdHVtVmVydGljZXNbbGluZXNbaSAqIDJdXTtcclxuICAgICAgICAgICAgICAgIGVuZC5hcnJheSA9IGZydXN0dW1WZXJ0aWNlc1tsaW5lc1tpICogMiArIDFdXTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcG9pbnQgPSBwbGFuZVZpZXdTcGFjZS5pbnRlcnNlY3RMaW5lKHN0YXJ0LCBlbmQsIHBvaW50c1tuUG9pbnRzXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXBvaW50c1tuUG9pbnRzXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbblBvaW50c10gPSBwb2ludDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgblBvaW50cysrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChuUG9pbnRzID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuUG9pbnRzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHBvaW50c1tpXS5hcHBseVByb2plY3Rpb24odGhpcy5jYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIG1pblggPSBwb2ludHNbMF0uYXJyYXlbMF07XHJcbiAgICAgICAgICAgIHZhciBtaW5ZID0gcG9pbnRzWzBdLmFycmF5WzFdO1xyXG4gICAgICAgICAgICB2YXIgbWF4WCA9IHBvaW50c1swXS5hcnJheVswXTtcclxuICAgICAgICAgICAgdmFyIG1heFkgPSBwb2ludHNbMF0uYXJyYXlbMV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgblBvaW50czsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcG9pbnRzW2ldLmFycmF5WzBdKTtcclxuICAgICAgICAgICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBwb2ludHNbaV0uYXJyYXlbMV0pO1xyXG4gICAgICAgICAgICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIHBvaW50c1tpXS5hcnJheVswXSk7XHJcbiAgICAgICAgICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcG9pbnRzW2ldLmFycmF5WzFdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWluWCA9PSBtYXhYIHx8IG1pblkgPT0gbWF4WSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvb3Jkc1swXS5hcnJheVswXSA9IG1pblg7XHJcbiAgICAgICAgICAgIGNvb3Jkc1swXS5hcnJheVsxXSA9IG1pblk7XHJcbiAgICAgICAgICAgIGNvb3Jkc1sxXS5hcnJheVswXSA9IG1pblg7XHJcbiAgICAgICAgICAgIGNvb3Jkc1sxXS5hcnJheVsxXSA9IG1heFk7XHJcbiAgICAgICAgICAgIGNvb3Jkc1syXS5hcnJheVswXSA9IG1heFg7XHJcbiAgICAgICAgICAgIGNvb3Jkc1syXS5hcnJheVsxXSA9IG1heFk7XHJcbiAgICAgICAgICAgIGNvb3Jkc1szXS5hcnJheVswXSA9IG1heFg7XHJcbiAgICAgICAgICAgIGNvb3Jkc1szXS5hcnJheVsxXSA9IG1pblk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW1lcmEuY2FzdFJheShjb29yZHNbaV0sIHJheSk7XHJcbiAgICAgICAgICAgICAgICByYXkuaW50ZXJzZWN0UGxhbmUodGhpcy5wbGFuZSwgY29vcmRzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGNvb3JkcztcclxuICAgICAgICB9O1xyXG4gICAgfSkoKVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEluZmluaXRlUGxhbmU7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBWZWN0b3IyIGZyb20gJy4uL21hdGgvVmVjdG9yMic7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBHZXN0dXJlTWdyIGZyb20gJy4vR2VzdHVyZU1ncic7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuXHJcbnZhciBNT1VTRV9CVVRUT05fS0VZX01BUCA9IHtcclxuICAgIGxlZnQ6IDAsXHJcbiAgICBtaWRkbGU6IDEsXHJcbiAgICByaWdodDogMlxyXG59O1xyXG5cclxuZnVuY3Rpb24gZmlyc3ROb3ROdWxsKCkge1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGlmIChhcmd1bWVudHNbaV0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY29udmVydFRvQXJyYXkodmFsKSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkge1xyXG4gICAgICAgIHZhbCA9IFt2YWwsIHZhbF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG59XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LnBsdWdpbi5PcmJpdENvbnRyb2xcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBPcmJpdENvbnRyb2wgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5wbHVnaW4uT3JiaXRDb250cm9sIyAqLyB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRpbWVsaW5lfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRpbWVsaW5lOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZG9tRWxlbWVudDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0YXJnZXQ6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAgICAgKi9cclxuICAgICAgICBfY2VudGVyOiBuZXcgVmVjdG9yMygpLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNaW5pbXVtIGRpc3RhbmNlIHRvIHRoZSBjZW50ZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDAuNVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1pbkRpc3RhbmNlOiAwLjEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1heGltdW0gZGlzdGFuY2UgdG8gdGhlIGNlbnRlclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1heERpc3RhbmNlOiAxMDAwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBPbmx5IGF2YWlsYWJsZSB3aGVuIGNhbWVyYSBpcyBvcnRob2dyYXBoaWNcclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXhPcnRob2dyYXBoaWNTaXplOiAzMDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE9ubHkgYXZhaWxhYmxlIHdoZW4gY2FtZXJhIGlzIG9ydGhvZ3JhcGhpY1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1pbk9ydGhvZ3JhcGhpY1NpemU6IDMwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBc3BlY3Qgb2Ygb3J0aG9ncmFwaGljIGNhbWVyYVxyXG4gICAgICAgICAqIE9ubHkgYXZhaWxhYmxlIHdoZW4gY2FtZXJhIGlzIG9ydGhvZ3JhcGhpY1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9ydGhvZ3JhcGhpY0FzcGVjdDogMSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWluaW11bSBhbHBoYSByb3RhdGlvblxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1pbkFscGhhOiAtOTAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1heGltdW0gYWxwaGEgcm90YXRpb25cclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXhBbHBoYTogOTAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1pbmltdW0gYmV0YSByb3RhdGlvblxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1pbkJldGE6IC1JbmZpbml0eSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNYXhpbXVtIGJldGEgcm90YXRpb25cclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXhCZXRhOiBJbmZpbml0eSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU3RhcnQgYXV0byByb3RhdGluZyBhZnRlciBzdGlsbCBmb3IgdGhlIGdpdmVuIHRpbWVcclxuICAgICAgICAgKi9cclxuICAgICAgICBhdXRvUm90YXRlQWZ0ZXJTdGlsbDogMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRGlyZWN0aW9uIG9mIGF1dG9Sb3RhdGUuIGN3IG9yIGNjdyB3aGVuIGxvb2tpbmcgdG9wIGRvd24uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXV0b1JvdGF0ZURpcmVjdGlvbjogJ2N3JyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRGVncmVlIHBlciBzZWNvbmRcclxuICAgICAgICAgKi9cclxuICAgICAgICBhdXRvUm90YXRlU3BlZWQ6IDYwLFxyXG5cclxuICAgICAgICBwYW5Nb3VzZUJ1dHRvbjogJ21pZGRsZScsXHJcbiAgICAgICAgcm90YXRlTW91c2VCdXR0b246ICdsZWZ0JyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUGFuIG9yIHJvdGF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtTdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX21vZGU6ICdyb3RhdGUnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkYW1waW5nOiAwLjgsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJvdGF0ZVNlbnNpdGl2aXR5OiAxLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB6b29tU2Vuc2l0aXZpdHk6IDEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHBhblNlbnNpdGl2aXR5OiAxLFxyXG5cclxuICAgICAgICBfbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICAgICAgICBfcm90YXRpbmc6IGZhbHNlLFxyXG5cclxuICAgICAgICAvLyBSb3RhdGlvbiBhcm91bmQgeUF4aXNcclxuICAgICAgICBfcGhpOiAwLFxyXG4gICAgICAgIC8vIFJvdGF0aW9uIGFyb3VuZCB4QXhpc1xyXG4gICAgICAgIF90aGV0YTogMCxcclxuXHJcbiAgICAgICAgX21vdXNlWDogMCxcclxuICAgICAgICBfbW91c2VZOiAwLFxyXG5cclxuICAgICAgICBfcm90YXRlVmVsb2NpdHk6IG5ldyBWZWN0b3IyKCksXHJcblxyXG4gICAgICAgIF9wYW5WZWxvY2l0eTogbmV3IFZlY3RvcjIoKSxcclxuXHJcbiAgICAgICAgX2Rpc3RhbmNlOiAyMCxcclxuXHJcbiAgICAgICAgX3pvb21TcGVlZDogMCxcclxuXHJcbiAgICAgICAgX3N0aWxsVGltZW91dDogMCxcclxuXHJcbiAgICAgICAgX2FuaW1hdG9yczogW10sXHJcblxyXG4gICAgICAgIF9nZXN0dXJlTWdyOiBuZXcgR2VzdHVyZU1ncigpXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBFYWNoIE9yYml0Q29udHJvbCBoYXMgaXQncyBvd24gaGFuZGxlclxyXG4gICAgdGhpcy5fbW91c2VEb3duSGFuZGxlciA9IHRoaXMuX21vdXNlRG93bkhhbmRsZXIuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX21vdXNlV2hlZWxIYW5kbGVyID0gdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIgPSB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9tb3VzZVVwSGFuZGxlciA9IHRoaXMuX21vdXNlVXBIYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9waW5jaEhhbmRsZXIgPSB0aGlzLl9waW5jaEhhbmRsZXIuYmluZCh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxufSwgLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5PcmJpdENvbnRyb2wjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZS5cclxuICAgICAqIE1vdXNlIGV2ZW50IGJpbmRpbmdcclxuICAgICAqL1xyXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBkb20gPSB0aGlzLmRvbUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNoc3RhcnQnLCB0aGlzLl9tb3VzZURvd25IYW5kbGVyKTtcclxuXHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2Vkb3duJywgdGhpcy5fbW91c2VEb3duSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9tLCAnd2hlZWwnLCB0aGlzLl9tb3VzZVdoZWVsSGFuZGxlcik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZWxpbmUub24oJ2ZyYW1lJywgdGhpcy51cGRhdGUsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy50YXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWNvbXBvc2VUcmFuc2Zvcm0oKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZS5cclxuICAgICAqIE1vdXNlIGV2ZW50IHVuYmluZGluZ1xyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGRvbSA9IHRoaXMuZG9tRWxlbWVudDtcclxuXHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCAndG91Y2hzdGFydCcsIHRoaXMuX21vdXNlRG93bkhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNobW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNoZW5kJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG5cclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZWRvd24nLCB0aGlzLl9tb3VzZURvd25IYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZXVwJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3doZWVsJywgdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlb3V0JywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aW1lbGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lLm9mZignZnJhbWUnLCB0aGlzLnVwZGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RvcEFsbEFuaW1hdGlvbigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBkaXN0YW5jZVxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXREaXN0YW5jZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZGlzdGFuY2VcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZVxyXG4gICAgICovXHJcbiAgICBzZXREaXN0YW5jZTogZnVuY3Rpb24gKGRpc3RhbmNlKSB7XHJcbiAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHNpemUgb2Ygb3J0aG9ncmFwaGljIHZpZXdpbmcgdm9sdW1lXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldE9ydGhvZ3JhcGhpY1NpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fb3J0aG9TaXplO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBzaXplIG9mIG9ydGhvZ3JhcGhpYyB2aWV3aW5nIHZvbHVtZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemVcclxuICAgICAqL1xyXG4gICAgc2V0T3J0aG9ncmFwaGljU2l6ZTogZnVuY3Rpb24gKHNpemUpIHtcclxuICAgICAgICB0aGlzLl9vcnRob1NpemUgPSBzaXplO1xyXG4gICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYWxwaGEgcm90YXRpb25cclxuICAgICAqIEFscGhhIGFuZ2xlIGZvciB0b3AtZG93biByb3RhdGlvbi4gUG9zaXRpdmUgdG8gcm90YXRlIHRvIHRvcC5cclxuICAgICAqXHJcbiAgICAgKiBXaGljaCBtZWFucyBjYW1lcmEgcm90YXRpb24gYXJvdW5kIHggYXhpcy5cclxuICAgICAqL1xyXG4gICAgZ2V0QWxwaGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGhldGEgLyBNYXRoLlBJICogMTgwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBiZXRhIHJvdGF0aW9uXHJcbiAgICAgKiBCZXRhIGFuZ2xlIGZvciBsZWZ0LXJpZ2h0IHJvdGF0aW9uLiBQb3NpdGl2ZSB0byByb3RhdGUgdG8gcmlnaHQuXHJcbiAgICAgKlxyXG4gICAgICogV2hpY2ggbWVhbnMgY2FtZXJhIHJvdGF0aW9uIGFyb3VuZCB5IGF4aXMuXHJcbiAgICAgKi9cclxuICAgIGdldEJldGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gLXRoaXMuX3BoaSAvIE1hdGguUEkgKiAxODA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGNvbnRyb2wgY2VudGVyXHJcbiAgICAgKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2VudGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NlbnRlci50b0FycmF5KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGFscGhhIHJvdGF0aW9uIGFuZ2xlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYWxwaGFcclxuICAgICAqL1xyXG4gICAgc2V0QWxwaGE6IGZ1bmN0aW9uIChhbHBoYSkge1xyXG4gICAgICAgIGFscGhhID0gTWF0aC5tYXgoTWF0aC5taW4odGhpcy5tYXhBbHBoYSwgYWxwaGEpLCB0aGlzLm1pbkFscGhhKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdGhldGEgPSBhbHBoYSAvIDE4MCAqIE1hdGguUEk7XHJcbiAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBiZXRhIHJvdGF0aW9uIGFuZ2xlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYmV0YVxyXG4gICAgICovXHJcbiAgICBzZXRCZXRhOiBmdW5jdGlvbiAoYmV0YSkge1xyXG4gICAgICAgIGJldGEgPSBNYXRoLm1heChNYXRoLm1pbih0aGlzLm1heEJldGEsIGJldGEpLCB0aGlzLm1pbkJldGEpO1xyXG5cclxuICAgICAgICB0aGlzLl9waGkgPSAtYmV0YSAvIDE4MCAqIE1hdGguUEk7XHJcbiAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBjb250cm9sIGNlbnRlclxyXG4gICAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gY2VudGVyXHJcbiAgICAgKi9cclxuICAgIHNldENlbnRlcjogZnVuY3Rpb24gKGNlbnRlckFycikge1xyXG4gICAgICAgIHRoaXMuX2NlbnRlci5zZXRBcnJheShjZW50ZXJBcnIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRPcHRpb246IGZ1bmN0aW9uIChvcHRzKSB7XHJcbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XHJcblxyXG4gICAgICAgIFsnYXV0b1JvdGF0ZScsICdhdXRvUm90YXRlQWZ0ZXJTdGlsbCcsXHJcbiAgICAgICAgICAgICdhdXRvUm90YXRlRGlyZWN0aW9uJywgJ2F1dG9Sb3RhdGVTcGVlZCcsXHJcbiAgICAgICAgICAgICdkYW1waW5nJyxcclxuICAgICAgICAgICAgJ21pbkRpc3RhbmNlJywgJ21heERpc3RhbmNlJyxcclxuICAgICAgICAgICAgJ21pbk9ydGhvZ3JhcGhpY1NpemUnLCAnbWF4T3J0aG9ncmFwaGljU2l6ZScsICdvcnRob2dyYXBoaWNBc3BlY3QnLFxyXG4gICAgICAgICAgICAnbWluQWxwaGEnLCAnbWF4QWxwaGEnLCAnbWluQmV0YScsICdtYXhCZXRhJyxcclxuICAgICAgICAgICAgJ3JvdGF0ZVNlbnNpdGl2aXR5JywgJ3pvb21TZW5zaXRpdml0eScsICdwYW5TZW5zaXRpdml0eSdcclxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICBpZiAob3B0c1trZXldICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IG9wdHNba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG5cclxuICAgICAgICBpZiAob3B0cy5kaXN0YW5jZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGlzdGFuY2Uob3B0cy5kaXN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRzLm9ydGhvZ3JhcGhpY1NpemUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldE9ydGhvZ3JhcGhpY1NpemUob3B0cy5vcnRob2dyYXBoaWNTaXplKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcHRzLmFscGhhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRBbHBoYShvcHRzLmFscGhhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuYmV0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0QmV0YShvcHRzLmJldGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wdHMuY2VudGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2VudGVyKG9wdHMuY2VudGVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRhcmdldCkge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVUcmFuc2Zvcm0oKTtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXQudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0cy5kaXN0YW5jZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdHMub3J0aG9ncmFwaGljU2l6ZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdHMuYWxwaGFcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLmJldGFcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IG9wdHMuY2VudGVyXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZHVyYXRpb249MTAwMF1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5lYXNpbmc9J2xpbmVhciddXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZG9uZV1cclxuICAgICAqL1xyXG4gICAgYW5pbWF0ZVRvOiBmdW5jdGlvbiAob3B0cykge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgdmFyIG9iaiA9IHt9O1xyXG4gICAgICAgIHZhciB0YXJnZXQgPSB7fTtcclxuICAgICAgICB2YXIgdGltZWxpbmUgPSB0aGlzLnRpbWVsaW5lO1xyXG4gICAgICAgIGlmICghdGltZWxpbmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0cy5kaXN0YW5jZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG9iai5kaXN0YW5jZSA9IHRoaXMuZ2V0RGlzdGFuY2UoKTtcclxuICAgICAgICAgICAgdGFyZ2V0LmRpc3RhbmNlID0gb3B0cy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMub3J0aG9ncmFwaGljU2l6ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG9iai5vcnRob2dyYXBoaWNTaXplID0gdGhpcy5nZXRPcnRob2dyYXBoaWNTaXplKCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5vcnRob2dyYXBoaWNTaXplID0gb3B0cy5vcnRob2dyYXBoaWNTaXplO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0cy5hbHBoYSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG9iai5hbHBoYSA9IHRoaXMuZ2V0QWxwaGEoKTtcclxuICAgICAgICAgICAgdGFyZ2V0LmFscGhhID0gb3B0cy5hbHBoYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuYmV0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG9iai5iZXRhID0gdGhpcy5nZXRCZXRhKCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5iZXRhID0gb3B0cy5iZXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0cy5jZW50ZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvYmouY2VudGVyID0gdGhpcy5nZXRDZW50ZXIoKTtcclxuICAgICAgICAgICAgdGFyZ2V0LmNlbnRlciA9IG9wdHMuY2VudGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEFuaW1hdG9yKFxyXG4gICAgICAgICAgICB0aW1lbGluZS5hbmltYXRlKG9iailcclxuICAgICAgICAgICAgICAgIC53aGVuKG9wdHMuZHVyYXRpb24gfHwgMTAwMCwgdGFyZ2V0KVxyXG4gICAgICAgICAgICAgICAgLmR1cmluZyhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5hbHBoYSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0QWxwaGEob2JqLmFscGhhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5iZXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRCZXRhKG9iai5iZXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5kaXN0YW5jZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0RGlzdGFuY2Uob2JqLmRpc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5vcnRob2dyYXBoaWNTaXplICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRPcnRob2dyYXBoaWNTaXplKG9iai5vcnRob2dyYXBoaWNTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5jZW50ZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldENlbnRlcihvYmouY2VudGVyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5kb25lKG9wdHMuZG9uZSlcclxuICAgICAgICApLnN0YXJ0KG9wdHMuZWFzaW5nIHx8ICdsaW5lYXInKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wIGFsbCBhbmltYXRpb25zXHJcbiAgICAgKi9cclxuICAgIHN0b3BBbGxBbmltYXRpb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2FuaW1hdG9ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9hbmltYXRvcnNbaV0uc3RvcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9hbmltYXRvcnMubGVuZ3RoID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgX2lzQW5pbWF0aW5nOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FuaW1hdG9ycy5sZW5ndGggPiAwO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ2FsbCB1cGRhdGUgZWFjaCBmcmFtZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBkZWx0YVRpbWUgRnJhbWUgdGltZVxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChkZWx0YVRpbWUpIHtcclxuXHJcbiAgICAgICAgZGVsdGFUaW1lID0gZGVsdGFUaW1lIHx8IDE2O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fcm90YXRpbmcpIHtcclxuICAgICAgICAgICAgdmFyIHJhZGlhbiA9ICh0aGlzLmF1dG9Sb3RhdGVEaXJlY3Rpb24gPT09ICdjdycgPyAxIDogLTEpXHJcbiAgICAgICAgICAgICAgICAqIHRoaXMuYXV0b1JvdGF0ZVNwZWVkIC8gMTgwICogTWF0aC5QSTtcclxuICAgICAgICAgICAgdGhpcy5fcGhpIC09IHJhZGlhbiAqIGRlbHRhVGltZSAvIDEwMDA7XHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fcm90YXRlVmVsb2NpdHkubGVuKCkgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLl96b29tU3BlZWQpID4gMC4wMSB8fCB0aGlzLl9wYW5WZWxvY2l0eS5sZW4oKSA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9uZWVkc1VwZGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGaXhlZCBkZWx0YVRpbWVcclxuICAgICAgICB0aGlzLl91cGRhdGVEaXN0YW5jZU9yU2l6ZShNYXRoLm1pbihkZWx0YVRpbWUsIDUwKSk7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlUGFuKE1hdGgubWluKGRlbHRhVGltZSwgNTApKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlUm90YXRlKE1hdGgubWluKGRlbHRhVGltZSwgNTApKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlVHJhbnNmb3JtKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGFyZ2V0LnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ3VwZGF0ZScpO1xyXG5cclxuICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlUm90YXRlOiBmdW5jdGlvbiAoZGVsdGFUaW1lKSB7XHJcbiAgICAgICAgdmFyIHZlbG9jaXR5ID0gdGhpcy5fcm90YXRlVmVsb2NpdHk7XHJcbiAgICAgICAgdGhpcy5fcGhpID0gdmVsb2NpdHkueSAqIGRlbHRhVGltZSAvIDIwICsgdGhpcy5fcGhpO1xyXG4gICAgICAgIHRoaXMuX3RoZXRhID0gdmVsb2NpdHkueCAqIGRlbHRhVGltZSAvIDIwICsgdGhpcy5fdGhldGE7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0QWxwaGEodGhpcy5nZXRBbHBoYSgpKTtcclxuICAgICAgICB0aGlzLnNldEJldGEodGhpcy5nZXRCZXRhKCkpO1xyXG5cclxuICAgICAgICB0aGlzLl92ZWN0b3JEYW1waW5nKHZlbG9jaXR5LCB0aGlzLmRhbXBpbmcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlRGlzdGFuY2VPclNpemU6IGZ1bmN0aW9uIChkZWx0YVRpbWUpIHtcclxuICAgICAgICB0aGlzLl9zZXREaXN0YW5jZSh0aGlzLl9kaXN0YW5jZSArIHRoaXMuX3pvb21TcGVlZCAqIGRlbHRhVGltZSAvIDIwKTtcclxuICAgICAgICBpZiAoISh0aGlzLnRhcmdldCBpbnN0YW5jZW9mIFBlcnNwZWN0aXZlQ2FtZXJhKSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRPcnRob1NpemUodGhpcy5fb3J0aG9TaXplICsgdGhpcy5fem9vbVNwZWVkICogZGVsdGFUaW1lIC8gMjApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fem9vbVNwZWVkICo9IE1hdGgucG93KHRoaXMuZGFtcGluZywgZGVsdGFUaW1lIC8gMTYpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfc2V0RGlzdGFuY2U6IGZ1bmN0aW9uIChkaXN0YW5jZSkge1xyXG4gICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gTWF0aC5tYXgoTWF0aC5taW4oZGlzdGFuY2UsIHRoaXMubWF4RGlzdGFuY2UpLCB0aGlzLm1pbkRpc3RhbmNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldE9ydGhvU2l6ZTogZnVuY3Rpb24gKHNpemUpIHtcclxuICAgICAgICB0aGlzLl9vcnRob1NpemUgPSBNYXRoLm1heChNYXRoLm1pbihzaXplLCB0aGlzLm1heE9ydGhvZ3JhcGhpY1NpemUpLCB0aGlzLm1pbk9ydGhvZ3JhcGhpY1NpemUpO1xyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLnRhcmdldDtcclxuICAgICAgICB2YXIgY2FtZXJhSGVpZ2h0ID0gdGhpcy5fb3J0aG9TaXplO1xyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICB2YXIgY2FtZXJhV2lkdGggPSBjYW1lcmFIZWlnaHQgKiB0aGlzLm9ydGhvZ3JhcGhpY0FzcGVjdDtcclxuICAgICAgICBjYW1lcmEubGVmdCA9IC1jYW1lcmFXaWR0aCAvIDI7XHJcbiAgICAgICAgY2FtZXJhLnJpZ2h0ID0gY2FtZXJhV2lkdGggLyAyO1xyXG4gICAgICAgIGNhbWVyYS50b3AgPSBjYW1lcmFIZWlnaHQgLyAyO1xyXG4gICAgICAgIGNhbWVyYS5ib3R0b20gPSAtY2FtZXJhSGVpZ2h0IC8gMjtcclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZVBhbjogZnVuY3Rpb24gKGRlbHRhVGltZSkge1xyXG4gICAgICAgIHZhciB2ZWxvY2l0eSA9IHRoaXMuX3BhblZlbG9jaXR5O1xyXG4gICAgICAgIHZhciBsZW4gPSB0aGlzLl9kaXN0YW5jZTtcclxuXHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG4gICAgICAgIHZhciB5QXhpcyA9IHRhcmdldC53b3JsZFRyYW5zZm9ybS55O1xyXG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC53b3JsZFRyYW5zZm9ybS54O1xyXG5cclxuICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgdGhpcy5fY2VudGVyXHJcbiAgICAgICAgICAgIC5zY2FsZUFuZEFkZCh4QXhpcywgLXZlbG9jaXR5LnggKiBsZW4gLyAyMDApXHJcbiAgICAgICAgICAgIC5zY2FsZUFuZEFkZCh5QXhpcywgLXZlbG9jaXR5LnkgKiBsZW4gLyAyMDApO1xyXG5cclxuICAgICAgICB0aGlzLl92ZWN0b3JEYW1waW5nKHZlbG9jaXR5LCAwKTtcclxuXHJcbiAgICAgICAgdmVsb2NpdHkueCA9IHZlbG9jaXR5LnkgPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlVHJhbnNmb3JtOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICB2YXIgZGlyID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB2YXIgdGhldGEgPSB0aGlzLl90aGV0YSArIE1hdGguUEkgLyAyO1xyXG4gICAgICAgIHZhciBwaGkgPSB0aGlzLl9waGkgKyBNYXRoLlBJIC8gMjtcclxuICAgICAgICB2YXIgciA9IE1hdGguc2luKHRoZXRhKTtcclxuXHJcbiAgICAgICAgZGlyLnggPSByICogTWF0aC5jb3MocGhpKTtcclxuICAgICAgICBkaXIueSA9IC1NYXRoLmNvcyh0aGV0YSk7XHJcbiAgICAgICAgZGlyLnogPSByICogTWF0aC5zaW4ocGhpKTtcclxuXHJcbiAgICAgICAgY2FtZXJhLnBvc2l0aW9uLmNvcHkodGhpcy5fY2VudGVyKS5zY2FsZUFuZEFkZChkaXIsIHRoaXMuX2Rpc3RhbmNlKTtcclxuICAgICAgICBjYW1lcmEucm90YXRpb24uaWRlbnRpdHkoKVxyXG4gICAgICAgICAgICAvLyBGaXJzdCBhcm91bmQgeSwgdGhlbiBhcm91bmQgeFxyXG4gICAgICAgICAgICAucm90YXRlWSgtdGhpcy5fcGhpKVxyXG4gICAgICAgICAgICAucm90YXRlWCgtdGhpcy5fdGhldGEpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfc3RhcnRDb3VudGluZ1N0aWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3N0aWxsVGltZW91dCk7XHJcblxyXG4gICAgICAgIHZhciB0aW1lID0gdGhpcy5hdXRvUm90YXRlQWZ0ZXJTdGlsbDtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKCFpc05hTih0aW1lKSAmJiB0aW1lID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zdGlsbFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuX3JvdGF0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSwgdGltZSAqIDEwMDApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3ZlY3RvckRhbXBpbmc6IGZ1bmN0aW9uICh2LCBkYW1waW5nKSB7XHJcbiAgICAgICAgdmFyIHNwZWVkID0gdi5sZW4oKTtcclxuICAgICAgICBzcGVlZCA9IHNwZWVkICogZGFtcGluZztcclxuICAgICAgICBpZiAoc3BlZWQgPCAxZS00KSB7XHJcbiAgICAgICAgICAgIHNwZWVkID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdi5ub3JtYWxpemUoKS5zY2FsZShzcGVlZCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlY29tcG9zZVRyYW5zZm9ybTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy50YXJnZXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50YXJnZXQudXBkYXRlV29ybGRUcmFuc2Zvcm0oKTtcclxuXHJcbiAgICAgICAgdmFyIGZvcndhcmQgPSB0aGlzLnRhcmdldC53b3JsZFRyYW5zZm9ybS56O1xyXG4gICAgICAgIHZhciBhbHBoYSA9IE1hdGguYXNpbihmb3J3YXJkLnkpO1xyXG4gICAgICAgIHZhciBiZXRhID0gTWF0aC5hdGFuMihmb3J3YXJkLngsIGZvcndhcmQueik7XHJcblxyXG4gICAgICAgIHRoaXMuX3RoZXRhID0gYWxwaGE7XHJcbiAgICAgICAgdGhpcy5fcGhpID0gLWJldGE7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0QmV0YSh0aGlzLmdldEJldGEoKSk7XHJcbiAgICAgICAgdGhpcy5zZXRBbHBoYSh0aGlzLmdldEFscGhhKCkpO1xyXG5cclxuICAgICAgICB0aGlzLl9zZXREaXN0YW5jZSh0aGlzLnRhcmdldC5wb3NpdGlvbi5kaXN0KHRoaXMuX2NlbnRlcikpO1xyXG4gICAgICAgIGlmICghKHRoaXMudGFyZ2V0IGluc3RhbmNlb2YgUGVyc3BlY3RpdmVDYW1lcmEpKXtcclxuICAgICAgICAgICAgdGhpcy5fc2V0T3J0aG9TaXplKHRoaXMudGFyZ2V0LnRvcCAtIHRoaXMudGFyZ2V0LmJvdHRvbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfbW91c2VEb3duSGFuZGxlcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBbmltYXRpbmcoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHZhciB5ID0gZS5jbGllbnRZO1xyXG4gICAgICAgIC8vIFRvdWNoXHJcbiAgICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlcykge1xyXG4gICAgICAgICAgICB2YXIgdG91Y2ggPSBlLnRhcmdldFRvdWNoZXNbMF07XHJcbiAgICAgICAgICAgIHggPSB0b3VjaC5jbGllbnRYO1xyXG4gICAgICAgICAgICB5ID0gdG91Y2guY2xpZW50WTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX21vZGUgPSAncm90YXRlJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NHZXN0dXJlKGUsICdzdGFydCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGUuYnV0dG9uID09PSBNT1VTRV9CVVRUT05fS0VZX01BUFt0aGlzLnJvdGF0ZU1vdXNlQnV0dG9uXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZSA9ICdyb3RhdGUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGUuYnV0dG9uID09PSBNT1VTRV9CVVRUT05fS0VZX01BUFt0aGlzLnBhbk1vdXNlQnV0dG9uXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZSA9ICdwYW4nO1xyXG5cclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogVmVuZG9ycyBsaWtlIE1vemlsbGEgcHJvdmlkZSBhIG1vdXNlLWRyaXZlbiBwYW5uaW5nIGZlYXR1cmVcclxuICAgICAgICAgICAgICAgICAqIHRoYXQgaXMgYWN0aXZhdGVkIHdoZW4gdGhlIG1pZGRsZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZC5cclxuICAgICAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAgICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby91aWV2ZW50cy8jZXZlbnQtdHlwZS1tb3VzZWRvd25cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkb20gPSB0aGlzLmRvbUVsZW1lbnQ7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9tLCAndG91Y2htb3ZlJywgdGhpcy5fbW91c2VNb3ZlSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9tLCAndG91Y2hlbmQnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XHJcblxyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlbW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNldXAnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2VvdXQnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IHJvdGF0ZSB2ZWxvY2l0eVxyXG4gICAgICAgIHRoaXMuX3JvdGF0ZVZlbG9jaXR5LnNldCgwLCAwKTtcclxuICAgICAgICB0aGlzLl9yb3RhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9Sb3RhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRDb3VudGluZ1N0aWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9tb3VzZVggPSB4O1xyXG4gICAgICAgIHRoaXMuX21vdXNlWSA9IHk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9tb3VzZU1vdmVIYW5kbGVyOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0FuaW1hdGluZygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgdmFyIHkgPSBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIHZhciBoYXZlR2VzdHVyZTtcclxuICAgICAgICAvLyBUb3VjaFxyXG4gICAgICAgIGlmIChlLnRhcmdldFRvdWNoZXMpIHtcclxuICAgICAgICAgICAgdmFyIHRvdWNoID0gZS50YXJnZXRUb3VjaGVzWzBdO1xyXG4gICAgICAgICAgICB4ID0gdG91Y2guY2xpZW50WDtcclxuICAgICAgICAgICAgeSA9IHRvdWNoLmNsaWVudFk7XHJcblxyXG4gICAgICAgICAgICBoYXZlR2VzdHVyZSA9IHRoaXMuX3Byb2Nlc3NHZXN0dXJlKGUsICdjaGFuZ2UnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwYW5TZW5zaXRpdml0eSA9IGNvbnZlcnRUb0FycmF5KHRoaXMucGFuU2Vuc2l0aXZpdHkpO1xyXG4gICAgICAgIHZhciByb3RhdGVTZW5zaXRpdml0eSA9IGNvbnZlcnRUb0FycmF5KHRoaXMucm90YXRlU2Vuc2l0aXZpdHkpO1xyXG5cclxuICAgICAgICBpZiAoIWhhdmVHZXN0dXJlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9tb2RlID09PSAncm90YXRlJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlVmVsb2NpdHkueSArPSAoeCAtIHRoaXMuX21vdXNlWCkgLyB0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGggKiAyICogcm90YXRlU2Vuc2l0aXZpdHlbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yb3RhdGVWZWxvY2l0eS54ICs9ICh5IC0gdGhpcy5fbW91c2VZKSAvIHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQgKiAyICogcm90YXRlU2Vuc2l0aXZpdHlbMV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fbW9kZSA9PT0gJ3BhbicpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BhblZlbG9jaXR5LnggKz0gKHggLSB0aGlzLl9tb3VzZVgpIC8gdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoICogcGFuU2Vuc2l0aXZpdHlbMF0gKiA0MDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wYW5WZWxvY2l0eS55ICs9ICgteSArIHRoaXMuX21vdXNlWSkgLyB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0ICogcGFuU2Vuc2l0aXZpdHlbMV0gKiA0MDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX21vdXNlWCA9IHg7XHJcbiAgICAgICAgdGhpcy5fbW91c2VZID0geTtcclxuXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCAmJiBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9tb3VzZVdoZWVsSGFuZGxlcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBbmltYXRpbmcoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBkZWx0YSA9IGUuZGVsdGFZO1xyXG4gICAgICAgIGlmIChkZWx0YSA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3pvb21IYW5kbGVyKGUsIGRlbHRhID4gMCA/IDEgOiAtMSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9waW5jaEhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzQW5pbWF0aW5nKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl96b29tSGFuZGxlcihlLCBlLnBpbmNoU2NhbGUgPiAxID8gLTAuNCA6IDAuNCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF96b29tSGFuZGxlcjogZnVuY3Rpb24gKGUsIGRlbHRhKSB7XHJcblxyXG4gICAgICAgIHZhciBzcGVlZDtcclxuICAgICAgICBpZiAodGhpcy50YXJnZXQgaW5zdGFuY2VvZiBQZXJzcGVjdGl2ZUNhbWVyYSkge1xyXG4gICAgICAgICAgICBzcGVlZCA9IE1hdGgubWF4KE1hdGgubWF4KE1hdGgubWluKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgLSB0aGlzLm1pbkRpc3RhbmNlLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXhEaXN0YW5jZSAtIHRoaXMuX2Rpc3RhbmNlXHJcbiAgICAgICAgICAgICkpIC8gMjAsIDAuNSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzcGVlZCA9IE1hdGgubWF4KE1hdGgubWF4KE1hdGgubWluKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3J0aG9TaXplIC0gdGhpcy5taW5PcnRob2dyYXBoaWNTaXplLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXhPcnRob2dyYXBoaWNTaXplIC0gdGhpcy5fb3J0aG9TaXplXHJcbiAgICAgICAgICAgICkpIC8gMjAsIDAuNSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl96b29tU3BlZWQgPSAoZGVsdGEgPiAwID8gLTEgOiAxKSAqIHNwZWVkICogdGhpcy56b29tU2Vuc2l0aXZpdHk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JvdGF0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmF1dG9Sb3RhdGUgJiYgdGhpcy5fbW9kZSA9PT0gJ3JvdGF0ZScpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRDb3VudGluZ1N0aWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0ICYmIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgX21vdXNlVXBIYW5kbGVyOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICB2YXIgZG9tID0gdGhpcy5kb21FbGVtZW50O1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNobW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNoZW5kJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlbW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNldXAnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2VvdXQnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb2Nlc3NHZXN0dXJlKGV2ZW50LCAnZW5kJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9hZGRBbmltYXRvcjogZnVuY3Rpb24gKGFuaW1hdG9yKSB7XHJcbiAgICAgICAgdmFyIGFuaW1hdG9ycyA9IHRoaXMuX2FuaW1hdG9ycztcclxuICAgICAgICBhbmltYXRvcnMucHVzaChhbmltYXRvcik7XHJcbiAgICAgICAgYW5pbWF0b3IuZG9uZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBpZHggPSBhbmltYXRvcnMuaW5kZXhPZihhbmltYXRvcik7XHJcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgYW5pbWF0b3JzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFuaW1hdG9yO1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgX3Byb2Nlc3NHZXN0dXJlOiBmdW5jdGlvbiAoZXZlbnQsIHN0YWdlKSB7XHJcbiAgICAgICAgdmFyIGdlc3R1cmVNZ3IgPSB0aGlzLl9nZXN0dXJlTWdyO1xyXG5cclxuICAgICAgICBzdGFnZSA9PT0gJ3N0YXJ0JyAmJiBnZXN0dXJlTWdyLmNsZWFyKCk7XHJcblxyXG4gICAgICAgIHZhciBnZXN0dXJlSW5mbyA9IGdlc3R1cmVNZ3IucmVjb2duaXplKFxyXG4gICAgICAgICAgICBldmVudCxcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgc3RhZ2UgPT09ICdlbmQnICYmIGdlc3R1cmVNZ3IuY2xlYXIoKTtcclxuXHJcbiAgICAgICAgLy8gRG8gbm90IGRvIGFueSBwcmV2ZW50RGVmYXVsdCBoZXJlLiBVcHBlciBhcHBsaWNhdGlvbiBkbyB0aGF0IGlmIG5lY2Vzc2FyeS5cclxuICAgICAgICBpZiAoZ2VzdHVyZUluZm8pIHtcclxuICAgICAgICAgICAgdmFyIHR5cGUgPSBnZXN0dXJlSW5mby50eXBlO1xyXG4gICAgICAgICAgICBldmVudC5nZXN0dXJlRXZlbnQgPSB0eXBlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fcGluY2hIYW5kbGVyKGdlc3R1cmVJbmZvLmV2ZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBnZXN0dXJlSW5mbztcclxuICAgIH1cclxufSk7XHJcblxyXG4vKipcclxuICogSWYgYXV0byByb3RhdGUgdGhlIHRhcmdldFxyXG4gKiBAdHlwZSB7Ym9vbGVhbn1cclxuICogQGRlZmF1bHQgZmFsc2VcclxuICovXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShPcmJpdENvbnRyb2wucHJvdG90eXBlLCAnYXV0b1JvdGF0ZScsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvUm90YXRlO1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xyXG4gICAgICAgIHRoaXMuX2F1dG9Sb3RhdGUgPSB2YWw7XHJcbiAgICAgICAgdGhpcy5fcm90YXRpbmcgPSB2YWw7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE9yYml0Q29udHJvbC5wcm90b3R5cGUsICd0YXJnZXQnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGFyZ2V0O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xyXG4gICAgICAgIGlmICh2YWwgJiYgdmFsLnRhcmdldCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldENlbnRlcih2YWwudGFyZ2V0LnRvQXJyYXkoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3RhcmdldCA9IHZhbDtcclxuICAgICAgICB0aGlzLmRlY29tcG9zZVRyYW5zZm9ybSgpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBPcmJpdENvbnRyb2w7XHJcbiIsIi8qKlxyXG4gKiBTdGF0aWNHZW9tZXRyeSBjYW4gbm90IGJlIGNoYW5nZWQgb25jZSB0aGV5J3ZlIGJlZW4gc2V0dXBcclxuICovXHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuL0dlb21ldHJ5JztcclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlN0YXRpY0dlb21ldHJ5XHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICovXHJcbnZhciBTdGF0aWNHZW9tZXRyeSA9IEdlb21ldHJ5LmV4dGVuZCh7XHJcbiAgICBkeW5hbWljOiBmYWxzZVxyXG59KTtcclxuZXhwb3J0IGRlZmF1bHQgU3RhdGljR2VvbWV0cnk7XHJcbiIsIi8vIFRPRE8gdGVzdFxyXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5pbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcclxuaW1wb3J0IE5vZGUgZnJvbSAnLi4vTm9kZSc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4uL2dsbWF0cml4L21hdDQnO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgY2xheS51dGlsLm1lc2hcclxuICovXHJcbnZhciBtZXNoVXRpbCA9IHtcclxuICAgIC8qKlxyXG4gICAgICogTWVyZ2UgbXVsdGlwbGUgbWVzaGVzIHRvIG9uZS5cclxuICAgICAqIE5vdGUgdGhhdCB0aGVzZSBtZXNoZXMgbXVzdCBoYXZlIHRoZSBzYW1lIG1hdGVyaWFsXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtBcnJheS48Y2xheS5NZXNoPn0gbWVzaGVzXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGFwcGx5V29ybGRUcmFuc2Zvcm1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnV0aWwubWVzaFxyXG4gICAgICovXHJcbiAgICBtZXJnZTogZnVuY3Rpb24gKG1lc2hlcywgYXBwbHlXb3JsZFRyYW5zZm9ybSkge1xyXG5cclxuICAgICAgICBpZiAoISBtZXNoZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ZW1wbGF0ZU1lc2ggPSBtZXNoZXNbMF07XHJcbiAgICAgICAgdmFyIHRlbXBsYXRlR2VvID0gdGVtcGxhdGVNZXNoLmdlb21ldHJ5O1xyXG4gICAgICAgIHZhciBtYXRlcmlhbCA9IHRlbXBsYXRlTWVzaC5tYXRlcmlhbDtcclxuXHJcbiAgICAgICAgdmFyIGdlb21ldHJ5ID0gbmV3IEdlb21ldHJ5KHtcclxuICAgICAgICAgICAgZHluYW1pYzogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgICAgICBnZW9tZXRyeS5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlTmFtZXMgPSB0ZW1wbGF0ZUdlby5nZXRFbmFibGVkQXR0cmlidXRlcygpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZU5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZXNbaV07XHJcbiAgICAgICAgICAgIHZhciBhdHRyID0gdGVtcGxhdGVHZW8uYXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICAgICAgLy8gRXh0ZW5kIGN1c3RvbSBhdHRyaWJ1dGVzXHJcbiAgICAgICAgICAgIGlmICghZ2VvbWV0cnkuYXR0cmlidXRlc1tuYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlc1tuYW1lXSA9IGF0dHIuY2xvbmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCA9IG1hdDQuY3JlYXRlKCk7XHJcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgYXJyYXkgZGF0YSBhbmQgbWVyZ2UgYm91bmRpbmcgYm94XHJcbiAgICAgICAgdmFyIG5WZXJ0ZXggPSAwO1xyXG4gICAgICAgIHZhciBuRmFjZSA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBtZXNoZXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRHZW8gPSBtZXNoZXNba10uZ2VvbWV0cnk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50R2VvLmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50R2VvLmJvdW5kaW5nQm94LmFwcGx5VHJhbnNmb3JtKGFwcGx5V29ybGRUcmFuc2Zvcm0gPyBtZXNoZXNba10ud29ybGRUcmFuc2Zvcm0gOiBtZXNoZXNba10ubG9jYWxUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkuYm91bmRpbmdCb3gudW5pb24oY3VycmVudEdlby5ib3VuZGluZ0JveCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgblZlcnRleCArPSBjdXJyZW50R2VvLnZlcnRleENvdW50O1xyXG4gICAgICAgICAgICBuRmFjZSArPSBjdXJyZW50R2VvLnRyaWFuZ2xlQ291bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgYXR0cmlidXRlTmFtZXMubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lc1tuXTtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYiA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV07XHJcbiAgICAgICAgICAgIGF0dHJpYi5pbml0KG5WZXJ0ZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoblZlcnRleCA+PSAweGZmZmYpIHtcclxuICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlcyA9IG5ldyBVaW50MzJBcnJheShuRmFjZSAqIDMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShuRmFjZSAqIDMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZlcnRleE9mZnNldCA9IDA7XHJcbiAgICAgICAgdmFyIGluZGljZXNPZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciB1c2VJbmRpY2VzID0gdGVtcGxhdGVHZW8uaXNVc2VJbmRpY2VzKCk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIG1tID0gMDsgbW0gPCBtZXNoZXMubGVuZ3RoOyBtbSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXNoID0gbWVzaGVzW21tXTtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRHZW8gPSBtZXNoLmdlb21ldHJ5O1xyXG5cclxuICAgICAgICAgICAgdmFyIG5WZXJ0ZXggPSBjdXJyZW50R2VvLnZlcnRleENvdW50O1xyXG5cclxuICAgICAgICAgICAgdmFyIG1hdHJpeCA9IGFwcGx5V29ybGRUcmFuc2Zvcm0gPyBtZXNoLndvcmxkVHJhbnNmb3JtLmFycmF5IDogbWVzaC5sb2NhbFRyYW5zZm9ybS5hcnJheTtcclxuICAgICAgICAgICAgbWF0NC5pbnZlcnQoaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCwgbWF0cml4KTtcclxuICAgICAgICAgICAgbWF0NC50cmFuc3Bvc2UoaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCwgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBubiA9IDA7IG5uIDwgYXR0cmlidXRlTmFtZXMubGVuZ3RoOyBubisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVzW25uXTtcclxuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50QXR0ciA9IGN1cnJlbnRHZW8uYXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIHZhciB0YXJnZXRBdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIC8vIFNraXAgdGhlIHVudXNlZCBhdHRyaWJ1dGVzO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50QXR0ci52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBsZW4gPSBjdXJyZW50QXR0ci52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IGN1cnJlbnRBdHRyLnNpemU7XHJcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmVydGV4T2Zmc2V0ICogc2l6ZTtcclxuICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IGxlbiAvIHNpemU7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QXR0ci52YWx1ZVtvZmZzZXQgKyBpXSA9IGN1cnJlbnRBdHRyLnZhbHVlW2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHBvc2l0aW9uLCBub3JtYWwgYW5kIHRhbmdlbnRcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAncG9zaXRpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5mb3JFYWNoKHRhcmdldEF0dHIudmFsdWUsIHNpemUsIG9mZnNldCwgY291bnQsIHZlYzMudHJhbnNmb3JtTWF0NCwgbWF0cml4KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT09ICdub3JtYWwnIHx8IG5hbWUgPT09ICd0YW5nZW50Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuZm9yRWFjaCh0YXJnZXRBdHRyLnZhbHVlLCBzaXplLCBvZmZzZXQsIGNvdW50LCB2ZWMzLnRyYW5zZm9ybU1hdDQsIGludmVyc2VUcmFuc3Bvc2VNYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodXNlSW5kaWNlcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxlbiA9IGN1cnJlbnRHZW8uaW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlc1tpICsgaW5kaWNlc09mZnNldF0gPSBjdXJyZW50R2VvLmluZGljZXNbaV0gKyB2ZXJ0ZXhPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzT2Zmc2V0ICs9IGxlbjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVydGV4T2Zmc2V0ICs9IG5WZXJ0ZXg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmV3IE1lc2goe1xyXG4gICAgICAgICAgICBtYXRlcmlhbDogbWF0ZXJpYWwsXHJcbiAgICAgICAgICAgIGdlb21ldHJ5OiBnZW9tZXRyeVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNwbGl0IG1lc2ggaW50byBzdWIgbWVzaGVzLCBlYWNoIG1lc2ggd2lsbCBoYXZlIG1heEpvaW50TnVtYmVyIGpvaW50cy5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5NZXNofSBtZXNoXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4Sm9pbnROdW1iZXJcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5QbGFjZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICpcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnV0aWwubWVzaFxyXG4gICAgICovXHJcblxyXG4gICAgLy8gRklYTUUsIEhhdmUgaXNzdWVzIG9uIHNvbWUgbW9kZWxzXHJcbiAgICBzcGxpdEJ5Sm9pbnRzOiBmdW5jdGlvbiAobWVzaCwgbWF4Sm9pbnROdW1iZXIsIGluUGxhY2UpIHtcclxuICAgICAgICB2YXIgZ2VvbWV0cnkgPSBtZXNoLmdlb21ldHJ5O1xyXG4gICAgICAgIHZhciBza2VsZXRvbiA9IG1lc2guc2tlbGV0b247XHJcbiAgICAgICAgdmFyIG1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbDtcclxuICAgICAgICB2YXIgam9pbnRzID0gbWVzaC5qb2ludHM7XHJcbiAgICAgICAgaWYgKCFnZW9tZXRyeSB8fCAhc2tlbGV0b24gfHwgIWpvaW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoam9pbnRzLmxlbmd0aCA8IG1heEpvaW50TnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtZXNoO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIHZhciBpbmRpY2VzID0gZ2VvbWV0cnkuaW5kaWNlcztcclxuXHJcbiAgICAgICAgdmFyIGZhY2VMZW4gPSBnZW9tZXRyeS50cmlhbmdsZUNvdW50O1xyXG4gICAgICAgIHZhciByZXN0ID0gZmFjZUxlbjtcclxuICAgICAgICB2YXIgaXNGYWNlQWRkZWQgPSBbXTtcclxuICAgICAgICB2YXIgam9pbnRWYWx1ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLmpvaW50LnZhbHVlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmFjZUxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlzRmFjZUFkZGVkW2ldID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBhZGRlZEpvaW50SWR4UGVyRmFjZSA9IFtdO1xyXG5cclxuICAgICAgICB2YXIgYnVja2V0cyA9IFtdO1xyXG5cclxuICAgICAgICB2YXIgZ2V0Sm9pbnRCeUluZGV4ID0gZnVuY3Rpb24gKGlkeCkge1xyXG4gICAgICAgICAgICByZXR1cm4gam9pbnRzW2lkeF07XHJcbiAgICAgICAgfTtcclxuICAgICAgICB3aGlsZSAocmVzdCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIGJ1Y2tldFRyaWFuZ2xlcyA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgYnVja2V0Sm9pbnRSZXZlcnNlTWFwID0gW107XHJcbiAgICAgICAgICAgIHZhciBidWNrZXRKb2ludHMgPSBbXTtcclxuICAgICAgICAgICAgdmFyIHN1YkpvaW50TnVtYmVyID0gMDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBqb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50UmV2ZXJzZU1hcFtpXSA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIGYgPSAwOyBmIDwgZmFjZUxlbjsgZisrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGYWNlQWRkZWRbZl0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBjYW5BZGRUb0J1Y2tldCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgYWRkZWROdW1iZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkeCA9IGluZGljZXNbZiAqIDMgKyBpXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpvaW50SWR4ID0gam9pbnRWYWx1ZXNbaWR4ICogNCArIGpdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpvaW50SWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWNrZXRKb2ludFJldmVyc2VNYXBbam9pbnRJZHhdID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJKb2ludE51bWJlciA8IG1heEpvaW50TnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50UmV2ZXJzZU1hcFtqb2ludElkeF0gPSBzdWJKb2ludE51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0Sm9pbnRzW3N1YkpvaW50TnVtYmVyKytdID0gam9pbnRJZHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkSm9pbnRJZHhQZXJGYWNlW2FkZGVkTnVtYmVyKytdID0gam9pbnRJZHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5BZGRUb0J1Y2tldCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghY2FuQWRkVG9CdWNrZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBSZXZlcnNlIG9wZXJhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWRkZWROdW1iZXI7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRKb2ludFJldmVyc2VNYXBbYWRkZWRKb2ludElkeFBlckZhY2VbaV1dID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50cy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViSm9pbnROdW1iZXItLTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBidWNrZXRUcmlhbmdsZXMucHVzaChpbmRpY2VzLnN1YmFycmF5KGYgKiAzLCAoZiArIDEpICogMykpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpc0ZhY2VBZGRlZFtmXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdC0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJ1Y2tldHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0cmlhbmdsZXM6IGJ1Y2tldFRyaWFuZ2xlcyxcclxuICAgICAgICAgICAgICAgIGpvaW50czogYnVja2V0Sm9pbnRzLm1hcChnZXRKb2ludEJ5SW5kZXgpLFxyXG4gICAgICAgICAgICAgICAgam9pbnRSZXZlcnNlTWFwOiBidWNrZXRKb2ludFJldmVyc2VNYXBcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcm9vdCA9IG5ldyBOb2RlKHtcclxuICAgICAgICAgICAgbmFtZTogbWVzaC5uYW1lXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdmFyIGF0dHJpYk5hbWVzID0gZ2VvbWV0cnkuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcclxuXHJcbiAgICAgICAgYXR0cmliTmFtZXMuc3BsaWNlKGF0dHJpYk5hbWVzLmluZGV4T2YoJ2pvaW50JyksIDEpO1xyXG4gICAgICAgIC8vIE1hcCBmcm9tIG9sZCB2ZXJ0ZXggaW5kZXggdG8gbmV3IHZlcnRleCBpbmRleFxyXG4gICAgICAgIHZhciBuZXdJbmRpY2VzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgYiA9IDA7IGIgPCBidWNrZXRzLmxlbmd0aDsgYisrKSB7XHJcbiAgICAgICAgICAgIHZhciBidWNrZXQgPSBidWNrZXRzW2JdO1xyXG4gICAgICAgICAgICB2YXIgam9pbnRSZXZlcnNlTWFwID0gYnVja2V0LmpvaW50UmV2ZXJzZU1hcDtcclxuICAgICAgICAgICAgdmFyIHN1YkpvaW50TnVtYmVyID0gYnVja2V0LmpvaW50cy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICB2YXIgc3ViR2VvID0gbmV3IEdlb21ldHJ5KCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgc3ViTWVzaCA9IG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFttZXNoLm5hbWUsIGldLmpvaW4oJy0nKSxcclxuICAgICAgICAgICAgICAgIC8vIERPTidUIGNsb25lIG1hdGVyaWFsLlxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnk6IHN1YkdlbyxcclxuICAgICAgICAgICAgICAgIHNrZWxldG9uOiBza2VsZXRvbixcclxuICAgICAgICAgICAgICAgIGpvaW50czogYnVja2V0LmpvaW50cy5zbGljZSgpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgblZlcnRleCA9IDA7XHJcbiAgICAgICAgICAgIHZhciBuVmVydGV4MiA9IGdlb21ldHJ5LnZlcnRleENvdW50O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5WZXJ0ZXgyOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG5ld0luZGljZXNbaV0gPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBDb3VudCBzdWIgZ2VvIG51bWJlclxyXG4gICAgICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGJ1Y2tldC50cmlhbmdsZXMubGVuZ3RoOyBmKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBmYWNlID0gYnVja2V0LnRyaWFuZ2xlc1tmXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkeCA9IGZhY2VbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0luZGljZXNbaWR4XSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5kaWNlc1tpZHhdID0gblZlcnRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgblZlcnRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGF0dHJpYk5hbWVzLmxlbmd0aDsgYSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0cmliTmFtZSA9IGF0dHJpYk5hbWVzW2FdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN1YkF0dHJpYiA9IHN1Ykdlby5hdHRyaWJ1dGVzW2F0dHJpYk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgc3ViQXR0cmliLmluaXQoblZlcnRleCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3ViR2VvLmF0dHJpYnV0ZXMuam9pbnQudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KG5WZXJ0ZXggKiA0KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChuVmVydGV4ID4gMHhmZmZmKSB7XHJcbiAgICAgICAgICAgICAgICBzdWJHZW8uaW5kaWNlcyA9IG5ldyBVaW50MzJBcnJheShidWNrZXQudHJpYW5nbGVzLmxlbmd0aCAqIDMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3ViR2VvLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoYnVja2V0LnRyaWFuZ2xlcy5sZW5ndGggKiAzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGluZGljZXNPZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICBuVmVydGV4ID0gMDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVmVydGV4MjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdJbmRpY2VzW2ldID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGYgPSAwOyBmIDwgYnVja2V0LnRyaWFuZ2xlcy5sZW5ndGg7IGYrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRyaWFuZ2xlID0gYnVja2V0LnRyaWFuZ2xlc1tmXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpZHggPSB0cmlhbmdsZVtpXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0luZGljZXNbaWR4XSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5kaWNlc1tpZHhdID0gblZlcnRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBhdHRyaWJOYW1lcy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYk5hbWUgPSBhdHRyaWJOYW1lc1thXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YkF0dHJpYiA9IHN1Ykdlby5hdHRyaWJ1dGVzW2F0dHJpYk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBhdHRyaWIuc2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNpemU7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YkF0dHJpYi52YWx1ZVtuVmVydGV4ICogc2l6ZSArIGpdID0gYXR0cmliLnZhbHVlW2lkeCAqIHNpemUgKyBqXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDQ7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpvaW50SWR4ID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5qb2ludC52YWx1ZVtpZHggKiA0ICsgal07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gblZlcnRleCAqIDQgKyBqO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpvaW50SWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJHZW8uYXR0cmlidXRlcy5qb2ludC52YWx1ZVtvZmZzZXRdID0gam9pbnRSZXZlcnNlTWFwW2pvaW50SWR4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ykdlby5hdHRyaWJ1dGVzLmpvaW50LnZhbHVlW29mZnNldF0gPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuVmVydGV4Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHN1Ykdlby5pbmRpY2VzW2luZGljZXNPZmZzZXQrK10gPSBuZXdJbmRpY2VzW2lkeF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3ViR2VvLnVwZGF0ZUJvdW5kaW5nQm94KCk7XHJcblxyXG4gICAgICAgICAgICByb290LmFkZChzdWJNZXNoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gbWVzaC5jaGlsZHJlbigpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcm9vdC5hZGQoY2hpbGRyZW5baV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb290LnBvc2l0aW9uLmNvcHkobWVzaC5wb3NpdGlvbik7XHJcbiAgICAgICAgcm9vdC5yb3RhdGlvbi5jb3B5KG1lc2gucm90YXRpb24pO1xyXG4gICAgICAgIHJvb3Quc2NhbGUuY29weShtZXNoLnNjYWxlKTtcclxuXHJcbiAgICAgICAgaWYgKGluUGxhY2UpIHtcclxuICAgICAgICAgICAgaWYgKG1lc2guZ2V0UGFyZW50KCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBtZXNoLmdldFBhcmVudCgpO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50LnJlbW92ZShtZXNoKTtcclxuICAgICAgICAgICAgICAgIHBhcmVudC5hZGQocm9vdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJvb3Q7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBtZXNoVXRpbDtcclxuIiwiaW1wb3J0IHV0aWwgZnJvbSAnLi4vY29yZS91dGlsJztcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5cclxudmFyIE1FVEEgPSB7XHJcbiAgICB2ZXJzaW9uOiAxLjAsXHJcbiAgICB0eXBlOiAnR2VvbWV0cnknLFxyXG4gICAgZ2VuZXJhdG9yOiAndXRpbC50cmFuc2ZlcmFibGUudG9PYmplY3QnXHJcbn07XHJcblxyXG4vKipcclxuICogQGFsaWFzIGNsYXkudXRpbC50cmFuc2ZlcmFibGVcclxuICovXHJcbnZhciB0cmFuc2ZlcmFibGVVdGlsID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGdlb21ldHJ5IHRvIGEgb2JqZWN0IGNvbnRhaW5pbmcgdHJhbnNmZXJhYmxlIGRhdGFcclxuICAgICAqIEBwYXJhbSB7R2VvbWV0cnl9IGdlb21ldHJ5IGdlb21ldHJ5XHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHNoYWxsb3cgd2hldGhlciBzaGFsbG93IGNvcHlcclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHsgZGF0YSA6IGRhdGEsIGJ1ZmZlcnMgOiBidWZmZXJzIH0sIGJ1ZmZlcnMgaXMgdGhlIHRyYW5zZmVyYWJsZSBsaXN0XHJcbiAgICAgKi9cclxuICAgIHRvT2JqZWN0IDogZnVuY3Rpb24gKGdlb21ldHJ5LCBzaGFsbG93KSB7XHJcbiAgICAgICAgaWYgKCFnZW9tZXRyeSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRhdGEgPSB7XHJcbiAgICAgICAgICAgIG1ldGFkYXRhIDogdXRpbC5leHRlbmQoe30sIE1FVEEpXHJcbiAgICAgICAgfTtcclxuICAgICAgICAvL3RyYW5zZmVyYWJsZSBidWZmZXJzXHJcbiAgICAgICAgdmFyIGJ1ZmZlcnMgPSBbXTtcclxuXHJcbiAgICAgICAgLy9keW5hbWljXHJcbiAgICAgICAgZGF0YS5keW5hbWljID0gZ2VvbWV0cnkuZHluYW1pYztcclxuXHJcbiAgICAgICAgLy9ib3VuZGluZyBib3hcclxuICAgICAgICBpZiAoZ2VvbWV0cnkuYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgZGF0YS5ib3VuZGluZ0JveCA9IHtcclxuICAgICAgICAgICAgICAgIG1pbiA6IGdlb21ldHJ5LmJvdW5kaW5nQm94Lm1pbi50b0FycmF5KCksXHJcbiAgICAgICAgICAgICAgICBtYXggOiBnZW9tZXRyeS5ib3VuZGluZ0JveC5tYXgudG9BcnJheSgpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2luZGljZXNcclxuICAgICAgICBpZiAoZ2VvbWV0cnkuaW5kaWNlcyAmJiBnZW9tZXRyeS5pbmRpY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZGF0YS5pbmRpY2VzID0gY29weUlmTmVjZXNzYXJ5KGdlb21ldHJ5LmluZGljZXMsIHNoYWxsb3cpO1xyXG4gICAgICAgICAgICBidWZmZXJzLnB1c2goZGF0YS5pbmRpY2VzLmJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2F0dHJpYnV0ZXNcclxuICAgICAgICBkYXRhLmF0dHJpYnV0ZXMgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIGdlb21ldHJ5LmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgaWYgKGdlb21ldHJ5LmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkocCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlc1twXTtcclxuICAgICAgICAgICAgICAgIC8vaWdub3JlIGVtcHR5IGF0dHJpYnV0ZXNcclxuICAgICAgICAgICAgICAgIGlmIChhdHRyICYmIGF0dHIudmFsdWUgJiYgYXR0ci52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0ciA9IGRhdGEuYXR0cmlidXRlc1twXSA9IGNvcHlBdHRyaWJ1dGUoYXR0ciwgc2hhbGxvdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVycy5wdXNoKGF0dHIudmFsdWUuYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGF0YSA6IGRhdGEsXHJcbiAgICAgICAgICAgIGJ1ZmZlcnMgOiBidWZmZXJzXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXByb2R1Y2UgYSBnZW9tZXRyeSBmcm9tIG9iamVjdCBnZW5lcmF0ZWQgYnkgdG9PYmplY3RcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb2JqZWN0IGdlbmVyYXRlZCBieSB0b09iamVjdFxyXG4gICAgICogQHJldHVybnMge0dlb21ldHJ5fSBnZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICB0b0dlb21ldHJ5IDogZnVuY3Rpb24gKG9iamVjdCkge1xyXG4gICAgICAgIGlmICghb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0LmRhdGEgJiYgb2JqZWN0LmJ1ZmZlcnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zZmVyYWJsZVV0aWwudG9HZW9tZXRyeShvYmplY3QuZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghb2JqZWN0Lm1ldGFkYXRhIHx8IG9iamVjdC5tZXRhZGF0YS5nZW5lcmF0b3IgIT09IE1FVEEuZ2VuZXJhdG9yKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignW3V0aWwudHJhbnNmZXJhYmxlLnRvR2VvbWV0cnldIHRoZSBvYmplY3QgaXMgbm90IGdlbmVyYXRlZCBieSB1dGlsLnRyYW5zZmVyYWJsZS4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vYmFzaWMgb3B0aW9uc1xyXG4gICAgICAgIHZhciBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICBkeW5hbWljIDogb2JqZWN0LmR5bmFtaWMsXHJcbiAgICAgICAgICAgIGluZGljZXMgOiBvYmplY3QuaW5kaWNlc1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChvYmplY3QuYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgdmFyIG1pbiA9IG5ldyBWZWN0b3IzKCkuc2V0QXJyYXkob2JqZWN0LmJvdW5kaW5nQm94Lm1pbik7XHJcbiAgICAgICAgICAgIHZhciBtYXggPSBuZXcgVmVjdG9yMygpLnNldEFycmF5KG9iamVjdC5ib3VuZGluZ0JveC5tYXgpO1xyXG4gICAgICAgICAgICBvcHRpb25zLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KG1pbiwgbWF4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBnZW9tZXRyeSA9IG5ldyBHZW9tZXRyeShvcHRpb25zKTtcclxuXHJcbiAgICAgICAgLy9hdHRyaWJ1dGVzXHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBvYmplY3QuYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICBpZiAob2JqZWN0LmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkocCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyID0gb2JqZWN0LmF0dHJpYnV0ZXNbcF07XHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW3BdID0gbmV3IEdlb21ldHJ5LkF0dHJpYnV0ZShhdHRyLm5hbWUsIGF0dHIudHlwZSwgYXR0ci5zaXplLCBhdHRyLnNlbWFudGljKTtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbcF0udmFsdWUgPSBhdHRyLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZ2VvbWV0cnk7XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiBjb3B5QXR0cmlidXRlKGF0dHIsIHNoYWxsb3cpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmFtZSA6IGF0dHIubmFtZSxcclxuICAgICAgICB0eXBlIDogYXR0ci50eXBlLFxyXG4gICAgICAgIHNpemUgOiBhdHRyLnNpemUsXHJcbiAgICAgICAgc2VtYW50aWMgOiBhdHRyLnNlbWFudGljLFxyXG4gICAgICAgIHZhbHVlIDogY29weUlmTmVjZXNzYXJ5KGF0dHIudmFsdWUsIHNoYWxsb3cpXHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb3B5SWZOZWNlc3NhcnkoYXJyLCBzaGFsbG93KSB7XHJcbiAgICBpZiAoIXNoYWxsb3cpIHtcclxuICAgICAgICByZXR1cm4gbmV3IGFyci5jb25zdHJ1Y3RvcihhcnIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB0cmFuc2ZlcmFibGVVdGlsO1xyXG4iLCIvKipcclxuICogQG5hbWUgY2xheS52ZXJzaW9uXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCAnMS4yLjMnO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS52ci5kaXNvcnRlci5vdXRwdXQudmVydGV4XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQ6IFRFWENPT1JEXzA7XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb246IFBPU0lUSU9OO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2X1RleGNvb3JkID0gdGV4Y29vcmQ7XFxuIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbi54eSwgMC41LCAxLjApO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnZyLmRpc29ydGVyLm91dHB1dC5mcmFnbWVudFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudm9pZCBtYWluKClcXG57XFxuIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG59XFxuQGVuZFwiO1xyXG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xldnIvd2VidnItcG9seWZpbGwvYmxvYi9tYXN0ZXIvc3JjL2NhcmRib2FyZC1kaXN0b3J0ZXIuanNcclxuXHJcbi8vIFVzZSB3ZWJ2ciBtYXkgaGF2ZSBzY2FsZSBwcm9ibGVtLlxyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xldnIvd2VidnItcG9seWZpbGwvaXNzdWVzLzE0MFxyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xldnIvd2VidnItcG9seWZpbGwvc2VhcmNoP3E9U0NBTEUmdHlwZT1Jc3N1ZXMmdXRmOD0lRTIlOUMlOTNcclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZXZyL3dlYnZyLXBvbHlmaWxsL2lzc3Vlcy8xNDdcclxuXHJcblxyXG5pbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuXHJcbmltcG9ydCBvdXRwdXRFc3NsIGZyb20gJy4vb3V0cHV0Lmdsc2wuanMnO1xyXG5cclxuU2hhZGVyLmltcG9ydChvdXRwdXRFc3NsKTtcclxuXHJcbmZ1bmN0aW9uIGxlcnAgKGEsIGIsIHQpIHtcclxuICAgIHJldHVybiBhICogKDEgLSB0KSArIGIgKiB0O1xyXG59XHJcblxyXG52YXIgQ2FyZGJvYXJkRGlzdG9ydGVyID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuXHJcbiAgICAgICAgY2xlYXJDb2xvcjogWzAsIDAsIDAsIDFdLFxyXG5cclxuICAgICAgICBfbWVzaDogbmV3IE1lc2goe1xyXG4gICAgICAgICAgICBnZW9tZXRyeTogbmV3IEdlb21ldHJ5KHtcclxuICAgICAgICAgICAgICAgIGR5bmFtaWM6IHRydWVcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIGN1bGxpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICBtYXRlcmlhbDogbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgIC8vIEZJWE1FIFdoeSBkaXNhYmxlIGRlcHRoTWFzayB3aWxsIGJlIHdyb25nXHJcbiAgICAgICAgICAgICAgICAvLyBkZXB0aE1hc2s6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgZGVwdGhUZXN0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVydGV4OiBTaGFkZXIuc291cmNlKCdjbGF5LnZyLmRpc29ydGVyLm91dHB1dC52ZXJ0ZXgnKSxcclxuICAgICAgICAgICAgICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS52ci5kaXNvcnRlci5vdXRwdXQuZnJhZ21lbnQnKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KSxcclxuICAgICAgICBfZmFrZUNhbWVyYTogbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKClcclxuICAgIH07XHJcbn0sIHtcclxuXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc291cmNlVGV4dHVyZSkge1xyXG4gICAgICAgIHZhciBjbGVhckNvbG9yID0gdGhpcy5jbGVhckNvbG9yO1xyXG4gICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIGdsLmNsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7XHJcbiAgICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XHJcblxyXG4gICAgICAgIGdsLmRpc2FibGUoZ2wuQkxFTkQpO1xyXG5cclxuICAgICAgICB0aGlzLl9tZXNoLm1hdGVyaWFsLnNldCgndGV4dHVyZScsIHNvdXJjZVRleHR1cmUpO1xyXG5cclxuICAgICAgICAvLyBGdWxsIHNpemU/XHJcbiAgICAgICAgcmVuZGVyZXIuc2F2ZVZpZXdwb3J0KCk7XHJcbiAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQoMCwgMCwgcmVuZGVyZXIuZ2V0V2lkdGgoKSwgcmVuZGVyZXIuZ2V0SGVpZ2h0KCkpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoW3RoaXMuX21lc2hdLCB0aGlzLl9mYWtlQ2FtZXJhKTtcclxuICAgICAgICByZW5kZXJlci5yZXN0b3JlVmlld3BvcnQoKTtcclxuICAgICAgICAvLyB0aGlzLl9tZXNoLm1hdGVyaWFsLnNoYWRlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAvLyB0aGlzLl9tZXNoLm1hdGVyaWFsLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgIC8vIHRoaXMuX21lc2gucmVuZGVyKHJlbmRlcmVyLmdsKTtcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlRnJvbVZSRGlzcGxheTogZnVuY3Rpb24gKHZyRGlzcGxheSkge1xyXG5cclxuICAgICAgICAvLyBGSVhNRVxyXG4gICAgICAgIGlmICh2ckRpc3BsYXkuZGV2aWNlSW5mb18pIHtcclxuICAgICAgICAgICAgLy8gSGFyZGNvZGVkIG1lc2ggc2l6ZVxyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVNZXNoKDIwLCAyMCwgdnJEaXNwbGF5LmRldmljZUluZm9fKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignQ2FudCBnZXQgdnJEaXNwbGF5LmRldmljZUluZm9fLCBzZWVtcyBjb2RlIGNoYW5nZWQnKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVNZXNoOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgZGV2aWNlSW5mbykge1xyXG5cclxuICAgICAgICB2YXIgcG9zaXRpb25BdHRyID0gdGhpcy5fbWVzaC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciB0ZXhjb29yZEF0dHIgPSB0aGlzLl9tZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMudGV4Y29vcmQwO1xyXG4gICAgICAgIHBvc2l0aW9uQXR0ci5pbml0KDIgKiB3aWR0aCAqIGhlaWdodCk7XHJcbiAgICAgICAgdGV4Y29vcmRBdHRyLmluaXQoMiAqIHdpZHRoICogaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgdmFyIGxlbnNGcnVzdHVtID0gZGV2aWNlSW5mby5nZXRMZWZ0RXllVmlzaWJsZVRhbkFuZ2xlcygpO1xyXG4gICAgICAgIHZhciBub0xlbnNGcnVzdHVtID0gZGV2aWNlSW5mby5nZXRMZWZ0RXllTm9MZW5zVGFuQW5nbGVzKCk7XHJcbiAgICAgICAgdmFyIHZpZXdwb3J0ID0gZGV2aWNlSW5mby5nZXRMZWZ0RXllVmlzaWJsZVNjcmVlblJlY3Qobm9MZW5zRnJ1c3R1bSk7XHJcbiAgICAgICAgdmFyIHZpZHggPSAwO1xyXG5cclxuICAgICAgICB2YXIgcG9zID0gW107XHJcbiAgICAgICAgdmFyIHV2ID0gW107XHJcblxyXG4gICAgICAgIC8vIFZlcnRpY2VzXHJcbiAgICAgICAgZm9yICh2YXIgZSA9IDA7IGUgPCAyOyBlKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBoZWlnaHQ7IGorKykge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3aWR0aDsgaSsrLCB2aWR4KyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdSA9IGkgLyAod2lkdGggLSAxKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IGogLyAoaGVpZ2h0IC0gMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEdyaWQgcG9pbnRzIHJlZ3VsYXJseSBzcGFjZWQgaW4gU3RyZW9TY3JlZW4sIGFuZCBiYXJyZWwgZGlzdG9ydGVkIGluXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG1lc2guXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSB1O1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IGxlcnAobGVuc0ZydXN0dW1bMF0sIGxlbnNGcnVzdHVtWzJdLCB1KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IGxlcnAobGVuc0ZydXN0dW1bM10sIGxlbnNGcnVzdHVtWzFdLCB2KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgciA9IGRldmljZUluZm8uZGlzdG9ydGlvbi5kaXN0b3J0SW52ZXJzZShkKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IHggKiByIC8gZDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHkgKiByIC8gZDtcclxuICAgICAgICAgICAgICAgICAgICB1ID0gKHAgLSBub0xlbnNGcnVzdHVtWzBdKSAvIChub0xlbnNGcnVzdHVtWzJdIC0gbm9MZW5zRnJ1c3R1bVswXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9IChxIC0gbm9MZW5zRnJ1c3R1bVszXSkgLyAobm9MZW5zRnJ1c3R1bVsxXSAtIG5vTGVuc0ZydXN0dW1bM10pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHUsdiB0byBtZXNoIHNjcmVlbiBjb29yZGluYXRlcy5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgYXNwZWN0ID0gZGV2aWNlSW5mby5kZXZpY2Uud2lkdGhNZXRlcnMgLyBkZXZpY2VJbmZvLmRldmljZS5oZWlnaHRNZXRlcnM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgb3JpZ2luYWwgVW5pdHkgcGx1Z2luIG11bHRpcGxpZWQgVSBieSB0aGUgYXNwZWN0IHJhdGlvXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGRpZG4ndCBtdWx0aXBseSBlaXRoZXIgdmFsdWUgYnkgMiwgYnV0IHRoYXQgc2VlbXMgdG8gZ2V0IGl0XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVhbGx5IGNsb3NlIHRvIGNvcnJlY3QgbG9va2luZyBmb3IgbWUuIEkgaGF0ZSB0aGlzIGtpbmQgb2YgXCJEb24ndFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGtub3cgd2h5IGl0IHdvcmtzXCIgY29kZSB0aG91Z2gsIGFuZCB3b2xkIGxvdmUgYSBtb3JlIGxvZ2ljYWxcclxuICAgICAgICAgICAgICAgICAgICAvLyBleHBsYW5hdGlvbiBvZiB3aGF0IG5lZWRzIHRvIGhhcHBlbiBoZXJlLlxyXG4gICAgICAgICAgICAgICAgICAgIHUgPSAodmlld3BvcnQueCArIHUgKiB2aWV3cG9ydC53aWR0aCAtIDAuNSkgKiAyLjA7IC8vKiBhc3BlY3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9ICh2aWV3cG9ydC55ICsgdiAqIHZpZXdwb3J0LmhlaWdodCAtIDAuNSkgKiAyLjA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHBvc1swXSA9IHU7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zWzFdID0gdjtcclxuICAgICAgICAgICAgICAgICAgICBwb3NbMl0gPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB1dlswXSA9IHMgKiAwLjUgKyBlICogMC41O1xyXG4gICAgICAgICAgICAgICAgICAgIHV2WzFdID0gdDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25BdHRyLnNldCh2aWR4LCBwb3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGNvb3JkQXR0ci5zZXQodmlkeCwgdXYpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgdyA9IGxlbnNGcnVzdHVtWzJdIC0gbGVuc0ZydXN0dW1bMF07XHJcbiAgICAgICAgICAgIGxlbnNGcnVzdHVtWzBdID0gLSh3ICsgbGVuc0ZydXN0dW1bMF0pO1xyXG4gICAgICAgICAgICBsZW5zRnJ1c3R1bVsyXSA9IHcgLSBsZW5zRnJ1c3R1bVsyXTtcclxuICAgICAgICAgICAgdyA9IG5vTGVuc0ZydXN0dW1bMl0gLSBub0xlbnNGcnVzdHVtWzBdO1xyXG4gICAgICAgICAgICBub0xlbnNGcnVzdHVtWzBdID0gLSh3ICsgbm9MZW5zRnJ1c3R1bVswXSk7XHJcbiAgICAgICAgICAgIG5vTGVuc0ZydXN0dW1bMl0gPSB3IC0gbm9MZW5zRnJ1c3R1bVsyXTtcclxuICAgICAgICAgICAgdmlld3BvcnQueCA9IDEgLSAodmlld3BvcnQueCArIHZpZXdwb3J0LndpZHRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEluZGljZXNcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSgyICogKHdpZHRoIC0gMSkgKiAoaGVpZ2h0IC0gMSkgKiA2KTtcclxuICAgICAgICB2YXIgaGFsZndpZHRoID0gd2lkdGggLyAyO1xyXG4gICAgICAgIHZhciBoYWxmaGVpZ2h0ID0gaGVpZ2h0IC8gMjtcclxuICAgICAgICB2YXIgdmlkeCA9IDA7XHJcbiAgICAgICAgdmFyIGlpZHggPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgMjsgZSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaGVpZ2h0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd2lkdGg7IGkrKywgdmlkeCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgaiA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQnVpbGQgYSBxdWFkLiAgTG93ZXIgcmlnaHQgYW5kIHVwcGVyIGxlZnQgcXVhZHJhbnRzIGhhdmUgcXVhZHMgd2l0aFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0cmlhbmdsZSBkaWFnb25hbCBmbGlwcGVkIHRvIGdldCB0aGUgdmlnbmV0dGUgdG8gaW50ZXJwb2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZWN0bHkuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChpIDw9IGhhbGZ3aWR0aCkgPT0gKGogPD0gaGFsZmhlaWdodCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVhZCBkaWFnb25hbCBsb3dlciBsZWZ0IHRvIHVwcGVyIHJpZ2h0LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSB3aWR0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVhZCBkaWFnb25hbCB1cHBlciBsZWZ0IHRvIGxvd2VyIHJpZ2h0LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fbWVzaC5nZW9tZXRyeS5pbmRpY2VzID0gaW5kaWNlcztcclxuXHJcbiAgICAgICAgdGhpcy5fbWVzaC5nZW9tZXRyeS5kaXJ0eSgpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENhcmRib2FyZERpc3RvcnRlcjtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vTm9kZSc7XHJcbmltcG9ydCBDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcclxuXHJcbnZhciB0bXBQcm9qZWN0aW9uTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbnZhciBTdGVyZW9DYW1lcmEgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG5cclxuICAgICAgICBhc3BlY3Q6IDAuNSxcclxuXHJcbiAgICAgICAgX2xlZnRDYW1lcmE6IG5ldyBDYW1lcmEoKSxcclxuXHJcbiAgICAgICAgX3JpZ2h0Q2FtZXJhOiBuZXcgQ2FtZXJhKCksXHJcblxyXG4gICAgICAgIF9leWVMZWZ0OiBuZXcgTWF0cml4NCgpLFxyXG4gICAgICAgIF9leWVSaWdodDogbmV3IE1hdHJpeDQoKSxcclxuXHJcbiAgICAgICAgX2ZyYW1lRGF0YTogbnVsbFxyXG4gICAgfTtcclxufSwge1xyXG5cclxuICAgIHVwZGF0ZUZyb21DYW1lcmE6IGZ1bmN0aW9uIChjYW1lcmEsIGZvY3VzLCB6b29tLCBleWVTZXApIHtcclxuICAgICAgICBpZiAoY2FtZXJhLnRyYW5zZm9ybU5lZWRzVXBkYXRlKCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdOb2RlIHRyYW5zZm9ybSBpcyBub3QgdXBkYXRlZCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9jdXMgPSBmb2N1cyA9PSBudWxsID8gMTAgOiBmb2N1cztcclxuICAgICAgICB6b29tID0gem9vbSA9PSBudWxsID8gMSA6IHpvb207XHJcbiAgICAgICAgZXllU2VwID0gZXllU2VwID09IG51bGwgPyAwLjA2NCA6IGV5ZVNlcDtcclxuXHJcbiAgICAgICAgdmFyIGZvdiA9IGNhbWVyYS5mb3Y7XHJcbiAgICAgICAgdmFyIGFzcGVjdCA9IGNhbWVyYS5hc3BlY3QgKiB0aGlzLmFzcGVjdDtcclxuICAgICAgICB2YXIgbmVhciA9IGNhbWVyYS5uZWFyO1xyXG5cclxuICAgICAgICAvLyBPZmYtYXhpcyBzdGVyZW9zY29waWMgZWZmZWN0IGJhc2VkIG9uXHJcbiAgICAgICAgLy8gaHR0cDovL3BhdWxib3Vya2UubmV0L3N0ZXJlb2dyYXBoaWNzL3N0ZXJlb3JlbmRlci9cclxuXHJcbiAgICAgICAgdG1wUHJvamVjdGlvbk1hdHJpeC5jb3B5KGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICB2YXIgZXllU2VwID0gZXllU2VwIC8gMjtcclxuICAgICAgICB2YXIgZXllU2VwT25Qcm9qZWN0aW9uID0gZXllU2VwICogbmVhciAvIGZvY3VzO1xyXG4gICAgICAgIHZhciB5bWF4ID0gKG5lYXIgKiBNYXRoLnRhbihNYXRoLlBJIC8gMTgwICogZm92ICogMC41ICkgKSAvIHpvb207XHJcbiAgICAgICAgdmFyIHhtaW4sIHhtYXg7XHJcblxyXG4gICAgICAgIC8vIHRyYW5zbGF0ZSB4T2Zmc2V0XHJcbiAgICAgICAgdGhpcy5fZXllTGVmdC5hcnJheVsxMl0gPSAtIGV5ZVNlcDtcclxuICAgICAgICB0aGlzLl9leWVSaWdodC5hcnJheVsxMl0gPSBleWVTZXA7XHJcblxyXG4gICAgICAgIC8vIGZvciBsZWZ0IGV5ZVxyXG4gICAgICAgIHhtaW4gPSAtIHltYXggKiBhc3BlY3QgKyBleWVTZXBPblByb2plY3Rpb247XHJcbiAgICAgICAgeG1heCA9IHltYXggKiBhc3BlY3QgKyBleWVTZXBPblByb2plY3Rpb247XHJcblxyXG4gICAgICAgIHRtcFByb2plY3Rpb25NYXRyaXguYXJyYXlbMF0gPSAyICogbmVhciAvICh4bWF4IC0geG1pbik7XHJcbiAgICAgICAgdG1wUHJvamVjdGlvbk1hdHJpeC5hcnJheVs4XSA9ICh4bWF4ICsgeG1pbiApIC8gKHhtYXggLSB4bWluKTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGVmdENhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmNvcHkodG1wUHJvamVjdGlvbk1hdHJpeCk7XHJcblxyXG4gICAgICAgIC8vIGZvciByaWdodCBleWVcclxuICAgICAgICB4bWluID0gLSB5bWF4ICogYXNwZWN0IC0gZXllU2VwT25Qcm9qZWN0aW9uO1xyXG4gICAgICAgIHhtYXggPSB5bWF4ICogYXNwZWN0IC0gZXllU2VwT25Qcm9qZWN0aW9uO1xyXG5cclxuICAgICAgICB0bXBQcm9qZWN0aW9uTWF0cml4LmFycmF5WzBdID0gMiAqIG5lYXIgLyAoeG1heCAtIHhtaW4pO1xyXG4gICAgICAgIHRtcFByb2plY3Rpb25NYXRyaXguYXJyYXlbOF0gPSAoeG1heCArIHhtaW4gKSAvICh4bWF4IC0geG1pbik7XHJcblxyXG4gICAgICAgIHRoaXMuX3JpZ2h0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXguY29weSh0bXBQcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGVmdENhbWVyYS53b3JsZFRyYW5zZm9ybVxyXG4gICAgICAgICAgICAuY29weShjYW1lcmEud29ybGRUcmFuc2Zvcm0pXHJcbiAgICAgICAgICAgIC5tdWx0aXBseSh0aGlzLl9leWVMZWZ0KTtcclxuXHJcbiAgICAgICAgdGhpcy5fcmlnaHRDYW1lcmEud29ybGRUcmFuc2Zvcm1cclxuICAgICAgICAgICAgLmNvcHkoY2FtZXJhLndvcmxkVHJhbnNmb3JtKVxyXG4gICAgICAgICAgICAubXVsdGlwbHkodGhpcy5fZXllUmlnaHQpO1xyXG5cclxuICAgICAgICB0aGlzLl9sZWZ0Q2FtZXJhLmRlY29tcG9zZVdvcmxkVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgdGhpcy5fbGVmdENhbWVyYS5kZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JpZ2h0Q2FtZXJhLmRlY29tcG9zZVdvcmxkVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgdGhpcy5fcmlnaHRDYW1lcmEuZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVGcm9tVlJEaXNwbGF5OiBmdW5jdGlvbiAodnJEaXNwbGF5LCBwYXJlbnROb2RlKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgVlJGcmFtZURhdGEgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmcmFtZURhdGEgPSB0aGlzLl9mcmFtZURhdGEgfHwgKHRoaXMuX2ZyYW1lRGF0YSA9IG5ldyBWUkZyYW1lRGF0YSgpKTtcclxuICAgICAgICB2ckRpc3BsYXkuZ2V0RnJhbWVEYXRhKGZyYW1lRGF0YSk7XHJcbiAgICAgICAgdmFyIGxlZnRDYW1lcmEgPSB0aGlzLl9sZWZ0Q2FtZXJhO1xyXG4gICAgICAgIHZhciByaWdodENhbWVyYSA9IHRoaXMuX3JpZ2h0Q2FtZXJhO1xyXG5cclxuICAgICAgICBsZWZ0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXguc2V0QXJyYXkoZnJhbWVEYXRhLmxlZnRQcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICBsZWZ0Q2FtZXJhLmRlY29tcG9zZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICAgICAgICBsZWZ0Q2FtZXJhLnZpZXdNYXRyaXguc2V0QXJyYXkoZnJhbWVEYXRhLmxlZnRWaWV3TWF0cml4KTtcclxuICAgICAgICBsZWZ0Q2FtZXJhLnNldFZpZXdNYXRyaXgobGVmdENhbWVyYS52aWV3TWF0cml4KTtcclxuXHJcbiAgICAgICAgcmlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5zZXRBcnJheShmcmFtZURhdGEucmlnaHRQcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICByaWdodENhbWVyYS5kZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgcmlnaHRDYW1lcmEudmlld01hdHJpeC5zZXRBcnJheShmcmFtZURhdGEucmlnaHRWaWV3TWF0cml4KTtcclxuICAgICAgICByaWdodENhbWVyYS5zZXRWaWV3TWF0cml4KHJpZ2h0Q2FtZXJhLnZpZXdNYXRyaXgpO1xyXG5cclxuICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLndvcmxkVHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlLnRyYW5zZm9ybU5lZWRzVXBkYXRlKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTm9kZSB0cmFuc2Zvcm0gaXMgbm90IHVwZGF0ZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZWZ0Q2FtZXJhLndvcmxkVHJhbnNmb3JtLm11bHRpcGx5TGVmdChwYXJlbnROb2RlLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgbGVmdENhbWVyYS5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgICAgICAgICByaWdodENhbWVyYS53b3JsZFRyYW5zZm9ybS5tdWx0aXBseUxlZnQocGFyZW50Tm9kZS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIHJpZ2h0Q2FtZXJhLmRlY29tcG9zZVdvcmxkVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBnZXRMZWZ0Q2FtZXJhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlZnRDYW1lcmE7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFJpZ2h0Q2FtZXJhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JpZ2h0Q2FtZXJhO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFN0ZXJlb0NhbWVyYTtcclxuIiwiLyoqIEBuYW1lc3BhY2UgY2xheSAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5Lm1hdGggKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5hbmltYXRpb24gKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5hc3luYyAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LmNhbWVyYSAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LmNvbXBvc2l0b3IgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5jb3JlICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkuZ2VvbWV0cnkgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5oZWxwZXIgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5saWdodCAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LmxvYWRlciAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LnBhcnRpY2xlICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkucGx1Z2luICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkucHJlUGFzcyAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LnNoYWRlciAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LnRleHR1cmUgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS51dGlsICovXHJcblxyXG5pbXBvcnQgQW5pbWF0b3IkMCBmcm9tICcuL2FuaW1hdGlvbi9BbmltYXRvcic7XHJcbmltcG9ydCBCbGVuZDFEQ2xpcCQxIGZyb20gJy4vYW5pbWF0aW9uL0JsZW5kMURDbGlwJztcclxuaW1wb3J0IEJsZW5kMkRDbGlwJDIgZnJvbSAnLi9hbmltYXRpb24vQmxlbmQyRENsaXAnO1xyXG5pbXBvcnQgQ2xpcCQzIGZyb20gJy4vYW5pbWF0aW9uL0NsaXAnO1xyXG5pbXBvcnQgZWFzaW5nJDQgZnJvbSAnLi9hbmltYXRpb24vZWFzaW5nJztcclxuaW1wb3J0IFNhbXBsZXJUcmFjayQ1IGZyb20gJy4vYW5pbWF0aW9uL1NhbXBsZXJUcmFjayc7XHJcbmltcG9ydCBUaW1lbGluZSQ2IGZyb20gJy4vYW5pbWF0aW9uL1RpbWVsaW5lJztcclxuaW1wb3J0IFRyYWNrQ2xpcCQ3IGZyb20gJy4vYW5pbWF0aW9uL1RyYWNrQ2xpcCc7XHJcbmltcG9ydCBhcHBsaWNhdGlvbiQ4IGZyb20gJy4vYXBwbGljYXRpb24nO1xyXG5pbXBvcnQgVGFzayQ5IGZyb20gJy4vYXN5bmMvVGFzayc7XHJcbmltcG9ydCBUYXNrR3JvdXAkMTAgZnJvbSAnLi9hc3luYy9UYXNrR3JvdXAnO1xyXG5pbXBvcnQgQ2FtZXJhJDExIGZyb20gJy4vQ2FtZXJhJztcclxuaW1wb3J0IE9ydGhvZ3JhcGhpYyQxMiBmcm9tICcuL2NhbWVyYS9PcnRob2dyYXBoaWMnO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmUkMTMgZnJvbSAnLi9jYW1lcmEvUGVyc3BlY3RpdmUnO1xyXG5pbXBvcnQgQ29tcG9zaXRvciQxNCBmcm9tICcuL2NvbXBvc2l0b3IvQ29tcG9zaXRvcic7XHJcbmltcG9ydCBDb21wb3NpdG9yTm9kZSQxNSBmcm9tICcuL2NvbXBvc2l0b3IvQ29tcG9zaXRvck5vZGUnO1xyXG5pbXBvcnQgY3JlYXRlQ29tcG9zaXRvciQxNiBmcm9tICcuL2NvbXBvc2l0b3IvY3JlYXRlQ29tcG9zaXRvcic7XHJcbmltcG9ydCBGaWx0ZXJOb2RlJDE3IGZyb20gJy4vY29tcG9zaXRvci9GaWx0ZXJOb2RlJztcclxuaW1wb3J0IEdyYXBoJDE4IGZyb20gJy4vY29tcG9zaXRvci9HcmFwaCc7XHJcbmltcG9ydCBQYXNzJDE5IGZyb20gJy4vY29tcG9zaXRvci9QYXNzJztcclxuaW1wb3J0IFNjZW5lTm9kZSQyMCBmcm9tICcuL2NvbXBvc2l0b3IvU2NlbmVOb2RlJztcclxuaW1wb3J0IFRleHR1cmVOb2RlJDIxIGZyb20gJy4vY29tcG9zaXRvci9UZXh0dXJlTm9kZSc7XHJcbmltcG9ydCBUZXh0dXJlUG9vbCQyMiBmcm9tICcuL2NvbXBvc2l0b3IvVGV4dHVyZVBvb2wnO1xyXG5pbXBvcnQgQmFzZSQyMyBmcm9tICcuL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBDYWNoZSQyNCBmcm9tICcuL2NvcmUvQ2FjaGUnO1xyXG5pbXBvcnQgY29sb3IkMjUgZnJvbSAnLi9jb3JlL2NvbG9yJztcclxuaW1wb3J0IGdsZW51bSQyNiBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IEdMSW5mbyQyNyBmcm9tICcuL2NvcmUvR0xJbmZvJztcclxuaW1wb3J0IExpbmtlZExpc3QkMjggZnJvbSAnLi9jb3JlL0xpbmtlZExpc3QnO1xyXG5pbXBvcnQgTFJVJDI5IGZyb20gJy4vY29yZS9MUlUnO1xyXG5pbXBvcnQgZXh0ZW5kJDMwIGZyb20gJy4vY29yZS9taXhpbi9leHRlbmQnO1xyXG5pbXBvcnQgbm90aWZpZXIkMzEgZnJvbSAnLi9jb3JlL21peGluL25vdGlmaWVyJztcclxuaW1wb3J0IHJlcXVlc3QkMzIgZnJvbSAnLi9jb3JlL3JlcXVlc3QnO1xyXG5pbXBvcnQgdXRpbCQzMyBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCB2ZW5kb3IkMzQgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCBjcmVhdGVDb21wb3NpdG9yJDM1IGZyb20gJy4vY3JlYXRlQ29tcG9zaXRvcic7XHJcbmltcG9ydCBHQnVmZmVyJDM2IGZyb20gJy4vZGVmZXJyZWQvR0J1ZmZlcic7XHJcbmltcG9ydCBSZW5kZXJlciQzNyBmcm9tICcuL2RlZmVycmVkL1JlbmRlcmVyJztcclxuaW1wb3J0IGdsbWF0cml4JDM4IGZyb20gJy4vZGVwL2dsbWF0cml4JztcclxuaW1wb3J0IEZyYW1lQnVmZmVyJDM5IGZyb20gJy4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgR2VvbWV0cnkkNDAgZnJvbSAnLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBDb25lJDQxIGZyb20gJy4vZ2VvbWV0cnkvQ29uZSc7XHJcbmltcG9ydCBDdWJlJDQyIGZyb20gJy4vZ2VvbWV0cnkvQ3ViZSc7XHJcbmltcG9ydCBDeWxpbmRlciQ0MyBmcm9tICcuL2dlb21ldHJ5L0N5bGluZGVyJztcclxuaW1wb3J0IFBhcmFtZXRyaWNTdXJmYWNlJDQ0IGZyb20gJy4vZ2VvbWV0cnkvUGFyYW1ldHJpY1N1cmZhY2UnO1xyXG5pbXBvcnQgUGxhbmUkNDUgZnJvbSAnLi9nZW9tZXRyeS9QbGFuZSc7XHJcbmltcG9ydCBTcGhlcmUkNDYgZnJvbSAnLi9nZW9tZXRyeS9TcGhlcmUnO1xyXG5pbXBvcnQgR2VvbWV0cnlCYXNlJDQ3IGZyb20gJy4vR2VvbWV0cnlCYXNlJztcclxuaW1wb3J0IEpvaW50JDQ4IGZyb20gJy4vSm9pbnQnO1xyXG5pbXBvcnQgTGlnaHQkNDkgZnJvbSAnLi9MaWdodCc7XHJcbmltcG9ydCBBbWJpZW50JDUwIGZyb20gJy4vbGlnaHQvQW1iaWVudCc7XHJcbmltcG9ydCBBbWJpZW50Q3ViZW1hcCQ1MSBmcm9tICcuL2xpZ2h0L0FtYmllbnRDdWJlbWFwJztcclxuaW1wb3J0IEFtYmllbnRTSCQ1MiBmcm9tICcuL2xpZ2h0L0FtYmllbnRTSCc7XHJcbmltcG9ydCBEaXJlY3Rpb25hbCQ1MyBmcm9tICcuL2xpZ2h0L0RpcmVjdGlvbmFsJztcclxuaW1wb3J0IFBvaW50JDU0IGZyb20gJy4vbGlnaHQvUG9pbnQnO1xyXG5pbXBvcnQgU3BoZXJlJDU1IGZyb20gJy4vbGlnaHQvU3BoZXJlJztcclxuaW1wb3J0IFNwb3QkNTYgZnJvbSAnLi9saWdodC9TcG90JztcclxuaW1wb3J0IFR1YmUkNTcgZnJvbSAnLi9saWdodC9UdWJlJztcclxuaW1wb3J0IEZYJDU4IGZyb20gJy4vbG9hZGVyL0ZYJztcclxuaW1wb3J0IEdMVEYkNTkgZnJvbSAnLi9sb2FkZXIvR0xURic7XHJcbmltcG9ydCBNYXRlcmlhbCQ2MCBmcm9tICcuL01hdGVyaWFsJztcclxuaW1wb3J0IEJvdW5kaW5nQm94JDYxIGZyb20gJy4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCBGcnVzdHVtJDYyIGZyb20gJy4vbWF0aC9GcnVzdHVtJztcclxuaW1wb3J0IE1hdHJpeDIkNjMgZnJvbSAnLi9tYXRoL01hdHJpeDInO1xyXG5pbXBvcnQgTWF0cml4MmQkNjQgZnJvbSAnLi9tYXRoL01hdHJpeDJkJztcclxuaW1wb3J0IE1hdHJpeDMkNjUgZnJvbSAnLi9tYXRoL01hdHJpeDMnO1xyXG5pbXBvcnQgTWF0cml4NCQ2NiBmcm9tICcuL21hdGgvTWF0cml4NCc7XHJcbmltcG9ydCBQbGFuZSQ2NyBmcm9tICcuL21hdGgvUGxhbmUnO1xyXG5pbXBvcnQgUXVhdGVybmlvbiQ2OCBmcm9tICcuL21hdGgvUXVhdGVybmlvbic7XHJcbmltcG9ydCBSYXkkNjkgZnJvbSAnLi9tYXRoL1JheSc7XHJcbmltcG9ydCB1dGlsJDcwIGZyb20gJy4vbWF0aC91dGlsJztcclxuaW1wb3J0IFZhbHVlJDcxIGZyb20gJy4vbWF0aC9WYWx1ZSc7XHJcbmltcG9ydCBWZWN0b3IyJDcyIGZyb20gJy4vbWF0aC9WZWN0b3IyJztcclxuaW1wb3J0IFZlY3RvcjMkNzMgZnJvbSAnLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgVmVjdG9yNCQ3NCBmcm9tICcuL21hdGgvVmVjdG9yNCc7XHJcbmltcG9ydCBNZXNoJDc1IGZyb20gJy4vTWVzaCc7XHJcbmltcG9ydCBOb2RlJDc2IGZyb20gJy4vTm9kZSc7XHJcbmltcG9ydCBFbWl0dGVyJDc3IGZyb20gJy4vcGFydGljbGUvRW1pdHRlcic7XHJcbmltcG9ydCBGaWVsZCQ3OCBmcm9tICcuL3BhcnRpY2xlL0ZpZWxkJztcclxuaW1wb3J0IEZvcmNlRmllbGQkNzkgZnJvbSAnLi9wYXJ0aWNsZS9Gb3JjZUZpZWxkJztcclxuaW1wb3J0IFBhcnRpY2xlJDgwIGZyb20gJy4vcGFydGljbGUvUGFydGljbGUnO1xyXG5pbXBvcnQgUGFydGljbGVSZW5kZXJhYmxlJDgxIGZyb20gJy4vcGFydGljbGUvUGFydGljbGVSZW5kZXJhYmxlJztcclxuaW1wb3J0IFBpeGVsUGlja2luZyQ4MiBmcm9tICcuL3BpY2tpbmcvUGl4ZWxQaWNraW5nJztcclxuaW1wb3J0IFJheVBpY2tpbmckODMgZnJvbSAnLi9waWNraW5nL1JheVBpY2tpbmcnO1xyXG5pbXBvcnQgRnJlZUNvbnRyb2wkODQgZnJvbSAnLi9wbHVnaW4vRnJlZUNvbnRyb2wnO1xyXG5pbXBvcnQgR2FtZXBhZENvbnRyb2wkODUgZnJvbSAnLi9wbHVnaW4vR2FtZXBhZENvbnRyb2wnO1xyXG5pbXBvcnQgR2VzdHVyZU1nciQ4NiBmcm9tICcuL3BsdWdpbi9HZXN0dXJlTWdyJztcclxuaW1wb3J0IEluZmluaXRlUGxhbmUkODcgZnJvbSAnLi9wbHVnaW4vSW5maW5pdGVQbGFuZSc7XHJcbmltcG9ydCBPcmJpdENvbnRyb2wkODggZnJvbSAnLi9wbHVnaW4vT3JiaXRDb250cm9sJztcclxuaW1wb3J0IFNreWJveCQ4OSBmcm9tICcuL3BsdWdpbi9Ta3lib3gnO1xyXG5pbXBvcnQgU2t5ZG9tZSQ5MCBmcm9tICcuL3BsdWdpbi9Ta3lkb21lJztcclxuaW1wb3J0IEVudmlyb25tZW50TWFwJDkxIGZyb20gJy4vcHJlUGFzcy9FbnZpcm9ubWVudE1hcCc7XHJcbmltcG9ydCBTaGFkb3dNYXAkOTIgZnJvbSAnLi9wcmVQYXNzL1NoYWRvd01hcCc7XHJcbmltcG9ydCBSZW5kZXJhYmxlJDkzIGZyb20gJy4vUmVuZGVyYWJsZSc7XHJcbmltcG9ydCBSZW5kZXJlciQ5NCBmcm9tICcuL1JlbmRlcmVyJztcclxuaW1wb3J0IFNjZW5lJDk1IGZyb20gJy4vU2NlbmUnO1xyXG5pbXBvcnQgU2hhZGVyJDk2IGZyb20gJy4vU2hhZGVyJztcclxuaW1wb3J0IGxpYnJhcnkkOTcgZnJvbSAnLi9zaGFkZXIvbGlicmFyeSc7XHJcbmltcG9ydCByZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yJDk4IGZyb20gJy4vc2hhZGVyL3JlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3InO1xyXG5pbXBvcnQgbGlnaHQkOTkgZnJvbSAnLi9zaGFkZXIvc291cmNlL2hlYWRlci9saWdodCc7XHJcbmltcG9ydCBTa2VsZXRvbiQxMDAgZnJvbSAnLi9Ta2VsZXRvbic7XHJcbmltcG9ydCBTdGFuZGFyZE1hdGVyaWFsJDEwMSBmcm9tICcuL1N0YW5kYXJkTWF0ZXJpYWwnO1xyXG5pbXBvcnQgU3RhdGljR2VvbWV0cnkkMTAyIGZyb20gJy4vU3RhdGljR2VvbWV0cnknO1xyXG5pbXBvcnQgVGV4dHVyZSQxMDMgZnJvbSAnLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmUyRCQxMDQgZnJvbSAnLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUkMTA1IGZyb20gJy4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgVGltZWxpbmUkMTA2IGZyb20gJy4vVGltZWxpbmUnO1xyXG5pbXBvcnQgY3ViZW1hcCQxMDcgZnJvbSAnLi91dGlsL2N1YmVtYXAnO1xyXG5pbXBvcnQgZGRzJDEwOCBmcm9tICcuL3V0aWwvZGRzJztcclxuaW1wb3J0IGRlbGF1bmF5JDEwOSBmcm9tICcuL3V0aWwvZGVsYXVuYXknO1xyXG5pbXBvcnQgaGRyJDExMCBmcm9tICcuL3V0aWwvaGRyJztcclxuaW1wb3J0IG1lc2gkMTExIGZyb20gJy4vdXRpbC9tZXNoJztcclxuaW1wb3J0IHNoJDExMiBmcm9tICcuL3V0aWwvc2gnO1xyXG5pbXBvcnQgdGV4dHVyZSQxMTMgZnJvbSAnLi91dGlsL3RleHR1cmUnO1xyXG5pbXBvcnQgdHJhbnNmZXJhYmxlJDExNCBmcm9tICcuL3V0aWwvdHJhbnNmZXJhYmxlJztcclxuaW1wb3J0IHZlcnNpb24kMTE1IGZyb20gJy4vdmVyc2lvbic7XHJcbmltcG9ydCBDYXJkYm9hcmREaXN0b3J0ZXIkMTE2IGZyb20gJy4vdnIvQ2FyZGJvYXJkRGlzdG9ydGVyJztcclxuaW1wb3J0IFN0ZXJlb0NhbWVyYSQxMTcgZnJvbSAnLi92ci9TdGVyZW9DYW1lcmEnO1xyXG5cclxuXHJcbnZhciBhbmltYXRpb24gPSB7XHJcbiAgICBBbmltYXRvciA6IEFuaW1hdG9yJDAsXHJcbiAgICBCbGVuZDFEQ2xpcCA6IEJsZW5kMURDbGlwJDEsXHJcbiAgICBCbGVuZDJEQ2xpcCA6IEJsZW5kMkRDbGlwJDIsXHJcbiAgICBDbGlwIDogQ2xpcCQzLFxyXG4gICAgZWFzaW5nIDogZWFzaW5nJDQsXHJcbiAgICBTYW1wbGVyVHJhY2sgOiBTYW1wbGVyVHJhY2skNSxcclxuICAgIFRpbWVsaW5lIDogVGltZWxpbmUkNixcclxuICAgIFRyYWNrQ2xpcCA6IFRyYWNrQ2xpcCQ3XHJcbn07XHJcbmV4cG9ydCB7IGFuaW1hdGlvbiB9O1xyXG5cclxuZXhwb3J0IHsgYXBwbGljYXRpb24kOCBhcyBhcHBsaWNhdGlvbiB9O1xyXG5cclxudmFyIGFzeW5jID0ge1xyXG4gICAgVGFzayA6IFRhc2skOSxcclxuICAgIFRhc2tHcm91cCA6IFRhc2tHcm91cCQxMFxyXG59O1xyXG5leHBvcnQgeyBhc3luYyB9O1xyXG5cclxuZXhwb3J0IHsgQ2FtZXJhJDExIGFzIENhbWVyYSB9O1xyXG5cclxudmFyIGNhbWVyYSA9IHtcclxuICAgIE9ydGhvZ3JhcGhpYyA6IE9ydGhvZ3JhcGhpYyQxMixcclxuICAgIFBlcnNwZWN0aXZlIDogUGVyc3BlY3RpdmUkMTNcclxufTtcclxuZXhwb3J0IHsgY2FtZXJhIH07XHJcblxyXG5cclxudmFyIGNvbXBvc2l0b3IgPSB7XHJcbiAgICBDb21wb3NpdG9yIDogQ29tcG9zaXRvciQxNCxcclxuICAgIENvbXBvc2l0b3JOb2RlIDogQ29tcG9zaXRvck5vZGUkMTUsXHJcbiAgICBjcmVhdGVDb21wb3NpdG9yIDogY3JlYXRlQ29tcG9zaXRvciQxNixcclxuICAgIEZpbHRlck5vZGUgOiBGaWx0ZXJOb2RlJDE3LFxyXG4gICAgR3JhcGggOiBHcmFwaCQxOCxcclxuICAgIFBhc3MgOiBQYXNzJDE5LFxyXG4gICAgU2NlbmVOb2RlIDogU2NlbmVOb2RlJDIwLFxyXG4gICAgVGV4dHVyZU5vZGUgOiBUZXh0dXJlTm9kZSQyMSxcclxuICAgIFRleHR1cmVQb29sIDogVGV4dHVyZVBvb2wkMjJcclxufTtcclxuZXhwb3J0IHsgY29tcG9zaXRvciB9O1xyXG5cclxuXHJcbnZhciBjb3JlID0ge1xyXG4gICAgQmFzZSA6IEJhc2UkMjMsXHJcbiAgICBDYWNoZSA6IENhY2hlJDI0LFxyXG4gICAgY29sb3IgOiBjb2xvciQyNSxcclxuICAgIGdsZW51bSA6IGdsZW51bSQyNixcclxuICAgIEdMSW5mbyA6IEdMSW5mbyQyNyxcclxuICAgIExpbmtlZExpc3QgOiBMaW5rZWRMaXN0JDI4LFxyXG4gICAgTFJVIDogTFJVJDI5LFxyXG4gICAgbWl4aW4gOiB7XHJcbiAgICAgICAgZXh0ZW5kIDogZXh0ZW5kJDMwLFxyXG4gICAgICAgIG5vdGlmaWVyIDogbm90aWZpZXIkMzFcclxuICAgIH0sXHJcbiAgICByZXF1ZXN0IDogcmVxdWVzdCQzMixcclxuICAgIHV0aWwgOiB1dGlsJDMzLFxyXG4gICAgdmVuZG9yIDogdmVuZG9yJDM0XHJcbn07XHJcbmV4cG9ydCB7IGNvcmUgfTtcclxuXHJcbmV4cG9ydCB7IGNyZWF0ZUNvbXBvc2l0b3IkMzUgYXMgY3JlYXRlQ29tcG9zaXRvciB9O1xyXG5cclxudmFyIGRlZmVycmVkID0ge1xyXG4gICAgR0J1ZmZlciA6IEdCdWZmZXIkMzYsXHJcbiAgICBSZW5kZXJlciA6IFJlbmRlcmVyJDM3XHJcbn07XHJcbmV4cG9ydCB7IGRlZmVycmVkIH07XHJcblxyXG5cclxudmFyIGRlcCA9IHtcclxuICAgIGdsbWF0cml4IDogZ2xtYXRyaXgkMzhcclxufTtcclxuZXhwb3J0IHsgZGVwIH07XHJcblxyXG5leHBvcnQgeyBGcmFtZUJ1ZmZlciQzOSBhcyBGcmFtZUJ1ZmZlciB9O1xyXG5leHBvcnQgeyBHZW9tZXRyeSQ0MCBhcyBHZW9tZXRyeSB9O1xyXG5cclxudmFyIGdlb21ldHJ5ID0ge1xyXG4gICAgQ29uZSA6IENvbmUkNDEsXHJcbiAgICBDdWJlIDogQ3ViZSQ0MixcclxuICAgIEN5bGluZGVyIDogQ3lsaW5kZXIkNDMsXHJcbiAgICBQYXJhbWV0cmljU3VyZmFjZSA6IFBhcmFtZXRyaWNTdXJmYWNlJDQ0LFxyXG4gICAgUGxhbmUgOiBQbGFuZSQ0NSxcclxuICAgIFNwaGVyZSA6IFNwaGVyZSQ0NlxyXG59O1xyXG5leHBvcnQgeyBnZW9tZXRyeSB9O1xyXG5cclxuZXhwb3J0IHsgR2VvbWV0cnlCYXNlJDQ3IGFzIEdlb21ldHJ5QmFzZSB9O1xyXG5leHBvcnQgeyBKb2ludCQ0OCBhcyBKb2ludCB9O1xyXG5leHBvcnQgeyBMaWdodCQ0OSBhcyBMaWdodCB9O1xyXG5cclxudmFyIGxpZ2h0ID0ge1xyXG4gICAgQW1iaWVudCA6IEFtYmllbnQkNTAsXHJcbiAgICBBbWJpZW50Q3ViZW1hcCA6IEFtYmllbnRDdWJlbWFwJDUxLFxyXG4gICAgQW1iaWVudFNIIDogQW1iaWVudFNIJDUyLFxyXG4gICAgRGlyZWN0aW9uYWwgOiBEaXJlY3Rpb25hbCQ1MyxcclxuICAgIFBvaW50IDogUG9pbnQkNTQsXHJcbiAgICBTcGhlcmUgOiBTcGhlcmUkNTUsXHJcbiAgICBTcG90IDogU3BvdCQ1NixcclxuICAgIFR1YmUgOiBUdWJlJDU3XHJcbn07XHJcbmV4cG9ydCB7IGxpZ2h0IH07XHJcblxyXG5cclxudmFyIGxvYWRlciA9IHtcclxuICAgIEZYIDogRlgkNTgsXHJcbiAgICBHTFRGIDogR0xURiQ1OVxyXG59O1xyXG5leHBvcnQgeyBsb2FkZXIgfTtcclxuXHJcbmV4cG9ydCB7IE1hdGVyaWFsJDYwIGFzIE1hdGVyaWFsIH07XHJcblxyXG52YXIgbWF0aCA9IHtcclxuICAgIEJvdW5kaW5nQm94IDogQm91bmRpbmdCb3gkNjEsXHJcbiAgICBGcnVzdHVtIDogRnJ1c3R1bSQ2MixcclxuICAgIE1hdHJpeDIgOiBNYXRyaXgyJDYzLFxyXG4gICAgTWF0cml4MmQgOiBNYXRyaXgyZCQ2NCxcclxuICAgIE1hdHJpeDMgOiBNYXRyaXgzJDY1LFxyXG4gICAgTWF0cml4NCA6IE1hdHJpeDQkNjYsXHJcbiAgICBQbGFuZSA6IFBsYW5lJDY3LFxyXG4gICAgUXVhdGVybmlvbiA6IFF1YXRlcm5pb24kNjgsXHJcbiAgICBSYXkgOiBSYXkkNjksXHJcbiAgICB1dGlsIDogdXRpbCQ3MCxcclxuICAgIFZhbHVlIDogVmFsdWUkNzEsXHJcbiAgICBWZWN0b3IyIDogVmVjdG9yMiQ3MixcclxuICAgIFZlY3RvcjMgOiBWZWN0b3IzJDczLFxyXG4gICAgVmVjdG9yNCA6IFZlY3RvcjQkNzRcclxufTtcclxuZXhwb3J0IHsgbWF0aCB9O1xyXG5leHBvcnQgeyBCb3VuZGluZ0JveCQ2MSBhcyBCb3VuZGluZ0JveCB9O1xyXG5leHBvcnQgeyBGcnVzdHVtJDYyIGFzIEZydXN0dW0gfTtcclxuZXhwb3J0IHsgTWF0cml4MiQ2MyBhcyBNYXRyaXgyIH07XHJcbmV4cG9ydCB7IE1hdHJpeDJkJDY0IGFzIE1hdHJpeDJkIH07XHJcbmV4cG9ydCB7IE1hdHJpeDMkNjUgYXMgTWF0cml4MyB9O1xyXG5leHBvcnQgeyBNYXRyaXg0JDY2IGFzIE1hdHJpeDQgfTtcclxuZXhwb3J0IHsgUGxhbmUkNjcgYXMgUGxhbmUgfTtcclxuZXhwb3J0IHsgUXVhdGVybmlvbiQ2OCBhcyBRdWF0ZXJuaW9uIH07XHJcbmV4cG9ydCB7IFJheSQ2OSBhcyBSYXkgfTtcclxuZXhwb3J0IHsgVmFsdWUkNzEgYXMgVmFsdWUgfTtcclxuZXhwb3J0IHsgVmVjdG9yMiQ3MiBhcyBWZWN0b3IyIH07XHJcbmV4cG9ydCB7IFZlY3RvcjMkNzMgYXMgVmVjdG9yMyB9O1xyXG5leHBvcnQgeyBWZWN0b3I0JDc0IGFzIFZlY3RvcjQgfTtcclxuXHJcbmV4cG9ydCB7IE1lc2gkNzUgYXMgTWVzaCB9O1xyXG5leHBvcnQgeyBOb2RlJDc2IGFzIE5vZGUgfTtcclxuXHJcbnZhciBwYXJ0aWNsZSA9IHtcclxuICAgIEVtaXR0ZXIgOiBFbWl0dGVyJDc3LFxyXG4gICAgRmllbGQgOiBGaWVsZCQ3OCxcclxuICAgIEZvcmNlRmllbGQgOiBGb3JjZUZpZWxkJDc5LFxyXG4gICAgUGFydGljbGUgOiBQYXJ0aWNsZSQ4MCxcclxuICAgIFBhcnRpY2xlUmVuZGVyYWJsZSA6IFBhcnRpY2xlUmVuZGVyYWJsZSQ4MVxyXG59O1xyXG5leHBvcnQgeyBwYXJ0aWNsZSB9O1xyXG5cclxuXHJcbnZhciBwaWNraW5nID0ge1xyXG4gICAgUGl4ZWxQaWNraW5nIDogUGl4ZWxQaWNraW5nJDgyLFxyXG4gICAgUmF5UGlja2luZyA6IFJheVBpY2tpbmckODNcclxufTtcclxuZXhwb3J0IHsgcGlja2luZyB9O1xyXG5cclxuXHJcbnZhciBwbHVnaW4gPSB7XHJcbiAgICBGcmVlQ29udHJvbCA6IEZyZWVDb250cm9sJDg0LFxyXG4gICAgR2FtZXBhZENvbnRyb2wgOiBHYW1lcGFkQ29udHJvbCQ4NSxcclxuICAgIEdlc3R1cmVNZ3IgOiBHZXN0dXJlTWdyJDg2LFxyXG4gICAgSW5maW5pdGVQbGFuZSA6IEluZmluaXRlUGxhbmUkODcsXHJcbiAgICBPcmJpdENvbnRyb2wgOiBPcmJpdENvbnRyb2wkODgsXHJcbiAgICBTa3lib3ggOiBTa3lib3gkODksXHJcbiAgICBTa3lkb21lIDogU2t5ZG9tZSQ5MFxyXG59O1xyXG5leHBvcnQgeyBwbHVnaW4gfTtcclxuXHJcblxyXG52YXIgcHJlUGFzcyA9IHtcclxuICAgIEVudmlyb25tZW50TWFwIDogRW52aXJvbm1lbnRNYXAkOTEsXHJcbiAgICBTaGFkb3dNYXAgOiBTaGFkb3dNYXAkOTJcclxufTtcclxuZXhwb3J0IHsgcHJlUGFzcyB9O1xyXG5cclxuZXhwb3J0IHsgUmVuZGVyYWJsZSQ5MyBhcyBSZW5kZXJhYmxlIH07XHJcbmV4cG9ydCB7IFJlbmRlcmVyJDk0IGFzIFJlbmRlcmVyIH07XHJcbmV4cG9ydCB7IFNjZW5lJDk1IGFzIFNjZW5lIH07XHJcbmV4cG9ydCB7IFNoYWRlciQ5NiBhcyBTaGFkZXIgfTtcclxuXHJcbnZhciBzaGFkZXIgPSB7XHJcbiAgICBsaWJyYXJ5IDogbGlicmFyeSQ5NyxcclxuICAgIHJlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3IgOiByZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yJDk4LFxyXG4gICAgc291cmNlIDoge1xyXG4gICAgaGVhZGVyIDoge1xyXG4gICAgICAgIGxpZ2h0IDogbGlnaHQkOTlcclxuICAgIH1cclxuICAgIH1cclxufTtcclxuZXhwb3J0IHsgc2hhZGVyIH07XHJcblxyXG5leHBvcnQgeyBTa2VsZXRvbiQxMDAgYXMgU2tlbGV0b24gfTtcclxuZXhwb3J0IHsgU3RhbmRhcmRNYXRlcmlhbCQxMDEgYXMgU3RhbmRhcmRNYXRlcmlhbCB9O1xyXG5leHBvcnQgeyBTdGF0aWNHZW9tZXRyeSQxMDIgYXMgU3RhdGljR2VvbWV0cnkgfTtcclxuZXhwb3J0IHsgVGV4dHVyZSQxMDMgYXMgVGV4dHVyZSB9O1xyXG5leHBvcnQgeyBUZXh0dXJlMkQkMTA0IGFzIFRleHR1cmUyRCB9O1xyXG5leHBvcnQgeyBUZXh0dXJlQ3ViZSQxMDUgYXMgVGV4dHVyZUN1YmUgfTtcclxuZXhwb3J0IHsgVGltZWxpbmUkMTA2IGFzIFRpbWVsaW5lIH07XHJcblxyXG52YXIgdXRpbCA9IHtcclxuICAgIGN1YmVtYXAgOiBjdWJlbWFwJDEwNyxcclxuICAgIGRkcyA6IGRkcyQxMDgsXHJcbiAgICBkZWxhdW5heSA6IGRlbGF1bmF5JDEwOSxcclxuICAgIGhkciA6IGhkciQxMTAsXHJcbiAgICBtZXNoIDogbWVzaCQxMTEsXHJcbiAgICBzaCA6IHNoJDExMixcclxuICAgIHRleHR1cmUgOiB0ZXh0dXJlJDExMyxcclxuICAgIHRyYW5zZmVyYWJsZSA6IHRyYW5zZmVyYWJsZSQxMTRcclxufTtcclxuZXhwb3J0IHsgdXRpbCB9O1xyXG5cclxuZXhwb3J0IHsgdmVyc2lvbiQxMTUgYXMgdmVyc2lvbiB9O1xyXG5cclxudmFyIHZyID0ge1xyXG4gICAgQ2FyZGJvYXJkRGlzdG9ydGVyIDogQ2FyZGJvYXJkRGlzdG9ydGVyJDExNixcclxuICAgIFN0ZXJlb0NhbWVyYSA6IFN0ZXJlb0NhbWVyYSQxMTdcclxufTtcclxuZXhwb3J0IHsgdnIgfTtcclxuO1xyXG4iXSwibmFtZXMiOlsiZWFzaW5nIiwiRWFzaW5nIiwiZWFzaW5nRnVuY3MiLCJHTE1BVF9SQU5ET00iLCJ1dGlsIiwibm90aWZpZXJNaXhpbiIsIkxSVSIsInBhcnNlQ29sb3IiLCJnZXREZWZpbmVDb2RlIiwicHJlekVzc2wiLCJub29wIiwicHJvdG8iLCJkZWZpbmVQcm9wZXJ0eSIsImxpZ2h0U2hhZGVyIiwiUGxhbmUiLCJ2ZWMzU2V0IiwidmVjM0NvcHkiLCJFUFNJTE9OIiwicHJvZ3JhbUtleUNhY2hlIiwiZ2V0UHJvZ3JhbUtleSIsIkxSVUNhY2hlIiwiQXR0cmlidXRlIiwiQ3ViZSIsIlNwaGVyZSIsIlBhcmFtZXRyaWNTdXJmYWNlIiwiaXNQb3dlck9mVHdvIiwiUGVyc3BlY3RpdmUiLCJPcnRob2dyYXBoaWMiLCJ1dGlsRXNzbCIsInNoYWRlckxpYnJhcnkiLCJQZXJzcGVjdGl2ZUNhbWVyYSIsIk9ydGhvZ3JhcGhpY0NhbWVyYSIsImNhbWVyYSIsIk9ydGhvQ2FtZXJhIiwiU2t5Ym94IiwiQ3ViZUdlb21ldHJ5IiwidGFyZ2V0cyIsInJldCIsImhkciIsImRkcyIsIlNreWRvbWUiLCJDdWJlR2VvIiwiU3BoZXJlR2VvIiwiUGxhbmVHZW8iLCJQYXJhbWV0cmljU3VyZmFjZUdlbyIsInNoVXRpbCIsIkdyYXBoTm9kZSIsIlNjZW5lTm9kZSIsIlRleHR1cmVOb2RlIiwiRmlsdGVyTm9kZSIsInJlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3IiLCJDb21wb1NjZW5lTm9kZSIsIkNvbXBvVGV4dHVyZU5vZGUiLCJDb21wb0ZpbHRlck5vZGUiLCJDb25lIiwiQ3lsaW5kZXIiLCJDb25lR2VvbWV0cnkiLCJDb25lR2VvIiwiQ3lsaW5kZXJHZW8iLCJGdWxsUXVhZFBhc3MiLCJvdXRwdXRFc3NsIiwiQmFzZSIsIkNhbWVyYSIsIkFuaW1hdG9yJDAiLCJCbGVuZDFEQ2xpcCQxIiwiQmxlbmQyRENsaXAkMiIsIkNsaXAkMyIsImVhc2luZyQ0IiwiU2FtcGxlclRyYWNrJDUiLCJUaW1lbGluZSQ2IiwiVHJhY2tDbGlwJDciLCJUYXNrJDkiLCJUYXNrR3JvdXAkMTAiLCJPcnRob2dyYXBoaWMkMTIiLCJQZXJzcGVjdGl2ZSQxMyIsIkNvbXBvc2l0b3IkMTQiLCJDb21wb3NpdG9yTm9kZSQxNSIsImNyZWF0ZUNvbXBvc2l0b3IkMTYiLCJGaWx0ZXJOb2RlJDE3IiwiR3JhcGgkMTgiLCJQYXNzJDE5IiwiU2NlbmVOb2RlJDIwIiwiVGV4dHVyZU5vZGUkMjEiLCJUZXh0dXJlUG9vbCQyMiIsIkJhc2UkMjMiLCJDYWNoZSQyNCIsImNvbG9yJDI1IiwiZ2xlbnVtJDI2IiwiR0xJbmZvJDI3IiwiTGlua2VkTGlzdCQyOCIsIkxSVSQyOSIsImV4dGVuZCQzMCIsIm5vdGlmaWVyJDMxIiwicmVxdWVzdCQzMiIsInV0aWwkMzMiLCJ2ZW5kb3IkMzQiLCJHQnVmZmVyJDM2IiwiUmVuZGVyZXIkMzciLCJnbG1hdHJpeCQzOCIsIkNvbmUkNDEiLCJDdWJlJDQyIiwiQ3lsaW5kZXIkNDMiLCJQYXJhbWV0cmljU3VyZmFjZSQ0NCIsIlBsYW5lJDQ1IiwiU3BoZXJlJDQ2IiwiQW1iaWVudCQ1MCIsIkFtYmllbnRDdWJlbWFwJDUxIiwiQW1iaWVudFNIJDUyIiwiRGlyZWN0aW9uYWwkNTMiLCJQb2ludCQ1NCIsIlNwaGVyZSQ1NSIsIlNwb3QkNTYiLCJUdWJlJDU3IiwiRlgkNTgiLCJHTFRGJDU5IiwiQm91bmRpbmdCb3gkNjEiLCJGcnVzdHVtJDYyIiwiTWF0cml4MiQ2MyIsIk1hdHJpeDJkJDY0IiwiTWF0cml4MyQ2NSIsIk1hdHJpeDQkNjYiLCJQbGFuZSQ2NyIsIlF1YXRlcm5pb24kNjgiLCJSYXkkNjkiLCJ1dGlsJDcwIiwiVmFsdWUkNzEiLCJWZWN0b3IyJDcyIiwiVmVjdG9yMyQ3MyIsIlZlY3RvcjQkNzQiLCJFbWl0dGVyJDc3IiwiRmllbGQkNzgiLCJGb3JjZUZpZWxkJDc5IiwiUGFydGljbGUkODAiLCJQYXJ0aWNsZVJlbmRlcmFibGUkODEiLCJQaXhlbFBpY2tpbmckODIiLCJSYXlQaWNraW5nJDgzIiwiRnJlZUNvbnRyb2wkODQiLCJHYW1lcGFkQ29udHJvbCQ4NSIsIkdlc3R1cmVNZ3IkODYiLCJJbmZpbml0ZVBsYW5lJDg3IiwiT3JiaXRDb250cm9sJDg4IiwiU2t5Ym94JDg5IiwiU2t5ZG9tZSQ5MCIsIkVudmlyb25tZW50TWFwJDkxIiwiU2hhZG93TWFwJDkyIiwibGlicmFyeSQ5NyIsInJlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3IkOTgiLCJsaWdodCQ5OSIsImN1YmVtYXAkMTA3IiwiZGRzJDEwOCIsImRlbGF1bmF5JDEwOSIsImhkciQxMTAiLCJtZXNoJDExMSIsInNoJDExMiIsInRleHR1cmUkMTEzIiwidHJhbnNmZXJhYmxlJDExNCIsIkNhcmRib2FyZERpc3RvcnRlciQxMTYiLCJTdGVyZW9DYW1lcmEkMTE3Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7QUFLQSxJQUFJLE1BQU0sR0FBRzs7Ozs7O0lBTVQsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2hCLE9BQU8sQ0FBQyxDQUFDO0tBQ1o7Ozs7OztJQU1ELFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDaEI7Ozs7OztJQU1ELFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDdEI7Ozs7OztJQU1ELGNBQWMsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN4QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZCxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3RCO1FBQ0QsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDdEM7Ozs7OztJQU1ELE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxD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R0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQy9COztTQUVJLElBQUksUUFBUSxHQUFHLE9BQU8sRUFBRTtRQUN6QixFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQy9COztTQUVJO1FBQ0QsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvQixHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDcEQsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVE7WUFDdEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHO1lBQ3JCLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQzdCOztJQUVELEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2IsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDYixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztDQUNqRTs7QUFFRCxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUU7SUFDbEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7SUFFckIsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUk7UUFDeEIsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztRQUVmLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUk7WUFDYixDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDZixDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7O1lBRWYsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDOUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ25CLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixNQUFNO2FBQ1Q7U0FDSjtLQUNKO0NBQ0o7O0FBRUQsSUFBSSxRQUFRLEdBQUc7SUFDWCxXQUFXLEVBQUUsU0FBUyxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ2pDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDeEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7O1FBRzVELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNQLE9BQU8sRUFBRSxDQUFDO1NBQ2I7Ozs7O1FBS0QsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRTdCLElBQUksR0FBRyxFQUFFO1lBQ0wsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJO2dCQUNmLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDbEM7U0FDSjs7Ozs7UUFLRCxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRXZCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSTtZQUNmLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbEI7O1FBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDeEIsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQyxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEMsQ0FBQyxDQUFDOzs7OztRQUtILEVBQUUsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7OztRQUtuQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ1osS0FBSyxJQUFJLEVBQUUsQ0FBQzs7O1FBR1osS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM1QyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7OztZQUtmLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUk7Ozs7Z0JBSXpCLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDakMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2xCLFNBQVM7aUJBQ1o7OztnQkFHRCxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFO29CQUN6QyxTQUFTO2lCQUNaOzs7Z0JBR0QsS0FBSyxDQUFDLElBQUk7b0JBQ04sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdkIsQ0FBQztnQkFDRixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNyQjs7O1lBR0QsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDOzs7WUFHYixLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSTtnQkFDeEIsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNmLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDZixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzlDO1NBQ0o7Ozs7O1FBS0QsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSTtZQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7O1FBRWhCLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUk7WUFDM0IsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3BEO1NBQ0o7OztRQUdELE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxRQUFRLEVBQUUsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFOztRQUV2QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNwRCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDekQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3pELENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDaEUsT0FBTyxJQUFJLENBQUM7U0FDZjs7UUFFRCxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7O1FBR3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtZQUNYLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7O1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDckQsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7O1FBR2xFLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUU7WUFDckMsT0FBTyxJQUFJLENBQUM7U0FDZjs7UUFFRCxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ2pCO0NBQ0o7O0FDL09NLElBQUksYUFBYSxHQUFHLFFBQVEsQ0FBQzs7O0FBR3BDLEFBQU8sSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7Ozs7O0FBS3BDLEFBQU8sSUFBSUcsY0FBWSxHQUFHLElBQUksQ0FBQyxNQUFNOztBQ1JyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQSxBQUVBOzs7OztBQUtBLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQzs7Ozs7OztBQU9kLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVztJQUNyQixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDckIsSUFBSSxHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7O0FBVXpCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFVdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0lBQzFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQy9CLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7QUFTMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQixDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7Ozs7Ozs7O0FBUXBDLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7OztBQVF2QixJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDcEIsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDOzs7Ozs7Ozs7QUFTakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsT0FBTyxHQUFH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QUcsS0FBSyxDQUFDO0lBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUM3QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENB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QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ3JCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDckIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQzs7SUFFckIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7O0lBRWhELElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLFlBQVksSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQzdELElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLFlBQVksSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQzdELElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLFlBQVksSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDOztJQUU3RCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDekMsQ0FBQzs7Ozs7OztBQU9GLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFVBQVUsV0FBVyxFQUFFO0lBQ2pELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3pDLElBQUksU0FBUyxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDcEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUM1RTtJQUNELE9BQU8sSUFBSSxDQUFDO0NBQ2YsQ0FBQzs7QUFFRixXQUFXLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxVQUFVLFFBQVEsRUFBRTtJQUN0RCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7UUFDckIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUUsSUFBSSxHQUFHLEVBQUU7WUFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEQ7S0FDSjtJQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM3QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9ELElBQUksR0FBRyxFQUFFO1lBQ0wsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUM7WUFDMUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEM7S0FDSjtDQUNKLENBQUM7O0FDcktGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JBLEFBRUE7Ozs7O0FBS0EsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDOzs7Ozs7O0FBT2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXO0lBQ3JCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDckIsSUFBSSxHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7O0FBVXpCLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7Ozs7OztBQVV2QixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUMxQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckMsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7QUFTMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFCLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFRcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRTtJQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckMsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7OztBQVF2QixJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFCLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7Ozs7Ozs7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QUMsQ0FBQztJQUN0RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFOzs7SUFHckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7OztRQUcxQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDN0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUM3QixFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzs7O0lBR25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2xELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7R0FDbEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7O01BRWQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7OztNQUdqQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1osQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzNDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O01BRzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDOztJQUVqQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0lBR25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7SUFHM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXJCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7O0lBRWpCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7SUFHbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7SUFHWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7Ozs7OztBQWNGLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxXQUFXO0lBQ3ZCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzs7SUFFeEIsT0FBTyxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO1FBQy9DLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNULEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDUixNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQ2Q7O1FBRUQsR0FBRyxDQUFDLE1BQU0sRUFBRTtZQUNSLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDZDs7UUFFRCxHQUFHLEtBQUssRUFBRTtZQUNOLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JELE1BQU07WUFDSCxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUNoQjs7UUFFRCxJQUFJLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksTUFBTSxFQUFFO1lBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hELEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25EOztRQUVELE9BQU8sQ0FBQyxDQUFDO0tBQ1osQ0FBQztDQUNMLEdBQUcsQ0FBQzs7Ozs7Ozs7QUFRTCxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTs7SUFFeEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7O0lBRTdCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDOztJQUVwQyxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDWixPQUFPLENBQUMsQ0FBQztLQUNaLE1BQU07UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDNUI7Q0FDSixDQUFDOztBQzNvQkY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQkEsQUFFQTs7Ozs7QUFLQSxBQUFPLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQzs7Ozs7OztBQU9yQixJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVc7SUFDckIsSUFBSSxHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDckIsSUFBSSxHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7OztBQVdGLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbkMsSUFBSSxHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7Ozs7QUFZRixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7O0FBVXZCLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7OztBQVdGLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7SUFDMUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0MsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7QUFTMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFT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QyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O1FBRzFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDN0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUM3QixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFF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QUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2YsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDckIsSUFBSSxHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7O0lBRTlCLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtRQUNYLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2hCLE1BQU07UUFDSCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakI7O0lBRUQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVsQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzVCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHOzs7UUFHM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUU1QyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ04sT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3ZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN2QyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzVCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDNUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QyxPQUFPLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDekcsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRTNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7O0FBVXpCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDOztJQUViLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7SUFFYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDakMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFbEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUV0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7SUFFM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7O0lBRTNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRWxCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRVgsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDVixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDVixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7O1FBRVYsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7SUFFakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUVqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7O0lBRXJCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3BDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEQsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7O1FBRWxELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHOzs7UUFHM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoRixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ04sT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQzs7SUFFbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7O0lBRW5ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDOztJQUVuRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsRUFBRTtJQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcs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QUFDLENBQUM7SUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTs7SUFFNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7RUFFaEM7Ozs7Ozs7Ozs7O0FBV0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDOzs7Ozs7Ozs7O0FBVXBCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRS9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7OztBQVd6QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Ozs7Ozs7Ozs7QUFVeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUU7O0lBRTlCLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVuQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVwQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBRTs7SUFFOUIsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRW5CLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRXBDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxHQUFHLENBQUMsR0FBRyxFQUFFO0lBQzlCLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVuQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVwQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWXBCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQzs7Ozs7Ozs7Ozs7QUFXdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTs7OztJQUlqQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRS9DLFdBQVcsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQzs7O0lBRy9DLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUU5QyxLQUFLLEtBQUssR0FBRyxH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OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7O0FBTTFCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7Ozs7O0FBU3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7Ozs7O0FBTXhDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7Ozs7Ozs7OztBQVVqQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFhaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7OztJQUc3QixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxJQUFJLEtBQUssQ0FBQzs7SUFFVixLQUFLLE1BQU0sR0FBRyxHQUFHLEdBQUc7O1FBRWhCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUNyQixLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztLQUM5QixNQUFNOztRQUVILElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDZCxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ2xCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDUixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1FBRWhCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0tBQzFDOztJQUVELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7QUNoaEJGOzs7QUFHQSxBQUdBO0FBQ0EsU0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDcEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7O0lBRW5DLE9BQU8sR0FBRyxDQUFDO0NBQ2Q7O0FBRUQsU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7Ozs7SUFJckMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDOUQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7O0lBRW5FLElBQUksS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQzs7O0lBR3hDLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUU5QyxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUU7UUFDYixLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDZixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7S0FDYjs7SUFFRCxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssSUFBSSxRQUFRLEVBQUU7O1FBRTFCLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDN0MsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztLQUN4QztTQUNJOzs7UUFHRCxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNqQixNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQ2Q7O0lBRUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDbkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQzs7SUFFbkMsT0FBTyxHQUFHLENBQUM7Q0FDZDs7Ozs7Ozs7OztBQVVELElBQUksWUFBWSxHQUFHLFVBQVUsSUFBSSxFQUFFO0lBQy9CLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDOztJQUVsQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDOzs7O0lBSTVCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7Ozs7SUFJbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Ozs7O0lBSzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOzs7O0lBSTlCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztJQUV0QyxJQUFJLENBQUMsUUFBUSxHQUFHO1FBQ1osSUFBSSxFQUFFLElBQUk7UUFDVixRQUFRLEVBQUUsSUFBSTtRQUNkLFFBQVEsRUFBRSxJQUFJO1FBQ2QsS0FBSyxFQUFFLElBQUk7S0FDZCxDQUFDOztJQUVGLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0NBQ3ZCLENBQUM7O0FBRUYsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBVSxJQUFJLEVBQUU7SUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFO1FBQ3JCLE9BQU87S0FDVjtJQUNELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDN0IsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDL0IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7O0lBRWIsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO1FBQ1gsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFO1lBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDL0M7UUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUU7WUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMvQztRQUNELElBQUksUUFBUSxDQUFDLEtBQUssRUFBRTtZQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsT0FBTztLQUNWOztTQUVJLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDL0IsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEIsR0FBRyxHQUFHLENBQUMsQ0FBQztLQUNYO1NBQ0ksSUFBSSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDckMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlCLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0tBQ2pCO1NBQ0k7UUFDRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzlDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pCLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFO29CQUN6RCxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDWixNQUFNO2lCQUNUO2FBQ0o7U0FDSjthQUNJO1lBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMzQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRTtvQkFDekQsR0FBRyxHQUFHLENBQUMsQ0FBQztvQkFDUixNQUFNO2lCQUNUO2FBQ0o7U0FDSjtLQUNKO0lBQ0QsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDaEIsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsSUFBSSxLQUFLLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUNoQyxJQUFJLE9BQU8sR0FBRyxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxTQUFTLElBQUksS0FBSyxDQUFDOztRQUUzRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUU7WUFDbkIsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvRjtRQUNELElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUNuQixRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzlGO1FBQ0QsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFO1lBQ2hCLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDckY7S0FDSjs7SUFFRCxJQUFJLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxFQUFFO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0tBQ3ZCOztJQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztDQUN2QixDQUFDOzs7OztBQUtGLFlBQVksQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLFlBQVk7SUFDOUMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUM3QixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7O1FBRWIsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFO1lBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDaEQ7UUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUU7WUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNoRDtRQUNELElBQUksUUFBUSxDQUFDLEtBQUssRUFBRTtZQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzFDO0tBQ0o7Q0FDSixDQUFDOzs7OztBQUtGLFlBQVksQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLFlBQVk7SUFDNUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDNUQsQ0FBQzs7Ozs7OztBQU9GLFlBQVksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLFVBQVUsU0FBUyxFQUFFLE9BQU8sRUFBRTs7SUFFL0QsSUFBSSxPQUFPLEdBQUcsSUFBSSxZQUFZLENBQUM7UUFDM0IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0tBQ2xCLENBQUMsQ0FBQztJQUNILElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5RCxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7O0lBRTFELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7SUFFeEMsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDMUMsS0FBSyxJQUFJLENBQUMsQ0FBQztLQUNkO0lBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtRQUN4QixPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLFlBQVksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDM0Q7SUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO1FBQ3hCLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztLQUMzRDtJQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7UUFDckIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3hEO0lBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTtRQUNwQixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNuRDs7SUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDN0M7SUFDRCxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFaEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDOUIsSUFBSSxFQUFFLENBQUM7UUFDUCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hCLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxRSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO1FBQ0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQzlELE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUM3RTs7SUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFD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LEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O1FBRWxCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztRQUVoRixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7OztRQUlwRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN6QzthQUNJO1lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDNUM7S0FDSixDQUFDO0NBQ0wsR0FBRyxDQUFDOzs7Ozs7O0FBT0wsWUFBWSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ3JELElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7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QUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BELGdCQUFnQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVELFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RCxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0QsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdELFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RCxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRCxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xELFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLHNCQUFzQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9ELGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLGdCQUFnQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0Msa0JBQWtCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9ELGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRSxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9ELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRCxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEQsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRCxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekQsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFB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QyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQyxJQUFJLEVBQUUsR0FBRyxLQUFLLEdBQUcsU0FBUyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25FLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs7SUFFcEUsT0FBTyxHQUFHLENBQUM7RUFDZDs7QUFFRCxTQUFTLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7OztBQVM5QyxTQUFTLENBQUMsSUFBSSxHQUFHLFVBQVUsZUFBZSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUU7SUFDNUQsSUFBSSxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDO1dBQ3ZCLEVBQUUsZUFBZSxJQUFJLENBQUMsSUFBSSxlQUFlLElBQUksQ0FBQyxDQUFDO01BQ3BEO1FBQ0UsT0FBTztL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LElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEQsTUFBTTtZQUNWLEtBQUssSUFBSTtnQkFDTCxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixNQUFNO1lBQ1YsS0FBSyxLQUFLO2dCQUNOLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNoQyxNQUFNO1lBQ1YsS0FBSyxLQUFLO2dCQUNOLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEtB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Z0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUU7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7O0lBRTlCLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtRQUNYLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7UUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNqQixNQUFNO1FBQ0gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNuQjs7SUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEQsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7O1FBRWxELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHOzs7UUFHM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoRixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ04sT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7O0lBRXBELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDNUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztJQUV2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDNUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7UUFFbEQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7O0lBR2hDLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDaEYsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hELEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7OztJQUd2RCxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7O0lBRTNDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7O0lBRTNDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7O0lBRTVDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3ZDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7OztJQUcxQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDOzs7SUFHbEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDOzs7SUFHbEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDbEMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDOzs7SUFHbkMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDekMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUN6QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUV6QyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBTXpCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQzs7Ozs7Ozs7O0FBU3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDOztJQUV2QixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7UUFDWCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3JELE1BQU07UUFDSCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7UUFFakQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3ZELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7O1FBRXpELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDakQ7O0lBRUQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRWpDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7OztBQVdGLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7SUFDdkMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ1AsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2IsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2IsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7O0lBRWxCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFOztJQUVuRCxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNkLENBQUMsSUFBSSxHQUFHLENBQUM7SUFDVCxDQUFDLElBQUksR0FBRyxDQUFDO0lBQ1QsQ0FBQyxJQUFJLEdBQUcsQ0FBQzs7SUFFVCxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7O0lBR2pELEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzs7SUFHdEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUM1QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRTVDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtRQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbkI7SUFDRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7SUFFaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbkI7OztJQUdELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDNUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUM1QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7SUFFaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbkI7OztJQUdELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDNUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUM1QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFZixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7UUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ25COzs7SUFHRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQWlCRixJQUFJLENBQUMsdUJBQXVCLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTs7SUFFaEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDVixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDVixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7O1FBRVYsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDeEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRVosT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOztBQUVGLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ1YsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ1YsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDOztRQUVWLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDOztJQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDdEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVaLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFjRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQy9ELElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUN2QixFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUM3QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUM1QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7Ozs7QUFZRixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtJQUN2RCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQzVCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ2hDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBY0YsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtJQUM3RCxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQztRQUN2QixFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDdkIsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQzVCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtJQUMxQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUc7UUFDdkMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDYixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNiLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDWCxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNYLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ1gsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDbkIsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDbkIsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFeEIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxhQUFhO1FBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLGFBQWE7UUFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsYUFBYSxFQUFFO1FBQzFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUM3Qjs7SUFFRCxFQUFFLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQztJQUNwQixFQUFFLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQztJQUNwQixFQUFFLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQzs7SUFFcEIsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDakQsRUFBRSxJQUFJLEdBQUcsQ0FBQztJQUNWLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDVixFQUFFLElBQUksR0FBRyxDQUFDOztJQUVWLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDekIsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUN6QixFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDN0MsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNOLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDUCxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1AsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUNWLE1BQU07UUFDSCxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNkLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDVixFQUFFLElBQUksR0FBRyxDQUFDO1FBQ1YsRUFBRSxJQUFJLEdBQUcsQ0FBQztLQUNiOztJQUVELEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDdkIsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN2QixFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUV2QixHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDTixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1AsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNQLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDVixNQUFNO1FBQ0gsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDZCxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ1YsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUNWLEVBQUUsSUFBSSxHQUFHLENBQUM7S0FDYjs7SUFFRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDL0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMvQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVaLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENB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QUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7OztJQVNELEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxRQUFRLEVBQUUsVUFBVSxHQUFHLEVBQUU7UUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRXZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7OztJQU1ELEtBQUssRUFBRSxZQUFZO1FBQ2YsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzlDOzs7Ozs7O0lBT0QsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FB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QzlCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7OztBQU9GLE9BQU8sQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzFCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMxQyxDQUFDOzs7Ozs7OztBQVFGLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQzs7Ozs7Ozs7QUFRaEMsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQzs7Ozs7OztBQU83QixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUN6QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FD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Q0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNO1FBQ1Y7WUFDSSxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDO0tBQzlDO0lBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixPQUFPLENBQUMsYUFBYSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7O0lBRTdDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDakIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQzs7SUFFdkIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDOztJQUUzQyxRQUFRLEtBQUs7UUFDVCxLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUU7Z0JBQ3BCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDaEM7aUJBQ0k7Z0JBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDakI7WUFDRCxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFH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QUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQzs7Ozs7Ozs7SUFRSEMsZ0JBQWMsQ0FBQ0QsT0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQzs7Ozs7Ozs7SUFRSEMsZ0JBQWMsQ0FBQ0QsT0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQztDQUNOOzs7Ozs7Ozs7O0FBVUQsVUFBVSxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMs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RyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs7SUFFNUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDOzs7Ozs7SUFNM0MsUUFBUSxLQUFLO1FBQ1QsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFH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Q0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2VBQ2pFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDMUU7Ozs7Ozs7SUFPRCxrQkFBa0IsRUFBRSxVQUFVLElBQUksRUFBRTs7UUFFaEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7O1FBRTFCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQzNCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOztRQUUzQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztlQUNqRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1RTs7Ozs7OztJQU9ELFlBQVksRUFBRSxVQUFVLENBQUMsRUFBRTtRQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7UUFFMUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQzs7UUFFakIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7ZUFDeEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkU7Ozs7O0lBS0QsUUFBUSxFQUFFLFlBQVk7UUFDbEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7ZUFDM0QsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdEU7Ozs7OztJQU1ELGNBQWMsRUFBRSxVQUFVLE1BQU0sRUFBRTtRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNwQzs7Ozs7OztJQU9ELGFBQWEsRUFBRSxDQUFDLFlBQVk7O1FBRXhCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOztRQUV2QixPQUFPLFVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRTtZQUM3QixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUMzQixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7WUFFM0IsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzs7WUFFckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFcEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFcEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFckUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3JCLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7WUFFMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1lBRTFGLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7O1lBRXZCLE9BQU8sSUFBSSxDQUFDO1NBQ2YsQ0FBQztLQUNMLEdBQUc7Ozs7OztJQU1KLGVBQWUsRUFBRSxVQUFVLE1BQU0sRUFBRTtRQUMvQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7UUFFekIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzs7UUFFckIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRWpCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFakIsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1lBRTdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2hDO2FBQ0k7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7O1lBRW5DLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDOztZQUV4QixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzs7UUFFdkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7SUFFRCxjQUFjLEVBQUUsWUFBWTtRQUN4QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLEVBQUU7O1lBRVgsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNkLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hCLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDMUM7Ozs7OztZQU1ELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDekIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7OztRQUd6QixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUU3QyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7UUFHN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUU3QyxPQUFPLElBQUksQ0FBQztLQUNmOzs7OztJQUtELElB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QUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7OztRQUd2REMsU0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7O1FBRXRCQSxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7UUFFdEJBLFNBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOztRQUV0QkEsU0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7O1FBRXRCQSxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUM3RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7UUFFdEJBLFNBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOzs7UUFHdEIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNuQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRztZQUNaLElBQUksTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDOztZQUV4QixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakQsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Ozs7WUFJaERBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xEQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O1lBRWpEQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakRBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O1lBRWhEQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNyREEsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BEQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcERBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDdEQ7YUFDSTtZQUNELElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUMzQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDO1lBQzNCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDekIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDO1lBQzdCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztZQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDOzs7WUFHMUIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN2RixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDOztZQUV2RixJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNoQyxJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7O1lBR2hDQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0NBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFN0NBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUU3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FB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QUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHO2dCQUNoQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQixJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDckMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFOztnQkFFckMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTthQUN4QztZQUNELEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO0tBQ0o7Ozs7O0lBS0QscUJBQXFCLEVBQUUsWUFBWTtRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNuQixPQUFPO1NBQ1Y7O1FBRUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUMzQixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2pDLElBQUksU0FBUyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQzFDLElBQUksT0FBTyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDOztRQUV0QyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUNqRCxPQUFPLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNqRjthQUNJOztZQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNyQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2xCO1NBQ0o7O1FBRUQsSUFBSSxFQUFFLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDdEIsSUFBSSxFQUFFLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDdEIsSUFBSSxFQUFFLEdBQUcsVUFBVSxFQUFFLENBQUM7O1FBRXRCLElBQUksR0FBRyxHQUFHLFVBQVUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksR0FBRyxHQUFHLFVBQVUsRUFBRSxDQUFDOztRQUV2QixJQUFJLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQzs7UUFFckIsSUFBSSxHQUFHLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUN0RCxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ2YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRztZQUN0QixJQUFJLE9BQU8sRUFBRTtnQkFDVCxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xCLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbEIsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3JCO2lCQUNJO2dCQUNELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDVCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ1QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO2FBQ1o7O1lBRURBLFNBQU8sQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25FQSxTQUFPLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRUEsU0FBTyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRW5FLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDOztZQUV4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN4QixPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzVDO1NBQ0o7O1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUc7WUFDakNBLFNBQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCO1FBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0tBQ2hCOzs7OztJQUtELG1CQUFtQixFQUFFLFlBQVk7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsT0FBTztTQUNWOztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDeEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDL0I7O1FBRUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUMzQixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2pDLElBQUksU0FBUyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQzFDLElBQUksT0FBTyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDOztRQUV0QyxJQUFJLEVBQUUsR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUN0QixJQUFJLEVBQUUsR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUN0QixJQUFJLEVBQUUsR0FBRyxVQUFVLEVBQUUsQ0FBQzs7UUFFdEIsSUFBSSxHQUFHLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDdkIsSUFBSSxHQUFHLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUM7O1FBRXJCLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDVixPQUFPLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzFFO1FBQ0QsSUFBSSxHQUFHLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUN0RCxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ2YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRztZQUN0QixJQUFJLE9BQU8sRUFBRTtnQkFDVCxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xCLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbEIsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3JCO2lCQUNJO2dCQUNELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDVCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ1QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO2FBQ1o7O1lBRURBLFNBQU8sQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25FQSxTQUFPLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRUEsU0FBTyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRW5FLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDOztZQUV4QixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7WUFFckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDeEIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM1QjtTQUNKO1FBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0tBQ2hCOzs7OztJQUtELGdCQUFnQixFQUFFLFlBQVk7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsT0FBTztTQUNWOztRQUVELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDL0IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDM0IsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDM0MsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDMUMsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDeEMsSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7O1FBRXRDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDWixPQUFPLENBQUMsSUFBSSxDQUFDLHNEQUFzRCxDQUFDLENBQUM7WUFDckUsT0FBTztTQUNWOztRQUVELElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzdCOztRQUVELElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzs7UUFFM0IsSUFBSSxHQUFHLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUN0RCxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ2YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRztZQUN0QixJQUFJLE9BQU8sRUFBRTtnQkFDVCxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xCLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbEIsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3JCO2lCQUNJO2dCQUNELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDVCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ1QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO2FBQ1o7O1lBRUQsSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksR0FBRyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztnQkFFNUIsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixHQUFHLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZCLEdBQUcsR0FBRyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDdkIsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOztZQUVoQyxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRztnQkFDZCxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUc7Z0JBQ2QsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHO2dCQUNkLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRztnQkFDZCxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUc7Z0JBQ2QsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O1lBRW5CLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJO2dCQUNoQixFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUk7Z0JBQ2hCLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSTtnQkFDaEIsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7O1lBRXJCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQzs7WUFFbEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7O1lBRWxDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxHQUFHLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDdkIsSUFBSSxPQUFPLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM5QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENB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LElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ25DOzs7O0lBSUQsS0FBSyxFQUFFLFdBQVc7UUFDZCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMxQixNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDeEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FB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RSxTQUFTLEVBQUU7SUFDdEMsSUFBSSxLQUFLLEdBQUcsa0VBQWtFLENBQUM7SUFDL0UsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbkMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDbkM7O0lBRUQsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDbkMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzdDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTs7SUFFN0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOztJQUUzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHO1FBQy9DLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksRUFBRSxHQUFHLE1BQU0s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RUFBRSxFQUFFO1FBQ3RDLElBQUksU0FBUyxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUM7UUFDcEMsSUFBSSxDQUFDLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQzs7UUFFOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTs7Ozs7WUFLakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ25DLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxRCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFELENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUM7OztZQUd4RSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7U0FDckI7O1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxD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QyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRTdCLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUQ7OztRQUdELE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQzFCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDZixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckUsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM3QztTQUNKO1FBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN6QixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM5QyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ2pEO1NBQ0o7O1FBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQzs7UUFFL0MsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDOztRQUVqQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQzs7UUFFN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ2pEO0NBQ0osQ0FBQzs7QUNwSUY7Ozs7Ozs7OztBQVNBLElBQUlDLFVBQVEsR0FBRyxRQUFRLENBQUMsTUFBTTs7QUFFOUI7SUFDSSxPQUFPLEVBQUUsS0FBSzs7OztJQUlkLE1BQU0sRUFBRSxDQUFDOzs7OztJQUtULE1BQU0sRUFBRSxDQUFDOzs7OztJQUtULFdBQVcsRUFBRSxFQUFFOzs7OztJQUtmLGNBQWMsRUFBRSxDQUFDO0NBQ3BCLEVBQUUsV0FBVztJQUNWLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztDQUNoQjs7QUFFRDs7OztJQUlJLEtBQUssRUFBRSxXQUFXO1FBQ2QsSUFBSSxJQUFJLEdBQUcsSUFBSUMsTUFBWSxDQUFDO1lBQ3hCLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUN0QixZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztZQUNuQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDdEIsQ0FBQyxDQUFDOztRQUVILElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDaEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUM1RCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzs7UUFFNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0tBQ3ZDO0NBQ0osQ0FBQzs7QUMzREYsc0JBQWUsZ1JBQWdSLENBQUM7O0FDQWhTLGVBQWUsdStDQUF1K0MsQ0FBQzs7QUNBdi9DLHNCQUFlLG80Q0FBbzRDLENBQUM7O0FDQXA1QyxrQkFBZSxpZEFBaWQsQ0FBQzs7QUNBamUsb0JBQWUsMDZCQUEwNkIsQ0FBQzs7QUNBMTdCLHlCQUFlLHF3QkFBcXdCLENBQUM7O0FDQXJ4QixnQkFBZSxzcENBQXNwQyxDQUFDOztBQ0F0cUMsaUJBQWUseW9DQUF5b0MsQ0FBQzs7QUNBenBDLGVBQWUseXlDQUF5eUMsQ0FBQzs7QUNBenpDOztBQUVBLEFBbUJBO0FBQ0EsQUFTQSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQzs7O0FBRy9CLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMvQixNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxQixNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztBQUV4QixNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzs7Ozs7OztBQVF4QixJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTs7SUFFM0MsSUFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzdELElBQUksaUJBQWlCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDOztJQUUzRSxJQUFJLHNCQUFzQixHQUFHLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUMsQ0FBQzs7SUFFMUcsSUFBSSx3QkFBd0IsR0FBRyxVQUFVLEVBQUUsRUFBRTtRQUN6QyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QixFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3hELENBQUM7O0lBRUYsSUFBSSxrQkFBa0IsR0FBRyxVQUFVLE1BQU0sRUFBRTtRQUN2QyxPQUFPLElBQUksUUFBUSxDQUFDO1lBQ2hCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsS0FBSyxFQUFFLHdCQUF3QjtZQUMvQixXQUFXLEVBQUUsSUFBSTtZQUNqQixTQUFTLEVBQUUsS0FBSztTQUNuQixDQUFDLENBQUM7S0FDTixDQUFDOztJQUVGLElBQUksa0JBQWtCLEdBQUcsVUFBVSxJQUFJLEVBQUU7UUFDckMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDaEYsQ0FBQzs7Ozs7SUFLRixJQUFJLE9BQU8sR0FBRyxJQUFJQyxNQUFPLENBQUM7UUFDdEIsV0FBVyxFQUFFLEVBQUU7S0FDbEIsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxHQUFHLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUN4QixHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ25CLFNBQVMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFdEMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFNUIsSUFBSSxXQUFXLEdBQUcsSUFBSUMsVUFBVyxDQUFDO1FBQzlCLFdBQVcsRUFBRSxFQUFFO0tBQ2xCLENBQUMsQ0FBQzs7SUFFSCxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFaEMsNkNBQTZDOzs7Ozs7UUFNekMsYUFBYSxFQUFFLElBQUk7Ozs7O1FBS25CLFVBQVUsRUFBRSxJQUFJOztRQUVoQixtQkFBbUIsRUFBRSxrQkFBa0I7O1FBRXZDLFFBQVEsRUFBRSxJQUFJLE9BQU8sRUFBRTs7UUFFdkIsc0JBQXNCLEVBQUUsSUFBSSxXQUFXLEVBQUU7O1FBRXpDLGNBQWMsRUFBRSxJQUFJLFNBQVMsQ0FBQzs7WUFFMUIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1lBQ3hCLFNBQVMsRUFBRSxPQUFPLENBQUMsT0FBTztZQUMxQixTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU87U0FDN0IsQ0FBQzs7UUFFRixhQUFhLEVBQUUsSUFBSUMsSUFBWSxDQUFDO1lBQzVCLGlCQUFpQixFQUFFLElBQUk7U0FDMUIsQ0FBQzs7UUFFRixvQkFBb0IsRUFBRSxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQzs7UUFFaEUsV0FBVyxFQUFFLGtCQUFrQixDQUFDLElBQUksTUFBTTtZQUN0QyxjQUFjLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQztTQUMvRCxDQUFDO1FBQ0YsYUFBYSxFQUFFLGtCQUFrQixDQUFDLElBQUksTUFBTTtZQUN4QyxjQUFjLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQztTQUNsRSxDQUFDO1FBQ0Ysa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxNQUFNO1lBQzdDLGNBQWMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLHFDQUFxQyxDQUFDO1NBQ3ZFLENBQUM7O1FBRUYsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxDQUFDO1FBQ2xELGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLGFBQWEsQ0FBQzs7UUFFcEQsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsY0FBYyxDQUFDO1FBQ3RELGdCQUFnQixFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FBQzs7UUFFbEQsZUFBZSxFQUFFLElBQUlqQixRQUFTLENBQUM7WUFDM0IsYUFBYSxFQUFFLEVBQUU7WUFDakIsZUFBZSxFQUFFLEVBQUU7U0FDdEIsQ0FBQzs7UUFFRixhQUFhLEVBQUUsT0FBTzs7UUFFdEIsaUJBQWlCLEVBQUUsV0FBVzs7UUFFOUIsV0FBVyxFQUFFLElBQUlpQixJQUFZLENBQUM7WUFDMUIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUM7U0FDcEQsQ0FBQztLQUNMLENBQUM7Q0FDTCx3Q0FBd0M7Ozs7Ozs7Ozs7O0lBV3JDLE1BQU0sRUFBRSxVQUFVLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTs7UUFFN0MsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLEtBQUssQ0FBQztRQUNuRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLElBQUksS0FBSyxDQUFDO1FBQ3JELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsSUFBSSxLQUFLLENBQUM7O1FBRW5ELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3RCLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzdCO1FBQ0QsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDOzs7UUFHckIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7O1FBR3BCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3pDLElBQUksSUFBSSxDQUFDLFVBQVU7Z0JBQ1gsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLEdBQUcsS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUs7ZUFDeEQsUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztVQUMvRDtZQUNFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLEdBQUcsRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7U0FDdEU7O1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQzs7O1FBRzlDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzs7UUFFNUUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzs7WUFFNUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7O1NBRXJDO0tBQ0o7Ozs7O0lBS0QsZ0JBQWdCLEVBQUUsWUFBWTtRQUMxQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7S0FDOUI7Ozs7O0lBS0Qsb0JBQW9CLEVBQUUsWUFBWTtRQUM5QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztLQUN0Qzs7Ozs7SUFLRCxVQUFVLEVBQUUsWUFBWTtRQUNwQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7S0FDeEI7OztJQUdELFdBQVcsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUU7UUFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztLQUN0RTs7Ozs7Ozs7Ozs7SUFXRCxNQUFNLEVBQUUsVUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFO1FBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7OztRQUdwQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDdkM7O0lBRUQsc0JBQXNCLEVBQUUsVUFBVSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUU7UUFDckUsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNyQixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3hDLElBQUkscUJBQXFCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDOztRQUV4RCxJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLENBQUM7OztRQUdsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFO2dCQUM1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNDO1NBQ0o7O1FBRUQsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN2QyxJQUFJLGFBQWEsSUFBSSxZQUFZLEVBQUU7WUFDL0IsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNyRDs7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDOztRQUU3RSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDNUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JDLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7O1FBRXJDLElBQUksUUFBUSxHQUFHLHFCQUFxQixDQUFDLFFBQVEsQ0FBQztRQUM5QyxJQUFJLFFBQVEsRUFBRTtZQUNWLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQzs7WUFFcEMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDM0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxRQUFRLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQy9GO1FBQ0QsRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzlCLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BCLElBQUksUUFBUSxFQUFFO1lBQ1YsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDL0I7O1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDOztRQUU5RCxJQUFJLGlCQUFpQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDdEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDOztRQUV2RixJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUM7O1FBRXhCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtnQkFDakIsU0FBUzthQUNaOztZQUVELElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQzs7WUFFbEMsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDOztZQUV4RCxJQUFJLFVBQVUsRUFBRTtnQkFDWixJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDOzs7Z0JBR25DLFVBQVUsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDOztnQkFFOUIsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7Z0JBQzdCLFFBQVEsS0FBSyxDQUFDLElBQUk7b0JBQ2QsS0FBSyxhQUFhO3dCQUNkLFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3JFLFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3JFLFFBQVEsQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDM0UsTUFBTTtvQkFDVixLQUFLLFlBQVk7d0JBQ2IsUUFBUSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUMxRSxRQUFRLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUNwRSxRQUFRLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUNwRSxRQUFRLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDNUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3JGLFFBQVEsQ0FBQyxVQUFVLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUMzRixRQUFRLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQy9FLE1BQU07b0JBQ1YsS0FBSyxjQUFjO3dCQUNmLFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDdEUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUN0RSxRQUFRLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3hFLFFBQVEsQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDNUUsTUFBTTtvQkFDVixLQUFLLFlBQVk7d0JBQ2IsUUFBUSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDcEUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDcEUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDdEUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUMxRSxNQUFNO29CQUNWO3dCQUNJLGdCQUFnQixHQUFHLElBQUksQ0FBQztpQkFDL0I7O2dCQUVELElBQUksZ0JBQWdCLEVBQUU7b0JBQ2xCLFNBQVM7aUJBQ1o7O2dCQUVELFFBQVEsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUNoRCxRQUFRLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFFLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsRSxRQUFRLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRSxRQUFRLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRSxRQUFRLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDOztnQkFFMUUsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzs7YUFFbkM7aUJBQ0k7Z0JBQ0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDOUIsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7O2dCQUU3QixRQUFRLEtBQUssQ0FBQyxJQUFJO29CQUNkLEtBQUssZUFBZTt3QkFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO3dCQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUM1RSxNQUFNO29CQUNWLEtBQUssa0JBQWtCO3dCQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7d0JBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQzlFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDNUYsTUFBTTtvQkFDVixLQUFLLHVCQUF1Qjt3QkFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7d0JBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ25GLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3ZGLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3hGLE1BQU07b0JBQ1YsS0FBSyxtQkFBbUI7d0JBQ3BCLElBQUksU0FBUyxHQUFHLGFBQWEsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO3dCQUNsRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQzt3QkFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO3dCQUNsRixJQUFJLFNBQVMsRUFBRTs0QkFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO3lCQUMzRTt3QkFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUNoRixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3hGLE1BQU07b0JBQ1Y7O3dCQUVJLGdCQUFnQixHQUFHLElBQUksQ0FBQztpQkFDL0I7Z0JBQ0QsSUFBSSxnQkFBZ0IsRUFBRTtvQkFDbEIsU0FBUztpQkFDWjs7Z0JBRUQsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDakMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ3BELFlBQVksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3RFLFlBQVksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7Z0JBQzlFLFlBQVksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7Z0JBQzlFLFlBQVksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7OztnQkFHOUUsSUFBSSxhQUFhLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtvQkFDbkMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzdELFlBQVksQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztvQkFDaEUsWUFBWSxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztvQkFDNUUsWUFBWSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQzs7b0JBRTFFLFlBQVksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7aUJBQ3pFOztnQkFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzdCO1NBQ0o7O1FBRUQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDOztRQUVwRSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7O1FBRXpELHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7UUFFdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDOztLQUVqRTs7SUFFRCxtQkFBbUIsRUFBRSxDQUFDLFlBQVk7UUFDOUIsSUFBSSxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM5QixPQUFPLFVBQVUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7O1lBRXRDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDMUMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDO2dCQUN4RCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFO29CQUN0QyxTQUFTO2lCQUNaOztnQkFFRCxRQUFRLEtBQUssQ0FBQyxJQUFJO29CQUNkLEtBQUssYUFBYSxDQUFDO29CQUNuQixLQUFLLFlBQVk7O3dCQUViLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO3dCQUMxRSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7NEJBQzVELFNBQVM7eUJBQ1o7O3dCQUVELElBQUksQ0FBQyx5QkFBeUI7NEJBQzFCLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsUUFBUTt5QkFDdEQsQ0FBQzt3QkFDRixNQUFNO29CQUNWLEtBQUssbUJBQW1CO3dCQUNwQixJQUFJLENBQUMseUJBQXlCOzRCQUMxQixRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSTt5QkFDdkMsQ0FBQztpQkFDVDthQUNKO1NBQ0osQ0FBQztLQUNMLEdBQUc7O0lBRUoseUJBQXlCLEVBQUUsVUFBVSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO1FBQzNFLFFBQVEsS0FBSyxDQUFDLElBQUk7WUFDZCxLQUFLLGFBQWE7Z0JBQ2QsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQjtvQkFDckMsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVTtpQkFDckMsQ0FBQztnQkFDRixRQUFRLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxRQUFRLENBQUMsVUFBVSxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUNsRSxNQUFNO1lBQ1YsS0FBSyxZQUFZO2dCQUNiLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQjtvQkFDcEMsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFVBQVU7aUJBQ3BELENBQUM7Z0JBQ0YsUUFBUSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckQsUUFBUSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELFFBQVEsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ2xFLE1BQU07WUFDVixLQUFLLG1CQUFtQjtnQkFDcEIsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO2dCQUNwQixJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyw0QkFBNEI7b0JBQzNDLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFVBQVU7aUJBQzFFLENBQUM7Z0JBQ0YsSUFBSSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzVDLElBQUksZUFBZSxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDM0MsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3ZCLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7O2dCQUd4QixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDM0IsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUMxQixhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7O2dCQUV4QixLQUFLLENBQUMsa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQzVDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxlQUFlLENBQUM7Z0JBQzFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxLQUFLLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQztnQkFDdEMsTUFBTTtTQUNiO0tBQ0o7Ozs7Ozs7O0lBUUQsaUJBQWlCLEVBQUUsVUFBVSxLQUFLLEVBQUU7UUFDaEMsSUFBSSxVQUFVLENBQUM7UUFDZixJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDbEIsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7U0FDakM7YUFDSTtZQUNELFFBQVEsS0FBSyxDQUFDLElBQUk7OztnQkFHZCxLQUFLLGFBQWEsQ0FBQztnQkFDbkIsS0FBSyxjQUFjO29CQUNmLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLEtBQUssY0FBYzswQkFDcEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQzs7b0JBRXZELElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFO3dCQUNyQixLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDOzRCQUMxQixRQUFRLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQzs0QkFDMUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlOzs7OzRCQUk5QixPQUFPLEVBQUUsS0FBSzt5QkFDakIsQ0FBQyxDQUFDO3FCQUNOO29CQUNELFVBQVUsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO29CQUNoQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQzFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLE1BQU07Z0JBQ1YsS0FBSyxZQUFZO29CQUNiLEtBQUssQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSSxJQUFJLElBQUksQ0FBQzt3QkFDaEQsUUFBUSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7d0JBQ3pELFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYTt3QkFDNUIsT0FBTyxFQUFFLEtBQUs7cUJBQ2pCLENBQUMsQ0FBQztvQkFDSCxVQUFVLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztvQkFDaEMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7b0JBQzNELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7b0JBQ3hCLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLEVBQUUsTUFBTSxHQUFHLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ2hFLE1BQU07Z0JBQ1YsS0FBSyxZQUFZO29CQUNiLEtBQUssQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSSxJQUFJLElBQUksQ0FBQzt3QkFDaEQsUUFBUSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7d0JBQ3pELFFBQVEsRUFBRSxJQUFJLENBQUMsaUJBQWlCO3dCQUNoQyxPQUFPLEVBQUUsS0FBSztxQkFDakIsQ0FBQyxDQUFDO29CQUNILFVBQVUsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO29CQUNoQyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO29CQUN4QixVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUM3RCxNQUFNO2FBQ2I7U0FDSjtRQUNELElBQUksVUFBVSxFQUFFO1lBQ1osVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDOztZQUVwQixPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDN0YsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ3ZELFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztTQUMzRjtLQUNKOztJQUVELHFCQUFxQixFQUFFLENBQUMsWUFBWTtRQUNoQyxJQUFJLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzlCLElBQUksWUFBWSxHQUFHLElBQUksUUFBUSxDQUFDO1lBQzVCLE1BQU0sRUFBRSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQzdGLENBQUMsQ0FBQztRQUNILFNBQVMsZUFBZSxHQUFHO1lBQ3ZCLE9BQU8sWUFBWSxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxVQUFVLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRTtZQUN0RCxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDOztZQUVyQixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7WUFFeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVDLElBQUksVUFBVSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O2dCQUduQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDMUUsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUM1RCxTQUFTO2lCQUNaOzs7Z0JBR0QsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDekMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7Z0JBRW5CLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUM7O2dCQUU5QixRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFO29CQUN0QyxXQUFXLEVBQUUsZUFBZTtpQkFDL0IsQ0FBQyxDQUFDOzs7Z0JBR0gsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs7Z0JBRXJDLFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDckMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQzdDOztZQUVELEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pCLENBQUM7S0FDTCxHQUFHOzs7OztJQUtKLE9BQU8sRUFBRSxVQUFVLFFBQVEsRUFBRTtRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7UUFFaEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7UUFFdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7UUFFdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7O1FBRW5DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7O1FBRTVDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3hDO0NBQ0osQ0FBQzs7QUN4bkJGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JBLEFBRUE7Ozs7O0FBS0EsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDOzs7Ozs7O0FBT2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXO0lBQ3JCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3JCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFOztJQUU5QixJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUU7UUFDWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUNmLE1BQU07UUFDSCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pCOztJQUVELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDM0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O1FBRzFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7O0lBRTVCLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDTixPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQzs7SUFFbkIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTs7SUFFNUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7O0lBRWIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDNUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDcEMsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0lBQ2pDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsRUFBRTtJQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNuRyxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNwQixDQUFDOztBQzVQRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQSxBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJBLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQzs7Ozs7OztBQU9mLEtBQUssQ0FBQyxNQUFNLEdBQUcsV0FBVztJQUN0QixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3RCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzVCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUUzQixJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDNUIsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNKLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNyQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQyxDQUFDOzs7Ozs7Ozs7O0FBVUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7O0FBVzNCLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxD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Q0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENB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 diff --git a/dist/claygl.js b/dist/claygl.js index e0209ac49..1948dbfbc 100644 --- a/dist/claygl.js +++ b/dist/claygl.js @@ -3369,6 +3369,10 @@ vec3.normalize = function(out, a) { out[0] = a[0] * len; out[1] = a[1] * len; out[2] = a[2] * len; + }else{ + out[0] = 0; + out[1] = 0; + out[2] = 1; } return out; }; @@ -4843,6 +4847,22 @@ quat.setAxisAngle = function(out, axis, rad) { return out; }; +/** + * zh : 绕单位向量自转 + * @param out {quat} + * @param quat2 {quat} + * @param axis {vec3} + * @param rad {Number} + */ + +quat.rotateAxis = function (out,quat2,axis,rad) { + + vec3.normalize(axis,axis); + quat.setAxisAngle(quat2,axis,rad); + quat.multiply(out,out,quat2); + +}; + /** * Adds two quat's * @@ -4898,16 +4918,13 @@ quat.scale = vec4.scale; * @param {number} rad angle (in radians) to rotate * @returns {quat} out */ -quat.rotateX = function (out, a, rad) { - rad *= 0.5; +quat.rotateX = function (out,rad) { - var ax = a[0], ay = a[1], az = a[2], aw = a[3], - bx = Math.sin(rad), bw = Math.cos(rad); + var quat2 =[0,0,0,1]; + var axis = [1,0,0]; + + quat.rotateAxis(out,quat2,axis,rad); - out[0] = ax * bw + aw * bx; - out[1] = ay * bw + az * bx; - out[2] = az * bw - ay * bx; - out[3] = aw * bw - ax * bx; return out; }; @@ -4919,16 +4936,13 @@ quat.rotateX = function (out, a, rad) { * @param {number} rad angle (in radians) to rotate * @returns {quat} out */ -quat.rotateY = function (out, a, rad) { - rad *= 0.5; +quat.rotateY = function (out,rad) { - var ax = a[0], ay = a[1], az = a[2], aw = a[3], - by = Math.sin(rad), bw = Math.cos(rad); + var quat2 =[0,0,0,1]; + var axis = [0,1,0]; + + quat.rotateAxis(out,quat2,axis,rad); - out[0] = ax * bw - az * by; - out[1] = ay * bw + aw * by; - out[2] = az * bw + ax * by; - out[3] = aw * bw - ay * by; return out; }; @@ -4940,16 +4954,12 @@ quat.rotateY = function (out, a, rad) { * @param {number} rad angle (in radians) to rotate * @returns {quat} out */ -quat.rotateZ = function (out, a, rad) { - rad *= 0.5; +quat.rotateZ = function (out,rad) { + var quat2 =[0,0,0,1]; + var axis = [0,0,1]; - var ax = a[0], ay = a[1], az = a[2], aw = a[3], - bz = Math.sin(rad), bw = Math.cos(rad); + quat.rotateAxis(out,quat2,axis,rad); - out[0] = ax * bw + ay * bz; - out[1] = ay * bw - ax * bz; - out[2] = az * bw + aw * bz; - out[3] = aw * bw - az * bz; return out; }; @@ -6688,14 +6698,16 @@ function GLInfo(_gl) { }; function createExtension(name) { - var ext = _gl.getExtension(name); - if (!ext) { - ext = _gl.getExtension('MOZ_' + name); - } - if (!ext) { - ext = _gl.getExtension('WEBKIT_' + name); + if (_gl.getExtension) { + var ext = _gl.getExtension(name); + if (!ext) { + ext = _gl.getExtension('MOZ_' + name); + } + if (!ext) { + ext = _gl.getExtension('WEBKIT_' + name); + } + extensions[name] = ext; } - extensions[name] = ext; } } @@ -8791,6 +8803,15 @@ var GLProgram = Base.extend({ _gl.linkProgram(program); + _gl.deleteShader(vertexShader); + _gl.deleteShader(fragmentShader); + + this._program = program; + + // Save code. + this.vertexCode = vertexShaderCode; + this.fragmentCode = fragmentShaderCode; + if (!_gl.getProgramParameter(program, _gl.LINK_STATUS)) { return 'Could not link program\n' + _gl.getProgramInfoLog(program); } @@ -8801,14 +8822,6 @@ var GLProgram = Base.extend({ this._locations[uniformSymbol] = _gl.getUniformLocation(program, uniformSymbol); } - _gl.deleteShader(vertexShader); - _gl.deleteShader(fragmentShader); - - this._program = program; - - // Save code. - this.vertexCode = vertexShaderCode; - this.fragmentCode = fragmentShaderCode; } }); @@ -9665,7 +9678,7 @@ Shader.source = function (name) { return obj; }; -var prezGlsl = "@export clay.prez.vertex\nuniform mat4 WVP : WORLDVIEWPROJECTION;\nattribute vec3 pos : POSITION;\nattribute vec2 uv : TEXCOORD_0;\n@import clay.chunk.skinning_header\nvarying vec2 v_Texcoord;\nvoid main()\n{\n vec3 P = pos;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n P = (skinMatrixWS * vec4(pos, 1.0)).xyz;\n#endif\n gl_Position = WVP * vec4(P, 1.0);\n v_Texcoord = uv;\n}\n@end\n@export clay.prez.fragment\nuniform sampler2D alphaMap;\nuniform float alphaCutoff: 0.0;\nvarying vec2 v_Texcoord;\nvoid main()\n{\n if (alphaCutoff > 0.0) {\n if (texture2D(alphaMap, v_Texcoord).a <= alphaCutoff) {\n discard;\n }\n }\n gl_FragColor = vec4(0.0,0.0,0.0,1.0);\n}\n@end"; +var prezGlsl = "@export clay.prez.vertex\nuniform mat4 WVP : WORLDVIEWPROJECTION;\nattribute vec3 pos : POSITION;\nattribute vec2 uv : TEXCOORD_0;\nuniform vec2 uvRepeat : [1.0, 1.0];\nuniform vec2 uvOffset : [0.0, 0.0];\n@import clay.chunk.skinning_header\nvarying vec2 v_Texcoord;\nvoid main()\n{\n vec3 P = pos;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n P = (skinMatrixWS * vec4(pos, 1.0)).xyz;\n#endif\n gl_Position = WVP * vec4(P, 1.0);\n v_Texcoord = uv * uvRepeat + uvOffset;\n}\n@end\n@export clay.prez.fragment\nuniform sampler2D alphaMap;\nuniform float alphaCutoff: 0.0;\nvarying vec2 v_Texcoord;\nvoid main()\n{\n if (alphaCutoff > 0.0) {\n if (texture2D(alphaMap, v_Texcoord).a <= alphaCutoff) {\n discard;\n }\n }\n gl_FragColor = vec4(0.0,0.0,0.0,1.0);\n}\n@end"; /* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved. @@ -10835,8 +10848,10 @@ var Renderer = Base.extend(function () { // set the display size of the canvas. var dpr = this.devicePixelRatio; if (width != null) { - canvas.style.width = width + 'px'; - canvas.style.height = height + 'px'; + if (canvas.style) { + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } // set the size of the drawingBuffer canvas.width = width * dpr; canvas.height = height * dpr; @@ -11119,6 +11134,7 @@ var Renderer = Base.extend(function () { else { this.trigger('error', errorMsg); } + } }, @@ -11701,6 +11717,12 @@ var Renderer = Base.extend(function () { } return 0; } + else if (symbol === 'uvRepeat') { + return renderable.material.get('uvRepeat'); + } + else if (symbol === 'uvOffset') { + return renderable.material.get('uvOffset'); + } else { return depthMaterial.get(symbol); } @@ -13187,6 +13209,19 @@ Quaternion.prototype = { this._dirty = true; return this; }, + /** + * + * @param axis + * @param rad + */ + rotateAxis:function (axis,rad) { + + var quat2 = new Quaternion().array; + + quat.rotateAxis(this.array,quat2,axis,rad); + this._dirty = true; + return this; + }, /** * Rotate self by a given radian about X axis @@ -13194,7 +13229,8 @@ Quaternion.prototype = { * @return {clay.Quaternion} */ rotateX: function (rad) { - quat.rotateX(this.array, this.array, rad); + + quat.rotateX(this.array, rad); this._dirty = true; return this; }, @@ -13205,7 +13241,8 @@ Quaternion.prototype = { * @return {clay.Quaternion} */ rotateY: function (rad) { - quat.rotateY(this.array, this.array, rad); + + quat.rotateY(this.array, rad); this._dirty = true; return this; }, @@ -13216,7 +13253,7 @@ Quaternion.prototype = { * @return {clay.Quaternion} */ rotateZ: function (rad) { - quat.rotateZ(this.array, this.array, rad); + quat.rotateZ(this.array, rad); this._dirty = true; return this; }, @@ -19168,9 +19205,7 @@ var Texture2D = Texture.extend(function () { isRenderable: function () { if (this.image) { - return this.image.nodeName === 'CANVAS' - || this.image.nodeName === 'VIDEO' - || this.image.complete; + return this.image.width > 0 && this.image.height > 0; } else { return !!(this.width && this.height); @@ -19506,9 +19541,7 @@ Object.defineProperty(TextureCube.prototype, 'height', { } }); function isImageRenderable(image) { - return image.nodeName === 'CANVAS' || - image.nodeName === 'VIDEO' || - image.complete; + return image.width > 0 && image.height > 0; } /** @@ -19894,7 +19927,7 @@ var Orthographic$1 = Camera.extend( } }); -var standardEssl = "\n@export clay.standard.chunk.varying\nvarying vec2 v_Texcoord;\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\nvarying vec3 v_Barycentric;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n#if defined(AOMAP_ENABLED)\nvarying vec2 v_Texcoord2;\n#endif\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n@end\n@export clay.standard.chunk.light_header\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n@import clay.header.ambient_cubemap_light\n#endif\n#ifdef POINT_LIGHT_COUNT\n@import clay.header.point_light\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n#ifdef SPOT_LIGHT_COUNT\n@import clay.header.spot_light\n#endif\n@end\n@export clay.standard.vertex\n#define SHADER_NAME standard\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 worldInverseTranspose : WORLDINVERSETRANSPOSE;\nuniform mat4 world : WORLD;\nuniform vec2 uvRepeat : [1.0, 1.0];\nuniform vec2 uvOffset : [0.0, 0.0];\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\n#if defined(AOMAP_ENABLED)\nattribute vec2 texcoord2 : TEXCOORD_1;\n#endif\nattribute vec3 normal : NORMAL;\nattribute vec4 tangent : TANGENT;\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\n#endif\nattribute vec3 barycentric;\n@import clay.standard.chunk.varying\n@import clay.chunk.skinning_header\nvoid main()\n{\n vec3 skinnedPosition = position;\n vec3 skinnedNormal = normal;\n vec3 skinnedTangent = tangent.xyz;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n skinnedNormal = (skinMatrixWS * vec4(normal, 0.0)).xyz;\n skinnedTangent = (skinMatrixWS * vec4(tangent.xyz, 0.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition, 1.0);\n v_Texcoord = texcoord * uvRepeat + uvOffset;\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n v_Barycentric = barycentric;\n v_Normal = normalize((worldInverseTranspose * vec4(skinnedNormal, 0.0)).xyz);\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n v_Tangent = normalize((worldInverseTranspose * vec4(skinnedTangent, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n#endif\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n#if defined(AOMAP_ENABLED)\n v_Texcoord2 = texcoord2;\n#endif\n}\n@end\n@export clay.standard.fragment\n#define PI 3.14159265358979\n#define GLOSSINESS_CHANNEL 0\n#define ROUGHNESS_CHANNEL 0\n#define METALNESS_CHANNEL 1\n#define DIFFUSEMAP_ALPHA_ALPHA\n@import clay.standard.chunk.varying\nuniform mat4 viewInverse : VIEWINVERSE;\n#ifdef NORMALMAP_ENABLED\nuniform sampler2D normalMap;\n#endif\nuniform float normalScale: 1.0;\n#ifdef DIFFUSEMAP_ENABLED\nuniform sampler2D diffuseMap;\n#endif\n#ifdef SPECULARMAP_ENABLED\nuniform sampler2D specularMap;\n#endif\n#ifdef USE_ROUGHNESS\nuniform float roughness : 0.5;\n #ifdef ROUGHNESSMAP_ENABLED\nuniform sampler2D roughnessMap;\n #endif\n#else\nuniform float glossiness: 0.5;\n #ifdef GLOSSINESSMAP_ENABLED\nuniform sampler2D glossinessMap;\n #endif\n#endif\n#ifdef METALNESSMAP_ENABLED\nuniform sampler2D metalnessMap;\n#endif\n#ifdef OCCLUSIONMAP_ENABLED\nuniform sampler2D occlusionMap;\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\nuniform samplerCube environmentMap;\n #ifdef PARALLAX_CORRECTED\nuniform vec3 environmentBoxMin;\nuniform vec3 environmentBoxMax;\n #endif\n#endif\n#ifdef BRDFLOOKUP_ENABLED\nuniform sampler2D brdfLookup;\n#endif\n#ifdef EMISSIVEMAP_ENABLED\nuniform sampler2D emissiveMap;\n#endif\n#ifdef SSAOMAP_ENABLED\nuniform sampler2D ssaoMap;\nuniform vec4 viewport : VIEWPORT;\n#endif\n#ifdef AOMAP_ENABLED\nuniform sampler2D aoMap;\nuniform float aoIntensity;\n#endif\nuniform vec3 color : [1.0, 1.0, 1.0];\nuniform float alpha : 1.0;\n#ifdef ALPHA_TEST\nuniform float alphaCutoff: 0.9;\n#endif\n#ifdef USE_METALNESS\nuniform float metalness : 0.0;\n#else\nuniform vec3 specularColor : [0.1, 0.1, 0.1];\n#endif\nuniform vec3 emission : [0.0, 0.0, 0.0];\nuniform float emissionIntensity: 1;\nuniform float lineWidth : 0.0;\nuniform vec4 lineColor : [0.0, 0.0, 0.0, 0.6];\n#ifdef ENVIRONMENTMAP_PREFILTER\nuniform float maxMipmapLevel: 5;\n#endif\n@import clay.standard.chunk.light_header\n@import clay.util.calculate_attenuation\n@import clay.util.edge_factor\n@import clay.util.rgbm\n@import clay.util.srgb\n@import clay.plugin.compute_shadow_map\n@import clay.util.parallax_correct\n@import clay.util.ACES\nfloat G_Smith(float g, float ndv, float ndl)\n{\n float roughness = 1.0 - g;\n float k = roughness * roughness / 2.0;\n float G1V = ndv / (ndv * (1.0 - k) + k);\n float G1L = ndl / (ndl * (1.0 - k) + k);\n return G1L * G1V;\n}\nvec3 F_Schlick(float ndv, vec3 spec) {\n return spec + (1.0 - spec) * pow(1.0 - ndv, 5.0);\n}\nfloat D_Phong(float g, float ndh) {\n float a = pow(8192.0, g);\n return (a + 2.0) / 8.0 * pow(ndh, a);\n}\nfloat D_GGX(float g, float ndh) {\n float r = 1.0 - g;\n float a = r * r;\n float tmp = ndh * ndh * (a - 1.0) + 1.0;\n return a / (PI * tmp * tmp);\n}\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\nuniform float parallaxOcclusionScale : 0.02;\nuniform float parallaxMaxLayers : 20;\nuniform float parallaxMinLayers : 5;\nuniform sampler2D parallaxOcclusionMap;\nmat3 transpose(in mat3 inMat)\n{\n vec3 i0 = inMat[0];\n vec3 i1 = inMat[1];\n vec3 i2 = inMat[2];\n return mat3(\n vec3(i0.x, i1.x, i2.x),\n vec3(i0.y, i1.y, i2.y),\n vec3(i0.z, i1.z, i2.z)\n );\n}\nvec2 parallaxUv(vec2 uv, vec3 viewDir)\n{\n float numLayers = mix(parallaxMaxLayers, parallaxMinLayers, abs(dot(vec3(0.0, 0.0, 1.0), viewDir)));\n float layerHeight = 1.0 / numLayers;\n float curLayerHeight = 0.0;\n vec2 deltaUv = viewDir.xy * parallaxOcclusionScale / (viewDir.z * numLayers);\n vec2 curUv = uv;\n float height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n for (int i = 0; i < 30; i++) {\n curLayerHeight += layerHeight;\n curUv -= deltaUv;\n height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n if (height < curLayerHeight) {\n break;\n }\n }\n vec2 prevUv = curUv + deltaUv;\n float next = height - curLayerHeight;\n float prev = 1.0 - texture2D(parallaxOcclusionMap, prevUv).r - curLayerHeight + layerHeight;\n return mix(curUv, prevUv, next / (next - prev));\n}\n#endif\nvoid main() {\n vec4 albedoColor = vec4(color, alpha);\n#ifdef VERTEX_COLOR\n albedoColor *= v_Color;\n#endif\n#ifdef SRGB_DECODE\n albedoColor = sRGBToLinear(albedoColor);\n#endif\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n vec2 uv = v_Texcoord;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n mat3 tbn = mat3(v_Tangent, v_Bitangent, v_Normal);\n#endif\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\n uv = parallaxUv(v_Texcoord, normalize(transpose(tbn) * -V));\n#endif\n#ifdef DIFFUSEMAP_ENABLED\n vec4 texel = texture2D(diffuseMap, uv);\n #ifdef SRGB_DECODE\n texel = sRGBToLinear(texel);\n #endif\n albedoColor.rgb *= texel.rgb;\n #ifdef DIFFUSEMAP_ALPHA_ALPHA\n albedoColor.a *= texel.a;\n #endif\n#endif\n#ifdef USE_METALNESS\n float m = metalness;\n #ifdef METALNESSMAP_ENABLED\n float m2 = texture2D(metalnessMap, uv)[METALNESS_CHANNEL];\n m = clamp(m2 + (m - 0.5) * 2.0, 0.0, 1.0);\n #endif\n vec3 baseColor = albedoColor.rgb;\n albedoColor.rgb = baseColor * (1.0 - m);\n vec3 spec = mix(vec3(0.04), baseColor, m);\n#else\n vec3 spec = specularColor;\n#endif\n#ifdef USE_ROUGHNESS\n float g = clamp(1.0 - roughness, 0.0, 1.0);\n #ifdef ROUGHNESSMAP_ENABLED\n float g2 = 1.0 - texture2D(roughnessMap, uv)[ROUGHNESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#else\n float g = glossiness;\n #ifdef GLOSSINESSMAP_ENABLED\n float g2 = texture2D(glossinessMap, uv)[GLOSSINESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#endif\n#ifdef SPECULARMAP_ENABLED\n spec *= sRGBToLinear(texture2D(specularMap, uv)).rgb;\n#endif\n vec3 N = v_Normal;\n#ifdef DOUBLE_SIDED\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n#ifdef NORMALMAP_ENABLED\n if (dot(v_Tangent, v_Tangent) > 0.0) {\n vec3 normalTexel = texture2D(normalMap, uv).xyz;\n if (dot(normalTexel, normalTexel) > 0.0) { N = (normalTexel * 2.0 - 1.0);\n N = normalize(N * vec3(normalScale, normalScale, 1.0));\n tbn[1] = -tbn[1];\n N = normalize(tbn * N);\n }\n }\n#endif\n vec3 diffuseTerm = vec3(0.0, 0.0, 0.0);\n vec3 specularTerm = vec3(0.0, 0.0, 0.0);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n vec3 fresnelTerm = F_Schlick(ndv, spec);\n#ifdef AMBIENT_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += ambientLightColor[_idx_];\n }}\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += calcAmbientSHLight(_idx_, N) * ambientSHLightColor[_idx_];\n }}\n#endif\n#ifdef POINT_LIGHT_COUNT\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsPoint[POINT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfPointLights(v_WorldPosition, shadowContribsPoint);\n }\n#endif\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_COUNT; _idx_++)\n {{\n vec3 lightPosition = pointLightPosition[_idx_];\n vec3 lc = pointLightColor[_idx_];\n float range = pointLightRange[_idx_];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsPoint[_idx_];\n }\n#endif\n vec3 li = lc * ndl * attenuation * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++)\n {{\n vec3 L = -normalize(directionalLightDirection[_idx_]);\n vec3 lc = directionalLightColor[_idx_];\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsDir[_idx_];\n }\n#endif\n vec3 li = lc * ndl * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef SPOT_LIGHT_COUNT\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsSpot[SPOT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfSpotLights(v_WorldPosition, shadowContribsSpot);\n }\n#endif\n for(int i = 0; i < SPOT_LIGHT_COUNT; i++)\n {\n vec3 lightPosition = spotLightPosition[i];\n vec3 spotLightDirection = -normalize(spotLightDirection[i]);\n vec3 lc = spotLightColor[i];\n float range = spotLightRange[i];\n float a = spotLightUmbraAngleCosine[i];\n float b = spotLightPenumbraAngleCosine[i];\n float falloffFactor = spotLightFalloffFactor[i];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n float c = dot(spotLightDirection, L);\n float falloff;\n falloff = clamp((c - a) /(b - a), 0.0, 1.0);\n falloff = pow(falloff, falloffFactor);\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsSpot[i];\n }\n#endif\n vec3 li = lc * attenuation * (1.0 - falloff) * shadowContrib * ndl;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }\n#endif\n vec4 outColor = albedoColor;\n outColor.rgb *= max(diffuseTerm, vec3(0.0));\n outColor.rgb += max(specularTerm, vec3(0.0));\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n vec3 L = reflect(-V, N);\n float rough2 = clamp(1.0 - g, 0.0, 1.0);\n float bias2 = rough2 * 5.0;\n vec2 brdfParam2 = texture2D(ambientCubemapLightBRDFLookup[0], vec2(rough2, ndv)).xy;\n vec3 envWeight2 = spec * brdfParam2.x + brdfParam2.y;\n vec3 envTexel2;\n for(int _idx_ = 0; _idx_ < AMBIENT_CUBEMAP_LIGHT_COUNT; _idx_++)\n {{\n #ifdef SUPPORT_TEXTURE_LOD\n envTexel2 = RGBMDecode(textureCubeLodEXT(ambientCubemapLightCubemap[_idx_], L, bias2), 8.12);\n #else\n envTexel2 = RGBMDecode(textureCube(ambientCubemapLightCubemap[_idx_], L), 8.12);\n #endif\n outColor.rgb += ambientCubemapLightColor[_idx_] * envTexel2 * envWeight2;\n }}\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\n vec3 envWeight = g * fresnelTerm;\n vec3 L = reflect(-V, N);\n #ifdef PARALLAX_CORRECTED\n L = parallaxCorrect(L, v_WorldPosition, environmentBoxMin, environmentBoxMax);\n#endif\n #ifdef ENVIRONMENTMAP_PREFILTER\n float rough = clamp(1.0 - g, 0.0, 1.0);\n float bias = rough * maxMipmapLevel;\n #ifdef SUPPORT_TEXTURE_LOD\n vec3 envTexel = decodeHDR(textureCubeLodEXT(environmentMap, L, bias)).rgb;\n #else\n vec3 envTexel = decodeHDR(textureCube(environmentMap, L)).rgb;\n #endif\n #ifdef BRDFLOOKUP_ENABLED\n vec2 brdfParam = texture2D(brdfLookup, vec2(rough, ndv)).xy;\n envWeight = spec * brdfParam.x + brdfParam.y;\n #endif\n #else\n vec3 envTexel = textureCube(environmentMap, L).xyz;\n #endif\n outColor.rgb += envTexel * envWeight;\n#endif\n float aoFactor = 1.0;\n#ifdef SSAOMAP_ENABLED\n aoFactor = min(texture2D(ssaoMap, (gl_FragCoord.xy - viewport.xy) / viewport.zw).r, aoFactor);\n#endif\n#ifdef AOMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(aoMap, v_Texcoord2).r) * aoIntensity, 0.0, 1.0), aoFactor);\n#endif\n#ifdef OCCLUSIONMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(occlusionMap, v_Texcoord).r), 0.0, 1.0), aoFactor);\n#endif\n outColor.rgb *= aoFactor;\n vec3 lEmission = emission;\n#ifdef EMISSIVEMAP_ENABLED\n lEmission *= texture2D(emissiveMap, uv).rgb;\n#endif\n outColor.rgb += lEmission * emissionIntensity;\n if(lineWidth > 0.)\n {\n outColor.rgb = mix(outColor.rgb, lineColor.rgb, (1.0 - edgeFactor(lineWidth)) * lineColor.a);\n }\n#ifdef ALPHA_TEST\n if (outColor.a < alphaCutoff) {\n discard;\n }\n#endif\n#ifdef TONEMAPPING\n outColor.rgb = ACESToneMapping(outColor.rgb);\n#endif\n#ifdef SRGB_ENCODE\n outColor = linearTosRGB(outColor);\n#endif\n gl_FragColor = encodeHDR(outColor);\n}\n@end\n@export clay.standardMR.vertex\n@import clay.standard.vertex\n@end\n@export clay.standardMR.fragment\n#define USE_METALNESS\n#define USE_ROUGHNESS\n@import clay.standard.fragment\n@end"; +var standardEssl = "\n@export clay.standard.chunk.varying\nvarying vec2 v_Texcoord;\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\nvarying vec3 v_Barycentric;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n#if defined(AOMAP_ENABLED)\nvarying vec2 v_Texcoord2;\n#endif\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n@end\n@export clay.standard.chunk.light_header\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n@import clay.header.ambient_cubemap_light\n#endif\n#ifdef POINT_LIGHT_COUNT\n@import clay.header.point_light\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n#ifdef SPOT_LIGHT_COUNT\n@import clay.header.spot_light\n#endif\n@end\n@export clay.standard.vertex\n#define SHADER_NAME standard\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 worldInverseTranspose : WORLDINVERSETRANSPOSE;\nuniform mat4 world : WORLD;\nuniform vec2 uvRepeat = vec2(1.0, 1.0);\nuniform vec2 uvOffset = vec2(0.0, 0.0);\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\n#if defined(AOMAP_ENABLED)\nattribute vec2 texcoord2 : TEXCOORD_1;\n#endif\nattribute vec3 normal : NORMAL;\nattribute vec4 tangent : TANGENT;\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\n#endif\nattribute vec3 barycentric;\n@import clay.standard.chunk.varying\n@import clay.chunk.skinning_header\nvoid main()\n{\n vec3 skinnedPosition = position;\n vec3 skinnedNormal = normal;\n vec3 skinnedTangent = tangent.xyz;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n skinnedNormal = (skinMatrixWS * vec4(normal, 0.0)).xyz;\n skinnedTangent = (skinMatrixWS * vec4(tangent.xyz, 0.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition, 1.0);\n v_Texcoord = texcoord * uvRepeat + uvOffset;\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n v_Barycentric = barycentric;\n v_Normal = normalize((worldInverseTranspose * vec4(skinnedNormal, 0.0)).xyz);\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n v_Tangent = normalize((worldInverseTranspose * vec4(skinnedTangent, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n#endif\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n#if defined(AOMAP_ENABLED)\n v_Texcoord2 = texcoord2;\n#endif\n}\n@end\n@export clay.standard.fragment\n#define PI 3.14159265358979\n#define GLOSSINESS_CHANNEL 0\n#define ROUGHNESS_CHANNEL 0\n#define METALNESS_CHANNEL 1\n#define DIFFUSEMAP_ALPHA_ALPHA\n@import clay.standard.chunk.varying\nuniform mat4 viewInverse : VIEWINVERSE;\n#ifdef NORMALMAP_ENABLED\nuniform sampler2D normalMap;\n#endif\nuniform float normalScale: 1.0;\n#ifdef DIFFUSEMAP_ENABLED\nuniform sampler2D diffuseMap;\n#endif\n#ifdef SPECULARMAP_ENABLED\nuniform sampler2D specularMap;\n#endif\n#ifdef USE_ROUGHNESS\nuniform float roughness : 0.5;\n #ifdef ROUGHNESSMAP_ENABLED\nuniform sampler2D roughnessMap;\n #endif\n#else\nuniform float glossiness: 0.5;\n #ifdef GLOSSINESSMAP_ENABLED\nuniform sampler2D glossinessMap;\n #endif\n#endif\n#ifdef METALNESSMAP_ENABLED\nuniform sampler2D metalnessMap;\n#endif\n#ifdef OCCLUSIONMAP_ENABLED\nuniform sampler2D occlusionMap;\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\nuniform samplerCube environmentMap;\n #ifdef PARALLAX_CORRECTED\nuniform vec3 environmentBoxMin;\nuniform vec3 environmentBoxMax;\n #endif\n#endif\n#ifdef BRDFLOOKUP_ENABLED\nuniform sampler2D brdfLookup;\n#endif\n#ifdef EMISSIVEMAP_ENABLED\nuniform sampler2D emissiveMap;\n#endif\n#ifdef SSAOMAP_ENABLED\nuniform sampler2D ssaoMap;\nuniform vec4 viewport : VIEWPORT;\n#endif\n#ifdef AOMAP_ENABLED\nuniform sampler2D aoMap;\nuniform float aoIntensity;\n#endif\nuniform vec3 color : [1.0, 1.0, 1.0];\nuniform float alpha : 1.0;\n#ifdef ALPHA_TEST\nuniform float alphaCutoff: 0.9;\n#endif\n#ifdef USE_METALNESS\nuniform float metalness : 0.0;\n#else\nuniform vec3 specularColor : [0.1, 0.1, 0.1];\n#endif\nuniform vec3 emission : [0.0, 0.0, 0.0];\nuniform float emissionIntensity: 1;\nuniform float lineWidth : 0.0;\nuniform vec4 lineColor : [0.0, 0.0, 0.0, 0.6];\n#ifdef ENVIRONMENTMAP_PREFILTER\nuniform float maxMipmapLevel: 5;\n#endif\n@import clay.standard.chunk.light_header\n@import clay.util.calculate_attenuation\n@import clay.util.edge_factor\n@import clay.util.rgbm\n@import clay.util.srgb\n@import clay.plugin.compute_shadow_map\n@import clay.util.parallax_correct\n@import clay.util.ACES\nfloat G_Smith(float g, float ndv, float ndl)\n{\n float roughness = 1.0 - g;\n float k = roughness * roughness / 2.0;\n float G1V = ndv / (ndv * (1.0 - k) + k);\n float G1L = ndl / (ndl * (1.0 - k) + k);\n return G1L * G1V;\n}\nvec3 F_Schlick(float ndv, vec3 spec) {\n return spec + (1.0 - spec) * pow(1.0 - ndv, 5.0);\n}\nfloat D_Phong(float g, float ndh) {\n float a = pow(8192.0, g);\n return (a + 2.0) / 8.0 * pow(ndh, a);\n}\nfloat D_GGX(float g, float ndh) {\n float r = 1.0 - g;\n float a = r * r;\n float tmp = ndh * ndh * (a - 1.0) + 1.0;\n return a / (PI * tmp * tmp);\n}\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\nuniform float parallaxOcclusionScale : 0.02;\nuniform float parallaxMaxLayers : 20;\nuniform float parallaxMinLayers : 5;\nuniform sampler2D parallaxOcclusionMap;\nmat3 transpose(in mat3 inMat)\n{\n vec3 i0 = inMat[0];\n vec3 i1 = inMat[1];\n vec3 i2 = inMat[2];\n return mat3(\n vec3(i0.x, i1.x, i2.x),\n vec3(i0.y, i1.y, i2.y),\n vec3(i0.z, i1.z, i2.z)\n );\n}\nvec2 parallaxUv(vec2 uv, vec3 viewDir)\n{\n float numLayers = mix(parallaxMaxLayers, parallaxMinLayers, abs(dot(vec3(0.0, 0.0, 1.0), viewDir)));\n float layerHeight = 1.0 / numLayers;\n float curLayerHeight = 0.0;\n vec2 deltaUv = viewDir.xy * parallaxOcclusionScale / (viewDir.z * numLayers);\n vec2 curUv = uv;\n float height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n for (int i = 0; i < 30; i++) {\n curLayerHeight += layerHeight;\n curUv -= deltaUv;\n height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n if (height < curLayerHeight) {\n break;\n }\n }\n vec2 prevUv = curUv + deltaUv;\n float next = height - curLayerHeight;\n float prev = 1.0 - texture2D(parallaxOcclusionMap, prevUv).r - curLayerHeight + layerHeight;\n return mix(curUv, prevUv, next / (next - prev));\n}\n#endif\nvoid main() {\n vec4 albedoColor = vec4(color, alpha);\n#ifdef VERTEX_COLOR\n albedoColor *= v_Color;\n#endif\n#ifdef SRGB_DECODE\n albedoColor = sRGBToLinear(albedoColor);\n#endif\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n vec2 uv = v_Texcoord;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n mat3 tbn = mat3(v_Tangent, v_Bitangent, v_Normal);\n#endif\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\n uv = parallaxUv(v_Texcoord, normalize(transpose(tbn) * -V));\n#endif\n#ifdef DIFFUSEMAP_ENABLED\n vec4 texel = texture2D(diffuseMap, uv);\n #ifdef SRGB_DECODE\n texel = sRGBToLinear(texel);\n #endif\n albedoColor.rgb *= texel.rgb;\n #ifdef DIFFUSEMAP_ALPHA_ALPHA\n albedoColor.a *= texel.a;\n #endif\n#endif\n#ifdef USE_METALNESS\n float m = metalness;\n #ifdef METALNESSMAP_ENABLED\n float m2 = texture2D(metalnessMap, uv)[METALNESS_CHANNEL];\n m = clamp(m2 + (m - 0.5) * 2.0, 0.0, 1.0);\n #endif\n vec3 baseColor = albedoColor.rgb;\n albedoColor.rgb = baseColor * (1.0 - m);\n vec3 spec = mix(vec3(0.04), baseColor, m);\n#else\n vec3 spec = specularColor;\n#endif\n#ifdef USE_ROUGHNESS\n float g = clamp(1.0 - roughness, 0.0, 1.0);\n #ifdef ROUGHNESSMAP_ENABLED\n float g2 = 1.0 - texture2D(roughnessMap, uv)[ROUGHNESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#else\n float g = glossiness;\n #ifdef GLOSSINESSMAP_ENABLED\n float g2 = texture2D(glossinessMap, uv)[GLOSSINESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#endif\n#ifdef SPECULARMAP_ENABLED\n spec *= sRGBToLinear(texture2D(specularMap, uv)).rgb;\n#endif\n vec3 N = v_Normal;\n#ifdef DOUBLE_SIDED\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n#ifdef NORMALMAP_ENABLED\n if (dot(v_Tangent, v_Tangent) > 0.0) {\n vec3 normalTexel = texture2D(normalMap, uv).xyz;\n if (dot(normalTexel, normalTexel) > 0.0) { N = (normalTexel * 2.0 - 1.0);\n N = normalize(N * vec3(normalScale, normalScale, 1.0));\n tbn[1] = -tbn[1];\n N = normalize(tbn * N);\n }\n }\n#endif\n vec3 diffuseTerm = vec3(0.0, 0.0, 0.0);\n vec3 specularTerm = vec3(0.0, 0.0, 0.0);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n vec3 fresnelTerm = F_Schlick(ndv, spec);\n#ifdef AMBIENT_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += ambientLightColor[_idx_];\n }}\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += calcAmbientSHLight(_idx_, N) * ambientSHLightColor[_idx_];\n }}\n#endif\n#ifdef POINT_LIGHT_COUNT\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsPoint[POINT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfPointLights(v_WorldPosition, shadowContribsPoint);\n }\n#endif\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_COUNT; _idx_++)\n {{\n vec3 lightPosition = pointLightPosition[_idx_];\n vec3 lc = pointLightColor[_idx_];\n float range = pointLightRange[_idx_];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsPoint[_idx_];\n }\n#endif\n vec3 li = lc * ndl * attenuation * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++)\n {{\n vec3 L = -normalize(directionalLightDirection[_idx_]);\n vec3 lc = directionalLightColor[_idx_];\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsDir[_idx_];\n }\n#endif\n vec3 li = lc * ndl * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef SPOT_LIGHT_COUNT\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsSpot[SPOT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfSpotLights(v_WorldPosition, shadowContribsSpot);\n }\n#endif\n for(int i = 0; i < SPOT_LIGHT_COUNT; i++)\n {\n vec3 lightPosition = spotLightPosition[i];\n vec3 spotLightDirection = -normalize(spotLightDirection[i]);\n vec3 lc = spotLightColor[i];\n float range = spotLightRange[i];\n float a = spotLightUmbraAngleCosine[i];\n float b = spotLightPenumbraAngleCosine[i];\n float falloffFactor = spotLightFalloffFactor[i];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n float c = dot(spotLightDirection, L);\n float falloff;\n falloff = clamp((c - a) /(b - a), 0.0, 1.0);\n falloff = pow(falloff, falloffFactor);\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsSpot[i];\n }\n#endif\n vec3 li = lc * attenuation * (1.0 - falloff) * shadowContrib * ndl;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }\n#endif\n vec4 outColor = albedoColor;\n outColor.rgb *= max(diffuseTerm, vec3(0.0));\n outColor.rgb += max(specularTerm, vec3(0.0));\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n vec3 L = reflect(-V, N);\n float rough2 = clamp(1.0 - g, 0.0, 1.0);\n float bias2 = rough2 * 5.0;\n vec2 brdfParam2 = texture2D(ambientCubemapLightBRDFLookup[0], vec2(rough2, ndv)).xy;\n vec3 envWeight2 = spec * brdfParam2.x + brdfParam2.y;\n vec3 envTexel2;\n for(int _idx_ = 0; _idx_ < AMBIENT_CUBEMAP_LIGHT_COUNT; _idx_++)\n {{\n #ifdef SUPPORT_TEXTURE_LOD\n envTexel2 = RGBMDecode(textureCubeLodEXT(ambientCubemapLightCubemap[_idx_], L, bias2), 8.12);\n #else\n envTexel2 = RGBMDecode(textureCube(ambientCubemapLightCubemap[_idx_], L), 8.12);\n #endif\n outColor.rgb += ambientCubemapLightColor[_idx_] * envTexel2 * envWeight2;\n }}\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\n vec3 envWeight = g * fresnelTerm;\n vec3 L = reflect(-V, N);\n #ifdef PARALLAX_CORRECTED\n L = parallaxCorrect(L, v_WorldPosition, environmentBoxMin, environmentBoxMax);\n#endif\n #ifdef ENVIRONMENTMAP_PREFILTER\n float rough = clamp(1.0 - g, 0.0, 1.0);\n float bias = rough * maxMipmapLevel;\n #ifdef SUPPORT_TEXTURE_LOD\n vec3 envTexel = decodeHDR(textureCubeLodEXT(environmentMap, L, bias)).rgb;\n #else\n vec3 envTexel = decodeHDR(textureCube(environmentMap, L)).rgb;\n #endif\n #ifdef BRDFLOOKUP_ENABLED\n vec2 brdfParam = texture2D(brdfLookup, vec2(rough, ndv)).xy;\n envWeight = spec * brdfParam.x + brdfParam.y;\n #endif\n #else\n vec3 envTexel = textureCube(environmentMap, L).xyz;\n #endif\n outColor.rgb += envTexel * envWeight;\n#endif\n float aoFactor = 1.0;\n#ifdef SSAOMAP_ENABLED\n aoFactor = min(texture2D(ssaoMap, (gl_FragCoord.xy - viewport.xy) / viewport.zw).r, aoFactor);\n#endif\n#ifdef AOMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(aoMap, v_Texcoord2).r) * aoIntensity, 0.0, 1.0), aoFactor);\n#endif\n#ifdef OCCLUSIONMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(occlusionMap, v_Texcoord).r), 0.0, 1.0), aoFactor);\n#endif\n outColor.rgb *= aoFactor;\n vec3 lEmission = emission;\n#ifdef EMISSIVEMAP_ENABLED\n lEmission *= texture2D(emissiveMap, uv).rgb;\n#endif\n outColor.rgb += lEmission * emissionIntensity;\n if(lineWidth > 0.)\n {\n outColor.rgb = mix(outColor.rgb, lineColor.rgb, (1.0 - edgeFactor(lineWidth)) * lineColor.a);\n }\n#ifdef ALPHA_TEST\n if (outColor.a < alphaCutoff) {\n discard;\n }\n#endif\n#ifdef TONEMAPPING\n outColor.rgb = ACESToneMapping(outColor.rgb);\n#endif\n#ifdef SRGB_ENCODE\n outColor = linearTosRGB(outColor);\n#endif\n gl_FragColor = encodeHDR(outColor);\n}\n@end\n@export clay.standardMR.vertex\n@import clay.standard.vertex\n@end\n@export clay.standardMR.fragment\n#define USE_METALNESS\n#define USE_ROUGHNESS\n@import clay.standard.fragment\n@end"; // Import standard shader Shader['import'](standardEssl); @@ -20774,7 +20807,8 @@ function getAccessorData(json, lib, accessorIdx, isIndices) { if (quantizeExtension) { var decodedArr = new vendor.Float32Array(size * accessorInfo.count); var decodeMatrix = quantizeExtension.decodeMatrix; - var decodeOffset, decodeScale; + var decodeOffset; + var decodeScale; var decodeOffset = new Array(size); var decodeScale = new Array(size); for (var k = 0; k < size; k++) { @@ -20792,6 +20826,34 @@ function getAccessorData(json, lib, accessorIdx, isIndices) { return arr; } +function base64ToBinary(input, charStart) { + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + var lookup = new Uint8Array(130); + for (var i = 0; i < chars.length; i++) { + lookup[chars.charCodeAt(i)] = i; + } + // Ignore + var len = input.length - charStart; + if (input.charAt(len - 1) === '=') { len--; } + if (input.charAt(len - 1) === '=') { len--; } + + var uarray = new Uint8Array((len / 4) * 3); + + for (var i = 0, j = charStart; i < uarray.length;) { + var c1 = lookup[input.charCodeAt(j++)]; + var c2 = lookup[input.charCodeAt(j++)]; + var c3 = lookup[input.charCodeAt(j++)]; + var c4 = lookup[input.charCodeAt(j++)]; + + uarray[i++] = (c1 << 2) | (c2 >> 4); + uarray[i++] = ((c2 & 15) << 4) | (c3 >> 2); + uarray[i++] = ((c3 & 3) << 6) | c4; + } + + return uarray.buffer; +} + + /** * @typedef {Object} clay.loader.GLTF.Result * @property {Object} json @@ -21025,7 +21087,7 @@ function () { loading++; var path = bufferInfo.uri; - self._loadBuffer(path, function (buffer) { + self._loadBuffers(path, function (buffer) { lib.buffers[idx] = buffer; checkLoad(); }, checkLoad); @@ -21107,7 +21169,7 @@ function () { * Binary file path resolver. User can override it * @param {string} path */ - resolveBinaryPath: function (path) { + resolveBufferPath: function (path) { if (path && path.match(/^data:(.*?)base64,/)) { return path; } @@ -21135,18 +21197,15 @@ function () { return util$1.relative2absolute(path, rootPath); }, - _getShader: function () { - if (typeof this.shader === 'string') { - return this.shaderLibrary.get(this.shader); - } - else if (this.shader instanceof Shader) { - return this.shader; - } - }, - - _loadBuffer: function (path, onsuccess, onerror) { + /** + * Buffer loader + * @param {string} + * @param {Function} onsuccess + * @param {Function} onerror + */ + loadBuffer: function (path, onsuccess, onerror) { vendor.request.get({ - url: this.resolveBinaryPath(path), + url: path, responseType: 'arraybuffer', onload: function (buffer) { onsuccess && onsuccess(buffer); @@ -21157,6 +21216,32 @@ function () { }); }, + _getShader: function () { + if (typeof this.shader === 'string') { + return this.shaderLibrary.get(this.shader); + } + else if (this.shader instanceof Shader) { + return this.shader; + } + }, + + _loadBuffers: function (path, onsuccess, onerror) { + var base64Prefix = 'data:application/octet-stream;base64,'; + var strStart = path.substr(0, base64Prefix.length); + if (strStart === base64Prefix) { + onsuccess( + base64ToBinary(path, base64Prefix.length) + ); + } + else { + this.loadBuffer( + this.resolveBufferPath(path), + onsuccess, + onerror + ); + } + }, + // https://github.com/KhronosGroup/glTF/issues/100 // https://github.com/KhronosGroup/glTF/issues/193 _parseSkins: function (json, lib) { @@ -21500,7 +21585,7 @@ function () { var material; var diffuseMap, glossinessMap, specularMap, normalMap, emissiveMap, occlusionMap; var enabledTextures = []; - // TODO texCoord + // TODO texCoord if (specularGlossinessMatInfo.diffuseTexture) { diffuseMap = lib.textures[specularGlossinessMatInfo.diffuseTexture.index] || null; diffuseMap && enabledTextures.push('diffuseMap'); @@ -22786,7 +22871,9 @@ var Skybox$1 = Mesh.extend(function () { environmentMap: null, - culling: false + culling: false, + + _dummyCamera: new Perspective$1() }; }, function () { var scene = this.scene; @@ -22857,8 +22944,17 @@ var Skybox$1 = Mesh.extend(function () { }, renderSkybox: function (renderer, camera) { + var dummyCamera = this._dummyCamera; + dummyCamera.aspect = renderer.getViewportAspect(); + dummyCamera.fov = camera.fov || 50; + dummyCamera.updateProjectionMatrix(); + Matrix4.invert(dummyCamera.invProjectionMatrix, dummyCamera.projectionMatrix); + dummyCamera.worldTransform.copy(camera.worldTransform); + dummyCamera.viewMatrix.copy(camera.viewMatrix); + this.position.copy(camera.getWorldPosition()); this.update(); + // Don't remember to disable blend renderer.gl.disable(renderer.gl.BLEND); if (this.material.get('lod') > 0) { @@ -22867,7 +22963,7 @@ var Skybox$1 = Mesh.extend(function () { else { this.material.undefine('fragment', 'LOD'); } - renderer.renderPass([this], camera); + renderer.renderPass([this], dummyCamera); } }); @@ -24119,7 +24215,7 @@ function isPowerOfTwo$2(width, height) { (height & (height-1)) === 0; } -var shadowmapEssl = "@export clay.sm.depth.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\n@import clay.chunk.skinning_header\nvarying vec4 v_ViewPosition;\nvarying vec2 v_Texcoord;\nvoid main(){\n vec3 skinnedPosition = position;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n#endif\n v_ViewPosition = worldViewProjection * vec4(skinnedPosition, 1.0);\n gl_Position = v_ViewPosition;\n v_Texcoord = texcoord;\n}\n@end\n@export clay.sm.depth.fragment\nvarying vec4 v_ViewPosition;\nvarying vec2 v_Texcoord;\nuniform float bias : 0.001;\nuniform float slopeScale : 1.0;\nuniform sampler2D alphaMap;\nuniform float alphaCutoff: 0.0;\n@import clay.util.encode_float\nvoid main(){\n float depth = v_ViewPosition.z / v_ViewPosition.w;\n if (alphaCutoff > 0.0) {\n if (texture2D(alphaMap, v_Texcoord).a <= alphaCutoff) {\n discard;\n }\n }\n#ifdef USE_VSM\n depth = depth * 0.5 + 0.5;\n float moment1 = depth;\n float moment2 = depth * depth;\n #ifdef SUPPORT_STANDARD_DERIVATIVES\n float dx = dFdx(depth);\n float dy = dFdy(depth);\n moment2 += 0.25*(dx*dx+dy*dy);\n #endif\n gl_FragColor = vec4(moment1, moment2, 0.0, 1.0);\n#else\n #ifdef SUPPORT_STANDARD_DERIVATIVES\n float dx = dFdx(depth);\n float dy = dFdy(depth);\n depth += sqrt(dx*dx + dy*dy) * slopeScale + bias;\n #else\n depth += bias;\n #endif\n gl_FragColor = encodeFloat(depth * 0.5 + 0.5);\n#endif\n}\n@end\n@export clay.sm.debug_depth\nuniform sampler2D depthMap;\nvarying vec2 v_Texcoord;\n@import clay.util.decode_float\nvoid main() {\n vec4 tex = texture2D(depthMap, v_Texcoord);\n#ifdef USE_VSM\n gl_FragColor = vec4(tex.rgb, 1.0);\n#else\n float depth = decodeFloat(tex);\n gl_FragColor = vec4(depth, depth, depth, 1.0);\n#endif\n}\n@end\n@export clay.sm.distance.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 world : WORLD;\nattribute vec3 position : POSITION;\n@import clay.chunk.skinning_header\nvarying vec3 v_WorldPosition;\nvoid main (){\n vec3 skinnedPosition = position;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition , 1.0);\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n}\n@end\n@export clay.sm.distance.fragment\nuniform vec3 lightPosition;\nuniform float range : 100;\nvarying vec3 v_WorldPosition;\n@import clay.util.encode_float\nvoid main(){\n float dist = distance(lightPosition, v_WorldPosition);\n#ifdef USE_VSM\n gl_FragColor = vec4(dist, dist * dist, 0.0, 0.0);\n#else\n dist = dist / range;\n gl_FragColor = encodeFloat(dist);\n#endif\n}\n@end\n@export clay.plugin.shadow_map_common\n@import clay.util.decode_float\nfloat tapShadowMap(sampler2D map, vec2 uv, float z){\n vec4 tex = texture2D(map, uv);\n return step(z, decodeFloat(tex) * 2.0 - 1.0);\n}\nfloat pcf(sampler2D map, vec2 uv, float z, float textureSize, vec2 scale) {\n float shadowContrib = tapShadowMap(map, uv, z);\n vec2 offset = vec2(1.0 / textureSize) * scale;\n#ifdef PCF_KERNEL_SIZE\n for (int _idx_ = 0; _idx_ < PCF_KERNEL_SIZE; _idx_++) {{\n shadowContrib += tapShadowMap(map, uv + offset * pcfKernel[_idx_], z);\n }}\n return shadowContrib / float(PCF_KERNEL_SIZE + 1);\n#else\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, 0.0), z);\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(0.0, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, 0.0), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, -offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, -offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(0.0, -offset.y), z);\n return shadowContrib / 9.0;\n#endif\n}\nfloat pcf(sampler2D map, vec2 uv, float z, float textureSize) {\n return pcf(map, uv, z, textureSize, vec2(1.0));\n}\nfloat chebyshevUpperBound(vec2 moments, float z){\n float p = 0.0;\n z = z * 0.5 + 0.5;\n if (z <= moments.x) {\n p = 1.0;\n }\n float variance = moments.y - moments.x * moments.x;\n variance = max(variance, 0.0000001);\n float mD = moments.x - z;\n float pMax = variance / (variance + mD * mD);\n pMax = clamp((pMax-0.4)/(1.0-0.4), 0.0, 1.0);\n return max(p, pMax);\n}\nfloat computeShadowContrib(\n sampler2D map, mat4 lightVPM, vec3 position, float textureSize, vec2 scale, vec2 offset\n) {\n vec4 posInLightSpace = lightVPM * vec4(position, 1.0);\n posInLightSpace.xyz /= posInLightSpace.w;\n float z = posInLightSpace.z;\n if(all(greaterThan(posInLightSpace.xyz, vec3(-0.99, -0.99, -1.0))) &&\n all(lessThan(posInLightSpace.xyz, vec3(0.99, 0.99, 1.0)))){\n vec2 uv = (posInLightSpace.xy+1.0) / 2.0;\n #ifdef USE_VSM\n vec2 moments = texture2D(map, uv * scale + offset).xy;\n return chebyshevUpperBound(moments, z);\n #else\n return pcf(map, uv * scale + offset, z, textureSize, scale);\n #endif\n }\n return 1.0;\n}\nfloat computeShadowContrib(sampler2D map, mat4 lightVPM, vec3 position, float textureSize) {\n return computeShadowContrib(map, lightVPM, position, textureSize, vec2(1.0), vec2(0.0));\n}\nfloat computeShadowContribOmni(samplerCube map, vec3 direction, float range)\n{\n float dist = length(direction);\n vec4 shadowTex = textureCube(map, direction);\n#ifdef USE_VSM\n vec2 moments = shadowTex.xy;\n float variance = moments.y - moments.x * moments.x;\n float mD = moments.x - dist;\n float p = variance / (variance + mD * mD);\n if(moments.x + 0.001 < dist){\n return clamp(p, 0.0, 1.0);\n }else{\n return 1.0;\n }\n#else\n return step(dist, (decodeFloat(shadowTex) + 0.0002) * range);\n#endif\n}\n@end\n@export clay.plugin.compute_shadow_map\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT) || defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT) || defined(POINT_LIGHT_SHADOWMAP_COUNT)\n#ifdef SPOT_LIGHT_SHADOWMAP_COUNT\nuniform sampler2D spotLightShadowMaps[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform mat4 spotLightMatrices[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform float spotLightShadowMapSizes[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\n#ifdef DIRECTIONAL_LIGHT_SHADOWMAP_COUNT\n#if defined(SHADOW_CASCADE)\nuniform sampler2D directionalLightShadowMaps[1]:unconfigurable;\nuniform mat4 directionalLightMatrices[SHADOW_CASCADE]:unconfigurable;\nuniform float directionalLightShadowMapSizes[1]:unconfigurable;\nuniform float shadowCascadeClipsNear[SHADOW_CASCADE]:unconfigurable;\nuniform float shadowCascadeClipsFar[SHADOW_CASCADE]:unconfigurable;\n#else\nuniform sampler2D directionalLightShadowMaps[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform mat4 directionalLightMatrices[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform float directionalLightShadowMapSizes[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\n#endif\n#ifdef POINT_LIGHT_SHADOWMAP_COUNT\nuniform samplerCube pointLightShadowMaps[POINT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\nuniform bool shadowEnabled : true;\n#ifdef PCF_KERNEL_SIZE\nuniform vec2 pcfKernel[PCF_KERNEL_SIZE];\n#endif\n@import clay.plugin.shadow_map_common\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\nvoid computeShadowOfSpotLights(vec3 position, inout float shadowContribs[SPOT_LIGHT_COUNT] ) {\n float shadowContrib;\n for(int _idx_ = 0; _idx_ < SPOT_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n shadowContrib = computeShadowContrib(\n spotLightShadowMaps[_idx_], spotLightMatrices[_idx_], position,\n spotLightShadowMapSizes[_idx_]\n );\n shadowContribs[_idx_] = shadowContrib;\n }}\n for(int _idx_ = SPOT_LIGHT_SHADOWMAP_COUNT; _idx_ < SPOT_LIGHT_COUNT; _idx_++){{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n#ifdef SHADOW_CASCADE\nvoid computeShadowOfDirectionalLights(vec3 position, inout float shadowContribs[DIRECTIONAL_LIGHT_COUNT]){\n float depth = (2.0 * gl_FragCoord.z - gl_DepthRange.near - gl_DepthRange.far)\n / (gl_DepthRange.far - gl_DepthRange.near);\n float shadowContrib;\n shadowContribs[0] = 1.0;\n for (int _idx_ = 0; _idx_ < SHADOW_CASCADE; _idx_++) {{\n if (\n depth >= shadowCascadeClipsNear[_idx_] &&\n depth <= shadowCascadeClipsFar[_idx_]\n ) {\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[0], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[0],\n vec2(1.0 / float(SHADOW_CASCADE), 1.0),\n vec2(float(_idx_) / float(SHADOW_CASCADE), 0.0)\n );\n shadowContribs[0] = shadowContrib;\n }\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#else\nvoid computeShadowOfDirectionalLights(vec3 position, inout float shadowContribs[DIRECTIONAL_LIGHT_COUNT]){\n float shadowContrib;\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[_idx_], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[_idx_]\n );\n shadowContribs[_idx_] = shadowContrib;\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\nvoid computeShadowOfPointLights(vec3 position, inout float shadowContribs[POINT_LIGHT_COUNT] ){\n vec3 lightPosition;\n vec3 direction;\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n lightPosition = pointLightPosition[_idx_];\n direction = position - lightPosition;\n shadowContribs[_idx_] = computeShadowContribOmni(pointLightShadowMaps[_idx_], direction, pointLightRange[_idx_]);\n }}\n for(int _idx_ = POINT_LIGHT_SHADOWMAP_COUNT; _idx_ < POINT_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n@end"; +var shadowmapEssl = "@export clay.sm.depth.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\nuniform vec2 uvRepeat = vec2(1.0, 1.0);\nuniform vec2 uvOffset = vec2(0.0, 0.0);\n@import clay.chunk.skinning_header\nvarying vec4 v_ViewPosition;\nvarying vec2 v_Texcoord;\nvoid main(){\n vec3 skinnedPosition = position;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n#endif\n v_ViewPosition = worldViewProjection * vec4(skinnedPosition, 1.0);\n gl_Position = v_ViewPosition;\n v_Texcoord = texcoord * uvRepeat + uvOffset;\n}\n@end\n@export clay.sm.depth.fragment\nvarying vec4 v_ViewPosition;\nvarying vec2 v_Texcoord;\nuniform float bias : 0.001;\nuniform float slopeScale : 1.0;\nuniform sampler2D alphaMap;\nuniform float alphaCutoff: 0.0;\n@import clay.util.encode_float\nvoid main(){\n float depth = v_ViewPosition.z / v_ViewPosition.w;\n if (alphaCutoff > 0.0) {\n if (texture2D(alphaMap, v_Texcoord).a <= alphaCutoff) {\n discard;\n }\n }\n#ifdef USE_VSM\n depth = depth * 0.5 + 0.5;\n float moment1 = depth;\n float moment2 = depth * depth;\n #ifdef SUPPORT_STANDARD_DERIVATIVES\n float dx = dFdx(depth);\n float dy = dFdy(depth);\n moment2 += 0.25*(dx*dx+dy*dy);\n #endif\n gl_FragColor = vec4(moment1, moment2, 0.0, 1.0);\n#else\n #ifdef SUPPORT_STANDARD_DERIVATIVES\n float dx = dFdx(depth);\n float dy = dFdy(depth);\n depth += sqrt(dx*dx + dy*dy) * slopeScale + bias;\n #else\n depth += bias;\n #endif\n gl_FragColor = encodeFloat(depth * 0.5 + 0.5);\n#endif\n}\n@end\n@export clay.sm.debug_depth\nuniform sampler2D depthMap;\nvarying vec2 v_Texcoord;\n@import clay.util.decode_float\nvoid main() {\n vec4 tex = texture2D(depthMap, v_Texcoord);\n#ifdef USE_VSM\n gl_FragColor = vec4(tex.rgb, 1.0);\n#else\n float depth = decodeFloat(tex);\n gl_FragColor = vec4(depth, depth, depth, 1.0);\n#endif\n}\n@end\n@export clay.sm.distance.vertex\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 world : WORLD;\nattribute vec3 position : POSITION;\n@import clay.chunk.skinning_header\nvarying vec3 v_WorldPosition;\nvoid main (){\n vec3 skinnedPosition = position;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition , 1.0);\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n}\n@end\n@export clay.sm.distance.fragment\nuniform vec3 lightPosition;\nuniform float range : 100;\nvarying vec3 v_WorldPosition;\n@import clay.util.encode_float\nvoid main(){\n float dist = distance(lightPosition, v_WorldPosition);\n#ifdef USE_VSM\n gl_FragColor = vec4(dist, dist * dist, 0.0, 0.0);\n#else\n dist = dist / range;\n gl_FragColor = encodeFloat(dist);\n#endif\n}\n@end\n@export clay.plugin.shadow_map_common\n@import clay.util.decode_float\nfloat tapShadowMap(sampler2D map, vec2 uv, float z){\n vec4 tex = texture2D(map, uv);\n return step(z, decodeFloat(tex) * 2.0 - 1.0);\n}\nfloat pcf(sampler2D map, vec2 uv, float z, float textureSize, vec2 scale) {\n float shadowContrib = tapShadowMap(map, uv, z);\n vec2 offset = vec2(1.0 / textureSize) * scale;\n#ifdef PCF_KERNEL_SIZE\n for (int _idx_ = 0; _idx_ < PCF_KERNEL_SIZE; _idx_++) {{\n shadowContrib += tapShadowMap(map, uv + offset * pcfKernel[_idx_], z);\n }}\n return shadowContrib / float(PCF_KERNEL_SIZE + 1);\n#else\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, 0.0), z);\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(0.0, offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, 0.0), z);\n shadowContrib += tapShadowMap(map, uv+vec2(-offset.x, -offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(offset.x, -offset.y), z);\n shadowContrib += tapShadowMap(map, uv+vec2(0.0, -offset.y), z);\n return shadowContrib / 9.0;\n#endif\n}\nfloat pcf(sampler2D map, vec2 uv, float z, float textureSize) {\n return pcf(map, uv, z, textureSize, vec2(1.0));\n}\nfloat chebyshevUpperBound(vec2 moments, float z){\n float p = 0.0;\n z = z * 0.5 + 0.5;\n if (z <= moments.x) {\n p = 1.0;\n }\n float variance = moments.y - moments.x * moments.x;\n variance = max(variance, 0.0000001);\n float mD = moments.x - z;\n float pMax = variance / (variance + mD * mD);\n pMax = clamp((pMax-0.4)/(1.0-0.4), 0.0, 1.0);\n return max(p, pMax);\n}\nfloat computeShadowContrib(\n sampler2D map, mat4 lightVPM, vec3 position, float textureSize, vec2 scale, vec2 offset\n) {\n vec4 posInLightSpace = lightVPM * vec4(position, 1.0);\n posInLightSpace.xyz /= posInLightSpace.w;\n float z = posInLightSpace.z;\n if(all(greaterThan(posInLightSpace.xyz, vec3(-0.99, -0.99, -1.0))) &&\n all(lessThan(posInLightSpace.xyz, vec3(0.99, 0.99, 1.0)))){\n vec2 uv = (posInLightSpace.xy+1.0) / 2.0;\n #ifdef USE_VSM\n vec2 moments = texture2D(map, uv * scale + offset).xy;\n return chebyshevUpperBound(moments, z);\n #else\n return pcf(map, uv * scale + offset, z, textureSize, scale);\n #endif\n }\n return 1.0;\n}\nfloat computeShadowContrib(sampler2D map, mat4 lightVPM, vec3 position, float textureSize) {\n return computeShadowContrib(map, lightVPM, position, textureSize, vec2(1.0), vec2(0.0));\n}\nfloat computeShadowContribOmni(samplerCube map, vec3 direction, float range)\n{\n float dist = length(direction);\n vec4 shadowTex = textureCube(map, direction);\n#ifdef USE_VSM\n vec2 moments = shadowTex.xy;\n float variance = moments.y - moments.x * moments.x;\n float mD = moments.x - dist;\n float p = variance / (variance + mD * mD);\n if(moments.x + 0.001 < dist){\n return clamp(p, 0.0, 1.0);\n }else{\n return 1.0;\n }\n#else\n return step(dist, (decodeFloat(shadowTex) + 0.0002) * range);\n#endif\n}\n@end\n@export clay.plugin.compute_shadow_map\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT) || defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT) || defined(POINT_LIGHT_SHADOWMAP_COUNT)\n#ifdef SPOT_LIGHT_SHADOWMAP_COUNT\nuniform sampler2D spotLightShadowMaps[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform mat4 spotLightMatrices[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform float spotLightShadowMapSizes[SPOT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\n#ifdef DIRECTIONAL_LIGHT_SHADOWMAP_COUNT\n#if defined(SHADOW_CASCADE)\nuniform sampler2D directionalLightShadowMaps[1]:unconfigurable;\nuniform mat4 directionalLightMatrices[SHADOW_CASCADE]:unconfigurable;\nuniform float directionalLightShadowMapSizes[1]:unconfigurable;\nuniform float shadowCascadeClipsNear[SHADOW_CASCADE]:unconfigurable;\nuniform float shadowCascadeClipsFar[SHADOW_CASCADE]:unconfigurable;\n#else\nuniform sampler2D directionalLightShadowMaps[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform mat4 directionalLightMatrices[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\nuniform float directionalLightShadowMapSizes[DIRECTIONAL_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\n#endif\n#ifdef POINT_LIGHT_SHADOWMAP_COUNT\nuniform samplerCube pointLightShadowMaps[POINT_LIGHT_SHADOWMAP_COUNT]:unconfigurable;\n#endif\nuniform bool shadowEnabled : true;\n#ifdef PCF_KERNEL_SIZE\nuniform vec2 pcfKernel[PCF_KERNEL_SIZE];\n#endif\n@import clay.plugin.shadow_map_common\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\nvoid computeShadowOfSpotLights(vec3 position, inout float shadowContribs[SPOT_LIGHT_COUNT] ) {\n float shadowContrib;\n for(int _idx_ = 0; _idx_ < SPOT_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n shadowContrib = computeShadowContrib(\n spotLightShadowMaps[_idx_], spotLightMatrices[_idx_], position,\n spotLightShadowMapSizes[_idx_]\n );\n shadowContribs[_idx_] = shadowContrib;\n }}\n for(int _idx_ = SPOT_LIGHT_SHADOWMAP_COUNT; _idx_ < SPOT_LIGHT_COUNT; _idx_++){{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n#ifdef SHADOW_CASCADE\nvoid computeShadowOfDirectionalLights(vec3 position, inout float shadowContribs[DIRECTIONAL_LIGHT_COUNT]){\n float depth = (2.0 * gl_FragCoord.z - gl_DepthRange.near - gl_DepthRange.far)\n / (gl_DepthRange.far - gl_DepthRange.near);\n float shadowContrib;\n shadowContribs[0] = 1.0;\n for (int _idx_ = 0; _idx_ < SHADOW_CASCADE; _idx_++) {{\n if (\n depth >= shadowCascadeClipsNear[_idx_] &&\n depth <= shadowCascadeClipsFar[_idx_]\n ) {\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[0], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[0],\n vec2(1.0 / float(SHADOW_CASCADE), 1.0),\n vec2(float(_idx_) / float(SHADOW_CASCADE), 0.0)\n );\n shadowContribs[0] = shadowContrib;\n }\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#else\nvoid computeShadowOfDirectionalLights(vec3 position, inout float shadowContribs[DIRECTIONAL_LIGHT_COUNT]){\n float shadowContrib;\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n shadowContrib = computeShadowContrib(\n directionalLightShadowMaps[_idx_], directionalLightMatrices[_idx_], position,\n directionalLightShadowMapSizes[_idx_]\n );\n shadowContribs[_idx_] = shadowContrib;\n }}\n for(int _idx_ = DIRECTIONAL_LIGHT_SHADOWMAP_COUNT; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\nvoid computeShadowOfPointLights(vec3 position, inout float shadowContribs[POINT_LIGHT_COUNT] ){\n vec3 lightPosition;\n vec3 direction;\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_SHADOWMAP_COUNT; _idx_++) {{\n lightPosition = pointLightPosition[_idx_];\n direction = position - lightPosition;\n shadowContribs[_idx_] = computeShadowContribOmni(pointLightShadowMaps[_idx_], direction, pointLightRange[_idx_]);\n }}\n for(int _idx_ = POINT_LIGHT_SHADOWMAP_COUNT; _idx_ < POINT_LIGHT_COUNT; _idx_++) {{\n shadowContribs[_idx_] = 1.0;\n }}\n}\n#endif\n#endif\n@end"; var targets$2 = ['px', 'nx', 'py', 'ny', 'pz', 'nz']; @@ -24138,6 +24234,12 @@ function getDepthMaterialUniform(renderable, depthMaterial, symbol) { } return 0; } + else if (symbol === 'uvRepeat') { + return renderable.material.get('uvRepeat'); + } + else if (symbol === 'uvOffset') { + return renderable.material.get('uvOffset'); + } else { return depthMaterial.get(symbol); } @@ -25465,6 +25567,7 @@ var EVE_NAMES = ['click', 'dblclick', 'mouseover', 'mouseout', 'mousemove', /** * @typedef {Object} StandardMaterialMRConfig + * @property {string} [name] * @property {string} [shader='standardMR'] * @property {Color} [color] * @property {number} [alpha] @@ -26149,6 +26252,10 @@ App3D.prototype.createMaterial = function (matConfig) { var material = new Material({ shader: shader }); + if (matConfig.name) { + material.name = matConfig.name; + } + var texturesLoading = []; function makeTextureSetter(key) { return function (texture) { @@ -26291,6 +26398,7 @@ App3D.prototype.createSphere = function (material, parentNode, subdivision) { return this.createMesh(sphere, material, parentNode); }; +// TODO may be modified? /** * Create a plane mesh and add it to the scene or the given parent node. * @function @@ -33159,10 +33267,11 @@ var FreeControl = Base.extend(function() { this.trigger('change'); }, - _detectMovementChange: function () { + _detectMovementChange: function (frameTime) { if (this._moveForward || this._moveBackward || this._moveLeft || this._moveRight) { this.trigger('change'); } + this.update(frameTime); }, _keyDown: function(e) { @@ -33764,6 +33873,12 @@ var InfinitePlane = Mesh.extend({ })() }); +var MOUSE_BUTTON_KEY_MAP = { + left: 0, + middle: 1, + right: 2 +}; + function convertToArray(val) { if (!Array.isArray(val)) { val = [val, val]; @@ -33780,6 +33895,9 @@ var OrbitControl = Base.extend(function () { return /** @lends clay.plugin.OrbitControl# */ { + /** + * @type {clay.Timeline} + */ timeline: null, /** @@ -33810,6 +33928,22 @@ var OrbitControl = Base.extend(function () { */ maxDistance: 1000, + /** + * Only available when camera is orthographic + */ + maxOrthographicSize: 300, + + /** + * Only available when camera is orthographic + */ + minOrthographicSize: 30, + + /** + * Aspect of orthographic camera + * Only available when camera is orthographic + */ + orthographicAspect: 1, + /** * Minimum alpha rotation */ @@ -33844,6 +33978,9 @@ var OrbitControl = Base.extend(function () { */ autoRotateSpeed: 60, + panMouseButton: 'middle', + rotateMouseButton: 'left', + /** * Pan or rotate * @type {String} @@ -33921,6 +34058,9 @@ var OrbitControl = Base.extend(function () { if (this.timeline) { this.timeline.on('frame', this.update, this); } + if (this.target) { + this.decomposeTransform(); + } }, /** @@ -33963,6 +34103,23 @@ var OrbitControl = Base.extend(function () { this._needsUpdate = true; }, + /** + * Get size of orthographic viewing volume + * @return {number} + */ + getOrthographicSize: function () { + return this._orthoSize; + }, + + /** + * Set size of orthographic viewing volume + * @param {number} size + */ + setOrthographicSize: function (size) { + this._orthoSize = size; + this._needsUpdate = true; + }, + /** * Get alpha rotation * Alpha angle for top-down rotation. Positive to rotate to top. @@ -34028,6 +34185,7 @@ var OrbitControl = Base.extend(function () { 'autoRotateDirection', 'autoRotateSpeed', 'damping', 'minDistance', 'maxDistance', + 'minOrthographicSize', 'maxOrthographicSize', 'orthographicAspect', 'minAlpha', 'maxAlpha', 'minBeta', 'maxBeta', 'rotateSensitivity', 'zoomSensitivity', 'panSensitivity' ].forEach(function (key) { @@ -34039,6 +34197,9 @@ var OrbitControl = Base.extend(function () { if (opts.distance != null) { this.setDistance(opts.distance); } + if (opts.orthographicSize != null) { + this.setOrthographicSize(opts.orthographicSize); + } if (opts.alpha != null) { this.setAlpha(opts.alpha); @@ -34050,11 +34211,17 @@ var OrbitControl = Base.extend(function () { if (opts.center) { this.setCenter(opts.center); } + + if (this.target) { + this._updateTransform(); + this.target.update(); + } }, /** * @param {Object} opts * @param {number} opts.distance + * @param {number} opts.orthographicSize * @param {number} opts.alpha * @param {number} opts.beta * @param {Array.} opts.center @@ -34075,6 +34242,10 @@ var OrbitControl = Base.extend(function () { obj.distance = this.getDistance(); target.distance = opts.distance; } + if (opts.orthographicSize != null) { + obj.orthographicSize = this.getOrthographicSize(); + target.orthographicSize = opts.orthographicSize; + } if (opts.alpha != null) { obj.alpha = this.getAlpha(); target.alpha = opts.alpha; @@ -34101,6 +34272,9 @@ var OrbitControl = Base.extend(function () { if (obj.distance != null) { self.setDistance(obj.distance); } + if (obj.orthographicSize != null) { + self.setOrthographicSize(obj.orthographicSize); + } if (obj.center != null) { self.setCenter(obj.center); } @@ -34150,7 +34324,7 @@ var OrbitControl = Base.extend(function () { } // Fixed deltaTime - this._updateDistance(Math.min(deltaTime, 50)); + this._updateDistanceOrSize(Math.min(deltaTime, 50)); this._updatePan(Math.min(deltaTime, 50)); this._updateRotate(Math.min(deltaTime, 50)); @@ -34175,15 +34349,31 @@ var OrbitControl = Base.extend(function () { this._vectorDamping(velocity, this.damping); }, - _updateDistance: function (deltaTime) { + _updateDistanceOrSize: function (deltaTime) { this._setDistance(this._distance + this._zoomSpeed * deltaTime / 20); - this._zoomSpeed *= this.damping; + if (!(this.target instanceof Perspective$1)) { + this._setOrthoSize(this._orthoSize + this._zoomSpeed * deltaTime / 20); + } + + this._zoomSpeed *= Math.pow(this.damping, deltaTime / 16); }, _setDistance: function (distance) { this._distance = Math.max(Math.min(distance, this.maxDistance), this.minDistance); }, + _setOrthoSize: function (size) { + this._orthoSize = Math.max(Math.min(size, this.maxOrthographicSize), this.minOrthographicSize); + var camera = this.target; + var cameraHeight = this._orthoSize; + // TODO + var cameraWidth = cameraHeight * this.orthographicAspect; + camera.left = -cameraWidth / 2; + camera.right = cameraWidth / 2; + camera.top = cameraHeight / 2; + camera.bottom = -cameraHeight / 2; + }, + _updatePan: function (deltaTime) { var velocity = this._panVelocity; var len = this._distance; @@ -34247,15 +34437,6 @@ var OrbitControl = Base.extend(function () { return; } - // FIXME euler order...... - // FIXME alpha is not certain when beta is 90 or -90 - // var euler = new Vector3(); - // euler.eulerFromMat3( - // new Matrix3().fromQuat(this.target.rotation), 'ZYX' - // ); - // euler.eulerFromQuat( - // this.target.rotation.normalize(), 'ZYX' - // ); this.target.updateWorldTransform(); var forward = this.target.worldTransform.z; @@ -34269,6 +34450,9 @@ var OrbitControl = Base.extend(function () { this.setAlpha(this.getAlpha()); this._setDistance(this.target.position.dist(this._center)); + if (!(this.target instanceof Perspective$1)){ + this._setOrthoSize(this.target.top - this.target.bottom); + } }, _mouseDownHandler: function (e) { @@ -34288,12 +34472,10 @@ var OrbitControl = Base.extend(function () { this._processGesture(e, 'start'); } else { - // Left button. - if (e.button === 0) { + if (e.button === MOUSE_BUTTON_KEY_MAP[this.rotateMouseButton]) { this._mode = 'rotate'; } - // Middle button. - else if (e.button === 1) { + else if (e.button === MOUSE_BUTTON_KEY_MAP[this.panMouseButton]) { this._mode = 'pan'; /** @@ -34385,11 +34567,21 @@ var OrbitControl = Base.extend(function () { _zoomHandler: function (e, delta) { - var distance = Math.max(Math.min( - this._distance - this.minDistance, - this.maxDistance - this._distance - )); - this._zoomSpeed = delta * Math.max(distance / 40 * this.zoomSensitivity, 0.2); + var speed; + if (this.target instanceof Perspective$1) { + speed = Math.max(Math.max(Math.min( + this._distance - this.minDistance, + this.maxDistance - this._distance + )) / 20, 0.5); + } + else { + speed = Math.max(Math.max(Math.min( + this._orthoSize - this.minOrthographicSize, + this.maxOrthographicSize - this._orthoSize + )) / 20, 0.5); + } + + this._zoomSpeed = (delta > 0 ? -1 : 1) * speed * this.zoomSensitivity; this._rotating = false; @@ -35456,3 +35648,4 @@ exports.vr = vr; Object.defineProperty(exports, '__esModule', { value: true }); }))); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xheWdsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvYW5pbWF0aW9uL2Vhc2luZy5qcyIsIi4uL3NyYy9hbmltYXRpb24vQ2xpcC5qcyIsIi4uL3NyYy9hbmltYXRpb24vQW5pbWF0b3IuanMiLCIuLi9zcmMvYW5pbWF0aW9uL0JsZW5kMURDbGlwLmpzIiwiLi4vc3JjL3V0aWwvZGVsYXVuYXkuanMiLCIuLi9zcmMvZ2xtYXRyaXgvY29tbW9uLmpzIiwiLi4vc3JjL2dsbWF0cml4L3ZlYzIuanMiLCIuLi9zcmMvbWF0aC9WZWN0b3IyLmpzIiwiLi4vc3JjL2FuaW1hdGlvbi9CbGVuZDJEQ2xpcC5qcyIsIi4uL3NyYy9nbG1hdHJpeC92ZWMzLmpzIiwiLi4vc3JjL2dsbWF0cml4L3ZlYzQuanMiLCIuLi9zcmMvZ2xtYXRyaXgvbWF0My5qcyIsIi4uL3NyYy9nbG1hdHJpeC9xdWF0LmpzIiwiLi4vc3JjL2FuaW1hdGlvbi9TYW1wbGVyVHJhY2suanMiLCIuLi9zcmMvY29yZS9taXhpbi9leHRlbmQuanMiLCIuLi9zcmMvY29yZS9taXhpbi9ub3RpZmllci5qcyIsIi4uL3NyYy9jb3JlL3V0aWwuanMiLCIuLi9zcmMvY29yZS9CYXNlLmpzIiwiLi4vc3JjL2NvcmUvcmVxdWVzdC5qcyIsIi4uL3NyYy9jb3JlL3ZlbmRvci5qcyIsIi4uL3NyYy9UaW1lbGluZS5qcyIsIi4uL3NyYy9hbmltYXRpb24vVGltZWxpbmUuanMiLCIuLi9zcmMvYW5pbWF0aW9uL1RyYWNrQ2xpcC5qcyIsIi4uL3NyYy9jb3JlL0dMSW5mby5qcyIsIi4uL3NyYy9jb3JlL2dsZW51bS5qcyIsIi4uL3NyYy9jb3JlL0xpbmtlZExpc3QuanMiLCIuLi9zcmMvY29yZS9MUlUuanMiLCIuLi9zcmMvY29yZS9jb2xvci5qcyIsIi4uL3NyYy9NYXRlcmlhbC5qcyIsIi4uL3NyYy9ncHUvR0xQcm9ncmFtLmpzIiwiLi4vc3JjL2dwdS9Qcm9ncmFtTWFuYWdlci5qcyIsIi4uL3NyYy9TaGFkZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9wcmV6Lmdsc2wuanMiLCIuLi9zcmMvZ2xtYXRyaXgvbWF0NC5qcyIsIi4uL3NyYy9SZW5kZXJlci5qcyIsIi4uL3NyYy9tYXRoL1ZlY3RvcjMuanMiLCIuLi9zcmMvbWF0aC9RdWF0ZXJuaW9uLmpzIiwiLi4vc3JjL21hdGgvTWF0cml4NC5qcyIsIi4uL3NyYy9tYXRoL0JvdW5kaW5nQm94LmpzIiwiLi4vc3JjL05vZGUuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9oZWFkZXIvY2FsY0FtYmllbnRTSExpZ2h0Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9oZWFkZXIvbGlnaHQuanMiLCIuLi9zcmMvTGlnaHQuanMiLCIuLi9zcmMvbWF0aC9QbGFuZS5qcyIsIi4uL3NyYy9tYXRoL0ZydXN0dW0uanMiLCIuLi9zcmMvbWF0aC9SYXkuanMiLCIuLi9zcmMvQ2FtZXJhLmpzIiwiLi4vc3JjL1NjZW5lLmpzIiwiLi4vc3JjL2NvcmUvQ2FjaGUuanMiLCIuLi9zcmMvR2VvbWV0cnlCYXNlLmpzIiwiLi4vc3JjL0dlb21ldHJ5LmpzIiwiLi4vc3JjL2dlb21ldHJ5L1BsYW5lLmpzIiwiLi4vc3JjL2dlb21ldHJ5L0N1YmUuanMiLCIuLi9zcmMvZ2VvbWV0cnkvU3BoZXJlLmpzIiwiLi4vc3JjL2dlb21ldHJ5L1BhcmFtZXRyaWNTdXJmYWNlLmpzIiwiLi4vc3JjL1RleHR1cmUuanMiLCIuLi9zcmMvbWF0aC91dGlsLmpzIiwiLi4vc3JjL1RleHR1cmUyRC5qcyIsIi4uL3NyYy9UZXh0dXJlQ3ViZS5qcyIsIi4uL3NyYy9SZW5kZXJhYmxlLmpzIiwiLi4vc3JjL01lc2guanMiLCIuLi9zcmMvY2FtZXJhL1BlcnNwZWN0aXZlLmpzIiwiLi4vc3JjL2NhbWVyYS9PcnRob2dyYXBoaWMuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9zdGFuZGFyZC5nbHNsLmpzIiwiLi4vc3JjL1N0YW5kYXJkTWF0ZXJpYWwuanMiLCIuLi9zcmMvc2hhZGVyL2xpYnJhcnkuanMiLCIuLi9zcmMvSm9pbnQuanMiLCIuLi9zcmMvU2tlbGV0b24uanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS91dGlsLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9iYXNpYy5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvbGFtYmVydC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2Uvd2lyZWZyYW1lLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9za3lib3guZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvYnVpbHRpbi5qcyIsIi4uL3NyYy9sb2FkZXIvR0xURi5qcyIsIi4uL3NyYy9saWdodC9EaXJlY3Rpb25hbC5qcyIsIi4uL3NyYy9saWdodC9Qb2ludC5qcyIsIi4uL3NyYy9saWdodC9TcG90LmpzIiwiLi4vc3JjL2xpZ2h0L0FtYmllbnQuanMiLCIuLi9zcmMvRnJhbWVCdWZmZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3ZlcnRleC5nbHNsLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvUGFzcy5qcyIsIi4uL3NyYy9wbHVnaW4vU2t5Ym94LmpzIiwiLi4vc3JjL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAuanMiLCIuLi9zcmMvdXRpbC9kZHMuanMiLCIuLi9zcmMvdXRpbC9oZHIuanMiLCIuLi9zcmMvdXRpbC90ZXh0dXJlLmpzIiwiLi4vc3JjL3V0aWwvc2hhZGVyL2ludGVncmF0ZUJSREYuZ2xzbC5qcyIsIi4uL3NyYy91dGlsL3NoYWRlci9wcmVmaWx0ZXIuZ2xzbC5qcyIsIi4uL3NyYy91dGlsL2N1YmVtYXAuanMiLCIuLi9zcmMvbGlnaHQvQW1iaWVudEN1YmVtYXAuanMiLCIuLi9zcmMvbGlnaHQvQW1iaWVudFNILmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvVGV4dHVyZVBvb2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9zaGFkb3dtYXAuZ2xzbC5qcyIsIi4uL3NyYy9wcmVQYXNzL1NoYWRvd01hcC5qcyIsIi4uL3NyYy9waWNraW5nL1JheVBpY2tpbmcuanMiLCIuLi9zcmMvdXRpbC9zaC5qcyIsIi4uL3NyYy9hcHBsaWNhdGlvbi5qcyIsIi4uL3NyYy9hc3luYy9UYXNrLmpzIiwiLi4vc3JjL2FzeW5jL1Rhc2tHcm91cC5qcyIsIi4uL3NyYy9jb21wb3NpdG9yL0NvbXBvc2l0b3JOb2RlLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvR3JhcGguanMiLCIuLi9zcmMvY29tcG9zaXRvci9Db21wb3NpdG9yLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvU2NlbmVOb2RlLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvVGV4dHVyZU5vZGUuanMiLCIuLi9zcmMvY29tcG9zaXRvci9GaWx0ZXJOb2RlLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9jb2xvcmFkanVzdC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9ibHVyLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2x1bS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9sdXQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvdmlnbmV0dGUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3Ivb3V0cHV0Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2JyaWdodC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9kb3duc2FtcGxlLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3Vwc2FtcGxlLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2hkci5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9sZW5zZmxhcmUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvYmxlbmQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvZnhhYS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9yZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yLmpzIiwiLi4vc3JjL2NyZWF0ZUNvbXBvc2l0b3IuanMiLCIuLi9zcmMvY29tcG9zaXRvci9jcmVhdGVDb21wb3NpdG9yLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZ2J1ZmZlci5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvY2h1bmsuZ2xzbC5qcyIsIi4uL3NyYy9kZWZlcnJlZC9HQnVmZmVyLmpzIiwiLi4vc3JjL2dlb21ldHJ5L0NvbmUuanMiLCIuLi9zcmMvZ2VvbWV0cnkvQ3lsaW5kZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9saWdodHZvbHVtZS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvc3BvdC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZGlyZWN0aW9uYWwuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnRzaC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudGN1YmVtYXAuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL3BvaW50Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcGhlcmUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL3R1YmUuZ2xzbC5qcyIsIi4uL3NyYy9kZWZlcnJlZC9SZW5kZXJlci5qcyIsIi4uL3NyYy9nbG1hdHJpeC9tYXQyLmpzIiwiLi4vc3JjL2dsbWF0cml4L21hdDJkLmpzIiwiLi4vc3JjL2dsbWF0cml4L2luZGV4LmpzIiwiLi4vc3JjL2RlcC9nbG1hdHJpeC5qcyIsIi4uL3NyYy9saWdodC9TcGhlcmUuanMiLCIuLi9zcmMvbGlnaHQvVHViZS5qcyIsIi4uL3NyYy9sb2FkZXIvRlguanMiLCIuLi9zcmMvbWF0aC9NYXRyaXgyLmpzIiwiLi4vc3JjL21hdGgvTWF0cml4MmQuanMiLCIuLi9zcmMvbWF0aC9NYXRyaXgzLmpzIiwiLi4vc3JjL21hdGgvVmFsdWUuanMiLCIuLi9zcmMvbWF0aC9WZWN0b3I0LmpzIiwiLi4vc3JjL3BhcnRpY2xlL1BhcnRpY2xlLmpzIiwiLi4vc3JjL3BhcnRpY2xlL0VtaXR0ZXIuanMiLCIuLi9zcmMvcGFydGljbGUvRmllbGQuanMiLCIuLi9zcmMvcGFydGljbGUvRm9yY2VGaWVsZC5qcyIsIi4uL3NyYy9wYXJ0aWNsZS9wYXJ0aWNsZS5nbHNsLmpzIiwiLi4vc3JjL3BhcnRpY2xlL1BhcnRpY2xlUmVuZGVyYWJsZS5qcyIsIi4uL3NyYy9waWNraW5nL2NvbG9yLmdsc2wuanMiLCIuLi9zcmMvcGlja2luZy9QaXhlbFBpY2tpbmcuanMiLCIuLi9zcmMvcGx1Z2luL0ZyZWVDb250cm9sLmpzIiwiLi4vc3JjL3BsdWdpbi9HYW1lcGFkQ29udHJvbC5qcyIsIi4uL3NyYy9wbHVnaW4vR2VzdHVyZU1nci5qcyIsIi4uL3NyYy9wbHVnaW4vSW5maW5pdGVQbGFuZS5qcyIsIi4uL3NyYy9wbHVnaW4vT3JiaXRDb250cm9sLmpzIiwiLi4vc3JjL1N0YXRpY0dlb21ldHJ5LmpzIiwiLi4vc3JjL3V0aWwvbWVzaC5qcyIsIi4uL3NyYy91dGlsL3RyYW5zZmVyYWJsZS5qcyIsIi4uL3NyYy92ZXJzaW9uLmpzIiwiLi4vc3JjL3ZyL291dHB1dC5nbHNsLmpzIiwiLi4vc3JjL3ZyL0NhcmRib2FyZERpc3RvcnRlci5qcyIsIi4uL3NyYy92ci9TdGVyZW9DYW1lcmEuanMiLCIuLi9zcmMvY2xheWdsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIOe8k+WKqOWHveaVsOadpeiHqiBodHRwczovL2dpdGh1Yi5jb20vc29sZS90d2Vlbi5qcy9ibG9iL21hc3Rlci9zcmMvVHdlZW4uanNcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkuYW5pbWF0aW9uLmVhc2luZ1xyXG4gKi9cclxudmFyIGVhc2luZyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5saW5lYXJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxpbmVhcjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFkcmF0aWNJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1YWRyYXRpY091dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIGsgKiAoMiAtIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFkcmF0aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC0gMC41ICogKC0tayAqIChrIC0gMikgLSAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuY3ViaWNJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY3ViaWNJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrICogayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmN1YmljT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjdWJpY091dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiAtLWsgKiBrICogayArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmN1YmljSW5PdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGN1YmljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwLjUgKiAoKGsgLT0gMikgKiBrICogayArIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFydGljSW5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHF1YXJ0aWNJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrICogayAqIGsgKiBrO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFydGljT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWFydGljT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSAoLS1rICogayAqIGsgKiBrKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcucXVhcnRpY0luT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWFydGljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGsgKiBrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLSAwLjUgKiAoKGsgLT0gMikgKiBrICogayAqIGsgLSAyKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcucXVpbnRpY0luXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWludGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gayAqIGsgKiBrICogayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1aW50aWNPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHF1aW50aWNPdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gLS1rICogayAqIGsgKiBrICogayArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1aW50aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVpbnRpY0luT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMC41ICogayAqIGsgKiBrICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwLjUgKiAoKGsgLT0gMikgKiBrICogayAqIGsgKiBrICsgMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnNpbnVzb2lkYWxJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2ludXNvaWRhbEluOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSBNYXRoLmNvcyhrICogTWF0aC5QSSAvIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5zaW51c29pZGFsT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzaW51c29pZGFsT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguc2luKGsgKiBNYXRoLlBJIC8gMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnNpbnVzb2lkYWxJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2ludXNvaWRhbEluT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqICgxIC0gTWF0aC5jb3MoTWF0aC5QSSAqIGspKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZXhwb25lbnRpYWxJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrID09PSAwID8gMCA6IE1hdGgucG93KDEwMjQsIGsgLSAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGV4cG9uZW50aWFsT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIGsgPT09IDEgPyAxIDogMSAtIE1hdGgucG93KDIsIC0gMTAgKiBrKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZXhwb25lbnRpYWxJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMC41ICogTWF0aC5wb3coMTAyNCwgayAtIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMC41ICogKC0gTWF0aC5wb3coMiwgLSAxMCAqIChrIC0gMSkpICsgMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmNpcmN1bGFySW5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNpcmN1bGFySW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gMSAtIE1hdGguc3FydCgxIC0gayAqIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jaXJjdWxhck91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY2lyY3VsYXJPdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KDEgLSAoLS1rICogaykpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jaXJjdWxhckluT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjaXJjdWxhckluT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLSAwLjUgKiAoTWF0aC5zcXJ0KDEgLSBrICogaykgLSAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqIChNYXRoLnNxcnQoMSAtIChrIC09IDIpICogaykgKyAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZWxhc3RpY0luXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBlbGFzdGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICB2YXIgcywgYSA9IDAuMSwgcCA9IDAuNDtcclxuICAgICAgICBpZiAoayA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGsgPT09IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYSB8fCBhIDwgMSkge1xyXG4gICAgICAgICAgICBhID0gMTsgcyA9IHAgLyA0O1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBzID0gcCAqIE1hdGguYXNpbigxIC8gYSkgLyAoMiAqIE1hdGguUEkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLSAoYSAqIE1hdGgucG93KDIsIDEwICogKGsgLT0gMSkpICpcclxuICAgICAgICAgICAgICAgICAgICBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZWxhc3RpY091dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZWxhc3RpY091dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHZhciBzLCBhID0gMC4xLCBwID0gMC40O1xyXG4gICAgICAgIGlmIChrID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhIHx8IGEgPCAxKSB7XHJcbiAgICAgICAgICAgIGEgPSAxOyBzID0gcCAvIDQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHMgPSBwICogTWF0aC5hc2luKDEgLyBhKSAvICgyICogTWF0aC5QSSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoYSAqIE1hdGgucG93KDIsIC0gMTAgKiBrKSAqXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICsgMSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmVsYXN0aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZWxhc3RpY0luT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMsIGEgPSAwLjEsIHAgPSAwLjQ7XHJcbiAgICAgICAgaWYgKGsgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWEgfHwgYSA8IDEpIHtcclxuICAgICAgICAgICAgYSA9IDE7IHMgPSBwIC8gNDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgcyA9IHAgKiBNYXRoLmFzaW4oMSAvIGEpIC8gKDIgKiBNYXRoLlBJKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLSAwLjUgKiAoYSAqIE1hdGgucG93KDIsIDEwICogKGsgLT0gMSkpXHJcbiAgICAgICAgICAgICAgICAqIE1hdGguc2luKChrIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYSAqIE1hdGgucG93KDIsIC0xMCAqIChrIC09IDEpKVxyXG4gICAgICAgICAgICAgICAgKiBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICogMC41ICsgMTtcclxuXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmJhY2tJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYmFja0luOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMgPSAxLjcwMTU4O1xyXG4gICAgICAgIHJldHVybiBrICogayAqICgocyArIDEpICogayAtIHMpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5iYWNrT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBiYWNrT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMgPSAxLjcwMTU4O1xyXG4gICAgICAgIHJldHVybiAtLWsgKiBrICogKChzICsgMSkgKiBrICsgcykgKyAxO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5iYWNrSW5PdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJhY2tJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHZhciBzID0gMS43MDE1OCAqIDEuNTI1O1xyXG4gICAgICAgIGlmICgoayAqPSAyKSA8IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDAuNSAqIChrICogayAqICgocyArIDEpICogayAtIHMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqICgoayAtPSAyKSAqIGsgKiAoKHMgKyAxKSAqIGsgKyBzKSArIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5ib3VuY2VJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYm91bmNlSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gMSAtIGVhc2luZy5ib3VuY2VPdXQoMSAtIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5ib3VuY2VPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJvdW5jZU91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrIDwgKDEgLyAyLjc1KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gNy41NjI1ICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGsgPCAoMiAvIDIuNzUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA3LjU2MjUgKiAoayAtPSAoMS41IC8gMi43NSkpICogayArIDAuNzU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChrIDwgKDIuNSAvIDIuNzUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA3LjU2MjUgKiAoayAtPSAoMi4yNSAvIDIuNzUpKSAqIGsgKyAwLjkzNzU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDcuNTYyNSAqIChrIC09ICgyLjYyNSAvIDIuNzUpKSAqIGsgKyAwLjk4NDM3NTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmJvdW5jZUluT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBib3VuY2VJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrIDwgMC41KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlYXNpbmcuYm91bmNlSW4oayAqIDIpICogMC41O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZWFzaW5nLmJvdW5jZU91dChrICogMiAtIDEpICogMC41ICsgMC41O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZWFzaW5nO1xyXG4iLCJpbXBvcnQgRWFzaW5nIGZyb20gJy4vZWFzaW5nJztcclxuXHJcbmZ1bmN0aW9uIG5vb3AgKCkge31cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hbmltYXRpb24uQ2xpcFxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGVdXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbnxudW1iZXJ9IFtvcHRzLmxvb3BdIElmIGxvb3AgaXMgYSBudW1iZXIsIGl0IGluZGljYXRlIHRoZSBsb29wIGNvdW50IG9mIGFuaW1hdGlvblxyXG4gKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW29wdHMuZWFzaW5nXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZyYW1lXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZpbmlzaF1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25yZXN0YXJ0XVxyXG4gKi9cclxudmFyIENsaXAgPSBmdW5jdGlvbiAob3B0cykge1xyXG5cclxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGhpcy5uYW1lID0gb3B0cy5uYW1lIHx8ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAqL1xyXG4gICAgdGhpcy50YXJnZXQgPSBvcHRzLnRhcmdldDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubGlmZSA9IG9wdHMubGlmZSB8fCAxMDAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5kZWxheSA9IG9wdHMuZGVsYXkgfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZ2FwID0gb3B0cy5nYXAgfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucGxheWJhY2tSYXRlID0gb3B0cy5wbGF5YmFja1JhdGUgfHwgMTtcclxuXHJcblxyXG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XHJcblxyXG4gICAgdGhpcy5fbG9vcCA9IG9wdHMubG9vcCA9PSBudWxsID8gZmFsc2UgOiBvcHRzLmxvb3A7XHJcbiAgICB0aGlzLnNldExvb3AodGhpcy5fbG9vcCk7XHJcblxyXG4gICAgaWYgKG9wdHMuZWFzaW5nICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLnNldEVhc2luZyhvcHRzLmVhc2luZyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIHRoaXMub25mcmFtZSA9IG9wdHMub25mcmFtZSB8fCBub29wO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICB0aGlzLm9uZmluaXNoID0gb3B0cy5vbmZpbmlzaCB8fCBub29wO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICB0aGlzLm9ucmVzdGFydCA9IG9wdHMub25yZXN0YXJ0IHx8IG5vb3A7XHJcblxyXG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbn07XHJcblxyXG5DbGlwLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBnYXA6IDAsXHJcblxyXG4gICAgbGlmZTogMCxcclxuXHJcbiAgICBkZWxheTogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfGJvb2xlYW59IGxvb3BcclxuICAgICAqL1xyXG4gICAgc2V0TG9vcDogZnVuY3Rpb24gKGxvb3ApIHtcclxuICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcclxuICAgICAgICBpZiAobG9vcCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGxvb3AgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb29wUmVtYWluZWQgPSBsb29wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9vcFJlbWFpbmVkID0gSW5maW5pdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IGVhc2luZ1xyXG4gICAgICovXHJcbiAgICBzZXRFYXNpbmc6IGZ1bmN0aW9uIChlYXNpbmcpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGVhc2luZykgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGVhc2luZyA9IEVhc2luZ1tlYXNpbmddO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVhc2luZyA9IGVhc2luZztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRpbWVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgc3RlcDogZnVuY3Rpb24gKHRpbWUsIGRlbHRhVGltZSwgc2lsZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSB0aW1lICsgdGhpcy5kZWxheTtcclxuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFRpbWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWx0YVRpbWUgPSB0aW1lIC0gdGhpcy5fY3VycmVudFRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gdGltZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3BhdXNlZCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZSA8IHRoaXMuX3N0YXJ0VGltZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQRU5ESUdOIFN5bmMgP1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZSh0aW1lLCBkZWx0YVRpbWUpO1xyXG5cclxuICAgICAgICB2YXIgcGVyY2VudCA9IE1hdGgubWluKHRoaXMuX2VsYXBzZWRUaW1lIC8gdGhpcy5saWZlLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKHBlcmNlbnQgPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzY2hlZHVsZTtcclxuICAgICAgICBpZiAodGhpcy5lYXNpbmcpIHtcclxuICAgICAgICAgICAgc2NoZWR1bGUgPSB0aGlzLmVhc2luZyhwZXJjZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHNjaGVkdWxlID0gcGVyY2VudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2lsZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZSgnZnJhbWUnLCBzY2hlZHVsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGVyY2VudCA9PT0gMSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fbG9vcCAmJiB0aGlzLl9sb29wUmVtYWluZWQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXN0YXJ0SW5Mb29wKHRpbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9vcFJlbWFpbmVkLS07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Jlc3RhcnQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gTWFyayB0aGlzIGNsaXAgdG8gYmUgZGVsZXRlZFxyXG4gICAgICAgICAgICAgICAgLy8gSW4gdGhlIGFuaW1hdGlvbi51cGRhdGVcclxuICAgICAgICAgICAgICAgIHRoaXMuX25lZWRzUmVtb3ZlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2ZpbmlzaCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRpbWVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgc2V0VGltZTogZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGVwKHRpbWUgKyB0aGlzLl9zdGFydFRpbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZXN0YXJ0OiBmdW5jdGlvbiAodGltZSkge1xyXG4gICAgICAgIC8vIElmIHVzZXIgbGVhdmUgdGhlIHBhZ2UgZm9yIGEgd2hpbGUsIHdoZW4gaGUgZ2V0cyBiYWNrXHJcbiAgICAgICAgLy8gQWxsIGNsaXBzIG1heSBiZSBleHBpcmVkIGFuZCBhbGwgc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nIHZhbHVlKHBvc2l0aW9uKVxyXG4gICAgICAgIC8vIEl0IGlzIGNsZWFybHkgd3JvbmcsIHNvIHdlIHVzZSByZW1haW5kZXIgdG8gYWRkIGEgb2Zmc2V0XHJcblxyXG4gICAgICAgIHZhciByZW1haW5kZXIgPSAwO1xyXG4gICAgICAgIC8vIFJlbWFpbmRlciBpZ25vcmVkIGlmIHJlc3RhcnQgaXMgaW52b2tlZCBtYW51YWxseVxyXG4gICAgICAgIGlmICh0aW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2VsYXBzZSh0aW1lKTtcclxuICAgICAgICAgICAgcmVtYWluZGVyID0gdGhpcy5fZWxhcHNlZFRpbWUgJSB0aGlzLmxpZmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRpbWUgPSB0aW1lIHx8IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWUgLSByZW1haW5kZXIgKyB0aGlzLmRlbGF5O1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fbmVlZHNSZW1vdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0RWxhcHNlZFRpbWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZWxhcHNlZFRpbWU7XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZXN0YXJ0SW5Mb29wOiBmdW5jdGlvbiAodGltZSkge1xyXG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWUgKyB0aGlzLmdhcDtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIF9lbGFwc2U6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YVRpbWUpIHtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSArPSBkZWx0YVRpbWUgKiB0aGlzLnBsYXliYWNrUmF0ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZmlyZTogZnVuY3Rpb24gKGV2ZW50VHlwZSwgYXJnKSB7XHJcbiAgICAgICAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudFR5cGU7XHJcbiAgICAgICAgaWYgKHRoaXNbZXZlbnROYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzW2V2ZW50TmFtZV0odGhpcy50YXJnZXQsIGFyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjbGlwID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKTtcclxuICAgICAgICBjbGlwLm5hbWUgPSB0aGlzLm5hbWU7XHJcbiAgICAgICAgY2xpcC5fbG9vcCA9IHRoaXMuX2xvb3A7XHJcbiAgICAgICAgY2xpcC5fbG9vcFJlbWFpbmVkID0gdGhpcy5fbG9vcFJlbWFpbmVkO1xyXG5cclxuICAgICAgICBjbGlwLmxpZmUgPSB0aGlzLmxpZmU7XHJcbiAgICAgICAgY2xpcC5nYXAgPSB0aGlzLmdhcDtcclxuICAgICAgICBjbGlwLmRlbGF5ID0gdGhpcy5kZWxheTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNsaXA7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXVzZSB0aGUgY2xpcC5cclxuICAgICAqL1xyXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3VtZSB0aGUgY2xpcC5cclxuICAgICAqL1xyXG4gICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICB9XHJcbn07XHJcbkNsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2xpcDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENsaXA7XHJcbiIsImltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcbmltcG9ydCBlYXNpbmdGdW5jcyBmcm9tICcuL2Vhc2luZyc7XHJcblxyXG52YXIgYXJyYXlTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRHZXR0ZXIodGFyZ2V0LCBrZXkpIHtcclxuICAgIHJldHVybiB0YXJnZXRba2V5XTtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0U2V0dGVyKHRhcmdldCwga2V5LCB2YWx1ZSkge1xyXG4gICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW50ZXJwb2xhdGVOdW1iZXIocDAsIHAxLCBwZXJjZW50KSB7XHJcbiAgICByZXR1cm4gKHAxIC0gcDApICogcGVyY2VudCArIHAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUFycmF5KHAwLCBwMSwgcGVyY2VudCwgb3V0LCBhcnJEaW0pIHtcclxuICAgIHZhciBsZW4gPSBwMC5sZW5ndGg7XHJcbiAgICBpZiAoYXJyRGltID09IDEpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIG91dFtpXSA9IGludGVycG9sYXRlTnVtYmVyKHAwW2ldLCBwMVtpXSwgcGVyY2VudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIGxlbjIgPSBwMFswXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgb3V0W2ldW2pdID0gaW50ZXJwb2xhdGVOdW1iZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgcDBbaV1bal0sIHAxW2ldW2pdLCBwZXJjZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FycmF5TGlrZShkYXRhKSB7XHJcbiAgICBpZiAodHlwZW9mKGRhdGEpID09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YoZGF0YSkgPT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YoZGF0YS5sZW5ndGgpID09ICdudW1iZXInO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9uZVZhbHVlKHZhbHVlKSB7XHJcbiAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpKSB7XHJcbiAgICAgICAgdmFyIGxlbiA9IHZhbHVlLmxlbmd0aDtcclxuICAgICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWVbMF0pKSB7XHJcbiAgICAgICAgICAgIHZhciByZXQgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmV0LnB1c2goYXJyYXlTbGljZS5jYWxsKHZhbHVlW2ldKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2F0bXVsbFJvbUludGVycG9sYXRlQXJyYXkoXHJcbiAgICBwMCwgcDEsIHAyLCBwMywgdCwgdDIsIHQzLCBvdXQsIGFyckRpbVxyXG4pIHtcclxuICAgIHZhciBsZW4gPSBwMC5sZW5ndGg7XHJcbiAgICBpZiAoYXJyRGltID09IDEpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIG91dFtpXSA9IGNhdG11bGxSb21JbnRlcnBvbGF0ZShcclxuICAgICAgICAgICAgICAgIHAwW2ldLCBwMVtpXSwgcDJbaV0sIHAzW2ldLCB0LCB0MiwgdDNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciBsZW4yID0gcDBbMF0ubGVuZ3RoO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW4yOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIG91dFtpXVtqXSA9IGNhdG11bGxSb21JbnRlcnBvbGF0ZShcclxuICAgICAgICAgICAgICAgICAgICBwMFtpXVtqXSwgcDFbaV1bal0sIHAyW2ldW2pdLCBwM1tpXVtqXSxcclxuICAgICAgICAgICAgICAgICAgICB0LCB0MiwgdDNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhdG11bGxSb21JbnRlcnBvbGF0ZShwMCwgcDEsIHAyLCBwMywgdCwgdDIsIHQzKSB7XHJcbiAgICB2YXIgdjAgPSAocDIgLSBwMCkgKiAwLjU7XHJcbiAgICB2YXIgdjEgPSAocDMgLSBwMSkgKiAwLjU7XHJcbiAgICByZXR1cm4gKDIgKiAocDEgLSBwMikgKyB2MCArIHYxKSAqIHQzXHJcbiAgICAgICAgICAgICsgKC0gMyAqIChwMSAtIHAyKSAtIDIgKiB2MCAtIHYxKSAqIHQyXHJcbiAgICAgICAgICAgICsgdjAgKiB0ICsgcDE7XHJcbn1cclxuXHJcbi8vIGFycjAgaXMgc291cmNlIGFycmF5LCBhcnIxIGlzIHRhcmdldCBhcnJheS5cclxuLy8gRG8gc29tZSBwcmVwcm9jZXNzIHRvIGF2b2lkIGVycm9yIGhhcHBlbmVkIHdoZW4gaW50ZXJwb2xhdGluZyBmcm9tIGFycjAgdG8gYXJyMVxyXG5mdW5jdGlvbiBmaWxsQXJyKGFycjAsIGFycjEsIGFyckRpbSkge1xyXG4gICAgdmFyIGFycjBMZW4gPSBhcnIwLmxlbmd0aDtcclxuICAgIHZhciBhcnIxTGVuID0gYXJyMS5sZW5ndGg7XHJcbiAgICBpZiAoYXJyMExlbiAhPT0gYXJyMUxlbikge1xyXG4gICAgICAgIC8vIEZJWE1FIE5vdCB3b3JrIGZvciBUeXBlZEFycmF5XHJcbiAgICAgICAgdmFyIGlzUHJldmlvdXNMYXJnZXIgPSBhcnIwTGVuID4gYXJyMUxlbjtcclxuICAgICAgICBpZiAoaXNQcmV2aW91c0xhcmdlcikge1xyXG4gICAgICAgICAgICAvLyBDdXQgdGhlIHByZXZpb3VzXHJcbiAgICAgICAgICAgIGFycjAubGVuZ3RoID0gYXJyMUxlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIEZpbGwgdGhlIHByZXZpb3VzXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBhcnIwTGVuOyBpIDwgYXJyMUxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhcnIwLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgYXJyRGltID09PSAxID8gYXJyMVtpXSA6IGFycmF5U2xpY2UuY2FsbChhcnIxW2ldKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEhhbmRsaW5nIE5hTiB2YWx1ZVxyXG4gICAgdmFyIGxlbjIgPSBhcnIwWzBdICYmIGFycjBbMF0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyckRpbSA9PT0gMSkge1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4oYXJyMFtpXSkpIHtcclxuICAgICAgICAgICAgICAgIGFycjBbaV0gPSBhcnIxW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKGFycjBbaV1bal0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyMFtpXVtqXSA9IGFycjFbaV1bal07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXJyYXlTYW1lKGFycjAsIGFycjEsIGFyckRpbSkge1xyXG4gICAgaWYgKGFycjAgPT09IGFycjEpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBsZW4gPSBhcnIwLmxlbmd0aDtcclxuICAgIGlmIChsZW4gIT09IGFycjEubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGFyckRpbSA9PT0gMSkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFycjBbaV0gIT09IGFycjFbaV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBsZW4yID0gYXJyMFswXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFycjBbaV1bal0gIT09IGFycjFbaV1bal0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlVHJhY2tDbGlwKGFuaW1hdG9yLCBnbG9iYWxFYXNpbmcsIG9uZVRyYWNrRG9uZSwga2V5ZnJhbWVzLCBwcm9wTmFtZSwgaW50ZXJwb2xhdGVyLCBtYXhUaW1lKSB7XHJcbiAgICB2YXIgZ2V0dGVyID0gYW5pbWF0b3IuX2dldHRlcjtcclxuICAgIHZhciBzZXR0ZXIgPSBhbmltYXRvci5fc2V0dGVyO1xyXG4gICAgdmFyIHVzZVNwbGluZSA9IGdsb2JhbEVhc2luZyA9PT0gJ3NwbGluZSc7XHJcblxyXG4gICAgdmFyIHRyYWNrTGVuID0ga2V5ZnJhbWVzLmxlbmd0aDtcclxuICAgIGlmICghdHJhY2tMZW4pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBHdWVzcyBkYXRhIHR5cGVcclxuICAgIHZhciBmaXJzdFZhbCA9IGtleWZyYW1lc1swXS52YWx1ZTtcclxuICAgIHZhciBpc1ZhbHVlQXJyYXkgPSBpc0FycmF5TGlrZShmaXJzdFZhbCk7XHJcblxyXG4gICAgLy8gRm9yIHZlcnRpY2VzIG1vcnBoaW5nXHJcbiAgICB2YXIgYXJyRGltID0gKFxyXG4gICAgICAgICAgICBpc1ZhbHVlQXJyYXlcclxuICAgICAgICAgICAgJiYgaXNBcnJheUxpa2UoZmlyc3RWYWxbMF0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgID8gMiA6IDE7XHJcbiAgICAvLyBTb3J0IGtleWZyYW1lIGFzIGFzY2VuZGluZ1xyXG4gICAga2V5ZnJhbWVzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xyXG4gICAgICAgIHJldHVybiBhLnRpbWUgLSBiLnRpbWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQZXJjZW50cyBvZiBlYWNoIGtleWZyYW1lXHJcbiAgICB2YXIga2ZQZXJjZW50cyA9IFtdO1xyXG4gICAgLy8gVmFsdWUgb2YgZWFjaCBrZXlmcmFtZVxyXG4gICAgdmFyIGtmVmFsdWVzID0gW107XHJcbiAgICAvLyBFYXNpbmcgZnVuY3Mgb2YgZWFjaCBrZXlmcmFtZS5cclxuICAgIHZhciBrZkVhc2luZ3MgPSBbXTtcclxuXHJcbiAgICB2YXIgcHJldlZhbHVlID0ga2V5ZnJhbWVzWzBdLnZhbHVlO1xyXG4gICAgdmFyIGlzQWxsVmFsdWVFcXVhbCA9IHRydWU7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWNrTGVuOyBpKyspIHtcclxuICAgICAgICBrZlBlcmNlbnRzLnB1c2goa2V5ZnJhbWVzW2ldLnRpbWUgLyBtYXhUaW1lKTtcclxuXHJcbiAgICAgICAgLy8gQXNzdW1lIHZhbHVlIGlzIGEgY29sb3Igd2hlbiBpdCBpcyBhIHN0cmluZ1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGtleWZyYW1lc1tpXS52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdmFsdWUgaXMgZXF1YWwsIGRlZXAgY2hlY2sgaWYgdmFsdWUgaXMgYXJyYXlcclxuICAgICAgICBpZiAoISgoaXNWYWx1ZUFycmF5ICYmIGlzQXJyYXlTYW1lKHZhbHVlLCBwcmV2VmFsdWUsIGFyckRpbSkpXHJcbiAgICAgICAgICAgIHx8ICghaXNWYWx1ZUFycmF5ICYmIHZhbHVlID09PSBwcmV2VmFsdWUpKSkge1xyXG4gICAgICAgICAgICBpc0FsbFZhbHVlRXF1YWwgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJldlZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGtmVmFsdWVzLnB1c2godmFsdWUpO1xyXG4gICAgICAgIGtmRWFzaW5ncy5wdXNoKGtleWZyYW1lc1tpXS5lYXNpbmcpO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzQWxsVmFsdWVFcXVhbCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbGFzdFZhbHVlID0ga2ZWYWx1ZXNbdHJhY2tMZW4gLSAxXTtcclxuICAgIC8vIFBvbHlmaWxsIGFycmF5IGFuZCBOYU4gdmFsdWVcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhY2tMZW4gLSAxOyBpKyspIHtcclxuICAgICAgICBpZiAoaXNWYWx1ZUFycmF5KSB7XHJcbiAgICAgICAgICAgIGZpbGxBcnIoa2ZWYWx1ZXNbaV0sIGxhc3RWYWx1ZSwgYXJyRGltKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihrZlZhbHVlc1tpXSkgJiYgIWlzTmFOKGxhc3RWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGtmVmFsdWVzW2ldID0gbGFzdFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaXNWYWx1ZUFycmF5ICYmIGZpbGxBcnIoZ2V0dGVyKGFuaW1hdG9yLl90YXJnZXQsIHByb3BOYW1lKSwgbGFzdFZhbHVlLCBhcnJEaW0pO1xyXG5cclxuICAgIC8vIENhY2hlIHRoZSBrZXkgb2YgbGFzdCBmcmFtZSB0byBzcGVlZCB1cCB3aGVuXHJcbiAgICAvLyBhbmltYXRpb24gcGxheWJhY2sgaXMgc2VxdWVuY3lcclxuICAgIHZhciBjYWNoZUtleSA9IDA7XHJcbiAgICB2YXIgY2FjaGVQZXJjZW50ID0gMDtcclxuICAgIHZhciBzdGFydDtcclxuICAgIHZhciBpLCB3O1xyXG4gICAgdmFyIHAwLCBwMSwgcDIsIHAzO1xyXG5cclxuICAgIHZhciBvbmZyYW1lID0gZnVuY3Rpb24odGFyZ2V0LCBwZXJjZW50KSB7XHJcbiAgICAgICAgLy8gRmluZCB0aGUgcmFuZ2Uga2V5ZnJhbWVzXHJcbiAgICAgICAgLy8ga2YxLS0tLS1rZjItLS0tLS0tLS1jdXJyZW50LS0tLS0tLS1rZjNcclxuICAgICAgICAvLyBmaW5kIGtmMihpKSBhbmQga2YzKGkgKyAxKSBhbmQgZG8gaW50ZXJwb2xhdGlvblxyXG4gICAgICAgIGlmIChwZXJjZW50IDwgY2FjaGVQZXJjZW50KSB7XHJcbiAgICAgICAgICAgIC8vIFN0YXJ0IGZyb20gbmV4dCBrZXlcclxuICAgICAgICAgICAgc3RhcnQgPSBNYXRoLm1pbihjYWNoZUtleSArIDEsIHRyYWNrTGVuIC0gMSk7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtmUGVyY2VudHNbaV0gPD0gcGVyY2VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkgPSBNYXRoLm1pbihpLCB0cmFja0xlbiAtIDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChpID0gY2FjaGVLZXk7IGkgPCB0cmFja0xlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2ZQZXJjZW50c1tpXSA+IHBlcmNlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpID0gTWF0aC5taW4oaSAtIDEsIHRyYWNrTGVuIC0gMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhY2hlS2V5ID0gaTtcclxuICAgICAgICBjYWNoZVBlcmNlbnQgPSBwZXJjZW50O1xyXG5cclxuICAgICAgICB2YXIgcmFuZ2UgPSAoa2ZQZXJjZW50c1tpICsgMV0gLSBrZlBlcmNlbnRzW2ldKTtcclxuICAgICAgICBpZiAocmFuZ2UgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdyA9IChwZXJjZW50IC0ga2ZQZXJjZW50c1tpXSkgLyByYW5nZTtcclxuICAgICAgICAgICAgLy8gQ2xhbXAgMCAtIDFcclxuICAgICAgICAgICAgdyA9IE1hdGgubWF4KE1hdGgubWluKDEsIHcpLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdyA9IGtmRWFzaW5nc1tpICsgMV0odyk7XHJcblxyXG4gICAgICAgIGlmICh1c2VTcGxpbmUpIHtcclxuICAgICAgICAgICAgcDEgPSBrZlZhbHVlc1tpXTtcclxuICAgICAgICAgICAgcDAgPSBrZlZhbHVlc1tpID09PSAwID8gaSA6IGkgLSAxXTtcclxuICAgICAgICAgICAgcDIgPSBrZlZhbHVlc1tpID4gdHJhY2tMZW4gLSAyID8gdHJhY2tMZW4gLSAxIDogaSArIDFdO1xyXG4gICAgICAgICAgICBwMyA9IGtmVmFsdWVzW2kgPiB0cmFja0xlbiAtIDMgPyB0cmFja0xlbiAtIDEgOiBpICsgMl07XHJcbiAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXIodGFyZ2V0LCBwcm9wTmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAwLCBwMSwgcDIsIHAzLCB3XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1ZhbHVlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGNhdG11bGxSb21JbnRlcnBvbGF0ZUFycmF5KFxyXG4gICAgICAgICAgICAgICAgICAgIHAwLCBwMSwgcDIsIHAzLCB3LCB3KncsIHcqdyp3LFxyXG4gICAgICAgICAgICAgICAgICAgIGdldHRlcih0YXJnZXQsIHByb3BOYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICBhcnJEaW1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhdG11bGxSb21JbnRlcnBvbGF0ZShwMCwgcDEsIHAyLCBwMywgdywgdyp3LCB3KncqdylcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXIodGFyZ2V0LCBwcm9wTmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtmVmFsdWVzW2ldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZlZhbHVlc1tpICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1ZhbHVlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGludGVycG9sYXRlQXJyYXkoXHJcbiAgICAgICAgICAgICAgICAgICAga2ZWYWx1ZXNbaV0sIGtmVmFsdWVzW2krMV0sIHcsXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0dGVyKHRhcmdldCwgcHJvcE5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyckRpbVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVOdW1iZXIoa2ZWYWx1ZXNbaV0sIGtmVmFsdWVzW2krMV0sIHcpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgY2xpcCA9IG5ldyBDbGlwKHtcclxuICAgICAgICB0YXJnZXQ6IGFuaW1hdG9yLl90YXJnZXQsXHJcbiAgICAgICAgbGlmZTogbWF4VGltZSxcclxuICAgICAgICBsb29wOiBhbmltYXRvci5fbG9vcCxcclxuICAgICAgICBkZWxheTogYW5pbWF0b3IuX2RlbGF5LFxyXG4gICAgICAgIG9uZnJhbWU6IG9uZnJhbWUsXHJcbiAgICAgICAgb25maW5pc2g6IG9uZVRyYWNrRG9uZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGdsb2JhbEVhc2luZyAmJiBnbG9iYWxFYXNpbmcgIT09ICdzcGxpbmUnKSB7XHJcbiAgICAgICAgY2xpcC5zZXRFYXNpbmcoZ2xvYmFsRWFzaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2xpcDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBBbmltYXRvciBvYmplY3QgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSBBbmltYXRpb24ucHJvdG90eXBlLmFuaW1hdGUgbWV0aG9kLlxyXG4gKiBBZnRlciBjcmVhdGVkLCB3ZSBjYW4gdXNlIHtAbGluayBjbGF5LmFuaW1hdGlvbi5BbmltYXRvciN3aGVufSB0byBhZGQgYWxsIGtleWZyYW1lcyBhbmQge0BsaW5rIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yI3N0YXJ0fSBpdC5cclxuICogQ2xpcHMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYW5kIGFkZGVkIHRvIHRoZSBhbmltYXRpb24gaW5zdGFuY2Ugd2hpY2ggY3JlYXRlZCB0aGlzIGRlZmVycmVkIG9iamVjdC5cclxuICpcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcclxuICogQHBhcmFtIHtib29sZWFufSBsb29wXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdldHRlclxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXJcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gaW50ZXJwb2xhdGVyXHJcbiAqL1xyXG5mdW5jdGlvbiBBbmltYXRvcih0YXJnZXQsIGxvb3AsIGdldHRlciwgc2V0dGVyLCBpbnRlcnBvbGF0ZXIpIHtcclxuICAgIHRoaXMuX3RyYWNrcyA9IHt9O1xyXG4gICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0O1xyXG5cclxuICAgIHRoaXMuX2xvb3AgPSBsb29wIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuX2dldHRlciA9IGdldHRlciB8fCBkZWZhdWx0R2V0dGVyO1xyXG4gICAgdGhpcy5fc2V0dGVyID0gc2V0dGVyIHx8IGRlZmF1bHRTZXR0ZXI7XHJcblxyXG4gICAgdGhpcy5faW50ZXJwb2xhdGVyID0gaW50ZXJwb2xhdGVyIHx8IG51bGw7XHJcblxyXG4gICAgdGhpcy5fZGVsYXkgPSAwO1xyXG5cclxuICAgIHRoaXMuX2RvbmVMaXN0ID0gW107XHJcblxyXG4gICAgdGhpcy5fb25mcmFtZUxpc3QgPSBbXTtcclxuXHJcbiAgICB0aGlzLl9jbGlwTGlzdCA9IFtdO1xyXG5cclxuICAgIHRoaXMuX21heFRpbWUgPSAwO1xyXG5cclxuICAgIHRoaXMuX2xhc3RLRlRpbWUgPSAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub29wRWFzaW5nKHcpIHtcclxuICAgIHJldHVybiB3O1xyXG59XHJcblxyXG5BbmltYXRvci5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IEFuaW1hdG9yLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgS2V5ZnJhbWUgdGltZSB1c2luZyBtaWxsaXNlY29uZFxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEga2V5LXZhbHVlIG9iamVjdC4gVmFsdWUgY2FuIGJlIG51bWJlciwgMWQgYW5kIDJkIGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW2Vhc2luZ11cclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICB3aGVuOiBmdW5jdGlvbiAodGltZSwgcHJvcHMsIGVhc2luZykge1xyXG5cclxuICAgICAgICB0aGlzLl9tYXhUaW1lID0gTWF0aC5tYXgodGltZSwgdGhpcy5fbWF4VGltZSk7XHJcblxyXG4gICAgICAgIGVhc2luZyA9ICh0eXBlb2YgZWFzaW5nID09PSAnZnVuY3Rpb24nID8gZWFzaW5nIDogZWFzaW5nRnVuY3NbZWFzaW5nXSkgfHwgbm9vcEVhc2luZztcclxuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBwcm9wcykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RyYWNrc1twcm9wTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrc1twcm9wTmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgIC8vIElmIHRpbWUgaXMgMFxyXG4gICAgICAgICAgICAgICAgLy8gIFRoZW4gcHJvcHMgaXMgZ2l2ZW4gaW5pdGlhbGl6ZSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgLy8gRWxzZVxyXG4gICAgICAgICAgICAgICAgLy8gIEluaXRpYWxpemUgdmFsdWUgZnJvbSBjdXJyZW50IHByb3AgdmFsdWVcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tzW3Byb3BOYW1lXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNsb25lVmFsdWUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXR0ZXIodGhpcy5fdGFyZ2V0LCBwcm9wTmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWFzaW5nOiBlYXNpbmdcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl90cmFja3NbcHJvcE5hbWVdLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGltZTogcGFyc2VJbnQodGltZSksXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogcHJvcHNbcHJvcE5hbWVdLFxyXG4gICAgICAgICAgICAgICAgZWFzaW5nOiBlYXNpbmdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgRHVyaW5nIHRpbWUgc2luY2UgbGFzdCBrZXlmcmFtZVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEga2V5LXZhbHVlIG9iamVjdC4gVmFsdWUgY2FuIGJlIG51bWJlciwgMWQgYW5kIDJkIGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW2Vhc2luZ11cclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICB0aGVuOiBmdW5jdGlvbiAoZHVyaW5nVGltZSwgcHJvcHMsIGVhc2luZykge1xyXG4gICAgICAgIHRoaXMud2hlbihkdXJpbmdUaW1lICsgdGhpcy5fbGFzdEtGVGltZSwgcHJvcHMsIGVhc2luZyk7XHJcbiAgICAgICAgdGhpcy5fbGFzdEtGVGltZSArPSBkdXJpbmdUaW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogY2FsbGJhY2sgd2hlbiBydW5uaW5nIGFuaW1hdGlvblxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrIGNhbGxiYWNrIGhhdmUgdHdvIGFyZ3MsIGFuaW1hdGluZyB0YXJnZXQgYW5kIGN1cnJlbnQgcGVyY2VudFxyXG4gICAgICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQW5pbWF0b3J9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGR1cmluZzogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5fb25mcmFtZUxpc3QucHVzaChjYWxsYmFjayk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9kb25lQ2FsbGJhY2s6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBDbGVhciBhbGwgdHJhY2tzXHJcbiAgICAgICAgdGhpcy5fdHJhY2tzID0ge307XHJcbiAgICAgICAgLy8gQ2xlYXIgYWxsIGNsaXBzXHJcbiAgICAgICAgdGhpcy5fY2xpcExpc3QubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgdmFyIGRvbmVMaXN0ID0gdGhpcy5fZG9uZUxpc3Q7XHJcbiAgICAgICAgdmFyIGxlbiA9IGRvbmVMaXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRvbmVMaXN0W2ldLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU3RhcnQgdGhlIGFuaW1hdGlvblxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfEZ1bmN0aW9ufSBlYXNpbmdcclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKGdsb2JhbEVhc2luZykge1xyXG5cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGNsaXBDb3VudCA9IDA7XHJcblxyXG4gICAgICAgIHZhciBvbmVUcmFja0RvbmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY2xpcENvdW50LS07XHJcbiAgICAgICAgICAgIGlmIChjbGlwQ291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuX2RvbmVDYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIGxhc3RDbGlwO1xyXG4gICAgICAgIHZhciBjbGlwTWF4VGltZSA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gdGhpcy5fdHJhY2tzKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gY3JlYXRlVHJhY2tDbGlwKFxyXG4gICAgICAgICAgICAgICAgdGhpcywgZ2xvYmFsRWFzaW5nLCBvbmVUcmFja0RvbmUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja3NbcHJvcE5hbWVdLCBwcm9wTmFtZSwgc2VsZi5faW50ZXJwb2xhdGVyLCBzZWxmLl9tYXhUaW1lXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICBjbGlwTWF4VGltZSA9IE1hdGgubWF4KGNsaXBNYXhUaW1lLCBjbGlwLmxpZmUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpcExpc3QucHVzaChjbGlwKTtcclxuICAgICAgICAgICAgICAgIGNsaXBDb3VudCsrO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIElmIHN0YXJ0IGFmdGVyIGFkZGVkIHRvIGFuaW1hdGlvblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRpb24uYWRkQ2xpcChjbGlwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsYXN0Q2xpcCA9IGNsaXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFkZCBkdXJpbmcgY2FsbGJhY2sgb24gdGhlIGxhc3QgY2xpcFxyXG4gICAgICAgIGlmIChsYXN0Q2xpcCkge1xyXG4gICAgICAgICAgICB2YXIgb2xkT25GcmFtZSA9IGxhc3RDbGlwLm9uZnJhbWU7XHJcbiAgICAgICAgICAgIGxhc3RDbGlwLm9uZnJhbWUgPSBmdW5jdGlvbiAodGFyZ2V0LCBwZXJjZW50KSB7XHJcbiAgICAgICAgICAgICAgICBvbGRPbkZyYW1lKHRhcmdldCwgcGVyY2VudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLl9vbmZyYW1lTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX29uZnJhbWVMaXN0W2ldKHRhcmdldCwgcGVyY2VudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNsaXBDb3VudCkge1xyXG4gICAgICAgICAgICB0aGlzLl9kb25lQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcCB0aGUgYW5pbWF0aW9uXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NsaXBMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gdGhpcy5fY2xpcExpc3RbaV07XHJcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uLnJlbW92ZUNsaXAoY2xpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NsaXBMaXN0ID0gW107XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxheSBnaXZlbiBtaWxsaXNlY29uZHNcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gdGltZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQW5pbWF0b3J9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGRlbGF5OiBmdW5jdGlvbiAodGltZSl7XHJcbiAgICAgICAgdGhpcy5fZGVsYXkgPSB0aW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgYWZ0ZXIgYW5pbWF0aW9uIGZpbmlzaGVkXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5BbmltYXRvcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmFuaW1hdGlvbi5BbmltYXRvci5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgZG9uZTogZnVuY3Rpb24gKGZ1bmMpIHtcclxuICAgICAgICBpZiAoZnVuYykge1xyXG4gICAgICAgICAgICB0aGlzLl9kb25lTGlzdC5wdXNoKGZ1bmMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhbGwgY2xpcHMgY3JlYXRlZCBpbiBzdGFydCBtZXRob2QuXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5DbGlwW119XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGdldENsaXBzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBMaXN0O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0b3I7XHJcbiIsIi8vIDFEIEJsZW5kIGNsaXAgb2YgYmxlbmQgdHJlZVxyXG4vLyBodHRwOi8vZG9jcy51bml0eTNkLmNvbS9Eb2N1bWVudGF0aW9uL01hbnVhbC8xREJsZW5kaW5nLmh0bWxcclxuXHJcbmltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcblxyXG52YXIgY2xpcFNvcnRGdW5jID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhLnBvc2l0aW9uIDwgYi5wb3NpdGlvbjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcC5JQ2xpcElucHV0XHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwb3NpdGlvblxyXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiAxZCBibGVuZGluZyBub2RlIGluIGFuaW1hdGlvbiBibGVuZCB0cmVlLlxyXG4gKiBvdXRwdXQgY2xpcCBtdXN0IGhhdmUgYmxlbmQxRCBhbmQgY29weSBtZXRob2RcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGlvXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cclxuICogQHBhcmFtIHtvYmplY3RbXX0gW29wdHMuaW5wdXRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMucG9zaXRpb25dXHJcbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gW29wdHMub3V0cHV0XVxyXG4gKi9cclxudmFyIEJsZW5kMURDbGlwID0gZnVuY3Rpb24gKG9wdHMpIHtcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XHJcbiAgICAvKipcclxuICAgICAqIE91dHB1dCBjbGlwIG11c3QgaGF2ZSBibGVuZDFEIGFuZCBjb3B5IG1ldGhvZFxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkNsaXB9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3V0cHV0ID0gb3B0cy5vdXRwdXQgfHwgbnVsbDtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwLklDbGlwSW5wdXRbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5pbnB1dHMgPSBvcHRzLmlucHV0cyB8fCBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IDA7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVLZXkgPSAwO1xyXG4gICAgdGhpcy5fY2FjaGVQb3NpdGlvbiA9IC1JbmZpbml0eTtcclxuXHJcbiAgICB0aGlzLmlucHV0cy5zb3J0KGNsaXBTb3J0RnVuYyk7XHJcbn07XHJcblxyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUgPSBuZXcgQ2xpcCgpO1xyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZDFEQ2xpcDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb25cclxuICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5DbGlwfSBpbnB1dENsaXBcclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRdXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwLklDbGlwSW5wdXR9XHJcbiAqL1xyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuYWRkSW5wdXQgPSBmdW5jdGlvbiAocG9zaXRpb24sIGlucHV0Q2xpcCwgb2Zmc2V0KSB7XHJcbiAgICB2YXIgb2JqID0ge1xyXG4gICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcclxuICAgICAgICBjbGlwOiBpbnB1dENsaXAsXHJcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQgfHwgMFxyXG4gICAgfTtcclxuICAgIHRoaXMubGlmZSA9IE1hdGgubWF4KGlucHV0Q2xpcC5saWZlLCB0aGlzLmxpZmUpO1xyXG5cclxuICAgIGlmICghdGhpcy5pbnB1dHMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbiAgICB2YXIgbGVuID0gdGhpcy5pbnB1dHMubGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMuaW5wdXRzWzBdLnBvc2l0aW9uID4gcG9zaXRpb24pIHtcclxuICAgICAgICB0aGlzLmlucHV0cy51bnNoaWZ0KG9iaik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5wdXRzW2xlbiAtIDFdLnBvc2l0aW9uIDw9IHBvc2l0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIga2V5ID0gdGhpcy5fZmluZEtleShwb3NpdGlvbik7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMuc3BsaWNlKGtleSwgb2JqKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG59O1xyXG5cclxuQmxlbmQxRENsaXAucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAodGltZSwgZFRpbWUsIHNpbGVudCkge1xyXG5cclxuICAgIHZhciByZXQgPSBDbGlwLnByb3RvdHlwZS5zdGVwLmNhbGwodGhpcywgdGltZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcclxuICAgICAgICB0aGlzLnNldFRpbWUodGhpcy5nZXRFbGFwc2VkVGltZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXHJcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufTtcclxuXHJcbkJsZW5kMURDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIHZhciBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb247XHJcbiAgICB2YXIgaW5wdXRzID0gdGhpcy5pbnB1dHM7XHJcbiAgICB2YXIgbGVuID0gaW5wdXRzLmxlbmd0aDtcclxuICAgIHZhciBtaW4gPSBpbnB1dHNbMF0ucG9zaXRpb247XHJcbiAgICB2YXIgbWF4ID0gaW5wdXRzW2xlbi0xXS5wb3NpdGlvbjtcclxuXHJcbiAgICBpZiAocG9zaXRpb24gPD0gbWluIHx8IHBvc2l0aW9uID49IG1heCkge1xyXG4gICAgICAgIHZhciBpbjAgPSBwb3NpdGlvbiA8PSBtaW4gPyBpbnB1dHNbMF0gOiBpbnB1dHNbbGVuLTFdO1xyXG4gICAgICAgIHZhciBjbGlwID0gaW4wLmNsaXA7XHJcbiAgICAgICAgdmFyIG9mZnNldCA9IGluMC5vZmZzZXQ7XHJcbiAgICAgICAgY2xpcC5zZXRUaW1lKCh0aW1lICsgb2Zmc2V0KSAlIGNsaXAubGlmZSk7XHJcbiAgICAgICAgLy8gSW5wdXQgY2xpcCBpcyBhIGJsZW5kIGNsaXBcclxuICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgaWYgKGNsaXAub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCkge1xyXG4gICAgICAgICAgICB0aGlzLm91dHB1dC5jb3B5KGNsaXAub3V0cHV0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm91dHB1dC5jb3B5KGNsaXApO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIGtleSA9IHRoaXMuX2ZpbmRLZXkocG9zaXRpb24pO1xyXG4gICAgICAgIHZhciBpbjEgPSBpbnB1dHNba2V5XTtcclxuICAgICAgICB2YXIgaW4yID0gaW5wdXRzW2tleSArIDFdO1xyXG4gICAgICAgIHZhciBjbGlwMSA9IGluMS5jbGlwO1xyXG4gICAgICAgIHZhciBjbGlwMiA9IGluMi5jbGlwO1xyXG4gICAgICAgIC8vIFNldCB0aW1lIG9uIGlucHV0IGNsaXBzXHJcbiAgICAgICAgY2xpcDEuc2V0VGltZSgodGltZSArIGluMS5vZmZzZXQpICUgY2xpcDEubGlmZSk7XHJcbiAgICAgICAgY2xpcDIuc2V0VGltZSgodGltZSArIGluMi5vZmZzZXQpICUgY2xpcDIubGlmZSk7XHJcblxyXG4gICAgICAgIHZhciB3ID0gKHRoaXMucG9zaXRpb24gLSBpbjEucG9zaXRpb24pIC8gKGluMi5wb3NpdGlvbiAtIGluMS5wb3NpdGlvbik7XHJcblxyXG4gICAgICAgIHZhciBjMSA9IGNsaXAxLm91dHB1dCBpbnN0YW5jZW9mIENsaXAgPyBjbGlwMS5vdXRwdXQgOiBjbGlwMTtcclxuICAgICAgICB2YXIgYzIgPSBjbGlwMi5vdXRwdXQgaW5zdGFuY2VvZiBDbGlwID8gY2xpcDIub3V0cHV0IDogY2xpcDI7XHJcbiAgICAgICAgdGhpcy5vdXRwdXQuYmxlbmQxRChjMSwgYzIsIHcpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsb25lIGEgbmV3IEJsZW5kMUQgY2xpcFxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNsb25lSW5wdXRzIFRydWUgaWYgY2xvbmUgdGhlIGlucHV0IGNsaXBzXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwfVxyXG4gKi9cclxuQmxlbmQxRENsaXAucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKGNsb25lSW5wdXRzKSB7XHJcbiAgICB2YXIgY2xpcCA9IENsaXAucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICBjbGlwLm91dHB1dCA9IHRoaXMub3V0cHV0LmNsb25lKCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGlucHV0Q2xpcCA9IGNsb25lSW5wdXRzID8gdGhpcy5pbnB1dHNbaV0uY2xpcC5jbG9uZSh0cnVlKSA6IHRoaXMuaW5wdXRzW2ldLmNsaXA7XHJcbiAgICAgICAgY2xpcC5hZGRJbnB1dCh0aGlzLmlucHV0c1tpXS5wb3NpdGlvbiwgaW5wdXRDbGlwLCB0aGlzLmlucHV0c1tpXS5vZmZzZXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsaXA7XHJcbn07XHJcblxyXG4vLyBGaW5kIHRoZSBrZXkgd2hlcmUgcG9zaXRpb24gaW4gcmFuZ2UgW2lucHV0c1trZXldLnBvc2l0aW9uLCBpbnB1dHNba2V5KzFdLnBvc2l0aW9uKVxyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuX2ZpbmRLZXkgPSBmdW5jdGlvbiAocG9zaXRpb24pIHtcclxuICAgIHZhciBrZXkgPSAtMTtcclxuICAgIHZhciBpbnB1dHMgPSB0aGlzLmlucHV0cztcclxuICAgIHZhciBsZW4gPSBpbnB1dHMubGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMuX2NhY2hlUG9zaXRpb24gPCBwb3NpdGlvbikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9jYWNoZUtleTsgaSA8IGxlbi0xOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0c1tpXS5wb3NpdGlvbiAmJiBwb3NpdGlvbiA8IGlucHV0c1tpKzFdLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBrZXkgPSBpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgcyA9IE1hdGgubWluKGxlbi0yLCB0aGlzLl9jYWNoZUtleSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IHM7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSBpbnB1dHNbaV0ucG9zaXRpb24gJiYgcG9zaXRpb24gPCBpbnB1dHNbaSsxXS5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAga2V5ID0gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChrZXkgPj0gMCkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlS2V5ID0ga2V5O1xyXG4gICAgICAgIHRoaXMuX2NhY2hlUG9zaXRpb24gPSBwb3NpdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ga2V5O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmxlbmQxRENsaXA7IiwiLy8gRGVsYXVuYXkgVHJpYW5ndWxhdGlvblxyXG4vLyBNb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9pcm9ud2FsbGFieS9kZWxhdW5heVxyXG52YXIgRVBTSUxPTiA9IDEuMCAvIDEwNDg1NzYuMDtcclxuXHJcbmZ1bmN0aW9uIHN1cGVydHJpYW5nbGUodmVydGljZXMpIHtcclxuICAgIHZhciB4bWluID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xyXG4gICAgdmFyIHltaW4gPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XHJcbiAgICB2YXIgeG1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcclxuICAgIHZhciB5bWF4ID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xyXG4gICAgdmFyIGksIGR4LCBkeSwgZG1heCwgeG1pZCwgeW1pZDtcclxuXHJcbiAgICBmb3IgKGkgPSB2ZXJ0aWNlcy5sZW5ndGg7IGktLTsgKSB7XHJcbiAgICAgICAgaWYgKHZlcnRpY2VzW2ldWzBdIDwgeG1pbikgeyB4bWluID0gdmVydGljZXNbaV1bMF07IH1cclxuICAgICAgICBpZiAodmVydGljZXNbaV1bMF0gPiB4bWF4KSB7IHhtYXggPSB2ZXJ0aWNlc1tpXVswXTsgfVxyXG4gICAgICAgIGlmICh2ZXJ0aWNlc1tpXVsxXSA8IHltaW4pIHsgeW1pbiA9IHZlcnRpY2VzW2ldWzFdOyB9XHJcbiAgICAgICAgaWYgKHZlcnRpY2VzW2ldWzFdID4geW1heCkgeyB5bWF4ID0gdmVydGljZXNbaV1bMV07IH1cclxuICAgIH1cclxuXHJcbiAgICBkeCA9IHhtYXggLSB4bWluO1xyXG4gICAgZHkgPSB5bWF4IC0geW1pbjtcclxuICAgIGRtYXggPSBNYXRoLm1heChkeCwgZHkpO1xyXG4gICAgeG1pZCA9IHhtaW4gKyBkeCAqIDAuNTtcclxuICAgIHltaWQgPSB5bWluICsgZHkgKiAwLjU7XHJcblxyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICBbeG1pZCAtIDIwICogZG1heCwgeW1pZCAtICAgICAgZG1heF0sXHJcbiAgICAgICAgW3htaWQgICAgICAgICAgICAsIHltaWQgKyAyMCAqIGRtYXhdLFxyXG4gICAgICAgIFt4bWlkICsgMjAgKiBkbWF4LCB5bWlkIC0gICAgICBkbWF4XVxyXG4gICAgXTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2lyY3VtY2lyY2xlKHZlcnRpY2VzLCBpLCBqLCBrKSB7XHJcbiAgICB2YXIgeDEgPSB2ZXJ0aWNlc1tpXVswXSxcclxuICAgICAgICAgICAgeTEgPSB2ZXJ0aWNlc1tpXVsxXSxcclxuICAgICAgICAgICAgeDIgPSB2ZXJ0aWNlc1tqXVswXSxcclxuICAgICAgICAgICAgeTIgPSB2ZXJ0aWNlc1tqXVsxXSxcclxuICAgICAgICAgICAgeDMgPSB2ZXJ0aWNlc1trXVswXSxcclxuICAgICAgICAgICAgeTMgPSB2ZXJ0aWNlc1trXVsxXSxcclxuICAgICAgICAgICAgZmFic3kxeTIgPSBNYXRoLmFicyh5MSAtIHkyKSxcclxuICAgICAgICAgICAgZmFic3kyeTMgPSBNYXRoLmFicyh5MiAtIHkzKSxcclxuICAgICAgICAgICAgeGMsIHljLCBtMSwgbTIsIG14MSwgbXgyLCBteTEsIG15MiwgZHgsIGR5O1xyXG5cclxuICAgIC8qIENoZWNrIGZvciBjb2luY2lkZW50IHBvaW50cyAqL1xyXG4gICAgaWYgKGZhYnN5MXkyIDwgRVBTSUxPTiAmJiBmYWJzeTJ5MyA8IEVQU0lMT04pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VlayEgQ29pbmNpZGVudCBwb2ludHMhJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZhYnN5MXkyIDwgRVBTSUxPTikge1xyXG4gICAgICAgIG0yICA9IC0oKHgzIC0geDIpIC8gKHkzIC0geTIpKTtcclxuICAgICAgICBteDIgPSAoeDIgKyB4MykgLyAyLjA7XHJcbiAgICAgICAgbXkyID0gKHkyICsgeTMpIC8gMi4wO1xyXG4gICAgICAgIHhjICA9ICh4MiArIHgxKSAvIDIuMDtcclxuICAgICAgICB5YyAgPSBtMiAqICh4YyAtIG14MikgKyBteTI7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoZmFic3kyeTMgPCBFUFNJTE9OKSB7XHJcbiAgICAgICAgbTEgID0gLSgoeDIgLSB4MSkgLyAoeTIgLSB5MSkpO1xyXG4gICAgICAgIG14MSA9ICh4MSArIHgyKSAvIDIuMDtcclxuICAgICAgICBteTEgPSAoeTEgKyB5MikgLyAyLjA7XHJcbiAgICAgICAgeGMgID0gKHgzICsgeDIpIC8gMi4wO1xyXG4gICAgICAgIHljICA9IG0xICogKHhjIC0gbXgxKSArIG15MTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBtMSAgPSAtKCh4MiAtIHgxKSAvICh5MiAtIHkxKSk7XHJcbiAgICAgICAgbTIgID0gLSgoeDMgLSB4MikgLyAoeTMgLSB5MikpO1xyXG4gICAgICAgIG14MSA9ICh4MSArIHgyKSAvIDIuMDtcclxuICAgICAgICBteDIgPSAoeDIgKyB4MykgLyAyLjA7XHJcbiAgICAgICAgbXkxID0gKHkxICsgeTIpIC8gMi4wO1xyXG4gICAgICAgIG15MiA9ICh5MiArIHkzKSAvIDIuMDtcclxuICAgICAgICB4YyAgPSAobTEgKiBteDEgLSBtMiAqIG14MiArIG15MiAtIG15MSkgLyAobTEgLSBtMik7XHJcbiAgICAgICAgeWMgID0gKGZhYnN5MXkyID4gZmFic3kyeTMpID9cclxuICAgICAgICAgICAgbTEgKiAoeGMgLSBteDEpICsgbXkxIDpcclxuICAgICAgICAgICAgbTIgKiAoeGMgLSBteDIpICsgbXkyO1xyXG4gICAgfVxyXG5cclxuICAgIGR4ID0geDIgLSB4YztcclxuICAgIGR5ID0geTIgLSB5YztcclxuICAgIHJldHVybiB7aTogaSwgajogaiwgazogaywgeDogeGMsIHk6IHljLCByOiBkeCAqIGR4ICsgZHkgKiBkeX07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZHVwKGVkZ2VzKSB7XHJcbiAgICB2YXIgaSwgaiwgYSwgYiwgbSwgbjtcclxuXHJcbiAgICBmb3IgKGogPSBlZGdlcy5sZW5ndGg7IGo7ICkge1xyXG4gICAgICAgIGIgPSBlZGdlc1stLWpdO1xyXG4gICAgICAgIGEgPSBlZGdlc1stLWpdO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSBqOyBpOyApIHtcclxuICAgICAgICAgICAgbiA9IGVkZ2VzWy0taV07XHJcbiAgICAgICAgICAgIG0gPSBlZGdlc1stLWldO1xyXG5cclxuICAgICAgICAgICAgaWYgKChhID09PSBtICYmIGIgPT09IG4pIHx8IChhID09PSBuICYmIGIgPT09IG0pKSB7XHJcbiAgICAgICAgICAgICAgICBlZGdlcy5zcGxpY2UoaiwgMik7XHJcbiAgICAgICAgICAgICAgICBlZGdlcy5zcGxpY2UoaSwgMik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxudmFyIGRlbGF1bmF5ID0ge1xyXG4gICAgdHJpYW5ndWxhdGU6IGZ1bmN0aW9uKHZlcnRpY2VzLCBrZXkpIHtcclxuICAgICAgICB2YXIgbiA9IHZlcnRpY2VzLmxlbmd0aDtcclxuICAgICAgICB2YXIgaSwgaiwgaW5kaWNlcywgc3QsIG9wZW4sIGNsb3NlZCwgZWRnZXMsIGR4LCBkeSwgYSwgYiwgYztcclxuXHJcbiAgICAgICAgLyogQmFpbCBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIHZlcnRpY2VzIHRvIGZvcm0gYW55IHRyaWFuZ2xlcy4gKi9cclxuICAgICAgICBpZiAobiA8IDMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogU2xpY2Ugb3V0IHRoZSBhY3R1YWwgdmVydGljZXMgZnJvbSB0aGUgcGFzc2VkIG9iamVjdHMuIChEdXBsaWNhdGUgdGhlXHJcbiAgICAgICAgICAgICogYXJyYXkgZXZlbiBpZiB3ZSBkb24ndCwgdGhvdWdoLCBzaW5jZSB3ZSBuZWVkIHRvIG1ha2UgYSBzdXBlcnRyaWFuZ2xlXHJcbiAgICAgICAgICAgICogbGF0ZXIgb24hKSAqL1xyXG4gICAgICAgIHZlcnRpY2VzID0gdmVydGljZXMuc2xpY2UoMCk7XHJcblxyXG4gICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgICAgZm9yIChpID0gbjsgaS0tOyApIHtcclxuICAgICAgICAgICAgICAgIHZlcnRpY2VzW2ldID0gdmVydGljZXNbaV1ba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogTWFrZSBhbiBhcnJheSBvZiBpbmRpY2VzIGludG8gdGhlIHZlcnRleCBhcnJheSwgc29ydGVkIGJ5IHRoZVxyXG4gICAgICAgICAgICAqIHZlcnRpY2VzJyB4LXBvc2l0aW9uLiBGb3JjZSBzdGFibGUgc29ydGluZyBieSBjb21wYXJpbmcgaW5kaWNlcyBpZlxyXG4gICAgICAgICAgICAqIHRoZSB4LXBvc2l0aW9ucyBhcmUgZXF1YWwuICovXHJcbiAgICAgICAgaW5kaWNlcyA9IG5ldyBBcnJheShuKTtcclxuXHJcbiAgICAgICAgZm9yIChpID0gbjsgaS0tOyApIHtcclxuICAgICAgICAgICAgaW5kaWNlc1tpXSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpbmRpY2VzLnNvcnQoZnVuY3Rpb24oaSwgaikge1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IHZlcnRpY2VzW2pdWzBdIC0gdmVydGljZXNbaV1bMF07XHJcbiAgICAgICAgICAgIHJldHVybiBkaWZmICE9PSAwID8gZGlmZiA6IGkgLSBqO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvKiBOZXh0LCBmaW5kIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgc3VwZXJ0cmlhbmdsZSAod2hpY2ggY29udGFpbnMgYWxsIG90aGVyXHJcbiAgICAgICAgICAgICogdHJpYW5nbGVzKSwgYW5kIGFwcGVuZCB0aGVtIG9udG8gdGhlIGVuZCBvZiBhIChjb3B5IG9mKSB0aGUgdmVydGV4XHJcbiAgICAgICAgICAgICogYXJyYXkuICovXHJcbiAgICAgICAgc3QgPSBzdXBlcnRyaWFuZ2xlKHZlcnRpY2VzKTtcclxuICAgICAgICB2ZXJ0aWNlcy5wdXNoKHN0WzBdLCBzdFsxXSwgc3RbMl0pO1xyXG5cclxuICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBvcGVuIGxpc3QgKGNvbnRhaW5pbmcgdGhlIHN1cGVydHJpYW5nbGUgYW5kIG5vdGhpbmdcclxuICAgICAgICAgICAgKiBlbHNlKSBhbmQgdGhlIGNsb3NlZCBsaXN0ICh3aGljaCBpcyBlbXB0eSBzaW5jZSB3ZSBoYXZuJ3QgcHJvY2Vzc2VkXHJcbiAgICAgICAgICAgICogYW55IHRyaWFuZ2xlcyB5ZXQpLiAqL1xyXG4gICAgICAgIG9wZW4gICA9IFtjaXJjdW1jaXJjbGUodmVydGljZXMsIG4gKyAwLCBuICsgMSwgbiArIDIpXTtcclxuICAgICAgICBjbG9zZWQgPSBbXTtcclxuICAgICAgICBlZGdlcyAgPSBbXTtcclxuXHJcbiAgICAgICAgLyogSW5jcmVtZW50YWxseSBhZGQgZWFjaCB2ZXJ0ZXggdG8gdGhlIG1lc2guICovXHJcbiAgICAgICAgZm9yIChpID0gaW5kaWNlcy5sZW5ndGg7IGktLTsgZWRnZXMubGVuZ3RoID0gMCkge1xyXG4gICAgICAgICAgICBjID0gaW5kaWNlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8qIEZvciBlYWNoIG9wZW4gdHJpYW5nbGUsIGNoZWNrIHRvIHNlZSBpZiB0aGUgY3VycmVudCBwb2ludCBpc1xyXG4gICAgICAgICAgICAgICAgKiBpbnNpZGUgaXQncyBjaXJjdW1jaXJjbGUuIElmIGl0IGlzLCByZW1vdmUgdGhlIHRyaWFuZ2xlIGFuZCBhZGRcclxuICAgICAgICAgICAgICAgICogaXQncyBlZGdlcyB0byBhbiBlZGdlIGxpc3QuICovXHJcbiAgICAgICAgICAgIGZvciAoaiA9IG9wZW4ubGVuZ3RoOyBqLS07ICkge1xyXG4gICAgICAgICAgICAgICAgLyogSWYgdGhpcyBwb2ludCBpcyB0byB0aGUgcmlnaHQgb2YgdGhpcyB0cmlhbmdsZSdzIGNpcmN1bWNpcmNsZSxcclxuICAgICAgICAgICAgICAgICAgICAqIHRoZW4gdGhpcyB0cmlhbmdsZSBzaG91bGQgbmV2ZXIgZ2V0IGNoZWNrZWQgYWdhaW4uIFJlbW92ZSBpdFxyXG4gICAgICAgICAgICAgICAgICAgICogZnJvbSB0aGUgb3BlbiBsaXN0LCBhZGQgaXQgdG8gdGhlIGNsb3NlZCBsaXN0LCBhbmQgc2tpcC4gKi9cclxuICAgICAgICAgICAgICAgIGR4ID0gdmVydGljZXNbY11bMF0gLSBvcGVuW2pdLng7XHJcbiAgICAgICAgICAgICAgICBpZiAoZHggPiAwLjAgJiYgZHggKiBkeCA+IG9wZW5bal0ucikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlZC5wdXNoKG9wZW5bal0pO1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZW4uc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8qIElmIHdlJ3JlIG91dHNpZGUgdGhlIGNpcmN1bWNpcmNsZSwgc2tpcCB0aGlzIHRyaWFuZ2xlLiAqL1xyXG4gICAgICAgICAgICAgICAgZHkgPSB2ZXJ0aWNlc1tjXVsxXSAtIG9wZW5bal0ueTtcclxuICAgICAgICAgICAgICAgIGlmIChkeCAqIGR4ICsgZHkgKiBkeSAtIG9wZW5bal0uciA+IEVQU0lMT04pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvKiBSZW1vdmUgdGhlIHRyaWFuZ2xlIGFuZCBhZGQgaXQncyBlZGdlcyB0byB0aGUgZWRnZSBsaXN0LiAqL1xyXG4gICAgICAgICAgICAgICAgZWRnZXMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmksIG9wZW5bal0uaixcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmosIG9wZW5bal0uayxcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmssIG9wZW5bal0uaVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIG9wZW4uc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKiBSZW1vdmUgYW55IGRvdWJsZWQgZWRnZXMuICovXHJcbiAgICAgICAgICAgIGRlZHVwKGVkZ2VzKTtcclxuXHJcbiAgICAgICAgICAgIC8qIEFkZCBhIG5ldyB0cmlhbmdsZSBmb3IgZWFjaCBlZGdlLiAqL1xyXG4gICAgICAgICAgICBmb3IgKGogPSBlZGdlcy5sZW5ndGg7IGo7ICkge1xyXG4gICAgICAgICAgICAgICAgYiA9IGVkZ2VzWy0tal07XHJcbiAgICAgICAgICAgICAgICBhID0gZWRnZXNbLS1qXTtcclxuICAgICAgICAgICAgICAgIG9wZW4ucHVzaChjaXJjdW1jaXJjbGUodmVydGljZXMsIGEsIGIsIGMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogQ29weSBhbnkgcmVtYWluaW5nIG9wZW4gdHJpYW5nbGVzIHRvIHRoZSBjbG9zZWQgbGlzdCwgYW5kIHRoZW5cclxuICAgICAgICAgICAgKiByZW1vdmUgYW55IHRyaWFuZ2xlcyB0aGF0IHNoYXJlIGEgdmVydGV4IHdpdGggdGhlIHN1cGVydHJpYW5nbGUsXHJcbiAgICAgICAgICAgICogYnVpbGRpbmcgYSBsaXN0IG9mIHRyaXBsZXRzIHRoYXQgcmVwcmVzZW50IHRyaWFuZ2xlcy4gKi9cclxuICAgICAgICBmb3IgKGkgPSBvcGVuLmxlbmd0aDsgaS0tOyApIHtcclxuICAgICAgICAgICAgY2xvc2VkLnB1c2gob3BlbltpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wZW4ubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChpID0gY2xvc2VkLmxlbmd0aDsgaS0tOyApIHtcclxuICAgICAgICAgICAgaWYgKGNsb3NlZFtpXS5pIDwgbiAmJiBjbG9zZWRbaV0uaiA8IG4gJiYgY2xvc2VkW2ldLmsgPCBuKSB7XHJcbiAgICAgICAgICAgICAgICBvcGVuLnB1c2goY2xvc2VkW2ldLmksIGNsb3NlZFtpXS5qLCBjbG9zZWRbaV0uayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIFlheSwgd2UncmUgZG9uZSEgKi9cclxuICAgICAgICByZXR1cm4gb3BlbjtcclxuICAgIH0sXHJcbiAgICBjb250YWluczogZnVuY3Rpb24odHJpLCBwKSB7XHJcbiAgICAgICAgLyogQm91bmRpbmcgYm94IHRlc3QgZmlyc3QsIGZvciBxdWljayByZWplY3Rpb25zLiAqL1xyXG4gICAgICAgIGlmICgocFswXSA8IHRyaVswXVswXSAmJiBwWzBdIDwgdHJpWzFdWzBdICYmIHBbMF0gPCB0cmlbMl1bMF0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFswXSA+IHRyaVswXVswXSAmJiBwWzBdID4gdHJpWzFdWzBdICYmIHBbMF0gPiB0cmlbMl1bMF0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFsxXSA8IHRyaVswXVsxXSAmJiBwWzFdIDwgdHJpWzFdWzFdICYmIHBbMV0gPCB0cmlbMl1bMV0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFsxXSA+IHRyaVswXVsxXSAmJiBwWzFdID4gdHJpWzFdWzFdICYmIHBbMV0gPiB0cmlbMl1bMV0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGEgPSB0cmlbMV1bMF0gLSB0cmlbMF1bMF07XHJcbiAgICAgICAgdmFyIGIgPSB0cmlbMl1bMF0gLSB0cmlbMF1bMF07XHJcbiAgICAgICAgdmFyIGMgPSB0cmlbMV1bMV0gLSB0cmlbMF1bMV07XHJcbiAgICAgICAgdmFyIGQgPSB0cmlbMl1bMV0gLSB0cmlbMF1bMV07XHJcbiAgICAgICAgdmFyIGkgPSBhICogZCAtIGIgKiBjO1xyXG5cclxuICAgICAgICAvKiBEZWdlbmVyYXRlIHRyaS4gKi9cclxuICAgICAgICBpZiAoaSA9PT0gMC4wKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHUgPSAoZCAqIChwWzBdIC0gdHJpWzBdWzBdKSAtIGIgKiAocFsxXSAtIHRyaVswXVsxXSkpIC8gaSxcclxuICAgICAgICAgICAgICAgIHYgPSAoYSAqIChwWzFdIC0gdHJpWzBdWzFdKSAtIGMgKiAocFswXSAtIHRyaVswXVswXSkpIC8gaTtcclxuXHJcbiAgICAgICAgLyogSWYgd2UncmUgb3V0c2lkZSB0aGUgdHJpLCBmYWlsLiAqL1xyXG4gICAgICAgIGlmICh1IDwgMC4wIHx8IHYgPCAwLjAgfHwgKHUgKyB2KSA+IDEuMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBbdSwgdl07XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBkZWxhdW5heTtcclxuIiwiXHJcbmV4cG9ydCB2YXIgR0xNQVRfRVBTSUxPTiA9IDAuMDAwMDAxO1xyXG5cclxuLy8gVXNlIEFycmF5IGluc3RlYWQgb2YgRmxvYXQzMkFycmF5LiBJdCBzZWVtcyB0byBiZSBtdWNoIGZhc3RlciBhbmQgaGlnaGVyIHByZWNpc2lvbi5cclxuZXhwb3J0IHZhciBHTE1BVF9BUlJBWV9UWVBFID0gQXJyYXk7XHJcbi8vIGlmKCFHTE1BVF9BUlJBWV9UWVBFKSB7XHJcbi8vICAgICBHTE1BVF9BUlJBWV9UWVBFID0gKHR5cGVvZiBGbG9hdDMyQXJyYXkgIT09ICd1bmRlZmluZWQnKSA/IEZsb2F0MzJBcnJheSA6IEFycmF5O1xyXG4vLyB9XHJcblxyXG5leHBvcnQgdmFyIEdMTUFUX1JBTkRPTSA9IE1hdGgucmFuZG9tO1xyXG4iLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgMiBEaW1lbnNpb25hbCBWZWN0b3JcclxuICogQG5hbWUgdmVjMlxyXG4gKi9cclxuXHJcbnZhciB2ZWMyID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjMlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjMn0gYSBuZXcgMkQgdmVjdG9yXHJcbiAqL1xyXG52ZWMyLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDIpO1xyXG4gICAgb3V0WzBdID0gMDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMiBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBhIG5ldyAyRCB2ZWN0b3JcclxuICovXHJcbnZlYzIuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMik7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMyIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gYSBuZXcgMkQgdmVjdG9yXHJcbiAqL1xyXG52ZWMyLmZyb21WYWx1ZXMgPSBmdW5jdGlvbih4LCB5KSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMik7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzIgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMiB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5KSB7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTdWJ0cmFjdHMgdmVjdG9yIGIgZnJvbSB2ZWN0b3IgYVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnN1YnRyYWN0ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMi5zdWIgPSB2ZWMyLnN1YnRyYWN0O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm11bHRpcGx5ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMi5tdWwgPSB2ZWMyLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLmRpdmlkZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAvIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpdmlkZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLmRpdiA9IHZlYzIuZGl2aWRlO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1pbmltdW0gb2YgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gTWF0aC5taW4oYVswXSwgYlswXSk7XHJcbiAgICBvdXRbMV0gPSBNYXRoLm1pbihhWzFdLCBiWzFdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMyIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYjtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWMyJ3MgYWZ0ZXIgc2NhbGluZyB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWVcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYiBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgKGJbMF0gKiBzY2FsZSk7XHJcbiAgICBvdXRbMV0gPSBhWzFdICsgKGJbMV0gKiBzY2FsZSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMyLmRpc3RhbmNlID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgdmFyIHggPSBiWzBdIC0gYVswXSxcclxuICAgICAgICB5ID0gYlsxXSAtIGFbMV07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuZGlzdCA9IHZlYzIuZGlzdGFuY2U7XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMyLnNxdWFyZWREaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXHJcbiAgICAgICAgeSA9IGJbMV0gLSBhWzFdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuc3FyRGlzdCA9IHZlYzIuc3F1YXJlZERpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWMyLmxlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLmxlbiA9IHZlYzIubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWMyLnNxdWFyZWRMZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLnNxckxlbiA9IHZlYzIuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gLWFbMF07XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5pbnZlcnNlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcclxuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xyXG4gIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogTm9ybWFsaXplIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgdmFyIGxlbiA9IHgqeCArIHkqeTtcclxuICAgIGlmIChsZW4gPiAwKSB7XHJcbiAgICAgICAgLy9UT0RPOiBldmFsdWF0ZSB1c2Ugb2YgZ2xtX2ludnNxcnQgaGVyZT9cclxuICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgICAgb3V0WzBdID0gYVswXSAqIGxlbjtcclxuICAgICAgICBvdXRbMV0gPSBhWzFdICogbGVuO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXHJcbnZlYzIuZG90ID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbXB1dGVzIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHR3byB2ZWMyJ3NcclxuICogTm90ZSB0aGF0IHRoZSBjcm9zcyBwcm9kdWN0IG11c3QgYnkgZGVmaW5pdGlvbiBwcm9kdWNlIGEgM0QgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzIuY3Jvc3MgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZhciB6ID0gYVswXSAqIGJbMV0gLSBhWzFdICogYlswXTtcclxuICAgIG91dFswXSA9IG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSB6O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIubGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcclxuICAgIHZhciBheCA9IGFbMF0sXHJcbiAgICAgICAgYXkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XHJcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHZlY3RvciB3aXRoIHRoZSBnaXZlbiBzY2FsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3NjYWxlXSBMZW5ndGggb2YgdGhlIHJlc3VsdGluZyB2ZWN0b3IuIElmIG9tbWl0dGVkLCBhIHVuaXQgdmVjdG9yIHdpbGwgYmUgcmV0dXJuZWRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5yYW5kb20gPSBmdW5jdGlvbiAob3V0LCBzY2FsZSkge1xyXG4gICAgc2NhbGUgPSBzY2FsZSB8fCAxLjA7XHJcbiAgICB2YXIgciA9IEdMTUFUX1JBTkRPTSgpICogMi4wICogTWF0aC5QSTtcclxuICAgIG91dFswXSA9IE1hdGguY29zKHIpICogc2NhbGU7XHJcbiAgICBvdXRbMV0gPSBNYXRoLnNpbihyKSAqIHNjYWxlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDJ9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIudHJhbnNmb3JtTWF0MiA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzJdICogeTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDJkfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnRyYW5zZm9ybU1hdDJkID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV07XHJcbiAgICBvdXRbMF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHkgKyBtWzVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQzXHJcbiAqIDNyZCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDN9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIudHJhbnNmb3JtTWF0MyA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzNdICogeSArIG1bNl07XHJcbiAgICBvdXRbMV0gPSBtWzFdICogeCArIG1bNF0gKiB5ICsgbVs3XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMiB3aXRoIGEgbWF0NFxyXG4gKiAzcmQgdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcwJ1xyXG4gKiA0dGggdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQ0fSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnRyYW5zZm9ybU1hdDQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZhciB4ID0gYVswXSxcclxuICAgICAgICB5ID0gYVsxXTtcclxuICAgIG91dFswXSA9IG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzEyXTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzEzXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybSBzb21lIG9wZXJhdGlvbiBvdmVyIGFuIGFycmF5IG9mIHZlYzJzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3ZlclxyXG4gKiBAcGFyYW0ge051bWJlcn0gc3RyaWRlIE51bWJlciBvZiBlbGVtZW50cyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHZlYzIuIElmIDAgYXNzdW1lcyB0aWdodGx5IHBhY2tlZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IE51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjMnMgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggdmVjdG9yIGluIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW2FyZ10gYWRkaXRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGZuXHJcbiAqIEByZXR1cm5zIHtBcnJheX0gYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuZm9yRWFjaCA9IChmdW5jdGlvbigpIHtcclxuICAgIHZhciB2ZWMgPSB2ZWMyLmNyZWF0ZSgpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbihhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcclxuICAgICAgICB2YXIgaSwgbDtcclxuICAgICAgICBpZighc3RyaWRlKSB7XHJcbiAgICAgICAgICAgIHN0cmlkZSA9IDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZighb2Zmc2V0KSB7XHJcbiAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjb3VudCkge1xyXG4gICAgICAgICAgICBsID0gTWF0aC5taW4oKGNvdW50ICogc3RyaWRlKSArIG9mZnNldCwgYS5sZW5ndGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGwgPSBhLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihpID0gb2Zmc2V0OyBpIDwgbDsgaSArPSBzdHJpZGUpIHtcclxuICAgICAgICAgICAgdmVjWzBdID0gYVtpXTsgdmVjWzFdID0gYVtpKzFdO1xyXG4gICAgICAgICAgICBmbih2ZWMsIHZlYywgYXJnKTtcclxuICAgICAgICAgICAgYVtpXSA9IHZlY1swXTsgYVtpKzFdID0gdmVjWzFdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjMjsiLCJpbXBvcnQgdmVjMiBmcm9tICcuLi9nbG1hdHJpeC92ZWMyJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuVmVjdG9yMlxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKi9cclxudmFyIFZlY3RvcjIgPSBmdW5jdGlvbih4LCB5KSB7XHJcblxyXG4gICAgeCA9IHggfHwgMDtcclxuICAgIHkgPSB5IHx8IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIFZlY3RvcjIsIHJlYWQgYW5kIHdyaXRlIG9mIHgsIHkgd2lsbCBjaGFuZ2UgdGhlIHZhbHVlcyBpbiBhcnJheVxyXG4gICAgICogQWxsIG1ldGhvZHMgYWxzbyBvcGVyYXRlIG9uIHRoZSBhcnJheSBpbnN0ZWFkIG9mIHgsIHkgY29tcG9uZW50c1xyXG4gICAgICogQG5hbWUgYXJyYXlcclxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IyI1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFycmF5ID0gdmVjMi5mcm9tVmFsdWVzKHgsIHkpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlydHkgZmxhZyBpcyB1c2VkIGJ5IHRoZSBOb2RlIHRvIGRldGVybWluZVxyXG4gICAgICogaWYgdGhlIG1hdHJpeCBpcyB1cGRhdGVkIHRvIGxhdGVzdFxyXG4gICAgICogQG5hbWUgX2RpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjIjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcblZlY3RvcjIucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBWZWN0b3IyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGIgdG8gc2VsZlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCBhbmQgeSBjb21wb25lbnRzXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24oeCwgeSkge1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSB4O1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSB5O1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCBhbmQgeSBjb21wb25lbnRzIGZyb20gYXJyYXlcclxuICAgICAqIEBwYXJhbSAge0Zsb2F0MzJBcnJheXxudW1iZXJbXX0gYXJyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNldEFycmF5OiBmdW5jdGlvbihhcnIpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0gYXJyWzBdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSBhcnJbMV07XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBWZWN0b3IyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIodGhpcy54LCB0aGlzLnkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgeCwgeSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcm9zcyBwcm9kdWN0IG9mIHNlbGYgYW5kIGIsIHdyaXR0ZW4gdG8gYSBWZWN0b3IzIG91dFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBjcm9zczogZnVuY3Rpb24ob3V0LCBiKSB7XHJcbiAgICAgICAgdmVjMi5jcm9zcyhvdXQuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBkaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5kaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuZGlzdGFuY2UodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIGRpdmlkZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGRpdjogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuZGl2KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXZpZGUgc2VsZiBieSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgZGl2aWRlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5kaXZpZGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5kb3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2YgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIubGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIubGVuZ3RoKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIExpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbGVycDogZnVuY3Rpb24oYSwgYiwgdCkge1xyXG4gICAgICAgIHZlYzIubGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWluaW11bSBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbWluOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5taW4odGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1heGltdW0gb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIG1heDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIubWF4KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBtdWw6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXV0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOZWdhdGUgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBuZWdhdGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZlYzIubmVnYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWxpemUgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZlYzIubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSByYW5kb20geCwgeSBjb21wb25lbnRzIHdpdGggYSBnaXZlbiBzY2FsZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICByYW5kb206IGZ1bmN0aW9uKHNjYWxlKSB7XHJcbiAgICAgICAgdmVjMi5yYW5kb20odGhpcy5hcnJheSwgc2NhbGUpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24ocykge1xyXG4gICAgICAgIHZlYzIuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIGIgYW5kIGFkZCB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlQW5kQWRkOiBmdW5jdGlvbihiLCBzKSB7XHJcbiAgICAgICAgdmVjMi5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5zcXJEaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZERpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3F1YXJlZERpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkTGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3FyTGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3F1YXJlZExlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3Igc3VidHJhY3RcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzdWI6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLnN1Yih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgYiBmcm9tIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzdWJ0cmFjdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuc3VidHJhY3QodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgyIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQyOiBmdW5jdGlvbihtKSB7XHJcbiAgICAgICAgdmVjMi50cmFuc2Zvcm1NYXQyKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4MmQgbVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQyZDogZnVuY3Rpb24obSkge1xyXG4gICAgICAgIHZlYzIudHJhbnNmb3JtTWF0MmQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgbS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgzIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQzOiBmdW5jdGlvbihtKSB7XHJcbiAgICAgICAgdmVjMi50cmFuc2Zvcm1NYXQzKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4NCBtXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtTWF0NDogZnVuY3Rpb24obSkge1xyXG4gICAgICAgIHZlYzIudHJhbnNmb3JtTWF0NCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLy8gR2V0dGVyIGFuZCBTZXR0ZXJcclxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xyXG5cclxuICAgIHZhciBwcm90byA9IFZlY3RvcjIucHJvdG90eXBlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yMlxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzBdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVswXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yMlxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8vIFN1cHBseSBtZXRob2RzIHRoYXQgYXJlIG5vdCBpbiBwbGFjZVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5hZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5KSB7XHJcbiAgICB2ZWMyLnNldChvdXQuYXJyYXksIHgsIHkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGIpIHtcclxuICAgIHZlYzIuY29weShvdXQuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5jcm9zcyA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMi5jcm9zcyhvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLmRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5kaXN0YW5jZShhLmFycmF5LCBiLmFycmF5KTtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIuZGlzdGFuY2UgPSBWZWN0b3IyLmRpc3Q7XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuZGl2ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMyLmRpdmlkZShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5kaXZpZGUgPSBWZWN0b3IyLmRpdjtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMi5kb3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5kb3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIubGVuID0gZnVuY3Rpb24oYikge1xyXG4gICAgcmV0dXJuIHZlYzIubGVuZ3RoKGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLy8gVmVjdG9yMi5sZW5ndGggPSBWZWN0b3IyLmxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5sZXJwID0gZnVuY3Rpb24ob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2ZWMyLmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5taW4gPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIubWluKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMi5tYXgob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIubXVsdGlwbHkob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIubXVsdGlwbHkgPSBWZWN0b3IyLm11bDtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMi5uZWdhdGUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMi5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIucmFuZG9tID0gZnVuY3Rpb24ob3V0LCBzY2FsZSkge1xyXG4gICAgdmVjMi5yYW5kb20ob3V0LmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgc2NhbGUpIHtcclxuICAgIHZlYzIuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICB2ZWMyLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLnNxckRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5zcXJEaXN0KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMi5zcXVhcmVkRGlzdGFuY2UgPSBWZWN0b3IyLnNxckRpc3Q7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIuc3FyTGVuID0gZnVuY3Rpb24oYSkge1xyXG4gICAgcmV0dXJuIHZlYzIuc3FyTGVuKGEuYXJyYXkpO1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLnNxdWFyZWRMZW5ndGggPSBWZWN0b3IyLnNxckxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc3ViID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMyLnN1YnRyYWN0KG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLnN1YnRyYWN0ID0gVmVjdG9yMi5zdWI7XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MiA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQyKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9ICBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MmQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZlYzIudHJhbnNmb3JtTWF0MmQob3V0LmFycmF5LCBhLmFycmF5LCBtLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtNYXRyaXgzfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MyA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQzKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQ0KG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBWZWN0b3IyO1xyXG4iLCIvLyAyRCBCbGVuZCBjbGlwIG9mIGJsZW5kIHRyZWVcclxuLy8gaHR0cDovL2RvY3MudW5pdHkzZC5jb20vRG9jdW1lbnRhdGlvbi9NYW51YWwvMkRCbGVuZGluZy5odG1sXHJcbmltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcbmltcG9ydCBkZWxhdW5heSBmcm9tICcuLi91dGlsL2RlbGF1bmF5JztcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi4vbWF0aC9WZWN0b3IyJztcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmFuaW1hdGlvbi5CbGVuZDJEQ2xpcC5JQ2xpcElucHV0XHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5WZWN0b3IyfSBwb3NpdGlvblxyXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiAyZCBibGVuZGluZyBub2RlIGluIGFuaW1hdGlvbiBibGVuZCB0cmVlLlxyXG4gKiBvdXRwdXQgY2xpcCBtdXN0IGhhdmUgYmxlbmQyRCBtZXRob2RcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5CbGVuZDJEQ2xpcFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGlvXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cclxuICogQHBhcmFtIHtvYmplY3RbXX0gW29wdHMuaW5wdXRzXVxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yMn0gW29wdHMucG9zaXRpb25dXHJcbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gW29wdHMub3V0cHV0XVxyXG4gKi9cclxudmFyIEJsZW5kMkRDbGlwID0gZnVuY3Rpb24gKG9wdHMpIHtcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XHJcbiAgICAvKipcclxuICAgICAqIE91dHB1dCBjbGlwIG11c3QgaGF2ZSBibGVuZDJEIG1ldGhvZFxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkNsaXB9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3V0cHV0ID0gb3B0cy5vdXRwdXQgfHwgbnVsbDtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkJsZW5kMkRDbGlwLklDbGlwSW5wdXRbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5pbnB1dHMgPSBvcHRzLmlucHV0cyB8fCBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVUcmlhbmdsZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5fdHJpYW5nbGVzID0gW107XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlVHJpYW5nbGVzKCk7XHJcbn07XHJcblxyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUgPSBuZXcgQ2xpcCgpO1xyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZDJEQ2xpcDtcclxuLyoqXHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IyfSBwb3NpdGlvblxyXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGlucHV0Q2xpcFxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldF1cclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQmxlbmQyRENsaXAuSUNsaXBJbnB1dH1cclxuICovXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5hZGRJbnB1dCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgaW5wdXRDbGlwLCBvZmZzZXQpIHtcclxuICAgIHZhciBvYmogPSB7XHJcbiAgICAgICAgcG9zaXRpb24gOiBwb3NpdGlvbixcclxuICAgICAgICBjbGlwIDogaW5wdXRDbGlwLFxyXG4gICAgICAgIG9mZnNldCA6IG9mZnNldCB8fCAwXHJcbiAgICB9O1xyXG4gICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgdGhpcy5saWZlID0gTWF0aC5tYXgoaW5wdXRDbGlwLmxpZmUsIHRoaXMubGlmZSk7XHJcbiAgICAvLyBUT0RPIENoYW5nZSB0byBpbmNyZW1lbnRhbGx5IGFkZGluZ1xyXG4gICAgdGhpcy5fdXBkYXRlVHJpYW5nbGVzKCk7XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxufTtcclxuXHJcbi8vIERlbGF1bmF5IHRyaWFuZ3VsYXRlXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5fdXBkYXRlVHJpYW5nbGVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGlucHV0cyA9IHRoaXMuaW5wdXRzLm1hcChmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIHJldHVybiBhLnBvc2l0aW9uO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl90cmlhbmdsZXMgPSBkZWxhdW5heS50cmlhbmd1bGF0ZShpbnB1dHMsICdhcnJheScpO1xyXG59O1xyXG5cclxuQmxlbmQyRENsaXAucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAodGltZSwgZFRpbWUsIHNpbGVudCkge1xyXG5cclxuICAgIHZhciByZXQgPSBDbGlwLnByb3RvdHlwZS5zdGVwLmNhbGwodGhpcywgdGltZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcclxuICAgICAgICB0aGlzLnNldFRpbWUodGhpcy5nZXRFbGFwc2VkVGltZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXHJcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufTtcclxuXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIHZhciByZXMgPSB0aGlzLl9maW5kVHJpYW5nbGUodGhpcy5wb3NpdGlvbik7XHJcbiAgICBpZiAoIXJlcykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIEluIEJhcnljZW50cmljXHJcbiAgICB2YXIgYSA9IHJlc1sxXTsgLy8gUGVyY2VudCBvZiBjbGlwMlxyXG4gICAgdmFyIGIgPSByZXNbMl07IC8vIFBlcmNlbnQgb2YgY2xpcDNcclxuXHJcbiAgICB2YXIgdHJpID0gcmVzWzBdO1xyXG5cclxuICAgIHZhciBpbjEgPSB0aGlzLmlucHV0c1t0cmkuaW5kaWNlc1swXV07XHJcbiAgICB2YXIgaW4yID0gdGhpcy5pbnB1dHNbdHJpLmluZGljZXNbMV1dO1xyXG4gICAgdmFyIGluMyA9IHRoaXMuaW5wdXRzW3RyaS5pbmRpY2VzWzJdXTtcclxuICAgIHZhciBjbGlwMSA9IGluMS5jbGlwO1xyXG4gICAgdmFyIGNsaXAyID0gaW4yLmNsaXA7XHJcbiAgICB2YXIgY2xpcDMgPSBpbjMuY2xpcDtcclxuXHJcbiAgICBjbGlwMS5zZXRUaW1lKCh0aW1lICsgaW4xLm9mZnNldCkgJSBjbGlwMS5saWZlKTtcclxuICAgIGNsaXAyLnNldFRpbWUoKHRpbWUgKyBpbjIub2Zmc2V0KSAlIGNsaXAyLmxpZmUpO1xyXG4gICAgY2xpcDMuc2V0VGltZSgodGltZSArIGluMy5vZmZzZXQpICUgY2xpcDMubGlmZSk7XHJcblxyXG4gICAgdmFyIGMxID0gY2xpcDEub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAxLm91dHB1dCA6IGNsaXAxO1xyXG4gICAgdmFyIGMyID0gY2xpcDIub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAyLm91dHB1dCA6IGNsaXAyO1xyXG4gICAgdmFyIGMzID0gY2xpcDMub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAzLm91dHB1dCA6IGNsaXAzO1xyXG5cclxuICAgIHRoaXMub3V0cHV0LmJsZW5kMkQoYzEsIGMyLCBjMywgYSwgYik7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xvbmUgYSBuZXcgQmxlbmQyRCBjbGlwXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2xvbmVJbnB1dHMgVHJ1ZSBpZiBjbG9uZSB0aGUgaW5wdXQgY2xpcHNcclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQmxlbmQyRENsaXB9XHJcbiAqL1xyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoY2xvbmVJbnB1dHMpIHtcclxuICAgIHZhciBjbGlwID0gQ2xpcC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgIGNsaXAub3V0cHV0ID0gdGhpcy5vdXRwdXQuY2xvbmUoKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgaW5wdXRDbGlwID0gY2xvbmVJbnB1dHMgPyB0aGlzLmlucHV0c1tpXS5jbGlwLmNsb25lKHRydWUpIDogdGhpcy5pbnB1dHNbaV0uY2xpcDtcclxuICAgICAgICBjbGlwLmFkZElucHV0KHRoaXMuaW5wdXRzW2ldLnBvc2l0aW9uLCBpbnB1dENsaXAsIHRoaXMuaW5wdXRzW2ldLm9mZnNldCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xpcDtcclxufTtcclxuXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5fZmluZFRyaWFuZ2xlID0gZnVuY3Rpb24gKHBvc2l0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fY2FjaGVUcmlhbmdsZSkge1xyXG4gICAgICAgIHZhciByZXMgPSBkZWxhdW5heS5jb250YWlucyh0aGlzLl9jYWNoZVRyaWFuZ2xlLnZlcnRpY2VzLCBwb3NpdGlvbi5hcnJheSk7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuX2NhY2hlVHJpYW5nbGUsIHJlc1swXSwgcmVzWzFdXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RyaWFuZ2xlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciB0cmkgPSB0aGlzLl90cmlhbmdsZXNbaV07XHJcbiAgICAgICAgdmFyIHJlcyA9IGRlbGF1bmF5LmNvbnRhaW5zKHRyaS52ZXJ0aWNlcywgdGhpcy5wb3NpdGlvbi5hcnJheSk7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWNoZVRyaWFuZ2xlID0gdHJpO1xyXG4gICAgICAgICAgICByZXR1cm4gW3RyaSwgcmVzWzBdLCByZXNbMV1dO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJsZW5kMkRDbGlwOyIsIlxyXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTMsIEJyYW5kb24gSm9uZXMsIENvbGluIE1hY0tlbnppZSBJVi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuXHJcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXHJcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcclxuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcclxuICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxyXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxyXG4gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxyXG4gICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXHJcblxyXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcclxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcclxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxyXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxyXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcclxuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xyXG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cclxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcclxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcclxuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovXHJcblxyXG5pbXBvcnQgeyBHTE1BVF9SQU5ET00sIEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcblxyXG4vKipcclxuICogQGNsYXNzIDMgRGltZW5zaW9uYWwgVmVjdG9yXHJcbiAqIEBuYW1lIHZlYzNcclxuICovXHJcblxyXG52YXIgdmVjMyA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5IHZlYzNcclxuICpcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cclxudmVjMy5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgzKTtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cclxudmVjMy5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgzKTtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjM30gYSBuZXcgM0QgdmVjdG9yXHJcbiAqL1xyXG52ZWMzLmZyb21WYWx1ZXMgPSBmdW5jdGlvbih4LCB5LCB6KSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMyk7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIG91dFsyXSA9IHo7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWMzIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBzb3VyY2UgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzIHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHopIHtcclxuICAgIG91dFswXSA9IHg7XHJcbiAgICBvdXRbMV0gPSB5O1xyXG4gICAgb3V0WzJdID0gejtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXSArIGJbMl07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuc3VidHJhY3QgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuc3ViID0gdmVjMy5zdWJ0cmFjdDtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5tdWx0aXBseSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAqIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdICogYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gKiBiWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5tdWwgPSB2ZWMzLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmRpdmlkZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAvIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gLyBiWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuZGl2ID0gdmVjMy5kaXZpZGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1heGltdW0gb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gTWF0aC5tYXgoYVswXSwgYlswXSk7XHJcbiAgICBvdXRbMV0gPSBNYXRoLm1heChhWzFdLCBiWzFdKTtcclxuICAgIG91dFsyXSA9IE1hdGgubWF4KGFbMl0sIGJbMl0pO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMzIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYjtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiO1xyXG4gICAgb3V0WzJdID0gYVsyXSAqIGI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzMncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIG91dFswXSA9IGFbMF0gKyAoYlswXSAqIHNjYWxlKTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyAoYlsxXSAqIHNjYWxlKTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyAoYlsyXSAqIHNjYWxlKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXHJcbnZlYzMuZGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSArIHoqeik7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuZGlzdCA9IHZlYzMuZGlzdGFuY2U7XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMzLnNxdWFyZWREaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXHJcbiAgICAgICAgeSA9IGJbMV0gLSBhWzFdLFxyXG4gICAgICAgIHogPSBiWzJdIC0gYVsyXTtcclxuICAgIHJldHVybiB4KnggKyB5KnkgKyB6Kno7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWREaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMzLnNxckRpc3QgPSB2ZWMzLnNxdWFyZWREaXN0YW5jZTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKi9cclxudmVjMy5sZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdLFxyXG4gICAgICAgIHogPSBhWzJdO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCh4KnggKyB5KnkgKyB6KnopO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5sZW4gPSB2ZWMzLmxlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKi9cclxudmVjMy5zcXVhcmVkTGVuZ3RoID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHZhciB4ID0gYVswXSxcclxuICAgICAgICB5ID0gYVsxXSxcclxuICAgICAgICB6ID0gYVsyXTtcclxuICAgIHJldHVybiB4KnggKyB5KnkgKyB6Kno7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5zcXJMZW4gPSB2ZWMzLnNxdWFyZWRMZW5ndGg7XHJcblxyXG4vKipcclxuICogTmVnYXRlcyB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBuZWdhdGVcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5uZWdhdGUgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IC1hWzBdO1xyXG4gICAgb3V0WzFdID0gLWFbMV07XHJcbiAgICBvdXRbMl0gPSAtYVsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5pbnZlcnNlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcclxuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xyXG4gIG91dFsyXSA9IDEuMCAvIGFbMl07XHJcbiAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl07XHJcbiAgICB2YXIgbGVuID0geCp4ICsgeSp5ICsgeip6O1xyXG4gICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgICAvL1RPRE86IGV2YWx1YXRlIHVzZSBvZiBnbG1faW52c3FydCBoZXJlP1xyXG4gICAgICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcclxuICAgICAgICBvdXRbMF0gPSBhWzBdICogbGVuO1xyXG4gICAgICAgIG91dFsxXSA9IGFbMV0gKiBsZW47XHJcbiAgICAgICAgb3V0WzJdID0gYVsyXSAqIGxlbjtcclxuICAgIH1lbHNle1xyXG4gICAgICAgIG91dFswXSA9IDA7XHJcbiAgICAgICAgb3V0WzFdID0gMDtcclxuICAgICAgICBvdXRbMl0gPSAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXHJcbnZlYzMuZG90ID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdICsgYVsyXSAqIGJbMl07XHJcbn07XHJcblxyXG4vKipcclxuICogQ29tcHV0ZXMgdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmNyb3NzID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLCBheSA9IGFbMV0sIGF6ID0gYVsyXSxcclxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdO1xyXG5cclxuICAgIG91dFswXSA9IGF5ICogYnogLSBheiAqIGJ5O1xyXG4gICAgb3V0WzFdID0gYXogKiBieCAtIGF4ICogYno7XHJcbiAgICBvdXRbMl0gPSBheCAqIGJ5IC0gYXkgKiBieDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmxlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLFxyXG4gICAgICAgIGF5ID0gYVsxXSxcclxuICAgICAgICBheiA9IGFbMl07XHJcbiAgICBvdXRbMF0gPSBheCArIHQgKiAoYlswXSAtIGF4KTtcclxuICAgIG91dFsxXSA9IGF5ICsgdCAqIChiWzFdIC0gYXkpO1xyXG4gICAgb3V0WzJdID0gYXogKyB0ICogKGJbMl0gLSBheik7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMucmFuZG9tID0gZnVuY3Rpb24gKG91dCwgc2NhbGUpIHtcclxuICAgIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xyXG5cclxuICAgIHZhciByID0gR0xNQVRfUkFORE9NKCkgKiAyLjAgKiBNYXRoLlBJO1xyXG4gICAgdmFyIHogPSAoR0xNQVRfUkFORE9NKCkgKiAyLjApIC0gMS4wO1xyXG4gICAgdmFyIHpTY2FsZSA9IE1hdGguc3FydCgxLjAteip6KSAqIHNjYWxlO1xyXG5cclxuICAgIG91dFswXSA9IE1hdGguY29zKHIpICogelNjYWxlO1xyXG4gICAgb3V0WzFdID0gTWF0aC5zaW4ocikgKiB6U2NhbGU7XHJcbiAgICBvdXRbMl0gPSB6ICogc2NhbGU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDQuXHJcbiAqIDR0aCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XTtcclxuICAgIHcgPSB3IHx8IDEuMDtcclxuICAgIG91dFswXSA9IChtWzBdICogeCArIG1bNF0gKiB5ICsgbVs4XSAqIHogKyBtWzEyXSkgLyB3O1xyXG4gICAgb3V0WzFdID0gKG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzldICogeiArIG1bMTNdKSAvIHc7XHJcbiAgICBvdXRbMl0gPSAobVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdKSAvIHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gdGhlIDN4MyBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy50cmFuc2Zvcm1NYXQzID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sIHkgPSBhWzFdLCB6ID0gYVsyXTtcclxuICAgIG91dFswXSA9IHggKiBtWzBdICsgeSAqIG1bM10gKyB6ICogbVs2XTtcclxuICAgIG91dFsxXSA9IHggKiBtWzFdICsgeSAqIG1bNF0gKyB6ICogbVs3XTtcclxuICAgIG91dFsyXSA9IHggKiBtWzJdICsgeSAqIG1bNV0gKyB6ICogbVs4XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMyB3aXRoIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy50cmFuc2Zvcm1RdWF0ID0gZnVuY3Rpb24ob3V0LCBhLCBxKSB7XHJcbiAgICAvLyBiZW5jaG1hcmtzOiBodHRwOi8vanNwZXJmLmNvbS9xdWF0ZXJuaW9uLXRyYW5zZm9ybS12ZWMzLWltcGxlbWVudGF0aW9uc1xyXG5cclxuICAgIHZhciB4ID0gYVswXSwgeSA9IGFbMV0sIHogPSBhWzJdLFxyXG4gICAgICAgIHF4ID0gcVswXSwgcXkgPSBxWzFdLCBxeiA9IHFbMl0sIHF3ID0gcVszXSxcclxuXHJcbiAgICAgICAgLy8gY2FsY3VsYXRlIHF1YXQgKiB2ZWNcclxuICAgICAgICBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeSxcclxuICAgICAgICBpeSA9IHF3ICogeSArIHF6ICogeCAtIHF4ICogeixcclxuICAgICAgICBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeCxcclxuICAgICAgICBpdyA9IC1xeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7XHJcblxyXG4gICAgLy8gY2FsY3VsYXRlIHJlc3VsdCAqIGludmVyc2UgcXVhdFxyXG4gICAgb3V0WzBdID0gaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeTtcclxuICAgIG91dFsxXSA9IGl5ICogcXcgKyBpdyAqIC1xeSArIGl6ICogLXF4IC0gaXggKiAtcXo7XHJcbiAgICBvdXRbMl0gPSBpeiAqIHF3ICsgaXcgKiAtcXogKyBpeCAqIC1xeSAtIGl5ICogLXF4O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGUgYSAzRCB2ZWN0b3IgYXJvdW5kIHRoZSB4LWF4aXNcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgdmVjMyBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLnJvdGF0ZVggPSBmdW5jdGlvbihvdXQsIGEsIGIsIGMpe1xyXG4gICB2YXIgcCA9IFtdLCByPVtdO1xyXG4gICAgICAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXHJcbiAgICAgIHBbMF0gPSBhWzBdIC0gYlswXTtcclxuICAgICAgcFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcFsyXSA9IGFbMl0gLSBiWzJdO1xyXG5cclxuICAgICAgLy9wZXJmb3JtIHJvdGF0aW9uXHJcbiAgICAgIHJbMF0gPSBwWzBdO1xyXG4gICAgICByWzFdID0gcFsxXSpNYXRoLmNvcyhjKSAtIHBbMl0qTWF0aC5zaW4oYyk7XHJcbiAgICAgIHJbMl0gPSBwWzFdKk1hdGguc2luKGMpICsgcFsyXSpNYXRoLmNvcyhjKTtcclxuXHJcbiAgICAgIC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cclxuICAgICAgb3V0WzBdID0gclswXSArIGJbMF07XHJcbiAgICAgIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xyXG4gICAgICBvdXRbMl0gPSByWzJdICsgYlsyXTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHktYXhpc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCBUaGUgcmVjZWl2aW5nIHZlYzNcclxuICogQHBhcmFtIHt2ZWMzfSBhIFRoZSB2ZWMzIHBvaW50IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IGMgVGhlIGFuZ2xlIG9mIHJvdGF0aW9uXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMucm90YXRlWSA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgYyl7XHJcbiAgICB2YXIgcCA9IFtdLCByPVtdO1xyXG4gICAgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxyXG4gICAgcFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgcFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcFsyXSA9IGFbMl0gLSBiWzJdO1xyXG5cclxuICAgIC8vcGVyZm9ybSByb3RhdGlvblxyXG4gICAgclswXSA9IHBbMl0qTWF0aC5zaW4oYykgKyBwWzBdKk1hdGguY29zKGMpO1xyXG4gICAgclsxXSA9IHBbMV07XHJcbiAgICByWzJdID0gcFsyXSpNYXRoLmNvcyhjKSAtIHBbMF0qTWF0aC5zaW4oYyk7XHJcblxyXG4gICAgLy90cmFuc2xhdGUgdG8gY29ycmVjdCBwb3NpdGlvblxyXG4gICAgb3V0WzBdID0gclswXSArIGJbMF07XHJcbiAgICBvdXRbMV0gPSByWzFdICsgYlsxXTtcclxuICAgIG91dFsyXSA9IHJbMl0gKyBiWzJdO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlIGEgM0QgdmVjdG9yIGFyb3VuZCB0aGUgei1heGlzXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IFRoZSByZWNlaXZpbmcgdmVjM1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7dmVjM30gYiBUaGUgb3JpZ2luIG9mIHRoZSByb3RhdGlvblxyXG4gKiBAcGFyYW0ge051bWJlcn0gYyBUaGUgYW5nbGUgb2Ygcm90YXRpb25cclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5yb3RhdGVaID0gZnVuY3Rpb24ob3V0LCBhLCBiLCBjKXtcclxuICAgIHZhciBwID0gW10sIHI9W107XHJcbiAgICAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXHJcbiAgICBwWzBdID0gYVswXSAtIGJbMF07XHJcbiAgICBwWzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBwWzJdID0gYVsyXSAtIGJbMl07XHJcblxyXG4gICAgLy9wZXJmb3JtIHJvdGF0aW9uXHJcbiAgICByWzBdID0gcFswXSpNYXRoLmNvcyhjKSAtIHBbMV0qTWF0aC5zaW4oYyk7XHJcbiAgICByWzFdID0gcFswXSpNYXRoLnNpbihjKSArIHBbMV0qTWF0aC5jb3MoYyk7XHJcbiAgICByWzJdID0gcFsyXTtcclxuXHJcbiAgICAvL3RyYW5zbGF0ZSB0byBjb3JyZWN0IHBvc2l0aW9uXHJcbiAgICBvdXRbMF0gPSByWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xyXG4gICAgb3V0WzJdID0gclsyXSArIGJbMl07XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQZXJmb3JtIHNvbWUgb3BlcmF0aW9uIG92ZXIgYW4gYXJyYXkgb2YgdmVjM3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGEgdGhlIGFycmF5IG9mIHZlY3RvcnMgdG8gaXRlcmF0ZSBvdmVyXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdHJpZGUgTnVtYmVyIG9mIGVsZW1lbnRzIGJldHdlZW4gdGhlIHN0YXJ0IG9mIGVhY2ggdmVjMy4gSWYgMCBhc3N1bWVzIHRpZ2h0bHkgcGFja2VkXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNraXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50IE51bWJlciBvZiB2ZWMzcyB0byBpdGVyYXRlIG92ZXIuIElmIDAgaXRlcmF0ZXMgb3ZlciBlbnRpcmUgYXJyYXlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gRnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCB2ZWN0b3IgaW4gdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXJnXSBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gZm5cclxuICogQHJldHVybnMge0FycmF5fSBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5mb3JFYWNoID0gKGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIHZlYyA9IHZlYzMuY3JlYXRlKCk7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGEsIHN0cmlkZSwgb2Zmc2V0LCBjb3VudCwgZm4sIGFyZykge1xyXG4gICAgICAgIHZhciBpLCBsO1xyXG4gICAgICAgIGlmKCFzdHJpZGUpIHtcclxuICAgICAgICAgICAgc3RyaWRlID0gMztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCFvZmZzZXQpIHtcclxuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGNvdW50KSB7XHJcbiAgICAgICAgICAgIGwgPSBNYXRoLm1pbigoY291bnQgKiBzdHJpZGUpICsgb2Zmc2V0LCBhLmxlbmd0aCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbCA9IGEubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKGkgPSBvZmZzZXQ7IGkgPCBsOyBpICs9IHN0cmlkZSkge1xyXG4gICAgICAgICAgICB2ZWNbMF0gPSBhW2ldOyB2ZWNbMV0gPSBhW2krMV07IHZlY1syXSA9IGFbaSsyXTtcclxuICAgICAgICAgICAgZm4odmVjLCB2ZWMsIGFyZyk7XHJcbiAgICAgICAgICAgIGFbaV0gPSB2ZWNbMF07IGFbaSsxXSA9IHZlY1sxXTsgYVtpKzJdID0gdmVjWzJdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgYW5nbGUgYmV0d2VlbiB0d28gM0QgdmVjdG9yc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYW5nbGUgaW4gcmFkaWFuc1xyXG4gKi9cclxudmVjMy5hbmdsZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuXHJcbiAgICB2YXIgdGVtcEEgPSB2ZWMzLmZyb21WYWx1ZXMoYVswXSwgYVsxXSwgYVsyXSk7XHJcbiAgICB2YXIgdGVtcEIgPSB2ZWMzLmZyb21WYWx1ZXMoYlswXSwgYlsxXSwgYlsyXSk7XHJcblxyXG4gICAgdmVjMy5ub3JtYWxpemUodGVtcEEsIHRlbXBBKTtcclxuICAgIHZlYzMubm9ybWFsaXplKHRlbXBCLCB0ZW1wQik7XHJcblxyXG4gICAgdmFyIGNvc2luZSA9IHZlYzMuZG90KHRlbXBBLCB0ZW1wQik7XHJcblxyXG4gICAgaWYoY29zaW5lID4gMS4wKXtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguYWNvcyhjb3NpbmUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjMzsiLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfUkFORE9NLCBHTE1BVF9BUlJBWV9UWVBFIH0gZnJvbSAnLi9jb21tb24nO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyA0IERpbWVuc2lvbmFsIFZlY3RvclxyXG4gKiBAbmFtZSB2ZWM0XHJcbiAqL1xyXG5cclxuZXhwb3J0IHZhciB2ZWM0ID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjNFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjNH0gYSBuZXcgNEQgdmVjdG9yXHJcbiAqL1xyXG52ZWM0LmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xyXG4gICAgb3V0WzBdID0gMDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWM0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cclxudmVjNC5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIG91dFszXSA9IGFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjNCBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cclxudmVjNC5mcm9tVmFsdWVzID0gZnVuY3Rpb24oeCwgeSwgeiwgdykge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xyXG4gICAgb3V0WzBdID0geDtcclxuICAgIG91dFsxXSA9IHk7XHJcbiAgICBvdXRbMl0gPSB6O1xyXG4gICAgb3V0WzNdID0gdztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHosIHcpIHtcclxuICAgIG91dFswXSA9IHg7XHJcbiAgICBvdXRbMV0gPSB5O1xyXG4gICAgb3V0WzJdID0gejtcclxuICAgIG91dFszXSA9IHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0LmFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSArIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXSArIGJbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQuc3VidHJhY3QgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcclxuICAgIG91dFszXSA9IGFbM10gLSBiWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjNC5zdWIgPSB2ZWM0LnN1YnRyYWN0O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0Lm11bHRpcGx5ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXSAqIGJbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdICogYlszXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQubXVsID0gdmVjNC5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBEaXZpZGVzIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5kaXZpZGUgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLyBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAvIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC8gYlsyXTtcclxuICAgIG91dFszXSA9IGFbM10gLyBiWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQuZGl2ID0gdmVjNC5kaXZpZGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XHJcbiAgICBvdXRbM10gPSBNYXRoLm1pbihhWzNdLCBiWzNdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5tYXgoYVsyXSwgYlsyXSk7XHJcbiAgICBvdXRbM10gPSBNYXRoLm1heChhWzNdLCBiWzNdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2NhbGVzIGEgdmVjNCBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAqIGI7XHJcbiAgICBvdXRbMV0gPSBhWzFdICogYjtcclxuICAgIG91dFsyXSA9IGFbMl0gKiBiO1xyXG4gICAgb3V0WzNdID0gYVszXSAqIGI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIG91dFswXSA9IGFbMF0gKyAoYlswXSAqIHNjYWxlKTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyAoYlsxXSAqIHNjYWxlKTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyAoYlsyXSAqIHNjYWxlKTtcclxuICAgIG91dFszXSA9IGFbM10gKyAoYlszXSAqIHNjYWxlKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXHJcbnZlYzQuZGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl0sXHJcbiAgICAgICAgdyA9IGJbM10gLSBhWzNdO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCh4KnggKyB5KnkgKyB6KnogKyB3KncpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5kaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmRpc3QgPSB2ZWM0LmRpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cclxudmVjNC5zcXVhcmVkRGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl0sXHJcbiAgICAgICAgdyA9IGJbM10gLSBhWzNdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeSArIHoqeiArIHcqdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQuc3FyRGlzdCA9IHZlYzQuc3F1YXJlZERpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWM0Lmxlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IGFbM107XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSArIHoqeiArIHcqdyk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0Lmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmxlbiA9IHZlYzQubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWM0LnNxdWFyZWRMZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdLFxyXG4gICAgICAgIHogPSBhWzJdLFxyXG4gICAgICAgIHcgPSBhWzNdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeSArIHoqeiArIHcqdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LnNxckxlbiA9IHZlYzQuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0Lm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gLWFbMF07XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIG91dFsyXSA9IC1hWzJdO1xyXG4gICAgb3V0WzNdID0gLWFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGludmVyc2Ugb2YgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gaW52ZXJ0XHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQuaW52ZXJzZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gIG91dFswXSA9IDEuMCAvIGFbMF07XHJcbiAgb3V0WzFdID0gMS4wIC8gYVsxXTtcclxuICBvdXRbMl0gPSAxLjAgLyBhWzJdO1xyXG4gIG91dFszXSA9IDEuMCAvIGFbM107XHJcbiAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IGFbM107XHJcbiAgICB2YXIgbGVuID0geCp4ICsgeSp5ICsgeip6ICsgdyp3O1xyXG4gICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgICAgb3V0WzBdID0gYVswXSAqIGxlbjtcclxuICAgICAgICBvdXRbMV0gPSBhWzFdICogbGVuO1xyXG4gICAgICAgIG91dFsyXSA9IGFbMl0gKiBsZW47XHJcbiAgICAgICAgb3V0WzNdID0gYVszXSAqIGxlbjtcclxuICAgIH1cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqL1xyXG52ZWM0LmRvdCA9IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICByZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdICsgYVszXSAqIGJbM107XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0LmxlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLFxyXG4gICAgICAgIGF5ID0gYVsxXSxcclxuICAgICAgICBheiA9IGFbMl0sXHJcbiAgICAgICAgYXcgPSBhWzNdO1xyXG4gICAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XHJcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcclxuICAgIG91dFsyXSA9IGF6ICsgdCAqIChiWzJdIC0gYXopO1xyXG4gICAgb3V0WzNdID0gYXcgKyB0ICogKGJbM10gLSBhdyk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQucmFuZG9tID0gZnVuY3Rpb24gKG91dCwgc2NhbGUpIHtcclxuICAgIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xyXG5cclxuICAgIC8vVE9ETzogVGhpcyBpcyBhIHByZXR0eSBhd2Z1bCB3YXkgb2YgZG9pbmcgdGhpcy4gRmluZCBzb21ldGhpbmcgYmV0dGVyLlxyXG4gICAgb3V0WzBdID0gR0xNQVRfUkFORE9NKCk7XHJcbiAgICBvdXRbMV0gPSBHTE1BVF9SQU5ET00oKTtcclxuICAgIG91dFsyXSA9IEdMTUFUX1JBTkRPTSgpO1xyXG4gICAgb3V0WzNdID0gR0xNQVRfUkFORE9NKCk7XHJcbiAgICB2ZWM0Lm5vcm1hbGl6ZShvdXQsIG91dCk7XHJcbiAgICB2ZWM0LnNjYWxlKG91dCwgb3V0LCBzY2FsZSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIG1hdDQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sIHcgPSBhWzNdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzRdICogeSArIG1bOF0gKiB6ICsgbVsxMl0gKiB3O1xyXG4gICAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzVdICogeSArIG1bOV0gKiB6ICsgbVsxM10gKiB3O1xyXG4gICAgb3V0WzJdID0gbVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdICogdztcclxuICAgIG91dFszXSA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XSAqIHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBxdWF0ZXJuaW9uIHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQudHJhbnNmb3JtUXVhdCA9IGZ1bmN0aW9uKG91dCwgYSwgcSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sXHJcbiAgICAgICAgcXggPSBxWzBdLCBxeSA9IHFbMV0sIHF6ID0gcVsyXSwgcXcgPSBxWzNdLFxyXG5cclxuICAgICAgICAvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY1xyXG4gICAgICAgIGl4ID0gcXcgKiB4ICsgcXkgKiB6IC0gcXogKiB5LFxyXG4gICAgICAgIGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6LFxyXG4gICAgICAgIGl6ID0gcXcgKiB6ICsgcXggKiB5IC0gcXkgKiB4LFxyXG4gICAgICAgIGl3ID0gLXF4ICogeCAtIHF5ICogeSAtIHF6ICogejtcclxuXHJcbiAgICAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XHJcbiAgICBvdXRbMF0gPSBpeCAqIHF3ICsgaXcgKiAtcXggKyBpeSAqIC1xeiAtIGl6ICogLXF5O1xyXG4gICAgb3V0WzFdID0gaXkgKiBxdyArIGl3ICogLXF5ICsgaXogKiAtcXggLSBpeCAqIC1xejtcclxuICAgIG91dFsyXSA9IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXg7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWM0cy5cclxuICpcclxuICogQHBhcmFtIHtBcnJheX0gYSB0aGUgYXJyYXkgb2YgdmVjdG9ycyB0byBpdGVyYXRlIG92ZXJcclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWM0LiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcclxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnQgTnVtYmVyIG9mIHZlYzRzIHRvIGl0ZXJhdGUgb3Zlci4gSWYgMCBpdGVyYXRlcyBvdmVyIGVudGlyZSBhcnJheVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxyXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmZvckVhY2ggPSAoZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgdmVjID0gdmVjNC5jcmVhdGUoKTtcclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24oYSwgc3RyaWRlLCBvZmZzZXQsIGNvdW50LCBmbiwgYXJnKSB7XHJcbiAgICAgICAgdmFyIGksIGw7XHJcbiAgICAgICAgaWYoIXN0cmlkZSkge1xyXG4gICAgICAgICAgICBzdHJpZGUgPSA0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIW9mZnNldCkge1xyXG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoY291bnQpIHtcclxuICAgICAgICAgICAgbCA9IE1hdGgubWluKChjb3VudCAqIHN0cmlkZSkgKyBvZmZzZXQsIGEubGVuZ3RoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsID0gYS5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7XHJcbiAgICAgICAgICAgIHZlY1swXSA9IGFbaV07IHZlY1sxXSA9IGFbaSsxXTsgdmVjWzJdID0gYVtpKzJdOyB2ZWNbM10gPSBhW2krM107XHJcbiAgICAgICAgICAgIGZuKHZlYywgdmVjLCBhcmcpO1xyXG4gICAgICAgICAgICBhW2ldID0gdmVjWzBdOyBhW2krMV0gPSB2ZWNbMV07IGFbaSsyXSA9IHZlY1syXTsgYVtpKzNdID0gdmVjWzNdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjNDsiLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgM3gzIE1hdHJpeFxyXG4gKiBAbmFtZSBtYXQzXHJcbiAqL1xyXG5cclxudmFyIG1hdDMgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDNcclxuICpcclxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcclxuICovXHJcbm1hdDMuY3JlYXRlID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoOSk7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMTtcclxuICAgIG91dFs1XSA9IDA7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcGllcyB0aGUgdXBwZXItbGVmdCAzeDMgdmFsdWVzIGludG8gdGhlIGdpdmVuIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgM3gzIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgICB0aGUgc291cmNlIDR4NCBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5mcm9tTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVs0XTtcclxuICAgIG91dFs0XSA9IGFbNV07XHJcbiAgICBvdXRbNV0gPSBhWzZdO1xyXG4gICAgb3V0WzZdID0gYVs4XTtcclxuICAgIG91dFs3XSA9IGFbOV07XHJcbiAgICBvdXRbOF0gPSBhWzEwXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcclxuICovXHJcbm1hdDMuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoOSk7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQzIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICBvdXRbNV0gPSBhWzVdO1xyXG4gICAgb3V0WzZdID0gYVs2XTtcclxuICAgIG91dFs3XSA9IGFbN107XHJcbiAgICBvdXRbOF0gPSBhWzhdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgYSBtYXQzIHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDE7XHJcbiAgICBvdXRbNV0gPSAwO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXHJcbiAgICBpZiAob3V0ID09PSBhKSB7XHJcbiAgICAgICAgdmFyIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGExMiA9IGFbNV07XHJcbiAgICAgICAgb3V0WzFdID0gYVszXTtcclxuICAgICAgICBvdXRbMl0gPSBhWzZdO1xyXG4gICAgICAgIG91dFszXSA9IGEwMTtcclxuICAgICAgICBvdXRbNV0gPSBhWzddO1xyXG4gICAgICAgIG91dFs2XSA9IGEwMjtcclxuICAgICAgICBvdXRbN10gPSBhMTI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG91dFswXSA9IGFbMF07XHJcbiAgICAgICAgb3V0WzFdID0gYVszXTtcclxuICAgICAgICBvdXRbMl0gPSBhWzZdO1xyXG4gICAgICAgIG91dFszXSA9IGFbMV07XHJcbiAgICAgICAgb3V0WzRdID0gYVs0XTtcclxuICAgICAgICBvdXRbNV0gPSBhWzddO1xyXG4gICAgICAgIG91dFs2XSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzddID0gYVs1XTtcclxuICAgICAgICBvdXRbOF0gPSBhWzhdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF0sXHJcblxyXG4gICAgICAgIGIwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMSxcclxuICAgICAgICBiMTEgPSAtYTIyICogYTEwICsgYTEyICogYTIwLFxyXG4gICAgICAgIGIyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMCxcclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxyXG4gICAgICAgIGRldCA9IGEwMCAqIGIwMSArIGEwMSAqIGIxMSArIGEwMiAqIGIyMTtcclxuXHJcbiAgICBpZiAoIWRldCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuICAgIG91dFswXSA9IGIwMSAqIGRldDtcclxuICAgIG91dFsxXSA9ICgtYTIyICogYTAxICsgYTAyICogYTIxKSAqIGRldDtcclxuICAgIG91dFsyXSA9IChhMTIgKiBhMDEgLSBhMDIgKiBhMTEpICogZGV0O1xyXG4gICAgb3V0WzNdID0gYjExICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGEyMiAqIGEwMCAtIGEwMiAqIGEyMCkgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoLWExMiAqIGEwMCArIGEwMiAqIGExMCkgKiBkZXQ7XHJcbiAgICBvdXRbNl0gPSBiMjEgKiBkZXQ7XHJcbiAgICBvdXRbN10gPSAoLWEyMSAqIGEwMCArIGEwMSAqIGEyMCkgKiBkZXQ7XHJcbiAgICBvdXRbOF0gPSAoYTExICogYTAwIC0gYTAxICogYTEwKSAqIGRldDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYWRqdWdhdGUgb2YgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xyXG5tYXQzLmFkam9pbnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XTtcclxuXHJcbiAgICBvdXRbMF0gPSAoYTExICogYTIyIC0gYTEyICogYTIxKTtcclxuICAgIG91dFsxXSA9IChhMDIgKiBhMjEgLSBhMDEgKiBhMjIpO1xyXG4gICAgb3V0WzJdID0gKGEwMSAqIGExMiAtIGEwMiAqIGExMSk7XHJcbiAgICBvdXRbM10gPSAoYTEyICogYTIwIC0gYTEwICogYTIyKTtcclxuICAgIG91dFs0XSA9IChhMDAgKiBhMjIgLSBhMDIgKiBhMjApO1xyXG4gICAgb3V0WzVdID0gKGEwMiAqIGExMCAtIGEwMCAqIGExMik7XHJcbiAgICBvdXRbNl0gPSAoYTEwICogYTIxIC0gYTExICogYTIwKTtcclxuICAgIG91dFs3XSA9IChhMDEgKiBhMjAgLSBhMDAgKiBhMjEpO1xyXG4gICAgb3V0WzhdID0gKGEwMCAqIGExMSAtIGEwMSAqIGExMCk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cclxubWF0My5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF07XHJcblxyXG4gICAgcmV0dXJuIGEwMCAqIChhMjIgKiBhMTEgLSBhMTIgKiBhMjEpICsgYTAxICogKC1hMjIgKiBhMTAgKyBhMTIgKiBhMjApICsgYTAyICogKGEyMSAqIGExMCAtIGExMSAqIGEyMCk7XHJcbn07XHJcblxyXG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0MydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMubXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF0sXHJcblxyXG4gICAgICAgIGIwMCA9IGJbMF0sIGIwMSA9IGJbMV0sIGIwMiA9IGJbMl0sXHJcbiAgICAgICAgYjEwID0gYlszXSwgYjExID0gYls0XSwgYjEyID0gYls1XSxcclxuICAgICAgICBiMjAgPSBiWzZdLCBiMjEgPSBiWzddLCBiMjIgPSBiWzhdO1xyXG5cclxuICAgIG91dFswXSA9IGIwMCAqIGEwMCArIGIwMSAqIGExMCArIGIwMiAqIGEyMDtcclxuICAgIG91dFsxXSA9IGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMTtcclxuICAgIG91dFsyXSA9IGIwMCAqIGEwMiArIGIwMSAqIGExMiArIGIwMiAqIGEyMjtcclxuXHJcbiAgICBvdXRbM10gPSBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjA7XHJcbiAgICBvdXRbNF0gPSBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjE7XHJcbiAgICBvdXRbNV0gPSBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjI7XHJcblxyXG4gICAgb3V0WzZdID0gYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwO1xyXG4gICAgb3V0WzddID0gYjIwICogYTAxICsgYjIxICogYTExICsgYjIyICogYTIxO1xyXG4gICAgb3V0WzhdID0gYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDMubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxubWF0My5tdWwgPSBtYXQzLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zbGF0ZSBhIG1hdDMgYnkgdGhlIGdpdmVuIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My50cmFuc2xhdGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcclxuICAgICAgICB4ID0gdlswXSwgeSA9IHZbMV07XHJcblxyXG4gICAgb3V0WzBdID0gYTAwO1xyXG4gICAgb3V0WzFdID0gYTAxO1xyXG4gICAgb3V0WzJdID0gYTAyO1xyXG5cclxuICAgIG91dFszXSA9IGExMDtcclxuICAgIG91dFs0XSA9IGExMTtcclxuICAgIG91dFs1XSA9IGExMjtcclxuXHJcbiAgICBvdXRbNl0gPSB4ICogYTAwICsgeSAqIGExMCArIGEyMDtcclxuICAgIG91dFs3XSA9IHggKiBhMDEgKyB5ICogYTExICsgYTIxO1xyXG4gICAgb3V0WzhdID0geCAqIGEwMiArIHkgKiBhMTIgKyBhMjI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXQzIGJ5IHRoZSBnaXZlbiBhbmdsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5yb3RhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcclxuXHJcbiAgICAgICAgcyA9IE1hdGguc2luKHJhZCksXHJcbiAgICAgICAgYyA9IE1hdGguY29zKHJhZCk7XHJcblxyXG4gICAgb3V0WzBdID0gYyAqIGEwMCArIHMgKiBhMTA7XHJcbiAgICBvdXRbMV0gPSBjICogYTAxICsgcyAqIGExMTtcclxuICAgIG91dFsyXSA9IGMgKiBhMDIgKyBzICogYTEyO1xyXG5cclxuICAgIG91dFszXSA9IGMgKiBhMTAgLSBzICogYTAwO1xyXG4gICAgb3V0WzRdID0gYyAqIGExMSAtIHMgKiBhMDE7XHJcbiAgICBvdXRbNV0gPSBjICogYTEyIC0gcyAqIGEwMjtcclxuXHJcbiAgICBvdXRbNl0gPSBhMjA7XHJcbiAgICBvdXRbN10gPSBhMjE7XHJcbiAgICBvdXRbOF0gPSBhMjI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MyBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKiovXHJcbm1hdDMuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciB4ID0gdlswXSwgeSA9IHZbMV07XHJcblxyXG4gICAgb3V0WzBdID0geCAqIGFbMF07XHJcbiAgICBvdXRbMV0gPSB4ICogYVsxXTtcclxuICAgIG91dFsyXSA9IHggKiBhWzJdO1xyXG5cclxuICAgIG91dFszXSA9IHkgKiBhWzNdO1xyXG4gICAgb3V0WzRdID0geSAqIGFbNF07XHJcbiAgICBvdXRbNV0gPSB5ICogYVs1XTtcclxuXHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcGllcyB0aGUgdmFsdWVzIGZyb20gYSBtYXQyZCBpbnRvIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gY29weVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqKi9cclxubWF0My5mcm9tTWF0MmQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gMDtcclxuXHJcbiAgICBvdXRbM10gPSBhWzJdO1xyXG4gICAgb3V0WzRdID0gYVszXTtcclxuICAgIG91dFs1XSA9IDA7XHJcblxyXG4gICAgb3V0WzZdID0gYVs0XTtcclxuICAgIG91dFs3XSA9IGFbNV07XHJcbiAgICBvdXRbOF0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4qIENhbGN1bGF0ZXMgYSAzeDMgbWF0cml4IGZyb20gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuKlxyXG4qIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuKiBAcGFyYW0ge3F1YXR9IHEgUXVhdGVybmlvbiB0byBjcmVhdGUgbWF0cml4IGZyb21cclxuKlxyXG4qIEByZXR1cm5zIHttYXQzfSBvdXRcclxuKi9cclxubWF0My5mcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEpIHtcclxuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXSxcclxuICAgICAgICB4MiA9IHggKyB4LFxyXG4gICAgICAgIHkyID0geSArIHksXHJcbiAgICAgICAgejIgPSB6ICsgeixcclxuXHJcbiAgICAgICAgeHggPSB4ICogeDIsXHJcbiAgICAgICAgeXggPSB5ICogeDIsXHJcbiAgICAgICAgeXkgPSB5ICogeTIsXHJcbiAgICAgICAgenggPSB6ICogeDIsXHJcbiAgICAgICAgenkgPSB6ICogeTIsXHJcbiAgICAgICAgenogPSB6ICogejIsXHJcbiAgICAgICAgd3ggPSB3ICogeDIsXHJcbiAgICAgICAgd3kgPSB3ICogeTIsXHJcbiAgICAgICAgd3ogPSB3ICogejI7XHJcblxyXG4gICAgb3V0WzBdID0gMSAtIHl5IC0geno7XHJcbiAgICBvdXRbM10gPSB5eCAtIHd6O1xyXG4gICAgb3V0WzZdID0genggKyB3eTtcclxuXHJcbiAgICBvdXRbMV0gPSB5eCArIHd6O1xyXG4gICAgb3V0WzRdID0gMSAtIHh4IC0geno7XHJcbiAgICBvdXRbN10gPSB6eSAtIHd4O1xyXG5cclxuICAgIG91dFsyXSA9IHp4IC0gd3k7XHJcbiAgICBvdXRbNV0gPSB6eSArIHd4O1xyXG4gICAgb3V0WzhdID0gMSAtIHh4IC0geXk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4qIENhbGN1bGF0ZXMgYSAzeDMgbm9ybWFsIG1hdHJpeCAodHJhbnNwb3NlIGludmVyc2UpIGZyb20gdGhlIDR4NCBtYXRyaXhcclxuKlxyXG4qIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuKiBAcGFyYW0ge21hdDR9IGEgTWF0NCB0byBkZXJpdmUgdGhlIG5vcm1hbCBtYXRyaXggZnJvbVxyXG4qXHJcbiogQHJldHVybnMge21hdDN9IG91dFxyXG4qL1xyXG5tYXQzLm5vcm1hbEZyb21NYXQ0ID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM10sXHJcbiAgICAgICAgYTEwID0gYVs0XSwgYTExID0gYVs1XSwgYTEyID0gYVs2XSwgYTEzID0gYVs3XSxcclxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSwgYTIzID0gYVsxMV0sXHJcbiAgICAgICAgYTMwID0gYVsxMl0sIGEzMSA9IGFbMTNdLCBhMzIgPSBhWzE0XSwgYTMzID0gYVsxNV0sXHJcblxyXG4gICAgICAgIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMCxcclxuICAgICAgICBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTAsXHJcbiAgICAgICAgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwLFxyXG4gICAgICAgIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMSxcclxuICAgICAgICBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTEsXHJcbiAgICAgICAgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyLFxyXG4gICAgICAgIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMCxcclxuICAgICAgICBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzAsXHJcbiAgICAgICAgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwLFxyXG4gICAgICAgIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMSxcclxuICAgICAgICBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzEsXHJcbiAgICAgICAgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyLFxyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XHJcbiAgICAgICAgZGV0ID0gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xyXG5cclxuICAgIGlmICghZGV0KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBkZXQgPSAxLjAgLyBkZXQ7XHJcblxyXG4gICAgb3V0WzBdID0gKGExMSAqIGIxMSAtIGExMiAqIGIxMCArIGExMyAqIGIwOSkgKiBkZXQ7XHJcbiAgICBvdXRbMV0gPSAoYTEyICogYjA4IC0gYTEwICogYjExIC0gYTEzICogYjA3KSAqIGRldDtcclxuICAgIG91dFsyXSA9IChhMTAgKiBiMTAgLSBhMTEgKiBiMDggKyBhMTMgKiBiMDYpICogZGV0O1xyXG5cclxuICAgIG91dFszXSA9IChhMDIgKiBiMTAgLSBhMDEgKiBiMTEgLSBhMDMgKiBiMDkpICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGEwMCAqIGIxMSAtIGEwMiAqIGIwOCArIGEwMyAqIGIwNykgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcclxuXHJcbiAgICBvdXRbNl0gPSAoYTMxICogYjA1IC0gYTMyICogYjA0ICsgYTMzICogYjAzKSAqIGRldDtcclxuICAgIG91dFs3XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xyXG4gICAgb3V0WzhdID0gKGEzMCAqIGIwNCAtIGEzMSAqIGIwMiArIGEzMyAqIGIwMCkgKiBkZXQ7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXHJcbm1hdDMuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpICsgTWF0aC5wb3coYVs0XSwgMikgKyBNYXRoLnBvdyhhWzVdLCAyKSArIE1hdGgucG93KGFbNl0sIDIpICsgTWF0aC5wb3coYVs3XSwgMikgKyBNYXRoLnBvdyhhWzhdLCAyKSkpXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbWF0MzsiLCJcclxuXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB7IEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vdmVjMyc7XHJcbmltcG9ydCB2ZWM0IGZyb20gJy4vdmVjNCc7XHJcbmltcG9ydCBtYXQzIGZyb20gJy4vbWF0Myc7XHJcblxyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyBRdWF0ZXJuaW9uXHJcbiAqIEBuYW1lIHF1YXRcclxuICovXHJcblxyXG52YXIgcXVhdCA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgcXVhdFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gYSBuZXcgcXVhdGVybmlvblxyXG4gKi9cclxucXVhdC5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldHMgYSBxdWF0ZXJuaW9uIHRvIHJlcHJlc2VudCB0aGUgc2hvcnRlc3Qgcm90YXRpb24gZnJvbSBvbmVcclxuICogdmVjdG9yIHRvIGFub3RoZXIuXHJcbiAqXHJcbiAqIEJvdGggdmVjdG9ycyBhcmUgYXNzdW1lZCB0byBiZSB1bml0IGxlbmd0aC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uLlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGluaXRpYWwgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgZGVzdGluYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQucm90YXRpb25UbyA9IChmdW5jdGlvbigpIHtcclxuICAgIHZhciB0bXB2ZWMzID0gdmVjMy5jcmVhdGUoKTtcclxuICAgIHZhciB4VW5pdFZlYzMgPSB2ZWMzLmZyb21WYWx1ZXMoMSwwLDApO1xyXG4gICAgdmFyIHlVbml0VmVjMyA9IHZlYzMuZnJvbVZhbHVlcygwLDEsMCk7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgICAgIHZhciBkb3QgPSB2ZWMzLmRvdChhLCBiKTtcclxuICAgICAgICBpZiAoZG90IDwgLTAuOTk5OTk5KSB7XHJcbiAgICAgICAgICAgIHZlYzMuY3Jvc3ModG1wdmVjMywgeFVuaXRWZWMzLCBhKTtcclxuICAgICAgICAgICAgaWYgKHZlYzMubGVuZ3RoKHRtcHZlYzMpIDwgMC4wMDAwMDEpXHJcbiAgICAgICAgICAgICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIHlVbml0VmVjMywgYSk7XHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHRtcHZlYzMsIHRtcHZlYzMpO1xyXG4gICAgICAgICAgICBxdWF0LnNldEF4aXNBbmdsZShvdXQsIHRtcHZlYzMsIE1hdGguUEkpO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZG90ID4gMC45OTk5OTkpIHtcclxuICAgICAgICAgICAgb3V0WzBdID0gMDtcclxuICAgICAgICAgICAgb3V0WzFdID0gMDtcclxuICAgICAgICAgICAgb3V0WzJdID0gMDtcclxuICAgICAgICAgICAgb3V0WzNdID0gMTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIGEsIGIpO1xyXG4gICAgICAgICAgICBvdXRbMF0gPSB0bXB2ZWMzWzBdO1xyXG4gICAgICAgICAgICBvdXRbMV0gPSB0bXB2ZWMzWzFdO1xyXG4gICAgICAgICAgICBvdXRbMl0gPSB0bXB2ZWMzWzJdO1xyXG4gICAgICAgICAgICBvdXRbM10gPSAxICsgZG90O1xyXG4gICAgICAgICAgICByZXR1cm4gcXVhdC5ub3JtYWxpemUob3V0LCBvdXQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pKCk7XHJcblxyXG4vKipcclxuICogU2V0cyB0aGUgc3BlY2lmaWVkIHF1YXRlcm5pb24gd2l0aCB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW5cclxuICogYXhlcy4gRWFjaCBheGlzIGlzIGEgdmVjMyBhbmQgaXMgZXhwZWN0ZWQgdG8gYmUgdW5pdCBsZW5ndGggYW5kXHJcbiAqIHBlcnBlbmRpY3VsYXIgdG8gYWxsIG90aGVyIHNwZWNpZmllZCBheGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IHZpZXcgIHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSB2aWV3aW5nIGRpcmVjdGlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHJpZ2h0IHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBsb2NhbCBcInJpZ2h0XCIgZGlyZWN0aW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gdXAgICAgdGhlIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGxvY2FsIFwidXBcIiBkaXJlY3Rpb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5zZXRBeGVzID0gKGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG1hdHIgPSBtYXQzLmNyZWF0ZSgpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbihvdXQsIHZpZXcsIHJpZ2h0LCB1cCkge1xyXG4gICAgICAgIG1hdHJbMF0gPSByaWdodFswXTtcclxuICAgICAgICBtYXRyWzNdID0gcmlnaHRbMV07XHJcbiAgICAgICAgbWF0cls2XSA9IHJpZ2h0WzJdO1xyXG5cclxuICAgICAgICBtYXRyWzFdID0gdXBbMF07XHJcbiAgICAgICAgbWF0cls0XSA9IHVwWzFdO1xyXG4gICAgICAgIG1hdHJbN10gPSB1cFsyXTtcclxuXHJcbiAgICAgICAgbWF0clsyXSA9IC12aWV3WzBdO1xyXG4gICAgICAgIG1hdHJbNV0gPSAtdmlld1sxXTtcclxuICAgICAgICBtYXRyWzhdID0gLXZpZXdbMl07XHJcblxyXG4gICAgICAgIHJldHVybiBxdWF0Lm5vcm1hbGl6ZShvdXQsIHF1YXQuZnJvbU1hdDMob3V0LCBtYXRyKSk7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgcXVhdCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXRlcm5pb24gdG8gY2xvbmVcclxuICogQHJldHVybnMge3F1YXR9IGEgbmV3IHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmNsb25lID0gdmVjNC5jbG9uZTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHF1YXQgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBhIG5ldyBxdWF0ZXJuaW9uXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5mcm9tVmFsdWVzID0gdmVjNC5mcm9tVmFsdWVzO1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBxdWF0IHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgc291cmNlIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuY29weSA9IHZlYzQuY29weTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBxdWF0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LnNldCA9IHZlYzQuc2V0O1xyXG5cclxuLyoqXHJcbiAqIFNldCBhIHF1YXQgdG8gdGhlIGlkZW50aXR5IHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldHMgYSBxdWF0IGZyb20gdGhlIGdpdmVuIGFuZ2xlIGFuZCByb3RhdGlvbiBheGlzLFxyXG4gKiB0aGVuIHJldHVybnMgaXQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IGF4aXMgdGhlIGF4aXMgYXJvdW5kIHdoaWNoIHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSBpbiByYWRpYW5zXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICoqL1xyXG5xdWF0LnNldEF4aXNBbmdsZSA9IGZ1bmN0aW9uKG91dCwgYXhpcywgcmFkKSB7XHJcbiAgICByYWQgPSByYWQgKiAwLjU7XHJcbiAgICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XHJcbiAgICBvdXRbMF0gPSBzICogYXhpc1swXTtcclxuICAgIG91dFsxXSA9IHMgKiBheGlzWzFdO1xyXG4gICAgb3V0WzJdID0gcyAqIGF4aXNbMl07XHJcbiAgICBvdXRbM10gPSBNYXRoLmNvcyhyYWQpO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiB6aCA6IOe7leWNleS9jeWQkemHj+iHqui9rFxyXG4gKiBAcGFyYW0gb3V0ICB7cXVhdH1cclxuICogQHBhcmFtIHF1YXQyICB7cXVhdH1cclxuICogQHBhcmFtIGF4aXMgICB7dmVjM31cclxuICogQHBhcmFtIHJhZCAgICB7TnVtYmVyfVxyXG4gKi9cclxuXHJcbnF1YXQucm90YXRlQXhpcyA9IGZ1bmN0aW9uIChvdXQscXVhdDIsYXhpcyxyYWQpIHtcclxuXHJcbiAgICB2ZWMzLm5vcm1hbGl6ZShheGlzLGF4aXMpO1xyXG4gICAgcXVhdC5zZXRBeGlzQW5nbGUocXVhdDIsYXhpcyxyYWQpO1xyXG4gICAgcXVhdC5tdWx0aXBseShvdXQsb3V0LHF1YXQyKTtcclxuXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBZGRzIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmFkZCA9IHZlYzQuYWRkO1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHF1YXQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5tdWx0aXBseSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmFyIGF4ID0gYVswXSwgYXkgPSBhWzFdLCBheiA9IGFbMl0sIGF3ID0gYVszXSxcclxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdLCBidyA9IGJbM107XHJcblxyXG4gICAgb3V0WzBdID0gYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieTtcclxuICAgIG91dFsxXSA9IGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYno7XHJcbiAgICBvdXRbMl0gPSBheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4O1xyXG4gICAgb3V0WzNdID0gYXcgKiBidyAtIGF4ICogYnggLSBheSAqIGJ5IC0gYXogKiBiejtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQubXVsID0gcXVhdC5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgYSBxdWF0IGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5zY2FsZSA9IHZlYzQuc2NhbGU7XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIHF1YXRlcm5pb24gYnkgdGhlIGdpdmVuIGFuZ2xlIGFib3V0IHRoZSBYIGF4aXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgcXVhdCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byByb3RhdGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBhbmdsZSAoaW4gcmFkaWFucykgdG8gcm90YXRlXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQucm90YXRlWCA9IGZ1bmN0aW9uIChvdXQscmFkKSB7XHJcblxyXG4gICAgdmFyIHF1YXQyID1bMCwwLDAsMV07XHJcbiAgICB2YXIgYXhpcyA9IFsxLDAsMF07XHJcblxyXG4gICAgcXVhdC5yb3RhdGVBeGlzKG91dCxxdWF0MixheGlzLHJhZCk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgcXVhdGVybmlvbiBieSB0aGUgZ2l2ZW4gYW5nbGUgYWJvdXQgdGhlIFkgYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCBxdWF0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGFuZ2xlIChpbiByYWRpYW5zKSB0byByb3RhdGVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5yb3RhdGVZID0gZnVuY3Rpb24gKG91dCxyYWQpIHtcclxuXHJcbiAgICB2YXIgcXVhdDIgPVswLDAsMCwxXTtcclxuICAgIHZhciBheGlzID0gWzAsMSwwXTtcclxuXHJcbiAgICBxdWF0LnJvdGF0ZUF4aXMob3V0LHF1YXQyLGF4aXMscmFkKTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBxdWF0ZXJuaW9uIGJ5IHRoZSBnaXZlbiBhbmdsZSBhYm91dCB0aGUgWiBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHF1YXQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgYW5nbGUgKGluIHJhZGlhbnMpIHRvIHJvdGF0ZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xyXG5xdWF0LnJvdGF0ZVogPSBmdW5jdGlvbiAob3V0LHJhZCkge1xyXG4gICAgdmFyIHF1YXQyID1bMCwwLDAsMV07XHJcbiAgICB2YXIgYXhpcyA9IFswLDAsMV07XHJcblxyXG4gICAgcXVhdC5yb3RhdGVBeGlzKG91dCxxdWF0MixheGlzLHJhZCk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBXIGNvbXBvbmVudCBvZiBhIHF1YXQgZnJvbSB0aGUgWCwgWSwgYW5kIFogY29tcG9uZW50cy5cclxuICogQXNzdW1lcyB0aGF0IHF1YXRlcm5pb24gaXMgMSB1bml0IGluIGxlbmd0aC5cclxuICogQW55IGV4aXN0aW5nIFcgY29tcG9uZW50IHdpbGwgYmUgaWdub3JlZC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBXIGNvbXBvbmVudCBvZlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xyXG5xdWF0LmNhbGN1bGF0ZVcgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sIHkgPSBhWzFdLCB6ID0gYVsyXTtcclxuXHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIG91dFsyXSA9IHo7XHJcbiAgICBvdXRbM10gPSBNYXRoLnNxcnQoTWF0aC5hYnMoMS4wIC0geCAqIHggLSB5ICogeSAtIHogKiB6KSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuZG90ID0gdmVjNC5kb3Q7XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50IGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQubGVycCA9IHZlYzQubGVycDtcclxuXHJcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIHNwaGVyaWNhbCBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuc2xlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICAvLyBiZW5jaG1hcmtzOlxyXG4gICAgLy8gICAgaHR0cDovL2pzcGVyZi5jb20vcXVhdGVybmlvbi1zbGVycC1pbXBsZW1lbnRhdGlvbnNcclxuXHJcbiAgICB2YXIgYXggPSBhWzBdLCBheSA9IGFbMV0sIGF6ID0gYVsyXSwgYXcgPSBhWzNdLFxyXG4gICAgICAgIGJ4ID0gYlswXSwgYnkgPSBiWzFdLCBieiA9IGJbMl0sIGJ3ID0gYlszXTtcclxuXHJcbiAgICB2YXIgICAgICAgIG9tZWdhLCBjb3NvbSwgc2lub20sIHNjYWxlMCwgc2NhbGUxO1xyXG5cclxuICAgIC8vIGNhbGMgY29zaW5lXHJcbiAgICBjb3NvbSA9IGF4ICogYnggKyBheSAqIGJ5ICsgYXogKiBieiArIGF3ICogYnc7XHJcbiAgICAvLyBhZGp1c3Qgc2lnbnMgKGlmIG5lY2Vzc2FyeSlcclxuICAgIGlmICggY29zb20gPCAwLjAgKSB7XHJcbiAgICAgICAgY29zb20gPSAtY29zb207XHJcbiAgICAgICAgYnggPSAtIGJ4O1xyXG4gICAgICAgIGJ5ID0gLSBieTtcclxuICAgICAgICBieiA9IC0gYno7XHJcbiAgICAgICAgYncgPSAtIGJ3O1xyXG4gICAgfVxyXG4gICAgLy8gY2FsY3VsYXRlIGNvZWZmaWNpZW50c1xyXG4gICAgaWYgKCAoMS4wIC0gY29zb20pID4gMC4wMDAwMDEgKSB7XHJcbiAgICAgICAgLy8gc3RhbmRhcmQgY2FzZSAoc2xlcnApXHJcbiAgICAgICAgb21lZ2EgID0gTWF0aC5hY29zKGNvc29tKTtcclxuICAgICAgICBzaW5vbSAgPSBNYXRoLnNpbihvbWVnYSk7XHJcbiAgICAgICAgc2NhbGUwID0gTWF0aC5zaW4oKDEuMCAtIHQpICogb21lZ2EpIC8gc2lub207XHJcbiAgICAgICAgc2NhbGUxID0gTWF0aC5zaW4odCAqIG9tZWdhKSAvIHNpbm9tO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBcImZyb21cIiBhbmQgXCJ0b1wiIHF1YXRlcm5pb25zIGFyZSB2ZXJ5IGNsb3NlXHJcbiAgICAgICAgLy8gIC4uLiBzbyB3ZSBjYW4gZG8gYSBsaW5lYXIgaW50ZXJwb2xhdGlvblxyXG4gICAgICAgIHNjYWxlMCA9IDEuMCAtIHQ7XHJcbiAgICAgICAgc2NhbGUxID0gdDtcclxuICAgIH1cclxuICAgIC8vIGNhbGN1bGF0ZSBmaW5hbCB2YWx1ZXNcclxuICAgIG91dFswXSA9IHNjYWxlMCAqIGF4ICsgc2NhbGUxICogYng7XHJcbiAgICBvdXRbMV0gPSBzY2FsZTAgKiBheSArIHNjYWxlMSAqIGJ5O1xyXG4gICAgb3V0WzJdID0gc2NhbGUwICogYXogKyBzY2FsZTEgKiBiejtcclxuICAgIG91dFszXSA9IHNjYWxlMCAqIGF3ICsgc2NhbGUxICogYnc7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBpbnZlcnNlIG9mIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gY2FsY3VsYXRlIGludmVyc2Ugb2ZcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sXHJcbiAgICAgICAgZG90ID0gYTAqYTAgKyBhMSphMSArIGEyKmEyICsgYTMqYTMsXHJcbiAgICAgICAgaW52RG90ID0gZG90ID8gMS4wL2RvdCA6IDA7XHJcblxyXG4gICAgLy8gVE9ETzogV291bGQgYmUgZmFzdGVyIHRvIHJldHVybiBbMCwwLDAsMF0gaW1tZWRpYXRlbHkgaWYgZG90ID09IDBcclxuXHJcbiAgICBvdXRbMF0gPSAtYTAqaW52RG90O1xyXG4gICAgb3V0WzFdID0gLWExKmludkRvdDtcclxuICAgIG91dFsyXSA9IC1hMippbnZEb3Q7XHJcbiAgICBvdXRbM10gPSBhMyppbnZEb3Q7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGNvbmp1Z2F0ZSBvZiBhIHF1YXRcclxuICogSWYgdGhlIHF1YXRlcm5pb24gaXMgbm9ybWFsaXplZCwgdGhpcyBmdW5jdGlvbiBpcyBmYXN0ZXIgdGhhbiBxdWF0LmludmVyc2UgYW5kIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBjb25qdWdhdGUgb2ZcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5jb25qdWdhdGUgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSAtYVswXTtcclxuICAgIG91dFsxXSA9IC1hWzFdO1xyXG4gICAgb3V0WzJdID0gLWFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQubGVuZ3RoID0gdmVjNC5sZW5ndGg7XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Lmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmxlbiA9IHF1YXQubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5zcXVhcmVkTGVuZ3RoID0gdmVjNC5zcXVhcmVkTGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5zcXVhcmVkTGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuc3FyTGVuID0gcXVhdC5zcXVhcmVkTGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIE5vcm1hbGl6ZSBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0ZXJuaW9uIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5ub3JtYWxpemUgPSB2ZWM0Lm5vcm1hbGl6ZTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgcXVhdGVybmlvbiBmcm9tIHRoZSBnaXZlbiAzeDMgcm90YXRpb24gbWF0cml4LlxyXG4gKlxyXG4gKiBOT1RFOiBUaGUgcmVzdWx0YW50IHF1YXRlcm5pb24gaXMgbm90IG5vcm1hbGl6ZWQsIHNvIHlvdSBzaG91bGQgYmUgc3VyZVxyXG4gKiB0byByZW5vcm1hbGl6ZSB0aGUgcXVhdGVybmlvbiB5b3Vyc2VsZiB3aGVyZSBuZWNlc3NhcnkuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge21hdDN9IG0gcm90YXRpb24gbWF0cml4XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmZyb21NYXQzID0gZnVuY3Rpb24ob3V0LCBtKSB7XHJcbiAgICAvLyBBbGdvcml0aG0gaW4gS2VuIFNob2VtYWtlJ3MgYXJ0aWNsZSBpbiAxOTg3IFNJR0dSQVBIIGNvdXJzZSBub3Rlc1xyXG4gICAgLy8gYXJ0aWNsZSBcIlF1YXRlcm5pb24gQ2FsY3VsdXMgYW5kIEZhc3QgQW5pbWF0aW9uXCIuXHJcbiAgICB2YXIgZlRyYWNlID0gbVswXSArIG1bNF0gKyBtWzhdO1xyXG4gICAgdmFyIGZSb290O1xyXG5cclxuICAgIGlmICggZlRyYWNlID4gMC4wICkge1xyXG4gICAgICAgIC8vIHx3fCA+IDEvMiwgbWF5IGFzIHdlbGwgY2hvb3NlIHcgPiAxLzJcclxuICAgICAgICBmUm9vdCA9IE1hdGguc3FydChmVHJhY2UgKyAxLjApOyAgLy8gMndcclxuICAgICAgICBvdXRbM10gPSAwLjUgKiBmUm9vdDtcclxuICAgICAgICBmUm9vdCA9IDAuNS9mUm9vdDsgIC8vIDEvKDR3KVxyXG4gICAgICAgIG91dFswXSA9IChtWzVdLW1bN10pKmZSb290O1xyXG4gICAgICAgIG91dFsxXSA9IChtWzZdLW1bMl0pKmZSb290O1xyXG4gICAgICAgIG91dFsyXSA9IChtWzFdLW1bM10pKmZSb290O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAvLyB8d3wgPD0gMS8yXHJcbiAgICAgICAgdmFyIGkgPSAwO1xyXG4gICAgICAgIGlmICggbVs0XSA+IG1bMF0gKVxyXG4gICAgICAgICAgaSA9IDE7XHJcbiAgICAgICAgaWYgKCBtWzhdID4gbVtpKjMraV0gKVxyXG4gICAgICAgICAgaSA9IDI7XHJcbiAgICAgICAgdmFyIGogPSAoaSsxKSUzO1xyXG4gICAgICAgIHZhciBrID0gKGkrMiklMztcclxuXHJcbiAgICAgICAgZlJvb3QgPSBNYXRoLnNxcnQobVtpKjMraV0tbVtqKjMral0tbVtrKjMra10gKyAxLjApO1xyXG4gICAgICAgIG91dFtpXSA9IDAuNSAqIGZSb290O1xyXG4gICAgICAgIGZSb290ID0gMC41IC8gZlJvb3Q7XHJcbiAgICAgICAgb3V0WzNdID0gKG1baiozK2tdIC0gbVtrKjMral0pICogZlJvb3Q7XHJcbiAgICAgICAgb3V0W2pdID0gKG1baiozK2ldICsgbVtpKjMral0pICogZlJvb3Q7XHJcbiAgICAgICAgb3V0W2tdID0gKG1bayozK2ldICsgbVtpKjMra10pICogZlJvb3Q7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHF1YXQ7IiwiLy8gU2FtcGxlciBjbGlwIGlzIGVzcGVjaWFsbHkgZm9yIHRoZSBhbmltYXRpb24gc2FtcGxlciBpbiBnbFRGXHJcbi8vIFVzZSBUeXBlZCBBcnJheSBjYW4gcmVkdWNlIGEgbG90IG9mIGhlYXAgbWVtb3J5XHJcblxyXG5pbXBvcnQgcXVhdCBmcm9tICcuLi9nbG1hdHJpeC9xdWF0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG4vLyBsZXJwIGZ1bmN0aW9uIHdpdGggb2Zmc2V0IGluIGxhcmdlIGFycmF5XHJcbmZ1bmN0aW9uIHZlYzNsZXJwKG91dCwgYSwgYiwgdCwgb2EsIG9iKSB7XHJcbiAgICB2YXIgYXggPSBhW29hXTtcclxuICAgIHZhciBheSA9IGFbb2EgKyAxXTtcclxuICAgIHZhciBheiA9IGFbb2EgKyAyXTtcclxuICAgIG91dFswXSA9IGF4ICsgdCAqIChiW29iXSAtIGF4KTtcclxuICAgIG91dFsxXSA9IGF5ICsgdCAqIChiW29iICsgMV0gLSBheSk7XHJcbiAgICBvdXRbMl0gPSBheiArIHQgKiAoYltvYiArIDJdIC0gYXopO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHF1YXRTbGVycChvdXQsIGEsIGIsIHQsIG9hLCBvYikge1xyXG4gICAgLy8gYmVuY2htYXJrczpcclxuICAgIC8vICAgIGh0dHA6Ly9qc3BlcmYuY29tL3F1YXRlcm5pb24tc2xlcnAtaW1wbGVtZW50YXRpb25zXHJcblxyXG4gICAgdmFyIGF4ID0gYVswICsgb2FdLCBheSA9IGFbMSArIG9hXSwgYXogPSBhWzIgKyBvYV0sIGF3ID0gYVszICsgb2FdLFxyXG4gICAgICAgIGJ4ID0gYlswICsgb2JdLCBieSA9IGJbMSArIG9iXSwgYnogPSBiWzIgKyBvYl0sIGJ3ID0gYlszICsgb2JdO1xyXG5cclxuICAgIHZhciBvbWVnYSwgY29zb20sIHNpbm9tLCBzY2FsZTAsIHNjYWxlMTtcclxuXHJcbiAgICAvLyBjYWxjIGNvc2luZVxyXG4gICAgY29zb20gPSBheCAqIGJ4ICsgYXkgKiBieSArIGF6ICogYnogKyBhdyAqIGJ3O1xyXG4gICAgLy8gYWRqdXN0IHNpZ25zIChpZiBuZWNlc3NhcnkpXHJcbiAgICBpZiAoY29zb20gPCAwLjApIHtcclxuICAgICAgICBjb3NvbSA9IC1jb3NvbTtcclxuICAgICAgICBieCA9IC0gYng7XHJcbiAgICAgICAgYnkgPSAtIGJ5O1xyXG4gICAgICAgIGJ6ID0gLSBiejtcclxuICAgICAgICBidyA9IC0gYnc7XHJcbiAgICB9XHJcbiAgICAvLyBjYWxjdWxhdGUgY29lZmZpY2llbnRzXHJcbiAgICBpZiAoKDEuMCAtIGNvc29tKSA+IDAuMDAwMDAxKSB7XHJcbiAgICAgICAgLy8gc3RhbmRhcmQgY2FzZSAoc2xlcnApXHJcbiAgICAgICAgb21lZ2EgID0gTWF0aC5hY29zKGNvc29tKTtcclxuICAgICAgICBzaW5vbSAgPSBNYXRoLnNpbihvbWVnYSk7XHJcbiAgICAgICAgc2NhbGUwID0gTWF0aC5zaW4oKDEuMCAtIHQpICogb21lZ2EpIC8gc2lub207XHJcbiAgICAgICAgc2NhbGUxID0gTWF0aC5zaW4odCAqIG9tZWdhKSAvIHNpbm9tO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gJ2Zyb20nIGFuZCAndG8nIHF1YXRlcm5pb25zIGFyZSB2ZXJ5IGNsb3NlXHJcbiAgICAgICAgLy8gIC4uLiBzbyB3ZSBjYW4gZG8gYSBsaW5lYXIgaW50ZXJwb2xhdGlvblxyXG4gICAgICAgIHNjYWxlMCA9IDEuMCAtIHQ7XHJcbiAgICAgICAgc2NhbGUxID0gdDtcclxuICAgIH1cclxuICAgIC8vIGNhbGN1bGF0ZSBmaW5hbCB2YWx1ZXNcclxuICAgIG91dFswXSA9IHNjYWxlMCAqIGF4ICsgc2NhbGUxICogYng7XHJcbiAgICBvdXRbMV0gPSBzY2FsZTAgKiBheSArIHNjYWxlMSAqIGJ5O1xyXG4gICAgb3V0WzJdID0gc2NhbGUwICogYXogKyBzY2FsZTEgKiBiejtcclxuICAgIG91dFszXSA9IHNjYWxlMCAqIGF3ICsgc2NhbGUxICogYnc7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNhbXBsZXJUcmFjayBtYW5hZ2VzIGBwb3NpdGlvbmAsIGByb3RhdGlvbmAsIGBzY2FsZWAgdHJhY2tzIGluIGFuaW1hdGlvbiBvZiBzaW5nbGUgc2NlbmUgbm9kZS5cclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2tcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubmFtZV0gVHJhY2sgbmFtZVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW29wdHMudGFyZ2V0XSBUYXJnZXQgbm9kZSdzIHRyYW5zZm9ybSB3aWxsIHVwZGF0ZWQgYXV0b21hdGljYWxseVxyXG4gKi9cclxudmFyIFNhbXBsZXJUcmFjayA9IGZ1bmN0aW9uIChvcHRzKSB7XHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICB0aGlzLm5hbWUgPSBvcHRzLm5hbWUgfHwgJyc7XHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRhcmdldCA9IG9wdHMudGFyZ2V0IHx8IG51bGw7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtBcnJheX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0aW9uIGlzIHJlcHJlc2VudGVkIGJ5IGEgcXVhdGVybmlvblxyXG4gICAgICogQHR5cGUge0FycmF5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnJvdGF0aW9uID0gcXVhdC5jcmVhdGUoKTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge0FycmF5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnNjYWxlID0gdmVjMy5mcm9tVmFsdWVzKDEsIDEsIDEpO1xyXG5cclxuICAgIHRoaXMuY2hhbm5lbHMgPSB7XHJcbiAgICAgICAgdGltZTogbnVsbCxcclxuICAgICAgICBwb3NpdGlvbjogbnVsbCxcclxuICAgICAgICByb3RhdGlvbjogbnVsbCxcclxuICAgICAgICBzY2FsZTogbnVsbFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLl9jYWNoZUtleSA9IDA7XHJcbiAgICB0aGlzLl9jYWNoZVRpbWUgPSAwO1xyXG59O1xyXG5cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIGlmICghdGhpcy5jaGFubmVscy50aW1lKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGNoYW5uZWxzID0gdGhpcy5jaGFubmVscztcclxuICAgIHZhciBsZW4gPSBjaGFubmVscy50aW1lLmxlbmd0aDtcclxuICAgIHZhciBrZXkgPSAtMTtcclxuICAgIC8vIE9ubHkgb25lIGZyYW1lXHJcbiAgICBpZiAobGVuID09PSAxKSB7XHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnJvdGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHF1YXQuY29weSh0aGlzLnJvdGF0aW9uLCBjaGFubmVscy5yb3RhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFubmVscy5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICB2ZWMzLmNvcHkodGhpcy5wb3NpdGlvbiwgY2hhbm5lbHMucG9zaXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbm5lbHMuc2NhbGUpIHtcclxuICAgICAgICAgICAgdmVjMy5jb3B5KHRoaXMuc2NhbGUsIGNoYW5uZWxzLnNjYWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gQ2xhbXBcclxuICAgIGVsc2UgaWYgKHRpbWUgPD0gY2hhbm5lbHMudGltZVswXSkge1xyXG4gICAgICAgIHRpbWUgPSBjaGFubmVscy50aW1lWzBdO1xyXG4gICAgICAgIGtleSA9IDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aW1lID49IGNoYW5uZWxzLnRpbWVbbGVuIC0gMV0pIHtcclxuICAgICAgICB0aW1lID0gY2hhbm5lbHMudGltZVtsZW4gLSAxXTtcclxuICAgICAgICBrZXkgPSBsZW4gLSAyO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRpbWUgPCB0aGlzLl9jYWNoZVRpbWUpIHtcclxuICAgICAgICAgICAgdmFyIHMgPSBNYXRoLm1pbihsZW4gLSAxLCB0aGlzLl9jYWNoZUtleSArIDEpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gczsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChjaGFubmVscy50aW1lW2kgLSAxXSA8PSB0aW1lICYmIGNoYW5uZWxzLnRpbWVbaV0gPiB0aW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gaSAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9jYWNoZUtleTsgaSA8IGxlbiAtIDE7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoYW5uZWxzLnRpbWVbaV0gPD0gdGltZSAmJiBjaGFubmVscy50aW1lW2kgKyAxXSA+IHRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGtleSA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSBrZXk7XHJcbiAgICAgICAgdGhpcy5fY2FjaGVUaW1lID0gdGltZTtcclxuICAgICAgICB2YXIgc3RhcnQgPSBrZXk7XHJcbiAgICAgICAgdmFyIGVuZCA9IGtleSArIDE7XHJcbiAgICAgICAgdmFyIHN0YXJ0VGltZSA9IGNoYW5uZWxzLnRpbWVbc3RhcnRdO1xyXG4gICAgICAgIHZhciBlbmRUaW1lID0gY2hhbm5lbHMudGltZVtlbmRdO1xyXG4gICAgICAgIHZhciByYW5nZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XHJcbiAgICAgICAgdmFyIHBlcmNlbnQgPSByYW5nZSA9PT0gMCA/IDAgOiAodGltZSAtIHN0YXJ0VGltZSkgLyByYW5nZTtcclxuXHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnJvdGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHF1YXRTbGVycCh0aGlzLnJvdGF0aW9uLCBjaGFubmVscy5yb3RhdGlvbiwgY2hhbm5lbHMucm90YXRpb24sIHBlcmNlbnQsIHN0YXJ0ICogNCwgZW5kICogNCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFubmVscy5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICB2ZWMzbGVycCh0aGlzLnBvc2l0aW9uLCBjaGFubmVscy5wb3NpdGlvbiwgY2hhbm5lbHMucG9zaXRpb24sIHBlcmNlbnQsIHN0YXJ0ICogMywgZW5kICogMyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFubmVscy5zY2FsZSkge1xyXG4gICAgICAgICAgICB2ZWMzbGVycCh0aGlzLnNjYWxlLCBjaGFubmVscy5zY2FsZSwgY2hhbm5lbHMuc2NhbGUsIHBlcmNlbnQsIHN0YXJ0ICogMywgZW5kICogMyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gTG9vcCBoYW5kbGluZ1xyXG4gICAgaWYgKGtleSA9PT0gbGVuIC0gMikge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlS2V5ID0gMDtcclxuICAgICAgICB0aGlzLl9jYWNoZVRpbWUgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlVGFyZ2V0KCk7XHJcbn07XHJcblxyXG4vKipcclxuICogVXBkYXRlIHRyYW5zZm9ybSBvZiB0YXJnZXQgbm9kZSBtYW51YWxseVxyXG4gKi9cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS51cGRhdGVUYXJnZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgY2hhbm5lbHMgPSB0aGlzLmNoYW5uZWxzO1xyXG4gICAgaWYgKHRoaXMudGFyZ2V0KSB7XHJcbiAgICAgICAgLy8gT25seSB1cGRhdGUgdGFyZ2V0IHByb3AgaWYgaGF2ZSBkYXRhLlxyXG4gICAgICAgIGlmIChjaGFubmVscy5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldC5wb3NpdGlvbi5zZXRBcnJheSh0aGlzLnBvc2l0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnJvdGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnJvdGF0aW9uLnNldEFycmF5KHRoaXMucm90YXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbm5lbHMuc2NhbGUpIHtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXQuc2NhbGUuc2V0QXJyYXkodGhpcy5zY2FsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuZ2V0TWF4VGltZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLmNoYW5uZWxzLnRpbWVbdGhpcy5jaGFubmVscy50aW1lLmxlbmd0aCAtIDFdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFRpbWVcclxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFRpbWVcclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfVxyXG4gKi9cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5nZXRTdWJUcmFjayA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUpIHtcclxuXHJcbiAgICB2YXIgc3ViQ2xpcCA9IG5ldyBTYW1wbGVyVHJhY2soe1xyXG4gICAgICAgIG5hbWU6IHRoaXMubmFtZVxyXG4gICAgfSk7XHJcbiAgICB2YXIgbWluVGltZSA9IHRoaXMuY2hhbm5lbHMudGltZVswXTtcclxuICAgIHN0YXJ0VGltZSA9IE1hdGgubWluKE1hdGgubWF4KHN0YXJ0VGltZSwgbWluVGltZSksIHRoaXMubGlmZSk7XHJcbiAgICBlbmRUaW1lID0gTWF0aC5taW4oTWF0aC5tYXgoZW5kVGltZSwgbWluVGltZSksIHRoaXMubGlmZSk7XHJcblxyXG4gICAgdmFyIHJhbmdlU3RhcnQgPSB0aGlzLl9maW5kUmFuZ2Uoc3RhcnRUaW1lKTtcclxuICAgIHZhciByYW5nZUVuZCA9IHRoaXMuX2ZpbmRSYW5nZShlbmRUaW1lKTtcclxuXHJcbiAgICB2YXIgY291bnQgPSByYW5nZUVuZFswXSAtIHJhbmdlU3RhcnRbMF0gKyAxO1xyXG4gICAgaWYgKHJhbmdlU3RhcnRbMV0gPT09IDAgJiYgcmFuZ2VFbmRbMV0gPT09IDApIHtcclxuICAgICAgICBjb3VudCAtPSAxO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhbm5lbHMucm90YXRpb24pIHtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhbm5lbHMucG9zaXRpb24pIHtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnBvc2l0aW9uID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhbm5lbHMuc2NhbGUpIHtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnNjYWxlID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhbm5lbHMudGltZSkge1xyXG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMudGltZSA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQpO1xyXG4gICAgfVxyXG4gICAgLy8gQ2xpcCBhdCB0aGUgc3RhcnRcclxuICAgIHRoaXMuc2V0VGltZShzdGFydFRpbWUpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uW2ldID0gdGhpcy5yb3RhdGlvbltpXTtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnBvc2l0aW9uW2ldID0gdGhpcy5wb3NpdGlvbltpXTtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnNjYWxlW2ldID0gdGhpcy5zY2FsZVtpXTtcclxuICAgIH1cclxuICAgIHN1YkNsaXAuY2hhbm5lbHMudGltZVswXSA9IDA7XHJcbiAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uWzNdID0gdGhpcy5yb3RhdGlvblszXTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGNvdW50LTE7IGkrKykge1xyXG4gICAgICAgIHZhciBpMjtcclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDM7IGorKykge1xyXG4gICAgICAgICAgICBpMiA9IHJhbmdlU3RhcnRbMF0gKyBpO1xyXG4gICAgICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uW2kgKiA0ICsgal0gPSB0aGlzLmNoYW5uZWxzLnJvdGF0aW9uW2kyICogNCArIGpdO1xyXG4gICAgICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnBvc2l0aW9uW2kgKiAzICsgal0gPSB0aGlzLmNoYW5uZWxzLnBvc2l0aW9uW2kyICogMyArIGpdO1xyXG4gICAgICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnNjYWxlW2kgKiAzICsgal0gPSB0aGlzLmNoYW5uZWxzLnNjYWxlW2kyICogMyArIGpdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnRpbWVbaV0gPSB0aGlzLmNoYW5uZWxzLnRpbWVbaTJdIC0gc3RhcnRUaW1lO1xyXG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMucm90YXRpb25baSAqIDQgKyAzXSA9IHRoaXMuY2hhbm5lbHMucm90YXRpb25baTIgKiA0ICsgM107XHJcbiAgICB9XHJcbiAgICAvLyBDbGlwIGF0IHRoZSBlbmRcclxuICAgIHRoaXMuc2V0VGltZShlbmRUaW1lKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvblsoY291bnQgLSAxKSAqIDQgKyBpXSA9IHRoaXMucm90YXRpb25baV07XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5wb3NpdGlvblsoY291bnQgLSAxKSAqIDMgKyBpXSA9IHRoaXMucG9zaXRpb25baV07XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5zY2FsZVsoY291bnQgLSAxKSAqIDMgKyBpXSA9IHRoaXMuc2NhbGVbaV07XHJcbiAgICB9XHJcbiAgICBzdWJDbGlwLmNoYW5uZWxzLnRpbWVbKGNvdW50IC0gMSldID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcclxuICAgIHN1YkNsaXAuY2hhbm5lbHMucm90YXRpb25bKGNvdW50IC0gMSkgKiA0ICsgM10gPSB0aGlzLnJvdGF0aW9uWzNdO1xyXG5cclxuICAgIC8vIFRPRE8gc2V0IGJhY2sgP1xyXG4gICAgc3ViQ2xpcC5saWZlID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcclxuICAgIHJldHVybiBzdWJDbGlwO1xyXG59O1xyXG5cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5fZmluZFJhbmdlID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIHZhciBjaGFubmVscyA9IHRoaXMuY2hhbm5lbHM7XHJcbiAgICB2YXIgbGVuID0gY2hhbm5lbHMudGltZS5sZW5ndGg7XHJcbiAgICB2YXIgc3RhcnQgPSAtMTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnRpbWVbaV0gPD0gdGltZSAmJiBjaGFubmVscy50aW1lW2krMV0gPiB0aW1lKSB7XHJcbiAgICAgICAgICAgIHN0YXJ0ID0gaTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgcGVyY2VudCA9IDA7XHJcbiAgICBpZiAoc3RhcnQgPj0gMCkge1xyXG4gICAgICAgIHZhciBzdGFydFRpbWUgPSBjaGFubmVscy50aW1lW3N0YXJ0XTtcclxuICAgICAgICB2YXIgZW5kVGltZSA9IGNoYW5uZWxzLnRpbWVbc3RhcnQrMV07XHJcbiAgICAgICAgdmFyIHBlcmNlbnQgPSAodGltZS1zdGFydFRpbWUpIC8gKGVuZFRpbWUtc3RhcnRUaW1lKTtcclxuICAgIH1cclxuICAgIC8vIFBlcmNlbnQgWzAsIDEpXHJcbiAgICByZXR1cm4gW3N0YXJ0LCBwZXJjZW50XTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiAxRCBibGVuZGluZyBiZXR3ZWVuIHR3byBjbGlwc1xyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMVxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMyXHJcbiAqIEBwYXJhbSAge251bWJlcn0gd1xyXG4gKi9cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5ibGVuZDFEID0gZnVuY3Rpb24gKHQxLCB0Miwgdykge1xyXG4gICAgdmVjMy5sZXJwKHRoaXMucG9zaXRpb24sIHQxLnBvc2l0aW9uLCB0Mi5wb3NpdGlvbiwgdyk7XHJcbiAgICB2ZWMzLmxlcnAodGhpcy5zY2FsZSwgdDEuc2NhbGUsIHQyLnNjYWxlLCB3KTtcclxuICAgIHF1YXQuc2xlcnAodGhpcy5yb3RhdGlvbiwgdDEucm90YXRpb24sIHQyLnJvdGF0aW9uLCB3KTtcclxufTtcclxuLyoqXHJcbiAqIDJEIGJsZW5kaW5nIGJldHdlZW4gdGhyZWUgY2xpcHNcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzFcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMlxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMzXHJcbiAqIEBwYXJhbSAge251bWJlcn0gZlxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IGdcclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuYmxlbmQyRCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcTEgPSBxdWF0LmNyZWF0ZSgpO1xyXG4gICAgdmFyIHEyID0gcXVhdC5jcmVhdGUoKTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodDEsIHQyLCB0MywgZiwgZykge1xyXG4gICAgICAgIHZhciBhID0gMSAtIGYgLSBnO1xyXG5cclxuICAgICAgICB0aGlzLnBvc2l0aW9uWzBdID0gdDEucG9zaXRpb25bMF0gKiBhICsgdDIucG9zaXRpb25bMF0gKiBmICsgdDMucG9zaXRpb25bMF0gKiBnO1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25bMV0gPSB0MS5wb3NpdGlvblsxXSAqIGEgKyB0Mi5wb3NpdGlvblsxXSAqIGYgKyB0My5wb3NpdGlvblsxXSAqIGc7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvblsyXSA9IHQxLnBvc2l0aW9uWzJdICogYSArIHQyLnBvc2l0aW9uWzJdICogZiArIHQzLnBvc2l0aW9uWzJdICogZztcclxuXHJcbiAgICAgICAgdGhpcy5zY2FsZVswXSA9IHQxLnNjYWxlWzBdICogYSArIHQyLnNjYWxlWzBdICogZiArIHQzLnNjYWxlWzBdICogZztcclxuICAgICAgICB0aGlzLnNjYWxlWzFdID0gdDEuc2NhbGVbMV0gKiBhICsgdDIuc2NhbGVbMV0gKiBmICsgdDMuc2NhbGVbMV0gKiBnO1xyXG4gICAgICAgIHRoaXMuc2NhbGVbMl0gPSB0MS5zY2FsZVsyXSAqIGEgKyB0Mi5zY2FsZVsyXSAqIGYgKyB0My5zY2FsZVsyXSAqIGc7XHJcblxyXG4gICAgICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYmIyMDU0MDModj12cy44NSkuYXNweFxyXG4gICAgICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbWljcm9zb2Z0LmRpcmVjdHhfc2RrLnF1YXRlcm5pb24ueG1xdWF0ZXJuaW9uYmFyeWNlbnRyaWModj12cy44NSkuYXNweFxyXG4gICAgICAgIHZhciBzID0gZiArIGc7XHJcbiAgICAgICAgaWYgKHMgPT09IDApIHtcclxuICAgICAgICAgICAgcXVhdC5jb3B5KHRoaXMucm90YXRpb24sIHQxLnJvdGF0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHF1YXQuc2xlcnAocTEsIHQxLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbiwgcyk7XHJcbiAgICAgICAgICAgIHF1YXQuc2xlcnAocTIsIHQxLnJvdGF0aW9uLCB0My5yb3RhdGlvbiwgcyk7XHJcbiAgICAgICAgICAgIHF1YXQuc2xlcnAodGhpcy5yb3RhdGlvbiwgcTEsIHEyLCBnIC8gcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufSkoKTtcclxuLyoqXHJcbiAqIEFkZGl0aXZlIGJsZW5kaW5nIGJldHdlZW4gdHdvIGNsaXBzXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzJcclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuYWRkaXRpdmVCbGVuZCA9IGZ1bmN0aW9uICh0MSwgdDIpIHtcclxuICAgIHZlYzMuYWRkKHRoaXMucG9zaXRpb24sIHQxLnBvc2l0aW9uLCB0Mi5wb3NpdGlvbik7XHJcbiAgICB2ZWMzLmFkZCh0aGlzLnNjYWxlLCB0MS5zY2FsZSwgdDIuc2NhbGUpO1xyXG4gICAgcXVhdC5tdWx0aXBseSh0aGlzLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbiwgdDEucm90YXRpb24pO1xyXG59O1xyXG4vKipcclxuICogU3VidHJhY3RpdmUgYmxlbmRpbmcgYmV0d2VlbiB0d28gY2xpcHNcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzFcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMlxyXG4gKi9cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5zdWJ0cmFjdGl2ZUJsZW5kID0gZnVuY3Rpb24gKHQxLCB0Mikge1xyXG4gICAgdmVjMy5zdWIodGhpcy5wb3NpdGlvbiwgdDEucG9zaXRpb24sIHQyLnBvc2l0aW9uKTtcclxuICAgIHZlYzMuc3ViKHRoaXMuc2NhbGUsIHQxLnNjYWxlLCB0Mi5zY2FsZSk7XHJcbiAgICBxdWF0LmludmVydCh0aGlzLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbik7XHJcbiAgICBxdWF0Lm11bHRpcGx5KHRoaXMucm90YXRpb24sIHRoaXMucm90YXRpb24sIHQxLnJvdGF0aW9uKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDbG9uZSBhIG5ldyBTYW1wbGVyVHJhY2tcclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfVxyXG4gKi9cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB0cmFjayA9IFNhbXBsZXJUcmFjay5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgIHRyYWNrLmNoYW5uZWxzID0ge1xyXG4gICAgICAgIHRpbWU6IHRoaXMuY2hhbm5lbHMudGltZSB8fCBudWxsLFxyXG4gICAgICAgIHBvc2l0aW9uOiB0aGlzLmNoYW5uZWxzLnBvc2l0aW9uIHx8IG51bGwsXHJcbiAgICAgICAgcm90YXRpb246IHRoaXMuY2hhbm5lbHMucm90YXRpb24gfHwgbnVsbCxcclxuICAgICAgICBzY2FsZTogdGhpcy5jaGFubmVscy5zY2FsZSB8fCBudWxsXHJcbiAgICB9O1xyXG4gICAgdmVjMy5jb3B5KHRyYWNrLnBvc2l0aW9uLCB0aGlzLnBvc2l0aW9uKTtcclxuICAgIHF1YXQuY29weSh0cmFjay5yb3RhdGlvbiwgdGhpcy5yb3RhdGlvbik7XHJcbiAgICB2ZWMzLmNvcHkodHJhY2suc2NhbGUsIHRoaXMuc2NhbGUpO1xyXG5cclxuICAgIHRyYWNrLnRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG4gICAgdHJhY2sudXBkYXRlVGFyZ2V0KCk7XHJcblxyXG4gICAgcmV0dXJuIHRyYWNrO1xyXG5cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNhbXBsZXJUcmFjaztcclxuIiwiLyoqXHJcbiAqIEV4dGVuZCBhIHN1YiBjbGFzcyBmcm9tIGJhc2UgY2xhc3NcclxuICogQHBhcmFtIHtvYmplY3R8RnVuY3Rpb259IG1ha2VEZWZhdWx0T3B0IGRlZmF1bHQgb3B0aW9uIG9mIHRoaXMgc3ViIGNsYXNzLCBtZXRob2Qgb2YgdGhlIHN1YiBjYW4gdXNlIHRoaXMueHh4IHRvIGFjY2VzcyB0aGlzIG9wdGlvblxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaW5pdGlhbGl6ZV0gSW5pdGlhbGl6ZSBhZnRlciB0aGUgc3ViIGNsYXNzIGlzIGluc3RhbnRpYXRlZFxyXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3RvXSBQcm90b3R5cGUgbWV0aG9kcy9wcm9wZXJ0aWVzIG9mIHRoZSBzdWIgY2xhc3NcclxuICogQG1lbWJlck9mIGNsYXkuY29yZS5taXhpbi5leHRlbmRcclxuICogQHJldHVybiB7RnVuY3Rpb259XHJcbiAqL1xyXG5mdW5jdGlvbiBkZXJpdmUobWFrZURlZmF1bHRPcHQsIGluaXRpYWxpemUvKm9wdGlvbmFsKi8sIHByb3RvLypvcHRpb25hbCovKSB7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsaXplID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgcHJvdG8gPSBpbml0aWFsaXplO1xyXG4gICAgICAgIGluaXRpYWxpemUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBfc3VwZXIgPSB0aGlzO1xyXG5cclxuICAgIHZhciBwcm9wTGlzdDtcclxuICAgIGlmICghKG1ha2VEZWZhdWx0T3B0IGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XHJcbiAgICAgICAgLy8gT3B0aW1pemUgdGhlIHByb3BlcnR5IGl0ZXJhdGUgaWYgaXQgaGF2ZSBiZWVuIGZpeGVkXHJcbiAgICAgICAgcHJvcExpc3QgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBtYWtlRGVmYXVsdE9wdCkge1xyXG4gICAgICAgICAgICBpZiAobWFrZURlZmF1bHRPcHQuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wTGlzdC5wdXNoKHByb3BOYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIgc3ViID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG5cclxuICAgICAgICAvLyBjYWxsIHN1cGVyIGNvbnN0cnVjdG9yXHJcbiAgICAgICAgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcblxyXG4gICAgICAgIGlmIChtYWtlRGVmYXVsdE9wdCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIC8vIEludm9rZSBtYWtlRGVmYXVsdE9wdCBlYWNoIHRpbWUgaWYgaXQgaXMgYSBmdW5jdGlvbiwgU28gd2UgY2FuIG1ha2Ugc3VyZSBlYWNoXHJcbiAgICAgICAgICAgIC8vIHByb3BlcnR5IGluIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgc2hhcmVkIGJ5IG11dGlwbGUgaW5zdGFuY2VzXHJcbiAgICAgICAgICAgIGV4dGVuZCh0aGlzLCBtYWtlRGVmYXVsdE9wdC5jYWxsKHRoaXMsIG9wdGlvbnMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGV4dGVuZFdpdGhQcm9wTGlzdCh0aGlzLCBtYWtlRGVmYXVsdE9wdCwgcHJvcExpc3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IHN1Yikge1xyXG4gICAgICAgICAgICAvLyBJbml0aWFsaXplIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHRoZSBvcmRlciBvZiBpbmhlcml0XHJcbiAgICAgICAgICAgIHZhciBpbml0aWFsaXplcnMgPSBzdWIuX19pbml0aWFsaXplcnNfXztcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGluaXRpYWxpemVyc1tpXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8vIHNhdmUgc3VwZXIgY29uc3RydWN0b3JcclxuICAgIHN1Yi5fX3N1cGVyX18gPSBfc3VwZXI7XHJcbiAgICAvLyBJbml0aWFsaXplIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGFsbCB0aGUgc3VwZXIgY29uc3RydWN0b3IgaXMgY2FsbGVkXHJcbiAgICBpZiAoIV9zdXBlci5fX2luaXRpYWxpemVyc19fKSB7XHJcbiAgICAgICAgc3ViLl9faW5pdGlhbGl6ZXJzX18gPSBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc3ViLl9faW5pdGlhbGl6ZXJzX18gPSBfc3VwZXIuX19pbml0aWFsaXplcnNfXy5zbGljZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGluaXRpYWxpemUpIHtcclxuICAgICAgICBzdWIuX19pbml0aWFsaXplcnNfXy5wdXNoKGluaXRpYWxpemUpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBDdG9yID0gZnVuY3Rpb24oKSB7fTtcclxuICAgIEN0b3IucHJvdG90eXBlID0gX3N1cGVyLnByb3RvdHlwZTtcclxuICAgIHN1Yi5wcm90b3R5cGUgPSBuZXcgQ3RvcigpO1xyXG4gICAgc3ViLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YjtcclxuICAgIGV4dGVuZChzdWIucHJvdG90eXBlLCBwcm90byk7XHJcblxyXG4gICAgLy8gZXh0ZW5kIHRoZSBkZXJpdmUgbWV0aG9kIGFzIGEgc3RhdGljIG1ldGhvZDtcclxuICAgIHN1Yi5leHRlbmQgPSBfc3VwZXIuZXh0ZW5kO1xyXG5cclxuICAgIC8vIERFUENSQVRFRFxyXG4gICAgc3ViLmRlcml2ZSA9IF9zdXBlci5leHRlbmQ7XHJcblxyXG4gICAgcmV0dXJuIHN1YjtcclxufVxyXG5cclxuZnVuY3Rpb24gZXh0ZW5kKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICBpZiAoIXNvdXJjZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGZvciAodmFyIG5hbWUgaW4gc291cmNlKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG4gICAgICAgICAgICB0YXJnZXRbbmFtZV0gPSBzb3VyY2VbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBleHRlbmRXaXRoUHJvcExpc3QodGFyZ2V0LCBzb3VyY2UsIHByb3BMaXN0KSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHByb3BOYW1lID0gcHJvcExpc3RbaV07XHJcbiAgICAgICAgdGFyZ2V0W3Byb3BOYW1lXSA9IHNvdXJjZVtwcm9wTmFtZV07XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAYWxpYXMgY2xheS5jb3JlLm1peGluLmV4dGVuZFxyXG4gKiBAbWl4aW5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuXHJcbiAgICBleHRlbmQ6IGRlcml2ZSxcclxuXHJcbiAgICAvLyBERVBDUkFURURcclxuICAgIGRlcml2ZTogZGVyaXZlXHJcbn07XHJcbiIsImZ1bmN0aW9uIEhhbmRsZXIoYWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICB0aGlzLmFjdGlvbiA9IGFjdGlvbjtcclxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbn1cclxuLyoqXHJcbiAqIEBtaXhpblxyXG4gKiBAYWxpYXMgY2xheS5jb3JlLm1peGluLm5vdGlmaWVyXHJcbiAqL1xyXG52YXIgbm90aWZpZXIgPSB7XHJcbiAgICAvKipcclxuICAgICAqIFRyaWdnZXIgZXZlbnRcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxyXG4gICAgICovXHJcbiAgICB0cmlnZ2VyOiBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc093blByb3BlcnR5KCdfX2hhbmRsZXJzX18nKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5fX2hhbmRsZXJzX18uaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGhkbHMgPSB0aGlzLl9faGFuZGxlcnNfX1tuYW1lXTtcclxuICAgICAgICB2YXIgbCA9IGhkbHMubGVuZ3RoLCBpID0gLTEsIGFyZ3MgPSBhcmd1bWVudHM7XHJcbiAgICAgICAgLy8gT3B0aW1pemUgYWR2aXNlIGZyb20gYmFja2JvbmVcclxuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIHdoaWxlICgrK2kgPCBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGRsc1tpXS5hY3Rpb24uY2FsbChoZGxzW2ldLmNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhkbHNbaV0uYWN0aW9uLmNhbGwoaGRsc1tpXS5jb250ZXh0LCBhcmdzWzFdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKCsraSA8IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCwgYXJnc1sxXSwgYXJnc1syXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgIHdoaWxlICgrK2kgPCBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGRsc1tpXS5hY3Rpb24uY2FsbChoZGxzW2ldLmNvbnRleHQsIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhkbHNbaV0uYWN0aW9uLmNhbGwoaGRsc1tpXS5jb250ZXh0LCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHdoaWxlICgrK2kgPCBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGRsc1tpXS5hY3Rpb24uYXBwbHkoaGRsc1tpXS5jb250ZXh0LCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXIgZXZlbnQgaGFuZGxlclxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBvbjogZnVuY3Rpb24obmFtZSwgYWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICAgICAgaWYgKCFuYW1lIHx8ICFhY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9faGFuZGxlcnNfXyB8fCAodGhpcy5fX2hhbmRsZXJzX189e30pO1xyXG4gICAgICAgIGlmICghaGFuZGxlcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhhcyhuYW1lLCBhY3Rpb24pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBuZXcgSGFuZGxlcihhY3Rpb24sIGNvbnRleHQgfHwgdGhpcyk7XHJcbiAgICAgICAgaGFuZGxlcnNbbmFtZV0ucHVzaChoYW5kbGVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXIgZXZlbnQsIGV2ZW50IHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgb25jZSBhbmQgdGhlbiByZW1vdmVkXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIG9uY2U6IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XHJcbiAgICAgICAgICAgIHNlbGYub2ZmKG5hbWUsIHdyYXBwZXIpO1xyXG4gICAgICAgICAgICBhY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub24obmFtZSwgd3JhcHBlciwgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2Ygb25jZSgnYmVmb3JlJyArIG5hbWUpXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIGJlZm9yZTogZnVuY3Rpb24obmFtZSwgYWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICAgICAgaWYgKCFuYW1lIHx8ICFhY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBuYW1lID0gJ2JlZm9yZScgKyBuYW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2Ygb25jZSgnYWZ0ZXInICsgbmFtZSlcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGFjdGlvblxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgYWZ0ZXI6IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmFtZSA9ICdhZnRlcicgKyBuYW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2Ygb24oJ3N1Y2Nlc3MnKVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGFjdGlvblxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgc3VjY2VzczogZnVuY3Rpb24oYWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub25jZSgnc3VjY2VzcycsIGFjdGlvbiwgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2Ygb24oJ2Vycm9yJylcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIGVycm9yOiBmdW5jdGlvbihhY3Rpb24sIGNvbnRleHQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vbmNlKCdlcnJvcicsIGFjdGlvbiwgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGV2ZW50IGxpc3RlbmVyXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBvZmY6IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbikge1xyXG5cclxuICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9faGFuZGxlcnNfXyB8fCAodGhpcy5fX2hhbmRsZXJzX189e30pO1xyXG5cclxuICAgICAgICBpZiAoIWFjdGlvbikge1xyXG4gICAgICAgICAgICBoYW5kbGVyc1tuYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChoYW5kbGVyc1tuYW1lXSkge1xyXG4gICAgICAgICAgICB2YXIgaGRscyA9IGhhbmRsZXJzW25hbWVdO1xyXG4gICAgICAgICAgICB2YXIgcmV0YWlucyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhkbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gJiYgaGRsc1tpXS5hY3Rpb24gIT09IGFjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldGFpbnMucHVzaChoZGxzW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBoYW5kbGVyc1tuYW1lXSA9IHJldGFpbnM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiByZWdpc3RlcmVkIHRoZSBldmVudCBoYW5kbGVyXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gIGFjdGlvblxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaGFzOiBmdW5jdGlvbihuYW1lLCBhY3Rpb24pIHtcclxuICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9faGFuZGxlcnNfXztcclxuXHJcbiAgICAgICAgaWYgKCEgaGFuZGxlcnMgfHxcclxuICAgICAgICAgICAgISBoYW5kbGVyc1tuYW1lXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBoZGxzID0gaGFuZGxlcnNbbmFtZV07XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChoZGxzW2ldLmFjdGlvbiA9PT0gYWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5vdGlmaWVyOyIsInZhciBndWlkID0gMDtcclxuXHJcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xyXG52YXIgbmF0aXZlRm9yRWFjaCA9IEFycmF5UHJvdG8uZm9yRWFjaDtcclxuXHJcbi8qKlxyXG4gKiBVdGlsIGZ1bmN0aW9uc1xyXG4gKiBAbmFtZXNwYWNlIGNsYXkuY29yZS51dGlsXHJcbiAqL1xyXG52YXIgdXRpbCA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIEdVSURcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBnZW5HVUlEOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuICsrZ3VpZDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFJlbGF0aXZlIHBhdGggdG8gYWJzb2x1dGUgcGF0aFxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBwYXRoXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGJhc2VQYXRoXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgcmVsYXRpdmUyYWJzb2x1dGU6IGZ1bmN0aW9uIChwYXRoLCBiYXNlUGF0aCkge1xyXG4gICAgICAgIGlmICghYmFzZVBhdGggfHwgcGF0aC5tYXRjaCgvXlxcLy8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcGF0aFBhcnRzID0gcGF0aC5zcGxpdCgnLycpO1xyXG4gICAgICAgIHZhciBiYXNlUGF0aFBhcnRzID0gYmFzZVBhdGguc3BsaXQoJy8nKTtcclxuXHJcbiAgICAgICAgdmFyIGl0ZW0gPSBwYXRoUGFydHNbMF07XHJcbiAgICAgICAgd2hpbGUoaXRlbSA9PT0gJy4nIHx8IGl0ZW0gPT09ICcuLicpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gPT09ICcuLicpIHtcclxuICAgICAgICAgICAgICAgIGJhc2VQYXRoUGFydHMucG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGF0aFBhcnRzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBwYXRoUGFydHNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBiYXNlUGF0aFBhcnRzLmpvaW4oJy8nKSArICcvJyArIHBhdGhQYXJ0cy5qb2luKCcvJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXh0ZW5kIHRhcmdldCB3aXRoIHNvdXJjZVxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gc291cmNlXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgZXh0ZW5kOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgICAgICBpZiAoc291cmNlKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gc291cmNlW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXh0ZW5kIHByb3BlcnRpZXMgdG8gdGFyZ2V0IGlmIG5vdCBleGlzdC5cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHNvdXJjZVxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIGRlZmF1bHRzOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgICAgICBpZiAoc291cmNlKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BOYW1lIGluIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldFtwcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wTmFtZV0gPSBzb3VyY2VbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBFeHRlbmQgcHJvcGVydGllcyB3aXRoIGEgZ2l2ZW4gcHJvcGVydHkgbGlzdCB0byBhdm9pZCBmb3IuLmluLi4gaXRlcmF0aW9uLlxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gc291cmNlXHJcbiAgICAgKiBAcGFyYW0gIHtBcnJheS48c3RyaW5nPn0gcHJvcExpc3RcclxuICAgICAqIEByZXR1cm4ge09iamVjdH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBleHRlbmRXaXRoUHJvcExpc3Q6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgcHJvcExpc3QpIHtcclxuICAgICAgICBpZiAoc291cmNlKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcm9wTmFtZSA9IHByb3BMaXN0W2ldO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BOYW1lXSA9IHNvdXJjZVtwcm9wTmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEV4dGVuZCBwcm9wZXJ0aWVzIHRvIHRhcmdldCBpZiBub3QgZXhpc3QuIFdpdGggYSBnaXZlbiBwcm9wZXJ0eSBsaXN0IGF2b2lkIGZvci4uaW4uLiBpdGVyYXRpb24uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBzb3VyY2VcclxuICAgICAqIEBwYXJhbSAge0FycmF5LjxzdHJpbmc+fSBwcm9wTGlzdFxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIGRlZmF1bHRzV2l0aFByb3BMaXN0OiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIHByb3BMaXN0KSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJvcE5hbWUgPSBwcm9wTGlzdFtpXTtcclxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRbcHJvcE5hbWVdID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcE5hbWVdID0gc291cmNlW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fEFycmF5fSBvYmpcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBpdGVyYXRvclxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBlYWNoOiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xyXG4gICAgICAgIGlmICghKG9iaiAmJiBpdGVyYXRvcikpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqLmZvckVhY2ggJiYgb2JqLmZvckVhY2ggPT09IG5hdGl2ZUZvckVhY2gpIHtcclxuICAgICAgICAgICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChvYmoubGVuZ3RoID09PSArIG9iai5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG9iai5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2tleV0sIGtleSwgb2JqKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyBvYmplY3RcclxuICAgICAqIEBwYXJhbSAge30gIG9ialxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBpc09iamVjdDogZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHJldHVybiBvYmogPT09IE9iamVjdChvYmopO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElzIGFycmF5ID9cclxuICAgICAqIEBwYXJhbSAge30gIG9ialxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBpc0FycmF5OiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkob2JqKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyBhcnJheSBsaWtlLCB3aGljaCBoYXZlIGEgbGVuZ3RoIHByb3BlcnR5XHJcbiAgICAgKiBAcGFyYW0gIHt9ICBvYmpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgaXNBcnJheUxpa2U6IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICBpZiAoIW9iaikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqLmxlbmd0aCA9PT0gKyBvYmoubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHt9IG9ialxyXG4gICAgICogQHJldHVybiB7fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgaWYgKCF1dGlsLmlzT2JqZWN0KG9iaikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9iajtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodXRpbC5pc0FycmF5KG9iaikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9iai5zbGljZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh1dGlsLmlzQXJyYXlMaWtlKG9iaikpIHsgLy8gaXMgdHlwZWQgYXJyYXlcclxuICAgICAgICAgICAgdmFyIHJldCA9IG5ldyBvYmouY29uc3RydWN0b3Iob2JqLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICByZXRbaV0gPSBvYmpbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1dGlsLmV4dGVuZCh7fSwgb2JqKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCB1dGlsO1xyXG4iLCJpbXBvcnQgZXh0ZW5kTWl4aW4gZnJvbSAnLi9taXhpbi9leHRlbmQnO1xyXG5pbXBvcnQgbm90aWZpZXJNaXhpbiBmcm9tICcuL21peGluL25vdGlmaWVyJztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi91dGlsJztcclxuXHJcbi8qKlxyXG4gKiBCYXNlIGNsYXNzIG9mIGFsbCBvYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5jb3JlLkJhc2VcclxuICogQG1peGVzIGNsYXkuY29yZS5taXhpbi5ub3RpZmllclxyXG4gKi9cclxudmFyIEJhc2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuX191aWRfXyA9IHV0aWwuZ2VuR1VJRCgpO1xyXG59O1xyXG5cclxuQmFzZS5fX2luaXRpYWxpemVyc19fID0gW1xyXG4gICAgZnVuY3Rpb24gKG9wdHMpIHtcclxuICAgICAgICB1dGlsLmV4dGVuZCh0aGlzLCBvcHRzKTtcclxuICAgIH1cclxuXTtcclxuXHJcbnV0aWwuZXh0ZW5kKEJhc2UsIGV4dGVuZE1peGluKTtcclxudXRpbC5leHRlbmQoQmFzZS5wcm90b3R5cGUsIG5vdGlmaWVyTWl4aW4pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmFzZTtcclxuIiwiZnVuY3Rpb24gZ2V0KG9wdGlvbnMpIHtcclxuXHJcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcblxyXG4gICAgeGhyLm9wZW4oJ2dldCcsIG9wdGlvbnMudXJsKTtcclxuICAgIC8vIFdpdGggcmVzcG9uc2UgdHlwZSBzZXQgYnJvd3NlciBjYW4gZ2V0IGFuZCBwdXQgYmluYXJ5IGRhdGFcclxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvRE9NL1hNTEh0dHBSZXF1ZXN0L1NlbmRpbmdfYW5kX1JlY2VpdmluZ19CaW5hcnlfRGF0YVxyXG4gICAgLy8gRGVmYXVsdCBpcyB0ZXh0LCBhbmQgaXQgY2FuIGJlIHNldFxyXG4gICAgLy8gYXJyYXlidWZmZXIsIGJsb2IsIGRvY3VtZW50LCBqc29uLCB0ZXh0XHJcbiAgICB4aHIucmVzcG9uc2VUeXBlID0gb3B0aW9ucy5yZXNwb25zZVR5cGUgfHwgJ3RleHQnO1xyXG5cclxuICAgIGlmIChvcHRpb25zLm9ucHJvZ3Jlc3MpIHtcclxuICAgICAgICAvL2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvRE9NL1hNTEh0dHBSZXF1ZXN0L1VzaW5nX1hNTEh0dHBSZXF1ZXN0XHJcbiAgICAgICAgeGhyLm9ucHJvZ3Jlc3MgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmxlbmd0aENvbXB1dGFibGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwZXJjZW50ID0gZS5sb2FkZWQgLyBlLnRvdGFsO1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vbnByb2dyZXNzKHBlcmNlbnQsIGUubG9hZGVkLCBlLnRvdGFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMub25wcm9ncmVzcyhudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIGlmICh4aHIuc3RhdHVzID49IDQwMCkge1xyXG4gICAgICAgICAgICBvcHRpb25zLm9uZXJyb3IgJiYgb3B0aW9ucy5vbmVycm9yKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvcHRpb25zLm9ubG9hZCAmJiBvcHRpb25zLm9ubG9hZCh4aHIucmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBpZiAob3B0aW9ucy5vbmVycm9yKSB7XHJcbiAgICAgICAgeGhyLm9uZXJyb3IgPSBvcHRpb25zLm9uZXJyb3I7XHJcbiAgICB9XHJcbiAgICB4aHIuc2VuZChudWxsKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgZ2V0OiBnZXRcclxufTtcclxuIiwiaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcclxuXHJcbnZhciBzdXBwb3J0V2ViR0w7XHJcblxyXG52YXIgdmVuZG9yID0ge307XHJcblxyXG4vKipcclxuICogSWYgc3VwcG9ydCBXZWJHTFxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKi9cclxudmVuZG9yLnN1cHBvcnRXZWJHTCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChzdXBwb3J0V2ViR0wgPT0gbnVsbCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgdmFyIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJykgfHwgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcpO1xyXG4gICAgICAgICAgICBpZiAoIWdsKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBzdXBwb3J0V2ViR0wgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1cHBvcnRXZWJHTDtcclxufTtcclxuXHJcbnZlbmRvci5JbnQ4QXJyYXkgPSB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IEFycmF5IDogSW50OEFycmF5O1xyXG5cclxudmVuZG9yLlVpbnQ4QXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IFVpbnQ4QXJyYXk7XHJcblxyXG52ZW5kb3IuVWludDE2QXJyYXkgPSB0eXBlb2YgVWludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBVaW50MTZBcnJheTtcclxuXHJcbnZlbmRvci5VaW50MzJBcnJheSA9IHR5cGVvZiBVaW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IFVpbnQzMkFycmF5O1xyXG5cclxudmVuZG9yLkludDE2QXJyYXkgPSB0eXBlb2YgSW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEludDE2QXJyYXk7XHJcblxyXG52ZW5kb3IuRmxvYXQzMkFycmF5ID0gdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEZsb2F0MzJBcnJheTtcclxuXHJcbnZlbmRvci5GbG9hdDY0QXJyYXkgPSB0eXBlb2YgRmxvYXQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IEFycmF5IDogRmxvYXQ2NEFycmF5O1xyXG5cclxudmFyIGcgPSB7fTtcclxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBnID0gd2luZG93O1xyXG59XHJcbmVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBnID0gZ2xvYmFsO1xyXG59XHJcblxyXG5cclxudmVuZG9yLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGcucmVxdWVzdEFuaW1hdGlvbkZyYW1lXHJcbiAgICB8fCBnLm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lXHJcbiAgICB8fCBnLm1velJlcXVlc3RBbmltYXRpb25GcmFtZVxyXG4gICAgfHwgZy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcclxuICAgIHx8IGZ1bmN0aW9uIChmdW5jKXsgc2V0VGltZW91dChmdW5jLCAxNik7IH07XHJcblxyXG52ZW5kb3IuY3JlYXRlQ2FudmFzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG59O1xyXG5cclxudmVuZG9yLmNyZWF0ZUltYWdlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIG5ldyBnLkltYWdlKCk7XHJcbn07XHJcblxyXG52ZW5kb3IucmVxdWVzdCA9IHtcclxuICAgIGdldDogcmVxdWVzdC5nZXRcclxufTtcclxuXHJcbnZlbmRvci5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGRvbSwgdHlwZSwgZnVuYywgdXNlQ2FwdHVyZSkge1xyXG4gICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZnVuYywgdXNlQ2FwdHVyZSk7XHJcbn07XHJcblxyXG52ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChkb20sIHR5cGUsIGZ1bmMpIHtcclxuICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmMpO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVuZG9yO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCBBbmltYXRvciBmcm9tICcuL2FuaW1hdGlvbi9BbmltYXRvcic7XHJcblxyXG5cclxuLyoqXHJcbiAqIEFuaW1hdGlvbiBpcyBnbG9iYWwgdGltZWxpbmUgdGhhdCBzY2hlZHVsZSBhbGwgY2xpcHMuIGVhY2ggZnJhbWUgYW5pbWF0aW9uIHdpbGwgc2V0IHRoZSB0aW1lIG9mIGNsaXBzIHRvIGN1cnJlbnQgYW5kIHVwZGF0ZSB0aGUgc3RhdGVzIG9mIGNsaXBzXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlRpbWVsaW5lXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIHZhciBhbmltYXRpb24gPSBuZXcgY2xheS5UaW1lbGluZSgpO1xyXG4gKiB2YXIgbm9kZSA9IG5ldyBjbGF5Lk5vZGUoKTtcclxuICogYW5pbWF0aW9uLmFuaW1hdGUobm9kZS5wb3NpdGlvbilcclxuICogICAgIC53aGVuKDEwMDAsIHtcclxuICogICAgICAgICB4OiA1MDAsXHJcbiAqICAgICAgICAgeTogNTAwXHJcbiAqICAgICB9KVxyXG4gKiAgICAgLndoZW4oMjAwMCwge1xyXG4gKiAgICAgICAgIHg6IDEwMCxcclxuICogICAgICAgICB5OiAxMDBcclxuICogICAgIH0pXHJcbiAqICAgICAud2hlbigzMDAwLCB7XHJcbiAqICAgICAgICAgejogMTBcclxuICogICAgIH0pXHJcbiAqICAgICAuc3RhcnQoJ3NwbGluZScpO1xyXG4gKi9cclxudmFyIFRpbWVsaW5lID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5UaW1lbGluZSMgKi97XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogc3RhZ2UgaXMgYW4gb2JqZWN0IHdpdGggcmVuZGVyIG1ldGhvZCwgZWFjaCBmcmFtZSBpZiB0aGVyZSBleGlzdHMgYW55IGFuaW1hdGluZyBjbGlwcywgc3RhZ2UucmVuZGVyIHdpbGwgYmUgY2FsbGVkXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzdGFnZTogbnVsbCxcclxuXHJcbiAgICAgICAgX2NsaXBzOiBbXSxcclxuXHJcbiAgICAgICAgX3J1bm5pbmc6IGZhbHNlLFxyXG5cclxuICAgICAgICBfdGltZTogMCxcclxuXHJcbiAgICAgICAgX3BhdXNlZDogZmFsc2UsXHJcblxyXG4gICAgICAgIF9wYXVzZWRUaW1lOiAwXHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuVGltZWxpbmUucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBhbmltYXRvclxyXG4gICAgICogQHBhcmFtIHtjbGF5LmFuaW1hdGUuQW5pbWF0b3J9IGFuaW1hdG9yXHJcbiAgICAgKi9cclxuICAgIGFkZEFuaW1hdG9yOiBmdW5jdGlvbiAoYW5pbWF0b3IpIHtcclxuICAgICAgICBhbmltYXRvci5hbmltYXRpb24gPSB0aGlzO1xyXG4gICAgICAgIHZhciBjbGlwcyA9IGFuaW1hdG9yLmdldENsaXBzKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGlwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFkZENsaXAoY2xpcHNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICAgICAqL1xyXG4gICAgYWRkQ2xpcDogZnVuY3Rpb24gKGNsaXApIHtcclxuICAgICAgICBpZiAodGhpcy5fY2xpcHMuaW5kZXhPZihjbGlwKSA8IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2xpcHMucHVzaChjbGlwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uQ2xpcH0gY2xpcFxyXG4gICAgICovXHJcbiAgICByZW1vdmVDbGlwOiBmdW5jdGlvbiAoY2xpcCkge1xyXG4gICAgICAgIHZhciBpZHggPSB0aGlzLl9jbGlwcy5pbmRleE9mKGNsaXApO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jbGlwcy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGFuaW1hdG9yXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuYW5pbWF0ZS5BbmltYXRvcn0gYW5pbWF0b3JcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQW5pbWF0b3I6IGZ1bmN0aW9uIChhbmltYXRvcikge1xyXG4gICAgICAgIHZhciBjbGlwcyA9IGFuaW1hdG9yLmdldENsaXBzKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGlwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNsaXAoY2xpcHNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhbmltYXRvci5hbmltYXRpb24gPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciB0aW1lID0gRGF0ZS5ub3coKSAtIHRoaXMuX3BhdXNlZFRpbWU7XHJcbiAgICAgICAgdmFyIGRlbHRhID0gdGltZSAtIHRoaXMuX3RpbWU7XHJcbiAgICAgICAgdmFyIGNsaXBzID0gdGhpcy5fY2xpcHM7XHJcbiAgICAgICAgdmFyIGxlbiA9IGNsaXBzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdmFyIGRlZmVycmVkRXZlbnRzID0gW107XHJcbiAgICAgICAgdmFyIGRlZmVycmVkQ2xpcHMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gY2xpcHNbaV07XHJcbiAgICAgICAgICAgIHZhciBlID0gY2xpcC5zdGVwKHRpbWUsIGRlbHRhLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIC8vIFRocm93IG91dCB0aGUgZXZlbnRzIG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyXHJcbiAgICAgICAgICAgIC8vIHN0YWdlLnJlbmRlciwgbGlrZSBmaW5pc2hcclxuICAgICAgICAgICAgaWYgKGUpIHtcclxuICAgICAgICAgICAgICAgIGRlZmVycmVkRXZlbnRzLnB1c2goZSk7XHJcbiAgICAgICAgICAgICAgICBkZWZlcnJlZENsaXBzLnB1c2goY2xpcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgZmluaXNoZWQgY2xpcFxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOykge1xyXG4gICAgICAgICAgICBpZiAoY2xpcHNbaV0uX25lZWRzUmVtb3ZlKSB7XHJcbiAgICAgICAgICAgICAgICBjbGlwc1tpXSA9IGNsaXBzW2xlbi0xXTtcclxuICAgICAgICAgICAgICAgIGNsaXBzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgbGVuLS07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxlbiA9IGRlZmVycmVkRXZlbnRzLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRlZmVycmVkQ2xpcHNbaV0uZmlyZShkZWZlcnJlZEV2ZW50c1tpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90aW1lID0gdGltZTtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdmcmFtZScsIGRlbHRhKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc3RhZ2UgJiYgdGhpcy5zdGFnZS5yZW5kZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFnZS5yZW5kZXIoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFydCBydW5uaW5nIGFuaW1hdGlvblxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5fcnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fdGltZSA9IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3BhdXNlZFRpbWUgPSAwO1xyXG5cclxuICAgICAgICB2YXIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gdmVuZG9yLnJlcXVlc3RBbmltYXRpb25GcmFtZTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcCgpIHtcclxuICAgICAgICAgICAgaWYgKHNlbGYuX3J1bm5pbmcpIHtcclxuXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFzZWxmLl9wYXVzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLl91cGRhdGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xyXG5cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFN0b3AgcnVubmluZyBhbmltYXRpb25cclxuICAgICAqL1xyXG4gICAgc3RvcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXVzZVxyXG4gICAgICovXHJcbiAgICBwYXVzZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlU3RhcnQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN1bWVcclxuICAgICAqL1xyXG4gICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wYXVzZWRUaW1lICs9IERhdGUubm93KCkgLSB0aGlzLl9wYXVzZVN0YXJ0O1xyXG4gICAgICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGFsbCBjbGlwc1xyXG4gICAgICovXHJcbiAgICByZW1vdmVDbGlwc0FsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NsaXBzID0gW107XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYW4gYW5pbWF0b3JcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtvcHRpb25zXVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW29wdGlvbnMubG9vcF1cclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb3B0aW9ucy5nZXR0ZXJdXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW29wdGlvbnMuc2V0dGVyXVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvcHRpb25zLmludGVycG9sYXRlcl1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICovXHJcbiAgICBhbmltYXRlOiBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zKSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICAgICAgdmFyIGFuaW1hdG9yID0gbmV3IEFuaW1hdG9yKFxyXG4gICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgIG9wdGlvbnMubG9vcCxcclxuICAgICAgICAgICAgb3B0aW9ucy5nZXR0ZXIsXHJcbiAgICAgICAgICAgIG9wdGlvbnMuc2V0dGVyLFxyXG4gICAgICAgICAgICBvcHRpb25zLmludGVycG9sYXRlclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYW5pbWF0b3IuYW5pbWF0aW9uID0gdGhpcztcclxuICAgICAgICByZXR1cm4gYW5pbWF0b3I7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGltZWxpbmU7XHJcbiIsIi8vIERFUFJFQ0FURURcclxuaW1wb3J0IFRpbWVsaW5lIGZyb20gJy4uL1RpbWVsaW5lJztcclxuZXhwb3J0IGRlZmF1bHQgVGltZWxpbmU7IiwiaW1wb3J0IENsaXAgZnJvbSAnLi9DbGlwJztcclxuXHJcbmltcG9ydCBxdWF0IGZyb20gJy4uL2dsbWF0cml4L3F1YXQnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcblxyXG4vKipcclxuICpcclxuICogQW5pbWF0aW9uIGNsaXAgdGhhdCBtYW5hZ2UgYSBjb2xsZWN0aW9uIG9mIHtAbGluayBjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t9XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hbmltYXRpb24uVHJhY2tDbGlwXHJcbiAqXHJcbiAqIEBleHRlbmRzIGNsYXkuYW5pbWF0aW9uLkNsaXBcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubmFtZV1cclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzLnRhcmdldF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmxpZmVdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5kZWxheV1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmdhcF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLnBsYXliYWNrUmF0aW9dXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbnxudW1iZXJ9IFtvcHRzLmxvb3BdIElmIGxvb3AgaXMgYSBudW1iZXIsIGl0IGluZGljYXRlIHRoZSBsb29wIGNvdW50IG9mIGFuaW1hdGlvblxyXG4gKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW29wdHMuZWFzaW5nXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZyYW1lXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZpbmlzaF1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25yZXN0YXJ0XVxyXG4gKiBAcGFyYW0ge0FycmF5LjxjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2s+fSBbb3B0cy50cmFja3NdXHJcbiAqL1xyXG52YXIgVHJhY2tDbGlwID0gZnVuY3Rpb24gKG9wdHMpIHtcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja1tdfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRyYWNrcyA9IG9wdHMudHJhY2tzIHx8IFtdO1xyXG5cclxuICAgIHRoaXMuY2FsY0xpZmVGcm9tVHJhY2tzKCk7XHJcbn07XHJcblxyXG5UcmFja0NsaXAucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGlwLnByb3RvdHlwZSk7XHJcblxyXG5UcmFja0NsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHJhY2tDbGlwO1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5zdGVwID0gZnVuY3Rpb24gKHRpbWUsIGRUaW1lLCBzaWxlbnQpIHtcclxuXHJcbiAgICB2YXIgcmV0ID0gQ2xpcC5wcm90b3R5cGUuc3RlcC5jYWxsKHRoaXMsIHRpbWUsIGRUaW1lLCB0cnVlKTtcclxuXHJcbiAgICBpZiAocmV0ICE9PSAnZmluaXNoJykge1xyXG4gICAgICAgIHZhciB0aW1lID0gdGhpcy5nZXRFbGFwc2VkVGltZSgpO1xyXG4gICAgICAgIC8vIFRPRE8gbGlmZSBtYXkgYmUgY2hhbmdlZC5cclxuICAgICAgICBpZiAodGhpcy5fcmFuZ2UpIHtcclxuICAgICAgICAgICAgdGltZSA9IHRoaXMuX3JhbmdlWzBdICsgdGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUaW1lKHRpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBFTkRJTkcgU2NoZWR1bGVcclxuICAgIGlmICghc2lsZW50ICYmIHJldCAhPT0gJ3BhdXNlZCcpIHtcclxuICAgICAgICB0aGlzLmZpcmUoJ2ZyYW1lJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSByYW5nZVxyXG4gKi9cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5zZXRSYW5nZSA9IGZ1bmN0aW9uIChyYW5nZSkge1xyXG4gICAgdGhpcy5jYWxjTGlmZUZyb21UcmFja3MoKTtcclxuICAgIHRoaXMuX3JhbmdlID0gcmFuZ2U7XHJcbiAgICBpZiAocmFuZ2UpIHtcclxuICAgICAgICByYW5nZVsxXSA9IE1hdGgubWluKHJhbmdlWzFdLCB0aGlzLmxpZmUpO1xyXG4gICAgICAgIHJhbmdlWzBdID0gTWF0aC5taW4ocmFuZ2VbMF0sIHRoaXMubGlmZSk7XHJcbiAgICAgICAgdGhpcy5saWZlID0gKHJhbmdlWzFdIC0gcmFuZ2VbMF0pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLnRyYWNrc1tpXS5zZXRUaW1lKHRpbWUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5jYWxjTGlmZUZyb21UcmFja3MgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmxpZmUgPSAwO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHRoaXMubGlmZSA9IE1hdGgubWF4KHRoaXMubGlmZSwgdGhpcy50cmFja3NbaV0uZ2V0TWF4VGltZSgpKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja30gdHJhY2tcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuYWRkVHJhY2sgPSBmdW5jdGlvbiAodHJhY2spIHtcclxuICAgIHRoaXMudHJhY2tzLnB1c2godHJhY2spO1xyXG4gICAgdGhpcy5jYWxjTGlmZUZyb21UcmFja3MoKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja30gdHJhY2tcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUucmVtb3ZlVGFyY2sgPSBmdW5jdGlvbiAodHJhY2spIHtcclxuICAgIHZhciBpZHggPSB0aGlzLnRyYWNrcy5pbmRleE9mKHRyYWNrKTtcclxuICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgIHRoaXMudHJhY2tzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFRpbWVcclxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFRpbWVcclxuICogQHBhcmFtIHtib29sZWFufSBpc0xvb3BcclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfVxyXG4gKi9cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5nZXRTdWJDbGlwID0gZnVuY3Rpb24gKHN0YXJ0VGltZSwgZW5kVGltZSwgaXNMb29wKSB7XHJcbiAgICB2YXIgc3ViQ2xpcCA9IG5ldyBUcmFja0NsaXAoe1xyXG4gICAgICAgIG5hbWU6IHRoaXMubmFtZVxyXG4gICAgfSk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBzdWJUcmFjayA9IHRoaXMudHJhY2tzW2ldLmdldFN1YlRyYWNrKHN0YXJ0VGltZSwgZW5kVGltZSk7XHJcbiAgICAgICAgc3ViQ2xpcC5hZGRUcmFjayhzdWJUcmFjayk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzTG9vcCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5zZXRMb29wKGlzTG9vcCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3ViQ2xpcC5saWZlID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcclxuXHJcbiAgICByZXR1cm4gc3ViQ2xpcDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiAxZCBibGVuZGluZyBmcm9tIHR3byBza2lubmluZyBjbGlwc1xyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDJcclxuICogQHBhcmFtICB7bnVtYmVyfSB3XHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLmJsZW5kMUQgPSBmdW5jdGlvbiAoY2xpcDEsIGNsaXAyLCB3KSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGMxID0gY2xpcDEudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciBjMiA9IGNsaXAyLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgdENsaXAgPSB0aGlzLnRyYWNrc1tpXTtcclxuXHJcbiAgICAgICAgdENsaXAuYmxlbmQxRChjMSwgYzIsIHcpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZGl0aXZlIGJsZW5kaW5nIGZyb20gdHdvIHNraW5uaW5nIGNsaXBzXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDFcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMlxyXG4gKi9cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5hZGRpdGl2ZUJsZW5kID0gZnVuY3Rpb24gKGNsaXAxLCBjbGlwMikge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBjMSA9IGNsaXAxLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgYzIgPSBjbGlwMi50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIHRDbGlwID0gdGhpcy50cmFja3NbaV07XHJcblxyXG4gICAgICAgIHRDbGlwLmFkZGl0aXZlQmxlbmQoYzEsIGMyKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBTdWJ0cmFjdGl2ZSBibGVuZGluZyBmcm9tIHR3byBza2lubmluZyBjbGlwc1xyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDJcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuc3VidHJhY3RpdmVCbGVuZCA9IGZ1bmN0aW9uIChjbGlwMSwgY2xpcDIpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYzEgPSBjbGlwMS50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIGMyID0gY2xpcDIudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciB0Q2xpcCA9IHRoaXMudHJhY2tzW2ldO1xyXG5cclxuICAgICAgICB0Q2xpcC5zdWJ0cmFjdGl2ZUJsZW5kKGMxLCBjMik7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogMkQgYmxlbmRpbmcgZnJvbSB0aHJlZSBza2lubmluZyBjbGlwc1xyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDJcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwM1xyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IGZcclxuICogQHBhcmFtICB7bnVtYmVyfSBnXHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLmJsZW5kMkQgPSBmdW5jdGlvbiAoY2xpcDEsIGNsaXAyLCBjbGlwMywgZiwgZykge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBjMSA9IGNsaXAxLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgYzIgPSBjbGlwMi50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIGMzID0gY2xpcDMudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciB0Q2xpcCA9IHRoaXMudHJhY2tzW2ldO1xyXG5cclxuICAgICAgICB0Q2xpcC5ibGVuZDJEKGMxLCBjMiwgYzMsIGYsIGcpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgU1JUIG9mIGFsbCBqb2ludHMgY2xpcHMgZnJvbSBhbm90aGVyIFRyYWNrQ2xpcFxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXBcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChjbGlwKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHNUcmFjayA9IGNsaXAudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciB0VHJhY2sgPSB0aGlzLnRyYWNrc1tpXTtcclxuXHJcbiAgICAgICAgdmVjMy5jb3B5KHRUcmFjay5wb3NpdGlvbiwgc1RyYWNrLnBvc2l0aW9uKTtcclxuICAgICAgICB2ZWMzLmNvcHkodFRyYWNrLnNjYWxlLCBzVHJhY2suc2NhbGUpO1xyXG4gICAgICAgIHF1YXQuY29weSh0VHJhY2sucm90YXRpb24sIHNUcmFjay5yb3RhdGlvbik7XHJcbiAgICB9XHJcbn07XHJcblxyXG5UcmFja0NsaXAucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGNsaXAgPSBDbGlwLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNsaXAuYWRkVHJhY2sodGhpcy50cmFja3NbaV0uY2xvbmUoKSk7XHJcbiAgICB9XHJcbiAgICBjbGlwLmxpZmUgPSB0aGlzLmxpZmU7XHJcbiAgICByZXR1cm4gY2xpcDtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRyYWNrQ2xpcDtcclxuIiwidmFyIEVYVEVOU0lPTl9MSVNUID0gW1xyXG4gICAgJ09FU190ZXh0dXJlX2Zsb2F0JyxcclxuICAgICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0JyxcclxuICAgICdPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXInLFxyXG4gICAgJ09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyJyxcclxuICAgICdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMnLFxyXG4gICAgJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JyxcclxuICAgICdPRVNfZWxlbWVudF9pbmRleF91aW50JyxcclxuICAgICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycsXHJcbiAgICAnV0VCR0xfZGVwdGhfdGV4dHVyZScsXHJcbiAgICAnRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyxcclxuICAgICdFWFRfc2hhZGVyX3RleHR1cmVfbG9kJyxcclxuICAgICdXRUJHTF9kcmF3X2J1ZmZlcnMnLFxyXG4gICAgJ0VYVF9mcmFnX2RlcHRoJyxcclxuICAgICdFWFRfc1JHQidcclxuXTtcclxuXHJcbnZhciBQQVJBTUVURVJfTkFNRVMgPSBbXHJcbiAgICAnTUFYX1RFWFRVUkVfU0laRScsXHJcbiAgICAnTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSdcclxuXTtcclxuXHJcbmZ1bmN0aW9uIEdMSW5mbyhfZ2wpIHtcclxuICAgIHZhciBleHRlbnNpb25zID0ge307XHJcbiAgICB2YXIgcGFyYW1ldGVycyA9IHt9O1xyXG5cclxuICAgIC8vIEdldCB3ZWJnbCBleHRlbnNpb25cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgRVhURU5TSU9OX0xJU1QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgZXh0TmFtZSA9IEVYVEVOU0lPTl9MSVNUW2ldO1xyXG4gICAgICAgIGNyZWF0ZUV4dGVuc2lvbihleHROYW1lKTtcclxuICAgIH1cclxuICAgIC8vIEdldCBwYXJhbWV0ZXJzXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IFBBUkFNRVRFUl9OQU1FUy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBuYW1lID0gUEFSQU1FVEVSX05BTUVTW2ldO1xyXG4gICAgICAgIHBhcmFtZXRlcnNbbmFtZV0gPSBfZ2wuZ2V0UGFyYW1ldGVyKF9nbFtuYW1lXSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIGlmICghKG5hbWUgaW4gZXh0ZW5zaW9ucykpIHtcclxuICAgICAgICAgICAgY3JlYXRlRXh0ZW5zaW9uKG5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXh0ZW5zaW9uc1tuYW1lXTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5nZXRQYXJhbWV0ZXIgPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBwYXJhbWV0ZXJzW25hbWVdO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmdldE1heEpvaW50TnVtYmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAxNTtcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gY3JlYXRlRXh0ZW5zaW9uKG5hbWUpIHtcclxuICAgICAgICBpZiAoX2dsLmdldEV4dGVuc2lvbikge1xyXG4gICAgICAgICAgICB2YXIgZXh0ID0gX2dsLmdldEV4dGVuc2lvbihuYW1lKTtcclxuICAgICAgICAgICAgaWYgKCFleHQpIHtcclxuICAgICAgICAgICAgICAgIGV4dCA9IF9nbC5nZXRFeHRlbnNpb24oJ01PWl8nICsgbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFleHQpIHtcclxuICAgICAgICAgICAgICAgIGV4dCA9IF9nbC5nZXRFeHRlbnNpb24oJ1dFQktJVF8nICsgbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZXh0ZW5zaW9uc1tuYW1lXSA9IGV4dDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdMSW5mbztcclxuIiwiLyoqXHJcbiAqIEBuYW1lc3BhY2UgY2xheS5jb3JlLmdsZW51bVxyXG4gKiBAc2VlIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc3BlY3MvbGF0ZXN0LzEuMC8jNS4xNFxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgLyogQ2xlYXJCdWZmZXJNYXNrICovXHJcbiAgICBERVBUSF9CVUZGRVJfQklUICAgICAgICAgICAgICAgOiAweDAwMDAwMTAwLFxyXG4gICAgU1RFTkNJTF9CVUZGRVJfQklUICAgICAgICAgICAgIDogMHgwMDAwMDQwMCxcclxuICAgIENPTE9SX0JVRkZFUl9CSVQgICAgICAgICAgICAgICA6IDB4MDAwMDQwMDAsXHJcblxyXG4gICAgLyogQmVnaW5Nb2RlICovXHJcbiAgICBQT0lOVFMgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDAsXHJcbiAgICBMSU5FUyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDEsXHJcbiAgICBMSU5FX0xPT1AgICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDIsXHJcbiAgICBMSU5FX1NUUklQICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDMsXHJcbiAgICBUUklBTkdMRVMgICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDQsXHJcbiAgICBUUklBTkdMRV9TVFJJUCAgICAgICAgICAgICAgICAgOiAweDAwMDUsXHJcbiAgICBUUklBTkdMRV9GQU4gICAgICAgICAgICAgICAgICAgOiAweDAwMDYsXHJcblxyXG4gICAgLyogQWxwaGFGdW5jdGlvbiAobm90IHN1cHBvcnRlZCBpbiBFUzIwKSAqL1xyXG4gICAgLyogICAgICBORVZFUiAqL1xyXG4gICAgLyogICAgICBMRVNTICovXHJcbiAgICAvKiAgICAgIEVRVUFMICovXHJcbiAgICAvKiAgICAgIExFUVVBTCAqL1xyXG4gICAgLyogICAgICBHUkVBVEVSICovXHJcbiAgICAvKiAgICAgIE5PVEVRVUFMICovXHJcbiAgICAvKiAgICAgIEdFUVVBTCAqL1xyXG4gICAgLyogICAgICBBTFdBWVMgKi9cclxuXHJcbiAgICAvKiBCbGVuZGluZ0ZhY3RvckRlc3QgKi9cclxuICAgIFpFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXHJcbiAgICBPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxLFxyXG4gICAgU1JDX0NPTE9SICAgICAgICAgICAgICAgICAgICAgIDogMHgwMzAwLFxyXG4gICAgT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgIDogMHgwMzAxLFxyXG4gICAgU1JDX0FMUEhBICAgICAgICAgICAgICAgICAgICAgIDogMHgwMzAyLFxyXG4gICAgT05FX01JTlVTX1NSQ19BTFBIQSAgICAgICAgICAgIDogMHgwMzAzLFxyXG4gICAgRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgIDogMHgwMzA0LFxyXG4gICAgT05FX01JTlVTX0RTVF9BTFBIQSAgICAgICAgICAgIDogMHgwMzA1LFxyXG5cclxuICAgIC8qIEJsZW5kaW5nRmFjdG9yU3JjICovXHJcbiAgICAvKiAgICAgIFpFUk8gKi9cclxuICAgIC8qICAgICAgT05FICovXHJcbiAgICBEU1RfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgOiAweDAzMDYsXHJcbiAgICBPTkVfTUlOVVNfRFNUX0NPTE9SICAgICAgICAgICAgOiAweDAzMDcsXHJcbiAgICBTUkNfQUxQSEFfU0FUVVJBVEUgICAgICAgICAgICAgOiAweDAzMDgsXHJcbiAgICAvKiAgICAgIFNSQ19BTFBIQSAqL1xyXG4gICAgLyogICAgICBPTkVfTUlOVVNfU1JDX0FMUEhBICovXHJcbiAgICAvKiAgICAgIERTVF9BTFBIQSAqL1xyXG4gICAgLyogICAgICBPTkVfTUlOVVNfRFNUX0FMUEhBICovXHJcblxyXG4gICAgLyogQmxlbmRFcXVhdGlvblNlcGFyYXRlICovXHJcbiAgICBGVU5DX0FERCAgICAgICAgICAgICAgICAgICAgICAgOiAweDgwMDYsXHJcbiAgICBCTEVORF9FUVVBVElPTiAgICAgICAgICAgICAgICAgOiAweDgwMDksXHJcbiAgICBCTEVORF9FUVVBVElPTl9SR0IgICAgICAgICAgICAgOiAweDgwMDksIC8qIHNhbWUgYXMgQkxFTkRfRVFVQVRJT04gKi9cclxuICAgIEJMRU5EX0VRVUFUSU9OX0FMUEhBICAgICAgICAgICA6IDB4ODgzRCxcclxuXHJcbiAgICAvKiBCbGVuZFN1YnRyYWN0ICovXHJcbiAgICBGVU5DX1NVQlRSQUNUICAgICAgICAgICAgICAgICAgOiAweDgwMEEsXHJcbiAgICBGVU5DX1JFVkVSU0VfU1VCVFJBQ1QgICAgICAgICAgOiAweDgwMEIsXHJcblxyXG4gICAgLyogU2VwYXJhdGUgQmxlbmQgRnVuY3Rpb25zICovXHJcbiAgICBCTEVORF9EU1RfUkdCICAgICAgICAgICAgICAgICAgOiAweDgwQzgsXHJcbiAgICBCTEVORF9TUkNfUkdCICAgICAgICAgICAgICAgICAgOiAweDgwQzksXHJcbiAgICBCTEVORF9EU1RfQUxQSEEgICAgICAgICAgICAgICAgOiAweDgwQ0EsXHJcbiAgICBCTEVORF9TUkNfQUxQSEEgICAgICAgICAgICAgICAgOiAweDgwQ0IsXHJcbiAgICBDT05TVEFOVF9DT0xPUiAgICAgICAgICAgICAgICAgOiAweDgwMDEsXHJcbiAgICBPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgICAgICAgOiAweDgwMDIsXHJcbiAgICBDT05TVEFOVF9BTFBIQSAgICAgICAgICAgICAgICAgOiAweDgwMDMsXHJcbiAgICBPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgICAgICAgOiAweDgwMDQsXHJcbiAgICBCTEVORF9DT0xPUiAgICAgICAgICAgICAgICAgICAgOiAweDgwMDUsXHJcblxyXG4gICAgLyogQnVmZmVyIE9iamVjdHMgKi9cclxuICAgIEFSUkFZX0JVRkZFUiAgICAgICAgICAgICAgICAgICA6IDB4ODg5MixcclxuICAgIEVMRU1FTlRfQVJSQVlfQlVGRkVSICAgICAgICAgICA6IDB4ODg5MyxcclxuICAgIEFSUkFZX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICA6IDB4ODg5NCxcclxuICAgIEVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICA6IDB4ODg5NSxcclxuXHJcbiAgICBTVFJFQU1fRFJBVyAgICAgICAgICAgICAgICAgICAgOiAweDg4RTAsXHJcbiAgICBTVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAgOiAweDg4RTQsXHJcbiAgICBEWU5BTUlDX0RSQVcgICAgICAgICAgICAgICAgICAgOiAweDg4RTgsXHJcblxyXG4gICAgQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgIDogMHg4NzY0LFxyXG4gICAgQlVGRkVSX1VTQUdFICAgICAgICAgICAgICAgICAgIDogMHg4NzY1LFxyXG5cclxuICAgIENVUlJFTlRfVkVSVEVYX0FUVFJJQiAgICAgICAgICA6IDB4ODYyNixcclxuXHJcbiAgICAvKiBDdWxsRmFjZU1vZGUgKi9cclxuICAgIEZST05UICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDQwNCxcclxuICAgIEJBQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDQwNSxcclxuICAgIEZST05UX0FORF9CQUNLICAgICAgICAgICAgICAgICA6IDB4MDQwOCxcclxuXHJcbiAgICAvKiBEZXB0aEZ1bmN0aW9uICovXHJcbiAgICAvKiAgICAgIE5FVkVSICovXHJcbiAgICAvKiAgICAgIExFU1MgKi9cclxuICAgIC8qICAgICAgRVFVQUwgKi9cclxuICAgIC8qICAgICAgTEVRVUFMICovXHJcbiAgICAvKiAgICAgIEdSRUFURVIgKi9cclxuICAgIC8qICAgICAgTk9URVFVQUwgKi9cclxuICAgIC8qICAgICAgR0VRVUFMICovXHJcbiAgICAvKiAgICAgIEFMV0FZUyAqL1xyXG5cclxuICAgIC8qIEVuYWJsZUNhcCAqL1xyXG4gICAgLyogVEVYVFVSRV8yRCAqL1xyXG4gICAgQ1VMTF9GQUNFICAgICAgICAgICAgICAgICAgICAgIDogMHgwQjQ0LFxyXG4gICAgQkxFTkQgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwQkUyLFxyXG4gICAgRElUSEVSICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwQkQwLFxyXG4gICAgU1RFTkNJTF9URVNUICAgICAgICAgICAgICAgICAgIDogMHgwQjkwLFxyXG4gICAgREVQVEhfVEVTVCAgICAgICAgICAgICAgICAgICAgIDogMHgwQjcxLFxyXG4gICAgU0NJU1NPUl9URVNUICAgICAgICAgICAgICAgICAgIDogMHgwQzExLFxyXG4gICAgUE9MWUdPTl9PRkZTRVRfRklMTCAgICAgICAgICAgIDogMHg4MDM3LFxyXG4gICAgU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFICAgICAgIDogMHg4MDlFLFxyXG4gICAgU0FNUExFX0NPVkVSQUdFICAgICAgICAgICAgICAgIDogMHg4MEEwLFxyXG5cclxuICAgIC8qIEVycm9yQ29kZSAqL1xyXG4gICAgTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgIDogMCxcclxuICAgIElOVkFMSURfRU5VTSAgICAgICAgICAgICAgICAgICA6IDB4MDUwMCxcclxuICAgIElOVkFMSURfVkFMVUUgICAgICAgICAgICAgICAgICA6IDB4MDUwMSxcclxuICAgIElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA6IDB4MDUwMixcclxuICAgIE9VVF9PRl9NRU1PUlkgICAgICAgICAgICAgICAgICA6IDB4MDUwNSxcclxuXHJcbiAgICAvKiBGcm9udEZhY2VEaXJlY3Rpb24gKi9cclxuICAgIENXICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDkwMCxcclxuICAgIENDVyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDkwMSxcclxuXHJcbiAgICAvKiBHZXRQTmFtZSAqL1xyXG4gICAgTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDogMHgwQjIxLFxyXG4gICAgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFICAgICAgIDogMHg4NDZELFxyXG4gICAgQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFICAgICAgIDogMHg4NDZFLFxyXG4gICAgQ1VMTF9GQUNFX01PREUgICAgICAgICAgICAgICAgIDogMHgwQjQ1LFxyXG4gICAgRlJPTlRfRkFDRSAgICAgICAgICAgICAgICAgICAgIDogMHgwQjQ2LFxyXG4gICAgREVQVEhfUkFOR0UgICAgICAgICAgICAgICAgICAgIDogMHgwQjcwLFxyXG4gICAgREVQVEhfV1JJVEVNQVNLICAgICAgICAgICAgICAgIDogMHgwQjcyLFxyXG4gICAgREVQVEhfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgIDogMHgwQjczLFxyXG4gICAgREVQVEhfRlVOQyAgICAgICAgICAgICAgICAgICAgIDogMHgwQjc0LFxyXG4gICAgU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAgICAgIDogMHgwQjkxLFxyXG4gICAgU1RFTkNJTF9GVU5DICAgICAgICAgICAgICAgICAgIDogMHgwQjkyLFxyXG4gICAgU1RFTkNJTF9GQUlMICAgICAgICAgICAgICAgICAgIDogMHgwQjk0LFxyXG4gICAgU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUwgICAgICAgIDogMHgwQjk1LFxyXG4gICAgU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MgICAgICAgIDogMHgwQjk2LFxyXG4gICAgU1RFTkNJTF9SRUYgICAgICAgICAgICAgICAgICAgIDogMHgwQjk3LFxyXG4gICAgU1RFTkNJTF9WQUxVRV9NQVNLICAgICAgICAgICAgIDogMHgwQjkzLFxyXG4gICAgU1RFTkNJTF9XUklURU1BU0sgICAgICAgICAgICAgIDogMHgwQjk4LFxyXG4gICAgU1RFTkNJTF9CQUNLX0ZVTkMgICAgICAgICAgICAgIDogMHg4ODAwLFxyXG4gICAgU1RFTkNJTF9CQUNLX0ZBSUwgICAgICAgICAgICAgIDogMHg4ODAxLFxyXG4gICAgU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCAgIDogMHg4ODAyLFxyXG4gICAgU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyAgIDogMHg4ODAzLFxyXG4gICAgU1RFTkNJTF9CQUNLX1JFRiAgICAgICAgICAgICAgIDogMHg4Q0EzLFxyXG4gICAgU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0sgICAgICAgIDogMHg4Q0E0LFxyXG4gICAgU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyAgICAgICAgIDogMHg4Q0E1LFxyXG4gICAgVklFV1BPUlQgICAgICAgICAgICAgICAgICAgICAgIDogMHgwQkEyLFxyXG4gICAgU0NJU1NPUl9CT1ggICAgICAgICAgICAgICAgICAgIDogMHgwQzEwLFxyXG4gICAgLyogICAgICBTQ0lTU09SX1RFU1QgKi9cclxuICAgIENPTE9SX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICA6IDB4MEMyMixcclxuICAgIENPTE9SX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA6IDB4MEMyMyxcclxuICAgIFVOUEFDS19BTElHTk1FTlQgICAgICAgICAgICAgICA6IDB4MENGNSxcclxuICAgIFBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgICA6IDB4MEQwNSxcclxuICAgIE1BWF9URVhUVVJFX1NJWkUgICAgICAgICAgICAgICA6IDB4MEQzMyxcclxuICAgIE1BWF9WSUVXUE9SVF9ESU1TICAgICAgICAgICAgICA6IDB4MEQzQSxcclxuICAgIFNVQlBJWEVMX0JJVFMgICAgICAgICAgICAgICAgICA6IDB4MEQ1MCxcclxuICAgIFJFRF9CSVRTICAgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1MixcclxuICAgIEdSRUVOX0JJVFMgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1MyxcclxuICAgIEJMVUVfQklUUyAgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1NCxcclxuICAgIEFMUEhBX0JJVFMgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1NSxcclxuICAgIERFUFRIX0JJVFMgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1NixcclxuICAgIFNURU5DSUxfQklUUyAgICAgICAgICAgICAgICAgICA6IDB4MEQ1NyxcclxuICAgIFBPTFlHT05fT0ZGU0VUX1VOSVRTICAgICAgICAgICA6IDB4MkEwMCxcclxuICAgIC8qICAgICAgUE9MWUdPTl9PRkZTRVRfRklMTCAqL1xyXG4gICAgUE9MWUdPTl9PRkZTRVRfRkFDVE9SICAgICAgICAgIDogMHg4MDM4LFxyXG4gICAgVEVYVFVSRV9CSU5ESU5HXzJEICAgICAgICAgICAgIDogMHg4MDY5LFxyXG4gICAgU0FNUExFX0JVRkZFUlMgICAgICAgICAgICAgICAgIDogMHg4MEE4LFxyXG4gICAgU0FNUExFUyAgICAgICAgICAgICAgICAgICAgICAgIDogMHg4MEE5LFxyXG4gICAgU0FNUExFX0NPVkVSQUdFX1ZBTFVFICAgICAgICAgIDogMHg4MEFBLFxyXG4gICAgU0FNUExFX0NPVkVSQUdFX0lOVkVSVCAgICAgICAgIDogMHg4MEFCLFxyXG5cclxuICAgIC8qIEdldFRleHR1cmVQYXJhbWV0ZXIgKi9cclxuICAgIC8qICAgICAgVEVYVFVSRV9NQUdfRklMVEVSICovXHJcbiAgICAvKiAgICAgIFRFWFRVUkVfTUlOX0ZJTFRFUiAqL1xyXG4gICAgLyogICAgICBURVhUVVJFX1dSQVBfUyAqL1xyXG4gICAgLyogICAgICBURVhUVVJFX1dSQVBfVCAqL1xyXG5cclxuICAgIENPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTICAgICA6IDB4ODZBMyxcclxuXHJcbiAgICAvKiBIaW50TW9kZSAqL1xyXG4gICAgRE9OVF9DQVJFICAgICAgICAgICAgICAgICAgICAgIDogMHgxMTAwLFxyXG4gICAgRkFTVEVTVCAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxMTAxLFxyXG4gICAgTklDRVNUICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxMTAyLFxyXG5cclxuICAgIC8qIEhpbnRUYXJnZXQgKi9cclxuICAgIEdFTkVSQVRFX01JUE1BUF9ISU5UICAgICAgICAgICAgOiAweDgxOTIsXHJcblxyXG4gICAgLyogRGF0YVR5cGUgKi9cclxuICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTQwMCxcclxuICAgIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICA6IDB4MTQwMSxcclxuICAgIFNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTQwMixcclxuICAgIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICA6IDB4MTQwMyxcclxuICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTQwNCxcclxuICAgIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICA6IDB4MTQwNSxcclxuICAgIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTQwNixcclxuXHJcbiAgICAvKiBQaXhlbEZvcm1hdCAqL1xyXG4gICAgREVQVEhfQ09NUE9ORU5UICAgICAgICAgICAgICAgIDogMHgxOTAyLFxyXG4gICAgQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxOTA2LFxyXG4gICAgUkdCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxOTA3LFxyXG4gICAgUkdCQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxOTA4LFxyXG4gICAgTFVNSU5BTkNFICAgICAgICAgICAgICAgICAgICAgIDogMHgxOTA5LFxyXG4gICAgTFVNSU5BTkNFX0FMUEhBICAgICAgICAgICAgICAgIDogMHgxOTBBLFxyXG5cclxuICAgIC8qIFBpeGVsVHlwZSAqL1xyXG4gICAgLyogICAgICBVTlNJR05FRF9CWVRFICovXHJcbiAgICBVTlNJR05FRF9TSE9SVF80XzRfNF80ICAgICAgICAgOiAweDgwMzMsXHJcbiAgICBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgOiAweDgwMzQsXHJcbiAgICBVTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAgICAgOiAweDgzNjMsXHJcblxyXG4gICAgLyogU2hhZGVycyAqL1xyXG4gICAgRlJBR01FTlRfU0hBREVSICAgICAgICAgICAgICAgICAgOiAweDhCMzAsXHJcbiAgICBWRVJURVhfU0hBREVSICAgICAgICAgICAgICAgICAgICA6IDB4OEIzMSxcclxuICAgIE1BWF9WRVJURVhfQVRUUklCUyAgICAgICAgICAgICAgIDogMHg4ODY5LFxyXG4gICAgTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgOiAweDhERkIsXHJcbiAgICBNQVhfVkFSWUlOR19WRUNUT1JTICAgICAgICAgICAgICA6IDB4OERGQyxcclxuICAgIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTIDogMHg4QjRELFxyXG4gICAgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgOiAweDhCNEMsXHJcbiAgICBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgICAgICAgICA6IDB4ODg3MixcclxuICAgIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMgICAgIDogMHg4REZELFxyXG4gICAgU0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgOiAweDhCNEYsXHJcbiAgICBERUxFVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgICA6IDB4OEI4MCxcclxuICAgIExJTktfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjgyLFxyXG4gICAgVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgOiAweDhCODMsXHJcbiAgICBBVFRBQ0hFRF9TSEFERVJTICAgICAgICAgICAgICAgICA6IDB4OEI4NSxcclxuICAgIEFDVElWRV9VTklGT1JNUyAgICAgICAgICAgICAgICAgIDogMHg4Qjg2LFxyXG4gICAgQUNUSVZFX0FUVFJJQlVURVMgICAgICAgICAgICAgICAgOiAweDhCODksXHJcbiAgICBTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04gICAgICAgICA6IDB4OEI4QyxcclxuICAgIENVUlJFTlRfUFJPR1JBTSAgICAgICAgICAgICAgICAgIDogMHg4QjhELFxyXG5cclxuICAgIC8qIFN0ZW5jaWxGdW5jdGlvbiAqL1xyXG4gICAgTkVWRVIgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjAwLFxyXG4gICAgTEVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjAxLFxyXG4gICAgRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjAyLFxyXG4gICAgTEVRVUFMICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjAzLFxyXG4gICAgR1JFQVRFUiAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjA0LFxyXG4gICAgTk9URVFVQUwgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjA1LFxyXG4gICAgR0VRVUFMICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjA2LFxyXG4gICAgQUxXQVlTICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjA3LFxyXG5cclxuICAgIC8qIFN0ZW5jaWxPcCAqL1xyXG4gICAgLyogICAgICBaRVJPICovXHJcbiAgICBLRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDFFMDAsXHJcbiAgICBSRVBMQUNFICAgICAgICAgICAgICAgICAgICAgICAgOiAweDFFMDEsXHJcbiAgICBJTkNSICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDFFMDIsXHJcbiAgICBERUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDFFMDMsXHJcbiAgICBJTlZFUlQgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE1MEEsXHJcbiAgICBJTkNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgOiAweDg1MDcsXHJcbiAgICBERUNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgOiAweDg1MDgsXHJcblxyXG4gICAgLyogU3RyaW5nTmFtZSAqL1xyXG4gICAgVkVORE9SICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRjAwLFxyXG4gICAgUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRjAxLFxyXG4gICAgVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRjAyLFxyXG5cclxuICAgIC8qIFRleHR1cmVNYWdGaWx0ZXIgKi9cclxuICAgIE5FQVJFU1QgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MjYwMCxcclxuICAgIExJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MjYwMSxcclxuXHJcbiAgICAvKiBUZXh0dXJlTWluRmlsdGVyICovXHJcbiAgICAvKiAgICAgIE5FQVJFU1QgKi9cclxuICAgIC8qICAgICAgTElORUFSICovXHJcbiAgICBORUFSRVNUX01JUE1BUF9ORUFSRVNUICAgICAgICAgOiAweDI3MDAsXHJcbiAgICBMSU5FQVJfTUlQTUFQX05FQVJFU1QgICAgICAgICAgOiAweDI3MDEsXHJcbiAgICBORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgOiAweDI3MDIsXHJcbiAgICBMSU5FQVJfTUlQTUFQX0xJTkVBUiAgICAgICAgICAgOiAweDI3MDMsXHJcblxyXG4gICAgLyogVGV4dHVyZVBhcmFtZXRlck5hbWUgKi9cclxuICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiAgICAgICAgICAgICA6IDB4MjgwMCxcclxuICAgIFRFWFRVUkVfTUlOX0ZJTFRFUiAgICAgICAgICAgICA6IDB4MjgwMSxcclxuICAgIFRFWFRVUkVfV1JBUF9TICAgICAgICAgICAgICAgICA6IDB4MjgwMixcclxuICAgIFRFWFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICA6IDB4MjgwMyxcclxuXHJcbiAgICAvKiBUZXh0dXJlVGFyZ2V0ICovXHJcbiAgICBURVhUVVJFXzJEICAgICAgICAgICAgICAgICAgICAgOiAweDBERTEsXHJcbiAgICBURVhUVVJFICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE3MDIsXHJcblxyXG4gICAgVEVYVFVSRV9DVUJFX01BUCAgICAgICAgICAgICAgIDogMHg4NTEzLFxyXG4gICAgVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQICAgICAgIDogMHg4NTE0LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICAgIDogMHg4NTE1LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YICAgIDogMHg4NTE2LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZICAgIDogMHg4NTE3LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZICAgIDogMHg4NTE4LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aICAgIDogMHg4NTE5LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aICAgIDogMHg4NTFBLFxyXG4gICAgTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSAgICAgIDogMHg4NTFDLFxyXG5cclxuICAgIC8qIFRleHR1cmVVbml0ICovXHJcbiAgICBURVhUVVJFMCAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzAsXHJcbiAgICBURVhUVVJFMSAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzEsXHJcbiAgICBURVhUVVJFMiAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzIsXHJcbiAgICBURVhUVVJFMyAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzMsXHJcbiAgICBURVhUVVJFNCAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzQsXHJcbiAgICBURVhUVVJFNSAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzUsXHJcbiAgICBURVhUVVJFNiAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzYsXHJcbiAgICBURVhUVVJFNyAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzcsXHJcbiAgICBURVhUVVJFOCAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzgsXHJcbiAgICBURVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzksXHJcbiAgICBURVhUVVJFMTAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0EsXHJcbiAgICBURVhUVVJFMTEgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0IsXHJcbiAgICBURVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0MsXHJcbiAgICBURVhUVVJFMTMgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0QsXHJcbiAgICBURVhUVVJFMTQgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0UsXHJcbiAgICBURVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0YsXHJcbiAgICBURVhUVVJFMTYgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDAsXHJcbiAgICBURVhUVVJFMTcgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDEsXHJcbiAgICBURVhUVVJFMTggICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDIsXHJcbiAgICBURVhUVVJFMTkgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDMsXHJcbiAgICBURVhUVVJFMjAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDQsXHJcbiAgICBURVhUVVJFMjEgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDUsXHJcbiAgICBURVhUVVJFMjIgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDYsXHJcbiAgICBURVhUVVJFMjMgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDcsXHJcbiAgICBURVhUVVJFMjQgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDgsXHJcbiAgICBURVhUVVJFMjUgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDksXHJcbiAgICBURVhUVVJFMjYgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REEsXHJcbiAgICBURVhUVVJFMjcgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REIsXHJcbiAgICBURVhUVVJFMjggICAgICAgICAgICAgICAgICAgICAgOiAweDg0REMsXHJcbiAgICBURVhUVVJFMjkgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REQsXHJcbiAgICBURVhUVVJFMzAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REUsXHJcbiAgICBURVhUVVJFMzEgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REYsXHJcbiAgICBBQ1RJVkVfVEVYVFVSRSAgICAgICAgICAgICAgICAgOiAweDg0RTAsXHJcblxyXG4gICAgLyogVGV4dHVyZVdyYXBNb2RlICovXHJcbiAgICBSRVBFQVQgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDI5MDEsXHJcbiAgICBDTEFNUF9UT19FREdFICAgICAgICAgICAgICAgICAgOiAweDgxMkYsXHJcbiAgICBNSVJST1JFRF9SRVBFQVQgICAgICAgICAgICAgICAgOiAweDgzNzAsXHJcblxyXG4gICAgLyogVW5pZm9ybSBUeXBlcyAqL1xyXG4gICAgRkxPQVRfVkVDMiAgICAgICAgICAgICAgICAgICAgIDogMHg4QjUwLFxyXG4gICAgRkxPQVRfVkVDMyAgICAgICAgICAgICAgICAgICAgIDogMHg4QjUxLFxyXG4gICAgRkxPQVRfVkVDNCAgICAgICAgICAgICAgICAgICAgIDogMHg4QjUyLFxyXG4gICAgSU5UX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjUzLFxyXG4gICAgSU5UX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU0LFxyXG4gICAgSU5UX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU1LFxyXG4gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU2LFxyXG4gICAgQk9PTF9WRUMyICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU3LFxyXG4gICAgQk9PTF9WRUMzICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU4LFxyXG4gICAgQk9PTF9WRUM0ICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU5LFxyXG4gICAgRkxPQVRfTUFUMiAgICAgICAgICAgICAgICAgICAgIDogMHg4QjVBLFxyXG4gICAgRkxPQVRfTUFUMyAgICAgICAgICAgICAgICAgICAgIDogMHg4QjVCLFxyXG4gICAgRkxPQVRfTUFUNCAgICAgICAgICAgICAgICAgICAgIDogMHg4QjVDLFxyXG4gICAgU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAgIDogMHg4QjVFLFxyXG4gICAgU0FNUExFUl9DVUJFICAgICAgICAgICAgICAgICAgIDogMHg4QjYwLFxyXG5cclxuICAgIC8qIFZlcnRleCBBcnJheXMgKi9cclxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAgOiAweDg2MjIsXHJcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX1NJWkUgICAgICAgICAgIDogMHg4NjIzLFxyXG4gICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUgICAgICAgICA6IDB4ODYyNCxcclxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSAgICAgICAgICAgOiAweDg2MjUsXHJcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQgICAgIDogMHg4ODZBLFxyXG4gICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSICAgICAgICA6IDB4ODY0NSxcclxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkcgOiAweDg4OUYsXHJcblxyXG4gICAgLyogU2hhZGVyIFNvdXJjZSAqL1xyXG4gICAgQ09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgIDogMHg4QjgxLFxyXG5cclxuICAgIC8qIFNoYWRlciBQcmVjaXNpb24tU3BlY2lmaWVkIFR5cGVzICovXHJcbiAgICBMT1dfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgOiAweDhERjAsXHJcbiAgICBNRURJVU1fRkxPQVQgICAgICAgICAgICAgICAgICAgOiAweDhERjEsXHJcbiAgICBISUdIX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgOiAweDhERjIsXHJcbiAgICBMT1dfSU5UICAgICAgICAgICAgICAgICAgICAgICAgOiAweDhERjMsXHJcbiAgICBNRURJVU1fSU5UICAgICAgICAgICAgICAgICAgICAgOiAweDhERjQsXHJcbiAgICBISUdIX0lOVCAgICAgICAgICAgICAgICAgICAgICAgOiAweDhERjUsXHJcblxyXG4gICAgLyogRnJhbWVidWZmZXIgT2JqZWN0LiAqL1xyXG4gICAgRlJBTUVCVUZGRVIgICAgICAgICAgICAgICAgICAgIDogMHg4RDQwLFxyXG4gICAgUkVOREVSQlVGRkVSICAgICAgICAgICAgICAgICAgIDogMHg4RDQxLFxyXG5cclxuICAgIFJHQkE0ICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4ODA1NixcclxuICAgIFJHQjVfQTEgICAgICAgICAgICAgICAgICAgICAgICA6IDB4ODA1NyxcclxuICAgIFJHQjU2NSAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEQ2MixcclxuICAgIERFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA6IDB4ODFBNSxcclxuICAgIFNURU5DSUxfSU5ERVggICAgICAgICAgICAgICAgICA6IDB4MTkwMSxcclxuICAgIFNURU5DSUxfSU5ERVg4ICAgICAgICAgICAgICAgICA6IDB4OEQ0OCxcclxuICAgIERFUFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICA6IDB4ODRGOSxcclxuXHJcbiAgICBSRU5ERVJCVUZGRVJfV0lEVEggICAgICAgICAgICAgOiAweDhENDIsXHJcbiAgICBSRU5ERVJCVUZGRVJfSEVJR0hUICAgICAgICAgICAgOiAweDhENDMsXHJcbiAgICBSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUICAgOiAweDhENDQsXHJcbiAgICBSRU5ERVJCVUZGRVJfUkVEX1NJWkUgICAgICAgICAgOiAweDhENTAsXHJcbiAgICBSRU5ERVJCVUZGRVJfR1JFRU5fU0laRSAgICAgICAgOiAweDhENTEsXHJcbiAgICBSRU5ERVJCVUZGRVJfQkxVRV9TSVpFICAgICAgICAgOiAweDhENTIsXHJcbiAgICBSRU5ERVJCVUZGRVJfQUxQSEFfU0laRSAgICAgICAgOiAweDhENTMsXHJcbiAgICBSRU5ERVJCVUZGRVJfREVQVEhfU0laRSAgICAgICAgOiAweDhENTQsXHJcbiAgICBSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFICAgICAgOiAweDhENTUsXHJcblxyXG4gICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSAgICAgICAgICAgOiAweDhDRDAsXHJcbiAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAgICA6IDB4OENEMSxcclxuICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTCAgICAgICAgIDogMHg4Q0QyLFxyXG4gICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0UgOiAweDhDRDMsXHJcblxyXG4gICAgQ09MT1JfQVRUQUNITUVOVDAgICAgICAgICAgICAgIDogMHg4Q0UwLFxyXG4gICAgREVQVEhfQVRUQUNITUVOVCAgICAgICAgICAgICAgIDogMHg4RDAwLFxyXG4gICAgU1RFTkNJTF9BVFRBQ0hNRU5UICAgICAgICAgICAgIDogMHg4RDIwLFxyXG4gICAgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UICAgICAgIDogMHg4MjFBLFxyXG5cclxuICAgIE5PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXHJcblxyXG4gICAgRlJBTUVCVUZGRVJfQ09NUExFVEUgICAgICAgICAgICAgICAgICAgICAgOiAweDhDRDUsXHJcbiAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgICAgICAgICA6IDB4OENENixcclxuICAgIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UIDogMHg4Q0Q3LFxyXG4gICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TICAgICAgICAgOiAweDhDRDksXHJcbiAgICBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCAgICAgICAgICAgICAgICAgICA6IDB4OENERCxcclxuXHJcbiAgICBGUkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgOiAweDhDQTYsXHJcbiAgICBSRU5ERVJCVUZGRVJfQklORElORyAgICAgICAgICAgOiAweDhDQTcsXHJcbiAgICBNQVhfUkVOREVSQlVGRkVSX1NJWkUgICAgICAgICAgOiAweDg0RTgsXHJcblxyXG4gICAgSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gIDogMHgwNTA2LFxyXG5cclxuICAgIC8qIFdlYkdMLXNwZWNpZmljIGVudW1zICovXHJcbiAgICBVTlBBQ0tfRkxJUF9ZX1dFQkdMICAgICAgICAgICAgOiAweDkyNDAsXHJcbiAgICBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgOiAweDkyNDEsXHJcbiAgICBDT05URVhUX0xPU1RfV0VCR0wgICAgICAgICAgICAgOiAweDkyNDIsXHJcbiAgICBVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIDogMHg5MjQzLFxyXG4gICAgQlJPV1NFUl9ERUZBVUxUX1dFQkdMICAgICAgICAgIDogMHg5MjQ0LFxyXG59O1xyXG4iLCIvKipcclxuICogU2ltcGxlIGRvdWJsZSBsaW5rZWQgbGlzdC4gQ29tcGFyZWQgd2l0aCBhcnJheSwgaXQgaGFzIE8oMSkgcmVtb3ZlIG9wZXJhdGlvbi5cclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmNvcmUuTGlua2VkTGlzdFxyXG4gKi9cclxudmFyIExpbmtlZExpc3QgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuaGVhZCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMudGFpbCA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5fbGVuZ3RoID0gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnNlcnQgYSBuZXcgdmFsdWUgYXQgdGhlIHRhaWxcclxuICogQHBhcmFtICB7fSB2YWxcclxuICogQHJldHVybiB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbiAodmFsKSB7XHJcbiAgICB2YXIgZW50cnkgPSBuZXcgTGlua2VkTGlzdC5FbnRyeSh2YWwpO1xyXG4gICAgdGhpcy5pbnNlcnRFbnRyeShlbnRyeSk7XHJcbiAgICByZXR1cm4gZW50cnk7XHJcbn07XHJcblxyXG4vKipcclxuICogSW5zZXJ0IGEgbmV3IHZhbHVlIGF0IGlkeFxyXG4gKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAqIEBwYXJhbSAge30gdmFsXHJcbiAqIEByZXR1cm4ge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuaW5zZXJ0QXQgPSBmdW5jdGlvbiAoaWR4LCB2YWwpIHtcclxuICAgIGlmIChpZHggPCAwKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIG5leHQgPSB0aGlzLmhlYWQ7XHJcbiAgICB2YXIgY3Vyc29yID0gMDtcclxuICAgIHdoaWxlIChuZXh0ICYmIGN1cnNvciAhPSBpZHgpIHtcclxuICAgICAgICBuZXh0ID0gbmV4dC5uZXh0O1xyXG4gICAgICAgIGN1cnNvcisrO1xyXG4gICAgfVxyXG4gICAgaWYgKG5leHQpIHtcclxuICAgICAgICB2YXIgZW50cnkgPSBuZXcgTGlua2VkTGlzdC5FbnRyeSh2YWwpO1xyXG4gICAgICAgIHZhciBwcmV2ID0gbmV4dC5wcmV2O1xyXG4gICAgICAgIGlmICghcHJldikgeyAvL25leHQgaXMgaGVhZFxyXG4gICAgICAgICAgICB0aGlzLmhlYWQgPSBlbnRyeTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHByZXYubmV4dCA9IGVudHJ5O1xyXG4gICAgICAgICAgICBlbnRyeS5wcmV2ID0gcHJldjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZW50cnkubmV4dCA9IG5leHQ7XHJcbiAgICAgICAgbmV4dC5wcmV2ID0gZW50cnk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmluc2VydCh2YWwpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlRW50cnkgPSBmdW5jdGlvbiAodmFsLCBuZXh0KSB7XHJcbiAgICB2YXIgZW50cnkgPSBuZXcgTGlua2VkTGlzdC5FbnRyeSh2YWwpO1xyXG4gICAgdmFyIHByZXYgPSBuZXh0LnByZXY7XHJcbiAgICBpZiAoIXByZXYpIHsgLy9uZXh0IGlzIGhlYWRcclxuICAgICAgICB0aGlzLmhlYWQgPSBlbnRyeTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHByZXYubmV4dCA9IGVudHJ5O1xyXG4gICAgICAgIGVudHJ5LnByZXYgPSBwcmV2O1xyXG4gICAgfVxyXG4gICAgZW50cnkubmV4dCA9IG5leHQ7XHJcbiAgICBuZXh0LnByZXYgPSBlbnRyeTtcclxuXHJcbiAgICB0aGlzLl9sZW5ndGgrKztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnNlcnQgYW4gZW50cnkgYXQgdGhlIHRhaWxcclxuICogQHBhcmFtICB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9IGVudHJ5XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5pbnNlcnRFbnRyeSA9IGZ1bmN0aW9uIChlbnRyeSkge1xyXG4gICAgaWYgKCF0aGlzLmhlYWQpIHtcclxuICAgICAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBlbnRyeTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMudGFpbC5uZXh0ID0gZW50cnk7XHJcbiAgICAgICAgZW50cnkucHJldiA9IHRoaXMudGFpbDtcclxuICAgICAgICB0aGlzLnRhaWwgPSBlbnRyeTtcclxuICAgIH1cclxuICAgIHRoaXMuX2xlbmd0aCsrO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSBlbnRyeS5cclxuICogQHBhcmFtICB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9IGVudHJ5XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoZW50cnkpIHtcclxuICAgIHZhciBwcmV2ID0gZW50cnkucHJldjtcclxuICAgIHZhciBuZXh0ID0gZW50cnkubmV4dDtcclxuICAgIGlmIChwcmV2KSB7XHJcbiAgICAgICAgcHJldi5uZXh0ID0gbmV4dDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIElzIGhlYWRcclxuICAgICAgICB0aGlzLmhlYWQgPSBuZXh0O1xyXG4gICAgfVxyXG4gICAgaWYgKG5leHQpIHtcclxuICAgICAgICBuZXh0LnByZXYgPSBwcmV2O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gSXMgdGFpbFxyXG4gICAgICAgIHRoaXMudGFpbCA9IHByZXY7XHJcbiAgICB9XHJcbiAgICBlbnRyeS5uZXh0ID0gZW50cnkucHJldiA9IG51bGw7XHJcbiAgICB0aGlzLl9sZW5ndGgtLTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZW1vdmUgZW50cnkgYXQgaW5kZXguXHJcbiAqIEBwYXJhbSAge251bWJlcn0gaWR4XHJcbiAqIEByZXR1cm4ge31cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLnJlbW92ZUF0ID0gZnVuY3Rpb24gKGlkeCkge1xyXG4gICAgaWYgKGlkeCA8IDApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgY3VyciA9IHRoaXMuaGVhZDtcclxuICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgd2hpbGUgKGN1cnIgJiYgY3Vyc29yICE9IGlkeCkge1xyXG4gICAgICAgIGN1cnIgPSBjdXJyLm5leHQ7XHJcbiAgICAgICAgY3Vyc29yKys7XHJcbiAgICB9XHJcbiAgICBpZiAoY3Vycikge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlKGN1cnIpO1xyXG4gICAgICAgIHJldHVybiBjdXJyLnZhbHVlO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogR2V0IGhlYWQgdmFsdWVcclxuICogQHJldHVybiB7fVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuZ2V0SGVhZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLmhlYWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oZWFkLnZhbHVlO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogR2V0IHRhaWwgdmFsdWVcclxuICogQHJldHVybiB7fVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuZ2V0VGFpbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLnRhaWwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50YWlsLnZhbHVlO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogR2V0IHZhbHVlIGF0IGlkeFxyXG4gKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAqIEByZXR1cm4ge31cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmdldEF0ID0gZnVuY3Rpb24gKGlkeCkge1xyXG4gICAgaWYgKGlkeCA8IDApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgY3VyciA9IHRoaXMuaGVhZDtcclxuICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgd2hpbGUgKGN1cnIgJiYgY3Vyc29yICE9IGlkeCkge1xyXG4gICAgICAgIGN1cnIgPSBjdXJyLm5leHQ7XHJcbiAgICAgICAgY3Vyc29yKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3Vyci52YWx1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHt9IHZhbHVlXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHZhciBjdXJyID0gdGhpcy5oZWFkO1xyXG4gICAgdmFyIGN1cnNvciA9IDA7XHJcbiAgICB3aGlsZSAoY3Vycikge1xyXG4gICAgICAgIGlmIChjdXJyLnZhbHVlID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY3Vyc29yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyID0gY3Vyci5uZXh0O1xyXG4gICAgICAgIGN1cnNvcisrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLl9sZW5ndGg7XHJcbn07XHJcblxyXG4vKipcclxuICogSWYgbGlzdCBpcyBlbXB0eVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLl9sZW5ndGggPT09IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7RnVuY3Rpb259IGNiXHJcbiAqIEBwYXJhbSAge30gY29udGV4dFxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYiwgY29udGV4dCkge1xyXG4gICAgdmFyIGN1cnIgPSB0aGlzLmhlYWQ7XHJcbiAgICB2YXIgaWR4ID0gMDtcclxuICAgIHZhciBoYXZlQ29udGV4dCA9IHR5cGVvZihjb250ZXh0KSAhPSAndW5kZWZpbmVkJztcclxuICAgIHdoaWxlIChjdXJyKSB7XHJcbiAgICAgICAgaWYgKGhhdmVDb250ZXh0KSB7XHJcbiAgICAgICAgICAgIGNiLmNhbGwoY29udGV4dCwgY3Vyci52YWx1ZSwgaWR4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNiKGN1cnIudmFsdWUsIGlkeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cnIgPSBjdXJyLm5leHQ7XHJcbiAgICAgICAgaWR4Kys7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xlYXIgdGhlIGxpc3RcclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy50YWlsID0gdGhpcy5oZWFkID0gbnVsbDtcclxuICAgIHRoaXMuX2xlbmd0aCA9IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBwYXJhbSB7fSB2YWxcclxuICovXHJcbkxpbmtlZExpc3QuRW50cnkgPSBmdW5jdGlvbiAodmFsKSB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt9XHJcbiAgICAgKi9cclxuICAgIHRoaXMudmFsdWUgPSB2YWw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubmV4dCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucHJldiA9IG51bGw7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaW5rZWRMaXN0O1xyXG4iLCJpbXBvcnQgTGlua2VkTGlzdCBmcm9tICcuL0xpbmtlZExpc3QnO1xyXG5cclxuLyoqXHJcbiAqIExSVSBDYWNoZVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuY29yZS5MUlVcclxuICovXHJcbnZhciBMUlUgPSBmdW5jdGlvbiAobWF4U2l6ZSkge1xyXG5cclxuICAgIHRoaXMuX2xpc3QgPSBuZXcgTGlua2VkTGlzdCgpO1xyXG5cclxuICAgIHRoaXMuX21hcCA9IHt9O1xyXG5cclxuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplIHx8IDEwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBjYWNoZSBtYXggc2l6ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gc2l6ZVxyXG4gKi9cclxuTFJVLnByb3RvdHlwZS5zZXRNYXhTaXplID0gZnVuY3Rpb24gKHNpemUpIHtcclxuICAgIHRoaXMuX21heFNpemUgPSBzaXplO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge3N0cmluZ30ga2V5XHJcbiAqIEBwYXJhbSAge30gdmFsdWVcclxuICovXHJcbkxSVS5wcm90b3R5cGUucHV0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgIGlmICghdGhpcy5fbWFwLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICB2YXIgbGVuID0gdGhpcy5fbGlzdC5sZW5ndGgoKTtcclxuICAgICAgICBpZiAobGVuID49IHRoaXMuX21heFNpemUgJiYgbGVuID4gMCkge1xyXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWRcclxuICAgICAgICAgICAgdmFyIGxlYXN0VXNlZEVudHJ5ID0gdGhpcy5fbGlzdC5oZWFkO1xyXG4gICAgICAgICAgICB0aGlzLl9saXN0LnJlbW92ZShsZWFzdFVzZWRFbnRyeSk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9tYXBbbGVhc3RVc2VkRW50cnkua2V5XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuX2xpc3QuaW5zZXJ0KHZhbHVlKTtcclxuICAgICAgICBlbnRyeS5rZXkgPSBrZXk7XHJcbiAgICAgICAgdGhpcy5fbWFwW2tleV0gPSBlbnRyeTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGtleVxyXG4gKiBAcmV0dXJuIHt9XHJcbiAqL1xyXG5MUlUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgIHZhciBlbnRyeSA9IHRoaXMuX21hcFtrZXldO1xyXG4gICAgaWYgKHRoaXMuX21hcC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgLy8gUHV0IHRoZSBsYXRlc3QgdXNlZCBlbnRyeSBpbiB0aGUgdGFpbFxyXG4gICAgICAgIGlmIChlbnRyeSAhPT0gdGhpcy5fbGlzdC50YWlsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpc3QucmVtb3ZlKGVudHJ5KTtcclxuICAgICAgICAgICAgdGhpcy5fbGlzdC5pbnNlcnRFbnRyeShlbnRyeSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxyXG4gKi9cclxuTFJVLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICB2YXIgZW50cnkgPSB0aGlzLl9tYXBba2V5XTtcclxuICAgIGlmICh0eXBlb2YoZW50cnkpICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9tYXBba2V5XTtcclxuICAgICAgICB0aGlzLl9saXN0LnJlbW92ZShlbnRyeSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xlYXIgdGhlIGNhY2hlXHJcbiAqL1xyXG5MUlUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fbGlzdC5jbGVhcigpO1xyXG4gICAgdGhpcy5fbWFwID0ge307XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMUlU7XHJcbiIsIi8qKlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkuY29yZS5jb2xvclxyXG4gKi9cclxuaW1wb3J0IExSVSBmcm9tICcuLi9jb3JlL0xSVSc7XHJcblxyXG52YXIgY29sb3JVdGlsID0ge307XHJcblxyXG52YXIga0NTU0NvbG9yVGFibGUgPSB7XHJcbiAgICAndHJhbnNwYXJlbnQnOiBbMCwwLDAsMF0sICdhbGljZWJsdWUnOiBbMjQwLDI0OCwyNTUsMV0sXHJcbiAgICAnYW50aXF1ZXdoaXRlJzogWzI1MCwyMzUsMjE1LDFdLCAnYXF1YSc6IFswLDI1NSwyNTUsMV0sXHJcbiAgICAnYXF1YW1hcmluZSc6IFsxMjcsMjU1LDIxMiwxXSwgJ2F6dXJlJzogWzI0MCwyNTUsMjU1LDFdLFxyXG4gICAgJ2JlaWdlJzogWzI0NSwyNDUsMjIwLDFdLCAnYmlzcXVlJzogWzI1NSwyMjgsMTk2LDFdLFxyXG4gICAgJ2JsYWNrJzogWzAsMCwwLDFdLCAnYmxhbmNoZWRhbG1vbmQnOiBbMjU1LDIzNSwyMDUsMV0sXHJcbiAgICAnYmx1ZSc6IFswLDAsMjU1LDFdLCAnYmx1ZXZpb2xldCc6IFsxMzgsNDMsMjI2LDFdLFxyXG4gICAgJ2Jyb3duJzogWzE2NSw0Miw0MiwxXSwgJ2J1cmx5d29vZCc6IFsyMjIsMTg0LDEzNSwxXSxcclxuICAgICdjYWRldGJsdWUnOiBbOTUsMTU4LDE2MCwxXSwgJ2NoYXJ0cmV1c2UnOiBbMTI3LDI1NSwwLDFdLFxyXG4gICAgJ2Nob2NvbGF0ZSc6IFsyMTAsMTA1LDMwLDFdLCAnY29yYWwnOiBbMjU1LDEyNyw4MCwxXSxcclxuICAgICdjb3JuZmxvd2VyYmx1ZSc6IFsxMDAsMTQ5LDIzNywxXSwgJ2Nvcm5zaWxrJzogWzI1NSwyNDgsMjIwLDFdLFxyXG4gICAgJ2NyaW1zb24nOiBbMjIwLDIwLDYwLDFdLCAnY3lhbic6IFswLDI1NSwyNTUsMV0sXHJcbiAgICAnZGFya2JsdWUnOiBbMCwwLDEzOSwxXSwgJ2RhcmtjeWFuJzogWzAsMTM5LDEzOSwxXSxcclxuICAgICdkYXJrZ29sZGVucm9kJzogWzE4NCwxMzQsMTEsMV0sICdkYXJrZ3JheSc6IFsxNjksMTY5LDE2OSwxXSxcclxuICAgICdkYXJrZ3JlZW4nOiBbMCwxMDAsMCwxXSwgJ2RhcmtncmV5JzogWzE2OSwxNjksMTY5LDFdLFxyXG4gICAgJ2RhcmtraGFraSc6IFsxODksMTgzLDEwNywxXSwgJ2RhcmttYWdlbnRhJzogWzEzOSwwLDEzOSwxXSxcclxuICAgICdkYXJrb2xpdmVncmVlbic6IFs4NSwxMDcsNDcsMV0sICdkYXJrb3JhbmdlJzogWzI1NSwxNDAsMCwxXSxcclxuICAgICdkYXJrb3JjaGlkJzogWzE1Myw1MCwyMDQsMV0sICdkYXJrcmVkJzogWzEzOSwwLDAsMV0sXHJcbiAgICAnZGFya3NhbG1vbic6IFsyMzMsMTUwLDEyMiwxXSwgJ2RhcmtzZWFncmVlbic6IFsxNDMsMTg4LDE0MywxXSxcclxuICAgICdkYXJrc2xhdGVibHVlJzogWzcyLDYxLDEzOSwxXSwgJ2RhcmtzbGF0ZWdyYXknOiBbNDcsNzksNzksMV0sXHJcbiAgICAnZGFya3NsYXRlZ3JleSc6IFs0Nyw3OSw3OSwxXSwgJ2Rhcmt0dXJxdW9pc2UnOiBbMCwyMDYsMjA5LDFdLFxyXG4gICAgJ2Rhcmt2aW9sZXQnOiBbMTQ4LDAsMjExLDFdLCAnZGVlcHBpbmsnOiBbMjU1LDIwLDE0NywxXSxcclxuICAgICdkZWVwc2t5Ymx1ZSc6IFswLDE5MSwyNTUsMV0sICdkaW1ncmF5JzogWzEwNSwxMDUsMTA1LDFdLFxyXG4gICAgJ2RpbWdyZXknOiBbMTA1LDEwNSwxMDUsMV0sICdkb2RnZXJibHVlJzogWzMwLDE0NCwyNTUsMV0sXHJcbiAgICAnZmlyZWJyaWNrJzogWzE3OCwzNCwzNCwxXSwgJ2Zsb3JhbHdoaXRlJzogWzI1NSwyNTAsMjQwLDFdLFxyXG4gICAgJ2ZvcmVzdGdyZWVuJzogWzM0LDEzOSwzNCwxXSwgJ2Z1Y2hzaWEnOiBbMjU1LDAsMjU1LDFdLFxyXG4gICAgJ2dhaW5zYm9ybyc6IFsyMjAsMjIwLDIyMCwxXSwgJ2dob3N0d2hpdGUnOiBbMjQ4LDI0OCwyNTUsMV0sXHJcbiAgICAnZ29sZCc6IFsyNTUsMjE1LDAsMV0sICdnb2xkZW5yb2QnOiBbMjE4LDE2NSwzMiwxXSxcclxuICAgICdncmF5JzogWzEyOCwxMjgsMTI4LDFdLCAnZ3JlZW4nOiBbMCwxMjgsMCwxXSxcclxuICAgICdncmVlbnllbGxvdyc6IFsxNzMsMjU1LDQ3LDFdLCAnZ3JleSc6IFsxMjgsMTI4LDEyOCwxXSxcclxuICAgICdob25leWRldyc6IFsyNDAsMjU1LDI0MCwxXSwgJ2hvdHBpbmsnOiBbMjU1LDEwNSwxODAsMV0sXHJcbiAgICAnaW5kaWFucmVkJzogWzIwNSw5Miw5MiwxXSwgJ2luZGlnbyc6IFs3NSwwLDEzMCwxXSxcclxuICAgICdpdm9yeSc6IFsyNTUsMjU1LDI0MCwxXSwgJ2toYWtpJzogWzI0MCwyMzAsMTQwLDFdLFxyXG4gICAgJ2xhdmVuZGVyJzogWzIzMCwyMzAsMjUwLDFdLCAnbGF2ZW5kZXJibHVzaCc6IFsyNTUsMjQwLDI0NSwxXSxcclxuICAgICdsYXduZ3JlZW4nOiBbMTI0LDI1MiwwLDFdLCAnbGVtb25jaGlmZm9uJzogWzI1NSwyNTAsMjA1LDFdLFxyXG4gICAgJ2xpZ2h0Ymx1ZSc6IFsxNzMsMjE2LDIzMCwxXSwgJ2xpZ2h0Y29yYWwnOiBbMjQwLDEyOCwxMjgsMV0sXHJcbiAgICAnbGlnaHRjeWFuJzogWzIyNCwyNTUsMjU1LDFdLCAnbGlnaHRnb2xkZW5yb2R5ZWxsb3cnOiBbMjUwLDI1MCwyMTAsMV0sXHJcbiAgICAnbGlnaHRncmF5JzogWzIxMSwyMTEsMjExLDFdLCAnbGlnaHRncmVlbic6IFsxNDQsMjM4LDE0NCwxXSxcclxuICAgICdsaWdodGdyZXknOiBbMjExLDIxMSwyMTEsMV0sICdsaWdodHBpbmsnOiBbMjU1LDE4MiwxOTMsMV0sXHJcbiAgICAnbGlnaHRzYWxtb24nOiBbMjU1LDE2MCwxMjIsMV0sICdsaWdodHNlYWdyZWVuJzogWzMyLDE3OCwxNzAsMV0sXHJcbiAgICAnbGlnaHRza3libHVlJzogWzEzNSwyMDYsMjUwLDFdLCAnbGlnaHRzbGF0ZWdyYXknOiBbMTE5LDEzNiwxNTMsMV0sXHJcbiAgICAnbGlnaHRzbGF0ZWdyZXknOiBbMTE5LDEzNiwxNTMsMV0sICdsaWdodHN0ZWVsYmx1ZSc6IFsxNzYsMTk2LDIyMiwxXSxcclxuICAgICdsaWdodHllbGxvdyc6IFsyNTUsMjU1LDIyNCwxXSwgJ2xpbWUnOiBbMCwyNTUsMCwxXSxcclxuICAgICdsaW1lZ3JlZW4nOiBbNTAsMjA1LDUwLDFdLCAnbGluZW4nOiBbMjUwLDI0MCwyMzAsMV0sXHJcbiAgICAnbWFnZW50YSc6IFsyNTUsMCwyNTUsMV0sICdtYXJvb24nOiBbMTI4LDAsMCwxXSxcclxuICAgICdtZWRpdW1hcXVhbWFyaW5lJzogWzEwMiwyMDUsMTcwLDFdLCAnbWVkaXVtYmx1ZSc6IFswLDAsMjA1LDFdLFxyXG4gICAgJ21lZGl1bW9yY2hpZCc6IFsxODYsODUsMjExLDFdLCAnbWVkaXVtcHVycGxlJzogWzE0NywxMTIsMjE5LDFdLFxyXG4gICAgJ21lZGl1bXNlYWdyZWVuJzogWzYwLDE3OSwxMTMsMV0sICdtZWRpdW1zbGF0ZWJsdWUnOiBbMTIzLDEwNCwyMzgsMV0sXHJcbiAgICAnbWVkaXVtc3ByaW5nZ3JlZW4nOiBbMCwyNTAsMTU0LDFdLCAnbWVkaXVtdHVycXVvaXNlJzogWzcyLDIwOSwyMDQsMV0sXHJcbiAgICAnbWVkaXVtdmlvbGV0cmVkJzogWzE5OSwyMSwxMzMsMV0sICdtaWRuaWdodGJsdWUnOiBbMjUsMjUsMTEyLDFdLFxyXG4gICAgJ21pbnRjcmVhbSc6IFsyNDUsMjU1LDI1MCwxXSwgJ21pc3R5cm9zZSc6IFsyNTUsMjI4LDIyNSwxXSxcclxuICAgICdtb2NjYXNpbic6IFsyNTUsMjI4LDE4MSwxXSwgJ25hdmFqb3doaXRlJzogWzI1NSwyMjIsMTczLDFdLFxyXG4gICAgJ25hdnknOiBbMCwwLDEyOCwxXSwgJ29sZGxhY2UnOiBbMjUzLDI0NSwyMzAsMV0sXHJcbiAgICAnb2xpdmUnOiBbMTI4LDEyOCwwLDFdLCAnb2xpdmVkcmFiJzogWzEwNywxNDIsMzUsMV0sXHJcbiAgICAnb3JhbmdlJzogWzI1NSwxNjUsMCwxXSwgJ29yYW5nZXJlZCc6IFsyNTUsNjksMCwxXSxcclxuICAgICdvcmNoaWQnOiBbMjE4LDExMiwyMTQsMV0sICdwYWxlZ29sZGVucm9kJzogWzIzOCwyMzIsMTcwLDFdLFxyXG4gICAgJ3BhbGVncmVlbic6IFsxNTIsMjUxLDE1MiwxXSwgJ3BhbGV0dXJxdW9pc2UnOiBbMTc1LDIzOCwyMzgsMV0sXHJcbiAgICAncGFsZXZpb2xldHJlZCc6IFsyMTksMTEyLDE0NywxXSwgJ3BhcGF5YXdoaXAnOiBbMjU1LDIzOSwyMTMsMV0sXHJcbiAgICAncGVhY2hwdWZmJzogWzI1NSwyMTgsMTg1LDFdLCAncGVydSc6IFsyMDUsMTMzLDYzLDFdLFxyXG4gICAgJ3BpbmsnOiBbMjU1LDE5MiwyMDMsMV0sICdwbHVtJzogWzIyMSwxNjAsMjIxLDFdLFxyXG4gICAgJ3Bvd2RlcmJsdWUnOiBbMTc2LDIyNCwyMzAsMV0sICdwdXJwbGUnOiBbMTI4LDAsMTI4LDFdLFxyXG4gICAgJ3JlZCc6IFsyNTUsMCwwLDFdLCAncm9zeWJyb3duJzogWzE4OCwxNDMsMTQzLDFdLFxyXG4gICAgJ3JveWFsYmx1ZSc6IFs2NSwxMDUsMjI1LDFdLCAnc2FkZGxlYnJvd24nOiBbMTM5LDY5LDE5LDFdLFxyXG4gICAgJ3NhbG1vbic6IFsyNTAsMTI4LDExNCwxXSwgJ3NhbmR5YnJvd24nOiBbMjQ0LDE2NCw5NiwxXSxcclxuICAgICdzZWFncmVlbic6IFs0NiwxMzksODcsMV0sICdzZWFzaGVsbCc6IFsyNTUsMjQ1LDIzOCwxXSxcclxuICAgICdzaWVubmEnOiBbMTYwLDgyLDQ1LDFdLCAnc2lsdmVyJzogWzE5MiwxOTIsMTkyLDFdLFxyXG4gICAgJ3NreWJsdWUnOiBbMTM1LDIwNiwyMzUsMV0sICdzbGF0ZWJsdWUnOiBbMTA2LDkwLDIwNSwxXSxcclxuICAgICdzbGF0ZWdyYXknOiBbMTEyLDEyOCwxNDQsMV0sICdzbGF0ZWdyZXknOiBbMTEyLDEyOCwxNDQsMV0sXHJcbiAgICAnc25vdyc6IFsyNTUsMjUwLDI1MCwxXSwgJ3NwcmluZ2dyZWVuJzogWzAsMjU1LDEyNywxXSxcclxuICAgICdzdGVlbGJsdWUnOiBbNzAsMTMwLDE4MCwxXSwgJ3Rhbic6IFsyMTAsMTgwLDE0MCwxXSxcclxuICAgICd0ZWFsJzogWzAsMTI4LDEyOCwxXSwgJ3RoaXN0bGUnOiBbMjE2LDE5MSwyMTYsMV0sXHJcbiAgICAndG9tYXRvJzogWzI1NSw5OSw3MSwxXSwgJ3R1cnF1b2lzZSc6IFs2NCwyMjQsMjA4LDFdLFxyXG4gICAgJ3Zpb2xldCc6IFsyMzgsMTMwLDIzOCwxXSwgJ3doZWF0JzogWzI0NSwyMjIsMTc5LDFdLFxyXG4gICAgJ3doaXRlJzogWzI1NSwyNTUsMjU1LDFdLCAnd2hpdGVzbW9rZSc6IFsyNDUsMjQ1LDI0NSwxXSxcclxuICAgICd5ZWxsb3cnOiBbMjU1LDI1NSwwLDFdLCAneWVsbG93Z3JlZW4nOiBbMTU0LDIwNSw1MCwxXVxyXG59O1xyXG5cclxuZnVuY3Rpb24gY2xhbXBDc3NCeXRlKGkpIHsgIC8vIENsYW1wIHRvIGludGVnZXIgMCAuLiAyNTUuXHJcbiAgICBpID0gTWF0aC5yb3VuZChpKTsgIC8vIFNlZW1zIHRvIGJlIHdoYXQgQ2hyb21lIGRvZXMgKHZzIHRydW5jYXRpb24pLlxyXG4gICAgcmV0dXJuIGkgPCAwID8gMCA6IGkgPiAyNTUgPyAyNTUgOiBpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbGFtcENzc0FuZ2xlKGkpIHsgIC8vIENsYW1wIHRvIGludGVnZXIgMCAuLiAzNjAuXHJcbiAgICBpID0gTWF0aC5yb3VuZChpKTsgIC8vIFNlZW1zIHRvIGJlIHdoYXQgQ2hyb21lIGRvZXMgKHZzIHRydW5jYXRpb24pLlxyXG4gICAgcmV0dXJuIGkgPCAwID8gMCA6IGkgPiAzNjAgPyAzNjAgOiBpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbGFtcENzc0Zsb2F0KGYpIHsgIC8vIENsYW1wIHRvIGZsb2F0IDAuMCAuLiAxLjAuXHJcbiAgICByZXR1cm4gZiA8IDAgPyAwIDogZiA+IDEgPyAxIDogZjtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VDc3NJbnQoc3RyKSB7ICAvLyBpbnQgb3IgcGVyY2VudGFnZS5cclxuICAgIGlmIChzdHIubGVuZ3RoICYmIHN0ci5jaGFyQXQoc3RyLmxlbmd0aCAtIDEpID09PSAnJScpIHtcclxuICAgICAgICByZXR1cm4gY2xhbXBDc3NCeXRlKHBhcnNlRmxvYXQoc3RyKSAvIDEwMCAqIDI1NSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xhbXBDc3NCeXRlKHBhcnNlSW50KHN0ciwgMTApKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VDc3NGbG9hdChzdHIpIHsgIC8vIGZsb2F0IG9yIHBlcmNlbnRhZ2UuXHJcbiAgICBpZiAoc3RyLmxlbmd0aCAmJiBzdHIuY2hhckF0KHN0ci5sZW5ndGggLSAxKSA9PT0gJyUnKSB7XHJcbiAgICAgICAgcmV0dXJuIGNsYW1wQ3NzRmxvYXQocGFyc2VGbG9hdChzdHIpIC8gMTAwKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjbGFtcENzc0Zsb2F0KHBhcnNlRmxvYXQoc3RyKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNzc0h1ZVRvUmdiKG0xLCBtMiwgaCkge1xyXG4gICAgaWYgKGggPCAwKSB7XHJcbiAgICAgICAgaCArPSAxO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaCA+IDEpIHtcclxuICAgICAgICBoIC09IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGggKiA2IDwgMSkge1xyXG4gICAgICAgIHJldHVybiBtMSArIChtMiAtIG0xKSAqIGggKiA2O1xyXG4gICAgfVxyXG4gICAgaWYgKGggKiAyIDwgMSkge1xyXG4gICAgICAgIHJldHVybiBtMjtcclxuICAgIH1cclxuICAgIGlmIChoICogMyA8IDIpIHtcclxuICAgICAgICByZXR1cm4gbTEgKyAobTIgLSBtMSkgKiAoMi8zIC0gaCkgKiA2O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG0xO1xyXG59XHJcblxyXG5mdW5jdGlvbiBsZXJwTnVtYmVyKGEsIGIsIHApIHtcclxuICAgIHJldHVybiBhICsgKGIgLSBhKSAqIHA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldFJnYmEob3V0LCByLCBnLCBiLCBhKSB7XHJcbiAgICBvdXRbMF0gPSByOyBvdXRbMV0gPSBnOyBvdXRbMl0gPSBiOyBvdXRbM10gPSBhO1xyXG4gICAgcmV0dXJuIG91dDtcclxufVxyXG5mdW5jdGlvbiBjb3B5UmdiYShvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IGFbMF07IG91dFsxXSA9IGFbMV07IG91dFsyXSA9IGFbMl07IG91dFszXSA9IGFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59XHJcblxyXG52YXIgY29sb3JDYWNoZSA9IG5ldyBMUlUoMjApO1xyXG52YXIgbGFzdFJlbW92ZWRBcnIgPSBudWxsO1xyXG5cclxuZnVuY3Rpb24gcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycikge1xyXG4gICAgLy8gUmV1c2UgcmVtb3ZlZCBhcnJheVxyXG4gICAgaWYgKGxhc3RSZW1vdmVkQXJyKSB7XHJcbiAgICAgICAgY29weVJnYmEobGFzdFJlbW92ZWRBcnIsIHJnYmFBcnIpO1xyXG4gICAgfVxyXG4gICAgbGFzdFJlbW92ZWRBcnIgPSBjb2xvckNhY2hlLnB1dChjb2xvclN0ciwgbGFzdFJlbW92ZWRBcnIgfHwgKHJnYmFBcnIuc2xpY2UoKSkpO1xyXG59XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5jb3JlLmNvbG9yLnBhcnNlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclN0clxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBvdXRcclxuICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59XHJcbiAqL1xyXG5jb2xvclV0aWwucGFyc2UgPSBmdW5jdGlvbiAoY29sb3JTdHIsIHJnYmFBcnIpIHtcclxuICAgIGlmICghY29sb3JTdHIpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZ2JhQXJyID0gcmdiYUFyciB8fCBbXTtcclxuXHJcbiAgICB2YXIgY2FjaGVkID0gY29sb3JDYWNoZS5nZXQoY29sb3JTdHIpO1xyXG4gICAgaWYgKGNhY2hlZCkge1xyXG4gICAgICAgIHJldHVybiBjb3B5UmdiYShyZ2JhQXJyLCBjYWNoZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbG9yU3RyIG1heSBiZSBub3Qgc3RyaW5nXHJcbiAgICBjb2xvclN0ciA9IGNvbG9yU3RyICsgJyc7XHJcbiAgICAvLyBSZW1vdmUgYWxsIHdoaXRlc3BhY2UsIG5vdCBjb21wbGlhbnQsIGJ1dCBzaG91bGQganVzdCBiZSBtb3JlIGFjY2VwdGluZy5cclxuICAgIHZhciBzdHIgPSBjb2xvclN0ci5yZXBsYWNlKC8gL2csICcnKS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIC8vIENvbG9yIGtleXdvcmRzIChhbmQgdHJhbnNwYXJlbnQpIGxvb2t1cC5cclxuICAgIGlmIChzdHIgaW4ga0NTU0NvbG9yVGFibGUpIHtcclxuICAgICAgICBjb3B5UmdiYShyZ2JhQXJyLCBrQ1NTQ29sb3JUYWJsZVtzdHJdKTtcclxuICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcclxuICAgICAgICByZXR1cm4gcmdiYUFycjtcclxuICAgIH1cclxuXHJcbiAgICAvLyAjYWJjIGFuZCAjYWJjMTIzIHN5bnRheC5cclxuICAgIGlmIChzdHIuY2hhckF0KDApID09PSAnIycpIHtcclxuICAgICAgICBpZiAoc3RyLmxlbmd0aCA9PT0gNCkge1xyXG4gICAgICAgICAgICB2YXIgaXYgPSBwYXJzZUludChzdHIuc3Vic3RyKDEpLCAxNik7ICAvLyBUT0RPKGRlYW5tKTogU3RyaWN0ZXIgcGFyc2luZy5cclxuICAgICAgICAgICAgaWYgKCEoaXYgPj0gMCAmJiBpdiA8PSAweGZmZikpIHtcclxuICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47ICAvLyBDb3ZlcnMgTmFOLlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldFJnYmEocmdiYUFycixcclxuICAgICAgICAgICAgICAgICgoaXYgJiAweGYwMCkgPj4gNCkgfCAoKGl2ICYgMHhmMDApID4+IDgpLFxyXG4gICAgICAgICAgICAgICAgKGl2ICYgMHhmMCkgfCAoKGl2ICYgMHhmMCkgPj4gNCksXHJcbiAgICAgICAgICAgICAgICAoaXYgJiAweGYpIHwgKChpdiAmIDB4ZikgPDwgNCksXHJcbiAgICAgICAgICAgICAgICAxXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHB1dFRvQ2FjaGUoY29sb3JTdHIsIHJnYmFBcnIpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmdiYUFycjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3RyLmxlbmd0aCA9PT0gNykge1xyXG4gICAgICAgICAgICB2YXIgaXYgPSBwYXJzZUludChzdHIuc3Vic3RyKDEpLCAxNik7ICAvLyBUT0RPKGRlYW5tKTogU3RyaWN0ZXIgcGFyc2luZy5cclxuICAgICAgICAgICAgaWYgKCEoaXYgPj0gMCAmJiBpdiA8PSAweGZmZmZmZikpIHtcclxuICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47ICAvLyBDb3ZlcnMgTmFOLlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldFJnYmEocmdiYUFycixcclxuICAgICAgICAgICAgICAgIChpdiAmIDB4ZmYwMDAwKSA+PiAxNixcclxuICAgICAgICAgICAgICAgIChpdiAmIDB4ZmYwMCkgPj4gOCxcclxuICAgICAgICAgICAgICAgIGl2ICYgMHhmZixcclxuICAgICAgICAgICAgICAgIDFcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycik7XHJcbiAgICAgICAgICAgIHJldHVybiByZ2JhQXJyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIG9wID0gc3RyLmluZGV4T2YoJygnKSwgZXAgPSBzdHIuaW5kZXhPZignKScpO1xyXG4gICAgaWYgKG9wICE9PSAtMSAmJiBlcCArIDEgPT09IHN0ci5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgZm5hbWUgPSBzdHIuc3Vic3RyKDAsIG9wKTtcclxuICAgICAgICB2YXIgcGFyYW1zID0gc3RyLnN1YnN0cihvcCArIDEsIGVwIC0gKG9wICsgMSkpLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgdmFyIGFscGhhID0gMTsgIC8vIFRvIGFsbG93IGNhc2UgZmFsbHRocm91Z2guXHJcbiAgICAgICAgc3dpdGNoIChmbmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlICdyZ2JhJzpcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhbHBoYSA9IHBhcnNlQ3NzRmxvYXQocGFyYW1zLnBvcCgpKTsgLy8ganNoaW50IGlnbm9yZTpsaW5lXHJcbiAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaC5cclxuICAgICAgICAgICAgY2FzZSAncmdiJzpcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VDc3NJbnQocGFyYW1zWzBdKSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJzZUNzc0ludChwYXJhbXNbMV0pLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlQ3NzSW50KHBhcmFtc1syXSksXHJcbiAgICAgICAgICAgICAgICAgICAgYWxwaGFcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZ2JhQXJyO1xyXG4gICAgICAgICAgICBjYXNlICdoc2xhJzpcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwYXJhbXNbM10gPSBwYXJzZUNzc0Zsb2F0KHBhcmFtc1szXSk7XHJcbiAgICAgICAgICAgICAgICBoc2xhMnJnYmEocGFyYW1zLCByZ2JhQXJyKTtcclxuICAgICAgICAgICAgICAgIHB1dFRvQ2FjaGUoY29sb3JTdHIsIHJnYmFBcnIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJnYmFBcnI7XHJcbiAgICAgICAgICAgIGNhc2UgJ2hzbCc6XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaHNsYTJyZ2JhKHBhcmFtcywgcmdiYUFycik7XHJcbiAgICAgICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZ2JhQXJyO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xyXG4gICAgcmV0dXJuO1xyXG59O1xyXG5cclxuY29sb3JVdGlsLnBhcnNlVG9GbG9hdCA9IGZ1bmN0aW9uIChjb2xvclN0ciwgcmdiYUFycikge1xyXG4gICAgcmdiYUFyciA9IGNvbG9yVXRpbC5wYXJzZShjb2xvclN0ciwgcmdiYUFycik7XHJcbiAgICBpZiAoIXJnYmFBcnIpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZ2JhQXJyWzBdIC89IDI1NTtcclxuICAgIHJnYmFBcnJbMV0gLz0gMjU1O1xyXG4gICAgcmdiYUFyclsyXSAvPSAyNTU7XHJcbiAgICByZXR1cm4gcmdiYUFycjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci5oc2xhMnJnYmFcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gaHNsYVxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSByZ2JhXHJcbiAqIEByZXR1cm4ge0FycmF5LjxudW1iZXI+fSByZ2JhXHJcbiAqL1xyXG5mdW5jdGlvbiBoc2xhMnJnYmEoaHNsYSwgcmdiYSkge1xyXG4gICAgdmFyIGggPSAoKChwYXJzZUZsb2F0KGhzbGFbMF0pICUgMzYwKSArIDM2MCkgJSAzNjApIC8gMzYwOyAgLy8gMCAuLiAxXHJcbiAgICAvLyBOT1RFKGRlYW5tKTogQWNjb3JkaW5nIHRvIHRoZSBDU1Mgc3BlYyBzL2wgc2hvdWxkIG9ubHkgYmVcclxuICAgIC8vIHBlcmNlbnRhZ2VzLCBidXQgd2UgZG9uJ3QgYm90aGVyIGFuZCBsZXQgZmxvYXQgb3IgcGVyY2VudGFnZS5cclxuICAgIHZhciBzID0gcGFyc2VDc3NGbG9hdChoc2xhWzFdKTtcclxuICAgIHZhciBsID0gcGFyc2VDc3NGbG9hdChoc2xhWzJdKTtcclxuICAgIHZhciBtMiA9IGwgPD0gMC41ID8gbCAqIChzICsgMSkgOiBsICsgcyAtIGwgKiBzO1xyXG4gICAgdmFyIG0xID0gbCAqIDIgLSBtMjtcclxuXHJcbiAgICByZ2JhID0gcmdiYSB8fCBbXTtcclxuICAgIHNldFJnYmEocmdiYSxcclxuICAgICAgICBjbGFtcENzc0J5dGUoY3NzSHVlVG9SZ2IobTEsIG0yLCBoICsgMSAvIDMpICogMjU1KSxcclxuICAgICAgICBjbGFtcENzc0J5dGUoY3NzSHVlVG9SZ2IobTEsIG0yLCBoKSAqIDI1NSksXHJcbiAgICAgICAgY2xhbXBDc3NCeXRlKGNzc0h1ZVRvUmdiKG0xLCBtMiwgaCAtIDEgLyAzKSAqIDI1NSksXHJcbiAgICAgICAgMVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoaHNsYS5sZW5ndGggPT09IDQpIHtcclxuICAgICAgICByZ2JhWzNdID0gaHNsYVszXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmdiYTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci5yZ2JhMmhzbGFcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcmdiYVxyXG4gKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn0gaHNsYVxyXG4gKi9cclxuZnVuY3Rpb24gcmdiYTJoc2xhKHJnYmEpIHtcclxuICAgIGlmICghcmdiYSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSR0IgZnJvbSAwIHRvIDI1NVxyXG4gICAgdmFyIFIgPSByZ2JhWzBdIC8gMjU1O1xyXG4gICAgdmFyIEcgPSByZ2JhWzFdIC8gMjU1O1xyXG4gICAgdmFyIEIgPSByZ2JhWzJdIC8gMjU1O1xyXG5cclxuICAgIHZhciB2TWluID0gTWF0aC5taW4oUiwgRywgQik7IC8vIE1pbi4gdmFsdWUgb2YgUkdCXHJcbiAgICB2YXIgdk1heCA9IE1hdGgubWF4KFIsIEcsIEIpOyAvLyBNYXguIHZhbHVlIG9mIFJHQlxyXG4gICAgdmFyIGRlbHRhID0gdk1heCAtIHZNaW47IC8vIERlbHRhIFJHQiB2YWx1ZVxyXG5cclxuICAgIHZhciBMID0gKHZNYXggKyB2TWluKSAvIDI7XHJcbiAgICB2YXIgSDtcclxuICAgIHZhciBTO1xyXG4gICAgLy8gSFNMIHJlc3VsdHMgZnJvbSAwIHRvIDFcclxuICAgIGlmIChkZWx0YSA9PT0gMCkge1xyXG4gICAgICAgIEggPSAwO1xyXG4gICAgICAgIFMgPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKEwgPCAwLjUpIHtcclxuICAgICAgICAgICAgUyA9IGRlbHRhIC8gKHZNYXggKyB2TWluKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIFMgPSBkZWx0YSAvICgyIC0gdk1heCAtIHZNaW4pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGRlbHRhUiA9ICgoKHZNYXggLSBSKSAvIDYpICsgKGRlbHRhIC8gMikpIC8gZGVsdGE7XHJcbiAgICAgICAgdmFyIGRlbHRhRyA9ICgoKHZNYXggLSBHKSAvIDYpICsgKGRlbHRhIC8gMikpIC8gZGVsdGE7XHJcbiAgICAgICAgdmFyIGRlbHRhQiA9ICgoKHZNYXggLSBCKSAvIDYpICsgKGRlbHRhIC8gMikpIC8gZGVsdGE7XHJcblxyXG4gICAgICAgIGlmIChSID09PSB2TWF4KSB7XHJcbiAgICAgICAgICAgIEggPSBkZWx0YUIgLSBkZWx0YUc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKEcgPT09IHZNYXgpIHtcclxuICAgICAgICAgICAgSCA9ICgxIC8gMykgKyBkZWx0YVIgLSBkZWx0YUI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKEIgPT09IHZNYXgpIHtcclxuICAgICAgICAgICAgSCA9ICgyIC8gMykgKyBkZWx0YUcgLSBkZWx0YVI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoSCA8IDApIHtcclxuICAgICAgICAgICAgSCArPSAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEggPiAxKSB7XHJcbiAgICAgICAgICAgIEggLT0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGhzbGEgPSBbSCAqIDM2MCwgUywgTF07XHJcblxyXG4gICAgaWYgKHJnYmFbM10gIT0gbnVsbCkge1xyXG4gICAgICAgIGhzbGEucHVzaChyZ2JhWzNdKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaHNsYTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci5saWZ0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxyXG4gKiBAcGFyYW0ge251bWJlcn0gbGV2ZWxcclxuICogQHJldHVybiB7c3RyaW5nfVxyXG4gKi9cclxuY29sb3JVdGlsLmxpZnQgPSBmdW5jdGlvbiAoY29sb3IsIGxldmVsKSB7XHJcbiAgICB2YXIgY29sb3JBcnIgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xyXG4gICAgaWYgKGNvbG9yQXJyKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGxldmVsIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgY29sb3JBcnJbaV0gPSBjb2xvckFycltpXSAqICgxIC0gbGV2ZWwpIHwgMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yQXJyW2ldID0gKCgyNTUgLSBjb2xvckFycltpXSkgKiBsZXZlbCArIGNvbG9yQXJyW2ldKSB8IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yVXRpbC5zdHJpbmdpZnkoY29sb3JBcnIsIGNvbG9yQXJyLmxlbmd0aCA9PT0gNCA/ICdyZ2JhJyA6ICdyZ2InKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci50b0hleFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcclxuICogQHJldHVybiB7c3RyaW5nfVxyXG4gKi9cclxuY29sb3JVdGlsLnRvSGV4ID0gZnVuY3Rpb24gKGNvbG9yKSB7XHJcbiAgICB2YXIgY29sb3JBcnIgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xyXG4gICAgaWYgKGNvbG9yQXJyKSB7XHJcbiAgICAgICAgcmV0dXJuICgoMSA8PCAyNCkgKyAoY29sb3JBcnJbMF0gPDwgMTYpICsgKGNvbG9yQXJyWzFdIDw8IDgpICsgKCtjb2xvckFyclsyXSkpLnRvU3RyaW5nKDE2KS5zbGljZSgxKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBNYXAgdmFsdWUgdG8gY29sb3IuIEZhc3RlciB0aGFuIGxlcnAgbWV0aG9kcyBiZWNhdXNlIGNvbG9yIGlzIHJlcHJlc2VudGVkIGJ5IHJnYmEgYXJyYXkuXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvclxyXG4gKiBAcGFyYW0ge251bWJlcn0gbm9ybWFsaXplZFZhbHVlIEEgZmxvYXQgYmV0d2VlbiAwIGFuZCAxLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxBcnJheS48bnVtYmVyPj59IGNvbG9ycyBMaXN0IG9mIHJnYmEgY29sb3IgYXJyYXlcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gW291dF0gTWFwcGVkIGdiYSBjb2xvciBhcnJheVxyXG4gKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn0gd2lsbCBiZSBudWxsL3VuZGVmaW5lZCBpZiBpbnB1dCBpbGxlZ2FsLlxyXG4gKi9cclxuY29sb3JVdGlsLmZhc3RMZXJwID0gZnVuY3Rpb24gKG5vcm1hbGl6ZWRWYWx1ZSwgY29sb3JzLCBvdXQpIHtcclxuICAgIGlmICghKGNvbG9ycyAmJiBjb2xvcnMubGVuZ3RoKVxyXG4gICAgICAgIHx8ICEobm9ybWFsaXplZFZhbHVlID49IDAgJiYgbm9ybWFsaXplZFZhbHVlIDw9IDEpXHJcbiAgICApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgb3V0ID0gb3V0IHx8IFtdO1xyXG5cclxuICAgIHZhciB2YWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZSAqIChjb2xvcnMubGVuZ3RoIC0gMSk7XHJcbiAgICB2YXIgbGVmdEluZGV4ID0gTWF0aC5mbG9vcih2YWx1ZSk7XHJcbiAgICB2YXIgcmlnaHRJbmRleCA9IE1hdGguY2VpbCh2YWx1ZSk7XHJcbiAgICB2YXIgbGVmdENvbG9yID0gY29sb3JzW2xlZnRJbmRleF07XHJcbiAgICB2YXIgcmlnaHRDb2xvciA9IGNvbG9yc1tyaWdodEluZGV4XTtcclxuICAgIHZhciBkdiA9IHZhbHVlIC0gbGVmdEluZGV4O1xyXG4gICAgb3V0WzBdID0gY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzBdLCByaWdodENvbG9yWzBdLCBkdikpO1xyXG4gICAgb3V0WzFdID0gY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzFdLCByaWdodENvbG9yWzFdLCBkdikpO1xyXG4gICAgb3V0WzJdID0gY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzJdLCByaWdodENvbG9yWzJdLCBkdikpO1xyXG4gICAgb3V0WzNdID0gY2xhbXBDc3NGbG9hdChsZXJwTnVtYmVyKGxlZnRDb2xvclszXSwgcmlnaHRDb2xvclszXSwgZHYpKTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59XHJcblxyXG5jb2xvclV0aWwuZmFzdE1hcFRvQ29sb3IgPSBjb2xvclV0aWwuZmFzdExlcnA7XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtudW1iZXJ9IG5vcm1hbGl6ZWRWYWx1ZSBBIGZsb2F0IGJldHdlZW4gMCBhbmQgMS5cclxuICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gY29sb3JzIENvbG9yIGxpc3QuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGZ1bGxPdXRwdXQgRGVmYXVsdCBmYWxzZS5cclxuICogQHJldHVybiB7KHN0cmluZ3xPYmplY3QpfSBSZXN1bHQgY29sb3IuIElmIGZ1bGxPdXRwdXQsXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtjb2xvcjogLi4uLCBsZWZ0SW5kZXg6IC4uLiwgcmlnaHRJbmRleDogLi4uLCB2YWx1ZTogLi4ufSxcclxuICovXHJcbmNvbG9yVXRpbC5sZXJwID0gZnVuY3Rpb24gKG5vcm1hbGl6ZWRWYWx1ZSwgY29sb3JzLCBmdWxsT3V0cHV0KSB7XHJcbiAgICBpZiAoIShjb2xvcnMgJiYgY29sb3JzLmxlbmd0aClcclxuICAgICAgICB8fCAhKG5vcm1hbGl6ZWRWYWx1ZSA+PSAwICYmIG5vcm1hbGl6ZWRWYWx1ZSA8PSAxKVxyXG4gICAgKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB2YWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZSAqIChjb2xvcnMubGVuZ3RoIC0gMSk7XHJcbiAgICB2YXIgbGVmdEluZGV4ID0gTWF0aC5mbG9vcih2YWx1ZSk7XHJcbiAgICB2YXIgcmlnaHRJbmRleCA9IE1hdGguY2VpbCh2YWx1ZSk7XHJcbiAgICB2YXIgbGVmdENvbG9yID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yc1tsZWZ0SW5kZXhdKTtcclxuICAgIHZhciByaWdodENvbG9yID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yc1tyaWdodEluZGV4XSk7XHJcbiAgICB2YXIgZHYgPSB2YWx1ZSAtIGxlZnRJbmRleDtcclxuXHJcbiAgICB2YXIgY29sb3IgPSBjb2xvclV0aWwuc3RyaW5naWZ5KFxyXG4gICAgICAgIFtcclxuICAgICAgICAgICAgY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzBdLCByaWdodENvbG9yWzBdLCBkdikpLFxyXG4gICAgICAgICAgICBjbGFtcENzc0J5dGUobGVycE51bWJlcihsZWZ0Q29sb3JbMV0sIHJpZ2h0Q29sb3JbMV0sIGR2KSksXHJcbiAgICAgICAgICAgIGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclsyXSwgcmlnaHRDb2xvclsyXSwgZHYpKSxcclxuICAgICAgICAgICAgY2xhbXBDc3NGbG9hdChsZXJwTnVtYmVyKGxlZnRDb2xvclszXSwgcmlnaHRDb2xvclszXSwgZHYpKVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgJ3JnYmEnXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBmdWxsT3V0cHV0XHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIGNvbG9yOiBjb2xvcixcclxuICAgICAgICAgICAgbGVmdEluZGV4OiBsZWZ0SW5kZXgsXHJcbiAgICAgICAgICAgIHJpZ2h0SW5kZXg6IHJpZ2h0SW5kZXgsXHJcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICA6IGNvbG9yO1xyXG59XHJcblxyXG4vKipcclxuICogQGRlcHJlY2F0ZWRcclxuICovXHJcbmNvbG9yVXRpbC5tYXBUb0NvbG9yID0gY29sb3JVdGlsLmxlcnA7XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5jb3JlLmNvbG9yXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxyXG4gKiBAcGFyYW0ge251bWJlcj19IGggMCB+IDM2MCwgaWdub3JlIHdoZW4gbnVsbC5cclxuICogQHBhcmFtIHtudW1iZXI9fSBzIDAgfiAxLCBpZ25vcmUgd2hlbiBudWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcj19IGwgMCB+IDEsIGlnbm9yZSB3aGVuIG51bGwuXHJcbiAqIEByZXR1cm4ge3N0cmluZ30gQ29sb3Igc3RyaW5nIGluIHJnYmEgZm9ybWF0LlxyXG4gKi9cclxuY29sb3JVdGlsLm1vZGlmeUhTTCA9IGZ1bmN0aW9uIChjb2xvciwgaCwgcywgbCkge1xyXG4gICAgY29sb3IgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xyXG5cclxuICAgIGlmIChjb2xvcikge1xyXG4gICAgICAgIGNvbG9yID0gcmdiYTJoc2xhKGNvbG9yKTtcclxuICAgICAgICBoICE9IG51bGwgJiYgKGNvbG9yWzBdID0gY2xhbXBDc3NBbmdsZShoKSk7XHJcbiAgICAgICAgcyAhPSBudWxsICYmIChjb2xvclsxXSA9IHBhcnNlQ3NzRmxvYXQocykpO1xyXG4gICAgICAgIGwgIT0gbnVsbCAmJiAoY29sb3JbMl0gPSBwYXJzZUNzc0Zsb2F0KGwpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbG9yVXRpbC5zdHJpbmdpZnkoaHNsYTJyZ2JhKGNvbG9yKSwgJ3JnYmEnKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxyXG4gKiBAcGFyYW0ge251bWJlcj19IGFscGhhIDAgfiAxXHJcbiAqIEByZXR1cm4ge3N0cmluZ30gQ29sb3Igc3RyaW5nIGluIHJnYmEgZm9ybWF0LlxyXG4gKi9cclxuY29sb3JVdGlsLm1vZGlmeUFscGhhID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSkge1xyXG4gICAgY29sb3IgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xyXG5cclxuICAgIGlmIChjb2xvciAmJiBhbHBoYSAhPSBudWxsKSB7XHJcbiAgICAgICAgY29sb3JbM10gPSBjbGFtcENzc0Zsb2F0KGFscGhhKTtcclxuICAgICAgICByZXR1cm4gY29sb3JVdGlsLnN0cmluZ2lmeShjb2xvciwgJ3JnYmEnKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyckNvbG9yIGxpa2UgWzEyLDMzLDQ0LDAuNF1cclxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgJ3JnYmEnLCAnaHN2YScsIC4uLlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFJlc3VsdCBjb2xvci4gKElmIGlucHV0IGlsbGVnYWwsIHJldHVybiB1bmRlZmluZWQpLlxyXG4gKi9cclxuY29sb3JVdGlsLnN0cmluZ2lmeSA9IGZ1bmN0aW9uIChhcnJDb2xvciwgdHlwZSkge1xyXG4gICAgaWYgKCFhcnJDb2xvciB8fCAhYXJyQ29sb3IubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGNvbG9yU3RyID0gYXJyQ29sb3JbMF0gKyAnLCcgKyBhcnJDb2xvclsxXSArICcsJyArIGFyckNvbG9yWzJdO1xyXG4gICAgaWYgKHR5cGUgPT09ICdyZ2JhJyB8fCB0eXBlID09PSAnaHN2YScgfHwgdHlwZSA9PT0gJ2hzbGEnKSB7XHJcbiAgICAgICAgY29sb3JTdHIgKz0gJywnICsgYXJyQ29sb3JbM107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHlwZSArICcoJyArIGNvbG9yU3RyICsgJyknO1xyXG59O1xyXG5cclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjb2xvclV0aWw7IiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCBjb2xvclV0aWwgZnJvbSAnLi9jb3JlL2NvbG9yJztcclxudmFyIHBhcnNlQ29sb3IgPSBjb2xvclV0aWwucGFyc2VUb0Zsb2F0O1xyXG5cclxudmFyIHByb2dyYW1LZXlDYWNoZSA9IHt9O1xyXG5cclxuZnVuY3Rpb24gZ2V0RGVmaW5lQ29kZShkZWZpbmVzKSB7XHJcbiAgICB2YXIgZGVmaW5lS2V5cyA9IE9iamVjdC5rZXlzKGRlZmluZXMpO1xyXG4gICAgZGVmaW5lS2V5cy5zb3J0KCk7XHJcbiAgICB2YXIgZGVmaW5lU3RyID0gW107XHJcbiAgICAvLyBDdXN0b20gRGVmaW5lc1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWZpbmVLZXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IGRlZmluZUtleXNbaV07XHJcbiAgICAgICAgdmFyIHZhbHVlID0gZGVmaW5lc1trZXldO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaChrZXkgKyAnICcgKyB2YWx1ZS50b1N0cmluZygpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGVmaW5lU3RyLmpvaW4oJ1xcbicpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQcm9ncmFtS2V5KHZlcnRleERlZmluZXMsIGZyYWdtZW50RGVmaW5lcywgZW5hYmxlZFRleHR1cmVzKSB7XHJcbiAgICBlbmFibGVkVGV4dHVyZXMuc29ydCgpO1xyXG4gICAgdmFyIGRlZmluZVN0ciA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkVGV4dHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgc3ltYm9sID0gZW5hYmxlZFRleHR1cmVzW2ldO1xyXG4gICAgICAgIGRlZmluZVN0ci5wdXNoKHN5bWJvbCk7XHJcbiAgICB9XHJcbiAgICB2YXIga2V5ID0gZ2V0RGVmaW5lQ29kZSh2ZXJ0ZXhEZWZpbmVzKSArICdcXG4nXHJcbiAgICAgICAgKyBnZXREZWZpbmVDb2RlKGZyYWdtZW50RGVmaW5lcykgKyAnXFxuJ1xyXG4gICAgICAgICsgZGVmaW5lU3RyLmpvaW4oJ1xcbicpO1xyXG5cclxuICAgIGlmIChwcm9ncmFtS2V5Q2FjaGVba2V5XSkge1xyXG4gICAgICAgIHJldHVybiBwcm9ncmFtS2V5Q2FjaGVba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgaWQgPSB1dGlsLmdlbkdVSUQoKTtcclxuICAgIHByb2dyYW1LZXlDYWNoZVtrZXldID0gaWQ7XHJcbiAgICByZXR1cm4gaWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNYXRlcmlhbCBkZWZpbmVzIHRoZSBhcHBlYXJhbmNlIG9mIG1lc2ggc3VyZmFjZSwgbGlrZSBgY29sb3JgLCBgcm91Z2huZXNzYCwgYG1ldGFsbmVzc2AsIGV0Yy5cclxuICogSXQgY29udGFpbnMgYSB7QGxpbmsgY2xheS5TaGFkZXJ9IGFuZCBjb3JyZXNwb25kaW5nIHVuaWZvcm1zLlxyXG4gKlxyXG4gKiBIZXJlIGlzIGEgYmFzaWMgZXhhbXBsZSB0byBjcmVhdGUgYSBzdGFuZGFyZCBtYXRlcmlhbFxyXG5gYGBqc1xyXG52YXIgbWF0ZXJpYWwgPSBuZXcgY2xheS5NYXRlcmlhbCh7XHJcbiAgICBzaGFkZXI6IG5ldyBjbGF5LlNoYWRlcihcclxuICAgICAgICBjbGF5LlNoYWRlci5zb3VyY2UoJ2NsYXkudmVydGV4JyksXHJcbiAgICAgICAgY2xheS5TaGFkZXIuc291cmNlKCdjbGF5LmZyYWdtZW50JylcclxuICAgIClcclxufSk7XHJcbmBgYFxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5NYXRlcmlhbFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIE1hdGVyaWFsID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5NYXRlcmlhbCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbmFtZTogJycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgLy8gdW5pZm9ybXM6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlNoYWRlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBzaGFkZXI6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRlcHRoVGVzdDogdHJ1ZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGVwdGhNYXNrOiB0cnVlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQmxlbmQgZnVuYyBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gdGhlIG1hdGVyaWFsXHJcbiAgICAgICAgICogaGF2ZSBjdXN0b20gYmxlbmRpbmdcclxuICAgICAgICAgKiBUaGUgZ2wgY29udGV4dCB3aWxsIGJlIHRoZSBvbmx5IGFyZ3VtZW50IHBhc3NlZCBpbiB0aG8gdGhlXHJcbiAgICAgICAgICogYmxlbmQgZnVuY3Rpb25cclxuICAgICAgICAgKiBEZXRhaWwgb2YgYmxlbmQgZnVuY3Rpb24gaW4gV2ViR0w6XHJcbiAgICAgICAgICogaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9nbGVzL3NwZWNzLzIuMC9lc19mdWxsX3NwZWNfMi4wLjI1LnBkZlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogRXhhbXBsZSA6XHJcbiAgICAgICAgICogZnVuY3Rpb24oX2dsKSB7XHJcbiAgICAgICAgICogIF9nbC5ibGVuZEVxdWF0aW9uKF9nbC5GVU5DX0FERCk7XHJcbiAgICAgICAgICogIF9nbC5ibGVuZEZ1bmMoX2dsLlNSQ19BTFBIQSwgX2dsLk9ORV9NSU5VU19TUkNfQUxQSEEpO1xyXG4gICAgICAgICAqIH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBibGVuZDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdXBkYXRlIHRleHR1cmUgc3RhdHVzIGF1dG9tYXRpY2FsbHkuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXV0b1VwZGF0ZVRleHR1cmVTdGF0dXM6IHRydWUsXHJcblxyXG4gICAgICAgIHVuaWZvcm1zOiB7fSxcclxuICAgICAgICB2ZXJ0ZXhEZWZpbmVzOiB7fSxcclxuICAgICAgICBmcmFnbWVudERlZmluZXM6IHt9LFxyXG4gICAgICAgIF90ZXh0dXJlU3RhdHVzOiB7fSxcclxuXHJcbiAgICAgICAgLy8gc2hhZG93VHJhbnNwYXJlbnRNYXAgOiBudWxsXHJcblxyXG4gICAgICAgIC8vIFBFTkRJTkcgZW5hYmxlIHRoZSB1bmlmb3JtIHRoYXQgb25seSB1c2VkIGluIHNoYWRlci5cclxuICAgICAgICBfZW5hYmxlZFVuaWZvcm1zOiBudWxsLFxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCF0aGlzLm5hbWUpIHtcclxuICAgICAgICB0aGlzLm5hbWUgPSAnTUFURVJJQUxfJyArIHRoaXMuX191aWRfXztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaGFkZXIpIHtcclxuICAgICAgICAvLyBLZWVwIHN0YXR1cywgbWFpbmx5IHByZXNldCB1bmlmb3JtcywgdmVydGV4RGVmaW5lcyBhbmQgZnJhZ21lbnREZWZpbmVzXHJcbiAgICAgICAgdGhpcy5hdHRhY2hTaGFkZXIodGhpcy5zaGFkZXIsIHRydWUpO1xyXG4gICAgfVxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuTWF0ZXJpYWwucHJvdG90eXBlICovXHJcbntcclxuICAgIHByZWNpc2lvbjogJ2hpZ2hwJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBtYXRlcmlhbCB1bmlmb3JtXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogIG1hdC5zZXRVbmlmb3JtKCdjb2xvcicsIFsxLCAxLCAxLCAxXSk7XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcnxhcnJheXxjbGF5LlRleHR1cmV8QXJyYXlCdWZmZXJWaWV3fSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBzZXRVbmlmb3JtOiBmdW5jdGlvbiAoc3ltYm9sLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5pZm9ybSB2YWx1ZSBcIicgKyBzeW1ib2wgKyAnXCIgaXMgdW5kZWZpbmVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB1bmlmb3JtID0gdGhpcy51bmlmb3Jtc1tzeW1ib2xdO1xyXG4gICAgICAgIGlmICh1bmlmb3JtKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIGFzIGEgY29sb3IuIEludmFsaWQgY29sb3Igc3RyaW5nIHdpbGwgcmV0dXJuIG51bGwuXHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlQ29sb3IodmFsdWUpIHx8IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB1bmlmb3JtLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvVXBkYXRlVGV4dHVyZVN0YXR1cyAmJiB1bmlmb3JtLnR5cGUgPT09ICd0Jykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVUZXh0dXJlKHN5bWJvbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVUZXh0dXJlKHN5bWJvbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9ialxyXG4gICAgICovXHJcbiAgICBzZXRVbmlmb3JtczogZnVuY3Rpb24ob2JqKSB7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xyXG4gICAgICAgICAgICB2YXIgdmFsID0gb2JqW2tleV07XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShrZXksIHZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gIHN5bWJvbFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNVbmlmb3JtRW5hYmxlZDogZnVuY3Rpb24gKHN5bWJvbCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkVW5pZm9ybXMuaW5kZXhPZihzeW1ib2wpID49IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEVuYWJsZWRVbmlmb3JtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkVW5pZm9ybXM7XHJcbiAgICB9LFxyXG4gICAgZ2V0VGV4dHVyZVVuaWZvcm1zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVVbmlmb3JtcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBvZiBzZXRVbmlmb3JtIGFuZCBzZXRVbmlmb3Jtc1xyXG4gICAgICogQHBhcmFtIHtvYmplY3R8c3RyaW5nfSBzeW1ib2xcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfGFycmF5fGNsYXkuVGV4dHVyZXxBcnJheUJ1ZmZlclZpZXd9IFt2YWx1ZV1cclxuICAgICAqL1xyXG4gICAgc2V0OiBmdW5jdGlvbiAoc3ltYm9sLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2Yoc3ltYm9sKSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHN5bWJvbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IHN5bWJvbFtrZXldO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKGtleSwgdmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKHN5bWJvbCwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCB1bmlmb3JtIHZhbHVlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfGFycmF5fGNsYXkuVGV4dHVyZXxBcnJheUJ1ZmZlclZpZXd9XHJcbiAgICAgKi9cclxuICAgIGdldDogZnVuY3Rpb24gKHN5bWJvbCkge1xyXG4gICAgICAgIHZhciB1bmlmb3JtID0gdGhpcy51bmlmb3Jtc1tzeW1ib2xdO1xyXG4gICAgICAgIGlmICh1bmlmb3JtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmlmb3JtLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEF0dGFjaCBhIHNoYWRlciBpbnN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5TaGFkZXJ9IHNoYWRlclxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0ga2VlcFN0YXR1cyBJZiB0cnkgdG8ga2VlcCB1bmlmb3JtIGFuZCB0ZXh0dXJlXHJcbiAgICAgKi9cclxuICAgIGF0dGFjaFNoYWRlcjogZnVuY3Rpb24oc2hhZGVyLCBrZWVwU3RhdHVzKSB7XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsVW5pZm9ybXMgPSB0aGlzLnVuaWZvcm1zO1xyXG5cclxuICAgICAgICAvLyBJZ25vcmUgaWYgdW5pZm9ybSBjYW4gdXNlIGluIHNoYWRlci5cclxuICAgICAgICB0aGlzLnVuaWZvcm1zID0gc2hhZGVyLmNyZWF0ZVVuaWZvcm1zKCk7XHJcbiAgICAgICAgdGhpcy5zaGFkZXIgPSBzaGFkZXI7XHJcblxyXG4gICAgICAgIHZhciB1bmlmb3JtcyA9IHRoaXMudW5pZm9ybXM7XHJcbiAgICAgICAgdGhpcy5fZW5hYmxlZFVuaWZvcm1zID0gT2JqZWN0LmtleXModW5pZm9ybXMpO1xyXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB1bmlmb3JtcyBhcmUgc2V0IGluIHNhbWUgb3JkZXIgdG8gYXZvaWQgdGV4dHVyZSBzbG90IHdyb25nXHJcbiAgICAgICAgdGhpcy5fZW5hYmxlZFVuaWZvcm1zLnNvcnQoKTtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlVW5pZm9ybXMgPSB0aGlzLl9lbmFibGVkVW5pZm9ybXMuZmlsdGVyKGZ1bmN0aW9uICh1bmlmb3JtTmFtZSkge1xyXG4gICAgICAgICAgICB2YXIgdHlwZSA9IHRoaXMudW5pZm9ybXNbdW5pZm9ybU5hbWVdLnR5cGU7XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlID09PSAndCcgfHwgdHlwZSA9PT0gJ3R2JztcclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgdmFyIG9yaWdpbmFsVmVydGV4RGVmaW5lcyA9IHRoaXMudmVydGV4RGVmaW5lcztcclxuICAgICAgICB2YXIgb3JpZ2luYWxGcmFnbWVudERlZmluZXMgPSB0aGlzLmZyYWdtZW50RGVmaW5lcztcclxuXHJcbiAgICAgICAgdGhpcy52ZXJ0ZXhEZWZpbmVzID0gdXRpbC5jbG9uZShzaGFkZXIudmVydGV4RGVmaW5lcyk7XHJcbiAgICAgICAgdGhpcy5mcmFnbWVudERlZmluZXMgPSB1dGlsLmNsb25lKHNoYWRlci5mcmFnbWVudERlZmluZXMpO1xyXG5cclxuICAgICAgICBpZiAoa2VlcFN0YXR1cykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gb3JpZ2luYWxVbmlmb3Jtcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1zW3N5bWJvbF0pIHtcclxuICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtc1tzeW1ib2xdLnZhbHVlID0gb3JpZ2luYWxVbmlmb3Jtc1tzeW1ib2xdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB1dGlsLmRlZmF1bHRzKHRoaXMudmVydGV4RGVmaW5lcywgb3JpZ2luYWxWZXJ0ZXhEZWZpbmVzKTtcclxuICAgICAgICAgICAgdXRpbC5kZWZhdWx0cyh0aGlzLmZyYWdtZW50RGVmaW5lcywgb3JpZ2luYWxGcmFnbWVudERlZmluZXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc2hhZGVyLnRleHR1cmVzKSB7XHJcbiAgICAgICAgICAgIHRleHR1cmVTdGF0dXNba2V5XSA9IHtcclxuICAgICAgICAgICAgICAgIHNoYWRlclR5cGU6IHNoYWRlci50ZXh0dXJlc1trZXldLnNoYWRlclR5cGUsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBzaGFkZXIudGV4dHVyZXNba2V5XS50eXBlLFxyXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogKGtlZXBTdGF0dXMgJiYgdGhpcy5fdGV4dHVyZVN0YXR1c1trZXldKSA/IHRoaXMuX3RleHR1cmVTdGF0dXNba2V5XS5lbmFibGVkIDogZmFsc2VcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3RleHR1cmVTdGF0dXMgPSB0ZXh0dXJlU3RhdHVzO1xyXG5cclxuICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgbWF0ZXJpYWwgYW5kIGtlZXAgdW5pZm9ybXMsIHNoYWRlciB3aWxsIG5vdCBiZSBjbG9uZWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0ZXJpYWx9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG1hdGVyaWFsID0gbmV3IHRoaXMuY29uc3RydWN0b3Ioe1xyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXHJcbiAgICAgICAgICAgIHNoYWRlcjogdGhpcy5zaGFkZXJcclxuICAgICAgICB9KTtcclxuICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gdGhpcy51bmlmb3Jtcykge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC51bmlmb3Jtc1tzeW1ib2xdLnZhbHVlID0gdGhpcy51bmlmb3Jtc1tzeW1ib2xdLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtYXRlcmlhbC5kZXB0aFRlc3QgPSB0aGlzLmRlcHRoVGVzdDtcclxuICAgICAgICBtYXRlcmlhbC5kZXB0aE1hc2sgPSB0aGlzLmRlcHRoTWFzaztcclxuICAgICAgICBtYXRlcmlhbC50cmFuc3BhcmVudCA9IHRoaXMudHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgbWF0ZXJpYWwuYmxlbmQgPSB0aGlzLmJsZW5kO1xyXG5cclxuICAgICAgICBtYXRlcmlhbC52ZXJ0ZXhEZWZpbmVzID0gdXRpbC5jbG9uZSh0aGlzLnZlcnRleERlZmluZXMpO1xyXG4gICAgICAgIG1hdGVyaWFsLmZyYWdtZW50RGVmaW5lcyA9IHV0aWwuY2xvbmUodGhpcy5mcmFnbWVudERlZmluZXMpO1xyXG4gICAgICAgIG1hdGVyaWFsLmVuYWJsZVRleHR1cmUodGhpcy5nZXRFbmFibGVkVGV4dHVyZXMoKSk7XHJcbiAgICAgICAgbWF0ZXJpYWwucHJlY2lzaW9uID0gdGhpcy5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYSAjZGVmaW5lIG1hY3JvIGluIHNoYWRlciBjb2RlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHNoYWRlclR5cGUgQ2FuIGJlIHZlcnRleCwgZnJhZ21lbnQgb3IgYm90aFxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW3ZhbF1cclxuICAgICAqL1xyXG4gICAgZGVmaW5lOiBmdW5jdGlvbiAoc2hhZGVyVHlwZSwgc3ltYm9sLCB2YWwpIHtcclxuICAgICAgICB2YXIgdmVydGV4RGVmaW5lcyA9IHRoaXMudmVydGV4RGVmaW5lcztcclxuICAgICAgICB2YXIgZnJhZ21lbnREZWZpbmVzID0gdGhpcy5mcmFnbWVudERlZmluZXM7XHJcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgIT09ICd2ZXJ0ZXgnICYmIHNoYWRlclR5cGUgIT09ICdmcmFnbWVudCcgJiYgc2hhZGVyVHlwZSAhPT0gJ2JvdGgnXHJcbiAgICAgICAgICAgICYmIGFyZ3VtZW50cy5sZW5ndGggPCAzXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIHNoYWRlclR5cGUgZGVmYXVsdCB0byBiZSAnYm90aCdcclxuICAgICAgICAgICAgdmFsID0gc3ltYm9sO1xyXG4gICAgICAgICAgICBzeW1ib2wgPSBzaGFkZXJUeXBlO1xyXG4gICAgICAgICAgICBzaGFkZXJUeXBlID0gJ2JvdGgnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YWwgPSB2YWwgIT0gbnVsbCA/IHZhbCA6IG51bGw7XHJcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgPT09ICd2ZXJ0ZXgnIHx8IHNoYWRlclR5cGUgPT09ICdib3RoJykge1xyXG4gICAgICAgICAgICBpZiAodmVydGV4RGVmaW5lc1tzeW1ib2xdICE9PSB2YWwpIHtcclxuICAgICAgICAgICAgICAgIHZlcnRleERlZmluZXNbc3ltYm9sXSA9IHZhbDtcclxuICAgICAgICAgICAgICAgIC8vIE1hcmsgYXMgZGlydHlcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2hhZGVyVHlwZSA9PT0gJ2ZyYWdtZW50JyB8fCBzaGFkZXJUeXBlID09PSAnYm90aCcpIHtcclxuICAgICAgICAgICAgaWYgKGZyYWdtZW50RGVmaW5lc1tzeW1ib2xdICE9PSB2YWwpIHtcclxuICAgICAgICAgICAgICAgIGZyYWdtZW50RGVmaW5lc1tzeW1ib2xdID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRlclR5cGUgIT09ICdib3RoJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgYSAjZGVmaW5lIG1hY3JvIGluIHNoYWRlciBjb2RlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHNoYWRlclR5cGUgQ2FuIGJlIHZlcnRleCwgZnJhZ21lbnQgb3IgYm90aFxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcclxuICAgICAqL1xyXG4gICAgdW5kZWZpbmU6IGZ1bmN0aW9uIChzaGFkZXJUeXBlLCBzeW1ib2wpIHtcclxuICAgICAgICBpZiAoc2hhZGVyVHlwZSAhPT0gJ3ZlcnRleCcgJiYgc2hhZGVyVHlwZSAhPT0gJ2ZyYWdtZW50JyAmJiBzaGFkZXJUeXBlICE9PSAnYm90aCdcclxuICAgICAgICAgICAgJiYgYXJndW1lbnRzLmxlbmd0aCA8IDJcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgLy8gc2hhZGVyVHlwZSBkZWZhdWx0IHRvIGJlICdib3RoJ1xyXG4gICAgICAgICAgICBzeW1ib2wgPSBzaGFkZXJUeXBlO1xyXG4gICAgICAgICAgICBzaGFkZXJUeXBlID0gJ2JvdGgnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2hhZGVyVHlwZSA9PT0gJ3ZlcnRleCcgfHwgc2hhZGVyVHlwZSA9PT0gJ2JvdGgnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVmaW5lZCgndmVydGV4Jywgc3ltYm9sKSkge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudmVydGV4RGVmaW5lc1tzeW1ib2xdO1xyXG4gICAgICAgICAgICAgICAgLy8gTWFyayBhcyBkaXJ0eVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzaGFkZXJUeXBlID09PSAnZnJhZ21lbnQnIHx8IHNoYWRlclR5cGUgPT09ICdib3RoJykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0RlZmluZWQoJ2ZyYWdtZW50Jywgc3ltYm9sKSkge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZnJhZ21lbnREZWZpbmVzW3N5bWJvbF07XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hhZGVyVHlwZSAhPT0gJ2JvdGgnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIG1hY3JvIGlzIGRlZmluZWQgaW4gc2hhZGVyLlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJUeXBlIENhbiBiZSB2ZXJ0ZXgsIGZyYWdtZW50IG9yIGJvdGhcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKi9cclxuICAgIGlzRGVmaW5lZDogZnVuY3Rpb24gKHNoYWRlclR5cGUsIHN5bWJvbCkge1xyXG4gICAgICAgIC8vIFBFTkRJTkcgaGFzT3duUHJvcGVydHkgP1xyXG4gICAgICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICd2ZXJ0ZXgnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmVydGV4RGVmaW5lc1tzeW1ib2xdICE9PSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ZyYWdtZW50JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyYWdtZW50RGVmaW5lc1tzeW1ib2xdICE9PSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogR2V0IG1hY3JvIHZhbHVlIGRlZmluZWQgaW4gc2hhZGVyLlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJUeXBlIENhbiBiZSB2ZXJ0ZXgsIGZyYWdtZW50IG9yIGJvdGhcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKi9cclxuICAgIGdldERlZmluZTogZnVuY3Rpb24gKHNoYWRlclR5cGUsIHN5bWJvbCkge1xyXG4gICAgICAgIHN3aXRjaChzaGFkZXJUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3ZlcnRleCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52ZXJ0ZXhEZWZpbmVzW3N5bWJvbF07XHJcbiAgICAgICAgICAgIGNhc2UgJ2ZyYWdtZW50JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyYWdtZW50RGVmaW5lc1tzeW1ib2xdO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZSBhIHRleHR1cmUsIGFjdHVhbGx5IGl0IHdpbGwgYWRkIGEgI2RlZmluZSBtYWNybyBpbiB0aGUgc2hhZGVyIGNvZGVcclxuICAgICAqIEZvciBleGFtcGxlLCBpZiB0ZXh0dXJlIHN5bWJvbCBpcyBkaWZmdXNlTWFwLCBpdCB3aWxsIGFkZCBhIGxpbmUgYCNkZWZpbmUgRElGRlVTRU1BUF9FTkFCTEVEYCBpbiB0aGUgc2hhZGVyIGNvZGVcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKi9cclxuICAgIGVuYWJsZVRleHR1cmU6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzeW1ib2wpKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9sLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZVRleHR1cmUoc3ltYm9sW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc3RhdHVzID0gdGhpcy5fdGV4dHVyZVN0YXR1c1tzeW1ib2xdO1xyXG4gICAgICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgICAgICAgdmFyIGlzRW5hYmxlZCA9IHN0YXR1cy5lbmFibGVkO1xyXG4gICAgICAgICAgICBpZiAoIWlzRW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRW5hYmxlIGFsbCB0ZXh0dXJlcyB1c2VkIGluIHRoZSBzaGFkZXJcclxuICAgICAqL1xyXG4gICAgZW5hYmxlVGV4dHVyZXNBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZVN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXM7XHJcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRleHR1cmVTdGF0dXMpIHtcclxuICAgICAgICAgICAgdGV4dHVyZVN0YXR1c1tzeW1ib2xdLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGlzYWJsZSBhIHRleHR1cmUsIGl0IHJlbW92ZSBhICNkZWZpbmUgbWFjcm8gaW4gdGhlIHNoYWRlclxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcclxuICAgICAqL1xyXG4gICAgZGlzYWJsZVRleHR1cmU6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzeW1ib2wpKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9sLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVUZXh0dXJlKHN5bWJvbFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXNbc3ltYm9sXTtcclxuICAgICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHZhciBpc0Rpc2FibGVkID0gISBzdGF0dXMuZW5hYmxlZDtcclxuICAgICAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXMuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGlzYWJsZSBhbGwgdGV4dHVyZXMgdXNlZCBpbiB0aGUgc2hhZGVyXHJcbiAgICAgKi9cclxuICAgIGRpc2FibGVUZXh0dXJlc0FsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlU3RhdHVzID0gdGhpcy5fdGV4dHVyZVN0YXR1cztcclxuICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gdGV4dHVyZVN0YXR1cykge1xyXG4gICAgICAgICAgICB0ZXh0dXJlU3RhdHVzW3N5bWJvbF0uZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogSWYgdGV4dHVyZSBvZiBnaXZlbiB0eXBlIGlzIGVuYWJsZWQuXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBzeW1ib2xcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzVGV4dHVyZUVuYWJsZWQ6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZVN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXM7XHJcbiAgICAgICAgcmV0dXJuICEhdGV4dHVyZVN0YXR1c1tzeW1ib2xdXHJcbiAgICAgICAgICAgICYmIHRleHR1cmVTdGF0dXNbc3ltYm9sXS5lbmFibGVkO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhbGwgZW5hYmxlZCB0ZXh0dXJlc1xyXG4gICAgICogQHJldHVybiB7c3RyaW5nW119XHJcbiAgICAgKi9cclxuICAgIGdldEVuYWJsZWRUZXh0dXJlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBlbmFibGVkVGV4dHVyZXMgPSBbXTtcclxuICAgICAgICB2YXIgdGV4dHVyZVN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXM7XHJcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRleHR1cmVTdGF0dXMpIHtcclxuICAgICAgICAgICAgaWYgKHRleHR1cmVTdGF0dXNbc3ltYm9sXS5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBlbmFibGVkVGV4dHVyZXMucHVzaChzeW1ib2wpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlbmFibGVkVGV4dHVyZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFyayBkZWZpbmVzIGFyZSB1cGRhdGVkLlxyXG4gICAgICovXHJcbiAgICBkaXJ0eURlZmluZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFByb2dyYW1LZXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3Byb2dyYW1LZXkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9IGdldFByb2dyYW1LZXkoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZlcnRleERlZmluZXMsIHRoaXMuZnJhZ21lbnREZWZpbmVzLCB0aGlzLmdldEVuYWJsZWRUZXh0dXJlcygpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9ncmFtS2V5O1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1hdGVyaWFsO1xyXG4iLCJpbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuXHJcbnZhciBTSEFERVJfU1RBVEVfVE9fRU5BQkxFID0gMTtcclxudmFyIFNIQURFUl9TVEFURV9LRUVQX0VOQUJMRSA9IDI7XHJcbnZhciBTSEFERVJfU1RBVEVfUEVORElORyA9IDM7XHJcblxyXG4vLyBFbmFibGUgYXR0cmlidXRlIG9wZXJhdGlvbiBpcyBnbG9iYWwgdG8gYWxsIHByb2dyYW1zXHJcbi8vIEhlcmUgc2F2ZWQgdGhlIGxpc3Qgb2YgYWxsIGVuYWJsZWQgYXR0cmlidXRlIGluZGV4XHJcbi8vIGh0dHA6Ly93d3cubWpic2hhdy5jb20vMjAxMy8wMy93ZWJnbC1maXhpbmctaW52YWxpZG9wZXJhdGlvbi5odG1sXHJcbnZhciBlbmFibGVkQXR0cmlidXRlTGlzdCA9IHt9O1xyXG5cclxuLy8gc29tZSB1dGlsIGZ1bmN0aW9uc1xyXG5mdW5jdGlvbiBhZGRMaW5lTnVtYmVycyhzdHJpbmcpIHtcclxuICAgIHZhciBjaHVua3MgPSBzdHJpbmcuc3BsaXQoJ1xcbicpO1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gY2h1bmtzLmxlbmd0aDsgaSA8IGlsOyBpICsrKSB7XHJcbiAgICAgICAgLy8gQ2hyb21lIHJlcG9ydHMgc2hhZGVyIGVycm9ycyBvbiBsaW5lc1xyXG4gICAgICAgIC8vIHN0YXJ0aW5nIGNvdW50aW5nIGZyb20gMVxyXG4gICAgICAgIGNodW5rc1tpXSA9IChpICsgMSkgKyAnOiAnICsgY2h1bmtzW2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNodW5rcy5qb2luKCdcXG4nKTtcclxufVxyXG5cclxuLy8gUmV0dXJuIHRydWUgb3IgZXJyb3IgbXNnIGlmIGVycm9yIGhhcHBlbmVkXHJcbmZ1bmN0aW9uIGNoZWNrU2hhZGVyRXJyb3JNc2coX2dsLCBzaGFkZXIsIHNoYWRlclN0cmluZykge1xyXG4gICAgaWYgKCFfZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgX2dsLkNPTVBJTEVfU1RBVFVTKSkge1xyXG4gICAgICAgIHJldHVybiBbX2dsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSwgYWRkTGluZU51bWJlcnMoc2hhZGVyU3RyaW5nKV0uam9pbignXFxuJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbnZhciB0bXBGbG9hdDMyQXJyYXkxNiA9IG5ldyB2ZW5kb3IuRmxvYXQzMkFycmF5KDE2KTtcclxuXHJcbnZhciBHTFByb2dyYW0gPSBCYXNlLmV4dGVuZCh7XHJcblxyXG4gICAgdW5pZm9ybVNlbWFudGljczoge30sXHJcbiAgICBhdHRyaWJ1dGVzOiB7fVxyXG5cclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fbG9jYXRpb25zID0ge307XHJcblxyXG4gICAgdGhpcy5fdGV4dHVyZVNsb3QgPSAwO1xyXG5cclxuICAgIHRoaXMuX3Byb2dyYW0gPSBudWxsO1xyXG59LCB7XHJcblxyXG4gICAgYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVNsb3QgPSAwO1xyXG4gICAgICAgIHJlbmRlcmVyLmdsLnVzZVByb2dyYW0odGhpcy5fcHJvZ3JhbSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGhhc1VuaWZvcm06IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl9sb2NhdGlvbnNbc3ltYm9sXTtcclxuICAgICAgICByZXR1cm4gbG9jYXRpb24gIT09IG51bGwgJiYgbG9jYXRpb24gIT09IHVuZGVmaW5lZDtcclxuICAgIH0sXHJcblxyXG4gICAgdXNlVGV4dHVyZVNsb3Q6IGZ1bmN0aW9uIChyZW5kZXJlciwgdGV4dHVyZSwgc2xvdCkge1xyXG4gICAgICAgIGlmICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLmdsLmFjdGl2ZVRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRTAgKyBzbG90KTtcclxuICAgICAgICAgICAgLy8gTWF5YmUgdGV4dHVyZSBpcyBub3QgbG9hZGVkIHlldDtcclxuICAgICAgICAgICAgaWYgKHRleHR1cmUuaXNSZW5kZXJhYmxlKCkpIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBCaW5kIHRleHR1cmUgdG8gbnVsbFxyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS51bmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjdXJyZW50VGV4dHVyZVNsb3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZVNsb3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlc2V0VGV4dHVyZVNsb3Q6IGZ1bmN0aW9uIChzbG90KSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVNsb3QgPSBzbG90IHx8IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIHRha2VDdXJyZW50VGV4dHVyZVNsb3Q6IGZ1bmN0aW9uIChyZW5kZXJlciwgdGV4dHVyZSkge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlU2xvdCA9IHRoaXMuX3RleHR1cmVTbG90O1xyXG5cclxuICAgICAgICB0aGlzLnVzZVRleHR1cmVTbG90KHJlbmRlcmVyLCB0ZXh0dXJlLCB0ZXh0dXJlU2xvdCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3RleHR1cmVTbG90Kys7XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlU2xvdDtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0VW5pZm9ybTogZnVuY3Rpb24gKF9nbCwgdHlwZSwgc3ltYm9sLCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciBsb2NhdGlvbk1hcCA9IHRoaXMuX2xvY2F0aW9ucztcclxuICAgICAgICB2YXIgbG9jYXRpb24gPSBsb2NhdGlvbk1hcFtzeW1ib2xdO1xyXG4gICAgICAgIC8vIFVuaWZvcm0gaXMgbm90IGV4aXN0ZWQgaW4gdGhlIHNoYWRlclxyXG4gICAgICAgIGlmIChsb2NhdGlvbiA9PT0gbnVsbCB8fCBsb2NhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdtNCc6XHJcbiAgICAgICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBVc2UgRmxvYXQzMkFycmF5IGlzIG11Y2ggZmFzdGVyIHRoYW4gYXJyYXkgd2hlbiB1bmlmb3JtTWF0cml4NGZ2LlxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG1wRmxvYXQzMkFycmF5MTZbaV0gPSB2YWx1ZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0bXBGbG9hdDMyQXJyYXkxNjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzJpJzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMmYnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICczaSc6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICczZic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICc0aSc6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnNGYnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzFpJzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICcxZic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMWZ2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMWl2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMml2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMmZ2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnM2l2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnM2Z2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnNGl2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnNGZ2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbTInOlxyXG4gICAgICAgICAgICBjYXNlICdtMnYnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbTMnOlxyXG4gICAgICAgICAgICBjYXNlICdtM3YnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbTR2JzpcclxuICAgICAgICAgICAgICAgIC8vIFJhdyB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIEFycmF5LmlzQXJyYXkodmFsdWVbMF0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkodmFsdWUubGVuZ3RoICogMTYpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB2YWx1ZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxNjsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtjdXJzb3IrK10gPSBpdGVtW2pdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBmYWxzZSwgYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7ICAgLy8gQXJyYXlCdWZmZXJWaWV3XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFVuaWZvcm1PZlNlbWFudGljOiBmdW5jdGlvbiAoX2dsLCBzZW1hbnRpYywgdmFsKSB7XHJcbiAgICAgICAgdmFyIHNlbWFudGljSW5mbyA9IHRoaXMudW5pZm9ybVNlbWFudGljc1tzZW1hbnRpY107XHJcbiAgICAgICAgaWYgKHNlbWFudGljSW5mbykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRVbmlmb3JtKF9nbCwgc2VtYW50aWNJbmZvLnR5cGUsIHNlbWFudGljSW5mby5zeW1ib2wsIHZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVXNlZCBmb3IgY3JlYXRpbmcgVkFPXHJcbiAgICAvLyBFbmFibGUgdGhlIGF0dHJpYnV0ZXMgcGFzc2VkIGluIGFuZCBkaXNhYmxlIHRoZSByZXN0XHJcbiAgICAvLyBFeGFtcGxlIFVzYWdlOlxyXG4gICAgLy8gZW5hYmxlQXR0cmlidXRlcyhyZW5kZXJlciwgW1wicG9zaXRpb25cIiwgXCJ0ZXhjb29yZHNcIl0pXHJcbiAgICBlbmFibGVBdHRyaWJ1dGVzOiBmdW5jdGlvbiAocmVuZGVyZXIsIGF0dHJpYkxpc3QsIHZhbykge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgcHJvZ3JhbSA9IHRoaXMuX3Byb2dyYW07XHJcblxyXG4gICAgICAgIHZhciBsb2NhdGlvbk1hcCA9IHRoaXMuX2xvY2F0aW9ucztcclxuXHJcbiAgICAgICAgdmFyIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0O1xyXG4gICAgICAgIGlmICh2YW8pIHtcclxuICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHQgPSB2YW8uX19lbmFibGVkQXR0cmlidXRlTGlzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0ID0gZW5hYmxlZEF0dHJpYnV0ZUxpc3RbcmVuZGVyZXIuX191aWRfX107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHQpIHtcclxuICAgICAgICAgICAgLy8gSW4gdmVydGV4IGFycmF5IG9iamVjdCBjb250ZXh0XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkcgRWFjaCB2YW8gb2JqZWN0IG5lZWRzIHRvIGVuYWJsZSBhdHRyaWJ1dGVzIGFnYWluP1xyXG4gICAgICAgICAgICBpZiAodmFvKSB7XHJcbiAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFxyXG4gICAgICAgICAgICAgICAgICAgID0gdmFvLl9fZW5hYmxlZEF0dHJpYnV0ZUxpc3RcclxuICAgICAgICAgICAgICAgICAgICA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRcclxuICAgICAgICAgICAgICAgICAgICA9IGVuYWJsZWRBdHRyaWJ1dGVMaXN0W3JlbmRlcmVyLl9fdWlkX19dXHJcbiAgICAgICAgICAgICAgICAgICAgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbG9jYXRpb25MaXN0ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBzeW1ib2wgPSBhdHRyaWJMaXN0W2ldO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuYXR0cmlidXRlc1tzeW1ib2xdKSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbkxpc3RbaV0gPSAtMTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGxvY2F0aW9uTWFwW3N5bWJvbF07XHJcbiAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IF9nbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgLy8gQXR0cmliIGxvY2F0aW9uIGlzIGEgbnVtYmVyIGZyb20gMCB0byAuLi5cclxuICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbkxpc3RbaV0gPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uTWFwW3N5bWJvbF0gPSBsb2NhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsb2NhdGlvbkxpc3RbaV0gPSBsb2NhdGlvbjtcclxuXHJcbiAgICAgICAgICAgIGlmICghZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbbG9jYXRpb25dKSB7XHJcbiAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtsb2NhdGlvbl0gPSBTSEFERVJfU1RBVEVfVE9fRU5BQkxFO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbbG9jYXRpb25dID0gU0hBREVSX1NUQVRFX0tFRVBfRU5BQkxFO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaChlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtpXSl7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFNIQURFUl9TVEFURV9UT19FTkFCTEU6XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0W2ldID0gU0hBREVSX1NUQVRFX1BFTkRJTkc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFNIQURFUl9TVEFURV9LRUVQX0VOQUJMRTpcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtpXSA9IFNIQURFUl9TVEFURV9QRU5ESU5HO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgLy8gRXhwaXJlZFxyXG4gICAgICAgICAgICAgICAgY2FzZSBTSEFERVJfU1RBVEVfUEVORElORzpcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0W2ldID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uTGlzdDtcclxuICAgIH0sXHJcblxyXG4gICAgYnVpbGRQcm9ncmFtOiBmdW5jdGlvbiAoX2dsLCBzaGFkZXIsIHZlcnRleFNoYWRlckNvZGUsIGZyYWdtZW50U2hhZGVyQ29kZSkge1xyXG4gICAgICAgIHZhciB2ZXJ0ZXhTaGFkZXIgPSBfZ2wuY3JlYXRlU2hhZGVyKF9nbC5WRVJURVhfU0hBREVSKTtcclxuICAgICAgICB2YXIgcHJvZ3JhbSA9IF9nbC5jcmVhdGVQcm9ncmFtKCk7XHJcblxyXG4gICAgICAgIF9nbC5zaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJDb2RlKTtcclxuICAgICAgICBfZ2wuY29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpO1xyXG5cclxuICAgICAgICB2YXIgZnJhZ21lbnRTaGFkZXIgPSBfZ2wuY3JlYXRlU2hhZGVyKF9nbC5GUkFHTUVOVF9TSEFERVIpO1xyXG4gICAgICAgIF9nbC5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyQ29kZSk7XHJcbiAgICAgICAgX2dsLmNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpO1xyXG5cclxuICAgICAgICB2YXIgbXNnID0gY2hlY2tTaGFkZXJFcnJvck1zZyhfZ2wsIHZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyQ29kZSk7XHJcbiAgICAgICAgaWYgKG1zZykge1xyXG4gICAgICAgICAgICByZXR1cm4gbXNnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtc2cgPSBjaGVja1NoYWRlckVycm9yTXNnKF9nbCwgZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyQ29kZSk7XHJcbiAgICAgICAgaWYgKG1zZykge1xyXG4gICAgICAgICAgICByZXR1cm4gbXNnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgX2dsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpO1xyXG4gICAgICAgIF9nbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpO1xyXG4gICAgICAgIC8vIEZvcmNlIHRoZSBwb3NpdGlvbiBiaW5kIHRvIGxvY2F0aW9uIDA7XHJcbiAgICAgICAgaWYgKHNoYWRlci5hdHRyaWJ1dGVTZW1hbnRpY3NbJ1BPU0lUSU9OJ10pIHtcclxuICAgICAgICAgICAgX2dsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAwLCBzaGFkZXIuYXR0cmlidXRlU2VtYW50aWNzWydQT1NJVElPTiddLnN5bWJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBFbHNlIGNob29zZSBhbiBhdHRyaWJ1dGUgYW5kIGJpbmQgdG8gbG9jYXRpb24gMDtcclxuICAgICAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpO1xyXG4gICAgICAgICAgICBfZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDAsIGtleXNbMF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgX2dsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xyXG5cclxuICAgICAgICBfZ2wuZGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcik7XHJcbiAgICAgICAgX2dsLmRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb2dyYW0gPSBwcm9ncmFtO1xyXG5cclxuICAgICAgICAvLyBTYXZlIGNvZGUuXHJcbiAgICAgICAgdGhpcy52ZXJ0ZXhDb2RlID0gdmVydGV4U2hhZGVyQ29kZTtcclxuICAgICAgICB0aGlzLmZyYWdtZW50Q29kZSA9IGZyYWdtZW50U2hhZGVyQ29kZTtcclxuXHJcbiAgICAgICAgaWYgKCFfZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBfZ2wuTElOS19TVEFUVVMpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnQ291bGQgbm90IGxpbmsgcHJvZ3JhbVxcbicgKyBfZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDYWNoZSB1bmlmb3JtIGxvY2F0aW9uc1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2hhZGVyLnVuaWZvcm1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtU3ltYm9sID0gc2hhZGVyLnVuaWZvcm1zW2ldO1xyXG4gICAgICAgICAgICB0aGlzLl9sb2NhdGlvbnNbdW5pZm9ybVN5bWJvbF0gPSBfZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIHVuaWZvcm1TeW1ib2wpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgR0xQcm9ncmFtOyIsImltcG9ydCBHTFByb2dyYW0gZnJvbSAnLi9HTFByb2dyYW0nO1xyXG5cclxudmFyIGxvb3BSZWdleCA9IC9mb3JcXHMqP1xcKGludFxccyo/X2lkeF9cXHMqXFw9XFxzKihbXFx3LV0rKVxcO1xccypfaWR4X1xccyo8XFxzKihbXFx3LV0rKTtcXHMqX2lkeF9cXHMqXFwrXFwrXFxzKlxcKVxccypcXHtcXHsoW1xcc1xcU10rPykoPz1cXH1cXH0pXFx9XFx9L2c7XHJcblxyXG5mdW5jdGlvbiB1bnJvbGxMb29wKHNoYWRlclN0ciwgZGVmaW5lcywgbGlnaHRzTnVtYmVycykge1xyXG4gICAgLy8gTG9vcCB1bnJvbGwgZnJvbSB0aHJlZS5qcywgaHR0cHM6Ly9naXRodWIuY29tL21yZG9vYi90aHJlZS5qcy9ibG9iL21hc3Rlci9zcmMvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUHJvZ3JhbS5qcyNMMTc1XHJcbiAgICAvLyBJbiBzb21lIGNhc2UgbGlrZSBzaGFkb3dNYXAgaW4gbG9vcCB1c2UgJ2knIHRvIGluZGV4IHZhbHVlIG11Y2ggc2xvd2VyLlxyXG5cclxuICAgIC8vIExvb3AgdXNlIF9pZHhfIGFuZCBpbmNyZWFzZWQgd2l0aCBfaWR4XysrIHdpbGwgYmUgdW5yb2xsZWRcclxuICAgIC8vIFVzZSB7eyB9fSB0byBtYXRjaCB0aGUgcGFpciBzbyB0aGUgaWYgc3RhdGVtZW50IHdpbGwgbm90IGJlIGFmZmVjdGVkXHJcbiAgICAvLyBXcml0ZSBsaWtlIGZvbGxvd2luZ1xyXG4gICAgLy8gZm9yIChpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IDQ7IF9pZHhfKyspIHt7XHJcbiAgICAvLyAgICAgdmVjMyBjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlc1tfaWR4X10sIHV2KS5yZ2I7XHJcbiAgICAvLyB9fVxyXG4gICAgZnVuY3Rpb24gcmVwbGFjZShtYXRjaCwgc3RhcnQsIGVuZCwgc25pcHBldCkge1xyXG4gICAgICAgIHZhciB1bnJvbGwgPSAnJztcclxuICAgICAgICAvLyBUcnkgdG8gdHJlYXQgYXMgZGVmaW5lXHJcbiAgICAgICAgaWYgKGlzTmFOKHN0YXJ0KSkge1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgaW4gZGVmaW5lcykge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQgPSBkZWZpbmVzW3N0YXJ0XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gbGlnaHROdW1iZXJEZWZpbmVzW3N0YXJ0XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNOYU4oZW5kKSkge1xyXG4gICAgICAgICAgICBpZiAoZW5kIGluIGRlZmluZXMpIHtcclxuICAgICAgICAgICAgICAgIGVuZCA9IGRlZmluZXNbZW5kXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVuZCA9IGxpZ2h0TnVtYmVyRGVmaW5lc1tlbmRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE8gRXJyb3IgY2hlY2tpbmdcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaWR4ID0gcGFyc2VJbnQoc3RhcnQpOyBpZHggPCBwYXJzZUludChlbmQpOyBpZHgrKykge1xyXG4gICAgICAgICAgICAvLyBQRU5ESU5HIEFkZCBzY29wZT9cclxuICAgICAgICAgICAgdW5yb2xsICs9ICd7J1xyXG4gICAgICAgICAgICAgICAgKyBzbmlwcGV0XHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL2Zsb2F0XFxzKlxcKFxccypfaWR4X1xccypcXCkvZywgaWR4LnRvRml4ZWQoMSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL19pZHhfL2csIGlkeClcclxuICAgICAgICAgICAgKyAnfSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdW5yb2xsO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBsaWdodE51bWJlckRlZmluZXMgPSB7fTtcclxuICAgIGZvciAodmFyIGxpZ2h0VHlwZSBpbiBsaWdodHNOdW1iZXJzKSB7XHJcbiAgICAgICAgbGlnaHROdW1iZXJEZWZpbmVzW2xpZ2h0VHlwZSArICdfQ09VTlQnXSA9IGxpZ2h0c051bWJlcnNbbGlnaHRUeXBlXTtcclxuICAgIH1cclxuICAgIHJldHVybiBzaGFkZXJTdHIucmVwbGFjZShsb29wUmVnZXgsIHJlcGxhY2UpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXREZWZpbmVDb2RlKGRlZmluZXMsIGxpZ2h0c051bWJlcnMsIGVuYWJsZWRUZXh0dXJlcykge1xyXG4gICAgdmFyIGRlZmluZVN0ciA9IFtdO1xyXG4gICAgaWYgKGxpZ2h0c051bWJlcnMpIHtcclxuICAgICAgICBmb3IgKHZhciBsaWdodFR5cGUgaW4gbGlnaHRzTnVtYmVycykge1xyXG4gICAgICAgICAgICB2YXIgY291bnQgPSBsaWdodHNOdW1iZXJzW2xpZ2h0VHlwZV07XHJcbiAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGRlZmluZVN0ci5wdXNoKCcjZGVmaW5lICcgKyBsaWdodFR5cGUudG9VcHBlckNhc2UoKSArICdfQ09VTlQgJyArIGNvdW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChlbmFibGVkVGV4dHVyZXMpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuYWJsZWRUZXh0dXJlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgc3ltYm9sID0gZW5hYmxlZFRleHR1cmVzW2ldO1xyXG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaCgnI2RlZmluZSAnICsgc3ltYm9sLnRvVXBwZXJDYXNlKCkgKyAnX0VOQUJMRUQnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBDdXN0b20gRGVmaW5lc1xyXG4gICAgZm9yICh2YXIgc3ltYm9sIGluIGRlZmluZXMpIHtcclxuICAgICAgICB2YXIgdmFsdWUgPSBkZWZpbmVzW3N5bWJvbF07XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGRlZmluZVN0ci5wdXNoKCcjZGVmaW5lICcgKyBzeW1ib2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaCgnI2RlZmluZSAnICsgc3ltYm9sICsgJyAnICsgdmFsdWUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlZmluZVN0ci5qb2luKCdcXG4nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uQ29kZShleHRzKSB7XHJcbiAgICAvLyBFeHRlbnNpb24gZGVjbGFyYXRpb24gbXVzdCBiZWZvcmUgYWxsIG5vbi1wcmVwcm9jZXNzb3IgY29kZXNcclxuICAgIC8vIFRPRE8gdmVydGV4ID8gZXh0ZW5zaW9uIGVudW0gP1xyXG4gICAgdmFyIGV4dGVuc2lvblN0ciA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZXh0ZW5zaW9uU3RyLnB1c2goJyNleHRlbnNpb24gR0xfJyArIGV4dHNbaV0gKyAnIDogZW5hYmxlJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXh0ZW5zaW9uU3RyLmpvaW4oJ1xcbicpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQcmVjaXNpb25Db2RlKHByZWNpc2lvbikge1xyXG4gICAgcmV0dXJuIFsncHJlY2lzaW9uJywgcHJlY2lzaW9uLCAnZmxvYXQnXS5qb2luKCcgJykgKyAnO1xcbidcclxuICAgICAgICArIFsncHJlY2lzaW9uJywgcHJlY2lzaW9uLCAnaW50J10uam9pbignICcpICsgJztcXG4nXHJcbiAgICAgICAgLy8gZGVwdGggdGV4dHVyZSBtYXkgaGF2ZSBwcmVjaXNpb24gcHJvYmxlbSBvbiBpT1MgZGV2aWNlLlxyXG4gICAgICAgICsgWydwcmVjaXNpb24nLCBwcmVjaXNpb24sICdzYW1wbGVyMkQnXS5qb2luKCcgJykgKyAnO1xcbic7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFByb2dyYW1NYW5hZ2VyKHJlbmRlcmVyKSB7XHJcbiAgICB0aGlzLl9yZW5kZXJlciA9IHJlbmRlcmVyO1xyXG4gICAgdGhpcy5fY2FjaGUgPSB7fTtcclxufVxyXG5cclxuUHJvZ3JhbU1hbmFnZXIucHJvdG90eXBlLmdldFByb2dyYW0gPSBmdW5jdGlvbiAocmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHNjZW5lKSB7XHJcbiAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuXHJcbiAgICB2YXIgaXNTa2lubmVkTWVzaCA9IHJlbmRlcmFibGUuaXNTa2lubmVkTWVzaCAmJiByZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2goKTtcclxuICAgIHZhciBrZXkgPSAncycgKyBtYXRlcmlhbC5zaGFkZXIuc2hhZGVySUQgKyAnbScgKyBtYXRlcmlhbC5nZXRQcm9ncmFtS2V5KCk7XHJcbiAgICBpZiAoc2NlbmUpIHtcclxuICAgICAgICBrZXkgKz0gJ3NlJyArIHNjZW5lLmdldFByb2dyYW1LZXkocmVuZGVyYWJsZS5saWdodEdyb3VwKTtcclxuICAgIH1cclxuICAgIGlmIChpc1NraW5uZWRNZXNoKSB7XHJcbiAgICAgICAga2V5ICs9ICcsJyArIHJlbmRlcmFibGUuam9pbnRzLmxlbmd0aDtcclxuICAgIH1cclxuICAgIHZhciBwcm9ncmFtID0gY2FjaGVba2V5XTtcclxuXHJcbiAgICBpZiAocHJvZ3JhbSkge1xyXG4gICAgICAgIHJldHVybiBwcm9ncmFtO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBsaWdodHNOdW1iZXJzID0gc2NlbmUgPyBzY2VuZS5nZXRMaWdodHNOdW1iZXJzKHJlbmRlcmFibGUubGlnaHRHcm91cCkgOiB7fTtcclxuICAgIHZhciByZW5kZXJlciA9IHRoaXMuX3JlbmRlcmVyO1xyXG4gICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgdmFyIGVuYWJsZWRUZXh0dXJlcyA9IG1hdGVyaWFsLmdldEVuYWJsZWRUZXh0dXJlcygpO1xyXG4gICAgdmFyIHNraW5EZWZpbmVDb2RlID0gJyc7XHJcbiAgICBpZiAoaXNTa2lubmVkTWVzaCkge1xyXG4gICAgICAgIHZhciBza2luRGVmaW5lcyA9IHtcclxuICAgICAgICAgICAgU0tJTk5JTkc6IG51bGwsXHJcbiAgICAgICAgICAgIEpPSU5UX0NPVU5UOiByZW5kZXJhYmxlLmpvaW50cy5sZW5ndGhcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChyZW5kZXJhYmxlLmpvaW50cy5sZW5ndGggPiByZW5kZXJlci5nZXRNYXhKb2ludE51bWJlcigpKSB7XHJcbiAgICAgICAgICAgIHNraW5EZWZpbmVzLlVTRV9TS0lOX01BVFJJQ0VTX1RFWFRVUkUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPIEFkZCBza2lubmluZyBjb2RlP1xyXG4gICAgICAgIHNraW5EZWZpbmVDb2RlID0gJ1xcbicgKyBnZXREZWZpbmVDb2RlKHNraW5EZWZpbmVzKSArICdcXG4nO1xyXG4gICAgfVxyXG4gICAgLy8gVE9ETyBPcHRpbWl6ZSBrZXkgZ2VuZXJhdGlvblxyXG4gICAgLy8gVkVSVEVYXHJcbiAgICB2YXIgdmVydGV4RGVmaW5lU3RyID0gc2tpbkRlZmluZUNvZGUgKyBnZXREZWZpbmVDb2RlKG1hdGVyaWFsLnZlcnRleERlZmluZXMsIGxpZ2h0c051bWJlcnMsIGVuYWJsZWRUZXh0dXJlcyk7XHJcbiAgICAvLyBGUkFHTUVOVFxyXG4gICAgdmFyIGZyYWdtZW50RGVmaW5lU3RyID0gc2tpbkRlZmluZUNvZGUgKyBnZXREZWZpbmVDb2RlKG1hdGVyaWFsLmZyYWdtZW50RGVmaW5lcywgbGlnaHRzTnVtYmVycywgZW5hYmxlZFRleHR1cmVzKTtcclxuXHJcbiAgICB2YXIgdmVydGV4Q29kZSA9IHZlcnRleERlZmluZVN0ciArICdcXG4nICsgbWF0ZXJpYWwuc2hhZGVyLnZlcnRleDtcclxuXHJcbiAgICB2YXIgZXh0ZW5zaW9ucyA9IFtcclxuICAgICAgICAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyxcclxuICAgICAgICAnRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCdcclxuICAgIF0uZmlsdGVyKGZ1bmN0aW9uIChleHQpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oZXh0KSAhPSBudWxsO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGV4dGVuc2lvbnMuaW5kZXhPZignRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCcpID49IDApIHtcclxuICAgICAgICBmcmFnbWVudERlZmluZVN0ciArPSAnXFxuI2RlZmluZSBTVVBQT1JUX1RFWFRVUkVfTE9EJztcclxuICAgIH1cclxuICAgIGlmIChleHRlbnNpb25zLmluZGV4T2YoJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycpID49IDApIHtcclxuICAgICAgICBmcmFnbWVudERlZmluZVN0ciArPSAnXFxuI2RlZmluZSBTVVBQT1JUX1NUQU5EQVJEX0RFUklWQVRJVkVTJztcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZnJhZ21lbnRDb2RlID0gZ2V0RXh0ZW5zaW9uQ29kZShleHRlbnNpb25zKSArICdcXG4nXHJcbiAgICAgICAgKyBnZXRQcmVjaXNpb25Db2RlKG1hdGVyaWFsLnByZWNpc2lvbikgKyAnXFxuJ1xyXG4gICAgICAgICsgZnJhZ21lbnREZWZpbmVTdHIgKyAnXFxuJ1xyXG4gICAgICAgICsgbWF0ZXJpYWwuc2hhZGVyLmZyYWdtZW50O1xyXG5cclxuICAgIHZhciBmaW5hbFZlcnRleENvZGUgPSB1bnJvbGxMb29wKHZlcnRleENvZGUsIG1hdGVyaWFsLnZlcnRleERlZmluZXMsIGxpZ2h0c051bWJlcnMpO1xyXG4gICAgdmFyIGZpbmFsRnJhZ21lbnRDb2RlID0gdW5yb2xsTG9vcChmcmFnbWVudENvZGUsIG1hdGVyaWFsLmZyYWdtZW50RGVmaW5lcywgbGlnaHRzTnVtYmVycyk7XHJcblxyXG4gICAgdmFyIHByb2dyYW0gPSBuZXcgR0xQcm9ncmFtKCk7XHJcbiAgICBwcm9ncmFtLnVuaWZvcm1TZW1hbnRpY3MgPSBtYXRlcmlhbC5zaGFkZXIudW5pZm9ybVNlbWFudGljcztcclxuICAgIHByb2dyYW0uYXR0cmlidXRlcyA9IG1hdGVyaWFsLnNoYWRlci5hdHRyaWJ1dGVzO1xyXG4gICAgdmFyIGVycm9yTXNnID0gcHJvZ3JhbS5idWlsZFByb2dyYW0oX2dsLCBtYXRlcmlhbC5zaGFkZXIsIGZpbmFsVmVydGV4Q29kZSwgZmluYWxGcmFnbWVudENvZGUpO1xyXG4gICAgcHJvZ3JhbS5fX2Vycm9yID0gZXJyb3JNc2c7XHJcblxyXG4gICAgY2FjaGVba2V5XSA9IHByb2dyYW07XHJcblxyXG4gICAgcmV0dXJuIHByb2dyYW07XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQcm9ncmFtTWFuYWdlcjsiLCIvKipcclxuICogTWFpbmx5IGRvIHRoZSBwYXJzZSBhbmQgY29tcGlsZSBvZiBzaGFkZXIgc3RyaW5nXHJcbiAqIFN1cHBvcnQgc2hhZGVyIGNvZGUgY2h1bmsgaW1wb3J0IGFuZCBleHBvcnRcclxuICogU3VwcG9ydCBzaGFkZXIgc2VtYW50aWNzXHJcbiAqIGh0dHA6Ly93d3cubnZpZGlhLmNvbS9vYmplY3QvdXNpbmdfc2FzLmh0bWxcclxuICogaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9jb2xsYWRhMmpzb24vaXNzdWVzLzQ1XHJcbiAqL1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcblxyXG52YXIgdW5pZm9ybVJlZ2V4ID0gL3VuaWZvcm1cXHMrKGJvb2x8ZmxvYXR8aW50fHZlYzJ8dmVjM3x2ZWM0fGl2ZWMyfGl2ZWMzfGl2ZWM0fG1hdDJ8bWF0M3xtYXQ0fHNhbXBsZXIyRHxzYW1wbGVyQ3ViZSlcXHMrKFtcXHNcXFNdKj8pOy9nO1xyXG52YXIgYXR0cmlidXRlUmVnZXggPSAvYXR0cmlidXRlXFxzKyhmbG9hdHxpbnR8dmVjMnx2ZWMzfHZlYzQpXFxzKyhbXFxzXFxTXSo/KTsvZztcclxuLy8gT25seSBwYXJzZSBudW1iZXIgZGVmaW5lLlxyXG52YXIgZGVmaW5lUmVnZXggPSAvI2RlZmluZVxccysoXFx3Kyk/KFxccytbXFxkLS5dKyk/XFxzKjs/XFxzKlxcbi9nO1xyXG5cclxudmFyIHVuaWZvcm1UeXBlTWFwID0ge1xyXG4gICAgJ2Jvb2wnOiAnMWknLFxyXG4gICAgJ2ludCc6ICcxaScsXHJcbiAgICAnc2FtcGxlcjJEJzogJ3QnLFxyXG4gICAgJ3NhbXBsZXJDdWJlJzogJ3QnLFxyXG4gICAgJ2Zsb2F0JzogJzFmJyxcclxuICAgICd2ZWMyJzogJzJmJyxcclxuICAgICd2ZWMzJzogJzNmJyxcclxuICAgICd2ZWM0JzogJzRmJyxcclxuICAgICdpdmVjMic6ICcyaScsXHJcbiAgICAnaXZlYzMnOiAnM2knLFxyXG4gICAgJ2l2ZWM0JzogJzRpJyxcclxuICAgICdtYXQyJzogJ20yJyxcclxuICAgICdtYXQzJzogJ20zJyxcclxuICAgICdtYXQ0JzogJ200J1xyXG59O1xyXG5cclxuZnVuY3Rpb24gY3JlYXRlWmVyb0FycmF5KGxlbikge1xyXG4gICAgdmFyIGFyciA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGFycltpXSA9IDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyO1xyXG59XHJcblxyXG52YXIgdW5pZm9ybVZhbHVlQ29uc3RydWN0b3IgPSB7XHJcbiAgICAnYm9vbCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH0sXHJcbiAgICAnaW50JzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMDsgfSxcclxuICAgICdmbG9hdCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDA7IH0sXHJcbiAgICAnc2FtcGxlcjJEJzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVsbDsgfSxcclxuICAgICdzYW1wbGVyQ3ViZSc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH0sXHJcblxyXG4gICAgJ3ZlYzInOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoMik7IH0sXHJcbiAgICAndmVjMyc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSgzKTsgfSxcclxuICAgICd2ZWM0JzogZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlWmVyb0FycmF5KDQpOyB9LFxyXG5cclxuICAgICdpdmVjMic6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSgyKTsgfSxcclxuICAgICdpdmVjMyc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSgzKTsgfSxcclxuICAgICdpdmVjNCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSg0KTsgfSxcclxuXHJcbiAgICAnbWF0Mic6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSg0KTsgfSxcclxuICAgICdtYXQzJzogZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlWmVyb0FycmF5KDkpOyB9LFxyXG4gICAgJ21hdDQnOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoMTYpOyB9LFxyXG5cclxuICAgICdhcnJheSc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtdOyB9XHJcbn07XHJcblxyXG52YXIgYXR0cmlidXRlU2VtYW50aWNzID0gW1xyXG4gICAgJ1BPU0lUSU9OJyxcclxuICAgICdOT1JNQUwnLFxyXG4gICAgJ0JJTk9STUFMJyxcclxuICAgICdUQU5HRU5UJyxcclxuICAgICdURVhDT09SRCcsXHJcbiAgICAnVEVYQ09PUkRfMCcsXHJcbiAgICAnVEVYQ09PUkRfMScsXHJcbiAgICAnQ09MT1InLFxyXG4gICAgLy8gU2tpbm5pbmdcclxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi9ibG9iL21hc3Rlci9zcGVjaWZpY2F0aW9uL1JFQURNRS5tZCNzZW1hbnRpY3NcclxuICAgICdKT0lOVCcsXHJcbiAgICAnV0VJR0hUJ1xyXG5dO1xyXG52YXIgdW5pZm9ybVNlbWFudGljcyA9IFtcclxuICAgICdTS0lOX01BVFJJWCcsXHJcbiAgICAvLyBJbmZvcm1hdGlvbiBhYm91dCB2aWV3cG9ydFxyXG4gICAgJ1ZJRVdQT1JUX1NJWkUnLFxyXG4gICAgJ1ZJRVdQT1JUJyxcclxuICAgICdERVZJQ0VQSVhFTFJBVElPJyxcclxuICAgIC8vIFdpbmRvdyBzaXplIGZvciB3aW5kb3cgcmVsYXRpdmUgY29vcmRpbmF0ZVxyXG4gICAgLy8gaHR0cHM6Ly93d3cub3BlbmdsLm9yZy9zZGsvZG9jcy9tYW4vaHRtbC9nbF9GcmFnQ29vcmQueGh0bWxcclxuICAgICdXSU5ET1dfU0laRScsXHJcbiAgICAvLyBJbmZvbWF0aW9uIGFib3V0IGNhbWVyYVxyXG4gICAgJ05FQVInLFxyXG4gICAgJ0ZBUicsXHJcbiAgICAvLyBUaW1lXHJcbiAgICAnVElNRSdcclxuXTtcclxudmFyIG1hdHJpeFNlbWFudGljcyA9IFtcclxuICAgICdXT1JMRCcsXHJcbiAgICAnVklFVycsXHJcbiAgICAnUFJPSkVDVElPTicsXHJcbiAgICAnV09STERWSUVXJyxcclxuICAgICdWSUVXUFJPSkVDVElPTicsXHJcbiAgICAnV09STERWSUVXUFJPSkVDVElPTicsXHJcbiAgICAnV09STERJTlZFUlNFJyxcclxuICAgICdWSUVXSU5WRVJTRScsXHJcbiAgICAnUFJPSkVDVElPTklOVkVSU0UnLFxyXG4gICAgJ1dPUkxEVklFV0lOVkVSU0UnLFxyXG4gICAgJ1ZJRVdQUk9KRUNUSU9OSU5WRVJTRScsXHJcbiAgICAnV09STERWSUVXUFJPSkVDVElPTklOVkVSU0UnLFxyXG4gICAgJ1dPUkxEVFJBTlNQT1NFJyxcclxuICAgICdWSUVXVFJBTlNQT1NFJyxcclxuICAgICdQUk9KRUNUSU9OVFJBTlNQT1NFJyxcclxuICAgICdXT1JMRFZJRVdUUkFOU1BPU0UnLFxyXG4gICAgJ1ZJRVdQUk9KRUNUSU9OVFJBTlNQT1NFJyxcclxuICAgICdXT1JMRFZJRVdQUk9KRUNUSU9OVFJBTlNQT1NFJyxcclxuICAgICdXT1JMRElOVkVSU0VUUkFOU1BPU0UnLFxyXG4gICAgJ1ZJRVdJTlZFUlNFVFJBTlNQT1NFJyxcclxuICAgICdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRScsXHJcbiAgICAnV09STERWSUVXSU5WRVJTRVRSQU5TUE9TRScsXHJcbiAgICAnVklFV1BST0pFQ1RJT05JTlZFUlNFVFJBTlNQT1NFJyxcclxuICAgICdXT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRSdcclxuXTtcclxuXHJcbnZhciBhdHRyaWJ1dGVTaXplTWFwID0ge1xyXG4gICAgLy8gV2ViR0wgZG9lcyBub3Qgc3VwcG9ydCBpbnRlZ2VyIGF0dHJpYnV0ZXNcclxuICAgICd2ZWM0JzogNCxcclxuICAgICd2ZWMzJzogMyxcclxuICAgICd2ZWMyJzogMixcclxuICAgICdmbG9hdCc6IDFcclxufTtcclxuXHJcblxyXG52YXIgc2hhZGVySURDYWNoZSA9IHt9O1xyXG52YXIgc2hhZGVyQ29kZUNhY2hlID0ge307XHJcblxyXG5mdW5jdGlvbiBnZXRTaGFkZXJJRCh2ZXJ0ZXgsIGZyYWdtZW50KSB7XHJcbiAgICB2YXIga2V5ID0gJ3ZlcnRleDonICsgdmVydGV4ICsgJ2ZyYWdtZW50OicgKyBmcmFnbWVudDtcclxuICAgIGlmIChzaGFkZXJJRENhY2hlW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gc2hhZGVySURDYWNoZVtrZXldO1xyXG4gICAgfVxyXG4gICAgdmFyIGlkID0gdXRpbC5nZW5HVUlEKCk7XHJcbiAgICBzaGFkZXJJRENhY2hlW2tleV0gPSBpZDtcclxuXHJcbiAgICBzaGFkZXJDb2RlQ2FjaGVbaWRdID0ge1xyXG4gICAgICAgIHZlcnRleDogdmVydGV4LFxyXG4gICAgICAgIGZyYWdtZW50OiBmcmFnbWVudFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gaWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUNvbW1lbnQoY29kZSkge1xyXG4gICAgcmV0dXJuIGNvZGUucmVwbGFjZSgvWyBcXHRdKlxcL1xcLy4qXFxuL2csICcnICkgICAvLyByZW1vdmUgLy9cclxuICAgICAgICAucmVwbGFjZSgvWyBcXHRdKlxcL1xcKltcXHNcXFNdKj9cXCpcXC8vZywgJycgKTsgLy8gcmVtb3ZlIC8qICovXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxvZ1N5bnRheEVycm9yKCkge1xyXG4gICAgY29uc29sZS5lcnJvcignV3JvbmcgdW5pZm9ybS9hdHRyaWJ1dGVzIHN5bnRheCcpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZURlY2xhcmF0aW9ucyh0eXBlLCBsaW5lKSB7XHJcbiAgICB2YXIgc3BlcmF0b3JzUmVnZXhwID0gL1ssPVxcKFxcKTpdLztcclxuICAgIHZhciB0b2tlbnMgPSBsaW5lXHJcbiAgICAgICAgLy8gQ29udmVydCBgc3ltYm9sOiBbMSwyLDNdYCB0byBgc3ltYm9sOiB2ZWMzKDEsMiwzKWBcclxuICAgICAgICAucmVwbGFjZSgvOlxccypcXFtcXHMqKC4qKVxccypcXF0vZywgJz0nICsgdHlwZSArICcoJDEpJylcclxuICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCAnJylcclxuICAgICAgICAuc3BsaXQoLyg/PVssPVxcKFxcKTpdKS9nKTtcclxuXHJcbiAgICB2YXIgbmV3VG9rZW5zID0gW107XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0b2tlbnNbaV0ubWF0Y2goc3BlcmF0b3JzUmVnZXhwKSkge1xyXG4gICAgICAgICAgICBuZXdUb2tlbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHRva2Vuc1tpXS5jaGFyQXQoMCksXHJcbiAgICAgICAgICAgICAgICB0b2tlbnNbaV0uc2xpY2UoMSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG5ld1Rva2Vucy5wdXNoKHRva2Vuc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdG9rZW5zID0gbmV3VG9rZW5zO1xyXG5cclxuICAgIHZhciBUWVBFX1NZTUJPTCA9IDA7XHJcbiAgICB2YXIgVFlQRV9BU1NJR04gPSAxO1xyXG4gICAgdmFyIFRZUEVfVkVDID0gMjtcclxuICAgIHZhciBUWVBFX0FSUiA9IDM7XHJcbiAgICB2YXIgVFlQRV9TRU1BTlRJQyA9IDQ7XHJcbiAgICB2YXIgVFlQRV9OT1JNQUwgPSA1O1xyXG5cclxuICAgIHZhciBvcFR5cGUgPSBUWVBFX1NZTUJPTDtcclxuICAgIHZhciBkZWNsYXJhdGlvbnMgPSB7fTtcclxuICAgIHZhciBkZWNsYXJhdGlvblZhbHVlID0gbnVsbDtcclxuICAgIHZhciBjdXJyZW50RGVjbGFyYXRpb247XHJcblxyXG4gICAgYWRkU3ltYm9sKHRva2Vuc1swXSk7XHJcblxyXG4gICAgZnVuY3Rpb24gYWRkU3ltYm9sKHN5bWJvbCkge1xyXG4gICAgICAgIGlmICghc3ltYm9sKSB7XHJcbiAgICAgICAgICAgIGxvZ1N5bnRheEVycm9yKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBhcnJSZXN1bHQgPSBzeW1ib2wubWF0Y2goL1xcWyguKj8pXFxdLyk7XHJcbiAgICAgICAgY3VycmVudERlY2xhcmF0aW9uID0gc3ltYm9sLnJlcGxhY2UoL1xcWyguKj8pXFxdLywgJycpO1xyXG4gICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dID0ge307XHJcbiAgICAgICAgaWYgKGFyclJlc3VsdCkge1xyXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS5pc0FycmF5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0uYXJyYXlTaXplID0gYXJyUmVzdWx0WzFdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTtcclxuICAgICAgICBpZiAoIXRva2VuKSB7ICAgLy8gRW1wdHkgdG9rZW47XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodG9rZW4gPT09ICc9Jykge1xyXG4gICAgICAgICAgICBpZiAob3BUeXBlICE9PSBUWVBFX1NZTUJPTFxyXG4gICAgICAgICAgICAmJiBvcFR5cGUgIT09IFRZUEVfQVJSKSB7XHJcbiAgICAgICAgICAgICAgICBsb2dTeW50YXhFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3BUeXBlID0gVFlQRV9BU1NJR047XHJcblxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodG9rZW4gPT09ICc6Jykge1xyXG4gICAgICAgICAgICBvcFR5cGUgPSBUWVBFX1NFTUFOVElDO1xyXG5cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRva2VuID09PSAnLCcpIHtcclxuICAgICAgICAgICAgaWYgKG9wVHlwZSA9PT0gVFlQRV9WRUMpIHtcclxuICAgICAgICAgICAgICAgIGlmICghKGRlY2xhcmF0aW9uVmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dTeW50YXhFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25WYWx1ZS5wdXNoKCt0b2tlbnNbKytpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvcFR5cGUgPSBUWVBFX05PUk1BTDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRva2VuID09PSAnKScpIHtcclxuICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0udmFsdWUgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheShkZWNsYXJhdGlvblZhbHVlKTtcclxuICAgICAgICAgICAgZGVjbGFyYXRpb25WYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIG9wVHlwZSA9IFRZUEVfTk9STUFMO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodG9rZW4gPT09ICcoJykge1xyXG4gICAgICAgICAgICBpZiAob3BUeXBlICE9PSBUWVBFX1ZFQykge1xyXG4gICAgICAgICAgICAgICAgbG9nU3ludGF4RXJyb3IoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghKGRlY2xhcmF0aW9uVmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpIHtcclxuICAgICAgICAgICAgICAgIGxvZ1N5bnRheEVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWNsYXJhdGlvblZhbHVlLnB1c2goK3Rva2Vuc1srK2ldKTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRva2VuLmluZGV4T2YoJ3ZlYycpID49IDApIHtcclxuICAgICAgICAgICAgaWYgKG9wVHlwZSAhPT0gVFlQRV9BU1NJR05cclxuICAgICAgICAgICAgLy8gQ29tcGF0aXRhYmxlIHdpdGggb2xkIHN5bnRheCBgc3ltYm9sOiBbMSwyLDNdYFxyXG4gICAgICAgICAgICAmJiBvcFR5cGUgIT09IFRZUEVfU0VNQU5USUMpIHtcclxuICAgICAgICAgICAgICAgIGxvZ1N5bnRheEVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcFR5cGUgPSBUWVBFX1ZFQztcclxuICAgICAgICAgICAgZGVjbGFyYXRpb25WYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob3BUeXBlID09PSBUWVBFX0FTU0lHTikge1xyXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS52YWx1ZSA9IHRva2VuID09PSAndHJ1ZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS52YWx1ZSA9IHBhcnNlRmxvYXQodG9rZW4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob3BUeXBlID09PSBUWVBFX1NFTUFOVElDKSB7XHJcbiAgICAgICAgICAgIHZhciBzZW1hbnRpYyA9IHRva2VuO1xyXG4gICAgICAgICAgICBpZiAoYXR0cmlidXRlU2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDBcclxuICAgICAgICAgICAgICAgIHx8IHVuaWZvcm1TZW1hbnRpY3MuaW5kZXhPZihzZW1hbnRpYykgPj0gMFxyXG4gICAgICAgICAgICAgICAgfHwgbWF0cml4U2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDBcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS5zZW1hbnRpYyA9IHNlbWFudGljO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHNlbWFudGljID09PSAnaWdub3JlJyB8fCBzZW1hbnRpYyA9PT0gJ3VuY29uZmlndXJhYmxlJykge1xyXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0uaWdub3JlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBwYXJzZSBhcyBhIGRlZmF1bHQgdHZhbHVlLlxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdib29sJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dLnZhbHVlID0gc2VtYW50aWMgPT09ICd0cnVlJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dLnZhbHVlID0gcGFyc2VGbG9hdChzZW1hbnRpYyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0cmVhdCBhcyBzeW1ib2wuXHJcbiAgICAgICAgYWRkU3ltYm9sKHRva2VuKTtcclxuICAgICAgICBvcFR5cGUgPSBUWVBFX1NZTUJPTDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGVjbGFyYXRpb25zO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKiBAYWxpYXMgY2xheS5TaGFkZXJcclxuICogQHBhcmFtIHtzdHJpbmd9IHZlcnRleFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZnJhZ21lbnRcclxuICogQGV4YW1wbGVcclxuICogLy8gQ3JlYXRlIGEgcGhvbmcgc2hhZGVyXHJcbiAqIHZhciBzaGFkZXIgPSBuZXcgY2xheS5TaGFkZXIoXHJcbiAqICAgICAgY2xheS5TaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkLnZlcnRleCcpLFxyXG4gKiAgICAgIGNsYXkuU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZC5mcmFnbWVudCcpXHJcbiAqICk7XHJcbiAqL1xyXG5mdW5jdGlvbiBTaGFkZXIodmVydGV4LCBmcmFnbWVudCkge1xyXG4gICAgLy8gRmlyc3QgYXJndW1lbnQgY2FuIGJlIHsgdmVydGV4LCBmcmFnbWVudCB9XHJcbiAgICBpZiAodHlwZW9mIHZlcnRleCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICBmcmFnbWVudCA9IHZlcnRleC5mcmFnbWVudDtcclxuICAgICAgICB2ZXJ0ZXggPSB2ZXJ0ZXgudmVydGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHZlcnRleCA9IHJlbW92ZUNvbW1lbnQodmVydGV4KTtcclxuICAgIGZyYWdtZW50ID0gcmVtb3ZlQ29tbWVudChmcmFnbWVudCk7XHJcblxyXG4gICAgdGhpcy5fc2hhZGVySUQgPSBnZXRTaGFkZXJJRCh2ZXJ0ZXgsIGZyYWdtZW50KTtcclxuXHJcbiAgICB0aGlzLl92ZXJ0ZXhDb2RlID0gU2hhZGVyLnBhcnNlSW1wb3J0KHZlcnRleCk7XHJcbiAgICB0aGlzLl9mcmFnbWVudENvZGUgPSBTaGFkZXIucGFyc2VJbXBvcnQoZnJhZ21lbnQpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXR0cmlidXRlU2VtYW50aWNzID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLm1hdHJpeFNlbWFudGljcyA9IHt9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy51bmlmb3JtU2VtYW50aWNzID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLm1hdHJpeFNlbWFudGljS2V5cyA9IFtdO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy51bmlmb3JtVGVtcGxhdGVzID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSB7fTtcclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMudGV4dHVyZXMgPSB7fTtcclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMudmVydGV4RGVmaW5lcyA9IHt9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy5mcmFnbWVudERlZmluZXMgPSB7fTtcclxuXHJcbiAgICB0aGlzLl9wYXJzZUF0dHJpYnV0ZXMoKTtcclxuICAgIHRoaXMuX3BhcnNlVW5pZm9ybXMoKTtcclxuICAgIHRoaXMuX3BhcnNlRGVmaW5lcygpO1xyXG59XHJcblxyXG5TaGFkZXIucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBTaGFkZXIsXHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgbmV3IHVuaWZvcm0gaW5zdGFuY2UgZm9yIG1hdGVyaWFsXHJcbiAgICBjcmVhdGVVbmlmb3JtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB1bmlmb3JtcyA9IHt9O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gdGhpcy51bmlmb3JtVGVtcGxhdGVzKXtcclxuICAgICAgICAgICAgdmFyIHVuaWZvcm1UcGwgPSB0aGlzLnVuaWZvcm1UZW1wbGF0ZXNbc3ltYm9sXTtcclxuICAgICAgICAgICAgdW5pZm9ybXNbc3ltYm9sXSA9IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IHVuaWZvcm1UcGwudHlwZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB1bmlmb3JtVHBsLnZhbHVlKClcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1bmlmb3JtcztcclxuICAgIH0sXHJcblxyXG4gICAgX3BhcnNlSW1wb3J0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fdmVydGV4Q29kZSA9IFNoYWRlci5wYXJzZUltcG9ydCh0aGlzLnZlcnRleCk7XHJcbiAgICAgICAgdGhpcy5fZnJhZ21lbnRDb2RlID0gU2hhZGVyLnBhcnNlSW1wb3J0KHRoaXMuZnJhZ21lbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfYWRkU2VtYW50aWNVbmlmb3JtOiBmdW5jdGlvbiAoc3ltYm9sLCB1bmlmb3JtVHlwZSwgc2VtYW50aWMpIHtcclxuICAgICAgICAvLyBUaGlzIGNhc2UgaXMgb25seSBmb3IgU0tJTl9NQVRSSVhcclxuICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZVNlbWFudGljcy5pbmRleE9mKHNlbWFudGljKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlU2VtYW50aWNzW3NlbWFudGljXSA9IHtcclxuICAgICAgICAgICAgICAgIHN5bWJvbDogc3ltYm9sLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdW5pZm9ybVR5cGVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobWF0cml4U2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDApIHtcclxuICAgICAgICAgICAgdmFyIGlzVHJhbnNwb3NlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBzZW1hbnRpY05vVHJhbnNwb3NlID0gc2VtYW50aWM7XHJcbiAgICAgICAgICAgIGlmIChzZW1hbnRpYy5tYXRjaCgvVFJBTlNQT1NFJC8pKSB7XHJcbiAgICAgICAgICAgICAgICBpc1RyYW5zcG9zZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBzZW1hbnRpY05vVHJhbnNwb3NlID0gc2VtYW50aWMuc2xpY2UoMCwgLTkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubWF0cml4U2VtYW50aWNzW3NlbWFudGljXSA9IHtcclxuICAgICAgICAgICAgICAgIHN5bWJvbDogc3ltYm9sLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdW5pZm9ybVR5cGUsXHJcbiAgICAgICAgICAgICAgICBpc1RyYW5zcG9zZTogaXNUcmFuc3Bvc2UsXHJcbiAgICAgICAgICAgICAgICBzZW1hbnRpY05vVHJhbnNwb3NlOiBzZW1hbnRpY05vVHJhbnNwb3NlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHVuaWZvcm1TZW1hbnRpY3MuaW5kZXhPZihzZW1hbnRpYykgPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1TZW1hbnRpY3Nbc2VtYW50aWNdID0ge1xyXG4gICAgICAgICAgICAgICAgc3ltYm9sOiBzeW1ib2wsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB1bmlmb3JtVHlwZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2FkZE1hdGVyaWFsVW5pZm9ybTogZnVuY3Rpb24gKHN5bWJvbCwgdHlwZSwgdW5pZm9ybVR5cGUsIGRlZmF1bHRWYWx1ZUZ1bmMsIGlzQXJyYXksIG1hdGVyaWFsVW5pZm9ybXMpIHtcclxuICAgICAgICBtYXRlcmlhbFVuaWZvcm1zW3N5bWJvbF0gPSB7XHJcbiAgICAgICAgICAgIHR5cGU6IHVuaWZvcm1UeXBlLFxyXG4gICAgICAgICAgICB2YWx1ZTogaXNBcnJheSA/IHVuaWZvcm1WYWx1ZUNvbnN0cnVjdG9yWydhcnJheSddIDogKGRlZmF1bHRWYWx1ZUZ1bmMgfHwgdW5pZm9ybVZhbHVlQ29uc3RydWN0b3JbdHlwZV0pLFxyXG4gICAgICAgICAgICBzZW1hbnRpYzogbnVsbFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZVVuaWZvcm1zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHVuaWZvcm1zID0ge307XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHZhciBzaGFkZXJUeXBlID0gJ3ZlcnRleCc7XHJcbiAgICAgICAgdGhpcy5fdW5pZm9ybUxpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5fdmVydGV4Q29kZSA9IHRoaXMuX3ZlcnRleENvZGUucmVwbGFjZSh1bmlmb3JtUmVnZXgsIF91bmlmb3JtUGFyc2VyKTtcclxuICAgICAgICBzaGFkZXJUeXBlID0gJ2ZyYWdtZW50JztcclxuICAgICAgICB0aGlzLl9mcmFnbWVudENvZGUgPSB0aGlzLl9mcmFnbWVudENvZGUucmVwbGFjZSh1bmlmb3JtUmVnZXgsIF91bmlmb3JtUGFyc2VyKTtcclxuXHJcbiAgICAgICAgc2VsZi5tYXRyaXhTZW1hbnRpY0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLm1hdHJpeFNlbWFudGljcyk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIG1ha2VEZWZhdWx0VmFsdWVGdW5jKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPSBudWxsID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0gOiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gX3VuaWZvcm1QYXJzZXIoc3RyLCB0eXBlLCBjb250ZW50KSB7XHJcbiAgICAgICAgICAgIHZhciBkZWNsYXJlZFVuaWZvcm1zID0gcGFyc2VEZWNsYXJhdGlvbnModHlwZSwgY29udGVudCk7XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtTWFpblN0ciA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gZGVjbGFyZWRVbmlmb3Jtcykge1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtSW5mbyA9IGRlY2xhcmVkVW5pZm9ybXNbc3ltYm9sXTtcclxuICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpYyA9IHVuaWZvcm1JbmZvLnNlbWFudGljO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRtcFN0ciA9IHN5bWJvbDtcclxuICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtVHlwZSA9IHVuaWZvcm1UeXBlTWFwW3R5cGVdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZUZ1bmMgPSBtYWtlRGVmYXVsdFZhbHVlRnVuYyhkZWNsYXJlZFVuaWZvcm1zW3N5bWJvbF0udmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlY2xhcmVkVW5pZm9ybXNbc3ltYm9sXS5pc0FycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG1wU3RyICs9ICdbJyArIGRlY2xhcmVkVW5pZm9ybXNbc3ltYm9sXS5hcnJheVNpemUgKyAnXSc7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pZm9ybVR5cGUgKz0gJ3YnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHVuaWZvcm1NYWluU3RyLnB1c2godG1wU3RyKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZWxmLl91bmlmb3JtTGlzdC5wdXNoKHN5bWJvbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF1bmlmb3JtSW5mby5pZ25vcmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3NhbXBsZXIyRCcgfHwgdHlwZSA9PT0gJ3NhbXBsZXJDdWJlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXh0dXJlIGlzIGRlZmF1bHQgZGlzYWJsZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXh0dXJlc1tzeW1ib2xdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyVHlwZTogc2hhZGVyVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIFNob3VsZCBub3QgZGVjbGFyZSBtdWx0aXBsZSBzeW1ib2xzIGlmIGhhdmUgc2VtYW50aWMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZFNlbWFudGljVW5pZm9ybShzeW1ib2wsIHVuaWZvcm1UeXBlLCBzZW1hbnRpYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRNYXRlcmlhbFVuaWZvcm0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2wsIHR5cGUsIHVuaWZvcm1UeXBlLCBkZWZhdWx0VmFsdWVGdW5jLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbGFyZWRVbmlmb3Jtc1tzeW1ib2xdLmlzQXJyYXksIHVuaWZvcm1zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB1bmlmb3JtTWFpblN0ci5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICA/ICd1bmlmb3JtICcgKyB0eXBlICsgJyAnICsgdW5pZm9ybU1haW5TdHIuam9pbignLCcpICsgJztcXG4nIDogJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVuaWZvcm1UZW1wbGF0ZXMgPSB1bmlmb3JtcztcclxuICAgIH0sXHJcblxyXG4gICAgX3BhcnNlQXR0cmlidXRlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0ge307XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuX3ZlcnRleENvZGUgPSB0aGlzLl92ZXJ0ZXhDb2RlLnJlcGxhY2UoYXR0cmlidXRlUmVnZXgsIF9hdHRyaWJ1dGVQYXJzZXIpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBfYXR0cmlidXRlUGFyc2VyKHN0ciwgdHlwZSwgY29udGVudCkge1xyXG4gICAgICAgICAgICB2YXIgZGVjbGFyZWRBdHRyaWJ1dGVzID0gcGFyc2VEZWNsYXJhdGlvbnModHlwZSwgY29udGVudCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2l6ZSA9IGF0dHJpYnV0ZVNpemVNYXBbdHlwZV0gfHwgMTtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU1haW5TdHIgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIGRlY2xhcmVkQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlbWFudGljID0gZGVjbGFyZWRBdHRyaWJ1dGVzW3N5bWJvbF0uc2VtYW50aWM7XHJcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3N5bWJvbF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBDYW4gb25seSBiZSBmbG9hdFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdmbG9hdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICBzZW1hbnRpYzogc2VtYW50aWMgfHwgbnVsbFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gU2hvdWxkIG5vdCBkZWNsYXJlIG11bHRpcGxlIHN5bWJvbHMgaWYgaGF2ZSBzZW1hbnRpYy5cclxuICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVTZW1hbnRpY3MuaW5kZXhPZihzZW1hbnRpYykgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rb3duIHNlbWFudGljIFwiJyArIHNlbWFudGljICsgJ1wiJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmF0dHJpYnV0ZVNlbWFudGljc1tzZW1hbnRpY10gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2w6IHN5bWJvbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVNYWluU3RyLnB1c2goc3ltYm9sKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuICdhdHRyaWJ1dGUgJyArIHR5cGUgKyAnICcgKyBhdHRyaWJ1dGVNYWluU3RyLmpvaW4oJywnKSArICc7XFxuJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZURlZmluZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHNoYWRlclR5cGUgPSAndmVydGV4JztcclxuICAgICAgICB0aGlzLl92ZXJ0ZXhDb2RlID0gdGhpcy5fdmVydGV4Q29kZS5yZXBsYWNlKGRlZmluZVJlZ2V4LCBfZGVmaW5lUGFyc2VyKTtcclxuICAgICAgICBzaGFkZXJUeXBlID0gJ2ZyYWdtZW50JztcclxuICAgICAgICB0aGlzLl9mcmFnbWVudENvZGUgPSB0aGlzLl9mcmFnbWVudENvZGUucmVwbGFjZShkZWZpbmVSZWdleCwgX2RlZmluZVBhcnNlcik7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQYXJzZXIoc3RyLCBzeW1ib2wsIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhciBkZWZpbmVzID0gc2hhZGVyVHlwZSA9PT0gJ3ZlcnRleCcgPyBzZWxmLnZlcnRleERlZmluZXMgOiBzZWxmLmZyYWdtZW50RGVmaW5lcztcclxuICAgICAgICAgICAgaWYgKCFkZWZpbmVzW3N5bWJvbF0pIHsgLy8gSGF2ZW4ndCBiZWVuIGRlZmluZWQgYnkgdXNlclxyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lc1tzeW1ib2xdID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lc1tzeW1ib2xdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmluZXNbc3ltYm9sXSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGNhbiBwYXJzZSB0byBmbG9hdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChpc05hTihwYXJzZUZsb2F0KHZhbHVlKSkgPyB2YWx1ZS50cmltKCkgOiBwYXJzZUZsb2F0KHZhbHVlKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgc2hhZGVyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlNoYWRlcn1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgY29kZSA9IHNoYWRlckNvZGVDYWNoZVt0aGlzLl9zaGFkZXJJRF07XHJcbiAgICAgICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoY29kZS52ZXJ0ZXgsIGNvZGUuZnJhZ21lbnQpO1xyXG4gICAgICAgIHJldHVybiBzaGFkZXI7XHJcbiAgICB9XHJcbn07XHJcblxyXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZGVyLnByb3RvdHlwZSwgJ3NoYWRlcklEJywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhZGVySUQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZGVyLnByb3RvdHlwZSwgJ3ZlcnRleCcsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZlcnRleENvZGU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZGVyLnByb3RvdHlwZSwgJ2ZyYWdtZW50Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhZ21lbnRDb2RlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlci5wcm90b3R5cGUsICd1bmlmb3JtcycsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VuaWZvcm1MaXN0O1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG52YXIgaW1wb3J0UmVnZXggPSAvKEBpbXBvcnQpXFxzKihbMC05YS16QS1aX1xcLVxcLl0qKS9nO1xyXG5TaGFkZXIucGFyc2VJbXBvcnQgPSBmdW5jdGlvbiAoc2hhZGVyU3RyKSB7XHJcbiAgICBzaGFkZXJTdHIgPSBzaGFkZXJTdHIucmVwbGFjZShpbXBvcnRSZWdleCwgZnVuY3Rpb24gKHN0ciwgaW1wb3J0U3ltYm9sLCBpbXBvcnROYW1lKSB7XHJcbiAgICAgICAgdmFyIHN0ciA9IFNoYWRlci5zb3VyY2UoaW1wb3J0TmFtZSk7XHJcbiAgICAgICAgaWYgKHN0cikge1xyXG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwYXJzZVxyXG4gICAgICAgICAgICByZXR1cm4gU2hhZGVyLnBhcnNlSW1wb3J0KHN0cik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTaGFkZXIgY2h1bmsgXCInICsgaW1wb3J0TmFtZSArICdcIiBub3QgZXhpc3RlZCBpbiBsaWJyYXJ5Jyk7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBzaGFkZXJTdHI7XHJcbn07XHJcblxyXG52YXIgZXhwb3J0UmVnZXggPSAvKEBleHBvcnQpXFxzKihbMC05YS16QS1aX1xcLVxcLl0qKVxccypcXG4oW1xcc1xcU10qPylAZW5kL2c7XHJcblxyXG4vKipcclxuICogSW1wb3J0IHNoYWRlciBzb3VyY2VcclxuICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJTdHJcclxuICogQG1lbWJlck9mIGNsYXkuU2hhZGVyXHJcbiAqL1xyXG5TaGFkZXJbJ2ltcG9ydCddID0gZnVuY3Rpb24gKHNoYWRlclN0cikge1xyXG4gICAgc2hhZGVyU3RyLnJlcGxhY2UoZXhwb3J0UmVnZXgsIGZ1bmN0aW9uIChzdHIsIGV4cG9ydFN5bWJvbCwgZXhwb3J0TmFtZSwgY29kZSkge1xyXG4gICAgICAgIHZhciBjb2RlID0gY29kZS5yZXBsYWNlKC8oXltcXHNcXHRcXHhhMFxcdTMwMDBdKyl8KFtcXHUzMDAwXFx4YTBcXHNcXHRdK1xceDI0KS9nLCAnJyk7XHJcbiAgICAgICAgaWYgKGNvZGUpIHtcclxuICAgICAgICAgICAgdmFyIHBhcnRzID0gZXhwb3J0TmFtZS5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICB2YXIgb2JqID0gU2hhZGVyLmNvZGVzO1xyXG4gICAgICAgICAgICB2YXIgaSA9IDA7XHJcbiAgICAgICAgICAgIHZhciBrZXk7XHJcbiAgICAgICAgICAgIHdoaWxlIChpIDwgcGFydHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAga2V5ID0gcGFydHNbaSsrXTtcclxuICAgICAgICAgICAgICAgIGlmICghb2JqW2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb2JqID0gb2JqW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAga2V5ID0gcGFydHNbaV07XHJcbiAgICAgICAgICAgIG9ialtrZXldID0gY29kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvZGU7XHJcbiAgICB9KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBMaWJyYXJ5IHRvIHN0b3JlIGFsbCB0aGUgbG9hZGVkIHNoYWRlciBjb2Rlc1xyXG4gKiBAdHlwZSB7T2JqZWN0fVxyXG4gKiBAcmVhZE9ubHlcclxuICogQG1lbWJlck9mIGNsYXkuU2hhZGVyXHJcbiAqL1xyXG5TaGFkZXIuY29kZXMgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgc2hhZGVyIHNvdXJjZVxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICogQHJldHVybiB7c3RyaW5nfVxyXG4gKi9cclxuU2hhZGVyLnNvdXJjZSA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICB2YXIgcGFydHMgPSBuYW1lLnNwbGl0KCcuJyk7XHJcbiAgICB2YXIgb2JqID0gU2hhZGVyLmNvZGVzO1xyXG4gICAgdmFyIGkgPSAwO1xyXG4gICAgd2hpbGUgKG9iaiAmJiBpIDwgcGFydHMubGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IHBhcnRzW2krK107XHJcbiAgICAgICAgb2JqID0gb2JqW2tleV07XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAvLyBGSVhNRSBVc2UgZGVmYXVsdCBpbnN0ZWFkXHJcbiAgICAgICAgY29uc29sZS5lcnJvcignU2hhZGVyIFwiJyArIG5hbWUgKyAnXCIgbm90IGV4aXN0ZWQgaW4gbGlicmFyeScpO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiBvYmo7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTaGFkZXI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LnByZXoudmVydGV4XFxudW5pZm9ybSBtYXQ0IFdWUCA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdXYgOiBURVhDT09SRF8wO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA6IFsxLjAsIDEuMF07XFxudW5pZm9ybSB2ZWMyIHV2T2Zmc2V0IDogWzAuMCwgMC4wXTtcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzMgUCA9IHBvcztcXG4jaWZkZWYgU0tJTk5JTkdcXG4gQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuIFAgPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3MsIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSBXVlAgKiB2ZWM0KFAsIDEuMCk7XFxuIHZfVGV4Y29vcmQgPSB1diAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkucHJlei5mcmFnbWVudFxcbnVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuMDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52b2lkIG1haW4oKVxcbntcXG4gaWYgKGFscGhhQ3V0b2ZmID4gMC4wKSB7XFxuIGlmICh0ZXh0dXJlMkQoYWxwaGFNYXAsIHZfVGV4Y29vcmQpLmEgPD0gYWxwaGFDdXRvZmYpIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiB9XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLDAuMCwwLjAsMS4wKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHtHTE1BVF9FUFNJTE9OLCBHTE1BVF9BUlJBWV9UWVBFIH0gZnJvbSAnLi9jb21tb24nO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyA0eDQgTWF0cml4XHJcbiAqIEBuYW1lIG1hdDRcclxuICovXHJcblxyXG52YXIgbWF0NCA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0NFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bWF0NH0gYSBuZXcgNHg0IG1hdHJpeFxyXG4gKi9cclxubWF0NC5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgxNik7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMDtcclxuICAgIG91dFs1XSA9IDE7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDA7XHJcbiAgICBvdXRbOV0gPSAwO1xyXG4gICAgb3V0WzEwXSA9IDE7XHJcbiAgICBvdXRbMTFdID0gMDtcclxuICAgIG91dFsxMl0gPSAwO1xyXG4gICAgb3V0WzEzXSA9IDA7XHJcbiAgICBvdXRbMTRdID0gMDtcclxuICAgIG91dFsxNV0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDQgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gYSBuZXcgNHg0IG1hdHJpeFxyXG4gKi9cclxubWF0NC5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgxNik7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICBvdXRbOV0gPSBhWzldO1xyXG4gICAgb3V0WzEwXSA9IGFbMTBdO1xyXG4gICAgb3V0WzExXSA9IGFbMTFdO1xyXG4gICAgb3V0WzEyXSA9IGFbMTJdO1xyXG4gICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgb3V0WzE1XSA9IGFbMTVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0NCB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIG91dFszXSA9IGFbM107XHJcbiAgICBvdXRbNF0gPSBhWzRdO1xyXG4gICAgb3V0WzVdID0gYVs1XTtcclxuICAgIG91dFs2XSA9IGFbNl07XHJcbiAgICBvdXRbN10gPSBhWzddO1xyXG4gICAgb3V0WzhdID0gYVs4XTtcclxuICAgIG91dFs5XSA9IGFbOV07XHJcbiAgICBvdXRbMTBdID0gYVsxMF07XHJcbiAgICBvdXRbMTFdID0gYVsxMV07XHJcbiAgICBvdXRbMTJdID0gYVsxMl07XHJcbiAgICBvdXRbMTNdID0gYVsxM107XHJcbiAgICBvdXRbMTRdID0gYVsxNF07XHJcbiAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBhIG1hdDQgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMDtcclxuICAgIG91dFs1XSA9IDE7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDA7XHJcbiAgICBvdXRbOV0gPSAwO1xyXG4gICAgb3V0WzEwXSA9IDE7XHJcbiAgICBvdXRbMTFdID0gMDtcclxuICAgIG91dFsxMl0gPSAwO1xyXG4gICAgb3V0WzEzXSA9IDA7XHJcbiAgICBvdXRbMTRdID0gMDtcclxuICAgIG91dFsxNV0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXHJcbiAgICBpZiAob3V0ID09PSBhKSB7XHJcbiAgICAgICAgdmFyIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM10sXHJcbiAgICAgICAgICAgIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXHJcbiAgICAgICAgICAgIGEyMyA9IGFbMTFdO1xyXG5cclxuICAgICAgICBvdXRbMV0gPSBhWzRdO1xyXG4gICAgICAgIG91dFsyXSA9IGFbOF07XHJcbiAgICAgICAgb3V0WzNdID0gYVsxMl07XHJcbiAgICAgICAgb3V0WzRdID0gYTAxO1xyXG4gICAgICAgIG91dFs2XSA9IGFbOV07XHJcbiAgICAgICAgb3V0WzddID0gYVsxM107XHJcbiAgICAgICAgb3V0WzhdID0gYTAyO1xyXG4gICAgICAgIG91dFs5XSA9IGExMjtcclxuICAgICAgICBvdXRbMTFdID0gYVsxNF07XHJcbiAgICAgICAgb3V0WzEyXSA9IGEwMztcclxuICAgICAgICBvdXRbMTNdID0gYTEzO1xyXG4gICAgICAgIG91dFsxNF0gPSBhMjM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG91dFswXSA9IGFbMF07XHJcbiAgICAgICAgb3V0WzFdID0gYVs0XTtcclxuICAgICAgICBvdXRbMl0gPSBhWzhdO1xyXG4gICAgICAgIG91dFszXSA9IGFbMTJdO1xyXG4gICAgICAgIG91dFs0XSA9IGFbMV07XHJcbiAgICAgICAgb3V0WzVdID0gYVs1XTtcclxuICAgICAgICBvdXRbNl0gPSBhWzldO1xyXG4gICAgICAgIG91dFs3XSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFs4XSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzldID0gYVs2XTtcclxuICAgICAgICBvdXRbMTBdID0gYVsxMF07XHJcbiAgICAgICAgb3V0WzExXSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxMl0gPSBhWzNdO1xyXG4gICAgICAgIG91dFsxM10gPSBhWzddO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzExXTtcclxuICAgICAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnZlcnRzIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxyXG4gICAgICAgIGExMCA9IGFbNF0sIGExMSA9IGFbNV0sIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXHJcbiAgICAgICAgYTIwID0gYVs4XSwgYTIxID0gYVs5XSwgYTIyID0gYVsxMF0sIGEyMyA9IGFbMTFdLFxyXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF0sIGEzMyA9IGFbMTVdLFxyXG5cclxuICAgICAgICBiMDAgPSBhMDAgKiBhMTEgLSBhMDEgKiBhMTAsXHJcbiAgICAgICAgYjAxID0gYTAwICogYTEyIC0gYTAyICogYTEwLFxyXG4gICAgICAgIGIwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMCxcclxuICAgICAgICBiMDMgPSBhMDEgKiBhMTIgLSBhMDIgKiBhMTEsXHJcbiAgICAgICAgYjA0ID0gYTAxICogYTEzIC0gYTAzICogYTExLFxyXG4gICAgICAgIGIwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMixcclxuICAgICAgICBiMDYgPSBhMjAgKiBhMzEgLSBhMjEgKiBhMzAsXHJcbiAgICAgICAgYjA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwLFxyXG4gICAgICAgIGIwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMCxcclxuICAgICAgICBiMDkgPSBhMjEgKiBhMzIgLSBhMjIgKiBhMzEsXHJcbiAgICAgICAgYjEwID0gYTIxICogYTMzIC0gYTIzICogYTMxLFxyXG4gICAgICAgIGIxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMixcclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxyXG4gICAgICAgIGRldCA9IGIwMCAqIGIxMSAtIGIwMSAqIGIxMCArIGIwMiAqIGIwOSArIGIwMyAqIGIwOCAtIGIwNCAqIGIwNyArIGIwNSAqIGIwNjtcclxuXHJcbiAgICBpZiAoIWRldCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuICAgIG91dFswXSA9IChhMTEgKiBiMTEgLSBhMTIgKiBiMTAgKyBhMTMgKiBiMDkpICogZGV0O1xyXG4gICAgb3V0WzFdID0gKGEwMiAqIGIxMCAtIGEwMSAqIGIxMSAtIGEwMyAqIGIwOSkgKiBkZXQ7XHJcbiAgICBvdXRbMl0gPSAoYTMxICogYjA1IC0gYTMyICogYjA0ICsgYTMzICogYjAzKSAqIGRldDtcclxuICAgIG91dFszXSA9IChhMjIgKiBiMDQgLSBhMjEgKiBiMDUgLSBhMjMgKiBiMDMpICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGExMiAqIGIwOCAtIGExMCAqIGIxMSAtIGExMyAqIGIwNykgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoYTAwICogYjExIC0gYTAyICogYjA4ICsgYTAzICogYjA3KSAqIGRldDtcclxuICAgIG91dFs2XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xyXG4gICAgb3V0WzddID0gKGEyMCAqIGIwNSAtIGEyMiAqIGIwMiArIGEyMyAqIGIwMSkgKiBkZXQ7XHJcbiAgICBvdXRbOF0gPSAoYTEwICogYjEwIC0gYTExICogYjA4ICsgYTEzICogYjA2KSAqIGRldDtcclxuICAgIG91dFs5XSA9IChhMDEgKiBiMDggLSBhMDAgKiBiMTAgLSBhMDMgKiBiMDYpICogZGV0O1xyXG4gICAgb3V0WzEwXSA9IChhMzAgKiBiMDQgLSBhMzEgKiBiMDIgKyBhMzMgKiBiMDApICogZGV0O1xyXG4gICAgb3V0WzExXSA9IChhMjEgKiBiMDIgLSBhMjAgKiBiMDQgLSBhMjMgKiBiMDApICogZGV0O1xyXG4gICAgb3V0WzEyXSA9IChhMTEgKiBiMDcgLSBhMTAgKiBiMDkgLSBhMTIgKiBiMDYpICogZGV0O1xyXG4gICAgb3V0WzEzXSA9IChhMDAgKiBiMDkgLSBhMDEgKiBiMDcgKyBhMDIgKiBiMDYpICogZGV0O1xyXG4gICAgb3V0WzE0XSA9IChhMzEgKiBiMDEgLSBhMzAgKiBiMDMgLSBhMzIgKiBiMDApICogZGV0O1xyXG4gICAgb3V0WzE1XSA9IChhMjAgKiBiMDMgLSBhMjEgKiBiMDEgKyBhMjIgKiBiMDApICogZGV0O1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYWRqdWdhdGUgb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LmFkam9pbnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxyXG4gICAgICAgIGExMCA9IGFbNF0sIGExMSA9IGFbNV0sIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXHJcbiAgICAgICAgYTIwID0gYVs4XSwgYTIxID0gYVs5XSwgYTIyID0gYVsxMF0sIGEyMyA9IGFbMTFdLFxyXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF0sIGEzMyA9IGFbMTVdO1xyXG5cclxuICAgIG91dFswXSAgPSAgKGExMSAqIChhMjIgKiBhMzMgLSBhMjMgKiBhMzIpIC0gYTIxICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgKyBhMzEgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSk7XHJcbiAgICBvdXRbMV0gID0gLShhMDEgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMSAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMxICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMikpO1xyXG4gICAgb3V0WzJdICA9ICAoYTAxICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgLSBhMTEgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMSAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpKTtcclxuICAgIG91dFszXSAgPSAtKGEwMSAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpIC0gYTExICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMikgKyBhMjEgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XHJcbiAgICBvdXRbNF0gID0gLShhMTAgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMCAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpICsgYTMwICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikpO1xyXG4gICAgb3V0WzVdICA9ICAoYTAwICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjAgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMCAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpKTtcclxuICAgIG91dFs2XSAgPSAtKGEwMCAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpIC0gYTEwICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzAgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XHJcbiAgICBvdXRbN10gID0gIChhMDAgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSAtIGExMCAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpICsgYTIwICogKGEwMiAqIGExMyAtIGEwMyAqIGExMikpO1xyXG4gICAgb3V0WzhdICA9ICAoYTEwICogKGEyMSAqIGEzMyAtIGEyMyAqIGEzMSkgLSBhMjAgKiAoYTExICogYTMzIC0gYTEzICogYTMxKSArIGEzMCAqIChhMTEgKiBhMjMgLSBhMTMgKiBhMjEpKTtcclxuICAgIG91dFs5XSAgPSAtKGEwMCAqIChhMjEgKiBhMzMgLSBhMjMgKiBhMzEpIC0gYTIwICogKGEwMSAqIGEzMyAtIGEwMyAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTIzIC0gYTAzICogYTIxKSk7XHJcbiAgICBvdXRbMTBdID0gIChhMDAgKiAoYTExICogYTMzIC0gYTEzICogYTMxKSAtIGExMCAqIChhMDEgKiBhMzMgLSBhMDMgKiBhMzEpICsgYTMwICogKGEwMSAqIGExMyAtIGEwMyAqIGExMSkpO1xyXG4gICAgb3V0WzExXSA9IC0oYTAwICogKGExMSAqIGEyMyAtIGExMyAqIGEyMSkgLSBhMTAgKiAoYTAxICogYTIzIC0gYTAzICogYTIxKSArIGEyMCAqIChhMDEgKiBhMTMgLSBhMDMgKiBhMTEpKTtcclxuICAgIG91dFsxMl0gPSAtKGExMCAqIChhMjEgKiBhMzIgLSBhMjIgKiBhMzEpIC0gYTIwICogKGExMSAqIGEzMiAtIGExMiAqIGEzMSkgKyBhMzAgKiAoYTExICogYTIyIC0gYTEyICogYTIxKSk7XHJcbiAgICBvdXRbMTNdID0gIChhMDAgKiAoYTIxICogYTMyIC0gYTIyICogYTMxKSAtIGEyMCAqIChhMDEgKiBhMzIgLSBhMDIgKiBhMzEpICsgYTMwICogKGEwMSAqIGEyMiAtIGEwMiAqIGEyMSkpO1xyXG4gICAgb3V0WzE0XSA9IC0oYTAwICogKGExMSAqIGEzMiAtIGExMiAqIGEzMSkgLSBhMTAgKiAoYTAxICogYTMyIC0gYTAyICogYTMxKSArIGEzMCAqIChhMDEgKiBhMTIgLSBhMDIgKiBhMTEpKTtcclxuICAgIG91dFsxNV0gPSAgKGEwMCAqIChhMTEgKiBhMjIgLSBhMTIgKiBhMjEpIC0gYTEwICogKGEwMSAqIGEyMiAtIGEwMiAqIGEyMSkgKyBhMjAgKiAoYTAxICogYTEyIC0gYTAyICogYTExKSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cclxubWF0NC5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSwgYTAzID0gYVszXSxcclxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXSxcclxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdLCBhMzMgPSBhWzE1XSxcclxuXHJcbiAgICAgICAgYjAwID0gYTAwICogYTExIC0gYTAxICogYTEwLFxyXG4gICAgICAgIGIwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMCxcclxuICAgICAgICBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTAsXHJcbiAgICAgICAgYjAzID0gYTAxICogYTEyIC0gYTAyICogYTExLFxyXG4gICAgICAgIGIwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMSxcclxuICAgICAgICBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTIsXHJcbiAgICAgICAgYjA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwLFxyXG4gICAgICAgIGIwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMCxcclxuICAgICAgICBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzAsXHJcbiAgICAgICAgYjA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxLFxyXG4gICAgICAgIGIxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMSxcclxuICAgICAgICBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzI7XHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxyXG4gICAgcmV0dXJuIGIwMCAqIGIxMSAtIGIwMSAqIGIxMCArIGIwMiAqIGIwOSArIGIwMyAqIGIwOCAtIGIwNCAqIGIwNyArIGIwNSAqIGIwNjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ0J3NcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0NH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxyXG4gICAgICAgIGExMCA9IGFbNF0sIGExMSA9IGFbNV0sIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXHJcbiAgICAgICAgYTIwID0gYVs4XSwgYTIxID0gYVs5XSwgYTIyID0gYVsxMF0sIGEyMyA9IGFbMTFdLFxyXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF0sIGEzMyA9IGFbMTVdO1xyXG5cclxuICAgIC8vIENhY2hlIG9ubHkgdGhlIGN1cnJlbnQgbGluZSBvZiB0aGUgc2Vjb25kIG1hdHJpeFxyXG4gICAgdmFyIGIwICA9IGJbMF0sIGIxID0gYlsxXSwgYjIgPSBiWzJdLCBiMyA9IGJbM107XHJcbiAgICBvdXRbMF0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjAgKyBiMyphMzA7XHJcbiAgICBvdXRbMV0gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjEgKyBiMyphMzE7XHJcbiAgICBvdXRbMl0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjIgKyBiMyphMzI7XHJcbiAgICBvdXRbM10gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XHJcblxyXG4gICAgYjAgPSBiWzRdOyBiMSA9IGJbNV07IGIyID0gYls2XTsgYjMgPSBiWzddO1xyXG4gICAgb3V0WzRdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xyXG4gICAgb3V0WzVdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxICsgYjMqYTMxO1xyXG4gICAgb3V0WzZdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYjMqYTMyO1xyXG4gICAgb3V0WzddID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xyXG5cclxuICAgIGIwID0gYls4XTsgYjEgPSBiWzldOyBiMiA9IGJbMTBdOyBiMyA9IGJbMTFdO1xyXG4gICAgb3V0WzhdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xyXG4gICAgb3V0WzldID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxICsgYjMqYTMxO1xyXG4gICAgb3V0WzEwXSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMiArIGIzKmEzMjtcclxuICAgIG91dFsxMV0gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XHJcblxyXG4gICAgYjAgPSBiWzEyXTsgYjEgPSBiWzEzXTsgYjIgPSBiWzE0XTsgYjMgPSBiWzE1XTtcclxuICAgIG91dFsxMl0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjAgKyBiMyphMzA7XHJcbiAgICBvdXRbMTNdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxICsgYjMqYTMxO1xyXG4gICAgb3V0WzE0XSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMiArIGIzKmEzMjtcclxuICAgIG91dFsxNV0gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIGFmZmluZSBtYXQ0J3NcclxuICogQWRkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9waXNzYW5nXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQubXVsdGlwbHlBZmZpbmUgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLFxyXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF07XHJcblxyXG4gICAgLy8gQ2FjaGUgb25seSB0aGUgY3VycmVudCBsaW5lIG9mIHRoZSBzZWNvbmQgbWF0cml4XHJcbiAgICB2YXIgYjAgID0gYlswXSwgYjEgPSBiWzFdLCBiMiA9IGJbMl07XHJcbiAgICBvdXRbMF0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjA7XHJcbiAgICBvdXRbMV0gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjE7XHJcbiAgICBvdXRbMl0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjI7XHJcbiAgICAvLyBvdXRbM10gPSAwO1xyXG5cclxuICAgIGIwID0gYls0XTsgYjEgPSBiWzVdOyBiMiA9IGJbNl07XHJcbiAgICBvdXRbNF0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjA7XHJcbiAgICBvdXRbNV0gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjE7XHJcbiAgICBvdXRbNl0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjI7XHJcbiAgICAvLyBvdXRbN10gPSAwO1xyXG5cclxuICAgIGIwID0gYls4XTsgYjEgPSBiWzldOyBiMiA9IGJbMTBdO1xyXG4gICAgb3V0WzhdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwO1xyXG4gICAgb3V0WzldID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxO1xyXG4gICAgb3V0WzEwXSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMjtcclxuICAgIC8vIG91dFsxMV0gPSAwO1xyXG5cclxuICAgIGIwID0gYlsxMl07IGIxID0gYlsxM107IGIyID0gYlsxNF07XHJcbiAgICBvdXRbMTJdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYTMwO1xyXG4gICAgb3V0WzEzXSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGEzMTtcclxuICAgIG91dFsxNF0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjIgKyBhMzI7XHJcbiAgICAvLyBvdXRbMTVdID0gMTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQ0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbm1hdDQubXVsID0gbWF0NC5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDQubXVsdGlwbHlBZmZpbmV9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxubWF0NC5tdWxBZmZpbmUgPSBtYXQ0Lm11bHRpcGx5QWZmaW5lO1xyXG4vKipcclxuICogVHJhbnNsYXRlIGEgbWF0NCBieSB0aGUgZ2l2ZW4gdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHRyYW5zbGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgdmVjdG9yIHRvIHRyYW5zbGF0ZSBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHYpIHtcclxuICAgIHZhciB4ID0gdlswXSwgeSA9IHZbMV0sIHogPSB2WzJdLFxyXG4gICAgICAgIGEwMCwgYTAxLCBhMDIsIGEwMyxcclxuICAgICAgICBhMTAsIGExMSwgYTEyLCBhMTMsXHJcbiAgICAgICAgYTIwLCBhMjEsIGEyMiwgYTIzO1xyXG5cclxuICAgIGlmIChhID09PSBvdXQpIHtcclxuICAgICAgICBvdXRbMTJdID0gYVswXSAqIHggKyBhWzRdICogeSArIGFbOF0gKiB6ICsgYVsxMl07XHJcbiAgICAgICAgb3V0WzEzXSA9IGFbMV0gKiB4ICsgYVs1XSAqIHkgKyBhWzldICogeiArIGFbMTNdO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzJdICogeCArIGFbNl0gKiB5ICsgYVsxMF0gKiB6ICsgYVsxNF07XHJcbiAgICAgICAgb3V0WzE1XSA9IGFbM10gKiB4ICsgYVs3XSAqIHkgKyBhWzExXSAqIHogKyBhWzE1XTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYTAwID0gYVswXTsgYTAxID0gYVsxXTsgYTAyID0gYVsyXTsgYTAzID0gYVszXTtcclxuICAgICAgICBhMTAgPSBhWzRdOyBhMTEgPSBhWzVdOyBhMTIgPSBhWzZdOyBhMTMgPSBhWzddO1xyXG4gICAgICAgIGEyMCA9IGFbOF07IGEyMSA9IGFbOV07IGEyMiA9IGFbMTBdOyBhMjMgPSBhWzExXTtcclxuXHJcbiAgICAgICAgb3V0WzBdID0gYTAwOyBvdXRbMV0gPSBhMDE7IG91dFsyXSA9IGEwMjsgb3V0WzNdID0gYTAzO1xyXG4gICAgICAgIG91dFs0XSA9IGExMDsgb3V0WzVdID0gYTExOyBvdXRbNl0gPSBhMTI7IG91dFs3XSA9IGExMztcclxuICAgICAgICBvdXRbOF0gPSBhMjA7IG91dFs5XSA9IGEyMTsgb3V0WzEwXSA9IGEyMjsgb3V0WzExXSA9IGEyMztcclxuXHJcbiAgICAgICAgb3V0WzEyXSA9IGEwMCAqIHggKyBhMTAgKiB5ICsgYTIwICogeiArIGFbMTJdO1xyXG4gICAgICAgIG91dFsxM10gPSBhMDEgKiB4ICsgYTExICogeSArIGEyMSAqIHogKyBhWzEzXTtcclxuICAgICAgICBvdXRbMTRdID0gYTAyICogeCArIGExMiAqIHkgKyBhMjIgKiB6ICsgYVsxNF07XHJcbiAgICAgICAgb3V0WzE1XSA9IGEwMyAqIHggKyBhMTMgKiB5ICsgYTIzICogeiArIGFbMTVdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2NhbGVzIHRoZSBtYXQ0IGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7dmVjM30gdiB0aGUgdmVjMyB0byBzY2FsZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICoqL1xyXG5tYXQ0LnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICB2YXIgeCA9IHZbMF0sIHkgPSB2WzFdLCB6ID0gdlsyXTtcclxuXHJcbiAgICBvdXRbMF0gPSBhWzBdICogeDtcclxuICAgIG91dFsxXSA9IGFbMV0gKiB4O1xyXG4gICAgb3V0WzJdID0gYVsyXSAqIHg7XHJcbiAgICBvdXRbM10gPSBhWzNdICogeDtcclxuICAgIG91dFs0XSA9IGFbNF0gKiB5O1xyXG4gICAgb3V0WzVdID0gYVs1XSAqIHk7XHJcbiAgICBvdXRbNl0gPSBhWzZdICogeTtcclxuICAgIG91dFs3XSA9IGFbN10gKiB5O1xyXG4gICAgb3V0WzhdID0gYVs4XSAqIHo7XHJcbiAgICBvdXRbOV0gPSBhWzldICogejtcclxuICAgIG91dFsxMF0gPSBhWzEwXSAqIHo7XHJcbiAgICBvdXRbMTFdID0gYVsxMV0gKiB6O1xyXG4gICAgb3V0WzEyXSA9IGFbMTJdO1xyXG4gICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgb3V0WzE1XSA9IGFbMTVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0NCBieSB0aGUgZ2l2ZW4gYW5nbGVcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEBwYXJhbSB7dmVjM30gYXhpcyB0aGUgYXhpcyB0byByb3RhdGUgYXJvdW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkLCBheGlzKSB7XHJcbiAgICB2YXIgeCA9IGF4aXNbMF0sIHkgPSBheGlzWzFdLCB6ID0gYXhpc1syXSxcclxuICAgICAgICBsZW4gPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KSxcclxuICAgICAgICBzLCBjLCB0LFxyXG4gICAgICAgIGEwMCwgYTAxLCBhMDIsIGEwMyxcclxuICAgICAgICBhMTAsIGExMSwgYTEyLCBhMTMsXHJcbiAgICAgICAgYTIwLCBhMjEsIGEyMiwgYTIzLFxyXG4gICAgICAgIGIwMCwgYjAxLCBiMDIsXHJcbiAgICAgICAgYjEwLCBiMTEsIGIxMixcclxuICAgICAgICBiMjAsIGIyMSwgYjIyO1xyXG5cclxuICAgIGlmIChNYXRoLmFicyhsZW4pIDwgR0xNQVRfRVBTSUxPTikgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgIGxlbiA9IDEgLyBsZW47XHJcbiAgICB4ICo9IGxlbjtcclxuICAgIHkgKj0gbGVuO1xyXG4gICAgeiAqPSBsZW47XHJcblxyXG4gICAgcyA9IE1hdGguc2luKHJhZCk7XHJcbiAgICBjID0gTWF0aC5jb3MocmFkKTtcclxuICAgIHQgPSAxIC0gYztcclxuXHJcbiAgICBhMDAgPSBhWzBdOyBhMDEgPSBhWzFdOyBhMDIgPSBhWzJdOyBhMDMgPSBhWzNdO1xyXG4gICAgYTEwID0gYVs0XTsgYTExID0gYVs1XTsgYTEyID0gYVs2XTsgYTEzID0gYVs3XTtcclxuICAgIGEyMCA9IGFbOF07IGEyMSA9IGFbOV07IGEyMiA9IGFbMTBdOyBhMjMgPSBhWzExXTtcclxuXHJcbiAgICAvLyBDb25zdHJ1Y3QgdGhlIGVsZW1lbnRzIG9mIHRoZSByb3RhdGlvbiBtYXRyaXhcclxuICAgIGIwMCA9IHggKiB4ICogdCArIGM7IGIwMSA9IHkgKiB4ICogdCArIHogKiBzOyBiMDIgPSB6ICogeCAqIHQgLSB5ICogcztcclxuICAgIGIxMCA9IHggKiB5ICogdCAtIHogKiBzOyBiMTEgPSB5ICogeSAqIHQgKyBjOyBiMTIgPSB6ICogeSAqIHQgKyB4ICogcztcclxuICAgIGIyMCA9IHggKiB6ICogdCArIHkgKiBzOyBiMjEgPSB5ICogeiAqIHQgLSB4ICogczsgYjIyID0geiAqIHogKiB0ICsgYztcclxuXHJcbiAgICAvLyBQZXJmb3JtIHJvdGF0aW9uLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxyXG4gICAgb3V0WzBdID0gYTAwICogYjAwICsgYTEwICogYjAxICsgYTIwICogYjAyO1xyXG4gICAgb3V0WzFdID0gYTAxICogYjAwICsgYTExICogYjAxICsgYTIxICogYjAyO1xyXG4gICAgb3V0WzJdID0gYTAyICogYjAwICsgYTEyICogYjAxICsgYTIyICogYjAyO1xyXG4gICAgb3V0WzNdID0gYTAzICogYjAwICsgYTEzICogYjAxICsgYTIzICogYjAyO1xyXG4gICAgb3V0WzRdID0gYTAwICogYjEwICsgYTEwICogYjExICsgYTIwICogYjEyO1xyXG4gICAgb3V0WzVdID0gYTAxICogYjEwICsgYTExICogYjExICsgYTIxICogYjEyO1xyXG4gICAgb3V0WzZdID0gYTAyICogYjEwICsgYTEyICogYjExICsgYTIyICogYjEyO1xyXG4gICAgb3V0WzddID0gYTAzICogYjEwICsgYTEzICogYjExICsgYTIzICogYjEyO1xyXG4gICAgb3V0WzhdID0gYTAwICogYjIwICsgYTEwICogYjIxICsgYTIwICogYjIyO1xyXG4gICAgb3V0WzldID0gYTAxICogYjIwICsgYTExICogYjIxICsgYTIxICogYjIyO1xyXG4gICAgb3V0WzEwXSA9IGEwMiAqIGIyMCArIGExMiAqIGIyMSArIGEyMiAqIGIyMjtcclxuICAgIG91dFsxMV0gPSBhMDMgKiBiMjAgKyBhMTMgKiBiMjEgKyBhMjMgKiBiMjI7XHJcblxyXG4gICAgaWYgKGEgIT09IG91dCkgeyAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCBsYXN0IHJvd1xyXG4gICAgICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgICAgICBvdXRbMTNdID0gYVsxM107XHJcbiAgICAgICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhWzE1XTtcclxuICAgIH1cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIG1hdHJpeCBieSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBYIGF4aXNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQucm90YXRlWCA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgdmFyIHMgPSBNYXRoLnNpbihyYWQpLFxyXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpLFxyXG4gICAgICAgIGExMCA9IGFbNF0sXHJcbiAgICAgICAgYTExID0gYVs1XSxcclxuICAgICAgICBhMTIgPSBhWzZdLFxyXG4gICAgICAgIGExMyA9IGFbN10sXHJcbiAgICAgICAgYTIwID0gYVs4XSxcclxuICAgICAgICBhMjEgPSBhWzldLFxyXG4gICAgICAgIGEyMiA9IGFbMTBdLFxyXG4gICAgICAgIGEyMyA9IGFbMTFdO1xyXG5cclxuICAgIGlmIChhICE9PSBvdXQpIHsgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgcm93c1xyXG4gICAgICAgIG91dFswXSAgPSBhWzBdO1xyXG4gICAgICAgIG91dFsxXSAgPSBhWzFdO1xyXG4gICAgICAgIG91dFsyXSAgPSBhWzJdO1xyXG4gICAgICAgIG91dFszXSAgPSBhWzNdO1xyXG4gICAgICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgICAgICBvdXRbMTNdID0gYVsxM107XHJcbiAgICAgICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhWzE1XTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXHJcbiAgICBvdXRbNF0gPSBhMTAgKiBjICsgYTIwICogcztcclxuICAgIG91dFs1XSA9IGExMSAqIGMgKyBhMjEgKiBzO1xyXG4gICAgb3V0WzZdID0gYTEyICogYyArIGEyMiAqIHM7XHJcbiAgICBvdXRbN10gPSBhMTMgKiBjICsgYTIzICogcztcclxuICAgIG91dFs4XSA9IGEyMCAqIGMgLSBhMTAgKiBzO1xyXG4gICAgb3V0WzldID0gYTIxICogYyAtIGExMSAqIHM7XHJcbiAgICBvdXRbMTBdID0gYTIyICogYyAtIGExMiAqIHM7XHJcbiAgICBvdXRbMTFdID0gYTIzICogYyAtIGExMyAqIHM7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXRyaXggYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWSBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LnJvdGF0ZVkgPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcclxuICAgIHZhciBzID0gTWF0aC5zaW4ocmFkKSxcclxuICAgICAgICBjID0gTWF0aC5jb3MocmFkKSxcclxuICAgICAgICBhMDAgPSBhWzBdLFxyXG4gICAgICAgIGEwMSA9IGFbMV0sXHJcbiAgICAgICAgYTAyID0gYVsyXSxcclxuICAgICAgICBhMDMgPSBhWzNdLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sXHJcbiAgICAgICAgYTIxID0gYVs5XSxcclxuICAgICAgICBhMjIgPSBhWzEwXSxcclxuICAgICAgICBhMjMgPSBhWzExXTtcclxuXHJcbiAgICBpZiAoYSAhPT0gb3V0KSB7IC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIHJvd3NcclxuICAgICAgICBvdXRbNF0gID0gYVs0XTtcclxuICAgICAgICBvdXRbNV0gID0gYVs1XTtcclxuICAgICAgICBvdXRbNl0gID0gYVs2XTtcclxuICAgICAgICBvdXRbN10gID0gYVs3XTtcclxuICAgICAgICBvdXRbMTJdID0gYVsxMl07XHJcbiAgICAgICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgICAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxyXG4gICAgb3V0WzBdID0gYTAwICogYyAtIGEyMCAqIHM7XHJcbiAgICBvdXRbMV0gPSBhMDEgKiBjIC0gYTIxICogcztcclxuICAgIG91dFsyXSA9IGEwMiAqIGMgLSBhMjIgKiBzO1xyXG4gICAgb3V0WzNdID0gYTAzICogYyAtIGEyMyAqIHM7XHJcbiAgICBvdXRbOF0gPSBhMDAgKiBzICsgYTIwICogYztcclxuICAgIG91dFs5XSA9IGEwMSAqIHMgKyBhMjEgKiBjO1xyXG4gICAgb3V0WzEwXSA9IGEwMiAqIHMgKyBhMjIgKiBjO1xyXG4gICAgb3V0WzExXSA9IGEwMyAqIHMgKyBhMjMgKiBjO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0cml4IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFogYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5yb3RhdGVaID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICB2YXIgcyA9IE1hdGguc2luKHJhZCksXHJcbiAgICAgICAgYyA9IE1hdGguY29zKHJhZCksXHJcbiAgICAgICAgYTAwID0gYVswXSxcclxuICAgICAgICBhMDEgPSBhWzFdLFxyXG4gICAgICAgIGEwMiA9IGFbMl0sXHJcbiAgICAgICAgYTAzID0gYVszXSxcclxuICAgICAgICBhMTAgPSBhWzRdLFxyXG4gICAgICAgIGExMSA9IGFbNV0sXHJcbiAgICAgICAgYTEyID0gYVs2XSxcclxuICAgICAgICBhMTMgPSBhWzddO1xyXG5cclxuICAgIGlmIChhICE9PSBvdXQpIHsgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgbGFzdCByb3dcclxuICAgICAgICBvdXRbOF0gID0gYVs4XTtcclxuICAgICAgICBvdXRbOV0gID0gYVs5XTtcclxuICAgICAgICBvdXRbMTBdID0gYVsxMF07XHJcbiAgICAgICAgb3V0WzExXSA9IGFbMTFdO1xyXG4gICAgICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgICAgICBvdXRbMTNdID0gYVsxM107XHJcbiAgICAgICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhWzE1XTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXHJcbiAgICBvdXRbMF0gPSBhMDAgKiBjICsgYTEwICogcztcclxuICAgIG91dFsxXSA9IGEwMSAqIGMgKyBhMTEgKiBzO1xyXG4gICAgb3V0WzJdID0gYTAyICogYyArIGExMiAqIHM7XHJcbiAgICBvdXRbM10gPSBhMDMgKiBjICsgYTEzICogcztcclxuICAgIG91dFs0XSA9IGExMCAqIGMgLSBhMDAgKiBzO1xyXG4gICAgb3V0WzVdID0gYTExICogYyAtIGEwMSAqIHM7XHJcbiAgICBvdXRbNl0gPSBhMTIgKiBjIC0gYTAyICogcztcclxuICAgIG91dFs3XSA9IGExMyAqIGMgLSBhMDMgKiBzO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBxdWF0ZXJuaW9uIHJvdGF0aW9uIGFuZCB2ZWN0b3IgdHJhbnNsYXRpb25cclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgdmVjKTtcclxuICogICAgIHZhciBxdWF0TWF0ID0gbWF0NC5jcmVhdGUoKTtcclxuICogICAgIHF1YXQ0LnRvTWF0NChxdWF0LCBxdWF0TWF0KTtcclxuICogICAgIG1hdDQubXVsdGlwbHkoZGVzdCwgcXVhdE1hdCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0NH0gcSBSb3RhdGlvbiBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gdiBUcmFuc2xhdGlvbiB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbiA9IGZ1bmN0aW9uIChvdXQsIHEsIHYpIHtcclxuICAgIC8vIFF1YXRlcm5pb24gbWF0aFxyXG4gICAgdmFyIHggPSBxWzBdLCB5ID0gcVsxXSwgeiA9IHFbMl0sIHcgPSBxWzNdLFxyXG4gICAgICAgIHgyID0geCArIHgsXHJcbiAgICAgICAgeTIgPSB5ICsgeSxcclxuICAgICAgICB6MiA9IHogKyB6LFxyXG5cclxuICAgICAgICB4eCA9IHggKiB4MixcclxuICAgICAgICB4eSA9IHggKiB5MixcclxuICAgICAgICB4eiA9IHggKiB6MixcclxuICAgICAgICB5eSA9IHkgKiB5MixcclxuICAgICAgICB5eiA9IHkgKiB6MixcclxuICAgICAgICB6eiA9IHogKiB6MixcclxuICAgICAgICB3eCA9IHcgKiB4MixcclxuICAgICAgICB3eSA9IHcgKiB5MixcclxuICAgICAgICB3eiA9IHcgKiB6MjtcclxuXHJcbiAgICBvdXRbMF0gPSAxIC0gKHl5ICsgenopO1xyXG4gICAgb3V0WzFdID0geHkgKyB3ejtcclxuICAgIG91dFsyXSA9IHh6IC0gd3k7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0geHkgLSB3ejtcclxuICAgIG91dFs1XSA9IDEgLSAoeHggKyB6eik7XHJcbiAgICBvdXRbNl0gPSB5eiArIHd4O1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IHh6ICsgd3k7XHJcbiAgICBvdXRbOV0gPSB5eiAtIHd4O1xyXG4gICAgb3V0WzEwXSA9IDEgLSAoeHggKyB5eSk7XHJcbiAgICBvdXRbMTFdID0gMDtcclxuICAgIG91dFsxMl0gPSB2WzBdO1xyXG4gICAgb3V0WzEzXSA9IHZbMV07XHJcbiAgICBvdXRbMTRdID0gdlsyXTtcclxuICAgIG91dFsxNV0gPSAxO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tYXQ0LmZyb21RdWF0ID0gZnVuY3Rpb24gKG91dCwgcSkge1xyXG4gICAgdmFyIHggPSBxWzBdLCB5ID0gcVsxXSwgeiA9IHFbMl0sIHcgPSBxWzNdLFxyXG4gICAgICAgIHgyID0geCArIHgsXHJcbiAgICAgICAgeTIgPSB5ICsgeSxcclxuICAgICAgICB6MiA9IHogKyB6LFxyXG5cclxuICAgICAgICB4eCA9IHggKiB4MixcclxuICAgICAgICB5eCA9IHkgKiB4MixcclxuICAgICAgICB5eSA9IHkgKiB5MixcclxuICAgICAgICB6eCA9IHogKiB4MixcclxuICAgICAgICB6eSA9IHogKiB5MixcclxuICAgICAgICB6eiA9IHogKiB6MixcclxuICAgICAgICB3eCA9IHcgKiB4MixcclxuICAgICAgICB3eSA9IHcgKiB5MixcclxuICAgICAgICB3eiA9IHcgKiB6MjtcclxuXHJcbiAgICBvdXRbMF0gPSAxIC0geXkgLSB6ejtcclxuICAgIG91dFsxXSA9IHl4ICsgd3o7XHJcbiAgICBvdXRbMl0gPSB6eCAtIHd5O1xyXG4gICAgb3V0WzNdID0gMDtcclxuXHJcbiAgICBvdXRbNF0gPSB5eCAtIHd6O1xyXG4gICAgb3V0WzVdID0gMSAtIHh4IC0geno7XHJcbiAgICBvdXRbNl0gPSB6eSArIHd4O1xyXG4gICAgb3V0WzddID0gMDtcclxuXHJcbiAgICBvdXRbOF0gPSB6eCArIHd5O1xyXG4gICAgb3V0WzldID0genkgLSB3eDtcclxuICAgIG91dFsxMF0gPSAxIC0geHggLSB5eTtcclxuICAgIG91dFsxMV0gPSAwO1xyXG5cclxuICAgIG91dFsxMl0gPSAwO1xyXG4gICAgb3V0WzEzXSA9IDA7XHJcbiAgICBvdXRbMTRdID0gMDtcclxuICAgIG91dFsxNV0gPSAxO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgZnJ1c3R1bSBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtOdW1iZXJ9IGxlZnQgTGVmdCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmlnaHQgUmlnaHQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IGJvdHRvbSBCb3R0b20gYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IHRvcCBUb3AgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LmZydXN0dW0gPSBmdW5jdGlvbiAob3V0LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xyXG4gICAgdmFyIHJsID0gMSAvIChyaWdodCAtIGxlZnQpLFxyXG4gICAgICAgIHRiID0gMSAvICh0b3AgLSBib3R0b20pLFxyXG4gICAgICAgIG5mID0gMSAvIChuZWFyIC0gZmFyKTtcclxuICAgIG91dFswXSA9IChuZWFyICogMikgKiBybDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSAobmVhciAqIDIpICogdGI7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IChyaWdodCArIGxlZnQpICogcmw7XHJcbiAgICBvdXRbOV0gPSAodG9wICsgYm90dG9tKSAqIHRiO1xyXG4gICAgb3V0WzEwXSA9IChmYXIgKyBuZWFyKSAqIG5mO1xyXG4gICAgb3V0WzExXSA9IC0xO1xyXG4gICAgb3V0WzEyXSA9IDA7XHJcbiAgICBvdXRbMTNdID0gMDtcclxuICAgIG91dFsxNF0gPSAoZmFyICogbmVhciAqIDIpICogbmY7XHJcbiAgICBvdXRbMTVdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtudW1iZXJ9IGZvdnkgVmVydGljYWwgZmllbGQgb2YgdmlldyBpbiByYWRpYW5zXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhc3BlY3QgQXNwZWN0IHJhdGlvLiB0eXBpY2FsbHkgdmlld3BvcnQgd2lkdGgvaGVpZ2h0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZWFyIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5wZXJzcGVjdGl2ZSA9IGZ1bmN0aW9uIChvdXQsIGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKSB7XHJcbiAgICB2YXIgZiA9IDEuMCAvIE1hdGgudGFuKGZvdnkgLyAyKSxcclxuICAgICAgICBuZiA9IDEgLyAobmVhciAtIGZhcik7XHJcbiAgICBvdXRbMF0gPSBmIC8gYXNwZWN0O1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMDtcclxuICAgIG91dFs1XSA9IGY7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDA7XHJcbiAgICBvdXRbOV0gPSAwO1xyXG4gICAgb3V0WzEwXSA9IChmYXIgKyBuZWFyKSAqIG5mO1xyXG4gICAgb3V0WzExXSA9IC0xO1xyXG4gICAgb3V0WzEyXSA9IDA7XHJcbiAgICBvdXRbMTNdID0gMDtcclxuICAgIG91dFsxNF0gPSAoMiAqIGZhciAqIG5lYXIpICogbmY7XHJcbiAgICBvdXRbMTVdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgb3J0aG9nb25hbCBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBib3VuZHNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge251bWJlcn0gbGVmdCBMZWZ0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByaWdodCBSaWdodCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gYm90dG9tIEJvdHRvbSBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gdG9wIFRvcCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gbmVhciBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBmYXIgRmFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQub3J0aG8gPSBmdW5jdGlvbiAob3V0LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xyXG4gICAgdmFyIGxyID0gMSAvIChsZWZ0IC0gcmlnaHQpLFxyXG4gICAgICAgIGJ0ID0gMSAvIChib3R0b20gLSB0b3ApLFxyXG4gICAgICAgIG5mID0gMSAvIChuZWFyIC0gZmFyKTtcclxuICAgIG91dFswXSA9IC0yICogbHI7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDA7XHJcbiAgICBvdXRbNF0gPSAwO1xyXG4gICAgb3V0WzVdID0gLTIgKiBidDtcclxuICAgIG91dFs2XSA9IDA7XHJcbiAgICBvdXRbN10gPSAwO1xyXG4gICAgb3V0WzhdID0gMDtcclxuICAgIG91dFs5XSA9IDA7XHJcbiAgICBvdXRbMTBdID0gMiAqIG5mO1xyXG4gICAgb3V0WzExXSA9IDA7XHJcbiAgICBvdXRbMTJdID0gKGxlZnQgKyByaWdodCkgKiBscjtcclxuICAgIG91dFsxM10gPSAodG9wICsgYm90dG9tKSAqIGJ0O1xyXG4gICAgb3V0WzE0XSA9IChmYXIgKyBuZWFyKSAqIG5mO1xyXG4gICAgb3V0WzE1XSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIGxvb2stYXQgbWF0cml4IHdpdGggdGhlIGdpdmVuIGV5ZSBwb3NpdGlvbiwgZm9jYWwgcG9pbnQsIGFuZCB1cCBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHt2ZWMzfSBleWUgUG9zaXRpb24gb2YgdGhlIHZpZXdlclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGNlbnRlciBQb2ludCB0aGUgdmlld2VyIGlzIGxvb2tpbmcgYXRcclxuICogQHBhcmFtIHt2ZWMzfSB1cCB2ZWMzIHBvaW50aW5nIHVwXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQubG9va0F0ID0gZnVuY3Rpb24gKG91dCwgZXllLCBjZW50ZXIsIHVwKSB7XHJcbiAgICB2YXIgeDAsIHgxLCB4MiwgeTAsIHkxLCB5MiwgejAsIHoxLCB6MiwgbGVuLFxyXG4gICAgICAgIGV5ZXggPSBleWVbMF0sXHJcbiAgICAgICAgZXlleSA9IGV5ZVsxXSxcclxuICAgICAgICBleWV6ID0gZXllWzJdLFxyXG4gICAgICAgIHVweCA9IHVwWzBdLFxyXG4gICAgICAgIHVweSA9IHVwWzFdLFxyXG4gICAgICAgIHVweiA9IHVwWzJdLFxyXG4gICAgICAgIGNlbnRlcnggPSBjZW50ZXJbMF0sXHJcbiAgICAgICAgY2VudGVyeSA9IGNlbnRlclsxXSxcclxuICAgICAgICBjZW50ZXJ6ID0gY2VudGVyWzJdO1xyXG5cclxuICAgIGlmIChNYXRoLmFicyhleWV4IC0gY2VudGVyeCkgPCBHTE1BVF9FUFNJTE9OICYmXHJcbiAgICAgICAgTWF0aC5hYnMoZXlleSAtIGNlbnRlcnkpIDwgR0xNQVRfRVBTSUxPTiAmJlxyXG4gICAgICAgIE1hdGguYWJzKGV5ZXogLSBjZW50ZXJ6KSA8IEdMTUFUX0VQU0lMT04pIHtcclxuICAgICAgICByZXR1cm4gbWF0NC5pZGVudGl0eShvdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHowID0gZXlleCAtIGNlbnRlcng7XHJcbiAgICB6MSA9IGV5ZXkgLSBjZW50ZXJ5O1xyXG4gICAgejIgPSBleWV6IC0gY2VudGVyejtcclxuXHJcbiAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KHowICogejAgKyB6MSAqIHoxICsgejIgKiB6Mik7XHJcbiAgICB6MCAqPSBsZW47XHJcbiAgICB6MSAqPSBsZW47XHJcbiAgICB6MiAqPSBsZW47XHJcblxyXG4gICAgeDAgPSB1cHkgKiB6MiAtIHVweiAqIHoxO1xyXG4gICAgeDEgPSB1cHogKiB6MCAtIHVweCAqIHoyO1xyXG4gICAgeDIgPSB1cHggKiB6MSAtIHVweSAqIHowO1xyXG4gICAgbGVuID0gTWF0aC5zcXJ0KHgwICogeDAgKyB4MSAqIHgxICsgeDIgKiB4Mik7XHJcbiAgICBpZiAoIWxlbikge1xyXG4gICAgICAgIHgwID0gMDtcclxuICAgICAgICB4MSA9IDA7XHJcbiAgICAgICAgeDIgPSAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZW4gPSAxIC8gbGVuO1xyXG4gICAgICAgIHgwICo9IGxlbjtcclxuICAgICAgICB4MSAqPSBsZW47XHJcbiAgICAgICAgeDIgKj0gbGVuO1xyXG4gICAgfVxyXG5cclxuICAgIHkwID0gejEgKiB4MiAtIHoyICogeDE7XHJcbiAgICB5MSA9IHoyICogeDAgLSB6MCAqIHgyO1xyXG4gICAgeTIgPSB6MCAqIHgxIC0gejEgKiB4MDtcclxuXHJcbiAgICBsZW4gPSBNYXRoLnNxcnQoeTAgKiB5MCArIHkxICogeTEgKyB5MiAqIHkyKTtcclxuICAgIGlmICghbGVuKSB7XHJcbiAgICAgICAgeTAgPSAwO1xyXG4gICAgICAgIHkxID0gMDtcclxuICAgICAgICB5MiA9IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxlbiA9IDEgLyBsZW47XHJcbiAgICAgICAgeTAgKj0gbGVuO1xyXG4gICAgICAgIHkxICo9IGxlbjtcclxuICAgICAgICB5MiAqPSBsZW47XHJcbiAgICB9XHJcblxyXG4gICAgb3V0WzBdID0geDA7XHJcbiAgICBvdXRbMV0gPSB5MDtcclxuICAgIG91dFsyXSA9IHowO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IHgxO1xyXG4gICAgb3V0WzVdID0geTE7XHJcbiAgICBvdXRbNl0gPSB6MTtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSB4MjtcclxuICAgIG91dFs5XSA9IHkyO1xyXG4gICAgb3V0WzEwXSA9IHoyO1xyXG4gICAgb3V0WzExXSA9IDA7XHJcbiAgICBvdXRbMTJdID0gLSh4MCAqIGV5ZXggKyB4MSAqIGV5ZXkgKyB4MiAqIGV5ZXopO1xyXG4gICAgb3V0WzEzXSA9IC0oeTAgKiBleWV4ICsgeTEgKiBleWV5ICsgeTIgKiBleWV6KTtcclxuICAgIG91dFsxNF0gPSAtKHowICogZXlleCArIHoxICogZXlleSArIHoyICogZXlleik7XHJcbiAgICBvdXRbMTVdID0gMTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cclxubWF0NC5mcm9iID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybihNYXRoLnNxcnQoTWF0aC5wb3coYVswXSwgMikgKyBNYXRoLnBvdyhhWzFdLCAyKSArIE1hdGgucG93KGFbMl0sIDIpICsgTWF0aC5wb3coYVszXSwgMikgKyBNYXRoLnBvdyhhWzRdLCAyKSArIE1hdGgucG93KGFbNV0sIDIpICsgTWF0aC5wb3coYVs2XSwgMikgKyBNYXRoLnBvdyhhWzddLCAyKSArIE1hdGgucG93KGFbOF0sIDIpICsgTWF0aC5wb3coYVs5XSwgMikgKyBNYXRoLnBvdyhhWzEwXSwgMikgKyBNYXRoLnBvdyhhWzExXSwgMikgKyBNYXRoLnBvdyhhWzEyXSwgMikgKyBNYXRoLnBvdyhhWzEzXSwgMikgKyBNYXRoLnBvdyhhWzE0XSwgMikgKyBNYXRoLnBvdyhhWzE1XSwgMikgKSlcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG1hdDQ7IiwiLy8gVE9ETyBSZXNvdXJjZXMgbGlrZSBzaGFkZXIsIHRleHR1cmUsIGdlb21ldHJ5IHJlZmVyZW5jZSBtYW5hZ2VtZW50XHJcbi8vIFRyYWNlIGFuZCBmaW5kIG91dCB3aGljaCBzaGFkZXIsIHRleHR1cmUsIGdlb21ldHJ5IGNhbiBiZSBkZXN0cm95ZWRcclxuaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgR0xJbmZvIGZyb20gJy4vY29yZS9HTEluZm8nO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4vY29yZS92ZW5kb3InO1xyXG5cclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tICcuL21hdGgvVmVjdG9yMic7XHJcbmltcG9ydCBQcm9ncmFtTWFuYWdlciBmcm9tICcuL2dwdS9Qcm9ncmFtTWFuYWdlcic7XHJcblxyXG4vLyBMaWdodCBoZWFkZXJcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuL1NoYWRlcic7XHJcblxyXG5pbXBvcnQgcHJlekVzc2wgZnJvbSAnLi9zaGFkZXIvc291cmNlL3ByZXouZ2xzbC5qcyc7XHJcblNoYWRlclsnaW1wb3J0J10ocHJlekVzc2wpO1xyXG5cclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcbnZhciBtYXQ0Q3JlYXRlID0gbWF0NC5jcmVhdGU7XHJcblxyXG52YXIgZXJyb3JTaGFkZXIgPSB7fTtcclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRHZXRNYXRlcmlhbChyZW5kZXJhYmxlKSB7XHJcbiAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbDtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0R2V0VW5pZm9ybShyZW5kZXJhYmxlLCBtYXRlcmlhbCwgc3ltYm9sKSB7XHJcbiAgICByZXR1cm4gbWF0ZXJpYWwudW5pZm9ybXNbc3ltYm9sXS52YWx1ZTtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0SXNNYXRlcmlhbENoYW5nZWQocmVuZGVyYWJsZWQsIHByZXZSZW5kZXJhYmxlLCBtYXRlcmlhbCwgcHJldk1hdGVyaWFsKSB7XHJcbiAgICByZXR1cm4gbWF0ZXJpYWwgIT09IHByZXZNYXRlcmlhbDtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0SWZSZW5kZXIocmVuZGVyYWJsZSkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5vb3AoKSB7fVxyXG5cclxudmFyIGF0dHJpYnV0ZUJ1ZmZlclR5cGVNYXAgPSB7XHJcbiAgICBmbG9hdDogZ2xlbnVtLkZMT0FULFxyXG4gICAgYnl0ZTogZ2xlbnVtLkJZVEUsXHJcbiAgICB1Ynl0ZTogZ2xlbnVtLlVOU0lHTkVEX0JZVEUsXHJcbiAgICBzaG9ydDogZ2xlbnVtLlNIT1JULFxyXG4gICAgdXNob3J0OiBnbGVudW0uVU5TSUdORURfU0hPUlRcclxufTtcclxuXHJcbmZ1bmN0aW9uIFZlcnRleEFycmF5T2JqZWN0KGF2YWlsYWJsZUF0dHJpYnV0ZXMsIGF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMsIGluZGljZXNCdWZmZXIpIHtcclxuICAgIHRoaXMuYXZhaWxhYmxlQXR0cmlidXRlcyA9IGF2YWlsYWJsZUF0dHJpYnV0ZXM7XHJcbiAgICB0aGlzLmF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMgPSBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzO1xyXG4gICAgdGhpcy5pbmRpY2VzQnVmZmVyID0gaW5kaWNlc0J1ZmZlcjtcclxuXHJcbiAgICB0aGlzLnZhbyA9IG51bGw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFBsYWNlSG9sZGVyVGV4dHVyZShyZW5kZXJlcikge1xyXG4gICAgdmFyIGJsYW5rQ2FudmFzO1xyXG4gICAgdmFyIHdlYmdsVGV4dHVyZTtcclxuICAgIHRoaXMuYmluZCA9IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIGlmICghYmxhbmtDYW52YXMpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBFbnZpcm9ubWVudCBub3Qgc3VwcG9ydCBjcmVhdGVDYW52YXMuXHJcbiAgICAgICAgICAgIGJsYW5rQ2FudmFzID0gdmVuZG9yLmNyZWF0ZUNhbnZhcygpO1xyXG4gICAgICAgICAgICBibGFua0NhbnZhcy53aWR0aCA9IGJsYW5rQ2FudmFzLmhlaWdodCA9IDE7XHJcbiAgICAgICAgICAgIGJsYW5rQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgZmlyc3RCaW5kID0gIXdlYmdsVGV4dHVyZTtcclxuICAgICAgICBpZiAoZmlyc3RCaW5kKSB7XHJcbiAgICAgICAgICAgIHdlYmdsVGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgd2ViZ2xUZXh0dXJlKTtcclxuICAgICAgICBpZiAoZmlyc3RCaW5kKSB7XHJcbiAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgYmxhbmtDYW52YXMpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aGlzLnVuYmluZCA9IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHJlbmRlcmVyLmdsLmJpbmRUZXh0dXJlKHJlbmRlcmVyLmdsLlRFWFRVUkVfMkQsIG51bGwpO1xyXG4gICAgfTtcclxuICAgIHRoaXMuaXNSZW5kZXJhYmxlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuUmVuZGVyZXJcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBSZW5kZXJlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuUmVuZGVyZXIjICovIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxDYW52YXNFbGVtZW50fVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNhbnZhczogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FudmFzIHdpZHRoLCBzZXQgYnkgcmVzaXplIG1ldGhvZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfd2lkdGg6IDEwMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FudmFzIHdpZHRoLCBzZXQgYnkgcmVzaXplIG1ldGhvZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfaGVpZ2h0OiAxMDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERldmljZSBwaXhlbCByYXRpbywgc2V0IGJ5IHNldERldmljZVBpeGVsUmF0aW8gbWV0aG9kXHJcbiAgICAgICAgICogU3BlY2lhbGx5IGZvciBoaWdoIGRlZmluYXRpb24gZGlzcGxheVxyXG4gICAgICAgICAqIEBzZWUgaHR0cDovL3d3dy5raHJvbm9zLm9yZy93ZWJnbC93aWtpL0hhbmRsaW5nSGlnaERQSVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBkZXZpY2VQaXhlbFJhdGlvOiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRldmljZVBpeGVsUmF0aW8pIHx8IDEuMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2xlYXIgY29sb3JcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyW119XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xlYXJDb2xvcjogWzAuMCwgMC4wLCAwLjAsIDAuMF0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERlZmF1bHQ6XHJcbiAgICAgICAgICogICAgIF9nbC5DT0xPUl9CVUZGRVJfQklUIHwgX2dsLkRFUFRIX0JVRkZFUl9CSVQgfCBfZ2wuU1RFTkNJTF9CVUZGRVJfQklUXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGVhckJpdDogMTc2NjQsXHJcblxyXG4gICAgICAgIC8vIFNldHRpbmdzIHdoZW4gZ2V0dGluZyBjb250ZXh0XHJcbiAgICAgICAgLy8gaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9zcGVjcy9sYXRlc3QvIzIuNFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgYWxwaGEsIGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFscGhhOiB0cnVlLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBkZXB0aCBidWZmZXIsIGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRlcHRoOiB0cnVlLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBzdGVuY2lsIGJ1ZmZlciwgZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHN0ZW5jaWw6IGZhbHNlLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBhbnRpYWxpYXMsIGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFudGlhbGlhczogdHJ1ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgcHJlbXVsdGlwbGllZCBhbHBoYSwgZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0cnVlLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHByZXNlcnZlIGRyYXdpbmcgYnVmZmVyLCBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0aHJvdyBjb250ZXh0IGVycm9yLCB1c3VhbGx5IHR1cm5lZCBvbiBpbiBkZWJ1ZyBtb2RlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhyb3dFcnJvcjogdHJ1ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXZWJHTCBDb250ZXh0IGNyZWF0ZWQgZnJvbSBnaXZlbiBjYW52YXNcclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdsOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFJlbmRlcmVyIHZpZXdwb3J0LCByZWFkLW9ubHksIGNhbiBiZSBzZXQgYnkgc2V0Vmlld3BvcnQgbWV0aG9kXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICB2aWV3cG9ydDoge30sXHJcblxyXG4gICAgICAgIC8vIFNldCBieSBGcmFtZUJ1ZmZlciNiaW5kXHJcbiAgICAgICAgX19jdXJyZW50RnJhbWVCdWZmZXI6IG51bGwsXHJcblxyXG4gICAgICAgIF92aWV3cG9ydFN0YWNrOiBbXSxcclxuICAgICAgICBfY2xlYXJTdGFjazogW10sXHJcblxyXG4gICAgICAgIF9zY2VuZVJlbmRlcmluZzogbnVsbFxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIGlmICghdGhpcy5jYW52YXMpIHtcclxuICAgICAgICB0aGlzLmNhbnZhcyA9IHZlbmRvci5jcmVhdGVDYW52YXMoKTtcclxuICAgIH1cclxuICAgIHZhciBjYW52YXMgPSB0aGlzLmNhbnZhcztcclxuICAgIHRyeSB7XHJcbiAgICAgICAgdmFyIG9wdHMgPSB7XHJcbiAgICAgICAgICAgIGFscGhhOiB0aGlzLmFscGhhLFxyXG4gICAgICAgICAgICBkZXB0aDogdGhpcy5kZXB0aCxcclxuICAgICAgICAgICAgc3RlbmNpbDogdGhpcy5zdGVuY2lsLFxyXG4gICAgICAgICAgICBhbnRpYWxpYXM6IHRoaXMuYW50aWFsaWFzLFxyXG4gICAgICAgICAgICBwcmVtdWx0aXBsaWVkQWxwaGE6IHRoaXMucHJlbXVsdGlwbGllZEFscGhhLFxyXG4gICAgICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5nbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIG9wdHMpXHJcbiAgICAgICAgICAgIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBvcHRzKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmdsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZ2xpbmZvID0gbmV3IEdMSW5mbyh0aGlzLmdsKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2wudGFyZ2V0UmVuZGVyZXIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQWxyZWFkeSBjcmVhdGVkIGEgcmVuZGVyZXInKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nbC50YXJnZXRSZW5kZXJlciA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMucmVzaXplKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIHRocm93ICdFcnJvciBjcmVhdGluZyBXZWJHTCBDb250ZXh0ICcgKyBlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEluaXQgbWFuYWdlcnNcclxuICAgIHRoaXMuX3Byb2dyYW1NZ3IgPSBuZXcgUHJvZ3JhbU1hbmFnZXIodGhpcyk7XHJcblxyXG4gICAgdGhpcy5fcGxhY2Vob2xkZXJUZXh0dXJlID0gbmV3IFBsYWNlSG9sZGVyVGV4dHVyZSh0aGlzKTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LlJlbmRlcmVyLnByb3RvdHlwZS4gKiovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogUmVzaXplIHRoZSBjYW52YXNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxyXG4gICAgICovXHJcbiAgICByZXNpemU6IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgICAgICB2YXIgY2FudmFzID0gdGhpcy5jYW52YXM7XHJcbiAgICAgICAgLy8gaHR0cDovL3d3dy5raHJvbm9zLm9yZy93ZWJnbC93aWtpL0hhbmRsaW5nSGlnaERQSVxyXG4gICAgICAgIC8vIHNldCB0aGUgZGlzcGxheSBzaXplIG9mIHRoZSBjYW52YXMuXHJcbiAgICAgICAgdmFyIGRwciA9IHRoaXMuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICBpZiAod2lkdGggIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoY2FudmFzLnN0eWxlKSB7XHJcbiAgICAgICAgICAgICAgICBjYW52YXMuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XHJcbiAgICAgICAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHNpemUgb2YgdGhlIGRyYXdpbmdCdWZmZXJcclxuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGggKiBkcHI7XHJcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKiBkcHI7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IGNhbnZhcy53aWR0aCAvIGRwcjtcclxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gY2FudmFzLmhlaWdodCAvIGRwcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0Vmlld3BvcnQoMCwgMCwgdGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHJlbmRlcmVyIHdpZHRoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldFdpZHRoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCByZW5kZXJlciBoZWlnaHRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0SGVpZ2h0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdmlld3BvcnQgYXNwZWN0LFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXRWaWV3cG9ydEFzcGVjdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7XHJcbiAgICAgICAgcmV0dXJuIHZpZXdwb3J0LndpZHRoIC8gdmlld3BvcnQuaGVpZ2h0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBkZXZpY2VQaXhlbFJhdGlvXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGV2aWNlUGl4ZWxSYXRpb1xyXG4gICAgICovXHJcbiAgICBzZXREZXZpY2VQaXhlbFJhdGlvOiBmdW5jdGlvbihkZXZpY2VQaXhlbFJhdGlvKSB7XHJcbiAgICAgICAgdGhpcy5kZXZpY2VQaXhlbFJhdGlvID0gZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICB0aGlzLnJlc2l6ZSh0aGlzLl93aWR0aCwgdGhpcy5faGVpZ2h0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZGV2aWNlUGl4ZWxSYXRpb1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRldmljZVBpeGVsUmF0aW9cclxuICAgICAqL1xyXG4gICAgZ2V0RGV2aWNlUGl4ZWxSYXRpbzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRldmljZVBpeGVsUmF0aW87XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IFdlYkdMIGV4dGVuc2lvblxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge29iamVjdH1cclxuICAgICAqL1xyXG4gICAgZ2V0R0xFeHRlbnNpb246IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dsaW5mby5nZXRFeHRlbnNpb24obmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IFdlYkdMIHBhcmFtZXRlclxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4geyp9XHJcbiAgICAgKi9cclxuICAgIGdldEdMUGFyYW1ldGVyOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nbGluZm8uZ2V0UGFyYW1ldGVyKG5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCByZW5kZXJpbmcgdmlld3BvcnRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfE9iamVjdH0geFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aF1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0XVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtkZXZpY2VQaXhlbFJhdGlvXVxyXG4gICAgICogICAgICAgIERlZmF1bHRseSB1c2UgdGhlIHJlbmRlcmVyZSBkZXZpY2VQaXhlbFJhdGlvXHJcbiAgICAgKiAgICAgICAgSXQgbmVlZHMgdG8gYmUgMSB3aGVuIHNldFZpZXdwb3J0IGlzIGNhbGxlZCBieSBmcmFtZUJ1ZmZlclxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiAgc2V0Vmlld3BvcnQoMCwwLHdpZHRoLGhlaWdodCwxKVxyXG4gICAgICogIHNldFZpZXdwb3J0KHtcclxuICAgICAqICAgICAgeDogMCxcclxuICAgICAqICAgICAgeTogMCxcclxuICAgICAqICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICogICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAqICAgICAgZGV2aWNlUGl4ZWxSYXRpbzogMVxyXG4gICAgICogIH0pXHJcbiAgICAgKi9cclxuICAgIHNldFZpZXdwb3J0OiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgZHByKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgdmFyIG9iaiA9IHg7XHJcblxyXG4gICAgICAgICAgICB4ID0gb2JqLng7XHJcbiAgICAgICAgICAgIHkgPSBvYmoueTtcclxuICAgICAgICAgICAgd2lkdGggPSBvYmoud2lkdGg7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IG9iai5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGRwciA9IG9iai5kZXZpY2VQaXhlbFJhdGlvO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkcHIgPSBkcHIgfHwgdGhpcy5kZXZpY2VQaXhlbFJhdGlvO1xyXG5cclxuICAgICAgICB0aGlzLmdsLnZpZXdwb3J0KFxyXG4gICAgICAgICAgICB4ICogZHByLCB5ICogZHByLCB3aWR0aCAqIGRwciwgaGVpZ2h0ICogZHByXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBVc2UgYSBmcmVzaCBuZXcgb2JqZWN0LCBub3Qgd3JpdGUgcHJvcGVydHkuXHJcbiAgICAgICAgdGhpcy52aWV3cG9ydCA9IHtcclxuICAgICAgICAgICAgeDogeCxcclxuICAgICAgICAgICAgeTogeSxcclxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICAgICAgZGV2aWNlUGl4ZWxSYXRpbzogZHByXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQdXNoIGN1cnJlbnQgdmlld3BvcnQgaW50byBhIHN0YWNrXHJcbiAgICAgKi9cclxuICAgIHNhdmVWaWV3cG9ydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3ZpZXdwb3J0U3RhY2sucHVzaCh0aGlzLnZpZXdwb3J0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3Agdmlld3BvcnQgZnJvbSBzdGFjaywgcmVzdG9yZSBpbiB0aGUgcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgcmVzdG9yZVZpZXdwb3J0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3ZpZXdwb3J0U3RhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZpZXdwb3J0KHRoaXMuX3ZpZXdwb3J0U3RhY2sucG9wKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQdXNoIGN1cnJlbnQgY2xlYXIgaW50byBhIHN0YWNrXHJcbiAgICAgKi9cclxuICAgIHNhdmVDbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFyU3RhY2sucHVzaCh7XHJcbiAgICAgICAgICAgIGNsZWFyQml0OiB0aGlzLmNsZWFyQml0LFxyXG4gICAgICAgICAgICBjbGVhckNvbG9yOiB0aGlzLmNsZWFyQ29sb3JcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3AgY2xlYXIgZnJvbSBzdGFjaywgcmVzdG9yZSBpbiB0aGUgcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgcmVzdG9yZUNsZWFyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NsZWFyU3RhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB2YXIgb3B0ID0gdGhpcy5fY2xlYXJTdGFjay5wb3AoKTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckNvbG9yID0gb3B0LmNsZWFyQ29sb3I7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJCaXQgPSBvcHQuY2xlYXJCaXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBiaW5kU2NlbmVSZW5kZXJpbmc6IGZ1bmN0aW9uIChzY2VuZSkge1xyXG4gICAgICAgIHRoaXMuX3NjZW5lUmVuZGVyaW5nID0gc2NlbmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIHRoZSBzY2VuZSBpbiBjYW1lcmEgdG8gdGhlIHNjcmVlbiBvciBiaW5kZWQgb2ZmbGluZSBmcmFtZWJ1ZmZlclxyXG4gICAgICogQHBhcmFtICB7Y2xheS5TY2VuZX0gICAgICAgc2NlbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQ2FtZXJhfSAgICAgIGNhbWVyYVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgIFtub3RVcGRhdGVTY2VuZV0gSWYgbm90IGNhbGwgdGhlIHNjZW5lLnVwZGF0ZSBtZXRob2RzIGluIHRoZSByZW5kZXJpbmcsIGRlZmF1bHQgdHJ1ZVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgIFtwcmVaXSAgICAgICAgICAgSWYgdXNlIHByZVogb3B0aW1pemF0aW9uLCBkZWZhdWx0IGZhbHNlXHJcbiAgICAgKiBAcmV0dXJuIHtJUmVuZGVySW5mb31cclxuICAgICAqL1xyXG4gICAgcmVuZGVyOiBmdW5jdGlvbihzY2VuZSwgY2FtZXJhLCBub3RVcGRhdGVTY2VuZSwgcHJlWikge1xyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICB2YXIgY2xlYXJDb2xvciA9IHRoaXMuY2xlYXJDb2xvcjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJCaXQpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIE11c3Qgc2V0IGRlcHRoIGFuZCBjb2xvciBtYXNrIHRydWUgYmVmb3JlIGNsZWFyXHJcbiAgICAgICAgICAgIF9nbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIF9nbC5kZXB0aE1hc2sodHJ1ZSk7XHJcbiAgICAgICAgICAgIHZhciB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7XHJcbiAgICAgICAgICAgIHZhciBuZWVkc1NjaXNzb3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgdmFyIHZpZXdwb3J0RHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICAgICAgaWYgKHZpZXdwb3J0LndpZHRoICE9PSB0aGlzLl93aWR0aCB8fCB2aWV3cG9ydC5oZWlnaHQgIT09IHRoaXMuX2hlaWdodFxyXG4gICAgICAgICAgICAgICAgfHwgKHZpZXdwb3J0RHByICYmIHZpZXdwb3J0RHByICE9PSB0aGlzLmRldmljZVBpeGVsUmF0aW8pXHJcbiAgICAgICAgICAgICAgICB8fCB2aWV3cG9ydC54IHx8IHZpZXdwb3J0LnlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBuZWVkc1NjaXNzb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMTU0NDYwOC9ob3ctdG8tY2xlYXItYS1yZWN0YW5nbGUtYXJlYS1pbi13ZWJnbFxyXG4gICAgICAgICAgICAgICAgLy8gT25seSBjbGVhciB0aGUgdmlld3BvcnRcclxuICAgICAgICAgICAgICAgIF9nbC5lbmFibGUoX2dsLlNDSVNTT1JfVEVTVCk7XHJcbiAgICAgICAgICAgICAgICBfZ2wuc2Npc3Nvcih2aWV3cG9ydC54ICogdmlld3BvcnREcHIsIHZpZXdwb3J0LnkgKiB2aWV3cG9ydERwciwgdmlld3BvcnQud2lkdGggKiB2aWV3cG9ydERwciwgdmlld3BvcnQuaGVpZ2h0ICogdmlld3BvcnREcHIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF9nbC5jbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pO1xyXG4gICAgICAgICAgICBfZ2wuY2xlYXIodGhpcy5jbGVhckJpdCk7XHJcbiAgICAgICAgICAgIGlmIChuZWVkc1NjaXNzb3IpIHtcclxuICAgICAgICAgICAgICAgIF9nbC5kaXNhYmxlKF9nbC5TQ0lTU09SX1RFU1QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiB0aGUgc2NlbmUgaGF2ZSBiZWVuIHVwZGF0ZWQgaW4gdGhlIHByZXBhc3MgbGlrZSBzaGFkb3cgbWFwXHJcbiAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byB1cGRhdGUgaXQgYWdhaW5cclxuICAgICAgICBpZiAoIW5vdFVwZGF0ZVNjZW5lKSB7XHJcbiAgICAgICAgICAgIHNjZW5lLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjZW5lLnVwZGF0ZUxpZ2h0cygpO1xyXG5cclxuICAgICAgICBjYW1lcmEgPSBjYW1lcmEgfHwgc2NlbmUuZ2V0TWFpbkNhbWVyYSgpO1xyXG4gICAgICAgIGlmICghY2FtZXJhKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NhblxcJ3QgZmluZCBjYW1lcmEgaW4gdGhlIHNjZW5lLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhbWVyYS51cGRhdGUoKTtcclxuICAgICAgICB2YXIgcmVuZGVyTGlzdCA9IHNjZW5lLnVwZGF0ZVJlbmRlckxpc3QoY2FtZXJhLCB0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2NlbmVSZW5kZXJpbmcgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgdmFyIG9wYXF1ZUxpc3QgPSByZW5kZXJMaXN0Lm9wYXF1ZTtcclxuICAgICAgICB2YXIgdHJhbnNwYXJlbnRMaXN0ID0gcmVuZGVyTGlzdC50cmFuc3BhcmVudDtcclxuICAgICAgICB2YXIgc2NlbmVNYXRlcmlhbCA9IHNjZW5lLm1hdGVyaWFsO1xyXG5cclxuICAgICAgICBzY2VuZS50cmlnZ2VyKCdiZWZvcmVyZW5kZXInLCB0aGlzLCBzY2VuZSwgY2FtZXJhLCByZW5kZXJMaXN0KTtcclxuXHJcbiAgICAgICAgLy8gUmVuZGVyIHByZSB6XHJcbiAgICAgICAgaWYgKHByZVopIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJQcmVaKG9wYXF1ZUxpc3QsIHNjZW5lLCBjYW1lcmEpO1xyXG4gICAgICAgICAgICBfZ2wuZGVwdGhGdW5jKF9nbC5MRVFVQUwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgX2dsLmRlcHRoRnVuYyhfZ2wuTEVTUyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIGRlcHRoIG9mIHRyYW5zcGFyZW50IGxpc3QuXHJcbiAgICAgICAgdmFyIHdvcmxkVmlld01hdCA9IG1hdDRDcmVhdGUoKTtcclxuICAgICAgICB2YXIgcG9zVmlld1NwYWNlID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zcGFyZW50TGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyYWJsZSA9IHRyYW5zcGFyZW50TGlzdFtpXTtcclxuICAgICAgICAgICAgbWF0NC5tdWx0aXBseUFmZmluZSh3b3JsZFZpZXdNYXQsIGNhbWVyYS52aWV3TWF0cml4LmFycmF5LCByZW5kZXJhYmxlLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgdmVjMy50cmFuc2Zvcm1NYXQ0KHBvc1ZpZXdTcGFjZSwgcmVuZGVyYWJsZS5wb3NpdGlvbi5hcnJheSwgd29ybGRWaWV3TWF0KTtcclxuICAgICAgICAgICAgcmVuZGVyYWJsZS5fX2RlcHRoID0gcG9zVmlld1NwYWNlWzJdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVuZGVyIG9wYXF1ZSBsaXN0XHJcbiAgICAgICAgdGhpcy5yZW5kZXJQYXNzKG9wYXF1ZUxpc3QsIGNhbWVyYSwge1xyXG4gICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzY2VuZU1hdGVyaWFsIHx8IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNvcnRDb21wYXJlOiB0aGlzLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyh0cmFuc3BhcmVudExpc3QsIGNhbWVyYSwge1xyXG4gICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzY2VuZU1hdGVyaWFsIHx8IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNvcnRDb21wYXJlOiB0aGlzLnRyYW5zcGFyZW50U29ydENvbXBhcmVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2NlbmUudHJpZ2dlcignYWZ0ZXJyZW5kZXInLCB0aGlzLCBzY2VuZSwgY2FtZXJhLCByZW5kZXJMaXN0KTtcclxuXHJcbiAgICAgICAgLy8gQ2xlYW51cFxyXG4gICAgICAgIHRoaXMuX3NjZW5lUmVuZGVyaW5nID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0UHJvZ3JhbTogZnVuY3Rpb24gKHJlbmRlcmFibGUsIHJlbmRlck1hdGVyaWFsLCBzY2VuZSkge1xyXG4gICAgICAgIHJlbmRlck1hdGVyaWFsID0gcmVuZGVyTWF0ZXJpYWwgfHwgcmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3JhbU1nci5nZXRQcm9ncmFtKHJlbmRlcmFibGUsIHJlbmRlck1hdGVyaWFsLCBzY2VuZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlUHJvZ3JhbTogZnVuY3Rpb24gKHByb2dyYW0pIHtcclxuICAgICAgICBpZiAocHJvZ3JhbS5fX2Vycm9yKSB7XHJcbiAgICAgICAgICAgIHZhciBlcnJvck1zZyA9IHByb2dyYW0uX19lcnJvcjtcclxuICAgICAgICAgICAgaWYgKGVycm9yU2hhZGVyW3Byb2dyYW0uX191aWRfX10pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlcnJvclNoYWRlcltwcm9ncmFtLl9fdWlkX19dID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRocm93RXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2Vycm9yJywgZXJyb3JNc2cpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZVByb2dyYW1zOiBmdW5jdGlvbiAobGlzdCwgc2NlbmUsIHBhc3NDb25maWcpIHtcclxuICAgICAgICB2YXIgZ2V0TWF0ZXJpYWwgPSAocGFzc0NvbmZpZyAmJiBwYXNzQ29uZmlnLmdldE1hdGVyaWFsKSB8fCBkZWZhdWx0R2V0TWF0ZXJpYWw7XHJcbiAgICAgICAgc2NlbmUgPSBzY2VuZSB8fCBudWxsO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyYWJsZSA9IGxpc3RbaV07XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJNYXRlcmlhbCA9IGdldE1hdGVyaWFsLmNhbGwodGhpcywgcmVuZGVyYWJsZSk7XHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHByZXZSZW5kZXJhYmxlID0gbGlzdFtpIC0gMV07XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJldkpvaW50c0xlbiA9IHByZXZSZW5kZXJhYmxlLmpvaW50cyA/IHByZXZSZW5kZXJhYmxlLmpvaW50cy5sZW5ndGggOiAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50c0xlbiA9IHJlbmRlcmFibGUuam9pbnRzID8gcmVuZGVyYWJsZS5qb2ludHMubGVuZ3RoIDogMDtcclxuICAgICAgICAgICAgICAgIC8vIEtlZXAgcHJvZ3JhbSBub3QgY2hhbmdlIGlmIGpvaW50cywgbWF0ZXJpYWwsIGxpZ2h0R3JvdXAgYXJlIHNhbWUgb2YgdHdvIHJlbmRlcmFibGVzLlxyXG4gICAgICAgICAgICAgICAgaWYgKGpvaW50c0xlbiA9PT0gcHJldkpvaW50c0xlblxyXG4gICAgICAgICAgICAgICAgICAgICYmIHJlbmRlcmFibGUubWF0ZXJpYWwgPT09IHByZXZSZW5kZXJhYmxlLm1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgcmVuZGVyYWJsZS5saWdodEdyb3VwID09PSBwcmV2UmVuZGVyYWJsZS5saWdodEdyb3VwXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLl9fcHJvZ3JhbSA9IHByZXZSZW5kZXJhYmxlLl9fcHJvZ3JhbTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHByb2dyYW0gPSB0aGlzLl9wcm9ncmFtTWdyLmdldFByb2dyYW0ocmVuZGVyYWJsZSwgcmVuZGVyTWF0ZXJpYWwsIHNjZW5lKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pO1xyXG5cclxuICAgICAgICAgICAgcmVuZGVyYWJsZS5fX3Byb2dyYW0gPSBwcm9ncmFtO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW5kZXIgYSBzaW5nbGUgcmVuZGVyYWJsZSBsaXN0IGluIGNhbWVyYSBpbiBzZXF1ZW5jZVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmFibGVbXX0gbGlzdCBMaXN0IG9mIGFsbCByZW5kZXJhYmxlcy5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5DYW1lcmF9IFtjYW1lcmFdIENhbWVyYSBwcm92aWRlIHZpZXcgbWF0cml4IGFuZCBwb3JqZWN0aW9uIG1hdHJpeC4gSXQgY2FuIGJlIG51bGwuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3Bhc3NDb25maWddXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5nZXRNYXRlcmlhbF0gR2V0IHJlbmRlcmFibGUgbWF0ZXJpYWwuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5nZXRVbmlmb3JtXSBHZXQgbWF0ZXJpYWwgdW5pZm9ybSB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXNzQ29uZmlnLmlzTWF0ZXJpYWxDaGFuZ2VkXSBJZiBtYXRlcmlhbCBjaGFuZ2VkLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuYmVmb3JlUmVuZGVyXSBCZWZvcmUgcmVuZGVyIGVhY2ggcmVuZGVyYWJsZS5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXNzQ29uZmlnLmFmdGVyUmVuZGVyXSBBZnRlciByZW5kZXIgZWFjaCByZW5kZXJhYmxlXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5pZlJlbmRlcl0gSWYgcmVuZGVyIHRoZSByZW5kZXJhYmxlLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuc29ydENvbXBhcmVdIFNvcnQgY29tcGFyZSBmdW5jdGlvbi5cclxuICAgICAqIEByZXR1cm4ge0lSZW5kZXJJbmZvfVxyXG4gICAgICovXHJcbiAgICByZW5kZXJQYXNzOiBmdW5jdGlvbihsaXN0LCBjYW1lcmEsIHBhc3NDb25maWcpIHtcclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZXJlbmRlcnBhc3MnLCB0aGlzLCBsaXN0LCBjYW1lcmEsIHBhc3NDb25maWcpO1xyXG5cclxuICAgICAgICBwYXNzQ29uZmlnID0gcGFzc0NvbmZpZyB8fCB7fTtcclxuICAgICAgICBwYXNzQ29uZmlnLmdldE1hdGVyaWFsID0gcGFzc0NvbmZpZy5nZXRNYXRlcmlhbCB8fCBkZWZhdWx0R2V0TWF0ZXJpYWw7XHJcbiAgICAgICAgcGFzc0NvbmZpZy5nZXRVbmlmb3JtID0gcGFzc0NvbmZpZy5nZXRVbmlmb3JtIHx8IGRlZmF1bHRHZXRVbmlmb3JtO1xyXG4gICAgICAgIC8vIFBFTkRJTkcgQmV0dGVyIHNvbHV0aW9uP1xyXG4gICAgICAgIHBhc3NDb25maWcuaXNNYXRlcmlhbENoYW5nZWQgPSBwYXNzQ29uZmlnLmlzTWF0ZXJpYWxDaGFuZ2VkIHx8IGRlZmF1bHRJc01hdGVyaWFsQ2hhbmdlZDtcclxuICAgICAgICBwYXNzQ29uZmlnLmJlZm9yZVJlbmRlciA9IHBhc3NDb25maWcuYmVmb3JlUmVuZGVyIHx8IG5vb3A7XHJcbiAgICAgICAgcGFzc0NvbmZpZy5hZnRlclJlbmRlciA9IHBhc3NDb25maWcuYWZ0ZXJSZW5kZXIgfHwgbm9vcDtcclxuXHJcbiAgICAgICAgdmFyIGlmUmVuZGVyT2JqZWN0ID0gcGFzc0NvbmZpZy5pZlJlbmRlciB8fCBkZWZhdWx0SWZSZW5kZXI7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlUHJvZ3JhbXMobGlzdCwgdGhpcy5fc2NlbmVSZW5kZXJpbmcsIHBhc3NDb25maWcpO1xyXG4gICAgICAgIGlmIChwYXNzQ29uZmlnLnNvcnRDb21wYXJlKSB7XHJcbiAgICAgICAgICAgIGxpc3Quc29ydChwYXNzQ29uZmlnLnNvcnRDb21wYXJlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNvbWUgY29tbW9uIGJ1aWx0aW4gdW5pZm9ybXNcclxuICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xyXG4gICAgICAgIHZhciB2RHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICB2YXIgdmlld3BvcnRVbmlmb3JtID0gW1xyXG4gICAgICAgICAgICB2aWV3cG9ydC54ICogdkRwciwgdmlld3BvcnQueSAqIHZEcHIsXHJcbiAgICAgICAgICAgIHZpZXdwb3J0LndpZHRoICogdkRwciwgdmlld3BvcnQuaGVpZ2h0ICogdkRwclxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdmFyIHdpbmRvd0RwciA9IHRoaXMuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICB2YXIgd2luZG93U2l6ZVVuaWZvcm0gPSB0aGlzLl9fY3VycmVudEZyYW1lQnVmZmVyXHJcbiAgICAgICAgICAgID8gW3RoaXMuX19jdXJyZW50RnJhbWVCdWZmZXIuZ2V0VGV4dHVyZVdpZHRoKCksIHRoaXMuX19jdXJyZW50RnJhbWVCdWZmZXIuZ2V0VGV4dHVyZUhlaWdodCgpXVxyXG4gICAgICAgICAgICA6IFt0aGlzLl93aWR0aCAqIHdpbmRvd0RwciwgdGhpcy5faGVpZ2h0ICogd2luZG93RHByXTtcclxuICAgICAgICAvLyBERVBSRUNBVEVEXHJcbiAgICAgICAgdmFyIHZpZXdwb3J0U2l6ZVVuaWZvcm0gPSBbXHJcbiAgICAgICAgICAgIHZpZXdwb3J0VW5pZm9ybVsyXSwgdmlld3BvcnRVbmlmb3JtWzNdXHJcbiAgICAgICAgXTtcclxuICAgICAgICB2YXIgdGltZSA9IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSB2aWV3IGFuZCBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICAgIGlmIChjYW1lcmEpIHtcclxuICAgICAgICAgICAgbWF0NC5jb3B5KG1hdHJpY2VzLlZJRVcsIGNhbWVyYS52aWV3TWF0cml4LmFycmF5KTtcclxuICAgICAgICAgICAgbWF0NC5jb3B5KG1hdHJpY2VzLlBST0pFQ1RJT04sIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmFycmF5KTtcclxuICAgICAgICAgICAgbWF0NC5jb3B5KG1hdHJpY2VzLlZJRVdJTlZFUlNFLCBjYW1lcmEud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWF0NC5pZGVudGl0eShtYXRyaWNlcy5WSUVXKTtcclxuICAgICAgICAgICAgbWF0NC5pZGVudGl0eShtYXRyaWNlcy5QUk9KRUNUSU9OKTtcclxuICAgICAgICAgICAgbWF0NC5pZGVudGl0eShtYXRyaWNlcy5WSUVXSU5WRVJTRSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1hdDQubXVsdGlwbHkobWF0cmljZXMuVklFV1BST0pFQ1RJT04sIG1hdHJpY2VzLlBST0pFQ1RJT04sIG1hdHJpY2VzLlZJRVcpO1xyXG4gICAgICAgIG1hdDQuaW52ZXJ0KG1hdHJpY2VzLlBST0pFQ1RJT05JTlZFUlNFLCBtYXRyaWNlcy5QUk9KRUNUSU9OKTtcclxuICAgICAgICBtYXQ0LmludmVydChtYXRyaWNlcy5WSUVXUFJPSkVDVElPTklOVkVSU0UsIG1hdHJpY2VzLlZJRVdQUk9KRUNUSU9OKTtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHRoaXMuZ2w7XHJcbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5fc2NlbmVSZW5kZXJpbmc7XHJcblxyXG4gICAgICAgIHZhciBwcmV2TWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIHByZXZQcm9ncmFtO1xyXG4gICAgICAgIHZhciBwcmV2UmVuZGVyYWJsZTtcclxuXHJcbiAgICAgICAgLy8gU3RhdHVzXHJcbiAgICAgICAgdmFyIGRlcHRoVGVzdCwgZGVwdGhNYXNrO1xyXG4gICAgICAgIHZhciBjdWxsaW5nLCBjdWxsRmFjZSwgZnJvbnRGYWNlO1xyXG4gICAgICAgIHZhciB0cmFuc3BhcmVudDtcclxuICAgICAgICB2YXIgZHJhd0lEO1xyXG4gICAgICAgIHZhciBjdXJyZW50VkFPO1xyXG4gICAgICAgIHZhciBtYXRlcmlhbFRha2VzVGV4dHVyZVNsb3Q7XHJcblxyXG4gICAgICAgIC8vIHZhciB2YW9FeHQgPSB0aGlzLmdldEdMRXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpO1xyXG4gICAgICAgIC8vIG5vdCB1c2UgdmFvRXh0LCBzb21lIHBsYXRmb3JtcyBtYXkgbWVzcyBpdCB1cC5cclxuICAgICAgICB2YXIgdmFvRXh0ID0gbnVsbDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJhYmxlID0gbGlzdFtpXTtcclxuICAgICAgICAgICAgdmFyIGlzU2NlbmVOb2RlID0gcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybSAhPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgd29ybGRNO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFpZlJlbmRlck9iamVjdChyZW5kZXJhYmxlKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFNraW5uZWQgbWVzaCB3aWxsIHRyYW5zZm9ybWVkIHRvIGpvaW50IHNwYWNlLiBJZ25vcmUgdGhlIG1lc2ggdHJhbnNmb3JtXHJcbiAgICAgICAgICAgIGlmIChpc1NjZW5lTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgd29ybGRNID0gKHJlbmRlcmFibGUuaXNTa2lubmVkTWVzaCAmJiByZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2goKSlcclxuICAgICAgICAgICAgICAgICAgICA/IG1hdHJpY2VzLklERU5USVRZIDogcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSByZW5kZXJhYmxlLmdlb21ldHJ5O1xyXG4gICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBwYXNzQ29uZmlnLmdldE1hdGVyaWFsLmNhbGwodGhpcywgcmVuZGVyYWJsZSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcHJvZ3JhbSA9IHJlbmRlcmFibGUuX19wcm9ncmFtO1xyXG4gICAgICAgICAgICB2YXIgc2hhZGVyID0gbWF0ZXJpYWwuc2hhZGVyO1xyXG5cclxuICAgICAgICAgICAgdmFyIGN1cnJlbnREcmF3SUQgPSBnZW9tZXRyeS5fX3VpZF9fICsgJy0nICsgcHJvZ3JhbS5fX3VpZF9fO1xyXG4gICAgICAgICAgICB2YXIgZHJhd0lEQ2hhbmdlZCA9IGN1cnJlbnREcmF3SUQgIT09IGRyYXdJRDtcclxuICAgICAgICAgICAgZHJhd0lEID0gY3VycmVudERyYXdJRDtcclxuICAgICAgICAgICAgaWYgKGRyYXdJRENoYW5nZWQgJiYgdmFvRXh0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPIFNlZW1zIG5lZWQgdG8gYmUgYm91bmQgdG8gbnVsbCBpbW1lZGlhdGVseSAob3IgYmVmb3JlIGJpbmQgYW5vdGhlciBwcm9ncmFtPykgaWYgdmFvIGlzIGNoYW5nZWRcclxuICAgICAgICAgICAgICAgIHZhb0V4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzU2NlbmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBtYXQ0LmNvcHkobWF0cmljZXMuV09STEQsIHdvcmxkTSk7XHJcbiAgICAgICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KG1hdHJpY2VzLldPUkxEVklFV1BST0pFQ1RJT04sIG1hdHJpY2VzLlZJRVdQUk9KRUNUSU9OLCB3b3JsZE0pO1xyXG4gICAgICAgICAgICAgICAgbWF0NC5tdWx0aXBseUFmZmluZShtYXRyaWNlcy5XT1JMRFZJRVcsIG1hdHJpY2VzLlZJRVcsIHdvcmxkTSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRElOVkVSU0UgfHxcclxuICAgICAgICAgICAgICAgICAgICBzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxESU5WRVJTRVRSQU5TUE9TRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdDQuaW52ZXJ0KG1hdHJpY2VzLldPUkxESU5WRVJTRSwgd29ybGRNKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxEVklFV0lOVkVSU0UgfHxcclxuICAgICAgICAgICAgICAgICAgICBzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxEVklFV0lOVkVSU0VUUkFOU1BPU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXQ0LmludmVydChtYXRyaWNlcy5XT1JMRFZJRVdJTlZFUlNFLCBtYXRyaWNlcy5XT1JMRFZJRVcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRlci5tYXRyaXhTZW1hbnRpY3MuV09STERWSUVXUFJPSkVDVElPTklOVkVSU0UgfHxcclxuICAgICAgICAgICAgICAgICAgICBzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFVFJBTlNQT1NFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0NC5pbnZlcnQobWF0cmljZXMuV09STERWSUVXUFJPSkVDVElPTklOVkVSU0UsIG1hdHJpY2VzLldPUkxEVklFV1BST0pFQ1RJT04pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBCZWZvcmUgcmVuZGVyIGhvb2tcclxuICAgICAgICAgICAgcmVuZGVyYWJsZS5iZWZvcmVSZW5kZXIgJiYgcmVuZGVyYWJsZS5iZWZvcmVSZW5kZXIodGhpcyk7XHJcbiAgICAgICAgICAgIHBhc3NDb25maWcuYmVmb3JlUmVuZGVyLmNhbGwodGhpcywgcmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHByZXZNYXRlcmlhbCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcHJvZ3JhbUNoYW5nZWQgPSBwcm9ncmFtICE9PSBwcmV2UHJvZ3JhbTtcclxuICAgICAgICAgICAgaWYgKHByb2dyYW1DaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTZXQgbGlnaHRzIG51bWJlclxyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5iaW5kKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy8gU2V0IHNvbWUgY29tbW9uIHVuaWZvcm1zXHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKF9nbCwgJ1ZJRVdQT1JUJywgdmlld3BvcnRVbmlmb3JtKTtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnV0lORE9XX1NJWkUnLCB3aW5kb3dTaXplVW5pZm9ybSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FtZXJhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdORUFSJywgY2FtZXJhLm5lYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnRkFSJywgY2FtZXJhLmZhcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKF9nbCwgJ0RFVklDRVBJWEVMUkFUSU8nLCB2RHByKTtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnVElNRScsIHRpbWUpO1xyXG4gICAgICAgICAgICAgICAgLy8gREVQUkVDQVRFRFxyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdWSUVXUE9SVF9TSVpFJywgdmlld3BvcnRTaXplVW5pZm9ybSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU2V0IGxpZ2h0cyB1bmlmb3Jtc1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBuZWVkcyBvcHRpbWl6ZWRcclxuICAgICAgICAgICAgICAgIGlmIChzY2VuZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lLnNldExpZ2h0VW5pZm9ybXMocHJvZ3JhbSwgcmVuZGVyYWJsZS5saWdodEdyb3VwLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0gPSBwcmV2UHJvZ3JhbTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gUHJvZ3JhbSBjaGFuZ2VzIGFsc28gbmVlZHMgcmVzZXQgdGhlIG1hdGVyaWFscy5cclxuICAgICAgICAgICAgaWYgKHByb2dyYW1DaGFuZ2VkIHx8IHBhc3NDb25maWcuaXNNYXRlcmlhbENoYW5nZWQoXHJcbiAgICAgICAgICAgICAgICByZW5kZXJhYmxlLCBwcmV2UmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHByZXZNYXRlcmlhbFxyXG4gICAgICAgICAgICApKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWwuZGVwdGhUZXN0ICE9PSBkZXB0aFRlc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5kZXB0aFRlc3QgPyBfZ2wuZW5hYmxlKF9nbC5ERVBUSF9URVNUKSA6IF9nbC5kaXNhYmxlKF9nbC5ERVBUSF9URVNUKTtcclxuICAgICAgICAgICAgICAgICAgICBkZXB0aFRlc3QgPSBtYXRlcmlhbC5kZXB0aFRlc3Q7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWwuZGVwdGhNYXNrICE9PSBkZXB0aE1hc2spIHtcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuZGVwdGhNYXNrKG1hdGVyaWFsLmRlcHRoTWFzayk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVwdGhNYXNrID0gbWF0ZXJpYWwuZGVwdGhNYXNrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnRyYW5zcGFyZW50ICE9PSB0cmFuc3BhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zcGFyZW50ID8gX2dsLmVuYWJsZShfZ2wuQkxFTkQpIDogX2dsLmRpc2FibGUoX2dsLkJMRU5EKTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc3BhcmVudCA9IG1hdGVyaWFsLnRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjYWNoZSBibGVuZGluZ1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmJsZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmJsZW5kKF9nbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IGJsZW5kIGZ1bmN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9nbC5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoX2dsLkZVTkNfQURELCBfZ2wuRlVOQ19BREQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfZ2wuYmxlbmRGdW5jU2VwYXJhdGUoX2dsLlNSQ19BTFBIQSwgX2dsLk9ORV9NSU5VU19TUkNfQUxQSEEsIF9nbC5PTkUsIF9nbC5PTkVfTUlOVVNfU1JDX0FMUEhBKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxUYWtlc1RleHR1cmVTbG90ID0gdGhpcy5fYmluZE1hdGVyaWFsKFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGUsIG1hdGVyaWFsLCBwcm9ncmFtLFxyXG4gICAgICAgICAgICAgICAgICAgIHByZXZSZW5kZXJhYmxlIHx8IG51bGwsIHByZXZNYXRlcmlhbCB8fCBudWxsLCBwcmV2UHJvZ3JhbSB8fCBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NDb25maWcuZ2V0VW5pZm9ybVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHByZXZNYXRlcmlhbCA9IG1hdGVyaWFsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgbWF0cml4U2VtYW50aWNLZXlzID0gc2hhZGVyLm1hdHJpeFNlbWFudGljS2V5cztcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1NjZW5lTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBtYXRyaXhTZW1hbnRpY0tleXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWMgPSBtYXRyaXhTZW1hbnRpY0tleXNba107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbWFudGljSW5mbyA9IHNoYWRlci5tYXRyaXhTZW1hbnRpY3Nbc2VtYW50aWNdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXRyaXggPSBtYXRyaWNlc1tzZW1hbnRpY107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbWFudGljSW5mby5pc1RyYW5zcG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4Tm9UcmFuc3Bvc2UgPSBtYXRyaWNlc1tzZW1hbnRpY0luZm8uc2VtYW50aWNOb1RyYW5zcG9zZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdDQudHJhbnNwb3NlKG1hdHJpeCwgbWF0cml4Tm9UcmFuc3Bvc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCBzZW1hbnRpY0luZm8udHlwZSwgc2VtYW50aWNJbmZvLnN5bWJvbCwgbWF0cml4KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHJlbmRlcmFibGUuY3VsbEZhY2UgIT09IGN1bGxGYWNlKSB7XHJcbiAgICAgICAgICAgICAgICBjdWxsRmFjZSA9IHJlbmRlcmFibGUuY3VsbEZhY2U7XHJcbiAgICAgICAgICAgICAgICBfZ2wuY3VsbEZhY2UoY3VsbEZhY2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLmZyb250RmFjZSAhPT0gZnJvbnRGYWNlKSB7XHJcbiAgICAgICAgICAgICAgICBmcm9udEZhY2UgPSByZW5kZXJhYmxlLmZyb250RmFjZTtcclxuICAgICAgICAgICAgICAgIF9nbC5mcm9udEZhY2UoZnJvbnRGYWNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5jdWxsaW5nICE9PSBjdWxsaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBjdWxsaW5nID0gcmVuZGVyYWJsZS5jdWxsaW5nO1xyXG4gICAgICAgICAgICAgICAgY3VsbGluZyA/IF9nbC5lbmFibGUoX2dsLkNVTExfRkFDRSkgOiBfZ2wuZGlzYWJsZShfZ2wuQ1VMTF9GQUNFKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBUT0RPIE5vdCB1cGRhdGUgc2tlbGV0b24gaW4gZWFjaCByZW5kZXJhYmxlLlxyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVTa2VsZXRvbihyZW5kZXJhYmxlLCBwcm9ncmFtLCBtYXRlcmlhbFRha2VzVGV4dHVyZVNsb3QpO1xyXG4gICAgICAgICAgICBpZiAoZHJhd0lEQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudFZBTyA9IHRoaXMuX2JpbmRWQU8odmFvRXh0LCBzaGFkZXIsIGdlb21ldHJ5LCBwcm9ncmFtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJPYmplY3QocmVuZGVyYWJsZSwgY3VycmVudFZBTyk7XHJcblxyXG4gICAgICAgICAgICAvLyBBZnRlciByZW5kZXIgaG9va1xyXG4gICAgICAgICAgICBwYXNzQ29uZmlnLmFmdGVyUmVuZGVyKHRoaXMsIHJlbmRlcmFibGUpO1xyXG4gICAgICAgICAgICByZW5kZXJhYmxlLmFmdGVyUmVuZGVyICYmIHJlbmRlcmFibGUuYWZ0ZXJSZW5kZXIodGhpcyk7XHJcblxyXG4gICAgICAgICAgICBwcmV2UHJvZ3JhbSA9IHByb2dyYW07XHJcbiAgICAgICAgICAgIHByZXZSZW5kZXJhYmxlID0gcmVuZGVyYWJsZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRPRE8gU2VlbXMgbmVlZCB0byBiZSBib3VuZCB0byBudWxsIGltbWVkaWF0ZWx5IGlmIHZhbyBpcyBjaGFuZ2VkP1xyXG4gICAgICAgIGlmICh2YW9FeHQpIHtcclxuICAgICAgICAgICAgdmFvRXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJyZW5kZXJwYXNzJywgdGhpcywgbGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TWF4Sm9pbnROdW1iZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2xpbmZvLmdldE1heEpvaW50TnVtYmVyKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVTa2VsZXRvbjogZnVuY3Rpb24gKG9iamVjdCwgcHJvZ3JhbSwgc2xvdCkge1xyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBza2VsZXRvbiA9IG9iamVjdC5za2VsZXRvbjtcclxuICAgICAgICAvLyBTZXQgcG9zZSBtYXRyaWNlcyBvZiBza2lubmVkIG1lc2hcclxuICAgICAgICBpZiAoc2tlbGV0b24pIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBVcGRhdGUgYmVmb3JlIGN1bGxpbmcuXHJcbiAgICAgICAgICAgIHNrZWxldG9uLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICBpZiAob2JqZWN0LmpvaW50cy5sZW5ndGggPiB0aGlzLl9nbGluZm8uZ2V0TWF4Sm9pbnROdW1iZXIoKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNraW5NYXRyaWNlc1RleHR1cmUgPSBza2VsZXRvbi5nZXRTdWJTa2luTWF0cmljZXNUZXh0dXJlKG9iamVjdC5fX3VpZF9fLCBvYmplY3Quam9pbnRzKTtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0udXNlVGV4dHVyZVNsb3QodGhpcywgc2tpbk1hdHJpY2VzVGV4dHVyZSwgc2xvdCk7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCAnMWknLCAnc2tpbk1hdHJpY2VzVGV4dHVyZScsIHNsb3QpO1xyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFmJywgJ3NraW5NYXRyaWNlc1RleHR1cmVTaXplJywgc2tpbk1hdHJpY2VzVGV4dHVyZS53aWR0aCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2tpbk1hdHJpY2VzQXJyYXkgPSBza2VsZXRvbi5nZXRTdWJTa2luTWF0cmljZXMob2JqZWN0Ll9fdWlkX18sIG9iamVjdC5qb2ludHMpO1xyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdTS0lOX01BVFJJWCcsIHNraW5NYXRyaWNlc0FycmF5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3JlbmRlck9iamVjdDogZnVuY3Rpb24gKHJlbmRlcmFibGUsIHZhbykge1xyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBnZW9tZXRyeSA9IHJlbmRlcmFibGUuZ2VvbWV0cnk7XHJcblxyXG4gICAgICAgIHZhciBnbERyYXdNb2RlID0gcmVuZGVyYWJsZS5tb2RlO1xyXG4gICAgICAgIGlmIChnbERyYXdNb2RlID09IG51bGwpIHtcclxuICAgICAgICAgICAgZ2xEcmF3TW9kZSA9IDB4MDAwNDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGlmIChnbERyYXdNb2RlID09PSBnbGVudW0uTElORVMgfHwgZ2xEcmF3TW9kZSA9PT0gZ2xlbnVtLkxJTkVfU1RSSVAgfHwgZ2xEcmF3TW9kZSA9PT0gZ2xlbnVtLkxJTkVfTE9PUCkge1xyXG4gICAgICAgIC8vICAgICBfZ2wubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKTtcclxuICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgIGlmICh2YW8uaW5kaWNlc0J1ZmZlcikge1xyXG4gICAgICAgICAgICB2YXIgdWludEV4dCA9IHRoaXMuZ2V0R0xFeHRlbnNpb24oJ09FU19lbGVtZW50X2luZGV4X3VpbnQnKTtcclxuICAgICAgICAgICAgdmFyIHVzZVVpbnRFeHQgPSB1aW50RXh0ICYmIChnZW9tZXRyeS5pbmRpY2VzIGluc3RhbmNlb2YgVWludDMyQXJyYXkpO1xyXG4gICAgICAgICAgICB2YXIgaW5kaWNlc1R5cGUgPSB1c2VVaW50RXh0ID8gX2dsLlVOU0lHTkVEX0lOVCA6IF9nbC5VTlNJR05FRF9TSE9SVDtcclxuXHJcbiAgICAgICAgICAgIF9nbC5kcmF3RWxlbWVudHMoZ2xEcmF3TW9kZSwgdmFvLmluZGljZXNCdWZmZXIuY291bnQsIGluZGljZXNUeXBlLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIFVzZSB2ZXJ0ZXggbnVtYmVyIGluIGJ1ZmZlclxyXG4gICAgICAgICAgICAvLyB2ZXJ0ZXhDb3VudCBtYXkgZ2V0IHRoZSB3cm9uZyB2YWx1ZSB3aGVuIGdlb21ldHJ5IGZvcmdldCB0byBtYXJrIGRpcnR5IGFmdGVyIHVwZGF0ZVxyXG4gICAgICAgICAgICBfZ2wuZHJhd0FycmF5cyhnbERyYXdNb2RlLCAwLCBnZW9tZXRyeS52ZXJ0ZXhDb3VudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfYmluZE1hdGVyaWFsOiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHByb2dyYW0sIHByZXZSZW5kZXJhYmxlLCBwcmV2TWF0ZXJpYWwsIHByZXZQcm9ncmFtLCBnZXRVbmlmb3JtVmFsdWUpIHtcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuICAgICAgICAvLyBQRU5ESU5HIFNhbWUgdGV4dHVyZSBpbiBkaWZmZXJlbnQgbWF0ZXJpYWwgdGFrZSBkaWZmZXJlbnQgc2xvdD9cclxuXHJcbiAgICAgICAgLy8gTWF5IHVzZSBzaGFkZXIgb2Ygb3RoZXIgbWF0ZXJpYWwgaWYgc2hhZGVyIGNvZGUgYXJlIHNhbWVcclxuICAgICAgICB2YXIgc2FtZVByb2dyYW0gPSBwcmV2UHJvZ3JhbSA9PT0gcHJvZ3JhbTtcclxuXHJcbiAgICAgICAgdmFyIGN1cnJlbnRUZXh0dXJlU2xvdCA9IHByb2dyYW0uY3VycmVudFRleHR1cmVTbG90KCk7XHJcbiAgICAgICAgdmFyIGVuYWJsZWRVbmlmb3JtcyA9IG1hdGVyaWFsLmdldEVuYWJsZWRVbmlmb3JtcygpO1xyXG4gICAgICAgIHZhciB0ZXh0dXJlVW5pZm9ybXMgPSBtYXRlcmlhbC5nZXRUZXh0dXJlVW5pZm9ybXMoKTtcclxuICAgICAgICB2YXIgcGxhY2Vob2xkZXJUZXh0dXJlID0gdGhpcy5fcGxhY2Vob2xkZXJUZXh0dXJlO1xyXG5cclxuICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IHRleHR1cmVVbmlmb3Jtcy5sZW5ndGg7IHUrKykge1xyXG4gICAgICAgICAgICB2YXIgc3ltYm9sID0gdGV4dHVyZVVuaWZvcm1zW3VdO1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybVZhbHVlID0gZ2V0VW5pZm9ybVZhbHVlKHJlbmRlcmFibGUsIG1hdGVyaWFsLCBzeW1ib2wpO1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybVR5cGUgPSBtYXRlcmlhbC51bmlmb3Jtc1tzeW1ib2xdLnR5cGU7XHJcbiAgICAgICAgICAgIC8vIE5vdCB1c2UgYGluc3RhbmNlb2ZgIHRvIGRldGVybWluZSBpZiBhIHZhbHVlIGlzIHRleHR1cmUgaW4gTWF0ZXJpYWwjYmluZC5cclxuICAgICAgICAgICAgLy8gVXNlIHR5cGUgaW5zdGVhZCwgaW4gc29tZSBjYXNlIHRleHR1cmUgbWF5IGJlIGluIGRpZmZlcmVudCBuYW1lc3BhY2VzLlxyXG4gICAgICAgICAgICAvLyBUT0RPIER1Y2sgdHlwZSB2YWxpZGF0ZS5cclxuICAgICAgICAgICAgaWYgKHVuaWZvcm1UeXBlID09PSAndCcgJiYgdW5pZm9ybVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBSZXNldCBzbG90XHJcbiAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWUuX19zbG90ID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUgPT09ICd0dicpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybVZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1WYWx1ZVtpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWVbaV0uX19zbG90ID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwbGFjZWhvbGRlclRleHR1cmUuX19zbG90ID0gLTE7XHJcblxyXG4gICAgICAgIC8vIFNldCB1bmlmb3Jtc1xyXG4gICAgICAgIGZvciAodmFyIHUgPSAwOyB1IDwgZW5hYmxlZFVuaWZvcm1zLmxlbmd0aDsgdSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBzeW1ib2wgPSBlbmFibGVkVW5pZm9ybXNbdV07XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtID0gbWF0ZXJpYWwudW5pZm9ybXNbc3ltYm9sXTtcclxuICAgICAgICAgICAgdmFyIHVuaWZvcm1WYWx1ZSA9IGdldFVuaWZvcm1WYWx1ZShyZW5kZXJhYmxlLCBtYXRlcmlhbCwgc3ltYm9sKTtcclxuICAgICAgICAgICAgdmFyIHVuaWZvcm1UeXBlID0gdW5pZm9ybS50eXBlO1xyXG4gICAgICAgICAgICB2YXIgaXNUZXh0dXJlID0gdW5pZm9ybVR5cGUgPT09ICd0JztcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1RleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdW5pZm9ybVZhbHVlIHx8ICF1bmlmb3JtVmFsdWUuaXNSZW5kZXJhYmxlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWUgPSBwbGFjZWhvbGRlclRleHR1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgICAgICAvLyBXaGVuIGJpbmRpbmcgdHdvIG1hdGVyaWFscyB3aXRoIHRoZSBzYW1lIHNoYWRlclxyXG4gICAgICAgICAgICAvLyBNYW55IHVuaWZvcm1zIHdpbGwgYmUgYmUgc2V0IHR3aWNlIGV2ZW4gaWYgdGhleSBoYXZlIHRoZSBzYW1lIHZhbHVlXHJcbiAgICAgICAgICAgIC8vIFNvIGFkZCBhIGV2YWx1YXRpb24gdG8gc2VlIGlmIHRoZSB1bmlmb3JtIGlzIHJlYWxseSBuZWVkZWQgdG8gYmUgc2V0XHJcbiAgICAgICAgICAgIGlmIChwcmV2TWF0ZXJpYWwgJiYgc2FtZVByb2dyYW0pIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcmV2VW5pZm9ybVZhbHVlID0gZ2V0VW5pZm9ybVZhbHVlKHByZXZSZW5kZXJhYmxlLCBwcmV2TWF0ZXJpYWwsIHN5bWJvbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2VW5pZm9ybVZhbHVlIHx8ICFwcmV2VW5pZm9ybVZhbHVlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZVbmlmb3JtVmFsdWUgPSBwbGFjZWhvbGRlclRleHR1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChwcmV2VW5pZm9ybVZhbHVlID09PSB1bmlmb3JtVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0aWxsIHRha2UgdGhlIHNsb3QgdG8gbWFrZSBzdXJlIHNhbWUgdGV4dHVyZSBpbiBkaWZmZXJlbnQgbWF0ZXJpYWxzIGhhdmUgc2FtZSBzbG90LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnRha2VDdXJyZW50VGV4dHVyZVNsb3QodGhpcywgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVuaWZvcm1UeXBlID09PSAndHYnICYmIHVuaWZvcm1WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1WYWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS50YWtlQ3VycmVudFRleHR1cmVTbG90KHRoaXMsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodW5pZm9ybVZhbHVlID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzVGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1WYWx1ZS5fX3Nsb3QgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNsb3QgPSBwcm9ncmFtLmN1cnJlbnRUZXh0dXJlU2xvdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCAnMWknLCBzeW1ib2wsIHNsb3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHsgLy8gVGV4dHVyZSB1bmlmb3JtIGlzIGVuYWJsZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS50YWtlQ3VycmVudFRleHR1cmVTbG90KHRoaXMsIHVuaWZvcm1WYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1WYWx1ZS5fX3Nsb3QgPSBzbG90O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIHVuaWZvcm0gdXNlIHNhbWUgdGV4dHVyZS4uXHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCAnMWknLCBzeW1ib2wsIHVuaWZvcm1WYWx1ZS5fX3Nsb3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodW5pZm9ybVZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1WYWx1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIFRleHR1cmUgQXJyYXlcclxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVHlwZSA9PT0gJ3R2Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvZ3JhbS5oYXNVbmlmb3JtKHN5bWJvbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJyID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmlmb3JtVmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtVmFsdWVbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS5fX3Nsb3QgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2xvdCA9IHByb2dyYW0uY3VycmVudFRleHR1cmVTbG90KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChzbG90KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdCh0aGlzLCB0ZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuX19zbG90ID0gc2xvdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRleHR1cmUuX19zbG90KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFpdicsIHN5bWJvbCwgYXJyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShfZ2wsIHVuaWZvcm0udHlwZSwgc3ltYm9sLCB1bmlmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCB1bmlmb3JtLnR5cGUsIHN5bWJvbCwgdW5pZm9ybVZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbmV3U2xvdCA9IHByb2dyYW0uY3VycmVudFRleHR1cmVTbG90KCk7XHJcbiAgICAgICAgLy8gVGV4dHVyZSBzbG90IG1heWJlIHVzZWQgb3V0IG9mIG1hdGVyaWFsLlxyXG4gICAgICAgIHByb2dyYW0ucmVzZXRUZXh0dXJlU2xvdChjdXJyZW50VGV4dHVyZVNsb3QpO1xyXG4gICAgICAgIHJldHVybiBuZXdTbG90O1xyXG4gICAgfSxcclxuXHJcbiAgICBfYmluZFZBTzogZnVuY3Rpb24gKHZhb0V4dCwgc2hhZGVyLCBnZW9tZXRyeSwgcHJvZ3JhbSkge1xyXG4gICAgICAgIHZhciBpc1N0YXRpYyA9ICFnZW9tZXRyeS5keW5hbWljO1xyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICB2YXIgdmFvSWQgPSB0aGlzLl9fdWlkX18gKyAnLScgKyBwcm9ncmFtLl9fdWlkX187XHJcbiAgICAgICAgdmFyIHZhbyA9IGdlb21ldHJ5Ll9fdmFvQ2FjaGVbdmFvSWRdO1xyXG4gICAgICAgIGlmICghdmFvKSB7XHJcbiAgICAgICAgICAgIHZhciBjaHVua3MgPSBnZW9tZXRyeS5nZXRCdWZmZXJDaHVua3ModGhpcyk7XHJcbiAgICAgICAgICAgIGlmICghY2h1bmtzIHx8ICFjaHVua3MubGVuZ3RoKSB7ICAvLyBFbXB0eSBtZXNoXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNodW5rID0gY2h1bmtzWzBdO1xyXG4gICAgICAgICAgICB2YXIgYXR0cmlidXRlQnVmZmVycyA9IGNodW5rLmF0dHJpYnV0ZUJ1ZmZlcnM7XHJcbiAgICAgICAgICAgIHZhciBpbmRpY2VzQnVmZmVyID0gY2h1bmsuaW5kaWNlc0J1ZmZlcjtcclxuXHJcbiAgICAgICAgICAgIHZhciBhdmFpbGFibGVBdHRyaWJ1dGVzID0gW107XHJcbiAgICAgICAgICAgIHZhciBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUJ1ZmZlckluZm8gPSBhdHRyaWJ1dGVCdWZmZXJzW2FdO1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWMgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLnNlbWFudGljO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN5bWJvbDtcclxuICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpY0luZm8gPSBzaGFkZXIuYXR0cmlidXRlU2VtYW50aWNzW3NlbWFudGljXTtcclxuICAgICAgICAgICAgICAgICAgICBzeW1ib2wgPSBzZW1hbnRpY0luZm8gJiYgc2VtYW50aWNJbmZvLnN5bWJvbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbCA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc3ltYm9sICYmIHByb2dyYW0uYXR0cmlidXRlc1tzeW1ib2xdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlQXR0cmlidXRlcy5wdXNoKGF0dHJpYnV0ZUJ1ZmZlckluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMucHVzaChzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YW8gPSBuZXcgVmVydGV4QXJyYXlPYmplY3QoXHJcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlQXR0cmlidXRlU3ltYm9scyxcclxuICAgICAgICAgICAgICAgIGluZGljZXNCdWZmZXJcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1N0YXRpYykge1xyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkuX192YW9DYWNoZVt2YW9JZF0gPSB2YW87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBuZWVkc0JpbmRBdHRyaWJ1dGVzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIHZlcnRleCBvYmplY3QgYXJyYXkgY29zdCBhIGxvdFxyXG4gICAgICAgIC8vIFNvIHdlIGRvbid0IHVzZSBpdCBvbiB0aGUgZHluYW1pYyBvYmplY3RcclxuICAgICAgICBpZiAodmFvRXh0ICYmIGlzU3RhdGljKSB7XHJcbiAgICAgICAgICAgIC8vIFVzZSB2ZXJ0ZXggYXJyYXkgb2JqZWN0XHJcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9ibG9nLnRvamljb2RlLmNvbS8yMDEyLzEwL29lc3ZlcnRleGFycmF5b2JqZWN0LWV4dGVuc2lvbi5odG1sXHJcbiAgICAgICAgICAgIGlmICh2YW8udmFvID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHZhby52YW8gPSB2YW9FeHQuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5lZWRzQmluZEF0dHJpYnV0ZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YW9FeHQuYmluZFZlcnRleEFycmF5T0VTKHZhby52YW8pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGF2YWlsYWJsZUF0dHJpYnV0ZXMgPSB2YW8uYXZhaWxhYmxlQXR0cmlidXRlcztcclxuICAgICAgICB2YXIgaW5kaWNlc0J1ZmZlciA9IHZhby5pbmRpY2VzQnVmZmVyO1xyXG5cclxuICAgICAgICBpZiAobmVlZHNCaW5kQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICB2YXIgbG9jYXRpb25MaXN0ID0gcHJvZ3JhbS5lbmFibGVBdHRyaWJ1dGVzKHRoaXMsIHZhby5hdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzLCAodmFvRXh0ICYmIGlzU3RhdGljICYmIHZhbykpO1xyXG4gICAgICAgICAgICAvLyBTZXR0aW5nIGF0dHJpYnV0ZXM7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXZhaWxhYmxlQXR0cmlidXRlcy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gbG9jYXRpb25MaXN0W2FdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUJ1ZmZlckluZm8gPSBhdmFpbGFibGVBdHRyaWJ1dGVzW2FdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGF0dHJpYnV0ZUJ1ZmZlckluZm8uYnVmZmVyO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNpemUgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLnNpemU7XHJcbiAgICAgICAgICAgICAgICB2YXIgZ2xUeXBlID0gYXR0cmlidXRlQnVmZmVyVHlwZU1hcFthdHRyaWJ1dGVCdWZmZXJJbmZvLnR5cGVdIHx8IF9nbC5GTE9BVDtcclxuXHJcbiAgICAgICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlcihfZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgX2dsLnZlcnRleEF0dHJpYlBvaW50ZXIobG9jYXRpb24sIHNpemUsIGdsVHlwZSwgZmFsc2UsIDAsIDApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZ2VvbWV0cnkuaXNVc2VJbmRpY2VzKCkpIHtcclxuICAgICAgICAgICAgICAgIF9nbC5iaW5kQnVmZmVyKF9nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgaW5kaWNlc0J1ZmZlci5idWZmZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmFvO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW5kZXJQcmVaOiBmdW5jdGlvbiAobGlzdCwgc2NlbmUsIGNhbWVyYSkge1xyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBwcmVaUGFzc01hdGVyaWFsID0gdGhpcy5fcHJlek1hdGVyaWFsIHx8IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LnByZXoudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucHJlei5mcmFnbWVudCcpKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX3ByZXpNYXRlcmlhbCA9IHByZVpQYXNzTWF0ZXJpYWw7XHJcblxyXG4gICAgICAgIF9nbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgIF9nbC5kZXB0aE1hc2sodHJ1ZSk7XHJcblxyXG4gICAgICAgIC8vIFN0YXR1c1xyXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyhsaXN0LCBjYW1lcmEsIHtcclxuICAgICAgICAgICAgaWZSZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIXJlbmRlcmFibGUuaWdub3JlUHJlWjtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBwcmV2UmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdEEgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdEIgPSBwcmV2UmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtYXRBLmdldCgnZGlmZnVzZU1hcCcpICE9PSBtYXRCLmdldCgnZGlmZnVzZU1hcCcpXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgKG1hdEEuZ2V0KCdhbHBoYUN1dG9mZicpIHx8IDApICE9PSAobWF0Qi5nZXQoJ2FscGhhQ3V0b2ZmJykgfHwgMCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGdldFVuaWZvcm06IGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBkZXB0aE1hdGVyaWFsLCBzeW1ib2wpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzeW1ib2wgPT09ICdhbHBoYU1hcCcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ2RpZmZ1c2VNYXAnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ2FscGhhQ3V0b2ZmJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLm1hdGVyaWFsLmlzRGVmaW5lZCgnZnJhZ21lbnQnLCAnQUxQSEFfVEVTVCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdkaWZmdXNlTWFwJylcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFscGhhQ3V0b2ZmID0gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ2FscGhhQ3V0b2ZmJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbHBoYUN1dG9mZiB8fCAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3V2UmVwZWF0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgndXZSZXBlYXQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3V2T2Zmc2V0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgndXZPZmZzZXQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXB0aE1hdGVyaWFsLmdldChzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZVpQYXNzTWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNvcnQ6IHRoaXMub3BhcXVlU29ydENvbXBhcmVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgX2dsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgZ2l2ZW4gc2NlbmUsIGluY2x1ZGluZyBhbGwgZ2VvbWV0cmlzLCB0ZXh0dXJlcyBhbmQgc2hhZGVycyBpbiB0aGUgc2NlbmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZVNjZW5lOiBmdW5jdGlvbihzY2VuZSkge1xyXG4gICAgICAgIHRoaXMuZGlzcG9zZU5vZGUoc2NlbmUsIHRydWUsIHRydWUpO1xyXG4gICAgICAgIHNjZW5lLmRpc3Bvc2UoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdpdmVuIG5vZGUsIGluY2x1ZGluZyBhbGwgZ2VvbWV0cmllcywgdGV4dHVyZXMgYW5kIHNoYWRlcnMgYXR0YWNoZWQgb24gaXQgb3IgaXRzIGRlc2NlbmRhbnRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBub2RlXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkaXNwb3NlR2VvbWV0cnk9ZmFsc2VdIElmIGRpc3Bvc2UgdGhlIGdlb21ldHJpZXMgdXNlZCBpbiB0aGUgZGVzY2VuZGFudCBtZXNoXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkaXNwb3NlVGV4dHVyZT1mYWxzZV0gSWYgZGlzcG9zZSB0aGUgdGV4dHVyZXMgdXNlZCBpbiB0aGUgZGVzY2VuZGFudCBtZXNoXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VOb2RlOiBmdW5jdGlvbihyb290LCBkaXNwb3NlR2VvbWV0cnksIGRpc3Bvc2VUZXh0dXJlKSB7XHJcbiAgICAgICAgLy8gRGV0dGFjaGVkIGZyb20gcGFyZW50XHJcbiAgICAgICAgaWYgKHJvb3QuZ2V0UGFyZW50KCkpIHtcclxuICAgICAgICAgICAgcm9vdC5nZXRQYXJlbnQoKS5yZW1vdmUocm9vdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBkaXNwb3NlZE1hcCA9IHt9O1xyXG4gICAgICAgIHJvb3QudHJhdmVyc2UoZnVuY3Rpb24obm9kZSkge1xyXG4gICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBub2RlLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICBpZiAobm9kZS5nZW9tZXRyeSAmJiBkaXNwb3NlR2VvbWV0cnkpIHtcclxuICAgICAgICAgICAgICAgIG5vZGUuZ2VvbWV0cnkuZGlzcG9zZSh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGlzcG9zZVRleHR1cmUgJiYgbWF0ZXJpYWwgJiYgIWRpc3Bvc2VkTWFwW21hdGVyaWFsLl9fdWlkX19dKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZVVuaWZvcm1zID0gbWF0ZXJpYWwuZ2V0VGV4dHVyZVVuaWZvcm1zKCk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IHRleHR1cmVVbmlmb3Jtcy5sZW5ndGg7IHUrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtTmFtZSA9IHRleHR1cmVVbmlmb3Jtc1t1XTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gbWF0ZXJpYWwudW5pZm9ybXNbdW5pZm9ybU5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtVHlwZSA9IG1hdGVyaWFsLnVuaWZvcm1zW3VuaWZvcm1OYW1lXS50eXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodW5pZm9ybVR5cGUgPT09ICd0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWwuZGlzcG9zZSAmJiB2YWwuZGlzcG9zZSh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUgPT09ICd0dicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB2YWwubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxba10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxba10uZGlzcG9zZSAmJiB2YWxba10uZGlzcG9zZSh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRpc3Bvc2VkTWFwW21hdGVyaWFsLl9fdWlkX19dID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBQYXJ0aWNsZSBzeXN0ZW0gYW5kIEFtYmllbnRDdWJlbWFwIGxpZ2h0IG5lZWQgdG8gZGlzcG9zZVxyXG4gICAgICAgICAgICBpZiAobm9kZS5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLmRpc3Bvc2UodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdpdmVuIGdlb21ldHJ5XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuR2VvbWV0cnl9IGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VHZW9tZXRyeTogZnVuY3Rpb24oZ2VvbWV0cnkpIHtcclxuICAgICAgICBnZW9tZXRyeS5kaXNwb3NlKHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgZ2l2ZW4gdGV4dHVyZVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlRleHR1cmV9IHRleHR1cmVcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZVRleHR1cmU6IGZ1bmN0aW9uKHRleHR1cmUpIHtcclxuICAgICAgICB0ZXh0dXJlLmRpc3Bvc2UodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBnaXZlbiBmcmFtZSBidWZmZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5GcmFtZUJ1ZmZlcn0gZnJhbWVCdWZmZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZUZyYW1lQnVmZmVyOiBmdW5jdGlvbihmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgIGZyYW1lQnVmZmVyLmRpc3Bvc2UodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAoKSB7fSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgc2NyZWVuIGNvb3JkcyB0byBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcyhOREMpXHJcbiAgICAgKiBTY3JlZW4gY29vcmRzIGNhbiBnZXQgZnJvbSBtb3VzZSBldmVudCwgaXQgaXMgcG9zaXRpb25lZCByZWxhdGl2ZSB0byBjYW52YXMgZWxlbWVudFxyXG4gICAgICogTkRDIGNhbiBiZSB1c2VkIGluIHJheSBjYXN0aW5nIHdpdGggQ2FtZXJhLnByb3RvdHlwZS5jYXN0UmF5IG1ldGhvZHNcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgICAgIHhcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gICAgICAgeVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBbb3V0XVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzY3JlZW5Ub05EQzogZnVuY3Rpb24oeCwgeSwgb3V0KSB7XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSW52ZXJ0IHk7XHJcbiAgICAgICAgeSA9IHRoaXMuX2hlaWdodCAtIHk7XHJcblxyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7XHJcbiAgICAgICAgdmFyIGFyciA9IG91dC5hcnJheTtcclxuICAgICAgICBhcnJbMF0gPSAoeCAtIHZpZXdwb3J0LngpIC8gdmlld3BvcnQud2lkdGg7XHJcbiAgICAgICAgYXJyWzBdID0gYXJyWzBdICogMiAtIDE7XHJcbiAgICAgICAgYXJyWzFdID0gKHkgLSB2aWV3cG9ydC55KSAvIHZpZXdwb3J0LmhlaWdodDtcclxuICAgICAgICBhcnJbMV0gPSBhcnJbMV0gKiAyIC0gMTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH1cclxufSk7XHJcblxyXG4vKipcclxuICogT3BhcXVlIHJlbmRlcmFibGVzIGNvbXBhcmUgZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5SZW5kZXJhYmxlfSB4XHJcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyYWJsZX0geVxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKiBAc3RhdGljXHJcbiAqL1xyXG5SZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZSA9IFJlbmRlcmVyLnByb3RvdHlwZS5vcGFxdWVTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uKHgsIHkpIHtcclxuICAgIC8vIFByaW9yaXR5IHJlbmRlck9yZGVyIC0+IHByb2dyYW0gLT4gbWF0ZXJpYWwgLT4gZ2VvbWV0cnlcclxuICAgIGlmICh4LnJlbmRlck9yZGVyID09PSB5LnJlbmRlck9yZGVyKSB7XHJcbiAgICAgICAgaWYgKHguX19wcm9ncmFtID09PSB5Ll9fcHJvZ3JhbSkge1xyXG4gICAgICAgICAgICBpZiAoeC5tYXRlcmlhbCA9PT0geS5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHguZ2VvbWV0cnkuX191aWRfXyAtIHkuZ2VvbWV0cnkuX191aWRfXztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geC5tYXRlcmlhbC5fX3VpZF9fIC0geS5tYXRlcmlhbC5fX3VpZF9fO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoeC5fX3Byb2dyYW0gJiYgeS5fX3Byb2dyYW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHguX19wcm9ncmFtLl9fdWlkX18gLSB5Ll9fcHJvZ3JhbS5fX3VpZF9fO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHJldHVybiB4LnJlbmRlck9yZGVyIC0geS5yZW5kZXJPcmRlcjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc3BhcmVudCByZW5kZXJhYmxlcyBjb21wYXJlIGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyYWJsZX0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmFibGV9IGJcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICogQHN0YXRpY1xyXG4gKi9cclxuUmVuZGVyZXIudHJhbnNwYXJlbnRTb3J0Q29tcGFyZSA9IFJlbmRlcmVyLnByb3RvdHlwZS50cmFuc3BhcmVudFNvcnRDb21wYXJlID0gZnVuY3Rpb24oeCwgeSkge1xyXG4gICAgLy8gUHJpb3JpdHkgcmVuZGVyT3JkZXIgLT4gZGVwdGggLT4gcHJvZ3JhbSAtPiBtYXRlcmlhbCAtPiBnZW9tZXRyeVxyXG5cclxuICAgIGlmICh4LnJlbmRlck9yZGVyID09PSB5LnJlbmRlck9yZGVyKSB7XHJcbiAgICAgICAgaWYgKHguX19kZXB0aCA9PT0geS5fX2RlcHRoKSB7XHJcbiAgICAgICAgICAgIGlmICh4Ll9fcHJvZ3JhbSA9PT0geS5fX3Byb2dyYW0pIHtcclxuICAgICAgICAgICAgICAgIGlmICh4Lm1hdGVyaWFsID09PSB5Lm1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguZ2VvbWV0cnkuX191aWRfXyAtIHkuZ2VvbWV0cnkuX191aWRfXztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB4Lm1hdGVyaWFsLl9fdWlkX18gLSB5Lm1hdGVyaWFsLl9fdWlkX187XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHguX19wcm9ncmFtICAmJiB5Ll9fcHJvZ3JhbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHguX19wcm9ncmFtLl9fdWlkX18gLSB5Ll9fcHJvZ3JhbS5fX3VpZF9fO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBEZXB0aCBpcyBuZWdhdGl2ZVxyXG4gICAgICAgIC8vIFNvIGZhcnRoZXIgb2JqZWN0IGhhcyBzbWFsbGVyIGRlcHRoIHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHguX19kZXB0aCAtIHkuX19kZXB0aDtcclxuICAgIH1cclxuICAgIHJldHVybiB4LnJlbmRlck9yZGVyIC0geS5yZW5kZXJPcmRlcjtcclxufTtcclxuXHJcbi8vIFRlbXBvcmFyeSB2YXJpYWJsZXNcclxudmFyIG1hdHJpY2VzID0ge1xyXG4gICAgSURFTlRJVFk6IG1hdDRDcmVhdGUoKSxcclxuXHJcbiAgICBXT1JMRDogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFVzogbWF0NENyZWF0ZSgpLFxyXG4gICAgUFJPSkVDVElPTjogbWF0NENyZWF0ZSgpLFxyXG4gICAgV09STERWSUVXOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBWSUVXUFJPSkVDVElPTjogbWF0NENyZWF0ZSgpLFxyXG4gICAgV09STERWSUVXUFJPSkVDVElPTjogbWF0NENyZWF0ZSgpLFxyXG5cclxuICAgIFdPUkxESU5WRVJTRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV0lOVkVSU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFBST0pFQ1RJT05JTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdJTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBWSUVXUFJPSkVDVElPTklOVkVSU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXHJcblxyXG4gICAgV09STERUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFZJRVdUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFBST0pFQ1RJT05UUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFV1RSQU5TUE9TRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV1BST0pFQ1RJT05UUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFV1BST0pFQ1RJT05UUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxESU5WRVJTRVRSQU5TUE9TRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV0lOVkVSU0VUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFBST0pFQ1RJT05JTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdJTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBWSUVXUFJPSkVDVElPTklOVkVSU0VUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKClcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LlJlbmRlcmVyLkNPTE9SX0JVRkZFUl9CSVRcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmVyLkNPTE9SX0JVRkZFUl9CSVQgPSBnbGVudW0uQ09MT1JfQlVGRkVSX0JJVDtcclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuUmVuZGVyZXIuREVQVEhfQlVGRkVSX0JJVFxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyZXIuREVQVEhfQlVGRkVSX0JJVCA9IGdsZW51bS5ERVBUSF9CVUZGRVJfQklUO1xyXG4vKipcclxuICogQG5hbWUgY2xheS5SZW5kZXJlci5TVEVOQ0lMX0JVRkZFUl9CSVRcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmVyLlNURU5DSUxfQlVGRkVSX0JJVCA9IGdsZW51bS5TVEVOQ0lMX0JVRkZFUl9CSVQ7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBSZW5kZXJlcjtcclxuIiwiaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlZlY3RvcjNcclxuICogQHBhcmFtIHtudW1iZXJ9IHhcclxuICogQHBhcmFtIHtudW1iZXJ9IHlcclxuICogQHBhcmFtIHtudW1iZXJ9IHpcclxuICovXHJcbnZhciBWZWN0b3IzID0gZnVuY3Rpb24oeCwgeSwgeikge1xyXG5cclxuICAgIHggPSB4IHx8IDA7XHJcbiAgICB5ID0geSB8fCAwO1xyXG4gICAgeiA9IHogfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JhZ2Ugb2YgVmVjdG9yMywgcmVhZCBhbmQgd3JpdGUgb2YgeCwgeSwgeiB3aWxsIGNoYW5nZSB0aGUgdmFsdWVzIGluIGFycmF5XHJcbiAgICAgKiBBbGwgbWV0aG9kcyBhbHNvIG9wZXJhdGUgb24gdGhlIGFycmF5IGluc3RlYWQgb2YgeCwgeSwgeiBjb21wb25lbnRzXHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjMjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSB2ZWMzLmZyb21WYWx1ZXMoeCwgeSwgeik7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXJ0eSBmbGFnIGlzIHVzZWQgYnkgdGhlIE5vZGUgdG8gZGV0ZXJtaW5lXHJcbiAgICAgKiBpZiB0aGUgbWF0cml4IGlzIHVwZGF0ZWQgdG8gbGF0ZXN0XHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yMyNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuVmVjdG9yMy5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IFZlY3RvcjMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYiB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCwgeSBhbmQgeiBjb21wb25lbnRzXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB6XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24gKHgsIHksIHopIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0geDtcclxuICAgICAgICB0aGlzLmFycmF5WzFdID0geTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gejtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSBhcnJbMF07XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IGFyclsxXTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gYXJyWzJdO1xyXG5cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgVmVjdG9yM1xyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yMyh0aGlzLngsIHRoaXMueSwgdGhpcy56KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGZyb20gYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcm9zcyBwcm9kdWN0IG9mIHNlbGYgYW5kIGIsIHdyaXR0ZW4gdG8gYSBWZWN0b3IzIG91dFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgY3Jvc3M6IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgdmVjMy5jcm9zcyh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIGRpc3RhbmNlXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGlzdDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5kaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLmRpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBkaXZpZGVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBkaXY6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5kaXYodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpdmlkZSBzZWxmIGJ5IGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBkaXZpZGU6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5kaXZpZGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMuZG90KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIG9mIGxlbmd0aFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBsZW46IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5sZW4odGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMubGVuZ3RoKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogTGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBhIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgdFxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBsZXJwOiBmdW5jdGlvbiAoYSwgYiwgdCkge1xyXG4gICAgICAgIHZlYzMubGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWluaW11bSBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgbWluOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMubWluKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXhpbXVtIG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBtYXg6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5tYXgodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICB2ZWMzLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXV0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5tdWx0aXBseSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTmVnYXRlIHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgbmVnYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmVjMy5uZWdhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbGl6ZSBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZlYzMubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSByYW5kb20geCwgeSwgeiBjb21wb25lbnRzIHdpdGggYSBnaXZlbiBzY2FsZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICByYW5kb206IGZ1bmN0aW9uIChzY2FsZSkge1xyXG4gICAgICAgIHZlYzMucmFuZG9tKHRoaXMuYXJyYXksIHNjYWxlKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgc2VsZlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgc2NhbGU6IGZ1bmN0aW9uIChzKSB7XHJcbiAgICAgICAgdmVjMy5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgYiBhbmQgYWRkIHRvIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgc2NhbGVBbmRBZGQ6IGZ1bmN0aW9uIChiLCBzKSB7XHJcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckRpc3Q6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMuc3FyRGlzdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxdWFyZWREaXN0YW5jZTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5zcXVhcmVkRGlzdGFuY2UodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWRMZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3FyTGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMuc3FyTGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLnNxdWFyZWRMZW5ndGgodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHN1YnRyYWN0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgc3ViOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuc3ViKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdWJ0cmFjdCBiIGZyb20gc2VsZlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHN1YnRyYWN0OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuc3VidHJhY3QodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgzIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQzOiBmdW5jdGlvbiAobSkge1xyXG4gICAgICAgIHZlYzMudHJhbnNmb3JtTWF0Myh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNmb3JtIHNlbGYgd2l0aCBhIE1hdHJpeDQgbVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRyYW5zZm9ybU1hdDQ6IGZ1bmN0aW9uIChtKSB7XHJcbiAgICAgICAgdmVjMy50cmFuc2Zvcm1NYXQ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBRdWF0ZXJuaW9uIHFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1RdWF0OiBmdW5jdGlvbiAocSkge1xyXG4gICAgICAgIHZlYzMudHJhbnNmb3JtUXVhdCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBxLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhc25mb3JtIHNlbGYgaW50byBwcm9qZWN0aW9uIHNwYWNlIHdpdGggbVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGFwcGx5UHJvamVjdGlvbjogZnVuY3Rpb24gKG0pIHtcclxuICAgICAgICB2YXIgdiA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgbSA9IG0uYXJyYXk7XHJcblxyXG4gICAgICAgIC8vIFBlcnNwZWN0aXZlIHByb2plY3Rpb25cclxuICAgICAgICBpZiAobVsxNV0gPT09IDApIHtcclxuICAgICAgICAgICAgdmFyIHcgPSAtMSAvIHZbMl07XHJcbiAgICAgICAgICAgIHZbMF0gPSBtWzBdICogdlswXSAqIHc7XHJcbiAgICAgICAgICAgIHZbMV0gPSBtWzVdICogdlsxXSAqIHc7XHJcbiAgICAgICAgICAgIHZbMl0gPSAobVsxMF0gKiB2WzJdICsgbVsxNF0pICogdztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZbMF0gPSBtWzBdICogdlswXSArIG1bMTJdO1xyXG4gICAgICAgICAgICB2WzFdID0gbVs1XSAqIHZbMV0gKyBtWzEzXTtcclxuICAgICAgICAgICAgdlsyXSA9IG1bMTBdICogdlsyXSArIG1bMTRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICBldWxlckZyb21RdWF0OiBmdW5jdGlvbihxLCBvcmRlcikge1xyXG4gICAgICAgIFZlY3RvcjMuZXVsZXJGcm9tUXVhdCh0aGlzLCBxLCBvcmRlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIGV1bGVyRnJvbU1hdDM6IGZ1bmN0aW9uIChtLCBvcmRlcikge1xyXG4gICAgICAgIFZlY3RvcjMuZXVsZXJGcm9tTWF0Myh0aGlzLCBtLCBvcmRlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xyXG4vLyBHZXR0ZXIgYW5kIFNldHRlclxyXG5pZiAoZGVmaW5lUHJvcGVydHkpIHtcclxuXHJcbiAgICB2YXIgcHJvdG8gPSBWZWN0b3IzLnByb3RvdHlwZTtcclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgeFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzBdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVswXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneScsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMV07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzFdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHpcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd6Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVsyXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMl0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5cclxuLy8gU3VwcGx5IG1ldGhvZHMgdGhhdCBhcmUgbm90IGluIHBsYWNlXHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLmFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5hZGQob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB4XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHlcclxuICogQHBhcmFtICB7bnVtYmVyfSAgelxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnNldCA9IGZ1bmN0aW9uKG91dCwgeCwgeSwgeikge1xyXG4gICAgdmVjMy5zZXQob3V0LmFycmF5LCB4LCB5LCB6KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLmNvcHkgPSBmdW5jdGlvbihvdXQsIGIpIHtcclxuICAgIHZlYzMuY29weShvdXQuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5jcm9zcyA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5jcm9zcyhvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5kaXN0ID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgcmV0dXJuIHZlYzMuZGlzdGFuY2UoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5kaXN0YW5jZSA9IFZlY3RvcjMuZGlzdDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMuZGl2ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMzLmRpdmlkZShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMuZGl2aWRlID0gVmVjdG9yMy5kaXY7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IzLmRvdCA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHJldHVybiB2ZWMzLmRvdChhLmFycmF5LCBiLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5sZW4gPSBmdW5jdGlvbihiKSB7XHJcbiAgICByZXR1cm4gdmVjMy5sZW5ndGgoYi5hcnJheSk7XHJcbn07XHJcblxyXG4vLyBWZWN0b3IzLmxlbmd0aCA9IFZlY3RvcjMubGVuO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgdFxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLmxlcnAgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHQpIHtcclxuICAgIHZlYzMubGVycChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5taW4ob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMzLm1heChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5tdWx0aXBseShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5tdWx0aXBseSA9IFZlY3RvcjMubXVsO1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMubmVnYXRlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2ZWMzLm5lZ2F0ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2ZWMzLm5vcm1hbGl6ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5yYW5kb20gPSBmdW5jdGlvbihvdXQsIHNjYWxlKSB7XHJcbiAgICB2ZWMzLnJhbmRvbShvdXQuYXJyYXksIHNjYWxlKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBzY2FsZSkge1xyXG4gICAgdmVjMy5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHNjYWxlKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjMuc3FyRGlzdCA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHJldHVybiB2ZWMzLnNxckRpc3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IzLnNxdWFyZWREaXN0YW5jZSA9IFZlY3RvcjMuc3FyRGlzdDtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IzLnNxckxlbiA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHJldHVybiB2ZWMzLnNxckxlbihhLmFycmF5KTtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5zcXVhcmVkTGVuZ3RoID0gVmVjdG9yMy5zcXJMZW47XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnN1YiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5zdWJ0cmFjdChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5zdWJ0cmFjdCA9IFZlY3RvcjMuc3ViO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtNYXRyaXgzfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMudHJhbnNmb3JtTWF0MyA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMy50cmFuc2Zvcm1NYXQzKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnRyYW5zZm9ybU1hdDQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZlYzMudHJhbnNmb3JtTWF0NChvdXQuYXJyYXksIGEuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnRyYW5zZm9ybVF1YXQgPSBmdW5jdGlvbihvdXQsIGEsIHEpIHtcclxuICAgIHZlYzMudHJhbnNmb3JtUXVhdChvdXQuYXJyYXksIGEuYXJyYXksIHEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gY2xhbXAodmFsLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIHZhbCA8IG1pbiA/IG1pbiA6ICh2YWwgPiBtYXggPyBtYXggOiB2YWwpO1xyXG59XHJcbnZhciBhdGFuMiA9IE1hdGguYXRhbjI7XHJcbnZhciBhc2luID0gTWF0aC5hc2luO1xyXG52YXIgYWJzID0gTWF0aC5hYnM7XHJcbi8qKlxyXG4gKiBDb252ZXJ0IHF1YXRlcm5pb24gdG8gZXVsZXIgYW5nbGVcclxuICogUXVhdGVybmlvbiBtdXN0IGJlIG5vcm1hbGl6ZWRcclxuICogRnJvbSB0aHJlZS5qc1xyXG4gKi9cclxuVmVjdG9yMy5ldWxlckZyb21RdWF0ID0gZnVuY3Rpb24gKG91dCwgcSwgb3JkZXIpIHtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcSA9IHEuYXJyYXk7XHJcblxyXG4gICAgdmFyIHRhcmdldCA9IG91dC5hcnJheTtcclxuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXTtcclxuICAgIHZhciB4MiA9IHggKiB4O1xyXG4gICAgdmFyIHkyID0geSAqIHk7XHJcbiAgICB2YXIgejIgPSB6ICogejtcclxuICAgIHZhciB3MiA9IHcgKiB3O1xyXG5cclxuICAgIHZhciBvcmRlciA9IChvcmRlciB8fCAnWFlaJykudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICBzd2l0Y2ggKG9yZGVyKSB7XHJcbiAgICAgICAgY2FzZSAnWFlaJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoMiAqICh4ICogdyAtIHkgKiB6KSwgKHcyIC0geDIgLSB5MiArIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGFzaW4oY2xhbXAoMiAqICh4ICogeiArIHkgKiB3KSwgLSAxLCAxKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKDIgKiAoeiAqIHcgLSB4ICogeSksICh3MiArIHgyIC0geTIgLSB6MikpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWFonOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhc2luKGNsYW1wKDIgKiAoeCAqIHcgLSB5ICogeiksIC0gMSwgMSkpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMigyICogKHggKiB6ICsgeSAqIHcpLCAodzIgLSB4MiAtIHkyICsgejIpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIoMiAqICh4ICogeSArIHogKiB3KSwgKHcyIC0geDIgKyB5MiAtIHoyKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1pYWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGFzaW4oY2xhbXAoMiAqICh4ICogdyArIHkgKiB6KSwgLSAxLCAxKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKDIgKiAoeSAqIHcgLSB6ICogeCksICh3MiAtIHgyIC0geTIgKyB6MikpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigyICogKHogKiB3IC0geCAqIHkpLCAodzIgLSB4MiArIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWllYJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoMiAqICh4ICogdyArIHogKiB5KSwgKHcyIC0geDIgLSB5MiArIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGFzaW4oY2xhbXAoMiAqICh5ICogdyAtIHggKiB6KSwgLSAxLCAxKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKDIgKiAoeCAqIHkgKyB6ICogdyksICh3MiArIHgyIC0geTIgLSB6MikpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWlgnOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMigyICogKHggKiB3IC0geiAqIHkpLCAodzIgLSB4MiArIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoMiAqICh5ICogdyAtIHggKiB6KSwgKHcyICsgeDIgLSB5MiAtIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGFzaW4oY2xhbXAoMiAqICh4ICogeSArIHogKiB3KSwgLSAxLCAxKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1haWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKDIgKiAoeCAqIHcgKyB5ICogeiksICh3MiAtIHgyICsgeTIgLSB6MikpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMigyICogKHggKiB6ICsgeSAqIHcpLCAodzIgKyB4MiAtIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXNpbihjbGFtcCgyICogKHogKiB3IC0geCAqIHkpLCAtIDEsIDEpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmtvd24gb3JkZXI6ICcgKyBvcmRlcik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgcm90YXRpb24gbWF0cml4IHRvIGV1bGVyIGFuZ2xlXHJcbiAqIGZyb20gdGhyZWUuanNcclxuICovXHJcblZlY3RvcjMuZXVsZXJGcm9tTWF0MyA9IGZ1bmN0aW9uIChvdXQsIG0sIG9yZGVyKSB7XHJcbiAgICAvLyBhc3N1bWVzIHRoZSB1cHBlciAzeDMgb2YgbSBpcyBhIHB1cmUgcm90YXRpb24gbWF0cml4IChpLmUsIHVuc2NhbGVkKVxyXG4gICAgdmFyIHRlID0gbS5hcnJheTtcclxuICAgIHZhciBtMTEgPSB0ZVswXSwgbTEyID0gdGVbM10sIG0xMyA9IHRlWzZdO1xyXG4gICAgdmFyIG0yMSA9IHRlWzFdLCBtMjIgPSB0ZVs0XSwgbTIzID0gdGVbN107XHJcbiAgICB2YXIgbTMxID0gdGVbMl0sIG0zMiA9IHRlWzVdLCBtMzMgPSB0ZVs4XTtcclxuICAgIHZhciB0YXJnZXQgPSBvdXQuYXJyYXk7XHJcblxyXG4gICAgdmFyIG9yZGVyID0gKG9yZGVyIHx8ICdYWVonKS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgIHN3aXRjaCAob3JkZXIpIHtcclxuICAgICAgICBjYXNlICdYWVonOlxyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhc2luKGNsYW1wKG0xMywgLTEsIDEpKTtcclxuICAgICAgICAgICAgaWYgKGFicyhtMTMpIDwgMC45OTk5OSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoLW0yMywgbTMzKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKC1tMTIsIG0xMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMihtMzIsIG0yMik7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1lYWic6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGFzaW4oLWNsYW1wKG0yMywgLTEsIDEpKTtcclxuICAgICAgICAgICAgaWYgKGFicyhtMjMpIDwgMC45OTk5OSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIobTEzLCBtMzMpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIobTIxLCBtMjIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoLW0zMSwgbTExKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWlhZJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXNpbihjbGFtcChtMzIsIC0xLCAxKSk7XHJcbiAgICAgICAgICAgIGlmIChhYnMobTMyKSA8IDAuOTk5OTkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKC1tMzEsIG0zMyk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigtbTEyLCBtMjIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKG0yMSwgbTExKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdaWVgnOlxyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhc2luKC1jbGFtcChtMzEsIC0xLCAxKSk7XHJcbiAgICAgICAgICAgIGlmIChhYnMobTMxKSA8IDAuOTk5OTkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKG0zMiwgbTMzKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKG0yMSwgbTExKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigtbTEyLCBtMjIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1laWCc6XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGFzaW4oY2xhbXAobTIxLCAtMSwgMSkpO1xyXG4gICAgICAgICAgICBpZiAoYWJzKG0yMSkgPCAwLjk5OTk5KSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMigtbTIzLCBtMjIpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoLW0zMSwgbTExKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMihtMTMsIG0zMyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWFpZJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXNpbigtY2xhbXAobTEyLCAtMSwgMSkpO1xyXG4gICAgICAgICAgICBpZiAoYWJzKG0xMikgPCAwLjk5OTk5KSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMihtMzIsIG0yMik7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMihtMTMsIG0xMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMigtbTIzLCBtMzMpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua293biBvcmRlcjogJyArIG9yZGVyKTtcclxuICAgIH1cclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhWZWN0b3IzLCB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqL1xyXG4gICAgUE9TSVRJVkVfWDoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMSwgMCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICovXHJcbiAgICBORUdBVElWRV9YOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygtMSwgMCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICovXHJcbiAgICBQT1NJVElWRV9ZOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLCAxLCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKi9cclxuICAgIE5FR0FUSVZFX1k6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKDAsIC0xLCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKi9cclxuICAgIFBPU0lUSVZFX1o6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKDAsIDAsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgTkVHQVRJVkVfWjoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMCwgMCwgLTEpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqL1xyXG4gICAgVVA6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKDAsIDEsIDApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqL1xyXG4gICAgWkVSTzoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yMztcclxuIiwiaW1wb3J0IHF1YXQgZnJvbSAnLi4vZ2xtYXRyaXgvcXVhdCc7XHJcbmltcG9ydCBtYXQzIGZyb20gJy4uL2dsbWF0cml4L21hdDMnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5RdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB6XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XHJcbiAqL1xyXG52YXIgUXVhdGVybmlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6LCB3KSB7XHJcblxyXG4gICAgeCA9IHggfHwgMDtcclxuICAgIHkgPSB5IHx8IDA7XHJcbiAgICB6ID0geiB8fCAwO1xyXG4gICAgdyA9IHcgPT09IHVuZGVmaW5lZCA/IDEgOiB3O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcmFnZSBvZiBRdWF0ZXJuaW9uLCByZWFkIGFuZCB3cml0ZSBvZiB4LCB5LCB6LCB3IHdpbGwgY2hhbmdlIHRoZSB2YWx1ZXMgaW4gYXJyYXlcclxuICAgICAqIEFsbCBtZXRob2RzIGFsc28gb3BlcmF0ZSBvbiB0aGUgYXJyYXkgaW5zdGVhZCBvZiB4LCB5LCB6LCB3IGNvbXBvbmVudHNcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuUXVhdGVybmlvbiNcclxuICAgICAqL1xyXG4gICAgdGhpcy5hcnJheSA9IHF1YXQuZnJvbVZhbHVlcyh4LCB5LCB6LCB3KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpcnR5IGZsYWcgaXMgdXNlZCBieSB0aGUgTm9kZSB0byBkZXRlcm1pbmVcclxuICAgICAqIGlmIHRoZSBtYXRyaXggaXMgdXBkYXRlZCB0byBsYXRlc3RcclxuICAgICAqIEBuYW1lIF9kaXJ0eVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5RdWF0ZXJuaW9uI1xyXG4gICAgICovXHJcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbn07XHJcblxyXG5RdWF0ZXJuaW9uLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogUXVhdGVybmlvbixcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBiIHRvIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcXVhdC5hZGQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgdyBjb21wb25lbnQgZnJvbSB4LCB5LCB6IGNvbXBvbmVudFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBjYWxjdWxhdGVXOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcXVhdC5jYWxjdWxhdGVXKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCwgeSBhbmQgeiBjb21wb25lbnRzXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB6XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB3XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24gKHgsIHksIHosIHcpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0geDtcclxuICAgICAgICB0aGlzLmFycmF5WzFdID0geTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gejtcclxuICAgICAgICB0aGlzLmFycmF5WzNdID0gdztcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHksIHogYW5kIHcgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSBhcnJbMF07XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IGFyclsxXTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gYXJyWzJdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbM10gPSBhcnJbM107XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBRdWF0ZXJuaW9uXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBRdWF0ZXJuaW9uKHRoaXMueCwgdGhpcy55LCB0aGlzLnosIHRoaXMudyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgY29uanVnYXRlIG9mIHNlbGYgSWYgdGhlIHF1YXRlcm5pb24gaXMgbm9ybWFsaXplZCxcclxuICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgZmFzdGVyIHRoYW4gaW52ZXJ0IGFuZCBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBjb25qdWdhdGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBxdWF0LmNvbmp1Z2F0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHF1YXQuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRG90IHByb2R1Y3Qgb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRvdDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICByZXR1cm4gcXVhdC5kb3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gdGhlIGdpdmVuIDN4MyByb3RhdGlvbiBtYXRyaXhcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBmcm9tTWF0MzogZnVuY3Rpb24gKG0pIHtcclxuICAgICAgICBxdWF0LmZyb21NYXQzKHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZnJvbSB0aGUgZ2l2ZW4gNHg0IHJvdGF0aW9uIG1hdHJpeFxyXG4gICAgICogVGhlIDR0aCBjb2x1bW4gYW5kIDR0aCByb3cgd2lsbCBiZSBkcm9wZWRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBmcm9tTWF0NDogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbTMgPSBtYXQzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobSkge1xyXG4gICAgICAgICAgICBtYXQzLmZyb21NYXQ0KG0zLCBtLmFycmF5KTtcclxuICAgICAgICAgICAgLy8gVE9ETyBOb3QgbGlrZSBtYXQ0LCBtYXQzIGluIGdsbWF0cml4IHNlZW1zIHRvIGJlIHJvdy1iYXNlZFxyXG4gICAgICAgICAgICBtYXQzLnRyYW5zcG9zZShtMywgbTMpO1xyXG4gICAgICAgICAgICBxdWF0LmZyb21NYXQzKHRoaXMuYXJyYXksIG0zKTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0byBpZGVudGl0eSBxdWF0ZXJuaW9uXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIGlkZW50aXR5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcXVhdC5pZGVudGl0eSh0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnZlcnQgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBpbnZlcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBxdWF0LmludmVydCh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBvZiBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHF1YXQubGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBxdWF0Lmxlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGEgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB0XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIGxlcnA6IGZ1bmN0aW9uIChhLCBiLCB0KSB7XHJcbiAgICAgICAgcXVhdC5sZXJwKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBtdWw6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcXVhdC5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseUxlZnRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBtdWxMZWZ0OiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIHF1YXQubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11dGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHF1YXQubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11dGlwbHkgYSBhbmQgc2VsZlxyXG4gICAgICogUXVhdGVybmlvbiBtdXRpcGx5IGlzIG5vdCBjb21tdXRhdGl2ZSwgc28gdGhlIHJlc3VsdCBvZiBtdXRpcGx5TGVmdCBpcyBkaWZmZXJlbnQgd2l0aCBtdWx0aXBseS5cclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uIChhKSB7XHJcbiAgICAgICAgcXVhdC5tdWx0aXBseSh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTm9ybWFsaXplIHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcXVhdC5ub3JtYWxpemUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBheGlzXHJcbiAgICAgKiBAcGFyYW0gcmFkXHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZUF4aXM6ZnVuY3Rpb24gKGF4aXMscmFkKSB7XHJcblxyXG4gICAgICAgIHZhciBxdWF0MiA9IG5ldyBRdWF0ZXJuaW9uKCkuYXJyYXk7XHJcblxyXG4gICAgICAgIHF1YXQucm90YXRlQXhpcyh0aGlzLmFycmF5LHF1YXQyLGF4aXMscmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWCBheGlzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVg6IGZ1bmN0aW9uIChyYWQpIHtcclxuXHJcbiAgICAgICAgcXVhdC5yb3RhdGVYKHRoaXMuYXJyYXksIHJhZCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuIGFib3V0IFkgYXhpc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICByb3RhdGVZOiBmdW5jdGlvbiAocmFkKSB7XHJcblxyXG4gICAgICAgIHF1YXQucm90YXRlWSh0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBaIGF4aXNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgcm90YXRlWjogZnVuY3Rpb24gKHJhZCkge1xyXG4gICAgICAgIHF1YXQucm90YXRlWih0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHNlbGYgdG8gcmVwcmVzZW50IHRoZSBzaG9ydGVzdCByb3RhdGlvbiBmcm9tIFZlY3RvcjMgYSB0byBWZWN0b3IzIGIuXHJcbiAgICAgKiBhIGFuZCBiIG5lZWRzIHRvIGJlIG5vcm1hbGl6ZWRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHJvdGF0aW9uVG86IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgcXVhdC5yb3RhdGlvblRvKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgc2VsZiB3aXRoIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBheGVzXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gdmlld1xyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHJpZ2h0XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gdXBcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgc2V0QXhlczogZnVuY3Rpb24gKHZpZXcsIHJpZ2h0LCB1cCkge1xyXG4gICAgICAgIHF1YXQuc2V0QXhlcyh0aGlzLmFycmF5LCB2aWV3LmFycmF5LCByaWdodC5hcnJheSwgdXAuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHNlbGYgd2l0aCBhIHJvdGF0aW9uIGF4aXMgYW5kIHJvdGF0aW9uIGFuZ2xlXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gYXhpc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBzZXRBeGlzQW5nbGU6IGZ1bmN0aW9uIChheGlzLCByYWQpIHtcclxuICAgICAgICBxdWF0LnNldEF4aXNBbmdsZSh0aGlzLmFycmF5LCBheGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm0gc3BoZXJpY2FsIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gdFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBzbGVycDogZnVuY3Rpb24gKGEsIGIsIHQpIHtcclxuICAgICAgICBxdWF0LnNsZXJwKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3Igc3F1YXJlZExlbmd0aFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXJMZW46IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gcXVhdC5zcXJMZW4odGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3F1YXJlZCBsZW5ndGggb2Ygc2VsZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXVhcmVkTGVuZ3RoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHF1YXQuc3F1YXJlZExlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZnJvbSBldWxlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHZcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcmRlclxyXG4gICAgICovXHJcbiAgICBmcm9tRXVsZXI6IGZ1bmN0aW9uICh2LCBvcmRlcikge1xyXG4gICAgICAgIHJldHVybiBRdWF0ZXJuaW9uLmZyb21FdWxlcih0aGlzLCB2LCBvcmRlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuICdbJyArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwodGhpcy5hcnJheSwgJywnKSArICddJztcclxuICAgIH0sXHJcblxyXG4gICAgdG9BcnJheTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcclxuLy8gR2V0dGVyIGFuZCBTZXR0ZXJcclxuaWYgKGRlZmluZVByb3BlcnR5KSB7XHJcblxyXG4gICAgdmFyIHByb3RvID0gUXVhdGVybmlvbi5wcm90b3R5cGU7XHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5RdWF0ZXJuaW9uXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd4Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVswXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgeVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlF1YXRlcm5pb25cclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB6XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuUXVhdGVybmlvblxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneicsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMl07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzJdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHdcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5RdWF0ZXJuaW9uXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd3Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVszXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbM10gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG4vLyBTdXBwbHkgbWV0aG9kcyB0aGF0IGFyZSBub3QgaW4gcGxhY2VcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uYWRkID0gZnVuY3Rpb24gKG91dCwgYSwgYikge1xyXG4gICAgcXVhdC5hZGQob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICB4XHJcbiAqIEBwYXJhbSAge251bWJlcn0gICAgIHlcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgelxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICB3XHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uc2V0ID0gZnVuY3Rpb24gKG91dCwgeCwgeSwgeiwgdykge1xyXG4gICAgcXVhdC5zZXQob3V0LmFycmF5LCB4LCB5LCB6LCB3KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmNvcHkgPSBmdW5jdGlvbiAob3V0LCBiKSB7XHJcbiAgICBxdWF0LmNvcHkob3V0LmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5jYWxjdWxhdGVXID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgcXVhdC5jYWxjdWxhdGVXKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uY29uanVnYXRlID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgcXVhdC5jb25qdWdhdGUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmlkZW50aXR5ID0gZnVuY3Rpb24gKG91dCkge1xyXG4gICAgcXVhdC5pZGVudGl0eShvdXQuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmludmVydCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIHF1YXQuaW52ZXJ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmRvdCA9IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICByZXR1cm4gcXVhdC5kb3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblF1YXRlcm5pb24ubGVuID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybiBxdWF0Lmxlbmd0aChhLmFycmF5KTtcclxufTtcclxuXHJcbi8vIFF1YXRlcm5pb24ubGVuZ3RoID0gUXVhdGVybmlvbi5sZW47XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICB0XHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ubGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcclxuICAgIHF1YXQubGVycChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgdFxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnNsZXJwID0gZnVuY3Rpb24gKG91dCwgYSwgYiwgdCkge1xyXG4gICAgcXVhdC5zbGVycChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5tdWwgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICBxdWF0Lm11bHRpcGx5KG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5tdWx0aXBseSA9IFF1YXRlcm5pb24ubXVsO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICByYWRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5yb3RhdGVYID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICBxdWF0LnJvdGF0ZVgob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICByYWRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5yb3RhdGVZID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICBxdWF0LnJvdGF0ZVkob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICByYWRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5yb3RhdGVaID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICBxdWF0LnJvdGF0ZVoob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gICAgYXhpc1xyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICByYWRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5zZXRBeGlzQW5nbGUgPSBmdW5jdGlvbiAob3V0LCBheGlzLCByYWQpIHtcclxuICAgIHF1YXQuc2V0QXhpc0FuZ2xlKG91dC5hcnJheSwgYXhpcy5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5ub3JtYWxpemUgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBxdWF0Lm5vcm1hbGl6ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnNxckxlbiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4gcXVhdC5zcXJMZW4oYS5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnNxdWFyZWRMZW5ndGggPSBRdWF0ZXJuaW9uLnNxckxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9ICAgIG1cclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5mcm9tTWF0MyA9IGZ1bmN0aW9uIChvdXQsIG0pIHtcclxuICAgIHF1YXQuZnJvbU1hdDMob3V0LmFycmF5LCBtLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICAgIHZpZXdcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICByaWdodFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICAgIHVwXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uc2V0QXhlcyA9IGZ1bmN0aW9uIChvdXQsIHZpZXcsIHJpZ2h0LCB1cCkge1xyXG4gICAgcXVhdC5zZXRBeGVzKG91dC5hcnJheSwgdmlldy5hcnJheSwgcmlnaHQuYXJyYXksIHVwLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICAgIGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICBiXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ucm90YXRpb25UbyA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIHF1YXQucm90YXRpb25UbyhvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBxdWF0ZXJuaW9uIGZyb20gZXVsZXJcclxuICogQHBhcmFtIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gdlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gb3JkZXJcclxuICovXHJcblF1YXRlcm5pb24uZnJvbUV1bGVyID0gZnVuY3Rpb24gKG91dCwgdiwgb3JkZXIpIHtcclxuXHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICB2ID0gdi5hcnJheTtcclxuICAgIHZhciB0YXJnZXQgPSBvdXQuYXJyYXk7XHJcbiAgICB2YXIgYzEgPSBNYXRoLmNvcyh2WzBdIC8gMik7XHJcbiAgICB2YXIgYzIgPSBNYXRoLmNvcyh2WzFdIC8gMik7XHJcbiAgICB2YXIgYzMgPSBNYXRoLmNvcyh2WzJdIC8gMik7XHJcbiAgICB2YXIgczEgPSBNYXRoLnNpbih2WzBdIC8gMik7XHJcbiAgICB2YXIgczIgPSBNYXRoLnNpbih2WzFdIC8gMik7XHJcbiAgICB2YXIgczMgPSBNYXRoLnNpbih2WzJdIC8gMik7XHJcblxyXG4gICAgdmFyIG9yZGVyID0gKG9yZGVyIHx8ICdYWVonKS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgIC8vIGh0dHA6Ly93d3cubWF0aHdvcmtzLmNvbS9tYXRsYWJjZW50cmFsL2ZpbGVleGNoYW5nZS9cclxuICAgIC8vICAyMDY5Ni1mdW5jdGlvbi10by1jb252ZXJ0LWJldHdlZW4tZGNtLWV1bGVyLWFuZ2xlcy1xdWF0ZXJuaW9ucy1hbmQtZXVsZXItdmVjdG9ycy9cclxuICAgIC8vICBjb250ZW50L1NwaW5DYWxjLm1cclxuXHJcbiAgICBzd2l0Y2ggKG9yZGVyKSB7XHJcbiAgICAgICAgY2FzZSAnWFlaJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gczEgKiBjMiAqIGMzICsgYzEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBjMSAqIHMyICogYzMgLSBzMSAqIGMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGMxICogYzIgKiBzMyArIHMxICogczIgKiBjMztcclxuICAgICAgICAgICAgdGFyZ2V0WzNdID0gYzEgKiBjMiAqIGMzIC0gczEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWFonOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBzMSAqIGMyICogYzMgKyBjMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGMxICogczIgKiBjMyAtIHMxICogYzIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYzEgKiBjMiAqIHMzIC0gczEgKiBzMiAqIGMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbM10gPSBjMSAqIGMyICogYzMgKyBzMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1pYWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IHMxICogYzIgKiBjMyAtIGMxICogczIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYzEgKiBzMiAqIGMzICsgczEgKiBjMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBjMSAqIGMyICogczMgKyBzMSAqIHMyICogYzM7XHJcbiAgICAgICAgICAgIHRhcmdldFszXSA9IGMxICogYzIgKiBjMyAtIHMxICogczIgKiBzMztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWllYJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gczEgKiBjMiAqIGMzIC0gYzEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBjMSAqIHMyICogYzMgKyBzMSAqIGMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGMxICogYzIgKiBzMyAtIHMxICogczIgKiBjMztcclxuICAgICAgICAgICAgdGFyZ2V0WzNdID0gYzEgKiBjMiAqIGMzICsgczEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWlgnOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBzMSAqIGMyICogYzMgKyBjMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGMxICogczIgKiBjMyArIHMxICogYzIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYzEgKiBjMiAqIHMzIC0gczEgKiBzMiAqIGMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbM10gPSBjMSAqIGMyICogYzMgLSBzMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1haWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IHMxICogYzIgKiBjMyAtIGMxICogczIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYzEgKiBzMiAqIGMzIC0gczEgKiBjMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBjMSAqIGMyICogczMgKyBzMSAqIHMyICogYzM7XHJcbiAgICAgICAgICAgIHRhcmdldFszXSA9IGMxICogYzIgKiBjMyArIHMxICogczIgKiBzMztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBRdWF0ZXJuaW9uO1xyXG4iLCJpbXBvcnQgbWF0NCBmcm9tICcuLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcbmltcG9ydCBxdWF0IGZyb20gJy4uL2dsbWF0cml4L3F1YXQnO1xyXG5pbXBvcnQgbWF0MyBmcm9tICcuLi9nbG1hdHJpeC9tYXQzJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9WZWN0b3IzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuTWF0cml4NFxyXG4gKi9cclxudmFyIE1hdHJpeDQgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICB0aGlzLl9heGlzWCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICB0aGlzLl9heGlzWSA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICB0aGlzLl9heGlzWiA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIE1hdHJpeDRcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4NCNcclxuICAgICAqL1xyXG4gICAgdGhpcy5hcnJheSA9IG1hdDQuY3JlYXRlKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4NCNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuTWF0cml4NC5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IE1hdHJpeDQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gYXJyW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGFkanVnYXRlIG9mIHNlbGYsIGluLXBsYWNlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGFkam9pbnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDQuYWRqb2ludCh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgTWF0cml4NFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgTWF0cml4NCgpKS5jb3B5KHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgZnJvbSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24oYSkge1xyXG4gICAgICAgIG1hdDQuY29weSh0aGlzLmFycmF5LCBhLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIG1hdHJpeCBkZXRlcm1pbmFudFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkZXRlcm1pbmFudDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdDQuZGV0ZXJtaW5hbnQodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHVwcGVyIDN4MyBwYXJ0IGZyb20gcXVhdGVybmlvblxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGZyb21RdWF0OiBmdW5jdGlvbihxKSB7XHJcbiAgICAgICAgbWF0NC5mcm9tUXVhdCh0aGlzLmFycmF5LCBxLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gYSBxdWF0ZXJuaW9uIHJvdGF0aW9uIGFuZCBhIHZlY3RvciB0cmFuc2xhdGlvblxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgZnJvbVJvdGF0aW9uVHJhbnNsYXRpb246IGZ1bmN0aW9uKHEsIHYpIHtcclxuICAgICAgICBtYXQ0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKHRoaXMuYXJyYXksIHEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZnJvbSBNYXRyaXgyZCwgaXQgaXMgdXNlZCB3aGVuIGNvbnZlcnRpbmcgYSAyZCBzaGFwZSB0byAzZCBzcGFjZS5cclxuICAgICAqIEluIDNkIHNwYWNlIGl0IGlzIGVxdWl2YWxlbnQgdG8gcmFuc2xhdGUgb24geHkgcGxhbmUgYW5kIHJvdGF0ZSBhYm91dCB6IGF4aXNcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG0yZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBmcm9tTWF0MmQ6IGZ1bmN0aW9uKG0yZCkge1xyXG4gICAgICAgIE1hdHJpeDQuZnJvbU1hdDJkKHRoaXMsIG0yZCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gZnJ1c3R1bSBib3VuZHNcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gbGVmdFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSByaWdodFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBib3R0b21cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gdG9wXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IG5lYXJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gZmFyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGZydXN0dW06IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xyXG4gICAgICAgIG1hdDQuZnJ1c3R1bSh0aGlzLmFycmF5LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcik7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0byBhIGlkZW50aXR5IG1hdHJpeFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBpZGVudGl0eTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0NC5pZGVudGl0eSh0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0IHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgaW52ZXJ0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQ0LmludmVydCh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGFzIGEgbWF0cml4IHdpdGggdGhlIGdpdmVuIGV5ZSBwb3NpdGlvbiwgZm9jYWwgcG9pbnQsIGFuZCB1cCBheGlzXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGV5ZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBjZW50ZXJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gdXBcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgbG9va0F0OiBmdW5jdGlvbihleWUsIGNlbnRlciwgdXApIHtcclxuICAgICAgICBtYXQ0Lmxvb2tBdCh0aGlzLmFycmF5LCBleWUuYXJyYXksIGNlbnRlci5hcnJheSwgdXAuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXV0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDQubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgbXVsTGVmdDogZnVuY3Rpb24oYSkge1xyXG4gICAgICAgIG1hdDQubXVsKHRoaXMuYXJyYXksIGEuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQ0Lm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBhIGFuZCBzZWxmLCBhIGlzIG9uIHRoZSBsZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbihhKSB7XHJcbiAgICAgICAgbWF0NC5tdWx0aXBseSh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGFzIGEgb3J0aG9ncmFwaGljIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGxlZnRcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gcmlnaHRcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gYm90dG9tXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRvcFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBuZWFyXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGZhclxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBvcnRobzogZnVuY3Rpb24obGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcclxuICAgICAgICBtYXQ0Lm9ydGhvKHRoaXMuYXJyYXksIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYXMgYSBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBmb3Z5XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGFzcGVjdFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBuZWFyXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGZhclxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBwZXJzcGVjdGl2ZTogZnVuY3Rpb24oZm92eSwgYXNwZWN0LCBuZWFyLCBmYXIpIHtcclxuICAgICAgICBtYXQ0LnBlcnNwZWN0aXZlKHRoaXMuYXJyYXksIGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgcmFkIGFib3V0IGF4aXMuXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHJvdGFpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgcmFkXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGF4aXNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgcm90YXRlOiBmdW5jdGlvbihyYWQsIGF4aXMpIHtcclxuICAgICAgICBtYXQ0LnJvdGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQsIGF4aXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBYIGF4aXMuXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHJvdGFpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVg6IGZ1bmN0aW9uKHJhZCkge1xyXG4gICAgICAgIG1hdDQucm90YXRlWCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBZIGF4aXMuXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHJvdGFpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVk6IGZ1bmN0aW9uKHJhZCkge1xyXG4gICAgICAgIG1hdDQucm90YXRlWSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBaIGF4aXMuXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHJvdGFpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVo6IGZ1bmN0aW9uKHJhZCkge1xyXG4gICAgICAgIG1hdDQucm90YXRlWih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBzZWxmIGJ5IHNcclxuICAgICAqIEVxdWFsIHRvIHJpZ2h0LW11bHRpcGx5IGEgc2NhbGUgbWF0cml4XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICBzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbih2KSB7XHJcbiAgICAgICAgbWF0NC5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNsYXRlIHNlbGYgYnkgdi5cclxuICAgICAqIEVxdWFsIHRvIHJpZ2h0LW11bHRpcGx5IGEgdHJhbnNsYXRlIG1hdHJpeFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgdlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uKHYpIHtcclxuICAgICAgICBtYXQ0LnRyYW5zbGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNwb3NlIHNlbGYsIGluLXBsYWNlLlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc3Bvc2U6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDQudHJhbnNwb3NlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNvbXBvc2UgYSBtYXRyaXggdG8gU1JUXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW3NjYWxlXVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlF1YXRlcm5pb259IHJvdGF0aW9uXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yfSBwb3NpdGlvblxyXG4gICAgICogQHNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbWljcm9zb2Z0LnhuYS5mcmFtZXdvcmsubWF0cml4LmRlY29tcG9zZS5hc3B4XHJcbiAgICAgKi9cclxuICAgIGRlY29tcG9zZU1hdHJpeDogKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgeCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHkgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB6ID0gdmVjMy5jcmVhdGUoKTtcclxuXHJcbiAgICAgICAgdmFyIG0zID0gbWF0My5jcmVhdGUoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjYWxlLCByb3RhdGlvbiwgcG9zaXRpb24pIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgICAgIHZlYzMuc2V0KHgsIGVsWzBdLCBlbFsxXSwgZWxbMl0pO1xyXG4gICAgICAgICAgICB2ZWMzLnNldCh5LCBlbFs0XSwgZWxbNV0sIGVsWzZdKTtcclxuICAgICAgICAgICAgdmVjMy5zZXQoeiwgZWxbOF0sIGVsWzldLCBlbFsxMF0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHN4ID0gdmVjMy5sZW5ndGgoeCk7XHJcbiAgICAgICAgICAgIHZhciBzeSA9IHZlYzMubGVuZ3RoKHkpO1xyXG4gICAgICAgICAgICB2YXIgc3ogPSB2ZWMzLmxlbmd0aCh6KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGlmIGRldGVybWluZSBpcyBuZWdhdGl2ZSwgd2UgbmVlZCB0byBpbnZlcnQgb25lIHNjYWxlXHJcbiAgICAgICAgICAgIHZhciBkZXQgPSB0aGlzLmRldGVybWluYW50KCk7XHJcbiAgICAgICAgICAgIGlmIChkZXQgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBzeCA9IC1zeDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNjYWxlKSB7XHJcbiAgICAgICAgICAgICAgICBzY2FsZS5zZXQoc3gsIHN5LCBzeik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNldChlbFsxMl0sIGVsWzEzXSwgZWxbMTRdKTtcclxuXHJcbiAgICAgICAgICAgIG1hdDMuZnJvbU1hdDQobTMsIGVsKTtcclxuICAgICAgICAgICAgLy8gTm90IGxpa2UgbWF0NCwgbWF0MyBpbiBnbG1hdHJpeCBzZWVtcyB0byBiZSByb3ctYmFzZWRcclxuICAgICAgICAgICAgLy8gU2VlbXMgZml4ZWQgaW4gZ2wtbWF0cml4IDIuMi4yXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90b2ppL2dsLW1hdHJpeC9pc3N1ZXMvMTE0XHJcbiAgICAgICAgICAgIC8vIG1hdDMudHJhbnNwb3NlKG0zLCBtMyk7XHJcblxyXG4gICAgICAgICAgICBtM1swXSAvPSBzeDtcclxuICAgICAgICAgICAgbTNbMV0gLz0gc3g7XHJcbiAgICAgICAgICAgIG0zWzJdIC89IHN4O1xyXG5cclxuICAgICAgICAgICAgbTNbM10gLz0gc3k7XHJcbiAgICAgICAgICAgIG0zWzRdIC89IHN5O1xyXG4gICAgICAgICAgICBtM1s1XSAvPSBzeTtcclxuXHJcbiAgICAgICAgICAgIG0zWzZdIC89IHN6O1xyXG4gICAgICAgICAgICBtM1s3XSAvPSBzejtcclxuICAgICAgICAgICAgbTNbOF0gLz0gc3o7XHJcblxyXG4gICAgICAgICAgICBxdWF0LmZyb21NYXQzKHJvdGF0aW9uLmFycmF5LCBtMyk7XHJcbiAgICAgICAgICAgIHF1YXQubm9ybWFsaXplKHJvdGF0aW9uLmFycmF5LCByb3RhdGlvbi5hcnJheSk7XHJcblxyXG4gICAgICAgICAgICByb3RhdGlvbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICBwb3NpdGlvbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xyXG5cclxuaWYgKGRlZmluZVByb3BlcnR5KSB7XHJcbiAgICB2YXIgcHJvdG8gPSBNYXRyaXg0LnByb3RvdHlwZTtcclxuICAgIC8qKlxyXG4gICAgICogWiBBeGlzIG9mIGxvY2FsIHRyYW5zZm9ybVxyXG4gICAgICogQG5hbWUgelxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3onLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgICAgIHRoaXMuX2F4aXNaLnNldChlbFs4XSwgZWxbOV0sIGVsWzEwXSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9heGlzWjtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBIZXJlIGhhcyBhIHByb2JsZW1cclxuICAgICAgICAgICAgLy8gSWYgb25seSBzZXQgYW4gaXRlbSBvZiB2ZWN0b3Igd2lsbCBub3Qgd29ya1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB2ID0gdi5hcnJheTtcclxuICAgICAgICAgICAgZWxbOF0gPSB2WzBdO1xyXG4gICAgICAgICAgICBlbFs5XSA9IHZbMV07XHJcbiAgICAgICAgICAgIGVsWzEwXSA9IHZbMl07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBZIEF4aXMgb2YgbG9jYWwgdHJhbnNmb3JtXHJcbiAgICAgKiBAbmFtZSB5XHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4NFxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneScsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5hcnJheTtcclxuICAgICAgICAgICAgdGhpcy5fYXhpc1kuc2V0KGVsWzRdLCBlbFs1XSwgZWxbNl0pO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXhpc1k7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgICAgIHYgPSB2LmFycmF5O1xyXG4gICAgICAgICAgICBlbFs0XSA9IHZbMF07XHJcbiAgICAgICAgICAgIGVsWzVdID0gdlsxXTtcclxuICAgICAgICAgICAgZWxbNl0gPSB2WzJdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogWCBBeGlzIG9mIGxvY2FsIHRyYW5zZm9ybVxyXG4gICAgICogQG5hbWUgeFxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgICAgIHRoaXMuX2F4aXNYLnNldChlbFswXSwgZWxbMV0sIGVsWzJdKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F4aXNYO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB2ID0gdi5hcnJheTtcclxuICAgICAgICAgICAgZWxbMF0gPSB2WzBdO1xyXG4gICAgICAgICAgICBlbFsxXSA9IHZbMV07XHJcbiAgICAgICAgICAgIGVsWzJdID0gdlsyXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG59XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuYWRqb2ludCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0NC5hZGpvaW50KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0NC5jb3B5KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbk1hdHJpeDQuZGV0ZXJtaW5hbnQgPSBmdW5jdGlvbihhKSB7XHJcbiAgICByZXR1cm4gbWF0NC5kZXRlcm1pbmFudChhLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICBtYXQ0LmlkZW50aXR5KG91dC5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgbGVmdFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICByaWdodFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBib3R0b21cclxuICogQHBhcmFtICB7bnVtYmVyfSAgdG9wXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIG5lYXJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgZmFyXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQub3J0aG8gPSBmdW5jdGlvbihvdXQsIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XHJcbiAgICBtYXQ0Lm9ydGhvKG91dC5hcnJheSwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIGZvdnlcclxuICogQHBhcmFtICB7bnVtYmVyfSAgYXNwZWN0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIG5lYXJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgZmFyXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQucGVyc3BlY3RpdmUgPSBmdW5jdGlvbihvdXQsIGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKSB7XHJcbiAgICBtYXQ0LnBlcnNwZWN0aXZlKG91dC5hcnJheSwgZm92eSwgYXNwZWN0LCBuZWFyLCBmYXIpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gZXllXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gY2VudGVyXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gdXBcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5sb29rQXQgPSBmdW5jdGlvbihvdXQsIGV5ZSwgY2VudGVyLCB1cCkge1xyXG4gICAgbWF0NC5sb29rQXQob3V0LmFycmF5LCBleWUuYXJyYXksIGNlbnRlci5hcnJheSwgdXAuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0NC5pbnZlcnQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQubXVsID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBtYXQ0Lm11bChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQubXVsdGlwbHkgPSBNYXRyaXg0Lm11bDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9ICAgIG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5mcm9tUXVhdCA9IGZ1bmN0aW9uKG91dCwgcSkge1xyXG4gICAgbWF0NC5mcm9tUXVhdChvdXQuYXJyYXksIHEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gICAgb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICAgIHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbiA9IGZ1bmN0aW9uKG91dCwgcSwgdikge1xyXG4gICAgbWF0NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihvdXQuYXJyYXksIHEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbTRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gbTJkXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuZnJvbU1hdDJkID0gZnVuY3Rpb24obTQsIG0yZCkge1xyXG4gICAgbTQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHZhciBtMmQgPSBtMmQuYXJyYXk7XHJcbiAgICB2YXIgbTQgPSBtNC5hcnJheTtcclxuXHJcbiAgICBtNFswXSA9IG0yZFswXTtcclxuICAgIG00WzRdID0gbTJkWzJdO1xyXG4gICAgbTRbMTJdID0gbTJkWzRdO1xyXG5cclxuICAgIG00WzFdID0gbTJkWzFdO1xyXG4gICAgbTRbNV0gPSBtMmRbM107XHJcbiAgICBtNFsxM10gPSBtMmRbNV07XHJcblxyXG4gICAgcmV0dXJuIG00O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICByYWRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBheGlzXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQucm90YXRlID0gZnVuY3Rpb24ob3V0LCBhLCByYWQsIGF4aXMpIHtcclxuICAgIG1hdDQucm90YXRlKG91dC5hcnJheSwgYS5hcnJheSwgcmFkLCBheGlzLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQucm90YXRlWCA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XHJcbiAgICBtYXQ0LnJvdGF0ZVgob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICByYWRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5yb3RhdGVZID0gZnVuY3Rpb24ob3V0LCBhLCByYWQpIHtcclxuICAgIG1hdDQucm90YXRlWShvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHJhZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnJvdGF0ZVogPSBmdW5jdGlvbihvdXQsIGEsIHJhZCkge1xyXG4gICAgbWF0NC5yb3RhdGVaKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSB2XHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIG1hdDQuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC50cmFuc3Bvc2UgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDQudHJhbnNwb3NlKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgbWF0NC50cmFuc2xhdGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1hdHJpeDQ7XHJcbiIsImltcG9ydCBWZWN0b3IzIGZyb20gJy4vVmVjdG9yMyc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxudmFyIHZlYzNTZXQgPSB2ZWMzLnNldDtcclxudmFyIHZlYzNDb3B5ID0gdmVjMy5jb3B5O1xyXG5cclxuLyoqXHJcbiAqIEF4aXMgYWxpZ25lZCBib3VuZGluZyBib3hcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LkJvdW5kaW5nQm94XHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBbbWluXVxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW21heF1cclxuICovXHJcbnZhciBCb3VuZGluZ0JveCA9IGZ1bmN0aW9uIChtaW4sIG1heCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWluaW11bSBjb29yZHMgb2YgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLm1pbiA9IG1pbiB8fCBuZXcgVmVjdG9yMyhJbmZpbml0eSwgSW5maW5pdHksIEluZmluaXR5KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1heGltdW0gY29vcmRzIG9mIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5tYXggPSBtYXggfHwgbmV3IFZlY3RvcjMoLUluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eSk7XHJcblxyXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XHJcbn07XHJcblxyXG5Cb3VuZGluZ0JveC5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IEJvdW5kaW5nQm94LFxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgbWluIGFuZCBtYXggY29vcmRzIGZyb20gYSB2ZXJ0aWNlcyBhcnJheVxyXG4gICAgICogQHBhcmFtICB7YXJyYXl9IHZlcnRpY2VzXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUZyb21WZXJ0aWNlczogZnVuY3Rpb24gKHZlcnRpY2VzKSB7XHJcbiAgICAgICAgaWYgKHZlcnRpY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluO1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHZhciBtaW5BcnIgPSBtaW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXhBcnIgPSBtYXguYXJyYXk7XHJcbiAgICAgICAgICAgIHZlYzNDb3B5KG1pbkFyciwgdmVydGljZXNbMF0pO1xyXG4gICAgICAgICAgICB2ZWMzQ29weShtYXhBcnIsIHZlcnRpY2VzWzBdKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZlcnRleCA9IHZlcnRpY2VzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhbMF0gPCBtaW5BcnJbMF0pIHsgbWluQXJyWzBdID0gdmVydGV4WzBdOyB9XHJcbiAgICAgICAgICAgICAgICBpZiAodmVydGV4WzFdIDwgbWluQXJyWzFdKSB7IG1pbkFyclsxXSA9IHZlcnRleFsxXTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleFsyXSA8IG1pbkFyclsyXSkgeyBtaW5BcnJbMl0gPSB2ZXJ0ZXhbMl07IH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodmVydGV4WzBdID4gbWF4QXJyWzBdKSB7IG1heEFyclswXSA9IHZlcnRleFswXTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleFsxXSA+IG1heEFyclsxXSkgeyBtYXhBcnJbMV0gPSB2ZXJ0ZXhbMV07IH1cclxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhbMl0gPiBtYXhBcnJbMl0pIHsgbWF4QXJyWzJdID0gdmVydGV4WzJdOyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWluLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIG1heC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVbmlvbiBvcGVyYXRpb24gd2l0aCBhbm90aGVyIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5Cb3VuZGluZ0JveH0gYmJveFxyXG4gICAgICovXHJcbiAgICB1bmlvbjogZnVuY3Rpb24gKGJib3gpIHtcclxuICAgICAgICB2YXIgbWluID0gdGhpcy5taW47XHJcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xyXG4gICAgICAgIHZlYzMubWluKG1pbi5hcnJheSwgbWluLmFycmF5LCBiYm94Lm1pbi5hcnJheSk7XHJcbiAgICAgICAgdmVjMy5tYXgobWF4LmFycmF5LCBtYXguYXJyYXksIGJib3gubWF4LmFycmF5KTtcclxuICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICBtYXguX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcnNlY3Rpb24gb3BlcmF0aW9uIHdpdGggYW5vdGhlciBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQm91bmRpbmdCb3h9IGJib3hcclxuICAgICAqL1xyXG4gICAgaW50ZXJzZWN0aW9uOiBmdW5jdGlvbiAoYmJveCkge1xyXG4gICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbjtcclxuICAgICAgICB2YXIgbWF4ID0gdGhpcy5tYXg7XHJcbiAgICAgICAgdmVjMy5tYXgobWluLmFycmF5LCBtaW4uYXJyYXksIGJib3gubWluLmFycmF5KTtcclxuICAgICAgICB2ZWMzLm1pbihtYXguYXJyYXksIG1heC5hcnJheSwgYmJveC5tYXguYXJyYXkpO1xyXG4gICAgICAgIG1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIG1heC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGludGVyc2VjdCB3aXRoIGFub3RoZXIgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkJvdW5kaW5nQm94fSBiYm94XHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RCb3VuZGluZ0JveDogZnVuY3Rpb24gKGJib3gpIHtcclxuICAgICAgICB2YXIgX21pbiA9IHRoaXMubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBfbWF4ID0gdGhpcy5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgIHZhciBfbWluMiA9IGJib3gubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBfbWF4MiA9IGJib3gubWF4LmFycmF5O1xyXG5cclxuICAgICAgICByZXR1cm4gISAoX21pblswXSA+IF9tYXgyWzBdIHx8IF9taW5bMV0gPiBfbWF4MlsxXSB8fCBfbWluWzJdID4gX21heDJbMl1cclxuICAgICAgICAgICAgfHwgX21heFswXSA8IF9taW4yWzBdIHx8IF9tYXhbMV0gPCBfbWluMlsxXSB8fCBfbWF4WzJdIDwgX21pbjJbMl0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGNvbnRhaW4gYW5vdGhlciBib3VuZGluZyBib3ggZW50aXJlbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQm91bmRpbmdCb3h9IGJib3hcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGNvbnRhaW5Cb3VuZGluZ0JveDogZnVuY3Rpb24gKGJib3gpIHtcclxuXHJcbiAgICAgICAgdmFyIF9taW4gPSB0aGlzLm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heCA9IHRoaXMubWF4LmFycmF5O1xyXG5cclxuICAgICAgICB2YXIgX21pbjIgPSBiYm94Lm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heDIgPSBiYm94Lm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgcmV0dXJuIF9taW5bMF0gPD0gX21pbjJbMF0gJiYgX21pblsxXSA8PSBfbWluMlsxXSAmJiBfbWluWzJdIDw9IF9taW4yWzJdXHJcbiAgICAgICAgICAgICYmIF9tYXhbMF0gPj0gX21heDJbMF0gJiYgX21heFsxXSA+PSBfbWF4MlsxXSAmJiBfbWF4WzJdID49IF9tYXgyWzJdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGNvbnRhaW4gcG9pbnQgZW50aXJlbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gcG9pbnRcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGNvbnRhaW5Qb2ludDogZnVuY3Rpb24gKHApIHtcclxuICAgICAgICB2YXIgX21pbiA9IHRoaXMubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBfbWF4ID0gdGhpcy5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgIHZhciBfcCA9IHAuYXJyYXk7XHJcblxyXG4gICAgICAgIHJldHVybiBfbWluWzBdIDw9IF9wWzBdICYmIF9taW5bMV0gPD0gX3BbMV0gJiYgX21pblsyXSA8PSBfcFsyXVxyXG4gICAgICAgICAgICAmJiBfbWF4WzBdID49IF9wWzBdICYmIF9tYXhbMV0gPj0gX3BbMV0gJiYgX21heFsyXSA+PSBfcFsyXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBib3VuZGluZyBib3ggaXMgZmluaXRlXHJcbiAgICAgKi9cclxuICAgIGlzRmluaXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF9taW4gPSB0aGlzLm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heCA9IHRoaXMubWF4LmFycmF5O1xyXG4gICAgICAgIHJldHVybiBpc0Zpbml0ZShfbWluWzBdKSAmJiBpc0Zpbml0ZShfbWluWzFdKSAmJiBpc0Zpbml0ZShfbWluWzJdKVxyXG4gICAgICAgICAgICAmJiBpc0Zpbml0ZShfbWF4WzBdKSAmJiBpc0Zpbml0ZShfbWF4WzFdKSAmJiBpc0Zpbml0ZShfbWF4WzJdKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhbiBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCB0byB0aGUgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBhcHBseVRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG4gICAgICAgIHRoaXMudHJhbnNmb3JtRnJvbSh0aGlzLCBtYXRyaXgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBmcm9tIGFub3RoZXIgYm91bmRpbmcgYm94IGFuZCBhbiBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeC5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5Cb3VuZGluZ0JveH0gc291cmNlXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gbWF0cml4XHJcbiAgICAgKi9cclxuICAgIHRyYW5zZm9ybUZyb206IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gaHR0cDovL2Rldi50aGVvbWFkZXIuY29tL3RyYW5zZm9ybS1ib3VuZGluZy1ib3hlcy9cclxuICAgICAgICB2YXIgeGEgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB4YiA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHlhID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgeWIgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB6YSA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHpiID0gdmVjMy5jcmVhdGUoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UsIG1hdHJpeCkge1xyXG4gICAgICAgICAgICB2YXIgbWluID0gc291cmNlLm1pbi5hcnJheTtcclxuICAgICAgICAgICAgdmFyIG1heCA9IHNvdXJjZS5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgICAgICB2YXIgbSA9IG1hdHJpeC5hcnJheTtcclxuXHJcbiAgICAgICAgICAgIHhhWzBdID0gbVswXSAqIG1pblswXTsgeGFbMV0gPSBtWzFdICogbWluWzBdOyB4YVsyXSA9IG1bMl0gKiBtaW5bMF07XHJcbiAgICAgICAgICAgIHhiWzBdID0gbVswXSAqIG1heFswXTsgeGJbMV0gPSBtWzFdICogbWF4WzBdOyB4YlsyXSA9IG1bMl0gKiBtYXhbMF07XHJcblxyXG4gICAgICAgICAgICB5YVswXSA9IG1bNF0gKiBtaW5bMV07IHlhWzFdID0gbVs1XSAqIG1pblsxXTsgeWFbMl0gPSBtWzZdICogbWluWzFdO1xyXG4gICAgICAgICAgICB5YlswXSA9IG1bNF0gKiBtYXhbMV07IHliWzFdID0gbVs1XSAqIG1heFsxXTsgeWJbMl0gPSBtWzZdICogbWF4WzFdO1xyXG5cclxuICAgICAgICAgICAgemFbMF0gPSBtWzhdICogbWluWzJdOyB6YVsxXSA9IG1bOV0gKiBtaW5bMl07IHphWzJdID0gbVsxMF0gKiBtaW5bMl07XHJcbiAgICAgICAgICAgIHpiWzBdID0gbVs4XSAqIG1heFsyXTsgemJbMV0gPSBtWzldICogbWF4WzJdOyB6YlsyXSA9IG1bMTBdICogbWF4WzJdO1xyXG5cclxuICAgICAgICAgICAgbWluID0gdGhpcy5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgIG1heCA9IHRoaXMubWF4LmFycmF5O1xyXG4gICAgICAgICAgICBtaW5bMF0gPSBNYXRoLm1pbih4YVswXSwgeGJbMF0pICsgTWF0aC5taW4oeWFbMF0sIHliWzBdKSArIE1hdGgubWluKHphWzBdLCB6YlswXSkgKyBtWzEyXTtcclxuICAgICAgICAgICAgbWluWzFdID0gTWF0aC5taW4oeGFbMV0sIHhiWzFdKSArIE1hdGgubWluKHlhWzFdLCB5YlsxXSkgKyBNYXRoLm1pbih6YVsxXSwgemJbMV0pICsgbVsxM107XHJcbiAgICAgICAgICAgIG1pblsyXSA9IE1hdGgubWluKHhhWzJdLCB4YlsyXSkgKyBNYXRoLm1pbih5YVsyXSwgeWJbMl0pICsgTWF0aC5taW4oemFbMl0sIHpiWzJdKSArIG1bMTRdO1xyXG5cclxuICAgICAgICAgICAgbWF4WzBdID0gTWF0aC5tYXgoeGFbMF0sIHhiWzBdKSArIE1hdGgubWF4KHlhWzBdLCB5YlswXSkgKyBNYXRoLm1heCh6YVswXSwgemJbMF0pICsgbVsxMl07XHJcbiAgICAgICAgICAgIG1heFsxXSA9IE1hdGgubWF4KHhhWzFdLCB4YlsxXSkgKyBNYXRoLm1heCh5YVsxXSwgeWJbMV0pICsgTWF0aC5tYXgoemFbMV0sIHpiWzFdKSArIG1bMTNdO1xyXG4gICAgICAgICAgICBtYXhbMl0gPSBNYXRoLm1heCh4YVsyXSwgeGJbMl0pICsgTWF0aC5tYXgoeWFbMl0sIHliWzJdKSArIE1hdGgubWF4KHphWzJdLCB6YlsyXSkgKyBtWzE0XTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubWluLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubWF4Ll9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IGEgcHJvamVjdGlvbiBtYXRyaXggdG8gdGhlIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtYXRyaXhcclxuICAgICAqL1xyXG4gICAgYXBwbHlQcm9qZWN0aW9uOiBmdW5jdGlvbiAobWF0cml4KSB7XHJcbiAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBtYXggPSB0aGlzLm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgdmFyIG0gPSBtYXRyaXguYXJyYXk7XHJcbiAgICAgICAgLy8gbWluIGluIG1pbiB6XHJcbiAgICAgICAgdmFyIHYxMCA9IG1pblswXTtcclxuICAgICAgICB2YXIgdjExID0gbWluWzFdO1xyXG4gICAgICAgIHZhciB2MTIgPSBtaW5bMl07XHJcbiAgICAgICAgLy8gbWF4IGluIG1pbiB6XHJcbiAgICAgICAgdmFyIHYyMCA9IG1heFswXTtcclxuICAgICAgICB2YXIgdjIxID0gbWF4WzFdO1xyXG4gICAgICAgIHZhciB2MjIgPSBtaW5bMl07XHJcbiAgICAgICAgLy8gbWF4IGluIG1heCB6XHJcbiAgICAgICAgdmFyIHYzMCA9IG1heFswXTtcclxuICAgICAgICB2YXIgdjMxID0gbWF4WzFdO1xyXG4gICAgICAgIHZhciB2MzIgPSBtYXhbMl07XHJcblxyXG4gICAgICAgIGlmIChtWzE1XSA9PT0gMSkgeyAgLy8gT3J0aG9ncmFwaGljIHByb2plY3Rpb25cclxuICAgICAgICAgICAgbWluWzBdID0gbVswXSAqIHYxMCArIG1bMTJdO1xyXG4gICAgICAgICAgICBtaW5bMV0gPSBtWzVdICogdjExICsgbVsxM107XHJcbiAgICAgICAgICAgIG1heFsyXSA9IG1bMTBdICogdjEyICsgbVsxNF07XHJcblxyXG4gICAgICAgICAgICBtYXhbMF0gPSBtWzBdICogdjMwICsgbVsxMl07XHJcbiAgICAgICAgICAgIG1heFsxXSA9IG1bNV0gKiB2MzEgKyBtWzEzXTtcclxuICAgICAgICAgICAgbWluWzJdID0gbVsxMF0gKiB2MzIgKyBtWzE0XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciB3ID0gLTEgLyB2MTI7XHJcbiAgICAgICAgICAgIG1pblswXSA9IG1bMF0gKiB2MTAgKiB3O1xyXG4gICAgICAgICAgICBtaW5bMV0gPSBtWzVdICogdjExICogdztcclxuICAgICAgICAgICAgbWF4WzJdID0gKG1bMTBdICogdjEyICsgbVsxNF0pICogdztcclxuXHJcbiAgICAgICAgICAgIHcgPSAtMSAvIHYyMjtcclxuICAgICAgICAgICAgbWF4WzBdID0gbVswXSAqIHYyMCAqIHc7XHJcbiAgICAgICAgICAgIG1heFsxXSA9IG1bNV0gKiB2MjEgKiB3O1xyXG5cclxuICAgICAgICAgICAgdyA9IC0xIC8gdjMyO1xyXG4gICAgICAgICAgICBtaW5bMl0gPSAobVsxMF0gKiB2MzIgKyBtWzE0XSkgKiB3O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubWF4Ll9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVWZXJ0aWNlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XHJcbiAgICAgICAgaWYgKCF2ZXJ0aWNlcykge1xyXG4gICAgICAgICAgICAvLyBDdWJlIHZlcnRpY2VzXHJcbiAgICAgICAgICAgIHZlcnRpY2VzID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNlc1tpXSA9IHZlYzMuZnJvbVZhbHVlcygwLCAwLCAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIEVpZ2h0IGNvb3JkcyBvZiBib3VuZGluZyBib3hcclxuICAgICAgICAgICAgICogQHR5cGUge0Zsb2F0MzJBcnJheVtdfVxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbWluID0gdGhpcy5taW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4LmFycmF5O1xyXG4gICAgICAgIC8vLS0tIG1pbiB6XHJcbiAgICAgICAgLy8gbWluIHhcclxuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzBdLCBtaW5bMF0sIG1pblsxXSwgbWluWzJdKTtcclxuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzFdLCBtaW5bMF0sIG1heFsxXSwgbWluWzJdKTtcclxuICAgICAgICAvLyBtYXggeFxyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbMl0sIG1heFswXSwgbWluWzFdLCBtaW5bMl0pO1xyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbM10sIG1heFswXSwgbWF4WzFdLCBtaW5bMl0pO1xyXG5cclxuICAgICAgICAvLy0tIG1heCB6XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s0XSwgbWluWzBdLCBtaW5bMV0sIG1heFsyXSk7XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s1XSwgbWluWzBdLCBtYXhbMV0sIG1heFsyXSk7XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s2XSwgbWF4WzBdLCBtaW5bMV0sIG1heFsyXSk7XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s3XSwgbWF4WzBdLCBtYXhbMV0sIG1heFsyXSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29weSB2YWx1ZXMgZnJvbSBhbm90aGVyIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5Cb3VuZGluZ0JveH0gYmJveFxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbiAoYmJveCkge1xyXG4gICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbjtcclxuICAgICAgICB2YXIgbWF4ID0gdGhpcy5tYXg7XHJcbiAgICAgICAgdmVjM0NvcHkobWluLmFycmF5LCBiYm94Lm1pbi5hcnJheSk7XHJcbiAgICAgICAgdmVjM0NvcHkobWF4LmFycmF5LCBiYm94Lm1heC5hcnJheSk7XHJcbiAgICAgICAgbWluLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LkJvdW5kaW5nQm94fVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIGJvdW5kaW5nQm94LmNvcHkodGhpcyk7XHJcbiAgICAgICAgcmV0dXJuIGJvdW5kaW5nQm94O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQm91bmRpbmdCb3g7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgUXVhdGVybmlvbiBmcm9tICcuL21hdGgvUXVhdGVybmlvbic7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4vbWF0aC9NYXRyaXg0JztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcblxyXG52YXIgbmFtZUlkID0gMDtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5Ob2RlXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgTm9kZSA9IEJhc2UuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5Ob2RlIyAqL3tcclxuICAgIC8qKlxyXG4gICAgICogU2NlbmUgbm9kZSBuYW1lXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICBuYW1lOiAnJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBvc2l0aW9uIHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgbm9kZS4gYWthIHRyYW5zbGF0aW9uLlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgcG9zaXRpb246IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGlvbiByZWxhdGl2ZSB0byBpdHMgcGFyZW50IG5vZGUuIFJlcHJlc2VudGVkIGJ5IGEgcXVhdGVybmlvblxyXG4gICAgICogQHR5cGUge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgcm90YXRpb246IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSByZWxhdGl2ZSB0byBpdHMgcGFyZW50IG5vZGVcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggcmVsYXRpdmUgdG8gaXRzIHJvb3Qgc2NlbmUuXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICB3b3JsZFRyYW5zZm9ybTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFmZmluZSB0cmFuc2Zvcm0gbWF0cml4IHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgbm9kZS5cclxuICAgICAqIENvbXBvc2l0ZWQgd2l0aCBwb3NpdGlvbiwgcm90YXRpb24gYW5kIHNjYWxlLlxyXG4gICAgICogQHR5cGUge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgbG9jYWxUcmFuc2Zvcm06IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgbG9jYWwgdHJhbnNmb3JtIGlzIHVwZGF0ZSBmcm9tIFNSVChzY2FsZSwgcm90YXRpb24sIHRyYW5zbGF0aW9uLCB3aGljaCBpcyBwb3NpdGlvbiBoZXJlKSBlYWNoIGZyYW1lXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgYXV0b1VwZGF0ZUxvY2FsVHJhbnNmb3JtOiB0cnVlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFyZW50IG9mIGN1cnJlbnQgc2NlbmUgbm9kZVxyXG4gICAgICogQHR5cGUgez9jbGF5Lk5vZGV9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfcGFyZW50OiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcm9vdCBzY2VuZSBtb3VudGVkLiBOdWxsIGlmIGl0IGlzIGEgaXNvbGF0ZWQgbm9kZVxyXG4gICAgICogQHR5cGUgez9jbGF5LlNjZW5lfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX3NjZW5lOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9uZWVkc1VwZGF0ZVdvcmxkVHJhbnNmb3JtOiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9pbkl0ZXJhdGluZzogZmFsc2UsXHJcblxyXG4gICAgLy8gRGVwdGggZm9yIHRyYW5zcGFyZW50IGxpc3Qgc29ydGluZ1xyXG4gICAgX19kZXB0aDogMFxyXG5cclxufSwgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gKHRoaXMudHlwZSB8fCAnTk9ERScpICsgJ18nICsgKG5hbWVJZCsrKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMucG9zaXRpb24pIHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5yb3RhdGlvbikge1xyXG4gICAgICAgIHRoaXMucm90YXRpb24gPSBuZXcgUXVhdGVybmlvbigpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnNjYWxlKSB7XHJcbiAgICAgICAgdGhpcy5zY2FsZSA9IG5ldyBWZWN0b3IzKDEsIDEsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgdGhpcy5sb2NhbFRyYW5zZm9ybSA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4gICAgdGhpcy5fY2hpbGRyZW4gPSBbXTtcclxuXHJcbn0sXHJcbi8qKkBsZW5kcyBjbGF5Lk5vZGUucHJvdG90eXBlLiAqL1xyXG57XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmVjdG9yM31cclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICB0YXJnZXQ6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIElmIG5vZGUgYW5kIGl0cyBjaGlscmVuIGludmlzaWJsZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgaW52aXNpYmxlOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIE5vZGUgaXMgYSBza2lubmVkIG1lc2hcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzU2tpbm5lZE1lc2g6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhIHJlbmRlcmFibGUgc2NlbmUgbm9kZSwgbGlrZSBNZXNoIGFuZCBQYXJ0aWNsZVN5c3RlbVxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNSZW5kZXJhYmxlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgbmFtZSBvZiB0aGUgc2NlbmUgbm9kZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqL1xyXG4gICAgc2V0TmFtZTogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLl9zY2VuZTtcclxuICAgICAgICBpZiAoc2NlbmUpIHtcclxuICAgICAgICAgICAgdmFyIG5vZGVSZXBvc2l0b3J5ID0gc2NlbmUuX25vZGVSZXBvc2l0b3J5O1xyXG4gICAgICAgICAgICBkZWxldGUgbm9kZVJlcG9zaXRvcnlbdGhpcy5uYW1lXTtcclxuICAgICAgICAgICAgbm9kZVJlcG9zaXRvcnlbbmFtZV0gPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBhIGNoaWxkIG5vZGVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBub2RlXHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICB2YXIgb3JpZ2luYWxQYXJlbnQgPSBub2RlLl9wYXJlbnQ7XHJcbiAgICAgICAgaWYgKG9yaWdpbmFsUGFyZW50ID09PSB0aGlzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9yaWdpbmFsUGFyZW50KSB7XHJcbiAgICAgICAgICAgIG9yaWdpbmFsUGFyZW50LnJlbW92ZShub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbm9kZS5fcGFyZW50ID0gdGhpcztcclxuICAgICAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKG5vZGUpO1xyXG5cclxuICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLl9zY2VuZTtcclxuICAgICAgICBpZiAoc2NlbmUgJiYgc2NlbmUgIT09IG5vZGUuc2NlbmUpIHtcclxuICAgICAgICAgICAgbm9kZS50cmF2ZXJzZSh0aGlzLl9hZGRTZWxmVG9TY2VuZSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1hcmsgY2hpbGRyZW4gbmVlZHMgdXBkYXRlIHRyYW5zZm9ybVxyXG4gICAgICAgIC8vIEluIGNhc2UgY2hpbGQgYXJlIHJlbW92ZSBhbmQgYWRkZWQgYWdhaW4gYWZ0ZXIgcGFyZW50IG1vdmVkXHJcbiAgICAgICAgbm9kZS5fbmVlZHNVcGRhdGVXb3JsZFRyYW5zZm9ybSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIHRoZSBnaXZlbiBjaGlsZCBzY2VuZSBub2RlXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxyXG4gICAgICovXHJcbiAgICByZW1vdmU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcbiAgICAgICAgdmFyIGlkeCA9IGNoaWxkcmVuLmluZGV4T2Yobm9kZSk7XHJcbiAgICAgICAgaWYgKGlkeCA8IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgbm9kZS5fcGFyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3NjZW5lKSB7XHJcbiAgICAgICAgICAgIG5vZGUudHJhdmVyc2UodGhpcy5fcmVtb3ZlU2VsZkZyb21TY2VuZSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhbGwgY2hpbGRyZW5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcblxyXG4gICAgICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGNoaWxkcmVuLmxlbmd0aDsgaWR4KyspIHtcclxuICAgICAgICAgICAgY2hpbGRyZW5baWR4XS5fcGFyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zY2VuZSkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5baWR4XS50cmF2ZXJzZSh0aGlzLl9yZW1vdmVTZWxmRnJvbVNjZW5lLCB0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fY2hpbGRyZW4gPSBbXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIHNjZW5lIG1vdW50ZWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuU2NlbmV9XHJcbiAgICAgKi9cclxuICAgIGdldFNjZW5lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NjZW5lO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBwYXJlbnQgbm9kZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5TY2VuZX1cclxuICAgICAqL1xyXG4gICAgZ2V0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcclxuICAgIH0sXHJcblxyXG4gICAgX3JlbW92ZVNlbGZGcm9tU2NlbmU6IGZ1bmN0aW9uIChkZXNjZW5kYW50KSB7XHJcbiAgICAgICAgZGVzY2VuZGFudC5fc2NlbmUucmVtb3ZlRnJvbVNjZW5lKGRlc2NlbmRhbnQpO1xyXG4gICAgICAgIGRlc2NlbmRhbnQuX3NjZW5lID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgX2FkZFNlbGZUb1NjZW5lOiBmdW5jdGlvbiAoZGVzY2VuZGFudCkge1xyXG4gICAgICAgIHRoaXMuX3NjZW5lLmFkZFRvU2NlbmUoZGVzY2VuZGFudCk7XHJcbiAgICAgICAgZGVzY2VuZGFudC5fc2NlbmUgPSB0aGlzLl9zY2VuZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhbmNlc3RvciBvZiB0aGUgZ2l2ZW4gc2NlbmUgbm9kZVxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk5vZGV9IG5vZGVcclxuICAgICAqL1xyXG4gICAgaXNBbmNlc3RvcjogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICB2YXIgcGFyZW50ID0gbm9kZS5fcGFyZW50O1xyXG4gICAgICAgIHdoaWxlKHBhcmVudCkge1xyXG4gICAgICAgICAgICBpZiAocGFyZW50ID09PSB0aGlzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQuX3BhcmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhIG5ldyBjcmVhdGVkIGFycmF5IG9mIGFsbCBjaGlsZHJlbiBub2Rlc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlW119XHJcbiAgICAgKi9cclxuICAgIGNoaWxkcmVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuLnNsaWNlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGNoaWxkIHNjZW5lIG5vZGUgYXQgZ2l2ZW4gaW5kZXguXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XHJcbiAgICAgKi9cclxuICAgIGNoaWxkQXQ6IGZ1bmN0aW9uIChpZHgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW5baWR4XTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZmlyc3QgY2hpbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2hpbGRCeU5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0ubmFtZSA9PT0gbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBmaXJzdCBkZXNjZW5kYW50IGhhdmUgdGhlIGdpdmVuIG5hbWVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XHJcbiAgICAgKi9cclxuICAgIGdldERlc2NlbmRhbnRCeU5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkLm5hbWUgPT09IG5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXMgPSBjaGlsZC5nZXREZXNjZW5kYW50QnlOYW1lKG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUXVlcnkgZGVzY2VuZGFudCBub2RlIGJ5IHBhdGhcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogIG5vZGUucXVlcnlOb2RlKCdyb290L3BhcmVudC9jaGlsZCcpO1xyXG4gICAgICovXHJcbiAgICBxdWVyeU5vZGU6IGZ1bmN0aW9uIChwYXRoKSB7XHJcbiAgICAgICAgaWYgKCFwYXRoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETyBOYW1lIGhhdmUgc2xhc2ggP1xyXG4gICAgICAgIHZhciBwYXRoQXJyID0gcGF0aC5zcGxpdCgnLycpO1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhBcnIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSBwYXRoQXJyW2ldO1xyXG4gICAgICAgICAgICAvLyBTa2lwIGVtcHR5XHJcbiAgICAgICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IGN1cnJlbnQuX2NoaWxkcmVuO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltqXTtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5uYW1lID09PSBuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBFYXJseSByZXR1cm4gaWYgbm90IGZvdW5kXHJcbiAgICAgICAgICAgIGlmICghZm91bmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHF1ZXJ5IHBhdGgsIHJlbGF0aXZlIHRvIHJvb3ROb2RlKGRlZmF1bHQgaXMgc2NlbmUpXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3Jvb3ROb2RlXVxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICBnZXRQYXRoOiBmdW5jdGlvbiAocm9vdE5vZGUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJy8nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLl9wYXJlbnQ7XHJcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLm5hbWU7XHJcbiAgICAgICAgd2hpbGUgKGN1cnJlbnQuX3BhcmVudCkge1xyXG4gICAgICAgICAgICBwYXRoID0gY3VycmVudC5uYW1lICsgJy8nICsgcGF0aDtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnQuX3BhcmVudCA9PSByb290Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuX3BhcmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFjdXJyZW50Ll9wYXJlbnQgJiYgcm9vdE5vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlcHRoIGZpcnN0IHRyYXZlcnNlIGFsbCBpdHMgZGVzY2VuZGFudCBzY2VuZSBub2Rlcy5cclxuICAgICAqXHJcbiAgICAgKiAqKldBUk4qKiBEb24ndCBkbyBgYWRkYCwgYHJlbW92ZWAgb3BlcmF0aW9uIGluIHRoZSBjYWxsYmFjayBkdXJpbmcgdHJhdmVyc2UuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAgICogQHBhcmFtIHtOb2RlfSBbY29udGV4dF1cclxuICAgICAqL1xyXG4gICAgdHJhdmVyc2U6IGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4dCkge1xyXG4gICAgICAgIGNhbGxiYWNrLmNhbGwoY29udGV4dCwgdGhpcyk7XHJcbiAgICAgICAgdmFyIF9jaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IF9jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBfY2hpbGRyZW5baV0udHJhdmVyc2UoY2FsbGJhY2ssIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmF2ZXJzZSBhbGwgY2hpbGRyZW4gbm9kZXMuXHJcbiAgICAgKlxyXG4gICAgICogKipXQVJOKiogRE9OJ1QgZG8gYGFkZGAsIGByZW1vdmVgIG9wZXJhdGlvbiBpbiB0aGUgY2FsbGJhY2sgZHVyaW5nIGl0ZXJhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAgICogQHBhcmFtIHtOb2RlfSBbY29udGV4dF1cclxuICAgICAqL1xyXG4gICAgZWFjaENoaWxkOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNvbnRleHQpIHtcclxuICAgICAgICB2YXIgX2NoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcbiAgICAgICAgZm9yKHZhciBpID0gMCwgbGVuID0gX2NoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IF9jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgY2FsbGJhY2suY2FsbChjb250ZXh0LCBjaGlsZCwgaSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgbG9jYWwgdHJhbnNmb3JtIGFuZCBkZWNvbXBvc2UgdG8gU1JUXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gbWF0cml4XHJcbiAgICAgKi9cclxuICAgIHNldExvY2FsVHJhbnNmb3JtOiBmdW5jdGlvbiAobWF0cml4KSB7XHJcbiAgICAgICAgbWF0NC5jb3B5KHRoaXMubG9jYWxUcmFuc2Zvcm0uYXJyYXksIG1hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5kZWNvbXBvc2VMb2NhbFRyYW5zZm9ybSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlY29tcG9zZSB0aGUgbG9jYWwgdHJhbnNmb3JtIHRvIFNSVFxyXG4gICAgICovXHJcbiAgICBkZWNvbXBvc2VMb2NhbFRyYW5zZm9ybTogZnVuY3Rpb24gKGtlZXBTY2FsZSkge1xyXG4gICAgICAgIHZhciBzY2FsZSA9ICFrZWVwU2NhbGUgPyB0aGlzLnNjYWxlOiBudWxsO1xyXG4gICAgICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0uZGVjb21wb3NlTWF0cml4KHNjYWxlLCB0aGlzLnJvdGF0aW9uLCB0aGlzLnBvc2l0aW9uKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHdvcmxkIHRyYW5zZm9ybSBhbmQgZGVjb21wb3NlIHRvIFNSVFxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBzZXRXb3JsZFRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG4gICAgICAgIG1hdDQuY29weSh0aGlzLndvcmxkVHJhbnNmb3JtLmFycmF5LCBtYXRyaXguYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuZGVjb21wb3NlV29ybGRUcmFuc2Zvcm0oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNvbXBvc2UgdGhlIHdvcmxkIHRyYW5zZm9ybSB0byBTUlRcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICovXHJcbiAgICBkZWNvbXBvc2VXb3JsZFRyYW5zZm9ybTogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIHRtcCA9IG1hdDQuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoa2VlcFNjYWxlKSB7XHJcbiAgICAgICAgICAgIHZhciBsb2NhbFRyYW5zZm9ybSA9IHRoaXMubG9jYWxUcmFuc2Zvcm07XHJcbiAgICAgICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XHJcbiAgICAgICAgICAgIC8vIEFzc3VtZSB3b3JsZCB0cmFuc2Zvcm0gaXMgdXBkYXRlZFxyXG4gICAgICAgICAgICBpZiAodGhpcy5fcGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBtYXQ0LmludmVydCh0bXAsIHRoaXMuX3BhcmVudC53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KGxvY2FsVHJhbnNmb3JtLmFycmF5LCB0bXAsIHdvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1hdDQuY29weShsb2NhbFRyYW5zZm9ybS5hcnJheSwgd29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBzY2FsZSA9ICFrZWVwU2NhbGUgPyB0aGlzLnNjYWxlOiBudWxsO1xyXG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5kZWNvbXBvc2VNYXRyaXgoc2NhbGUsIHRoaXMucm90YXRpb24sIHRoaXMucG9zaXRpb24pO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIHRyYW5zZm9ybU5lZWRzVXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24uX2RpcnR5XHJcbiAgICAgICAgICAgIHx8IHRoaXMucm90YXRpb24uX2RpcnR5XHJcbiAgICAgICAgICAgIHx8IHRoaXMuc2NhbGUuX2RpcnR5O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBsb2NhbCB0cmFuc2Zvcm0gZnJvbSBTUlRcclxuICAgICAqIE5vdGljZSB0aGF0IGxvY2FsIHRyYW5zZm9ybSB3aWxsIG5vdCBiZSB1cGRhdGVkIGlmIF9kaXJ0eSBtYXJrIG9mIHBvc2l0aW9uLCByb3RhdGlvbiwgc2NhbGUgaXMgYWxsIGZhbHNlXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUxvY2FsVHJhbnNmb3JtOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgcm90YXRpb24gPSB0aGlzLnJvdGF0aW9uO1xyXG4gICAgICAgIHZhciBzY2FsZSA9IHRoaXMuc2NhbGU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybU5lZWRzVXBkYXRlKCkpIHtcclxuICAgICAgICAgICAgdmFyIG0gPSB0aGlzLmxvY2FsVHJhbnNmb3JtLmFycmF5O1xyXG5cclxuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIG9yZGVyLCBzY2FsZS0+cm90YXRpb24tPnBvc2l0aW9uXHJcbiAgICAgICAgICAgIG1hdDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24obSwgcm90YXRpb24uYXJyYXksIHBvc2l0aW9uLmFycmF5KTtcclxuXHJcbiAgICAgICAgICAgIG1hdDQuc2NhbGUobSwgbSwgc2NhbGUuYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgcm90YXRpb24uX2RpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNjYWxlLl9kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBwb3NpdGlvbi5fZGlydHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgd29ybGQgdHJhbnNmb3JtLCBhc3N1bWUgaXRzIHBhcmVudCB3b3JsZCB0cmFuc2Zvcm0gaGF2ZSBiZWVuIHVwZGF0ZWRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF91cGRhdGVXb3JsZFRyYW5zZm9ybVRvcERvd246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbG9jYWxUcmFuc2Zvcm0gPSB0aGlzLmxvY2FsVHJhbnNmb3JtLmFycmF5O1xyXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0uYXJyYXk7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5QWZmaW5lKFxyXG4gICAgICAgICAgICAgICAgd29ybGRUcmFuc2Zvcm0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnQud29ybGRUcmFuc2Zvcm0uYXJyYXksXHJcbiAgICAgICAgICAgICAgICBsb2NhbFRyYW5zZm9ybVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWF0NC5jb3B5KHdvcmxkVHJhbnNmb3JtLCBsb2NhbFRyYW5zZm9ybSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB3b3JsZCB0cmFuc2Zvcm0gYmVmb3JlIHdob2xlIHNjZW5lIGlzIHVwZGF0ZWQuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVdvcmxkVHJhbnNmb3JtOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gRmluZCB0aGUgcm9vdCBub2RlIHdoaWNoIHRyYW5zZm9ybSBuZWVkcyB1cGRhdGU7XHJcbiAgICAgICAgdmFyIHJvb3ROb2RlSXNEaXJ0eSA9IHRoaXM7XHJcbiAgICAgICAgd2hpbGUgKHJvb3ROb2RlSXNEaXJ0eSAmJiByb290Tm9kZUlzRGlydHkuZ2V0UGFyZW50KClcclxuICAgICAgICAgICAgJiYgcm9vdE5vZGVJc0RpcnR5LmdldFBhcmVudCgpLnRyYW5zZm9ybU5lZWRzVXBkYXRlKClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcm9vdE5vZGVJc0RpcnR5ID0gcm9vdE5vZGVJc0RpcnR5LmdldFBhcmVudCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb290Tm9kZUlzRGlydHkudXBkYXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIGxvY2FsIHRyYW5zZm9ybSBhbmQgd29ybGQgdHJhbnNmb3JtIHJlY3Vyc2l2ZWx5XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlVXBkYXRlV29ybGRcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZm9yY2VVcGRhdGVXb3JsZCkge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9VcGRhdGVMb2NhbFRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gaXMgbWFudWFsbHkgc2V0dGVkXHJcbiAgICAgICAgICAgIGZvcmNlVXBkYXRlV29ybGQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZvcmNlVXBkYXRlV29ybGQgfHwgdGhpcy5fbmVlZHNVcGRhdGVXb3JsZFRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVXb3JsZFRyYW5zZm9ybVRvcERvd24oKTtcclxuICAgICAgICAgICAgZm9yY2VVcGRhdGVXb3JsZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0gPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZShmb3JjZVVwZGF0ZVdvcmxkKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGJvdW5kaW5nIGJveCBvZiBub2RlXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW2ZpbHRlcl1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuQm91bmRpbmdCb3h9IFtvdXRdXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LkJvdW5kaW5nQm94fVxyXG4gICAgICovXHJcbiAgICAvLyBUT0RPIFNraW5uaW5nXHJcbiAgICBnZXRCb3VuZGluZ0JveDogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmdW5jdGlvbiBkZWZhdWx0RmlsdGVyIChlbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIWVsLmludmlzaWJsZSAmJiBlbC5nZW9tZXRyeTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHRtcEJCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB2YXIgdG1wTWF0NCA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgdmFyIGludldvcmxkVHJhbnNmb3JtID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZpbHRlciwgb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG91dCB8fCBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICAgICAgZmlsdGVyID0gZmlsdGVyIHx8IGRlZmF1bHRGaWx0ZXI7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fcGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBNYXRyaXg0LmludmVydChpbnZXb3JsZFRyYW5zZm9ybSwgdGhpcy5fcGFyZW50LndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIE1hdHJpeDQuaWRlbnRpdHkoaW52V29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRyYXZlcnNlKGZ1bmN0aW9uIChtZXNoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWVzaC5nZW9tZXRyeSAmJiBtZXNoLmdlb21ldHJ5LmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG1wQkJveC5jb3B5KG1lc2guZ2VvbWV0cnkuYm91bmRpbmdCb3gpO1xyXG4gICAgICAgICAgICAgICAgICAgIE1hdHJpeDQubXVsdGlwbHkodG1wTWF0NCwgaW52V29ybGRUcmFuc2Zvcm0sIG1lc2gud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcEJCb3guYXBwbHlUcmFuc2Zvcm0odG1wTWF0NCk7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0LnVuaW9uKHRtcEJCb3gpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCB0aGlzLCBkZWZhdWx0RmlsdGVyKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgd29ybGQgcG9zaXRpb24sIGV4dHJhY3RlZCBmcm9tIHdvcmxkIHRyYW5zZm9ybVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBbb3V0XVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBnZXRXb3JsZFBvc2l0aW9uOiBmdW5jdGlvbiAob3V0KSB7XHJcbiAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybU5lZWRzVXBkYXRlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbSA9IHRoaXMud29ybGRUcmFuc2Zvcm0uYXJyYXk7XHJcbiAgICAgICAgaWYgKG91dCkge1xyXG4gICAgICAgICAgICB2YXIgYXJyID0gb3V0LmFycmF5O1xyXG4gICAgICAgICAgICBhcnJbMF0gPSBtWzEyXTtcclxuICAgICAgICAgICAgYXJyWzFdID0gbVsxM107XHJcbiAgICAgICAgICAgIGFyclsyXSA9IG1bMTRdO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKG1bMTJdLCBtWzEzXSwgbVsxNF0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBub2RlXHJcbiAgICAgKiBAcmV0dXJuIHtOb2RlfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBub2RlID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKTtcclxuXHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcblxyXG4gICAgICAgIG5vZGUuc2V0TmFtZSh0aGlzLm5hbWUpO1xyXG4gICAgICAgIG5vZGUucG9zaXRpb24uY29weSh0aGlzLnBvc2l0aW9uKTtcclxuICAgICAgICBub2RlLnJvdGF0aW9uLmNvcHkodGhpcy5yb3RhdGlvbik7XHJcbiAgICAgICAgbm9kZS5zY2FsZS5jb3B5KHRoaXMuc2NhbGUpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG5vZGUuYWRkKGNoaWxkcmVuW2ldLmNsb25lKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHRoZSBub2RlIGFyb3VuZCBhIGF4aXMgYnkgYW5nbGUgZGVncmVlcywgYXhpcyBwYXNzZXMgdGhyb3VnaCBwb2ludFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHBvaW50IENlbnRlciBwb2ludFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IGF4aXMgIENlbnRlciBheGlzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gICAgICAgYW5nbGUgUm90YXRpb24gYW5nbGVcclxuICAgICAqIEBzZWUgaHR0cDovL2RvY3MudW5pdHkzZC5jb20vRG9jdW1lbnRhdGlvbi9TY3JpcHRSZWZlcmVuY2UvVHJhbnNmb3JtLlJvdGF0ZUFyb3VuZC5odG1sXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqL1xyXG4gICAgcm90YXRlQXJvdW5kOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB2YXIgUlRNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuICAgICAgICAvLyBUT0RPIGltcHJvdmUgcGVyZm9ybWFuY2VcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHBvaW50LCBheGlzLCBhbmdsZSkge1xyXG5cclxuICAgICAgICAgICAgdi5jb3B5KHRoaXMucG9zaXRpb24pLnN1YnRyYWN0KHBvaW50KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBsb2NhbFRyYW5zZm9ybSA9IHRoaXMubG9jYWxUcmFuc2Zvcm07XHJcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLmlkZW50aXR5KCk7XHJcbiAgICAgICAgICAgIC8vIHBhcmVudCBub2RlXHJcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZShwb2ludCk7XHJcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLnJvdGF0ZShhbmdsZSwgYXhpcyk7XHJcblxyXG4gICAgICAgICAgICBSVE1hdHJpeC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbih0aGlzLnJvdGF0aW9uLCB2KTtcclxuICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm0ubXVsdGlwbHkoUlRNYXRyaXgpO1xyXG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5zY2FsZSh0aGlzLnNjYWxlKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGVjb21wb3NlTG9jYWxUcmFuc2Zvcm0oKTtcclxuICAgICAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGVXb3JsZFRyYW5zZm9ybSA9IHRydWU7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW3VwXVxyXG4gICAgICogQHNlZSBodHRwOi8vd3d3Lm9wZW5nbC5vcmcvc2RrL2RvY3MvbWFuMi94aHRtbC9nbHVMb29rQXQueG1sXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqL1xyXG4gICAgbG9va0F0OiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdXApIHtcclxuICAgICAgICAgICAgbS5sb29rQXQodGhpcy5wb3NpdGlvbiwgdGFyZ2V0LCB1cCB8fCB0aGlzLmxvY2FsVHJhbnNmb3JtLnkpLmludmVydCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNldExvY2FsVHJhbnNmb3JtKG0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKClcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBOb2RlO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcInZlYzMgY2FsY0FtYmllbnRTSExpZ2h0KGludCBpZHgsIHZlYzMgTikge1xcbiBpbnQgb2Zmc2V0ID0gOSAqIGlkeDtcXG4gcmV0dXJuIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzBdXFxuICsgYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbMV0gKiBOLnhcXG4gKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1syXSAqIE4ueVxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzNdICogTi56XFxuICsgYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbNF0gKiBOLnggKiBOLnpcXG4gKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1s1XSAqIE4ueiAqIE4ueVxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzZdICogTi55ICogTi54XFxuICsgYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbN10gKiAoMy4wICogTi56ICogTi56IC0gMS4wKVxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzhdICogKE4ueCAqIE4ueCAtIE4ueSAqIE4ueSk7XFxufVwiO1xyXG4iLCJpbXBvcnQgY2FsY0FtYmllbnRTSExpZ2h0RXNzbCBmcm9tICcuL2NhbGNBbWJpZW50U0hMaWdodC5nbHNsLmpzJztcclxuXHJcbnZhciB1bmlmb3JtVmVjM1ByZWZpeCA9ICd1bmlmb3JtIHZlYzMgJztcclxudmFyIHVuaWZvcm1GbG9hdFByZWZpeCA9ICd1bmlmb3JtIGZsb2F0ICc7XHJcbnZhciBleHBvcnRIZWFkZXJQcmVmaXggPSAnQGV4cG9ydCBjbGF5LmhlYWRlci4nO1xyXG52YXIgZXhwb3J0RW5kID0gJ0BlbmQnO1xyXG52YXIgdW5jb25maWd1cmFibGUgPSAnOnVuY29uZmlndXJhYmxlOyc7XHJcbmV4cG9ydCBkZWZhdWx0IFtcclxuICAgIGV4cG9ydEhlYWRlclByZWZpeCArICdkaXJlY3Rpb25hbF9saWdodCcsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdkaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9uW0RJUkVDVElPTkFMX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ2RpcmVjdGlvbmFsTGlnaHRDb2xvcltESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICBleHBvcnRFbmQsXHJcblxyXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ2FtYmllbnRfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnYW1iaWVudExpZ2h0Q29sb3JbQU1CSUVOVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICBleHBvcnRFbmQsXHJcblxyXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ2FtYmllbnRfc2hfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnYW1iaWVudFNITGlnaHRDb2xvcltBTUJJRU5UX1NIX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ2FtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzW0FNQklFTlRfU0hfTElHSFRfQ09VTlQgKiA5XScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIGNhbGNBbWJpZW50U0hMaWdodEVzc2wsXHJcbiAgICBleHBvcnRFbmQsXHJcblxyXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ2FtYmllbnRfY3ViZW1hcF9saWdodCcsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdhbWJpZW50Q3ViZW1hcExpZ2h0Q29sb3JbQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgICd1bmlmb3JtIHNhbXBsZXJDdWJlIGFtYmllbnRDdWJlbWFwTGlnaHRDdWJlbWFwW0FNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgYW1iaWVudEN1YmVtYXBMaWdodEJSREZMb29rdXBbQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIGV4cG9ydEVuZCxcclxuXHJcbiAgICBleHBvcnRIZWFkZXJQcmVmaXggKyAncG9pbnRfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAncG9pbnRMaWdodFBvc2l0aW9uW1BPSU5UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1GbG9hdFByZWZpeCArICdwb2ludExpZ2h0UmFuZ2VbUE9JTlRfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAncG9pbnRMaWdodENvbG9yW1BPSU5UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIGV4cG9ydEVuZCxcclxuXHJcbiAgICBleHBvcnRIZWFkZXJQcmVmaXggKyAnc3BvdF9saWdodCcsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdzcG90TGlnaHRQb3NpdGlvbltTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ3Nwb3RMaWdodERpcmVjdGlvbltTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1GbG9hdFByZWZpeCArICdzcG90TGlnaHRSYW5nZVtTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1GbG9hdFByZWZpeCArICdzcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lW1NQT1RfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgdW5pZm9ybUZsb2F0UHJlZml4ICsgJ3Nwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmVbU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAnc3BvdExpZ2h0RmFsbG9mZkZhY3RvcltTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ3Nwb3RMaWdodENvbG9yW1NQT1RfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgZXhwb3J0RW5kXHJcbl0uam9pbignXFxuJyk7XHJcbiIsImltcG9ydCBOb2RlIGZyb20gJy4vTm9kZSc7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi9TaGFkZXInO1xyXG5cclxuaW1wb3J0IGxpZ2h0U2hhZGVyIGZyb20gJy4vc2hhZGVyL3NvdXJjZS9oZWFkZXIvbGlnaHQnO1xyXG5TaGFkZXJbJ2ltcG9ydCddKGxpZ2h0U2hhZGVyKTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5MaWdodFxyXG4gKiBAZXh0ZW5kcyBjbGF5Lk5vZGVcclxuICovXHJcbnZhciBMaWdodCA9IE5vZGUuZXh0ZW5kKGZ1bmN0aW9uKCl7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LkxpZ2h0IyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTGlnaHQgUkdCIGNvbG9yXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcltdfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbG9yOiBbMSwgMSwgMV0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIExpZ2h0IGludGVuc2l0eVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW50ZW5zaXR5OiAxLjAsXHJcblxyXG4gICAgICAgIC8vIENvbmZpZyBmb3Igc2hhZG93IG1hcFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGxpZ2h0IGNhc3Qgc2hhZG93XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2FzdFNoYWRvdzogdHJ1ZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2hhZG93IG1hcCBzaXplXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzaGFkb3dSZXNvbHV0aW9uOiA1MTIsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIExpZ2h0IGdyb3VwLCBzaGFkZXIgd2l0aCBzYW1lIGBsaWdodEdyb3VwYCB3aWxsIGJlIGFmZmVjdGVkXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBPbmx5IHVzZWZ1bCBpbiBmb3J3YXJkIHJlbmRlcmluZ1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ3JvdXA6IDBcclxuICAgIH07XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5MaWdodC5wcm90b3R5cGUuICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogTGlnaHQgdHlwZVxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LkxpZ2h0I1xyXG4gICAgICovXHJcbiAgICB0eXBlOiAnJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTGlnaHR9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5MaWdodC5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBsaWdodCA9IE5vZGUucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICAgICAgbGlnaHQuY29sb3IgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmNvbG9yKTtcclxuICAgICAgICBsaWdodC5pbnRlbnNpdHkgPSB0aGlzLmludGVuc2l0eTtcclxuICAgICAgICBsaWdodC5jYXN0U2hhZG93ID0gdGhpcy5jYXN0U2hhZG93O1xyXG4gICAgICAgIGxpZ2h0LnNoYWRvd1Jlc29sdXRpb24gPSB0aGlzLnNoYWRvd1Jlc29sdXRpb247XHJcblxyXG4gICAgICAgIHJldHVybiBsaWdodDtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaWdodDtcclxuIiwiaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9WZWN0b3IzJztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0NCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5pbXBvcnQgdmVjNCBmcm9tICcuLi9nbG1hdHJpeC92ZWM0JztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuUGxhbmVcclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFtub3JtYWxdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZGlzdGFuY2VdXHJcbiAqL1xyXG52YXIgUGxhbmUgPSBmdW5jdGlvbihub3JtYWwsIGRpc3RhbmNlKSB7XHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbCBvZiB0aGUgcGxhbmVcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubm9ybWFsID0gbm9ybWFsIHx8IG5ldyBWZWN0b3IzKDAsIDEsIDApO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29uc3RhbnQgb2YgdGhlIHBsYW5lIGVxdWF0aW9uLCB1c2VkIGFzIGRpc3RhbmNlIHRvIHRoZSBvcmlnaW5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZGlzdGFuY2UgPSBkaXN0YW5jZSB8fCAwO1xyXG59O1xyXG5cclxuUGxhbmUucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBQbGFuZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGZyb20gYSBnaXZlbiBwb2ludCB0byB0aGUgcGxhbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gcG9pbnRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGlzdGFuY2VUb1BvaW50OiBmdW5jdGlvbihwb2ludCkge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLmRvdChwb2ludC5hcnJheSwgdGhpcy5ub3JtYWwuYXJyYXkpIC0gdGhpcy5kaXN0YW5jZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIHByb2plY3Rpb24gcG9pbnQgb24gdGhlIHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHBvaW50XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBwcm9qZWN0UG9pbnQ6IGZ1bmN0aW9uKHBvaW50LCBvdXQpIHtcclxuICAgICAgICBpZiAoIW91dCkge1xyXG4gICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZCA9IHRoaXMuZGlzdGFuY2VUb1BvaW50KHBvaW50KTtcclxuICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgcG9pbnQuYXJyYXksIHRoaXMubm9ybWFsLmFycmF5LCAtZCk7XHJcbiAgICAgICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWxpemUgdGhlIHBsYW5lJ3Mgbm9ybWFsIGFuZCBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGludkxlbiA9IDEgLyB2ZWMzLmxlbih0aGlzLm5vcm1hbC5hcnJheSk7XHJcbiAgICAgICAgdmVjMy5zY2FsZSh0aGlzLm5vcm1hbC5hcnJheSwgaW52TGVuKTtcclxuICAgICAgICB0aGlzLmRpc3RhbmNlICo9IGludkxlbjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgcGxhbmUgaW50ZXJzZWN0IGEgZnJ1c3R1bVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5GcnVzdHVtfSBGcnVzdHVtXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RGcnVzdHVtOiBmdW5jdGlvbihmcnVzdHVtKSB7XHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgYWxsIGNvb3JkcyBvZiBmcnVzdHVtIGlzIG9uIHBsYW5lIGFsbCB1bmRlciBwbGFuZVxyXG4gICAgICAgIHZhciBjb29yZHMgPSBmcnVzdHVtLnZlcnRpY2VzO1xyXG4gICAgICAgIHZhciBub3JtYWwgPSB0aGlzLm5vcm1hbC5hcnJheTtcclxuICAgICAgICB2YXIgb25QbGFuZSA9IHZlYzMuZG90KGNvb3Jkc1swXS5hcnJheSwgbm9ybWFsKSA+IHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCh2ZWMzLmRvdChjb29yZHNbaV0uYXJyYXksIG5vcm1hbCkgPiB0aGlzLmRpc3RhbmNlKSAhPSBvblBsYW5lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIHBsYW5lIGFuZCBhIGdpdmVuIGxpbmVcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHN0YXJ0IHN0YXJ0IHBvaW50IG9mIGxpbmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBlbmQgZW5kIHBvaW50IG9mIGxpbmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBbb3V0XVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RMaW5lOiAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHJkID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCwgb3V0KSB7XHJcbiAgICAgICAgICAgIHZhciBkMCA9IHRoaXMuZGlzdGFuY2VUb1BvaW50KHN0YXJ0KTtcclxuICAgICAgICAgICAgdmFyIGQxID0gdGhpcy5kaXN0YW5jZVRvUG9pbnQoZW5kKTtcclxuICAgICAgICAgICAgaWYgKChkMCA+IDAgJiYgZDEgPiAwKSB8fCAoZDAgPCAwICYmIGQxIDwgMCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFJheSBpbnRlcnNlY3Rpb25cclxuICAgICAgICAgICAgdmFyIHBuID0gdGhpcy5ub3JtYWwuYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBkID0gdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdmFyIHJvID0gc3RhcnQuYXJyYXk7XHJcbiAgICAgICAgICAgIC8vIGRpcmVjdGlvblxyXG4gICAgICAgICAgICB2ZWMzLnN1YihyZCwgZW5kLmFycmF5LCBzdGFydC5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHJkLCByZCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZGl2aWRlciA9IHZlYzMuZG90KHBuLCByZCk7XHJcbiAgICAgICAgICAgIC8vIHJheSBpcyBwYXJhbGxlbCB0byB0aGUgcGxhbmVcclxuICAgICAgICAgICAgaWYgKGRpdmlkZXIgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB0ID0gKHZlYzMuZG90KHBuLCBybykgLSBkKSAvIGRpdmlkZXI7XHJcbiAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBybywgcmQsIC10KTtcclxuICAgICAgICAgICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhbiBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCB0byBwbGFuZVxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGFwcGx5VHJhbnNmb3JtOiAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGludmVyc2VUcmFuc3Bvc2UgPSBtYXQ0LmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciBub3JtYWx2NCA9IHZlYzQuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHBvaW50djQgPSB2ZWM0LmNyZWF0ZSgpO1xyXG4gICAgICAgIHBvaW50djRbM10gPSAxO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihtNCkge1xyXG4gICAgICAgICAgICBtNCA9IG00LmFycmF5O1xyXG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gcG9pbnQgb24gcGxhbmVcclxuICAgICAgICAgICAgdmVjMy5zY2FsZShwb2ludHY0LCB0aGlzLm5vcm1hbC5hcnJheSwgdGhpcy5kaXN0YW5jZSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChwb2ludHY0LCBwb2ludHY0LCBtNCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzdGFuY2UgPSB2ZWMzLmRvdChwb2ludHY0LCB0aGlzLm5vcm1hbC5hcnJheSk7XHJcbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSBwbGFuZSBub3JtYWxcclxuICAgICAgICAgICAgbWF0NC5pbnZlcnQoaW52ZXJzZVRyYW5zcG9zZSwgbTQpO1xyXG4gICAgICAgICAgICBtYXQ0LnRyYW5zcG9zZShpbnZlcnNlVHJhbnNwb3NlLCBpbnZlcnNlVHJhbnNwb3NlKTtcclxuICAgICAgICAgICAgbm9ybWFsdjRbM10gPSAwO1xyXG4gICAgICAgICAgICB2ZWMzLmNvcHkobm9ybWFsdjQsIHRoaXMubm9ybWFsLmFycmF5KTtcclxuICAgICAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KG5vcm1hbHY0LCBub3JtYWx2NCwgaW52ZXJzZVRyYW5zcG9zZSk7XHJcbiAgICAgICAgICAgIHZlYzMuY29weSh0aGlzLm5vcm1hbC5hcnJheSwgbm9ybWFsdjQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGFub3RoZXIgcGxhbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gcGxhbmVcclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24ocGxhbmUpIHtcclxuICAgICAgICB2ZWMzLmNvcHkodGhpcy5ub3JtYWwuYXJyYXksIHBsYW5lLm5vcm1hbC5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5ub3JtYWwuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpc3RhbmNlID0gcGxhbmUuZGlzdGFuY2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgcGxhbmVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUGxhbmV9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgcGxhbmUgPSBuZXcgUGxhbmUoKTtcclxuICAgICAgICBwbGFuZS5jb3B5KHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBwbGFuZTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBsYW5lO1xyXG4iLCJpbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCBQbGFuZSBmcm9tICcuL1BsYW5lJztcclxuXHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxudmFyIHZlYzNTZXQgPSB2ZWMzLnNldDtcclxudmFyIHZlYzNDb3B5ID0gdmVjMy5jb3B5O1xyXG52YXIgdmVjM1RyYW5mb3JtTWF0NCA9IHZlYzMudHJhbnNmb3JtTWF0NDtcclxudmFyIG1hdGhNaW4gPSBNYXRoLm1pbjtcclxudmFyIG1hdGhNYXggPSBNYXRoLm1heDtcclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5GcnVzdHVtXHJcbiAqL1xyXG52YXIgRnJ1c3R1bSA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWlnaHQgcGxhbmVzIHRvIGVuY2xvc2UgdGhlIGZydXN0dW1cclxuICAgICAqIEB0eXBlIHtjbGF5LlBsYW5lW119XHJcbiAgICAgKi9cclxuICAgIHRoaXMucGxhbmVzID0gW107XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICB0aGlzLnBsYW5lcy5wdXNoKG5ldyBQbGFuZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEJvdW5kaW5nIGJveCBvZiBmcnVzdHVtXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAqL1xyXG4gICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWlnaHQgdmVydGljZXMgb2YgZnJ1c3R1bVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheVtdfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZlcnRpY2VzID0gW107XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xyXG4gICAgICAgIHRoaXMudmVydGljZXNbaV0gPSB2ZWMzLmZyb21WYWx1ZXMoMCwgMCwgMCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5GcnVzdHVtLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICAvLyBodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDEyMDUzMTIzMTAwNS9odHRwOi8vY3Jhenlqb2tlLmZyZWUuZnIvZG9jLzNEL3BsYW5lJTIwZXh0cmFjdGlvbi5wZGZcclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZydXN0dW0gZnJvbSBhIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gcHJvamVjdGlvbk1hdHJpeFxyXG4gICAgICovXHJcbiAgICBzZXRGcm9tUHJvamVjdGlvbjogZnVuY3Rpb24ocHJvamVjdGlvbk1hdHJpeCkge1xyXG5cclxuICAgICAgICB2YXIgcGxhbmVzID0gdGhpcy5wbGFuZXM7XHJcbiAgICAgICAgdmFyIG0gPSBwcm9qZWN0aW9uTWF0cml4LmFycmF5O1xyXG4gICAgICAgIHZhciBtMCA9IG1bMF0sIG0xID0gbVsxXSwgbTIgPSBtWzJdLCBtMyA9IG1bM107XHJcbiAgICAgICAgdmFyIG00ID0gbVs0XSwgbTUgPSBtWzVdLCBtNiA9IG1bNl0sIG03ID0gbVs3XTtcclxuICAgICAgICB2YXIgbTggPSBtWzhdLCBtOSA9IG1bOV0sIG0xMCA9IG1bMTBdLCBtMTEgPSBtWzExXTtcclxuICAgICAgICB2YXIgbTEyID0gbVsxMl0sIG0xMyA9IG1bMTNdLCBtMTQgPSBtWzE0XSwgbTE1ID0gbVsxNV07XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSBwbGFuZXNcclxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1swXS5ub3JtYWwuYXJyYXksIG0zIC0gbTAsIG03IC0gbTQsIG0xMSAtIG04KTtcclxuICAgICAgICBwbGFuZXNbMF0uZGlzdGFuY2UgPSAtKG0xNSAtIG0xMik7XHJcbiAgICAgICAgcGxhbmVzWzBdLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1sxXS5ub3JtYWwuYXJyYXksIG0zICsgbTAsIG03ICsgbTQsIG0xMSArIG04KTtcclxuICAgICAgICBwbGFuZXNbMV0uZGlzdGFuY2UgPSAtKG0xNSArIG0xMik7XHJcbiAgICAgICAgcGxhbmVzWzFdLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1syXS5ub3JtYWwuYXJyYXksIG0zICsgbTEsIG03ICsgbTUsIG0xMSArIG05KTtcclxuICAgICAgICBwbGFuZXNbMl0uZGlzdGFuY2UgPSAtKG0xNSArIG0xMyk7XHJcbiAgICAgICAgcGxhbmVzWzJdLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1szXS5ub3JtYWwuYXJyYXksIG0zIC0gbTEsIG03IC0gbTUsIG0xMSAtIG05KTtcclxuICAgICAgICBwbGFuZXNbM10uZGlzdGFuY2UgPSAtKG0xNSAtIG0xMyk7XHJcbiAgICAgICAgcGxhbmVzWzNdLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1s0XS5ub3JtYWwuYXJyYXksIG0zIC0gbTIsIG03IC0gbTYsIG0xMSAtIG0xMCk7XHJcbiAgICAgICAgcGxhbmVzWzRdLmRpc3RhbmNlID0gLShtMTUgLSBtMTQpO1xyXG4gICAgICAgIHBsYW5lc1s0XS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbNV0ubm9ybWFsLmFycmF5LCBtMyArIG0yLCBtNyArIG02LCBtMTEgKyBtMTApO1xyXG4gICAgICAgIHBsYW5lc1s1XS5kaXN0YW5jZSA9IC0obTE1ICsgbTE0KTtcclxuICAgICAgICBwbGFuZXNbNV0ubm9ybWFsaXplKCk7XHJcblxyXG4gICAgICAgIC8vIFBlcnNwZWN0aXZlIHByb2plY3Rpb25cclxuICAgICAgICB2YXIgYm91bmRpbmdCb3ggPSB0aGlzLmJvdW5kaW5nQm94O1xyXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XHJcbiAgICAgICAgaWYgKG0xNSA9PT0gMCkgIHtcclxuICAgICAgICAgICAgdmFyIGFzcGVjdCA9IG01IC8gbTA7XHJcbiAgICAgICAgICAgIHZhciB6TmVhciA9IC1tMTQgLyAobTEwIC0gMSk7XHJcbiAgICAgICAgICAgIHZhciB6RmFyID0gLW0xNCAvIChtMTAgKyAxKTtcclxuICAgICAgICAgICAgdmFyIGZhclkgPSAtekZhciAvIG01O1xyXG4gICAgICAgICAgICB2YXIgbmVhclkgPSAtek5lYXIgLyBtNTtcclxuICAgICAgICAgICAgLy8gVXBkYXRlIGJvdW5kaW5nIGJveFxyXG4gICAgICAgICAgICBib3VuZGluZ0JveC5taW4uc2V0KC1mYXJZICogYXNwZWN0LCAtZmFyWSwgekZhcik7XHJcbiAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1heC5zZXQoZmFyWSAqIGFzcGVjdCwgZmFyWSwgek5lYXIpO1xyXG4gICAgICAgICAgICAvLyB1cGRhdGUgdmVydGljZXNcclxuICAgICAgICAgICAgLy8tLS0gbWluIHpcclxuICAgICAgICAgICAgLy8gbWluIHhcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1swXSwgLWZhclkgKiBhc3BlY3QsIC1mYXJZLCB6RmFyKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1sxXSwgLWZhclkgKiBhc3BlY3QsIGZhclksIHpGYXIpO1xyXG4gICAgICAgICAgICAvLyBtYXggeFxyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzJdLCBmYXJZICogYXNwZWN0LCAtZmFyWSwgekZhcik7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbM10sIGZhclkgKiBhc3BlY3QsIGZhclksIHpGYXIpO1xyXG4gICAgICAgICAgICAvLy0tIG1heCB6XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNF0sIC1uZWFyWSAqIGFzcGVjdCwgLW5lYXJZLCB6TmVhcik7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNV0sIC1uZWFyWSAqIGFzcGVjdCwgbmVhclksIHpOZWFyKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s2XSwgbmVhclkgKiBhc3BlY3QsIC1uZWFyWSwgek5lYXIpO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzddLCBuZWFyWSAqIGFzcGVjdCwgbmVhclksIHpOZWFyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7IC8vIE9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uXHJcbiAgICAgICAgICAgIHZhciBsZWZ0ID0gKC0xIC0gbTEyKSAvIG0wO1xyXG4gICAgICAgICAgICB2YXIgcmlnaHQgPSAoMSAtIG0xMikgLyBtMDtcclxuICAgICAgICAgICAgdmFyIHRvcCA9ICgxIC0gbTEzKSAvIG01O1xyXG4gICAgICAgICAgICB2YXIgYm90dG9tID0gKC0xIC0gbTEzKSAvIG01O1xyXG4gICAgICAgICAgICB2YXIgbmVhciA9ICgtMSAtIG0xNCkgLyBtMTA7XHJcbiAgICAgICAgICAgIHZhciBmYXIgPSAoMSAtIG0xNCkgLyBtMTA7XHJcblxyXG5cclxuICAgICAgICAgICAgYm91bmRpbmdCb3gubWluLnNldChNYXRoLm1pbihsZWZ0LCByaWdodCksIE1hdGgubWluKGJvdHRvbSwgdG9wKSwgTWF0aC5taW4oZmFyLCBuZWFyKSk7XHJcbiAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1heC5zZXQoTWF0aC5tYXgocmlnaHQsIGxlZnQpLCBNYXRoLm1heCh0b3AsIGJvdHRvbSksIE1hdGgubWF4KG5lYXIsIGZhcikpO1xyXG5cclxuICAgICAgICAgICAgdmFyIG1pbiA9IGJvdW5kaW5nQm94Lm1pbi5hcnJheTtcclxuICAgICAgICAgICAgdmFyIG1heCA9IGJvdW5kaW5nQm94Lm1heC5hcnJheTtcclxuICAgICAgICAgICAgLy8tLS0gbWluIHpcclxuICAgICAgICAgICAgLy8gbWluIHhcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1swXSwgbWluWzBdLCBtaW5bMV0sIG1pblsyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbMV0sIG1pblswXSwgbWF4WzFdLCBtaW5bMl0pO1xyXG4gICAgICAgICAgICAvLyBtYXggeFxyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzJdLCBtYXhbMF0sIG1pblsxXSwgbWluWzJdKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1szXSwgbWF4WzBdLCBtYXhbMV0sIG1pblsyXSk7XHJcbiAgICAgICAgICAgIC8vLS0gbWF4IHpcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s0XSwgbWluWzBdLCBtaW5bMV0sIG1heFsyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNV0sIG1pblswXSwgbWF4WzFdLCBtYXhbMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzZdLCBtYXhbMF0sIG1pblsxXSwgbWF4WzJdKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s3XSwgbWF4WzBdLCBtYXhbMV0sIG1heFsyXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IGEgYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggYW5kIHNldCB0byB0aGUgZ2l2ZW4gYm91bmRpbmcgYm94XHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBwYXJhbSB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAqIEBwYXJhbSB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAqL1xyXG4gICAgZ2V0VHJhbnNmb3JtZWRCb3VuZGluZ0JveDogKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgdG1wVmVjMyA9IHZlYzMuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihiYm94LCBtYXRyaXgpIHtcclxuICAgICAgICAgICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcclxuXHJcbiAgICAgICAgICAgIHZhciBtNCA9IG1hdHJpeC5hcnJheTtcclxuICAgICAgICAgICAgdmFyIG1pbiA9IGJib3gubWluO1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gYmJveC5tYXg7XHJcbiAgICAgICAgICAgIHZhciBtaW5BcnIgPSBtaW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXhBcnIgPSBtYXguYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciB2ID0gdmVydGljZXNbMF07XHJcbiAgICAgICAgICAgIHZlYzNUcmFuZm9ybU1hdDQodG1wVmVjMywgdiwgbTQpO1xyXG4gICAgICAgICAgICB2ZWMzQ29weShtaW5BcnIsIHRtcFZlYzMpO1xyXG4gICAgICAgICAgICB2ZWMzQ29weShtYXhBcnIsIHRtcFZlYzMpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHYgPSB2ZXJ0aWNlc1tpXTtcclxuICAgICAgICAgICAgICAgIHZlYzNUcmFuZm9ybU1hdDQodG1wVmVjMywgdiwgbTQpO1xyXG5cclxuICAgICAgICAgICAgICAgIG1pbkFyclswXSA9IG1hdGhNaW4odG1wVmVjM1swXSwgbWluQXJyWzBdKTtcclxuICAgICAgICAgICAgICAgIG1pbkFyclsxXSA9IG1hdGhNaW4odG1wVmVjM1sxXSwgbWluQXJyWzFdKTtcclxuICAgICAgICAgICAgICAgIG1pbkFyclsyXSA9IG1hdGhNaW4odG1wVmVjM1syXSwgbWluQXJyWzJdKTtcclxuXHJcbiAgICAgICAgICAgICAgICBtYXhBcnJbMF0gPSBtYXRoTWF4KHRtcFZlYzNbMF0sIG1heEFyclswXSk7XHJcbiAgICAgICAgICAgICAgICBtYXhBcnJbMV0gPSBtYXRoTWF4KHRtcFZlYzNbMV0sIG1heEFyclsxXSk7XHJcbiAgICAgICAgICAgICAgICBtYXhBcnJbMl0gPSBtYXRoTWF4KHRtcFZlYzNbMl0sIG1heEFyclsyXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICBtYXguX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBiYm94O1xyXG4gICAgICAgIH07XHJcbiAgICB9KSAoKVxyXG59O1xyXG5leHBvcnQgZGVmYXVsdCBGcnVzdHVtO1xyXG4iLCJpbXBvcnQgVmVjdG9yMyBmcm9tICcuL1ZlY3RvcjMnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcbnZhciBFUFNJTE9OID0gMWUtNTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuUmF5XHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBbb3JpZ2luXVxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW2RpcmVjdGlvbl1cclxuICovXHJcbnZhciBSYXkgPSBmdW5jdGlvbiAob3JpZ2luLCBkaXJlY3Rpb24pIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW4gfHwgbmV3IFZlY3RvcjMoKTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5kaXJlY3Rpb24gPSBkaXJlY3Rpb24gfHwgbmV3IFZlY3RvcjMoKTtcclxufTtcclxuXHJcblJheS5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IFJheSxcclxuXHJcbiAgICAvLyBodHRwOi8vd3d3LnNpZ2dyYXBoLm9yZy9lZHVjYXRpb24vbWF0ZXJpYWxzL0h5cGVyR3JhcGgvcmF5dHJhY2UvcmF5cGxhbmVfaW50ZXJzZWN0aW9uLmh0bVxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgaW50ZXJzZWN0aW9uIHBvaW50IGJldHdlZW4gcmF5IGFuZCBhIGdpdmUgcGxhbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUGxhbmV9IHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IFtvdXRdXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdFBsYW5lOiBmdW5jdGlvbiAocGxhbmUsIG91dCkge1xyXG4gICAgICAgIHZhciBwbiA9IHBsYW5lLm5vcm1hbC5hcnJheTtcclxuICAgICAgICB2YXIgZCA9IHBsYW5lLmRpc3RhbmNlO1xyXG4gICAgICAgIHZhciBybyA9IHRoaXMub3JpZ2luLmFycmF5O1xyXG4gICAgICAgIHZhciByZCA9IHRoaXMuZGlyZWN0aW9uLmFycmF5O1xyXG5cclxuICAgICAgICB2YXIgZGl2aWRlciA9IHZlYzMuZG90KHBuLCByZCk7XHJcbiAgICAgICAgLy8gcmF5IGlzIHBhcmFsbGVsIHRvIHRoZSBwbGFuZVxyXG4gICAgICAgIGlmIChkaXZpZGVyID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW91dCkge1xyXG4gICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdCA9ICh2ZWMzLmRvdChwbiwgcm8pIC0gZCkgLyBkaXZpZGVyO1xyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBybywgcmQsIC10KTtcclxuICAgICAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1pcnJvciB0aGUgcmF5IGFnYWluc3QgcGxhbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUGxhbmV9IHBsYW5lXHJcbiAgICAgKi9cclxuICAgIG1pcnJvckFnYWluc3RQbGFuZTogZnVuY3Rpb24gKHBsYW5lKSB7XHJcbiAgICAgICAgLy8gRGlzdGFuY2UgdG8gcGxhbmVcclxuICAgICAgICB2YXIgZCA9IHZlYzMuZG90KHBsYW5lLm5vcm1hbC5hcnJheSwgdGhpcy5kaXJlY3Rpb24uYXJyYXkpO1xyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQodGhpcy5kaXJlY3Rpb24uYXJyYXksIHRoaXMuZGlyZWN0aW9uLmFycmF5LCBwbGFuZS5ub3JtYWwuYXJyYXksIC1kICogMik7XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZGlzdGFuY2VUb1BvaW50OiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2ID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYsIHBvaW50LCB0aGlzLm9yaWdpbi5hcnJheSk7XHJcbiAgICAgICAgICAgIC8vIERpc3RhbmNlIGZyb20gcHJvamVjdGlvbiBwb2ludCB0byBvcmlnaW5cclxuICAgICAgICAgICAgdmFyIGIgPSB2ZWMzLmRvdCh2LCB0aGlzLmRpcmVjdGlvbi5hcnJheSk7XHJcbiAgICAgICAgICAgIGlmIChiIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzMuZGlzdGFuY2UodGhpcy5vcmlnaW4uYXJyYXksIHBvaW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBTcXVhcmVkIGRpc3RhbmNlIGZyb20gY2VudGVyIHRvIG9yaWdpblxyXG4gICAgICAgICAgICB2YXIgYzIgPSB2ZWMzLmxlblNxdWFyZWQodik7XHJcbiAgICAgICAgICAgIC8vIFNxdWFyZWQgZGlzdGFuY2UgZnJvbSBjZW50ZXIgdG8gcHJvamVjdGlvbiBwb2ludFxyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KGMyIC0gYiAqIGIpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIHJheSBhbmQgc3BoZXJlXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGNlbnRlclxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSByYWRpdXNcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdFNwaGVyZTogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdiA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjZW50ZXIsIHJhZGl1cywgb3V0KSB7XHJcbiAgICAgICAgICAgIHZhciBvcmlnaW4gPSB0aGlzLm9yaWdpbi5hcnJheTtcclxuICAgICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmFycmF5O1xyXG4gICAgICAgICAgICBjZW50ZXIgPSBjZW50ZXIuYXJyYXk7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYsIGNlbnRlciwgb3JpZ2luKTtcclxuICAgICAgICAgICAgLy8gRGlzdGFuY2UgZnJvbSBwcm9qZWN0aW9uIHBvaW50IHRvIG9yaWdpblxyXG4gICAgICAgICAgICB2YXIgYiA9IHZlYzMuZG90KHYsIGRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgIC8vIFNxdWFyZWQgZGlzdGFuY2UgZnJvbSBjZW50ZXIgdG8gb3JpZ2luXHJcbiAgICAgICAgICAgIHZhciBjMiA9IHZlYzMuc3F1YXJlZExlbmd0aCh2KTtcclxuICAgICAgICAgICAgLy8gU3F1YXJlZCBkaXN0YW5jZSBmcm9tIGNlbnRlciB0byBwcm9qZWN0aW9uIHBvaW50XHJcbiAgICAgICAgICAgIHZhciBkMiA9IGMyIC0gYiAqIGI7XHJcblxyXG4gICAgICAgICAgICB2YXIgcjIgPSByYWRpdXMgKiByYWRpdXM7XHJcbiAgICAgICAgICAgIC8vIE5vIGludGVyc2VjdGlvblxyXG4gICAgICAgICAgICBpZiAoZDIgPiByMikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgYSA9IE1hdGguc3FydChyMiAtIGQyKTtcclxuICAgICAgICAgICAgLy8gRmlyc3QgaW50ZXJzZWN0IHBvaW50XHJcbiAgICAgICAgICAgIHZhciB0MCA9IGIgLSBhO1xyXG4gICAgICAgICAgICAvLyBTZWNvbmQgaW50ZXJzZWN0IHBvaW50XHJcbiAgICAgICAgICAgIHZhciB0MSA9IGIgKyBhO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHQwIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHQxIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIG9yaWdpbiwgZGlyZWN0aW9uLCB0MSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBvcmlnaW4sIGRpcmVjdGlvbiwgdDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8vIGh0dHA6Ly93d3cuc2NyYXRjaGFwaXhlbC5jb20vbGVzc29ucy8zZC1iYXNpYy1sZXNzb25zL2xlc3Nvbi03LWludGVyc2VjdGluZy1zaW1wbGUtc2hhcGVzL3JheS1ib3gtaW50ZXJzZWN0aW9uL1xyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgaW50ZXJzZWN0aW9uIHBvaW50IGJldHdlZW4gcmF5IGFuZCBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Cb3VuZGluZ0JveH0gYmJveFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdEJvdW5kaW5nQm94OiBmdW5jdGlvbiAoYmJveCwgb3V0KSB7XHJcbiAgICAgICAgdmFyIGRpciA9IHRoaXMuZGlyZWN0aW9uLmFycmF5O1xyXG4gICAgICAgIHZhciBvcmlnaW4gPSB0aGlzLm9yaWdpbi5hcnJheTtcclxuICAgICAgICB2YXIgbWluID0gYmJveC5taW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIG1heCA9IGJib3gubWF4LmFycmF5O1xyXG5cclxuICAgICAgICB2YXIgaW52ZGlyeCA9IDEgLyBkaXJbMF07XHJcbiAgICAgICAgdmFyIGludmRpcnkgPSAxIC8gZGlyWzFdO1xyXG4gICAgICAgIHZhciBpbnZkaXJ6ID0gMSAvIGRpclsyXTtcclxuXHJcbiAgICAgICAgdmFyIHRtaW4sIHRtYXgsIHR5bWluLCB0eW1heCwgdHptaW4sIHR6bWF4O1xyXG4gICAgICAgIGlmIChpbnZkaXJ4ID49IDApIHtcclxuICAgICAgICAgICAgdG1pbiA9IChtaW5bMF0gLSBvcmlnaW5bMF0pICogaW52ZGlyeDtcclxuICAgICAgICAgICAgdG1heCA9IChtYXhbMF0gLSBvcmlnaW5bMF0pICogaW52ZGlyeDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRtYXggPSAobWluWzBdIC0gb3JpZ2luWzBdKSAqIGludmRpcng7XHJcbiAgICAgICAgICAgIHRtaW4gPSAobWF4WzBdIC0gb3JpZ2luWzBdKSAqIGludmRpcng7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbnZkaXJ5ID49IDApIHtcclxuICAgICAgICAgICAgdHltaW4gPSAobWluWzFdIC0gb3JpZ2luWzFdKSAqIGludmRpcnk7XHJcbiAgICAgICAgICAgIHR5bWF4ID0gKG1heFsxXSAtIG9yaWdpblsxXSkgKiBpbnZkaXJ5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdHltYXggPSAobWluWzFdIC0gb3JpZ2luWzFdKSAqIGludmRpcnk7XHJcbiAgICAgICAgICAgIHR5bWluID0gKG1heFsxXSAtIG9yaWdpblsxXSkgKiBpbnZkaXJ5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCh0bWluID4gdHltYXgpIHx8ICh0eW1pbiA+IHRtYXgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5bWluID4gdG1pbiB8fCB0bWluICE9PSB0bWluKSB7XHJcbiAgICAgICAgICAgIHRtaW4gPSB0eW1pbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5bWF4IDwgdG1heCB8fCB0bWF4ICE9PSB0bWF4KSB7XHJcbiAgICAgICAgICAgIHRtYXggPSB0eW1heDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpbnZkaXJ6ID49IDApIHtcclxuICAgICAgICAgICAgdHptaW4gPSAobWluWzJdIC0gb3JpZ2luWzJdKSAqIGludmRpcno7XHJcbiAgICAgICAgICAgIHR6bWF4ID0gKG1heFsyXSAtIG9yaWdpblsyXSkgKiBpbnZkaXJ6O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdHptYXggPSAobWluWzJdIC0gb3JpZ2luWzJdKSAqIGludmRpcno7XHJcbiAgICAgICAgICAgIHR6bWluID0gKG1heFsyXSAtIG9yaWdpblsyXSkgKiBpbnZkaXJ6O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCh0bWluID4gdHptYXgpIHx8ICh0em1pbiA+IHRtYXgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR6bWluID4gdG1pbiB8fCB0bWluICE9PSB0bWluKSB7XHJcbiAgICAgICAgICAgIHRtaW4gPSB0em1pbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR6bWF4IDwgdG1heCB8fCB0bWF4ICE9PSB0bWF4KSB7XHJcbiAgICAgICAgICAgIHRtYXggPSB0em1heDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRtYXggPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHQgPSB0bWluID49IDAgPyB0bWluIDogdG1heDtcclxuXHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIG9yaWdpbiwgZGlyLCB0KTtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL00lQzMlQjZsbGVyJUUyJTgwJTkzVHJ1bWJvcmVfaW50ZXJzZWN0aW9uX2FsZ29yaXRobVxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgaW50ZXJzZWN0aW9uIHBvaW50IGJldHdlZW4gcmF5IGFuZCB0aHJlZSB0cmlhbmdsZSB2ZXJ0aWNlc1xyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IGFcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gY1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgc2luZ2xlU2lkZWQsIENXIHRyaWFuZ2xlIHdpbGwgYmUgaWdub3JlZFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFtvdXRdXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW2JhcnljZW50ZXJpY10gYmFyeWNlbnRyaWMgY29vcmRzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdFRyaWFuZ2xlOiAoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2YXIgZUJBID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgZUNBID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgQU8gPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB2Q3Jvc3MgPSB2ZWMzLmNyZWF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMsIHNpbmdsZVNpZGVkLCBvdXQsIGJhcnljZW50ZXJpYykge1xyXG4gICAgICAgICAgICB2YXIgZGlyID0gdGhpcy5kaXJlY3Rpb24uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBvcmlnaW4gPSB0aGlzLm9yaWdpbi5hcnJheTtcclxuICAgICAgICAgICAgYSA9IGEuYXJyYXk7XHJcbiAgICAgICAgICAgIGIgPSBiLmFycmF5O1xyXG4gICAgICAgICAgICBjID0gYy5hcnJheTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMuc3ViKGVCQSwgYiwgYSk7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKGVDQSwgYywgYSk7XHJcblxyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKHZDcm9zcywgZUNBLCBkaXIpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRldCA9IHZlYzMuZG90KGVCQSwgdkNyb3NzKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzaW5nbGVTaWRlZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRldCA+IC1FUFNJTE9OKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGV0ID4gLUVQU0lMT04gJiYgZGV0IDwgRVBTSUxPTikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2ZWMzLnN1YihBTywgb3JpZ2luLCBhKTtcclxuICAgICAgICAgICAgdmFyIHUgPSB2ZWMzLmRvdCh2Q3Jvc3MsIEFPKSAvIGRldDtcclxuICAgICAgICAgICAgaWYgKHUgPCAwIHx8IHUgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVjMy5jcm9zcyh2Q3Jvc3MsIGVCQSwgQU8pO1xyXG4gICAgICAgICAgICB2YXIgdiA9IHZlYzMuZG90KGRpciwgdkNyb3NzKSAvIGRldDtcclxuXHJcbiAgICAgICAgICAgIGlmICh2IDwgMCB8fCB2ID4gMSB8fCAodSArIHYgPiAxKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlYzMuY3Jvc3ModkNyb3NzLCBlQkEsIGVDQSk7XHJcbiAgICAgICAgICAgIHZhciB0ID0gLXZlYzMuZG90KEFPLCB2Q3Jvc3MpIC8gZGV0O1xyXG5cclxuICAgICAgICAgICAgaWYgKHQgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGJhcnljZW50ZXJpYykge1xyXG4gICAgICAgICAgICAgICAgVmVjdG9yMy5zZXQoYmFyeWNlbnRlcmljLCAoMSAtIHUgLSB2KSwgdSwgdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIG9yaWdpbiwgZGlyLCB0KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhbiBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCB0byB0aGUgcmF5XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBhcHBseVRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG4gICAgICAgIFZlY3RvcjMuYWRkKHRoaXMuZGlyZWN0aW9uLCB0aGlzLmRpcmVjdGlvbiwgdGhpcy5vcmlnaW4pO1xyXG4gICAgICAgIFZlY3RvcjMudHJhbnNmb3JtTWF0NCh0aGlzLm9yaWdpbiwgdGhpcy5vcmlnaW4sIG1hdHJpeCk7XHJcbiAgICAgICAgVmVjdG9yMy50cmFuc2Zvcm1NYXQ0KHRoaXMuZGlyZWN0aW9uLCB0aGlzLmRpcmVjdGlvbiwgbWF0cml4KTtcclxuXHJcbiAgICAgICAgVmVjdG9yMy5zdWIodGhpcy5kaXJlY3Rpb24sIHRoaXMuZGlyZWN0aW9uLCB0aGlzLm9yaWdpbik7XHJcbiAgICAgICAgVmVjdG9yMy5ub3JtYWxpemUodGhpcy5kaXJlY3Rpb24sIHRoaXMuZGlyZWN0aW9uKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IHZhbHVlcyBmcm9tIGFub3RoZXIgcmF5XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuUmF5fSByYXlcclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24gKHJheSkge1xyXG4gICAgICAgIFZlY3RvcjMuY29weSh0aGlzLm9yaWdpbiwgcmF5Lm9yaWdpbik7XHJcbiAgICAgICAgVmVjdG9yMy5jb3B5KHRoaXMuZGlyZWN0aW9uLCByYXkuZGlyZWN0aW9uKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyByYXlcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUmF5fVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciByYXkgPSBuZXcgUmF5KCk7XHJcbiAgICAgICAgcmF5LmNvcHkodGhpcyk7XHJcbiAgICAgICAgcmV0dXJuIHJheTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJheTtcclxuIiwiaW1wb3J0IE5vZGUgZnJvbSAnLi9Ob2RlJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgRnJ1c3R1bSBmcm9tICcuL21hdGgvRnJ1c3R1bSc7XHJcbmltcG9ydCBSYXkgZnJvbSAnLi9tYXRoL1JheSc7XHJcblxyXG5pbXBvcnQgdmVjNCBmcm9tICcuL2dsbWF0cml4L3ZlYzQnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5DYW1lcmFcclxuICogQGV4dGVuZHMgY2xheS5Ob2RlXHJcbiAqL1xyXG52YXIgQ2FtZXJhID0gTm9kZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5DYW1lcmEjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW1lcmEgcHJvamVjdGlvbiBtYXRyaXhcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6IG5ldyBNYXRyaXg0KCksXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludmVyc2Ugb2YgY2FtZXJhIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTWF0cml4NH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBpbnZQcm9qZWN0aW9uTWF0cml4OiBuZXcgTWF0cml4NCgpLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBWaWV3IG1hdHJpeCwgZXF1YWwgdG8gaW52ZXJzZSBvZiBjYW1lcmEncyB3b3JsZCBtYXRyaXhcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZpZXdNYXRyaXg6IG5ldyBNYXRyaXg0KCksXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbWVyYSBmcnVzdHVtIGluIHZpZXcgc3BhY2VcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5GcnVzdHVtfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZydXN0dW06IG5ldyBGcnVzdHVtKClcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuQ2FtZXJhLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgICAgICBOb2RlLnByb3RvdHlwZS51cGRhdGUuY2FsbCh0aGlzLCBmb3JjZSk7XHJcbiAgICAgICAgTWF0cml4NC5pbnZlcnQodGhpcy52aWV3TWF0cml4LCB0aGlzLndvcmxkVHJhbnNmb3JtKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgTWF0cml4NC5pbnZlcnQodGhpcy5pbnZQcm9qZWN0aW9uTWF0cml4LCB0aGlzLnByb2plY3Rpb25NYXRyaXgpO1xyXG5cclxuICAgICAgICB0aGlzLmZydXN0dW0uc2V0RnJvbVByb2plY3Rpb24odGhpcy5wcm9qZWN0aW9uTWF0cml4KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY2FtZXJhIHZpZXcgbWF0cml4XHJcbiAgICAgKi9cclxuICAgIHNldFZpZXdNYXRyaXg6IGZ1bmN0aW9uICh2aWV3TWF0cml4KSB7XHJcbiAgICAgICAgTWF0cml4NC5jb3B5KHRoaXMudmlld01hdHJpeCwgdmlld01hdHJpeCk7XHJcbiAgICAgICAgTWF0cml4NC5pbnZlcnQodGhpcy53b3JsZFRyYW5zZm9ybSwgdmlld01hdHJpeCk7XHJcbiAgICAgICAgdGhpcy5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlY29tcG9zZSBjYW1lcmEgcHJvamVjdGlvbiBtYXRyaXhcclxuICAgICAqL1xyXG4gICAgZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY2FtZXJhIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gcHJvamVjdGlvbk1hdHJpeFxyXG4gICAgICovXHJcbiAgICBzZXRQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAocHJvamVjdGlvbk1hdHJpeCkge1xyXG4gICAgICAgIE1hdHJpeDQuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgsIHByb2plY3Rpb25NYXRyaXgpO1xyXG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeCwgcHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgdGhpcy5kZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgcHJvamVjdGlvbiBtYXRyaXgsIGNhbGxlZCBhZnRlciB1cGRhdGVcclxuICAgICAqL1xyXG4gICAgdXBkYXRlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYXN0IGEgcGlja2luZyByYXkgZnJvbSBjYW1lcmEgbmVhciBwbGFuZSB0byBmYXIgcGxhbmVcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjJ9IG5kY1xyXG4gICAgICogQHBhcmFtIHtjbGF5LlJheX0gW291dF1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuUmF5fVxyXG4gICAgICovXHJcbiAgICBjYXN0UmF5OiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2NCA9IHZlYzQuY3JlYXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChuZGMsIG91dCkge1xyXG4gICAgICAgICAgICB2YXIgcmF5ID0gb3V0ICE9PSB1bmRlZmluZWQgPyBvdXQgOiBuZXcgUmF5KCk7XHJcbiAgICAgICAgICAgIHZhciB4ID0gbmRjLmFycmF5WzBdO1xyXG4gICAgICAgICAgICB2YXIgeSA9IG5kYy5hcnJheVsxXTtcclxuICAgICAgICAgICAgdmVjNC5zZXQodjQsIHgsIHksIC0xLCAxKTtcclxuICAgICAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KHY0LCB2NCwgdGhpcy5pbnZQcm9qZWN0aW9uTWF0cml4LmFycmF5KTtcclxuICAgICAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KHY0LCB2NCwgdGhpcy53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzMuc2NhbGUocmF5Lm9yaWdpbi5hcnJheSwgdjQsIDEgLyB2NFszXSk7XHJcblxyXG4gICAgICAgICAgICB2ZWM0LnNldCh2NCwgeCwgeSwgMSwgMSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2NCwgdjQsIHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2NCwgdjQsIHRoaXMud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlKHY0LCB2NCwgMSAvIHY0WzNdKTtcclxuICAgICAgICAgICAgdmVjMy5zdWIocmF5LmRpcmVjdGlvbi5hcnJheSwgdjQsIHJheS5vcmlnaW4uYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUocmF5LmRpcmVjdGlvbi5hcnJheSwgcmF5LmRpcmVjdGlvbi5hcnJheSk7XHJcbiAgICAgICAgICAgIHJheS5kaXJlY3Rpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmF5Lm9yaWdpbi5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJheTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQG5hbWUgY2xvbmVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuQ2FtZXJhfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuQ2FtZXJhLnByb3RvdHlwZVxyXG4gICAgICovXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ2FtZXJhO1xyXG4iLCJpbXBvcnQgTm9kZSBmcm9tICcuL05vZGUnO1xyXG5pbXBvcnQgTGlnaHQgZnJvbSAnLi9MaWdodCc7XHJcbmltcG9ydCBDYW1lcmEgZnJvbSAnLi9DYW1lcmEnO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi9tYXRoL0JvdW5kaW5nQm94JztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgbWF0NCBmcm9tICcuL2dsbWF0cml4L21hdDQnO1xyXG5pbXBvcnQgTFJVQ2FjaGUgZnJvbSAnLi9jb3JlL0xSVSc7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4vbWF0aC9NYXRyaXg0JztcclxuXHJcbnZhciBJREVOVElUWSA9IG1hdDQuY3JlYXRlKCk7XHJcbnZhciBXT1JMRFZJRVcgPSBtYXQ0LmNyZWF0ZSgpO1xyXG5cclxudmFyIHByb2dyYW1LZXlDYWNoZSA9IHt9O1xyXG5cclxuZnVuY3Rpb24gZ2V0UHJvZ3JhbUtleShsaWdodE51bWJlcnMpIHtcclxuICAgIHZhciBkZWZpbmVTdHIgPSBbXTtcclxuICAgIHZhciBsaWdodFR5cGVzID0gT2JqZWN0LmtleXMobGlnaHROdW1iZXJzKTtcclxuICAgIGxpZ2h0VHlwZXMuc29ydCgpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaWdodFR5cGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0VHlwZSA9IGxpZ2h0VHlwZXNbaV07XHJcbiAgICAgICAgZGVmaW5lU3RyLnB1c2gobGlnaHRUeXBlICsgJyAnICsgbGlnaHROdW1iZXJzW2xpZ2h0VHlwZV0pO1xyXG4gICAgfVxyXG4gICAgdmFyIGtleSA9IGRlZmluZVN0ci5qb2luKCdcXG4nKTtcclxuXHJcbiAgICBpZiAocHJvZ3JhbUtleUNhY2hlW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gcHJvZ3JhbUtleUNhY2hlW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGlkID0gdXRpbC5nZW5HVUlEKCk7XHJcbiAgICBwcm9ncmFtS2V5Q2FjaGVba2V5XSA9IGlkO1xyXG4gICAgcmV0dXJuIGlkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBSZW5kZXJMaXN0KCkge1xyXG5cclxuICAgIHRoaXMub3BhcXVlID0gW107XHJcbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gW107XHJcblxyXG4gICAgdGhpcy5fb3BhcXVlQ291bnQgPSAwO1xyXG4gICAgdGhpcy5fdHJhbnNwYXJlbnRDb3VudCA9IDA7XHJcbn1cclxuXHJcblJlbmRlckxpc3QucHJvdG90eXBlLnN0YXJ0Q291bnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9vcGFxdWVDb3VudCA9IDA7XHJcbiAgICB0aGlzLl90cmFuc3BhcmVudENvdW50ID0gMDtcclxufTtcclxuXHJcblJlbmRlckxpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChvYmplY3QsIGlzVHJhbnNwYXJlbnQpIHtcclxuICAgIGlmIChpc1RyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgdGhpcy50cmFuc3BhcmVudFt0aGlzLl90cmFuc3BhcmVudENvdW50KytdID0gb2JqZWN0O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vcGFxdWVbdGhpcy5fb3BhcXVlQ291bnQrK10gPSBvYmplY3Q7XHJcbiAgICB9XHJcbn07XHJcblxyXG5SZW5kZXJMaXN0LnByb3RvdHlwZS5lbmRDb3VudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMudHJhbnNwYXJlbnQubGVuZ3RoID0gdGhpcy5fdHJhbnNwYXJlbnRDb3VudDtcclxuICAgIHRoaXMub3BhcXVlLmxlbmd0aCA9IHRoaXMuX29wYXF1ZUNvdW50O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IGNsYXkuU2NlbmUuUmVuZGVyTGlzdFxyXG4gKiBAcHJvcGVydHkge0FycmF5LjxjbGF5LlJlbmRlcmFibGU+fSBvcGFxdWVcclxuICogQHByb3BlcnR5IHtBcnJheS48Y2xheS5SZW5kZXJhYmxlPn0gdHJhbnNwYXJlbnRcclxuICovXHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuU2NlbmVcclxuICogQGV4dGVuZHMgY2xheS5Ob2RlXHJcbiAqL1xyXG52YXIgU2NlbmUgPSBOb2RlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlNjZW5lIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogR2xvYmFsIG1hdGVyaWFsIG9mIHNjZW5lXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTWF0ZXJpYWx9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWF0ZXJpYWw6IG51bGwsXHJcblxyXG4gICAgICAgIGxpZ2h0czogW10sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNjZW5lIGJvdW5kaW5nIGJveCBpbiB2aWV3IHNwYWNlLlxyXG4gICAgICAgICAqIFVzZWQgd2hlbiBjYW1lcmEgbmVlZHMgdG8gYWR1anN0IHRoZSBuZWFyIGFuZCBmYXIgcGxhbmUgYXV0b21hdGljYWxseVxyXG4gICAgICAgICAqIHNvIHRoYXQgdGhlIHZpZXcgZnJ1c3R1bSBjb250YWlucyB0aGUgdmlzaWJsZSBvYmplY3RzIGFzIHRpZ2h0bHkgYXMgcG9zc2libGUuXHJcbiAgICAgICAgICogTm90aWNlOlxyXG4gICAgICAgICAqICBJdCBpcyB1cGRhdGVkIGFmdGVyIHJlbmRlcmluZyAoaW4gdGhlIHN0ZXAgb2YgZnJ1c3R1bSBjdWxsaW5nIHBhc3NpbmdseSkuIFNvIG1heSBiZSBub3Qgc28gYWNjdXJhdGUsIGJ1dCBzYXZlcyBhIGxvdCBvZiBjYWxjdWxhdGlvblxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdmlld0JvdW5kaW5nQm94TGFzdEZyYW1lOiBuZXcgQm91bmRpbmdCb3goKSxcclxuXHJcbiAgICAgICAgLy8gVW5pZm9ybXMgZm9yIHNoYWRvdyBtYXAuXHJcbiAgICAgICAgc2hhZG93VW5pZm9ybXM6IHt9LFxyXG5cclxuICAgICAgICBfY2FtZXJhTGlzdDogW10sXHJcblxyXG4gICAgICAgIC8vIFByb3BlcnRpZXMgdG8gc2F2ZSB0aGUgbGlnaHQgaW5mb3JtYXRpb24gaW4gdGhlIHNjZW5lXHJcbiAgICAgICAgLy8gV2lsbCBiZSBzZXQgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxyXG4gICAgICAgIF9saWdodFVuaWZvcm1zOiB7fSxcclxuXHJcbiAgICAgICAgX3ByZXZpb3VzTGlnaHROdW1iZXI6IHt9LFxyXG5cclxuICAgICAgICBfbGlnaHROdW1iZXI6IHtcclxuICAgICAgICAgICAgLy8gZ3JvdXBJZDoge1xyXG4gICAgICAgICAgICAgICAgLy8gUE9JTlRfTElHSFQ6IDAsXHJcbiAgICAgICAgICAgICAgICAvLyBESVJFQ1RJT05BTF9MSUdIVDogMCxcclxuICAgICAgICAgICAgICAgIC8vIFNQT1RfTElHSFQ6IDAsXHJcbiAgICAgICAgICAgICAgICAvLyBBTUJJRU5UX0xJR0hUOiAwLFxyXG4gICAgICAgICAgICAgICAgLy8gQU1CSUVOVF9TSF9MSUdIVDogMFxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2xpZ2h0UHJvZ3JhbUtleXM6IHt9LFxyXG5cclxuICAgICAgICBfbm9kZVJlcG9zaXRvcnk6IHt9LFxyXG5cclxuICAgICAgICBfcmVuZGVyTGlzdHM6IG5ldyBMUlVDYWNoZSgyMClcclxuXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9zY2VuZSA9IHRoaXM7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5TY2VuZS5wcm90b3R5cGUuICovXHJcbntcclxuXHJcbiAgICAvLyBBZGQgbm9kZSB0byBzY2VuZVxyXG4gICAgYWRkVG9TY2VuZTogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbWVyYSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fY2FtZXJhTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0ZvdW5kIG11bHRpcGxlIGNhbWVyYSBpbiBvbmUgc2NlbmUuIFVzZSB0aGUgZmlzdCBvbmUuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fY2FtZXJhTGlzdC5wdXNoKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgTGlnaHQpIHtcclxuICAgICAgICAgICAgdGhpcy5saWdodHMucHVzaChub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5vZGUubmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub2RlUmVwb3NpdG9yeVtub2RlLm5hbWVdID0gbm9kZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFJlbW92ZSBub2RlIGZyb20gc2NlbmVcclxuICAgIHJlbW92ZUZyb21TY2VuZTogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICB2YXIgaWR4O1xyXG4gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgQ2FtZXJhKSB7XHJcbiAgICAgICAgICAgIGlkeCA9IHRoaXMuX2NhbWVyYUxpc3QuaW5kZXhPZihub2RlKTtcclxuICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYW1lcmFMaXN0LnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBMaWdodCkge1xyXG4gICAgICAgICAgICBpZHggPSB0aGlzLmxpZ2h0cy5pbmRleE9mKG5vZGUpO1xyXG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlnaHRzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlLm5hbWUpIHtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX25vZGVSZXBvc2l0b3J5W25vZGUubmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBub2RlIGJ5IG5hbWVcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7Tm9kZX1cclxuICAgICAqIEBERVBSRUNBVEVEXHJcbiAgICAgKi9cclxuICAgIGdldE5vZGU6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVSZXBvc2l0b3J5W25hbWVdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBtYWluIGNhbWVyYSBvZiB0aGUgc2NlbmUuXHJcbiAgICAgKiBAcGFyYW0ge2NsYXlnbC5DYW1lcmF9IGNhbWVyYVxyXG4gICAgICovXHJcbiAgICBzZXRNYWluQ2FtZXJhOiBmdW5jdGlvbiAoY2FtZXJhKSB7XHJcbiAgICAgICAgdmFyIGlkeCA9IHRoaXMuX2NhbWVyYUxpc3QuaW5kZXhPZihjYW1lcmEpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jYW1lcmFMaXN0LnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jYW1lcmFMaXN0LnVuc2hpZnQoY2FtZXJhKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBtYWluIGNhbWVyYSBvZiB0aGUgc2NlbmUuXHJcbiAgICAgKi9cclxuICAgIGdldE1haW5DYW1lcmE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2FtZXJhTGlzdFswXTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TGlnaHRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGlnaHRzO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVMaWdodHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbGlnaHRzID0gdGhpcy5saWdodHM7XHJcbiAgICAgICAgdGhpcy5fcHJldmlvdXNMaWdodE51bWJlciA9IHRoaXMuX2xpZ2h0TnVtYmVyO1xyXG5cclxuICAgICAgICB2YXIgbGlnaHROdW1iZXIgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbGlnaHQgPSBsaWdodHNbaV07XHJcbiAgICAgICAgICAgIGlmIChsaWdodC5pbnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBncm91cCA9IGxpZ2h0Lmdyb3VwO1xyXG4gICAgICAgICAgICBpZiAoIWxpZ2h0TnVtYmVyW2dyb3VwXSkge1xyXG4gICAgICAgICAgICAgICAgbGlnaHROdW1iZXJbZ3JvdXBdID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gVXNlciBjYW4gdXNlIGFueSB0eXBlIG9mIGxpZ2h0XHJcbiAgICAgICAgICAgIGxpZ2h0TnVtYmVyW2dyb3VwXVtsaWdodC50eXBlXSA9IGxpZ2h0TnVtYmVyW2dyb3VwXVtsaWdodC50eXBlXSB8fCAwO1xyXG4gICAgICAgICAgICBsaWdodE51bWJlcltncm91cF1bbGlnaHQudHlwZV0rKztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fbGlnaHROdW1iZXIgPSBsaWdodE51bWJlcjtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgZ3JvdXBJZCBpbiBsaWdodE51bWJlcikge1xyXG4gICAgICAgICAgICB0aGlzLl9saWdodFByb2dyYW1LZXlzW2dyb3VwSWRdID0gZ2V0UHJvZ3JhbUtleShsaWdodE51bWJlcltncm91cElkXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl91cGRhdGVMaWdodFVuaWZvcm1zKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBub2RlIGFuZCBpdCdzIGNoaWxkcmVuLCBpbmNsdWRpbmcgbWVzaCwgY2FtZXJhLCBsaWdodCwgZXRjLlxyXG4gICAgICogVW5saWtlIHVzaW5nIGBOb2RlI2Nsb25lYC4gSXQgd2lsbCBjbG9uZSBza2VsZXRvbiBhbmQgcmVtYXAgdGhlIGpvaW50cy4gTWF0ZXJpYWwgd2lsbCBhbHNvIGJlIGNsb25lZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICBjbG9uZU5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgdmFyIG5ld05vZGUgPSBub2RlLmNsb25lKCk7XHJcbiAgICAgICAgdmFyIGNsb25lZE5vZGVzTWFwID0ge307XHJcbiAgICAgICAgZnVuY3Rpb24gYnVpbGROb2Rlc01hcChzTm9kZSwgdE5vZGUpIHtcclxuICAgICAgICAgICAgY2xvbmVkTm9kZXNNYXBbc05vZGUuX191aWRfX10gPSB0Tm9kZTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc05vZGUuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc0NoaWxkID0gc05vZGUuX2NoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRDaGlsZCA9IHROb2RlLl9jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgIGJ1aWxkTm9kZXNNYXAoc0NoaWxkLCB0Q2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJ1aWxkTm9kZXNNYXAobm9kZSwgbmV3Tm9kZSk7XHJcblxyXG4gICAgICAgIG5ld05vZGUudHJhdmVyc2UoZnVuY3Rpb24gKG5ld0NoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5za2VsZXRvbikge1xyXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQuc2tlbGV0b24gPSBuZXdDaGlsZC5za2VsZXRvbi5jbG9uZShjbG9uZWROb2Rlc01hcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdDaGlsZC5tYXRlcmlhbCA9IG5ld0NoaWxkLm1hdGVyaWFsLmNsb25lKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ld05vZGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhdmVyc2UgdGhlIHNjZW5lIGFuZCBhZGQgdGhlIHJlbmRlcmFibGUgb2JqZWN0IHRvIHRoZSByZW5kZXIgbGlzdC5cclxuICAgICAqIEl0IG5lZWRzIGNhbWVyYSBmb3IgdGhlIGZydXN0dW0gY3VsbGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdXBkYXRlU2NlbmVCb3VuZGluZ0JveFxyXG4gICAgICogQHJldHVybiB7Y2xheS5TY2VuZS5SZW5kZXJMaXN0fVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVSZW5kZXJMaXN0OiBmdW5jdGlvbiAoY2FtZXJhLCB1cGRhdGVTY2VuZUJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgdmFyIGlkID0gY2FtZXJhLl9fdWlkX187XHJcbiAgICAgICAgdmFyIHJlbmRlckxpc3QgPSB0aGlzLl9yZW5kZXJMaXN0cy5nZXQoaWQpO1xyXG4gICAgICAgIGlmICghcmVuZGVyTGlzdCkge1xyXG4gICAgICAgICAgICByZW5kZXJMaXN0ID0gbmV3IFJlbmRlckxpc3QoKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyTGlzdHMucHV0KGlkLCByZW5kZXJMaXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyTGlzdC5zdGFydENvdW50KCk7XHJcblxyXG4gICAgICAgIGlmICh1cGRhdGVTY2VuZUJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lLm1pbi5zZXQoSW5maW5pdHksIEluZmluaXR5LCBJbmZpbml0eSk7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lLm1heC5zZXQoLUluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc2NlbmVNYXRlcmlhbFRyYW5zcGFyZW50ID0gdGhpcy5tYXRlcmlhbCAmJiB0aGlzLm1hdGVyaWFsLnRyYW5zcGFyZW50IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2RvVXBkYXRlUmVuZGVyTGlzdCh0aGlzLCBjYW1lcmEsIHNjZW5lTWF0ZXJpYWxUcmFuc3BhcmVudCwgcmVuZGVyTGlzdCwgdXBkYXRlU2NlbmVCb3VuZGluZ0JveCk7XHJcblxyXG4gICAgICAgIHJlbmRlckxpc3QuZW5kQ291bnQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlbmRlckxpc3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHJlbmRlciBsaXN0LiBVc2VkIGFmdGVyIHtAbGluayBjbGF5LlNjZW5lI3VwZGF0ZVJlbmRlckxpc3R9XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuU2NlbmUuUmVuZGVyTGlzdH1cclxuICAgICAqL1xyXG4gICAgZ2V0UmVuZGVyTGlzdDogZnVuY3Rpb24gKGNhbWVyYSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJMaXN0cy5nZXQoY2FtZXJhLl9fdWlkX18pO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZG9VcGRhdGVSZW5kZXJMaXN0OiBmdW5jdGlvbiAocGFyZW50LCBjYW1lcmEsIHNjZW5lTWF0ZXJpYWxUcmFuc3BhcmVudCwgcmVuZGVyTGlzdCwgdXBkYXRlU2NlbmVCb3VuZGluZ0JveCkge1xyXG4gICAgICAgIGlmIChwYXJlbnQuaW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETyBPcHRpbWl6ZVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50Ll9jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBwYXJlbnQuX2NoaWxkcmVuW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoaWxkLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBGcnVzdHVtIGN1bGxpbmdcclxuICAgICAgICAgICAgICAgIHZhciB3b3JsZE0gPSBjaGlsZC5pc1NraW5uZWRNZXNoKCkgPyBJREVOVElUWSA6IGNoaWxkLndvcmxkVHJhbnNmb3JtLmFycmF5O1xyXG4gICAgICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gY2hpbGQuZ2VvbWV0cnk7XHJcblxyXG4gICAgICAgICAgICAgICAgbWF0NC5tdWx0aXBseUFmZmluZShXT1JMRFZJRVcsIGNhbWVyYS52aWV3TWF0cml4LmFycmF5LCB3b3JsZE0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZVNjZW5lQm91bmRpbmdCb3ggJiYgIWdlb21ldHJ5LmJvdW5kaW5nQm94IHx8ICF0aGlzLmlzRnJ1c3R1bUN1bGxlZChjaGlsZCwgY2FtZXJhLCBXT1JMRFZJRVcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGlzdC5hZGQoY2hpbGQsIGNoaWxkLm1hdGVyaWFsLnRyYW5zcGFyZW50IHx8IHNjZW5lTWF0ZXJpYWxUcmFuc3BhcmVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNoaWxkLl9jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kb1VwZGF0ZVJlbmRlckxpc3QoY2hpbGQsIGNhbWVyYSwgc2NlbmVNYXRlcmlhbFRyYW5zcGFyZW50LCByZW5kZXJMaXN0LCB1cGRhdGVTY2VuZUJvdW5kaW5nQm94KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBhbiBzY2VuZSBvYmplY3QgaXMgY3VsbGVkIGJ5IGNhbWVyYSBmcnVzdHVtXHJcbiAgICAgKlxyXG4gICAgICogT2JqZWN0IGNhbiBiZSBhIHJlbmRlcmFibGUgb3IgYSBsaWdodFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBvYmplY3RcclxuICAgICAqIEBwYXJhbSB7Y2xheS5DYW1lcmF9IGNhbWVyYVxyXG4gICAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gd29ybGRWaWV3TWF0IHJlcHJlc2VudGVkIHdpdGggYXJyYXlcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHByb2plY3Rpb25NYXQgcmVwcmVzZW50ZWQgd2l0aCBhcnJheVxyXG4gICAgICovXHJcbiAgICBpc0ZydXN0dW1DdWxsZWQ6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gRnJ1c3R1bSBjdWxsaW5nXHJcbiAgICAgICAgLy8gaHR0cDovL3d3dy5jc2UuY2hhbG1lcnMuc2UvfnVmZmUvdmZjX2Jib3gucGRmXHJcbiAgICAgICAgdmFyIGN1bGxpbmdCb3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHZhciBjdWxsaW5nTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBjYW1lcmEsIHdvcmxkVmlld01hdCkge1xyXG4gICAgICAgICAgICAvLyBCb3VuZGluZyBib3ggY2FuIGJlIGEgcHJvcGVydHkgb2Ygb2JqZWN0KGxpa2UgbGlnaHQpIG9yIHJlbmRlcmFibGUuZ2VvbWV0cnlcclxuICAgICAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgICAgICB2YXIgZ2VvQkJveCA9IG9iamVjdC5ib3VuZGluZ0JveDtcclxuICAgICAgICAgICAgaWYgKCFnZW9CQm94KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNrZWxldG9uICYmIG9iamVjdC5za2VsZXRvbi5ib3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdlb0JCb3ggPSBvYmplY3Quc2tlbGV0b24uYm91bmRpbmdCb3g7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBnZW9CQm94ID0gb2JqZWN0Lmdlb21ldHJ5LmJvdW5kaW5nQm94O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWdlb0JCb3gpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY3VsbGluZ01hdHJpeC5hcnJheSA9IHdvcmxkVmlld01hdDtcclxuICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94LnRyYW5zZm9ybUZyb20oZ2VvQkJveCwgY3VsbGluZ01hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICAvLyBQYXNzaW5nbHkgdXBkYXRlIHRoZSBzY2VuZSBib3VuZGluZyBib3hcclxuICAgICAgICAgICAgLy8gRklYTUUgZXhjbHVkZSB2ZXJ5IGxhcmdlIG1lc2ggbGlrZSBncm91bmQgcGxhbmUgb3IgdGVycmFpbiA/XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIE9ubHkgcmVuZGVyZXJhYmxlIHdoaWNoIGNhc3Qgc2hhZG93ID9cclxuXHJcbiAgICAgICAgICAgIC8vIEZJWE1FIGJvdW5kaW5nQm94IGJlY29tZXMgbXVjaCBsYXJnZXIgYWZ0ZXIgdHJhbnNmb3JtZC5cclxuICAgICAgICAgICAgaWYgKG9iamVjdC5jYXN0U2hhZG93KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS51bmlvbihjdWxsaW5nQm91bmRpbmdCb3gpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIElnbm9yZSBmcnVzdHVtIGN1bGxpbmcgaWYgb2JqZWN0IGlzIHNraW5uZWQgbWVzaC5cclxuICAgICAgICAgICAgaWYgKG9iamVjdC5mcnVzdHVtQ3VsbGluZykgIHtcclxuICAgICAgICAgICAgICAgIGlmICghY3VsbGluZ0JvdW5kaW5nQm94LmludGVyc2VjdEJvdW5kaW5nQm94KGNhbWVyYS5mcnVzdHVtLmJvdW5kaW5nQm94KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGN1bGxpbmdNYXRyaXguYXJyYXkgPSBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5hcnJheTtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBjdWxsaW5nQm91bmRpbmdCb3gubWF4LmFycmF5WzJdID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGN1bGxpbmdCb3VuZGluZ0JveC5taW4uYXJyYXlbMl0gPCAwXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBDbGlwIGluIHRoZSBuZWFyIHBsYW5lXHJcbiAgICAgICAgICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94Lm1heC5hcnJheVsyXSA9IC0xZS0yMDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjdWxsaW5nQm91bmRpbmdCb3guYXBwbHlQcm9qZWN0aW9uKGN1bGxpbmdNYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBtaW4gPSBjdWxsaW5nQm91bmRpbmdCb3gubWluLmFycmF5O1xyXG4gICAgICAgICAgICAgICAgdmFyIG1heCA9IGN1bGxpbmdCb3VuZGluZ0JveC5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIG1heFswXSA8IC0xIHx8IG1pblswXSA+IDFcclxuICAgICAgICAgICAgICAgICAgICB8fCBtYXhbMV0gPCAtMSB8fCBtaW5bMV0gPiAxXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgbWF4WzJdIDwgLTEgfHwgbWluWzJdID4gMVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICBfdXBkYXRlTGlnaHRVbmlmb3JtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsaWdodHMgPSB0aGlzLmxpZ2h0cztcclxuICAgICAgICAvLyBQdXQgdGhlIGxpZ2h0IGNhc3Qgc2hhZG93IGJlZm9yZSB0aGUgbGlnaHQgbm90IGNhc3Qgc2hhZG93XHJcbiAgICAgICAgbGlnaHRzLnNvcnQobGlnaHRTb3J0RnVuYyk7XHJcblxyXG4gICAgICAgIHZhciBsaWdodFVuaWZvcm1zID0gdGhpcy5fbGlnaHRVbmlmb3JtcztcclxuICAgICAgICBmb3IgKHZhciBncm91cCBpbiBsaWdodFVuaWZvcm1zKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiBsaWdodFVuaWZvcm1zW2dyb3VwXSkge1xyXG4gICAgICAgICAgICAgICAgbGlnaHRVbmlmb3Jtc1tncm91cF1bc3ltYm9sXS52YWx1ZS5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgbGlnaHQgPSBsaWdodHNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAobGlnaHQuaW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGdyb3VwID0gbGlnaHQuZ3JvdXA7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gbGlnaHQudW5pZm9ybVRlbXBsYXRlcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHVuaWZvcm1UcGwgPSBsaWdodC51bmlmb3JtVGVtcGxhdGVzW3N5bWJvbF07XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB1bmlmb3JtVHBsLnZhbHVlKGxpZ2h0KTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWxpZ2h0VW5pZm9ybXNbZ3JvdXBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGlnaHRVbmlmb3Jtc1tncm91cF0gPSB7fTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghbGlnaHRVbmlmb3Jtc1tncm91cF1bc3ltYm9sXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0VW5pZm9ybXNbZ3JvdXBdW3N5bWJvbF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogW11cclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIGx1ID0gbGlnaHRVbmlmb3Jtc1tncm91cF1bc3ltYm9sXTtcclxuICAgICAgICAgICAgICAgIGx1LnR5cGUgPSB1bmlmb3JtVHBsLnR5cGUgKyAndic7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHVuaWZvcm1UcGwudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzFpJzpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICcxZic6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGx1LnZhbHVlLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICcyZic6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnM2YnOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzRmJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWx1ZS5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbHUudmFsdWUucHVzaCh2YWx1ZVtqXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVW5rb3duIGxpZ2h0IHVuaWZvcm0gdHlwZSAnICsgdW5pZm9ybVRwbC50eXBlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TGlnaHRHcm91cHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbGlnaHRHcm91cHMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBncm91cElkIGluIHRoaXMuX2xpZ2h0TnVtYmVyKSB7XHJcbiAgICAgICAgICAgIGxpZ2h0R3JvdXBzLnB1c2goZ3JvdXBJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaWdodEdyb3VwcztcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TnVtYmVyQ2hhbmdlZExpZ2h0R3JvdXBzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0R3JvdXBzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgZ3JvdXBJZCBpbiB0aGlzLl9saWdodE51bWJlcikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0xpZ2h0TnVtYmVyQ2hhbmdlZChncm91cElkKSkge1xyXG4gICAgICAgICAgICAgICAgbGlnaHRHcm91cHMucHVzaChncm91cElkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbGlnaHRHcm91cHM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIERldGVybWluZSBpZiBsaWdodCBncm91cCBpcyBkaWZmZXJlbnQgd2l0aCBzaW5jZSBsYXN0IGZyYW1lXHJcbiAgICAvLyBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHVwZGF0ZSBzaGFkZXIgYW5kIHNjZW5lJ3MgdW5pZm9ybXMgaW4gUmVuZGVyZXIucmVuZGVyXHJcbiAgICBpc0xpZ2h0TnVtYmVyQ2hhbmdlZDogZnVuY3Rpb24gKGxpZ2h0R3JvdXApIHtcclxuICAgICAgICB2YXIgcHJldkxpZ2h0TnVtYmVyID0gdGhpcy5fcHJldmlvdXNMaWdodE51bWJlcjtcclxuICAgICAgICB2YXIgY3VycmVudExpZ2h0TnVtYmVyID0gdGhpcy5fbGlnaHROdW1iZXI7XHJcbiAgICAgICAgLy8gUEVORElORyBQZXJmb3JtYW5jZVxyXG4gICAgICAgIGZvciAodmFyIHR5cGUgaW4gY3VycmVudExpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdKSB7XHJcbiAgICAgICAgICAgIGlmICghcHJldkxpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY3VycmVudExpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdW3R5cGVdICE9PSBwcmV2TGlnaHROdW1iZXJbbGlnaHRHcm91cF1bdHlwZV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIHR5cGUgaW4gcHJldkxpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdKSB7XHJcbiAgICAgICAgICAgIGlmICghY3VycmVudExpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY3VycmVudExpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdW3R5cGVdICE9PSBwcmV2TGlnaHROdW1iZXJbbGlnaHRHcm91cF1bdHlwZV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TGlnaHRzTnVtYmVyczogZnVuY3Rpb24gKGxpZ2h0R3JvdXApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGlnaHROdW1iZXJbbGlnaHRHcm91cF07XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFByb2dyYW1LZXk6IGZ1bmN0aW9uIChsaWdodEdyb3VwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0UHJvZ3JhbUtleXNbbGlnaHRHcm91cF07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldExpZ2h0VW5pZm9ybXM6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gc2V0VW5pZm9ybXModW5pZm9ybXMsIHByb2dyYW0sIHJlbmRlcmVyKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiB1bmlmb3Jtcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGx1ID0gdW5pZm9ybXNbc3ltYm9sXTtcclxuICAgICAgICAgICAgICAgIGlmIChsdS50eXBlID09PSAndHYnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9ncmFtLmhhc1VuaWZvcm0oc3ltYm9sKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRleFNsb3RzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsdS52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IGx1LnZhbHVlW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2xvdCA9IHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdChyZW5kZXJlciwgdGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleFNsb3RzLnB1c2goc2xvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShyZW5kZXJlci5nbCwgJzFpdicsIHN5bWJvbCwgdGV4U2xvdHMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKHJlbmRlcmVyLmdsLCBsdS50eXBlLCBzeW1ib2wsIGx1LnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9ncmFtLCBsaWdodEdyb3VwLCByZW5kZXJlcikge1xyXG4gICAgICAgICAgICBzZXRVbmlmb3Jtcyh0aGlzLl9saWdodFVuaWZvcm1zW2xpZ2h0R3JvdXBdLCBwcm9ncmFtLCByZW5kZXJlcik7XHJcbiAgICAgICAgICAgIC8vIFNldCBzaGFkb3dzXHJcbiAgICAgICAgICAgIHNldFVuaWZvcm1zKHRoaXMuc2hhZG93VW5pZm9ybXMsIHByb2dyYW0sIHJlbmRlcmVyKTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2Ugc2VsZiwgY2xlYXIgYWxsIHRoZSBzY2VuZSBvYmplY3RzXHJcbiAgICAgKiBCdXQgcmVzb3VyY2VzIG9mIGdsIGxpa2UgdGV4dXR1cmUsIHNoYWRlciB3aWxsIG5vdCBiZSBkaXNwb3NlZC5cclxuICAgICAqIE1vc3RseSB5b3Ugc2hvdWxkIHVzZSBkaXNwb3NlU2NlbmUgbWV0aG9kIGluIFJlbmRlcmVyIHRvIGRvIGRpc3Bvc2UuXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9vcGFxdWVMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5fdHJhbnNwYXJlbnRMaXN0ID0gW107XHJcblxyXG4gICAgICAgIHRoaXMubGlnaHRzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuX2xpZ2h0VW5pZm9ybXMgPSB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGlnaHROdW1iZXIgPSB7fTtcclxuICAgICAgICB0aGlzLl9ub2RlUmVwb3NpdG9yeSA9IHt9O1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmZ1bmN0aW9uIGxpZ2h0U29ydEZ1bmMoYSwgYikge1xyXG4gICAgaWYgKGIuY2FzdFNoYWRvdyAmJiAhYS5jYXN0U2hhZG93KSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNjZW5lO1xyXG4iLCJ2YXIgRElSVFlfUFJFRklYID0gJ19fZHRfXyc7XHJcblxyXG52YXIgQ2FjaGUgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdGhpcy5fY29udGV4dElkID0gMDtcclxuXHJcbiAgICB0aGlzLl9jYWNoZXMgPSBbXTtcclxuXHJcbiAgICB0aGlzLl9jb250ZXh0ID0ge307XHJcbn07XHJcblxyXG5DYWNoZS5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgdXNlOiBmdW5jdGlvbiAoY29udGV4dElkLCBkb2N1bWVudFNjaGVtYSkge1xyXG4gICAgICAgIHZhciBjYWNoZXMgPSB0aGlzLl9jYWNoZXM7XHJcbiAgICAgICAgaWYgKCFjYWNoZXNbY29udGV4dElkXSkge1xyXG4gICAgICAgICAgICBjYWNoZXNbY29udGV4dElkXSA9IHt9O1xyXG5cclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50U2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZXNbY29udGV4dElkXSA9IGRvY3VtZW50U2NoZW1hKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY29udGV4dElkID0gY29udGV4dElkO1xyXG5cclxuICAgICAgICB0aGlzLl9jb250ZXh0ID0gY2FjaGVzW2NvbnRleHRJZF07XHJcbiAgICB9LFxyXG5cclxuICAgIHB1dDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9jb250ZXh0W2tleV0gPSB2YWx1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHRba2V5XTtcclxuICAgIH0sXHJcblxyXG4gICAgZGlydHk6IGZ1bmN0aW9uIChmaWVsZCkge1xyXG4gICAgICAgIGZpZWxkID0gZmllbGQgfHwgJyc7XHJcbiAgICAgICAgdmFyIGtleSA9IERJUlRZX1BSRUZJWCArIGZpZWxkO1xyXG4gICAgICAgIHRoaXMucHV0KGtleSwgdHJ1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGRpcnR5QWxsOiBmdW5jdGlvbiAoZmllbGQpIHtcclxuICAgICAgICBmaWVsZCA9IGZpZWxkIHx8ICcnO1xyXG4gICAgICAgIHZhciBrZXkgPSBESVJUWV9QUkVGSVggKyBmaWVsZDtcclxuICAgICAgICB2YXIgY2FjaGVzID0gdGhpcy5fY2FjaGVzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FjaGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChjYWNoZXNbaV0pIHtcclxuICAgICAgICAgICAgICAgIGNhY2hlc1tpXVtrZXldID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZnJlc2g6IGZ1bmN0aW9uIChmaWVsZCkge1xyXG4gICAgICAgIGZpZWxkID0gZmllbGQgfHwgJyc7XHJcbiAgICAgICAgdmFyIGtleSA9IERJUlRZX1BSRUZJWCArIGZpZWxkO1xyXG4gICAgICAgIHRoaXMucHV0KGtleSwgZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICBmcmVzaEFsbDogZnVuY3Rpb24gKGZpZWxkKSB7XHJcbiAgICAgICAgZmllbGQgPSBmaWVsZCB8fCAnJztcclxuICAgICAgICB2YXIga2V5ID0gRElSVFlfUFJFRklYICsgZmllbGQ7XHJcbiAgICAgICAgdmFyIGNhY2hlcyA9IHRoaXMuX2NhY2hlcztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhY2hlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoY2FjaGVzW2ldKSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZXNbaV1ba2V5XSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBpc0RpcnR5OiBmdW5jdGlvbiAoZmllbGQpIHtcclxuICAgICAgICBmaWVsZCA9IGZpZWxkIHx8ICcnO1xyXG4gICAgICAgIHZhciBrZXkgPSBESVJUWV9QUkVGSVggKyBmaWVsZDtcclxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuX2NvbnRleHQ7XHJcbiAgICAgICAgcmV0dXJuICAhY29udGV4dC5oYXNPd25Qcm9wZXJ0eShrZXkpXHJcbiAgICAgICAgICAgIHx8IGNvbnRleHRba2V5XSA9PT0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZGVsZXRlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHRJZCkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9jYWNoZXNbY29udGV4dElkXTtcclxuICAgICAgICB0aGlzLl9jb250ZXh0ID0ge307XHJcbiAgICB9LFxyXG5cclxuICAgIGRlbGV0ZTogZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9jb250ZXh0W2tleV07XHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyQWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fY2FjaGVzID0ge307XHJcbiAgICB9LFxyXG5cclxuICAgIGdldENvbnRleHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dDtcclxuICAgIH0sXHJcblxyXG4gICAgZWFjaENvbnRleHQgOiBmdW5jdGlvbiAoY2IsIGNvbnRleHQpIHtcclxuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuX2NhY2hlcyk7XHJcbiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgY2IgJiYgY2IuY2FsbChjb250ZXh0LCBrZXkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBtaXNzOiBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuICEgdGhpcy5fY29udGV4dC5oYXNPd25Qcm9wZXJ0eShrZXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuQ2FjaGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FjaGU7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDYWNoZTtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgQ2FjaGUgZnJvbSAnLi9jb3JlL0NhY2hlJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxuXHJcbmZ1bmN0aW9uIGdldEFycmF5Q3RvckJ5VHlwZSAodHlwZSkge1xyXG4gICAgcmV0dXJuICh7XHJcbiAgICAgICAgJ2J5dGUnOiB2ZW5kb3IuSW50OEFycmF5LFxyXG4gICAgICAgICd1Ynl0ZSc6IHZlbmRvci5VaW50OEFycmF5LFxyXG4gICAgICAgICdzaG9ydCc6IHZlbmRvci5JbnQxNkFycmF5LFxyXG4gICAgICAgICd1c2hvcnQnOiB2ZW5kb3IuVWludDE2QXJyYXlcclxuICAgIH0pW3R5cGVdIHx8IHZlbmRvci5GbG9hdDMyQXJyYXk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1ha2VBdHRyS2V5KGF0dHJOYW1lKSB7XHJcbiAgICByZXR1cm4gJ2F0dHJfJyArIGF0dHJOYW1lO1xyXG59XHJcbi8qKlxyXG4gKiBHZW9tZXRyeUJhc2UgYXR0cmlidXRlXHJcbiAqIEBhbGlhcyBjbGF5Lkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGVcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqL1xyXG5mdW5jdGlvbiBBdHRyaWJ1dGUobmFtZSwgdHlwZSwgc2l6ZSwgc2VtYW50aWMpIHtcclxuICAgIC8qKlxyXG4gICAgICogQXR0cmlidXRlIG5hbWVcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAvKipcclxuICAgICAqIEF0dHJpYnV0ZSB0eXBlXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyBgJ2J5dGUnYFxyXG4gICAgICogICsgYCd1Ynl0ZSdgXHJcbiAgICAgKiAgKyBgJ3Nob3J0J2BcclxuICAgICAqICArIGAndXNob3J0J2BcclxuICAgICAqICArIGAnZmxvYXQnYCBNb3N0IGNvbW1vbmx5IHVzZWQuXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBTaXplIG9mIGF0dHJpYnV0ZSBjb21wb25lbnQuIDEgLSA0LlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5zaXplID0gc2l6ZTtcclxuICAgIC8qKlxyXG4gICAgICogU2VtYW50aWMgb2YgdGhpcyBhdHRyaWJ1dGUuXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyBgJ1BPU0lUSU9OJ2BcclxuICAgICAqICArIGAnTk9STUFMJ2BcclxuICAgICAqICArIGAnQklOT1JNQUwnYFxyXG4gICAgICogICsgYCdUQU5HRU5UJ2BcclxuICAgICAqICArIGAnVEVYQ09PUkQnYFxyXG4gICAgICogICsgYCdURVhDT09SRF8wJ2BcclxuICAgICAqICArIGAnVEVYQ09PUkRfMSdgXHJcbiAgICAgKiAgKyBgJ0NPTE9SJ2BcclxuICAgICAqICArIGAnSk9JTlQnYFxyXG4gICAgICogICsgYCdXRUlHSFQnYFxyXG4gICAgICpcclxuICAgICAqIEluIHNoYWRlciwgYXR0cmlidXRlIHdpdGggc2FtZSBzZW1hbnRpYyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgbWFwcGVkLiBGb3IgZXhhbXBsZTpcclxuICAgICAqIGBgYGdsc2xcclxuICAgICAqIGF0dHJpYnV0ZSB2ZWMzIHBvczogUE9TSVRJT05cclxuICAgICAqIGBgYFxyXG4gICAgICogd2lsbCB1c2UgdGhlIGF0dHJpYnV0ZSB2YWx1ZSB3aXRoIHNlbWFudGljIFBPU0lUSU9OIGluIGdlb21ldHJ5LCBubyBtYXR0ZXIgd2hhdCBuYW1lIGl0IHVzZWQuXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnNlbWFudGljID0gc2VtYW50aWMgfHwgJyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWx1ZSBvZiB0aGUgYXR0cmlidXRlLlxyXG4gICAgICogQHR5cGUge1R5cGVkQXJyYXl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG5cclxuICAgIC8vIEluaXQgZ2V0dGVyIHNldHRlclxyXG4gICAgc3dpdGNoIChzaXplKSB7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICB0aGlzLmdldCA9IGZ1bmN0aW9uIChpZHgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlW2lkeF07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gZnVuY3Rpb24gKGlkeCwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaWR4XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvLyBDb3B5IGZyb20gc291cmNlIHRvIHRhcmdldFxyXG4gICAgICAgICAgICB0aGlzLmNvcHkgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbdGFyZ2V0XSA9IHRoaXMudmFsdWVbdGFyZ2V0XTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICB0aGlzLmdldCA9IGZ1bmN0aW9uIChpZHgsIG91dCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBvdXRbMF0gPSBhcnJbaWR4ICogMl07XHJcbiAgICAgICAgICAgICAgICBvdXRbMV0gPSBhcnJbaWR4ICogMiArIDFdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZXQgPSBmdW5jdGlvbiAoaWR4LCB2YWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeCAqIDJdID0gdmFsWzBdO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeCAqIDIgKyAxXSA9IHZhbFsxXTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5jb3B5ID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIHNvdXJjZSAqPSAyO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ICo9IDI7XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0XSA9IGFycltzb3VyY2VdO1xyXG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldCArIDFdID0gYXJyW3NvdXJjZSArIDFdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24gKGlkeCwgb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4MyA9IGlkeCAqIDM7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIG91dFswXSA9IGFycltpZHgzXTtcclxuICAgICAgICAgICAgICAgIG91dFsxXSA9IGFycltpZHgzICsgMV07XHJcbiAgICAgICAgICAgICAgICBvdXRbMl0gPSBhcnJbaWR4MyArIDJdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZXQgPSBmdW5jdGlvbiAoaWR4LCB2YWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpZHgzID0gaWR4ICogMztcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeDNdID0gdmFsWzBdO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeDMgKyAxXSA9IHZhbFsxXTtcclxuICAgICAgICAgICAgICAgIGFycltpZHgzICsgMl0gPSB2YWxbMl07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuY29weSA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2UgKj0gMztcclxuICAgICAgICAgICAgICAgIHRhcmdldCAqPSAzO1xyXG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldF0gPSBhcnJbc291cmNlXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAxXSA9IGFycltzb3VyY2UgKyAxXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAyXSA9IGFycltzb3VyY2UgKyAyXTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICB0aGlzLmdldCA9IGZ1bmN0aW9uIChpZHgsIG91dCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4NCA9IGlkeCAqIDQ7XHJcbiAgICAgICAgICAgICAgICBvdXRbMF0gPSBhcnJbaWR4NF07XHJcbiAgICAgICAgICAgICAgICBvdXRbMV0gPSBhcnJbaWR4NCArIDFdO1xyXG4gICAgICAgICAgICAgICAgb3V0WzJdID0gYXJyW2lkeDQgKyAyXTtcclxuICAgICAgICAgICAgICAgIG91dFszXSA9IGFycltpZHg0ICsgM107XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNldCA9IGZ1bmN0aW9uIChpZHgsIHZhbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4NCA9IGlkeCAqIDQ7XHJcbiAgICAgICAgICAgICAgICBhcnJbaWR4NF0gPSB2YWxbMF07XHJcbiAgICAgICAgICAgICAgICBhcnJbaWR4NCArIDFdID0gdmFsWzFdO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeDQgKyAyXSA9IHZhbFsyXTtcclxuICAgICAgICAgICAgICAgIGFycltpZHg0ICsgM10gPSB2YWxbM107XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuY29weSA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2UgKj0gNDtcclxuICAgICAgICAgICAgICAgIHRhcmdldCAqPSA0O1xyXG4gICAgICAgICAgICAgICAgLy8gY29weVdpdGhpbiBpcyBleHRyZW1lbHkgc2xvd1xyXG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldF0gPSBhcnJbc291cmNlXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAxXSA9IGFycltzb3VyY2UgKyAxXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAyXSA9IGFycltzb3VyY2UgKyAyXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAzXSA9IGFycltzb3VyY2UgKyAzXTtcclxuICAgICAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFNldCBpdGVtIHZhbHVlIGF0IGdpdmUgaW5kZXguIFNlY29uZCBwYXJhbWV0ZXIgdmFsIGlzIG51bWJlciBpZiBzaXplIGlzIDFcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBuYW1lIGNsYXkuR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZSNzZXRcclxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gKiBAcGFyYW0ge251bWJlcltdfG51bWJlcn0gdmFsXHJcbiAqIEBleGFtcGxlXHJcbiAqIGdlb21ldHJ5LmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKS5zZXQoMCwgWzEsIDEsIDFdKTtcclxuICovXHJcblxyXG4vKipcclxuICogR2V0IGl0ZW0gdmFsdWUgYXQgZ2l2ZSBpbmRleC4gU2Vjb25kIHBhcmFtZXRlciBvdXQgaXMgbm8gbmVlZCBpZiBzaXplIGlzIDFcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBuYW1lIGNsYXkuR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZSNzZXRcclxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gKiBAcGFyYW0ge251bWJlcltdfSBbb3V0XVxyXG4gKiBAZXhhbXBsZVxyXG4gKiBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJykuZ2V0KDAsIG91dCk7XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEluaXRpYWxpemUgYXR0cmlidXRlIHdpdGggZ2l2ZW4gdmVydGV4IGNvdW50XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBuVmVydGV4XHJcbiAqL1xyXG5BdHRyaWJ1dGUucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoblZlcnRleCkge1xyXG4gICAgaWYgKCF0aGlzLnZhbHVlIHx8IHRoaXMudmFsdWUubGVuZ3RoICE9IG5WZXJ0ZXggKiB0aGlzLnNpemUpIHtcclxuICAgICAgICB2YXIgQXJyYXlDb25zdHJ1Y3RvciA9IGdldEFycmF5Q3RvckJ5VHlwZSh0aGlzLnR5cGUpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihuVmVydGV4ICogdGhpcy5zaXplKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbml0aWFsaXplIGF0dHJpYnV0ZSB3aXRoIGdpdmVuIGFycmF5LiBXaGljaCBjYW4gYmUgMSBkaW1lbnNpb25hbCBvciAyIGRpbWVuc2lvbmFsXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XHJcbiAqIEBleGFtcGxlXHJcbiAqICBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJykuZnJvbUFycmF5KFxyXG4gKiAgICAgIFstMSwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMF1cclxuICogICk7XHJcbiAqICBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJykuZnJvbUFycmF5KFxyXG4gKiAgICAgIFsgWy0xLCAwLCAwXSwgWzEsIDAsIDBdLCBbMCwgMSwgMF0gXVxyXG4gKiAgKTtcclxuICovXHJcbkF0dHJpYnV0ZS5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KSB7XHJcbiAgICB2YXIgQXJyYXlDb25zdHJ1Y3RvciA9IGdldEFycmF5Q3RvckJ5VHlwZSh0aGlzLnR5cGUpO1xyXG4gICAgdmFyIHZhbHVlO1xyXG4gICAgLy8gQ29udmVydCAyZCBhcnJheSB0byBmbGF0XHJcbiAgICBpZiAoYXJyYXlbMF0gJiYgKGFycmF5WzBdLmxlbmd0aCkpIHtcclxuICAgICAgICB2YXIgbiA9IDA7XHJcbiAgICAgICAgdmFyIHNpemUgPSB0aGlzLnNpemU7XHJcbiAgICAgICAgdmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihhcnJheS5sZW5ndGggKiBzaXplKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZVtuKytdID0gYXJyYXlbaV1bal07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YWx1ZSA9IG5ldyBBcnJheUNvbnN0cnVjdG9yKGFycmF5KTtcclxuICAgIH1cclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxufTtcclxuXHJcbkF0dHJpYnV0ZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbihjb3B5VmFsdWUpIHtcclxuICAgIHZhciByZXQgPSBuZXcgQXR0cmlidXRlKHRoaXMubmFtZSwgdGhpcy50eXBlLCB0aGlzLnNpemUsIHRoaXMuc2VtYW50aWMpO1xyXG4gICAgLy8gRklYTUVcclxuICAgIGlmIChjb3B5VmFsdWUpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ3RvZG8nKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXQ7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBBdHRyaWJ1dGVCdWZmZXIobmFtZSwgdHlwZSwgYnVmZmVyLCBzaXplLCBzZW1hbnRpYykge1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIHRoaXMudHlwZSA9IHR5cGU7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcclxuICAgIHRoaXMuc2l6ZSA9IHNpemU7XHJcbiAgICB0aGlzLnNlbWFudGljID0gc2VtYW50aWM7XHJcblxyXG4gICAgLy8gVG8gYmUgc2V0IGluIG1lc2hcclxuICAgIC8vIHN5bWJvbCBpbiB0aGUgc2hhZGVyXHJcbiAgICB0aGlzLnN5bWJvbCA9ICcnO1xyXG5cclxuICAgIC8vIE5lZWRzIHJlbW92ZSBmbGFnXHJcbiAgICB0aGlzLm5lZWRzUmVtb3ZlID0gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEluZGljZXNCdWZmZXIoYnVmZmVyKSB7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcclxuICAgIHRoaXMuY291bnQgPSAwO1xyXG59XHJcblxyXG4vKipcclxuICogQmFzZSBvZiBhbGwgZ2VvbWV0cnkuIFVzZSB7QGxpbmsgY2xheS5HZW9tZXRyeX0gZm9yIGNvbW1vbiAzRCB1c2FnZS5cclxuICogQGNvbnN0cnVjdG9yIGNsYXkuR2VvbWV0cnlCYXNlXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgR2VvbWV0cnlCYXNlID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5HZW9tZXRyeUJhc2UjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBdHRyaWJ1dGVzIG9mIGdlb21ldHJ5LlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3QuPHN0cmluZywgY2xheS5HZW9tZXRyeUJhc2UuQXR0cmlidXRlPn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhdHRyaWJ1dGVzOiB7fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW5kaWNlcyBvZiBnZW9tZXRyeS5cclxuICAgICAgICAgKiBAdHlwZSB7VWludDE2QXJyYXl8VWludDMyQXJyYXl9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5kaWNlczogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdmVydGljZXMgZGF0YSBkeW5hbWljYWxseSB1cGRhdGVkLlxyXG4gICAgICAgICAqIEF0dHJpYnV0ZXMgdmFsdWUgY2FuJ3QgYmUgY2hhbmdlZCBhZnRlciBmaXJzdCByZW5kZXIgaWYgZHlhbm1pYyBpcyBmYWxzZS5cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkeW5hbWljOiB0cnVlLFxyXG5cclxuICAgICAgICBfZW5hYmxlZEF0dHJpYnV0ZXM6IG51bGwsXHJcblxyXG4gICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAvLyBJbml0IGl0IGhlcmUgdG8gYXZvaWQgZGVvcHRpbWl6YXRpb24gd2hlbiBpdCdzIGFzc2lnbmVkIGluIGFwcGxpY2F0aW9uIGR5bmFtaWNhbGx5XHJcbiAgICAgICAgX191c2VkOiAwXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbigpIHtcclxuICAgIC8vIFVzZSBjYWNoZVxyXG4gICAgdGhpcy5fY2FjaGUgPSBuZXcgQ2FjaGUoKTtcclxuXHJcbiAgICB0aGlzLl9hdHRyaWJ1dGVMaXN0ID0gT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKTtcclxuXHJcbiAgICB0aGlzLl9fdmFvQ2FjaGUgPSB7fTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5Lkdlb21ldHJ5QmFzZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBNYWluIGF0dHJpYnV0ZSB3aWxsIGJlIHVzZWQgdG8gY291bnQgdmVydGV4IG51bWJlclxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgbWFpbkF0dHJpYnV0ZTogJycsXHJcbiAgICAvKipcclxuICAgICAqIFVzZXIgZGVmaW5lZCBwaWNraW5nIGFsZ29yaXRobSBpbnN0ZWFkIG9mIGRlZmF1bHRcclxuICAgICAqIHRyaWFuZ2xlIHJheSBpbnRlcnNlY3Rpb25cclxuICAgICAqIHgsIHkgYXJlIE5EQy5cclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqICh4LCB5LCByZW5kZXJlciwgY2FtZXJhLCByZW5kZXJhYmxlLCBvdXQpID0+IGJvb2xlYW5cclxuICAgICAqIGBgYFxyXG4gICAgICogQHR5cGUgez9GdW5jdGlvbn1cclxuICAgICAqL1xyXG4gICAgcGljazogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZXIgZGVmaW5lZCByYXkgcGlja2luZyBhbGdvcml0aG0gaW5zdGVhZCBvZiBkZWZhdWx0XHJcbiAgICAgKiB0cmlhbmdsZSByYXkgaW50ZXJzZWN0aW9uXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAocmF5OiBjbGF5LlJheSwgcmVuZGVyYWJsZTogY2xheS5SZW5kZXJhYmxlLCBvdXQ6IEFycmF5KSA9PiBib29sZWFuXHJcbiAgICAgKiBgYGBcclxuICAgICAqIEB0eXBlIHs/RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIHBpY2tCeVJheTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmsgYXR0cmlidXRlcyBhbmQgaW5kaWNlcyBpbiBnZW9tZXRyeSBuZWVkcyB0byB1cGRhdGUuXHJcbiAgICAgKiBVc3VhbGx5IGNhbGxlZCBhZnRlciB5b3UgY2hhbmdlIHRoZSBkYXRhIGluIGF0dHJpYnV0ZXMuXHJcbiAgICAgKi9cclxuICAgIGRpcnR5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGVuYWJsZWRBdHRyaWJ1dGVzID0gdGhpcy5nZXRFbmFibGVkQXR0cmlidXRlcygpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5hYmxlZEF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5kaXJ0eUF0dHJpYnV0ZShlbmFibGVkQXR0cmlidXRlc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlydHlJbmRpY2VzKCk7XHJcbiAgICAgICAgdGhpcy5fZW5hYmxlZEF0dHJpYnV0ZXMgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLl9jYWNoZS5kaXJ0eSgnYW55Jyk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIHRoZSBpbmRpY2VzIG5lZWRzIHRvIHVwZGF0ZS5cclxuICAgICAqL1xyXG4gICAgZGlydHlJbmRpY2VzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fY2FjaGUuZGlydHlBbGwoJ2luZGljZXMnKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIE1hcmsgdGhlIGF0dHJpYnV0ZXMgbmVlZHMgdG8gdXBkYXRlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFthdHRyTmFtZV1cclxuICAgICAqL1xyXG4gICAgZGlydHlBdHRyaWJ1dGU6IGZ1bmN0aW9uIChhdHRyTmFtZSkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlLmRpcnR5QWxsKG1ha2VBdHRyS2V5KGF0dHJOYW1lKSk7XHJcbiAgICAgICAgdGhpcy5fY2FjaGUuZGlydHlBbGwoJ2F0dHJpYnV0ZXMnKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBpbmRpY2VzIG9mIHRyaWFuZ2xlIGF0IGdpdmVuIGluZGV4LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gICAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gb3V0XHJcbiAgICAgKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgZ2V0VHJpYW5nbGVJbmRpY2VzOiBmdW5jdGlvbiAoaWR4LCBvdXQpIHtcclxuICAgICAgICBpZiAoaWR4IDwgdGhpcy50cmlhbmdsZUNvdW50ICYmIGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgICAgICBvdXQgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICAgICAgb3V0WzBdID0gaW5kaWNlc1tpZHggKiAzXTtcclxuICAgICAgICAgICAgb3V0WzFdID0gaW5kaWNlc1tpZHggKiAzICsgMV07XHJcbiAgICAgICAgICAgIG91dFsyXSA9IGluZGljZXNbaWR4ICogMyArIDJdO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgaW5kaWNlcyBvZiB0cmlhbmdsZSBhdCBnaXZlbiBpbmRleC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxyXG4gICAgICovXHJcbiAgICBzZXRUcmlhbmdsZUluZGljZXM6IGZ1bmN0aW9uIChpZHgsIGFycikge1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG4gICAgICAgIGluZGljZXNbaWR4ICogM10gPSBhcnJbMF07XHJcbiAgICAgICAgaW5kaWNlc1tpZHggKiAzICsgMV0gPSBhcnJbMV07XHJcbiAgICAgICAgaW5kaWNlc1tpZHggKiAzICsgMl0gPSBhcnJbMl07XHJcbiAgICB9LFxyXG5cclxuICAgIGlzVXNlSW5kaWNlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuaW5kaWNlcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplIGluZGljZXMgZnJvbSBhbiBhcnJheS5cclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XHJcbiAgICAgKi9cclxuICAgIGluaXRJbmRpY2VzRnJvbUFycmF5OiBmdW5jdGlvbiAoYXJyYXkpIHtcclxuICAgICAgICB2YXIgdmFsdWU7XHJcbiAgICAgICAgdmFyIEFycmF5Q29uc3RydWN0b3IgPSB0aGlzLnZlcnRleENvdW50ID4gMHhmZmZmXHJcbiAgICAgICAgICAgID8gdmVuZG9yLlVpbnQzMkFycmF5IDogdmVuZG9yLlVpbnQxNkFycmF5O1xyXG4gICAgICAgIC8vIENvbnZlcnQgMmQgYXJyYXkgdG8gZmxhdFxyXG4gICAgICAgIGlmIChhcnJheVswXSAmJiAoYXJyYXlbMF0ubGVuZ3RoKSkge1xyXG4gICAgICAgICAgICB2YXIgbiA9IDA7XHJcbiAgICAgICAgICAgIHZhciBzaXplID0gMztcclxuXHJcbiAgICAgICAgICAgIHZhbHVlID0gbmV3IEFycmF5Q29uc3RydWN0b3IoYXJyYXkubGVuZ3RoICogc2l6ZSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVbbisrXSA9IGFycmF5W2ldW2pdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IG5ldyBBcnJheUNvbnN0cnVjdG9yKGFycmF5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW5kaWNlcyA9IHZhbHVlO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgbmV3IGF0dHJpYnV0ZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZW1hbnRpY11cclxuICAgICAqL1xyXG4gICAgY3JlYXRlQXR0cmlidXRlOiBmdW5jdGlvbiAobmFtZSwgdHlwZSwgc2l6ZSwgc2VtYW50aWMpIHtcclxuICAgICAgICB2YXIgYXR0cmliID0gbmV3IEF0dHJpYnV0ZShuYW1lLCB0eXBlLCBzaXplLCBzZW1hbnRpYyk7XHJcbiAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlc1tuYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW25hbWVdID0gYXR0cmliO1xyXG4gICAgICAgIHRoaXMuX2F0dHJpYnV0ZUxpc3QucHVzaChuYW1lKTtcclxuICAgICAgICByZXR1cm4gYXR0cmliO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGF0dHJpYnV0ZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQXR0cmlidXRlOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVMaXN0ID0gdGhpcy5fYXR0cmlidXRlTGlzdDtcclxuICAgICAgICB2YXIgaWR4ID0gYXR0cmlidXRlTGlzdC5pbmRleE9mKG5hbWUpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICBhdHRyaWJ1dGVMaXN0LnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhdHRyaWJ1dGVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGV9XHJcbiAgICAgKi9cclxuICAgIGdldEF0dHJpYnV0ZTogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBlbmFibGVkIGF0dHJpYnV0ZXMgbmFtZSBsaXN0XHJcbiAgICAgKiBBdHRyaWJ1dGUgd2hpY2ggaGFzIHRoZSBzYW1lIHZlcnRleCBudW1iZXIgd2l0aCBwb3NpdGlvbiBpcyB0cmVhdGVkIGFzIGEgZW5hYmxlZCBhdHRyaWJ1dGVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfVxyXG4gICAgICovXHJcbiAgICBnZXRFbmFibGVkQXR0cmlidXRlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBlbmFibGVkQXR0cmlidXRlcyA9IHRoaXMuX2VuYWJsZWRBdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVMaXN0ID0gdGhpcy5fYXR0cmlidXRlTGlzdDtcclxuICAgICAgICAvLyBDYWNoZVxyXG4gICAgICAgIGlmIChlbmFibGVkQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gZW5hYmxlZEF0dHJpYnV0ZXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgdmFyIG5WZXJ0ZXggPSB0aGlzLnZlcnRleENvdW50O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZUxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVMaXN0W2ldO1xyXG4gICAgICAgICAgICB2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoYXR0cmliLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXR0cmliLnZhbHVlLmxlbmd0aCA9PT0gblZlcnRleCAqIGF0dHJpYi5zaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2VuYWJsZWRBdHRyaWJ1dGVzID0gcmVzdWx0O1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRCdWZmZXJDaHVua3M6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcclxuICAgICAgICB2YXIgaXNBdHRyaWJ1dGVzRGlydHkgPSBjYWNoZS5pc0RpcnR5KCdhdHRyaWJ1dGVzJyk7XHJcbiAgICAgICAgdmFyIGlzSW5kaWNlc0RpcnR5ID0gY2FjaGUuaXNEaXJ0eSgnaW5kaWNlcycpO1xyXG4gICAgICAgIGlmIChpc0F0dHJpYnV0ZXNEaXJ0eSB8fCBpc0luZGljZXNEaXJ0eSkge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVCdWZmZXIocmVuZGVyZXIuZ2wsIGlzQXR0cmlidXRlc0RpcnR5LCBpc0luZGljZXNEaXJ0eSk7XHJcbiAgICAgICAgICAgIHZhciBlbmFibGVkQXR0cmlidXRlcyA9IHRoaXMuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkQXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY2FjaGUuZnJlc2gobWFrZUF0dHJLZXkoZW5hYmxlZEF0dHJpYnV0ZXNbaV0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYWNoZS5mcmVzaCgnYXR0cmlidXRlcycpO1xyXG4gICAgICAgICAgICBjYWNoZS5mcmVzaCgnaW5kaWNlcycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYWNoZS5mcmVzaCgnYW55Jyk7XHJcbiAgICAgICAgcmV0dXJuIGNhY2hlLmdldCgnY2h1bmtzJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVCdWZmZXI6IGZ1bmN0aW9uIChfZ2wsIGlzQXR0cmlidXRlc0RpcnR5LCBpc0luZGljZXNEaXJ0eSkge1xyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG4gICAgICAgIHZhciBjaHVua3MgPSBjYWNoZS5nZXQoJ2NodW5rcycpO1xyXG4gICAgICAgIHZhciBmaXJzdFVwZGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghY2h1bmtzKSB7XHJcbiAgICAgICAgICAgIGNodW5rcyA9IFtdO1xyXG4gICAgICAgICAgICAvLyBJbnRpYWxpemVcclxuICAgICAgICAgICAgY2h1bmtzWzBdID0ge1xyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlQnVmZmVyczogW10sXHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzQnVmZmVyOiBudWxsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNhY2hlLnB1dCgnY2h1bmtzJywgY2h1bmtzKTtcclxuICAgICAgICAgICAgZmlyc3RVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNodW5rID0gY2h1bmtzWzBdO1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVCdWZmZXJzID0gY2h1bmsuYXR0cmlidXRlQnVmZmVycztcclxuICAgICAgICB2YXIgaW5kaWNlc0J1ZmZlciA9IGNodW5rLmluZGljZXNCdWZmZXI7XHJcblxyXG4gICAgICAgIGlmIChpc0F0dHJpYnV0ZXNEaXJ0eSB8fCBmaXJzdFVwZGF0ZSkge1xyXG4gICAgICAgICAgICB2YXIgYXR0cmlidXRlTGlzdCA9IHRoaXMuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVCdWZmZXJNYXAgPSB7fTtcclxuICAgICAgICAgICAgaWYgKCFmaXJzdFVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlQnVmZmVyTWFwW2F0dHJpYnV0ZUJ1ZmZlcnNbaV0ubmFtZV0gPSBhdHRyaWJ1dGVCdWZmZXJzW2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIElmIHNvbWUgYXR0cmlidXRlcyByZW1vdmVkXHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYXR0cmlidXRlTGlzdC5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVMaXN0W2tdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgYnVmZmVySW5mbztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWZpcnN0VXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVySW5mbyA9IGF0dHJpYnV0ZUJ1ZmZlck1hcFtuYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBidWZmZXI7XHJcbiAgICAgICAgICAgICAgICBpZiAoYnVmZmVySW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlckluZm8uYnVmZmVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gX2dsLmNyZWF0ZUJ1ZmZlcigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNhY2hlLmlzRGlydHkobWFrZUF0dHJLZXkobmFtZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSB1cGRhdGUgd2hlbiB0aGV5IGFyZSBkaXJ0eS5cclxuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBVc2UgQnVmZmVyU3ViRGF0YT9cclxuICAgICAgICAgICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlcihfZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9nbC5idWZmZXJEYXRhKF9nbC5BUlJBWV9CVUZGRVIsIGF0dHJpYnV0ZS52YWx1ZSwgdGhpcy5keW5hbWljID8gZ2xlbnVtLkRZTkFNSUNfRFJBVyA6IGdsZW51bS5TVEFUSUNfRFJBVyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlQnVmZmVyc1trXSA9IG5ldyBBdHRyaWJ1dGVCdWZmZXIobmFtZSwgYXR0cmlidXRlLnR5cGUsIGJ1ZmZlciwgYXR0cmlidXRlLnNpemUsIGF0dHJpYnV0ZS5zZW1hbnRpYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUmVtb3ZlIHVudXNlZCBhdHRyaWJ1dGVzIGJ1ZmZlcnMuXHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGs7IGkgPCBhdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZGVsZXRlQnVmZmVyKGF0dHJpYnV0ZUJ1ZmZlcnNbaV0uYnVmZmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aCA9IGs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNVc2VJbmRpY2VzKCkgJiYgKGlzSW5kaWNlc0RpcnR5IHx8IGZpcnN0VXBkYXRlKSkge1xyXG4gICAgICAgICAgICBpZiAoIWluZGljZXNCdWZmZXIpIHtcclxuICAgICAgICAgICAgICAgIGluZGljZXNCdWZmZXIgPSBuZXcgSW5kaWNlc0J1ZmZlcihfZ2wuY3JlYXRlQnVmZmVyKCkpO1xyXG4gICAgICAgICAgICAgICAgY2h1bmsuaW5kaWNlc0J1ZmZlciA9IGluZGljZXNCdWZmZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW5kaWNlc0J1ZmZlci5jb3VudCA9IHRoaXMuaW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIF9nbC5iaW5kQnVmZmVyKF9nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgaW5kaWNlc0J1ZmZlci5idWZmZXIpO1xyXG4gICAgICAgICAgICBfZ2wuYnVmZmVyRGF0YShfZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kaWNlcywgdGhpcy5keW5hbWljID8gZ2xlbnVtLkRZTkFNSUNfRFJBVyA6IGdsZW51bS5TVEFUSUNfRFJBVyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgZ2VvbWV0cnkgZGF0YSBpbiBHTCBjb250ZXh0LlxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuXHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcblxyXG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcclxuICAgICAgICB2YXIgY2h1bmtzID0gY2FjaGUuZ2V0KCdjaHVua3MnKTtcclxuICAgICAgICBpZiAoY2h1bmtzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY2h1bmtzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBjaHVua3NbY107XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBjaHVuay5hdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnMgPSBjaHVuay5hdHRyaWJ1dGVCdWZmZXJzW2tdO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLmdsLmRlbGV0ZUJ1ZmZlcihhdHRyaWJzLmJ1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNodW5rLmluZGljZXNCdWZmZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5nbC5kZWxldGVCdWZmZXIoY2h1bmsuaW5kaWNlc0J1ZmZlci5idWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9fdmFvQ2FjaGUpIHtcclxuICAgICAgICAgICAgdmFyIHZhb0V4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9fdmFvQ2FjaGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YW8gPSB0aGlzLl9fdmFvQ2FjaGVbaWRdLnZhbztcclxuICAgICAgICAgICAgICAgIGlmICh2YW8pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YW9FeHQuZGVsZXRlVmVydGV4QXJyYXlPRVModmFvKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9fdmFvQ2FjaGUgPSB7fTtcclxuICAgICAgICBjYWNoZS5kZWxldGVDb250ZXh0KHJlbmRlcmVyLl9fdWlkX18pO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIGNsYXkuR2VvbWV0cnlCYXNlI3ZlcnRleENvdW50XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHZW9tZXRyeUJhc2UucHJvdG90eXBlLCAndmVydGV4Q291bnQnLCB7XHJcblxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBtYWluQXR0cmlidXRlID0gdGhpcy5hdHRyaWJ1dGVzW3RoaXMubWFpbkF0dHJpYnV0ZV07XHJcblxyXG4gICAgICAgICAgICBpZiAoIW1haW5BdHRyaWJ1dGUpIHtcclxuICAgICAgICAgICAgICAgIG1haW5BdHRyaWJ1dGUgPSB0aGlzLmF0dHJpYnV0ZXNbdGhpcy5fYXR0cmlidXRlTGlzdFswXV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghbWFpbkF0dHJpYnV0ZSB8fCAhbWFpbkF0dHJpYnV0ZS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG1haW5BdHRyaWJ1dGUudmFsdWUubGVuZ3RoIC8gbWFpbkF0dHJpYnV0ZS5zaXplO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBjbGF5Lkdlb21ldHJ5QmFzZSN0cmlhbmdsZUNvdW50XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHZW9tZXRyeUJhc2UucHJvdG90eXBlLCAndHJpYW5nbGVDb3VudCcsIHtcclxuXHJcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICAgICAgaWYgKCFpbmRpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbmRpY2VzLmxlbmd0aCAvIDM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuR2VvbWV0cnlCYXNlLlNUQVRJQ19EUkFXID0gZ2xlbnVtLlNUQVRJQ19EUkFXO1xyXG5HZW9tZXRyeUJhc2UuRFlOQU1JQ19EUkFXID0gZ2xlbnVtLkRZTkFNSUNfRFJBVztcclxuR2VvbWV0cnlCYXNlLlNUUkVBTV9EUkFXID0gZ2xlbnVtLlNUUkVBTV9EUkFXO1xyXG5cclxuR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZUJ1ZmZlciA9IEF0dHJpYnV0ZUJ1ZmZlcjtcclxuR2VvbWV0cnlCYXNlLkluZGljZXNCdWZmZXIgPSBJbmRpY2VzQnVmZmVyO1xyXG5cclxuR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdlb21ldHJ5QmFzZTtcclxuIiwiaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi9nbG1hdHJpeC92ZWMzJztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCBHZW9tZXRyeUJhc2UgZnJvbSAnLi9HZW9tZXRyeUJhc2UnO1xyXG5cclxudmFyIHZlYzNDcmVhdGUgPSB2ZWMzLmNyZWF0ZTtcclxudmFyIHZlYzNBZGQgPSB2ZWMzLmFkZDtcclxudmFyIHZlYzNTZXQgPSB2ZWMzLnNldDtcclxuXHJcbnZhciBBdHRyaWJ1dGUgPSBHZW9tZXRyeUJhc2UuQXR0cmlidXRlO1xyXG5cclxuLyoqXHJcbiAqIEdlb21ldHJ5IGluIENsYXlHTCBjb250YWlucyB2ZXJ0ZXggYXR0cmlidXRlcyBvZiBtZXNoLiBUaGVzZSB2ZXJ0ZXggYXR0cmlidXRlcyB3aWxsIGJlIGZpbmFsbHkgcHJvdmlkZWQgdG8gdGhlIHtAbGluayBjbGF5LlNoYWRlcn0uXHJcbiAqIERpZmZlcmVudCB7QGxpbmsgY2xheS5TaGFkZXJ9IG5lZWRzIGRpZmZlcmVudCBhdHRyaWJ1dGVzLiBIZXJlIGlzIGEgbGlzdCBvZiBhdHRyaWJ1dGVzIHVzZWQgaW4gdGhlIGJ1aWx0aW4gc2hhZGVycy5cclxuICpcclxuICogKyBwb3NpdGlvbjogYGNsYXkuYmFzaWNgLCBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgdGV4Y29vcmQwOiBgY2xheS5iYXNpY2AsIGBjbGF5LmxhbWJlcnRgLCBgY2xheS5zdGFuZGFyZGBcclxuICogKyBjb2xvcjogYGNsYXkuYmFzaWNgLCBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgd2VpZ2h0OiBgY2xheS5iYXNpY2AsIGBjbGF5LmxhbWJlcnRgLCBgY2xheS5zdGFuZGFyZGBcclxuICogKyBqb2ludDogYGNsYXkuYmFzaWNgLCBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgbm9ybWFsOiBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgdGFuZ2VudDogYGNsYXkuc3RhbmRhcmRgXHJcbiAqXHJcbiAqICMjIyMgQ3JlYXRlIGEgcHJvY2VkdXJhbCBnZW9tZXRyeVxyXG4gKlxyXG4gKiBDbGF5R0wgcHJvdmlkZXMgYSBjb3VwbGUgb2YgYnVpbHRpbiBwcm9jZWR1cmFsIGdlb21ldHJpZXMuIElubGN1ZGluZzpcclxuICpcclxuICogICsge0BsaW5rIGNsYXkuZ2VvbWV0cnkuQ3ViZX1cclxuICogICsge0BsaW5rIGNsYXkuZ2VvbWV0cnkuU3BoZXJlfVxyXG4gKiAgKyB7QGxpbmsgY2xheS5nZW9tZXRyeS5QbGFuZX1cclxuICogICsge0BsaW5rIGNsYXkuZ2VvbWV0cnkuQ3lsaW5kZXJ9XHJcbiAqICArIHtAbGluayBjbGF5Lmdlb21ldHJ5LkNvbmV9XHJcbiAqICArIHtAbGluayBjbGF5Lmdlb21ldHJ5LlBhcmFtZXRyaWNTdXJmYWNlfVxyXG4gKlxyXG4gKiBJdCdzIHNpbXBsZSB0byBjcmVhdGUgYSBiYXNpYyBnZW9tZXRyeSB3aXRoIHRoZXNlIGNsYXNzZXMuXHJcbiAqXHJcbmBgYGpzXHJcbnZhciBzcGhlcmUgPSBuZXcgY2xheS5nZW9tZXRyeS5TcGhlcmUoe1xyXG4gICAgcmFkaXVzOiAyXHJcbn0pO1xyXG5gYGBcclxuICpcclxuICogIyMjIyBDcmVhdGUgdGhlIGdlb21ldHJ5IGRhdGEgYnkgeW91cnNlbGZcclxuICpcclxuICogVXN1YWxseSB0aGUgdmVydGV4IGF0dHJpYnV0ZXMgZGF0YSBhcmUgY3JlYXRlZCBieSB0aGUge0BsaW5rIGNsYXkubG9hZGVyLkdMVEZ9IG9yIHByb2NlZHVyYWwgZ2VvbWV0cmllcyBsaWtlIHtAbGluayBjbGF5Lmdlb21ldHJ5LlNwaGVyZX0uXHJcbiAqIEJlc2lkZXMgdGhlc2UsIHlvdSBjYW4gY3JlYXRlIHRoZSBkYXRhIG1hbnVhbGx5LiBIZXJlIGlzIGEgc2ltcGxlIGV4YW1wbGUgdG8gY3JlYXRlIGEgdHJpYW5nbGUuXHJcbmBgYGpzXHJcbnZhciBUUklBTkdMRV9QT1NJVElPTlMgPSBbXHJcbiAgICBbLTAuNSwgLTAuNSwgMF0sXHJcbiAgICBbMC41LCAtMC41LCAwXSxcclxuICAgIFswLCAwLjUsIDBdXHJcbl07XHJcbnZhciBnZW9tZXRyeSA9IG5ldyBjbGF5LlN0YXRpY0dlb21ldHJ5QmFzZSgpO1xyXG4vLyBBZGQgdHJpYW5nbGUgdmVydGljZXMgdG8gcG9zaXRpb24gYXR0cmlidXRlLlxyXG5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmZyb21BcnJheShUUklBTkdMRV9QT1NJVElPTlMpO1xyXG5gYGBcclxuICogVGhlbiB5b3UgY2FuIHVzZSB0aGUgdXRpbGl0eSBtZXRob2RzIGxpa2UgYGdlbmVyYXRlVmVydGV4Tm9ybWFsc2AsIGBnZW5lcmF0ZVRhbmdlbnRzYCB0byBjcmVhdGUgdGhlIHJlbWFpbmluZyBuZWNlc3NhcnkgYXR0cmlidXRlcy5cclxuICpcclxuICpcclxuICogIyMjIyBVc2Ugd2l0aCBjdXN0b20gc2hhZGVyc1xyXG4gKlxyXG4gKiBJZiB5b3Ugd2FuJ3QgdG8gd3JpdGUgY3VzdG9tIHNoYWRlcnMuIERvbid0IGZvcmdldCB0byBhZGQgU0VNQU5USUNTIHRvIHRoZXNlIGF0dHJpYnV0ZXMuIEZvciBleGFtcGxlXHJcbiAqXHJcbiBgYGBnbHNsXHJcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcclxudW5pZm9ybSBtYXQ0IHdvcmxkSW52ZXJzZVRyYW5zcG9zZSA6IFdPUkxESU5WRVJTRVRSQU5TUE9TRTtcclxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XHJcblxyXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xyXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZCA6IFRFWENPT1JEXzA7XHJcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbCA6IE5PUk1BTDtcclxuYGBgXHJcbiAqIFRoZXNlIGBQT1NJVElPTmAsIGBURVhDT09SRF8wYCwgYE5PUk1BTGAgYXJlIFNFTUFOVElDUyB3aGljaCB3aWxsIG1hcCB0aGUgYXR0cmlidXRlcyBpbiBzaGFkZXIgdG8gdGhlIGF0dHJpYnV0ZXMgaW4gdGhlIEdlb21ldHJ5QmFzZVxyXG4gKlxyXG4gKiBBdmFpbGFibGUgYXR0cmlidXRlcyBTRU1BTlRJQ1MgaW5jbHVkZXMgYFBPU0lUSU9OYCwgYFRFWENPT1JEXzBgLCBgVEVYQ09PUkRfMWAgYE5PUk1BTGAsIGBUQU5HRU5UYCwgYENPTE9SYCwgYFdFSUdIVGAsIGBKT0lOVGAuXHJcbiAqXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlCYXNlXHJcbiAqL1xyXG52YXIgR2VvbWV0cnkgPSBHZW9tZXRyeUJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuR2VvbWV0cnkjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBdHRyaWJ1dGVzIG9mIGdlb21ldHJ5LiBJbmNsdWRpbmc6XHJcbiAgICAgICAgICogICsgYHBvc2l0aW9uYFxyXG4gICAgICAgICAqICArIGB0ZXhjb29yZDBgXHJcbiAgICAgICAgICogICsgYHRleGNvb3JkMWBcclxuICAgICAgICAgKiAgKyBgbm9ybWFsYFxyXG4gICAgICAgICAqICArIGB0YW5nZW50YFxyXG4gICAgICAgICAqICArIGBjb2xvcmBcclxuICAgICAgICAgKiAgKyBgd2VpZ2h0YFxyXG4gICAgICAgICAqICArIGBqb2ludGBcclxuICAgICAgICAgKiAgKyBgYmFyeWNlbnRyaWNgXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIGNsYXkuR2VvbWV0cnkuQXR0cmlidXRlPn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgQXR0cmlidXRlKCdwb3NpdGlvbicsICdmbG9hdCcsIDMsICdQT1NJVElPTicpLFxyXG4gICAgICAgICAgICB0ZXhjb29yZDA6IG5ldyBBdHRyaWJ1dGUoJ3RleGNvb3JkMCcsICdmbG9hdCcsIDIsICdURVhDT09SRF8wJyksXHJcbiAgICAgICAgICAgIHRleGNvb3JkMTogbmV3IEF0dHJpYnV0ZSgndGV4Y29vcmQxJywgJ2Zsb2F0JywgMiwgJ1RFWENPT1JEXzEnKSxcclxuICAgICAgICAgICAgbm9ybWFsOiBuZXcgQXR0cmlidXRlKCdub3JtYWwnLCAnZmxvYXQnLCAzLCAnTk9STUFMJyksXHJcbiAgICAgICAgICAgIHRhbmdlbnQ6IG5ldyBBdHRyaWJ1dGUoJ3RhbmdlbnQnLCAnZmxvYXQnLCA0LCAnVEFOR0VOVCcpLFxyXG4gICAgICAgICAgICBjb2xvcjogbmV3IEF0dHJpYnV0ZSgnY29sb3InLCAnZmxvYXQnLCA0LCAnQ09MT1InKSxcclxuICAgICAgICAgICAgLy8gU2tpbm5pbmcgYXR0cmlidXRlc1xyXG4gICAgICAgICAgICAvLyBFYWNoIHZlcnRleCBjYW4gYmUgYmluZCB0byA0IGJvbmVzLCBiZWNhdXNlIHRoZVxyXG4gICAgICAgICAgICAvLyBzdW0gb2Ygd2VpZ2h0cyBpcyAxLCBzbyB0aGUgd2VpZ2h0cyBpcyBzdG9yZWQgaW4gdmVjMyBhbmQgdGhlIGxhc3RcclxuICAgICAgICAgICAgLy8gY2FuIGJlIGNhbGN1bGF0ZWQgYnkgMS13Lngtdy55LXcuelxyXG4gICAgICAgICAgICB3ZWlnaHQ6IG5ldyBBdHRyaWJ1dGUoJ3dlaWdodCcsICdmbG9hdCcsIDMsICdXRUlHSFQnKSxcclxuICAgICAgICAgICAgam9pbnQ6IG5ldyBBdHRyaWJ1dGUoJ2pvaW50JywgJ2Zsb2F0JywgNCwgJ0pPSU5UJyksXHJcbiAgICAgICAgICAgIC8vIEZvciB3aXJlZnJhbWUgZGlzcGxheVxyXG4gICAgICAgICAgICAvLyBodHRwOi8vY29kZWZsb3cub3JnL2VudHJpZXMvMjAxMi9hdWcvMDIvZWFzeS13aXJlZnJhbWUtZGlzcGxheS13aXRoLWJhcnljZW50cmljLWNvb3JkaW5hdGVzL1xyXG4gICAgICAgICAgICBiYXJ5Y2VudHJpYzogbmV3IEF0dHJpYnV0ZSgnYmFyeWNlbnRyaWMnLCAnZmxvYXQnLCAzLCBudWxsKSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbGN1bGF0ZWQgYm91bmRpbmcgYm94IG9mIGdlb21ldHJ5LlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LkJvdW5kaW5nQm94fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGJvdW5kaW5nQm94OiBudWxsXHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuR2VvbWV0cnkucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICBtYWluQXR0cmlidXRlOiAncG9zaXRpb24nLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIGJvdW5kaW5nQm94IG9mIEdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUJvdW5kaW5nQm94OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGJib3ggPSB0aGlzLmJvdW5kaW5nQm94O1xyXG4gICAgICAgIGlmICghYmJveCkge1xyXG4gICAgICAgICAgICBiYm94ID0gdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcG9zQXJyID0gdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIGlmIChwb3NBcnIgJiYgcG9zQXJyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YXIgbWluID0gYmJveC5taW47XHJcbiAgICAgICAgICAgIHZhciBtYXggPSBiYm94Lm1heDtcclxuICAgICAgICAgICAgdmFyIG1pbkFyciA9IG1pbi5hcnJheTtcclxuICAgICAgICAgICAgdmFyIG1heEFyciA9IG1heC5hcnJheTtcclxuICAgICAgICAgICAgdmVjMy5zZXQobWluQXJyLCBwb3NBcnJbMF0sIHBvc0FyclsxXSwgcG9zQXJyWzJdKTtcclxuICAgICAgICAgICAgdmVjMy5zZXQobWF4QXJyLCBwb3NBcnJbMF0sIHBvc0FyclsxXSwgcG9zQXJyWzJdKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDM7IGkgPCBwb3NBcnIubGVuZ3RoOykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHggPSBwb3NBcnJbaSsrXTtcclxuICAgICAgICAgICAgICAgIHZhciB5ID0gcG9zQXJyW2krK107XHJcbiAgICAgICAgICAgICAgICB2YXIgeiA9IHBvc0FycltpKytdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHggPCBtaW5BcnJbMF0pIHsgbWluQXJyWzBdID0geDsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHkgPCBtaW5BcnJbMV0pIHsgbWluQXJyWzFdID0geTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHogPCBtaW5BcnJbMl0pIHsgbWluQXJyWzJdID0gejsgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh4ID4gbWF4QXJyWzBdKSB7IG1heEFyclswXSA9IHg7IH1cclxuICAgICAgICAgICAgICAgIGlmICh5ID4gbWF4QXJyWzFdKSB7IG1heEFyclsxXSA9IHk7IH1cclxuICAgICAgICAgICAgICAgIGlmICh6ID4gbWF4QXJyWzJdKSB7IG1heEFyclsyXSA9IHo7IH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIG5vcm1hbHMgcGVyIHZlcnRleC5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVWZXJ0ZXhOb3JtYWxzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZlcnRleENvdW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIHZhciBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICghbm9ybWFscyB8fCBub3JtYWxzLmxlbmd0aCAhPT0gcG9zaXRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWUgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheShwb3NpdGlvbnMubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFJlc2V0XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9ybWFscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsc1tpXSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwMSA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgcDIgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHAzID0gdmVjM0NyZWF0ZSgpO1xyXG5cclxuICAgICAgICB2YXIgdjIxID0gdmVjM0NyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB2MzIgPSB2ZWMzQ3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHZhciBuID0gdmVjM0NyZWF0ZSgpO1xyXG5cclxuICAgICAgICB2YXIgbGVuID0gaW5kaWNlcyA/IGluZGljZXMubGVuZ3RoIDogdGhpcy52ZXJ0ZXhDb3VudDtcclxuICAgICAgICB2YXIgaTEsIGkyLCBpMztcclxuICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGxlbjspIHtcclxuICAgICAgICAgICAgaWYgKGluZGljZXMpIHtcclxuICAgICAgICAgICAgICAgIGkxID0gaW5kaWNlc1tmKytdO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBpbmRpY2VzW2YrK107XHJcbiAgICAgICAgICAgICAgICBpMyA9IGluZGljZXNbZisrXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGkxID0gZisrO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBmKys7XHJcbiAgICAgICAgICAgICAgICBpMyA9IGYrKztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVjM1NldChwMSwgcG9zaXRpb25zW2kxKjNdLCBwb3NpdGlvbnNbaTEqMysxXSwgcG9zaXRpb25zW2kxKjMrMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHAyLCBwb3NpdGlvbnNbaTIqM10sIHBvc2l0aW9uc1tpMiozKzFdLCBwb3NpdGlvbnNbaTIqMysyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQocDMsIHBvc2l0aW9uc1tpMyozXSwgcG9zaXRpb25zW2kzKjMrMV0sIHBvc2l0aW9uc1tpMyozKzJdKTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYyMSwgcDEsIHAyKTtcclxuICAgICAgICAgICAgdmVjMy5zdWIodjMyLCBwMiwgcDMpO1xyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKG4sIHYyMSwgdjMyKTtcclxuICAgICAgICAgICAgLy8gQWxyZWFkeSBiZSB3ZWlnaHRlZCBieSB0aGUgdHJpYW5nbGUgYXJlYVxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsc1tpMSozK2ldID0gbm9ybWFsc1tpMSozK2ldICsgbltpXTtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTIqMytpXSA9IG5vcm1hbHNbaTIqMytpXSArIG5baV07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kzKjMraV0gPSBub3JtYWxzW2kzKjMraV0gKyBuW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vcm1hbHMubGVuZ3RoOykge1xyXG4gICAgICAgICAgICB2ZWMzU2V0KG4sIG5vcm1hbHNbaV0sIG5vcm1hbHNbaSsxXSwgbm9ybWFsc1tpKzJdKTtcclxuICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUobiwgbik7XHJcbiAgICAgICAgICAgIG5vcm1hbHNbaSsrXSA9IG5bMF07XHJcbiAgICAgICAgICAgIG5vcm1hbHNbaSsrXSA9IG5bMV07XHJcbiAgICAgICAgICAgIG5vcm1hbHNbaSsrXSA9IG5bMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlydHkoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBub3JtYWxzIHBlciBmYWNlLlxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZUZhY2VOb3JtYWxzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZlcnRleENvdW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc1VuaXF1ZVZlcnRleCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVVbmlxdWVWZXJ0ZXgoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIHZhciBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcblxyXG4gICAgICAgIHZhciBwMSA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgcDIgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHAzID0gdmVjM0NyZWF0ZSgpO1xyXG5cclxuICAgICAgICB2YXIgdjIxID0gdmVjM0NyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB2MzIgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIG4gPSB2ZWMzQ3JlYXRlKCk7XHJcblxyXG4gICAgICAgIGlmICghbm9ybWFscykge1xyXG4gICAgICAgICAgICBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHBvc2l0aW9ucy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbGVuID0gaW5kaWNlcyA/IGluZGljZXMubGVuZ3RoIDogdGhpcy52ZXJ0ZXhDb3VudDtcclxuICAgICAgICB2YXIgaTEsIGkyLCBpMztcclxuICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGxlbjspIHtcclxuICAgICAgICAgICAgaWYgKGluZGljZXMpIHtcclxuICAgICAgICAgICAgICAgIGkxID0gaW5kaWNlc1tmKytdO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBpbmRpY2VzW2YrK107XHJcbiAgICAgICAgICAgICAgICBpMyA9IGluZGljZXNbZisrXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGkxID0gZisrO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBmKys7XHJcbiAgICAgICAgICAgICAgICBpMyA9IGYrKztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVjM1NldChwMSwgcG9zaXRpb25zW2kxKjNdLCBwb3NpdGlvbnNbaTEqMysxXSwgcG9zaXRpb25zW2kxKjMrMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHAyLCBwb3NpdGlvbnNbaTIqM10sIHBvc2l0aW9uc1tpMiozKzFdLCBwb3NpdGlvbnNbaTIqMysyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQocDMsIHBvc2l0aW9uc1tpMyozXSwgcG9zaXRpb25zW2kzKjMrMV0sIHBvc2l0aW9uc1tpMyozKzJdKTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYyMSwgcDEsIHAyKTtcclxuICAgICAgICAgICAgdmVjMy5zdWIodjMyLCBwMiwgcDMpO1xyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKG4sIHYyMSwgdjMyKTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKG4sIG4pO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTEqMyArIGldID0gbltpXTtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTIqMyArIGldID0gbltpXTtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTMqMyArIGldID0gbltpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgdGFuZ2VudHMgYXR0cmlidXRlcy5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVUYW5nZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgblZlcnRleCA9IHRoaXMudmVydGV4Q291bnQ7XHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgaWYgKCFhdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWUpIHtcclxuICAgICAgICAgICAgYXR0cmlidXRlcy50YW5nZW50LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShuVmVydGV4ICogNCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0ZXhjb29yZHMgPSBhdHRyaWJ1dGVzLnRleGNvb3JkMC52YWx1ZTtcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICB2YXIgdGFuZ2VudHMgPSBhdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWU7XHJcbiAgICAgICAgdmFyIG5vcm1hbHMgPSBhdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKCF0ZXhjb29yZHMpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdHZW9tZXRyeSB3aXRob3V0IHRleGNvb3JkcyBjYW5cXCd0IGdlbmVyYXRlIHRhbmdlbnRzLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGFuMSA9IFtdO1xyXG4gICAgICAgIHZhciB0YW4yID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVmVydGV4OyBpKyspIHtcclxuICAgICAgICAgICAgdGFuMVtpXSA9IFswLjAsIDAuMCwgMC4wXTtcclxuICAgICAgICAgICAgdGFuMltpXSA9IFswLjAsIDAuMCwgMC4wXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzZGlyID0gWzAuMCwgMC4wLCAwLjBdO1xyXG4gICAgICAgIHZhciB0ZGlyID0gWzAuMCwgMC4wLCAwLjBdO1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG5cclxuICAgICAgICB2YXIgbGVuID0gaW5kaWNlcyA/IGluZGljZXMubGVuZ3RoIDogdGhpcy52ZXJ0ZXhDb3VudDtcclxuICAgICAgICB2YXIgaTEsIGkyLCBpMztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjspIHtcclxuICAgICAgICAgICAgaWYgKGluZGljZXMpIHtcclxuICAgICAgICAgICAgICAgIGkxID0gaW5kaWNlc1tpKytdO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBpbmRpY2VzW2krK107XHJcbiAgICAgICAgICAgICAgICBpMyA9IGluZGljZXNbaSsrXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGkxID0gaSsrO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBpKys7XHJcbiAgICAgICAgICAgICAgICBpMyA9IGkrKztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHN0MXMgPSB0ZXhjb29yZHNbaTEgKiAyXSxcclxuICAgICAgICAgICAgICAgIHN0MnMgPSB0ZXhjb29yZHNbaTIgKiAyXSxcclxuICAgICAgICAgICAgICAgIHN0M3MgPSB0ZXhjb29yZHNbaTMgKiAyXSxcclxuICAgICAgICAgICAgICAgIHN0MXQgPSB0ZXhjb29yZHNbaTEgKiAyICsgMV0sXHJcbiAgICAgICAgICAgICAgICBzdDJ0ID0gdGV4Y29vcmRzW2kyICogMiArIDFdLFxyXG4gICAgICAgICAgICAgICAgc3QzdCA9IHRleGNvb3Jkc1tpMyAqIDIgKyAxXSxcclxuXHJcbiAgICAgICAgICAgICAgICBwMXggPSBwb3NpdGlvbnNbaTEgKiAzXSxcclxuICAgICAgICAgICAgICAgIHAyeCA9IHBvc2l0aW9uc1tpMiAqIDNdLFxyXG4gICAgICAgICAgICAgICAgcDN4ID0gcG9zaXRpb25zW2kzICogM10sXHJcbiAgICAgICAgICAgICAgICBwMXkgPSBwb3NpdGlvbnNbaTEgKiAzICsgMV0sXHJcbiAgICAgICAgICAgICAgICBwMnkgPSBwb3NpdGlvbnNbaTIgKiAzICsgMV0sXHJcbiAgICAgICAgICAgICAgICBwM3kgPSBwb3NpdGlvbnNbaTMgKiAzICsgMV0sXHJcbiAgICAgICAgICAgICAgICBwMXogPSBwb3NpdGlvbnNbaTEgKiAzICsgMl0sXHJcbiAgICAgICAgICAgICAgICBwMnogPSBwb3NpdGlvbnNbaTIgKiAzICsgMl0sXHJcbiAgICAgICAgICAgICAgICBwM3ogPSBwb3NpdGlvbnNbaTMgKiAzICsgMl07XHJcblxyXG4gICAgICAgICAgICB2YXIgeDEgPSBwMnggLSBwMXgsXHJcbiAgICAgICAgICAgICAgICB4MiA9IHAzeCAtIHAxeCxcclxuICAgICAgICAgICAgICAgIHkxID0gcDJ5IC0gcDF5LFxyXG4gICAgICAgICAgICAgICAgeTIgPSBwM3kgLSBwMXksXHJcbiAgICAgICAgICAgICAgICB6MSA9IHAyeiAtIHAxeixcclxuICAgICAgICAgICAgICAgIHoyID0gcDN6IC0gcDF6O1xyXG5cclxuICAgICAgICAgICAgdmFyIHMxID0gc3QycyAtIHN0MXMsXHJcbiAgICAgICAgICAgICAgICBzMiA9IHN0M3MgLSBzdDFzLFxyXG4gICAgICAgICAgICAgICAgdDEgPSBzdDJ0IC0gc3QxdCxcclxuICAgICAgICAgICAgICAgIHQyID0gc3QzdCAtIHN0MXQ7XHJcblxyXG4gICAgICAgICAgICB2YXIgciA9IDEuMCAvIChzMSAqIHQyIC0gdDEgKiBzMik7XHJcbiAgICAgICAgICAgIHNkaXJbMF0gPSAodDIgKiB4MSAtIHQxICogeDIpICogcjtcclxuICAgICAgICAgICAgc2RpclsxXSA9ICh0MiAqIHkxIC0gdDEgKiB5MikgKiByO1xyXG4gICAgICAgICAgICBzZGlyWzJdID0gKHQyICogejEgLSB0MSAqIHoyKSAqIHI7XHJcblxyXG4gICAgICAgICAgICB0ZGlyWzBdID0gKHMxICogeDIgLSBzMiAqIHgxKSAqIHI7XHJcbiAgICAgICAgICAgIHRkaXJbMV0gPSAoczEgKiB5MiAtIHMyICogeTEpICogcjtcclxuICAgICAgICAgICAgdGRpclsyXSA9IChzMSAqIHoyIC0gczIgKiB6MSkgKiByO1xyXG5cclxuICAgICAgICAgICAgdmVjM0FkZCh0YW4xW2kxXSwgdGFuMVtpMV0sIHNkaXIpO1xyXG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjFbaTJdLCB0YW4xW2kyXSwgc2Rpcik7XHJcbiAgICAgICAgICAgIHZlYzNBZGQodGFuMVtpM10sIHRhbjFbaTNdLCBzZGlyKTtcclxuICAgICAgICAgICAgdmVjM0FkZCh0YW4yW2kxXSwgdGFuMltpMV0sIHRkaXIpO1xyXG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjJbaTJdLCB0YW4yW2kyXSwgdGRpcik7XHJcbiAgICAgICAgICAgIHZlYzNBZGQodGFuMltpM10sIHRhbjJbaTNdLCB0ZGlyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHRtcCA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgbkNyb3NzVCA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgbiA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5WZXJ0ZXg7IGkrKykge1xyXG4gICAgICAgICAgICBuWzBdID0gbm9ybWFsc1tpICogM107XHJcbiAgICAgICAgICAgIG5bMV0gPSBub3JtYWxzW2kgKiAzICsgMV07XHJcbiAgICAgICAgICAgIG5bMl0gPSBub3JtYWxzW2kgKiAzICsgMl07XHJcbiAgICAgICAgICAgIHZhciB0ID0gdGFuMVtpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIEdyYW0tU2NobWlkdCBvcnRob2dvbmFsaXplXHJcbiAgICAgICAgICAgIHZlYzMuc2NhbGUodG1wLCBuLCB2ZWMzLmRvdChuLCB0KSk7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHRtcCwgdCwgdG1wKTtcclxuICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUodG1wLCB0bXApO1xyXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgaGFuZGVkbmVzcy5cclxuICAgICAgICAgICAgdmVjMy5jcm9zcyhuQ3Jvc3NULCBuLCB0KTtcclxuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDRdID0gdG1wWzBdO1xyXG4gICAgICAgICAgICB0YW5nZW50c1tpICogNCArIDFdID0gdG1wWzFdO1xyXG4gICAgICAgICAgICB0YW5nZW50c1tpICogNCArIDJdID0gdG1wWzJdO1xyXG4gICAgICAgICAgICAvLyBQRU5ESU5HIGNhbiBjb25maWcgP1xyXG4gICAgICAgICAgICB0YW5nZW50c1tpICogNCArIDNdID0gdmVjMy5kb3QobkNyb3NzVCwgdGFuMltpXSkgPCAwLjAgPyAtMS4wIDogMS4wO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdmVydGljZXMgYXJlIG5vdCBzaGFyZWQgYnkgZGlmZmVyZW50IGluZGljZXMuXHJcbiAgICAgKi9cclxuICAgIGlzVW5pcXVlVmVydGV4OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNVc2VJbmRpY2VzKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmVydGV4Q291bnQgPT09IHRoaXMuaW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYSB1bmlxdWUgdmVydGV4IGZvciBlYWNoIGluZGV4LlxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZVVuaXF1ZVZlcnRleDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCB8fCAhdGhpcy5pbmRpY2VzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmluZGljZXMubGVuZ3RoID4gMHhmZmZmKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5kaWNlcyA9IG5ldyB2ZW5kb3IuVWludDMyQXJyYXkodGhpcy5pbmRpY2VzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlTmFtZUxpc3QgPSB0aGlzLmdldEVuYWJsZWRBdHRyaWJ1dGVzKCk7XHJcblxyXG4gICAgICAgIHZhciBvbGRBdHRyVmFsdWVzID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBhdHRyaWJ1dGVOYW1lTGlzdC5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVMaXN0W2FdO1xyXG4gICAgICAgICAgICBvbGRBdHRyVmFsdWVzW25hbWVdID0gYXR0cmlidXRlc1tuYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgYXR0cmlidXRlc1tuYW1lXS5pbml0KHRoaXMuaW5kaWNlcy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGN1cnNvciA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpaSA9IGluZGljZXNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmlidXRlTmFtZUxpc3QubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZUxpc3RbYV07XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBhdHRyaWJ1dGVzW25hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNpemUgPSBhdHRyaWJ1dGVzW25hbWVdLnNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzaXplOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtjdXJzb3IgKiBzaXplICsga10gPSBvbGRBdHRyVmFsdWVzW25hbWVdW2lpICogc2l6ZSArIGtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGluZGljZXNbaV0gPSBjdXJzb3I7XHJcbiAgICAgICAgICAgIGN1cnNvcisrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIGJhcnljZW50cmljIGNvb3JkaW5hdGVzIGZvciB3aXJlZnJhbWUgZHJhdy5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVCYXJ5Y2VudHJpYzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNVbmlxdWVWZXJ0ZXgoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlVW5pcXVlVmVydGV4KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgYXJyYXkgPSBhdHRyaWJ1dGVzLmJhcnljZW50cmljLnZhbHVlO1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG4gICAgICAgIC8vIEFscmVhZHkgZXhpc3RlZDtcclxuICAgICAgICBpZiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoID09PSBpbmRpY2VzLmxlbmd0aCAqIDMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhcnJheSA9IGF0dHJpYnV0ZXMuYmFyeWNlbnRyaWMudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KGluZGljZXMubGVuZ3RoICogMyk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHRoaXMudmVydGV4Q291bnQgLyAzKTspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAzOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBpaSA9IGluZGljZXMgPyBpbmRpY2VzW2krK10gOiAoaSAqIDMgKyBqKTtcclxuICAgICAgICAgICAgICAgIGFycmF5W2lpICogMyArIGpdID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgdHJhbnNmb3JtIHRvIGdlb21ldHJ5IGF0dHJpYnV0ZXMuXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gbWF0cml4XHJcbiAgICAgKi9cclxuICAgIGFwcGx5VHJhbnNmb3JtOiBmdW5jdGlvbiAobWF0cml4KSB7XHJcblxyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIHZhciBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcbiAgICAgICAgdmFyIHRhbmdlbnRzID0gYXR0cmlidXRlcy50YW5nZW50LnZhbHVlO1xyXG5cclxuICAgICAgICBtYXRyaXggPSBtYXRyaXguYXJyYXk7XHJcbiAgICAgICAgLy8gTm9ybWFsIE1hdHJpeFxyXG4gICAgICAgIHZhciBpbnZlcnNlVHJhbnNwb3NlTWF0cml4ID0gbWF0NC5jcmVhdGUoKTtcclxuICAgICAgICBtYXQ0LmludmVydChpbnZlcnNlVHJhbnNwb3NlTWF0cml4LCBtYXRyaXgpO1xyXG4gICAgICAgIG1hdDQudHJhbnNwb3NlKGludmVyc2VUcmFuc3Bvc2VNYXRyaXgsIGludmVyc2VUcmFuc3Bvc2VNYXRyaXgpO1xyXG5cclxuICAgICAgICB2YXIgdmVjM1RyYW5zZm9ybU1hdDQgPSB2ZWMzLnRyYW5zZm9ybU1hdDQ7XHJcbiAgICAgICAgdmFyIHZlYzNGb3JFYWNoID0gdmVjMy5mb3JFYWNoO1xyXG4gICAgICAgIHZlYzNGb3JFYWNoKHBvc2l0aW9ucywgMywgMCwgbnVsbCwgdmVjM1RyYW5zZm9ybU1hdDQsIG1hdHJpeCk7XHJcbiAgICAgICAgaWYgKG5vcm1hbHMpIHtcclxuICAgICAgICAgICAgdmVjM0ZvckVhY2gobm9ybWFscywgMywgMCwgbnVsbCwgdmVjM1RyYW5zZm9ybU1hdDQsIGludmVyc2VUcmFuc3Bvc2VNYXRyaXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGFuZ2VudHMpIHtcclxuICAgICAgICAgICAgdmVjM0ZvckVhY2godGFuZ2VudHMsIDQsIDAsIG51bGwsIHZlYzNUcmFuc2Zvcm1NYXQ0LCBpbnZlcnNlVHJhbnNwb3NlTWF0cml4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdlb21ldHJ5IGRhdGEgaW4gR0wgY29udGV4dC5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcblxyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG5cclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICAgICAgdmFyIGNodW5rcyA9IGNhY2hlLmdldCgnY2h1bmtzJyk7XHJcbiAgICAgICAgaWYgKGNodW5rcykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNodW5rcy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNodW5rID0gY2h1bmtzW2NdO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgY2h1bmsuYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJzID0gY2h1bmsuYXR0cmlidXRlQnVmZmVyc1trXTtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5nbC5kZWxldGVCdWZmZXIoYXR0cmlicy5idWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjaHVuay5pbmRpY2VzQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKGNodW5rLmluZGljZXNCdWZmZXIuYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fX3Zhb0NhY2hlKSB7XHJcbiAgICAgICAgICAgIHZhciB2YW9FeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fX3Zhb0NhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFvID0gdGhpcy5fX3Zhb0NhY2hlW2lkXS52YW87XHJcbiAgICAgICAgICAgICAgICBpZiAodmFvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFvRXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHZhbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fX3Zhb0NhY2hlID0ge307XHJcbiAgICAgICAgY2FjaGUuZGVsZXRlQ29udGV4dChyZW5kZXJlci5fX3VpZF9fKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuR2VvbWV0cnkuU1RBVElDX0RSQVcgPSBHZW9tZXRyeUJhc2UuU1RBVElDX0RSQVc7XHJcbkdlb21ldHJ5LkRZTkFNSUNfRFJBVyA9IEdlb21ldHJ5QmFzZS5EWU5BTUlDX0RSQVc7XHJcbkdlb21ldHJ5LlNUUkVBTV9EUkFXID0gR2VvbWV0cnlCYXNlLlNUUkVBTV9EUkFXO1xyXG5cclxuR2VvbWV0cnkuQXR0cmlidXRlQnVmZmVyID0gR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZUJ1ZmZlcjtcclxuR2VvbWV0cnkuSW5kaWNlc0J1ZmZlciA9IEdlb21ldHJ5QmFzZS5JbmRpY2VzQnVmZmVyO1xyXG5cclxuR2VvbWV0cnkuQXR0cmlidXRlID0gQXR0cmlidXRlO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgR2VvbWV0cnk7XHJcbiIsImltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5nZW9tZXRyeS5QbGFuZVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC53aWR0aFNlZ21lbnRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5oZWlnaHRTZWdtZW50c11cclxuICovXHJcbnZhciBQbGFuZSA9IEdlb21ldHJ5LmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5Lmdlb21ldHJ5LlBsYW5lIyAqL1xyXG57XHJcbiAgICBkeW5hbWljOiBmYWxzZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd2lkdGhTZWdtZW50czogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaGVpZ2h0U2VnbWVudHM6IDFcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5QbGFuZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCBwbGFuZSBnZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICBidWlsZDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGhlaWdodFNlZ21lbnRzID0gdGhpcy5oZWlnaHRTZWdtZW50cztcclxuICAgICAgICB2YXIgd2lkdGhTZWdtZW50cyA9IHRoaXMud2lkdGhTZWdtZW50cztcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gW107XHJcbiAgICAgICAgdmFyIHRleGNvb3JkcyA9IFtdO1xyXG4gICAgICAgIHZhciBub3JtYWxzID0gW107XHJcbiAgICAgICAgdmFyIGZhY2VzID0gW107XHJcblxyXG4gICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDw9IGhlaWdodFNlZ21lbnRzOyB5KyspIHtcclxuICAgICAgICAgICAgdmFyIHQgPSB5IC8gaGVpZ2h0U2VnbWVudHM7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDw9IHdpZHRoU2VnbWVudHM7IHgrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHMgPSB4IC8gd2lkdGhTZWdtZW50cztcclxuXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChbMiAqIHMgLSAxLCAyICogdCAtIDEsIDBdKTtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXhjb29yZHMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXhjb29yZHMucHVzaChbcywgdF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBub3JtYWxzLnB1c2goWzAsIDAsIDFdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh4IDwgd2lkdGhTZWdtZW50cyAmJiB5IDwgaGVpZ2h0U2VnbWVudHMpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHggKyB5ICogKHdpZHRoU2VnbWVudHMgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKFtpLCBpICsgMSwgaSArIHdpZHRoU2VnbWVudHMgKyAxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFjZXMucHVzaChbaSArIHdpZHRoU2VnbWVudHMgKyAxLCBpICsgMSwgaSArIHdpZHRoU2VnbWVudHMgKyAyXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF0dHJpYnV0ZXMucG9zaXRpb24uZnJvbUFycmF5KHBvc2l0aW9ucyk7XHJcbiAgICAgICAgYXR0cmlidXRlcy50ZXhjb29yZDAuZnJvbUFycmF5KHRleGNvb3Jkcyk7XHJcbiAgICAgICAgYXR0cmlidXRlcy5ub3JtYWwuZnJvbUFycmF5KG5vcm1hbHMpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRJbmRpY2VzRnJvbUFycmF5KGZhY2VzKTtcclxuXHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldCgtMSwgLTEsIDApO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWF4LnNldCgxLCAxLCAwKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQbGFuZTtcclxuIiwiaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IFBsYW5lIGZyb20gJy4vUGxhbmUnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5cclxudmFyIHBsYW5lTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5nZW9tZXRyeS5DdWJlXHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LndpZHRoU2VnbWVudHNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmhlaWdodFNlZ21lbnRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5kZXB0aFNlZ21lbnRzXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHQuaW5zaWRlXVxyXG4gKi9cclxudmFyIEN1YmUgPSBHZW9tZXRyeS5leHRlbmQoXHJcbi8qKkBsZW5kcyBjbGF5Lmdlb21ldHJ5LkN1YmUjICovXHJcbntcclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB3aWR0aFNlZ21lbnRzOiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBoZWlnaHRTZWdtZW50czogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGVwdGhTZWdtZW50czogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGluc2lkZTogZmFsc2VcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5DdWJlLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGN1YmUgZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgcGxhbmVzID0ge1xyXG4gICAgICAgICAgICAncHgnOiBjcmVhdGVQbGFuZSgncHgnLCB0aGlzLmRlcHRoU2VnbWVudHMsIHRoaXMuaGVpZ2h0U2VnbWVudHMpLFxyXG4gICAgICAgICAgICAnbngnOiBjcmVhdGVQbGFuZSgnbngnLCB0aGlzLmRlcHRoU2VnbWVudHMsIHRoaXMuaGVpZ2h0U2VnbWVudHMpLFxyXG4gICAgICAgICAgICAncHknOiBjcmVhdGVQbGFuZSgncHknLCB0aGlzLndpZHRoU2VnbWVudHMsIHRoaXMuZGVwdGhTZWdtZW50cyksXHJcbiAgICAgICAgICAgICdueSc6IGNyZWF0ZVBsYW5lKCdueScsIHRoaXMud2lkdGhTZWdtZW50cywgdGhpcy5kZXB0aFNlZ21lbnRzKSxcclxuICAgICAgICAgICAgJ3B6JzogY3JlYXRlUGxhbmUoJ3B6JywgdGhpcy53aWR0aFNlZ21lbnRzLCB0aGlzLmhlaWdodFNlZ21lbnRzKSxcclxuICAgICAgICAgICAgJ256JzogY3JlYXRlUGxhbmUoJ256JywgdGhpcy53aWR0aFNlZ21lbnRzLCB0aGlzLmhlaWdodFNlZ21lbnRzKSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgYXR0ckxpc3QgPSBbJ3Bvc2l0aW9uJywgJ3RleGNvb3JkMCcsICdub3JtYWwnXTtcclxuICAgICAgICB2YXIgdmVydGV4TnVtYmVyID0gMDtcclxuICAgICAgICB2YXIgZmFjZU51bWJlciA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgcG9zIGluIHBsYW5lcykge1xyXG4gICAgICAgICAgICB2ZXJ0ZXhOdW1iZXIgKz0gcGxhbmVzW3Bvc10udmVydGV4Q291bnQ7XHJcbiAgICAgICAgICAgIGZhY2VOdW1iZXIgKz0gcGxhbmVzW3Bvc10uaW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYXR0ckxpc3QubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2F0dHJMaXN0W2tdXS5pbml0KHZlcnRleE51bWJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW5kaWNlcyA9IG5ldyB2ZW5kb3IuVWludDE2QXJyYXkoZmFjZU51bWJlcik7XHJcbiAgICAgICAgdmFyIGZhY2VPZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciB2ZXJ0ZXhPZmZzZXQgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIHBvcyBpbiBwbGFuZXMpIHtcclxuICAgICAgICAgICAgdmFyIHBsYW5lID0gcGxhbmVzW3Bvc107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYXR0ckxpc3QubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyTmFtZSA9IGF0dHJMaXN0W2tdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJBcnJheSA9IHBsYW5lLmF0dHJpYnV0ZXNbYXR0ck5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJTaXplID0gcGxhbmUuYXR0cmlidXRlc1thdHRyTmFtZV0uc2l6ZTtcclxuICAgICAgICAgICAgICAgIHZhciBpc05vcm1hbCA9IGF0dHJOYW1lID09PSAnbm9ybWFsJztcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0ckFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gYXR0ckFycmF5W2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluc2lkZSAmJiBpc05vcm1hbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IC12YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2F0dHJOYW1lXS52YWx1ZVtpICsgYXR0clNpemUgKiB2ZXJ0ZXhPZmZzZXRdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGxlbiA9IHBsYW5lLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYW5lLmluZGljZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5kaWNlc1tpICsgZmFjZU9mZnNldF0gPSB2ZXJ0ZXhPZmZzZXQgKyBwbGFuZS5pbmRpY2VzW3RoaXMuaW5zaWRlID8gKGxlbiAtIGkgLSAxKSA6IGldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZhY2VPZmZzZXQgKz0gcGxhbmUuaW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIHZlcnRleE9mZnNldCArPSBwbGFuZS52ZXJ0ZXhDb3VudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1heC5zZXQoMSwgMSwgMSk7XHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5taW4uc2V0KC0xLCAtMSwgLTEpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVBsYW5lKHBvcywgd2lkdGhTZWdtZW50cywgaGVpZ2h0U2VnbWVudHMpIHtcclxuXHJcbiAgICBwbGFuZU1hdHJpeC5pZGVudGl0eSgpO1xyXG5cclxuICAgIHZhciBwbGFuZSA9IG5ldyBQbGFuZSh7XHJcbiAgICAgICAgd2lkdGhTZWdtZW50czogd2lkdGhTZWdtZW50cyxcclxuICAgICAgICBoZWlnaHRTZWdtZW50czogaGVpZ2h0U2VnbWVudHNcclxuICAgIH0pO1xyXG5cclxuICAgIHN3aXRjaChwb3MpIHtcclxuICAgICAgICBjYXNlICdweCc6XHJcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5QT1NJVElWRV9YKTtcclxuICAgICAgICAgICAgTWF0cml4NC5yb3RhdGVZKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgTWF0aC5QSSAvIDIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdueCc6XHJcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5ORUdBVElWRV9YKTtcclxuICAgICAgICAgICAgTWF0cml4NC5yb3RhdGVZKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgLU1hdGguUEkgLyAyKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAncHknOlxyXG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuUE9TSVRJVkVfWSk7XHJcbiAgICAgICAgICAgIE1hdHJpeDQucm90YXRlWChwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIC1NYXRoLlBJIC8gMik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ255JzpcclxuICAgICAgICAgICAgTWF0cml4NC50cmFuc2xhdGUocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgICAgICAgICBNYXRyaXg0LnJvdGF0ZVgocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBNYXRoLlBJIC8gMik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3B6JzpcclxuICAgICAgICAgICAgTWF0cml4NC50cmFuc2xhdGUocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBWZWN0b3IzLlBPU0lUSVZFX1opO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdueic6XHJcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5ORUdBVElWRV9aKTtcclxuICAgICAgICAgICAgTWF0cml4NC5yb3RhdGVZKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgTWF0aC5QSSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcGxhbmUuYXBwbHlUcmFuc2Zvcm0ocGxhbmVNYXRyaXgpO1xyXG4gICAgcmV0dXJuIHBsYW5lO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDdWJlO1xyXG4iLCJpbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuU3BoZXJlXHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHRTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwaGlTdGFydF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwaGlMZW5ndGhdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbdGhldGFTdGFydF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFt0aGV0YUxlbmd0aF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtyYWRpdXNdXHJcbiAqL1xyXG52YXIgU3BoZXJlID0gR2VvbWV0cnkuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5TcGhlcmUjICovIHtcclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB3aWR0aFNlZ21lbnRzOiA0MCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaGVpZ2h0U2VnbWVudHM6IDIwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcGhpU3RhcnQ6IDAsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHBoaUxlbmd0aDogTWF0aC5QSSAqIDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGV0YVN0YXJ0OiAwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGV0YUxlbmd0aDogTWF0aC5QSSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJhZGl1czogMVxyXG5cclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5TcGhlcmUucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgc3BoZXJlIGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGJ1aWxkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgaGVpZ2h0U2VnbWVudHMgPSB0aGlzLmhlaWdodFNlZ21lbnRzO1xyXG4gICAgICAgIHZhciB3aWR0aFNlZ21lbnRzID0gdGhpcy53aWR0aFNlZ21lbnRzO1xyXG5cclxuICAgICAgICB2YXIgcG9zaXRpb25BdHRyID0gdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciB0ZXhjb29yZEF0dHIgPSB0aGlzLmF0dHJpYnV0ZXMudGV4Y29vcmQwO1xyXG4gICAgICAgIHZhciBub3JtYWxBdHRyID0gdGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtcclxuXHJcbiAgICAgICAgdmFyIHZlcnRleENvdW50ID0gKHdpZHRoU2VnbWVudHMgKyAxKSAqIChoZWlnaHRTZWdtZW50cyArIDEpO1xyXG4gICAgICAgIHBvc2l0aW9uQXR0ci5pbml0KHZlcnRleENvdW50KTtcclxuICAgICAgICB0ZXhjb29yZEF0dHIuaW5pdCh2ZXJ0ZXhDb3VudCk7XHJcbiAgICAgICAgbm9ybWFsQXR0ci5pbml0KHZlcnRleENvdW50KTtcclxuXHJcbiAgICAgICAgdmFyIEluZGljZXNDdG9yID0gdmVydGV4Q291bnQgPiAweGZmZmYgPyBVaW50MzJBcnJheSA6IFVpbnQxNkFycmF5O1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzID0gbmV3IEluZGljZXNDdG9yKHdpZHRoU2VnbWVudHMgKiBoZWlnaHRTZWdtZW50cyAqIDYpO1xyXG5cclxuICAgICAgICB2YXIgeCwgeSwgeixcclxuICAgICAgICAgICAgdSwgdixcclxuICAgICAgICAgICAgaSwgajtcclxuXHJcbiAgICAgICAgdmFyIHJhZGl1cyA9IHRoaXMucmFkaXVzO1xyXG4gICAgICAgIHZhciBwaGlTdGFydCA9IHRoaXMucGhpU3RhcnQ7XHJcbiAgICAgICAgdmFyIHBoaUxlbmd0aCA9IHRoaXMucGhpTGVuZ3RoO1xyXG4gICAgICAgIHZhciB0aGV0YVN0YXJ0ID0gdGhpcy50aGV0YVN0YXJ0O1xyXG4gICAgICAgIHZhciB0aGV0YUxlbmd0aCA9IHRoaXMudGhldGFMZW5ndGg7XHJcbiAgICAgICAgdmFyIHJhZGl1cyA9IHRoaXMucmFkaXVzO1xyXG5cclxuICAgICAgICB2YXIgcG9zID0gW107XHJcbiAgICAgICAgdmFyIHV2ID0gW107XHJcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XHJcbiAgICAgICAgdmFyIGRpdmlkZXIgPSAxIC8gcmFkaXVzO1xyXG4gICAgICAgIGZvciAoaiA9IDA7IGogPD0gaGVpZ2h0U2VnbWVudHM7IGogKyspIHtcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8PSB3aWR0aFNlZ21lbnRzOyBpICsrKSB7XHJcbiAgICAgICAgICAgICAgICB1ID0gaSAvIHdpZHRoU2VnbWVudHM7XHJcbiAgICAgICAgICAgICAgICB2ID0gaiAvIGhlaWdodFNlZ21lbnRzO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFggYXhpcyBpcyBpbnZlcnRlZCBzbyB0ZXh0dXJlIGNhbiBiZSBtYXBwZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0XHJcbiAgICAgICAgICAgICAgICB4ID0gLXJhZGl1cyAqIE1hdGguY29zKHBoaVN0YXJ0ICsgdSAqIHBoaUxlbmd0aCkgKiBNYXRoLnNpbih0aGV0YVN0YXJ0ICsgdiAqIHRoZXRhTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHkgPSByYWRpdXMgKiBNYXRoLmNvcyh0aGV0YVN0YXJ0ICsgdiAqIHRoZXRhTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHogPSByYWRpdXMgKiBNYXRoLnNpbihwaGlTdGFydCArIHUgKiBwaGlMZW5ndGgpICogTWF0aC5zaW4odGhldGFTdGFydCArIHYgKiB0aGV0YUxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcG9zWzBdID0geDsgcG9zWzFdID0geTsgcG9zWzJdID0gejtcclxuICAgICAgICAgICAgICAgIHV2WzBdID0gdTsgdXZbMV0gPSB2O1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25BdHRyLnNldChvZmZzZXQsIHBvcyk7XHJcbiAgICAgICAgICAgICAgICB0ZXhjb29yZEF0dHIuc2V0KG9mZnNldCwgdXYpO1xyXG4gICAgICAgICAgICAgICAgcG9zWzBdICo9IGRpdmlkZXI7XHJcbiAgICAgICAgICAgICAgICBwb3NbMV0gKj0gZGl2aWRlcjtcclxuICAgICAgICAgICAgICAgIHBvc1syXSAqPSBkaXZpZGVyO1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsQXR0ci5zZXQob2Zmc2V0LCBwb3MpO1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0Kys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpMSwgaTIsIGkzLCBpNDtcclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IHdpZHRoU2VnbWVudHMgKyAxO1xyXG5cclxuICAgICAgICB2YXIgbiA9IDA7XHJcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGhlaWdodFNlZ21lbnRzOyBqICsrKSB7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB3aWR0aFNlZ21lbnRzOyBpICsrKSB7XHJcbiAgICAgICAgICAgICAgICBpMiA9IGogKiBsZW4gKyBpO1xyXG4gICAgICAgICAgICAgICAgaTEgPSAoaiAqIGxlbiArIGkgKyAxKTtcclxuICAgICAgICAgICAgICAgIGk0ID0gKGogKyAxKSAqIGxlbiArIGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgaTMgPSAoaiArIDEpICogbGVuICsgaTtcclxuXHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMTtcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGkyO1xyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTQ7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTI7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMztcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGk0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5tYXguc2V0KHJhZGl1cywgcmFkaXVzLCByYWRpdXMpO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldCgtcmFkaXVzLCAtcmFkaXVzLCAtcmFkaXVzKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTcGhlcmU7XHJcbiIsImltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuUGFyYW1ldHJpY1N1cmZhY2VcclxuICogQGV4dGVuZHMgY2xheS5HZW9tZXRyeVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdF1cclxuICogQHBhcmFtIHtPYmplY3R9IFtnZW5lcmF0b3JdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdlbmVyYXRvci54XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdlbmVyYXRvci55XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdlbmVyYXRvci56XHJcbiAqIEBwYXJhbSB7QXJyYXl9IFtnZW5lcmF0b3IudT1bMCwgMSwgMC4wNV1dXHJcbiAqIEBwYXJhbSB7QXJyYXl9IFtnZW5lcmF0b3Iudj1bMCwgMSwgMC4wNV1dXHJcbiAqL1xyXG52YXIgUGFyYW1ldHJpY1N1cmZhY2UgPSBHZW9tZXRyeS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5QYXJhbWV0cmljU3VyZmFjZSMgKi9cclxue1xyXG4gICAgZHluYW1pYzogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRvcjogbnVsbFxyXG5cclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5QYXJhbWV0cmljU3VyZmFjZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCBwYXJhbWV0cmljIHN1cmZhY2UgZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgYnVpbGQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZ2VuZXJhdG9yID0gdGhpcy5nZW5lcmF0b3I7XHJcblxyXG4gICAgICAgIGlmICghZ2VuZXJhdG9yIHx8ICFnZW5lcmF0b3IueCB8fCAhZ2VuZXJhdG9yLnkgfHwgIWdlbmVyYXRvci56KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBnZW5lcmF0b3InKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHhGdW5jID0gZ2VuZXJhdG9yLng7XHJcbiAgICAgICAgdmFyIHlGdW5jID0gZ2VuZXJhdG9yLnk7XHJcbiAgICAgICAgdmFyIHpGdW5jID0gZ2VuZXJhdG9yLno7XHJcbiAgICAgICAgdmFyIHVSYW5nZSA9IGdlbmVyYXRvci51IHx8IFswLCAxLCAwLjA1XTtcclxuICAgICAgICB2YXIgdlJhbmdlID0gZ2VuZXJhdG9yLnYgfHwgWzAsIDEsIDAuMDVdO1xyXG5cclxuICAgICAgICB2YXIgdU51bSA9IE1hdGguZmxvb3IoKHVSYW5nZVsxXSAtIHVSYW5nZVswXSArIHVSYW5nZVsyXSkgLyB1UmFuZ2VbMl0pO1xyXG4gICAgICAgIHZhciB2TnVtID0gTWF0aC5mbG9vcigodlJhbmdlWzFdIC0gdlJhbmdlWzBdICsgdlJhbmdlWzJdKSAvIHZSYW5nZVsyXSk7XHJcblxyXG4gICAgICAgIGlmICghaXNGaW5pdGUodU51bSkgfHwgIWlzRmluaXRlKHZOdW0pKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5maW5pdGUgZ2VuZXJhdG9yJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdmVydGV4TnVtID0gdU51bSAqIHZOdW07XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLmluaXQodmVydGV4TnVtKTtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMudGV4Y29vcmQwLmluaXQodmVydGV4TnVtKTtcclxuXHJcbiAgICAgICAgdmFyIHBvcyA9IFtdO1xyXG4gICAgICAgIHZhciB0ZXhjb29yZCA9IFtdO1xyXG4gICAgICAgIHZhciBuVmVydGV4ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZOdW07IGorKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVOdW07IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHUgPSBpICogdVJhbmdlWzJdICsgdVJhbmdlWzBdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHYgPSBqICogdlJhbmdlWzJdICsgdlJhbmdlWzBdO1xyXG4gICAgICAgICAgICAgICAgcG9zWzBdID0geEZ1bmModSwgdik7XHJcbiAgICAgICAgICAgICAgICBwb3NbMV0gPSB5RnVuYyh1LCB2KTtcclxuICAgICAgICAgICAgICAgIHBvc1syXSA9IHpGdW5jKHUsIHYpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRleGNvb3JkWzBdID0gaSAvICh1TnVtIC0gMSk7XHJcbiAgICAgICAgICAgICAgICB0ZXhjb29yZFsxXSA9IGogLyAodk51bSAtIDEpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbi5zZXQoblZlcnRleCwgcG9zKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy50ZXhjb29yZDAuc2V0KG5WZXJ0ZXgsIHRleGNvb3JkKTtcclxuICAgICAgICAgICAgICAgIG5WZXJ0ZXgrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIEluZGljZXNDdG9yID0gdmVydGV4TnVtID4gMHhmZmZmID8gVWludDMyQXJyYXkgOiBVaW50MTZBcnJheTtcclxuICAgICAgICB2YXIgbkluZGljZXMgPSAodU51bSAtIDEpICogKHZOdW0gLSAxKSAqIDY7XHJcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXMgPSBuZXcgSW5kaWNlc0N0b3IobkluZGljZXMpO1xyXG5cclxuICAgICAgICB2YXIgbiA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2TnVtIC0gMTsgaisrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdU51bSAtIDE7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGkyID0gaiAqIHVOdW0gKyBpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGkxID0gKGogKiB1TnVtICsgaSArIDEpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGk0ID0gKGogKyAxKSAqIHVOdW0gKyBpICsgMTtcclxuICAgICAgICAgICAgICAgIHZhciBpMyA9IChqICsgMSkgKiB1TnVtICsgaTtcclxuXHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMTtcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGkyO1xyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTQ7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTI7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMztcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGk0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdlbmVyYXRlVmVydGV4Tm9ybWFscygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQYXJhbWV0cmljU3VyZmFjZTtcclxuIiwiLyoqXHJcbiAqIEJhc2UgY2xhc3MgZm9yIGFsbCB0ZXh0dXJlcyBsaWtlIGNvbXByZXNzZWQgdGV4dHVyZSwgdGV4dHVyZTJkLCB0ZXh0dXJlY3ViZVxyXG4gKiBUT0RPIG1hcHBpbmdcclxuICovXHJcbmltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IENhY2hlIGZyb20gJy4vY29yZS9DYWNoZSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlRleHR1cmVcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBUZXh0dXJlID0gQmFzZS5leHRlbmQoIC8qKiBAbGVuZHMgY2xheS5UZXh0dXJlIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIFRleHR1cmUgd2lkdGgsIHJlYWRvbmx5IHdoZW4gdGhlIHRleHR1cmUgc291cmNlIGlzIGltYWdlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB3aWR0aDogNTEyLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0dXJlIGhlaWdodCwgcmVhZG9ubHkgd2hlbiB0aGUgdGV4dHVyZSBzb3VyY2UgaXMgaW1hZ2VcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodDogNTEyLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXhlbCBkYXRhIHR5cGUuXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlVOU0lHTkVEX0JZVEV9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkhBTEZfRkxPQVR9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkZMT0FUfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuVU5TSUdORURfSU5UfVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdHlwZTogZ2xlbnVtLlVOU0lHTkVEX0JZVEUsXHJcbiAgICAvKipcclxuICAgICAqIEZvcm1hdCBvZiB0ZXhlbCBkYXRhXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlJHQkF9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkRFUFRIX0NPTVBPTkVOVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuREVQVEhfU1RFTkNJTH1cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGZvcm1hdDogZ2xlbnVtLlJHQkEsXHJcbiAgICAvKipcclxuICAgICAqIFRleHR1cmUgd3JhcC4gRGVmYXVsdCB0byBiZSBSRVBFQVQuXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkNMQU1QX1RPX0VER0V9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlJFUEVBVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTUlSUk9SRURfUkVQRUFUfVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd3JhcFM6IGdsZW51bS5SRVBFQVQsXHJcbiAgICAvKipcclxuICAgICAqIFRleHR1cmUgd3JhcC4gRGVmYXVsdCB0byBiZSBSRVBFQVQuXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkNMQU1QX1RPX0VER0V9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlJFUEVBVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTUlSUk9SRURfUkVQRUFUfVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd3JhcFQ6IGdsZW51bS5SRVBFQVQsXHJcbiAgICAvKipcclxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTkVBUkVTVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTElORUFSfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5MSU5FQVJfTUlQTUFQX05FQVJFU1R9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLk5FQVJFU1RfTUlQTUFQX0xJTkVBUn1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTElORUFSX01JUE1BUF9MSU5FQVJ9XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBtaW5GaWx0ZXI6IGdsZW51bS5MSU5FQVJfTUlQTUFQX0xJTkVBUixcclxuICAgIC8qKlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ORUFSRVNUfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5MSU5FQVJ9XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBtYWdGaWx0ZXI6IGdsZW51bS5MSU5FQVIsXHJcbiAgICAvKipcclxuICAgICAqIElmIGVuYWJsZSBtaW1hcC5cclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICB1c2VNaXBtYXA6IHRydWUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbmlzb3Ryb3BpYyBmaWx0ZXJpbmcsIGVuYWJsZWQgaWYgdmFsdWUgaXMgbGFyZ2VyIHRoYW4gMVxyXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBhbmlzb3Ryb3BpYzogMSxcclxuICAgIC8vIHBpeGVsU3RvcmVpIHBhcmFtZXRlcnMsIG5vdCBhdmFpbGFibGUgd2hlbiB0ZXh0dXJlIGlzIHVzZWQgYXMgcmVuZGVyIHRhcmdldFxyXG4gICAgLy8gaHR0cDovL3d3dy5raHJvbm9zLm9yZy9vcGVuZ2xlcy9zZGsvZG9jcy9tYW4veGh0bWwvZ2xQaXhlbFN0b3JlaS54bWxcclxuICAgIC8qKlxyXG4gICAgICogSWYgZmxpcCBpbiB5IGF4aXMgZm9yIGdpdmVuIGltYWdlIHNvdXJjZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgKi9cclxuICAgIGZsaXBZOiB0cnVlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBmbGFnIHRvIGluZGljYXRlIGlmIHRleHR1cmUgc291cmNlIGlzIHNSR0JcclxuICAgICAqL1xyXG4gICAgc1JHQjogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDRcclxuICAgICAqL1xyXG4gICAgdW5wYWNrQWxpZ25tZW50OiA0LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgKi9cclxuICAgIHByZW11bHRpcGx5QWxwaGE6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHluYW1pYyBvcHRpb24gZm9yIHRleHR1cmUgbGlrZSB2aWRlb1xyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG5cclxuICAgIE5QT1Q6IGZhbHNlLFxyXG5cclxuICAgIC8vIFBFTkRJTkdcclxuICAgIC8vIEluaXQgaXQgaGVyZSB0byBhdm9pZCBkZW9wdGltaXphdGlvbiB3aGVuIGl0J3MgYXNzaWduZWQgaW4gYXBwbGljYXRpb24gZHluYW1pY2FsbHlcclxuICAgIF9fdXNlZDogMFxyXG5cclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fY2FjaGUgPSBuZXcgQ2FjaGUoKTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LlRleHR1cmUucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICBnZXRXZWJHTFRleHR1cmU6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcblxyXG4gICAgICAgIGlmIChjYWNoZS5taXNzKCd3ZWJnbF90ZXh0dXJlJykpIHtcclxuICAgICAgICAgICAgLy8gSW4gYSBuZXcgZ2wgY29udGV4dCwgY3JlYXRlIG5ldyB0ZXh0dXJlIGFuZCBzZXQgZGlydHkgdHJ1ZVxyXG4gICAgICAgICAgICBjYWNoZS5wdXQoJ3dlYmdsX3RleHR1cmUnLCBfZ2wuY3JlYXRlVGV4dHVyZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZHluYW1pYykge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZShyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNhY2hlLmlzRGlydHkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZShyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIGNhY2hlLmZyZXNoKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGJpbmQ6IGZ1bmN0aW9uICgpIHt9LFxyXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAoKSB7fSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmsgdGV4dHVyZSBpcyBkaXJ0eSBhbmQgdXBkYXRlIGluIHRoZSBuZXh0IGZyYW1lXHJcbiAgICAgKi9cclxuICAgIGRpcnR5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NhY2hlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlLmRpcnR5QWxsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChyZW5kZXJlcikge30sXHJcblxyXG4gICAgLy8gVXBkYXRlIHRoZSBjb21tb24gcGFyYW1ldGVycyBvZiB0ZXh0dXJlXHJcbiAgICB1cGRhdGVDb21tb246IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19GTElQX1lfV0VCR0wsIHRoaXMuZmxpcFkpO1xyXG4gICAgICAgIF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xyXG4gICAgICAgIF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX0FMSUdOTUVOVCwgdGhpcy51bnBhY2tBbGlnbm1lbnQpO1xyXG5cclxuICAgICAgICAvLyBVc2Ugb2Ygbm9uZS1wb3dlciBvZiB0d28gdGV4dHVyZVxyXG4gICAgICAgIC8vIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvd2ViZ2wvd2lraS9XZWJHTF9hbmRfT3BlbkdMX0RpZmZlcmVuY2VzXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ID09PSBnbGVudW0uREVQVEhfQ09NUE9ORU5UKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlTWlwbWFwID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc1JHQkV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfc1JHQicpO1xyXG4gICAgICAgIC8vIEZhbGxiYWNrXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ID09PSBUZXh0dXJlLlNSR0IgJiYgIXNSR0JFeHQpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSBUZXh0dXJlLlJHQjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ID09PSBUZXh0dXJlLlNSR0JfQUxQSEEgJiYgIXNSR0JFeHQpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSBUZXh0dXJlLlJHQkE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLk5QT1QgPSAhdGhpcy5pc1Bvd2VyT2ZUd28oKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0QXZhaWxhYmxlV3JhcFM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5OUE9UKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBnbGVudW0uQ0xBTVBfVE9fRURHRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud3JhcFM7XHJcbiAgICB9LFxyXG4gICAgZ2V0QXZhaWxhYmxlV3JhcFQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5OUE9UKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBnbGVudW0uQ0xBTVBfVE9fRURHRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud3JhcFQ7XHJcbiAgICB9LFxyXG4gICAgZ2V0QXZhaWxhYmxlTWluRmlsdGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG1pbkZpbHRlciA9IHRoaXMubWluRmlsdGVyO1xyXG4gICAgICAgIGlmICh0aGlzLk5QT1QgfHwgIXRoaXMudXNlTWlwbWFwKSB7XHJcbiAgICAgICAgICAgIGlmIChtaW5GaWx0ZXIgPT09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUIHx8XHJcbiAgICAgICAgICAgICAgICBtaW5GaWx0ZXIgPT09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9MSU5FQVJcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2xlbnVtLk5FQVJFU1Q7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobWluRmlsdGVyID09PSBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVIgfHxcclxuICAgICAgICAgICAgICAgIG1pbkZpbHRlciA9PT0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTkVBUkVTVFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBnbGVudW0uTElORUFSO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1pbkZpbHRlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1pbkZpbHRlcjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZ2V0QXZhaWxhYmxlTWFnRmlsdGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFnRmlsdGVyO1xyXG4gICAgfSxcclxuXHJcbiAgICBuZXh0SGlnaGVzdFBvd2VyT2ZUd286IGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgLS14O1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgMzI7IGkgPDw9IDEpIHtcclxuICAgICAgICAgICAgeCA9IHggfCB4ID4+IGk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB4ICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG5cclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuXHJcbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG5cclxuICAgICAgICB2YXIgd2ViZ2xUZXh0dXJlID0gY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJyk7XHJcbiAgICAgICAgaWYgKHdlYmdsVGV4dHVyZSl7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLmdsLmRlbGV0ZVRleHR1cmUod2ViZ2xUZXh0dXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FjaGUuZGVsZXRlQ29udGV4dChyZW5kZXJlci5fX3VpZF9fKTtcclxuXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXN0IGlmIGltYWdlIG9mIHRleHR1cmUgaXMgdmFsaWQgYW5kIGxvYWRlZC5cclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzUmVuZGVyYWJsZTogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXN0IGlmIHRleHR1cmUgc2l6ZSBpcyBwb3dlciBvZiB0d29cclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzUG93ZXJPZlR3bzogZnVuY3Rpb24gKCkge31cclxufSk7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZS5wcm90b3R5cGUsICd3aWR0aCcsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XHJcbiAgICB9XHJcbn0pO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZS5wcm90b3R5cGUsICdoZWlnaHQnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyogRGF0YVR5cGUgKi9cclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5CWVRFID0gZ2xlbnVtLkJZVEU7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5VTlNJR05FRF9CWVRFID0gZ2xlbnVtLlVOU0lHTkVEX0JZVEU7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5TSE9SVCA9IGdsZW51bS5TSE9SVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlVOU0lHTkVEX1NIT1JUID0gZ2xlbnVtLlVOU0lHTkVEX1NIT1JUO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuSU5UID0gZ2xlbnVtLklOVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlVOU0lHTkVEX0lOVCA9IGdsZW51bS5VTlNJR05FRF9JTlQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5GTE9BVCA9IGdsZW51bS5GTE9BVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkhBTEZfRkxPQVQgPSAweDhENjE7XHJcblxyXG4vKipcclxuICogVU5TSUdORURfSU5UXzI0XzhfV0VCR0wgZm9yIFdFQkdMX2RlcHRoX3RleHR1cmUgZXh0ZW5zaW9uXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMID0gMzQwNDI7XHJcblxyXG4vKiBQaXhlbEZvcm1hdCAqL1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuREVQVEhfQ09NUE9ORU5UID0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkRFUFRIX1NURU5DSUwgPSBnbGVudW0uREVQVEhfU1RFTkNJTDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkFMUEhBID0gZ2xlbnVtLkFMUEhBO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuUkdCID0gZ2xlbnVtLlJHQjtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlJHQkEgPSBnbGVudW0uUkdCQTtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkxVTUlOQU5DRSA9IGdsZW51bS5MVU1JTkFOQ0U7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5MVU1JTkFOQ0VfQUxQSEEgPSBnbGVudW0uTFVNSU5BTkNFX0FMUEhBO1xyXG5cclxuLyoqXHJcbiAqIEBzZWUgaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvZXh0ZW5zaW9ucy9FWFRfc1JHQi9cclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuU1JHQiA9IDB4OEM0MDtcclxuLyoqXHJcbiAqIEBzZWUgaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvZXh0ZW5zaW9ucy9FWFRfc1JHQi9cclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuU1JHQl9BTFBIQSA9IDB4OEM0MjtcclxuXHJcbi8qIENvbXByZXNzZWQgVGV4dHVyZSAqL1xyXG5UZXh0dXJlLkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgPSAweDgzRjA7XHJcblRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQgPSAweDgzRjE7XHJcblRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQgPSAweDgzRjI7XHJcblRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQgPSAweDgzRjM7XHJcblxyXG4vKiBUZXh0dXJlTWFnRmlsdGVyICovXHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5ORUFSRVNUID0gZ2xlbnVtLk5FQVJFU1Q7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5MSU5FQVIgPSBnbGVudW0uTElORUFSO1xyXG5cclxuLyogVGV4dHVyZU1pbkZpbHRlciAqL1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCA9IGdsZW51bS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTElORUFSX01JUE1BUF9ORUFSRVNUID0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTkVBUkVTVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLk5FQVJFU1RfTUlQTUFQX0xJTkVBUiA9IGdsZW51bS5ORUFSRVNUX01JUE1BUF9MSU5FQVI7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5MSU5FQVJfTUlQTUFQX0xJTkVBUiA9IGdsZW51bS5MSU5FQVJfTUlQTUFQX0xJTkVBUjtcclxuXHJcbi8qIFRleHR1cmVXcmFwTW9kZSAqL1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuUkVQRUFUID0gZ2xlbnVtLlJFUEVBVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkNMQU1QX1RPX0VER0UgPSBnbGVudW0uQ0xBTVBfVE9fRURHRTtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLk1JUlJPUkVEX1JFUEVBVCA9IGdsZW51bS5NSVJST1JFRF9SRVBFQVQ7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZTtcclxuIiwidmFyIG1hdGhVdGlsID0ge307XHJcblxyXG5tYXRoVXRpbC5pc1Bvd2VyT2ZUd28gPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHJldHVybiAodmFsdWUgJiAodmFsdWUgLSAxKSkgPT09IDA7XHJcbn07XHJcblxyXG5tYXRoVXRpbC5uZXh0UG93ZXJPZlR3byA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgdmFsdWUgLS07XHJcbiAgICB2YWx1ZSB8PSB2YWx1ZSA+PiAxO1xyXG4gICAgdmFsdWUgfD0gdmFsdWUgPj4gMjtcclxuICAgIHZhbHVlIHw9IHZhbHVlID4+IDQ7XHJcbiAgICB2YWx1ZSB8PSB2YWx1ZSA+PiA4O1xyXG4gICAgdmFsdWUgfD0gdmFsdWUgPj4gMTY7XHJcbiAgICB2YWx1ZSArKztcclxuXHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn07XHJcblxyXG5tYXRoVXRpbC5uZWFyZXN0UG93ZXJPZlR3byA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIE1hdGgucG93KCAyLCBNYXRoLnJvdW5kKCBNYXRoLmxvZyggdmFsdWUgKSAvIE1hdGguTE4yICkgKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG1hdGhVdGlsO1xyXG4iLCJpbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgbWF0aFV0aWwgZnJvbSAnLi9tYXRoL3V0aWwnO1xyXG52YXIgaXNQb3dlck9mVHdvID0gbWF0aFV0aWwuaXNQb3dlck9mVHdvO1xyXG5cclxuZnVuY3Rpb24gbmVhcmVzdFBvd2VyT2ZUd28odmFsKSB7XHJcbiAgICByZXR1cm4gTWF0aC5wb3coMiwgTWF0aC5yb3VuZChNYXRoLmxvZyh2YWwpIC8gTWF0aC5MTjIpKTtcclxufVxyXG5mdW5jdGlvbiBjb252ZXJ0VGV4dHVyZVRvUG93ZXJPZlR3byh0ZXh0dXJlLCBjYW52YXMpIHtcclxuICAgIC8vIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciB3aWR0aCA9IG5lYXJlc3RQb3dlck9mVHdvKHRleHR1cmUud2lkdGgpO1xyXG4gICAgdmFyIGhlaWdodCA9IG5lYXJlc3RQb3dlck9mVHdvKHRleHR1cmUuaGVpZ2h0KTtcclxuICAgIGNhbnZhcyA9IGNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcclxuICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGN0eC5kcmF3SW1hZ2UodGV4dHVyZS5pbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgcmV0dXJuIGNhbnZhcztcclxufVxyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlRleHR1cmUyRFxyXG4gKiBAZXh0ZW5kcyBjbGF5LlRleHR1cmVcclxuICpcclxuICogQGV4YW1wbGVcclxuICogICAgIC4uLlxyXG4gKiAgICAgdmFyIG1hdCA9IG5ldyBjbGF5Lk1hdGVyaWFsKHtcclxuICogICAgICAgICBzaGFkZXI6IGNsYXkuc2hhZGVyLmxpYnJhcnkuZ2V0KCdjbGF5LnBob25nJywgJ2RpZmZ1c2VNYXAnKVxyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgZGlmZnVzZU1hcCA9IG5ldyBjbGF5LlRleHR1cmUyRCgpO1xyXG4gKiAgICAgZGlmZnVzZU1hcC5sb2FkKCdhc3NldHMvdGV4dHVyZXMvZGlmZnVzZS5qcGcnKTtcclxuICogICAgIG1hdC5zZXQoJ2RpZmZ1c2VNYXAnLCBkaWZmdXNlTWFwKTtcclxuICogICAgIC4uLlxyXG4gKiAgICAgZGlmZnVzZU1hcC5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICogICAgICAgICAvLyBXYWl0IGZvciB0aGUgZGlmZnVzZSB0ZXh0dXJlIGxvYWRlZFxyXG4gKiAgICAgICAgIGFuaW1hdGlvbi5vbignZnJhbWUnLCBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcbiAqICAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTtcclxuICogICAgICAgICB9KTtcclxuICogICAgIH0pO1xyXG4gKi9cclxudmFyIFRleHR1cmUyRCA9IFRleHR1cmUuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuVGV4dHVyZTJEIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUgez9IVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtbmV0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIC8vIFRPRE8gbWFyayBkaXJ0eSB3aGVuIGFzc2lnbmVkLlxyXG4gICAgICAgIGltYWdlOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFBpeGVscyBkYXRhLiBXaWxsIGJlIGlnbm9yZWQgaWYgaW1hZ2UgaXMgc2V0LlxyXG4gICAgICAgICAqIEB0eXBlIHs/VWludDhBcnJheXxGbG9hdDMyQXJyYXl9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcGl4ZWxzOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48T2JqZWN0Pn1cclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqICAgICBbe1xyXG4gICAgICAgICAqICAgICAgICAgaW1hZ2U6IG1pcG1hcDAsXHJcbiAgICAgICAgICogICAgICAgICBwaXhlbHM6IG51bGxcclxuICAgICAgICAgKiAgICAgfSwge1xyXG4gICAgICAgICAqICAgICAgICAgaW1hZ2U6IG1pcG1hcDEsXHJcbiAgICAgICAgICogICAgICAgICBwaXhlbHM6IG51bGxcclxuICAgICAgICAgKiAgICAgfSwgLi4uLl1cclxuICAgICAgICAgKi9cclxuICAgICAgICBtaXBtYXBzOiBbXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgY29udmVydCB0ZXh0dXJlIHRvIHBvd2VyLW9mLXR3b1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnZlcnRUb1BPVDogZmFsc2VcclxuICAgIH07XHJcbn0sIHtcclxuXHJcbiAgICB0ZXh0dXJlVHlwZTogJ3RleHR1cmUyRCcsXHJcblxyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV8yRCwgdGhpcy5fY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJykpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUNvbW1vbihyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHZhciBnbEZvcm1hdCA9IHRoaXMuZm9ybWF0O1xyXG4gICAgICAgIHZhciBnbFR5cGUgPSB0aGlzLnR5cGU7XHJcblxyXG4gICAgICAgIC8vIENvbnZlcnQgdG8gcG90IGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gdXNpbmcgaW1hZ2UvY2FudmFzL3ZpZGVvIGVsZW1lbnQuXHJcbiAgICAgICAgdmFyIGNvbnZlcnRUb1BPVCA9ICEhKHRoaXMuY29udmVydFRvUE9UXHJcbiAgICAgICAgICAgICYmICF0aGlzLm1pcG1hcHMubGVuZ3RoICYmIHRoaXMuaW1hZ2VcclxuICAgICAgICAgICAgJiYgKHRoaXMud3JhcFMgPT09IFRleHR1cmUuUkVQRUFUIHx8IHRoaXMud3JhcFQgPT09IFRleHR1cmUuUkVQRUFUKVxyXG4gICAgICAgICAgICAmJiB0aGlzLk5QT1RcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV8yRCwgX2dsLlRFWFRVUkVfV1JBUF9TLCBjb252ZXJ0VG9QT1QgPyB0aGlzLndyYXBTIDogdGhpcy5nZXRBdmFpbGFibGVXcmFwUygpKTtcclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV8yRCwgX2dsLlRFWFRVUkVfV1JBUF9ULCBjb252ZXJ0VG9QT1QgPyB0aGlzLndyYXBUIDogdGhpcy5nZXRBdmFpbGFibGVXcmFwVCgpKTtcclxuXHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfMkQsIF9nbC5URVhUVVJFX01BR19GSUxURVIsIGNvbnZlcnRUb1BPVCA/IHRoaXMubWFnRmlsdGVyIDogdGhpcy5nZXRBdmFpbGFibGVNYWdGaWx0ZXIoKSk7XHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfMkQsIF9nbC5URVhUVVJFX01JTl9GSUxURVIsIGNvbnZlcnRUb1BPVCA/IHRoaXMubWluRmlsdGVyIDogdGhpcy5nZXRBdmFpbGFibGVNaW5GaWx0ZXIoKSk7XHJcblxyXG4gICAgICAgIHZhciBhbmlzb3Ryb3BpY0V4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKTtcclxuICAgICAgICBpZiAoYW5pc290cm9waWNFeHQgJiYgdGhpcy5hbmlzb3Ryb3BpYyA+IDEpIHtcclxuICAgICAgICAgICAgX2dsLnRleFBhcmFtZXRlcmYoX2dsLlRFWFRVUkVfMkQsIGFuaXNvdHJvcGljRXh0LlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULCB0aGlzLmFuaXNvdHJvcGljKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIGZsb2F0IHR5cGUgaWYgYnJvd3NlciBkb24ndCBoYXZlIGhhbGYgZmxvYXQgZXh0ZW5zaW9uXHJcbiAgICAgICAgaWYgKGdsVHlwZSA9PT0gMzYxOTMpIHtcclxuICAgICAgICAgICAgdmFyIGhhbGZGbG9hdEV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Jyk7XHJcbiAgICAgICAgICAgIGlmICghaGFsZkZsb2F0RXh0KSB7XHJcbiAgICAgICAgICAgICAgICBnbFR5cGUgPSBnbGVudW0uRkxPQVQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1pcG1hcHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1pcG1hcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBtaXBtYXAgPSB0aGlzLm1pcG1hcHNbaV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVUZXh0dXJlRGF0YShfZ2wsIG1pcG1hcCwgaSwgd2lkdGgsIGhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgd2lkdGggLz0gMjtcclxuICAgICAgICAgICAgICAgIGhlaWdodCAvPSAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVUZXh0dXJlRGF0YShfZ2wsIHRoaXMsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlLCBjb252ZXJ0VG9QT1QpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMudXNlTWlwbWFwICYmICghdGhpcy5OUE9UIHx8IGNvbnZlcnRUb1BPVCkpIHtcclxuICAgICAgICAgICAgICAgIF9nbC5nZW5lcmF0ZU1pcG1hcChfZ2wuVEVYVFVSRV8yRCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVUZXh0dXJlRGF0YTogZnVuY3Rpb24gKF9nbCwgZGF0YSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIGNvbnZlcnRUb1BPVCkge1xyXG4gICAgICAgIGlmIChkYXRhLmltYWdlKSB7XHJcbiAgICAgICAgICAgIHZhciBpbWdEYXRhID0gZGF0YS5pbWFnZTtcclxuICAgICAgICAgICAgaWYgKGNvbnZlcnRUb1BPVCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcG90Q2FudmFzID0gY29udmVydFRleHR1cmVUb1Bvd2VyT2ZUd28odGhpcywgdGhpcy5fcG90Q2FudmFzKTtcclxuICAgICAgICAgICAgICAgIGltZ0RhdGEgPSB0aGlzLl9wb3RDYW52YXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgX2dsLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfMkQsIGxldmVsLCBnbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1nRGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBDYW4gYmUgdXNlZCBhcyBhIGJsYW5rIHRleHR1cmUgd2hlbiB3cml0aW5nIHJlbmRlciB0byB0ZXh0dXJlKFJUVClcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgZ2xGb3JtYXQgPD0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVFxyXG4gICAgICAgICAgICAgICAgJiYgZ2xGb3JtYXQgPj0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgX2dsLmNvbXByZXNzZWRUZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgZ2xGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGRhdGEucGl4ZWxzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIElzIGEgcmVuZGVyIHRhcmdldCBpZiBwaXhlbHMgaXMgbnVsbFxyXG4gICAgICAgICAgICAgICAgX2dsLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfMkQsIGxldmVsLCBnbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgZGF0YS5waXhlbHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5UZXh0dXJlMkQucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlTWlwbWFwOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlTWlwbWFwICYmICF0aGlzLk5QT1QpIHtcclxuICAgICAgICAgICAgX2dsLmJpbmRUZXh0dXJlKF9nbC5URVhUVVJFXzJELCB0aGlzLl9jYWNoZS5nZXQoJ3dlYmdsX3RleHR1cmUnKSk7XHJcbiAgICAgICAgICAgIF9nbC5nZW5lcmF0ZU1pcG1hcChfZ2wuVEVYVFVSRV8yRCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gaXNQb3dlck9mVHdvKHRoaXMud2lkdGgpICYmIGlzUG93ZXJPZlR3byh0aGlzLmhlaWdodCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGlzUmVuZGVyYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlLndpZHRoID4gMCAmJiB0aGlzLmltYWdlLmhlaWdodCA+IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gISEodGhpcy53aWR0aCAmJiB0aGlzLmhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBiaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICByZW5kZXJlci5nbC5iaW5kVGV4dHVyZShyZW5kZXJlci5nbC5URVhUVVJFXzJELCB0aGlzLmdldFdlYkdMVGV4dHVyZShyZW5kZXJlcikpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1bmJpbmQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHJlbmRlcmVyLmdsLmJpbmRUZXh0dXJlKHJlbmRlcmVyLmdsLlRFWFRVUkVfMkQsIG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICBsb2FkOiBmdW5jdGlvbiAoc3JjLCBjcm9zc09yaWdpbikge1xyXG4gICAgICAgIHZhciBpbWFnZSA9IHZlbmRvci5jcmVhdGVJbWFnZSgpO1xyXG4gICAgICAgIGlmIChjcm9zc09yaWdpbikge1xyXG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9IGNyb3NzT3JpZ2luO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLmRpcnR5KCk7XHJcbiAgICAgICAgICAgIHNlbGYudHJpZ2dlcignc3VjY2VzcycsIHNlbGYpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaW1hZ2Uub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdlcnJvcicsIHNlbGYpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGltYWdlLnNyYyA9IHNyYztcclxuICAgICAgICB0aGlzLmltYWdlID0gaW1hZ2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZXh0dXJlMkQucHJvdG90eXBlLCAnd2lkdGgnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZS53aWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUZXh0dXJlIGZyb20gaW1hZ2UgY2FuXFwndCBzZXQgd2lkdGgnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl93aWR0aCAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZXh0dXJlMkQucHJvdG90eXBlLCAnaGVpZ2h0Jywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2UuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUZXh0dXJlIGZyb20gaW1hZ2UgY2FuXFwndCBzZXQgaGVpZ2h0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faGVpZ2h0ICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlMkQ7XHJcbiIsImltcG9ydCBUZXh0dXJlIGZyb20gJy4vVGV4dHVyZSc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4vY29yZS91dGlsJztcclxuaW1wb3J0IG1hdGhVdGlsIGZyb20gJy4vbWF0aC91dGlsJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxudmFyIGlzUG93ZXJPZlR3byA9IG1hdGhVdGlsLmlzUG93ZXJPZlR3bztcclxuXHJcbnZhciB0YXJnZXRMaXN0ID0gWydweCcsICdueCcsICdweScsICdueScsICdweicsICdueiddO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlRleHR1cmVDdWJlXHJcbiAqIEBleHRlbmRzIGNsYXkuVGV4dHVyZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgLi4uXHJcbiAqICAgICB2YXIgbWF0ID0gbmV3IGNsYXkuTWF0ZXJpYWwoe1xyXG4gKiAgICAgICAgIHNoYWRlcjogY2xheS5zaGFkZXIubGlicmFyeS5nZXQoJ2NsYXkucGhvbmcnLCAnZW52aXJvbm1lbnRNYXAnKVxyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgZW52TWFwID0gbmV3IGNsYXkuVGV4dHVyZUN1YmUoKTtcclxuICogICAgIGVudk1hcC5sb2FkKHtcclxuICogICAgICAgICAncHgnOiAnYXNzZXRzL3RleHR1cmVzL3NreS9weC5qcGcnLFxyXG4gKiAgICAgICAgICdueCc6ICdhc3NldHMvdGV4dHVyZXMvc2t5L254LmpwZydcclxuICogICAgICAgICAncHknOiAnYXNzZXRzL3RleHR1cmVzL3NreS9weS5qcGcnXHJcbiAqICAgICAgICAgJ255JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvbnkuanBnJ1xyXG4gKiAgICAgICAgICdweic6ICdhc3NldHMvdGV4dHVyZXMvc2t5L3B6LmpwZydcclxuICogICAgICAgICAnbnonOiAnYXNzZXRzL3RleHR1cmVzL3NreS9uei5qcGcnXHJcbiAqICAgICB9KTtcclxuICogICAgIG1hdC5zZXQoJ2Vudmlyb25tZW50TWFwJywgZW52TWFwKTtcclxuICogICAgIC4uLlxyXG4gKiAgICAgZW52TWFwLnN1Y2Nlc3MoZnVuY3Rpb24gKCkge1xyXG4gKiAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBza3kgdGV4dHVyZSBsb2FkZWRcclxuICogICAgICAgICBhbmltYXRpb24ub24oJ2ZyYW1lJywgZnVuY3Rpb24gKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAqICAgICAgICAgfSk7XHJcbiAqICAgICB9KTtcclxuICovXHJcbnZhciBUZXh0dXJlQ3ViZSA9IFRleHR1cmUuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuVGV4dHVyZUN1YmUjICove1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIC8vIFBFTkRJTkcgY3ViZW1hcCBzaG91bGQgbm90IGZsaXBZIGluIGRlZmF1bHQuXHJcbiAgICAgICAgLy8gZmxpcFk6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1uZXR9IHB4XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gbnhcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9IVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtbmV0fSBweVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1uZXR9IG55XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gcHpcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9IVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtbmV0fSBuelxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGltYWdlOiB7XHJcbiAgICAgICAgICAgIHB4OiBudWxsLFxyXG4gICAgICAgICAgICBueDogbnVsbCxcclxuICAgICAgICAgICAgcHk6IG51bGwsXHJcbiAgICAgICAgICAgIG55OiBudWxsLFxyXG4gICAgICAgICAgICBwejogbnVsbCxcclxuICAgICAgICAgICAgbno6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFBpeGVscyBkYXRhIG9mIGVhY2ggc2lkZS4gV2lsbCBiZSBpZ25vcmVkIGlmIGltYWdlcyBhcmUgc2V0LlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/VWludDhBcnJheX0gcHhcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBueFxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P1VpbnQ4QXJyYXl9IHB5XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/VWludDhBcnJheX0gbnlcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBwelxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P1VpbnQ4QXJyYXl9IG56XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcGl4ZWxzOiB7XHJcbiAgICAgICAgICAgIHB4OiBudWxsLFxyXG4gICAgICAgICAgICBueDogbnVsbCxcclxuICAgICAgICAgICAgcHk6IG51bGwsXHJcbiAgICAgICAgICAgIG55OiBudWxsLFxyXG4gICAgICAgICAgICBwejogbnVsbCxcclxuICAgICAgICAgICAgbno6IG51bGxcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPE9iamVjdD59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWlwbWFwczogW11cclxuICAgIH07XHJcbn0sIHtcclxuXHJcbiAgICB0ZXh0dXJlVHlwZTogJ3RleHR1cmVDdWJlJyxcclxuXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIHRoaXMuX2NhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVDb21tb24ocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB2YXIgZ2xGb3JtYXQgPSB0aGlzLmZvcm1hdDtcclxuICAgICAgICB2YXIgZ2xUeXBlID0gdGhpcy50eXBlO1xyXG5cclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgX2dsLlRFWFRVUkVfV1JBUF9TLCB0aGlzLmdldEF2YWlsYWJsZVdyYXBTKCkpO1xyXG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFX0NVQkVfTUFQLCBfZ2wuVEVYVFVSRV9XUkFQX1QsIHRoaXMuZ2V0QXZhaWxhYmxlV3JhcFQoKSk7XHJcblxyXG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFX0NVQkVfTUFQLCBfZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCB0aGlzLmdldEF2YWlsYWJsZU1hZ0ZpbHRlcigpKTtcclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgX2dsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgdGhpcy5nZXRBdmFpbGFibGVNaW5GaWx0ZXIoKSk7XHJcblxyXG4gICAgICAgIHZhciBhbmlzb3Ryb3BpY0V4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKTtcclxuICAgICAgICBpZiAoYW5pc290cm9waWNFeHQgJiYgdGhpcy5hbmlzb3Ryb3BpYyA+IDEpIHtcclxuICAgICAgICAgICAgX2dsLnRleFBhcmFtZXRlcmYoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIGFuaXNvdHJvcGljRXh0LlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULCB0aGlzLmFuaXNvdHJvcGljKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIGZsb2F0IHR5cGUgaWYgYnJvd3NlciBkb24ndCBoYXZlIGhhbGYgZmxvYXQgZXh0ZW5zaW9uXHJcbiAgICAgICAgaWYgKGdsVHlwZSA9PT0gMzYxOTMpIHtcclxuICAgICAgICAgICAgdmFyIGhhbGZGbG9hdEV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Jyk7XHJcbiAgICAgICAgICAgIGlmICghaGFsZkZsb2F0RXh0KSB7XHJcbiAgICAgICAgICAgICAgICBnbFR5cGUgPSBnbGVudW0uRkxPQVQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1pcG1hcHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1pcG1hcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBtaXBtYXAgPSB0aGlzLm1pcG1hcHNbaV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVUZXh0dXJlRGF0YShfZ2wsIG1pcG1hcCwgaSwgd2lkdGgsIGhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSk7XHJcbiAgICAgICAgICAgICAgICB3aWR0aCAvPSAyO1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0IC89IDI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVRleHR1cmVEYXRhKF9nbCwgdGhpcywgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLk5QT1QgJiYgdGhpcy51c2VNaXBtYXApIHtcclxuICAgICAgICAgICAgICAgIF9nbC5nZW5lcmF0ZU1pcG1hcChfZ2wuVEVYVFVSRV9DVUJFX01BUCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgbnVsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVUZXh0dXJlRGF0YTogZnVuY3Rpb24gKF9nbCwgZGF0YSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGFyZ2V0TGlzdFtpXTtcclxuICAgICAgICAgICAgdmFyIGltZyA9IGRhdGEuaW1hZ2UgJiYgZGF0YS5pbWFnZVt0YXJnZXRdO1xyXG4gICAgICAgICAgICBpZiAoaW1nKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wudGV4SW1hZ2UyRChfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSwgbGV2ZWwsIGdsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgX2dsLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIGxldmVsLCBnbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgZGF0YS5waXhlbHMgJiYgZGF0YS5waXhlbHNbdGFyZ2V0XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlRleHR1cmVDdWJlLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZU1pcG1hcDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIGlmICh0aGlzLnVzZU1pcG1hcCAmJiAhdGhpcy5OUE9UKSB7XHJcbiAgICAgICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGhpcy5fY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJykpO1xyXG4gICAgICAgICAgICBfZ2wuZ2VuZXJhdGVNaXBtYXAoX2dsLlRFWFRVUkVfQ1VCRV9NQVApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuZ2wuYmluZFRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGhpcy5nZXRXZWJHTFRleHR1cmUocmVuZGVyZXIpKTtcclxuICAgIH0sXHJcblxyXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICByZW5kZXJlci5nbC5iaW5kVGV4dHVyZShyZW5kZXJlci5nbC5URVhUVVJFX0NVQkVfTUFQLCBudWxsKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gT3ZlcndyaXRlIHRoZSBpc1Bvd2VyT2ZUd28gbWV0aG9kXHJcbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXNQb3dlck9mVHdvKHRoaXMuaW1hZ2UucHgud2lkdGgpXHJcbiAgICAgICAgICAgICAgICAmJiBpc1Bvd2VyT2ZUd28odGhpcy5pbWFnZS5weC5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzUG93ZXJPZlR3byh0aGlzLndpZHRoKVxyXG4gICAgICAgICAgICAgICAgJiYgaXNQb3dlck9mVHdvKHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGlzUmVuZGVyYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlLnB4KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpc0ltYWdlUmVuZGVyYWJsZSh0aGlzLmltYWdlLnB4KVxyXG4gICAgICAgICAgICAgICAgJiYgaXNJbWFnZVJlbmRlcmFibGUodGhpcy5pbWFnZS5ueClcclxuICAgICAgICAgICAgICAgICYmIGlzSW1hZ2VSZW5kZXJhYmxlKHRoaXMuaW1hZ2UucHkpXHJcbiAgICAgICAgICAgICAgICAmJiBpc0ltYWdlUmVuZGVyYWJsZSh0aGlzLmltYWdlLm55KVxyXG4gICAgICAgICAgICAgICAgJiYgaXNJbWFnZVJlbmRlcmFibGUodGhpcy5pbWFnZS5weilcclxuICAgICAgICAgICAgICAgICYmIGlzSW1hZ2VSZW5kZXJhYmxlKHRoaXMuaW1hZ2UubnopO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICEhKHRoaXMud2lkdGggJiYgdGhpcy5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgbG9hZDogZnVuY3Rpb24gKGltYWdlTGlzdCwgY3Jvc3NPcmlnaW4pIHtcclxuICAgICAgICB2YXIgbG9hZGluZyA9IDA7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHV0aWwuZWFjaChpbWFnZUxpc3QsIGZ1bmN0aW9uIChzcmMsIHRhcmdldCl7XHJcbiAgICAgICAgICAgIHZhciBpbWFnZSA9IHZlbmRvci5jcmVhdGVJbWFnZSgpO1xyXG4gICAgICAgICAgICBpZiAoY3Jvc3NPcmlnaW4pIHtcclxuICAgICAgICAgICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgbG9hZGluZyAtLTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2FkaW5nID09PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmRpcnR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdzdWNjZXNzJywgc2VsZik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGltYWdlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nIC0tO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgbG9hZGluZysrO1xyXG4gICAgICAgICAgICBpbWFnZS5zcmMgPSBzcmM7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VbdGFyZ2V0XSA9IGltYWdlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxufSk7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZUN1YmUucHJvdG90eXBlLCAnd2lkdGgnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZSAmJiB0aGlzLmltYWdlLnB4KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlLnB4LndpZHRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XHJcbiAgICB9LFxyXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZSAmJiB0aGlzLmltYWdlLnB4KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGV4dHVyZSBmcm9tIGltYWdlIGNhblxcJ3Qgc2V0IHdpZHRoJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fd2lkdGggIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZUN1YmUucHJvdG90eXBlLCAnaGVpZ2h0Jywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UgJiYgdGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZS5weC5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XHJcbiAgICB9LFxyXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZSAmJiB0aGlzLmltYWdlLnB4KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGV4dHVyZSBmcm9tIGltYWdlIGNhblxcJ3Qgc2V0IGhlaWdodCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2hlaWdodCAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5mdW5jdGlvbiBpc0ltYWdlUmVuZGVyYWJsZShpbWFnZSkge1xyXG4gICAgcmV0dXJuIGltYWdlLndpZHRoID4gMCAmJiBpbWFnZS5oZWlnaHQgPiAwO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlQ3ViZTtcclxuIiwiaW1wb3J0IE5vZGUgZnJvbSAnLi9Ob2RlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuUmVuZGVyYWJsZVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lk5vZGVcclxuICovXHJcbnZhciBSZW5kZXJhYmxlID0gTm9kZS5leHRlbmQoLyoqIEBsZW5kcyBjbGF5LlJlbmRlcmFibGUjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuTWF0ZXJpYWx9XHJcbiAgICAgKi9cclxuICAgIG1hdGVyaWFsOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuR2VvbWV0cnl9XHJcbiAgICAgKi9cclxuICAgIGdlb21ldHJ5OiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbW9kZTogZ2xlbnVtLlRSSUFOR0xFUyxcclxuXHJcbiAgICBfcmVuZGVySW5mbzogbnVsbFxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuUmVuZGVyYWJsZS5wcm90b3R5cGUgKi9cclxue1xyXG5cclxuICAgIF9fcHJvZ3JhbTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdyb3VwIG9mIHJlY2VpdmVkIGxpZ2h0LlxyXG4gICAgICovXHJcbiAgICBsaWdodEdyb3VwOiAwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW5kZXIgb3JkZXIsIE5vZGVzIHdpdGggc21hbGxlciB2YWx1ZSByZW5kZXJzIGJlZm9yZSBub2RlcyB3aXRoIGxhcmdlciB2YWx1ZXMuXHJcbiAgICAgKiBAdHlwZSB7TnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByZW5kZXJPcmRlcjogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZWQgd2hlbiBtb2RlIGlzIExJTkVTLCBMSU5FX1NUUklQIG9yIExJTkVfTE9PUFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgLy8gbGluZVdpZHRoOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgZW5hYmxlIGN1bGxpbmdcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBjdWxsaW5nOiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGVjaWZ5IHdoaWNoIHNpZGUgb2YgcG9seWdvbiB3aWxsIGJlIGN1bGxlZC5cclxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcclxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuQkFDS31cclxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuRlJPTlR9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5SZW5kZXJhYmxlLkZST05UX0FORF9CQUNLfVxyXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViR0xSZW5kZXJpbmdDb250ZXh0L2N1bGxGYWNlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjdWxsRmFjZTogZ2xlbnVtLkJBQ0ssXHJcbiAgICAvKipcclxuICAgICAqIFNwZWNpZnkgd2hpY2ggc2lkZSBpcyBmcm9udCBmYWNlLlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuUmVuZGVyYWJsZS5DV31cclxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuQ0NXfVxyXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViR0xSZW5kZXJpbmdDb250ZXh0L2Zyb250RmFjZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZnJvbnRGYWNlOiBnbGVudW0uQ0NXLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgZW5hYmxlIHNvZnR3YXJlIGZydXN0dW0gY3VsbGluZ1xyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGZydXN0dW1DdWxsaW5nOiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgcmVjZWl2ZVNoYWRvdzogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGNhc3RTaGFkb3c6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpZ25vcmVQaWNraW5nOiBmYWxzZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlnbm9yZVByZVo6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlnbm9yZUdCdWZmZXI6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNSZW5kZXJhYmxlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAvLyBUT0RPIFNoYWRlciA/XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VvbWV0cnkgJiYgdGhpcy5tYXRlcmlhbCAmJiB0aGlzLm1hdGVyaWFsLnNoYWRlciAmJiAhdGhpcy5pbnZpc2libGVcclxuICAgICAgICAgICAgJiYgdGhpcy5nZW9tZXRyeS52ZXJ0ZXhDb3VudCA+IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmVmb3JlIHJlbmRlciBob29rXHJcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIGJlZm9yZVJlbmRlcjogZnVuY3Rpb24gKF9nbCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCZWZvcmUgcmVuZGVyIGhvb2tcclxuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cclxuICAgICAqL1xyXG4gICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uIChfZ2wsIHJlbmRlclN0YXQpIHt9LFxyXG5cclxuICAgIGdldEJvdW5kaW5nQm94OiBmdW5jdGlvbiAoZmlsdGVyLCBvdXQpIHtcclxuICAgICAgICBvdXQgPSBOb2RlLnByb3RvdHlwZS5nZXRCb3VuZGluZ0JveC5jYWxsKHRoaXMsIGZpbHRlciwgb3V0KTtcclxuICAgICAgICBpZiAodGhpcy5nZW9tZXRyeSAmJiB0aGlzLmdlb21ldHJ5LmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIG91dC51bmlvbih0aGlzLmdlb21ldHJ5LmJvdW5kaW5nQm94KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgcmVuZGVyYWJsZVxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlJlbmRlcmFibGV9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXHJcbiAgICAgICAgICAgICdjYXN0U2hhZG93JywgJ3JlY2VpdmVTaGFkb3cnLFxyXG4gICAgICAgICAgICAnbW9kZScsICdjdWxsaW5nJywgJ2N1bGxGYWNlJywgJ2Zyb250RmFjZScsXHJcbiAgICAgICAgICAgICdmcnVzdHVtQ3VsbGluZycsXHJcbiAgICAgICAgICAgICdyZW5kZXJPcmRlcicsICdsaW5lV2lkdGgnLFxyXG4gICAgICAgICAgICAnaWdub3JlUGlja2luZycsICdpZ25vcmVQcmVaJywgJ2lnbm9yZUdCdWZmZXInXHJcbiAgICAgICAgXTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJhYmxlID0gTm9kZS5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIHJlbmRlcmFibGUuZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xyXG4gICAgICAgICAgICByZW5kZXJhYmxlLm1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbDtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBwcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgLy8gVHJ5IG5vdCB0byBvdmVyd3JpdGUgdGhlIHByb3RvdHlwZSBwcm9wZXJ0eVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlbmRlcmFibGVbbmFtZV0gIT09IHRoaXNbbmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlW25hbWVdID0gdGhpc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGU7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKClcclxufSk7XHJcblxyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuUE9JTlRTID0gZ2xlbnVtLlBPSU5UUztcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLkxJTkVTID0gZ2xlbnVtLkxJTkVTO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuTElORV9MT09QID0gZ2xlbnVtLkxJTkVfTE9PUDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLkxJTkVfU1RSSVAgPSBnbGVudW0uTElORV9TVFJJUDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLlRSSUFOR0xFUyA9IGdsZW51bS5UUklBTkdMRVM7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5UUklBTkdMRV9TVFJJUCA9IGdsZW51bS5UUklBTkdMRV9TVFJJUDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLlRSSUFOR0xFX0ZBTiA9IGdsZW51bS5UUklBTkdMRV9GQU47XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5CQUNLID0gZ2xlbnVtLkJBQ0s7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5GUk9OVCA9IGdsZW51bS5GUk9OVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLkZST05UX0FORF9CQUNLID0gZ2xlbnVtLkZST05UX0FORF9CQUNLO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuQ1cgPSBnbGVudW0uQ1c7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5DQ1cgPSBnbGVudW0uQ0NXO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUmVuZGVyYWJsZTtcclxuIiwiaW1wb3J0IFJlbmRlcmFibGUgZnJvbSAnLi9SZW5kZXJhYmxlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5NZXNoXHJcbiAqIEBleHRlbmRzIGNsYXkuUmVuZGVyYWJsZVxyXG4gKi9cclxudmFyIE1lc2ggPSBSZW5kZXJhYmxlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkuTWVzaCMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VkIHdoZW4gaXQgaXMgYSBza2lubmVkIG1lc2hcclxuICAgICAqIEB0eXBlIHtjbGF5LlNrZWxldG9ufVxyXG4gICAgICovXHJcbiAgICBza2VsZXRvbjogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogSm9pbnRzIGluZGljZXMgTWVzaGVzIGNhbiBzaGFyZSB0aGUgb25lIHNrZWxldG9uIGluc3RhbmNlIGFuZCBlYWNoIG1lc2ggY2FuIHVzZSBvbmUgcGFydCBvZiBqb2ludHMuIEpvaW50cyBpbmRpY2VzIGluZGljYXRlIHRoZSBpbmRleCBvZiBqb2ludCBpbiB0aGUgc2tlbGV0b24gaW5zdGFuY2VcclxuICAgICAqIEB0eXBlIHtudW1iZXJbXX1cclxuICAgICAqL1xyXG4gICAgam9pbnRzOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgc3RvcmUgdGhlIHNraW4gbWF0cmljZXMgaW4gdmVydGV4IHRleHR1cmVcclxuICAgICAqIEB0eXBlIHtib29sfVxyXG4gICAgICovXHJcbiAgICB1c2VTa2luTWF0cmljZXNUZXh0dXJlOiBmYWxzZVxyXG5cclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCF0aGlzLmpvaW50cykge1xyXG4gICAgICAgIHRoaXMuam9pbnRzID0gW107XHJcbiAgICB9XHJcbn0sIHtcclxuXHJcbiAgICBpc1NraW5uZWRNZXNoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuc2tlbGV0b24gJiYgdGhpcy5qb2ludHMgJiYgdGhpcy5qb2ludHMubGVuZ3RoID4gMCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG1lc2ggPSBSZW5kZXJhYmxlLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIG1lc2guc2tlbGV0b24gPSB0aGlzLnNrZWxldG9uO1xyXG4gICAgICAgIGlmICh0aGlzLmpvaW50cykge1xyXG4gICAgICAgICAgICBtZXNoLmpvaW50cyA9IHRoaXMuam9pbnRzLnNsaWNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtZXNoO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbi8vIEVudW1zXHJcbk1lc2guUE9JTlRTID0gZ2xlbnVtLlBPSU5UUztcclxuTWVzaC5MSU5FUyA9IGdsZW51bS5MSU5FUztcclxuTWVzaC5MSU5FX0xPT1AgPSBnbGVudW0uTElORV9MT09QO1xyXG5NZXNoLkxJTkVfU1RSSVAgPSBnbGVudW0uTElORV9TVFJJUDtcclxuTWVzaC5UUklBTkdMRVMgPSBnbGVudW0uVFJJQU5HTEVTO1xyXG5NZXNoLlRSSUFOR0xFX1NUUklQID0gZ2xlbnVtLlRSSUFOR0xFX1NUUklQO1xyXG5NZXNoLlRSSUFOR0xFX0ZBTiA9IGdsZW51bS5UUklBTkdMRV9GQU47XHJcblxyXG5NZXNoLkJBQ0sgPSBnbGVudW0uQkFDSztcclxuTWVzaC5GUk9OVCA9IGdsZW51bS5GUk9OVDtcclxuTWVzaC5GUk9OVF9BTkRfQkFDSyA9IGdsZW51bS5GUk9OVF9BTkRfQkFDSztcclxuTWVzaC5DVyA9IGdsZW51bS5DVztcclxuTWVzaC5DQ1cgPSBnbGVudW0uQ0NXO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWVzaDtcclxuIiwiaW1wb3J0IENhbWVyYSBmcm9tICcuLi9DYW1lcmEnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNhbWVyYS5QZXJzcGVjdGl2ZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LkNhbWVyYVxyXG4gKi9cclxudmFyIFBlcnNwZWN0aXZlID0gQ2FtZXJhLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkuY2FtZXJhLlBlcnNwZWN0aXZlIyAqL3tcclxuICAgIC8qKlxyXG4gICAgICogVmVydGljYWwgZmllbGQgb2YgdmlldyBpbiBkZWdyZWVzXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBmb3Y6IDUwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBBc3BlY3QgcmF0aW8sIHR5cGljYWxseSB2aWV3cG9ydCB3aWR0aCAvIGhlaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYXNwZWN0OiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBuZWFyOiAwLjEsXHJcbiAgICAvKipcclxuICAgICAqIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZmFyOiAyMDAwXHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jYW1lcmEuUGVyc3BlY3RpdmUucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICB1cGRhdGVQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgcmFkID0gdGhpcy5mb3YgLyAxODAgKiBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5wZXJzcGVjdGl2ZShyYWQsIHRoaXMuYXNwZWN0LCB0aGlzLm5lYXIsIHRoaXMuZmFyKTtcclxuICAgIH0sXHJcbiAgICBkZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG0gPSB0aGlzLnByb2plY3Rpb25NYXRyaXguYXJyYXk7XHJcbiAgICAgICAgdmFyIHJhZCA9IE1hdGguYXRhbigxIC8gbVs1XSkgKiAyO1xyXG4gICAgICAgIHRoaXMuZm92ID0gcmFkIC8gTWF0aC5QSSAqIDE4MDtcclxuICAgICAgICB0aGlzLmFzcGVjdCA9IG1bNV0gLyBtWzBdO1xyXG4gICAgICAgIHRoaXMubmVhciA9IG1bMTRdIC8gKG1bMTBdIC0gMSk7XHJcbiAgICAgICAgdGhpcy5mYXIgPSBtWzE0XSAvIChtWzEwXSArIDEpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybiB7Y2xheS5jYW1lcmEuUGVyc3BlY3RpdmV9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgY2FtZXJhID0gQ2FtZXJhLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGNhbWVyYS5mb3YgPSB0aGlzLmZvdjtcclxuICAgICAgICBjYW1lcmEuYXNwZWN0ID0gdGhpcy5hc3BlY3Q7XHJcbiAgICAgICAgY2FtZXJhLm5lYXIgPSB0aGlzLm5lYXI7XHJcbiAgICAgICAgY2FtZXJhLmZhciA9IHRoaXMuZmFyO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FtZXJhO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBlcnNwZWN0aXZlO1xyXG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gJy4uL0NhbWVyYSc7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jYW1lcmEuT3J0aG9ncmFwaGljXHJcbiAqIEBleHRlbmRzIGNsYXkuQ2FtZXJhXHJcbiAqL1xyXG52YXIgT3J0aG9ncmFwaGljID0gQ2FtZXJhLmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5LmNhbWVyYS5PcnRob2dyYXBoaWMjICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVmdDogLTEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJpZ2h0OiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBuZWFyOiAtMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZmFyOiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0b3A6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJvdHRvbTogLTFcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LmNhbWVyYS5PcnRob2dyYXBoaWMucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICB1cGRhdGVQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbigpIHtcclxuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXgub3J0aG8odGhpcy5sZWZ0LCB0aGlzLnJpZ2h0LCB0aGlzLmJvdHRvbSwgdGhpcy50b3AsIHRoaXMubmVhciwgdGhpcy5mYXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBkZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG0gPSB0aGlzLnByb2plY3Rpb25NYXRyaXguYXJyYXk7XHJcbiAgICAgICAgdGhpcy5sZWZ0ID0gKC0xIC0gbVsxMl0pIC8gbVswXTtcclxuICAgICAgICB0aGlzLnJpZ2h0ID0gKDEgLSBtWzEyXSkgLyBtWzBdO1xyXG4gICAgICAgIHRoaXMudG9wID0gKDEgLSBtWzEzXSkgLyBtWzVdO1xyXG4gICAgICAgIHRoaXMuYm90dG9tID0gKC0xIC0gbVsxM10pIC8gbVs1XTtcclxuICAgICAgICB0aGlzLm5lYXIgPSAtKC0xIC0gbVsxNF0pIC8gbVsxMF07XHJcbiAgICAgICAgdGhpcy5mYXIgPSAtKDEgLSBtWzE0XSkgLyBtWzEwXTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuY2FtZXJhLk9ydGhvZ3JhcGhpY31cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBjYW1lcmEgPSBDYW1lcmEucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICAgICAgY2FtZXJhLmxlZnQgPSB0aGlzLmxlZnQ7XHJcbiAgICAgICAgY2FtZXJhLnJpZ2h0ID0gdGhpcy5yaWdodDtcclxuICAgICAgICBjYW1lcmEubmVhciA9IHRoaXMubmVhcjtcclxuICAgICAgICBjYW1lcmEuZmFyID0gdGhpcy5mYXI7XHJcbiAgICAgICAgY2FtZXJhLnRvcCA9IHRoaXMudG9wO1xyXG4gICAgICAgIGNhbWVyYS5ib3R0b20gPSB0aGlzLmJvdHRvbTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNhbWVyYTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBPcnRob2dyYXBoaWM7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LnN0YW5kYXJkLmNodW5rLnZhcnlpbmdcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Ob3JtYWw7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG4jaWYgZGVmaW5lZChQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEKSB8fCBkZWZpbmVkKE5PUk1BTE1BUF9FTkFCTEVEKVxcbnZhcnlpbmcgdmVjMyB2X1RhbmdlbnQ7XFxudmFyeWluZyB2ZWMzIHZfQml0YW5nZW50O1xcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKEFPTUFQX0VOQUJMRUQpXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQyO1xcbiNlbmRpZlxcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnN0YW5kYXJkLmNodW5rLmxpZ2h0X2hlYWRlclxcbiNpZmRlZiBBTUJJRU5UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5hbWJpZW50X2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfU0hfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLmFtYmllbnRfc2hfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5hbWJpZW50X2N1YmVtYXBfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgUE9JTlRfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLnBvaW50X2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIERJUkVDVElPTkFMX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5kaXJlY3Rpb25hbF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBTUE9UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5zcG90X2xpZ2h0XFxuI2VuZGlmXFxuQGVuZFxcbkBleHBvcnQgY2xheS5zdGFuZGFyZC52ZXJ0ZXhcXG4jZGVmaW5lIFNIQURFUl9OQU1FIHN0YW5kYXJkXFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gbWF0NCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgOiBXT1JMRElOVkVSU0VUUkFOU1BPU0U7XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxudW5pZm9ybSB2ZWMyIHV2UmVwZWF0ID0gdmVjMigxLjAsIDEuMCk7XFxudW5pZm9ybSB2ZWMyIHV2T2Zmc2V0ID0gdmVjMigwLjAsIDAuMCk7XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZCA6IFRFWENPT1JEXzA7XFxuI2lmIGRlZmluZWQoQU9NQVBfRU5BQkxFRClcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZDIgOiBURVhDT09SRF8xO1xcbiNlbmRpZlxcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbCA6IE5PUk1BTDtcXG5hdHRyaWJ1dGUgdmVjNCB0YW5nZW50IDogVEFOR0VOVDtcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuYXR0cmlidXRlIHZlYzQgYV9Db2xvciA6IENPTE9SO1xcbiNlbmRpZlxcbmF0dHJpYnV0ZSB2ZWMzIGJhcnljZW50cmljO1xcbkBpbXBvcnQgY2xheS5zdGFuZGFyZC5jaHVuay52YXJ5aW5nXFxuQGltcG9ydCBjbGF5LmNodW5rLnNraW5uaW5nX2hlYWRlclxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiB2ZWMzIHNraW5uZWROb3JtYWwgPSBub3JtYWw7XFxuIHZlYzMgc2tpbm5lZFRhbmdlbnQgPSB0YW5nZW50Lnh5ejtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuIHNraW5uZWROb3JtYWwgPSAoc2tpbk1hdHJpeFdTICogdmVjNChub3JtYWwsIDAuMCkpLnh5ejtcXG4gc2tpbm5lZFRhbmdlbnQgPSAoc2tpbk1hdHJpeFdTICogdmVjNCh0YW5nZW50Lnh5eiwgMC4wKSkueHl6O1xcbiNlbmRpZlxcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkICogdXZSZXBlYXQgKyB1dk9mZnNldDtcXG4gdl9Xb3JsZFBvc2l0aW9uID0gKHdvcmxkICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gdl9CYXJ5Y2VudHJpYyA9IGJhcnljZW50cmljO1xcbiB2X05vcm1hbCA9IG5vcm1hbGl6ZSgod29ybGRJbnZlcnNlVHJhbnNwb3NlICogdmVjNChza2lubmVkTm9ybWFsLCAwLjApKS54eXopO1xcbiNpZiBkZWZpbmVkKFBBUkFMTEFYT0NDTFVTSU9OTUFQX0VOQUJMRUQpIHx8IGRlZmluZWQoTk9STUFMTUFQX0VOQUJMRUQpXFxuIHZfVGFuZ2VudCA9IG5vcm1hbGl6ZSgod29ybGRJbnZlcnNlVHJhbnNwb3NlICogdmVjNChza2lubmVkVGFuZ2VudCwgMC4wKSkueHl6KTtcXG4gdl9CaXRhbmdlbnQgPSBub3JtYWxpemUoY3Jvc3Modl9Ob3JtYWwsIHZfVGFuZ2VudCkgKiB0YW5nZW50LncpO1xcbiNlbmRpZlxcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gdl9Db2xvciA9IGFfQ29sb3I7XFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoQU9NQVBfRU5BQkxFRClcXG4gdl9UZXhjb29yZDIgPSB0ZXhjb29yZDI7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc3RhbmRhcmQuZnJhZ21lbnRcXG4jZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzlcXG4jZGVmaW5lIEdMT1NTSU5FU1NfQ0hBTk5FTCAwXFxuI2RlZmluZSBST1VHSE5FU1NfQ0hBTk5FTCAwXFxuI2RlZmluZSBNRVRBTE5FU1NfQ0hBTk5FTCAxXFxuI2RlZmluZSBESUZGVVNFTUFQX0FMUEhBX0FMUEhBXFxuQGltcG9ydCBjbGF5LnN0YW5kYXJkLmNodW5rLnZhcnlpbmdcXG51bmlmb3JtIG1hdDQgdmlld0ludmVyc2UgOiBWSUVXSU5WRVJTRTtcXG4jaWZkZWYgTk9STUFMTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7XFxuI2VuZGlmXFxudW5pZm9ybSBmbG9hdCBub3JtYWxTY2FsZTogMS4wO1xcbiNpZmRlZiBESUZGVVNFTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBTUEVDVUxBUk1BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJNYXA7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9ST1VHSE5FU1NcXG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcyA6IDAuNTtcXG4gI2lmZGVmIFJPVUdITkVTU01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgcm91Z2huZXNzTWFwO1xcbiAjZW5kaWZcXG4jZWxzZVxcbnVuaWZvcm0gZmxvYXQgZ2xvc3NpbmVzczogMC41O1xcbiAjaWZkZWYgR0xPU1NJTkVTU01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgZ2xvc3NpbmVzc01hcDtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIE1FVEFMTkVTU01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBPQ0NMVVNJT05NQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIG9jY2x1c2lvbk1hcDtcXG4jZW5kaWZcXG4jaWZkZWYgRU5WSVJPTk1FTlRNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlckN1YmUgZW52aXJvbm1lbnRNYXA7XFxuICNpZmRlZiBQQVJBTExBWF9DT1JSRUNURURcXG51bmlmb3JtIHZlYzMgZW52aXJvbm1lbnRCb3hNaW47XFxudW5pZm9ybSB2ZWMzIGVudmlyb25tZW50Qm94TWF4O1xcbiAjZW5kaWZcXG4jZW5kaWZcXG4jaWZkZWYgQlJERkxPT0tVUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgYnJkZkxvb2t1cDtcXG4jZW5kaWZcXG4jaWZkZWYgRU1JU1NJVkVNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBTU0FPTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBzc2FvTWFwO1xcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydCA6IFZJRVdQT1JUO1xcbiNlbmRpZlxcbiNpZmRlZiBBT01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgYW9NYXA7XFxudW5pZm9ybSBmbG9hdCBhb0ludGVuc2l0eTtcXG4jZW5kaWZcXG51bmlmb3JtIHZlYzMgY29sb3IgOiBbMS4wLCAxLjAsIDEuMF07XFxudW5pZm9ybSBmbG9hdCBhbHBoYSA6IDEuMDtcXG4jaWZkZWYgQUxQSEFfVEVTVFxcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuOTtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX01FVEFMTkVTU1xcbnVuaWZvcm0gZmxvYXQgbWV0YWxuZXNzIDogMC4wO1xcbiNlbHNlXFxudW5pZm9ybSB2ZWMzIHNwZWN1bGFyQ29sb3IgOiBbMC4xLCAwLjEsIDAuMV07XFxuI2VuZGlmXFxudW5pZm9ybSB2ZWMzIGVtaXNzaW9uIDogWzAuMCwgMC4wLCAwLjBdO1xcbnVuaWZvcm0gZmxvYXQgZW1pc3Npb25JbnRlbnNpdHk6IDE7XFxudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGggOiAwLjA7XFxudW5pZm9ybSB2ZWM0IGxpbmVDb2xvciA6IFswLjAsIDAuMCwgMC4wLCAwLjZdO1xcbiNpZmRlZiBFTlZJUk9OTUVOVE1BUF9QUkVGSUxURVJcXG51bmlmb3JtIGZsb2F0IG1heE1pcG1hcExldmVsOiA1O1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5zdGFuZGFyZC5jaHVuay5saWdodF9oZWFkZXJcXG5AaW1wb3J0IGNsYXkudXRpbC5jYWxjdWxhdGVfYXR0ZW51YXRpb25cXG5AaW1wb3J0IGNsYXkudXRpbC5lZGdlX2ZhY3RvclxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkudXRpbC5zcmdiXFxuQGltcG9ydCBjbGF5LnBsdWdpbi5jb21wdXRlX3NoYWRvd19tYXBcXG5AaW1wb3J0IGNsYXkudXRpbC5wYXJhbGxheF9jb3JyZWN0XFxuQGltcG9ydCBjbGF5LnV0aWwuQUNFU1xcbmZsb2F0IEdfU21pdGgoZmxvYXQgZywgZmxvYXQgbmR2LCBmbG9hdCBuZGwpXFxue1xcbiBmbG9hdCByb3VnaG5lc3MgPSAxLjAgLSBnO1xcbiBmbG9hdCBrID0gcm91Z2huZXNzICogcm91Z2huZXNzIC8gMi4wO1xcbiBmbG9hdCBHMVYgPSBuZHYgLyAobmR2ICogKDEuMCAtIGspICsgayk7XFxuIGZsb2F0IEcxTCA9IG5kbCAvIChuZGwgKiAoMS4wIC0gaykgKyBrKTtcXG4gcmV0dXJuIEcxTCAqIEcxVjtcXG59XFxudmVjMyBGX1NjaGxpY2soZmxvYXQgbmR2LCB2ZWMzIHNwZWMpIHtcXG4gcmV0dXJuIHNwZWMgKyAoMS4wIC0gc3BlYykgKiBwb3coMS4wIC0gbmR2LCA1LjApO1xcbn1cXG5mbG9hdCBEX1Bob25nKGZsb2F0IGcsIGZsb2F0IG5kaCkge1xcbiBmbG9hdCBhID0gcG93KDgxOTIuMCwgZyk7XFxuIHJldHVybiAoYSArIDIuMCkgLyA4LjAgKiBwb3cobmRoLCBhKTtcXG59XFxuZmxvYXQgRF9HR1goZmxvYXQgZywgZmxvYXQgbmRoKSB7XFxuIGZsb2F0IHIgPSAxLjAgLSBnO1xcbiBmbG9hdCBhID0gciAqIHI7XFxuIGZsb2F0IHRtcCA9IG5kaCAqIG5kaCAqIChhIC0gMS4wKSArIDEuMDtcXG4gcmV0dXJuIGEgLyAoUEkgKiB0bXAgKiB0bXApO1xcbn1cXG4jaWZkZWYgUEFSQUxMQVhPQ0NMVVNJT05NQVBfRU5BQkxFRFxcbnVuaWZvcm0gZmxvYXQgcGFyYWxsYXhPY2NsdXNpb25TY2FsZSA6IDAuMDI7XFxudW5pZm9ybSBmbG9hdCBwYXJhbGxheE1heExheWVycyA6IDIwO1xcbnVuaWZvcm0gZmxvYXQgcGFyYWxsYXhNaW5MYXllcnMgOiA1O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHBhcmFsbGF4T2NjbHVzaW9uTWFwO1xcbm1hdDMgdHJhbnNwb3NlKGluIG1hdDMgaW5NYXQpXFxue1xcbiB2ZWMzIGkwID0gaW5NYXRbMF07XFxuIHZlYzMgaTEgPSBpbk1hdFsxXTtcXG4gdmVjMyBpMiA9IGluTWF0WzJdO1xcbiByZXR1cm4gbWF0MyhcXG4gdmVjMyhpMC54LCBpMS54LCBpMi54KSxcXG4gdmVjMyhpMC55LCBpMS55LCBpMi55KSxcXG4gdmVjMyhpMC56LCBpMS56LCBpMi56KVxcbiApO1xcbn1cXG52ZWMyIHBhcmFsbGF4VXYodmVjMiB1diwgdmVjMyB2aWV3RGlyKVxcbntcXG4gZmxvYXQgbnVtTGF5ZXJzID0gbWl4KHBhcmFsbGF4TWF4TGF5ZXJzLCBwYXJhbGxheE1pbkxheWVycywgYWJzKGRvdCh2ZWMzKDAuMCwgMC4wLCAxLjApLCB2aWV3RGlyKSkpO1xcbiBmbG9hdCBsYXllckhlaWdodCA9IDEuMCAvIG51bUxheWVycztcXG4gZmxvYXQgY3VyTGF5ZXJIZWlnaHQgPSAwLjA7XFxuIHZlYzIgZGVsdGFVdiA9IHZpZXdEaXIueHkgKiBwYXJhbGxheE9jY2x1c2lvblNjYWxlIC8gKHZpZXdEaXIueiAqIG51bUxheWVycyk7XFxuIHZlYzIgY3VyVXYgPSB1djtcXG4gZmxvYXQgaGVpZ2h0ID0gMS4wIC0gdGV4dHVyZTJEKHBhcmFsbGF4T2NjbHVzaW9uTWFwLCBjdXJVdikucjtcXG4gZm9yIChpbnQgaSA9IDA7IGkgPCAzMDsgaSsrKSB7XFxuIGN1ckxheWVySGVpZ2h0ICs9IGxheWVySGVpZ2h0O1xcbiBjdXJVdiAtPSBkZWx0YVV2O1xcbiBoZWlnaHQgPSAxLjAgLSB0ZXh0dXJlMkQocGFyYWxsYXhPY2NsdXNpb25NYXAsIGN1clV2KS5yO1xcbiBpZiAoaGVpZ2h0IDwgY3VyTGF5ZXJIZWlnaHQpIHtcXG4gYnJlYWs7XFxuIH1cXG4gfVxcbiB2ZWMyIHByZXZVdiA9IGN1clV2ICsgZGVsdGFVdjtcXG4gZmxvYXQgbmV4dCA9IGhlaWdodCAtIGN1ckxheWVySGVpZ2h0O1xcbiBmbG9hdCBwcmV2ID0gMS4wIC0gdGV4dHVyZTJEKHBhcmFsbGF4T2NjbHVzaW9uTWFwLCBwcmV2VXYpLnIgLSBjdXJMYXllckhlaWdodCArIGxheWVySGVpZ2h0O1xcbiByZXR1cm4gbWl4KGN1clV2LCBwcmV2VXYsIG5leHQgLyAobmV4dCAtIHByZXYpKTtcXG59XFxuI2VuZGlmXFxudm9pZCBtYWluKCkge1xcbiB2ZWM0IGFsYmVkb0NvbG9yID0gdmVjNChjb2xvciwgYWxwaGEpO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gYWxiZWRvQ29sb3IgKj0gdl9Db2xvcjtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9ERUNPREVcXG4gYWxiZWRvQ29sb3IgPSBzUkdCVG9MaW5lYXIoYWxiZWRvQ29sb3IpO1xcbiNlbmRpZlxcbiB2ZWMzIGV5ZVBvcyA9IHZpZXdJbnZlcnNlWzNdLnh5ejtcXG4gdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvcyAtIHZfV29ybGRQb3NpdGlvbik7XFxuIHZlYzIgdXYgPSB2X1RleGNvb3JkO1xcbiNpZiBkZWZpbmVkKFBBUkFMTEFYT0NDTFVTSU9OTUFQX0VOQUJMRUQpIHx8IGRlZmluZWQoTk9STUFMTUFQX0VOQUJMRUQpXFxuIG1hdDMgdGJuID0gbWF0Myh2X1RhbmdlbnQsIHZfQml0YW5nZW50LCB2X05vcm1hbCk7XFxuI2VuZGlmXFxuI2lmZGVmIFBBUkFMTEFYT0NDTFVTSU9OTUFQX0VOQUJMRURcXG4gdXYgPSBwYXJhbGxheFV2KHZfVGV4Y29vcmQsIG5vcm1hbGl6ZSh0cmFuc3Bvc2UodGJuKSAqIC1WKSk7XFxuI2VuZGlmXFxuI2lmZGVmIERJRkZVU0VNQVBfRU5BQkxFRFxcbiB2ZWM0IHRleGVsID0gdGV4dHVyZTJEKGRpZmZ1c2VNYXAsIHV2KTtcXG4gI2lmZGVmIFNSR0JfREVDT0RFXFxuIHRleGVsID0gc1JHQlRvTGluZWFyKHRleGVsKTtcXG4gI2VuZGlmXFxuIGFsYmVkb0NvbG9yLnJnYiAqPSB0ZXhlbC5yZ2I7XFxuICNpZmRlZiBESUZGVVNFTUFQX0FMUEhBX0FMUEhBXFxuIGFsYmVkb0NvbG9yLmEgKj0gdGV4ZWwuYTtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9NRVRBTE5FU1NcXG4gZmxvYXQgbSA9IG1ldGFsbmVzcztcXG4gI2lmZGVmIE1FVEFMTkVTU01BUF9FTkFCTEVEXFxuIGZsb2F0IG0yID0gdGV4dHVyZTJEKG1ldGFsbmVzc01hcCwgdXYpW01FVEFMTkVTU19DSEFOTkVMXTtcXG4gbSA9IGNsYW1wKG0yICsgKG0gLSAwLjUpICogMi4wLCAwLjAsIDEuMCk7XFxuICNlbmRpZlxcbiB2ZWMzIGJhc2VDb2xvciA9IGFsYmVkb0NvbG9yLnJnYjtcXG4gYWxiZWRvQ29sb3IucmdiID0gYmFzZUNvbG9yICogKDEuMCAtIG0pO1xcbiB2ZWMzIHNwZWMgPSBtaXgodmVjMygwLjA0KSwgYmFzZUNvbG9yLCBtKTtcXG4jZWxzZVxcbiB2ZWMzIHNwZWMgPSBzcGVjdWxhckNvbG9yO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfUk9VR0hORVNTXFxuIGZsb2F0IGcgPSBjbGFtcCgxLjAgLSByb3VnaG5lc3MsIDAuMCwgMS4wKTtcXG4gI2lmZGVmIFJPVUdITkVTU01BUF9FTkFCTEVEXFxuIGZsb2F0IGcyID0gMS4wIC0gdGV4dHVyZTJEKHJvdWdobmVzc01hcCwgdXYpW1JPVUdITkVTU19DSEFOTkVMXTtcXG4gZyA9IGNsYW1wKGcyICsgKGcgLSAwLjUpICogMi4wLCAwLjAsIDEuMCk7XFxuICNlbmRpZlxcbiNlbHNlXFxuIGZsb2F0IGcgPSBnbG9zc2luZXNzO1xcbiAjaWZkZWYgR0xPU1NJTkVTU01BUF9FTkFCTEVEXFxuIGZsb2F0IGcyID0gdGV4dHVyZTJEKGdsb3NzaW5lc3NNYXAsIHV2KVtHTE9TU0lORVNTX0NIQU5ORUxdO1xcbiBnID0gY2xhbXAoZzIgKyAoZyAtIDAuNSkgKiAyLjAsIDAuMCwgMS4wKTtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIFNQRUNVTEFSTUFQX0VOQUJMRURcXG4gc3BlYyAqPSBzUkdCVG9MaW5lYXIodGV4dHVyZTJEKHNwZWN1bGFyTWFwLCB1dikpLnJnYjtcXG4jZW5kaWZcXG4gdmVjMyBOID0gdl9Ob3JtYWw7XFxuI2lmZGVmIERPVUJMRV9TSURFRFxcbiBpZiAoZG90KE4sIFYpIDwgMC4wKSB7XFxuIE4gPSAtTjtcXG4gfVxcbiNlbmRpZlxcbiNpZmRlZiBOT1JNQUxNQVBfRU5BQkxFRFxcbiBpZiAoZG90KHZfVGFuZ2VudCwgdl9UYW5nZW50KSA+IDAuMCkge1xcbiB2ZWMzIG5vcm1hbFRleGVsID0gdGV4dHVyZTJEKG5vcm1hbE1hcCwgdXYpLnh5ejtcXG4gaWYgKGRvdChub3JtYWxUZXhlbCwgbm9ybWFsVGV4ZWwpID4gMC4wKSB7IE4gPSAobm9ybWFsVGV4ZWwgKiAyLjAgLSAxLjApO1xcbiBOID0gbm9ybWFsaXplKE4gKiB2ZWMzKG5vcm1hbFNjYWxlLCBub3JtYWxTY2FsZSwgMS4wKSk7XFxuIHRiblsxXSA9IC10Ym5bMV07XFxuIE4gPSBub3JtYWxpemUodGJuICogTik7XFxuIH1cXG4gfVxcbiNlbmRpZlxcbiB2ZWMzIGRpZmZ1c2VUZXJtID0gdmVjMygwLjAsIDAuMCwgMC4wKTtcXG4gdmVjMyBzcGVjdWxhclRlcm0gPSB2ZWMzKDAuMCwgMC4wLCAwLjApO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gdmVjMyBmcmVzbmVsVGVybSA9IEZfU2NobGljayhuZHYsIHNwZWMpO1xcbiNpZmRlZiBBTUJJRU5UX0xJR0hUX0NPVU5UXFxuIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IEFNQklFTlRfTElHSFRfQ09VTlQ7IF9pZHhfKyspXFxuIHt7XFxuIGRpZmZ1c2VUZXJtICs9IGFtYmllbnRMaWdodENvbG9yW19pZHhfXTtcXG4gfX1cXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVFxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX1NIX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7e1xcbiBkaWZmdXNlVGVybSArPSBjYWxjQW1iaWVudFNITGlnaHQoX2lkeF8sIE4pICogYW1iaWVudFNITGlnaHRDb2xvcltfaWR4X107XFxuIH19XFxuI2VuZGlmXFxuI2lmZGVmIFBPSU5UX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBmbG9hdCBzaGFkb3dDb250cmlic1BvaW50W1BPSU5UX0xJR0hUX0NPVU5UXTtcXG4gaWYoc2hhZG93RW5hYmxlZClcXG4ge1xcbiBjb21wdXRlU2hhZG93T2ZQb2ludExpZ2h0cyh2X1dvcmxkUG9zaXRpb24sIHNoYWRvd0NvbnRyaWJzUG9pbnQpO1xcbiB9XFxuI2VuZGlmXFxuIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IFBPSU5UX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7e1xcbiB2ZWMzIGxpZ2h0UG9zaXRpb24gPSBwb2ludExpZ2h0UG9zaXRpb25bX2lkeF9dO1xcbiB2ZWMzIGxjID0gcG9pbnRMaWdodENvbG9yW19pZHhfXTtcXG4gZmxvYXQgcmFuZ2UgPSBwb2ludExpZ2h0UmFuZ2VbX2lkeF9dO1xcbiB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgcmFuZ2UpO1xcbiBMIC89IGRpc3Q7XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kbCA9IGNsYW1wKGRvdChOLCBMKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgc2hhZG93Q29udHJpYiA9IDEuMDtcXG4jaWYgZGVmaW5lZChQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGlmKHNoYWRvd0VuYWJsZWQpXFxuIHtcXG4gc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzUG9pbnRbX2lkeF9dO1xcbiB9XFxuI2VuZGlmXFxuIHZlYzMgbGkgPSBsYyAqIG5kbCAqIGF0dGVudWF0aW9uICogc2hhZG93Q29udHJpYjtcXG4gZGlmZnVzZVRlcm0gKz0gbGk7XFxuIHNwZWN1bGFyVGVybSArPSBsaSAqIGZyZXNuZWxUZXJtICogRF9QaG9uZyhnLCBuZGgpO1xcbiB9fVxcbiNlbmRpZlxcbiNpZmRlZiBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVFxcbiNpZiBkZWZpbmVkKERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gZmxvYXQgc2hhZG93Q29udHJpYnNEaXJbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdO1xcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIGNvbXB1dGVTaGFkb3dPZkRpcmVjdGlvbmFsTGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNEaXIpO1xcbiB9XFxuI2VuZGlmXFxuIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IERJUkVDVElPTkFMX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7e1xcbiB2ZWMzIEwgPSAtbm9ybWFsaXplKGRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb25bX2lkeF9dKTtcXG4gdmVjMyBsYyA9IGRpcmVjdGlvbmFsTGlnaHRDb2xvcltfaWR4X107XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kbCA9IGNsYW1wKGRvdChOLCBMKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgc2hhZG93Q29udHJpYiA9IDEuMDtcXG4jaWYgZGVmaW5lZChESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGlmKHNoYWRvd0VuYWJsZWQpXFxuIHtcXG4gc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzRGlyW19pZHhfXTtcXG4gfVxcbiNlbmRpZlxcbiB2ZWMzIGxpID0gbGMgKiBuZGwgKiBzaGFkb3dDb250cmliO1xcbiBkaWZmdXNlVGVybSArPSBsaTtcXG4gc3BlY3VsYXJUZXJtICs9IGxpICogZnJlc25lbFRlcm0gKiBEX1Bob25nKGcsIG5kaCk7XFxuIH19XFxuI2VuZGlmXFxuI2lmZGVmIFNQT1RfTElHSFRfQ09VTlRcXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gZmxvYXQgc2hhZG93Q29udHJpYnNTcG90W1NQT1RfTElHSFRfQ09VTlRdO1xcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIGNvbXB1dGVTaGFkb3dPZlNwb3RMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic1Nwb3QpO1xcbiB9XFxuI2VuZGlmXFxuIGZvcihpbnQgaSA9IDA7IGkgPCBTUE9UX0xJR0hUX0NPVU5UOyBpKyspXFxuIHtcXG4gdmVjMyBsaWdodFBvc2l0aW9uID0gc3BvdExpZ2h0UG9zaXRpb25baV07XFxuIHZlYzMgc3BvdExpZ2h0RGlyZWN0aW9uID0gLW5vcm1hbGl6ZShzcG90TGlnaHREaXJlY3Rpb25baV0pO1xcbiB2ZWMzIGxjID0gc3BvdExpZ2h0Q29sb3JbaV07XFxuIGZsb2F0IHJhbmdlID0gc3BvdExpZ2h0UmFuZ2VbaV07XFxuIGZsb2F0IGEgPSBzcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lW2ldO1xcbiBmbG9hdCBiID0gc3BvdExpZ2h0UGVudW1icmFBbmdsZUNvc2luZVtpXTtcXG4gZmxvYXQgZmFsbG9mZkZhY3RvciA9IHNwb3RMaWdodEZhbGxvZmZGYWN0b3JbaV07XFxuIHZlYzMgTCA9IGxpZ2h0UG9zaXRpb24gLSB2X1dvcmxkUG9zaXRpb247XFxuIGZsb2F0IGRpc3QgPSBsZW5ndGgoTCk7XFxuIGZsb2F0IGF0dGVudWF0aW9uID0gbGlnaHRBdHRlbnVhdGlvbihkaXN0LCByYW5nZSk7XFxuIEwgLz0gZGlzdDtcXG4gZmxvYXQgYyA9IGRvdChzcG90TGlnaHREaXJlY3Rpb24sIEwpO1xcbiBmbG9hdCBmYWxsb2ZmO1xcbiBmYWxsb2ZmID0gY2xhbXAoKGMgLSBhKSAvKGIgLSBhKSwgMC4wLCAxLjApO1xcbiBmYWxsb2ZmID0gcG93KGZhbGxvZmYsIGZhbGxvZmZGYWN0b3IpO1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGlmIChzaGFkb3dFbmFibGVkKVxcbiB7XFxuIHNoYWRvd0NvbnRyaWIgPSBzaGFkb3dDb250cmlic1Nwb3RbaV07XFxuIH1cXG4jZW5kaWZcXG4gdmVjMyBsaSA9IGxjICogYXR0ZW51YXRpb24gKiAoMS4wIC0gZmFsbG9mZikgKiBzaGFkb3dDb250cmliICogbmRsO1xcbiBkaWZmdXNlVGVybSArPSBsaTtcXG4gc3BlY3VsYXJUZXJtICs9IGxpICogZnJlc25lbFRlcm0gKiBEX1Bob25nKGcsIG5kaCk7XFxuIH1cXG4jZW5kaWZcXG4gdmVjNCBvdXRDb2xvciA9IGFsYmVkb0NvbG9yO1xcbiBvdXRDb2xvci5yZ2IgKj0gbWF4KGRpZmZ1c2VUZXJtLCB2ZWMzKDAuMCkpO1xcbiBvdXRDb2xvci5yZ2IgKz0gbWF4KHNwZWN1bGFyVGVybSwgdmVjMygwLjApKTtcXG4jaWZkZWYgQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXFxuIHZlYzMgTCA9IHJlZmxlY3QoLVYsIE4pO1xcbiBmbG9hdCByb3VnaDIgPSBjbGFtcCgxLjAgLSBnLCAwLjAsIDEuMCk7XFxuIGZsb2F0IGJpYXMyID0gcm91Z2gyICogNS4wO1xcbiB2ZWMyIGJyZGZQYXJhbTIgPSB0ZXh0dXJlMkQoYW1iaWVudEN1YmVtYXBMaWdodEJSREZMb29rdXBbMF0sIHZlYzIocm91Z2gyLCBuZHYpKS54eTtcXG4gdmVjMyBlbnZXZWlnaHQyID0gc3BlYyAqIGJyZGZQYXJhbTIueCArIGJyZGZQYXJhbTIueTtcXG4gdmVjMyBlbnZUZXhlbDI7XFxuIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IEFNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge3tcXG4gI2lmZGVmIFNVUFBPUlRfVEVYVFVSRV9MT0RcXG4gZW52VGV4ZWwyID0gUkdCTURlY29kZSh0ZXh0dXJlQ3ViZUxvZEVYVChhbWJpZW50Q3ViZW1hcExpZ2h0Q3ViZW1hcFtfaWR4X10sIEwsIGJpYXMyKSwgOC4xMik7XFxuICNlbHNlXFxuIGVudlRleGVsMiA9IFJHQk1EZWNvZGUodGV4dHVyZUN1YmUoYW1iaWVudEN1YmVtYXBMaWdodEN1YmVtYXBbX2lkeF9dLCBMKSwgOC4xMik7XFxuICNlbmRpZlxcbiBvdXRDb2xvci5yZ2IgKz0gYW1iaWVudEN1YmVtYXBMaWdodENvbG9yW19pZHhfXSAqIGVudlRleGVsMiAqIGVudldlaWdodDI7XFxuIH19XFxuI2VuZGlmXFxuI2lmZGVmIEVOVklST05NRU5UTUFQX0VOQUJMRURcXG4gdmVjMyBlbnZXZWlnaHQgPSBnICogZnJlc25lbFRlcm07XFxuIHZlYzMgTCA9IHJlZmxlY3QoLVYsIE4pO1xcbiAjaWZkZWYgUEFSQUxMQVhfQ09SUkVDVEVEXFxuIEwgPSBwYXJhbGxheENvcnJlY3QoTCwgdl9Xb3JsZFBvc2l0aW9uLCBlbnZpcm9ubWVudEJveE1pbiwgZW52aXJvbm1lbnRCb3hNYXgpO1xcbiNlbmRpZlxcbiAjaWZkZWYgRU5WSVJPTk1FTlRNQVBfUFJFRklMVEVSXFxuIGZsb2F0IHJvdWdoID0gY2xhbXAoMS4wIC0gZywgMC4wLCAxLjApO1xcbiBmbG9hdCBiaWFzID0gcm91Z2ggKiBtYXhNaXBtYXBMZXZlbDtcXG4gI2lmZGVmIFNVUFBPUlRfVEVYVFVSRV9MT0RcXG4gdmVjMyBlbnZUZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZUxvZEVYVChlbnZpcm9ubWVudE1hcCwgTCwgYmlhcykpLnJnYjtcXG4gI2Vsc2VcXG4gdmVjMyBlbnZUZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZShlbnZpcm9ubWVudE1hcCwgTCkpLnJnYjtcXG4gI2VuZGlmXFxuICNpZmRlZiBCUkRGTE9PS1VQX0VOQUJMRURcXG4gdmVjMiBicmRmUGFyYW0gPSB0ZXh0dXJlMkQoYnJkZkxvb2t1cCwgdmVjMihyb3VnaCwgbmR2KSkueHk7XFxuIGVudldlaWdodCA9IHNwZWMgKiBicmRmUGFyYW0ueCArIGJyZGZQYXJhbS55O1xcbiAjZW5kaWZcXG4gI2Vsc2VcXG4gdmVjMyBlbnZUZXhlbCA9IHRleHR1cmVDdWJlKGVudmlyb25tZW50TWFwLCBMKS54eXo7XFxuICNlbmRpZlxcbiBvdXRDb2xvci5yZ2IgKz0gZW52VGV4ZWwgKiBlbnZXZWlnaHQ7XFxuI2VuZGlmXFxuIGZsb2F0IGFvRmFjdG9yID0gMS4wO1xcbiNpZmRlZiBTU0FPTUFQX0VOQUJMRURcXG4gYW9GYWN0b3IgPSBtaW4odGV4dHVyZTJEKHNzYW9NYXAsIChnbF9GcmFnQ29vcmQueHkgLSB2aWV3cG9ydC54eSkgLyB2aWV3cG9ydC56dykuciwgYW9GYWN0b3IpO1xcbiNlbmRpZlxcbiNpZmRlZiBBT01BUF9FTkFCTEVEXFxuIGFvRmFjdG9yID0gbWluKDEuMCAtIGNsYW1wKCgxLjAgLSB0ZXh0dXJlMkQoYW9NYXAsIHZfVGV4Y29vcmQyKS5yKSAqIGFvSW50ZW5zaXR5LCAwLjAsIDEuMCksIGFvRmFjdG9yKTtcXG4jZW5kaWZcXG4jaWZkZWYgT0NDTFVTSU9OTUFQX0VOQUJMRURcXG4gYW9GYWN0b3IgPSBtaW4oMS4wIC0gY2xhbXAoKDEuMCAtIHRleHR1cmUyRChvY2NsdXNpb25NYXAsIHZfVGV4Y29vcmQpLnIpLCAwLjAsIDEuMCksIGFvRmFjdG9yKTtcXG4jZW5kaWZcXG4gb3V0Q29sb3IucmdiICo9IGFvRmFjdG9yO1xcbiB2ZWMzIGxFbWlzc2lvbiA9IGVtaXNzaW9uO1xcbiNpZmRlZiBFTUlTU0lWRU1BUF9FTkFCTEVEXFxuIGxFbWlzc2lvbiAqPSB0ZXh0dXJlMkQoZW1pc3NpdmVNYXAsIHV2KS5yZ2I7XFxuI2VuZGlmXFxuIG91dENvbG9yLnJnYiArPSBsRW1pc3Npb24gKiBlbWlzc2lvbkludGVuc2l0eTtcXG4gaWYobGluZVdpZHRoID4gMC4pXFxuIHtcXG4gb3V0Q29sb3IucmdiID0gbWl4KG91dENvbG9yLnJnYiwgbGluZUNvbG9yLnJnYiwgKDEuMCAtIGVkZ2VGYWN0b3IobGluZVdpZHRoKSkgKiBsaW5lQ29sb3IuYSk7XFxuIH1cXG4jaWZkZWYgQUxQSEFfVEVTVFxcbiBpZiAob3V0Q29sb3IuYSA8IGFscGhhQ3V0b2ZmKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4jZW5kaWZcXG4jaWZkZWYgVE9ORU1BUFBJTkdcXG4gb3V0Q29sb3IucmdiID0gQUNFU1RvbmVNYXBwaW5nKG91dENvbG9yLnJnYik7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfRU5DT0RFXFxuIG91dENvbG9yID0gbGluZWFyVG9zUkdCKG91dENvbG9yKTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKG91dENvbG9yKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zdGFuZGFyZE1SLnZlcnRleFxcbkBpbXBvcnQgY2xheS5zdGFuZGFyZC52ZXJ0ZXhcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnN0YW5kYXJkTVIuZnJhZ21lbnRcXG4jZGVmaW5lIFVTRV9NRVRBTE5FU1NcXG4jZGVmaW5lIFVTRV9ST1VHSE5FU1NcXG5AaW1wb3J0IGNsYXkuc3RhbmRhcmQuZnJhZ21lbnRcXG5AZW5kXCI7XHJcbiIsImltcG9ydCBNYXRlcmlhbCBmcm9tICcuL01hdGVyaWFsJztcclxuXHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi9TaGFkZXInO1xyXG5pbXBvcnQgc3RhbmRhcmRFc3NsIGZyb20gJy4vc2hhZGVyL3NvdXJjZS9zdGFuZGFyZC5nbHNsLmpzJztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5cclxuLy8gSW1wb3J0IHN0YW5kYXJkIHNoYWRlclxyXG5TaGFkZXJbJ2ltcG9ydCddKHN0YW5kYXJkRXNzbCk7XHJcblxyXG52YXIgVEVYVFVSRV9QUk9QRVJUSUVTID0gWydkaWZmdXNlTWFwJywgJ25vcm1hbE1hcCcsICdyb3VnaG5lc3NNYXAnLCAnbWV0YWxuZXNzTWFwJywgJ2VtaXNzaXZlTWFwJywgJ2Vudmlyb25tZW50TWFwJywgJ2JyZGZMb29rdXAnLCAnc3Nhb01hcCcsICdhb01hcCddO1xyXG52YXIgU0lNUExFX1BST1BFUlRJRVMgPSBbJ2NvbG9yJywgJ2VtaXNzaW9uJywgJ2VtaXNzaW9uSW50ZW5zaXR5JywgJ2FscGhhJywgJ3JvdWdobmVzcycsICdtZXRhbG5lc3MnLCAndXZSZXBlYXQnLCAndXZPZmZzZXQnLCAnYW9JbnRlbnNpdHknLCAnYWxwaGFDdXRvZmYnLCAnbm9ybWFsU2NhbGUnXTtcclxudmFyIFBST1BFUlRJRVNfQ0hBTkdFX1NIQURFUiA9IFsnbGluZWFyJywgJ2VuY29kZVJHQk0nLCAnZGVjb2RlUkdCTScsICdkb3VibGVTaWRlZCcsICdhbHBoYVRlc3QnLCAncm91Z2huZXNzQ2hhbm5lbCcsICdtZXRhbG5lc3NDaGFubmVsJywgJ2Vudmlyb25tZW50TWFwUHJlZmlsdGVyZWQnXTtcclxuXHJcbnZhciBOVU1fREVGSU5FX01BUCA9IHtcclxuICAgICdyb3VnaG5lc3NDaGFubmVsJzogJ1JPVUdITkVTU19DSEFOTkVMJyxcclxuICAgICdtZXRhbG5lc3NDaGFubmVsJzogJ01FVEFMTkVTU19DSEFOTkVMJ1xyXG59O1xyXG52YXIgQk9PTF9ERUZJTkVfTUFQID0ge1xyXG4gICAgJ2xpbmVhcic6ICdTUkdCX0RFQ09ERScsXHJcbiAgICAnZW5jb2RlUkdCTSc6ICdSR0JNX0VOQ09ERScsXHJcbiAgICAnZGVjb2RlUkdCTSc6ICdSR0JNX0RFQ09ERScsXHJcbiAgICAnZG91YmxlU2lkZWQnOiAnRE9VQkxFX1NJREVEJyxcclxuICAgICdhbHBoYVRlc3QnOiAnQUxQSEFfVEVTVCcsXHJcbiAgICAnZW52aXJvbm1lbnRNYXBQcmVmaWx0ZXJlZCc6ICdFTlZJUk9OTUVOVE1BUF9QUkVGSUxURVInXHJcbn07XHJcblxyXG5cclxudmFyIHN0YW5kYXJkU2hhZGVyO1xyXG4vKipcclxuICogU3RhbmRhcmQgbWF0ZXJpYWwgd2l0aG91dCBjdXN0b20gc2hhZGVyLlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5TdGFuZGFyZE1hdGVyaWFsXHJcbiAqIEBleHRlbmRzIGNsYXkuQmFzZVxyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgbWF0ID0gbmV3IGNsYXkuU3RhbmRhcmRNYXRlcmlhbCh7XHJcbiAqICAgICBjb2xvcjogWzEsIDEsIDFdLFxyXG4gKiAgICAgZGlmZnVzZU1hcDogZGlmZnVzZVRleHR1cmVcclxuICogfSk7XHJcbiAqIG1hdC5yb3VnaG5lc3MgPSAxO1xyXG4gKi9cclxudmFyIFN0YW5kYXJkTWF0ZXJpYWwgPSBNYXRlcmlhbC5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFzdGFuZGFyZFNoYWRlcikge1xyXG4gICAgICAgIHN0YW5kYXJkU2hhZGVyID0gbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkTVIudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmRNUi5mcmFnbWVudCcpKTtcclxuICAgIH1cclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuU3RhbmRhcmRNYXRlcmlhbCMgKi8ge1xyXG4gICAgICAgIHNoYWRlcjogc3RhbmRhcmRTaGFkZXJcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uIChvcHRpb24pIHtcclxuICAgIC8vIFBFTkRJTkdcclxuICAgIHV0aWwuZXh0ZW5kKHRoaXMsIG9wdGlvbik7XHJcbiAgICAvLyBFeHRlbmQgYWZ0ZXIgc2hhZGVyIGlzIGNyZWF0ZWQuXHJcbiAgICB1dGlsLmRlZmF1bHRzKHRoaXMsIC8qKiBAbGVuZHMgY2xheS5TdGFuZGFyZE1hdGVyaWFsIyAqLyAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBbMSwgMSwgMV1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb2xvcjogWzEsIDEsIDFdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgICAgICogQGRlZmF1bHQgWzAsIDAsIDBdXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW1pc3Npb246IFswLCAwLCAwXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW1pc3Npb25JbnRlbnNpdHk6IDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMC41XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcm91Z2huZXNzOiAwLjUsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1ldGFsbmVzczogMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYWxwaGE6IDEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFscGhhVGVzdDogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEN1dG9mZiB0aHJlc2hvbGQgZm9yIGFscGhhIHRlc3RcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFscGhhQ3V0b2ZmOiAwLjksXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNjYWxhciBtdWx0aXBsaWVyIGFwcGxpZWQgdG8gZWFjaCBub3JtYWwgdmVjdG9yIG9mIG5vcm1hbCB0ZXh0dXJlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFhYWCBUaGlzIHZhbHVlIGlzIGNvbnNpZGVyZWQgb25seSBpZiBhIG5vcm1hbCB0ZXh0dXJlIGlzIHNwZWNpZmllZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBub3JtYWxTY2FsZTogMS4wLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBUT0RPIE11c3QgZGlzYWJsZSBjdWxsaW5nLlxyXG4gICAgICAgIGRvdWJsZVNpZGVkOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRpZmZ1c2VNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBub3JtYWxNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICByb3VnaG5lc3NNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBtZXRhbG5lc3NNYXA6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVtaXNzaXZlTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlQ3ViZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbnZpcm9ubWVudE1hcDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW52aXJvbm1lbnRCb3g6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQlJERiBMb29rdXAgaXMgZ2VuZXJhdGVkIGJ5IGNsYXkudXRpbC5jdWJlbWFwLmludGVncmF0ZUJyZGZcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYnJkZkxvb2t1cDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNzYW9NYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhb01hcDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFsxLCAxXVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHV2UmVwZWF0OiBbMSwgMV0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBbMCwgMF1cclxuICAgICAgICAgKi9cclxuICAgICAgICB1dk9mZnNldDogWzAsIDBdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKi9cclxuICAgICAgICBhb0ludGVuc2l0eTogMSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXBQcmVmaWx0ZXJlZDogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGxpbmVhcjogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVuY29kZVJHQk06IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkZWNvZGVSR0JNOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge051bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICByb3VnaG5lc3NDaGFubmVsOiAwLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtOdW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWV0YWxuZXNzQ2hhbm5lbDogMVxyXG4gICAgfSk7XHJcbn0sIHtcclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG1hdGVyaWFsID0gbmV3IFN0YW5kYXJkTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBURVhUVVJFX1BST1BFUlRJRVMuZm9yRWFjaChmdW5jdGlvbiAocHJvcE5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXNbcHJvcE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbFtwcm9wTmFtZV0gPSB0aGlzW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgICAgIFNJTVBMRV9QUk9QRVJUSUVTLmNvbmNhdChQUk9QRVJUSUVTX0NIQU5HRV9TSEFERVIpLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsW3Byb3BOYW1lXSA9IHRoaXNbcHJvcE5hbWVdO1xyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcclxuICAgIH1cclxufSk7XHJcblxyXG5TSU1QTEVfUFJPUEVSVElFUy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wTmFtZSkge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCBwcm9wTmFtZSwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQocHJvcE5hbWUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKHByb3BOYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxuVEVYVFVSRV9QUk9QRVJUSUVTLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsIHByb3BOYW1lLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChwcm9wTmFtZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFVuaWZvcm0ocHJvcE5hbWUsIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufSk7XHJcblxyXG5QUk9QRVJUSUVTX0NIQU5HRV9TSEFERVIuZm9yRWFjaChmdW5jdGlvbiAocHJvcE5hbWUpIHtcclxuICAgIHZhciBwcml2YXRlS2V5ID0gJ18nICsgcHJvcE5hbWU7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsIHByb3BOYW1lLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3ByaXZhdGVLZXldO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpc1twcml2YXRlS2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAocHJvcE5hbWUgaW4gTlVNX0RFRklORV9NQVApIHtcclxuICAgICAgICAgICAgICAgIHZhciBkZWZpbmVOYW1lID0gTlVNX0RFRklORV9NQVBbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWZpbmUoJ2ZyYWdtZW50JywgZGVmaW5lTmFtZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZU5hbWUgPSBCT09MX0RFRklORV9NQVBbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPyB0aGlzLmRlZmluZSgnZnJhZ21lbnQnLCBkZWZpbmVOYW1lKSA6IHRoaXMudW5kZWZpbmUoJ2ZyYWdtZW50JywgZGVmaW5lTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufSk7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICdlbnZpcm9ubWVudEJveCcsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBlbnZCb3ggPSB0aGlzLl9lbnZpcm9ubWVudEJveDtcclxuICAgICAgICBpZiAoZW52Qm94KSB7XHJcbiAgICAgICAgICAgIGVudkJveC5taW4uc2V0QXJyYXkodGhpcy5nZXQoJ2Vudmlyb25tZW50Qm94TWluJykpO1xyXG4gICAgICAgICAgICBlbnZCb3gubWF4LnNldEFycmF5KHRoaXMuZ2V0KCdlbnZpcm9ubWVudEJveE1heCcpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVudkJveDtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9lbnZpcm9ubWVudEJveCA9IHZhbHVlO1xyXG5cclxuICAgICAgICB2YXIgdW5pZm9ybXMgPSB0aGlzLnVuaWZvcm1zID0gdGhpcy51bmlmb3JtcyB8fCB7fTtcclxuICAgICAgICB1bmlmb3Jtc1snZW52aXJvbm1lbnRCb3hNaW4nXSA9IHVuaWZvcm1zWydlbnZpcm9ubWVudEJveE1pbiddIHx8IHtcclxuICAgICAgICAgICAgdmFsdWU6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHVuaWZvcm1zWydlbnZpcm9ubWVudEJveE1heCddID0gdW5pZm9ybXNbJ2Vudmlyb25tZW50Qm94TWF4J10gfHwge1xyXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIFRPRE8gQ2FuJ3QgZGV0ZWN0IG9wZXJhdGlvbiBsaWtlIGJveC5taW4gPSBuZXcgVmVjdG9yKClcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKCdlbnZpcm9ubWVudEJveE1pbicsIHZhbHVlLm1pbi5hcnJheSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybSgnZW52aXJvbm1lbnRCb3hNYXgnLCB2YWx1ZS5tYXguYXJyYXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmaW5lKCdmcmFnbWVudCcsICdQQVJBTExBWF9DT1JSRUNURUQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1BBUkFMTEFYX0NPUlJFQ1RFRCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTdGFuZGFyZE1hdGVyaWFsO1xyXG4iLCJpbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcblxyXG52YXIgX2xpYnJhcnkgPSB7fTtcclxuXHJcbmZ1bmN0aW9uIFNoYWRlckxpYnJhcnkgKCkge1xyXG4gICAgdGhpcy5fcG9vbCA9IHt9O1xyXG59XHJcblxyXG5TaGFkZXJMaWJyYXJ5LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICB2YXIga2V5ID0gbmFtZTtcclxuXHJcbiAgICBpZiAodGhpcy5fcG9vbFtrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvb2xba2V5XTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBzb3VyY2UgPSBfbGlicmFyeVtuYW1lXTtcclxuICAgICAgICBpZiAoIXNvdXJjZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTaGFkZXIgXCInICsgbmFtZSArICdcIicgKyAnIGlzIG5vdCBpbiB0aGUgbGlicmFyeScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKHNvdXJjZS52ZXJ0ZXgsIHNvdXJjZS5mcmFnbWVudCk7XHJcbiAgICAgICAgdGhpcy5fcG9vbFtrZXldID0gc2hhZGVyO1xyXG4gICAgICAgIHJldHVybiBzaGFkZXI7XHJcbiAgICB9XHJcbn07XHJcblxyXG5TaGFkZXJMaWJyYXJ5LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5fcG9vbCA9IHt9O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gdGVtcGxhdGUobmFtZSwgdmVydGV4LCBmcmFnbWVudCkge1xyXG4gICAgX2xpYnJhcnlbbmFtZV0gPSB7XHJcbiAgICAgICAgdmVydGV4OiB2ZXJ0ZXgsXHJcbiAgICAgICAgZnJhZ21lbnQ6IGZyYWdtZW50XHJcbiAgICB9O1xyXG59XHJcblxyXG52YXIgZGVmYXVsdExpYnJhcnkgPSBuZXcgU2hhZGVyTGlicmFyeSgpO1xyXG5cclxuLyoqXHJcbiAqICMjIyBCdWlsaW4gc2hhZGVyc1xyXG4gKiArIGNsYXkuc3RhbmRhcmRcclxuICogKyBjbGF5LmJhc2ljXHJcbiAqICsgY2xheS5sYW1iZXJ0XHJcbiAqICsgY2xheS53aXJlZnJhbWVcclxuICpcclxuICogQG5hbWVzcGFjZSBjbGF5LnNoYWRlci5saWJyYXJ5XHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIG5ldyBzaGFkZXIgbGlicmFyeS5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlTGlicmFyeTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgU2hhZGVyTGlicmFyeSgpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogR2V0IHNoYWRlciBmcm9tIGRlZmF1bHQgbGlicmFyeS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlNoYWRlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnNoYWRlci5saWJyYXJ5XHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogICAgIGNsYXkuc2hhZGVyLmxpYnJhcnkuZ2V0KCdjbGF5LnN0YW5kYXJkJylcclxuICAgICAqL1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRMaWJyYXJ5LmdldC5hcHBseShkZWZhdWx0TGlicmFyeSwgYXJndW1lbnRzKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnNoYWRlci5saWJyYXJ5XHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gdmVydGV4IC0gVmVydGV4IHNoYWRlciBjb2RlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGZyYWdtZW50IC0gRnJhZ21lbnQgc2hhZGVyIGNvZGVcclxuICAgICAqL1xyXG4gICAgdGVtcGxhdGU6IHRlbXBsYXRlLFxyXG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gZGVmYXVsdExpYnJhcnkuY2xlYXIoKTtcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LkpvaW50XHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgSm9pbnQgPSBCYXNlLmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5LkpvaW50IyAqL1xyXG57XHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvaXNzdWVzLzE5MyNpc3N1ZWNvbW1lbnQtMjkyMTY1NzZcclxuICAgIC8qKlxyXG4gICAgICogSm9pbnQgbmFtZVxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgbmFtZTogJycsXHJcbiAgICAvKipcclxuICAgICAqIEluZGV4IG9mIGpvaW50IGluIHRoZSBza2VsZXRvblxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaW5kZXg6IC0xLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NlbmUgbm9kZSBhdHRhY2hlZCB0b1xyXG4gICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgbm9kZTogbnVsbFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEpvaW50O1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBKb2ludCBmcm9tICcuL0pvaW50JztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vVGV4dHVyZSc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuL21hdGgvTWF0cml4NCc7XHJcblxyXG5pbXBvcnQgbWF0NCBmcm9tICcuL2dsbWF0cml4L21hdDQnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuL2dsbWF0cml4L3ZlYzMnO1xyXG5pbXBvcnQgcXVhdCBmcm9tICcuL2dsbWF0cml4L3F1YXQnO1xyXG5cclxuXHJcbnZhciB0bXBCb3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG52YXIgdG1wTWF0NCA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuU2tlbGV0b25cclxuICovXHJcbnZhciBTa2VsZXRvbiA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuU2tlbGV0b24jICove1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZWxhdGl2ZSByb290IG5vZGUgdGhhdCBub3QgYWZmZWN0IHRyYW5zZm9ybSBvZiBqb2ludC5cclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlbGF0aXZlUm9vdE5vZGU6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBuYW1lOiAnJyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogam9pbnRzXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxjbGF5LkpvaW50Pn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBqb2ludHM6IFtdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBib3VuZGluZyBib3ggd2l0aCBib3VuZCBnZW9tZXRyeS5cclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBib3VuZGluZ0JveDogbnVsbCxcclxuXHJcbiAgICAgICAgX2NsaXBzOiBbXSxcclxuXHJcbiAgICAgICAgLy8gTWF0cml4IHRvIGpvaW50IHNwYWNlIChyZWxhdGl2ZSB0byByb290IGpvaW50KVxyXG4gICAgICAgIF9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXk6IG51bGwsXHJcblxyXG4gICAgICAgIC8vIFVzZSBzdWJhcnJheSBpbnN0ZWFkIG9mIGNvcHkgYmFjayBlYWNoIHRpbWUgY29tcHV0aW5nIG1hdHJpeFxyXG4gICAgICAgIC8vIGh0dHA6Ly9qc3BlcmYuY29tL3N1YmFycmF5LXZzLWNvcHktZm9yLWFycmF5LXRyYW5zZm9ybS81XHJcbiAgICAgICAgX2pvaW50TWF0cmljZXNTdWJBcnJheXM6IFtdLFxyXG5cclxuICAgICAgICAvLyBqb2ludE1hdHJpeCAqIGN1cnJlbnRQb3NlTWF0cml4XHJcbiAgICAgICAgLy8gd29ybGRUcmFuc2Zvcm0gaXMgcmVsYXRpdmUgdG8gdGhlIHJvb3QgYm9uZVxyXG4gICAgICAgIC8vIHN0aWxsIGluIG1vZGVsIHNwYWNlIG5vdCB3b3JsZCBzcGFjZVxyXG4gICAgICAgIF9za2luTWF0cmljZXNBcnJheTogbnVsbCxcclxuXHJcbiAgICAgICAgX3NraW5NYXRyaWNlc1N1YkFycmF5czogW10sXHJcblxyXG4gICAgICAgIF9zdWJTa2luTWF0cmljZXNBcnJheToge31cclxuICAgIH07XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5Ta2VsZXRvbi5wcm90b3R5cGUgKi9cclxue1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGEgc2tpbm5pbmcgY2xpcCBhbmQgY3JlYXRlIGEgbWFwIGJldHdlZW4gY2xpcCBhbmQgc2tlbGV0b25cclxuICAgICAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uU2tpbm5pbmdDbGlwfSBjbGlwXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW21hcFJ1bGVdIE1hcCBiZXR3ZWVuIGpvaW50IG5hbWUgaW4gc2tlbGV0b24gYW5kIGpvaW50IG5hbWUgaW4gY2xpcFxyXG4gICAgICovXHJcbiAgICBhZGRDbGlwOiBmdW5jdGlvbiAoY2xpcCwgbWFwUnVsZSkge1xyXG4gICAgICAgIC8vIENsaXAgaGF2ZSBiZWVuIGV4aXN0cyBpblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fY2xpcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NsaXBzW2ldLmNsaXAgPT09IGNsaXApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBNYXAgdGhlIGpvaW50IGluZGV4IGluIHNrZWxldG9uIHRvIGpvaW50IHBvc2UgaW5kZXggaW4gY2xpcFxyXG4gICAgICAgIHZhciBtYXBzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBtYXBzW2ldID0gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIENyZWF0ZSBhdmF0YXJcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsaXAudHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2pdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRyYWNrID0gY2xpcC50cmFja3NbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgam9pbnROYW1lID0gam9pbnQubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmIChtYXBSdWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgam9pbnROYW1lID0gbWFwUnVsZVtqb2ludE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRyYWNrLm5hbWUgPT09IGpvaW50TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcHNbal0gPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9jbGlwcy5wdXNoKHtcclxuICAgICAgICAgICAgbWFwczogbWFwcyxcclxuICAgICAgICAgICAgY2xpcDogY2xpcFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpcHMubGVuZ3RoIC0gMTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLlNraW5uaW5nQ2xpcH0gY2xpcFxyXG4gICAgICovXHJcbiAgICByZW1vdmVDbGlwOiBmdW5jdGlvbiAoY2xpcCkge1xyXG4gICAgICAgIHZhciBpZHggPSAtMTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NsaXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9jbGlwc1tpXS5jbGlwID09PSBjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICBpZHggPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkeCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2xpcHMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGFsbCBjbGlwc1xyXG4gICAgICovXHJcbiAgICByZW1vdmVDbGlwc0FsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NsaXBzID0gW107XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGNsaXAgYnkgaW5kZXhcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gaW5kZXhcclxuICAgICAqL1xyXG4gICAgZ2V0Q2xpcDogZnVuY3Rpb24gKGluZGV4KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NsaXBzW2luZGV4XSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xpcHNbaW5kZXhdLmNsaXA7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2xpcE51bWJlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGlwcy5sZW5ndGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIGpvaW50IG1hdHJpY2VzIGZyb20gbm9kZSB0cmFuc2Zvcm1cclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICovXHJcbiAgICB1cGRhdGVKb2ludE1hdHJpY2VzOiAoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2YXIgbTQgPSBtYXQ0LmNyZWF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuam9pbnRzLmxlbmd0aCAqIDE2KTtcclxuICAgICAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuam9pbnRzLmxlbmd0aCAqIDE2KTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgbWF0NC5jb3B5KG00LCBqb2ludC5ub2RlLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgICAgIG1hdDQuaW52ZXJ0KG00LCBtNCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IGkgKiAxNjtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheVtvZmZzZXQgKyBqXSA9IG00W2pdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1hdHJpY2VzU3ViQXJyYXlzKCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgYm91bmRpbmdCb3ggb2YgZWFjaCBqb2ludCBib3VuZCB0byBnZW9tZXRyeS5cclxuICAgICAqIEFTU1VNRSBza2VsZXRvbiBhbmQgZ2VvbWV0cnkgam9pbnRzIGFyZSBtYXRjaGVkLlxyXG4gICAgICogQHBhcmFtIHtjbGF5Lkdlb21ldHJ5fSBnZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVKb2ludHNCb3VuZGluZ0JveGVzOiBmdW5jdGlvbiAoZ2VvbWV0cnkpIHtcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IGF0dHJpYnV0ZXMucG9zaXRpb247XHJcbiAgICAgICAgdmFyIGpvaW50QXR0ciA9IGF0dHJpYnV0ZXMuam9pbnQ7XHJcbiAgICAgICAgdmFyIHdlaWdodEF0dHIgPSBhdHRyaWJ1dGVzLndlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIGpvaW50c0JvdW5kaW5nQm94ZXMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGpvaW50c0JvdW5kaW5nQm94ZXNbaV0gPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICAgICAgam9pbnRzQm91bmRpbmdCb3hlc1tpXS5fX3VwZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2dHhKb2ludCA9IFtdO1xyXG4gICAgICAgIHZhciB2dHhQb3MgPSBbXTtcclxuICAgICAgICB2YXIgdnR4V2VpZ2h0ID0gW107XHJcbiAgICAgICAgdmFyIG1heEpvaW50SWR4ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb21ldHJ5LnZlcnRleENvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgam9pbnRBdHRyLmdldChpLCB2dHhKb2ludCk7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uQXR0ci5nZXQoaSwgdnR4UG9zKTtcclxuICAgICAgICAgICAgd2VpZ2h0QXR0ci5nZXQoaSwgdnR4V2VpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgNDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodnR4V2VpZ2h0W2tdID4gMC4wMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBqb2ludElkeCA9IHZ0eEpvaW50W2tdO1xyXG4gICAgICAgICAgICAgICAgICAgIG1heEpvaW50SWR4ID0gTWF0aC5tYXgobWF4Sm9pbnRJZHgsIGpvaW50SWR4KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1pbiA9IGpvaW50c0JvdW5kaW5nQm94ZXNbam9pbnRJZHhdLm1pbi5hcnJheTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWF4ID0gam9pbnRzQm91bmRpbmdCb3hlc1tqb2ludElkeF0ubWF4LmFycmF5O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBqb2ludHNCb3VuZGluZ0JveGVzW2pvaW50SWR4XS5fX3VwZGF0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBtaW4gPSB2ZWMzLm1pbihtaW4sIG1pbiwgdnR4UG9zKTtcclxuICAgICAgICAgICAgICAgICAgICBtYXggPSB2ZWMzLm1heChtYXgsIG1heCwgdnR4UG9zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fam9pbnRzQm91bmRpbmdCb3hlcyA9IGpvaW50c0JvdW5kaW5nQm94ZXM7XHJcblxyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuXHJcbiAgICAgICAgaWYgKG1heEpvaW50SWR4IDwgdGhpcy5qb2ludHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0dlb21ldHJ5IGpvaW50cyBhbmQgc2tlbGV0b24gam9pbnRzIGRvblxcJ3QgbWF0Y2gnKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHNldEpvaW50TWF0cmljZXNBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheSA9IGFycjtcclxuICAgICAgICB0aGlzLl9za2luTWF0cmljZXNBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYXJyLmxlbmd0aCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVNYXRyaWNlc1N1YkFycmF5cygpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVNYXRyaWNlc1N1YkFycmF5czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fam9pbnRNYXRyaWNlc1N1YkFycmF5c1tpXSA9IHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheS5zdWJhcnJheShpICogMTYsIChpKzEpICogMTYpO1xyXG4gICAgICAgICAgICB0aGlzLl9za2luTWF0cmljZXNTdWJBcnJheXNbaV0gPSB0aGlzLl9za2luTWF0cmljZXNBcnJheS5zdWJhcnJheShpICogMTYsIChpKzEpICogMTYpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgc2tpbm5pbmcgbWF0cmljZXNcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuX3NldFBvc2UoKTtcclxuXHJcbiAgICAgICAgdmFyIGpvaW50c0JvdW5kaW5nQm94ZXMgPSB0aGlzLl9qb2ludHNCb3VuZGluZ0JveGVzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2ldO1xyXG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzU3ViQXJyYXlzW2ldLFxyXG4gICAgICAgICAgICAgICAgam9pbnQubm9kZS53b3JsZFRyYW5zZm9ybS5hcnJheSxcclxuICAgICAgICAgICAgICAgIHRoaXMuX2pvaW50TWF0cmljZXNTdWJBcnJheXNbaV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5taW4uc2V0KEluZmluaXR5LCBJbmZpbml0eSwgSW5maW5pdHkpO1xyXG4gICAgICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1heC5zZXQoLUluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJib3ggPSBqb2ludHNCb3VuZGluZ0JveGVzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJib3guX191cGRhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG1wQm91bmRpbmdCb3guY29weShiYm94KTtcclxuICAgICAgICAgICAgICAgICAgICB0bXBNYXQ0LmFycmF5ID0gdGhpcy5fc2tpbk1hdHJpY2VzU3ViQXJyYXlzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcEJvdW5kaW5nQm94LmFwcGx5VHJhbnNmb3JtKHRtcE1hdDQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvdW5kaW5nQm94LnVuaW9uKHRtcEJvdW5kaW5nQm94KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0U3ViU2tpbk1hdHJpY2VzOiBmdW5jdGlvbiAobWVzaElkLCBqb2ludHMpIHtcclxuICAgICAgICB2YXIgc3ViQXJyYXkgPSB0aGlzLl9zdWJTa2luTWF0cmljZXNBcnJheVttZXNoSWRdO1xyXG4gICAgICAgIGlmICghc3ViQXJyYXkpIHtcclxuICAgICAgICAgICAgc3ViQXJyYXlcclxuICAgICAgICAgICAgICAgID0gdGhpcy5fc3ViU2tpbk1hdHJpY2VzQXJyYXlbbWVzaElkXVxyXG4gICAgICAgICAgICAgICAgPSBuZXcgRmxvYXQzMkFycmF5KGpvaW50cy5sZW5ndGggKiAxNik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpZHggPSBqb2ludHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7IGorKykge1xyXG4gICAgICAgICAgICAgICAgc3ViQXJyYXlbY3Vyc29yKytdID0gdGhpcy5fc2tpbk1hdHJpY2VzQXJyYXlbaWR4ICogMTYgKyBqXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3ViQXJyYXk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFN1YlNraW5NYXRyaWNlc1RleHR1cmU6IGZ1bmN0aW9uIChtZXNoSWQsIGpvaW50cykge1xyXG4gICAgICAgIHZhciBza2luTWF0cmljZXMgPSB0aGlzLmdldFN1YlNraW5NYXRyaWNlcyhtZXNoSWQsIGpvaW50cyk7XHJcbiAgICAgICAgdmFyIHNpemU7XHJcbiAgICAgICAgdmFyIG51bUpvaW50cyA9IHRoaXMuam9pbnRzLmxlbmd0aDtcclxuICAgICAgICBpZiAobnVtSm9pbnRzID4gMjU2KSB7XHJcbiAgICAgICAgICAgIHNpemUgPSA2NDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobnVtSm9pbnRzID4gNjQpIHtcclxuICAgICAgICAgICAgc2l6ZSA9IDMyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChudW1Kb2ludHMgPiAxNikge1xyXG4gICAgICAgICAgICBzaXplID0gMTY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzaXplID0gODtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fc2tpbk1hdHJpY2VzVGV4dHVyZSA9IHRoaXMuX3NraW5NYXRyaWNlc1RleHR1cmUgfHwgbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIHR5cGU6IFRleHR1cmUuRkxPQVQsXHJcbiAgICAgICAgICAgIG1pbkZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxyXG4gICAgICAgICAgICBtYWdGaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICAgICAgdXNlTWlwbWFwOiBmYWxzZSxcclxuICAgICAgICAgICAgZmxpcFk6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGV4dHVyZS53aWR0aCA9IHNpemU7XHJcbiAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSBzaXplO1xyXG5cclxuICAgICAgICBpZiAoIXRleHR1cmUucGl4ZWxzIHx8IHRleHR1cmUucGl4ZWxzLmxlbmd0aCAhPT0gc2l6ZSAqIHNpemUgKiA0KSB7XHJcbiAgICAgICAgICAgIHRleHR1cmUucGl4ZWxzID0gbmV3IEZsb2F0MzJBcnJheShzaXplICogc2l6ZSAqIDQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZXh0dXJlLnBpeGVscy5zZXQoc2tpbk1hdHJpY2VzKTtcclxuICAgICAgICB0ZXh0dXJlLmRpcnR5KCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRTa2luTWF0cmljZXNUZXh0dXJlOiBmdW5jdGlvbiAoKSB7XHJcblxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fc2tpbk1hdHJpY2VzVGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldFBvc2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5fY2xpcHNbMF0pIHtcclxuICAgICAgICAgICAgdmFyIGNsaXAgPSB0aGlzLl9jbGlwc1swXS5jbGlwO1xyXG4gICAgICAgICAgICB2YXIgbWFwcyA9IHRoaXMuX2NsaXBzWzBdLm1hcHM7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChtYXBzW2ldID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHBvc2UgPSBjbGlwLnRyYWNrc1ttYXBzW2ldXTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBOb3QgdXBkYXRlIGlmIHRoZXJlIGlzIG5vIGRhdGEuXHJcbiAgICAgICAgICAgICAgICAvLyBQRU5ESU5HIElmIHN5bmMgcG9zZS5wb3NpdGlvbiwgcG9zZS5yb3RhdGlvbiwgcG9zZS5zY2FsZVxyXG4gICAgICAgICAgICAgICAgaWYgKHBvc2UuY2hhbm5lbHMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZWMzLmNvcHkoam9pbnQubm9kZS5wb3NpdGlvbi5hcnJheSwgcG9zZS5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocG9zZS5jaGFubmVscy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHF1YXQuY29weShqb2ludC5ub2RlLnJvdGF0aW9uLmFycmF5LCBwb3NlLnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwb3NlLmNoYW5uZWxzLnNjYWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5jb3B5KGpvaW50Lm5vZGUuc2NhbGUuYXJyYXksIHBvc2Uuc2NhbGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGpvaW50Lm5vZGUucG9zaXRpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGpvaW50Lm5vZGUucm90YXRpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGpvaW50Lm5vZGUuc2NhbGUuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uIChjbG9uZWROb2Rlc01hcCkge1xyXG4gICAgICAgIHZhciBza2VsZXRvbiA9IG5ldyBTa2VsZXRvbigpO1xyXG4gICAgICAgIHNrZWxldG9uLm5hbWUgPSB0aGlzLm5hbWU7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5ld0pvaW50ID0gbmV3IEpvaW50KCk7XHJcbiAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2ldO1xyXG4gICAgICAgICAgICBuZXdKb2ludC5uYW1lID0gam9pbnQubmFtZTtcclxuICAgICAgICAgICAgbmV3Sm9pbnQuaW5kZXggPSBqb2ludC5pbmRleDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjbG9uZWROb2Rlc01hcCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5ld05vZGUgPSBjbG9uZWROb2Rlc01hcFtqb2ludC5ub2RlLl9fdWlkX19dO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghbmV3Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NhblxcJ3QgZmluZCBub2RlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbmV3Sm9pbnQubm9kZSA9IG5ld05vZGUgfHwgam9pbnQubm9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5ld0pvaW50Lm5vZGUgPSBqb2ludC5ub2RlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBza2VsZXRvbi5qb2ludHMucHVzaChuZXdKb2ludCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5KSB7XHJcbiAgICAgICAgICAgIHZhciBsZW4gPSB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkubGVuZ3RoO1xyXG4gICAgICAgICAgICBza2VsZXRvbi5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheShsZW4pO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbi5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5W2ldID0gdGhpcy5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5W2ldO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBza2VsZXRvbi5fc2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGxlbik7XHJcblxyXG4gICAgICAgICAgICBza2VsZXRvbi51cGRhdGVNYXRyaWNlc1N1YkFycmF5cygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2tlbGV0b24uX2pvaW50c0JvdW5kaW5nQm94ZSA9ICh0aGlzLl9qb2ludHNCb3VuZGluZ0JveGVzIHx8IFtdKS5tYXAoZnVuY3Rpb24gKGJib3gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGJib3guY2xvbmUoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2tlbGV0b24udXBkYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBza2VsZXRvbjtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTa2VsZXRvbjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJcXG5AZXhwb3J0IGNsYXkudXRpbC5yYW5kXFxuaGlnaHAgZmxvYXQgcmFuZCh2ZWMyIHV2KSB7XFxuIGNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1MztcXG4gaGlnaHAgZmxvYXQgZHQgPSBkb3QodXYueHksIHZlYzIoYSxiKSksIHNuID0gbW9kKGR0LCAzLjE0MTU5MjY1MzU4OTc5Myk7XFxuIHJldHVybiBmcmFjdChzaW4oc24pICogYyk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5jYWxjdWxhdGVfYXR0ZW51YXRpb25cXG51bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uRmFjdG9yIDogNS4wO1xcbmZsb2F0IGxpZ2h0QXR0ZW51YXRpb24oZmxvYXQgZGlzdCwgZmxvYXQgcmFuZ2UpXFxue1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IDEuMDtcXG4gYXR0ZW51YXRpb24gPSBkaXN0KmRpc3QvKHJhbmdlKnJhbmdlKzEuMCk7XFxuIGZsb2F0IGF0dF9zID0gYXR0ZW51YXRpb25GYWN0b3I7XFxuIGF0dGVudWF0aW9uID0gMS4wLyhhdHRlbnVhdGlvbiphdHRfcysxLjApO1xcbiBhdHRfcyA9IDEuMC8oYXR0X3MrMS4wKTtcXG4gYXR0ZW51YXRpb24gPSBhdHRlbnVhdGlvbiAtIGF0dF9zO1xcbiBhdHRlbnVhdGlvbiAvPSAxLjAgLSBhdHRfcztcXG4gcmV0dXJuIGNsYW1wKGF0dGVudWF0aW9uLCAwLjAsIDEuMCk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5lZGdlX2ZhY3RvclxcbiNpZmRlZiBTVVBQT1JUX1NUQU5EQVJEX0RFUklWQVRJVkVTXFxuZmxvYXQgZWRnZUZhY3RvcihmbG9hdCB3aWR0aClcXG57XFxuIHZlYzMgZCA9IGZ3aWR0aCh2X0JhcnljZW50cmljKTtcXG4gdmVjMyBhMyA9IHNtb290aHN0ZXAodmVjMygwLjApLCBkICogd2lkdGgsIHZfQmFyeWNlbnRyaWMpO1xcbiByZXR1cm4gbWluKG1pbihhMy54LCBhMy55KSwgYTMueik7XFxufVxcbiNlbHNlXFxuZmxvYXQgZWRnZUZhY3RvcihmbG9hdCB3aWR0aClcXG57XFxuIHJldHVybiAxLjA7XFxufVxcbiNlbmRpZlxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5lbmNvZGVfZmxvYXRcXG52ZWM0IGVuY29kZUZsb2F0KGNvbnN0IGluIGZsb2F0IGRlcHRoKVxcbntcXG4gY29uc3QgdmVjNCBiaXRTaGlmdHMgPSB2ZWM0KDI1Ni4wKjI1Ni4wKjI1Ni4wLCAyNTYuMCoyNTYuMCwgMjU2LjAsIDEuMCk7XFxuIGNvbnN0IHZlYzQgYml0X21hc2sgPSB2ZWM0KDAuMCwgMS4wLzI1Ni4wLCAxLjAvMjU2LjAsIDEuMC8yNTYuMCk7XFxuIHZlYzQgcmVzID0gZnJhY3QoZGVwdGggKiBiaXRTaGlmdHMpO1xcbiByZXMgLT0gcmVzLnh4eXogKiBiaXRfbWFzaztcXG4gcmV0dXJuIHJlcztcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbmZsb2F0IGRlY29kZUZsb2F0KGNvbnN0IGluIHZlYzQgY29sb3IpXFxue1xcbiBjb25zdCB2ZWM0IGJpdFNoaWZ0cyA9IHZlYzQoMS4wLygyNTYuMCoyNTYuMCoyNTYuMCksIDEuMC8oMjU2LjAqMjU2LjApLCAxLjAvMjU2LjAsIDEuMCk7XFxuIHJldHVybiBkb3QoY29sb3IsIGJpdFNoaWZ0cyk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5mbG9hdFxcbkBpbXBvcnQgY2xheS51dGlsLmVuY29kZV9mbG9hdFxcbkBpbXBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5yZ2JtX2RlY29kZVxcbnZlYzMgUkdCTURlY29kZSh2ZWM0IHJnYm0sIGZsb2F0IHJhbmdlKSB7XFxuIHJldHVybiByYW5nZSAqIHJnYm0ucmdiICogcmdibS5hO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucmdibV9lbmNvZGVcXG52ZWM0IFJHQk1FbmNvZGUodmVjMyBjb2xvciwgZmxvYXQgcmFuZ2UpIHtcXG4gaWYgKGRvdChjb2xvciwgY29sb3IpID09IDAuMCkge1xcbiByZXR1cm4gdmVjNCgwLjApO1xcbiB9XFxuIHZlYzQgcmdibTtcXG4gY29sb3IgLz0gcmFuZ2U7XFxuIHJnYm0uYSA9IGNsYW1wKG1heChtYXgoY29sb3IuciwgY29sb3IuZyksIG1heChjb2xvci5iLCAxZS02KSksIDAuMCwgMS4wKTtcXG4gcmdibS5hID0gY2VpbChyZ2JtLmEgKiAyNTUuMCkgLyAyNTUuMDtcXG4gcmdibS5yZ2IgPSBjb2xvciAvIHJnYm0uYTtcXG4gcmV0dXJuIHJnYm07XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibV9kZWNvZGVcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtX2VuY29kZVxcbnZlYzQgZGVjb2RlSERSKHZlYzQgY29sb3IpXFxue1xcbiNpZiBkZWZpbmVkKFJHQk1fREVDT0RFKSB8fCBkZWZpbmVkKFJHQk0pXFxuIHJldHVybiB2ZWM0KFJHQk1EZWNvZGUoY29sb3IsIDguMTIpLCAxLjApO1xcbiNlbHNlXFxuIHJldHVybiBjb2xvcjtcXG4jZW5kaWZcXG59XFxudmVjNCBlbmNvZGVIRFIodmVjNCBjb2xvcilcXG57XFxuI2lmIGRlZmluZWQoUkdCTV9FTkNPREUpIHx8IGRlZmluZWQoUkdCTSlcXG4gcmV0dXJuIFJHQk1FbmNvZGUoY29sb3IueHl6LCA4LjEyKTtcXG4jZWxzZVxcbiByZXR1cm4gY29sb3I7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5zcmdiXFxudmVjNCBzUkdCVG9MaW5lYXIoaW4gdmVjNCB2YWx1ZSkge1xcbiByZXR1cm4gdmVjNChtaXgocG93KHZhbHVlLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoMC4wNTIxMzI3MDE0KSwgdmVjMygyLjQpKSwgdmFsdWUucmdiICogMC4wNzczOTkzODA4LCB2ZWMzKGxlc3NUaGFuRXF1YWwodmFsdWUucmdiLCB2ZWMzKDAuMDQwNDUpKSkpLCB2YWx1ZS53KTtcXG59XFxudmVjNCBsaW5lYXJUb3NSR0IoaW4gdmVjNCB2YWx1ZSkge1xcbiByZXR1cm4gdmVjNChtaXgocG93KHZhbHVlLnJnYiwgdmVjMygwLjQxNjY2KSkgKiAxLjA1NSAtIHZlYzMoMC4wNTUpLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMyhsZXNzVGhhbkVxdWFsKHZhbHVlLnJnYiwgdmVjMygwLjAwMzEzMDgpKSkpLCB2YWx1ZS53KTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG4jaWZkZWYgU0tJTk5JTkdcXG5hdHRyaWJ1dGUgdmVjMyB3ZWlnaHQgOiBXRUlHSFQ7XFxuYXR0cmlidXRlIHZlYzQgam9pbnQgOiBKT0lOVDtcXG4jaWZkZWYgVVNFX1NLSU5fTUFUUklDRVNfVEVYVFVSRVxcbnVuaWZvcm0gc2FtcGxlcjJEIHNraW5NYXRyaWNlc1RleHR1cmUgOiBpZ25vcmU7XFxudW5pZm9ybSBmbG9hdCBza2luTWF0cmljZXNUZXh0dXJlU2l6ZTogaWdub3JlO1xcbm1hdDQgZ2V0U2tpbk1hdHJpeChzYW1wbGVyMkQgdGV4LCBmbG9hdCBpZHgpIHtcXG4gZmxvYXQgaiA9IGlkeCAqIDQuMDtcXG4gZmxvYXQgeCA9IG1vZChqLCBza2luTWF0cmljZXNUZXh0dXJlU2l6ZSk7XFxuIGZsb2F0IHkgPSBmbG9vcihqIC8gc2tpbk1hdHJpY2VzVGV4dHVyZVNpemUpICsgMC41O1xcbiB2ZWMyIHNjYWxlID0gdmVjMihza2luTWF0cmljZXNUZXh0dXJlU2l6ZSk7XFxuIHJldHVybiBtYXQ0KFxcbiB0ZXh0dXJlMkQodGV4LCB2ZWMyKHggKyAwLjUsIHkpIC8gc2NhbGUpLFxcbiB0ZXh0dXJlMkQodGV4LCB2ZWMyKHggKyAxLjUsIHkpIC8gc2NhbGUpLFxcbiB0ZXh0dXJlMkQodGV4LCB2ZWMyKHggKyAyLjUsIHkpIC8gc2NhbGUpLFxcbiB0ZXh0dXJlMkQodGV4LCB2ZWMyKHggKyAzLjUsIHkpIC8gc2NhbGUpXFxuICk7XFxufVxcbm1hdDQgZ2V0U2tpbk1hdHJpeChmbG9hdCBpZHgpIHtcXG4gcmV0dXJuIGdldFNraW5NYXRyaXgoc2tpbk1hdHJpY2VzVGV4dHVyZSwgaWR4KTtcXG59XFxuI2Vsc2VcXG51bmlmb3JtIG1hdDQgc2tpbk1hdHJpeFtKT0lOVF9DT1VOVF0gOiBTS0lOX01BVFJJWDtcXG5tYXQ0IGdldFNraW5NYXRyaXgoZmxvYXQgaWR4KSB7XFxuIHJldHVybiBza2luTWF0cml4W2ludChpZHgpXTtcXG59XFxuI2VuZGlmXFxuI2VuZGlmXFxuQGVuZFxcbkBleHBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbm1hdDQgc2tpbk1hdHJpeFdTID0gZ2V0U2tpbk1hdHJpeChqb2ludC54KSAqIHdlaWdodC54O1xcbmlmICh3ZWlnaHQueSA+IDFlLTQpXFxue1xcbiBza2luTWF0cml4V1MgKz0gZ2V0U2tpbk1hdHJpeChqb2ludC55KSAqIHdlaWdodC55O1xcbn1cXG5pZiAod2VpZ2h0LnogPiAxZS00KVxcbntcXG4gc2tpbk1hdHJpeFdTICs9IGdldFNraW5NYXRyaXgoam9pbnQueikgKiB3ZWlnaHQuejtcXG59XFxuZmxvYXQgd2VpZ2h0VyA9IDEuMC13ZWlnaHQueC13ZWlnaHQueS13ZWlnaHQuejtcXG5pZiAod2VpZ2h0VyA+IDFlLTQpXFxue1xcbiBza2luTWF0cml4V1MgKz0gZ2V0U2tpbk1hdHJpeChqb2ludC53KSAqIHdlaWdodFc7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5wYXJhbGxheF9jb3JyZWN0XFxudmVjMyBwYXJhbGxheENvcnJlY3QoaW4gdmVjMyBkaXIsIGluIHZlYzMgcG9zLCBpbiB2ZWMzIGJveE1pbiwgaW4gdmVjMyBib3hNYXgpIHtcXG4gdmVjMyBmaXJzdCA9IChib3hNYXggLSBwb3MpIC8gZGlyO1xcbiB2ZWMzIHNlY29uZCA9IChib3hNaW4gLSBwb3MpIC8gZGlyO1xcbiB2ZWMzIGZ1cnRoZXIgPSBtYXgoZmlyc3QsIHNlY29uZCk7XFxuIGZsb2F0IGRpc3QgPSBtaW4oZnVydGhlci54LCBtaW4oZnVydGhlci55LCBmdXJ0aGVyLnopKTtcXG4gdmVjMyBmaXhlZFBvcyA9IHBvcyArIGRpciAqIGRpc3Q7XFxuIHZlYzMgYm94Q2VudGVyID0gKGJveE1heCArIGJveE1pbikgKiAwLjU7XFxuIHJldHVybiBub3JtYWxpemUoZml4ZWRQb3MgLSBib3hDZW50ZXIpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuY2xhbXBfc2FtcGxlXFxudmVjNCBjbGFtcFNhbXBsZShjb25zdCBpbiBzYW1wbGVyMkQgdGV4dHVyZSwgY29uc3QgaW4gdmVjMiBjb29yZClcXG57XFxuI2lmZGVmIFNURVJFT1xcbiBmbG9hdCBleWUgPSBzdGVwKDAuNSwgY29vcmQueCkgKiAwLjU7XFxuIHZlYzIgY29vcmRDbGFtcGVkID0gY2xhbXAoY29vcmQsIHZlYzIoZXllLCAwLjApLCB2ZWMyKDAuNSArIGV5ZSwgMS4wKSk7XFxuI2Vsc2VcXG4gdmVjMiBjb29yZENsYW1wZWQgPSBjbGFtcChjb29yZCwgdmVjMigwLjApLCB2ZWMyKDEuMCkpO1xcbiNlbmRpZlxcbiByZXR1cm4gdGV4dHVyZTJEKHRleHR1cmUsIGNvb3JkQ2xhbXBlZCk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5BQ0VTXFxudmVjMyBBQ0VTVG9uZU1hcHBpbmcodmVjMyBjb2xvcilcXG57XFxuIGNvbnN0IGZsb2F0IEEgPSAyLjUxO1xcbiBjb25zdCBmbG9hdCBCID0gMC4wMztcXG4gY29uc3QgZmxvYXQgQyA9IDIuNDM7XFxuIGNvbnN0IGZsb2F0IEQgPSAwLjU5O1xcbiBjb25zdCBmbG9hdCBFID0gMC4xNDtcXG4gcmV0dXJuIChjb2xvciAqIChBICogY29sb3IgKyBCKSkgLyAoY29sb3IgKiAoQyAqIGNvbG9yICsgRCkgKyBFKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5iYXNpYy52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxudW5pZm9ybSB2ZWMyIHV2UmVwZWF0IDogWzEuMCwgMS4wXTtcXG51bmlmb3JtIHZlYzIgdXZPZmZzZXQgOiBbMC4wLCAwLjBdO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkIDogVEVYQ09PUkRfMDtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIGJhcnljZW50cmljO1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuYXR0cmlidXRlIHZlYzQgYV9Db2xvciA6IENPTE9SO1xcbnZhcnlpbmcgdmVjNCB2X0NvbG9yO1xcbiNlbmRpZlxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkICogdXZSZXBlYXQgKyB1dk9mZnNldDtcXG4gdl9CYXJ5Y2VudHJpYyA9IGJhcnljZW50cmljO1xcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuIHZfQ29sb3IgPSBhX0NvbG9yO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmJhc2ljLmZyYWdtZW50XFxuI2RlZmluZSBESUZGVVNFTUFQX0FMUEhBX0FMUEhBXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZU1hcDtcXG51bmlmb3JtIHZlYzMgY29sb3IgOiBbMS4wLCAxLjAsIDEuMF07XFxudW5pZm9ybSB2ZWMzIGVtaXNzaW9uIDogWzAuMCwgMC4wLCAwLjBdO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGEgOiAxLjA7XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG51bmlmb3JtIGZsb2F0IGFscGhhQ3V0b2ZmOiAwLjk7XFxuI2VuZGlmXFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbnZhcnlpbmcgdmVjNCB2X0NvbG9yO1xcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoIDogMC4wO1xcbnVuaWZvcm0gdmVjNCBsaW5lQ29sb3IgOiBbMC4wLCAwLjAsIDAuMCwgMC42XTtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG5AaW1wb3J0IGNsYXkudXRpbC5lZGdlX2ZhY3RvclxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkudXRpbC5zcmdiXFxuQGltcG9ydCBjbGF5LnV0aWwuQUNFU1xcbnZvaWQgbWFpbigpXFxue1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCBhbHBoYSk7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbiBnbF9GcmFnQ29sb3IgKj0gdl9Db2xvcjtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9ERUNPREVcXG4gZ2xfRnJhZ0NvbG9yID0gc1JHQlRvTGluZWFyKGdsX0ZyYWdDb2xvcik7XFxuI2VuZGlmXFxuI2lmZGVmIERJRkZVU0VNQVBfRU5BQkxFRFxcbiB2ZWM0IHRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRChkaWZmdXNlTWFwLCB2X1RleGNvb3JkKSk7XFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIHRleGVsID0gc1JHQlRvTGluZWFyKHRleGVsKTtcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChESUZGVVNFTUFQX0FMUEhBX0FMUEhBKVxcbiBnbF9GcmFnQ29sb3IuYSA9IHRleGVsLmE7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gdGV4ZWwucmdiO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IucmdiICs9IGVtaXNzaW9uO1xcbiBpZiggbGluZVdpZHRoID4gMC4pXFxuIHtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peChnbF9GcmFnQ29sb3IucmdiLCBsaW5lQ29sb3IucmdiLCAoMS4wIC0gZWRnZUZhY3RvcihsaW5lV2lkdGgpKSAqIGxpbmVDb2xvci5hKTtcXG4gfVxcbiNpZmRlZiBBTFBIQV9URVNUXFxuIGlmIChnbF9GcmFnQ29sb3IuYSA8IGFscGhhQ3V0b2ZmKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4jZW5kaWZcXG4jaWZkZWYgVE9ORU1BUFBJTkdcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IEFDRVNUb25lTWFwcGluZyhnbF9GcmFnQ29sb3IucmdiKTtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9FTkNPREVcXG4gZ2xfRnJhZ0NvbG9yID0gbGluZWFyVG9zUkdCKGdsX0ZyYWdDb2xvcik7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihnbF9GcmFnQ29sb3IpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LmxhbWJlcnQudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gbWF0NCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgOiBXT1JMRElOVkVSU0VUUkFOU1BPU0U7XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxudW5pZm9ybSB2ZWMyIHV2UmVwZWF0IDogWzEuMCwgMS4wXTtcXG51bmlmb3JtIHZlYzIgdXZPZmZzZXQgOiBbMC4wLCAwLjBdO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbCA6IE5PUk1BTDtcXG5hdHRyaWJ1dGUgdmVjMyBiYXJ5Y2VudHJpYztcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuYXR0cmlidXRlIHZlYzQgYV9Db2xvciA6IENPTE9SO1xcbnZhcnlpbmcgdmVjNCB2X0NvbG9yO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Ob3JtYWw7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4gdmVjMyBza2lubmVkTm9ybWFsID0gbm9ybWFsO1xcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gc2tpbm5lZE5vcm1hbCA9IChza2luTWF0cml4V1MgKiB2ZWM0KG5vcm1hbCwgMC4wKSkueHl6O1xcbiNlbmRpZlxcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KCBza2lubmVkUG9zaXRpb24sIDEuMCApO1xcbiB2X1RleGNvb3JkID0gdGV4Y29vcmQgKiB1dlJlcGVhdCArIHV2T2Zmc2V0O1xcbiB2X05vcm1hbCA9IG5vcm1hbGl6ZSggKCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgKiB2ZWM0KHNraW5uZWROb3JtYWwsIDAuMCkgKS54eXogKTtcXG4gdl9Xb3JsZFBvc2l0aW9uID0gKCB3b3JsZCAqIHZlYzQoIHNraW5uZWRQb3NpdGlvbiwgMS4wKSApLnh5ejtcXG4gdl9CYXJ5Y2VudHJpYyA9IGJhcnljZW50cmljO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gdl9Db2xvciA9IGFfQ29sb3I7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkubGFtYmVydC5mcmFnbWVudFxcbiNkZWZpbmUgRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZhcnlpbmcgdmVjMyB2X05vcm1hbDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGRpZmZ1c2VNYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzEuMCwgMS4wLCAxLjBdO1xcbnVuaWZvcm0gdmVjMyBlbWlzc2lvbiA6IFswLjAsIDAuMCwgMC4wXTtcXG51bmlmb3JtIGZsb2F0IGFscGhhIDogMS4wO1xcbiNpZmRlZiBBTFBIQV9URVNUXFxudW5pZm9ybSBmbG9hdCBhbHBoYUN1dG9mZjogMC45O1xcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoIDogMC4wO1xcbnVuaWZvcm0gdmVjNCBsaW5lQ29sb3IgOiBbMC4wLCAwLjAsIDAuMCwgMC42XTtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxudmFyeWluZyB2ZWM0IHZfQ29sb3I7XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLmFtYmllbnRfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuYW1iaWVudF9zaF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBQT0lOVF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIucG9pbnRfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgRElSRUNUSU9OQUxfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLmRpcmVjdGlvbmFsX2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIFNQT1RfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLnNwb3RfbGlnaHRcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkudXRpbC5jYWxjdWxhdGVfYXR0ZW51YXRpb25cXG5AaW1wb3J0IGNsYXkudXRpbC5lZGdlX2ZhY3RvclxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkucGx1Z2luLmNvbXB1dGVfc2hhZG93X21hcFxcbkBpbXBvcnQgY2xheS51dGlsLkFDRVNcXG52b2lkIG1haW4oKVxcbntcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgYWxwaGEpO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gZ2xfRnJhZ0NvbG9yICo9IHZfQ29sb3I7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIGdsX0ZyYWdDb2xvciA9IHNSR0JUb0xpbmVhcihnbF9GcmFnQ29sb3IpO1xcbiNlbmRpZlxcbiNpZmRlZiBESUZGVVNFTUFQX0VOQUJMRURcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQoIGRpZmZ1c2VNYXAsIHZfVGV4Y29vcmQgKTtcXG4jaWZkZWYgU1JHQl9ERUNPREVcXG4gdGV4LnJnYiA9IHBvdyh0ZXgucmdiLCB2ZWMzKDIuMikpO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IucmdiICo9IHRleC5yZ2I7XFxuI2lmZGVmIERJRkZVU0VNQVBfQUxQSEFfQUxQSEFcXG4gZ2xfRnJhZ0NvbG9yLmEgKj0gdGV4LmE7XFxuI2VuZGlmXFxuI2VuZGlmXFxuIHZlYzMgZGlmZnVzZUNvbG9yID0gdmVjMygwLjAsIDAuMCwgMC4wKTtcXG4jaWZkZWYgQU1CSUVOVF9MSUdIVF9DT1VOVFxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7XFxuIGRpZmZ1c2VDb2xvciArPSBhbWJpZW50TGlnaHRDb2xvcltfaWR4X107XFxuIH1cXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVFxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX1NIX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7e1xcbiBkaWZmdXNlQ29sb3IgKz0gY2FsY0FtYmllbnRTSExpZ2h0KF9pZHhfLCB2X05vcm1hbCkgKiBhbWJpZW50U0hMaWdodENvbG9yW19pZHhfXTtcXG4gfX1cXG4jZW5kaWZcXG4jaWZkZWYgUE9JTlRfTElHSFRfQ09VTlRcXG4jaWYgZGVmaW5lZChQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWJzUG9pbnRbUE9JTlRfTElHSFRfQ09VTlRdO1xcbiBpZiggc2hhZG93RW5hYmxlZCApXFxuIHtcXG4gY29tcHV0ZVNoYWRvd09mUG9pbnRMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic1BvaW50KTtcXG4gfVxcbiNlbmRpZlxcbiBmb3IoaW50IGkgPSAwOyBpIDwgUE9JTlRfTElHSFRfQ09VTlQ7IGkrKylcXG4ge1xcbiB2ZWMzIGxpZ2h0UG9zaXRpb24gPSBwb2ludExpZ2h0UG9zaXRpb25baV07XFxuIHZlYzMgbGlnaHRDb2xvciA9IHBvaW50TGlnaHRDb2xvcltpXTtcXG4gZmxvYXQgcmFuZ2UgPSBwb2ludExpZ2h0UmFuZ2VbaV07XFxuIHZlYzMgbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKGxpZ2h0RGlyZWN0aW9uKTtcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIHJhbmdlKTtcXG4gbGlnaHREaXJlY3Rpb24gLz0gZGlzdDtcXG4gZmxvYXQgbmRsID0gZG90KCB2X05vcm1hbCwgbGlnaHREaXJlY3Rpb24gKTtcXG4gZmxvYXQgc2hhZG93Q29udHJpYiA9IDEuMDtcXG4jaWYgZGVmaW5lZChQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGlmKCBzaGFkb3dFbmFibGVkIClcXG4ge1xcbiBzaGFkb3dDb250cmliID0gc2hhZG93Q29udHJpYnNQb2ludFtpXTtcXG4gfVxcbiNlbmRpZlxcbiBkaWZmdXNlQ29sb3IgKz0gbGlnaHRDb2xvciAqIGNsYW1wKG5kbCwgMC4wLCAxLjApICogYXR0ZW51YXRpb24gKiBzaGFkb3dDb250cmliO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIERJUkVDVElPTkFMX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBmbG9hdCBzaGFkb3dDb250cmlic0RpcltESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF07XFxuIGlmKHNoYWRvd0VuYWJsZWQpXFxuIHtcXG4gY29tcHV0ZVNoYWRvd09mRGlyZWN0aW9uYWxMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic0Rpcik7XFxuIH1cXG4jZW5kaWZcXG4gZm9yKGludCBpID0gMDsgaSA8IERJUkVDVElPTkFMX0xJR0hUX0NPVU5UOyBpKyspXFxuIHtcXG4gdmVjMyBsaWdodERpcmVjdGlvbiA9IC1kaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9uW2ldO1xcbiB2ZWMzIGxpZ2h0Q29sb3IgPSBkaXJlY3Rpb25hbExpZ2h0Q29sb3JbaV07XFxuIGZsb2F0IG5kbCA9IGRvdCh2X05vcm1hbCwgbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uKSk7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZiggc2hhZG93RW5hYmxlZCApXFxuIHtcXG4gc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzRGlyW2ldO1xcbiB9XFxuI2VuZGlmXFxuIGRpZmZ1c2VDb2xvciArPSBsaWdodENvbG9yICogY2xhbXAobmRsLCAwLjAsIDEuMCkgKiBzaGFkb3dDb250cmliO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIFNQT1RfTElHSFRfQ09VTlRcXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gZmxvYXQgc2hhZG93Q29udHJpYnNTcG90W1NQT1RfTElHSFRfQ09VTlRdO1xcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIGNvbXB1dGVTaGFkb3dPZlNwb3RMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic1Nwb3QpO1xcbiB9XFxuI2VuZGlmXFxuIGZvcihpbnQgaSA9IDA7IGkgPCBTUE9UX0xJR0hUX0NPVU5UOyBpKyspXFxuIHtcXG4gdmVjMyBsaWdodFBvc2l0aW9uID0gLXNwb3RMaWdodFBvc2l0aW9uW2ldO1xcbiB2ZWMzIHNwb3RMaWdodERpcmVjdGlvbiA9IC1ub3JtYWxpemUoIHNwb3RMaWdodERpcmVjdGlvbltpXSApO1xcbiB2ZWMzIGxpZ2h0Q29sb3IgPSBzcG90TGlnaHRDb2xvcltpXTtcXG4gZmxvYXQgcmFuZ2UgPSBzcG90TGlnaHRSYW5nZVtpXTtcXG4gZmxvYXQgYSA9IHNwb3RMaWdodFVtYnJhQW5nbGVDb3NpbmVbaV07XFxuIGZsb2F0IGIgPSBzcG90TGlnaHRQZW51bWJyYUFuZ2xlQ29zaW5lW2ldO1xcbiBmbG9hdCBmYWxsb2ZmRmFjdG9yID0gc3BvdExpZ2h0RmFsbG9mZkZhY3RvcltpXTtcXG4gdmVjMyBsaWdodERpcmVjdGlvbiA9IGxpZ2h0UG9zaXRpb24gLSB2X1dvcmxkUG9zaXRpb247XFxuIGZsb2F0IGRpc3QgPSBsZW5ndGgobGlnaHREaXJlY3Rpb24pO1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgcmFuZ2UpO1xcbiBsaWdodERpcmVjdGlvbiAvPSBkaXN0O1xcbiBmbG9hdCBjID0gZG90KHNwb3RMaWdodERpcmVjdGlvbiwgbGlnaHREaXJlY3Rpb24pO1xcbiBmbG9hdCBmYWxsb2ZmO1xcbiBmYWxsb2ZmID0gY2xhbXAoKGMgLSBhKSAvKCBiIC0gYSksIDAuMCwgMS4wKTtcXG4gZmFsbG9mZiA9IHBvdyhmYWxsb2ZmLCBmYWxsb2ZmRmFjdG9yKTtcXG4gZmxvYXQgbmRsID0gZG90KHZfTm9ybWFsLCBsaWdodERpcmVjdGlvbik7XFxuIG5kbCA9IGNsYW1wKG5kbCwgMC4wLCAxLjApO1xcbiBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiNpZiBkZWZpbmVkKFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZiggc2hhZG93RW5hYmxlZCApXFxuIHtcXG4gc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzU3BvdFtpXTtcXG4gfVxcbiNlbmRpZlxcbiBkaWZmdXNlQ29sb3IgKz0gbGlnaHRDb2xvciAqIG5kbCAqIGF0dGVudWF0aW9uICogKDEuMC1mYWxsb2ZmKSAqIHNoYWRvd0NvbnRyaWI7XFxuIH1cXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yLnJnYiAqPSBkaWZmdXNlQ29sb3I7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgKz0gZW1pc3Npb247XFxuIGlmKGxpbmVXaWR0aCA+IDAuKVxcbiB7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoZ2xfRnJhZ0NvbG9yLnJnYiwgbGluZUNvbG9yLnJnYiwgKDEuMCAtIGVkZ2VGYWN0b3IobGluZVdpZHRoKSkgKiBsaW5lQ29sb3IuYSk7XFxuIH1cXG4jaWZkZWYgQUxQSEFfVEVTVFxcbiBpZiAoZ2xfRnJhZ0NvbG9yLmEgPCBhbHBoYUN1dG9mZikge1xcbiBkaXNjYXJkO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIFRPTkVNQVBQSU5HXFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBBQ0VTVG9uZU1hcHBpbmcoZ2xfRnJhZ0NvbG9yLnJnYik7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfRU5DT0RFXFxuIGdsX0ZyYWdDb2xvciA9IGxpbmVhclRvc1JHQihnbF9GcmFnQ29sb3IpO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoZ2xfRnJhZ0NvbG9yKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS53aXJlZnJhbWUudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzMgYmFyeWNlbnRyaWM7XFxuQGltcG9ydCBjbGF5LmNodW5rLnNraW5uaW5nX2hlYWRlclxcbnZhcnlpbmcgdmVjMyB2X0JhcnljZW50cmljO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCApO1xcbiB2X0JhcnljZW50cmljID0gYmFyeWNlbnRyaWM7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkud2lyZWZyYW1lLmZyYWdtZW50XFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzAuMCwgMC4wLCAwLjBdO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGEgOiAxLjA7XFxudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGggOiAxLjA7XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuQGltcG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG52b2lkIG1haW4oKVxcbntcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGNvbG9yO1xcbiBnbF9GcmFnQ29sb3IuYSA9ICgxLjAtZWRnZUZhY3RvcihsaW5lV2lkdGgpKSAqIGFscGhhO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LnNreWJveC52ZXJ0ZXhcXG4jZGVmaW5lIFNIQURFUl9OQU1FIHNreWJveFxcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudm9pZCBtYWluKClcXG57XFxuIHZfV29ybGRQb3NpdGlvbiA9ICh3b3JsZCAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5za3lib3guZnJhZ21lbnRcXG4jZGVmaW5lIFBJIDMuMTQxNTkyNlxcbnVuaWZvcm0gbWF0NCB2aWV3SW52ZXJzZSA6IFZJRVdJTlZFUlNFO1xcbiNpZmRlZiBFUVVJUkVDVEFOR1VMQVJcXG51bmlmb3JtIHNhbXBsZXIyRCBlbnZpcm9ubWVudE1hcDtcXG4jZWxzZVxcbnVuaWZvcm0gc2FtcGxlckN1YmUgZW52aXJvbm1lbnRNYXA7XFxuI2VuZGlmXFxudW5pZm9ybSBmbG9hdCBsb2Q6IDAuMDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkudXRpbC5zcmdiXFxuQGltcG9ydCBjbGF5LnV0aWwuQUNFU1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIGV5ZVBvcyA9IHZpZXdJbnZlcnNlWzNdLnh5ejtcXG4gdmVjMyBWID0gbm9ybWFsaXplKHZfV29ybGRQb3NpdGlvbiAtIGV5ZVBvcyk7XFxuI2lmZGVmIEVRVUlSRUNUQU5HVUxBUlxcbiBmbG9hdCBwaGkgPSBhY29zKFYueSk7XFxuIGZsb2F0IHRoZXRhID0gYXRhbigtVi54LCBWLnopICsgUEkgKiAwLjU7XFxuIHZlYzIgdXYgPSB2ZWMyKHRoZXRhIC8gMi4wIC8gUEksIHBoaSAvIFBJKTtcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlMkQoZW52aXJvbm1lbnRNYXAsIGZyYWN0KHV2KSkpO1xcbiNlbHNlXFxuICNpZiBkZWZpbmVkKExPRCkgfHwgZGVmaW5lZChTVVBQT1JUX1RFWFRVUkVfTE9EKVxcbiB2ZWM0IHRleGVsID0gZGVjb2RlSERSKHRleHR1cmVDdWJlTG9kRVhUKGVudmlyb25tZW50TWFwLCBWLCBsb2QpKTtcXG4gI2Vsc2VcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZShlbnZpcm9ubWVudE1hcCwgVikpO1xcbiAjZW5kaWZcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9ERUNPREVcXG4gdGV4ZWwgPSBzUkdCVG9MaW5lYXIodGV4ZWwpO1xcbiNlbmRpZlxcbiNpZmRlZiBUT05FTUFQUElOR1xcbiB0ZXhlbC5yZ2IgPSBBQ0VTVG9uZU1hcHBpbmcodGV4ZWwucmdiKTtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9FTkNPREVcXG4gdGV4ZWwgPSBsaW5lYXJUb3NSR0IodGV4ZWwpO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNCh0ZXhlbC5yZ2IsIDEuMCkpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBsaWdodEVzc2wgZnJvbSAnLi9zb3VyY2UvaGVhZGVyL2xpZ2h0JztcclxuaW1wb3J0IHV0aWxFc3NsIGZyb20gJy4vc291cmNlL3V0aWwuZ2xzbC5qcyc7XHJcblxyXG5pbXBvcnQgYmFzaWNFc3NsIGZyb20gJy4vc291cmNlL2Jhc2ljLmdsc2wuanMnO1xyXG5pbXBvcnQgbGFtYmVydEVzc2wgZnJvbSAnLi9zb3VyY2UvbGFtYmVydC5nbHNsLmpzJztcclxuaW1wb3J0IHN0YW5kYXJkRXNzbCBmcm9tICcuL3NvdXJjZS9zdGFuZGFyZC5nbHNsLmpzJztcclxuaW1wb3J0IHdpcmVmcmFtZUVzc2wgZnJvbSAnLi9zb3VyY2Uvd2lyZWZyYW1lLmdsc2wuanMnO1xyXG5pbXBvcnQgc2t5Ym94RXNzbCBmcm9tICcuL3NvdXJjZS9za3lib3guZ2xzbC5qcyc7XHJcbmltcG9ydCBwcmV6RXNzbCBmcm9tICcuL3NvdXJjZS9wcmV6Lmdsc2wuanMnO1xyXG5cclxuaW1wb3J0IGxpYnJhcnkgZnJvbSAnLi9saWJyYXJ5JztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5cclxuXHJcblNoYWRlclsnaW1wb3J0J10obGlnaHRFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXSh1dGlsRXNzbCk7XHJcblxyXG4vLyBTb21lIGJ1aWxkIGluIHNoYWRlcnNcclxuU2hhZGVyWydpbXBvcnQnXShiYXNpY0Vzc2wpO1xyXG5TaGFkZXJbJ2ltcG9ydCddKGxhbWJlcnRFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXShzdGFuZGFyZEVzc2wpO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHdpcmVmcmFtZUVzc2wpO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHNreWJveEVzc2wpO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHByZXpFc3NsKTtcclxuXHJcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuYmFzaWMnLCBTaGFkZXIuc291cmNlKCdjbGF5LmJhc2ljLnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LmJhc2ljLmZyYWdtZW50JykpO1xyXG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LmxhbWJlcnQnLCBTaGFkZXIuc291cmNlKCdjbGF5LmxhbWJlcnQudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkubGFtYmVydC5mcmFnbWVudCcpKTtcclxubGlicmFyeS50ZW1wbGF0ZSgnY2xheS53aXJlZnJhbWUnLCBTaGFkZXIuc291cmNlKCdjbGF5LndpcmVmcmFtZS52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS53aXJlZnJhbWUuZnJhZ21lbnQnKSk7XHJcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuc2t5Ym94JywgU2hhZGVyLnNvdXJjZSgnY2xheS5za3lib3gudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkuc2t5Ym94LmZyYWdtZW50JykpO1xyXG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LnByZXonLCBTaGFkZXIuc291cmNlKCdjbGF5LnByZXoudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucHJlei5mcmFnbWVudCcpKTtcclxubGlicmFyeS50ZW1wbGF0ZSgnY2xheS5zdGFuZGFyZCcsIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmQudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmQuZnJhZ21lbnQnKSk7XHJcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuc3RhbmRhcmRNUicsIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmRNUi52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZE1SLmZyYWdtZW50JykpO1xyXG5cclxuLy8gVE9ETyBNdXN0IGV4cG9ydCBhIG1vZHVsZSBhbmQgYmUgdXNlZCBpbiB0aGUgb3RoZXIgbW9kdWxlcy4gT3IgaXQgd2lsbCBiZSB0cmVlIHNoYWtlZFxyXG5leHBvcnQgZGVmYXVsdCBsaWJyYXJ5OyIsIi8qKlxyXG4gKiBnbFRGIExvYWRlclxyXG4gKiBTcGVjaWZpY2F0aW9uIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi9ibG9iL21hc3Rlci9zcGVjaWZpY2F0aW9uL1JFQURNRS5tZFxyXG4gKlxyXG4gKiBUT0RPIE1vcnBoIHRhcmdldHNcclxuICovXHJcbmltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4uL2NvcmUvdXRpbCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5cclxuaW1wb3J0IFNjZW5lIGZyb20gJy4uL1NjZW5lJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IFN0YW5kYXJkTWF0ZXJpYWwgZnJvbSAnLi4vU3RhbmRhcmRNYXRlcmlhbCc7XHJcbmltcG9ydCBNZXNoIGZyb20gJy4uL01lc2gnO1xyXG5pbXBvcnQgTm9kZSBmcm9tICcuLi9Ob2RlJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcclxuaW1wb3J0IHNoYWRlckxpYnJhcnkgZnJvbSAnLi4vc2hhZGVyL2xpYnJhcnknO1xyXG5pbXBvcnQgU2tlbGV0b24gZnJvbSAnLi4vU2tlbGV0b24nO1xyXG5pbXBvcnQgSm9pbnQgZnJvbSAnLi4vSm9pbnQnO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IE9ydGhvZ3JhcGhpY0NhbWVyYSBmcm9tICcuLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcblxyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcblxyXG5pbXBvcnQgVHJhY2tDbGlwIGZyb20gJy4uL2FuaW1hdGlvbi9UcmFja0NsaXAnO1xyXG5pbXBvcnQgU2FtcGxlclRyYWNrIGZyb20gJy4uL2FuaW1hdGlvbi9TYW1wbGVyVHJhY2snO1xyXG5cclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuXHJcbi8vIEltcG9ydCBidWlsdGluIHNoYWRlclxyXG5pbXBvcnQgJy4uL3NoYWRlci9idWlsdGluJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5cclxudmFyIHNlbWFudGljQXR0cmlidXRlTWFwID0ge1xyXG4gICAgJ05PUk1BTCc6ICdub3JtYWwnLFxyXG4gICAgJ1BPU0lUSU9OJzogJ3Bvc2l0aW9uJyxcclxuICAgICdURVhDT09SRF8wJzogJ3RleGNvb3JkMCcsXHJcbiAgICAnVEVYQ09PUkRfMSc6ICd0ZXhjb29yZDEnLFxyXG4gICAgJ1dFSUdIVFNfMCc6ICd3ZWlnaHQnLFxyXG4gICAgJ0pPSU5UU18wJzogJ2pvaW50JyxcclxuICAgICdDT0xPUl8wJzogJ2NvbG9yJ1xyXG59O1xyXG5cclxudmFyIEFSUkFZX0NUT1JfTUFQID0ge1xyXG4gICAgNTEyMDogdmVuZG9yLkludDhBcnJheSxcclxuICAgIDUxMjE6IHZlbmRvci5VaW50OEFycmF5LFxyXG4gICAgNTEyMjogdmVuZG9yLkludDE2QXJyYXksXHJcbiAgICA1MTIzOiB2ZW5kb3IuVWludDE2QXJyYXksXHJcbiAgICA1MTI1OiB2ZW5kb3IuVWludDMyQXJyYXksXHJcbiAgICA1MTI2OiB2ZW5kb3IuRmxvYXQzMkFycmF5XHJcbn07XHJcbnZhciBTSVpFX01BUCA9IHtcclxuICAgIFNDQUxBUjogMSxcclxuICAgIFZFQzI6IDIsXHJcbiAgICBWRUMzOiAzLFxyXG4gICAgVkVDNDogNCxcclxuICAgIE1BVDI6IDQsXHJcbiAgICBNQVQzOiA5LFxyXG4gICAgTUFUNDogMTZcclxufTtcclxuXHJcbmZ1bmN0aW9uIGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIGFjY2Vzc29ySWR4LCBpc0luZGljZXMpIHtcclxuICAgIHZhciBhY2Nlc3NvckluZm8gPSBqc29uLmFjY2Vzc29yc1thY2Nlc3NvcklkeF07XHJcblxyXG4gICAgdmFyIGJ1ZmZlciA9IGxpYi5idWZmZXJWaWV3c1thY2Nlc3NvckluZm8uYnVmZmVyVmlld107XHJcbiAgICB2YXIgYnl0ZU9mZnNldCA9IGFjY2Vzc29ySW5mby5ieXRlT2Zmc2V0IHx8IDA7XHJcbiAgICB2YXIgQXJyYXlDdG9yID0gQVJSQVlfQ1RPUl9NQVBbYWNjZXNzb3JJbmZvLmNvbXBvbmVudFR5cGVdIHx8IHZlbmRvci5GbG9hdDMyQXJyYXk7XHJcblxyXG4gICAgdmFyIHNpemUgPSBTSVpFX01BUFthY2Nlc3NvckluZm8udHlwZV07XHJcbiAgICBpZiAoc2l6ZSA9PSBudWxsICYmIGlzSW5kaWNlcykge1xyXG4gICAgICAgIHNpemUgPSAxO1xyXG4gICAgfVxyXG4gICAgdmFyIGFyciA9IG5ldyBBcnJheUN0b3IoYnVmZmVyLCBieXRlT2Zmc2V0LCBzaXplICogYWNjZXNzb3JJbmZvLmNvdW50KTtcclxuXHJcbiAgICB2YXIgcXVhbnRpemVFeHRlbnNpb24gPSBhY2Nlc3NvckluZm8uZXh0ZW5zaW9ucyAmJiBhY2Nlc3NvckluZm8uZXh0ZW5zaW9uc1snV0VCM0RfcXVhbnRpemVkX2F0dHJpYnV0ZXMnXTtcclxuICAgIGlmIChxdWFudGl6ZUV4dGVuc2lvbikge1xyXG4gICAgICAgIHZhciBkZWNvZGVkQXJyID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoc2l6ZSAqIGFjY2Vzc29ySW5mby5jb3VudCk7XHJcbiAgICAgICAgdmFyIGRlY29kZU1hdHJpeCA9IHF1YW50aXplRXh0ZW5zaW9uLmRlY29kZU1hdHJpeDtcclxuICAgICAgICB2YXIgZGVjb2RlT2Zmc2V0O1xyXG4gICAgICAgIHZhciBkZWNvZGVTY2FsZTtcclxuICAgICAgICB2YXIgZGVjb2RlT2Zmc2V0ID0gbmV3IEFycmF5KHNpemUpO1xyXG4gICAgICAgIHZhciBkZWNvZGVTY2FsZSA9IG5ldyBBcnJheShzaXplKTtcclxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHNpemU7IGsrKykge1xyXG4gICAgICAgICAgICBkZWNvZGVPZmZzZXRba10gPSBkZWNvZGVNYXRyaXhbc2l6ZSAqIChzaXplICsgMSkgKyBrXTtcclxuICAgICAgICAgICAgZGVjb2RlU2NhbGVba10gPSBkZWNvZGVNYXRyaXhbayAqIChzaXplICsgMSkgKyBrXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY2Nlc3NvckluZm8uY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHNpemU7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgZGVjb2RlZEFycltpICogc2l6ZSArIGtdID0gYXJyW2kgKiBzaXplICsga10gKiBkZWNvZGVTY2FsZVtrXSArIGRlY29kZU9mZnNldFtrXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXJyID0gZGVjb2RlZEFycjtcclxuICAgIH1cclxuICAgIHJldHVybiBhcnI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJhc2U2NFRvQmluYXJ5KGlucHV0LCBjaGFyU3RhcnQpIHtcclxuICAgIHZhciBjaGFycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcclxuICAgIHZhciBsb29rdXAgPSBuZXcgVWludDhBcnJheSgxMzApO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxvb2t1cFtjaGFycy5jaGFyQ29kZUF0KGkpXSA9IGk7XHJcbiAgICB9XHJcbiAgICAvLyBJZ25vcmVcclxuICAgIHZhciBsZW4gPSBpbnB1dC5sZW5ndGggLSBjaGFyU3RhcnQ7XHJcbiAgICBpZiAoaW5wdXQuY2hhckF0KGxlbiAtIDEpID09PSAnPScpIHsgbGVuLS07IH1cclxuICAgIGlmIChpbnB1dC5jaGFyQXQobGVuIC0gMSkgPT09ICc9JykgeyBsZW4tLTsgfVxyXG5cclxuICAgIHZhciB1YXJyYXkgPSBuZXcgVWludDhBcnJheSgobGVuIC8gNCkgKiAzKTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IGNoYXJTdGFydDsgaSA8IHVhcnJheS5sZW5ndGg7KSB7XHJcbiAgICAgICAgdmFyIGMxID0gbG9va3VwW2lucHV0LmNoYXJDb2RlQXQoaisrKV07XHJcbiAgICAgICAgdmFyIGMyID0gbG9va3VwW2lucHV0LmNoYXJDb2RlQXQoaisrKV07XHJcbiAgICAgICAgdmFyIGMzID0gbG9va3VwW2lucHV0LmNoYXJDb2RlQXQoaisrKV07XHJcbiAgICAgICAgdmFyIGM0ID0gbG9va3VwW2lucHV0LmNoYXJDb2RlQXQoaisrKV07XHJcblxyXG4gICAgICAgIHVhcnJheVtpKytdID0gKGMxIDw8IDIpIHwgKGMyID4+IDQpO1xyXG4gICAgICAgIHVhcnJheVtpKytdID0gKChjMiAmIDE1KSA8PCA0KSB8IChjMyA+PiAyKTtcclxuICAgICAgICB1YXJyYXlbaSsrXSA9ICgoYzMgJiAzKSA8PCA2KSB8IGM0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1YXJyYXkuYnVmZmVyO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IGNsYXkubG9hZGVyLkdMVEYuUmVzdWx0XHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBqc29uXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICogQHByb3BlcnR5IHtjbGF5Lk5vZGV9IHJvb3ROb2RlXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5DYW1lcmFbXX0gY2FtZXJhc1xyXG4gKiBAcHJvcGVydHkge2NsYXkuVGV4dHVyZVtdfSB0ZXh0dXJlc1xyXG4gKiBAcHJvcGVydHkge2NsYXkuTWF0ZXJpYWxbXX0gbWF0ZXJpYWxzXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5Ta2VsZXRvbltdfSBza2VsZXRvbnNcclxuICogQHByb3BlcnR5IHtjbGF5Lk1lc2hbXX0gbWVzaGVzXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwW119IGNsaXBzXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5Ob2RlW119IG5vZGVzXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxvYWRlci5HTFRGXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgR0xURkxvYWRlciA9IEJhc2UuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5sb2FkZXIuR0xURiMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgcm9vdE5vZGU6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFJvb3QgcGF0aCBmb3IgdXJpIHBhcnNpbmcuXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICByb290UGF0aDogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvb3QgcGF0aCBmb3IgdGV4dHVyZSB1cmkgcGFyc2luZy4gRGVmYXVsdGx5IHVzZSB0aGUgcm9vdFBhdGhcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHRleHR1cmVSb290UGF0aDogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvb3QgcGF0aCBmb3IgYnVmZmVyIHVyaSBwYXJzaW5nLiBEZWZhdWx0bHkgdXNlIHRoZSByb290UGF0aFxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgYnVmZmVyUm9vdFBhdGg6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaGFkZXIgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSBtYXRlcmlhbHMuXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfGNsYXkuU2hhZGVyfVxyXG4gICAgICogQGRlZmF1bHQgJ2NsYXkuc3RhbmRhcmQnXHJcbiAgICAgKi9cclxuICAgIHNoYWRlcjogJ2NsYXkuc3RhbmRhcmQnLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdXNlIHtAbGluayBjbGF5LlN0YW5kYXJkTWF0ZXJpYWx9XHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB1c2VTdGFuZGFyZE1hdGVyaWFsOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGxvYWRpbmcgdGhlIGNhbWVyYXMuXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaW5jbHVkZUNhbWVyYTogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGxvYWRpbmcgdGhlIGFuaW1hdGlvbnMuXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaW5jbHVkZUFuaW1hdGlvbjogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogSWYgbG9hZGluZyB0aGUgbWVzaGVzXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaW5jbHVkZU1lc2g6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIElmIGxvYWRpbmcgdGhlIHRleHR1cmVzLlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGluY2x1ZGVUZXh0dXJlOiB0cnVlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgY3Jvc3NPcmlnaW46ICcnLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL2lzc3Vlcy82NzRcclxuICAgICAqL1xyXG4gICAgdGV4dHVyZUZsaXBZOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGNvbnZlcnQgdGV4dHVyZSB0byBwb3dlci1vZi10d29cclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICB0ZXh0dXJlQ29udmVydFRvUE9UOiBmYWxzZSxcclxuXHJcbiAgICBzaGFkZXJMaWJyYXJ5OiBudWxsXHJcbn0sXHJcbmZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghdGhpcy5zaGFkZXJMaWJyYXJ5KSB7XHJcbiAgICAgICAgdGhpcy5zaGFkZXJMaWJyYXJ5ID0gc2hhZGVyTGlicmFyeS5jcmVhdGVMaWJyYXJ5KCk7XHJcbiAgICB9XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5sb2FkZXIuR0xURi5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXHJcbiAgICAgKi9cclxuICAgIGxvYWQ6IGZ1bmN0aW9uICh1cmwpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGlzQmluYXJ5ID0gdXJsLmVuZHNXaXRoKCcuZ2xiJyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJvb3RQYXRoID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5yb290UGF0aCA9IHVybC5zbGljZSgwLCB1cmwubGFzdEluZGV4T2YoJy8nKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZW5kb3IucmVxdWVzdC5nZXQoe1xyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgb25wcm9ncmVzczogZnVuY3Rpb24gKHBlcmNlbnQsIGxvYWRlZCwgdG90YWwpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcigncHJvZ3Jlc3MnLCBwZXJjZW50LCBsb2FkZWQsIHRvdGFsKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25lcnJvcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignZXJyb3InLCBlKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBpc0JpbmFyeSA/ICdhcnJheWJ1ZmZlcicgOiAndGV4dCcsXHJcbiAgICAgICAgICAgIG9ubG9hZDogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0JpbmFyeSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VCaW5hcnkoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFyc2UgZ2xURiBiaW5hcnlcclxuICAgICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGJ1ZmZlclxyXG4gICAgICogQHJldHVybiB7Y2xheS5sb2FkZXIuR0xURi5SZXN1bHR9XHJcbiAgICAgKi9cclxuICAgIHBhcnNlQmluYXJ5OiBmdW5jdGlvbiAoYnVmZmVyKSB7XHJcbiAgICAgICAgdmFyIGhlYWRlciA9IG5ldyBVaW50MzJBcnJheShidWZmZXIsIDAsIDQpO1xyXG4gICAgICAgIGlmIChoZWFkZXJbMF0gIT09IDB4NDY1NDZDNjcpIHtcclxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsICdJbnZhbGlkIGdsVEYgYmluYXJ5IGZvcm1hdDogSW52YWxpZCBoZWFkZXInKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaGVhZGVyWzBdIDwgMikge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2Vycm9yJywgJ09ubHkgZ2xURjIuMCBpcyBzdXBwb3J0ZWQuJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIsIDEyKTtcclxuXHJcbiAgICAgICAgdmFyIGpzb247XHJcbiAgICAgICAgdmFyIGJ1ZmZlcnMgPSBbXTtcclxuICAgICAgICAvLyBSZWFkIGNodW5rc1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YVZpZXcuYnl0ZUxlbmd0aDspIHtcclxuICAgICAgICAgICAgdmFyIGNodW5rTGVuZ3RoID0gZGF0YVZpZXcuZ2V0VWludDMyKGksIHRydWUpO1xyXG4gICAgICAgICAgICBpICs9IDQ7XHJcbiAgICAgICAgICAgIHZhciBjaHVua1R5cGUgPSBkYXRhVmlldy5nZXRVaW50MzIoaSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGkgKz0gNDtcclxuXHJcbiAgICAgICAgICAgIC8vIGpzb25cclxuICAgICAgICAgICAgaWYgKGNodW5rVHlwZSA9PT0gMHg0RTRGNTM0QSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlciwgaSArIDEyLCBjaHVua0xlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPLCBmb3IgdGhlIGJyb3dzZXIgbm90IHN1cHBvcnQgVGV4dERlY29kZXIuXHJcbiAgICAgICAgICAgICAgICB2YXIgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0ciA9IGRlY29kZXIuZGVjb2RlKGFycik7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKHN0cik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCAnSlNPTiBQYXJzZSBlcnJvcjonICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY2h1bmtUeXBlID09PSAweDAwNEU0OTQyKSB7XHJcbiAgICAgICAgICAgICAgICBidWZmZXJzLnB1c2goYnVmZmVyLnNsaWNlKGkgKyAxMiwgaSArIDEyICsgY2h1bmtMZW5ndGgpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaSArPSBjaHVua0xlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFqc29uKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCAnSW52YWxpZCBnbFRGIGJpbmFyeSBmb3JtYXQ6IENhblxcJ3QgZmluZCBKU09OLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZShqc29uLCBidWZmZXJzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0ganNvblxyXG4gICAgICogQHBhcmFtIHtBcnJheUJ1ZmZlcltdfSBbYnVmZmVyXVxyXG4gICAgICogQHJldHVybiB7Y2xheS5sb2FkZXIuR0xURi5SZXN1bHR9XHJcbiAgICAgKi9cclxuICAgIHBhcnNlOiBmdW5jdGlvbiAoanNvbiwgYnVmZmVycykge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgdmFyIGxpYiA9IHtcclxuICAgICAgICAgICAganNvbjoganNvbixcclxuICAgICAgICAgICAgYnVmZmVyczogW10sXHJcbiAgICAgICAgICAgIGJ1ZmZlclZpZXdzOiBbXSxcclxuICAgICAgICAgICAgbWF0ZXJpYWxzOiBbXSxcclxuICAgICAgICAgICAgdGV4dHVyZXM6IFtdLFxyXG4gICAgICAgICAgICBtZXNoZXM6IFtdLFxyXG4gICAgICAgICAgICBqb2ludHM6IFtdLFxyXG4gICAgICAgICAgICBza2VsZXRvbnM6IFtdLFxyXG4gICAgICAgICAgICBjYW1lcmFzOiBbXSxcclxuICAgICAgICAgICAgbm9kZXM6IFtdLFxyXG4gICAgICAgICAgICBjbGlwczogW11cclxuICAgICAgICB9O1xyXG4gICAgICAgIC8vIE1vdW50IG9uIHRoZSByb290IG5vZGUgaWYgZ2l2ZW5cclxuICAgICAgICB2YXIgcm9vdE5vZGUgPSB0aGlzLnJvb3ROb2RlIHx8IG5ldyBTY2VuZSgpO1xyXG5cclxuICAgICAgICB2YXIgbG9hZGluZyA9IDA7XHJcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tMb2FkKCkge1xyXG4gICAgICAgICAgICBsb2FkaW5nLS07XHJcbiAgICAgICAgICAgIGlmIChsb2FkaW5nID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBhZnRlckxvYWRCdWZmZXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBhbHJlYWR5IGxvYWQgYnVmZmVyc1xyXG4gICAgICAgIGlmIChidWZmZXJzKSB7XHJcbiAgICAgICAgICAgIGxpYi5idWZmZXJzID0gYnVmZmVycy5zbGljZSgpO1xyXG4gICAgICAgICAgICBhZnRlckxvYWRCdWZmZXIodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBMb2FkIGJ1ZmZlcnNcclxuICAgICAgICAgICAgdXRpbC5lYWNoKGpzb24uYnVmZmVycywgZnVuY3Rpb24gKGJ1ZmZlckluZm8sIGlkeCkge1xyXG4gICAgICAgICAgICAgICAgbG9hZGluZysrO1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhdGggPSBidWZmZXJJbmZvLnVyaTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZWxmLl9sb2FkQnVmZmVycyhwYXRoLCBmdW5jdGlvbiAoYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGliLmJ1ZmZlcnNbaWR4XSA9IGJ1ZmZlcjtcclxuICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWQoKTtcclxuICAgICAgICAgICAgICAgIH0sIGNoZWNrTG9hZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZ2V0UmVzdWx0KCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAganNvbjoganNvbixcclxuICAgICAgICAgICAgICAgIHNjZW5lOiBzZWxmLnJvb3ROb2RlID8gbnVsbCA6IHJvb3ROb2RlLFxyXG4gICAgICAgICAgICAgICAgcm9vdE5vZGU6IHNlbGYucm9vdE5vZGUgPyByb290Tm9kZSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBjYW1lcmFzOiBsaWIuY2FtZXJhcyxcclxuICAgICAgICAgICAgICAgIHRleHR1cmVzOiBsaWIudGV4dHVyZXMsXHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbHM6IGxpYi5tYXRlcmlhbHMsXHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbnM6IGxpYi5za2VsZXRvbnMsXHJcbiAgICAgICAgICAgICAgICBtZXNoZXM6IGxpYi5pbnN0YW5jZWRNZXNoZXMsXHJcbiAgICAgICAgICAgICAgICBjbGlwczogbGliLmNsaXBzLFxyXG4gICAgICAgICAgICAgICAgbm9kZXM6IGxpYi5ub2Rlc1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gYWZ0ZXJMb2FkQnVmZmVyKGltbWVkaWF0ZWx5KSB7XHJcbiAgICAgICAgICAgIC8vIEJ1ZmZlciBub3QgbG9hZCBjb21wbGV0ZS5cclxuICAgICAgICAgICAgaWYgKGxpYi5idWZmZXJzLmxlbmd0aCAhPT0ganNvbi5idWZmZXJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdlcnJvcicsICdCdWZmZXIgbm90IGxvYWQgY29tcGxldGUuJyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAganNvbi5idWZmZXJWaWV3cy5mb3JFYWNoKGZ1bmN0aW9uIChidWZmZXJWaWV3SW5mbywgaWR4KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBQRU5ESU5HIFBlcmZvcm1hbmNlXHJcbiAgICAgICAgICAgICAgICBsaWIuYnVmZmVyVmlld3NbaWR4XSA9IGxpYi5idWZmZXJzW2J1ZmZlclZpZXdJbmZvLmJ1ZmZlcl1cclxuICAgICAgICAgICAgICAgICAgICAuc2xpY2UoYnVmZmVyVmlld0luZm8uYnl0ZU9mZnNldCB8fCAwLCAoYnVmZmVyVmlld0luZm8uYnl0ZU9mZnNldCB8fCAwKSArIChidWZmZXJWaWV3SW5mby5ieXRlTGVuZ3RoIHx8IDApKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxpYi5idWZmZXJzID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHNlbGYuaW5jbHVkZU1lc2gpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmluY2x1ZGVUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VUZXh0dXJlcyhqc29uLCBsaWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VNYXRlcmlhbHMoanNvbiwgbGliKTtcclxuICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlTWVzaGVzKGpzb24sIGxpYik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2VsZi5fcGFyc2VOb2Rlcyhqc29uLCBsaWIpO1xyXG5cclxuICAgICAgICAgICAgLy8gT25seSBzdXBwb3J0IG9uZSBzY2VuZS5cclxuICAgICAgICAgICAgaWYgKGpzb24uc2NlbmVzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2NlbmVJbmZvID0ganNvbi5zY2VuZXNbanNvbi5zY2VuZSB8fCAwXTsgLy8gRGVmYXVsdCB1c2UgdGhlIGZpcnN0IHNjZW5lLlxyXG4gICAgICAgICAgICAgICAgaWYgKHNjZW5lSW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NlbmVJbmZvLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gbGliLm5vZGVzW3NjZW5lSW5mby5ub2Rlc1tpXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3ROb2RlLmFkZChub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxmLmluY2x1ZGVNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZVNraW5zKGpzb24sIGxpYik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxmLmluY2x1ZGVBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlQW5pbWF0aW9ucyhqc29uLCBsaWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpbW1lZGlhdGVseSkge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdzdWNjZXNzJywgZ2V0UmVzdWx0KCkpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3N1Y2Nlc3MnLCBnZXRSZXN1bHQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBnZXRSZXN1bHQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCaW5hcnkgZmlsZSBwYXRoIHJlc29sdmVyLiBVc2VyIGNhbiBvdmVycmlkZSBpdFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcclxuICAgICAqL1xyXG4gICAgcmVzb2x2ZUJ1ZmZlclBhdGg6IGZ1bmN0aW9uIChwYXRoKSB7XHJcbiAgICAgICAgaWYgKHBhdGggJiYgcGF0aC5tYXRjaCgvXmRhdGE6KC4qPyliYXNlNjQsLykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhdGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcm9vdFBhdGggPSB0aGlzLmJ1ZmZlclJvb3RQYXRoO1xyXG4gICAgICAgIGlmIChyb290UGF0aCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJvb3RQYXRoID0gdGhpcy5yb290UGF0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHV0aWwucmVsYXRpdmUyYWJzb2x1dGUocGF0aCwgcm9vdFBhdGgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRleHR1cmUgZmlsZSBwYXRoIHJlc29sdmVyLiBVc2VyIGNhbiBvdmVycmlkZSBpdFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcclxuICAgICAqL1xyXG4gICAgcmVzb2x2ZVRleHR1cmVQYXRoOiBmdW5jdGlvbiAocGF0aCkge1xyXG4gICAgICAgIGlmIChwYXRoICYmIHBhdGgubWF0Y2goL15kYXRhOiguKj8pYmFzZTY0LC8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJvb3RQYXRoID0gdGhpcy50ZXh0dXJlUm9vdFBhdGg7XHJcbiAgICAgICAgaWYgKHJvb3RQYXRoID09IG51bGwpIHtcclxuICAgICAgICAgICAgcm9vdFBhdGggPSB0aGlzLnJvb3RQYXRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdXRpbC5yZWxhdGl2ZTJhYnNvbHV0ZShwYXRoLCByb290UGF0aCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnVmZmVyIGxvYWRlclxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9XHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbnN1Y2Nlc3NcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9uZXJyb3JcclxuICAgICAqL1xyXG4gICAgbG9hZEJ1ZmZlcjogZnVuY3Rpb24gKHBhdGgsIG9uc3VjY2Vzcywgb25lcnJvcikge1xyXG4gICAgICAgIHZlbmRvci5yZXF1ZXN0LmdldCh7XHJcbiAgICAgICAgICAgIHVybDogcGF0aCxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxyXG4gICAgICAgICAgICBvbmxvYWQ6IGZ1bmN0aW9uIChidWZmZXIpIHtcclxuICAgICAgICAgICAgICAgIG9uc3VjY2VzcyAmJiBvbnN1Y2Nlc3MoYnVmZmVyKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25lcnJvcjogZnVuY3Rpb24gKGJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgb25lcnJvciAmJiBvbmVycm9yKGJ1ZmZlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgX2dldFNoYWRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zaGFkZXIgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNoYWRlckxpYnJhcnkuZ2V0KHRoaXMuc2hhZGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5zaGFkZXIgaW5zdGFuY2VvZiBTaGFkZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hhZGVyO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2xvYWRCdWZmZXJzOiBmdW5jdGlvbiAocGF0aCwgb25zdWNjZXNzLCBvbmVycm9yKSB7XHJcbiAgICAgICAgdmFyIGJhc2U2NFByZWZpeCA9ICdkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsJztcclxuICAgICAgICB2YXIgc3RyU3RhcnQgPSBwYXRoLnN1YnN0cigwLCBiYXNlNjRQcmVmaXgubGVuZ3RoKTtcclxuICAgICAgICBpZiAoc3RyU3RhcnQgPT09IGJhc2U2NFByZWZpeCkge1xyXG4gICAgICAgICAgICBvbnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICBiYXNlNjRUb0JpbmFyeShwYXRoLCBiYXNlNjRQcmVmaXgubGVuZ3RoKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkQnVmZmVyKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlQnVmZmVyUGF0aChwYXRoKSxcclxuICAgICAgICAgICAgICAgIG9uc3VjY2VzcyxcclxuICAgICAgICAgICAgICAgIG9uZXJyb3JcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi9pc3N1ZXMvMTAwXHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvaXNzdWVzLzE5M1xyXG4gICAgX3BhcnNlU2tpbnM6IGZ1bmN0aW9uIChqc29uLCBsaWIpIHtcclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIHNrZWxldG9ucyBhbmQgam9pbnRzXHJcbiAgICAgICAgdmFyIGhhdmVJbnZCaW5kTWF0cmljZXMgPSBmYWxzZTtcclxuICAgICAgICB1dGlsLmVhY2goanNvbi5za2lucywgZnVuY3Rpb24gKHNraW5JbmZvLCBpZHgpIHtcclxuICAgICAgICAgICAgdmFyIHNrZWxldG9uID0gbmV3IFNrZWxldG9uKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHNraW5JbmZvLm5hbWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2tpbkluZm8uam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9kZUlkeCA9IHNraW5JbmZvLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBub2RlID0gbGliLm5vZGVzW25vZGVJZHhdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50ID0gbmV3IEpvaW50KHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBub2RlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBpbmRleDogc2tlbGV0b24uam9pbnRzLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbi5qb2ludHMucHVzaChqb2ludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2tlbGV0b24ucmVsYXRpdmVSb290Tm9kZSA9IGxpYi5ub2Rlc1tza2luSW5mby5za2VsZXRvbl0gfHwgdGhpcy5yb290Tm9kZTtcclxuICAgICAgICAgICAgaWYgKHNraW5JbmZvLmludmVyc2VCaW5kTWF0cmljZXMpIHtcclxuICAgICAgICAgICAgICAgIGhhdmVJbnZCaW5kTWF0cmljZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIElCTUluZm8gPSBqc29uLmFjY2Vzc29yc1tza2luSW5mby5pbnZlcnNlQmluZE1hdHJpY2VzXTtcclxuICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBsaWIuYnVmZmVyVmlld3NbSUJNSW5mby5idWZmZXJWaWV3XTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gSUJNSW5mby5ieXRlT2Zmc2V0IHx8IDA7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IElCTUluZm8uY291bnQgKiAxNjtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgc2l6ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2tlbGV0b24uc2V0Sm9pbnRNYXRyaWNlc0FycmF5KGFycmF5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNrZWxldG9uLnVwZGF0ZUpvaW50TWF0cmljZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsaWIuc2tlbGV0b25zW2lkeF0gPSBza2VsZXRvbjtcclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZW5hYmxlU2tpbm5pbmdGb3JNZXNoKG1lc2gsIHNrZWxldG9uLCBqb2ludEluZGljZXMpIHtcclxuICAgICAgICAgICAgbWVzaC5za2VsZXRvbiA9IHNrZWxldG9uO1xyXG4gICAgICAgICAgICBtZXNoLmpvaW50cyA9IGpvaW50SW5kaWNlcztcclxuXHJcbiAgICAgICAgICAgIGlmICghc2tlbGV0b24uYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgICAgIHNrZWxldG9uLnVwZGF0ZUpvaW50c0JvdW5kaW5nQm94ZXMobWVzaC5nZW9tZXRyeSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGdldEpvaW50SW5kZXgoam9pbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGpvaW50LmluZGV4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24ubm9kZXMsIGZ1bmN0aW9uIChub2RlSW5mbywgbm9kZUlkeCkge1xyXG4gICAgICAgICAgICBpZiAobm9kZUluZm8uc2tpbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2tpbklkeCA9IG5vZGVJbmZvLnNraW47XHJcbiAgICAgICAgICAgICAgICB2YXIgc2tlbGV0b24gPSBsaWIuc2tlbGV0b25zW3NraW5JZHhdO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBub2RlID0gbGliLm5vZGVzW25vZGVJZHhdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50SW5kaWNlcyA9IHNrZWxldG9uLmpvaW50cy5tYXAoZ2V0Sm9pbnRJbmRleCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIE1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVTa2lubmluZ0Zvck1lc2gobm9kZSwgc2tlbGV0b24sIGpvaW50SW5kaWNlcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBNZXNoIGhhdmUgbXVsdGlwbGUgcHJpbWl0aXZlc1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4oKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZVNraW5uaW5nRm9yTWVzaChjaGlsZHJlbltpXSwgc2tlbGV0b24sIGpvaW50SW5kaWNlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZVRleHR1cmVzOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24udGV4dHVyZXMsIGZ1bmN0aW9uICh0ZXh0dXJlSW5mbywgaWR4KXtcclxuICAgICAgICAgICAgLy8gc2FtcGxlcnMgaXMgb3B0aW9uYWxcclxuICAgICAgICAgICAgdmFyIHNhbXBsZXJJbmZvID0gKGpzb24uc2FtcGxlcnMgJiYganNvbi5zYW1wbGVyc1t0ZXh0dXJlSW5mby5zYW1wbGVyXSkgfHwge307XHJcbiAgICAgICAgICAgIHZhciBwYXJhbWV0ZXJzID0ge307XHJcbiAgICAgICAgICAgIFsnd3JhcFMnLCAnd3JhcFQnLCAnbWFnRmlsdGVyJywgJ21pbkZpbHRlciddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHNhbXBsZXJJbmZvW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW25hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB1dGlsLmRlZmF1bHRzKHBhcmFtZXRlcnMsIHtcclxuICAgICAgICAgICAgICAgIHdyYXBTOiBUZXh0dXJlLlJFUEVBVCxcclxuICAgICAgICAgICAgICAgIHdyYXBUOiBUZXh0dXJlLlJFUEVBVCxcclxuICAgICAgICAgICAgICAgIGZsaXBZOiB0aGlzLnRleHR1cmVGbGlwWSxcclxuICAgICAgICAgICAgICAgIGNvbnZlcnRUb1BPVDogdGhpcy50ZXh0dXJlQ29udmVydFRvUE9UXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRleHR1cmVJbmZvLnRhcmdldCB8fCBnbGVudW0uVEVYVFVSRV8yRDtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdCA9IHRleHR1cmVJbmZvLmZvcm1hdDtcclxuICAgICAgICAgICAgaWYgKGZvcm1hdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmZvcm1hdCA9IGZvcm1hdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gZ2xlbnVtLlRFWFRVUkVfMkQpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRChwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHZhciBpbWFnZUluZm8gPSBqc29uLmltYWdlc1t0ZXh0dXJlSW5mby5zb3VyY2VdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHVyaTtcclxuICAgICAgICAgICAgICAgIGlmIChpbWFnZUluZm8udXJpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJpID0gdGhpcy5yZXNvbHZlVGV4dHVyZVBhdGgoaW1hZ2VJbmZvLnVyaSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpbWFnZUluZm8uYnVmZmVyVmlldyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJpID0gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbbGliLmJ1ZmZlclZpZXdzW2ltYWdlSW5mby5idWZmZXJWaWV3XV0sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogaW1hZ2VJbmZvLm1pbWVUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHVyaSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHR1cmUubG9hZCh1cmksIHRoaXMuY3Jvc3NPcmlnaW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpYi50ZXh0dXJlc1tpZHhdID0gdGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfS0hSQ29tbW9uTWF0ZXJpYWxUb1N0YW5kYXJkOiBmdW5jdGlvbiAobWF0ZXJpYWxJbmZvLCBsaWIpIHtcclxuICAgICAgICB2YXIgdW5pZm9ybXMgPSB7fTtcclxuICAgICAgICB2YXIgY29tbW9uTWF0ZXJpYWxJbmZvID0gbWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnNbJ0tIUl9tYXRlcmlhbHNfY29tbW9uJ107XHJcbiAgICAgICAgdW5pZm9ybXMgPSBjb21tb25NYXRlcmlhbEluZm8udmFsdWVzIHx8IHt9O1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHVuaWZvcm1zLmRpZmZ1c2UgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIHVuaWZvcm1zLmRpZmZ1c2UgPSBsaWIudGV4dHVyZXNbdW5pZm9ybXMuZGlmZnVzZV0gfHwgbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiB1bmlmb3Jtcy5lbWlzc2lvbiA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgdW5pZm9ybXMuZW1pc3Npb24gPSBsaWIudGV4dHVyZXNbdW5pZm9ybXMuZW1pc3Npb25dIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZW5hYmxlZFRleHR1cmVzID0gW107XHJcbiAgICAgICAgaWYgKHVuaWZvcm1zWydkaWZmdXNlJ10gaW5zdGFuY2VvZiBUZXh0dXJlMkQpIHtcclxuICAgICAgICAgICAgZW5hYmxlZFRleHR1cmVzLnB1c2goJ2RpZmZ1c2VNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdub3JtYWxNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHVuaWZvcm1zWydlbWlzc2lvbiddIGluc3RhbmNlb2YgVGV4dHVyZTJEKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdlbWlzc2l2ZU1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIGlzU3RhbmRhcmRNYXRlcmlhbCA9IHRoaXMudXNlU3RhbmRhcmRNYXRlcmlhbDtcclxuICAgICAgICBpZiAoaXNTdGFuZGFyZE1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsID0gbmV3IFN0YW5kYXJkTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbWF0ZXJpYWxJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBkb3VibGVTaWRlZDogbWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbWF0ZXJpYWxJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBzaGFkZXI6IHRoaXMuX2dldFNoYWRlcigpXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfUk9VR0hORVNTJyk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX01FVEFMTkVTUycpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZCkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHVuaWZvcm1zLnRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlcHRoTWFzayA9IGZhbHNlO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZXB0aFRlc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC50cmFuc3BhcmVudCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGlmZnVzZVByb3AgPSB1bmlmb3Jtc1snZGlmZnVzZSddO1xyXG4gICAgICAgIGlmIChkaWZmdXNlUHJvcCkge1xyXG4gICAgICAgICAgICAvLyBDb2xvclxyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkaWZmdXNlUHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGRpZmZ1c2VQcm9wID0gZGlmZnVzZVByb3Auc2xpY2UoMCwgMyk7XHJcbiAgICAgICAgICAgICAgICBpc1N0YW5kYXJkTWF0ZXJpYWwgPyAobWF0ZXJpYWwuY29sb3IgPSBkaWZmdXNlUHJvcClcclxuICAgICAgICAgICAgICAgICAgICA6IG1hdGVyaWFsLnNldCgnY29sb3InLCBkaWZmdXNlUHJvcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7IC8vIFRleHR1cmVcclxuICAgICAgICAgICAgICAgIGlzU3RhbmRhcmRNYXRlcmlhbCA/IChtYXRlcmlhbC5kaWZmdXNlTWFwID0gZGlmZnVzZVByb3ApXHJcbiAgICAgICAgICAgICAgICAgICAgOiBtYXRlcmlhbC5zZXQoJ2RpZmZ1c2VNYXAnLCBkaWZmdXNlUHJvcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGVtaXNzaW9uUHJvcCA9IHVuaWZvcm1zWydlbWlzc2lvbiddO1xyXG4gICAgICAgIGlmIChlbWlzc2lvblByb3AgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBDb2xvclxyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbWlzc2lvblByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBlbWlzc2lvblByb3AgPSBlbWlzc2lvblByb3Auc2xpY2UoMCwgMyk7XHJcbiAgICAgICAgICAgICAgICBpc1N0YW5kYXJkTWF0ZXJpYWwgPyAobWF0ZXJpYWwuZW1pc3Npb24gPSBlbWlzc2lvblByb3ApXHJcbiAgICAgICAgICAgICAgICAgICAgOiBtYXRlcmlhbC5zZXQoJ2VtaXNzaW9uJywgZW1pc3Npb25Qcm9wKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHsgLy8gVGV4dHVyZVxyXG4gICAgICAgICAgICAgICAgaXNTdGFuZGFyZE1hdGVyaWFsID8gKG1hdGVyaWFsLmVtaXNzaXZlTWFwID0gZW1pc3Npb25Qcm9wKVxyXG4gICAgICAgICAgICAgICAgICAgIDogbWF0ZXJpYWwuc2V0KCdlbWlzc2l2ZU1hcCcsIGVtaXNzaW9uUHJvcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyB0ZXhDb29yZFxyXG4gICAgICAgICAgICB2YXIgbm9ybWFsVGV4dHVyZUluZGV4ID0gbWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUuaW5kZXg7XHJcbiAgICAgICAgICAgIGlmIChpc1N0YW5kYXJkTWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLm5vcm1hbE1hcCA9IGxpYi50ZXh0dXJlc1tub3JtYWxUZXh0dXJlSW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ25vcm1hbE1hcCcsIGxpYi50ZXh0dXJlc1tub3JtYWxUZXh0dXJlSW5kZXhdIHx8IG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1bmlmb3Jtc1snc2hpbmluZXNzJ10gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB2YXIgZ2xvc3NpbmVzcyA9IE1hdGgubG9nKHVuaWZvcm1zWydzaGluaW5lc3MnXSkgLyBNYXRoLmxvZyg4MTkyKTtcclxuICAgICAgICAgICAgLy8gVW5pZm9ybSBnbG9zc2luZXNzXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnZ2xvc3NpbmVzcycsIGdsb3NzaW5lc3MpO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ3JvdWdobmVzcycsIDEgLSBnbG9zc2luZXNzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnZ2xvc3NpbmVzcycsIDAuMyk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgncm91Z2huZXNzJywgMC4zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHVuaWZvcm1zWydzcGVjdWxhciddICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdzcGVjdWxhckNvbG9yJywgdW5pZm9ybXNbJ3NwZWN1bGFyJ10uc2xpY2UoMCwgMykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodW5pZm9ybXNbJ3RyYW5zcGFyZW5jeSddICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdhbHBoYScsIHVuaWZvcm1zWyd0cmFuc3BhcmVuY3knXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWw7XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYnJNZXRhbGxpY1JvdWdobmVzc1RvU3RhbmRhcmQ6IGZ1bmN0aW9uIChtYXRlcmlhbEluZm8sIG1ldGFsbGljUm91Z2huZXNzTWF0SW5mbywgbGliKSB7XHJcbiAgICAgICAgdmFyIGFscGhhVGVzdCA9IG1hdGVyaWFsSW5mby5hbHBoYU1vZGUgPT09ICdNQVNLJztcclxuXHJcbiAgICAgICAgdmFyIGlzU3RhbmRhcmRNYXRlcmlhbCA9IHRoaXMudXNlU3RhbmRhcmRNYXRlcmlhbDtcclxuICAgICAgICB2YXIgbWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIGRpZmZ1c2VNYXAsIHJvdWdobmVzc01hcCwgbWV0YWxuZXNzTWFwLCBub3JtYWxNYXAsIGVtaXNzaXZlTWFwLCBvY2NsdXNpb25NYXA7XHJcbiAgICAgICAgdmFyIGVuYWJsZWRUZXh0dXJlcyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc2NhbGFyIG11bHRpcGxpZXIgYXBwbGllZCB0byBlYWNoIG5vcm1hbCB2ZWN0b3Igb2YgdGhlIG5vcm1hbCB0ZXh0dXJlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFhYWCBUaGlzIHZhbHVlIGlzIGlnbm9yZWQgaWYgYG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlYCBpcyBub3Qgc3BlY2lmaWVkLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZhciBub3JtYWxTY2FsZSA9IDEuMDtcclxuXHJcbiAgICAgICAgLy8gVE9ETyB0ZXhDb29yZFxyXG4gICAgICAgIGlmIChtZXRhbGxpY1JvdWdobmVzc01hdEluZm8uYmFzZUNvbG9yVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwID0gbGliLnRleHR1cmVzW21ldGFsbGljUm91Z2huZXNzTWF0SW5mby5iYXNlQ29sb3JUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdkaWZmdXNlTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtZXRhbGxpY1JvdWdobmVzc01hdEluZm8ubWV0YWxsaWNSb3VnaG5lc3NUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIHJvdWdobmVzc01hcCA9IG1ldGFsbmVzc01hcCA9IGxpYi50ZXh0dXJlc1ttZXRhbGxpY1JvdWdobmVzc01hdEluZm8ubWV0YWxsaWNSb3VnaG5lc3NUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICByb3VnaG5lc3NNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ21ldGFsbmVzc01hcCcsICdyb3VnaG5lc3NNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlKSB7XHJcblxyXG4gICAgICAgICAgICBub3JtYWxNYXAgPSBsaWIudGV4dHVyZXNbbWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIG5vcm1hbE1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnbm9ybWFsTWFwJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlLnNjYWxlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsU2NhbGUgPSBtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZS5zY2FsZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5lbWlzc2l2ZVRleHR1cmUpIHtcclxuICAgICAgICAgICAgZW1pc3NpdmVNYXAgPSBsaWIudGV4dHVyZXNbbWF0ZXJpYWxJbmZvLmVtaXNzaXZlVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgZW1pc3NpdmVNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ2VtaXNzaXZlTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ub2NjbHVzaW9uVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBvY2NsdXNpb25NYXAgPSBsaWIudGV4dHVyZXNbbWF0ZXJpYWxJbmZvLm9jY2x1c2lvblRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIG9jY2x1c2lvbk1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnb2NjbHVzaW9uTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBiYXNlQ29sb3IgPSBtZXRhbGxpY1JvdWdobmVzc01hdEluZm8uYmFzZUNvbG9yRmFjdG9yIHx8IFsxLCAxLCAxLCAxXTtcclxuXHJcbiAgICAgICAgdmFyIGNvbW1vblByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICAgIGRpZmZ1c2VNYXA6IGRpZmZ1c2VNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgcm91Z2huZXNzTWFwOiByb3VnaG5lc3NNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgbWV0YWxuZXNzTWFwOiBtZXRhbG5lc3NNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgbm9ybWFsTWFwOiBub3JtYWxNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgb2NjbHVzaW9uTWFwOiBvY2NsdXNpb25NYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgZW1pc3NpdmVNYXA6IGVtaXNzaXZlTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGNvbG9yOiBiYXNlQ29sb3Iuc2xpY2UoMCwgMyksXHJcbiAgICAgICAgICAgIGFscGhhOiBiYXNlQ29sb3JbM10sXHJcbiAgICAgICAgICAgIG1ldGFsbmVzczogbWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLm1ldGFsbGljRmFjdG9yIHx8IDAsXHJcbiAgICAgICAgICAgIHJvdWdobmVzczogbWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLnJvdWdobmVzc0ZhY3RvciB8fCAwLFxyXG4gICAgICAgICAgICBlbWlzc2lvbjogbWF0ZXJpYWxJbmZvLmVtaXNzaXZlRmFjdG9yIHx8IFswLCAwLCAwXSxcclxuICAgICAgICAgICAgZW1pc3Npb25JbnRlbnNpdHk6IDEsXHJcbiAgICAgICAgICAgIGFscGhhQ3V0b2ZmOiBtYXRlcmlhbEluZm8uYWxwaGFDdXRvZmYgfHwgMCxcclxuICAgICAgICAgICAgbm9ybWFsU2NhbGU6IG5vcm1hbFNjYWxlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoY29tbW9uUHJvcGVydGllcy5yb3VnaG5lc3NNYXApIHtcclxuICAgICAgICAgICAgLy8gSW4gZ2xURiBtZXRhbGxpY0ZhY3RvciB3aWxsIGRvIG11bHRpcGx5LCB3aGljaCBpcyBkaWZmZXJlbnQgZnJvbSBTdGFuZGFyZE1hdGVyaWFsLlxyXG4gICAgICAgICAgICAvLyBTbyBzaW1wbHkgaWdub3JlIGl0XHJcbiAgICAgICAgICAgIGNvbW1vblByb3BlcnRpZXMubWV0YWxuZXNzID0gMC41O1xyXG4gICAgICAgICAgICBjb21tb25Qcm9wZXJ0aWVzLnJvdWdobmVzcyA9IDAuNTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RhbmRhcmRNYXRlcmlhbCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBTdGFuZGFyZE1hdGVyaWFsKHV0aWwuZXh0ZW5kKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgYWxwaGFUZXN0OiBhbHBoYVRlc3QsXHJcbiAgICAgICAgICAgICAgICBkb3VibGVTaWRlZDogbWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkLFxyXG4gICAgICAgICAgICAgICAgLy8gRyBjaGFubmVsXHJcbiAgICAgICAgICAgICAgICByb3VnaG5lc3NDaGFubmVsOiAxLFxyXG4gICAgICAgICAgICAgICAgLy8gQiBDaGFubmVsXHJcbiAgICAgICAgICAgICAgICBtZXRhbG5lc3NDaGFubmVsOiAyXHJcbiAgICAgICAgICAgIH0sIGNvbW1vblByb3BlcnRpZXMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBtYXRlcmlhbEluZm8ubmFtZSxcclxuICAgICAgICAgICAgICAgIHNoYWRlcjogdGhpcy5fZ2V0U2hhZGVyKClcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9ST1VHSE5FU1MnKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfTUVUQUxORVNTJyk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUk9VR0hORVNTX0NIQU5ORUwnLCAxKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdNRVRBTE5FU1NfQ0hBTk5FTCcsIDIpO1xyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdESUZGVVNFTUFQX0FMUEhBX0FMUEhBJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYWxwaGFUZXN0KSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ0RPVUJMRV9TSURFRCcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoY29tbW9uUHJvcGVydGllcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmFscGhhTW9kZSA9PT0gJ0JMRU5EJykge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZXB0aE1hc2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGJyU3BlY3VsYXJHbG9zc2luZXNzVG9TdGFuZGFyZDogZnVuY3Rpb24gKG1hdGVyaWFsSW5mbywgc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mbywgbGliKSB7XHJcbiAgICAgICAgdmFyIGFscGhhVGVzdCA9IG1hdGVyaWFsSW5mby5hbHBoYU1vZGUgPT09ICdNQVNLJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXNlU3RhbmRhcmRNYXRlcmlhbCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTdGFuZGFyZE1hdGVyaWFsIGRvZXNuXFwndCBzdXBwb3J0IHNwZWN1bGFyIGdsb3NzaW5lc3Mgd29ya2Zsb3cgeWV0Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIGRpZmZ1c2VNYXAsIGdsb3NzaW5lc3NNYXAsIHNwZWN1bGFyTWFwLCBub3JtYWxNYXAsIGVtaXNzaXZlTWFwLCBvY2NsdXNpb25NYXA7XHJcbiAgICAgICAgdmFyIGVuYWJsZWRUZXh0dXJlcyA9IFtdO1xyXG4gICAgICAgIC8vIFRPRE8gdGV4Q29vcmRcclxuICAgICAgICBpZiAoc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mby5kaWZmdXNlVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwID0gbGliLnRleHR1cmVzW3NwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uZGlmZnVzZVRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIGRpZmZ1c2VNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ2RpZmZ1c2VNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uc3BlY3VsYXJHbG9zc2luZXNzVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBnbG9zc2luZXNzTWFwID0gc3BlY3VsYXJNYXAgPSBsaWIudGV4dHVyZXNbc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mby5zcGVjdWxhckdsb3NzaW5lc3NUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBnbG9zc2luZXNzTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdzcGVjdWxhck1hcCcsICdnbG9zc2luZXNzTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBub3JtYWxNYXAgPSBsaWIudGV4dHVyZXNbbWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIG5vcm1hbE1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnbm9ybWFsTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8uZW1pc3NpdmVUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5lbWlzc2l2ZVRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdlbWlzc2l2ZU1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLm9jY2x1c2lvblRleHR1cmUpIHtcclxuICAgICAgICAgICAgb2NjbHVzaW9uTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5vY2NsdXNpb25UZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBvY2NsdXNpb25NYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ29jY2x1c2lvbk1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGlmZnVzZUNvbG9yID0gc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mby5kaWZmdXNlRmFjdG9yIHx8IFsxLCAxLCAxLCAxXTtcclxuXHJcbiAgICAgICAgdmFyIGNvbW1vblByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICAgIGRpZmZ1c2VNYXA6IGRpZmZ1c2VNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgZ2xvc3NpbmVzc01hcDogZ2xvc3NpbmVzc01hcCB8fCBudWxsLFxyXG4gICAgICAgICAgICBzcGVjdWxhck1hcDogc3BlY3VsYXJNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgbm9ybWFsTWFwOiBub3JtYWxNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgZW1pc3NpdmVNYXA6IGVtaXNzaXZlTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG9jY2x1c2lvbk1hcDogb2NjbHVzaW9uTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGNvbG9yOiBkaWZmdXNlQ29sb3Iuc2xpY2UoMCwgMyksXHJcbiAgICAgICAgICAgIGFscGhhOiBkaWZmdXNlQ29sb3JbM10sXHJcbiAgICAgICAgICAgIHNwZWN1bGFyQ29sb3I6IHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uc3BlY3VsYXJGYWN0b3IgfHwgWzEsIDEsIDFdLFxyXG4gICAgICAgICAgICBnbG9zc2luZXNzOiBzcGVjdWxhckdsb3NzaW5lc3NNYXRJbmZvLmdsb3NzaW5lc3NGYWN0b3IgfHwgMCxcclxuICAgICAgICAgICAgZW1pc3Npb246IG1hdGVyaWFsSW5mby5lbWlzc2l2ZUZhY3RvciB8fCBbMCwgMCwgMF0sXHJcbiAgICAgICAgICAgIGVtaXNzaW9uSW50ZW5zaXR5OiAxLFxyXG4gICAgICAgICAgICBhbHBoYUN1dG9mZjogbWF0ZXJpYWxJbmZvLmFscGhhQ3V0b2ZmID09IG51bGwgPyAwLjkgOiBtYXRlcmlhbEluZm8uYWxwaGFDdXRvZmZcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChjb21tb25Qcm9wZXJ0aWVzLmdsb3NzaW5lc3NNYXApIHtcclxuICAgICAgICAgICAgLy8gSWdub3JlIHNwZWN1bGFyRmFjdG9yXHJcbiAgICAgICAgICAgIGNvbW1vblByb3BlcnRpZXMuZ2xvc3NpbmVzcyA9IDAuNTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbW1vblByb3BlcnRpZXMuc3BlY3VsYXJNYXApIHtcclxuICAgICAgICAgICAgLy8gSWdub3JlIHNwZWN1bGFyRmFjdG9yXHJcbiAgICAgICAgICAgIGNvbW1vblByb3BlcnRpZXMuc3BlY3VsYXJDb2xvciA9IFsxLCAxLCAxXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgbmFtZTogbWF0ZXJpYWxJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgIHNoYWRlcjogdGhpcy5fZ2V0U2hhZGVyKClcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdHTE9TU0lORVNTX0NIQU5ORUwnLCAzKTtcclxuICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ0RJRkZVU0VNQVBfQUxQSEFfQUxQSEEnKTtcclxuXHJcbiAgICAgICAgaWYgKGFscGhhVGVzdCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ0RPVUJMRV9TSURFRCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWF0ZXJpYWwuc2V0KGNvbW1vblByb3BlcnRpZXMpO1xyXG5cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmFscGhhTW9kZSA9PT0gJ0JMRU5EJykge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZXB0aE1hc2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGFyc2VNYXRlcmlhbHM6IGZ1bmN0aW9uIChqc29uLCBsaWIpIHtcclxuICAgICAgICB1dGlsLmVhY2goanNvbi5tYXRlcmlhbHMsIGZ1bmN0aW9uIChtYXRlcmlhbEluZm8sIGlkeCkge1xyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnMgJiYgbWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnNbJ0tIUl9tYXRlcmlhbHNfY29tbW9uJ10pIHtcclxuICAgICAgICAgICAgICAgIGxpYi5tYXRlcmlhbHNbaWR4XSA9IHRoaXMuX0tIUkNvbW1vbk1hdGVyaWFsVG9TdGFuZGFyZChtYXRlcmlhbEluZm8sIGxpYik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnMgJiYgbWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnNbJ0tIUl9tYXRlcmlhbHNfcGJyU3BlY3VsYXJHbG9zc2luZXNzJ10pIHtcclxuICAgICAgICAgICAgICAgIGxpYi5tYXRlcmlhbHNbaWR4XSA9IHRoaXMuX3BiclNwZWN1bGFyR2xvc3NpbmVzc1RvU3RhbmRhcmQobWF0ZXJpYWxJbmZvLCBtYXRlcmlhbEluZm8uZXh0ZW5zaW9uc1snS0hSX21hdGVyaWFsc19wYnJTcGVjdWxhckdsb3NzaW5lc3MnXSwgbGliKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxpYi5tYXRlcmlhbHNbaWR4XSA9IHRoaXMuX3Bick1ldGFsbGljUm91Z2huZXNzVG9TdGFuZGFyZChtYXRlcmlhbEluZm8sIG1hdGVyaWFsSW5mby5wYnJNZXRhbGxpY1JvdWdobmVzcyB8fCB7fSwgbGliKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGFyc2VNZXNoZXM6IGZ1bmN0aW9uIChqc29uLCBsaWIpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIHV0aWwuZWFjaChqc29uLm1lc2hlcywgZnVuY3Rpb24gKG1lc2hJbmZvLCBpZHgpIHtcclxuICAgICAgICAgICAgbGliLm1lc2hlc1tpZHhdID0gW107XHJcbiAgICAgICAgICAgIC8vIEdlb21ldHJ5XHJcbiAgICAgICAgICAgIGZvciAodmFyIHBwID0gMDsgcHAgPCBtZXNoSW5mby5wcmltaXRpdmVzLmxlbmd0aDsgcHArKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHByaW1pdGl2ZUluZm8gPSBtZXNoSW5mby5wcmltaXRpdmVzW3BwXTtcclxuICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IG5ldyBHZW9tZXRyeSh7XHJcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUEVORElHTlxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG1lc2hJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgYm91bmRpbmdCb3g6IG5ldyBCb3VuZGluZ0JveCgpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIC8vIFBhcnNlIGF0dHJpYnV0ZXNcclxuICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpY3MgPSBPYmplY3Qua2V5cyhwcmltaXRpdmVJbmZvLmF0dHJpYnV0ZXMpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgc3MgPSAwOyBzcyA8IHNlbWFudGljcy5sZW5ndGg7IHNzKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWMgPSBzZW1hbnRpY3Nbc3NdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhY2Nlc3NvcklkeCA9IHByaW1pdGl2ZUluZm8uYXR0cmlidXRlc1tzZW1hbnRpY107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUluZm8gPSBqc29uLmFjY2Vzc29yc1thY2Nlc3NvcklkeF07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBzZW1hbnRpY0F0dHJpYnV0ZU1hcFtzZW1hbnRpY107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGVOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IFNJWkVfTUFQW2F0dHJpYnV0ZUluZm8udHlwZV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUFycmF5ID0gZ2V0QWNjZXNzb3JEYXRhKGpzb24sIGxpYiwgYWNjZXNzb3JJZHgpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFdlYkdMIGF0dHJpYnV0ZSBidWZmZXIgbm90IHN1cHBvcnQgdWludDMyLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIERpcmVjdCB1c2UgRmxvYXQzMkFycmF5IG1heSBhbHNvIGhhdmUgaXNzdWUuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZUFycmF5IGluc3RhbmNlb2YgdmVuZG9yLlVpbnQzMkFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShhdHRyaWJ1dGVBcnJheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYyA9PT0gJ1dFSUdIVFNfMCcgJiYgc2l6ZSA9PT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZWlnaHQgZGF0YSBpbiBRVEVLIGhhcyBvbmx5IDMgY29tcG9uZW50LCB0aGUgbGFzdCBjb21wb25lbnQgY2FuIGJlIGV2YWx1YXRlZCBzaW5jZSBpdCBpcyBub3JtYWxpemVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3ZWlnaHRBcnJheSA9IG5ldyBhdHRyaWJ1dGVBcnJheS5jb25zdHJ1Y3RvcihhdHRyaWJ1dGVJbmZvLmNvdW50ICogMyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlSW5mby5jb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTQgPSBpICogNCwgaTMgPSBpICogMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3MSA9IGF0dHJpYnV0ZUFycmF5W2k0XSwgdzIgPSBhdHRyaWJ1dGVBcnJheVtpNCArIDFdLCB3MyA9IGF0dHJpYnV0ZUFycmF5W2k0ICsgMl0sIHc0ID0gYXR0cmlidXRlQXJyYXlbaTQgKyAzXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3U3VtID0gdzEgKyB3MiArIHczICsgdzQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRBcnJheVtpM10gPSB3MSAvIHdTdW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRBcnJheVtpMyArIDFdID0gdzIgLyB3U3VtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0QXJyYXlbaTMgKyAyXSA9IHczIC8gd1N1bTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdLnZhbHVlID0gd2VpZ2h0QXJyYXk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbWFudGljID09PSAnQ09MT1JfMCcgJiYgc2l6ZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JBcnJheSA9IG5ldyBhdHRyaWJ1dGVBcnJheS5jb25zdHJ1Y3RvcihhdHRyaWJ1dGVJbmZvLmNvdW50ICogNCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlSW5mby5jb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTQgPSBpICogNCwgaTMgPSBpICogMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yQXJyYXlbaTRdID0gYXR0cmlidXRlQXJyYXlbaTNdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JBcnJheVtpNCArIDFdID0gYXR0cmlidXRlQXJyYXlbaTMgKyAxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yQXJyYXlbaTQgKyAyXSA9IGF0dHJpYnV0ZUFycmF5W2kzICsgMl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckFycmF5W2k0ICsgM10gPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0udmFsdWUgPSBjb2xvckFycmF5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXS52YWx1ZSA9IGF0dHJpYnV0ZUFycmF5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZVR5cGUgPSAnZmxvYXQnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVBcnJheSBpbnN0YW5jZW9mIHZlbmRvci5VaW50MTZBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVUeXBlID0gJ3VzaG9ydCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZUFycmF5IGluc3RhbmNlb2YgdmVuZG9yLkludDE2QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9ICdzaG9ydCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZUFycmF5IGluc3RhbmNlb2YgdmVuZG9yLlVpbnQ4QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9ICd1Ynl0ZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZUFycmF5IGluc3RhbmNlb2YgdmVuZG9yLkludDhBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVUeXBlID0gJ2J5dGUnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdLnR5cGUgPSBhdHRyaWJ1dGVUeXBlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMgPT09ICdQT1NJVElPTicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQm91bmRpbmcgQm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaW4gPSBhdHRyaWJ1dGVJbmZvLm1pbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heCA9IGF0dHJpYnV0ZUluZm8ubWF4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5ib3VuZGluZ0JveC5taW4uc2V0KG1pblswXSwgbWluWzFdLCBtaW5bMl0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmJvdW5kaW5nQm94Lm1heC5zZXQobWF4WzBdLCBtYXhbMV0sIG1heFsyXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gUGFyc2UgaW5kaWNlc1xyXG4gICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZUluZm8uaW5kaWNlcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlcyA9IGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIHByaW1pdGl2ZUluZm8uaW5kaWNlcywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdlb21ldHJ5LnZlcnRleENvdW50IDw9IDB4ZmZmZiAmJiBnZW9tZXRyeS5pbmRpY2VzIGluc3RhbmNlb2YgdmVuZG9yLlVpbnQzMkFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgdmVuZG9yLlVpbnQxNkFycmF5KGdlb21ldHJ5LmluZGljZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZihnZW9tZXRyeS5pbmRpY2VzIGluc3RhbmNlb2YgdmVuZG9yLlVpbnQ4QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlcyA9IG5ldyB2ZW5kb3IuVWludDE2QXJyYXkoZ2VvbWV0cnkuaW5kaWNlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IGxpYi5tYXRlcmlhbHNbcHJpbWl0aXZlSW5mby5tYXRlcmlhbF07XHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWxJbmZvID0gKGpzb24ubWF0ZXJpYWxzIHx8IFtdKVtwcmltaXRpdmVJbmZvLm1hdGVyaWFsXTtcclxuICAgICAgICAgICAgICAgIC8vIFVzZSBkZWZhdWx0IG1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXI6IHNlbGYuX2dldFNoYWRlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgbWVzaCA9IG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogZ2VvbWV0cnksXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IFtNZXNoLlBPSU5UUywgTWVzaC5MSU5FUywgTWVzaC5MSU5FX0xPT1AsIE1lc2guTElORV9TVFJJUCwgTWVzaC5UUklBTkdMRVMsIE1lc2guVFJJQU5HTEVfU1RSSVAsIE1lc2guVFJJQU5HTEVfRkFOXVtwcmltaXRpdmVJbmZvLm1vZGVdIHx8IE1lc2guVFJJQU5HTEVTLFxyXG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZUdCdWZmZXI6IG1hdGVyaWFsLnRyYW5zcGFyZW50XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbEluZm8gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc2guY3VsbGluZyA9ICFtYXRlcmlhbEluZm8uZG91YmxlU2lkZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1lc2guZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNoLmdlb21ldHJ5LmdlbmVyYXRlVmVydGV4Tm9ybWFscygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCgobWF0ZXJpYWwgaW5zdGFuY2VvZiBTdGFuZGFyZE1hdGVyaWFsKSAmJiBtYXRlcmlhbC5ub3JtYWxNYXApXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgKG1hdGVyaWFsLmlzVGV4dHVyZUVuYWJsZWQoJ25vcm1hbE1hcCcpKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMudGFuZ2VudC52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNoLmdlb21ldHJ5LmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobWVzaC5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC5kZWZpbmUoJ1ZFUlRFWF9DT0xPUicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG1lc2gubmFtZSA9IEdMVEZMb2FkZXIuZ2VuZXJhdGVNZXNoTmFtZShqc29uLm1lc2hlcywgaWR4LCBwcCk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGliLm1lc2hlc1tpZHhdLnB1c2gobWVzaCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2luc3RhbmNlQ2FtZXJhOiBmdW5jdGlvbiAoanNvbiwgbm9kZUluZm8pIHtcclxuICAgICAgICB2YXIgY2FtZXJhSW5mbyA9IGpzb24uY2FtZXJhc1tub2RlSW5mby5jYW1lcmFdO1xyXG5cclxuICAgICAgICBpZiAoY2FtZXJhSW5mby50eXBlID09PSAncGVyc3BlY3RpdmUnKSB7XHJcbiAgICAgICAgICAgIHZhciBwZXJzcGVjdGl2ZUluZm8gPSBjYW1lcmFJbmZvLnBlcnNwZWN0aXZlIHx8IHt9O1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG5vZGVJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBhc3BlY3Q6IHBlcnNwZWN0aXZlSW5mby5hc3BlY3RSYXRpbyxcclxuICAgICAgICAgICAgICAgIGZvdjogcGVyc3BlY3RpdmVJbmZvLnlmb3YgLyBNYXRoLlBJICogMTgwLFxyXG4gICAgICAgICAgICAgICAgZmFyOiBwZXJzcGVjdGl2ZUluZm8uemZhcixcclxuICAgICAgICAgICAgICAgIG5lYXI6IHBlcnNwZWN0aXZlSW5mby56bmVhclxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBvcnRob2dyYXBoaWNJbmZvID0gY2FtZXJhSW5mby5vcnRob2dyYXBoaWMgfHwge307XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3J0aG9ncmFwaGljQ2FtZXJhKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG5vZGVJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB0b3A6IG9ydGhvZ3JhcGhpY0luZm8ueW1hZyxcclxuICAgICAgICAgICAgICAgIHJpZ2h0OiBvcnRob2dyYXBoaWNJbmZvLnhtYWcsXHJcbiAgICAgICAgICAgICAgICBsZWZ0OiAtb3J0aG9ncmFwaGljSW5mby54bWFnLFxyXG4gICAgICAgICAgICAgICAgYm90dG9tOiAtb3J0aG9ncmFwaGljSW5mby55bWFnLFxyXG4gICAgICAgICAgICAgICAgbmVhcjogb3J0aG9ncmFwaGljSW5mby56bmVhcixcclxuICAgICAgICAgICAgICAgIGZhcjogb3J0aG9ncmFwaGljSW5mby56ZmFyXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3BhcnNlTm9kZXM6IGZ1bmN0aW9uIChqc29uLCBsaWIpIHtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gaW5zdGFuY2VNZXNoKG1lc2gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG1lc2gubmFtZSxcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBtZXNoLmdlb21ldHJ5LFxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWw6IG1lc2gubWF0ZXJpYWwsXHJcbiAgICAgICAgICAgICAgICBjdWxsaW5nOiBtZXNoLmN1bGxpbmcsXHJcbiAgICAgICAgICAgICAgICBtb2RlOiBtZXNoLm1vZGVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsaWIuaW5zdGFuY2VkTWVzaGVzID0gW107XHJcblxyXG4gICAgICAgIHV0aWwuZWFjaChqc29uLm5vZGVzLCBmdW5jdGlvbiAobm9kZUluZm8sIGlkeCkge1xyXG4gICAgICAgICAgICB2YXIgbm9kZTtcclxuICAgICAgICAgICAgaWYgKG5vZGVJbmZvLmNhbWVyYSAhPSBudWxsICYmIHRoaXMuaW5jbHVkZUNhbWVyYSkge1xyXG4gICAgICAgICAgICAgICAgbm9kZSA9IHRoaXMuX2luc3RhbmNlQ2FtZXJhKGpzb24sIG5vZGVJbmZvKTtcclxuICAgICAgICAgICAgICAgIGxpYi5jYW1lcmFzLnB1c2gobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobm9kZUluZm8ubWVzaCAhPSBudWxsICYmIHRoaXMuaW5jbHVkZU1lc2gpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcmltaXRpdmVzID0gbGliLm1lc2hlc1tub2RlSW5mby5tZXNoXTtcclxuICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIG5vZGUgd2l0aCBtZXNoIGRpcmVjdGx5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBpbnN0YW5jZU1lc2gocHJpbWl0aXZlc1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0TmFtZShub2RlSW5mby5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGliLmluc3RhbmNlZE1lc2hlcy5wdXNoKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5ldyBOb2RlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0TmFtZShub2RlSW5mby5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwcmltaXRpdmVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3TWVzaCA9IGluc3RhbmNlTWVzaChwcmltaXRpdmVzW2pdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkKG5ld01lc2gpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliLmluc3RhbmNlZE1lc2hlcy5wdXNoKG5ld01lc2gpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbm9kZSA9IG5ldyBOb2RlKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBQRU5ESU5HIER1bHBsaWNhdGUgbmFtZS5cclxuICAgICAgICAgICAgICAgIG5vZGUuc2V0TmFtZShub2RlSW5mby5uYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobm9kZUluZm8ubWF0cml4KSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLmxvY2FsVHJhbnNmb3JtLnNldEFycmF5KG5vZGVJbmZvLm1hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICBub2RlLmRlY29tcG9zZUxvY2FsVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZUluZm8udHJhbnNsYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnBvc2l0aW9uLnNldEFycmF5KG5vZGVJbmZvLnRyYW5zbGF0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChub2RlSW5mby5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUucm90YXRpb24uc2V0QXJyYXkobm9kZUluZm8ucm90YXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGVJbmZvLnNjYWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zY2FsZS5zZXRBcnJheShub2RlSW5mby5zY2FsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxpYi5ub2Rlc1tpZHhdID0gbm9kZTtcclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgLy8gQnVpbGQgaGllcmFyY2h5XHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24ubm9kZXMsIGZ1bmN0aW9uIChub2RlSW5mbywgaWR4KSB7XHJcbiAgICAgICAgICAgIHZhciBub2RlID0gbGliLm5vZGVzW2lkeF07XHJcbiAgICAgICAgICAgIGlmIChub2RlSW5mby5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlSW5mby5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZElkeCA9IG5vZGVJbmZvLmNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IGxpYi5ub2Rlc1tjaGlsZElkeF07XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hZGQoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICBfcGFyc2VBbmltYXRpb25zOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tDaGFubmVsUGF0aChjaGFubmVsSW5mbykge1xyXG4gICAgICAgICAgICBpZiAoY2hhbm5lbEluZm8ucGF0aCA9PT0gJ3dlaWdodHMnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0dMVEZMb2FkZXIgbm90IHN1cHBvcnQgbW9ycGggdGFyZ2V0cyB5ZXQuJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBnZXRDaGFubmVsSGFzaChjaGFubmVsSW5mbywgYW5pbWF0aW9uSW5mbykge1xyXG4gICAgICAgICAgICByZXR1cm4gY2hhbm5lbEluZm8udGFyZ2V0Lm5vZGUgKyAnXycgKyBhbmltYXRpb25JbmZvLnNhbXBsZXJzW2NoYW5uZWxJbmZvLnNhbXBsZXJdLmlucHV0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRpbWVBY2Nlc3Nvck11bHRpcGxpZWQgPSB7fTtcclxuICAgICAgICB1dGlsLmVhY2goanNvbi5hbmltYXRpb25zLCBmdW5jdGlvbiAoYW5pbWF0aW9uSW5mbywgaWR4KSB7XHJcbiAgICAgICAgICAgIHZhciBjaGFubmVscyA9IGFuaW1hdGlvbkluZm8uY2hhbm5lbHMuZmlsdGVyKGNoZWNrQ2hhbm5lbFBhdGgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjaGFubmVscy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdHJhY2tzID0ge307XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbm5lbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjaGFubmVsSW5mbyA9IGNoYW5uZWxzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNoYW5uZWxIYXNoID0gZ2V0Q2hhbm5lbEhhc2goY2hhbm5lbEluZm8sIGFuaW1hdGlvbkluZm8pO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciB0YXJnZXROb2RlID0gbGliLm5vZGVzW2NoYW5uZWxJbmZvLnRhcmdldC5ub2RlXTtcclxuICAgICAgICAgICAgICAgIHZhciB0cmFjayA9IHRyYWNrc1tjaGFubmVsSGFzaF07XHJcbiAgICAgICAgICAgICAgICB2YXIgc2FtcGxlckluZm8gPSBhbmltYXRpb25JbmZvLnNhbXBsZXJzW2NoYW5uZWxJbmZvLnNhbXBsZXJdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghdHJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICB0cmFjayA9IHRyYWNrc1tjaGFubmVsSGFzaF0gPSBuZXcgU2FtcGxlclRyYWNrKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGFyZ2V0Tm9kZSA/IHRhcmdldE5vZGUubmFtZSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldE5vZGVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFjay50YXJnZXROb2RlSW5kZXggPSBjaGFubmVsSW5mby50YXJnZXQubm9kZTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFjay5jaGFubmVscy50aW1lID0gZ2V0QWNjZXNzb3JEYXRhKGpzb24sIGxpYiwgc2FtcGxlckluZm8uaW5wdXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBmcmFtZUxlbiA9IHRyYWNrLmNoYW5uZWxzLnRpbWUubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGltZUFjY2Vzc29yTXVsdGlwbGllZFtzYW1wbGVySW5mby5pbnB1dF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBmcmFtZUxlbjsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5jaGFubmVscy50aW1lW2tdICo9IDEwMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZUFjY2Vzc29yTXVsdGlwbGllZFtzYW1wbGVySW5mby5pbnB1dF0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZXJwb2xhdGlvbiA9IHNhbXBsZXJJbmZvLmludGVycG9sYXRpb24gfHwgJ0xJTkVBUic7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbiAhPT0gJ0xJTkVBUicpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0dMVEZMb2FkZXIgb25seSBzdXBwb3J0IExJTkVBUiBpbnRlcnBvbGF0aW9uLicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBwYXRoID0gY2hhbm5lbEluZm8udGFyZ2V0LnBhdGg7XHJcbiAgICAgICAgICAgICAgICBpZiAocGF0aCA9PT0gJ3RyYW5zbGF0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGggPSAncG9zaXRpb24nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRyYWNrLmNoYW5uZWxzW3BhdGhdID0gZ2V0QWNjZXNzb3JEYXRhKGpzb24sIGxpYiwgc2FtcGxlckluZm8ub3V0cHV0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdHJhY2tzTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBoYXNoIGluIHRyYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdHJhY2tzTGlzdC5wdXNoKHRyYWNrc1toYXNoXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNsaXAgPSBuZXcgVHJhY2tDbGlwKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGFuaW1hdGlvbkluZm8ubmFtZSxcclxuICAgICAgICAgICAgICAgIGxvb3A6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB0cmFja3M6IHRyYWNrc0xpc3RcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxpYi5jbGlwcy5wdXNoKGNsaXApO1xyXG4gICAgICAgIH0sIHRoaXMpO1xyXG5cclxuXHJcbiAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgIHZhciBtYXhMaWZlID0gbGliLmNsaXBzLnJlZHVjZShmdW5jdGlvbiAobWF4VGltZSwgY2xpcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgobWF4VGltZSwgY2xpcC5saWZlKTtcclxuICAgICAgICB9LCAwKTtcclxuICAgICAgICBsaWIuY2xpcHMuZm9yRWFjaChmdW5jdGlvbiAoY2xpcCkge1xyXG4gICAgICAgICAgICBjbGlwLmxpZmUgPSBtYXhMaWZlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gbGliLmNsaXBzO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbkdMVEZMb2FkZXIuZ2VuZXJhdGVNZXNoTmFtZSA9IGZ1bmN0aW9uIChtZXNoZXMsIGlkeCwgcHJpbWl0aXZlSWR4KSB7XHJcbiAgICB2YXIgbWVzaEluZm8gPSBtZXNoZXNbaWR4XTtcclxuICAgIHZhciBtZXNoTmFtZSA9IG1lc2hJbmZvLm5hbWUgfHwgKCdtZXNoXycgKyBpZHgpO1xyXG4gICAgcmV0dXJuIHByaW1pdGl2ZUlkeCA9PT0gMCA/IG1lc2hOYW1lIDogKG1lc2hOYW1lICsgJyQnICsgcHJpbWl0aXZlSWR4KTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdMVEZMb2FkZXI7XHJcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuRGlyZWN0aW9uYWxcclxuICogQGV4dGVuZHMgY2xheS5MaWdodFxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgdmFyIGxpZ2h0ID0gbmV3IGNsYXkubGlnaHQuRGlyZWN0aW9uYWwoe1xyXG4gKiAgICAgICAgIGludGVuc2l0eTogMC41LFxyXG4gKiAgICAgICAgIGNvbG9yOiBbMS4wLCAwLjAsIDAuMF1cclxuICogICAgIH0pO1xyXG4gKiAgICAgbGlnaHQucG9zaXRpb24uc2V0KDEwLCAxMCwgMTApO1xyXG4gKiAgICAgbGlnaHQubG9va0F0KGNsYXkuVmVjdG9yMy5aRVJPKTtcclxuICogICAgIHNjZW5lLmFkZChsaWdodCk7XHJcbiAqL1xyXG52YXIgRGlyZWN0aW9uYWxMaWdodCA9IExpZ2h0LmV4dGVuZCgvKiogQGxlbmRzIGNsYXkubGlnaHQuRGlyZWN0aW9uYWwjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2hhZG93QmlhczogMC4wMDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNoYWRvd1Nsb3BlU2NhbGU6IDIuMCxcclxuICAgIC8qKlxyXG4gICAgICogU2hhZG93IGNhc2NhZGUuXHJcbiAgICAgKiBVc2UgUFNTTSB0ZWNobmlxdWUgd2hlbiBpdCBpcyBsYXJnZXIgdGhhbiAxIGFuZCBoYXZlIGEgdW5pcXVlIGRpcmVjdGlvbmFsIGxpZ2h0IGluIHNjZW5lLlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2hhZG93Q2FzY2FkZTogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEF2YWlsYWJsZSB3aGVuIHNoYWRvd0Nhc2NhZGUgaXMgbGFyZ2VyIHRoYW4gMSBhbmQgaGF2ZSBhIHVuaXF1ZSBkaXJlY3Rpb25hbCBsaWdodCBpbiBzY2VuZS5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNhc2NhZGVTcGxpdExvZ0ZhY3RvcjogMC4yXHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnRElSRUNUSU9OQUxfTElHSFQnLFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBkaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9uOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLl9fZGlyID0gaW5zdGFuY2UuX19kaXIgfHwgbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICAgICAgICAgIC8vIERpcmVjdGlvbiBpcyB0YXJnZXQgdG8gZXllXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuX19kaXIuY29weShpbnN0YW5jZS53b3JsZFRyYW5zZm9ybS56KS5ub3JtYWxpemUoKS5uZWdhdGUoKS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGlyZWN0aW9uYWxMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0gKiBpbnRlbnNpdHksIGNvbG9yWzFdICogaW50ZW5zaXR5LCBjb2xvclsyXSAqIGludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuRGlyZWN0aW9uYWwucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0ID0gTGlnaHQucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICAgICAgbGlnaHQuc2hhZG93QmlhcyA9IHRoaXMuc2hhZG93QmlhcztcclxuICAgICAgICBsaWdodC5zaGFkb3dTbG9wZVNjYWxlID0gdGhpcy5zaGFkb3dTbG9wZVNjYWxlO1xyXG4gICAgICAgIHJldHVybiBsaWdodDtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEaXJlY3Rpb25hbExpZ2h0O1xyXG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LlBvaW50XHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICovXHJcbnZhciBQb2ludExpZ2h0ID0gTGlnaHQuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5saWdodC5Qb2ludCMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYW5nZTogMTAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY2FzdFNoYWRvdzogZmFsc2VcclxufSwge1xyXG5cclxuICAgIHR5cGU6ICdQT0lOVF9MSUdIVCcsXHJcblxyXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xyXG4gICAgICAgIHBvaW50TGlnaHRQb3NpdGlvbjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvaW50TGlnaHRSYW5nZToge1xyXG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5yYW5nZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcG9pbnRMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSAqIGludGVuc2l0eSwgY29sb3JbMV0gKiBpbnRlbnNpdHksIGNvbG9yWzJdICogaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkubGlnaHQuUG9pbnR9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5Qb2ludC5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBsaWdodCA9IExpZ2h0LnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGxpZ2h0LnJhbmdlID0gdGhpcy5yYW5nZTtcclxuICAgICAgICByZXR1cm4gbGlnaHQ7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUG9pbnRMaWdodDtcclxuIiwiaW1wb3J0IExpZ2h0IGZyb20gJy4uL0xpZ2h0JztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5saWdodC5TcG90XHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICovXHJcbnZhciBTcG90TGlnaHQgPSBMaWdodC5leHRlbmQoLyoqQGxlbmRzIGNsYXkubGlnaHQuU3BvdCAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJhbmdlOiAyMCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdW1icmFBbmdsZTogMzAsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHBlbnVtYnJhQW5nbGU6IDQ1LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBmYWxsb2ZmRmFjdG9yOiAyLjAsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNoYWRvd0JpYXM6IDAuMDAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzaGFkb3dTbG9wZVNjYWxlOiAyLjBcclxufSwge1xyXG5cclxuICAgIHR5cGU6ICdTUE9UX0xJR0hUJyxcclxuXHJcbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XHJcbiAgICAgICAgc3BvdExpZ2h0UG9zaXRpb246IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BvdExpZ2h0UmFuZ2U6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJhbmdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmNvcyhpbnN0YW5jZS51bWJyYUFuZ2xlICogTWF0aC5QSSAvIDE4MCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmU6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguY29zKGluc3RhbmNlLnBlbnVtYnJhQW5nbGUgKiBNYXRoLlBJIC8gMTgwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BvdExpZ2h0RmFsbG9mZkZhY3Rvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZmFsbG9mZkZhY3RvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BvdExpZ2h0RGlyZWN0aW9uOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLl9fZGlyID0gaW5zdGFuY2UuX19kaXIgfHwgbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICAgICAgICAgIC8vIERpcmVjdGlvbiBpcyB0YXJnZXQgdG8gZXllXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuX19kaXIuY29weShpbnN0YW5jZS53b3JsZFRyYW5zZm9ybS56KS5uZWdhdGUoKS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BvdExpZ2h0Q29sb3I6IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSAqIGludGVuc2l0eSwgY29sb3JbMV0gKiBpbnRlbnNpdHksIGNvbG9yWzJdICogaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkubGlnaHQuU3BvdH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LlNwb3QucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0ID0gTGlnaHQucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICAgICAgbGlnaHQucmFuZ2UgPSB0aGlzLnJhbmdlO1xyXG4gICAgICAgIGxpZ2h0LnVtYnJhQW5nbGUgPSB0aGlzLnVtYnJhQW5nbGU7XHJcbiAgICAgICAgbGlnaHQucGVudW1icmFBbmdsZSA9IHRoaXMucGVudW1icmFBbmdsZTtcclxuICAgICAgICBsaWdodC5mYWxsb2ZmRmFjdG9yID0gdGhpcy5mYWxsb2ZmRmFjdG9yO1xyXG4gICAgICAgIGxpZ2h0LnNoYWRvd0JpYXMgPSB0aGlzLnNoYWRvd0JpYXM7XHJcbiAgICAgICAgbGlnaHQuc2hhZG93U2xvcGVTY2FsZSA9IHRoaXMuc2hhZG93U2xvcGVTY2FsZTtcclxuICAgICAgICByZXR1cm4gbGlnaHQ7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BvdExpZ2h0O1xyXG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkFtYmllbnRcclxuICogQGV4dGVuZHMgY2xheS5MaWdodFxyXG4gKi9cclxudmFyIEFtYmllbnRMaWdodCA9IExpZ2h0LmV4dGVuZCh7XHJcblxyXG4gICAgY2FzdFNoYWRvdzogZmFsc2VcclxuXHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnQU1CSUVOVF9MSUdIVCcsXHJcblxyXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xyXG4gICAgICAgIGFtYmllbnRMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSppbnRlbnNpdHksIGNvbG9yWzFdKmludGVuc2l0eSwgY29sb3JbMl0qaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAbmFtZSBjbG9uZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5BbWJpZW50fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuQW1iaWVudC5wcm90b3R5cGVcclxuICAgICAqL1xyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFtYmllbnRMaWdodDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi9UZXh0dXJlQ3ViZSc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCBDYWNoZSBmcm9tICcuL2NvcmUvQ2FjaGUnO1xyXG5cclxudmFyIEtFWV9GUkFNRUJVRkZFUiA9ICdmcmFtZWJ1ZmZlcic7XHJcbnZhciBLRVlfUkVOREVSQlVGRkVSID0gJ3JlbmRlcmJ1ZmZlcic7XHJcbnZhciBLRVlfUkVOREVSQlVGRkVSX1dJRFRIID0gS0VZX1JFTkRFUkJVRkZFUiArICdfd2lkdGgnO1xyXG52YXIgS0VZX1JFTkRFUkJVRkZFUl9IRUlHSFQgPSBLRVlfUkVOREVSQlVGRkVSICsgJ19oZWlnaHQnO1xyXG52YXIgS0VZX1JFTkRFUkJVRkZFUl9BVFRBQ0hFRCA9IEtFWV9SRU5ERVJCVUZGRVIgKyAnX2F0dGFjaGVkJztcclxudmFyIEtFWV9ERVBUSFRFWFRVUkVfQVRUQUNIRUQgPSAnZGVwdGh0ZXh0dXJlX2F0dGFjaGVkJztcclxuXHJcbnZhciBHTF9GUkFNRUJVRkZFUiA9IGdsZW51bS5GUkFNRUJVRkZFUjtcclxudmFyIEdMX1JFTkRFUkJVRkZFUiA9IGdsZW51bS5SRU5ERVJCVUZGRVI7XHJcbnZhciBHTF9ERVBUSF9BVFRBQ0hNRU5UID0gZ2xlbnVtLkRFUFRIX0FUVEFDSE1FTlQ7XHJcbnZhciBHTF9DT0xPUl9BVFRBQ0hNRU5UMCA9IGdsZW51bS5DT0xPUl9BVFRBQ0hNRU5UMDtcclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LkZyYW1lQnVmZmVyXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgRnJhbWVCdWZmZXIgPSBCYXNlLmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5LkZyYW1lQnVmZmVyIyAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIElmIHVzZSBkZXB0aCBidWZmZXJcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBkZXB0aEJ1ZmZlcjogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgKi9cclxuICAgIHZpZXdwb3J0OiBudWxsLFxyXG5cclxuICAgIF93aWR0aDogMCxcclxuICAgIF9oZWlnaHQ6IDAsXHJcblxyXG4gICAgX3RleHR1cmVzOiBudWxsLFxyXG5cclxuICAgIF9ib3VuZFJlbmRlcmVyOiBudWxsLFxyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBVc2UgY2FjaGVcclxuICAgIHRoaXMuX2NhY2hlID0gbmV3IENhY2hlKCk7XHJcblxyXG4gICAgdGhpcy5fdGV4dHVyZXMgPSB7fTtcclxufSxcclxuXHJcbi8qKkBsZW5kcyBjbGF5LkZyYW1lQnVmZmVyLnByb3RvdHlwZS4gKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYXR0YWNoZWQgdGV4dHVyZSB3aWR0aFxyXG4gICAgICoge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgLy8gRklYTUUgQ2FuJ3QgdXNlIGJlZm9yZSAjYmluZFxyXG4gICAgZ2V0VGV4dHVyZVdpZHRoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhdHRhY2hlZCB0ZXh0dXJlIGhlaWdodFxyXG4gICAgICoge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0VGV4dHVyZUhlaWdodDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmluZCB0aGUgZnJhbWVidWZmZXIgdG8gZ2l2ZW4gcmVuZGVyZXIgYmVmb3JlIHJlbmRlcmluZ1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcblxyXG4gICAgICAgIGlmIChyZW5kZXJlci5fX2N1cnJlbnRGcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgICAgICAvLyBBbHJlYWR5IGJvdW5kXHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJlci5fX2N1cnJlbnRGcmFtZUJ1ZmZlciA9PT0gdGhpcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JlbmRlcmVyIGFscmVhZHkgYm91bmQgd2l0aCBhbm90aGVyIGZyYW1lYnVmZmVyLiBVbmJpbmQgaXQgZmlyc3QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyZXIuX19jdXJyZW50RnJhbWVCdWZmZXIgPSB0aGlzO1xyXG5cclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIF9nbC5iaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIHRoaXMuX2dldEZyYW1lQnVmZmVyR0wocmVuZGVyZXIpKTtcclxuICAgICAgICB0aGlzLl9ib3VuZFJlbmRlcmVyID0gcmVuZGVyZXI7XHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcblxyXG4gICAgICAgIGNhY2hlLnB1dCgndmlld3BvcnQnLCByZW5kZXJlci52aWV3cG9ydCk7XHJcblxyXG4gICAgICAgIHZhciBoYXNUZXh0dXJlQXR0YWNoZWQgPSBmYWxzZTtcclxuICAgICAgICB2YXIgd2lkdGg7XHJcbiAgICAgICAgdmFyIGhlaWdodDtcclxuICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMuX3RleHR1cmVzKSB7XHJcbiAgICAgICAgICAgIGhhc1RleHR1cmVBdHRhY2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XTtcclxuICAgICAgICAgICAgaWYgKG9iaikge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBEbyB3aWR0aCwgaGVpZ2h0IGNoZWNraW5nLCBtYWtlIHN1cmUgc2l6ZSBhcmUgc2FtZVxyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBvYmoudGV4dHVyZS53aWR0aDtcclxuICAgICAgICAgICAgICAgIGhlaWdodCA9IG9iai50ZXh0dXJlLmhlaWdodDtcclxuICAgICAgICAgICAgICAgIC8vIEF0dGFjaCB0ZXh0dXJlc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZG9BdHRhY2gocmVuZGVyZXIsIG9iai50ZXh0dXJlLCBhdHRhY2htZW50LCBvYmoudGFyZ2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fd2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmICghaGFzVGV4dHVyZUF0dGFjaGVkICYmIHRoaXMuZGVwdGhCdWZmZXIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignTXVzdCBhdHRhY2ggdGV4dHVyZSBiZWZvcmUgYmluZCwgb3IgcmVuZGVyYnVmZmVyIG1heSBoYXZlIGluY29ycmVjdCB3aWR0aCBhbmQgaGVpZ2h0LicpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy52aWV3cG9ydCkge1xyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCh0aGlzLnZpZXdwb3J0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQsIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXMgPSBjYWNoZS5nZXQoJ2F0dGFjaGVkX3RleHR1cmVzJyk7XHJcbiAgICAgICAgaWYgKGF0dGFjaGVkVGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiBhdHRhY2hlZFRleHR1cmVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG9EZXRhY2goX2dsLCBhdHRhY2htZW50LCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY2FjaGUuZ2V0KEtFWV9ERVBUSFRFWFRVUkVfQVRUQUNIRUQpICYmIHRoaXMuZGVwdGhCdWZmZXIpIHtcclxuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHJlbmRlciBidWZmZXJcclxuICAgICAgICAgICAgaWYgKGNhY2hlLm1pc3MoS0VZX1JFTkRFUkJVRkZFUikpIHtcclxuICAgICAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSLCBfZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJidWZmZXIgPSBjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUik7XHJcblxyXG4gICAgICAgICAgICBpZiAod2lkdGggIT09IGNhY2hlLmdldChLRVlfUkVOREVSQlVGRkVSX1dJRFRIKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IGhlaWdodCAhPT0gY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVJfSEVJR0hUKSkge1xyXG4gICAgICAgICAgICAgICAgX2dsLmJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgX2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBfZ2wuREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgY2FjaGUucHV0KEtFWV9SRU5ERVJCVUZGRVJfV0lEVEgsIHdpZHRoKTtcclxuICAgICAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSX0hFSUdIVCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgIF9nbC5iaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUl9BVFRBQ0hFRCkpIHtcclxuICAgICAgICAgICAgICAgIF9nbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgY2FjaGUucHV0KEtFWV9SRU5ERVJCVUZGRVJfQVRUQUNIRUQsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVuYmluZCB0aGUgZnJhbWUgYnVmZmVyIGFmdGVyIHJlbmRlcmluZ1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICAvLyBSZW1vdmUgc3RhdHVzIHJlY29yZCBvbiByZW5kZXJlclxyXG4gICAgICAgIHJlbmRlcmVyLl9fY3VycmVudEZyYW1lQnVmZmVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICBfZ2wuYmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBudWxsKTtcclxuICAgICAgICB0aGlzLl9ib3VuZFJlbmRlcmVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5fY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IHRoaXMuX2NhY2hlLmdldCgndmlld3BvcnQnKTtcclxuICAgICAgICAvLyBSZXNldCB2aWV3cG9ydDtcclxuICAgICAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodmlld3BvcnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVNaXBtYXAocmVuZGVyZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBCZWNhdXNlIHRoZSBkYXRhIG9mIHRleHR1cmUgaXMgY2hhbmdlZCBvdmVyIHRpbWUsXHJcbiAgICAvLyBIZXJlIHVwZGF0ZSB0aGUgbWlwbWFwcyBvZiB0ZXh0dXJlIGVhY2ggdGltZSBhZnRlciByZW5kZXJlZDtcclxuICAgIHVwZGF0ZU1pcG1hcDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gdGhpcy5fdGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgdmFyIG9iaiA9IHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgICAgICBpZiAob2JqKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IG9iai50ZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgLy8gRklYTUUgc29tZSB0ZXh0dXJlIGZvcm1hdCBjYW4ndCBnZW5lcmF0ZSBtaXBtYXBcclxuICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS5OUE9UICYmIHRleHR1cmUudXNlTWlwbWFwXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgdGV4dHVyZS5taW5GaWx0ZXIgPT09IFRleHR1cmUuTElORUFSX01JUE1BUF9MSU5FQVIpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGV4dHVyZS50ZXh0dXJlVHlwZSA9PT0gJ3RleHR1cmVDdWJlJyA/IGdsZW51bS5URVhUVVJFX0NVQkVfTUFQIDogZ2xlbnVtLlRFWFRVUkVfMkQ7XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZS5nZXRXZWJHTFRleHR1cmUocmVuZGVyZXIpKTtcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuZ2VuZXJhdGVNaXBtYXAodGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuYmluZFRleHR1cmUodGFyZ2V0LCBudWxsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG5cclxuICAgIC8vIDB4OENENSwgMzYwNTMsIEZSQU1FQlVGRkVSX0NPTVBMRVRFXHJcbiAgICAvLyAweDhDRDYsIDM2MDU0LCBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlRcclxuICAgIC8vIDB4OENENywgMzYwNTUsIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UXHJcbiAgICAvLyAweDhDRDksIDM2MDU3LCBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlNcclxuICAgIC8vIDB4OENERCwgMzYwNjEsIEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEXHJcbiAgICBjaGVja1N0YXR1czogZnVuY3Rpb24gKF9nbCkge1xyXG4gICAgICAgIHJldHVybiBfZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTF9GUkFNRUJVRkZFUik7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXRGcmFtZUJ1ZmZlckdMOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcblxyXG4gICAgICAgIGlmIChjYWNoZS5taXNzKEtFWV9GUkFNRUJVRkZFUikpIHtcclxuICAgICAgICAgICAgY2FjaGUucHV0KEtFWV9GUkFNRUJVRkZFUiwgcmVuZGVyZXIuZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KEtFWV9GUkFNRUJVRkZFUik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXR0YWNoIGEgdGV4dHVyZShSVFQpIHRvIHRoZSBmcmFtZWJ1ZmZlclxyXG4gICAgICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSB0ZXh0dXJlXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFthdHRhY2htZW50PWdsLkNPTE9SX0FUVEFDSE1FTlQwXVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbdGFyZ2V0PWdsLlRFWFRVUkVfMkRdXHJcbiAgICAgKi9cclxuICAgIGF0dGFjaDogZnVuY3Rpb24gKHRleHR1cmUsIGF0dGFjaG1lbnQsIHRhcmdldCkge1xyXG5cclxuICAgICAgICBpZiAoIXRleHR1cmUud2lkdGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdGV4dHVyZSBhdHRhY2hlZCB0byBjb2xvciBidWZmZXIgaXMgbm90IGEgdmFsaWQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE8gd2lkdGggYW5kIGhlaWdodCBjaGVja1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgZGVwdGhfdGV4dHVyZSBleHRlbnNpb24gaXMgZW5hYmxlZCwgZGV2ZWxvcGVyc1xyXG4gICAgICAgIC8vIENhbiBhdHRhY2ggYSBkZXB0aCB0ZXh0dXJlIHRvIHRoZSBkZXB0aCBidWZmZXJcclxuICAgICAgICAvLyBodHRwOi8vYmxvZy50b2ppY29kZS5jb20vMjAxMi8wNy91c2luZy13ZWJnbGRlcHRodGV4dHVyZS5odG1sXHJcbiAgICAgICAgYXR0YWNobWVudCA9IGF0dGFjaG1lbnQgfHwgR0xfQ09MT1JfQVRUQUNITUVOVDA7XHJcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0IHx8IGdsZW51bS5URVhUVVJFXzJEO1xyXG5cclxuICAgICAgICB2YXIgYm91bmRSZW5kZXJlciA9IHRoaXMuX2JvdW5kUmVuZGVyZXI7XHJcbiAgICAgICAgdmFyIF9nbCA9IGJvdW5kUmVuZGVyZXIgJiYgYm91bmRSZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgYXR0YWNoZWRUZXh0dXJlcztcclxuXHJcbiAgICAgICAgaWYgKF9nbCkge1xyXG4gICAgICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICAgICAgY2FjaGUudXNlKGJvdW5kUmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICAgICAgICAgIGF0dGFjaGVkVGV4dHVyZXMgPSBjYWNoZS5nZXQoJ2F0dGFjaGVkX3RleHR1cmVzJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDaGVjayBpZiB0ZXh0dXJlIGF0dGFjaGVkXHJcbiAgICAgICAgdmFyIHByZXZpb3VzID0gdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF07XHJcbiAgICAgICAgaWYgKHByZXZpb3VzICYmIHByZXZpb3VzLnRhcmdldCA9PT0gdGFyZ2V0XHJcbiAgICAgICAgICAgICYmIHByZXZpb3VzLnRleHR1cmUgPT09IHRleHR1cmVcclxuICAgICAgICAgICAgJiYgKGF0dGFjaGVkVGV4dHVyZXMgJiYgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSAhPSBudWxsKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2FuQXR0YWNoID0gdHJ1ZTtcclxuICAgICAgICBpZiAoYm91bmRSZW5kZXJlcikge1xyXG4gICAgICAgICAgICBjYW5BdHRhY2ggPSB0aGlzLl9kb0F0dGFjaChib3VuZFJlbmRlcmVyLCB0ZXh0dXJlLCBhdHRhY2htZW50LCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAvLyBTZXQgdmlld3BvcnQgYWdhaW4gaW5jYXNlIGF0dGFjaGVkIHRvIGRpZmZlcmVudCBzaXplIHRleHR1cmVzLlxyXG4gICAgICAgICAgICBpZiAoIXRoaXMudmlld3BvcnQpIHtcclxuICAgICAgICAgICAgICAgIGJvdW5kUmVuZGVyZXIuc2V0Vmlld3BvcnQoMCwgMCwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2FuQXR0YWNoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdID0gdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF0gfHwge307XHJcbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdLnRleHR1cmUgPSB0ZXh0dXJlO1xyXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XS50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfZG9BdHRhY2g6IGZ1bmN0aW9uIChyZW5kZXJlciwgdGV4dHVyZSwgYXR0YWNobWVudCwgdGFyZ2V0KSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0ZXh0dXJlIGlzIGFsd2F5cyB1cGRhdGVkXHJcbiAgICAgICAgLy8gQmVjYXVzZSB0ZXh0dXJlIHdpZHRoIG9yIGhlaWdodCBtYXkgYmUgY2hhbmdlZCBhbmQgaW4gdGhpcyB3ZSBjYW4ndCBiZSBub3RpZmllZFxyXG4gICAgICAgIC8vIEZJWE1FIGF3a3dhcmQ7XHJcbiAgICAgICAgdmFyIHdlYmdsVGV4dHVyZSA9IHRleHR1cmUuZ2V0V2ViR0xUZXh0dXJlKHJlbmRlcmVyKTtcclxuICAgICAgICAvLyBBc3N1bWUgY2FjaGUgaGFzIGJlZW4gdXNlZC5cclxuICAgICAgICB2YXIgYXR0YWNoZWRUZXh0dXJlcyA9IHRoaXMuX2NhY2hlLmdldCgnYXR0YWNoZWRfdGV4dHVyZXMnKTtcclxuICAgICAgICBpZiAoYXR0YWNoZWRUZXh0dXJlcyAmJiBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdKSB7XHJcbiAgICAgICAgICAgIHZhciBvYmogPSBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0ZXh0dXJlIGFuZCB0YXJnZXQgbm90IGNoYW5nZWRcclxuICAgICAgICAgICAgaWYgKG9iai50ZXh0dXJlID09PSB0ZXh0dXJlICYmIG9iai50YXJnZXQgPT09IHRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF0dGFjaG1lbnQgPSArYXR0YWNobWVudDtcclxuXHJcbiAgICAgICAgdmFyIGNhbkF0dGFjaCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGF0dGFjaG1lbnQgPT09IEdMX0RFUFRIX0FUVEFDSE1FTlQgfHwgYXR0YWNobWVudCA9PT0gZ2xlbnVtLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkge1xyXG4gICAgICAgICAgICB2YXIgZXh0ZW5zaW9uID0gcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oJ1dFQkdMX2RlcHRoX3RleHR1cmUnKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghZXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdEZXB0aCB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXInKTtcclxuICAgICAgICAgICAgICAgIGNhbkF0dGFjaCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlLmZvcm1hdCAhPT0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVFxyXG4gICAgICAgICAgICAgICAgJiYgdGV4dHVyZS5mb3JtYXQgIT09IGdsZW51bS5ERVBUSF9TVEVOQ0lMXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVGhlIHRleHR1cmUgYXR0YWNoZWQgdG8gZGVwdGggYnVmZmVyIGlzIG5vdCBhIHZhbGlkLicpO1xyXG4gICAgICAgICAgICAgICAgY2FuQXR0YWNoID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIERpc3Bvc2UgcmVuZGVyIGJ1ZmZlciBjcmVhdGVkIHByZXZpb3VzXHJcbiAgICAgICAgICAgIGlmIChjYW5BdHRhY2gpIHtcclxuICAgICAgICAgICAgICAgIHZhciByZW5kZXJidWZmZXIgPSB0aGlzLl9jYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUik7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9ERVBUSF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9nbC5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUiwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSX0FUVEFDSEVELCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5wdXQoS0VZX0RFUFRIVEVYVFVSRV9BVFRBQ0hFRCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1pcG1hcCBsZXZlbCBjYW4gb25seSBiZSAwXHJcbiAgICAgICAgX2dsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBhdHRhY2htZW50LCB0YXJnZXQsIHdlYmdsVGV4dHVyZSwgMCk7XHJcblxyXG4gICAgICAgIGlmICghYXR0YWNoZWRUZXh0dXJlcykge1xyXG4gICAgICAgICAgICBhdHRhY2hlZFRleHR1cmVzID0ge307XHJcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlLnB1dCgnYXR0YWNoZWRfdGV4dHVyZXMnLCBhdHRhY2hlZFRleHR1cmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSA9IGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0gfHwge307XHJcbiAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XS50ZXh0dXJlID0gdGV4dHVyZTtcclxuICAgICAgICBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdLnRhcmdldCA9IHRhcmdldDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNhbkF0dGFjaDtcclxuICAgIH0sXHJcblxyXG4gICAgX2RvRGV0YWNoOiBmdW5jdGlvbiAoX2dsLCBhdHRhY2htZW50LCB0YXJnZXQpIHtcclxuICAgICAgICAvLyBEZXRhY2ggYSB0ZXh0dXJlIGZyb20gZnJhbWVidWZmZXJcclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL1dlYkdML2Jsb2IvbWFzdGVyL2NvbmZvcm1hbmNlLXN1aXRlcy8xLjAuMC9jb25mb3JtYW5jZS9mcmFtZWJ1ZmZlci10ZXN0Lmh0bWwjTDE0NVxyXG4gICAgICAgIF9nbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgYXR0YWNobWVudCwgdGFyZ2V0LCBudWxsLCAwKTtcclxuXHJcbiAgICAgICAgLy8gQXNzdW1lIGNhY2hlIGhhcyBiZWVuIHVzZWQuXHJcbiAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXMgPSB0aGlzLl9jYWNoZS5nZXQoJ2F0dGFjaGVkX3RleHR1cmVzJyk7XHJcbiAgICAgICAgaWYgKGF0dGFjaGVkVGV4dHVyZXMgJiYgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSkge1xyXG4gICAgICAgICAgICBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhdHRhY2htZW50ID09PSBHTF9ERVBUSF9BVFRBQ0hNRU5UIHx8IGF0dGFjaG1lbnQgPT09IGdsZW51bS5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FjaGUucHV0KEtFWV9ERVBUSFRFWFRVUkVfQVRUQUNIRUQsIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0YWNoIGEgdGV4dHVyZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbYXR0YWNobWVudD1nbC5DT0xPUl9BVFRBQ0hNRU5UMF1cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW3RhcmdldD1nbC5URVhUVVJFXzJEXVxyXG4gICAgICovXHJcbiAgICBkZXRhY2g6IGZ1bmN0aW9uIChhdHRhY2htZW50LCB0YXJnZXQpIHtcclxuICAgICAgICAvLyBUT0RPIGRlcHRoIGV4dGVuc2lvbiBjaGVjayA/XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF0gPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLl9ib3VuZFJlbmRlcmVyKSB7XHJcbiAgICAgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG4gICAgICAgICAgICBjYWNoZS51c2UodGhpcy5fYm91bmRSZW5kZXJlci5fX3VpZF9fKTtcclxuICAgICAgICAgICAgdGhpcy5fZG9EZXRhY2godGhpcy5fYm91bmRSZW5kZXJlci5nbCwgYXR0YWNobWVudCwgdGFyZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlXHJcbiAgICAgKiBAcGFyYW0gIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IF9nbFxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG5cclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJCdWZmZXIgPSBjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUik7XHJcbiAgICAgICAgaWYgKHJlbmRlckJ1ZmZlcikge1xyXG4gICAgICAgICAgICBfZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlckJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBmcmFtZUJ1ZmZlciA9IGNhY2hlLmdldChLRVlfRlJBTUVCVUZGRVIpO1xyXG4gICAgICAgIGlmIChmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgICAgICBfZ2wuZGVsZXRlRnJhbWVidWZmZXIoZnJhbWVCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYWNoZS5kZWxldGVDb250ZXh0KHJlbmRlcmVyLl9fdWlkX18pO1xyXG5cclxuICAgICAgICAvLyBDbGVhciBjYWNoZSBmb3IgcmV1c2luZ1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmVzID0ge307XHJcblxyXG4gICAgfVxyXG59KTtcclxuXHJcbkZyYW1lQnVmZmVyLkRFUFRIX0FUVEFDSE1FTlQgPSBHTF9ERVBUSF9BVFRBQ0hNRU5UO1xyXG5GcmFtZUJ1ZmZlci5DT0xPUl9BVFRBQ0hNRU5UMCA9IEdMX0NPTE9SX0FUVEFDSE1FTlQwO1xyXG5GcmFtZUJ1ZmZlci5TVEVOQ0lMX0FUVEFDSE1FTlQgPSBnbGVudW0uU1RFTkNJTF9BVFRBQ0hNRU5UO1xyXG5GcmFtZUJ1ZmZlci5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgPSBnbGVudW0uREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRnJhbWVCdWZmZXI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2X1RleGNvb3JkID0gdGV4Y29vcmQ7XFxuIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxufVxcbkBlbmRcIjtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IE9ydGhvQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9PcnRob2dyYXBoaWMnO1xyXG5pbXBvcnQgUGxhbmUgZnJvbSAnLi4vZ2VvbWV0cnkvUGxhbmUnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBNZXNoIGZyb20gJy4uL01lc2gnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IHZlcnRleEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3ZlcnRleC5nbHNsLmpzJztcclxuXHJcblNoYWRlclsnaW1wb3J0J10odmVydGV4R2xzbCk7XHJcblxyXG52YXIgcGxhbmVHZW8gPSBuZXcgUGxhbmUoKTtcclxudmFyIG1lc2ggPSBuZXcgTWVzaCh7XHJcbiAgICBnZW9tZXRyeTogcGxhbmVHZW8sXHJcbiAgICBmcnVzdHVtQ3VsbGluZzogZmFsc2VcclxufSk7XHJcbnZhciBjYW1lcmEgPSBuZXcgT3J0aG9DYW1lcmEoKTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLlBhc3NcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBQYXNzID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLlBhc3MjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGcmFnbWVudCBzaGFkZXIgc3RyaW5nXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBQRU5ESU5HIHNoYWRlciBvciBmcmFnbWVudCA/XHJcbiAgICAgICAgZnJhZ21lbnQ6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG91dHB1dHM6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lk1hdGVyaWFsfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1hdGVyaWFsOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBibGVuZFdpdGhQcmV2aW91czogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtCb29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNsZWFyQ29sb3I6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGVhckRlcHRoOiB0cnVlXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICB2YXIgc2hhZGVyID0gbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IudmVydGV4JyksIHRoaXMuZnJhZ21lbnQpO1xyXG4gICAgdmFyIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICBzaGFkZXI6IHNoYWRlclxyXG4gICAgfSk7XHJcbiAgICBtYXRlcmlhbC5lbmFibGVUZXh0dXJlc0FsbCgpO1xyXG5cclxuICAgIHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbDtcclxuXHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLlBhc3MucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSB7fSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBzZXRVbmlmb3JtOiBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwuc2V0VW5pZm9ybShuYW1lLCB2YWx1ZSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge31cclxuICAgICAqL1xyXG4gICAgZ2V0VW5pZm9ybTogZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICAgIHZhciB1bmlmb3JtID0gdGhpcy5tYXRlcmlhbC51bmlmb3Jtc1tuYW1lXTtcclxuICAgICAgICBpZiAodW5pZm9ybSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5pZm9ybS52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmV9IHRleHR1cmVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gYXR0YWNobWVudFxyXG4gICAgICovXHJcbiAgICBhdHRhY2hPdXRwdXQ6IGZ1bmN0aW9uKHRleHR1cmUsIGF0dGFjaG1lbnQpIHtcclxuICAgICAgICBpZiAoIXRoaXMub3V0cHV0cykge1xyXG4gICAgICAgICAgICB0aGlzLm91dHB1dHMgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXR0YWNobWVudCA9IGF0dGFjaG1lbnQgfHwgZ2xlbnVtLkNPTE9SX0FUVEFDSE1FTlQwO1xyXG4gICAgICAgIHRoaXMub3V0cHV0c1thdHRhY2htZW50XSA9IHRleHR1cmU7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmV9IHRleHR1cmVcclxuICAgICAqL1xyXG4gICAgZGV0YWNoT3V0cHV0OiBmdW5jdGlvbih0ZXh0dXJlKSB7XHJcbiAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0c1thdHRhY2htZW50XSA9PT0gdGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRzW2F0dGFjaG1lbnRdID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYmluZDogZnVuY3Rpb24ocmVuZGVyZXIsIGZyYW1lQnVmZmVyKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5vdXRwdXRzW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBmcmFtZUJ1ZmZlci5hdHRhY2godGV4dHVyZSwgYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHVuYmluZDogZnVuY3Rpb24ocmVuZGVyZXIsIGZyYW1lQnVmZmVyKSB7XHJcbiAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkZyYW1lQnVmZmVyfSBbZnJhbWVCdWZmZXJdXHJcbiAgICAgKi9cclxuICAgIHJlbmRlcjogZnVuY3Rpb24ocmVuZGVyZXIsIGZyYW1lQnVmZmVyKSB7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgaWYgKGZyYW1lQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmluZChyZW5kZXJlciwgZnJhbWVCdWZmZXIpO1xyXG4gICAgICAgICAgICAvLyBNUlQgU3VwcG9ydCBpbiBjaHJvbWVcclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc2RrL3Rlc3RzL2NvbmZvcm1hbmNlL2V4dGVuc2lvbnMvZXh0LWRyYXctYnVmZmVycy5odG1sXHJcbiAgICAgICAgICAgIHZhciBleHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX2RyYXdfYnVmZmVycycpO1xyXG4gICAgICAgICAgICBpZiAoZXh0ICYmIHRoaXMub3V0cHV0cykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ1ZnMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9ICthdHRhY2htZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50ID49IF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCAmJiBhdHRhY2htZW50IDw9IF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCArIDgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnVmcy5wdXNoKGF0dGFjaG1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGV4dC5kcmF3QnVmZmVyc0VYVChidWZzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXInLCB0aGlzLCByZW5kZXJlcik7XHJcblxyXG4gICAgICAgIC8vIEZJWE1FIERvbid0IGNsZWFyIGluIGVhY2ggcGFzcyBpbiBkZWZhdWx0LCBsZXQgdGhlIGNvbG9yIG92ZXJ3cml0ZSB0aGUgYnVmZmVyXHJcbiAgICAgICAgLy8gRklYTUUgcGl4ZWxzIG1heSBiZSBkaXNjYXJkXHJcbiAgICAgICAgdmFyIGNsZWFyQml0ID0gdGhpcy5jbGVhckRlcHRoID8gX2dsLkRFUFRIX0JVRkZFUl9CSVQgOiAwO1xyXG4gICAgICAgIF9nbC5kZXB0aE1hc2sodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJDb2xvcikge1xyXG4gICAgICAgICAgICBjbGVhckJpdCA9IGNsZWFyQml0IHwgX2dsLkNPTE9SX0JVRkZFUl9CSVQ7XHJcbiAgICAgICAgICAgIF9nbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHZhciBjYyA9IHRoaXMuY2xlYXJDb2xvcjtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2MpKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuY2xlYXJDb2xvcihjY1swXSwgY2NbMV0sIGNjWzJdLCBjY1szXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgX2dsLmNsZWFyKGNsZWFyQml0KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYmxlbmRXaXRoUHJldmlvdXMpIHtcclxuICAgICAgICAgICAgLy8gQmxlbmQgd2l0aCBwcmV2aW91cyByZW5kZXJlZCBzY2VuZSBpbiB0aGUgZmluYWwgb3V0cHV0XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIENvbmZpZ3VyZSBibGVuZC5cclxuICAgICAgICAgICAgLy8gRklYTUUgSXQgd2lsbCBjYXVzZSBzY3JlZW4gYmxpbmvvvJ9cclxuICAgICAgICAgICAgX2dsLmVuYWJsZShfZ2wuQkxFTkQpO1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIF9nbC5kaXNhYmxlKF9nbC5CTEVORCk7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudHJhbnNwYXJlbnQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyUXVhZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJyZW5kZXInLCB0aGlzLCByZW5kZXJlcik7XHJcblxyXG4gICAgICAgIGlmIChmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgICAgICB0aGlzLnVuYmluZChyZW5kZXJlciwgZnJhbWVCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaW1wbHkgZG8gcXVhZCByZW5kZXJpbmdcclxuICAgICAqL1xyXG4gICAgcmVuZGVyUXVhZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgbWVzaC5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XHJcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhbbWVzaF0sIGNhbWVyYSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7fVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBhc3M7XHJcbiIsIi8vIFRPRE8gU2hvdWxkIG5vdCBkZXJpdmVkIGZyb20gbWVzaD9cclxuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XHJcbmltcG9ydCBDdWJlR2VvbWV0cnkgZnJvbSAnLi4vZ2VvbWV0cnkvQ3ViZSc7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XHJcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tICcuLi9jYW1lcmEvUGVyc3BlY3RpdmUnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5cclxuaW1wb3J0IHNreWJveEVzc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9za3lib3guZ2xzbC5qcyc7XHJcblNoYWRlci5pbXBvcnQoc2t5Ym94RXNzbCk7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wbHVnaW4uU2t5Ym94XHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICB2YXIgc2t5VGV4ID0gbmV3IGNsYXkuVGV4dHVyZUN1YmUoKTtcclxuICogICAgIHNreVRleC5sb2FkKHtcclxuICogICAgICAgICAncHgnOiAnYXNzZXRzL3RleHR1cmVzL3NreS9weC5qcGcnLFxyXG4gKiAgICAgICAgICdueCc6ICdhc3NldHMvdGV4dHVyZXMvc2t5L254LmpwZydcclxuICogICAgICAgICAncHknOiAnYXNzZXRzL3RleHR1cmVzL3NreS9weS5qcGcnXHJcbiAqICAgICAgICAgJ255JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvbnkuanBnJ1xyXG4gKiAgICAgICAgICdweic6ICdhc3NldHMvdGV4dHVyZXMvc2t5L3B6LmpwZydcclxuICogICAgICAgICAnbnonOiAnYXNzZXRzL3RleHR1cmVzL3NreS9uei5qcGcnXHJcbiAqICAgICB9KTtcclxuICogICAgIHZhciBza3lib3ggPSBuZXcgY2xheS5wbHVnaW4uU2t5Ym94KHtcclxuICogICAgICAgICBzY2VuZTogc2NlbmVcclxuICogICAgIH0pO1xyXG4gKiAgICAgc2t5Ym94Lm1hdGVyaWFsLnNldCgnZW52aXJvbm1lbnRNYXAnLCBza3lUZXgpO1xyXG4gKi9cclxudmFyIFNreWJveCA9IE1lc2guZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgc2t5Ym94U2hhZGVyID0gbmV3IFNoYWRlcih7XHJcbiAgICAgICAgdmVydGV4OiBTaGFkZXIuc291cmNlKCdjbGF5LnNreWJveC52ZXJ0ZXgnKSxcclxuICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5za3lib3guZnJhZ21lbnQnKVxyXG4gICAgfSk7XHJcbiAgICB2YXIgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgIHNoYWRlcjogc2t5Ym94U2hhZGVyLFxyXG4gICAgICAgIGRlcHRoTWFzazogZmFsc2VcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuU2NlbmV9XHJcbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucGx1Z2luLlNreWJveC5wcm90b3R5cGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBzY2VuZTogbnVsbCxcclxuXHJcbiAgICAgICAgZ2VvbWV0cnk6IG5ldyBDdWJlR2VvbWV0cnkoKSxcclxuXHJcbiAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxyXG5cclxuICAgICAgICBlbnZpcm9ubWVudE1hcDogbnVsbCxcclxuXHJcbiAgICAgICAgY3VsbGluZzogZmFsc2UsXHJcblxyXG4gICAgICAgIF9kdW1teUNhbWVyYTogbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKClcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7XHJcbiAgICBpZiAoc2NlbmUpIHtcclxuICAgICAgICB0aGlzLmF0dGFjaFNjZW5lKHNjZW5lKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmVudmlyb25tZW50TWFwKSB7XHJcbiAgICAgICAgdGhpcy5zZXRFbnZpcm9ubWVudE1hcCh0aGlzLmVudmlyb25tZW50TWFwKTtcclxuICAgIH1cclxufSwgLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5Ta3lib3gjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogQXR0YWNoIHRoZSBza3lib3ggdG8gdGhlIHNjZW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlNjZW5lfSBzY2VuZVxyXG4gICAgICovXHJcbiAgICBhdHRhY2hTY2VuZTogZnVuY3Rpb24gKHNjZW5lKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5kZXRhY2hTY2VuZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY2VuZS5za3lib3ggPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7XHJcbiAgICAgICAgc2NlbmUub24oJ2JlZm9yZXJlbmRlcicsIHRoaXMuX2JlZm9yZVJlbmRlclNjZW5lLCB0aGlzKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERldGFjaCBmcm9tIHNjZW5lXHJcbiAgICAgKi9cclxuICAgIGRldGFjaFNjZW5lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5vZmYoJ2JlZm9yZXJlbmRlcicsIHRoaXMuX2JlZm9yZVJlbmRlclNjZW5lKTtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5za3lib3ggPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIHNreWJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5kZXRhY2hTY2VuZSgpO1xyXG4gICAgICAgIHRoaXMuZ2VvbWV0cnkuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZW52aXJvbm1lbnQgbWFwXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVGV4dHVyZUN1YmV9IGVudk1hcFxyXG4gICAgICovXHJcbiAgICBzZXRFbnZpcm9ubWVudE1hcDogZnVuY3Rpb24gKGVudk1hcCkge1xyXG4gICAgICAgIGlmIChlbnZNYXAudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlMkQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwuZGVmaW5lKCdFUVVJUkVDVEFOR1VMQVInKTtcclxuICAgICAgICAgICAgLy8gTElORUFSIGZpbHRlciBjYW4gcmVtb3ZlIHRoZSBhcnRpZmFjdHMgaW4gcG9sZVxyXG4gICAgICAgICAgICBlbnZNYXAubWluRmlsdGVyID0gVGV4dHVyZS5MSU5FQVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnVuZGVmaW5lKCdFUVVJUkVDVEFOR1VMQVInKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC5zZXQoJ2Vudmlyb25tZW50TWFwJywgZW52TWFwKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBlbnZpcm9ubWVudCBtYXBcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZUN1YmV9XHJcbiAgICAgKi9cclxuICAgIGdldEVudmlyb25tZW50TWFwOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0ZXJpYWwuZ2V0KCdlbnZpcm9ubWVudE1hcCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfYmVmb3JlUmVuZGVyU2NlbmU6IGZ1bmN0aW9uKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJTa3lib3gocmVuZGVyZXIsIGNhbWVyYSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbmRlclNreWJveDogZnVuY3Rpb24gKHJlbmRlcmVyLCBjYW1lcmEpIHtcclxuICAgICAgICB2YXIgZHVtbXlDYW1lcmEgPSB0aGlzLl9kdW1teUNhbWVyYTtcclxuICAgICAgICBkdW1teUNhbWVyYS5hc3BlY3QgPSByZW5kZXJlci5nZXRWaWV3cG9ydEFzcGVjdCgpO1xyXG4gICAgICAgIGR1bW15Q2FtZXJhLmZvdiA9IGNhbWVyYS5mb3YgfHwgNTA7XHJcbiAgICAgICAgZHVtbXlDYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KGR1bW15Q2FtZXJhLmludlByb2plY3Rpb25NYXRyaXgsIGR1bW15Q2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xyXG4gICAgICAgIGR1bW15Q2FtZXJhLndvcmxkVHJhbnNmb3JtLmNvcHkoY2FtZXJhLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICBkdW1teUNhbWVyYS52aWV3TWF0cml4LmNvcHkoY2FtZXJhLnZpZXdNYXRyaXgpO1xyXG5cclxuICAgICAgICB0aGlzLnBvc2l0aW9uLmNvcHkoY2FtZXJhLmdldFdvcmxkUG9zaXRpb24oKSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgLy8gRG9uJ3QgcmVtZW1iZXIgdG8gZGlzYWJsZSBibGVuZFxyXG4gICAgICAgIHJlbmRlcmVyLmdsLmRpc2FibGUocmVuZGVyZXIuZ2wuQkxFTkQpO1xyXG4gICAgICAgIGlmICh0aGlzLm1hdGVyaWFsLmdldCgnbG9kJykgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdMT0QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ0xPRCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKFt0aGlzXSwgZHVtbXlDYW1lcmEpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNreWJveDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcblxyXG52YXIgdGFyZ2V0cyA9IFsncHgnLCAnbngnLCAncHknLCAnbnknLCAncHonLCAnbnonXTtcclxuXHJcbi8qKlxyXG4gKiBQYXNzIHJlbmRlcmluZyBzY2VuZSB0byBhIGVudmlyb25tZW50IGN1YmUgbWFwXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXBcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICogQGV4YW1wbGVcclxuICogICAgIC8vIEV4YW1wbGUgb2YgY2FyIHJlZmxlY3Rpb25cclxuICogICAgIHZhciBlbnZNYXAgPSBuZXcgY2xheS5UZXh0dXJlQ3ViZSh7XHJcbiAqICAgICAgICAgd2lkdGg6IDI1NixcclxuICogICAgICAgICBoZWlnaHQ6IDI1NlxyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgZW52UGFzcyA9IG5ldyBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAoe1xyXG4gKiAgICAgICAgIHBvc2l0aW9uOiBjYXIucG9zaXRpb24sXHJcbiAqICAgICAgICAgdGV4dHVyZTogZW52TWFwXHJcbiAqICAgICB9KTtcclxuICogICAgIHZhciBjYXJCb2R5ID0gY2FyLmdldENoaWxkQnlOYW1lKCdib2R5Jyk7XHJcbiAqICAgICBjYXJCb2R5Lm1hdGVyaWFsLmVuYWJsZVRleHR1cmUoJ2Vudmlyb25tZW50TWFwJyk7XHJcbiAqICAgICBjYXJCb2R5Lm1hdGVyaWFsLnNldCgnZW52aXJvbm1lbnRNYXAnLCBlbnZNYXApO1xyXG4gKiAgICAgLi4uXHJcbiAqICAgICBhbmltYXRpb24ub24oJ2ZyYW1lJywgZnVuY3Rpb24oZnJhbWVUaW1lKSB7XHJcbiAqICAgICAgICAgZW52UGFzcy5yZW5kZXIocmVuZGVyZXIsIHNjZW5lKTtcclxuICogICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAqICAgICB9KTtcclxuICovXHJcbnZhciBFbnZpcm9ubWVudE1hcFBhc3MgPSBCYXNlLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHZhciByZXQgPSAvKiogQGxlbmRzIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbWVyYSBwb3NpdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCNcclxuICAgICAgICAgKi9cclxuICAgICAgICBwb3NpdGlvbjogbmV3IFZlY3RvcjMoKSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW1lcmEgZmFyIHBsYW5lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAbWVtYmVyT2YgY2xheS5wcmVQYXNzLkVudmlyb25tZW50TWFwI1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZhcjogMTAwMCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW1lcmEgbmVhciBwbGFuZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCNcclxuICAgICAgICAgKi9cclxuICAgICAgICBuZWFyOiAwLjEsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRW52aXJvbm1lbnQgY3ViZSBtYXBcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlQ3ViZX1cclxuICAgICAgICAgKiBAbWVtYmVyT2YgY2xheS5wcmVQYXNzLkVudmlyb25tZW50TWFwI1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRleHR1cmU6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFVzZWQgaWYgeW91IHdhbid0IGhhdmUgc2hhZG93IGluIGVudmlyb25tZW50IG1hcFxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LnByZVBhc3MuU2hhZG93TWFwfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNoYWRvd01hcFBhc3M6IG51bGwsXHJcbiAgICB9O1xyXG4gICAgdmFyIGNhbWVyYXMgPSByZXQuX2NhbWVyYXMgPSB7XHJcbiAgICAgICAgcHg6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXHJcbiAgICAgICAgbng6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXHJcbiAgICAgICAgcHk6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXHJcbiAgICAgICAgbnk6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXHJcbiAgICAgICAgcHo6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXHJcbiAgICAgICAgbno6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSlcclxuICAgIH07XHJcbiAgICBjYW1lcmFzLnB4Lmxvb2tBdChWZWN0b3IzLlBPU0lUSVZFX1gsIFZlY3RvcjMuTkVHQVRJVkVfWSk7XHJcbiAgICBjYW1lcmFzLm54Lmxvb2tBdChWZWN0b3IzLk5FR0FUSVZFX1gsIFZlY3RvcjMuTkVHQVRJVkVfWSk7XHJcbiAgICBjYW1lcmFzLnB5Lmxvb2tBdChWZWN0b3IzLlBPU0lUSVZFX1ksIFZlY3RvcjMuUE9TSVRJVkVfWik7XHJcbiAgICBjYW1lcmFzLm55Lmxvb2tBdChWZWN0b3IzLk5FR0FUSVZFX1ksIFZlY3RvcjMuTkVHQVRJVkVfWik7XHJcbiAgICBjYW1lcmFzLnB6Lmxvb2tBdChWZWN0b3IzLlBPU0lUSVZFX1osIFZlY3RvcjMuTkVHQVRJVkVfWSk7XHJcbiAgICBjYW1lcmFzLm56Lmxvb2tBdChWZWN0b3IzLk5FR0FUSVZFX1osIFZlY3RvcjMuTkVHQVRJVkVfWSk7XHJcblxyXG4gICAgLy8gRklYTUUgSW4gd2luZG93cywgdXNlIG9uZSBmcmFtZWJ1ZmZlciBvbmx5IHJlbmRlcnMgb25lIHNpZGUgb2YgY3ViZW1hcFxyXG4gICAgcmV0Ll9mcmFtZUJ1ZmZlciA9IG5ldyBGcmFtZUJ1ZmZlcigpO1xyXG5cclxuICAgIHJldHVybiByZXQ7XHJcbn0sICAvKiogQGxlbmRzIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHRhcmdldFxyXG4gICAgICogQHJldHVybiAge2NsYXkuQ2FtZXJhfVxyXG4gICAgICovXHJcbiAgICBnZXRDYW1lcmE6IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2FtZXJhc1t0YXJnZXRdO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuU2NlbmV9IHNjZW5lXHJcbiAgICAgKiBAcGFyYW0gIHtib29sZWFufSBbbm90VXBkYXRlU2NlbmU9ZmFsc2VdXHJcbiAgICAgKi9cclxuICAgIHJlbmRlcjogZnVuY3Rpb24ocmVuZGVyZXIsIHNjZW5lLCBub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBpZiAoIW5vdFVwZGF0ZVNjZW5lKSB7XHJcbiAgICAgICAgICAgIHNjZW5lLnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUd2VhayBmb3ZcclxuICAgICAgICAvLyBodHRwOi8vdGhlLXdpdG5lc3MubmV0L25ld3MvMjAxMi8wMi9zZWFtbGVzcy1jdWJlLW1hcC1maWx0ZXJpbmcvXHJcbiAgICAgICAgdmFyIG4gPSB0aGlzLnRleHR1cmUud2lkdGg7XHJcbiAgICAgICAgdmFyIGZvdiA9IDIgKiBNYXRoLmF0YW4obiAvIChuIC0gMC41KSkgLyBNYXRoLlBJICogMTgwO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGFyZ2V0c1tpXTtcclxuICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuX2NhbWVyYXNbdGFyZ2V0XTtcclxuICAgICAgICAgICAgVmVjdG9yMy5jb3B5KGNhbWVyYS5wb3NpdGlvbiwgdGhpcy5wb3NpdGlvbik7XHJcblxyXG4gICAgICAgICAgICBjYW1lcmEuZmFyID0gdGhpcy5mYXI7XHJcbiAgICAgICAgICAgIGNhbWVyYS5uZWFyID0gdGhpcy5uZWFyO1xyXG4gICAgICAgICAgICBjYW1lcmEuZm92ID0gZm92O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hhZG93TWFwUGFzcykge1xyXG4gICAgICAgICAgICAgICAgY2FtZXJhLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBib3VuZGluZ0JveExhc3RGcmFtZVxyXG4gICAgICAgICAgICAgICAgdmFyIGJib3ggPSBzY2VuZS5nZXRCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgICAgICAgICAgYmJveC5hcHBseVRyYW5zZm9ybShjYW1lcmEudmlld01hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICBzY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUuY29weShiYm94KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYWRvd01hcFBhc3MucmVuZGVyKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5hdHRhY2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmUsIF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCxcclxuICAgICAgICAgICAgICAgIF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBFbnZpcm9ubWVudE1hcFBhc3M7XHJcbiIsImltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XHJcblxyXG4vLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2JiOTQzOTkxKHY9dnMuODUpLmFzcHhcclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3Rvamkvd2ViZ2wtdGV4dHVyZS11dGlscy9ibG9iL21hc3Rlci90ZXh0dXJlLXV0aWwvZGRzLmpzXHJcbnZhciBERFNfTUFHSUMgPSAweDIwNTM0NDQ0O1xyXG5cclxudmFyIEREU0RfQ0FQUyA9IDB4MTtcclxudmFyIEREU0RfSEVJR0hUID0gMHgyO1xyXG52YXIgRERTRF9XSURUSCA9IDB4NDtcclxudmFyIEREU0RfUElUQ0ggPSAweDg7XHJcbnZhciBERFNEX1BJWEVMRk9STUFUID0gMHgxMDAwO1xyXG52YXIgRERTRF9NSVBNQVBDT1VOVCA9IDB4MjAwMDA7XHJcbnZhciBERFNEX0xJTkVBUlNJWkUgPSAweDgwMDAwO1xyXG52YXIgRERTRF9ERVBUSCA9IDB4ODAwMDAwO1xyXG5cclxudmFyIEREU0NBUFNfQ09NUExFWCA9IDB4ODtcclxudmFyIEREU0NBUFNfTUlQTUFQID0gMHg0MDAwMDA7XHJcbnZhciBERFNDQVBTX1RFWFRVUkUgPSAweDEwMDA7XHJcblxyXG52YXIgRERTQ0FQUzJfQ1VCRU1BUCA9IDB4MjAwO1xyXG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9QT1NJVElWRVggPSAweDQwMDtcclxudmFyIEREU0NBUFMyX0NVQkVNQVBfTkVHQVRJVkVYID0gMHg4MDA7XHJcbnZhciBERFNDQVBTMl9DVUJFTUFQX1BPU0lUSVZFWSA9IDB4MTAwMDtcclxudmFyIEREU0NBUFMyX0NVQkVNQVBfTkVHQVRJVkVZID0gMHgyMDAwO1xyXG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9QT1NJVElWRVogPSAweDQwMDA7XHJcbnZhciBERFNDQVBTMl9DVUJFTUFQX05FR0FUSVZFWiA9IDB4ODAwMDtcclxudmFyIEREU0NBUFMyX1ZPTFVNRSA9IDB4MjAwMDAwO1xyXG5cclxudmFyIEREUEZfQUxQSEFQSVhFTFMgPSAweDE7XHJcbnZhciBERFBGX0FMUEhBID0gMHgyO1xyXG52YXIgRERQRl9GT1VSQ0MgPSAweDQ7XHJcbnZhciBERFBGX1JHQiA9IDB4NDA7XHJcbnZhciBERFBGX1lVViA9IDB4MjAwO1xyXG52YXIgRERQRl9MVU1JTkFOQ0UgPSAweDIwMDAwO1xyXG5cclxuZnVuY3Rpb24gZm91ckNDVG9JbnQzMih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlLmNoYXJDb2RlQXQoMCkgK1xyXG4gICAgICAgICh2YWx1ZS5jaGFyQ29kZUF0KDEpIDw8IDgpICtcclxuICAgICAgICAodmFsdWUuY2hhckNvZGVBdCgyKSA8PCAxNikgK1xyXG4gICAgICAgICh2YWx1ZS5jaGFyQ29kZUF0KDMpIDw8IDI0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW50MzJUb0ZvdXJDQyh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoXHJcbiAgICAgICAgdmFsdWUgJiAweGZmLFxyXG4gICAgICAgICh2YWx1ZSA+PiA4KSAmIDB4ZmYsXHJcbiAgICAgICAgKHZhbHVlID4+IDE2KSAmIDB4ZmYsXHJcbiAgICAgICAgKHZhbHVlID4+IDI0KSAmIDB4ZmZcclxuICAgICk7XHJcbn1cclxuXHJcbnZhciBoZWFkZXJMZW5ndGhJbnQgPSAzMTsgLy8gVGhlIGhlYWRlciBsZW5ndGggaW4gMzIgYml0IGludHNcclxuXHJcbnZhciBGT1VSQ0NfRFhUMSA9IGZvdXJDQ1RvSW50MzIoJ0RYVDEnKTtcclxudmFyIEZPVVJDQ19EWFQzID0gZm91ckNDVG9JbnQzMignRFhUMycpO1xyXG52YXIgRk9VUkNDX0RYVDUgPSBmb3VyQ0NUb0ludDMyKCdEWFQ1Jyk7XHJcbi8vIE9mZnNldHMgaW50byB0aGUgaGVhZGVyIGFycmF5XHJcbnZhciBvZmZfbWFnaWMgPSAwO1xyXG5cclxudmFyIG9mZl9zaXplID0gMTtcclxudmFyIG9mZl9mbGFncyA9IDI7XHJcbnZhciBvZmZfaGVpZ2h0ID0gMztcclxudmFyIG9mZl93aWR0aCA9IDQ7XHJcblxyXG52YXIgb2ZmX21pcG1hcENvdW50ID0gNztcclxuXHJcbnZhciBvZmZfcGZGbGFncyA9IDIwO1xyXG52YXIgb2ZmX3BmRm91ckNDID0gMjE7XHJcblxyXG52YXIgb2ZmX2NhcHMgPSAyNztcclxudmFyIG9mZl9jYXBzMiA9IDI4O1xyXG52YXIgb2ZmX2NhcHMzID0gMjk7XHJcbnZhciBvZmZfY2FwczQgPSAzMDtcclxuXHJcbnZhciByZXQgPSB7XHJcbiAgICBwYXJzZTogZnVuY3Rpb24oYXJyYXlCdWZmZXIsIG91dCkge1xyXG4gICAgICAgIHZhciBoZWFkZXIgPSBuZXcgSW50MzJBcnJheShhcnJheUJ1ZmZlciwgMCwgaGVhZGVyTGVuZ3RoSW50KTtcclxuICAgICAgICBpZiAoaGVhZGVyW29mZl9tYWdpY10gIT09IEREU19NQUdJQykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFoZWFkZXIob2ZmX3BmRmxhZ3MpICYgRERQRl9GT1VSQ0MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZm91ckNDID0gaGVhZGVyKG9mZl9wZkZvdXJDQyk7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gaGVhZGVyW29mZl93aWR0aF07XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IGhlYWRlcltvZmZfaGVpZ2h0XTtcclxuICAgICAgICB2YXIgaXNDdWJlTWFwID0gaGVhZGVyW29mZl9jYXBzMl0gJiBERFNDQVBTMl9DVUJFTUFQO1xyXG4gICAgICAgIHZhciBoYXNNaXBtYXAgPSBoZWFkZXJbb2ZmX2ZsYWdzXSAmIEREU0RfTUlQTUFQQ09VTlQ7XHJcbiAgICAgICAgdmFyIGJsb2NrQnl0ZXMsIGludGVybmFsRm9ybWF0O1xyXG4gICAgICAgIHN3aXRjaChmb3VyQ0MpIHtcclxuICAgICAgICAgICAgY2FzZSBGT1VSQ0NfRFhUMTpcclxuICAgICAgICAgICAgICAgIGJsb2NrQnl0ZXMgPSA4O1xyXG4gICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSBUZXh0dXJlLkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBGT1VSQ0NfRFhUMzpcclxuICAgICAgICAgICAgICAgIGJsb2NrQnl0ZXMgPSAxNjtcclxuICAgICAgICAgICAgICAgIGludGVybmFsRm9ybWF0ID0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEZPVVJDQ19EWFQ1OlxyXG4gICAgICAgICAgICAgICAgYmxvY2tCeXRlcyA9IDE2O1xyXG4gICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSBUZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRhdGFPZmZzZXQgPSBoZWFkZXJbb2ZmX3NpemVdICsgNDtcclxuICAgICAgICAvLyBUT0RPOiBTdXBwb3NlIGFsbCBmYWNlIGFyZSBleGlzdGVkXHJcbiAgICAgICAgdmFyIGZhY2VOdW1iZXIgPSBpc0N1YmVNYXAgPyA2IDogMTtcclxuICAgICAgICB2YXIgbWlwbWFwQ291bnQgPSAxO1xyXG4gICAgICAgIGlmIChoYXNNaXBtYXApIHtcclxuICAgICAgICAgICAgbWlwbWFwQ291bnQgPSBNYXRoLm1heCgxLCBoZWFkZXJbb2ZmX21pcG1hcENvdW50XSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZXMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGZhY2VOdW1iZXI7IGYrKykge1xyXG4gICAgICAgICAgICB2YXIgX3dpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgICAgIHZhciBfaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgICAgICB0ZXh0dXJlc1tmXSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IF93aWR0aCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogX2hlaWdodCxcclxuICAgICAgICAgICAgICAgIGZvcm1hdDogaW50ZXJuYWxGb3JtYXRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHZhciBtaXBtYXBzID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWlwbWFwQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRhdGFMZW5ndGggPSBNYXRoLm1heCg0LCBfd2lkdGgpIC8gNCAqIE1hdGgubWF4KDQsIF9oZWlnaHQpIC8gNCAqIGJsb2NrQnl0ZXM7XHJcbiAgICAgICAgICAgICAgICB2YXIgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIsIGRhdGFPZmZzZXQsIGRhdGFMZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRhdGFPZmZzZXQgKz0gZGF0YUxlbmd0aDtcclxuICAgICAgICAgICAgICAgIF93aWR0aCAqPSAwLjU7XHJcbiAgICAgICAgICAgICAgICBfaGVpZ2h0ICo9IDAuNTtcclxuICAgICAgICAgICAgICAgIG1pcG1hcHNbaV0gPSBieXRlQXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGV4dHVyZXNbZl0ucGl4ZWxzID0gbWlwbWFwc1swXTtcclxuICAgICAgICAgICAgaWYgKGhhc01pcG1hcCkge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZXNbZl0ubWlwbWFwcyA9IG1pcG1hcHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIC8vIHJldHVybiBpc0N1YmVNYXAgPyB0ZXh0dXJlcyA6IHRleHR1cmVzWzBdO1xyXG4gICAgICAgIGlmIChvdXQpIHtcclxuICAgICAgICAgICAgb3V0LndpZHRoID0gdGV4dHVyZXNbMF0ud2lkdGg7XHJcbiAgICAgICAgICAgIG91dC5oZWlnaHQgPSB0ZXh0dXJlc1swXS5oZWlnaHQ7XHJcbiAgICAgICAgICAgIG91dC5mb3JtYXQgPSB0ZXh0dXJlc1swXS5mb3JtYXQ7XHJcbiAgICAgICAgICAgIG91dC5waXhlbHMgPSB0ZXh0dXJlc1swXS5waXhlbHM7XHJcbiAgICAgICAgICAgIG91dC5taXBtYXBzID0gdGV4dHVyZXNbMF0ubWlwbWFwcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlc1swXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCByZXQ7XHJcbiIsImltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbnZhciB0b0NoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xyXG5cclxudmFyIE1JTkVMRU4gPSA4O1xyXG52YXIgTUFYRUxFTiA9IDB4N2ZmZjtcclxuZnVuY3Rpb24gcmdiZTJmbG9hdChyZ2JlLCBidWZmZXIsIG9mZnNldCwgZXhwb3N1cmUpIHtcclxuICAgIGlmIChyZ2JlWzNdID4gMCkge1xyXG4gICAgICAgIHZhciBmID0gTWF0aC5wb3coMi4wLCByZ2JlWzNdIC0gMTI4IC0gOCArIGV4cG9zdXJlKTtcclxuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMF0gPSByZ2JlWzBdICogZjtcclxuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMV0gPSByZ2JlWzFdICogZjtcclxuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMl0gPSByZ2JlWzJdICogZjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGJ1ZmZlcltvZmZzZXQgKyAwXSA9IDA7XHJcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDFdID0gMDtcclxuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMl0gPSAwO1xyXG4gICAgfVxyXG4gICAgYnVmZmVyW29mZnNldCArIDNdID0gMS4wO1xyXG4gICAgcmV0dXJuIGJ1ZmZlcjtcclxufVxyXG5cclxuZnVuY3Rpb24gdWludDgyc3RyaW5nKGFycmF5LCBvZmZzZXQsIHNpemUpIHtcclxuICAgIHZhciBzdHIgPSAnJztcclxuICAgIGZvciAodmFyIGkgPSBvZmZzZXQ7IGkgPCBzaXplOyBpKyspIHtcclxuICAgICAgICBzdHIgKz0gdG9DaGFyKGFycmF5W2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvcHlyZ2JlKHMsIHQpIHtcclxuICAgIHRbMF0gPSBzWzBdO1xyXG4gICAgdFsxXSA9IHNbMV07XHJcbiAgICB0WzJdID0gc1syXTtcclxuICAgIHRbM10gPSBzWzNdO1xyXG59XHJcblxyXG4vLyBUT0RPIDogY2hlY2tcclxuZnVuY3Rpb24gb2xkUmVhZENvbG9ycyhzY2FuLCBidWZmZXIsIG9mZnNldCwgeG1heCkge1xyXG4gICAgdmFyIHJzaGlmdCA9IDAsIHggPSAwLCBsZW4gPSB4bWF4O1xyXG4gICAgd2hpbGUgKGxlbiA+IDApIHtcclxuICAgICAgICBzY2FuW3hdWzBdID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgICAgICBzY2FuW3hdWzFdID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgICAgICBzY2FuW3hdWzJdID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgICAgICBzY2FuW3hdWzNdID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgICAgICBpZiAoc2Nhblt4XVswXSA9PT0gMSAmJiBzY2FuW3hdWzFdID09PSAxICYmIHNjYW5beF1bMl0gPT09IDEpIHtcclxuICAgICAgICAgICAgLy8gZXhwIGlzIGNvdW50IG9mIHJlcGVhdGVkIHBpeGVsc1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gKHNjYW5beF1bM10gPDwgcnNoaWZ0KSA+Pj4gMDsgaSA+IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgY29weXJnYmUoc2Nhblt4LTFdLCBzY2FuW3hdKTtcclxuICAgICAgICAgICAgICAgIHgrKztcclxuICAgICAgICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJzaGlmdCArPSA4O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHgrKztcclxuICAgICAgICAgICAgbGVuLS07XHJcbiAgICAgICAgICAgIHJzaGlmdCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9mZnNldDtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVhZENvbG9ycyhzY2FuLCBidWZmZXIsIG9mZnNldCwgeG1heCkge1xyXG4gICAgaWYgKCh4bWF4IDwgTUlORUxFTikgfCAoeG1heCA+IE1BWEVMRU4pKSB7XHJcbiAgICAgICAgcmV0dXJuIG9sZFJlYWRDb2xvcnMoc2NhbiwgYnVmZmVyLCBvZmZzZXQsIHhtYXgpO1xyXG4gICAgfVxyXG4gICAgdmFyIGkgPSBidWZmZXJbb2Zmc2V0KytdO1xyXG4gICAgaWYgKGkgIT0gMikge1xyXG4gICAgICAgIHJldHVybiBvbGRSZWFkQ29sb3JzKHNjYW4sIGJ1ZmZlciwgb2Zmc2V0IC0gMSwgeG1heCk7XHJcbiAgICB9XHJcbiAgICBzY2FuWzBdWzFdID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgIHNjYW5bMF1bMl0gPSBidWZmZXJbb2Zmc2V0KytdO1xyXG5cclxuICAgIGkgPSBidWZmZXJbb2Zmc2V0KytdO1xyXG4gICAgaWYgKCgoKHNjYW5bMF1bMl0gPDwgOCkgPj4+IDApIHwgaSkgPj4+IDAgIT09IHhtYXgpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XHJcbiAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB4bWF4Oykge1xyXG4gICAgICAgICAgICB2YXIgY29kZSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgICAgIGlmIChjb2RlID4gMTI4KSB7XHJcbiAgICAgICAgICAgICAgICBjb2RlID0gKGNvZGUgJiAxMjcpID4+PiAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY29kZS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nhblt4KytdW2ldID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvZGUtLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjYW5beCsrXVtpXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2Zmc2V0O1xyXG59XHJcblxyXG5cclxudmFyIHJldCA9IHtcclxuICAgIC8vIGh0dHA6Ly93d3cuZ3JhcGhpY3MuY29ybmVsbC5lZHUvfmJqdy9yZ2JlLmh0bWxcclxuICAgIC8vIEJsZW5kZXIgc291cmNlXHJcbiAgICAvLyBodHRwOi8vcmFkc2l0ZS5sYmwuZ292L3JhZGlhbmNlL3JlZmVyL05vdGVzL3BpY3R1cmVfZm9ybWF0Lmh0bWxcclxuICAgIHBhcnNlUkdCRTogZnVuY3Rpb24oYXJyYXlCdWZmZXIsIHRleHR1cmUsIGV4cG9zdXJlKSB7XHJcbiAgICAgICAgaWYgKGV4cG9zdXJlID09IG51bGwpIHtcclxuICAgICAgICAgICAgZXhwb3N1cmUgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGF0YSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKTtcclxuICAgICAgICB2YXIgc2l6ZSA9IGRhdGEubGVuZ3RoO1xyXG4gICAgICAgIGlmICh1aW50ODJzdHJpbmcoZGF0YSwgMCwgMikgIT09ICcjPycpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBmaW5kIGVtcHR5IGxpbmUsIG5leHQgbGluZSBpcyByZXNvbHV0aW9uIGluZm9cclxuICAgICAgICBmb3IgKHZhciBpID0gMjsgaSA8IHNpemU7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodG9DaGFyKGRhdGFbaV0pID09PSAnXFxuJyAmJiB0b0NoYXIoZGF0YVtpKzFdKSA9PT0gJ1xcbicpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpID49IHNpemUpIHsgLy8gbm90IGZvdW5kXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZmluZCByZXNvbHV0aW9uIGluZm8gbGluZVxyXG4gICAgICAgIGkgKz0gMjtcclxuICAgICAgICB2YXIgc3RyID0gJyc7XHJcbiAgICAgICAgZm9yICg7IGkgPCBzaXplOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIF9jaGFyID0gdG9DaGFyKGRhdGFbaV0pO1xyXG4gICAgICAgICAgICBpZiAoX2NoYXIgPT09ICdcXG4nKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdHIgKz0gX2NoYXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIC1ZIE0gK1ggTlxyXG4gICAgICAgIHZhciB0bXAgPSBzdHIuc3BsaXQoJyAnKTtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gcGFyc2VJbnQodG1wWzFdKTtcclxuICAgICAgICB2YXIgd2lkdGggPSBwYXJzZUludCh0bXBbM10pO1xyXG4gICAgICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZWFkIGFuZCBkZWNvZGUgYWN0dWFsIGRhdGFcclxuICAgICAgICB2YXIgb2Zmc2V0ID0gaSsxO1xyXG4gICAgICAgIHZhciBzY2FubGluZSA9IFtdO1xyXG4gICAgICAgIC8vIG1lbXplcm9cclxuICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcclxuICAgICAgICAgICAgc2NhbmxpbmVbeF0gPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHNjYW5saW5lW3hdW2pdID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcGl4ZWxzID0gbmV3IEZsb2F0MzJBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpO1xyXG4gICAgICAgIHZhciBvZmZzZXQyID0gMDtcclxuICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkQ29sb3JzKHNjYW5saW5lLCBkYXRhLCBvZmZzZXQsIHdpZHRoKTtcclxuICAgICAgICAgICAgaWYgKCFvZmZzZXQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xyXG4gICAgICAgICAgICAgICAgcmdiZTJmbG9hdChzY2FubGluZVt4XSwgcGl4ZWxzLCBvZmZzZXQyLCBleHBvc3VyZSk7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQyICs9IDQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGV4dHVyZSkge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZXh0dXJlLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgdGV4dHVyZS5waXhlbHMgPSBwaXhlbHM7XHJcbiAgICAgICAgLy8gSEFMRl9GTE9BVCBjYW4ndCB1c2UgRmxvYXQzMkFycmF5XHJcbiAgICAgICAgdGV4dHVyZS50eXBlID0gVGV4dHVyZS5GTE9BVDtcclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgcGFyc2VSR0JFRnJvbVBORzogZnVuY3Rpb24ocG5nKSB7XHJcblxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgcmV0O1xyXG4iLCJpbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgRW52aXJvbm1lbnRNYXBQYXNzIGZyb20gJy4uL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAnO1xyXG5pbXBvcnQgU2t5ZG9tZSBmcm9tICcuLi9wbHVnaW4vU2t5ZG9tZSc7XHJcbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XHJcblxyXG5pbXBvcnQgZGRzIGZyb20gJy4vZGRzJztcclxuaW1wb3J0IGhkciBmcm9tICcuL2hkcic7XHJcblxyXG4vKipcclxuICogQGFsaWFzIGNsYXkudXRpbC50ZXh0dXJlXHJcbiAqL1xyXG52YXIgdGV4dHVyZVV0aWwgPSB7XHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ3xvYmplY3R9IHBhdGhcclxuICAgICAqIEBwYXJhbSAge29iamVjdH0gW29wdGlvbl1cclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb25zdWNjZXNzXVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvbmVycm9yXVxyXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlfVxyXG4gICAgICovXHJcbiAgICBsb2FkVGV4dHVyZTogZnVuY3Rpb24gKHBhdGgsIG9wdGlvbiwgb25zdWNjZXNzLCBvbmVycm9yKSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmU7XHJcbiAgICAgICAgaWYgKHR5cGVvZihvcHRpb24pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIG9uc3VjY2VzcyA9IG9wdGlvbjtcclxuICAgICAgICAgICAgb25lcnJvciA9IG9uc3VjY2VzcztcclxuICAgICAgICAgICAgb3B0aW9uID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvcHRpb24gPSBvcHRpb24gfHwge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YocGF0aCkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXRoLm1hdGNoKC8uaGRyJC8pIHx8IG9wdGlvbi5maWxlVHlwZSA9PT0gJ2hkcicpIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgc1JHQjogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZVV0aWwuX2ZldGNoVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhkci5wYXJzZVJHQkUoZGF0YSwgdGV4dHVyZSwgb3B0aW9uLmV4cG9zdXJlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5kaXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbnN1Y2Nlc3MgJiYgb25zdWNjZXNzKHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgb25lcnJvclxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHBhdGgubWF0Y2goLy5kZHMkLykgfHwgb3B0aW9uLmZpbGVUeXBlID09PSAnZGRzJykge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlVXRpbC5fZmV0Y2hUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGRzLnBhcnNlKGRhdGEsIHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLmRpcnR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uc3VjY2VzcyAmJiBvbnN1Y2Nlc3ModGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBvbmVycm9yXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoKTtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUubG9hZChwYXRoKTtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUuc3VjY2VzcyhvbnN1Y2Nlc3MpO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5lcnJvcihvbmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgcGF0aCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mKHBhdGgucHgpICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmVDdWJlKCk7XHJcbiAgICAgICAgICAgIHRleHR1cmUubG9hZChwYXRoKTtcclxuICAgICAgICAgICAgdGV4dHVyZS5zdWNjZXNzKG9uc3VjY2Vzcyk7XHJcbiAgICAgICAgICAgIHRleHR1cmUuZXJyb3Iob25lcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIExvYWQgYSBwYW5vcmFtYSB0ZXh0dXJlIGFuZCByZW5kZXIgaXQgdG8gYSBjdWJlIG1hcFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gcGF0aFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5UZXh0dXJlQ3ViZX0gY3ViZU1hcFxyXG4gICAgICogQHBhcmFtICB7b2JqZWN0fSBbb3B0aW9uXVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW29wdGlvbi5lbmNvZGVSR0JNXVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbb3B0aW9uLmV4cG9zdXJlXVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvbnN1Y2Nlc3NdXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW29uZXJyb3JdXHJcbiAgICAgKi9cclxuICAgIGxvYWRQYW5vcmFtYTogZnVuY3Rpb24gKHJlbmRlcmVyLCBwYXRoLCBjdWJlTWFwLCBvcHRpb24sIG9uc3VjY2Vzcywgb25lcnJvcikge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZihvcHRpb24pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIG9uc3VjY2VzcyA9IG9wdGlvbjtcclxuICAgICAgICAgICAgb25lcnJvciA9IG9uc3VjY2VzcztcclxuICAgICAgICAgICAgb3B0aW9uID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvcHRpb24gPSBvcHRpb24gfHwge307XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0ZXh0dXJlVXRpbC5sb2FkVGV4dHVyZShwYXRoLCBvcHRpb24sIGZ1bmN0aW9uICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgdGV4dHVyZS5mbGlwWSA9IG9wdGlvbi5mbGlwWSB8fCBmYWxzZTtcclxuICAgICAgICAgICAgc2VsZi5wYW5vcmFtYVRvQ3ViZU1hcChyZW5kZXJlciwgdGV4dHVyZSwgY3ViZU1hcCwgb3B0aW9uKTtcclxuICAgICAgICAgICAgdGV4dHVyZS5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgb25zdWNjZXNzICYmIG9uc3VjY2VzcyhjdWJlTWFwKTtcclxuICAgICAgICB9LCBvbmVycm9yKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW5kZXIgYSBwYW5vcmFtYSB0ZXh0dXJlIHRvIGEgY3ViZSBtYXBcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmUyRH0gcGFub3JhbWFNYXBcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZUN1YmV9IGN1YmVNYXBcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtib29sZWFufSBbb3B0aW9uLmVuY29kZVJHQk1dXHJcbiAgICAgKi9cclxuICAgIHBhbm9yYW1hVG9DdWJlTWFwOiBmdW5jdGlvbiAocmVuZGVyZXIsIHBhbm9yYW1hTWFwLCBjdWJlTWFwLCBvcHRpb24pIHtcclxuICAgICAgICB2YXIgZW52aXJvbm1lbnRNYXBQYXNzID0gbmV3IEVudmlyb25tZW50TWFwUGFzcygpO1xyXG4gICAgICAgIHZhciBza3lkb21lID0gbmV3IFNreWRvbWUoe1xyXG4gICAgICAgICAgICBzY2VuZTogbmV3IFNjZW5lKClcclxuICAgICAgICB9KTtcclxuICAgICAgICBza3lkb21lLnNldEVudmlyb25tZW50TWFwKHBhbm9yYW1hTWFwKTtcclxuXHJcbiAgICAgICAgb3B0aW9uID0gb3B0aW9uIHx8IHt9O1xyXG4gICAgICAgIGlmIChvcHRpb24uZW5jb2RlUkdCTSkge1xyXG4gICAgICAgICAgICBza3lkb21lLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUkdCTV9FTkNPREUnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNoYXJlIHNSR0JcclxuICAgICAgICBjdWJlTWFwLnNSR0IgPSBwYW5vcmFtYU1hcC5zUkdCO1xyXG5cclxuICAgICAgICBlbnZpcm9ubWVudE1hcFBhc3MudGV4dHVyZSA9IGN1YmVNYXA7XHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXBQYXNzLnJlbmRlcihyZW5kZXJlciwgc2t5ZG9tZS5zY2VuZSk7XHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXBQYXNzLnRleHR1cmUgPSBudWxsO1xyXG4gICAgICAgIGVudmlyb25tZW50TWFwUGFzcy5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICByZXR1cm4gY3ViZU1hcDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGhlaWdodCBtYXAgdG8gbm9ybWFsIG1hcFxyXG4gICAgICogQHBhcmFtIHtIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fSBpbWFnZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tCdW1wPWZhbHNlXVxyXG4gICAgICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodFRvTm9ybWFsOiBmdW5jdGlvbiAoaW1hZ2UsIGNoZWNrQnVtcCkge1xyXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICB2YXIgd2lkdGggPSBjYW52YXMud2lkdGggPSBpbWFnZS53aWR0aDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gY2FudmFzLmhlaWdodCA9IGltYWdlLmhlaWdodDtcclxuICAgICAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgY2hlY2tCdW1wID0gY2hlY2tCdW1wIHx8IGZhbHNlO1xyXG4gICAgICAgIHZhciBzcmNEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICB2YXIgZHN0RGF0YSA9IGN0eC5jcmVhdGVJbWFnZURhdGEod2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcmNEYXRhLmRhdGEubGVuZ3RoOyBpICs9IDQpIHtcclxuICAgICAgICAgICAgaWYgKGNoZWNrQnVtcCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHIgPSBzcmNEYXRhLmRhdGFbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgZyA9IHNyY0RhdGEuZGF0YVtpICsgMV07XHJcbiAgICAgICAgICAgICAgICB2YXIgYiA9IHNyY0RhdGEuZGF0YVtpICsgMl07XHJcbiAgICAgICAgICAgICAgICB2YXIgZGlmZiA9IE1hdGguYWJzKHIgLSBnKSArIE1hdGguYWJzKGcgLSBiKTtcclxuICAgICAgICAgICAgICAgIGlmIChkaWZmID4gMjApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0dpdmVuIGltYWdlIGlzIG5vdCBhIGhlaWdodCBtYXAnKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gTW9kaWZpZWQgZnJvbSBodHRwOi8vbXJkb29iLmNvbS9sYWIvamF2YXNjcmlwdC9oZWlnaHQybm9ybWFsL1xyXG4gICAgICAgICAgICB2YXIgeDEsIHkxLCB4MiwgeTI7XHJcbiAgICAgICAgICAgIGlmIChpICUgKHdpZHRoICogNCkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIGxlZnQgZWRnZVxyXG4gICAgICAgICAgICAgICAgeDEgPSBzcmNEYXRhLmRhdGFbaV07XHJcbiAgICAgICAgICAgICAgICB4MiA9IHNyY0RhdGEuZGF0YVtpICsgNF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaSAlICh3aWR0aCAqIDQpID09PSAod2lkdGggLSAxKSAqIDQpIHtcclxuICAgICAgICAgICAgICAgIC8vIHJpZ2h0IGVkZ2VcclxuICAgICAgICAgICAgICAgIHgxID0gc3JjRGF0YS5kYXRhW2kgLSA0XTtcclxuICAgICAgICAgICAgICAgIHgyID0gc3JjRGF0YS5kYXRhW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgeDEgPSBzcmNEYXRhLmRhdGFbaSAtIDRdO1xyXG4gICAgICAgICAgICAgICAgeDIgPSBzcmNEYXRhLmRhdGFbaSArIDRdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaSA8IHdpZHRoICogNCkge1xyXG4gICAgICAgICAgICAgICAgLy8gdG9wIGVkZ2VcclxuICAgICAgICAgICAgICAgIHkxID0gc3JjRGF0YS5kYXRhW2ldO1xyXG4gICAgICAgICAgICAgICAgeTIgPSBzcmNEYXRhLmRhdGFbaSArIHdpZHRoICogNF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaSA+IHdpZHRoICogKGhlaWdodCAtIDEpICogNCkge1xyXG4gICAgICAgICAgICAgICAgLy8gYm90dG9tIGVkZ2VcclxuICAgICAgICAgICAgICAgIHkxID0gc3JjRGF0YS5kYXRhW2kgLSB3aWR0aCAqIDRdO1xyXG4gICAgICAgICAgICAgICAgeTIgPSBzcmNEYXRhLmRhdGFbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB5MSA9IHNyY0RhdGEuZGF0YVtpIC0gd2lkdGggKiA0XTtcclxuICAgICAgICAgICAgICAgIHkyID0gc3JjRGF0YS5kYXRhW2kgKyB3aWR0aCAqIDRdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkc3REYXRhLmRhdGFbaV0gPSAoeDEgLSB4MikgKyAxMjc7XHJcbiAgICAgICAgICAgIGRzdERhdGEuZGF0YVtpICsgMV0gPSAoeTEgLSB5MikgKyAxMjc7XHJcbiAgICAgICAgICAgIGRzdERhdGEuZGF0YVtpICsgMl0gPSAyNTU7XHJcbiAgICAgICAgICAgIGRzdERhdGEuZGF0YVtpICsgM10gPSAyNTU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoZHN0RGF0YSwgMCwgMCk7XHJcbiAgICAgICAgcmV0dXJuIGNhbnZhcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGhlaWdodCBtYXAgdG8gbm9ybWFsIG1hcFxyXG4gICAgICogQHBhcmFtIHtIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fSBpbWFnZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tCdW1wPWZhbHNlXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt0aHJlc2hvbGQ9MjBdXHJcbiAgICAgKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH1cclxuICAgICAqL1xyXG4gICAgaXNIZWlnaHRJbWFnZTogZnVuY3Rpb24gKGltZywgZG93blNjYWxlU2l6ZSwgdGhyZXNob2xkKSB7XHJcbiAgICAgICAgaWYgKCFpbWcgfHwgIWltZy53aWR0aCB8fCAhaW1nLmhlaWdodCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIHZhciBzaXplID0gZG93blNjYWxlU2l6ZSB8fCAzMjtcclxuICAgICAgICB0aHJlc2hvbGQgPSB0aHJlc2hvbGQgfHwgMjA7XHJcbiAgICAgICAgY2FudmFzLndpZHRoID0gY2FudmFzLmhlaWdodCA9IHNpemU7XHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIHNpemUsIHNpemUpO1xyXG4gICAgICAgIHZhciBzcmNEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCBzaXplLCBzaXplKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNyY0RhdGEuZGF0YS5sZW5ndGg7IGkgKz0gNCkge1xyXG4gICAgICAgICAgICB2YXIgciA9IHNyY0RhdGEuZGF0YVtpXTtcclxuICAgICAgICAgICAgdmFyIGcgPSBzcmNEYXRhLmRhdGFbaSArIDFdO1xyXG4gICAgICAgICAgICB2YXIgYiA9IHNyY0RhdGEuZGF0YVtpICsgMl07XHJcbiAgICAgICAgICAgIHZhciBkaWZmID0gTWF0aC5hYnMociAtIGcpICsgTWF0aC5hYnMoZyAtIGIpO1xyXG4gICAgICAgICAgICBpZiAoZGlmZiA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZmV0Y2hUZXh0dXJlOiBmdW5jdGlvbiAocGF0aCwgb25zdWNjZXNzLCBvbmVycm9yKSB7XHJcbiAgICAgICAgdmVuZG9yLnJlcXVlc3QuZ2V0KHtcclxuICAgICAgICAgICAgdXJsOiBwYXRoLFxyXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicsXHJcbiAgICAgICAgICAgIG9ubG9hZDogb25zdWNjZXNzLFxyXG4gICAgICAgICAgICBvbmVycm9yOiBvbmVycm9yXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgY2hlc3Nib2FyZCB0ZXh0dXJlXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFtzaXplXVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbdW5pdFNpemVdXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IFtjb2xvcjFdXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IFtjb2xvcjJdXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAqL1xyXG4gICAgY3JlYXRlQ2hlc3Nib2FyZDogZnVuY3Rpb24gKHNpemUsIHVuaXRTaXplLCBjb2xvcjEsIGNvbG9yMikge1xyXG4gICAgICAgIHNpemUgPSBzaXplIHx8IDUxMjtcclxuICAgICAgICB1bml0U2l6ZSA9IHVuaXRTaXplIHx8IDY0O1xyXG4gICAgICAgIGNvbG9yMSA9IGNvbG9yMSB8fCAnYmxhY2snO1xyXG4gICAgICAgIGNvbG9yMiA9IGNvbG9yMiB8fCAnd2hpdGUnO1xyXG5cclxuICAgICAgICB2YXIgcmVwZWF0ID0gTWF0aC5jZWlsKHNpemUgLyB1bml0U2l6ZSk7XHJcblxyXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBjYW52YXMud2lkdGggPSBzaXplO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBzaXplO1xyXG4gICAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBjdHguZmlsbFN0eWxlID0gY29sb3IyO1xyXG4gICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBzaXplLCBzaXplKTtcclxuXHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGNvbG9yMTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcGVhdDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmVwZWF0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBpc0ZpbGwgPSBqICUgMiA/IChpICUgMikgOiAoaSAlIDIgLSAxKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc0ZpbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoaSAqIHVuaXRTaXplLCBqICogdW5pdFNpemUsIHVuaXRTaXplLCB1bml0U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjYW52YXMsXHJcbiAgICAgICAgICAgIGFuaXNvdHJvcGljOiA4XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIGJsYW5rIHB1cmUgY29sb3IgMXgxIHRleHR1cmVcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gY29sb3JcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICovXHJcbiAgICBjcmVhdGVCbGFuazogZnVuY3Rpb24gKGNvbG9yKSB7XHJcbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IDE7XHJcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IDE7XHJcbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvcjtcclxuICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgMSwgMSk7XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjYW52YXNcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCB0ZXh0dXJlVXRpbDtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCIjZGVmaW5lIFNBTVBMRV9OVU1CRVIgMTAyNFxcbiNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OVxcbnVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbERpc3RyaWJ1dGlvbjtcXG51bmlmb3JtIHZlYzIgdmlld3BvcnRTaXplIDogWzUxMiwgMjU2XTtcXG5jb25zdCB2ZWMzIE4gPSB2ZWMzKDAuMCwgMC4wLCAxLjApO1xcbmNvbnN0IGZsb2F0IGZTYW1wbGVOdW1iZXIgPSBmbG9hdChTQU1QTEVfTlVNQkVSKTtcXG52ZWMzIGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQgaSwgZmxvYXQgcm91Z2huZXNzLCB2ZWMzIE4pIHtcXG4gdmVjMyBIID0gdGV4dHVyZTJEKG5vcm1hbERpc3RyaWJ1dGlvbiwgdmVjMihyb3VnaG5lc3MsIGkpKS5yZ2I7XFxuIHZlYzMgdXBWZWN0b3IgPSBhYnMoTi55KSA+IDAuOTk5ID8gdmVjMygxLjAsIDAuMCwgMC4wKSA6IHZlYzMoMC4wLCAxLjAsIDAuMCk7XFxuIHZlYzMgdGFuZ2VudFggPSBub3JtYWxpemUoY3Jvc3MoTiwgdXBWZWN0b3IpKTtcXG4gdmVjMyB0YW5nZW50WiA9IGNyb3NzKE4sIHRhbmdlbnRYKTtcXG4gcmV0dXJuIG5vcm1hbGl6ZSh0YW5nZW50WCAqIEgueCArIE4gKiBILnkgKyB0YW5nZW50WiAqIEgueik7XFxufVxcbmZsb2F0IEdfU21pdGgoZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBOb1YsIGZsb2F0IE5vTCkge1xcbiBmbG9hdCBrID0gcm91Z2huZXNzICogcm91Z2huZXNzIC8gMi4wO1xcbiBmbG9hdCBHMVYgPSBOb1YgLyAoTm9WICogKDEuMCAtIGspICsgayk7XFxuIGZsb2F0IEcxTCA9IE5vTCAvIChOb0wgKiAoMS4wIC0gaykgKyBrKTtcXG4gcmV0dXJuIEcxTCAqIEcxVjtcXG59XFxudm9pZCBtYWluKCkge1xcbiB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC8gdmlld3BvcnRTaXplO1xcbiBmbG9hdCBOb1YgPSB1di54O1xcbiBmbG9hdCByb3VnaG5lc3MgPSB1di55O1xcbiB2ZWMzIFY7XFxuIFYueCA9IHNxcnQoMS4wIC0gTm9WICogTm9WKTtcXG4gVi55ID0gMC4wO1xcbiBWLnogPSBOb1Y7XFxuIGZsb2F0IEEgPSAwLjA7XFxuIGZsb2F0IEIgPSAwLjA7XFxuIGZvciAoaW50IGkgPSAwOyBpIDwgU0FNUExFX05VTUJFUjsgaSsrKSB7XFxuIHZlYzMgSCA9IGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQoaSkgLyBmU2FtcGxlTnVtYmVyLCByb3VnaG5lc3MsIE4pO1xcbiB2ZWMzIEwgPSByZWZsZWN0KC1WLCBIKTtcXG4gZmxvYXQgTm9MID0gY2xhbXAoTC56LCAwLjAsIDEuMCk7XFxuIGZsb2F0IE5vSCA9IGNsYW1wKEgueiwgMC4wLCAxLjApO1xcbiBmbG9hdCBWb0ggPSBjbGFtcChkb3QoViwgSCksIDAuMCwgMS4wKTtcXG4gaWYgKE5vTCA+IDAuMCkge1xcbiBmbG9hdCBHID0gR19TbWl0aChyb3VnaG5lc3MsIE5vViwgTm9MKTtcXG4gZmxvYXQgR19WaXMgPSBHICogVm9IIC8gKE5vSCAqIE5vVik7XFxuIGZsb2F0IEZjID0gcG93KDEuMCAtIFZvSCwgNS4wKTtcXG4gQSArPSAoMS4wIC0gRmMpICogR19WaXM7XFxuIEIgKz0gRmMgKiBHX1ZpcztcXG4gfVxcbiB9XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMihBLCBCKSAvIGZTYW1wbGVOdW1iZXIsIDAuMCwgMS4wKTtcXG59XFxuXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiI2RlZmluZSBTSEFERVJfTkFNRSBwcmVmaWx0ZXJcXG4jZGVmaW5lIFNBTVBMRV9OVU1CRVIgMTAyNFxcbiNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OVxcbnVuaWZvcm0gbWF0NCB2aWV3SW52ZXJzZSA6IFZJRVdJTlZFUlNFO1xcbnVuaWZvcm0gc2FtcGxlckN1YmUgZW52aXJvbm1lbnRNYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsRGlzdHJpYnV0aW9uO1xcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzIDogMC41O1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZlYzMgaW1wb3J0YW5jZVNhbXBsZU5vcm1hbChmbG9hdCBpLCBmbG9hdCByb3VnaG5lc3MsIHZlYzMgTikge1xcbiB2ZWMzIEggPSB0ZXh0dXJlMkQobm9ybWFsRGlzdHJpYnV0aW9uLCB2ZWMyKHJvdWdobmVzcywgaSkpLnJnYjtcXG4gdmVjMyB1cFZlY3RvciA9IGFicyhOLnkpID4gMC45OTkgPyB2ZWMzKDEuMCwgMC4wLCAwLjApIDogdmVjMygwLjAsIDEuMCwgMC4wKTtcXG4gdmVjMyB0YW5nZW50WCA9IG5vcm1hbGl6ZShjcm9zcyhOLCB1cFZlY3RvcikpO1xcbiB2ZWMzIHRhbmdlbnRaID0gY3Jvc3MoTiwgdGFuZ2VudFgpO1xcbiByZXR1cm4gbm9ybWFsaXplKHRhbmdlbnRYICogSC54ICsgTiAqIEgueSArIHRhbmdlbnRaICogSC56KTtcXG59XFxudm9pZCBtYWluKCkge1xcbiB2ZWMzIGV5ZVBvcyA9IHZpZXdJbnZlcnNlWzNdLnh5ejtcXG4gdmVjMyBWID0gbm9ybWFsaXplKHZfV29ybGRQb3NpdGlvbiAtIGV5ZVBvcyk7XFxuIHZlYzMgTiA9IFY7XFxuIHZlYzMgcHJlZmlsdGVyZWRDb2xvciA9IHZlYzMoMC4wKTtcXG4gZmxvYXQgdG90YWxXZWlnaHQgPSAwLjA7XFxuIGZsb2F0IGZNYXhTYW1wbGVOdW1iZXIgPSBmbG9hdChTQU1QTEVfTlVNQkVSKTtcXG4gZm9yIChpbnQgaSA9IDA7IGkgPCBTQU1QTEVfTlVNQkVSOyBpKyspIHtcXG4gdmVjMyBIID0gaW1wb3J0YW5jZVNhbXBsZU5vcm1hbChmbG9hdChpKSAvIGZNYXhTYW1wbGVOdW1iZXIsIHJvdWdobmVzcywgTik7XFxuIHZlYzMgTCA9IHJlZmxlY3QoLVYsIEgpO1xcbiBmbG9hdCBOb0wgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gaWYgKE5vTCA+IDAuMCkge1xcbiBwcmVmaWx0ZXJlZENvbG9yICs9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZShlbnZpcm9ubWVudE1hcCwgTCkpLnJnYiAqIE5vTDtcXG4gdG90YWxXZWlnaHQgKz0gTm9MO1xcbiB9XFxuIH1cXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHZlYzQocHJlZmlsdGVyZWRDb2xvciAvIHRvdGFsV2VpZ2h0LCAxLjApKTtcXG59XFxuXCI7XHJcbiIsIi8vIEN1YmVtYXAgcHJlZmlsdGVyIHV0aWxpdHlcclxuLy8gaHR0cDovL3d3dy51bnJlYWxlbmdpbmUuY29tL2ZpbGVzL2Rvd25sb2Fkcy8yMDEzU2lnZ3JhcGhQcmVzZW50YXRpb25zTm90ZXMucGRmXHJcbi8vIGh0dHA6Ly9odHRwLmRldmVsb3Blci5udmlkaWEuY29tL0dQVUdlbXMzL2dwdWdlbXMzX2NoMjAuaHRtbFxyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgUGFzcyBmcm9tICcuLi9jb21wb3NpdG9yL1Bhc3MnO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcbmltcG9ydCBTa3lib3ggZnJvbSAnLi4vcGx1Z2luL1NreWJveCc7XHJcbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XHJcbmltcG9ydCBFbnZpcm9ubWVudE1hcFBhc3MgZnJvbSAnLi4vcHJlUGFzcy9FbnZpcm9ubWVudE1hcCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgdGV4dHVyZVV0aWwgZnJvbSAnLi90ZXh0dXJlJztcclxuXHJcbmltcG9ydCBpbnRlZ3JhdGVCUkRGU2hhZGVyQ29kZSBmcm9tICcuL3NoYWRlci9pbnRlZ3JhdGVCUkRGLmdsc2wuanMnO1xyXG5pbXBvcnQgcHJlZmlsdGVyRnJhZ0NvZGUgZnJvbSAnLi9zaGFkZXIvcHJlZmlsdGVyLmdsc2wuanMnO1xyXG5cclxudmFyIGN1YmVtYXBVdGlsID0ge307XHJcblxyXG52YXIgdGFyZ2V0cyA9IFsncHgnLCAnbngnLCAncHknLCAnbnknLCAncHonLCAnbnonXTtcclxuXHJcbi8vIFRPRE8gRG93bnNhbXBsZVxyXG4vKipcclxuICogQG5hbWUgY2xheS51dGlsLmN1YmVtYXAucHJlZmlsdGVyRW52aXJvbm1lbnRNYXBcclxuICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSBlbnZNYXBcclxuICogQHBhcmFtICB7T2JqZWN0fSBbdGV4dHVyZU9wdHNdXHJcbiAqIEBwYXJhbSAge251bWJlcn0gW3RleHR1cmVPcHRzLndpZHRoPTY0XVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFt0ZXh0dXJlT3B0cy5oZWlnaHQ9NjRdXHJcbiAqIEBwYXJhbSAge251bWJlcn0gW3RleHR1cmVPcHRzLnR5cGVdXHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFt0ZXh0dXJlT3B0cy5lbmNvZGVSR0JNPWZhbHNlXVxyXG4gKiBAcGFyYW0gIHtib29sZWFufSBbdGV4dHVyZU9wdHMuZGVjb2RlUkdCTT1mYWxzZV1cclxuICogQHBhcmFtICB7Y2xheS5UZXh0dXJlMkR9IFtub3JtYWxEaXN0cmlidXRpb25dXHJcbiAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZTJEfSBbYnJkZkxvb2t1cF1cclxuICovXHJcbmN1YmVtYXBVdGlsLnByZWZpbHRlckVudmlyb25tZW50TWFwID0gZnVuY3Rpb24gKFxyXG4gICAgcmVuZGVyZXIsIGVudk1hcCwgdGV4dHVyZU9wdHMsIG5vcm1hbERpc3RyaWJ1dGlvbiwgYnJkZkxvb2t1cFxyXG4pIHtcclxuICAgIC8vIE5vdCBjcmVhdGUgb3RoZXIgcmVuZGVyZXIsIGl0IGlzIGVhc3kgaGF2aW5nIGlzc3VlIG9mIGNyb3NzIHJlZmVyZW5jZSBvZiByZXNvdXJjZXMgbGlrZSBmcmFtZWJ1ZmZlclxyXG4gICAgLy8gUEVORElORyBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI/XHJcbiAgICBpZiAoIWJyZGZMb29rdXAgfHwgIW5vcm1hbERpc3RyaWJ1dGlvbikge1xyXG4gICAgICAgIG5vcm1hbERpc3RyaWJ1dGlvbiA9IGN1YmVtYXBVdGlsLmdlbmVyYXRlTm9ybWFsRGlzdHJpYnV0aW9uKCk7XHJcbiAgICAgICAgYnJkZkxvb2t1cCA9IGN1YmVtYXBVdGlsLmludGVncmF0ZUJSREYocmVuZGVyZXIsIG5vcm1hbERpc3RyaWJ1dGlvbik7XHJcbiAgICB9XHJcbiAgICB0ZXh0dXJlT3B0cyA9IHRleHR1cmVPcHRzIHx8IHt9O1xyXG5cclxuICAgIHZhciB3aWR0aCA9IHRleHR1cmVPcHRzLndpZHRoIHx8IDY0O1xyXG4gICAgdmFyIGhlaWdodCA9IHRleHR1cmVPcHRzLmhlaWdodCB8fCA2NDtcclxuXHJcbiAgICB2YXIgdGV4dHVyZVR5cGUgPSB0ZXh0dXJlT3B0cy50eXBlIHx8IGVudk1hcC50eXBlO1xyXG5cclxuICAgIC8vIFVzZSBzYW1lIHR5cGUgd2l0aCBnaXZlbiBlbnZNYXBcclxuICAgIHZhciBwcmVmaWx0ZXJlZEN1YmVNYXAgPSBuZXcgVGV4dHVyZUN1YmUoe1xyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICB0eXBlOiB0ZXh0dXJlVHlwZSxcclxuICAgICAgICBmbGlwWTogZmFsc2UsXHJcbiAgICAgICAgbWlwbWFwczogW11cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghcHJlZmlsdGVyZWRDdWJlTWFwLmlzUG93ZXJPZlR3bygpKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdXaWR0aCBhbmQgaGVpZ2h0IG11c3QgYmUgcG93ZXIgb2YgdHdvIHRvIGVuYWJsZSBtaXBtYXAuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHNpemUgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KTtcclxuICAgIHZhciBtaXBtYXBOdW0gPSBNYXRoLmxvZyhzaXplKSAvIE1hdGgubG9nKDIpICsgMTtcclxuXHJcbiAgICB2YXIgcHJlZmlsdGVyTWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcih7XHJcbiAgICAgICAgICAgIHZlcnRleDogU2hhZGVyLnNvdXJjZSgnY2xheS5za3lib3gudmVydGV4JyksXHJcbiAgICAgICAgICAgIGZyYWdtZW50OiBwcmVmaWx0ZXJGcmFnQ29kZVxyXG4gICAgICAgIH0pXHJcbiAgICB9KTtcclxuICAgIHByZWZpbHRlck1hdGVyaWFsLnNldCgnbm9ybWFsRGlzdHJpYnV0aW9uJywgbm9ybWFsRGlzdHJpYnV0aW9uKTtcclxuXHJcbiAgICB0ZXh0dXJlT3B0cy5lbmNvZGVSR0JNICYmIHByZWZpbHRlck1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUkdCTV9FTkNPREUnKTtcclxuICAgIHRleHR1cmVPcHRzLmRlY29kZVJHQk0gJiYgcHJlZmlsdGVyTWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdSR0JNX0RFQ09ERScpO1xyXG5cclxuICAgIHZhciBkdW1teVNjZW5lID0gbmV3IFNjZW5lKCk7XHJcbiAgICB2YXIgc2t5RW52O1xyXG5cclxuICAgIGlmIChlbnZNYXAudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlMkQnKSB7XHJcbiAgICAgICAgLy8gQ29udmVydCBwYW5vcmFtYSB0byBjdWJlbWFwXHJcbiAgICAgICAgdmFyIGVudkN1YmVtYXAgPSBuZXcgVGV4dHVyZUN1YmUoe1xyXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICAgICAgICAvLyBGSVhNRSBGTE9BVCB0eXBlIHdpbGwgY2F1c2UgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UIGVycm9yIG9uIGlPU1xyXG4gICAgICAgICAgICB0eXBlOiB0ZXh0dXJlVHlwZSA9PT0gVGV4dHVyZS5GTE9BVCA/XHJcbiAgICAgICAgICAgICAgICBUZXh0dXJlLkhBTEZfRkxPQVQgOiB0ZXh0dXJlVHlwZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRleHR1cmVVdGlsLnBhbm9yYW1hVG9DdWJlTWFwKHJlbmRlcmVyLCBlbnZNYXAsIGVudkN1YmVtYXAsIHtcclxuICAgICAgICAgICAgLy8gUEVORElORyBlbmNvZGVSR0JNIHNvIGl0IGNhbiBiZSBkZWNvZGVkIGFzIFJHQk1cclxuICAgICAgICAgICAgZW5jb2RlUkdCTTogdGV4dHVyZU9wdHMuZGVjb2RlUkdCTVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGVudk1hcCA9IGVudkN1YmVtYXA7XHJcbiAgICB9XHJcbiAgICBza3lFbnYgPSBuZXcgU2t5Ym94KHtcclxuICAgICAgICBzY2VuZTogZHVtbXlTY2VuZSxcclxuICAgICAgICBtYXRlcmlhbDogcHJlZmlsdGVyTWF0ZXJpYWxcclxuICAgIH0pO1xyXG4gICAgc2t5RW52Lm1hdGVyaWFsLnNldCgnZW52aXJvbm1lbnRNYXAnLCBlbnZNYXApO1xyXG5cclxuICAgIHZhciBlbnZNYXBQYXNzID0gbmV3IEVudmlyb25tZW50TWFwUGFzcyh7XHJcbiAgICAgICAgdGV4dHVyZTogcHJlZmlsdGVyZWRDdWJlTWFwXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBGb3JjZSB0byBiZSBVTlNJR05FRF9CWVRFXHJcbiAgICBpZiAodGV4dHVyZU9wdHMuZW5jb2RlUkdCTSkge1xyXG4gICAgICAgIHRleHR1cmVUeXBlID0gcHJlZmlsdGVyZWRDdWJlTWFwLnR5cGUgPSBUZXh0dXJlLlVOU0lHTkVEX0JZVEU7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJlbmRlclRhcmdldFRtcCA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICB0eXBlOiB0ZXh0dXJlVHlwZVxyXG4gICAgfSk7XHJcbiAgICB2YXIgZnJhbWVCdWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoe1xyXG4gICAgICAgIGRlcHRoQnVmZmVyOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgICB2YXIgQXJyYXlDdG9yID0gdmVuZG9yW3RleHR1cmVUeXBlID09PSBUZXh0dXJlLlVOU0lHTkVEX0JZVEUgPyAnVWludDhBcnJheScgOiAnRmxvYXQzMkFycmF5J107XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pcG1hcE51bTsgaSsrKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS50aW1lKCdwcmVmaWx0ZXInKTtcclxuICAgICAgICBwcmVmaWx0ZXJlZEN1YmVNYXAubWlwbWFwc1tpXSA9IHtcclxuICAgICAgICAgICAgcGl4ZWxzOiB7fVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgc2t5RW52Lm1hdGVyaWFsLnNldCgncm91Z2huZXNzJywgaSAvIChtaXBtYXBOdW0gLSAxKSk7XHJcblxyXG4gICAgICAgIC8vIFR3ZWFrIGZvdlxyXG4gICAgICAgIC8vIGh0dHA6Ly90aGUtd2l0bmVzcy5uZXQvbmV3cy8yMDEyLzAyL3NlYW1sZXNzLWN1YmUtbWFwLWZpbHRlcmluZy9cclxuICAgICAgICB2YXIgbiA9IHJlbmRlclRhcmdldFRtcC53aWR0aDtcclxuICAgICAgICB2YXIgZm92ID0gMiAqIE1hdGguYXRhbihuIC8gKG4gLSAwLjUpKSAvIE1hdGguUEkgKiAxODA7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGFyZ2V0cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICB2YXIgcGl4ZWxzID0gbmV3IEFycmF5Q3RvcihyZW5kZXJUYXJnZXRUbXAud2lkdGggKiByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0ICogNCk7XHJcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChyZW5kZXJUYXJnZXRUbXApO1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBjYW1lcmEgPSBlbnZNYXBQYXNzLmdldENhbWVyYSh0YXJnZXRzW2pdKTtcclxuICAgICAgICAgICAgY2FtZXJhLmZvdiA9IGZvdjtcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyKGR1bW15U2NlbmUsIGNhbWVyYSk7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLmdsLnJlYWRQaXhlbHMoXHJcbiAgICAgICAgICAgICAgICAwLCAwLCByZW5kZXJUYXJnZXRUbXAud2lkdGgsIHJlbmRlclRhcmdldFRtcC5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBUZXh0dXJlLlJHQkEsIHRleHR1cmVUeXBlLCBwaXhlbHNcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgLy8gdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgICAgICAvLyBjYW52YXMud2lkdGggPSByZW5kZXJUYXJnZXRUbXAud2lkdGg7XHJcbiAgICAgICAgICAgIC8vIGNhbnZhcy5oZWlnaHQgPSByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0O1xyXG4gICAgICAgICAgICAvLyB2YXIgaW1hZ2VEYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YShyZW5kZXJUYXJnZXRUbXAud2lkdGgsIHJlbmRlclRhcmdldFRtcC5oZWlnaHQpO1xyXG4gICAgICAgICAgICAvLyBmb3IgKHZhciBrID0gMDsgayA8IHBpeGVscy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAvLyAgICAgaW1hZ2VEYXRhLmRhdGFba10gPSBwaXhlbHNba107XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgLy8gY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xyXG4gICAgICAgICAgICAvLyBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNhbnZhcyk7XHJcblxyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICBwcmVmaWx0ZXJlZEN1YmVNYXAubWlwbWFwc1tpXS5waXhlbHNbdGFyZ2V0c1tqXV0gPSBwaXhlbHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXJUYXJnZXRUbXAud2lkdGggLz0gMjtcclxuICAgICAgICByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0IC89IDI7XHJcbiAgICAgICAgcmVuZGVyVGFyZ2V0VG1wLmRpcnR5KCk7XHJcbiAgICAgICAgLy8gY29uc29sZS50aW1lRW5kKCdwcmVmaWx0ZXInKTtcclxuICAgIH1cclxuXHJcbiAgICBmcmFtZUJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIHJlbmRlclRhcmdldFRtcC5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIHNreUVudi5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIC8vIFJlbW92ZSBncHUgcmVzb3VyY2UgYWxsdWNhdGVkIGluIHJlbmRlcmVyXHJcbiAgICBub3JtYWxEaXN0cmlidXRpb24uZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgLy8gcmVuZGVyZXIuZGlzcG9zZSgpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXA6IHByZWZpbHRlcmVkQ3ViZU1hcCxcclxuICAgICAgICBicmRmTG9va3VwOiBicmRmTG9va3VwLFxyXG4gICAgICAgIG5vcm1hbERpc3RyaWJ1dGlvbjogbm9ybWFsRGlzdHJpYnV0aW9uLFxyXG4gICAgICAgIG1heE1pcG1hcExldmVsOiBtaXBtYXBOdW1cclxuICAgIH07XHJcbn07XHJcblxyXG5jdWJlbWFwVXRpbC5pbnRlZ3JhdGVCUkRGID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBub3JtYWxEaXN0cmlidXRpb24pIHtcclxuICAgIG5vcm1hbERpc3RyaWJ1dGlvbiA9IG5vcm1hbERpc3RyaWJ1dGlvbiB8fCBjdWJlbWFwVXRpbC5nZW5lcmF0ZU5vcm1hbERpc3RyaWJ1dGlvbigpO1xyXG4gICAgdmFyIGZyYW1lYnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKHtcclxuICAgICAgICBkZXB0aEJ1ZmZlcjogZmFsc2VcclxuICAgIH0pO1xyXG4gICAgdmFyIHBhc3MgPSBuZXcgUGFzcyh7XHJcbiAgICAgICAgZnJhZ21lbnQ6IGludGVncmF0ZUJSREZTaGFkZXJDb2RlXHJcbiAgICB9KTtcclxuXHJcbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgIHdpZHRoOiA1MTIsXHJcbiAgICAgICAgaGVpZ2h0OiAyNTYsXHJcbiAgICAgICAgdHlwZTogVGV4dHVyZS5IQUxGX0ZMT0FULFxyXG4gICAgICAgIHdyYXBTOiBUZXh0dXJlLkNMQU1QX1RPX0VER0UsXHJcbiAgICAgICAgd3JhcFQ6IFRleHR1cmUuQ0xBTVBfVE9fRURHRSxcclxuICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICBtYWdGaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICB1c2VNaXBtYXA6IGZhbHNlXHJcbiAgICB9KTtcclxuICAgIHBhc3Muc2V0VW5pZm9ybSgnbm9ybWFsRGlzdHJpYnV0aW9uJywgbm9ybWFsRGlzdHJpYnV0aW9uKTtcclxuICAgIHBhc3Muc2V0VW5pZm9ybSgndmlld3BvcnRTaXplJywgWzUxMiwgMjU2XSk7XHJcbiAgICBwYXNzLmF0dGFjaE91dHB1dCh0ZXh0dXJlKTtcclxuICAgIHBhc3MucmVuZGVyKHJlbmRlcmVyLCBmcmFtZWJ1ZmZlcik7XHJcblxyXG4gICAgLy8gRklYTUUgT25seSBjaHJvbWUgYW5kIGZpcmVmb3ggY2FuIHJlYWRQaXhlbHMgd2l0aCBmbG9hdCB0eXBlLlxyXG4gICAgLy8gZnJhbWVidWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAvLyB2YXIgcGl4ZWxzID0gbmV3IEZsb2F0MzJBcnJheSg1MTIgKiAyNTYgKiA0KTtcclxuICAgIC8vIHJlbmRlcmVyLmdsLnJlYWRQaXhlbHMoXHJcbiAgICAvLyAgICAgMCwgMCwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQsXHJcbiAgICAvLyAgICAgVGV4dHVyZS5SR0JBLCBUZXh0dXJlLkZMT0FULCBwaXhlbHNcclxuICAgIC8vICk7XHJcbiAgICAvLyB0ZXh0dXJlLnBpeGVscyA9IHBpeGVscztcclxuICAgIC8vIHRleHR1cmUuZmxpcFkgPSBmYWxzZTtcclxuICAgIC8vIHRleHR1cmUuZGlydHkoKTtcclxuICAgIC8vIGZyYW1lYnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgZnJhbWVidWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgcmV0dXJuIHRleHR1cmU7XHJcbn07XHJcblxyXG5jdWJlbWFwVXRpbC5nZW5lcmF0ZU5vcm1hbERpc3RyaWJ1dGlvbiA9IGZ1bmN0aW9uIChyb3VnaG5lc3NMZXZlbHMsIHNhbXBsZVNpemUpIHtcclxuXHJcbiAgICAvLyBodHRwOi8vaG9sZ2VyLmRhbW1lcnR6Lm9yZy9zdHVmZi9ub3Rlc19IYW1tZXJzbGV5T25IZW1pc3BoZXJlLmh0bWxcclxuICAgIC8vIEdMU0wgbm90IHN1cHBvcnQgYml0IG9wZXJhdGlvbiwgdXNlIGxvb2t1cCBpbnN0ZWFkXHJcbiAgICAvLyBWIC0+IGkgLyBOLCBVIC0+IHJvdWdobmVzc1xyXG4gICAgdmFyIHJvdWdobmVzc0xldmVscyA9IHJvdWdobmVzc0xldmVscyB8fCAyNTY7XHJcbiAgICB2YXIgc2FtcGxlU2l6ZSA9IHNhbXBsZVNpemUgfHwgMTAyNDtcclxuXHJcbiAgICB2YXIgbm9ybWFsRGlzdHJpYnV0aW9uID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgd2lkdGg6IHJvdWdobmVzc0xldmVscyxcclxuICAgICAgICBoZWlnaHQ6IHNhbXBsZVNpemUsXHJcbiAgICAgICAgdHlwZTogVGV4dHVyZS5GTE9BVCxcclxuICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICBtYWdGaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICB3cmFwUzogVGV4dHVyZS5DTEFNUF9UT19FREdFLFxyXG4gICAgICAgIHdyYXBUOiBUZXh0dXJlLkNMQU1QX1RPX0VER0UsXHJcbiAgICAgICAgdXNlTWlwbWFwOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgICB2YXIgcGl4ZWxzID0gbmV3IEZsb2F0MzJBcnJheShzYW1wbGVTaXplICogcm91Z2huZXNzTGV2ZWxzICogNCk7XHJcbiAgICB2YXIgdG1wID0gW107XHJcblxyXG4gICAgLy8gZnVuY3Rpb24gc29ydEZ1bmMoYSwgYikge1xyXG4gICAgLy8gICAgIHJldHVybiBNYXRoLmFicyhiKSAtIE1hdGguYWJzKGEpO1xyXG4gICAgLy8gfVxyXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCByb3VnaG5lc3NMZXZlbHM7IGorKykge1xyXG4gICAgICAgIHZhciByb3VnaG5lc3MgPSBqIC8gcm91Z2huZXNzTGV2ZWxzO1xyXG4gICAgICAgIHZhciBhID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNhbXBsZVNpemU7IGkrKykge1xyXG4gICAgICAgICAgICAvLyBodHRwOi8vaG9sZ2VyLmRhbW1lcnR6Lm9yZy9zdHVmZi9ub3Rlc19IYW1tZXJzbGV5T25IZW1pc3BoZXJlLmh0bWxcclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT3BlcmF0b3JzL0JpdHdpc2VfT3BlcmF0b3JzXHJcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTkwODQ5Mi91bnNpZ25lZC1pbnRlZ2VyLWluLWphdmFzY3JpcHRcclxuICAgICAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xODIyMzUwL3doYXQtaXMtdGhlLWphdmFzY3JpcHQtb3BlcmF0b3ItYW5kLWhvdy1kby15b3UtdXNlLWl0XHJcbiAgICAgICAgICAgIHZhciB5ID0gKGkgPDwgMTYgfCBpID4+PiAxNikgPj4+IDA7XHJcbiAgICAgICAgICAgIHkgPSAoKHkgJiAxNDMxNjU1NzY1KSA8PCAxIHwgKHkgJiAyODYzMzExNTMwKSA+Pj4gMSkgPj4+IDA7XHJcbiAgICAgICAgICAgIHkgPSAoKHkgJiA4NTg5OTM0NTkpIDw8IDIgfCAoeSAmIDM0MzU5NzM4MzYpID4+PiAyKSA+Pj4gMDtcclxuICAgICAgICAgICAgeSA9ICgoeSAmIDI1MjY0NTEzNSkgPDwgNCB8ICh5ICYgNDA0MjMyMjE2MCkgPj4+IDQpID4+PiAwO1xyXG4gICAgICAgICAgICB5ID0gKCgoeSAmIDE2NzExOTM1KSA8PCA4IHwgKHkgJiA0Mjc4MjU1MzYwKSA+Pj4gOCkgPj4+IDApIC8gNDI5NDk2NzI5NjtcclxuXHJcbiAgICAgICAgICAgIC8vIENERlxyXG4gICAgICAgICAgICB2YXIgY29zVGhldGEgPSBNYXRoLnNxcnQoKDEgLSB5KSAvICgxICsgKGEgKiBhIC0gMS4wKSAqIHkpKTtcclxuICAgICAgICAgICAgdG1wW2ldID0gY29zVGhldGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNhbXBsZVNpemU7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gKGkgKiByb3VnaG5lc3NMZXZlbHMgKyBqKSAqIDQ7XHJcbiAgICAgICAgICAgIHZhciBjb3NUaGV0YSA9IHRtcFtpXTtcclxuICAgICAgICAgICAgdmFyIHNpblRoZXRhID0gTWF0aC5zcXJ0KDEuMCAtIGNvc1RoZXRhICogY29zVGhldGEpO1xyXG4gICAgICAgICAgICB2YXIgeCA9IGkgLyBzYW1wbGVTaXplO1xyXG4gICAgICAgICAgICB2YXIgcGhpID0gMi4wICogTWF0aC5QSSAqIHg7XHJcbiAgICAgICAgICAgIHBpeGVsc1tvZmZzZXRdID0gc2luVGhldGEgKiBNYXRoLmNvcyhwaGkpO1xyXG4gICAgICAgICAgICBwaXhlbHNbb2Zmc2V0ICsgMV0gPSBjb3NUaGV0YTtcclxuICAgICAgICAgICAgcGl4ZWxzW29mZnNldCArIDJdID0gc2luVGhldGEgKiBNYXRoLnNpbihwaGkpO1xyXG4gICAgICAgICAgICBwaXhlbHNbb2Zmc2V0ICsgM10gPSAxLjA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbm9ybWFsRGlzdHJpYnV0aW9uLnBpeGVscyA9IHBpeGVscztcclxuXHJcbiAgICByZXR1cm4gbm9ybWFsRGlzdHJpYnV0aW9uO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY3ViZW1hcFV0aWw7XHJcbiIsIi8vIGh0dHBzOi8vZG9jcy51bnJlYWxlbmdpbmUuY29tL2xhdGVzdC9JTlQvRW5naW5lL1JlbmRlcmluZy9MaWdodGluZ0FuZFNoYWRvd3MvQW1iaWVudEN1YmVtYXAvXHJcbmltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcbmltcG9ydCBjdWJlbWFwVXRpbCBmcm9tICcuLi91dGlsL2N1YmVtYXAnO1xyXG5cclxuLyoqXHJcbiAqIEFtYmllbnQgY3ViZW1hcCBsaWdodCBwcm92aWRlcyBzcGVjdWxhciBwYXJ0cyBvZiBJbWFnZSBCYXNlZCBMaWdodGluZy5cclxuICogV2hpY2ggaXMgYSBiYXNpYyByZXF1aXJlbWVudCBmb3IgUGh5c2ljYWxseSBCYXNlZCBSZW5kZXJpbmdcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuQW1iaWVudEN1YmVtYXBcclxuICogQGV4dGVuZHMgY2xheS5MaWdodFxyXG4gKi9cclxudmFyIEFtYmllbnRDdWJlbWFwTGlnaHQgPSBMaWdodC5leHRlbmQoe1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVGV4dHVyZUN1YmV9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5BbWJpZW50Q3ViZW1hcCNcclxuICAgICAqL1xyXG4gICAgY3ViZW1hcDogbnVsbCxcclxuXHJcbiAgICAvLyBUT0RPXHJcbiAgICAvLyByYW5nZTogMTAwLFxyXG5cclxuICAgIGNhc3RTaGFkb3c6IGZhbHNlLFxyXG5cclxuICAgIF9ub3JtYWxEaXN0cmlidXRpb246IG51bGwsXHJcbiAgICBfYnJkZkxvb2t1cDogbnVsbFxyXG5cclxufSwgLyoqIEBsZW5kcyBjbGF5LmxpZ2h0LkFtYmllbnRDdWJlbWFwIyAqLyB7XHJcblxyXG4gICAgdHlwZTogJ0FNQklFTlRfQ1VCRU1BUF9MSUdIVCcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEbyBwcmVmaXRlcmluZyB0aGUgY3ViZW1hcFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTMyXVxyXG4gICAgICovXHJcbiAgICBwcmVmaWx0ZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2l6ZSkge1xyXG4gICAgICAgIGlmICghcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oJ0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QnKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RldmljZSBub3Qgc3VwcG9ydCB0ZXh0dXJlQ3ViZUxvZEVYVCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5fYnJkZkxvb2t1cCkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3JtYWxEaXN0cmlidXRpb24gPSBjdWJlbWFwVXRpbC5nZW5lcmF0ZU5vcm1hbERpc3RyaWJ1dGlvbigpO1xyXG4gICAgICAgICAgICB0aGlzLl9icmRmTG9va3VwID0gY3ViZW1hcFV0aWwuaW50ZWdyYXRlQlJERihyZW5kZXJlciwgdGhpcy5fbm9ybWFsRGlzdHJpYnV0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGN1YmVtYXAgPSB0aGlzLmN1YmVtYXA7XHJcbiAgICAgICAgaWYgKGN1YmVtYXAuX19wcmVmaWx0ZXJlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcmVzdWx0ID0gY3ViZW1hcFV0aWwucHJlZmlsdGVyRW52aXJvbm1lbnRNYXAoXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLCBjdWJlbWFwLCB7XHJcbiAgICAgICAgICAgICAgICBlbmNvZGVSR0JNOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHNpemUsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHNpemVcclxuICAgICAgICAgICAgfSwgdGhpcy5fbm9ybWFsRGlzdHJpYnV0aW9uLCB0aGlzLl9icmRmTG9va3VwXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmN1YmVtYXAgPSByZXN1bHQuZW52aXJvbm1lbnRNYXA7XHJcbiAgICAgICAgdGhpcy5jdWJlbWFwLl9fcHJlZmlsdGVyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBjdWJlbWFwLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRCUkRGTG9va3VwOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JyZGZMb29rdXA7XHJcbiAgICB9LFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBhbWJpZW50Q3ViZW1hcExpZ2h0Q29sb3I6IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSppbnRlbnNpdHksIGNvbG9yWzFdKmludGVuc2l0eSwgY29sb3JbMl0qaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGFtYmllbnRDdWJlbWFwTGlnaHRDdWJlbWFwOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICd0JyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmN1YmVtYXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBhbWJpZW50Q3ViZW1hcExpZ2h0QlJERkxvb2t1cDoge1xyXG4gICAgICAgICAgICB0eXBlOiAndCcsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5fYnJkZkxvb2t1cDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAbmFtZSBjbG9uZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5BbWJpZW50Q3ViZW1hcH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LkFtYmllbnRDdWJlbWFwLnByb3RvdHlwZVxyXG4gICAgICovXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW1iaWVudEN1YmVtYXBMaWdodDtcclxuIiwiaW1wb3J0IExpZ2h0IGZyb20gJy4uL0xpZ2h0JztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XHJcblxyXG4vKipcclxuICogU3BoZXJpY2FsIEhhcm1vbmljIEFtYmllbnQgTGlnaHRcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuQW1iaWVudFNIXHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICovXHJcbnZhciBBbWJpZW50U0hMaWdodCA9IExpZ2h0LmV4dGVuZCh7XHJcblxyXG4gICAgY2FzdFNoYWRvdzogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGhlcmljYWwgSGFybW9uaWMgQ29lZmZpY2llbnRzXHJcbiAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5BbWJpZW50U0gjXHJcbiAgICAgKi9cclxuICAgIGNvZWZmaWNpZW50czogW10sXHJcblxyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9jb2VmZmljaWVudHNUbXBBcnIgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSg5ICogMyk7XHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnQU1CSUVOVF9TSF9MSUdIVCcsXHJcblxyXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xyXG4gICAgICAgIGFtYmllbnRTSExpZ2h0Q29sb3I6IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSAqIGludGVuc2l0eSwgY29sb3JbMV0gKiBpbnRlbnNpdHksIGNvbG9yWzJdICogaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2VmZmljaWVudHNUbXBBcnIgPSBpbnN0YW5jZS5fY29lZmZpY2llbnRzVG1wQXJyO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnN0YW5jZS5jb2VmZmljaWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2VmZmljaWVudHNUbXBBcnJbaV0gPSBpbnN0YW5jZS5jb2VmZmljaWVudHNbaV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29lZmZpY2llbnRzVG1wQXJyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBuYW1lIGNsb25lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmxpZ2h0LkFtYmllbnR9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5BbWJpZW50LnByb3RvdHlwZVxyXG4gICAgICovXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW1iaWVudFNITGlnaHQ7XHJcbiIsImltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4uL2NvcmUvdXRpbCc7XHJcblxyXG52YXIgVGV4dHVyZVBvb2wgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdGhpcy5fcG9vbCA9IHt9O1xyXG5cclxuICAgIHRoaXMuX2FsbG9jYXRlZFRleHR1cmVzID0gW107XHJcbn07XHJcblxyXG5UZXh0dXJlUG9vbC5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IFRleHR1cmVQb29sLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24gKHBhcmFtZXRlcnMpIHtcclxuICAgICAgICB2YXIga2V5ID0gZ2VuZXJhdGVLZXkocGFyYW1ldGVycyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wb29sLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcG9vbFtrZXldID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsaXN0ID0gdGhpcy5fcG9vbFtrZXldO1xyXG4gICAgICAgIGlmICghbGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICB0aGlzLl9hbGxvY2F0ZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxpc3QucG9wKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIHB1dDogZnVuY3Rpb24gKHRleHR1cmUpIHtcclxuICAgICAgICB2YXIga2V5ID0gZ2VuZXJhdGVLZXkodGV4dHVyZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wb29sLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcG9vbFtrZXldID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsaXN0ID0gdGhpcy5fcG9vbFtrZXldO1xyXG4gICAgICAgIGxpc3QucHVzaCh0ZXh0dXJlKTtcclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXI6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXNbaV0uZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3Bvb2wgPSB7fTtcclxuICAgICAgICB0aGlzLl9hbGxvY2F0ZWRUZXh0dXJlcyA9IFtdO1xyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIGRlZmF1bHRQYXJhbXMgPSB7XHJcbiAgICB3aWR0aDogNTEyLFxyXG4gICAgaGVpZ2h0OiA1MTIsXHJcbiAgICB0eXBlOiBnbGVudW0uVU5TSUdORURfQllURSxcclxuICAgIGZvcm1hdDogZ2xlbnVtLlJHQkEsXHJcbiAgICB3cmFwUzogZ2xlbnVtLkNMQU1QX1RPX0VER0UsXHJcbiAgICB3cmFwVDogZ2xlbnVtLkNMQU1QX1RPX0VER0UsXHJcbiAgICBtaW5GaWx0ZXI6IGdsZW51bS5MSU5FQVJfTUlQTUFQX0xJTkVBUixcclxuICAgIG1hZ0ZpbHRlcjogZ2xlbnVtLkxJTkVBUixcclxuICAgIHVzZU1pcG1hcDogdHJ1ZSxcclxuICAgIGFuaXNvdHJvcGljOiAxLFxyXG4gICAgZmxpcFk6IHRydWUsXHJcbiAgICB1bnBhY2tBbGlnbm1lbnQ6IDQsXHJcbiAgICBwcmVtdWx0aXBseUFscGhhOiBmYWxzZVxyXG59O1xyXG5cclxudmFyIGRlZmF1bHRQYXJhbVByb3BMaXN0ID0gT2JqZWN0LmtleXMoZGVmYXVsdFBhcmFtcyk7XHJcblxyXG5mdW5jdGlvbiBnZW5lcmF0ZUtleShwYXJhbWV0ZXJzKSB7XHJcbiAgICB1dGlsLmRlZmF1bHRzV2l0aFByb3BMaXN0KHBhcmFtZXRlcnMsIGRlZmF1bHRQYXJhbXMsIGRlZmF1bHRQYXJhbVByb3BMaXN0KTtcclxuICAgIGZhbGxCYWNrKHBhcmFtZXRlcnMpO1xyXG5cclxuICAgIHZhciBrZXkgPSAnJztcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVmYXVsdFBhcmFtUHJvcExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgbmFtZSA9IGRlZmF1bHRQYXJhbVByb3BMaXN0W2ldO1xyXG4gICAgICAgIHZhciBjaHVuayA9IHBhcmFtZXRlcnNbbmFtZV0udG9TdHJpbmcoKTtcclxuICAgICAgICBrZXkgKz0gY2h1bms7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ga2V5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBmYWxsQmFjayh0YXJnZXQpIHtcclxuXHJcbiAgICB2YXIgSVBPVCA9IGlzUG93ZXJPZlR3byh0YXJnZXQud2lkdGgsIHRhcmdldC5oZWlnaHQpO1xyXG5cclxuICAgIGlmICh0YXJnZXQuZm9ybWF0ID09PSBnbGVudW0uREVQVEhfQ09NUE9ORU5UKSB7XHJcbiAgICAgICAgdGFyZ2V0LnVzZU1pcG1hcCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghSVBPVCB8fCAhdGFyZ2V0LnVzZU1pcG1hcCkge1xyXG4gICAgICAgIGlmICh0YXJnZXQubWluRmlsdGVyID09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUIHx8XHJcbiAgICAgICAgICAgIHRhcmdldC5taW5GaWx0ZXIgPT0gZ2xlbnVtLk5FQVJFU1RfTUlQTUFQX0xJTkVBUikge1xyXG4gICAgICAgICAgICB0YXJnZXQubWluRmlsdGVyID0gZ2xlbnVtLk5FQVJFU1Q7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgdGFyZ2V0Lm1pbkZpbHRlciA9PSBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVIgfHxcclxuICAgICAgICAgICAgdGFyZ2V0Lm1pbkZpbHRlciA9PSBnbGVudW0uTElORUFSX01JUE1BUF9ORUFSRVNUXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRhcmdldC5taW5GaWx0ZXIgPSBnbGVudW0uTElORUFSO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghSVBPVCkge1xyXG4gICAgICAgIHRhcmdldC53cmFwUyA9IGdsZW51bS5DTEFNUF9UT19FREdFO1xyXG4gICAgICAgIHRhcmdldC53cmFwVCA9IGdsZW51bS5DTEFNUF9UT19FREdFO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1Bvd2VyT2ZUd28od2lkdGgsIGhlaWdodCkge1xyXG4gICAgcmV0dXJuICh3aWR0aCAmICh3aWR0aC0xKSkgPT09IDAgJiZcclxuICAgICAgICAgICAgKGhlaWdodCAmIChoZWlnaHQtMSkpID09PSAwO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlUG9vbDtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuc20uZGVwdGgudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA9IHZlYzIoMS4wLCAxLjApO1xcbnVuaWZvcm0gdmVjMiB1dk9mZnNldCA9IHZlYzIoMC4wLCAwLjApO1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52YXJ5aW5nIHZlYzQgdl9WaWV3UG9zaXRpb247XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudm9pZCBtYWluKCl7XFxuIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiNlbmRpZlxcbiB2X1ZpZXdQb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG4gZ2xfUG9zaXRpb24gPSB2X1ZpZXdQb3NpdGlvbjtcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkICogdXZSZXBlYXQgKyB1dk9mZnNldDtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zbS5kZXB0aC5mcmFnbWVudFxcbnZhcnlpbmcgdmVjNCB2X1ZpZXdQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIGZsb2F0IGJpYXMgOiAwLjAwMTtcXG51bmlmb3JtIGZsb2F0IHNsb3BlU2NhbGUgOiAxLjA7XFxudW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XFxudW5pZm9ybSBmbG9hdCBhbHBoYUN1dG9mZjogMC4wO1xcbkBpbXBvcnQgY2xheS51dGlsLmVuY29kZV9mbG9hdFxcbnZvaWQgbWFpbigpe1xcbiBmbG9hdCBkZXB0aCA9IHZfVmlld1Bvc2l0aW9uLnogLyB2X1ZpZXdQb3NpdGlvbi53O1xcbiBpZiAoYWxwaGFDdXRvZmYgPiAwLjApIHtcXG4gaWYgKHRleHR1cmUyRChhbHBoYU1hcCwgdl9UZXhjb29yZCkuYSA8PSBhbHBoYUN1dG9mZikge1xcbiBkaXNjYXJkO1xcbiB9XFxuIH1cXG4jaWZkZWYgVVNFX1ZTTVxcbiBkZXB0aCA9IGRlcHRoICogMC41ICsgMC41O1xcbiBmbG9hdCBtb21lbnQxID0gZGVwdGg7XFxuIGZsb2F0IG1vbWVudDIgPSBkZXB0aCAqIGRlcHRoO1xcbiAjaWZkZWYgU1VQUE9SVF9TVEFOREFSRF9ERVJJVkFUSVZFU1xcbiBmbG9hdCBkeCA9IGRGZHgoZGVwdGgpO1xcbiBmbG9hdCBkeSA9IGRGZHkoZGVwdGgpO1xcbiBtb21lbnQyICs9IDAuMjUqKGR4KmR4K2R5KmR5KTtcXG4gI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQobW9tZW50MSwgbW9tZW50MiwgMC4wLCAxLjApO1xcbiNlbHNlXFxuICNpZmRlZiBTVVBQT1JUX1NUQU5EQVJEX0RFUklWQVRJVkVTXFxuIGZsb2F0IGR4ID0gZEZkeChkZXB0aCk7XFxuIGZsb2F0IGR5ID0gZEZkeShkZXB0aCk7XFxuIGRlcHRoICs9IHNxcnQoZHgqZHggKyBkeSpkeSkgKiBzbG9wZVNjYWxlICsgYmlhcztcXG4gI2Vsc2VcXG4gZGVwdGggKz0gYmlhcztcXG4gI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUZsb2F0KGRlcHRoICogMC41ICsgMC41KTtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zbS5kZWJ1Z19kZXB0aFxcbnVuaWZvcm0gc2FtcGxlcjJEIGRlcHRoTWFwO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbnZvaWQgbWFpbigpIHtcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQoZGVwdGhNYXAsIHZfVGV4Y29vcmQpO1xcbiNpZmRlZiBVU0VfVlNNXFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQodGV4LnJnYiwgMS4wKTtcXG4jZWxzZVxcbiBmbG9hdCBkZXB0aCA9IGRlY29kZUZsb2F0KHRleCk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoZGVwdGgsIGRlcHRoLCBkZXB0aCwgMS4wKTtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zbS5kaXN0YW5jZS52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG52b2lkIG1haW4gKCl7XFxuIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiNlbmRpZlxcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiAsIDEuMCk7XFxuIHZfV29ybGRQb3NpdGlvbiA9ICh3b3JsZCAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApKS54eXo7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc20uZGlzdGFuY2UuZnJhZ21lbnRcXG51bmlmb3JtIHZlYzMgbGlnaHRQb3NpdGlvbjtcXG51bmlmb3JtIGZsb2F0IHJhbmdlIDogMTAwO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxuQGltcG9ydCBjbGF5LnV0aWwuZW5jb2RlX2Zsb2F0XFxudm9pZCBtYWluKCl7XFxuIGZsb2F0IGRpc3QgPSBkaXN0YW5jZShsaWdodFBvc2l0aW9uLCB2X1dvcmxkUG9zaXRpb24pO1xcbiNpZmRlZiBVU0VfVlNNXFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoZGlzdCwgZGlzdCAqIGRpc3QsIDAuMCwgMC4wKTtcXG4jZWxzZVxcbiBkaXN0ID0gZGlzdCAvIHJhbmdlO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVGbG9hdChkaXN0KTtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG5AaW1wb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG5mbG9hdCB0YXBTaGFkb3dNYXAoc2FtcGxlcjJEIG1hcCwgdmVjMiB1diwgZmxvYXQgeil7XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKG1hcCwgdXYpO1xcbiByZXR1cm4gc3RlcCh6LCBkZWNvZGVGbG9hdCh0ZXgpICogMi4wIC0gMS4wKTtcXG59XFxuZmxvYXQgcGNmKHNhbXBsZXIyRCBtYXAsIHZlYzIgdXYsIGZsb2F0IHosIGZsb2F0IHRleHR1cmVTaXplLCB2ZWMyIHNjYWxlKSB7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSB0YXBTaGFkb3dNYXAobWFwLCB1diwgeik7XFxuIHZlYzIgb2Zmc2V0ID0gdmVjMigxLjAgLyB0ZXh0dXJlU2l6ZSkgKiBzY2FsZTtcXG4jaWZkZWYgUENGX0tFUk5FTF9TSVpFXFxuIGZvciAoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBQQ0ZfS0VSTkVMX1NJWkU7IF9pZHhfKyspIHt7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYgKyBvZmZzZXQgKiBwY2ZLZXJuZWxbX2lkeF9dLCB6KTtcXG4gfX1cXG4gcmV0dXJuIHNoYWRvd0NvbnRyaWIgLyBmbG9hdChQQ0ZfS0VSTkVMX1NJWkUgKyAxKTtcXG4jZWxzZVxcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIob2Zmc2V0LngsIDAuMCksIHopO1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIob2Zmc2V0LngsIG9mZnNldC55KSwgeik7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigtb2Zmc2V0LngsIG9mZnNldC55KSwgeik7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigwLjAsIG9mZnNldC55KSwgeik7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigtb2Zmc2V0LngsIDAuMCksIHopO1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIoLW9mZnNldC54LCAtb2Zmc2V0LnkpLCB6KTtcXG4gc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKG9mZnNldC54LCAtb2Zmc2V0LnkpLCB6KTtcXG4gc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKDAuMCwgLW9mZnNldC55KSwgeik7XFxuIHJldHVybiBzaGFkb3dDb250cmliIC8gOS4wO1xcbiNlbmRpZlxcbn1cXG5mbG9hdCBwY2Yoc2FtcGxlcjJEIG1hcCwgdmVjMiB1diwgZmxvYXQgeiwgZmxvYXQgdGV4dHVyZVNpemUpIHtcXG4gcmV0dXJuIHBjZihtYXAsIHV2LCB6LCB0ZXh0dXJlU2l6ZSwgdmVjMigxLjApKTtcXG59XFxuZmxvYXQgY2hlYnlzaGV2VXBwZXJCb3VuZCh2ZWMyIG1vbWVudHMsIGZsb2F0IHope1xcbiBmbG9hdCBwID0gMC4wO1xcbiB6ID0geiAqIDAuNSArIDAuNTtcXG4gaWYgKHogPD0gbW9tZW50cy54KSB7XFxuIHAgPSAxLjA7XFxuIH1cXG4gZmxvYXQgdmFyaWFuY2UgPSBtb21lbnRzLnkgLSBtb21lbnRzLnggKiBtb21lbnRzLng7XFxuIHZhcmlhbmNlID0gbWF4KHZhcmlhbmNlLCAwLjAwMDAwMDEpO1xcbiBmbG9hdCBtRCA9IG1vbWVudHMueCAtIHo7XFxuIGZsb2F0IHBNYXggPSB2YXJpYW5jZSAvICh2YXJpYW5jZSArIG1EICogbUQpO1xcbiBwTWF4ID0gY2xhbXAoKHBNYXgtMC40KS8oMS4wLTAuNCksIDAuMCwgMS4wKTtcXG4gcmV0dXJuIG1heChwLCBwTWF4KTtcXG59XFxuZmxvYXQgY29tcHV0ZVNoYWRvd0NvbnRyaWIoXFxuIHNhbXBsZXIyRCBtYXAsIG1hdDQgbGlnaHRWUE0sIHZlYzMgcG9zaXRpb24sIGZsb2F0IHRleHR1cmVTaXplLCB2ZWMyIHNjYWxlLCB2ZWMyIG9mZnNldFxcbikge1xcbiB2ZWM0IHBvc0luTGlnaHRTcGFjZSA9IGxpZ2h0VlBNICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gcG9zSW5MaWdodFNwYWNlLnh5eiAvPSBwb3NJbkxpZ2h0U3BhY2UudztcXG4gZmxvYXQgeiA9IHBvc0luTGlnaHRTcGFjZS56O1xcbiBpZihhbGwoZ3JlYXRlclRoYW4ocG9zSW5MaWdodFNwYWNlLnh5eiwgdmVjMygtMC45OSwgLTAuOTksIC0xLjApKSkgJiZcXG4gYWxsKGxlc3NUaGFuKHBvc0luTGlnaHRTcGFjZS54eXosIHZlYzMoMC45OSwgMC45OSwgMS4wKSkpKXtcXG4gdmVjMiB1diA9IChwb3NJbkxpZ2h0U3BhY2UueHkrMS4wKSAvIDIuMDtcXG4gI2lmZGVmIFVTRV9WU01cXG4gdmVjMiBtb21lbnRzID0gdGV4dHVyZTJEKG1hcCwgdXYgKiBzY2FsZSArIG9mZnNldCkueHk7XFxuIHJldHVybiBjaGVieXNoZXZVcHBlckJvdW5kKG1vbWVudHMsIHopO1xcbiAjZWxzZVxcbiByZXR1cm4gcGNmKG1hcCwgdXYgKiBzY2FsZSArIG9mZnNldCwgeiwgdGV4dHVyZVNpemUsIHNjYWxlKTtcXG4gI2VuZGlmXFxuIH1cXG4gcmV0dXJuIDEuMDtcXG59XFxuZmxvYXQgY29tcHV0ZVNoYWRvd0NvbnRyaWIoc2FtcGxlcjJEIG1hcCwgbWF0NCBsaWdodFZQTSwgdmVjMyBwb3NpdGlvbiwgZmxvYXQgdGV4dHVyZVNpemUpIHtcXG4gcmV0dXJuIGNvbXB1dGVTaGFkb3dDb250cmliKG1hcCwgbGlnaHRWUE0sIHBvc2l0aW9uLCB0ZXh0dXJlU2l6ZSwgdmVjMigxLjApLCB2ZWMyKDAuMCkpO1xcbn1cXG5mbG9hdCBjb21wdXRlU2hhZG93Q29udHJpYk9tbmkoc2FtcGxlckN1YmUgbWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgcmFuZ2UpXFxue1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKGRpcmVjdGlvbik7XFxuIHZlYzQgc2hhZG93VGV4ID0gdGV4dHVyZUN1YmUobWFwLCBkaXJlY3Rpb24pO1xcbiNpZmRlZiBVU0VfVlNNXFxuIHZlYzIgbW9tZW50cyA9IHNoYWRvd1RleC54eTtcXG4gZmxvYXQgdmFyaWFuY2UgPSBtb21lbnRzLnkgLSBtb21lbnRzLnggKiBtb21lbnRzLng7XFxuIGZsb2F0IG1EID0gbW9tZW50cy54IC0gZGlzdDtcXG4gZmxvYXQgcCA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgbUQgKiBtRCk7XFxuIGlmKG1vbWVudHMueCArIDAuMDAxIDwgZGlzdCl7XFxuIHJldHVybiBjbGFtcChwLCAwLjAsIDEuMCk7XFxuIH1lbHNle1xcbiByZXR1cm4gMS4wO1xcbiB9XFxuI2Vsc2VcXG4gcmV0dXJuIHN0ZXAoZGlzdCwgKGRlY29kZUZsb2F0KHNoYWRvd1RleCkgKyAwLjAwMDIpICogcmFuZ2UpO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnBsdWdpbi5jb21wdXRlX3NoYWRvd19tYXBcXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVCkgfHwgZGVmaW5lZChESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpIHx8IGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiNpZmRlZiBTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVFxcbnVuaWZvcm0gc2FtcGxlcjJEIHNwb3RMaWdodFNoYWRvd01hcHNbU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gbWF0NCBzcG90TGlnaHRNYXRyaWNlc1tTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBmbG9hdCBzcG90TGlnaHRTaGFkb3dNYXBTaXplc1tTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxuI2VuZGlmXFxuI2lmZGVmIERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVFxcbiNpZiBkZWZpbmVkKFNIQURPV19DQVNDQURFKVxcbnVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzWzFdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXNbU0hBRE9XX0NBU0NBREVdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gZmxvYXQgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzWzFdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gZmxvYXQgc2hhZG93Q2FzY2FkZUNsaXBzTmVhcltTSEFET1dfQ0FTQ0FERV06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBmbG9hdCBzaGFkb3dDYXNjYWRlQ2xpcHNGYXJbU0hBRE9XX0NBU0NBREVdOnVuY29uZmlndXJhYmxlO1xcbiNlbHNlXFxudW5pZm9ybSBzYW1wbGVyMkQgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHNbRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIG1hdDQgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzW0RJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBmbG9hdCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXNbRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG4jZW5kaWZcXG4jZW5kaWZcXG4jaWZkZWYgUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UXFxudW5pZm9ybSBzYW1wbGVyQ3ViZSBwb2ludExpZ2h0U2hhZG93TWFwc1tQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbiNlbmRpZlxcbnVuaWZvcm0gYm9vbCBzaGFkb3dFbmFibGVkIDogdHJ1ZTtcXG4jaWZkZWYgUENGX0tFUk5FTF9TSVpFXFxudW5pZm9ybSB2ZWMyIHBjZktlcm5lbFtQQ0ZfS0VSTkVMX1NJWkVdO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG52b2lkIGNvbXB1dGVTaGFkb3dPZlNwb3RMaWdodHModmVjMyBwb3NpdGlvbiwgaW5vdXQgZmxvYXQgc2hhZG93Q29udHJpYnNbU1BPVF9MSUdIVF9DT1VOVF0gKSB7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWI7XFxuIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmliID0gY29tcHV0ZVNoYWRvd0NvbnRyaWIoXFxuIHNwb3RMaWdodFNoYWRvd01hcHNbX2lkeF9dLCBzcG90TGlnaHRNYXRyaWNlc1tfaWR4X10sIHBvc2l0aW9uLFxcbiBzcG90TGlnaHRTaGFkb3dNYXBTaXplc1tfaWR4X11cXG4gKTtcXG4gc2hhZG93Q29udHJpYnNbX2lkeF9dID0gc2hhZG93Q29udHJpYjtcXG4gfX1cXG4gZm9yKGludCBfaWR4XyA9IFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XyA8IFNQT1RfTElHSFRfQ09VTlQ7IF9pZHhfKyspe3tcXG4gc2hhZG93Q29udHJpYnNbX2lkeF9dID0gMS4wO1xcbiB9fVxcbn1cXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuI2lmZGVmIFNIQURPV19DQVNDQURFXFxudm9pZCBjb21wdXRlU2hhZG93T2ZEaXJlY3Rpb25hbExpZ2h0cyh2ZWMzIHBvc2l0aW9uLCBpbm91dCBmbG9hdCBzaGFkb3dDb250cmlic1tESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF0pe1xcbiBmbG9hdCBkZXB0aCA9ICgyLjAgKiBnbF9GcmFnQ29vcmQueiAtIGdsX0RlcHRoUmFuZ2UubmVhciAtIGdsX0RlcHRoUmFuZ2UuZmFyKVxcbiAvIChnbF9EZXB0aFJhbmdlLmZhciAtIGdsX0RlcHRoUmFuZ2UubmVhcik7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWI7XFxuIHNoYWRvd0NvbnRyaWJzWzBdID0gMS4wO1xcbiBmb3IgKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgU0hBRE9XX0NBU0NBREU7IF9pZHhfKyspIHt7XFxuIGlmIChcXG4gZGVwdGggPj0gc2hhZG93Q2FzY2FkZUNsaXBzTmVhcltfaWR4X10gJiZcXG4gZGVwdGggPD0gc2hhZG93Q2FzY2FkZUNsaXBzRmFyW19pZHhfXVxcbiApIHtcXG4gc2hhZG93Q29udHJpYiA9IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwc1swXSwgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzW19pZHhfXSwgcG9zaXRpb24sXFxuIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBTaXplc1swXSxcXG4gdmVjMigxLjAgLyBmbG9hdChTSEFET1dfQ0FTQ0FERSksIDEuMCksXFxuIHZlYzIoZmxvYXQoX2lkeF8pIC8gZmxvYXQoU0hBRE9XX0NBU0NBREUpLCAwLjApXFxuICk7XFxuIHNoYWRvd0NvbnRyaWJzWzBdID0gc2hhZG93Q29udHJpYjtcXG4gfVxcbiB9fVxcbiBmb3IoaW50IF9pZHhfID0gRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XyA8IERJUkVDVElPTkFMX0xJR0hUX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmlic1tfaWR4X10gPSAxLjA7XFxuIH19XFxufVxcbiNlbHNlXFxudm9pZCBjb21wdXRlU2hhZG93T2ZEaXJlY3Rpb25hbExpZ2h0cyh2ZWMzIHBvc2l0aW9uLCBpbm91dCBmbG9hdCBzaGFkb3dDb250cmlic1tESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF0pe1xcbiBmbG9hdCBzaGFkb3dDb250cmliO1xcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQ7IF9pZHhfKyspIHt7XFxuIHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYihcXG4gZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHNbX2lkeF9dLCBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXNbX2lkeF9dLCBwb3NpdGlvbixcXG4gZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzW19pZHhfXVxcbiApO1xcbiBzaGFkb3dDb250cmlic1tfaWR4X10gPSBzaGFkb3dDb250cmliO1xcbiB9fVxcbiBmb3IoaW50IF9pZHhfID0gRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XyA8IERJUkVDVElPTkFMX0xJR0hUX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmlic1tfaWR4X10gPSAxLjA7XFxuIH19XFxufVxcbiNlbmRpZlxcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG52b2lkIGNvbXB1dGVTaGFkb3dPZlBvaW50TGlnaHRzKHZlYzMgcG9zaXRpb24sIGlub3V0IGZsb2F0IHNoYWRvd0NvbnRyaWJzW1BPSU5UX0xJR0hUX0NPVU5UXSApe1xcbiB2ZWMzIGxpZ2h0UG9zaXRpb247XFxuIHZlYzMgZGlyZWN0aW9uO1xcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQ7IF9pZHhfKyspIHt7XFxuIGxpZ2h0UG9zaXRpb24gPSBwb2ludExpZ2h0UG9zaXRpb25bX2lkeF9dO1xcbiBkaXJlY3Rpb24gPSBwb3NpdGlvbiAtIGxpZ2h0UG9zaXRpb247XFxuIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IGNvbXB1dGVTaGFkb3dDb250cmliT21uaShwb2ludExpZ2h0U2hhZG93TWFwc1tfaWR4X10sIGRpcmVjdGlvbiwgcG9pbnRMaWdodFJhbmdlW19pZHhfXSk7XFxuIH19XFxuIGZvcihpbnQgX2lkeF8gPSBQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQ7IF9pZHhfIDwgUE9JTlRfTElHSFRfQ09VTlQ7IF9pZHhfKyspIHt7XFxuIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IDEuMDtcXG4gfX1cXG59XFxuI2VuZGlmXFxuI2VuZGlmXFxuQGVuZFwiO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgRnJ1c3R1bSBmcm9tICcuLi9tYXRoL0ZydXN0dW0nO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgUmVuZGVyZXIgZnJvbSAnLi4vUmVuZGVyZXInO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XHJcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tICcuLi9jYW1lcmEvUGVyc3BlY3RpdmUnO1xyXG5pbXBvcnQgT3J0aG9DYW1lcmEgZnJvbSAnLi4vY2FtZXJhL09ydGhvZ3JhcGhpYyc7XHJcblxyXG5pbXBvcnQgUGFzcyBmcm9tICcuLi9jb21wb3NpdG9yL1Bhc3MnO1xyXG5pbXBvcnQgVGV4dHVyZVBvb2wgZnJvbSAnLi4vY29tcG9zaXRvci9UZXh0dXJlUG9vbCc7XHJcblxyXG5pbXBvcnQgbWF0NCBmcm9tICcuLi9nbG1hdHJpeC9tYXQ0JztcclxuXHJcbnZhciB0YXJnZXRzID0gWydweCcsICdueCcsICdweScsICdueScsICdweicsICdueiddO1xyXG5cclxuaW1wb3J0IHNoYWRvd21hcEVzc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9zaGFkb3dtYXAuZ2xzbC5qcyc7XHJcblNoYWRlclsnaW1wb3J0J10oc2hhZG93bWFwRXNzbCk7XHJcblxyXG5mdW5jdGlvbiBnZXREZXB0aE1hdGVyaWFsVW5pZm9ybShyZW5kZXJhYmxlLCBkZXB0aE1hdGVyaWFsLCBzeW1ib2wpIHtcclxuICAgIGlmIChzeW1ib2wgPT09ICdhbHBoYU1hcCcpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ2RpZmZ1c2VNYXAnKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ2FscGhhQ3V0b2ZmJykge1xyXG4gICAgICAgIGlmIChyZW5kZXJhYmxlLm1hdGVyaWFsLmlzRGVmaW5lZCgnZnJhZ21lbnQnLCAnQUxQSEFfVEVTVCcpXHJcbiAgICAgICAgICAgICYmIHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdkaWZmdXNlTWFwJylcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdmFyIGFscGhhQ3V0b2ZmID0gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ2FscGhhQ3V0b2ZmJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBhbHBoYUN1dG9mZiB8fCAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3V2UmVwZWF0Jykge1xyXG4gICAgICAgIHJldHVybiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgndXZSZXBlYXQnKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3V2T2Zmc2V0Jykge1xyXG4gICAgICAgIHJldHVybiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgndXZPZmZzZXQnKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBkZXB0aE1hdGVyaWFsLmdldChzeW1ib2wpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0RlcHRoTWF0ZXJpYWxDaGFuZ2VkKHJlbmRlcmFibGUsIHByZXZSZW5kZXJhYmxlKSB7XHJcbiAgICB2YXIgbWF0QSA9IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICB2YXIgbWF0QiA9IHByZXZSZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgcmV0dXJuIG1hdEEuZ2V0KCdkaWZmdXNlTWFwJykgIT09IG1hdEIuZ2V0KCdkaWZmdXNlTWFwJylcclxuICAgICAgICB8fCAobWF0QS5nZXQoJ2FscGhhQ3V0b2ZmJykgfHwgMCkgIT09IChtYXRCLmdldCgnYWxwaGFDdXRvZmYnKSB8fCAwKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFBhc3MgcmVuZGVyaW5nIHNoYWRvdyBtYXAuXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnByZVBhc3MuU2hhZG93TWFwXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICB2YXIgc2hhZG93TWFwUGFzcyA9IG5ldyBjbGF5LnByZVBhc3MuU2hhZG93TWFwKHtcclxuICogICAgICAgICBzb2Z0U2hhZG93OiBjbGF5LnByZVBhc3MuU2hhZG93TWFwLlZTTVxyXG4gKiAgICAgfSk7XHJcbiAqICAgICAuLi5cclxuICogICAgIGFuaW1hdGlvbi5vbignZnJhbWUnLCBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcbiAqICAgICAgICAgc2hhZG93TWFwUGFzcy5yZW5kZXIocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpO1xyXG4gKiAgICAgICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTtcclxuICogICAgIH0pO1xyXG4gKi9cclxudmFyIFNoYWRvd01hcFBhc3MgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LnByZVBhc3MuU2hhZG93TWFwIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU29mdCBzaGFkb3cgdGVjaG5pcXVlLlxyXG4gICAgICAgICAqIENhbiBiZSB7QGxpbmsgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5QQ0Z9IG9yIHtAbGluayBjbGF5LnByZVBhc3MuU2hhZG93TWFwLlZTTX1cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNvZnRTaGFkb3c6IFNoYWRvd01hcFBhc3MuUENGLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTb2Z0IHNoYWRvdyBibHVyIHNpemVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNoYWRvd0JsdXI6IDEuMCxcclxuXHJcbiAgICAgICAgbGlnaHRGcnVzdHVtQmlhczogJ2F1dG8nLFxyXG5cclxuICAgICAgICBrZXJuZWxQQ0Y6IG5ldyBGbG9hdDMyQXJyYXkoW1xyXG4gICAgICAgICAgICAxLCAwLFxyXG4gICAgICAgICAgICAxLCAxLFxyXG4gICAgICAgICAgICAtMSwgMSxcclxuICAgICAgICAgICAgMCwgMSxcclxuICAgICAgICAgICAgLTEsIDAsXHJcbiAgICAgICAgICAgIC0xLCAtMSxcclxuICAgICAgICAgICAgMSwgLTEsXHJcbiAgICAgICAgICAgIDAsIC0xXHJcbiAgICAgICAgXSksXHJcblxyXG4gICAgICAgIHByZWNpc2lvbjogJ2hpZ2hwJyxcclxuXHJcbiAgICAgICAgX2xhc3RSZW5kZXJOb3RDYXN0U2hhZG93OiBmYWxzZSxcclxuXHJcbiAgICAgICAgX2ZyYW1lQnVmZmVyOiBuZXcgRnJhbWVCdWZmZXIoKSxcclxuXHJcbiAgICAgICAgX3RleHR1cmVzOiB7fSxcclxuICAgICAgICBfc2hhZG93TWFwTnVtYmVyOiB7XHJcbiAgICAgICAgICAgICdQT0lOVF9MSUdIVCc6IDAsXHJcbiAgICAgICAgICAgICdESVJFQ1RJT05BTF9MSUdIVCc6IDAsXHJcbiAgICAgICAgICAgICdTUE9UX0xJR0hUJzogMFxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9kZXB0aE1hdGVyaWFsczoge30sXHJcbiAgICAgICAgX2Rpc3RhbmNlTWF0ZXJpYWxzOiB7fSxcclxuXHJcbiAgICAgICAgX3JlY2VpdmVyczogW10sXHJcbiAgICAgICAgX2xpZ2h0c0Nhc3RTaGFkb3c6IFtdLFxyXG5cclxuICAgICAgICBfbGlnaHRDYW1lcmFzOiB7fSxcclxuICAgICAgICBfbGlnaHRNYXRlcmlhbHM6IHt9LFxyXG5cclxuICAgICAgICBfdGV4dHVyZVBvb2w6IG5ldyBUZXh0dXJlUG9vbCgpXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBHYXVzc2lhbiBmaWx0ZXIgcGFzcyBmb3IgVlNNXHJcbiAgICB0aGlzLl9nYXVzc2lhblBhc3NIID0gbmV3IFBhc3Moe1xyXG4gICAgICAgIGZyYWdtZW50OiBTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IuZ2F1c3NpYW5fYmx1cicpXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2dhdXNzaWFuUGFzc1YgPSBuZXcgUGFzcyh7XHJcbiAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkuY29tcG9zaXRvci5nYXVzc2lhbl9ibHVyJylcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzSC5zZXRVbmlmb3JtKCdibHVyU2l6ZScsIHRoaXMuc2hhZG93Qmx1cik7XHJcbiAgICB0aGlzLl9nYXVzc2lhblBhc3NILnNldFVuaWZvcm0oJ2JsdXJEaXInLCAwLjApO1xyXG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzVi5zZXRVbmlmb3JtKCdibHVyU2l6ZScsIHRoaXMuc2hhZG93Qmx1cik7XHJcbiAgICB0aGlzLl9nYXVzc2lhblBhc3NWLnNldFVuaWZvcm0oJ2JsdXJEaXInLCAxLjApO1xyXG5cclxuICAgIHRoaXMuX291dHB1dERlcHRoUGFzcyA9IG5ldyBQYXNzKHtcclxuICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5zbS5kZWJ1Z19kZXB0aCcpXHJcbiAgICB9KTtcclxufSwge1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZW5kZXIgc2NlbmUgdG8gc2hhZG93IHRleHR1cmVzXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtICB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQ2FtZXJhfSBzY2VuZUNhbWVyYVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW25vdFVwZGF0ZVNjZW5lPWZhbHNlXVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIHJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgc2NlbmVDYW1lcmEsIG5vdFVwZGF0ZVNjZW5lKSB7XHJcbiAgICAgICAgaWYgKCFzY2VuZUNhbWVyYSkge1xyXG4gICAgICAgICAgICBzY2VuZUNhbWVyYSA9IHNjZW5lLmdldE1haW5DYW1lcmEoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXInLCB0aGlzLCByZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhKTtcclxuICAgICAgICB0aGlzLl9yZW5kZXJTaGFkb3dQYXNzKHJlbmRlcmVyLCBzY2VuZSwgc2NlbmVDYW1lcmEsIG5vdFVwZGF0ZVNjZW5lKTtcclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2FmdGVycmVuZGVyJywgdGhpcywgcmVuZGVyZXIsIHNjZW5lLCBzY2VuZUNhbWVyYSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVidWcgcmVuZGVyaW5nIG9mIHNoYWRvdyB0ZXh0dXJlc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gc2l6ZVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIHJlbmRlckRlYnVnOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNpemUpIHtcclxuICAgICAgICByZW5kZXJlci5zYXZlQ2xlYXIoKTtcclxuICAgICAgICB2YXIgdmlld3BvcnQgPSByZW5kZXJlci52aWV3cG9ydDtcclxuICAgICAgICB2YXIgeCA9IDAsIHkgPSAwO1xyXG4gICAgICAgIHZhciB3aWR0aCA9IHNpemUgfHwgdmlld3BvcnQud2lkdGggLyA0O1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSB3aWR0aDtcclxuICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXREZXB0aFBhc3MubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfVlNNJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXREZXB0aFBhc3MubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9WU00nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl90ZXh0dXJlcykge1xyXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW25hbWVdO1xyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCh4LCB5LCB3aWR0aCAqIHRleHR1cmUud2lkdGggLyB0ZXh0dXJlLmhlaWdodCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0RGVwdGhQYXNzLnNldFVuaWZvcm0oJ2RlcHRoTWFwJywgdGV4dHVyZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dERlcHRoUGFzcy5yZW5kZXIocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB4ICs9IHdpZHRoICogdGV4dHVyZS53aWR0aCAvIHRleHR1cmUuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCh2aWV3cG9ydCk7XHJcbiAgICAgICAgcmVuZGVyZXIucmVzdG9yZUNsZWFyKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVSZWNlaXZlcnM6IGZ1bmN0aW9uIChyZW5kZXJlciwgbWVzaCkge1xyXG4gICAgICAgIGlmIChtZXNoLnJlY2VpdmVTaGFkb3cpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVjZWl2ZXJzLnB1c2gobWVzaCk7XHJcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuc2V0KCdzaGFkb3dFbmFibGVkJywgMSk7XHJcblxyXG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLnNldCgncGNmS2VybmVsJywgdGhpcy5rZXJuZWxQQ0YpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC5zZXQoJ3NoYWRvd0VuYWJsZWQnLCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XHJcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfVlNNJyk7XHJcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1BDRl9LRVJORUxfU0laRScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xyXG4gICAgICAgICAgICB2YXIga2VybmVsUENGID0gdGhpcy5rZXJuZWxQQ0Y7XHJcbiAgICAgICAgICAgIGlmIChrZXJuZWxQQ0YgJiYga2VybmVsUENGLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1BDRl9LRVJORUxfU0laRScsIGtlcm5lbFBDRi5sZW5ndGggLyAyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1BDRl9LRVJORUxfU0laRScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNjZW5lLnRyYXZlcnNlKGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl91cGRhdGVSZWNlaXZlcnMocmVuZGVyZXIsIHJlbmRlcmFibGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBsaWdodCA9IHNjZW5lLmxpZ2h0c1tpXTtcclxuICAgICAgICAgICAgaWYgKGxpZ2h0LmNhc3RTaGFkb3cgJiYgIWxpZ2h0LmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRzQ2FzdFNoYWRvdy5wdXNoKGxpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3JlbmRlclNoYWRvd1Bhc3M6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhLCBub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgIC8vIHJlc2V0XHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl9zaGFkb3dNYXBOdW1iZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2hhZG93TWFwTnVtYmVyW25hbWVdID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fbGlnaHRzQ2FzdFNoYWRvdy5sZW5ndGggPSAwO1xyXG4gICAgICAgIHRoaXMuX3JlY2VpdmVycy5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIGlmICghbm90VXBkYXRlU2NlbmUpIHtcclxuICAgICAgICAgICAgc2NlbmUudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2VuZUNhbWVyYSkge1xyXG4gICAgICAgICAgICBzY2VuZUNhbWVyYS51cGRhdGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNjZW5lLnVwZGF0ZUxpZ2h0cygpO1xyXG4gICAgICAgIHRoaXMuX3VwZGF0ZShyZW5kZXJlciwgc2NlbmUpO1xyXG5cclxuICAgICAgICAvLyBOZWVkcyB0byB1cGRhdGUgdGhlIHJlY2VpdmVycyBhZ2FpbiBpZiBzaGFkb3dzIGNvbWUgZnJvbSAxIHRvIDAuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9saWdodHNDYXN0U2hhZG93Lmxlbmd0aCAmJiB0aGlzLl9sYXN0UmVuZGVyTm90Q2FzdFNoYWRvdykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9sYXN0UmVuZGVyTm90Q2FzdFNoYWRvdyA9IHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cgPT09IDA7XHJcblxyXG4gICAgICAgIF9nbC5lbmFibGUoX2dsLkRFUFRIX1RFU1QpO1xyXG4gICAgICAgIF9nbC5kZXB0aE1hc2sodHJ1ZSk7XHJcbiAgICAgICAgX2dsLmRpc2FibGUoX2dsLkJMRU5EKTtcclxuXHJcbiAgICAgICAgLy8gQ2xlYXIgd2l0aCBoaWdoLXosIHNvIHRoZSBwYXJ0IG5vdCByZW5kZXJlZCB3aWxsIG5vdCBiZWVuIHNoYWRvd2VkXHJcbiAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIC8vIFRPRE8gcmVzdG9yZVxyXG4gICAgICAgIF9nbC5jbGVhckNvbG9yKDEuMCwgMS4wLCAxLjAsIDEuMCk7XHJcblxyXG4gICAgICAgIC8vIFNoYWRvdyB1bmlmb3Jtc1xyXG4gICAgICAgIHZhciBzcG90TGlnaHRTaGFkb3dNYXBzID0gW107XHJcbiAgICAgICAgdmFyIHNwb3RMaWdodE1hdHJpY2VzID0gW107XHJcbiAgICAgICAgdmFyIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzID0gW107XHJcbiAgICAgICAgdmFyIGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlcyA9IFtdO1xyXG4gICAgICAgIHZhciBzaGFkb3dDYXNjYWRlQ2xpcHMgPSBbXTtcclxuICAgICAgICB2YXIgcG9pbnRMaWdodFNoYWRvd01hcHMgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIGRpckxpZ2h0SGFzQ2FzY2FkZTtcclxuICAgICAgICAvLyBDcmVhdGUgdGV4dHVyZXMgZm9yIHNoYWRvdyBtYXBcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGxpZ2h0ID0gdGhpcy5fbGlnaHRzQ2FzdFNoYWRvd1tpXTtcclxuICAgICAgICAgICAgaWYgKGxpZ2h0LnR5cGUgPT09ICdESVJFQ1RJT05BTF9MSUdIVCcpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGlyTGlnaHRIYXNDYXNjYWRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdPbmx5IG9uZSBkaXJlZWN0aW9uYWwgbGlnaHQgc3VwcG9ydGVkIHdpdGggc2hhZG93IGNhc2NhZGUnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChsaWdodC5zaGFkb3dDYXNjYWRlID4gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignU3VwcG9ydCBhdCBtb3N0IDQgY2FzY2FkZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGxpZ2h0LnNoYWRvd0Nhc2NhZGUgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlyTGlnaHRIYXNDYXNjYWRlID0gbGlnaHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJEaXJlY3Rpb25hbExpZ2h0U2hhZG93KFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lQ2FtZXJhLFxyXG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwcyxcclxuICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobGlnaHQudHlwZSA9PT0gJ1NQT1RfTElHSFQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclNwb3RMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlcixcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZSxcclxuICAgICAgICAgICAgICAgICAgICBsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBzcG90TGlnaHRNYXRyaWNlcyxcclxuICAgICAgICAgICAgICAgICAgICBzcG90TGlnaHRTaGFkb3dNYXBzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxpZ2h0LnR5cGUgPT09ICdQT0lOVF9MSUdIVCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyUG9pbnRMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlcixcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZSxcclxuICAgICAgICAgICAgICAgICAgICBsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBwb2ludExpZ2h0U2hhZG93TWFwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fc2hhZG93TWFwTnVtYmVyW2xpZ2h0LnR5cGVdKys7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBsaWdodFR5cGUgaW4gdGhpcy5fc2hhZG93TWFwTnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHZhciBudW1iZXIgPSB0aGlzLl9zaGFkb3dNYXBOdW1iZXJbbGlnaHRUeXBlXTtcclxuICAgICAgICAgICAgdmFyIGtleSA9IGxpZ2h0VHlwZSArICdfU0hBRE9XTUFQX0NPVU5UJztcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9yZWNlaXZlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fcmVjZWl2ZXJzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5mcmFnbWVudERlZmluZXNba2V5XSAhPT0gbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlciA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsIGtleSwgbnVtYmVyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50Jywga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9yZWNlaXZlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG1lc2ggPSB0aGlzLl9yZWNlaXZlcnNbaV07XHJcbiAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IG1lc2gubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIGlmIChkaXJMaWdodEhhc0Nhc2NhZGUpIHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnU0hBRE9XX0NBU0NBREUnLCBkaXJMaWdodEhhc0Nhc2NhZGUuc2hhZG93Q2FzY2FkZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnU0hBRE9XX0NBU0NBREUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNoYWRvd1VuaWZvcm1zID0gc2NlbmUuc2hhZG93VW5pZm9ybXM7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGdldFNpemUodGV4dHVyZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZS5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXMgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcy5tYXAoZ2V0U2l6ZSk7XHJcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzID0geyB2YWx1ZTogZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMsIHR5cGU6ICd0dicgfTtcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzID0geyB2YWx1ZTogZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzLCB0eXBlOiAnbTR2JyB9O1xyXG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5kaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXMgPSB7IHZhbHVlOiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXMsIHR5cGU6ICcxZnYnIH07XHJcbiAgICAgICAgICAgIGlmIChkaXJMaWdodEhhc0Nhc2NhZGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyID0gc2hhZG93Q2FzY2FkZUNsaXBzLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93Q2FzY2FkZUNsaXBzRmFyID0gc2hhZG93Q2FzY2FkZUNsaXBzLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgc2hhZG93Q2FzY2FkZUNsaXBzRmFyLnNoaWZ0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSBmcm9tIGZhciB0byBuZWFyXHJcbiAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyLnJldmVyc2UoKTtcclxuICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwc0Zhci5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcy5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc2hhZG93Q2FzY2FkZUNsaXBzTmVhciA9IHsgdmFsdWU6IHNoYWRvd0Nhc2NhZGVDbGlwc05lYXIsIHR5cGU6ICcxZnYnIH07XHJcbiAgICAgICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zaGFkb3dDYXNjYWRlQ2xpcHNGYXIgPSB7IHZhbHVlOiBzaGFkb3dDYXNjYWRlQ2xpcHNGYXIsIHR5cGU6ICcxZnYnIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzcG90TGlnaHRTaGFkb3dNYXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIHNwb3RMaWdodFNoYWRvd01hcFNpemVzID0gc3BvdExpZ2h0U2hhZG93TWFwcy5tYXAoZ2V0U2l6ZSk7XHJcbiAgICAgICAgICAgIHZhciBzaGFkb3dVbmlmb3JtcyA9IHNjZW5lLnNoYWRvd1VuaWZvcm1zO1xyXG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zcG90TGlnaHRTaGFkb3dNYXBzID0geyB2YWx1ZTogc3BvdExpZ2h0U2hhZG93TWFwcywgdHlwZTogJ3R2JyB9O1xyXG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zcG90TGlnaHRNYXRyaWNlcyA9IHsgdmFsdWU6IHNwb3RMaWdodE1hdHJpY2VzLCB0eXBlOiAnbTR2JyB9O1xyXG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zcG90TGlnaHRTaGFkb3dNYXBTaXplcyA9IHsgdmFsdWU6IHNwb3RMaWdodFNoYWRvd01hcFNpemVzLCB0eXBlOiAnMWZ2JyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBvaW50TGlnaHRTaGFkb3dNYXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMucG9pbnRMaWdodFNoYWRvd01hcHMgPSB7IHZhbHVlOiBwb2ludExpZ2h0U2hhZG93TWFwcywgdHlwZTogJ3R2JyB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcmVuZGVyRGlyZWN0aW9uYWxMaWdodFNoYWRvdzogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIHNwbGl0RnJ1c3R1bSA9IG5ldyBGcnVzdHVtKCk7XHJcbiAgICAgICAgdmFyIHNwbGl0UHJvak1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgdmFyIGNyb3BCQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdmFyIGNyb3BNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBsaWdodFZpZXdNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBsaWdodFZpZXdQcm9qTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICB2YXIgbGlnaHRQcm9qTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhLCBsaWdodCwgc2hhZG93Q2FzY2FkZUNsaXBzLCBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgZGVmYXVsdFNoYWRvd01hdGVyaWFsID0gdGhpcy5fZ2V0RGVwdGhNYXRlcmlhbChsaWdodCk7XHJcbiAgICAgICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGUuc2hhZG93RGVwdGhNYXRlcmlhbCB8fCBkZWZhdWx0U2hhZG93TWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGlzRGVwdGhNYXRlcmlhbENoYW5nZWQsXHJcbiAgICAgICAgICAgICAgICBnZXRVbmlmb3JtOiBnZXREZXB0aE1hdGVyaWFsVW5pZm9ybSxcclxuICAgICAgICAgICAgICAgIGlmUmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLmNhc3RTaGFkb3c7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc29ydENvbXBhcmU6IFJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAvLyBGaXJzdCBmcmFtZVxyXG4gICAgICAgICAgICBpZiAoIXNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5pc0Zpbml0ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYm91bmRpbmdCb3ggPSBzY2VuZS5nZXRCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgICAgICAgICAgc2NlbmUudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgLmNvcHkoYm91bmRpbmdCb3gpLmFwcGx5VHJhbnNmb3JtKHNjZW5lQ2FtZXJhLnZpZXdNYXRyaXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIENvbnNpZGVyaW5nIG1vdmluZyBzcGVlZCBzaW5jZSB0aGUgYm91bmRpbmcgYm94IGlzIGZyb20gbGFzdCBmcmFtZVxyXG4gICAgICAgICAgICAvLyBUT0RPOiBhZGQgYSBiaWFzXHJcbiAgICAgICAgICAgIHZhciBjbGlwcGVkRmFyID0gTWF0aC5taW4oLXNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5taW4ueiwgc2NlbmVDYW1lcmEuZmFyKTtcclxuICAgICAgICAgICAgdmFyIGNsaXBwZWROZWFyID0gTWF0aC5tYXgoLXNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5tYXgueiwgc2NlbmVDYW1lcmEubmVhcik7XHJcblxyXG4gICAgICAgICAgICB2YXIgbGlnaHRDYW1lcmEgPSB0aGlzLl9nZXREaXJlY3Rpb25hbExpZ2h0Q2FtZXJhKGxpZ2h0LCBzY2VuZSwgc2NlbmVDYW1lcmEpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGx2cE1hdDRBcnIgPSBsaWdodFZpZXdQcm9qTWF0cml4LmFycmF5O1xyXG4gICAgICAgICAgICBsaWdodFByb2pNYXRyaXguY29weShsaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICAgICAgbWF0NC5pbnZlcnQobGlnaHRWaWV3TWF0cml4LmFycmF5LCBsaWdodENhbWVyYS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgIG1hdDQubXVsdGlwbHkobGlnaHRWaWV3TWF0cml4LmFycmF5LCBsaWdodFZpZXdNYXRyaXguYXJyYXksIHNjZW5lQ2FtZXJhLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgbWF0NC5tdWx0aXBseShsdnBNYXQ0QXJyLCBsaWdodFByb2pNYXRyaXguYXJyYXksIGxpZ2h0Vmlld01hdHJpeC5hcnJheSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgY2xpcFBsYW5lcyA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgaXNQZXJzcGVjdGl2ZSA9IHNjZW5lQ2FtZXJhIGluc3RhbmNlb2YgUGVyc3BlY3RpdmVDYW1lcmE7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2NhbGVaID0gKHNjZW5lQ2FtZXJhLm5lYXIgKyBzY2VuZUNhbWVyYS5mYXIpIC8gKHNjZW5lQ2FtZXJhLm5lYXIgLSBzY2VuZUNhbWVyYS5mYXIpO1xyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0WiA9IDIgKiBzY2VuZUNhbWVyYS5uZWFyICogc2NlbmVDYW1lcmEuZmFyIC8gKHNjZW5lQ2FtZXJhLm5lYXIgLSBzY2VuZUNhbWVyYS5mYXIpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBsaWdodC5zaGFkb3dDYXNjYWRlOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjbG9nID0gY2xpcHBlZE5lYXIgKiBNYXRoLnBvdyhjbGlwcGVkRmFyIC8gY2xpcHBlZE5lYXIsIGkgLyBsaWdodC5zaGFkb3dDYXNjYWRlKTtcclxuICAgICAgICAgICAgICAgIHZhciBjdW5pID0gY2xpcHBlZE5lYXIgKyAoY2xpcHBlZEZhciAtIGNsaXBwZWROZWFyKSAqIGkgLyBsaWdodC5zaGFkb3dDYXNjYWRlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGMgPSBjbG9nICogbGlnaHQuY2FzY2FkZVNwbGl0TG9nRmFjdG9yICsgY3VuaSAqICgxIC0gbGlnaHQuY2FzY2FkZVNwbGl0TG9nRmFjdG9yKTtcclxuICAgICAgICAgICAgICAgIGNsaXBQbGFuZXMucHVzaChjKTtcclxuICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwcy5wdXNoKC0oLWMgKiBzY2FsZVogKyBvZmZzZXRaKSAvIC1jKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX2dldFRleHR1cmUobGlnaHQsIGxpZ2h0LnNoYWRvd0Nhc2NhZGUpO1xyXG4gICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcy5wdXNoKHRleHR1cmUpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHZpZXdwb3J0ID0gcmVuZGVyZXIudmlld3BvcnQ7XHJcblxyXG4gICAgICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmF0dGFjaCh0ZXh0dXJlKTtcclxuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIF9nbC5jbGVhcihfZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IF9nbC5ERVBUSF9CVUZGRVJfQklUKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlnaHQuc2hhZG93Q2FzY2FkZTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHNwbGl0dGVkIGZydXN0dW1cclxuICAgICAgICAgICAgICAgIHZhciBuZWFyUGxhbmUgPSBjbGlwUGxhbmVzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGZhclBsYW5lID0gY2xpcFBsYW5lc1tpICsgMV07XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNQZXJzcGVjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdDQucGVyc3BlY3RpdmUoc3BsaXRQcm9qTWF0cml4LmFycmF5LCBzY2VuZUNhbWVyYS5mb3YgLyAxODAgKiBNYXRoLlBJLCBzY2VuZUNhbWVyYS5hc3BlY3QsIG5lYXJQbGFuZSwgZmFyUGxhbmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0NC5vcnRobyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRQcm9qTWF0cml4LmFycmF5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2VuZUNhbWVyYS5sZWZ0LCBzY2VuZUNhbWVyYS5yaWdodCwgc2NlbmVDYW1lcmEuYm90dG9tLCBzY2VuZUNhbWVyYS50b3AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lYXJQbGFuZSwgZmFyUGxhbmVcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc3BsaXRGcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uKHNwbGl0UHJvak1hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICBzcGxpdEZydXN0dW0uZ2V0VHJhbnNmb3JtZWRCb3VuZGluZ0JveChjcm9wQkJveCwgbGlnaHRWaWV3TWF0cml4KTtcclxuICAgICAgICAgICAgICAgIGNyb3BCQm94LmFwcGx5UHJvamVjdGlvbihsaWdodFByb2pNYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIF9taW4gPSBjcm9wQkJveC5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgICAgICB2YXIgX21heCA9IGNyb3BCQm94Lm1heC5hcnJheTtcclxuICAgICAgICAgICAgICAgIF9taW5bMF0gPSBNYXRoLm1heChfbWluWzBdLCAtMSk7XHJcbiAgICAgICAgICAgICAgICBfbWluWzFdID0gTWF0aC5tYXgoX21pblsxXSwgLTEpO1xyXG4gICAgICAgICAgICAgICAgX21heFswXSA9IE1hdGgubWluKF9tYXhbMF0sIDEpO1xyXG4gICAgICAgICAgICAgICAgX21heFsxXSA9IE1hdGgubWluKF9tYXhbMV0sIDEpO1xyXG4gICAgICAgICAgICAgICAgY3JvcE1hdHJpeC5vcnRobyhfbWluWzBdLCBfbWF4WzBdLCBfbWluWzFdLCBfbWF4WzFdLCAxLCAtMSk7XHJcbiAgICAgICAgICAgICAgICBsaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4Lm11bHRpcGx5TGVmdChjcm9wTWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93U2l6ZSA9IGxpZ2h0LnNoYWRvd1Jlc29sdXRpb24gfHwgNTEyO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFJldmVyc2VkLCBsZWZ0IHRvIHJpZ2h0ID0+IGZhciB0byBuZWFyXHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCgobGlnaHQuc2hhZG93Q2FzY2FkZSAtIGkgLSAxKSAqIHNoYWRvd1NpemUsIDAsIHNoYWRvd1NpemUsIHNoYWRvd1NpemUsIDEpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciByZW5kZXJMaXN0ID0gc2NlbmUudXBkYXRlUmVuZGVyTGlzdChsaWdodENhbWVyYSk7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKHJlbmRlckxpc3Qub3BhcXVlLCBsaWdodENhbWVyYSwgcGFzc0NvbmZpZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gRmlsdGVyIGZvciBWU01cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2F1c3NpYW5GaWx0ZXIocmVuZGVyZXIsIHRleHR1cmUsIHRleHR1cmUud2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgICAgICAgICAgbWF0cml4LmNvcHkobGlnaHRDYW1lcmEudmlld01hdHJpeClcclxuICAgICAgICAgICAgICAgICAgICAubXVsdGlwbHlMZWZ0KGxpZ2h0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlcy5wdXNoKG1hdHJpeC5hcnJheSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5jb3B5KGxpZ2h0UHJvak1hdHJpeCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCh2aWV3cG9ydCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgcmVuZGVyU3BvdExpZ2h0U2hhZG93OiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBsaWdodCwgc3BvdExpZ2h0TWF0cmljZXMsIHNwb3RMaWdodFNoYWRvd01hcHMpIHtcclxuXHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9nZXRUZXh0dXJlKGxpZ2h0KTtcclxuICAgICAgICB2YXIgbGlnaHRDYW1lcmEgPSB0aGlzLl9nZXRTcG90TGlnaHRDYW1lcmEobGlnaHQpO1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUpO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICBfZ2wuY2xlYXIoX2dsLkNPTE9SX0JVRkZFUl9CSVQgfCBfZ2wuREVQVEhfQlVGRkVSX0JJVCk7XHJcblxyXG4gICAgICAgIHZhciBkZWZhdWx0U2hhZG93TWF0ZXJpYWwgPSB0aGlzLl9nZXREZXB0aE1hdGVyaWFsKGxpZ2h0KTtcclxuICAgICAgICB2YXIgcGFzc0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5zaGFkb3dEZXB0aE1hdGVyaWFsIHx8IGRlZmF1bHRTaGFkb3dNYXRlcmlhbDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGlzRGVwdGhNYXRlcmlhbENoYW5nZWQsXHJcbiAgICAgICAgICAgIGdldFVuaWZvcm06IGdldERlcHRoTWF0ZXJpYWxVbmlmb3JtLFxyXG4gICAgICAgICAgICBpZlJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLmNhc3RTaGFkb3c7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNvcnRDb21wYXJlOiBSZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJMaXN0ID0gc2NlbmUudXBkYXRlUmVuZGVyTGlzdChsaWdodENhbWVyYSk7XHJcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhyZW5kZXJMaXN0Lm9wYXF1ZSwgbGlnaHRDYW1lcmEsIHBhc3NDb25maWcpO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAvLyBGaWx0ZXIgZm9yIFZTTVxyXG4gICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2dhdXNzaWFuRmlsdGVyKHJlbmRlcmVyLCB0ZXh0dXJlLCB0ZXh0dXJlLndpZHRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIG1hdHJpeC5jb3B5KGxpZ2h0Q2FtZXJhLndvcmxkVHJhbnNmb3JtKVxyXG4gICAgICAgICAgICAuaW52ZXJ0KClcclxuICAgICAgICAgICAgLm11bHRpcGx5TGVmdChsaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgc3BvdExpZ2h0U2hhZG93TWFwcy5wdXNoKHRleHR1cmUpO1xyXG4gICAgICAgIHNwb3RMaWdodE1hdHJpY2VzLnB1c2gobWF0cml4LmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVuZGVyUG9pbnRMaWdodFNoYWRvdzogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgbGlnaHQsIHBvaW50TGlnaHRTaGFkb3dNYXBzKSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9nZXRUZXh0dXJlKGxpZ2h0KTtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgcG9pbnRMaWdodFNoYWRvd01hcHMucHVzaCh0ZXh0dXJlKTtcclxuXHJcbiAgICAgICAgdmFyIGRlZmF1bHRTaGFkb3dNYXRlcmlhbCA9IHRoaXMuX2dldERlcHRoTWF0ZXJpYWwobGlnaHQpO1xyXG4gICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLnNoYWRvd0RlcHRoTWF0ZXJpYWwgfHwgZGVmYXVsdFNoYWRvd01hdGVyaWFsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnZXRVbmlmb3JtOiBnZXREZXB0aE1hdGVyaWFsVW5pZm9ybSxcclxuICAgICAgICAgICAgc29ydENvbXBhcmU6IFJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIHJlbmRlckxpc3RFYWNoU2lkZSA9IHtcclxuICAgICAgICAgICAgcHg6IFtdLCBweTogW10sIHB6OiBbXSwgbng6IFtdLCBueTogW10sIG56OiBbXVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIGJib3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB2YXIgbGlnaHRXb3JsZFBvc2l0aW9uID0gbGlnaHQuZ2V0V29ybGRQb3NpdGlvbigpLmFycmF5O1xyXG4gICAgICAgIHZhciBsaWdodEJCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB2YXIgcmFuZ2UgPSBsaWdodC5yYW5nZTtcclxuICAgICAgICBsaWdodEJCb3gubWluLnNldEFycmF5KGxpZ2h0V29ybGRQb3NpdGlvbik7XHJcbiAgICAgICAgbGlnaHRCQm94Lm1heC5zZXRBcnJheShsaWdodFdvcmxkUG9zaXRpb24pO1xyXG4gICAgICAgIHZhciBleHRlbnQgPSBuZXcgVmVjdG9yMyhyYW5nZSwgcmFuZ2UsIHJhbmdlKTtcclxuICAgICAgICBsaWdodEJCb3gubWF4LmFkZChleHRlbnQpO1xyXG4gICAgICAgIGxpZ2h0QkJveC5taW4uc3ViKGV4dGVudCk7XHJcblxyXG4gICAgICAgIHZhciB0YXJnZXRzTmVlZFJlbmRlciA9IHsgcHg6IGZhbHNlLCBweTogZmFsc2UsIHB6OiBmYWxzZSwgbng6IGZhbHNlLCBueTogZmFsc2UsIG56OiBmYWxzZSB9O1xyXG4gICAgICAgIHNjZW5lLnRyYXZlcnNlKGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLmlzUmVuZGVyYWJsZSgpICYmIHJlbmRlcmFibGUuY2FzdFNoYWRvdykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gcmVuZGVyYWJsZS5nZW9tZXRyeTtcclxuICAgICAgICAgICAgICAgIGlmICghZ2VvbWV0cnkuYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGlzdEVhY2hTaWRlW3RhcmdldHNbaV1dLnB1c2gocmVuZGVyYWJsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJib3gudHJhbnNmb3JtRnJvbShnZW9tZXRyeS5ib3VuZGluZ0JveCwgcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWJib3guaW50ZXJzZWN0Qm91bmRpbmdCb3gobGlnaHRCQm94KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBiYm94LnVwZGF0ZVZlcnRpY2VzKCk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRzTmVlZFJlbmRlclt0YXJnZXRzW2ldXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdnR4ID0gYmJveC52ZXJ0aWNlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IHZ0eFswXSAtIGxpZ2h0V29ybGRQb3NpdGlvblswXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IHZ0eFsxXSAtIGxpZ2h0V29ybGRQb3NpdGlvblsxXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeiA9IHZ0eFsyXSAtIGxpZ2h0V29ybGRQb3NpdGlvblsyXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYWJzeCA9IE1hdGguYWJzKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhYnN5ID0gTWF0aC5hYnMoeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFic3ogPSBNYXRoLmFicyh6KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWJzeCA+IGFic3kpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFic3ggPiBhYnN6KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzTmVlZFJlbmRlclt4ID4gMCA/ICdweCcgOiAnbngnXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzTmVlZFJlbmRlclt6ID4gMCA/ICdweicgOiAnbnonXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYnN5ID4gYWJzeikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c05lZWRSZW5kZXJbeSA+IDAgPyAncHknIDogJ255J10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c05lZWRSZW5kZXJbeiA+IDAgPyAncHonIDogJ256J10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YXJnZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldHNOZWVkUmVuZGVyW3RhcmdldHNbaV1dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxpc3RFYWNoU2lkZVt0YXJnZXRzW2ldXS5wdXNoKHJlbmRlcmFibGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGFyZ2V0c1tpXTtcclxuICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuX2dldFBvaW50TGlnaHRDYW1lcmEobGlnaHQsIHRhcmdldCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5hdHRhY2godGV4dHVyZSwgX2dsLkNPTE9SX0FUVEFDSE1FTlQwLCBfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICBfZ2wuY2xlYXIoX2dsLkNPTE9SX0JVRkZFUl9CSVQgfCBfZ2wuREVQVEhfQlVGRkVSX0JJVCk7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKHJlbmRlckxpc3RFYWNoU2lkZVt0YXJnZXRdLCBjYW1lcmEsIHBhc3NDb25maWcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2dldERlcHRoTWF0ZXJpYWw6IGZ1bmN0aW9uIChsaWdodCkge1xyXG4gICAgICAgIHZhciBzaGFkb3dNYXRlcmlhbCA9IHRoaXMuX2xpZ2h0TWF0ZXJpYWxzW2xpZ2h0Ll9fdWlkX19dO1xyXG4gICAgICAgIHZhciBpc1BvaW50TGlnaHQgPSBsaWdodC50eXBlID09PSAnUE9JTlRfTElHSFQnO1xyXG4gICAgICAgIGlmICghc2hhZG93TWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgdmFyIHNoYWRlclByZWZpeCA9IGlzUG9pbnRMaWdodCA/ICdjbGF5LnNtLmRpc3RhbmNlLicgOiAnY2xheS5zbS5kZXB0aC4nO1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IHRoaXMucHJlY2lzaW9uLFxyXG4gICAgICAgICAgICAgICAgc2hhZGVyOiBuZXcgU2hhZGVyKFNoYWRlci5zb3VyY2Uoc2hhZGVyUHJlZml4ICsgJ3ZlcnRleCcpLCBTaGFkZXIuc291cmNlKHNoYWRlclByZWZpeCArICdmcmFnbWVudCcpKVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2xpZ2h0TWF0ZXJpYWxzW2xpZ2h0Ll9fdWlkX19dID0gc2hhZG93TWF0ZXJpYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsaWdodC5zaGFkb3dTbG9wZVNjYWxlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwuc2V0VW5pZm9ybSgnc2xvcGVTY2FsZScsIGxpZ2h0LnNoYWRvd1Nsb3BlU2NhbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGlnaHQuc2hhZG93QmlhcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHNoYWRvd01hdGVyaWFsLnNldFVuaWZvcm0oJ2JpYXMnLCBsaWdodC5zaGFkb3dCaWFzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc29mdFNoYWRvdyA9PT0gU2hhZG93TWFwUGFzcy5WU00pIHtcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfVlNNJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzUG9pbnRMaWdodCkge1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbC5zZXQoJ2xpZ2h0UG9zaXRpb24nLCBsaWdodC5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXkpO1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbC5zZXQoJ3JhbmdlJywgbGlnaHQucmFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHNoYWRvd01hdGVyaWFsO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZ2F1c3NpYW5GaWx0ZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgdGV4dHVyZSwgc2l6ZSkge1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXIgPSB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBzaXplLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IHNpemUsXHJcbiAgICAgICAgICAgIHR5cGU6IFRleHR1cmUuRkxPQVRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciB0bXBUZXh0dXJlID0gdGhpcy5fdGV4dHVyZVBvb2wuZ2V0KHBhcmFtZXRlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmF0dGFjaCh0bXBUZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NILnNldFVuaWZvcm0oJ3RleHR1cmUnLCB0ZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NILnNldFVuaWZvcm0oJ3RleHR1cmVXaWR0aCcsIHNpemUpO1xyXG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc0gucmVuZGVyKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUpO1xyXG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc1Yuc2V0VW5pZm9ybSgndGV4dHVyZScsIHRtcFRleHR1cmUpO1xyXG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc1Yuc2V0VW5pZm9ybSgndGV4dHVyZUhlaWdodCcsIHNpemUpO1xyXG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc1YucmVuZGVyKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl90ZXh0dXJlUG9vbC5wdXQodG1wVGV4dHVyZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXRUZXh0dXJlOiBmdW5jdGlvbiAobGlnaHQsIGNhc2NhZGUpIHtcclxuICAgICAgICB2YXIga2V5ID0gbGlnaHQuX191aWRfXztcclxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW2tleV07XHJcbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBsaWdodC5zaGFkb3dSZXNvbHV0aW9uIHx8IDUxMjtcclxuICAgICAgICBjYXNjYWRlID0gY2FzY2FkZSB8fCAxO1xyXG4gICAgICAgIGlmICghdGV4dHVyZSkge1xyXG4gICAgICAgICAgICBpZiAobGlnaHQudHlwZSA9PT0gJ1BPSU5UX0xJR0hUJykge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlQ3ViZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBBdCBtb3N0IDQgY2FzY2FkZVxyXG4gICAgICAgICAgICAvLyBUT0RPIHNoYXJlIHdpdGggaGVpZ2h0ID9cclxuICAgICAgICAgICAgdGV4dHVyZS53aWR0aCA9IHJlc29sdXRpb24gKiBjYXNjYWRlO1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmhlaWdodCA9IHJlc29sdXRpb247XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnR5cGUgPSBUZXh0dXJlLkZMT0FUO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5hbmlzb3Ryb3BpYyA9IDQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLm1pbkZpbHRlciA9IGdsZW51bS5ORUFSRVNUO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5tYWdGaWx0ZXIgPSBnbGVudW0uTkVBUkVTVDtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUudXNlTWlwbWFwID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXNba2V5XSA9IHRleHR1cmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgX2dldFBvaW50TGlnaHRDYW1lcmE6IGZ1bmN0aW9uIChsaWdodCwgdGFyZ2V0KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9saWdodENhbWVyYXMucG9pbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5fbGlnaHRDYW1lcmFzLnBvaW50ID0ge1xyXG4gICAgICAgICAgICAgICAgcHg6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxyXG4gICAgICAgICAgICAgICAgbng6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxyXG4gICAgICAgICAgICAgICAgcHk6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxyXG4gICAgICAgICAgICAgICAgbnk6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxyXG4gICAgICAgICAgICAgICAgcHo6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxyXG4gICAgICAgICAgICAgICAgbno6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLl9saWdodENhbWVyYXMucG9pbnRbdGFyZ2V0XTtcclxuXHJcbiAgICAgICAgY2FtZXJhLmZhciA9IGxpZ2h0LnJhbmdlO1xyXG4gICAgICAgIGNhbWVyYS5mb3YgPSA5MDtcclxuICAgICAgICBjYW1lcmEucG9zaXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgICAgIHN3aXRjaCAodGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3B4JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9YLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ254JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9YLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3B5JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9ZLCBWZWN0b3IzLlBPU0lUSVZFX1opO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ255JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9ZLCBWZWN0b3IzLk5FR0FUSVZFX1opO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3B6JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9aLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ256JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9aLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpZ2h0LmdldFdvcmxkUG9zaXRpb24oY2FtZXJhLnBvc2l0aW9uKTtcclxuICAgICAgICBjYW1lcmEudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBjYW1lcmE7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXREaXJlY3Rpb25hbExpZ2h0Q2FtZXJhOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsaWdodFZpZXdNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBzY2VuZVZpZXdCb3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHZhciBsaWdodFZpZXdCQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgLy8gQ2FtZXJhIG9mIGRpcmVjdGlvbmFsIGxpZ2h0IHdpbGwgYmUgYWRqdXN0ZWRcclxuICAgICAgICAvLyB0byBjb250YWluIHRoZSB2aWV3IGZydXN0dW0gYW5kIHNjZW5lIGJvdW5kaW5nIGJveCBhcyB0aWdodGx5IGFzIHBvc3NpYmxlXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChsaWdodCwgc2NlbmUsIHNjZW5lQ2FtZXJhKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fbGlnaHRDYW1lcmFzLmRpcmVjdGlvbmFsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9saWdodENhbWVyYXMuZGlyZWN0aW9uYWwgPSBuZXcgT3J0aG9DYW1lcmEoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fbGlnaHRDYW1lcmFzLmRpcmVjdGlvbmFsO1xyXG5cclxuICAgICAgICAgICAgc2NlbmVWaWV3Qm91bmRpbmdCb3guY29weShzY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUpO1xyXG4gICAgICAgICAgICBzY2VuZVZpZXdCb3VuZGluZ0JveC5pbnRlcnNlY3Rpb24oc2NlbmVDYW1lcmEuZnJ1c3R1bS5ib3VuZGluZ0JveCk7XHJcbiAgICAgICAgICAgIC8vIE1vdmUgdG8gdGhlIGNlbnRlciBvZiBmcnVzdHVtKGluIHdvcmxkIHNwYWNlKVxyXG4gICAgICAgICAgICBjYW1lcmEucG9zaXRpb25cclxuICAgICAgICAgICAgICAgIC5jb3B5KHNjZW5lVmlld0JvdW5kaW5nQm94Lm1pbilcclxuICAgICAgICAgICAgICAgIC5hZGQoc2NlbmVWaWV3Qm91bmRpbmdCb3gubWF4KVxyXG4gICAgICAgICAgICAgICAgLnNjYWxlKDAuNSlcclxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm1NYXQ0KHNjZW5lQ2FtZXJhLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgY2FtZXJhLnJvdGF0aW9uLmNvcHkobGlnaHQucm90YXRpb24pO1xyXG4gICAgICAgICAgICBjYW1lcmEuc2NhbGUuY29weShsaWdodC5zY2FsZSk7XHJcbiAgICAgICAgICAgIGNhbWVyYS51cGRhdGVXb3JsZFRyYW5zZm9ybSgpO1xyXG5cclxuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHRvIGxpZ2h0IHZpZXcgc3BhY2VcclxuICAgICAgICAgICAgTWF0cml4NC5pbnZlcnQobGlnaHRWaWV3TWF0cml4LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KGxpZ2h0Vmlld01hdHJpeCwgbGlnaHRWaWV3TWF0cml4LCBzY2VuZUNhbWVyYS53b3JsZFRyYW5zZm9ybSk7XHJcblxyXG4gICAgICAgICAgICBsaWdodFZpZXdCQm94LmNvcHkoc2NlbmVWaWV3Qm91bmRpbmdCb3gpLmFwcGx5VHJhbnNmb3JtKGxpZ2h0Vmlld01hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgbWluID0gbGlnaHRWaWV3QkJveC5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXggPSBsaWdodFZpZXdCQm94Lm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgICAgIC8vIE1vdmUgY2FtZXJhIHRvIGFkanVzdCB0aGUgbmVhciB0byAwXHJcbiAgICAgICAgICAgIGNhbWVyYS5wb3NpdGlvbi5zZXQoKG1pblswXSArIG1heFswXSkgLyAyLCAobWluWzFdICsgbWF4WzFdKSAvIDIsIG1heFsyXSlcclxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm1NYXQ0KGNhbWVyYS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIGNhbWVyYS5uZWFyID0gMDtcclxuICAgICAgICAgICAgY2FtZXJhLmZhciA9IC1taW5bMl0gKyBtYXhbMl07XHJcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSByZWNlaXZlcnMgbm90IGluIHRoZSBmcnVzdHVtIHdpbGwgc3RpbCByZWNlaXZlIHRoZSBzaGFkb3cuXHJcbiAgICAgICAgICAgIGlmIChpc05hTih0aGlzLmxpZ2h0RnJ1c3R1bUJpYXMpKSB7XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEuZmFyICo9IDQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEuZmFyICs9IHRoaXMubGlnaHRGcnVzdHVtQmlhcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYW1lcmEubGVmdCA9IG1pblswXTtcclxuICAgICAgICAgICAgY2FtZXJhLnJpZ2h0ID0gbWF4WzBdO1xyXG4gICAgICAgICAgICBjYW1lcmEudG9wID0gbWF4WzFdO1xyXG4gICAgICAgICAgICBjYW1lcmEuYm90dG9tID0gbWluWzFdO1xyXG4gICAgICAgICAgICBjYW1lcmEudXBkYXRlKHRydWUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGNhbWVyYTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICBfZ2V0U3BvdExpZ2h0Q2FtZXJhOiBmdW5jdGlvbiAobGlnaHQpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2xpZ2h0Q2FtZXJhcy5zcG90KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpZ2h0Q2FtZXJhcy5zcG90ID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLl9saWdodENhbWVyYXMuc3BvdDtcclxuICAgICAgICAvLyBVcGRhdGUgcHJvcGVydGllc1xyXG4gICAgICAgIGNhbWVyYS5mb3YgPSBsaWdodC5wZW51bWJyYUFuZ2xlICogMjtcclxuICAgICAgICBjYW1lcmEuZmFyID0gbGlnaHQucmFuZ2U7XHJcbiAgICAgICAgY2FtZXJhLndvcmxkVHJhbnNmb3JtLmNvcHkobGlnaHQud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgIGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgbWF0NC5pbnZlcnQoY2FtZXJhLnZpZXdNYXRyaXguYXJyYXksIGNhbWVyYS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjYW1lcmE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcnxXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFtyZW5kZXJlcl1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuU2hhZG93TWFwLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICAvLyBQRU5ESU5HIFJlbmRlcmVyIG9yIFdlYkdMUmVuZGVyaW5nQ29udGV4dFxyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsIHx8IHJlbmRlcmVyO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuZGlzcG9zZShfZ2wpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl90ZXh0dXJlcykge1xyXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlc1tuYW1lXS5kaXNwb3NlKF9nbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90ZXh0dXJlUG9vbC5jbGVhcihyZW5kZXJlci5nbCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2RlcHRoTWF0ZXJpYWxzID0ge307XHJcbiAgICAgICAgdGhpcy5fZGlzdGFuY2VNYXRlcmlhbHMgPSB7fTtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0Q2FtZXJhcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX3NoYWRvd01hcE51bWJlciA9IHtcclxuICAgICAgICAgICAgJ1BPSU5UX0xJR0hUJzogMCxcclxuICAgICAgICAgICAgJ0RJUkVDVElPTkFMX0xJR0hUJzogMCxcclxuICAgICAgICAgICAgJ1NQT1RfTElHSFQnOiAwXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLl9tZXNoTWF0ZXJpYWxzID0ge307XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcmVjZWl2ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fcmVjZWl2ZXJzW2ldO1xyXG4gICAgICAgICAgICAvLyBNZXNoIG1heSBiZSBkaXNwb3NlZFxyXG4gICAgICAgICAgICBpZiAobWVzaC5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdQT0lOVF9MSUdIVF9TSEFET1dfQ09VTlQnKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dfQ09VTlQnKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdBTUJJRU5UX0xJR0hUX1NIQURPV19DT1VOVCcpO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdzaGFkb3dFbmFibGVkJywgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3JlY2VpdmVycyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cgPSBbXTtcclxuICAgIH1cclxufSk7XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5WU01cclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblNoYWRvd01hcFBhc3MuVlNNID0gMTtcclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LnByZVBhc3MuU2hhZG93TWFwLlBDRlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuU2hhZG93TWFwUGFzcy5QQ0YgPSAyO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2hhZG93TWFwUGFzcztcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFJheSBmcm9tICcuLi9tYXRoL1JheSc7XHJcbmltcG9ydCBWZWN0b3IyIGZyb20gJy4uL21hdGgvVmVjdG9yMic7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4uL21hdGgvTWF0cml4NCc7XHJcbmltcG9ydCBSZW5kZXJhYmxlIGZyb20gJy4uL1JlbmRlcmFibGUnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGlja2luZy5SYXlQaWNraW5nXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgUmF5UGlja2luZyA9IEJhc2UuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5waWNraW5nLlJheVBpY2tpbmcjICove1xyXG4gICAgLyoqXHJcbiAgICAgKiBUYXJnZXQgc2NlbmVcclxuICAgICAqIEB0eXBlIHtjbGF5LlNjZW5lfVxyXG4gICAgICovXHJcbiAgICBzY2VuZTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogVGFyZ2V0IGNhbWVyYVxyXG4gICAgICogQHR5cGUge2NsYXkuQ2FtZXJhfVxyXG4gICAgICovXHJcbiAgICBjYW1lcmE6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFRhcmdldCByZW5kZXJlclxyXG4gICAgICogQHR5cGUge2NsYXkuUmVuZGVyZXJ9XHJcbiAgICAgKi9cclxuICAgIHJlbmRlcmVyOiBudWxsXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX3JheSA9IG5ldyBSYXkoKTtcclxuICAgIHRoaXMuX25kYyA9IG5ldyBWZWN0b3IyKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5waWNraW5nLlJheVBpY2tpbmcucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpY2sgdGhlIG5lYXJlc3QgaW50ZXJzZWN0aW9uIG9iamVjdCBpbiB0aGUgc2NlbmVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0geCBNb3VzZSBwb3NpdGlvbiB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHkgTW91c2UgcG9zaXRpb24geVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW2ZvcmNlUGlja0FsbD1mYWxzZV0gaWdub3JlIGlnbm9yZVBpY2tpbmdcclxuICAgICAqIEByZXR1cm4ge2NsYXkucGlja2luZy5SYXlQaWNraW5nfkludGVyc2VjdGlvbn1cclxuICAgICAqL1xyXG4gICAgcGljazogZnVuY3Rpb24gKHgsIHksIGZvcmNlUGlja0FsbCkge1xyXG4gICAgICAgIHZhciBvdXQgPSB0aGlzLnBpY2tBbGwoeCwgeSwgW10sIGZvcmNlUGlja0FsbCk7XHJcbiAgICAgICAgcmV0dXJuIG91dFswXSB8fCBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpY2sgYWxsIGludGVyc2VjdGlvbiBvYmplY3RzLCB3aWNoIHdpbGwgYmUgc29ydGVkIGZyb20gbmVhciB0byBmYXJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0geCBNb3VzZSBwb3NpdGlvbiB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHkgTW91c2UgcG9zaXRpb24geVxyXG4gICAgICogQHBhcmFtICB7QXJyYXl9IFtvdXRwdXRdXHJcbiAgICAgKiBAcGFyYW0gIHtib29sZWFufSBbZm9yY2VQaWNrQWxsPWZhbHNlXSBpZ25vcmUgaWdub3JlUGlja2luZ1xyXG4gICAgICogQHJldHVybiB7QXJyYXkuPGNsYXkucGlja2luZy5SYXlQaWNraW5nfkludGVyc2VjdGlvbj59XHJcbiAgICAgKi9cclxuICAgIHBpY2tBbGw6IGZ1bmN0aW9uICh4LCB5LCBvdXRwdXQsIGZvcmNlUGlja0FsbCkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2NyZWVuVG9OREMoeCwgeSwgdGhpcy5fbmRjKTtcclxuICAgICAgICB0aGlzLmNhbWVyYS5jYXN0UmF5KHRoaXMuX25kYywgdGhpcy5fcmF5KTtcclxuXHJcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0IHx8IFtdO1xyXG5cclxuICAgICAgICB0aGlzLl9pbnRlcnNlY3ROb2RlKHRoaXMuc2NlbmUsIG91dHB1dCwgZm9yY2VQaWNrQWxsIHx8IGZhbHNlKTtcclxuXHJcbiAgICAgICAgb3V0cHV0LnNvcnQodGhpcy5faW50ZXJzZWN0aW9uQ29tcGFyZUZ1bmMpO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfSxcclxuXHJcbiAgICBfaW50ZXJzZWN0Tm9kZTogZnVuY3Rpb24gKG5vZGUsIG91dCwgZm9yY2VQaWNrQWxsKSB7XHJcbiAgICAgICAgaWYgKChub2RlIGluc3RhbmNlb2YgUmVuZGVyYWJsZSkgJiYgbm9kZS5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICBpZiAoKCFub2RlLmlnbm9yZVBpY2tpbmcgfHwgZm9yY2VQaWNrQWxsKVxyXG4gICAgICAgICAgICAgICAgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdHJpYW5nbGUgbWVzaCBzdXBwb3J0IHJheSBwaWNraW5nXHJcbiAgICAgICAgICAgICAgICAgICAgKG5vZGUubW9kZSA9PT0gZ2xlbnVtLlRSSUFOR0xFUyAmJiBub2RlLmdlb21ldHJ5LmlzVXNlSW5kaWNlcygpKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9yIGlmIGdlb21ldHJ5IGhhcyBpdCdzIG93biBwaWNrQnlSYXksIHBpY2ssIGltcGxlbWVudGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgbm9kZS5nZW9tZXRyeS5waWNrQnlSYXlcclxuICAgICAgICAgICAgICAgICAgICB8fCBub2RlLmdlb21ldHJ5LnBpY2tcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcnNlY3RSZW5kZXJhYmxlKG5vZGUsIG91dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLl9jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9pbnRlcnNlY3ROb2RlKG5vZGUuX2NoaWxkcmVuW2ldLCBvdXQsIGZvcmNlUGlja0FsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfaW50ZXJzZWN0UmVuZGVyYWJsZTogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB2YXIgdjIgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIHZhciB2MyA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgdmFyIHJheSA9IG5ldyBSYXkoKTtcclxuICAgICAgICB2YXIgd29ybGRJbnZlcnNlID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBvdXQpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBpc1NraW5uZWRNZXNoID0gcmVuZGVyYWJsZS5pc1NraW5uZWRNZXNoKCk7XHJcbiAgICAgICAgICAgIHJheS5jb3B5KHRoaXMuX3JheSk7XHJcbiAgICAgICAgICAgIE1hdHJpeDQuaW52ZXJ0KHdvcmxkSW52ZXJzZSwgcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybSk7XHJcblxyXG4gICAgICAgICAgICAvLyBTa2lubmVkIG1lc2ggd2lsbCBpZ25vcmUgdGhlIHdvcmxkIHRyYW5zZm9ybS5cclxuICAgICAgICAgICAgaWYgKCFpc1NraW5uZWRNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICByYXkuYXBwbHlUcmFuc2Zvcm0od29ybGRJbnZlcnNlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gcmVuZGVyYWJsZS5nZW9tZXRyeTtcclxuXHJcbiAgICAgICAgICAgIHZhciBiYm94ID0gaXNTa2lubmVkTWVzaCA/IHJlbmRlcmFibGUuc2tlbGV0b24uYm91bmRpbmdCb3ggOiBnZW9tZXRyeS5ib3VuZGluZ0JveDtcclxuXHJcbiAgICAgICAgICAgIGlmIChiYm94ICYmICFyYXkuaW50ZXJzZWN0Qm91bmRpbmdCb3goYmJveCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBVc2UgdXNlciBkZWZpbmVkIHBpY2tpbmcgYWxnb3JpdGhtXHJcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeS5waWNrKSB7XHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5waWNrKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25kYy54LCB0aGlzLl9uZGMueSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGUsIG91dFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBVc2UgdXNlciBkZWZpbmVkIHJheSBwaWNraW5nIGFsZ29yaXRobVxyXG4gICAgICAgICAgICBlbHNlIGlmIChnZW9tZXRyeS5waWNrQnlSYXkpIHtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LnBpY2tCeVJheShyYXksIHJlbmRlcmFibGUsIG91dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBjdWxsQmFjayA9IChyZW5kZXJhYmxlLmN1bGxGYWNlID09PSBnbGVudW0uQkFDSyAmJiByZW5kZXJhYmxlLmZyb250RmFjZSA9PT0gZ2xlbnVtLkNDVylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHJlbmRlcmFibGUuY3VsbEZhY2UgPT09IGdsZW51bS5GUk9OVCAmJiByZW5kZXJhYmxlLmZyb250RmFjZSA9PT0gZ2xlbnVtLkNXKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwb2ludDtcclxuICAgICAgICAgICAgdmFyIGluZGljZXMgPSBnZW9tZXRyeS5pbmRpY2VzO1xyXG4gICAgICAgICAgICB2YXIgcG9zaXRpb25BdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcclxuICAgICAgICAgICAgdmFyIHdlaWdodEF0dHIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLndlaWdodDtcclxuICAgICAgICAgICAgdmFyIGpvaW50QXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMuam9pbnQ7XHJcbiAgICAgICAgICAgIHZhciBza2luTWF0cmljZXNBcnJheTtcclxuICAgICAgICAgICAgdmFyIHNraW5NYXRyaWNlcyA9IFtdO1xyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB2YWxpZC5cclxuICAgICAgICAgICAgaWYgKCFwb3NpdGlvbkF0dHIgfHwgIXBvc2l0aW9uQXR0ci52YWx1ZSB8fCAhaW5kaWNlcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc1NraW5uZWRNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICBza2luTWF0cmljZXNBcnJheSA9IHJlbmRlcmFibGUuc2tlbGV0b24uZ2V0U3ViU2tpbk1hdHJpY2VzKHJlbmRlcmFibGUuX191aWRfXywgcmVuZGVyYWJsZS5qb2ludHMpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZW5kZXJhYmxlLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNraW5NYXRyaWNlc1tpXSA9IHNraW5NYXRyaWNlc1tpXSB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDE2OyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpbk1hdHJpY2VzW2ldW2tdID0gc2tpbk1hdHJpY2VzQXJyYXlbaSAqIDE2ICsga107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHBvcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHdlaWdodCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50ID0gW107XHJcbiAgICAgICAgICAgICAgICB2YXIgc2tpbm5lZFBvcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRtcCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNraW5uZWRQb3NpdGlvbkF0dHIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5uZWRQb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgIGlmICghc2tpbm5lZFBvc2l0aW9uQXR0ciB8fCAhc2tpbm5lZFBvc2l0aW9uQXR0ci52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmNyZWF0ZUF0dHJpYnV0ZSgnc2tpbm5lZFBvc2l0aW9uJywgJ2YnLCAzKTtcclxuICAgICAgICAgICAgICAgICAgICBza2lubmVkUG9zaXRpb25BdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5za2lubmVkUG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgc2tpbm5lZFBvc2l0aW9uQXR0ci5pbml0KGdlb21ldHJ5LnZlcnRleENvdW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvbWV0cnkudmVydGV4Q291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uQXR0ci5nZXQoaSwgcG9zKTtcclxuICAgICAgICAgICAgICAgICAgICB3ZWlnaHRBdHRyLmdldChpLCB3ZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGpvaW50QXR0ci5nZXQoaSwgam9pbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdlaWdodFszXSA9IDEgLSB3ZWlnaHRbMF0gLSB3ZWlnaHRbMV0gLSB3ZWlnaHRbMl07XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5zZXQoc2tpbm5lZFBvcywgMCwgMCwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCA0OyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpvaW50W2tdID49IDAgJiYgd2VpZ2h0W2tdID4gMWUtNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMy50cmFuc2Zvcm1NYXQ0KHRtcCwgcG9zLCBza2luTWF0cmljZXNbam9pbnRba11dKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQoc2tpbm5lZFBvcywgc2tpbm5lZFBvcywgdG1wLCB3ZWlnaHRba10pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNraW5uZWRQb3NpdGlvbkF0dHIuc2V0KGksIHNraW5uZWRQb3MpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpICs9IDMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpMSA9IGluZGljZXNbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgaTIgPSBpbmRpY2VzW2kgKyAxXTtcclxuICAgICAgICAgICAgICAgIHZhciBpMyA9IGluZGljZXNbaSArIDJdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsUG9zQXR0ciA9IGlzU2tpbm5lZE1lc2hcclxuICAgICAgICAgICAgICAgICAgICA/IGdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbm5lZFBvc2l0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgOiBwb3NpdGlvbkF0dHI7XHJcbiAgICAgICAgICAgICAgICBmaW5hbFBvc0F0dHIuZ2V0KGkxLCB2MS5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICBmaW5hbFBvc0F0dHIuZ2V0KGkyLCB2Mi5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICBmaW5hbFBvc0F0dHIuZ2V0KGkzLCB2My5hcnJheSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGN1bGxCYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnQgPSByYXkuaW50ZXJzZWN0VHJpYW5nbGUodjEsIHYyLCB2MywgcmVuZGVyYWJsZS5jdWxsaW5nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50ID0gcmF5LmludGVyc2VjdFRyaWFuZ2xlKHYxLCB2MywgdjIsIHJlbmRlcmFibGUuY3VsbGluZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9pbnRXID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yMy50cmFuc2Zvcm1NYXQ0KHBvaW50VywgcG9pbnQsIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBwb2ludCBtYXliZSBub3QgcmlnaHQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjMuY29weShwb2ludFcsIHBvaW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0LnB1c2gobmV3IFJheVBpY2tpbmcuSW50ZXJzZWN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludCwgcG9pbnRXLCByZW5kZXJhYmxlLCBbaTEsIGkyLCBpM10sIGkgLyAzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3IzLmRpc3QocG9pbnRXLCB0aGlzLl9yYXkub3JpZ2luKVxyXG4gICAgICAgICAgICAgICAgICAgICkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgX2ludGVyc2VjdGlvbkNvbXBhcmVGdW5jOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgIHJldHVybiBhLmRpc3RhbmNlIC0gYi5kaXN0YW5jZTtcclxuICAgIH1cclxufSk7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGlja2luZy5SYXlQaWNraW5nfkludGVyc2VjdGlvblxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gcG9pbnRcclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHBvaW50V29ybGRcclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IHRhcmdldFxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB0cmlhbmdsZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gdHJpYW5nbGVJbmRleFxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2VcclxuICovXHJcblJheVBpY2tpbmcuSW50ZXJzZWN0aW9uID0gZnVuY3Rpb24gKHBvaW50LCBwb2ludFdvcmxkLCB0YXJnZXQsIHRyaWFuZ2xlLCB0cmlhbmdsZUluZGV4LCBkaXN0YW5jZSkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcnNlY3Rpb24gcG9pbnQgaW4gbG9jYWwgdHJhbnNmb3JtIGNvb3JkaW5hdGVzXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnBvaW50ID0gcG9pbnQ7XHJcbiAgICAvKipcclxuICAgICAqIEludGVyc2VjdGlvbiBwb2ludCBpbiB3b3JsZCB0cmFuc2Zvcm0gY29vcmRpbmF0ZXNcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucG9pbnRXb3JsZCA9IHBvaW50V29ybGQ7XHJcbiAgICAvKipcclxuICAgICAqIEludGVyc2VjdGlvbiBzY2VuZSBub2RlXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJzZWN0aW9uIHRyaWFuZ2xlLCB3aGljaCBpcyBhbiBhcnJheSBvZiB2ZXJ0ZXggaW5kZXhcclxuICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgdGhpcy50cmlhbmdsZSA9IHRyaWFuZ2xlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRleCBvZiBpbnRlcnNlY3Rpb24gdHJpYW5nbGUuXHJcbiAgICAgKi9cclxuICAgIHRoaXMudHJpYW5nbGVJbmRleCA9IHRyaWFuZ2xlSW5kZXg7XHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGZyb20gaW50ZXJzZWN0aW9uIHBvaW50IHRvIHJheSBvcmlnaW5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZGlzdGFuY2UgPSBkaXN0YW5jZTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJheVBpY2tpbmc7XHJcbiIsIi8vIFNwaGVyaWNhbCBIYXJtb25pYyBIZWxwZXJzXHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBQYXNzIGZyb20gJy4uL2NvbXBvc2l0b3IvUGFzcyc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgU2t5Ym94IGZyb20gJy4uL3BsdWdpbi9Ta3lib3gnO1xyXG5pbXBvcnQgU2t5ZG9tZSBmcm9tICcuLi9wbHVnaW4vU2t5ZG9tZSc7XHJcbmltcG9ydCBFbnZpcm9ubWVudE1hcFBhc3MgZnJvbSAnLi4vcHJlUGFzcy9FbnZpcm9ubWVudE1hcCc7XHJcbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG52YXIgc2ggPSB7fTtcclxuXHJcbmltcG9ydCBwcm9qZWN0RW52TWFwU2hhZGVyQ29kZSBmcm9tICcuL3NoYWRlci9wcm9qZWN0RW52TWFwLmdsc2wuanMnO1xyXG5cclxudmFyIHRhcmdldHMgPSBbJ3B4JywgJ254JywgJ3B5JywgJ255JywgJ3B6JywgJ256J107XHJcblxyXG4vLyBQcm9qZWN0IG9uIGdwdSwgYnV0IG5lZWRzIGJyb3dzZXIgdG8gc3VwcG9ydCByZWFkUGl4ZWxzIGFzIEZsb2F0MzJBcnJheS5cclxuZnVuY3Rpb24gcHJvamVjdEVudmlyb25tZW50TWFwR1BVKHJlbmRlcmVyLCBlbnZNYXApIHtcclxuICAgIHZhciBzaFRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICB3aWR0aDogOSxcclxuICAgICAgICBoZWlnaHQ6IDEsXHJcbiAgICAgICAgdHlwZTogVGV4dHVyZS5GTE9BVFxyXG4gICAgfSk7XHJcbiAgICB2YXIgcGFzcyA9IG5ldyBQYXNzKHtcclxuICAgICAgICBmcmFnbWVudDogcHJvamVjdEVudk1hcFNoYWRlckNvZGVcclxuICAgIH0pO1xyXG4gICAgcGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1RFWFRVUkVfU0laRScsIGVudk1hcC53aWR0aCk7XHJcbiAgICBwYXNzLnNldFVuaWZvcm0oJ2Vudmlyb25tZW50TWFwJywgZW52TWFwKTtcclxuXHJcbiAgICB2YXIgZnJhbWVidWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcclxuICAgIGZyYW1lYnVmZmVyLmF0dGFjaChzaFRleHR1cmUpO1xyXG4gICAgcGFzcy5yZW5kZXIocmVuZGVyZXIsIGZyYW1lYnVmZmVyKTtcclxuXHJcbiAgICBmcmFtZWJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgIC8vIFRPRE8gT25seSBjaHJvbWUgYW5kIGZpcmVmb3ggc3VwcG9ydCBGbG9hdDMyQXJyYXlcclxuICAgIHZhciBwaXhlbHMgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSg5ICogNCk7XHJcbiAgICByZW5kZXJlci5nbC5yZWFkUGl4ZWxzKDAsIDAsIDksIDEsIFRleHR1cmUuUkdCQSwgVGV4dHVyZS5GTE9BVCwgcGl4ZWxzKTtcclxuXHJcbiAgICB2YXIgY29lZmYgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSg5ICogMyk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDk7IGkrKykge1xyXG4gICAgICAgIGNvZWZmW2kgKiAzXSA9IHBpeGVsc1tpICogNF07XHJcbiAgICAgICAgY29lZmZbaSAqIDMgKyAxXSA9IHBpeGVsc1tpICogNCArIDFdO1xyXG4gICAgICAgIGNvZWZmW2kgKiAzICsgMl0gPSBwaXhlbHNbaSAqIDQgKyAyXTtcclxuICAgIH1cclxuICAgIGZyYW1lYnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgZnJhbWVidWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICBwYXNzLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgcmV0dXJuIGNvZWZmO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYXJtb25pY3Mobm9ybWFsLCBpbmRleCl7XHJcbiAgICB2YXIgeCA9IG5vcm1hbFswXTtcclxuICAgIHZhciB5ID0gbm9ybWFsWzFdO1xyXG4gICAgdmFyIHogPSBub3JtYWxbMl07XHJcblxyXG4gICAgaWYgKGluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIDEuMDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGluZGV4ID09PSAxKSB7XHJcbiAgICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmRleCA9PT0gMikge1xyXG4gICAgICAgIHJldHVybiB5O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaW5kZXggPT09IDMpIHtcclxuICAgICAgICByZXR1cm4gejtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGluZGV4ID09PSA0KSB7XHJcbiAgICAgICAgcmV0dXJuIHggKiB6O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaW5kZXggPT09IDUpIHtcclxuICAgICAgICByZXR1cm4geSAqIHo7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmRleCA9PT0gNikge1xyXG4gICAgICAgIHJldHVybiB4ICogeTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGluZGV4ID09PSA3KSB7XHJcbiAgICAgICAgcmV0dXJuIDMuMCAqIHogKiB6IC0gMS4wO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHggKiB4IC0geSAqIHk7XHJcbiAgICB9XHJcbn1cclxuXHJcbnZhciBub3JtYWxUcmFuc2Zvcm0gPSB7XHJcbiAgICBweDogWzIsIDEsIDAsIC0xLCAtMSwgMV0sXHJcbiAgICBueDogWzIsIDEsIDAsIDEsIC0xLCAtMV0sXHJcbiAgICBweTogWzAsIDIsIDEsIDEsIC0xLCAtMV0sXHJcbiAgICBueTogWzAsIDIsIDEsIDEsIDEsIDFdLFxyXG4gICAgcHo6IFswLCAxLCAyLCAtMSwgLTEsIC0xXSxcclxuICAgIG56OiBbMCwgMSwgMiwgMSwgLTEsIDFdXHJcbn07XHJcblxyXG4vLyBQcm9qZWN0IG9uIGNwdS5cclxuZnVuY3Rpb24gcHJvamVjdEVudmlyb25tZW50TWFwQ1BVKHJlbmRlcmVyLCBjdWJlUGl4ZWxzLCB3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICB2YXIgY29lZmYgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSg5ICogMyk7XHJcbiAgICB2YXIgbm9ybWFsID0gdmVjMy5jcmVhdGUoKTtcclxuICAgIHZhciB0ZXhlbCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICB2YXIgZmV0Y2hOb3JtYWwgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgZm9yICh2YXIgbSA9IDA7IG0gPCA5OyBtKyspIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRhcmdldHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgdmFyIHBpeGVscyA9IGN1YmVQaXhlbHNbdGFyZ2V0c1trXV07XHJcblxyXG4gICAgICAgICAgICB2YXIgc2lkZVJlc3VsdCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIHZhciBkaXZpZGVyID0gMDtcclxuICAgICAgICAgICAgdmFyIGkgPSAwO1xyXG4gICAgICAgICAgICB2YXIgdHJhbnNmb3JtID0gbm9ybWFsVHJhbnNmb3JtW3RhcmdldHNba11dO1xyXG4gICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsWzBdID0geCAvICh3aWR0aCAtIDEuMCkgKiAyLjAgLSAxLjA7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBGbGlwIHk/XHJcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsWzFdID0geSAvIChoZWlnaHQgLSAxLjApICogMi4wIC0gMS4wO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbFsyXSA9IC0xLjA7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUobm9ybWFsLCBub3JtYWwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmZXRjaE5vcm1hbFswXSA9IG5vcm1hbFt0cmFuc2Zvcm1bMF1dICogdHJhbnNmb3JtWzNdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZldGNoTm9ybWFsWzFdID0gbm9ybWFsW3RyYW5zZm9ybVsxXV0gKiB0cmFuc2Zvcm1bNF07XHJcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2hOb3JtYWxbMl0gPSBub3JtYWxbdHJhbnNmb3JtWzJdXSAqIHRyYW5zZm9ybVs1XTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMF0gPSBwaXhlbHNbaSsrXSAvIDI1NTtcclxuICAgICAgICAgICAgICAgICAgICB0ZXhlbFsxXSA9IHBpeGVsc1tpKytdIC8gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzJdID0gcGl4ZWxzW2krK10gLyAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUkdCTSBEZWNvZGVcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSBwaXhlbHNbaSsrXSAvIDI1NSAqIDguMTI7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMF0gKj0gc2NhbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMV0gKj0gc2NhbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMl0gKj0gc2NhbGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQoc2lkZVJlc3VsdCwgc2lkZVJlc3VsdCwgdGV4ZWwsIGhhcm1vbmljcyhmZXRjaE5vcm1hbCwgbSkgKiAtbm9ybWFsWzJdKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyAtbm9ybWFsLnogZXF1YWxzIGNvcyh0aGV0YSkgb2YgTGFtYmVydGlhblxyXG4gICAgICAgICAgICAgICAgICAgIGRpdmlkZXIgKz0gLW5vcm1hbFsyXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHJlc3VsdCwgcmVzdWx0LCBzaWRlUmVzdWx0LCAxIC8gZGl2aWRlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb2VmZlttICogM10gPSByZXN1bHRbMF0gLyA2LjA7XHJcbiAgICAgICAgY29lZmZbbSAqIDMgKyAxXSA9IHJlc3VsdFsxXSAvIDYuMDtcclxuICAgICAgICBjb2VmZlttICogMyArIDJdID0gcmVzdWx0WzJdIC8gNi4wO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvZWZmO1xyXG59XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSBlbnZNYXBcclxuICogQHBhcmFtICB7T2JqZWN0fSBbdGV4dHVyZU9wdHNdXHJcbiAqIEBwYXJhbSAge09iamVjdH0gW3RleHR1cmVPcHRzLmxvZF1cclxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3RleHR1cmVPcHRzLmRlY29kZVJHQk1dXHJcbiAqL1xyXG5zaC5wcm9qZWN0RW52aXJvbm1lbnRNYXAgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGVudk1hcCwgb3B0cykge1xyXG5cclxuICAgIC8vIFRPRE8gc1JHQlxyXG5cclxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG4gICAgb3B0cy5sb2QgPSBvcHRzLmxvZCB8fCAwO1xyXG5cclxuICAgIHZhciBza3lib3g7XHJcbiAgICB2YXIgZHVtbXlTY2VuZSA9IG5ldyBTY2VuZSgpO1xyXG4gICAgdmFyIHNpemUgPSA2NDtcclxuICAgIGlmIChlbnZNYXAudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlMkQnKSB7XHJcbiAgICAgICAgc2t5Ym94ID0gbmV3IFNreWRvbWUoe1xyXG4gICAgICAgICAgICBzY2VuZTogZHVtbXlTY2VuZSxcclxuICAgICAgICAgICAgZW52aXJvbm1lbnRNYXA6IGVudk1hcFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgc2l6ZSA9IChlbnZNYXAuaW1hZ2UgJiYgZW52TWFwLmltYWdlLnB4KSA/IGVudk1hcC5pbWFnZS5weC53aWR0aCA6IGVudk1hcC53aWR0aDtcclxuICAgICAgICBza3lib3ggPSBuZXcgU2t5Ym94KHtcclxuICAgICAgICAgICAgc2NlbmU6IGR1bW15U2NlbmUsXHJcbiAgICAgICAgICAgIGVudmlyb25tZW50TWFwOiBlbnZNYXBcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIENvbnZlcnQgdG8gcmdibVxyXG4gICAgdmFyIHdpZHRoID0gTWF0aC5jZWlsKHNpemUgLyBNYXRoLnBvdygyLCBvcHRzLmxvZCkpO1xyXG4gICAgdmFyIGhlaWdodCA9IE1hdGguY2VpbChzaXplIC8gTWF0aC5wb3coMiwgb3B0cy5sb2QpKTtcclxuICAgIHZhciByZ2JtVGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGhlaWdodFxyXG4gICAgfSk7XHJcbiAgICB2YXIgZnJhbWVidWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcclxuICAgIHNreWJveC5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fRU5DT0RFJyk7XHJcbiAgICBpZiAob3B0cy5kZWNvZGVSR0JNKSB7XHJcbiAgICAgICAgc2t5Ym94Lm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUkdCTV9ERUNPREUnKTtcclxuICAgIH1cclxuICAgIHNreWJveC5tYXRlcmlhbC5zZXQoJ2xvZCcsIG9wdHMubG9kKTtcclxuICAgIHZhciBlbnZNYXBQYXNzID0gbmV3IEVudmlyb25tZW50TWFwUGFzcyh7XHJcbiAgICAgICAgdGV4dHVyZTogcmdibVRleHR1cmVcclxuICAgIH0pO1xyXG4gICAgdmFyIGN1YmVQaXhlbHMgPSB7fTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFyZ2V0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGN1YmVQaXhlbHNbdGFyZ2V0c1tpXV0gPSBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpO1xyXG4gICAgICAgIHZhciBjYW1lcmEgPSBlbnZNYXBQYXNzLmdldENhbWVyYSh0YXJnZXRzW2ldKTtcclxuICAgICAgICBjYW1lcmEuZm92ID0gOTA7XHJcbiAgICAgICAgZnJhbWVidWZmZXIuYXR0YWNoKHJnYm1UZXh0dXJlKTtcclxuICAgICAgICBmcmFtZWJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICByZW5kZXJlci5yZW5kZXIoZHVtbXlTY2VuZSwgY2FtZXJhKTtcclxuICAgICAgICByZW5kZXJlci5nbC5yZWFkUGl4ZWxzKFxyXG4gICAgICAgICAgICAwLCAwLCB3aWR0aCwgaGVpZ2h0LFxyXG4gICAgICAgICAgICBUZXh0dXJlLlJHQkEsIFRleHR1cmUuVU5TSUdORURfQllURSwgY3ViZVBpeGVsc1t0YXJnZXRzW2ldXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZnJhbWVidWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBza3lib3guZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICBmcmFtZWJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIHJnYm1UZXh0dXJlLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG5cclxuICAgIHJldHVybiBwcm9qZWN0RW52aXJvbm1lbnRNYXBDUFUocmVuZGVyZXIsIGN1YmVQaXhlbHMsIHdpZHRoLCBoZWlnaHQpO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgc2g7XHJcbiIsIlxyXG4vKipcclxuICogSGVscGVycyBmb3IgY3JlYXRpbmcgYSBjb21tb24gM2QgYXBwbGljYXRpb24uXHJcbiAqIEBuYW1lc3BhY2UgY2xheS5hcHBsaWNhdGlvblxyXG4gKi9cclxuXHJcbiAvLyBUT0RPIGNyZWF0ZUNvbXBvc2l0b3JcclxuIC8vIFRPRE8gRGlzcG9zZSB0ZXN0LiBnZW9DYWNoZSB0ZXN0LlxyXG4gLy8gVE9ETyBUb25lbWFwcGluZyBleHBvc3VyZVxyXG4gLy8gVE9ETyBmaXRNb2RlbC5cclxuIC8vIFRPRE8gUGFydGljbGUgP1xyXG5pbXBvcnQgUmVuZGVyZXIgZnJvbSAnLi9SZW5kZXJlcic7XHJcbmltcG9ydCBTY2VuZSBmcm9tICcuL1NjZW5lJztcclxuaW1wb3J0IFRpbWVsaW5lIGZyb20gJy4vVGltZWxpbmUnO1xyXG5pbXBvcnQgQ3ViZUdlbyBmcm9tICcuL2dlb21ldHJ5L0N1YmUnO1xyXG5pbXBvcnQgU3BoZXJlR2VvIGZyb20gJy4vZ2VvbWV0cnkvU3BoZXJlJztcclxuaW1wb3J0IFBsYW5lR2VvIGZyb20gJy4vZ2VvbWV0cnkvUGxhbmUnO1xyXG5pbXBvcnQgUGFyYW1ldHJpY1N1cmZhY2VHZW8gZnJvbSAnLi9nZW9tZXRyeS9QYXJhbWV0cmljU3VyZmFjZSc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi9UZXh0dXJlQ3ViZSc7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vVGV4dHVyZSc7XHJcbmltcG9ydCBNZXNoIGZyb20gJy4vTWVzaCc7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuL01hdGVyaWFsJztcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IE9ydGhvZ3JhcGhpY0NhbWVyYSBmcm9tICcuL2NhbWVyYS9PcnRob2dyYXBoaWMnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBHTFRGTG9hZGVyIGZyb20gJy4vbG9hZGVyL0dMVEYnO1xyXG5pbXBvcnQgTm9kZSBmcm9tICcuL05vZGUnO1xyXG5pbXBvcnQgRGlyZWN0aW9uYWxMaWdodCBmcm9tICcuL2xpZ2h0L0RpcmVjdGlvbmFsJztcclxuaW1wb3J0IFBvaW50TGlnaHQgZnJvbSAnLi9saWdodC9Qb2ludCc7XHJcbmltcG9ydCBTcG90TGlnaHQgZnJvbSAnLi9saWdodC9TcG90JztcclxuaW1wb3J0IEFtYmllbnRMaWdodCBmcm9tICcuL2xpZ2h0L0FtYmllbnQnO1xyXG5pbXBvcnQgQW1iaWVudEN1YmVtYXBMaWdodCBmcm9tICcuL2xpZ2h0L0FtYmllbnRDdWJlbWFwJztcclxuaW1wb3J0IEFtYmllbnRTSExpZ2h0IGZyb20gJy4vbGlnaHQvQW1iaWVudFNIJztcclxuaW1wb3J0IFNoYWRvd01hcFBhc3MgZnJvbSAnLi9wcmVQYXNzL1NoYWRvd01hcCc7XHJcbmltcG9ydCBSYXlQaWNraW5nIGZyb20gJy4vcGlja2luZy9SYXlQaWNraW5nJztcclxuaW1wb3J0IExSVUNhY2hlIGZyb20gJy4vY29yZS9MUlUnO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCBzaFV0aWwgZnJvbSAnLi91dGlsL3NoJztcclxuaW1wb3J0IHRleHR1cmVVdGlsIGZyb20gJy4vdXRpbC90ZXh0dXJlJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxuXHJcbmltcG9ydCBjb2xvclV0aWwgZnJvbSAnLi9jb3JlL2NvbG9yJztcclxudmFyIHBhcnNlQ29sb3IgPSBjb2xvclV0aWwucGFyc2VUb0Zsb2F0O1xyXG5cclxuaW1wb3J0IHNoYWRlckxpYnJhcnkgZnJvbSAnLi9zaGFkZXIvYnVpbHRpbic7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi9TaGFkZXInO1xyXG5cclxuXHJcbnZhciBFVkVfTkFNRVMgPSBbJ2NsaWNrJywgJ2RibGNsaWNrJywgJ21vdXNlb3ZlcicsICdtb3VzZW91dCcsICdtb3VzZW1vdmUnLFxyXG4gICAgJ3RvdWNoc3RhcnQnLCAndG91Y2hlbmQnLCAndG91Y2htb3ZlJyxcclxuICAgICdtb3VzZXdoZWVsJywgJ0RPTU1vdXNlU2Nyb2xsJ1xyXG5dO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtzdHJpbmd8SFRNTENhbnZhc0VsZW1lbnR8SFRNTEltYWdlRWxlbWVudHxIVE1MVmlkZW9FbGVtZW50fSBJbWFnZUxpa2VcclxuICovXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7c3RyaW5nfEhUTUxDYW52YXNFbGVtZW50fEhUTUxJbWFnZUVsZW1lbnR8SFRNTFZpZGVvRWxlbWVudHxjbGF5LlRleHR1cmUyRH0gVGV4dHVyZUxpa2VcclxuICovXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7c3RyaW5nfEFycmF5LjxudW1iZXI+fSBDb2xvclxyXG4gKi9cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtIVE1MRWxlbWVudHxzdHJpbmd9IERvbVF1ZXJ5XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFwcDNETmFtZXNwYWNlXHJcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGluaXQgSW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIGluaXRpbmcgYXBwLlxyXG4gKiAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHJldHVybiBhIHByb21pc2UgaW4gaW5pdCB0byBzdGFydCB0aGUgbG9vcCBhc3luY2hyb25vdXNseSB3aGVuIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkLlxyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBsb29wIExvb3AgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCBlYWNoIGZyYW1lLlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthdXRvUmVuZGVyPXRydWVdIElmIHJlbmRlciBhdXRvbWF0aWNhbGx5IGVhY2ggZnJhbWUuXHJcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IFtiZWZvcmVSZW5kZXJdXHJcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IFthZnRlclJlbmRlcl1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFt3aWR0aF0gQ29udGFpbmVyIHdpZHRoLlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2hlaWdodF0gQ29udGFpbmVyIGhlaWdodC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtkZXZpY2VQaXhlbFJhdGlvXVxyXG4gKiBAcHJvcGVydHkge09iamVjdC48c3RyaW5nLCBGdW5jdGlvbj59IFttZXRob2RzXSBNZXRob2RzIHRoYXQgd2lsbCBiZSBpbmplY3RlZCB0byBBcHAzRCNtZXRob2RzLlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2dyYXBoaWNdIEdyYXBoaWMgY29uZmlndXJhdGlvbiBpbmNsdWRpbmcgc2hhZG93LCBjb2xvciBzcGFjZS5cclxuICogQHByb3BlcnR5IHtib29sZWFufSBbZ3JhcGhpYy5zaGFkb3c9ZmFsc2VdIElmIGVuYWJsZSBzaGFkb3dcclxuICogQHByb3BlcnR5IHtib29sZWFufSBbZ3JhcGhpYy5saW5lYXI9ZmFsc2VdIElmIHVzZSBsaW5lYXIgY29sb3Igc3BhY2VcclxuICogQHByb3BlcnR5IHtib29sZWFufSBbZ3JhcGhpYy50b25lbWFwcGluZz1mYWxzZV0gSWYgZW5hYmxlIEFDRVMgdG9uZSBtYXBwaW5nLlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtldmVudD1mYWxzZV0gSWYgZW5hYmxlIG1vdXNlL3RvdWNoIGV2ZW50LiBJdCB3aWxsIHNsb3cgZG93biB0aGUgc3lzdGVtIGlmIGdlb21ldHJpZXMgYXJlIGNvbXBsZXguXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0YW5kYXJkTWF0ZXJpYWxNUkNvbmZpZ1xyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2hhZGVyPSdzdGFuZGFyZE1SJ11cclxuICogQHByb3BlcnR5IHtDb2xvcn0gW2NvbG9yXVxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2FscGhhXVxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21ldGFsbmVzc11cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtyb3VnaG5lc3NdXHJcbiAqIEBwcm9wZXJ0eSB7Q29sb3J9IFtlbWlzc2lvbl1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtlbWlzc2lvbkludGVuc2l0eV1cclxuICogQHByb3BlcnR5IHtib29sZWFufSBbdHJhbnNwYXJlbnRdXHJcbiAqIEBwcm9wZXJ0eSB7VGV4dHVyZUxpa2V9IFtkaWZmdXNlTWFwXVxyXG4gKiBAcHJvcGVydHkge1RleHR1cmVMaWtlfSBbbm9ybWFsTWFwXVxyXG4gKiBAcHJvcGVydHkge1RleHR1cmVMaWtlfSBbcm91Z2huZXNzTWFwXVxyXG4gKiBAcHJvcGVydHkge1RleHR1cmVMaWtlfSBbbWV0YWxuZXNzTWFwXVxyXG4gKiBAcHJvcGVydHkge1RleHR1cmVMaWtlfSBbZW1pc3NpdmVNYXBdXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFVzaW5nIEFwcDNEIGlzIGEgbXVjaCBtb3JlIGNvbnZlbmllbnQgd2F5IHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHlvdXIgM0QgYXBwbGljYXRpb24uXHJcbiAqXHJcbiAqIEl0IHByb3ZpZGVzIHRoZSBhYmlsaXRpZXMgdG86XHJcbiAqXHJcbiAqICsgTWFuYWdlIGFwcGxpY2F0aW9uIGxvb3AgYW5kIHJlbmRlcmluZy5cclxuICogKyBDb2xsZWN0IEdQVSByZXNvdXJjZSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbWVtb3J5IGxlYWsgY29uY2Vybi5cclxuICogKyBNb3VzZSBldmVudCBtYW5hZ2VtZW50LlxyXG4gKiArIENyZWF0ZSBzY2VuZSBvYmplY3RzLCBtYXRlcmlhbHMsIHRleHR1cmVzIHdpdGggc2ltcGxlciBjb2RlLlxyXG4gKiArIExvYWQgbW9kZWxzIHdpdGggb25lIGxpbmUgb2YgY29kZS5cclxuICogKyBQcm9taXNlZCBpbnRlcmZhY2VzLlxyXG4gKlxyXG4gKiBIZXJlIGlzIGEgYmFzaWMgZXhhbXBsZSB0byBjcmVhdGUgYSByb3RhdGluZyBjdWJlLlxyXG4gKlxyXG5gYGBqc1xyXG52YXIgYXBwID0gY2xheS5hcHBsaWNhdGlvbi5jcmVhdGUoJyN2aWV3cG9ydCcsIHtcclxuICAgIGluaXQ6IGZ1bmN0aW9uIChhcHApIHtcclxuICAgICAgICAvLyBDcmVhdGUgYSBwZXJzcGVjdGl2ZSBjYW1lcmEuXHJcbiAgICAgICAgLy8gRmlyc3QgcGFyYW1ldGVyIGlzIHRoZSBjYW1lcmEgcG9zaXRpb24uIFdoaWNoIGlzIGluIGZyb250IG9mIHRoZSBjdWJlLlxyXG4gICAgICAgIC8vIFNlY29uZCBwYXJhbWV0ZXIgaXMgdGhlIGNhbWVyYSBsb29rQXQgdGFyZ2V0LiBXaGljaCBpcyB0aGUgb3JpZ2luIG9mIHRoZSB3b3JsZCwgYW5kIHdoZXJlIHRoZSBjdWJlIHB1dHMuXHJcbiAgICAgICAgdGhpcy5fY2FtZXJhID0gYXBwLmNyZWF0ZUNhbWVyYShbMCwgMiwgNV0sIFswLCAwLCAwXSk7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgc2FtcGxlIGN1YmVcclxuICAgICAgICB0aGlzLl9jdWJlID0gYXBwLmNyZWF0ZUN1YmUoKTtcclxuICAgICAgICAvLyBDcmVhdGUgYSBkaXJlY3Rpb25hbCBsaWdodC4gVGhlIGRpcmVjdGlvbiBpcyBmcm9tIHRvcCByaWdodCB0byBsZWZ0IGJvdHRvbSwgYXdheSBmcm9tIGNhbWVyYS5cclxuICAgICAgICB0aGlzLl9tYWluTGlnaHQgPSBhcHAuY3JlYXRlRGlyZWN0aW9uYWxMaWdodChbLTEsIC0xLCAtMV0pO1xyXG4gICAgfSxcclxuICAgIGxvb3A6IGZ1bmN0aW9uIChhcHApIHtcclxuICAgICAgICAvLyBTaW1wbHkgcm90YXRpbmcgdGhlIGN1YmUgZXZlcnkgZnJhbWUuXHJcbiAgICAgICAgdGhpcy5fY3ViZS5yb3RhdGlvbi5yb3RhdGVZKGFwcC5mcmFtZVRpbWUgLyAxMDAwKTtcclxuICAgIH1cclxufSk7XHJcbmBgYFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuYXBwbGljYXRpb24uQXBwM0RcclxuICogQHBhcmFtIHtEb21RdWVyeX0gZG9tIENvbnRhaW5lciBkb20gZWxlbWVudCBvciBhIHNlbGVjdG9yIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGluIGBxdWVyeVNlbGVjdG9yYFxyXG4gKiBAcGFyYW0ge0FwcDNETmFtZXNwYWNlfSBhcHBOUyBPcHRpb25zIGFuZCBuYW1lc3BhY2UgdXNlZCBpbiBjcmVhdGluZyBhcHAzRFxyXG4gKi9cclxuZnVuY3Rpb24gQXBwM0QoZG9tLCBhcHBOUykge1xyXG5cclxuICAgIGFwcE5TID0gYXBwTlMgfHwge307XHJcbiAgICBhcHBOUy5ncmFwaGljID0gYXBwTlMuZ3JhcGhpYyB8fCB7fTtcclxuXHJcbiAgICBpZiAoYXBwTlMuYXV0b1JlbmRlciA9PSBudWxsKSB7XHJcbiAgICAgICAgYXBwTlMuYXV0b1JlbmRlciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBkb20gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgZG9tID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihkb20pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZG9tKSB7IHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkb20nKTsgfVxyXG5cclxuICAgIHZhciBpc0RvbUNhbnZhcyA9ICFkb20ubm9kZU5hbWUgIC8vIE5vdCBpbiBkb20gZW52aXJvbm1lbnRcclxuICAgICAgICB8fCBkb20ubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0NBTlZBUyc7XHJcblxyXG4gICAgdmFyIHJlbmRlcmVyT3B0cyA9IHt9O1xyXG4gICAgaXNEb21DYW52YXMgJiYgKHJlbmRlcmVyT3B0cy5jYW52YXMgPSBkb20pO1xyXG4gICAgYXBwTlMuZGV2aWNlUGl4ZWxSYXRpbyAmJiAocmVuZGVyZXJPcHRzLmRldmljZVBpeGVsUmF0aW8gPSBhcHBOUy5kZXZpY2VQaXhlbFJhdGlvKTtcclxuXHJcbiAgICB2YXIgZ1JlbmRlcmVyID0gbmV3IFJlbmRlcmVyKHJlbmRlcmVyT3B0cyk7XHJcbiAgICB2YXIgZ1dpZHRoID0gYXBwTlMud2lkdGggfHwgZG9tLmNsaWVudFdpZHRoO1xyXG4gICAgdmFyIGdIZWlnaHQgPSBhcHBOUy5oZWlnaHQgfHwgZG9tLmNsaWVudEhlaWdodDtcclxuXHJcbiAgICB2YXIgZ1NjZW5lID0gbmV3IFNjZW5lKCk7XHJcbiAgICB2YXIgZ1RpbWVsaW5lID0gbmV3IFRpbWVsaW5lKCk7XHJcbiAgICB2YXIgZ1NoYWRvd1Bhc3MgPSBhcHBOUy5ncmFwaGljLnNoYWRvdyAmJiBuZXcgU2hhZG93TWFwUGFzcygpO1xyXG4gICAgdmFyIGdSYXlQaWNraW5nID0gYXBwTlMuZXZlbnQgJiYgbmV3IFJheVBpY2tpbmcoe1xyXG4gICAgICAgIHNjZW5lOiBnU2NlbmUsXHJcbiAgICAgICAgcmVuZGVyZXI6IGdSZW5kZXJlclxyXG4gICAgfSk7XHJcblxyXG4gICAgIWlzRG9tQ2FudmFzICYmIGRvbS5hcHBlbmRDaGlsZChnUmVuZGVyZXIuY2FudmFzKTtcclxuXHJcbiAgICBnUmVuZGVyZXIucmVzaXplKGdXaWR0aCwgZ0hlaWdodCk7XHJcblxyXG4gICAgdmFyIGdGcmFtZVRpbWUgPSAwO1xyXG4gICAgdmFyIGdFbGFwc2VkVGltZSA9IDA7XHJcblxyXG4gICAgZ1RpbWVsaW5lLnN0YXJ0KCk7XHJcblxyXG4gICAgdmFyIHVzZXJNZXRob2RzID0ge307XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gYXBwTlMubWV0aG9kcykge1xyXG4gICAgICAgIHVzZXJNZXRob2RzW2tleV0gPSBhcHBOUy5tZXRob2RzW2tleV0uYmluZChhcHBOUywgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENvbnRhaW5lciBkb20gZWxlbWVudFxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjY29udGFpbmVyXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnRhaW5lcjogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvbTsgfSB9LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjcmVuZGVyZXJcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5SZW5kZXJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICByZW5kZXJlcjogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdSZW5kZXJlcjsgfX0sXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5BcHAzRCNzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlJlbmRlcmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNjZW5lOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1NjZW5lOyB9fSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI3RpbWVsaW5lXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuUmVuZGVyZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGltZWxpbmU6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnVGltZWxpbmU7IH19LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRpbWUgZWxhcHNlZCBzaW5jZSBsYXN0IGZyYW1lLiBDYW4gYmUgdXNlZCBpbiBsb29wIHRvIGNhbGN1bGF0ZSB0aGUgbW92ZW1lbnQuXHJcbiAgICAgICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5BcHAzRCNmcmFtZVRpbWVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZyYW1lVGltZTogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdGcmFtZVRpbWU7IH19LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRpbWUgZWxhcHNlZCBzaW5jZSBhcHBsaWNhdGlvbiBjcmVhdGVkLlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjZWxhcHNlZFRpbWVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVsYXBzZWRUaW1lOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ0VsYXBzZWRUaW1lOyB9fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2lkdGggb2Ygdmlld3BvcnQuXHJcbiAgICAgICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5BcHAzRCN3aWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgd2lkdGg6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnUmVuZGVyZXIuZ2V0V2lkdGgoKTsgfX0sXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSGVpZ2h0IG9mIHZpZXdwb3J0LlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjaGVpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBoZWlnaHQ6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnUmVuZGVyZXIuZ2V0SGVpZ2h0KCk7IH19LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNZXRob2RzIGZyb20ge0BsaW5rIGNsYXkuYXBwbGljYXRpb24uY3JlYXRlfVxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjbWV0aG9kc1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWV0aG9kczogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVzZXJNZXRob2RzOyB9IH0sXHJcblxyXG4gICAgICAgIF9zaGFkb3dQYXNzOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1NoYWRvd1Bhc3M7IH0gfSxcclxuXHJcbiAgICAgICAgX2FwcE5TOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXBwTlM7IH0gfSxcclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzaXplIHRoZSBhcHBsaWNhdGlvbi4gV2lsbCB1c2UgdGhlIGNvbnRhaW5lciBjbGllbnRXaWR0aC9jbGllbnRIZWlnaHQgaWYgd2lkdGgvaGVpZ2h0IGluIHBhcmFtZXRlcnMgYXJlIG5vdCBnaXZlbi5cclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQG1lbWJlck9mIHtjbGF5LmFwcGxpY2F0aW9uLkFwcDNEfVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aF1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0XVxyXG4gICAgICovXHJcbiAgICB0aGlzLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICAgICAgZ1dpZHRoID0gd2lkdGggfHwgYXBwTlMud2lkdGggfHwgZG9tLmNsaWVudFdpZHRoO1xyXG4gICAgICAgIGdIZWlnaHQgPSBoZWlnaHQgfHwgZG9tLmhlaWdodCB8fCBkb20uY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgIGdSZW5kZXJlci5yZXNpemUoZ1dpZHRoLCBnSGVpZ2h0KTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIHRoZSBhcHBsaWNhdGlvblxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKi9cclxuICAgIHRoaXMuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmIChhcHBOUy5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgIGFwcE5TLmRpc3Bvc2UodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdUaW1lbGluZS5zdG9wKCk7XHJcbiAgICAgICAgZ1JlbmRlcmVyLmRpc3Bvc2VTY2VuZShnU2NlbmUpO1xyXG4gICAgICAgIGdTaGFkb3dQYXNzICYmIGdTaGFkb3dQYXNzLmRpc3Bvc2UoZ1JlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgZG9tLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIEVWRV9OQU1FUy5mb3JFYWNoKGZ1bmN0aW9uIChldmVUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXNbbWFrZUhhbmRsZXJOYW1lKGV2ZVR5cGUpXSAmJiB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sIG1ha2VIYW5kbGVyTmFtZShldmVUeXBlKSk7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9O1xyXG5cclxuICAgIGdSYXlQaWNraW5nICYmIHRoaXMuX2luaXRNb3VzZUV2ZW50cyhnUmF5UGlja2luZyk7XHJcblxyXG4gICAgdGhpcy5fZ2VvQ2FjaGUgPSBuZXcgTFJVQ2FjaGUoMjApO1xyXG4gICAgdGhpcy5fdGV4Q2FjaGUgPSBuZXcgTFJVQ2FjaGUoMjApO1xyXG5cclxuICAgIC8vIEdQVSBSZXNvdXJjZXMuXHJcbiAgICB0aGlzLl90ZXh0dXJlc0xpc3QgPSB7fTtcclxuICAgIHRoaXMuX2dlb21ldHJpZXNMaXN0ID0ge307XHJcblxyXG4gICAgLy8gRG8gaW5pdCB0aGUgYXBwbGljYXRpb24uXHJcbiAgICB2YXIgaW5pdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoYXBwTlMuaW5pdCAmJiBhcHBOUy5pbml0KHRoaXMpKTtcclxuICAgIC8vIFVzZSB0aGUgaW5pdGVkIGNhbWVyYS5cclxuICAgIGdSYXlQaWNraW5nICYmIChnUmF5UGlja2luZy5jYW1lcmEgPSBnU2NlbmUuZ2V0TWFpbkNhbWVyYSgpKTtcclxuXHJcbiAgICBpZiAoIWFwcE5TLmxvb3ApIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ01pc3MgbG9vcCBtZXRob2QuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgaW5pdFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZ1RpbWVsaW5lLm9uKCdmcmFtZScsIGZ1bmN0aW9uIChmcmFtZVRpbWUpIHtcclxuICAgICAgICAgICAgZ0ZyYW1lVGltZSA9IGZyYW1lVGltZTtcclxuICAgICAgICAgICAgZ0VsYXBzZWRUaW1lICs9IGZyYW1lVGltZTtcclxuXHJcbiAgICAgICAgICAgIHZhciBjYW1lcmEgPSBnU2NlbmUuZ2V0TWFpbkNhbWVyYSgpO1xyXG4gICAgICAgICAgICBpZiAoY2FtZXJhKSB7XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEuYXNwZWN0ID0gZ1JlbmRlcmVyLmdldFZpZXdwb3J0QXNwZWN0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ1JheVBpY2tpbmcgJiYgKGdSYXlQaWNraW5nLmNhbWVyYSA9IGNhbWVyYSk7XHJcblxyXG4gICAgICAgICAgICBhcHBOUy5sb29wICYmIGFwcE5TLmxvb3Aoc2VsZik7XHJcblxyXG4gICAgICAgICAgICBpZiAoYXBwTlMuYXV0b1JlbmRlcikge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yZW5kZXIoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2VsZi5jb2xsZWN0UmVzb3VyY2VzKCk7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBnU2NlbmUub24oJ2JlZm9yZXJlbmRlcicsIGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgcmVuZGVyTGlzdCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pblJlbmRlcikge1xyXG4gICAgICAgICAgICAvLyBPbmx5IHVwZGF0ZSBncmFwaGljIG9wdGlvbnMgd2hlbiB1c2luZyAjcmVuZGVyIGZ1bmN0aW9uLlxyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVHcmFwaGljT3B0aW9ucyhhcHBOUy5ncmFwaGljLCByZW5kZXJMaXN0Lm9wYXF1ZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVHcmFwaGljT3B0aW9ucyhhcHBOUy5ncmFwaGljLCByZW5kZXJMaXN0LnRyYW5zcGFyZW50LCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgdGhpcyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSW1hZ2VMaWtlRWxlbWVudCh2YWwpIHtcclxuICAgIHJldHVybiAodHlwZW9mIEltYWdlICE9PSAndW5kZWZpbmVkJyAmJiB2YWwgaW5zdGFuY2VvZiBJbWFnZSlcclxuICAgICAgICB8fCAodHlwZW9mIEhUTUxDYW52YXNFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB2YWwgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudClcclxuICAgICAgICB8fCAodHlwZW9mIEhUTUxWaWRlb0VsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHZhbCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRLZXlGcm9tSW1hZ2VMaWtlKHZhbCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgPyB2YWwgOiAodmFsLl9fa2V5X18gfHwgKHZhbC5fX2tleV9fID0gdXRpbC5nZW5HVUlEKCkpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbWFrZUhhbmRsZXJOYW1lKGV2ZVR5cGUpIHtcclxuICAgIHJldHVybiAnXycgKyBldmVUeXBlICsgJ0hhbmRsZXInO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYWNrYWdlRXZlbnQoZXZlbnRUeXBlLCBwaWNrUmVzdWx0LCBvZmZzZXRYLCBvZmZzZXRZLCB3aGVlbERlbHRhKSB7XHJcbiAgICB2YXIgZXZlbnQgPSB1dGlsLmNsb25lKHBpY2tSZXN1bHQpO1xyXG4gICAgZXZlbnQudHlwZSA9IGV2ZW50VHlwZTtcclxuICAgIGV2ZW50Lm9mZnNldFggPSBvZmZzZXRYO1xyXG4gICAgZXZlbnQub2Zmc2V0WSA9IG9mZnNldFk7XHJcbiAgICBpZiAod2hlZWxEZWx0YSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGV2ZW50LndoZWVsRGVsdGEgPSB3aGVlbERlbHRhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGV2ZW50O1xyXG59XHJcblxyXG5mdW5jdGlvbiBidWJibGluZ0V2ZW50KHRhcmdldCwgZXZlbnQpIHtcclxuICAgIHdoaWxlICh0YXJnZXQgJiYgIWV2ZW50LmNhbmNlbEJ1YmJsZSkge1xyXG4gICAgICAgIHRhcmdldC50cmlnZ2VyKGV2ZW50LnR5cGUsIGV2ZW50KTtcclxuICAgICAgICB0YXJnZXQgPSB0YXJnZXQuZ2V0UGFyZW50KCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbkFwcDNELnByb3RvdHlwZS5faW5pdE1vdXNlRXZlbnRzID0gZnVuY3Rpb24gKHJheVBpY2tpbmcpIHtcclxuICAgIHZhciBkb20gPSB0aGlzLmNvbnRhaW5lcjtcclxuXHJcbiAgICB2YXIgb2xkVGFyZ2V0ID0gbnVsbDtcclxuICAgIEVWRV9OQU1FUy5mb3JFYWNoKGZ1bmN0aW9uIChfZXZlVHlwZSkge1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgX2V2ZVR5cGUsIHRoaXNbbWFrZUhhbmRsZXJOYW1lKF9ldmVUeXBlKV0gPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBpZiAoIXJheVBpY2tpbmcuY2FtZXJhKSB7IC8vIE5vdCBoYXZlIGNhbWVyYSB5ZXQuXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCAmJiBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYm94ID0gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0WCwgb2Zmc2V0WTtcclxuICAgICAgICAgICAgdmFyIGV2ZVR5cGUgPSBfZXZlVHlwZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChldmVUeXBlLmluZGV4T2YoJ3RvdWNoJykgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRvdWNoID0gZXZlVHlwZSAhPT0gJ3RvdWNoZW5kJ1xyXG4gICAgICAgICAgICAgICAgICAgID8gZS50YXJnZXRUb3VjaGVzWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgOiBlLmNoYW5nZWRUb3VjaGVzWzBdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZVR5cGUgPT09ICd0b3VjaHN0YXJ0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZVR5cGUgPSAnbW91c2Vkb3duJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZVR5cGUgPT09ICd0b3VjaGVuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVUeXBlID0gJ21vdXNldXAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXZlVHlwZSA9PT0gJ3RvdWNobW92ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVUeXBlID0gJ21vdXNlbW92ZSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBvZmZzZXRYID0gdG91Y2guY2xpZW50WCAtIGJveC5sZWZ0O1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0WSA9IHRvdWNoLmNsaWVudFkgLSBib3gudG9wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0WCA9IGUuY2xpZW50WCAtIGJveC5sZWZ0O1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0WSA9IGUuY2xpZW50WSAtIGJveC50b3A7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBwaWNrUmVzdWx0ID0gcmF5UGlja2luZy5waWNrKG9mZnNldFgsIG9mZnNldFkpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAoZXZlVHlwZSA9PT0gJ0RPTU1vdXNlU2Nyb2xsJyB8fCBldmVUeXBlID09PSAnbW91c2V3aGVlbCcpIHtcclxuICAgICAgICAgICAgICAgIGRlbHRhID0gKGUud2hlZWxEZWx0YSkgPyBlLndoZWVsRGVsdGEgLyAxMjAgOiAtKGUuZGV0YWlsIHx8IDApIC8gMztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHBpY2tSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIC8vIEp1c3QgaWdub3JlIHNpbGVudCBlbGVtZW50LlxyXG4gICAgICAgICAgICAgICAgaWYgKHBpY2tSZXN1bHQudGFyZ2V0LnNpbGVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlVHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBQRU5ESU5HIHRvdWNoZG93biBzaG91bGQgdHJpZ2dlciBtb3VzZW92ZXIgZXZlbnQgP1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXRDaGFuZ2VkID0gcGlja1Jlc3VsdC50YXJnZXQgIT09IG9sZFRhcmdldDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbGRUYXJnZXQgJiYgYnViYmxpbmdFdmVudChvbGRUYXJnZXQsIHBhY2thZ2VFdmVudCgnbW91c2VvdXQnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG9sZFRhcmdldFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvZmZzZXRYLCBvZmZzZXRZKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJ1YmJsaW5nRXZlbnQocGlja1Jlc3VsdC50YXJnZXQsIHBhY2thZ2VFdmVudCgnbW91c2Vtb3ZlJywgcGlja1Jlc3VsdCwgb2Zmc2V0WCwgb2Zmc2V0WSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1YmJsaW5nRXZlbnQocGlja1Jlc3VsdC50YXJnZXQsIHBhY2thZ2VFdmVudCgnbW91c2VvdmVyJywgcGlja1Jlc3VsdCwgb2Zmc2V0WCwgb2Zmc2V0WSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1YmJsaW5nRXZlbnQocGlja1Jlc3VsdC50YXJnZXQsIHBhY2thZ2VFdmVudChldmVUeXBlLCBwaWNrUmVzdWx0LCBvZmZzZXRYLCBvZmZzZXRZLCBkZWx0YSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb2xkVGFyZ2V0ID0gcGlja1Jlc3VsdC50YXJnZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAob2xkVGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KG9sZFRhcmdldCwgcGFja2FnZUV2ZW50KCdtb3VzZW91dCcsIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG9sZFRhcmdldFxyXG4gICAgICAgICAgICAgICAgfSwgb2Zmc2V0WCwgb2Zmc2V0WSkpO1xyXG4gICAgICAgICAgICAgICAgb2xkVGFyZ2V0ID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgdGhpcyk7XHJcbn07XHJcblxyXG5BcHAzRC5wcm90b3R5cGUuX3VwZGF0ZUdyYXBoaWNPcHRpb25zID0gZnVuY3Rpb24gKGdyYXBoaWNPcHRzLCBsaXN0LCBpc1NreWJveCkge1xyXG4gICAgdmFyIGVuYWJsZVRvbmVtYXBwaW5nID0gISFncmFwaGljT3B0cy50b25lbWFwcGluZztcclxuICAgIHZhciBpc0xpbmVhclNwYWNlID0gISFncmFwaGljT3B0cy5saW5lYXI7XHJcblxyXG4gICAgdmFyIHByZXZNYXRlcmlhbDtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgbWF0ID0gbGlzdFtpXS5tYXRlcmlhbDtcclxuICAgICAgICBpZiAobWF0ID09PSBwcmV2TWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbmFibGVUb25lbWFwcGluZyA/IG1hdC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1RPTkVNQVBQSU5HJykgOiBtYXQudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1RPTkVNQVBQSU5HJyk7XHJcbiAgICAgICAgaWYgKGlzTGluZWFyU3BhY2UpIHtcclxuICAgICAgICAgICAgdmFyIGRlY29kZVNSR0IgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoaXNTa3lib3ggJiYgbWF0LmdldCgnZW52aXJvbm1lbnRNYXAnKSAmJiAhbWF0LmdldCgnZW52aXJvbm1lbnRNYXAnKS5zUkdCKSB7XHJcbiAgICAgICAgICAgICAgICBkZWNvZGVTUkdCID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVjb2RlU1JHQiAmJiBtYXQuZGVmaW5lKCdmcmFnbWVudCcsICdTUkdCX0RFQ09ERScpO1xyXG4gICAgICAgICAgICBtYXQuZGVmaW5lKCdmcmFnbWVudCcsICdTUkdCX0VOQ09ERScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWF0LnVuZGVmaW5lKCdmcmFnbWVudCcsICdTUkdCX0RFQ09ERScpO1xyXG4gICAgICAgICAgICBtYXQudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NSR0JfRU5DT0RFJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcmV2TWF0ZXJpYWwgPSBtYXQ7XHJcbiAgICB9XHJcbn07XHJcblxyXG5BcHAzRC5wcm90b3R5cGUuX2RvUmVuZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSkge1xyXG4gICAgdmFyIGNhbWVyYSA9IHNjZW5lLmdldE1haW5DYW1lcmEoKTtcclxuICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhLCB0cnVlKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBEbyByZW5kZXJcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9pblJlbmRlciA9IHRydWU7XHJcbiAgICB2YXIgYXBwTlMgPSB0aGlzLl9hcHBOUztcclxuICAgIGFwcE5TLmJlZm9yZVJlbmRlciAmJiBhcHBOUy5iZWZvcmVSZW5kZXIoc2VsZik7XHJcblxyXG4gICAgdmFyIHNjZW5lID0gdGhpcy5zY2VuZTtcclxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcbiAgICB2YXIgc2hhZG93UGFzcyA9IHRoaXMuX3NoYWRvd1Bhc3M7XHJcblxyXG4gICAgc2NlbmUudXBkYXRlKCk7XHJcbiAgICB2YXIgc2t5Ym94TGlzdCA9IFtdO1xyXG4gICAgc2NlbmUuc2t5Ym94ICYmIHNreWJveExpc3QucHVzaChzY2VuZS5za3lib3gpO1xyXG4gICAgc2NlbmUuc2t5ZG9tZSAmJiBza3lib3hMaXN0LnB1c2goc2NlbmUuc2t5ZG9tZSk7XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlR3JhcGhpY09wdGlvbnMoYXBwTlMuZ3JhcGhpYywgc2t5Ym94TGlzdCwgdHJ1ZSk7XHJcbiAgICAvLyBSZW5kZXIgc2hhZG93IHBhc3NcclxuICAgIHNoYWRvd1Bhc3MgJiYgc2hhZG93UGFzcy5yZW5kZXIocmVuZGVyZXIsIHNjZW5lLCBudWxsLCB0cnVlKTtcclxuXHJcbiAgICB0aGlzLl9kb1JlbmRlcihyZW5kZXJlciwgc2NlbmUsIHRydWUpO1xyXG5cclxuICAgIGFwcE5TLmFmdGVyUmVuZGVyICYmIGFwcE5TLmFmdGVyUmVuZGVyKHNlbGYpO1xyXG4gICAgdGhpcy5faW5SZW5kZXIgPSBmYWxzZTtcclxufTtcclxuXHJcbkFwcDNELnByb3RvdHlwZS5jb2xsZWN0UmVzb3VyY2VzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcclxuICAgIHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7XHJcbiAgICB2YXIgdGV4dHVyZXNMaXN0ID0gdGhpcy5fdGV4dHVyZXNMaXN0O1xyXG4gICAgdmFyIGdlb21ldHJpZXNMaXN0ID0gdGhpcy5fZ2VvbWV0cmllc0xpc3Q7XHJcbiAgICAvLyBNYXJrIGFsbCByZXNvdXJjZXMgdW51c2VkO1xyXG4gICAgbWFya1VudXNlZCh0ZXh0dXJlc0xpc3QpO1xyXG4gICAgbWFya1VudXNlZChnZW9tZXRyaWVzTGlzdCk7XHJcblxyXG4gICAgLy8gQ29sbGVjdCByZXNvdXJjZXMgdXNlZCBpbiB0aGlzIGZyYW1lLlxyXG4gICAgdmFyIG5ld1RleHR1cmVzTGlzdCA9IFtdO1xyXG4gICAgdmFyIG5ld0dlb21ldHJpZXNMaXN0ID0gW107XHJcbiAgICBjb2xsZWN0UmVzb3VyY2VzKHNjZW5lLCBuZXdUZXh0dXJlc0xpc3QsIG5ld0dlb21ldHJpZXNMaXN0KTtcclxuXHJcbiAgICAvLyBEaXNwb3NlIHRob3NlIHVuc2VkIHJlc291cmNlcy5cclxuICAgIGNoZWNrQW5kRGlzcG9zZShyZW5kZXJlciwgdGV4dHVyZXNMaXN0KTtcclxuICAgIGNoZWNrQW5kRGlzcG9zZShyZW5kZXJlciwgZ2VvbWV0cmllc0xpc3QpO1xyXG5cclxuICAgIHRoaXMuX3RleHR1cmVzTGlzdCA9IG5ld1RleHR1cmVzTGlzdDtcclxuICAgIHRoaXMuX2dlb21ldHJpZXNMaXN0ID0gbmV3R2VvbWV0cmllc0xpc3Q7XHJcbn07XHJcblxyXG5cclxuZnVuY3Rpb24gbWFya1VudXNlZChyZXNvdXJjZUxpc3QpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzb3VyY2VMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcmVzb3VyY2VMaXN0W2ldLl9fdXNlZCA9IDA7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNoZWNrQW5kRGlzcG9zZShyZW5kZXJlciwgcmVzb3VyY2VMaXN0KSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc291cmNlTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICghcmVzb3VyY2VMaXN0W2ldLl9fdXNlZCkge1xyXG4gICAgICAgICAgICByZXNvdXJjZUxpc3RbaV0uZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVVc2VkKHJlc291cmNlLCBsaXN0KSB7XHJcbiAgICByZXNvdXJjZS5fX3VzZWQgPSByZXNvdXJjZS5fX3VzZWQgfHwgMDtcclxuICAgIHJlc291cmNlLl9fdXNlZCsrO1xyXG4gICAgaWYgKHJlc291cmNlLl9fdXNlZCA9PT0gMSkge1xyXG4gICAgICAgIC8vIERvbid0IHB1c2ggdG8gdGhlIGxpc3QgdHdpY2UuXHJcbiAgICAgICAgbGlzdC5wdXNoKHJlc291cmNlKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjb2xsZWN0UmVzb3VyY2VzKHNjZW5lLCB0ZXh0dXJlUmVzb3VyY2VMaXN0LCBnZW9tZXRyeVJlc291cmNlTGlzdCkge1xyXG4gICAgdmFyIHByZXZNYXRlcmlhbDtcclxuICAgIHZhciBwcmV2R2VvbWV0cnk7XHJcbiAgICBzY2VuZS50cmF2ZXJzZShmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgIGlmIChyZW5kZXJhYmxlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IHJlbmRlcmFibGUuZ2VvbWV0cnk7XHJcbiAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcblxyXG4gICAgICAgICAgICAvLyBUT0RPIG9wdGltaXplISFcclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsICE9PSBwcmV2TWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlVW5pZm9ybXMgPSBtYXRlcmlhbC5nZXRUZXh0dXJlVW5pZm9ybXMoKTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHUgPSAwOyB1IDwgdGV4dHVyZVVuaWZvcm1zLmxlbmd0aDsgdSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWZvcm1OYW1lID0gdGV4dHVyZVVuaWZvcm1zW3VdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBtYXRlcmlhbC51bmlmb3Jtc1t1bmlmb3JtTmFtZV0udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWZvcm1UeXBlID0gbWF0ZXJpYWwudW5pZm9ybXNbdW5pZm9ybU5hbWVdLnR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVHlwZSA9PT0gJ3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVVzZWQodmFsLCB0ZXh0dXJlUmVzb3VyY2VMaXN0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUgPT09ICd0dicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB2YWwubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxba10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVVc2VkKHZhbFtrXSwgdGV4dHVyZVJlc291cmNlTGlzdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGdlb21ldHJ5ICE9PSBwcmV2R2VvbWV0cnkpIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZWQoZ2VvbWV0cnksIGdlb21ldHJ5UmVzb3VyY2VMaXN0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcHJldk1hdGVyaWFsID0gbWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIHByZXZHZW9tZXRyeSA9IGdlb21ldHJ5O1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgLy8gVHJhY2sgQW1iaWVudEN1YmVtYXBcclxuICAgICAgICBpZiAoc2NlbmUubGlnaHRzW2tdLmN1YmVtYXApIHtcclxuICAgICAgICAgICAgdXBkYXRlVXNlZChzY2VuZS5saWdodHNba10uY3ViZW1hcCwgdGV4dHVyZVJlc291cmNlTGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBMb2FkIGEgdGV4dHVyZSBmcm9tIGltYWdlIG9yIHN0cmluZy5cclxuICogQHBhcmFtIHtJbWFnZUxpa2V9IGltZ1xyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIFRleHR1cmUgb3B0aW9ucy5cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbGlwWT10cnVlXSBJZiBmbGlwWS4gU2VlIHtAbGluayBjbGF5LlRleHR1cmUuZmxpcFl9XHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuY29udmVydFRvUE9UPWZhbHNlXSBGb3JjZSBjb252ZXJ0IE5vbmUgUG93ZXIgb2YgVHdvIHRleHR1cmUgdG8gUG93ZXIgb2YgdHdvIHNvIGl0IGNhbiBiZSB0aWxlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmFuaXNvdHJvcGljXSBBbmlzb3Ryb3BpYyBmaWx0ZXJpbmcuIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLmFuaXNvdHJvcGljfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMud3JhcFM9Y2xheS5UZXh0dXJlLlJFUEVBVF0gU2VlIHtAbGluayBjbGF5LlRleHR1cmUud3JhcFN9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy53cmFwVD1jbGF5LlRleHR1cmUuUkVQRUFUXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS53cmFwVH1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLm1pbkZpbHRlcj1jbGF5LlRleHR1cmUuTElORUFSX01JUE1BUF9MSU5FQVJdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLm1pbkZpbHRlcn1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLm1hZ0ZpbHRlcj1jbGF5LlRleHR1cmUuTElORUFSXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5tYWdGaWx0ZXJ9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5leHBvc3VyZV0gT25seSBiZSB1c2VkIHdoZW4gc291cmNlIGlzIGEgSERSIGltYWdlLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt1c2VDYWNoZV0gSWYgdXNlIGNhY2hlLlxyXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgYXBwLmxvYWRUZXh0dXJlKCdkaWZmdXNlTWFwLmpwZycpXHJcbiAqICAgICAgLnRoZW4oZnVuY3Rpb24gKHRleHR1cmUpIHtcclxuICogICAgICAgICAgbWF0ZXJpYWwuc2V0KCdkaWZmdXNlTWFwJywgdGV4dHVyZSk7XHJcbiAqICAgICAgfSk7XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUubG9hZFRleHR1cmUgPSBmdW5jdGlvbiAodXJsT3JJbWcsIG9wdHMsIHVzZUNhY2hlKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICB2YXIga2V5ID0gZ2V0S2V5RnJvbUltYWdlTGlrZSh1cmxPckltZyk7XHJcbiAgICBpZiAodXNlQ2FjaGUpIHtcclxuICAgICAgICBpZiAodGhpcy5fdGV4Q2FjaGUuZ2V0KGtleSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleENhY2hlLmdldChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIFRPRE8gUHJvbWlzZSA/XHJcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZSA9IHNlbGYubG9hZFRleHR1cmVTeW5jKHVybE9ySW1nLCBvcHRzKTtcclxuICAgICAgICBpZiAoIXRleHR1cmUuaXNSZW5kZXJhYmxlKCkpIHtcclxuICAgICAgICAgICAgdGV4dHVyZS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLl9kaXNwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc29sdmUodGV4dHVyZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmVycm9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLl9kaXNwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUodGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAodXNlQ2FjaGUpIHtcclxuICAgICAgICB0aGlzLl90ZXhDYWNoZS5wdXQoa2V5LCBwcm9taXNlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcm9taXNlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHRleHR1cmUgZnJvbSBpbWFnZSBvciBzdHJpbmcgc3luY2hyb25vdXNseS4gVGV4dHVyZSBjYW4gYmUgdXNlIGRpcmVjdGx5IGFuZCBkb24ndCBoYXZlIHRvIHdhaXQgZm9yIGl0J3MgbG9hZGVkLlxyXG4gKiBAcGFyYW0ge0ltYWdlTGlrZX0gaW1nXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gVGV4dHVyZSBvcHRpb25zLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmZsaXBZPXRydWVdIElmIGZsaXBZLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5mbGlwWX1cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5jb252ZXJ0VG9QT1Q9ZmFsc2VdIEZvcmNlIGNvbnZlcnQgTm9uZSBQb3dlciBvZiBUd28gdGV4dHVyZSB0byBQb3dlciBvZiB0d28gc28gaXQgY2FuIGJlIHRpbGVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuYW5pc290cm9waWNdIEFuaXNvdHJvcGljIGZpbHRlcmluZy4gU2VlIHtAbGluayBjbGF5LlRleHR1cmUuYW5pc290cm9waWN9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy53cmFwUz1jbGF5LlRleHR1cmUuUkVQRUFUXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS53cmFwU31cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLndyYXBUPWNsYXkuVGV4dHVyZS5SRVBFQVRdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLndyYXBUfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMubWluRmlsdGVyPWNsYXkuVGV4dHVyZS5MSU5FQVJfTUlQTUFQX0xJTkVBUl0gU2VlIHtAbGluayBjbGF5LlRleHR1cmUubWluRmlsdGVyfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMubWFnRmlsdGVyPWNsYXkuVGV4dHVyZS5MSU5FQVJdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLm1hZ0ZpbHRlcn1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmV4cG9zdXJlXSBPbmx5IGJlIHVzZWQgd2hlbiBzb3VyY2UgaXMgYSBIRFIgaW1hZ2UuXHJcbiAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgdmFyIHRleHR1cmUgPSBhcHAubG9hZFRleHR1cmUoJ2RpZmZ1c2VNYXAuanBnJywge1xyXG4gKiAgICAgIGFuaXNvdHJvcGljOiA4LFxyXG4gKiAgICAgIGZsaXBZOiBmYWxzZVxyXG4gKiAgfSk7XHJcbiAqICBtYXRlcmlhbC5zZXQoJ2RpZmZ1c2VNYXAnLCB0ZXh0dXJlKTtcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5sb2FkVGV4dHVyZVN5bmMgPSBmdW5jdGlvbiAodXJsT3JJbWcsIG9wdHMpIHtcclxuICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRChvcHRzKTtcclxuICAgIGlmICh0eXBlb2YgdXJsT3JJbWcgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgaWYgKHVybE9ySW1nLm1hdGNoKC8uaGRyJHxeZGF0YTphcHBsaWNhdGlvblxcL29jdGV0LXN0cmVhbS8pKSB7XHJcbiAgICAgICAgICAgIHRleHR1cmUgPSB0ZXh0dXJlVXRpbC5sb2FkVGV4dHVyZSh1cmxPckltZywge1xyXG4gICAgICAgICAgICAgICAgZXhwb3N1cmU6IG9wdHMgJiYgb3B0cy5leHBvc3VyZSxcclxuICAgICAgICAgICAgICAgIGZpbGVUeXBlOiAnaGRyJ1xyXG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmRpcnR5KCk7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnRyaWdnZXIoJ3N1Y2Nlc3MnKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRzKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlW2tleV0gPSBvcHRzW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRleHR1cmUubG9hZCh1cmxPckltZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNJbWFnZUxpa2VFbGVtZW50KHVybE9ySW1nKSkge1xyXG4gICAgICAgIHRleHR1cmUuaW1hZ2UgPSB1cmxPckltZztcclxuICAgICAgICB0ZXh0dXJlLmR5bmFtaWMgPSB1cmxPckltZyBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGV4dHVyZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSB0ZXh0dXJlIGZyb20gaW1hZ2Ugb3Igc3RyaW5nIHN5bmNocm9ub3VzbHkuIFRleHR1cmUgY2FuIGJlIHVzZSBkaXJlY3RseSBhbmQgZG9uJ3QgaGF2ZSB0byB3YWl0IGZvciBpdCdzIGxvYWRlZC5cclxuICogQHBhcmFtIHtJbWFnZUxpa2V9IGltZ1xyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIFRleHR1cmUgb3B0aW9ucy5cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbGlwWT1mYWxzZV0gSWYgZmxpcFkuIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLmZsaXBZfVxyXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgYXBwLmxvYWRUZXh0dXJlQ3ViZSh7XHJcbiAqICAgICAgcHg6ICdza3lib3gvcHguanBnJywgcHk6ICdza3lib3gvcHkuanBnJywgcHo6ICdza3lib3gvcHouanBnJyxcclxuICogICAgICBueDogJ3NreWJveC9ueC5qcGcnLCBueTogJ3NreWJveC9ueS5qcGcnLCBuejogJ3NreWJveC9uei5qcGcnXHJcbiAqICB9KS50aGVuKGZ1bmN0aW9uICh0ZXh0dXJlKSB7XHJcbiAqICAgICAgc2t5Ym94LnNldEVudmlyb25tZW50TWFwKHRleHR1cmUpO1xyXG4gKiAgfSlcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5sb2FkVGV4dHVyZUN1YmUgPSBmdW5jdGlvbiAoaW1nTGlzdCwgb3B0cykge1xyXG4gICAgdmFyIHRleHR1cmVDdWJlID0gdGhpcy5sb2FkVGV4dHVyZUN1YmVTeW5jKGltZ0xpc3QsIG9wdHMpO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBpZiAodGV4dHVyZUN1YmUuaXNSZW5kZXJhYmxlKCkpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0ZXh0dXJlQ3ViZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0ZXh0dXJlQ3ViZS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodGV4dHVyZUN1YmUpO1xyXG4gICAgICAgICAgICB9KS5lcnJvcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgdGV4dHVyZSBmcm9tIGltYWdlIG9yIHN0cmluZyBzeW5jaHJvbm91c2x5LiBUZXh0dXJlIGNhbiBiZSB1c2UgZGlyZWN0bHkgYW5kIGRvbid0IGhhdmUgdG8gd2FpdCBmb3IgaXQncyBsb2FkZWQuXHJcbiAqIEBwYXJhbSB7SW1hZ2VMaWtlfSBpbWdcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSBUZXh0dXJlIG9wdGlvbnMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZmxpcFk9ZmFsc2VdIElmIGZsaXBZLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5mbGlwWX1cclxuICogQHJldHVybiB7Y2xheS5UZXh0dXJlQ3ViZX1cclxuICogQGV4YW1wbGVcclxuICogIHZhciB0ZXh0dXJlID0gYXBwLmxvYWRUZXh0dXJlQ3ViZVN5bmMoe1xyXG4gKiAgICAgIHB4OiAnc2t5Ym94L3B4LmpwZycsIHB5OiAnc2t5Ym94L3B5LmpwZycsIHB6OiAnc2t5Ym94L3B6LmpwZycsXHJcbiAqICAgICAgbng6ICdza3lib3gvbnguanBnJywgbnk6ICdza3lib3gvbnkuanBnJywgbno6ICdza3lib3gvbnouanBnJ1xyXG4gKiAgfSk7XHJcbiAqICBza3lib3guc2V0RW52aXJvbm1lbnRNYXAodGV4dHVyZSk7XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUubG9hZFRleHR1cmVDdWJlU3luYyA9IGZ1bmN0aW9uIChpbWdMaXN0LCBvcHRzKSB7XHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuICAgIG9wdHMuZmxpcFkgPSBvcHRzLmZsaXBZIHx8IGZhbHNlO1xyXG4gICAgdmFyIHRleHR1cmVDdWJlID0gbmV3IFRleHR1cmVDdWJlKG9wdHMpO1xyXG4gICAgaWYgKCFpbWdMaXN0IHx8ICFpbWdMaXN0LnB4IHx8ICFpbWdMaXN0Lm54IHx8ICFpbWdMaXN0LnB5IHx8ICFpbWdMaXN0Lm55IHx8ICFpbWdMaXN0LnB6IHx8ICFpbWdMaXN0Lm56KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGN1YmVtYXAgZm9ybWF0LiBTaG91bGQgYmUgYW4gb2JqZWN0IGluY2x1ZGluZyBweCxueCxweSxueSxweixueicpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBpbWdMaXN0LnB4ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRleHR1cmVDdWJlLmxvYWQoaW1nTGlzdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0ZXh0dXJlQ3ViZS5pbWFnZSA9IHV0aWwuY2xvbmUoaW1nTGlzdCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGV4dHVyZUN1YmU7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgbWF0ZXJpYWwuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fFN0YW5kYXJkTWF0ZXJpYWxNUkNvbmZpZ30gbWF0ZXJpYWxDb25maWcuIG1hdGVyaWFsQ29uZmlnIGNvbnRhaW5zIGBzaGFkZXJgLCBgdHJhbnNwYXJlbnRgIGFuZCB1bmlmb3JtcyB0aGF0IHVzZWQgaW4gY29ycmVzcG9uZGluZyB1bmlmb3Jtcy5cclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmlmb3JtcyBjYW4gYmUgYGNvbG9yYCwgYGFscGhhYCBgZGlmZnVzZU1hcGAgZXRjLlxyXG4gKiBAcGFyYW0ge3N0cmluZ3xjbGF5LlNoYWRlcn0gW3NoYWRlcj0nY2xheS5zdGFuZGFyZE1SJ10gRGVmYXVsdCB0byBiZSBzdGFuZGFyZCBzaGFkZXIgd2l0aCBtZXRhbG5lc3MgYW5kIHJvdWdobmVzcyB3b3JrZmxvdy5cclxuICogQHBhcmFtIHtib29sZWFufSBbdHJhbnNwYXJlbnQ9ZmFsc2VdIElmIG1hdGVyaWFsIGlzIHRyYW5zcGFyZW50LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt0ZXh0dXJlQ29udmVydFRvUE9UPWZhbHNlXSBGb3JjZSBjb252ZXJ0IE5vbmUgUG93ZXIgb2YgVHdvIHRleHR1cmUgdG8gUG93ZXIgb2YgdHdvIHNvIGl0IGNhbiBiZSB0aWxlZC5cclxuICogQHBhcmFtIHtib29sZWFufSBbdGV4dHVyZUZsaXBZPXRydWVdIElmIGZsaXAgeSBvZiB0ZXh0dXJlLlxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbdGV4dHVyZUxvYWRlZF0gQ2FsbGJhY2sgd2hlbiBzaW5nbGUgdGV4dHVyZSBsb2FkZWQuXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFt0ZXh0dXJlc1JlYWR5XSBDYWxsYmFjayB3aGVuIGFsbCB0ZXh0dXJlIGxvYWRlZC5cclxuICogQHJldHVybiB7Y2xheS5NYXRlcmlhbH1cclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVNYXRlcmlhbCA9IGZ1bmN0aW9uIChtYXRDb25maWcpIHtcclxuICAgIG1hdENvbmZpZyA9IG1hdENvbmZpZyB8fCB7fTtcclxuICAgIG1hdENvbmZpZy5zaGFkZXIgPSBtYXRDb25maWcuc2hhZGVyIHx8ICdjbGF5LnN0YW5kYXJkTVInO1xyXG4gICAgdmFyIHNoYWRlciA9IG1hdENvbmZpZy5zaGFkZXIgaW5zdGFuY2VvZiBTaGFkZXIgPyBtYXRDb25maWcuc2hhZGVyIDogc2hhZGVyTGlicmFyeS5nZXQobWF0Q29uZmlnLnNoYWRlcik7XHJcbiAgICB2YXIgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgIHNoYWRlcjogc2hhZGVyXHJcbiAgICB9KTtcclxuICAgIGlmIChtYXRDb25maWcubmFtZSkge1xyXG4gICAgICAgIG1hdGVyaWFsLm5hbWUgPSBtYXRDb25maWcubmFtZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdGV4dHVyZXNMb2FkaW5nID0gW107XHJcbiAgICBmdW5jdGlvbiBtYWtlVGV4dHVyZVNldHRlcihrZXkpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRleHR1cmUpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybShrZXksIHRleHR1cmUpO1xyXG4gICAgICAgICAgICBtYXRDb25maWcudGV4dHVyZUxvYWRlZCAmJiBtYXRDb25maWcudGV4dHVyZUxvYWRlZChrZXksIHRleHR1cmUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZm9yICh2YXIga2V5IGluIG1hdENvbmZpZykge1xyXG4gICAgICAgIGlmIChtYXRlcmlhbC51bmlmb3Jtc1trZXldKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWwgPSBtYXRDb25maWdba2V5XTtcclxuICAgICAgICAgICAgaWYgKChtYXRlcmlhbC51bmlmb3Jtc1trZXldLnR5cGUgPT09ICd0JyB8fCBpc0ltYWdlTGlrZUVsZW1lbnQodmFsKSlcclxuICAgICAgICAgICAgICAgICYmICEodmFsIGluc3RhbmNlb2YgVGV4dHVyZSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUcnkgdG8gbG9hZCBhIHRleHR1cmUuXHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlc0xvYWRpbmcucHVzaCh0aGlzLmxvYWRUZXh0dXJlKHZhbCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1BPVDogbWF0Q29uZmlnLnRleHR1cmVDb252ZXJ0VG9QT1QgfHwgZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZmxpcFk6IG1hdENvbmZpZy50ZXh0dXJlRmxpcFkgPT0gbnVsbCA/IHRydWUgOiBtYXRDb25maWcudGV4dHVyZUZsaXBZXHJcbiAgICAgICAgICAgICAgICB9KS50aGVuKG1ha2VUZXh0dXJlU2V0dGVyKGtleSkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oa2V5LCB2YWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChtYXRDb25maWcudHJhbnNwYXJlbnQpIHtcclxuICAgICAgICBtYXRDb25maWcuZGVwdGhNYXNrID0gZmFsc2U7XHJcbiAgICAgICAgbWF0Q29uZmlnLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKG1hdENvbmZpZy50ZXh0dXJlc1JlYWR5KSB7XHJcbiAgICAgICAgUHJvbWlzZS5hbGwodGV4dHVyZXNMb2FkaW5nKS50aGVuKGZ1bmN0aW9uICh0ZXh0dXJlcykge1xyXG4gICAgICAgICAgICBtYXRDb25maWcudGV4dHVyZXNSZWFkeSh0ZXh0dXJlcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1hdGVyaWFsO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGN1YmUgbWVzaCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZSBvciB0aGUgZ2l2ZW4gcGFyZW50IG5vZGUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge09iamVjdHxjbGF5Lk1hdGVyaWFsfSBbbWF0ZXJpYWxdXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fG51bWJlcn0gW3N1YmRpdmlzaW9uPTFdIFN1YmRpdmlzaW9uIG9mIGN1YmUuXHJcbiAqICAgICAgICAgIENhbiBiZSBhIG51bWJlciB0byByZXByZXNlbnQgYm90aCB3aWR0aCwgaGVpZ2h0IGFuZCBkZXB0aCBkaW1lbnNpb25zLiBPciBhbiBhcnJheSB0byByZXByZXNlbnQgdGhlbSByZXNwZWN0aXZlbHkuXHJcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICogQGV4YW1wbGVcclxuICogIC8vIENyZWF0ZSBhIHdoaXRlIGN1YmUuXHJcbiAqICBhcHAuY3JlYXRlQ3ViZSgpXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQ3ViZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCwgcGFyZW50Tm9kZSwgc3ViZGl2KSB7XHJcbiAgICBpZiAoc3ViZGl2ID09IG51bGwpIHtcclxuICAgICAgICBzdWJkaXYgPSAxO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBzdWJkaXYgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gW3N1YmRpdiwgc3ViZGl2LCBzdWJkaXZdO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBnZW9LZXkgPSAnY3ViZS0nICsgc3ViZGl2LmpvaW4oJy0nKTtcclxuICAgIHZhciBjdWJlID0gdGhpcy5fZ2VvQ2FjaGUuZ2V0KGdlb0tleSk7XHJcbiAgICBpZiAoIWN1YmUpIHtcclxuICAgICAgICBjdWJlID0gbmV3IEN1YmVHZW8oe1xyXG4gICAgICAgICAgICB3aWR0aFNlZ21lbnRzOiBzdWJkaXZbMF0sXHJcbiAgICAgICAgICAgIGhlaWdodFNlZ21lbnRzOiBzdWJkaXZbMV0sXHJcbiAgICAgICAgICAgIGRlcHRoU2VnbWVudHM6IHN1YmRpdlsyXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGN1YmUuZ2VuZXJhdGVUYW5nZW50cygpO1xyXG4gICAgICAgIHRoaXMuX2dlb0NhY2hlLnB1dChnZW9LZXksIGN1YmUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVzaChjdWJlLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgY3ViZSBtZXNoIHRoYXQgY2FtZXJhIGlzIGluc2lkZSB0aGUgY3ViZS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7T2JqZWN0fGNsYXkuTWF0ZXJpYWx9IFttYXRlcmlhbF1cclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtwYXJlbnROb2RlXSBQYXJlbnQgbm9kZSB0byBhcHBlbmQuIERlZmF1bHQgdG8gYmUgc2NlbmUuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58bnVtYmVyfSBbc3ViZGl2aXNpb249MV0gU3ViZGl2aXNpb24gb2YgY3ViZS5cclxuICogICAgICAgICAgQ2FuIGJlIGEgbnVtYmVyIHRvIHJlcHJlc2VudCBib3RoIHdpZHRoLCBoZWlnaHQgYW5kIGRlcHRoIGRpbWVuc2lvbnMuIE9yIGFuIGFycmF5IHRvIHJlcHJlc2VudCB0aGVtIHJlc3BlY3RpdmVseS5cclxuICogQHJldHVybiB7Y2xheS5NZXNofVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgLy8gQ3JlYXRlIGEgd2hpdGUgY3ViZSBpbnNpZGUuXHJcbiAqICBhcHAuY3JlYXRlQ3ViZUluc2lkZSgpXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQ3ViZUluc2lkZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCwgcGFyZW50Tm9kZSwgc3ViZGl2KSB7XHJcbiAgICBpZiAoc3ViZGl2ID09IG51bGwpIHtcclxuICAgICAgICBzdWJkaXYgPSAxO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBzdWJkaXYgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gW3N1YmRpdiwgc3ViZGl2LCBzdWJkaXZdO1xyXG4gICAgfVxyXG4gICAgdmFyIGdlb0tleSA9ICdjdWJlSW5zaWRlLScgKyBzdWJkaXYuam9pbignLScpO1xyXG4gICAgdmFyIGN1YmUgPSB0aGlzLl9nZW9DYWNoZS5nZXQoZ2VvS2V5KTtcclxuICAgIGlmICghY3ViZSkge1xyXG4gICAgICAgIGN1YmUgPSBuZXcgQ3ViZUdlbyh7XHJcbiAgICAgICAgICAgIGluc2lkZTogdHJ1ZSxcclxuICAgICAgICAgICAgd2lkdGhTZWdtZW50czogc3ViZGl2WzBdLFxyXG4gICAgICAgICAgICBoZWlnaHRTZWdtZW50czogc3ViZGl2WzFdLFxyXG4gICAgICAgICAgICBkZXB0aFNlZ21lbnRzOiBzdWJkaXZbMl1cclxuICAgICAgICB9KTtcclxuICAgICAgICBjdWJlLmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgICAgICB0aGlzLl9nZW9DYWNoZS5wdXQoZ2VvS2V5LCBjdWJlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVNZXNoKGN1YmUsIG1hdGVyaWFsLCBwYXJlbnROb2RlKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBzcGhlcmUgbWVzaCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZSBvciB0aGUgZ2l2ZW4gcGFyZW50IG5vZGUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge09iamVjdHxjbGF5Lk1hdGVyaWFsfSBbbWF0ZXJpYWxdXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N1YmRpdmlzaW9uPTIwXSBTdWJkaXZpc2lvbiBvZiBzcGhlcmUuXHJcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICogQGV4YW1wbGVcclxuICogIC8vIENyZWF0ZSBhIHNlbWktdHJhbnNwYXJlbnQgc3BoZXJlLlxyXG4gKiAgYXBwLmNyZWF0ZVNwaGVyZSh7XHJcbiAqICAgICAgY29sb3I6IFswLCAwLCAxXSxcclxuICogICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICogICAgICBhbHBoYTogMC41XHJcbiAqICB9KVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZVNwaGVyZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCwgcGFyZW50Tm9kZSwgc3ViZGl2aXNpb24pIHtcclxuICAgIGlmIChzdWJkaXZpc2lvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgc3ViZGl2aXNpb24gPSAyMDtcclxuICAgIH1cclxuICAgIHZhciBnZW9LZXkgPSAnc3BoZXJlLScgKyBzdWJkaXZpc2lvbjtcclxuICAgIHZhciBzcGhlcmUgPSB0aGlzLl9nZW9DYWNoZS5nZXQoZ2VvS2V5KTtcclxuICAgIGlmICghc3BoZXJlKSB7XHJcbiAgICAgICAgc3BoZXJlID0gbmV3IFNwaGVyZUdlbyh7XHJcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IHN1YmRpdmlzaW9uICogMixcclxuICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IHN1YmRpdmlzaW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc3BoZXJlLmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgICAgICB0aGlzLl9nZW9DYWNoZS5wdXQoZ2VvS2V5LCBzcGhlcmUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVzaChzcGhlcmUsIG1hdGVyaWFsLCBwYXJlbnROb2RlKTtcclxufTtcclxuXHJcbi8vIFRPRE8gbWF5IGJlIG1vZGlmaWVkP1xyXG4vKipcclxuICogQ3JlYXRlIGEgcGxhbmUgbWVzaCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZSBvciB0aGUgZ2l2ZW4gcGFyZW50IG5vZGUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge09iamVjdHxjbGF5Lk1hdGVyaWFsfSBbbWF0ZXJpYWxdXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fG51bWJlcn0gW3N1YmRpdmlzaW9uPTFdIFN1YmRpdmlzaW9uIG9mIHBsYW5lLlxyXG4gKiAgICAgICAgICBDYW4gYmUgYSBudW1iZXIgdG8gcmVwcmVzZW50IGJvdGggd2lkdGggYW5kIGhlaWdodCBkaW1lbnNpb25zLiBPciBhbiBhcnJheSB0byByZXByZXNlbnQgdGhlbSByZXNwZWN0aXZlbHkuXHJcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICogQGV4YW1wbGVcclxuICogIC8vIENyZWF0ZSBhIHJlZCBjb2xvciBwbGFuZS5cclxuICogIGFwcC5jcmVhdGVQbGFuZSh7XHJcbiAqICAgICAgY29sb3I6IFsxLCAwLCAwXVxyXG4gKiAgfSlcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVQbGFuZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCwgcGFyZW50Tm9kZSwgc3ViZGl2KSB7XHJcbiAgICBpZiAoc3ViZGl2ID09IG51bGwpIHtcclxuICAgICAgICBzdWJkaXYgPSAxO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBzdWJkaXYgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gW3N1YmRpdiwgc3ViZGl2XTtcclxuICAgIH1cclxuICAgIHZhciBnZW9LZXkgPSAncGxhbmUtJyArIHN1YmRpdi5qb2luKCctJyk7XHJcbiAgICB2YXIgcGxhbmVHZW8gPSB0aGlzLl9nZW9DYWNoZS5nZXQoZ2VvS2V5KTtcclxuICAgIGlmICghcGxhbmVHZW8pIHtcclxuICAgICAgICBwbGFuZUdlbyA9IG5ldyBQbGFuZUdlbyh7XHJcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IHN1YmRpdlswXSxcclxuICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IHN1YmRpdlsxXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHBsYW5lR2VvLmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgICAgICB0aGlzLl9nZW9DYWNoZS5wdXQoZ2VvS2V5LCBwbGFuZUdlbyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVNZXNoKHBsYW5lR2VvLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIG1lc2ggd2l0aCBwYXJhbWV0cmljIHN1cmZhY2UgZnVuY3Rpb25cclxuICogQHBhcmFtIHtPYmplY3R8Y2xheS5NYXRlcmlhbH0gW21hdGVyaWFsXVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRvIGFwcGVuZC4gRGVmYXVsdCB0byBiZSBzY2VuZS5cclxuICogQHBhcmFtIHtPYmplY3R9IGdlbmVyYXRvclxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IueFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IueVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IuelxyXG4gKiBAcGFyYW0ge0FycmF5fSBbZ2VuZXJhdG9yLnU9WzAsIDEsIDAuMDVdXVxyXG4gKiBAcGFyYW0ge0FycmF5fSBbZ2VuZXJhdG9yLnY9WzAsIDEsIDAuMDVdXVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlUGFyYW1ldHJpY1N1cmZhY2UgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIHBhcmVudE5vZGUsIGdlbmVyYXRvcikge1xyXG4gICAgdmFyIGdlbyA9IG5ldyBQYXJhbWV0cmljU3VyZmFjZUdlbyh7XHJcbiAgICAgICAgZ2VuZXJhdG9yOiBnZW5lcmF0b3JcclxuICAgIH0pO1xyXG4gICAgZ2VvLmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZU1lc2goZ2VvLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGdlbmVyYWwgbWVzaCB3aXRoIGdpdmVuIGdlb21ldHJ5IGluc3RhbmNlIGFuZCBtYXRlcmlhbCBjb25maWcuXHJcbiAqIEBwYXJhbSB7Y2xheS5HZW9tZXRyeX0gZ2VvbWV0cnlcclxuICogQHJldHVybiB7Y2xheS5NZXNofVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZU1lc2ggPSBmdW5jdGlvbiAoZ2VvbWV0cnksIG1hdCwgcGFyZW50Tm9kZSkge1xyXG4gICAgdmFyIG1lc2ggPSBuZXcgTWVzaCh7XHJcbiAgICAgICAgZ2VvbWV0cnk6IGdlb21ldHJ5LFxyXG4gICAgICAgIG1hdGVyaWFsOiBtYXQgaW5zdGFuY2VvZiBNYXRlcmlhbCA/IG1hdCA6IHRoaXMuY3JlYXRlTWF0ZXJpYWwobWF0KVxyXG4gICAgfSk7XHJcbiAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZSB8fCB0aGlzLnNjZW5lO1xyXG4gICAgcGFyZW50Tm9kZS5hZGQobWVzaCk7XHJcbiAgICByZXR1cm4gbWVzaDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYW4gZW1wdHkgbm9kZVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gcGFyZW50Tm9kZVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlTm9kZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlKSB7XHJcbiAgICB2YXIgbm9kZSA9IG5ldyBOb2RlKCk7XHJcbiAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZSB8fCB0aGlzLnNjZW5lO1xyXG4gICAgcGFyZW50Tm9kZS5hZGQobm9kZSk7XHJcbiAgICByZXR1cm4gbm9kZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBwZXJzcGVjdGl2ZSBvciBvcnRob2dyYXBoaWMgY2FtZXJhIGFuZCBhZGQgaXQgdG8gdGhlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gcG9zaXRpb25cclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5LlZlY3RvcjN9IHRhcmdldFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3R5cGU9XCJwZXJzcGVjdGl2ZVwiXSBDYW4gYmUgJ3BlcnNwZWN0aXZlJyBvciAnb3J0aG9ncmFwaGljJyhpbiBzaG9ydCAnb3J0aG8nKVxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gW2V4dGVudF0gRXh0ZW50IGlzIGF2YWlsYWJsZSBvbmx5IGlmIHR5cGUgaXMgb3J0aG9ncmFwaGljLlxyXG4gKiBAcmV0dXJuIHtjbGF5LmNhbWVyYS5QZXJzcGVjdGl2ZXxjbGF5LmNhbWVyYS5PcnRob2dyYXBoaWN9XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQ2FtZXJhID0gZnVuY3Rpb24gKHBvc2l0aW9uLCB0YXJnZXQsIHR5cGUsIGV4dGVudCkge1xyXG4gICAgdmFyIENhbWVyYUN0b3I7XHJcbiAgICB2YXIgaXNPcnRobyA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09ICdvcnRobycgfHwgdHlwZSA9PT0gJ29ydGhvZ3JhcGhpYycpIHtcclxuICAgICAgICBpc09ydGhvID0gdHJ1ZTtcclxuICAgICAgICBDYW1lcmFDdG9yID0gT3J0aG9ncmFwaGljQ2FtZXJhO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHR5cGUgJiYgdHlwZSAhPT0gJ3BlcnNwZWN0aXZlJykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmtvd24gY2FtZXJhIHR5cGUgJyArIHR5cGUgKyAnLiBVc2UgZGVmYXVsdCBwZXJzcGVjdGl2ZSBjYW1lcmEnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgQ2FtZXJhQ3RvciA9IFBlcnNwZWN0aXZlQ2FtZXJhO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjYW1lcmEgPSBuZXcgQ2FtZXJhQ3RvcigpO1xyXG4gICAgaWYgKHBvc2l0aW9uIGluc3RhbmNlb2YgVmVjdG9yMykge1xyXG4gICAgICAgIGNhbWVyYS5wb3NpdGlvbi5jb3B5KHBvc2l0aW9uKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHBvc2l0aW9uIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICBjYW1lcmEucG9zaXRpb24uc2V0QXJyYXkocG9zaXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKHRhcmdldFswXSwgdGFyZ2V0WzFdLCB0YXJnZXRbMl0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcclxuICAgICAgICBjYW1lcmEubG9va0F0KHRhcmdldCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4dGVudCAmJiBpc09ydGhvKSB7XHJcbiAgICAgICAgZXh0ZW50ID0gZXh0ZW50LmFycmF5IHx8IGV4dGVudDtcclxuICAgICAgICBjYW1lcmEubGVmdCA9IC1leHRlbnRbMF0gLyAyO1xyXG4gICAgICAgIGNhbWVyYS5yaWdodCA9IGV4dGVudFswXSAvIDI7XHJcbiAgICAgICAgY2FtZXJhLnRvcCA9IGV4dGVudFsxXSAvIDI7XHJcbiAgICAgICAgY2FtZXJhLmJvdHRvbSA9IC1leHRlbnRbMV0gLyAyO1xyXG4gICAgICAgIGNhbWVyYS5uZWFyID0gMDtcclxuICAgICAgICBjYW1lcmEuZmFyID0gZXh0ZW50WzJdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgY2FtZXJhLmFzcGVjdCA9IHRoaXMucmVuZGVyZXIuZ2V0Vmlld3BvcnRBc3BlY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChjYW1lcmEpO1xyXG5cclxuICAgIHJldHVybiBjYW1lcmE7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgZGlyZWN0aW9uYWwgbGlnaHQgYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58Y2xheS5WZWN0b3IzfSBkaXIgQSBWZWN0b3IzIG9yIGFycmF5IHRvIHJlcHJlc2VudCB0aGUgZGlyZWN0aW9uLlxyXG4gKiBAcGFyYW0ge0NvbG9yfSBbY29sb3I9JyNmZmYnXSBDb2xvciBvZiBkaXJlY3Rpb25hbCBsaWdodCwgZGVmYXVsdCB0byBiZSB3aGl0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtpbnRlbnNpdHldIEludGVuc2l0eSBvZiBkaXJlY3Rpb25hbCBsaWdodCwgZGVmYXVsdCB0byBiZSAxLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgYXBwLmNyZWF0ZURpcmVjdGlvbmFsTGlnaHQoWy0xLCAtMSwgLTFdLCAnI2ZmZicsIDIpO1xyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZURpcmVjdGlvbmFsTGlnaHQgPSBmdW5jdGlvbiAoZGlyLCBjb2xvciwgaW50ZW5zaXR5KSB7XHJcbiAgICB2YXIgbGlnaHQgPSBuZXcgRGlyZWN0aW9uYWxMaWdodCgpO1xyXG4gICAgaWYgKGRpciBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcclxuICAgICAgICBkaXIgPSBkaXIuYXJyYXk7XHJcbiAgICB9XHJcbiAgICBsaWdodC5wb3NpdGlvbi5zZXRBcnJheShkaXIpLm5lZ2F0ZSgpO1xyXG4gICAgbGlnaHQubG9va0F0KFZlY3RvcjMuWkVSTyk7XHJcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbG9yID0gcGFyc2VDb2xvcihjb2xvcik7XHJcbiAgICB9XHJcbiAgICBjb2xvciAhPSBudWxsICYmIChsaWdodC5jb2xvciA9IGNvbG9yKTtcclxuICAgIGludGVuc2l0eSAhPSBudWxsICYmIChsaWdodC5pbnRlbnNpdHkgPSBpbnRlbnNpdHkpO1xyXG5cclxuICAgIHRoaXMuc2NlbmUuYWRkKGxpZ2h0KTtcclxuICAgIHJldHVybiBsaWdodDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBzcG90IGxpZ2h0IGFuZCBhZGQgaXQgdG8gdGhlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gcG9zaXRpb24gUG9zaXRpb24gb2YgdGhlIHNwb3QgbGlnaHQuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58Y2xheS5WZWN0b3IzfSBbdGFyZ2V0XSBUYXJnZXQgcG9zaXRpb24gd2hlcmUgc3BvdCBsaWdodCBwb2ludHMgdG8uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcmFuZ2U9MjBdIEZhbGxvZmYgcmFuZ2Ugb2Ygc3BvdCBsaWdodC4gRGVmYXVsdCB0byBiZSAyMC5cclxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2Ygc3BvdCBsaWdodCwgZGVmYXVsdCB0byBiZSB3aGl0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtpbnRlbnNpdHk9MV0gSW50ZW5zaXR5IG9mIHNwb3QgbGlnaHQsIGRlZmF1bHQgdG8gYmUgMS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt1bWJyYUFuZ2xlPTMwXSBVbWJyYSBhbmdsZSBvZiBzcG90IGxpZ2h0LiBEZWZhdWx0IHRvIGJlIDMwIGRlZ3JlZSBmcm9tIHRoZSBtaWRkbGUgbGluZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwZW51bWJyYUFuZ2xlPTQ1XSBQZW51bWJyYSBhbmdsZSBvZiBzcG90IGxpZ2h0LiBEZWZhdWx0IHRvIGJlIDQ1IGRlZ3JlZSBmcm9tIHRoZSBtaWRkbGUgbGluZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogIGFwcC5jcmVhdGVTcG90TGlnaHQoWzUsIDUsIDVdLCBbMCwgMCwgMF0sIDIwLCAjOTAwKTtcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVTcG90TGlnaHQgPSBmdW5jdGlvbiAocG9zaXRpb24sIHRhcmdldCwgcmFuZ2UsIGNvbG9yLCBpbnRlbnNpdHksIHVtYnJhQW5nbGUsIHBlbnVtYnJhQW5nbGUpIHtcclxuICAgIHZhciBsaWdodCA9IG5ldyBTcG90TGlnaHQoKTtcclxuICAgIGxpZ2h0LnBvc2l0aW9uLnNldEFycmF5KHBvc2l0aW9uIGluc3RhbmNlb2YgVmVjdG9yMyA/IHBvc2l0aW9uLmFycmF5IDogcG9zaXRpb24pO1xyXG5cclxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKHRhcmdldFswXSwgdGFyZ2V0WzFdLCB0YXJnZXRbMl0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcclxuICAgICAgICBsaWdodC5sb29rQXQodGFyZ2V0KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbG9yID0gcGFyc2VDb2xvcihjb2xvcik7XHJcbiAgICB9XHJcbiAgICByYW5nZSAhPSBudWxsICYmIChsaWdodC5yYW5nZSA9IHJhbmdlKTtcclxuICAgIGNvbG9yICE9IG51bGwgJiYgKGxpZ2h0LmNvbG9yID0gY29sb3IpO1xyXG4gICAgaW50ZW5zaXR5ICE9IG51bGwgJiYgKGxpZ2h0LmludGVuc2l0eSA9IGludGVuc2l0eSk7XHJcbiAgICB1bWJyYUFuZ2xlICE9IG51bGwgJiYgKGxpZ2h0LnVtYnJhQW5nbGUgPSB1bWJyYUFuZ2xlKTtcclxuICAgIHBlbnVtYnJhQW5nbGUgIT0gbnVsbCAmJiAobGlnaHQucGVudW1icmFBbmdsZSA9IHBlbnVtYnJhQW5nbGUpO1xyXG5cclxuICAgIHRoaXMuc2NlbmUuYWRkKGxpZ2h0KTtcclxuXHJcbiAgICByZXR1cm4gbGlnaHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgcG9pbnQgbGlnaHQuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58Y2xheS5WZWN0b3IzfSBwb3NpdGlvbiBQb3NpdGlvbiBvZiBwb2ludCBsaWdodC4uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcmFuZ2U9MTAwXSBGYWxsb2ZmIHJhbmdlIG9mIHBvaW50IGxpZ2h0LlxyXG4gKiBAcGFyYW0ge0NvbG9yfSBbY29sb3I9JyNmZmYnXSBDb2xvciBvZiBwb2ludCBsaWdodC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtpbnRlbnNpdHk9MV0gSW50ZW5zaXR5IG9mIHBvaW50IGxpZ2h0LlxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZVBvaW50TGlnaHQgPSBmdW5jdGlvbiAocG9zaXRpb24sIHJhbmdlLCBjb2xvciwgaW50ZW5zaXR5KSB7XHJcbiAgICB2YXIgbGlnaHQgPSBuZXcgUG9pbnRMaWdodCgpO1xyXG4gICAgbGlnaHQucG9zaXRpb24uc2V0QXJyYXkocG9zaXRpb24gaW5zdGFuY2VvZiBWZWN0b3IzID8gcG9zaXRpb24uYXJyYXkgOiBwb3NpdGlvbik7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb2xvciA9IHBhcnNlQ29sb3IoY29sb3IpO1xyXG4gICAgfVxyXG4gICAgcmFuZ2UgIT0gbnVsbCAmJiAobGlnaHQucmFuZ2UgPSByYW5nZSk7XHJcbiAgICBjb2xvciAhPSBudWxsICYmIChsaWdodC5jb2xvciA9IGNvbG9yKTtcclxuICAgIGludGVuc2l0eSAhPSBudWxsICYmIChsaWdodC5pbnRlbnNpdHkgPSBpbnRlbnNpdHkpO1xyXG5cclxuICAgIHRoaXMuc2NlbmUuYWRkKGxpZ2h0KTtcclxuXHJcbiAgICByZXR1cm4gbGlnaHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgYW1iaWVudCBsaWdodC5cclxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2YgYW1iaWVudCBsaWdodC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtpbnRlbnNpdHk9MV0gSW50ZW5zaXR5IG9mIGFtYmllbnQgbGlnaHQuXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQW1iaWVudExpZ2h0ID0gZnVuY3Rpb24gKGNvbG9yLCBpbnRlbnNpdHkpIHtcclxuICAgIHZhciBsaWdodCA9IG5ldyBBbWJpZW50TGlnaHQoKTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbG9yID0gcGFyc2VDb2xvcihjb2xvcik7XHJcbiAgICB9XHJcbiAgICBjb2xvciAhPSBudWxsICYmIChsaWdodC5jb2xvciA9IGNvbG9yKTtcclxuICAgIGludGVuc2l0eSAhPSBudWxsICYmIChsaWdodC5pbnRlbnNpdHkgPSBpbnRlbnNpdHkpO1xyXG5cclxuICAgIHRoaXMuc2NlbmUuYWRkKGxpZ2h0KTtcclxuXHJcbiAgICByZXR1cm4gbGlnaHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFuIGN1YmVtYXAgYW1iaWVudCBsaWdodCBhbmQgYW4gc3BoZXJpY2FsIGhhcm1vbmljIGFtYmllbnQgbGlnaHRcclxuICogZm9yIHNwZWN1bGFyIGFuZCBkaWZmdXNlIGxpZ2h0aW5nIGluIFBCUiByZW5kZXJpbmdcclxuICogQHBhcmFtIHtJbWFnZUxpa2V8VGV4dHVyZUN1YmV9IFtlbnZJbWFnZV0gUGFub3JhbWEgZW52aXJvbm1lbnQgaW1hZ2UsIEhEUiBmb3JtYXQgaXMgYmV0dGVyLiBPciBhIHByZSBsb2FkZWQgdGV4dHVyZSBjdWJlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3BlY3VsYXJJbnRlbnN0aXR5PTAuN10gSW50ZW5zaXR5IG9mIHNwZWN1bGFyIGxpZ2h0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2RpZmZ1c2VJbnRlbnN0aXR5PTAuN10gSW50ZW5zaXR5IG9mIGRpZmZ1c2UgbGlnaHQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZXhwb3N1cmU9MV0gRXhwb3N1cmUgb2YgSERSIGltYWdlLiBPbmx5IGlmIGltYWdlIGluIGZpcnN0IHBhcmFtdGVyIGlzIEhEUi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVmaWx0ZXJlZEN1YmVtYXBTaXplPTMyXSBUaGUgc2l6ZSBvZiBwcmVmaWxlcnRlZCBjdWJlbWFwLiBMYXJnZXIgdmFsdWUgd2lsbCB0YWtlIG1vcmUgdGltZSB0byBkbyBleHBlbnNpdmUgcHJlZmlsdGVyaW5nLlxyXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZUFtYmllbnRDdWJlbWFwTGlnaHQgPSBmdW5jdGlvbiAoZW52SW1hZ2UsIHNwZWNJbnRlbnNpdHksIGRpZmZJbnRlbnNpdHksIGV4cG9zdXJlLCBwcmVmaWx0ZXJlZEN1YmVtYXBTaXplKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICBpZiAoZXhwb3N1cmUgPT0gbnVsbCkge1xyXG4gICAgICAgIGV4cG9zdXJlID0gMDtcclxuICAgIH1cclxuICAgIGlmIChwcmVmaWx0ZXJlZEN1YmVtYXBTaXplID09IG51bGwpIHtcclxuICAgICAgICBwcmVmaWx0ZXJlZEN1YmVtYXBTaXplID0gMzI7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHNjZW5lID0gdGhpcy5zY2VuZTtcclxuXHJcbiAgICB2YXIgbG9hZFByb21pc2U7XHJcbiAgICBpZiAoZW52SW1hZ2UudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlQ3ViZScpIHtcclxuICAgICAgICBsb2FkUHJvbWlzZSA9IGVudkltYWdlLmlzUmVuZGVyYWJsZSgpXHJcbiAgICAgICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKGVudkltYWdlKVxyXG4gICAgICAgICAgICA6IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgICAgIGVudkltYWdlLnN1Y2Nlc3MoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZW52SW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgbG9hZFByb21pc2UgPSB0aGlzLmxvYWRUZXh0dXJlKGVudkltYWdlLCB7XHJcbiAgICAgICAgICAgIGV4cG9zdXJlOiBleHBvc3VyZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsb2FkUHJvbWlzZS50aGVuKGZ1bmN0aW9uIChlbnZUZXh0dXJlKSB7XHJcbiAgICAgICAgdmFyIHNwZWNMaWdodCA9IG5ldyBBbWJpZW50Q3ViZW1hcExpZ2h0KHtcclxuICAgICAgICAgICAgaW50ZW5zaXR5OiBzcGVjSW50ZW5zaXR5ICE9IG51bGwgPyBzcGVjSW50ZW5zaXR5IDogMC43XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc3BlY0xpZ2h0LmN1YmVtYXAgPSBlbnZUZXh0dXJlO1xyXG4gICAgICAgIGVudlRleHR1cmUuZmxpcFkgPSBmYWxzZTtcclxuICAgICAgICAvLyBUT0RPIENhY2hlIHByZWZpbHRlciA/XHJcbiAgICAgICAgc3BlY0xpZ2h0LnByZWZpbHRlcihzZWxmLnJlbmRlcmVyLCAzMik7XHJcblxyXG4gICAgICAgIHZhciBkaWZmTGlnaHQgPSBuZXcgQW1iaWVudFNITGlnaHQoe1xyXG4gICAgICAgICAgICBpbnRlbnNpdHk6IGRpZmZJbnRlbnNpdHkgIT0gbnVsbCA/IGRpZmZJbnRlbnNpdHkgOiAwLjcsXHJcbiAgICAgICAgICAgIGNvZWZmaWNpZW50czogc2hVdGlsLnByb2plY3RFbnZpcm9ubWVudE1hcChcclxuICAgICAgICAgICAgICAgIHNlbGYucmVuZGVyZXIsIHNwZWNMaWdodC5jdWJlbWFwLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9kOiAxXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9KTtcclxuICAgICAgICBzY2VuZS5hZGQoc3BlY0xpZ2h0KTtcclxuICAgICAgICBzY2VuZS5hZGQoZGlmZkxpZ2h0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc3BlY3VsYXI6IHNwZWNMaWdodCxcclxuICAgICAgICAgICAgZGlmZnVzZTogZGlmZkxpZ2h0LFxyXG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBlbnZpcm9ubWVudCBtYXBcclxuICAgICAgICAgICAgZW52aXJvbm1lbnRNYXA6IGVudlRleHR1cmVcclxuICAgICAgICB9O1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogTG9hZCBhIFtnbFRGXShodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYpIGZvcm1hdCBtb2RlbC5cclxuICogWW91IGNhbiBjb252ZXJ0IEZCWC9EQUUvT0JKIGZvcm1hdCBtb2RlbHMgdG8gW2dsVEZdKGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURikgd2l0aCBbZmJ4MmdsdGZdKGh0dHBzOi8vZ2l0aHViLmNvbS9waXNzYW5nL2NsYXlnbCNmYngtdG8tZ2x0ZjIwLWNvbnZlcnRlcikgcHl0aG9uIHNjcmlwdCxcclxuICogb3Igc2ltcGx5IHVzaW5nIHRoZSBbQ2xheSBWaWV3ZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9waXNzYW5nL2NsYXktdmlld2VyKSBjbGllbnQgYXBwbGljYXRpb24uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcclxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcclxuICogQHBhcmFtIHtzdHJpbmd8Y2xheS5TaGFkZXJ9IFtvcHRzLnNoYWRlcj0nY2xheS5zdGFuZGFyZCddICdiYXNpYyd8J2xhbWJlcnQnfCdzdGFuZGFyZCcuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMud2FpdFRleHR1cmVMb2FkZWQ9ZmFsc2VdIElmIGFkZCB0byBzY2VuZSB1dGlsIHRleHR1cmVzIGFyZSBhbGwgbG9hZGVkLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmF1dG9QbGF5QW5pbWF0aW9uPXRydWVdIElmIGF1dG9wbGF5IHRoZSBhbmltYXRpb24gb2YgbW9kZWwuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMudXBBeGlzPSd5J10gQ2hhbmdlIG1vZGVsIHRvIHkgdXAgaWYgdXBBeGlzIGlzICd6J1xyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnRleHR1cmVGbGlwWT1mYWxzZV1cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy50ZXh0dXJlQ29udmVydFRvUE9UPWZhbHNlXSBJZiBjb252ZXJ0IHRleHR1cmUgdG8gcG93ZXItb2YtdHdvXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy50ZXh0dXJlUm9vdFBhdGhdIFJvb3QgcGF0aCBvZiB0ZXh0dXJlLiBEZWZhdWx0IHRvIGJlIHJlbGF0aXZlIHdpdGggZ2xURiBmaWxlLlxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRoYXQgbW9kZWwgd2lsbCBiZSBtb3VudGVkLiBEZWZhdWx0IHRvIGJlIHNjZW5lXHJcbiAqIEByZXR1cm4ge1Byb21pc2V9XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUubG9hZE1vZGVsID0gZnVuY3Rpb24gKHVybCwgb3B0cywgcGFyZW50Tm9kZSkge1xyXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFVSTC4nKTtcclxuICAgIH1cclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuICAgIGlmIChvcHRzLmF1dG9QbGF5QW5pbWF0aW9uID09IG51bGwpIHtcclxuICAgICAgICBvcHRzLmF1dG9QbGF5QW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBzaGFkZXIgPSBvcHRzLnNoYWRlciB8fCAnY2xheS5zdGFuZGFyZCc7XHJcblxyXG4gICAgdmFyIGxvYWRlck9wdHMgPSB7XHJcbiAgICAgICAgcm9vdE5vZGU6IG5ldyBOb2RlKCksXHJcbiAgICAgICAgc2hhZGVyOiBzaGFkZXIsXHJcbiAgICAgICAgdGV4dHVyZVJvb3RQYXRoOiBvcHRzLnRleHR1cmVSb290UGF0aCxcclxuICAgICAgICBjcm9zc09yaWdpbjogJ0Fub255bW91cycsXHJcbiAgICAgICAgdGV4dHVyZUZsaXBZOiBvcHRzLnRleHR1cmVGbGlwWSxcclxuICAgICAgICB0ZXh0dXJlQ29udmVydFRvUE9UOiBvcHRzLnRleHR1cmVDb252ZXJ0VG9QT1RcclxuICAgIH07XHJcbiAgICBpZiAob3B0cy51cEF4aXMgJiYgb3B0cy51cEF4aXMudG9Mb3dlckNhc2UoKSA9PT0gJ3onKSB7XHJcbiAgICAgICAgbG9hZGVyT3B0cy5yb290Tm9kZS5yb3RhdGlvbi5pZGVudGl0eSgpLnJvdGF0ZVgoLU1hdGguUEkgLyAyKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbG9hZGVyID0gbmV3IEdMVEZMb2FkZXIobG9hZGVyT3B0cyk7XHJcblxyXG4gICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgdGhpcy5zY2VuZTtcclxuICAgIHZhciB0aW1lbGluZSA9IHRoaXMudGltZWxpbmU7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBhZnRlckxvYWQocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLl9kaXNwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwYXJlbnROb2RlLmFkZChyZXN1bHQucm9vdE5vZGUpO1xyXG4gICAgICAgICAgICBpZiAob3B0cy5hdXRvUGxheUFuaW1hdGlvbikge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LmNsaXBzLmZvckVhY2goZnVuY3Rpb24gKGNsaXApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aW1lbGluZS5hZGRDbGlwKGNsaXApO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsb2FkZXIuc3VjY2VzcyhmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLl9kaXNwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIW9wdHMud2FpdFRleHR1cmVMb2FkZWQpIHtcclxuICAgICAgICAgICAgICAgIGFmdGVyTG9hZChyZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwocmVzdWx0LnRleHR1cmVzLm1hcChmdW5jdGlvbiAodGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLnN1Y2Nlc3MocmVzb2x2ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZXJyb3IocmVzb2x2ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSkudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJMb2FkKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJMb2FkKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxvYWRlci5lcnJvcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxvYWRlci5sb2FkKHVybCk7XHJcbiAgICB9KTtcclxufTtcclxuXHJcblxyXG4vLyBUT0RPIGNsb25lTW9kZWxcclxuXHJcbi8qKlxyXG4gKiBTaW1pbGFyIHRvIGBhcHAuc2NlbmUuY2xvbmVOb2RlYCwgZXhjZXB0IGl0IHdpbGwgbW91bnQgdGhlIGNsb25lZCBub2RlIHRvIHRoZSBzY2VuZSBhdXRvbWF0aWNhbGx5LlxyXG4gKiBTZWUgbW9yZSBpbiB7QGxpbmsgY2xheS5TY2VuZSNjbG9uZU5vZGV9XHJcbiAqXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBub2RlXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdGhhdCBuZXcgY2xvbmVkIG5vZGUgd2lsbCBiZSBtb3VudGVkLlxyXG4gKiAgICAgICAgICBEZWZhdWx0IHRvIGhhdmUgc2FtZSBwYXJlbnQgd2l0aCBzb3VyY2Ugbm9kZS5cclxuICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNsb25lTm9kZSA9IGZ1bmN0aW9uIChub2RlLCBwYXJlbnROb2RlKSB7XHJcbiAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZSB8fCBub2RlLmdldFBhcmVudCgpO1xyXG5cclxuICAgIHZhciBuZXdOb2RlID0gdGhpcy5zY2VuZS5jbG9uZU5vZGUobm9kZSwgcGFyZW50Tm9kZSk7XHJcbiAgICBpZiAocGFyZW50Tm9kZSkge1xyXG4gICAgICAgIHBhcmVudE5vZGUuYWRkKG5ld05vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXdOb2RlO1xyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIEFwcDNEOiBBcHAzRCxcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgM0QgYXBwbGljYXRpb24gdGhhdCB3aWxsIG1hbmFnZSB0aGUgYXBwIGluaXRpYWxpemF0aW9uIGFuZCBsb29wLlxyXG4gICAgICpcclxuICAgICAqIFNlZSBtb3JlIGRldGFpbHMgYXQge0BsaW5rIGNsYXkuYXBwbGljYXRpb24uQXBwM0R9XHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5jcmVhdGVcclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8c3RyaW5nfSBkb20gQ29udGFpbmVyIGRvbSBlbGVtZW50IG9yIGEgc2VsZWN0b3Igc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgaW4gYHF1ZXJ5U2VsZWN0b3JgXHJcbiAgICAgKiBAcGFyYW0ge0FwcDNETmFtZXNwYWNlfSBhcHBOUyBPcHRpb25zIGFuZCBuYW1lc3BhY2UgdXNlZCBpbiBjcmVhdGluZyBhcHAzRFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2NsYXkuYXBwbGljYXRpb24uQXBwM0R9XHJcbiAgICAgKlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqICBjbGF5LmFwcGxpY2F0aW9uLmNyZWF0ZSgnI2FwcCcsIHtcclxuICAgICAqICAgICAgaW5pdDogZnVuY3Rpb24gKGFwcCkge1xyXG4gICAgICogICAgICAgICAgYXBwLmNyZWF0ZUN1YmUoKTtcclxuICAgICAqICAgICAgICAgIHZhciBjYW1lcmEgPSBhcHAuY3JlYXRlQ2FtZXJhKCk7XHJcbiAgICAgKiAgICAgICAgICBjYW1lcmEucG9zaXRpb24uc2V0KDAsIDAsIDIpO1xyXG4gICAgICogICAgICB9LFxyXG4gICAgICogICAgICBsb29wOiBmdW5jdGlvbiAoKSB7IC8vIG5vb3AgfVxyXG4gICAgICogIH0pXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZTogZnVuY3Rpb24gKGRvbSwgYXBwTlMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEFwcDNEKGRvbSwgYXBwTlMpO1xyXG4gICAgfVxyXG59OyIsImltcG9ydCBub3RpZmllciBmcm9tICcuLi9jb3JlL21peGluL25vdGlmaWVyJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCB1dGlsICBmcm9tICcuLi9jb3JlL3V0aWwnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hc3luYy5UYXNrXHJcbiAqIEBtaXhlcyBjbGF5LmNvcmUubWl4aW4ubm90aWZpZXJcclxuICovXHJcbmZ1bmN0aW9uIFRhc2soKSB7XHJcbiAgICB0aGlzLl9mdWxsZmlsbGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9yZWplY3RlZCA9IGZhbHNlO1xyXG59O1xyXG4vKipcclxuICogVGFzayBzdWNjZXNzZWRcclxuICogQHBhcmFtIHt9IGRhdGFcclxuICovXHJcblRhc2sucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICB0aGlzLl9mdWxsZmlsbGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuX3JlamVjdGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnRyaWdnZXIoJ3N1Y2Nlc3MnLCBkYXRhKTtcclxufTtcclxuLyoqXHJcbiAqIFRhc2sgZmFpbGVkXHJcbiAqIEBwYXJhbSB7fSBlcnJcclxuICovXHJcblRhc2sucHJvdG90eXBlLnJlamVjdCA9IGZ1bmN0aW9uKGVycikge1xyXG4gICAgdGhpcy5fcmVqZWN0ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5fZnVsbGZpbGxlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsIGVycik7XHJcbn07XHJcbi8qKlxyXG4gKiBJZiB0YXNrIHN1Y2Nlc3NlZFxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKi9cclxuVGFzay5wcm90b3R5cGUuaXNGdWxsZmlsbGVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZnVsbGZpbGxlZDtcclxufTtcclxuLyoqXHJcbiAqIElmIHRhc2sgZmFpbGVkXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAqL1xyXG5UYXNrLnByb3RvdHlwZS5pc1JlamVjdGVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVqZWN0ZWQ7XHJcbn07XHJcbi8qKlxyXG4gKiBJZiB0YXNrIGZpbmlzaGVkLCBlaXRoZXIgc3VjY2Vzc2VkIG9yIGZhaWxlZFxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKi9cclxuVGFzay5wcm90b3R5cGUuaXNTZXR0bGVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZnVsbGZpbGxlZCB8fCB0aGlzLl9yZWplY3RlZDtcclxufTtcclxuXHJcbnV0aWwuZXh0ZW5kKFRhc2sucHJvdG90eXBlLCBub3RpZmllcik7XHJcblxyXG5mdW5jdGlvbiBtYWtlUmVxdWVzdFRhc2sodXJsLCByZXNwb25zZVR5cGUpIHtcclxuICAgIHZhciB0YXNrID0gbmV3IFRhc2soKTtcclxuICAgIHZlbmRvci5yZXF1ZXN0LmdldCh7XHJcbiAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgcmVzcG9uc2VUeXBlOiByZXNwb25zZVR5cGUsXHJcbiAgICAgICAgb25sb2FkOiBmdW5jdGlvbihyZXMpIHtcclxuICAgICAgICAgICAgdGFzay5yZXNvbHZlKHJlcyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvbmVycm9yOiBmdW5jdGlvbihlcnJvcikge1xyXG4gICAgICAgICAgICB0YXNrLnJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGFzaztcclxufVxyXG4vKipcclxuICogTWFrZSBhIHZlbmRvci5yZXF1ZXN0IHRhc2tcclxuICogQHBhcmFtICB7c3RyaW5nfG9iamVjdHxvYmplY3RbXXxzdHJpbmdbXX0gdXJsXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gW3Jlc3BvbnNlVHlwZV1cclxuICogQGV4YW1wbGVcclxuICogICAgIHZhciB0YXNrID0gVGFzay5tYWtlUmVxdWVzdFRhc2soJy4vYS5qc29uJyk7XHJcbiAqICAgICB2YXIgdGFzayA9IFRhc2subWFrZVJlcXVlc3RUYXNrKHtcclxuICogICAgICAgICB1cmw6ICdiLmJpbicsXHJcbiAqICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXHJcbiAqICAgICB9KTtcclxuICogICAgIHZhciB0YXNrcyA9IFRhc2subWFrZVJlcXVlc3RUYXNrKFsnLi9hLmpzb24nLCAnLi9iLmpzb24nXSk7XHJcbiAqICAgICB2YXIgdGFza3MgPSBUYXNrLm1ha2VSZXF1ZXN0VGFzayhbXHJcbiAqICAgICAgICAge3VybDogJ2EuanNvbid9LFxyXG4gKiAgICAgICAgIHt1cmw6ICdiLmJpbicsIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ31cclxuICogICAgIF0pO1xyXG4gKiBAcmV0dXJuIHtjbGF5LmFzeW5jLlRhc2t8Y2xheS5hc3luYy5UYXNrW119XHJcbiAqL1xyXG5UYXNrLm1ha2VSZXF1ZXN0VGFzayA9IGZ1bmN0aW9uKHVybCwgcmVzcG9uc2VUeXBlKSB7XHJcbiAgICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gbWFrZVJlcXVlc3RUYXNrKHVybCwgcmVzcG9uc2VUeXBlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHVybC51cmwpIHsgICAvLyAgQ29uZmlndXJlIG9iamVjdFxyXG4gICAgICAgIHZhciBvYmogPSB1cmw7XHJcbiAgICAgICAgcmV0dXJuIG1ha2VSZXF1ZXN0VGFzayhvYmoudXJsLCBvYmoucmVzcG9uc2VUeXBlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodXJsKSkgeyAgLy8gVXJsIGxpc3RcclxuICAgICAgICB2YXIgdXJsTGlzdCA9IHVybDtcclxuICAgICAgICB2YXIgdGFza3MgPSBbXTtcclxuICAgICAgICB1cmxMaXN0LmZvckVhY2goZnVuY3Rpb24ob2JqKSB7XHJcbiAgICAgICAgICAgIHZhciB1cmwsIHJlc3BvbnNlVHlwZTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICB1cmwgPSBvYmo7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoT2JqZWN0KG9iaikgPT09IG9iaikge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gb2JqLnVybDtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZSA9IG9iai5yZXNwb25zZVR5cGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGFza3MucHVzaChtYWtlUmVxdWVzdFRhc2sodXJsLCByZXNwb25zZVR5cGUpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGFza3M7XHJcbiAgICB9XHJcbn07XHJcbi8qKlxyXG4gKiBAcmV0dXJuIHtjbGF5LmFzeW5jLlRhc2t9XHJcbiAqL1xyXG5UYXNrLm1ha2VUYXNrID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gbmV3IFRhc2soKTtcclxufTtcclxuXHJcbnV0aWwuZXh0ZW5kKFRhc2sucHJvdG90eXBlLCBub3RpZmllcik7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUYXNrO1xyXG4iLCJpbXBvcnQgdXRpbCBmcm9tICcuLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgVGFzayBmcm9tICcuL1Rhc2snO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hc3luYy5UYXNrR3JvdXBcclxuICogQGV4dGVuZHMgY2xheS5hc3luYy5UYXNrXHJcbiAqL1xyXG52YXIgVGFza0dyb3VwID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIFRhc2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuXHJcbiAgICB0aGlzLl90YXNrcyA9IFtdO1xyXG5cclxuICAgIHRoaXMuX2Z1bGZpbGxlZE51bWJlciA9IDA7XHJcblxyXG4gICAgdGhpcy5fcmVqZWN0ZWROdW1iZXIgPSAwO1xyXG59O1xyXG5cclxudmFyIEN0b3IgPSBmdW5jdGlvbiAoKXt9O1xyXG5DdG9yLnByb3RvdHlwZSA9IFRhc2sucHJvdG90eXBlO1xyXG5UYXNrR3JvdXAucHJvdG90eXBlID0gbmV3IEN0b3IoKTtcclxuXHJcblRhc2tHcm91cC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUYXNrR3JvdXA7XHJcblxyXG4vKipcclxuICogV2FpdCBmb3IgYWxsIGdpdmVuIHRhc2tzIHN1Y2Nlc3NlZCwgdGFzayBjYW4gYWxzbyBiZSBhbnkgbm90aWZpZXIgb2JqZWN0IHdoaWNoIHdpbGwgdHJpZ2dlciBzdWNjZXNzIGFuZCBlcnJvciBldmVudHMuIExpa2Uge0BsaW5rIGNsYXkuVGV4dHVyZTJEfSwge0BsaW5rIGNsYXkuVGV4dHVyZUN1YmV9LCB7QGxpbmsgY2xheS5sb2FkZXIuR0xURn0uXHJcbiAqIEBwYXJhbSAge0FycmF5LjxjbGF5LmFzeW5jLlRhc2s+fSB0YXNrc1xyXG4gKiBAY2hhaW5hYmxlXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICAvLyBMb2FkIHRleHR1cmUgbGlzdFxyXG4gKiAgICAgdmFyIGxpc3QgPSBbJ2EuanBnJywgJ2IuanBnJywgJ2MuanBnJ11cclxuICogICAgIHZhciB0ZXh0dXJlcyA9IGxpc3QubWFwKGZ1bmN0aW9uIChzcmMpIHtcclxuICogICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBjbGF5LlRleHR1cmUyRCgpO1xyXG4gKiAgICAgICAgIHRleHR1cmUubG9hZChzcmMpO1xyXG4gKiAgICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgdGFza0dyb3VwID0gbmV3IGNsYXkuYXN5bmMuVGFza0dyb3VwKCk7XHJcbiAqICAgICB0YXNrR3JvdXAuYWxsKHRleHR1cmVzKS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICogICAgICAgICAvLyBEbyBzb21lIHRoaW5nIGFmdGVyIGFsbCB0ZXh0dXJlcyBsb2FkZWRcclxuICogICAgIH0pO1xyXG4gKi9cclxuVGFza0dyb3VwLnByb3RvdHlwZS5hbGwgPSBmdW5jdGlvbiAodGFza3MpIHtcclxuICAgIHZhciBjb3VudCA9IDA7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICB2YXIgZGF0YSA9IFtdO1xyXG4gICAgdGhpcy5fdGFza3MgPSB0YXNrcztcclxuICAgIHRoaXMuX2Z1bGZpbGxlZE51bWJlciA9IDA7XHJcbiAgICB0aGlzLl9yZWplY3RlZE51bWJlciA9IDA7XHJcblxyXG4gICAgdXRpbC5lYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaywgaWR4KSB7XHJcbiAgICAgICAgaWYgKCF0YXNrIHx8ICF0YXNrLm9uY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgIHRhc2sub25jZSgnc3VjY2VzcycsIGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgY291bnQtLTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuX2Z1bGZpbGxlZE51bWJlcisrO1xyXG4gICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICAgIC8vIFNvbWUgdGFza3MgbGlrZSB0ZXh0dXJlLCBsb2FkZXIgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSB0YXNrXHJcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBzdGF0ZXMgaGVyZVxyXG4gICAgICAgICAgICB0YXNrLl9mdWxmaWxsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0YXNrLl9yZWplY3RlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgZGF0YVtpZHhdID0gcmVzO1xyXG4gICAgICAgICAgICBpZiAoY291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRhc2sub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICBzZWxmLl9yZWplY3RlZE51bWJlciArKztcclxuXHJcbiAgICAgICAgICAgIHRhc2suX2Z1bGZpbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0YXNrLl9yZWplY3RlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBzZWxmLnJlamVjdCh0YXNrKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgaWYgKGNvdW50ID09PSAwKSB7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHNlbGYucmVzb2x2ZShkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG4vKipcclxuICogV2FpdCBmb3IgYWxsIGdpdmVuIHRhc2tzIGZpbmlzaGVkLCBlaXRoZXIgc3VjY2Vzc2VkIG9yIGZhaWxlZFxyXG4gKiBAcGFyYW0gIHtBcnJheS48Y2xheS5hc3luYy5UYXNrPn0gdGFza3NcclxuICogQHJldHVybiB7Y2xheS5hc3luYy5UYXNrR3JvdXB9XHJcbiAqL1xyXG5UYXNrR3JvdXAucHJvdG90eXBlLmFsbFNldHRsZWQgPSBmdW5jdGlvbiAodGFza3MpIHtcclxuICAgIHZhciBjb3VudCA9IDA7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICB2YXIgZGF0YSA9IFtdO1xyXG4gICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3N1Y2Nlc3MnLCBkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHRoaXMuX3Rhc2tzID0gdGFza3M7XHJcblxyXG4gICAgdXRpbC5lYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaywgaWR4KSB7XHJcbiAgICAgICAgaWYgKCF0YXNrIHx8ICF0YXNrLm9uY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgIHRhc2sub25jZSgnc3VjY2VzcycsIGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgY291bnQtLTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuX2Z1bGZpbGxlZE51bWJlcisrO1xyXG5cclxuICAgICAgICAgICAgdGFzay5fZnVsZmlsbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGRhdGFbaWR4XSA9IHJlcztcclxuICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0YXNrLm9uY2UoJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICBjb3VudC0tO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5fcmVqZWN0ZWROdW1iZXIrKztcclxuXHJcbiAgICAgICAgICAgIHRhc2suX2Z1bGZpbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0YXNrLl9yZWplY3RlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICAgIGRhdGFbaWR4XSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG4vKipcclxuICogR2V0IHN1Y2Nlc3NlZCBzdWIgdGFza3MgbnVtYmVyLCByZWN1cnNpdmUgY2FuIGJlIHRydWUgaWYgc3ViIHRhc2sgaXMgYWxzbyBhIFRhc2tHcm91cC5cclxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3JlY3Vyc2l2ZV1cclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVGFza0dyb3VwLnByb3RvdHlwZS5nZXRGdWxmaWxsZWROdW1iZXIgPSBmdW5jdGlvbiAocmVjdXJzaXZlKSB7XHJcbiAgICBpZiAocmVjdXJzaXZlKSB7XHJcbiAgICAgICAgdmFyIG5GdWxmaWxsZWQgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGFza3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRhc2sgaW5zdGFuY2VvZiBUYXNrR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIG5GdWxmaWxsZWQgKz0gdGFzay5nZXRGdWxmaWxsZWROdW1iZXIocmVjdXJzaXZlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKHRhc2suX2Z1bGZpbGxlZCkge1xyXG4gICAgICAgICAgICAgICAgbkZ1bGZpbGxlZCArPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuRnVsZmlsbGVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZnVsZmlsbGVkTnVtYmVyO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBmYWlsZWQgc3ViIHRhc2tzIG51bWJlciwgcmVjdXJzaXZlIGNhbiBiZSB0cnVlIGlmIHN1YiB0YXNrIGlzIGFsc28gYSBUYXNrR3JvdXAuXHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFtyZWN1cnNpdmVdXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblRhc2tHcm91cC5wcm90b3R5cGUuZ2V0UmVqZWN0ZWROdW1iZXIgPSBmdW5jdGlvbiAocmVjdXJzaXZlKSB7XHJcbiAgICBpZiAocmVjdXJzaXZlKSB7XHJcbiAgICAgICAgdmFyIG5SZWplY3RlZCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFzayA9IHRoaXMuX3Rhc2tzW2ldO1xyXG4gICAgICAgICAgICBpZiAodGFzayBpbnN0YW5jZW9mIFRhc2tHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgblJlamVjdGVkICs9IHRhc2suZ2V0UmVqZWN0ZWROdW1iZXIocmVjdXJzaXZlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKHRhc2suX3JlamVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBuUmVqZWN0ZWQgKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gblJlamVjdGVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVqZWN0ZWROdW1iZXI7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IGZpbmlzaGVkIHN1YiB0YXNrcyBudW1iZXIsIHJlY3Vyc2l2ZSBjYW4gYmUgdHJ1ZSBpZiBzdWIgdGFzayBpcyBhbHNvIGEgVGFza0dyb3VwLlxyXG4gKiBAcGFyYW0gIHtib29sZWFufSBbcmVjdXJzaXZlXVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5UYXNrR3JvdXAucHJvdG90eXBlLmdldFNldHRsZWROdW1iZXIgPSBmdW5jdGlvbiAocmVjdXJzaXZlKSB7XHJcblxyXG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xyXG4gICAgICAgIHZhciBuU2V0dGxlZCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFzayA9IHRoaXMuX3Rhc2tzW2ldO1xyXG4gICAgICAgICAgICBpZiAodGFzayBpbnN0YW5jZW9mIFRhc2tHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgblNldHRsZWQgKz0gdGFzay5nZXRTZXR0bGVkTnVtYmVyKHJlY3Vyc2l2ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZih0YXNrLl9yZWplY3RlZCB8fCB0YXNrLl9mdWxmaWxsZWQpIHtcclxuICAgICAgICAgICAgICAgIG5TZXR0bGVkICs9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5TZXR0bGVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZnVsZmlsbGVkTnVtYmVyICsgdGhpcy5fcmVqZWN0ZWROdW1iZXI7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IGFsbCBzdWIgdGFza3MgbnVtYmVyLCByZWN1cnNpdmUgY2FuIGJlIHRydWUgaWYgc3ViIHRhc2sgaXMgYWxzbyBhIFRhc2tHcm91cC5cclxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3JlY3Vyc2l2ZV1cclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVGFza0dyb3VwLnByb3RvdHlwZS5nZXRUYXNrTnVtYmVyID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xyXG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xyXG4gICAgICAgIHZhciBuVGFzayA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFzayA9IHRoaXMuX3Rhc2tzW2ldO1xyXG4gICAgICAgICAgICBpZiAodGFzayBpbnN0YW5jZW9mIFRhc2tHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgblRhc2sgKz0gdGFzay5nZXRUYXNrTnVtYmVyKHJlY3Vyc2l2ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuVGFzayArPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuVGFzaztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rhc2tzLmxlbmd0aDtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRhc2tHcm91cDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuXHJcbi8vIFBFTkRJTkdcclxuLy8gVXNlIHRvcG9sb2dpY2FsIHNvcnQgP1xyXG5cclxuLyoqXHJcbiAqIE5vZGUgb2YgZ3JhcGggYmFzZWQgcG9zdCBwcm9jZXNzaW5nLlxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqXHJcbiAqL1xyXG52YXIgQ29tcG9zaXRvck5vZGUgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvck5vZGUjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG5hbWU6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnB1dCBsaW5rcywgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBncmFwaFxyXG4gICAgICAgICAqIEBleGFtcGxlOlxyXG4gICAgICAgICAqICAgICBpbnB1dE5hbWU6IHtcclxuICAgICAgICAgKiAgICAgICAgIG5vZGU6IHNvbWVOb2RlLFxyXG4gICAgICAgICAqICAgICAgICAgcGluOiAneHh4eCdcclxuICAgICAgICAgKiAgICAgfVxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5wdXRMaW5rczoge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE91dHB1dCBsaW5rcywgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBncmFwaFxyXG4gICAgICAgICAqIEBleGFtcGxlOlxyXG4gICAgICAgICAqICAgICBvdXRwdXROYW1lOiB7XHJcbiAgICAgICAgICogICAgICAgICBub2RlOiBzb21lTm9kZSxcclxuICAgICAgICAgKiAgICAgICAgIHBpbjogJ3h4eHgnXHJcbiAgICAgICAgICogICAgIH1cclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG91dHB1dExpbmtzOiB7fSxcclxuXHJcbiAgICAgICAgLy8gU2F2ZSB0aGUgb3V0cHV0IHRleHR1cmUgb2YgcHJldmlvdXMgZnJhbWVcclxuICAgICAgICAvLyBXaWxsIGJlIHVzZWQgd2hlbiB0aGVyZSBleGlzdCBhIGNpcmN1bGFyIHJlZmVyZW5jZVxyXG4gICAgICAgIF9wcmV2T3V0cHV0VGV4dHVyZXM6IHt9LFxyXG4gICAgICAgIF9vdXRwdXRUZXh0dXJlczoge30sXHJcblxyXG4gICAgICAgIC8vIEV4YW1wbGU6IHsgbmFtZTogMiB9XHJcbiAgICAgICAgX291dHB1dFJlZmVyZW5jZXM6IHt9LFxyXG5cclxuICAgICAgICBfcmVuZGVyaW5nOiBmYWxzZSxcclxuICAgICAgICAvLyBJZiByZW5kZXJlZCBpbiB0aGlzIGZyYW1lXHJcbiAgICAgICAgX3JlbmRlcmVkOiBmYWxzZSxcclxuXHJcbiAgICAgICAgX2NvbXBvc2l0b3I6IG51bGxcclxuICAgIH07XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgLy8gVE9ETyBSZW1vdmUgcGFyYW1ldGVyIGZ1bmN0aW9uIGNhbGxiYWNrXHJcbiAgICB1cGRhdGVQYXJhbWV0ZXI6IGZ1bmN0aW9uIChvdXRwdXROYW1lLCByZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW291dHB1dE5hbWVdO1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzID0gb3V0cHV0SW5mby5wYXJhbWV0ZXJzO1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzQ29weSA9IG91dHB1dEluZm8uX3BhcmFtZXRlcnNDb3B5O1xyXG4gICAgICAgIGlmICghcGFyYW1ldGVyc0NvcHkpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHkgPSBvdXRwdXRJbmZvLl9wYXJhbWV0ZXJzQ29weSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3dpZHRoJyAmJiBrZXkgIT09ICdoZWlnaHQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHlba2V5XSA9IHBhcmFtZXRlcnNba2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgd2lkdGgsIGhlaWdodDtcclxuICAgICAgICBpZiAocGFyYW1ldGVycy53aWR0aCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gcGFyYW1ldGVycy53aWR0aC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gcGFyYW1ldGVycy53aWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMuaGVpZ2h0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gcGFyYW1ldGVycy5oZWlnaHQuY2FsbCh0aGlzLCByZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBwYXJhbWV0ZXJzLmhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBwYXJhbWV0ZXJzQ29weS53aWR0aCAhPT0gd2lkdGhcclxuICAgICAgICAgICAgfHwgcGFyYW1ldGVyc0NvcHkuaGVpZ2h0ICE9PSBoZWlnaHRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX291dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXS5kaXNwb3NlKHJlbmRlcmVyLmdsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwYXJhbWV0ZXJzQ29weS53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHBhcmFtZXRlcnNDb3B5LmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnNDb3B5O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBwYXJhbWV0ZXJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge30gdmFsdWVcclxuICAgICAqL1xyXG4gICAgc2V0UGFyYW1ldGVyOiBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHt9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcGFyYW1ldGVyIHZhbHVlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge31cclxuICAgICAqL1xyXG4gICAgZ2V0UGFyYW1ldGVyOiBmdW5jdGlvbiAobmFtZSkge30sXHJcbiAgICAvKipcclxuICAgICAqIFNldCBwYXJhbWV0ZXJzXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqXHJcbiAgICAgKi9cclxuICAgIHNldFBhcmFtZXRlcnM6IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9iaikge1xyXG4gICAgICAgICAgICB0aGlzLnNldFBhcmFtZXRlcihuYW1lLCBvYmpbbmFtZV0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7fSxcclxuXHJcbiAgICBnZXRPdXRwdXQ6IGZ1bmN0aW9uIChyZW5kZXJlciAvKm9wdGlvbmFsKi8sIG5hbWUpIHtcclxuICAgICAgICBpZiAobmFtZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIFJldHVybiB0aGUgb3V0cHV0IHRleHR1cmUgd2l0aG91dCByZW5kZXJpbmdcclxuICAgICAgICAgICAgbmFtZSA9IHJlbmRlcmVyO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW25hbWVdO1xyXG4gICAgICAgIGlmICghb3V0cHV0SW5mbykge1xyXG4gICAgICAgICAgICByZXR1cm4gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQWxyZWFkeSBiZWVuIHJlbmRlcmVkIGluIHRoaXMgZnJhbWVcclxuICAgICAgICBpZiAodGhpcy5fcmVuZGVyZWQpIHtcclxuICAgICAgICAgICAgLy8gRm9yY2UgcmV0dXJuIHRleHR1cmUgaW4gbGFzdCBmcmFtZVxyXG4gICAgICAgICAgICBpZiAob3V0cHV0SW5mby5vdXRwdXRMYXN0RnJhbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIC8vIFRPRE9cclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyaW5nICAgLy8gU29sdmUgQ2lyY3VsYXIgUmVmZXJlbmNlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBibGFuayB0ZXh0dXJlIGF0IGZpcnN0IHBhc3NcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tuYW1lXSA9IHRoaXMuX2NvbXBvc2l0b3IuYWxsb2NhdGVUZXh0dXJlKG91dHB1dEluZm8ucGFyYW1ldGVycyB8fCB7fSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tuYW1lXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW1vdmVSZWZlcmVuY2U6IGZ1bmN0aW9uIChvdXRwdXROYW1lKSB7XHJcbiAgICAgICAgdGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXS0tO1xyXG4gICAgICAgIGlmICh0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW291dHB1dE5hbWVdID09PSAwKSB7XHJcbiAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW291dHB1dE5hbWVdO1xyXG4gICAgICAgICAgICBpZiAob3V0cHV0SW5mby5rZWVwTGFzdEZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdID0gdGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBPdXRwdXQgb2YgdGhpcyBub2RlIGhhdmUgYWxyZWF5IGJlZW4gdXNlZCBieSBhbGwgb3RoZXIgbm9kZXNcclxuICAgICAgICAgICAgICAgIC8vIFB1dCB0aGUgdGV4dHVyZSBiYWNrIHRvIHRoZSBwb29sLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGxpbms6IGZ1bmN0aW9uIChpbnB1dFBpbk5hbWUsIGZyb21Ob2RlLCBmcm9tUGluTmFtZSkge1xyXG5cclxuICAgICAgICAvLyBUaGUgcmVsYXRpb25zaGlwIGZyb20gb3V0cHV0IHBpbiB0byBpbnB1dCBwaW4gaXMgb25lLW9uLW11bHRpcGxlXHJcbiAgICAgICAgdGhpcy5pbnB1dExpbmtzW2lucHV0UGluTmFtZV0gPSB7XHJcbiAgICAgICAgICAgIG5vZGU6IGZyb21Ob2RlLFxyXG4gICAgICAgICAgICBwaW46IGZyb21QaW5OYW1lXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoIWZyb21Ob2RlLm91dHB1dExpbmtzW2Zyb21QaW5OYW1lXSkge1xyXG4gICAgICAgICAgICBmcm9tTm9kZS5vdXRwdXRMaW5rc1tmcm9tUGluTmFtZV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnJvbU5vZGUub3V0cHV0TGlua3NbZnJvbVBpbk5hbWVdLnB1c2goe1xyXG4gICAgICAgICAgICBub2RlOiB0aGlzLFxyXG4gICAgICAgICAgICBwaW46IGlucHV0UGluTmFtZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBFbmFibGVkIHRoZSBwaW4gdGV4dHVyZSBpbiBzaGFkZXJcclxuICAgICAgICB0aGlzLnBhc3MubWF0ZXJpYWwuZW5hYmxlVGV4dHVyZShpbnB1dFBpbk5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRMaW5rcyA9IHt9O1xyXG4gICAgICAgIHRoaXMub3V0cHV0TGlua3MgPSB7fTtcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlUmVmZXJlbmNlOiBmdW5jdGlvbiAob3V0cHV0TmFtZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5fcmVuZGVyaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGlucHV0TmFtZSBpbiB0aGlzLmlucHV0TGlua3MpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsaW5rID0gdGhpcy5pbnB1dExpbmtzW2lucHV0TmFtZV07XHJcbiAgICAgICAgICAgICAgICBsaW5rLm5vZGUudXBkYXRlUmVmZXJlbmNlKGxpbmsucGluKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG91dHB1dE5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXSArKztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGJlZm9yZUZyYW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm91dHB1dExpbmtzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dFJlZmVyZW5jZXNbbmFtZV0gPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYWZ0ZXJGcmFtZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIFB1dCBiYWNrIGFsbCB0aGUgdGV4dHVyZXMgdG8gcG9vbFxyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5vdXRwdXRMaW5rcykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tuYW1lXSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ua2VlcExhc3RGcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV0gPSB0aGlzLl9vdXRwdXRUZXh0dXJlc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbXBvc2l0b3JOb2RlO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgR3JhcGhOb2RlIGZyb20gJy4vQ29tcG9zaXRvck5vZGUnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNvbXBvc2l0b3IuR3JhcGhcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBHcmFwaCA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5HcmFwaCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48Y2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlPn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBub2RlczogW11cclxuICAgIH07XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkdyYXBoLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIHRvIHVwZGF0ZVxyXG4gICAgICovXHJcbiAgICBkaXJ0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7Y2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlfSBub2RlXHJcbiAgICAgKi9cclxuICAgIGFkZE5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm5vZGVzLmluZGV4T2Yobm9kZSkgPj0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm5vZGVzLnB1c2gobm9kZSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZXxzdHJpbmd9IG5vZGVcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlTm9kZTogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIG5vZGUgPSB0aGlzLmdldE5vZGVCeU5hbWUobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpZHggPSB0aGlzLm5vZGVzLmluZGV4T2Yobm9kZSk7XHJcbiAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZXMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlfVxyXG4gICAgICovXHJcbiAgICBnZXROb2RlQnlOYW1lOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ub2Rlc1tpXS5uYW1lID09PSBuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ub2Rlc1tpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBsaW5rcyBvZiBncmFwaFxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5ub2Rlc1tpXS5jbGVhcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUcmF2ZXJzZSBhbGwgdGhlIG5vZGVzIGFuZCBidWlsZCB0aGUgZ3JhcGhcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLm5vZGVzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFub2RlLmlucHV0cykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yICh2YXIgaW5wdXROYW1lIGluIG5vZGUuaW5wdXRzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGUuaW5wdXRzW2lucHV0TmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChub2RlLnBhc3MgJiYgIW5vZGUucGFzcy5tYXRlcmlhbC5pc1VuaWZvcm1FbmFibGVkKGlucHV0TmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpbiAnICArIG5vZGUubmFtZSArICcuJyArIGlucHV0TmFtZSArICcgbm90IHVzZWQuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgZnJvbVBpbkluZm8gPSBub2RlLmlucHV0c1tpbnB1dE5hbWVdO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBmcm9tUGluID0gdGhpcy5maW5kUGluKGZyb21QaW5JbmZvKTtcclxuICAgICAgICAgICAgICAgIGlmIChmcm9tUGluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5saW5rKGlucHV0TmFtZSwgZnJvbVBpbi5ub2RlLCBmcm9tUGluLnBpbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZyb21QaW5JbmZvID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ05vZGUgJyArIGZyb21QaW5JbmZvICsgJyBub3QgZXhpc3QnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUGluIG9mICcgKyBmcm9tUGluSW5mby5ub2RlICsgJy4nICsgZnJvbVBpbkluZm8ucGluICsgJyBub3QgZXhpc3QnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmRQaW46IGZ1bmN0aW9uIChpbnB1dCkge1xyXG4gICAgICAgIHZhciBub2RlO1xyXG4gICAgICAgIC8vIFRyeSB0byB0YWtlIGlucHV0IGFzIGEgZGlyZWN0bHkgYSBub2RlXHJcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgfHwgaW5wdXQgaW5zdGFuY2VvZiBHcmFwaE5vZGUpIHtcclxuICAgICAgICAgICAgaW5wdXQgPSB7XHJcbiAgICAgICAgICAgICAgICBub2RlOiBpbnB1dFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dC5ub2RlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB0bXAgPSB0aGlzLm5vZGVzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRtcC5uYW1lID09PSBpbnB1dC5ub2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHRtcDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbm9kZSA9IGlucHV0Lm5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlKSB7XHJcbiAgICAgICAgICAgIHZhciBpbnB1dFBpbiA9IGlucHV0LnBpbjtcclxuICAgICAgICAgICAgaWYgKCFpbnB1dFBpbikge1xyXG4gICAgICAgICAgICAgICAgLy8gVXNlIGZpcnN0IHBpbiBkZWZhdWx0bHlcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFBpbiA9IE9iamVjdC5rZXlzKG5vZGUub3V0cHV0cylbMF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5vZGUub3V0cHV0c1tpbnB1dFBpbl0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBwaW46IGlucHV0UGluXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdyYXBoO1xyXG4iLCJpbXBvcnQgR3JhcGggZnJvbSAnLi9HcmFwaCc7XHJcbmltcG9ydCBUZXh0dXJlUG9vbCBmcm9tICcuL1RleHR1cmVQb29sJztcclxuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcclxuXHJcbi8qKlxyXG4gKiBDb21wb3NpdG9yIHByb3ZpZGUgZ3JhcGggYmFzZWQgcG9zdCBwcm9jZXNzaW5nXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvbXBvc2l0b3IuR3JhcGhcclxuICpcclxuICovXHJcbnZhciBDb21wb3NpdG9yID0gR3JhcGguZXh0ZW5kKGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAvLyBPdXRwdXQgbm9kZVxyXG4gICAgICAgIF9vdXRwdXRzOiBbXSxcclxuXHJcbiAgICAgICAgX3RleHR1cmVQb29sOiBuZXcgVGV4dHVyZVBvb2woKSxcclxuXHJcbiAgICAgICAgX2ZyYW1lQnVmZmVyOiBuZXcgRnJhbWVCdWZmZXIoe1xyXG4gICAgICAgICAgICBkZXB0aEJ1ZmZlcjogZmFsc2VcclxuICAgICAgICB9KVxyXG4gICAgfTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvci5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgYWRkTm9kZTogZnVuY3Rpb24obm9kZSkge1xyXG4gICAgICAgIEdyYXBoLnByb3RvdHlwZS5hZGROb2RlLmNhbGwodGhpcywgbm9kZSk7XHJcbiAgICAgICAgbm9kZS5fY29tcG9zaXRvciA9IHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgIGlmICh0aGlzLl9kaXJ0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0cy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5ub2Rlc1tpXS5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0cy5wdXNoKHRoaXMubm9kZXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSByZWZlcmVuY2UgbnVtYmVyIG9mIGVhY2ggb3V0cHV0IHRleHR1cmVcclxuICAgICAgICAgICAgdGhpcy5ub2Rlc1tpXS5iZWZvcmVGcmFtZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vdXRwdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHNbaV0udXBkYXRlUmVmZXJlbmNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX291dHB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0c1tpXS5yZW5kZXIocmVuZGVyZXIsIGZyYW1lQnVmZmVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAvLyBDbGVhciB1cFxyXG4gICAgICAgICAgICB0aGlzLm5vZGVzW2ldLmFmdGVyRnJhbWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFsbG9jYXRlVGV4dHVyZTogZnVuY3Rpb24gKHBhcmFtZXRlcnMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZVBvb2wuZ2V0KHBhcmFtZXRlcnMpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZWxlYXNlVGV4dHVyZTogZnVuY3Rpb24gKHBhcmFtZXRlcnMpIHtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlUG9vbC5wdXQocGFyYW1ldGVycyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEZyYW1lQnVmZmVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lQnVmZmVyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgY29tcG9zaXRvclxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlUG9vbC5jbGVhcihyZW5kZXJlcik7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ29tcG9zaXRvcjtcclxuIiwiaW1wb3J0IENvbXBvc2l0b3JOb2RlIGZyb20gJy4vQ29tcG9zaXRvck5vZGUnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLlNjZW5lTm9kZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvck5vZGVcclxuICovXHJcbnZhciBTY2VuZU5vZGUgPSBDb21wb3NpdG9yTm9kZS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLlNjZW5lTm9kZSMgKi9cclxue1xyXG4gICAgbmFtZTogJ3NjZW5lJyxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuU2NlbmV9XHJcbiAgICAgKi9cclxuICAgIHNjZW5lOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5DYW1lcmF9XHJcbiAgICAgKi9cclxuICAgIGNhbWVyYTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGF1dG9VcGRhdGVTY2VuZTogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIHByZVo6IGZhbHNlXHJcblxyXG59LCBmdW5jdGlvbigpIHtcclxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcclxufSwge1xyXG4gICAgcmVuZGVyOiBmdW5jdGlvbihyZW5kZXJlcikge1xyXG5cclxuICAgICAgICB0aGlzLl9yZW5kZXJpbmcgPSB0cnVlO1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXInKTtcclxuXHJcbiAgICAgICAgdmFyIHJlbmRlckluZm87XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5vdXRwdXRzKSB7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJJbmZvID0gcmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsIHRoaXMuY2FtZXJhLCAhdGhpcy5hdXRvVXBkYXRlU2NlbmUsIHRoaXMucHJlWik7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBmcmFtZUJ1ZmZlciA9IHRoaXMuZnJhbWVCdWZmZXI7XHJcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHRoaXMudXBkYXRlUGFyYW1ldGVyKG5hbWUsIHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9jb21wb3NpdG9yLmFsbG9jYXRlVGV4dHVyZShwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdID0gdGV4dHVyZTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0YWNobWVudCA9IG91dHB1dEluZm8uYXR0YWNobWVudCB8fCBfZ2wuQ09MT1JfQVRUQUNITUVOVDA7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKGF0dGFjaG1lbnQpID09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9IF9nbFthdHRhY2htZW50XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaCh0ZXh0dXJlLCBhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIC8vIE1SVCBTdXBwb3J0IGluIGNocm9tZVxyXG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9zZGsvdGVzdHMvY29uZm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZHJhdy1idWZmZXJzLmh0bWxcclxuICAgICAgICAgICAgdmFyIGV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfZHJhd19idWZmZXJzJyk7XHJcbiAgICAgICAgICAgIGlmIChleHQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBidWZzID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMub3V0cHV0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQgPSBwYXJzZUludChhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBfZ2wuQ09MT1JfQVRUQUNITUVOVDAgJiYgYXR0YWNobWVudCA8PSBfZ2wuQ09MT1JfQVRUQUNITUVOVDAgKyA4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZnMucHVzaChhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBleHQuZHJhd0J1ZmZlcnNFWFQoYnVmcyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEFsd2F5cyBjbGVhclxyXG4gICAgICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNhdmVDbGVhcigpO1xyXG4gICAgICAgICAgICByZW5kZXJlci5jbGVhckJpdCA9IGdsZW51bS5ERVBUSF9CVUZGRVJfQklUIHwgZ2xlbnVtLkNPTE9SX0JVRkZFUl9CSVQ7XHJcbiAgICAgICAgICAgIHJlbmRlckluZm8gPSByZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSwgdGhpcy5jYW1lcmEsICF0aGlzLmF1dG9VcGRhdGVTY2VuZSwgdGhpcy5wcmVaKTtcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVzdG9yZUNsZWFyKCk7XHJcblxyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdhZnRlcnJlbmRlcicsIHJlbmRlckluZm8pO1xyXG5cclxuICAgICAgICB0aGlzLl9yZW5kZXJpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9yZW5kZXJlZCA9IHRydWU7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2NlbmVOb2RlO1xyXG4iLCJpbXBvcnQgQ29tcG9zaXRvck5vZGUgZnJvbSAnLi9Db21wb3NpdG9yTm9kZSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5UZXh0dXJlTm9kZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvck5vZGVcclxuICovXHJcbnZhciBUZXh0dXJlTm9kZSA9IENvbXBvc2l0b3JOb2RlLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5UZXh0dXJlTm9kZSMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0ZXh0dXJlOiBudWxsLFxyXG5cclxuICAgICAgICAvLyBUZXh0dXJlIG5vZGUgbXVzdCBoYXZlIG91dHB1dCB3aXRob3V0IHBhcmFtZXRlcnNcclxuICAgICAgICBvdXRwdXRzOiB7XHJcbiAgICAgICAgICAgIGNvbG9yOiB7fVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxufSwge1xyXG5cclxuICAgIGdldE91dHB1dDogZnVuY3Rpb24gKHJlbmRlcmVyLCBuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gRG8gbm90aGluZ1xyXG4gICAgYmVmb3JlRnJhbWU6IGZ1bmN0aW9uICgpIHt9LFxyXG4gICAgYWZ0ZXJGcmFtZTogZnVuY3Rpb24gKCkge31cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlTm9kZTtcclxuIiwiLy8gVE9ETyBTaGFkZXIgbGlicmFyeVxyXG5pbXBvcnQgUGFzcyBmcm9tICcuL1Bhc3MnO1xyXG5pbXBvcnQgQ29tcG9zaXRvck5vZGUgZnJvbSAnLi9Db21wb3NpdG9yTm9kZSc7XHJcblxyXG4vLyBUT0RPIGN1cmxub2lzZSBkZW1vIHdyb25nXHJcblxyXG4vLyBQRU5ESU5HXHJcbi8vIFVzZSB0b3BvbG9naWNhbCBzb3J0ID9cclxuXHJcbi8qKlxyXG4gKiBGaWx0ZXIgbm9kZVxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLkZpbHRlck5vZGVcclxuICogQGV4dGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgICB2YXIgbm9kZSA9IG5ldyBjbGF5LmNvbXBvc2l0b3IuRmlsdGVyTm9kZSh7XHJcbiAgICAgICAgbmFtZTogJ2Z4YWEnLFxyXG4gICAgICAgIHNoYWRlcjogY2xheS5TaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IuZnhhYScpLFxyXG4gICAgICAgIGlucHV0czoge1xyXG4gICAgICAgICAgICB0ZXh0dXJlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogJ3NjZW5lJyxcclxuICAgICAgICAgICAgICAgICAgICBwaW46ICdjb2xvcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gTXVsdGlwbGUgb3V0cHV0cyBpcyBwcmVzZXJ2ZWQgZm9yIE1SVCBzdXBwb3J0IGluIFdlYkdMMi4wXHJcbiAgICAgICAgb3V0cHV0czoge1xyXG4gICAgICAgICAgICBjb2xvcjoge1xyXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudDogY2xheS5GcmFtZUJ1ZmZlci5DT0xPUl9BVFRBQ0hNRU5UMFxyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogY2xheS5UZXh0dXJlLlJHQkEsXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDUxMixcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDUxMlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8vIE5vZGUgd2lsbCBrZWVwIHRoZSBSVFQgcmVuZGVyZWQgaW4gbGFzdCBmcmFtZVxyXG4gICAgICAgICAgICAgICAga2VlcExhc3RGcmFtZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBub2RlIG91dHB1dCB0aGUgUlRUIHJlbmRlcmVkIGluIGxhc3QgZnJhbWVcclxuICAgICAgICAgICAgICAgIG91dHB1dExhc3RGcmFtZTogdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAqXHJcbiAgICAqL1xyXG52YXIgRmlsdGVyTm9kZSA9IENvbXBvc2l0b3JOb2RlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuRmlsdGVyTm9kZSMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbmFtZTogJycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5wdXRzOiB7fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvdXRwdXRzOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNoYWRlcjogJycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElucHV0IGxpbmtzLCB3aWxsIGJlIHVwZGF0ZWQgYnkgdGhlIGdyYXBoXHJcbiAgICAgICAgICogQGV4YW1wbGU6XHJcbiAgICAgICAgICogICAgIGlucHV0TmFtZToge1xyXG4gICAgICAgICAqICAgICAgICAgbm9kZTogc29tZU5vZGUsXHJcbiAgICAgICAgICogICAgICAgICBwaW46ICd4eHh4J1xyXG4gICAgICAgICAqICAgICB9XHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBpbnB1dExpbmtzOiB7fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogT3V0cHV0IGxpbmtzLCB3aWxsIGJlIHVwZGF0ZWQgYnkgdGhlIGdyYXBoXHJcbiAgICAgICAgICogQGV4YW1wbGU6XHJcbiAgICAgICAgICogICAgIG91dHB1dE5hbWU6IHtcclxuICAgICAgICAgKiAgICAgICAgIG5vZGU6IHNvbWVOb2RlLFxyXG4gICAgICAgICAqICAgICAgICAgcGluOiAneHh4eCdcclxuICAgICAgICAgKiAgICAgfVxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb3V0cHV0TGlua3M6IHt9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5jb21wb3NpdG9yLlBhc3N9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcGFzczogbnVsbCxcclxuXHJcbiAgICAgICAgLy8gU2F2ZSB0aGUgb3V0cHV0IHRleHR1cmUgb2YgcHJldmlvdXMgZnJhbWVcclxuICAgICAgICAvLyBXaWxsIGJlIHVzZWQgd2hlbiB0aGVyZSBleGlzdCBhIGNpcmN1bGFyIHJlZmVyZW5jZVxyXG4gICAgICAgIF9wcmV2T3V0cHV0VGV4dHVyZXM6IHt9LFxyXG4gICAgICAgIF9vdXRwdXRUZXh0dXJlczoge30sXHJcblxyXG4gICAgICAgIC8vIEV4YW1wbGU6IHsgbmFtZTogMiB9XHJcbiAgICAgICAgX291dHB1dFJlZmVyZW5jZXM6IHt9LFxyXG5cclxuICAgICAgICBfcmVuZGVyaW5nOiBmYWxzZSxcclxuICAgICAgICAvLyBJZiByZW5kZXJlZCBpbiB0aGlzIGZyYW1lXHJcbiAgICAgICAgX3JlbmRlcmVkOiBmYWxzZSxcclxuXHJcbiAgICAgICAgX2NvbXBvc2l0b3I6IG51bGxcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgcGFzcyA9IG5ldyBQYXNzKHtcclxuICAgICAgICBmcmFnbWVudDogdGhpcy5zaGFkZXJcclxuICAgIH0pO1xyXG4gICAgdGhpcy5wYXNzID0gcGFzcztcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuRmlsdGVyTm9kZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZXJlbmRlcicsIHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpbnB1dE5hbWUgaW4gdGhpcy5pbnB1dExpbmtzKSB7XHJcbiAgICAgICAgICAgIHZhciBsaW5rID0gdGhpcy5pbnB1dExpbmtzW2lucHV0TmFtZV07XHJcbiAgICAgICAgICAgIHZhciBpbnB1dFRleHR1cmUgPSBsaW5rLm5vZGUuZ2V0T3V0cHV0KHJlbmRlcmVyLCBsaW5rLnBpbik7XHJcbiAgICAgICAgICAgIHRoaXMucGFzcy5zZXRVbmlmb3JtKGlucHV0TmFtZSwgaW5wdXRUZXh0dXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gT3V0cHV0XHJcbiAgICAgICAgaWYgKCF0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXNzLm91dHB1dHMgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5nZXRGcmFtZUJ1ZmZlcigpLnVuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBhc3MucmVuZGVyKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBhc3Mub3V0cHV0cyA9IHt9O1xyXG5cclxuICAgICAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXMgPSB7fTtcclxuICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJhbWV0ZXJzID0gdGhpcy51cGRhdGVQYXJhbWV0ZXIobmFtZSwgcmVuZGVyZXIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKHBhcmFtZXRlcnMud2lkdGgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQYXJhbWV0ZXIobmFtZSwgcmVuZGVyZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIG91dHB1dEluZm8gPSB0aGlzLm91dHB1dHNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX2NvbXBvc2l0b3IuYWxsb2NhdGVUZXh0dXJlKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV0gPSB0ZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dGFjaG1lbnQgPSBvdXRwdXRJbmZvLmF0dGFjaG1lbnQgfHwgX2dsLkNPTE9SX0FUVEFDSE1FTlQwO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihhdHRhY2htZW50KSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50ID0gX2dsW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSA9IHRleHR1cmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5nZXRGcmFtZUJ1ZmZlcigpLmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiBhdHRhY2hlZFRleHR1cmVzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBGSVhNRSBhdHRhY2htZW50IGNoYW5nZXMgaW4gZGlmZmVyZW50IG5vZGVzXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb21wb3NpdG9yLmdldEZyYW1lQnVmZmVyKCkuYXR0YWNoKFxyXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0sIGF0dGFjaG1lbnRcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucGFzcy5yZW5kZXIocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgZGF0YSBvZiB0ZXh0dXJlIGlzIGNoYW5nZWQgb3ZlciB0aW1lLFxyXG4gICAgICAgICAgICAvLyBIZXJlIHVwZGF0ZSB0aGUgbWlwbWFwcyBvZiB0ZXh0dXJlIGVhY2ggdGltZSBhZnRlciByZW5kZXJlZDtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5nZXRGcmFtZUJ1ZmZlcigpLnVwZGF0ZU1pcG1hcChyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpbnB1dE5hbWUgaW4gdGhpcy5pbnB1dExpbmtzKSB7XHJcbiAgICAgICAgICAgIHZhciBsaW5rID0gdGhpcy5pbnB1dExpbmtzW2lucHV0TmFtZV07XHJcbiAgICAgICAgICAgIGxpbmsubm9kZS5yZW1vdmVSZWZlcmVuY2UobGluay5waW4pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2FmdGVycmVuZGVyJywgcmVuZGVyZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBUT0RPIFJlbW92ZSBwYXJhbWV0ZXIgZnVuY3Rpb24gY2FsbGJhY2tcclxuICAgIHVwZGF0ZVBhcmFtZXRlcjogZnVuY3Rpb24gKG91dHB1dE5hbWUsIHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIG91dHB1dEluZm8gPSB0aGlzLm91dHB1dHNbb3V0cHV0TmFtZV07XHJcbiAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSBvdXRwdXRJbmZvLnBhcmFtZXRlcnM7XHJcbiAgICAgICAgdmFyIHBhcmFtZXRlcnNDb3B5ID0gb3V0cHV0SW5mby5fcGFyYW1ldGVyc0NvcHk7XHJcbiAgICAgICAgaWYgKCFwYXJhbWV0ZXJzQ29weSkge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJzQ29weSA9IG91dHB1dEluZm8uX3BhcmFtZXRlcnNDb3B5ID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSAnd2lkdGgnICYmIGtleSAhPT0gJ2hlaWdodCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzQ29weVtrZXldID0gcGFyYW1ldGVyc1trZXldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB3aWR0aCwgaGVpZ2h0O1xyXG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVycy53aWR0aCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHBhcmFtZXRlcnMud2lkdGguY2FsbCh0aGlzLCByZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHBhcmFtZXRlcnMud2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVycy5oZWlnaHQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gcGFyYW1ldGVycy5oZWlnaHQuY2FsbCh0aGlzLCByZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBwYXJhbWV0ZXJzLmhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2lkdGggPSBNYXRoLmNlaWwod2lkdGgpO1xyXG4gICAgICAgIGhlaWdodCA9IE1hdGguY2VpbChoZWlnaHQpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHkud2lkdGggIT09IHdpZHRoXHJcbiAgICAgICAgICAgIHx8IHBhcmFtZXRlcnNDb3B5LmhlaWdodCAhPT0gaGVpZ2h0XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0uZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcGFyYW1ldGVyc0NvcHkud2lkdGggPSB3aWR0aDtcclxuICAgICAgICBwYXJhbWV0ZXJzQ29weS5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJhbWV0ZXJzQ29weTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcGFyYW1ldGVyXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHBhcmFtIHt9IHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHNldFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5wYXNzLnNldFVuaWZvcm0obmFtZSwgdmFsdWUpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogR2V0IHBhcmFtZXRlciB2YWx1ZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHt9XHJcbiAgICAgKi9cclxuICAgIGdldFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXNzLmdldFVuaWZvcm0obmFtZSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcGFyYW1ldGVyc1xyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9ialxyXG4gICAgICovXHJcbiAgICBzZXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBvYmopIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXIobmFtZSwgb2JqW25hbWVdKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLy8gLyoqXHJcbiAgICAvLyAgKiBTZXQgc2hhZGVyIGNvZGVcclxuICAgIC8vICAqIEBwYXJhbSB7c3RyaW5nfSBzaGFkZXJTdHJcclxuICAgIC8vICAqL1xyXG4gICAgLy8gc2V0U2hhZGVyOiBmdW5jdGlvbiAoc2hhZGVyU3RyKSB7XHJcbiAgICAvLyAgICAgdmFyIG1hdGVyaWFsID0gdGhpcy5wYXNzLm1hdGVyaWFsO1xyXG4gICAgLy8gICAgIG1hdGVyaWFsLnNoYWRlci5zZXRGcmFnbWVudChzaGFkZXJTdHIpO1xyXG4gICAgLy8gICAgIG1hdGVyaWFsLmF0dGFjaFNoYWRlcihtYXRlcmlhbC5zaGFkZXIsIHRydWUpO1xyXG4gICAgLy8gfSxcclxuICAgIC8qKlxyXG4gICAgICogUHJveHkgb2YgcGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgeHh4KTtcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFt2YWxdXHJcbiAgICAgKi9cclxuICAgIGRlZmluZTogZnVuY3Rpb24gKHN5bWJvbCwgdmFsKSB7XHJcbiAgICAgICAgdGhpcy5wYXNzLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCBzeW1ib2wsIHZhbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJveHkgb2YgcGFzcy5tYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCB4eHgpXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICovXHJcbiAgICB1bmRlZmluZTogZnVuY3Rpb24gKHN5bWJvbCkge1xyXG4gICAgICAgIHRoaXMucGFzcy5tYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCBzeW1ib2wpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW1vdmVSZWZlcmVuY2U6IGZ1bmN0aW9uIChvdXRwdXROYW1lKSB7XHJcbiAgICAgICAgdGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXS0tO1xyXG4gICAgICAgIGlmICh0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW291dHB1dE5hbWVdID09PSAwKSB7XHJcbiAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW291dHB1dE5hbWVdO1xyXG4gICAgICAgICAgICBpZiAob3V0cHV0SW5mby5rZWVwTGFzdEZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdID0gdGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBPdXRwdXQgb2YgdGhpcyBub2RlIGhhdmUgYWxyZWF5IGJlZW4gdXNlZCBieSBhbGwgb3RoZXIgbm9kZXNcclxuICAgICAgICAgICAgICAgIC8vIFB1dCB0aGUgdGV4dHVyZSBiYWNrIHRvIHRoZSBwb29sLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgQ29tcG9zaXRvck5vZGUucHJvdG90eXBlLmNsZWFyLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIC8vIERlZmF1bHQgZGlzYWJsZSBhbGwgdGV4dHVyZVxyXG4gICAgICAgIHRoaXMucGFzcy5tYXRlcmlhbC5kaXNhYmxlVGV4dHVyZXNBbGwoKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGaWx0ZXJOb2RlO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmNvbG9yYWRqdXN0XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGJyaWdodG5lc3MgOiAwLjA7XFxudW5pZm9ybSBmbG9hdCBjb250cmFzdCA6IDEuMDtcXG51bmlmb3JtIGZsb2F0IGV4cG9zdXJlIDogMC4wO1xcbnVuaWZvcm0gZmxvYXQgZ2FtbWEgOiAxLjA7XFxudW5pZm9ybSBmbG9hdCBzYXR1cmF0aW9uIDogMS4wO1xcbmNvbnN0IHZlYzMgdyA9IHZlYzMoMC4yMTI1LCAwLjcxNTQsIDAuMDcyMSk7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9IGNsYW1wKHRleC5yZ2IgKyB2ZWMzKGJyaWdodG5lc3MpLCAwLjAsIDEuMCk7XFxuIGNvbG9yID0gY2xhbXAoIChjb2xvci12ZWMzKDAuNSkpKmNvbnRyYXN0K3ZlYzMoMC41KSwgMC4wLCAxLjApO1xcbiBjb2xvciA9IGNsYW1wKCBjb2xvciAqIHBvdygyLjAsIGV4cG9zdXJlKSwgMC4wLCAxLjApO1xcbiBjb2xvciA9IGNsYW1wKCBwb3coY29sb3IsIHZlYzMoZ2FtbWEpKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBsdW1pbmFuY2UgPSBkb3QoIGNvbG9yLCB3ICk7XFxuIGNvbG9yID0gbWl4KHZlYzMobHVtaW5hbmNlKSwgY29sb3IsIHNhdHVyYXRpb24pO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5icmlnaHRuZXNzXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGJyaWdodG5lc3MgOiAwLjA7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9IHRleC5yZ2IgKyB2ZWMzKGJyaWdodG5lc3MpO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5jb250cmFzdFxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBjb250cmFzdCA6IDEuMDtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQoIHRleHR1cmUsIHZfVGV4Y29vcmQpO1xcbiB2ZWMzIGNvbG9yID0gKHRleC5yZ2ItdmVjMygwLjUpKSpjb250cmFzdCt2ZWMzKDAuNSk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIHRleC5hKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmV4cG9zdXJlXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGV4cG9zdXJlIDogMC4wO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9IHRleC5yZ2IgKiBwb3coMi4wLCBleHBvc3VyZSk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIHRleC5hKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmdhbW1hXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGdhbW1hIDogMS4wO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9IHBvdyh0ZXgucmdiLCB2ZWMzKGdhbW1hKSk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIHRleC5hKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLnNhdHVyYXRpb25cXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gZmxvYXQgc2F0dXJhdGlvbiA6IDEuMDtcXG5jb25zdCB2ZWMzIHcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9IHRleC5yZ2I7XFxuIGZsb2F0IGx1bWluYW5jZSA9IGRvdChjb2xvciwgdyk7XFxuIGNvbG9yID0gbWl4KHZlYzMobHVtaW5hbmNlKSwgY29sb3IsIHNhdHVyYXRpb24pO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5rZXJuZWwuZ2F1c3NpYW5fOVxcbmZsb2F0IGdhdXNzaWFuS2VybmVsWzldO1xcbmdhdXNzaWFuS2VybmVsWzBdID0gMC4wNztcXG5nYXVzc2lhbktlcm5lbFsxXSA9IDAuMDk7XFxuZ2F1c3NpYW5LZXJuZWxbMl0gPSAwLjEyO1xcbmdhdXNzaWFuS2VybmVsWzNdID0gMC4xNDtcXG5nYXVzc2lhbktlcm5lbFs0XSA9IDAuMTY7XFxuZ2F1c3NpYW5LZXJuZWxbNV0gPSAwLjE0O1xcbmdhdXNzaWFuS2VybmVsWzZdID0gMC4xMjtcXG5nYXVzc2lhbktlcm5lbFs3XSA9IDAuMDk7XFxuZ2F1c3NpYW5LZXJuZWxbOF0gPSAwLjA3O1xcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5rZXJuZWwuZ2F1c3NpYW5fMTNcXG5mbG9hdCBnYXVzc2lhbktlcm5lbFsxM107XFxuZ2F1c3NpYW5LZXJuZWxbMF0gPSAwLjAyO1xcbmdhdXNzaWFuS2VybmVsWzFdID0gMC4wMztcXG5nYXVzc2lhbktlcm5lbFsyXSA9IDAuMDY7XFxuZ2F1c3NpYW5LZXJuZWxbM10gPSAwLjA4O1xcbmdhdXNzaWFuS2VybmVsWzRdID0gMC4xMTtcXG5nYXVzc2lhbktlcm5lbFs1XSA9IDAuMTM7XFxuZ2F1c3NpYW5LZXJuZWxbNl0gPSAwLjE0O1xcbmdhdXNzaWFuS2VybmVsWzddID0gMC4xMztcXG5nYXVzc2lhbktlcm5lbFs4XSA9IDAuMTE7XFxuZ2F1c3NpYW5LZXJuZWxbOV0gPSAwLjA4O1xcbmdhdXNzaWFuS2VybmVsWzEwXSA9IDAuMDY7XFxuZ2F1c3NpYW5LZXJuZWxbMTFdID0gMC4wMztcXG5nYXVzc2lhbktlcm5lbFsxMl0gPSAwLjAyO1xcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5nYXVzc2lhbl9ibHVyXFxuI2RlZmluZSBTSEFERVJfTkFNRSBnYXVzc2lhbl9ibHVyXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTt2YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIGZsb2F0IGJsdXJTaXplIDogMi4wO1xcbnVuaWZvcm0gdmVjMiB0ZXh0dXJlU2l6ZSA6IFs1MTIuMCwgNTEyLjBdO1xcbnVuaWZvcm0gZmxvYXQgYmx1ckRpciA6IDAuMDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwuY2xhbXBfc2FtcGxlXFxudm9pZCBtYWluICh2b2lkKVxcbntcXG4gQGltcG9ydCBjbGF5LmNvbXBvc2l0b3Iua2VybmVsLmdhdXNzaWFuXzlcXG4gdmVjMiBvZmYgPSBibHVyU2l6ZSAvIHRleHR1cmVTaXplO1xcbiBvZmYgKj0gdmVjMigxLjAgLSBibHVyRGlyLCBibHVyRGlyKTtcXG4gdmVjNCBzdW0gPSB2ZWM0KDAuMCk7XFxuIGZsb2F0IHdlaWdodEFsbCA9IDAuMDtcXG4gZm9yIChpbnQgaSA9IDA7IGkgPCA5OyBpKyspIHtcXG4gZmxvYXQgdyA9IGdhdXNzaWFuS2VybmVsW2ldO1xcbiB2ZWM0IHRleGVsID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBmbG9hdChpIC0gNCkgKiBvZmYpKTtcXG4gc3VtICs9IHRleGVsICogdztcXG4gd2VpZ2h0QWxsICs9IHc7XFxuIH1cXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHN1bSAvIG1heCh3ZWlnaHRBbGwsIDAuMDEpKTtcXG59XFxuQGVuZFxcblwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmhkci5sb2dfbHVtXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG5jb25zdCB2ZWMzIHcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQpKTtcXG4gZmxvYXQgbHVtaW5hbmNlID0gZG90KHRleC5yZ2IsIHcpO1xcbiBsdW1pbmFuY2UgPSBsb2cobHVtaW5hbmNlICsgMC4wMDEpO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNCh2ZWMzKGx1bWluYW5jZSksIDEuMCkpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuaGRyLmx1bV9hZGFwdGlvblxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGFkYXB0ZWRMdW07XFxudW5pZm9ybSBzYW1wbGVyMkQgY3VycmVudEx1bTtcXG51bmlmb3JtIGZsb2F0IGZyYW1lVGltZSA6IDAuMDI7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiBmbG9hdCBmQWRhcHRlZEx1bSA9IGRlY29kZUhEUih0ZXh0dXJlMkQoYWRhcHRlZEx1bSwgdmVjMigwLjUsIDAuNSkpKS5yO1xcbiBmbG9hdCBmQ3VycmVudEx1bSA9IGV4cChlbmNvZGVIRFIodGV4dHVyZTJEKGN1cnJlbnRMdW0sIHZlYzIoMC41LCAwLjUpKSkucik7XFxuIGZBZGFwdGVkTHVtICs9IChmQ3VycmVudEx1bSAtIGZBZGFwdGVkTHVtKSAqICgxLjAgLSBwb3coMC45OCwgMzAuMCAqIGZyYW1lVGltZSkpO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNCh2ZWMzKGZBZGFwdGVkTHVtKSwgMS4wKSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5sdW1cXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbmNvbnN0IHZlYzMgdyA9IHZlYzMoMC4yMTI1LCAwLjcxNTQsIDAuMDcyMSk7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkICk7XFxuIGZsb2F0IGx1bWluYW5jZSA9IGRvdCh0ZXgucmdiLCB3KTtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGx1bWluYW5jZSksIDEuMCk7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5sdXRcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGxvb2t1cDtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIGZsb2F0IGJsdWVDb2xvciA9IHRleC5iICogNjMuMDtcXG4gdmVjMiBxdWFkMTtcXG4gcXVhZDEueSA9IGZsb29yKGZsb29yKGJsdWVDb2xvcikgLyA4LjApO1xcbiBxdWFkMS54ID0gZmxvb3IoYmx1ZUNvbG9yKSAtIChxdWFkMS55ICogOC4wKTtcXG4gdmVjMiBxdWFkMjtcXG4gcXVhZDIueSA9IGZsb29yKGNlaWwoYmx1ZUNvbG9yKSAvIDguMCk7XFxuIHF1YWQyLnggPSBjZWlsKGJsdWVDb2xvcikgLSAocXVhZDIueSAqIDguMCk7XFxuIHZlYzIgdGV4UG9zMTtcXG4gdGV4UG9zMS54ID0gKHF1YWQxLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIHRleC5yKTtcXG4gdGV4UG9zMS55ID0gKHF1YWQxLnkgKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIHRleC5nKTtcXG4gdmVjMiB0ZXhQb3MyO1xcbiB0ZXhQb3MyLnggPSAocXVhZDIueCAqIDAuMTI1KSArIDAuNS81MTIuMCArICgoMC4xMjUgLSAxLjAvNTEyLjApICogdGV4LnIpO1xcbiB0ZXhQb3MyLnkgPSAocXVhZDIueSAqIDAuMTI1KSArIDAuNS81MTIuMCArICgoMC4xMjUgLSAxLjAvNTEyLjApICogdGV4LmcpO1xcbiB2ZWM0IG5ld0NvbG9yMSA9IHRleHR1cmUyRChsb29rdXAsIHRleFBvczEpO1xcbiB2ZWM0IG5ld0NvbG9yMiA9IHRleHR1cmUyRChsb29rdXAsIHRleFBvczIpO1xcbiB2ZWM0IG5ld0NvbG9yID0gbWl4KG5ld0NvbG9yMSwgbmV3Q29sb3IyLCBmcmFjdChibHVlQ29sb3IpKTtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChuZXdDb2xvci5yZ2IsIHRleC53KTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLnZpZ25ldHRlXFxuI2RlZmluZSBPVVRQVVRfQUxQSEFcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gZmxvYXQgZGFya25lc3M6IDE7XFxudW5pZm9ybSBmbG9hdCBvZmZzZXQ6IDE7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSB0ZXhlbC5yZ2I7XFxuIHZlYzIgdXYgPSAodl9UZXhjb29yZCAtIHZlYzIoMC41KSkgKiB2ZWMyKG9mZnNldCk7XFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUih2ZWM0KG1peCh0ZXhlbC5yZ2IsIHZlYzMoMS4wIC0gZGFya25lc3MpLCBkb3QodXYsIHV2KSksIHRleGVsLmEpKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLm91dHB1dFxcbiNkZWZpbmUgT1VUUFVUX0FMUEhBXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSB0ZXgucmdiO1xcbiNpZmRlZiBPVVRQVVRfQUxQSEFcXG4gZ2xfRnJhZ0NvbG9yLmEgPSB0ZXguYTtcXG4jZWxzZVxcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGdsX0ZyYWdDb2xvcik7XFxuI2lmZGVmIFBSRU1VTFRJUExZX0FMUEhBXFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7XFxuI2VuZGlmXFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5icmlnaHRcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gZmxvYXQgdGhyZXNob2xkIDogMTtcXG51bmlmb3JtIGZsb2F0IHNjYWxlIDogMS4wO1xcbnVuaWZvcm0gdmVjMiB0ZXh0dXJlU2l6ZTogWzUxMiwgNTEyXTtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5jb25zdCB2ZWMzIGx1bVdlaWdodCA9IHZlYzMoMC4yMTI1LCAwLjcxNTQsIDAuMDcyMSk7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZlYzQgbWVkaWFuKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IGMpXFxue1xcbiByZXR1cm4gYSArIGIgKyBjIC0gbWluKG1pbihhLCBiKSwgYykgLSBtYXgobWF4KGEsIGIpLCBjKTtcXG59XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQpKTtcXG4jaWZkZWYgQU5USV9GTElDS0VSXFxuIHZlYzMgZCA9IDEuMCAvIHRleHR1cmVTaXplLnh5eCAqIHZlYzMoMS4wLCAxLjAsIDAuMCk7XFxuIHZlYzQgczEgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQgLSBkLnh6KSk7XFxuIHZlYzQgczIgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh6KSk7XFxuIHZlYzQgczMgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQgLSBkLnp5KSk7XFxuIHZlYzQgczQgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp5KSk7XFxuIHRleGVsID0gbWVkaWFuKG1lZGlhbih0ZXhlbCwgczEsIHMyKSwgczMsIHM0KTtcXG4jZW5kaWZcXG4gZmxvYXQgbHVtID0gZG90KHRleGVsLnJnYiAsIGx1bVdlaWdodCk7XFxuIHZlYzQgY29sb3I7XFxuIGlmIChsdW0gPiB0aHJlc2hvbGQgJiYgdGV4ZWwuYSA+IDAuMClcXG4ge1xcbiBjb2xvciA9IHZlYzQodGV4ZWwucmdiICogc2NhbGUsIHRleGVsLmEgKiBzY2FsZSk7XFxuIH1cXG4gZWxzZVxcbiB7XFxuIGNvbG9yID0gdmVjNCgwLjApO1xcbiB9XFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihjb2xvcik7XFxufVxcbkBlbmRcXG5cIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5kb3duc2FtcGxlXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemUgOiBbNTEyLCA1MTJdO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5mbG9hdCBicmlnaHRuZXNzKHZlYzMgYylcXG57XFxuIHJldHVybiBtYXgobWF4KGMuciwgYy5nKSwgYy5iKTtcXG59XFxuQGltcG9ydCBjbGF5LnV0aWwuY2xhbXBfc2FtcGxlXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgZCA9IHZlYzQoLTEuMCwgLTEuMCwgMS4wLCAxLjApIC8gdGV4dHVyZVNpemUueHl4eTtcXG4jaWZkZWYgQU5USV9GTElDS0VSXFxuIHZlYzMgczEgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHkpKS5yZ2I7XFxuIHZlYzMgczIgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuenkpKS5yZ2I7XFxuIHZlYzMgczMgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHcpKS5yZ2I7XFxuIHZlYzMgczQgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuencpKS5yZ2I7XFxuIGZsb2F0IHMxdyA9IDEuMCAvIChicmlnaHRuZXNzKHMxKSArIDEuMCk7XFxuIGZsb2F0IHMydyA9IDEuMCAvIChicmlnaHRuZXNzKHMyKSArIDEuMCk7XFxuIGZsb2F0IHMzdyA9IDEuMCAvIChicmlnaHRuZXNzKHMzKSArIDEuMCk7XFxuIGZsb2F0IHM0dyA9IDEuMCAvIChicmlnaHRuZXNzKHM0KSArIDEuMCk7XFxuIGZsb2F0IG9uZURpdmlkZVN1bSA9IDEuMCAvIChzMXcgKyBzMncgKyBzM3cgKyBzNHcpO1xcbiB2ZWM0IGNvbG9yID0gdmVjNChcXG4gKHMxICogczF3ICsgczIgKiBzMncgKyBzMyAqIHMzdyArIHM0ICogczR3KSAqIG9uZURpdmlkZVN1bSxcXG4gMS4wXFxuICk7XFxuI2Vsc2VcXG4gdmVjNCBjb2xvciA9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eSkpO1xcbiBjb2xvciArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuenkpKTtcXG4gY29sb3IgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh3KSk7XFxuIGNvbG9yICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56dykpO1xcbiBjb2xvciAqPSAwLjI1O1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoY29sb3IpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IudXBzYW1wbGVcXG4jZGVmaW5lIEhJR0hfUVVBTElUWVxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMiwgNTEyXTtcXG51bmlmb3JtIGZsb2F0IHNhbXBsZVNjYWxlOiAwLjU7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZvaWQgbWFpbigpXFxue1xcbiNpZmRlZiBISUdIX1FVQUxJVFlcXG4gdmVjNCBkID0gdmVjNCgxLjAsIDEuMCwgLTEuMCwgMC4wKSAvIHRleHR1cmVTaXplLnh5eHkgKiBzYW1wbGVTY2FsZTtcXG4gdmVjNCBzO1xcbiBzID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgLSBkLnh5KSk7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgLSBkLnd5KSkgKiAyLjA7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgLSBkLnp5KSk7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp3KSkgKiAyLjA7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKSkgKiA0LjA7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh3KSkgKiAyLjA7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp5KSk7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnd5KSkgKiAyLjA7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh5KSk7XFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihzIC8gMTYuMCk7XFxuI2Vsc2VcXG4gdmVjNCBkID0gdmVjNCgtMS4wLCAtMS4wLCArMS4wLCArMS4wKSAvIHRleHR1cmVTaXplLnh5eHk7XFxuIHZlYzQgcztcXG4gcyA9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eSkpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56eSkpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54dykpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56dykpO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIocyAvIDQuMCk7XFxuI2VuZGlmXFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5oZHIuY29tcG9zaXRlXFxuI2RlZmluZSBUT05FTUFQUElOR1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxuI2lmZGVmIEJMT09NX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBibG9vbTtcXG4jZW5kaWZcXG4jaWZkZWYgTEVOU0ZMQVJFX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBsZW5zZmxhcmU7XFxudW5pZm9ybSBzYW1wbGVyMkQgbGVuc2RpcnQ7XFxuI2VuZGlmXFxuI2lmZGVmIExVTV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbHVtO1xcbiNlbmRpZlxcbiNpZmRlZiBMVVRfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGx1dDtcXG4jZW5kaWZcXG4jaWZkZWYgQ09MT1JfQ09SUkVDVElPTlxcbnVuaWZvcm0gZmxvYXQgYnJpZ2h0bmVzcyA6IDAuMDtcXG51bmlmb3JtIGZsb2F0IGNvbnRyYXN0IDogMS4wO1xcbnVuaWZvcm0gZmxvYXQgc2F0dXJhdGlvbiA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVklHTkVUVEVcXG51bmlmb3JtIGZsb2F0IHZpZ25ldHRlRGFya25lc3M6IDEuMDtcXG51bmlmb3JtIGZsb2F0IHZpZ25ldHRlT2Zmc2V0OiAxLjA7XFxuI2VuZGlmXFxudW5pZm9ybSBmbG9hdCBleHBvc3VyZSA6IDEuMDtcXG51bmlmb3JtIGZsb2F0IGJsb29tSW50ZW5zaXR5IDogMC4yNTtcXG51bmlmb3JtIGZsb2F0IGxlbnNmbGFyZUludGVuc2l0eSA6IDE7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwuc3JnYlxcbnZlYzMgQUNFU1RvbmVNYXBwaW5nKHZlYzMgY29sb3IpXFxue1xcbiBjb25zdCBmbG9hdCBBID0gMi41MTtcXG4gY29uc3QgZmxvYXQgQiA9IDAuMDM7XFxuIGNvbnN0IGZsb2F0IEMgPSAyLjQzO1xcbiBjb25zdCBmbG9hdCBEID0gMC41OTtcXG4gY29uc3QgZmxvYXQgRSA9IDAuMTQ7XFxuIHJldHVybiAoY29sb3IgKiAoQSAqIGNvbG9yICsgQikpIC8gKGNvbG9yICogKEMgKiBjb2xvciArIEQpICsgRSk7XFxufVxcbmZsb2F0IGV5ZUFkYXB0aW9uKGZsb2F0IGZMdW0pXFxue1xcbiByZXR1cm4gbWl4KDAuMiwgZkx1bSwgMC41KTtcXG59XFxuI2lmZGVmIExVVF9FTkFCTEVEXFxudmVjMyBsdXRUcmFuc2Zvcm0odmVjMyBjb2xvcikge1xcbiBmbG9hdCBibHVlQ29sb3IgPSBjb2xvci5iICogNjMuMDtcXG4gdmVjMiBxdWFkMTtcXG4gcXVhZDEueSA9IGZsb29yKGZsb29yKGJsdWVDb2xvcikgLyA4LjApO1xcbiBxdWFkMS54ID0gZmxvb3IoYmx1ZUNvbG9yKSAtIChxdWFkMS55ICogOC4wKTtcXG4gdmVjMiBxdWFkMjtcXG4gcXVhZDIueSA9IGZsb29yKGNlaWwoYmx1ZUNvbG9yKSAvIDguMCk7XFxuIHF1YWQyLnggPSBjZWlsKGJsdWVDb2xvcikgLSAocXVhZDIueSAqIDguMCk7XFxuIHZlYzIgdGV4UG9zMTtcXG4gdGV4UG9zMS54ID0gKHF1YWQxLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIGNvbG9yLnIpO1xcbiB0ZXhQb3MxLnkgPSAocXVhZDEueSAqIDAuMTI1KSArIDAuNS81MTIuMCArICgoMC4xMjUgLSAxLjAvNTEyLjApICogY29sb3IuZyk7XFxuIHZlYzIgdGV4UG9zMjtcXG4gdGV4UG9zMi54ID0gKHF1YWQyLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIGNvbG9yLnIpO1xcbiB0ZXhQb3MyLnkgPSAocXVhZDIueSAqIDAuMTI1KSArIDAuNS81MTIuMCArICgoMC4xMjUgLSAxLjAvNTEyLjApICogY29sb3IuZyk7XFxuIHZlYzQgbmV3Q29sb3IxID0gdGV4dHVyZTJEKGx1dCwgdGV4UG9zMSk7XFxuIHZlYzQgbmV3Q29sb3IyID0gdGV4dHVyZTJEKGx1dCwgdGV4UG9zMik7XFxuIHZlYzQgbmV3Q29sb3IgPSBtaXgobmV3Q29sb3IxLCBuZXdDb2xvcjIsIGZyYWN0KGJsdWVDb2xvcikpO1xcbiByZXR1cm4gbmV3Q29sb3IucmdiO1xcbn1cXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ZWwgPSB2ZWM0KDAuMCk7XFxuIHZlYzQgb3JpZ2luYWxUZXhlbCA9IHZlYzQoMC4wKTtcXG4jaWZkZWYgVEVYVFVSRV9FTkFCTEVEXFxuIHRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuIG9yaWdpbmFsVGV4ZWwgPSB0ZXhlbDtcXG4jZW5kaWZcXG4jaWZkZWYgQkxPT01fRU5BQkxFRFxcbiB2ZWM0IGJsb29tVGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZTJEKGJsb29tLCB2X1RleGNvb3JkKSk7XFxuIHRleGVsLnJnYiArPSBibG9vbVRleGVsLnJnYiAqIGJsb29tSW50ZW5zaXR5O1xcbiB0ZXhlbC5hICs9IGJsb29tVGV4ZWwuYSAqIGJsb29tSW50ZW5zaXR5O1xcbiNlbmRpZlxcbiNpZmRlZiBMRU5TRkxBUkVfRU5BQkxFRFxcbiB0ZXhlbCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKGxlbnNmbGFyZSwgdl9UZXhjb29yZCkpICogdGV4dHVyZTJEKGxlbnNkaXJ0LCB2X1RleGNvb3JkKSAqIGxlbnNmbGFyZUludGVuc2l0eTtcXG4jZW5kaWZcXG4gdGV4ZWwuYSA9IG1pbih0ZXhlbC5hLCAxLjApO1xcbiNpZmRlZiBMVU1fRU5BQkxFRFxcbiBmbG9hdCBmTHVtID0gdGV4dHVyZTJEKGx1bSwgdmVjMigwLjUsIDAuNSkpLnI7XFxuIGZsb2F0IGFkYXB0ZWRMdW1EZXN0ID0gMy4wIC8gKG1heCgwLjEsIDEuMCArIDEwLjAqZXllQWRhcHRpb24oZkx1bSkpKTtcXG4gZmxvYXQgZXhwb3N1cmVCaWFzID0gYWRhcHRlZEx1bURlc3QgKiBleHBvc3VyZTtcXG4jZWxzZVxcbiBmbG9hdCBleHBvc3VyZUJpYXMgPSBleHBvc3VyZTtcXG4jZW5kaWZcXG4jaWZkZWYgVE9ORU1BUFBJTkdcXG4gdGV4ZWwucmdiICo9IGV4cG9zdXJlQmlhcztcXG4gdGV4ZWwucmdiID0gQUNFU1RvbmVNYXBwaW5nKHRleGVsLnJnYik7XFxuI2VuZGlmXFxuIHRleGVsID0gbGluZWFyVG9zUkdCKHRleGVsKTtcXG4jaWZkZWYgTFVUX0VOQUJMRURcXG4gdGV4ZWwucmdiID0gbHV0VHJhbnNmb3JtKGNsYW1wKHRleGVsLnJnYix2ZWMzKDAuMCksdmVjMygxLjApKSk7XFxuI2VuZGlmXFxuI2lmZGVmIENPTE9SX0NPUlJFQ1RJT05cXG4gdGV4ZWwucmdiID0gY2xhbXAodGV4ZWwucmdiICsgdmVjMyhicmlnaHRuZXNzKSwgMC4wLCAxLjApO1xcbiB0ZXhlbC5yZ2IgPSBjbGFtcCgodGV4ZWwucmdiIC0gdmVjMygwLjUpKSpjb250cmFzdCt2ZWMzKDAuNSksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbHVtID0gZG90KHRleGVsLnJnYiwgdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKSk7XFxuIHRleGVsLnJnYiA9IG1peCh2ZWMzKGx1bSksIHRleGVsLnJnYiwgc2F0dXJhdGlvbik7XFxuI2VuZGlmXFxuI2lmZGVmIFZJR05FVFRFXFxuIHZlYzIgdXYgPSAodl9UZXhjb29yZCAtIHZlYzIoMC41KSkgKiB2ZWMyKHZpZ25ldHRlT2Zmc2V0KTtcXG4gdGV4ZWwucmdiID0gbWl4KHRleGVsLnJnYiwgdmVjMygxLjAgLSB2aWduZXR0ZURhcmtuZXNzKSwgZG90KHV2LCB1dikpO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodGV4ZWwpO1xcbiNpZmRlZiBERUJVR1xcbiAjaWYgREVCVUcgPT0gMVxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSkpO1xcbiAjZWxpZiBERUJVRyA9PSAyXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihkZWNvZGVIRFIodGV4dHVyZTJEKGJsb29tLCB2X1RleGNvb3JkKSkgKiBibG9vbUludGVuc2l0eSk7XFxuICNlbGlmIERFQlVHID09IDNcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGRlY29kZUhEUih0ZXh0dXJlMkQobGVuc2ZsYXJlLCB2X1RleGNvb3JkKSAqIGxlbnNmbGFyZUludGVuc2l0eSkpO1xcbiAjZW5kaWZcXG4jZW5kaWZcXG4gaWYgKG9yaWdpbmFsVGV4ZWwuYSA8PSAwLjAxICYmIGdsX0ZyYWdDb2xvci5hID4gMWUtNSkge1xcbiBnbF9GcmFnQ29sb3IuYSA9IGRvdChnbF9GcmFnQ29sb3IucmdiLCB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpKTtcXG4gfVxcbiNpZmRlZiBQUkVNVUxUSVBMWV9BTFBIQVxcbiBnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hO1xcbiNlbmRpZlxcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IubGVuc2ZsYXJlXFxuI2RlZmluZSBTQU1QTEVfTlVNQkVSIDhcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGxlbnNjb2xvcjtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemUgOiBbNTEyLCA1MTJdO1xcbnVuaWZvcm0gZmxvYXQgZGlzcGVyc2FsIDogMC4zO1xcbnVuaWZvcm0gZmxvYXQgaGFsb1dpZHRoIDogMC40O1xcbnVuaWZvcm0gZmxvYXQgZGlzdG9ydGlvbiA6IDEuMDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudmVjNCB0ZXh0dXJlRGlzdG9ydGVkKFxcbiBpbiB2ZWMyIHRleGNvb3JkLFxcbiBpbiB2ZWMyIGRpcmVjdGlvbixcXG4gaW4gdmVjMyBkaXN0b3J0aW9uXFxuKSB7XFxuIHJldHVybiB2ZWM0KFxcbiBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHRleGNvb3JkICsgZGlyZWN0aW9uICogZGlzdG9ydGlvbi5yKSkucixcXG4gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB0ZXhjb29yZCArIGRpcmVjdGlvbiAqIGRpc3RvcnRpb24uZykpLmcsXFxuIGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdGV4Y29vcmQgKyBkaXJlY3Rpb24gKiBkaXN0b3J0aW9uLmIpKS5iLFxcbiAxLjBcXG4gKTtcXG59XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzIgdGV4Y29vcmQgPSAtdl9UZXhjb29yZCArIHZlYzIoMS4wKTsgdmVjMiB0ZXh0dXJlT2Zmc2V0ID0gMS4wIC8gdGV4dHVyZVNpemU7XFxuIHZlYzIgZ2hvc3RWZWMgPSAodmVjMigwLjUpIC0gdGV4Y29vcmQpICogZGlzcGVyc2FsO1xcbiB2ZWMyIGhhbG9WZWMgPSBub3JtYWxpemUoZ2hvc3RWZWMpICogaGFsb1dpZHRoO1xcbiB2ZWMzIGRpc3RvcnRpb24gPSB2ZWMzKC10ZXh0dXJlT2Zmc2V0LnggKiBkaXN0b3J0aW9uLCAwLjAsIHRleHR1cmVPZmZzZXQueCAqIGRpc3RvcnRpb24pO1xcbiB2ZWM0IHJlc3VsdCA9IHZlYzQoMC4wKTtcXG4gZm9yIChpbnQgaSA9IDA7IGkgPCBTQU1QTEVfTlVNQkVSOyBpKyspXFxuIHtcXG4gdmVjMiBvZmZzZXQgPSBmcmFjdCh0ZXhjb29yZCArIGdob3N0VmVjICogZmxvYXQoaSkpO1xcbiBmbG9hdCB3ZWlnaHQgPSBsZW5ndGgodmVjMigwLjUpIC0gb2Zmc2V0KSAvIGxlbmd0aCh2ZWMyKDAuNSkpO1xcbiB3ZWlnaHQgPSBwb3coMS4wIC0gd2VpZ2h0LCAxMC4wKTtcXG4gcmVzdWx0ICs9IHRleHR1cmVEaXN0b3J0ZWQob2Zmc2V0LCBub3JtYWxpemUoZ2hvc3RWZWMpLCBkaXN0b3J0aW9uKSAqIHdlaWdodDtcXG4gfVxcbiByZXN1bHQgKj0gdGV4dHVyZTJEKGxlbnNjb2xvciwgdmVjMihsZW5ndGgodmVjMigwLjUpIC0gdGV4Y29vcmQpKSAvIGxlbmd0aCh2ZWMyKDAuNSkpKTtcXG4gZmxvYXQgd2VpZ2h0ID0gbGVuZ3RoKHZlYzIoMC41KSAtIGZyYWN0KHRleGNvb3JkICsgaGFsb1ZlYykpIC8gbGVuZ3RoKHZlYzIoMC41KSk7XFxuIHdlaWdodCA9IHBvdygxLjAgLSB3ZWlnaHQsIDEwLjApO1xcbiB2ZWMyIG9mZnNldCA9IGZyYWN0KHRleGNvb3JkICsgaGFsb1ZlYyk7XFxuIHJlc3VsdCArPSB0ZXh0dXJlRGlzdG9ydGVkKG9mZnNldCwgbm9ybWFsaXplKGdob3N0VmVjKSwgZGlzdG9ydGlvbikgKiB3ZWlnaHQ7XFxuIGdsX0ZyYWdDb2xvciA9IHJlc3VsdDtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmJsZW5kXFxuI2RlZmluZSBTSEFERVJfTkFNRSBibGVuZFxcbiNpZmRlZiBURVhUVVJFMV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTE7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQxIDogMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFMl9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTI7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQyIDogMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFM19FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTM7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQzIDogMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTQ7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQ0IDogMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTU7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQ1IDogMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNl9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTY7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQ2IDogMS4wO1xcbiNlbmRpZlxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB2ZWM0KDAuMCk7XFxuI2lmZGVmIFRFWFRVUkUxX0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTEsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDE7XFxuI2VuZGlmXFxuI2lmZGVmIFRFWFRVUkUyX0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTIsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDI7XFxuI2VuZGlmXFxuI2lmZGVmIFRFWFRVUkUzX0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTMsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDM7XFxuI2VuZGlmXFxuI2lmZGVmIFRFWFRVUkU0X0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTQsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDQ7XFxuI2VuZGlmXFxuI2lmZGVmIFRFWFRVUkU1X0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTUsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDU7XFxuI2VuZGlmXFxuI2lmZGVmIFRFWFRVUkU2X0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTYsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDY7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUih0ZXgpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZnhhYVxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSB2ZWM0IHZpZXdwb3J0IDogVklFV1BPUlQ7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gKDEuMC8xMjguMClcXG4jZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAoMS4wLzguMClcXG4jZGVmaW5lIEZYQUFfU1BBTl9NQVggOC4wXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMyIHJlc29sdXRpb24gPSAxLjAgLyB2aWV3cG9ydC56dztcXG4gdmVjMyByZ2JOVyA9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIC0xLjAsIC0xLjAgKSApICogcmVzb2x1dGlvbiApICkueHl6O1xcbiB2ZWMzIHJnYk5FID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMS4wLCAtMS4wICkgKSAqIHJlc29sdXRpb24gKSApLnh5ejtcXG4gdmVjMyByZ2JTVyA9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIC0xLjAsIDEuMCApICkgKiByZXNvbHV0aW9uICkgKS54eXo7XFxuIHZlYzMgcmdiU0UgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAxLjAsIDEuMCApICkgKiByZXNvbHV0aW9uICkgKS54eXo7XFxuIHZlYzQgcmdiYU0gPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgZ2xfRnJhZ0Nvb3JkLnh5ICogcmVzb2x1dGlvbiApICk7XFxuIHZlYzMgcmdiTSA9IHJnYmFNLnh5ejtcXG4gZmxvYXQgb3BhY2l0eSA9IHJnYmFNLnc7XFxuIHZlYzMgbHVtYSA9IHZlYzMoIDAuMjk5LCAwLjU4NywgMC4xMTQgKTtcXG4gZmxvYXQgbHVtYU5XID0gZG90KCByZ2JOVywgbHVtYSApO1xcbiBmbG9hdCBsdW1hTkUgPSBkb3QoIHJnYk5FLCBsdW1hICk7XFxuIGZsb2F0IGx1bWFTVyA9IGRvdCggcmdiU1csIGx1bWEgKTtcXG4gZmxvYXQgbHVtYVNFID0gZG90KCByZ2JTRSwgbHVtYSApO1xcbiBmbG9hdCBsdW1hTSA9IGRvdCggcmdiTSwgbHVtYSApO1xcbiBmbG9hdCBsdW1hTWluID0gbWluKCBsdW1hTSwgbWluKCBtaW4oIGx1bWFOVywgbHVtYU5FICksIG1pbiggbHVtYVNXLCBsdW1hU0UgKSApICk7XFxuIGZsb2F0IGx1bWFNYXggPSBtYXgoIGx1bWFNLCBtYXgoIG1heCggbHVtYU5XLCBsdW1hTkUpICwgbWF4KCBsdW1hU1csIGx1bWFTRSApICkgKTtcXG4gdmVjMiBkaXI7XFxuIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gZGlyLnkgPSAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuIGZsb2F0IGRpclJlZHVjZSA9IG1heCggKCBsdW1hTlcgKyBsdW1hTkUgKyBsdW1hU1cgKyBsdW1hU0UgKSAqICggMC4yNSAqIEZYQUFfUkVEVUNFX01VTCApLCBGWEFBX1JFRFVDRV9NSU4gKTtcXG4gZmxvYXQgcmNwRGlyTWluID0gMS4wIC8gKCBtaW4oIGFicyggZGlyLnggKSwgYWJzKCBkaXIueSApICkgKyBkaXJSZWR1Y2UgKTtcXG4gZGlyID0gbWluKCB2ZWMyKCBGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gbWF4KCB2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuIGRpciAqIHJjcERpck1pbikpICogcmVzb2x1dGlvbjtcXG4gdmVjMyByZ2JBID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAqIHJlc29sdXRpb24gKyBkaXIgKiAoIDEuMCAvIDMuMCAtIDAuNSApICkgKS54eXo7XFxuIHJnYkEgKz0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAqIHJlc29sdXRpb24gKyBkaXIgKiAoIDIuMCAvIDMuMCAtIDAuNSApICkgKS54eXo7XFxuIHJnYkEgKj0gMC41O1xcbiB2ZWMzIHJnYkIgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgZ2xfRnJhZ0Nvb3JkLnh5ICogcmVzb2x1dGlvbiArIGRpciAqIC0wLjUgKSApLnh5ejtcXG4gcmdiQiArPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgZ2xfRnJhZ0Nvb3JkLnh5ICogcmVzb2x1dGlvbiArIGRpciAqIDAuNSApICkueHl6O1xcbiByZ2JCICo9IDAuMjU7XFxuIHJnYkIgKz0gcmdiQSAqIDAuNTtcXG4gZmxvYXQgbHVtYUIgPSBkb3QoIHJnYkIsIGx1bWEgKTtcXG4gaWYgKCAoIGx1bWFCIDwgbHVtYU1pbiApIHx8ICggbHVtYUIgPiBsdW1hTWF4ICkgKVxcbiB7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoIHJnYkEsIG9wYWNpdHkgKTtcXG4gfVxcbiBlbHNlIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCggcmdiQiwgb3BhY2l0eSApO1xcbiB9XFxufVxcbkBlbmRcIjtcclxuIiwiaW1wb3J0IGNvbG9yYWRqdXN0RXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2NvbG9yYWRqdXN0Lmdsc2wuanMnO1xyXG5pbXBvcnQgYmx1ckVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9ibHVyLmdsc2wuanMnO1xyXG5pbXBvcnQgbHVtRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2x1bS5nbHNsLmpzJztcclxuaW1wb3J0IGx1dEVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9sdXQuZ2xzbC5qcyc7XHJcbmltcG9ydCB2aWdlbnR0ZUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci92aWduZXR0ZS5nbHNsLmpzJztcclxuaW1wb3J0IG91dHB1dEVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9vdXRwdXQuZ2xzbC5qcyc7XHJcbmltcG9ydCBicmlnaHRFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvYnJpZ2h0Lmdsc2wuanMnO1xyXG5pbXBvcnQgZG93bnNhbXBsZUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9kb3duc2FtcGxlLmdsc2wuanMnO1xyXG5pbXBvcnQgdXBzYW1wbGVFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvdXBzYW1wbGUuZ2xzbC5qcyc7XHJcbmltcG9ydCBoZHJFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvaGRyLmdsc2wuanMnO1xyXG5pbXBvcnQgbGVuc2ZsYXJlRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2xlbnNmbGFyZS5nbHNsLmpzJztcclxuaW1wb3J0IGJsZW5kRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2JsZW5kLmdsc2wuanMnO1xyXG5pbXBvcnQgZnhhYUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9meGFhLmdsc2wuanMnO1xyXG4vLyBpbXBvcnQgZnhhYTNFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvZnhhYTMuZ2xzbC5qcyc7XHJcblxyXG4vLyBUT0RPIE11c3QgZXhwb3J0IGEgbW9kdWxlIGFuZCBiZSB1c2VkIGluIHRoZSBvdGhlciBtb2R1bGVzLiBPciBpdCB3aWxsIGJlIHRyZWUgc2hha2VkXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKFNoYWRlcikge1xyXG4gICAgLy8gU29tZSBidWlsZCBpbiBzaGFkZXJzXHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGNvbG9yYWRqdXN0RXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGJsdXJFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10obHVtRXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGx1dEVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXSh2aWdlbnR0ZUVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShvdXRwdXRFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10oYnJpZ2h0RXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGRvd25zYW1wbGVFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10odXBzYW1wbGVFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10oaGRyRXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGxlbnNmbGFyZUVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShibGVuZEVzc2wpO1xyXG5cclxuICAgIFNoYWRlclsnaW1wb3J0J10oZnhhYUVzc2wpO1xyXG5cclxufSIsImltcG9ydCB1dGlsIGZyb20gJy4vY29yZS91dGlsJztcclxuaW1wb3J0IENvbXBvc2l0b3IgZnJvbSAnLi9jb21wb3NpdG9yL0NvbXBvc2l0b3InO1xyXG5pbXBvcnQgQ29tcG9TY2VuZU5vZGUgZnJvbSAnLi9jb21wb3NpdG9yL1NjZW5lTm9kZSc7XHJcbmltcG9ydCBDb21wb1RleHR1cmVOb2RlIGZyb20gJy4vY29tcG9zaXRvci9UZXh0dXJlTm9kZSc7XHJcbmltcG9ydCBDb21wb0ZpbHRlck5vZGUgZnJvbSAnLi9jb21wb3NpdG9yL0ZpbHRlck5vZGUnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4vU2hhZGVyJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuL1RleHR1cmVDdWJlJztcclxuXHJcbmltcG9ydCByZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yIGZyb20gJy4vc2hhZGVyL3JlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3InO1xyXG5cclxucmVnaXN0ZXJCdWlsdGluQ29tcG9zaXRvcihTaGFkZXIpO1xyXG5cclxudmFyIHNoYWRlclNvdXJjZVJlZyA9IC9eI3NvdXJjZVxcKCguKj8pXFwpLztcclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LmNyZWF0ZUNvbXBvc2l0b3JcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBqc29uXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHJldHVybiB7Y2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3J9XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVDb21wb3NpdG9yKGpzb24sIG9wdHMpIHtcclxuICAgIHZhciBjb21wb3NpdG9yID0gbmV3IENvbXBvc2l0b3IoKTtcclxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG5cclxuICAgIHZhciBsaWIgPSB7XHJcbiAgICAgICAgdGV4dHVyZXM6IHt9LFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IHt9XHJcbiAgICB9O1xyXG4gICAgdmFyIGFmdGVyTG9hZCA9IGZ1bmN0aW9uKHNoYWRlckxpYiwgdGV4dHVyZUxpYikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwganNvbi5ub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbm9kZUluZm8gPSBqc29uLm5vZGVzW2ldO1xyXG4gICAgICAgICAgICB2YXIgbm9kZSA9IGNyZWF0ZU5vZGUobm9kZUluZm8sIGxpYiwgb3B0cyk7XHJcbiAgICAgICAgICAgIGlmIChub2RlKSB7XHJcbiAgICAgICAgICAgICAgICBjb21wb3NpdG9yLmFkZE5vZGUobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGZvciAodmFyIG5hbWUgaW4ganNvbi5wYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgdmFyIHBhcmFtSW5mbyA9IGpzb24ucGFyYW1ldGVyc1tuYW1lXTtcclxuICAgICAgICBsaWIucGFyYW1ldGVyc1tuYW1lXSA9IGNvbnZlcnRQYXJhbWV0ZXIocGFyYW1JbmZvKTtcclxuICAgIH1cclxuICAgIC8vIFRPRE8gbG9hZCB0ZXh0dXJlIGFzeW5jaHJvbm91c1xyXG4gICAgbG9hZFRleHR1cmVzKGpzb24sIGxpYiwgb3B0cywgZnVuY3Rpb24odGV4dHVyZUxpYikge1xyXG4gICAgICAgIGxpYi50ZXh0dXJlcyA9IHRleHR1cmVMaWI7XHJcbiAgICAgICAgYWZ0ZXJMb2FkKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gY29tcG9zaXRvcjtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlTm9kZShub2RlSW5mbywgbGliLCBvcHRzKSB7XHJcbiAgICB2YXIgdHlwZSA9IG5vZGVJbmZvLnR5cGUgfHwgJ2ZpbHRlcic7XHJcbiAgICB2YXIgc2hhZGVyU291cmNlO1xyXG4gICAgdmFyIGlucHV0cztcclxuICAgIHZhciBvdXRwdXRzO1xyXG5cclxuICAgIGlmICh0eXBlID09PSAnZmlsdGVyJykge1xyXG4gICAgICAgIHZhciBzaGFkZXJFeHAgPSBub2RlSW5mby5zaGFkZXIudHJpbSgpO1xyXG4gICAgICAgIHZhciByZXMgPSBzaGFkZXJTb3VyY2VSZWcuZXhlYyhzaGFkZXJFeHApO1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgc2hhZGVyU291cmNlID0gU2hhZGVyLnNvdXJjZShyZXNbMV0udHJpbSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2hhZGVyRXhwLmNoYXJBdCgwKSA9PT0gJyMnKSB7XHJcbiAgICAgICAgICAgIHNoYWRlclNvdXJjZSA9IGxpYi5zaGFkZXJzW3NoYWRlckV4cC5zdWJzdHIoMSldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXNoYWRlclNvdXJjZSkge1xyXG4gICAgICAgICAgICBzaGFkZXJTb3VyY2UgPSBzaGFkZXJFeHA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghc2hhZGVyU291cmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5vZGVJbmZvLmlucHV0cykge1xyXG4gICAgICAgIGlucHV0cyA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gbm9kZUluZm8uaW5wdXRzKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZUluZm8uaW5wdXRzW25hbWVdID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgaW5wdXRzW25hbWVdID0gbm9kZUluZm8uaW5wdXRzW25hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaW5wdXRzW25hbWVdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGVJbmZvLmlucHV0c1tuYW1lXS5ub2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIHBpbjogbm9kZUluZm8uaW5wdXRzW25hbWVdLnBpblxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChub2RlSW5mby5vdXRwdXRzKSB7XHJcbiAgICAgICAgb3V0cHV0cyA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gbm9kZUluZm8ub3V0cHV0cykge1xyXG4gICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IG5vZGVJbmZvLm91dHB1dHNbbmFtZV07XHJcbiAgICAgICAgICAgIG91dHB1dHNbbmFtZV0gPSB7fTtcclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8uYXR0YWNobWVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRzW25hbWVdLmF0dGFjaG1lbnQgPSBvdXRwdXRJbmZvLmF0dGFjaG1lbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ua2VlcExhc3RGcmFtZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRzW25hbWVdLmtlZXBMYXN0RnJhbWUgPSBvdXRwdXRJbmZvLmtlZXBMYXN0RnJhbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ub3V0cHV0TGFzdEZyYW1lICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dHNbbmFtZV0ub3V0cHV0TGFzdEZyYW1lID0gb3V0cHV0SW5mby5vdXRwdXRMYXN0RnJhbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ucGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0c1tuYW1lXS5wYXJhbWV0ZXJzID0gY29udmVydFBhcmFtZXRlcihvdXRwdXRJbmZvLnBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIG5vZGU7XHJcbiAgICBpZiAodHlwZSA9PT0gJ3NjZW5lJykge1xyXG4gICAgICAgIG5vZGUgPSBuZXcgQ29tcG9TY2VuZU5vZGUoe1xyXG4gICAgICAgICAgICBuYW1lOiBub2RlSW5mby5uYW1lLFxyXG4gICAgICAgICAgICBzY2VuZTogb3B0cy5zY2VuZSxcclxuICAgICAgICAgICAgY2FtZXJhOiBvcHRzLmNhbWVyYSxcclxuICAgICAgICAgICAgb3V0cHV0czogb3V0cHV0c1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ3RleHR1cmUnKSB7XHJcbiAgICAgICAgbm9kZSA9IG5ldyBDb21wb1RleHR1cmVOb2RlKHtcclxuICAgICAgICAgICAgbmFtZTogbm9kZUluZm8ubmFtZSxcclxuICAgICAgICAgICAgb3V0cHV0czogb3V0cHV0c1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8gRGVmYXVsdCBpcyBmaWx0ZXJcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIG5vZGUgPSBuZXcgQ29tcG9GaWx0ZXJOb2RlKHtcclxuICAgICAgICAgICAgbmFtZTogbm9kZUluZm8ubmFtZSxcclxuICAgICAgICAgICAgc2hhZGVyOiBzaGFkZXJTb3VyY2UsXHJcbiAgICAgICAgICAgIGlucHV0czogaW5wdXRzLFxyXG4gICAgICAgICAgICBvdXRwdXRzOiBvdXRwdXRzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAobm9kZSkge1xyXG4gICAgICAgIGlmIChub2RlSW5mby5wYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gbm9kZUluZm8ucGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IG5vZGVJbmZvLnBhcmFtZXRlcnNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWwuY2hhckF0KDApID09PSAnIycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gbGliLnRleHR1cmVzW3ZhbC5zdWJzdHIoMSldO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5vbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZWZvcmVyZW5kZXInLCBjcmVhdGVTaXplU2V0SGFuZGxlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCB0cnlDb252ZXJ0RXhwcih2YWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUub24oJ2JlZm9yZXJlbmRlcicsIHZhbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBub2RlLnNldFBhcmFtZXRlcihuYW1lLCB2YWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlSW5mby5kZWZpbmVzICYmIG5vZGUucGFzcykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIG5vZGVJbmZvLmRlZmluZXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBub2RlSW5mby5kZWZpbmVzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgbm9kZS5wYXNzLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCBuYW1lLCB2YWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vZGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRXaWR0aEZ1bmMod2lkdGgsIGhlaWdodCkge1xyXG4gICAgcmV0dXJuIHdpZHRoO1xyXG59XHJcbmZ1bmN0aW9uIGRlZmF1bHRIZWlnaHRGdW5jKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHJldHVybiBoZWlnaHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbnZlcnRQYXJhbWV0ZXIocGFyYW1JbmZvKSB7XHJcbiAgICB2YXIgcGFyYW0gPSB7fTtcclxuICAgIGlmICghcGFyYW1JbmZvKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcmFtO1xyXG4gICAgfVxyXG4gICAgWyd0eXBlJywgJ21pbkZpbHRlcicsICdtYWdGaWx0ZXInLCAnd3JhcFMnLCAnd3JhcFQnLCAnZmxpcFknLCAndXNlTWlwbWFwJ11cclxuICAgICAgICAuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWwgPSBwYXJhbUluZm9bbmFtZV07XHJcbiAgICAgICAgICAgIGlmICh2YWwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgLy8gQ29udmVydCBzdHJpbmcgdG8gZW51bVxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gVGV4dHVyZVt2YWxdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcGFyYW1bbmFtZV0gPSB2YWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB2YXIgc2l6ZVNjYWxlID0gcGFyYW1JbmZvLnNjYWxlIHx8IDE7XHJcbiAgICBbJ3dpZHRoJywgJ2hlaWdodCddXHJcbiAgICAgICAgLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICAgICAgICBpZiAocGFyYW1JbmZvW25hbWVdICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBwYXJhbUluZm9bbmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtW25hbWVdID0gY3JlYXRlU2l6ZVBhcnNlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgdHJ5Q29udmVydEV4cHIodmFsKSwgc2l6ZVNjYWxlXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtW25hbWVdID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICBpZiAoIXBhcmFtLndpZHRoKSB7XHJcbiAgICAgICAgcGFyYW0ud2lkdGggPSBkZWZhdWx0V2lkdGhGdW5jO1xyXG4gICAgfVxyXG4gICAgaWYgKCFwYXJhbS5oZWlnaHQpIHtcclxuICAgICAgICBwYXJhbS5oZWlnaHQgPSBkZWZhdWx0SGVpZ2h0RnVuYztcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyYW1JbmZvLnVzZU1pcG1hcCAhPSBudWxsKSB7XHJcbiAgICAgICAgcGFyYW0udXNlTWlwbWFwID0gcGFyYW1JbmZvLnVzZU1pcG1hcDtcclxuICAgIH1cclxuICAgIHJldHVybiBwYXJhbTtcclxufVxyXG5cclxuZnVuY3Rpb24gbG9hZFRleHR1cmVzKGpzb24sIGxpYiwgb3B0cywgY2FsbGJhY2spIHtcclxuICAgIGlmICghanNvbi50ZXh0dXJlcykge1xyXG4gICAgICAgIGNhbGxiYWNrKHt9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgdGV4dHVyZXMgPSB7fTtcclxuICAgIHZhciBsb2FkaW5nID0gMDtcclxuXHJcbiAgICB2YXIgY2JkID0gZmFsc2U7XHJcbiAgICB2YXIgdGV4dHVyZVJvb3RQYXRoID0gb3B0cy50ZXh0dXJlUm9vdFBhdGg7XHJcbiAgICB1dGlsLmVhY2goanNvbi50ZXh0dXJlcywgZnVuY3Rpb24odGV4dHVyZUluZm8sIG5hbWUpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZTtcclxuICAgICAgICB2YXIgcGF0aCA9IHRleHR1cmVJbmZvLnBhdGg7XHJcbiAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSBjb252ZXJ0UGFyYW1ldGVyKHRleHR1cmVJbmZvLnBhcmFtZXRlcnMpO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGgpICYmIHBhdGgubGVuZ3RoID09PSA2KSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlUm9vdFBhdGgpIHtcclxuICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoLm1hcChmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHV0aWwucmVsYXRpdmUyYWJzb2x1dGUoaXRlbSwgdGV4dHVyZVJvb3RQYXRoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZUN1YmUocGFyYW1ldGVycyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlUm9vdFBhdGgpIHtcclxuICAgICAgICAgICAgICAgIHBhdGggPSB1dGlsLnJlbGF0aXZlMmFic29sdXRlKHBhdGgsIHRleHR1cmVSb290UGF0aCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQocGFyYW1ldGVycyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0ZXh0dXJlLmxvYWQocGF0aCk7XHJcbiAgICAgICAgbG9hZGluZysrO1xyXG4gICAgICAgIHRleHR1cmUub25jZSgnc3VjY2VzcycsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB0ZXh0dXJlc1tuYW1lXSA9IHRleHR1cmU7XHJcbiAgICAgICAgICAgIGxvYWRpbmctLTtcclxuICAgICAgICAgICAgaWYgKGxvYWRpbmcgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHRleHR1cmVzKTtcclxuICAgICAgICAgICAgICAgIGNiZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChsb2FkaW5nID09PSAwICYmICFjYmQpIHtcclxuICAgICAgICBjYWxsYmFjayh0ZXh0dXJlcyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVNpemVTZXRIYW5kbGVyKG5hbWUsIGV4cHJGdW5jKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgLy8gUEVORElORyB2aWV3cG9ydCBzaXplIG9yIHdpbmRvdyBzaXplXHJcbiAgICAgICAgdmFyIGRwciA9IHJlbmRlcmVyLmdldERldmljZVBpeGVsUmF0aW8oKTtcclxuICAgICAgICAvLyBQRU5ESU5HIElmIG11bHRpcGx5IGRwciA/XHJcbiAgICAgICAgdmFyIHdpZHRoID0gcmVuZGVyZXIuZ2V0V2lkdGgoKTtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gcmVuZGVyZXIuZ2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGV4cHJGdW5jKHdpZHRoLCBoZWlnaHQsIGRwcik7XHJcbiAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXIobmFtZSwgcmVzdWx0KTtcclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVNpemVQYXJzZXIobmFtZSwgZXhwckZ1bmMsIHNjYWxlKSB7XHJcbiAgICBzY2FsZSA9IHNjYWxlIHx8IDE7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIGRwciA9IHJlbmRlcmVyLmdldERldmljZVBpeGVsUmF0aW8oKTtcclxuICAgICAgICB2YXIgd2lkdGggPSByZW5kZXJlci5nZXRXaWR0aCgpICogc2NhbGU7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IHJlbmRlcmVyLmdldEhlaWdodCgpICogc2NhbGU7XHJcbiAgICAgICAgcmV0dXJuIGV4cHJGdW5jKHdpZHRoLCBoZWlnaHQsIGRwcik7XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiB0cnlDb252ZXJ0RXhwcihzdHJpbmcpIHtcclxuICAgIC8vIFBFTkRJTkdcclxuICAgIHZhciBleHByUmVzID0gL15leHByXFwoKC4qKVxcKSQvLmV4ZWMoc3RyaW5nKTtcclxuICAgIGlmIChleHByUmVzKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIGZ1bmMgPSBuZXcgRnVuY3Rpb24oJ3dpZHRoJywgJ2hlaWdodCcsICdkcHInLCAncmV0dXJuICcgKyBleHByUmVzWzFdKTtcclxuICAgICAgICAgICAgLy8gVHJ5IHJ1biB0XHJcbiAgICAgICAgICAgIGZ1bmMoMSwgMSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZnVuYztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGV4cHJlc3Npb24uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVDb21wb3NpdG9yO1xyXG4iLCIvLyBERVBSRUNBVEVEXHJcbmltcG9ydCBjcmVhdGVDb21wb3NpdG9yIGZyb20gJy4uL2NyZWF0ZUNvbXBvc2l0b3InO1xyXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVDb21wb3NpdG9yOyIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuI2lmIGRlZmluZWQoU0VDT05EX1BBU1MpIHx8IGRlZmluZWQoRklSU1RfUEFTUylcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZCA6IFRFWENPT1JEXzA7XFxudW5pZm9ybSB2ZWMyIHV2UmVwZWF0O1xcbnVuaWZvcm0gdmVjMiB1dk9mZnNldDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG4jZW5kaWZcXG4jaWZkZWYgRklSU1RfUEFTU1xcbnVuaWZvcm0gbWF0NCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgOiBXT1JMRElOVkVSU0VUUkFOU1BPU0U7XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxudmFyeWluZyB2ZWMzIHZfTm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbCA6IE5PUk1BTDtcXG5hdHRyaWJ1dGUgdmVjNCB0YW5nZW50IDogVEFOR0VOVDtcXG52YXJ5aW5nIHZlYzMgdl9UYW5nZW50O1xcbnZhcnlpbmcgdmVjMyB2X0JpdGFuZ2VudDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG4jaWZkZWYgVEhJUkRfUEFTU1xcbnVuaWZvcm0gbWF0NCBwcmV2V29ybGRWaWV3UHJvamVjdGlvbjtcXG52YXJ5aW5nIHZlYzQgdl9WaWV3UG9zaXRpb247XFxudmFyeWluZyB2ZWM0IHZfUHJldlZpZXdQb3NpdGlvbjtcXG4jaWZkZWYgU0tJTk5JTkdcXG4jaWZkZWYgVVNFX1NLSU5fTUFUUklDRVNfVEVYVFVSRVxcbnVuaWZvcm0gc2FtcGxlcjJEIHByZXZTa2luTWF0cmljZXNUZXh0dXJlO1xcbm1hdDQgZ2V0UHJldlNraW5NYXRyaXgoZmxvYXQgaWR4KSB7XFxuIHJldHVybiBnZXRTa2luTWF0cml4KHByZXZTa2luTWF0cmljZXNUZXh0dXJlLCBpZHgpO1xcbn1cXG4jZWxzZVxcbnVuaWZvcm0gbWF0NCBwcmV2U2tpbk1hdHJpeFtKT0lOVF9DT1VOVF07XFxubWF0NCBnZXRQcmV2U2tpbk1hdHJpeChmbG9hdCBpZHgpIHtcXG4gcmV0dXJuIHByZXZTa2luTWF0cml4W2ludChpZHgpXTtcXG59XFxuI2VuZGlmXFxuI2VuZGlmXFxuI2VuZGlmXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuIHZlYzMgcHJldlNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiNpZmRlZiBGSVJTVF9QQVNTXFxuIHZlYzMgc2tpbm5lZE5vcm1hbCA9IG5vcm1hbDtcXG4gdmVjMyBza2lubmVkVGFuZ2VudCA9IHRhbmdlbnQueHl6O1xcbiBib29sIGhhc1RhbmdlbnQgPSBkb3QodGFuZ2VudCwgdGFuZ2VudCkgPiAwLjA7XFxuI2VuZGlmXFxuI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiAjaWZkZWYgRklSU1RfUEFTU1xcbiBza2lubmVkTm9ybWFsID0gKHNraW5NYXRyaXhXUyAqIHZlYzQobm9ybWFsLCAwLjApKS54eXo7XFxuIGlmIChoYXNUYW5nZW50KSB7XFxuIHNraW5uZWRUYW5nZW50ID0gKHNraW5NYXRyaXhXUyAqIHZlYzQodGFuZ2VudC54eXosIDAuMCkpLnh5ejtcXG4gfVxcbiAjZW5kaWZcXG4gI2lmZGVmIFRISVJEX1BBU1NcXG4ge1xcbiBtYXQ0IHByZXZTa2luTWF0cml4V1MgPSBnZXRQcmV2U2tpbk1hdHJpeChqb2ludC54KSAqIHdlaWdodC54O1xcbiBpZiAod2VpZ2h0LnkgPiAxZS00KSB7IHByZXZTa2luTWF0cml4V1MgKz0gZ2V0UHJldlNraW5NYXRyaXgoam9pbnQueSkgKiB3ZWlnaHQueTsgfVxcbiBpZiAod2VpZ2h0LnogPiAxZS00KSB7IHByZXZTa2luTWF0cml4V1MgKz0gZ2V0UHJldlNraW5NYXRyaXgoam9pbnQueikgKiB3ZWlnaHQuejsgfVxcbiBmbG9hdCB3ZWlnaHRXID0gMS4wLXdlaWdodC54LXdlaWdodC55LXdlaWdodC56O1xcbiBpZiAod2VpZ2h0VyA+IDFlLTQpIHsgcHJldlNraW5NYXRyaXhXUyArPSBnZXRQcmV2U2tpbk1hdHJpeChqb2ludC53KSAqIHdlaWdodFc7IH1cXG4gcHJldlNraW5uZWRQb3NpdGlvbiA9IChwcmV2U2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiB9XFxuICNlbmRpZlxcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKFNFQ09ORF9QQVNTKSB8fCBkZWZpbmVkKEZJUlNUX1BBU1MpXFxuIHZfVGV4Y29vcmQgPSB0ZXhjb29yZCAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxuI2VuZGlmXFxuI2lmZGVmIEZJUlNUX1BBU1NcXG4gdl9Ob3JtYWwgPSBub3JtYWxpemUoKHdvcmxkSW52ZXJzZVRyYW5zcG9zZSAqIHZlYzQoc2tpbm5lZE5vcm1hbCwgMC4wKSkueHl6KTtcXG4gaWYgKGhhc1RhbmdlbnQpIHtcXG4gdl9UYW5nZW50ID0gbm9ybWFsaXplKCh3b3JsZEludmVyc2VUcmFuc3Bvc2UgKiB2ZWM0KHNraW5uZWRUYW5nZW50LCAwLjApKS54eXopO1xcbiB2X0JpdGFuZ2VudCA9IG5vcm1hbGl6ZShjcm9zcyh2X05vcm1hbCwgdl9UYW5nZW50KSAqIHRhbmdlbnQudyk7XFxuIH1cXG4gdl9Xb3JsZFBvc2l0aW9uID0gKHdvcmxkICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4jaWZkZWYgVEhJUkRfUEFTU1xcbiB2X1ZpZXdQb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG4gdl9QcmV2Vmlld1Bvc2l0aW9uID0gcHJldldvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHByZXZTa2lubmVkUG9zaXRpb24sIDEuMCk7XFxuI2VuZGlmXFxuIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIxLmZyYWdtZW50XFxudW5pZm9ybSBtYXQ0IHZpZXdJbnZlcnNlIDogVklFV0lOVkVSU0U7XFxudW5pZm9ybSBmbG9hdCBnbG9zc2luZXNzO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZhcnlpbmcgdmVjMyB2X05vcm1hbDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcXG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlTWFwO1xcbnZhcnlpbmcgdmVjMyB2X1RhbmdlbnQ7XFxudmFyeWluZyB2ZWMzIHZfQml0YW5nZW50O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHJvdWdoR2xvc3NNYXA7XFxudW5pZm9ybSBib29sIHVzZVJvdWdoR2xvc3NNYXA7XFxudW5pZm9ybSBib29sIHVzZVJvdWdobmVzcztcXG51bmlmb3JtIGJvb2wgZG91YmxlU2lkZWQ7XFxudW5pZm9ybSBmbG9hdCBhbHBoYUN1dG9mZjogMC4wO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE6IDEuMDtcXG51bmlmb3JtIGludCByb3VnaEdsb3NzQ2hhbm5lbDogMDtcXG5mbG9hdCBpbmRleGluZ1RleGVsKGluIHZlYzQgdGV4ZWwsIGluIGludCBpZHgpIHtcXG4gaWYgKGlkeCA9PSAzKSByZXR1cm4gdGV4ZWwuYTtcXG4gZWxzZSBpZiAoaWR4ID09IDEpIHJldHVybiB0ZXhlbC5nO1xcbiBlbHNlIGlmIChpZHggPT0gMikgcmV0dXJuIHRleGVsLmI7XFxuIGVsc2UgcmV0dXJuIHRleGVsLnI7XFxufVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIE4gPSB2X05vcm1hbDtcXG4gaWYgKGRvdWJsZVNpZGVkKSB7XFxuIHZlYzMgZXllUG9zID0gdmlld0ludmVyc2VbM10ueHl6O1xcbiB2ZWMzIFYgPSBleWVQb3MgLSB2X1dvcmxkUG9zaXRpb247XFxuIGlmIChkb3QoTiwgVikgPCAwLjApIHtcXG4gTiA9IC1OO1xcbiB9XFxuIH1cXG4gaWYgKGFscGhhQ3V0b2ZmID4gMC4wKSB7XFxuIGZsb2F0IGEgPSB0ZXh0dXJlMkQoZGlmZnVzZU1hcCwgdl9UZXhjb29yZCkuYSAqIGFscGhhO1xcbiBpZiAoYSA8IGFscGhhQ3V0b2ZmKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4gfVxcbiBpZiAoZG90KHZfVGFuZ2VudCwgdl9UYW5nZW50KSA+IDAuMCkge1xcbiB2ZWMzIG5vcm1hbFRleGVsID0gdGV4dHVyZTJEKG5vcm1hbE1hcCwgdl9UZXhjb29yZCkueHl6O1xcbiBpZiAoZG90KG5vcm1hbFRleGVsLCBub3JtYWxUZXhlbCkgPiAwLjApIHsgTiA9IG5vcm1hbFRleGVsICogMi4wIC0gMS4wO1xcbiBtYXQzIHRibiA9IG1hdDModl9UYW5nZW50LCB2X0JpdGFuZ2VudCwgdl9Ob3JtYWwpO1xcbiBOID0gbm9ybWFsaXplKHRibiAqIE4pO1xcbiB9XFxuIH1cXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IChOICsgMS4wKSAqIDAuNTtcXG4gZmxvYXQgZyA9IGdsb3NzaW5lc3M7XFxuIGlmICh1c2VSb3VnaEdsb3NzTWFwKSB7XFxuIGZsb2F0IGcyID0gaW5kZXhpbmdUZXhlbCh0ZXh0dXJlMkQocm91Z2hHbG9zc01hcCwgdl9UZXhjb29yZCksIHJvdWdoR2xvc3NDaGFubmVsKTtcXG4gaWYgKHVzZVJvdWdobmVzcykge1xcbiBnMiA9IDEuMCAtIGcyO1xcbiB9XFxuIGcgPSBjbGFtcChnMiArIChnIC0gMC41KSAqIDIuMCwgMC4wLCAxLjApO1xcbiB9XFxuIGdsX0ZyYWdDb2xvci5hID0gZyArIDAuMDA1O1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIyLmZyYWdtZW50XFxudW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZU1hcDtcXG51bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7XFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgbWV0YWxuZXNzO1xcbnVuaWZvcm0gYm9vbCB1c2VNZXRhbG5lc3NNYXA7XFxudW5pZm9ybSBib29sIGxpbmVhcjtcXG51bmlmb3JtIGZsb2F0IGFscGhhQ3V0b2ZmOiAwLjA7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTogMS4wO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnNyZ2JcXG52b2lkIG1haW4oKVxcbntcXG4gZmxvYXQgbSA9IG1ldGFsbmVzcztcXG4gaWYgKHVzZU1ldGFsbmVzc01hcCkge1xcbiB2ZWM0IG1ldGFsbmVzc1RleGVsID0gdGV4dHVyZTJEKG1ldGFsbmVzc01hcCwgdl9UZXhjb29yZCk7XFxuIG0gPSBjbGFtcChtZXRhbG5lc3NUZXhlbC5yICsgKG0gKiAyLjAgLSAxLjApLCAwLjAsIDEuMCk7XFxuIH1cXG4gdmVjNCB0ZXhlbCA9IHRleHR1cmUyRChkaWZmdXNlTWFwLCB2X1RleGNvb3JkKTtcXG4gaWYgKGxpbmVhcikge1xcbiB0ZXhlbCA9IHNSR0JUb0xpbmVhcih0ZXhlbCk7XFxuIH1cXG4gaWYgKGFscGhhQ3V0b2ZmID4gMC4wKSB7XFxuIGZsb2F0IGEgPSB0ZXhlbC5hICogYWxwaGE7XFxuIGlmIChhIDwgYWxwaGFDdXRvZmYpIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiB9XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSB0ZXhlbC5yZ2IgKiBjb2xvcjtcXG4gZ2xfRnJhZ0NvbG9yLmEgPSBtICsgMC4wMDU7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuZGVmZXJyZWQuZ2J1ZmZlcjMuZnJhZ21lbnRcXG51bmlmb3JtIGJvb2wgZmlyc3RSZW5kZXI7XFxudmFyeWluZyB2ZWM0IHZfVmlld1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCB2X1ByZXZWaWV3UG9zaXRpb247XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzIgYSA9IHZfVmlld1Bvc2l0aW9uLnh5IC8gdl9WaWV3UG9zaXRpb24udztcXG4gdmVjMiBiID0gdl9QcmV2Vmlld1Bvc2l0aW9uLnh5IC8gdl9QcmV2Vmlld1Bvc2l0aW9uLnc7XFxuIGlmIChmaXJzdFJlbmRlcikge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuIH1cXG4gZWxzZSB7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoKGEgLSBiKSAqIDAuNSArIDAuNSwgMC4wLCAxLjApO1xcbiB9XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuZGVmZXJyZWQuZ2J1ZmZlci5kZWJ1Z1xcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmU0O1xcbnVuaWZvcm0gaW50IGRlYnVnOiAwO1xcbnZvaWQgbWFpbiAoKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiBpZiAoZGVidWcgPT0gMCkge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KE4sIDEuMCk7XFxuIH1cXG4gZWxzZSBpZiAoZGVidWcgPT0gMSkge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMoeiksIDEuMCk7XFxuIH1cXG4gZWxzZSBpZiAoZGVidWcgPT0gMikge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbiB9XFxuIGVsc2UgaWYgKGRlYnVnID09IDMpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGdsb3NzaW5lc3MpLCAxLjApO1xcbiB9XFxuIGVsc2UgaWYgKGRlYnVnID09IDQpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKG1ldGFsbmVzcyksIDEuMCk7XFxuIH1cXG4gZWxzZSBpZiAoZGVidWcgPT0gNSkge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGFsYmVkbywgMS4wKTtcXG4gfVxcbiBlbHNlIHtcXG4gdmVjNCBjb2xvciA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTQsIHV2KTtcXG4gY29sb3IucmcgLT0gMC41O1xcbiBjb2xvci5yZyAqPSAyLjA7XFxuIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbiB9XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMTtcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTI7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUzO1xcbnVuaWZvcm0gdmVjMiB3aW5kb3dTaXplOiBXSU5ET1dfU0laRTtcXG51bmlmb3JtIHZlYzQgdmlld3BvcnQ6IFZJRVdQT1JUO1xcbnVuaWZvcm0gbWF0NCB2aWV3UHJvamVjdGlvbkludjtcXG4jaWZkZWYgREVQVEhfRU5DT0RFRFxcbkBpbXBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbiNlbmRpZlxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHkgLyB3aW5kb3dTaXplO1xcbiB2ZWMyIHV2MiA9IChnbF9GcmFnQ29vcmQueHkgLSB2aWV3cG9ydC54eSkgLyB2aWV3cG9ydC56dztcXG4gdmVjNCB0ZXhlbDEgPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUxLCB1dik7XFxuIHZlYzQgdGV4ZWwzID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMywgdXYpO1xcbiBpZiAoZG90KHRleGVsMS5yZ2IsIHZlYzMoMS4wKSkgPT0gMC4wKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4gZmxvYXQgZ2xvc3NpbmVzcyA9IHRleGVsMS5hO1xcbiBmbG9hdCBtZXRhbG5lc3MgPSB0ZXhlbDMuYTtcXG4gdmVjMyBOID0gdGV4ZWwxLnJnYiAqIDIuMCAtIDEuMDtcXG4gZmxvYXQgeiA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTIsIHV2KS5yICogMi4wIC0gMS4wO1xcbiB2ZWMyIHh5ID0gdXYyICogMi4wIC0gMS4wO1xcbiB2ZWM0IHByb2plY3RlZFBvcyA9IHZlYzQoeHksIHosIDEuMCk7XFxuIHZlYzQgcDQgPSB2aWV3UHJvamVjdGlvbkludiAqIHByb2plY3RlZFBvcztcXG4gdmVjMyBwb3NpdGlvbiA9IHA0Lnh5eiAvIHA0Lnc7XFxuIHZlYzMgYWxiZWRvID0gdGV4ZWwzLnJnYjtcXG4gdmVjMyBkaWZmdXNlQ29sb3IgPSBhbGJlZG8gKiAoMS4wIC0gbWV0YWxuZXNzKTtcXG4gdmVjMyBzcGVjdWxhckNvbG9yID0gbWl4KHZlYzMoMC4wNCksIGFsYmVkbywgbWV0YWxuZXNzKTtcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxuZmxvYXQgRF9QaG9uZyhpbiBmbG9hdCBnLCBpbiBmbG9hdCBuZGgpIHtcXG4gZmxvYXQgYSA9IHBvdyg4MTkyLjAsIGcpO1xcbiByZXR1cm4gKGEgKyAyLjApIC8gOC4wICogcG93KG5kaCwgYSk7XFxufVxcbmZsb2F0IERfR0dYKGluIGZsb2F0IGcsIGluIGZsb2F0IG5kaCkge1xcbiBmbG9hdCByID0gMS4wIC0gZztcXG4gZmxvYXQgYSA9IHIgKiByO1xcbiBmbG9hdCB0bXAgPSBuZGggKiBuZGggKiAoYSAtIDEuMCkgKyAxLjA7XFxuIHJldHVybiBhIC8gKDMuMTQxNTkyNiAqIHRtcCAqIHRtcCk7XFxufVxcbnZlYzMgRl9TY2hsaWNrKGluIGZsb2F0IG5kdiwgdmVjMyBzcGVjKSB7XFxuIHJldHVybiBzcGVjICsgKDEuMCAtIHNwZWMpICogcG93KDEuMCAtIG5kdiwgNS4wKTtcXG59XFxudmVjMyBsaWdodEVxdWF0aW9uKFxcbiBpbiB2ZWMzIGxpZ2h0Q29sb3IsIGluIHZlYzMgZGlmZnVzZUNvbG9yLCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsXFxuIGluIGZsb2F0IG5kbCwgaW4gZmxvYXQgbmRoLCBpbiBmbG9hdCBuZHYsIGluIGZsb2F0IGdcXG4pXFxue1xcbiByZXR1cm4gbmRsICogbGlnaHRDb2xvclxcbiAqIChkaWZmdXNlQ29sb3IgKyBEX1Bob25nKGcsIG5kaCkgKiBGX1NjaGxpY2sobmR2LCBzcGVjdWxhckNvbG9yKSk7XFxufVxcbkBlbmRcIjtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgUGFzcyBmcm9tICcuLi9jb21wb3NpdG9yL1Bhc3MnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgbWF0NCBmcm9tICcuLi9nbG1hdHJpeC9tYXQ0JztcclxuXHJcbmltcG9ydCBnYnVmZmVyRXNzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL2didWZmZXIuZ2xzbC5qcyc7XHJcbmltcG9ydCBjaHVua0Vzc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9jaHVuay5nbHNsLmpzJztcclxuXHJcblNoYWRlci5pbXBvcnQoZ2J1ZmZlckVzc2wpO1xyXG5TaGFkZXIuaW1wb3J0KGNodW5rRXNzbCk7XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVGaWxsQ2FudmFzKGNvbG9yKSB7XHJcbiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBjYW52YXMud2lkdGggPSBjYW52YXMuaGVpZ2h0ID0gMTtcclxuICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvciB8fCAnIzAwMCc7XHJcbiAgICBjdHguZmlsbFJlY3QoMCwgMCwgMSwgMSk7XHJcblxyXG4gICAgcmV0dXJuIGNhbnZhcztcclxufVxyXG5cclxuLy8gVE9ETyBzcGVjdWxhckNvbG9yXHJcbi8vIFRPRE8gUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRcclxuZnVuY3Rpb24gZ2V0R2V0VW5pZm9ybUhvb2sxKGRlZmF1bHROb3JtYWxNYXAsIGRlZmF1bHRSb3VnaG5lc3NNYXAsIGRlZmF1bHREaWZmdXNlTWFwKSB7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBnQnVmZmVyTWF0LCBzeW1ib2wpIHtcclxuICAgICAgICB2YXIgc3RhbmRhcmRNYXRlcmlhbCA9IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgaWYgKHN5bWJvbCA9PT0gJ2RvdWJsZVNpZGVkJykge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0RPVUJMRV9TSURFRCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd1dlJlcGVhdCcgfHwgc3ltYm9sID09PSAndXZPZmZzZXQnIHx8IHN5bWJvbCA9PT0gJ2FscGhhJykge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5nZXQoc3ltYm9sKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAnbm9ybWFsTWFwJykge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5nZXQoc3ltYm9sKSB8fCBkZWZhdWx0Tm9ybWFsTWFwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdkaWZmdXNlTWFwJykge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5nZXQoc3ltYm9sKSB8fCBkZWZhdWx0RGlmZnVzZU1hcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAnYWxwaGFDdXRvZmYnKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxyXG4gICAgICAgICAgICBpZiAoc3RhbmRhcmRNYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFscGhhQ3V0b2ZmID0gc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ2FscGhhQ3V0b2ZmJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWxwaGFDdXRvZmYgfHwgMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciB1c2VSb3VnaG5lc3NXb3JrZmxvdyA9IHN0YW5kYXJkTWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsICdVU0VfUk9VR0hORVNTJyk7XHJcbiAgICAgICAgICAgIHZhciByb3VnaEdsb3NzTWFwID0gdXNlUm91Z2huZXNzV29ya2Zsb3cgPyBzdGFuZGFyZE1hdGVyaWFsLmdldCgncm91Z2huZXNzTWFwJykgOiBzdGFuZGFyZE1hdGVyaWFsLmdldCgnZ2xvc3NpbmVzc01hcCcpO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnZ2xvc3NpbmVzcyc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZVJvdWdobmVzc1dvcmtmbG93ID8gKDEuMCAtIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdyb3VnaG5lc3MnKSkgOiBzdGFuZGFyZE1hdGVyaWFsLmdldCgnZ2xvc3NpbmVzcycpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncm91Z2hHbG9zc01hcCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvdWdoR2xvc3NNYXA7XHJcbiAgICAgICAgICAgICAgICBjYXNlICd1c2VSb3VnaEdsb3NzTWFwJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFyb3VnaEdsb3NzTWFwO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAndXNlUm91Z2huZXNzJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNlUm91Z2huZXNzV29ya2Zsb3c7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdyb3VnaEdsb3NzQ2hhbm5lbCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZVJvdWdobmVzc1dvcmtmbG93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc3RhbmRhcmRNYXRlcmlhbC5nZXREZWZpbmUoJ2ZyYWdtZW50JywgJ1JPVUdITkVTU19DSEFOTkVMJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGFuZGFyZE1hdGVyaWFsLmdldERlZmluZSgnZnJhZ21lbnQnLCAnR0xPU1NJTkVTU19DSEFOTkVMJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRHZXRVbmlmb3JtSG9vazIoZGVmYXVsdERpZmZ1c2VNYXAsIGRlZmF1bHRNZXRhbG5lc3NNYXApIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgZ0J1ZmZlck1hdCwgc3ltYm9sKSB7XHJcbiAgICAgICAgdmFyIHN0YW5kYXJkTWF0ZXJpYWwgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgICAgIHN3aXRjaCAoc3ltYm9sKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbG9yJzpcclxuICAgICAgICAgICAgY2FzZSAndXZSZXBlYXQnOlxyXG4gICAgICAgICAgICBjYXNlICd1dk9mZnNldCc6XHJcbiAgICAgICAgICAgIGNhc2UgJ2FscGhhJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1hdGVyaWFsLmdldChzeW1ib2wpO1xyXG4gICAgICAgICAgICBjYXNlICdtZXRhbG5lc3MnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdtZXRhbG5lc3MnKSB8fCAwO1xyXG4gICAgICAgICAgICBjYXNlICdkaWZmdXNlTWFwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1hdGVyaWFsLmdldChzeW1ib2wpIHx8IGRlZmF1bHREaWZmdXNlTWFwO1xyXG4gICAgICAgICAgICBjYXNlICdtZXRhbG5lc3NNYXAnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KHN5bWJvbCkgfHwgZGVmYXVsdE1ldGFsbmVzc01hcDtcclxuICAgICAgICAgICAgY2FzZSAndXNlTWV0YWxuZXNzTWFwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAhIXN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdtZXRhbG5lc3NNYXAnKTtcclxuICAgICAgICAgICAgY2FzZSAnbGluZWFyJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1hdGVyaWFsLmlzRGVmaW5lZCgnU1JHQl9ERUNPREUnKTtcclxuICAgICAgICAgICAgY2FzZSAnYWxwaGFDdXRvZmYnOlxyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBESUZGVVNFTUFQX0FMUEhBX0FMUEhBXHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhbmRhcmRNYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhbHBoYUN1dG9mZiA9IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdhbHBoYUN1dG9mZicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhbHBoYUN1dG9mZiB8fCAwLjA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMC4wO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHQnVmZmVyIGlzIHByb3ZpZGVkIGZvciBkZWZlcnJlZCByZW5kZXJpbmcgYW5kIFNTQU8sIFNTUiBwYXNzLlxyXG4gKiBJdCB3aWxsIGRvIHRocmVlIHBhc3NlcyByZW5kZXJpbmcgdG8gZm91ciB0YXJnZXQgdGV4dHVyZXMuIFNlZVxyXG4gKiArIHtAbGluayBjbGF5LmRlZmVycmVkLkdCdWZmZXIjZ2V0VGFyZ2V0VGV4dHVyZTF9XHJcbiAqICsge0BsaW5rIGNsYXkuZGVmZXJyZWQuR0J1ZmZlciNnZXRUYXJnZXRUZXh0dXJlMn1cclxuICogKyB7QGxpbmsgY2xheS5kZWZlcnJlZC5HQnVmZmVyI2dldFRhcmdldFRleHR1cmUzfVxyXG4gKiArIHtAbGluayBjbGF5LmRlZmVycmVkLkdCdWZmZXIjZ2V0VGFyZ2V0VGV4dHVyZTR9XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5kZWZlcnJlZC5HQnVmZmVyXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgR0J1ZmZlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgY29tbW9uVGV4dHVyZU9wdHMgPSB7XHJcbiAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgd3JhcFM6IFRleHR1cmUuQ0xBTVBfVE9fRURHRSxcclxuICAgICAgICB3cmFwVDogVGV4dHVyZS5DTEFNUF9UT19FREdFLFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmRlZmVycmVkLkdCdWZmZXIjICovIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIGdidWZmZXIgdGV4dHVyZSAxLlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVuYWJsZVRhcmdldFRleHR1cmUxOiB0cnVlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgZ2J1ZmZlciB0ZXh0dXJlIDIuXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW5hYmxlVGFyZ2V0VGV4dHVyZTI6IHRydWUsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBnYnVmZmVyIHRleHR1cmUgMy5cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbmFibGVUYXJnZXRUZXh0dXJlMzogdHJ1ZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIGdidWZmZXIgdGV4dHVyZSA0LlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVuYWJsZVRhcmdldFRleHR1cmU0OiBmYWxzZSxcclxuXHJcbiAgICAgICAgcmVuZGVyVHJhbnNwYXJlbnQ6IGZhbHNlLFxyXG5cclxuICAgICAgICBfZ0J1ZmZlclJlbmRlckxpc3Q6IFtdLFxyXG4gICAgICAgIC8vIC0gUjogbm9ybWFsLnhcclxuICAgICAgICAvLyAtIEc6IG5vcm1hbC55XHJcbiAgICAgICAgLy8gLSBCOiBub3JtYWwuelxyXG4gICAgICAgIC8vIC0gQTogZ2xvc3NpbmVzc1xyXG4gICAgICAgIF9nQnVmZmVyVGV4MTogbmV3IFRleHR1cmUyRChPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkhBTEZfRkxPQVRcclxuICAgICAgICB9LCBjb21tb25UZXh0dXJlT3B0cykpLFxyXG5cclxuICAgICAgICAvLyAtIFI6IGRlcHRoXHJcbiAgICAgICAgX2dCdWZmZXJUZXgyOiBuZXcgVGV4dHVyZTJEKE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICAvLyBmb3JtYXQ6IFRleHR1cmUuREVQVEhfQ09NUE9ORU5ULFxyXG4gICAgICAgICAgICAvLyB0eXBlOiBUZXh0dXJlLlVOU0lHTkVEX0lOVFxyXG5cclxuICAgICAgICAgICAgZm9ybWF0OiBUZXh0dXJlLkRFUFRIX1NURU5DSUwsXHJcbiAgICAgICAgICAgIHR5cGU6IFRleHR1cmUuVU5TSUdORURfSU5UXzI0XzhfV0VCR0xcclxuICAgICAgICB9LCBjb21tb25UZXh0dXJlT3B0cykpLFxyXG5cclxuICAgICAgICAvLyAtIFI6IGFsYmVkby5yXHJcbiAgICAgICAgLy8gLSBHOiBhbGJlZG8uZ1xyXG4gICAgICAgIC8vIC0gQjogYWxiZWRvLmJcclxuICAgICAgICAvLyAtIEE6IG1ldGFsbmVzc1xyXG4gICAgICAgIF9nQnVmZmVyVGV4MzogbmV3IFRleHR1cmUyRChjb21tb25UZXh0dXJlT3B0cyksXHJcblxyXG4gICAgICAgIF9nQnVmZmVyVGV4NDogbmV3IFRleHR1cmUyRChPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgLy8gRkxPQVQgVGV4dHVyZSBoYXMgYnVnIG9uIGlPUy4gaXMgSEFMRl9GTE9BVCBlbm91Z2g/XHJcbiAgICAgICAgICAgIHR5cGU6IFRleHR1cmUuSEFMRl9GTE9BVFxyXG4gICAgICAgIH0sIGNvbW1vblRleHR1cmVPcHRzKSksXHJcblxyXG4gICAgICAgIF9kZWZhdWx0Tm9ybWFsTWFwOiBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgaW1hZ2U6IGNyZWF0ZUZpbGxDYW52YXMoJyMwMDAnKVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIF9kZWZhdWx0Um91Z2huZXNzTWFwOiBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgaW1hZ2U6IGNyZWF0ZUZpbGxDYW52YXMoJyNmZmYnKVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIF9kZWZhdWx0TWV0YWxuZXNzTWFwOiBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgaW1hZ2U6IGNyZWF0ZUZpbGxDYW52YXMoJyNmZmYnKVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIF9kZWZhdWx0RGlmZnVzZU1hcDogbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjZmZmJylcclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgX2ZyYW1lQnVmZmVyOiBuZXcgRnJhbWVCdWZmZXIoKSxcclxuXHJcbiAgICAgICAgX2dCdWZmZXJNYXRlcmlhbDE6IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlci52ZXJ0ZXgnKSxcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlcjEuZnJhZ21lbnQnKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB2ZXJ0ZXhEZWZpbmVzOiB7XHJcbiAgICAgICAgICAgICAgICBGSVJTVF9QQVNTOiBudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZyYWdtZW50RGVmaW5lczoge1xyXG4gICAgICAgICAgICAgICAgRklSU1RfUEFTUzogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgX2dCdWZmZXJNYXRlcmlhbDI6IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlci52ZXJ0ZXgnKSxcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlcjIuZnJhZ21lbnQnKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB2ZXJ0ZXhEZWZpbmVzOiB7XHJcbiAgICAgICAgICAgICAgICBTRUNPTkRfUEFTUzogbnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmcmFnbWVudERlZmluZXM6IHtcclxuICAgICAgICAgICAgICAgIFNFQ09ORF9QQVNTOiBudWxsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBfZ0J1ZmZlck1hdGVyaWFsMzogbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgc2hhZGVyOiBuZXcgU2hhZGVyKFxyXG4gICAgICAgICAgICAgICAgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5nYnVmZmVyLnZlcnRleCcpLFxyXG4gICAgICAgICAgICAgICAgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5nYnVmZmVyMy5mcmFnbWVudCcpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHZlcnRleERlZmluZXM6IHtcclxuICAgICAgICAgICAgICAgIFRISVJEX1BBU1M6IG51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZnJhZ21lbnREZWZpbmVzOiB7XHJcbiAgICAgICAgICAgICAgICBUSElSRF9QQVNTOiBudWxsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgX2RlYnVnUGFzczogbmV3IFBhc3Moe1xyXG4gICAgICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5nYnVmZmVyLmRlYnVnJylcclxuICAgICAgICB9KVxyXG4gICAgfTtcclxufSwgLyoqIEBsZW5kcyBjbGF5LmRlZmVycmVkLkdCdWZmZXIjICove1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IEcgQnVmZmVyIHNpemUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcclxuICAgICAqL1xyXG4gICAgcmVzaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9nQnVmZmVyVGV4MS53aWR0aCA9PT0gd2lkdGhcclxuICAgICAgICAgICAgJiYgdGhpcy5fZ0J1ZmZlclRleDEuaGVpZ2h0ID09PSBoZWlnaHRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4MS53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXgxLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDIud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4Mi5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXgzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4NC53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXg0LmhlaWdodCA9IGhlaWdodDtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVE9ETyBpcyBkcHIgbmVlZGVkP1xyXG4gICAgc2V0Vmlld3BvcnQ6IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkcHIpIHtcclxuICAgICAgICB2YXIgdmlld3BvcnQ7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICB2aWV3cG9ydCA9IHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2aWV3cG9ydCA9IHtcclxuICAgICAgICAgICAgICAgIHg6IHgsIHk6IHksXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgZGV2aWNlUGl4ZWxSYXRpbzogZHByIHx8IDFcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudmlld3BvcnQgPSB2aWV3cG9ydDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0Vmlld3BvcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5fZnJhbWVCdWZmZXIudmlld3BvcnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lQnVmZmVyLnZpZXdwb3J0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHg6IDAsIHk6IDAsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5fZ0J1ZmZlclRleDEud2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMuX2dCdWZmZXJUZXgxLmhlaWdodCxcclxuICAgICAgICAgICAgICAgIGRldmljZVBpeGVsUmF0aW86IDFcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIEdCdWZmZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5DYW1lcmF9IGNhbWVyYVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIG9wdHMpIHtcclxuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIHZhciBmcmFtZUJ1ZmZlciA9IHRoaXMuX2ZyYW1lQnVmZmVyO1xyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IGZyYW1lQnVmZmVyLnZpZXdwb3J0O1xyXG5cclxuICAgICAgICB2YXIgcmVuZGVyTGlzdCA9IHNjZW5lLnVwZGF0ZVJlbmRlckxpc3QoY2FtZXJhLCB0cnVlKTtcclxuXHJcbiAgICAgICAgdmFyIG9wYXF1ZUxpc3QgPSByZW5kZXJMaXN0Lm9wYXF1ZTtcclxuICAgICAgICB2YXIgdHJhbnNwYXJlbnRMaXN0ID0gcmVuZGVyTGlzdC50cmFuc3BhcmVudDtcclxuXHJcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XHJcbiAgICAgICAgdmFyIGdCdWZmZXJSZW5kZXJMaXN0ID0gdGhpcy5fZ0J1ZmZlclJlbmRlckxpc3Q7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcGFxdWVMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghb3BhcXVlTGlzdFtpXS5pZ25vcmVHQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICBnQnVmZmVyUmVuZGVyTGlzdFtvZmZzZXQrK10gPSBvcGFxdWVMaXN0W2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnJlbmRlclRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhbnNwYXJlbnRMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRyYW5zcGFyZW50TGlzdFtpXS5pZ25vcmVHQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ0J1ZmZlclJlbmRlckxpc3Rbb2Zmc2V0KytdID0gdHJhbnNwYXJlbnRMaXN0W2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdCdWZmZXJSZW5kZXJMaXN0Lmxlbmd0aCA9IG9mZnNldDtcclxuXHJcbiAgICAgICAgZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTtcclxuICAgICAgICBnbC5kZXB0aE1hc2sodHJ1ZSk7XHJcbiAgICAgICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xyXG4gICAgICAgIGdsLmRpc2FibGUoZ2wuQkxFTkQpO1xyXG5cclxuICAgICAgICB2YXIgZW5hYmxlVGFyZ2V0VGV4dHVyZTEgPSB0aGlzLmVuYWJsZVRhcmdldFRleHR1cmUxO1xyXG4gICAgICAgIHZhciBlbmFibGVUYXJnZXRUZXh0dXJlMiA9IHRoaXMuZW5hYmxlVGFyZ2V0VGV4dHVyZTI7XHJcbiAgICAgICAgdmFyIGVuYWJsZVRhcmdldFRleHR1cmUzID0gdGhpcy5lbmFibGVUYXJnZXRUZXh0dXJlMztcclxuICAgICAgICB2YXIgZW5hYmxlVGFyZ2V0VGV4dHVyZTQgPSB0aGlzLmVuYWJsZVRhcmdldFRleHR1cmU0O1xyXG4gICAgICAgIGlmICghZW5hYmxlVGFyZ2V0VGV4dHVyZTEgJiYgIWVuYWJsZVRhcmdldFRleHR1cmUzICYmICFlbmFibGVUYXJnZXRUZXh0dXJlNCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NhblxcJ3QgZGlzYWJsZSB0YXJnZXRUZXh0dXJlMSwgdGFyZ2V0VGV4dHVyZTMsIHRhcmdldFRleHR1cmU0IGJvdGgnKTtcclxuICAgICAgICAgICAgZW5hYmxlVGFyZ2V0VGV4dHVyZTEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVuYWJsZVRhcmdldFRleHR1cmUyKSB7XHJcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChvcHRzLnRhcmdldFRleHR1cmUyIHx8IHRoaXMuX2dCdWZmZXJUZXgyLCByZW5kZXJlci5nbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gY2xlYXJWaWV3cG9ydCgpIHtcclxuICAgICAgICAgICAgaWYgKHZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICAgICAgICAgIC8vIHVzZSBzY2lzc29yIHRvIG1ha2Ugc3VyZSBvbmx5IGNsZWFyIHRoZSB2aWV3cG9ydFxyXG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XHJcbiAgICAgICAgICAgICAgICBnbC5zY2lzc29yKHZpZXdwb3J0LnggKiBkcHIsIHZpZXdwb3J0LnkgKiBkcHIsIHZpZXdwb3J0LndpZHRoICogZHByLCB2aWV3cG9ydC5oZWlnaHQgKiBkcHIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJfQklUKTtcclxuICAgICAgICAgICAgaWYgKHZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlKGdsLlNDSVNTT1JfVEVTVCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGlzTWF0ZXJpYWxDaGFuZ2VkKHJlbmRlcmFibGUsIHByZXZSZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLm1hdGVyaWFsICE9PSBwcmV2UmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFBFTkRJTkcsIHNjZW5lLmJvdW5kaW5nQm94TGFzdEZyYW1lIG5lZWRzIGJlIHVwZGF0ZWQgaWYgaGF2ZSBzaGFkb3dcclxuICAgICAgICByZW5kZXJlci5iaW5kU2NlbmVSZW5kZXJpbmcoc2NlbmUpO1xyXG4gICAgICAgIGlmIChlbmFibGVUYXJnZXRUZXh0dXJlMSkge1xyXG4gICAgICAgICAgICAvLyBQYXNzIDFcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYXR0YWNoKG9wdHMudGFyZ2V0VGV4dHVyZTEgfHwgdGhpcy5fZ0J1ZmZlclRleDEpO1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIGNsZWFyVmlld3BvcnQoKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBnQnVmZmVyTWF0ZXJpYWwxID0gdGhpcy5fZ0J1ZmZlck1hdGVyaWFsMTtcclxuICAgICAgICAgICAgdmFyIHBhc3NDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnQnVmZmVyTWF0ZXJpYWwxO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGdldFVuaWZvcm06IGdldEdldFVuaWZvcm1Ib29rMSh0aGlzLl9kZWZhdWx0Tm9ybWFsTWFwLCB0aGlzLl9kZWZhdWx0Um91Z2huZXNzTWFwLCB0aGlzLl9kZWZhdWx0RGlmZnVzZU1hcCksXHJcbiAgICAgICAgICAgICAgICBpc01hdGVyaWFsQ2hhbmdlZDogaXNNYXRlcmlhbENoYW5nZWQsXHJcbiAgICAgICAgICAgICAgICBzb3J0Q29tcGFyZTogcmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy8gRklYTUUgVXNlIE1SVCBpZiBwb3NzaWJsZVxyXG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKGdCdWZmZXJSZW5kZXJMaXN0LCBjYW1lcmEsIHBhc3NDb25maWcpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuYWJsZVRhcmdldFRleHR1cmUzKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBQYXNzIDJcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYXR0YWNoKG9wdHMudGFyZ2V0VGV4dHVyZTMgfHwgdGhpcy5fZ0J1ZmZlclRleDMpO1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIGNsZWFyVmlld3BvcnQoKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBnQnVmZmVyTWF0ZXJpYWwyID0gdGhpcy5fZ0J1ZmZlck1hdGVyaWFsMjtcclxuICAgICAgICAgICAgdmFyIHBhc3NDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnQnVmZmVyTWF0ZXJpYWwyO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGdldFVuaWZvcm06IGdldEdldFVuaWZvcm1Ib29rMih0aGlzLl9kZWZhdWx0RGlmZnVzZU1hcCwgdGhpcy5fZGVmYXVsdE1ldGFsbmVzc01hcCksXHJcbiAgICAgICAgICAgICAgICBpc01hdGVyaWFsQ2hhbmdlZDogaXNNYXRlcmlhbENoYW5nZWQsXHJcbiAgICAgICAgICAgICAgICBzb3J0Q29tcGFyZTogcmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhnQnVmZmVyUmVuZGVyTGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbmFibGVUYXJnZXRUZXh0dXJlNCkge1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYXR0YWNoKG9wdHMudGFyZ2V0VGV4dHVyZTQgfHwgdGhpcy5fZ0J1ZmZlclRleDQpO1xyXG5cclxuICAgICAgICAgICAgY2xlYXJWaWV3cG9ydCgpO1xyXG5cclxuICAgICAgICAgICAgLy8gUmVtb3ZlIGppdHRlcmluZyBpbiB0ZW1wb3JhbCBhYS5cclxuICAgICAgICAgICAgLy8gUEVORElORy4gQmV0dGVyIHNvbHV0aW9uP1xyXG4gICAgICAgICAgICBjYW1lcmEudXBkYXRlKCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZ0J1ZmZlck1hdGVyaWFsMyA9IHRoaXMuX2dCdWZmZXJNYXRlcmlhbDM7XHJcbiAgICAgICAgICAgIHZhciBjYW1lcmFWaWV3UHJvaiA9IG1hdDQuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIG1hdDQubXVsdGlwbHkoY2FtZXJhVmlld1Byb2osIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmFycmF5LCBjYW1lcmEudmlld01hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ0J1ZmZlck1hdGVyaWFsMztcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCByZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzU2tpbm5lZE1lc2ggPSByZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2goKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTa2lubmVkTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2tlbGV0b24gPSByZW5kZXJhYmxlLnNrZWxldG9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgam9pbnRzID0gcmVuZGVyYWJsZS5qb2ludHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqb2ludHMubGVuZ3RoID4gcmVuZGVyZXIuZ2V0TWF4Sm9pbnROdW1iZXIoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNraW5NYXRyaWNlc1RleHR1cmUgPSBza2VsZXRvbi5nZXRTdWJTa2luTWF0cmljZXNUZXh0dXJlKHJlbmRlcmFibGUuX191aWRfXywgam9pbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZSA9IHJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzVGV4dHVyZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJldlNraW5NYXRyaWNlc1RleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZSA9IHJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzVGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkZMT0FULFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZU1pcG1hcDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsaXBZOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHMubGVuZ3RoICE9PSBza2luTWF0cmljZXNUZXh0dXJlLnBpeGVscy5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZTa2luTWF0cmljZXNUZXh0dXJlLnBpeGVscyA9IG5ldyBGbG9hdDMyQXJyYXkoc2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBza2luTWF0cmljZXNUZXh0dXJlLnBpeGVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHNbaV0gPSBza2luTWF0cmljZXNUZXh0dXJlLnBpeGVsc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS53aWR0aCA9IHNraW5NYXRyaWNlc1RleHR1cmUud2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS5oZWlnaHQgPSBza2luTWF0cmljZXNUZXh0dXJlLmhlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBza2luTWF0cmljZXNBcnJheSA9IHNrZWxldG9uLmdldFN1YlNraW5NYXRyaWNlcyhyZW5kZXJhYmxlLl9fdWlkX18sIGpvaW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzQXJyYXkgfHwgcmVuZGVyYWJsZS5fX3ByZXZTa2luTWF0cmljZXNBcnJheS5sZW5ndGggIT09IHNraW5NYXRyaWNlc0FycmF5Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHNraW5NYXRyaWNlc0FycmF5Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc0FycmF5LnNldChza2luTWF0cmljZXNBcnJheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyYWJsZS5fX3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uID0gcmVuZGVyYWJsZS5fX3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uIHx8IG1hdDQuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIHdvcmxkIHRyYW5zZm9ybSBvZiBza2lubmVkIG1lc2guXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdDQuY29weShyZW5kZXJhYmxlLl9fcHJldldvcmxkVmlld1Byb2plY3Rpb24sIGNhbWVyYVZpZXdQcm9qKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdDQubXVsdGlwbHkocmVuZGVyYWJsZS5fX3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uLCBjYW1lcmFWaWV3UHJvaiwgcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGdldFVuaWZvcm06IGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBnQnVmZmVyTWF0LCBzeW1ib2wpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sID09PSAncHJldldvcmxkVmlld1Byb2plY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLl9fcHJldldvcmxkVmlld1Byb2plY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3ByZXZTa2luTWF0cml4Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5fX3ByZXZTa2luTWF0cmljZXNBcnJheTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAncHJldlNraW5NYXRyaWNlc1RleHR1cmUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc1RleHR1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ2ZpcnN0UmVuZGVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXJlbmRlcmFibGUuX19wcmV2V29ybGRWaWV3UHJvamVjdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnQnVmZmVyTWF0LmdldChzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBpc01hdGVyaWFsQ2hhbmdlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyB1cGRhdGUgcHJldldvcmxkVmlld1Byb2plY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzb3J0Q29tcGFyZTogcmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmVcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoZ0J1ZmZlclJlbmRlckxpc3QsIGNhbWVyYSwgcGFzc0NvbmZpZyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXJlci5iaW5kU2NlbmVSZW5kZXJpbmcobnVsbCk7XHJcbiAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWJ1ZyBvdXRwdXQgb2YgZ0J1ZmZlci4gVXNlIGB0eXBlYCBwYXJhbWV0ZXIgdG8gY2hvb3MgdGhlIGRlYnVnIG91dHB1dCB0eXBlLCB3aGljaCBjYW4gYmU6XHJcbiAgICAgKlxyXG4gICAgICogKyAnbm9ybWFsJ1xyXG4gICAgICogKyAnZGVwdGgnXHJcbiAgICAgKiArICdwb3NpdGlvbidcclxuICAgICAqICsgJ2dsb3NzaW5lc3MnXHJcbiAgICAgKiArICdtZXRhbG5lc3MnXHJcbiAgICAgKiArICdhbGJlZG8nXHJcbiAgICAgKiArICd2ZWxvY2l0eSdcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZT0nbm9ybWFsJ11cclxuICAgICAqL1xyXG4gICAgcmVuZGVyRGVidWc6IGZ1bmN0aW9uIChyZW5kZXJlciwgY2FtZXJhLCB0eXBlLCB2aWV3cG9ydCkge1xyXG4gICAgICAgIHZhciBkZWJ1Z1R5cGVzID0ge1xyXG4gICAgICAgICAgICBub3JtYWw6IDAsXHJcbiAgICAgICAgICAgIGRlcHRoOiAxLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogMixcclxuICAgICAgICAgICAgZ2xvc3NpbmVzczogMyxcclxuICAgICAgICAgICAgbWV0YWxuZXNzOiA0LFxyXG4gICAgICAgICAgICBhbGJlZG86IDUsXHJcbiAgICAgICAgICAgIHZlbG9jaXR5OiA2XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoZGVidWdUeXBlc1t0eXBlXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5rb3duIHR5cGUgXCInICsgdHlwZSArICdcIicpO1xyXG4gICAgICAgICAgICAvLyBEZWZhdWx0IHVzZSBub3JtYWxcclxuICAgICAgICAgICAgdHlwZSA9ICdub3JtYWwnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyZXIuc2F2ZUNsZWFyKCk7XHJcbiAgICAgICAgcmVuZGVyZXIuc2F2ZVZpZXdwb3J0KCk7XHJcbiAgICAgICAgcmVuZGVyZXIuY2xlYXJCaXQgPSByZW5kZXJlci5nbC5ERVBUSF9CVUZGRVJfQklUO1xyXG5cclxuICAgICAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodmlld3BvcnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdmlld1Byb2plY3Rpb25JbnYgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIE1hdHJpeDQubXVsdGlwbHkodmlld1Byb2plY3Rpb25JbnYsIGNhbWVyYS53b3JsZFRyYW5zZm9ybSwgY2FtZXJhLmludlByb2plY3Rpb25NYXRyaXgpO1xyXG5cclxuICAgICAgICB2YXIgZGVidWdQYXNzID0gdGhpcy5fZGVidWdQYXNzO1xyXG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCd2aWV3cG9ydFNpemUnLCBbcmVuZGVyZXIuZ2V0V2lkdGgoKSwgcmVuZGVyZXIuZ2V0SGVpZ2h0KCldKTtcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUxJywgdGhpcy5fZ0J1ZmZlclRleDEpO1xyXG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTInLCB0aGlzLl9nQnVmZmVyVGV4Mik7XHJcbiAgICAgICAgZGVidWdQYXNzLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMycsIHRoaXMuX2dCdWZmZXJUZXgzKTtcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmU0JywgdGhpcy5fZ0J1ZmZlclRleDQpO1xyXG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCdkZWJ1ZycsIGRlYnVnVHlwZXNbdHlwZV0pO1xyXG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCd2aWV3UHJvamVjdGlvbkludicsIHZpZXdQcm9qZWN0aW9uSW52LmFycmF5KTtcclxuICAgICAgICBkZWJ1Z1Bhc3MucmVuZGVyKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgcmVuZGVyZXIucmVzdG9yZVZpZXdwb3J0KCk7XHJcbiAgICAgICAgcmVuZGVyZXIucmVzdG9yZUNsZWFyKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGZpcnN0IHRhcmdldCB0ZXh0dXJlLlxyXG4gICAgICogQ2hhbm5lbCBzdG9yYWdlOlxyXG4gICAgICogKyBSOiBub3JtYWwueCAqIDAuNSArIDAuNVxyXG4gICAgICogKyBHOiBub3JtYWwueSAqIDAuNSArIDAuNVxyXG4gICAgICogKyBCOiBub3JtYWwueiAqIDAuNSArIDAuNVxyXG4gICAgICogKyBBOiBnbG9zc2luZXNzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAqL1xyXG4gICAgZ2V0VGFyZ2V0VGV4dHVyZTE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ0J1ZmZlclRleDE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHNlY29uZCB0YXJnZXQgdGV4dHVyZS5cclxuICAgICAqIENoYW5uZWwgc3RvcmFnZTpcclxuICAgICAqICsgUjogZGVwdGhcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICovXHJcbiAgICBnZXRUYXJnZXRUZXh0dXJlMjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nQnVmZmVyVGV4MjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhpcmQgdGFyZ2V0IHRleHR1cmUuXHJcbiAgICAgKiBDaGFubmVsIHN0b3JhZ2U6XHJcbiAgICAgKiArIFI6IGFsYmVkby5yXHJcbiAgICAgKiArIEc6IGFsYmVkby5nXHJcbiAgICAgKiArIEI6IGFsYmVkby5iXHJcbiAgICAgKiArIEE6IG1ldGFsbmVzc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgKi9cclxuICAgIGdldFRhcmdldFRleHR1cmUzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dCdWZmZXJUZXgzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBmb3VydGggdGFyZ2V0IHRleHR1cmUuXHJcbiAgICAgKiBDaGFubmVsIHN0b3JhZ2U6XHJcbiAgICAgKiArIFI6IHZlbG9jaXR5LnJcclxuICAgICAqICsgRzogdmVsb2NpdHkuZ1xyXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgKi9cclxuICAgIGdldFRhcmdldFRleHR1cmU0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dCdWZmZXJUZXg0O1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4MS5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4Mi5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4My5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdE5vcm1hbE1hcC5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9kZWZhdWx0Um91Z2huZXNzTWFwLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRNZXRhbG5lc3NNYXAuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdERpZmZ1c2VNYXAuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgR0J1ZmZlcjsiLCJpbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5pbXBvcnQgdmVjMiBmcm9tICcuLi9nbG1hdHJpeC92ZWMyJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5nZW9tZXRyeS5Db25lXHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LnRvcFJhZGl1c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuYm90dG9tUmFkaXVzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5oZWlnaHRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmNhcFNlZ21lbnRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5oZWlnaHRTZWdtZW50c11cclxuICovXHJcbnZhciBDb25lID0gR2VvbWV0cnkuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5Db25lIyAqLyB7XHJcbiAgICBkeW5hbWljOiBmYWxzZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdG9wUmFkaXVzOiAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYm90dG9tUmFkaXVzOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaGVpZ2h0OiAyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY2FwU2VnbWVudHM6IDIwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaGVpZ2h0U2VnbWVudHM6IDFcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5Db25lLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGNvbmUgZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBbXTtcclxuICAgICAgICB2YXIgdGV4Y29vcmRzID0gW107XHJcbiAgICAgICAgdmFyIGZhY2VzID0gW107XHJcbiAgICAgICAgcG9zaXRpb25zLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGV4Y29vcmRzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgZmFjZXMubGVuZ3RoID0gMDtcclxuICAgICAgICAvLyBUb3AgY2FwXHJcbiAgICAgICAgdmFyIGNhcFNlZ1JhZGlhbCA9IE1hdGguUEkgKiAyIC8gdGhpcy5jYXBTZWdtZW50cztcclxuXHJcbiAgICAgICAgdmFyIHRvcENhcCA9IFtdO1xyXG4gICAgICAgIHZhciBib3R0b21DYXAgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIHIxID0gdGhpcy50b3BSYWRpdXM7XHJcbiAgICAgICAgdmFyIHIyID0gdGhpcy5ib3R0b21SYWRpdXM7XHJcbiAgICAgICAgdmFyIHkgPSB0aGlzLmhlaWdodCAvIDI7XHJcblxyXG4gICAgICAgIHZhciBjMSA9IHZlYzMuZnJvbVZhbHVlcygwLCB5LCAwKTtcclxuICAgICAgICB2YXIgYzIgPSB2ZWMzLmZyb21WYWx1ZXMoMCwgLXksIDApO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jYXBTZWdtZW50czsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB0aGV0YSA9IGkgKiBjYXBTZWdSYWRpYWw7XHJcbiAgICAgICAgICAgIHZhciB4ID0gcjEgKiBNYXRoLnNpbih0aGV0YSk7XHJcbiAgICAgICAgICAgIHZhciB6ID0gcjEgKiBNYXRoLmNvcyh0aGV0YSk7XHJcbiAgICAgICAgICAgIHRvcENhcC5wdXNoKHZlYzMuZnJvbVZhbHVlcyh4LCB5LCB6KSk7XHJcblxyXG4gICAgICAgICAgICB4ID0gcjIgKiBNYXRoLnNpbih0aGV0YSk7XHJcbiAgICAgICAgICAgIHogPSByMiAqIE1hdGguY29zKHRoZXRhKTtcclxuICAgICAgICAgICAgYm90dG9tQ2FwLnB1c2godmVjMy5mcm9tVmFsdWVzKHgsIC15LCB6KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBCdWlsZCB0b3AgY2FwXHJcbiAgICAgICAgcG9zaXRpb25zLnB1c2goYzEpO1xyXG4gICAgICAgIC8vIEZJWE1FXHJcbiAgICAgICAgdGV4Y29vcmRzLnB1c2godmVjMi5mcm9tVmFsdWVzKDAsIDEpKTtcclxuICAgICAgICB2YXIgbiA9IHRoaXMuY2FwU2VnbWVudHM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcG9zaXRpb25zLnB1c2godG9wQ2FwW2ldKTtcclxuICAgICAgICAgICAgLy8gRklYTUVcclxuICAgICAgICAgICAgdGV4Y29vcmRzLnB1c2godmVjMi5mcm9tVmFsdWVzKGkgLyBuLCAwKSk7XHJcbiAgICAgICAgICAgIGZhY2VzLnB1c2goWzAsIGkrMSwgKGkrMSkgJSBuICsgMV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQnVpbGQgYm90dG9tIGNhcFxyXG4gICAgICAgIHZhciBvZmZzZXQgPSBwb3NpdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIHBvc2l0aW9ucy5wdXNoKGMyKTtcclxuICAgICAgICB0ZXhjb29yZHMucHVzaCh2ZWMyLmZyb21WYWx1ZXMoMCwgMSkpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKGJvdHRvbUNhcFtpXSk7XHJcbiAgICAgICAgICAgIC8vIEZJWE1FXHJcbiAgICAgICAgICAgIHRleGNvb3Jkcy5wdXNoKHZlYzIuZnJvbVZhbHVlcyhpIC8gbiwgMCkpO1xyXG4gICAgICAgICAgICBmYWNlcy5wdXNoKFtvZmZzZXQsIG9mZnNldCsoKGkrMSkgJSBuICsgMSksIG9mZnNldCtpKzFdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEJ1aWxkIHNpZGVcclxuICAgICAgICBvZmZzZXQgPSBwb3NpdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIHZhciBuMiA9IHRoaXMuaGVpZ2h0U2VnbWVudHM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuMisxOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB2ID0gaiAvIG4yO1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2godmVjMy5sZXJwKHZlYzMuY3JlYXRlKCksIHRvcENhcFtpXSwgYm90dG9tQ2FwW2ldLCB2KSk7XHJcbiAgICAgICAgICAgICAgICB0ZXhjb29yZHMucHVzaCh2ZWMyLmZyb21WYWx1ZXMoaSAvIG4sIHYpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG4yOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBpMSA9IGkgKiAobjIgKyAxKSArIGo7XHJcbiAgICAgICAgICAgICAgICB2YXIgaTIgPSAoKGkgKyAxKSAlIG4pICogKG4yICsgMSkgKyBqO1xyXG4gICAgICAgICAgICAgICAgdmFyIGkzID0gKChpICsgMSkgJSBuKSAqIChuMiArIDEpICsgaiArIDE7XHJcbiAgICAgICAgICAgICAgICB2YXIgaTQgPSBpICogKG4yICsgMSkgKyBqICsgMTtcclxuICAgICAgICAgICAgICAgIGZhY2VzLnB1c2goW29mZnNldCtpMiwgb2Zmc2V0K2kxLCBvZmZzZXQraTRdKTtcclxuICAgICAgICAgICAgICAgIGZhY2VzLnB1c2goW29mZnNldCtpNCwgb2Zmc2V0K2kzLCBvZmZzZXQraTJdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLmZyb21BcnJheShwb3NpdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy50ZXhjb29yZDAuZnJvbUFycmF5KHRleGNvb3Jkcyk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdEluZGljZXNGcm9tQXJyYXkoZmFjZXMpO1xyXG5cclxuICAgICAgICB0aGlzLmdlbmVyYXRlVmVydGV4Tm9ybWFscygpO1xyXG5cclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdmFyIHIgPSBNYXRoLm1heCh0aGlzLnRvcFJhZGl1cywgdGhpcy5ib3R0b21SYWRpdXMpO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldCgtciwgLXRoaXMuaGVpZ2h0LzIsIC1yKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1heC5zZXQociwgdGhpcy5oZWlnaHQvMiwgcik7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ29uZTtcclxuIiwiaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IENvbmVHZW9tZXRyeSBmcm9tICcuL0NvbmUnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lmdlb21ldHJ5LkN5bGluZGVyXHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LnJhZGl1c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5jYXBTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0U2VnbWVudHNdXHJcbiAqL1xyXG52YXIgQ3lsaW5kZXIgPSBHZW9tZXRyeS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5DeWxpbmRlciMgKi9cclxue1xyXG4gICAgZHluYW1pYzogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJhZGl1czogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodDogMixcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNhcFNlZ21lbnRzOiA1MCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodFNlZ21lbnRzOiAxXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ3lsaW5kZXIucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgY3lsaW5kZXIgZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBjb25lID0gbmV3IENvbmVHZW9tZXRyeSh7XHJcbiAgICAgICAgICAgIHRvcFJhZGl1czogdGhpcy5yYWRpdXMsXHJcbiAgICAgICAgICAgIGJvdHRvbVJhZGl1czogdGhpcy5yYWRpdXMsXHJcbiAgICAgICAgICAgIGNhcFNlZ21lbnRzOiB0aGlzLmNhcFNlZ21lbnRzLFxyXG4gICAgICAgICAgICBoZWlnaHRTZWdtZW50czogdGhpcy5oZWlnaHRTZWdtZW50cyxcclxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWUgPSBjb25lLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWU7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZSA9IGNvbmUuYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnRleGNvb3JkMC52YWx1ZSA9IGNvbmUuYXR0cmlidXRlcy50ZXhjb29yZDAudmFsdWU7XHJcbiAgICAgICAgdGhpcy5pbmRpY2VzID0gY29uZS5pbmRpY2VzO1xyXG5cclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gY29uZS5ib3VuZGluZ0JveDtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDeWxpbmRlcjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQubGlnaHRfdm9sdW1lLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbnZhcnlpbmcgdmVjMyB2X1Bvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbiB2X1Bvc2l0aW9uID0gcG9zaXRpb247XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuc3BvdF9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0RGlyZWN0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gZmxvYXQgdW1icmFBbmdsZUNvc2luZTtcXG51bmlmb3JtIGZsb2F0IHBlbnVtYnJhQW5nbGVDb3NpbmU7XFxudW5pZm9ybSBmbG9hdCBsaWdodFJhbmdlO1xcbnVuaWZvcm0gZmxvYXQgZmFsbG9mZkZhY3RvcjtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRTaGFkb3dNYXA7XFxudW5pZm9ybSBtYXQ0IGxpZ2h0TWF0cml4O1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRTaGFkb3dNYXBTaXplO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG52b2lkIG1haW4oKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gcG9zaXRpb247XFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gTCAvPSBkaXN0O1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgbGlnaHRSYW5nZSk7XFxuIGZsb2F0IGMgPSBkb3QoLW5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiksIEwpO1xcbiBmbG9hdCBmYWxsb2ZmID0gY2xhbXAoKGMgLSB1bWJyYUFuZ2xlQ29zaW5lKSAvIChwZW51bWJyYUFuZ2xlQ29zaW5lIC0gdW1icmFBbmdsZUNvc2luZSksIDAuMCwgMS4wKTtcXG4gZmFsbG9mZiA9IHBvdyhmYWxsb2ZmLCBmYWxsb2ZmRmFjdG9yKTtcXG4gdmVjMyBIID0gbm9ybWFsaXplKEwgKyBWKTtcXG4gZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9ICgxLjAgLSBmYWxsb2ZmKSAqIGF0dGVudWF0aW9uICogbGlnaHRFcXVhdGlvbihcXG4gbGlnaHRDb2xvciwgZGlmZnVzZUNvbG9yLCBzcGVjdWxhckNvbG9yLCBuZGwsIG5kaCwgbmR2LCBnbG9zc2luZXNzXFxuICk7XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYihcXG4gbGlnaHRTaGFkb3dNYXAsIGxpZ2h0TWF0cml4LCBwb3NpdGlvbiwgbGlnaHRTaGFkb3dNYXBTaXplXFxuICk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gc2hhZG93Q29udHJpYjtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcXG5cIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuZGlyZWN0aW9uYWxfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodERpcmVjdGlvbjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRTaGFkb3dNYXA7XFxudW5pZm9ybSBmbG9hdCBsaWdodFNoYWRvd01hcFNpemU7XFxudW5pZm9ybSBtYXQ0IGxpZ2h0TWF0cmljZXNbU0hBRE9XX0NBU0NBREVdO1xcbnVuaWZvcm0gZmxvYXQgc2hhZG93Q2FzY2FkZUNsaXBzTmVhcltTSEFET1dfQ0FTQ0FERV07XFxudW5pZm9ybSBmbG9hdCBzaGFkb3dDYXNjYWRlQ2xpcHNGYXJbU0hBRE9XX0NBU0NBREVdO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG52b2lkIG1haW4oKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMzIEwgPSAtbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uKTtcXG4gdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvc2l0aW9uIC0gcG9zaXRpb24pO1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kdiA9IGNsYW1wKGRvdChOLCBWKSwgMC4wLCAxLjApO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRFcXVhdGlvbihcXG4gbGlnaHRDb2xvciwgZGlmZnVzZUNvbG9yLCBzcGVjdWxhckNvbG9yLCBuZGwsIG5kaCwgbmR2LCBnbG9zc2luZXNzXFxuICk7XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuIGZvciAoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBTSEFET1dfQ0FTQ0FERTsgX2lkeF8rKykge3tcXG4gaWYgKFxcbiB6ID49IHNoYWRvd0Nhc2NhZGVDbGlwc05lYXJbX2lkeF9dICYmXFxuIHogPD0gc2hhZG93Q2FzY2FkZUNsaXBzRmFyW19pZHhfXVxcbiApIHtcXG4gc2hhZG93Q29udHJpYiA9IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiBsaWdodFNoYWRvd01hcCwgbGlnaHRNYXRyaWNlc1tfaWR4X10sIHBvc2l0aW9uLCBsaWdodFNoYWRvd01hcFNpemUsXFxuIHZlYzIoMS4wIC8gZmxvYXQoU0hBRE9XX0NBU0NBREUpLCAxLjApLFxcbiB2ZWMyKGZsb2F0KF9pZHhfKSAvIGZsb2F0KFNIQURPV19DQVNDQURFKSwgMC4wKVxcbiApO1xcbiB9XFxuIH19XFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gc2hhZG93Q29udHJpYjtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcXG5cIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuYW1iaWVudF9saWdodFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMTtcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTM7XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSB2ZWMyIHdpbmRvd1NpemU6IFdJTkRPV19TSVpFO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC8gd2luZG93U2l6ZTtcXG4gdmVjNCB0ZXhlbDEgPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUxLCB1dik7XFxuIGlmIChkb3QodGV4ZWwxLnJnYiwgdmVjMygxLjApKSA9PSAwLjApIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiB2ZWMzIGFsYmVkbyA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTMsIHV2KS5yZ2I7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBsaWdodENvbG9yICogYWxiZWRvO1xcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5hbWJpZW50X3NoX2xpZ2h0XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUxO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMztcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2VmZmljaWVudHNbOV07XFxudW5pZm9ybSB2ZWMyIHdpbmRvd1NpemU6IFdJTkRPV19TSVpFO1xcbnZlYzMgY2FsY0FtYmllbnRTSExpZ2h0KHZlYzMgTikge1xcbiByZXR1cm4gbGlnaHRDb2VmZmljaWVudHNbMF1cXG4gKyBsaWdodENvZWZmaWNpZW50c1sxXSAqIE4ueFxcbiArIGxpZ2h0Q29lZmZpY2llbnRzWzJdICogTi55XFxuICsgbGlnaHRDb2VmZmljaWVudHNbM10gKiBOLnpcXG4gKyBsaWdodENvZWZmaWNpZW50c1s0XSAqIE4ueCAqIE4uelxcbiArIGxpZ2h0Q29lZmZpY2llbnRzWzVdICogTi56ICogTi55XFxuICsgbGlnaHRDb2VmZmljaWVudHNbNl0gKiBOLnkgKiBOLnhcXG4gKyBsaWdodENvZWZmaWNpZW50c1s3XSAqICgzLjAgKiBOLnogKiBOLnogLSAxLjApXFxuICsgbGlnaHRDb2VmZmljaWVudHNbOF0gKiAoTi54ICogTi54IC0gTi55ICogTi55KTtcXG59XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHkgLyB3aW5kb3dTaXplO1xcbiB2ZWM0IHRleGVsMSA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTEsIHV2KTtcXG4gaWYgKGRvdCh0ZXhlbDEucmdiLCB2ZWMzKDEuMCkpID09IDAuMCkge1xcbiBkaXNjYXJkO1xcbiB9XFxuIHZlYzMgTiA9IHRleGVsMS5yZ2IgKiAyLjAgLSAxLjA7XFxuIHZlYzMgYWxiZWRvID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMywgdXYpLnJnYjtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGxpZ2h0Q29sb3IgKiBhbGJlZG8gKiBjYWxjQW1iaWVudFNITGlnaHQoTik7XFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmFtYmllbnRfY3ViZW1hcF9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSBzYW1wbGVyQ3ViZSBsaWdodEN1YmVtYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgYnJkZkxvb2t1cDtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiBAaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gdmVjMyBMID0gcmVmbGVjdCgtViwgTik7XFxuIGZsb2F0IG5kdiA9IGNsYW1wKGRvdChOLCBWKSwgMC4wLCAxLjApO1xcbiBmbG9hdCByb3VnaCA9IGNsYW1wKDEuMCAtIGdsb3NzaW5lc3MsIDAuMCwgMS4wKTtcXG4gZmxvYXQgYmlhcyA9IHJvdWdoICogNS4wO1xcbiB2ZWMyIGJyZGZQYXJhbSA9IHRleHR1cmUyRChicmRmTG9va3VwLCB2ZWMyKHJvdWdoLCBuZHYpKS54eTtcXG4gdmVjMyBlbnZXZWlnaHQgPSBzcGVjdWxhckNvbG9yICogYnJkZlBhcmFtLnggKyBicmRmUGFyYW0ueTtcXG4gdmVjMyBlbnZUZXhlbCA9IFJHQk1EZWNvZGUodGV4dHVyZUN1YmVMb2RFWFQobGlnaHRDdWJlbWFwLCBMLCBiaWFzKSwgOC4xMik7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBsaWdodENvbG9yICogZW52VGV4ZWwgKiBlbnZXZWlnaHQ7XFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLnBvaW50X2xpZ2h0XFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2hlYWRcXG5AaW1wb3J0IGNsYXkudXRpbC5jYWxjdWxhdGVfYXR0ZW51YXRpb25cXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfZXF1YXRpb25cXG51bmlmb3JtIHZlYzMgbGlnaHRQb3NpdGlvbjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIGZsb2F0IGxpZ2h0UmFuZ2U7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlckN1YmUgbGlnaHRTaGFkb3dNYXA7XFxudW5pZm9ybSBmbG9hdCBsaWdodFNoYWRvd01hcFNpemU7XFxuI2VuZGlmXFxudmFyeWluZyB2ZWMzIHZfUG9zaXRpb247XFxuQGltcG9ydCBjbGF5LnBsdWdpbi5zaGFkb3dfbWFwX2NvbW1vblxcbnZvaWQgbWFpbigpXFxue1xcbiBAaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuIHZlYzMgTCA9IGxpZ2h0UG9zaXRpb24gLSBwb3NpdGlvbjtcXG4gdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvc2l0aW9uIC0gcG9zaXRpb24pO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiBMIC89IGRpc3Q7XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kbCA9IGNsYW1wKGRvdChOLCBMKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IGF0dGVudWF0aW9uID0gbGlnaHRBdHRlbnVhdGlvbihkaXN0LCBsaWdodFJhbmdlKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGF0dGVudWF0aW9uICogbGlnaHRFcXVhdGlvbihcXG4gbGlnaHRDb2xvciwgZGlmZnVzZUNvbG9yLCBzcGVjdWxhckNvbG9yLCBuZGwsIG5kaCwgbmR2LCBnbG9zc2luZXNzXFxuICk7XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYk9tbmkoXFxuIGxpZ2h0U2hhZG93TWFwLCAtTCAqIGRpc3QsIGxpZ2h0UmFuZ2VcXG4gKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiAqPSBjbGFtcChzaGFkb3dDb250cmliLCAwLjAsIDEuMCk7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLnNwaGVyZV9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSBmbG9hdCBsaWdodFJhbmdlO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRSYWRpdXM7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMyB2X1Bvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiBAaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuIHZlYzMgTCA9IGxpZ2h0UG9zaXRpb24gLSBwb3NpdGlvbjtcXG4gdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvc2l0aW9uIC0gcG9zaXRpb24pO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiB2ZWMzIFIgPSByZWZsZWN0KFYsIE4pO1xcbiBmbG9hdCB0bXAgPSBkb3QoTCwgUik7XFxuIHZlYzMgY1RvUiA9IHRtcCAqIFIgLSBMO1xcbiBmbG9hdCBkID0gbGVuZ3RoKGNUb1IpO1xcbiBMID0gTCArIGNUb1IgKiBjbGFtcChsaWdodFJhZGl1cyAvIGQsIDAuMCwgMS4wKTtcXG4gTCA9IG5vcm1hbGl6ZShMKTtcXG4gdmVjMyBIID0gbm9ybWFsaXplKEwgKyBWKTtcXG4gZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIGxpZ2h0UmFuZ2UpO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRDb2xvciAqIG5kbCAqIGF0dGVudWF0aW9uO1xcbiBnbG9zc2luZXNzID0gY2xhbXAoZ2xvc3NpbmVzcyAtIGxpZ2h0UmFkaXVzIC8gMi4wIC8gZGlzdCwgMC4wLCAxLjApO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gYXR0ZW51YXRpb24gKiBsaWdodEVxdWF0aW9uKFxcbiBsaWdodENvbG9yLCBkaWZmdXNlQ29sb3IsIHNwZWN1bGFyQ29sb3IsIG5kbCwgbmRoLCBuZHYsIGdsb3NzaW5lc3NcXG4gKTtcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQudHViZV9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSBmbG9hdCBsaWdodFJhbmdlO1xcbnVuaWZvcm0gdmVjMyBsaWdodEV4dGVuZDtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZfUG9zaXRpb247XFxudm9pZCBtYWluKClcXG57XFxuIEBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5nYnVmZmVyX3JlYWRcXG4gdmVjMyBMID0gbGlnaHRQb3NpdGlvbiAtIHBvc2l0aW9uO1xcbiB2ZWMzIFYgPSBub3JtYWxpemUoZXllUG9zaXRpb24gLSBwb3NpdGlvbik7XFxuIHZlYzMgUiA9IHJlZmxlY3QoViwgTik7XFxuIHZlYzMgTDAgPSBsaWdodFBvc2l0aW9uIC0gbGlnaHRFeHRlbmQgLSBwb3NpdGlvbjtcXG4gdmVjMyBMMSA9IGxpZ2h0UG9zaXRpb24gKyBsaWdodEV4dGVuZCAtIHBvc2l0aW9uO1xcbiB2ZWMzIExEID0gTDEgLSBMMDtcXG4gZmxvYXQgbGVuMCA9IGxlbmd0aChMMCk7XFxuIGZsb2F0IGxlbjEgPSBsZW5ndGgoTDEpO1xcbiBmbG9hdCBpcnJhID0gMi4wICogY2xhbXAoZG90KE4sIEwwKSAvICgyLjAgKiBsZW4wKSArIGRvdChOLCBMMSkgLyAoMi4wICogbGVuMSksIDAuMCwgMS4wKTtcXG4gZmxvYXQgTEREb3RSID0gZG90KFIsIExEKTtcXG4gZmxvYXQgdCA9IChMRERvdFIgKiBkb3QoUiwgTDApIC0gZG90KEwwLCBMRCkpIC8gKGRvdChMRCwgTEQpIC0gTEREb3RSICogTEREb3RSKTtcXG4gdCA9IGNsYW1wKHQsIDAuMCwgMS4wKTtcXG4gTCA9IEwwICsgdCAqIExEO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiBMIC89IGRpc3Q7XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gZ2xvc3NpbmVzcyA9IGNsYW1wKGdsb3NzaW5lc3MgLSAwLjAgLyAyLjAgLyBkaXN0LCAwLjAsIDEuMCk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBsaWdodENvbG9yICogaXJyYSAqIGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgbGlnaHRSYW5nZSlcXG4gKiAoZGlmZnVzZUNvbG9yICsgRF9QaG9uZyhnbG9zc2luZXNzLCBuZGgpICogRl9TY2hsaWNrKG5kdiwgc3BlY3VsYXJDb2xvcikpO1xcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xyXG4iLCIvLyBMaWdodC1wcmUgcGFzcyBkZWZlcnJlZCByZW5kZXJpbmdcclxuLy8gaHR0cDovL3d3dy5yZWFsdGltZXJlbmRlcmluZy5jb20vYmxvZy9kZWZlcnJlZC1saWdodGluZy1hcHByb2FjaGVzL1xyXG5pbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcbmltcG9ydCBGdWxsUXVhZFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XHJcbmltcG9ydCBTcGhlcmVHZW8gZnJvbSAnLi4vZ2VvbWV0cnkvU3BoZXJlJztcclxuaW1wb3J0IENvbmVHZW8gZnJvbSAnLi4vZ2VvbWV0cnkvQ29uZSc7XHJcbmltcG9ydCBDeWxpbmRlckdlbyBmcm9tICcuLi9nZW9tZXRyeS9DeWxpbmRlcic7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4uL21hdGgvTWF0cml4NCc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBHQnVmZmVyIGZyb20gJy4vR0J1ZmZlcic7XHJcblxyXG5pbXBvcnQgcHJlekdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9wcmV6Lmdsc2wuanMnO1xyXG5pbXBvcnQgdXRpbEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS91dGlsLmdsc2wuanMnO1xyXG5cclxuaW1wb3J0IGxpZ2h0dm9sdW1lR2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL2xpZ2h0dm9sdW1lLmdsc2wuanMnO1xyXG4vLyBMaWdodCBzaGFkZXJzXHJcbmltcG9ydCBzcG90R2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL3Nwb3QuZ2xzbC5qcyc7XHJcbmltcG9ydCBkaXJlY3Rpb25hbEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9kaXJlY3Rpb25hbC5nbHNsLmpzJztcclxuaW1wb3J0IGFtYmllbnRHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudC5nbHNsLmpzJztcclxuaW1wb3J0IGFtYmllbnRzaEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9hbWJpZW50c2guZ2xzbC5qcyc7XHJcbmltcG9ydCBhbWJpZW50Y3ViZW1hcEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9hbWJpZW50Y3ViZW1hcC5nbHNsLmpzJztcclxuaW1wb3J0IHBvaW50R2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL3BvaW50Lmdsc2wuanMnO1xyXG5pbXBvcnQgc3BoZXJlR2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL3NwaGVyZS5nbHNsLmpzJztcclxuaW1wb3J0IHR1YmVHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvdHViZS5nbHNsLmpzJztcclxuXHJcblNoYWRlci5pbXBvcnQocHJlekdsc2wpO1xyXG5TaGFkZXIuaW1wb3J0KHV0aWxHbHNsKTtcclxuU2hhZGVyLmltcG9ydChsaWdodHZvbHVtZUdsc2wpO1xyXG5cclxuLy8gTGlnaHQgc2hhZGVyc1xyXG5TaGFkZXIuaW1wb3J0KHNwb3RHbHNsKTtcclxuU2hhZGVyLmltcG9ydChkaXJlY3Rpb25hbEdsc2wpO1xyXG5TaGFkZXIuaW1wb3J0KGFtYmllbnRHbHNsKTtcclxuU2hhZGVyLmltcG9ydChhbWJpZW50c2hHbHNsKTtcclxuU2hhZGVyLmltcG9ydChhbWJpZW50Y3ViZW1hcEdsc2wpO1xyXG5TaGFkZXIuaW1wb3J0KHBvaW50R2xzbCk7XHJcblNoYWRlci5pbXBvcnQoc3BoZXJlR2xzbCk7XHJcblNoYWRlci5pbXBvcnQodHViZUdsc2wpO1xyXG5cclxuU2hhZGVyLmltcG9ydChwcmV6R2xzbCk7XHJcblxyXG4vKipcclxuICogRGVmZXJyZWQgcmVuZGVyZXJcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmRlZmVycmVkLlJlbmRlcmVyXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgRGVmZXJyZWRSZW5kZXJlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgZnVsbFF1YWRWZXJ0ZXggPSBTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IudmVydGV4Jyk7XHJcbiAgICB2YXIgbGlnaHRWb2x1bWVWZXJ0ZXggPSBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmxpZ2h0X3ZvbHVtZS52ZXJ0ZXgnKTtcclxuXHJcbiAgICB2YXIgZGlyZWN0aW9uYWxMaWdodFNoYWRlciA9IG5ldyBTaGFkZXIoZnVsbFF1YWRWZXJ0ZXgsIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZGlyZWN0aW9uYWxfbGlnaHQnKSk7XHJcblxyXG4gICAgdmFyIGxpZ2h0QWNjdW11bGF0ZUJsZW5kRnVuYyA9IGZ1bmN0aW9uIChnbCkge1xyXG4gICAgICAgIGdsLmJsZW5kRXF1YXRpb24oZ2wuRlVOQ19BREQpO1xyXG4gICAgICAgIGdsLmJsZW5kRnVuY1NlcGFyYXRlKGdsLk9ORSwgZ2wuT05FLCBnbC5PTkUsIGdsLk9ORSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBjcmVhdGVMaWdodFBhc3NNYXQgPSBmdW5jdGlvbiAoc2hhZGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogc2hhZGVyLFxyXG4gICAgICAgICAgICBibGVuZDogbGlnaHRBY2N1bXVsYXRlQmxlbmRGdW5jLFxyXG4gICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgICAgICAgZGVwdGhNYXNrOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgY3JlYXRlVm9sdW1lU2hhZGVyID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFNoYWRlcihsaWdodFZvbHVtZVZlcnRleCwgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC4nICsgbmFtZSkpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBSb3RhdGUgYW5kIHBvc2l0aW9uaW5nIHRvIGZpdCB0aGUgc3BvdCBsaWdodFxyXG4gICAgLy8gV2hpY2ggdGhlIGN1c3Agb2YgY29uZSBwb2ludGluZyB0byB0aGUgcG9zaXRpdmUgelxyXG4gICAgLy8gYW5kIHBvc2l0aW9uZWQgb24gdGhlIG9yaWdpblxyXG4gICAgdmFyIGNvbmVHZW8gPSBuZXcgQ29uZUdlbyh7XHJcbiAgICAgICAgY2FwU2VnbWVudHM6IDEwXHJcbiAgICB9KTtcclxuICAgIHZhciBtYXQgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgbWF0LnJvdGF0ZVgoTWF0aC5QSSAvIDIpXHJcbiAgICAgICAgLnRyYW5zbGF0ZShuZXcgVmVjdG9yMygwLCAtMSwgMCkpO1xyXG5cclxuICAgIGNvbmVHZW8uYXBwbHlUcmFuc2Zvcm0obWF0KTtcclxuXHJcbiAgICB2YXIgY3lsaW5kZXJHZW8gPSBuZXcgQ3lsaW5kZXJHZW8oe1xyXG4gICAgICAgIGNhcFNlZ21lbnRzOiAxMFxyXG4gICAgfSk7XHJcbiAgICAvLyBBbGlnbiB3aXRoIHggYXhpc1xyXG4gICAgbWF0LmlkZW50aXR5KCkucm90YXRlWihNYXRoLlBJIC8gMik7XHJcbiAgICBjeWxpbmRlckdlby5hcHBseVRyYW5zZm9ybShtYXQpO1xyXG5cclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuZGVmZXJyZWQuUmVuZGVyZXIjICovIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUHJvdmlkZSBTaGFkb3dNYXBQYXNzIGZvciBzaGFkb3cgcmVuZGVyaW5nLlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LnByZVBhc3MuU2hhZG93TWFwfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNoYWRvd01hcFBhc3M6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIGF1dG8gcmVzaXppbmcgZnJvbSBnaXZlbiBkZWZ1YWx0IHJlbmRlcmVyIHNpemUuXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXV0b1Jlc2l6ZTogdHJ1ZSxcclxuXHJcbiAgICAgICAgX2NyZWF0ZUxpZ2h0UGFzc01hdDogY3JlYXRlTGlnaHRQYXNzTWF0LFxyXG5cclxuICAgICAgICBfZ0J1ZmZlcjogbmV3IEdCdWZmZXIoKSxcclxuXHJcbiAgICAgICAgX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlcjogbmV3IEZyYW1lQnVmZmVyKCksXHJcblxyXG4gICAgICAgIF9saWdodEFjY3VtVGV4OiBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgLy8gRklYTUUgRGV2aWNlIG5vdCBzdXBwb3J0IGZsb2F0IHRleHR1cmVcclxuICAgICAgICAgICAgdHlwZTogVGV4dHVyZS5IQUxGX0ZMT0FULFxyXG4gICAgICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1RcclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgX2Z1bGxRdWFkUGFzczogbmV3IEZ1bGxRdWFkUGFzcyh7XHJcbiAgICAgICAgICAgIGJsZW5kV2l0aFByZXZpb3VzOiB0cnVlXHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIF9kaXJlY3Rpb25hbExpZ2h0TWF0OiBjcmVhdGVMaWdodFBhc3NNYXQoZGlyZWN0aW9uYWxMaWdodFNoYWRlciksXHJcblxyXG4gICAgICAgIF9hbWJpZW50TWF0OiBjcmVhdGVMaWdodFBhc3NNYXQobmV3IFNoYWRlcihcclxuICAgICAgICAgICAgZnVsbFF1YWRWZXJ0ZXgsIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuYW1iaWVudF9saWdodCcpXHJcbiAgICAgICAgKSksXHJcbiAgICAgICAgX2FtYmllbnRTSE1hdDogY3JlYXRlTGlnaHRQYXNzTWF0KG5ldyBTaGFkZXIoXHJcbiAgICAgICAgICAgIGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmFtYmllbnRfc2hfbGlnaHQnKVxyXG4gICAgICAgICkpLFxyXG4gICAgICAgIF9hbWJpZW50Q3ViZW1hcE1hdDogY3JlYXRlTGlnaHRQYXNzTWF0KG5ldyBTaGFkZXIoXHJcbiAgICAgICAgICAgIGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmFtYmllbnRfY3ViZW1hcF9saWdodCcpXHJcbiAgICAgICAgKSksXHJcblxyXG4gICAgICAgIF9zcG90TGlnaHRTaGFkZXI6IGNyZWF0ZVZvbHVtZVNoYWRlcignc3BvdF9saWdodCcpLFxyXG4gICAgICAgIF9wb2ludExpZ2h0U2hhZGVyOiBjcmVhdGVWb2x1bWVTaGFkZXIoJ3BvaW50X2xpZ2h0JyksXHJcblxyXG4gICAgICAgIF9zcGhlcmVMaWdodFNoYWRlcjogY3JlYXRlVm9sdW1lU2hhZGVyKCdzcGhlcmVfbGlnaHQnKSxcclxuICAgICAgICBfdHViZUxpZ2h0U2hhZGVyOiBjcmVhdGVWb2x1bWVTaGFkZXIoJ3R1YmVfbGlnaHQnKSxcclxuXHJcbiAgICAgICAgX2xpZ2h0U3BoZXJlR2VvOiBuZXcgU3BoZXJlR2VvKHtcclxuICAgICAgICAgICAgd2lkdGhTZWdtZW50czogMTAsXHJcbiAgICAgICAgICAgIGhlaWdodFNlZ2VtZW50czogMTBcclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgX2xpZ2h0Q29uZUdlbzogY29uZUdlbyxcclxuXHJcbiAgICAgICAgX2xpZ2h0Q3lsaW5kZXJHZW86IGN5bGluZGVyR2VvLFxyXG5cclxuICAgICAgICBfb3V0cHV0UGFzczogbmV3IEZ1bGxRdWFkUGFzcyh7XHJcbiAgICAgICAgICAgIGZyYWdtZW50OiBTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3Iub3V0cHV0JylcclxuICAgICAgICB9KVxyXG4gICAgfTtcclxufSwgLyoqIEBsZW5kcyBjbGF5LmRlZmVycmVkLlJlbmRlcmVyIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIERvIHJlbmRlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LlNjZW5lfSBzY2VuZVxyXG4gICAgICogQHBhcmFtIHtjbGF5LkNhbWVyYX0gY2FtZXJhXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnJlbmRlclRvVGFyZ2V0ID0gZmFsc2VdIElmIG5vdCBvdXB1dCBhbmQgcmVuZGVyIHRvIHRoZSB0YXJnZXQgdGV4dHVyZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5ub3RVcGRhdGVTaGFkb3cgPSB0cnVlXSBJZiBub3QgdXBkYXRlIHRoZSBzaGFkb3cuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLm5vdFVwZGF0ZVNjZW5lID0gdHJ1ZV0gSWYgbm90IHVwZGF0ZSB0aGUgc2NlbmUuXHJcbiAgICAgKi9cclxuICAgIHJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBvcHRzKSB7XHJcblxyXG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG4gICAgICAgIG9wdHMucmVuZGVyVG9UYXJnZXQgPSBvcHRzLnJlbmRlclRvVGFyZ2V0IHx8IGZhbHNlO1xyXG4gICAgICAgIG9wdHMubm90VXBkYXRlU2hhZG93ID0gb3B0cy5ub3RVcGRhdGVTaGFkb3cgfHwgZmFsc2U7XHJcbiAgICAgICAgb3B0cy5ub3RVcGRhdGVTY2VuZSA9IG9wdHMubm90VXBkYXRlU2NlbmUgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICghb3B0cy5ub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgICAgICBzY2VuZS51cGRhdGUoZmFsc2UsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY2VuZS51cGRhdGVMaWdodHMoKTtcclxuICAgICAgICAvLyBSZW5kZXIgbGlzdCB3aWxsIGJlIHVwZGF0ZWQgaW4gZ2J1ZmZlci5cclxuXHJcbiAgICAgICAgY2FtZXJhLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgICAgLy8gUEVORElORyBGb3Igc3RlcmVvIHJlbmRlcmluZ1xyXG4gICAgICAgIHZhciBkcHIgPSByZW5kZXJlci5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZVxyXG4gICAgICAgICAgICAmJiAocmVuZGVyZXIuZ2V0V2lkdGgoKSAqIGRwciAhPT0gdGhpcy5fbGlnaHRBY2N1bVRleC53aWR0aFxyXG4gICAgICAgICAgICB8fCByZW5kZXJlci5nZXRIZWlnaHQoKSAqIGRwciAhPT0gdGhpcy5fbGlnaHRBY2N1bVRleC5oZWlnaHQpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzaXplKHJlbmRlcmVyLmdldFdpZHRoKCkgKiBkcHIsIHJlbmRlcmVyLmdldEhlaWdodCgpICogZHByKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2dCdWZmZXIudXBkYXRlKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKTtcclxuXHJcbiAgICAgICAgLy8gQWNjdW11bGF0ZSBsaWdodCBidWZmZXJcclxuICAgICAgICB0aGlzLl9hY2N1bXVsYXRlTGlnaHRCdWZmZXIocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsICFvcHRzLm5vdFVwZGF0ZVNoYWRvdyk7XHJcblxyXG4gICAgICAgIGlmICghb3B0cy5yZW5kZXJUb1RhcmdldCkge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRQYXNzLnNldFVuaWZvcm0oJ3RleHR1cmUnLCB0aGlzLl9saWdodEFjY3VtVGV4KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dFBhc3MucmVuZGVyKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5fZ0J1ZmZlci5yZW5kZXJEZWJ1ZyhyZW5kZXJlciwgY2FtZXJhLCAnbm9ybWFsJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICovXHJcbiAgICBnZXRUYXJnZXRUZXh0dXJlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0QWNjdW1UZXg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybiB7Y2xheS5GcmFtZUJ1ZmZlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0VGFyZ2V0RnJhbWVCdWZmZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGlnaHRBY2N1bUZyYW1lQnVmZmVyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuZGVmZXJyZWQuR0J1ZmZlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0R0J1ZmZlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nQnVmZmVyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBUT0RPIGlzIGRwciBuZWVkZWQ/XHJcbiAgICBzZXRWaWV3cG9ydDogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIGRwcikge1xyXG4gICAgICAgIHRoaXMuX2dCdWZmZXIuc2V0Vmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZHByKTtcclxuICAgICAgICB0aGlzLl9saWdodEFjY3VtRnJhbWVCdWZmZXIudmlld3BvcnQgPSB0aGlzLl9nQnVmZmVyLmdldFZpZXdwb3J0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIGdldEZ1bGxRdWFkTGlnaHRQYXNzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuX2Z1bGxRdWFkUGFzcztcclxuICAgIC8vIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcmVuZGVyZXIgc2l6ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxyXG4gICAgICovXHJcbiAgICByZXNpemU6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICAgICAgdGhpcy5fbGlnaHRBY2N1bVRleC53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0QWNjdW1UZXguaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICAvLyBQRU5ESU5HIHZpZXdwb3J0ID9cclxuICAgICAgICB0aGlzLl9nQnVmZmVyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuICAgIH0sXHJcblxyXG4gICAgX2FjY3VtdWxhdGVMaWdodEJ1ZmZlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCB1cGRhdGVTaGFkb3cpIHtcclxuICAgICAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgbGlnaHRBY2N1bVRleCA9IHRoaXMuX2xpZ2h0QWNjdW1UZXg7XHJcbiAgICAgICAgdmFyIGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlciA9IHRoaXMuX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlcjtcclxuXHJcbiAgICAgICAgdmFyIGV5ZVBvc2l0aW9uID0gY2FtZXJhLmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHZvbHVtZSBtZXNoZXNcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIXNjZW5lLmxpZ2h0c1tpXS5pbnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUxpZ2h0UHJveHkoc2NlbmUubGlnaHRzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNoYWRvd01hcFBhc3MgPSB0aGlzLnNoYWRvd01hcFBhc3M7XHJcbiAgICAgICAgaWYgKHNoYWRvd01hcFBhc3MgJiYgdXBkYXRlU2hhZG93KSB7XHJcbiAgICAgICAgICAgIGdsLmNsZWFyQ29sb3IoMSwgMSwgMSwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVMaWdodFNoYWRvdyhyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZWxpZ2h0YWNjdW11bGF0ZScsIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCB1cGRhdGVTaGFkb3cpO1xyXG5cclxuICAgICAgICBsaWdodEFjY3VtRnJhbWVCdWZmZXIuYXR0YWNoKGxpZ2h0QWNjdW1UZXgpO1xyXG4gICAgICAgIGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB2YXIgY2xlYXJDb2xvciA9IHJlbmRlcmVyLmNsZWFyQ29sb3I7XHJcblxyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlci52aWV3cG9ydDtcclxuICAgICAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgICAgICAgdmFyIGRwciA9IHZpZXdwb3J0LmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgICAgIC8vIHVzZSBzY2lzc29yIHRvIG1ha2Ugc3VyZSBvbmx5IGNsZWFyIHRoZSB2aWV3cG9ydFxyXG4gICAgICAgICAgICBnbC5lbmFibGUoZ2wuU0NJU1NPUl9URVNUKTtcclxuICAgICAgICAgICAgZ2wuc2Npc3Nvcih2aWV3cG9ydC54ICogZHByLCB2aWV3cG9ydC55ICogZHByLCB2aWV3cG9ydC53aWR0aCAqIGRwciwgdmlld3BvcnQuaGVpZ2h0ICogZHByKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ2wuY2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTtcclxuICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUKTtcclxuICAgICAgICBnbC5lbmFibGUoZ2wuQkxFTkQpO1xyXG4gICAgICAgIGlmICh2aWV3cG9ydCkge1xyXG4gICAgICAgICAgICBnbC5kaXNhYmxlKGdsLlNDSVNTT1JfVEVTVCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ3N0YXJ0bGlnaHRhY2N1bXVsYXRlJywgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpO1xyXG5cclxuICAgICAgICB2YXIgdmlld1Byb2plY3Rpb25JbnYgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIE1hdHJpeDQubXVsdGlwbHkodmlld1Byb2plY3Rpb25JbnYsIGNhbWVyYS53b3JsZFRyYW5zZm9ybSwgY2FtZXJhLmludlByb2plY3Rpb25NYXRyaXgpO1xyXG5cclxuICAgICAgICB2YXIgdm9sdW1lTWVzaExpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY2VuZS5saWdodHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGxpZ2h0ID0gc2NlbmUubGlnaHRzW2ldO1xyXG4gICAgICAgICAgICBpZiAobGlnaHQuaW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHVUcGwgPSBsaWdodC51bmlmb3JtVGVtcGxhdGVzO1xyXG5cclxuICAgICAgICAgICAgdmFyIHZvbHVtZU1lc2ggPSBsaWdodC52b2x1bWVNZXNoIHx8IGxpZ2h0Ll9fdm9sdW1lTWVzaDtcclxuXHJcbiAgICAgICAgICAgIGlmICh2b2x1bWVNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSB2b2x1bWVNZXNoLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgLy8gVm9sdW1lIG1lc2ggd2lsbCBhZmZlY3QgdGhlIHNjZW5lIGJvdW5kaW5nIGJveCB3aGVuIHJlbmRlcmluZ1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgY2FzdFNoYWRvdyBpcyB0cnVlXHJcbiAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLmNhc3RTaGFkb3cgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdW5rbm93bkxpZ2h0VHlwZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChsaWdodC50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnUE9JTlRfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvbG9yJywgdVRwbC5wb2ludExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYW5nZScsIHVUcGwucG9pbnRMaWdodFJhbmdlLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UG9zaXRpb24nLCB1VHBsLnBvaW50TGlnaHRQb3NpdGlvbi52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdTUE9UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRQb3NpdGlvbicsIHVUcGwuc3BvdExpZ2h0UG9zaXRpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuc3BvdExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYW5nZScsIHVUcGwuc3BvdExpZ2h0UmFuZ2UudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHREaXJlY3Rpb24nLCB1VHBsLnNwb3RMaWdodERpcmVjdGlvbi52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCd1bWJyYUFuZ2xlQ29zaW5lJywgdVRwbC5zcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ3BlbnVtYnJhQW5nbGVDb3NpbmUnLCB1VHBsLnNwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmUudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnZmFsbG9mZkZhY3RvcicsIHVUcGwuc3BvdExpZ2h0RmFsbG9mZkZhY3Rvci52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdTUEhFUkVfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvbG9yJywgdVRwbC5zcGhlcmVMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UmFuZ2UnLCB1VHBsLnNwaGVyZUxpZ2h0UmFuZ2UudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYWRpdXMnLCB1VHBsLnNwaGVyZUxpZ2h0UmFkaXVzLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UG9zaXRpb24nLCB1VHBsLnNwaGVyZUxpZ2h0UG9zaXRpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnVFVCRV9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLnR1YmVMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UmFuZ2UnLCB1VHBsLnR1YmVMaWdodFJhbmdlLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0RXh0ZW5kJywgdVRwbC50dWJlTGlnaHRFeHRlbmQudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRQb3NpdGlvbicsIHVUcGwudHViZUxpZ2h0UG9zaXRpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93bkxpZ2h0VHlwZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHVua25vd25MaWdodFR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdleWVQb3NpdGlvbicsIGV5ZVBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ3ZpZXdQcm9qZWN0aW9uSW52Jywgdmlld1Byb2plY3Rpb25JbnYuYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUxJywgdGhpcy5fZ0J1ZmZlci5nZXRUYXJnZXRUZXh0dXJlMSgpKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMicsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTIoKSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTMnLCB0aGlzLl9nQnVmZmVyLmdldFRhcmdldFRleHR1cmUzKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZvbHVtZU1lc2hMaXN0LnB1c2godm9sdW1lTWVzaCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhc3MgPSB0aGlzLl9mdWxsUXVhZFBhc3M7XHJcbiAgICAgICAgICAgICAgICB2YXIgdW5rbm93bkxpZ2h0VHlwZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gRnVsbCBxdWFkIGxpZ2h0XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGxpZ2h0LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdBTUJJRU5UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbCA9IHRoaXMuX2FtYmllbnRNYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuYW1iaWVudExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQU1CSUVOVF9TSF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwgPSB0aGlzLl9hbWJpZW50U0hNYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuYW1iaWVudFNITGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29lZmZpY2llbnRzJywgdVRwbC5hbWJpZW50U0hMaWdodENvZWZmaWNpZW50cy52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdBTUJJRU5UX0NVQkVNQVBfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsID0gdGhpcy5fYW1iaWVudEN1YmVtYXBNYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuYW1iaWVudEN1YmVtYXBMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDdWJlbWFwJywgdVRwbC5hbWJpZW50Q3ViZW1hcExpZ2h0Q3ViZW1hcC52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2JyZGZMb29rdXAnLCB1VHBsLmFtYmllbnRDdWJlbWFwTGlnaHRCUkRGTG9va3VwLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RJUkVDVElPTkFMX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc1NoYWRvdyA9IHNoYWRvd01hcFBhc3MgJiYgbGlnaHQuY2FzdFNoYWRvdztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbCA9IHRoaXMuX2RpcmVjdGlvbmFsTGlnaHRNYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWxbaGFzU2hhZG93ID8gJ2RlZmluZScgOiAndW5kZWZpbmUnXSgnZnJhZ21lbnQnLCAnU0hBRE9XTUFQX0VOQUJMRUQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NoYWRvdykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NIQURPV19DQVNDQURFJywgbGlnaHQuc2hhZG93Q2FzY2FkZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvbG9yJywgdVRwbC5kaXJlY3Rpb25hbExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodERpcmVjdGlvbicsIHVUcGwuZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbi52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmtvbncgbGlnaHQgdHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duTGlnaHRUeXBlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh1bmtub3duTGlnaHRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHBhc3NNYXRlcmlhbCA9IHBhc3MubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnZXllUG9zaXRpb24nLCBleWVQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgndmlld1Byb2plY3Rpb25JbnYnLCB2aWV3UHJvamVjdGlvbkludi5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUxJywgdGhpcy5fZ0J1ZmZlci5nZXRUYXJnZXRUZXh0dXJlMSgpKTtcclxuICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTInLCB0aGlzLl9nQnVmZmVyLmdldFRhcmdldFRleHR1cmUyKCkpO1xyXG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMycsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTMoKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRvd01hcFBhc3MgJiYgbGlnaHQuY2FzdFNoYWRvdykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcCcsIGxpZ2h0Ll9fc2hhZG93TWFwKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRNYXRyaWNlcycsIGxpZ2h0Ll9fbGlnaHRNYXRyaWNlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ3NoYWRvd0Nhc2NhZGVDbGlwc05lYXInLCBsaWdodC5fX2Nhc2NhZGVDbGlwc05lYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdzaGFkb3dDYXNjYWRlQ2xpcHNGYXInLCBsaWdodC5fX2Nhc2NhZGVDbGlwc0Zhcik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcFNpemUnLCBsaWdodC5zaGFkb3dSZXNvbHV0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXNzLnJlbmRlclF1YWQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9yZW5kZXJWb2x1bWVNZXNoTGlzdChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdm9sdW1lTWVzaExpc3QpO1xyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2xpZ2h0YWNjdW11bGF0ZScsIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKTtcclxuXHJcbiAgICAgICAgbGlnaHRBY2N1bUZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJsaWdodGFjY3VtdWxhdGUnLCByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBfcHJlcGFyZUxpZ2h0U2hhZG93OiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB3b3JsZFZpZXcgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpIHtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGlnaHQgPSBzY2VuZS5saWdodHNbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgdm9sdW1lTWVzaCA9IGxpZ2h0LnZvbHVtZU1lc2ggfHwgbGlnaHQuX192b2x1bWVNZXNoO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFsaWdodC5jYXN0U2hhZG93IHx8IGxpZ2h0LmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCAobGlnaHQudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BPSU5UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdTUE9UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRnJ1c3R1bSBjdWxsaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdHJpeDQubXVsdGlwbHkod29ybGRWaWV3LCBjYW1lcmEudmlld01hdHJpeCwgdm9sdW1lTWVzaC53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2VuZS5pc0ZydXN0dW1DdWxsZWQodm9sdW1lTWVzaCwgY2FtZXJhLCB3b3JsZFZpZXcuYXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVNpbmdsZUxpZ2h0U2hhZG93KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIGxpZ2h0LCB2b2x1bWVNZXNoLm1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RJUkVDVElPTkFMX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVNpbmdsZUxpZ2h0U2hhZG93KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIGxpZ2h0LCBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICBfcHJlcGFyZVNpbmdsZUxpZ2h0U2hhZG93OiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIGxpZ2h0LCBtYXRlcmlhbCkge1xyXG4gICAgICAgIHN3aXRjaCAobGlnaHQudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdQT0lOVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93TWFwcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFkb3dNYXBQYXNzLnJlbmRlclBvaW50TGlnaHRTaGFkb3coXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBsaWdodCwgc2hhZG93TWFwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0U2hhZG93TWFwJywgc2hhZG93TWFwc1swXSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcFNpemUnLCBsaWdodC5zaGFkb3dSZXNvbHV0aW9uKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdTUE9UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgIHZhciBzaGFkb3dNYXBzID0gW107XHJcbiAgICAgICAgICAgICAgICB2YXIgbGlnaHRNYXRyaWNlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFkb3dNYXBQYXNzLnJlbmRlclNwb3RMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlciwgc2NlbmUsIGxpZ2h0LCBsaWdodE1hdHJpY2VzLCBzaGFkb3dNYXBzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXAnLCBzaGFkb3dNYXBzWzBdKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0TWF0cml4JywgbGlnaHRNYXRyaWNlc1swXSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcFNpemUnLCBsaWdodC5zaGFkb3dSZXNvbHV0aW9uKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdESVJFQ1RJT05BTF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93TWFwcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpZ2h0TWF0cmljZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciBjYXNjYWRlQ2xpcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhZG93TWFwUGFzcy5yZW5kZXJEaXJlY3Rpb25hbExpZ2h0U2hhZG93KFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBsaWdodCwgY2FzY2FkZUNsaXBzLCBsaWdodE1hdHJpY2VzLCBzaGFkb3dNYXBzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNhc2NhZGVDbGlwc05lYXIgPSBjYXNjYWRlQ2xpcHMuc2xpY2UoKTtcclxuICAgICAgICAgICAgICAgIHZhciBjYXNjYWRlQ2xpcHNGYXIgPSBjYXNjYWRlQ2xpcHMuc2xpY2UoKTtcclxuICAgICAgICAgICAgICAgIGNhc2NhZGVDbGlwc05lYXIucG9wKCk7XHJcbiAgICAgICAgICAgICAgICBjYXNjYWRlQ2xpcHNGYXIuc2hpZnQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBJdGVyYXRlIGZyb20gZmFyIHRvIG5lYXJcclxuICAgICAgICAgICAgICAgIGNhc2NhZGVDbGlwc05lYXIucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgY2FzY2FkZUNsaXBzRmFyLnJldmVyc2UoKTtcclxuICAgICAgICAgICAgICAgIGxpZ2h0TWF0cmljZXMucmV2ZXJzZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxpZ2h0Ll9fY2FzY2FkZUNsaXBzTmVhciA9IGNhc2NhZGVDbGlwc05lYXI7XHJcbiAgICAgICAgICAgICAgICBsaWdodC5fX2Nhc2NhZGVDbGlwc0ZhciA9IGNhc2NhZGVDbGlwc0ZhcjtcclxuICAgICAgICAgICAgICAgIGxpZ2h0Ll9fc2hhZG93TWFwID0gc2hhZG93TWFwc1swXTtcclxuICAgICAgICAgICAgICAgIGxpZ2h0Ll9fbGlnaHRNYXRyaWNlcyA9IGxpZ2h0TWF0cmljZXM7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFVwZGF0ZSBsaWdodCB2b2x1bWUgbWVzaFxyXG4gICAgLy8gTGlnaHQgdm9sdW1lIG1lc2ggaXMgcmVuZGVyZWQgaW4gbGlnaHQgYWNjdW11bGF0ZSBwYXNzIGluc3RlYWQgb2YgZnVsbCBxdWFkLlxyXG4gICAgLy8gSXQgd2lsbCByZWR1Y2UgcGl4ZWxzIHNpZ25pZmljYW50bHkgd2hlbiBsb2NhbCBsaWdodCBpcyByZWxhdGl2ZWx5IHNtYWxsLlxyXG4gICAgLy8gQW5kIHdlIGNhbiB1c2UgY3VzdG9tIHZvbHVtZSBtZXNoIHRvIHNoYXBlIHRoZSBsaWdodC5cclxuICAgIC8vXHJcbiAgICAvLyBTZWUgXCJEZWZlcnJlZCBTaGFkaW5nIE9wdGltaXphdGlvbnNcIiBpbiBHREMyMDExXHJcbiAgICBfdXBkYXRlTGlnaHRQcm94eTogZnVuY3Rpb24gKGxpZ2h0KSB7XHJcbiAgICAgICAgdmFyIHZvbHVtZU1lc2g7XHJcbiAgICAgICAgaWYgKGxpZ2h0LnZvbHVtZU1lc2gpIHtcclxuICAgICAgICAgICAgdm9sdW1lTWVzaCA9IGxpZ2h0LnZvbHVtZU1lc2g7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGxpZ2h0LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIE9ubHkgbG9jYWwgbGlnaHQgKHBvaW50IGFuZCBzcG90KSBuZWVkcyB2b2x1bWUgbWVzaC5cclxuICAgICAgICAgICAgICAgIC8vIERpcmVjdGlvbmFsIGFuZCBhbWJpZW50IGxpZ2h0IHJlbmRlcnMgaW4gZnVsbCBxdWFkXHJcbiAgICAgICAgICAgICAgICBjYXNlICdQT0lOVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdTUEhFUkVfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzaGFkZXIgPSBsaWdodC50eXBlID09PSAnU1BIRVJFX0xJR0hUJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX3NwaGVyZUxpZ2h0U2hhZGVyIDogdGhpcy5fcG9pbnRMaWdodFNoYWRlcjtcclxuICAgICAgICAgICAgICAgICAgICAvLyBWb2x1bWUgbWVzaCBjcmVhdGVkIGF1dG9tYXRpY2FsbHlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWxpZ2h0Ll9fdm9sdW1lTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaWdodC5fX3ZvbHVtZU1lc2ggPSBuZXcgTWVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbDogdGhpcy5fY3JlYXRlTGlnaHRQYXNzTWF0KHNoYWRlciksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogdGhpcy5fbGlnaHRTcGhlcmVHZW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEaXNhYmxlIGN1bGxpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGxpZ2h0IHZvbHVtZSBtZXNoIGludGVyc2VjdCBjYW1lcmEgbmVhciBwbGFuZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCBtZXNoIGluc2lkZSBjYW4gc3RpbGwgYmUgcmVuZGVyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1bGxpbmc6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByID0gbGlnaHQucmFuZ2UgKyAobGlnaHQucmFkaXVzIHx8IDApO1xyXG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2guc2NhbGUuc2V0KHIsIHIsIHIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnU1BPVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQuX192b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoIHx8IG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWw6IHRoaXMuX2NyZWF0ZUxpZ2h0UGFzc01hdCh0aGlzLl9zcG90TGlnaHRTaGFkZXIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogdGhpcy5fbGlnaHRDb25lR2VvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdWxsaW5nOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2ggPSBsaWdodC5fX3ZvbHVtZU1lc2g7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFzcGVjdCA9IE1hdGgudGFuKGxpZ2h0LnBlbnVtYnJhQW5nbGUgKiBNYXRoLlBJIC8gMTgwKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBsaWdodC5yYW5nZTtcclxuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLnNjYWxlLnNldChhc3BlY3QgKiByYW5nZSwgYXNwZWN0ICogcmFuZ2UsIHJhbmdlIC8gMik7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdUVUJFX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICBsaWdodC5fX3ZvbHVtZU1lc2ggPSBsaWdodC5fX3ZvbHVtZU1lc2ggfHwgbmV3IE1lc2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbDogdGhpcy5fY3JlYXRlTGlnaHRQYXNzTWF0KHRoaXMuX3R1YmVMaWdodFNoYWRlciksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5OiB0aGlzLl9saWdodEN5bGluZGVyR2VvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdWxsaW5nOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2ggPSBsaWdodC5fX3ZvbHVtZU1lc2g7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gbGlnaHQucmFuZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5zY2FsZS5zZXQobGlnaHQubGVuZ3RoIC8gMiArIHJhbmdlLCByYW5nZSwgcmFuZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2b2x1bWVNZXNoKSB7XHJcbiAgICAgICAgICAgIHZvbHVtZU1lc2gudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIC8vIEFwcGx5IGxpZ2h0IHRyYW5zZm9ybVxyXG4gICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHZvbHVtZU1lc2gud29ybGRUcmFuc2Zvcm0sIGxpZ2h0LndvcmxkVHJhbnNmb3JtLCB2b2x1bWVNZXNoLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgdmFyIGhhc1NoYWRvdyA9IHRoaXMuc2hhZG93TWFwUGFzcyAmJiBsaWdodC5jYXN0U2hhZG93O1xyXG4gICAgICAgICAgICB2b2x1bWVNZXNoLm1hdGVyaWFsW2hhc1NoYWRvdyA/ICdkZWZpbmUnIDogJ3VuZGVmaW5lJ10oJ2ZyYWdtZW50JywgJ1NIQURPV01BUF9FTkFCTEVEJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfcmVuZGVyVm9sdW1lTWVzaExpc3Q6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHdvcmxkVmlldyA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgdmFyIHByZVpNYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LnByZXoudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucHJlei5mcmFnbWVudCcpKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGZ1bmN0aW9uIGdldFByZVpNYXRlcmlhbCgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByZVpNYXRlcmlhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdm9sdW1lTWVzaExpc3QpIHtcclxuICAgICAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgICAgICBnbC5kZXB0aEZ1bmMoZ2wuTEVRVUFMKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm9sdW1lTWVzaExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB2b2x1bWVNZXNoID0gdm9sdW1lTWVzaExpc3RbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gRnJ1c3R1bSBjdWxsaW5nXHJcbiAgICAgICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHdvcmxkVmlldywgY2FtZXJhLnZpZXdNYXRyaXgsIHZvbHVtZU1lc2gud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNjZW5lLmlzRnJ1c3R1bUN1bGxlZCh2b2x1bWVNZXNoLCBjYW1lcmEsIHdvcmxkVmlldy5hcnJheSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBVc2UgcHJleiB0byBhdm9pZCBvbmUgcGl4ZWwgcmVuZGVyZWQgdHdpY2VcclxuICAgICAgICAgICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBnbC5kZXB0aE1hc2sodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBkZXB0aE1hc2sgbXVzdCBiZSBlbmFibGVkIGJlZm9yZSBjbGVhciBERVBUSF9CVUZGRVJcclxuICAgICAgICAgICAgICAgIGdsLmNsZWFyKGdsLkRFUFRIX0JVRkZFUl9CSVQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoW3ZvbHVtZU1lc2hdLCBjYW1lcmEsIHtcclxuICAgICAgICAgICAgICAgICAgICBnZXRNYXRlcmlhbDogZ2V0UHJlWk1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBSZW5kZXIgbGlnaHRcclxuICAgICAgICAgICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLm1hdGVyaWFsLmRlcHRoTWFzayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKFt2b2x1bWVNZXNoXSwgY2FtZXJhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZ2wuZGVwdGhGdW5jKGdsLkxFU1MpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGlnaHRBY2N1bUZyYW1lQnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0QWNjdW1UZXguZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2xpZ2h0Q29uZUdlby5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9saWdodEN5bGluZGVyR2VvLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0U3BoZXJlR2VvLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9mdWxsUXVhZFBhc3MuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fb3V0cHV0UGFzcy5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlyZWN0aW9uYWxMaWdodE1hdC5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5zaGFkb3dNYXBQYXNzLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IERlZmVycmVkUmVuZGVyZXI7XHJcbiIsIlxyXG5cclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgMngyIE1hdHJpeFxyXG4gKiBAbmFtZSBtYXQyXHJcbiAqL1xyXG5cclxudmFyIG1hdDIgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDJcclxuICpcclxuICogQHJldHVybnMge21hdDJ9IGEgbmV3IDJ4MiBtYXRyaXhcclxuICovXHJcbm1hdDIuY3JlYXRlID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoNCk7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDIgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gYSBuZXcgMngyIG1hdHJpeFxyXG4gKi9cclxubWF0Mi5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIG91dFszXSA9IGFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQyIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2V0IGEgbWF0MiB0byB0aGUgaWRlbnRpdHkgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcclxuICAgIG91dFswXSA9IDE7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zcG9zZSB0aGUgdmFsdWVzIG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cclxubWF0Mi50cmFuc3Bvc2UgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIC8vIElmIHdlIGFyZSB0cmFuc3Bvc2luZyBvdXJzZWx2ZXMgd2UgY2FuIHNraXAgYSBmZXcgc3RlcHMgYnV0IGhhdmUgdG8gY2FjaGUgc29tZSB2YWx1ZXNcclxuICAgIGlmIChvdXQgPT09IGEpIHtcclxuICAgICAgICB2YXIgYTEgPSBhWzFdO1xyXG4gICAgICAgIG91dFsxXSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzJdID0gYTE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG91dFswXSA9IGFbMF07XHJcbiAgICAgICAgb3V0WzFdID0gYVsyXTtcclxuICAgICAgICBvdXRbMl0gPSBhWzFdO1xyXG4gICAgICAgIG91dFszXSA9IGFbM107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnZlcnRzIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cclxubWF0Mi5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sXHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcclxuICAgICAgICBkZXQgPSBhMCAqIGEzIC0gYTIgKiBhMTtcclxuXHJcbiAgICBpZiAoIWRldCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuICAgIG91dFswXSA9ICBhMyAqIGRldDtcclxuICAgIG91dFsxXSA9IC1hMSAqIGRldDtcclxuICAgIG91dFsyXSA9IC1hMiAqIGRldDtcclxuICAgIG91dFszXSA9ICBhMCAqIGRldDtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGFkanVnYXRlIG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cclxubWF0Mi5hZGpvaW50ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICAvLyBDYWNoaW5nIHRoaXMgdmFsdWUgaXMgbmVzc2VjYXJ5IGlmIG91dCA9PSBhXHJcbiAgICB2YXIgYTAgPSBhWzBdO1xyXG4gICAgb3V0WzBdID0gIGFbM107XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIG91dFsyXSA9IC1hWzJdO1xyXG4gICAgb3V0WzNdID0gIGEwO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkZXRlcm1pbmFudCBvZiBhXHJcbiAqL1xyXG5tYXQyLmRldGVybWluYW50ID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybiBhWzBdICogYVszXSAtIGFbMl0gKiBhWzFdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xyXG5tYXQyLm11bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYikge1xyXG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXTtcclxuICAgIHZhciBiMCA9IGJbMF0sIGIxID0gYlsxXSwgYjIgPSBiWzJdLCBiMyA9IGJbM107XHJcbiAgICBvdXRbMF0gPSBhMCAqIGIwICsgYTIgKiBiMTtcclxuICAgIG91dFsxXSA9IGExICogYjAgKyBhMyAqIGIxO1xyXG4gICAgb3V0WzJdID0gYTAgKiBiMiArIGEyICogYjM7XHJcbiAgICBvdXRbM10gPSBhMSAqIGIyICsgYTMgKiBiMztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQyLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbm1hdDIubXVsID0gbWF0Mi5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0MiBieSB0aGUgZ2l2ZW4gYW5nbGVcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLFxyXG4gICAgICAgIHMgPSBNYXRoLnNpbihyYWQpLFxyXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpO1xyXG4gICAgb3V0WzBdID0gYTAgKiAgYyArIGEyICogcztcclxuICAgIG91dFsxXSA9IGExICogIGMgKyBhMyAqIHM7XHJcbiAgICBvdXRbMl0gPSBhMCAqIC1zICsgYTIgKiBjO1xyXG4gICAgb3V0WzNdID0gYTEgKiAtcyArIGEzICogYztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2NhbGVzIHRoZSBtYXQyIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgdGhlIHZlYzIgdG8gc2NhbGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqKi9cclxubWF0Mi5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXSxcclxuICAgICAgICB2MCA9IHZbMF0sIHYxID0gdlsxXTtcclxuICAgIG91dFswXSA9IGEwICogdjA7XHJcbiAgICBvdXRbMV0gPSBhMSAqIHYwO1xyXG4gICAgb3V0WzJdID0gYTIgKiB2MTtcclxuICAgIG91dFszXSA9IGEzICogdjE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cclxubWF0Mi5mcm9iID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybihNYXRoLnNxcnQoTWF0aC5wb3coYVswXSwgMikgKyBNYXRoLnBvdyhhWzFdLCAyKSArIE1hdGgucG93KGFbMl0sIDIpICsgTWF0aC5wb3coYVszXSwgMikpKVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgTCwgRCBhbmQgVSBtYXRyaWNlcyAoTG93ZXIgdHJpYW5ndWxhciwgRGlhZ29uYWwgYW5kIFVwcGVyIHRyaWFuZ3VsYXIpIGJ5IGZhY3Rvcml6aW5nIHRoZSBpbnB1dCBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBMIHRoZSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IEQgdGhlIGRpYWdvbmFsIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IFUgdGhlIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgaW5wdXQgbWF0cml4IHRvIGZhY3Rvcml6ZVxyXG4gKi9cclxuXHJcbm1hdDIuTERVID0gZnVuY3Rpb24gKEwsIEQsIFUsIGEpIHtcclxuICAgIExbMl0gPSBhWzJdL2FbMF07XHJcbiAgICBVWzBdID0gYVswXTtcclxuICAgIFVbMV0gPSBhWzFdO1xyXG4gICAgVVszXSA9IGFbM10gLSBMWzJdICogVVsxXTtcclxuICAgIHJldHVybiBbTCwgRCwgVV07XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbWF0MjsiLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgMngzIE1hdHJpeFxyXG4gKiBAbmFtZSBtYXQyZFxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogQSBtYXQyZCBjb250YWlucyBzaXggZWxlbWVudHMgZGVmaW5lZCBhczpcclxuICogPHByZT5cclxuICogW2EsIGMsIHR4LFxyXG4gKiAgYiwgZCwgdHldXHJcbiAqIDwvcHJlPlxyXG4gKiBUaGlzIGlzIGEgc2hvcnQgZm9ybSBmb3IgdGhlIDN4MyBtYXRyaXg6XHJcbiAqIDxwcmU+XHJcbiAqIFthLCBjLCB0eCxcclxuICogIGIsIGQsIHR5LFxyXG4gKiAgMCwgMCwgMV1cclxuICogPC9wcmU+XHJcbiAqIFRoZSBsYXN0IHJvdyBpcyBpZ25vcmVkIHNvIHRoZSBhcnJheSBpcyBzaG9ydGVyIGFuZCBvcGVyYXRpb25zIGFyZSBmYXN0ZXIuXHJcbiAqL1xyXG5cclxudmFyIG1hdDJkID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBtYXQyZFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IGEgbmV3IDJ4MyBtYXRyaXhcclxuICovXHJcbm1hdDJkLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDYpO1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMTtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSAwO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDJkIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgbWF0cml4IHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gYSBuZXcgMngzIG1hdHJpeFxyXG4gKi9cclxubWF0MmQuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoNik7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQyZCB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xyXG5tYXQyZC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBhIG1hdDJkIHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xyXG5tYXQyZC5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMTtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSAwO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnZlcnRzIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXHJcbm1hdDJkLmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmFyIGFhID0gYVswXSwgYWIgPSBhWzFdLCBhYyA9IGFbMl0sIGFkID0gYVszXSxcclxuICAgICAgICBhdHggPSBhWzRdLCBhdHkgPSBhWzVdO1xyXG5cclxuICAgIHZhciBkZXQgPSBhYSAqIGFkIC0gYWIgKiBhYztcclxuICAgIGlmKCFkZXQpe1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuICAgIG91dFswXSA9IGFkICogZGV0O1xyXG4gICAgb3V0WzFdID0gLWFiICogZGV0O1xyXG4gICAgb3V0WzJdID0gLWFjICogZGV0O1xyXG4gICAgb3V0WzNdID0gYWEgKiBkZXQ7XHJcbiAgICBvdXRbNF0gPSAoYWMgKiBhdHkgLSBhZCAqIGF0eCkgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoYWIgKiBhdHggLSBhYSAqIGF0eSkgKiBkZXQ7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkZXRlcm1pbmFudCBvZiBhXHJcbiAqL1xyXG5tYXQyZC5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4gYVswXSAqIGFbM10gLSBhWzFdICogYVsyXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQyZCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xyXG5tYXQyZC5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sIGE0ID0gYVs0XSwgYTUgPSBhWzVdLFxyXG4gICAgICAgIGIwID0gYlswXSwgYjEgPSBiWzFdLCBiMiA9IGJbMl0sIGIzID0gYlszXSwgYjQgPSBiWzRdLCBiNSA9IGJbNV07XHJcbiAgICBvdXRbMF0gPSBhMCAqIGIwICsgYTIgKiBiMTtcclxuICAgIG91dFsxXSA9IGExICogYjAgKyBhMyAqIGIxO1xyXG4gICAgb3V0WzJdID0gYTAgKiBiMiArIGEyICogYjM7XHJcbiAgICBvdXRbM10gPSBhMSAqIGIyICsgYTMgKiBiMztcclxuICAgIG91dFs0XSA9IGEwICogYjQgKyBhMiAqIGI1ICsgYTQ7XHJcbiAgICBvdXRbNV0gPSBhMSAqIGI0ICsgYTMgKiBiNSArIGE1O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDJkLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbm1hdDJkLm11bCA9IG1hdDJkLm11bHRpcGx5O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0MmQgYnkgdGhlIGdpdmVuIGFuZ2xlXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xyXG5tYXQyZC5yb3RhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sIGE0ID0gYVs0XSwgYTUgPSBhWzVdLFxyXG4gICAgICAgIHMgPSBNYXRoLnNpbihyYWQpLFxyXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpO1xyXG4gICAgb3V0WzBdID0gYTAgKiAgYyArIGEyICogcztcclxuICAgIG91dFsxXSA9IGExICogIGMgKyBhMyAqIHM7XHJcbiAgICBvdXRbMl0gPSBhMCAqIC1zICsgYTIgKiBjO1xyXG4gICAgb3V0WzNdID0gYTEgKiAtcyArIGEzICogYztcclxuICAgIG91dFs0XSA9IGE0O1xyXG4gICAgb3V0WzVdID0gYTU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MmQgYnkgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGdpdmVuIHZlYzJcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICoqL1xyXG5tYXQyZC5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXSwgYTQgPSBhWzRdLCBhNSA9IGFbNV0sXHJcbiAgICAgICAgdjAgPSB2WzBdLCB2MSA9IHZbMV07XHJcbiAgICBvdXRbMF0gPSBhMCAqIHYwO1xyXG4gICAgb3V0WzFdID0gYTEgKiB2MDtcclxuICAgIG91dFsyXSA9IGEyICogdjE7XHJcbiAgICBvdXRbM10gPSBhMyAqIHYxO1xyXG4gICAgb3V0WzRdID0gYTQ7XHJcbiAgICBvdXRbNV0gPSBhNTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNsYXRlcyB0aGUgbWF0MmQgYnkgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGdpdmVuIHZlYzJcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHRyYW5zbGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqKi9cclxubWF0MmQudHJhbnNsYXRlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLCBhNCA9IGFbNF0sIGE1ID0gYVs1XSxcclxuICAgICAgICB2MCA9IHZbMF0sIHYxID0gdlsxXTtcclxuICAgIG91dFswXSA9IGEwO1xyXG4gICAgb3V0WzFdID0gYTE7XHJcbiAgICBvdXRbMl0gPSBhMjtcclxuICAgIG91dFszXSA9IGEzO1xyXG4gICAgb3V0WzRdID0gYTAgKiB2MCArIGEyICogdjEgKyBhNDtcclxuICAgIG91dFs1XSA9IGExICogdjAgKyBhMyAqIHYxICsgYTU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQyZFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gY2FsY3VsYXRlIEZyb2Jlbml1cyBub3JtIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IEZyb2Jlbml1cyBub3JtXHJcbiAqL1xyXG5tYXQyZC5mcm9iID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybihNYXRoLnNxcnQoTWF0aC5wb3coYVswXSwgMikgKyBNYXRoLnBvdyhhWzFdLCAyKSArIE1hdGgucG93KGFbMl0sIDIpICsgTWF0aC5wb3coYVszXSwgMikgKyBNYXRoLnBvdyhhWzRdLCAyKSArIE1hdGgucG93KGFbNV0sIDIpICsgMSkpXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbWF0MmQ7IiwiLyoqXHJcbiAqIEBmaWxlb3ZlcnZpZXcgZ2wtbWF0cml4IC0gSGlnaCBwZXJmb3JtYW5jZSBtYXRyaXggYW5kIHZlY3RvciBvcGVyYXRpb25zXHJcbiAqIEBhdXRob3IgQnJhbmRvbiBKb25lc1xyXG4gKiBAYXV0aG9yIENvbGluIE1hY0tlbnppZSBJVlxyXG4gKiBAdmVyc2lvbiAyLjIuMlxyXG4gKi9cclxuXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB2ZWMyIGZyb20gJy4vdmVjMic7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vdmVjMyc7XHJcbmltcG9ydCB2ZWM0IGZyb20gJy4vdmVjNCc7XHJcbmltcG9ydCBtYXQyIGZyb20gJy4vbWF0Mic7XHJcbmltcG9ydCBtYXQyZCBmcm9tICcuL21hdDJkJztcclxuaW1wb3J0IG1hdDMgZnJvbSAnLi9tYXQzJztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9tYXQ0JztcclxuaW1wb3J0IHF1YXQgZnJvbSAnLi9xdWF0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIHZlYzI6IHZlYzIsXHJcbiAgICB2ZWMzOiB2ZWMzLFxyXG4gICAgdmVjNDogdmVjNCxcclxuICAgIG1hdDI6IG1hdDIsXHJcbiAgICBtYXQyZDogbWF0MmQsXHJcbiAgICBtYXQzOiBtYXQzLFxyXG4gICAgbWF0NDogbWF0NCxcclxuICAgIHF1YXQ6IHF1YXRcclxufTtcclxuIiwiLy8gREVQUkVDQVRFRFxyXG5pbXBvcnQgZ2xtYXRyaXggZnJvbSAnLi4vZ2xtYXRyaXgnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZ2xtYXRyaXg7XHJcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuU3BoZXJlXHJcbiAqIEBleHRlbmRzIHtjbGF5LkxpZ2h0fVxyXG4gKi9cclxudmFyIFNwaGVyZUxpZ2h0ID0gTGlnaHQuZXh0ZW5kKFxyXG4vKiogQGxlbmRzIGNsYXkubGlnaHQuU3BoZXJlIyAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJhbmdlOiAxMDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYWRpdXM6IDVcclxufSwge1xyXG5cclxuICAgIHR5cGU6ICdTUEhFUkVfTElHSFQnLFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBzcGhlcmVMaWdodFBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BoZXJlTGlnaHRSYW5nZToge1xyXG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5yYW5nZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BoZXJlTGlnaHRSYWRpdXM6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmFkaXVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzcGhlcmVMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSppbnRlbnNpdHksIGNvbG9yWzFdKmludGVuc2l0eSwgY29sb3JbMl0qaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTcGhlcmVMaWdodDtcclxuIiwiaW1wb3J0IExpZ2h0IGZyb20gJy4uL0xpZ2h0JztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5saWdodC5UdWJlXHJcbiAqIEBleHRlbmRzIHtjbGF5LkxpZ2h0fVxyXG4gKi9cclxudmFyIFR1YmVMaWdodCA9IExpZ2h0LmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5LmxpZ2h0LlR1YmUjICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcmFuZ2U6IDEwMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogMTBcclxufSwge1xyXG5cclxuICAgIHR5cGU6ICdUVUJFX0xJR0hUJyxcclxuXHJcbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XHJcbiAgICAgICAgdHViZUxpZ2h0UG9zaXRpb246IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0V29ybGRQb3NpdGlvbigpLmFycmF5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdHViZUxpZ2h0RXh0ZW5kOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBFeHRlbmQgaW4geCBheGlzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguY29weShpbnN0YW5jZS53b3JsZFRyYW5zZm9ybS54KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubm9ybWFsaXplKCkuc2NhbGUoaW5zdGFuY2UubGVuZ3RoIC8gMikuYXJyYXk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KSgpXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdHViZUxpZ2h0UmFuZ2U6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmFuZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICB0dWJlTGlnaHRDb2xvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0qaW50ZW5zaXR5LCBjb2xvclsxXSppbnRlbnNpdHksIGNvbG9yWzJdKmludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVHViZUxpZ2h0O1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IGNyZWF0ZUNvbXBvc2l0b3IgZnJvbSAnLi4vY3JlYXRlQ29tcG9zaXRvcic7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubG9hZGVyLkZYXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgRlhMb2FkZXIgPSBCYXNlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkubG9hZGVyLkZYIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHJvb3RQYXRoOiAnJyxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGV4dHVyZVJvb3RQYXRoOiAnJyxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgc2hhZGVyUm9vdFBhdGg6ICcnLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuU2NlbmV9XHJcbiAgICAgKi9cclxuICAgIHNjZW5lOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuQ2FtZXJhfVxyXG4gICAgICovXHJcbiAgICBjYW1lcmE6IG51bGxcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LmxvYWRlci5GWC5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHVybFxyXG4gICAgICovXHJcbiAgICBsb2FkOiBmdW5jdGlvbih1cmwpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5yb290UGF0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnJvb3RQYXRoID0gdXJsLnNsaWNlKDAsIHVybC5sYXN0SW5kZXhPZignLycpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZlbmRvci5yZXF1ZXN0LmdldCh7XHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICBvbnByb2dyZXNzOiBmdW5jdGlvbihwZXJjZW50LCBsb2FkZWQsIHRvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3Byb2dyZXNzJywgcGVyY2VudCwgbG9hZGVkLCB0b3RhbCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uZXJyb3I6IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignZXJyb3InLCBlKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgIG9ubG9hZDogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGNyZWF0ZUNvbXBvc2l0b3IoSlNPTi5wYXJzZShkYXRhKSwge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHR1cmVSb290UGF0aDogdGhpcy50ZXh0dXJlUm9vdFBhdGggfHwgdGhpcy5yb290UGF0aCxcclxuICAgICAgICAgICAgICAgICAgICBjYW1lcmE6IHRoaXMuY2FtZXJhLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lOiB0aGlzLnNjZW5lXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZYTG9hZGVyO1xyXG4iLCJpbXBvcnQgbWF0MiBmcm9tICcuLi9nbG1hdHJpeC9tYXQyJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuTWF0cml4MlxyXG4gKi9cclxudmFyIE1hdHJpeDIgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JhZ2Ugb2YgTWF0cml4MlxyXG4gICAgICogQG5hbWUgYXJyYXlcclxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5NYXRyaXgyI1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFycmF5ID0gbWF0Mi5jcmVhdGUoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIF9kaXJ0eVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5NYXRyaXgyI1xyXG4gICAgICovXHJcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbn07XHJcblxyXG5NYXRyaXgyLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogTWF0cml4MixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBjb21wb25lbnRzIGZyb20gYXJyYXlcclxuICAgICAqIEBwYXJhbSAge0Zsb2F0MzJBcnJheXxudW1iZXJbXX0gYXJyXHJcbiAgICAgKi9cclxuICAgIHNldEFycmF5OiBmdW5jdGlvbiAoYXJyKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbaV0gPSBhcnJbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IE1hdHJpeDJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAobmV3IE1hdHJpeDIoKSkuY29weSh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGZyb20gYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQyLmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgYWRqdWdhdGUgb2Ygc2VsZiwgaW4tcGxhY2VcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgYWRqb2ludDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0Mi5hZGpvaW50KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgbWF0cml4IGRldGVybWluYW50XHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRldGVybWluYW50OiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbWF0Mi5kZXRlcm1pbmFudCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdG8gYSBpZGVudGl0eSBtYXRyaXhcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgaWRlbnRpdHk6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDIuaWRlbnRpdHkodGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydCBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIGludmVydDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0Mi5pbnZlcnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdXRpcGx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgbXVsOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0Mi5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseUxlZnRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBtdWxMZWZ0OiBmdW5jdGlvbihhKSB7XHJcbiAgICAgICAgbWF0Mi5tdWwodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDIubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IGEgYW5kIHNlbGYsIGEgaXMgb24gdGhlIGxlZnRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uKGEpIHtcclxuICAgICAgICBtYXQyLm11bHRpcGx5KHRoaXMuYXJyYXksIGEuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhblxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgIHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICByb3RhdGU6IGZ1bmN0aW9uKHJhZCkge1xyXG4gICAgICAgIG1hdDIucm90YXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHJhZCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHNlbGYgYnkgc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24odikge1xyXG4gICAgICAgIG1hdDIuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgdi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNwb3NlIHNlbGYsIGluLXBsYWNlLlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc3Bvc2U6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDIudHJhbnNwb3NlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7TWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge01hdHJpeDJ9IGFcclxuICogQHJldHVybiB7TWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIuYWRqb2ludCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0Mi5hZGpvaW50KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0Mi5jb3B5KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbk1hdHJpeDIuZGV0ZXJtaW5hbnQgPSBmdW5jdGlvbihhKSB7XHJcbiAgICByZXR1cm4gbWF0Mi5kZXRlcm1pbmFudChhLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IG91dFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICBtYXQyLmlkZW50aXR5KG91dC5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBtYXQyLmludmVydChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gKi9cclxuTWF0cml4Mi5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG1hdDIubXVsKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gKi9cclxuTWF0cml4Mi5tdWx0aXBseSA9IE1hdHJpeDIubXVsO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIucm90YXRlID0gZnVuY3Rpb24ob3V0LCBhLCByYWQpIHtcclxuICAgIG1hdDIucm90YXRlKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICBtYXQyLnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtNYXRyaXgyfSBvdXRcclxuICogQHBhcmFtICB7TWF0cml4Mn0gYVxyXG4gKiBAcmV0dXJuIHtNYXRyaXgyfVxyXG4gKi9cclxuTWF0cml4Mi50cmFuc3Bvc2UgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDIudHJhbnNwb3NlKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRyaXgyO1xyXG4iLCJpbXBvcnQgbWF0MmQgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0MmQnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5NYXRyaXgyZFxyXG4gKi9cclxudmFyIE1hdHJpeDJkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAvKipcclxuICAgICAqIFN0b3JhZ2Ugb2YgTWF0cml4MmRcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MmQjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSBtYXQyZC5jcmVhdGUoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIF9kaXJ0eVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5NYXRyaXgyZCNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuTWF0cml4MmQucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBNYXRyaXgyZCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBjb21wb25lbnRzIGZyb20gYXJyYXlcclxuICAgICAqIEBwYXJhbSAge0Zsb2F0MzJBcnJheXxudW1iZXJbXX0gYXJyXHJcbiAgICAgKi9cclxuICAgIHNldEFycmF5OiBmdW5jdGlvbiAoYXJyKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbaV0gPSBhcnJbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IE1hdHJpeDJkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgTWF0cml4MmQoKSkuY29weSh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGZyb20gYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDJkLmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBtYXRyaXggZGV0ZXJtaW5hbnRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGV0ZXJtaW5hbnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBtYXQyZC5kZXRlcm1pbmFudCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdG8gYSBpZGVudGl0eSBtYXRyaXhcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIGlkZW50aXR5OiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQyZC5pZGVudGl0eSh0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0IHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIGludmVydDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0MmQuaW52ZXJ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXV0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgbXVsOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0MmQubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBtdWxMZWZ0OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0MmQubXVsKHRoaXMuYXJyYXksIGIuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDJkLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBhIGFuZCBzZWxmLCBhIGlzIG9uIHRoZSBsZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQyZC5tdWx0aXBseSh0aGlzLmFycmF5LCBiLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW5cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gICByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZTogZnVuY3Rpb24ocmFkKSB7XHJcbiAgICAgICAgbWF0MmQucm90YXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHJhZCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHNlbGYgYnkgc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgc2NhbGU6IGZ1bmN0aW9uKHMpIHtcclxuICAgICAgICBtYXQyZC5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNsYXRlIHNlbGYgYnkgdlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgdlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgdHJhbnNsYXRlOiBmdW5jdGlvbih2KSB7XHJcbiAgICAgICAgbWF0MmQudHJhbnNsYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDJkLmNvcHkob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbk1hdHJpeDJkLmRldGVybWluYW50ID0gZnVuY3Rpb24oYSkge1xyXG4gICAgcmV0dXJuIG1hdDJkLmRldGVybWluYW50KGEuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcclxuICAgIG1hdDJkLmlkZW50aXR5KG91dC5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0MmQuaW52ZXJ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQubXVsID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBtYXQyZC5tdWwob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQubXVsdGlwbHkgPSBNYXRyaXgyZC5tdWw7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgIHJhZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQucm90YXRlID0gZnVuY3Rpb24ob3V0LCBhLCByYWQpIHtcclxuICAgIG1hdDJkLnJvdGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIG1hdDJkLnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQudHJhbnNsYXRlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICBtYXQyZC50cmFuc2xhdGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1hdHJpeDJkO1xyXG4iLCJpbXBvcnQgbWF0MyBmcm9tICcuLi9nbG1hdHJpeC9tYXQzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuTWF0cml4M1xyXG4gKi9cclxudmFyIE1hdHJpeDMgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIE1hdHJpeDNcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MyNcclxuICAgICAqL1xyXG4gICAgdGhpcy5hcnJheSA9IG1hdDMuY3JlYXRlKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MyNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuTWF0cml4My5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IE1hdHJpeDMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gYXJyW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGFkanVnYXRlIG9mIHNlbGYsIGluLXBsYWNlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGFkam9pbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBtYXQzLmFkam9pbnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IE1hdHJpeDNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gKG5ldyBNYXRyaXgzKCkpLmNvcHkodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIG1hdDMuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIG1hdHJpeCBkZXRlcm1pbmFudFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkZXRlcm1pbmFudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBtYXQzLmRldGVybWluYW50KHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIE1hdHJpeDJkIGFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDJkOiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIG1hdDMuZnJvbU1hdDJkKHRoaXMuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3BpZXMgdGhlIHVwcGVyLWxlZnQgM3gzIHZhbHVlcyBvZiBNYXRyaXg0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDQ6IGZ1bmN0aW9uIChhKSB7XHJcbiAgICAgICAgbWF0My5mcm9tTWF0NCh0aGlzLmFycmF5LCBhLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyBhIHJvdGF0aW9uIG1hdHJpeCBmcm9tIHRoZSBnaXZlbiBxdWF0ZXJuaW9uXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgZnJvbVF1YXQ6IGZ1bmN0aW9uIChxKSB7XHJcbiAgICAgICAgbWF0My5mcm9tUXVhdCh0aGlzLmFycmF5LCBxLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRvIGEgaWRlbnRpdHkgbWF0cml4XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGlkZW50aXR5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbWF0My5pZGVudGl0eSh0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0IHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgaW52ZXJ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbWF0My5pbnZlcnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdXRpcGx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgbXVsOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIG1hdDMubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgbXVsTGVmdDogZnVuY3Rpb24gKGEpIHtcclxuICAgICAgICBtYXQzLm11bCh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIG1hdDMubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IGEgYW5kIHNlbGYsIGEgaXMgb24gdGhlIGxlZnRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uIChhKSB7XHJcbiAgICAgICAgbWF0My5tdWx0aXBseSh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW5cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gICByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgcm90YXRlOiBmdW5jdGlvbiAocmFkKSB7XHJcbiAgICAgICAgbWF0My5yb3RhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgc2VsZiBieSBzXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9ICBzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbiAodikge1xyXG4gICAgICAgIG1hdDMuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgdi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zbGF0ZSBzZWxmIGJ5IHZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAodikge1xyXG4gICAgICAgIG1hdDMudHJhbnNsYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgYSAzeDMgbm9ybWFsIG1hdHJpeCAodHJhbnNwb3NlIGludmVyc2UpIGZyb20gdGhlIDR4NCBtYXRyaXhcclxuICAgICAqIEBwYXJhbSB7Y2xheS5NYXRyaXg0fSBhXHJcbiAgICAgKi9cclxuICAgIG5vcm1hbEZyb21NYXQ0OiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIG1hdDMubm9ybWFsRnJvbU1hdDQodGhpcy5hcnJheSwgYS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zcG9zZSBzZWxmLCBpbi1wbGFjZS5cclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgdHJhbnNwb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbWF0My50cmFuc3Bvc2UodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSk7XHJcbiAgICB9XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5hZGpvaW50ID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgbWF0My5hZGpvaW50KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuY29weSA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMuY29weShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5NYXRyaXgzLmRldGVybWluYW50ID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybiBtYXQzLmRldGVybWluYW50KGEuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuaWRlbnRpdHkgPSBmdW5jdGlvbiAob3V0KSB7XHJcbiAgICBtYXQzLmlkZW50aXR5KG91dC5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuaW52ZXJ0ID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgbWF0My5pbnZlcnQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLm11bCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIG1hdDMubXVsKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5tdWx0aXBseSA9IE1hdHJpeDMubXVsO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gIG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuZnJvbU1hdDJkID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgbWF0My5mcm9tTWF0MmQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5mcm9tTWF0NCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMuZnJvbU1hdDQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9ICAgIG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5mcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEpIHtcclxuICAgIG1hdDMuZnJvbVF1YXQob3V0LmFycmF5LCBxLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5ub3JtYWxGcm9tTWF0NCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMubm9ybWFsRnJvbU1hdDQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICBtYXQzLnJvdGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLnNjYWxlID0gZnVuY3Rpb24gKG91dCwgYSwgdikge1xyXG4gICAgbWF0My5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLnRyYW5zcG9zZSA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMudHJhbnNwb3NlKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHYpIHtcclxuICAgIG1hdDMudHJhbnNsYXRlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRyaXgzO1xyXG4iLCJpbXBvcnQgVmVjdG9yMyBmcm9tICcuL1ZlY3RvcjMnO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tICcuL1ZlY3RvcjInO1xyXG5cclxuLyoqXHJcbiAqIFJhbmRvbSBvciBjb25zdGFudCAxZCwgMmQsIDNkIHZlY3RvciBnZW5lcmF0b3JcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlZhbHVlXHJcbiAqL1xyXG52YXIgVmFsdWUgPSBmdW5jdGlvbigpIHt9O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcnxjbGF5LlZlY3RvcjJ8Y2xheS5WZWN0b3IzfSBbb3V0XVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ8Y2xheS5WZWN0b3IyfGNsYXkuVmVjdG9yM31cclxuICovXHJcblZhbHVlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihvdXQpIHt9O1xyXG5cclxuLy8gQ29uc3RhbnRcclxudmFyIENvbnN0YW50VmFsdWUgPSBmdW5jdGlvbih2YWwpIHtcclxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgIH07XHJcbn07XHJcbkNvbnN0YW50VmFsdWUucHJvdG90eXBlID0gbmV3IFZhbHVlKCk7XHJcbkNvbnN0YW50VmFsdWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29uc3RhbnRWYWx1ZTtcclxuXHJcbi8vIFZlY3RvclxyXG52YXIgVmVjdG9yVmFsdWUgPSBmdW5jdGlvbih2YWwpIHtcclxuICAgIHZhciBDb25zdHJ1Y3RvciA9IHZhbC5jb25zdHJ1Y3RvcjtcclxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IENvbnN0cnVjdG9yKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG91dC5jb3B5KHZhbCk7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH07XHJcbn07XHJcblZlY3RvclZhbHVlLnByb3RvdHlwZSA9IG5ldyBWYWx1ZSgpO1xyXG5WZWN0b3JWYWx1ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWZWN0b3JWYWx1ZTtcclxuLy9SYW5kb20gMURcclxudmFyIFJhbmRvbTFEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIHZhciByYW5nZSA9IG1heCAtIG1pbjtcclxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiByYW5nZSArIG1pbjtcclxuICAgIH07XHJcbn07XHJcblJhbmRvbTFELnByb3RvdHlwZSA9IG5ldyBWYWx1ZSgpO1xyXG5SYW5kb20xRC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSYW5kb20xRDtcclxuXHJcbi8vIFJhbmRvbTJEXHJcbnZhciBSYW5kb20yRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XHJcbiAgICB2YXIgcmFuZ2VYID0gbWF4LnggLSBtaW4ueDtcclxuICAgIHZhciByYW5nZVkgPSBtYXgueSAtIG1pbi55O1xyXG5cclxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgVmVjdG9yMi5zZXQoXHJcbiAgICAgICAgICAgIG91dCxcclxuICAgICAgICAgICAgcmFuZ2VYICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVswXSxcclxuICAgICAgICAgICAgcmFuZ2VZICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVsxXVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9O1xyXG59O1xyXG5SYW5kb20yRC5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcclxuUmFuZG9tMkQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZG9tMkQ7XHJcblxyXG52YXIgUmFuZG9tM0QgPSBmdW5jdGlvbihtaW4sIG1heCkge1xyXG4gICAgdmFyIHJhbmdlWCA9IG1heC54IC0gbWluLng7XHJcbiAgICB2YXIgcmFuZ2VZID0gbWF4LnkgLSBtaW4ueTtcclxuICAgIHZhciByYW5nZVogPSBtYXgueiAtIG1pbi56O1xyXG5cclxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgVmVjdG9yMy5zZXQoXHJcbiAgICAgICAgICAgIG91dCxcclxuICAgICAgICAgICAgcmFuZ2VYICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVswXSxcclxuICAgICAgICAgICAgcmFuZ2VZICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVsxXSxcclxuICAgICAgICAgICAgcmFuZ2VaICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVsyXVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9O1xyXG59O1xyXG5SYW5kb20zRC5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcclxuUmFuZG9tM0QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZG9tM0Q7XHJcblxyXG4vLyBGYWN0b3J5IG1ldGhvZHNcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBjb25zdGFudCAxZCB2YWx1ZSBnZW5lcmF0b3JcclxuICogQHBhcmFtICB7bnVtYmVyfSBjb25zdGFudFxyXG4gKiBAcmV0dXJuIHtjbGF5LlZhbHVlfVxyXG4gKi9cclxuVmFsdWUuY29uc3RhbnQgPSBmdW5jdGlvbihjb25zdGFudCkge1xyXG4gICAgcmV0dXJuIG5ldyBDb25zdGFudFZhbHVlKGNvbnN0YW50KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBjb25zdGFudCB2ZWN0b3IgdmFsdWUoMmQgb3IgM2QpIGdlbmVyYXRvclxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ8Y2xheS5WZWN0b3IzfSB2ZWN0b3JcclxuICogQHJldHVybiB7Y2xheS5WYWx1ZX1cclxuICovXHJcblZhbHVlLnZlY3RvciA9IGZ1bmN0aW9uKHZlY3Rvcikge1xyXG4gICAgcmV0dXJuIG5ldyBWZWN0b3JWYWx1ZSh2ZWN0b3IpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHJhbmRvbSAxZCB2YWx1ZSBnZW5lcmF0b3JcclxuICogQHBhcmFtICB7bnVtYmVyfSBtaW5cclxuICogQHBhcmFtICB7bnVtYmVyfSBtYXhcclxuICogQHJldHVybiB7Y2xheS5WYWx1ZX1cclxuICovXHJcblZhbHVlLnJhbmRvbTFEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIHJldHVybiBuZXcgUmFuZG9tMUQobWluLCBtYXgpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHJhbmRvbSAyZCB2YWx1ZSBnZW5lcmF0b3JcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBtaW5cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBtYXhcclxuICogQHJldHVybiB7Y2xheS5WYWx1ZX1cclxuICovXHJcblZhbHVlLnJhbmRvbTJEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIHJldHVybiBuZXcgUmFuZG9tMkQobWluLCBtYXgpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHJhbmRvbSAzZCB2YWx1ZSBnZW5lcmF0b3JcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBtaW5cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBtYXhcclxuICogQHJldHVybiB7Y2xheS5WYWx1ZX1cclxuICovXHJcblZhbHVlLnJhbmRvbTNEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIHJldHVybiBuZXcgUmFuZG9tM0QobWluLCBtYXgpO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVmFsdWU7XHJcbiIsImltcG9ydCB2ZWM0IGZyb20gJy4uL2dsbWF0cml4L3ZlYzQnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5WZWN0b3I0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB6XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XHJcbiAqL1xyXG52YXIgVmVjdG9yNCA9IGZ1bmN0aW9uKHgsIHksIHosIHcpIHtcclxuXHJcbiAgICB4ID0geCB8fCAwO1xyXG4gICAgeSA9IHkgfHwgMDtcclxuICAgIHogPSB6IHx8IDA7XHJcbiAgICB3ID0gdyB8fCAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcmFnZSBvZiBWZWN0b3I0LCByZWFkIGFuZCB3cml0ZSBvZiB4LCB5LCB6LCB3IHdpbGwgY2hhbmdlIHRoZSB2YWx1ZXMgaW4gYXJyYXlcclxuICAgICAqIEFsbCBtZXRob2RzIGFsc28gb3BlcmF0ZSBvbiB0aGUgYXJyYXkgaW5zdGVhZCBvZiB4LCB5LCB6LCB3IGNvbXBvbmVudHNcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yNCNcclxuICAgICAqL1xyXG4gICAgdGhpcy5hcnJheSA9IHZlYzQuZnJvbVZhbHVlcyh4LCB5LCB6LCB3KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpcnR5IGZsYWcgaXMgdXNlZCBieSB0aGUgTm9kZSB0byBkZXRlcm1pbmVcclxuICAgICAqIGlmIHRoZSBtYXRyaXggaXMgdXBkYXRlZCB0byBsYXRlc3RcclxuICAgICAqIEBuYW1lIF9kaXJ0eVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3I0I1xyXG4gICAgICovXHJcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbn07XHJcblxyXG5WZWN0b3I0LnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogVmVjdG9yNCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBiIHRvIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0LmFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50c1xyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgelxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgd1xyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKHgsIHksIHosIHcpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0geDtcclxuICAgICAgICB0aGlzLmFycmF5WzFdID0geTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gejtcclxuICAgICAgICB0aGlzLmFycmF5WzNdID0gdztcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHksIHogYW5kIHcgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24oYXJyKSB7XHJcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IGFyclswXTtcclxuICAgICAgICB0aGlzLmFycmF5WzFdID0gYXJyWzFdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMl0gPSBhcnJbMl07XHJcbiAgICAgICAgdGhpcy5hcnJheVszXSA9IGFyclszXTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IFZlY3RvcjRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yNCh0aGlzLngsIHRoaXMueSwgdGhpcy56LCB0aGlzLncpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgZnJvbSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIGRpc3RhbmNlXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGlzdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHJldHVybiB2ZWM0LmRpc3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzdGFuY2UgYmV0d2VlbiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGlzdGFuY2U6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5kaXN0YW5jZSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgZGl2aWRlXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgZGl2OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5kaXYodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpdmlkZSBzZWxmIGJ5IGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBkaXZpZGU6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0LmRpdmlkZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRG90IHByb2R1Y3Qgb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRvdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHJldHVybiB2ZWM0LmRvdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBvZiBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVuOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5sZW4odGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVuZ3RoOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5sZW5ndGgodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBMaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGEgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB0XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIGxlcnA6IGZ1bmN0aW9uKGEsIGIsIHQpIHtcclxuICAgICAgICB2ZWM0LmxlcnAodGhpcy5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgdCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1pbmltdW0gb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIG1pbjogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQubWluKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXhpbXVtIG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBtYXg6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0Lm1heCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgbXVsOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11dGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5tdWx0aXBseSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTmVnYXRlIHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgbmVnYXRlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2ZWM0Lm5lZ2F0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTm9ybWFsaXplIHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2ZWM0Lm5vcm1hbGl6ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgcmFuZG9tIHgsIHksIHosIHcgY29tcG9uZW50cyB3aXRoIGEgZ2l2ZW4gc2NhbGVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gc2NhbGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgcmFuZG9tOiBmdW5jdGlvbihzY2FsZSkge1xyXG4gICAgICAgIHZlYzQucmFuZG9tKHRoaXMuYXJyYXksIHNjYWxlKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgc2VsZlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgc2NhbGU6IGZ1bmN0aW9uKHMpIHtcclxuICAgICAgICB2ZWM0LnNjYWxlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHMpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIGIgYW5kIGFkZCB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlQW5kQWRkOiBmdW5jdGlvbihiLCBzKSB7XHJcbiAgICAgICAgdmVjNC5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5zcXJEaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZERpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQuc3F1YXJlZERpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkTGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQuc3FyTGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQuc3F1YXJlZExlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3Igc3VidHJhY3RcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBzdWI6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0LnN1Yih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgYiBmcm9tIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBzdWJ0cmFjdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQuc3VidHJhY3QodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXg0IG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQ0OiBmdW5jdGlvbihtKSB7XHJcbiAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgUXVhdGVybmlvbiBxXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtUXVhdDogZnVuY3Rpb24ocSkge1xyXG4gICAgICAgIHZlYzQudHJhbnNmb3JtUXVhdCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBxLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xyXG4vLyBHZXR0ZXIgYW5kIFNldHRlclxyXG5pZiAoZGVmaW5lUHJvcGVydHkpIHtcclxuXHJcbiAgICB2YXIgcHJvdG8gPSBWZWN0b3I0LnByb3RvdHlwZTtcclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgeFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzBdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVswXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yNFxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneScsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMV07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzFdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHpcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3I0XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd6Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVsyXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMl0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgd1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3cnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzNdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVszXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8vIFN1cHBseSBtZXRob2RzIHRoYXQgYXJlIG5vdCBpbiBwbGFjZVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5hZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzQuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHpcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHosIHcpIHtcclxuICAgIHZlYzQuc2V0KG91dC5hcnJheSwgeCwgeSwgeiwgdyk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBiKSB7XHJcbiAgICB2ZWM0LmNvcHkob3V0LmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQuZGlzdCA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHJldHVybiB2ZWM0LmRpc3RhbmNlKGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQuZGlzdGFuY2UgPSBWZWN0b3I0LmRpc3Q7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LmRpdiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjNC5kaXZpZGUob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LmRpdmlkZSA9IFZlY3RvcjQuZGl2O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yNC5kb3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjNC5kb3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQubGVuID0gZnVuY3Rpb24oYikge1xyXG4gICAgcmV0dXJuIHZlYzQubGVuZ3RoKGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLy8gVmVjdG9yNC5sZW5ndGggPSBWZWN0b3I0LmxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5sZXJwID0gZnVuY3Rpb24ob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2ZWM0LmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWM0Lm1pbihvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5tYXggPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzQubWF4KG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0Lm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjNC5tdWx0aXBseShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubXVsdGlwbHkgPSBWZWN0b3I0Lm11bDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5uZWdhdGUgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZlYzQubmVnYXRlKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2ZWM0Lm5vcm1hbGl6ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQucmFuZG9tID0gZnVuY3Rpb24ob3V0LCBzY2FsZSkge1xyXG4gICAgdmVjNC5yYW5kb20ob3V0LmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHNjYWxlKSB7XHJcbiAgICB2ZWM0LnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIHZlYzQuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LnNxckRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjNC5zcXJEaXN0KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQuc3F1YXJlZERpc3RhbmNlID0gVmVjdG9yNC5zcXJEaXN0O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LnNxckxlbiA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHJldHVybiB2ZWM0LnNxckxlbihhLmFycmF5KTtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yNC5zcXVhcmVkTGVuZ3RoID0gVmVjdG9yNC5zcXJMZW47XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LnN1YiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjNC5zdWJ0cmFjdChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5zdWJ0cmFjdCA9IFZlY3RvcjQuc3ViO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC50cmFuc2Zvcm1NYXQ0ID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2ZWM0LnRyYW5zZm9ybU1hdDQob3V0LmFycmF5LCBhLmFycmF5LCBtLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQudHJhbnNmb3JtUXVhdCA9IGZ1bmN0aW9uKG91dCwgYSwgcSkge1xyXG4gICAgdmVjNC50cmFuc2Zvcm1RdWF0KG91dC5hcnJheSwgYS5hcnJheSwgcS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBWZWN0b3I0O1xyXG4iLCJpbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkucGFydGljbGUuUGFydGljbGVcclxuICovXHJcbnZhciBQYXJ0aWNsZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZSBldWxlciBhbmdsZSB0byByZXByZXNlbnQgcGFydGljbGUgcm90YXRpb25cclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucm90YXRpb24gPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUgez9jbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMudmVsb2NpdHkgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUgez9jbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuYW5ndWxhclZlbG9jaXR5ID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubGlmZSA9IDE7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmFnZSA9IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnNwcml0ZVNpemUgPSAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy53ZWlnaHQgPSAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkucGFydGljbGUuRW1pdHRlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5lbWl0dGVyID0gbnVsbDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBVcGRhdGUgcGFydGljbGUgcG9zaXRpb25cclxuICogQHBhcmFtICB7bnVtYmVyfSBkZWx0YVRpbWVcclxuICovXHJcblBhcnRpY2xlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbihkZWx0YVRpbWUpIHtcclxuICAgIGlmICh0aGlzLnZlbG9jaXR5KSB7XHJcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZCh0aGlzLnBvc2l0aW9uLmFycmF5LCB0aGlzLnBvc2l0aW9uLmFycmF5LCB0aGlzLnZlbG9jaXR5LmFycmF5LCBkZWx0YVRpbWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYW5ndWxhclZlbG9jaXR5KSB7XHJcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZCh0aGlzLnJvdGF0aW9uLmFycmF5LCB0aGlzLnJvdGF0aW9uLmFycmF5LCB0aGlzLmFuZ3VsYXJWZWxvY2l0eS5hcnJheSwgZGVsdGFUaW1lKTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBhcnRpY2xlO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgUGFydGljbGUgZnJvbSAnLi9QYXJ0aWNsZSc7XHJcbmltcG9ydCBWYWx1ZSBmcm9tICcuLi9tYXRoL1ZhbHVlJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wYXJ0aWNsZS5FbWl0dGVyXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgRW1pdHRlciA9IEJhc2UuZXh0ZW5kKCAvKiogQGxlbmRzIGNsYXkucGFydGljbGUuRW1pdHRlciMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBNYXhpbXVtIG51bWJlciBvZiBwYXJ0aWNsZXMgY3JlYXRlZCBieSB0aGlzIGVtaXR0ZXJcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIG1heDogMTAwMCxcclxuICAgIC8qKlxyXG4gICAgICogTnVtYmVyIG9mIHBhcnRpY2xlcyBjcmVhdGVkIGJ5IHRoaXMgZW1pdHRlciBlYWNoIHNob3RcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGFtb3VudDogMjAsXHJcblxyXG4gICAgLy8gSW5pdCBzdGF0dXMgZm9yIGVhY2ggcGFydGljbGVcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgbGlmZSBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgbGlmZTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgcG9zaXRpb24gZ2VuZXJhdG9yXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmFsdWUuPGNsYXkuVmVjdG9yMz59XHJcbiAgICAgKi9cclxuICAgIHBvc2l0aW9uOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJ0aWNsZSByb3RhdGlvbiBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48Y2xheS5WZWN0b3IzPn1cclxuICAgICAqL1xyXG4gICAgcm90YXRpb246IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRpY2xlIHZlbG9jaXR5IGdlbmVyYXRvclxyXG4gICAgICogQHR5cGUgez9jbGF5LlZhbHVlLjxjbGF5LlZlY3RvcjM+fVxyXG4gICAgICovXHJcbiAgICB2ZWxvY2l0eTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgYW5ndWxhciB2ZWxvY2l0eSBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48Y2xheS5WZWN0b3IzPn1cclxuICAgICAqL1xyXG4gICAgYW5ndWxhclZlbG9jaXR5OiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJ0aWNsZSBzcHJpdGUgc2l6ZSBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgc3ByaXRlU2l6ZTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgd2VpZ2h0IGdlbmVyYXRvclxyXG4gICAgICogQHR5cGUgez9jbGF5LlZhbHVlLjxudW1iZXI+fVxyXG4gICAgICovXHJcbiAgICB3ZWlnaHQ6IG51bGwsXHJcblxyXG4gICAgX3BhcnRpY2xlUG9vbDogbnVsbFxyXG5cclxufSwgZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgdGhpcy5fcGFydGljbGVQb29sID0gW107XHJcblxyXG4gICAgLy8gVE9ETyBSZWR1Y2UgaGVhcCBtZW1vcnlcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXg7IGkrKykge1xyXG4gICAgICAgIHZhciBwYXJ0aWNsZSA9IG5ldyBQYXJ0aWNsZSgpO1xyXG4gICAgICAgIHBhcnRpY2xlLmVtaXR0ZXIgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuX3BhcnRpY2xlUG9vbC5wdXNoKHBhcnRpY2xlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmVsb2NpdHkpIHtcclxuICAgICAgICAgICAgcGFydGljbGUudmVsb2NpdHkgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5hbmd1bGFyVmVsb2NpdHkpIHtcclxuICAgICAgICAgICAgcGFydGljbGUuYW5ndWxhclZlbG9jaXR5ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEVtaXR0ZXIgbnVtYmVyIG9mIHBhcnRpY2xlcyBhbmQgcHVzaCB0aGVtIHRvIGEgZ2l2ZW4gcGFydGljbGUgbGlzdC4gRW1taXQgbnVtYmVyIGlzIGRlZmluZWQgYnkgYW1vdW50IHByb3BlcnR5XHJcbiAgICAgKiBAcGFyYW0gIHtBcnJheS48Y2xheS5wYXJ0aWNsZS5QYXJ0aWNsZT59IG91dFxyXG4gICAgICovXHJcbiAgICBlbWl0OiBmdW5jdGlvbihvdXQpIHtcclxuICAgICAgICB2YXIgYW1vdW50ID0gTWF0aC5taW4odGhpcy5fcGFydGljbGVQb29sLmxlbmd0aCwgdGhpcy5hbW91bnQpO1xyXG5cclxuICAgICAgICB2YXIgcGFydGljbGU7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBwYXJ0aWNsZSA9IHRoaXMuX3BhcnRpY2xlUG9vbC5wb3AoKTtcclxuICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBwYXJ0aWNsZSBzdGF0dXNcclxuICAgICAgICAgICAgaWYgKHRoaXMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24uZ2V0KHBhcnRpY2xlLnBvc2l0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGlvbi5nZXQocGFydGljbGUucm90YXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZlbG9jaXR5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZlbG9jaXR5LmdldChwYXJ0aWNsZS52ZWxvY2l0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuYW5ndWxhclZlbG9jaXR5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuZ3VsYXJWZWxvY2l0eS5nZXQocGFydGljbGUuYW5ndWxhclZlbG9jaXR5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5saWZlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZS5saWZlID0gdGhpcy5saWZlLmdldCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNwcml0ZVNpemUpIHtcclxuICAgICAgICAgICAgICAgIHBhcnRpY2xlLnNwcml0ZVNpemUgPSB0aGlzLnNwcml0ZVNpemUuZ2V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMud2VpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZS53ZWlnaHQgPSB0aGlzLndlaWdodC5nZXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYXJ0aWNsZS5hZ2UgPSAwO1xyXG5cclxuICAgICAgICAgICAgb3V0LnB1c2gocGFydGljbGUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEtpbGwgYSBkZWFkIHBhcnRpY2xlIGFuZCBwdXQgaXQgYmFjayBpbiB0aGUgcG9vbFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5wYXJ0aWNsZS5QYXJ0aWNsZX0gcGFydGljbGVcclxuICAgICAqL1xyXG4gICAga2lsbDogZnVuY3Rpb24ocGFydGljbGUpIHtcclxuICAgICAgICB0aGlzLl9wYXJ0aWNsZVBvb2wucHVzaChwYXJ0aWNsZSk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGNvbnN0YW50IDFkIHZhbHVlIGdlbmVyYXRvci4gQWxpYXMgZm9yIHtAbGluayBjbGF5LlZhbHVlLmNvbnN0YW50fVxyXG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLmNvbnN0YW50XHJcbiAqL1xyXG5FbWl0dGVyLmNvbnN0YW50ID0gVmFsdWUuY29uc3RhbnQ7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgY29uc3RhbnQgdmVjdG9yIHZhbHVlKDJkIG9yIDNkKSBnZW5lcmF0b3IuIEFsaWFzIGZvciB7QGxpbmsgY2xheS5WYWx1ZS52ZWN0b3J9XHJcbiAqIEBmdW5jdGlvbiBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIudmVjdG9yXHJcbiAqL1xyXG5FbWl0dGVyLnZlY3RvciA9IFZhbHVlLnZlY3RvcjtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gMWQgdmFsdWUgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkuVmFsdWUucmFuZG9tMUR9XHJcbiAqIEBmdW5jdGlvbiBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIucmFuZG9tMURcclxuICovXHJcbkVtaXR0ZXIucmFuZG9tMUQgPSBWYWx1ZS5yYW5kb20xRDtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gMmQgdmFsdWUgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkuVmFsdWUucmFuZG9tMkR9XHJcbiAqIEBmdW5jdGlvbiBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIucmFuZG9tMkRcclxuICovXHJcbkVtaXR0ZXIucmFuZG9tMkQgPSBWYWx1ZS5yYW5kb20yRDtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gM2QgdmFsdWUgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkuVmFsdWUucmFuZG9tM0R9XHJcbiAqIEBmdW5jdGlvbiBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIucmFuZG9tM0RcclxuICovXHJcbkVtaXR0ZXIucmFuZG9tM0QgPSBWYWx1ZS5yYW5kb20zRDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEVtaXR0ZXI7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wYXJ0aWNsZS5GaWVsZFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEZpZWxkID0gQmFzZS5leHRlbmQoe30sIHtcclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgYSBmaWVsZCB0byB0aGUgcGFydGljbGUgYW5kIHVwZGF0ZSB0aGUgcGFydGljbGUgdmVsb2NpdHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gdmVsb2NpdHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gcG9zaXRpb25cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gd2VpZ2h0XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGRlbHRhVGltZVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkucGFydGljbGUuRmllbGQucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGFwcGx5VG86IGZ1bmN0aW9uKHZlbG9jaXR5LCBwb3NpdGlvbiwgd2VpZ2h0LCBkZWx0YVRpbWUpIHt9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRmllbGQ7XHJcbiIsImltcG9ydCBGaWVsZCBmcm9tICcuL0ZpZWxkJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGFydGljbGUuRm9yY2VGaWVsZFxyXG4gKiBAZXh0ZW5kcyBjbGF5LnBhcnRpY2xlLkZpZWxkXHJcbiAqL1xyXG52YXIgRm9yY2VGaWVsZCA9IEZpZWxkLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZm9yY2U6IG5ldyBWZWN0b3IzKClcclxuICAgIH07XHJcbn0sIHtcclxuICAgIGFwcGx5VG86IGZ1bmN0aW9uKHZlbG9jaXR5LCBwb3NpdGlvbiwgd2VpZ2h0LCBkZWx0YVRpbWUpIHtcclxuICAgICAgICBpZiAod2VpZ2h0ID4gMCkge1xyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHZlbG9jaXR5LmFycmF5LCB2ZWxvY2l0eS5hcnJheSwgdGhpcy5mb3JjZS5hcnJheSwgZGVsdGFUaW1lIC8gd2VpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRm9yY2VGaWVsZDtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkucGFydGljbGUudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlldyA6IFdPUkxEVklFVztcXG51bmlmb3JtIG1hdDQgcHJvamVjdGlvbiA6IFBST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XFxuI2lmZGVmIFVWX0FOSU1BVElPTlxcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkMCA6IFRFWENPT1JEXzA7XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQxIDogVEVYQ09PUkRfMTtcXG52YXJ5aW5nIHZlYzIgdl9VdjA7XFxudmFyeWluZyB2ZWMyIHZfVXYxO1xcbiNlbmRpZlxcbnZhcnlpbmcgZmxvYXQgdl9BZ2U7XFxudm9pZCBtYWluKCkge1xcbiB2X0FnZSA9IG5vcm1hbC54O1xcbiBmbG9hdCByb3RhdGlvbiA9IG5vcm1hbC55O1xcbiB2ZWM0IHdvcmxkVmlld1Bvc2l0aW9uID0gd29ybGRWaWV3ICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogd29ybGRWaWV3UG9zaXRpb247XFxuIGZsb2F0IHcgPSBnbF9Qb3NpdGlvbi53O1xcbiBnbF9Qb2ludFNpemUgPSBub3JtYWwueiAqIHByb2plY3Rpb25bMF0ueCAvIHc7XFxuICNpZmRlZiBVVl9BTklNQVRJT05cXG4gdl9VdjAgPSB0ZXhjb29yZDA7XFxuIHZfVXYxID0gdGV4Y29vcmQxO1xcbiAjZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5wYXJ0aWNsZS5mcmFnbWVudFxcbnVuaWZvcm0gc2FtcGxlcjJEIHNwcml0ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudDtcXG51bmlmb3JtIHZlYzMgY29sb3IgOiBbMS4wLCAxLjAsIDEuMF07XFxudW5pZm9ybSBmbG9hdCBhbHBoYSA6IDEuMDtcXG52YXJ5aW5nIGZsb2F0IHZfQWdlO1xcbiNpZmRlZiBVVl9BTklNQVRJT05cXG52YXJ5aW5nIHZlYzIgdl9VdjA7XFxudmFyeWluZyB2ZWMyIHZfVXYxO1xcbiNlbmRpZlxcbnZvaWQgbWFpbigpIHtcXG4gdmVjNCBjb2xvciA9IHZlYzQoY29sb3IsIGFscGhhKTtcXG4gI2lmZGVmIFNQUklURV9FTkFCTEVEXFxuICNpZmRlZiBVVl9BTklNQVRJT05cXG4gY29sb3IgKj0gdGV4dHVyZTJEKHNwcml0ZSwgbWl4KHZfVXYwLCB2X1V2MSwgZ2xfUG9pbnRDb29yZCkpO1xcbiAjZWxzZVxcbiBjb2xvciAqPSB0ZXh0dXJlMkQoc3ByaXRlLCBnbF9Qb2ludENvb3JkKTtcXG4gI2VuZGlmXFxuICNlbmRpZlxcbiAjaWZkZWYgR1JBRElFTlRfRU5BQkxFRFxcbiBjb2xvciAqPSB0ZXh0dXJlMkQoZ3JhZGllbnQsIHZlYzIodl9BZ2UsIDAuNSkpO1xcbiAjZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcbkBlbmRcIjtcclxuIiwiaW1wb3J0IFJlbmRlcmFibGUgZnJvbSAnLi4vUmVuZGVyYWJsZSc7XHJcblxyXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcblxyXG5pbXBvcnQgcGFydGljbGVFc3NsIGZyb20gJy4vcGFydGljbGUuZ2xzbC5qcyc7XHJcblNoYWRlclsnaW1wb3J0J10ocGFydGljbGVFc3NsKTtcclxuXHJcbnZhciBwYXJ0aWNsZVNoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5wYXJ0aWNsZS52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5wYXJ0aWNsZS5mcmFnbWVudCcpKTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wYXJ0aWNsZS5QYXJ0aWNsZVJlbmRlcmFibGVcclxuICogQGV4dGVuZHMgY2xheS5SZW5kZXJhYmxlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICB2YXIgcGFydGljbGVSZW5kZXJhYmxlID0gbmV3IGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlKHtcclxuICogICAgICAgICBzcHJpdGVBbmltYXRpb25UaWxlWDogNCxcclxuICogICAgICAgICBzcHJpdGVBbmltYXRpb25UaWxlWTogNCxcclxuICogICAgICAgICBzcHJpdGVBbmltYXRpb25SZXBlYXQ6IDFcclxuICogICAgIH0pO1xyXG4gKiAgICAgc2NlbmUuYWRkKHBhcnRpY2xlUmVuZGVyYWJsZSk7XHJcbiAqICAgICAvLyBFbmFibGUgdXYgYW5pbWF0aW9uIGluIHRoZSBzaGFkZXJcclxuICogICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5tYXRlcmlhbC5kZWZpbmUoJ2JvdGgnLCAnVVZfQU5JTUFUSU9OJyk7XHJcbiAqICAgICB2YXIgRW1pdHRlciA9IGNsYXkucGFydGljbGUuRW1pdHRlcjtcclxuICogICAgIHZhciBWZWN0b3IzID0gY2xheS5WZWN0b3IzO1xyXG4gKiAgICAgdmFyIGVtaXR0ZXIgPSBuZXcgRW1pdHRlcih7XHJcbiAqICAgICAgICAgbWF4OiAyMDAwLFxyXG4gKiAgICAgICAgIGFtb3VudDogMTAwLFxyXG4gKiAgICAgICAgIGxpZmU6IEVtaXR0ZXIucmFuZG9tMUQoMTAsIDIwKSxcclxuICogICAgICAgICBwb3NpdGlvbjogRW1pdHRlci52ZWN0b3IobmV3IFZlY3RvcjMoKSksXHJcbiAqICAgICAgICAgdmVsb2NpdHk6IEVtaXR0ZXIucmFuZG9tM0QobmV3IFZlY3RvcjMoLTEwLCAwLCAtMTApLCBuZXcgVmVjdG9yMygxMCwgMCwgMTApKTtcclxuICogICAgIH0pO1xyXG4gKiAgICAgcGFydGljbGVSZW5kZXJhYmxlLmFkZEVtaXR0ZXIoZW1pdHRlcik7XHJcbiAqICAgICB2YXIgZ3Jhdml0eUZpZWxkID0gbmV3IGNsYXkucGFydGljbGUuRm9yY2VGaWVsZCgpO1xyXG4gKiAgICAgZ3Jhdml0eUZpZWxkLmZvcmNlLnkgPSAtMTA7XHJcbiAqICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuYWRkRmllbGQoZ3Jhdml0eUZpZWxkKTtcclxuICogICAgIC4uLlxyXG4gKiAgICAgYW5pbWF0aW9uLm9uKCdmcmFtZScsIGZ1bmN0aW9uKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS51cGRhdGVQYXJ0aWNsZXMoZnJhbWVUaW1lKTtcclxuICogICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAqICAgICB9KTtcclxuICovXHJcbnZhciBQYXJ0aWNsZVJlbmRlcmFibGUgPSBSZW5kZXJhYmxlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBsb29wOiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgb25lc2hvdDogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIER1cmF0aW9uIG9mIHBhcnRpY2xlIHN5c3RlbSBpbiBtaWxsaXNlY29uZHNcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGR1cmF0aW9uOiAxLFxyXG5cclxuICAgIC8vIFVWIEFuaW1hdGlvblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcHJpdGVBbmltYXRpb25UaWxlWDogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3ByaXRlQW5pbWF0aW9uVGlsZVk6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNwcml0ZUFuaW1hdGlvblJlcGVhdDogMCxcclxuXHJcbiAgICBtb2RlOiBSZW5kZXJhYmxlLlBPSU5UUyxcclxuXHJcbiAgICBpZ25vcmVQaWNraW5nOiB0cnVlLFxyXG5cclxuICAgIF9lbGFwc2VkVGltZTogMCxcclxuXHJcbiAgICBfZW1pdHRpbmc6IHRydWVcclxuXHJcbn0sIGZ1bmN0aW9uKCl7XHJcblxyXG4gICAgdGhpcy5nZW9tZXRyeSA9IG5ldyBHZW9tZXRyeSh7XHJcbiAgICAgICAgZHluYW1pYzogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogcGFydGljbGVTaGFkZXIsXHJcbiAgICAgICAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAgICAgICAgICBkZXB0aE1hc2s6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwuZW5hYmxlVGV4dHVyZSgnc3ByaXRlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcGFydGljbGVzID0gW107XHJcbiAgICB0aGlzLl9maWVsZHMgPSBbXTtcclxuICAgIHRoaXMuX2VtaXR0ZXJzID0gW107XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5wYXJ0aWNsZS5QYXJ0aWNsZVJlbmRlcmFibGUucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICBjdWxsaW5nOiBmYWxzZSxcclxuXHJcbiAgICBmcnVzdHVtQ3VsbGluZzogZmFsc2UsXHJcblxyXG4gICAgY2FzdFNoYWRvdzogZmFsc2UsXHJcbiAgICByZWNlaXZlU2hhZG93OiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBlbWl0dGVyXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkucGFydGljbGUuRW1pdHRlcn0gZW1pdHRlclxyXG4gICAgICovXHJcbiAgICBhZGRFbWl0dGVyOiBmdW5jdGlvbihlbWl0dGVyKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdHRlcnMucHVzaChlbWl0dGVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgZW1pdHRlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LnBhcnRpY2xlLkVtaXR0ZXJ9IGVtaXR0ZXJcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlRW1pdHRlcjogZnVuY3Rpb24oZW1pdHRlcikge1xyXG4gICAgICAgIHRoaXMuX2VtaXR0ZXJzLnNwbGljZSh0aGlzLl9lbWl0dGVycy5pbmRleE9mKGVtaXR0ZXIpLCAxKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgZmllbGRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5wYXJ0aWNsZS5GaWVsZH0gZmllbGRcclxuICAgICAqL1xyXG4gICAgYWRkRmllbGQ6IGZ1bmN0aW9uKGZpZWxkKSB7XHJcbiAgICAgICAgdGhpcy5fZmllbGRzLnB1c2goZmllbGQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBmaWVsZFxyXG4gICAgICogQHBhcmFtIHtjbGF5LnBhcnRpY2xlLkZpZWxkfSBmaWVsZFxyXG4gICAgICovXHJcbiAgICByZW1vdmVGaWVsZDogZnVuY3Rpb24oZmllbGQpIHtcclxuICAgICAgICB0aGlzLl9maWVsZHMuc3BsaWNlKHRoaXMuX2ZpZWxkcy5pbmRleE9mKGZpZWxkKSwgMSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXQgdGhlIHBhcnRpY2xlIHN5c3RlbS5cclxuICAgICAqL1xyXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vIFB1dCBhbGwgdGhlIHBhcnRpY2xlcyBiYWNrXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHAgPSB0aGlzLl9wYXJ0aWNsZXNbaV07XHJcbiAgICAgICAgICAgIHAuZW1pdHRlci5raWxsKHApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XHJcbiAgICAgICAgdGhpcy5fZW1pdHRpbmcgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gZGVsdGFUaW1lXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVBhcnRpY2xlczogZnVuY3Rpb24oZGVsdGFUaW1lKSB7XHJcblxyXG4gICAgICAgIC8vIE1TID0+IFNlY29uZHNcclxuICAgICAgICBkZWx0YVRpbWUgLz0gMTAwMDtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSArPSBkZWx0YVRpbWU7XHJcblxyXG4gICAgICAgIHZhciBwYXJ0aWNsZXMgPSB0aGlzLl9wYXJ0aWNsZXM7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9lbWl0dGluZykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2VtaXR0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0dGVyc1tpXS5lbWl0KHBhcnRpY2xlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMub25lc2hvdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQWdpbmdcclxuICAgICAgICB2YXIgbGVuID0gcGFydGljbGVzLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjspIHtcclxuICAgICAgICAgICAgdmFyIHAgPSBwYXJ0aWNsZXNbaV07XHJcbiAgICAgICAgICAgIHAuYWdlICs9IGRlbHRhVGltZTtcclxuICAgICAgICAgICAgaWYgKHAuYWdlID49IHAubGlmZSkge1xyXG4gICAgICAgICAgICAgICAgcC5lbWl0dGVyLmtpbGwocCk7XHJcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZXNbaV0gPSBwYXJ0aWNsZXNbbGVuLTFdO1xyXG4gICAgICAgICAgICAgICAgcGFydGljbGVzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgbGVuLS07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gVXBkYXRlXHJcbiAgICAgICAgICAgIHZhciBwID0gcGFydGljbGVzW2ldO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fZmllbGRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmllbGRzW2pdLmFwcGx5VG8ocC52ZWxvY2l0eSwgcC5wb3NpdGlvbiwgcC53ZWlnaHQsIGRlbHRhVGltZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcC51cGRhdGUoZGVsdGFUaW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVZlcnRpY2VzKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVWZXJ0aWNlczogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcclxuICAgICAgICAvLyBJZiBoYXMgdXYgYW5pbWF0aW9uXHJcbiAgICAgICAgdmFyIGFuaW1UaWxlWCA9IHRoaXMuc3ByaXRlQW5pbWF0aW9uVGlsZVg7XHJcbiAgICAgICAgdmFyIGFuaW1UaWxlWSA9IHRoaXMuc3ByaXRlQW5pbWF0aW9uVGlsZVk7XHJcbiAgICAgICAgdmFyIGFuaW1SZXBlYXQgPSB0aGlzLnNwcml0ZUFuaW1hdGlvblJlcGVhdDtcclxuICAgICAgICB2YXIgblV2QW5pbUZyYW1lID0gYW5pbVRpbGVZICogYW5pbVRpbGVYICogYW5pbVJlcGVhdDtcclxuICAgICAgICB2YXIgaGFzVXZBbmltYXRpb24gPSBuVXZBbmltRnJhbWUgPiAxO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIC8vIFB1dCBwYXJ0aWNsZSBzdGF0dXMgaW4gbm9ybWFsXHJcbiAgICAgICAgdmFyIG5vcm1hbHMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZTtcclxuICAgICAgICB2YXIgdXZzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDAudmFsdWU7XHJcbiAgICAgICAgdmFyIHV2czIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMS52YWx1ZTtcclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IHRoaXMuX3BhcnRpY2xlcy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKCFwb3NpdGlvbnMgfHwgcG9zaXRpb25zLmxlbmd0aCAhPT0gbGVuICogMykge1xyXG4gICAgICAgICAgICAvLyBUT0RPIE9wdGltaXplXHJcbiAgICAgICAgICAgIHBvc2l0aW9ucyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KGxlbiAqIDMpO1xyXG4gICAgICAgICAgICBub3JtYWxzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KGxlbiAqIDMpO1xyXG4gICAgICAgICAgICBpZiAoaGFzVXZBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHV2cyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMudGV4Y29vcmQwLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShsZW4gKiAyKTtcclxuICAgICAgICAgICAgICAgIHV2czIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMS52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkobGVuICogMik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpbnZBbmltVGlsZVggPSAxIC8gYW5pbVRpbGVYO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHBhcnRpY2xlID0gdGhpcy5fcGFydGljbGVzW2ldO1xyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gaSAqIDM7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMzsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnNbb2Zmc2V0ICsgal0gPSBwYXJ0aWNsZS5wb3NpdGlvbi5hcnJheVtqXTtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbb2Zmc2V0XSA9IHBhcnRpY2xlLmFnZSAvIHBhcnRpY2xlLmxpZmU7XHJcbiAgICAgICAgICAgICAgICAvLyBub3JtYWxzW29mZnNldCArIDFdID0gcGFydGljbGUucm90YXRpb247XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW29mZnNldCArIDFdID0gMDtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbb2Zmc2V0ICsgMl0gPSBwYXJ0aWNsZS5zcHJpdGVTaXplO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBvZmZzZXQyID0gaSAqIDI7XHJcbiAgICAgICAgICAgIGlmIChoYXNVdkFuaW1hdGlvbikge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICAgICAgdmFyIHAgPSBwYXJ0aWNsZS5hZ2UgLyBwYXJ0aWNsZS5saWZlO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0YWdlID0gTWF0aC5yb3VuZChwICogKG5VdkFuaW1GcmFtZSAtIDEpKSAqIGFuaW1SZXBlYXQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgdiA9IE1hdGguZmxvb3Ioc3RhZ2UgKiBpbnZBbmltVGlsZVgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHUgPSBzdGFnZSAtIHYgKiBhbmltVGlsZVg7XHJcbiAgICAgICAgICAgICAgICB1dnNbb2Zmc2V0Ml0gPSB1IC8gYW5pbVRpbGVYO1xyXG4gICAgICAgICAgICAgICAgdXZzW29mZnNldDIgKyAxXSA9IDEgLSB2IC8gYW5pbVRpbGVZO1xyXG4gICAgICAgICAgICAgICAgdXZzMltvZmZzZXQyXSA9ICh1ICsgMSkgLyBhbmltVGlsZVg7XHJcbiAgICAgICAgICAgICAgICB1dnMyW29mZnNldDIgKyAxXSA9IDEgLSAodiArIDEpIC8gYW5pbVRpbGVZO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZW9tZXRyeS5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzRmluaXNoZWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9lbGFwc2VkVGltZSA+IHRoaXMuZHVyYXRpb24gJiYgIXRoaXMubG9vcDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbihyZW5kZXJlcikge1xyXG4gICAgICAgIC8vIFB1dCBhbGwgdGhlIHBhcnRpY2xlcyBiYWNrXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHAgPSB0aGlzLl9wYXJ0aWNsZXNbaV07XHJcbiAgICAgICAgICAgIHAuZW1pdHRlci5raWxsKHApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdlb21ldHJ5LmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIC8vIFRPRE8gRGlzcG9zZSB0ZXh0dXJlID9cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LnBhcnRpY2xlLlBhcnRpY2xlUmVuZGVyYWJsZX1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBwYXJ0aWNsZVJlbmRlcmFibGUgPSBuZXcgUGFydGljbGVSZW5kZXJhYmxlKHtcclxuICAgICAgICAgICAgbWF0ZXJpYWw6IHRoaXMubWF0ZXJpYWxcclxuICAgICAgICB9KTtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUubG9vcCA9IHRoaXMubG9vcDtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuZHVyYXRpb24gPSB0aGlzLmR1cmF0aW9uO1xyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5vbmVzaG90ID0gdGhpcy5vbmVzaG90O1xyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5zcHJpdGVBbmltYXRpb25SZXBlYXQgPSB0aGlzLnNwcml0ZUFuaW1hdGlvblJlcGVhdDtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuc3ByaXRlQW5pbWF0aW9uVGlsZVkgPSB0aGlzLnNwcml0ZUFuaW1hdGlvblRpbGVZO1xyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5zcHJpdGVBbmltYXRpb25UaWxlWCA9IHRoaXMuc3ByaXRlQW5pbWF0aW9uVGlsZVg7XHJcblxyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5wb3NpdGlvbi5jb3B5KHRoaXMucG9zaXRpb24pO1xyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5yb3RhdGlvbi5jb3B5KHRoaXMucm90YXRpb24pO1xyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5zY2FsZS5jb3B5KHRoaXMuc2NhbGUpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5hZGQodGhpcy5fY2hpbGRyZW5baV0uY2xvbmUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXJ0aWNsZVJlbmRlcmFibGU7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGFydGljbGVSZW5kZXJhYmxlO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5waWNraW5nLmNvbG9yLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52b2lkIG1haW4oKXtcXG4gdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4gI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiAjZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxufVxcbkBlbmRcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnBpY2tpbmcuY29sb3IuZnJhZ21lbnRcXG51bmlmb3JtIHZlYzQgY29sb3IgOiBbMS4wLCAxLjAsIDEuMCwgMS4wXTtcXG52b2lkIG1haW4oKSB7XFxuIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5cclxuaW1wb3J0IGNvbG9yRXNzbCBmcm9tICcuL2NvbG9yLmdsc2wuanMnO1xyXG5TaGFkZXIuaW1wb3J0KGNvbG9yRXNzbCk7XHJcblxyXG4vKipcclxuICogUGl4ZWwgcGlja2luZyBpcyBncHUgYmFzZWQgcGlja2luZywgd2hpY2ggaXMgZmFzdCBhbmQgYWNjdXJhdGUuXHJcbiAqIEJ1dCBub3QgbGlrZSByYXkgcGlja2luZywgaXQgY2FuJ3QgZ2V0IHRoZSBpbnRlcnNlY3Rpb24gcG9pbnQgYW5kIHRyaWFuZ2xlLlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5waWNraW5nLlBpeGVsUGlja2luZ1xyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIFBpeGVsUGlja2luZyA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5waWNraW5nLlBpeGVsUGlja2luZyMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRhcmdldCByZW5kZXJlclxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlJlbmRlcmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlbmRlcmVyOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERvd25zYW1wbGUgcmF0aW8gb2YgaGlkZGVuIGZyYW1lIGJ1ZmZlclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZG93blNhbXBsZVJhdGlvOiAxLFxyXG5cclxuICAgICAgICB3aWR0aDogMTAwLFxyXG4gICAgICAgIGhlaWdodDogMTAwLFxyXG5cclxuICAgICAgICBsb29rdXBPZmZzZXQ6IDEsXHJcblxyXG4gICAgICAgIF9mcmFtZUJ1ZmZlcjogbnVsbCxcclxuICAgICAgICBfdGV4dHVyZTogbnVsbCxcclxuICAgICAgICBfc2hhZGVyOiBudWxsLFxyXG5cclxuICAgICAgICBfaWRNYXRlcmlhbHM6IFtdLFxyXG4gICAgICAgIF9sb29rdXBUYWJsZTogW10sXHJcblxyXG4gICAgICAgIF9tZXNoTWF0ZXJpYWxzOiBbXSxcclxuXHJcbiAgICAgICAgX2lkT2Zmc2V0OiAwXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMucmVuZGVyZXIuZ2V0V2lkdGgoKTtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuZ2V0SGVpZ2h0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pbml0KCk7XHJcbn0sIC8qKiBAbGVuZHMgY2xheS5waWNraW5nLlBpeGVsUGlja2luZy5wcm90b3R5cGUgKi8ge1xyXG4gICAgX2luaXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGggKiB0aGlzLmRvd25TYW1wbGVSYXRpbyxcclxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCAqIHRoaXMuZG93blNhbXBsZVJhdGlvXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2hhZGVyID0gbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LnBpY2tpbmcuY29sb3IudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucGlja2luZy5jb2xvci5mcmFnbWVudCcpKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFNldCBwaWNraW5nIHByZXNpc2lvblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhdGlvXHJcbiAgICAgKi9cclxuICAgIHNldFByZWNpc2lvbjogZnVuY3Rpb24ocmF0aW8pIHtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlLndpZHRoID0gdGhpcy53aWR0aCAqIHJhdGlvO1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgKiByYXRpbztcclxuICAgICAgICB0aGlzLmRvd25TYW1wbGVSYXRpbyA9IHJhdGlvO1xyXG4gICAgfSxcclxuICAgIHJlc2l6ZTogZnVuY3Rpb24od2lkdGgsIGhlaWdodCkge1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmUud2lkdGggPSB3aWR0aCAqIHRoaXMuZG93blNhbXBsZVJhdGlvO1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5kb3duU2FtcGxlUmF0aW87XHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmUuZGlydHkoKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0aGUgcGlja2luZyBmcmFtZWJ1ZmZlclxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhdGlvXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24oc2NlbmUsIGNhbWVyYSkge1xyXG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcbiAgICAgICAgaWYgKHJlbmRlcmVyLmdldFdpZHRoKCkgIT09IHRoaXMud2lkdGggfHwgcmVuZGVyZXIuZ2V0SGVpZ2h0KCkgIT09IHRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzaXplKHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRoaXMuX3RleHR1cmUpO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2lkT2Zmc2V0ID0gdGhpcy5sb29rdXBPZmZzZXQ7XHJcbiAgICAgICAgdGhpcy5fc2V0TWF0ZXJpYWwoc2NlbmUpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTtcclxuICAgICAgICB0aGlzLl9yZXN0b3JlTWF0ZXJpYWwoKTtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfc2V0TWF0ZXJpYWw6IGZ1bmN0aW9uKHJvb3QpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0wOyBpIDwgcm9vdC5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkID0gcm9vdC5fY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5nZW9tZXRyeSAmJiBjaGlsZC5tYXRlcmlhbCAmJiBjaGlsZC5tYXRlcmlhbC5zaGFkZXIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpZCA9IHRoaXMuX2lkT2Zmc2V0Kys7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gaWQgLSB0aGlzLmxvb2t1cE9mZnNldDtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IHRoaXMuX2lkTWF0ZXJpYWxzW2lkeF07XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXI6IHRoaXMuX3NoYWRlclxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IHBhY2tJRChpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3JbMF0gLz0gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yWzFdIC89IDI1NTtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvclsyXSAvPSAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3JbM10gPSAxLjA7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdjb2xvcicsIGNvbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pZE1hdGVyaWFsc1tpZHhdID0gbWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXNoTWF0ZXJpYWxzW2lkeF0gPSBjaGlsZC5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvb2t1cFRhYmxlW2lkeF0gPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgIGNoaWxkLm1hdGVyaWFsID0gbWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNoaWxkLl9jaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldE1hdGVyaWFsKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaWNrIHRoZSBvYmplY3RcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0geCBNb3VzZSBwb3NpdGlvbiB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHkgTW91c2UgcG9zaXRpb24geVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICBwaWNrOiBmdW5jdGlvbih4LCB5KSB7XHJcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcclxuXHJcbiAgICAgICAgdmFyIHJhdGlvID0gdGhpcy5kb3duU2FtcGxlUmF0aW87XHJcbiAgICAgICAgeCA9IE1hdGguY2VpbChyYXRpbyAqIHgpO1xyXG4gICAgICAgIHkgPSBNYXRoLmNlaWwocmF0aW8gKiAodGhpcy5oZWlnaHQgLSB5KSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgIHZhciBwaXhlbCA9IG5ldyBVaW50OEFycmF5KDQpO1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICAvLyBUT0RPIG91dCBvZiBib3VuZHMgP1xyXG4gICAgICAgIC8vIHByZXNlcnZlRHJhd2luZ0J1ZmZlciA/XHJcbiAgICAgICAgX2dsLnJlYWRQaXhlbHMoeCwgeSwgMSwgMSwgX2dsLlJHQkEsIF9nbC5VTlNJR05FRF9CWVRFLCBwaXhlbCk7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAvLyBTa2lwIGludGVycG9sYXRlZCBwaXhlbCBiZWNhdXNlIG9mIGFudGkgYWxpYXNcclxuICAgICAgICBpZiAocGl4ZWxbM10gPT09IDI1NSkge1xyXG4gICAgICAgICAgICB2YXIgaWQgPSB1bnBhY2tJRChwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdKTtcclxuICAgICAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZWwgPSB0aGlzLl9sb29rdXBUYWJsZVtpZCAtIHRoaXMubG9va3VwT2Zmc2V0XTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3Jlc3RvcmVNYXRlcmlhbDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9sb29rdXBUYWJsZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9sb29rdXBUYWJsZVtpXS5tYXRlcmlhbCA9IHRoaXMuX21lc2hNYXRlcmlhbHNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbihyZW5kZXJlcikge1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmZ1bmN0aW9uIHBhY2tJRChpZCl7XHJcbiAgICB2YXIgciA9IGlkID4+IDE2O1xyXG4gICAgdmFyIGcgPSAoaWQgLSAociA8PCA4KSkgPj4gODtcclxuICAgIHZhciBiID0gaWQgLSAociA8PCAxNikgLSAoZzw8OCk7XHJcbiAgICByZXR1cm4gW3IsIGcsIGJdO1xyXG59XHJcblxyXG5mdW5jdGlvbiB1bnBhY2tJRChyLCBnLCBiKXtcclxuICAgIHJldHVybiAociA8PCAxNikgKyAoZzw8OCkgKyBiO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQaXhlbFBpY2tpbmc7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5cclxudmFyIGRvYyA9IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgPyB7fSA6IGRvY3VtZW50O1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBsdWdpbi5GcmVlQ29udHJvbFxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgdmFyIGNvbnRyb2wgPSBuZXcgY2xheS5wbHVnaW4uRnJlZUNvbnRyb2woe1xyXG4gKiAgICAgICAgIHRhcmdldDogY2FtZXJhLFxyXG4gKiAgICAgICAgIGRvbUVsZW1lbnQ6IHJlbmRlcmVyLmNhbnZhc1xyXG4gKiAgICAgfSk7XHJcbiAqICAgICAuLi5cclxuICogICAgIHRpbWVsaW5lLm9uKCdmcmFtZScsIGZ1bmN0aW9uKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgIGNvbnRyb2wudXBkYXRlKGZyYW1lVGltZSk7XHJcbiAqICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xyXG4gKiAgICAgfSk7XHJcbiAqL1xyXG52YXIgRnJlZUNvbnRyb2wgPSBCYXNlLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkucGx1Z2luLkZyZWVDb250cm9sIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2NlbmUgbm9kZSB0byBjb250cm9sLCBtb3N0bHkgaXQgaXMgYSBjYW1lcmFcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRhcmdldDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGFyZ2V0IGRvbSB0byBiaW5kIHdpdGggbW91c2UgZXZlbnRzXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRvbUVsZW1lbnQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1vdXNlIG1vdmUgc2Vuc2l0aXZpdHlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNlbnNpdGl2aXR5OiAxLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUYXJnZXQgbW92ZSBzcGVlZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc3BlZWQ6IDAuNCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVXAgYXhpc1xyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdXA6IG5ldyBWZWN0b3IzKDAsIDEsIDApLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBsb2NrIHZlcnRpY2FsIG1vdmVtZW50XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdmVydGljYWxNb3ZlTG9jazogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRpbWVsaW5lfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRpbWVsaW5lOiBudWxsLFxyXG5cclxuICAgICAgICBfbW92ZUZvcndhcmQ6IGZhbHNlLFxyXG4gICAgICAgIF9tb3ZlQmFja3dhcmQ6IGZhbHNlLFxyXG4gICAgICAgIF9tb3ZlTGVmdDogZmFsc2UsXHJcbiAgICAgICAgX21vdmVSaWdodDogZmFsc2UsXHJcblxyXG4gICAgICAgIF9vZmZzZXRQaXRjaDogMCxcclxuICAgICAgICBfb2Zmc2V0Um9sbDogMFxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLl9sb2NrQ2hhbmdlID0gdGhpcy5fbG9ja0NoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fa2V5RG93biA9IHRoaXMuX2tleURvd24uYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX2tleVVwID0gdGhpcy5fa2V5VXAuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX21vdXNlTW92ZSA9IHRoaXMuX21vdXNlTW92ZS5iaW5kKHRoaXMpO1xyXG5cclxuICAgIGlmICh0aGlzLmRvbUVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5GcmVlQ29udHJvbC5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBpbml0IGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgaW5pdDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gVXNlIHBvaW50ZXIgbG9ja1xyXG4gICAgICAgIC8vIGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL3BvaW50ZXJsb2NrL2ludHJvL1xyXG4gICAgICAgIHZhciBlbCA9IHRoaXMuZG9tRWxlbWVudDtcclxuXHJcbiAgICAgICAgLy9NdXN0IHJlcXVlc3QgcG9pbnRlciBsb2NrIGFmdGVyIGNsaWNrIGV2ZW50LCBjYW4ndCBub3QgZG8gaXQgZGlyZWN0bHlcclxuICAgICAgICAvL1doeSA/ID9cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ2NsaWNrJywgdGhpcy5fcmVxdWVzdFBvaW50ZXJMb2NrKTtcclxuXHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9jLCAncG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLl9sb2NrQ2hhbmdlKTtcclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb2MsICdtb3pwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvYywgJ3dlYmtpdHBvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5fbG9ja0NoYW5nZSk7XHJcblxyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvYywgJ2tleWRvd24nLCB0aGlzLl9rZXlEb3duKTtcclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb2MsICdrZXl1cCcsIHRoaXMuX2tleVVwKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGltZWxpbmUpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lbGluZS5vbignZnJhbWUnLCB0aGlzLl9kZXRlY3RNb3ZlbWVudENoYW5nZSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgY29udHJvbFxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIGVsID0gdGhpcy5kb21FbGVtZW50O1xyXG5cclxuICAgICAgICBlbC5leGl0UG9pbnRlckxvY2sgPSBlbC5leGl0UG9pbnRlckxvY2tcclxuICAgICAgICAgICAgfHwgZWwubW96RXhpdFBvaW50ZXJMb2NrXHJcbiAgICAgICAgICAgIHx8IGVsLndlYmtpdEV4aXRQb2ludGVyTG9jaztcclxuXHJcbiAgICAgICAgaWYgKGVsLmV4aXRQb2ludGVyTG9jaykge1xyXG4gICAgICAgICAgICBlbC5leGl0UG9pbnRlckxvY2soKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGVsLCAnY2xpY2snLCB0aGlzLl9yZXF1ZXN0UG9pbnRlckxvY2spO1xyXG5cclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2MsICdwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvYywgJ21venBvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5fbG9ja0NoYW5nZSk7XHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9jLCAnd2Via2l0cG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLl9sb2NrQ2hhbmdlKTtcclxuXHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9jLCAna2V5ZG93bicsIHRoaXMuX2tleURvd24pO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvYywgJ2tleXVwJywgdGhpcy5fa2V5VXApO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aW1lbGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lLm9mZignZnJhbWUnLCB0aGlzLl9kZXRlY3RNb3ZlbWVudENoYW5nZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfcmVxdWVzdFBvaW50ZXJMb2NrOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgZWwgPSB0aGlzO1xyXG4gICAgICAgIGVsLnJlcXVlc3RQb2ludGVyTG9jayA9IGVsLnJlcXVlc3RQb2ludGVyTG9ja1xyXG4gICAgICAgICAgICB8fCBlbC5tb3pSZXF1ZXN0UG9pbnRlckxvY2tcclxuICAgICAgICAgICAgfHwgZWwud2Via2l0UmVxdWVzdFBvaW50ZXJMb2NrO1xyXG5cclxuICAgICAgICBlbC5yZXF1ZXN0UG9pbnRlckxvY2soKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250cm9sIHVwZGF0ZS4gU2hvdWxkIGJlIGludm9rZWQgZXZlcnkgZnJhbWVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcmFtZVRpbWUgRnJhbWUgdGltZVxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChmcmFtZVRpbWUpIHtcclxuICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XHJcblxyXG4gICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMudGFyZ2V0LnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS54Lm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgIHZhciB6QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS56Lm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy52ZXJ0aWNhbE1vdmVMb2NrKSB7XHJcbiAgICAgICAgICAgIHpBeGlzLnkgPSAwO1xyXG4gICAgICAgICAgICB6QXhpcy5ub3JtYWxpemUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzcGVlZCA9IHRoaXMuc3BlZWQgKiBmcmFtZVRpbWUgLyAyMDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX21vdmVGb3J3YXJkKSB7XHJcbiAgICAgICAgICAgIC8vIE9wcG9zaXRlIGRpcmVjdGlvbiBvZiB6XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHpBeGlzLCAtc3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZUJhY2t3YXJkKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHpBeGlzLCBzcGVlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlTGVmdCkge1xyXG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh4QXhpcywgLXNwZWVkIC8gMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlUmlnaHQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoeEF4aXMsIHNwZWVkIC8gMik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0YXJnZXQucm90YXRlQXJvdW5kKHRhcmdldC5wb3NpdGlvbiwgdGhpcy51cCwgLXRoaXMuX29mZnNldFBpdGNoICogZnJhbWVUaW1lICogTWF0aC5QSSAvIDM2MCk7XHJcbiAgICAgICAgdmFyIHhBeGlzID0gdGFyZ2V0LmxvY2FsVHJhbnNmb3JtLng7XHJcbiAgICAgICAgdGFyZ2V0LnJvdGF0ZUFyb3VuZCh0YXJnZXQucG9zaXRpb24sIHhBeGlzLCAtdGhpcy5fb2Zmc2V0Um9sbCAqIGZyYW1lVGltZSAqIE1hdGguUEkgLyAzNjApO1xyXG5cclxuICAgICAgICB0aGlzLl9vZmZzZXRSb2xsID0gdGhpcy5fb2Zmc2V0UGl0Y2ggPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICBfbG9ja0NoYW5nZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBkb2MucG9pbnRlckxvY2tFbGVtZW50ID09PSB0aGlzLmRvbUVsZW1lbnRcclxuICAgICAgICAgICAgfHwgZG9jLm1velBvaW50ZXJMb2NrRWxlbWVudCA9PT0gdGhpcy5kb21FbGVtZW50XHJcbiAgICAgICAgICAgIHx8IGRvYy53ZWJraXRQb2ludGVyTG9ja0VsZW1lbnQgPT09IHRoaXMuZG9tRWxlbWVudFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb2MsICdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmUsIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvYywgJ21vdXNlbW92ZScsIHRoaXMuX21vdXNlTW92ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfbW91c2VNb3ZlOiBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgdmFyIGR4ID0gZS5tb3ZlbWVudFggfHwgZS5tb3pNb3ZlbWVudFggfHwgZS53ZWJraXRNb3ZlbWVudFggfHwgMDtcclxuICAgICAgICB2YXIgZHkgPSBlLm1vdmVtZW50WSB8fCBlLm1vek1vdmVtZW50WSB8fCBlLndlYmtpdE1vdmVtZW50WSB8fCAwO1xyXG5cclxuICAgICAgICB0aGlzLl9vZmZzZXRQaXRjaCArPSBkeCAqIHRoaXMuc2Vuc2l0aXZpdHkgLyAyMDA7XHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0Um9sbCArPSBkeSAqIHRoaXMuc2Vuc2l0aXZpdHkgLyAyMDA7XHJcblxyXG4gICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGV2ZW50IHRvIHJlbWluZCByZW5kZXJlciBkbyByZW5kZXJcclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2NoYW5nZScpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZGV0ZWN0TW92ZW1lbnRDaGFuZ2U6IGZ1bmN0aW9uIChmcmFtZVRpbWUpIHtcclxuICAgICAgICBpZiAodGhpcy5fbW92ZUZvcndhcmQgfHwgdGhpcy5fbW92ZUJhY2t3YXJkIHx8IHRoaXMuX21vdmVMZWZ0IHx8IHRoaXMuX21vdmVSaWdodCkge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2NoYW5nZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0ZShmcmFtZVRpbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfa2V5RG93bjogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIHN3aXRjaChlLmtleUNvZGUpIHtcclxuICAgICAgICAgICAgY2FzZSA4NzogLy93XHJcbiAgICAgICAgICAgIGNhc2UgMzc6IC8vdXAgYXJyb3dcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVGb3J3YXJkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDgzOiAvL3NcclxuICAgICAgICAgICAgY2FzZSA0MDogLy9kb3duIGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlQmFja3dhcmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNjU6IC8vYVxyXG4gICAgICAgICAgICBjYXNlIDM3OiAvL2xlZnQgYXJyb3dcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVMZWZ0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDY4OiAvL2RcclxuICAgICAgICAgICAgY2FzZSAzOTogLy9yaWdodCBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZVJpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBldmVudCB0byByZW1pbmQgcmVuZGVyZXIgZG8gcmVuZGVyXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2UnKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2tleVVwOiBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgc3dpdGNoKGUua2V5Q29kZSkge1xyXG4gICAgICAgICAgICBjYXNlIDg3OiAvL3dcclxuICAgICAgICAgICAgY2FzZSAzNzogLy91cCBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUZvcndhcmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDgzOiAvL3NcclxuICAgICAgICAgICAgY2FzZSA0MDogLy9kb3duIGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlQmFja3dhcmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDY1OiAvL2FcclxuICAgICAgICAgICAgY2FzZSAzNzogLy9sZWZ0IGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlTGVmdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNjg6IC8vZFxyXG4gICAgICAgICAgICBjYXNlIDM5OiAvL3JpZ2h0IGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlUmlnaHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGcmVlQ29udHJvbDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XHJcblxyXG4vKipcclxuICogR2FtZXBhZCBDb250cm9sIHBsdWdpbi5cclxuICpcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGx1Z2luLkdhbWVwYWRDb250cm9sXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgaW5pdDogZnVuY3Rpb24oYXBwKSB7XHJcbiAqICAgICB0aGlzLl9nYW1lcGFkQ29udHJvbCA9IG5ldyBjbGF5LnBsdWdpbi5HYW1lcGFkQ29udHJvbCh7XHJcbiAqICAgICAgICAgdGFyZ2V0OiBjYW1lcmEsXHJcbiAqICAgICAgICAgb25TdGFuZGFyZEdhbWVwYWRSZWFkeTogY3VzdG9tQ2FsbGJhY2tcclxuICogICAgIH0pO1xyXG4gKiAgIH0sXHJcbiAqXHJcbiAqICAgbG9vcDogZnVuY3Rpb24oYXBwKSB7XHJcbiAqICAgICB0aGlzLl9nYW1lcGFkQ29udHJvbC51cGRhdGUoYXBwLmZyYW1lVGltZSk7XHJcbiAqICAgfVxyXG4gKi9cclxudmFyIEdhbWVwYWRDb250cm9sID0gQmFzZS5leHRlbmQoZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5wbHVnaW4uR2FtZXBhZENvbnRyb2wjICovIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2NlbmUgbm9kZSB0byBjb250cm9sLCBtb3N0bHkgaXQgaXMgYSBjYW1lcmEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRhcmdldDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTW92ZSBzcGVlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbW92ZVNwZWVkOiAwLjEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIExvb2sgYXJvdW5kIHNwZWVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBsb29rQXJvdW5kU3BlZWQ6IDAuMSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVXAgYXhpcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdXA6IG5ldyBWZWN0b3IzKDAsIDEsIDApLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lbGluZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRpbWVsaW5lfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRpbWVsaW5lOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhIHN0YW5kYXJkIGdhbWVwYWQgaXMgcmVhZHkgdG8gdXNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uU3RhbmRhcmRHYW1lcGFkUmVhZHk6IGZ1bmN0aW9uKGdhbWVwYWQpe30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGEgZ2FtZXBhZCBpcyBkaXNjb25uZWN0ZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb25HYW1lcGFkRGlzY29ubmVjdGVkOiBmdW5jdGlvbihnYW1lcGFkKXt9LFxyXG5cclxuICAgICAgICAvLyBQcml2YXRlIHByb3BlcnRpZXM6XHJcblxyXG4gICAgICAgIF9tb3ZlRm9yd2FyZDogZmFsc2UsXHJcbiAgICAgICAgX21vdmVCYWNrd2FyZDogZmFsc2UsXHJcbiAgICAgICAgX21vdmVMZWZ0OiBmYWxzZSxcclxuICAgICAgICBfbW92ZVJpZ2h0OiBmYWxzZSxcclxuXHJcbiAgICAgICAgX29mZnNldFBpdGNoOiAwLFxyXG4gICAgICAgIF9vZmZzZXRSb2xsOiAwLFxyXG5cclxuICAgICAgICBfY29ubmVjdGVkR2FtZXBhZEluZGV4OiAwLFxyXG4gICAgICAgIF9zdGFuZGFyZEdhbWVwYWRBdmFpbGFibGU6IGZhbHNlLFxyXG4gICAgICAgIF9nYW1lcGFkQXhpc1RocmVzaG9sZDogMC4zXHJcblxyXG4gICAgfTtcclxuXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIHRoaXMuX2NoZWNrR2FtZXBhZENvbXBhdGliaWxpdHkgPSB0aGlzLl9jaGVja0dhbWVwYWRDb21wYXRpYmlsaXR5LmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9kaXNjb25uZWN0R2FtZXBhZCA9IHRoaXMuX2Rpc2Nvbm5lY3RHYW1lcGFkLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9nZXRTdGFuZGFyZEdhbWVwYWQgPSB0aGlzLl9nZXRTdGFuZGFyZEdhbWVwYWQuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX3NjYW5QcmVzc2VkR2FtZXBhZEJ1dHRvbnMgPSB0aGlzLl9zY2FuUHJlc3NlZEdhbWVwYWRCdXR0b25zLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9zY2FuSW5jbGluZWRHYW1lcGFkQXhlcyA9IHRoaXMuX3NjYW5JbmNsaW5lZEdhbWVwYWRBeGVzLmJpbmQodGhpcyk7XHJcblxyXG4gICAgdGhpcy51cGRhdGUgPSB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpO1xyXG5cclxuICAgIC8vIElmIGJyb3dzZXIgc3VwcG9ydHMgR2FtZXBhZCBBUEk6XHJcbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvci5nZXRHYW1lcGFkcyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5HYW1lcGFkQ29udHJvbC5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0LiBjb250cm9sLlxyXG4gICAgICovXHJcbiAgICBpbml0OiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hlbiB1c2VyIGJlZ2lucyB0byBpbnRlcmFjdCB3aXRoIGNvbm5lY3RlZCBnYW1lcGFkOlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vZ2FtZXBhZC8jZG9tLWdhbWVwYWRldmVudFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKHdpbmRvdywgJ2dhbWVwYWRjb25uZWN0ZWQnLCB0aGlzLl9jaGVja0dhbWVwYWRDb21wYXRpYmlsaXR5KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGltZWxpbmUpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lbGluZS5vbignZnJhbWUnLCB0aGlzLnVwZGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csICdnYW1lcGFkZGlzY29ubmVjdGVkJywgdGhpcy5fZGlzY29ubmVjdEdhbWVwYWQpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGNvbnRyb2wuXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3csICdnYW1lcGFkY29ubmVjdGVkJywgdGhpcy5fY2hlY2tHYW1lcGFkQ29tcGF0aWJpbGl0eSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZWxpbmUub2ZmKCdmcmFtZScsIHRoaXMudXBkYXRlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKHdpbmRvdywgJ2dhbWVwYWRkaXNjb25uZWN0ZWQnLCB0aGlzLl9kaXNjb25uZWN0R2FtZXBhZCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnRyb2wncyB1cGRhdGUuIFNob3VsZCBiZSBpbnZva2VkIGV2ZXJ5IGZyYW1lLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcmFtZVRpbWUgRnJhbWUgdGltZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fc3RhbmRhcmRHYW1lcGFkQXZhaWxhYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NjYW5QcmVzc2VkR2FtZXBhZEJ1dHRvbnMoKTtcclxuICAgICAgICB0aGlzLl9zY2FuSW5jbGluZWRHYW1lcGFkQXhlcygpO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGFyZ2V0IGRlcGVuZGluZyBvbiB1c2VyIGlucHV0LlxyXG5cclxuICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XHJcblxyXG4gICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMudGFyZ2V0LnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS54Lm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgIHZhciB6QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS56Lm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2YXIgbW92ZVNwZWVkID0gdGhpcy5tb3ZlU3BlZWQgKiBmcmFtZVRpbWUgLyAyMDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX21vdmVGb3J3YXJkKSB7XHJcbiAgICAgICAgICAgIC8vIE9wcG9zaXRlIGRpcmVjdGlvbiBvZiB6LlxyXG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh6QXhpcywgLW1vdmVTcGVlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlQmFja3dhcmQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoekF4aXMsIG1vdmVTcGVlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlTGVmdCkge1xyXG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh4QXhpcywgLW1vdmVTcGVlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlUmlnaHQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoeEF4aXMsIG1vdmVTcGVlZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0YXJnZXQucm90YXRlQXJvdW5kKHRhcmdldC5wb3NpdGlvbiwgdGhpcy51cCwgLXRoaXMuX29mZnNldFBpdGNoICogZnJhbWVUaW1lICogTWF0aC5QSSAvIDM2MCk7XHJcbiAgICAgICAgdmFyIHhBeGlzID0gdGFyZ2V0LmxvY2FsVHJhbnNmb3JtLng7XHJcbiAgICAgICAgdGFyZ2V0LnJvdGF0ZUFyb3VuZCh0YXJnZXQucG9zaXRpb24sIHhBeGlzLCAtdGhpcy5fb2Zmc2V0Um9sbCAqIGZyYW1lVGltZSAqIE1hdGguUEkgLyAzNjApO1xyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIElmIG5lY2Vzc2FyeTogdHJpZ2dlciBgdXBkYXRlYCBldmVudC5cclxuICAgICAgICAgKiBYWFggVGhpcyBjYW4gZWNvbm9taXplIHJlbmRlcmluZyBPUHMuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYgKHRoaXMuX21vdmVGb3J3YXJkID09PSB0cnVlIHx8IHRoaXMuX21vdmVCYWNrd2FyZCA9PT0gdHJ1ZSB8fCB0aGlzLl9tb3ZlTGVmdCA9PT0gdHJ1ZVxyXG4gICAgICAgICAgICB8fCB0aGlzLl9tb3ZlUmlnaHQgPT09IHRydWUgfHwgdGhpcy5fb2Zmc2V0UGl0Y2ggIT09IDAgfHwgdGhpcy5fb2Zmc2V0Um9sbCAhPT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndXBkYXRlJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZXNldCB2YWx1ZXMgdG8gYXZvaWQgbG9zdCBvZiBjb250cm9sLlxyXG5cclxuICAgICAgICB0aGlzLl9tb3ZlRm9yd2FyZCA9IHRoaXMuX21vdmVCYWNrd2FyZCA9IHRoaXMuX21vdmVMZWZ0ID0gdGhpcy5fbW92ZVJpZ2h0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0UGl0Y2ggPSB0aGlzLl9vZmZzZXRSb2xsID0gMDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFByaXZhdGUgbWV0aG9kczpcclxuXHJcbiAgICBfY2hlY2tHYW1lcGFkQ29tcGF0aWJpbGl0eTogZnVuY3Rpb24oZXZlbnQpIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgY29ubmVjdGVkIGdhbWVwYWQgaGFzIGEgKipzdGFuZGFyZCoqIGxheW91dDpcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2dhbWVwYWQvI3JlbWFwcGluZyBhYm91dCBzdGFuZGFyZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAoZXZlbnQuZ2FtZXBhZC5tYXBwaW5nID09PSAnc3RhbmRhcmQnKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9zdGFuZGFyZEdhbWVwYWRJbmRleCA9IGV2ZW50LmdhbWVwYWQuaW5kZXg7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YW5kYXJkR2FtZXBhZEF2YWlsYWJsZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm9uU3RhbmRhcmRHYW1lcGFkUmVhZHkoZXZlbnQuZ2FtZXBhZCk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIF9kaXNjb25uZWN0R2FtZXBhZDogZnVuY3Rpb24oZXZlbnQpIHtcclxuXHJcbiAgICAgICAgdGhpcy5fc3RhbmRhcmRHYW1lcGFkQXZhaWxhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMub25HYW1lcGFkRGlzY29ubmVjdGVkKGV2ZW50LmdhbWVwYWQpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgX2dldFN0YW5kYXJkR2FtZXBhZDogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBuYXZpZ2F0b3IuZ2V0R2FtZXBhZHMoKVt0aGlzLl9zdGFuZGFyZEdhbWVwYWRJbmRleF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBfc2NhblByZXNzZWRHYW1lcGFkQnV0dG9uczogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBnYW1lcGFkQnV0dG9ucyA9IHRoaXMuX2dldFN0YW5kYXJkR2FtZXBhZCgpLmJ1dHRvbnM7XHJcblxyXG4gICAgICAgIC8vIEZvciBlYWNoIGdhbWVwYWQgYnV0dG9uOlxyXG4gICAgICAgIGZvciAodmFyIGdhbWVwYWRCdXR0b25JZCA9IDA7IGdhbWVwYWRCdXR0b25JZCA8IGdhbWVwYWRCdXR0b25zLmxlbmd0aDsgZ2FtZXBhZEJ1dHRvbklkKyspIHtcclxuXHJcbiAgICAgICAgICAgIC8vIEdldCB1c2VyIGlucHV0LlxyXG4gICAgICAgICAgICB2YXIgZ2FtZXBhZEJ1dHRvbiA9IGdhbWVwYWRCdXR0b25zW2dhbWVwYWRCdXR0b25JZF07XHJcblxyXG4gICAgICAgICAgICBpZiAoZ2FtZXBhZEJ1dHRvbi5wcmVzc2VkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChnYW1lcGFkQnV0dG9uSWQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRC1wYWQgVXBcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlRm9yd2FyZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBELXBhZCBEb3duXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUJhY2t3YXJkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEQtcGFkIExlZnRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlTGVmdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBELXBhZCBSaWdodFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVSaWdodCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgX3NjYW5JbmNsaW5lZEdhbWVwYWRBeGVzOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIGdhbWVwYWRBeGVzID0gdGhpcy5fZ2V0U3RhbmRhcmRHYW1lcGFkKCkuYXhlcztcclxuXHJcbiAgICAgICAgLy8gRm9yIGVhY2ggZ2FtZXBhZCBheGlzOlxyXG4gICAgICAgIGZvciAodmFyIGdhbWVwYWRBeGlzSWQgPSAwOyBnYW1lcGFkQXhpc0lkIDwgZ2FtZXBhZEF4ZXMubGVuZ3RoOyBnYW1lcGFkQXhpc0lkKyspIHtcclxuXHJcbiAgICAgICAgICAgIC8vIEdldCB1c2VyIGlucHV0LlxyXG4gICAgICAgICAgICB2YXIgZ2FtZXBhZEF4aXMgPSBnYW1lcGFkQXhlc1tnYW1lcGFkQXhpc0lkXTtcclxuXHJcbiAgICAgICAgICAgIC8vIFhYWCBXZSB1c2UgYSB0aHJlc2hvbGQgYmVjYXVzZSBheGVzIGFyZSBuZXZlciBuZXV0cmFsLlxyXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMoZ2FtZXBhZEF4aXMpID4gdGhpcy5fZ2FtZXBhZEF4aXNUaHJlc2hvbGQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGdhbWVwYWRBeGlzSWQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTGVmdCBzdGljayBYwrFcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVMZWZ0ID0gZ2FtZXBhZEF4aXMgPCAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlUmlnaHQgPSBnYW1lcGFkQXhpcyA+IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBMZWZ0IHN0aWNrIFnCsVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUZvcndhcmQgPSBnYW1lcGFkQXhpcyA8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVCYWNrd2FyZCA9IGdhbWVwYWRBeGlzID4gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFJpZ2h0IHN0aWNrIFjCsVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2Zmc2V0UGl0Y2ggKz0gZ2FtZXBhZEF4aXMgKiB0aGlzLmxvb2tBcm91bmRTcGVlZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFJpZ2h0IHN0aWNrIFnCsVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2Zmc2V0Um9sbCArPSBnYW1lcGFkQXhpcyAqIHRoaXMubG9va0Fyb3VuZFNwZWVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdhbWVwYWRDb250cm9sO1xyXG4iLCJ2YXIgR2VzdHVyZU1nciA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB0aGlzLl90cmFjayA9IFtdO1xyXG59O1xyXG5cclxuR2VzdHVyZU1nci5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IEdlc3R1cmVNZ3IsXHJcblxyXG4gICAgcmVjb2duaXplOiBmdW5jdGlvbiAoZXZlbnQsIHRhcmdldCwgcm9vdCkge1xyXG4gICAgICAgIHRoaXMuX2RvVHJhY2soZXZlbnQsIHRhcmdldCwgcm9vdCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlY29nbml6ZShldmVudCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2subGVuZ3RoID0gMDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgX2RvVHJhY2s6IGZ1bmN0aW9uIChldmVudCwgdGFyZ2V0LCByb290KSB7XHJcbiAgICAgICAgdmFyIHRvdWNoZXMgPSBldmVudC50YXJnZXRUb3VjaGVzO1xyXG5cclxuICAgICAgICBpZiAoIXRvdWNoZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRyYWNrSXRlbSA9IHtcclxuICAgICAgICAgICAgcG9pbnRzOiBbXSxcclxuICAgICAgICAgICAgdG91Y2hlczogW10sXHJcbiAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxyXG4gICAgICAgICAgICBldmVudDogZXZlbnRcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdG91Y2hlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdG91Y2ggPSB0b3VjaGVzW2ldO1xyXG4gICAgICAgICAgICB0cmFja0l0ZW0ucG9pbnRzLnB1c2goW3RvdWNoLmNsaWVudFgsIHRvdWNoLmNsaWVudFldKTtcclxuICAgICAgICAgICAgdHJhY2tJdGVtLnRvdWNoZXMucHVzaCh0b3VjaCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90cmFjay5wdXNoKHRyYWNrSXRlbSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZWNvZ25pemU6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiByZWNvZ25pemVycykge1xyXG4gICAgICAgICAgICBpZiAocmVjb2duaXplcnMuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGdlc3R1cmVJbmZvID0gcmVjb2duaXplcnNbZXZlbnROYW1lXSh0aGlzLl90cmFjaywgZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGdlc3R1cmVJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdlc3R1cmVJbmZvO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZnVuY3Rpb24gZGlzdChwb2ludFBhaXIpIHtcclxuICAgIHZhciBkeCA9IHBvaW50UGFpclsxXVswXSAtIHBvaW50UGFpclswXVswXTtcclxuICAgIHZhciBkeSA9IHBvaW50UGFpclsxXVsxXSAtIHBvaW50UGFpclswXVsxXTtcclxuXHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2VudGVyKHBvaW50UGFpcikge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICAocG9pbnRQYWlyWzBdWzBdICsgcG9pbnRQYWlyWzFdWzBdKSAvIDIsXHJcbiAgICAgICAgKHBvaW50UGFpclswXVsxXSArIHBvaW50UGFpclsxXVsxXSkgLyAyXHJcbiAgICBdO1xyXG59XHJcblxyXG52YXIgcmVjb2duaXplcnMgPSB7XHJcblxyXG4gICAgcGluY2g6IGZ1bmN0aW9uICh0cmFjaywgZXZlbnQpIHtcclxuICAgICAgICB2YXIgdHJhY2tMZW4gPSB0cmFjay5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmICghdHJhY2tMZW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHBpbmNoRW5kID0gKHRyYWNrW3RyYWNrTGVuIC0gMV0gfHwge30pLnBvaW50cztcclxuICAgICAgICB2YXIgcGluY2hQcmUgPSAodHJhY2tbdHJhY2tMZW4gLSAyXSB8fCB7fSkucG9pbnRzIHx8IHBpbmNoRW5kO1xyXG5cclxuICAgICAgICBpZiAocGluY2hQcmVcclxuICAgICAgICAgICAgJiYgcGluY2hQcmUubGVuZ3RoID4gMVxyXG4gICAgICAgICAgICAmJiBwaW5jaEVuZFxyXG4gICAgICAgICAgICAmJiBwaW5jaEVuZC5sZW5ndGggPiAxXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHZhciBwaW5jaFNjYWxlID0gZGlzdChwaW5jaEVuZCkgLyBkaXN0KHBpbmNoUHJlKTtcclxuICAgICAgICAgICAgIWlzRmluaXRlKHBpbmNoU2NhbGUpICYmIChwaW5jaFNjYWxlID0gMSk7XHJcblxyXG4gICAgICAgICAgICBldmVudC5waW5jaFNjYWxlID0gcGluY2hTY2FsZTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwaW5jaENlbnRlciA9IGNlbnRlcihwaW5jaEVuZCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnBpbmNoWCA9IHBpbmNoQ2VudGVyWzBdO1xyXG4gICAgICAgICAgICBldmVudC5waW5jaFkgPSBwaW5jaENlbnRlclsxXTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAncGluY2gnLFxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB0cmFja1swXS50YXJnZXQsXHJcbiAgICAgICAgICAgICAgICBldmVudDogZXZlbnRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHZXN0dXJlTWdyO1xyXG4iLCJpbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IFBsYW5lIGZyb20gJy4uL21hdGgvUGxhbmUnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgUmF5IGZyb20gJy4uL21hdGgvUmF5JztcclxuXHJcbnZhciB1dnMgPSBbWzAsIDBdLCBbMCwgMV0sIFsxLCAxXSwgWzEsIDBdXTtcclxudmFyIHRyaXMgPSBbMCwgMSwgMiwgMiwgMywgMF07XHJcblxyXG52YXIgSW5maW5pdGVQbGFuZSA9IE1lc2guZXh0ZW5kKHtcclxuXHJcbiAgICBjYW1lcmE6IG51bGwsXHJcblxyXG4gICAgcGxhbmU6IG51bGwsXHJcblxyXG4gICAgbWF4R3JpZDogMCxcclxuXHJcbiAgICAvLyBUT0RPXHJcbiAgICBmcnVzdHVtQ3VsbGluZzogZmFsc2VcclxuXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe1xyXG4gICAgICAgIGR5bmFtaWM6IHRydWVcclxuICAgIH0pO1xyXG4gICAgZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5pbml0KDYpO1xyXG4gICAgZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwuaW5pdCg2KTtcclxuICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXMudGV4Y29vcmQwLmluaXQoNik7XHJcbiAgICBnZW9tZXRyeS5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDYpO1xyXG5cclxuICAgIHRoaXMucGxhbmUgPSBuZXcgUGxhbmUoKTtcclxufSwge1xyXG5cclxuICAgIHVwZGF0ZUdlb21ldHJ5OiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciBjb29yZHMgPSB0aGlzLl91blByb2plY3RHcmlkKCk7XHJcbiAgICAgICAgaWYgKCFjb29yZHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcG9zaXRpb25BdHRyID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciBub3JtYWxBdHRyID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLm5vcm1hbDtcclxuICAgICAgICB2YXIgdGV4Y29vcmRzID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMDtcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuZ2VvbWV0cnkuaW5kaWNlcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGlkeCA9IHRyaXNbaV07XHJcbiAgICAgICAgICAgIHBvc2l0aW9uQXR0ci5zZXQoaSwgY29vcmRzW2lkeF0uYXJyYXkpO1xyXG4gICAgICAgICAgICBub3JtYWxBdHRyLnNldChpLCB0aGlzLnBsYW5lLm5vcm1hbC5hcnJheSk7XHJcbiAgICAgICAgICAgIHRleGNvb3Jkcy5zZXQoaSwgdXZzW2lkeF0pO1xyXG4gICAgICAgICAgICBpbmRpY2VzW2ldID0gaTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZW9tZXRyeS5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBodHRwOi8vZmlsZWFkbWluLmNzLmx0aC5zZS9ncmFwaGljcy90aGVzZXMvcHJvamVjdHMvcHJvamdyaWQvXHJcbiAgICBfdW5Qcm9qZWN0R3JpZDogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIHBsYW5lVmlld1NwYWNlID0gbmV3IFBsYW5lKCk7XHJcbiAgICAgICAgdmFyIGxpbmVzID0gW1xyXG4gICAgICAgICAgICAwLCAxLCAwLCAyLCAxLCAzLCAyLCAzLFxyXG4gICAgICAgICAgICA0LCA1LCA0LCA2LCA1LCA3LCA2LCA3LFxyXG4gICAgICAgICAgICAwLCA0LCAxLCA1LCAyLCA2LCAzLCA3XHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB2YXIgZW5kID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbiAgICAgICAgdmFyIHBvaW50cyA9IFtdO1xyXG5cclxuICAgICAgICAvLyAxLS0tLTJcclxuICAgICAgICAvLyB8ICAgIHxcclxuICAgICAgICAvLyAwLS0tLTNcclxuICAgICAgICB2YXIgY29vcmRzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcclxuICAgICAgICAgICAgY29vcmRzW2ldID0gbmV3IFZlY3RvcjMoMCwgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcmF5ID0gbmV3IFJheSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBwbGFuZVZpZXdTcGFjZS5jb3B5KHRoaXMucGxhbmUpO1xyXG4gICAgICAgICAgICBwbGFuZVZpZXdTcGFjZS5hcHBseVRyYW5zZm9ybSh0aGlzLmNhbWVyYS52aWV3TWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBmcnVzdHVtVmVydGljZXMgPSB0aGlzLmNhbWVyYS5mcnVzdHVtLnZlcnRpY2VzO1xyXG5cclxuICAgICAgICAgICAgdmFyIG5Qb2ludHMgPSAwO1xyXG4gICAgICAgICAgICAvLyBJbnRlcnNlY3Qgd2l0aCBsaW5lcyBvZiBmcnVzdHVtXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTI7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQuYXJyYXkgPSBmcnVzdHVtVmVydGljZXNbbGluZXNbaSAqIDJdXTtcclxuICAgICAgICAgICAgICAgIGVuZC5hcnJheSA9IGZydXN0dW1WZXJ0aWNlc1tsaW5lc1tpICogMiArIDFdXTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcG9pbnQgPSBwbGFuZVZpZXdTcGFjZS5pbnRlcnNlY3RMaW5lKHN0YXJ0LCBlbmQsIHBvaW50c1tuUG9pbnRzXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXBvaW50c1tuUG9pbnRzXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbblBvaW50c10gPSBwb2ludDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgblBvaW50cysrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChuUG9pbnRzID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuUG9pbnRzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHBvaW50c1tpXS5hcHBseVByb2plY3Rpb24odGhpcy5jYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIG1pblggPSBwb2ludHNbMF0uYXJyYXlbMF07XHJcbiAgICAgICAgICAgIHZhciBtaW5ZID0gcG9pbnRzWzBdLmFycmF5WzFdO1xyXG4gICAgICAgICAgICB2YXIgbWF4WCA9IHBvaW50c1swXS5hcnJheVswXTtcclxuICAgICAgICAgICAgdmFyIG1heFkgPSBwb2ludHNbMF0uYXJyYXlbMV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgblBvaW50czsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcG9pbnRzW2ldLmFycmF5WzBdKTtcclxuICAgICAgICAgICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBwb2ludHNbaV0uYXJyYXlbMV0pO1xyXG4gICAgICAgICAgICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIHBvaW50c1tpXS5hcnJheVswXSk7XHJcbiAgICAgICAgICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcG9pbnRzW2ldLmFycmF5WzFdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWluWCA9PSBtYXhYIHx8IG1pblkgPT0gbWF4WSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvb3Jkc1swXS5hcnJheVswXSA9IG1pblg7XHJcbiAgICAgICAgICAgIGNvb3Jkc1swXS5hcnJheVsxXSA9IG1pblk7XHJcbiAgICAgICAgICAgIGNvb3Jkc1sxXS5hcnJheVswXSA9IG1pblg7XHJcbiAgICAgICAgICAgIGNvb3Jkc1sxXS5hcnJheVsxXSA9IG1heFk7XHJcbiAgICAgICAgICAgIGNvb3Jkc1syXS5hcnJheVswXSA9IG1heFg7XHJcbiAgICAgICAgICAgIGNvb3Jkc1syXS5hcnJheVsxXSA9IG1heFk7XHJcbiAgICAgICAgICAgIGNvb3Jkc1szXS5hcnJheVswXSA9IG1heFg7XHJcbiAgICAgICAgICAgIGNvb3Jkc1szXS5hcnJheVsxXSA9IG1pblk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW1lcmEuY2FzdFJheShjb29yZHNbaV0sIHJheSk7XHJcbiAgICAgICAgICAgICAgICByYXkuaW50ZXJzZWN0UGxhbmUodGhpcy5wbGFuZSwgY29vcmRzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGNvb3JkcztcclxuICAgICAgICB9O1xyXG4gICAgfSkoKVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEluZmluaXRlUGxhbmU7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBWZWN0b3IyIGZyb20gJy4uL21hdGgvVmVjdG9yMic7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBHZXN0dXJlTWdyIGZyb20gJy4vR2VzdHVyZU1ncic7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuXHJcbnZhciBNT1VTRV9CVVRUT05fS0VZX01BUCA9IHtcclxuICAgIGxlZnQ6IDAsXHJcbiAgICBtaWRkbGU6IDEsXHJcbiAgICByaWdodDogMlxyXG59O1xyXG5cclxuZnVuY3Rpb24gZmlyc3ROb3ROdWxsKCkge1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGlmIChhcmd1bWVudHNbaV0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY29udmVydFRvQXJyYXkodmFsKSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkge1xyXG4gICAgICAgIHZhbCA9IFt2YWwsIHZhbF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG59XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LnBsdWdpbi5PcmJpdENvbnRyb2xcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBPcmJpdENvbnRyb2wgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5wbHVnaW4uT3JiaXRDb250cm9sIyAqLyB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRpbWVsaW5lfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRpbWVsaW5lOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZG9tRWxlbWVudDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0YXJnZXQ6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAgICAgKi9cclxuICAgICAgICBfY2VudGVyOiBuZXcgVmVjdG9yMygpLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNaW5pbXVtIGRpc3RhbmNlIHRvIHRoZSBjZW50ZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDAuNVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1pbkRpc3RhbmNlOiAwLjEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1heGltdW0gZGlzdGFuY2UgdG8gdGhlIGNlbnRlclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1heERpc3RhbmNlOiAxMDAwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBPbmx5IGF2YWlsYWJsZSB3aGVuIGNhbWVyYSBpcyBvcnRob2dyYXBoaWNcclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXhPcnRob2dyYXBoaWNTaXplOiAzMDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE9ubHkgYXZhaWxhYmxlIHdoZW4gY2FtZXJhIGlzIG9ydGhvZ3JhcGhpY1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1pbk9ydGhvZ3JhcGhpY1NpemU6IDMwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBc3BlY3Qgb2Ygb3J0aG9ncmFwaGljIGNhbWVyYVxyXG4gICAgICAgICAqIE9ubHkgYXZhaWxhYmxlIHdoZW4gY2FtZXJhIGlzIG9ydGhvZ3JhcGhpY1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9ydGhvZ3JhcGhpY0FzcGVjdDogMSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWluaW11bSBhbHBoYSByb3RhdGlvblxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1pbkFscGhhOiAtOTAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1heGltdW0gYWxwaGEgcm90YXRpb25cclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXhBbHBoYTogOTAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1pbmltdW0gYmV0YSByb3RhdGlvblxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1pbkJldGE6IC1JbmZpbml0eSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNYXhpbXVtIGJldGEgcm90YXRpb25cclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXhCZXRhOiBJbmZpbml0eSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU3RhcnQgYXV0byByb3RhdGluZyBhZnRlciBzdGlsbCBmb3IgdGhlIGdpdmVuIHRpbWVcclxuICAgICAgICAgKi9cclxuICAgICAgICBhdXRvUm90YXRlQWZ0ZXJTdGlsbDogMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRGlyZWN0aW9uIG9mIGF1dG9Sb3RhdGUuIGN3IG9yIGNjdyB3aGVuIGxvb2tpbmcgdG9wIGRvd24uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXV0b1JvdGF0ZURpcmVjdGlvbjogJ2N3JyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRGVncmVlIHBlciBzZWNvbmRcclxuICAgICAgICAgKi9cclxuICAgICAgICBhdXRvUm90YXRlU3BlZWQ6IDYwLFxyXG5cclxuICAgICAgICBwYW5Nb3VzZUJ1dHRvbjogJ21pZGRsZScsXHJcbiAgICAgICAgcm90YXRlTW91c2VCdXR0b246ICdsZWZ0JyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUGFuIG9yIHJvdGF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtTdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX21vZGU6ICdyb3RhdGUnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkYW1waW5nOiAwLjgsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJvdGF0ZVNlbnNpdGl2aXR5OiAxLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB6b29tU2Vuc2l0aXZpdHk6IDEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHBhblNlbnNpdGl2aXR5OiAxLFxyXG5cclxuICAgICAgICBfbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICAgICAgICBfcm90YXRpbmc6IGZhbHNlLFxyXG5cclxuICAgICAgICAvLyBSb3RhdGlvbiBhcm91bmQgeUF4aXNcclxuICAgICAgICBfcGhpOiAwLFxyXG4gICAgICAgIC8vIFJvdGF0aW9uIGFyb3VuZCB4QXhpc1xyXG4gICAgICAgIF90aGV0YTogMCxcclxuXHJcbiAgICAgICAgX21vdXNlWDogMCxcclxuICAgICAgICBfbW91c2VZOiAwLFxyXG5cclxuICAgICAgICBfcm90YXRlVmVsb2NpdHk6IG5ldyBWZWN0b3IyKCksXHJcblxyXG4gICAgICAgIF9wYW5WZWxvY2l0eTogbmV3IFZlY3RvcjIoKSxcclxuXHJcbiAgICAgICAgX2Rpc3RhbmNlOiAyMCxcclxuXHJcbiAgICAgICAgX3pvb21TcGVlZDogMCxcclxuXHJcbiAgICAgICAgX3N0aWxsVGltZW91dDogMCxcclxuXHJcbiAgICAgICAgX2FuaW1hdG9yczogW10sXHJcblxyXG4gICAgICAgIF9nZXN0dXJlTWdyOiBuZXcgR2VzdHVyZU1ncigpXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBFYWNoIE9yYml0Q29udHJvbCBoYXMgaXQncyBvd24gaGFuZGxlclxyXG4gICAgdGhpcy5fbW91c2VEb3duSGFuZGxlciA9IHRoaXMuX21vdXNlRG93bkhhbmRsZXIuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX21vdXNlV2hlZWxIYW5kbGVyID0gdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIgPSB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9tb3VzZVVwSGFuZGxlciA9IHRoaXMuX21vdXNlVXBIYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9waW5jaEhhbmRsZXIgPSB0aGlzLl9waW5jaEhhbmRsZXIuYmluZCh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxufSwgLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5PcmJpdENvbnRyb2wjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZS5cclxuICAgICAqIE1vdXNlIGV2ZW50IGJpbmRpbmdcclxuICAgICAqL1xyXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBkb20gPSB0aGlzLmRvbUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNoc3RhcnQnLCB0aGlzLl9tb3VzZURvd25IYW5kbGVyKTtcclxuXHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2Vkb3duJywgdGhpcy5fbW91c2VEb3duSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9tLCAnd2hlZWwnLCB0aGlzLl9tb3VzZVdoZWVsSGFuZGxlcik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZWxpbmUub24oJ2ZyYW1lJywgdGhpcy51cGRhdGUsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy50YXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWNvbXBvc2VUcmFuc2Zvcm0oKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZS5cclxuICAgICAqIE1vdXNlIGV2ZW50IHVuYmluZGluZ1xyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGRvbSA9IHRoaXMuZG9tRWxlbWVudDtcclxuXHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCAndG91Y2hzdGFydCcsIHRoaXMuX21vdXNlRG93bkhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNobW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNoZW5kJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG5cclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZWRvd24nLCB0aGlzLl9tb3VzZURvd25IYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZXVwJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3doZWVsJywgdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlb3V0JywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aW1lbGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lLm9mZignZnJhbWUnLCB0aGlzLnVwZGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RvcEFsbEFuaW1hdGlvbigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBkaXN0YW5jZVxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXREaXN0YW5jZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZGlzdGFuY2VcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZVxyXG4gICAgICovXHJcbiAgICBzZXREaXN0YW5jZTogZnVuY3Rpb24gKGRpc3RhbmNlKSB7XHJcbiAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHNpemUgb2Ygb3J0aG9ncmFwaGljIHZpZXdpbmcgdm9sdW1lXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldE9ydGhvZ3JhcGhpY1NpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fb3J0aG9TaXplO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBzaXplIG9mIG9ydGhvZ3JhcGhpYyB2aWV3aW5nIHZvbHVtZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemVcclxuICAgICAqL1xyXG4gICAgc2V0T3J0aG9ncmFwaGljU2l6ZTogZnVuY3Rpb24gKHNpemUpIHtcclxuICAgICAgICB0aGlzLl9vcnRob1NpemUgPSBzaXplO1xyXG4gICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYWxwaGEgcm90YXRpb25cclxuICAgICAqIEFscGhhIGFuZ2xlIGZvciB0b3AtZG93biByb3RhdGlvbi4gUG9zaXRpdmUgdG8gcm90YXRlIHRvIHRvcC5cclxuICAgICAqXHJcbiAgICAgKiBXaGljaCBtZWFucyBjYW1lcmEgcm90YXRpb24gYXJvdW5kIHggYXhpcy5cclxuICAgICAqL1xyXG4gICAgZ2V0QWxwaGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGhldGEgLyBNYXRoLlBJICogMTgwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBiZXRhIHJvdGF0aW9uXHJcbiAgICAgKiBCZXRhIGFuZ2xlIGZvciBsZWZ0LXJpZ2h0IHJvdGF0aW9uLiBQb3NpdGl2ZSB0byByb3RhdGUgdG8gcmlnaHQuXHJcbiAgICAgKlxyXG4gICAgICogV2hpY2ggbWVhbnMgY2FtZXJhIHJvdGF0aW9uIGFyb3VuZCB5IGF4aXMuXHJcbiAgICAgKi9cclxuICAgIGdldEJldGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gLXRoaXMuX3BoaSAvIE1hdGguUEkgKiAxODA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGNvbnRyb2wgY2VudGVyXHJcbiAgICAgKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2VudGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NlbnRlci50b0FycmF5KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGFscGhhIHJvdGF0aW9uIGFuZ2xlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYWxwaGFcclxuICAgICAqL1xyXG4gICAgc2V0QWxwaGE6IGZ1bmN0aW9uIChhbHBoYSkge1xyXG4gICAgICAgIGFscGhhID0gTWF0aC5tYXgoTWF0aC5taW4odGhpcy5tYXhBbHBoYSwgYWxwaGEpLCB0aGlzLm1pbkFscGhhKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdGhldGEgPSBhbHBoYSAvIDE4MCAqIE1hdGguUEk7XHJcbiAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBiZXRhIHJvdGF0aW9uIGFuZ2xlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYmV0YVxyXG4gICAgICovXHJcbiAgICBzZXRCZXRhOiBmdW5jdGlvbiAoYmV0YSkge1xyXG4gICAgICAgIGJldGEgPSBNYXRoLm1heChNYXRoLm1pbih0aGlzLm1heEJldGEsIGJldGEpLCB0aGlzLm1pbkJldGEpO1xyXG5cclxuICAgICAgICB0aGlzLl9waGkgPSAtYmV0YSAvIDE4MCAqIE1hdGguUEk7XHJcbiAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBjb250cm9sIGNlbnRlclxyXG4gICAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gY2VudGVyXHJcbiAgICAgKi9cclxuICAgIHNldENlbnRlcjogZnVuY3Rpb24gKGNlbnRlckFycikge1xyXG4gICAgICAgIHRoaXMuX2NlbnRlci5zZXRBcnJheShjZW50ZXJBcnIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRPcHRpb246IGZ1bmN0aW9uIChvcHRzKSB7XHJcbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XHJcblxyXG4gICAgICAgIFsnYXV0b1JvdGF0ZScsICdhdXRvUm90YXRlQWZ0ZXJTdGlsbCcsXHJcbiAgICAgICAgICAgICdhdXRvUm90YXRlRGlyZWN0aW9uJywgJ2F1dG9Sb3RhdGVTcGVlZCcsXHJcbiAgICAgICAgICAgICdkYW1waW5nJyxcclxuICAgICAgICAgICAgJ21pbkRpc3RhbmNlJywgJ21heERpc3RhbmNlJyxcclxuICAgICAgICAgICAgJ21pbk9ydGhvZ3JhcGhpY1NpemUnLCAnbWF4T3J0aG9ncmFwaGljU2l6ZScsICdvcnRob2dyYXBoaWNBc3BlY3QnLFxyXG4gICAgICAgICAgICAnbWluQWxwaGEnLCAnbWF4QWxwaGEnLCAnbWluQmV0YScsICdtYXhCZXRhJyxcclxuICAgICAgICAgICAgJ3JvdGF0ZVNlbnNpdGl2aXR5JywgJ3pvb21TZW5zaXRpdml0eScsICdwYW5TZW5zaXRpdml0eSdcclxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICBpZiAob3B0c1trZXldICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IG9wdHNba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG5cclxuICAgICAgICBpZiAob3B0cy5kaXN0YW5jZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGlzdGFuY2Uob3B0cy5kaXN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRzLm9ydGhvZ3JhcGhpY1NpemUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldE9ydGhvZ3JhcGhpY1NpemUob3B0cy5vcnRob2dyYXBoaWNTaXplKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcHRzLmFscGhhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRBbHBoYShvcHRzLmFscGhhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuYmV0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0QmV0YShvcHRzLmJldGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wdHMuY2VudGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2VudGVyKG9wdHMuY2VudGVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRhcmdldCkge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVUcmFuc2Zvcm0oKTtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXQudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0cy5kaXN0YW5jZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdHMub3J0aG9ncmFwaGljU2l6ZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdHMuYWxwaGFcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLmJldGFcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IG9wdHMuY2VudGVyXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZHVyYXRpb249MTAwMF1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5lYXNpbmc9J2xpbmVhciddXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZG9uZV1cclxuICAgICAqL1xyXG4gICAgYW5pbWF0ZVRvOiBmdW5jdGlvbiAob3B0cykge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgdmFyIG9iaiA9IHt9O1xyXG4gICAgICAgIHZhciB0YXJnZXQgPSB7fTtcclxuICAgICAgICB2YXIgdGltZWxpbmUgPSB0aGlzLnRpbWVsaW5lO1xyXG4gICAgICAgIGlmICghdGltZWxpbmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0cy5kaXN0YW5jZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG9iai5kaXN0YW5jZSA9IHRoaXMuZ2V0RGlzdGFuY2UoKTtcclxuICAgICAgICAgICAgdGFyZ2V0LmRpc3RhbmNlID0gb3B0cy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMub3J0aG9ncmFwaGljU2l6ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG9iai5vcnRob2dyYXBoaWNTaXplID0gdGhpcy5nZXRPcnRob2dyYXBoaWNTaXplKCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5vcnRob2dyYXBoaWNTaXplID0gb3B0cy5vcnRob2dyYXBoaWNTaXplO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0cy5hbHBoYSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG9iai5hbHBoYSA9IHRoaXMuZ2V0QWxwaGEoKTtcclxuICAgICAgICAgICAgdGFyZ2V0LmFscGhhID0gb3B0cy5hbHBoYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuYmV0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG9iai5iZXRhID0gdGhpcy5nZXRCZXRhKCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5iZXRhID0gb3B0cy5iZXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0cy5jZW50ZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvYmouY2VudGVyID0gdGhpcy5nZXRDZW50ZXIoKTtcclxuICAgICAgICAgICAgdGFyZ2V0LmNlbnRlciA9IG9wdHMuY2VudGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEFuaW1hdG9yKFxyXG4gICAgICAgICAgICB0aW1lbGluZS5hbmltYXRlKG9iailcclxuICAgICAgICAgICAgICAgIC53aGVuKG9wdHMuZHVyYXRpb24gfHwgMTAwMCwgdGFyZ2V0KVxyXG4gICAgICAgICAgICAgICAgLmR1cmluZyhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5hbHBoYSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0QWxwaGEob2JqLmFscGhhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5iZXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRCZXRhKG9iai5iZXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5kaXN0YW5jZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0RGlzdGFuY2Uob2JqLmRpc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5vcnRob2dyYXBoaWNTaXplICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRPcnRob2dyYXBoaWNTaXplKG9iai5vcnRob2dyYXBoaWNTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5jZW50ZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldENlbnRlcihvYmouY2VudGVyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5kb25lKG9wdHMuZG9uZSlcclxuICAgICAgICApLnN0YXJ0KG9wdHMuZWFzaW5nIHx8ICdsaW5lYXInKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wIGFsbCBhbmltYXRpb25zXHJcbiAgICAgKi9cclxuICAgIHN0b3BBbGxBbmltYXRpb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2FuaW1hdG9ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9hbmltYXRvcnNbaV0uc3RvcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9hbmltYXRvcnMubGVuZ3RoID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgX2lzQW5pbWF0aW5nOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FuaW1hdG9ycy5sZW5ndGggPiAwO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ2FsbCB1cGRhdGUgZWFjaCBmcmFtZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBkZWx0YVRpbWUgRnJhbWUgdGltZVxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChkZWx0YVRpbWUpIHtcclxuXHJcbiAgICAgICAgZGVsdGFUaW1lID0gZGVsdGFUaW1lIHx8IDE2O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fcm90YXRpbmcpIHtcclxuICAgICAgICAgICAgdmFyIHJhZGlhbiA9ICh0aGlzLmF1dG9Sb3RhdGVEaXJlY3Rpb24gPT09ICdjdycgPyAxIDogLTEpXHJcbiAgICAgICAgICAgICAgICAqIHRoaXMuYXV0b1JvdGF0ZVNwZWVkIC8gMTgwICogTWF0aC5QSTtcclxuICAgICAgICAgICAgdGhpcy5fcGhpIC09IHJhZGlhbiAqIGRlbHRhVGltZSAvIDEwMDA7XHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fcm90YXRlVmVsb2NpdHkubGVuKCkgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLl96b29tU3BlZWQpID4gMC4wMSB8fCB0aGlzLl9wYW5WZWxvY2l0eS5sZW4oKSA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9uZWVkc1VwZGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGaXhlZCBkZWx0YVRpbWVcclxuICAgICAgICB0aGlzLl91cGRhdGVEaXN0YW5jZU9yU2l6ZShNYXRoLm1pbihkZWx0YVRpbWUsIDUwKSk7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlUGFuKE1hdGgubWluKGRlbHRhVGltZSwgNTApKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlUm90YXRlKE1hdGgubWluKGRlbHRhVGltZSwgNTApKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlVHJhbnNmb3JtKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGFyZ2V0LnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ3VwZGF0ZScpO1xyXG5cclxuICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlUm90YXRlOiBmdW5jdGlvbiAoZGVsdGFUaW1lKSB7XHJcbiAgICAgICAgdmFyIHZlbG9jaXR5ID0gdGhpcy5fcm90YXRlVmVsb2NpdHk7XHJcbiAgICAgICAgdGhpcy5fcGhpID0gdmVsb2NpdHkueSAqIGRlbHRhVGltZSAvIDIwICsgdGhpcy5fcGhpO1xyXG4gICAgICAgIHRoaXMuX3RoZXRhID0gdmVsb2NpdHkueCAqIGRlbHRhVGltZSAvIDIwICsgdGhpcy5fdGhldGE7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0QWxwaGEodGhpcy5nZXRBbHBoYSgpKTtcclxuICAgICAgICB0aGlzLnNldEJldGEodGhpcy5nZXRCZXRhKCkpO1xyXG5cclxuICAgICAgICB0aGlzLl92ZWN0b3JEYW1waW5nKHZlbG9jaXR5LCB0aGlzLmRhbXBpbmcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlRGlzdGFuY2VPclNpemU6IGZ1bmN0aW9uIChkZWx0YVRpbWUpIHtcclxuICAgICAgICB0aGlzLl9zZXREaXN0YW5jZSh0aGlzLl9kaXN0YW5jZSArIHRoaXMuX3pvb21TcGVlZCAqIGRlbHRhVGltZSAvIDIwKTtcclxuICAgICAgICBpZiAoISh0aGlzLnRhcmdldCBpbnN0YW5jZW9mIFBlcnNwZWN0aXZlQ2FtZXJhKSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRPcnRob1NpemUodGhpcy5fb3J0aG9TaXplICsgdGhpcy5fem9vbVNwZWVkICogZGVsdGFUaW1lIC8gMjApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fem9vbVNwZWVkICo9IE1hdGgucG93KHRoaXMuZGFtcGluZywgZGVsdGFUaW1lIC8gMTYpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfc2V0RGlzdGFuY2U6IGZ1bmN0aW9uIChkaXN0YW5jZSkge1xyXG4gICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gTWF0aC5tYXgoTWF0aC5taW4oZGlzdGFuY2UsIHRoaXMubWF4RGlzdGFuY2UpLCB0aGlzLm1pbkRpc3RhbmNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldE9ydGhvU2l6ZTogZnVuY3Rpb24gKHNpemUpIHtcclxuICAgICAgICB0aGlzLl9vcnRob1NpemUgPSBNYXRoLm1heChNYXRoLm1pbihzaXplLCB0aGlzLm1heE9ydGhvZ3JhcGhpY1NpemUpLCB0aGlzLm1pbk9ydGhvZ3JhcGhpY1NpemUpO1xyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLnRhcmdldDtcclxuICAgICAgICB2YXIgY2FtZXJhSGVpZ2h0ID0gdGhpcy5fb3J0aG9TaXplO1xyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICB2YXIgY2FtZXJhV2lkdGggPSBjYW1lcmFIZWlnaHQgKiB0aGlzLm9ydGhvZ3JhcGhpY0FzcGVjdDtcclxuICAgICAgICBjYW1lcmEubGVmdCA9IC1jYW1lcmFXaWR0aCAvIDI7XHJcbiAgICAgICAgY2FtZXJhLnJpZ2h0ID0gY2FtZXJhV2lkdGggLyAyO1xyXG4gICAgICAgIGNhbWVyYS50b3AgPSBjYW1lcmFIZWlnaHQgLyAyO1xyXG4gICAgICAgIGNhbWVyYS5ib3R0b20gPSAtY2FtZXJhSGVpZ2h0IC8gMjtcclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZVBhbjogZnVuY3Rpb24gKGRlbHRhVGltZSkge1xyXG4gICAgICAgIHZhciB2ZWxvY2l0eSA9IHRoaXMuX3BhblZlbG9jaXR5O1xyXG4gICAgICAgIHZhciBsZW4gPSB0aGlzLl9kaXN0YW5jZTtcclxuXHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG4gICAgICAgIHZhciB5QXhpcyA9IHRhcmdldC53b3JsZFRyYW5zZm9ybS55O1xyXG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC53b3JsZFRyYW5zZm9ybS54O1xyXG5cclxuICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgdGhpcy5fY2VudGVyXHJcbiAgICAgICAgICAgIC5zY2FsZUFuZEFkZCh4QXhpcywgLXZlbG9jaXR5LnggKiBsZW4gLyAyMDApXHJcbiAgICAgICAgICAgIC5zY2FsZUFuZEFkZCh5QXhpcywgLXZlbG9jaXR5LnkgKiBsZW4gLyAyMDApO1xyXG5cclxuICAgICAgICB0aGlzLl92ZWN0b3JEYW1waW5nKHZlbG9jaXR5LCAwKTtcclxuXHJcbiAgICAgICAgdmVsb2NpdHkueCA9IHZlbG9jaXR5LnkgPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlVHJhbnNmb3JtOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICB2YXIgZGlyID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB2YXIgdGhldGEgPSB0aGlzLl90aGV0YSArIE1hdGguUEkgLyAyO1xyXG4gICAgICAgIHZhciBwaGkgPSB0aGlzLl9waGkgKyBNYXRoLlBJIC8gMjtcclxuICAgICAgICB2YXIgciA9IE1hdGguc2luKHRoZXRhKTtcclxuXHJcbiAgICAgICAgZGlyLnggPSByICogTWF0aC5jb3MocGhpKTtcclxuICAgICAgICBkaXIueSA9IC1NYXRoLmNvcyh0aGV0YSk7XHJcbiAgICAgICAgZGlyLnogPSByICogTWF0aC5zaW4ocGhpKTtcclxuXHJcbiAgICAgICAgY2FtZXJhLnBvc2l0aW9uLmNvcHkodGhpcy5fY2VudGVyKS5zY2FsZUFuZEFkZChkaXIsIHRoaXMuX2Rpc3RhbmNlKTtcclxuICAgICAgICBjYW1lcmEucm90YXRpb24uaWRlbnRpdHkoKVxyXG4gICAgICAgICAgICAvLyBGaXJzdCBhcm91bmQgeSwgdGhlbiBhcm91bmQgeFxyXG4gICAgICAgICAgICAucm90YXRlWSgtdGhpcy5fcGhpKVxyXG4gICAgICAgICAgICAucm90YXRlWCgtdGhpcy5fdGhldGEpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfc3RhcnRDb3VudGluZ1N0aWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3N0aWxsVGltZW91dCk7XHJcblxyXG4gICAgICAgIHZhciB0aW1lID0gdGhpcy5hdXRvUm90YXRlQWZ0ZXJTdGlsbDtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKCFpc05hTih0aW1lKSAmJiB0aW1lID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zdGlsbFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuX3JvdGF0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSwgdGltZSAqIDEwMDApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3ZlY3RvckRhbXBpbmc6IGZ1bmN0aW9uICh2LCBkYW1waW5nKSB7XHJcbiAgICAgICAgdmFyIHNwZWVkID0gdi5sZW4oKTtcclxuICAgICAgICBzcGVlZCA9IHNwZWVkICogZGFtcGluZztcclxuICAgICAgICBpZiAoc3BlZWQgPCAxZS00KSB7XHJcbiAgICAgICAgICAgIHNwZWVkID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdi5ub3JtYWxpemUoKS5zY2FsZShzcGVlZCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlY29tcG9zZVRyYW5zZm9ybTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy50YXJnZXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50YXJnZXQudXBkYXRlV29ybGRUcmFuc2Zvcm0oKTtcclxuXHJcbiAgICAgICAgdmFyIGZvcndhcmQgPSB0aGlzLnRhcmdldC53b3JsZFRyYW5zZm9ybS56O1xyXG4gICAgICAgIHZhciBhbHBoYSA9IE1hdGguYXNpbihmb3J3YXJkLnkpO1xyXG4gICAgICAgIHZhciBiZXRhID0gTWF0aC5hdGFuMihmb3J3YXJkLngsIGZvcndhcmQueik7XHJcblxyXG4gICAgICAgIHRoaXMuX3RoZXRhID0gYWxwaGE7XHJcbiAgICAgICAgdGhpcy5fcGhpID0gLWJldGE7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0QmV0YSh0aGlzLmdldEJldGEoKSk7XHJcbiAgICAgICAgdGhpcy5zZXRBbHBoYSh0aGlzLmdldEFscGhhKCkpO1xyXG5cclxuICAgICAgICB0aGlzLl9zZXREaXN0YW5jZSh0aGlzLnRhcmdldC5wb3NpdGlvbi5kaXN0KHRoaXMuX2NlbnRlcikpO1xyXG4gICAgICAgIGlmICghKHRoaXMudGFyZ2V0IGluc3RhbmNlb2YgUGVyc3BlY3RpdmVDYW1lcmEpKXtcclxuICAgICAgICAgICAgdGhpcy5fc2V0T3J0aG9TaXplKHRoaXMudGFyZ2V0LnRvcCAtIHRoaXMudGFyZ2V0LmJvdHRvbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfbW91c2VEb3duSGFuZGxlcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBbmltYXRpbmcoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHZhciB5ID0gZS5jbGllbnRZO1xyXG4gICAgICAgIC8vIFRvdWNoXHJcbiAgICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlcykge1xyXG4gICAgICAgICAgICB2YXIgdG91Y2ggPSBlLnRhcmdldFRvdWNoZXNbMF07XHJcbiAgICAgICAgICAgIHggPSB0b3VjaC5jbGllbnRYO1xyXG4gICAgICAgICAgICB5ID0gdG91Y2guY2xpZW50WTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX21vZGUgPSAncm90YXRlJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NHZXN0dXJlKGUsICdzdGFydCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGUuYnV0dG9uID09PSBNT1VTRV9CVVRUT05fS0VZX01BUFt0aGlzLnJvdGF0ZU1vdXNlQnV0dG9uXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZSA9ICdyb3RhdGUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGUuYnV0dG9uID09PSBNT1VTRV9CVVRUT05fS0VZX01BUFt0aGlzLnBhbk1vdXNlQnV0dG9uXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZSA9ICdwYW4nO1xyXG5cclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogVmVuZG9ycyBsaWtlIE1vemlsbGEgcHJvdmlkZSBhIG1vdXNlLWRyaXZlbiBwYW5uaW5nIGZlYXR1cmVcclxuICAgICAgICAgICAgICAgICAqIHRoYXQgaXMgYWN0aXZhdGVkIHdoZW4gdGhlIG1pZGRsZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZC5cclxuICAgICAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAgICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby91aWV2ZW50cy8jZXZlbnQtdHlwZS1tb3VzZWRvd25cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkb20gPSB0aGlzLmRvbUVsZW1lbnQ7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9tLCAndG91Y2htb3ZlJywgdGhpcy5fbW91c2VNb3ZlSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9tLCAndG91Y2hlbmQnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XHJcblxyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlbW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNldXAnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2VvdXQnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IHJvdGF0ZSB2ZWxvY2l0eVxyXG4gICAgICAgIHRoaXMuX3JvdGF0ZVZlbG9jaXR5LnNldCgwLCAwKTtcclxuICAgICAgICB0aGlzLl9yb3RhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9Sb3RhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRDb3VudGluZ1N0aWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9tb3VzZVggPSB4O1xyXG4gICAgICAgIHRoaXMuX21vdXNlWSA9IHk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9tb3VzZU1vdmVIYW5kbGVyOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0FuaW1hdGluZygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgdmFyIHkgPSBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIHZhciBoYXZlR2VzdHVyZTtcclxuICAgICAgICAvLyBUb3VjaFxyXG4gICAgICAgIGlmIChlLnRhcmdldFRvdWNoZXMpIHtcclxuICAgICAgICAgICAgdmFyIHRvdWNoID0gZS50YXJnZXRUb3VjaGVzWzBdO1xyXG4gICAgICAgICAgICB4ID0gdG91Y2guY2xpZW50WDtcclxuICAgICAgICAgICAgeSA9IHRvdWNoLmNsaWVudFk7XHJcblxyXG4gICAgICAgICAgICBoYXZlR2VzdHVyZSA9IHRoaXMuX3Byb2Nlc3NHZXN0dXJlKGUsICdjaGFuZ2UnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwYW5TZW5zaXRpdml0eSA9IGNvbnZlcnRUb0FycmF5KHRoaXMucGFuU2Vuc2l0aXZpdHkpO1xyXG4gICAgICAgIHZhciByb3RhdGVTZW5zaXRpdml0eSA9IGNvbnZlcnRUb0FycmF5KHRoaXMucm90YXRlU2Vuc2l0aXZpdHkpO1xyXG5cclxuICAgICAgICBpZiAoIWhhdmVHZXN0dXJlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9tb2RlID09PSAncm90YXRlJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlVmVsb2NpdHkueSArPSAoeCAtIHRoaXMuX21vdXNlWCkgLyB0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGggKiAyICogcm90YXRlU2Vuc2l0aXZpdHlbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yb3RhdGVWZWxvY2l0eS54ICs9ICh5IC0gdGhpcy5fbW91c2VZKSAvIHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQgKiAyICogcm90YXRlU2Vuc2l0aXZpdHlbMV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fbW9kZSA9PT0gJ3BhbicpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BhblZlbG9jaXR5LnggKz0gKHggLSB0aGlzLl9tb3VzZVgpIC8gdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoICogcGFuU2Vuc2l0aXZpdHlbMF0gKiA0MDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wYW5WZWxvY2l0eS55ICs9ICgteSArIHRoaXMuX21vdXNlWSkgLyB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0ICogcGFuU2Vuc2l0aXZpdHlbMV0gKiA0MDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX21vdXNlWCA9IHg7XHJcbiAgICAgICAgdGhpcy5fbW91c2VZID0geTtcclxuXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCAmJiBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9tb3VzZVdoZWVsSGFuZGxlcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBbmltYXRpbmcoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBkZWx0YSA9IGUuZGVsdGFZO1xyXG4gICAgICAgIGlmIChkZWx0YSA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3pvb21IYW5kbGVyKGUsIGRlbHRhID4gMCA/IDEgOiAtMSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9waW5jaEhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzQW5pbWF0aW5nKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl96b29tSGFuZGxlcihlLCBlLnBpbmNoU2NhbGUgPiAxID8gLTAuNCA6IDAuNCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF96b29tSGFuZGxlcjogZnVuY3Rpb24gKGUsIGRlbHRhKSB7XHJcblxyXG4gICAgICAgIHZhciBzcGVlZDtcclxuICAgICAgICBpZiAodGhpcy50YXJnZXQgaW5zdGFuY2VvZiBQZXJzcGVjdGl2ZUNhbWVyYSkge1xyXG4gICAgICAgICAgICBzcGVlZCA9IE1hdGgubWF4KE1hdGgubWF4KE1hdGgubWluKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgLSB0aGlzLm1pbkRpc3RhbmNlLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXhEaXN0YW5jZSAtIHRoaXMuX2Rpc3RhbmNlXHJcbiAgICAgICAgICAgICkpIC8gMjAsIDAuNSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzcGVlZCA9IE1hdGgubWF4KE1hdGgubWF4KE1hdGgubWluKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3J0aG9TaXplIC0gdGhpcy5taW5PcnRob2dyYXBoaWNTaXplLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXhPcnRob2dyYXBoaWNTaXplIC0gdGhpcy5fb3J0aG9TaXplXHJcbiAgICAgICAgICAgICkpIC8gMjAsIDAuNSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl96b29tU3BlZWQgPSAoZGVsdGEgPiAwID8gLTEgOiAxKSAqIHNwZWVkICogdGhpcy56b29tU2Vuc2l0aXZpdHk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JvdGF0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmF1dG9Sb3RhdGUgJiYgdGhpcy5fbW9kZSA9PT0gJ3JvdGF0ZScpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRDb3VudGluZ1N0aWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0ICYmIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgX21vdXNlVXBIYW5kbGVyOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICB2YXIgZG9tID0gdGhpcy5kb21FbGVtZW50O1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNobW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNoZW5kJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlbW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNldXAnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2VvdXQnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb2Nlc3NHZXN0dXJlKGV2ZW50LCAnZW5kJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9hZGRBbmltYXRvcjogZnVuY3Rpb24gKGFuaW1hdG9yKSB7XHJcbiAgICAgICAgdmFyIGFuaW1hdG9ycyA9IHRoaXMuX2FuaW1hdG9ycztcclxuICAgICAgICBhbmltYXRvcnMucHVzaChhbmltYXRvcik7XHJcbiAgICAgICAgYW5pbWF0b3IuZG9uZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBpZHggPSBhbmltYXRvcnMuaW5kZXhPZihhbmltYXRvcik7XHJcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgYW5pbWF0b3JzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFuaW1hdG9yO1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgX3Byb2Nlc3NHZXN0dXJlOiBmdW5jdGlvbiAoZXZlbnQsIHN0YWdlKSB7XHJcbiAgICAgICAgdmFyIGdlc3R1cmVNZ3IgPSB0aGlzLl9nZXN0dXJlTWdyO1xyXG5cclxuICAgICAgICBzdGFnZSA9PT0gJ3N0YXJ0JyAmJiBnZXN0dXJlTWdyLmNsZWFyKCk7XHJcblxyXG4gICAgICAgIHZhciBnZXN0dXJlSW5mbyA9IGdlc3R1cmVNZ3IucmVjb2duaXplKFxyXG4gICAgICAgICAgICBldmVudCxcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgc3RhZ2UgPT09ICdlbmQnICYmIGdlc3R1cmVNZ3IuY2xlYXIoKTtcclxuXHJcbiAgICAgICAgLy8gRG8gbm90IGRvIGFueSBwcmV2ZW50RGVmYXVsdCBoZXJlLiBVcHBlciBhcHBsaWNhdGlvbiBkbyB0aGF0IGlmIG5lY2Vzc2FyeS5cclxuICAgICAgICBpZiAoZ2VzdHVyZUluZm8pIHtcclxuICAgICAgICAgICAgdmFyIHR5cGUgPSBnZXN0dXJlSW5mby50eXBlO1xyXG4gICAgICAgICAgICBldmVudC5nZXN0dXJlRXZlbnQgPSB0eXBlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fcGluY2hIYW5kbGVyKGdlc3R1cmVJbmZvLmV2ZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBnZXN0dXJlSW5mbztcclxuICAgIH1cclxufSk7XHJcblxyXG4vKipcclxuICogSWYgYXV0byByb3RhdGUgdGhlIHRhcmdldFxyXG4gKiBAdHlwZSB7Ym9vbGVhbn1cclxuICogQGRlZmF1bHQgZmFsc2VcclxuICovXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShPcmJpdENvbnRyb2wucHJvdG90eXBlLCAnYXV0b1JvdGF0ZScsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvUm90YXRlO1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xyXG4gICAgICAgIHRoaXMuX2F1dG9Sb3RhdGUgPSB2YWw7XHJcbiAgICAgICAgdGhpcy5fcm90YXRpbmcgPSB2YWw7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE9yYml0Q29udHJvbC5wcm90b3R5cGUsICd0YXJnZXQnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGFyZ2V0O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xyXG4gICAgICAgIGlmICh2YWwgJiYgdmFsLnRhcmdldCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldENlbnRlcih2YWwudGFyZ2V0LnRvQXJyYXkoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3RhcmdldCA9IHZhbDtcclxuICAgICAgICB0aGlzLmRlY29tcG9zZVRyYW5zZm9ybSgpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBPcmJpdENvbnRyb2w7XHJcbiIsIi8qKlxyXG4gKiBTdGF0aWNHZW9tZXRyeSBjYW4gbm90IGJlIGNoYW5nZWQgb25jZSB0aGV5J3ZlIGJlZW4gc2V0dXBcclxuICovXHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuL0dlb21ldHJ5JztcclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlN0YXRpY0dlb21ldHJ5XHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICovXHJcbnZhciBTdGF0aWNHZW9tZXRyeSA9IEdlb21ldHJ5LmV4dGVuZCh7XHJcbiAgICBkeW5hbWljOiBmYWxzZVxyXG59KTtcclxuZXhwb3J0IGRlZmF1bHQgU3RhdGljR2VvbWV0cnk7XHJcbiIsIi8vIFRPRE8gdGVzdFxyXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5pbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcclxuaW1wb3J0IE5vZGUgZnJvbSAnLi4vTm9kZSc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4uL2dsbWF0cml4L21hdDQnO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgY2xheS51dGlsLm1lc2hcclxuICovXHJcbnZhciBtZXNoVXRpbCA9IHtcclxuICAgIC8qKlxyXG4gICAgICogTWVyZ2UgbXVsdGlwbGUgbWVzaGVzIHRvIG9uZS5cclxuICAgICAqIE5vdGUgdGhhdCB0aGVzZSBtZXNoZXMgbXVzdCBoYXZlIHRoZSBzYW1lIG1hdGVyaWFsXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtBcnJheS48Y2xheS5NZXNoPn0gbWVzaGVzXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGFwcGx5V29ybGRUcmFuc2Zvcm1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnV0aWwubWVzaFxyXG4gICAgICovXHJcbiAgICBtZXJnZTogZnVuY3Rpb24gKG1lc2hlcywgYXBwbHlXb3JsZFRyYW5zZm9ybSkge1xyXG5cclxuICAgICAgICBpZiAoISBtZXNoZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ZW1wbGF0ZU1lc2ggPSBtZXNoZXNbMF07XHJcbiAgICAgICAgdmFyIHRlbXBsYXRlR2VvID0gdGVtcGxhdGVNZXNoLmdlb21ldHJ5O1xyXG4gICAgICAgIHZhciBtYXRlcmlhbCA9IHRlbXBsYXRlTWVzaC5tYXRlcmlhbDtcclxuXHJcbiAgICAgICAgdmFyIGdlb21ldHJ5ID0gbmV3IEdlb21ldHJ5KHtcclxuICAgICAgICAgICAgZHluYW1pYzogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgICAgICBnZW9tZXRyeS5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlTmFtZXMgPSB0ZW1wbGF0ZUdlby5nZXRFbmFibGVkQXR0cmlidXRlcygpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZU5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZXNbaV07XHJcbiAgICAgICAgICAgIHZhciBhdHRyID0gdGVtcGxhdGVHZW8uYXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICAgICAgLy8gRXh0ZW5kIGN1c3RvbSBhdHRyaWJ1dGVzXHJcbiAgICAgICAgICAgIGlmICghZ2VvbWV0cnkuYXR0cmlidXRlc1tuYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlc1tuYW1lXSA9IGF0dHIuY2xvbmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCA9IG1hdDQuY3JlYXRlKCk7XHJcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgYXJyYXkgZGF0YSBhbmQgbWVyZ2UgYm91bmRpbmcgYm94XHJcbiAgICAgICAgdmFyIG5WZXJ0ZXggPSAwO1xyXG4gICAgICAgIHZhciBuRmFjZSA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBtZXNoZXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRHZW8gPSBtZXNoZXNba10uZ2VvbWV0cnk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50R2VvLmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50R2VvLmJvdW5kaW5nQm94LmFwcGx5VHJhbnNmb3JtKGFwcGx5V29ybGRUcmFuc2Zvcm0gPyBtZXNoZXNba10ud29ybGRUcmFuc2Zvcm0gOiBtZXNoZXNba10ubG9jYWxUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkuYm91bmRpbmdCb3gudW5pb24oY3VycmVudEdlby5ib3VuZGluZ0JveCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgblZlcnRleCArPSBjdXJyZW50R2VvLnZlcnRleENvdW50O1xyXG4gICAgICAgICAgICBuRmFjZSArPSBjdXJyZW50R2VvLnRyaWFuZ2xlQ291bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgYXR0cmlidXRlTmFtZXMubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lc1tuXTtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYiA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV07XHJcbiAgICAgICAgICAgIGF0dHJpYi5pbml0KG5WZXJ0ZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoblZlcnRleCA+PSAweGZmZmYpIHtcclxuICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlcyA9IG5ldyBVaW50MzJBcnJheShuRmFjZSAqIDMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShuRmFjZSAqIDMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZlcnRleE9mZnNldCA9IDA7XHJcbiAgICAgICAgdmFyIGluZGljZXNPZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciB1c2VJbmRpY2VzID0gdGVtcGxhdGVHZW8uaXNVc2VJbmRpY2VzKCk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIG1tID0gMDsgbW0gPCBtZXNoZXMubGVuZ3RoOyBtbSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXNoID0gbWVzaGVzW21tXTtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRHZW8gPSBtZXNoLmdlb21ldHJ5O1xyXG5cclxuICAgICAgICAgICAgdmFyIG5WZXJ0ZXggPSBjdXJyZW50R2VvLnZlcnRleENvdW50O1xyXG5cclxuICAgICAgICAgICAgdmFyIG1hdHJpeCA9IGFwcGx5V29ybGRUcmFuc2Zvcm0gPyBtZXNoLndvcmxkVHJhbnNmb3JtLmFycmF5IDogbWVzaC5sb2NhbFRyYW5zZm9ybS5hcnJheTtcclxuICAgICAgICAgICAgbWF0NC5pbnZlcnQoaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCwgbWF0cml4KTtcclxuICAgICAgICAgICAgbWF0NC50cmFuc3Bvc2UoaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCwgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBubiA9IDA7IG5uIDwgYXR0cmlidXRlTmFtZXMubGVuZ3RoOyBubisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVzW25uXTtcclxuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50QXR0ciA9IGN1cnJlbnRHZW8uYXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIHZhciB0YXJnZXRBdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIC8vIFNraXAgdGhlIHVudXNlZCBhdHRyaWJ1dGVzO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50QXR0ci52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBsZW4gPSBjdXJyZW50QXR0ci52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IGN1cnJlbnRBdHRyLnNpemU7XHJcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmVydGV4T2Zmc2V0ICogc2l6ZTtcclxuICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IGxlbiAvIHNpemU7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QXR0ci52YWx1ZVtvZmZzZXQgKyBpXSA9IGN1cnJlbnRBdHRyLnZhbHVlW2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHBvc2l0aW9uLCBub3JtYWwgYW5kIHRhbmdlbnRcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAncG9zaXRpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5mb3JFYWNoKHRhcmdldEF0dHIudmFsdWUsIHNpemUsIG9mZnNldCwgY291bnQsIHZlYzMudHJhbnNmb3JtTWF0NCwgbWF0cml4KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT09ICdub3JtYWwnIHx8IG5hbWUgPT09ICd0YW5nZW50Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuZm9yRWFjaCh0YXJnZXRBdHRyLnZhbHVlLCBzaXplLCBvZmZzZXQsIGNvdW50LCB2ZWMzLnRyYW5zZm9ybU1hdDQsIGludmVyc2VUcmFuc3Bvc2VNYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodXNlSW5kaWNlcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxlbiA9IGN1cnJlbnRHZW8uaW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlc1tpICsgaW5kaWNlc09mZnNldF0gPSBjdXJyZW50R2VvLmluZGljZXNbaV0gKyB2ZXJ0ZXhPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzT2Zmc2V0ICs9IGxlbjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVydGV4T2Zmc2V0ICs9IG5WZXJ0ZXg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmV3IE1lc2goe1xyXG4gICAgICAgICAgICBtYXRlcmlhbDogbWF0ZXJpYWwsXHJcbiAgICAgICAgICAgIGdlb21ldHJ5OiBnZW9tZXRyeVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNwbGl0IG1lc2ggaW50byBzdWIgbWVzaGVzLCBlYWNoIG1lc2ggd2lsbCBoYXZlIG1heEpvaW50TnVtYmVyIGpvaW50cy5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5NZXNofSBtZXNoXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4Sm9pbnROdW1iZXJcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5QbGFjZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICpcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnV0aWwubWVzaFxyXG4gICAgICovXHJcblxyXG4gICAgLy8gRklYTUUsIEhhdmUgaXNzdWVzIG9uIHNvbWUgbW9kZWxzXHJcbiAgICBzcGxpdEJ5Sm9pbnRzOiBmdW5jdGlvbiAobWVzaCwgbWF4Sm9pbnROdW1iZXIsIGluUGxhY2UpIHtcclxuICAgICAgICB2YXIgZ2VvbWV0cnkgPSBtZXNoLmdlb21ldHJ5O1xyXG4gICAgICAgIHZhciBza2VsZXRvbiA9IG1lc2guc2tlbGV0b247XHJcbiAgICAgICAgdmFyIG1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbDtcclxuICAgICAgICB2YXIgam9pbnRzID0gbWVzaC5qb2ludHM7XHJcbiAgICAgICAgaWYgKCFnZW9tZXRyeSB8fCAhc2tlbGV0b24gfHwgIWpvaW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoam9pbnRzLmxlbmd0aCA8IG1heEpvaW50TnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtZXNoO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIHZhciBpbmRpY2VzID0gZ2VvbWV0cnkuaW5kaWNlcztcclxuXHJcbiAgICAgICAgdmFyIGZhY2VMZW4gPSBnZW9tZXRyeS50cmlhbmdsZUNvdW50O1xyXG4gICAgICAgIHZhciByZXN0ID0gZmFjZUxlbjtcclxuICAgICAgICB2YXIgaXNGYWNlQWRkZWQgPSBbXTtcclxuICAgICAgICB2YXIgam9pbnRWYWx1ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLmpvaW50LnZhbHVlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmFjZUxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlzRmFjZUFkZGVkW2ldID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBhZGRlZEpvaW50SWR4UGVyRmFjZSA9IFtdO1xyXG5cclxuICAgICAgICB2YXIgYnVja2V0cyA9IFtdO1xyXG5cclxuICAgICAgICB2YXIgZ2V0Sm9pbnRCeUluZGV4ID0gZnVuY3Rpb24gKGlkeCkge1xyXG4gICAgICAgICAgICByZXR1cm4gam9pbnRzW2lkeF07XHJcbiAgICAgICAgfTtcclxuICAgICAgICB3aGlsZSAocmVzdCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIGJ1Y2tldFRyaWFuZ2xlcyA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgYnVja2V0Sm9pbnRSZXZlcnNlTWFwID0gW107XHJcbiAgICAgICAgICAgIHZhciBidWNrZXRKb2ludHMgPSBbXTtcclxuICAgICAgICAgICAgdmFyIHN1YkpvaW50TnVtYmVyID0gMDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBqb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50UmV2ZXJzZU1hcFtpXSA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIGYgPSAwOyBmIDwgZmFjZUxlbjsgZisrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGYWNlQWRkZWRbZl0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBjYW5BZGRUb0J1Y2tldCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgYWRkZWROdW1iZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkeCA9IGluZGljZXNbZiAqIDMgKyBpXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpvaW50SWR4ID0gam9pbnRWYWx1ZXNbaWR4ICogNCArIGpdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpvaW50SWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWNrZXRKb2ludFJldmVyc2VNYXBbam9pbnRJZHhdID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJKb2ludE51bWJlciA8IG1heEpvaW50TnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50UmV2ZXJzZU1hcFtqb2ludElkeF0gPSBzdWJKb2ludE51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0Sm9pbnRzW3N1YkpvaW50TnVtYmVyKytdID0gam9pbnRJZHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkSm9pbnRJZHhQZXJGYWNlW2FkZGVkTnVtYmVyKytdID0gam9pbnRJZHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5BZGRUb0J1Y2tldCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghY2FuQWRkVG9CdWNrZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBSZXZlcnNlIG9wZXJhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWRkZWROdW1iZXI7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRKb2ludFJldmVyc2VNYXBbYWRkZWRKb2ludElkeFBlckZhY2VbaV1dID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50cy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViSm9pbnROdW1iZXItLTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBidWNrZXRUcmlhbmdsZXMucHVzaChpbmRpY2VzLnN1YmFycmF5KGYgKiAzLCAoZiArIDEpICogMykpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpc0ZhY2VBZGRlZFtmXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdC0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJ1Y2tldHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0cmlhbmdsZXM6IGJ1Y2tldFRyaWFuZ2xlcyxcclxuICAgICAgICAgICAgICAgIGpvaW50czogYnVja2V0Sm9pbnRzLm1hcChnZXRKb2ludEJ5SW5kZXgpLFxyXG4gICAgICAgICAgICAgICAgam9pbnRSZXZlcnNlTWFwOiBidWNrZXRKb2ludFJldmVyc2VNYXBcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcm9vdCA9IG5ldyBOb2RlKHtcclxuICAgICAgICAgICAgbmFtZTogbWVzaC5uYW1lXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdmFyIGF0dHJpYk5hbWVzID0gZ2VvbWV0cnkuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcclxuXHJcbiAgICAgICAgYXR0cmliTmFtZXMuc3BsaWNlKGF0dHJpYk5hbWVzLmluZGV4T2YoJ2pvaW50JyksIDEpO1xyXG4gICAgICAgIC8vIE1hcCBmcm9tIG9sZCB2ZXJ0ZXggaW5kZXggdG8gbmV3IHZlcnRleCBpbmRleFxyXG4gICAgICAgIHZhciBuZXdJbmRpY2VzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgYiA9IDA7IGIgPCBidWNrZXRzLmxlbmd0aDsgYisrKSB7XHJcbiAgICAgICAgICAgIHZhciBidWNrZXQgPSBidWNrZXRzW2JdO1xyXG4gICAgICAgICAgICB2YXIgam9pbnRSZXZlcnNlTWFwID0gYnVja2V0LmpvaW50UmV2ZXJzZU1hcDtcclxuICAgICAgICAgICAgdmFyIHN1YkpvaW50TnVtYmVyID0gYnVja2V0LmpvaW50cy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICB2YXIgc3ViR2VvID0gbmV3IEdlb21ldHJ5KCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgc3ViTWVzaCA9IG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFttZXNoLm5hbWUsIGldLmpvaW4oJy0nKSxcclxuICAgICAgICAgICAgICAgIC8vIERPTidUIGNsb25lIG1hdGVyaWFsLlxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnk6IHN1YkdlbyxcclxuICAgICAgICAgICAgICAgIHNrZWxldG9uOiBza2VsZXRvbixcclxuICAgICAgICAgICAgICAgIGpvaW50czogYnVja2V0LmpvaW50cy5zbGljZSgpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgblZlcnRleCA9IDA7XHJcbiAgICAgICAgICAgIHZhciBuVmVydGV4MiA9IGdlb21ldHJ5LnZlcnRleENvdW50O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5WZXJ0ZXgyOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG5ld0luZGljZXNbaV0gPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBDb3VudCBzdWIgZ2VvIG51bWJlclxyXG4gICAgICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGJ1Y2tldC50cmlhbmdsZXMubGVuZ3RoOyBmKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBmYWNlID0gYnVja2V0LnRyaWFuZ2xlc1tmXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkeCA9IGZhY2VbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0luZGljZXNbaWR4XSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5kaWNlc1tpZHhdID0gblZlcnRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgblZlcnRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGF0dHJpYk5hbWVzLmxlbmd0aDsgYSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0cmliTmFtZSA9IGF0dHJpYk5hbWVzW2FdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN1YkF0dHJpYiA9IHN1Ykdlby5hdHRyaWJ1dGVzW2F0dHJpYk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgc3ViQXR0cmliLmluaXQoblZlcnRleCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3ViR2VvLmF0dHJpYnV0ZXMuam9pbnQudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KG5WZXJ0ZXggKiA0KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChuVmVydGV4ID4gMHhmZmZmKSB7XHJcbiAgICAgICAgICAgICAgICBzdWJHZW8uaW5kaWNlcyA9IG5ldyBVaW50MzJBcnJheShidWNrZXQudHJpYW5nbGVzLmxlbmd0aCAqIDMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3ViR2VvLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoYnVja2V0LnRyaWFuZ2xlcy5sZW5ndGggKiAzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGluZGljZXNPZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICBuVmVydGV4ID0gMDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVmVydGV4MjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdJbmRpY2VzW2ldID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGYgPSAwOyBmIDwgYnVja2V0LnRyaWFuZ2xlcy5sZW5ndGg7IGYrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRyaWFuZ2xlID0gYnVja2V0LnRyaWFuZ2xlc1tmXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpZHggPSB0cmlhbmdsZVtpXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0luZGljZXNbaWR4XSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5kaWNlc1tpZHhdID0gblZlcnRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBhdHRyaWJOYW1lcy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYk5hbWUgPSBhdHRyaWJOYW1lc1thXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YkF0dHJpYiA9IHN1Ykdlby5hdHRyaWJ1dGVzW2F0dHJpYk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBhdHRyaWIuc2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNpemU7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YkF0dHJpYi52YWx1ZVtuVmVydGV4ICogc2l6ZSArIGpdID0gYXR0cmliLnZhbHVlW2lkeCAqIHNpemUgKyBqXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDQ7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpvaW50SWR4ID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5qb2ludC52YWx1ZVtpZHggKiA0ICsgal07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gblZlcnRleCAqIDQgKyBqO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpvaW50SWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJHZW8uYXR0cmlidXRlcy5qb2ludC52YWx1ZVtvZmZzZXRdID0gam9pbnRSZXZlcnNlTWFwW2pvaW50SWR4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ykdlby5hdHRyaWJ1dGVzLmpvaW50LnZhbHVlW29mZnNldF0gPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuVmVydGV4Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHN1Ykdlby5pbmRpY2VzW2luZGljZXNPZmZzZXQrK10gPSBuZXdJbmRpY2VzW2lkeF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3ViR2VvLnVwZGF0ZUJvdW5kaW5nQm94KCk7XHJcblxyXG4gICAgICAgICAgICByb290LmFkZChzdWJNZXNoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gbWVzaC5jaGlsZHJlbigpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcm9vdC5hZGQoY2hpbGRyZW5baV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb290LnBvc2l0aW9uLmNvcHkobWVzaC5wb3NpdGlvbik7XHJcbiAgICAgICAgcm9vdC5yb3RhdGlvbi5jb3B5KG1lc2gucm90YXRpb24pO1xyXG4gICAgICAgIHJvb3Quc2NhbGUuY29weShtZXNoLnNjYWxlKTtcclxuXHJcbiAgICAgICAgaWYgKGluUGxhY2UpIHtcclxuICAgICAgICAgICAgaWYgKG1lc2guZ2V0UGFyZW50KCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBtZXNoLmdldFBhcmVudCgpO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50LnJlbW92ZShtZXNoKTtcclxuICAgICAgICAgICAgICAgIHBhcmVudC5hZGQocm9vdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJvb3Q7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBtZXNoVXRpbDtcclxuIiwiaW1wb3J0IHV0aWwgZnJvbSAnLi4vY29yZS91dGlsJztcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5cclxudmFyIE1FVEEgPSB7XHJcbiAgICB2ZXJzaW9uOiAxLjAsXHJcbiAgICB0eXBlOiAnR2VvbWV0cnknLFxyXG4gICAgZ2VuZXJhdG9yOiAndXRpbC50cmFuc2ZlcmFibGUudG9PYmplY3QnXHJcbn07XHJcblxyXG4vKipcclxuICogQGFsaWFzIGNsYXkudXRpbC50cmFuc2ZlcmFibGVcclxuICovXHJcbnZhciB0cmFuc2ZlcmFibGVVdGlsID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGdlb21ldHJ5IHRvIGEgb2JqZWN0IGNvbnRhaW5pbmcgdHJhbnNmZXJhYmxlIGRhdGFcclxuICAgICAqIEBwYXJhbSB7R2VvbWV0cnl9IGdlb21ldHJ5IGdlb21ldHJ5XHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHNoYWxsb3cgd2hldGhlciBzaGFsbG93IGNvcHlcclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHsgZGF0YSA6IGRhdGEsIGJ1ZmZlcnMgOiBidWZmZXJzIH0sIGJ1ZmZlcnMgaXMgdGhlIHRyYW5zZmVyYWJsZSBsaXN0XHJcbiAgICAgKi9cclxuICAgIHRvT2JqZWN0IDogZnVuY3Rpb24gKGdlb21ldHJ5LCBzaGFsbG93KSB7XHJcbiAgICAgICAgaWYgKCFnZW9tZXRyeSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRhdGEgPSB7XHJcbiAgICAgICAgICAgIG1ldGFkYXRhIDogdXRpbC5leHRlbmQoe30sIE1FVEEpXHJcbiAgICAgICAgfTtcclxuICAgICAgICAvL3RyYW5zZmVyYWJsZSBidWZmZXJzXHJcbiAgICAgICAgdmFyIGJ1ZmZlcnMgPSBbXTtcclxuXHJcbiAgICAgICAgLy9keW5hbWljXHJcbiAgICAgICAgZGF0YS5keW5hbWljID0gZ2VvbWV0cnkuZHluYW1pYztcclxuXHJcbiAgICAgICAgLy9ib3VuZGluZyBib3hcclxuICAgICAgICBpZiAoZ2VvbWV0cnkuYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgZGF0YS5ib3VuZGluZ0JveCA9IHtcclxuICAgICAgICAgICAgICAgIG1pbiA6IGdlb21ldHJ5LmJvdW5kaW5nQm94Lm1pbi50b0FycmF5KCksXHJcbiAgICAgICAgICAgICAgICBtYXggOiBnZW9tZXRyeS5ib3VuZGluZ0JveC5tYXgudG9BcnJheSgpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2luZGljZXNcclxuICAgICAgICBpZiAoZ2VvbWV0cnkuaW5kaWNlcyAmJiBnZW9tZXRyeS5pbmRpY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZGF0YS5pbmRpY2VzID0gY29weUlmTmVjZXNzYXJ5KGdlb21ldHJ5LmluZGljZXMsIHNoYWxsb3cpO1xyXG4gICAgICAgICAgICBidWZmZXJzLnB1c2goZGF0YS5pbmRpY2VzLmJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2F0dHJpYnV0ZXNcclxuICAgICAgICBkYXRhLmF0dHJpYnV0ZXMgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIGdlb21ldHJ5LmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgaWYgKGdlb21ldHJ5LmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkocCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlc1twXTtcclxuICAgICAgICAgICAgICAgIC8vaWdub3JlIGVtcHR5IGF0dHJpYnV0ZXNcclxuICAgICAgICAgICAgICAgIGlmIChhdHRyICYmIGF0dHIudmFsdWUgJiYgYXR0ci52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0ciA9IGRhdGEuYXR0cmlidXRlc1twXSA9IGNvcHlBdHRyaWJ1dGUoYXR0ciwgc2hhbGxvdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVycy5wdXNoKGF0dHIudmFsdWUuYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGF0YSA6IGRhdGEsXHJcbiAgICAgICAgICAgIGJ1ZmZlcnMgOiBidWZmZXJzXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXByb2R1Y2UgYSBnZW9tZXRyeSBmcm9tIG9iamVjdCBnZW5lcmF0ZWQgYnkgdG9PYmplY3RcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb2JqZWN0IGdlbmVyYXRlZCBieSB0b09iamVjdFxyXG4gICAgICogQHJldHVybnMge0dlb21ldHJ5fSBnZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICB0b0dlb21ldHJ5IDogZnVuY3Rpb24gKG9iamVjdCkge1xyXG4gICAgICAgIGlmICghb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0LmRhdGEgJiYgb2JqZWN0LmJ1ZmZlcnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zZmVyYWJsZVV0aWwudG9HZW9tZXRyeShvYmplY3QuZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghb2JqZWN0Lm1ldGFkYXRhIHx8IG9iamVjdC5tZXRhZGF0YS5nZW5lcmF0b3IgIT09IE1FVEEuZ2VuZXJhdG9yKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignW3V0aWwudHJhbnNmZXJhYmxlLnRvR2VvbWV0cnldIHRoZSBvYmplY3QgaXMgbm90IGdlbmVyYXRlZCBieSB1dGlsLnRyYW5zZmVyYWJsZS4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vYmFzaWMgb3B0aW9uc1xyXG4gICAgICAgIHZhciBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICBkeW5hbWljIDogb2JqZWN0LmR5bmFtaWMsXHJcbiAgICAgICAgICAgIGluZGljZXMgOiBvYmplY3QuaW5kaWNlc1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChvYmplY3QuYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgdmFyIG1pbiA9IG5ldyBWZWN0b3IzKCkuc2V0QXJyYXkob2JqZWN0LmJvdW5kaW5nQm94Lm1pbik7XHJcbiAgICAgICAgICAgIHZhciBtYXggPSBuZXcgVmVjdG9yMygpLnNldEFycmF5KG9iamVjdC5ib3VuZGluZ0JveC5tYXgpO1xyXG4gICAgICAgICAgICBvcHRpb25zLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KG1pbiwgbWF4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBnZW9tZXRyeSA9IG5ldyBHZW9tZXRyeShvcHRpb25zKTtcclxuXHJcbiAgICAgICAgLy9hdHRyaWJ1dGVzXHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBvYmplY3QuYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICBpZiAob2JqZWN0LmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkocCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyID0gb2JqZWN0LmF0dHJpYnV0ZXNbcF07XHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW3BdID0gbmV3IEdlb21ldHJ5LkF0dHJpYnV0ZShhdHRyLm5hbWUsIGF0dHIudHlwZSwgYXR0ci5zaXplLCBhdHRyLnNlbWFudGljKTtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbcF0udmFsdWUgPSBhdHRyLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZ2VvbWV0cnk7XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiBjb3B5QXR0cmlidXRlKGF0dHIsIHNoYWxsb3cpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmFtZSA6IGF0dHIubmFtZSxcclxuICAgICAgICB0eXBlIDogYXR0ci50eXBlLFxyXG4gICAgICAgIHNpemUgOiBhdHRyLnNpemUsXHJcbiAgICAgICAgc2VtYW50aWMgOiBhdHRyLnNlbWFudGljLFxyXG4gICAgICAgIHZhbHVlIDogY29weUlmTmVjZXNzYXJ5KGF0dHIudmFsdWUsIHNoYWxsb3cpXHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb3B5SWZOZWNlc3NhcnkoYXJyLCBzaGFsbG93KSB7XHJcbiAgICBpZiAoIXNoYWxsb3cpIHtcclxuICAgICAgICByZXR1cm4gbmV3IGFyci5jb25zdHJ1Y3RvcihhcnIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB0cmFuc2ZlcmFibGVVdGlsO1xyXG4iLCIvKipcclxuICogQG5hbWUgY2xheS52ZXJzaW9uXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCAnMS4yLjMnO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS52ci5kaXNvcnRlci5vdXRwdXQudmVydGV4XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQ6IFRFWENPT1JEXzA7XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb246IFBPU0lUSU9OO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2X1RleGNvb3JkID0gdGV4Y29vcmQ7XFxuIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbi54eSwgMC41LCAxLjApO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnZyLmRpc29ydGVyLm91dHB1dC5mcmFnbWVudFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudm9pZCBtYWluKClcXG57XFxuIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG59XFxuQGVuZFwiO1xyXG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xldnIvd2VidnItcG9seWZpbGwvYmxvYi9tYXN0ZXIvc3JjL2NhcmRib2FyZC1kaXN0b3J0ZXIuanNcclxuXHJcbi8vIFVzZSB3ZWJ2ciBtYXkgaGF2ZSBzY2FsZSBwcm9ibGVtLlxyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xldnIvd2VidnItcG9seWZpbGwvaXNzdWVzLzE0MFxyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xldnIvd2VidnItcG9seWZpbGwvc2VhcmNoP3E9U0NBTEUmdHlwZT1Jc3N1ZXMmdXRmOD0lRTIlOUMlOTNcclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZXZyL3dlYnZyLXBvbHlmaWxsL2lzc3Vlcy8xNDdcclxuXHJcblxyXG5pbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuXHJcbmltcG9ydCBvdXRwdXRFc3NsIGZyb20gJy4vb3V0cHV0Lmdsc2wuanMnO1xyXG5cclxuU2hhZGVyLmltcG9ydChvdXRwdXRFc3NsKTtcclxuXHJcbmZ1bmN0aW9uIGxlcnAgKGEsIGIsIHQpIHtcclxuICAgIHJldHVybiBhICogKDEgLSB0KSArIGIgKiB0O1xyXG59XHJcblxyXG52YXIgQ2FyZGJvYXJkRGlzdG9ydGVyID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuXHJcbiAgICAgICAgY2xlYXJDb2xvcjogWzAsIDAsIDAsIDFdLFxyXG5cclxuICAgICAgICBfbWVzaDogbmV3IE1lc2goe1xyXG4gICAgICAgICAgICBnZW9tZXRyeTogbmV3IEdlb21ldHJ5KHtcclxuICAgICAgICAgICAgICAgIGR5bmFtaWM6IHRydWVcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIGN1bGxpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICBtYXRlcmlhbDogbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgIC8vIEZJWE1FIFdoeSBkaXNhYmxlIGRlcHRoTWFzayB3aWxsIGJlIHdyb25nXHJcbiAgICAgICAgICAgICAgICAvLyBkZXB0aE1hc2s6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgZGVwdGhUZXN0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVydGV4OiBTaGFkZXIuc291cmNlKCdjbGF5LnZyLmRpc29ydGVyLm91dHB1dC52ZXJ0ZXgnKSxcclxuICAgICAgICAgICAgICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS52ci5kaXNvcnRlci5vdXRwdXQuZnJhZ21lbnQnKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KSxcclxuICAgICAgICBfZmFrZUNhbWVyYTogbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKClcclxuICAgIH07XHJcbn0sIHtcclxuXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc291cmNlVGV4dHVyZSkge1xyXG4gICAgICAgIHZhciBjbGVhckNvbG9yID0gdGhpcy5jbGVhckNvbG9yO1xyXG4gICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIGdsLmNsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7XHJcbiAgICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XHJcblxyXG4gICAgICAgIGdsLmRpc2FibGUoZ2wuQkxFTkQpO1xyXG5cclxuICAgICAgICB0aGlzLl9tZXNoLm1hdGVyaWFsLnNldCgndGV4dHVyZScsIHNvdXJjZVRleHR1cmUpO1xyXG5cclxuICAgICAgICAvLyBGdWxsIHNpemU/XHJcbiAgICAgICAgcmVuZGVyZXIuc2F2ZVZpZXdwb3J0KCk7XHJcbiAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQoMCwgMCwgcmVuZGVyZXIuZ2V0V2lkdGgoKSwgcmVuZGVyZXIuZ2V0SGVpZ2h0KCkpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoW3RoaXMuX21lc2hdLCB0aGlzLl9mYWtlQ2FtZXJhKTtcclxuICAgICAgICByZW5kZXJlci5yZXN0b3JlVmlld3BvcnQoKTtcclxuICAgICAgICAvLyB0aGlzLl9tZXNoLm1hdGVyaWFsLnNoYWRlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAvLyB0aGlzLl9tZXNoLm1hdGVyaWFsLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgIC8vIHRoaXMuX21lc2gucmVuZGVyKHJlbmRlcmVyLmdsKTtcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlRnJvbVZSRGlzcGxheTogZnVuY3Rpb24gKHZyRGlzcGxheSkge1xyXG5cclxuICAgICAgICAvLyBGSVhNRVxyXG4gICAgICAgIGlmICh2ckRpc3BsYXkuZGV2aWNlSW5mb18pIHtcclxuICAgICAgICAgICAgLy8gSGFyZGNvZGVkIG1lc2ggc2l6ZVxyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVNZXNoKDIwLCAyMCwgdnJEaXNwbGF5LmRldmljZUluZm9fKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignQ2FudCBnZXQgdnJEaXNwbGF5LmRldmljZUluZm9fLCBzZWVtcyBjb2RlIGNoYW5nZWQnKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVNZXNoOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgZGV2aWNlSW5mbykge1xyXG5cclxuICAgICAgICB2YXIgcG9zaXRpb25BdHRyID0gdGhpcy5fbWVzaC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciB0ZXhjb29yZEF0dHIgPSB0aGlzLl9tZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMudGV4Y29vcmQwO1xyXG4gICAgICAgIHBvc2l0aW9uQXR0ci5pbml0KDIgKiB3aWR0aCAqIGhlaWdodCk7XHJcbiAgICAgICAgdGV4Y29vcmRBdHRyLmluaXQoMiAqIHdpZHRoICogaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgdmFyIGxlbnNGcnVzdHVtID0gZGV2aWNlSW5mby5nZXRMZWZ0RXllVmlzaWJsZVRhbkFuZ2xlcygpO1xyXG4gICAgICAgIHZhciBub0xlbnNGcnVzdHVtID0gZGV2aWNlSW5mby5nZXRMZWZ0RXllTm9MZW5zVGFuQW5nbGVzKCk7XHJcbiAgICAgICAgdmFyIHZpZXdwb3J0ID0gZGV2aWNlSW5mby5nZXRMZWZ0RXllVmlzaWJsZVNjcmVlblJlY3Qobm9MZW5zRnJ1c3R1bSk7XHJcbiAgICAgICAgdmFyIHZpZHggPSAwO1xyXG5cclxuICAgICAgICB2YXIgcG9zID0gW107XHJcbiAgICAgICAgdmFyIHV2ID0gW107XHJcblxyXG4gICAgICAgIC8vIFZlcnRpY2VzXHJcbiAgICAgICAgZm9yICh2YXIgZSA9IDA7IGUgPCAyOyBlKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBoZWlnaHQ7IGorKykge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3aWR0aDsgaSsrLCB2aWR4KyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdSA9IGkgLyAod2lkdGggLSAxKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IGogLyAoaGVpZ2h0IC0gMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEdyaWQgcG9pbnRzIHJlZ3VsYXJseSBzcGFjZWQgaW4gU3RyZW9TY3JlZW4sIGFuZCBiYXJyZWwgZGlzdG9ydGVkIGluXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG1lc2guXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSB1O1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IGxlcnAobGVuc0ZydXN0dW1bMF0sIGxlbnNGcnVzdHVtWzJdLCB1KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IGxlcnAobGVuc0ZydXN0dW1bM10sIGxlbnNGcnVzdHVtWzFdLCB2KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgciA9IGRldmljZUluZm8uZGlzdG9ydGlvbi5kaXN0b3J0SW52ZXJzZShkKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IHggKiByIC8gZDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHkgKiByIC8gZDtcclxuICAgICAgICAgICAgICAgICAgICB1ID0gKHAgLSBub0xlbnNGcnVzdHVtWzBdKSAvIChub0xlbnNGcnVzdHVtWzJdIC0gbm9MZW5zRnJ1c3R1bVswXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9IChxIC0gbm9MZW5zRnJ1c3R1bVszXSkgLyAobm9MZW5zRnJ1c3R1bVsxXSAtIG5vTGVuc0ZydXN0dW1bM10pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHUsdiB0byBtZXNoIHNjcmVlbiBjb29yZGluYXRlcy5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgYXNwZWN0ID0gZGV2aWNlSW5mby5kZXZpY2Uud2lkdGhNZXRlcnMgLyBkZXZpY2VJbmZvLmRldmljZS5oZWlnaHRNZXRlcnM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgb3JpZ2luYWwgVW5pdHkgcGx1Z2luIG11bHRpcGxpZWQgVSBieSB0aGUgYXNwZWN0IHJhdGlvXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGRpZG4ndCBtdWx0aXBseSBlaXRoZXIgdmFsdWUgYnkgMiwgYnV0IHRoYXQgc2VlbXMgdG8gZ2V0IGl0XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVhbGx5IGNsb3NlIHRvIGNvcnJlY3QgbG9va2luZyBmb3IgbWUuIEkgaGF0ZSB0aGlzIGtpbmQgb2YgXCJEb24ndFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGtub3cgd2h5IGl0IHdvcmtzXCIgY29kZSB0aG91Z2gsIGFuZCB3b2xkIGxvdmUgYSBtb3JlIGxvZ2ljYWxcclxuICAgICAgICAgICAgICAgICAgICAvLyBleHBsYW5hdGlvbiBvZiB3aGF0IG5lZWRzIHRvIGhhcHBlbiBoZXJlLlxyXG4gICAgICAgICAgICAgICAgICAgIHUgPSAodmlld3BvcnQueCArIHUgKiB2aWV3cG9ydC53aWR0aCAtIDAuNSkgKiAyLjA7IC8vKiBhc3BlY3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9ICh2aWV3cG9ydC55ICsgdiAqIHZpZXdwb3J0LmhlaWdodCAtIDAuNSkgKiAyLjA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHBvc1swXSA9IHU7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zWzFdID0gdjtcclxuICAgICAgICAgICAgICAgICAgICBwb3NbMl0gPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB1dlswXSA9IHMgKiAwLjUgKyBlICogMC41O1xyXG4gICAgICAgICAgICAgICAgICAgIHV2WzFdID0gdDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25BdHRyLnNldCh2aWR4LCBwb3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGNvb3JkQXR0ci5zZXQodmlkeCwgdXYpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgdyA9IGxlbnNGcnVzdHVtWzJdIC0gbGVuc0ZydXN0dW1bMF07XHJcbiAgICAgICAgICAgIGxlbnNGcnVzdHVtWzBdID0gLSh3ICsgbGVuc0ZydXN0dW1bMF0pO1xyXG4gICAgICAgICAgICBsZW5zRnJ1c3R1bVsyXSA9IHcgLSBsZW5zRnJ1c3R1bVsyXTtcclxuICAgICAgICAgICAgdyA9IG5vTGVuc0ZydXN0dW1bMl0gLSBub0xlbnNGcnVzdHVtWzBdO1xyXG4gICAgICAgICAgICBub0xlbnNGcnVzdHVtWzBdID0gLSh3ICsgbm9MZW5zRnJ1c3R1bVswXSk7XHJcbiAgICAgICAgICAgIG5vTGVuc0ZydXN0dW1bMl0gPSB3IC0gbm9MZW5zRnJ1c3R1bVsyXTtcclxuICAgICAgICAgICAgdmlld3BvcnQueCA9IDEgLSAodmlld3BvcnQueCArIHZpZXdwb3J0LndpZHRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEluZGljZXNcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSgyICogKHdpZHRoIC0gMSkgKiAoaGVpZ2h0IC0gMSkgKiA2KTtcclxuICAgICAgICB2YXIgaGFsZndpZHRoID0gd2lkdGggLyAyO1xyXG4gICAgICAgIHZhciBoYWxmaGVpZ2h0ID0gaGVpZ2h0IC8gMjtcclxuICAgICAgICB2YXIgdmlkeCA9IDA7XHJcbiAgICAgICAgdmFyIGlpZHggPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgMjsgZSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaGVpZ2h0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd2lkdGg7IGkrKywgdmlkeCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgaiA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQnVpbGQgYSBxdWFkLiAgTG93ZXIgcmlnaHQgYW5kIHVwcGVyIGxlZnQgcXVhZHJhbnRzIGhhdmUgcXVhZHMgd2l0aFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0cmlhbmdsZSBkaWFnb25hbCBmbGlwcGVkIHRvIGdldCB0aGUgdmlnbmV0dGUgdG8gaW50ZXJwb2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZWN0bHkuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChpIDw9IGhhbGZ3aWR0aCkgPT0gKGogPD0gaGFsZmhlaWdodCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVhZCBkaWFnb25hbCBsb3dlciBsZWZ0IHRvIHVwcGVyIHJpZ2h0LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSB3aWR0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVhZCBkaWFnb25hbCB1cHBlciBsZWZ0IHRvIGxvd2VyIHJpZ2h0LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fbWVzaC5nZW9tZXRyeS5pbmRpY2VzID0gaW5kaWNlcztcclxuXHJcbiAgICAgICAgdGhpcy5fbWVzaC5nZW9tZXRyeS5kaXJ0eSgpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENhcmRib2FyZERpc3RvcnRlcjtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vTm9kZSc7XHJcbmltcG9ydCBDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcclxuXHJcbnZhciB0bXBQcm9qZWN0aW9uTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbnZhciBTdGVyZW9DYW1lcmEgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG5cclxuICAgICAgICBhc3BlY3Q6IDAuNSxcclxuXHJcbiAgICAgICAgX2xlZnRDYW1lcmE6IG5ldyBDYW1lcmEoKSxcclxuXHJcbiAgICAgICAgX3JpZ2h0Q2FtZXJhOiBuZXcgQ2FtZXJhKCksXHJcblxyXG4gICAgICAgIF9leWVMZWZ0OiBuZXcgTWF0cml4NCgpLFxyXG4gICAgICAgIF9leWVSaWdodDogbmV3IE1hdHJpeDQoKSxcclxuXHJcbiAgICAgICAgX2ZyYW1lRGF0YTogbnVsbFxyXG4gICAgfTtcclxufSwge1xyXG5cclxuICAgIHVwZGF0ZUZyb21DYW1lcmE6IGZ1bmN0aW9uIChjYW1lcmEsIGZvY3VzLCB6b29tLCBleWVTZXApIHtcclxuICAgICAgICBpZiAoY2FtZXJhLnRyYW5zZm9ybU5lZWRzVXBkYXRlKCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdOb2RlIHRyYW5zZm9ybSBpcyBub3QgdXBkYXRlZCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9jdXMgPSBmb2N1cyA9PSBudWxsID8gMTAgOiBmb2N1cztcclxuICAgICAgICB6b29tID0gem9vbSA9PSBudWxsID8gMSA6IHpvb207XHJcbiAgICAgICAgZXllU2VwID0gZXllU2VwID09IG51bGwgPyAwLjA2NCA6IGV5ZVNlcDtcclxuXHJcbiAgICAgICAgdmFyIGZvdiA9IGNhbWVyYS5mb3Y7XHJcbiAgICAgICAgdmFyIGFzcGVjdCA9IGNhbWVyYS5hc3BlY3QgKiB0aGlzLmFzcGVjdDtcclxuICAgICAgICB2YXIgbmVhciA9IGNhbWVyYS5uZWFyO1xyXG5cclxuICAgICAgICAvLyBPZmYtYXhpcyBzdGVyZW9zY29waWMgZWZmZWN0IGJhc2VkIG9uXHJcbiAgICAgICAgLy8gaHR0cDovL3BhdWxib3Vya2UubmV0L3N0ZXJlb2dyYXBoaWNzL3N0ZXJlb3JlbmRlci9cclxuXHJcbiAgICAgICAgdG1wUHJvamVjdGlvbk1hdHJpeC5jb3B5KGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICB2YXIgZXllU2VwID0gZXllU2VwIC8gMjtcclxuICAgICAgICB2YXIgZXllU2VwT25Qcm9qZWN0aW9uID0gZXllU2VwICogbmVhciAvIGZvY3VzO1xyXG4gICAgICAgIHZhciB5bWF4ID0gKG5lYXIgKiBNYXRoLnRhbihNYXRoLlBJIC8gMTgwICogZm92ICogMC41ICkgKSAvIHpvb207XHJcbiAgICAgICAgdmFyIHhtaW4sIHhtYXg7XHJcblxyXG4gICAgICAgIC8vIHRyYW5zbGF0ZSB4T2Zmc2V0XHJcbiAgICAgICAgdGhpcy5fZXllTGVmdC5hcnJheVsxMl0gPSAtIGV5ZVNlcDtcclxuICAgICAgICB0aGlzLl9leWVSaWdodC5hcnJheVsxMl0gPSBleWVTZXA7XHJcblxyXG4gICAgICAgIC8vIGZvciBsZWZ0IGV5ZVxyXG4gICAgICAgIHhtaW4gPSAtIHltYXggKiBhc3BlY3QgKyBleWVTZXBPblByb2plY3Rpb247XHJcbiAgICAgICAgeG1heCA9IHltYXggKiBhc3BlY3QgKyBleWVTZXBPblByb2plY3Rpb247XHJcblxyXG4gICAgICAgIHRtcFByb2plY3Rpb25NYXRyaXguYXJyYXlbMF0gPSAyICogbmVhciAvICh4bWF4IC0geG1pbik7XHJcbiAgICAgICAgdG1wUHJvamVjdGlvbk1hdHJpeC5hcnJheVs4XSA9ICh4bWF4ICsgeG1pbiApIC8gKHhtYXggLSB4bWluKTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGVmdENhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmNvcHkodG1wUHJvamVjdGlvbk1hdHJpeCk7XHJcblxyXG4gICAgICAgIC8vIGZvciByaWdodCBleWVcclxuICAgICAgICB4bWluID0gLSB5bWF4ICogYXNwZWN0IC0gZXllU2VwT25Qcm9qZWN0aW9uO1xyXG4gICAgICAgIHhtYXggPSB5bWF4ICogYXNwZWN0IC0gZXllU2VwT25Qcm9qZWN0aW9uO1xyXG5cclxuICAgICAgICB0bXBQcm9qZWN0aW9uTWF0cml4LmFycmF5WzBdID0gMiAqIG5lYXIgLyAoeG1heCAtIHhtaW4pO1xyXG4gICAgICAgIHRtcFByb2plY3Rpb25NYXRyaXguYXJyYXlbOF0gPSAoeG1heCArIHhtaW4gKSAvICh4bWF4IC0geG1pbik7XHJcblxyXG4gICAgICAgIHRoaXMuX3JpZ2h0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXguY29weSh0bXBQcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGVmdENhbWVyYS53b3JsZFRyYW5zZm9ybVxyXG4gICAgICAgICAgICAuY29weShjYW1lcmEud29ybGRUcmFuc2Zvcm0pXHJcbiAgICAgICAgICAgIC5tdWx0aXBseSh0aGlzLl9leWVMZWZ0KTtcclxuXHJcbiAgICAgICAgdGhpcy5fcmlnaHRDYW1lcmEud29ybGRUcmFuc2Zvcm1cclxuICAgICAgICAgICAgLmNvcHkoY2FtZXJhLndvcmxkVHJhbnNmb3JtKVxyXG4gICAgICAgICAgICAubXVsdGlwbHkodGhpcy5fZXllUmlnaHQpO1xyXG5cclxuICAgICAgICB0aGlzLl9sZWZ0Q2FtZXJhLmRlY29tcG9zZVdvcmxkVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgdGhpcy5fbGVmdENhbWVyYS5kZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JpZ2h0Q2FtZXJhLmRlY29tcG9zZVdvcmxkVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgdGhpcy5fcmlnaHRDYW1lcmEuZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVGcm9tVlJEaXNwbGF5OiBmdW5jdGlvbiAodnJEaXNwbGF5LCBwYXJlbnROb2RlKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgVlJGcmFtZURhdGEgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmcmFtZURhdGEgPSB0aGlzLl9mcmFtZURhdGEgfHwgKHRoaXMuX2ZyYW1lRGF0YSA9IG5ldyBWUkZyYW1lRGF0YSgpKTtcclxuICAgICAgICB2ckRpc3BsYXkuZ2V0RnJhbWVEYXRhKGZyYW1lRGF0YSk7XHJcbiAgICAgICAgdmFyIGxlZnRDYW1lcmEgPSB0aGlzLl9sZWZ0Q2FtZXJhO1xyXG4gICAgICAgIHZhciByaWdodENhbWVyYSA9IHRoaXMuX3JpZ2h0Q2FtZXJhO1xyXG5cclxuICAgICAgICBsZWZ0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXguc2V0QXJyYXkoZnJhbWVEYXRhLmxlZnRQcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICBsZWZ0Q2FtZXJhLmRlY29tcG9zZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICAgICAgICBsZWZ0Q2FtZXJhLnZpZXdNYXRyaXguc2V0QXJyYXkoZnJhbWVEYXRhLmxlZnRWaWV3TWF0cml4KTtcclxuICAgICAgICBsZWZ0Q2FtZXJhLnNldFZpZXdNYXRyaXgobGVmdENhbWVyYS52aWV3TWF0cml4KTtcclxuXHJcbiAgICAgICAgcmlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5zZXRBcnJheShmcmFtZURhdGEucmlnaHRQcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICByaWdodENhbWVyYS5kZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgcmlnaHRDYW1lcmEudmlld01hdHJpeC5zZXRBcnJheShmcmFtZURhdGEucmlnaHRWaWV3TWF0cml4KTtcclxuICAgICAgICByaWdodENhbWVyYS5zZXRWaWV3TWF0cml4KHJpZ2h0Q2FtZXJhLnZpZXdNYXRyaXgpO1xyXG5cclxuICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLndvcmxkVHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlLnRyYW5zZm9ybU5lZWRzVXBkYXRlKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTm9kZSB0cmFuc2Zvcm0gaXMgbm90IHVwZGF0ZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZWZ0Q2FtZXJhLndvcmxkVHJhbnNmb3JtLm11bHRpcGx5TGVmdChwYXJlbnROb2RlLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgbGVmdENhbWVyYS5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgICAgICAgICByaWdodENhbWVyYS53b3JsZFRyYW5zZm9ybS5tdWx0aXBseUxlZnQocGFyZW50Tm9kZS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIHJpZ2h0Q2FtZXJhLmRlY29tcG9zZVdvcmxkVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBnZXRMZWZ0Q2FtZXJhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlZnRDYW1lcmE7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFJpZ2h0Q2FtZXJhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JpZ2h0Q2FtZXJhO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFN0ZXJlb0NhbWVyYTtcclxuIiwiLyoqIEBuYW1lc3BhY2UgY2xheSAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5Lm1hdGggKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5hbmltYXRpb24gKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5hc3luYyAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LmNhbWVyYSAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LmNvbXBvc2l0b3IgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5jb3JlICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkuZ2VvbWV0cnkgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5oZWxwZXIgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5saWdodCAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LmxvYWRlciAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LnBhcnRpY2xlICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkucGx1Z2luICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkucHJlUGFzcyAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LnNoYWRlciAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LnRleHR1cmUgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS51dGlsICovXHJcblxyXG5pbXBvcnQgQW5pbWF0b3IkMCBmcm9tICcuL2FuaW1hdGlvbi9BbmltYXRvcic7XHJcbmltcG9ydCBCbGVuZDFEQ2xpcCQxIGZyb20gJy4vYW5pbWF0aW9uL0JsZW5kMURDbGlwJztcclxuaW1wb3J0IEJsZW5kMkRDbGlwJDIgZnJvbSAnLi9hbmltYXRpb24vQmxlbmQyRENsaXAnO1xyXG5pbXBvcnQgQ2xpcCQzIGZyb20gJy4vYW5pbWF0aW9uL0NsaXAnO1xyXG5pbXBvcnQgZWFzaW5nJDQgZnJvbSAnLi9hbmltYXRpb24vZWFzaW5nJztcclxuaW1wb3J0IFNhbXBsZXJUcmFjayQ1IGZyb20gJy4vYW5pbWF0aW9uL1NhbXBsZXJUcmFjayc7XHJcbmltcG9ydCBUaW1lbGluZSQ2IGZyb20gJy4vYW5pbWF0aW9uL1RpbWVsaW5lJztcclxuaW1wb3J0IFRyYWNrQ2xpcCQ3IGZyb20gJy4vYW5pbWF0aW9uL1RyYWNrQ2xpcCc7XHJcbmltcG9ydCBhcHBsaWNhdGlvbiQ4IGZyb20gJy4vYXBwbGljYXRpb24nO1xyXG5pbXBvcnQgVGFzayQ5IGZyb20gJy4vYXN5bmMvVGFzayc7XHJcbmltcG9ydCBUYXNrR3JvdXAkMTAgZnJvbSAnLi9hc3luYy9UYXNrR3JvdXAnO1xyXG5pbXBvcnQgQ2FtZXJhJDExIGZyb20gJy4vQ2FtZXJhJztcclxuaW1wb3J0IE9ydGhvZ3JhcGhpYyQxMiBmcm9tICcuL2NhbWVyYS9PcnRob2dyYXBoaWMnO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmUkMTMgZnJvbSAnLi9jYW1lcmEvUGVyc3BlY3RpdmUnO1xyXG5pbXBvcnQgQ29tcG9zaXRvciQxNCBmcm9tICcuL2NvbXBvc2l0b3IvQ29tcG9zaXRvcic7XHJcbmltcG9ydCBDb21wb3NpdG9yTm9kZSQxNSBmcm9tICcuL2NvbXBvc2l0b3IvQ29tcG9zaXRvck5vZGUnO1xyXG5pbXBvcnQgY3JlYXRlQ29tcG9zaXRvciQxNiBmcm9tICcuL2NvbXBvc2l0b3IvY3JlYXRlQ29tcG9zaXRvcic7XHJcbmltcG9ydCBGaWx0ZXJOb2RlJDE3IGZyb20gJy4vY29tcG9zaXRvci9GaWx0ZXJOb2RlJztcclxuaW1wb3J0IEdyYXBoJDE4IGZyb20gJy4vY29tcG9zaXRvci9HcmFwaCc7XHJcbmltcG9ydCBQYXNzJDE5IGZyb20gJy4vY29tcG9zaXRvci9QYXNzJztcclxuaW1wb3J0IFNjZW5lTm9kZSQyMCBmcm9tICcuL2NvbXBvc2l0b3IvU2NlbmVOb2RlJztcclxuaW1wb3J0IFRleHR1cmVOb2RlJDIxIGZyb20gJy4vY29tcG9zaXRvci9UZXh0dXJlTm9kZSc7XHJcbmltcG9ydCBUZXh0dXJlUG9vbCQyMiBmcm9tICcuL2NvbXBvc2l0b3IvVGV4dHVyZVBvb2wnO1xyXG5pbXBvcnQgQmFzZSQyMyBmcm9tICcuL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBDYWNoZSQyNCBmcm9tICcuL2NvcmUvQ2FjaGUnO1xyXG5pbXBvcnQgY29sb3IkMjUgZnJvbSAnLi9jb3JlL2NvbG9yJztcclxuaW1wb3J0IGdsZW51bSQyNiBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IEdMSW5mbyQyNyBmcm9tICcuL2NvcmUvR0xJbmZvJztcclxuaW1wb3J0IExpbmtlZExpc3QkMjggZnJvbSAnLi9jb3JlL0xpbmtlZExpc3QnO1xyXG5pbXBvcnQgTFJVJDI5IGZyb20gJy4vY29yZS9MUlUnO1xyXG5pbXBvcnQgZXh0ZW5kJDMwIGZyb20gJy4vY29yZS9taXhpbi9leHRlbmQnO1xyXG5pbXBvcnQgbm90aWZpZXIkMzEgZnJvbSAnLi9jb3JlL21peGluL25vdGlmaWVyJztcclxuaW1wb3J0IHJlcXVlc3QkMzIgZnJvbSAnLi9jb3JlL3JlcXVlc3QnO1xyXG5pbXBvcnQgdXRpbCQzMyBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCB2ZW5kb3IkMzQgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCBjcmVhdGVDb21wb3NpdG9yJDM1IGZyb20gJy4vY3JlYXRlQ29tcG9zaXRvcic7XHJcbmltcG9ydCBHQnVmZmVyJDM2IGZyb20gJy4vZGVmZXJyZWQvR0J1ZmZlcic7XHJcbmltcG9ydCBSZW5kZXJlciQzNyBmcm9tICcuL2RlZmVycmVkL1JlbmRlcmVyJztcclxuaW1wb3J0IGdsbWF0cml4JDM4IGZyb20gJy4vZGVwL2dsbWF0cml4JztcclxuaW1wb3J0IEZyYW1lQnVmZmVyJDM5IGZyb20gJy4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgR2VvbWV0cnkkNDAgZnJvbSAnLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBDb25lJDQxIGZyb20gJy4vZ2VvbWV0cnkvQ29uZSc7XHJcbmltcG9ydCBDdWJlJDQyIGZyb20gJy4vZ2VvbWV0cnkvQ3ViZSc7XHJcbmltcG9ydCBDeWxpbmRlciQ0MyBmcm9tICcuL2dlb21ldHJ5L0N5bGluZGVyJztcclxuaW1wb3J0IFBhcmFtZXRyaWNTdXJmYWNlJDQ0IGZyb20gJy4vZ2VvbWV0cnkvUGFyYW1ldHJpY1N1cmZhY2UnO1xyXG5pbXBvcnQgUGxhbmUkNDUgZnJvbSAnLi9nZW9tZXRyeS9QbGFuZSc7XHJcbmltcG9ydCBTcGhlcmUkNDYgZnJvbSAnLi9nZW9tZXRyeS9TcGhlcmUnO1xyXG5pbXBvcnQgR2VvbWV0cnlCYXNlJDQ3IGZyb20gJy4vR2VvbWV0cnlCYXNlJztcclxuaW1wb3J0IEpvaW50JDQ4IGZyb20gJy4vSm9pbnQnO1xyXG5pbXBvcnQgTGlnaHQkNDkgZnJvbSAnLi9MaWdodCc7XHJcbmltcG9ydCBBbWJpZW50JDUwIGZyb20gJy4vbGlnaHQvQW1iaWVudCc7XHJcbmltcG9ydCBBbWJpZW50Q3ViZW1hcCQ1MSBmcm9tICcuL2xpZ2h0L0FtYmllbnRDdWJlbWFwJztcclxuaW1wb3J0IEFtYmllbnRTSCQ1MiBmcm9tICcuL2xpZ2h0L0FtYmllbnRTSCc7XHJcbmltcG9ydCBEaXJlY3Rpb25hbCQ1MyBmcm9tICcuL2xpZ2h0L0RpcmVjdGlvbmFsJztcclxuaW1wb3J0IFBvaW50JDU0IGZyb20gJy4vbGlnaHQvUG9pbnQnO1xyXG5pbXBvcnQgU3BoZXJlJDU1IGZyb20gJy4vbGlnaHQvU3BoZXJlJztcclxuaW1wb3J0IFNwb3QkNTYgZnJvbSAnLi9saWdodC9TcG90JztcclxuaW1wb3J0IFR1YmUkNTcgZnJvbSAnLi9saWdodC9UdWJlJztcclxuaW1wb3J0IEZYJDU4IGZyb20gJy4vbG9hZGVyL0ZYJztcclxuaW1wb3J0IEdMVEYkNTkgZnJvbSAnLi9sb2FkZXIvR0xURic7XHJcbmltcG9ydCBNYXRlcmlhbCQ2MCBmcm9tICcuL01hdGVyaWFsJztcclxuaW1wb3J0IEJvdW5kaW5nQm94JDYxIGZyb20gJy4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCBGcnVzdHVtJDYyIGZyb20gJy4vbWF0aC9GcnVzdHVtJztcclxuaW1wb3J0IE1hdHJpeDIkNjMgZnJvbSAnLi9tYXRoL01hdHJpeDInO1xyXG5pbXBvcnQgTWF0cml4MmQkNjQgZnJvbSAnLi9tYXRoL01hdHJpeDJkJztcclxuaW1wb3J0IE1hdHJpeDMkNjUgZnJvbSAnLi9tYXRoL01hdHJpeDMnO1xyXG5pbXBvcnQgTWF0cml4NCQ2NiBmcm9tICcuL21hdGgvTWF0cml4NCc7XHJcbmltcG9ydCBQbGFuZSQ2NyBmcm9tICcuL21hdGgvUGxhbmUnO1xyXG5pbXBvcnQgUXVhdGVybmlvbiQ2OCBmcm9tICcuL21hdGgvUXVhdGVybmlvbic7XHJcbmltcG9ydCBSYXkkNjkgZnJvbSAnLi9tYXRoL1JheSc7XHJcbmltcG9ydCB1dGlsJDcwIGZyb20gJy4vbWF0aC91dGlsJztcclxuaW1wb3J0IFZhbHVlJDcxIGZyb20gJy4vbWF0aC9WYWx1ZSc7XHJcbmltcG9ydCBWZWN0b3IyJDcyIGZyb20gJy4vbWF0aC9WZWN0b3IyJztcclxuaW1wb3J0IFZlY3RvcjMkNzMgZnJvbSAnLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgVmVjdG9yNCQ3NCBmcm9tICcuL21hdGgvVmVjdG9yNCc7XHJcbmltcG9ydCBNZXNoJDc1IGZyb20gJy4vTWVzaCc7XHJcbmltcG9ydCBOb2RlJDc2IGZyb20gJy4vTm9kZSc7XHJcbmltcG9ydCBFbWl0dGVyJDc3IGZyb20gJy4vcGFydGljbGUvRW1pdHRlcic7XHJcbmltcG9ydCBGaWVsZCQ3OCBmcm9tICcuL3BhcnRpY2xlL0ZpZWxkJztcclxuaW1wb3J0IEZvcmNlRmllbGQkNzkgZnJvbSAnLi9wYXJ0aWNsZS9Gb3JjZUZpZWxkJztcclxuaW1wb3J0IFBhcnRpY2xlJDgwIGZyb20gJy4vcGFydGljbGUvUGFydGljbGUnO1xyXG5pbXBvcnQgUGFydGljbGVSZW5kZXJhYmxlJDgxIGZyb20gJy4vcGFydGljbGUvUGFydGljbGVSZW5kZXJhYmxlJztcclxuaW1wb3J0IFBpeGVsUGlja2luZyQ4MiBmcm9tICcuL3BpY2tpbmcvUGl4ZWxQaWNraW5nJztcclxuaW1wb3J0IFJheVBpY2tpbmckODMgZnJvbSAnLi9waWNraW5nL1JheVBpY2tpbmcnO1xyXG5pbXBvcnQgRnJlZUNvbnRyb2wkODQgZnJvbSAnLi9wbHVnaW4vRnJlZUNvbnRyb2wnO1xyXG5pbXBvcnQgR2FtZXBhZENvbnRyb2wkODUgZnJvbSAnLi9wbHVnaW4vR2FtZXBhZENvbnRyb2wnO1xyXG5pbXBvcnQgR2VzdHVyZU1nciQ4NiBmcm9tICcuL3BsdWdpbi9HZXN0dXJlTWdyJztcclxuaW1wb3J0IEluZmluaXRlUGxhbmUkODcgZnJvbSAnLi9wbHVnaW4vSW5maW5pdGVQbGFuZSc7XHJcbmltcG9ydCBPcmJpdENvbnRyb2wkODggZnJvbSAnLi9wbHVnaW4vT3JiaXRDb250cm9sJztcclxuaW1wb3J0IFNreWJveCQ4OSBmcm9tICcuL3BsdWdpbi9Ta3lib3gnO1xyXG5pbXBvcnQgU2t5ZG9tZSQ5MCBmcm9tICcuL3BsdWdpbi9Ta3lkb21lJztcclxuaW1wb3J0IEVudmlyb25tZW50TWFwJDkxIGZyb20gJy4vcHJlUGFzcy9FbnZpcm9ubWVudE1hcCc7XHJcbmltcG9ydCBTaGFkb3dNYXAkOTIgZnJvbSAnLi9wcmVQYXNzL1NoYWRvd01hcCc7XHJcbmltcG9ydCBSZW5kZXJhYmxlJDkzIGZyb20gJy4vUmVuZGVyYWJsZSc7XHJcbmltcG9ydCBSZW5kZXJlciQ5NCBmcm9tICcuL1JlbmRlcmVyJztcclxuaW1wb3J0IFNjZW5lJDk1IGZyb20gJy4vU2NlbmUnO1xyXG5pbXBvcnQgU2hhZGVyJDk2IGZyb20gJy4vU2hhZGVyJztcclxuaW1wb3J0IGxpYnJhcnkkOTcgZnJvbSAnLi9zaGFkZXIvbGlicmFyeSc7XHJcbmltcG9ydCByZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yJDk4IGZyb20gJy4vc2hhZGVyL3JlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3InO1xyXG5pbXBvcnQgbGlnaHQkOTkgZnJvbSAnLi9zaGFkZXIvc291cmNlL2hlYWRlci9saWdodCc7XHJcbmltcG9ydCBTa2VsZXRvbiQxMDAgZnJvbSAnLi9Ta2VsZXRvbic7XHJcbmltcG9ydCBTdGFuZGFyZE1hdGVyaWFsJDEwMSBmcm9tICcuL1N0YW5kYXJkTWF0ZXJpYWwnO1xyXG5pbXBvcnQgU3RhdGljR2VvbWV0cnkkMTAyIGZyb20gJy4vU3RhdGljR2VvbWV0cnknO1xyXG5pbXBvcnQgVGV4dHVyZSQxMDMgZnJvbSAnLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmUyRCQxMDQgZnJvbSAnLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUkMTA1IGZyb20gJy4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgVGltZWxpbmUkMTA2IGZyb20gJy4vVGltZWxpbmUnO1xyXG5pbXBvcnQgY3ViZW1hcCQxMDcgZnJvbSAnLi91dGlsL2N1YmVtYXAnO1xyXG5pbXBvcnQgZGRzJDEwOCBmcm9tICcuL3V0aWwvZGRzJztcclxuaW1wb3J0IGRlbGF1bmF5JDEwOSBmcm9tICcuL3V0aWwvZGVsYXVuYXknO1xyXG5pbXBvcnQgaGRyJDExMCBmcm9tICcuL3V0aWwvaGRyJztcclxuaW1wb3J0IG1lc2gkMTExIGZyb20gJy4vdXRpbC9tZXNoJztcclxuaW1wb3J0IHNoJDExMiBmcm9tICcuL3V0aWwvc2gnO1xyXG5pbXBvcnQgdGV4dHVyZSQxMTMgZnJvbSAnLi91dGlsL3RleHR1cmUnO1xyXG5pbXBvcnQgdHJhbnNmZXJhYmxlJDExNCBmcm9tICcuL3V0aWwvdHJhbnNmZXJhYmxlJztcclxuaW1wb3J0IHZlcnNpb24kMTE1IGZyb20gJy4vdmVyc2lvbic7XHJcbmltcG9ydCBDYXJkYm9hcmREaXN0b3J0ZXIkMTE2IGZyb20gJy4vdnIvQ2FyZGJvYXJkRGlzdG9ydGVyJztcclxuaW1wb3J0IFN0ZXJlb0NhbWVyYSQxMTcgZnJvbSAnLi92ci9TdGVyZW9DYW1lcmEnO1xyXG5cclxuXHJcbnZhciBhbmltYXRpb24gPSB7XHJcbiAgICBBbmltYXRvciA6IEFuaW1hdG9yJDAsXHJcbiAgICBCbGVuZDFEQ2xpcCA6IEJsZW5kMURDbGlwJDEsXHJcbiAgICBCbGVuZDJEQ2xpcCA6IEJsZW5kMkRDbGlwJDIsXHJcbiAgICBDbGlwIDogQ2xpcCQzLFxyXG4gICAgZWFzaW5nIDogZWFzaW5nJDQsXHJcbiAgICBTYW1wbGVyVHJhY2sgOiBTYW1wbGVyVHJhY2skNSxcclxuICAgIFRpbWVsaW5lIDogVGltZWxpbmUkNixcclxuICAgIFRyYWNrQ2xpcCA6IFRyYWNrQ2xpcCQ3XHJcbn07XHJcbmV4cG9ydCB7IGFuaW1hdGlvbiB9O1xyXG5cclxuZXhwb3J0IHsgYXBwbGljYXRpb24kOCBhcyBhcHBsaWNhdGlvbiB9O1xyXG5cclxudmFyIGFzeW5jID0ge1xyXG4gICAgVGFzayA6IFRhc2skOSxcclxuICAgIFRhc2tHcm91cCA6IFRhc2tHcm91cCQxMFxyXG59O1xyXG5leHBvcnQgeyBhc3luYyB9O1xyXG5cclxuZXhwb3J0IHsgQ2FtZXJhJDExIGFzIENhbWVyYSB9O1xyXG5cclxudmFyIGNhbWVyYSA9IHtcclxuICAgIE9ydGhvZ3JhcGhpYyA6IE9ydGhvZ3JhcGhpYyQxMixcclxuICAgIFBlcnNwZWN0aXZlIDogUGVyc3BlY3RpdmUkMTNcclxufTtcclxuZXhwb3J0IHsgY2FtZXJhIH07XHJcblxyXG5cclxudmFyIGNvbXBvc2l0b3IgPSB7XHJcbiAgICBDb21wb3NpdG9yIDogQ29tcG9zaXRvciQxNCxcclxuICAgIENvbXBvc2l0b3JOb2RlIDogQ29tcG9zaXRvck5vZGUkMTUsXHJcbiAgICBjcmVhdGVDb21wb3NpdG9yIDogY3JlYXRlQ29tcG9zaXRvciQxNixcclxuICAgIEZpbHRlck5vZGUgOiBGaWx0ZXJOb2RlJDE3LFxyXG4gICAgR3JhcGggOiBHcmFwaCQxOCxcclxuICAgIFBhc3MgOiBQYXNzJDE5LFxyXG4gICAgU2NlbmVOb2RlIDogU2NlbmVOb2RlJDIwLFxyXG4gICAgVGV4dHVyZU5vZGUgOiBUZXh0dXJlTm9kZSQyMSxcclxuICAgIFRleHR1cmVQb29sIDogVGV4dHVyZVBvb2wkMjJcclxufTtcclxuZXhwb3J0IHsgY29tcG9zaXRvciB9O1xyXG5cclxuXHJcbnZhciBjb3JlID0ge1xyXG4gICAgQmFzZSA6IEJhc2UkMjMsXHJcbiAgICBDYWNoZSA6IENhY2hlJDI0LFxyXG4gICAgY29sb3IgOiBjb2xvciQyNSxcclxuICAgIGdsZW51bSA6IGdsZW51bSQyNixcclxuICAgIEdMSW5mbyA6IEdMSW5mbyQyNyxcclxuICAgIExpbmtlZExpc3QgOiBMaW5rZWRMaXN0JDI4LFxyXG4gICAgTFJVIDogTFJVJDI5LFxyXG4gICAgbWl4aW4gOiB7XHJcbiAgICAgICAgZXh0ZW5kIDogZXh0ZW5kJDMwLFxyXG4gICAgICAgIG5vdGlmaWVyIDogbm90aWZpZXIkMzFcclxuICAgIH0sXHJcbiAgICByZXF1ZXN0IDogcmVxdWVzdCQzMixcclxuICAgIHV0aWwgOiB1dGlsJDMzLFxyXG4gICAgdmVuZG9yIDogdmVuZG9yJDM0XHJcbn07XHJcbmV4cG9ydCB7IGNvcmUgfTtcclxuXHJcbmV4cG9ydCB7IGNyZWF0ZUNvbXBvc2l0b3IkMzUgYXMgY3JlYXRlQ29tcG9zaXRvciB9O1xyXG5cclxudmFyIGRlZmVycmVkID0ge1xyXG4gICAgR0J1ZmZlciA6IEdCdWZmZXIkMzYsXHJcbiAgICBSZW5kZXJlciA6IFJlbmRlcmVyJDM3XHJcbn07XHJcbmV4cG9ydCB7IGRlZmVycmVkIH07XHJcblxyXG5cclxudmFyIGRlcCA9IHtcclxuICAgIGdsbWF0cml4IDogZ2xtYXRyaXgkMzhcclxufTtcclxuZXhwb3J0IHsgZGVwIH07XHJcblxyXG5leHBvcnQgeyBGcmFtZUJ1ZmZlciQzOSBhcyBGcmFtZUJ1ZmZlciB9O1xyXG5leHBvcnQgeyBHZW9tZXRyeSQ0MCBhcyBHZW9tZXRyeSB9O1xyXG5cclxudmFyIGdlb21ldHJ5ID0ge1xyXG4gICAgQ29uZSA6IENvbmUkNDEsXHJcbiAgICBDdWJlIDogQ3ViZSQ0MixcclxuICAgIEN5bGluZGVyIDogQ3lsaW5kZXIkNDMsXHJcbiAgICBQYXJhbWV0cmljU3VyZmFjZSA6IFBhcmFtZXRyaWNTdXJmYWNlJDQ0LFxyXG4gICAgUGxhbmUgOiBQbGFuZSQ0NSxcclxuICAgIFNwaGVyZSA6IFNwaGVyZSQ0NlxyXG59O1xyXG5leHBvcnQgeyBnZW9tZXRyeSB9O1xyXG5cclxuZXhwb3J0IHsgR2VvbWV0cnlCYXNlJDQ3IGFzIEdlb21ldHJ5QmFzZSB9O1xyXG5leHBvcnQgeyBKb2ludCQ0OCBhcyBKb2ludCB9O1xyXG5leHBvcnQgeyBMaWdodCQ0OSBhcyBMaWdodCB9O1xyXG5cclxudmFyIGxpZ2h0ID0ge1xyXG4gICAgQW1iaWVudCA6IEFtYmllbnQkNTAsXHJcbiAgICBBbWJpZW50Q3ViZW1hcCA6IEFtYmllbnRDdWJlbWFwJDUxLFxyXG4gICAgQW1iaWVudFNIIDogQW1iaWVudFNIJDUyLFxyXG4gICAgRGlyZWN0aW9uYWwgOiBEaXJlY3Rpb25hbCQ1MyxcclxuICAgIFBvaW50IDogUG9pbnQkNTQsXHJcbiAgICBTcGhlcmUgOiBTcGhlcmUkNTUsXHJcbiAgICBTcG90IDogU3BvdCQ1NixcclxuICAgIFR1YmUgOiBUdWJlJDU3XHJcbn07XHJcbmV4cG9ydCB7IGxpZ2h0IH07XHJcblxyXG5cclxudmFyIGxvYWRlciA9IHtcclxuICAgIEZYIDogRlgkNTgsXHJcbiAgICBHTFRGIDogR0xURiQ1OVxyXG59O1xyXG5leHBvcnQgeyBsb2FkZXIgfTtcclxuXHJcbmV4cG9ydCB7IE1hdGVyaWFsJDYwIGFzIE1hdGVyaWFsIH07XHJcblxyXG52YXIgbWF0aCA9IHtcclxuICAgIEJvdW5kaW5nQm94IDogQm91bmRpbmdCb3gkNjEsXHJcbiAgICBGcnVzdHVtIDogRnJ1c3R1bSQ2MixcclxuICAgIE1hdHJpeDIgOiBNYXRyaXgyJDYzLFxyXG4gICAgTWF0cml4MmQgOiBNYXRyaXgyZCQ2NCxcclxuICAgIE1hdHJpeDMgOiBNYXRyaXgzJDY1LFxyXG4gICAgTWF0cml4NCA6IE1hdHJpeDQkNjYsXHJcbiAgICBQbGFuZSA6IFBsYW5lJDY3LFxyXG4gICAgUXVhdGVybmlvbiA6IFF1YXRlcm5pb24kNjgsXHJcbiAgICBSYXkgOiBSYXkkNjksXHJcbiAgICB1dGlsIDogdXRpbCQ3MCxcclxuICAgIFZhbHVlIDogVmFsdWUkNzEsXHJcbiAgICBWZWN0b3IyIDogVmVjdG9yMiQ3MixcclxuICAgIFZlY3RvcjMgOiBWZWN0b3IzJDczLFxyXG4gICAgVmVjdG9yNCA6IFZlY3RvcjQkNzRcclxufTtcclxuZXhwb3J0IHsgbWF0aCB9O1xyXG5leHBvcnQgeyBCb3VuZGluZ0JveCQ2MSBhcyBCb3VuZGluZ0JveCB9O1xyXG5leHBvcnQgeyBGcnVzdHVtJDYyIGFzIEZydXN0dW0gfTtcclxuZXhwb3J0IHsgTWF0cml4MiQ2MyBhcyBNYXRyaXgyIH07XHJcbmV4cG9ydCB7IE1hdHJpeDJkJDY0IGFzIE1hdHJpeDJkIH07XHJcbmV4cG9ydCB7IE1hdHJpeDMkNjUgYXMgTWF0cml4MyB9O1xyXG5leHBvcnQgeyBNYXRyaXg0JDY2IGFzIE1hdHJpeDQgfTtcclxuZXhwb3J0IHsgUGxhbmUkNjcgYXMgUGxhbmUgfTtcclxuZXhwb3J0IHsgUXVhdGVybmlvbiQ2OCBhcyBRdWF0ZXJuaW9uIH07XHJcbmV4cG9ydCB7IFJheSQ2OSBhcyBSYXkgfTtcclxuZXhwb3J0IHsgVmFsdWUkNzEgYXMgVmFsdWUgfTtcclxuZXhwb3J0IHsgVmVjdG9yMiQ3MiBhcyBWZWN0b3IyIH07XHJcbmV4cG9ydCB7IFZlY3RvcjMkNzMgYXMgVmVjdG9yMyB9O1xyXG5leHBvcnQgeyBWZWN0b3I0JDc0IGFzIFZlY3RvcjQgfTtcclxuXHJcbmV4cG9ydCB7IE1lc2gkNzUgYXMgTWVzaCB9O1xyXG5leHBvcnQgeyBOb2RlJDc2IGFzIE5vZGUgfTtcclxuXHJcbnZhciBwYXJ0aWNsZSA9IHtcclxuICAgIEVtaXR0ZXIgOiBFbWl0dGVyJDc3LFxyXG4gICAgRmllbGQgOiBGaWVsZCQ3OCxcclxuICAgIEZvcmNlRmllbGQgOiBGb3JjZUZpZWxkJDc5LFxyXG4gICAgUGFydGljbGUgOiBQYXJ0aWNsZSQ4MCxcclxuICAgIFBhcnRpY2xlUmVuZGVyYWJsZSA6IFBhcnRpY2xlUmVuZGVyYWJsZSQ4MVxyXG59O1xyXG5leHBvcnQgeyBwYXJ0aWNsZSB9O1xyXG5cclxuXHJcbnZhciBwaWNraW5nID0ge1xyXG4gICAgUGl4ZWxQaWNraW5nIDogUGl4ZWxQaWNraW5nJDgyLFxyXG4gICAgUmF5UGlja2luZyA6IFJheVBpY2tpbmckODNcclxufTtcclxuZXhwb3J0IHsgcGlja2luZyB9O1xyXG5cclxuXHJcbnZhciBwbHVnaW4gPSB7XHJcbiAgICBGcmVlQ29udHJvbCA6IEZyZWVDb250cm9sJDg0LFxyXG4gICAgR2FtZXBhZENvbnRyb2wgOiBHYW1lcGFkQ29udHJvbCQ4NSxcclxuICAgIEdlc3R1cmVNZ3IgOiBHZXN0dXJlTWdyJDg2LFxyXG4gICAgSW5maW5pdGVQbGFuZSA6IEluZmluaXRlUGxhbmUkODcsXHJcbiAgICBPcmJpdENvbnRyb2wgOiBPcmJpdENvbnRyb2wkODgsXHJcbiAgICBTa3lib3ggOiBTa3lib3gkODksXHJcbiAgICBTa3lkb21lIDogU2t5ZG9tZSQ5MFxyXG59O1xyXG5leHBvcnQgeyBwbHVnaW4gfTtcclxuXHJcblxyXG52YXIgcHJlUGFzcyA9IHtcclxuICAgIEVudmlyb25tZW50TWFwIDogRW52aXJvbm1lbnRNYXAkOTEsXHJcbiAgICBTaGFkb3dNYXAgOiBTaGFkb3dNYXAkOTJcclxufTtcclxuZXhwb3J0IHsgcHJlUGFzcyB9O1xyXG5cclxuZXhwb3J0IHsgUmVuZGVyYWJsZSQ5MyBhcyBSZW5kZXJhYmxlIH07XHJcbmV4cG9ydCB7IFJlbmRlcmVyJDk0IGFzIFJlbmRlcmVyIH07XHJcbmV4cG9ydCB7IFNjZW5lJDk1IGFzIFNjZW5lIH07XHJcbmV4cG9ydCB7IFNoYWRlciQ5NiBhcyBTaGFkZXIgfTtcclxuXHJcbnZhciBzaGFkZXIgPSB7XHJcbiAgICBsaWJyYXJ5IDogbGlicmFyeSQ5NyxcclxuICAgIHJlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3IgOiByZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yJDk4LFxyXG4gICAgc291cmNlIDoge1xyXG4gICAgaGVhZGVyIDoge1xyXG4gICAgICAgIGxpZ2h0IDogbGlnaHQkOTlcclxuICAgIH1cclxuICAgIH1cclxufTtcclxuZXhwb3J0IHsgc2hhZGVyIH07XHJcblxyXG5leHBvcnQgeyBTa2VsZXRvbiQxMDAgYXMgU2tlbGV0b24gfTtcclxuZXhwb3J0IHsgU3RhbmRhcmRNYXRlcmlhbCQxMDEgYXMgU3RhbmRhcmRNYXRlcmlhbCB9O1xyXG5leHBvcnQgeyBTdGF0aWNHZW9tZXRyeSQxMDIgYXMgU3RhdGljR2VvbWV0cnkgfTtcclxuZXhwb3J0IHsgVGV4dHVyZSQxMDMgYXMgVGV4dHVyZSB9O1xyXG5leHBvcnQgeyBUZXh0dXJlMkQkMTA0IGFzIFRleHR1cmUyRCB9O1xyXG5leHBvcnQgeyBUZXh0dXJlQ3ViZSQxMDUgYXMgVGV4dHVyZUN1YmUgfTtcclxuZXhwb3J0IHsgVGltZWxpbmUkMTA2IGFzIFRpbWVsaW5lIH07XHJcblxyXG52YXIgdXRpbCA9IHtcclxuICAgIGN1YmVtYXAgOiBjdWJlbWFwJDEwNyxcclxuICAgIGRkcyA6IGRkcyQxMDgsXHJcbiAgICBkZWxhdW5heSA6IGRlbGF1bmF5JDEwOSxcclxuICAgIGhkciA6IGhkciQxMTAsXHJcbiAgICBtZXNoIDogbWVzaCQxMTEsXHJcbiAgICBzaCA6IHNoJDExMixcclxuICAgIHRleHR1cmUgOiB0ZXh0dXJlJDExMyxcclxuICAgIHRyYW5zZmVyYWJsZSA6IHRyYW5zZmVyYWJsZSQxMTRcclxufTtcclxuZXhwb3J0IHsgdXRpbCB9O1xyXG5cclxuZXhwb3J0IHsgdmVyc2lvbiQxMTUgYXMgdmVyc2lvbiB9O1xyXG5cclxudmFyIHZyID0ge1xyXG4gICAgQ2FyZGJvYXJkRGlzdG9ydGVyIDogQ2FyZGJvYXJkRGlzdG9ydGVyJDExNixcclxuICAgIFN0ZXJlb0NhbWVyYSA6IFN0ZXJlb0NhbWVyYSQxMTdcclxufTtcclxuZXhwb3J0IHsgdnIgfTtcclxuO1xyXG4iXSwibmFtZXMiOlsiZWFzaW5nIiwiRWFzaW5nIiwiZWFzaW5nRnVuY3MiLCJHTE1BVF9SQU5ET00iLCJ1dGlsIiwibm90aWZpZXJNaXhpbiIsIkxSVSIsInBhcnNlQ29sb3IiLCJnZXREZWZpbmVDb2RlIiwicHJlekVzc2wiLCJub29wIiwicHJvdG8iLCJkZWZpbmVQcm9wZXJ0eSIsImxpZ2h0U2hhZGVyIiwiUGxhbmUiLCJ2ZWMzU2V0IiwidmVjM0NvcHkiLCJFUFNJTE9OIiwicHJvZ3JhbUtleUNhY2hlIiwiZ2V0UHJvZ3JhbUtleSIsIkxSVUNhY2hlIiwiQXR0cmlidXRlIiwiQ3ViZSIsIlNwaGVyZSIsIlBhcmFtZXRyaWNTdXJmYWNlIiwiaXNQb3dlck9mVHdvIiwiUGVyc3BlY3RpdmUiLCJPcnRob2dyYXBoaWMiLCJ1dGlsRXNzbCIsInNoYWRlckxpYnJhcnkiLCJQZXJzcGVjdGl2ZUNhbWVyYSIsIk9ydGhvZ3JhcGhpY0NhbWVyYSIsImNhbWVyYSIsIk9ydGhvQ2FtZXJhIiwiU2t5Ym94IiwiQ3ViZUdlb21ldHJ5IiwidGFyZ2V0cyIsInJldCIsImhkciIsImRkcyIsIlNreWRvbWUiLCJDdWJlR2VvIiwiU3BoZXJlR2VvIiwiUGxhbmVHZW8iLCJQYXJhbWV0cmljU3VyZmFjZUdlbyIsInNoVXRpbCIsIkdyYXBoTm9kZSIsIlNjZW5lTm9kZSIsIlRleHR1cmVOb2RlIiwiRmlsdGVyTm9kZSIsInJlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3IiLCJDb21wb1NjZW5lTm9kZSIsIkNvbXBvVGV4dHVyZU5vZGUiLCJDb21wb0ZpbHRlck5vZGUiLCJDb25lIiwiQ3lsaW5kZXIiLCJDb25lR2VvbWV0cnkiLCJDb25lR2VvIiwiQ3lsaW5kZXJHZW8iLCJGdWxsUXVhZFBhc3MiLCJvdXRwdXRFc3NsIiwiQmFzZSIsIkNhbWVyYSIsIkFuaW1hdG9yJDAiLCJCbGVuZDFEQ2xpcCQxIiwiQmxlbmQyRENsaXAkMiIsIkNsaXAkMyIsImVhc2luZyQ0IiwiU2FtcGxlclRyYWNrJDUiLCJUaW1lbGluZSQ2IiwiVHJhY2tDbGlwJDciLCJUYXNrJDkiLCJUYXNrR3JvdXAkMTAiLCJPcnRob2dyYXBoaWMkMTIiLCJQZXJzcGVjdGl2ZSQxMyIsIkNvbXBvc2l0b3IkMTQiLCJDb21wb3NpdG9yTm9kZSQxNSIsImNyZWF0ZUNvbXBvc2l0b3IkMTYiLCJGaWx0ZXJOb2RlJDE3IiwiR3JhcGgkMTgiLCJQYXNzJDE5IiwiU2NlbmVOb2RlJDIwIiwiVGV4dHVyZU5vZGUkMjEiLCJUZXh0dXJlUG9vbCQyMiIsIkJhc2UkMjMiLCJDYWNoZSQyNCIsImNvbG9yJDI1IiwiZ2xlbnVtJDI2IiwiR0xJbmZvJDI3IiwiTGlua2VkTGlzdCQyOCIsIkxSVSQyOSIsImV4dGVuZCQzMCIsIm5vdGlmaWVyJDMxIiwicmVxdWVzdCQzMiIsInV0aWwkMzMiLCJ2ZW5kb3IkMzQiLCJHQnVmZmVyJDM2IiwiUmVuZGVyZXIkMzciLCJnbG1hdHJpeCQzOCIsIkNvbmUkNDEiLCJDdWJlJDQyIiwiQ3lsaW5kZXIkNDMiLCJQYXJhbWV0cmljU3VyZmFjZSQ0NCIsIlBsYW5lJDQ1IiwiU3BoZXJlJDQ2IiwiQW1iaWVudCQ1MCIsIkFtYmllbnRDdWJlbWFwJDUxIiwiQW1iaWVudFNIJDUyIiwiRGlyZWN0aW9uYWwkNTMiLCJQb2ludCQ1NCIsIlNwaGVyZSQ1NSIsIlNwb3QkNTYiLCJUdWJlJDU3IiwiRlgkNTgiLCJHTFRGJDU5IiwiQm91bmRpbmdCb3gkNjEiLCJGcnVzdHVtJDYyIiwiTWF0cml4MiQ2MyIsIk1hdHJpeDJkJDY0IiwiTWF0cml4MyQ2NSIsIk1hdHJpeDQkNjYiLCJQbGFuZSQ2NyIsIlF1YXRlcm5pb24kNjgiLCJSYXkkNjkiLCJ1dGlsJDcwIiwiVmFsdWUkNzEiLCJWZWN0b3IyJDcyIiwiVmVjdG9yMyQ3MyIsIlZlY3RvcjQkNzQiLCJFbWl0dGVyJDc3IiwiRmllbGQkNzgiLCJGb3JjZUZpZWxkJDc5IiwiUGFydGljbGUkODAiLCJQYXJ0aWNsZVJlbmRlcmFibGUkODEiLCJQaXhlbFBpY2tpbmckODIiLCJSYXlQaWNraW5nJDgzIiwiRnJlZUNvbnRyb2wkODQiLCJHYW1lcGFkQ29udHJvbCQ4NSIsIkdlc3R1cmVNZ3IkODYiLCJJbmZpbml0ZVBsYW5lJDg3IiwiT3JiaXRDb250cm9sJDg4IiwiU2t5Ym94JDg5IiwiU2t5ZG9tZSQ5MCIsIkVudmlyb25tZW50TWFwJDkxIiwiU2hhZG93TWFwJDkyIiwibGlicmFyeSQ5NyIsInJlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3IkOTgiLCJsaWdodCQ5OSIsImN1YmVtYXAkMTA3IiwiZGRzJDEwOCIsImRlbGF1bmF5JDEwOSIsImhkciQxMTAiLCJtZXNoJDExMSIsInNoJDExMiIsInRleHR1cmUkMTEzIiwidHJhbnNmZXJhYmxlJDExNCIsIkNhcmRib2FyZERpc3RvcnRlciQxMTYiLCJTdGVyZW9DYW1lcmEkMTE3Il0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7Ozs7QUFLQSxJQUFJLE1BQU0sR0FBRzs7Ozs7O0lBTVQsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2hCLE9BQU8sQ0FBQyxDQUFDO0tBQ1o7Ozs7OztJQU1ELFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDaEI7Ozs7OztJQU1ELFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDdEI7Ozs7OztJQU1ELGNBQWMsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN4QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZCxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3RCO1FBQ0QsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDdEM7Ozs7OztJQU1ELE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FB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QUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQy9COztTQUVJLElBQUksUUFBUSxHQUFHLE9BQU8sRUFBRTtRQUN6QixFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQy9COztTQUVJO1FBQ0QsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvQixHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDcEQsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVE7WUFDdEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMs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QUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFVdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0lBQzFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQy9CLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7QUFTMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQixDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7Ozs7Ozs7O0FBUXBDLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7OztBQVF2QixJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDcEIsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDOzs7Ozs7Ozs7QUFTakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsT0FBTyxH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LEdBQUcsS0FBSyxDQUFDO0lBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUM3QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFD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LENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUMxQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckMsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7QUFTMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFCLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFRcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRTtJQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckMsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7OztBQVF2QixJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFCLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7Ozs7Ozs7O0FBU2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsT0FBTyxHQUFHLENBQUM7Q0FDWixDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFOztRQUVULEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUN2QixJQUFJO1FBQ0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3ZCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbEQsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFcEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7OztBQVdGLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUU7SUFDaEMsS0FBSyxHQUFHLEtBQUssSUFBSSxHQUFHLENBQUM7O0lBRXJCLElBQUksQ0FBQyxHQUFHQSxjQUFZLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDQSxjQUFZLEVBQUUsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3JDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0lBRXhDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDbkIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7OztBQVdGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFOzs7SUFHckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7OztRQUcxQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDN0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUM3QixFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzs7O0lBR25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2xELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7R0FDbEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7O01BRWQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7OztNQUdqQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1osQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzNDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O01BRzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDOztJQUVqQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0lBR25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDLENBQUMs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QUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7O0FBVXZCLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7OztBQVdGLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7SUFDMUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0MsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7QUFTMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxT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Q0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O1FBRzFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDN0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUM3QixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxF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LENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2YsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDckIsSUFBSSxHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7O0lBRTlCLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtRQUNYLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2hCLE1BQU07UUFDSCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakI7O0lBRUQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVsQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzVCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHOzs7UUFHM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUU1QyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ04sT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3ZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN2QyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzVCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDNUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QyxPQUFPLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDekcsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRTNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7O0FBVXpCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDOztJQUViLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7SUFFYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDakMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFbEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUV0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7SUFFM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7O0lBRTNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRWxCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRVgsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDVixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDVixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7O1FBRVYsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7SUFFakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUVqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7O0lBRXJCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3BDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEQsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7O1FBRWxELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHOzs7UUFHM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoRixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ04sT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQzs7SUFFbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7O0lBRW5ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDOztJQUVuRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsRUFBRTtJQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN2TSxDQUFDOztBQ3pkRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQSxBQU1BOzs7OztBQUtBLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQzs7Ozs7OztBQU9kLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVztJQUNyQixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFhRixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsV0FBVztJQUMxQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDNUIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFdkMsT0FBTyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3ZCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLElBQUksR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUTtnQkFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekMsT0FBTyxHQUFHLENBQUM7U0FDZCxNQUFNLElBQUksR0FBRyxHQUFHLFFBQVEsRUFBRTtZQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1gsT0FBTyxHQUFHLENBQUM7U0FDZCxNQUFNO1lBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDbkM7S0FDSixDQUFDO0NBQ0wsR0FBRyxDQUFDOzs7Ozs7Ozs7Ozs7QUFZTCxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsV0FBVztJQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7O0lBRXpCLE9BQU8sU0FBUyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7UUFDbEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRW5CLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVoQixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFbkIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ3hELENBQUM7Q0FDTCxHQUFHLENBQUM7Ozs7Ozs7OztBQVNMLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQzs7Ozs7Ozs7Ozs7O0FBWXhCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzs7Ozs7Ozs7OztBQVVsQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFhdEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDOzs7Ozs7OztBQVFwQixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQ3pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2hCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTs7SUFFNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7RUFFaEM7Ozs7Ozs7Ozs7O0FBV0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDOzs7Ozs7Ozs7O0FBVXBCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRS9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7OztBQVd6QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Ozs7Ozs7Ozs7QUFVeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUU7O0lBRTlCLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVuQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVwQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBRTs7SUFFOUIsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRW5CLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRXBDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxHQUFHLENBQUMsR0FBRyxFQUFFO0lBQzlCLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVuQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVwQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWXBCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQzs7Ozs7Ozs7Ozs7QUFXdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTs7OztJQUlqQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRS9DLFdBQVcsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQzs7O0lBRy9DLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUU5QyxLQUFLLEtBQUssR0FB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Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7O0FBTTFCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7Ozs7O0FBU3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7Ozs7O0FBTXhDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7Ozs7Ozs7OztBQVVqQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFhaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7OztJQUc3QixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxJQUFJLEtBQUssQ0FBQzs7SUFFVixLQUFLLE1BQU0sR0FBRyxHQUFHLEdBQUc7O1FBRWhCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUNyQixLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztLQUM5QixNQUFNOztRQUVILElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDZCxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ2xCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDUixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1FBRWhCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0tBQzFDOztJQUVELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7QUNoaEJGOzs7QUFHQSxBQUdBO0FBQ0EsU0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDcEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7O0lBRW5DLE9BQU8sR0FBRyxDQUFDO0NBQ2Q7O0FBRUQsU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7Ozs7SUFJckMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDOUQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7O0lBRW5FLElBQUksS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQzs7O0lBR3hDLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUU5QyxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUU7UUFDYixLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDZixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7S0FDYjs7SUFFRCxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssSUFBSSxRQUFRLEVBQUU7O1FBRTFCLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDN0MsTUFBTSxHQUFHLElBQUks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Q0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxRSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO1FBQ0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQzlELE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUM3RTs7SUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxD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QUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O1FBRWxCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztRQUVoRixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7OztRQUlwRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN6QzthQUNJO1lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDNUM7S0FDSixDQUFDO0NBQ0wsR0FBRyxDQUFDOzs7Ozs7O0FBT0wsWUFBWSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ3JELElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENB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RyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BELGdCQUFnQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVELFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RCxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0QsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdELFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RCxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRCxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xELFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLHNCQUFzQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9ELGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLGdCQUFnQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0Msa0JBQWtCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9ELGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRSxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9ELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRCxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEQsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRCxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekQsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMs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Q0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQyxJQUFJLEVBQUUsR0FBRyxLQUFLLEdBQUcsU0FBUyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25FLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs7SUFFcEUsT0FBTyxHQUFHLENBQUM7RUFDZDs7QUFFRCxTQUFTLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7OztBQVM5QyxTQUFTLENBQUMsSUFBSSxHQUFHLFVBQVUsZUFBZSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUU7SUFDNUQsSUFBSSxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDO1dBQ3ZCLEVBQUUsZUFBZSxJQUFJLENBQUMsSUFBSSxlQUFlLElBQUksQ0FBQyxDQUFDO01BQ3BEO1FBQ0UsT0FB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QUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEQsTUFBTTtZQUNWLEtBQUssSUFBSTtnQkFDTCxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixNQUFNO1lBQ1YsS0FBSyxLQUFLO2dCQUNOLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNoQyxNQUFNO1lBQ1YsS0FBSyxLQUFLO2dCQUNOLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFF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QkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUU7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7O0lBRTlCLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtRQUNYLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7UUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNqQixNQUFNO1FBQ0gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNuQjs7SUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEQsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7O1FBRWxELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHOzs7UUFHM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoRixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ04sT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7O0lBRXBELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDNUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztJQUV2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDNUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7UUFFbEQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7O0lBR2hDLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDaEYsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hELEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7OztJQUd2RCxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7O0lBRTNDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7O0lBRTNDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7O0lBRTVDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3ZDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7OztJQUcxQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDOzs7SUFHbEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDOzs7SUFHbEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDbEMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDOzs7SUFHbkMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDekMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUN6QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUV6QyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBTXpCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQzs7Ozs7Ozs7O0FBU3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDOztJQUV2QixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7UUFDWCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3JELE1BQU07UUFDSCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7UUFFakQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3ZELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7O1FBRXpELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDakQ7O0lBRUQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRWpDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7OztBQVdGLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7SUFDdkMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ1AsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2IsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2IsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7O0lBRWxCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFOztJQUVuRCxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNkLENBQUMsSUFBSSxHQUFHLENBQUM7SUFDVCxDQUFDLElBQUksR0FBRyxDQUFDO0lBQ1QsQ0FBQyxJQUFJLEdBQUcsQ0FBQzs7SUFFVCxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7O0lBR2pELEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzs7SUFHdEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUM1QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRTVDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtRQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbkI7SUFDRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7SUFFaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbkI7OztJQUdELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDNUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUM1QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7SUFFaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbkI7OztJQUdELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDNUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUM1QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFZixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7UUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ25COzs7SUFHRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMz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LENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ1YsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ1YsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDOztRQUVWLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDOztJQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDdEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVaLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFjRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQy9ELElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUN2QixFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUM3QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUM1QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7Ozs7QUFZRixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtJQUN2RCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQzVCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ2hDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBY0YsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtJQUM3RCxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQztRQUN2QixFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDdkIsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQzVCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtJQUMxQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUc7UUFD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QUcsQ0FBQztRQUNWLEVBQUUsSUFBSSxHQUFHLENBQUM7S0FDYjs7SUFFRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDL0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMvQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVaLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFD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LEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7OztJQVNELEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxRQUFRLEVBQUUsVUFBVSxHQUFHLEVBQUU7UUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRXZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7OztJQU1ELEtBQUssRUFBRSxZQUFZO1FBQ2YsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzlDOzs7Ozs7O0lBT0QsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMs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O0lBQzlCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7OztBQU9GLE9BQU8sQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzFCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMxQyxDQUFDOzs7Ozs7OztBQVFGLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQzs7Ozs7Ozs7QUFRaEMsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQzs7Ozs7OztBQU83QixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUN6QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7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QUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNO1FBQ1Y7WUFDSSxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDO0tBQzlDO0lBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixPQUFPLENBQUMsYUFBYSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7O0lBRTdDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDakIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQzs7SUFFdkIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDOztJQUUzQyxRQUFRLEtBQUs7UUFDVCxLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUU7Z0JBQ3BCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDaEM7aUJBQ0k7Z0JBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDakI7WUFDRCxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxH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RTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQzs7Ozs7Ozs7SUFRSEMsZ0JBQWMsQ0FBQ0QsT0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQzs7Ozs7Ozs7SUFRSEMsZ0JBQWMsQ0FBQ0QsT0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQztDQUNOOzs7Ozs7Ozs7O0FBVUQsVUFBVSxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENB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R0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs7SUFFNUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDOzs7Ozs7SUFNM0MsUUFBUSxLQUFLO1FBQ1QsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxH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QUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2VBQ2pFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDMUU7Ozs7Ozs7SUFPRCxrQkFBa0IsRUFBRSxVQUFVLElBQUksRUFBRTs7UUFFaEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7O1FBRTFCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQzNCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOztRQUUzQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztlQUNqRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1RTs7Ozs7OztJQU9ELFlBQVksRUFBRSxVQUFVLENBQUMsRUFBRTtRQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7UUFFMUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQzs7UUFFakIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7ZUFDeEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkU7Ozs7O0lBS0QsUUFBUSxFQUFFLFlBQVk7UUFDbEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7ZUFDM0QsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdEU7Ozs7OztJQU1ELGNBQWMsRUFBRSxVQUFVLE1BQU0sRUFBRTtRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNwQzs7Ozs7OztJQU9ELGFBQWEsRUFBRSxDQUFDLFlBQVk7O1FBRXhCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOztRQUV2QixPQUFPLFVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRTtZQUM3QixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUMzQixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7WUFFM0IsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzs7WUFFckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFcEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFcEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFckUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3JCLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7WUFFMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFD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Q0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUU3QyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7UUFHN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUU3QyxPQUFPLElBQUksQ0FBQztLQUNmOzs7OztJQUtE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QyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7OztRQUd2REMsU0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7O1FBRXRCQSxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7UUFFdEJBLFNBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOztRQUV0QkEsU0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7O1FBRXRCQSxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUM3RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7UUFFdEJBLFNBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOzs7UUFHdEIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNuQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRztZQUNaLElBQUksTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDOztZQUV4QixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakQsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Ozs7WUFJaERBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xEQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O1lBRWpEQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakRBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O1lBRWhEQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNyREEsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BEQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcERBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDdEQ7YUFDSTtZQUNELElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUMzQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDO1lBQzNCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDekIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDO1lBQzdCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztZQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDOzs7WUFHMUIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN2RixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDOztZQUV2RixJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNoQyxJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7O1lBR2hDQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0NBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFN0NBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUU3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMs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RSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHO2dCQUNoQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQixJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDckMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFOztnQkFFckMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENB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QztZQUNsQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7O1lBRWxDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxHQUFHLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDdkIsSUFBSSxPQUFPLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM5QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFD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Q25DLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ25DOzs7O0lBSUQsS0FBSyxFQUFFLFdBQVc7UUFDZCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMxQixNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDeEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMs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RUFBRSxTQUFTLEVBQUU7SUFDdEMsSUFBSSxLQUFLLEdBQUcsa0VBQWtFLENBQUM7SUFDL0UsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbkMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDbkM7O0lBRUQsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDbkMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzdDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTs7SUFFN0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOztJQUUzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHO1FBQy9DLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksRUFBRSxHQUFHLE1B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QUMsRUFBRSxFQUFFO1FBQ3RDLElBQUksU0FBUyxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUM7UUFDcEMsSUFBSSxDQUFDLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQzs7UUFFOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTs7Ozs7WUFLakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ25DLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxRCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFELENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUM7OztZQUd4RSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7U0FDckI7O1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNqQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7WUFDdkIsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUM5QixNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1NBQzVCO0tBQ0o7SUFDRCxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztJQUVuQyxPQUFPLGtCQUFrQixDQUFDO0NBQzdCLENBQUM7O0FDNVJGO0FBQ0EsQUFHQTs7Ozs7O0FBTUEsSUFBSSxtQkFBbUIsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDOzs7Ozs7SUFNbkMsT0FBTyxFQUFFLElBQUk7Ozs7O0lBS2IsVUFBVSxFQUFFLEtBQUs7O0lBRWpCLG1CQUFtQixFQUFFLElBQUk7SUFDekIsV0FBVyxFQUFFLElBQUk7O0NBRXBCLDJDQUEyQzs7SUFFeEMsSUFBSSxFQUFFLHVCQUF1Qjs7Ozs7OztJQU83QixTQUFTLEVBQUUsVUFBVSxRQUFRLEVBQUUsSUFBSSxFQUFFO1FBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLHdCQUF3QixDQUFDLEVBQUU7WUFDcEQsT0FBTyxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1lBQ3JELE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ25CLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUNwRSxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ3BGO1FBQ0QsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUMzQixJQUFJLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDdkIsT0FBTztTQUNWOztRQUVELElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQyx1QkFBdUI7WUFDNUMsUUFBUSxFQUFFLE9BQU8sRUFBRTtnQkFDZixVQUFVLEVBQUUsSUFBSTtnQkFDaEIsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsTUFBTSxFQUFFLElBQUk7YUFDZixFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsV0FBVztTQUNoRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzs7UUFFbEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUM3Qjs7SUFFRCxhQUFhLEVBQUUsWUFBWTtRQUN2QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7S0FDM0I7O0lBRUQsZ0JBQWdCLEVBQUU7UUFDZCx3QkFBd0IsRUFBRTtZQUN0QixJQUFJLEVBQUUsSUFBSTtZQUNWLEtBQUssRUFBRSxVQUFVLFFBQVEsRUFBRTtnQkFDdkIsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFDM0IsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztnQkFDbkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDdkU7U0FDSjs7UUFFRCwwQkFBMEIsRUFBRTtZQUN4QixJQUFJLEVBQUUsR0FBRztZQUNULEtBQUssRUFBRSxVQUFVLFFBQVEsRUFBRTtnQkFDdkIsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDO2FBQzNCO1NBQ0o7O1FBRUQsNkJBQTZCLEVBQUU7WUFDM0IsSUFBSSxFQUFFLEdBQUc7WUFDVCxLQUFLLEVBQUUsVUFBVSxRQUFRLEVBQUU7Z0JBQ3ZCLE9BQU8sUUFBUSxDQUFDLFdBQVcsQ0FBQzthQUMvQjtTQUNKO0tBQ0o7Ozs7Ozs7Q0FPSixDQUFDOztBQzdGRjs7Ozs7QUFLQSxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDOztJQUU5QixVQUFVLEVBQUUsS0FBSzs7Ozs7OztJQU9qQixZQUFZLEVBQUUsRUFBRTs7Q0FFbkIsRUFBRSxZQUFZO0lBQ1gsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDN0QsRUFBRTs7SUFFQyxJQUFJLEVBQUUsa0JBQWtCOztJQUV4QixnQkFBZ0IsRUFBRTtRQUNkLG1CQUFtQixFQUFFO1lBQ2pCLElBQUksRUFBRSxJQUFJO1lBQ1YsS0FBSyxFQUFFLFVBQVUsUUFBUSxFQUFFO2dCQUN2QixJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUMzQixJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUNuQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQzthQUM3RTtTQUNKOztRQUVELDBCQUEwQixFQUFFO1lBQ3hCLElBQUksRUFBRSxJQUFJO1lBQ1YsS0FBSyxFQUFFLFVBQVUsUUFBUSxFQUFFO2dCQUN2QixJQUFJLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDdEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNuRCxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNwRDtnQkFDRCxPQUFPLGtCQUFrQixDQUFDO2FBQzdCO1NBQ0o7S0FDSjs7Ozs7OztDQU9KLENBQUM7O0FDaERGLElBQUksV0FBVyxHQUFHLFlBQVk7O0lBRTFCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDOztJQUVoQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0NBQ2hDLENBQUM7O0FBRUYsV0FBVyxDQUFDLFNBQVMsR0FBRzs7SUFFcEIsV0FBVyxFQUFFLFdBQVc7O0lBRXhCLEdBQUcsRUFBRSxVQUFVLFVBQVUsRUFBRTtRQUN2QixJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNkLElBQUksT0FBTyxHQUFHLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEMsT0FBTyxPQUFPLENBQUM7U0FDbEI7UUFDRCxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUNyQjs7SUFFRCxHQUFHLEVBQUUsVUFBVSxPQUFPLEVBQUU7UUFDcEIsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUN4QjtRQUNELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUN0Qjs7SUFFRCxLQUFLLEVBQUUsVUFBVSxRQUFRLEVBQUU7UUFDdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNoRDtRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7S0FDaEM7Q0FDSixDQUFDOztBQUVGLElBQUksYUFBYSxHQUFHO0lBQ2hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsTUFBTSxFQUFFLEdBQUc7SUFDWCxJQUFJLEVBQUUsTUFBTSxDQUFDLGFBQWE7SUFDMUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJO0lBQ25CLEtBQUssRUFBRSxNQUFNLENBQUMsYUFBYTtJQUMzQixLQUFLLEVBQUUsTUFBTSxDQUFDLGFBQWE7SUFDM0IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7SUFDdEMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNO0lBQ3hCLFNBQVMsRUFBRSxJQUFJO0lBQ2YsV0FBVyxFQUFFLENBQUM7SUFDZCxLQUFLLEVBQUUsSUFBSTtJQUNYLGVBQWUsRUFBRSxDQUFDO0lBQ2xCLGdCQUFnQixFQUFFLEtBQUs7Q0FDMUIsQ0FBQzs7QUFFRixJQUFJLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7O0FBRXRELFNBQVMsV0FBVyxDQUFDLFVBQVUsRUFBRTtJQUM3QjlCLE1BQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDM0UsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDOztJQUVyQixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDYixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2xELElBQUksSUFBSSxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QyxHQUFHLElBQUksS0FBSyxDQUFDO0tBQ2hCO0lBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDZDs7QUFFRCxTQUFTLFFBQVEsQ0FBQyxNQUFNLEVBQUU7O0lBRXRCLElBQUksSUFBSSxHQUFHcUIsY0FBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztJQUVyRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLGVBQWUsRUFBRTtRQUMxQyxNQUFNLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztLQUM1Qjs7SUFFRCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtRQUM1QixJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLHNCQUFzQjtZQUNqRCxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRTtZQUNsRCxNQUFNLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7U0FDckMsTUFBTTtZQUNILE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLG9CQUFvQjtZQUMvQyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxxQkFBcUI7VUFDbEQ7WUFDRSxNQUFNLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDcEM7S0FDSjtJQUNELElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDUCxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFDcEMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO0tBQ3ZDO0NBQ0o7O0FBRUQsU0FBU0EsY0FBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7SUFDakMsT0FBTyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN4QixDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0NBQ3ZDOztBQzFHRCxvQkFBZSxpeVRBQWl5VCxDQUFDOztBQ3FCanpULElBQUlXLFNBQU8sR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRW5ELEFBQ0EsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDOztBQUVoQyxTQUFTLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFO0lBQ2hFLElBQUksTUFBTSxLQUFLLFVBQVUsRUFBRTtRQUN2QixPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBQ2hEO1NBQ0ksSUFBSSxNQUFNLEtBQUssYUFBYSxFQUFFO1FBQy9CLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQztlQUNwRCxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7VUFDMUM7WUFDRSxJQUFJLFdBQVcsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN6RCxPQUFPLFdBQVcsSUFBSSxDQUFDLENBQUM7U0FDM0I7UUFDRCxPQUFPLENBQUMsQ0FBQztLQUNaO1NBQ0ksSUFBSSxNQUFNLEtBQUssVUFBVSxFQUFFO1FBQzVCLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDOUM7U0FDSSxJQUFJLE1BQU0sS0FBSyxVQUFVLEVBQUU7UUFDNUIsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUM5QztTQUNJO1FBQ0QsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3BDO0NBQ0o7O0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFO0lBQ3hELElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7SUFDL0IsSUFBSSxJQUFJLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQztJQUNuQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7V0FDakQsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQzVFOzs7Ozs7Ozs7Ozs7Ozs7OztBQWlCRCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7SUFDeEMsNkNBQTZDOzs7Ozs7UUFNekMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxHQUFHOzs7Ozs7UUFNN0IsVUFBVSxFQUFFLEdBQUc7O1FBRWYsZ0JBQWdCLEVBQUUsTUFBTTs7UUFFeEIsU0FBUyxFQUFFLElBQUksWUFBWSxDQUFDO1lBQ3hCLENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ0wsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ0wsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ04sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNMLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDUixDQUFDOztRQUVGLFNBQVMsRUFBRSxPQUFPOztRQUVsQix3QkFBd0IsRUFBRSxLQUFLOztRQUUvQixZQUFZLEVBQUUsSUFBSSxXQUFXLEVBQUU7O1FBRS9CLFNBQVMsRUFBRSxFQUFFO1FBQ2IsZ0JBQWdCLEVBQUU7WUFDZCxhQUFhLEVBQUUsQ0FBQztZQUNoQixtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLFlBQVksRUFBRSxDQUFDO1NBQ2xCOztRQUVELGVBQWUsRUFBRSxFQUFFO1FBQ25CLGtCQUFrQixFQUFFLEVBQUU7O1FBRXRCLFVBQVUsRUFBRSxFQUFFO1FBQ2QsaUJBQWlCLEVBQUUsRUFBRTs7UUFFckIsYUFBYSxFQUFFLEVBQUU7UUFDakIsZUFBZSxFQUFFLEVBQUU7O1FBRW5CLFlBQVksRUFBRSxJQUFJLFdBQVcsRUFBRTtLQUNsQyxDQUFDO0NBQ0wsRUFBRSxZQUFZOztJQUVYLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxJQUFJLENBQUM7UUFDM0IsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsK0JBQStCLENBQUM7S0FDM0QsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLElBQUksQ0FBQztRQUMzQixRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQztLQUMzRCxDQUFDLENBQUM7SUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMvQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQzs7SUFFL0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksSUFBSSxDQUFDO1FBQzdCLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDO0tBQ2pELENBQUMsQ0FBQztDQUNOLEVBQUU7Ozs7Ozs7OztJQVNDLE1BQU0sRUFBRSxVQUFVLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRTtRQUM1RCxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2QsV0FBVyxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN2QztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztLQUNuRTs7Ozs7Ozs7SUFRRCxXQUFXLEVBQUUsVUFBVSxRQUFRLEVBQUUsSUFBSSxFQUFFO1FBQ25DLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQixJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUN2QyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGFBQWEsQ0FBQyxHQUFHLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ2hFO2FBQ0k7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDbEU7UUFDRCxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDN0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMzRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQy9DO1FBQ0QsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQixRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7S0FDM0I7O0lBRUQsZ0JBQWdCLEVBQUUsVUFBVSxRQUFRLEVBQUUsSUFBSSxFQUFFO1FBQ3hDLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7O1lBRXRDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbEQ7YUFDSTtZQUNELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN6Qzs7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssYUFBYSxDQUFDLEdBQUcsRUFBRTtZQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLENBQUM7U0FDekQ7YUFDSTtZQUNELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM5QyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQy9CLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzdFO2lCQUNJO2dCQUNELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2FBQ3pEO1NBQ0o7S0FDSjs7SUFFRCxPQUFPLEVBQUUsVUFBVSxRQUFRLEVBQUUsS0FBSyxFQUFFO1FBQ2hDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsVUFBVSxFQUFFO1lBQ2pDLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFO2dCQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQy9DO1NBQ0osQ0FBQyxDQUFDOztRQUVILEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdEM7U0FDSjtLQUNKOztJQUVELGlCQUFpQixFQUFFLFVBQVUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFOztRQUV2RSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ25DO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOztRQUUzQixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDOztRQUV0QixJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ2pCLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNsQjtRQUNELElBQUksV0FBVyxFQUFFO1lBQ2IsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3hCOztRQUVELEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQzs7O1FBRzlCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUNqRSxPQUFPO1NBQ1Y7O1FBRUQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLENBQUM7O1FBRTdELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Ozs7O1FBS3ZCLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7OztRQUduQyxJQUFJLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLDBCQUEwQixHQUFHLEVBQUUsQ0FBQztRQUNwQyxJQUFJLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztRQUNsQyxJQUFJLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLG9CQUFvQixHQUFHLEVBQUUsQ0FBQzs7UUFFOUIsSUFBSSxrQkFBa0IsQ0FBQzs7UUFFdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxtQkFBbUIsRUFBRTs7Z0JBRXBDLElBQUksa0JBQWtCLEVBQUU7b0JBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkRBQTJELENBQUMsQ0FBQztvQkFDMUUsU0FBUztpQkFDWjtnQkFDRCxJQUFJLEtBQUssQ0FBQyxhQUFhLEdBQUcsQ0FBQyxFQUFFO29CQUN6QixPQUFPLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7b0JBQzFDLFNBQVM7aUJBQ1o7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsYUFBYSxHQUFHLENBQUMsRUFBRTtvQkFDekIsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO2lCQUM5Qjs7Z0JBRUQsSUFBSSxDQUFDLDRCQUE0QjtvQkFDN0IsUUFBUTtvQkFDUixLQUFLO29CQUNMLFdBQVc7b0JBQ1gsS0FBSztvQkFDTCxrQkFBa0I7b0JBQ2xCLHdCQUF3QjtvQkFDeEIsMEJBQTBCO2lCQUM3QixDQUFDO2FBQ0w7aUJBQ0ksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRTtnQkFDbEMsSUFBSSxDQUFDLHFCQUFxQjtvQkFDdEIsUUFBUTtvQkFDUixLQUFLO29CQUNMLEtBQUs7b0JBQ0wsaUJBQWlCO29CQUNqQixtQkFBbUI7aUJBQ3RCLENBQUM7YUFDTDtpQkFDSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFO2dCQUNuQyxJQUFJLENBQUMsc0JBQXNCO29CQUN2QixRQUFRO29CQUNSLEtBQUs7b0JBQ0wsS0FBSztvQkFDTCxvQkFBb0I7aUJBQ3ZCLENBQUM7YUFDTDs7WUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDdkM7O1FBRUQsS0FBSyxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlDLElBQUksR0FBRyxHQUFHLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQztZQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQzdCLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxNQUFNLEVBQUU7b0JBQzFDLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDWixRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7cUJBQzVDO3lCQUNJLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUU7d0JBQzFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO3FCQUN0QztpQkFDSjthQUNKO1NBQ0o7UUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzdCLElBQUksa0JBQWtCLEVBQUU7Z0JBQ3BCLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25GO2lCQUNJO2dCQUNELFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7YUFDbkQ7U0FDSjs7UUFFRCxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDOztRQUUxQyxTQUFTLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDdEIsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSwwQkFBMEIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksOEJBQThCLEdBQUcsMEJBQTBCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdFLGNBQWMsQ0FBQywwQkFBMEIsR0FBRyxFQUFFLEtBQUssRUFBRSwwQkFBMEIsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDOUYsY0FBYyxDQUFDLHdCQUF3QixHQUFHLEVBQUUsS0FBSyxFQUFFLHdCQUF3QixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMzRixjQUFjLENBQUMsOEJBQThCLEdBQUcsRUFBRSxLQUFLLEVBQUUsOEJBQThCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3ZHLElBQUksa0JBQWtCLEVBQUU7Z0JBQ3BCLElBQUksc0JBQXNCLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3hELElBQUkscUJBQXFCLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3ZELHNCQUFzQixDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM3QixxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7O2dCQUc5QixzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDakMscUJBQXFCLENBQUMsT0FBTyxFQUFFLENBQUM7O2dCQUVoQyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbkMsY0FBYyxDQUFDLHNCQUFzQixHQUFHLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztnQkFDdkYsY0FBYyxDQUFDLHFCQUFxQixHQUFHLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUN4RjtTQUNKOztRQUVELElBQUksbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNoQyxJQUFJLHVCQUF1QixHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvRCxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQzFDLGNBQWMsQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDaEYsY0FBYyxDQUFDLGlCQUFpQixHQUFHLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUM3RSxjQUFjLENBQUMsdUJBQXVCLEdBQUcsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1NBQzVGOztRQUVELElBQUksb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqQyxjQUFjLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ3JGO0tBQ0o7O0lBRUQsNEJBQTRCLEVBQUUsQ0FBQyxZQUFZOztRQUV2QyxJQUFJLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLElBQUksZUFBZSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDcEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNqQyxJQUFJLFVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQy9CLElBQUksZUFBZSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDcEMsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3hDLElBQUksZUFBZSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7O1FBRXBDLE9BQU8sVUFBVSxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsd0JBQXdCLEVBQUUsMEJBQTBCLEVBQUU7O1lBRTVILElBQUkscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFELElBQUksVUFBVSxHQUFHO2dCQUNiLFdBQVcsRUFBRSxVQUFVLFVBQVUsRUFBRTtvQkFDL0IsT0FBTyxVQUFVLENBQUMsbUJBQW1CLElBQUkscUJBQXFCLENBQUM7aUJBQ2xFO2dCQUNELGlCQUFpQixFQUFFLHNCQUFzQjtnQkFDekMsVUFBVSxFQUFFLHVCQUF1QjtnQkFDbkMsUUFBUSxFQUFFLFVBQVUsVUFBVSxFQUFFO29CQUM1QixPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUM7aUJBQ2hDO2dCQUNELFdBQVcsRUFBRSxRQUFRLENBQUMsaUJBQWlCO2FBQzFDLENBQUM7OztZQUdGLElBQUksQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQzVDLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDekMsS0FBSyxDQUFDLHdCQUF3QjtxQkFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDakU7OztZQUdELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEYsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7WUFFcEYsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7O1lBRTdFLElBQUksVUFBVSxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQztZQUMzQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7O1lBRXhFLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLGFBQWEsR0FBRyxXQUFXLFlBQVlOLGFBQWlCLENBQUM7O1lBRTdELElBQUksTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsR0FBRyxLQUFLLFdBQVcsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pGLElBQUksT0FBTyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNDLElBQUksSUFBSSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxXQUFXLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDckYsSUFBSSxJQUFJLEdBQUcsV0FBVyxHQUFHLENBQUMsVUFBVSxHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztnQkFDOUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUN0RixVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxRDtZQUNELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMzRCwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7O1lBRXpDLElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7O1lBRWpDLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7O1lBRXZELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFOztnQkFFMUMsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLGFBQWEsRUFBRTtvQkFDZixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztpQkFDckg7cUJBQ0k7b0JBQ0QsSUFBSSxDQUFDLEtBQUs7d0JBQ04sZUFBZSxDQUFDLEtBQUs7d0JBQ3JCLFdBQVcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxHQUFHO3dCQUN4RSxTQUFTLEVBQUUsUUFBUTtxQkFDdEIsQ0FBQztpQkFDTDtnQkFDRCxZQUFZLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ2hELFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7Z0JBQ2xFLFFBQVEsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQzFDLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO2dCQUM5QixJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDOUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDL0IsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVELFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7O2dCQUV0RCxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLElBQUksR0FBRyxDQUFDOzs7Z0JBRy9DLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDOztnQkFFL0YsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNyRCxRQUFRLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDOzs7Z0JBR2hFLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxhQUFhLENBQUMsR0FBRyxFQUFFO29CQUN2QyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUMxRDs7Z0JBRUQsSUFBSSxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO3FCQUM5QixZQUFZLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7O2dCQUVoRCx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDOztnQkFFNUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUN0RDs7WUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7WUFFbkMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNsQyxDQUFDO0tBQ0wsR0FBRzs7SUFFSixxQkFBcUIsRUFBRSxVQUFVLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFOztRQUU3RixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDOztRQUV0QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzs7UUFFakMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7O1FBRXZELElBQUkscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFELElBQUksVUFBVSxHQUFHO1lBQ2IsV0FBVyxFQUFFLFVBQVUsVUFBVSxFQUFFO2dCQUMvQixPQUFPLFVBQVUsQ0FBQyxtQkFBbUIsSUFBSSxxQkFBcUIsQ0FBQzthQUNsRTtZQUNELGlCQUFpQixFQUFFLHNCQUFzQjtZQUN6QyxVQUFVLEVBQUUsdUJBQXVCO1lBQ25DLFFBQVEsRUFBRSxVQUFVLFVBQVUsRUFBRTtnQkFDNUIsT0FBTyxVQUFVLENBQUMsVUFBVSxDQUFDO2FBQ2hDO1lBQ0QsV0FBVyxFQUFFLFFBQVEsQ0FBQyxpQkFBaUI7U0FDMUMsQ0FBQzs7UUFFRixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckQsUUFBUSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQzs7UUFFaEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7OztRQUduQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssYUFBYSxDQUFDLEdBQUcsRUFBRTtZQUN2QyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzFEOztRQUVELElBQUksTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO2FBQ2xDLE1BQU0sRUFBRTthQUNSLFlBQVksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzs7UUFFaEQsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDeEM7O0lBRUQsc0JBQXNCLEVBQUUsVUFBVSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRTtRQUM1RSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDdEIsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztRQUVuQyxJQUFJLHFCQUFxQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRCxJQUFJLFVBQVUsR0FBRztZQUNiLFdBQVcsRUFBRSxVQUFVLFVBQVUsRUFBRTtnQkFDL0IsT0FBTyxVQUFVLENBQUMsbUJBQW1CLElBQUkscUJBQXFCLENBQUM7YUFDbEU7WUFDRCxVQUFVLEVBQUUsdUJBQXVCO1lBQ25DLFdBQVcsRUFBRSxRQUFRLENBQUMsaUJBQWlCO1NBQzFDLENBQUM7O1FBRUYsSUFBSSxrQkFBa0IsR0FBRztZQUNyQixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7U0FDakQsQ0FBQztRQUNGLElBQUksSUFBSSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDN0IsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDeEQsSUFBSSxTQUFTLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNsQyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3hCLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDM0MsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMzQyxJQUFJLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDOztRQUUxQixJQUFJLGlCQUFpQixHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUM3RixLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsVUFBVSxFQUFFO1lBQ2pDLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BELElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFO29CQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUdNLFNBQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ3JDLGtCQUFrQixDQUFDQSxTQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7cUJBQ25EO29CQUNELE9BQU87aUJBQ1Y7Z0JBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDdkMsT0FBTztpQkFDVjs7Z0JBRUQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUdBLFNBQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3JDLGlCQUFpQixDQUFDQSxTQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7aUJBQ3pDO2dCQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3hCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzNCLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdkMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN2QyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZCLElBQUksSUFBSSxHQUFHLElBQUksRUFBRTt3QkFDYixJQUFJLElBQUksR0FBRyxJQUFJLEVBQUU7NEJBQ2IsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO3lCQUNqRDs2QkFDSTs0QkFDRCxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7eUJBQ2pEO3FCQUNKO3lCQUNJO3dCQUNELElBQUksSUFBSSxHQUFHLElBQUksRUFBRTs0QkFDYixpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7eUJBQ2pEOzZCQUNJOzRCQUNELGlCQUFpQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQzt5QkFDakQ7cUJBQ0o7aUJBQ0o7Z0JBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxTQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNyQyxJQUFJLGlCQUFpQixDQUFDQSxTQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDL0Isa0JBQWtCLENBQUNBLFNBQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDbkQ7aUJBQ0o7YUFDSjtTQUNKLENBQUMsQ0FBQzs7UUFFSCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hCLElBQUksTUFBTSxHQUFHQSxTQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQzs7WUFFdEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDOUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7O1lBRXZELFFBQVEsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQ3ZFOztRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3RDOztJQUVELGlCQUFpQixFQUFFLFVBQVUsS0FBSyxFQUFFO1FBQ2hDLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pELElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDO1FBQ2hELElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDakIsSUFBSSxZQUFZLEdBQUcsWUFBWSxHQUFHLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDO1lBQ3pFLGNBQWMsR0FBRyxJQUFJLFFBQVEsQ0FBQztnQkFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixNQUFNLEVBQUUsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLENBQUM7YUFDdkcsQ0FBQyxDQUFDOztZQUVILElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLGNBQWMsQ0FBQztTQUN4RDtRQUNELElBQUksS0FBSyxDQUFDLGdCQUFnQixJQUFJLElBQUksRUFBRTtZQUNoQyxjQUFjLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUNuRTtRQUNELElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUU7WUFDMUIsY0FBYyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGFBQWEsQ0FBQyxHQUFHLEVBQUU7WUFDdkMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDaEQ7YUFDSTtZQUNELGNBQWMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ2xEOztRQUVELElBQUksWUFBWSxFQUFFO1lBQ2QsY0FBYyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVDOztRQUVELE9BQU8sY0FBYyxDQUFDO0tBQ3pCOztJQUVELGVBQWUsRUFBRSxVQUFVLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFO1FBQ2hELElBQUksU0FBUyxHQUFHO1lBQ1osS0FBSyxFQUFFLElBQUk7WUFDWCxNQUFNLEVBQUUsSUFBSTtZQUNaLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSztTQUN0QixDQUFDO1FBQ0YsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7O1FBRWxELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7O1FBRXJDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7O1FBRW5DLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3JDOztJQUVELFdBQVcsRUFBRSxVQUFVLEtBQUssRUFBRSxPQUFPLEVBQUU7UUFDbkMsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUN4QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxHQUFHLENBQUM7UUFDL0MsT0FBTyxHQUFHLE9BQU8sSUFBSSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNWLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxhQUFhLEVBQUU7Z0JBQzlCLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO2FBQy9CO2lCQUNJO2dCQUNELE9BQU8sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO2FBQzdCOzs7WUFHRCxPQUFPLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxPQUFPLENBQUM7WUFDckMsT0FBTyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7WUFDNUIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGFBQWEsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3ZDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDN0IsT0FBTyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7YUFDM0I7aUJBQ0k7Z0JBQ0QsT0FBTyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO2dCQUNuQyxPQUFPLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7Z0JBQ25DLE9BQU8sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2FBQzdCO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUM7U0FDakM7O1FBRUQsT0FBTyxPQUFPLENBQUM7S0FDbEI7O0lBRUQsb0JBQW9CLEVBQUUsVUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRTtZQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRztnQkFDdkIsRUFBRSxFQUFFLElBQUlOLGFBQWlCLEVBQUU7Z0JBQzNCLEVBQUUsRUFBRSxJQUFJQSxhQUFpQixFQUFFO2dCQUMzQixFQUFFLEVBQUUsSUFBSUEsYUFBaUIsRUFBRTtnQkFDM0IsRUFBRSxFQUFFLElBQUlBLGFBQWlCLEVBQUU7Z0JBQzNCLEVBQUUsRUFBRSxJQUFJQSxhQUFpQixFQUFFO2dCQUMzQixFQUFFLEVBQUUsSUFBSUEsYUFBaUIsRUFBRTthQUM5QixDQUFDO1NBQ0w7UUFDRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzs7UUFFOUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0IsUUFBUSxNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3RELE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdEQsTUFBTTtZQUNWLEtBQUssSUFBSTtnQkFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN0RCxNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3RELE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdEQsTUFBTTtZQUNWLEtBQUssSUFBSTtnQkFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN0RCxNQUFNO1NBQ2I7UUFDRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQzs7UUFFaEIsT0FBTyxNQUFNLENBQUM7S0FDakI7O0lBRUQsMEJBQTBCLEVBQUUsQ0FBQyxZQUFZO1FBQ3JDLElBQUksZUFBZSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDcEMsSUFBSSxvQkFBb0IsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzdDLElBQUksYUFBYSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7OztRQUd0QyxPQUFPLFVBQVUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7WUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJRyxjQUFXLEVBQUUsQ0FBQzthQUN0RDtZQUNELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDOztZQUU1QyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDMUQsb0JBQW9CLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7O1lBRW5FLE1BQU0sQ0FBQyxRQUFRO2lCQUNWLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUM7aUJBQzlCLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUM7aUJBQzdCLEtBQUssQ0FBQyxHQUFHLENBQUM7aUJBQ1YsYUFBYSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMvQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDOzs7WUFHOUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3ZELE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7O1lBRS9FLGFBQWEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUM7O1lBRXpFLElBQUksR0FBRyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ2xDLElBQUksR0FBRyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOzs7WUFHbEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDcEUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMxQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNoQixNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFOUIsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7Z0JBQzlCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO2FBQ25CO2lCQUNJO2dCQUNELE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDO2FBQ3ZDO1lBQ0QsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckIsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7WUFFcEIsT0FBTyxNQUFNLENBQUM7U0FDakIsQ0FBQztLQUNMLEdBQUc7O0lBRUosbUJBQW1CLEVBQUUsVUFBVSxLQUFLLEVBQUU7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFO1lBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLElBQUlILGFBQWlCLEVBQUUsQ0FBQztTQUNyRDtRQUNELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDOztRQUVyQyxNQUFNLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakQsTUFBTSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDOztRQUVsRSxPQUFPLE1BQU0sQ0FBQztLQUNqQjs7Ozs7OztJQU9ELE9BQU8sRUFBRSxVQUFVLFFBQVEsRUFBRTtRQUN6QixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQzs7UUFFbEMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xDOztRQUVELEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNyQzs7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7O1FBRXJDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHO1lBQ3BCLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLG1CQUFtQixFQUFFLENBQUM7WUFDdEIsWUFBWSxFQUFFLENBQUM7U0FDbEIsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDOztRQUV6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNmLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQzdCLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLDBCQUEwQixDQUFDLENBQUM7Z0JBQzFELFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLGdDQUFnQyxDQUFDLENBQUM7Z0JBQ2hFLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLDRCQUE0QixDQUFDLENBQUM7Z0JBQzVELFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3BDO1NBQ0o7O1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztLQUMvQjtDQUNKLENBQUMsQ0FBQzs7Ozs7O0FBTUgsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Ozs7OztBQU10QixhQUFhLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQzs7QUMzM0J0Qjs7OztBQUlBLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLHVDQUF1Qzs7Ozs7SUFLL0QsS0FBSyxFQUFFLElBQUk7Ozs7O0lBS1gsTUFBTSxFQUFFLElBQUk7Ozs7O0lBS1osUUFBUSxFQUFFLElBQUk7Q0FDakIsRUFBRSxZQUFZO0lBQ1gsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztDQUM3Qjs7QUFFRDs7Ozs7Ozs7O0lBU0ksSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUU7UUFDaEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMvQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7S0FDekI7Ozs7Ozs7Ozs7SUFVRCxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUU7UUFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7O1FBRTFDLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDOztRQUV0QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksSUFBSSxLQUFLLENBQUMsQ0FBQzs7UUFFL0QsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQzs7UUFFM0MsT0FBTyxNQUFNLENBQUM7S0FDakI7O0lBRUQsY0FBYyxFQUFFLFVBQVUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUU7UUFDL0MsSUFBSSxDQUFDLElBQUksWUFBWSxVQUFVLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ3JELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksWUFBWTs7O29CQUdoQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRTs7dUJBRTVELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUzt1QkFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJO2lCQUN4QjtjQUNIO2dCQUNFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDeEM7U0FDSjtRQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQzdEO0tBQ0o7O0lBRUQsb0JBQW9CLEVBQUUsQ0FBQyxZQUFZOztRQUUvQixJQUFJLEVBQUUsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLElBQUksRUFBRSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN2QixJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksWUFBWSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7O1FBRWpDLE9BQU8sVUFBVSxVQUFVLEVBQUUsR0FBRyxFQUFFOztZQUU5QixJQUFJLGFBQWEsR0FBRyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDL0MsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDOzs7WUFHeEQsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDaEIsR0FBRyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNwQzs7WUFFRCxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDOztZQUVuQyxJQUFJLElBQUksR0FBRyxhQUFhLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQzs7WUFFbEYsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3pDLE9BQU87YUFDVjs7WUFFRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2YsUUFBUSxDQUFDLElBQUk7b0JBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN4QixJQUFJLENBQUMsUUFBUTtvQkFDYixJQUFJLENBQUMsTUFBTTtvQkFDWCxVQUFVLEVBQUUsR0FBRztpQkFDbEIsQ0FBQztnQkFDRixPQUFPO2FBQ1Y7O2lCQUVJLElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRTtnQkFDekIsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QyxPQUFPO2FBQ1Y7O1lBRUQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsR0FBRzs0QkFDMUUsVUFBVSxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDOztZQUU1RixJQUFJLEtBQUssQ0FBQztZQUNWLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFDL0IsSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDaEQsSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDNUMsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDMUMsSUFBSSxpQkFBaUIsQ0FBQztZQUN0QixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7O1lBRXRCLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNsRCxPQUFPO2FBQ1Y7WUFDRCxJQUFJLGFBQWEsRUFBRTtnQkFDZixpQkFBaUIsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQy9DLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUN4QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUN6QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztxQkFDdEQ7aUJBQ0o7Z0JBQ0QsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNmLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksbUJBQW1CLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUM7Z0JBQzlELElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRTtvQkFDcEQsUUFBUSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3BELG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDO29CQUMxRCxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUNsRDtnQkFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDM0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3pCLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUMxQixTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDeEIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUU7NEJBQ25DLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDckQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDNUQ7cUJBQ0o7b0JBQ0QsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztpQkFDMUM7YUFDSjs7WUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN4QyxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksWUFBWSxHQUFHLGFBQWE7c0JBQzFCLFFBQVEsQ0FBQyxVQUFVLENBQUMsZUFBZTtzQkFDbkMsWUFBWSxDQUFDO2dCQUNuQixZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0IsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDOztnQkFFL0IsSUFBSSxRQUFRLEVBQUU7b0JBQ1YsS0FBSyxHQUFHLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ2pFO3FCQUNJO29CQUNELEtBQUssR0FBRyxHQUFHLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUNqRTtnQkFDRCxJQUFJLEtBQUssRUFBRTtvQkFDUCxJQUFJLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsYUFBYSxFQUFFO3dCQUNoQixPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO3FCQUNuRTt5QkFDSTs7d0JBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7cUJBQy9CO29CQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsWUFBWTt3QkFDaEMsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO3dCQUM5QyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztxQkFDekMsQ0FBQyxDQUFDO2lCQUNOO2FBQ0o7U0FDSixDQUFDO0tBQ0wsR0FBRzs7SUFFSix3QkFBd0IsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDdEMsT0FBTyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7S0FDbEM7Q0FDSixDQUFDLENBQUM7Ozs7Ozs7Ozs7O0FBV0gsVUFBVSxDQUFDLFlBQVksR0FBRyxVQUFVLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFOzs7OztJQUs5RixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzs7Ozs7SUFLbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7Ozs7O0lBSzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOzs7OztJQUtyQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQzs7OztJQUl6QixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQzs7Ozs7SUFLbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7Q0FDNUIsQ0FBQzs7QUNsUUY7QUFDQSxBQVVBLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQzs7QUFFWixBQUVBLElBQUlNLFNBQU8sR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRW5ELEFBbUNBLFNBQVMsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7SUFDN0IsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRWxCLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtRQUNiLE9BQU8sR0FBRyxDQUFDO0tBQ2Q7U0FDSSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7UUFDbEIsT0FBTyxDQUFDLENBQUM7S0FDWjtTQUNJLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtRQUNsQixPQUFPLENBQUMsQ0FBQztLQUNaO1NBQ0ksSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sQ0FBQyxDQUFDO0tBQ1o7U0FDSSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7UUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2hCO1NBQ0ksSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNoQjtTQUNJLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtRQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDaEI7U0FDSSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7UUFDbEIsT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDNUI7U0FDSTtRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3hCO0NBQ0o7O0FBRUQsSUFBSSxlQUFlLEdBQUc7SUFDbEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUMxQixDQUFDOzs7QUFHRixTQUFTLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtJQUNuRSxJQUFJLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMzQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDMUIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBR0EsU0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUNBLFNBQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUVwQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0IsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNWLElBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQ0EsU0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTs7b0JBRTVCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O29CQUUxQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO29CQUMzQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDOztvQkFFL0IsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3JELFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNyRCxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7b0JBRXJELEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7b0JBQzdCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7b0JBQzdCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7O29CQUU3QixJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO29CQUNyQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO29CQUNsQixLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO29CQUNsQixLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDOztvQkFFbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O29CQUV4RixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3pCO2FBQ0o7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztTQUM3RDs7UUFFRCxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDL0IsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNuQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ3RDO0lBQ0QsT0FBTyxLQUFLLENBQUM7Q0FDaEI7Ozs7Ozs7OztBQVNELEVBQUUsQ0FBQyxxQkFBcUIsR0FBRyxVQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzs7O0lBSXpELElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ2xCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7O0lBRXpCLElBQUksTUFBTSxDQUFDO0lBQ1gsSUFBSSxVQUFVLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUM3QixJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7SUFDZCxJQUFJLE1BQU0sQ0FBQyxXQUFXLEtBQUssV0FBVyxFQUFFO1FBQ3BDLE1BQU0sR0FBRyxJQUFJSSxRQUFPLENBQUM7WUFDakIsS0FBSyxFQUFFLFVBQVU7WUFDakIsY0FBYyxFQUFFLE1BQU07U0FDekIsQ0FBQyxDQUFDO0tBQ047U0FDSTtRQUNELElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDaEYsTUFBTSxHQUFHLElBQUlOLFFBQU0sQ0FBQztZQUNoQixLQUFLLEVBQUUsVUFBVTtZQUNqQixjQUFjLEVBQUUsTUFBTTtTQUN6QixDQUFDLENBQUM7S0FDTjs7SUFFRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRCxJQUFJLFdBQVcsR0FBRyxJQUFJLFNBQVMsQ0FBQztRQUM1QixLQUFLLEVBQUUsS0FBSztRQUNaLE1BQU0sRUFBRSxNQUFNO0tBQ2pCLENBQUMsQ0FBQztJQUNILElBQUksV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDcEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ2xELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNqQixNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7S0FDckQ7SUFDRCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLElBQUksVUFBVSxHQUFHLElBQUksa0JBQWtCLENBQUM7UUFDcEMsT0FBTyxFQUFFLFdBQVc7S0FDdkIsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBR0UsU0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNyQyxVQUFVLENBQUNBLFNBQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLEtBQUssR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQ0EsU0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDaEIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVTtZQUNsQixDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNO1lBQ25CLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUNBLFNBQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5RCxDQUFDO1FBQ0YsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNoQzs7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pCLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7SUFFOUIsT0FBTyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztDQUN4RSxDQUFDOztBQ3BORjs7Ozs7Ozs7OztBQVVBLEFBZ0NBLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUM7O0FBRXhDLEFBSUEsSUFBSSxTQUFTLEdBQUcsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVztJQUN0RSxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVc7SUFDckMsWUFBWSxFQUFFLGdCQUFnQjtDQUNqQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlGRixTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFOztJQUV2QixLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUNwQixLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDOztJQUVwQyxJQUFJLEtBQUssQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFO1FBQzFCLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0tBQzNCOztJQUVELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO1FBQ3pCLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3JDOztJQUVELElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUU7O0lBRTdDLElBQUksV0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVE7V0FDeEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxRQUFRLENBQUM7O0lBRS9DLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN0QixXQUFXLEtBQUssWUFBWSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQyxLQUFLLENBQUMsZ0JBQWdCLEtBQUssWUFBWSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDOztJQUVuRixJQUFJLFNBQVMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzQyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUM7SUFDNUMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDOztJQUUvQyxJQUFJLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ3pCLElBQUksU0FBUyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7SUFDL0IsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUM5RCxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksVUFBVSxDQUFDO1FBQzVDLEtBQUssRUFBRSxNQUFNO1FBQ2IsUUFBUSxFQUFFLFNBQVM7S0FDdEIsQ0FBQyxDQUFDOztJQUVILENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDOztJQUVsRCxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQzs7SUFFbEMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQzs7SUFFckIsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDOztJQUVsQixJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDckIsS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1FBQzNCLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDM0Q7O0lBRUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRTs7Ozs7O1FBTTFCLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxFQUFFOzs7OztRQUsvQyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBQzs7Ozs7UUFLbkQsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLE1BQU0sQ0FBQyxFQUFFLENBQUM7Ozs7O1FBSzdDLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxTQUFTLENBQUMsRUFBRSxDQUFDOzs7Ozs7UUFNbkQsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFVBQVUsQ0FBQyxFQUFFLENBQUM7Ozs7OztRQU1yRCxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sWUFBWSxDQUFDLEVBQUUsQ0FBQzs7Ozs7OztRQU96RCxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQzs7Ozs7O1FBTTNELE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDOzs7Ozs7O1FBTzdELE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxXQUFXLENBQUMsRUFBRSxFQUFFOztRQUVyRCxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sV0FBVyxDQUFDLEVBQUUsRUFBRTs7UUFFekQsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLEtBQUssQ0FBQyxFQUFFLEVBQUU7S0FDakQsQ0FBQyxDQUFDOzs7Ozs7Ozs7SUFTSCxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRTtRQUNuQyxNQUFNLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUNqRCxPQUFPLEdBQUcsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQztRQUNuRCxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNyQyxDQUFDOzs7Ozs7SUFNRixJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVk7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7O1FBRXRCLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUNmLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdkI7UUFDRCxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakIsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixXQUFXLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQzs7UUFFOUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDbkIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRTtZQUNqQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUMvRixFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ1osQ0FBQzs7SUFFRixXQUFXLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDOztJQUVsRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUloQixLQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJQSxLQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7OztJQUdsQyxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUN4QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQzs7O0lBRzFCLElBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7O0lBRWxFLFdBQVcsS0FBSyxXQUFXLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDOztJQUU3RCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtRQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztLQUNyQzs7SUFFRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7SUFDaEIsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZO1FBQ3pCLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQVUsU0FBUyxFQUFFO1lBQ3ZDLFVBQVUsR0FBRyxTQUFTLENBQUM7WUFDdkIsWUFBWSxJQUFJLFNBQVMsQ0FBQzs7WUFFMUIsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3BDLElBQUksTUFBTSxFQUFFO2dCQUNSLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUM7YUFDakQ7WUFDRCxXQUFXLEtBQUssV0FBVyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQzs7WUFFN0MsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOztZQUUvQixJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNqQjs7WUFFRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUMzQixFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ1osQ0FBQyxDQUFDOztJQUVILE1BQU0sQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLFVBQVUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFO1FBQ3JFLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTs7WUFFaEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzVFO0tBQ0osRUFBRSxJQUFJLENBQUMsQ0FBQztDQUNaOztBQUVELFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFO0lBQzdCLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxXQUFXLElBQUksR0FBRyxZQUFZLEtBQUs7WUFDcEQsT0FBTyxpQkFBaUIsS0FBSyxXQUFXLElBQUksR0FBRyxZQUFZLGlCQUFpQixDQUFDO1lBQzdFLE9BQU8sZ0JBQWdCLEtBQUssV0FBVyxJQUFJLEdBQUcsWUFBWSxnQkFBZ0IsQ0FBQyxDQUFDO0NBQ3ZGOztBQUVELFNBQVMsbUJBQW1CLENBQUMsR0FBRyxFQUFFO0lBQzlCLE9BQU8sT0FBTyxHQUFHLEtBQUssUUFBUTtVQUN4QixHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sS0FBSyxHQUFHLENBQUMsT0FBTyxHQUFHaEIsTUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztDQUMvRDs7QUFFRCxTQUFTLGVBQWUsQ0FBQyxPQUFPLEVBQUU7SUFDOUIsT0FBTyxHQUFHLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FBQztDQUNwQzs7QUFFRCxTQUFTLFlBQVksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFO0lBQ3ZFLElBQUksS0FBSyxHQUFHQSxNQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25DLEtBQUssQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0lBQ3ZCLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3hCLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3hCLElBQUksVUFBVSxLQUFLLElBQUksRUFBRTtRQUNyQixLQUFLLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztLQUNqQztJQUNELE9BQU8sS0FBSyxDQUFDO0NBQ2hCOztBQUVELFNBQVMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7SUFDbEMsT0FBTyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFO1FBQ2xDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0tBQy9CO0NBQ0o7O0FBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLFVBQVUsRUFBRTtJQUNyRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDOztJQUV6QixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDckIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLFFBQVEsRUFBRTtRQUNsQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLEVBQUU7WUFDbEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3BCLE9BQU87YUFDVjtZQUNELENBQUMsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDOztZQUV2QyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUN0QyxJQUFJLE9BQU8sRUFBRSxPQUFPLENBQUM7WUFDckIsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDOztZQUV2QixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMvQixJQUFJLEtBQUssR0FBRyxPQUFPLEtBQUssVUFBVTtzQkFDNUIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7c0JBQ2xCLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLElBQUksT0FBTyxLQUFLLFlBQVksRUFBRTtvQkFDMUIsT0FBTyxHQUFHLFdBQVcsQ0FBQztpQkFDekI7cUJBQ0ksSUFBSSxPQUFPLEtBQUssVUFBVSxFQUFFO29CQUM3QixPQUFPLEdBQUcsU0FBUyxDQUFDO2lCQUN2QjtxQkFDSSxJQUFJLE9BQU8sS0FBSyxXQUFXLEVBQUU7b0JBQzlCLE9BQU8sR0FBRyxXQUFXLENBQUM7aUJBQ3pCO2dCQUNELE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ25DLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7YUFDckM7aUJBQ0k7Z0JBQ0QsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDL0IsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQzthQUNqQzs7WUFFRCxJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQzs7WUFFbkQsSUFBSSxLQUFLLENBQUM7WUFDVixJQUFJLE9BQU8sS0FBSyxnQkFBZ0IsSUFBSSxPQUFPLEtBQUssWUFBWSxFQUFFO2dCQUMxRCxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdEU7O1lBRUQsSUFBSSxVQUFVLEVBQUU7O2dCQUVaLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7b0JBQzFCLE9BQU87aUJBQ1Y7O2dCQUVELElBQUksT0FBTyxLQUFLLFdBQVcsRUFBRTs7b0JBRXpCLElBQUksYUFBYSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDO29CQUNwRCxJQUFJLGFBQWEsRUFBRTt3QkFDZixTQUFTLElBQUksYUFBYSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFOzRCQUMzRCxNQUFNLEVBQUUsU0FBUzt5QkFDcEIsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztxQkFDekI7b0JBQ0QsYUFBYSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQzFGLElBQUksYUFBYSxFQUFFO3dCQUNmLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO3FCQUM3RjtpQkFDSjtxQkFDSTtvQkFDRCxhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQ2hHO2dCQUNELFNBQVMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2pDO2lCQUNJLElBQUksU0FBUyxFQUFFO2dCQUNoQixhQUFhLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUU7b0JBQzlDLE1BQU0sRUFBRSxTQUFTO2lCQUNwQixFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixTQUFTLEdBQUcsSUFBSSxDQUFDO2FBQ3BCO1NBQ0osQ0FBQyxDQUFDO0tBQ04sRUFBRSxJQUFJLENBQUMsQ0FBQztDQUNaLENBQUM7O0FBRUYsS0FBSyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsR0FBRyxVQUFVLFdBQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQzNFLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7SUFDbEQsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7O0lBRXpDLElBQUksWUFBWSxDQUFDOztJQUVqQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNsQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQzNCLElBQUksR0FBRyxLQUFLLFlBQVksRUFBRTtZQUN0QixTQUFTO1NBQ1o7O1FBRUQsaUJBQWlCLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDcEcsSUFBSSxhQUFhLEVBQUU7WUFDZixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxRQUFRLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksRUFBRTtnQkFDMUUsVUFBVSxHQUFHLEtBQUssQ0FBQzthQUN0QjtZQUNELFVBQVUsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNwRCxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztTQUN6QzthQUNJO1lBQ0QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDeEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDM0M7O1FBRUQsWUFBWSxHQUFHLEdBQUcsQ0FBQztLQUN0QjtDQUNKLENBQUM7O0FBRUYsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsVUFBVSxRQUFRLEVBQUUsS0FBSyxFQUFFO0lBQ25ELElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNuQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDeEMsQ0FBQzs7Ozs7QUFLRixLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxZQUFZO0lBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDeEIsS0FBSyxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDOztJQUUvQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3ZCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDN0IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQzs7SUFFbEMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2YsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLEtBQUssQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzs7SUFFaEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDOztJQUU1RCxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs7SUFFN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDOztJQUV0QyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Q0FDMUIsQ0FBQzs7QUFFRixLQUFLLENBQUMsU0FBUyxDQUFDLGdCQUFnQixHQUFHLFlBQVk7SUFDM0MsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUM3QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3ZCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDdEMsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQzs7SUFFMUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3pCLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQzs7O0lBRzNCLElBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUN6QixJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztJQUMzQixnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixDQUFDLENBQUM7OztJQUc1RCxlQUFlLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7O0lBRTFDLElBQUksQ0FBQyxhQUFhLEdBQUcsZUFBZSxDQUFDO0lBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsaUJBQWlCLENBQUM7Q0FDNUMsQ0FBQzs7O0FBR0YsU0FBUyxVQUFVLENBQUMsWUFBWSxFQUFFO0lBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQzlCO0NBQ0o7O0FBRUQsU0FBUyxlQUFlLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRTtJQUM3QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUN6QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3JDO0tBQ0o7Q0FDSjs7QUFFRCxTQUFTLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFO0lBQ2hDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDdkMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2xCLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O1FBRXZCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDdkI7Q0FDSjtBQUNELFNBQVMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFO0lBQ3hFLElBQUksWUFBWSxDQUFDO0lBQ2pCLElBQUksWUFBWSxDQUFDO0lBQ2pCLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxVQUFVLEVBQUU7UUFDakMsSUFBSSxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDM0IsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNuQyxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDOzs7WUFHbkMsSUFBSSxRQUFRLEtBQUssWUFBWSxFQUFFO2dCQUMzQixJQUFJLGVBQWUsR0FBRyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDcEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzdDLElBQUksV0FBVyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBQy9DLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUN0RCxJQUFJLENBQUMsR0FBRyxFQUFFO3dCQUNOLFNBQVM7cUJBQ1o7b0JBQ0QsSUFBSSxXQUFXLEtBQUssR0FBRyxFQUFFO3dCQUNyQixVQUFVLENBQUMsR0FBRyxFQUFFLG1CQUFtQixDQUFDLENBQUM7cUJBQ3hDO3lCQUNJLElBQUksV0FBVyxLQUFLLElBQUksRUFBRTt3QkFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7NEJBQ2pDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dDQUNSLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsQ0FBQzs2QkFDM0M7eUJBQ0o7cUJBQ0o7aUJBQ0o7YUFDSjtZQUNELElBQUksUUFBUSxLQUFLLFlBQVksRUFBRTtnQkFDM0IsVUFBVSxDQUFDLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO2FBQzlDOztZQUVELFlBQVksR0FBRyxRQUFRLENBQUM7WUFDeEIsWUFBWSxHQUFHLFFBQVEsQ0FBQztTQUMzQjtLQUNKLENBQUMsQ0FBQzs7SUFFSCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O1FBRTFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7WUFDekIsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLG1CQUFtQixDQUFDLENBQUM7U0FDNUQ7S0FDSjtDQUNKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQkQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsVUFBVSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUM5RCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7SUFDaEIsSUFBSSxHQUFHLEdBQUcsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsSUFBSSxRQUFRLEVBQUU7UUFDVixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbEM7S0FDSjs7SUFFRCxJQUFJLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7UUFDakQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUN6QixPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVk7Z0JBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtvQkFDaEIsT0FBTztpQkFDVjtnQkFDRCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDcEIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZO2dCQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ2hCLE9BQU87aUJBQ1Y7Z0JBQ0QsTUFBTSxFQUFFLENBQUM7YUFDWixDQUFDLENBQUM7U0FDTjthQUNJO1lBQ0QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3BCO0tBQ0osQ0FBQyxDQUFDO0lBQ0gsSUFBSSxRQUFRLEVBQUU7UUFDVixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDcEM7SUFDRCxPQUFPLE9BQU8sQ0FBQztDQUNsQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JGLEtBQUssQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLFVBQVUsUUFBUSxFQUFFLElBQUksRUFBRTtJQUN4RCxJQUFJLE9BQU8sR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRTtRQUM5QixJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsdUNBQXVDLENBQUMsRUFBRTtZQUN6RCxPQUFPLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3hDLFFBQVEsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVE7Z0JBQy9CLFFBQVEsRUFBRSxLQUFLO2FBQ2xCLEVBQUUsWUFBWTtnQkFDWCxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDOUIsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7Z0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDNUI7U0FDSjthQUNJO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMxQjtLQUNKO1NBQ0ksSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNuQyxPQUFPLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztRQUN6QixPQUFPLENBQUMsT0FBTyxHQUFHLFFBQVEsWUFBWSxnQkFBZ0IsQ0FBQztLQUMxRDtJQUNELE9BQU8sT0FBTyxDQUFDO0NBQ2xCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkYsS0FBSyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEdBQUcsVUFBVSxPQUFPLEVBQUUsSUFBSSxFQUFFO0lBQ3ZELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7UUFDMUMsSUFBSSxXQUFXLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDNUIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3hCO2FBQ0k7WUFDRCxXQUFXLENBQUMsT0FBTyxDQUFDLFlBQVk7Z0JBQzVCLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUN4QixDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVk7Z0JBQ2pCLE1BQU0sRUFBRSxDQUFDO2FBQ1osQ0FBQyxDQUFDO1NBQ047S0FDSixDQUFDLENBQUM7Q0FDTixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFlRixLQUFLLENBQUMsU0FBUyxDQUFDLG1CQUFtQixHQUFHLFVBQVUsT0FBTyxFQUFFLElBQUksRUFBRTtJQUMzRCxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0lBQ2pDLElBQUksV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUU7UUFDcEcsTUFBTSxJQUFJLEtBQUssQ0FBQyx5RUFBeUUsQ0FBQyxDQUFDO0tBQzlGO0lBQ0QsSUFBSSxPQUFPLE9BQU8sQ0FBQyxFQUFFLEtBQUssUUFBUSxFQUFFO1FBQ2hDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDN0I7U0FDSTtRQUNELFdBQVcsQ0FBQyxLQUFLLEdBQUdBLE1BQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDM0M7SUFDRCxPQUFPLFdBQVcsQ0FBQztDQUN0QixDQUFDOzs7Ozs7Ozs7Ozs7OztBQWNGLEtBQUssQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLFVBQVUsU0FBUyxFQUFFO0lBQ2xELFNBQVMsR0FBRyxTQUFTLElBQUksRUFBRSxDQUFDO0lBQzVCLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQztJQUN6RCxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxZQUFZLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHeUIsT0FBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekcsSUFBSSxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUM7UUFDeEIsTUFBTSxFQUFFLE1BQU07S0FDakIsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFO1FBQ2hCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztLQUNsQzs7SUFFRCxJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDekIsU0FBUyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7UUFDNUIsT0FBTyxVQUFVLE9BQU8sRUFBRTtZQUN0QixRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNsQyxTQUFTLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sT0FBTyxDQUFDO1NBQ2xCLENBQUM7S0FDTDtJQUNELEtBQUssSUFBSSxHQUFHLElBQUksU0FBUyxFQUFFO1FBQ3ZCLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN4QixJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLENBQUM7bUJBQzVELEVBQUUsR0FBRyxZQUFZLE9BQU8sQ0FBQztjQUM5Qjs7Z0JBRUUsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtvQkFDdkMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxtQkFBbUIsSUFBSSxLQUFLO29CQUNwRCxLQUFLLEVBQUUsU0FBUyxDQUFDLFlBQVksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQyxZQUFZO2lCQUN4RSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNwQztpQkFDSTtnQkFDRCxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNqQztTQUNKO0tBQ0o7O0lBRUQsSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFO1FBQ3ZCLFNBQVMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzVCLFNBQVMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0tBQ2hDOzs7SUFHRCxJQUFJLFNBQVMsQ0FBQyxhQUFhLEVBQUU7UUFDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxRQUFRLEVBQUU7WUFDbEQsU0FBUyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNyQyxDQUFDLENBQUM7S0FDTjs7SUFFRCxPQUFPLFFBQVEsQ0FBQztDQUNuQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQWNGLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLFVBQVUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7SUFDakUsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO1FBQ2hCLE1BQU0sR0FBRyxDQUFDLENBQUM7S0FDZDtJQUNELElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1FBQzVCLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDckM7O0lBRUQsSUFBSSxNQUFNLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsSUFBSSxDQUFDLElBQUksRUFBRTtRQUNQLElBQUksR0FBRyxJQUFJWSxNQUFPLENBQUM7WUFDZixhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN4QixjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN6QixhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUMzQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDcEM7SUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUN0RCxDQUFDOzs7Ozs7Ozs7Ozs7OztBQWNGLEtBQUssQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTtJQUN2RSxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7UUFDaEIsTUFBTSxHQUFHLENBQUMsQ0FBQztLQUNkO0lBQ0QsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7UUFDNUIsTUFBTSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNyQztJQUNELElBQUksTUFBTSxHQUFHLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDUCxJQUFJLEdBQUcsSUFBSUEsTUFBTyxDQUFDO1lBQ2YsTUFBTSxFQUFFLElBQUk7WUFDWixhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN4QixjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN6QixhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUMzQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDcEM7O0lBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7Q0FDdEQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQkYsS0FBSyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsVUFBVSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRTtJQUN4RSxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUU7UUFDckIsV0FBVyxHQUFHLEVBQUUsQ0FBQztLQUNwQjtJQUNELElBQUksTUFBTSxHQUFHLFNBQVMsR0FBRyxXQUFXLENBQUM7SUFDckMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUNULE1BQU0sR0FBRyxJQUFJQyxRQUFTLENBQUM7WUFDbkIsYUFBYSxFQUFFLFdBQVcsR0FBRyxDQUFDO1lBQzlCLGNBQWMsRUFBRSxXQUFXO1NBQzlCLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztLQUN0QztJQUNELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0NBQ3hELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJGLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLFVBQVUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7SUFDbEUsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO1FBQ2hCLE1BQU0sR0FBRyxDQUFDLENBQUM7S0FDZDtJQUNELElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1FBQzVCLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztLQUM3QjtJQUNELElBQUksTUFBTSxHQUFHLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDWCxRQUFRLEdBQUcsSUFBSUMsT0FBUSxDQUFDO1lBQ3BCLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQzVCLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztLQUN4QztJQUNELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0NBQzFELENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBY0YsS0FBSyxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsR0FBRyxVQUFVLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFO0lBQ2pGLElBQUksR0FBRyxHQUFHLElBQUlDLG1CQUFvQixDQUFDO1FBQy9CLFNBQVMsRUFBRSxTQUFTO0tBQ3ZCLENBQUMsQ0FBQztJQUNILEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3ZCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0NBQ3JELENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsVUFBVSxRQUFRLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRTtJQUM5RCxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQztRQUNoQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsR0FBRyxZQUFZLFFBQVEsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7S0FDckUsQ0FBQyxDQUFDO0lBQ0gsVUFBVSxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckIsT0FBTyxJQUFJLENBQUM7Q0FDZixDQUFDOzs7Ozs7O0FBT0YsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsVUFBVSxVQUFVLEVBQUU7SUFDL0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUN0QixVQUFVLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQixPQUFPLElBQUksQ0FBQztDQUNmLENBQUM7Ozs7Ozs7Ozs7QUFVRixLQUFLLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRyxVQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtJQUNyRSxJQUFJLFVBQVUsQ0FBQztJQUNmLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNwQixJQUFJLElBQUksS0FBSyxPQUFPLElBQUksSUFBSSxLQUFLLGNBQWMsRUFBRTtRQUM3QyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsVUFBVSxHQUFHYixjQUFrQixDQUFDO0tBQ25DO1NBQ0k7UUFDRCxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssYUFBYSxFQUFFO1lBQ2hDLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLEdBQUcsSUFBSSxHQUFHLGtDQUFrQyxDQUFDLENBQUM7U0FDcEY7UUFDRCxVQUFVLEdBQUdELGFBQWlCLENBQUM7S0FDbEM7O0lBRUQsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUM5QixJQUFJLFFBQVEsWUFBWSxPQUFPLEVBQUU7UUFDN0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDbEM7U0FDSSxJQUFJLFFBQVEsWUFBWSxLQUFLLEVBQUU7UUFDaEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDdEM7O0lBRUQsSUFBSSxNQUFNLFlBQVksS0FBSyxFQUFFO1FBQ3pCLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pEO0lBQ0QsSUFBSSxNQUFNLFlBQVksT0FBTyxFQUFFO1FBQzNCLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDekI7O0lBRUQsSUFBSSxNQUFNLElBQUksT0FBTyxFQUFFO1FBQ25CLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztRQUNoQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzFCO1NBQ0k7UUFDRCxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztLQUNyRDs7SUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7SUFFdkIsT0FBTyxNQUFNLENBQUM7Q0FDakIsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixLQUFLLENBQUMsU0FBUyxDQUFDLHNCQUFzQixHQUFHLFVBQVUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7SUFDdEUsSUFBSSxLQUFLLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0lBQ25DLElBQUksR0FBRyxZQUFZLE9BQU8sRUFBRTtRQUN4QixHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztLQUNuQjtJQUNELEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3RDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzNCLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDN0I7SUFDRCxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDdkMsU0FBUyxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDOztJQUVuRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QixPQUFPLEtBQUssQ0FBQztDQUNoQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFlRixLQUFLLENBQUMsU0FBUyxDQUFDLGVBQWUsR0FBRyxVQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRTtJQUM5RyxJQUFJLEtBQUssR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0lBQzVCLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsWUFBWSxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQzs7SUFFakYsSUFBSSxNQUFNLFlBQVksS0FBSyxFQUFFO1FBQ3pCLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pEO0lBQ0QsSUFBSSxNQUFNLFlBQVksT0FBTyxFQUFFO1FBQzNCLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDeEI7O0lBRUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDM0IsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM3QjtJQUNELEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztJQUN2QyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDdkMsU0FBUyxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELFVBQVUsSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQztJQUN0RCxhQUFhLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDLENBQUM7O0lBRS9ELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDOztJQUV0QixPQUFPLEtBQUssQ0FBQztDQUNoQixDQUFDOzs7Ozs7Ozs7QUFTRixLQUFLLENBQUMsU0FBUyxDQUFDLGdCQUFnQixHQUFHLFVBQVUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQzVFLElBQUksS0FBSyxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7SUFDN0IsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxZQUFZLE9BQU8sR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDOztJQUVqRixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUMzQixLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzdCO0lBQ0QsS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztJQUN2QyxTQUFTLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUM7O0lBRW5ELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDOztJQUV0QixPQUFPLEtBQUssQ0FBQztDQUNoQixDQUFDOzs7Ozs7O0FBT0YsS0FBSyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLEtBQUssRUFBRSxTQUFTLEVBQUU7SUFDN0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQzs7SUFFL0IsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDM0IsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM3QjtJQUNELEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztJQUN2QyxTQUFTLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUM7O0lBRW5ELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDOztJQUV0QixPQUFPLEtBQUssQ0FBQztDQUNoQixDQUFDOzs7Ozs7Ozs7Ozs7QUFZRixLQUFLLENBQUMsU0FBUyxDQUFDLHlCQUF5QixHQUFHLFVBQVUsUUFBUSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixFQUFFO0lBQzVILElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztJQUNoQixJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7UUFDbEIsUUFBUSxHQUFHLENBQUMsQ0FBQztLQUNoQjtJQUNELElBQUksc0JBQXNCLElBQUksSUFBSSxFQUFFO1FBQ2hDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztLQUMvQjs7SUFFRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDOztJQUV2QixJQUFJLFdBQVcsQ0FBQztJQUNoQixJQUFJLFFBQVEsQ0FBQyxXQUFXLEtBQUssYUFBYSxFQUFFO1FBQ3hDLFdBQVcsR0FBRyxRQUFRLENBQUMsWUFBWSxFQUFFO2NBQy9CLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO2NBQ3pCLElBQUksT0FBTyxDQUFDLFVBQVUsT0FBTyxFQUFFLE1BQU0sRUFBRTtnQkFDckMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZO29CQUN6QixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ3JCLENBQUMsQ0FBQzthQUNOLENBQUMsQ0FBQztLQUNWO1NBQ0k7UUFDRCxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7WUFDckMsUUFBUSxFQUFFLFFBQVE7U0FDckIsQ0FBQyxDQUFDO0tBQ047O0lBRUQsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsVUFBVSxFQUFFO1FBQzFDLElBQUksU0FBUyxHQUFHLElBQUksbUJBQW1CLENBQUM7WUFDcEMsU0FBUyxFQUFFLGFBQWEsSUFBSSxJQUFJLEdBQUcsYUFBYSxHQUFHLEdBQUc7U0FDekQsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7UUFDL0IsVUFBVSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7O1FBRXpCLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQzs7UUFFdkMsSUFBSSxTQUFTLEdBQUcsSUFBSSxjQUFjLENBQUM7WUFDL0IsU0FBUyxFQUFFLGFBQWEsSUFBSSxJQUFJLEdBQUcsYUFBYSxHQUFHLEdBQUc7WUFDdEQsWUFBWSxFQUFFZSxFQUFNLENBQUMscUJBQXFCO2dCQUN0QyxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUU7b0JBQzlCLEdBQUcsRUFBRSxDQUFDO2lCQUNUO2FBQ0o7U0FDSixDQUFDLENBQUM7UUFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JCLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7O1FBRXJCLE9BQU87WUFDSCxRQUFRLEVBQUUsU0FBUztZQUNuQixPQUFPLEVBQUUsU0FBUzs7WUFFbEIsY0FBYyxFQUFFLFVBQVU7U0FDN0IsQ0FBQztLQUNMLENBQUMsQ0FBQztDQUNOLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCRixLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0lBQ3pELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7S0FDbkM7O0lBRUQsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDbEIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxFQUFFO1FBQ2hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7S0FDakM7SUFDRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLGVBQWUsQ0FBQzs7SUFFNUMsSUFBSSxVQUFVLEdBQUc7UUFDYixRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUU7UUFDcEIsTUFBTSxFQUFFLE1BQU07UUFDZCxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7UUFDckMsV0FBVyxFQUFFLFdBQVc7UUFDeEIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1FBQy9CLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7S0FDaEQsQ0FBQztJQUNGLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLEdBQUcsRUFBRTtRQUNsRCxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ2pFOztJQUVELElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDOztJQUV4QyxVQUFVLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUM3QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7O0lBRWhCLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFO1FBQzFDLFNBQVMsU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUN2QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hCLE9BQU87YUFDVjs7WUFFRCxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDeEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUU7b0JBQ2pDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzFCLENBQUMsQ0FBQzthQUNOO1lBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ25CO1FBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRTtZQUM3QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hCLE9BQU87YUFDVjs7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUN6QixTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDckI7aUJBQ0k7Z0JBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLE9BQU8sRUFBRTtvQkFDL0MsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUU7d0JBQ3hCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztxQkFDbkM7b0JBQ0QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRTt3QkFDbEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztxQkFDMUIsQ0FBQyxDQUFDO2lCQUNOLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZO29CQUNqQixTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3JCLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWTtvQkFDakIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNyQixDQUFDLENBQUM7YUFDTjtTQUNKLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWTtZQUNyQixNQUFNLEVBQUUsQ0FBQztTQUNaLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDcEIsQ0FBQyxDQUFDO0NBQ04sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFjRixLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxVQUFVLElBQUksRUFBRSxVQUFVLEVBQUU7SUFDcEQsVUFBVSxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7O0lBRTVDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNyRCxJQUFJLFVBQVUsRUFBRTtRQUNaLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDM0I7O0lBRUQsT0FBTyxPQUFPLENBQUM7Q0FDbEIsQ0FBQzs7O0FBR0Ysa0JBQWU7SUFDWCxLQUFLLEVBQUUsS0FBSzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUF1QlosTUFBTSxFQUFFLFVBQVUsR0FBRyxFQUFFLEtBQUssRUFBRTtRQUMxQixPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNoQztDQUNKOztFQUFDLEZDdDFDRjs7Ozs7QUFLQSxTQUFTLElBQUksR0FBRztJQUNaLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0NBQzFCLEFBQUM7Ozs7O0FBS0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsU0FBUyxJQUFJLEVBQUU7SUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDakMsQ0FBQzs7Ozs7QUFLRixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRTtJQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM5QixDQUFDOzs7OztBQUtGLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLFdBQVc7SUFDckMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0NBQzNCLENBQUM7Ozs7O0FBS0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsV0FBVztJQUNuQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7Q0FDekIsQ0FBQzs7Ozs7QUFLRixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxXQUFXO0lBQ2xDLE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO0NBQzdDLENBQUM7O0FBRUZ6QyxNQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7O0FBRXRDLFNBQVMsZUFBZSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUU7SUFDeEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUNmLEdBQUcsRUFBRSxHQUFHO1FBQ1IsWUFBWSxFQUFFLFlBQVk7UUFDMUIsTUFBTSxFQUFFLFNBQVMsR0FBRyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDckI7UUFDRCxPQUFPLEVBQUUsU0FBUyxLQUFLLEVBQUU7WUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQztJQUNILE9BQU8sSUFBSSxDQUFDO0NBQ2Y7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCRCxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsR0FBRyxFQUFFLFlBQVksRUFBRTtJQUMvQyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtRQUN6QixPQUFPLGVBQWUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7S0FDN0M7U0FDSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDZCxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZCxPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUNyRDtTQUNJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN6QixJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDbEIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsRUFBRTtZQUMxQixJQUFJLEdBQUcsRUFBRSxZQUFZLENBQUM7WUFDdEIsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7Z0JBQ3pCLEdBQUcsR0FBRyxHQUFHLENBQUM7YUFDYjtpQkFDSSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUU7Z0JBQzFCLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO2dCQUNkLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO2FBQ25DO1lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7U0FDbEQsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxLQUFLLENBQUM7S0FDaEI7Q0FDSixDQUFDOzs7O0FBSUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXO0lBQ3ZCLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztDQUNyQixDQUFDOztBQUVGQSxNQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7O0FDbkh0Qzs7Ozs7QUFLQSxJQUFJLFNBQVMsR0FBRyxZQUFZOztJQUV4QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQzs7SUFFNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7O0lBRWpCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7O0lBRTFCLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO0NBQzVCLENBQUM7O0FBRUYsSUFBSSxJQUFJLEdBQUcsV0FBVyxFQUFFLENBQUM7QUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ2hDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQzs7QUFFakMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUI1QyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxVQUFVLEtBQUssRUFBRTtJQUN2QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDZCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7SUFDaEIsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDcEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQzs7SUFFekJBLE1BQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVUsSUFBSSxFQUFFLEdBQUcsRUFBRTtRQUNsQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNyQixPQUFPO1NBQ1Y7UUFDRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsR0FBRyxFQUFFO1lBQ2hDLEtBQUssRUFBRSxDQUFDOztZQUVSLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDOzs7O1lBSXhCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDOztZQUV2QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ2hCLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtnQkFDYixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3RCO1NBQ0osQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWTs7WUFFM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDOztZQUV4QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzs7WUFFdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyQixDQUFDLENBQUM7S0FDTixDQUFDLENBQUM7SUFDSCxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7UUFDYixVQUFVLENBQUMsWUFBWTtZQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxPQUFPLElBQUksQ0FBQztDQUNmLENBQUM7Ozs7OztBQU1GLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLFVBQVUsS0FBSyxFQUFFO0lBQzlDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNkLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztJQUNoQixJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7SUFDZCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3BCLFVBQVUsQ0FBQyxZQUFZO1lBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2pDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzs7SUFFcEJBLE1BQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVUsSUFBSSxFQUFFLEdBQUcsRUFBRTtRQUNsQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNyQixPQUFPO1NBQ1Y7UUFDRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsR0FBRyxFQUFFO1lBQ2hDLEtBQUssRUFBRSxDQUFDOztZQUVSLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDOztZQUV4QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzs7WUFFdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUNoQixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN0QjtTQUNKLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsR0FBRyxFQUFFO1lBQzlCLEtBQUssRUFBRSxDQUFDOztZQUVSLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzs7WUFFdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7OztZQUd0QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtnQkFDYixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3RCO1NBQ0osQ0FBQyxDQUFDO0tBQ04sQ0FBQyxDQUFDO0lBQ0gsT0FBTyxJQUFJLENBQUM7Q0FDZixDQUFDOzs7Ozs7QUFNRixTQUFTLENBQUMsU0FBUyxDQUFDLGtCQUFrQixHQUFHLFVBQVUsU0FBUyxFQUFFO0lBQzFELElBQUksU0FBUyxFQUFFO1FBQ1gsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUksSUFBSSxZQUFZLFNBQVMsRUFBRTtnQkFDM0IsVUFBVSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNwRCxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDdkIsVUFBVSxJQUFJLENBQUMsQ0FBQzthQUNuQjtTQUNKO1FBQ0QsT0FBTyxVQUFVLENBQUM7S0FDckIsTUFBTTtRQUNILE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0tBQ2hDO0NBQ0osQ0FBQzs7Ozs7OztBQU9GLFNBQVMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxTQUFTLEVBQUU7SUFDekQsSUFBSSxTQUFTLEVBQUU7UUFDWCxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxJQUFJLFlBQVksU0FBUyxFQUFFO2dCQUMzQixTQUFTLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ2xELE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUN0QixTQUFTLElBQUksQ0FBQyxDQUFDO2FBQ2xCO1NBQ0o7UUFDRCxPQUFPLFNBQVMsQ0FBQztLQUNwQixNQUFNO1FBQ0gsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0tBQy9CO0NBQ0osQ0FBQzs7Ozs7OztBQU9GLFNBQVMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxTQUFTLEVBQUU7O0lBRXhELElBQUksU0FBUyxFQUFFO1FBQ1gsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUksSUFBSSxZQUFZLFNBQVMsRUFBRTtnQkFDM0IsUUFBUSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNoRCxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDO2FBQ2pCO1NBQ0o7UUFDRCxPQUFPLFFBQVEsQ0FBQztLQUNuQixNQUFNO1FBQ0gsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztLQUN2RDtDQUNKLENBQUM7Ozs7Ozs7QUFPRixTQUFTLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxVQUFVLFNBQVMsRUFBRTtJQUNyRCxJQUFJLFNBQVMsRUFBRTtRQUNYLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUksSUFBSSxZQUFZLFNBQVMsRUFBRTtnQkFDM0IsS0FBSyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDMUMsTUFBTTtnQkFDSCxLQUFLLElBQUksQ0FBQyxDQUFDO2FBQ2Q7U0FDSjtRQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2hCLE1BQU07UUFDSCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0tBQzdCO0NBQ0osQ0FBQzs7QUNqT0Y7Ozs7Ozs7Ozs7QUFVQSxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7SUFDekMscURBQXFEOzs7O1FBSWpELElBQUksRUFBRSxFQUFFOzs7Ozs7Ozs7OztRQVdSLFVBQVUsRUFBRSxFQUFFOzs7Ozs7Ozs7OztRQVdkLFdBQVcsRUFBRSxFQUFFOzs7O1FBSWYsbUJBQW1CLEVBQUUsRUFBRTtRQUN2QixlQUFlLEVBQUUsRUFBRTs7O1FBR25CLGlCQUFpQixFQUFFLEVBQUU7O1FBRXJCLFVBQVUsRUFBRSxLQUFLOztRQUVqQixTQUFTLEVBQUUsS0FBSzs7UUFFaEIsV0FBVyxFQUFFLElBQUk7S0FDcEIsQ0FBQztDQUNMOztBQUVEOzs7SUFHSSxlQUFlLEVBQUUsVUFBVSxVQUFVLEVBQUUsUUFBUSxFQUFFO1FBQzdDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUMsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUN2QyxJQUFJLGNBQWMsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDO1FBQ2hELElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDakIsY0FBYyxHQUFHLFVBQVUsQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1NBQ3BEO1FBQ0QsSUFBSSxVQUFVLEVBQUU7WUFDWixLQUFLLElBQUksR0FBRyxJQUFJLFVBQVUsRUFBRTtnQkFDeEIsSUFBSSxHQUFHLEtBQUssT0FBTyxJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUU7b0JBQ3JDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3pDO2FBQ0o7U0FDSjtRQUNELElBQUksS0FBSyxFQUFFLE1BQU0sQ0FBQztRQUNsQixJQUFJLFVBQVUsQ0FBQyxLQUFLLFlBQVksUUFBUSxFQUFFO1lBQ3RDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDakQ7YUFDSTtZQUNELEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxVQUFVLENBQUMsTUFBTSxZQUFZLFFBQVEsRUFBRTtZQUN2QyxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ25EO2FBQ0k7WUFDRCxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztTQUM5QjtRQUNEO1lBQ0ksY0FBYyxDQUFDLEtBQUssS0FBSyxLQUFLO2VBQzNCLGNBQWMsQ0FBQyxNQUFNLEtBQUssTUFBTTtVQUNyQztZQUNFLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3pEO1NBQ0o7UUFDRCxjQUFjLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUM3QixjQUFjLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7UUFFL0IsT0FBTyxjQUFjLENBQUM7S0FDekI7Ozs7Ozs7SUFPRCxZQUFZLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7Ozs7OztJQU12QyxZQUFZLEVBQUUsVUFBVSxJQUFJLEVBQUUsRUFBRTs7Ozs7SUFLaEMsYUFBYSxFQUFFLFVBQVUsR0FBRyxFQUFFO1FBQzFCLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3RDO0tBQ0o7O0lBRUQsTUFBTSxFQUFFLFlBQVksRUFBRTs7SUFFdEIsU0FBUyxFQUFFLFVBQVUsUUFBUSxlQUFlLElBQUksRUFBRTtRQUM5QyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7O1lBRWQsSUFBSSxHQUFHLFFBQVEsQ0FBQztZQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDckM7UUFDRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDYixRQUFRO1NBQ1g7OztRQUdELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTs7WUFFaEIsSUFBSSxVQUFVLENBQUMsZUFBZSxFQUFFO2dCQUM1QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN6QztpQkFDSTtnQkFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckM7U0FDSjthQUNJOztZQUVELElBQUksQ0FBQyxVQUFVO1VBQ2pCO1lBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRTs7Z0JBRWpDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQ2xHO1lBQ0QsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekM7O1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7UUFFdEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JDOztJQUVELGVBQWUsRUFBRSxVQUFVLFVBQVUsRUFBRTtRQUNuQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNyQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxQyxJQUFJLFVBQVUsQ0FBQyxhQUFhLEVBQUU7Z0JBQzFCLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztpQkFDekU7Z0JBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDM0U7aUJBQ0k7OztnQkFHRCxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7YUFDckU7U0FDSjtLQUNKOztJQUVELElBQUksRUFBRSxVQUFVLFlBQVksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFOzs7UUFHakQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBRztZQUM1QixJQUFJLEVBQUUsUUFBUTtZQUNkLEdBQUcsRUFBRSxXQUFXO1NBQ25CLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNwQyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUMxQztRQUNELFFBQVEsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25DLElBQUksRUFBRSxJQUFJO1lBQ1YsR0FBRyxFQUFFLFlBQVk7U0FDcEIsQ0FBQyxDQUFDOzs7UUFHSCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDbEQ7O0lBRUQsS0FBSyxFQUFFLFlBQVk7UUFDZixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztLQUN6Qjs7SUFFRCxlQUFlLEVBQUUsVUFBVSxVQUFVLEVBQUU7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsS0FBSyxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNuQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdkM7WUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztTQUMzQjtRQUNELElBQUksVUFBVSxFQUFFO1lBQ1osSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7U0FDekM7S0FDSjs7SUFFRCxXQUFXLEVBQUUsWUFBWTtRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzs7UUFFdkIsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEM7S0FDSjs7SUFFRCxVQUFVLEVBQUUsWUFBWTs7UUFFcEIsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQy9CLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDbEMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxVQUFVLENBQUMsYUFBYSxFQUFFO29CQUMxQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7cUJBQ25FO29CQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMvRDtxQkFDSTtvQkFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQy9EO2FBQ0o7U0FDSjtLQUNKO0NBQ0osQ0FBQzs7QUNoUEY7Ozs7QUFJQSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7SUFDaEMsNENBQTRDOzs7O1FBSXhDLEtBQUssRUFBRSxFQUFFO0tBQ1osQ0FBQztDQUNMOztBQUVEOzs7OztJQUtJLEtBQUssRUFBRSxZQUFZO1FBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7S0FDdEI7Ozs7SUFJRCxPQUFPLEVBQUUsVUFBVSxJQUFJLEVBQUU7O1FBRXJCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9CLE9BQU87U0FDVjs7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7UUFFdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7S0FDdEI7Ozs7SUFJRCxVQUFVLEVBQUUsVUFBVSxJQUFJLEVBQUU7UUFDeEIsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDMUIsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkM7UUFDRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDdEI7S0FDSjs7Ozs7SUFLRCxhQUFhLEVBQUUsVUFBVSxJQUFJLEVBQUU7UUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO2dCQUM3QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDeEI7U0FDSjtLQUNKOzs7O0lBSUQsTUFBTSxFQUFFLFlBQVk7UUFDaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDekI7O1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRXpCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNkLFNBQVM7YUFDWjtZQUNELEtBQUssSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQ3pCLFNBQVM7aUJBQ1o7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQzlELE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLFNBQVMsR0FBRyxZQUFZLENBQUMsQ0FBQztvQkFDbkUsU0FBUztpQkFDWjtnQkFDRCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDOztnQkFFekMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxPQUFPLEVBQUU7b0JBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ25EO3FCQUNJO29CQUNELElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFO3dCQUNqQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLEdBQUcsWUFBWSxDQUFDLENBQUM7cUJBQ3REO3lCQUNJO3dCQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLENBQUM7cUJBQ3JGO2lCQUNKO2FBQ0o7U0FDSjtLQUNKOztJQUVELE9BQU8sRUFBRSxVQUFVLEtBQUssRUFBRTtRQUN0QixJQUFJLElBQUksQ0FBQzs7UUFFVCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLFlBQVkwQyxjQUFTLEVBQUU7WUFDekQsS0FBSyxHQUFHO2dCQUNKLElBQUksRUFBRSxLQUFLO2FBQ2QsQ0FBQztTQUNMOztRQUVELElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUNoQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFO29CQUN6QixJQUFJLEdBQUcsR0FBRyxDQUFDO2lCQUNkO2FBQ0o7U0FDSjthQUNJO1lBQ0QsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDckI7UUFDRCxJQUFJLElBQUksRUFBRTtZQUNOLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFDekIsSUFBSSxDQUFDLFFBQVEsRUFBRTs7Z0JBRVgsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNkLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDM0M7YUFDSjtZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDeEIsT0FBTztvQkFDSCxJQUFJLEVBQUUsSUFBSTtvQkFDVixHQUFHLEVBQUUsUUFBUTtpQkFDaEIsQ0FBQzthQUNMO1NBQ0o7S0FDSjtDQUNKLENBQUM7O0FDcklGOzs7Ozs7O0FBT0EsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXO0lBQ3JDLE9BQU87O1FBRUgsUUFBUSxFQUFFLEVBQUU7O1FBRVosWUFBWSxFQUFFLElBQUksV0FBVyxFQUFFOztRQUUvQixZQUFZLEVBQUUsSUFBSSxXQUFXLENBQUM7WUFDMUIsV0FBVyxFQUFFLEtBQUs7U0FDckIsQ0FBQztLQUNMLENBQUM7Q0FDTDs7QUFFRDtJQUNJLE9BQU8sRUFBRSxTQUFTLElBQUksRUFBRTtRQUNwQixLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0tBQzNCOzs7O0lBSUQsTUFBTSxFQUFFLFNBQVMsUUFBUSxFQUFFLFdBQVcsRUFBRTtRQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzs7WUFFcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO29CQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3JDO2FBQ0o7U0FDSjs7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O1lBRXhDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDL0I7O1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDdEM7O1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUNsRDs7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O1lBRXhDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDOUI7S0FDSjs7SUFFRCxlQUFlLEVBQUUsVUFBVSxVQUFVLEVBQUU7UUFDbkMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUM1Qzs7SUFFRCxjQUFjLEVBQUUsVUFBVSxVQUFVLEVBQUU7UUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDckM7O0lBRUQsY0FBYyxFQUFFLFlBQVk7UUFDeEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0tBQzVCOzs7Ozs7SUFNRCxPQUFPLEVBQUUsVUFBVSxRQUFRLEVBQUU7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDckM7Q0FDSixDQUFDOztBQy9FRjs7OztBQUlBLElBQUlDLFdBQVMsR0FBRyxjQUFjLENBQUMsTUFBTTs7QUFFckM7SUFDSSxJQUFJLEVBQUUsT0FBTzs7OztJQUliLEtBQUssRUFBRSxJQUFJOzs7O0lBSVgsTUFBTSxFQUFFLElBQUk7Ozs7SUFJWixlQUFlLEVBQUUsSUFBSTs7OztJQUlyQixJQUFJLEVBQUUsS0FBSzs7Q0FFZCxFQUFFLFdBQVc7SUFDVixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7Q0FDeEMsRUFBRTtJQUNDLE1BQU0sRUFBRSxTQUFTLFFBQVEsRUFBRTs7UUFFdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQzs7UUFFdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQzs7UUFFN0IsSUFBSSxVQUFVLENBQUM7O1FBRWYsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7O1lBRWYsVUFBVSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7O1NBRTNGO2FBQ0k7O1lBRUQsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNuQyxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQzNCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7O2dCQUVyQyxJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDaEUsSUFBSSxPQUFPLFVBQVUsQ0FBQyxJQUFJLFFBQVEsRUFBRTtvQkFDaEMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDaEM7Z0JBQ0QsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7YUFDM0M7WUFDRCxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzs7O1lBSTNCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUN0RCxJQUFJLEdBQUcsRUFBRTtnQkFDTCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ2QsS0FBSyxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNqQyxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNsQyxJQUFJLFVBQVUsSUFBSSxHQUFHLENBQUMsaUJBQWlCLElBQUksVUFBVSxJQUFJLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLEVBQUU7d0JBQ2hGLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7cUJBQ3pCO2lCQUNKO2dCQUNELEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDNUI7Ozs7WUFJRCxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckIsUUFBUSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1lBQ3RFLFVBQVUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hGLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQzs7WUFFeEIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNoQzs7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQzs7UUFFeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7S0FDekI7Q0FDSixDQUFDOztBQzFGRjs7OztBQUlBLElBQUlDLGFBQVcsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLFdBQVc7SUFDL0Msa0RBQWtEOzs7O1FBSTlDLE9BQU8sRUFBRSxJQUFJOzs7UUFHYixPQUFPLEVBQUU7WUFDTCxLQUFLLEVBQUUsRUFBRTtTQUNaO0tBQ0osQ0FBQztDQUNMLEVBQUUsWUFBWTtDQUNkLEVBQUU7O0lBRUMsU0FBUyxFQUFFLFVBQVUsUUFBUSxFQUFFLElBQUksRUFBRTtRQUNqQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7S0FDdkI7OztJQUdELFdBQVcsRUFBRSxZQUFZLEVBQUU7SUFDM0IsVUFBVSxFQUFFLFlBQVksRUFBRTtDQUM3QixDQUFDOztBQzVCRjtBQUNBLEFBR0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVDQSxJQUFJQyxZQUFVLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxZQUFZO0lBQy9DLGlEQUFpRDs7OztRQUk3QyxJQUFJLEVBQUUsRUFBRTs7Ozs7UUFLUixNQUFNLEVBQUUsRUFBRTs7Ozs7UUFLVixPQUFPLEVBQUUsSUFBSTs7Ozs7UUFLYixNQUFNLEVBQUUsRUFBRTs7Ozs7Ozs7Ozs7UUFXVixVQUFVLEVBQUUsRUFBRTs7Ozs7Ozs7Ozs7UUFXZCxXQUFXLEVBQUUsRUFBRTs7Ozs7UUFLZixJQUFJLEVBQUUsSUFBSTs7OztRQUlWLG1CQUFtQixFQUFFLEVBQUU7UUFDdkIsZUFBZSxFQUFFLEVBQUU7OztRQUduQixpQkFBaUIsRUFBRSxFQUFFOztRQUVyQixVQUFVLEVBQUUsS0FBSzs7UUFFakIsU0FBUyxFQUFFLEtBQUs7O1FBRWhCLFdBQVcsRUFBRSxJQUFJO0tBQ3BCLENBQUM7Q0FDTCxFQUFFLFlBQVk7O0lBRVgsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUM7UUFDaEIsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNO0tBQ3hCLENBQUMsQ0FBQztJQUNILElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3BCOztBQUVEOzs7O0lBSUksTUFBTSxFQUFFLFVBQVUsUUFBUSxFQUFFLFdBQVcsRUFBRTtRQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQzs7UUFFdkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7O1FBRXZCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7O1FBRXRCLEtBQUssSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQ2pEOztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDOztZQUV6QixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7WUFFbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQzNDO2FBQ0k7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7O1lBRXZCLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1lBQzFCLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDM0IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3RELElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7aUJBQ3hDO2dCQUNELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztnQkFDckMsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsaUJBQWlCLENBQUM7Z0JBQ2hFLElBQUksT0FBTyxVQUFVLENBQUMsS0FBSyxRQUFRLEVBQUU7b0JBQ2pDLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ2hDO2dCQUNELGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxHQUFHLE9BQU8sQ0FBQzthQUMxQztZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztZQUVqRCxLQUFLLElBQUksVUFBVSxJQUFJLGdCQUFnQixFQUFFOztnQkFFckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxNQUFNO29CQUNwQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxVQUFVO2lCQUMzQyxDQUFDO2FBQ0w7O1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7Ozs7WUFJM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDNUQ7O1FBRUQsS0FBSyxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25DLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZDOztRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDOztRQUV0QixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztLQUN6Qzs7O0lBR0QsZUFBZSxFQUFFLFVBQVUsVUFBVSxFQUFFLFFBQVEsRUFBRTtRQUM3QyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFDLElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFDdkMsSUFBSSxjQUFjLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQztRQUNoRCxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ2pCLGNBQWMsR0FBRyxVQUFVLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztTQUNwRDtRQUNELElBQUksVUFBVSxFQUFFO1lBQ1osS0FBSyxJQUFJLEdBQUcsSUFBSSxVQUFVLEVBQUU7Z0JBQ3hCLElBQUksR0FBRyxLQUFLLE9BQU8sSUFBSSxHQUFHLEtBQUssUUFBUSxFQUFFO29CQUNyQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUN6QzthQUNKO1NBQ0o7UUFDRCxJQUFJLEtBQUssRUFBRSxNQUFNLENBQUM7UUFDbEIsSUFBSSxPQUFPLFVBQVUsQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFO1lBQ3hDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDakQ7YUFDSTtZQUNELEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxPQUFPLFVBQVUsQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFO1lBQ3pDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDbkQ7YUFDSTtZQUNELE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1NBQzlCO1FBQ0QsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0I7WUFDSSxjQUFjLENBQUMsS0FBSyxLQUFLLEtBQUs7ZUFDM0IsY0FBYyxDQUFDLE1BQU0sS0FBSyxNQUFNO1VBQ3JDO1lBQ0UsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUN0RDtTQUNKO1FBQ0QsY0FBYyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDN0IsY0FBYyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7O1FBRS9CLE9BQU8sY0FBYyxDQUFDO0tBQ3pCOzs7Ozs7O0lBT0QsWUFBWSxFQUFFLFVBQVUsSUFBSSxFQUFFLEtBQUssRUFBRTtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDckM7Ozs7OztJQU1ELFlBQVksRUFBRSxVQUFVLElBQUksRUFBRTtRQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JDOzs7OztJQUtELGFBQWEsRUFBRSxVQUFVLEdBQUcsRUFBRTtRQUMxQixLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtZQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN0QztLQUNKOzs7Ozs7Ozs7Ozs7Ozs7SUFlRCxNQUFNLEVBQUUsVUFBVSxNQUFNLEVBQUUsR0FBRyxFQUFFO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ3REOzs7Ozs7SUFNRCxRQUFRLEVBQUUsVUFBVSxNQUFNLEVBQUU7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNuRDs7SUFFRCxlQUFlLEVBQUUsVUFBVSxVQUFVLEVBQUU7UUFDbkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUMsSUFBSSxVQUFVLENBQUMsYUFBYSxFQUFFO2dCQUMxQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7aUJBQ3pFO2dCQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzNFO2lCQUNJOzs7Z0JBR0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2FBQ3JFO1NBQ0o7S0FDSjs7SUFFRCxLQUFLLEVBQUUsWUFBWTtRQUNmLGNBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7O1FBRzFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLENBQUM7S0FDM0M7Q0FDSixDQUFDOztBQzlTRixzQkFBZSx1cEVBQXVwRSxDQUFDOztBQ0F2cUUsZUFBZSx1OENBQXU4QyxDQUFDOztBQ0F2OUMsY0FBZSwyb0NBQTJvQyxDQUFDOztBQ0EzcEMsY0FBZSxxOEJBQXE4QixDQUFDOztBQ0FyOUIsbUJBQWUsa2NBQWtjLENBQUM7O0FDQWxkLGlCQUFlLDJiQUEyYixDQUFDOztBQ0EzYyxpQkFBZSxraUNBQWtpQyxDQUFDOztBQ0FsakMscUJBQWUsMnZDQUEydkMsQ0FBQzs7QUNBM3dDLG1CQUFlLHF5Q0FBcXlDLENBQUM7O0FDQXJ6QyxjQUFlLDAwSEFBMDBILENBQUM7O0FDQTExSCxvQkFBZSxnbERBQWdsRCxDQUFDOztBQ0FobUQsZ0JBQWUsc3lDQUFzeUMsQ0FBQzs7QUNBdHpDLGVBQWUseXlFQUF5eUUsQ0FBQzs7QUNhenpFOzs7QUFHQSxBQUFlLFNBQVMsUUFBUSxDQUFDLE1BQU0sRUFBRTs7SUFFckMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMvQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDL0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNoQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7O0lBRTVCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7OztDQUU5QixEQ3JCREMsUUFBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7QUFFbEMsSUFBSSxlQUFlLEdBQUcsbUJBQW1CLENBQUM7Ozs7Ozs7OztBQVMxQyxTQUFTLGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7SUFDbEMsSUFBSSxVQUFVLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUNsQyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQzs7SUFFbEIsSUFBSSxHQUFHLEdBQUc7UUFDTixRQUFRLEVBQUUsRUFBRTtRQUNaLFVBQVUsRUFBRSxFQUFFO0tBQ2pCLENBQUM7SUFDRixJQUFJLFNBQVMsR0FBRyxTQUFTLFNBQVMsRUFBRSxVQUFVLEVBQUU7UUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDM0MsSUFBSSxJQUFJLEVBQUU7Z0JBQ04sVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM1QjtTQUNKO0tBQ0osQ0FBQzs7SUFFRixLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDOUIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3REOztJQUVELFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLFVBQVUsRUFBRTtRQUMvQyxHQUFHLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUMxQixTQUFTLEVBQUUsQ0FBQztLQUNmLENBQUMsQ0FBQzs7SUFFSCxPQUFPLFVBQVUsQ0FBQztDQUNyQjs7QUFFRCxTQUFTLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtJQUNyQyxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQztJQUNyQyxJQUFJLFlBQVksQ0FBQztJQUNqQixJQUFJLE1BQU0sQ0FBQztJQUNYLElBQUksT0FBTyxDQUFDOztJQUVaLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUNuQixJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZDLElBQUksR0FBRyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsSUFBSSxHQUFHLEVBQUU7WUFDTCxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUMvQzthQUNJLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7WUFDbEMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNmLFlBQVksR0FBRyxTQUFTLENBQUM7U0FDNUI7UUFDRCxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2YsT0FBTztTQUNWO0tBQ0o7O0lBRUQsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFO1FBQ2pCLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDWixLQUFLLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDOUIsSUFBSSxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxFQUFFO2dCQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN4QztpQkFDSTtnQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUc7b0JBQ1gsSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSTtvQkFDaEMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRztpQkFDakMsQ0FBQzthQUNMO1NBQ0o7S0FDSjtJQUNELElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRTtRQUNsQixPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsS0FBSyxJQUFJLElBQUksSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO1lBQy9CLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNuQixJQUFJLFVBQVUsQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFO2dCQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7YUFDcEQ7WUFDRCxJQUFJLFVBQVUsQ0FBQyxhQUFhLElBQUksSUFBSSxFQUFFO2dCQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7YUFDMUQ7WUFDRCxJQUFJLFVBQVUsQ0FBQyxlQUFlLElBQUksSUFBSSxFQUFFO2dCQUNwQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUM7YUFDOUQ7WUFDRCxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3RFO1NBQ0o7S0FDSjtJQUNELElBQUksSUFBSSxDQUFDO0lBQ1QsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO1FBQ2xCLElBQUksR0FBRyxJQUFJQyxXQUFjLENBQUM7WUFDdEIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO1lBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsT0FBTyxFQUFFLE9BQU87U0FDbkIsQ0FBQyxDQUFDO0tBQ047U0FDSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDekIsSUFBSSxHQUFHLElBQUlDLGFBQWdCLENBQUM7WUFDeEIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO1lBQ25CLE9BQU8sRUFBRSxPQUFPO1NBQ25CLENBQUMsQ0FBQztLQUNOOztTQUVJO1FBQ0QsSUFBSSxHQUFHLElBQUlDLFlBQWUsQ0FBQztZQUN2QixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7WUFDbkIsTUFBTSxFQUFFLFlBQVk7WUFDcEIsTUFBTSxFQUFFLE1BQU07WUFDZCxPQUFPLEVBQUUsT0FBTztTQUNuQixDQUFDLENBQUM7S0FDTjtJQUNELElBQUksSUFBSSxFQUFFO1FBQ04sSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFO1lBQ3JCLEtBQUssSUFBSSxJQUFJLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRTtnQkFDbEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7b0JBQ3pCLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2pCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7d0JBQ3ZCLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDckM7eUJBQ0k7d0JBQ0QsSUFBSSxDQUFDLEVBQUU7NEJBQ0gsY0FBYyxFQUFFLG9CQUFvQjtnQ0FDaEMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUM7NkJBQzVCO3lCQUNKLENBQUM7cUJBQ0w7aUJBQ0o7cUJBQ0ksSUFBSSxPQUFPLEdBQUcsS0FBSyxVQUFVLEVBQUU7b0JBQ2hDLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUNoQztnQkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNoQztTQUNKO1FBQ0QsSUFBSSxRQUFRLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDL0IsS0FBSyxJQUFJLElBQUksSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO2dCQUMvQixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNwRDtTQUNKO0tBQ0o7SUFDRCxPQUFPLElBQUksQ0FBQztDQUNmOztBQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtJQUNyQyxPQUFPLEtBQUssQ0FBQztDQUNoQjtBQUNELFNBQVMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtJQUN0QyxPQUFPLE1BQU0sQ0FBQztDQUNqQjs7QUFFRCxTQUFTLGdCQUFnQixDQUFDLFNBQVMsRUFBRTtJQUNqQyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDZixJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ1osT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFDRCxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQztTQUNyRSxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUU7WUFDcEIsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFCLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTs7Z0JBRWIsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7b0JBQ3pCLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3RCO2dCQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7YUFDckI7U0FDSixDQUFDLENBQUM7O0lBRVAsSUFBSSxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO1NBQ2QsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFO1lBQ3BCLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtnQkFDekIsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMxQixJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtvQkFDekIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLGdCQUFnQjt3QkFDMUIsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTO3FCQUN2QyxDQUFDO2lCQUNMO3FCQUNJO29CQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7aUJBQ3JCO2FBQ0o7U0FDSixDQUFDLENBQUM7SUFDUCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtRQUNkLEtBQUssQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7S0FDbEM7SUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUNmLEtBQUssQ0FBQyxNQUFNLEdBQUcsaUJBQWlCLENBQUM7S0FDcEM7O0lBRUQsSUFBSSxTQUFTLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRTtRQUM3QixLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7S0FDekM7SUFDRCxPQUFPLEtBQUssQ0FBQztDQUNoQjs7QUFFRCxTQUFTLFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7SUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDaEIsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2IsT0FBTztLQUNWO0lBQ0QsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQzs7SUFFaEIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDM0NqRCxNQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxXQUFXLEVBQUUsSUFBSSxFQUFFO1FBQ2pELElBQUksT0FBTyxDQUFDO1FBQ1osSUFBSSxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzFDLElBQUksZUFBZSxFQUFFO2dCQUNqQixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLElBQUksRUFBRTtvQkFDM0IsT0FBT0EsTUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztpQkFDeEQsQ0FBQyxDQUFDO2FBQ047WUFDRCxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDekM7YUFDSSxHQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUM5QixJQUFJLGVBQWUsRUFBRTtnQkFDakIsSUFBSSxHQUFHQSxNQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2FBQ3hEO1lBQ0QsT0FBTyxHQUFHLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3ZDO2FBQ0k7WUFDRCxPQUFPO1NBQ1Y7O1FBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixPQUFPLEVBQUUsQ0FBQztRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFdBQVc7WUFDL0IsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztZQUN6QixPQUFPLEVBQUUsQ0FBQztZQUNWLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtnQkFDZixRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ25CLEdBQUcsR0FBRyxJQUFJLENBQUM7YUFDZDtTQUNKLENBQUMsQ0FBQztLQUNOLENBQUMsQ0FBQzs7SUFFSCxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDdkIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3RCO0NBQ0o7O0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQzFDLE9BQU8sVUFBVSxRQUFRLEVBQUU7O1FBRXZCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDOztRQUV6QyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEMsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ25DLENBQUM7Q0FDTDs7QUFFRCxTQUFTLGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO0lBQzdDLEtBQUssR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ25CLE9BQU8sVUFBVSxRQUFRLEVBQUU7UUFDdkIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDekMsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUN4QyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQzFDLE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDdkMsQ0FBQztDQUNMOztBQUVELFNBQVMsY0FBYyxDQUFDLE1BQU0sRUFBRTs7SUFFNUIsSUFBSSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLElBQUksT0FBTyxFQUFFO1FBQ1QsSUFBSTtZQUNBLElBQUksSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFMUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7WUFFWCxPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxDQUFDLEVBQUU7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDMUM7S0FDSjtDQUNKOztBQ2xURCxhQUFhOztBQ0FiLGtCQUFlLGtuTUFBa25NLENBQUM7O0FDQWxvTSxnQkFBZSw0c0RBQTRzRCxDQUFDOztBQ2E1dEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMzQixNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDOztBQUV6QixTQUFTLGdCQUFnQixDQUFDLEtBQUssRUFBRTtJQUM3QixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDakMsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxHQUFHLENBQUMsU0FBUyxHQUFHLEtBQUssSUFBSSxNQUFNLENBQUM7SUFDaEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7SUFFekIsT0FBTyxNQUFNLENBQUM7Q0FDakI7Ozs7QUFJRCxTQUFTLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFOztJQUVsRixPQUFPLFVBQVUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7UUFDN0MsSUFBSSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQzNDLElBQUksTUFBTSxLQUFLLGFBQWEsRUFBRTtZQUMxQixPQUFPLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDakU7YUFDSSxJQUFJLE1BQU0sS0FBSyxVQUFVLElBQUksTUFBTSxLQUFLLFVBQVUsSUFBSSxNQUFNLEtBQUssT0FBTyxFQUFFO1lBQzNFLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZDO2FBQ0ksSUFBSSxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQzdCLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGdCQUFnQixDQUFDO1NBQzNEO2FBQ0ksSUFBSSxNQUFNLEtBQUssWUFBWSxFQUFFO1lBQzlCLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGlCQUFpQixDQUFDO1NBQzVEO2FBQ0ksSUFBSSxNQUFNLEtBQUssYUFBYSxFQUFFOztZQUUvQixJQUFJLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLEVBQUU7Z0JBQ3RELElBQUksV0FBVyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDdEQsT0FBTyxXQUFXLElBQUksQ0FBQyxDQUFDO2FBQzNCO1lBQ0QsT0FBTyxDQUFDLENBQUM7U0FDWjthQUNJO1lBQ0QsSUFBSSxvQkFBb0IsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ25GLElBQUksYUFBYSxHQUFHLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDeEgsUUFBUSxNQUFNO2dCQUNWLEtBQUssWUFBWTtvQkFDYixPQUFPLG9CQUFvQixJQUFJLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNqSCxLQUFLLGVBQWU7b0JBQ2hCLE9BQU8sYUFBYSxDQUFDO2dCQUN6QixLQUFLLGtCQUFrQjtvQkFDbkIsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDO2dCQUMzQixLQUFLLGNBQWM7b0JBQ2YsT0FBTyxvQkFBb0IsQ0FBQztnQkFDaEMsS0FBSyxtQkFBbUI7b0JBQ3BCLE9BQU8sb0JBQW9COzBCQUNyQixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLG1CQUFtQixDQUFDOzBCQUMzRCxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLG9CQUFvQixDQUFDLENBQUM7YUFDMUU7U0FDSjtLQUNKLENBQUM7Q0FDTDs7QUFFRCxTQUFTLGtCQUFrQixDQUFDLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFO0lBQ2hFLE9BQU8sVUFBVSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTtRQUM3QyxJQUFJLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDM0MsUUFBUSxNQUFNO1lBQ1YsS0FBSyxPQUFPLENBQUM7WUFDYixLQUFLLFVBQVUsQ0FBQztZQUNoQixLQUFLLFVBQVUsQ0FBQztZQUNoQixLQUFLLE9BQU87Z0JBQ1IsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEMsS0FBSyxXQUFXO2dCQUNaLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRCxLQUFLLFlBQVk7Z0JBQ2IsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksaUJBQWlCLENBQUM7WUFDN0QsS0FBSyxjQUFjO2dCQUNmLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLG1CQUFtQixDQUFDO1lBQy9ELEtBQUssaUJBQWlCO2dCQUNsQixPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbEQsS0FBSyxRQUFRO2dCQUNULE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JELEtBQUssYUFBYTs7Z0JBRWQsSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxFQUFFO29CQUN0RCxJQUFJLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ3RELE9BQU8sV0FBVyxJQUFJLEdBQUcsQ0FBQztpQkFDN0I7Z0JBQ0QsT0FBTyxHQUFHLENBQUM7U0FDbEI7S0FDSixDQUFDO0NBQ0w7Ozs7Ozs7Ozs7Ozs7QUFhRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7O0lBRWxDLElBQUksaUJBQWlCLEdBQUc7UUFDcEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1FBQzFCLFNBQVMsRUFBRSxPQUFPLENBQUMsT0FBTztRQUMxQixLQUFLLEVBQUUsT0FBTyxDQUFDLGFBQWE7UUFDNUIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxhQUFhO0tBQy9CLENBQUM7O0lBRUYsNENBQTRDOzs7Ozs7UUFNeEMsb0JBQW9CLEVBQUUsSUFBSTs7Ozs7O1FBTTFCLG9CQUFvQixFQUFFLElBQUk7Ozs7OztRQU0xQixvQkFBb0IsRUFBRSxJQUFJOzs7Ozs7UUFNMUIsb0JBQW9CLEVBQUUsS0FBSzs7UUFFM0IsaUJBQWlCLEVBQUUsS0FBSzs7UUFFeEIsa0JBQWtCLEVBQUUsRUFBRTs7Ozs7UUFLdEIsWUFBWSxFQUFFLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7O1lBRXRDLElBQUksRUFBRSxPQUFPLENBQUMsVUFBVTtTQUMzQixFQUFFLGlCQUFpQixDQUFDLENBQUM7OztRQUd0QixZQUFZLEVBQUUsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzs7OztZQUl0QyxNQUFNLEVBQUUsT0FBTyxDQUFDLGFBQWE7WUFDN0IsSUFBSSxFQUFFLE9BQU8sQ0FBQyx1QkFBdUI7U0FDeEMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDOzs7Ozs7UUFNdEIsWUFBWSxFQUFFLElBQUksU0FBUyxDQUFDLGlCQUFpQixDQUFDOztRQUU5QyxZQUFZLEVBQUUsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzs7WUFFdEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1NBQzNCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQzs7UUFFdEIsaUJBQWlCLEVBQUUsSUFBSSxTQUFTLENBQUM7WUFDN0IsS0FBSyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztTQUNsQyxDQUFDO1FBQ0Ysb0JBQW9CLEVBQUUsSUFBSSxTQUFTLENBQUM7WUFDaEMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztTQUNsQyxDQUFDO1FBQ0Ysb0JBQW9CLEVBQUUsSUFBSSxTQUFTLENBQUM7WUFDaEMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztTQUNsQyxDQUFDO1FBQ0Ysa0JBQWtCLEVBQUUsSUFBSSxTQUFTLENBQUM7WUFDOUIsS0FBSyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztTQUNsQyxDQUFDOztRQUVGLFlBQVksRUFBRSxJQUFJLFdBQVcsRUFBRTs7UUFFL0IsaUJBQWlCLEVBQUUsSUFBSSxRQUFRLENBQUM7WUFDNUIsTUFBTSxFQUFFLElBQUksTUFBTTtnQkFDZCxNQUFNLENBQUMsTUFBTSxDQUFDLDhCQUE4QixDQUFDO2dCQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDO2FBQ25EO1lBQ0QsYUFBYSxFQUFFO2dCQUNYLFVBQVUsRUFBRSxJQUFJO2FBQ25CO1lBQ0QsZUFBZSxFQUFFO2dCQUNiLFVBQVUsRUFBRSxJQUFJO2FBQ25CO1NBQ0osQ0FBQztRQUNGLGlCQUFpQixFQUFFLElBQUksUUFBUSxDQUFDO1lBQzVCLE1BQU0sRUFBRSxJQUFJLE1BQU07Z0JBQ2QsTUFBTSxDQUFDLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQztnQkFDN0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQzthQUNuRDtZQUNELGFBQWEsRUFBRTtnQkFDWCxXQUFXLEVBQUUsSUFBSTthQUNwQjtZQUNELGVBQWUsRUFBRTtnQkFDYixXQUFXLEVBQUUsSUFBSTthQUNwQjtTQUNKLENBQUM7UUFDRixpQkFBaUIsRUFBRSxJQUFJLFFBQVEsQ0FBQztZQUM1QixNQUFNLEVBQUUsSUFBSSxNQUFNO2dCQUNkLE1BQU0sQ0FBQyxNQUFNLENBQUMsOEJBQThCLENBQUM7Z0JBQzdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsaUNBQWlDLENBQUM7YUFDbkQ7WUFDRCxhQUFhLEVBQUU7Z0JBQ1gsVUFBVSxFQUFFLElBQUk7YUFDbkI7WUFDRCxlQUFlLEVBQUU7Z0JBQ2IsVUFBVSxFQUFFLElBQUk7YUFDbkI7U0FDSixDQUFDOztRQUVGLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQztZQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQztTQUN6RCxDQUFDO0tBQ0wsQ0FBQztDQUNMLHNDQUFzQzs7Ozs7OztJQU9uQyxNQUFNLEVBQUUsVUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFO1FBQzdCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEtBQUssS0FBSztlQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxNQUFNO1VBQ3hDO1lBQ0UsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7UUFFbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7UUFFbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7UUFFbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztLQUNyQzs7O0lBR0QsV0FBVyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtRQUM3QyxJQUFJLFFBQVEsQ0FBQztRQUNiLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ3ZCLFFBQVEsR0FBRyxDQUFDLENBQUM7U0FDaEI7YUFDSTtZQUNELFFBQVEsR0FBRztnQkFDUCxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNWLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU07Z0JBQzVCLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDO2FBQzdCLENBQUM7U0FDTDtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztLQUN6Qzs7SUFFRCxXQUFXLEVBQUUsWUFBWTtRQUNyQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFO1lBQzVCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7U0FDckM7YUFDSTtZQUNELE9BQU87Z0JBQ0gsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDVixLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUM5QixNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO2dCQUNoQyxnQkFBZ0IsRUFBRSxDQUFDO2FBQ3RCLENBQUM7U0FDTDtLQUNKOzs7Ozs7Ozs7SUFTRCxNQUFNLEVBQUUsVUFBVSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7UUFDN0MsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7O1FBRWxCLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7O1FBRXJCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDcEMsSUFBSSxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQzs7UUFFcEMsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzs7UUFFdEQsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUNuQyxJQUFJLGVBQWUsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDOztRQUU3QyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUNoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRTtnQkFDOUIsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0M7U0FDSjtRQUNELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRTtvQkFDbkMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3BEO2FBQ0o7U0FDSjtRQUNELGlCQUFpQixDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7O1FBRWxDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDOztRQUVyQixJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztRQUNyRCxJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztRQUNyRCxJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztRQUNyRCxJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztRQUNyRCxJQUFJLENBQUMsb0JBQW9CLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQ3pFLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLENBQUMsQ0FBQztZQUNuRixvQkFBb0IsR0FBRyxJQUFJLENBQUM7U0FDL0I7O1FBRUQsSUFBSSxvQkFBb0IsRUFBRTtZQUN0QixXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUM7U0FDdEc7O1FBRUQsU0FBUyxhQUFhLEdBQUc7WUFDckIsSUFBSSxRQUFRLEVBQUU7Z0JBQ1YsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDOztnQkFFcEMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzNCLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsUUFBUSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQzthQUMvRjtZQUNELEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3BELElBQUksUUFBUSxFQUFFO2dCQUNWLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQy9CO1NBQ0o7O1FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFO1lBQ25ELE9BQU8sVUFBVSxDQUFDLFFBQVEsS0FBSyxjQUFjLENBQUMsUUFBUSxDQUFDO1NBQzFEOzs7UUFHRCxRQUFRLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsSUFBSSxvQkFBb0IsRUFBRTs7WUFFdEIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM3RCxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztZQUUzQixhQUFhLEVBQUUsQ0FBQzs7WUFFaEIsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDOUMsSUFBSSxVQUFVLEdBQUc7Z0JBQ2IsV0FBVyxFQUFFLFlBQVk7b0JBQ3JCLE9BQU8sZ0JBQWdCLENBQUM7aUJBQzNCO2dCQUNELFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztnQkFDMUcsaUJBQWlCLEVBQUUsaUJBQWlCO2dCQUNwQyxXQUFXLEVBQUUsUUFBUSxDQUFDLGlCQUFpQjthQUMxQyxDQUFDOztZQUVGLFFBQVEsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDOztTQUU5RDtRQUNELElBQUksb0JBQW9CLEVBQUU7OztZQUd0QixXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdELFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7O1lBRTNCLGFBQWEsRUFBRSxDQUFDOztZQUVoQixJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUM5QyxJQUFJLFVBQVUsR0FBRztnQkFDYixXQUFXLEVBQUUsWUFBWTtvQkFDckIsT0FBTyxnQkFBZ0IsQ0FBQztpQkFDM0I7Z0JBQ0QsVUFBVSxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUM7Z0JBQ2xGLGlCQUFpQixFQUFFLGlCQUFpQjtnQkFDcEMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxpQkFBaUI7YUFDMUMsQ0FBQztZQUNGLFFBQVEsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQzlEOztRQUVELElBQUksb0JBQW9CLEVBQUU7WUFDdEIsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQixXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDOztZQUU3RCxhQUFhLEVBQUUsQ0FBQzs7OztZQUloQixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7O1lBRWhCLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQzlDLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEYsSUFBSSxVQUFVLEdBQUc7Z0JBQ2IsV0FBVyxFQUFFLFlBQVk7b0JBQ3JCLE9BQU8sZ0JBQWdCLENBQUM7aUJBQzNCO2dCQUNELFdBQVcsRUFBRSxVQUFVLFFBQVEsRUFBRSxVQUFVLEVBQUU7b0JBQ3pDLElBQUksYUFBYSxHQUFHLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDL0MsSUFBSSxhQUFhLEVBQUU7d0JBQ2YsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQzt3QkFDbkMsSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQzt3QkFDL0IsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFOzRCQUM5QyxJQUFJLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDOzRCQUN6RixJQUFJLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQzs0QkFDbkUsSUFBSSxDQUFDLHVCQUF1QixFQUFFO2dDQUMxQix1QkFBdUIsR0FBRyxVQUFVLENBQUMseUJBQXlCLEdBQUcsSUFBSSxTQUFTLENBQUM7b0NBQzNFLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSztvQ0FDbkIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPO29DQUMxQixTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU87b0NBQzFCLFNBQVMsRUFBRSxLQUFLO29DQUNoQixLQUFLLEVBQUUsS0FBSztpQ0FDZixDQUFDLENBQUM7NkJBQ047NEJBQ0QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU07bUNBQzVCLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssbUJBQW1CLENBQUMsTUFBTSxDQUFDLE1BQU07OEJBQ2hGO2dDQUNFLHVCQUF1QixDQUFDLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQzs2QkFDakY7aUNBQ0k7Z0NBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0NBQ3hELHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7aUNBQ3JFOzZCQUNKOzRCQUNELHVCQUF1QixDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7NEJBQzFELHVCQUF1QixDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7eUJBQy9EOzZCQUNJOzRCQUNELElBQUksaUJBQWlCLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7NEJBQ2hGLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLElBQUksVUFBVSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sS0FBSyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUU7Z0NBQy9HLFVBQVUsQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQzs2QkFDbkY7NEJBQ0QsVUFBVSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO3lCQUM3RDtxQkFDSjtvQkFDRCxVQUFVLENBQUMseUJBQXlCLEdBQUcsVUFBVSxDQUFDLHlCQUF5QixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDN0YsSUFBSSxhQUFhLEVBQUU7O3dCQUVmLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLHlCQUF5QixFQUFFLGNBQWMsQ0FBQyxDQUFDO3FCQUNuRTt5QkFDSTt3QkFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsRUFBRSxjQUFjLEVBQUUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDeEc7aUJBQ0o7Z0JBQ0QsVUFBVSxFQUFFLFVBQVUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7b0JBQ2xELElBQUksTUFBTSxLQUFLLHlCQUF5QixFQUFFO3dCQUN0QyxPQUFPLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQztxQkFDL0M7eUJBQ0ksSUFBSSxNQUFNLEtBQUssZ0JBQWdCLEVBQUU7d0JBQ2xDLE9BQU8sVUFBVSxDQUFDLHVCQUF1QixDQUFDO3FCQUM3Qzt5QkFDSSxJQUFJLE1BQU0sS0FBSyx5QkFBeUIsRUFBRTt3QkFDM0MsT0FBTyxVQUFVLENBQUMseUJBQXlCLENBQUM7cUJBQy9DO3lCQUNJLElBQUksTUFBTSxLQUFLLGFBQWEsRUFBRTt3QkFDL0IsT0FBTyxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQztxQkFDaEQ7eUJBQ0k7d0JBQ0QsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUNqQztpQkFDSjtnQkFDRCxpQkFBaUIsRUFBRSxZQUFZOztvQkFFM0IsT0FBTyxJQUFJLENBQUM7aUJBQ2Y7Z0JBQ0QsV0FBVyxFQUFFLFFBQVEsQ0FBQyxpQkFBaUI7YUFDMUMsQ0FBQzs7WUFFRixRQUFRLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztTQUM5RDs7UUFFRCxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFpQkQsV0FBVyxFQUFFLFVBQVUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1FBQ3JELElBQUksVUFBVSxHQUFHO1lBQ2IsTUFBTSxFQUFFLENBQUM7WUFDVCxLQUFLLEVBQUUsQ0FBQztZQUNSLFFBQVEsRUFBRSxDQUFDO1lBQ1gsVUFBVSxFQUFFLENBQUM7WUFDYixTQUFTLEVBQUUsQ0FBQztZQUNaLE1BQU0sRUFBRSxDQUFDO1lBQ1QsUUFBUSxFQUFFLENBQUM7U0FDZCxDQUFDO1FBQ0YsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO1lBQzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQzs7WUFFM0MsSUFBSSxHQUFHLFFBQVEsQ0FBQztTQUNuQjs7UUFFRCxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckIsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hCLFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQzs7UUFFakQsSUFBSSxRQUFRLEVBQUU7WUFDVixRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQzs7UUFFdkYsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNoQyxTQUFTLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLFNBQVMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELFNBQVMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELFNBQVMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELFNBQVMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hELFNBQVMsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7UUFFM0IsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzNCLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQUMzQjs7Ozs7Ozs7Ozs7SUFXRCxpQkFBaUIsRUFBRSxZQUFZO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztLQUM1Qjs7Ozs7Ozs7SUFRRCxpQkFBaUIsRUFBRSxZQUFZO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztLQUM1Qjs7Ozs7Ozs7Ozs7SUFXRCxpQkFBaUIsRUFBRSxZQUFZO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztLQUM1Qjs7Ozs7Ozs7O0lBU0QsaUJBQWlCLEVBQUUsWUFBWTtRQUMzQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7S0FDNUI7Ozs7OztJQU1ELE9BQU8sRUFBRSxVQUFVLFFBQVEsRUFBRTtRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7UUFFcEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUN2QztDQUNKLENBQUM7O0FDcm1CRjs7Ozs7Ozs7OztBQVVBLElBQUlrRCxNQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sbUNBQW1DO0lBQ3pELE9BQU8sRUFBRSxLQUFLOzs7O0lBSWQsU0FBUyxFQUFFLENBQUM7Ozs7O0lBS1osWUFBWSxFQUFFLENBQUM7Ozs7O0lBS2YsTUFBTSxFQUFFLENBQUM7Ozs7O0lBS1QsV0FBVyxFQUFFLEVBQUU7Ozs7O0lBS2YsY0FBYyxFQUFFLENBQUM7Q0FDcEIsRUFBRSxXQUFXO0lBQ1YsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQ2hCOztBQUVEOzs7O0lBSUksS0FBSyxFQUFFLFdBQVc7UUFDZCxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOztRQUVqQixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDOztRQUVsRCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDOztRQUVuQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3hCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7O1FBRXhCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2QyxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDO1lBQzdCLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRXRDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QixDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekIsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdDOzs7UUFHRCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDOztRQUVuQixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRTFCLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2Qzs7O1FBR0QsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUM5QixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25CLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRTdCLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUQ7OztRQUdELE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQzFCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDZixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckUsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM3QztTQUNKO1FBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4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QUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7O0lBRWIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDNUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDcEMsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0lBQ2pDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsRUFBRTtJQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNuRyxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNwQixDQUFDOztBQzVQRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQSxBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJBLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQzs7Ozs7OztBQU9mLEtBQUssQ0FBQyxNQUFNLEdBQUcsV0FBVztJQUN0QixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3RCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzVCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUUzQixJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDNUIsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNKLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNyQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQyxDQUFDOzs7Ozs7Ozs7O0FBVUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7O0FBVzNCLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFB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QU8sQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNk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 diff --git a/example/app_basic.html b/example/app_basic.html index f3c02e41b..d20999ddf 100644 --- a/example/app_basic.html +++ b/example/app_basic.html @@ -19,7 +19,7 @@ var app = clay.application.create('#main', { init: function (app) { // Create camera - this._camera = app.createCamera([0, 2, 5], [0, 0, 0]); + this._camera = app.createCamera([0, 2, 15], [0, 0, 0]); // Create cube this._cube = app.createCube({ @@ -32,6 +32,7 @@ loop: function (app) { this._cube.rotation.rotateY(app.frameTime / 1000); + // this._cube.rotation.rotateAxis([0,-1,0],app.frameTime / 1000); } }); diff --git a/src/glmatrix/quat.js b/src/glmatrix/quat.js index 693abc731..add8b4518 100644 --- a/src/glmatrix/quat.js +++ b/src/glmatrix/quat.js @@ -198,6 +198,22 @@ quat.setAxisAngle = function(out, axis, rad) { return out; }; +/** + * zh : 绕单位向量自转 + * @param out {quat} + * @param quat2 {quat} + * @param axis {vec3} + * @param rad {Number} + */ + +quat.rotateAxis = function (out,quat2,axis,rad) { + + vec3.normalize(axis,axis); + quat.setAxisAngle(quat2,axis,rad); + quat.multiply(out,out,quat2); + +} + /** * Adds two quat's * @@ -253,16 +269,13 @@ quat.scale = vec4.scale; * @param {number} rad angle (in radians) to rotate * @returns {quat} out */ -quat.rotateX = function (out, a, rad) { - rad *= 0.5; +quat.rotateX = function (out,rad) { - var ax = a[0], ay = a[1], az = a[2], aw = a[3], - bx = Math.sin(rad), bw = Math.cos(rad); + var quat2 =[0,0,0,1]; + var axis = [1,0,0]; + + quat.rotateAxis(out,quat2,axis,rad); - out[0] = ax * bw + aw * bx; - out[1] = ay * bw + az * bx; - out[2] = az * bw - ay * bx; - out[3] = aw * bw - ax * bx; return out; }; @@ -274,16 +287,13 @@ quat.rotateX = function (out, a, rad) { * @param {number} rad angle (in radians) to rotate * @returns {quat} out */ -quat.rotateY = function (out, a, rad) { - rad *= 0.5; +quat.rotateY = function (out,rad) { - var ax = a[0], ay = a[1], az = a[2], aw = a[3], - by = Math.sin(rad), bw = Math.cos(rad); + var quat2 =[0,0,0,1]; + var axis = [0,1,0]; + + quat.rotateAxis(out,quat2,axis,rad); - out[0] = ax * bw - az * by; - out[1] = ay * bw + aw * by; - out[2] = az * bw + ax * by; - out[3] = aw * bw - ay * by; return out; }; @@ -295,16 +305,12 @@ quat.rotateY = function (out, a, rad) { * @param {number} rad angle (in radians) to rotate * @returns {quat} out */ -quat.rotateZ = function (out, a, rad) { - rad *= 0.5; +quat.rotateZ = function (out,rad) { + var quat2 =[0,0,0,1]; + var axis = [0,0,1]; - var ax = a[0], ay = a[1], az = a[2], aw = a[3], - bz = Math.sin(rad), bw = Math.cos(rad); + quat.rotateAxis(out,quat2,axis,rad); - out[0] = ax * bw + ay * bz; - out[1] = ay * bw - ax * bz; - out[2] = az * bw + aw * bz; - out[3] = aw * bw - az * bz; return out; }; diff --git a/src/glmatrix/vec3.js b/src/glmatrix/vec3.js index 147e73d54..85252eac5 100644 --- a/src/glmatrix/vec3.js +++ b/src/glmatrix/vec3.js @@ -366,6 +366,10 @@ vec3.normalize = function(out, a) { out[0] = a[0] * len; out[1] = a[1] * len; out[2] = a[2] * len; + }else{ + out[0] = 0; + out[1] = 0; + out[2] = 1; } return out; }; diff --git a/src/math/Quaternion.js b/src/math/Quaternion.js index c14afedec..bcee03e3b 100644 --- a/src/math/Quaternion.js +++ b/src/math/Quaternion.js @@ -262,6 +262,19 @@ Quaternion.prototype = { this._dirty = true; return this; }, + /** + * + * @param axis + * @param rad + */ + rotateAxis:function (axis,rad) { + + var quat2 = new Quaternion().array; + + quat.rotateAxis(this.array,quat2,axis,rad); + this._dirty = true; + return this; + }, /** * Rotate self by a given radian about X axis @@ -269,7 +282,8 @@ Quaternion.prototype = { * @return {clay.Quaternion} */ rotateX: function (rad) { - quat.rotateX(this.array, this.array, rad); + + quat.rotateX(this.array, rad); this._dirty = true; return this; }, @@ -280,7 +294,8 @@ Quaternion.prototype = { * @return {clay.Quaternion} */ rotateY: function (rad) { - quat.rotateY(this.array, this.array, rad); + + quat.rotateY(this.array, rad); this._dirty = true; return this; }, @@ -291,7 +306,7 @@ Quaternion.prototype = { * @return {clay.Quaternion} */ rotateZ: function (rad) { - quat.rotateZ(this.array, this.array, rad); + quat.rotateZ(this.array, rad); this._dirty = true; return this; }, From 8c2d3fd81c34ace20268c47e017cdd12e3e6824c Mon Sep 17 00:00:00 2001 From: Thinkia Date: Mon, 24 Dec 2018 14:30:17 +0800 Subject: [PATCH 2/2] clear --- dist/claygl.es.js | 467 +---------------------------------------- dist/claygl.js | 467 +---------------------------------------- example/app_basic.html | 2 +- src/glmatrix/quat.js | 11 - 4 files changed, 9 insertions(+), 938 deletions(-) diff --git a/dist/claygl.es.js b/dist/claygl.es.js index b774200a9..20fc32fc7 100644 --- a/dist/claygl.es.js +++ b/dist/claygl.es.js @@ -1617,11 +1617,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 2 Dimensional Vector - * @name vec2 - */ - var vec2 = {}; /** @@ -2108,12 +2103,6 @@ vec2.forEach = (function() { }; })(); -/** - * @constructor - * @alias clay.Vector2 - * @param {number} x - * @param {number} y - */ var Vector2 = function(x, y) { x = x || 0; @@ -2836,36 +2825,6 @@ Vector2.transformMat4 = function(out, a, m) { // 2D Blend clip of blend tree // http://docs.unity3d.com/Documentation/Manual/2DBlending.html -/** - * @typedef {Object} clay.animation.Blend2DClip.IClipInput - * @property {clay.Vector2} position - * @property {clay.animation.Clip} clip - * @property {number} offset - */ - -/** - * 2d blending node in animation blend tree. - * output clip must have blend2D method - * @constructor - * @alias clay.animation.Blend2DClip - * @extends clay.animation.Clip - * - * @param {Object} [opts] - * @param {string} [opts.name] - * @param {Object} [opts.target] - * @param {number} [opts.life] - * @param {number} [opts.delay] - * @param {number} [opts.gap] - * @param {number} [opts.playbackRatio] - * @param {boolean|number} [opts.loop] If loop is a number, it indicate the loop count of animation - * @param {string|Function} [opts.easing] - * @param {Function} [opts.onframe] - * @param {Function} [opts.onfinish] - * @param {Function} [opts.onrestart] - * @param {object[]} [opts.inputs] - * @param {clay.Vector2} [opts.position] - * @param {clay.animation.Clip} [opts.output] - */ var Blend2DClip = function (opts) { opts = opts || {}; @@ -3020,11 +2979,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 3 Dimensional Vector - * @name vec3 - */ - var vec3 = {}; /** @@ -3671,11 +3625,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 4 Dimensional Vector - * @name vec4 - */ - var vec4 = {}; /** @@ -4197,11 +4146,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 3x3 Matrix - * @name mat3 - */ - var mat3 = {}; /** @@ -4850,11 +4794,9 @@ quat.setAxisAngle = function(out, axis, rad) { */ quat.rotateAxis = function (out,quat2,axis,rad) { - vec3.normalize(axis,axis); quat.setAxisAngle(quat2,axis,rad); quat.multiply(out,out,quat2); - }; /** @@ -4913,12 +4855,9 @@ quat.scale = vec4.scale; * @returns {quat} out */ quat.rotateX = function (out,rad) { - var quat2 =[0,0,0,1]; var axis = [1,0,0]; - quat.rotateAxis(out,quat2,axis,rad); - return out; }; @@ -4931,12 +4870,9 @@ quat.rotateX = function (out,rad) { * @returns {quat} out */ quat.rotateY = function (out,rad) { - var quat2 =[0,0,0,1]; var axis = [0,1,0]; - quat.rotateAxis(out,quat2,axis,rad); - return out; }; @@ -4951,9 +4887,7 @@ quat.rotateY = function (out,rad) { quat.rotateZ = function (out,rad) { var quat2 =[0,0,0,1]; var axis = [0,0,1]; - quat.rotateAxis(out,quat2,axis,rad); - return out; }; @@ -4968,7 +4902,6 @@ quat.rotateZ = function (out,rad) { */ quat.calculateW = function (out, a) { var x = a[0], y = a[1], z = a[2]; - out[0] = x; out[1] = y; out[2] = z; @@ -5174,7 +5107,6 @@ quat.fromMat3 = function(out, m) { // Sampler clip is especially for the animation sampler in glTF // Use Typed Array can reduce a lot of heap memory -// lerp function with offset in large array function vec3lerp(out, a, b, t, oa, ob) { var ax = a[oa]; var ay = a[oa + 1]; @@ -6066,12 +5998,6 @@ var util$1 = { } }; -/** - * Base class of all objects - * @constructor - * @alias clay.core.Base - * @mixes clay.core.mixin.notifier - */ var Base = function () { /** * @type {number} @@ -6203,28 +6129,6 @@ vendor.removeEventListener = function (dom, type, func) { dom.removeEventListener(type, func); }; -/** - * Animation is global timeline that schedule all clips. each frame animation will set the time of clips to current and update the states of clips - * @constructor clay.Timeline - * @extends clay.core.Base - * - * @example - * var animation = new clay.Timeline(); - * var node = new clay.Node(); - * animation.animate(node.position) - * .when(1000, { - * x: 500, - * y: 500 - * }) - * .when(2000, { - * x: 100, - * y: 100 - * }) - * .when(3000, { - * z: 10 - * }) - * .start('spline'); - */ var Timeline = Base.extend(function () { return /** @lends clay.Timeline# */{ /** @@ -6420,27 +6324,6 @@ var Timeline = Base.extend(function () { // DEPRECATED -/** - * - * Animation clip that manage a collection of {@link clay.animation.SamplerTrack} - * @constructor - * @alias clay.animation.TrackClip - * - * @extends clay.animation.Clip - * @param {Object} [opts] - * @param {string} [opts.name] - * @param {Object} [opts.target] - * @param {number} [opts.life] - * @param {number} [opts.delay] - * @param {number} [opts.gap] - * @param {number} [opts.playbackRatio] - * @param {boolean|number} [opts.loop] If loop is a number, it indicate the loop count of animation - * @param {string|Function} [opts.easing] - * @param {Function} [opts.onframe] - * @param {Function} [opts.onfinish] - * @param {Function} [opts.onrestart] - * @param {Array.} [opts.tracks] - */ var TrackClip = function (opts) { opts = opts || {}; @@ -7383,11 +7266,6 @@ LinkedList.Entry = function (val) { this.prev = null; }; -/** - * LRU Cache - * @constructor - * @alias clay.core.LRU - */ var LRU$1 = function (maxSize) { this._list = new LinkedList(); @@ -9696,11 +9574,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 4x4 Matrix - * @name mat4 - */ - var mat4 = {}; /** @@ -10616,7 +10489,6 @@ mat4.frob = function (a) { // TODO Resources like shader, texture, geometry reference management // Trace and find out which shader, texture, geometry can be destroyed -// Light header Shader['import'](prezGlsl); var mat4Create = mat4.create; @@ -11945,13 +11817,6 @@ Renderer.DEPTH_BUFFER_BIT = glenum.DEPTH_BUFFER_BIT; */ Renderer.STENCIL_BUFFER_BIT = glenum.STENCIL_BUFFER_BIT; -/** - * @constructor - * @alias clay.Vector3 - * @param {number} x - * @param {number} y - * @param {number} z - */ var Vector3 = function(x, y, z) { x = x || 0; @@ -12942,14 +12807,6 @@ Object.defineProperties(Vector3, { } }); -/** - * @constructor - * @alias clay.Quaternion - * @param {number} x - * @param {number} y - * @param {number} z - * @param {number} w - */ var Quaternion = function (x, y, z, w) { x = x || 0; @@ -13727,10 +13584,6 @@ Quaternion.fromEuler = function (out, v, order) { } }; -/** - * @constructor - * @alias clay.Matrix4 - */ var Matrix4 = function() { this._axisX = new Vector3(); @@ -15515,12 +15368,6 @@ var Light = Node.extend(function(){ } }); -/** - * @constructor - * @alias clay.Plane - * @param {clay.Vector3} [normal] - * @param {number} [distance] - */ var Plane$1 = function(normal, distance) { /** * Normal of the plane @@ -16169,10 +16016,6 @@ Ray.prototype = { } }; -/** - * @constructor clay.Camera - * @extends clay.Node - */ var Camera = Node.extend(function () { return /** @lends clay.Camera# */ { /** @@ -18165,13 +18008,6 @@ Geometry.IndicesBuffer = GeometryBase.IndicesBuffer; Geometry.Attribute = Attribute; -/** - * @constructor clay.geometry.Plane - * @extends clay.Geometry - * @param {Object} [opt] - * @param {number} [opt.widthSegments] - * @param {number} [opt.heightSegments] - */ var Plane$3 = Geometry.extend( /** @lends clay.geometry.Plane# */ { @@ -18363,18 +18199,6 @@ function createPlane(pos, widthSegments, heightSegments) { return plane; } -/** - * @constructor clay.geometry.Sphere - * @extends clay.Geometry - * @param {Object} [opt] - * @param {number} [widthSegments] - * @param {number} [heightSegments] - * @param {number} [phiStart] - * @param {number} [phiLength] - * @param {number} [thetaStart] - * @param {number} [thetaLength] - * @param {number} [radius] - */ var Sphere$1 = Geometry.extend(/** @lends clay.geometry.Sphere# */ { dynamic: false, /** @@ -18498,17 +18322,6 @@ var Sphere$1 = Geometry.extend(/** @lends clay.geometry.Sphere# */ { } }); -/** - * @constructor clay.geometry.ParametricSurface - * @extends clay.Geometry - * @param {Object} [opt] - * @param {Object} [generator] - * @param {Function} generator.x - * @param {Function} generator.y - * @param {Function} generator.z - * @param {Array} [generator.u=[0, 1, 0.05]] - * @param {Array} [generator.v=[0, 1, 0.05]] - */ var ParametricSurface$1 = Geometry.extend( /** @lends clay.geometry.ParametricSurface# */ { @@ -18600,11 +18413,6 @@ var ParametricSurface$1 = Geometry.extend( * Base class for all textures like compressed texture, texture2d, texturecube * TODO mapping */ -/** - * @constructor - * @alias clay.Texture - * @extends clay.core.Base - */ var Texture = Base.extend( /** @lends clay.Texture# */ { /** * Texture width, readonly when the texture source is image @@ -19538,11 +19346,6 @@ function isImageRenderable(image) { return image.width > 0 && image.height > 0; } -/** - * @constructor - * @alias clay.Renderable - * @extends clay.Node - */ var Renderable = Node.extend(/** @lends clay.Renderable# */ { /** * @type {clay.Material} @@ -19745,10 +19548,6 @@ Renderable.CW = glenum.CW; */ Renderable.CCW = glenum.CCW; -/** - * @constructor clay.Mesh - * @extends clay.Renderable - */ var Mesh = Renderable.extend(/** @lends clay.Mesh# */ { /** * Used when it is a skinned mesh @@ -19802,10 +19601,6 @@ Mesh.FRONT_AND_BACK = glenum.FRONT_AND_BACK; Mesh.CW = glenum.CW; Mesh.CCW = glenum.CCW; -/** - * @constructor clay.camera.Perspective - * @extends clay.Camera - */ var Perspective$1 = Camera.extend(/** @lends clay.camera.Perspective# */{ /** * Vertical field of view in degrees @@ -19857,10 +19652,6 @@ var Perspective$1 = Camera.extend(/** @lends clay.camera.Perspective# */{ } }); -/** - * @constructor clay.camera.Orthographic - * @extends clay.Camera - */ var Orthographic$1 = Camera.extend( /** @lends clay.camera.Orthographic# */ { @@ -19923,7 +19714,6 @@ var Orthographic$1 = Camera.extend( var standardEssl = "\n@export clay.standard.chunk.varying\nvarying vec2 v_Texcoord;\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\nvarying vec3 v_Barycentric;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n#if defined(AOMAP_ENABLED)\nvarying vec2 v_Texcoord2;\n#endif\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n@end\n@export clay.standard.chunk.light_header\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n@import clay.header.ambient_cubemap_light\n#endif\n#ifdef POINT_LIGHT_COUNT\n@import clay.header.point_light\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n#ifdef SPOT_LIGHT_COUNT\n@import clay.header.spot_light\n#endif\n@end\n@export clay.standard.vertex\n#define SHADER_NAME standard\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 worldInverseTranspose : WORLDINVERSETRANSPOSE;\nuniform mat4 world : WORLD;\nuniform vec2 uvRepeat = vec2(1.0, 1.0);\nuniform vec2 uvOffset = vec2(0.0, 0.0);\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\n#if defined(AOMAP_ENABLED)\nattribute vec2 texcoord2 : TEXCOORD_1;\n#endif\nattribute vec3 normal : NORMAL;\nattribute vec4 tangent : TANGENT;\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\n#endif\nattribute vec3 barycentric;\n@import clay.standard.chunk.varying\n@import clay.chunk.skinning_header\nvoid main()\n{\n vec3 skinnedPosition = position;\n vec3 skinnedNormal = normal;\n vec3 skinnedTangent = tangent.xyz;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n skinnedNormal = (skinMatrixWS * vec4(normal, 0.0)).xyz;\n skinnedTangent = (skinMatrixWS * vec4(tangent.xyz, 0.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition, 1.0);\n v_Texcoord = texcoord * uvRepeat + uvOffset;\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n v_Barycentric = barycentric;\n v_Normal = normalize((worldInverseTranspose * vec4(skinnedNormal, 0.0)).xyz);\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n v_Tangent = normalize((worldInverseTranspose * vec4(skinnedTangent, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n#endif\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n#if defined(AOMAP_ENABLED)\n v_Texcoord2 = texcoord2;\n#endif\n}\n@end\n@export clay.standard.fragment\n#define PI 3.14159265358979\n#define GLOSSINESS_CHANNEL 0\n#define ROUGHNESS_CHANNEL 0\n#define METALNESS_CHANNEL 1\n#define DIFFUSEMAP_ALPHA_ALPHA\n@import clay.standard.chunk.varying\nuniform mat4 viewInverse : VIEWINVERSE;\n#ifdef NORMALMAP_ENABLED\nuniform sampler2D normalMap;\n#endif\nuniform float normalScale: 1.0;\n#ifdef DIFFUSEMAP_ENABLED\nuniform sampler2D diffuseMap;\n#endif\n#ifdef SPECULARMAP_ENABLED\nuniform sampler2D specularMap;\n#endif\n#ifdef USE_ROUGHNESS\nuniform float roughness : 0.5;\n #ifdef ROUGHNESSMAP_ENABLED\nuniform sampler2D roughnessMap;\n #endif\n#else\nuniform float glossiness: 0.5;\n #ifdef GLOSSINESSMAP_ENABLED\nuniform sampler2D glossinessMap;\n #endif\n#endif\n#ifdef METALNESSMAP_ENABLED\nuniform sampler2D metalnessMap;\n#endif\n#ifdef OCCLUSIONMAP_ENABLED\nuniform sampler2D occlusionMap;\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\nuniform samplerCube environmentMap;\n #ifdef PARALLAX_CORRECTED\nuniform vec3 environmentBoxMin;\nuniform vec3 environmentBoxMax;\n #endif\n#endif\n#ifdef BRDFLOOKUP_ENABLED\nuniform sampler2D brdfLookup;\n#endif\n#ifdef EMISSIVEMAP_ENABLED\nuniform sampler2D emissiveMap;\n#endif\n#ifdef SSAOMAP_ENABLED\nuniform sampler2D ssaoMap;\nuniform vec4 viewport : VIEWPORT;\n#endif\n#ifdef AOMAP_ENABLED\nuniform sampler2D aoMap;\nuniform float aoIntensity;\n#endif\nuniform vec3 color : [1.0, 1.0, 1.0];\nuniform float alpha : 1.0;\n#ifdef ALPHA_TEST\nuniform float alphaCutoff: 0.9;\n#endif\n#ifdef USE_METALNESS\nuniform float metalness : 0.0;\n#else\nuniform vec3 specularColor : [0.1, 0.1, 0.1];\n#endif\nuniform vec3 emission : [0.0, 0.0, 0.0];\nuniform float emissionIntensity: 1;\nuniform float lineWidth : 0.0;\nuniform vec4 lineColor : [0.0, 0.0, 0.0, 0.6];\n#ifdef ENVIRONMENTMAP_PREFILTER\nuniform float maxMipmapLevel: 5;\n#endif\n@import clay.standard.chunk.light_header\n@import clay.util.calculate_attenuation\n@import clay.util.edge_factor\n@import clay.util.rgbm\n@import clay.util.srgb\n@import clay.plugin.compute_shadow_map\n@import clay.util.parallax_correct\n@import clay.util.ACES\nfloat G_Smith(float g, float ndv, float ndl)\n{\n float roughness = 1.0 - g;\n float k = roughness * roughness / 2.0;\n float G1V = ndv / (ndv * (1.0 - k) + k);\n float G1L = ndl / (ndl * (1.0 - k) + k);\n return G1L * G1V;\n}\nvec3 F_Schlick(float ndv, vec3 spec) {\n return spec + (1.0 - spec) * pow(1.0 - ndv, 5.0);\n}\nfloat D_Phong(float g, float ndh) {\n float a = pow(8192.0, g);\n return (a + 2.0) / 8.0 * pow(ndh, a);\n}\nfloat D_GGX(float g, float ndh) {\n float r = 1.0 - g;\n float a = r * r;\n float tmp = ndh * ndh * (a - 1.0) + 1.0;\n return a / (PI * tmp * tmp);\n}\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\nuniform float parallaxOcclusionScale : 0.02;\nuniform float parallaxMaxLayers : 20;\nuniform float parallaxMinLayers : 5;\nuniform sampler2D parallaxOcclusionMap;\nmat3 transpose(in mat3 inMat)\n{\n vec3 i0 = inMat[0];\n vec3 i1 = inMat[1];\n vec3 i2 = inMat[2];\n return mat3(\n vec3(i0.x, i1.x, i2.x),\n vec3(i0.y, i1.y, i2.y),\n vec3(i0.z, i1.z, i2.z)\n );\n}\nvec2 parallaxUv(vec2 uv, vec3 viewDir)\n{\n float numLayers = mix(parallaxMaxLayers, parallaxMinLayers, abs(dot(vec3(0.0, 0.0, 1.0), viewDir)));\n float layerHeight = 1.0 / numLayers;\n float curLayerHeight = 0.0;\n vec2 deltaUv = viewDir.xy * parallaxOcclusionScale / (viewDir.z * numLayers);\n vec2 curUv = uv;\n float height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n for (int i = 0; i < 30; i++) {\n curLayerHeight += layerHeight;\n curUv -= deltaUv;\n height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n if (height < curLayerHeight) {\n break;\n }\n }\n vec2 prevUv = curUv + deltaUv;\n float next = height - curLayerHeight;\n float prev = 1.0 - texture2D(parallaxOcclusionMap, prevUv).r - curLayerHeight + layerHeight;\n return mix(curUv, prevUv, next / (next - prev));\n}\n#endif\nvoid main() {\n vec4 albedoColor = vec4(color, alpha);\n#ifdef VERTEX_COLOR\n albedoColor *= v_Color;\n#endif\n#ifdef SRGB_DECODE\n albedoColor = sRGBToLinear(albedoColor);\n#endif\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n vec2 uv = v_Texcoord;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n mat3 tbn = mat3(v_Tangent, v_Bitangent, v_Normal);\n#endif\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\n uv = parallaxUv(v_Texcoord, normalize(transpose(tbn) * -V));\n#endif\n#ifdef DIFFUSEMAP_ENABLED\n vec4 texel = texture2D(diffuseMap, uv);\n #ifdef SRGB_DECODE\n texel = sRGBToLinear(texel);\n #endif\n albedoColor.rgb *= texel.rgb;\n #ifdef DIFFUSEMAP_ALPHA_ALPHA\n albedoColor.a *= texel.a;\n #endif\n#endif\n#ifdef USE_METALNESS\n float m = metalness;\n #ifdef METALNESSMAP_ENABLED\n float m2 = texture2D(metalnessMap, uv)[METALNESS_CHANNEL];\n m = clamp(m2 + (m - 0.5) * 2.0, 0.0, 1.0);\n #endif\n vec3 baseColor = albedoColor.rgb;\n albedoColor.rgb = baseColor * (1.0 - m);\n vec3 spec = mix(vec3(0.04), baseColor, m);\n#else\n vec3 spec = specularColor;\n#endif\n#ifdef USE_ROUGHNESS\n float g = clamp(1.0 - roughness, 0.0, 1.0);\n #ifdef ROUGHNESSMAP_ENABLED\n float g2 = 1.0 - texture2D(roughnessMap, uv)[ROUGHNESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#else\n float g = glossiness;\n #ifdef GLOSSINESSMAP_ENABLED\n float g2 = texture2D(glossinessMap, uv)[GLOSSINESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#endif\n#ifdef SPECULARMAP_ENABLED\n spec *= sRGBToLinear(texture2D(specularMap, uv)).rgb;\n#endif\n vec3 N = v_Normal;\n#ifdef DOUBLE_SIDED\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n#ifdef NORMALMAP_ENABLED\n if (dot(v_Tangent, v_Tangent) > 0.0) {\n vec3 normalTexel = texture2D(normalMap, uv).xyz;\n if (dot(normalTexel, normalTexel) > 0.0) { N = (normalTexel * 2.0 - 1.0);\n N = normalize(N * vec3(normalScale, normalScale, 1.0));\n tbn[1] = -tbn[1];\n N = normalize(tbn * N);\n }\n }\n#endif\n vec3 diffuseTerm = vec3(0.0, 0.0, 0.0);\n vec3 specularTerm = vec3(0.0, 0.0, 0.0);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n vec3 fresnelTerm = F_Schlick(ndv, spec);\n#ifdef AMBIENT_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += ambientLightColor[_idx_];\n }}\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += calcAmbientSHLight(_idx_, N) * ambientSHLightColor[_idx_];\n }}\n#endif\n#ifdef POINT_LIGHT_COUNT\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsPoint[POINT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfPointLights(v_WorldPosition, shadowContribsPoint);\n }\n#endif\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_COUNT; _idx_++)\n {{\n vec3 lightPosition = pointLightPosition[_idx_];\n vec3 lc = pointLightColor[_idx_];\n float range = pointLightRange[_idx_];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsPoint[_idx_];\n }\n#endif\n vec3 li = lc * ndl * attenuation * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++)\n {{\n vec3 L = -normalize(directionalLightDirection[_idx_]);\n vec3 lc = directionalLightColor[_idx_];\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsDir[_idx_];\n }\n#endif\n vec3 li = lc * ndl * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef SPOT_LIGHT_COUNT\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsSpot[SPOT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfSpotLights(v_WorldPosition, shadowContribsSpot);\n }\n#endif\n for(int i = 0; i < SPOT_LIGHT_COUNT; i++)\n {\n vec3 lightPosition = spotLightPosition[i];\n vec3 spotLightDirection = -normalize(spotLightDirection[i]);\n vec3 lc = spotLightColor[i];\n float range = spotLightRange[i];\n float a = spotLightUmbraAngleCosine[i];\n float b = spotLightPenumbraAngleCosine[i];\n float falloffFactor = spotLightFalloffFactor[i];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n float c = dot(spotLightDirection, L);\n float falloff;\n falloff = clamp((c - a) /(b - a), 0.0, 1.0);\n falloff = pow(falloff, falloffFactor);\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsSpot[i];\n }\n#endif\n vec3 li = lc * attenuation * (1.0 - falloff) * shadowContrib * ndl;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }\n#endif\n vec4 outColor = albedoColor;\n outColor.rgb *= max(diffuseTerm, vec3(0.0));\n outColor.rgb += max(specularTerm, vec3(0.0));\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n vec3 L = reflect(-V, N);\n float rough2 = clamp(1.0 - g, 0.0, 1.0);\n float bias2 = rough2 * 5.0;\n vec2 brdfParam2 = texture2D(ambientCubemapLightBRDFLookup[0], vec2(rough2, ndv)).xy;\n vec3 envWeight2 = spec * brdfParam2.x + brdfParam2.y;\n vec3 envTexel2;\n for(int _idx_ = 0; _idx_ < AMBIENT_CUBEMAP_LIGHT_COUNT; _idx_++)\n {{\n #ifdef SUPPORT_TEXTURE_LOD\n envTexel2 = RGBMDecode(textureCubeLodEXT(ambientCubemapLightCubemap[_idx_], L, bias2), 8.12);\n #else\n envTexel2 = RGBMDecode(textureCube(ambientCubemapLightCubemap[_idx_], L), 8.12);\n #endif\n outColor.rgb += ambientCubemapLightColor[_idx_] * envTexel2 * envWeight2;\n }}\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\n vec3 envWeight = g * fresnelTerm;\n vec3 L = reflect(-V, N);\n #ifdef PARALLAX_CORRECTED\n L = parallaxCorrect(L, v_WorldPosition, environmentBoxMin, environmentBoxMax);\n#endif\n #ifdef ENVIRONMENTMAP_PREFILTER\n float rough = clamp(1.0 - g, 0.0, 1.0);\n float bias = rough * maxMipmapLevel;\n #ifdef SUPPORT_TEXTURE_LOD\n vec3 envTexel = decodeHDR(textureCubeLodEXT(environmentMap, L, bias)).rgb;\n #else\n vec3 envTexel = decodeHDR(textureCube(environmentMap, L)).rgb;\n #endif\n #ifdef BRDFLOOKUP_ENABLED\n vec2 brdfParam = texture2D(brdfLookup, vec2(rough, ndv)).xy;\n envWeight = spec * brdfParam.x + brdfParam.y;\n #endif\n #else\n vec3 envTexel = textureCube(environmentMap, L).xyz;\n #endif\n outColor.rgb += envTexel * envWeight;\n#endif\n float aoFactor = 1.0;\n#ifdef SSAOMAP_ENABLED\n aoFactor = min(texture2D(ssaoMap, (gl_FragCoord.xy - viewport.xy) / viewport.zw).r, aoFactor);\n#endif\n#ifdef AOMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(aoMap, v_Texcoord2).r) * aoIntensity, 0.0, 1.0), aoFactor);\n#endif\n#ifdef OCCLUSIONMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(occlusionMap, v_Texcoord).r), 0.0, 1.0), aoFactor);\n#endif\n outColor.rgb *= aoFactor;\n vec3 lEmission = emission;\n#ifdef EMISSIVEMAP_ENABLED\n lEmission *= texture2D(emissiveMap, uv).rgb;\n#endif\n outColor.rgb += lEmission * emissionIntensity;\n if(lineWidth > 0.)\n {\n outColor.rgb = mix(outColor.rgb, lineColor.rgb, (1.0 - edgeFactor(lineWidth)) * lineColor.a);\n }\n#ifdef ALPHA_TEST\n if (outColor.a < alphaCutoff) {\n discard;\n }\n#endif\n#ifdef TONEMAPPING\n outColor.rgb = ACESToneMapping(outColor.rgb);\n#endif\n#ifdef SRGB_ENCODE\n outColor = linearTosRGB(outColor);\n#endif\n gl_FragColor = encodeHDR(outColor);\n}\n@end\n@export clay.standardMR.vertex\n@import clay.standard.vertex\n@end\n@export clay.standardMR.fragment\n#define USE_METALNESS\n#define USE_ROUGHNESS\n@import clay.standard.fragment\n@end"; -// Import standard shader Shader['import'](standardEssl); var TEXTURE_PROPERTIES = ['diffuseMap', 'normalMap', 'roughnessMap', 'metalnessMap', 'emissiveMap', 'environmentMap', 'brdfLookup', 'ssaoMap', 'aoMap']; @@ -20297,10 +20087,6 @@ var library = { } }; -/** - * @constructor clay.Joint - * @extends clay.core.Base - */ var Joint = Base.extend( /** @lends clay.Joint# */ { @@ -20749,13 +20535,14 @@ library.template('clay.prez', Shader.source('clay.prez.vertex'), Shader.source(' library.template('clay.standard', Shader.source('clay.standard.vertex'), Shader.source('clay.standard.fragment')); library.template('clay.standardMR', Shader.source('clay.standardMR.vertex'), Shader.source('clay.standardMR.fragment')); +// TODO Must export a module and be used in the other modules. Or it will be tree shaked + /** * glTF Loader * Specification https://github.com/KhronosGroup/glTF/blob/master/specification/README.md * * TODO Morph targets */ -// Import builtin shader var semanticAttributeMap = { 'NORMAL': 'normal', 'POSITION': 'position', @@ -21994,19 +21781,6 @@ GLTFLoader.generateMeshName = function (meshes, idx, primitiveIdx) { return primitiveIdx === 0 ? meshName : (meshName + '$' + primitiveIdx); }; -/** - * @constructor clay.light.Directional - * @extends clay.Light - * - * @example - * var light = new clay.light.Directional({ - * intensity: 0.5, - * color: [1.0, 0.0, 0.0] - * }); - * light.position.set(10, 10, 10); - * light.lookAt(clay.Vector3.ZERO); - * scene.add(light); - */ var DirectionalLight = Light.extend(/** @lends clay.light.Directional# */ { /** * @type {number} @@ -22062,10 +21836,6 @@ var DirectionalLight = Light.extend(/** @lends clay.light.Directional# */ { } }); -/** - * @constructor clay.light.Point - * @extends clay.Light - */ var PointLight = Light.extend(/** @lends clay.light.Point# */ { /** * @type {number} @@ -22113,10 +21883,6 @@ var PointLight = Light.extend(/** @lends clay.light.Point# */ { } }); -/** - * @constructor clay.light.Spot - * @extends clay.Light - */ var SpotLight = Light.extend(/**@lends clay.light.Spot */ { /** * @type {number} @@ -22210,10 +21976,6 @@ var SpotLight = Light.extend(/**@lends clay.light.Spot */ { } }); -/** - * @constructor clay.light.Ambient - * @extends clay.Light - */ var AmbientLight = Light.extend({ castShadow: false @@ -23098,8 +22860,6 @@ var EnvironmentMapPass = Base.extend(function() { } }); -// http://msdn.microsoft.com/en-us/library/windows/desktop/bb943991(v=vs.85).aspx -// https://github.com/toji/webgl-texture-utils/blob/master/texture-util/dds.js var DDS_MAGIC = 0x20534444; var DDSD_MIPMAPCOUNT = 0x20000; @@ -23384,9 +23144,6 @@ var ret$1 = { } }; -/** - * @alias clay.util.texture - */ var textureUtil = { /** * @param {string|object} path @@ -23960,12 +23717,6 @@ cubemapUtil.generateNormalDistribution = function (roughnessLevels, sampleSize) }; // https://docs.unrealengine.com/latest/INT/Engine/Rendering/LightingAndShadows/AmbientCubemap/ -/** - * Ambient cubemap light provides specular parts of Image Based Lighting. - * Which is a basic requirement for Physically Based Rendering - * @constructor clay.light.AmbientCubemap - * @extends clay.Light - */ var AmbientCubemapLight = Light.extend({ /** @@ -24054,11 +23805,6 @@ var AmbientCubemapLight = Light.extend({ */ }); -/** - * Spherical Harmonic Ambient Light - * @constructor clay.light.AmbientSH - * @extends clay.Light - */ var AmbientSHLight = Light.extend({ castShadow: false, @@ -25091,10 +24837,6 @@ ShadowMapPass.VSM = 1; */ ShadowMapPass.PCF = 2; -/** - * @constructor clay.picking.RayPicking - * @extends clay.core.Base - */ var RayPicking = Base.extend(/** @lends clay.picking.RayPicking# */{ /** * Target scene @@ -25347,6 +25089,7 @@ var sh = {}; var targets$3 = ['px', 'nx', 'py', 'ny', 'pz', 'nz']; +// Project on gpu, but needs browser to support readPixels as Float32Array. function harmonics(normal, index){ var x = normal[0]; var y = normal[1]; @@ -26845,11 +26588,6 @@ var application = { } }; -/** - * @constructor - * @alias clay.async.Task - * @mixes clay.core.mixin.notifier - */ function Task() { this._fullfilled = false; this._rejected = false; @@ -26961,11 +26699,6 @@ Task.makeTask = function() { util$1.extend(Task.prototype, notifier); -/** - * @constructor - * @alias clay.async.TaskGroup - * @extends clay.async.Task - */ var TaskGroup = function () { Task.apply(this, arguments); @@ -27187,16 +26920,6 @@ TaskGroup.prototype.getTaskNumber = function (recursive) { } }; -// PENDING -// Use topological sort ? - -/** - * Node of graph based post processing. - * - * @constructor clay.compositor.CompositorNode - * @extends clay.core.Base - * - */ var CompositorNode = Base.extend(function () { return /** @lends clay.compositor.CompositorNode# */ { /** @@ -27430,10 +27153,6 @@ var CompositorNode = Base.extend(function () { } }); -/** - * @constructor clay.compositor.Graph - * @extends clay.core.Base - */ var Graph = Base.extend(function () { return /** @lends clay.compositor.Graph# */ { /** @@ -27566,13 +27285,6 @@ var Graph = Base.extend(function () { } }); -/** - * Compositor provide graph based post processing - * - * @constructor clay.compositor.Compositor - * @extends clay.compositor.Graph - * - */ var Compositor = Graph.extend(function() { return { // Output node @@ -27647,10 +27359,6 @@ var Compositor = Graph.extend(function() { } }); -/** - * @constructor clay.compositor.SceneNode - * @extends clay.compositor.CompositorNode - */ var SceneNode$1 = CompositorNode.extend( /** @lends clay.compositor.SceneNode# */ { @@ -27737,10 +27445,6 @@ var SceneNode$1 = CompositorNode.extend( } }); -/** - * @constructor clay.compositor.TextureNode - * @extends clay.compositor.CompositorNode - */ var TextureNode$1 = CompositorNode.extend(function() { return /** @lends clay.compositor.TextureNode# */ { /** @@ -27766,45 +27470,6 @@ var TextureNode$1 = CompositorNode.extend(function() { }); // TODO Shader library -// TODO curlnoise demo wrong - -// PENDING -// Use topological sort ? - -/** - * Filter node - * - * @constructor clay.compositor.FilterNode - * @extends clay.compositor.CompositorNode - * - * @example - var node = new clay.compositor.FilterNode({ - name: 'fxaa', - shader: clay.Shader.source('clay.compositor.fxaa'), - inputs: { - texture: { - node: 'scene', - pin: 'color' - } - }, - // Multiple outputs is preserved for MRT support in WebGL2.0 - outputs: { - color: { - attachment: clay.FrameBuffer.COLOR_ATTACHMENT0 - parameters: { - format: clay.Texture.RGBA, - width: 512, - height: 512 - }, - // Node will keep the RTT rendered in last frame - keepLastFrame: true, - // Force the node output the RTT rendered in last frame - outputLastFrame: true - } - } - }); - * - */ var FilterNode$1 = CompositorNode.extend(function () { return /** @lends clay.compositor.FilterNode# */ { /** @@ -28092,9 +27757,6 @@ var blendEssl = "@export clay.compositor.blend\n#define SHADER_NAME blend\n#ifde var fxaaEssl = "@export clay.compositor.fxaa\nuniform sampler2D texture;\nuniform vec4 viewport : VIEWPORT;\nvarying vec2 v_Texcoord;\n#define FXAA_REDUCE_MIN (1.0/128.0)\n#define FXAA_REDUCE_MUL (1.0/8.0)\n#define FXAA_SPAN_MAX 8.0\n@import clay.util.rgbm\nvoid main()\n{\n vec2 resolution = 1.0 / viewport.zw;\n vec3 rgbNW = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( -1.0, -1.0 ) ) * resolution ) ).xyz;\n vec3 rgbNE = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( 1.0, -1.0 ) ) * resolution ) ).xyz;\n vec3 rgbSW = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( -1.0, 1.0 ) ) * resolution ) ).xyz;\n vec3 rgbSE = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( 1.0, 1.0 ) ) * resolution ) ).xyz;\n vec4 rgbaM = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution ) );\n vec3 rgbM = rgbaM.xyz;\n float opacity = rgbaM.w;\n vec3 luma = vec3( 0.299, 0.587, 0.114 );\n float lumaNW = dot( rgbNW, luma );\n float lumaNE = dot( rgbNE, luma );\n float lumaSW = dot( rgbSW, luma );\n float lumaSE = dot( rgbSE, luma );\n float lumaM = dot( rgbM, luma );\n float lumaMin = min( lumaM, min( min( lumaNW, lumaNE ), min( lumaSW, lumaSE ) ) );\n float lumaMax = max( lumaM, max( max( lumaNW, lumaNE) , max( lumaSW, lumaSE ) ) );\n vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n float dirReduce = max( ( lumaNW + lumaNE + lumaSW + lumaSE ) * ( 0.25 * FXAA_REDUCE_MUL ), FXAA_REDUCE_MIN );\n float rcpDirMin = 1.0 / ( min( abs( dir.x ), abs( dir.y ) ) + dirReduce );\n dir = min( vec2( FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max( vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * resolution;\n vec3 rgbA = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * ( 1.0 / 3.0 - 0.5 ) ) ).xyz;\n rgbA += decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * ( 2.0 / 3.0 - 0.5 ) ) ).xyz;\n rgbA *= 0.5;\n vec3 rgbB = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * -0.5 ) ).xyz;\n rgbB += decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * 0.5 ) ).xyz;\n rgbB *= 0.25;\n rgbB += rgbA * 0.5;\n float lumaB = dot( rgbB, luma );\n if ( ( lumaB < lumaMin ) || ( lumaB > lumaMax ) )\n {\n gl_FragColor = vec4( rgbA, opacity );\n }\n else {\n gl_FragColor = vec4( rgbB, opacity );\n }\n}\n@end"; -// import fxaa3Essl from './source/compositor/fxaa3.glsl.js'; - -// TODO Must export a module and be used in the other modules. Or it will be tree shaked function register(Shader) { // Some build in shaders Shader['import'](coloradjustEssl); @@ -29023,16 +28685,6 @@ var GBuffer = Base.extend(function () { } }); -/** - * @constructor clay.geometry.Cone - * @extends clay.Geometry - * @param {Object} [opt] - * @param {number} [opt.topRadius] - * @param {number} [opt.bottomRadius] - * @param {number} [opt.height] - * @param {number} [opt.capSegments] - * @param {number} [opt.heightSegments] - */ var Cone$1 = Geometry.extend(/** @lends clay.geometry.Cone# */ { dynamic: false, /** @@ -29155,15 +28807,6 @@ var Cone$1 = Geometry.extend(/** @lends clay.geometry.Cone# */ { } }); -/** - * @constructor clay.geometry.Cylinder - * @extends clay.Geometry - * @param {Object} [opt] - * @param {number} [opt.radius] - * @param {number} [opt.height] - * @param {number} [opt.capSegments] - * @param {number} [opt.heightSegments] - */ var Cylinder$1 = Geometry.extend( /** @lends clay.geometry.Cylinder# */ { @@ -29233,7 +28876,6 @@ var tubeGlsl = "@export clay.deferred.tube_light\n@import clay.deferred.chunk.li // Light-pre pass deferred rendering // http://www.realtimerendering.com/blog/deferred-lighting-approaches/ -// Light shaders Shader.import(prezGlsl); Shader.import(utilGlsl); Shader.import(lightvolumeGlsl); @@ -29861,11 +29503,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 2x2 Matrix - * @name mat2 - */ - var mat2 = {}; /** @@ -30112,25 +29749,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 2x3 Matrix - * @name mat2d - * - * @description - * A mat2d contains six elements defined as: - *
- * [a, c, tx,
- *  b, d, ty]
- * 
- * This is a short form for the 3x3 matrix: - *
- * [a, c, tx,
- *  b, d, ty,
- *  0, 0, 1]
- * 
- * The last row is ignored so the array is shorter and operations are faster. - */ - var mat2d = {}; /** @@ -30375,10 +29993,6 @@ var glmatrix = { // DEPRECATED -/** - * @constructor clay.light.Sphere - * @extends {clay.Light} - */ var SphereLight = Light.extend( /** @lends clay.light.Sphere# */ { @@ -30425,10 +30039,6 @@ var SphereLight = Light.extend( } }); -/** - * @constructor clay.light.Tube - * @extends {clay.Light} - */ var TubeLight = Light.extend( /** @lends clay.light.Tube# */ { @@ -30483,10 +30093,6 @@ var TubeLight = Light.extend( } }); -/** - * @constructor clay.loader.FX - * @extends clay.core.Base - */ var FXLoader = Base.extend(/** @lends clay.loader.FX# */ { /** * @type {string} @@ -30543,10 +30149,6 @@ var FXLoader = Base.extend(/** @lends clay.loader.FX# */ { } }); -/** - * @constructor - * @alias clay.Matrix2 - */ var Matrix2 = function() { /** @@ -30827,10 +30429,6 @@ Matrix2.transpose = function(out, a) { return out; }; -/** - * @constructor - * @alias clay.Matrix2d - */ var Matrix2d = function() { /** * Storage of Matrix2d @@ -31093,10 +30691,6 @@ Matrix2d.translate = function(out, a, v) { return out; }; -/** - * @constructor - * @alias clay.Matrix3 - */ var Matrix3 = function () { /** @@ -31486,11 +31080,6 @@ Matrix3.translate = function (out, a, v) { return out; }; -/** - * Random or constant 1d, 2d, 3d vector generator - * @constructor - * @alias clay.Value - */ var Value = function() {}; /** @@ -31625,14 +31214,6 @@ Value.random3D = function(min, max) { return new Random3D(min, max); }; -/** - * @constructor - * @alias clay.Vector4 - * @param {number} x - * @param {number} y - * @param {number} z - * @param {number} w - */ var Vector4 = function(x, y, z, w) { x = x || 0; @@ -32341,10 +31922,6 @@ Vector4.transformQuat = function(out, a, q) { return out; }; -/** - * @constructor - * @alias clay.particle.Particle - */ var Particle = function() { /** * @type {clay.Vector3} @@ -32406,10 +31983,6 @@ Particle.prototype.update = function(deltaTime) { } }; -/** - * @constructor clay.particle.Emitter - * @extends clay.core.Base - */ var Emitter = Base.extend( /** @lends clay.particle.Emitter# */ { /** * Maximum number of particles created by this emitter @@ -32557,10 +32130,6 @@ Emitter.random2D = Value.random2D; */ Emitter.random3D = Value.random3D; -/** - * @constructor clay.particle.Field - * @extends clay.core.Base - */ var Field = Base.extend({}, { /** * Apply a field to the particle and update the particle velocity @@ -32573,10 +32142,6 @@ var Field = Base.extend({}, { applyTo: function(velocity, position, weight, deltaTime) {} }); -/** - * @constructor clay.particle.ForceField - * @extends clay.particle.Field - */ var ForceField = Field.extend(function() { return { force: new Vector3() @@ -33313,23 +32878,6 @@ var FreeControl = Base.extend(function() { } }); -/** - * Gamepad Control plugin. - * - * @constructor clay.plugin.GamepadControl - * - * @example - * init: function(app) { - * this._gamepadControl = new clay.plugin.GamepadControl({ - * target: camera, - * onStandardGamepadReady: customCallback - * }); - * }, - * - * loop: function(app) { - * this._gamepadControl.update(app.frameTime); - * } - */ var GamepadControl = Base.extend(function() { return /** @lends clay.plugin.GamepadControl# */ { @@ -34666,18 +34214,11 @@ Object.defineProperty(OrbitControl.prototype, 'target', { /** * StaticGeometry can not be changed once they've been setup */ -/** - * @constructor clay.StaticGeometry - * @extends clay.Geometry - */ var StaticGeometry = Geometry.extend({ dynamic: false }); // TODO test -/** - * @namespace clay.util.mesh - */ var meshUtil = { /** * Merge multiple meshes to one. @@ -35585,4 +35126,4 @@ var vr = { }; export { animation, application, async, Camera, camera, compositor, core, createCompositor, deferred, dep, FrameBuffer, Geometry, geometry, GeometryBase, Joint, Light, light, loader, Material, math, BoundingBox, Frustum, Matrix2, Matrix2d, Matrix3, Matrix4, Plane$1 as Plane, Quaternion, Ray, Value, Vector2, Vector3, Vector4, Mesh, Node, particle, picking, plugin, prePass, Renderable, Renderer, Scene, Shader, shader, Skeleton, StandardMaterial, StaticGeometry, Texture, Texture2D, TextureCube, Timeline, util, version, vr }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xheWdsLmVzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvYW5pbWF0aW9uL2Vhc2luZy5qcyIsIi4uL3NyYy9hbmltYXRpb24vQ2xpcC5qcyIsIi4uL3NyYy9hbmltYXRpb24vQW5pbWF0b3IuanMiLCIuLi9zcmMvYW5pbWF0aW9uL0JsZW5kMURDbGlwLmpzIiwiLi4vc3JjL3V0aWwvZGVsYXVuYXkuanMiLCIuLi9zcmMvZ2xtYXRyaXgvY29tbW9uLmpzIiwiLi4vc3JjL2dsbWF0cml4L3ZlYzIuanMiLCIuLi9zcmMvbWF0aC9WZWN0b3IyLmpzIiwiLi4vc3JjL2FuaW1hdGlvbi9CbGVuZDJEQ2xpcC5qcyIsIi4uL3NyYy9nbG1hdHJpeC92ZWMzLmpzIiwiLi4vc3JjL2dsbWF0cml4L3ZlYzQuanMiLCIuLi9zcmMvZ2xtYXRyaXgvbWF0My5qcyIsIi4uL3NyYy9nbG1hdHJpeC9xdWF0LmpzIiwiLi4vc3JjL2FuaW1hdGlvbi9TYW1wbGVyVHJhY2suanMiLCIuLi9zcmMvY29yZS9taXhpbi9leHRlbmQuanMiLCIuLi9zcmMvY29yZS9taXhpbi9ub3RpZmllci5qcyIsIi4uL3NyYy9jb3JlL3V0aWwuanMiLCIuLi9zcmMvY29yZS9CYXNlLmpzIiwiLi4vc3JjL2NvcmUvcmVxdWVzdC5qcyIsIi4uL3NyYy9jb3JlL3ZlbmRvci5qcyIsIi4uL3NyYy9UaW1lbGluZS5qcyIsIi4uL3NyYy9hbmltYXRpb24vVGltZWxpbmUuanMiLCIuLi9zcmMvYW5pbWF0aW9uL1RyYWNrQ2xpcC5qcyIsIi4uL3NyYy9jb3JlL0dMSW5mby5qcyIsIi4uL3NyYy9jb3JlL2dsZW51bS5qcyIsIi4uL3NyYy9jb3JlL0xpbmtlZExpc3QuanMiLCIuLi9zcmMvY29yZS9MUlUuanMiLCIuLi9zcmMvY29yZS9jb2xvci5qcyIsIi4uL3NyYy9NYXRlcmlhbC5qcyIsIi4uL3NyYy9ncHUvR0xQcm9ncmFtLmpzIiwiLi4vc3JjL2dwdS9Qcm9ncmFtTWFuYWdlci5qcyIsIi4uL3NyYy9TaGFkZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9wcmV6Lmdsc2wuanMiLCIuLi9zcmMvZ2xtYXRyaXgvbWF0NC5qcyIsIi4uL3NyYy9SZW5kZXJlci5qcyIsIi4uL3NyYy9tYXRoL1ZlY3RvcjMuanMiLCIuLi9zcmMvbWF0aC9RdWF0ZXJuaW9uLmpzIiwiLi4vc3JjL21hdGgvTWF0cml4NC5qcyIsIi4uL3NyYy9tYXRoL0JvdW5kaW5nQm94LmpzIiwiLi4vc3JjL05vZGUuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9oZWFkZXIvY2FsY0FtYmllbnRTSExpZ2h0Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9oZWFkZXIvbGlnaHQuanMiLCIuLi9zcmMvTGlnaHQuanMiLCIuLi9zcmMvbWF0aC9QbGFuZS5qcyIsIi4uL3NyYy9tYXRoL0ZydXN0dW0uanMiLCIuLi9zcmMvbWF0aC9SYXkuanMiLCIuLi9zcmMvQ2FtZXJhLmpzIiwiLi4vc3JjL1NjZW5lLmpzIiwiLi4vc3JjL2NvcmUvQ2FjaGUuanMiLCIuLi9zcmMvR2VvbWV0cnlCYXNlLmpzIiwiLi4vc3JjL0dlb21ldHJ5LmpzIiwiLi4vc3JjL2dlb21ldHJ5L1BsYW5lLmpzIiwiLi4vc3JjL2dlb21ldHJ5L0N1YmUuanMiLCIuLi9zcmMvZ2VvbWV0cnkvU3BoZXJlLmpzIiwiLi4vc3JjL2dlb21ldHJ5L1BhcmFtZXRyaWNTdXJmYWNlLmpzIiwiLi4vc3JjL1RleHR1cmUuanMiLCIuLi9zcmMvbWF0aC91dGlsLmpzIiwiLi4vc3JjL1RleHR1cmUyRC5qcyIsIi4uL3NyYy9UZXh0dXJlQ3ViZS5qcyIsIi4uL3NyYy9SZW5kZXJhYmxlLmpzIiwiLi4vc3JjL01lc2guanMiLCIuLi9zcmMvY2FtZXJhL1BlcnNwZWN0aXZlLmpzIiwiLi4vc3JjL2NhbWVyYS9PcnRob2dyYXBoaWMuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9zdGFuZGFyZC5nbHNsLmpzIiwiLi4vc3JjL1N0YW5kYXJkTWF0ZXJpYWwuanMiLCIuLi9zcmMvc2hhZGVyL2xpYnJhcnkuanMiLCIuLi9zcmMvSm9pbnQuanMiLCIuLi9zcmMvU2tlbGV0b24uanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS91dGlsLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9iYXNpYy5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvbGFtYmVydC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2Uvd2lyZWZyYW1lLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9za3lib3guZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvYnVpbHRpbi5qcyIsIi4uL3NyYy9sb2FkZXIvR0xURi5qcyIsIi4uL3NyYy9saWdodC9EaXJlY3Rpb25hbC5qcyIsIi4uL3NyYy9saWdodC9Qb2ludC5qcyIsIi4uL3NyYy9saWdodC9TcG90LmpzIiwiLi4vc3JjL2xpZ2h0L0FtYmllbnQuanMiLCIuLi9zcmMvRnJhbWVCdWZmZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3ZlcnRleC5nbHNsLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvUGFzcy5qcyIsIi4uL3NyYy9wbHVnaW4vU2t5Ym94LmpzIiwiLi4vc3JjL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAuanMiLCIuLi9zcmMvdXRpbC9kZHMuanMiLCIuLi9zcmMvdXRpbC9oZHIuanMiLCIuLi9zcmMvdXRpbC90ZXh0dXJlLmpzIiwiLi4vc3JjL3V0aWwvc2hhZGVyL2ludGVncmF0ZUJSREYuZ2xzbC5qcyIsIi4uL3NyYy91dGlsL3NoYWRlci9wcmVmaWx0ZXIuZ2xzbC5qcyIsIi4uL3NyYy91dGlsL2N1YmVtYXAuanMiLCIuLi9zcmMvbGlnaHQvQW1iaWVudEN1YmVtYXAuanMiLCIuLi9zcmMvbGlnaHQvQW1iaWVudFNILmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvVGV4dHVyZVBvb2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9zaGFkb3dtYXAuZ2xzbC5qcyIsIi4uL3NyYy9wcmVQYXNzL1NoYWRvd01hcC5qcyIsIi4uL3NyYy9waWNraW5nL1JheVBpY2tpbmcuanMiLCIuLi9zcmMvdXRpbC9zaC5qcyIsIi4uL3NyYy9hcHBsaWNhdGlvbi5qcyIsIi4uL3NyYy9hc3luYy9UYXNrLmpzIiwiLi4vc3JjL2FzeW5jL1Rhc2tHcm91cC5qcyIsIi4uL3NyYy9jb21wb3NpdG9yL0NvbXBvc2l0b3JOb2RlLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvR3JhcGguanMiLCIuLi9zcmMvY29tcG9zaXRvci9Db21wb3NpdG9yLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvU2NlbmVOb2RlLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvVGV4dHVyZU5vZGUuanMiLCIuLi9zcmMvY29tcG9zaXRvci9GaWx0ZXJOb2RlLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9jb2xvcmFkanVzdC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9ibHVyLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2x1bS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9sdXQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvdmlnbmV0dGUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3Ivb3V0cHV0Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2JyaWdodC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9kb3duc2FtcGxlLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3Vwc2FtcGxlLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2hkci5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9sZW5zZmxhcmUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvYmxlbmQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvZnhhYS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9yZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yLmpzIiwiLi4vc3JjL2NyZWF0ZUNvbXBvc2l0b3IuanMiLCIuLi9zcmMvY29tcG9zaXRvci9jcmVhdGVDb21wb3NpdG9yLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZ2J1ZmZlci5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvY2h1bmsuZ2xzbC5qcyIsIi4uL3NyYy9kZWZlcnJlZC9HQnVmZmVyLmpzIiwiLi4vc3JjL2dlb21ldHJ5L0NvbmUuanMiLCIuLi9zcmMvZ2VvbWV0cnkvQ3lsaW5kZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9saWdodHZvbHVtZS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvc3BvdC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZGlyZWN0aW9uYWwuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnRzaC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudGN1YmVtYXAuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL3BvaW50Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcGhlcmUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL3R1YmUuZ2xzbC5qcyIsIi4uL3NyYy9kZWZlcnJlZC9SZW5kZXJlci5qcyIsIi4uL3NyYy9nbG1hdHJpeC9tYXQyLmpzIiwiLi4vc3JjL2dsbWF0cml4L21hdDJkLmpzIiwiLi4vc3JjL2dsbWF0cml4L2luZGV4LmpzIiwiLi4vc3JjL2RlcC9nbG1hdHJpeC5qcyIsIi4uL3NyYy9saWdodC9TcGhlcmUuanMiLCIuLi9zcmMvbGlnaHQvVHViZS5qcyIsIi4uL3NyYy9sb2FkZXIvRlguanMiLCIuLi9zcmMvbWF0aC9NYXRyaXgyLmpzIiwiLi4vc3JjL21hdGgvTWF0cml4MmQuanMiLCIuLi9zcmMvbWF0aC9NYXRyaXgzLmpzIiwiLi4vc3JjL21hdGgvVmFsdWUuanMiLCIuLi9zcmMvbWF0aC9WZWN0b3I0LmpzIiwiLi4vc3JjL3BhcnRpY2xlL1BhcnRpY2xlLmpzIiwiLi4vc3JjL3BhcnRpY2xlL0VtaXR0ZXIuanMiLCIuLi9zcmMvcGFydGljbGUvRmllbGQuanMiLCIuLi9zcmMvcGFydGljbGUvRm9yY2VGaWVsZC5qcyIsIi4uL3NyYy9wYXJ0aWNsZS9wYXJ0aWNsZS5nbHNsLmpzIiwiLi4vc3JjL3BhcnRpY2xlL1BhcnRpY2xlUmVuZGVyYWJsZS5qcyIsIi4uL3NyYy9waWNraW5nL2NvbG9yLmdsc2wuanMiLCIuLi9zcmMvcGlja2luZy9QaXhlbFBpY2tpbmcuanMiLCIuLi9zcmMvcGx1Z2luL0ZyZWVDb250cm9sLmpzIiwiLi4vc3JjL3BsdWdpbi9HYW1lcGFkQ29udHJvbC5qcyIsIi4uL3NyYy9wbHVnaW4vR2VzdHVyZU1nci5qcyIsIi4uL3NyYy9wbHVnaW4vSW5maW5pdGVQbGFuZS5qcyIsIi4uL3NyYy9wbHVnaW4vT3JiaXRDb250cm9sLmpzIiwiLi4vc3JjL1N0YXRpY0dlb21ldHJ5LmpzIiwiLi4vc3JjL3V0aWwvbWVzaC5qcyIsIi4uL3NyYy91dGlsL3RyYW5zZmVyYWJsZS5qcyIsIi4uL3NyYy92ZXJzaW9uLmpzIiwiLi4vc3JjL3ZyL291dHB1dC5nbHNsLmpzIiwiLi4vc3JjL3ZyL0NhcmRib2FyZERpc3RvcnRlci5qcyIsIi4uL3NyYy92ci9TdGVyZW9DYW1lcmEuanMiLCIuLi9zcmMvY2xheWdsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIOe8k+WKqOWHveaVsOadpeiHqiBodHRwczovL2dpdGh1Yi5jb20vc29sZS90d2Vlbi5qcy9ibG9iL21hc3Rlci9zcmMvVHdlZW4uanNcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkuYW5pbWF0aW9uLmVhc2luZ1xyXG4gKi9cclxudmFyIGVhc2luZyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5saW5lYXJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxpbmVhcjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFkcmF0aWNJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1YWRyYXRpY091dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIGsgKiAoMiAtIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFkcmF0aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC0gMC41ICogKC0tayAqIChrIC0gMikgLSAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuY3ViaWNJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY3ViaWNJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrICogayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmN1YmljT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjdWJpY091dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiAtLWsgKiBrICogayArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmN1YmljSW5PdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGN1YmljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwLjUgKiAoKGsgLT0gMikgKiBrICogayArIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFydGljSW5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHF1YXJ0aWNJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrICogayAqIGsgKiBrO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFydGljT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWFydGljT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSAoLS1rICogayAqIGsgKiBrKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcucXVhcnRpY0luT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWFydGljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGsgKiBrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLSAwLjUgKiAoKGsgLT0gMikgKiBrICogayAqIGsgLSAyKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcucXVpbnRpY0luXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWludGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gayAqIGsgKiBrICogayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1aW50aWNPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHF1aW50aWNPdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gLS1rICogayAqIGsgKiBrICogayArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1aW50aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVpbnRpY0luT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMC41ICogayAqIGsgKiBrICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwLjUgKiAoKGsgLT0gMikgKiBrICogayAqIGsgKiBrICsgMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnNpbnVzb2lkYWxJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2ludXNvaWRhbEluOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSBNYXRoLmNvcyhrICogTWF0aC5QSSAvIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5zaW51c29pZGFsT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzaW51c29pZGFsT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguc2luKGsgKiBNYXRoLlBJIC8gMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnNpbnVzb2lkYWxJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2ludXNvaWRhbEluT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqICgxIC0gTWF0aC5jb3MoTWF0aC5QSSAqIGspKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZXhwb25lbnRpYWxJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrID09PSAwID8gMCA6IE1hdGgucG93KDEwMjQsIGsgLSAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGV4cG9uZW50aWFsT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIGsgPT09IDEgPyAxIDogMSAtIE1hdGgucG93KDIsIC0gMTAgKiBrKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZXhwb25lbnRpYWxJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMC41ICogTWF0aC5wb3coMTAyNCwgayAtIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMC41ICogKC0gTWF0aC5wb3coMiwgLSAxMCAqIChrIC0gMSkpICsgMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmNpcmN1bGFySW5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNpcmN1bGFySW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gMSAtIE1hdGguc3FydCgxIC0gayAqIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jaXJjdWxhck91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY2lyY3VsYXJPdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KDEgLSAoLS1rICogaykpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jaXJjdWxhckluT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjaXJjdWxhckluT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLSAwLjUgKiAoTWF0aC5zcXJ0KDEgLSBrICogaykgLSAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqIChNYXRoLnNxcnQoMSAtIChrIC09IDIpICogaykgKyAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZWxhc3RpY0luXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBlbGFzdGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICB2YXIgcywgYSA9IDAuMSwgcCA9IDAuNDtcclxuICAgICAgICBpZiAoayA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGsgPT09IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYSB8fCBhIDwgMSkge1xyXG4gICAgICAgICAgICBhID0gMTsgcyA9IHAgLyA0O1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBzID0gcCAqIE1hdGguYXNpbigxIC8gYSkgLyAoMiAqIE1hdGguUEkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLSAoYSAqIE1hdGgucG93KDIsIDEwICogKGsgLT0gMSkpICpcclxuICAgICAgICAgICAgICAgICAgICBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZWxhc3RpY091dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZWxhc3RpY091dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHZhciBzLCBhID0gMC4xLCBwID0gMC40O1xyXG4gICAgICAgIGlmIChrID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhIHx8IGEgPCAxKSB7XHJcbiAgICAgICAgICAgIGEgPSAxOyBzID0gcCAvIDQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHMgPSBwICogTWF0aC5hc2luKDEgLyBhKSAvICgyICogTWF0aC5QSSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoYSAqIE1hdGgucG93KDIsIC0gMTAgKiBrKSAqXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICsgMSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmVsYXN0aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZWxhc3RpY0luT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMsIGEgPSAwLjEsIHAgPSAwLjQ7XHJcbiAgICAgICAgaWYgKGsgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWEgfHwgYSA8IDEpIHtcclxuICAgICAgICAgICAgYSA9IDE7IHMgPSBwIC8gNDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgcyA9IHAgKiBNYXRoLmFzaW4oMSAvIGEpIC8gKDIgKiBNYXRoLlBJKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLSAwLjUgKiAoYSAqIE1hdGgucG93KDIsIDEwICogKGsgLT0gMSkpXHJcbiAgICAgICAgICAgICAgICAqIE1hdGguc2luKChrIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYSAqIE1hdGgucG93KDIsIC0xMCAqIChrIC09IDEpKVxyXG4gICAgICAgICAgICAgICAgKiBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICogMC41ICsgMTtcclxuXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmJhY2tJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYmFja0luOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMgPSAxLjcwMTU4O1xyXG4gICAgICAgIHJldHVybiBrICogayAqICgocyArIDEpICogayAtIHMpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5iYWNrT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBiYWNrT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMgPSAxLjcwMTU4O1xyXG4gICAgICAgIHJldHVybiAtLWsgKiBrICogKChzICsgMSkgKiBrICsgcykgKyAxO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5iYWNrSW5PdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJhY2tJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHZhciBzID0gMS43MDE1OCAqIDEuNTI1O1xyXG4gICAgICAgIGlmICgoayAqPSAyKSA8IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDAuNSAqIChrICogayAqICgocyArIDEpICogayAtIHMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqICgoayAtPSAyKSAqIGsgKiAoKHMgKyAxKSAqIGsgKyBzKSArIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5ib3VuY2VJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYm91bmNlSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gMSAtIGVhc2luZy5ib3VuY2VPdXQoMSAtIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5ib3VuY2VPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJvdW5jZU91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrIDwgKDEgLyAyLjc1KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gNy41NjI1ICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGsgPCAoMiAvIDIuNzUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA3LjU2MjUgKiAoayAtPSAoMS41IC8gMi43NSkpICogayArIDAuNzU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChrIDwgKDIuNSAvIDIuNzUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA3LjU2MjUgKiAoayAtPSAoMi4yNSAvIDIuNzUpKSAqIGsgKyAwLjkzNzU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDcuNTYyNSAqIChrIC09ICgyLjYyNSAvIDIuNzUpKSAqIGsgKyAwLjk4NDM3NTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmJvdW5jZUluT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBib3VuY2VJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrIDwgMC41KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlYXNpbmcuYm91bmNlSW4oayAqIDIpICogMC41O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZWFzaW5nLmJvdW5jZU91dChrICogMiAtIDEpICogMC41ICsgMC41O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZWFzaW5nO1xyXG4iLCJpbXBvcnQgRWFzaW5nIGZyb20gJy4vZWFzaW5nJztcclxuXHJcbmZ1bmN0aW9uIG5vb3AgKCkge31cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hbmltYXRpb24uQ2xpcFxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGVdXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbnxudW1iZXJ9IFtvcHRzLmxvb3BdIElmIGxvb3AgaXMgYSBudW1iZXIsIGl0IGluZGljYXRlIHRoZSBsb29wIGNvdW50IG9mIGFuaW1hdGlvblxyXG4gKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW29wdHMuZWFzaW5nXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZyYW1lXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZpbmlzaF1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25yZXN0YXJ0XVxyXG4gKi9cclxudmFyIENsaXAgPSBmdW5jdGlvbiAob3B0cykge1xyXG5cclxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGhpcy5uYW1lID0gb3B0cy5uYW1lIHx8ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAqL1xyXG4gICAgdGhpcy50YXJnZXQgPSBvcHRzLnRhcmdldDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubGlmZSA9IG9wdHMubGlmZSB8fCAxMDAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5kZWxheSA9IG9wdHMuZGVsYXkgfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZ2FwID0gb3B0cy5nYXAgfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucGxheWJhY2tSYXRlID0gb3B0cy5wbGF5YmFja1JhdGUgfHwgMTtcclxuXHJcblxyXG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XHJcblxyXG4gICAgdGhpcy5fbG9vcCA9IG9wdHMubG9vcCA9PSBudWxsID8gZmFsc2UgOiBvcHRzLmxvb3A7XHJcbiAgICB0aGlzLnNldExvb3AodGhpcy5fbG9vcCk7XHJcblxyXG4gICAgaWYgKG9wdHMuZWFzaW5nICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLnNldEVhc2luZyhvcHRzLmVhc2luZyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIHRoaXMub25mcmFtZSA9IG9wdHMub25mcmFtZSB8fCBub29wO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICB0aGlzLm9uZmluaXNoID0gb3B0cy5vbmZpbmlzaCB8fCBub29wO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICB0aGlzLm9ucmVzdGFydCA9IG9wdHMub25yZXN0YXJ0IHx8IG5vb3A7XHJcblxyXG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbn07XHJcblxyXG5DbGlwLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBnYXA6IDAsXHJcblxyXG4gICAgbGlmZTogMCxcclxuXHJcbiAgICBkZWxheTogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfGJvb2xlYW59IGxvb3BcclxuICAgICAqL1xyXG4gICAgc2V0TG9vcDogZnVuY3Rpb24gKGxvb3ApIHtcclxuICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcclxuICAgICAgICBpZiAobG9vcCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGxvb3AgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb29wUmVtYWluZWQgPSBsb29wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9vcFJlbWFpbmVkID0gSW5maW5pdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IGVhc2luZ1xyXG4gICAgICovXHJcbiAgICBzZXRFYXNpbmc6IGZ1bmN0aW9uIChlYXNpbmcpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGVhc2luZykgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGVhc2luZyA9IEVhc2luZ1tlYXNpbmddO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVhc2luZyA9IGVhc2luZztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRpbWVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgc3RlcDogZnVuY3Rpb24gKHRpbWUsIGRlbHRhVGltZSwgc2lsZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSB0aW1lICsgdGhpcy5kZWxheTtcclxuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFRpbWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWx0YVRpbWUgPSB0aW1lIC0gdGhpcy5fY3VycmVudFRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gdGltZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3BhdXNlZCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZSA8IHRoaXMuX3N0YXJ0VGltZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQRU5ESUdOIFN5bmMgP1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZSh0aW1lLCBkZWx0YVRpbWUpO1xyXG5cclxuICAgICAgICB2YXIgcGVyY2VudCA9IE1hdGgubWluKHRoaXMuX2VsYXBzZWRUaW1lIC8gdGhpcy5saWZlLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKHBlcmNlbnQgPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzY2hlZHVsZTtcclxuICAgICAgICBpZiAodGhpcy5lYXNpbmcpIHtcclxuICAgICAgICAgICAgc2NoZWR1bGUgPSB0aGlzLmVhc2luZyhwZXJjZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHNjaGVkdWxlID0gcGVyY2VudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2lsZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZSgnZnJhbWUnLCBzY2hlZHVsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGVyY2VudCA9PT0gMSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fbG9vcCAmJiB0aGlzLl9sb29wUmVtYWluZWQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXN0YXJ0SW5Mb29wKHRpbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9vcFJlbWFpbmVkLS07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Jlc3RhcnQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gTWFyayB0aGlzIGNsaXAgdG8gYmUgZGVsZXRlZFxyXG4gICAgICAgICAgICAgICAgLy8gSW4gdGhlIGFuaW1hdGlvbi51cGRhdGVcclxuICAgICAgICAgICAgICAgIHRoaXMuX25lZWRzUmVtb3ZlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2ZpbmlzaCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRpbWVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgc2V0VGltZTogZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGVwKHRpbWUgKyB0aGlzLl9zdGFydFRpbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZXN0YXJ0OiBmdW5jdGlvbiAodGltZSkge1xyXG4gICAgICAgIC8vIElmIHVzZXIgbGVhdmUgdGhlIHBhZ2UgZm9yIGEgd2hpbGUsIHdoZW4gaGUgZ2V0cyBiYWNrXHJcbiAgICAgICAgLy8gQWxsIGNsaXBzIG1heSBiZSBleHBpcmVkIGFuZCBhbGwgc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nIHZhbHVlKHBvc2l0aW9uKVxyXG4gICAgICAgIC8vIEl0IGlzIGNsZWFybHkgd3JvbmcsIHNvIHdlIHVzZSByZW1haW5kZXIgdG8gYWRkIGEgb2Zmc2V0XHJcblxyXG4gICAgICAgIHZhciByZW1haW5kZXIgPSAwO1xyXG4gICAgICAgIC8vIFJlbWFpbmRlciBpZ25vcmVkIGlmIHJlc3RhcnQgaXMgaW52b2tlZCBtYW51YWxseVxyXG4gICAgICAgIGlmICh0aW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2VsYXBzZSh0aW1lKTtcclxuICAgICAgICAgICAgcmVtYWluZGVyID0gdGhpcy5fZWxhcHNlZFRpbWUgJSB0aGlzLmxpZmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRpbWUgPSB0aW1lIHx8IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWUgLSByZW1haW5kZXIgKyB0aGlzLmRlbGF5O1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fbmVlZHNSZW1vdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0RWxhcHNlZFRpbWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZWxhcHNlZFRpbWU7XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZXN0YXJ0SW5Mb29wOiBmdW5jdGlvbiAodGltZSkge1xyXG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWUgKyB0aGlzLmdhcDtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIF9lbGFwc2U6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YVRpbWUpIHtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSArPSBkZWx0YVRpbWUgKiB0aGlzLnBsYXliYWNrUmF0ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZmlyZTogZnVuY3Rpb24gKGV2ZW50VHlwZSwgYXJnKSB7XHJcbiAgICAgICAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudFR5cGU7XHJcbiAgICAgICAgaWYgKHRoaXNbZXZlbnROYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzW2V2ZW50TmFtZV0odGhpcy50YXJnZXQsIGFyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjbGlwID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKTtcclxuICAgICAgICBjbGlwLm5hbWUgPSB0aGlzLm5hbWU7XHJcbiAgICAgICAgY2xpcC5fbG9vcCA9IHRoaXMuX2xvb3A7XHJcbiAgICAgICAgY2xpcC5fbG9vcFJlbWFpbmVkID0gdGhpcy5fbG9vcFJlbWFpbmVkO1xyXG5cclxuICAgICAgICBjbGlwLmxpZmUgPSB0aGlzLmxpZmU7XHJcbiAgICAgICAgY2xpcC5nYXAgPSB0aGlzLmdhcDtcclxuICAgICAgICBjbGlwLmRlbGF5ID0gdGhpcy5kZWxheTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNsaXA7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXVzZSB0aGUgY2xpcC5cclxuICAgICAqL1xyXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3VtZSB0aGUgY2xpcC5cclxuICAgICAqL1xyXG4gICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICB9XHJcbn07XHJcbkNsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2xpcDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENsaXA7XHJcbiIsImltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcbmltcG9ydCBlYXNpbmdGdW5jcyBmcm9tICcuL2Vhc2luZyc7XHJcblxyXG52YXIgYXJyYXlTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRHZXR0ZXIodGFyZ2V0LCBrZXkpIHtcclxuICAgIHJldHVybiB0YXJnZXRba2V5XTtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0U2V0dGVyKHRhcmdldCwga2V5LCB2YWx1ZSkge1xyXG4gICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW50ZXJwb2xhdGVOdW1iZXIocDAsIHAxLCBwZXJjZW50KSB7XHJcbiAgICByZXR1cm4gKHAxIC0gcDApICogcGVyY2VudCArIHAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUFycmF5KHAwLCBwMSwgcGVyY2VudCwgb3V0LCBhcnJEaW0pIHtcclxuICAgIHZhciBsZW4gPSBwMC5sZW5ndGg7XHJcbiAgICBpZiAoYXJyRGltID09IDEpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIG91dFtpXSA9IGludGVycG9sYXRlTnVtYmVyKHAwW2ldLCBwMVtpXSwgcGVyY2VudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIGxlbjIgPSBwMFswXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgb3V0W2ldW2pdID0gaW50ZXJwb2xhdGVOdW1iZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgcDBbaV1bal0sIHAxW2ldW2pdLCBwZXJjZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FycmF5TGlrZShkYXRhKSB7XHJcbiAgICBpZiAodHlwZW9mKGRhdGEpID09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YoZGF0YSkgPT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YoZGF0YS5sZW5ndGgpID09ICdudW1iZXInO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9uZVZhbHVlKHZhbHVlKSB7XHJcbiAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpKSB7XHJcbiAgICAgICAgdmFyIGxlbiA9IHZhbHVlLmxlbmd0aDtcclxuICAgICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWVbMF0pKSB7XHJcbiAgICAgICAgICAgIHZhciByZXQgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmV0LnB1c2goYXJyYXlTbGljZS5jYWxsKHZhbHVlW2ldKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2F0bXVsbFJvbUludGVycG9sYXRlQXJyYXkoXHJcbiAgICBwMCwgcDEsIHAyLCBwMywgdCwgdDIsIHQzLCBvdXQsIGFyckRpbVxyXG4pIHtcclxuICAgIHZhciBsZW4gPSBwMC5sZW5ndGg7XHJcbiAgICBpZiAoYXJyRGltID09IDEpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIG91dFtpXSA9IGNhdG11bGxSb21JbnRlcnBvbGF0ZShcclxuICAgICAgICAgICAgICAgIHAwW2ldLCBwMVtpXSwgcDJbaV0sIHAzW2ldLCB0LCB0MiwgdDNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciBsZW4yID0gcDBbMF0ubGVuZ3RoO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW4yOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIG91dFtpXVtqXSA9IGNhdG11bGxSb21JbnRlcnBvbGF0ZShcclxuICAgICAgICAgICAgICAgICAgICBwMFtpXVtqXSwgcDFbaV1bal0sIHAyW2ldW2pdLCBwM1tpXVtqXSxcclxuICAgICAgICAgICAgICAgICAgICB0LCB0MiwgdDNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhdG11bGxSb21JbnRlcnBvbGF0ZShwMCwgcDEsIHAyLCBwMywgdCwgdDIsIHQzKSB7XHJcbiAgICB2YXIgdjAgPSAocDIgLSBwMCkgKiAwLjU7XHJcbiAgICB2YXIgdjEgPSAocDMgLSBwMSkgKiAwLjU7XHJcbiAgICByZXR1cm4gKDIgKiAocDEgLSBwMikgKyB2MCArIHYxKSAqIHQzXHJcbiAgICAgICAgICAgICsgKC0gMyAqIChwMSAtIHAyKSAtIDIgKiB2MCAtIHYxKSAqIHQyXHJcbiAgICAgICAgICAgICsgdjAgKiB0ICsgcDE7XHJcbn1cclxuXHJcbi8vIGFycjAgaXMgc291cmNlIGFycmF5LCBhcnIxIGlzIHRhcmdldCBhcnJheS5cclxuLy8gRG8gc29tZSBwcmVwcm9jZXNzIHRvIGF2b2lkIGVycm9yIGhhcHBlbmVkIHdoZW4gaW50ZXJwb2xhdGluZyBmcm9tIGFycjAgdG8gYXJyMVxyXG5mdW5jdGlvbiBmaWxsQXJyKGFycjAsIGFycjEsIGFyckRpbSkge1xyXG4gICAgdmFyIGFycjBMZW4gPSBhcnIwLmxlbmd0aDtcclxuICAgIHZhciBhcnIxTGVuID0gYXJyMS5sZW5ndGg7XHJcbiAgICBpZiAoYXJyMExlbiAhPT0gYXJyMUxlbikge1xyXG4gICAgICAgIC8vIEZJWE1FIE5vdCB3b3JrIGZvciBUeXBlZEFycmF5XHJcbiAgICAgICAgdmFyIGlzUHJldmlvdXNMYXJnZXIgPSBhcnIwTGVuID4gYXJyMUxlbjtcclxuICAgICAgICBpZiAoaXNQcmV2aW91c0xhcmdlcikge1xyXG4gICAgICAgICAgICAvLyBDdXQgdGhlIHByZXZpb3VzXHJcbiAgICAgICAgICAgIGFycjAubGVuZ3RoID0gYXJyMUxlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIEZpbGwgdGhlIHByZXZpb3VzXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBhcnIwTGVuOyBpIDwgYXJyMUxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhcnIwLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgYXJyRGltID09PSAxID8gYXJyMVtpXSA6IGFycmF5U2xpY2UuY2FsbChhcnIxW2ldKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEhhbmRsaW5nIE5hTiB2YWx1ZVxyXG4gICAgdmFyIGxlbjIgPSBhcnIwWzBdICYmIGFycjBbMF0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyckRpbSA9PT0gMSkge1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4oYXJyMFtpXSkpIHtcclxuICAgICAgICAgICAgICAgIGFycjBbaV0gPSBhcnIxW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKGFycjBbaV1bal0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyMFtpXVtqXSA9IGFycjFbaV1bal07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXJyYXlTYW1lKGFycjAsIGFycjEsIGFyckRpbSkge1xyXG4gICAgaWYgKGFycjAgPT09IGFycjEpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBsZW4gPSBhcnIwLmxlbmd0aDtcclxuICAgIGlmIChsZW4gIT09IGFycjEubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGFyckRpbSA9PT0gMSkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFycjBbaV0gIT09IGFycjFbaV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBsZW4yID0gYXJyMFswXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFycjBbaV1bal0gIT09IGFycjFbaV1bal0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlVHJhY2tDbGlwKGFuaW1hdG9yLCBnbG9iYWxFYXNpbmcsIG9uZVRyYWNrRG9uZSwga2V5ZnJhbWVzLCBwcm9wTmFtZSwgaW50ZXJwb2xhdGVyLCBtYXhUaW1lKSB7XHJcbiAgICB2YXIgZ2V0dGVyID0gYW5pbWF0b3IuX2dldHRlcjtcclxuICAgIHZhciBzZXR0ZXIgPSBhbmltYXRvci5fc2V0dGVyO1xyXG4gICAgdmFyIHVzZVNwbGluZSA9IGdsb2JhbEVhc2luZyA9PT0gJ3NwbGluZSc7XHJcblxyXG4gICAgdmFyIHRyYWNrTGVuID0ga2V5ZnJhbWVzLmxlbmd0aDtcclxuICAgIGlmICghdHJhY2tMZW4pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBHdWVzcyBkYXRhIHR5cGVcclxuICAgIHZhciBmaXJzdFZhbCA9IGtleWZyYW1lc1swXS52YWx1ZTtcclxuICAgIHZhciBpc1ZhbHVlQXJyYXkgPSBpc0FycmF5TGlrZShmaXJzdFZhbCk7XHJcblxyXG4gICAgLy8gRm9yIHZlcnRpY2VzIG1vcnBoaW5nXHJcbiAgICB2YXIgYXJyRGltID0gKFxyXG4gICAgICAgICAgICBpc1ZhbHVlQXJyYXlcclxuICAgICAgICAgICAgJiYgaXNBcnJheUxpa2UoZmlyc3RWYWxbMF0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgID8gMiA6IDE7XHJcbiAgICAvLyBTb3J0IGtleWZyYW1lIGFzIGFzY2VuZGluZ1xyXG4gICAga2V5ZnJhbWVzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xyXG4gICAgICAgIHJldHVybiBhLnRpbWUgLSBiLnRpbWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQZXJjZW50cyBvZiBlYWNoIGtleWZyYW1lXHJcbiAgICB2YXIga2ZQZXJjZW50cyA9IFtdO1xyXG4gICAgLy8gVmFsdWUgb2YgZWFjaCBrZXlmcmFtZVxyXG4gICAgdmFyIGtmVmFsdWVzID0gW107XHJcbiAgICAvLyBFYXNpbmcgZnVuY3Mgb2YgZWFjaCBrZXlmcmFtZS5cclxuICAgIHZhciBrZkVhc2luZ3MgPSBbXTtcclxuXHJcbiAgICB2YXIgcHJldlZhbHVlID0ga2V5ZnJhbWVzWzBdLnZhbHVlO1xyXG4gICAgdmFyIGlzQWxsVmFsdWVFcXVhbCA9IHRydWU7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWNrTGVuOyBpKyspIHtcclxuICAgICAgICBrZlBlcmNlbnRzLnB1c2goa2V5ZnJhbWVzW2ldLnRpbWUgLyBtYXhUaW1lKTtcclxuXHJcbiAgICAgICAgLy8gQXNzdW1lIHZhbHVlIGlzIGEgY29sb3Igd2hlbiBpdCBpcyBhIHN0cmluZ1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGtleWZyYW1lc1tpXS52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdmFsdWUgaXMgZXF1YWwsIGRlZXAgY2hlY2sgaWYgdmFsdWUgaXMgYXJyYXlcclxuICAgICAgICBpZiAoISgoaXNWYWx1ZUFycmF5ICYmIGlzQXJyYXlTYW1lKHZhbHVlLCBwcmV2VmFsdWUsIGFyckRpbSkpXHJcbiAgICAgICAgICAgIHx8ICghaXNWYWx1ZUFycmF5ICYmIHZhbHVlID09PSBwcmV2VmFsdWUpKSkge1xyXG4gICAgICAgICAgICBpc0FsbFZhbHVlRXF1YWwgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJldlZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGtmVmFsdWVzLnB1c2godmFsdWUpO1xyXG4gICAgICAgIGtmRWFzaW5ncy5wdXNoKGtleWZyYW1lc1tpXS5lYXNpbmcpO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzQWxsVmFsdWVFcXVhbCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbGFzdFZhbHVlID0ga2ZWYWx1ZXNbdHJhY2tMZW4gLSAxXTtcclxuICAgIC8vIFBvbHlmaWxsIGFycmF5IGFuZCBOYU4gdmFsdWVcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhY2tMZW4gLSAxOyBpKyspIHtcclxuICAgICAgICBpZiAoaXNWYWx1ZUFycmF5KSB7XHJcbiAgICAgICAgICAgIGZpbGxBcnIoa2ZWYWx1ZXNbaV0sIGxhc3RWYWx1ZSwgYXJyRGltKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihrZlZhbHVlc1tpXSkgJiYgIWlzTmFOKGxhc3RWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGtmVmFsdWVzW2ldID0gbGFzdFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaXNWYWx1ZUFycmF5ICYmIGZpbGxBcnIoZ2V0dGVyKGFuaW1hdG9yLl90YXJnZXQsIHByb3BOYW1lKSwgbGFzdFZhbHVlLCBhcnJEaW0pO1xyXG5cclxuICAgIC8vIENhY2hlIHRoZSBrZXkgb2YgbGFzdCBmcmFtZSB0byBzcGVlZCB1cCB3aGVuXHJcbiAgICAvLyBhbmltYXRpb24gcGxheWJhY2sgaXMgc2VxdWVuY3lcclxuICAgIHZhciBjYWNoZUtleSA9IDA7XHJcbiAgICB2YXIgY2FjaGVQZXJjZW50ID0gMDtcclxuICAgIHZhciBzdGFydDtcclxuICAgIHZhciBpLCB3O1xyXG4gICAgdmFyIHAwLCBwMSwgcDIsIHAzO1xyXG5cclxuICAgIHZhciBvbmZyYW1lID0gZnVuY3Rpb24odGFyZ2V0LCBwZXJjZW50KSB7XHJcbiAgICAgICAgLy8gRmluZCB0aGUgcmFuZ2Uga2V5ZnJhbWVzXHJcbiAgICAgICAgLy8ga2YxLS0tLS1rZjItLS0tLS0tLS1jdXJyZW50LS0tLS0tLS1rZjNcclxuICAgICAgICAvLyBmaW5kIGtmMihpKSBhbmQga2YzKGkgKyAxKSBhbmQgZG8gaW50ZXJwb2xhdGlvblxyXG4gICAgICAgIGlmIChwZXJjZW50IDwgY2FjaGVQZXJjZW50KSB7XHJcbiAgICAgICAgICAgIC8vIFN0YXJ0IGZyb20gbmV4dCBrZXlcclxuICAgICAgICAgICAgc3RhcnQgPSBNYXRoLm1pbihjYWNoZUtleSArIDEsIHRyYWNrTGVuIC0gMSk7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtmUGVyY2VudHNbaV0gPD0gcGVyY2VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkgPSBNYXRoLm1pbihpLCB0cmFja0xlbiAtIDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChpID0gY2FjaGVLZXk7IGkgPCB0cmFja0xlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2ZQZXJjZW50c1tpXSA+IHBlcmNlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpID0gTWF0aC5taW4oaSAtIDEsIHRyYWNrTGVuIC0gMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhY2hlS2V5ID0gaTtcclxuICAgICAgICBjYWNoZVBlcmNlbnQgPSBwZXJjZW50O1xyXG5cclxuICAgICAgICB2YXIgcmFuZ2UgPSAoa2ZQZXJjZW50c1tpICsgMV0gLSBrZlBlcmNlbnRzW2ldKTtcclxuICAgICAgICBpZiAocmFuZ2UgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdyA9IChwZXJjZW50IC0ga2ZQZXJjZW50c1tpXSkgLyByYW5nZTtcclxuICAgICAgICAgICAgLy8gQ2xhbXAgMCAtIDFcclxuICAgICAgICAgICAgdyA9IE1hdGgubWF4KE1hdGgubWluKDEsIHcpLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdyA9IGtmRWFzaW5nc1tpICsgMV0odyk7XHJcblxyXG4gICAgICAgIGlmICh1c2VTcGxpbmUpIHtcclxuICAgICAgICAgICAgcDEgPSBrZlZhbHVlc1tpXTtcclxuICAgICAgICAgICAgcDAgPSBrZlZhbHVlc1tpID09PSAwID8gaSA6IGkgLSAxXTtcclxuICAgICAgICAgICAgcDIgPSBrZlZhbHVlc1tpID4gdHJhY2tMZW4gLSAyID8gdHJhY2tMZW4gLSAxIDogaSArIDFdO1xyXG4gICAgICAgICAgICBwMyA9IGtmVmFsdWVzW2kgPiB0cmFja0xlbiAtIDMgPyB0cmFja0xlbiAtIDEgOiBpICsgMl07XHJcbiAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXIodGFyZ2V0LCBwcm9wTmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAwLCBwMSwgcDIsIHAzLCB3XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1ZhbHVlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGNhdG11bGxSb21JbnRlcnBvbGF0ZUFycmF5KFxyXG4gICAgICAgICAgICAgICAgICAgIHAwLCBwMSwgcDIsIHAzLCB3LCB3KncsIHcqdyp3LFxyXG4gICAgICAgICAgICAgICAgICAgIGdldHRlcih0YXJnZXQsIHByb3BOYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICBhcnJEaW1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhdG11bGxSb21JbnRlcnBvbGF0ZShwMCwgcDEsIHAyLCBwMywgdywgdyp3LCB3KncqdylcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXIodGFyZ2V0LCBwcm9wTmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtmVmFsdWVzW2ldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZlZhbHVlc1tpICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1ZhbHVlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGludGVycG9sYXRlQXJyYXkoXHJcbiAgICAgICAgICAgICAgICAgICAga2ZWYWx1ZXNbaV0sIGtmVmFsdWVzW2krMV0sIHcsXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0dGVyKHRhcmdldCwgcHJvcE5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyckRpbVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVOdW1iZXIoa2ZWYWx1ZXNbaV0sIGtmVmFsdWVzW2krMV0sIHcpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgY2xpcCA9IG5ldyBDbGlwKHtcclxuICAgICAgICB0YXJnZXQ6IGFuaW1hdG9yLl90YXJnZXQsXHJcbiAgICAgICAgbGlmZTogbWF4VGltZSxcclxuICAgICAgICBsb29wOiBhbmltYXRvci5fbG9vcCxcclxuICAgICAgICBkZWxheTogYW5pbWF0b3IuX2RlbGF5LFxyXG4gICAgICAgIG9uZnJhbWU6IG9uZnJhbWUsXHJcbiAgICAgICAgb25maW5pc2g6IG9uZVRyYWNrRG9uZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGdsb2JhbEVhc2luZyAmJiBnbG9iYWxFYXNpbmcgIT09ICdzcGxpbmUnKSB7XHJcbiAgICAgICAgY2xpcC5zZXRFYXNpbmcoZ2xvYmFsRWFzaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2xpcDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBBbmltYXRvciBvYmplY3QgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSBBbmltYXRpb24ucHJvdG90eXBlLmFuaW1hdGUgbWV0aG9kLlxyXG4gKiBBZnRlciBjcmVhdGVkLCB3ZSBjYW4gdXNlIHtAbGluayBjbGF5LmFuaW1hdGlvbi5BbmltYXRvciN3aGVufSB0byBhZGQgYWxsIGtleWZyYW1lcyBhbmQge0BsaW5rIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yI3N0YXJ0fSBpdC5cclxuICogQ2xpcHMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYW5kIGFkZGVkIHRvIHRoZSBhbmltYXRpb24gaW5zdGFuY2Ugd2hpY2ggY3JlYXRlZCB0aGlzIGRlZmVycmVkIG9iamVjdC5cclxuICpcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcclxuICogQHBhcmFtIHtib29sZWFufSBsb29wXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdldHRlclxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXJcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gaW50ZXJwb2xhdGVyXHJcbiAqL1xyXG5mdW5jdGlvbiBBbmltYXRvcih0YXJnZXQsIGxvb3AsIGdldHRlciwgc2V0dGVyLCBpbnRlcnBvbGF0ZXIpIHtcclxuICAgIHRoaXMuX3RyYWNrcyA9IHt9O1xyXG4gICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0O1xyXG5cclxuICAgIHRoaXMuX2xvb3AgPSBsb29wIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuX2dldHRlciA9IGdldHRlciB8fCBkZWZhdWx0R2V0dGVyO1xyXG4gICAgdGhpcy5fc2V0dGVyID0gc2V0dGVyIHx8IGRlZmF1bHRTZXR0ZXI7XHJcblxyXG4gICAgdGhpcy5faW50ZXJwb2xhdGVyID0gaW50ZXJwb2xhdGVyIHx8IG51bGw7XHJcblxyXG4gICAgdGhpcy5fZGVsYXkgPSAwO1xyXG5cclxuICAgIHRoaXMuX2RvbmVMaXN0ID0gW107XHJcblxyXG4gICAgdGhpcy5fb25mcmFtZUxpc3QgPSBbXTtcclxuXHJcbiAgICB0aGlzLl9jbGlwTGlzdCA9IFtdO1xyXG5cclxuICAgIHRoaXMuX21heFRpbWUgPSAwO1xyXG5cclxuICAgIHRoaXMuX2xhc3RLRlRpbWUgPSAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub29wRWFzaW5nKHcpIHtcclxuICAgIHJldHVybiB3O1xyXG59XHJcblxyXG5BbmltYXRvci5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IEFuaW1hdG9yLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgS2V5ZnJhbWUgdGltZSB1c2luZyBtaWxsaXNlY29uZFxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEga2V5LXZhbHVlIG9iamVjdC4gVmFsdWUgY2FuIGJlIG51bWJlciwgMWQgYW5kIDJkIGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW2Vhc2luZ11cclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICB3aGVuOiBmdW5jdGlvbiAodGltZSwgcHJvcHMsIGVhc2luZykge1xyXG5cclxuICAgICAgICB0aGlzLl9tYXhUaW1lID0gTWF0aC5tYXgodGltZSwgdGhpcy5fbWF4VGltZSk7XHJcblxyXG4gICAgICAgIGVhc2luZyA9ICh0eXBlb2YgZWFzaW5nID09PSAnZnVuY3Rpb24nID8gZWFzaW5nIDogZWFzaW5nRnVuY3NbZWFzaW5nXSkgfHwgbm9vcEVhc2luZztcclxuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBwcm9wcykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RyYWNrc1twcm9wTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrc1twcm9wTmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgIC8vIElmIHRpbWUgaXMgMFxyXG4gICAgICAgICAgICAgICAgLy8gIFRoZW4gcHJvcHMgaXMgZ2l2ZW4gaW5pdGlhbGl6ZSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgLy8gRWxzZVxyXG4gICAgICAgICAgICAgICAgLy8gIEluaXRpYWxpemUgdmFsdWUgZnJvbSBjdXJyZW50IHByb3AgdmFsdWVcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tzW3Byb3BOYW1lXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNsb25lVmFsdWUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXR0ZXIodGhpcy5fdGFyZ2V0LCBwcm9wTmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWFzaW5nOiBlYXNpbmdcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl90cmFja3NbcHJvcE5hbWVdLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGltZTogcGFyc2VJbnQodGltZSksXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogcHJvcHNbcHJvcE5hbWVdLFxyXG4gICAgICAgICAgICAgICAgZWFzaW5nOiBlYXNpbmdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgRHVyaW5nIHRpbWUgc2luY2UgbGFzdCBrZXlmcmFtZVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEga2V5LXZhbHVlIG9iamVjdC4gVmFsdWUgY2FuIGJlIG51bWJlciwgMWQgYW5kIDJkIGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW2Vhc2luZ11cclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICB0aGVuOiBmdW5jdGlvbiAoZHVyaW5nVGltZSwgcHJvcHMsIGVhc2luZykge1xyXG4gICAgICAgIHRoaXMud2hlbihkdXJpbmdUaW1lICsgdGhpcy5fbGFzdEtGVGltZSwgcHJvcHMsIGVhc2luZyk7XHJcbiAgICAgICAgdGhpcy5fbGFzdEtGVGltZSArPSBkdXJpbmdUaW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogY2FsbGJhY2sgd2hlbiBydW5uaW5nIGFuaW1hdGlvblxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrIGNhbGxiYWNrIGhhdmUgdHdvIGFyZ3MsIGFuaW1hdGluZyB0YXJnZXQgYW5kIGN1cnJlbnQgcGVyY2VudFxyXG4gICAgICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQW5pbWF0b3J9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGR1cmluZzogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5fb25mcmFtZUxpc3QucHVzaChjYWxsYmFjayk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9kb25lQ2FsbGJhY2s6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBDbGVhciBhbGwgdHJhY2tzXHJcbiAgICAgICAgdGhpcy5fdHJhY2tzID0ge307XHJcbiAgICAgICAgLy8gQ2xlYXIgYWxsIGNsaXBzXHJcbiAgICAgICAgdGhpcy5fY2xpcExpc3QubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgdmFyIGRvbmVMaXN0ID0gdGhpcy5fZG9uZUxpc3Q7XHJcbiAgICAgICAgdmFyIGxlbiA9IGRvbmVMaXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRvbmVMaXN0W2ldLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU3RhcnQgdGhlIGFuaW1hdGlvblxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfEZ1bmN0aW9ufSBlYXNpbmdcclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKGdsb2JhbEVhc2luZykge1xyXG5cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGNsaXBDb3VudCA9IDA7XHJcblxyXG4gICAgICAgIHZhciBvbmVUcmFja0RvbmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY2xpcENvdW50LS07XHJcbiAgICAgICAgICAgIGlmIChjbGlwQ291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuX2RvbmVDYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIGxhc3RDbGlwO1xyXG4gICAgICAgIHZhciBjbGlwTWF4VGltZSA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gdGhpcy5fdHJhY2tzKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gY3JlYXRlVHJhY2tDbGlwKFxyXG4gICAgICAgICAgICAgICAgdGhpcywgZ2xvYmFsRWFzaW5nLCBvbmVUcmFja0RvbmUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja3NbcHJvcE5hbWVdLCBwcm9wTmFtZSwgc2VsZi5faW50ZXJwb2xhdGVyLCBzZWxmLl9tYXhUaW1lXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICBjbGlwTWF4VGltZSA9IE1hdGgubWF4KGNsaXBNYXhUaW1lLCBjbGlwLmxpZmUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpcExpc3QucHVzaChjbGlwKTtcclxuICAgICAgICAgICAgICAgIGNsaXBDb3VudCsrO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIElmIHN0YXJ0IGFmdGVyIGFkZGVkIHRvIGFuaW1hdGlvblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRpb24uYWRkQ2xpcChjbGlwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsYXN0Q2xpcCA9IGNsaXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFkZCBkdXJpbmcgY2FsbGJhY2sgb24gdGhlIGxhc3QgY2xpcFxyXG4gICAgICAgIGlmIChsYXN0Q2xpcCkge1xyXG4gICAgICAgICAgICB2YXIgb2xkT25GcmFtZSA9IGxhc3RDbGlwLm9uZnJhbWU7XHJcbiAgICAgICAgICAgIGxhc3RDbGlwLm9uZnJhbWUgPSBmdW5jdGlvbiAodGFyZ2V0LCBwZXJjZW50KSB7XHJcbiAgICAgICAgICAgICAgICBvbGRPbkZyYW1lKHRhcmdldCwgcGVyY2VudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLl9vbmZyYW1lTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX29uZnJhbWVMaXN0W2ldKHRhcmdldCwgcGVyY2VudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNsaXBDb3VudCkge1xyXG4gICAgICAgICAgICB0aGlzLl9kb25lQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcCB0aGUgYW5pbWF0aW9uXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NsaXBMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gdGhpcy5fY2xpcExpc3RbaV07XHJcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uLnJlbW92ZUNsaXAoY2xpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NsaXBMaXN0ID0gW107XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxheSBnaXZlbiBtaWxsaXNlY29uZHNcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gdGltZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQW5pbWF0b3J9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGRlbGF5OiBmdW5jdGlvbiAodGltZSl7XHJcbiAgICAgICAgdGhpcy5fZGVsYXkgPSB0aW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgYWZ0ZXIgYW5pbWF0aW9uIGZpbmlzaGVkXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5BbmltYXRvcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmFuaW1hdGlvbi5BbmltYXRvci5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgZG9uZTogZnVuY3Rpb24gKGZ1bmMpIHtcclxuICAgICAgICBpZiAoZnVuYykge1xyXG4gICAgICAgICAgICB0aGlzLl9kb25lTGlzdC5wdXNoKGZ1bmMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhbGwgY2xpcHMgY3JlYXRlZCBpbiBzdGFydCBtZXRob2QuXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5DbGlwW119XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGdldENsaXBzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBMaXN0O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0b3I7XHJcbiIsIi8vIDFEIEJsZW5kIGNsaXAgb2YgYmxlbmQgdHJlZVxyXG4vLyBodHRwOi8vZG9jcy51bml0eTNkLmNvbS9Eb2N1bWVudGF0aW9uL01hbnVhbC8xREJsZW5kaW5nLmh0bWxcclxuXHJcbmltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcblxyXG52YXIgY2xpcFNvcnRGdW5jID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhLnBvc2l0aW9uIDwgYi5wb3NpdGlvbjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcC5JQ2xpcElucHV0XHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwb3NpdGlvblxyXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiAxZCBibGVuZGluZyBub2RlIGluIGFuaW1hdGlvbiBibGVuZCB0cmVlLlxyXG4gKiBvdXRwdXQgY2xpcCBtdXN0IGhhdmUgYmxlbmQxRCBhbmQgY29weSBtZXRob2RcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGlvXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cclxuICogQHBhcmFtIHtvYmplY3RbXX0gW29wdHMuaW5wdXRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMucG9zaXRpb25dXHJcbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gW29wdHMub3V0cHV0XVxyXG4gKi9cclxudmFyIEJsZW5kMURDbGlwID0gZnVuY3Rpb24gKG9wdHMpIHtcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XHJcbiAgICAvKipcclxuICAgICAqIE91dHB1dCBjbGlwIG11c3QgaGF2ZSBibGVuZDFEIGFuZCBjb3B5IG1ldGhvZFxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkNsaXB9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3V0cHV0ID0gb3B0cy5vdXRwdXQgfHwgbnVsbDtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwLklDbGlwSW5wdXRbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5pbnB1dHMgPSBvcHRzLmlucHV0cyB8fCBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IDA7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVLZXkgPSAwO1xyXG4gICAgdGhpcy5fY2FjaGVQb3NpdGlvbiA9IC1JbmZpbml0eTtcclxuXHJcbiAgICB0aGlzLmlucHV0cy5zb3J0KGNsaXBTb3J0RnVuYyk7XHJcbn07XHJcblxyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUgPSBuZXcgQ2xpcCgpO1xyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZDFEQ2xpcDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb25cclxuICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5DbGlwfSBpbnB1dENsaXBcclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRdXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwLklDbGlwSW5wdXR9XHJcbiAqL1xyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuYWRkSW5wdXQgPSBmdW5jdGlvbiAocG9zaXRpb24sIGlucHV0Q2xpcCwgb2Zmc2V0KSB7XHJcbiAgICB2YXIgb2JqID0ge1xyXG4gICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcclxuICAgICAgICBjbGlwOiBpbnB1dENsaXAsXHJcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQgfHwgMFxyXG4gICAgfTtcclxuICAgIHRoaXMubGlmZSA9IE1hdGgubWF4KGlucHV0Q2xpcC5saWZlLCB0aGlzLmxpZmUpO1xyXG5cclxuICAgIGlmICghdGhpcy5pbnB1dHMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbiAgICB2YXIgbGVuID0gdGhpcy5pbnB1dHMubGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMuaW5wdXRzWzBdLnBvc2l0aW9uID4gcG9zaXRpb24pIHtcclxuICAgICAgICB0aGlzLmlucHV0cy51bnNoaWZ0KG9iaik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5wdXRzW2xlbiAtIDFdLnBvc2l0aW9uIDw9IHBvc2l0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIga2V5ID0gdGhpcy5fZmluZEtleShwb3NpdGlvbik7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMuc3BsaWNlKGtleSwgb2JqKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG59O1xyXG5cclxuQmxlbmQxRENsaXAucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAodGltZSwgZFRpbWUsIHNpbGVudCkge1xyXG5cclxuICAgIHZhciByZXQgPSBDbGlwLnByb3RvdHlwZS5zdGVwLmNhbGwodGhpcywgdGltZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcclxuICAgICAgICB0aGlzLnNldFRpbWUodGhpcy5nZXRFbGFwc2VkVGltZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXHJcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufTtcclxuXHJcbkJsZW5kMURDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIHZhciBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb247XHJcbiAgICB2YXIgaW5wdXRzID0gdGhpcy5pbnB1dHM7XHJcbiAgICB2YXIgbGVuID0gaW5wdXRzLmxlbmd0aDtcclxuICAgIHZhciBtaW4gPSBpbnB1dHNbMF0ucG9zaXRpb247XHJcbiAgICB2YXIgbWF4ID0gaW5wdXRzW2xlbi0xXS5wb3NpdGlvbjtcclxuXHJcbiAgICBpZiAocG9zaXRpb24gPD0gbWluIHx8IHBvc2l0aW9uID49IG1heCkge1xyXG4gICAgICAgIHZhciBpbjAgPSBwb3NpdGlvbiA8PSBtaW4gPyBpbnB1dHNbMF0gOiBpbnB1dHNbbGVuLTFdO1xyXG4gICAgICAgIHZhciBjbGlwID0gaW4wLmNsaXA7XHJcbiAgICAgICAgdmFyIG9mZnNldCA9IGluMC5vZmZzZXQ7XHJcbiAgICAgICAgY2xpcC5zZXRUaW1lKCh0aW1lICsgb2Zmc2V0KSAlIGNsaXAubGlmZSk7XHJcbiAgICAgICAgLy8gSW5wdXQgY2xpcCBpcyBhIGJsZW5kIGNsaXBcclxuICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgaWYgKGNsaXAub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCkge1xyXG4gICAgICAgICAgICB0aGlzLm91dHB1dC5jb3B5KGNsaXAub3V0cHV0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm91dHB1dC5jb3B5KGNsaXApO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIGtleSA9IHRoaXMuX2ZpbmRLZXkocG9zaXRpb24pO1xyXG4gICAgICAgIHZhciBpbjEgPSBpbnB1dHNba2V5XTtcclxuICAgICAgICB2YXIgaW4yID0gaW5wdXRzW2tleSArIDFdO1xyXG4gICAgICAgIHZhciBjbGlwMSA9IGluMS5jbGlwO1xyXG4gICAgICAgIHZhciBjbGlwMiA9IGluMi5jbGlwO1xyXG4gICAgICAgIC8vIFNldCB0aW1lIG9uIGlucHV0IGNsaXBzXHJcbiAgICAgICAgY2xpcDEuc2V0VGltZSgodGltZSArIGluMS5vZmZzZXQpICUgY2xpcDEubGlmZSk7XHJcbiAgICAgICAgY2xpcDIuc2V0VGltZSgodGltZSArIGluMi5vZmZzZXQpICUgY2xpcDIubGlmZSk7XHJcblxyXG4gICAgICAgIHZhciB3ID0gKHRoaXMucG9zaXRpb24gLSBpbjEucG9zaXRpb24pIC8gKGluMi5wb3NpdGlvbiAtIGluMS5wb3NpdGlvbik7XHJcblxyXG4gICAgICAgIHZhciBjMSA9IGNsaXAxLm91dHB1dCBpbnN0YW5jZW9mIENsaXAgPyBjbGlwMS5vdXRwdXQgOiBjbGlwMTtcclxuICAgICAgICB2YXIgYzIgPSBjbGlwMi5vdXRwdXQgaW5zdGFuY2VvZiBDbGlwID8gY2xpcDIub3V0cHV0IDogY2xpcDI7XHJcbiAgICAgICAgdGhpcy5vdXRwdXQuYmxlbmQxRChjMSwgYzIsIHcpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsb25lIGEgbmV3IEJsZW5kMUQgY2xpcFxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNsb25lSW5wdXRzIFRydWUgaWYgY2xvbmUgdGhlIGlucHV0IGNsaXBzXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwfVxyXG4gKi9cclxuQmxlbmQxRENsaXAucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKGNsb25lSW5wdXRzKSB7XHJcbiAgICB2YXIgY2xpcCA9IENsaXAucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICBjbGlwLm91dHB1dCA9IHRoaXMub3V0cHV0LmNsb25lKCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGlucHV0Q2xpcCA9IGNsb25lSW5wdXRzID8gdGhpcy5pbnB1dHNbaV0uY2xpcC5jbG9uZSh0cnVlKSA6IHRoaXMuaW5wdXRzW2ldLmNsaXA7XHJcbiAgICAgICAgY2xpcC5hZGRJbnB1dCh0aGlzLmlucHV0c1tpXS5wb3NpdGlvbiwgaW5wdXRDbGlwLCB0aGlzLmlucHV0c1tpXS5vZmZzZXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsaXA7XHJcbn07XHJcblxyXG4vLyBGaW5kIHRoZSBrZXkgd2hlcmUgcG9zaXRpb24gaW4gcmFuZ2UgW2lucHV0c1trZXldLnBvc2l0aW9uLCBpbnB1dHNba2V5KzFdLnBvc2l0aW9uKVxyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuX2ZpbmRLZXkgPSBmdW5jdGlvbiAocG9zaXRpb24pIHtcclxuICAgIHZhciBrZXkgPSAtMTtcclxuICAgIHZhciBpbnB1dHMgPSB0aGlzLmlucHV0cztcclxuICAgIHZhciBsZW4gPSBpbnB1dHMubGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMuX2NhY2hlUG9zaXRpb24gPCBwb3NpdGlvbikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9jYWNoZUtleTsgaSA8IGxlbi0xOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0c1tpXS5wb3NpdGlvbiAmJiBwb3NpdGlvbiA8IGlucHV0c1tpKzFdLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBrZXkgPSBpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgcyA9IE1hdGgubWluKGxlbi0yLCB0aGlzLl9jYWNoZUtleSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IHM7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSBpbnB1dHNbaV0ucG9zaXRpb24gJiYgcG9zaXRpb24gPCBpbnB1dHNbaSsxXS5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAga2V5ID0gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChrZXkgPj0gMCkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlS2V5ID0ga2V5O1xyXG4gICAgICAgIHRoaXMuX2NhY2hlUG9zaXRpb24gPSBwb3NpdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ga2V5O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmxlbmQxRENsaXA7IiwiLy8gRGVsYXVuYXkgVHJpYW5ndWxhdGlvblxyXG4vLyBNb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9pcm9ud2FsbGFieS9kZWxhdW5heVxyXG52YXIgRVBTSUxPTiA9IDEuMCAvIDEwNDg1NzYuMDtcclxuXHJcbmZ1bmN0aW9uIHN1cGVydHJpYW5nbGUodmVydGljZXMpIHtcclxuICAgIHZhciB4bWluID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xyXG4gICAgdmFyIHltaW4gPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XHJcbiAgICB2YXIgeG1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcclxuICAgIHZhciB5bWF4ID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xyXG4gICAgdmFyIGksIGR4LCBkeSwgZG1heCwgeG1pZCwgeW1pZDtcclxuXHJcbiAgICBmb3IgKGkgPSB2ZXJ0aWNlcy5sZW5ndGg7IGktLTsgKSB7XHJcbiAgICAgICAgaWYgKHZlcnRpY2VzW2ldWzBdIDwgeG1pbikgeyB4bWluID0gdmVydGljZXNbaV1bMF07IH1cclxuICAgICAgICBpZiAodmVydGljZXNbaV1bMF0gPiB4bWF4KSB7IHhtYXggPSB2ZXJ0aWNlc1tpXVswXTsgfVxyXG4gICAgICAgIGlmICh2ZXJ0aWNlc1tpXVsxXSA8IHltaW4pIHsgeW1pbiA9IHZlcnRpY2VzW2ldWzFdOyB9XHJcbiAgICAgICAgaWYgKHZlcnRpY2VzW2ldWzFdID4geW1heCkgeyB5bWF4ID0gdmVydGljZXNbaV1bMV07IH1cclxuICAgIH1cclxuXHJcbiAgICBkeCA9IHhtYXggLSB4bWluO1xyXG4gICAgZHkgPSB5bWF4IC0geW1pbjtcclxuICAgIGRtYXggPSBNYXRoLm1heChkeCwgZHkpO1xyXG4gICAgeG1pZCA9IHhtaW4gKyBkeCAqIDAuNTtcclxuICAgIHltaWQgPSB5bWluICsgZHkgKiAwLjU7XHJcblxyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICBbeG1pZCAtIDIwICogZG1heCwgeW1pZCAtICAgICAgZG1heF0sXHJcbiAgICAgICAgW3htaWQgICAgICAgICAgICAsIHltaWQgKyAyMCAqIGRtYXhdLFxyXG4gICAgICAgIFt4bWlkICsgMjAgKiBkbWF4LCB5bWlkIC0gICAgICBkbWF4XVxyXG4gICAgXTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2lyY3VtY2lyY2xlKHZlcnRpY2VzLCBpLCBqLCBrKSB7XHJcbiAgICB2YXIgeDEgPSB2ZXJ0aWNlc1tpXVswXSxcclxuICAgICAgICAgICAgeTEgPSB2ZXJ0aWNlc1tpXVsxXSxcclxuICAgICAgICAgICAgeDIgPSB2ZXJ0aWNlc1tqXVswXSxcclxuICAgICAgICAgICAgeTIgPSB2ZXJ0aWNlc1tqXVsxXSxcclxuICAgICAgICAgICAgeDMgPSB2ZXJ0aWNlc1trXVswXSxcclxuICAgICAgICAgICAgeTMgPSB2ZXJ0aWNlc1trXVsxXSxcclxuICAgICAgICAgICAgZmFic3kxeTIgPSBNYXRoLmFicyh5MSAtIHkyKSxcclxuICAgICAgICAgICAgZmFic3kyeTMgPSBNYXRoLmFicyh5MiAtIHkzKSxcclxuICAgICAgICAgICAgeGMsIHljLCBtMSwgbTIsIG14MSwgbXgyLCBteTEsIG15MiwgZHgsIGR5O1xyXG5cclxuICAgIC8qIENoZWNrIGZvciBjb2luY2lkZW50IHBvaW50cyAqL1xyXG4gICAgaWYgKGZhYnN5MXkyIDwgRVBTSUxPTiAmJiBmYWJzeTJ5MyA8IEVQU0lMT04pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VlayEgQ29pbmNpZGVudCBwb2ludHMhJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZhYnN5MXkyIDwgRVBTSUxPTikge1xyXG4gICAgICAgIG0yICA9IC0oKHgzIC0geDIpIC8gKHkzIC0geTIpKTtcclxuICAgICAgICBteDIgPSAoeDIgKyB4MykgLyAyLjA7XHJcbiAgICAgICAgbXkyID0gKHkyICsgeTMpIC8gMi4wO1xyXG4gICAgICAgIHhjICA9ICh4MiArIHgxKSAvIDIuMDtcclxuICAgICAgICB5YyAgPSBtMiAqICh4YyAtIG14MikgKyBteTI7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoZmFic3kyeTMgPCBFUFNJTE9OKSB7XHJcbiAgICAgICAgbTEgID0gLSgoeDIgLSB4MSkgLyAoeTIgLSB5MSkpO1xyXG4gICAgICAgIG14MSA9ICh4MSArIHgyKSAvIDIuMDtcclxuICAgICAgICBteTEgPSAoeTEgKyB5MikgLyAyLjA7XHJcbiAgICAgICAgeGMgID0gKHgzICsgeDIpIC8gMi4wO1xyXG4gICAgICAgIHljICA9IG0xICogKHhjIC0gbXgxKSArIG15MTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBtMSAgPSAtKCh4MiAtIHgxKSAvICh5MiAtIHkxKSk7XHJcbiAgICAgICAgbTIgID0gLSgoeDMgLSB4MikgLyAoeTMgLSB5MikpO1xyXG4gICAgICAgIG14MSA9ICh4MSArIHgyKSAvIDIuMDtcclxuICAgICAgICBteDIgPSAoeDIgKyB4MykgLyAyLjA7XHJcbiAgICAgICAgbXkxID0gKHkxICsgeTIpIC8gMi4wO1xyXG4gICAgICAgIG15MiA9ICh5MiArIHkzKSAvIDIuMDtcclxuICAgICAgICB4YyAgPSAobTEgKiBteDEgLSBtMiAqIG14MiArIG15MiAtIG15MSkgLyAobTEgLSBtMik7XHJcbiAgICAgICAgeWMgID0gKGZhYnN5MXkyID4gZmFic3kyeTMpID9cclxuICAgICAgICAgICAgbTEgKiAoeGMgLSBteDEpICsgbXkxIDpcclxuICAgICAgICAgICAgbTIgKiAoeGMgLSBteDIpICsgbXkyO1xyXG4gICAgfVxyXG5cclxuICAgIGR4ID0geDIgLSB4YztcclxuICAgIGR5ID0geTIgLSB5YztcclxuICAgIHJldHVybiB7aTogaSwgajogaiwgazogaywgeDogeGMsIHk6IHljLCByOiBkeCAqIGR4ICsgZHkgKiBkeX07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZHVwKGVkZ2VzKSB7XHJcbiAgICB2YXIgaSwgaiwgYSwgYiwgbSwgbjtcclxuXHJcbiAgICBmb3IgKGogPSBlZGdlcy5sZW5ndGg7IGo7ICkge1xyXG4gICAgICAgIGIgPSBlZGdlc1stLWpdO1xyXG4gICAgICAgIGEgPSBlZGdlc1stLWpdO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSBqOyBpOyApIHtcclxuICAgICAgICAgICAgbiA9IGVkZ2VzWy0taV07XHJcbiAgICAgICAgICAgIG0gPSBlZGdlc1stLWldO1xyXG5cclxuICAgICAgICAgICAgaWYgKChhID09PSBtICYmIGIgPT09IG4pIHx8IChhID09PSBuICYmIGIgPT09IG0pKSB7XHJcbiAgICAgICAgICAgICAgICBlZGdlcy5zcGxpY2UoaiwgMik7XHJcbiAgICAgICAgICAgICAgICBlZGdlcy5zcGxpY2UoaSwgMik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxudmFyIGRlbGF1bmF5ID0ge1xyXG4gICAgdHJpYW5ndWxhdGU6IGZ1bmN0aW9uKHZlcnRpY2VzLCBrZXkpIHtcclxuICAgICAgICB2YXIgbiA9IHZlcnRpY2VzLmxlbmd0aDtcclxuICAgICAgICB2YXIgaSwgaiwgaW5kaWNlcywgc3QsIG9wZW4sIGNsb3NlZCwgZWRnZXMsIGR4LCBkeSwgYSwgYiwgYztcclxuXHJcbiAgICAgICAgLyogQmFpbCBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIHZlcnRpY2VzIHRvIGZvcm0gYW55IHRyaWFuZ2xlcy4gKi9cclxuICAgICAgICBpZiAobiA8IDMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogU2xpY2Ugb3V0IHRoZSBhY3R1YWwgdmVydGljZXMgZnJvbSB0aGUgcGFzc2VkIG9iamVjdHMuIChEdXBsaWNhdGUgdGhlXHJcbiAgICAgICAgICAgICogYXJyYXkgZXZlbiBpZiB3ZSBkb24ndCwgdGhvdWdoLCBzaW5jZSB3ZSBuZWVkIHRvIG1ha2UgYSBzdXBlcnRyaWFuZ2xlXHJcbiAgICAgICAgICAgICogbGF0ZXIgb24hKSAqL1xyXG4gICAgICAgIHZlcnRpY2VzID0gdmVydGljZXMuc2xpY2UoMCk7XHJcblxyXG4gICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgICAgZm9yIChpID0gbjsgaS0tOyApIHtcclxuICAgICAgICAgICAgICAgIHZlcnRpY2VzW2ldID0gdmVydGljZXNbaV1ba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogTWFrZSBhbiBhcnJheSBvZiBpbmRpY2VzIGludG8gdGhlIHZlcnRleCBhcnJheSwgc29ydGVkIGJ5IHRoZVxyXG4gICAgICAgICAgICAqIHZlcnRpY2VzJyB4LXBvc2l0aW9uLiBGb3JjZSBzdGFibGUgc29ydGluZyBieSBjb21wYXJpbmcgaW5kaWNlcyBpZlxyXG4gICAgICAgICAgICAqIHRoZSB4LXBvc2l0aW9ucyBhcmUgZXF1YWwuICovXHJcbiAgICAgICAgaW5kaWNlcyA9IG5ldyBBcnJheShuKTtcclxuXHJcbiAgICAgICAgZm9yIChpID0gbjsgaS0tOyApIHtcclxuICAgICAgICAgICAgaW5kaWNlc1tpXSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpbmRpY2VzLnNvcnQoZnVuY3Rpb24oaSwgaikge1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IHZlcnRpY2VzW2pdWzBdIC0gdmVydGljZXNbaV1bMF07XHJcbiAgICAgICAgICAgIHJldHVybiBkaWZmICE9PSAwID8gZGlmZiA6IGkgLSBqO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvKiBOZXh0LCBmaW5kIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgc3VwZXJ0cmlhbmdsZSAod2hpY2ggY29udGFpbnMgYWxsIG90aGVyXHJcbiAgICAgICAgICAgICogdHJpYW5nbGVzKSwgYW5kIGFwcGVuZCB0aGVtIG9udG8gdGhlIGVuZCBvZiBhIChjb3B5IG9mKSB0aGUgdmVydGV4XHJcbiAgICAgICAgICAgICogYXJyYXkuICovXHJcbiAgICAgICAgc3QgPSBzdXBlcnRyaWFuZ2xlKHZlcnRpY2VzKTtcclxuICAgICAgICB2ZXJ0aWNlcy5wdXNoKHN0WzBdLCBzdFsxXSwgc3RbMl0pO1xyXG5cclxuICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBvcGVuIGxpc3QgKGNvbnRhaW5pbmcgdGhlIHN1cGVydHJpYW5nbGUgYW5kIG5vdGhpbmdcclxuICAgICAgICAgICAgKiBlbHNlKSBhbmQgdGhlIGNsb3NlZCBsaXN0ICh3aGljaCBpcyBlbXB0eSBzaW5jZSB3ZSBoYXZuJ3QgcHJvY2Vzc2VkXHJcbiAgICAgICAgICAgICogYW55IHRyaWFuZ2xlcyB5ZXQpLiAqL1xyXG4gICAgICAgIG9wZW4gICA9IFtjaXJjdW1jaXJjbGUodmVydGljZXMsIG4gKyAwLCBuICsgMSwgbiArIDIpXTtcclxuICAgICAgICBjbG9zZWQgPSBbXTtcclxuICAgICAgICBlZGdlcyAgPSBbXTtcclxuXHJcbiAgICAgICAgLyogSW5jcmVtZW50YWxseSBhZGQgZWFjaCB2ZXJ0ZXggdG8gdGhlIG1lc2guICovXHJcbiAgICAgICAgZm9yIChpID0gaW5kaWNlcy5sZW5ndGg7IGktLTsgZWRnZXMubGVuZ3RoID0gMCkge1xyXG4gICAgICAgICAgICBjID0gaW5kaWNlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8qIEZvciBlYWNoIG9wZW4gdHJpYW5nbGUsIGNoZWNrIHRvIHNlZSBpZiB0aGUgY3VycmVudCBwb2ludCBpc1xyXG4gICAgICAgICAgICAgICAgKiBpbnNpZGUgaXQncyBjaXJjdW1jaXJjbGUuIElmIGl0IGlzLCByZW1vdmUgdGhlIHRyaWFuZ2xlIGFuZCBhZGRcclxuICAgICAgICAgICAgICAgICogaXQncyBlZGdlcyB0byBhbiBlZGdlIGxpc3QuICovXHJcbiAgICAgICAgICAgIGZvciAoaiA9IG9wZW4ubGVuZ3RoOyBqLS07ICkge1xyXG4gICAgICAgICAgICAgICAgLyogSWYgdGhpcyBwb2ludCBpcyB0byB0aGUgcmlnaHQgb2YgdGhpcyB0cmlhbmdsZSdzIGNpcmN1bWNpcmNsZSxcclxuICAgICAgICAgICAgICAgICAgICAqIHRoZW4gdGhpcyB0cmlhbmdsZSBzaG91bGQgbmV2ZXIgZ2V0IGNoZWNrZWQgYWdhaW4uIFJlbW92ZSBpdFxyXG4gICAgICAgICAgICAgICAgICAgICogZnJvbSB0aGUgb3BlbiBsaXN0LCBhZGQgaXQgdG8gdGhlIGNsb3NlZCBsaXN0LCBhbmQgc2tpcC4gKi9cclxuICAgICAgICAgICAgICAgIGR4ID0gdmVydGljZXNbY11bMF0gLSBvcGVuW2pdLng7XHJcbiAgICAgICAgICAgICAgICBpZiAoZHggPiAwLjAgJiYgZHggKiBkeCA+IG9wZW5bal0ucikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlZC5wdXNoKG9wZW5bal0pO1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZW4uc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8qIElmIHdlJ3JlIG91dHNpZGUgdGhlIGNpcmN1bWNpcmNsZSwgc2tpcCB0aGlzIHRyaWFuZ2xlLiAqL1xyXG4gICAgICAgICAgICAgICAgZHkgPSB2ZXJ0aWNlc1tjXVsxXSAtIG9wZW5bal0ueTtcclxuICAgICAgICAgICAgICAgIGlmIChkeCAqIGR4ICsgZHkgKiBkeSAtIG9wZW5bal0uciA+IEVQU0lMT04pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvKiBSZW1vdmUgdGhlIHRyaWFuZ2xlIGFuZCBhZGQgaXQncyBlZGdlcyB0byB0aGUgZWRnZSBsaXN0LiAqL1xyXG4gICAgICAgICAgICAgICAgZWRnZXMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmksIG9wZW5bal0uaixcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmosIG9wZW5bal0uayxcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmssIG9wZW5bal0uaVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIG9wZW4uc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKiBSZW1vdmUgYW55IGRvdWJsZWQgZWRnZXMuICovXHJcbiAgICAgICAgICAgIGRlZHVwKGVkZ2VzKTtcclxuXHJcbiAgICAgICAgICAgIC8qIEFkZCBhIG5ldyB0cmlhbmdsZSBmb3IgZWFjaCBlZGdlLiAqL1xyXG4gICAgICAgICAgICBmb3IgKGogPSBlZGdlcy5sZW5ndGg7IGo7ICkge1xyXG4gICAgICAgICAgICAgICAgYiA9IGVkZ2VzWy0tal07XHJcbiAgICAgICAgICAgICAgICBhID0gZWRnZXNbLS1qXTtcclxuICAgICAgICAgICAgICAgIG9wZW4ucHVzaChjaXJjdW1jaXJjbGUodmVydGljZXMsIGEsIGIsIGMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogQ29weSBhbnkgcmVtYWluaW5nIG9wZW4gdHJpYW5nbGVzIHRvIHRoZSBjbG9zZWQgbGlzdCwgYW5kIHRoZW5cclxuICAgICAgICAgICAgKiByZW1vdmUgYW55IHRyaWFuZ2xlcyB0aGF0IHNoYXJlIGEgdmVydGV4IHdpdGggdGhlIHN1cGVydHJpYW5nbGUsXHJcbiAgICAgICAgICAgICogYnVpbGRpbmcgYSBsaXN0IG9mIHRyaXBsZXRzIHRoYXQgcmVwcmVzZW50IHRyaWFuZ2xlcy4gKi9cclxuICAgICAgICBmb3IgKGkgPSBvcGVuLmxlbmd0aDsgaS0tOyApIHtcclxuICAgICAgICAgICAgY2xvc2VkLnB1c2gob3BlbltpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wZW4ubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChpID0gY2xvc2VkLmxlbmd0aDsgaS0tOyApIHtcclxuICAgICAgICAgICAgaWYgKGNsb3NlZFtpXS5pIDwgbiAmJiBjbG9zZWRbaV0uaiA8IG4gJiYgY2xvc2VkW2ldLmsgPCBuKSB7XHJcbiAgICAgICAgICAgICAgICBvcGVuLnB1c2goY2xvc2VkW2ldLmksIGNsb3NlZFtpXS5qLCBjbG9zZWRbaV0uayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIFlheSwgd2UncmUgZG9uZSEgKi9cclxuICAgICAgICByZXR1cm4gb3BlbjtcclxuICAgIH0sXHJcbiAgICBjb250YWluczogZnVuY3Rpb24odHJpLCBwKSB7XHJcbiAgICAgICAgLyogQm91bmRpbmcgYm94IHRlc3QgZmlyc3QsIGZvciBxdWljayByZWplY3Rpb25zLiAqL1xyXG4gICAgICAgIGlmICgocFswXSA8IHRyaVswXVswXSAmJiBwWzBdIDwgdHJpWzFdWzBdICYmIHBbMF0gPCB0cmlbMl1bMF0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFswXSA+IHRyaVswXVswXSAmJiBwWzBdID4gdHJpWzFdWzBdICYmIHBbMF0gPiB0cmlbMl1bMF0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFsxXSA8IHRyaVswXVsxXSAmJiBwWzFdIDwgdHJpWzFdWzFdICYmIHBbMV0gPCB0cmlbMl1bMV0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFsxXSA+IHRyaVswXVsxXSAmJiBwWzFdID4gdHJpWzFdWzFdICYmIHBbMV0gPiB0cmlbMl1bMV0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGEgPSB0cmlbMV1bMF0gLSB0cmlbMF1bMF07XHJcbiAgICAgICAgdmFyIGIgPSB0cmlbMl1bMF0gLSB0cmlbMF1bMF07XHJcbiAgICAgICAgdmFyIGMgPSB0cmlbMV1bMV0gLSB0cmlbMF1bMV07XHJcbiAgICAgICAgdmFyIGQgPSB0cmlbMl1bMV0gLSB0cmlbMF1bMV07XHJcbiAgICAgICAgdmFyIGkgPSBhICogZCAtIGIgKiBjO1xyXG5cclxuICAgICAgICAvKiBEZWdlbmVyYXRlIHRyaS4gKi9cclxuICAgICAgICBpZiAoaSA9PT0gMC4wKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHUgPSAoZCAqIChwWzBdIC0gdHJpWzBdWzBdKSAtIGIgKiAocFsxXSAtIHRyaVswXVsxXSkpIC8gaSxcclxuICAgICAgICAgICAgICAgIHYgPSAoYSAqIChwWzFdIC0gdHJpWzBdWzFdKSAtIGMgKiAocFswXSAtIHRyaVswXVswXSkpIC8gaTtcclxuXHJcbiAgICAgICAgLyogSWYgd2UncmUgb3V0c2lkZSB0aGUgdHJpLCBmYWlsLiAqL1xyXG4gICAgICAgIGlmICh1IDwgMC4wIHx8IHYgPCAwLjAgfHwgKHUgKyB2KSA+IDEuMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBbdSwgdl07XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBkZWxhdW5heTtcclxuIiwiXHJcbmV4cG9ydCB2YXIgR0xNQVRfRVBTSUxPTiA9IDAuMDAwMDAxO1xyXG5cclxuLy8gVXNlIEFycmF5IGluc3RlYWQgb2YgRmxvYXQzMkFycmF5LiBJdCBzZWVtcyB0byBiZSBtdWNoIGZhc3RlciBhbmQgaGlnaGVyIHByZWNpc2lvbi5cclxuZXhwb3J0IHZhciBHTE1BVF9BUlJBWV9UWVBFID0gQXJyYXk7XHJcbi8vIGlmKCFHTE1BVF9BUlJBWV9UWVBFKSB7XHJcbi8vICAgICBHTE1BVF9BUlJBWV9UWVBFID0gKHR5cGVvZiBGbG9hdDMyQXJyYXkgIT09ICd1bmRlZmluZWQnKSA/IEZsb2F0MzJBcnJheSA6IEFycmF5O1xyXG4vLyB9XHJcblxyXG5leHBvcnQgdmFyIEdMTUFUX1JBTkRPTSA9IE1hdGgucmFuZG9tO1xyXG4iLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgMiBEaW1lbnNpb25hbCBWZWN0b3JcclxuICogQG5hbWUgdmVjMlxyXG4gKi9cclxuXHJcbnZhciB2ZWMyID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjMlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjMn0gYSBuZXcgMkQgdmVjdG9yXHJcbiAqL1xyXG52ZWMyLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDIpO1xyXG4gICAgb3V0WzBdID0gMDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMiBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBhIG5ldyAyRCB2ZWN0b3JcclxuICovXHJcbnZlYzIuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMik7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMyIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gYSBuZXcgMkQgdmVjdG9yXHJcbiAqL1xyXG52ZWMyLmZyb21WYWx1ZXMgPSBmdW5jdGlvbih4LCB5KSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMik7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzIgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMiB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5KSB7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTdWJ0cmFjdHMgdmVjdG9yIGIgZnJvbSB2ZWN0b3IgYVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnN1YnRyYWN0ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMi5zdWIgPSB2ZWMyLnN1YnRyYWN0O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm11bHRpcGx5ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMi5tdWwgPSB2ZWMyLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLmRpdmlkZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAvIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpdmlkZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLmRpdiA9IHZlYzIuZGl2aWRlO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1pbmltdW0gb2YgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gTWF0aC5taW4oYVswXSwgYlswXSk7XHJcbiAgICBvdXRbMV0gPSBNYXRoLm1pbihhWzFdLCBiWzFdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMyIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYjtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWMyJ3MgYWZ0ZXIgc2NhbGluZyB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWVcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYiBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgKGJbMF0gKiBzY2FsZSk7XHJcbiAgICBvdXRbMV0gPSBhWzFdICsgKGJbMV0gKiBzY2FsZSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMyLmRpc3RhbmNlID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgdmFyIHggPSBiWzBdIC0gYVswXSxcclxuICAgICAgICB5ID0gYlsxXSAtIGFbMV07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuZGlzdCA9IHZlYzIuZGlzdGFuY2U7XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMyLnNxdWFyZWREaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXHJcbiAgICAgICAgeSA9IGJbMV0gLSBhWzFdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuc3FyRGlzdCA9IHZlYzIuc3F1YXJlZERpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWMyLmxlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLmxlbiA9IHZlYzIubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWMyLnNxdWFyZWRMZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLnNxckxlbiA9IHZlYzIuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gLWFbMF07XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5pbnZlcnNlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcclxuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xyXG4gIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogTm9ybWFsaXplIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgdmFyIGxlbiA9IHgqeCArIHkqeTtcclxuICAgIGlmIChsZW4gPiAwKSB7XHJcbiAgICAgICAgLy9UT0RPOiBldmFsdWF0ZSB1c2Ugb2YgZ2xtX2ludnNxcnQgaGVyZT9cclxuICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgICAgb3V0WzBdID0gYVswXSAqIGxlbjtcclxuICAgICAgICBvdXRbMV0gPSBhWzFdICogbGVuO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXHJcbnZlYzIuZG90ID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbXB1dGVzIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHR3byB2ZWMyJ3NcclxuICogTm90ZSB0aGF0IHRoZSBjcm9zcyBwcm9kdWN0IG11c3QgYnkgZGVmaW5pdGlvbiBwcm9kdWNlIGEgM0QgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzIuY3Jvc3MgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZhciB6ID0gYVswXSAqIGJbMV0gLSBhWzFdICogYlswXTtcclxuICAgIG91dFswXSA9IG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSB6O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIubGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcclxuICAgIHZhciBheCA9IGFbMF0sXHJcbiAgICAgICAgYXkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XHJcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHZlY3RvciB3aXRoIHRoZSBnaXZlbiBzY2FsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3NjYWxlXSBMZW5ndGggb2YgdGhlIHJlc3VsdGluZyB2ZWN0b3IuIElmIG9tbWl0dGVkLCBhIHVuaXQgdmVjdG9yIHdpbGwgYmUgcmV0dXJuZWRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5yYW5kb20gPSBmdW5jdGlvbiAob3V0LCBzY2FsZSkge1xyXG4gICAgc2NhbGUgPSBzY2FsZSB8fCAxLjA7XHJcbiAgICB2YXIgciA9IEdMTUFUX1JBTkRPTSgpICogMi4wICogTWF0aC5QSTtcclxuICAgIG91dFswXSA9IE1hdGguY29zKHIpICogc2NhbGU7XHJcbiAgICBvdXRbMV0gPSBNYXRoLnNpbihyKSAqIHNjYWxlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDJ9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIudHJhbnNmb3JtTWF0MiA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzJdICogeTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDJkfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnRyYW5zZm9ybU1hdDJkID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV07XHJcbiAgICBvdXRbMF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHkgKyBtWzVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQzXHJcbiAqIDNyZCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDN9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIudHJhbnNmb3JtTWF0MyA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzNdICogeSArIG1bNl07XHJcbiAgICBvdXRbMV0gPSBtWzFdICogeCArIG1bNF0gKiB5ICsgbVs3XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMiB3aXRoIGEgbWF0NFxyXG4gKiAzcmQgdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcwJ1xyXG4gKiA0dGggdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQ0fSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnRyYW5zZm9ybU1hdDQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZhciB4ID0gYVswXSxcclxuICAgICAgICB5ID0gYVsxXTtcclxuICAgIG91dFswXSA9IG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzEyXTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzEzXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybSBzb21lIG9wZXJhdGlvbiBvdmVyIGFuIGFycmF5IG9mIHZlYzJzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3ZlclxyXG4gKiBAcGFyYW0ge051bWJlcn0gc3RyaWRlIE51bWJlciBvZiBlbGVtZW50cyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHZlYzIuIElmIDAgYXNzdW1lcyB0aWdodGx5IHBhY2tlZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IE51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjMnMgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggdmVjdG9yIGluIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW2FyZ10gYWRkaXRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGZuXHJcbiAqIEByZXR1cm5zIHtBcnJheX0gYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuZm9yRWFjaCA9IChmdW5jdGlvbigpIHtcclxuICAgIHZhciB2ZWMgPSB2ZWMyLmNyZWF0ZSgpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbihhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcclxuICAgICAgICB2YXIgaSwgbDtcclxuICAgICAgICBpZighc3RyaWRlKSB7XHJcbiAgICAgICAgICAgIHN0cmlkZSA9IDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZighb2Zmc2V0KSB7XHJcbiAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjb3VudCkge1xyXG4gICAgICAgICAgICBsID0gTWF0aC5taW4oKGNvdW50ICogc3RyaWRlKSArIG9mZnNldCwgYS5sZW5ndGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGwgPSBhLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihpID0gb2Zmc2V0OyBpIDwgbDsgaSArPSBzdHJpZGUpIHtcclxuICAgICAgICAgICAgdmVjWzBdID0gYVtpXTsgdmVjWzFdID0gYVtpKzFdO1xyXG4gICAgICAgICAgICBmbih2ZWMsIHZlYywgYXJnKTtcclxuICAgICAgICAgICAgYVtpXSA9IHZlY1swXTsgYVtpKzFdID0gdmVjWzFdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjMjsiLCJpbXBvcnQgdmVjMiBmcm9tICcuLi9nbG1hdHJpeC92ZWMyJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuVmVjdG9yMlxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKi9cclxudmFyIFZlY3RvcjIgPSBmdW5jdGlvbih4LCB5KSB7XHJcblxyXG4gICAgeCA9IHggfHwgMDtcclxuICAgIHkgPSB5IHx8IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIFZlY3RvcjIsIHJlYWQgYW5kIHdyaXRlIG9mIHgsIHkgd2lsbCBjaGFuZ2UgdGhlIHZhbHVlcyBpbiBhcnJheVxyXG4gICAgICogQWxsIG1ldGhvZHMgYWxzbyBvcGVyYXRlIG9uIHRoZSBhcnJheSBpbnN0ZWFkIG9mIHgsIHkgY29tcG9uZW50c1xyXG4gICAgICogQG5hbWUgYXJyYXlcclxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IyI1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFycmF5ID0gdmVjMi5mcm9tVmFsdWVzKHgsIHkpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlydHkgZmxhZyBpcyB1c2VkIGJ5IHRoZSBOb2RlIHRvIGRldGVybWluZVxyXG4gICAgICogaWYgdGhlIG1hdHJpeCBpcyB1cGRhdGVkIHRvIGxhdGVzdFxyXG4gICAgICogQG5hbWUgX2RpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjIjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcblZlY3RvcjIucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBWZWN0b3IyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGIgdG8gc2VsZlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCBhbmQgeSBjb21wb25lbnRzXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24oeCwgeSkge1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSB4O1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSB5O1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCBhbmQgeSBjb21wb25lbnRzIGZyb20gYXJyYXlcclxuICAgICAqIEBwYXJhbSAge0Zsb2F0MzJBcnJheXxudW1iZXJbXX0gYXJyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNldEFycmF5OiBmdW5jdGlvbihhcnIpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0gYXJyWzBdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSBhcnJbMV07XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBWZWN0b3IyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIodGhpcy54LCB0aGlzLnkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgeCwgeSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcm9zcyBwcm9kdWN0IG9mIHNlbGYgYW5kIGIsIHdyaXR0ZW4gdG8gYSBWZWN0b3IzIG91dFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBjcm9zczogZnVuY3Rpb24ob3V0LCBiKSB7XHJcbiAgICAgICAgdmVjMi5jcm9zcyhvdXQuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBkaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5kaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuZGlzdGFuY2UodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIGRpdmlkZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGRpdjogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuZGl2KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXZpZGUgc2VsZiBieSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgZGl2aWRlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5kaXZpZGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5kb3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2YgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIubGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIubGVuZ3RoKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIExpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbGVycDogZnVuY3Rpb24oYSwgYiwgdCkge1xyXG4gICAgICAgIHZlYzIubGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWluaW11bSBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbWluOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5taW4odGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1heGltdW0gb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIG1heDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIubWF4KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBtdWw6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXV0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOZWdhdGUgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBuZWdhdGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZlYzIubmVnYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWxpemUgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZlYzIubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSByYW5kb20geCwgeSBjb21wb25lbnRzIHdpdGggYSBnaXZlbiBzY2FsZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICByYW5kb206IGZ1bmN0aW9uKHNjYWxlKSB7XHJcbiAgICAgICAgdmVjMi5yYW5kb20odGhpcy5hcnJheSwgc2NhbGUpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24ocykge1xyXG4gICAgICAgIHZlYzIuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIGIgYW5kIGFkZCB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlQW5kQWRkOiBmdW5jdGlvbihiLCBzKSB7XHJcbiAgICAgICAgdmVjMi5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5zcXJEaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZERpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3F1YXJlZERpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkTGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3FyTGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3F1YXJlZExlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3Igc3VidHJhY3RcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzdWI6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLnN1Yih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgYiBmcm9tIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzdWJ0cmFjdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuc3VidHJhY3QodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgyIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQyOiBmdW5jdGlvbihtKSB7XHJcbiAgICAgICAgdmVjMi50cmFuc2Zvcm1NYXQyKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4MmQgbVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQyZDogZnVuY3Rpb24obSkge1xyXG4gICAgICAgIHZlYzIudHJhbnNmb3JtTWF0MmQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgbS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgzIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQzOiBmdW5jdGlvbihtKSB7XHJcbiAgICAgICAgdmVjMi50cmFuc2Zvcm1NYXQzKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4NCBtXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtTWF0NDogZnVuY3Rpb24obSkge1xyXG4gICAgICAgIHZlYzIudHJhbnNmb3JtTWF0NCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLy8gR2V0dGVyIGFuZCBTZXR0ZXJcclxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xyXG5cclxuICAgIHZhciBwcm90byA9IFZlY3RvcjIucHJvdG90eXBlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yMlxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzBdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVswXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yMlxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8vIFN1cHBseSBtZXRob2RzIHRoYXQgYXJlIG5vdCBpbiBwbGFjZVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5hZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5KSB7XHJcbiAgICB2ZWMyLnNldChvdXQuYXJyYXksIHgsIHkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGIpIHtcclxuICAgIHZlYzIuY29weShvdXQuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5jcm9zcyA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMi5jcm9zcyhvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLmRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5kaXN0YW5jZShhLmFycmF5LCBiLmFycmF5KTtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIuZGlzdGFuY2UgPSBWZWN0b3IyLmRpc3Q7XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuZGl2ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMyLmRpdmlkZShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5kaXZpZGUgPSBWZWN0b3IyLmRpdjtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMi5kb3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5kb3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIubGVuID0gZnVuY3Rpb24oYikge1xyXG4gICAgcmV0dXJuIHZlYzIubGVuZ3RoKGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLy8gVmVjdG9yMi5sZW5ndGggPSBWZWN0b3IyLmxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5sZXJwID0gZnVuY3Rpb24ob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2ZWMyLmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5taW4gPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIubWluKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMi5tYXgob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIubXVsdGlwbHkob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIubXVsdGlwbHkgPSBWZWN0b3IyLm11bDtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMi5uZWdhdGUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMi5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIucmFuZG9tID0gZnVuY3Rpb24ob3V0LCBzY2FsZSkge1xyXG4gICAgdmVjMi5yYW5kb20ob3V0LmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgc2NhbGUpIHtcclxuICAgIHZlYzIuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICB2ZWMyLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLnNxckRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5zcXJEaXN0KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMi5zcXVhcmVkRGlzdGFuY2UgPSBWZWN0b3IyLnNxckRpc3Q7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIuc3FyTGVuID0gZnVuY3Rpb24oYSkge1xyXG4gICAgcmV0dXJuIHZlYzIuc3FyTGVuKGEuYXJyYXkpO1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLnNxdWFyZWRMZW5ndGggPSBWZWN0b3IyLnNxckxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc3ViID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMyLnN1YnRyYWN0KG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLnN1YnRyYWN0ID0gVmVjdG9yMi5zdWI7XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MiA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQyKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9ICBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MmQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZlYzIudHJhbnNmb3JtTWF0MmQob3V0LmFycmF5LCBhLmFycmF5LCBtLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtNYXRyaXgzfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MyA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQzKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQ0KG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBWZWN0b3IyO1xyXG4iLCIvLyAyRCBCbGVuZCBjbGlwIG9mIGJsZW5kIHRyZWVcclxuLy8gaHR0cDovL2RvY3MudW5pdHkzZC5jb20vRG9jdW1lbnRhdGlvbi9NYW51YWwvMkRCbGVuZGluZy5odG1sXHJcbmltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcbmltcG9ydCBkZWxhdW5heSBmcm9tICcuLi91dGlsL2RlbGF1bmF5JztcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi4vbWF0aC9WZWN0b3IyJztcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmFuaW1hdGlvbi5CbGVuZDJEQ2xpcC5JQ2xpcElucHV0XHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5WZWN0b3IyfSBwb3NpdGlvblxyXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiAyZCBibGVuZGluZyBub2RlIGluIGFuaW1hdGlvbiBibGVuZCB0cmVlLlxyXG4gKiBvdXRwdXQgY2xpcCBtdXN0IGhhdmUgYmxlbmQyRCBtZXRob2RcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5CbGVuZDJEQ2xpcFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGlvXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cclxuICogQHBhcmFtIHtvYmplY3RbXX0gW29wdHMuaW5wdXRzXVxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yMn0gW29wdHMucG9zaXRpb25dXHJcbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gW29wdHMub3V0cHV0XVxyXG4gKi9cclxudmFyIEJsZW5kMkRDbGlwID0gZnVuY3Rpb24gKG9wdHMpIHtcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XHJcbiAgICAvKipcclxuICAgICAqIE91dHB1dCBjbGlwIG11c3QgaGF2ZSBibGVuZDJEIG1ldGhvZFxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkNsaXB9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3V0cHV0ID0gb3B0cy5vdXRwdXQgfHwgbnVsbDtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkJsZW5kMkRDbGlwLklDbGlwSW5wdXRbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5pbnB1dHMgPSBvcHRzLmlucHV0cyB8fCBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVUcmlhbmdsZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5fdHJpYW5nbGVzID0gW107XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlVHJpYW5nbGVzKCk7XHJcbn07XHJcblxyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUgPSBuZXcgQ2xpcCgpO1xyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZDJEQ2xpcDtcclxuLyoqXHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IyfSBwb3NpdGlvblxyXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGlucHV0Q2xpcFxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldF1cclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQmxlbmQyRENsaXAuSUNsaXBJbnB1dH1cclxuICovXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5hZGRJbnB1dCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgaW5wdXRDbGlwLCBvZmZzZXQpIHtcclxuICAgIHZhciBvYmogPSB7XHJcbiAgICAgICAgcG9zaXRpb24gOiBwb3NpdGlvbixcclxuICAgICAgICBjbGlwIDogaW5wdXRDbGlwLFxyXG4gICAgICAgIG9mZnNldCA6IG9mZnNldCB8fCAwXHJcbiAgICB9O1xyXG4gICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgdGhpcy5saWZlID0gTWF0aC5tYXgoaW5wdXRDbGlwLmxpZmUsIHRoaXMubGlmZSk7XHJcbiAgICAvLyBUT0RPIENoYW5nZSB0byBpbmNyZW1lbnRhbGx5IGFkZGluZ1xyXG4gICAgdGhpcy5fdXBkYXRlVHJpYW5nbGVzKCk7XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxufTtcclxuXHJcbi8vIERlbGF1bmF5IHRyaWFuZ3VsYXRlXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5fdXBkYXRlVHJpYW5nbGVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGlucHV0cyA9IHRoaXMuaW5wdXRzLm1hcChmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIHJldHVybiBhLnBvc2l0aW9uO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl90cmlhbmdsZXMgPSBkZWxhdW5heS50cmlhbmd1bGF0ZShpbnB1dHMsICdhcnJheScpO1xyXG59O1xyXG5cclxuQmxlbmQyRENsaXAucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAodGltZSwgZFRpbWUsIHNpbGVudCkge1xyXG5cclxuICAgIHZhciByZXQgPSBDbGlwLnByb3RvdHlwZS5zdGVwLmNhbGwodGhpcywgdGltZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcclxuICAgICAgICB0aGlzLnNldFRpbWUodGhpcy5nZXRFbGFwc2VkVGltZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXHJcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufTtcclxuXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIHZhciByZXMgPSB0aGlzLl9maW5kVHJpYW5nbGUodGhpcy5wb3NpdGlvbik7XHJcbiAgICBpZiAoIXJlcykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIEluIEJhcnljZW50cmljXHJcbiAgICB2YXIgYSA9IHJlc1sxXTsgLy8gUGVyY2VudCBvZiBjbGlwMlxyXG4gICAgdmFyIGIgPSByZXNbMl07IC8vIFBlcmNlbnQgb2YgY2xpcDNcclxuXHJcbiAgICB2YXIgdHJpID0gcmVzWzBdO1xyXG5cclxuICAgIHZhciBpbjEgPSB0aGlzLmlucHV0c1t0cmkuaW5kaWNlc1swXV07XHJcbiAgICB2YXIgaW4yID0gdGhpcy5pbnB1dHNbdHJpLmluZGljZXNbMV1dO1xyXG4gICAgdmFyIGluMyA9IHRoaXMuaW5wdXRzW3RyaS5pbmRpY2VzWzJdXTtcclxuICAgIHZhciBjbGlwMSA9IGluMS5jbGlwO1xyXG4gICAgdmFyIGNsaXAyID0gaW4yLmNsaXA7XHJcbiAgICB2YXIgY2xpcDMgPSBpbjMuY2xpcDtcclxuXHJcbiAgICBjbGlwMS5zZXRUaW1lKCh0aW1lICsgaW4xLm9mZnNldCkgJSBjbGlwMS5saWZlKTtcclxuICAgIGNsaXAyLnNldFRpbWUoKHRpbWUgKyBpbjIub2Zmc2V0KSAlIGNsaXAyLmxpZmUpO1xyXG4gICAgY2xpcDMuc2V0VGltZSgodGltZSArIGluMy5vZmZzZXQpICUgY2xpcDMubGlmZSk7XHJcblxyXG4gICAgdmFyIGMxID0gY2xpcDEub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAxLm91dHB1dCA6IGNsaXAxO1xyXG4gICAgdmFyIGMyID0gY2xpcDIub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAyLm91dHB1dCA6IGNsaXAyO1xyXG4gICAgdmFyIGMzID0gY2xpcDMub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAzLm91dHB1dCA6IGNsaXAzO1xyXG5cclxuICAgIHRoaXMub3V0cHV0LmJsZW5kMkQoYzEsIGMyLCBjMywgYSwgYik7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xvbmUgYSBuZXcgQmxlbmQyRCBjbGlwXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2xvbmVJbnB1dHMgVHJ1ZSBpZiBjbG9uZSB0aGUgaW5wdXQgY2xpcHNcclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQmxlbmQyRENsaXB9XHJcbiAqL1xyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoY2xvbmVJbnB1dHMpIHtcclxuICAgIHZhciBjbGlwID0gQ2xpcC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgIGNsaXAub3V0cHV0ID0gdGhpcy5vdXRwdXQuY2xvbmUoKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgaW5wdXRDbGlwID0gY2xvbmVJbnB1dHMgPyB0aGlzLmlucHV0c1tpXS5jbGlwLmNsb25lKHRydWUpIDogdGhpcy5pbnB1dHNbaV0uY2xpcDtcclxuICAgICAgICBjbGlwLmFkZElucHV0KHRoaXMuaW5wdXRzW2ldLnBvc2l0aW9uLCBpbnB1dENsaXAsIHRoaXMuaW5wdXRzW2ldLm9mZnNldCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xpcDtcclxufTtcclxuXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5fZmluZFRyaWFuZ2xlID0gZnVuY3Rpb24gKHBvc2l0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fY2FjaGVUcmlhbmdsZSkge1xyXG4gICAgICAgIHZhciByZXMgPSBkZWxhdW5heS5jb250YWlucyh0aGlzLl9jYWNoZVRyaWFuZ2xlLnZlcnRpY2VzLCBwb3NpdGlvbi5hcnJheSk7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuX2NhY2hlVHJpYW5nbGUsIHJlc1swXSwgcmVzWzFdXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RyaWFuZ2xlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciB0cmkgPSB0aGlzLl90cmlhbmdsZXNbaV07XHJcbiAgICAgICAgdmFyIHJlcyA9IGRlbGF1bmF5LmNvbnRhaW5zKHRyaS52ZXJ0aWNlcywgdGhpcy5wb3NpdGlvbi5hcnJheSk7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWNoZVRyaWFuZ2xlID0gdHJpO1xyXG4gICAgICAgICAgICByZXR1cm4gW3RyaSwgcmVzWzBdLCByZXNbMV1dO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJsZW5kMkRDbGlwOyIsIlxyXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTMsIEJyYW5kb24gSm9uZXMsIENvbGluIE1hY0tlbnppZSBJVi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuXHJcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXHJcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcclxuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcclxuICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxyXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxyXG4gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxyXG4gICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXHJcblxyXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcclxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcclxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxyXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxyXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcclxuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xyXG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cclxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcclxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcclxuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovXHJcblxyXG5pbXBvcnQgeyBHTE1BVF9SQU5ET00sIEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcblxyXG4vKipcclxuICogQGNsYXNzIDMgRGltZW5zaW9uYWwgVmVjdG9yXHJcbiAqIEBuYW1lIHZlYzNcclxuICovXHJcblxyXG52YXIgdmVjMyA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5IHZlYzNcclxuICpcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cclxudmVjMy5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgzKTtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cclxudmVjMy5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgzKTtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjM30gYSBuZXcgM0QgdmVjdG9yXHJcbiAqL1xyXG52ZWMzLmZyb21WYWx1ZXMgPSBmdW5jdGlvbih4LCB5LCB6KSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMyk7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIG91dFsyXSA9IHo7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWMzIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBzb3VyY2UgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzIHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHopIHtcclxuICAgIG91dFswXSA9IHg7XHJcbiAgICBvdXRbMV0gPSB5O1xyXG4gICAgb3V0WzJdID0gejtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXSArIGJbMl07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuc3VidHJhY3QgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuc3ViID0gdmVjMy5zdWJ0cmFjdDtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5tdWx0aXBseSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAqIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdICogYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gKiBiWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5tdWwgPSB2ZWMzLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmRpdmlkZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAvIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gLyBiWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuZGl2ID0gdmVjMy5kaXZpZGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1heGltdW0gb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gTWF0aC5tYXgoYVswXSwgYlswXSk7XHJcbiAgICBvdXRbMV0gPSBNYXRoLm1heChhWzFdLCBiWzFdKTtcclxuICAgIG91dFsyXSA9IE1hdGgubWF4KGFbMl0sIGJbMl0pO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMzIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYjtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiO1xyXG4gICAgb3V0WzJdID0gYVsyXSAqIGI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzMncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIG91dFswXSA9IGFbMF0gKyAoYlswXSAqIHNjYWxlKTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyAoYlsxXSAqIHNjYWxlKTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyAoYlsyXSAqIHNjYWxlKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXHJcbnZlYzMuZGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSArIHoqeik7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuZGlzdCA9IHZlYzMuZGlzdGFuY2U7XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMzLnNxdWFyZWREaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXHJcbiAgICAgICAgeSA9IGJbMV0gLSBhWzFdLFxyXG4gICAgICAgIHogPSBiWzJdIC0gYVsyXTtcclxuICAgIHJldHVybiB4KnggKyB5KnkgKyB6Kno7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWREaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMzLnNxckRpc3QgPSB2ZWMzLnNxdWFyZWREaXN0YW5jZTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKi9cclxudmVjMy5sZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdLFxyXG4gICAgICAgIHogPSBhWzJdO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCh4KnggKyB5KnkgKyB6KnopO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5sZW4gPSB2ZWMzLmxlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKi9cclxudmVjMy5zcXVhcmVkTGVuZ3RoID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHZhciB4ID0gYVswXSxcclxuICAgICAgICB5ID0gYVsxXSxcclxuICAgICAgICB6ID0gYVsyXTtcclxuICAgIHJldHVybiB4KnggKyB5KnkgKyB6Kno7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5zcXJMZW4gPSB2ZWMzLnNxdWFyZWRMZW5ndGg7XHJcblxyXG4vKipcclxuICogTmVnYXRlcyB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBuZWdhdGVcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5uZWdhdGUgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IC1hWzBdO1xyXG4gICAgb3V0WzFdID0gLWFbMV07XHJcbiAgICBvdXRbMl0gPSAtYVsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5pbnZlcnNlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcclxuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xyXG4gIG91dFsyXSA9IDEuMCAvIGFbMl07XHJcbiAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl07XHJcbiAgICB2YXIgbGVuID0geCp4ICsgeSp5ICsgeip6O1xyXG4gICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgICAvL1RPRE86IGV2YWx1YXRlIHVzZSBvZiBnbG1faW52c3FydCBoZXJlP1xyXG4gICAgICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcclxuICAgICAgICBvdXRbMF0gPSBhWzBdICogbGVuO1xyXG4gICAgICAgIG91dFsxXSA9IGFbMV0gKiBsZW47XHJcbiAgICAgICAgb3V0WzJdID0gYVsyXSAqIGxlbjtcclxuICAgIH1lbHNle1xyXG4gICAgICAgIG91dFswXSA9IDA7XHJcbiAgICAgICAgb3V0WzFdID0gMDtcclxuICAgICAgICBvdXRbMl0gPSAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXHJcbnZlYzMuZG90ID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdICsgYVsyXSAqIGJbMl07XHJcbn07XHJcblxyXG4vKipcclxuICogQ29tcHV0ZXMgdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmNyb3NzID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLCBheSA9IGFbMV0sIGF6ID0gYVsyXSxcclxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdO1xyXG5cclxuICAgIG91dFswXSA9IGF5ICogYnogLSBheiAqIGJ5O1xyXG4gICAgb3V0WzFdID0gYXogKiBieCAtIGF4ICogYno7XHJcbiAgICBvdXRbMl0gPSBheCAqIGJ5IC0gYXkgKiBieDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmxlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLFxyXG4gICAgICAgIGF5ID0gYVsxXSxcclxuICAgICAgICBheiA9IGFbMl07XHJcbiAgICBvdXRbMF0gPSBheCArIHQgKiAoYlswXSAtIGF4KTtcclxuICAgIG91dFsxXSA9IGF5ICsgdCAqIChiWzFdIC0gYXkpO1xyXG4gICAgb3V0WzJdID0gYXogKyB0ICogKGJbMl0gLSBheik7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMucmFuZG9tID0gZnVuY3Rpb24gKG91dCwgc2NhbGUpIHtcclxuICAgIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xyXG5cclxuICAgIHZhciByID0gR0xNQVRfUkFORE9NKCkgKiAyLjAgKiBNYXRoLlBJO1xyXG4gICAgdmFyIHogPSAoR0xNQVRfUkFORE9NKCkgKiAyLjApIC0gMS4wO1xyXG4gICAgdmFyIHpTY2FsZSA9IE1hdGguc3FydCgxLjAteip6KSAqIHNjYWxlO1xyXG5cclxuICAgIG91dFswXSA9IE1hdGguY29zKHIpICogelNjYWxlO1xyXG4gICAgb3V0WzFdID0gTWF0aC5zaW4ocikgKiB6U2NhbGU7XHJcbiAgICBvdXRbMl0gPSB6ICogc2NhbGU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDQuXHJcbiAqIDR0aCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XTtcclxuICAgIHcgPSB3IHx8IDEuMDtcclxuICAgIG91dFswXSA9IChtWzBdICogeCArIG1bNF0gKiB5ICsgbVs4XSAqIHogKyBtWzEyXSkgLyB3O1xyXG4gICAgb3V0WzFdID0gKG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzldICogeiArIG1bMTNdKSAvIHc7XHJcbiAgICBvdXRbMl0gPSAobVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdKSAvIHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gdGhlIDN4MyBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy50cmFuc2Zvcm1NYXQzID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sIHkgPSBhWzFdLCB6ID0gYVsyXTtcclxuICAgIG91dFswXSA9IHggKiBtWzBdICsgeSAqIG1bM10gKyB6ICogbVs2XTtcclxuICAgIG91dFsxXSA9IHggKiBtWzFdICsgeSAqIG1bNF0gKyB6ICogbVs3XTtcclxuICAgIG91dFsyXSA9IHggKiBtWzJdICsgeSAqIG1bNV0gKyB6ICogbVs4XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMyB3aXRoIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy50cmFuc2Zvcm1RdWF0ID0gZnVuY3Rpb24ob3V0LCBhLCBxKSB7XHJcbiAgICAvLyBiZW5jaG1hcmtzOiBodHRwOi8vanNwZXJmLmNvbS9xdWF0ZXJuaW9uLXRyYW5zZm9ybS12ZWMzLWltcGxlbWVudGF0aW9uc1xyXG5cclxuICAgIHZhciB4ID0gYVswXSwgeSA9IGFbMV0sIHogPSBhWzJdLFxyXG4gICAgICAgIHF4ID0gcVswXSwgcXkgPSBxWzFdLCBxeiA9IHFbMl0sIHF3ID0gcVszXSxcclxuXHJcbiAgICAgICAgLy8gY2FsY3VsYXRlIHF1YXQgKiB2ZWNcclxuICAgICAgICBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeSxcclxuICAgICAgICBpeSA9IHF3ICogeSArIHF6ICogeCAtIHF4ICogeixcclxuICAgICAgICBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeCxcclxuICAgICAgICBpdyA9IC1xeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7XHJcblxyXG4gICAgLy8gY2FsY3VsYXRlIHJlc3VsdCAqIGludmVyc2UgcXVhdFxyXG4gICAgb3V0WzBdID0gaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeTtcclxuICAgIG91dFsxXSA9IGl5ICogcXcgKyBpdyAqIC1xeSArIGl6ICogLXF4IC0gaXggKiAtcXo7XHJcbiAgICBvdXRbMl0gPSBpeiAqIHF3ICsgaXcgKiAtcXogKyBpeCAqIC1xeSAtIGl5ICogLXF4O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGUgYSAzRCB2ZWN0b3IgYXJvdW5kIHRoZSB4LWF4aXNcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgdmVjMyBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLnJvdGF0ZVggPSBmdW5jdGlvbihvdXQsIGEsIGIsIGMpe1xyXG4gICB2YXIgcCA9IFtdLCByPVtdO1xyXG4gICAgICAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXHJcbiAgICAgIHBbMF0gPSBhWzBdIC0gYlswXTtcclxuICAgICAgcFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcFsyXSA9IGFbMl0gLSBiWzJdO1xyXG5cclxuICAgICAgLy9wZXJmb3JtIHJvdGF0aW9uXHJcbiAgICAgIHJbMF0gPSBwWzBdO1xyXG4gICAgICByWzFdID0gcFsxXSpNYXRoLmNvcyhjKSAtIHBbMl0qTWF0aC5zaW4oYyk7XHJcbiAgICAgIHJbMl0gPSBwWzFdKk1hdGguc2luKGMpICsgcFsyXSpNYXRoLmNvcyhjKTtcclxuXHJcbiAgICAgIC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cclxuICAgICAgb3V0WzBdID0gclswXSArIGJbMF07XHJcbiAgICAgIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xyXG4gICAgICBvdXRbMl0gPSByWzJdICsgYlsyXTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHktYXhpc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCBUaGUgcmVjZWl2aW5nIHZlYzNcclxuICogQHBhcmFtIHt2ZWMzfSBhIFRoZSB2ZWMzIHBvaW50IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IGMgVGhlIGFuZ2xlIG9mIHJvdGF0aW9uXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMucm90YXRlWSA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgYyl7XHJcbiAgICB2YXIgcCA9IFtdLCByPVtdO1xyXG4gICAgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxyXG4gICAgcFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgcFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcFsyXSA9IGFbMl0gLSBiWzJdO1xyXG5cclxuICAgIC8vcGVyZm9ybSByb3RhdGlvblxyXG4gICAgclswXSA9IHBbMl0qTWF0aC5zaW4oYykgKyBwWzBdKk1hdGguY29zKGMpO1xyXG4gICAgclsxXSA9IHBbMV07XHJcbiAgICByWzJdID0gcFsyXSpNYXRoLmNvcyhjKSAtIHBbMF0qTWF0aC5zaW4oYyk7XHJcblxyXG4gICAgLy90cmFuc2xhdGUgdG8gY29ycmVjdCBwb3NpdGlvblxyXG4gICAgb3V0WzBdID0gclswXSArIGJbMF07XHJcbiAgICBvdXRbMV0gPSByWzFdICsgYlsxXTtcclxuICAgIG91dFsyXSA9IHJbMl0gKyBiWzJdO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlIGEgM0QgdmVjdG9yIGFyb3VuZCB0aGUgei1heGlzXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IFRoZSByZWNlaXZpbmcgdmVjM1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7dmVjM30gYiBUaGUgb3JpZ2luIG9mIHRoZSByb3RhdGlvblxyXG4gKiBAcGFyYW0ge051bWJlcn0gYyBUaGUgYW5nbGUgb2Ygcm90YXRpb25cclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5yb3RhdGVaID0gZnVuY3Rpb24ob3V0LCBhLCBiLCBjKXtcclxuICAgIHZhciBwID0gW10sIHI9W107XHJcbiAgICAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXHJcbiAgICBwWzBdID0gYVswXSAtIGJbMF07XHJcbiAgICBwWzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBwWzJdID0gYVsyXSAtIGJbMl07XHJcblxyXG4gICAgLy9wZXJmb3JtIHJvdGF0aW9uXHJcbiAgICByWzBdID0gcFswXSpNYXRoLmNvcyhjKSAtIHBbMV0qTWF0aC5zaW4oYyk7XHJcbiAgICByWzFdID0gcFswXSpNYXRoLnNpbihjKSArIHBbMV0qTWF0aC5jb3MoYyk7XHJcbiAgICByWzJdID0gcFsyXTtcclxuXHJcbiAgICAvL3RyYW5zbGF0ZSB0byBjb3JyZWN0IHBvc2l0aW9uXHJcbiAgICBvdXRbMF0gPSByWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xyXG4gICAgb3V0WzJdID0gclsyXSArIGJbMl07XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQZXJmb3JtIHNvbWUgb3BlcmF0aW9uIG92ZXIgYW4gYXJyYXkgb2YgdmVjM3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGEgdGhlIGFycmF5IG9mIHZlY3RvcnMgdG8gaXRlcmF0ZSBvdmVyXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdHJpZGUgTnVtYmVyIG9mIGVsZW1lbnRzIGJldHdlZW4gdGhlIHN0YXJ0IG9mIGVhY2ggdmVjMy4gSWYgMCBhc3N1bWVzIHRpZ2h0bHkgcGFja2VkXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNraXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50IE51bWJlciBvZiB2ZWMzcyB0byBpdGVyYXRlIG92ZXIuIElmIDAgaXRlcmF0ZXMgb3ZlciBlbnRpcmUgYXJyYXlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gRnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCB2ZWN0b3IgaW4gdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXJnXSBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gZm5cclxuICogQHJldHVybnMge0FycmF5fSBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5mb3JFYWNoID0gKGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIHZlYyA9IHZlYzMuY3JlYXRlKCk7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGEsIHN0cmlkZSwgb2Zmc2V0LCBjb3VudCwgZm4sIGFyZykge1xyXG4gICAgICAgIHZhciBpLCBsO1xyXG4gICAgICAgIGlmKCFzdHJpZGUpIHtcclxuICAgICAgICAgICAgc3RyaWRlID0gMztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCFvZmZzZXQpIHtcclxuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGNvdW50KSB7XHJcbiAgICAgICAgICAgIGwgPSBNYXRoLm1pbigoY291bnQgKiBzdHJpZGUpICsgb2Zmc2V0LCBhLmxlbmd0aCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbCA9IGEubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKGkgPSBvZmZzZXQ7IGkgPCBsOyBpICs9IHN0cmlkZSkge1xyXG4gICAgICAgICAgICB2ZWNbMF0gPSBhW2ldOyB2ZWNbMV0gPSBhW2krMV07IHZlY1syXSA9IGFbaSsyXTtcclxuICAgICAgICAgICAgZm4odmVjLCB2ZWMsIGFyZyk7XHJcbiAgICAgICAgICAgIGFbaV0gPSB2ZWNbMF07IGFbaSsxXSA9IHZlY1sxXTsgYVtpKzJdID0gdmVjWzJdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgYW5nbGUgYmV0d2VlbiB0d28gM0QgdmVjdG9yc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYW5nbGUgaW4gcmFkaWFuc1xyXG4gKi9cclxudmVjMy5hbmdsZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuXHJcbiAgICB2YXIgdGVtcEEgPSB2ZWMzLmZyb21WYWx1ZXMoYVswXSwgYVsxXSwgYVsyXSk7XHJcbiAgICB2YXIgdGVtcEIgPSB2ZWMzLmZyb21WYWx1ZXMoYlswXSwgYlsxXSwgYlsyXSk7XHJcblxyXG4gICAgdmVjMy5ub3JtYWxpemUodGVtcEEsIHRlbXBBKTtcclxuICAgIHZlYzMubm9ybWFsaXplKHRlbXBCLCB0ZW1wQik7XHJcblxyXG4gICAgdmFyIGNvc2luZSA9IHZlYzMuZG90KHRlbXBBLCB0ZW1wQik7XHJcblxyXG4gICAgaWYoY29zaW5lID4gMS4wKXtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguYWNvcyhjb3NpbmUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjMzsiLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfUkFORE9NLCBHTE1BVF9BUlJBWV9UWVBFIH0gZnJvbSAnLi9jb21tb24nO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyA0IERpbWVuc2lvbmFsIFZlY3RvclxyXG4gKiBAbmFtZSB2ZWM0XHJcbiAqL1xyXG5cclxuZXhwb3J0IHZhciB2ZWM0ID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjNFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjNH0gYSBuZXcgNEQgdmVjdG9yXHJcbiAqL1xyXG52ZWM0LmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xyXG4gICAgb3V0WzBdID0gMDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWM0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cclxudmVjNC5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIG91dFszXSA9IGFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjNCBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cclxudmVjNC5mcm9tVmFsdWVzID0gZnVuY3Rpb24oeCwgeSwgeiwgdykge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xyXG4gICAgb3V0WzBdID0geDtcclxuICAgIG91dFsxXSA9IHk7XHJcbiAgICBvdXRbMl0gPSB6O1xyXG4gICAgb3V0WzNdID0gdztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHosIHcpIHtcclxuICAgIG91dFswXSA9IHg7XHJcbiAgICBvdXRbMV0gPSB5O1xyXG4gICAgb3V0WzJdID0gejtcclxuICAgIG91dFszXSA9IHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0LmFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSArIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXSArIGJbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQuc3VidHJhY3QgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcclxuICAgIG91dFszXSA9IGFbM10gLSBiWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjNC5zdWIgPSB2ZWM0LnN1YnRyYWN0O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0Lm11bHRpcGx5ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXSAqIGJbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdICogYlszXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQubXVsID0gdmVjNC5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBEaXZpZGVzIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5kaXZpZGUgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLyBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAvIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC8gYlsyXTtcclxuICAgIG91dFszXSA9IGFbM10gLyBiWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQuZGl2ID0gdmVjNC5kaXZpZGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XHJcbiAgICBvdXRbM10gPSBNYXRoLm1pbihhWzNdLCBiWzNdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5tYXgoYVsyXSwgYlsyXSk7XHJcbiAgICBvdXRbM10gPSBNYXRoLm1heChhWzNdLCBiWzNdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2NhbGVzIGEgdmVjNCBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAqIGI7XHJcbiAgICBvdXRbMV0gPSBhWzFdICogYjtcclxuICAgIG91dFsyXSA9IGFbMl0gKiBiO1xyXG4gICAgb3V0WzNdID0gYVszXSAqIGI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIG91dFswXSA9IGFbMF0gKyAoYlswXSAqIHNjYWxlKTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyAoYlsxXSAqIHNjYWxlKTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyAoYlsyXSAqIHNjYWxlKTtcclxuICAgIG91dFszXSA9IGFbM10gKyAoYlszXSAqIHNjYWxlKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXHJcbnZlYzQuZGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl0sXHJcbiAgICAgICAgdyA9IGJbM10gLSBhWzNdO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCh4KnggKyB5KnkgKyB6KnogKyB3KncpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5kaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmRpc3QgPSB2ZWM0LmRpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cclxudmVjNC5zcXVhcmVkRGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl0sXHJcbiAgICAgICAgdyA9IGJbM10gLSBhWzNdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeSArIHoqeiArIHcqdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQuc3FyRGlzdCA9IHZlYzQuc3F1YXJlZERpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWM0Lmxlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IGFbM107XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSArIHoqeiArIHcqdyk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0Lmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmxlbiA9IHZlYzQubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWM0LnNxdWFyZWRMZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdLFxyXG4gICAgICAgIHogPSBhWzJdLFxyXG4gICAgICAgIHcgPSBhWzNdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeSArIHoqeiArIHcqdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LnNxckxlbiA9IHZlYzQuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0Lm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gLWFbMF07XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIG91dFsyXSA9IC1hWzJdO1xyXG4gICAgb3V0WzNdID0gLWFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGludmVyc2Ugb2YgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gaW52ZXJ0XHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQuaW52ZXJzZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gIG91dFswXSA9IDEuMCAvIGFbMF07XHJcbiAgb3V0WzFdID0gMS4wIC8gYVsxXTtcclxuICBvdXRbMl0gPSAxLjAgLyBhWzJdO1xyXG4gIG91dFszXSA9IDEuMCAvIGFbM107XHJcbiAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IGFbM107XHJcbiAgICB2YXIgbGVuID0geCp4ICsgeSp5ICsgeip6ICsgdyp3O1xyXG4gICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgICAgb3V0WzBdID0gYVswXSAqIGxlbjtcclxuICAgICAgICBvdXRbMV0gPSBhWzFdICogbGVuO1xyXG4gICAgICAgIG91dFsyXSA9IGFbMl0gKiBsZW47XHJcbiAgICAgICAgb3V0WzNdID0gYVszXSAqIGxlbjtcclxuICAgIH1cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqL1xyXG52ZWM0LmRvdCA9IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICByZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdICsgYVszXSAqIGJbM107XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0LmxlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLFxyXG4gICAgICAgIGF5ID0gYVsxXSxcclxuICAgICAgICBheiA9IGFbMl0sXHJcbiAgICAgICAgYXcgPSBhWzNdO1xyXG4gICAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XHJcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcclxuICAgIG91dFsyXSA9IGF6ICsgdCAqIChiWzJdIC0gYXopO1xyXG4gICAgb3V0WzNdID0gYXcgKyB0ICogKGJbM10gLSBhdyk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQucmFuZG9tID0gZnVuY3Rpb24gKG91dCwgc2NhbGUpIHtcclxuICAgIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xyXG5cclxuICAgIC8vVE9ETzogVGhpcyBpcyBhIHByZXR0eSBhd2Z1bCB3YXkgb2YgZG9pbmcgdGhpcy4gRmluZCBzb21ldGhpbmcgYmV0dGVyLlxyXG4gICAgb3V0WzBdID0gR0xNQVRfUkFORE9NKCk7XHJcbiAgICBvdXRbMV0gPSBHTE1BVF9SQU5ET00oKTtcclxuICAgIG91dFsyXSA9IEdMTUFUX1JBTkRPTSgpO1xyXG4gICAgb3V0WzNdID0gR0xNQVRfUkFORE9NKCk7XHJcbiAgICB2ZWM0Lm5vcm1hbGl6ZShvdXQsIG91dCk7XHJcbiAgICB2ZWM0LnNjYWxlKG91dCwgb3V0LCBzY2FsZSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIG1hdDQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sIHcgPSBhWzNdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzRdICogeSArIG1bOF0gKiB6ICsgbVsxMl0gKiB3O1xyXG4gICAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzVdICogeSArIG1bOV0gKiB6ICsgbVsxM10gKiB3O1xyXG4gICAgb3V0WzJdID0gbVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdICogdztcclxuICAgIG91dFszXSA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XSAqIHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBxdWF0ZXJuaW9uIHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQudHJhbnNmb3JtUXVhdCA9IGZ1bmN0aW9uKG91dCwgYSwgcSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sXHJcbiAgICAgICAgcXggPSBxWzBdLCBxeSA9IHFbMV0sIHF6ID0gcVsyXSwgcXcgPSBxWzNdLFxyXG5cclxuICAgICAgICAvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY1xyXG4gICAgICAgIGl4ID0gcXcgKiB4ICsgcXkgKiB6IC0gcXogKiB5LFxyXG4gICAgICAgIGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6LFxyXG4gICAgICAgIGl6ID0gcXcgKiB6ICsgcXggKiB5IC0gcXkgKiB4LFxyXG4gICAgICAgIGl3ID0gLXF4ICogeCAtIHF5ICogeSAtIHF6ICogejtcclxuXHJcbiAgICAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XHJcbiAgICBvdXRbMF0gPSBpeCAqIHF3ICsgaXcgKiAtcXggKyBpeSAqIC1xeiAtIGl6ICogLXF5O1xyXG4gICAgb3V0WzFdID0gaXkgKiBxdyArIGl3ICogLXF5ICsgaXogKiAtcXggLSBpeCAqIC1xejtcclxuICAgIG91dFsyXSA9IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXg7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWM0cy5cclxuICpcclxuICogQHBhcmFtIHtBcnJheX0gYSB0aGUgYXJyYXkgb2YgdmVjdG9ycyB0byBpdGVyYXRlIG92ZXJcclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWM0LiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcclxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnQgTnVtYmVyIG9mIHZlYzRzIHRvIGl0ZXJhdGUgb3Zlci4gSWYgMCBpdGVyYXRlcyBvdmVyIGVudGlyZSBhcnJheVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxyXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmZvckVhY2ggPSAoZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgdmVjID0gdmVjNC5jcmVhdGUoKTtcclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24oYSwgc3RyaWRlLCBvZmZzZXQsIGNvdW50LCBmbiwgYXJnKSB7XHJcbiAgICAgICAgdmFyIGksIGw7XHJcbiAgICAgICAgaWYoIXN0cmlkZSkge1xyXG4gICAgICAgICAgICBzdHJpZGUgPSA0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIW9mZnNldCkge1xyXG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoY291bnQpIHtcclxuICAgICAgICAgICAgbCA9IE1hdGgubWluKChjb3VudCAqIHN0cmlkZSkgKyBvZmZzZXQsIGEubGVuZ3RoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsID0gYS5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7XHJcbiAgICAgICAgICAgIHZlY1swXSA9IGFbaV07IHZlY1sxXSA9IGFbaSsxXTsgdmVjWzJdID0gYVtpKzJdOyB2ZWNbM10gPSBhW2krM107XHJcbiAgICAgICAgICAgIGZuKHZlYywgdmVjLCBhcmcpO1xyXG4gICAgICAgICAgICBhW2ldID0gdmVjWzBdOyBhW2krMV0gPSB2ZWNbMV07IGFbaSsyXSA9IHZlY1syXTsgYVtpKzNdID0gdmVjWzNdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjNDsiLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgM3gzIE1hdHJpeFxyXG4gKiBAbmFtZSBtYXQzXHJcbiAqL1xyXG5cclxudmFyIG1hdDMgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDNcclxuICpcclxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcclxuICovXHJcbm1hdDMuY3JlYXRlID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoOSk7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMTtcclxuICAgIG91dFs1XSA9IDA7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcGllcyB0aGUgdXBwZXItbGVmdCAzeDMgdmFsdWVzIGludG8gdGhlIGdpdmVuIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgM3gzIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgICB0aGUgc291cmNlIDR4NCBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5mcm9tTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVs0XTtcclxuICAgIG91dFs0XSA9IGFbNV07XHJcbiAgICBvdXRbNV0gPSBhWzZdO1xyXG4gICAgb3V0WzZdID0gYVs4XTtcclxuICAgIG91dFs3XSA9IGFbOV07XHJcbiAgICBvdXRbOF0gPSBhWzEwXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcclxuICovXHJcbm1hdDMuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoOSk7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQzIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICBvdXRbNV0gPSBhWzVdO1xyXG4gICAgb3V0WzZdID0gYVs2XTtcclxuICAgIG91dFs3XSA9IGFbN107XHJcbiAgICBvdXRbOF0gPSBhWzhdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgYSBtYXQzIHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDE7XHJcbiAgICBvdXRbNV0gPSAwO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXHJcbiAgICBpZiAob3V0ID09PSBhKSB7XHJcbiAgICAgICAgdmFyIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGExMiA9IGFbNV07XHJcbiAgICAgICAgb3V0WzFdID0gYVszXTtcclxuICAgICAgICBvdXRbMl0gPSBhWzZdO1xyXG4gICAgICAgIG91dFszXSA9IGEwMTtcclxuICAgICAgICBvdXRbNV0gPSBhWzddO1xyXG4gICAgICAgIG91dFs2XSA9IGEwMjtcclxuICAgICAgICBvdXRbN10gPSBhMTI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG91dFswXSA9IGFbMF07XHJcbiAgICAgICAgb3V0WzFdID0gYVszXTtcclxuICAgICAgICBvdXRbMl0gPSBhWzZdO1xyXG4gICAgICAgIG91dFszXSA9IGFbMV07XHJcbiAgICAgICAgb3V0WzRdID0gYVs0XTtcclxuICAgICAgICBvdXRbNV0gPSBhWzddO1xyXG4gICAgICAgIG91dFs2XSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzddID0gYVs1XTtcclxuICAgICAgICBvdXRbOF0gPSBhWzhdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF0sXHJcblxyXG4gICAgICAgIGIwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMSxcclxuICAgICAgICBiMTEgPSAtYTIyICogYTEwICsgYTEyICogYTIwLFxyXG4gICAgICAgIGIyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMCxcclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxyXG4gICAgICAgIGRldCA9IGEwMCAqIGIwMSArIGEwMSAqIGIxMSArIGEwMiAqIGIyMTtcclxuXHJcbiAgICBpZiAoIWRldCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuICAgIG91dFswXSA9IGIwMSAqIGRldDtcclxuICAgIG91dFsxXSA9ICgtYTIyICogYTAxICsgYTAyICogYTIxKSAqIGRldDtcclxuICAgIG91dFsyXSA9IChhMTIgKiBhMDEgLSBhMDIgKiBhMTEpICogZGV0O1xyXG4gICAgb3V0WzNdID0gYjExICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGEyMiAqIGEwMCAtIGEwMiAqIGEyMCkgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoLWExMiAqIGEwMCArIGEwMiAqIGExMCkgKiBkZXQ7XHJcbiAgICBvdXRbNl0gPSBiMjEgKiBkZXQ7XHJcbiAgICBvdXRbN10gPSAoLWEyMSAqIGEwMCArIGEwMSAqIGEyMCkgKiBkZXQ7XHJcbiAgICBvdXRbOF0gPSAoYTExICogYTAwIC0gYTAxICogYTEwKSAqIGRldDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYWRqdWdhdGUgb2YgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xyXG5tYXQzLmFkam9pbnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XTtcclxuXHJcbiAgICBvdXRbMF0gPSAoYTExICogYTIyIC0gYTEyICogYTIxKTtcclxuICAgIG91dFsxXSA9IChhMDIgKiBhMjEgLSBhMDEgKiBhMjIpO1xyXG4gICAgb3V0WzJdID0gKGEwMSAqIGExMiAtIGEwMiAqIGExMSk7XHJcbiAgICBvdXRbM10gPSAoYTEyICogYTIwIC0gYTEwICogYTIyKTtcclxuICAgIG91dFs0XSA9IChhMDAgKiBhMjIgLSBhMDIgKiBhMjApO1xyXG4gICAgb3V0WzVdID0gKGEwMiAqIGExMCAtIGEwMCAqIGExMik7XHJcbiAgICBvdXRbNl0gPSAoYTEwICogYTIxIC0gYTExICogYTIwKTtcclxuICAgIG91dFs3XSA9IChhMDEgKiBhMjAgLSBhMDAgKiBhMjEpO1xyXG4gICAgb3V0WzhdID0gKGEwMCAqIGExMSAtIGEwMSAqIGExMCk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cclxubWF0My5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF07XHJcblxyXG4gICAgcmV0dXJuIGEwMCAqIChhMjIgKiBhMTEgLSBhMTIgKiBhMjEpICsgYTAxICogKC1hMjIgKiBhMTAgKyBhMTIgKiBhMjApICsgYTAyICogKGEyMSAqIGExMCAtIGExMSAqIGEyMCk7XHJcbn07XHJcblxyXG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0MydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMubXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF0sXHJcblxyXG4gICAgICAgIGIwMCA9IGJbMF0sIGIwMSA9IGJbMV0sIGIwMiA9IGJbMl0sXHJcbiAgICAgICAgYjEwID0gYlszXSwgYjExID0gYls0XSwgYjEyID0gYls1XSxcclxuICAgICAgICBiMjAgPSBiWzZdLCBiMjEgPSBiWzddLCBiMjIgPSBiWzhdO1xyXG5cclxuICAgIG91dFswXSA9IGIwMCAqIGEwMCArIGIwMSAqIGExMCArIGIwMiAqIGEyMDtcclxuICAgIG91dFsxXSA9IGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMTtcclxuICAgIG91dFsyXSA9IGIwMCAqIGEwMiArIGIwMSAqIGExMiArIGIwMiAqIGEyMjtcclxuXHJcbiAgICBvdXRbM10gPSBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjA7XHJcbiAgICBvdXRbNF0gPSBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjE7XHJcbiAgICBvdXRbNV0gPSBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjI7XHJcblxyXG4gICAgb3V0WzZdID0gYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwO1xyXG4gICAgb3V0WzddID0gYjIwICogYTAxICsgYjIxICogYTExICsgYjIyICogYTIxO1xyXG4gICAgb3V0WzhdID0gYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDMubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxubWF0My5tdWwgPSBtYXQzLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zbGF0ZSBhIG1hdDMgYnkgdGhlIGdpdmVuIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My50cmFuc2xhdGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcclxuICAgICAgICB4ID0gdlswXSwgeSA9IHZbMV07XHJcblxyXG4gICAgb3V0WzBdID0gYTAwO1xyXG4gICAgb3V0WzFdID0gYTAxO1xyXG4gICAgb3V0WzJdID0gYTAyO1xyXG5cclxuICAgIG91dFszXSA9IGExMDtcclxuICAgIG91dFs0XSA9IGExMTtcclxuICAgIG91dFs1XSA9IGExMjtcclxuXHJcbiAgICBvdXRbNl0gPSB4ICogYTAwICsgeSAqIGExMCArIGEyMDtcclxuICAgIG91dFs3XSA9IHggKiBhMDEgKyB5ICogYTExICsgYTIxO1xyXG4gICAgb3V0WzhdID0geCAqIGEwMiArIHkgKiBhMTIgKyBhMjI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXQzIGJ5IHRoZSBnaXZlbiBhbmdsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5yb3RhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcclxuXHJcbiAgICAgICAgcyA9IE1hdGguc2luKHJhZCksXHJcbiAgICAgICAgYyA9IE1hdGguY29zKHJhZCk7XHJcblxyXG4gICAgb3V0WzBdID0gYyAqIGEwMCArIHMgKiBhMTA7XHJcbiAgICBvdXRbMV0gPSBjICogYTAxICsgcyAqIGExMTtcclxuICAgIG91dFsyXSA9IGMgKiBhMDIgKyBzICogYTEyO1xyXG5cclxuICAgIG91dFszXSA9IGMgKiBhMTAgLSBzICogYTAwO1xyXG4gICAgb3V0WzRdID0gYyAqIGExMSAtIHMgKiBhMDE7XHJcbiAgICBvdXRbNV0gPSBjICogYTEyIC0gcyAqIGEwMjtcclxuXHJcbiAgICBvdXRbNl0gPSBhMjA7XHJcbiAgICBvdXRbN10gPSBhMjE7XHJcbiAgICBvdXRbOF0gPSBhMjI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MyBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKiovXHJcbm1hdDMuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciB4ID0gdlswXSwgeSA9IHZbMV07XHJcblxyXG4gICAgb3V0WzBdID0geCAqIGFbMF07XHJcbiAgICBvdXRbMV0gPSB4ICogYVsxXTtcclxuICAgIG91dFsyXSA9IHggKiBhWzJdO1xyXG5cclxuICAgIG91dFszXSA9IHkgKiBhWzNdO1xyXG4gICAgb3V0WzRdID0geSAqIGFbNF07XHJcbiAgICBvdXRbNV0gPSB5ICogYVs1XTtcclxuXHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcGllcyB0aGUgdmFsdWVzIGZyb20gYSBtYXQyZCBpbnRvIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gY29weVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqKi9cclxubWF0My5mcm9tTWF0MmQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gMDtcclxuXHJcbiAgICBvdXRbM10gPSBhWzJdO1xyXG4gICAgb3V0WzRdID0gYVszXTtcclxuICAgIG91dFs1XSA9IDA7XHJcblxyXG4gICAgb3V0WzZdID0gYVs0XTtcclxuICAgIG91dFs3XSA9IGFbNV07XHJcbiAgICBvdXRbOF0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4qIENhbGN1bGF0ZXMgYSAzeDMgbWF0cml4IGZyb20gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuKlxyXG4qIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuKiBAcGFyYW0ge3F1YXR9IHEgUXVhdGVybmlvbiB0byBjcmVhdGUgbWF0cml4IGZyb21cclxuKlxyXG4qIEByZXR1cm5zIHttYXQzfSBvdXRcclxuKi9cclxubWF0My5mcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEpIHtcclxuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXSxcclxuICAgICAgICB4MiA9IHggKyB4LFxyXG4gICAgICAgIHkyID0geSArIHksXHJcbiAgICAgICAgejIgPSB6ICsgeixcclxuXHJcbiAgICAgICAgeHggPSB4ICogeDIsXHJcbiAgICAgICAgeXggPSB5ICogeDIsXHJcbiAgICAgICAgeXkgPSB5ICogeTIsXHJcbiAgICAgICAgenggPSB6ICogeDIsXHJcbiAgICAgICAgenkgPSB6ICogeTIsXHJcbiAgICAgICAgenogPSB6ICogejIsXHJcbiAgICAgICAgd3ggPSB3ICogeDIsXHJcbiAgICAgICAgd3kgPSB3ICogeTIsXHJcbiAgICAgICAgd3ogPSB3ICogejI7XHJcblxyXG4gICAgb3V0WzBdID0gMSAtIHl5IC0geno7XHJcbiAgICBvdXRbM10gPSB5eCAtIHd6O1xyXG4gICAgb3V0WzZdID0genggKyB3eTtcclxuXHJcbiAgICBvdXRbMV0gPSB5eCArIHd6O1xyXG4gICAgb3V0WzRdID0gMSAtIHh4IC0geno7XHJcbiAgICBvdXRbN10gPSB6eSAtIHd4O1xyXG5cclxuICAgIG91dFsyXSA9IHp4IC0gd3k7XHJcbiAgICBvdXRbNV0gPSB6eSArIHd4O1xyXG4gICAgb3V0WzhdID0gMSAtIHh4IC0geXk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4qIENhbGN1bGF0ZXMgYSAzeDMgbm9ybWFsIG1hdHJpeCAodHJhbnNwb3NlIGludmVyc2UpIGZyb20gdGhlIDR4NCBtYXRyaXhcclxuKlxyXG4qIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuKiBAcGFyYW0ge21hdDR9IGEgTWF0NCB0byBkZXJpdmUgdGhlIG5vcm1hbCBtYXRyaXggZnJvbVxyXG4qXHJcbiogQHJldHVybnMge21hdDN9IG91dFxyXG4qL1xyXG5tYXQzLm5vcm1hbEZyb21NYXQ0ID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM10sXHJcbiAgICAgICAgYTEwID0gYVs0XSwgYTExID0gYVs1XSwgYTEyID0gYVs2XSwgYTEzID0gYVs3XSxcclxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSwgYTIzID0gYVsxMV0sXHJcbiAgICAgICAgYTMwID0gYVsxMl0sIGEzMSA9IGFbMTNdLCBhMzIgPSBhWzE0XSwgYTMzID0gYVsxNV0sXHJcblxyXG4gICAgICAgIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMCxcclxuICAgICAgICBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTAsXHJcbiAgICAgICAgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwLFxyXG4gICAgICAgIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMSxcclxuICAgICAgICBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTEsXHJcbiAgICAgICAgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyLFxyXG4gICAgICAgIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMCxcclxuICAgICAgICBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzAsXHJcbiAgICAgICAgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwLFxyXG4gICAgICAgIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMSxcclxuICAgICAgICBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzEsXHJcbiAgICAgICAgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyLFxyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XHJcbiAgICAgICAgZGV0ID0gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xyXG5cclxuICAgIGlmICghZGV0KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBkZXQgPSAxLjAgLyBkZXQ7XHJcblxyXG4gICAgb3V0WzBdID0gKGExMSAqIGIxMSAtIGExMiAqIGIxMCArIGExMyAqIGIwOSkgKiBkZXQ7XHJcbiAgICBvdXRbMV0gPSAoYTEyICogYjA4IC0gYTEwICogYjExIC0gYTEzICogYjA3KSAqIGRldDtcclxuICAgIG91dFsyXSA9IChhMTAgKiBiMTAgLSBhMTEgKiBiMDggKyBhMTMgKiBiMDYpICogZGV0O1xyXG5cclxuICAgIG91dFszXSA9IChhMDIgKiBiMTAgLSBhMDEgKiBiMTEgLSBhMDMgKiBiMDkpICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGEwMCAqIGIxMSAtIGEwMiAqIGIwOCArIGEwMyAqIGIwNykgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcclxuXHJcbiAgICBvdXRbNl0gPSAoYTMxICogYjA1IC0gYTMyICogYjA0ICsgYTMzICogYjAzKSAqIGRldDtcclxuICAgIG91dFs3XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xyXG4gICAgb3V0WzhdID0gKGEzMCAqIGIwNCAtIGEzMSAqIGIwMiArIGEzMyAqIGIwMCkgKiBkZXQ7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXHJcbm1hdDMuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpICsgTWF0aC5wb3coYVs0XSwgMikgKyBNYXRoLnBvdyhhWzVdLCAyKSArIE1hdGgucG93KGFbNl0sIDIpICsgTWF0aC5wb3coYVs3XSwgMikgKyBNYXRoLnBvdyhhWzhdLCAyKSkpXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbWF0MzsiLCJcclxuXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB7IEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vdmVjMyc7XHJcbmltcG9ydCB2ZWM0IGZyb20gJy4vdmVjNCc7XHJcbmltcG9ydCBtYXQzIGZyb20gJy4vbWF0Myc7XHJcblxyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyBRdWF0ZXJuaW9uXHJcbiAqIEBuYW1lIHF1YXRcclxuICovXHJcblxyXG52YXIgcXVhdCA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgcXVhdFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gYSBuZXcgcXVhdGVybmlvblxyXG4gKi9cclxucXVhdC5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldHMgYSBxdWF0ZXJuaW9uIHRvIHJlcHJlc2VudCB0aGUgc2hvcnRlc3Qgcm90YXRpb24gZnJvbSBvbmVcclxuICogdmVjdG9yIHRvIGFub3RoZXIuXHJcbiAqXHJcbiAqIEJvdGggdmVjdG9ycyBhcmUgYXNzdW1lZCB0byBiZSB1bml0IGxlbmd0aC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uLlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGluaXRpYWwgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgZGVzdGluYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQucm90YXRpb25UbyA9IChmdW5jdGlvbigpIHtcclxuICAgIHZhciB0bXB2ZWMzID0gdmVjMy5jcmVhdGUoKTtcclxuICAgIHZhciB4VW5pdFZlYzMgPSB2ZWMzLmZyb21WYWx1ZXMoMSwwLDApO1xyXG4gICAgdmFyIHlVbml0VmVjMyA9IHZlYzMuZnJvbVZhbHVlcygwLDEsMCk7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgICAgIHZhciBkb3QgPSB2ZWMzLmRvdChhLCBiKTtcclxuICAgICAgICBpZiAoZG90IDwgLTAuOTk5OTk5KSB7XHJcbiAgICAgICAgICAgIHZlYzMuY3Jvc3ModG1wdmVjMywgeFVuaXRWZWMzLCBhKTtcclxuICAgICAgICAgICAgaWYgKHZlYzMubGVuZ3RoKHRtcHZlYzMpIDwgMC4wMDAwMDEpXHJcbiAgICAgICAgICAgICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIHlVbml0VmVjMywgYSk7XHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHRtcHZlYzMsIHRtcHZlYzMpO1xyXG4gICAgICAgICAgICBxdWF0LnNldEF4aXNBbmdsZShvdXQsIHRtcHZlYzMsIE1hdGguUEkpO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZG90ID4gMC45OTk5OTkpIHtcclxuICAgICAgICAgICAgb3V0WzBdID0gMDtcclxuICAgICAgICAgICAgb3V0WzFdID0gMDtcclxuICAgICAgICAgICAgb3V0WzJdID0gMDtcclxuICAgICAgICAgICAgb3V0WzNdID0gMTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIGEsIGIpO1xyXG4gICAgICAgICAgICBvdXRbMF0gPSB0bXB2ZWMzWzBdO1xyXG4gICAgICAgICAgICBvdXRbMV0gPSB0bXB2ZWMzWzFdO1xyXG4gICAgICAgICAgICBvdXRbMl0gPSB0bXB2ZWMzWzJdO1xyXG4gICAgICAgICAgICBvdXRbM10gPSAxICsgZG90O1xyXG4gICAgICAgICAgICByZXR1cm4gcXVhdC5ub3JtYWxpemUob3V0LCBvdXQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pKCk7XHJcblxyXG4vKipcclxuICogU2V0cyB0aGUgc3BlY2lmaWVkIHF1YXRlcm5pb24gd2l0aCB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW5cclxuICogYXhlcy4gRWFjaCBheGlzIGlzIGEgdmVjMyBhbmQgaXMgZXhwZWN0ZWQgdG8gYmUgdW5pdCBsZW5ndGggYW5kXHJcbiAqIHBlcnBlbmRpY3VsYXIgdG8gYWxsIG90aGVyIHNwZWNpZmllZCBheGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IHZpZXcgIHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSB2aWV3aW5nIGRpcmVjdGlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHJpZ2h0IHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBsb2NhbCBcInJpZ2h0XCIgZGlyZWN0aW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gdXAgICAgdGhlIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGxvY2FsIFwidXBcIiBkaXJlY3Rpb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5zZXRBeGVzID0gKGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG1hdHIgPSBtYXQzLmNyZWF0ZSgpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbihvdXQsIHZpZXcsIHJpZ2h0LCB1cCkge1xyXG4gICAgICAgIG1hdHJbMF0gPSByaWdodFswXTtcclxuICAgICAgICBtYXRyWzNdID0gcmlnaHRbMV07XHJcbiAgICAgICAgbWF0cls2XSA9IHJpZ2h0WzJdO1xyXG5cclxuICAgICAgICBtYXRyWzFdID0gdXBbMF07XHJcbiAgICAgICAgbWF0cls0XSA9IHVwWzFdO1xyXG4gICAgICAgIG1hdHJbN10gPSB1cFsyXTtcclxuXHJcbiAgICAgICAgbWF0clsyXSA9IC12aWV3WzBdO1xyXG4gICAgICAgIG1hdHJbNV0gPSAtdmlld1sxXTtcclxuICAgICAgICBtYXRyWzhdID0gLXZpZXdbMl07XHJcblxyXG4gICAgICAgIHJldHVybiBxdWF0Lm5vcm1hbGl6ZShvdXQsIHF1YXQuZnJvbU1hdDMob3V0LCBtYXRyKSk7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgcXVhdCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXRlcm5pb24gdG8gY2xvbmVcclxuICogQHJldHVybnMge3F1YXR9IGEgbmV3IHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmNsb25lID0gdmVjNC5jbG9uZTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHF1YXQgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBhIG5ldyBxdWF0ZXJuaW9uXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5mcm9tVmFsdWVzID0gdmVjNC5mcm9tVmFsdWVzO1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBxdWF0IHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgc291cmNlIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuY29weSA9IHZlYzQuY29weTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBxdWF0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LnNldCA9IHZlYzQuc2V0O1xyXG5cclxuLyoqXHJcbiAqIFNldCBhIHF1YXQgdG8gdGhlIGlkZW50aXR5IHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldHMgYSBxdWF0IGZyb20gdGhlIGdpdmVuIGFuZ2xlIGFuZCByb3RhdGlvbiBheGlzLFxyXG4gKiB0aGVuIHJldHVybnMgaXQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IGF4aXMgdGhlIGF4aXMgYXJvdW5kIHdoaWNoIHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSBpbiByYWRpYW5zXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICoqL1xyXG5xdWF0LnNldEF4aXNBbmdsZSA9IGZ1bmN0aW9uKG91dCwgYXhpcywgcmFkKSB7XHJcbiAgICByYWQgPSByYWQgKiAwLjU7XHJcbiAgICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XHJcbiAgICBvdXRbMF0gPSBzICogYXhpc1swXTtcclxuICAgIG91dFsxXSA9IHMgKiBheGlzWzFdO1xyXG4gICAgb3V0WzJdID0gcyAqIGF4aXNbMl07XHJcbiAgICBvdXRbM10gPSBNYXRoLmNvcyhyYWQpO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiB6aCA6IOe7leWNleS9jeWQkemHj+iHqui9rFxyXG4gKiBAcGFyYW0gb3V0ICB7cXVhdH1cclxuICogQHBhcmFtIHF1YXQyICB7cXVhdH1cclxuICogQHBhcmFtIGF4aXMgICB7dmVjM31cclxuICogQHBhcmFtIHJhZCAgICB7TnVtYmVyfVxyXG4gKi9cclxuXHJcbnF1YXQucm90YXRlQXhpcyA9IGZ1bmN0aW9uIChvdXQscXVhdDIsYXhpcyxyYWQpIHtcclxuXHJcbiAgICB2ZWMzLm5vcm1hbGl6ZShheGlzLGF4aXMpO1xyXG4gICAgcXVhdC5zZXRBeGlzQW5nbGUocXVhdDIsYXhpcyxyYWQpO1xyXG4gICAgcXVhdC5tdWx0aXBseShvdXQsb3V0LHF1YXQyKTtcclxuXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBZGRzIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmFkZCA9IHZlYzQuYWRkO1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHF1YXQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5tdWx0aXBseSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmFyIGF4ID0gYVswXSwgYXkgPSBhWzFdLCBheiA9IGFbMl0sIGF3ID0gYVszXSxcclxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdLCBidyA9IGJbM107XHJcblxyXG4gICAgb3V0WzBdID0gYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieTtcclxuICAgIG91dFsxXSA9IGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYno7XHJcbiAgICBvdXRbMl0gPSBheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4O1xyXG4gICAgb3V0WzNdID0gYXcgKiBidyAtIGF4ICogYnggLSBheSAqIGJ5IC0gYXogKiBiejtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQubXVsID0gcXVhdC5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgYSBxdWF0IGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5zY2FsZSA9IHZlYzQuc2NhbGU7XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIHF1YXRlcm5pb24gYnkgdGhlIGdpdmVuIGFuZ2xlIGFib3V0IHRoZSBYIGF4aXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgcXVhdCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byByb3RhdGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBhbmdsZSAoaW4gcmFkaWFucykgdG8gcm90YXRlXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQucm90YXRlWCA9IGZ1bmN0aW9uIChvdXQscmFkKSB7XHJcblxyXG4gICAgdmFyIHF1YXQyID1bMCwwLDAsMV07XHJcbiAgICB2YXIgYXhpcyA9IFsxLDAsMF07XHJcblxyXG4gICAgcXVhdC5yb3RhdGVBeGlzKG91dCxxdWF0MixheGlzLHJhZCk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgcXVhdGVybmlvbiBieSB0aGUgZ2l2ZW4gYW5nbGUgYWJvdXQgdGhlIFkgYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCBxdWF0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGFuZ2xlIChpbiByYWRpYW5zKSB0byByb3RhdGVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5yb3RhdGVZID0gZnVuY3Rpb24gKG91dCxyYWQpIHtcclxuXHJcbiAgICB2YXIgcXVhdDIgPVswLDAsMCwxXTtcclxuICAgIHZhciBheGlzID0gWzAsMSwwXTtcclxuXHJcbiAgICBxdWF0LnJvdGF0ZUF4aXMob3V0LHF1YXQyLGF4aXMscmFkKTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBxdWF0ZXJuaW9uIGJ5IHRoZSBnaXZlbiBhbmdsZSBhYm91dCB0aGUgWiBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHF1YXQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgYW5nbGUgKGluIHJhZGlhbnMpIHRvIHJvdGF0ZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xyXG5xdWF0LnJvdGF0ZVogPSBmdW5jdGlvbiAob3V0LHJhZCkge1xyXG4gICAgdmFyIHF1YXQyID1bMCwwLDAsMV07XHJcbiAgICB2YXIgYXhpcyA9IFswLDAsMV07XHJcblxyXG4gICAgcXVhdC5yb3RhdGVBeGlzKG91dCxxdWF0MixheGlzLHJhZCk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBXIGNvbXBvbmVudCBvZiBhIHF1YXQgZnJvbSB0aGUgWCwgWSwgYW5kIFogY29tcG9uZW50cy5cclxuICogQXNzdW1lcyB0aGF0IHF1YXRlcm5pb24gaXMgMSB1bml0IGluIGxlbmd0aC5cclxuICogQW55IGV4aXN0aW5nIFcgY29tcG9uZW50IHdpbGwgYmUgaWdub3JlZC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBXIGNvbXBvbmVudCBvZlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xyXG5xdWF0LmNhbGN1bGF0ZVcgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sIHkgPSBhWzFdLCB6ID0gYVsyXTtcclxuXHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIG91dFsyXSA9IHo7XHJcbiAgICBvdXRbM10gPSBNYXRoLnNxcnQoTWF0aC5hYnMoMS4wIC0geCAqIHggLSB5ICogeSAtIHogKiB6KSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuZG90ID0gdmVjNC5kb3Q7XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50IGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQubGVycCA9IHZlYzQubGVycDtcclxuXHJcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIHNwaGVyaWNhbCBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuc2xlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICAvLyBiZW5jaG1hcmtzOlxyXG4gICAgLy8gICAgaHR0cDovL2pzcGVyZi5jb20vcXVhdGVybmlvbi1zbGVycC1pbXBsZW1lbnRhdGlvbnNcclxuXHJcbiAgICB2YXIgYXggPSBhWzBdLCBheSA9IGFbMV0sIGF6ID0gYVsyXSwgYXcgPSBhWzNdLFxyXG4gICAgICAgIGJ4ID0gYlswXSwgYnkgPSBiWzFdLCBieiA9IGJbMl0sIGJ3ID0gYlszXTtcclxuXHJcbiAgICB2YXIgICAgICAgIG9tZWdhLCBjb3NvbSwgc2lub20sIHNjYWxlMCwgc2NhbGUxO1xyXG5cclxuICAgIC8vIGNhbGMgY29zaW5lXHJcbiAgICBjb3NvbSA9IGF4ICogYnggKyBheSAqIGJ5ICsgYXogKiBieiArIGF3ICogYnc7XHJcbiAgICAvLyBhZGp1c3Qgc2lnbnMgKGlmIG5lY2Vzc2FyeSlcclxuICAgIGlmICggY29zb20gPCAwLjAgKSB7XHJcbiAgICAgICAgY29zb20gPSAtY29zb207XHJcbiAgICAgICAgYnggPSAtIGJ4O1xyXG4gICAgICAgIGJ5ID0gLSBieTtcclxuICAgICAgICBieiA9IC0gYno7XHJcbiAgICAgICAgYncgPSAtIGJ3O1xyXG4gICAgfVxyXG4gICAgLy8gY2FsY3VsYXRlIGNvZWZmaWNpZW50c1xyXG4gICAgaWYgKCAoMS4wIC0gY29zb20pID4gMC4wMDAwMDEgKSB7XHJcbiAgICAgICAgLy8gc3RhbmRhcmQgY2FzZSAoc2xlcnApXHJcbiAgICAgICAgb21lZ2EgID0gTWF0aC5hY29zKGNvc29tKTtcclxuICAgICAgICBzaW5vbSAgPSBNYXRoLnNpbihvbWVnYSk7XHJcbiAgICAgICAgc2NhbGUwID0gTWF0aC5zaW4oKDEuMCAtIHQpICogb21lZ2EpIC8gc2lub207XHJcbiAgICAgICAgc2NhbGUxID0gTWF0aC5zaW4odCAqIG9tZWdhKSAvIHNpbm9tO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBcImZyb21cIiBhbmQgXCJ0b1wiIHF1YXRlcm5pb25zIGFyZSB2ZXJ5IGNsb3NlXHJcbiAgICAgICAgLy8gIC4uLiBzbyB3ZSBjYW4gZG8gYSBsaW5lYXIgaW50ZXJwb2xhdGlvblxyXG4gICAgICAgIHNjYWxlMCA9IDEuMCAtIHQ7XHJcbiAgICAgICAgc2NhbGUxID0gdDtcclxuICAgIH1cclxuICAgIC8vIGNhbGN1bGF0ZSBmaW5hbCB2YWx1ZXNcclxuICAgIG91dFswXSA9IHNjYWxlMCAqIGF4ICsgc2NhbGUxICogYng7XHJcbiAgICBvdXRbMV0gPSBzY2FsZTAgKiBheSArIHNjYWxlMSAqIGJ5O1xyXG4gICAgb3V0WzJdID0gc2NhbGUwICogYXogKyBzY2FsZTEgKiBiejtcclxuICAgIG91dFszXSA9IHNjYWxlMCAqIGF3ICsgc2NhbGUxICogYnc7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBpbnZlcnNlIG9mIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gY2FsY3VsYXRlIGludmVyc2Ugb2ZcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sXHJcbiAgICAgICAgZG90ID0gYTAqYTAgKyBhMSphMSArIGEyKmEyICsgYTMqYTMsXHJcbiAgICAgICAgaW52RG90ID0gZG90ID8gMS4wL2RvdCA6IDA7XHJcblxyXG4gICAgLy8gVE9ETzogV291bGQgYmUgZmFzdGVyIHRvIHJldHVybiBbMCwwLDAsMF0gaW1tZWRpYXRlbHkgaWYgZG90ID09IDBcclxuXHJcbiAgICBvdXRbMF0gPSAtYTAqaW52RG90O1xyXG4gICAgb3V0WzFdID0gLWExKmludkRvdDtcclxuICAgIG91dFsyXSA9IC1hMippbnZEb3Q7XHJcbiAgICBvdXRbM10gPSBhMyppbnZEb3Q7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGNvbmp1Z2F0ZSBvZiBhIHF1YXRcclxuICogSWYgdGhlIHF1YXRlcm5pb24gaXMgbm9ybWFsaXplZCwgdGhpcyBmdW5jdGlvbiBpcyBmYXN0ZXIgdGhhbiBxdWF0LmludmVyc2UgYW5kIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBjb25qdWdhdGUgb2ZcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5jb25qdWdhdGUgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSAtYVswXTtcclxuICAgIG91dFsxXSA9IC1hWzFdO1xyXG4gICAgb3V0WzJdID0gLWFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQubGVuZ3RoID0gdmVjNC5sZW5ndGg7XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Lmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmxlbiA9IHF1YXQubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5zcXVhcmVkTGVuZ3RoID0gdmVjNC5zcXVhcmVkTGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5zcXVhcmVkTGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuc3FyTGVuID0gcXVhdC5zcXVhcmVkTGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIE5vcm1hbGl6ZSBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0ZXJuaW9uIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5ub3JtYWxpemUgPSB2ZWM0Lm5vcm1hbGl6ZTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgcXVhdGVybmlvbiBmcm9tIHRoZSBnaXZlbiAzeDMgcm90YXRpb24gbWF0cml4LlxyXG4gKlxyXG4gKiBOT1RFOiBUaGUgcmVzdWx0YW50IHF1YXRlcm5pb24gaXMgbm90IG5vcm1hbGl6ZWQsIHNvIHlvdSBzaG91bGQgYmUgc3VyZVxyXG4gKiB0byByZW5vcm1hbGl6ZSB0aGUgcXVhdGVybmlvbiB5b3Vyc2VsZiB3aGVyZSBuZWNlc3NhcnkuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge21hdDN9IG0gcm90YXRpb24gbWF0cml4XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmZyb21NYXQzID0gZnVuY3Rpb24ob3V0LCBtKSB7XHJcbiAgICAvLyBBbGdvcml0aG0gaW4gS2VuIFNob2VtYWtlJ3MgYXJ0aWNsZSBpbiAxOTg3IFNJR0dSQVBIIGNvdXJzZSBub3Rlc1xyXG4gICAgLy8gYXJ0aWNsZSBcIlF1YXRlcm5pb24gQ2FsY3VsdXMgYW5kIEZhc3QgQW5pbWF0aW9uXCIuXHJcbiAgICB2YXIgZlRyYWNlID0gbVswXSArIG1bNF0gKyBtWzhdO1xyXG4gICAgdmFyIGZSb290O1xyXG5cclxuICAgIGlmICggZlRyYWNlID4gMC4wICkge1xyXG4gICAgICAgIC8vIHx3fCA+IDEvMiwgbWF5IGFzIHdlbGwgY2hvb3NlIHcgPiAxLzJcclxuICAgICAgICBmUm9vdCA9IE1hdGguc3FydChmVHJhY2UgKyAxLjApOyAgLy8gMndcclxuICAgICAgICBvdXRbM10gPSAwLjUgKiBmUm9vdDtcclxuICAgICAgICBmUm9vdCA9IDAuNS9mUm9vdDsgIC8vIDEvKDR3KVxyXG4gICAgICAgIG91dFswXSA9IChtWzVdLW1bN10pKmZSb290O1xyXG4gICAgICAgIG91dFsxXSA9IChtWzZdLW1bMl0pKmZSb290O1xyXG4gICAgICAgIG91dFsyXSA9IChtWzFdLW1bM10pKmZSb290O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAvLyB8d3wgPD0gMS8yXHJcbiAgICAgICAgdmFyIGkgPSAwO1xyXG4gICAgICAgIGlmICggbVs0XSA+IG1bMF0gKVxyXG4gICAgICAgICAgaSA9IDE7XHJcbiAgICAgICAgaWYgKCBtWzhdID4gbVtpKjMraV0gKVxyXG4gICAgICAgICAgaSA9IDI7XHJcbiAgICAgICAgdmFyIGogPSAoaSsxKSUzO1xyXG4gICAgICAgIHZhciBrID0gKGkrMiklMztcclxuXHJcbiAgICAgICAgZlJvb3QgPSBNYXRoLnNxcnQobVtpKjMraV0tbVtqKjMral0tbVtrKjMra10gKyAxLjApO1xyXG4gICAgICAgIG91dFtpXSA9IDAuNSAqIGZSb290O1xyXG4gICAgICAgIGZSb290ID0gMC41IC8gZlJvb3Q7XHJcbiAgICAgICAgb3V0WzNdID0gKG1baiozK2tdIC0gbVtrKjMral0pICogZlJvb3Q7XHJcbiAgICAgICAgb3V0W2pdID0gKG1baiozK2ldICsgbVtpKjMral0pICogZlJvb3Q7XHJcbiAgICAgICAgb3V0W2tdID0gKG1bayozK2ldICsgbVtpKjMra10pICogZlJvb3Q7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHF1YXQ7IiwiLy8gU2FtcGxlciBjbGlwIGlzIGVzcGVjaWFsbHkgZm9yIHRoZSBhbmltYXRpb24gc2FtcGxlciBpbiBnbFRGXHJcbi8vIFVzZSBUeXBlZCBBcnJheSBjYW4gcmVkdWNlIGEgbG90IG9mIGhlYXAgbWVtb3J5XHJcblxyXG5pbXBvcnQgcXVhdCBmcm9tICcuLi9nbG1hdHJpeC9xdWF0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG4vLyBsZXJwIGZ1bmN0aW9uIHdpdGggb2Zmc2V0IGluIGxhcmdlIGFycmF5XHJcbmZ1bmN0aW9uIHZlYzNsZXJwKG91dCwgYSwgYiwgdCwgb2EsIG9iKSB7XHJcbiAgICB2YXIgYXggPSBhW29hXTtcclxuICAgIHZhciBheSA9IGFbb2EgKyAxXTtcclxuICAgIHZhciBheiA9IGFbb2EgKyAyXTtcclxuICAgIG91dFswXSA9IGF4ICsgdCAqIChiW29iXSAtIGF4KTtcclxuICAgIG91dFsxXSA9IGF5ICsgdCAqIChiW29iICsgMV0gLSBheSk7XHJcbiAgICBvdXRbMl0gPSBheiArIHQgKiAoYltvYiArIDJdIC0gYXopO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHF1YXRTbGVycChvdXQsIGEsIGIsIHQsIG9hLCBvYikge1xyXG4gICAgLy8gYmVuY2htYXJrczpcclxuICAgIC8vICAgIGh0dHA6Ly9qc3BlcmYuY29tL3F1YXRlcm5pb24tc2xlcnAtaW1wbGVtZW50YXRpb25zXHJcblxyXG4gICAgdmFyIGF4ID0gYVswICsgb2FdLCBheSA9IGFbMSArIG9hXSwgYXogPSBhWzIgKyBvYV0sIGF3ID0gYVszICsgb2FdLFxyXG4gICAgICAgIGJ4ID0gYlswICsgb2JdLCBieSA9IGJbMSArIG9iXSwgYnogPSBiWzIgKyBvYl0sIGJ3ID0gYlszICsgb2JdO1xyXG5cclxuICAgIHZhciBvbWVnYSwgY29zb20sIHNpbm9tLCBzY2FsZTAsIHNjYWxlMTtcclxuXHJcbiAgICAvLyBjYWxjIGNvc2luZVxyXG4gICAgY29zb20gPSBheCAqIGJ4ICsgYXkgKiBieSArIGF6ICogYnogKyBhdyAqIGJ3O1xyXG4gICAgLy8gYWRqdXN0IHNpZ25zIChpZiBuZWNlc3NhcnkpXHJcbiAgICBpZiAoY29zb20gPCAwLjApIHtcclxuICAgICAgICBjb3NvbSA9IC1jb3NvbTtcclxuICAgICAgICBieCA9IC0gYng7XHJcbiAgICAgICAgYnkgPSAtIGJ5O1xyXG4gICAgICAgIGJ6ID0gLSBiejtcclxuICAgICAgICBidyA9IC0gYnc7XHJcbiAgICB9XHJcbiAgICAvLyBjYWxjdWxhdGUgY29lZmZpY2llbnRzXHJcbiAgICBpZiAoKDEuMCAtIGNvc29tKSA+IDAuMDAwMDAxKSB7XHJcbiAgICAgICAgLy8gc3RhbmRhcmQgY2FzZSAoc2xlcnApXHJcbiAgICAgICAgb21lZ2EgID0gTWF0aC5hY29zKGNvc29tKTtcclxuICAgICAgICBzaW5vbSAgPSBNYXRoLnNpbihvbWVnYSk7XHJcbiAgICAgICAgc2NhbGUwID0gTWF0aC5zaW4oKDEuMCAtIHQpICogb21lZ2EpIC8gc2lub207XHJcbiAgICAgICAgc2NhbGUxID0gTWF0aC5zaW4odCAqIG9tZWdhKSAvIHNpbm9tO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gJ2Zyb20nIGFuZCAndG8nIHF1YXRlcm5pb25zIGFyZSB2ZXJ5IGNsb3NlXHJcbiAgICAgICAgLy8gIC4uLiBzbyB3ZSBjYW4gZG8gYSBsaW5lYXIgaW50ZXJwb2xhdGlvblxyXG4gICAgICAgIHNjYWxlMCA9IDEuMCAtIHQ7XHJcbiAgICAgICAgc2NhbGUxID0gdDtcclxuICAgIH1cclxuICAgIC8vIGNhbGN1bGF0ZSBmaW5hbCB2YWx1ZXNcclxuICAgIG91dFswXSA9IHNjYWxlMCAqIGF4ICsgc2NhbGUxICogYng7XHJcbiAgICBvdXRbMV0gPSBzY2FsZTAgKiBheSArIHNjYWxlMSAqIGJ5O1xyXG4gICAgb3V0WzJdID0gc2NhbGUwICogYXogKyBzY2FsZTEgKiBiejtcclxuICAgIG91dFszXSA9IHNjYWxlMCAqIGF3ICsgc2NhbGUxICogYnc7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNhbXBsZXJUcmFjayBtYW5hZ2VzIGBwb3NpdGlvbmAsIGByb3RhdGlvbmAsIGBzY2FsZWAgdHJhY2tzIGluIGFuaW1hdGlvbiBvZiBzaW5nbGUgc2NlbmUgbm9kZS5cclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2tcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubmFtZV0gVHJhY2sgbmFtZVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW29wdHMudGFyZ2V0XSBUYXJnZXQgbm9kZSdzIHRyYW5zZm9ybSB3aWxsIHVwZGF0ZWQgYXV0b21hdGljYWxseVxyXG4gKi9cclxudmFyIFNhbXBsZXJUcmFjayA9IGZ1bmN0aW9uIChvcHRzKSB7XHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICB0aGlzLm5hbWUgPSBvcHRzLm5hbWUgfHwgJyc7XHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRhcmdldCA9IG9wdHMudGFyZ2V0IHx8IG51bGw7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtBcnJheX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0aW9uIGlzIHJlcHJlc2VudGVkIGJ5IGEgcXVhdGVybmlvblxyXG4gICAgICogQHR5cGUge0FycmF5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnJvdGF0aW9uID0gcXVhdC5jcmVhdGUoKTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge0FycmF5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnNjYWxlID0gdmVjMy5mcm9tVmFsdWVzKDEsIDEsIDEpO1xyXG5cclxuICAgIHRoaXMuY2hhbm5lbHMgPSB7XHJcbiAgICAgICAgdGltZTogbnVsbCxcclxuICAgICAgICBwb3NpdGlvbjogbnVsbCxcclxuICAgICAgICByb3RhdGlvbjogbnVsbCxcclxuICAgICAgICBzY2FsZTogbnVsbFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLl9jYWNoZUtleSA9IDA7XHJcbiAgICB0aGlzLl9jYWNoZVRpbWUgPSAwO1xyXG59O1xyXG5cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIGlmICghdGhpcy5jaGFubmVscy50aW1lKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGNoYW5uZWxzID0gdGhpcy5jaGFubmVscztcclxuICAgIHZhciBsZW4gPSBjaGFubmVscy50aW1lLmxlbmd0aDtcclxuICAgIHZhciBrZXkgPSAtMTtcclxuICAgIC8vIE9ubHkgb25lIGZyYW1lXHJcbiAgICBpZiAobGVuID09PSAxKSB7XHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnJvdGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHF1YXQuY29weSh0aGlzLnJvdGF0aW9uLCBjaGFubmVscy5yb3RhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFubmVscy5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICB2ZWMzLmNvcHkodGhpcy5wb3NpdGlvbiwgY2hhbm5lbHMucG9zaXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbm5lbHMuc2NhbGUpIHtcclxuICAgICAgICAgICAgdmVjMy5jb3B5KHRoaXMuc2NhbGUsIGNoYW5uZWxzLnNjYWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gQ2xhbXBcclxuICAgIGVsc2UgaWYgKHRpbWUgPD0gY2hhbm5lbHMudGltZVswXSkge1xyXG4gICAgICAgIHRpbWUgPSBjaGFubmVscy50aW1lWzBdO1xyXG4gICAgICAgIGtleSA9IDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aW1lID49IGNoYW5uZWxzLnRpbWVbbGVuIC0gMV0pIHtcclxuICAgICAgICB0aW1lID0gY2hhbm5lbHMudGltZVtsZW4gLSAxXTtcclxuICAgICAgICBrZXkgPSBsZW4gLSAyO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRpbWUgPCB0aGlzLl9jYWNoZVRpbWUpIHtcclxuICAgICAgICAgICAgdmFyIHMgPSBNYXRoLm1pbihsZW4gLSAxLCB0aGlzLl9jYWNoZUtleSArIDEpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gczsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChjaGFubmVscy50aW1lW2kgLSAxXSA8PSB0aW1lICYmIGNoYW5uZWxzLnRpbWVbaV0gPiB0aW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gaSAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9jYWNoZUtleTsgaSA8IGxlbiAtIDE7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoYW5uZWxzLnRpbWVbaV0gPD0gdGltZSAmJiBjaGFubmVscy50aW1lW2kgKyAxXSA+IHRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGtleSA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSBrZXk7XHJcbiAgICAgICAgdGhpcy5fY2FjaGVUaW1lID0gdGltZTtcclxuICAgICAgICB2YXIgc3RhcnQgPSBrZXk7XHJcbiAgICAgICAgdmFyIGVuZCA9IGtleSArIDE7XHJcbiAgICAgICAgdmFyIHN0YXJ0VGltZSA9IGNoYW5uZWxzLnRpbWVbc3RhcnRdO1xyXG4gICAgICAgIHZhciBlbmRUaW1lID0gY2hhbm5lbHMudGltZVtlbmRdO1xyXG4gICAgICAgIHZhciByYW5nZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XHJcbiAgICAgICAgdmFyIHBlcmNlbnQgPSByYW5nZSA9PT0gMCA/IDAgOiAodGltZSAtIHN0YXJ0VGltZSkgLyByYW5nZTtcclxuXHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnJvdGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHF1YXRTbGVycCh0aGlzLnJvdGF0aW9uLCBjaGFubmVscy5yb3RhdGlvbiwgY2hhbm5lbHMucm90YXRpb24sIHBlcmNlbnQsIHN0YXJ0ICogNCwgZW5kICogNCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFubmVscy5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICB2ZWMzbGVycCh0aGlzLnBvc2l0aW9uLCBjaGFubmVscy5wb3NpdGlvbiwgY2hhbm5lbHMucG9zaXRpb24sIHBlcmNlbnQsIHN0YXJ0ICogMywgZW5kICogMyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFubmVscy5zY2FsZSkge1xyXG4gICAgICAgICAgICB2ZWMzbGVycCh0aGlzLnNjYWxlLCBjaGFubmVscy5zY2FsZSwgY2hhbm5lbHMuc2NhbGUsIHBlcmNlbnQsIHN0YXJ0ICogMywgZW5kICogMyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gTG9vcCBoYW5kbGluZ1xyXG4gICAgaWYgKGtleSA9PT0gbGVuIC0gMikge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlS2V5ID0gMDtcclxuICAgICAgICB0aGlzLl9jYWNoZVRpbWUgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlVGFyZ2V0KCk7XHJcbn07XHJcblxyXG4vKipcclxuICogVXBkYXRlIHRyYW5zZm9ybSBvZiB0YXJnZXQgbm9kZSBtYW51YWxseVxyXG4gKi9cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS51cGRhdGVUYXJnZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgY2hhbm5lbHMgPSB0aGlzLmNoYW5uZWxzO1xyXG4gICAgaWYgKHRoaXMudGFyZ2V0KSB7XHJcbiAgICAgICAgLy8gT25seSB1cGRhdGUgdGFyZ2V0IHByb3AgaWYgaGF2ZSBkYXRhLlxyXG4gICAgICAgIGlmIChjaGFubmVscy5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldC5wb3NpdGlvbi5zZXRBcnJheSh0aGlzLnBvc2l0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnJvdGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnJvdGF0aW9uLnNldEFycmF5KHRoaXMucm90YXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbm5lbHMuc2NhbGUpIHtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXQuc2NhbGUuc2V0QXJyYXkodGhpcy5zY2FsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuZ2V0TWF4VGltZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLmNoYW5uZWxzLnRpbWVbdGhpcy5jaGFubmVscy50aW1lLmxlbmd0aCAtIDFdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFRpbWVcclxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFRpbWVcclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfVxyXG4gKi9cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5nZXRTdWJUcmFjayA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUpIHtcclxuXHJcbiAgICB2YXIgc3ViQ2xpcCA9IG5ldyBTYW1wbGVyVHJhY2soe1xyXG4gICAgICAgIG5hbWU6IHRoaXMubmFtZVxyXG4gICAgfSk7XHJcbiAgICB2YXIgbWluVGltZSA9IHRoaXMuY2hhbm5lbHMudGltZVswXTtcclxuICAgIHN0YXJ0VGltZSA9IE1hdGgubWluKE1hdGgubWF4KHN0YXJ0VGltZSwgbWluVGltZSksIHRoaXMubGlmZSk7XHJcbiAgICBlbmRUaW1lID0gTWF0aC5taW4oTWF0aC5tYXgoZW5kVGltZSwgbWluVGltZSksIHRoaXMubGlmZSk7XHJcblxyXG4gICAgdmFyIHJhbmdlU3RhcnQgPSB0aGlzLl9maW5kUmFuZ2Uoc3RhcnRUaW1lKTtcclxuICAgIHZhciByYW5nZUVuZCA9IHRoaXMuX2ZpbmRSYW5nZShlbmRUaW1lKTtcclxuXHJcbiAgICB2YXIgY291bnQgPSByYW5nZUVuZFswXSAtIHJhbmdlU3RhcnRbMF0gKyAxO1xyXG4gICAgaWYgKHJhbmdlU3RhcnRbMV0gPT09IDAgJiYgcmFuZ2VFbmRbMV0gPT09IDApIHtcclxuICAgICAgICBjb3VudCAtPSAxO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhbm5lbHMucm90YXRpb24pIHtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhbm5lbHMucG9zaXRpb24pIHtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnBvc2l0aW9uID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhbm5lbHMuc2NhbGUpIHtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnNjYWxlID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhbm5lbHMudGltZSkge1xyXG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMudGltZSA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQpO1xyXG4gICAgfVxyXG4gICAgLy8gQ2xpcCBhdCB0aGUgc3RhcnRcclxuICAgIHRoaXMuc2V0VGltZShzdGFydFRpbWUpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uW2ldID0gdGhpcy5yb3RhdGlvbltpXTtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnBvc2l0aW9uW2ldID0gdGhpcy5wb3NpdGlvbltpXTtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnNjYWxlW2ldID0gdGhpcy5zY2FsZVtpXTtcclxuICAgIH1cclxuICAgIHN1YkNsaXAuY2hhbm5lbHMudGltZVswXSA9IDA7XHJcbiAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uWzNdID0gdGhpcy5yb3RhdGlvblszXTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGNvdW50LTE7IGkrKykge1xyXG4gICAgICAgIHZhciBpMjtcclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDM7IGorKykge1xyXG4gICAgICAgICAgICBpMiA9IHJhbmdlU3RhcnRbMF0gKyBpO1xyXG4gICAgICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uW2kgKiA0ICsgal0gPSB0aGlzLmNoYW5uZWxzLnJvdGF0aW9uW2kyICogNCArIGpdO1xyXG4gICAgICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnBvc2l0aW9uW2kgKiAzICsgal0gPSB0aGlzLmNoYW5uZWxzLnBvc2l0aW9uW2kyICogMyArIGpdO1xyXG4gICAgICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnNjYWxlW2kgKiAzICsgal0gPSB0aGlzLmNoYW5uZWxzLnNjYWxlW2kyICogMyArIGpdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnRpbWVbaV0gPSB0aGlzLmNoYW5uZWxzLnRpbWVbaTJdIC0gc3RhcnRUaW1lO1xyXG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMucm90YXRpb25baSAqIDQgKyAzXSA9IHRoaXMuY2hhbm5lbHMucm90YXRpb25baTIgKiA0ICsgM107XHJcbiAgICB9XHJcbiAgICAvLyBDbGlwIGF0IHRoZSBlbmRcclxuICAgIHRoaXMuc2V0VGltZShlbmRUaW1lKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvblsoY291bnQgLSAxKSAqIDQgKyBpXSA9IHRoaXMucm90YXRpb25baV07XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5wb3NpdGlvblsoY291bnQgLSAxKSAqIDMgKyBpXSA9IHRoaXMucG9zaXRpb25baV07XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5zY2FsZVsoY291bnQgLSAxKSAqIDMgKyBpXSA9IHRoaXMuc2NhbGVbaV07XHJcbiAgICB9XHJcbiAgICBzdWJDbGlwLmNoYW5uZWxzLnRpbWVbKGNvdW50IC0gMSldID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcclxuICAgIHN1YkNsaXAuY2hhbm5lbHMucm90YXRpb25bKGNvdW50IC0gMSkgKiA0ICsgM10gPSB0aGlzLnJvdGF0aW9uWzNdO1xyXG5cclxuICAgIC8vIFRPRE8gc2V0IGJhY2sgP1xyXG4gICAgc3ViQ2xpcC5saWZlID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcclxuICAgIHJldHVybiBzdWJDbGlwO1xyXG59O1xyXG5cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5fZmluZFJhbmdlID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIHZhciBjaGFubmVscyA9IHRoaXMuY2hhbm5lbHM7XHJcbiAgICB2YXIgbGVuID0gY2hhbm5lbHMudGltZS5sZW5ndGg7XHJcbiAgICB2YXIgc3RhcnQgPSAtMTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnRpbWVbaV0gPD0gdGltZSAmJiBjaGFubmVscy50aW1lW2krMV0gPiB0aW1lKSB7XHJcbiAgICAgICAgICAgIHN0YXJ0ID0gaTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgcGVyY2VudCA9IDA7XHJcbiAgICBpZiAoc3RhcnQgPj0gMCkge1xyXG4gICAgICAgIHZhciBzdGFydFRpbWUgPSBjaGFubmVscy50aW1lW3N0YXJ0XTtcclxuICAgICAgICB2YXIgZW5kVGltZSA9IGNoYW5uZWxzLnRpbWVbc3RhcnQrMV07XHJcbiAgICAgICAgdmFyIHBlcmNlbnQgPSAodGltZS1zdGFydFRpbWUpIC8gKGVuZFRpbWUtc3RhcnRUaW1lKTtcclxuICAgIH1cclxuICAgIC8vIFBlcmNlbnQgWzAsIDEpXHJcbiAgICByZXR1cm4gW3N0YXJ0LCBwZXJjZW50XTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiAxRCBibGVuZGluZyBiZXR3ZWVuIHR3byBjbGlwc1xyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMVxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMyXHJcbiAqIEBwYXJhbSAge251bWJlcn0gd1xyXG4gKi9cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5ibGVuZDFEID0gZnVuY3Rpb24gKHQxLCB0Miwgdykge1xyXG4gICAgdmVjMy5sZXJwKHRoaXMucG9zaXRpb24sIHQxLnBvc2l0aW9uLCB0Mi5wb3NpdGlvbiwgdyk7XHJcbiAgICB2ZWMzLmxlcnAodGhpcy5zY2FsZSwgdDEuc2NhbGUsIHQyLnNjYWxlLCB3KTtcclxuICAgIHF1YXQuc2xlcnAodGhpcy5yb3RhdGlvbiwgdDEucm90YXRpb24sIHQyLnJvdGF0aW9uLCB3KTtcclxufTtcclxuLyoqXHJcbiAqIDJEIGJsZW5kaW5nIGJldHdlZW4gdGhyZWUgY2xpcHNcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzFcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMlxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMzXHJcbiAqIEBwYXJhbSAge251bWJlcn0gZlxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IGdcclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuYmxlbmQyRCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcTEgPSBxdWF0LmNyZWF0ZSgpO1xyXG4gICAgdmFyIHEyID0gcXVhdC5jcmVhdGUoKTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodDEsIHQyLCB0MywgZiwgZykge1xyXG4gICAgICAgIHZhciBhID0gMSAtIGYgLSBnO1xyXG5cclxuICAgICAgICB0aGlzLnBvc2l0aW9uWzBdID0gdDEucG9zaXRpb25bMF0gKiBhICsgdDIucG9zaXRpb25bMF0gKiBmICsgdDMucG9zaXRpb25bMF0gKiBnO1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25bMV0gPSB0MS5wb3NpdGlvblsxXSAqIGEgKyB0Mi5wb3NpdGlvblsxXSAqIGYgKyB0My5wb3NpdGlvblsxXSAqIGc7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvblsyXSA9IHQxLnBvc2l0aW9uWzJdICogYSArIHQyLnBvc2l0aW9uWzJdICogZiArIHQzLnBvc2l0aW9uWzJdICogZztcclxuXHJcbiAgICAgICAgdGhpcy5zY2FsZVswXSA9IHQxLnNjYWxlWzBdICogYSArIHQyLnNjYWxlWzBdICogZiArIHQzLnNjYWxlWzBdICogZztcclxuICAgICAgICB0aGlzLnNjYWxlWzFdID0gdDEuc2NhbGVbMV0gKiBhICsgdDIuc2NhbGVbMV0gKiBmICsgdDMuc2NhbGVbMV0gKiBnO1xyXG4gICAgICAgIHRoaXMuc2NhbGVbMl0gPSB0MS5zY2FsZVsyXSAqIGEgKyB0Mi5zY2FsZVsyXSAqIGYgKyB0My5zY2FsZVsyXSAqIGc7XHJcblxyXG4gICAgICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYmIyMDU0MDModj12cy44NSkuYXNweFxyXG4gICAgICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbWljcm9zb2Z0LmRpcmVjdHhfc2RrLnF1YXRlcm5pb24ueG1xdWF0ZXJuaW9uYmFyeWNlbnRyaWModj12cy44NSkuYXNweFxyXG4gICAgICAgIHZhciBzID0gZiArIGc7XHJcbiAgICAgICAgaWYgKHMgPT09IDApIHtcclxuICAgICAgICAgICAgcXVhdC5jb3B5KHRoaXMucm90YXRpb24sIHQxLnJvdGF0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHF1YXQuc2xlcnAocTEsIHQxLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbiwgcyk7XHJcbiAgICAgICAgICAgIHF1YXQuc2xlcnAocTIsIHQxLnJvdGF0aW9uLCB0My5yb3RhdGlvbiwgcyk7XHJcbiAgICAgICAgICAgIHF1YXQuc2xlcnAodGhpcy5yb3RhdGlvbiwgcTEsIHEyLCBnIC8gcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufSkoKTtcclxuLyoqXHJcbiAqIEFkZGl0aXZlIGJsZW5kaW5nIGJldHdlZW4gdHdvIGNsaXBzXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzJcclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuYWRkaXRpdmVCbGVuZCA9IGZ1bmN0aW9uICh0MSwgdDIpIHtcclxuICAgIHZlYzMuYWRkKHRoaXMucG9zaXRpb24sIHQxLnBvc2l0aW9uLCB0Mi5wb3NpdGlvbik7XHJcbiAgICB2ZWMzLmFkZCh0aGlzLnNjYWxlLCB0MS5zY2FsZSwgdDIuc2NhbGUpO1xyXG4gICAgcXVhdC5tdWx0aXBseSh0aGlzLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbiwgdDEucm90YXRpb24pO1xyXG59O1xyXG4vKipcclxuICogU3VidHJhY3RpdmUgYmxlbmRpbmcgYmV0d2VlbiB0d28gY2xpcHNcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzFcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMlxyXG4gKi9cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5zdWJ0cmFjdGl2ZUJsZW5kID0gZnVuY3Rpb24gKHQxLCB0Mikge1xyXG4gICAgdmVjMy5zdWIodGhpcy5wb3NpdGlvbiwgdDEucG9zaXRpb24sIHQyLnBvc2l0aW9uKTtcclxuICAgIHZlYzMuc3ViKHRoaXMuc2NhbGUsIHQxLnNjYWxlLCB0Mi5zY2FsZSk7XHJcbiAgICBxdWF0LmludmVydCh0aGlzLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbik7XHJcbiAgICBxdWF0Lm11bHRpcGx5KHRoaXMucm90YXRpb24sIHRoaXMucm90YXRpb24sIHQxLnJvdGF0aW9uKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDbG9uZSBhIG5ldyBTYW1wbGVyVHJhY2tcclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfVxyXG4gKi9cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB0cmFjayA9IFNhbXBsZXJUcmFjay5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgIHRyYWNrLmNoYW5uZWxzID0ge1xyXG4gICAgICAgIHRpbWU6IHRoaXMuY2hhbm5lbHMudGltZSB8fCBudWxsLFxyXG4gICAgICAgIHBvc2l0aW9uOiB0aGlzLmNoYW5uZWxzLnBvc2l0aW9uIHx8IG51bGwsXHJcbiAgICAgICAgcm90YXRpb246IHRoaXMuY2hhbm5lbHMucm90YXRpb24gfHwgbnVsbCxcclxuICAgICAgICBzY2FsZTogdGhpcy5jaGFubmVscy5zY2FsZSB8fCBudWxsXHJcbiAgICB9O1xyXG4gICAgdmVjMy5jb3B5KHRyYWNrLnBvc2l0aW9uLCB0aGlzLnBvc2l0aW9uKTtcclxuICAgIHF1YXQuY29weSh0cmFjay5yb3RhdGlvbiwgdGhpcy5yb3RhdGlvbik7XHJcbiAgICB2ZWMzLmNvcHkodHJhY2suc2NhbGUsIHRoaXMuc2NhbGUpO1xyXG5cclxuICAgIHRyYWNrLnRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG4gICAgdHJhY2sudXBkYXRlVGFyZ2V0KCk7XHJcblxyXG4gICAgcmV0dXJuIHRyYWNrO1xyXG5cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNhbXBsZXJUcmFjaztcclxuIiwiLyoqXHJcbiAqIEV4dGVuZCBhIHN1YiBjbGFzcyBmcm9tIGJhc2UgY2xhc3NcclxuICogQHBhcmFtIHtvYmplY3R8RnVuY3Rpb259IG1ha2VEZWZhdWx0T3B0IGRlZmF1bHQgb3B0aW9uIG9mIHRoaXMgc3ViIGNsYXNzLCBtZXRob2Qgb2YgdGhlIHN1YiBjYW4gdXNlIHRoaXMueHh4IHRvIGFjY2VzcyB0aGlzIG9wdGlvblxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaW5pdGlhbGl6ZV0gSW5pdGlhbGl6ZSBhZnRlciB0aGUgc3ViIGNsYXNzIGlzIGluc3RhbnRpYXRlZFxyXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3RvXSBQcm90b3R5cGUgbWV0aG9kcy9wcm9wZXJ0aWVzIG9mIHRoZSBzdWIgY2xhc3NcclxuICogQG1lbWJlck9mIGNsYXkuY29yZS5taXhpbi5leHRlbmRcclxuICogQHJldHVybiB7RnVuY3Rpb259XHJcbiAqL1xyXG5mdW5jdGlvbiBkZXJpdmUobWFrZURlZmF1bHRPcHQsIGluaXRpYWxpemUvKm9wdGlvbmFsKi8sIHByb3RvLypvcHRpb25hbCovKSB7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsaXplID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgcHJvdG8gPSBpbml0aWFsaXplO1xyXG4gICAgICAgIGluaXRpYWxpemUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBfc3VwZXIgPSB0aGlzO1xyXG5cclxuICAgIHZhciBwcm9wTGlzdDtcclxuICAgIGlmICghKG1ha2VEZWZhdWx0T3B0IGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XHJcbiAgICAgICAgLy8gT3B0aW1pemUgdGhlIHByb3BlcnR5IGl0ZXJhdGUgaWYgaXQgaGF2ZSBiZWVuIGZpeGVkXHJcbiAgICAgICAgcHJvcExpc3QgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBtYWtlRGVmYXVsdE9wdCkge1xyXG4gICAgICAgICAgICBpZiAobWFrZURlZmF1bHRPcHQuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wTGlzdC5wdXNoKHByb3BOYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIgc3ViID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG5cclxuICAgICAgICAvLyBjYWxsIHN1cGVyIGNvbnN0cnVjdG9yXHJcbiAgICAgICAgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcblxyXG4gICAgICAgIGlmIChtYWtlRGVmYXVsdE9wdCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIC8vIEludm9rZSBtYWtlRGVmYXVsdE9wdCBlYWNoIHRpbWUgaWYgaXQgaXMgYSBmdW5jdGlvbiwgU28gd2UgY2FuIG1ha2Ugc3VyZSBlYWNoXHJcbiAgICAgICAgICAgIC8vIHByb3BlcnR5IGluIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgc2hhcmVkIGJ5IG11dGlwbGUgaW5zdGFuY2VzXHJcbiAgICAgICAgICAgIGV4dGVuZCh0aGlzLCBtYWtlRGVmYXVsdE9wdC5jYWxsKHRoaXMsIG9wdGlvbnMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGV4dGVuZFdpdGhQcm9wTGlzdCh0aGlzLCBtYWtlRGVmYXVsdE9wdCwgcHJvcExpc3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IHN1Yikge1xyXG4gICAgICAgICAgICAvLyBJbml0aWFsaXplIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHRoZSBvcmRlciBvZiBpbmhlcml0XHJcbiAgICAgICAgICAgIHZhciBpbml0aWFsaXplcnMgPSBzdWIuX19pbml0aWFsaXplcnNfXztcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGluaXRpYWxpemVyc1tpXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8vIHNhdmUgc3VwZXIgY29uc3RydWN0b3JcclxuICAgIHN1Yi5fX3N1cGVyX18gPSBfc3VwZXI7XHJcbiAgICAvLyBJbml0aWFsaXplIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGFsbCB0aGUgc3VwZXIgY29uc3RydWN0b3IgaXMgY2FsbGVkXHJcbiAgICBpZiAoIV9zdXBlci5fX2luaXRpYWxpemVyc19fKSB7XHJcbiAgICAgICAgc3ViLl9faW5pdGlhbGl6ZXJzX18gPSBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc3ViLl9faW5pdGlhbGl6ZXJzX18gPSBfc3VwZXIuX19pbml0aWFsaXplcnNfXy5zbGljZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGluaXRpYWxpemUpIHtcclxuICAgICAgICBzdWIuX19pbml0aWFsaXplcnNfXy5wdXNoKGluaXRpYWxpemUpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBDdG9yID0gZnVuY3Rpb24oKSB7fTtcclxuICAgIEN0b3IucHJvdG90eXBlID0gX3N1cGVyLnByb3RvdHlwZTtcclxuICAgIHN1Yi5wcm90b3R5cGUgPSBuZXcgQ3RvcigpO1xyXG4gICAgc3ViLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YjtcclxuICAgIGV4dGVuZChzdWIucHJvdG90eXBlLCBwcm90byk7XHJcblxyXG4gICAgLy8gZXh0ZW5kIHRoZSBkZXJpdmUgbWV0aG9kIGFzIGEgc3RhdGljIG1ldGhvZDtcclxuICAgIHN1Yi5leHRlbmQgPSBfc3VwZXIuZXh0ZW5kO1xyXG5cclxuICAgIC8vIERFUENSQVRFRFxyXG4gICAgc3ViLmRlcml2ZSA9IF9zdXBlci5leHRlbmQ7XHJcblxyXG4gICAgcmV0dXJuIHN1YjtcclxufVxyXG5cclxuZnVuY3Rpb24gZXh0ZW5kKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICBpZiAoIXNvdXJjZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGZvciAodmFyIG5hbWUgaW4gc291cmNlKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG4gICAgICAgICAgICB0YXJnZXRbbmFtZV0gPSBzb3VyY2VbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBleHRlbmRXaXRoUHJvcExpc3QodGFyZ2V0LCBzb3VyY2UsIHByb3BMaXN0KSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHByb3BOYW1lID0gcHJvcExpc3RbaV07XHJcbiAgICAgICAgdGFyZ2V0W3Byb3BOYW1lXSA9IHNvdXJjZVtwcm9wTmFtZV07XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAYWxpYXMgY2xheS5jb3JlLm1peGluLmV4dGVuZFxyXG4gKiBAbWl4aW5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuXHJcbiAgICBleHRlbmQ6IGRlcml2ZSxcclxuXHJcbiAgICAvLyBERVBDUkFURURcclxuICAgIGRlcml2ZTogZGVyaXZlXHJcbn07XHJcbiIsImZ1bmN0aW9uIEhhbmRsZXIoYWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICB0aGlzLmFjdGlvbiA9IGFjdGlvbjtcclxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbn1cclxuLyoqXHJcbiAqIEBtaXhpblxyXG4gKiBAYWxpYXMgY2xheS5jb3JlLm1peGluLm5vdGlmaWVyXHJcbiAqL1xyXG52YXIgbm90aWZpZXIgPSB7XHJcbiAgICAvKipcclxuICAgICAqIFRyaWdnZXIgZXZlbnRcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxyXG4gICAgICovXHJcbiAgICB0cmlnZ2VyOiBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc093blByb3BlcnR5KCdfX2hhbmRsZXJzX18nKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5fX2hhbmRsZXJzX18uaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGhkbHMgPSB0aGlzLl9faGFuZGxlcnNfX1tuYW1lXTtcclxuICAgICAgICB2YXIgbCA9IGhkbHMubGVuZ3RoLCBpID0gLTEsIGFyZ3MgPSBhcmd1bWVudHM7XHJcbiAgICAgICAgLy8gT3B0aW1pemUgYWR2aXNlIGZyb20gYmFja2JvbmVcclxuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIHdoaWxlICgrK2kgPCBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGRsc1tpXS5hY3Rpb24uY2FsbChoZGxzW2ldLmNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhkbHNbaV0uYWN0aW9uLmNhbGwoaGRsc1tpXS5jb250ZXh0LCBhcmdzWzFdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKCsraSA8IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCwgYXJnc1sxXSwgYXJnc1syXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgIHdoaWxlICgrK2kgPCBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGRsc1tpXS5hY3Rpb24uY2FsbChoZGxzW2ldLmNvbnRleHQsIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhkbHNbaV0uYWN0aW9uLmNhbGwoaGRsc1tpXS5jb250ZXh0LCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHdoaWxlICgrK2kgPCBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGRsc1tpXS5hY3Rpb24uYXBwbHkoaGRsc1tpXS5jb250ZXh0LCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXIgZXZlbnQgaGFuZGxlclxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBvbjogZnVuY3Rpb24obmFtZSwgYWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICAgICAgaWYgKCFuYW1lIHx8ICFhY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9faGFuZGxlcnNfXyB8fCAodGhpcy5fX2hhbmRsZXJzX189e30pO1xyXG4gICAgICAgIGlmICghaGFuZGxlcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhhcyhuYW1lLCBhY3Rpb24pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBuZXcgSGFuZGxlcihhY3Rpb24sIGNvbnRleHQgfHwgdGhpcyk7XHJcbiAgICAgICAgaGFuZGxlcnNbbmFtZV0ucHVzaChoYW5kbGVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXIgZXZlbnQsIGV2ZW50IHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgb25jZSBhbmQgdGhlbiByZW1vdmVkXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIG9uY2U6IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XHJcbiAgICAgICAgICAgIHNlbGYub2ZmKG5hbWUsIHdyYXBwZXIpO1xyXG4gICAgICAgICAgICBhY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub24obmFtZSwgd3JhcHBlciwgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2Ygb25jZSgnYmVmb3JlJyArIG5hbWUpXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIGJlZm9yZTogZnVuY3Rpb24obmFtZSwgYWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICAgICAgaWYgKCFuYW1lIHx8ICFhY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBuYW1lID0gJ2JlZm9yZScgKyBuYW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2Ygb25jZSgnYWZ0ZXInICsgbmFtZSlcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGFjdGlvblxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgYWZ0ZXI6IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmFtZSA9ICdhZnRlcicgKyBuYW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2Ygb24oJ3N1Y2Nlc3MnKVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGFjdGlvblxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgc3VjY2VzczogZnVuY3Rpb24oYWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub25jZSgnc3VjY2VzcycsIGFjdGlvbiwgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2Ygb24oJ2Vycm9yJylcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIGVycm9yOiBmdW5jdGlvbihhY3Rpb24sIGNvbnRleHQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vbmNlKCdlcnJvcicsIGFjdGlvbiwgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGV2ZW50IGxpc3RlbmVyXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBvZmY6IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbikge1xyXG5cclxuICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9faGFuZGxlcnNfXyB8fCAodGhpcy5fX2hhbmRsZXJzX189e30pO1xyXG5cclxuICAgICAgICBpZiAoIWFjdGlvbikge1xyXG4gICAgICAgICAgICBoYW5kbGVyc1tuYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChoYW5kbGVyc1tuYW1lXSkge1xyXG4gICAgICAgICAgICB2YXIgaGRscyA9IGhhbmRsZXJzW25hbWVdO1xyXG4gICAgICAgICAgICB2YXIgcmV0YWlucyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhkbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gJiYgaGRsc1tpXS5hY3Rpb24gIT09IGFjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldGFpbnMucHVzaChoZGxzW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBoYW5kbGVyc1tuYW1lXSA9IHJldGFpbnM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiByZWdpc3RlcmVkIHRoZSBldmVudCBoYW5kbGVyXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gIGFjdGlvblxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaGFzOiBmdW5jdGlvbihuYW1lLCBhY3Rpb24pIHtcclxuICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9faGFuZGxlcnNfXztcclxuXHJcbiAgICAgICAgaWYgKCEgaGFuZGxlcnMgfHxcclxuICAgICAgICAgICAgISBoYW5kbGVyc1tuYW1lXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBoZGxzID0gaGFuZGxlcnNbbmFtZV07XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChoZGxzW2ldLmFjdGlvbiA9PT0gYWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5vdGlmaWVyOyIsInZhciBndWlkID0gMDtcclxuXHJcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xyXG52YXIgbmF0aXZlRm9yRWFjaCA9IEFycmF5UHJvdG8uZm9yRWFjaDtcclxuXHJcbi8qKlxyXG4gKiBVdGlsIGZ1bmN0aW9uc1xyXG4gKiBAbmFtZXNwYWNlIGNsYXkuY29yZS51dGlsXHJcbiAqL1xyXG52YXIgdXRpbCA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIEdVSURcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBnZW5HVUlEOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuICsrZ3VpZDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFJlbGF0aXZlIHBhdGggdG8gYWJzb2x1dGUgcGF0aFxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBwYXRoXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGJhc2VQYXRoXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgcmVsYXRpdmUyYWJzb2x1dGU6IGZ1bmN0aW9uIChwYXRoLCBiYXNlUGF0aCkge1xyXG4gICAgICAgIGlmICghYmFzZVBhdGggfHwgcGF0aC5tYXRjaCgvXlxcLy8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcGF0aFBhcnRzID0gcGF0aC5zcGxpdCgnLycpO1xyXG4gICAgICAgIHZhciBiYXNlUGF0aFBhcnRzID0gYmFzZVBhdGguc3BsaXQoJy8nKTtcclxuXHJcbiAgICAgICAgdmFyIGl0ZW0gPSBwYXRoUGFydHNbMF07XHJcbiAgICAgICAgd2hpbGUoaXRlbSA9PT0gJy4nIHx8IGl0ZW0gPT09ICcuLicpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gPT09ICcuLicpIHtcclxuICAgICAgICAgICAgICAgIGJhc2VQYXRoUGFydHMucG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGF0aFBhcnRzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBwYXRoUGFydHNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBiYXNlUGF0aFBhcnRzLmpvaW4oJy8nKSArICcvJyArIHBhdGhQYXJ0cy5qb2luKCcvJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXh0ZW5kIHRhcmdldCB3aXRoIHNvdXJjZVxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gc291cmNlXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgZXh0ZW5kOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgICAgICBpZiAoc291cmNlKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gc291cmNlW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXh0ZW5kIHByb3BlcnRpZXMgdG8gdGFyZ2V0IGlmIG5vdCBleGlzdC5cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHNvdXJjZVxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIGRlZmF1bHRzOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgICAgICBpZiAoc291cmNlKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BOYW1lIGluIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldFtwcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wTmFtZV0gPSBzb3VyY2VbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBFeHRlbmQgcHJvcGVydGllcyB3aXRoIGEgZ2l2ZW4gcHJvcGVydHkgbGlzdCB0byBhdm9pZCBmb3IuLmluLi4gaXRlcmF0aW9uLlxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gc291cmNlXHJcbiAgICAgKiBAcGFyYW0gIHtBcnJheS48c3RyaW5nPn0gcHJvcExpc3RcclxuICAgICAqIEByZXR1cm4ge09iamVjdH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBleHRlbmRXaXRoUHJvcExpc3Q6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgcHJvcExpc3QpIHtcclxuICAgICAgICBpZiAoc291cmNlKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcm9wTmFtZSA9IHByb3BMaXN0W2ldO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BOYW1lXSA9IHNvdXJjZVtwcm9wTmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEV4dGVuZCBwcm9wZXJ0aWVzIHRvIHRhcmdldCBpZiBub3QgZXhpc3QuIFdpdGggYSBnaXZlbiBwcm9wZXJ0eSBsaXN0IGF2b2lkIGZvci4uaW4uLiBpdGVyYXRpb24uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBzb3VyY2VcclxuICAgICAqIEBwYXJhbSAge0FycmF5LjxzdHJpbmc+fSBwcm9wTGlzdFxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIGRlZmF1bHRzV2l0aFByb3BMaXN0OiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIHByb3BMaXN0KSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJvcE5hbWUgPSBwcm9wTGlzdFtpXTtcclxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRbcHJvcE5hbWVdID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcE5hbWVdID0gc291cmNlW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fEFycmF5fSBvYmpcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBpdGVyYXRvclxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBlYWNoOiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xyXG4gICAgICAgIGlmICghKG9iaiAmJiBpdGVyYXRvcikpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqLmZvckVhY2ggJiYgb2JqLmZvckVhY2ggPT09IG5hdGl2ZUZvckVhY2gpIHtcclxuICAgICAgICAgICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChvYmoubGVuZ3RoID09PSArIG9iai5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG9iai5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2tleV0sIGtleSwgb2JqKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyBvYmplY3RcclxuICAgICAqIEBwYXJhbSAge30gIG9ialxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBpc09iamVjdDogZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHJldHVybiBvYmogPT09IE9iamVjdChvYmopO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElzIGFycmF5ID9cclxuICAgICAqIEBwYXJhbSAge30gIG9ialxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBpc0FycmF5OiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkob2JqKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyBhcnJheSBsaWtlLCB3aGljaCBoYXZlIGEgbGVuZ3RoIHByb3BlcnR5XHJcbiAgICAgKiBAcGFyYW0gIHt9ICBvYmpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgaXNBcnJheUxpa2U6IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICBpZiAoIW9iaikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqLmxlbmd0aCA9PT0gKyBvYmoubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHt9IG9ialxyXG4gICAgICogQHJldHVybiB7fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgaWYgKCF1dGlsLmlzT2JqZWN0KG9iaikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9iajtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodXRpbC5pc0FycmF5KG9iaikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9iai5zbGljZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh1dGlsLmlzQXJyYXlMaWtlKG9iaikpIHsgLy8gaXMgdHlwZWQgYXJyYXlcclxuICAgICAgICAgICAgdmFyIHJldCA9IG5ldyBvYmouY29uc3RydWN0b3Iob2JqLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICByZXRbaV0gPSBvYmpbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1dGlsLmV4dGVuZCh7fSwgb2JqKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCB1dGlsO1xyXG4iLCJpbXBvcnQgZXh0ZW5kTWl4aW4gZnJvbSAnLi9taXhpbi9leHRlbmQnO1xyXG5pbXBvcnQgbm90aWZpZXJNaXhpbiBmcm9tICcuL21peGluL25vdGlmaWVyJztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi91dGlsJztcclxuXHJcbi8qKlxyXG4gKiBCYXNlIGNsYXNzIG9mIGFsbCBvYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5jb3JlLkJhc2VcclxuICogQG1peGVzIGNsYXkuY29yZS5taXhpbi5ub3RpZmllclxyXG4gKi9cclxudmFyIEJhc2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuX191aWRfXyA9IHV0aWwuZ2VuR1VJRCgpO1xyXG59O1xyXG5cclxuQmFzZS5fX2luaXRpYWxpemVyc19fID0gW1xyXG4gICAgZnVuY3Rpb24gKG9wdHMpIHtcclxuICAgICAgICB1dGlsLmV4dGVuZCh0aGlzLCBvcHRzKTtcclxuICAgIH1cclxuXTtcclxuXHJcbnV0aWwuZXh0ZW5kKEJhc2UsIGV4dGVuZE1peGluKTtcclxudXRpbC5leHRlbmQoQmFzZS5wcm90b3R5cGUsIG5vdGlmaWVyTWl4aW4pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmFzZTtcclxuIiwiZnVuY3Rpb24gZ2V0KG9wdGlvbnMpIHtcclxuXHJcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcblxyXG4gICAgeGhyLm9wZW4oJ2dldCcsIG9wdGlvbnMudXJsKTtcclxuICAgIC8vIFdpdGggcmVzcG9uc2UgdHlwZSBzZXQgYnJvd3NlciBjYW4gZ2V0IGFuZCBwdXQgYmluYXJ5IGRhdGFcclxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvRE9NL1hNTEh0dHBSZXF1ZXN0L1NlbmRpbmdfYW5kX1JlY2VpdmluZ19CaW5hcnlfRGF0YVxyXG4gICAgLy8gRGVmYXVsdCBpcyB0ZXh0LCBhbmQgaXQgY2FuIGJlIHNldFxyXG4gICAgLy8gYXJyYXlidWZmZXIsIGJsb2IsIGRvY3VtZW50LCBqc29uLCB0ZXh0XHJcbiAgICB4aHIucmVzcG9uc2VUeXBlID0gb3B0aW9ucy5yZXNwb25zZVR5cGUgfHwgJ3RleHQnO1xyXG5cclxuICAgIGlmIChvcHRpb25zLm9ucHJvZ3Jlc3MpIHtcclxuICAgICAgICAvL2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvRE9NL1hNTEh0dHBSZXF1ZXN0L1VzaW5nX1hNTEh0dHBSZXF1ZXN0XHJcbiAgICAgICAgeGhyLm9ucHJvZ3Jlc3MgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmxlbmd0aENvbXB1dGFibGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwZXJjZW50ID0gZS5sb2FkZWQgLyBlLnRvdGFsO1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vbnByb2dyZXNzKHBlcmNlbnQsIGUubG9hZGVkLCBlLnRvdGFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMub25wcm9ncmVzcyhudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIGlmICh4aHIuc3RhdHVzID49IDQwMCkge1xyXG4gICAgICAgICAgICBvcHRpb25zLm9uZXJyb3IgJiYgb3B0aW9ucy5vbmVycm9yKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvcHRpb25zLm9ubG9hZCAmJiBvcHRpb25zLm9ubG9hZCh4aHIucmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBpZiAob3B0aW9ucy5vbmVycm9yKSB7XHJcbiAgICAgICAgeGhyLm9uZXJyb3IgPSBvcHRpb25zLm9uZXJyb3I7XHJcbiAgICB9XHJcbiAgICB4aHIuc2VuZChudWxsKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgZ2V0OiBnZXRcclxufTtcclxuIiwiaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcclxuXHJcbnZhciBzdXBwb3J0V2ViR0w7XHJcblxyXG52YXIgdmVuZG9yID0ge307XHJcblxyXG4vKipcclxuICogSWYgc3VwcG9ydCBXZWJHTFxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKi9cclxudmVuZG9yLnN1cHBvcnRXZWJHTCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChzdXBwb3J0V2ViR0wgPT0gbnVsbCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgdmFyIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJykgfHwgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcpO1xyXG4gICAgICAgICAgICBpZiAoIWdsKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBzdXBwb3J0V2ViR0wgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1cHBvcnRXZWJHTDtcclxufTtcclxuXHJcbnZlbmRvci5JbnQ4QXJyYXkgPSB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IEFycmF5IDogSW50OEFycmF5O1xyXG5cclxudmVuZG9yLlVpbnQ4QXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IFVpbnQ4QXJyYXk7XHJcblxyXG52ZW5kb3IuVWludDE2QXJyYXkgPSB0eXBlb2YgVWludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBVaW50MTZBcnJheTtcclxuXHJcbnZlbmRvci5VaW50MzJBcnJheSA9IHR5cGVvZiBVaW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IFVpbnQzMkFycmF5O1xyXG5cclxudmVuZG9yLkludDE2QXJyYXkgPSB0eXBlb2YgSW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEludDE2QXJyYXk7XHJcblxyXG52ZW5kb3IuRmxvYXQzMkFycmF5ID0gdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEZsb2F0MzJBcnJheTtcclxuXHJcbnZlbmRvci5GbG9hdDY0QXJyYXkgPSB0eXBlb2YgRmxvYXQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IEFycmF5IDogRmxvYXQ2NEFycmF5O1xyXG5cclxudmFyIGcgPSB7fTtcclxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBnID0gd2luZG93O1xyXG59XHJcbmVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBnID0gZ2xvYmFsO1xyXG59XHJcblxyXG5cclxudmVuZG9yLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGcucmVxdWVzdEFuaW1hdGlvbkZyYW1lXHJcbiAgICB8fCBnLm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lXHJcbiAgICB8fCBnLm1velJlcXVlc3RBbmltYXRpb25GcmFtZVxyXG4gICAgfHwgZy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcclxuICAgIHx8IGZ1bmN0aW9uIChmdW5jKXsgc2V0VGltZW91dChmdW5jLCAxNik7IH07XHJcblxyXG52ZW5kb3IuY3JlYXRlQ2FudmFzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG59O1xyXG5cclxudmVuZG9yLmNyZWF0ZUltYWdlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIG5ldyBnLkltYWdlKCk7XHJcbn07XHJcblxyXG52ZW5kb3IucmVxdWVzdCA9IHtcclxuICAgIGdldDogcmVxdWVzdC5nZXRcclxufTtcclxuXHJcbnZlbmRvci5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGRvbSwgdHlwZSwgZnVuYywgdXNlQ2FwdHVyZSkge1xyXG4gICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZnVuYywgdXNlQ2FwdHVyZSk7XHJcbn07XHJcblxyXG52ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChkb20sIHR5cGUsIGZ1bmMpIHtcclxuICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmMpO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVuZG9yO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCBBbmltYXRvciBmcm9tICcuL2FuaW1hdGlvbi9BbmltYXRvcic7XHJcblxyXG5cclxuLyoqXHJcbiAqIEFuaW1hdGlvbiBpcyBnbG9iYWwgdGltZWxpbmUgdGhhdCBzY2hlZHVsZSBhbGwgY2xpcHMuIGVhY2ggZnJhbWUgYW5pbWF0aW9uIHdpbGwgc2V0IHRoZSB0aW1lIG9mIGNsaXBzIHRvIGN1cnJlbnQgYW5kIHVwZGF0ZSB0aGUgc3RhdGVzIG9mIGNsaXBzXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlRpbWVsaW5lXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIHZhciBhbmltYXRpb24gPSBuZXcgY2xheS5UaW1lbGluZSgpO1xyXG4gKiB2YXIgbm9kZSA9IG5ldyBjbGF5Lk5vZGUoKTtcclxuICogYW5pbWF0aW9uLmFuaW1hdGUobm9kZS5wb3NpdGlvbilcclxuICogICAgIC53aGVuKDEwMDAsIHtcclxuICogICAgICAgICB4OiA1MDAsXHJcbiAqICAgICAgICAgeTogNTAwXHJcbiAqICAgICB9KVxyXG4gKiAgICAgLndoZW4oMjAwMCwge1xyXG4gKiAgICAgICAgIHg6IDEwMCxcclxuICogICAgICAgICB5OiAxMDBcclxuICogICAgIH0pXHJcbiAqICAgICAud2hlbigzMDAwLCB7XHJcbiAqICAgICAgICAgejogMTBcclxuICogICAgIH0pXHJcbiAqICAgICAuc3RhcnQoJ3NwbGluZScpO1xyXG4gKi9cclxudmFyIFRpbWVsaW5lID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5UaW1lbGluZSMgKi97XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogc3RhZ2UgaXMgYW4gb2JqZWN0IHdpdGggcmVuZGVyIG1ldGhvZCwgZWFjaCBmcmFtZSBpZiB0aGVyZSBleGlzdHMgYW55IGFuaW1hdGluZyBjbGlwcywgc3RhZ2UucmVuZGVyIHdpbGwgYmUgY2FsbGVkXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzdGFnZTogbnVsbCxcclxuXHJcbiAgICAgICAgX2NsaXBzOiBbXSxcclxuXHJcbiAgICAgICAgX3J1bm5pbmc6IGZhbHNlLFxyXG5cclxuICAgICAgICBfdGltZTogMCxcclxuXHJcbiAgICAgICAgX3BhdXNlZDogZmFsc2UsXHJcblxyXG4gICAgICAgIF9wYXVzZWRUaW1lOiAwXHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuVGltZWxpbmUucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBhbmltYXRvclxyXG4gICAgICogQHBhcmFtIHtjbGF5LmFuaW1hdGUuQW5pbWF0b3J9IGFuaW1hdG9yXHJcbiAgICAgKi9cclxuICAgIGFkZEFuaW1hdG9yOiBmdW5jdGlvbiAoYW5pbWF0b3IpIHtcclxuICAgICAgICBhbmltYXRvci5hbmltYXRpb24gPSB0aGlzO1xyXG4gICAgICAgIHZhciBjbGlwcyA9IGFuaW1hdG9yLmdldENsaXBzKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGlwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFkZENsaXAoY2xpcHNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICAgICAqL1xyXG4gICAgYWRkQ2xpcDogZnVuY3Rpb24gKGNsaXApIHtcclxuICAgICAgICBpZiAodGhpcy5fY2xpcHMuaW5kZXhPZihjbGlwKSA8IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2xpcHMucHVzaChjbGlwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uQ2xpcH0gY2xpcFxyXG4gICAgICovXHJcbiAgICByZW1vdmVDbGlwOiBmdW5jdGlvbiAoY2xpcCkge1xyXG4gICAgICAgIHZhciBpZHggPSB0aGlzLl9jbGlwcy5pbmRleE9mKGNsaXApO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jbGlwcy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGFuaW1hdG9yXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuYW5pbWF0ZS5BbmltYXRvcn0gYW5pbWF0b3JcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQW5pbWF0b3I6IGZ1bmN0aW9uIChhbmltYXRvcikge1xyXG4gICAgICAgIHZhciBjbGlwcyA9IGFuaW1hdG9yLmdldENsaXBzKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGlwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNsaXAoY2xpcHNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhbmltYXRvci5hbmltYXRpb24gPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciB0aW1lID0gRGF0ZS5ub3coKSAtIHRoaXMuX3BhdXNlZFRpbWU7XHJcbiAgICAgICAgdmFyIGRlbHRhID0gdGltZSAtIHRoaXMuX3RpbWU7XHJcbiAgICAgICAgdmFyIGNsaXBzID0gdGhpcy5fY2xpcHM7XHJcbiAgICAgICAgdmFyIGxlbiA9IGNsaXBzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdmFyIGRlZmVycmVkRXZlbnRzID0gW107XHJcbiAgICAgICAgdmFyIGRlZmVycmVkQ2xpcHMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gY2xpcHNbaV07XHJcbiAgICAgICAgICAgIHZhciBlID0gY2xpcC5zdGVwKHRpbWUsIGRlbHRhLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIC8vIFRocm93IG91dCB0aGUgZXZlbnRzIG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyXHJcbiAgICAgICAgICAgIC8vIHN0YWdlLnJlbmRlciwgbGlrZSBmaW5pc2hcclxuICAgICAgICAgICAgaWYgKGUpIHtcclxuICAgICAgICAgICAgICAgIGRlZmVycmVkRXZlbnRzLnB1c2goZSk7XHJcbiAgICAgICAgICAgICAgICBkZWZlcnJlZENsaXBzLnB1c2goY2xpcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgZmluaXNoZWQgY2xpcFxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOykge1xyXG4gICAgICAgICAgICBpZiAoY2xpcHNbaV0uX25lZWRzUmVtb3ZlKSB7XHJcbiAgICAgICAgICAgICAgICBjbGlwc1tpXSA9IGNsaXBzW2xlbi0xXTtcclxuICAgICAgICAgICAgICAgIGNsaXBzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgbGVuLS07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxlbiA9IGRlZmVycmVkRXZlbnRzLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRlZmVycmVkQ2xpcHNbaV0uZmlyZShkZWZlcnJlZEV2ZW50c1tpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90aW1lID0gdGltZTtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdmcmFtZScsIGRlbHRhKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc3RhZ2UgJiYgdGhpcy5zdGFnZS5yZW5kZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFnZS5yZW5kZXIoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFydCBydW5uaW5nIGFuaW1hdGlvblxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5fcnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fdGltZSA9IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3BhdXNlZFRpbWUgPSAwO1xyXG5cclxuICAgICAgICB2YXIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gdmVuZG9yLnJlcXVlc3RBbmltYXRpb25GcmFtZTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcCgpIHtcclxuICAgICAgICAgICAgaWYgKHNlbGYuX3J1bm5pbmcpIHtcclxuXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFzZWxmLl9wYXVzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLl91cGRhdGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xyXG5cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFN0b3AgcnVubmluZyBhbmltYXRpb25cclxuICAgICAqL1xyXG4gICAgc3RvcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXVzZVxyXG4gICAgICovXHJcbiAgICBwYXVzZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlU3RhcnQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN1bWVcclxuICAgICAqL1xyXG4gICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wYXVzZWRUaW1lICs9IERhdGUubm93KCkgLSB0aGlzLl9wYXVzZVN0YXJ0O1xyXG4gICAgICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGFsbCBjbGlwc1xyXG4gICAgICovXHJcbiAgICByZW1vdmVDbGlwc0FsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NsaXBzID0gW107XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYW4gYW5pbWF0b3JcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtvcHRpb25zXVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW29wdGlvbnMubG9vcF1cclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb3B0aW9ucy5nZXR0ZXJdXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW29wdGlvbnMuc2V0dGVyXVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvcHRpb25zLmludGVycG9sYXRlcl1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICovXHJcbiAgICBhbmltYXRlOiBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zKSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICAgICAgdmFyIGFuaW1hdG9yID0gbmV3IEFuaW1hdG9yKFxyXG4gICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgIG9wdGlvbnMubG9vcCxcclxuICAgICAgICAgICAgb3B0aW9ucy5nZXR0ZXIsXHJcbiAgICAgICAgICAgIG9wdGlvbnMuc2V0dGVyLFxyXG4gICAgICAgICAgICBvcHRpb25zLmludGVycG9sYXRlclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYW5pbWF0b3IuYW5pbWF0aW9uID0gdGhpcztcclxuICAgICAgICByZXR1cm4gYW5pbWF0b3I7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGltZWxpbmU7XHJcbiIsIi8vIERFUFJFQ0FURURcclxuaW1wb3J0IFRpbWVsaW5lIGZyb20gJy4uL1RpbWVsaW5lJztcclxuZXhwb3J0IGRlZmF1bHQgVGltZWxpbmU7IiwiaW1wb3J0IENsaXAgZnJvbSAnLi9DbGlwJztcclxuXHJcbmltcG9ydCBxdWF0IGZyb20gJy4uL2dsbWF0cml4L3F1YXQnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcblxyXG4vKipcclxuICpcclxuICogQW5pbWF0aW9uIGNsaXAgdGhhdCBtYW5hZ2UgYSBjb2xsZWN0aW9uIG9mIHtAbGluayBjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t9XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hbmltYXRpb24uVHJhY2tDbGlwXHJcbiAqXHJcbiAqIEBleHRlbmRzIGNsYXkuYW5pbWF0aW9uLkNsaXBcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubmFtZV1cclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzLnRhcmdldF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmxpZmVdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5kZWxheV1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmdhcF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLnBsYXliYWNrUmF0aW9dXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbnxudW1iZXJ9IFtvcHRzLmxvb3BdIElmIGxvb3AgaXMgYSBudW1iZXIsIGl0IGluZGljYXRlIHRoZSBsb29wIGNvdW50IG9mIGFuaW1hdGlvblxyXG4gKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW29wdHMuZWFzaW5nXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZyYW1lXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZpbmlzaF1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25yZXN0YXJ0XVxyXG4gKiBAcGFyYW0ge0FycmF5LjxjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2s+fSBbb3B0cy50cmFja3NdXHJcbiAqL1xyXG52YXIgVHJhY2tDbGlwID0gZnVuY3Rpb24gKG9wdHMpIHtcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja1tdfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRyYWNrcyA9IG9wdHMudHJhY2tzIHx8IFtdO1xyXG5cclxuICAgIHRoaXMuY2FsY0xpZmVGcm9tVHJhY2tzKCk7XHJcbn07XHJcblxyXG5UcmFja0NsaXAucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGlwLnByb3RvdHlwZSk7XHJcblxyXG5UcmFja0NsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHJhY2tDbGlwO1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5zdGVwID0gZnVuY3Rpb24gKHRpbWUsIGRUaW1lLCBzaWxlbnQpIHtcclxuXHJcbiAgICB2YXIgcmV0ID0gQ2xpcC5wcm90b3R5cGUuc3RlcC5jYWxsKHRoaXMsIHRpbWUsIGRUaW1lLCB0cnVlKTtcclxuXHJcbiAgICBpZiAocmV0ICE9PSAnZmluaXNoJykge1xyXG4gICAgICAgIHZhciB0aW1lID0gdGhpcy5nZXRFbGFwc2VkVGltZSgpO1xyXG4gICAgICAgIC8vIFRPRE8gbGlmZSBtYXkgYmUgY2hhbmdlZC5cclxuICAgICAgICBpZiAodGhpcy5fcmFuZ2UpIHtcclxuICAgICAgICAgICAgdGltZSA9IHRoaXMuX3JhbmdlWzBdICsgdGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUaW1lKHRpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBFTkRJTkcgU2NoZWR1bGVcclxuICAgIGlmICghc2lsZW50ICYmIHJldCAhPT0gJ3BhdXNlZCcpIHtcclxuICAgICAgICB0aGlzLmZpcmUoJ2ZyYW1lJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSByYW5nZVxyXG4gKi9cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5zZXRSYW5nZSA9IGZ1bmN0aW9uIChyYW5nZSkge1xyXG4gICAgdGhpcy5jYWxjTGlmZUZyb21UcmFja3MoKTtcclxuICAgIHRoaXMuX3JhbmdlID0gcmFuZ2U7XHJcbiAgICBpZiAocmFuZ2UpIHtcclxuICAgICAgICByYW5nZVsxXSA9IE1hdGgubWluKHJhbmdlWzFdLCB0aGlzLmxpZmUpO1xyXG4gICAgICAgIHJhbmdlWzBdID0gTWF0aC5taW4ocmFuZ2VbMF0sIHRoaXMubGlmZSk7XHJcbiAgICAgICAgdGhpcy5saWZlID0gKHJhbmdlWzFdIC0gcmFuZ2VbMF0pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLnRyYWNrc1tpXS5zZXRUaW1lKHRpbWUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5jYWxjTGlmZUZyb21UcmFja3MgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmxpZmUgPSAwO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHRoaXMubGlmZSA9IE1hdGgubWF4KHRoaXMubGlmZSwgdGhpcy50cmFja3NbaV0uZ2V0TWF4VGltZSgpKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja30gdHJhY2tcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuYWRkVHJhY2sgPSBmdW5jdGlvbiAodHJhY2spIHtcclxuICAgIHRoaXMudHJhY2tzLnB1c2godHJhY2spO1xyXG4gICAgdGhpcy5jYWxjTGlmZUZyb21UcmFja3MoKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja30gdHJhY2tcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUucmVtb3ZlVGFyY2sgPSBmdW5jdGlvbiAodHJhY2spIHtcclxuICAgIHZhciBpZHggPSB0aGlzLnRyYWNrcy5pbmRleE9mKHRyYWNrKTtcclxuICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgIHRoaXMudHJhY2tzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFRpbWVcclxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFRpbWVcclxuICogQHBhcmFtIHtib29sZWFufSBpc0xvb3BcclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfVxyXG4gKi9cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5nZXRTdWJDbGlwID0gZnVuY3Rpb24gKHN0YXJ0VGltZSwgZW5kVGltZSwgaXNMb29wKSB7XHJcbiAgICB2YXIgc3ViQ2xpcCA9IG5ldyBUcmFja0NsaXAoe1xyXG4gICAgICAgIG5hbWU6IHRoaXMubmFtZVxyXG4gICAgfSk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBzdWJUcmFjayA9IHRoaXMudHJhY2tzW2ldLmdldFN1YlRyYWNrKHN0YXJ0VGltZSwgZW5kVGltZSk7XHJcbiAgICAgICAgc3ViQ2xpcC5hZGRUcmFjayhzdWJUcmFjayk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzTG9vcCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5zZXRMb29wKGlzTG9vcCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3ViQ2xpcC5saWZlID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcclxuXHJcbiAgICByZXR1cm4gc3ViQ2xpcDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiAxZCBibGVuZGluZyBmcm9tIHR3byBza2lubmluZyBjbGlwc1xyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDJcclxuICogQHBhcmFtICB7bnVtYmVyfSB3XHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLmJsZW5kMUQgPSBmdW5jdGlvbiAoY2xpcDEsIGNsaXAyLCB3KSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGMxID0gY2xpcDEudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciBjMiA9IGNsaXAyLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgdENsaXAgPSB0aGlzLnRyYWNrc1tpXTtcclxuXHJcbiAgICAgICAgdENsaXAuYmxlbmQxRChjMSwgYzIsIHcpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZGl0aXZlIGJsZW5kaW5nIGZyb20gdHdvIHNraW5uaW5nIGNsaXBzXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDFcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMlxyXG4gKi9cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5hZGRpdGl2ZUJsZW5kID0gZnVuY3Rpb24gKGNsaXAxLCBjbGlwMikge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBjMSA9IGNsaXAxLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgYzIgPSBjbGlwMi50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIHRDbGlwID0gdGhpcy50cmFja3NbaV07XHJcblxyXG4gICAgICAgIHRDbGlwLmFkZGl0aXZlQmxlbmQoYzEsIGMyKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBTdWJ0cmFjdGl2ZSBibGVuZGluZyBmcm9tIHR3byBza2lubmluZyBjbGlwc1xyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDJcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuc3VidHJhY3RpdmVCbGVuZCA9IGZ1bmN0aW9uIChjbGlwMSwgY2xpcDIpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYzEgPSBjbGlwMS50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIGMyID0gY2xpcDIudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciB0Q2xpcCA9IHRoaXMudHJhY2tzW2ldO1xyXG5cclxuICAgICAgICB0Q2xpcC5zdWJ0cmFjdGl2ZUJsZW5kKGMxLCBjMik7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogMkQgYmxlbmRpbmcgZnJvbSB0aHJlZSBza2lubmluZyBjbGlwc1xyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDJcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwM1xyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IGZcclxuICogQHBhcmFtICB7bnVtYmVyfSBnXHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLmJsZW5kMkQgPSBmdW5jdGlvbiAoY2xpcDEsIGNsaXAyLCBjbGlwMywgZiwgZykge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBjMSA9IGNsaXAxLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgYzIgPSBjbGlwMi50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIGMzID0gY2xpcDMudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciB0Q2xpcCA9IHRoaXMudHJhY2tzW2ldO1xyXG5cclxuICAgICAgICB0Q2xpcC5ibGVuZDJEKGMxLCBjMiwgYzMsIGYsIGcpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgU1JUIG9mIGFsbCBqb2ludHMgY2xpcHMgZnJvbSBhbm90aGVyIFRyYWNrQ2xpcFxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXBcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChjbGlwKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHNUcmFjayA9IGNsaXAudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciB0VHJhY2sgPSB0aGlzLnRyYWNrc1tpXTtcclxuXHJcbiAgICAgICAgdmVjMy5jb3B5KHRUcmFjay5wb3NpdGlvbiwgc1RyYWNrLnBvc2l0aW9uKTtcclxuICAgICAgICB2ZWMzLmNvcHkodFRyYWNrLnNjYWxlLCBzVHJhY2suc2NhbGUpO1xyXG4gICAgICAgIHF1YXQuY29weSh0VHJhY2sucm90YXRpb24sIHNUcmFjay5yb3RhdGlvbik7XHJcbiAgICB9XHJcbn07XHJcblxyXG5UcmFja0NsaXAucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGNsaXAgPSBDbGlwLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNsaXAuYWRkVHJhY2sodGhpcy50cmFja3NbaV0uY2xvbmUoKSk7XHJcbiAgICB9XHJcbiAgICBjbGlwLmxpZmUgPSB0aGlzLmxpZmU7XHJcbiAgICByZXR1cm4gY2xpcDtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRyYWNrQ2xpcDtcclxuIiwidmFyIEVYVEVOU0lPTl9MSVNUID0gW1xyXG4gICAgJ09FU190ZXh0dXJlX2Zsb2F0JyxcclxuICAgICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0JyxcclxuICAgICdPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXInLFxyXG4gICAgJ09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyJyxcclxuICAgICdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMnLFxyXG4gICAgJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JyxcclxuICAgICdPRVNfZWxlbWVudF9pbmRleF91aW50JyxcclxuICAgICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycsXHJcbiAgICAnV0VCR0xfZGVwdGhfdGV4dHVyZScsXHJcbiAgICAnRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyxcclxuICAgICdFWFRfc2hhZGVyX3RleHR1cmVfbG9kJyxcclxuICAgICdXRUJHTF9kcmF3X2J1ZmZlcnMnLFxyXG4gICAgJ0VYVF9mcmFnX2RlcHRoJyxcclxuICAgICdFWFRfc1JHQidcclxuXTtcclxuXHJcbnZhciBQQVJBTUVURVJfTkFNRVMgPSBbXHJcbiAgICAnTUFYX1RFWFRVUkVfU0laRScsXHJcbiAgICAnTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSdcclxuXTtcclxuXHJcbmZ1bmN0aW9uIEdMSW5mbyhfZ2wpIHtcclxuICAgIHZhciBleHRlbnNpb25zID0ge307XHJcbiAgICB2YXIgcGFyYW1ldGVycyA9IHt9O1xyXG5cclxuICAgIC8vIEdldCB3ZWJnbCBleHRlbnNpb25cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgRVhURU5TSU9OX0xJU1QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgZXh0TmFtZSA9IEVYVEVOU0lPTl9MSVNUW2ldO1xyXG4gICAgICAgIGNyZWF0ZUV4dGVuc2lvbihleHROYW1lKTtcclxuICAgIH1cclxuICAgIC8vIEdldCBwYXJhbWV0ZXJzXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IFBBUkFNRVRFUl9OQU1FUy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBuYW1lID0gUEFSQU1FVEVSX05BTUVTW2ldO1xyXG4gICAgICAgIHBhcmFtZXRlcnNbbmFtZV0gPSBfZ2wuZ2V0UGFyYW1ldGVyKF9nbFtuYW1lXSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIGlmICghKG5hbWUgaW4gZXh0ZW5zaW9ucykpIHtcclxuICAgICAgICAgICAgY3JlYXRlRXh0ZW5zaW9uKG5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXh0ZW5zaW9uc1tuYW1lXTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5nZXRQYXJhbWV0ZXIgPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBwYXJhbWV0ZXJzW25hbWVdO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmdldE1heEpvaW50TnVtYmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAxNTtcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gY3JlYXRlRXh0ZW5zaW9uKG5hbWUpIHtcclxuICAgICAgICBpZiAoX2dsLmdldEV4dGVuc2lvbikge1xyXG4gICAgICAgICAgICB2YXIgZXh0ID0gX2dsLmdldEV4dGVuc2lvbihuYW1lKTtcclxuICAgICAgICAgICAgaWYgKCFleHQpIHtcclxuICAgICAgICAgICAgICAgIGV4dCA9IF9nbC5nZXRFeHRlbnNpb24oJ01PWl8nICsgbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFleHQpIHtcclxuICAgICAgICAgICAgICAgIGV4dCA9IF9nbC5nZXRFeHRlbnNpb24oJ1dFQktJVF8nICsgbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZXh0ZW5zaW9uc1tuYW1lXSA9IGV4dDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdMSW5mbztcclxuIiwiLyoqXHJcbiAqIEBuYW1lc3BhY2UgY2xheS5jb3JlLmdsZW51bVxyXG4gKiBAc2VlIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc3BlY3MvbGF0ZXN0LzEuMC8jNS4xNFxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgLyogQ2xlYXJCdWZmZXJNYXNrICovXHJcbiAgICBERVBUSF9CVUZGRVJfQklUICAgICAgICAgICAgICAgOiAweDAwMDAwMTAwLFxyXG4gICAgU1RFTkNJTF9CVUZGRVJfQklUICAgICAgICAgICAgIDogMHgwMDAwMDQwMCxcclxuICAgIENPTE9SX0JVRkZFUl9CSVQgICAgICAgICAgICAgICA6IDB4MDAwMDQwMDAsXHJcblxyXG4gICAgLyogQmVnaW5Nb2RlICovXHJcbiAgICBQT0lOVFMgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDAsXHJcbiAgICBMSU5FUyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDEsXHJcbiAgICBMSU5FX0xPT1AgICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDIsXHJcbiAgICBMSU5FX1NUUklQICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDMsXHJcbiAgICBUUklBTkdMRVMgICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDQsXHJcbiAgICBUUklBTkdMRV9TVFJJUCAgICAgICAgICAgICAgICAgOiAweDAwMDUsXHJcbiAgICBUUklBTkdMRV9GQU4gICAgICAgICAgICAgICAgICAgOiAweDAwMDYsXHJcblxyXG4gICAgLyogQWxwaGFGdW5jdGlvbiAobm90IHN1cHBvcnRlZCBpbiBFUzIwKSAqL1xyXG4gICAgLyogICAgICBORVZFUiAqL1xyXG4gICAgLyogICAgICBMRVNTICovXHJcbiAgICAvKiAgICAgIEVRVUFMICovXHJcbiAgICAvKiAgICAgIExFUVVBTCAqL1xyXG4gICAgLyogICAgICBHUkVBVEVSICovXHJcbiAgICAvKiAgICAgIE5PVEVRVUFMICovXHJcbiAgICAvKiAgICAgIEdFUVVBTCAqL1xyXG4gICAgLyogICAgICBBTFdBWVMgKi9cclxuXHJcbiAgICAvKiBCbGVuZGluZ0ZhY3RvckRlc3QgKi9cclxuICAgIFpFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXHJcbiAgICBPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxLFxyXG4gICAgU1JDX0NPTE9SICAgICAgICAgICAgICAgICAgICAgIDogMHgwMzAwLFxyXG4gICAgT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgIDogMHgwMzAxLFxyXG4gICAgU1JDX0FMUEhBICAgICAgICAgICAgICAgICAgICAgIDogMHgwMzAyLFxyXG4gICAgT05FX01JTlVTX1NSQ19BTFBIQSAgICAgICAgICAgIDogMHgwMzAzLFxyXG4gICAgRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgIDogMHgwMzA0LFxyXG4gICAgT05FX01JTlVTX0RTVF9BTFBIQSAgICAgICAgICAgIDogMHgwMzA1LFxyXG5cclxuICAgIC8qIEJsZW5kaW5nRmFjdG9yU3JjICovXHJcbiAgICAvKiAgICAgIFpFUk8gKi9cclxuICAgIC8qICAgICAgT05FICovXHJcbiAgICBEU1RfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgOiAweDAzMDYsXHJcbiAgICBPTkVfTUlOVVNfRFNUX0NPTE9SICAgICAgICAgICAgOiAweDAzMDcsXHJcbiAgICBTUkNfQUxQSEFfU0FUVVJBVEUgICAgICAgICAgICAgOiAweDAzMDgsXHJcbiAgICAvKiAgICAgIFNSQ19BTFBIQSAqL1xyXG4gICAgLyogICAgICBPTkVfTUlOVVNfU1JDX0FMUEhBICovXHJcbiAgICAvKiAgICAgIERTVF9BTFBIQSAqL1xyXG4gICAgLyogICAgICBPTkVfTUlOVVNfRFNUX0FMUEhBICovXHJcblxyXG4gICAgLyogQmxlbmRFcXVhdGlvblNlcGFyYXRlICovXHJcbiAgICBGVU5DX0FERCAgICAgICAgICAgICAgICAgICAgICAgOiAweDgwMDYsXHJcbiAgICBCTEVORF9FUVVBVElPTiAgICAgICAgICAgICAgICAgOiAweDgwMDksXHJcbiAgICBCTEVORF9FUVVBVElPTl9SR0IgICAgICAgICAgICAgOiAweDgwMDksIC8qIHNhbWUgYXMgQkxFTkRfRVFVQVRJT04gKi9cclxuICAgIEJMRU5EX0VRVUFUSU9OX0FMUEhBICAgICAgICAgICA6IDB4ODgzRCxcclxuXHJcbiAgICAvKiBCbGVuZFN1YnRyYWN0ICovXHJcbiAgICBGVU5DX1NVQlRSQUNUICAgICAgICAgICAgICAgICAgOiAweDgwMEEsXHJcbiAgICBGVU5DX1JFVkVSU0VfU1VCVFJBQ1QgICAgICAgICAgOiAweDgwMEIsXHJcblxyXG4gICAgLyogU2VwYXJhdGUgQmxlbmQgRnVuY3Rpb25zICovXHJcbiAgICBCTEVORF9EU1RfUkdCICAgICAgICAgICAgICAgICAgOiAweDgwQzgsXHJcbiAgICBCTEVORF9TUkNfUkdCICAgICAgICAgICAgICAgICAgOiAweDgwQzksXHJcbiAgICBCTEVORF9EU1RfQUxQSEEgICAgICAgICAgICAgICAgOiAweDgwQ0EsXHJcbiAgICBCTEVORF9TUkNfQUxQSEEgICAgICAgICAgICAgICAgOiAweDgwQ0IsXHJcbiAgICBDT05TVEFOVF9DT0xPUiAgICAgICAgICAgICAgICAgOiAweDgwMDEsXHJcbiAgICBPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgICAgICAgOiAweDgwMDIsXHJcbiAgICBDT05TVEFOVF9BTFBIQSAgICAgICAgICAgICAgICAgOiAweDgwMDMsXHJcbiAgICBPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgICAgICAgOiAweDgwMDQsXHJcbiAgICBCTEVORF9DT0xPUiAgICAgICAgICAgICAgICAgICAgOiAweDgwMDUsXHJcblxyXG4gICAgLyogQnVmZmVyIE9iamVjdHMgKi9cclxuICAgIEFSUkFZX0JVRkZFUiAgICAgICAgICAgICAgICAgICA6IDB4ODg5MixcclxuICAgIEVMRU1FTlRfQVJSQVlfQlVGRkVSICAgICAgICAgICA6IDB4ODg5MyxcclxuICAgIEFSUkFZX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICA6IDB4ODg5NCxcclxuICAgIEVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICA6IDB4ODg5NSxcclxuXHJcbiAgICBTVFJFQU1fRFJBVyAgICAgICAgICAgICAgICAgICAgOiAweDg4RTAsXHJcbiAgICBTVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAgOiAweDg4RTQsXHJcbiAgICBEWU5BTUlDX0RSQVcgICAgICAgICAgICAgICAgICAgOiAweDg4RTgsXHJcblxyXG4gICAgQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgIDogMHg4NzY0LFxyXG4gICAgQlVGRkVSX1VTQUdFICAgICAgICAgICAgICAgICAgIDogMHg4NzY1LFxyXG5cclxuICAgIENVUlJFTlRfVkVSVEVYX0FUVFJJQiAgICAgICAgICA6IDB4ODYyNixcclxuXHJcbiAgICAvKiBDdWxsRmFjZU1vZGUgKi9cclxuICAgIEZST05UICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDQwNCxcclxuICAgIEJBQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDQwNSxcclxuICAgIEZST05UX0FORF9CQUNLICAgICAgICAgICAgICAgICA6IDB4MDQwOCxcclxuXHJcbiAgICAvKiBEZXB0aEZ1bmN0aW9uICovXHJcbiAgICAvKiAgICAgIE5FVkVSICovXHJcbiAgICAvKiAgICAgIExFU1MgKi9cclxuICAgIC8qICAgICAgRVFVQUwgKi9cclxuICAgIC8qICAgICAgTEVRVUFMICovXHJcbiAgICAvKiAgICAgIEdSRUFURVIgKi9cclxuICAgIC8qICAgICAgTk9URVFVQUwgKi9cclxuICAgIC8qICAgICAgR0VRVUFMICovXHJcbiAgICAvKiAgICAgIEFMV0FZUyAqL1xyXG5cclxuICAgIC8qIEVuYWJsZUNhcCAqL1xyXG4gICAgLyogVEVYVFVSRV8yRCAqL1xyXG4gICAgQ1VMTF9GQUNFICAgICAgICAgICAgICAgICAgICAgIDogMHgwQjQ0LFxyXG4gICAgQkxFTkQgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwQkUyLFxyXG4gICAgRElUSEVSICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwQkQwLFxyXG4gICAgU1RFTkNJTF9URVNUICAgICAgICAgICAgICAgICAgIDogMHgwQjkwLFxyXG4gICAgREVQVEhfVEVTVCAgICAgICAgICAgICAgICAgICAgIDogMHgwQjcxLFxyXG4gICAgU0NJU1NPUl9URVNUICAgICAgICAgICAgICAgICAgIDogMHgwQzExLFxyXG4gICAgUE9MWUdPTl9PRkZTRVRfRklMTCAgICAgICAgICAgIDogMHg4MDM3LFxyXG4gICAgU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFICAgICAgIDogMHg4MDlFLFxyXG4gICAgU0FNUExFX0NPVkVSQUdFICAgICAgICAgICAgICAgIDogMHg4MEEwLFxyXG5cclxuICAgIC8qIEVycm9yQ29kZSAqL1xyXG4gICAgTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgIDogMCxcclxuICAgIElOVkFMSURfRU5VTSAgICAgICAgICAgICAgICAgICA6IDB4MDUwMCxcclxuICAgIElOVkFMSURfVkFMVUUgICAgICAgICAgICAgICAgICA6IDB4MDUwMSxcclxuICAgIElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA6IDB4MDUwMixcclxuICAgIE9VVF9PRl9NRU1PUlkgICAgICAgICAgICAgICAgICA6IDB4MDUwNSxcclxuXHJcbiAgICAvKiBGcm9udEZhY2VEaXJlY3Rpb24gKi9cclxuICAgIENXICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDkwMCxcclxuICAgIENDVyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDkwMSxcclxuXHJcbiAgICAvKiBHZXRQTmFtZSAqL1xyXG4gICAgTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDogMHgwQjIxLFxyXG4gICAgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFICAgICAgIDogMHg4NDZELFxyXG4gICAgQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFICAgICAgIDogMHg4NDZFLFxyXG4gICAgQ1VMTF9GQUNFX01PREUgICAgICAgICAgICAgICAgIDogMHgwQjQ1LFxyXG4gICAgRlJPTlRfRkFDRSAgICAgICAgICAgICAgICAgICAgIDogMHgwQjQ2LFxyXG4gICAgREVQVEhfUkFOR0UgICAgICAgICAgICAgICAgICAgIDogMHgwQjcwLFxyXG4gICAgREVQVEhfV1JJVEVNQVNLICAgICAgICAgICAgICAgIDogMHgwQjcyLFxyXG4gICAgREVQVEhfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgIDogMHgwQjczLFxyXG4gICAgREVQVEhfRlVOQyAgICAgICAgICAgICAgICAgICAgIDogMHgwQjc0LFxyXG4gICAgU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAgICAgIDogMHgwQjkxLFxyXG4gICAgU1RFTkNJTF9GVU5DICAgICAgICAgICAgICAgICAgIDogMHgwQjkyLFxyXG4gICAgU1RFTkNJTF9GQUlMICAgICAgICAgICAgICAgICAgIDogMHgwQjk0LFxyXG4gICAgU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUwgICAgICAgIDogMHgwQjk1LFxyXG4gICAgU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MgICAgICAgIDogMHgwQjk2LFxyXG4gICAgU1RFTkNJTF9SRUYgICAgICAgICAgICAgICAgICAgIDogMHgwQjk3LFxyXG4gICAgU1RFTkNJTF9WQUxVRV9NQVNLICAgICAgICAgICAgIDogMHgwQjkzLFxyXG4gICAgU1RFTkNJTF9XUklURU1BU0sgICAgICAgICAgICAgIDogMHgwQjk4LFxyXG4gICAgU1RFTkNJTF9CQUNLX0ZVTkMgICAgICAgICAgICAgIDogMHg4ODAwLFxyXG4gICAgU1RFTkNJTF9CQUNLX0ZBSUwgICAgICAgICAgICAgIDogMHg4ODAxLFxyXG4gICAgU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCAgIDogMHg4ODAyLFxyXG4gICAgU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyAgIDogMHg4ODAzLFxyXG4gICAgU1RFTkNJTF9CQUNLX1JFRiAgICAgICAgICAgICAgIDogMHg4Q0EzLFxyXG4gICAgU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0sgICAgICAgIDogMHg4Q0E0LFxyXG4gICAgU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyAgICAgICAgIDogMHg4Q0E1LFxyXG4gICAgVklFV1BPUlQgICAgICAgICAgICAgICAgICAgICAgIDogMHgwQkEyLFxyXG4gICAgU0NJU1NPUl9CT1ggICAgICAgICAgICAgICAgICAgIDogMHgwQzEwLFxyXG4gICAgLyogICAgICBTQ0lTU09SX1RFU1QgKi9cclxuICAgIENPTE9SX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICA6IDB4MEMyMixcclxuICAgIENPTE9SX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA6IDB4MEMyMyxcclxuICAgIFVOUEFDS19BTElHTk1FTlQgICAgICAgICAgICAgICA6IDB4MENGNSxcclxuICAgIFBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgICA6IDB4MEQwNSxcclxuICAgIE1BWF9URVhUVVJFX1NJWkUgICAgICAgICAgICAgICA6IDB4MEQzMyxcclxuICAgIE1BWF9WSUVXUE9SVF9ESU1TICAgICAgICAgICAgICA6IDB4MEQzQSxcclxuICAgIFNVQlBJWEVMX0JJVFMgICAgICAgICAgICAgICAgICA6IDB4MEQ1MCxcclxuICAgIFJFRF9CSVRTICAgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1MixcclxuICAgIEdSRUVOX0JJVFMgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1MyxcclxuICAgIEJMVUVfQklUUyAgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1NCxcclxuICAgIEFMUEhBX0JJVFMgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1NSxcclxuICAgIERFUFRIX0JJVFMgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1NixcclxuICAgIFNURU5DSUxfQklUUyAgICAgICAgICAgICAgICAgICA6IDB4MEQ1NyxcclxuICAgIFBPTFlHT05fT0ZGU0VUX1VOSVRTICAgICAgICAgICA6IDB4MkEwMCxcclxuICAgIC8qICAgICAgUE9MWUdPTl9PRkZTRVRfRklMTCAqL1xyXG4gICAgUE9MWUdPTl9PRkZTRVRfRkFDVE9SICAgICAgICAgIDogMHg4MDM4LFxyXG4gICAgVEVYVFVSRV9CSU5ESU5HXzJEICAgICAgICAgICAgIDogMHg4MDY5LFxyXG4gICAgU0FNUExFX0JVRkZFUlMgICAgICAgICAgICAgICAgIDogMHg4MEE4LFxyXG4gICAgU0FNUExFUyAgICAgICAgICAgICAgICAgICAgICAgIDogMHg4MEE5LFxyXG4gICAgU0FNUExFX0NPVkVSQUdFX1ZBTFVFICAgICAgICAgIDogMHg4MEFBLFxyXG4gICAgU0FNUExFX0NPVkVSQUdFX0lOVkVSVCAgICAgICAgIDogMHg4MEFCLFxyXG5cclxuICAgIC8qIEdldFRleHR1cmVQYXJhbWV0ZXIgKi9cclxuICAgIC8qICAgICAgVEVYVFVSRV9NQUdfRklMVEVSICovXHJcbiAgICAvKiAgICAgIFRFWFRVUkVfTUlOX0ZJTFRFUiAqL1xyXG4gICAgLyogICAgICBURVhUVVJFX1dSQVBfUyAqL1xyXG4gICAgLyogICAgICBURVhUVVJFX1dSQVBfVCAqL1xyXG5cclxuICAgIENPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTICAgICA6IDB4ODZBMyxcclxuXHJcbiAgICAvKiBIaW50TW9kZSAqL1xyXG4gICAgRE9OVF9DQVJFICAgICAgICAgICAgICAgICAgICAgIDogMHgxMTAwLFxyXG4gICAgRkFTVEVTVCAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxMTAxLFxyXG4gICAgTklDRVNUICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxMTAyLFxyXG5cclxuICAgIC8qIEhpbnRUYXJnZXQgKi9cclxuICAgIEdFTkVSQVRFX01JUE1BUF9ISU5UICAgICAgICAgICAgOiAweDgxOTIsXHJcblxyXG4gICAgLyogRGF0YVR5cGUgKi9cclxuICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTQwMCxcclxuICAgIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICA6IDB4MTQwMSxcclxuICAgIFNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTQwMixcclxuICAgIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICA6IDB4MTQwMyxcclxuICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTQwNCxcclxuICAgIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICA6IDB4MTQwNSxcclxuICAgIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTQwNixcclxuXHJcbiAgICAvKiBQaXhlbEZvcm1hdCAqL1xyXG4gICAgREVQVEhfQ09NUE9ORU5UICAgICAgICAgICAgICAgIDogMHgxOTAyLFxyXG4gICAgQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxOTA2LFxyXG4gICAgUkdCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxOTA3LFxyXG4gICAgUkdCQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxOTA4LFxyXG4gICAgTFVNSU5BTkNFICAgICAgICAgICAgICAgICAgICAgIDogMHgxOTA5LFxyXG4gICAgTFVNSU5BTkNFX0FMUEhBICAgICAgICAgICAgICAgIDogMHgxOTBBLFxyXG5cclxuICAgIC8qIFBpeGVsVHlwZSAqL1xyXG4gICAgLyogICAgICBVTlNJR05FRF9CWVRFICovXHJcbiAgICBVTlNJR05FRF9TSE9SVF80XzRfNF80ICAgICAgICAgOiAweDgwMzMsXHJcbiAgICBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgOiAweDgwMzQsXHJcbiAgICBVTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAgICAgOiAweDgzNjMsXHJcblxyXG4gICAgLyogU2hhZGVycyAqL1xyXG4gICAgRlJBR01FTlRfU0hBREVSICAgICAgICAgICAgICAgICAgOiAweDhCMzAsXHJcbiAgICBWRVJURVhfU0hBREVSICAgICAgICAgICAgICAgICAgICA6IDB4OEIzMSxcclxuICAgIE1BWF9WRVJURVhfQVRUUklCUyAgICAgICAgICAgICAgIDogMHg4ODY5LFxyXG4gICAgTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgOiAweDhERkIsXHJcbiAgICBNQVhfVkFSWUlOR19WRUNUT1JTICAgICAgICAgICAgICA6IDB4OERGQyxcclxuICAgIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTIDogMHg4QjRELFxyXG4gICAgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgOiAweDhCNEMsXHJcbiAgICBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgICAgICAgICA6IDB4ODg3MixcclxuICAgIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMgICAgIDogMHg4REZELFxyXG4gICAgU0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgOiAweDhCNEYsXHJcbiAgICBERUxFVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgICA6IDB4OEI4MCxcclxuICAgIExJTktfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjgyLFxyXG4gICAgVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgOiAweDhCODMsXHJcbiAgICBBVFRBQ0hFRF9TSEFERVJTICAgICAgICAgICAgICAgICA6IDB4OEI4NSxcclxuICAgIEFDVElWRV9VTklGT1JNUyAgICAgICAgICAgICAgICAgIDogMHg4Qjg2LFxyXG4gICAgQUNUSVZFX0FUVFJJQlVURVMgICAgICAgICAgICAgICAgOiAweDhCODksXHJcbiAgICBTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04gICAgICAgICA6IDB4OEI4QyxcclxuICAgIENVUlJFTlRfUFJPR1JBTSAgICAgICAgICAgICAgICAgIDogMHg4QjhELFxyXG5cclxuICAgIC8qIFN0ZW5jaWxGdW5jdGlvbiAqL1xyXG4gICAgTkVWRVIgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjAwLFxyXG4gICAgTEVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjAxLFxyXG4gICAgRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjAyLFxyXG4gICAgTEVRVUFMICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjAzLFxyXG4gICAgR1JFQVRFUiAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjA0LFxyXG4gICAgTk9URVFVQUwgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjA1LFxyXG4gICAgR0VRVUFMICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjA2LFxyXG4gICAgQUxXQVlTICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjA3LFxyXG5cclxuICAgIC8qIFN0ZW5jaWxPcCAqL1xyXG4gICAgLyogICAgICBaRVJPICovXHJcbiAgICBLRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDFFMDAsXHJcbiAgICBSRVBMQUNFICAgICAgICAgICAgICAgICAgICAgICAgOiAweDFFMDEsXHJcbiAgICBJTkNSICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDFFMDIsXHJcbiAgICBERUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDFFMDMsXHJcbiAgICBJTlZFUlQgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE1MEEsXHJcbiAgICBJTkNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgOiAweDg1MDcsXHJcbiAgICBERUNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgOiAweDg1MDgsXHJcblxyXG4gICAgLyogU3RyaW5nTmFtZSAqL1xyXG4gICAgVkVORE9SICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRjAwLFxyXG4gICAgUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRjAxLFxyXG4gICAgVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRjAyLFxyXG5cclxuICAgIC8qIFRleHR1cmVNYWdGaWx0ZXIgKi9cclxuICAgIE5FQVJFU1QgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MjYwMCxcclxuICAgIExJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MjYwMSxcclxuXHJcbiAgICAvKiBUZXh0dXJlTWluRmlsdGVyICovXHJcbiAgICAvKiAgICAgIE5FQVJFU1QgKi9cclxuICAgIC8qICAgICAgTElORUFSICovXHJcbiAgICBORUFSRVNUX01JUE1BUF9ORUFSRVNUICAgICAgICAgOiAweDI3MDAsXHJcbiAgICBMSU5FQVJfTUlQTUFQX05FQVJFU1QgICAgICAgICAgOiAweDI3MDEsXHJcbiAgICBORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgOiAweDI3MDIsXHJcbiAgICBMSU5FQVJfTUlQTUFQX0xJTkVBUiAgICAgICAgICAgOiAweDI3MDMsXHJcblxyXG4gICAgLyogVGV4dHVyZVBhcmFtZXRlck5hbWUgKi9cclxuICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiAgICAgICAgICAgICA6IDB4MjgwMCxcclxuICAgIFRFWFRVUkVfTUlOX0ZJTFRFUiAgICAgICAgICAgICA6IDB4MjgwMSxcclxuICAgIFRFWFRVUkVfV1JBUF9TICAgICAgICAgICAgICAgICA6IDB4MjgwMixcclxuICAgIFRFWFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICA6IDB4MjgwMyxcclxuXHJcbiAgICAvKiBUZXh0dXJlVGFyZ2V0ICovXHJcbiAgICBURVhUVVJFXzJEICAgICAgICAgICAgICAgICAgICAgOiAweDBERTEsXHJcbiAgICBURVhUVVJFICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE3MDIsXHJcblxyXG4gICAgVEVYVFVSRV9DVUJFX01BUCAgICAgICAgICAgICAgIDogMHg4NTEzLFxyXG4gICAgVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQICAgICAgIDogMHg4NTE0LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICAgIDogMHg4NTE1LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YICAgIDogMHg4NTE2LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZICAgIDogMHg4NTE3LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZICAgIDogMHg4NTE4LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aICAgIDogMHg4NTE5LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aICAgIDogMHg4NTFBLFxyXG4gICAgTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSAgICAgIDogMHg4NTFDLFxyXG5cclxuICAgIC8qIFRleHR1cmVVbml0ICovXHJcbiAgICBURVhUVVJFMCAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzAsXHJcbiAgICBURVhUVVJFMSAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzEsXHJcbiAgICBURVhUVVJFMiAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzIsXHJcbiAgICBURVhUVVJFMyAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzMsXHJcbiAgICBURVhUVVJFNCAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzQsXHJcbiAgICBURVhUVVJFNSAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzUsXHJcbiAgICBURVhUVVJFNiAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzYsXHJcbiAgICBURVhUVVJFNyAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzcsXHJcbiAgICBURVhUVVJFOCAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzgsXHJcbiAgICBURVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzksXHJcbiAgICBURVhUVVJFMTAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0EsXHJcbiAgICBURVhUVVJFMTEgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0IsXHJcbiAgICBURVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0MsXHJcbiAgICBURVhUVVJFMTMgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0QsXHJcbiAgICBURVhUVVJFMTQgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0UsXHJcbiAgICBURVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0YsXHJcbiAgICBURVhUVVJFMTYgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDAsXHJcbiAgICBURVhUVVJFMTcgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDEsXHJcbiAgICBURVhUVVJFMTggICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDIsXHJcbiAgICBURVhUVVJFMTkgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDMsXHJcbiAgICBURVhUVVJFMjAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDQsXHJcbiAgICBURVhUVVJFMjEgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDUsXHJcbiAgICBURVhUVVJFMjIgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDYsXHJcbiAgICBURVhUVVJFMjMgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDcsXHJcbiAgICBURVhUVVJFMjQgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDgsXHJcbiAgICBURVhUVVJFMjUgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDksXHJcbiAgICBURVhUVVJFMjYgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REEsXHJcbiAgICBURVhUVVJFMjcgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REIsXHJcbiAgICBURVhUVVJFMjggICAgICAgICAgICAgICAgICAgICAgOiAweDg0REMsXHJcbiAgICBURVhUVVJFMjkgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REQsXHJcbiAgICBURVhUVVJFMzAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REUsXHJcbiAgICBURVhUVVJFMzEgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REYsXHJcbiAgICBBQ1RJVkVfVEVYVFVSRSAgICAgICAgICAgICAgICAgOiAweDg0RTAsXHJcblxyXG4gICAgLyogVGV4dHVyZVdyYXBNb2RlICovXHJcbiAgICBSRVBFQVQgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDI5MDEsXHJcbiAgICBDTEFNUF9UT19FREdFICAgICAgICAgICAgICAgICAgOiAweDgxMkYsXHJcbiAgICBNSVJST1JFRF9SRVBFQVQgICAgICAgICAgICAgICAgOiAweDgzNzAsXHJcblxyXG4gICAgLyogVW5pZm9ybSBUeXBlcyAqL1xyXG4gICAgRkxPQVRfVkVDMiAgICAgICAgICAgICAgICAgICAgIDogMHg4QjUwLFxyXG4gICAgRkxPQVRfVkVDMyAgICAgICAgICAgICAgICAgICAgIDogMHg4QjUxLFxyXG4gICAgRkxPQVRfVkVDNCAgICAgICAgICAgICAgICAgICAgIDogMHg4QjUyLFxyXG4gICAgSU5UX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjUzLFxyXG4gICAgSU5UX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU0LFxyXG4gICAgSU5UX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU1LFxyXG4gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU2LFxyXG4gICAgQk9PTF9WRUMyICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU3LFxyXG4gICAgQk9PTF9WRUMzICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU4LFxyXG4gICAgQk9PTF9WRUM0ICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU5LFxyXG4gICAgRkxPQVRfTUFUMiAgICAgICAgICAgICAgICAgICAgIDogMHg4QjVBLFxyXG4gICAgRkxPQVRfTUFUMyAgICAgICAgICAgICAgICAgICAgIDogMHg4QjVCLFxyXG4gICAgRkxPQVRfTUFUNCAgICAgICAgICAgICAgICAgICAgIDogMHg4QjVDLFxyXG4gICAgU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAgIDogMHg4QjVFLFxyXG4gICAgU0FNUExFUl9DVUJFICAgICAgICAgICAgICAgICAgIDogMHg4QjYwLFxyXG5cclxuICAgIC8qIFZlcnRleCBBcnJheXMgKi9cclxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAgOiAweDg2MjIsXHJcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX1NJWkUgICAgICAgICAgIDogMHg4NjIzLFxyXG4gICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUgICAgICAgICA6IDB4ODYyNCxcclxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSAgICAgICAgICAgOiAweDg2MjUsXHJcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQgICAgIDogMHg4ODZBLFxyXG4gICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSICAgICAgICA6IDB4ODY0NSxcclxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkcgOiAweDg4OUYsXHJcblxyXG4gICAgLyogU2hhZGVyIFNvdXJjZSAqL1xyXG4gICAgQ09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgIDogMHg4QjgxLFxyXG5cclxuICAgIC8qIFNoYWRlciBQcmVjaXNpb24tU3BlY2lmaWVkIFR5cGVzICovXHJcbiAgICBMT1dfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgOiAweDhERjAsXHJcbiAgICBNRURJVU1fRkxPQVQgICAgICAgICAgICAgICAgICAgOiAweDhERjEsXHJcbiAgICBISUdIX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgOiAweDhERjIsXHJcbiAgICBMT1dfSU5UICAgICAgICAgICAgICAgICAgICAgICAgOiAweDhERjMsXHJcbiAgICBNRURJVU1fSU5UICAgICAgICAgICAgICAgICAgICAgOiAweDhERjQsXHJcbiAgICBISUdIX0lOVCAgICAgICAgICAgICAgICAgICAgICAgOiAweDhERjUsXHJcblxyXG4gICAgLyogRnJhbWVidWZmZXIgT2JqZWN0LiAqL1xyXG4gICAgRlJBTUVCVUZGRVIgICAgICAgICAgICAgICAgICAgIDogMHg4RDQwLFxyXG4gICAgUkVOREVSQlVGRkVSICAgICAgICAgICAgICAgICAgIDogMHg4RDQxLFxyXG5cclxuICAgIFJHQkE0ICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4ODA1NixcclxuICAgIFJHQjVfQTEgICAgICAgICAgICAgICAgICAgICAgICA6IDB4ODA1NyxcclxuICAgIFJHQjU2NSAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEQ2MixcclxuICAgIERFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA6IDB4ODFBNSxcclxuICAgIFNURU5DSUxfSU5ERVggICAgICAgICAgICAgICAgICA6IDB4MTkwMSxcclxuICAgIFNURU5DSUxfSU5ERVg4ICAgICAgICAgICAgICAgICA6IDB4OEQ0OCxcclxuICAgIERFUFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICA6IDB4ODRGOSxcclxuXHJcbiAgICBSRU5ERVJCVUZGRVJfV0lEVEggICAgICAgICAgICAgOiAweDhENDIsXHJcbiAgICBSRU5ERVJCVUZGRVJfSEVJR0hUICAgICAgICAgICAgOiAweDhENDMsXHJcbiAgICBSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUICAgOiAweDhENDQsXHJcbiAgICBSRU5ERVJCVUZGRVJfUkVEX1NJWkUgICAgICAgICAgOiAweDhENTAsXHJcbiAgICBSRU5ERVJCVUZGRVJfR1JFRU5fU0laRSAgICAgICAgOiAweDhENTEsXHJcbiAgICBSRU5ERVJCVUZGRVJfQkxVRV9TSVpFICAgICAgICAgOiAweDhENTIsXHJcbiAgICBSRU5ERVJCVUZGRVJfQUxQSEFfU0laRSAgICAgICAgOiAweDhENTMsXHJcbiAgICBSRU5ERVJCVUZGRVJfREVQVEhfU0laRSAgICAgICAgOiAweDhENTQsXHJcbiAgICBSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFICAgICAgOiAweDhENTUsXHJcblxyXG4gICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSAgICAgICAgICAgOiAweDhDRDAsXHJcbiAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAgICA6IDB4OENEMSxcclxuICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTCAgICAgICAgIDogMHg4Q0QyLFxyXG4gICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0UgOiAweDhDRDMsXHJcblxyXG4gICAgQ09MT1JfQVRUQUNITUVOVDAgICAgICAgICAgICAgIDogMHg4Q0UwLFxyXG4gICAgREVQVEhfQVRUQUNITUVOVCAgICAgICAgICAgICAgIDogMHg4RDAwLFxyXG4gICAgU1RFTkNJTF9BVFRBQ0hNRU5UICAgICAgICAgICAgIDogMHg4RDIwLFxyXG4gICAgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UICAgICAgIDogMHg4MjFBLFxyXG5cclxuICAgIE5PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXHJcblxyXG4gICAgRlJBTUVCVUZGRVJfQ09NUExFVEUgICAgICAgICAgICAgICAgICAgICAgOiAweDhDRDUsXHJcbiAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgICAgICAgICA6IDB4OENENixcclxuICAgIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UIDogMHg4Q0Q3LFxyXG4gICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TICAgICAgICAgOiAweDhDRDksXHJcbiAgICBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCAgICAgICAgICAgICAgICAgICA6IDB4OENERCxcclxuXHJcbiAgICBGUkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgOiAweDhDQTYsXHJcbiAgICBSRU5ERVJCVUZGRVJfQklORElORyAgICAgICAgICAgOiAweDhDQTcsXHJcbiAgICBNQVhfUkVOREVSQlVGRkVSX1NJWkUgICAgICAgICAgOiAweDg0RTgsXHJcblxyXG4gICAgSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gIDogMHgwNTA2LFxyXG5cclxuICAgIC8qIFdlYkdMLXNwZWNpZmljIGVudW1zICovXHJcbiAgICBVTlBBQ0tfRkxJUF9ZX1dFQkdMICAgICAgICAgICAgOiAweDkyNDAsXHJcbiAgICBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgOiAweDkyNDEsXHJcbiAgICBDT05URVhUX0xPU1RfV0VCR0wgICAgICAgICAgICAgOiAweDkyNDIsXHJcbiAgICBVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIDogMHg5MjQzLFxyXG4gICAgQlJPV1NFUl9ERUZBVUxUX1dFQkdMICAgICAgICAgIDogMHg5MjQ0LFxyXG59O1xyXG4iLCIvKipcclxuICogU2ltcGxlIGRvdWJsZSBsaW5rZWQgbGlzdC4gQ29tcGFyZWQgd2l0aCBhcnJheSwgaXQgaGFzIE8oMSkgcmVtb3ZlIG9wZXJhdGlvbi5cclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmNvcmUuTGlua2VkTGlzdFxyXG4gKi9cclxudmFyIExpbmtlZExpc3QgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuaGVhZCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMudGFpbCA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5fbGVuZ3RoID0gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnNlcnQgYSBuZXcgdmFsdWUgYXQgdGhlIHRhaWxcclxuICogQHBhcmFtICB7fSB2YWxcclxuICogQHJldHVybiB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbiAodmFsKSB7XHJcbiAgICB2YXIgZW50cnkgPSBuZXcgTGlua2VkTGlzdC5FbnRyeSh2YWwpO1xyXG4gICAgdGhpcy5pbnNlcnRFbnRyeShlbnRyeSk7XHJcbiAgICByZXR1cm4gZW50cnk7XHJcbn07XHJcblxyXG4vKipcclxuICogSW5zZXJ0IGEgbmV3IHZhbHVlIGF0IGlkeFxyXG4gKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAqIEBwYXJhbSAge30gdmFsXHJcbiAqIEByZXR1cm4ge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuaW5zZXJ0QXQgPSBmdW5jdGlvbiAoaWR4LCB2YWwpIHtcclxuICAgIGlmIChpZHggPCAwKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIG5leHQgPSB0aGlzLmhlYWQ7XHJcbiAgICB2YXIgY3Vyc29yID0gMDtcclxuICAgIHdoaWxlIChuZXh0ICYmIGN1cnNvciAhPSBpZHgpIHtcclxuICAgICAgICBuZXh0ID0gbmV4dC5uZXh0O1xyXG4gICAgICAgIGN1cnNvcisrO1xyXG4gICAgfVxyXG4gICAgaWYgKG5leHQpIHtcclxuICAgICAgICB2YXIgZW50cnkgPSBuZXcgTGlua2VkTGlzdC5FbnRyeSh2YWwpO1xyXG4gICAgICAgIHZhciBwcmV2ID0gbmV4dC5wcmV2O1xyXG4gICAgICAgIGlmICghcHJldikgeyAvL25leHQgaXMgaGVhZFxyXG4gICAgICAgICAgICB0aGlzLmhlYWQgPSBlbnRyeTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHByZXYubmV4dCA9IGVudHJ5O1xyXG4gICAgICAgICAgICBlbnRyeS5wcmV2ID0gcHJldjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZW50cnkubmV4dCA9IG5leHQ7XHJcbiAgICAgICAgbmV4dC5wcmV2ID0gZW50cnk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmluc2VydCh2YWwpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlRW50cnkgPSBmdW5jdGlvbiAodmFsLCBuZXh0KSB7XHJcbiAgICB2YXIgZW50cnkgPSBuZXcgTGlua2VkTGlzdC5FbnRyeSh2YWwpO1xyXG4gICAgdmFyIHByZXYgPSBuZXh0LnByZXY7XHJcbiAgICBpZiAoIXByZXYpIHsgLy9uZXh0IGlzIGhlYWRcclxuICAgICAgICB0aGlzLmhlYWQgPSBlbnRyeTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHByZXYubmV4dCA9IGVudHJ5O1xyXG4gICAgICAgIGVudHJ5LnByZXYgPSBwcmV2O1xyXG4gICAgfVxyXG4gICAgZW50cnkubmV4dCA9IG5leHQ7XHJcbiAgICBuZXh0LnByZXYgPSBlbnRyeTtcclxuXHJcbiAgICB0aGlzLl9sZW5ndGgrKztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnNlcnQgYW4gZW50cnkgYXQgdGhlIHRhaWxcclxuICogQHBhcmFtICB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9IGVudHJ5XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5pbnNlcnRFbnRyeSA9IGZ1bmN0aW9uIChlbnRyeSkge1xyXG4gICAgaWYgKCF0aGlzLmhlYWQpIHtcclxuICAgICAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBlbnRyeTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMudGFpbC5uZXh0ID0gZW50cnk7XHJcbiAgICAgICAgZW50cnkucHJldiA9IHRoaXMudGFpbDtcclxuICAgICAgICB0aGlzLnRhaWwgPSBlbnRyeTtcclxuICAgIH1cclxuICAgIHRoaXMuX2xlbmd0aCsrO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSBlbnRyeS5cclxuICogQHBhcmFtICB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9IGVudHJ5XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoZW50cnkpIHtcclxuICAgIHZhciBwcmV2ID0gZW50cnkucHJldjtcclxuICAgIHZhciBuZXh0ID0gZW50cnkubmV4dDtcclxuICAgIGlmIChwcmV2KSB7XHJcbiAgICAgICAgcHJldi5uZXh0ID0gbmV4dDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIElzIGhlYWRcclxuICAgICAgICB0aGlzLmhlYWQgPSBuZXh0O1xyXG4gICAgfVxyXG4gICAgaWYgKG5leHQpIHtcclxuICAgICAgICBuZXh0LnByZXYgPSBwcmV2O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gSXMgdGFpbFxyXG4gICAgICAgIHRoaXMudGFpbCA9IHByZXY7XHJcbiAgICB9XHJcbiAgICBlbnRyeS5uZXh0ID0gZW50cnkucHJldiA9IG51bGw7XHJcbiAgICB0aGlzLl9sZW5ndGgtLTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZW1vdmUgZW50cnkgYXQgaW5kZXguXHJcbiAqIEBwYXJhbSAge251bWJlcn0gaWR4XHJcbiAqIEByZXR1cm4ge31cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLnJlbW92ZUF0ID0gZnVuY3Rpb24gKGlkeCkge1xyXG4gICAgaWYgKGlkeCA8IDApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgY3VyciA9IHRoaXMuaGVhZDtcclxuICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgd2hpbGUgKGN1cnIgJiYgY3Vyc29yICE9IGlkeCkge1xyXG4gICAgICAgIGN1cnIgPSBjdXJyLm5leHQ7XHJcbiAgICAgICAgY3Vyc29yKys7XHJcbiAgICB9XHJcbiAgICBpZiAoY3Vycikge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlKGN1cnIpO1xyXG4gICAgICAgIHJldHVybiBjdXJyLnZhbHVlO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogR2V0IGhlYWQgdmFsdWVcclxuICogQHJldHVybiB7fVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuZ2V0SGVhZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLmhlYWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oZWFkLnZhbHVlO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogR2V0IHRhaWwgdmFsdWVcclxuICogQHJldHVybiB7fVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuZ2V0VGFpbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLnRhaWwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50YWlsLnZhbHVlO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogR2V0IHZhbHVlIGF0IGlkeFxyXG4gKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAqIEByZXR1cm4ge31cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmdldEF0ID0gZnVuY3Rpb24gKGlkeCkge1xyXG4gICAgaWYgKGlkeCA8IDApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgY3VyciA9IHRoaXMuaGVhZDtcclxuICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgd2hpbGUgKGN1cnIgJiYgY3Vyc29yICE9IGlkeCkge1xyXG4gICAgICAgIGN1cnIgPSBjdXJyLm5leHQ7XHJcbiAgICAgICAgY3Vyc29yKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3Vyci52YWx1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHt9IHZhbHVlXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHZhciBjdXJyID0gdGhpcy5oZWFkO1xyXG4gICAgdmFyIGN1cnNvciA9IDA7XHJcbiAgICB3aGlsZSAoY3Vycikge1xyXG4gICAgICAgIGlmIChjdXJyLnZhbHVlID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY3Vyc29yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyID0gY3Vyci5uZXh0O1xyXG4gICAgICAgIGN1cnNvcisrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLl9sZW5ndGg7XHJcbn07XHJcblxyXG4vKipcclxuICogSWYgbGlzdCBpcyBlbXB0eVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLl9sZW5ndGggPT09IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7RnVuY3Rpb259IGNiXHJcbiAqIEBwYXJhbSAge30gY29udGV4dFxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYiwgY29udGV4dCkge1xyXG4gICAgdmFyIGN1cnIgPSB0aGlzLmhlYWQ7XHJcbiAgICB2YXIgaWR4ID0gMDtcclxuICAgIHZhciBoYXZlQ29udGV4dCA9IHR5cGVvZihjb250ZXh0KSAhPSAndW5kZWZpbmVkJztcclxuICAgIHdoaWxlIChjdXJyKSB7XHJcbiAgICAgICAgaWYgKGhhdmVDb250ZXh0KSB7XHJcbiAgICAgICAgICAgIGNiLmNhbGwoY29udGV4dCwgY3Vyci52YWx1ZSwgaWR4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNiKGN1cnIudmFsdWUsIGlkeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cnIgPSBjdXJyLm5leHQ7XHJcbiAgICAgICAgaWR4Kys7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xlYXIgdGhlIGxpc3RcclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy50YWlsID0gdGhpcy5oZWFkID0gbnVsbDtcclxuICAgIHRoaXMuX2xlbmd0aCA9IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBwYXJhbSB7fSB2YWxcclxuICovXHJcbkxpbmtlZExpc3QuRW50cnkgPSBmdW5jdGlvbiAodmFsKSB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt9XHJcbiAgICAgKi9cclxuICAgIHRoaXMudmFsdWUgPSB2YWw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubmV4dCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucHJldiA9IG51bGw7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaW5rZWRMaXN0O1xyXG4iLCJpbXBvcnQgTGlua2VkTGlzdCBmcm9tICcuL0xpbmtlZExpc3QnO1xyXG5cclxuLyoqXHJcbiAqIExSVSBDYWNoZVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuY29yZS5MUlVcclxuICovXHJcbnZhciBMUlUgPSBmdW5jdGlvbiAobWF4U2l6ZSkge1xyXG5cclxuICAgIHRoaXMuX2xpc3QgPSBuZXcgTGlua2VkTGlzdCgpO1xyXG5cclxuICAgIHRoaXMuX21hcCA9IHt9O1xyXG5cclxuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplIHx8IDEwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBjYWNoZSBtYXggc2l6ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gc2l6ZVxyXG4gKi9cclxuTFJVLnByb3RvdHlwZS5zZXRNYXhTaXplID0gZnVuY3Rpb24gKHNpemUpIHtcclxuICAgIHRoaXMuX21heFNpemUgPSBzaXplO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge3N0cmluZ30ga2V5XHJcbiAqIEBwYXJhbSAge30gdmFsdWVcclxuICovXHJcbkxSVS5wcm90b3R5cGUucHV0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgIGlmICghdGhpcy5fbWFwLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICB2YXIgbGVuID0gdGhpcy5fbGlzdC5sZW5ndGgoKTtcclxuICAgICAgICBpZiAobGVuID49IHRoaXMuX21heFNpemUgJiYgbGVuID4gMCkge1xyXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWRcclxuICAgICAgICAgICAgdmFyIGxlYXN0VXNlZEVudHJ5ID0gdGhpcy5fbGlzdC5oZWFkO1xyXG4gICAgICAgICAgICB0aGlzLl9saXN0LnJlbW92ZShsZWFzdFVzZWRFbnRyeSk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9tYXBbbGVhc3RVc2VkRW50cnkua2V5XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuX2xpc3QuaW5zZXJ0KHZhbHVlKTtcclxuICAgICAgICBlbnRyeS5rZXkgPSBrZXk7XHJcbiAgICAgICAgdGhpcy5fbWFwW2tleV0gPSBlbnRyeTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGtleVxyXG4gKiBAcmV0dXJuIHt9XHJcbiAqL1xyXG5MUlUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgIHZhciBlbnRyeSA9IHRoaXMuX21hcFtrZXldO1xyXG4gICAgaWYgKHRoaXMuX21hcC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgLy8gUHV0IHRoZSBsYXRlc3QgdXNlZCBlbnRyeSBpbiB0aGUgdGFpbFxyXG4gICAgICAgIGlmIChlbnRyeSAhPT0gdGhpcy5fbGlzdC50YWlsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpc3QucmVtb3ZlKGVudHJ5KTtcclxuICAgICAgICAgICAgdGhpcy5fbGlzdC5pbnNlcnRFbnRyeShlbnRyeSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxyXG4gKi9cclxuTFJVLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICB2YXIgZW50cnkgPSB0aGlzLl9tYXBba2V5XTtcclxuICAgIGlmICh0eXBlb2YoZW50cnkpICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9tYXBba2V5XTtcclxuICAgICAgICB0aGlzLl9saXN0LnJlbW92ZShlbnRyeSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xlYXIgdGhlIGNhY2hlXHJcbiAqL1xyXG5MUlUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fbGlzdC5jbGVhcigpO1xyXG4gICAgdGhpcy5fbWFwID0ge307XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMUlU7XHJcbiIsIi8qKlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkuY29yZS5jb2xvclxyXG4gKi9cclxuaW1wb3J0IExSVSBmcm9tICcuLi9jb3JlL0xSVSc7XHJcblxyXG52YXIgY29sb3JVdGlsID0ge307XHJcblxyXG52YXIga0NTU0NvbG9yVGFibGUgPSB7XHJcbiAgICAndHJhbnNwYXJlbnQnOiBbMCwwLDAsMF0sICdhbGljZWJsdWUnOiBbMjQwLDI0OCwyNTUsMV0sXHJcbiAgICAnYW50aXF1ZXdoaXRlJzogWzI1MCwyMzUsMjE1LDFdLCAnYXF1YSc6IFswLDI1NSwyNTUsMV0sXHJcbiAgICAnYXF1YW1hcmluZSc6IFsxMjcsMjU1LDIxMiwxXSwgJ2F6dXJlJzogWzI0MCwyNTUsMjU1LDFdLFxyXG4gICAgJ2JlaWdlJzogWzI0NSwyNDUsMjIwLDFdLCAnYmlzcXVlJzogWzI1NSwyMjgsMTk2LDFdLFxyXG4gICAgJ2JsYWNrJzogWzAsMCwwLDFdLCAnYmxhbmNoZWRhbG1vbmQnOiBbMjU1LDIzNSwyMDUsMV0sXHJcbiAgICAnYmx1ZSc6IFswLDAsMjU1LDFdLCAnYmx1ZXZpb2xldCc6IFsxMzgsNDMsMjI2LDFdLFxyXG4gICAgJ2Jyb3duJzogWzE2NSw0Miw0MiwxXSwgJ2J1cmx5d29vZCc6IFsyMjIsMTg0LDEzNSwxXSxcclxuICAgICdjYWRldGJsdWUnOiBbOTUsMTU4LDE2MCwxXSwgJ2NoYXJ0cmV1c2UnOiBbMTI3LDI1NSwwLDFdLFxyXG4gICAgJ2Nob2NvbGF0ZSc6IFsyMTAsMTA1LDMwLDFdLCAnY29yYWwnOiBbMjU1LDEyNyw4MCwxXSxcclxuICAgICdjb3JuZmxvd2VyYmx1ZSc6IFsxMDAsMTQ5LDIzNywxXSwgJ2Nvcm5zaWxrJzogWzI1NSwyNDgsMjIwLDFdLFxyXG4gICAgJ2NyaW1zb24nOiBbMjIwLDIwLDYwLDFdLCAnY3lhbic6IFswLDI1NSwyNTUsMV0sXHJcbiAgICAnZGFya2JsdWUnOiBbMCwwLDEzOSwxXSwgJ2RhcmtjeWFuJzogWzAsMTM5LDEzOSwxXSxcclxuICAgICdkYXJrZ29sZGVucm9kJzogWzE4NCwxMzQsMTEsMV0sICdkYXJrZ3JheSc6IFsxNjksMTY5LDE2OSwxXSxcclxuICAgICdkYXJrZ3JlZW4nOiBbMCwxMDAsMCwxXSwgJ2RhcmtncmV5JzogWzE2OSwxNjksMTY5LDFdLFxyXG4gICAgJ2RhcmtraGFraSc6IFsxODksMTgzLDEwNywxXSwgJ2RhcmttYWdlbnRhJzogWzEzOSwwLDEzOSwxXSxcclxuICAgICdkYXJrb2xpdmVncmVlbic6IFs4NSwxMDcsNDcsMV0sICdkYXJrb3JhbmdlJzogWzI1NSwxNDAsMCwxXSxcclxuICAgICdkYXJrb3JjaGlkJzogWzE1Myw1MCwyMDQsMV0sICdkYXJrcmVkJzogWzEzOSwwLDAsMV0sXHJcbiAgICAnZGFya3NhbG1vbic6IFsyMzMsMTUwLDEyMiwxXSwgJ2RhcmtzZWFncmVlbic6IFsxNDMsMTg4LDE0MywxXSxcclxuICAgICdkYXJrc2xhdGVibHVlJzogWzcyLDYxLDEzOSwxXSwgJ2RhcmtzbGF0ZWdyYXknOiBbNDcsNzksNzksMV0sXHJcbiAgICAnZGFya3NsYXRlZ3JleSc6IFs0Nyw3OSw3OSwxXSwgJ2Rhcmt0dXJxdW9pc2UnOiBbMCwyMDYsMjA5LDFdLFxyXG4gICAgJ2Rhcmt2aW9sZXQnOiBbMTQ4LDAsMjExLDFdLCAnZGVlcHBpbmsnOiBbMjU1LDIwLDE0NywxXSxcclxuICAgICdkZWVwc2t5Ymx1ZSc6IFswLDE5MSwyNTUsMV0sICdkaW1ncmF5JzogWzEwNSwxMDUsMTA1LDFdLFxyXG4gICAgJ2RpbWdyZXknOiBbMTA1LDEwNSwxMDUsMV0sICdkb2RnZXJibHVlJzogWzMwLDE0NCwyNTUsMV0sXHJcbiAgICAnZmlyZWJyaWNrJzogWzE3OCwzNCwzNCwxXSwgJ2Zsb3JhbHdoaXRlJzogWzI1NSwyNTAsMjQwLDFdLFxyXG4gICAgJ2ZvcmVzdGdyZWVuJzogWzM0LDEzOSwzNCwxXSwgJ2Z1Y2hzaWEnOiBbMjU1LDAsMjU1LDFdLFxyXG4gICAgJ2dhaW5zYm9ybyc6IFsyMjAsMjIwLDIyMCwxXSwgJ2dob3N0d2hpdGUnOiBbMjQ4LDI0OCwyNTUsMV0sXHJcbiAgICAnZ29sZCc6IFsyNTUsMjE1LDAsMV0sICdnb2xkZW5yb2QnOiBbMjE4LDE2NSwzMiwxXSxcclxuICAgICdncmF5JzogWzEyOCwxMjgsMTI4LDFdLCAnZ3JlZW4nOiBbMCwxMjgsMCwxXSxcclxuICAgICdncmVlbnllbGxvdyc6IFsxNzMsMjU1LDQ3LDFdLCAnZ3JleSc6IFsxMjgsMTI4LDEyOCwxXSxcclxuICAgICdob25leWRldyc6IFsyNDAsMjU1LDI0MCwxXSwgJ2hvdHBpbmsnOiBbMjU1LDEwNSwxODAsMV0sXHJcbiAgICAnaW5kaWFucmVkJzogWzIwNSw5Miw5MiwxXSwgJ2luZGlnbyc6IFs3NSwwLDEzMCwxXSxcclxuICAgICdpdm9yeSc6IFsyNTUsMjU1LDI0MCwxXSwgJ2toYWtpJzogWzI0MCwyMzAsMTQwLDFdLFxyXG4gICAgJ2xhdmVuZGVyJzogWzIzMCwyMzAsMjUwLDFdLCAnbGF2ZW5kZXJibHVzaCc6IFsyNTUsMjQwLDI0NSwxXSxcclxuICAgICdsYXduZ3JlZW4nOiBbMTI0LDI1MiwwLDFdLCAnbGVtb25jaGlmZm9uJzogWzI1NSwyNTAsMjA1LDFdLFxyXG4gICAgJ2xpZ2h0Ymx1ZSc6IFsxNzMsMjE2LDIzMCwxXSwgJ2xpZ2h0Y29yYWwnOiBbMjQwLDEyOCwxMjgsMV0sXHJcbiAgICAnbGlnaHRjeWFuJzogWzIyNCwyNTUsMjU1LDFdLCAnbGlnaHRnb2xkZW5yb2R5ZWxsb3cnOiBbMjUwLDI1MCwyMTAsMV0sXHJcbiAgICAnbGlnaHRncmF5JzogWzIxMSwyMTEsMjExLDFdLCAnbGlnaHRncmVlbic6IFsxNDQsMjM4LDE0NCwxXSxcclxuICAgICdsaWdodGdyZXknOiBbMjExLDIxMSwyMTEsMV0sICdsaWdodHBpbmsnOiBbMjU1LDE4MiwxOTMsMV0sXHJcbiAgICAnbGlnaHRzYWxtb24nOiBbMjU1LDE2MCwxMjIsMV0sICdsaWdodHNlYWdyZWVuJzogWzMyLDE3OCwxNzAsMV0sXHJcbiAgICAnbGlnaHRza3libHVlJzogWzEzNSwyMDYsMjUwLDFdLCAnbGlnaHRzbGF0ZWdyYXknOiBbMTE5LDEzNiwxNTMsMV0sXHJcbiAgICAnbGlnaHRzbGF0ZWdyZXknOiBbMTE5LDEzNiwxNTMsMV0sICdsaWdodHN0ZWVsYmx1ZSc6IFsxNzYsMTk2LDIyMiwxXSxcclxuICAgICdsaWdodHllbGxvdyc6IFsyNTUsMjU1LDIyNCwxXSwgJ2xpbWUnOiBbMCwyNTUsMCwxXSxcclxuICAgICdsaW1lZ3JlZW4nOiBbNTAsMjA1LDUwLDFdLCAnbGluZW4nOiBbMjUwLDI0MCwyMzAsMV0sXHJcbiAgICAnbWFnZW50YSc6IFsyNTUsMCwyNTUsMV0sICdtYXJvb24nOiBbMTI4LDAsMCwxXSxcclxuICAgICdtZWRpdW1hcXVhbWFyaW5lJzogWzEwMiwyMDUsMTcwLDFdLCAnbWVkaXVtYmx1ZSc6IFswLDAsMjA1LDFdLFxyXG4gICAgJ21lZGl1bW9yY2hpZCc6IFsxODYsODUsMjExLDFdLCAnbWVkaXVtcHVycGxlJzogWzE0NywxMTIsMjE5LDFdLFxyXG4gICAgJ21lZGl1bXNlYWdyZWVuJzogWzYwLDE3OSwxMTMsMV0sICdtZWRpdW1zbGF0ZWJsdWUnOiBbMTIzLDEwNCwyMzgsMV0sXHJcbiAgICAnbWVkaXVtc3ByaW5nZ3JlZW4nOiBbMCwyNTAsMTU0LDFdLCAnbWVkaXVtdHVycXVvaXNlJzogWzcyLDIwOSwyMDQsMV0sXHJcbiAgICAnbWVkaXVtdmlvbGV0cmVkJzogWzE5OSwyMSwxMzMsMV0sICdtaWRuaWdodGJsdWUnOiBbMjUsMjUsMTEyLDFdLFxyXG4gICAgJ21pbnRjcmVhbSc6IFsyNDUsMjU1LDI1MCwxXSwgJ21pc3R5cm9zZSc6IFsyNTUsMjI4LDIyNSwxXSxcclxuICAgICdtb2NjYXNpbic6IFsyNTUsMjI4LDE4MSwxXSwgJ25hdmFqb3doaXRlJzogWzI1NSwyMjIsMTczLDFdLFxyXG4gICAgJ25hdnknOiBbMCwwLDEyOCwxXSwgJ29sZGxhY2UnOiBbMjUzLDI0NSwyMzAsMV0sXHJcbiAgICAnb2xpdmUnOiBbMTI4LDEyOCwwLDFdLCAnb2xpdmVkcmFiJzogWzEwNywxNDIsMzUsMV0sXHJcbiAgICAnb3JhbmdlJzogWzI1NSwxNjUsMCwxXSwgJ29yYW5nZXJlZCc6IFsyNTUsNjksMCwxXSxcclxuICAgICdvcmNoaWQnOiBbMjE4LDExMiwyMTQsMV0sICdwYWxlZ29sZGVucm9kJzogWzIzOCwyMzIsMTcwLDFdLFxyXG4gICAgJ3BhbGVncmVlbic6IFsxNTIsMjUxLDE1MiwxXSwgJ3BhbGV0dXJxdW9pc2UnOiBbMTc1LDIzOCwyMzgsMV0sXHJcbiAgICAncGFsZXZpb2xldHJlZCc6IFsyMTksMTEyLDE0NywxXSwgJ3BhcGF5YXdoaXAnOiBbMjU1LDIzOSwyMTMsMV0sXHJcbiAgICAncGVhY2hwdWZmJzogWzI1NSwyMTgsMTg1LDFdLCAncGVydSc6IFsyMDUsMTMzLDYzLDFdLFxyXG4gICAgJ3BpbmsnOiBbMjU1LDE5MiwyMDMsMV0sICdwbHVtJzogWzIyMSwxNjAsMjIxLDFdLFxyXG4gICAgJ3Bvd2RlcmJsdWUnOiBbMTc2LDIyNCwyMzAsMV0sICdwdXJwbGUnOiBbMTI4LDAsMTI4LDFdLFxyXG4gICAgJ3JlZCc6IFsyNTUsMCwwLDFdLCAncm9zeWJyb3duJzogWzE4OCwxNDMsMTQzLDFdLFxyXG4gICAgJ3JveWFsYmx1ZSc6IFs2NSwxMDUsMjI1LDFdLCAnc2FkZGxlYnJvd24nOiBbMTM5LDY5LDE5LDFdLFxyXG4gICAgJ3NhbG1vbic6IFsyNTAsMTI4LDExNCwxXSwgJ3NhbmR5YnJvd24nOiBbMjQ0LDE2NCw5NiwxXSxcclxuICAgICdzZWFncmVlbic6IFs0NiwxMzksODcsMV0sICdzZWFzaGVsbCc6IFsyNTUsMjQ1LDIzOCwxXSxcclxuICAgICdzaWVubmEnOiBbMTYwLDgyLDQ1LDFdLCAnc2lsdmVyJzogWzE5MiwxOTIsMTkyLDFdLFxyXG4gICAgJ3NreWJsdWUnOiBbMTM1LDIwNiwyMzUsMV0sICdzbGF0ZWJsdWUnOiBbMTA2LDkwLDIwNSwxXSxcclxuICAgICdzbGF0ZWdyYXknOiBbMTEyLDEyOCwxNDQsMV0sICdzbGF0ZWdyZXknOiBbMTEyLDEyOCwxNDQsMV0sXHJcbiAgICAnc25vdyc6IFsyNTUsMjUwLDI1MCwxXSwgJ3NwcmluZ2dyZWVuJzogWzAsMjU1LDEyNywxXSxcclxuICAgICdzdGVlbGJsdWUnOiBbNzAsMTMwLDE4MCwxXSwgJ3Rhbic6IFsyMTAsMTgwLDE0MCwxXSxcclxuICAgICd0ZWFsJzogWzAsMTI4LDEyOCwxXSwgJ3RoaXN0bGUnOiBbMjE2LDE5MSwyMTYsMV0sXHJcbiAgICAndG9tYXRvJzogWzI1NSw5OSw3MSwxXSwgJ3R1cnF1b2lzZSc6IFs2NCwyMjQsMjA4LDFdLFxyXG4gICAgJ3Zpb2xldCc6IFsyMzgsMTMwLDIzOCwxXSwgJ3doZWF0JzogWzI0NSwyMjIsMTc5LDFdLFxyXG4gICAgJ3doaXRlJzogWzI1NSwyNTUsMjU1LDFdLCAnd2hpdGVzbW9rZSc6IFsyNDUsMjQ1LDI0NSwxXSxcclxuICAgICd5ZWxsb3cnOiBbMjU1LDI1NSwwLDFdLCAneWVsbG93Z3JlZW4nOiBbMTU0LDIwNSw1MCwxXVxyXG59O1xyXG5cclxuZnVuY3Rpb24gY2xhbXBDc3NCeXRlKGkpIHsgIC8vIENsYW1wIHRvIGludGVnZXIgMCAuLiAyNTUuXHJcbiAgICBpID0gTWF0aC5yb3VuZChpKTsgIC8vIFNlZW1zIHRvIGJlIHdoYXQgQ2hyb21lIGRvZXMgKHZzIHRydW5jYXRpb24pLlxyXG4gICAgcmV0dXJuIGkgPCAwID8gMCA6IGkgPiAyNTUgPyAyNTUgOiBpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbGFtcENzc0FuZ2xlKGkpIHsgIC8vIENsYW1wIHRvIGludGVnZXIgMCAuLiAzNjAuXHJcbiAgICBpID0gTWF0aC5yb3VuZChpKTsgIC8vIFNlZW1zIHRvIGJlIHdoYXQgQ2hyb21lIGRvZXMgKHZzIHRydW5jYXRpb24pLlxyXG4gICAgcmV0dXJuIGkgPCAwID8gMCA6IGkgPiAzNjAgPyAzNjAgOiBpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbGFtcENzc0Zsb2F0KGYpIHsgIC8vIENsYW1wIHRvIGZsb2F0IDAuMCAuLiAxLjAuXHJcbiAgICByZXR1cm4gZiA8IDAgPyAwIDogZiA+IDEgPyAxIDogZjtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VDc3NJbnQoc3RyKSB7ICAvLyBpbnQgb3IgcGVyY2VudGFnZS5cclxuICAgIGlmIChzdHIubGVuZ3RoICYmIHN0ci5jaGFyQXQoc3RyLmxlbmd0aCAtIDEpID09PSAnJScpIHtcclxuICAgICAgICByZXR1cm4gY2xhbXBDc3NCeXRlKHBhcnNlRmxvYXQoc3RyKSAvIDEwMCAqIDI1NSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xhbXBDc3NCeXRlKHBhcnNlSW50KHN0ciwgMTApKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VDc3NGbG9hdChzdHIpIHsgIC8vIGZsb2F0IG9yIHBlcmNlbnRhZ2UuXHJcbiAgICBpZiAoc3RyLmxlbmd0aCAmJiBzdHIuY2hhckF0KHN0ci5sZW5ndGggLSAxKSA9PT0gJyUnKSB7XHJcbiAgICAgICAgcmV0dXJuIGNsYW1wQ3NzRmxvYXQocGFyc2VGbG9hdChzdHIpIC8gMTAwKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjbGFtcENzc0Zsb2F0KHBhcnNlRmxvYXQoc3RyKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNzc0h1ZVRvUmdiKG0xLCBtMiwgaCkge1xyXG4gICAgaWYgKGggPCAwKSB7XHJcbiAgICAgICAgaCArPSAxO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaCA+IDEpIHtcclxuICAgICAgICBoIC09IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGggKiA2IDwgMSkge1xyXG4gICAgICAgIHJldHVybiBtMSArIChtMiAtIG0xKSAqIGggKiA2O1xyXG4gICAgfVxyXG4gICAgaWYgKGggKiAyIDwgMSkge1xyXG4gICAgICAgIHJldHVybiBtMjtcclxuICAgIH1cclxuICAgIGlmIChoICogMyA8IDIpIHtcclxuICAgICAgICByZXR1cm4gbTEgKyAobTIgLSBtMSkgKiAoMi8zIC0gaCkgKiA2O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG0xO1xyXG59XHJcblxyXG5mdW5jdGlvbiBsZXJwTnVtYmVyKGEsIGIsIHApIHtcclxuICAgIHJldHVybiBhICsgKGIgLSBhKSAqIHA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldFJnYmEob3V0LCByLCBnLCBiLCBhKSB7XHJcbiAgICBvdXRbMF0gPSByOyBvdXRbMV0gPSBnOyBvdXRbMl0gPSBiOyBvdXRbM10gPSBhO1xyXG4gICAgcmV0dXJuIG91dDtcclxufVxyXG5mdW5jdGlvbiBjb3B5UmdiYShvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IGFbMF07IG91dFsxXSA9IGFbMV07IG91dFsyXSA9IGFbMl07IG91dFszXSA9IGFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59XHJcblxyXG52YXIgY29sb3JDYWNoZSA9IG5ldyBMUlUoMjApO1xyXG52YXIgbGFzdFJlbW92ZWRBcnIgPSBudWxsO1xyXG5cclxuZnVuY3Rpb24gcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycikge1xyXG4gICAgLy8gUmV1c2UgcmVtb3ZlZCBhcnJheVxyXG4gICAgaWYgKGxhc3RSZW1vdmVkQXJyKSB7XHJcbiAgICAgICAgY29weVJnYmEobGFzdFJlbW92ZWRBcnIsIHJnYmFBcnIpO1xyXG4gICAgfVxyXG4gICAgbGFzdFJlbW92ZWRBcnIgPSBjb2xvckNhY2hlLnB1dChjb2xvclN0ciwgbGFzdFJlbW92ZWRBcnIgfHwgKHJnYmFBcnIuc2xpY2UoKSkpO1xyXG59XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5jb3JlLmNvbG9yLnBhcnNlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclN0clxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBvdXRcclxuICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59XHJcbiAqL1xyXG5jb2xvclV0aWwucGFyc2UgPSBmdW5jdGlvbiAoY29sb3JTdHIsIHJnYmFBcnIpIHtcclxuICAgIGlmICghY29sb3JTdHIpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZ2JhQXJyID0gcmdiYUFyciB8fCBbXTtcclxuXHJcbiAgICB2YXIgY2FjaGVkID0gY29sb3JDYWNoZS5nZXQoY29sb3JTdHIpO1xyXG4gICAgaWYgKGNhY2hlZCkge1xyXG4gICAgICAgIHJldHVybiBjb3B5UmdiYShyZ2JhQXJyLCBjYWNoZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbG9yU3RyIG1heSBiZSBub3Qgc3RyaW5nXHJcbiAgICBjb2xvclN0ciA9IGNvbG9yU3RyICsgJyc7XHJcbiAgICAvLyBSZW1vdmUgYWxsIHdoaXRlc3BhY2UsIG5vdCBjb21wbGlhbnQsIGJ1dCBzaG91bGQganVzdCBiZSBtb3JlIGFjY2VwdGluZy5cclxuICAgIHZhciBzdHIgPSBjb2xvclN0ci5yZXBsYWNlKC8gL2csICcnKS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIC8vIENvbG9yIGtleXdvcmRzIChhbmQgdHJhbnNwYXJlbnQpIGxvb2t1cC5cclxuICAgIGlmIChzdHIgaW4ga0NTU0NvbG9yVGFibGUpIHtcclxuICAgICAgICBjb3B5UmdiYShyZ2JhQXJyLCBrQ1NTQ29sb3JUYWJsZVtzdHJdKTtcclxuICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcclxuICAgICAgICByZXR1cm4gcmdiYUFycjtcclxuICAgIH1cclxuXHJcbiAgICAvLyAjYWJjIGFuZCAjYWJjMTIzIHN5bnRheC5cclxuICAgIGlmIChzdHIuY2hhckF0KDApID09PSAnIycpIHtcclxuICAgICAgICBpZiAoc3RyLmxlbmd0aCA9PT0gNCkge1xyXG4gICAgICAgICAgICB2YXIgaXYgPSBwYXJzZUludChzdHIuc3Vic3RyKDEpLCAxNik7ICAvLyBUT0RPKGRlYW5tKTogU3RyaWN0ZXIgcGFyc2luZy5cclxuICAgICAgICAgICAgaWYgKCEoaXYgPj0gMCAmJiBpdiA8PSAweGZmZikpIHtcclxuICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47ICAvLyBDb3ZlcnMgTmFOLlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldFJnYmEocmdiYUFycixcclxuICAgICAgICAgICAgICAgICgoaXYgJiAweGYwMCkgPj4gNCkgfCAoKGl2ICYgMHhmMDApID4+IDgpLFxyXG4gICAgICAgICAgICAgICAgKGl2ICYgMHhmMCkgfCAoKGl2ICYgMHhmMCkgPj4gNCksXHJcbiAgICAgICAgICAgICAgICAoaXYgJiAweGYpIHwgKChpdiAmIDB4ZikgPDwgNCksXHJcbiAgICAgICAgICAgICAgICAxXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHB1dFRvQ2FjaGUoY29sb3JTdHIsIHJnYmFBcnIpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmdiYUFycjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3RyLmxlbmd0aCA9PT0gNykge1xyXG4gICAgICAgICAgICB2YXIgaXYgPSBwYXJzZUludChzdHIuc3Vic3RyKDEpLCAxNik7ICAvLyBUT0RPKGRlYW5tKTogU3RyaWN0ZXIgcGFyc2luZy5cclxuICAgICAgICAgICAgaWYgKCEoaXYgPj0gMCAmJiBpdiA8PSAweGZmZmZmZikpIHtcclxuICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47ICAvLyBDb3ZlcnMgTmFOLlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldFJnYmEocmdiYUFycixcclxuICAgICAgICAgICAgICAgIChpdiAmIDB4ZmYwMDAwKSA+PiAxNixcclxuICAgICAgICAgICAgICAgIChpdiAmIDB4ZmYwMCkgPj4gOCxcclxuICAgICAgICAgICAgICAgIGl2ICYgMHhmZixcclxuICAgICAgICAgICAgICAgIDFcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycik7XHJcbiAgICAgICAgICAgIHJldHVybiByZ2JhQXJyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIG9wID0gc3RyLmluZGV4T2YoJygnKSwgZXAgPSBzdHIuaW5kZXhPZignKScpO1xyXG4gICAgaWYgKG9wICE9PSAtMSAmJiBlcCArIDEgPT09IHN0ci5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgZm5hbWUgPSBzdHIuc3Vic3RyKDAsIG9wKTtcclxuICAgICAgICB2YXIgcGFyYW1zID0gc3RyLnN1YnN0cihvcCArIDEsIGVwIC0gKG9wICsgMSkpLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgdmFyIGFscGhhID0gMTsgIC8vIFRvIGFsbG93IGNhc2UgZmFsbHRocm91Z2guXHJcbiAgICAgICAgc3dpdGNoIChmbmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlICdyZ2JhJzpcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhbHBoYSA9IHBhcnNlQ3NzRmxvYXQocGFyYW1zLnBvcCgpKTsgLy8ganNoaW50IGlnbm9yZTpsaW5lXHJcbiAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaC5cclxuICAgICAgICAgICAgY2FzZSAncmdiJzpcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VDc3NJbnQocGFyYW1zWzBdKSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJzZUNzc0ludChwYXJhbXNbMV0pLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlQ3NzSW50KHBhcmFtc1syXSksXHJcbiAgICAgICAgICAgICAgICAgICAgYWxwaGFcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZ2JhQXJyO1xyXG4gICAgICAgICAgICBjYXNlICdoc2xhJzpcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwYXJhbXNbM10gPSBwYXJzZUNzc0Zsb2F0KHBhcmFtc1szXSk7XHJcbiAgICAgICAgICAgICAgICBoc2xhMnJnYmEocGFyYW1zLCByZ2JhQXJyKTtcclxuICAgICAgICAgICAgICAgIHB1dFRvQ2FjaGUoY29sb3JTdHIsIHJnYmFBcnIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJnYmFBcnI7XHJcbiAgICAgICAgICAgIGNhc2UgJ2hzbCc6XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaHNsYTJyZ2JhKHBhcmFtcywgcmdiYUFycik7XHJcbiAgICAgICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZ2JhQXJyO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xyXG4gICAgcmV0dXJuO1xyXG59O1xyXG5cclxuY29sb3JVdGlsLnBhcnNlVG9GbG9hdCA9IGZ1bmN0aW9uIChjb2xvclN0ciwgcmdiYUFycikge1xyXG4gICAgcmdiYUFyciA9IGNvbG9yVXRpbC5wYXJzZShjb2xvclN0ciwgcmdiYUFycik7XHJcbiAgICBpZiAoIXJnYmFBcnIpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZ2JhQXJyWzBdIC89IDI1NTtcclxuICAgIHJnYmFBcnJbMV0gLz0gMjU1O1xyXG4gICAgcmdiYUFyclsyXSAvPSAyNTU7XHJcbiAgICByZXR1cm4gcmdiYUFycjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci5oc2xhMnJnYmFcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gaHNsYVxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSByZ2JhXHJcbiAqIEByZXR1cm4ge0FycmF5LjxudW1iZXI+fSByZ2JhXHJcbiAqL1xyXG5mdW5jdGlvbiBoc2xhMnJnYmEoaHNsYSwgcmdiYSkge1xyXG4gICAgdmFyIGggPSAoKChwYXJzZUZsb2F0KGhzbGFbMF0pICUgMzYwKSArIDM2MCkgJSAzNjApIC8gMzYwOyAgLy8gMCAuLiAxXHJcbiAgICAvLyBOT1RFKGRlYW5tKTogQWNjb3JkaW5nIHRvIHRoZSBDU1Mgc3BlYyBzL2wgc2hvdWxkIG9ubHkgYmVcclxuICAgIC8vIHBlcmNlbnRhZ2VzLCBidXQgd2UgZG9uJ3QgYm90aGVyIGFuZCBsZXQgZmxvYXQgb3IgcGVyY2VudGFnZS5cclxuICAgIHZhciBzID0gcGFyc2VDc3NGbG9hdChoc2xhWzFdKTtcclxuICAgIHZhciBsID0gcGFyc2VDc3NGbG9hdChoc2xhWzJdKTtcclxuICAgIHZhciBtMiA9IGwgPD0gMC41ID8gbCAqIChzICsgMSkgOiBsICsgcyAtIGwgKiBzO1xyXG4gICAgdmFyIG0xID0gbCAqIDIgLSBtMjtcclxuXHJcbiAgICByZ2JhID0gcmdiYSB8fCBbXTtcclxuICAgIHNldFJnYmEocmdiYSxcclxuICAgICAgICBjbGFtcENzc0J5dGUoY3NzSHVlVG9SZ2IobTEsIG0yLCBoICsgMSAvIDMpICogMjU1KSxcclxuICAgICAgICBjbGFtcENzc0J5dGUoY3NzSHVlVG9SZ2IobTEsIG0yLCBoKSAqIDI1NSksXHJcbiAgICAgICAgY2xhbXBDc3NCeXRlKGNzc0h1ZVRvUmdiKG0xLCBtMiwgaCAtIDEgLyAzKSAqIDI1NSksXHJcbiAgICAgICAgMVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoaHNsYS5sZW5ndGggPT09IDQpIHtcclxuICAgICAgICByZ2JhWzNdID0gaHNsYVszXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmdiYTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci5yZ2JhMmhzbGFcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcmdiYVxyXG4gKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn0gaHNsYVxyXG4gKi9cclxuZnVuY3Rpb24gcmdiYTJoc2xhKHJnYmEpIHtcclxuICAgIGlmICghcmdiYSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSR0IgZnJvbSAwIHRvIDI1NVxyXG4gICAgdmFyIFIgPSByZ2JhWzBdIC8gMjU1O1xyXG4gICAgdmFyIEcgPSByZ2JhWzFdIC8gMjU1O1xyXG4gICAgdmFyIEIgPSByZ2JhWzJdIC8gMjU1O1xyXG5cclxuICAgIHZhciB2TWluID0gTWF0aC5taW4oUiwgRywgQik7IC8vIE1pbi4gdmFsdWUgb2YgUkdCXHJcbiAgICB2YXIgdk1heCA9IE1hdGgubWF4KFIsIEcsIEIpOyAvLyBNYXguIHZhbHVlIG9mIFJHQlxyXG4gICAgdmFyIGRlbHRhID0gdk1heCAtIHZNaW47IC8vIERlbHRhIFJHQiB2YWx1ZVxyXG5cclxuICAgIHZhciBMID0gKHZNYXggKyB2TWluKSAvIDI7XHJcbiAgICB2YXIgSDtcclxuICAgIHZhciBTO1xyXG4gICAgLy8gSFNMIHJlc3VsdHMgZnJvbSAwIHRvIDFcclxuICAgIGlmIChkZWx0YSA9PT0gMCkge1xyXG4gICAgICAgIEggPSAwO1xyXG4gICAgICAgIFMgPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKEwgPCAwLjUpIHtcclxuICAgICAgICAgICAgUyA9IGRlbHRhIC8gKHZNYXggKyB2TWluKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIFMgPSBkZWx0YSAvICgyIC0gdk1heCAtIHZNaW4pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGRlbHRhUiA9ICgoKHZNYXggLSBSKSAvIDYpICsgKGRlbHRhIC8gMikpIC8gZGVsdGE7XHJcbiAgICAgICAgdmFyIGRlbHRhRyA9ICgoKHZNYXggLSBHKSAvIDYpICsgKGRlbHRhIC8gMikpIC8gZGVsdGE7XHJcbiAgICAgICAgdmFyIGRlbHRhQiA9ICgoKHZNYXggLSBCKSAvIDYpICsgKGRlbHRhIC8gMikpIC8gZGVsdGE7XHJcblxyXG4gICAgICAgIGlmIChSID09PSB2TWF4KSB7XHJcbiAgICAgICAgICAgIEggPSBkZWx0YUIgLSBkZWx0YUc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKEcgPT09IHZNYXgpIHtcclxuICAgICAgICAgICAgSCA9ICgxIC8gMykgKyBkZWx0YVIgLSBkZWx0YUI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKEIgPT09IHZNYXgpIHtcclxuICAgICAgICAgICAgSCA9ICgyIC8gMykgKyBkZWx0YUcgLSBkZWx0YVI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoSCA8IDApIHtcclxuICAgICAgICAgICAgSCArPSAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEggPiAxKSB7XHJcbiAgICAgICAgICAgIEggLT0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGhzbGEgPSBbSCAqIDM2MCwgUywgTF07XHJcblxyXG4gICAgaWYgKHJnYmFbM10gIT0gbnVsbCkge1xyXG4gICAgICAgIGhzbGEucHVzaChyZ2JhWzNdKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaHNsYTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci5saWZ0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxyXG4gKiBAcGFyYW0ge251bWJlcn0gbGV2ZWxcclxuICogQHJldHVybiB7c3RyaW5nfVxyXG4gKi9cclxuY29sb3JVdGlsLmxpZnQgPSBmdW5jdGlvbiAoY29sb3IsIGxldmVsKSB7XHJcbiAgICB2YXIgY29sb3JBcnIgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xyXG4gICAgaWYgKGNvbG9yQXJyKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGxldmVsIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgY29sb3JBcnJbaV0gPSBjb2xvckFycltpXSAqICgxIC0gbGV2ZWwpIHwgMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yQXJyW2ldID0gKCgyNTUgLSBjb2xvckFycltpXSkgKiBsZXZlbCArIGNvbG9yQXJyW2ldKSB8IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yVXRpbC5zdHJpbmdpZnkoY29sb3JBcnIsIGNvbG9yQXJyLmxlbmd0aCA9PT0gNCA/ICdyZ2JhJyA6ICdyZ2InKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci50b0hleFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcclxuICogQHJldHVybiB7c3RyaW5nfVxyXG4gKi9cclxuY29sb3JVdGlsLnRvSGV4ID0gZnVuY3Rpb24gKGNvbG9yKSB7XHJcbiAgICB2YXIgY29sb3JBcnIgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xyXG4gICAgaWYgKGNvbG9yQXJyKSB7XHJcbiAgICAgICAgcmV0dXJuICgoMSA8PCAyNCkgKyAoY29sb3JBcnJbMF0gPDwgMTYpICsgKGNvbG9yQXJyWzFdIDw8IDgpICsgKCtjb2xvckFyclsyXSkpLnRvU3RyaW5nKDE2KS5zbGljZSgxKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBNYXAgdmFsdWUgdG8gY29sb3IuIEZhc3RlciB0aGFuIGxlcnAgbWV0aG9kcyBiZWNhdXNlIGNvbG9yIGlzIHJlcHJlc2VudGVkIGJ5IHJnYmEgYXJyYXkuXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvclxyXG4gKiBAcGFyYW0ge251bWJlcn0gbm9ybWFsaXplZFZhbHVlIEEgZmxvYXQgYmV0d2VlbiAwIGFuZCAxLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxBcnJheS48bnVtYmVyPj59IGNvbG9ycyBMaXN0IG9mIHJnYmEgY29sb3IgYXJyYXlcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gW291dF0gTWFwcGVkIGdiYSBjb2xvciBhcnJheVxyXG4gKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn0gd2lsbCBiZSBudWxsL3VuZGVmaW5lZCBpZiBpbnB1dCBpbGxlZ2FsLlxyXG4gKi9cclxuY29sb3JVdGlsLmZhc3RMZXJwID0gZnVuY3Rpb24gKG5vcm1hbGl6ZWRWYWx1ZSwgY29sb3JzLCBvdXQpIHtcclxuICAgIGlmICghKGNvbG9ycyAmJiBjb2xvcnMubGVuZ3RoKVxyXG4gICAgICAgIHx8ICEobm9ybWFsaXplZFZhbHVlID49IDAgJiYgbm9ybWFsaXplZFZhbHVlIDw9IDEpXHJcbiAgICApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgb3V0ID0gb3V0IHx8IFtdO1xyXG5cclxuICAgIHZhciB2YWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZSAqIChjb2xvcnMubGVuZ3RoIC0gMSk7XHJcbiAgICB2YXIgbGVmdEluZGV4ID0gTWF0aC5mbG9vcih2YWx1ZSk7XHJcbiAgICB2YXIgcmlnaHRJbmRleCA9IE1hdGguY2VpbCh2YWx1ZSk7XHJcbiAgICB2YXIgbGVmdENvbG9yID0gY29sb3JzW2xlZnRJbmRleF07XHJcbiAgICB2YXIgcmlnaHRDb2xvciA9IGNvbG9yc1tyaWdodEluZGV4XTtcclxuICAgIHZhciBkdiA9IHZhbHVlIC0gbGVmdEluZGV4O1xyXG4gICAgb3V0WzBdID0gY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzBdLCByaWdodENvbG9yWzBdLCBkdikpO1xyXG4gICAgb3V0WzFdID0gY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzFdLCByaWdodENvbG9yWzFdLCBkdikpO1xyXG4gICAgb3V0WzJdID0gY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzJdLCByaWdodENvbG9yWzJdLCBkdikpO1xyXG4gICAgb3V0WzNdID0gY2xhbXBDc3NGbG9hdChsZXJwTnVtYmVyKGxlZnRDb2xvclszXSwgcmlnaHRDb2xvclszXSwgZHYpKTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59XHJcblxyXG5jb2xvclV0aWwuZmFzdE1hcFRvQ29sb3IgPSBjb2xvclV0aWwuZmFzdExlcnA7XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtudW1iZXJ9IG5vcm1hbGl6ZWRWYWx1ZSBBIGZsb2F0IGJldHdlZW4gMCBhbmQgMS5cclxuICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gY29sb3JzIENvbG9yIGxpc3QuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGZ1bGxPdXRwdXQgRGVmYXVsdCBmYWxzZS5cclxuICogQHJldHVybiB7KHN0cmluZ3xPYmplY3QpfSBSZXN1bHQgY29sb3IuIElmIGZ1bGxPdXRwdXQsXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtjb2xvcjogLi4uLCBsZWZ0SW5kZXg6IC4uLiwgcmlnaHRJbmRleDogLi4uLCB2YWx1ZTogLi4ufSxcclxuICovXHJcbmNvbG9yVXRpbC5sZXJwID0gZnVuY3Rpb24gKG5vcm1hbGl6ZWRWYWx1ZSwgY29sb3JzLCBmdWxsT3V0cHV0KSB7XHJcbiAgICBpZiAoIShjb2xvcnMgJiYgY29sb3JzLmxlbmd0aClcclxuICAgICAgICB8fCAhKG5vcm1hbGl6ZWRWYWx1ZSA+PSAwICYmIG5vcm1hbGl6ZWRWYWx1ZSA8PSAxKVxyXG4gICAgKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB2YWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZSAqIChjb2xvcnMubGVuZ3RoIC0gMSk7XHJcbiAgICB2YXIgbGVmdEluZGV4ID0gTWF0aC5mbG9vcih2YWx1ZSk7XHJcbiAgICB2YXIgcmlnaHRJbmRleCA9IE1hdGguY2VpbCh2YWx1ZSk7XHJcbiAgICB2YXIgbGVmdENvbG9yID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yc1tsZWZ0SW5kZXhdKTtcclxuICAgIHZhciByaWdodENvbG9yID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yc1tyaWdodEluZGV4XSk7XHJcbiAgICB2YXIgZHYgPSB2YWx1ZSAtIGxlZnRJbmRleDtcclxuXHJcbiAgICB2YXIgY29sb3IgPSBjb2xvclV0aWwuc3RyaW5naWZ5KFxyXG4gICAgICAgIFtcclxuICAgICAgICAgICAgY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzBdLCByaWdodENvbG9yWzBdLCBkdikpLFxyXG4gICAgICAgICAgICBjbGFtcENzc0J5dGUobGVycE51bWJlcihsZWZ0Q29sb3JbMV0sIHJpZ2h0Q29sb3JbMV0sIGR2KSksXHJcbiAgICAgICAgICAgIGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclsyXSwgcmlnaHRDb2xvclsyXSwgZHYpKSxcclxuICAgICAgICAgICAgY2xhbXBDc3NGbG9hdChsZXJwTnVtYmVyKGxlZnRDb2xvclszXSwgcmlnaHRDb2xvclszXSwgZHYpKVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgJ3JnYmEnXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBmdWxsT3V0cHV0XHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIGNvbG9yOiBjb2xvcixcclxuICAgICAgICAgICAgbGVmdEluZGV4OiBsZWZ0SW5kZXgsXHJcbiAgICAgICAgICAgIHJpZ2h0SW5kZXg6IHJpZ2h0SW5kZXgsXHJcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICA6IGNvbG9yO1xyXG59XHJcblxyXG4vKipcclxuICogQGRlcHJlY2F0ZWRcclxuICovXHJcbmNvbG9yVXRpbC5tYXBUb0NvbG9yID0gY29sb3JVdGlsLmxlcnA7XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5jb3JlLmNvbG9yXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxyXG4gKiBAcGFyYW0ge251bWJlcj19IGggMCB+IDM2MCwgaWdub3JlIHdoZW4gbnVsbC5cclxuICogQHBhcmFtIHtudW1iZXI9fSBzIDAgfiAxLCBpZ25vcmUgd2hlbiBudWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcj19IGwgMCB+IDEsIGlnbm9yZSB3aGVuIG51bGwuXHJcbiAqIEByZXR1cm4ge3N0cmluZ30gQ29sb3Igc3RyaW5nIGluIHJnYmEgZm9ybWF0LlxyXG4gKi9cclxuY29sb3JVdGlsLm1vZGlmeUhTTCA9IGZ1bmN0aW9uIChjb2xvciwgaCwgcywgbCkge1xyXG4gICAgY29sb3IgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xyXG5cclxuICAgIGlmIChjb2xvcikge1xyXG4gICAgICAgIGNvbG9yID0gcmdiYTJoc2xhKGNvbG9yKTtcclxuICAgICAgICBoICE9IG51bGwgJiYgKGNvbG9yWzBdID0gY2xhbXBDc3NBbmdsZShoKSk7XHJcbiAgICAgICAgcyAhPSBudWxsICYmIChjb2xvclsxXSA9IHBhcnNlQ3NzRmxvYXQocykpO1xyXG4gICAgICAgIGwgIT0gbnVsbCAmJiAoY29sb3JbMl0gPSBwYXJzZUNzc0Zsb2F0KGwpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbG9yVXRpbC5zdHJpbmdpZnkoaHNsYTJyZ2JhKGNvbG9yKSwgJ3JnYmEnKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxyXG4gKiBAcGFyYW0ge251bWJlcj19IGFscGhhIDAgfiAxXHJcbiAqIEByZXR1cm4ge3N0cmluZ30gQ29sb3Igc3RyaW5nIGluIHJnYmEgZm9ybWF0LlxyXG4gKi9cclxuY29sb3JVdGlsLm1vZGlmeUFscGhhID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSkge1xyXG4gICAgY29sb3IgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xyXG5cclxuICAgIGlmIChjb2xvciAmJiBhbHBoYSAhPSBudWxsKSB7XHJcbiAgICAgICAgY29sb3JbM10gPSBjbGFtcENzc0Zsb2F0KGFscGhhKTtcclxuICAgICAgICByZXR1cm4gY29sb3JVdGlsLnN0cmluZ2lmeShjb2xvciwgJ3JnYmEnKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyckNvbG9yIGxpa2UgWzEyLDMzLDQ0LDAuNF1cclxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgJ3JnYmEnLCAnaHN2YScsIC4uLlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFJlc3VsdCBjb2xvci4gKElmIGlucHV0IGlsbGVnYWwsIHJldHVybiB1bmRlZmluZWQpLlxyXG4gKi9cclxuY29sb3JVdGlsLnN0cmluZ2lmeSA9IGZ1bmN0aW9uIChhcnJDb2xvciwgdHlwZSkge1xyXG4gICAgaWYgKCFhcnJDb2xvciB8fCAhYXJyQ29sb3IubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGNvbG9yU3RyID0gYXJyQ29sb3JbMF0gKyAnLCcgKyBhcnJDb2xvclsxXSArICcsJyArIGFyckNvbG9yWzJdO1xyXG4gICAgaWYgKHR5cGUgPT09ICdyZ2JhJyB8fCB0eXBlID09PSAnaHN2YScgfHwgdHlwZSA9PT0gJ2hzbGEnKSB7XHJcbiAgICAgICAgY29sb3JTdHIgKz0gJywnICsgYXJyQ29sb3JbM107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHlwZSArICcoJyArIGNvbG9yU3RyICsgJyknO1xyXG59O1xyXG5cclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjb2xvclV0aWw7IiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCBjb2xvclV0aWwgZnJvbSAnLi9jb3JlL2NvbG9yJztcclxudmFyIHBhcnNlQ29sb3IgPSBjb2xvclV0aWwucGFyc2VUb0Zsb2F0O1xyXG5cclxudmFyIHByb2dyYW1LZXlDYWNoZSA9IHt9O1xyXG5cclxuZnVuY3Rpb24gZ2V0RGVmaW5lQ29kZShkZWZpbmVzKSB7XHJcbiAgICB2YXIgZGVmaW5lS2V5cyA9IE9iamVjdC5rZXlzKGRlZmluZXMpO1xyXG4gICAgZGVmaW5lS2V5cy5zb3J0KCk7XHJcbiAgICB2YXIgZGVmaW5lU3RyID0gW107XHJcbiAgICAvLyBDdXN0b20gRGVmaW5lc1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWZpbmVLZXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IGRlZmluZUtleXNbaV07XHJcbiAgICAgICAgdmFyIHZhbHVlID0gZGVmaW5lc1trZXldO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaChrZXkgKyAnICcgKyB2YWx1ZS50b1N0cmluZygpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGVmaW5lU3RyLmpvaW4oJ1xcbicpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQcm9ncmFtS2V5KHZlcnRleERlZmluZXMsIGZyYWdtZW50RGVmaW5lcywgZW5hYmxlZFRleHR1cmVzKSB7XHJcbiAgICBlbmFibGVkVGV4dHVyZXMuc29ydCgpO1xyXG4gICAgdmFyIGRlZmluZVN0ciA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkVGV4dHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgc3ltYm9sID0gZW5hYmxlZFRleHR1cmVzW2ldO1xyXG4gICAgICAgIGRlZmluZVN0ci5wdXNoKHN5bWJvbCk7XHJcbiAgICB9XHJcbiAgICB2YXIga2V5ID0gZ2V0RGVmaW5lQ29kZSh2ZXJ0ZXhEZWZpbmVzKSArICdcXG4nXHJcbiAgICAgICAgKyBnZXREZWZpbmVDb2RlKGZyYWdtZW50RGVmaW5lcykgKyAnXFxuJ1xyXG4gICAgICAgICsgZGVmaW5lU3RyLmpvaW4oJ1xcbicpO1xyXG5cclxuICAgIGlmIChwcm9ncmFtS2V5Q2FjaGVba2V5XSkge1xyXG4gICAgICAgIHJldHVybiBwcm9ncmFtS2V5Q2FjaGVba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgaWQgPSB1dGlsLmdlbkdVSUQoKTtcclxuICAgIHByb2dyYW1LZXlDYWNoZVtrZXldID0gaWQ7XHJcbiAgICByZXR1cm4gaWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNYXRlcmlhbCBkZWZpbmVzIHRoZSBhcHBlYXJhbmNlIG9mIG1lc2ggc3VyZmFjZSwgbGlrZSBgY29sb3JgLCBgcm91Z2huZXNzYCwgYG1ldGFsbmVzc2AsIGV0Yy5cclxuICogSXQgY29udGFpbnMgYSB7QGxpbmsgY2xheS5TaGFkZXJ9IGFuZCBjb3JyZXNwb25kaW5nIHVuaWZvcm1zLlxyXG4gKlxyXG4gKiBIZXJlIGlzIGEgYmFzaWMgZXhhbXBsZSB0byBjcmVhdGUgYSBzdGFuZGFyZCBtYXRlcmlhbFxyXG5gYGBqc1xyXG52YXIgbWF0ZXJpYWwgPSBuZXcgY2xheS5NYXRlcmlhbCh7XHJcbiAgICBzaGFkZXI6IG5ldyBjbGF5LlNoYWRlcihcclxuICAgICAgICBjbGF5LlNoYWRlci5zb3VyY2UoJ2NsYXkudmVydGV4JyksXHJcbiAgICAgICAgY2xheS5TaGFkZXIuc291cmNlKCdjbGF5LmZyYWdtZW50JylcclxuICAgIClcclxufSk7XHJcbmBgYFxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5NYXRlcmlhbFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIE1hdGVyaWFsID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5NYXRlcmlhbCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbmFtZTogJycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgLy8gdW5pZm9ybXM6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlNoYWRlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBzaGFkZXI6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRlcHRoVGVzdDogdHJ1ZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGVwdGhNYXNrOiB0cnVlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQmxlbmQgZnVuYyBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gdGhlIG1hdGVyaWFsXHJcbiAgICAgICAgICogaGF2ZSBjdXN0b20gYmxlbmRpbmdcclxuICAgICAgICAgKiBUaGUgZ2wgY29udGV4dCB3aWxsIGJlIHRoZSBvbmx5IGFyZ3VtZW50IHBhc3NlZCBpbiB0aG8gdGhlXHJcbiAgICAgICAgICogYmxlbmQgZnVuY3Rpb25cclxuICAgICAgICAgKiBEZXRhaWwgb2YgYmxlbmQgZnVuY3Rpb24gaW4gV2ViR0w6XHJcbiAgICAgICAgICogaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9nbGVzL3NwZWNzLzIuMC9lc19mdWxsX3NwZWNfMi4wLjI1LnBkZlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogRXhhbXBsZSA6XHJcbiAgICAgICAgICogZnVuY3Rpb24oX2dsKSB7XHJcbiAgICAgICAgICogIF9nbC5ibGVuZEVxdWF0aW9uKF9nbC5GVU5DX0FERCk7XHJcbiAgICAgICAgICogIF9nbC5ibGVuZEZ1bmMoX2dsLlNSQ19BTFBIQSwgX2dsLk9ORV9NSU5VU19TUkNfQUxQSEEpO1xyXG4gICAgICAgICAqIH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBibGVuZDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdXBkYXRlIHRleHR1cmUgc3RhdHVzIGF1dG9tYXRpY2FsbHkuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXV0b1VwZGF0ZVRleHR1cmVTdGF0dXM6IHRydWUsXHJcblxyXG4gICAgICAgIHVuaWZvcm1zOiB7fSxcclxuICAgICAgICB2ZXJ0ZXhEZWZpbmVzOiB7fSxcclxuICAgICAgICBmcmFnbWVudERlZmluZXM6IHt9LFxyXG4gICAgICAgIF90ZXh0dXJlU3RhdHVzOiB7fSxcclxuXHJcbiAgICAgICAgLy8gc2hhZG93VHJhbnNwYXJlbnRNYXAgOiBudWxsXHJcblxyXG4gICAgICAgIC8vIFBFTkRJTkcgZW5hYmxlIHRoZSB1bmlmb3JtIHRoYXQgb25seSB1c2VkIGluIHNoYWRlci5cclxuICAgICAgICBfZW5hYmxlZFVuaWZvcm1zOiBudWxsLFxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCF0aGlzLm5hbWUpIHtcclxuICAgICAgICB0aGlzLm5hbWUgPSAnTUFURVJJQUxfJyArIHRoaXMuX191aWRfXztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaGFkZXIpIHtcclxuICAgICAgICAvLyBLZWVwIHN0YXR1cywgbWFpbmx5IHByZXNldCB1bmlmb3JtcywgdmVydGV4RGVmaW5lcyBhbmQgZnJhZ21lbnREZWZpbmVzXHJcbiAgICAgICAgdGhpcy5hdHRhY2hTaGFkZXIodGhpcy5zaGFkZXIsIHRydWUpO1xyXG4gICAgfVxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuTWF0ZXJpYWwucHJvdG90eXBlICovXHJcbntcclxuICAgIHByZWNpc2lvbjogJ2hpZ2hwJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBtYXRlcmlhbCB1bmlmb3JtXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogIG1hdC5zZXRVbmlmb3JtKCdjb2xvcicsIFsxLCAxLCAxLCAxXSk7XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcnxhcnJheXxjbGF5LlRleHR1cmV8QXJyYXlCdWZmZXJWaWV3fSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBzZXRVbmlmb3JtOiBmdW5jdGlvbiAoc3ltYm9sLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5pZm9ybSB2YWx1ZSBcIicgKyBzeW1ib2wgKyAnXCIgaXMgdW5kZWZpbmVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB1bmlmb3JtID0gdGhpcy51bmlmb3Jtc1tzeW1ib2xdO1xyXG4gICAgICAgIGlmICh1bmlmb3JtKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIGFzIGEgY29sb3IuIEludmFsaWQgY29sb3Igc3RyaW5nIHdpbGwgcmV0dXJuIG51bGwuXHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlQ29sb3IodmFsdWUpIHx8IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB1bmlmb3JtLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvVXBkYXRlVGV4dHVyZVN0YXR1cyAmJiB1bmlmb3JtLnR5cGUgPT09ICd0Jykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVUZXh0dXJlKHN5bWJvbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVUZXh0dXJlKHN5bWJvbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9ialxyXG4gICAgICovXHJcbiAgICBzZXRVbmlmb3JtczogZnVuY3Rpb24ob2JqKSB7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xyXG4gICAgICAgICAgICB2YXIgdmFsID0gb2JqW2tleV07XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShrZXksIHZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gIHN5bWJvbFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNVbmlmb3JtRW5hYmxlZDogZnVuY3Rpb24gKHN5bWJvbCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkVW5pZm9ybXMuaW5kZXhPZihzeW1ib2wpID49IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEVuYWJsZWRVbmlmb3JtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkVW5pZm9ybXM7XHJcbiAgICB9LFxyXG4gICAgZ2V0VGV4dHVyZVVuaWZvcm1zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVVbmlmb3JtcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBvZiBzZXRVbmlmb3JtIGFuZCBzZXRVbmlmb3Jtc1xyXG4gICAgICogQHBhcmFtIHtvYmplY3R8c3RyaW5nfSBzeW1ib2xcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfGFycmF5fGNsYXkuVGV4dHVyZXxBcnJheUJ1ZmZlclZpZXd9IFt2YWx1ZV1cclxuICAgICAqL1xyXG4gICAgc2V0OiBmdW5jdGlvbiAoc3ltYm9sLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2Yoc3ltYm9sKSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHN5bWJvbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IHN5bWJvbFtrZXldO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKGtleSwgdmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKHN5bWJvbCwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCB1bmlmb3JtIHZhbHVlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfGFycmF5fGNsYXkuVGV4dHVyZXxBcnJheUJ1ZmZlclZpZXd9XHJcbiAgICAgKi9cclxuICAgIGdldDogZnVuY3Rpb24gKHN5bWJvbCkge1xyXG4gICAgICAgIHZhciB1bmlmb3JtID0gdGhpcy51bmlmb3Jtc1tzeW1ib2xdO1xyXG4gICAgICAgIGlmICh1bmlmb3JtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmlmb3JtLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEF0dGFjaCBhIHNoYWRlciBpbnN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5TaGFkZXJ9IHNoYWRlclxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0ga2VlcFN0YXR1cyBJZiB0cnkgdG8ga2VlcCB1bmlmb3JtIGFuZCB0ZXh0dXJlXHJcbiAgICAgKi9cclxuICAgIGF0dGFjaFNoYWRlcjogZnVuY3Rpb24oc2hhZGVyLCBrZWVwU3RhdHVzKSB7XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsVW5pZm9ybXMgPSB0aGlzLnVuaWZvcm1zO1xyXG5cclxuICAgICAgICAvLyBJZ25vcmUgaWYgdW5pZm9ybSBjYW4gdXNlIGluIHNoYWRlci5cclxuICAgICAgICB0aGlzLnVuaWZvcm1zID0gc2hhZGVyLmNyZWF0ZVVuaWZvcm1zKCk7XHJcbiAgICAgICAgdGhpcy5zaGFkZXIgPSBzaGFkZXI7XHJcblxyXG4gICAgICAgIHZhciB1bmlmb3JtcyA9IHRoaXMudW5pZm9ybXM7XHJcbiAgICAgICAgdGhpcy5fZW5hYmxlZFVuaWZvcm1zID0gT2JqZWN0LmtleXModW5pZm9ybXMpO1xyXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB1bmlmb3JtcyBhcmUgc2V0IGluIHNhbWUgb3JkZXIgdG8gYXZvaWQgdGV4dHVyZSBzbG90IHdyb25nXHJcbiAgICAgICAgdGhpcy5fZW5hYmxlZFVuaWZvcm1zLnNvcnQoKTtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlVW5pZm9ybXMgPSB0aGlzLl9lbmFibGVkVW5pZm9ybXMuZmlsdGVyKGZ1bmN0aW9uICh1bmlmb3JtTmFtZSkge1xyXG4gICAgICAgICAgICB2YXIgdHlwZSA9IHRoaXMudW5pZm9ybXNbdW5pZm9ybU5hbWVdLnR5cGU7XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlID09PSAndCcgfHwgdHlwZSA9PT0gJ3R2JztcclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgdmFyIG9yaWdpbmFsVmVydGV4RGVmaW5lcyA9IHRoaXMudmVydGV4RGVmaW5lcztcclxuICAgICAgICB2YXIgb3JpZ2luYWxGcmFnbWVudERlZmluZXMgPSB0aGlzLmZyYWdtZW50RGVmaW5lcztcclxuXHJcbiAgICAgICAgdGhpcy52ZXJ0ZXhEZWZpbmVzID0gdXRpbC5jbG9uZShzaGFkZXIudmVydGV4RGVmaW5lcyk7XHJcbiAgICAgICAgdGhpcy5mcmFnbWVudERlZmluZXMgPSB1dGlsLmNsb25lKHNoYWRlci5mcmFnbWVudERlZmluZXMpO1xyXG5cclxuICAgICAgICBpZiAoa2VlcFN0YXR1cykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gb3JpZ2luYWxVbmlmb3Jtcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1zW3N5bWJvbF0pIHtcclxuICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtc1tzeW1ib2xdLnZhbHVlID0gb3JpZ2luYWxVbmlmb3Jtc1tzeW1ib2xdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB1dGlsLmRlZmF1bHRzKHRoaXMudmVydGV4RGVmaW5lcywgb3JpZ2luYWxWZXJ0ZXhEZWZpbmVzKTtcclxuICAgICAgICAgICAgdXRpbC5kZWZhdWx0cyh0aGlzLmZyYWdtZW50RGVmaW5lcywgb3JpZ2luYWxGcmFnbWVudERlZmluZXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc2hhZGVyLnRleHR1cmVzKSB7XHJcbiAgICAgICAgICAgIHRleHR1cmVTdGF0dXNba2V5XSA9IHtcclxuICAgICAgICAgICAgICAgIHNoYWRlclR5cGU6IHNoYWRlci50ZXh0dXJlc1trZXldLnNoYWRlclR5cGUsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBzaGFkZXIudGV4dHVyZXNba2V5XS50eXBlLFxyXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogKGtlZXBTdGF0dXMgJiYgdGhpcy5fdGV4dHVyZVN0YXR1c1trZXldKSA/IHRoaXMuX3RleHR1cmVTdGF0dXNba2V5XS5lbmFibGVkIDogZmFsc2VcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3RleHR1cmVTdGF0dXMgPSB0ZXh0dXJlU3RhdHVzO1xyXG5cclxuICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgbWF0ZXJpYWwgYW5kIGtlZXAgdW5pZm9ybXMsIHNoYWRlciB3aWxsIG5vdCBiZSBjbG9uZWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0ZXJpYWx9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG1hdGVyaWFsID0gbmV3IHRoaXMuY29uc3RydWN0b3Ioe1xyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXHJcbiAgICAgICAgICAgIHNoYWRlcjogdGhpcy5zaGFkZXJcclxuICAgICAgICB9KTtcclxuICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gdGhpcy51bmlmb3Jtcykge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC51bmlmb3Jtc1tzeW1ib2xdLnZhbHVlID0gdGhpcy51bmlmb3Jtc1tzeW1ib2xdLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtYXRlcmlhbC5kZXB0aFRlc3QgPSB0aGlzLmRlcHRoVGVzdDtcclxuICAgICAgICBtYXRlcmlhbC5kZXB0aE1hc2sgPSB0aGlzLmRlcHRoTWFzaztcclxuICAgICAgICBtYXRlcmlhbC50cmFuc3BhcmVudCA9IHRoaXMudHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgbWF0ZXJpYWwuYmxlbmQgPSB0aGlzLmJsZW5kO1xyXG5cclxuICAgICAgICBtYXRlcmlhbC52ZXJ0ZXhEZWZpbmVzID0gdXRpbC5jbG9uZSh0aGlzLnZlcnRleERlZmluZXMpO1xyXG4gICAgICAgIG1hdGVyaWFsLmZyYWdtZW50RGVmaW5lcyA9IHV0aWwuY2xvbmUodGhpcy5mcmFnbWVudERlZmluZXMpO1xyXG4gICAgICAgIG1hdGVyaWFsLmVuYWJsZVRleHR1cmUodGhpcy5nZXRFbmFibGVkVGV4dHVyZXMoKSk7XHJcbiAgICAgICAgbWF0ZXJpYWwucHJlY2lzaW9uID0gdGhpcy5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYSAjZGVmaW5lIG1hY3JvIGluIHNoYWRlciBjb2RlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHNoYWRlclR5cGUgQ2FuIGJlIHZlcnRleCwgZnJhZ21lbnQgb3IgYm90aFxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW3ZhbF1cclxuICAgICAqL1xyXG4gICAgZGVmaW5lOiBmdW5jdGlvbiAoc2hhZGVyVHlwZSwgc3ltYm9sLCB2YWwpIHtcclxuICAgICAgICB2YXIgdmVydGV4RGVmaW5lcyA9IHRoaXMudmVydGV4RGVmaW5lcztcclxuICAgICAgICB2YXIgZnJhZ21lbnREZWZpbmVzID0gdGhpcy5mcmFnbWVudERlZmluZXM7XHJcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgIT09ICd2ZXJ0ZXgnICYmIHNoYWRlclR5cGUgIT09ICdmcmFnbWVudCcgJiYgc2hhZGVyVHlwZSAhPT0gJ2JvdGgnXHJcbiAgICAgICAgICAgICYmIGFyZ3VtZW50cy5sZW5ndGggPCAzXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIHNoYWRlclR5cGUgZGVmYXVsdCB0byBiZSAnYm90aCdcclxuICAgICAgICAgICAgdmFsID0gc3ltYm9sO1xyXG4gICAgICAgICAgICBzeW1ib2wgPSBzaGFkZXJUeXBlO1xyXG4gICAgICAgICAgICBzaGFkZXJUeXBlID0gJ2JvdGgnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YWwgPSB2YWwgIT0gbnVsbCA/IHZhbCA6IG51bGw7XHJcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgPT09ICd2ZXJ0ZXgnIHx8IHNoYWRlclR5cGUgPT09ICdib3RoJykge1xyXG4gICAgICAgICAgICBpZiAodmVydGV4RGVmaW5lc1tzeW1ib2xdICE9PSB2YWwpIHtcclxuICAgICAgICAgICAgICAgIHZlcnRleERlZmluZXNbc3ltYm9sXSA9IHZhbDtcclxuICAgICAgICAgICAgICAgIC8vIE1hcmsgYXMgZGlydHlcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2hhZGVyVHlwZSA9PT0gJ2ZyYWdtZW50JyB8fCBzaGFkZXJUeXBlID09PSAnYm90aCcpIHtcclxuICAgICAgICAgICAgaWYgKGZyYWdtZW50RGVmaW5lc1tzeW1ib2xdICE9PSB2YWwpIHtcclxuICAgICAgICAgICAgICAgIGZyYWdtZW50RGVmaW5lc1tzeW1ib2xdID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRlclR5cGUgIT09ICdib3RoJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgYSAjZGVmaW5lIG1hY3JvIGluIHNoYWRlciBjb2RlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHNoYWRlclR5cGUgQ2FuIGJlIHZlcnRleCwgZnJhZ21lbnQgb3IgYm90aFxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcclxuICAgICAqL1xyXG4gICAgdW5kZWZpbmU6IGZ1bmN0aW9uIChzaGFkZXJUeXBlLCBzeW1ib2wpIHtcclxuICAgICAgICBpZiAoc2hhZGVyVHlwZSAhPT0gJ3ZlcnRleCcgJiYgc2hhZGVyVHlwZSAhPT0gJ2ZyYWdtZW50JyAmJiBzaGFkZXJUeXBlICE9PSAnYm90aCdcclxuICAgICAgICAgICAgJiYgYXJndW1lbnRzLmxlbmd0aCA8IDJcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgLy8gc2hhZGVyVHlwZSBkZWZhdWx0IHRvIGJlICdib3RoJ1xyXG4gICAgICAgICAgICBzeW1ib2wgPSBzaGFkZXJUeXBlO1xyXG4gICAgICAgICAgICBzaGFkZXJUeXBlID0gJ2JvdGgnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2hhZGVyVHlwZSA9PT0gJ3ZlcnRleCcgfHwgc2hhZGVyVHlwZSA9PT0gJ2JvdGgnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVmaW5lZCgndmVydGV4Jywgc3ltYm9sKSkge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudmVydGV4RGVmaW5lc1tzeW1ib2xdO1xyXG4gICAgICAgICAgICAgICAgLy8gTWFyayBhcyBkaXJ0eVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzaGFkZXJUeXBlID09PSAnZnJhZ21lbnQnIHx8IHNoYWRlclR5cGUgPT09ICdib3RoJykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0RlZmluZWQoJ2ZyYWdtZW50Jywgc3ltYm9sKSkge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZnJhZ21lbnREZWZpbmVzW3N5bWJvbF07XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hhZGVyVHlwZSAhPT0gJ2JvdGgnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIG1hY3JvIGlzIGRlZmluZWQgaW4gc2hhZGVyLlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJUeXBlIENhbiBiZSB2ZXJ0ZXgsIGZyYWdtZW50IG9yIGJvdGhcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKi9cclxuICAgIGlzRGVmaW5lZDogZnVuY3Rpb24gKHNoYWRlclR5cGUsIHN5bWJvbCkge1xyXG4gICAgICAgIC8vIFBFTkRJTkcgaGFzT3duUHJvcGVydHkgP1xyXG4gICAgICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICd2ZXJ0ZXgnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmVydGV4RGVmaW5lc1tzeW1ib2xdICE9PSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ZyYWdtZW50JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyYWdtZW50RGVmaW5lc1tzeW1ib2xdICE9PSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogR2V0IG1hY3JvIHZhbHVlIGRlZmluZWQgaW4gc2hhZGVyLlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJUeXBlIENhbiBiZSB2ZXJ0ZXgsIGZyYWdtZW50IG9yIGJvdGhcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKi9cclxuICAgIGdldERlZmluZTogZnVuY3Rpb24gKHNoYWRlclR5cGUsIHN5bWJvbCkge1xyXG4gICAgICAgIHN3aXRjaChzaGFkZXJUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3ZlcnRleCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52ZXJ0ZXhEZWZpbmVzW3N5bWJvbF07XHJcbiAgICAgICAgICAgIGNhc2UgJ2ZyYWdtZW50JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyYWdtZW50RGVmaW5lc1tzeW1ib2xdO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZSBhIHRleHR1cmUsIGFjdHVhbGx5IGl0IHdpbGwgYWRkIGEgI2RlZmluZSBtYWNybyBpbiB0aGUgc2hhZGVyIGNvZGVcclxuICAgICAqIEZvciBleGFtcGxlLCBpZiB0ZXh0dXJlIHN5bWJvbCBpcyBkaWZmdXNlTWFwLCBpdCB3aWxsIGFkZCBhIGxpbmUgYCNkZWZpbmUgRElGRlVTRU1BUF9FTkFCTEVEYCBpbiB0aGUgc2hhZGVyIGNvZGVcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKi9cclxuICAgIGVuYWJsZVRleHR1cmU6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzeW1ib2wpKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9sLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZVRleHR1cmUoc3ltYm9sW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc3RhdHVzID0gdGhpcy5fdGV4dHVyZVN0YXR1c1tzeW1ib2xdO1xyXG4gICAgICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgICAgICAgdmFyIGlzRW5hYmxlZCA9IHN0YXR1cy5lbmFibGVkO1xyXG4gICAgICAgICAgICBpZiAoIWlzRW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRW5hYmxlIGFsbCB0ZXh0dXJlcyB1c2VkIGluIHRoZSBzaGFkZXJcclxuICAgICAqL1xyXG4gICAgZW5hYmxlVGV4dHVyZXNBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZVN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXM7XHJcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRleHR1cmVTdGF0dXMpIHtcclxuICAgICAgICAgICAgdGV4dHVyZVN0YXR1c1tzeW1ib2xdLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGlzYWJsZSBhIHRleHR1cmUsIGl0IHJlbW92ZSBhICNkZWZpbmUgbWFjcm8gaW4gdGhlIHNoYWRlclxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcclxuICAgICAqL1xyXG4gICAgZGlzYWJsZVRleHR1cmU6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzeW1ib2wpKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9sLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVUZXh0dXJlKHN5bWJvbFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXNbc3ltYm9sXTtcclxuICAgICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHZhciBpc0Rpc2FibGVkID0gISBzdGF0dXMuZW5hYmxlZDtcclxuICAgICAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXMuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGlzYWJsZSBhbGwgdGV4dHVyZXMgdXNlZCBpbiB0aGUgc2hhZGVyXHJcbiAgICAgKi9cclxuICAgIGRpc2FibGVUZXh0dXJlc0FsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlU3RhdHVzID0gdGhpcy5fdGV4dHVyZVN0YXR1cztcclxuICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gdGV4dHVyZVN0YXR1cykge1xyXG4gICAgICAgICAgICB0ZXh0dXJlU3RhdHVzW3N5bWJvbF0uZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogSWYgdGV4dHVyZSBvZiBnaXZlbiB0eXBlIGlzIGVuYWJsZWQuXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBzeW1ib2xcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzVGV4dHVyZUVuYWJsZWQ6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZVN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXM7XHJcbiAgICAgICAgcmV0dXJuICEhdGV4dHVyZVN0YXR1c1tzeW1ib2xdXHJcbiAgICAgICAgICAgICYmIHRleHR1cmVTdGF0dXNbc3ltYm9sXS5lbmFibGVkO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhbGwgZW5hYmxlZCB0ZXh0dXJlc1xyXG4gICAgICogQHJldHVybiB7c3RyaW5nW119XHJcbiAgICAgKi9cclxuICAgIGdldEVuYWJsZWRUZXh0dXJlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBlbmFibGVkVGV4dHVyZXMgPSBbXTtcclxuICAgICAgICB2YXIgdGV4dHVyZVN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXM7XHJcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRleHR1cmVTdGF0dXMpIHtcclxuICAgICAgICAgICAgaWYgKHRleHR1cmVTdGF0dXNbc3ltYm9sXS5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBlbmFibGVkVGV4dHVyZXMucHVzaChzeW1ib2wpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlbmFibGVkVGV4dHVyZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFyayBkZWZpbmVzIGFyZSB1cGRhdGVkLlxyXG4gICAgICovXHJcbiAgICBkaXJ0eURlZmluZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFByb2dyYW1LZXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3Byb2dyYW1LZXkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9IGdldFByb2dyYW1LZXkoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZlcnRleERlZmluZXMsIHRoaXMuZnJhZ21lbnREZWZpbmVzLCB0aGlzLmdldEVuYWJsZWRUZXh0dXJlcygpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9ncmFtS2V5O1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1hdGVyaWFsO1xyXG4iLCJpbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuXHJcbnZhciBTSEFERVJfU1RBVEVfVE9fRU5BQkxFID0gMTtcclxudmFyIFNIQURFUl9TVEFURV9LRUVQX0VOQUJMRSA9IDI7XHJcbnZhciBTSEFERVJfU1RBVEVfUEVORElORyA9IDM7XHJcblxyXG4vLyBFbmFibGUgYXR0cmlidXRlIG9wZXJhdGlvbiBpcyBnbG9iYWwgdG8gYWxsIHByb2dyYW1zXHJcbi8vIEhlcmUgc2F2ZWQgdGhlIGxpc3Qgb2YgYWxsIGVuYWJsZWQgYXR0cmlidXRlIGluZGV4XHJcbi8vIGh0dHA6Ly93d3cubWpic2hhdy5jb20vMjAxMy8wMy93ZWJnbC1maXhpbmctaW52YWxpZG9wZXJhdGlvbi5odG1sXHJcbnZhciBlbmFibGVkQXR0cmlidXRlTGlzdCA9IHt9O1xyXG5cclxuLy8gc29tZSB1dGlsIGZ1bmN0aW9uc1xyXG5mdW5jdGlvbiBhZGRMaW5lTnVtYmVycyhzdHJpbmcpIHtcclxuICAgIHZhciBjaHVua3MgPSBzdHJpbmcuc3BsaXQoJ1xcbicpO1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gY2h1bmtzLmxlbmd0aDsgaSA8IGlsOyBpICsrKSB7XHJcbiAgICAgICAgLy8gQ2hyb21lIHJlcG9ydHMgc2hhZGVyIGVycm9ycyBvbiBsaW5lc1xyXG4gICAgICAgIC8vIHN0YXJ0aW5nIGNvdW50aW5nIGZyb20gMVxyXG4gICAgICAgIGNodW5rc1tpXSA9IChpICsgMSkgKyAnOiAnICsgY2h1bmtzW2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNodW5rcy5qb2luKCdcXG4nKTtcclxufVxyXG5cclxuLy8gUmV0dXJuIHRydWUgb3IgZXJyb3IgbXNnIGlmIGVycm9yIGhhcHBlbmVkXHJcbmZ1bmN0aW9uIGNoZWNrU2hhZGVyRXJyb3JNc2coX2dsLCBzaGFkZXIsIHNoYWRlclN0cmluZykge1xyXG4gICAgaWYgKCFfZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgX2dsLkNPTVBJTEVfU1RBVFVTKSkge1xyXG4gICAgICAgIHJldHVybiBbX2dsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSwgYWRkTGluZU51bWJlcnMoc2hhZGVyU3RyaW5nKV0uam9pbignXFxuJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbnZhciB0bXBGbG9hdDMyQXJyYXkxNiA9IG5ldyB2ZW5kb3IuRmxvYXQzMkFycmF5KDE2KTtcclxuXHJcbnZhciBHTFByb2dyYW0gPSBCYXNlLmV4dGVuZCh7XHJcblxyXG4gICAgdW5pZm9ybVNlbWFudGljczoge30sXHJcbiAgICBhdHRyaWJ1dGVzOiB7fVxyXG5cclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fbG9jYXRpb25zID0ge307XHJcblxyXG4gICAgdGhpcy5fdGV4dHVyZVNsb3QgPSAwO1xyXG5cclxuICAgIHRoaXMuX3Byb2dyYW0gPSBudWxsO1xyXG59LCB7XHJcblxyXG4gICAgYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVNsb3QgPSAwO1xyXG4gICAgICAgIHJlbmRlcmVyLmdsLnVzZVByb2dyYW0odGhpcy5fcHJvZ3JhbSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGhhc1VuaWZvcm06IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl9sb2NhdGlvbnNbc3ltYm9sXTtcclxuICAgICAgICByZXR1cm4gbG9jYXRpb24gIT09IG51bGwgJiYgbG9jYXRpb24gIT09IHVuZGVmaW5lZDtcclxuICAgIH0sXHJcblxyXG4gICAgdXNlVGV4dHVyZVNsb3Q6IGZ1bmN0aW9uIChyZW5kZXJlciwgdGV4dHVyZSwgc2xvdCkge1xyXG4gICAgICAgIGlmICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLmdsLmFjdGl2ZVRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRTAgKyBzbG90KTtcclxuICAgICAgICAgICAgLy8gTWF5YmUgdGV4dHVyZSBpcyBub3QgbG9hZGVkIHlldDtcclxuICAgICAgICAgICAgaWYgKHRleHR1cmUuaXNSZW5kZXJhYmxlKCkpIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBCaW5kIHRleHR1cmUgdG8gbnVsbFxyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS51bmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjdXJyZW50VGV4dHVyZVNsb3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZVNsb3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlc2V0VGV4dHVyZVNsb3Q6IGZ1bmN0aW9uIChzbG90KSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVNsb3QgPSBzbG90IHx8IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIHRha2VDdXJyZW50VGV4dHVyZVNsb3Q6IGZ1bmN0aW9uIChyZW5kZXJlciwgdGV4dHVyZSkge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlU2xvdCA9IHRoaXMuX3RleHR1cmVTbG90O1xyXG5cclxuICAgICAgICB0aGlzLnVzZVRleHR1cmVTbG90KHJlbmRlcmVyLCB0ZXh0dXJlLCB0ZXh0dXJlU2xvdCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3RleHR1cmVTbG90Kys7XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlU2xvdDtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0VW5pZm9ybTogZnVuY3Rpb24gKF9nbCwgdHlwZSwgc3ltYm9sLCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciBsb2NhdGlvbk1hcCA9IHRoaXMuX2xvY2F0aW9ucztcclxuICAgICAgICB2YXIgbG9jYXRpb24gPSBsb2NhdGlvbk1hcFtzeW1ib2xdO1xyXG4gICAgICAgIC8vIFVuaWZvcm0gaXMgbm90IGV4aXN0ZWQgaW4gdGhlIHNoYWRlclxyXG4gICAgICAgIGlmIChsb2NhdGlvbiA9PT0gbnVsbCB8fCBsb2NhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdtNCc6XHJcbiAgICAgICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBVc2UgRmxvYXQzMkFycmF5IGlzIG11Y2ggZmFzdGVyIHRoYW4gYXJyYXkgd2hlbiB1bmlmb3JtTWF0cml4NGZ2LlxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG1wRmxvYXQzMkFycmF5MTZbaV0gPSB2YWx1ZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0bXBGbG9hdDMyQXJyYXkxNjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzJpJzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMmYnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICczaSc6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICczZic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICc0aSc6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnNGYnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzFpJzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICcxZic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMWZ2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMWl2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMml2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMmZ2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnM2l2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnM2Z2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnNGl2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnNGZ2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbTInOlxyXG4gICAgICAgICAgICBjYXNlICdtMnYnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbTMnOlxyXG4gICAgICAgICAgICBjYXNlICdtM3YnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbTR2JzpcclxuICAgICAgICAgICAgICAgIC8vIFJhdyB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIEFycmF5LmlzQXJyYXkodmFsdWVbMF0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkodmFsdWUubGVuZ3RoICogMTYpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB2YWx1ZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxNjsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtjdXJzb3IrK10gPSBpdGVtW2pdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBmYWxzZSwgYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7ICAgLy8gQXJyYXlCdWZmZXJWaWV3XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFVuaWZvcm1PZlNlbWFudGljOiBmdW5jdGlvbiAoX2dsLCBzZW1hbnRpYywgdmFsKSB7XHJcbiAgICAgICAgdmFyIHNlbWFudGljSW5mbyA9IHRoaXMudW5pZm9ybVNlbWFudGljc1tzZW1hbnRpY107XHJcbiAgICAgICAgaWYgKHNlbWFudGljSW5mbykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRVbmlmb3JtKF9nbCwgc2VtYW50aWNJbmZvLnR5cGUsIHNlbWFudGljSW5mby5zeW1ib2wsIHZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVXNlZCBmb3IgY3JlYXRpbmcgVkFPXHJcbiAgICAvLyBFbmFibGUgdGhlIGF0dHJpYnV0ZXMgcGFzc2VkIGluIGFuZCBkaXNhYmxlIHRoZSByZXN0XHJcbiAgICAvLyBFeGFtcGxlIFVzYWdlOlxyXG4gICAgLy8gZW5hYmxlQXR0cmlidXRlcyhyZW5kZXJlciwgW1wicG9zaXRpb25cIiwgXCJ0ZXhjb29yZHNcIl0pXHJcbiAgICBlbmFibGVBdHRyaWJ1dGVzOiBmdW5jdGlvbiAocmVuZGVyZXIsIGF0dHJpYkxpc3QsIHZhbykge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgcHJvZ3JhbSA9IHRoaXMuX3Byb2dyYW07XHJcblxyXG4gICAgICAgIHZhciBsb2NhdGlvbk1hcCA9IHRoaXMuX2xvY2F0aW9ucztcclxuXHJcbiAgICAgICAgdmFyIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0O1xyXG4gICAgICAgIGlmICh2YW8pIHtcclxuICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHQgPSB2YW8uX19lbmFibGVkQXR0cmlidXRlTGlzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0ID0gZW5hYmxlZEF0dHJpYnV0ZUxpc3RbcmVuZGVyZXIuX191aWRfX107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHQpIHtcclxuICAgICAgICAgICAgLy8gSW4gdmVydGV4IGFycmF5IG9iamVjdCBjb250ZXh0XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkcgRWFjaCB2YW8gb2JqZWN0IG5lZWRzIHRvIGVuYWJsZSBhdHRyaWJ1dGVzIGFnYWluP1xyXG4gICAgICAgICAgICBpZiAodmFvKSB7XHJcbiAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFxyXG4gICAgICAgICAgICAgICAgICAgID0gdmFvLl9fZW5hYmxlZEF0dHJpYnV0ZUxpc3RcclxuICAgICAgICAgICAgICAgICAgICA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRcclxuICAgICAgICAgICAgICAgICAgICA9IGVuYWJsZWRBdHRyaWJ1dGVMaXN0W3JlbmRlcmVyLl9fdWlkX19dXHJcbiAgICAgICAgICAgICAgICAgICAgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbG9jYXRpb25MaXN0ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBzeW1ib2wgPSBhdHRyaWJMaXN0W2ldO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuYXR0cmlidXRlc1tzeW1ib2xdKSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbkxpc3RbaV0gPSAtMTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGxvY2F0aW9uTWFwW3N5bWJvbF07XHJcbiAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IF9nbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgLy8gQXR0cmliIGxvY2F0aW9uIGlzIGEgbnVtYmVyIGZyb20gMCB0byAuLi5cclxuICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbkxpc3RbaV0gPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uTWFwW3N5bWJvbF0gPSBsb2NhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsb2NhdGlvbkxpc3RbaV0gPSBsb2NhdGlvbjtcclxuXHJcbiAgICAgICAgICAgIGlmICghZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbbG9jYXRpb25dKSB7XHJcbiAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtsb2NhdGlvbl0gPSBTSEFERVJfU1RBVEVfVE9fRU5BQkxFO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbbG9jYXRpb25dID0gU0hBREVSX1NUQVRFX0tFRVBfRU5BQkxFO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaChlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtpXSl7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFNIQURFUl9TVEFURV9UT19FTkFCTEU6XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0W2ldID0gU0hBREVSX1NUQVRFX1BFTkRJTkc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFNIQURFUl9TVEFURV9LRUVQX0VOQUJMRTpcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtpXSA9IFNIQURFUl9TVEFURV9QRU5ESU5HO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgLy8gRXhwaXJlZFxyXG4gICAgICAgICAgICAgICAgY2FzZSBTSEFERVJfU1RBVEVfUEVORElORzpcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0W2ldID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uTGlzdDtcclxuICAgIH0sXHJcblxyXG4gICAgYnVpbGRQcm9ncmFtOiBmdW5jdGlvbiAoX2dsLCBzaGFkZXIsIHZlcnRleFNoYWRlckNvZGUsIGZyYWdtZW50U2hhZGVyQ29kZSkge1xyXG4gICAgICAgIHZhciB2ZXJ0ZXhTaGFkZXIgPSBfZ2wuY3JlYXRlU2hhZGVyKF9nbC5WRVJURVhfU0hBREVSKTtcclxuICAgICAgICB2YXIgcHJvZ3JhbSA9IF9nbC5jcmVhdGVQcm9ncmFtKCk7XHJcblxyXG4gICAgICAgIF9nbC5zaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJDb2RlKTtcclxuICAgICAgICBfZ2wuY29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpO1xyXG5cclxuICAgICAgICB2YXIgZnJhZ21lbnRTaGFkZXIgPSBfZ2wuY3JlYXRlU2hhZGVyKF9nbC5GUkFHTUVOVF9TSEFERVIpO1xyXG4gICAgICAgIF9nbC5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyQ29kZSk7XHJcbiAgICAgICAgX2dsLmNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpO1xyXG5cclxuICAgICAgICB2YXIgbXNnID0gY2hlY2tTaGFkZXJFcnJvck1zZyhfZ2wsIHZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyQ29kZSk7XHJcbiAgICAgICAgaWYgKG1zZykge1xyXG4gICAgICAgICAgICByZXR1cm4gbXNnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtc2cgPSBjaGVja1NoYWRlckVycm9yTXNnKF9nbCwgZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyQ29kZSk7XHJcbiAgICAgICAgaWYgKG1zZykge1xyXG4gICAgICAgICAgICByZXR1cm4gbXNnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgX2dsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpO1xyXG4gICAgICAgIF9nbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpO1xyXG4gICAgICAgIC8vIEZvcmNlIHRoZSBwb3NpdGlvbiBiaW5kIHRvIGxvY2F0aW9uIDA7XHJcbiAgICAgICAgaWYgKHNoYWRlci5hdHRyaWJ1dGVTZW1hbnRpY3NbJ1BPU0lUSU9OJ10pIHtcclxuICAgICAgICAgICAgX2dsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAwLCBzaGFkZXIuYXR0cmlidXRlU2VtYW50aWNzWydQT1NJVElPTiddLnN5bWJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBFbHNlIGNob29zZSBhbiBhdHRyaWJ1dGUgYW5kIGJpbmQgdG8gbG9jYXRpb24gMDtcclxuICAgICAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpO1xyXG4gICAgICAgICAgICBfZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDAsIGtleXNbMF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgX2dsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xyXG5cclxuICAgICAgICBfZ2wuZGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcik7XHJcbiAgICAgICAgX2dsLmRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb2dyYW0gPSBwcm9ncmFtO1xyXG5cclxuICAgICAgICAvLyBTYXZlIGNvZGUuXHJcbiAgICAgICAgdGhpcy52ZXJ0ZXhDb2RlID0gdmVydGV4U2hhZGVyQ29kZTtcclxuICAgICAgICB0aGlzLmZyYWdtZW50Q29kZSA9IGZyYWdtZW50U2hhZGVyQ29kZTtcclxuXHJcbiAgICAgICAgaWYgKCFfZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBfZ2wuTElOS19TVEFUVVMpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnQ291bGQgbm90IGxpbmsgcHJvZ3JhbVxcbicgKyBfZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDYWNoZSB1bmlmb3JtIGxvY2F0aW9uc1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2hhZGVyLnVuaWZvcm1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtU3ltYm9sID0gc2hhZGVyLnVuaWZvcm1zW2ldO1xyXG4gICAgICAgICAgICB0aGlzLl9sb2NhdGlvbnNbdW5pZm9ybVN5bWJvbF0gPSBfZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIHVuaWZvcm1TeW1ib2wpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgR0xQcm9ncmFtOyIsImltcG9ydCBHTFByb2dyYW0gZnJvbSAnLi9HTFByb2dyYW0nO1xyXG5cclxudmFyIGxvb3BSZWdleCA9IC9mb3JcXHMqP1xcKGludFxccyo/X2lkeF9cXHMqXFw9XFxzKihbXFx3LV0rKVxcO1xccypfaWR4X1xccyo8XFxzKihbXFx3LV0rKTtcXHMqX2lkeF9cXHMqXFwrXFwrXFxzKlxcKVxccypcXHtcXHsoW1xcc1xcU10rPykoPz1cXH1cXH0pXFx9XFx9L2c7XHJcblxyXG5mdW5jdGlvbiB1bnJvbGxMb29wKHNoYWRlclN0ciwgZGVmaW5lcywgbGlnaHRzTnVtYmVycykge1xyXG4gICAgLy8gTG9vcCB1bnJvbGwgZnJvbSB0aHJlZS5qcywgaHR0cHM6Ly9naXRodWIuY29tL21yZG9vYi90aHJlZS5qcy9ibG9iL21hc3Rlci9zcmMvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUHJvZ3JhbS5qcyNMMTc1XHJcbiAgICAvLyBJbiBzb21lIGNhc2UgbGlrZSBzaGFkb3dNYXAgaW4gbG9vcCB1c2UgJ2knIHRvIGluZGV4IHZhbHVlIG11Y2ggc2xvd2VyLlxyXG5cclxuICAgIC8vIExvb3AgdXNlIF9pZHhfIGFuZCBpbmNyZWFzZWQgd2l0aCBfaWR4XysrIHdpbGwgYmUgdW5yb2xsZWRcclxuICAgIC8vIFVzZSB7eyB9fSB0byBtYXRjaCB0aGUgcGFpciBzbyB0aGUgaWYgc3RhdGVtZW50IHdpbGwgbm90IGJlIGFmZmVjdGVkXHJcbiAgICAvLyBXcml0ZSBsaWtlIGZvbGxvd2luZ1xyXG4gICAgLy8gZm9yIChpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IDQ7IF9pZHhfKyspIHt7XHJcbiAgICAvLyAgICAgdmVjMyBjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlc1tfaWR4X10sIHV2KS5yZ2I7XHJcbiAgICAvLyB9fVxyXG4gICAgZnVuY3Rpb24gcmVwbGFjZShtYXRjaCwgc3RhcnQsIGVuZCwgc25pcHBldCkge1xyXG4gICAgICAgIHZhciB1bnJvbGwgPSAnJztcclxuICAgICAgICAvLyBUcnkgdG8gdHJlYXQgYXMgZGVmaW5lXHJcbiAgICAgICAgaWYgKGlzTmFOKHN0YXJ0KSkge1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgaW4gZGVmaW5lcykge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQgPSBkZWZpbmVzW3N0YXJ0XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gbGlnaHROdW1iZXJEZWZpbmVzW3N0YXJ0XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNOYU4oZW5kKSkge1xyXG4gICAgICAgICAgICBpZiAoZW5kIGluIGRlZmluZXMpIHtcclxuICAgICAgICAgICAgICAgIGVuZCA9IGRlZmluZXNbZW5kXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVuZCA9IGxpZ2h0TnVtYmVyRGVmaW5lc1tlbmRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE8gRXJyb3IgY2hlY2tpbmdcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaWR4ID0gcGFyc2VJbnQoc3RhcnQpOyBpZHggPCBwYXJzZUludChlbmQpOyBpZHgrKykge1xyXG4gICAgICAgICAgICAvLyBQRU5ESU5HIEFkZCBzY29wZT9cclxuICAgICAgICAgICAgdW5yb2xsICs9ICd7J1xyXG4gICAgICAgICAgICAgICAgKyBzbmlwcGV0XHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL2Zsb2F0XFxzKlxcKFxccypfaWR4X1xccypcXCkvZywgaWR4LnRvRml4ZWQoMSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL19pZHhfL2csIGlkeClcclxuICAgICAgICAgICAgKyAnfSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdW5yb2xsO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBsaWdodE51bWJlckRlZmluZXMgPSB7fTtcclxuICAgIGZvciAodmFyIGxpZ2h0VHlwZSBpbiBsaWdodHNOdW1iZXJzKSB7XHJcbiAgICAgICAgbGlnaHROdW1iZXJEZWZpbmVzW2xpZ2h0VHlwZSArICdfQ09VTlQnXSA9IGxpZ2h0c051bWJlcnNbbGlnaHRUeXBlXTtcclxuICAgIH1cclxuICAgIHJldHVybiBzaGFkZXJTdHIucmVwbGFjZShsb29wUmVnZXgsIHJlcGxhY2UpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXREZWZpbmVDb2RlKGRlZmluZXMsIGxpZ2h0c051bWJlcnMsIGVuYWJsZWRUZXh0dXJlcykge1xyXG4gICAgdmFyIGRlZmluZVN0ciA9IFtdO1xyXG4gICAgaWYgKGxpZ2h0c051bWJlcnMpIHtcclxuICAgICAgICBmb3IgKHZhciBsaWdodFR5cGUgaW4gbGlnaHRzTnVtYmVycykge1xyXG4gICAgICAgICAgICB2YXIgY291bnQgPSBsaWdodHNOdW1iZXJzW2xpZ2h0VHlwZV07XHJcbiAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGRlZmluZVN0ci5wdXNoKCcjZGVmaW5lICcgKyBsaWdodFR5cGUudG9VcHBlckNhc2UoKSArICdfQ09VTlQgJyArIGNvdW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChlbmFibGVkVGV4dHVyZXMpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuYWJsZWRUZXh0dXJlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgc3ltYm9sID0gZW5hYmxlZFRleHR1cmVzW2ldO1xyXG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaCgnI2RlZmluZSAnICsgc3ltYm9sLnRvVXBwZXJDYXNlKCkgKyAnX0VOQUJMRUQnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBDdXN0b20gRGVmaW5lc1xyXG4gICAgZm9yICh2YXIgc3ltYm9sIGluIGRlZmluZXMpIHtcclxuICAgICAgICB2YXIgdmFsdWUgPSBkZWZpbmVzW3N5bWJvbF07XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGRlZmluZVN0ci5wdXNoKCcjZGVmaW5lICcgKyBzeW1ib2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaCgnI2RlZmluZSAnICsgc3ltYm9sICsgJyAnICsgdmFsdWUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlZmluZVN0ci5qb2luKCdcXG4nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uQ29kZShleHRzKSB7XHJcbiAgICAvLyBFeHRlbnNpb24gZGVjbGFyYXRpb24gbXVzdCBiZWZvcmUgYWxsIG5vbi1wcmVwcm9jZXNzb3IgY29kZXNcclxuICAgIC8vIFRPRE8gdmVydGV4ID8gZXh0ZW5zaW9uIGVudW0gP1xyXG4gICAgdmFyIGV4dGVuc2lvblN0ciA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZXh0ZW5zaW9uU3RyLnB1c2goJyNleHRlbnNpb24gR0xfJyArIGV4dHNbaV0gKyAnIDogZW5hYmxlJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXh0ZW5zaW9uU3RyLmpvaW4oJ1xcbicpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQcmVjaXNpb25Db2RlKHByZWNpc2lvbikge1xyXG4gICAgcmV0dXJuIFsncHJlY2lzaW9uJywgcHJlY2lzaW9uLCAnZmxvYXQnXS5qb2luKCcgJykgKyAnO1xcbidcclxuICAgICAgICArIFsncHJlY2lzaW9uJywgcHJlY2lzaW9uLCAnaW50J10uam9pbignICcpICsgJztcXG4nXHJcbiAgICAgICAgLy8gZGVwdGggdGV4dHVyZSBtYXkgaGF2ZSBwcmVjaXNpb24gcHJvYmxlbSBvbiBpT1MgZGV2aWNlLlxyXG4gICAgICAgICsgWydwcmVjaXNpb24nLCBwcmVjaXNpb24sICdzYW1wbGVyMkQnXS5qb2luKCcgJykgKyAnO1xcbic7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFByb2dyYW1NYW5hZ2VyKHJlbmRlcmVyKSB7XHJcbiAgICB0aGlzLl9yZW5kZXJlciA9IHJlbmRlcmVyO1xyXG4gICAgdGhpcy5fY2FjaGUgPSB7fTtcclxufVxyXG5cclxuUHJvZ3JhbU1hbmFnZXIucHJvdG90eXBlLmdldFByb2dyYW0gPSBmdW5jdGlvbiAocmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHNjZW5lKSB7XHJcbiAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuXHJcbiAgICB2YXIgaXNTa2lubmVkTWVzaCA9IHJlbmRlcmFibGUuaXNTa2lubmVkTWVzaCAmJiByZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2goKTtcclxuICAgIHZhciBrZXkgPSAncycgKyBtYXRlcmlhbC5zaGFkZXIuc2hhZGVySUQgKyAnbScgKyBtYXRlcmlhbC5nZXRQcm9ncmFtS2V5KCk7XHJcbiAgICBpZiAoc2NlbmUpIHtcclxuICAgICAgICBrZXkgKz0gJ3NlJyArIHNjZW5lLmdldFByb2dyYW1LZXkocmVuZGVyYWJsZS5saWdodEdyb3VwKTtcclxuICAgIH1cclxuICAgIGlmIChpc1NraW5uZWRNZXNoKSB7XHJcbiAgICAgICAga2V5ICs9ICcsJyArIHJlbmRlcmFibGUuam9pbnRzLmxlbmd0aDtcclxuICAgIH1cclxuICAgIHZhciBwcm9ncmFtID0gY2FjaGVba2V5XTtcclxuXHJcbiAgICBpZiAocHJvZ3JhbSkge1xyXG4gICAgICAgIHJldHVybiBwcm9ncmFtO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBsaWdodHNOdW1iZXJzID0gc2NlbmUgPyBzY2VuZS5nZXRMaWdodHNOdW1iZXJzKHJlbmRlcmFibGUubGlnaHRHcm91cCkgOiB7fTtcclxuICAgIHZhciByZW5kZXJlciA9IHRoaXMuX3JlbmRlcmVyO1xyXG4gICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgdmFyIGVuYWJsZWRUZXh0dXJlcyA9IG1hdGVyaWFsLmdldEVuYWJsZWRUZXh0dXJlcygpO1xyXG4gICAgdmFyIHNraW5EZWZpbmVDb2RlID0gJyc7XHJcbiAgICBpZiAoaXNTa2lubmVkTWVzaCkge1xyXG4gICAgICAgIHZhciBza2luRGVmaW5lcyA9IHtcclxuICAgICAgICAgICAgU0tJTk5JTkc6IG51bGwsXHJcbiAgICAgICAgICAgIEpPSU5UX0NPVU5UOiByZW5kZXJhYmxlLmpvaW50cy5sZW5ndGhcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChyZW5kZXJhYmxlLmpvaW50cy5sZW5ndGggPiByZW5kZXJlci5nZXRNYXhKb2ludE51bWJlcigpKSB7XHJcbiAgICAgICAgICAgIHNraW5EZWZpbmVzLlVTRV9TS0lOX01BVFJJQ0VTX1RFWFRVUkUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPIEFkZCBza2lubmluZyBjb2RlP1xyXG4gICAgICAgIHNraW5EZWZpbmVDb2RlID0gJ1xcbicgKyBnZXREZWZpbmVDb2RlKHNraW5EZWZpbmVzKSArICdcXG4nO1xyXG4gICAgfVxyXG4gICAgLy8gVE9ETyBPcHRpbWl6ZSBrZXkgZ2VuZXJhdGlvblxyXG4gICAgLy8gVkVSVEVYXHJcbiAgICB2YXIgdmVydGV4RGVmaW5lU3RyID0gc2tpbkRlZmluZUNvZGUgKyBnZXREZWZpbmVDb2RlKG1hdGVyaWFsLnZlcnRleERlZmluZXMsIGxpZ2h0c051bWJlcnMsIGVuYWJsZWRUZXh0dXJlcyk7XHJcbiAgICAvLyBGUkFHTUVOVFxyXG4gICAgdmFyIGZyYWdtZW50RGVmaW5lU3RyID0gc2tpbkRlZmluZUNvZGUgKyBnZXREZWZpbmVDb2RlKG1hdGVyaWFsLmZyYWdtZW50RGVmaW5lcywgbGlnaHRzTnVtYmVycywgZW5hYmxlZFRleHR1cmVzKTtcclxuXHJcbiAgICB2YXIgdmVydGV4Q29kZSA9IHZlcnRleERlZmluZVN0ciArICdcXG4nICsgbWF0ZXJpYWwuc2hhZGVyLnZlcnRleDtcclxuXHJcbiAgICB2YXIgZXh0ZW5zaW9ucyA9IFtcclxuICAgICAgICAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyxcclxuICAgICAgICAnRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCdcclxuICAgIF0uZmlsdGVyKGZ1bmN0aW9uIChleHQpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oZXh0KSAhPSBudWxsO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGV4dGVuc2lvbnMuaW5kZXhPZignRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCcpID49IDApIHtcclxuICAgICAgICBmcmFnbWVudERlZmluZVN0ciArPSAnXFxuI2RlZmluZSBTVVBQT1JUX1RFWFRVUkVfTE9EJztcclxuICAgIH1cclxuICAgIGlmIChleHRlbnNpb25zLmluZGV4T2YoJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycpID49IDApIHtcclxuICAgICAgICBmcmFnbWVudERlZmluZVN0ciArPSAnXFxuI2RlZmluZSBTVVBQT1JUX1NUQU5EQVJEX0RFUklWQVRJVkVTJztcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZnJhZ21lbnRDb2RlID0gZ2V0RXh0ZW5zaW9uQ29kZShleHRlbnNpb25zKSArICdcXG4nXHJcbiAgICAgICAgKyBnZXRQcmVjaXNpb25Db2RlKG1hdGVyaWFsLnByZWNpc2lvbikgKyAnXFxuJ1xyXG4gICAgICAgICsgZnJhZ21lbnREZWZpbmVTdHIgKyAnXFxuJ1xyXG4gICAgICAgICsgbWF0ZXJpYWwuc2hhZGVyLmZyYWdtZW50O1xyXG5cclxuICAgIHZhciBmaW5hbFZlcnRleENvZGUgPSB1bnJvbGxMb29wKHZlcnRleENvZGUsIG1hdGVyaWFsLnZlcnRleERlZmluZXMsIGxpZ2h0c051bWJlcnMpO1xyXG4gICAgdmFyIGZpbmFsRnJhZ21lbnRDb2RlID0gdW5yb2xsTG9vcChmcmFnbWVudENvZGUsIG1hdGVyaWFsLmZyYWdtZW50RGVmaW5lcywgbGlnaHRzTnVtYmVycyk7XHJcblxyXG4gICAgdmFyIHByb2dyYW0gPSBuZXcgR0xQcm9ncmFtKCk7XHJcbiAgICBwcm9ncmFtLnVuaWZvcm1TZW1hbnRpY3MgPSBtYXRlcmlhbC5zaGFkZXIudW5pZm9ybVNlbWFudGljcztcclxuICAgIHByb2dyYW0uYXR0cmlidXRlcyA9IG1hdGVyaWFsLnNoYWRlci5hdHRyaWJ1dGVzO1xyXG4gICAgdmFyIGVycm9yTXNnID0gcHJvZ3JhbS5idWlsZFByb2dyYW0oX2dsLCBtYXRlcmlhbC5zaGFkZXIsIGZpbmFsVmVydGV4Q29kZSwgZmluYWxGcmFnbWVudENvZGUpO1xyXG4gICAgcHJvZ3JhbS5fX2Vycm9yID0gZXJyb3JNc2c7XHJcblxyXG4gICAgY2FjaGVba2V5XSA9IHByb2dyYW07XHJcblxyXG4gICAgcmV0dXJuIHByb2dyYW07XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQcm9ncmFtTWFuYWdlcjsiLCIvKipcclxuICogTWFpbmx5IGRvIHRoZSBwYXJzZSBhbmQgY29tcGlsZSBvZiBzaGFkZXIgc3RyaW5nXHJcbiAqIFN1cHBvcnQgc2hhZGVyIGNvZGUgY2h1bmsgaW1wb3J0IGFuZCBleHBvcnRcclxuICogU3VwcG9ydCBzaGFkZXIgc2VtYW50aWNzXHJcbiAqIGh0dHA6Ly93d3cubnZpZGlhLmNvbS9vYmplY3QvdXNpbmdfc2FzLmh0bWxcclxuICogaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9jb2xsYWRhMmpzb24vaXNzdWVzLzQ1XHJcbiAqL1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcblxyXG52YXIgdW5pZm9ybVJlZ2V4ID0gL3VuaWZvcm1cXHMrKGJvb2x8ZmxvYXR8aW50fHZlYzJ8dmVjM3x2ZWM0fGl2ZWMyfGl2ZWMzfGl2ZWM0fG1hdDJ8bWF0M3xtYXQ0fHNhbXBsZXIyRHxzYW1wbGVyQ3ViZSlcXHMrKFtcXHNcXFNdKj8pOy9nO1xyXG52YXIgYXR0cmlidXRlUmVnZXggPSAvYXR0cmlidXRlXFxzKyhmbG9hdHxpbnR8dmVjMnx2ZWMzfHZlYzQpXFxzKyhbXFxzXFxTXSo/KTsvZztcclxuLy8gT25seSBwYXJzZSBudW1iZXIgZGVmaW5lLlxyXG52YXIgZGVmaW5lUmVnZXggPSAvI2RlZmluZVxccysoXFx3Kyk/KFxccytbXFxkLS5dKyk/XFxzKjs/XFxzKlxcbi9nO1xyXG5cclxudmFyIHVuaWZvcm1UeXBlTWFwID0ge1xyXG4gICAgJ2Jvb2wnOiAnMWknLFxyXG4gICAgJ2ludCc6ICcxaScsXHJcbiAgICAnc2FtcGxlcjJEJzogJ3QnLFxyXG4gICAgJ3NhbXBsZXJDdWJlJzogJ3QnLFxyXG4gICAgJ2Zsb2F0JzogJzFmJyxcclxuICAgICd2ZWMyJzogJzJmJyxcclxuICAgICd2ZWMzJzogJzNmJyxcclxuICAgICd2ZWM0JzogJzRmJyxcclxuICAgICdpdmVjMic6ICcyaScsXHJcbiAgICAnaXZlYzMnOiAnM2knLFxyXG4gICAgJ2l2ZWM0JzogJzRpJyxcclxuICAgICdtYXQyJzogJ20yJyxcclxuICAgICdtYXQzJzogJ20zJyxcclxuICAgICdtYXQ0JzogJ200J1xyXG59O1xyXG5cclxuZnVuY3Rpb24gY3JlYXRlWmVyb0FycmF5KGxlbikge1xyXG4gICAgdmFyIGFyciA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGFycltpXSA9IDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyO1xyXG59XHJcblxyXG52YXIgdW5pZm9ybVZhbHVlQ29uc3RydWN0b3IgPSB7XHJcbiAgICAnYm9vbCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH0sXHJcbiAgICAnaW50JzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMDsgfSxcclxuICAgICdmbG9hdCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDA7IH0sXHJcbiAgICAnc2FtcGxlcjJEJzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVsbDsgfSxcclxuICAgICdzYW1wbGVyQ3ViZSc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH0sXHJcblxyXG4gICAgJ3ZlYzInOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoMik7IH0sXHJcbiAgICAndmVjMyc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSgzKTsgfSxcclxuICAgICd2ZWM0JzogZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlWmVyb0FycmF5KDQpOyB9LFxyXG5cclxuICAgICdpdmVjMic6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSgyKTsgfSxcclxuICAgICdpdmVjMyc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSgzKTsgfSxcclxuICAgICdpdmVjNCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSg0KTsgfSxcclxuXHJcbiAgICAnbWF0Mic6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSg0KTsgfSxcclxuICAgICdtYXQzJzogZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlWmVyb0FycmF5KDkpOyB9LFxyXG4gICAgJ21hdDQnOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoMTYpOyB9LFxyXG5cclxuICAgICdhcnJheSc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtdOyB9XHJcbn07XHJcblxyXG52YXIgYXR0cmlidXRlU2VtYW50aWNzID0gW1xyXG4gICAgJ1BPU0lUSU9OJyxcclxuICAgICdOT1JNQUwnLFxyXG4gICAgJ0JJTk9STUFMJyxcclxuICAgICdUQU5HRU5UJyxcclxuICAgICdURVhDT09SRCcsXHJcbiAgICAnVEVYQ09PUkRfMCcsXHJcbiAgICAnVEVYQ09PUkRfMScsXHJcbiAgICAnQ09MT1InLFxyXG4gICAgLy8gU2tpbm5pbmdcclxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi9ibG9iL21hc3Rlci9zcGVjaWZpY2F0aW9uL1JFQURNRS5tZCNzZW1hbnRpY3NcclxuICAgICdKT0lOVCcsXHJcbiAgICAnV0VJR0hUJ1xyXG5dO1xyXG52YXIgdW5pZm9ybVNlbWFudGljcyA9IFtcclxuICAgICdTS0lOX01BVFJJWCcsXHJcbiAgICAvLyBJbmZvcm1hdGlvbiBhYm91dCB2aWV3cG9ydFxyXG4gICAgJ1ZJRVdQT1JUX1NJWkUnLFxyXG4gICAgJ1ZJRVdQT1JUJyxcclxuICAgICdERVZJQ0VQSVhFTFJBVElPJyxcclxuICAgIC8vIFdpbmRvdyBzaXplIGZvciB3aW5kb3cgcmVsYXRpdmUgY29vcmRpbmF0ZVxyXG4gICAgLy8gaHR0cHM6Ly93d3cub3BlbmdsLm9yZy9zZGsvZG9jcy9tYW4vaHRtbC9nbF9GcmFnQ29vcmQueGh0bWxcclxuICAgICdXSU5ET1dfU0laRScsXHJcbiAgICAvLyBJbmZvbWF0aW9uIGFib3V0IGNhbWVyYVxyXG4gICAgJ05FQVInLFxyXG4gICAgJ0ZBUicsXHJcbiAgICAvLyBUaW1lXHJcbiAgICAnVElNRSdcclxuXTtcclxudmFyIG1hdHJpeFNlbWFudGljcyA9IFtcclxuICAgICdXT1JMRCcsXHJcbiAgICAnVklFVycsXHJcbiAgICAnUFJPSkVDVElPTicsXHJcbiAgICAnV09STERWSUVXJyxcclxuICAgICdWSUVXUFJPSkVDVElPTicsXHJcbiAgICAnV09STERWSUVXUFJPSkVDVElPTicsXHJcbiAgICAnV09STERJTlZFUlNFJyxcclxuICAgICdWSUVXSU5WRVJTRScsXHJcbiAgICAnUFJPSkVDVElPTklOVkVSU0UnLFxyXG4gICAgJ1dPUkxEVklFV0lOVkVSU0UnLFxyXG4gICAgJ1ZJRVdQUk9KRUNUSU9OSU5WRVJTRScsXHJcbiAgICAnV09STERWSUVXUFJPSkVDVElPTklOVkVSU0UnLFxyXG4gICAgJ1dPUkxEVFJBTlNQT1NFJyxcclxuICAgICdWSUVXVFJBTlNQT1NFJyxcclxuICAgICdQUk9KRUNUSU9OVFJBTlNQT1NFJyxcclxuICAgICdXT1JMRFZJRVdUUkFOU1BPU0UnLFxyXG4gICAgJ1ZJRVdQUk9KRUNUSU9OVFJBTlNQT1NFJyxcclxuICAgICdXT1JMRFZJRVdQUk9KRUNUSU9OVFJBTlNQT1NFJyxcclxuICAgICdXT1JMRElOVkVSU0VUUkFOU1BPU0UnLFxyXG4gICAgJ1ZJRVdJTlZFUlNFVFJBTlNQT1NFJyxcclxuICAgICdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRScsXHJcbiAgICAnV09STERWSUVXSU5WRVJTRVRSQU5TUE9TRScsXHJcbiAgICAnVklFV1BST0pFQ1RJT05JTlZFUlNFVFJBTlNQT1NFJyxcclxuICAgICdXT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRSdcclxuXTtcclxuXHJcbnZhciBhdHRyaWJ1dGVTaXplTWFwID0ge1xyXG4gICAgLy8gV2ViR0wgZG9lcyBub3Qgc3VwcG9ydCBpbnRlZ2VyIGF0dHJpYnV0ZXNcclxuICAgICd2ZWM0JzogNCxcclxuICAgICd2ZWMzJzogMyxcclxuICAgICd2ZWMyJzogMixcclxuICAgICdmbG9hdCc6IDFcclxufTtcclxuXHJcblxyXG52YXIgc2hhZGVySURDYWNoZSA9IHt9O1xyXG52YXIgc2hhZGVyQ29kZUNhY2hlID0ge307XHJcblxyXG5mdW5jdGlvbiBnZXRTaGFkZXJJRCh2ZXJ0ZXgsIGZyYWdtZW50KSB7XHJcbiAgICB2YXIga2V5ID0gJ3ZlcnRleDonICsgdmVydGV4ICsgJ2ZyYWdtZW50OicgKyBmcmFnbWVudDtcclxuICAgIGlmIChzaGFkZXJJRENhY2hlW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gc2hhZGVySURDYWNoZVtrZXldO1xyXG4gICAgfVxyXG4gICAgdmFyIGlkID0gdXRpbC5nZW5HVUlEKCk7XHJcbiAgICBzaGFkZXJJRENhY2hlW2tleV0gPSBpZDtcclxuXHJcbiAgICBzaGFkZXJDb2RlQ2FjaGVbaWRdID0ge1xyXG4gICAgICAgIHZlcnRleDogdmVydGV4LFxyXG4gICAgICAgIGZyYWdtZW50OiBmcmFnbWVudFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gaWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUNvbW1lbnQoY29kZSkge1xyXG4gICAgcmV0dXJuIGNvZGUucmVwbGFjZSgvWyBcXHRdKlxcL1xcLy4qXFxuL2csICcnICkgICAvLyByZW1vdmUgLy9cclxuICAgICAgICAucmVwbGFjZSgvWyBcXHRdKlxcL1xcKltcXHNcXFNdKj9cXCpcXC8vZywgJycgKTsgLy8gcmVtb3ZlIC8qICovXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxvZ1N5bnRheEVycm9yKCkge1xyXG4gICAgY29uc29sZS5lcnJvcignV3JvbmcgdW5pZm9ybS9hdHRyaWJ1dGVzIHN5bnRheCcpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZURlY2xhcmF0aW9ucyh0eXBlLCBsaW5lKSB7XHJcbiAgICB2YXIgc3BlcmF0b3JzUmVnZXhwID0gL1ssPVxcKFxcKTpdLztcclxuICAgIHZhciB0b2tlbnMgPSBsaW5lXHJcbiAgICAgICAgLy8gQ29udmVydCBgc3ltYm9sOiBbMSwyLDNdYCB0byBgc3ltYm9sOiB2ZWMzKDEsMiwzKWBcclxuICAgICAgICAucmVwbGFjZSgvOlxccypcXFtcXHMqKC4qKVxccypcXF0vZywgJz0nICsgdHlwZSArICcoJDEpJylcclxuICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCAnJylcclxuICAgICAgICAuc3BsaXQoLyg/PVssPVxcKFxcKTpdKS9nKTtcclxuXHJcbiAgICB2YXIgbmV3VG9rZW5zID0gW107XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0b2tlbnNbaV0ubWF0Y2goc3BlcmF0b3JzUmVnZXhwKSkge1xyXG4gICAgICAgICAgICBuZXdUb2tlbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHRva2Vuc1tpXS5jaGFyQXQoMCksXHJcbiAgICAgICAgICAgICAgICB0b2tlbnNbaV0uc2xpY2UoMSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG5ld1Rva2Vucy5wdXNoKHRva2Vuc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdG9rZW5zID0gbmV3VG9rZW5zO1xyXG5cclxuICAgIHZhciBUWVBFX1NZTUJPTCA9IDA7XHJcbiAgICB2YXIgVFlQRV9BU1NJR04gPSAxO1xyXG4gICAgdmFyIFRZUEVfVkVDID0gMjtcclxuICAgIHZhciBUWVBFX0FSUiA9IDM7XHJcbiAgICB2YXIgVFlQRV9TRU1BTlRJQyA9IDQ7XHJcbiAgICB2YXIgVFlQRV9OT1JNQUwgPSA1O1xyXG5cclxuICAgIHZhciBvcFR5cGUgPSBUWVBFX1NZTUJPTDtcclxuICAgIHZhciBkZWNsYXJhdGlvbnMgPSB7fTtcclxuICAgIHZhciBkZWNsYXJhdGlvblZhbHVlID0gbnVsbDtcclxuICAgIHZhciBjdXJyZW50RGVjbGFyYXRpb247XHJcblxyXG4gICAgYWRkU3ltYm9sKHRva2Vuc1swXSk7XHJcblxyXG4gICAgZnVuY3Rpb24gYWRkU3ltYm9sKHN5bWJvbCkge1xyXG4gICAgICAgIGlmICghc3ltYm9sKSB7XHJcbiAgICAgICAgICAgIGxvZ1N5bnRheEVycm9yKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBhcnJSZXN1bHQgPSBzeW1ib2wubWF0Y2goL1xcWyguKj8pXFxdLyk7XHJcbiAgICAgICAgY3VycmVudERlY2xhcmF0aW9uID0gc3ltYm9sLnJlcGxhY2UoL1xcWyguKj8pXFxdLywgJycpO1xyXG4gICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dID0ge307XHJcbiAgICAgICAgaWYgKGFyclJlc3VsdCkge1xyXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS5pc0FycmF5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0uYXJyYXlTaXplID0gYXJyUmVzdWx0WzFdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTtcclxuICAgICAgICBpZiAoIXRva2VuKSB7ICAgLy8gRW1wdHkgdG9rZW47XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodG9rZW4gPT09ICc9Jykge1xyXG4gICAgICAgICAgICBpZiAob3BUeXBlICE9PSBUWVBFX1NZTUJPTFxyXG4gICAgICAgICAgICAmJiBvcFR5cGUgIT09IFRZUEVfQVJSKSB7XHJcbiAgICAgICAgICAgICAgICBsb2dTeW50YXhFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3BUeXBlID0gVFlQRV9BU1NJR047XHJcblxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodG9rZW4gPT09ICc6Jykge1xyXG4gICAgICAgICAgICBvcFR5cGUgPSBUWVBFX1NFTUFOVElDO1xyXG5cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRva2VuID09PSAnLCcpIHtcclxuICAgICAgICAgICAgaWYgKG9wVHlwZSA9PT0gVFlQRV9WRUMpIHtcclxuICAgICAgICAgICAgICAgIGlmICghKGRlY2xhcmF0aW9uVmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dTeW50YXhFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25WYWx1ZS5wdXNoKCt0b2tlbnNbKytpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvcFR5cGUgPSBUWVBFX05PUk1BTDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRva2VuID09PSAnKScpIHtcclxuICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0udmFsdWUgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheShkZWNsYXJhdGlvblZhbHVlKTtcclxuICAgICAgICAgICAgZGVjbGFyYXRpb25WYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIG9wVHlwZSA9IFRZUEVfTk9STUFMO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodG9rZW4gPT09ICcoJykge1xyXG4gICAgICAgICAgICBpZiAob3BUeXBlICE9PSBUWVBFX1ZFQykge1xyXG4gICAgICAgICAgICAgICAgbG9nU3ludGF4RXJyb3IoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghKGRlY2xhcmF0aW9uVmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpIHtcclxuICAgICAgICAgICAgICAgIGxvZ1N5bnRheEVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWNsYXJhdGlvblZhbHVlLnB1c2goK3Rva2Vuc1srK2ldKTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRva2VuLmluZGV4T2YoJ3ZlYycpID49IDApIHtcclxuICAgICAgICAgICAgaWYgKG9wVHlwZSAhPT0gVFlQRV9BU1NJR05cclxuICAgICAgICAgICAgLy8gQ29tcGF0aXRhYmxlIHdpdGggb2xkIHN5bnRheCBgc3ltYm9sOiBbMSwyLDNdYFxyXG4gICAgICAgICAgICAmJiBvcFR5cGUgIT09IFRZUEVfU0VNQU5USUMpIHtcclxuICAgICAgICAgICAgICAgIGxvZ1N5bnRheEVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcFR5cGUgPSBUWVBFX1ZFQztcclxuICAgICAgICAgICAgZGVjbGFyYXRpb25WYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob3BUeXBlID09PSBUWVBFX0FTU0lHTikge1xyXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS52YWx1ZSA9IHRva2VuID09PSAndHJ1ZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS52YWx1ZSA9IHBhcnNlRmxvYXQodG9rZW4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob3BUeXBlID09PSBUWVBFX1NFTUFOVElDKSB7XHJcbiAgICAgICAgICAgIHZhciBzZW1hbnRpYyA9IHRva2VuO1xyXG4gICAgICAgICAgICBpZiAoYXR0cmlidXRlU2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDBcclxuICAgICAgICAgICAgICAgIHx8IHVuaWZvcm1TZW1hbnRpY3MuaW5kZXhPZihzZW1hbnRpYykgPj0gMFxyXG4gICAgICAgICAgICAgICAgfHwgbWF0cml4U2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDBcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS5zZW1hbnRpYyA9IHNlbWFudGljO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHNlbWFudGljID09PSAnaWdub3JlJyB8fCBzZW1hbnRpYyA9PT0gJ3VuY29uZmlndXJhYmxlJykge1xyXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0uaWdub3JlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBwYXJzZSBhcyBhIGRlZmF1bHQgdHZhbHVlLlxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdib29sJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dLnZhbHVlID0gc2VtYW50aWMgPT09ICd0cnVlJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dLnZhbHVlID0gcGFyc2VGbG9hdChzZW1hbnRpYyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0cmVhdCBhcyBzeW1ib2wuXHJcbiAgICAgICAgYWRkU3ltYm9sKHRva2VuKTtcclxuICAgICAgICBvcFR5cGUgPSBUWVBFX1NZTUJPTDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGVjbGFyYXRpb25zO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKiBAYWxpYXMgY2xheS5TaGFkZXJcclxuICogQHBhcmFtIHtzdHJpbmd9IHZlcnRleFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZnJhZ21lbnRcclxuICogQGV4YW1wbGVcclxuICogLy8gQ3JlYXRlIGEgcGhvbmcgc2hhZGVyXHJcbiAqIHZhciBzaGFkZXIgPSBuZXcgY2xheS5TaGFkZXIoXHJcbiAqICAgICAgY2xheS5TaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkLnZlcnRleCcpLFxyXG4gKiAgICAgIGNsYXkuU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZC5mcmFnbWVudCcpXHJcbiAqICk7XHJcbiAqL1xyXG5mdW5jdGlvbiBTaGFkZXIodmVydGV4LCBmcmFnbWVudCkge1xyXG4gICAgLy8gRmlyc3QgYXJndW1lbnQgY2FuIGJlIHsgdmVydGV4LCBmcmFnbWVudCB9XHJcbiAgICBpZiAodHlwZW9mIHZlcnRleCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICBmcmFnbWVudCA9IHZlcnRleC5mcmFnbWVudDtcclxuICAgICAgICB2ZXJ0ZXggPSB2ZXJ0ZXgudmVydGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHZlcnRleCA9IHJlbW92ZUNvbW1lbnQodmVydGV4KTtcclxuICAgIGZyYWdtZW50ID0gcmVtb3ZlQ29tbWVudChmcmFnbWVudCk7XHJcblxyXG4gICAgdGhpcy5fc2hhZGVySUQgPSBnZXRTaGFkZXJJRCh2ZXJ0ZXgsIGZyYWdtZW50KTtcclxuXHJcbiAgICB0aGlzLl92ZXJ0ZXhDb2RlID0gU2hhZGVyLnBhcnNlSW1wb3J0KHZlcnRleCk7XHJcbiAgICB0aGlzLl9mcmFnbWVudENvZGUgPSBTaGFkZXIucGFyc2VJbXBvcnQoZnJhZ21lbnQpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXR0cmlidXRlU2VtYW50aWNzID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLm1hdHJpeFNlbWFudGljcyA9IHt9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy51bmlmb3JtU2VtYW50aWNzID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLm1hdHJpeFNlbWFudGljS2V5cyA9IFtdO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy51bmlmb3JtVGVtcGxhdGVzID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSB7fTtcclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMudGV4dHVyZXMgPSB7fTtcclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMudmVydGV4RGVmaW5lcyA9IHt9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy5mcmFnbWVudERlZmluZXMgPSB7fTtcclxuXHJcbiAgICB0aGlzLl9wYXJzZUF0dHJpYnV0ZXMoKTtcclxuICAgIHRoaXMuX3BhcnNlVW5pZm9ybXMoKTtcclxuICAgIHRoaXMuX3BhcnNlRGVmaW5lcygpO1xyXG59XHJcblxyXG5TaGFkZXIucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBTaGFkZXIsXHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgbmV3IHVuaWZvcm0gaW5zdGFuY2UgZm9yIG1hdGVyaWFsXHJcbiAgICBjcmVhdGVVbmlmb3JtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB1bmlmb3JtcyA9IHt9O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gdGhpcy51bmlmb3JtVGVtcGxhdGVzKXtcclxuICAgICAgICAgICAgdmFyIHVuaWZvcm1UcGwgPSB0aGlzLnVuaWZvcm1UZW1wbGF0ZXNbc3ltYm9sXTtcclxuICAgICAgICAgICAgdW5pZm9ybXNbc3ltYm9sXSA9IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IHVuaWZvcm1UcGwudHlwZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB1bmlmb3JtVHBsLnZhbHVlKClcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1bmlmb3JtcztcclxuICAgIH0sXHJcblxyXG4gICAgX3BhcnNlSW1wb3J0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fdmVydGV4Q29kZSA9IFNoYWRlci5wYXJzZUltcG9ydCh0aGlzLnZlcnRleCk7XHJcbiAgICAgICAgdGhpcy5fZnJhZ21lbnRDb2RlID0gU2hhZGVyLnBhcnNlSW1wb3J0KHRoaXMuZnJhZ21lbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfYWRkU2VtYW50aWNVbmlmb3JtOiBmdW5jdGlvbiAoc3ltYm9sLCB1bmlmb3JtVHlwZSwgc2VtYW50aWMpIHtcclxuICAgICAgICAvLyBUaGlzIGNhc2UgaXMgb25seSBmb3IgU0tJTl9NQVRSSVhcclxuICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZVNlbWFudGljcy5pbmRleE9mKHNlbWFudGljKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlU2VtYW50aWNzW3NlbWFudGljXSA9IHtcclxuICAgICAgICAgICAgICAgIHN5bWJvbDogc3ltYm9sLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdW5pZm9ybVR5cGVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobWF0cml4U2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDApIHtcclxuICAgICAgICAgICAgdmFyIGlzVHJhbnNwb3NlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBzZW1hbnRpY05vVHJhbnNwb3NlID0gc2VtYW50aWM7XHJcbiAgICAgICAgICAgIGlmIChzZW1hbnRpYy5tYXRjaCgvVFJBTlNQT1NFJC8pKSB7XHJcbiAgICAgICAgICAgICAgICBpc1RyYW5zcG9zZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBzZW1hbnRpY05vVHJhbnNwb3NlID0gc2VtYW50aWMuc2xpY2UoMCwgLTkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubWF0cml4U2VtYW50aWNzW3NlbWFudGljXSA9IHtcclxuICAgICAgICAgICAgICAgIHN5bWJvbDogc3ltYm9sLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdW5pZm9ybVR5cGUsXHJcbiAgICAgICAgICAgICAgICBpc1RyYW5zcG9zZTogaXNUcmFuc3Bvc2UsXHJcbiAgICAgICAgICAgICAgICBzZW1hbnRpY05vVHJhbnNwb3NlOiBzZW1hbnRpY05vVHJhbnNwb3NlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHVuaWZvcm1TZW1hbnRpY3MuaW5kZXhPZihzZW1hbnRpYykgPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1TZW1hbnRpY3Nbc2VtYW50aWNdID0ge1xyXG4gICAgICAgICAgICAgICAgc3ltYm9sOiBzeW1ib2wsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB1bmlmb3JtVHlwZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2FkZE1hdGVyaWFsVW5pZm9ybTogZnVuY3Rpb24gKHN5bWJvbCwgdHlwZSwgdW5pZm9ybVR5cGUsIGRlZmF1bHRWYWx1ZUZ1bmMsIGlzQXJyYXksIG1hdGVyaWFsVW5pZm9ybXMpIHtcclxuICAgICAgICBtYXRlcmlhbFVuaWZvcm1zW3N5bWJvbF0gPSB7XHJcbiAgICAgICAgICAgIHR5cGU6IHVuaWZvcm1UeXBlLFxyXG4gICAgICAgICAgICB2YWx1ZTogaXNBcnJheSA/IHVuaWZvcm1WYWx1ZUNvbnN0cnVjdG9yWydhcnJheSddIDogKGRlZmF1bHRWYWx1ZUZ1bmMgfHwgdW5pZm9ybVZhbHVlQ29uc3RydWN0b3JbdHlwZV0pLFxyXG4gICAgICAgICAgICBzZW1hbnRpYzogbnVsbFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZVVuaWZvcm1zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHVuaWZvcm1zID0ge307XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHZhciBzaGFkZXJUeXBlID0gJ3ZlcnRleCc7XHJcbiAgICAgICAgdGhpcy5fdW5pZm9ybUxpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5fdmVydGV4Q29kZSA9IHRoaXMuX3ZlcnRleENvZGUucmVwbGFjZSh1bmlmb3JtUmVnZXgsIF91bmlmb3JtUGFyc2VyKTtcclxuICAgICAgICBzaGFkZXJUeXBlID0gJ2ZyYWdtZW50JztcclxuICAgICAgICB0aGlzLl9mcmFnbWVudENvZGUgPSB0aGlzLl9mcmFnbWVudENvZGUucmVwbGFjZSh1bmlmb3JtUmVnZXgsIF91bmlmb3JtUGFyc2VyKTtcclxuXHJcbiAgICAgICAgc2VsZi5tYXRyaXhTZW1hbnRpY0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLm1hdHJpeFNlbWFudGljcyk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIG1ha2VEZWZhdWx0VmFsdWVGdW5jKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPSBudWxsID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0gOiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gX3VuaWZvcm1QYXJzZXIoc3RyLCB0eXBlLCBjb250ZW50KSB7XHJcbiAgICAgICAgICAgIHZhciBkZWNsYXJlZFVuaWZvcm1zID0gcGFyc2VEZWNsYXJhdGlvbnModHlwZSwgY29udGVudCk7XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtTWFpblN0ciA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gZGVjbGFyZWRVbmlmb3Jtcykge1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtSW5mbyA9IGRlY2xhcmVkVW5pZm9ybXNbc3ltYm9sXTtcclxuICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpYyA9IHVuaWZvcm1JbmZvLnNlbWFudGljO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRtcFN0ciA9IHN5bWJvbDtcclxuICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtVHlwZSA9IHVuaWZvcm1UeXBlTWFwW3R5cGVdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZUZ1bmMgPSBtYWtlRGVmYXVsdFZhbHVlRnVuYyhkZWNsYXJlZFVuaWZvcm1zW3N5bWJvbF0udmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlY2xhcmVkVW5pZm9ybXNbc3ltYm9sXS5pc0FycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG1wU3RyICs9ICdbJyArIGRlY2xhcmVkVW5pZm9ybXNbc3ltYm9sXS5hcnJheVNpemUgKyAnXSc7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pZm9ybVR5cGUgKz0gJ3YnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHVuaWZvcm1NYWluU3RyLnB1c2godG1wU3RyKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZWxmLl91bmlmb3JtTGlzdC5wdXNoKHN5bWJvbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF1bmlmb3JtSW5mby5pZ25vcmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3NhbXBsZXIyRCcgfHwgdHlwZSA9PT0gJ3NhbXBsZXJDdWJlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXh0dXJlIGlzIGRlZmF1bHQgZGlzYWJsZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXh0dXJlc1tzeW1ib2xdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyVHlwZTogc2hhZGVyVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIFNob3VsZCBub3QgZGVjbGFyZSBtdWx0aXBsZSBzeW1ib2xzIGlmIGhhdmUgc2VtYW50aWMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZFNlbWFudGljVW5pZm9ybShzeW1ib2wsIHVuaWZvcm1UeXBlLCBzZW1hbnRpYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRNYXRlcmlhbFVuaWZvcm0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2wsIHR5cGUsIHVuaWZvcm1UeXBlLCBkZWZhdWx0VmFsdWVGdW5jLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbGFyZWRVbmlmb3Jtc1tzeW1ib2xdLmlzQXJyYXksIHVuaWZvcm1zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB1bmlmb3JtTWFpblN0ci5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICA/ICd1bmlmb3JtICcgKyB0eXBlICsgJyAnICsgdW5pZm9ybU1haW5TdHIuam9pbignLCcpICsgJztcXG4nIDogJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVuaWZvcm1UZW1wbGF0ZXMgPSB1bmlmb3JtcztcclxuICAgIH0sXHJcblxyXG4gICAgX3BhcnNlQXR0cmlidXRlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0ge307XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuX3ZlcnRleENvZGUgPSB0aGlzLl92ZXJ0ZXhDb2RlLnJlcGxhY2UoYXR0cmlidXRlUmVnZXgsIF9hdHRyaWJ1dGVQYXJzZXIpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBfYXR0cmlidXRlUGFyc2VyKHN0ciwgdHlwZSwgY29udGVudCkge1xyXG4gICAgICAgICAgICB2YXIgZGVjbGFyZWRBdHRyaWJ1dGVzID0gcGFyc2VEZWNsYXJhdGlvbnModHlwZSwgY29udGVudCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2l6ZSA9IGF0dHJpYnV0ZVNpemVNYXBbdHlwZV0gfHwgMTtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU1haW5TdHIgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIGRlY2xhcmVkQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlbWFudGljID0gZGVjbGFyZWRBdHRyaWJ1dGVzW3N5bWJvbF0uc2VtYW50aWM7XHJcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3N5bWJvbF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBDYW4gb25seSBiZSBmbG9hdFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdmbG9hdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICBzZW1hbnRpYzogc2VtYW50aWMgfHwgbnVsbFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gU2hvdWxkIG5vdCBkZWNsYXJlIG11bHRpcGxlIHN5bWJvbHMgaWYgaGF2ZSBzZW1hbnRpYy5cclxuICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVTZW1hbnRpY3MuaW5kZXhPZihzZW1hbnRpYykgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rb3duIHNlbWFudGljIFwiJyArIHNlbWFudGljICsgJ1wiJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmF0dHJpYnV0ZVNlbWFudGljc1tzZW1hbnRpY10gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2w6IHN5bWJvbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVNYWluU3RyLnB1c2goc3ltYm9sKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuICdhdHRyaWJ1dGUgJyArIHR5cGUgKyAnICcgKyBhdHRyaWJ1dGVNYWluU3RyLmpvaW4oJywnKSArICc7XFxuJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZURlZmluZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHNoYWRlclR5cGUgPSAndmVydGV4JztcclxuICAgICAgICB0aGlzLl92ZXJ0ZXhDb2RlID0gdGhpcy5fdmVydGV4Q29kZS5yZXBsYWNlKGRlZmluZVJlZ2V4LCBfZGVmaW5lUGFyc2VyKTtcclxuICAgICAgICBzaGFkZXJUeXBlID0gJ2ZyYWdtZW50JztcclxuICAgICAgICB0aGlzLl9mcmFnbWVudENvZGUgPSB0aGlzLl9mcmFnbWVudENvZGUucmVwbGFjZShkZWZpbmVSZWdleCwgX2RlZmluZVBhcnNlcik7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQYXJzZXIoc3RyLCBzeW1ib2wsIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhciBkZWZpbmVzID0gc2hhZGVyVHlwZSA9PT0gJ3ZlcnRleCcgPyBzZWxmLnZlcnRleERlZmluZXMgOiBzZWxmLmZyYWdtZW50RGVmaW5lcztcclxuICAgICAgICAgICAgaWYgKCFkZWZpbmVzW3N5bWJvbF0pIHsgLy8gSGF2ZW4ndCBiZWVuIGRlZmluZWQgYnkgdXNlclxyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lc1tzeW1ib2xdID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lc1tzeW1ib2xdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmluZXNbc3ltYm9sXSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGNhbiBwYXJzZSB0byBmbG9hdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChpc05hTihwYXJzZUZsb2F0KHZhbHVlKSkgPyB2YWx1ZS50cmltKCkgOiBwYXJzZUZsb2F0KHZhbHVlKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgc2hhZGVyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlNoYWRlcn1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgY29kZSA9IHNoYWRlckNvZGVDYWNoZVt0aGlzLl9zaGFkZXJJRF07XHJcbiAgICAgICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoY29kZS52ZXJ0ZXgsIGNvZGUuZnJhZ21lbnQpO1xyXG4gICAgICAgIHJldHVybiBzaGFkZXI7XHJcbiAgICB9XHJcbn07XHJcblxyXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZGVyLnByb3RvdHlwZSwgJ3NoYWRlcklEJywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhZGVySUQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZGVyLnByb3RvdHlwZSwgJ3ZlcnRleCcsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZlcnRleENvZGU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZGVyLnByb3RvdHlwZSwgJ2ZyYWdtZW50Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhZ21lbnRDb2RlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlci5wcm90b3R5cGUsICd1bmlmb3JtcycsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VuaWZvcm1MaXN0O1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG52YXIgaW1wb3J0UmVnZXggPSAvKEBpbXBvcnQpXFxzKihbMC05YS16QS1aX1xcLVxcLl0qKS9nO1xyXG5TaGFkZXIucGFyc2VJbXBvcnQgPSBmdW5jdGlvbiAoc2hhZGVyU3RyKSB7XHJcbiAgICBzaGFkZXJTdHIgPSBzaGFkZXJTdHIucmVwbGFjZShpbXBvcnRSZWdleCwgZnVuY3Rpb24gKHN0ciwgaW1wb3J0U3ltYm9sLCBpbXBvcnROYW1lKSB7XHJcbiAgICAgICAgdmFyIHN0ciA9IFNoYWRlci5zb3VyY2UoaW1wb3J0TmFtZSk7XHJcbiAgICAgICAgaWYgKHN0cikge1xyXG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwYXJzZVxyXG4gICAgICAgICAgICByZXR1cm4gU2hhZGVyLnBhcnNlSW1wb3J0KHN0cik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTaGFkZXIgY2h1bmsgXCInICsgaW1wb3J0TmFtZSArICdcIiBub3QgZXhpc3RlZCBpbiBsaWJyYXJ5Jyk7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBzaGFkZXJTdHI7XHJcbn07XHJcblxyXG52YXIgZXhwb3J0UmVnZXggPSAvKEBleHBvcnQpXFxzKihbMC05YS16QS1aX1xcLVxcLl0qKVxccypcXG4oW1xcc1xcU10qPylAZW5kL2c7XHJcblxyXG4vKipcclxuICogSW1wb3J0IHNoYWRlciBzb3VyY2VcclxuICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJTdHJcclxuICogQG1lbWJlck9mIGNsYXkuU2hhZGVyXHJcbiAqL1xyXG5TaGFkZXJbJ2ltcG9ydCddID0gZnVuY3Rpb24gKHNoYWRlclN0cikge1xyXG4gICAgc2hhZGVyU3RyLnJlcGxhY2UoZXhwb3J0UmVnZXgsIGZ1bmN0aW9uIChzdHIsIGV4cG9ydFN5bWJvbCwgZXhwb3J0TmFtZSwgY29kZSkge1xyXG4gICAgICAgIHZhciBjb2RlID0gY29kZS5yZXBsYWNlKC8oXltcXHNcXHRcXHhhMFxcdTMwMDBdKyl8KFtcXHUzMDAwXFx4YTBcXHNcXHRdK1xceDI0KS9nLCAnJyk7XHJcbiAgICAgICAgaWYgKGNvZGUpIHtcclxuICAgICAgICAgICAgdmFyIHBhcnRzID0gZXhwb3J0TmFtZS5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICB2YXIgb2JqID0gU2hhZGVyLmNvZGVzO1xyXG4gICAgICAgICAgICB2YXIgaSA9IDA7XHJcbiAgICAgICAgICAgIHZhciBrZXk7XHJcbiAgICAgICAgICAgIHdoaWxlIChpIDwgcGFydHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAga2V5ID0gcGFydHNbaSsrXTtcclxuICAgICAgICAgICAgICAgIGlmICghb2JqW2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb2JqID0gb2JqW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAga2V5ID0gcGFydHNbaV07XHJcbiAgICAgICAgICAgIG9ialtrZXldID0gY29kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvZGU7XHJcbiAgICB9KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBMaWJyYXJ5IHRvIHN0b3JlIGFsbCB0aGUgbG9hZGVkIHNoYWRlciBjb2Rlc1xyXG4gKiBAdHlwZSB7T2JqZWN0fVxyXG4gKiBAcmVhZE9ubHlcclxuICogQG1lbWJlck9mIGNsYXkuU2hhZGVyXHJcbiAqL1xyXG5TaGFkZXIuY29kZXMgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgc2hhZGVyIHNvdXJjZVxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICogQHJldHVybiB7c3RyaW5nfVxyXG4gKi9cclxuU2hhZGVyLnNvdXJjZSA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICB2YXIgcGFydHMgPSBuYW1lLnNwbGl0KCcuJyk7XHJcbiAgICB2YXIgb2JqID0gU2hhZGVyLmNvZGVzO1xyXG4gICAgdmFyIGkgPSAwO1xyXG4gICAgd2hpbGUgKG9iaiAmJiBpIDwgcGFydHMubGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IHBhcnRzW2krK107XHJcbiAgICAgICAgb2JqID0gb2JqW2tleV07XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAvLyBGSVhNRSBVc2UgZGVmYXVsdCBpbnN0ZWFkXHJcbiAgICAgICAgY29uc29sZS5lcnJvcignU2hhZGVyIFwiJyArIG5hbWUgKyAnXCIgbm90IGV4aXN0ZWQgaW4gbGlicmFyeScpO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiBvYmo7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTaGFkZXI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LnByZXoudmVydGV4XFxudW5pZm9ybSBtYXQ0IFdWUCA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdXYgOiBURVhDT09SRF8wO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA6IFsxLjAsIDEuMF07XFxudW5pZm9ybSB2ZWMyIHV2T2Zmc2V0IDogWzAuMCwgMC4wXTtcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzMgUCA9IHBvcztcXG4jaWZkZWYgU0tJTk5JTkdcXG4gQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuIFAgPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3MsIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSBXVlAgKiB2ZWM0KFAsIDEuMCk7XFxuIHZfVGV4Y29vcmQgPSB1diAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkucHJlei5mcmFnbWVudFxcbnVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuMDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52b2lkIG1haW4oKVxcbntcXG4gaWYgKGFscGhhQ3V0b2ZmID4gMC4wKSB7XFxuIGlmICh0ZXh0dXJlMkQoYWxwaGFNYXAsIHZfVGV4Y29vcmQpLmEgPD0gYWxwaGFDdXRvZmYpIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiB9XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLDAuMCwwLjAsMS4wKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHtHTE1BVF9FUFNJTE9OLCBHTE1BVF9BUlJBWV9UWVBFIH0gZnJvbSAnLi9jb21tb24nO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyA0eDQgTWF0cml4XHJcbiAqIEBuYW1lIG1hdDRcclxuICovXHJcblxyXG52YXIgbWF0NCA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0NFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bWF0NH0gYSBuZXcgNHg0IG1hdHJpeFxyXG4gKi9cclxubWF0NC5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgxNik7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMDtcclxuICAgIG91dFs1XSA9IDE7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDA7XHJcbiAgICBvdXRbOV0gPSAwO1xyXG4gICAgb3V0WzEwXSA9IDE7XHJcbiAgICBvdXRbMTFdID0gMDtcclxuICAgIG91dFsxMl0gPSAwO1xyXG4gICAgb3V0WzEzXSA9IDA7XHJcbiAgICBvdXRbMTRdID0gMDtcclxuICAgIG91dFsxNV0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDQgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gYSBuZXcgNHg0IG1hdHJpeFxyXG4gKi9cclxubWF0NC5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgxNik7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICBvdXRbOV0gPSBhWzldO1xyXG4gICAgb3V0WzEwXSA9IGFbMTBdO1xyXG4gICAgb3V0WzExXSA9IGFbMTFdO1xyXG4gICAgb3V0WzEyXSA9IGFbMTJdO1xyXG4gICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgb3V0WzE1XSA9IGFbMTVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0NCB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIG91dFszXSA9IGFbM107XHJcbiAgICBvdXRbNF0gPSBhWzRdO1xyXG4gICAgb3V0WzVdID0gYVs1XTtcclxuICAgIG91dFs2XSA9IGFbNl07XHJcbiAgICBvdXRbN10gPSBhWzddO1xyXG4gICAgb3V0WzhdID0gYVs4XTtcclxuICAgIG91dFs5XSA9IGFbOV07XHJcbiAgICBvdXRbMTBdID0gYVsxMF07XHJcbiAgICBvdXRbMTFdID0gYVsxMV07XHJcbiAgICBvdXRbMTJdID0gYVsxMl07XHJcbiAgICBvdXRbMTNdID0gYVsxM107XHJcbiAgICBvdXRbMTRdID0gYVsxNF07XHJcbiAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBhIG1hdDQgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMDtcclxuICAgIG91dFs1XSA9IDE7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDA7XHJcbiAgICBvdXRbOV0gPSAwO1xyXG4gICAgb3V0WzEwXSA9IDE7XHJcbiAgICBvdXRbMTFdID0gMDtcclxuICAgIG91dFsxMl0gPSAwO1xyXG4gICAgb3V0WzEzXSA9IDA7XHJcbiAgICBvdXRbMTRdID0gMDtcclxuICAgIG91dFsxNV0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXHJcbiAgICBpZiAob3V0ID09PSBhKSB7XHJcbiAgICAgICAgdmFyIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM10sXHJcbiAgICAgICAgICAgIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXHJcbiAgICAgICAgICAgIGEyMyA9IGFbMTFdO1xyXG5cclxuICAgICAgICBvdXRbMV0gPSBhWzRdO1xyXG4gICAgICAgIG91dFsyXSA9IGFbOF07XHJcbiAgICAgICAgb3V0WzNdID0gYVsxMl07XHJcbiAgICAgICAgb3V0WzRdID0gYTAxO1xyXG4gICAgICAgIG91dFs2XSA9IGFbOV07XHJcbiAgICAgICAgb3V0WzddID0gYVsxM107XHJcbiAgICAgICAgb3V0WzhdID0gYTAyO1xyXG4gICAgICAgIG91dFs5XSA9IGExMjtcclxuICAgICAgICBvdXRbMTFdID0gYVsxNF07XHJcbiAgICAgICAgb3V0WzEyXSA9IGEwMztcclxuICAgICAgICBvdXRbMTNdID0gYTEzO1xyXG4gICAgICAgIG91dFsxNF0gPSBhMjM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG91dFswXSA9IGFbMF07XHJcbiAgICAgICAgb3V0WzFdID0gYVs0XTtcclxuICAgICAgICBvdXRbMl0gPSBhWzhdO1xyXG4gICAgICAgIG91dFszXSA9IGFbMTJdO1xyXG4gICAgICAgIG91dFs0XSA9IGFbMV07XHJcbiAgICAgICAgb3V0WzVdID0gYVs1XTtcclxuICAgICAgICBvdXRbNl0gPSBhWzldO1xyXG4gICAgICAgIG91dFs3XSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFs4XSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzldID0gYVs2XTtcclxuICAgICAgICBvdXRbMTBdID0gYVsxMF07XHJcbiAgICAgICAgb3V0WzExXSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxMl0gPSBhWzNdO1xyXG4gICAgICAgIG91dFsxM10gPSBhWzddO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzExXTtcclxuICAgICAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnZlcnRzIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxyXG4gICAgICAgIGExMCA9IGFbNF0sIGExMSA9IGFbNV0sIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXHJcbiAgICAgICAgYTIwID0gYVs4XSwgYTIxID0gYVs5XSwgYTIyID0gYVsxMF0sIGEyMyA9IGFbMTFdLFxyXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF0sIGEzMyA9IGFbMTVdLFxyXG5cclxuICAgICAgICBiMDAgPSBhMDAgKiBhMTEgLSBhMDEgKiBhMTAsXHJcbiAgICAgICAgYjAxID0gYTAwICogYTEyIC0gYTAyICogYTEwLFxyXG4gICAgICAgIGIwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMCxcclxuICAgICAgICBiMDMgPSBhMDEgKiBhMTIgLSBhMDIgKiBhMTEsXHJcbiAgICAgICAgYjA0ID0gYTAxICogYTEzIC0gYTAzICogYTExLFxyXG4gICAgICAgIGIwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMixcclxuICAgICAgICBiMDYgPSBhMjAgKiBhMzEgLSBhMjEgKiBhMzAsXHJcbiAgICAgICAgYjA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwLFxyXG4gICAgICAgIGIwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMCxcclxuICAgICAgICBiMDkgPSBhMjEgKiBhMzIgLSBhMjIgKiBhMzEsXHJcbiAgICAgICAgYjEwID0gYTIxICogYTMzIC0gYTIzICogYTMxLFxyXG4gICAgICAgIGIxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMixcclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxyXG4gICAgICAgIGRldCA9IGIwMCAqIGIxMSAtIGIwMSAqIGIxMCArIGIwMiAqIGIwOSArIGIwMyAqIGIwOCAtIGIwNCAqIGIwNyArIGIwNSAqIGIwNjtcclxuXHJcbiAgICBpZiAoIWRldCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuICAgIG91dFswXSA9IChhMTEgKiBiMTEgLSBhMTIgKiBiMTAgKyBhMTMgKiBiMDkpICogZGV0O1xyXG4gICAgb3V0WzFdID0gKGEwMiAqIGIxMCAtIGEwMSAqIGIxMSAtIGEwMyAqIGIwOSkgKiBkZXQ7XHJcbiAgICBvdXRbMl0gPSAoYTMxICogYjA1IC0gYTMyICogYjA0ICsgYTMzICogYjAzKSAqIGRldDtcclxuICAgIG91dFszXSA9IChhMjIgKiBiMDQgLSBhMjEgKiBiMDUgLSBhMjMgKiBiMDMpICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGExMiAqIGIwOCAtIGExMCAqIGIxMSAtIGExMyAqIGIwNykgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoYTAwICogYjExIC0gYTAyICogYjA4ICsgYTAzICogYjA3KSAqIGRldDtcclxuICAgIG91dFs2XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xyXG4gICAgb3V0WzddID0gKGEyMCAqIGIwNSAtIGEyMiAqIGIwMiArIGEyMyAqIGIwMSkgKiBkZXQ7XHJcbiAgICBvdXRbOF0gPSAoYTEwICogYjEwIC0gYTExICogYjA4ICsgYTEzICogYjA2KSAqIGRldDtcclxuICAgIG91dFs5XSA9IChhMDEgKiBiMDggLSBhMDAgKiBiMTAgLSBhMDMgKiBiMDYpICogZGV0O1xyXG4gICAgb3V0WzEwXSA9IChhMzAgKiBiMDQgLSBhMzEgKiBiMDIgKyBhMzMgKiBiMDApICogZGV0O1xyXG4gICAgb3V0WzExXSA9IChhMjEgKiBiMDIgLSBhMjAgKiBiMDQgLSBhMjMgKiBiMDApICogZGV0O1xyXG4gICAgb3V0WzEyXSA9IChhMTEgKiBiMDcgLSBhMTAgKiBiMDkgLSBhMTIgKiBiMDYpICogZGV0O1xyXG4gICAgb3V0WzEzXSA9IChhMDAgKiBiMDkgLSBhMDEgKiBiMDcgKyBhMDIgKiBiMDYpICogZGV0O1xyXG4gICAgb3V0WzE0XSA9IChhMzEgKiBiMDEgLSBhMzAgKiBiMDMgLSBhMzIgKiBiMDApICogZGV0O1xyXG4gICAgb3V0WzE1XSA9IChhMjAgKiBiMDMgLSBhMjEgKiBiMDEgKyBhMjIgKiBiMDApICogZGV0O1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYWRqdWdhdGUgb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LmFkam9pbnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxyXG4gICAgICAgIGExMCA9IGFbNF0sIGExMSA9IGFbNV0sIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXHJcbiAgICAgICAgYTIwID0gYVs4XSwgYTIxID0gYVs5XSwgYTIyID0gYVsxMF0sIGEyMyA9IGFbMTFdLFxyXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF0sIGEzMyA9IGFbMTVdO1xyXG5cclxuICAgIG91dFswXSAgPSAgKGExMSAqIChhMjIgKiBhMzMgLSBhMjMgKiBhMzIpIC0gYTIxICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgKyBhMzEgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSk7XHJcbiAgICBvdXRbMV0gID0gLShhMDEgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMSAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMxICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMikpO1xyXG4gICAgb3V0WzJdICA9ICAoYTAxICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgLSBhMTEgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMSAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpKTtcclxuICAgIG91dFszXSAgPSAtKGEwMSAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpIC0gYTExICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMikgKyBhMjEgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XHJcbiAgICBvdXRbNF0gID0gLShhMTAgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMCAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpICsgYTMwICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikpO1xyXG4gICAgb3V0WzVdICA9ICAoYTAwICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjAgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMCAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpKTtcclxuICAgIG91dFs2XSAgPSAtKGEwMCAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpIC0gYTEwICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzAgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XHJcbiAgICBvdXRbN10gID0gIChhMDAgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSAtIGExMCAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpICsgYTIwICogKGEwMiAqIGExMyAtIGEwMyAqIGExMikpO1xyXG4gICAgb3V0WzhdICA9ICAoYTEwICogKGEyMSAqIGEzMyAtIGEyMyAqIGEzMSkgLSBhMjAgKiAoYTExICogYTMzIC0gYTEzICogYTMxKSArIGEzMCAqIChhMTEgKiBhMjMgLSBhMTMgKiBhMjEpKTtcclxuICAgIG91dFs5XSAgPSAtKGEwMCAqIChhMjEgKiBhMzMgLSBhMjMgKiBhMzEpIC0gYTIwICogKGEwMSAqIGEzMyAtIGEwMyAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTIzIC0gYTAzICogYTIxKSk7XHJcbiAgICBvdXRbMTBdID0gIChhMDAgKiAoYTExICogYTMzIC0gYTEzICogYTMxKSAtIGExMCAqIChhMDEgKiBhMzMgLSBhMDMgKiBhMzEpICsgYTMwICogKGEwMSAqIGExMyAtIGEwMyAqIGExMSkpO1xyXG4gICAgb3V0WzExXSA9IC0oYTAwICogKGExMSAqIGEyMyAtIGExMyAqIGEyMSkgLSBhMTAgKiAoYTAxICogYTIzIC0gYTAzICogYTIxKSArIGEyMCAqIChhMDEgKiBhMTMgLSBhMDMgKiBhMTEpKTtcclxuICAgIG91dFsxMl0gPSAtKGExMCAqIChhMjEgKiBhMzIgLSBhMjIgKiBhMzEpIC0gYTIwICogKGExMSAqIGEzMiAtIGExMiAqIGEzMSkgKyBhMzAgKiAoYTExICogYTIyIC0gYTEyICogYTIxKSk7XHJcbiAgICBvdXRbMTNdID0gIChhMDAgKiAoYTIxICogYTMyIC0gYTIyICogYTMxKSAtIGEyMCAqIChhMDEgKiBhMzIgLSBhMDIgKiBhMzEpICsgYTMwICogKGEwMSAqIGEyMiAtIGEwMiAqIGEyMSkpO1xyXG4gICAgb3V0WzE0XSA9IC0oYTAwICogKGExMSAqIGEzMiAtIGExMiAqIGEzMSkgLSBhMTAgKiAoYTAxICogYTMyIC0gYTAyICogYTMxKSArIGEzMCAqIChhMDEgKiBhMTIgLSBhMDIgKiBhMTEpKTtcclxuICAgIG91dFsxNV0gPSAgKGEwMCAqIChhMTEgKiBhMjIgLSBhMTIgKiBhMjEpIC0gYTEwICogKGEwMSAqIGEyMiAtIGEwMiAqIGEyMSkgKyBhMjAgKiAoYTAxICogYTEyIC0gYTAyICogYTExKSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cclxubWF0NC5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSwgYTAzID0gYVszXSxcclxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXSxcclxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdLCBhMzMgPSBhWzE1XSxcclxuXHJcbiAgICAgICAgYjAwID0gYTAwICogYTExIC0gYTAxICogYTEwLFxyXG4gICAgICAgIGIwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMCxcclxuICAgICAgICBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTAsXHJcbiAgICAgICAgYjAzID0gYTAxICogYTEyIC0gYTAyICogYTExLFxyXG4gICAgICAgIGIwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMSxcclxuICAgICAgICBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTIsXHJcbiAgICAgICAgYjA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwLFxyXG4gICAgICAgIGIwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMCxcclxuICAgICAgICBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzAsXHJcbiAgICAgICAgYjA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxLFxyXG4gICAgICAgIGIxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMSxcclxuICAgICAgICBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzI7XHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxyXG4gICAgcmV0dXJuIGIwMCAqIGIxMSAtIGIwMSAqIGIxMCArIGIwMiAqIGIwOSArIGIwMyAqIGIwOCAtIGIwNCAqIGIwNyArIGIwNSAqIGIwNjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ0J3NcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0NH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxyXG4gICAgICAgIGExMCA9IGFbNF0sIGExMSA9IGFbNV0sIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXHJcbiAgICAgICAgYTIwID0gYVs4XSwgYTIxID0gYVs5XSwgYTIyID0gYVsxMF0sIGEyMyA9IGFbMTFdLFxyXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF0sIGEzMyA9IGFbMTVdO1xyXG5cclxuICAgIC8vIENhY2hlIG9ubHkgdGhlIGN1cnJlbnQgbGluZSBvZiB0aGUgc2Vjb25kIG1hdHJpeFxyXG4gICAgdmFyIGIwICA9IGJbMF0sIGIxID0gYlsxXSwgYjIgPSBiWzJdLCBiMyA9IGJbM107XHJcbiAgICBvdXRbMF0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjAgKyBiMyphMzA7XHJcbiAgICBvdXRbMV0gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjEgKyBiMyphMzE7XHJcbiAgICBvdXRbMl0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjIgKyBiMyphMzI7XHJcbiAgICBvdXRbM10gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XHJcblxyXG4gICAgYjAgPSBiWzRdOyBiMSA9IGJbNV07IGIyID0gYls2XTsgYjMgPSBiWzddO1xyXG4gICAgb3V0WzRdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xyXG4gICAgb3V0WzVdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxICsgYjMqYTMxO1xyXG4gICAgb3V0WzZdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYjMqYTMyO1xyXG4gICAgb3V0WzddID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xyXG5cclxuICAgIGIwID0gYls4XTsgYjEgPSBiWzldOyBiMiA9IGJbMTBdOyBiMyA9IGJbMTFdO1xyXG4gICAgb3V0WzhdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xyXG4gICAgb3V0WzldID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxICsgYjMqYTMxO1xyXG4gICAgb3V0WzEwXSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMiArIGIzKmEzMjtcclxuICAgIG91dFsxMV0gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XHJcblxyXG4gICAgYjAgPSBiWzEyXTsgYjEgPSBiWzEzXTsgYjIgPSBiWzE0XTsgYjMgPSBiWzE1XTtcclxuICAgIG91dFsxMl0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjAgKyBiMyphMzA7XHJcbiAgICBvdXRbMTNdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxICsgYjMqYTMxO1xyXG4gICAgb3V0WzE0XSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMiArIGIzKmEzMjtcclxuICAgIG91dFsxNV0gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIGFmZmluZSBtYXQ0J3NcclxuICogQWRkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9waXNzYW5nXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQubXVsdGlwbHlBZmZpbmUgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLFxyXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF07XHJcblxyXG4gICAgLy8gQ2FjaGUgb25seSB0aGUgY3VycmVudCBsaW5lIG9mIHRoZSBzZWNvbmQgbWF0cml4XHJcbiAgICB2YXIgYjAgID0gYlswXSwgYjEgPSBiWzFdLCBiMiA9IGJbMl07XHJcbiAgICBvdXRbMF0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjA7XHJcbiAgICBvdXRbMV0gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjE7XHJcbiAgICBvdXRbMl0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjI7XHJcbiAgICAvLyBvdXRbM10gPSAwO1xyXG5cclxuICAgIGIwID0gYls0XTsgYjEgPSBiWzVdOyBiMiA9IGJbNl07XHJcbiAgICBvdXRbNF0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjA7XHJcbiAgICBvdXRbNV0gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjE7XHJcbiAgICBvdXRbNl0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjI7XHJcbiAgICAvLyBvdXRbN10gPSAwO1xyXG5cclxuICAgIGIwID0gYls4XTsgYjEgPSBiWzldOyBiMiA9IGJbMTBdO1xyXG4gICAgb3V0WzhdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwO1xyXG4gICAgb3V0WzldID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxO1xyXG4gICAgb3V0WzEwXSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMjtcclxuICAgIC8vIG91dFsxMV0gPSAwO1xyXG5cclxuICAgIGIwID0gYlsxMl07IGIxID0gYlsxM107IGIyID0gYlsxNF07XHJcbiAgICBvdXRbMTJdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYTMwO1xyXG4gICAgb3V0WzEzXSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGEzMTtcclxuICAgIG91dFsxNF0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjIgKyBhMzI7XHJcbiAgICAvLyBvdXRbMTVdID0gMTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQ0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbm1hdDQubXVsID0gbWF0NC5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDQubXVsdGlwbHlBZmZpbmV9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxubWF0NC5tdWxBZmZpbmUgPSBtYXQ0Lm11bHRpcGx5QWZmaW5lO1xyXG4vKipcclxuICogVHJhbnNsYXRlIGEgbWF0NCBieSB0aGUgZ2l2ZW4gdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHRyYW5zbGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgdmVjdG9yIHRvIHRyYW5zbGF0ZSBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHYpIHtcclxuICAgIHZhciB4ID0gdlswXSwgeSA9IHZbMV0sIHogPSB2WzJdLFxyXG4gICAgICAgIGEwMCwgYTAxLCBhMDIsIGEwMyxcclxuICAgICAgICBhMTAsIGExMSwgYTEyLCBhMTMsXHJcbiAgICAgICAgYTIwLCBhMjEsIGEyMiwgYTIzO1xyXG5cclxuICAgIGlmIChhID09PSBvdXQpIHtcclxuICAgICAgICBvdXRbMTJdID0gYVswXSAqIHggKyBhWzRdICogeSArIGFbOF0gKiB6ICsgYVsxMl07XHJcbiAgICAgICAgb3V0WzEzXSA9IGFbMV0gKiB4ICsgYVs1XSAqIHkgKyBhWzldICogeiArIGFbMTNdO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzJdICogeCArIGFbNl0gKiB5ICsgYVsxMF0gKiB6ICsgYVsxNF07XHJcbiAgICAgICAgb3V0WzE1XSA9IGFbM10gKiB4ICsgYVs3XSAqIHkgKyBhWzExXSAqIHogKyBhWzE1XTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYTAwID0gYVswXTsgYTAxID0gYVsxXTsgYTAyID0gYVsyXTsgYTAzID0gYVszXTtcclxuICAgICAgICBhMTAgPSBhWzRdOyBhMTEgPSBhWzVdOyBhMTIgPSBhWzZdOyBhMTMgPSBhWzddO1xyXG4gICAgICAgIGEyMCA9IGFbOF07IGEyMSA9IGFbOV07IGEyMiA9IGFbMTBdOyBhMjMgPSBhWzExXTtcclxuXHJcbiAgICAgICAgb3V0WzBdID0gYTAwOyBvdXRbMV0gPSBhMDE7IG91dFsyXSA9IGEwMjsgb3V0WzNdID0gYTAzO1xyXG4gICAgICAgIG91dFs0XSA9IGExMDsgb3V0WzVdID0gYTExOyBvdXRbNl0gPSBhMTI7IG91dFs3XSA9IGExMztcclxuICAgICAgICBvdXRbOF0gPSBhMjA7IG91dFs5XSA9IGEyMTsgb3V0WzEwXSA9IGEyMjsgb3V0WzExXSA9IGEyMztcclxuXHJcbiAgICAgICAgb3V0WzEyXSA9IGEwMCAqIHggKyBhMTAgKiB5ICsgYTIwICogeiArIGFbMTJdO1xyXG4gICAgICAgIG91dFsxM10gPSBhMDEgKiB4ICsgYTExICogeSArIGEyMSAqIHogKyBhWzEzXTtcclxuICAgICAgICBvdXRbMTRdID0gYTAyICogeCArIGExMiAqIHkgKyBhMjIgKiB6ICsgYVsxNF07XHJcbiAgICAgICAgb3V0WzE1XSA9IGEwMyAqIHggKyBhMTMgKiB5ICsgYTIzICogeiArIGFbMTVdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2NhbGVzIHRoZSBtYXQ0IGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7dmVjM30gdiB0aGUgdmVjMyB0byBzY2FsZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICoqL1xyXG5tYXQ0LnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICB2YXIgeCA9IHZbMF0sIHkgPSB2WzFdLCB6ID0gdlsyXTtcclxuXHJcbiAgICBvdXRbMF0gPSBhWzBdICogeDtcclxuICAgIG91dFsxXSA9IGFbMV0gKiB4O1xyXG4gICAgb3V0WzJdID0gYVsyXSAqIHg7XHJcbiAgICBvdXRbM10gPSBhWzNdICogeDtcclxuICAgIG91dFs0XSA9IGFbNF0gKiB5O1xyXG4gICAgb3V0WzVdID0gYVs1XSAqIHk7XHJcbiAgICBvdXRbNl0gPSBhWzZdICogeTtcclxuICAgIG91dFs3XSA9IGFbN10gKiB5O1xyXG4gICAgb3V0WzhdID0gYVs4XSAqIHo7XHJcbiAgICBvdXRbOV0gPSBhWzldICogejtcclxuICAgIG91dFsxMF0gPSBhWzEwXSAqIHo7XHJcbiAgICBvdXRbMTFdID0gYVsxMV0gKiB6O1xyXG4gICAgb3V0WzEyXSA9IGFbMTJdO1xyXG4gICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgb3V0WzE1XSA9IGFbMTVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0NCBieSB0aGUgZ2l2ZW4gYW5nbGVcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEBwYXJhbSB7dmVjM30gYXhpcyB0aGUgYXhpcyB0byByb3RhdGUgYXJvdW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkLCBheGlzKSB7XHJcbiAgICB2YXIgeCA9IGF4aXNbMF0sIHkgPSBheGlzWzFdLCB6ID0gYXhpc1syXSxcclxuICAgICAgICBsZW4gPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KSxcclxuICAgICAgICBzLCBjLCB0LFxyXG4gICAgICAgIGEwMCwgYTAxLCBhMDIsIGEwMyxcclxuICAgICAgICBhMTAsIGExMSwgYTEyLCBhMTMsXHJcbiAgICAgICAgYTIwLCBhMjEsIGEyMiwgYTIzLFxyXG4gICAgICAgIGIwMCwgYjAxLCBiMDIsXHJcbiAgICAgICAgYjEwLCBiMTEsIGIxMixcclxuICAgICAgICBiMjAsIGIyMSwgYjIyO1xyXG5cclxuICAgIGlmIChNYXRoLmFicyhsZW4pIDwgR0xNQVRfRVBTSUxPTikgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgIGxlbiA9IDEgLyBsZW47XHJcbiAgICB4ICo9IGxlbjtcclxuICAgIHkgKj0gbGVuO1xyXG4gICAgeiAqPSBsZW47XHJcblxyXG4gICAgcyA9IE1hdGguc2luKHJhZCk7XHJcbiAgICBjID0gTWF0aC5jb3MocmFkKTtcclxuICAgIHQgPSAxIC0gYztcclxuXHJcbiAgICBhMDAgPSBhWzBdOyBhMDEgPSBhWzFdOyBhMDIgPSBhWzJdOyBhMDMgPSBhWzNdO1xyXG4gICAgYTEwID0gYVs0XTsgYTExID0gYVs1XTsgYTEyID0gYVs2XTsgYTEzID0gYVs3XTtcclxuICAgIGEyMCA9IGFbOF07IGEyMSA9IGFbOV07IGEyMiA9IGFbMTBdOyBhMjMgPSBhWzExXTtcclxuXHJcbiAgICAvLyBDb25zdHJ1Y3QgdGhlIGVsZW1lbnRzIG9mIHRoZSByb3RhdGlvbiBtYXRyaXhcclxuICAgIGIwMCA9IHggKiB4ICogdCArIGM7IGIwMSA9IHkgKiB4ICogdCArIHogKiBzOyBiMDIgPSB6ICogeCAqIHQgLSB5ICogcztcclxuICAgIGIxMCA9IHggKiB5ICogdCAtIHogKiBzOyBiMTEgPSB5ICogeSAqIHQgKyBjOyBiMTIgPSB6ICogeSAqIHQgKyB4ICogcztcclxuICAgIGIyMCA9IHggKiB6ICogdCArIHkgKiBzOyBiMjEgPSB5ICogeiAqIHQgLSB4ICogczsgYjIyID0geiAqIHogKiB0ICsgYztcclxuXHJcbiAgICAvLyBQZXJmb3JtIHJvdGF0aW9uLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxyXG4gICAgb3V0WzBdID0gYTAwICogYjAwICsgYTEwICogYjAxICsgYTIwICogYjAyO1xyXG4gICAgb3V0WzFdID0gYTAxICogYjAwICsgYTExICogYjAxICsgYTIxICogYjAyO1xyXG4gICAgb3V0WzJdID0gYTAyICogYjAwICsgYTEyICogYjAxICsgYTIyICogYjAyO1xyXG4gICAgb3V0WzNdID0gYTAzICogYjAwICsgYTEzICogYjAxICsgYTIzICogYjAyO1xyXG4gICAgb3V0WzRdID0gYTAwICogYjEwICsgYTEwICogYjExICsgYTIwICogYjEyO1xyXG4gICAgb3V0WzVdID0gYTAxICogYjEwICsgYTExICogYjExICsgYTIxICogYjEyO1xyXG4gICAgb3V0WzZdID0gYTAyICogYjEwICsgYTEyICogYjExICsgYTIyICogYjEyO1xyXG4gICAgb3V0WzddID0gYTAzICogYjEwICsgYTEzICogYjExICsgYTIzICogYjEyO1xyXG4gICAgb3V0WzhdID0gYTAwICogYjIwICsgYTEwICogYjIxICsgYTIwICogYjIyO1xyXG4gICAgb3V0WzldID0gYTAxICogYjIwICsgYTExICogYjIxICsgYTIxICogYjIyO1xyXG4gICAgb3V0WzEwXSA9IGEwMiAqIGIyMCArIGExMiAqIGIyMSArIGEyMiAqIGIyMjtcclxuICAgIG91dFsxMV0gPSBhMDMgKiBiMjAgKyBhMTMgKiBiMjEgKyBhMjMgKiBiMjI7XHJcblxyXG4gICAgaWYgKGEgIT09IG91dCkgeyAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCBsYXN0IHJvd1xyXG4gICAgICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgICAgICBvdXRbMTNdID0gYVsxM107XHJcbiAgICAgICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhWzE1XTtcclxuICAgIH1cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIG1hdHJpeCBieSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBYIGF4aXNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQucm90YXRlWCA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgdmFyIHMgPSBNYXRoLnNpbihyYWQpLFxyXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpLFxyXG4gICAgICAgIGExMCA9IGFbNF0sXHJcbiAgICAgICAgYTExID0gYVs1XSxcclxuICAgICAgICBhMTIgPSBhWzZdLFxyXG4gICAgICAgIGExMyA9IGFbN10sXHJcbiAgICAgICAgYTIwID0gYVs4XSxcclxuICAgICAgICBhMjEgPSBhWzldLFxyXG4gICAgICAgIGEyMiA9IGFbMTBdLFxyXG4gICAgICAgIGEyMyA9IGFbMTFdO1xyXG5cclxuICAgIGlmIChhICE9PSBvdXQpIHsgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgcm93c1xyXG4gICAgICAgIG91dFswXSAgPSBhWzBdO1xyXG4gICAgICAgIG91dFsxXSAgPSBhWzFdO1xyXG4gICAgICAgIG91dFsyXSAgPSBhWzJdO1xyXG4gICAgICAgIG91dFszXSAgPSBhWzNdO1xyXG4gICAgICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgICAgICBvdXRbMTNdID0gYVsxM107XHJcbiAgICAgICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhWzE1XTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXHJcbiAgICBvdXRbNF0gPSBhMTAgKiBjICsgYTIwICogcztcclxuICAgIG91dFs1XSA9IGExMSAqIGMgKyBhMjEgKiBzO1xyXG4gICAgb3V0WzZdID0gYTEyICogYyArIGEyMiAqIHM7XHJcbiAgICBvdXRbN10gPSBhMTMgKiBjICsgYTIzICogcztcclxuICAgIG91dFs4XSA9IGEyMCAqIGMgLSBhMTAgKiBzO1xyXG4gICAgb3V0WzldID0gYTIxICogYyAtIGExMSAqIHM7XHJcbiAgICBvdXRbMTBdID0gYTIyICogYyAtIGExMiAqIHM7XHJcbiAgICBvdXRbMTFdID0gYTIzICogYyAtIGExMyAqIHM7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXRyaXggYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWSBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LnJvdGF0ZVkgPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcclxuICAgIHZhciBzID0gTWF0aC5zaW4ocmFkKSxcclxuICAgICAgICBjID0gTWF0aC5jb3MocmFkKSxcclxuICAgICAgICBhMDAgPSBhWzBdLFxyXG4gICAgICAgIGEwMSA9IGFbMV0sXHJcbiAgICAgICAgYTAyID0gYVsyXSxcclxuICAgICAgICBhMDMgPSBhWzNdLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sXHJcbiAgICAgICAgYTIxID0gYVs5XSxcclxuICAgICAgICBhMjIgPSBhWzEwXSxcclxuICAgICAgICBhMjMgPSBhWzExXTtcclxuXHJcbiAgICBpZiAoYSAhPT0gb3V0KSB7IC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIHJvd3NcclxuICAgICAgICBvdXRbNF0gID0gYVs0XTtcclxuICAgICAgICBvdXRbNV0gID0gYVs1XTtcclxuICAgICAgICBvdXRbNl0gID0gYVs2XTtcclxuICAgICAgICBvdXRbN10gID0gYVs3XTtcclxuICAgICAgICBvdXRbMTJdID0gYVsxMl07XHJcbiAgICAgICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgICAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxyXG4gICAgb3V0WzBdID0gYTAwICogYyAtIGEyMCAqIHM7XHJcbiAgICBvdXRbMV0gPSBhMDEgKiBjIC0gYTIxICogcztcclxuICAgIG91dFsyXSA9IGEwMiAqIGMgLSBhMjIgKiBzO1xyXG4gICAgb3V0WzNdID0gYTAzICogYyAtIGEyMyAqIHM7XHJcbiAgICBvdXRbOF0gPSBhMDAgKiBzICsgYTIwICogYztcclxuICAgIG91dFs5XSA9IGEwMSAqIHMgKyBhMjEgKiBjO1xyXG4gICAgb3V0WzEwXSA9IGEwMiAqIHMgKyBhMjIgKiBjO1xyXG4gICAgb3V0WzExXSA9IGEwMyAqIHMgKyBhMjMgKiBjO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0cml4IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFogYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5yb3RhdGVaID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICB2YXIgcyA9IE1hdGguc2luKHJhZCksXHJcbiAgICAgICAgYyA9IE1hdGguY29zKHJhZCksXHJcbiAgICAgICAgYTAwID0gYVswXSxcclxuICAgICAgICBhMDEgPSBhWzFdLFxyXG4gICAgICAgIGEwMiA9IGFbMl0sXHJcbiAgICAgICAgYTAzID0gYVszXSxcclxuICAgICAgICBhMTAgPSBhWzRdLFxyXG4gICAgICAgIGExMSA9IGFbNV0sXHJcbiAgICAgICAgYTEyID0gYVs2XSxcclxuICAgICAgICBhMTMgPSBhWzddO1xyXG5cclxuICAgIGlmIChhICE9PSBvdXQpIHsgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgbGFzdCByb3dcclxuICAgICAgICBvdXRbOF0gID0gYVs4XTtcclxuICAgICAgICBvdXRbOV0gID0gYVs5XTtcclxuICAgICAgICBvdXRbMTBdID0gYVsxMF07XHJcbiAgICAgICAgb3V0WzExXSA9IGFbMTFdO1xyXG4gICAgICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgICAgICBvdXRbMTNdID0gYVsxM107XHJcbiAgICAgICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhWzE1XTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXHJcbiAgICBvdXRbMF0gPSBhMDAgKiBjICsgYTEwICogcztcclxuICAgIG91dFsxXSA9IGEwMSAqIGMgKyBhMTEgKiBzO1xyXG4gICAgb3V0WzJdID0gYTAyICogYyArIGExMiAqIHM7XHJcbiAgICBvdXRbM10gPSBhMDMgKiBjICsgYTEzICogcztcclxuICAgIG91dFs0XSA9IGExMCAqIGMgLSBhMDAgKiBzO1xyXG4gICAgb3V0WzVdID0gYTExICogYyAtIGEwMSAqIHM7XHJcbiAgICBvdXRbNl0gPSBhMTIgKiBjIC0gYTAyICogcztcclxuICAgIG91dFs3XSA9IGExMyAqIGMgLSBhMDMgKiBzO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBxdWF0ZXJuaW9uIHJvdGF0aW9uIGFuZCB2ZWN0b3IgdHJhbnNsYXRpb25cclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgdmVjKTtcclxuICogICAgIHZhciBxdWF0TWF0ID0gbWF0NC5jcmVhdGUoKTtcclxuICogICAgIHF1YXQ0LnRvTWF0NChxdWF0LCBxdWF0TWF0KTtcclxuICogICAgIG1hdDQubXVsdGlwbHkoZGVzdCwgcXVhdE1hdCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0NH0gcSBSb3RhdGlvbiBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gdiBUcmFuc2xhdGlvbiB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbiA9IGZ1bmN0aW9uIChvdXQsIHEsIHYpIHtcclxuICAgIC8vIFF1YXRlcm5pb24gbWF0aFxyXG4gICAgdmFyIHggPSBxWzBdLCB5ID0gcVsxXSwgeiA9IHFbMl0sIHcgPSBxWzNdLFxyXG4gICAgICAgIHgyID0geCArIHgsXHJcbiAgICAgICAgeTIgPSB5ICsgeSxcclxuICAgICAgICB6MiA9IHogKyB6LFxyXG5cclxuICAgICAgICB4eCA9IHggKiB4MixcclxuICAgICAgICB4eSA9IHggKiB5MixcclxuICAgICAgICB4eiA9IHggKiB6MixcclxuICAgICAgICB5eSA9IHkgKiB5MixcclxuICAgICAgICB5eiA9IHkgKiB6MixcclxuICAgICAgICB6eiA9IHogKiB6MixcclxuICAgICAgICB3eCA9IHcgKiB4MixcclxuICAgICAgICB3eSA9IHcgKiB5MixcclxuICAgICAgICB3eiA9IHcgKiB6MjtcclxuXHJcbiAgICBvdXRbMF0gPSAxIC0gKHl5ICsgenopO1xyXG4gICAgb3V0WzFdID0geHkgKyB3ejtcclxuICAgIG91dFsyXSA9IHh6IC0gd3k7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0geHkgLSB3ejtcclxuICAgIG91dFs1XSA9IDEgLSAoeHggKyB6eik7XHJcbiAgICBvdXRbNl0gPSB5eiArIHd4O1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IHh6ICsgd3k7XHJcbiAgICBvdXRbOV0gPSB5eiAtIHd4O1xyXG4gICAgb3V0WzEwXSA9IDEgLSAoeHggKyB5eSk7XHJcbiAgICBvdXRbMTFdID0gMDtcclxuICAgIG91dFsxMl0gPSB2WzBdO1xyXG4gICAgb3V0WzEzXSA9IHZbMV07XHJcbiAgICBvdXRbMTRdID0gdlsyXTtcclxuICAgIG91dFsxNV0gPSAxO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tYXQ0LmZyb21RdWF0ID0gZnVuY3Rpb24gKG91dCwgcSkge1xyXG4gICAgdmFyIHggPSBxWzBdLCB5ID0gcVsxXSwgeiA9IHFbMl0sIHcgPSBxWzNdLFxyXG4gICAgICAgIHgyID0geCArIHgsXHJcbiAgICAgICAgeTIgPSB5ICsgeSxcclxuICAgICAgICB6MiA9IHogKyB6LFxyXG5cclxuICAgICAgICB4eCA9IHggKiB4MixcclxuICAgICAgICB5eCA9IHkgKiB4MixcclxuICAgICAgICB5eSA9IHkgKiB5MixcclxuICAgICAgICB6eCA9IHogKiB4MixcclxuICAgICAgICB6eSA9IHogKiB5MixcclxuICAgICAgICB6eiA9IHogKiB6MixcclxuICAgICAgICB3eCA9IHcgKiB4MixcclxuICAgICAgICB3eSA9IHcgKiB5MixcclxuICAgICAgICB3eiA9IHcgKiB6MjtcclxuXHJcbiAgICBvdXRbMF0gPSAxIC0geXkgLSB6ejtcclxuICAgIG91dFsxXSA9IHl4ICsgd3o7XHJcbiAgICBvdXRbMl0gPSB6eCAtIHd5O1xyXG4gICAgb3V0WzNdID0gMDtcclxuXHJcbiAgICBvdXRbNF0gPSB5eCAtIHd6O1xyXG4gICAgb3V0WzVdID0gMSAtIHh4IC0geno7XHJcbiAgICBvdXRbNl0gPSB6eSArIHd4O1xyXG4gICAgb3V0WzddID0gMDtcclxuXHJcbiAgICBvdXRbOF0gPSB6eCArIHd5O1xyXG4gICAgb3V0WzldID0genkgLSB3eDtcclxuICAgIG91dFsxMF0gPSAxIC0geHggLSB5eTtcclxuICAgIG91dFsxMV0gPSAwO1xyXG5cclxuICAgIG91dFsxMl0gPSAwO1xyXG4gICAgb3V0WzEzXSA9IDA7XHJcbiAgICBvdXRbMTRdID0gMDtcclxuICAgIG91dFsxNV0gPSAxO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgZnJ1c3R1bSBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtOdW1iZXJ9IGxlZnQgTGVmdCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmlnaHQgUmlnaHQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IGJvdHRvbSBCb3R0b20gYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IHRvcCBUb3AgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LmZydXN0dW0gPSBmdW5jdGlvbiAob3V0LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xyXG4gICAgdmFyIHJsID0gMSAvIChyaWdodCAtIGxlZnQpLFxyXG4gICAgICAgIHRiID0gMSAvICh0b3AgLSBib3R0b20pLFxyXG4gICAgICAgIG5mID0gMSAvIChuZWFyIC0gZmFyKTtcclxuICAgIG91dFswXSA9IChuZWFyICogMikgKiBybDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSAobmVhciAqIDIpICogdGI7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IChyaWdodCArIGxlZnQpICogcmw7XHJcbiAgICBvdXRbOV0gPSAodG9wICsgYm90dG9tKSAqIHRiO1xyXG4gICAgb3V0WzEwXSA9IChmYXIgKyBuZWFyKSAqIG5mO1xyXG4gICAgb3V0WzExXSA9IC0xO1xyXG4gICAgb3V0WzEyXSA9IDA7XHJcbiAgICBvdXRbMTNdID0gMDtcclxuICAgIG91dFsxNF0gPSAoZmFyICogbmVhciAqIDIpICogbmY7XHJcbiAgICBvdXRbMTVdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtudW1iZXJ9IGZvdnkgVmVydGljYWwgZmllbGQgb2YgdmlldyBpbiByYWRpYW5zXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhc3BlY3QgQXNwZWN0IHJhdGlvLiB0eXBpY2FsbHkgdmlld3BvcnQgd2lkdGgvaGVpZ2h0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZWFyIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5wZXJzcGVjdGl2ZSA9IGZ1bmN0aW9uIChvdXQsIGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKSB7XHJcbiAgICB2YXIgZiA9IDEuMCAvIE1hdGgudGFuKGZvdnkgLyAyKSxcclxuICAgICAgICBuZiA9IDEgLyAobmVhciAtIGZhcik7XHJcbiAgICBvdXRbMF0gPSBmIC8gYXNwZWN0O1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMDtcclxuICAgIG91dFs1XSA9IGY7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDA7XHJcbiAgICBvdXRbOV0gPSAwO1xyXG4gICAgb3V0WzEwXSA9IChmYXIgKyBuZWFyKSAqIG5mO1xyXG4gICAgb3V0WzExXSA9IC0xO1xyXG4gICAgb3V0WzEyXSA9IDA7XHJcbiAgICBvdXRbMTNdID0gMDtcclxuICAgIG91dFsxNF0gPSAoMiAqIGZhciAqIG5lYXIpICogbmY7XHJcbiAgICBvdXRbMTVdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgb3J0aG9nb25hbCBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBib3VuZHNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge251bWJlcn0gbGVmdCBMZWZ0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByaWdodCBSaWdodCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gYm90dG9tIEJvdHRvbSBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gdG9wIFRvcCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gbmVhciBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBmYXIgRmFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQub3J0aG8gPSBmdW5jdGlvbiAob3V0LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xyXG4gICAgdmFyIGxyID0gMSAvIChsZWZ0IC0gcmlnaHQpLFxyXG4gICAgICAgIGJ0ID0gMSAvIChib3R0b20gLSB0b3ApLFxyXG4gICAgICAgIG5mID0gMSAvIChuZWFyIC0gZmFyKTtcclxuICAgIG91dFswXSA9IC0yICogbHI7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDA7XHJcbiAgICBvdXRbNF0gPSAwO1xyXG4gICAgb3V0WzVdID0gLTIgKiBidDtcclxuICAgIG91dFs2XSA9IDA7XHJcbiAgICBvdXRbN10gPSAwO1xyXG4gICAgb3V0WzhdID0gMDtcclxuICAgIG91dFs5XSA9IDA7XHJcbiAgICBvdXRbMTBdID0gMiAqIG5mO1xyXG4gICAgb3V0WzExXSA9IDA7XHJcbiAgICBvdXRbMTJdID0gKGxlZnQgKyByaWdodCkgKiBscjtcclxuICAgIG91dFsxM10gPSAodG9wICsgYm90dG9tKSAqIGJ0O1xyXG4gICAgb3V0WzE0XSA9IChmYXIgKyBuZWFyKSAqIG5mO1xyXG4gICAgb3V0WzE1XSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIGxvb2stYXQgbWF0cml4IHdpdGggdGhlIGdpdmVuIGV5ZSBwb3NpdGlvbiwgZm9jYWwgcG9pbnQsIGFuZCB1cCBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHt2ZWMzfSBleWUgUG9zaXRpb24gb2YgdGhlIHZpZXdlclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGNlbnRlciBQb2ludCB0aGUgdmlld2VyIGlzIGxvb2tpbmcgYXRcclxuICogQHBhcmFtIHt2ZWMzfSB1cCB2ZWMzIHBvaW50aW5nIHVwXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQubG9va0F0ID0gZnVuY3Rpb24gKG91dCwgZXllLCBjZW50ZXIsIHVwKSB7XHJcbiAgICB2YXIgeDAsIHgxLCB4MiwgeTAsIHkxLCB5MiwgejAsIHoxLCB6MiwgbGVuLFxyXG4gICAgICAgIGV5ZXggPSBleWVbMF0sXHJcbiAgICAgICAgZXlleSA9IGV5ZVsxXSxcclxuICAgICAgICBleWV6ID0gZXllWzJdLFxyXG4gICAgICAgIHVweCA9IHVwWzBdLFxyXG4gICAgICAgIHVweSA9IHVwWzFdLFxyXG4gICAgICAgIHVweiA9IHVwWzJdLFxyXG4gICAgICAgIGNlbnRlcnggPSBjZW50ZXJbMF0sXHJcbiAgICAgICAgY2VudGVyeSA9IGNlbnRlclsxXSxcclxuICAgICAgICBjZW50ZXJ6ID0gY2VudGVyWzJdO1xyXG5cclxuICAgIGlmIChNYXRoLmFicyhleWV4IC0gY2VudGVyeCkgPCBHTE1BVF9FUFNJTE9OICYmXHJcbiAgICAgICAgTWF0aC5hYnMoZXlleSAtIGNlbnRlcnkpIDwgR0xNQVRfRVBTSUxPTiAmJlxyXG4gICAgICAgIE1hdGguYWJzKGV5ZXogLSBjZW50ZXJ6KSA8IEdMTUFUX0VQU0lMT04pIHtcclxuICAgICAgICByZXR1cm4gbWF0NC5pZGVudGl0eShvdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHowID0gZXlleCAtIGNlbnRlcng7XHJcbiAgICB6MSA9IGV5ZXkgLSBjZW50ZXJ5O1xyXG4gICAgejIgPSBleWV6IC0gY2VudGVyejtcclxuXHJcbiAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KHowICogejAgKyB6MSAqIHoxICsgejIgKiB6Mik7XHJcbiAgICB6MCAqPSBsZW47XHJcbiAgICB6MSAqPSBsZW47XHJcbiAgICB6MiAqPSBsZW47XHJcblxyXG4gICAgeDAgPSB1cHkgKiB6MiAtIHVweiAqIHoxO1xyXG4gICAgeDEgPSB1cHogKiB6MCAtIHVweCAqIHoyO1xyXG4gICAgeDIgPSB1cHggKiB6MSAtIHVweSAqIHowO1xyXG4gICAgbGVuID0gTWF0aC5zcXJ0KHgwICogeDAgKyB4MSAqIHgxICsgeDIgKiB4Mik7XHJcbiAgICBpZiAoIWxlbikge1xyXG4gICAgICAgIHgwID0gMDtcclxuICAgICAgICB4MSA9IDA7XHJcbiAgICAgICAgeDIgPSAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZW4gPSAxIC8gbGVuO1xyXG4gICAgICAgIHgwICo9IGxlbjtcclxuICAgICAgICB4MSAqPSBsZW47XHJcbiAgICAgICAgeDIgKj0gbGVuO1xyXG4gICAgfVxyXG5cclxuICAgIHkwID0gejEgKiB4MiAtIHoyICogeDE7XHJcbiAgICB5MSA9IHoyICogeDAgLSB6MCAqIHgyO1xyXG4gICAgeTIgPSB6MCAqIHgxIC0gejEgKiB4MDtcclxuXHJcbiAgICBsZW4gPSBNYXRoLnNxcnQoeTAgKiB5MCArIHkxICogeTEgKyB5MiAqIHkyKTtcclxuICAgIGlmICghbGVuKSB7XHJcbiAgICAgICAgeTAgPSAwO1xyXG4gICAgICAgIHkxID0gMDtcclxuICAgICAgICB5MiA9IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxlbiA9IDEgLyBsZW47XHJcbiAgICAgICAgeTAgKj0gbGVuO1xyXG4gICAgICAgIHkxICo9IGxlbjtcclxuICAgICAgICB5MiAqPSBsZW47XHJcbiAgICB9XHJcblxyXG4gICAgb3V0WzBdID0geDA7XHJcbiAgICBvdXRbMV0gPSB5MDtcclxuICAgIG91dFsyXSA9IHowO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IHgxO1xyXG4gICAgb3V0WzVdID0geTE7XHJcbiAgICBvdXRbNl0gPSB6MTtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSB4MjtcclxuICAgIG91dFs5XSA9IHkyO1xyXG4gICAgb3V0WzEwXSA9IHoyO1xyXG4gICAgb3V0WzExXSA9IDA7XHJcbiAgICBvdXRbMTJdID0gLSh4MCAqIGV5ZXggKyB4MSAqIGV5ZXkgKyB4MiAqIGV5ZXopO1xyXG4gICAgb3V0WzEzXSA9IC0oeTAgKiBleWV4ICsgeTEgKiBleWV5ICsgeTIgKiBleWV6KTtcclxuICAgIG91dFsxNF0gPSAtKHowICogZXlleCArIHoxICogZXlleSArIHoyICogZXlleik7XHJcbiAgICBvdXRbMTVdID0gMTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cclxubWF0NC5mcm9iID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybihNYXRoLnNxcnQoTWF0aC5wb3coYVswXSwgMikgKyBNYXRoLnBvdyhhWzFdLCAyKSArIE1hdGgucG93KGFbMl0sIDIpICsgTWF0aC5wb3coYVszXSwgMikgKyBNYXRoLnBvdyhhWzRdLCAyKSArIE1hdGgucG93KGFbNV0sIDIpICsgTWF0aC5wb3coYVs2XSwgMikgKyBNYXRoLnBvdyhhWzddLCAyKSArIE1hdGgucG93KGFbOF0sIDIpICsgTWF0aC5wb3coYVs5XSwgMikgKyBNYXRoLnBvdyhhWzEwXSwgMikgKyBNYXRoLnBvdyhhWzExXSwgMikgKyBNYXRoLnBvdyhhWzEyXSwgMikgKyBNYXRoLnBvdyhhWzEzXSwgMikgKyBNYXRoLnBvdyhhWzE0XSwgMikgKyBNYXRoLnBvdyhhWzE1XSwgMikgKSlcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG1hdDQ7IiwiLy8gVE9ETyBSZXNvdXJjZXMgbGlrZSBzaGFkZXIsIHRleHR1cmUsIGdlb21ldHJ5IHJlZmVyZW5jZSBtYW5hZ2VtZW50XHJcbi8vIFRyYWNlIGFuZCBmaW5kIG91dCB3aGljaCBzaGFkZXIsIHRleHR1cmUsIGdlb21ldHJ5IGNhbiBiZSBkZXN0cm95ZWRcclxuaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgR0xJbmZvIGZyb20gJy4vY29yZS9HTEluZm8nO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4vY29yZS92ZW5kb3InO1xyXG5cclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tICcuL21hdGgvVmVjdG9yMic7XHJcbmltcG9ydCBQcm9ncmFtTWFuYWdlciBmcm9tICcuL2dwdS9Qcm9ncmFtTWFuYWdlcic7XHJcblxyXG4vLyBMaWdodCBoZWFkZXJcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuL1NoYWRlcic7XHJcblxyXG5pbXBvcnQgcHJlekVzc2wgZnJvbSAnLi9zaGFkZXIvc291cmNlL3ByZXouZ2xzbC5qcyc7XHJcblNoYWRlclsnaW1wb3J0J10ocHJlekVzc2wpO1xyXG5cclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcbnZhciBtYXQ0Q3JlYXRlID0gbWF0NC5jcmVhdGU7XHJcblxyXG52YXIgZXJyb3JTaGFkZXIgPSB7fTtcclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRHZXRNYXRlcmlhbChyZW5kZXJhYmxlKSB7XHJcbiAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbDtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0R2V0VW5pZm9ybShyZW5kZXJhYmxlLCBtYXRlcmlhbCwgc3ltYm9sKSB7XHJcbiAgICByZXR1cm4gbWF0ZXJpYWwudW5pZm9ybXNbc3ltYm9sXS52YWx1ZTtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0SXNNYXRlcmlhbENoYW5nZWQocmVuZGVyYWJsZWQsIHByZXZSZW5kZXJhYmxlLCBtYXRlcmlhbCwgcHJldk1hdGVyaWFsKSB7XHJcbiAgICByZXR1cm4gbWF0ZXJpYWwgIT09IHByZXZNYXRlcmlhbDtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0SWZSZW5kZXIocmVuZGVyYWJsZSkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5vb3AoKSB7fVxyXG5cclxudmFyIGF0dHJpYnV0ZUJ1ZmZlclR5cGVNYXAgPSB7XHJcbiAgICBmbG9hdDogZ2xlbnVtLkZMT0FULFxyXG4gICAgYnl0ZTogZ2xlbnVtLkJZVEUsXHJcbiAgICB1Ynl0ZTogZ2xlbnVtLlVOU0lHTkVEX0JZVEUsXHJcbiAgICBzaG9ydDogZ2xlbnVtLlNIT1JULFxyXG4gICAgdXNob3J0OiBnbGVudW0uVU5TSUdORURfU0hPUlRcclxufTtcclxuXHJcbmZ1bmN0aW9uIFZlcnRleEFycmF5T2JqZWN0KGF2YWlsYWJsZUF0dHJpYnV0ZXMsIGF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMsIGluZGljZXNCdWZmZXIpIHtcclxuICAgIHRoaXMuYXZhaWxhYmxlQXR0cmlidXRlcyA9IGF2YWlsYWJsZUF0dHJpYnV0ZXM7XHJcbiAgICB0aGlzLmF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMgPSBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzO1xyXG4gICAgdGhpcy5pbmRpY2VzQnVmZmVyID0gaW5kaWNlc0J1ZmZlcjtcclxuXHJcbiAgICB0aGlzLnZhbyA9IG51bGw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFBsYWNlSG9sZGVyVGV4dHVyZShyZW5kZXJlcikge1xyXG4gICAgdmFyIGJsYW5rQ2FudmFzO1xyXG4gICAgdmFyIHdlYmdsVGV4dHVyZTtcclxuICAgIHRoaXMuYmluZCA9IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIGlmICghYmxhbmtDYW52YXMpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBFbnZpcm9ubWVudCBub3Qgc3VwcG9ydCBjcmVhdGVDYW52YXMuXHJcbiAgICAgICAgICAgIGJsYW5rQ2FudmFzID0gdmVuZG9yLmNyZWF0ZUNhbnZhcygpO1xyXG4gICAgICAgICAgICBibGFua0NhbnZhcy53aWR0aCA9IGJsYW5rQ2FudmFzLmhlaWdodCA9IDE7XHJcbiAgICAgICAgICAgIGJsYW5rQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgZmlyc3RCaW5kID0gIXdlYmdsVGV4dHVyZTtcclxuICAgICAgICBpZiAoZmlyc3RCaW5kKSB7XHJcbiAgICAgICAgICAgIHdlYmdsVGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgd2ViZ2xUZXh0dXJlKTtcclxuICAgICAgICBpZiAoZmlyc3RCaW5kKSB7XHJcbiAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgYmxhbmtDYW52YXMpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aGlzLnVuYmluZCA9IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHJlbmRlcmVyLmdsLmJpbmRUZXh0dXJlKHJlbmRlcmVyLmdsLlRFWFRVUkVfMkQsIG51bGwpO1xyXG4gICAgfTtcclxuICAgIHRoaXMuaXNSZW5kZXJhYmxlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuUmVuZGVyZXJcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBSZW5kZXJlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuUmVuZGVyZXIjICovIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxDYW52YXNFbGVtZW50fVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNhbnZhczogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FudmFzIHdpZHRoLCBzZXQgYnkgcmVzaXplIG1ldGhvZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfd2lkdGg6IDEwMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FudmFzIHdpZHRoLCBzZXQgYnkgcmVzaXplIG1ldGhvZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfaGVpZ2h0OiAxMDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERldmljZSBwaXhlbCByYXRpbywgc2V0IGJ5IHNldERldmljZVBpeGVsUmF0aW8gbWV0aG9kXHJcbiAgICAgICAgICogU3BlY2lhbGx5IGZvciBoaWdoIGRlZmluYXRpb24gZGlzcGxheVxyXG4gICAgICAgICAqIEBzZWUgaHR0cDovL3d3dy5raHJvbm9zLm9yZy93ZWJnbC93aWtpL0hhbmRsaW5nSGlnaERQSVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBkZXZpY2VQaXhlbFJhdGlvOiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRldmljZVBpeGVsUmF0aW8pIHx8IDEuMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2xlYXIgY29sb3JcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyW119XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xlYXJDb2xvcjogWzAuMCwgMC4wLCAwLjAsIDAuMF0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERlZmF1bHQ6XHJcbiAgICAgICAgICogICAgIF9nbC5DT0xPUl9CVUZGRVJfQklUIHwgX2dsLkRFUFRIX0JVRkZFUl9CSVQgfCBfZ2wuU1RFTkNJTF9CVUZGRVJfQklUXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGVhckJpdDogMTc2NjQsXHJcblxyXG4gICAgICAgIC8vIFNldHRpbmdzIHdoZW4gZ2V0dGluZyBjb250ZXh0XHJcbiAgICAgICAgLy8gaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9zcGVjcy9sYXRlc3QvIzIuNFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgYWxwaGEsIGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFscGhhOiB0cnVlLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBkZXB0aCBidWZmZXIsIGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRlcHRoOiB0cnVlLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBzdGVuY2lsIGJ1ZmZlciwgZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHN0ZW5jaWw6IGZhbHNlLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBhbnRpYWxpYXMsIGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFudGlhbGlhczogdHJ1ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgcHJlbXVsdGlwbGllZCBhbHBoYSwgZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0cnVlLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHByZXNlcnZlIGRyYXdpbmcgYnVmZmVyLCBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0aHJvdyBjb250ZXh0IGVycm9yLCB1c3VhbGx5IHR1cm5lZCBvbiBpbiBkZWJ1ZyBtb2RlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhyb3dFcnJvcjogdHJ1ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXZWJHTCBDb250ZXh0IGNyZWF0ZWQgZnJvbSBnaXZlbiBjYW52YXNcclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdsOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFJlbmRlcmVyIHZpZXdwb3J0LCByZWFkLW9ubHksIGNhbiBiZSBzZXQgYnkgc2V0Vmlld3BvcnQgbWV0aG9kXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICB2aWV3cG9ydDoge30sXHJcblxyXG4gICAgICAgIC8vIFNldCBieSBGcmFtZUJ1ZmZlciNiaW5kXHJcbiAgICAgICAgX19jdXJyZW50RnJhbWVCdWZmZXI6IG51bGwsXHJcblxyXG4gICAgICAgIF92aWV3cG9ydFN0YWNrOiBbXSxcclxuICAgICAgICBfY2xlYXJTdGFjazogW10sXHJcblxyXG4gICAgICAgIF9zY2VuZVJlbmRlcmluZzogbnVsbFxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIGlmICghdGhpcy5jYW52YXMpIHtcclxuICAgICAgICB0aGlzLmNhbnZhcyA9IHZlbmRvci5jcmVhdGVDYW52YXMoKTtcclxuICAgIH1cclxuICAgIHZhciBjYW52YXMgPSB0aGlzLmNhbnZhcztcclxuICAgIHRyeSB7XHJcbiAgICAgICAgdmFyIG9wdHMgPSB7XHJcbiAgICAgICAgICAgIGFscGhhOiB0aGlzLmFscGhhLFxyXG4gICAgICAgICAgICBkZXB0aDogdGhpcy5kZXB0aCxcclxuICAgICAgICAgICAgc3RlbmNpbDogdGhpcy5zdGVuY2lsLFxyXG4gICAgICAgICAgICBhbnRpYWxpYXM6IHRoaXMuYW50aWFsaWFzLFxyXG4gICAgICAgICAgICBwcmVtdWx0aXBsaWVkQWxwaGE6IHRoaXMucHJlbXVsdGlwbGllZEFscGhhLFxyXG4gICAgICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5nbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIG9wdHMpXHJcbiAgICAgICAgICAgIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBvcHRzKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmdsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZ2xpbmZvID0gbmV3IEdMSW5mbyh0aGlzLmdsKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2wudGFyZ2V0UmVuZGVyZXIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQWxyZWFkeSBjcmVhdGVkIGEgcmVuZGVyZXInKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nbC50YXJnZXRSZW5kZXJlciA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMucmVzaXplKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIHRocm93ICdFcnJvciBjcmVhdGluZyBXZWJHTCBDb250ZXh0ICcgKyBlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEluaXQgbWFuYWdlcnNcclxuICAgIHRoaXMuX3Byb2dyYW1NZ3IgPSBuZXcgUHJvZ3JhbU1hbmFnZXIodGhpcyk7XHJcblxyXG4gICAgdGhpcy5fcGxhY2Vob2xkZXJUZXh0dXJlID0gbmV3IFBsYWNlSG9sZGVyVGV4dHVyZSh0aGlzKTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LlJlbmRlcmVyLnByb3RvdHlwZS4gKiovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogUmVzaXplIHRoZSBjYW52YXNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxyXG4gICAgICovXHJcbiAgICByZXNpemU6IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgICAgICB2YXIgY2FudmFzID0gdGhpcy5jYW52YXM7XHJcbiAgICAgICAgLy8gaHR0cDovL3d3dy5raHJvbm9zLm9yZy93ZWJnbC93aWtpL0hhbmRsaW5nSGlnaERQSVxyXG4gICAgICAgIC8vIHNldCB0aGUgZGlzcGxheSBzaXplIG9mIHRoZSBjYW52YXMuXHJcbiAgICAgICAgdmFyIGRwciA9IHRoaXMuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICBpZiAod2lkdGggIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoY2FudmFzLnN0eWxlKSB7XHJcbiAgICAgICAgICAgICAgICBjYW52YXMuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XHJcbiAgICAgICAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHNpemUgb2YgdGhlIGRyYXdpbmdCdWZmZXJcclxuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGggKiBkcHI7XHJcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKiBkcHI7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IGNhbnZhcy53aWR0aCAvIGRwcjtcclxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gY2FudmFzLmhlaWdodCAvIGRwcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0Vmlld3BvcnQoMCwgMCwgdGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHJlbmRlcmVyIHdpZHRoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldFdpZHRoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCByZW5kZXJlciBoZWlnaHRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0SGVpZ2h0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdmlld3BvcnQgYXNwZWN0LFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXRWaWV3cG9ydEFzcGVjdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7XHJcbiAgICAgICAgcmV0dXJuIHZpZXdwb3J0LndpZHRoIC8gdmlld3BvcnQuaGVpZ2h0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBkZXZpY2VQaXhlbFJhdGlvXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGV2aWNlUGl4ZWxSYXRpb1xyXG4gICAgICovXHJcbiAgICBzZXREZXZpY2VQaXhlbFJhdGlvOiBmdW5jdGlvbihkZXZpY2VQaXhlbFJhdGlvKSB7XHJcbiAgICAgICAgdGhpcy5kZXZpY2VQaXhlbFJhdGlvID0gZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICB0aGlzLnJlc2l6ZSh0aGlzLl93aWR0aCwgdGhpcy5faGVpZ2h0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZGV2aWNlUGl4ZWxSYXRpb1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRldmljZVBpeGVsUmF0aW9cclxuICAgICAqL1xyXG4gICAgZ2V0RGV2aWNlUGl4ZWxSYXRpbzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRldmljZVBpeGVsUmF0aW87XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IFdlYkdMIGV4dGVuc2lvblxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge29iamVjdH1cclxuICAgICAqL1xyXG4gICAgZ2V0R0xFeHRlbnNpb246IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dsaW5mby5nZXRFeHRlbnNpb24obmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IFdlYkdMIHBhcmFtZXRlclxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4geyp9XHJcbiAgICAgKi9cclxuICAgIGdldEdMUGFyYW1ldGVyOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nbGluZm8uZ2V0UGFyYW1ldGVyKG5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCByZW5kZXJpbmcgdmlld3BvcnRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfE9iamVjdH0geFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aF1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0XVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtkZXZpY2VQaXhlbFJhdGlvXVxyXG4gICAgICogICAgICAgIERlZmF1bHRseSB1c2UgdGhlIHJlbmRlcmVyZSBkZXZpY2VQaXhlbFJhdGlvXHJcbiAgICAgKiAgICAgICAgSXQgbmVlZHMgdG8gYmUgMSB3aGVuIHNldFZpZXdwb3J0IGlzIGNhbGxlZCBieSBmcmFtZUJ1ZmZlclxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiAgc2V0Vmlld3BvcnQoMCwwLHdpZHRoLGhlaWdodCwxKVxyXG4gICAgICogIHNldFZpZXdwb3J0KHtcclxuICAgICAqICAgICAgeDogMCxcclxuICAgICAqICAgICAgeTogMCxcclxuICAgICAqICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICogICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAqICAgICAgZGV2aWNlUGl4ZWxSYXRpbzogMVxyXG4gICAgICogIH0pXHJcbiAgICAgKi9cclxuICAgIHNldFZpZXdwb3J0OiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgZHByKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgdmFyIG9iaiA9IHg7XHJcblxyXG4gICAgICAgICAgICB4ID0gb2JqLng7XHJcbiAgICAgICAgICAgIHkgPSBvYmoueTtcclxuICAgICAgICAgICAgd2lkdGggPSBvYmoud2lkdGg7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IG9iai5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGRwciA9IG9iai5kZXZpY2VQaXhlbFJhdGlvO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkcHIgPSBkcHIgfHwgdGhpcy5kZXZpY2VQaXhlbFJhdGlvO1xyXG5cclxuICAgICAgICB0aGlzLmdsLnZpZXdwb3J0KFxyXG4gICAgICAgICAgICB4ICogZHByLCB5ICogZHByLCB3aWR0aCAqIGRwciwgaGVpZ2h0ICogZHByXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBVc2UgYSBmcmVzaCBuZXcgb2JqZWN0LCBub3Qgd3JpdGUgcHJvcGVydHkuXHJcbiAgICAgICAgdGhpcy52aWV3cG9ydCA9IHtcclxuICAgICAgICAgICAgeDogeCxcclxuICAgICAgICAgICAgeTogeSxcclxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICAgICAgZGV2aWNlUGl4ZWxSYXRpbzogZHByXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQdXNoIGN1cnJlbnQgdmlld3BvcnQgaW50byBhIHN0YWNrXHJcbiAgICAgKi9cclxuICAgIHNhdmVWaWV3cG9ydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3ZpZXdwb3J0U3RhY2sucHVzaCh0aGlzLnZpZXdwb3J0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3Agdmlld3BvcnQgZnJvbSBzdGFjaywgcmVzdG9yZSBpbiB0aGUgcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgcmVzdG9yZVZpZXdwb3J0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3ZpZXdwb3J0U3RhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZpZXdwb3J0KHRoaXMuX3ZpZXdwb3J0U3RhY2sucG9wKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQdXNoIGN1cnJlbnQgY2xlYXIgaW50byBhIHN0YWNrXHJcbiAgICAgKi9cclxuICAgIHNhdmVDbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFyU3RhY2sucHVzaCh7XHJcbiAgICAgICAgICAgIGNsZWFyQml0OiB0aGlzLmNsZWFyQml0LFxyXG4gICAgICAgICAgICBjbGVhckNvbG9yOiB0aGlzLmNsZWFyQ29sb3JcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3AgY2xlYXIgZnJvbSBzdGFjaywgcmVzdG9yZSBpbiB0aGUgcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgcmVzdG9yZUNsZWFyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NsZWFyU3RhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB2YXIgb3B0ID0gdGhpcy5fY2xlYXJTdGFjay5wb3AoKTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckNvbG9yID0gb3B0LmNsZWFyQ29sb3I7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJCaXQgPSBvcHQuY2xlYXJCaXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBiaW5kU2NlbmVSZW5kZXJpbmc6IGZ1bmN0aW9uIChzY2VuZSkge1xyXG4gICAgICAgIHRoaXMuX3NjZW5lUmVuZGVyaW5nID0gc2NlbmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIHRoZSBzY2VuZSBpbiBjYW1lcmEgdG8gdGhlIHNjcmVlbiBvciBiaW5kZWQgb2ZmbGluZSBmcmFtZWJ1ZmZlclxyXG4gICAgICogQHBhcmFtICB7Y2xheS5TY2VuZX0gICAgICAgc2NlbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQ2FtZXJhfSAgICAgIGNhbWVyYVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgIFtub3RVcGRhdGVTY2VuZV0gSWYgbm90IGNhbGwgdGhlIHNjZW5lLnVwZGF0ZSBtZXRob2RzIGluIHRoZSByZW5kZXJpbmcsIGRlZmF1bHQgdHJ1ZVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgIFtwcmVaXSAgICAgICAgICAgSWYgdXNlIHByZVogb3B0aW1pemF0aW9uLCBkZWZhdWx0IGZhbHNlXHJcbiAgICAgKiBAcmV0dXJuIHtJUmVuZGVySW5mb31cclxuICAgICAqL1xyXG4gICAgcmVuZGVyOiBmdW5jdGlvbihzY2VuZSwgY2FtZXJhLCBub3RVcGRhdGVTY2VuZSwgcHJlWikge1xyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICB2YXIgY2xlYXJDb2xvciA9IHRoaXMuY2xlYXJDb2xvcjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJCaXQpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIE11c3Qgc2V0IGRlcHRoIGFuZCBjb2xvciBtYXNrIHRydWUgYmVmb3JlIGNsZWFyXHJcbiAgICAgICAgICAgIF9nbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIF9nbC5kZXB0aE1hc2sodHJ1ZSk7XHJcbiAgICAgICAgICAgIHZhciB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7XHJcbiAgICAgICAgICAgIHZhciBuZWVkc1NjaXNzb3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgdmFyIHZpZXdwb3J0RHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICAgICAgaWYgKHZpZXdwb3J0LndpZHRoICE9PSB0aGlzLl93aWR0aCB8fCB2aWV3cG9ydC5oZWlnaHQgIT09IHRoaXMuX2hlaWdodFxyXG4gICAgICAgICAgICAgICAgfHwgKHZpZXdwb3J0RHByICYmIHZpZXdwb3J0RHByICE9PSB0aGlzLmRldmljZVBpeGVsUmF0aW8pXHJcbiAgICAgICAgICAgICAgICB8fCB2aWV3cG9ydC54IHx8IHZpZXdwb3J0LnlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBuZWVkc1NjaXNzb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMTU0NDYwOC9ob3ctdG8tY2xlYXItYS1yZWN0YW5nbGUtYXJlYS1pbi13ZWJnbFxyXG4gICAgICAgICAgICAgICAgLy8gT25seSBjbGVhciB0aGUgdmlld3BvcnRcclxuICAgICAgICAgICAgICAgIF9nbC5lbmFibGUoX2dsLlNDSVNTT1JfVEVTVCk7XHJcbiAgICAgICAgICAgICAgICBfZ2wuc2Npc3Nvcih2aWV3cG9ydC54ICogdmlld3BvcnREcHIsIHZpZXdwb3J0LnkgKiB2aWV3cG9ydERwciwgdmlld3BvcnQud2lkdGggKiB2aWV3cG9ydERwciwgdmlld3BvcnQuaGVpZ2h0ICogdmlld3BvcnREcHIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF9nbC5jbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pO1xyXG4gICAgICAgICAgICBfZ2wuY2xlYXIodGhpcy5jbGVhckJpdCk7XHJcbiAgICAgICAgICAgIGlmIChuZWVkc1NjaXNzb3IpIHtcclxuICAgICAgICAgICAgICAgIF9nbC5kaXNhYmxlKF9nbC5TQ0lTU09SX1RFU1QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiB0aGUgc2NlbmUgaGF2ZSBiZWVuIHVwZGF0ZWQgaW4gdGhlIHByZXBhc3MgbGlrZSBzaGFkb3cgbWFwXHJcbiAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byB1cGRhdGUgaXQgYWdhaW5cclxuICAgICAgICBpZiAoIW5vdFVwZGF0ZVNjZW5lKSB7XHJcbiAgICAgICAgICAgIHNjZW5lLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjZW5lLnVwZGF0ZUxpZ2h0cygpO1xyXG5cclxuICAgICAgICBjYW1lcmEgPSBjYW1lcmEgfHwgc2NlbmUuZ2V0TWFpbkNhbWVyYSgpO1xyXG4gICAgICAgIGlmICghY2FtZXJhKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NhblxcJ3QgZmluZCBjYW1lcmEgaW4gdGhlIHNjZW5lLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhbWVyYS51cGRhdGUoKTtcclxuICAgICAgICB2YXIgcmVuZGVyTGlzdCA9IHNjZW5lLnVwZGF0ZVJlbmRlckxpc3QoY2FtZXJhLCB0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2NlbmVSZW5kZXJpbmcgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgdmFyIG9wYXF1ZUxpc3QgPSByZW5kZXJMaXN0Lm9wYXF1ZTtcclxuICAgICAgICB2YXIgdHJhbnNwYXJlbnRMaXN0ID0gcmVuZGVyTGlzdC50cmFuc3BhcmVudDtcclxuICAgICAgICB2YXIgc2NlbmVNYXRlcmlhbCA9IHNjZW5lLm1hdGVyaWFsO1xyXG5cclxuICAgICAgICBzY2VuZS50cmlnZ2VyKCdiZWZvcmVyZW5kZXInLCB0aGlzLCBzY2VuZSwgY2FtZXJhLCByZW5kZXJMaXN0KTtcclxuXHJcbiAgICAgICAgLy8gUmVuZGVyIHByZSB6XHJcbiAgICAgICAgaWYgKHByZVopIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJQcmVaKG9wYXF1ZUxpc3QsIHNjZW5lLCBjYW1lcmEpO1xyXG4gICAgICAgICAgICBfZ2wuZGVwdGhGdW5jKF9nbC5MRVFVQUwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgX2dsLmRlcHRoRnVuYyhfZ2wuTEVTUyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIGRlcHRoIG9mIHRyYW5zcGFyZW50IGxpc3QuXHJcbiAgICAgICAgdmFyIHdvcmxkVmlld01hdCA9IG1hdDRDcmVhdGUoKTtcclxuICAgICAgICB2YXIgcG9zVmlld1NwYWNlID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zcGFyZW50TGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyYWJsZSA9IHRyYW5zcGFyZW50TGlzdFtpXTtcclxuICAgICAgICAgICAgbWF0NC5tdWx0aXBseUFmZmluZSh3b3JsZFZpZXdNYXQsIGNhbWVyYS52aWV3TWF0cml4LmFycmF5LCByZW5kZXJhYmxlLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgdmVjMy50cmFuc2Zvcm1NYXQ0KHBvc1ZpZXdTcGFjZSwgcmVuZGVyYWJsZS5wb3NpdGlvbi5hcnJheSwgd29ybGRWaWV3TWF0KTtcclxuICAgICAgICAgICAgcmVuZGVyYWJsZS5fX2RlcHRoID0gcG9zVmlld1NwYWNlWzJdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVuZGVyIG9wYXF1ZSBsaXN0XHJcbiAgICAgICAgdGhpcy5yZW5kZXJQYXNzKG9wYXF1ZUxpc3QsIGNhbWVyYSwge1xyXG4gICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzY2VuZU1hdGVyaWFsIHx8IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNvcnRDb21wYXJlOiB0aGlzLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyh0cmFuc3BhcmVudExpc3QsIGNhbWVyYSwge1xyXG4gICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzY2VuZU1hdGVyaWFsIHx8IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNvcnRDb21wYXJlOiB0aGlzLnRyYW5zcGFyZW50U29ydENvbXBhcmVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2NlbmUudHJpZ2dlcignYWZ0ZXJyZW5kZXInLCB0aGlzLCBzY2VuZSwgY2FtZXJhLCByZW5kZXJMaXN0KTtcclxuXHJcbiAgICAgICAgLy8gQ2xlYW51cFxyXG4gICAgICAgIHRoaXMuX3NjZW5lUmVuZGVyaW5nID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0UHJvZ3JhbTogZnVuY3Rpb24gKHJlbmRlcmFibGUsIHJlbmRlck1hdGVyaWFsLCBzY2VuZSkge1xyXG4gICAgICAgIHJlbmRlck1hdGVyaWFsID0gcmVuZGVyTWF0ZXJpYWwgfHwgcmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3JhbU1nci5nZXRQcm9ncmFtKHJlbmRlcmFibGUsIHJlbmRlck1hdGVyaWFsLCBzY2VuZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlUHJvZ3JhbTogZnVuY3Rpb24gKHByb2dyYW0pIHtcclxuICAgICAgICBpZiAocHJvZ3JhbS5fX2Vycm9yKSB7XHJcbiAgICAgICAgICAgIHZhciBlcnJvck1zZyA9IHByb2dyYW0uX19lcnJvcjtcclxuICAgICAgICAgICAgaWYgKGVycm9yU2hhZGVyW3Byb2dyYW0uX191aWRfX10pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlcnJvclNoYWRlcltwcm9ncmFtLl9fdWlkX19dID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRocm93RXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2Vycm9yJywgZXJyb3JNc2cpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZVByb2dyYW1zOiBmdW5jdGlvbiAobGlzdCwgc2NlbmUsIHBhc3NDb25maWcpIHtcclxuICAgICAgICB2YXIgZ2V0TWF0ZXJpYWwgPSAocGFzc0NvbmZpZyAmJiBwYXNzQ29uZmlnLmdldE1hdGVyaWFsKSB8fCBkZWZhdWx0R2V0TWF0ZXJpYWw7XHJcbiAgICAgICAgc2NlbmUgPSBzY2VuZSB8fCBudWxsO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyYWJsZSA9IGxpc3RbaV07XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJNYXRlcmlhbCA9IGdldE1hdGVyaWFsLmNhbGwodGhpcywgcmVuZGVyYWJsZSk7XHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHByZXZSZW5kZXJhYmxlID0gbGlzdFtpIC0gMV07XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJldkpvaW50c0xlbiA9IHByZXZSZW5kZXJhYmxlLmpvaW50cyA/IHByZXZSZW5kZXJhYmxlLmpvaW50cy5sZW5ndGggOiAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50c0xlbiA9IHJlbmRlcmFibGUuam9pbnRzID8gcmVuZGVyYWJsZS5qb2ludHMubGVuZ3RoIDogMDtcclxuICAgICAgICAgICAgICAgIC8vIEtlZXAgcHJvZ3JhbSBub3QgY2hhbmdlIGlmIGpvaW50cywgbWF0ZXJpYWwsIGxpZ2h0R3JvdXAgYXJlIHNhbWUgb2YgdHdvIHJlbmRlcmFibGVzLlxyXG4gICAgICAgICAgICAgICAgaWYgKGpvaW50c0xlbiA9PT0gcHJldkpvaW50c0xlblxyXG4gICAgICAgICAgICAgICAgICAgICYmIHJlbmRlcmFibGUubWF0ZXJpYWwgPT09IHByZXZSZW5kZXJhYmxlLm1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgcmVuZGVyYWJsZS5saWdodEdyb3VwID09PSBwcmV2UmVuZGVyYWJsZS5saWdodEdyb3VwXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLl9fcHJvZ3JhbSA9IHByZXZSZW5kZXJhYmxlLl9fcHJvZ3JhbTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHByb2dyYW0gPSB0aGlzLl9wcm9ncmFtTWdyLmdldFByb2dyYW0ocmVuZGVyYWJsZSwgcmVuZGVyTWF0ZXJpYWwsIHNjZW5lKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pO1xyXG5cclxuICAgICAgICAgICAgcmVuZGVyYWJsZS5fX3Byb2dyYW0gPSBwcm9ncmFtO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW5kZXIgYSBzaW5nbGUgcmVuZGVyYWJsZSBsaXN0IGluIGNhbWVyYSBpbiBzZXF1ZW5jZVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmFibGVbXX0gbGlzdCBMaXN0IG9mIGFsbCByZW5kZXJhYmxlcy5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5DYW1lcmF9IFtjYW1lcmFdIENhbWVyYSBwcm92aWRlIHZpZXcgbWF0cml4IGFuZCBwb3JqZWN0aW9uIG1hdHJpeC4gSXQgY2FuIGJlIG51bGwuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3Bhc3NDb25maWddXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5nZXRNYXRlcmlhbF0gR2V0IHJlbmRlcmFibGUgbWF0ZXJpYWwuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5nZXRVbmlmb3JtXSBHZXQgbWF0ZXJpYWwgdW5pZm9ybSB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXNzQ29uZmlnLmlzTWF0ZXJpYWxDaGFuZ2VkXSBJZiBtYXRlcmlhbCBjaGFuZ2VkLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuYmVmb3JlUmVuZGVyXSBCZWZvcmUgcmVuZGVyIGVhY2ggcmVuZGVyYWJsZS5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXNzQ29uZmlnLmFmdGVyUmVuZGVyXSBBZnRlciByZW5kZXIgZWFjaCByZW5kZXJhYmxlXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5pZlJlbmRlcl0gSWYgcmVuZGVyIHRoZSByZW5kZXJhYmxlLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuc29ydENvbXBhcmVdIFNvcnQgY29tcGFyZSBmdW5jdGlvbi5cclxuICAgICAqIEByZXR1cm4ge0lSZW5kZXJJbmZvfVxyXG4gICAgICovXHJcbiAgICByZW5kZXJQYXNzOiBmdW5jdGlvbihsaXN0LCBjYW1lcmEsIHBhc3NDb25maWcpIHtcclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZXJlbmRlcnBhc3MnLCB0aGlzLCBsaXN0LCBjYW1lcmEsIHBhc3NDb25maWcpO1xyXG5cclxuICAgICAgICBwYXNzQ29uZmlnID0gcGFzc0NvbmZpZyB8fCB7fTtcclxuICAgICAgICBwYXNzQ29uZmlnLmdldE1hdGVyaWFsID0gcGFzc0NvbmZpZy5nZXRNYXRlcmlhbCB8fCBkZWZhdWx0R2V0TWF0ZXJpYWw7XHJcbiAgICAgICAgcGFzc0NvbmZpZy5nZXRVbmlmb3JtID0gcGFzc0NvbmZpZy5nZXRVbmlmb3JtIHx8IGRlZmF1bHRHZXRVbmlmb3JtO1xyXG4gICAgICAgIC8vIFBFTkRJTkcgQmV0dGVyIHNvbHV0aW9uP1xyXG4gICAgICAgIHBhc3NDb25maWcuaXNNYXRlcmlhbENoYW5nZWQgPSBwYXNzQ29uZmlnLmlzTWF0ZXJpYWxDaGFuZ2VkIHx8IGRlZmF1bHRJc01hdGVyaWFsQ2hhbmdlZDtcclxuICAgICAgICBwYXNzQ29uZmlnLmJlZm9yZVJlbmRlciA9IHBhc3NDb25maWcuYmVmb3JlUmVuZGVyIHx8IG5vb3A7XHJcbiAgICAgICAgcGFzc0NvbmZpZy5hZnRlclJlbmRlciA9IHBhc3NDb25maWcuYWZ0ZXJSZW5kZXIgfHwgbm9vcDtcclxuXHJcbiAgICAgICAgdmFyIGlmUmVuZGVyT2JqZWN0ID0gcGFzc0NvbmZpZy5pZlJlbmRlciB8fCBkZWZhdWx0SWZSZW5kZXI7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlUHJvZ3JhbXMobGlzdCwgdGhpcy5fc2NlbmVSZW5kZXJpbmcsIHBhc3NDb25maWcpO1xyXG4gICAgICAgIGlmIChwYXNzQ29uZmlnLnNvcnRDb21wYXJlKSB7XHJcbiAgICAgICAgICAgIGxpc3Quc29ydChwYXNzQ29uZmlnLnNvcnRDb21wYXJlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNvbWUgY29tbW9uIGJ1aWx0aW4gdW5pZm9ybXNcclxuICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xyXG4gICAgICAgIHZhciB2RHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICB2YXIgdmlld3BvcnRVbmlmb3JtID0gW1xyXG4gICAgICAgICAgICB2aWV3cG9ydC54ICogdkRwciwgdmlld3BvcnQueSAqIHZEcHIsXHJcbiAgICAgICAgICAgIHZpZXdwb3J0LndpZHRoICogdkRwciwgdmlld3BvcnQuaGVpZ2h0ICogdkRwclxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdmFyIHdpbmRvd0RwciA9IHRoaXMuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICB2YXIgd2luZG93U2l6ZVVuaWZvcm0gPSB0aGlzLl9fY3VycmVudEZyYW1lQnVmZmVyXHJcbiAgICAgICAgICAgID8gW3RoaXMuX19jdXJyZW50RnJhbWVCdWZmZXIuZ2V0VGV4dHVyZVdpZHRoKCksIHRoaXMuX19jdXJyZW50RnJhbWVCdWZmZXIuZ2V0VGV4dHVyZUhlaWdodCgpXVxyXG4gICAgICAgICAgICA6IFt0aGlzLl93aWR0aCAqIHdpbmRvd0RwciwgdGhpcy5faGVpZ2h0ICogd2luZG93RHByXTtcclxuICAgICAgICAvLyBERVBSRUNBVEVEXHJcbiAgICAgICAgdmFyIHZpZXdwb3J0U2l6ZVVuaWZvcm0gPSBbXHJcbiAgICAgICAgICAgIHZpZXdwb3J0VW5pZm9ybVsyXSwgdmlld3BvcnRVbmlmb3JtWzNdXHJcbiAgICAgICAgXTtcclxuICAgICAgICB2YXIgdGltZSA9IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSB2aWV3IGFuZCBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICAgIGlmIChjYW1lcmEpIHtcclxuICAgICAgICAgICAgbWF0NC5jb3B5KG1hdHJpY2VzLlZJRVcsIGNhbWVyYS52aWV3TWF0cml4LmFycmF5KTtcclxuICAgICAgICAgICAgbWF0NC5jb3B5KG1hdHJpY2VzLlBST0pFQ1RJT04sIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmFycmF5KTtcclxuICAgICAgICAgICAgbWF0NC5jb3B5KG1hdHJpY2VzLlZJRVdJTlZFUlNFLCBjYW1lcmEud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWF0NC5pZGVudGl0eShtYXRyaWNlcy5WSUVXKTtcclxuICAgICAgICAgICAgbWF0NC5pZGVudGl0eShtYXRyaWNlcy5QUk9KRUNUSU9OKTtcclxuICAgICAgICAgICAgbWF0NC5pZGVudGl0eShtYXRyaWNlcy5WSUVXSU5WRVJTRSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1hdDQubXVsdGlwbHkobWF0cmljZXMuVklFV1BST0pFQ1RJT04sIG1hdHJpY2VzLlBST0pFQ1RJT04sIG1hdHJpY2VzLlZJRVcpO1xyXG4gICAgICAgIG1hdDQuaW52ZXJ0KG1hdHJpY2VzLlBST0pFQ1RJT05JTlZFUlNFLCBtYXRyaWNlcy5QUk9KRUNUSU9OKTtcclxuICAgICAgICBtYXQ0LmludmVydChtYXRyaWNlcy5WSUVXUFJPSkVDVElPTklOVkVSU0UsIG1hdHJpY2VzLlZJRVdQUk9KRUNUSU9OKTtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHRoaXMuZ2w7XHJcbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5fc2NlbmVSZW5kZXJpbmc7XHJcblxyXG4gICAgICAgIHZhciBwcmV2TWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIHByZXZQcm9ncmFtO1xyXG4gICAgICAgIHZhciBwcmV2UmVuZGVyYWJsZTtcclxuXHJcbiAgICAgICAgLy8gU3RhdHVzXHJcbiAgICAgICAgdmFyIGRlcHRoVGVzdCwgZGVwdGhNYXNrO1xyXG4gICAgICAgIHZhciBjdWxsaW5nLCBjdWxsRmFjZSwgZnJvbnRGYWNlO1xyXG4gICAgICAgIHZhciB0cmFuc3BhcmVudDtcclxuICAgICAgICB2YXIgZHJhd0lEO1xyXG4gICAgICAgIHZhciBjdXJyZW50VkFPO1xyXG4gICAgICAgIHZhciBtYXRlcmlhbFRha2VzVGV4dHVyZVNsb3Q7XHJcblxyXG4gICAgICAgIC8vIHZhciB2YW9FeHQgPSB0aGlzLmdldEdMRXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpO1xyXG4gICAgICAgIC8vIG5vdCB1c2UgdmFvRXh0LCBzb21lIHBsYXRmb3JtcyBtYXkgbWVzcyBpdCB1cC5cclxuICAgICAgICB2YXIgdmFvRXh0ID0gbnVsbDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJhYmxlID0gbGlzdFtpXTtcclxuICAgICAgICAgICAgdmFyIGlzU2NlbmVOb2RlID0gcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybSAhPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgd29ybGRNO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFpZlJlbmRlck9iamVjdChyZW5kZXJhYmxlKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFNraW5uZWQgbWVzaCB3aWxsIHRyYW5zZm9ybWVkIHRvIGpvaW50IHNwYWNlLiBJZ25vcmUgdGhlIG1lc2ggdHJhbnNmb3JtXHJcbiAgICAgICAgICAgIGlmIChpc1NjZW5lTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgd29ybGRNID0gKHJlbmRlcmFibGUuaXNTa2lubmVkTWVzaCAmJiByZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2goKSlcclxuICAgICAgICAgICAgICAgICAgICA/IG1hdHJpY2VzLklERU5USVRZIDogcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSByZW5kZXJhYmxlLmdlb21ldHJ5O1xyXG4gICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBwYXNzQ29uZmlnLmdldE1hdGVyaWFsLmNhbGwodGhpcywgcmVuZGVyYWJsZSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcHJvZ3JhbSA9IHJlbmRlcmFibGUuX19wcm9ncmFtO1xyXG4gICAgICAgICAgICB2YXIgc2hhZGVyID0gbWF0ZXJpYWwuc2hhZGVyO1xyXG5cclxuICAgICAgICAgICAgdmFyIGN1cnJlbnREcmF3SUQgPSBnZW9tZXRyeS5fX3VpZF9fICsgJy0nICsgcHJvZ3JhbS5fX3VpZF9fO1xyXG4gICAgICAgICAgICB2YXIgZHJhd0lEQ2hhbmdlZCA9IGN1cnJlbnREcmF3SUQgIT09IGRyYXdJRDtcclxuICAgICAgICAgICAgZHJhd0lEID0gY3VycmVudERyYXdJRDtcclxuICAgICAgICAgICAgaWYgKGRyYXdJRENoYW5nZWQgJiYgdmFvRXh0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPIFNlZW1zIG5lZWQgdG8gYmUgYm91bmQgdG8gbnVsbCBpbW1lZGlhdGVseSAob3IgYmVmb3JlIGJpbmQgYW5vdGhlciBwcm9ncmFtPykgaWYgdmFvIGlzIGNoYW5nZWRcclxuICAgICAgICAgICAgICAgIHZhb0V4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzU2NlbmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBtYXQ0LmNvcHkobWF0cmljZXMuV09STEQsIHdvcmxkTSk7XHJcbiAgICAgICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KG1hdHJpY2VzLldPUkxEVklFV1BST0pFQ1RJT04sIG1hdHJpY2VzLlZJRVdQUk9KRUNUSU9OLCB3b3JsZE0pO1xyXG4gICAgICAgICAgICAgICAgbWF0NC5tdWx0aXBseUFmZmluZShtYXRyaWNlcy5XT1JMRFZJRVcsIG1hdHJpY2VzLlZJRVcsIHdvcmxkTSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRElOVkVSU0UgfHxcclxuICAgICAgICAgICAgICAgICAgICBzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxESU5WRVJTRVRSQU5TUE9TRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdDQuaW52ZXJ0KG1hdHJpY2VzLldPUkxESU5WRVJTRSwgd29ybGRNKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxEVklFV0lOVkVSU0UgfHxcclxuICAgICAgICAgICAgICAgICAgICBzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxEVklFV0lOVkVSU0VUUkFOU1BPU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXQ0LmludmVydChtYXRyaWNlcy5XT1JMRFZJRVdJTlZFUlNFLCBtYXRyaWNlcy5XT1JMRFZJRVcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRlci5tYXRyaXhTZW1hbnRpY3MuV09STERWSUVXUFJPSkVDVElPTklOVkVSU0UgfHxcclxuICAgICAgICAgICAgICAgICAgICBzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFVFJBTlNQT1NFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0NC5pbnZlcnQobWF0cmljZXMuV09STERWSUVXUFJPSkVDVElPTklOVkVSU0UsIG1hdHJpY2VzLldPUkxEVklFV1BST0pFQ1RJT04pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBCZWZvcmUgcmVuZGVyIGhvb2tcclxuICAgICAgICAgICAgcmVuZGVyYWJsZS5iZWZvcmVSZW5kZXIgJiYgcmVuZGVyYWJsZS5iZWZvcmVSZW5kZXIodGhpcyk7XHJcbiAgICAgICAgICAgIHBhc3NDb25maWcuYmVmb3JlUmVuZGVyLmNhbGwodGhpcywgcmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHByZXZNYXRlcmlhbCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcHJvZ3JhbUNoYW5nZWQgPSBwcm9ncmFtICE9PSBwcmV2UHJvZ3JhbTtcclxuICAgICAgICAgICAgaWYgKHByb2dyYW1DaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTZXQgbGlnaHRzIG51bWJlclxyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5iaW5kKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy8gU2V0IHNvbWUgY29tbW9uIHVuaWZvcm1zXHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKF9nbCwgJ1ZJRVdQT1JUJywgdmlld3BvcnRVbmlmb3JtKTtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnV0lORE9XX1NJWkUnLCB3aW5kb3dTaXplVW5pZm9ybSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FtZXJhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdORUFSJywgY2FtZXJhLm5lYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnRkFSJywgY2FtZXJhLmZhcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKF9nbCwgJ0RFVklDRVBJWEVMUkFUSU8nLCB2RHByKTtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnVElNRScsIHRpbWUpO1xyXG4gICAgICAgICAgICAgICAgLy8gREVQUkVDQVRFRFxyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdWSUVXUE9SVF9TSVpFJywgdmlld3BvcnRTaXplVW5pZm9ybSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU2V0IGxpZ2h0cyB1bmlmb3Jtc1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBuZWVkcyBvcHRpbWl6ZWRcclxuICAgICAgICAgICAgICAgIGlmIChzY2VuZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lLnNldExpZ2h0VW5pZm9ybXMocHJvZ3JhbSwgcmVuZGVyYWJsZS5saWdodEdyb3VwLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0gPSBwcmV2UHJvZ3JhbTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gUHJvZ3JhbSBjaGFuZ2VzIGFsc28gbmVlZHMgcmVzZXQgdGhlIG1hdGVyaWFscy5cclxuICAgICAgICAgICAgaWYgKHByb2dyYW1DaGFuZ2VkIHx8IHBhc3NDb25maWcuaXNNYXRlcmlhbENoYW5nZWQoXHJcbiAgICAgICAgICAgICAgICByZW5kZXJhYmxlLCBwcmV2UmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHByZXZNYXRlcmlhbFxyXG4gICAgICAgICAgICApKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWwuZGVwdGhUZXN0ICE9PSBkZXB0aFRlc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5kZXB0aFRlc3QgPyBfZ2wuZW5hYmxlKF9nbC5ERVBUSF9URVNUKSA6IF9nbC5kaXNhYmxlKF9nbC5ERVBUSF9URVNUKTtcclxuICAgICAgICAgICAgICAgICAgICBkZXB0aFRlc3QgPSBtYXRlcmlhbC5kZXB0aFRlc3Q7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWwuZGVwdGhNYXNrICE9PSBkZXB0aE1hc2spIHtcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuZGVwdGhNYXNrKG1hdGVyaWFsLmRlcHRoTWFzayk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVwdGhNYXNrID0gbWF0ZXJpYWwuZGVwdGhNYXNrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnRyYW5zcGFyZW50ICE9PSB0cmFuc3BhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zcGFyZW50ID8gX2dsLmVuYWJsZShfZ2wuQkxFTkQpIDogX2dsLmRpc2FibGUoX2dsLkJMRU5EKTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc3BhcmVudCA9IG1hdGVyaWFsLnRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjYWNoZSBibGVuZGluZ1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmJsZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmJsZW5kKF9nbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IGJsZW5kIGZ1bmN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9nbC5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoX2dsLkZVTkNfQURELCBfZ2wuRlVOQ19BREQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfZ2wuYmxlbmRGdW5jU2VwYXJhdGUoX2dsLlNSQ19BTFBIQSwgX2dsLk9ORV9NSU5VU19TUkNfQUxQSEEsIF9nbC5PTkUsIF9nbC5PTkVfTUlOVVNfU1JDX0FMUEhBKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxUYWtlc1RleHR1cmVTbG90ID0gdGhpcy5fYmluZE1hdGVyaWFsKFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGUsIG1hdGVyaWFsLCBwcm9ncmFtLFxyXG4gICAgICAgICAgICAgICAgICAgIHByZXZSZW5kZXJhYmxlIHx8IG51bGwsIHByZXZNYXRlcmlhbCB8fCBudWxsLCBwcmV2UHJvZ3JhbSB8fCBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NDb25maWcuZ2V0VW5pZm9ybVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHByZXZNYXRlcmlhbCA9IG1hdGVyaWFsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgbWF0cml4U2VtYW50aWNLZXlzID0gc2hhZGVyLm1hdHJpeFNlbWFudGljS2V5cztcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1NjZW5lTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBtYXRyaXhTZW1hbnRpY0tleXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWMgPSBtYXRyaXhTZW1hbnRpY0tleXNba107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbWFudGljSW5mbyA9IHNoYWRlci5tYXRyaXhTZW1hbnRpY3Nbc2VtYW50aWNdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXRyaXggPSBtYXRyaWNlc1tzZW1hbnRpY107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbWFudGljSW5mby5pc1RyYW5zcG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4Tm9UcmFuc3Bvc2UgPSBtYXRyaWNlc1tzZW1hbnRpY0luZm8uc2VtYW50aWNOb1RyYW5zcG9zZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdDQudHJhbnNwb3NlKG1hdHJpeCwgbWF0cml4Tm9UcmFuc3Bvc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCBzZW1hbnRpY0luZm8udHlwZSwgc2VtYW50aWNJbmZvLnN5bWJvbCwgbWF0cml4KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHJlbmRlcmFibGUuY3VsbEZhY2UgIT09IGN1bGxGYWNlKSB7XHJcbiAgICAgICAgICAgICAgICBjdWxsRmFjZSA9IHJlbmRlcmFibGUuY3VsbEZhY2U7XHJcbiAgICAgICAgICAgICAgICBfZ2wuY3VsbEZhY2UoY3VsbEZhY2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLmZyb250RmFjZSAhPT0gZnJvbnRGYWNlKSB7XHJcbiAgICAgICAgICAgICAgICBmcm9udEZhY2UgPSByZW5kZXJhYmxlLmZyb250RmFjZTtcclxuICAgICAgICAgICAgICAgIF9nbC5mcm9udEZhY2UoZnJvbnRGYWNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5jdWxsaW5nICE9PSBjdWxsaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBjdWxsaW5nID0gcmVuZGVyYWJsZS5jdWxsaW5nO1xyXG4gICAgICAgICAgICAgICAgY3VsbGluZyA/IF9nbC5lbmFibGUoX2dsLkNVTExfRkFDRSkgOiBfZ2wuZGlzYWJsZShfZ2wuQ1VMTF9GQUNFKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBUT0RPIE5vdCB1cGRhdGUgc2tlbGV0b24gaW4gZWFjaCByZW5kZXJhYmxlLlxyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVTa2VsZXRvbihyZW5kZXJhYmxlLCBwcm9ncmFtLCBtYXRlcmlhbFRha2VzVGV4dHVyZVNsb3QpO1xyXG4gICAgICAgICAgICBpZiAoZHJhd0lEQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudFZBTyA9IHRoaXMuX2JpbmRWQU8odmFvRXh0LCBzaGFkZXIsIGdlb21ldHJ5LCBwcm9ncmFtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJPYmplY3QocmVuZGVyYWJsZSwgY3VycmVudFZBTyk7XHJcblxyXG4gICAgICAgICAgICAvLyBBZnRlciByZW5kZXIgaG9va1xyXG4gICAgICAgICAgICBwYXNzQ29uZmlnLmFmdGVyUmVuZGVyKHRoaXMsIHJlbmRlcmFibGUpO1xyXG4gICAgICAgICAgICByZW5kZXJhYmxlLmFmdGVyUmVuZGVyICYmIHJlbmRlcmFibGUuYWZ0ZXJSZW5kZXIodGhpcyk7XHJcblxyXG4gICAgICAgICAgICBwcmV2UHJvZ3JhbSA9IHByb2dyYW07XHJcbiAgICAgICAgICAgIHByZXZSZW5kZXJhYmxlID0gcmVuZGVyYWJsZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRPRE8gU2VlbXMgbmVlZCB0byBiZSBib3VuZCB0byBudWxsIGltbWVkaWF0ZWx5IGlmIHZhbyBpcyBjaGFuZ2VkP1xyXG4gICAgICAgIGlmICh2YW9FeHQpIHtcclxuICAgICAgICAgICAgdmFvRXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJyZW5kZXJwYXNzJywgdGhpcywgbGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TWF4Sm9pbnROdW1iZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2xpbmZvLmdldE1heEpvaW50TnVtYmVyKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVTa2VsZXRvbjogZnVuY3Rpb24gKG9iamVjdCwgcHJvZ3JhbSwgc2xvdCkge1xyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBza2VsZXRvbiA9IG9iamVjdC5za2VsZXRvbjtcclxuICAgICAgICAvLyBTZXQgcG9zZSBtYXRyaWNlcyBvZiBza2lubmVkIG1lc2hcclxuICAgICAgICBpZiAoc2tlbGV0b24pIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBVcGRhdGUgYmVmb3JlIGN1bGxpbmcuXHJcbiAgICAgICAgICAgIHNrZWxldG9uLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICBpZiAob2JqZWN0LmpvaW50cy5sZW5ndGggPiB0aGlzLl9nbGluZm8uZ2V0TWF4Sm9pbnROdW1iZXIoKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNraW5NYXRyaWNlc1RleHR1cmUgPSBza2VsZXRvbi5nZXRTdWJTa2luTWF0cmljZXNUZXh0dXJlKG9iamVjdC5fX3VpZF9fLCBvYmplY3Quam9pbnRzKTtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0udXNlVGV4dHVyZVNsb3QodGhpcywgc2tpbk1hdHJpY2VzVGV4dHVyZSwgc2xvdCk7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCAnMWknLCAnc2tpbk1hdHJpY2VzVGV4dHVyZScsIHNsb3QpO1xyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFmJywgJ3NraW5NYXRyaWNlc1RleHR1cmVTaXplJywgc2tpbk1hdHJpY2VzVGV4dHVyZS53aWR0aCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2tpbk1hdHJpY2VzQXJyYXkgPSBza2VsZXRvbi5nZXRTdWJTa2luTWF0cmljZXMob2JqZWN0Ll9fdWlkX18sIG9iamVjdC5qb2ludHMpO1xyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdTS0lOX01BVFJJWCcsIHNraW5NYXRyaWNlc0FycmF5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3JlbmRlck9iamVjdDogZnVuY3Rpb24gKHJlbmRlcmFibGUsIHZhbykge1xyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBnZW9tZXRyeSA9IHJlbmRlcmFibGUuZ2VvbWV0cnk7XHJcblxyXG4gICAgICAgIHZhciBnbERyYXdNb2RlID0gcmVuZGVyYWJsZS5tb2RlO1xyXG4gICAgICAgIGlmIChnbERyYXdNb2RlID09IG51bGwpIHtcclxuICAgICAgICAgICAgZ2xEcmF3TW9kZSA9IDB4MDAwNDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGlmIChnbERyYXdNb2RlID09PSBnbGVudW0uTElORVMgfHwgZ2xEcmF3TW9kZSA9PT0gZ2xlbnVtLkxJTkVfU1RSSVAgfHwgZ2xEcmF3TW9kZSA9PT0gZ2xlbnVtLkxJTkVfTE9PUCkge1xyXG4gICAgICAgIC8vICAgICBfZ2wubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKTtcclxuICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgIGlmICh2YW8uaW5kaWNlc0J1ZmZlcikge1xyXG4gICAgICAgICAgICB2YXIgdWludEV4dCA9IHRoaXMuZ2V0R0xFeHRlbnNpb24oJ09FU19lbGVtZW50X2luZGV4X3VpbnQnKTtcclxuICAgICAgICAgICAgdmFyIHVzZVVpbnRFeHQgPSB1aW50RXh0ICYmIChnZW9tZXRyeS5pbmRpY2VzIGluc3RhbmNlb2YgVWludDMyQXJyYXkpO1xyXG4gICAgICAgICAgICB2YXIgaW5kaWNlc1R5cGUgPSB1c2VVaW50RXh0ID8gX2dsLlVOU0lHTkVEX0lOVCA6IF9nbC5VTlNJR05FRF9TSE9SVDtcclxuXHJcbiAgICAgICAgICAgIF9nbC5kcmF3RWxlbWVudHMoZ2xEcmF3TW9kZSwgdmFvLmluZGljZXNCdWZmZXIuY291bnQsIGluZGljZXNUeXBlLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIFVzZSB2ZXJ0ZXggbnVtYmVyIGluIGJ1ZmZlclxyXG4gICAgICAgICAgICAvLyB2ZXJ0ZXhDb3VudCBtYXkgZ2V0IHRoZSB3cm9uZyB2YWx1ZSB3aGVuIGdlb21ldHJ5IGZvcmdldCB0byBtYXJrIGRpcnR5IGFmdGVyIHVwZGF0ZVxyXG4gICAgICAgICAgICBfZ2wuZHJhd0FycmF5cyhnbERyYXdNb2RlLCAwLCBnZW9tZXRyeS52ZXJ0ZXhDb3VudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfYmluZE1hdGVyaWFsOiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHByb2dyYW0sIHByZXZSZW5kZXJhYmxlLCBwcmV2TWF0ZXJpYWwsIHByZXZQcm9ncmFtLCBnZXRVbmlmb3JtVmFsdWUpIHtcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuICAgICAgICAvLyBQRU5ESU5HIFNhbWUgdGV4dHVyZSBpbiBkaWZmZXJlbnQgbWF0ZXJpYWwgdGFrZSBkaWZmZXJlbnQgc2xvdD9cclxuXHJcbiAgICAgICAgLy8gTWF5IHVzZSBzaGFkZXIgb2Ygb3RoZXIgbWF0ZXJpYWwgaWYgc2hhZGVyIGNvZGUgYXJlIHNhbWVcclxuICAgICAgICB2YXIgc2FtZVByb2dyYW0gPSBwcmV2UHJvZ3JhbSA9PT0gcHJvZ3JhbTtcclxuXHJcbiAgICAgICAgdmFyIGN1cnJlbnRUZXh0dXJlU2xvdCA9IHByb2dyYW0uY3VycmVudFRleHR1cmVTbG90KCk7XHJcbiAgICAgICAgdmFyIGVuYWJsZWRVbmlmb3JtcyA9IG1hdGVyaWFsLmdldEVuYWJsZWRVbmlmb3JtcygpO1xyXG4gICAgICAgIHZhciB0ZXh0dXJlVW5pZm9ybXMgPSBtYXRlcmlhbC5nZXRUZXh0dXJlVW5pZm9ybXMoKTtcclxuICAgICAgICB2YXIgcGxhY2Vob2xkZXJUZXh0dXJlID0gdGhpcy5fcGxhY2Vob2xkZXJUZXh0dXJlO1xyXG5cclxuICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IHRleHR1cmVVbmlmb3Jtcy5sZW5ndGg7IHUrKykge1xyXG4gICAgICAgICAgICB2YXIgc3ltYm9sID0gdGV4dHVyZVVuaWZvcm1zW3VdO1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybVZhbHVlID0gZ2V0VW5pZm9ybVZhbHVlKHJlbmRlcmFibGUsIG1hdGVyaWFsLCBzeW1ib2wpO1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybVR5cGUgPSBtYXRlcmlhbC51bmlmb3Jtc1tzeW1ib2xdLnR5cGU7XHJcbiAgICAgICAgICAgIC8vIE5vdCB1c2UgYGluc3RhbmNlb2ZgIHRvIGRldGVybWluZSBpZiBhIHZhbHVlIGlzIHRleHR1cmUgaW4gTWF0ZXJpYWwjYmluZC5cclxuICAgICAgICAgICAgLy8gVXNlIHR5cGUgaW5zdGVhZCwgaW4gc29tZSBjYXNlIHRleHR1cmUgbWF5IGJlIGluIGRpZmZlcmVudCBuYW1lc3BhY2VzLlxyXG4gICAgICAgICAgICAvLyBUT0RPIER1Y2sgdHlwZSB2YWxpZGF0ZS5cclxuICAgICAgICAgICAgaWYgKHVuaWZvcm1UeXBlID09PSAndCcgJiYgdW5pZm9ybVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBSZXNldCBzbG90XHJcbiAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWUuX19zbG90ID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUgPT09ICd0dicpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybVZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1WYWx1ZVtpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWVbaV0uX19zbG90ID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwbGFjZWhvbGRlclRleHR1cmUuX19zbG90ID0gLTE7XHJcblxyXG4gICAgICAgIC8vIFNldCB1bmlmb3Jtc1xyXG4gICAgICAgIGZvciAodmFyIHUgPSAwOyB1IDwgZW5hYmxlZFVuaWZvcm1zLmxlbmd0aDsgdSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBzeW1ib2wgPSBlbmFibGVkVW5pZm9ybXNbdV07XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtID0gbWF0ZXJpYWwudW5pZm9ybXNbc3ltYm9sXTtcclxuICAgICAgICAgICAgdmFyIHVuaWZvcm1WYWx1ZSA9IGdldFVuaWZvcm1WYWx1ZShyZW5kZXJhYmxlLCBtYXRlcmlhbCwgc3ltYm9sKTtcclxuICAgICAgICAgICAgdmFyIHVuaWZvcm1UeXBlID0gdW5pZm9ybS50eXBlO1xyXG4gICAgICAgICAgICB2YXIgaXNUZXh0dXJlID0gdW5pZm9ybVR5cGUgPT09ICd0JztcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1RleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdW5pZm9ybVZhbHVlIHx8ICF1bmlmb3JtVmFsdWUuaXNSZW5kZXJhYmxlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWUgPSBwbGFjZWhvbGRlclRleHR1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgICAgICAvLyBXaGVuIGJpbmRpbmcgdHdvIG1hdGVyaWFscyB3aXRoIHRoZSBzYW1lIHNoYWRlclxyXG4gICAgICAgICAgICAvLyBNYW55IHVuaWZvcm1zIHdpbGwgYmUgYmUgc2V0IHR3aWNlIGV2ZW4gaWYgdGhleSBoYXZlIHRoZSBzYW1lIHZhbHVlXHJcbiAgICAgICAgICAgIC8vIFNvIGFkZCBhIGV2YWx1YXRpb24gdG8gc2VlIGlmIHRoZSB1bmlmb3JtIGlzIHJlYWxseSBuZWVkZWQgdG8gYmUgc2V0XHJcbiAgICAgICAgICAgIGlmIChwcmV2TWF0ZXJpYWwgJiYgc2FtZVByb2dyYW0pIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcmV2VW5pZm9ybVZhbHVlID0gZ2V0VW5pZm9ybVZhbHVlKHByZXZSZW5kZXJhYmxlLCBwcmV2TWF0ZXJpYWwsIHN5bWJvbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2VW5pZm9ybVZhbHVlIHx8ICFwcmV2VW5pZm9ybVZhbHVlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZVbmlmb3JtVmFsdWUgPSBwbGFjZWhvbGRlclRleHR1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChwcmV2VW5pZm9ybVZhbHVlID09PSB1bmlmb3JtVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0aWxsIHRha2UgdGhlIHNsb3QgdG8gbWFrZSBzdXJlIHNhbWUgdGV4dHVyZSBpbiBkaWZmZXJlbnQgbWF0ZXJpYWxzIGhhdmUgc2FtZSBzbG90LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnRha2VDdXJyZW50VGV4dHVyZVNsb3QodGhpcywgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVuaWZvcm1UeXBlID09PSAndHYnICYmIHVuaWZvcm1WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1WYWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS50YWtlQ3VycmVudFRleHR1cmVTbG90KHRoaXMsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodW5pZm9ybVZhbHVlID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzVGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1WYWx1ZS5fX3Nsb3QgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNsb3QgPSBwcm9ncmFtLmN1cnJlbnRUZXh0dXJlU2xvdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCAnMWknLCBzeW1ib2wsIHNsb3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHsgLy8gVGV4dHVyZSB1bmlmb3JtIGlzIGVuYWJsZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS50YWtlQ3VycmVudFRleHR1cmVTbG90KHRoaXMsIHVuaWZvcm1WYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1WYWx1ZS5fX3Nsb3QgPSBzbG90O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIHVuaWZvcm0gdXNlIHNhbWUgdGV4dHVyZS4uXHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCAnMWknLCBzeW1ib2wsIHVuaWZvcm1WYWx1ZS5fX3Nsb3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodW5pZm9ybVZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1WYWx1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIFRleHR1cmUgQXJyYXlcclxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVHlwZSA9PT0gJ3R2Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvZ3JhbS5oYXNVbmlmb3JtKHN5bWJvbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJyID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmlmb3JtVmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtVmFsdWVbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS5fX3Nsb3QgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2xvdCA9IHByb2dyYW0uY3VycmVudFRleHR1cmVTbG90KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChzbG90KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdCh0aGlzLCB0ZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuX19zbG90ID0gc2xvdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRleHR1cmUuX19zbG90KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFpdicsIHN5bWJvbCwgYXJyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShfZ2wsIHVuaWZvcm0udHlwZSwgc3ltYm9sLCB1bmlmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCB1bmlmb3JtLnR5cGUsIHN5bWJvbCwgdW5pZm9ybVZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbmV3U2xvdCA9IHByb2dyYW0uY3VycmVudFRleHR1cmVTbG90KCk7XHJcbiAgICAgICAgLy8gVGV4dHVyZSBzbG90IG1heWJlIHVzZWQgb3V0IG9mIG1hdGVyaWFsLlxyXG4gICAgICAgIHByb2dyYW0ucmVzZXRUZXh0dXJlU2xvdChjdXJyZW50VGV4dHVyZVNsb3QpO1xyXG4gICAgICAgIHJldHVybiBuZXdTbG90O1xyXG4gICAgfSxcclxuXHJcbiAgICBfYmluZFZBTzogZnVuY3Rpb24gKHZhb0V4dCwgc2hhZGVyLCBnZW9tZXRyeSwgcHJvZ3JhbSkge1xyXG4gICAgICAgIHZhciBpc1N0YXRpYyA9ICFnZW9tZXRyeS5keW5hbWljO1xyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICB2YXIgdmFvSWQgPSB0aGlzLl9fdWlkX18gKyAnLScgKyBwcm9ncmFtLl9fdWlkX187XHJcbiAgICAgICAgdmFyIHZhbyA9IGdlb21ldHJ5Ll9fdmFvQ2FjaGVbdmFvSWRdO1xyXG4gICAgICAgIGlmICghdmFvKSB7XHJcbiAgICAgICAgICAgIHZhciBjaHVua3MgPSBnZW9tZXRyeS5nZXRCdWZmZXJDaHVua3ModGhpcyk7XHJcbiAgICAgICAgICAgIGlmICghY2h1bmtzIHx8ICFjaHVua3MubGVuZ3RoKSB7ICAvLyBFbXB0eSBtZXNoXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNodW5rID0gY2h1bmtzWzBdO1xyXG4gICAgICAgICAgICB2YXIgYXR0cmlidXRlQnVmZmVycyA9IGNodW5rLmF0dHJpYnV0ZUJ1ZmZlcnM7XHJcbiAgICAgICAgICAgIHZhciBpbmRpY2VzQnVmZmVyID0gY2h1bmsuaW5kaWNlc0J1ZmZlcjtcclxuXHJcbiAgICAgICAgICAgIHZhciBhdmFpbGFibGVBdHRyaWJ1dGVzID0gW107XHJcbiAgICAgICAgICAgIHZhciBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUJ1ZmZlckluZm8gPSBhdHRyaWJ1dGVCdWZmZXJzW2FdO1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWMgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLnNlbWFudGljO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN5bWJvbDtcclxuICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpY0luZm8gPSBzaGFkZXIuYXR0cmlidXRlU2VtYW50aWNzW3NlbWFudGljXTtcclxuICAgICAgICAgICAgICAgICAgICBzeW1ib2wgPSBzZW1hbnRpY0luZm8gJiYgc2VtYW50aWNJbmZvLnN5bWJvbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbCA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc3ltYm9sICYmIHByb2dyYW0uYXR0cmlidXRlc1tzeW1ib2xdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlQXR0cmlidXRlcy5wdXNoKGF0dHJpYnV0ZUJ1ZmZlckluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMucHVzaChzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YW8gPSBuZXcgVmVydGV4QXJyYXlPYmplY3QoXHJcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlQXR0cmlidXRlU3ltYm9scyxcclxuICAgICAgICAgICAgICAgIGluZGljZXNCdWZmZXJcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1N0YXRpYykge1xyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkuX192YW9DYWNoZVt2YW9JZF0gPSB2YW87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBuZWVkc0JpbmRBdHRyaWJ1dGVzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIHZlcnRleCBvYmplY3QgYXJyYXkgY29zdCBhIGxvdFxyXG4gICAgICAgIC8vIFNvIHdlIGRvbid0IHVzZSBpdCBvbiB0aGUgZHluYW1pYyBvYmplY3RcclxuICAgICAgICBpZiAodmFvRXh0ICYmIGlzU3RhdGljKSB7XHJcbiAgICAgICAgICAgIC8vIFVzZSB2ZXJ0ZXggYXJyYXkgb2JqZWN0XHJcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9ibG9nLnRvamljb2RlLmNvbS8yMDEyLzEwL29lc3ZlcnRleGFycmF5b2JqZWN0LWV4dGVuc2lvbi5odG1sXHJcbiAgICAgICAgICAgIGlmICh2YW8udmFvID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHZhby52YW8gPSB2YW9FeHQuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5lZWRzQmluZEF0dHJpYnV0ZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YW9FeHQuYmluZFZlcnRleEFycmF5T0VTKHZhby52YW8pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGF2YWlsYWJsZUF0dHJpYnV0ZXMgPSB2YW8uYXZhaWxhYmxlQXR0cmlidXRlcztcclxuICAgICAgICB2YXIgaW5kaWNlc0J1ZmZlciA9IHZhby5pbmRpY2VzQnVmZmVyO1xyXG5cclxuICAgICAgICBpZiAobmVlZHNCaW5kQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICB2YXIgbG9jYXRpb25MaXN0ID0gcHJvZ3JhbS5lbmFibGVBdHRyaWJ1dGVzKHRoaXMsIHZhby5hdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzLCAodmFvRXh0ICYmIGlzU3RhdGljICYmIHZhbykpO1xyXG4gICAgICAgICAgICAvLyBTZXR0aW5nIGF0dHJpYnV0ZXM7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXZhaWxhYmxlQXR0cmlidXRlcy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gbG9jYXRpb25MaXN0W2FdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUJ1ZmZlckluZm8gPSBhdmFpbGFibGVBdHRyaWJ1dGVzW2FdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGF0dHJpYnV0ZUJ1ZmZlckluZm8uYnVmZmVyO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNpemUgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLnNpemU7XHJcbiAgICAgICAgICAgICAgICB2YXIgZ2xUeXBlID0gYXR0cmlidXRlQnVmZmVyVHlwZU1hcFthdHRyaWJ1dGVCdWZmZXJJbmZvLnR5cGVdIHx8IF9nbC5GTE9BVDtcclxuXHJcbiAgICAgICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlcihfZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgX2dsLnZlcnRleEF0dHJpYlBvaW50ZXIobG9jYXRpb24sIHNpemUsIGdsVHlwZSwgZmFsc2UsIDAsIDApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZ2VvbWV0cnkuaXNVc2VJbmRpY2VzKCkpIHtcclxuICAgICAgICAgICAgICAgIF9nbC5iaW5kQnVmZmVyKF9nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgaW5kaWNlc0J1ZmZlci5idWZmZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmFvO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW5kZXJQcmVaOiBmdW5jdGlvbiAobGlzdCwgc2NlbmUsIGNhbWVyYSkge1xyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBwcmVaUGFzc01hdGVyaWFsID0gdGhpcy5fcHJlek1hdGVyaWFsIHx8IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LnByZXoudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucHJlei5mcmFnbWVudCcpKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX3ByZXpNYXRlcmlhbCA9IHByZVpQYXNzTWF0ZXJpYWw7XHJcblxyXG4gICAgICAgIF9nbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgIF9nbC5kZXB0aE1hc2sodHJ1ZSk7XHJcblxyXG4gICAgICAgIC8vIFN0YXR1c1xyXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyhsaXN0LCBjYW1lcmEsIHtcclxuICAgICAgICAgICAgaWZSZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIXJlbmRlcmFibGUuaWdub3JlUHJlWjtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBwcmV2UmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdEEgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdEIgPSBwcmV2UmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtYXRBLmdldCgnZGlmZnVzZU1hcCcpICE9PSBtYXRCLmdldCgnZGlmZnVzZU1hcCcpXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgKG1hdEEuZ2V0KCdhbHBoYUN1dG9mZicpIHx8IDApICE9PSAobWF0Qi5nZXQoJ2FscGhhQ3V0b2ZmJykgfHwgMCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGdldFVuaWZvcm06IGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBkZXB0aE1hdGVyaWFsLCBzeW1ib2wpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzeW1ib2wgPT09ICdhbHBoYU1hcCcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ2RpZmZ1c2VNYXAnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ2FscGhhQ3V0b2ZmJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLm1hdGVyaWFsLmlzRGVmaW5lZCgnZnJhZ21lbnQnLCAnQUxQSEFfVEVTVCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdkaWZmdXNlTWFwJylcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFscGhhQ3V0b2ZmID0gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ2FscGhhQ3V0b2ZmJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbHBoYUN1dG9mZiB8fCAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3V2UmVwZWF0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgndXZSZXBlYXQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3V2T2Zmc2V0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgndXZPZmZzZXQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXB0aE1hdGVyaWFsLmdldChzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZVpQYXNzTWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNvcnQ6IHRoaXMub3BhcXVlU29ydENvbXBhcmVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgX2dsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgZ2l2ZW4gc2NlbmUsIGluY2x1ZGluZyBhbGwgZ2VvbWV0cmlzLCB0ZXh0dXJlcyBhbmQgc2hhZGVycyBpbiB0aGUgc2NlbmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZVNjZW5lOiBmdW5jdGlvbihzY2VuZSkge1xyXG4gICAgICAgIHRoaXMuZGlzcG9zZU5vZGUoc2NlbmUsIHRydWUsIHRydWUpO1xyXG4gICAgICAgIHNjZW5lLmRpc3Bvc2UoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdpdmVuIG5vZGUsIGluY2x1ZGluZyBhbGwgZ2VvbWV0cmllcywgdGV4dHVyZXMgYW5kIHNoYWRlcnMgYXR0YWNoZWQgb24gaXQgb3IgaXRzIGRlc2NlbmRhbnRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBub2RlXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkaXNwb3NlR2VvbWV0cnk9ZmFsc2VdIElmIGRpc3Bvc2UgdGhlIGdlb21ldHJpZXMgdXNlZCBpbiB0aGUgZGVzY2VuZGFudCBtZXNoXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkaXNwb3NlVGV4dHVyZT1mYWxzZV0gSWYgZGlzcG9zZSB0aGUgdGV4dHVyZXMgdXNlZCBpbiB0aGUgZGVzY2VuZGFudCBtZXNoXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VOb2RlOiBmdW5jdGlvbihyb290LCBkaXNwb3NlR2VvbWV0cnksIGRpc3Bvc2VUZXh0dXJlKSB7XHJcbiAgICAgICAgLy8gRGV0dGFjaGVkIGZyb20gcGFyZW50XHJcbiAgICAgICAgaWYgKHJvb3QuZ2V0UGFyZW50KCkpIHtcclxuICAgICAgICAgICAgcm9vdC5nZXRQYXJlbnQoKS5yZW1vdmUocm9vdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBkaXNwb3NlZE1hcCA9IHt9O1xyXG4gICAgICAgIHJvb3QudHJhdmVyc2UoZnVuY3Rpb24obm9kZSkge1xyXG4gICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBub2RlLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICBpZiAobm9kZS5nZW9tZXRyeSAmJiBkaXNwb3NlR2VvbWV0cnkpIHtcclxuICAgICAgICAgICAgICAgIG5vZGUuZ2VvbWV0cnkuZGlzcG9zZSh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGlzcG9zZVRleHR1cmUgJiYgbWF0ZXJpYWwgJiYgIWRpc3Bvc2VkTWFwW21hdGVyaWFsLl9fdWlkX19dKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZVVuaWZvcm1zID0gbWF0ZXJpYWwuZ2V0VGV4dHVyZVVuaWZvcm1zKCk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IHRleHR1cmVVbmlmb3Jtcy5sZW5ndGg7IHUrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtTmFtZSA9IHRleHR1cmVVbmlmb3Jtc1t1XTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gbWF0ZXJpYWwudW5pZm9ybXNbdW5pZm9ybU5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtVHlwZSA9IG1hdGVyaWFsLnVuaWZvcm1zW3VuaWZvcm1OYW1lXS50eXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodW5pZm9ybVR5cGUgPT09ICd0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWwuZGlzcG9zZSAmJiB2YWwuZGlzcG9zZSh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUgPT09ICd0dicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB2YWwubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxba10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxba10uZGlzcG9zZSAmJiB2YWxba10uZGlzcG9zZSh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRpc3Bvc2VkTWFwW21hdGVyaWFsLl9fdWlkX19dID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBQYXJ0aWNsZSBzeXN0ZW0gYW5kIEFtYmllbnRDdWJlbWFwIGxpZ2h0IG5lZWQgdG8gZGlzcG9zZVxyXG4gICAgICAgICAgICBpZiAobm9kZS5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLmRpc3Bvc2UodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdpdmVuIGdlb21ldHJ5XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuR2VvbWV0cnl9IGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VHZW9tZXRyeTogZnVuY3Rpb24oZ2VvbWV0cnkpIHtcclxuICAgICAgICBnZW9tZXRyeS5kaXNwb3NlKHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgZ2l2ZW4gdGV4dHVyZVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlRleHR1cmV9IHRleHR1cmVcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZVRleHR1cmU6IGZ1bmN0aW9uKHRleHR1cmUpIHtcclxuICAgICAgICB0ZXh0dXJlLmRpc3Bvc2UodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBnaXZlbiBmcmFtZSBidWZmZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5GcmFtZUJ1ZmZlcn0gZnJhbWVCdWZmZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZUZyYW1lQnVmZmVyOiBmdW5jdGlvbihmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgIGZyYW1lQnVmZmVyLmRpc3Bvc2UodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAoKSB7fSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgc2NyZWVuIGNvb3JkcyB0byBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcyhOREMpXHJcbiAgICAgKiBTY3JlZW4gY29vcmRzIGNhbiBnZXQgZnJvbSBtb3VzZSBldmVudCwgaXQgaXMgcG9zaXRpb25lZCByZWxhdGl2ZSB0byBjYW52YXMgZWxlbWVudFxyXG4gICAgICogTkRDIGNhbiBiZSB1c2VkIGluIHJheSBjYXN0aW5nIHdpdGggQ2FtZXJhLnByb3RvdHlwZS5jYXN0UmF5IG1ldGhvZHNcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgICAgIHhcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gICAgICAgeVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBbb3V0XVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzY3JlZW5Ub05EQzogZnVuY3Rpb24oeCwgeSwgb3V0KSB7XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSW52ZXJ0IHk7XHJcbiAgICAgICAgeSA9IHRoaXMuX2hlaWdodCAtIHk7XHJcblxyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7XHJcbiAgICAgICAgdmFyIGFyciA9IG91dC5hcnJheTtcclxuICAgICAgICBhcnJbMF0gPSAoeCAtIHZpZXdwb3J0LngpIC8gdmlld3BvcnQud2lkdGg7XHJcbiAgICAgICAgYXJyWzBdID0gYXJyWzBdICogMiAtIDE7XHJcbiAgICAgICAgYXJyWzFdID0gKHkgLSB2aWV3cG9ydC55KSAvIHZpZXdwb3J0LmhlaWdodDtcclxuICAgICAgICBhcnJbMV0gPSBhcnJbMV0gKiAyIC0gMTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH1cclxufSk7XHJcblxyXG4vKipcclxuICogT3BhcXVlIHJlbmRlcmFibGVzIGNvbXBhcmUgZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5SZW5kZXJhYmxlfSB4XHJcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyYWJsZX0geVxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKiBAc3RhdGljXHJcbiAqL1xyXG5SZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZSA9IFJlbmRlcmVyLnByb3RvdHlwZS5vcGFxdWVTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uKHgsIHkpIHtcclxuICAgIC8vIFByaW9yaXR5IHJlbmRlck9yZGVyIC0+IHByb2dyYW0gLT4gbWF0ZXJpYWwgLT4gZ2VvbWV0cnlcclxuICAgIGlmICh4LnJlbmRlck9yZGVyID09PSB5LnJlbmRlck9yZGVyKSB7XHJcbiAgICAgICAgaWYgKHguX19wcm9ncmFtID09PSB5Ll9fcHJvZ3JhbSkge1xyXG4gICAgICAgICAgICBpZiAoeC5tYXRlcmlhbCA9PT0geS5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHguZ2VvbWV0cnkuX191aWRfXyAtIHkuZ2VvbWV0cnkuX191aWRfXztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geC5tYXRlcmlhbC5fX3VpZF9fIC0geS5tYXRlcmlhbC5fX3VpZF9fO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoeC5fX3Byb2dyYW0gJiYgeS5fX3Byb2dyYW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHguX19wcm9ncmFtLl9fdWlkX18gLSB5Ll9fcHJvZ3JhbS5fX3VpZF9fO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHJldHVybiB4LnJlbmRlck9yZGVyIC0geS5yZW5kZXJPcmRlcjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc3BhcmVudCByZW5kZXJhYmxlcyBjb21wYXJlIGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyYWJsZX0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmFibGV9IGJcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICogQHN0YXRpY1xyXG4gKi9cclxuUmVuZGVyZXIudHJhbnNwYXJlbnRTb3J0Q29tcGFyZSA9IFJlbmRlcmVyLnByb3RvdHlwZS50cmFuc3BhcmVudFNvcnRDb21wYXJlID0gZnVuY3Rpb24oeCwgeSkge1xyXG4gICAgLy8gUHJpb3JpdHkgcmVuZGVyT3JkZXIgLT4gZGVwdGggLT4gcHJvZ3JhbSAtPiBtYXRlcmlhbCAtPiBnZW9tZXRyeVxyXG5cclxuICAgIGlmICh4LnJlbmRlck9yZGVyID09PSB5LnJlbmRlck9yZGVyKSB7XHJcbiAgICAgICAgaWYgKHguX19kZXB0aCA9PT0geS5fX2RlcHRoKSB7XHJcbiAgICAgICAgICAgIGlmICh4Ll9fcHJvZ3JhbSA9PT0geS5fX3Byb2dyYW0pIHtcclxuICAgICAgICAgICAgICAgIGlmICh4Lm1hdGVyaWFsID09PSB5Lm1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguZ2VvbWV0cnkuX191aWRfXyAtIHkuZ2VvbWV0cnkuX191aWRfXztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB4Lm1hdGVyaWFsLl9fdWlkX18gLSB5Lm1hdGVyaWFsLl9fdWlkX187XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHguX19wcm9ncmFtICAmJiB5Ll9fcHJvZ3JhbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHguX19wcm9ncmFtLl9fdWlkX18gLSB5Ll9fcHJvZ3JhbS5fX3VpZF9fO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBEZXB0aCBpcyBuZWdhdGl2ZVxyXG4gICAgICAgIC8vIFNvIGZhcnRoZXIgb2JqZWN0IGhhcyBzbWFsbGVyIGRlcHRoIHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHguX19kZXB0aCAtIHkuX19kZXB0aDtcclxuICAgIH1cclxuICAgIHJldHVybiB4LnJlbmRlck9yZGVyIC0geS5yZW5kZXJPcmRlcjtcclxufTtcclxuXHJcbi8vIFRlbXBvcmFyeSB2YXJpYWJsZXNcclxudmFyIG1hdHJpY2VzID0ge1xyXG4gICAgSURFTlRJVFk6IG1hdDRDcmVhdGUoKSxcclxuXHJcbiAgICBXT1JMRDogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFVzogbWF0NENyZWF0ZSgpLFxyXG4gICAgUFJPSkVDVElPTjogbWF0NENyZWF0ZSgpLFxyXG4gICAgV09STERWSUVXOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBWSUVXUFJPSkVDVElPTjogbWF0NENyZWF0ZSgpLFxyXG4gICAgV09STERWSUVXUFJPSkVDVElPTjogbWF0NENyZWF0ZSgpLFxyXG5cclxuICAgIFdPUkxESU5WRVJTRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV0lOVkVSU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFBST0pFQ1RJT05JTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdJTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBWSUVXUFJPSkVDVElPTklOVkVSU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXHJcblxyXG4gICAgV09STERUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFZJRVdUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFBST0pFQ1RJT05UUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFV1RSQU5TUE9TRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV1BST0pFQ1RJT05UUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFV1BST0pFQ1RJT05UUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxESU5WRVJTRVRSQU5TUE9TRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV0lOVkVSU0VUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFBST0pFQ1RJT05JTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdJTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBWSUVXUFJPSkVDVElPTklOVkVSU0VUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKClcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LlJlbmRlcmVyLkNPTE9SX0JVRkZFUl9CSVRcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmVyLkNPTE9SX0JVRkZFUl9CSVQgPSBnbGVudW0uQ09MT1JfQlVGRkVSX0JJVDtcclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuUmVuZGVyZXIuREVQVEhfQlVGRkVSX0JJVFxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyZXIuREVQVEhfQlVGRkVSX0JJVCA9IGdsZW51bS5ERVBUSF9CVUZGRVJfQklUO1xyXG4vKipcclxuICogQG5hbWUgY2xheS5SZW5kZXJlci5TVEVOQ0lMX0JVRkZFUl9CSVRcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmVyLlNURU5DSUxfQlVGRkVSX0JJVCA9IGdsZW51bS5TVEVOQ0lMX0JVRkZFUl9CSVQ7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBSZW5kZXJlcjtcclxuIiwiaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlZlY3RvcjNcclxuICogQHBhcmFtIHtudW1iZXJ9IHhcclxuICogQHBhcmFtIHtudW1iZXJ9IHlcclxuICogQHBhcmFtIHtudW1iZXJ9IHpcclxuICovXHJcbnZhciBWZWN0b3IzID0gZnVuY3Rpb24oeCwgeSwgeikge1xyXG5cclxuICAgIHggPSB4IHx8IDA7XHJcbiAgICB5ID0geSB8fCAwO1xyXG4gICAgeiA9IHogfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JhZ2Ugb2YgVmVjdG9yMywgcmVhZCBhbmQgd3JpdGUgb2YgeCwgeSwgeiB3aWxsIGNoYW5nZSB0aGUgdmFsdWVzIGluIGFycmF5XHJcbiAgICAgKiBBbGwgbWV0aG9kcyBhbHNvIG9wZXJhdGUgb24gdGhlIGFycmF5IGluc3RlYWQgb2YgeCwgeSwgeiBjb21wb25lbnRzXHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjMjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSB2ZWMzLmZyb21WYWx1ZXMoeCwgeSwgeik7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXJ0eSBmbGFnIGlzIHVzZWQgYnkgdGhlIE5vZGUgdG8gZGV0ZXJtaW5lXHJcbiAgICAgKiBpZiB0aGUgbWF0cml4IGlzIHVwZGF0ZWQgdG8gbGF0ZXN0XHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yMyNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuVmVjdG9yMy5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IFZlY3RvcjMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYiB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCwgeSBhbmQgeiBjb21wb25lbnRzXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB6XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24gKHgsIHksIHopIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0geDtcclxuICAgICAgICB0aGlzLmFycmF5WzFdID0geTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gejtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSBhcnJbMF07XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IGFyclsxXTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gYXJyWzJdO1xyXG5cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgVmVjdG9yM1xyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yMyh0aGlzLngsIHRoaXMueSwgdGhpcy56KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGZyb20gYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcm9zcyBwcm9kdWN0IG9mIHNlbGYgYW5kIGIsIHdyaXR0ZW4gdG8gYSBWZWN0b3IzIG91dFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgY3Jvc3M6IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgdmVjMy5jcm9zcyh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIGRpc3RhbmNlXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGlzdDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5kaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLmRpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBkaXZpZGVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBkaXY6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5kaXYodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpdmlkZSBzZWxmIGJ5IGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBkaXZpZGU6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5kaXZpZGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMuZG90KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIG9mIGxlbmd0aFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBsZW46IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5sZW4odGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMubGVuZ3RoKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogTGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBhIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgdFxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBsZXJwOiBmdW5jdGlvbiAoYSwgYiwgdCkge1xyXG4gICAgICAgIHZlYzMubGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWluaW11bSBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgbWluOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMubWluKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXhpbXVtIG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBtYXg6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5tYXgodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICB2ZWMzLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXV0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5tdWx0aXBseSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTmVnYXRlIHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgbmVnYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmVjMy5uZWdhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbGl6ZSBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZlYzMubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSByYW5kb20geCwgeSwgeiBjb21wb25lbnRzIHdpdGggYSBnaXZlbiBzY2FsZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICByYW5kb206IGZ1bmN0aW9uIChzY2FsZSkge1xyXG4gICAgICAgIHZlYzMucmFuZG9tKHRoaXMuYXJyYXksIHNjYWxlKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgc2VsZlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgc2NhbGU6IGZ1bmN0aW9uIChzKSB7XHJcbiAgICAgICAgdmVjMy5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgYiBhbmQgYWRkIHRvIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgc2NhbGVBbmRBZGQ6IGZ1bmN0aW9uIChiLCBzKSB7XHJcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckRpc3Q6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMuc3FyRGlzdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxdWFyZWREaXN0YW5jZTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5zcXVhcmVkRGlzdGFuY2UodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWRMZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3FyTGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMuc3FyTGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLnNxdWFyZWRMZW5ndGgodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHN1YnRyYWN0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgc3ViOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuc3ViKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdWJ0cmFjdCBiIGZyb20gc2VsZlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHN1YnRyYWN0OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuc3VidHJhY3QodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgzIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQzOiBmdW5jdGlvbiAobSkge1xyXG4gICAgICAgIHZlYzMudHJhbnNmb3JtTWF0Myh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNmb3JtIHNlbGYgd2l0aCBhIE1hdHJpeDQgbVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRyYW5zZm9ybU1hdDQ6IGZ1bmN0aW9uIChtKSB7XHJcbiAgICAgICAgdmVjMy50cmFuc2Zvcm1NYXQ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBRdWF0ZXJuaW9uIHFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1RdWF0OiBmdW5jdGlvbiAocSkge1xyXG4gICAgICAgIHZlYzMudHJhbnNmb3JtUXVhdCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBxLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhc25mb3JtIHNlbGYgaW50byBwcm9qZWN0aW9uIHNwYWNlIHdpdGggbVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGFwcGx5UHJvamVjdGlvbjogZnVuY3Rpb24gKG0pIHtcclxuICAgICAgICB2YXIgdiA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgbSA9IG0uYXJyYXk7XHJcblxyXG4gICAgICAgIC8vIFBlcnNwZWN0aXZlIHByb2plY3Rpb25cclxuICAgICAgICBpZiAobVsxNV0gPT09IDApIHtcclxuICAgICAgICAgICAgdmFyIHcgPSAtMSAvIHZbMl07XHJcbiAgICAgICAgICAgIHZbMF0gPSBtWzBdICogdlswXSAqIHc7XHJcbiAgICAgICAgICAgIHZbMV0gPSBtWzVdICogdlsxXSAqIHc7XHJcbiAgICAgICAgICAgIHZbMl0gPSAobVsxMF0gKiB2WzJdICsgbVsxNF0pICogdztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZbMF0gPSBtWzBdICogdlswXSArIG1bMTJdO1xyXG4gICAgICAgICAgICB2WzFdID0gbVs1XSAqIHZbMV0gKyBtWzEzXTtcclxuICAgICAgICAgICAgdlsyXSA9IG1bMTBdICogdlsyXSArIG1bMTRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICBldWxlckZyb21RdWF0OiBmdW5jdGlvbihxLCBvcmRlcikge1xyXG4gICAgICAgIFZlY3RvcjMuZXVsZXJGcm9tUXVhdCh0aGlzLCBxLCBvcmRlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIGV1bGVyRnJvbU1hdDM6IGZ1bmN0aW9uIChtLCBvcmRlcikge1xyXG4gICAgICAgIFZlY3RvcjMuZXVsZXJGcm9tTWF0Myh0aGlzLCBtLCBvcmRlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xyXG4vLyBHZXR0ZXIgYW5kIFNldHRlclxyXG5pZiAoZGVmaW5lUHJvcGVydHkpIHtcclxuXHJcbiAgICB2YXIgcHJvdG8gPSBWZWN0b3IzLnByb3RvdHlwZTtcclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgeFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzBdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVswXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneScsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMV07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzFdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHpcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd6Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVsyXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMl0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5cclxuLy8gU3VwcGx5IG1ldGhvZHMgdGhhdCBhcmUgbm90IGluIHBsYWNlXHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLmFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5hZGQob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB4XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHlcclxuICogQHBhcmFtICB7bnVtYmVyfSAgelxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnNldCA9IGZ1bmN0aW9uKG91dCwgeCwgeSwgeikge1xyXG4gICAgdmVjMy5zZXQob3V0LmFycmF5LCB4LCB5LCB6KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLmNvcHkgPSBmdW5jdGlvbihvdXQsIGIpIHtcclxuICAgIHZlYzMuY29weShvdXQuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5jcm9zcyA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5jcm9zcyhvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5kaXN0ID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgcmV0dXJuIHZlYzMuZGlzdGFuY2UoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5kaXN0YW5jZSA9IFZlY3RvcjMuZGlzdDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMuZGl2ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMzLmRpdmlkZShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMuZGl2aWRlID0gVmVjdG9yMy5kaXY7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IzLmRvdCA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHJldHVybiB2ZWMzLmRvdChhLmFycmF5LCBiLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5sZW4gPSBmdW5jdGlvbihiKSB7XHJcbiAgICByZXR1cm4gdmVjMy5sZW5ndGgoYi5hcnJheSk7XHJcbn07XHJcblxyXG4vLyBWZWN0b3IzLmxlbmd0aCA9IFZlY3RvcjMubGVuO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgdFxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLmxlcnAgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHQpIHtcclxuICAgIHZlYzMubGVycChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5taW4ob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMzLm1heChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5tdWx0aXBseShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5tdWx0aXBseSA9IFZlY3RvcjMubXVsO1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMubmVnYXRlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2ZWMzLm5lZ2F0ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2ZWMzLm5vcm1hbGl6ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5yYW5kb20gPSBmdW5jdGlvbihvdXQsIHNjYWxlKSB7XHJcbiAgICB2ZWMzLnJhbmRvbShvdXQuYXJyYXksIHNjYWxlKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBzY2FsZSkge1xyXG4gICAgdmVjMy5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHNjYWxlKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjMuc3FyRGlzdCA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHJldHVybiB2ZWMzLnNxckRpc3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IzLnNxdWFyZWREaXN0YW5jZSA9IFZlY3RvcjMuc3FyRGlzdDtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IzLnNxckxlbiA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHJldHVybiB2ZWMzLnNxckxlbihhLmFycmF5KTtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5zcXVhcmVkTGVuZ3RoID0gVmVjdG9yMy5zcXJMZW47XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnN1YiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5zdWJ0cmFjdChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5zdWJ0cmFjdCA9IFZlY3RvcjMuc3ViO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtNYXRyaXgzfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMudHJhbnNmb3JtTWF0MyA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMy50cmFuc2Zvcm1NYXQzKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnRyYW5zZm9ybU1hdDQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZlYzMudHJhbnNmb3JtTWF0NChvdXQuYXJyYXksIGEuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnRyYW5zZm9ybVF1YXQgPSBmdW5jdGlvbihvdXQsIGEsIHEpIHtcclxuICAgIHZlYzMudHJhbnNmb3JtUXVhdChvdXQuYXJyYXksIGEuYXJyYXksIHEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gY2xhbXAodmFsLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIHZhbCA8IG1pbiA/IG1pbiA6ICh2YWwgPiBtYXggPyBtYXggOiB2YWwpO1xyXG59XHJcbnZhciBhdGFuMiA9IE1hdGguYXRhbjI7XHJcbnZhciBhc2luID0gTWF0aC5hc2luO1xyXG52YXIgYWJzID0gTWF0aC5hYnM7XHJcbi8qKlxyXG4gKiBDb252ZXJ0IHF1YXRlcm5pb24gdG8gZXVsZXIgYW5nbGVcclxuICogUXVhdGVybmlvbiBtdXN0IGJlIG5vcm1hbGl6ZWRcclxuICogRnJvbSB0aHJlZS5qc1xyXG4gKi9cclxuVmVjdG9yMy5ldWxlckZyb21RdWF0ID0gZnVuY3Rpb24gKG91dCwgcSwgb3JkZXIpIHtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcSA9IHEuYXJyYXk7XHJcblxyXG4gICAgdmFyIHRhcmdldCA9IG91dC5hcnJheTtcclxuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXTtcclxuICAgIHZhciB4MiA9IHggKiB4O1xyXG4gICAgdmFyIHkyID0geSAqIHk7XHJcbiAgICB2YXIgejIgPSB6ICogejtcclxuICAgIHZhciB3MiA9IHcgKiB3O1xyXG5cclxuICAgIHZhciBvcmRlciA9IChvcmRlciB8fCAnWFlaJykudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICBzd2l0Y2ggKG9yZGVyKSB7XHJcbiAgICAgICAgY2FzZSAnWFlaJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoMiAqICh4ICogdyAtIHkgKiB6KSwgKHcyIC0geDIgLSB5MiArIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGFzaW4oY2xhbXAoMiAqICh4ICogeiArIHkgKiB3KSwgLSAxLCAxKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKDIgKiAoeiAqIHcgLSB4ICogeSksICh3MiArIHgyIC0geTIgLSB6MikpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWFonOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhc2luKGNsYW1wKDIgKiAoeCAqIHcgLSB5ICogeiksIC0gMSwgMSkpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMigyICogKHggKiB6ICsgeSAqIHcpLCAodzIgLSB4MiAtIHkyICsgejIpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIoMiAqICh4ICogeSArIHogKiB3KSwgKHcyIC0geDIgKyB5MiAtIHoyKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1pYWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGFzaW4oY2xhbXAoMiAqICh4ICogdyArIHkgKiB6KSwgLSAxLCAxKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKDIgKiAoeSAqIHcgLSB6ICogeCksICh3MiAtIHgyIC0geTIgKyB6MikpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigyICogKHogKiB3IC0geCAqIHkpLCAodzIgLSB4MiArIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWllYJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoMiAqICh4ICogdyArIHogKiB5KSwgKHcyIC0geDIgLSB5MiArIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGFzaW4oY2xhbXAoMiAqICh5ICogdyAtIHggKiB6KSwgLSAxLCAxKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKDIgKiAoeCAqIHkgKyB6ICogdyksICh3MiArIHgyIC0geTIgLSB6MikpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWlgnOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMigyICogKHggKiB3IC0geiAqIHkpLCAodzIgLSB4MiArIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoMiAqICh5ICogdyAtIHggKiB6KSwgKHcyICsgeDIgLSB5MiAtIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGFzaW4oY2xhbXAoMiAqICh4ICogeSArIHogKiB3KSwgLSAxLCAxKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1haWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKDIgKiAoeCAqIHcgKyB5ICogeiksICh3MiAtIHgyICsgeTIgLSB6MikpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMigyICogKHggKiB6ICsgeSAqIHcpLCAodzIgKyB4MiAtIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXNpbihjbGFtcCgyICogKHogKiB3IC0geCAqIHkpLCAtIDEsIDEpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmtvd24gb3JkZXI6ICcgKyBvcmRlcik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgcm90YXRpb24gbWF0cml4IHRvIGV1bGVyIGFuZ2xlXHJcbiAqIGZyb20gdGhyZWUuanNcclxuICovXHJcblZlY3RvcjMuZXVsZXJGcm9tTWF0MyA9IGZ1bmN0aW9uIChvdXQsIG0sIG9yZGVyKSB7XHJcbiAgICAvLyBhc3N1bWVzIHRoZSB1cHBlciAzeDMgb2YgbSBpcyBhIHB1cmUgcm90YXRpb24gbWF0cml4IChpLmUsIHVuc2NhbGVkKVxyXG4gICAgdmFyIHRlID0gbS5hcnJheTtcclxuICAgIHZhciBtMTEgPSB0ZVswXSwgbTEyID0gdGVbM10sIG0xMyA9IHRlWzZdO1xyXG4gICAgdmFyIG0yMSA9IHRlWzFdLCBtMjIgPSB0ZVs0XSwgbTIzID0gdGVbN107XHJcbiAgICB2YXIgbTMxID0gdGVbMl0sIG0zMiA9IHRlWzVdLCBtMzMgPSB0ZVs4XTtcclxuICAgIHZhciB0YXJnZXQgPSBvdXQuYXJyYXk7XHJcblxyXG4gICAgdmFyIG9yZGVyID0gKG9yZGVyIHx8ICdYWVonKS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgIHN3aXRjaCAob3JkZXIpIHtcclxuICAgICAgICBjYXNlICdYWVonOlxyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhc2luKGNsYW1wKG0xMywgLTEsIDEpKTtcclxuICAgICAgICAgICAgaWYgKGFicyhtMTMpIDwgMC45OTk5OSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoLW0yMywgbTMzKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKC1tMTIsIG0xMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMihtMzIsIG0yMik7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1lYWic6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGFzaW4oLWNsYW1wKG0yMywgLTEsIDEpKTtcclxuICAgICAgICAgICAgaWYgKGFicyhtMjMpIDwgMC45OTk5OSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIobTEzLCBtMzMpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIobTIxLCBtMjIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoLW0zMSwgbTExKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWlhZJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXNpbihjbGFtcChtMzIsIC0xLCAxKSk7XHJcbiAgICAgICAgICAgIGlmIChhYnMobTMyKSA8IDAuOTk5OTkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKC1tMzEsIG0zMyk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigtbTEyLCBtMjIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKG0yMSwgbTExKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdaWVgnOlxyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhc2luKC1jbGFtcChtMzEsIC0xLCAxKSk7XHJcbiAgICAgICAgICAgIGlmIChhYnMobTMxKSA8IDAuOTk5OTkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKG0zMiwgbTMzKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKG0yMSwgbTExKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigtbTEyLCBtMjIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1laWCc6XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGFzaW4oY2xhbXAobTIxLCAtMSwgMSkpO1xyXG4gICAgICAgICAgICBpZiAoYWJzKG0yMSkgPCAwLjk5OTk5KSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMigtbTIzLCBtMjIpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoLW0zMSwgbTExKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMihtMTMsIG0zMyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWFpZJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXNpbigtY2xhbXAobTEyLCAtMSwgMSkpO1xyXG4gICAgICAgICAgICBpZiAoYWJzKG0xMikgPCAwLjk5OTk5KSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMihtMzIsIG0yMik7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMihtMTMsIG0xMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMigtbTIzLCBtMzMpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua293biBvcmRlcjogJyArIG9yZGVyKTtcclxuICAgIH1cclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhWZWN0b3IzLCB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqL1xyXG4gICAgUE9TSVRJVkVfWDoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMSwgMCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICovXHJcbiAgICBORUdBVElWRV9YOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygtMSwgMCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICovXHJcbiAgICBQT1NJVElWRV9ZOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLCAxLCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKi9cclxuICAgIE5FR0FUSVZFX1k6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKDAsIC0xLCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKi9cclxuICAgIFBPU0lUSVZFX1o6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKDAsIDAsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgTkVHQVRJVkVfWjoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMCwgMCwgLTEpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqL1xyXG4gICAgVVA6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKDAsIDEsIDApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqL1xyXG4gICAgWkVSTzoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yMztcclxuIiwiaW1wb3J0IHF1YXQgZnJvbSAnLi4vZ2xtYXRyaXgvcXVhdCc7XHJcbmltcG9ydCBtYXQzIGZyb20gJy4uL2dsbWF0cml4L21hdDMnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5RdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB6XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XHJcbiAqL1xyXG52YXIgUXVhdGVybmlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6LCB3KSB7XHJcblxyXG4gICAgeCA9IHggfHwgMDtcclxuICAgIHkgPSB5IHx8IDA7XHJcbiAgICB6ID0geiB8fCAwO1xyXG4gICAgdyA9IHcgPT09IHVuZGVmaW5lZCA/IDEgOiB3O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcmFnZSBvZiBRdWF0ZXJuaW9uLCByZWFkIGFuZCB3cml0ZSBvZiB4LCB5LCB6LCB3IHdpbGwgY2hhbmdlIHRoZSB2YWx1ZXMgaW4gYXJyYXlcclxuICAgICAqIEFsbCBtZXRob2RzIGFsc28gb3BlcmF0ZSBvbiB0aGUgYXJyYXkgaW5zdGVhZCBvZiB4LCB5LCB6LCB3IGNvbXBvbmVudHNcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuUXVhdGVybmlvbiNcclxuICAgICAqL1xyXG4gICAgdGhpcy5hcnJheSA9IHF1YXQuZnJvbVZhbHVlcyh4LCB5LCB6LCB3KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpcnR5IGZsYWcgaXMgdXNlZCBieSB0aGUgTm9kZSB0byBkZXRlcm1pbmVcclxuICAgICAqIGlmIHRoZSBtYXRyaXggaXMgdXBkYXRlZCB0byBsYXRlc3RcclxuICAgICAqIEBuYW1lIF9kaXJ0eVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5RdWF0ZXJuaW9uI1xyXG4gICAgICovXHJcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbn07XHJcblxyXG5RdWF0ZXJuaW9uLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogUXVhdGVybmlvbixcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBiIHRvIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcXVhdC5hZGQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgdyBjb21wb25lbnQgZnJvbSB4LCB5LCB6IGNvbXBvbmVudFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBjYWxjdWxhdGVXOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcXVhdC5jYWxjdWxhdGVXKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCwgeSBhbmQgeiBjb21wb25lbnRzXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB6XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB3XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24gKHgsIHksIHosIHcpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0geDtcclxuICAgICAgICB0aGlzLmFycmF5WzFdID0geTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gejtcclxuICAgICAgICB0aGlzLmFycmF5WzNdID0gdztcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHksIHogYW5kIHcgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSBhcnJbMF07XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IGFyclsxXTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gYXJyWzJdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbM10gPSBhcnJbM107XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBRdWF0ZXJuaW9uXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBRdWF0ZXJuaW9uKHRoaXMueCwgdGhpcy55LCB0aGlzLnosIHRoaXMudyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgY29uanVnYXRlIG9mIHNlbGYgSWYgdGhlIHF1YXRlcm5pb24gaXMgbm9ybWFsaXplZCxcclxuICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgZmFzdGVyIHRoYW4gaW52ZXJ0IGFuZCBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBjb25qdWdhdGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBxdWF0LmNvbmp1Z2F0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHF1YXQuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRG90IHByb2R1Y3Qgb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRvdDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICByZXR1cm4gcXVhdC5kb3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gdGhlIGdpdmVuIDN4MyByb3RhdGlvbiBtYXRyaXhcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBmcm9tTWF0MzogZnVuY3Rpb24gKG0pIHtcclxuICAgICAgICBxdWF0LmZyb21NYXQzKHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZnJvbSB0aGUgZ2l2ZW4gNHg0IHJvdGF0aW9uIG1hdHJpeFxyXG4gICAgICogVGhlIDR0aCBjb2x1bW4gYW5kIDR0aCByb3cgd2lsbCBiZSBkcm9wZWRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBmcm9tTWF0NDogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbTMgPSBtYXQzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobSkge1xyXG4gICAgICAgICAgICBtYXQzLmZyb21NYXQ0KG0zLCBtLmFycmF5KTtcclxuICAgICAgICAgICAgLy8gVE9ETyBOb3QgbGlrZSBtYXQ0LCBtYXQzIGluIGdsbWF0cml4IHNlZW1zIHRvIGJlIHJvdy1iYXNlZFxyXG4gICAgICAgICAgICBtYXQzLnRyYW5zcG9zZShtMywgbTMpO1xyXG4gICAgICAgICAgICBxdWF0LmZyb21NYXQzKHRoaXMuYXJyYXksIG0zKTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0byBpZGVudGl0eSBxdWF0ZXJuaW9uXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIGlkZW50aXR5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcXVhdC5pZGVudGl0eSh0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnZlcnQgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBpbnZlcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBxdWF0LmludmVydCh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBvZiBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHF1YXQubGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBxdWF0Lmxlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGEgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB0XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIGxlcnA6IGZ1bmN0aW9uIChhLCBiLCB0KSB7XHJcbiAgICAgICAgcXVhdC5sZXJwKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBtdWw6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcXVhdC5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseUxlZnRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBtdWxMZWZ0OiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIHF1YXQubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11dGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHF1YXQubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11dGlwbHkgYSBhbmQgc2VsZlxyXG4gICAgICogUXVhdGVybmlvbiBtdXRpcGx5IGlzIG5vdCBjb21tdXRhdGl2ZSwgc28gdGhlIHJlc3VsdCBvZiBtdXRpcGx5TGVmdCBpcyBkaWZmZXJlbnQgd2l0aCBtdWx0aXBseS5cclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uIChhKSB7XHJcbiAgICAgICAgcXVhdC5tdWx0aXBseSh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTm9ybWFsaXplIHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcXVhdC5ub3JtYWxpemUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBheGlzXHJcbiAgICAgKiBAcGFyYW0gcmFkXHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZUF4aXM6ZnVuY3Rpb24gKGF4aXMscmFkKSB7XHJcblxyXG4gICAgICAgIHZhciBxdWF0MiA9IG5ldyBRdWF0ZXJuaW9uKCkuYXJyYXk7XHJcblxyXG4gICAgICAgIHF1YXQucm90YXRlQXhpcyh0aGlzLmFycmF5LHF1YXQyLGF4aXMscmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWCBheGlzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVg6IGZ1bmN0aW9uIChyYWQpIHtcclxuXHJcbiAgICAgICAgcXVhdC5yb3RhdGVYKHRoaXMuYXJyYXksIHJhZCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuIGFib3V0IFkgYXhpc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICByb3RhdGVZOiBmdW5jdGlvbiAocmFkKSB7XHJcblxyXG4gICAgICAgIHF1YXQucm90YXRlWSh0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBaIGF4aXNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgcm90YXRlWjogZnVuY3Rpb24gKHJhZCkge1xyXG4gICAgICAgIHF1YXQucm90YXRlWih0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHNlbGYgdG8gcmVwcmVzZW50IHRoZSBzaG9ydGVzdCByb3RhdGlvbiBmcm9tIFZlY3RvcjMgYSB0byBWZWN0b3IzIGIuXHJcbiAgICAgKiBhIGFuZCBiIG5lZWRzIHRvIGJlIG5vcm1hbGl6ZWRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHJvdGF0aW9uVG86IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgcXVhdC5yb3RhdGlvblRvKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgc2VsZiB3aXRoIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBheGVzXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gdmlld1xyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHJpZ2h0XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gdXBcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgc2V0QXhlczogZnVuY3Rpb24gKHZpZXcsIHJpZ2h0LCB1cCkge1xyXG4gICAgICAgIHF1YXQuc2V0QXhlcyh0aGlzLmFycmF5LCB2aWV3LmFycmF5LCByaWdodC5hcnJheSwgdXAuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHNlbGYgd2l0aCBhIHJvdGF0aW9uIGF4aXMgYW5kIHJvdGF0aW9uIGFuZ2xlXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gYXhpc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBzZXRBeGlzQW5nbGU6IGZ1bmN0aW9uIChheGlzLCByYWQpIHtcclxuICAgICAgICBxdWF0LnNldEF4aXNBbmdsZSh0aGlzLmFycmF5LCBheGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm0gc3BoZXJpY2FsIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gdFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBzbGVycDogZnVuY3Rpb24gKGEsIGIsIHQpIHtcclxuICAgICAgICBxdWF0LnNsZXJwKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3Igc3F1YXJlZExlbmd0aFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXJMZW46IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gcXVhdC5zcXJMZW4odGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3F1YXJlZCBsZW5ndGggb2Ygc2VsZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXVhcmVkTGVuZ3RoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHF1YXQuc3F1YXJlZExlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZnJvbSBldWxlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHZcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcmRlclxyXG4gICAgICovXHJcbiAgICBmcm9tRXVsZXI6IGZ1bmN0aW9uICh2LCBvcmRlcikge1xyXG4gICAgICAgIHJldHVybiBRdWF0ZXJuaW9uLmZyb21FdWxlcih0aGlzLCB2LCBvcmRlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuICdbJyArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwodGhpcy5hcnJheSwgJywnKSArICddJztcclxuICAgIH0sXHJcblxyXG4gICAgdG9BcnJheTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcclxuLy8gR2V0dGVyIGFuZCBTZXR0ZXJcclxuaWYgKGRlZmluZVByb3BlcnR5KSB7XHJcblxyXG4gICAgdmFyIHByb3RvID0gUXVhdGVybmlvbi5wcm90b3R5cGU7XHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5RdWF0ZXJuaW9uXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd4Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVswXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgeVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlF1YXRlcm5pb25cclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB6XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuUXVhdGVybmlvblxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneicsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMl07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzJdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHdcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5RdWF0ZXJuaW9uXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd3Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVszXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbM10gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG4vLyBTdXBwbHkgbWV0aG9kcyB0aGF0IGFyZSBub3QgaW4gcGxhY2VcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uYWRkID0gZnVuY3Rpb24gKG91dCwgYSwgYikge1xyXG4gICAgcXVhdC5hZGQob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICB4XHJcbiAqIEBwYXJhbSAge251bWJlcn0gICAgIHlcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgelxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICB3XHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uc2V0ID0gZnVuY3Rpb24gKG91dCwgeCwgeSwgeiwgdykge1xyXG4gICAgcXVhdC5zZXQob3V0LmFycmF5LCB4LCB5LCB6LCB3KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmNvcHkgPSBmdW5jdGlvbiAob3V0LCBiKSB7XHJcbiAgICBxdWF0LmNvcHkob3V0LmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5jYWxjdWxhdGVXID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgcXVhdC5jYWxjdWxhdGVXKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uY29uanVnYXRlID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgcXVhdC5jb25qdWdhdGUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmlkZW50aXR5ID0gZnVuY3Rpb24gKG91dCkge1xyXG4gICAgcXVhdC5pZGVudGl0eShvdXQuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmludmVydCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIHF1YXQuaW52ZXJ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmRvdCA9IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICByZXR1cm4gcXVhdC5kb3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblF1YXRlcm5pb24ubGVuID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybiBxdWF0Lmxlbmd0aChhLmFycmF5KTtcclxufTtcclxuXHJcbi8vIFF1YXRlcm5pb24ubGVuZ3RoID0gUXVhdGVybmlvbi5sZW47XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICB0XHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ubGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcclxuICAgIHF1YXQubGVycChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgdFxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnNsZXJwID0gZnVuY3Rpb24gKG91dCwgYSwgYiwgdCkge1xyXG4gICAgcXVhdC5zbGVycChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5tdWwgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICBxdWF0Lm11bHRpcGx5KG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5tdWx0aXBseSA9IFF1YXRlcm5pb24ubXVsO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICByYWRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5yb3RhdGVYID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICBxdWF0LnJvdGF0ZVgob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICByYWRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5yb3RhdGVZID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICBxdWF0LnJvdGF0ZVkob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICByYWRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5yb3RhdGVaID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICBxdWF0LnJvdGF0ZVoob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gICAgYXhpc1xyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICByYWRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5zZXRBeGlzQW5nbGUgPSBmdW5jdGlvbiAob3V0LCBheGlzLCByYWQpIHtcclxuICAgIHF1YXQuc2V0QXhpc0FuZ2xlKG91dC5hcnJheSwgYXhpcy5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5ub3JtYWxpemUgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBxdWF0Lm5vcm1hbGl6ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnNxckxlbiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4gcXVhdC5zcXJMZW4oYS5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnNxdWFyZWRMZW5ndGggPSBRdWF0ZXJuaW9uLnNxckxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9ICAgIG1cclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5mcm9tTWF0MyA9IGZ1bmN0aW9uIChvdXQsIG0pIHtcclxuICAgIHF1YXQuZnJvbU1hdDMob3V0LmFycmF5LCBtLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICAgIHZpZXdcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICByaWdodFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICAgIHVwXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uc2V0QXhlcyA9IGZ1bmN0aW9uIChvdXQsIHZpZXcsIHJpZ2h0LCB1cCkge1xyXG4gICAgcXVhdC5zZXRBeGVzKG91dC5hcnJheSwgdmlldy5hcnJheSwgcmlnaHQuYXJyYXksIHVwLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICAgIGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICBiXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ucm90YXRpb25UbyA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIHF1YXQucm90YXRpb25UbyhvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBxdWF0ZXJuaW9uIGZyb20gZXVsZXJcclxuICogQHBhcmFtIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gdlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gb3JkZXJcclxuICovXHJcblF1YXRlcm5pb24uZnJvbUV1bGVyID0gZnVuY3Rpb24gKG91dCwgdiwgb3JkZXIpIHtcclxuXHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICB2ID0gdi5hcnJheTtcclxuICAgIHZhciB0YXJnZXQgPSBvdXQuYXJyYXk7XHJcbiAgICB2YXIgYzEgPSBNYXRoLmNvcyh2WzBdIC8gMik7XHJcbiAgICB2YXIgYzIgPSBNYXRoLmNvcyh2WzFdIC8gMik7XHJcbiAgICB2YXIgYzMgPSBNYXRoLmNvcyh2WzJdIC8gMik7XHJcbiAgICB2YXIgczEgPSBNYXRoLnNpbih2WzBdIC8gMik7XHJcbiAgICB2YXIgczIgPSBNYXRoLnNpbih2WzFdIC8gMik7XHJcbiAgICB2YXIgczMgPSBNYXRoLnNpbih2WzJdIC8gMik7XHJcblxyXG4gICAgdmFyIG9yZGVyID0gKG9yZGVyIHx8ICdYWVonKS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgIC8vIGh0dHA6Ly93d3cubWF0aHdvcmtzLmNvbS9tYXRsYWJjZW50cmFsL2ZpbGVleGNoYW5nZS9cclxuICAgIC8vICAyMDY5Ni1mdW5jdGlvbi10by1jb252ZXJ0LWJldHdlZW4tZGNtLWV1bGVyLWFuZ2xlcy1xdWF0ZXJuaW9ucy1hbmQtZXVsZXItdmVjdG9ycy9cclxuICAgIC8vICBjb250ZW50L1NwaW5DYWxjLm1cclxuXHJcbiAgICBzd2l0Y2ggKG9yZGVyKSB7XHJcbiAgICAgICAgY2FzZSAnWFlaJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gczEgKiBjMiAqIGMzICsgYzEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBjMSAqIHMyICogYzMgLSBzMSAqIGMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGMxICogYzIgKiBzMyArIHMxICogczIgKiBjMztcclxuICAgICAgICAgICAgdGFyZ2V0WzNdID0gYzEgKiBjMiAqIGMzIC0gczEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWFonOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBzMSAqIGMyICogYzMgKyBjMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGMxICogczIgKiBjMyAtIHMxICogYzIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYzEgKiBjMiAqIHMzIC0gczEgKiBzMiAqIGMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbM10gPSBjMSAqIGMyICogYzMgKyBzMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1pYWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IHMxICogYzIgKiBjMyAtIGMxICogczIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYzEgKiBzMiAqIGMzICsgczEgKiBjMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBjMSAqIGMyICogczMgKyBzMSAqIHMyICogYzM7XHJcbiAgICAgICAgICAgIHRhcmdldFszXSA9IGMxICogYzIgKiBjMyAtIHMxICogczIgKiBzMztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWllYJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gczEgKiBjMiAqIGMzIC0gYzEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBjMSAqIHMyICogYzMgKyBzMSAqIGMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGMxICogYzIgKiBzMyAtIHMxICogczIgKiBjMztcclxuICAgICAgICAgICAgdGFyZ2V0WzNdID0gYzEgKiBjMiAqIGMzICsgczEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWlgnOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBzMSAqIGMyICogYzMgKyBjMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGMxICogczIgKiBjMyArIHMxICogYzIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYzEgKiBjMiAqIHMzIC0gczEgKiBzMiAqIGMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbM10gPSBjMSAqIGMyICogYzMgLSBzMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1haWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IHMxICogYzIgKiBjMyAtIGMxICogczIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYzEgKiBzMiAqIGMzIC0gczEgKiBjMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBjMSAqIGMyICogczMgKyBzMSAqIHMyICogYzM7XHJcbiAgICAgICAgICAgIHRhcmdldFszXSA9IGMxICogYzIgKiBjMyArIHMxICogczIgKiBzMztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBRdWF0ZXJuaW9uO1xyXG4iLCJpbXBvcnQgbWF0NCBmcm9tICcuLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcbmltcG9ydCBxdWF0IGZyb20gJy4uL2dsbWF0cml4L3F1YXQnO1xyXG5pbXBvcnQgbWF0MyBmcm9tICcuLi9nbG1hdHJpeC9tYXQzJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9WZWN0b3IzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuTWF0cml4NFxyXG4gKi9cclxudmFyIE1hdHJpeDQgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICB0aGlzLl9heGlzWCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICB0aGlzLl9heGlzWSA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICB0aGlzLl9heGlzWiA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIE1hdHJpeDRcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4NCNcclxuICAgICAqL1xyXG4gICAgdGhpcy5hcnJheSA9IG1hdDQuY3JlYXRlKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4NCNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuTWF0cml4NC5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IE1hdHJpeDQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gYXJyW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGFkanVnYXRlIG9mIHNlbGYsIGluLXBsYWNlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGFkam9pbnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDQuYWRqb2ludCh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgTWF0cml4NFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgTWF0cml4NCgpKS5jb3B5KHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgZnJvbSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24oYSkge1xyXG4gICAgICAgIG1hdDQuY29weSh0aGlzLmFycmF5LCBhLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIG1hdHJpeCBkZXRlcm1pbmFudFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkZXRlcm1pbmFudDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdDQuZGV0ZXJtaW5hbnQodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHVwcGVyIDN4MyBwYXJ0IGZyb20gcXVhdGVybmlvblxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGZyb21RdWF0OiBmdW5jdGlvbihxKSB7XHJcbiAgICAgICAgbWF0NC5mcm9tUXVhdCh0aGlzLmFycmF5LCBxLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gYSBxdWF0ZXJuaW9uIHJvdGF0aW9uIGFuZCBhIHZlY3RvciB0cmFuc2xhdGlvblxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgZnJvbVJvdGF0aW9uVHJhbnNsYXRpb246IGZ1bmN0aW9uKHEsIHYpIHtcclxuICAgICAgICBtYXQ0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKHRoaXMuYXJyYXksIHEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZnJvbSBNYXRyaXgyZCwgaXQgaXMgdXNlZCB3aGVuIGNvbnZlcnRpbmcgYSAyZCBzaGFwZSB0byAzZCBzcGFjZS5cclxuICAgICAqIEluIDNkIHNwYWNlIGl0IGlzIGVxdWl2YWxlbnQgdG8gcmFuc2xhdGUgb24geHkgcGxhbmUgYW5kIHJvdGF0ZSBhYm91dCB6IGF4aXNcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG0yZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBmcm9tTWF0MmQ6IGZ1bmN0aW9uKG0yZCkge1xyXG4gICAgICAgIE1hdHJpeDQuZnJvbU1hdDJkKHRoaXMsIG0yZCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gZnJ1c3R1bSBib3VuZHNcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gbGVmdFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSByaWdodFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBib3R0b21cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gdG9wXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IG5lYXJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gZmFyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGZydXN0dW06IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xyXG4gICAgICAgIG1hdDQuZnJ1c3R1bSh0aGlzLmFycmF5LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcik7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0byBhIGlkZW50aXR5IG1hdHJpeFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBpZGVudGl0eTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0NC5pZGVudGl0eSh0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0IHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgaW52ZXJ0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQ0LmludmVydCh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGFzIGEgbWF0cml4IHdpdGggdGhlIGdpdmVuIGV5ZSBwb3NpdGlvbiwgZm9jYWwgcG9pbnQsIGFuZCB1cCBheGlzXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGV5ZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBjZW50ZXJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gdXBcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgbG9va0F0OiBmdW5jdGlvbihleWUsIGNlbnRlciwgdXApIHtcclxuICAgICAgICBtYXQ0Lmxvb2tBdCh0aGlzLmFycmF5LCBleWUuYXJyYXksIGNlbnRlci5hcnJheSwgdXAuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXV0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDQubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgbXVsTGVmdDogZnVuY3Rpb24oYSkge1xyXG4gICAgICAgIG1hdDQubXVsKHRoaXMuYXJyYXksIGEuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQ0Lm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBhIGFuZCBzZWxmLCBhIGlzIG9uIHRoZSBsZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbihhKSB7XHJcbiAgICAgICAgbWF0NC5tdWx0aXBseSh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGFzIGEgb3J0aG9ncmFwaGljIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGxlZnRcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gcmlnaHRcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gYm90dG9tXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRvcFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBuZWFyXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGZhclxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBvcnRobzogZnVuY3Rpb24obGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcclxuICAgICAgICBtYXQ0Lm9ydGhvKHRoaXMuYXJyYXksIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYXMgYSBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBmb3Z5XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGFzcGVjdFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBuZWFyXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGZhclxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBwZXJzcGVjdGl2ZTogZnVuY3Rpb24oZm92eSwgYXNwZWN0LCBuZWFyLCBmYXIpIHtcclxuICAgICAgICBtYXQ0LnBlcnNwZWN0aXZlKHRoaXMuYXJyYXksIGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgcmFkIGFib3V0IGF4aXMuXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHJvdGFpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgcmFkXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGF4aXNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgcm90YXRlOiBmdW5jdGlvbihyYWQsIGF4aXMpIHtcclxuICAgICAgICBtYXQ0LnJvdGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQsIGF4aXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBYIGF4aXMuXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHJvdGFpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVg6IGZ1bmN0aW9uKHJhZCkge1xyXG4gICAgICAgIG1hdDQucm90YXRlWCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBZIGF4aXMuXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHJvdGFpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVk6IGZ1bmN0aW9uKHJhZCkge1xyXG4gICAgICAgIG1hdDQucm90YXRlWSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBaIGF4aXMuXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHJvdGFpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVo6IGZ1bmN0aW9uKHJhZCkge1xyXG4gICAgICAgIG1hdDQucm90YXRlWih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBzZWxmIGJ5IHNcclxuICAgICAqIEVxdWFsIHRvIHJpZ2h0LW11bHRpcGx5IGEgc2NhbGUgbWF0cml4XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICBzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbih2KSB7XHJcbiAgICAgICAgbWF0NC5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNsYXRlIHNlbGYgYnkgdi5cclxuICAgICAqIEVxdWFsIHRvIHJpZ2h0LW11bHRpcGx5IGEgdHJhbnNsYXRlIG1hdHJpeFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgdlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uKHYpIHtcclxuICAgICAgICBtYXQ0LnRyYW5zbGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNwb3NlIHNlbGYsIGluLXBsYWNlLlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc3Bvc2U6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDQudHJhbnNwb3NlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNvbXBvc2UgYSBtYXRyaXggdG8gU1JUXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW3NjYWxlXVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlF1YXRlcm5pb259IHJvdGF0aW9uXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yfSBwb3NpdGlvblxyXG4gICAgICogQHNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbWljcm9zb2Z0LnhuYS5mcmFtZXdvcmsubWF0cml4LmRlY29tcG9zZS5hc3B4XHJcbiAgICAgKi9cclxuICAgIGRlY29tcG9zZU1hdHJpeDogKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgeCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHkgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB6ID0gdmVjMy5jcmVhdGUoKTtcclxuXHJcbiAgICAgICAgdmFyIG0zID0gbWF0My5jcmVhdGUoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjYWxlLCByb3RhdGlvbiwgcG9zaXRpb24pIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgICAgIHZlYzMuc2V0KHgsIGVsWzBdLCBlbFsxXSwgZWxbMl0pO1xyXG4gICAgICAgICAgICB2ZWMzLnNldCh5LCBlbFs0XSwgZWxbNV0sIGVsWzZdKTtcclxuICAgICAgICAgICAgdmVjMy5zZXQoeiwgZWxbOF0sIGVsWzldLCBlbFsxMF0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHN4ID0gdmVjMy5sZW5ndGgoeCk7XHJcbiAgICAgICAgICAgIHZhciBzeSA9IHZlYzMubGVuZ3RoKHkpO1xyXG4gICAgICAgICAgICB2YXIgc3ogPSB2ZWMzLmxlbmd0aCh6KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGlmIGRldGVybWluZSBpcyBuZWdhdGl2ZSwgd2UgbmVlZCB0byBpbnZlcnQgb25lIHNjYWxlXHJcbiAgICAgICAgICAgIHZhciBkZXQgPSB0aGlzLmRldGVybWluYW50KCk7XHJcbiAgICAgICAgICAgIGlmIChkZXQgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBzeCA9IC1zeDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNjYWxlKSB7XHJcbiAgICAgICAgICAgICAgICBzY2FsZS5zZXQoc3gsIHN5LCBzeik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNldChlbFsxMl0sIGVsWzEzXSwgZWxbMTRdKTtcclxuXHJcbiAgICAgICAgICAgIG1hdDMuZnJvbU1hdDQobTMsIGVsKTtcclxuICAgICAgICAgICAgLy8gTm90IGxpa2UgbWF0NCwgbWF0MyBpbiBnbG1hdHJpeCBzZWVtcyB0byBiZSByb3ctYmFzZWRcclxuICAgICAgICAgICAgLy8gU2VlbXMgZml4ZWQgaW4gZ2wtbWF0cml4IDIuMi4yXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90b2ppL2dsLW1hdHJpeC9pc3N1ZXMvMTE0XHJcbiAgICAgICAgICAgIC8vIG1hdDMudHJhbnNwb3NlKG0zLCBtMyk7XHJcblxyXG4gICAgICAgICAgICBtM1swXSAvPSBzeDtcclxuICAgICAgICAgICAgbTNbMV0gLz0gc3g7XHJcbiAgICAgICAgICAgIG0zWzJdIC89IHN4O1xyXG5cclxuICAgICAgICAgICAgbTNbM10gLz0gc3k7XHJcbiAgICAgICAgICAgIG0zWzRdIC89IHN5O1xyXG4gICAgICAgICAgICBtM1s1XSAvPSBzeTtcclxuXHJcbiAgICAgICAgICAgIG0zWzZdIC89IHN6O1xyXG4gICAgICAgICAgICBtM1s3XSAvPSBzejtcclxuICAgICAgICAgICAgbTNbOF0gLz0gc3o7XHJcblxyXG4gICAgICAgICAgICBxdWF0LmZyb21NYXQzKHJvdGF0aW9uLmFycmF5LCBtMyk7XHJcbiAgICAgICAgICAgIHF1YXQubm9ybWFsaXplKHJvdGF0aW9uLmFycmF5LCByb3RhdGlvbi5hcnJheSk7XHJcblxyXG4gICAgICAgICAgICByb3RhdGlvbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICBwb3NpdGlvbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xyXG5cclxuaWYgKGRlZmluZVByb3BlcnR5KSB7XHJcbiAgICB2YXIgcHJvdG8gPSBNYXRyaXg0LnByb3RvdHlwZTtcclxuICAgIC8qKlxyXG4gICAgICogWiBBeGlzIG9mIGxvY2FsIHRyYW5zZm9ybVxyXG4gICAgICogQG5hbWUgelxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3onLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgICAgIHRoaXMuX2F4aXNaLnNldChlbFs4XSwgZWxbOV0sIGVsWzEwXSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9heGlzWjtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBIZXJlIGhhcyBhIHByb2JsZW1cclxuICAgICAgICAgICAgLy8gSWYgb25seSBzZXQgYW4gaXRlbSBvZiB2ZWN0b3Igd2lsbCBub3Qgd29ya1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB2ID0gdi5hcnJheTtcclxuICAgICAgICAgICAgZWxbOF0gPSB2WzBdO1xyXG4gICAgICAgICAgICBlbFs5XSA9IHZbMV07XHJcbiAgICAgICAgICAgIGVsWzEwXSA9IHZbMl07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBZIEF4aXMgb2YgbG9jYWwgdHJhbnNmb3JtXHJcbiAgICAgKiBAbmFtZSB5XHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4NFxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneScsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5hcnJheTtcclxuICAgICAgICAgICAgdGhpcy5fYXhpc1kuc2V0KGVsWzRdLCBlbFs1XSwgZWxbNl0pO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXhpc1k7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgICAgIHYgPSB2LmFycmF5O1xyXG4gICAgICAgICAgICBlbFs0XSA9IHZbMF07XHJcbiAgICAgICAgICAgIGVsWzVdID0gdlsxXTtcclxuICAgICAgICAgICAgZWxbNl0gPSB2WzJdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogWCBBeGlzIG9mIGxvY2FsIHRyYW5zZm9ybVxyXG4gICAgICogQG5hbWUgeFxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgICAgIHRoaXMuX2F4aXNYLnNldChlbFswXSwgZWxbMV0sIGVsWzJdKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F4aXNYO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB2ID0gdi5hcnJheTtcclxuICAgICAgICAgICAgZWxbMF0gPSB2WzBdO1xyXG4gICAgICAgICAgICBlbFsxXSA9IHZbMV07XHJcbiAgICAgICAgICAgIGVsWzJdID0gdlsyXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG59XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuYWRqb2ludCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0NC5hZGpvaW50KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0NC5jb3B5KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbk1hdHJpeDQuZGV0ZXJtaW5hbnQgPSBmdW5jdGlvbihhKSB7XHJcbiAgICByZXR1cm4gbWF0NC5kZXRlcm1pbmFudChhLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICBtYXQ0LmlkZW50aXR5KG91dC5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgbGVmdFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICByaWdodFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBib3R0b21cclxuICogQHBhcmFtICB7bnVtYmVyfSAgdG9wXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIG5lYXJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgZmFyXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQub3J0aG8gPSBmdW5jdGlvbihvdXQsIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XHJcbiAgICBtYXQ0Lm9ydGhvKG91dC5hcnJheSwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIGZvdnlcclxuICogQHBhcmFtICB7bnVtYmVyfSAgYXNwZWN0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIG5lYXJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgZmFyXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQucGVyc3BlY3RpdmUgPSBmdW5jdGlvbihvdXQsIGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKSB7XHJcbiAgICBtYXQ0LnBlcnNwZWN0aXZlKG91dC5hcnJheSwgZm92eSwgYXNwZWN0LCBuZWFyLCBmYXIpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gZXllXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gY2VudGVyXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gdXBcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5sb29rQXQgPSBmdW5jdGlvbihvdXQsIGV5ZSwgY2VudGVyLCB1cCkge1xyXG4gICAgbWF0NC5sb29rQXQob3V0LmFycmF5LCBleWUuYXJyYXksIGNlbnRlci5hcnJheSwgdXAuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0NC5pbnZlcnQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQubXVsID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBtYXQ0Lm11bChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQubXVsdGlwbHkgPSBNYXRyaXg0Lm11bDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9ICAgIG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5mcm9tUXVhdCA9IGZ1bmN0aW9uKG91dCwgcSkge1xyXG4gICAgbWF0NC5mcm9tUXVhdChvdXQuYXJyYXksIHEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gICAgb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICAgIHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbiA9IGZ1bmN0aW9uKG91dCwgcSwgdikge1xyXG4gICAgbWF0NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihvdXQuYXJyYXksIHEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbTRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gbTJkXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuZnJvbU1hdDJkID0gZnVuY3Rpb24obTQsIG0yZCkge1xyXG4gICAgbTQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHZhciBtMmQgPSBtMmQuYXJyYXk7XHJcbiAgICB2YXIgbTQgPSBtNC5hcnJheTtcclxuXHJcbiAgICBtNFswXSA9IG0yZFswXTtcclxuICAgIG00WzRdID0gbTJkWzJdO1xyXG4gICAgbTRbMTJdID0gbTJkWzRdO1xyXG5cclxuICAgIG00WzFdID0gbTJkWzFdO1xyXG4gICAgbTRbNV0gPSBtMmRbM107XHJcbiAgICBtNFsxM10gPSBtMmRbNV07XHJcblxyXG4gICAgcmV0dXJuIG00O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICByYWRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBheGlzXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQucm90YXRlID0gZnVuY3Rpb24ob3V0LCBhLCByYWQsIGF4aXMpIHtcclxuICAgIG1hdDQucm90YXRlKG91dC5hcnJheSwgYS5hcnJheSwgcmFkLCBheGlzLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQucm90YXRlWCA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XHJcbiAgICBtYXQ0LnJvdGF0ZVgob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICByYWRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5yb3RhdGVZID0gZnVuY3Rpb24ob3V0LCBhLCByYWQpIHtcclxuICAgIG1hdDQucm90YXRlWShvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHJhZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnJvdGF0ZVogPSBmdW5jdGlvbihvdXQsIGEsIHJhZCkge1xyXG4gICAgbWF0NC5yb3RhdGVaKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSB2XHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIG1hdDQuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC50cmFuc3Bvc2UgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDQudHJhbnNwb3NlKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgbWF0NC50cmFuc2xhdGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1hdHJpeDQ7XHJcbiIsImltcG9ydCBWZWN0b3IzIGZyb20gJy4vVmVjdG9yMyc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxudmFyIHZlYzNTZXQgPSB2ZWMzLnNldDtcclxudmFyIHZlYzNDb3B5ID0gdmVjMy5jb3B5O1xyXG5cclxuLyoqXHJcbiAqIEF4aXMgYWxpZ25lZCBib3VuZGluZyBib3hcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LkJvdW5kaW5nQm94XHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBbbWluXVxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW21heF1cclxuICovXHJcbnZhciBCb3VuZGluZ0JveCA9IGZ1bmN0aW9uIChtaW4sIG1heCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWluaW11bSBjb29yZHMgb2YgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLm1pbiA9IG1pbiB8fCBuZXcgVmVjdG9yMyhJbmZpbml0eSwgSW5maW5pdHksIEluZmluaXR5KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1heGltdW0gY29vcmRzIG9mIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5tYXggPSBtYXggfHwgbmV3IFZlY3RvcjMoLUluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eSk7XHJcblxyXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XHJcbn07XHJcblxyXG5Cb3VuZGluZ0JveC5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IEJvdW5kaW5nQm94LFxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgbWluIGFuZCBtYXggY29vcmRzIGZyb20gYSB2ZXJ0aWNlcyBhcnJheVxyXG4gICAgICogQHBhcmFtICB7YXJyYXl9IHZlcnRpY2VzXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUZyb21WZXJ0aWNlczogZnVuY3Rpb24gKHZlcnRpY2VzKSB7XHJcbiAgICAgICAgaWYgKHZlcnRpY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluO1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHZhciBtaW5BcnIgPSBtaW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXhBcnIgPSBtYXguYXJyYXk7XHJcbiAgICAgICAgICAgIHZlYzNDb3B5KG1pbkFyciwgdmVydGljZXNbMF0pO1xyXG4gICAgICAgICAgICB2ZWMzQ29weShtYXhBcnIsIHZlcnRpY2VzWzBdKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZlcnRleCA9IHZlcnRpY2VzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhbMF0gPCBtaW5BcnJbMF0pIHsgbWluQXJyWzBdID0gdmVydGV4WzBdOyB9XHJcbiAgICAgICAgICAgICAgICBpZiAodmVydGV4WzFdIDwgbWluQXJyWzFdKSB7IG1pbkFyclsxXSA9IHZlcnRleFsxXTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleFsyXSA8IG1pbkFyclsyXSkgeyBtaW5BcnJbMl0gPSB2ZXJ0ZXhbMl07IH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodmVydGV4WzBdID4gbWF4QXJyWzBdKSB7IG1heEFyclswXSA9IHZlcnRleFswXTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleFsxXSA+IG1heEFyclsxXSkgeyBtYXhBcnJbMV0gPSB2ZXJ0ZXhbMV07IH1cclxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhbMl0gPiBtYXhBcnJbMl0pIHsgbWF4QXJyWzJdID0gdmVydGV4WzJdOyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWluLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIG1heC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVbmlvbiBvcGVyYXRpb24gd2l0aCBhbm90aGVyIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5Cb3VuZGluZ0JveH0gYmJveFxyXG4gICAgICovXHJcbiAgICB1bmlvbjogZnVuY3Rpb24gKGJib3gpIHtcclxuICAgICAgICB2YXIgbWluID0gdGhpcy5taW47XHJcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xyXG4gICAgICAgIHZlYzMubWluKG1pbi5hcnJheSwgbWluLmFycmF5LCBiYm94Lm1pbi5hcnJheSk7XHJcbiAgICAgICAgdmVjMy5tYXgobWF4LmFycmF5LCBtYXguYXJyYXksIGJib3gubWF4LmFycmF5KTtcclxuICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICBtYXguX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcnNlY3Rpb24gb3BlcmF0aW9uIHdpdGggYW5vdGhlciBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQm91bmRpbmdCb3h9IGJib3hcclxuICAgICAqL1xyXG4gICAgaW50ZXJzZWN0aW9uOiBmdW5jdGlvbiAoYmJveCkge1xyXG4gICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbjtcclxuICAgICAgICB2YXIgbWF4ID0gdGhpcy5tYXg7XHJcbiAgICAgICAgdmVjMy5tYXgobWluLmFycmF5LCBtaW4uYXJyYXksIGJib3gubWluLmFycmF5KTtcclxuICAgICAgICB2ZWMzLm1pbihtYXguYXJyYXksIG1heC5hcnJheSwgYmJveC5tYXguYXJyYXkpO1xyXG4gICAgICAgIG1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIG1heC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGludGVyc2VjdCB3aXRoIGFub3RoZXIgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkJvdW5kaW5nQm94fSBiYm94XHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RCb3VuZGluZ0JveDogZnVuY3Rpb24gKGJib3gpIHtcclxuICAgICAgICB2YXIgX21pbiA9IHRoaXMubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBfbWF4ID0gdGhpcy5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgIHZhciBfbWluMiA9IGJib3gubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBfbWF4MiA9IGJib3gubWF4LmFycmF5O1xyXG5cclxuICAgICAgICByZXR1cm4gISAoX21pblswXSA+IF9tYXgyWzBdIHx8IF9taW5bMV0gPiBfbWF4MlsxXSB8fCBfbWluWzJdID4gX21heDJbMl1cclxuICAgICAgICAgICAgfHwgX21heFswXSA8IF9taW4yWzBdIHx8IF9tYXhbMV0gPCBfbWluMlsxXSB8fCBfbWF4WzJdIDwgX21pbjJbMl0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGNvbnRhaW4gYW5vdGhlciBib3VuZGluZyBib3ggZW50aXJlbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQm91bmRpbmdCb3h9IGJib3hcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGNvbnRhaW5Cb3VuZGluZ0JveDogZnVuY3Rpb24gKGJib3gpIHtcclxuXHJcbiAgICAgICAgdmFyIF9taW4gPSB0aGlzLm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heCA9IHRoaXMubWF4LmFycmF5O1xyXG5cclxuICAgICAgICB2YXIgX21pbjIgPSBiYm94Lm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heDIgPSBiYm94Lm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgcmV0dXJuIF9taW5bMF0gPD0gX21pbjJbMF0gJiYgX21pblsxXSA8PSBfbWluMlsxXSAmJiBfbWluWzJdIDw9IF9taW4yWzJdXHJcbiAgICAgICAgICAgICYmIF9tYXhbMF0gPj0gX21heDJbMF0gJiYgX21heFsxXSA+PSBfbWF4MlsxXSAmJiBfbWF4WzJdID49IF9tYXgyWzJdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGNvbnRhaW4gcG9pbnQgZW50aXJlbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gcG9pbnRcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGNvbnRhaW5Qb2ludDogZnVuY3Rpb24gKHApIHtcclxuICAgICAgICB2YXIgX21pbiA9IHRoaXMubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBfbWF4ID0gdGhpcy5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgIHZhciBfcCA9IHAuYXJyYXk7XHJcblxyXG4gICAgICAgIHJldHVybiBfbWluWzBdIDw9IF9wWzBdICYmIF9taW5bMV0gPD0gX3BbMV0gJiYgX21pblsyXSA8PSBfcFsyXVxyXG4gICAgICAgICAgICAmJiBfbWF4WzBdID49IF9wWzBdICYmIF9tYXhbMV0gPj0gX3BbMV0gJiYgX21heFsyXSA+PSBfcFsyXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBib3VuZGluZyBib3ggaXMgZmluaXRlXHJcbiAgICAgKi9cclxuICAgIGlzRmluaXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF9taW4gPSB0aGlzLm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heCA9IHRoaXMubWF4LmFycmF5O1xyXG4gICAgICAgIHJldHVybiBpc0Zpbml0ZShfbWluWzBdKSAmJiBpc0Zpbml0ZShfbWluWzFdKSAmJiBpc0Zpbml0ZShfbWluWzJdKVxyXG4gICAgICAgICAgICAmJiBpc0Zpbml0ZShfbWF4WzBdKSAmJiBpc0Zpbml0ZShfbWF4WzFdKSAmJiBpc0Zpbml0ZShfbWF4WzJdKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhbiBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCB0byB0aGUgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBhcHBseVRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG4gICAgICAgIHRoaXMudHJhbnNmb3JtRnJvbSh0aGlzLCBtYXRyaXgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBmcm9tIGFub3RoZXIgYm91bmRpbmcgYm94IGFuZCBhbiBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeC5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5Cb3VuZGluZ0JveH0gc291cmNlXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gbWF0cml4XHJcbiAgICAgKi9cclxuICAgIHRyYW5zZm9ybUZyb206IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gaHR0cDovL2Rldi50aGVvbWFkZXIuY29tL3RyYW5zZm9ybS1ib3VuZGluZy1ib3hlcy9cclxuICAgICAgICB2YXIgeGEgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB4YiA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHlhID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgeWIgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB6YSA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHpiID0gdmVjMy5jcmVhdGUoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UsIG1hdHJpeCkge1xyXG4gICAgICAgICAgICB2YXIgbWluID0gc291cmNlLm1pbi5hcnJheTtcclxuICAgICAgICAgICAgdmFyIG1heCA9IHNvdXJjZS5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgICAgICB2YXIgbSA9IG1hdHJpeC5hcnJheTtcclxuXHJcbiAgICAgICAgICAgIHhhWzBdID0gbVswXSAqIG1pblswXTsgeGFbMV0gPSBtWzFdICogbWluWzBdOyB4YVsyXSA9IG1bMl0gKiBtaW5bMF07XHJcbiAgICAgICAgICAgIHhiWzBdID0gbVswXSAqIG1heFswXTsgeGJbMV0gPSBtWzFdICogbWF4WzBdOyB4YlsyXSA9IG1bMl0gKiBtYXhbMF07XHJcblxyXG4gICAgICAgICAgICB5YVswXSA9IG1bNF0gKiBtaW5bMV07IHlhWzFdID0gbVs1XSAqIG1pblsxXTsgeWFbMl0gPSBtWzZdICogbWluWzFdO1xyXG4gICAgICAgICAgICB5YlswXSA9IG1bNF0gKiBtYXhbMV07IHliWzFdID0gbVs1XSAqIG1heFsxXTsgeWJbMl0gPSBtWzZdICogbWF4WzFdO1xyXG5cclxuICAgICAgICAgICAgemFbMF0gPSBtWzhdICogbWluWzJdOyB6YVsxXSA9IG1bOV0gKiBtaW5bMl07IHphWzJdID0gbVsxMF0gKiBtaW5bMl07XHJcbiAgICAgICAgICAgIHpiWzBdID0gbVs4XSAqIG1heFsyXTsgemJbMV0gPSBtWzldICogbWF4WzJdOyB6YlsyXSA9IG1bMTBdICogbWF4WzJdO1xyXG5cclxuICAgICAgICAgICAgbWluID0gdGhpcy5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgIG1heCA9IHRoaXMubWF4LmFycmF5O1xyXG4gICAgICAgICAgICBtaW5bMF0gPSBNYXRoLm1pbih4YVswXSwgeGJbMF0pICsgTWF0aC5taW4oeWFbMF0sIHliWzBdKSArIE1hdGgubWluKHphWzBdLCB6YlswXSkgKyBtWzEyXTtcclxuICAgICAgICAgICAgbWluWzFdID0gTWF0aC5taW4oeGFbMV0sIHhiWzFdKSArIE1hdGgubWluKHlhWzFdLCB5YlsxXSkgKyBNYXRoLm1pbih6YVsxXSwgemJbMV0pICsgbVsxM107XHJcbiAgICAgICAgICAgIG1pblsyXSA9IE1hdGgubWluKHhhWzJdLCB4YlsyXSkgKyBNYXRoLm1pbih5YVsyXSwgeWJbMl0pICsgTWF0aC5taW4oemFbMl0sIHpiWzJdKSArIG1bMTRdO1xyXG5cclxuICAgICAgICAgICAgbWF4WzBdID0gTWF0aC5tYXgoeGFbMF0sIHhiWzBdKSArIE1hdGgubWF4KHlhWzBdLCB5YlswXSkgKyBNYXRoLm1heCh6YVswXSwgemJbMF0pICsgbVsxMl07XHJcbiAgICAgICAgICAgIG1heFsxXSA9IE1hdGgubWF4KHhhWzFdLCB4YlsxXSkgKyBNYXRoLm1heCh5YVsxXSwgeWJbMV0pICsgTWF0aC5tYXgoemFbMV0sIHpiWzFdKSArIG1bMTNdO1xyXG4gICAgICAgICAgICBtYXhbMl0gPSBNYXRoLm1heCh4YVsyXSwgeGJbMl0pICsgTWF0aC5tYXgoeWFbMl0sIHliWzJdKSArIE1hdGgubWF4KHphWzJdLCB6YlsyXSkgKyBtWzE0XTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubWluLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubWF4Ll9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IGEgcHJvamVjdGlvbiBtYXRyaXggdG8gdGhlIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtYXRyaXhcclxuICAgICAqL1xyXG4gICAgYXBwbHlQcm9qZWN0aW9uOiBmdW5jdGlvbiAobWF0cml4KSB7XHJcbiAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBtYXggPSB0aGlzLm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgdmFyIG0gPSBtYXRyaXguYXJyYXk7XHJcbiAgICAgICAgLy8gbWluIGluIG1pbiB6XHJcbiAgICAgICAgdmFyIHYxMCA9IG1pblswXTtcclxuICAgICAgICB2YXIgdjExID0gbWluWzFdO1xyXG4gICAgICAgIHZhciB2MTIgPSBtaW5bMl07XHJcbiAgICAgICAgLy8gbWF4IGluIG1pbiB6XHJcbiAgICAgICAgdmFyIHYyMCA9IG1heFswXTtcclxuICAgICAgICB2YXIgdjIxID0gbWF4WzFdO1xyXG4gICAgICAgIHZhciB2MjIgPSBtaW5bMl07XHJcbiAgICAgICAgLy8gbWF4IGluIG1heCB6XHJcbiAgICAgICAgdmFyIHYzMCA9IG1heFswXTtcclxuICAgICAgICB2YXIgdjMxID0gbWF4WzFdO1xyXG4gICAgICAgIHZhciB2MzIgPSBtYXhbMl07XHJcblxyXG4gICAgICAgIGlmIChtWzE1XSA9PT0gMSkgeyAgLy8gT3J0aG9ncmFwaGljIHByb2plY3Rpb25cclxuICAgICAgICAgICAgbWluWzBdID0gbVswXSAqIHYxMCArIG1bMTJdO1xyXG4gICAgICAgICAgICBtaW5bMV0gPSBtWzVdICogdjExICsgbVsxM107XHJcbiAgICAgICAgICAgIG1heFsyXSA9IG1bMTBdICogdjEyICsgbVsxNF07XHJcblxyXG4gICAgICAgICAgICBtYXhbMF0gPSBtWzBdICogdjMwICsgbVsxMl07XHJcbiAgICAgICAgICAgIG1heFsxXSA9IG1bNV0gKiB2MzEgKyBtWzEzXTtcclxuICAgICAgICAgICAgbWluWzJdID0gbVsxMF0gKiB2MzIgKyBtWzE0XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciB3ID0gLTEgLyB2MTI7XHJcbiAgICAgICAgICAgIG1pblswXSA9IG1bMF0gKiB2MTAgKiB3O1xyXG4gICAgICAgICAgICBtaW5bMV0gPSBtWzVdICogdjExICogdztcclxuICAgICAgICAgICAgbWF4WzJdID0gKG1bMTBdICogdjEyICsgbVsxNF0pICogdztcclxuXHJcbiAgICAgICAgICAgIHcgPSAtMSAvIHYyMjtcclxuICAgICAgICAgICAgbWF4WzBdID0gbVswXSAqIHYyMCAqIHc7XHJcbiAgICAgICAgICAgIG1heFsxXSA9IG1bNV0gKiB2MjEgKiB3O1xyXG5cclxuICAgICAgICAgICAgdyA9IC0xIC8gdjMyO1xyXG4gICAgICAgICAgICBtaW5bMl0gPSAobVsxMF0gKiB2MzIgKyBtWzE0XSkgKiB3O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubWF4Ll9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVWZXJ0aWNlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XHJcbiAgICAgICAgaWYgKCF2ZXJ0aWNlcykge1xyXG4gICAgICAgICAgICAvLyBDdWJlIHZlcnRpY2VzXHJcbiAgICAgICAgICAgIHZlcnRpY2VzID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNlc1tpXSA9IHZlYzMuZnJvbVZhbHVlcygwLCAwLCAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIEVpZ2h0IGNvb3JkcyBvZiBib3VuZGluZyBib3hcclxuICAgICAgICAgICAgICogQHR5cGUge0Zsb2F0MzJBcnJheVtdfVxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbWluID0gdGhpcy5taW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4LmFycmF5O1xyXG4gICAgICAgIC8vLS0tIG1pbiB6XHJcbiAgICAgICAgLy8gbWluIHhcclxuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzBdLCBtaW5bMF0sIG1pblsxXSwgbWluWzJdKTtcclxuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzFdLCBtaW5bMF0sIG1heFsxXSwgbWluWzJdKTtcclxuICAgICAgICAvLyBtYXggeFxyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbMl0sIG1heFswXSwgbWluWzFdLCBtaW5bMl0pO1xyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbM10sIG1heFswXSwgbWF4WzFdLCBtaW5bMl0pO1xyXG5cclxuICAgICAgICAvLy0tIG1heCB6XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s0XSwgbWluWzBdLCBtaW5bMV0sIG1heFsyXSk7XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s1XSwgbWluWzBdLCBtYXhbMV0sIG1heFsyXSk7XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s2XSwgbWF4WzBdLCBtaW5bMV0sIG1heFsyXSk7XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s3XSwgbWF4WzBdLCBtYXhbMV0sIG1heFsyXSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29weSB2YWx1ZXMgZnJvbSBhbm90aGVyIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5Cb3VuZGluZ0JveH0gYmJveFxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbiAoYmJveCkge1xyXG4gICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbjtcclxuICAgICAgICB2YXIgbWF4ID0gdGhpcy5tYXg7XHJcbiAgICAgICAgdmVjM0NvcHkobWluLmFycmF5LCBiYm94Lm1pbi5hcnJheSk7XHJcbiAgICAgICAgdmVjM0NvcHkobWF4LmFycmF5LCBiYm94Lm1heC5hcnJheSk7XHJcbiAgICAgICAgbWluLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LkJvdW5kaW5nQm94fVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIGJvdW5kaW5nQm94LmNvcHkodGhpcyk7XHJcbiAgICAgICAgcmV0dXJuIGJvdW5kaW5nQm94O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQm91bmRpbmdCb3g7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgUXVhdGVybmlvbiBmcm9tICcuL21hdGgvUXVhdGVybmlvbic7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4vbWF0aC9NYXRyaXg0JztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcblxyXG52YXIgbmFtZUlkID0gMDtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5Ob2RlXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgTm9kZSA9IEJhc2UuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5Ob2RlIyAqL3tcclxuICAgIC8qKlxyXG4gICAgICogU2NlbmUgbm9kZSBuYW1lXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICBuYW1lOiAnJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBvc2l0aW9uIHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgbm9kZS4gYWthIHRyYW5zbGF0aW9uLlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgcG9zaXRpb246IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGlvbiByZWxhdGl2ZSB0byBpdHMgcGFyZW50IG5vZGUuIFJlcHJlc2VudGVkIGJ5IGEgcXVhdGVybmlvblxyXG4gICAgICogQHR5cGUge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgcm90YXRpb246IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSByZWxhdGl2ZSB0byBpdHMgcGFyZW50IG5vZGVcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggcmVsYXRpdmUgdG8gaXRzIHJvb3Qgc2NlbmUuXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICB3b3JsZFRyYW5zZm9ybTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFmZmluZSB0cmFuc2Zvcm0gbWF0cml4IHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgbm9kZS5cclxuICAgICAqIENvbXBvc2l0ZWQgd2l0aCBwb3NpdGlvbiwgcm90YXRpb24gYW5kIHNjYWxlLlxyXG4gICAgICogQHR5cGUge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgbG9jYWxUcmFuc2Zvcm06IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgbG9jYWwgdHJhbnNmb3JtIGlzIHVwZGF0ZSBmcm9tIFNSVChzY2FsZSwgcm90YXRpb24sIHRyYW5zbGF0aW9uLCB3aGljaCBpcyBwb3NpdGlvbiBoZXJlKSBlYWNoIGZyYW1lXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgYXV0b1VwZGF0ZUxvY2FsVHJhbnNmb3JtOiB0cnVlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFyZW50IG9mIGN1cnJlbnQgc2NlbmUgbm9kZVxyXG4gICAgICogQHR5cGUgez9jbGF5Lk5vZGV9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfcGFyZW50OiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcm9vdCBzY2VuZSBtb3VudGVkLiBOdWxsIGlmIGl0IGlzIGEgaXNvbGF0ZWQgbm9kZVxyXG4gICAgICogQHR5cGUgez9jbGF5LlNjZW5lfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX3NjZW5lOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9uZWVkc1VwZGF0ZVdvcmxkVHJhbnNmb3JtOiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9pbkl0ZXJhdGluZzogZmFsc2UsXHJcblxyXG4gICAgLy8gRGVwdGggZm9yIHRyYW5zcGFyZW50IGxpc3Qgc29ydGluZ1xyXG4gICAgX19kZXB0aDogMFxyXG5cclxufSwgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gKHRoaXMudHlwZSB8fCAnTk9ERScpICsgJ18nICsgKG5hbWVJZCsrKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMucG9zaXRpb24pIHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5yb3RhdGlvbikge1xyXG4gICAgICAgIHRoaXMucm90YXRpb24gPSBuZXcgUXVhdGVybmlvbigpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnNjYWxlKSB7XHJcbiAgICAgICAgdGhpcy5zY2FsZSA9IG5ldyBWZWN0b3IzKDEsIDEsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgdGhpcy5sb2NhbFRyYW5zZm9ybSA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4gICAgdGhpcy5fY2hpbGRyZW4gPSBbXTtcclxuXHJcbn0sXHJcbi8qKkBsZW5kcyBjbGF5Lk5vZGUucHJvdG90eXBlLiAqL1xyXG57XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmVjdG9yM31cclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICB0YXJnZXQ6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIElmIG5vZGUgYW5kIGl0cyBjaGlscmVuIGludmlzaWJsZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgaW52aXNpYmxlOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIE5vZGUgaXMgYSBza2lubmVkIG1lc2hcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzU2tpbm5lZE1lc2g6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhIHJlbmRlcmFibGUgc2NlbmUgbm9kZSwgbGlrZSBNZXNoIGFuZCBQYXJ0aWNsZVN5c3RlbVxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNSZW5kZXJhYmxlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgbmFtZSBvZiB0aGUgc2NlbmUgbm9kZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqL1xyXG4gICAgc2V0TmFtZTogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLl9zY2VuZTtcclxuICAgICAgICBpZiAoc2NlbmUpIHtcclxuICAgICAgICAgICAgdmFyIG5vZGVSZXBvc2l0b3J5ID0gc2NlbmUuX25vZGVSZXBvc2l0b3J5O1xyXG4gICAgICAgICAgICBkZWxldGUgbm9kZVJlcG9zaXRvcnlbdGhpcy5uYW1lXTtcclxuICAgICAgICAgICAgbm9kZVJlcG9zaXRvcnlbbmFtZV0gPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBhIGNoaWxkIG5vZGVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBub2RlXHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICB2YXIgb3JpZ2luYWxQYXJlbnQgPSBub2RlLl9wYXJlbnQ7XHJcbiAgICAgICAgaWYgKG9yaWdpbmFsUGFyZW50ID09PSB0aGlzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9yaWdpbmFsUGFyZW50KSB7XHJcbiAgICAgICAgICAgIG9yaWdpbmFsUGFyZW50LnJlbW92ZShub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbm9kZS5fcGFyZW50ID0gdGhpcztcclxuICAgICAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKG5vZGUpO1xyXG5cclxuICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLl9zY2VuZTtcclxuICAgICAgICBpZiAoc2NlbmUgJiYgc2NlbmUgIT09IG5vZGUuc2NlbmUpIHtcclxuICAgICAgICAgICAgbm9kZS50cmF2ZXJzZSh0aGlzLl9hZGRTZWxmVG9TY2VuZSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1hcmsgY2hpbGRyZW4gbmVlZHMgdXBkYXRlIHRyYW5zZm9ybVxyXG4gICAgICAgIC8vIEluIGNhc2UgY2hpbGQgYXJlIHJlbW92ZSBhbmQgYWRkZWQgYWdhaW4gYWZ0ZXIgcGFyZW50IG1vdmVkXHJcbiAgICAgICAgbm9kZS5fbmVlZHNVcGRhdGVXb3JsZFRyYW5zZm9ybSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIHRoZSBnaXZlbiBjaGlsZCBzY2VuZSBub2RlXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxyXG4gICAgICovXHJcbiAgICByZW1vdmU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcbiAgICAgICAgdmFyIGlkeCA9IGNoaWxkcmVuLmluZGV4T2Yobm9kZSk7XHJcbiAgICAgICAgaWYgKGlkeCA8IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgbm9kZS5fcGFyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3NjZW5lKSB7XHJcbiAgICAgICAgICAgIG5vZGUudHJhdmVyc2UodGhpcy5fcmVtb3ZlU2VsZkZyb21TY2VuZSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhbGwgY2hpbGRyZW5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcblxyXG4gICAgICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGNoaWxkcmVuLmxlbmd0aDsgaWR4KyspIHtcclxuICAgICAgICAgICAgY2hpbGRyZW5baWR4XS5fcGFyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zY2VuZSkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5baWR4XS50cmF2ZXJzZSh0aGlzLl9yZW1vdmVTZWxmRnJvbVNjZW5lLCB0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fY2hpbGRyZW4gPSBbXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIHNjZW5lIG1vdW50ZWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuU2NlbmV9XHJcbiAgICAgKi9cclxuICAgIGdldFNjZW5lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NjZW5lO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBwYXJlbnQgbm9kZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5TY2VuZX1cclxuICAgICAqL1xyXG4gICAgZ2V0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcclxuICAgIH0sXHJcblxyXG4gICAgX3JlbW92ZVNlbGZGcm9tU2NlbmU6IGZ1bmN0aW9uIChkZXNjZW5kYW50KSB7XHJcbiAgICAgICAgZGVzY2VuZGFudC5fc2NlbmUucmVtb3ZlRnJvbVNjZW5lKGRlc2NlbmRhbnQpO1xyXG4gICAgICAgIGRlc2NlbmRhbnQuX3NjZW5lID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgX2FkZFNlbGZUb1NjZW5lOiBmdW5jdGlvbiAoZGVzY2VuZGFudCkge1xyXG4gICAgICAgIHRoaXMuX3NjZW5lLmFkZFRvU2NlbmUoZGVzY2VuZGFudCk7XHJcbiAgICAgICAgZGVzY2VuZGFudC5fc2NlbmUgPSB0aGlzLl9zY2VuZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhbmNlc3RvciBvZiB0aGUgZ2l2ZW4gc2NlbmUgbm9kZVxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk5vZGV9IG5vZGVcclxuICAgICAqL1xyXG4gICAgaXNBbmNlc3RvcjogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICB2YXIgcGFyZW50ID0gbm9kZS5fcGFyZW50O1xyXG4gICAgICAgIHdoaWxlKHBhcmVudCkge1xyXG4gICAgICAgICAgICBpZiAocGFyZW50ID09PSB0aGlzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQuX3BhcmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhIG5ldyBjcmVhdGVkIGFycmF5IG9mIGFsbCBjaGlsZHJlbiBub2Rlc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlW119XHJcbiAgICAgKi9cclxuICAgIGNoaWxkcmVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuLnNsaWNlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGNoaWxkIHNjZW5lIG5vZGUgYXQgZ2l2ZW4gaW5kZXguXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XHJcbiAgICAgKi9cclxuICAgIGNoaWxkQXQ6IGZ1bmN0aW9uIChpZHgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW5baWR4XTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZmlyc3QgY2hpbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2hpbGRCeU5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0ubmFtZSA9PT0gbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBmaXJzdCBkZXNjZW5kYW50IGhhdmUgdGhlIGdpdmVuIG5hbWVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XHJcbiAgICAgKi9cclxuICAgIGdldERlc2NlbmRhbnRCeU5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkLm5hbWUgPT09IG5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXMgPSBjaGlsZC5nZXREZXNjZW5kYW50QnlOYW1lKG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUXVlcnkgZGVzY2VuZGFudCBub2RlIGJ5IHBhdGhcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogIG5vZGUucXVlcnlOb2RlKCdyb290L3BhcmVudC9jaGlsZCcpO1xyXG4gICAgICovXHJcbiAgICBxdWVyeU5vZGU6IGZ1bmN0aW9uIChwYXRoKSB7XHJcbiAgICAgICAgaWYgKCFwYXRoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETyBOYW1lIGhhdmUgc2xhc2ggP1xyXG4gICAgICAgIHZhciBwYXRoQXJyID0gcGF0aC5zcGxpdCgnLycpO1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhBcnIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSBwYXRoQXJyW2ldO1xyXG4gICAgICAgICAgICAvLyBTa2lwIGVtcHR5XHJcbiAgICAgICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IGN1cnJlbnQuX2NoaWxkcmVuO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltqXTtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5uYW1lID09PSBuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBFYXJseSByZXR1cm4gaWYgbm90IGZvdW5kXHJcbiAgICAgICAgICAgIGlmICghZm91bmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHF1ZXJ5IHBhdGgsIHJlbGF0aXZlIHRvIHJvb3ROb2RlKGRlZmF1bHQgaXMgc2NlbmUpXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3Jvb3ROb2RlXVxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICBnZXRQYXRoOiBmdW5jdGlvbiAocm9vdE5vZGUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJy8nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLl9wYXJlbnQ7XHJcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLm5hbWU7XHJcbiAgICAgICAgd2hpbGUgKGN1cnJlbnQuX3BhcmVudCkge1xyXG4gICAgICAgICAgICBwYXRoID0gY3VycmVudC5uYW1lICsgJy8nICsgcGF0aDtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnQuX3BhcmVudCA9PSByb290Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuX3BhcmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFjdXJyZW50Ll9wYXJlbnQgJiYgcm9vdE5vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlcHRoIGZpcnN0IHRyYXZlcnNlIGFsbCBpdHMgZGVzY2VuZGFudCBzY2VuZSBub2Rlcy5cclxuICAgICAqXHJcbiAgICAgKiAqKldBUk4qKiBEb24ndCBkbyBgYWRkYCwgYHJlbW92ZWAgb3BlcmF0aW9uIGluIHRoZSBjYWxsYmFjayBkdXJpbmcgdHJhdmVyc2UuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAgICogQHBhcmFtIHtOb2RlfSBbY29udGV4dF1cclxuICAgICAqL1xyXG4gICAgdHJhdmVyc2U6IGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4dCkge1xyXG4gICAgICAgIGNhbGxiYWNrLmNhbGwoY29udGV4dCwgdGhpcyk7XHJcbiAgICAgICAgdmFyIF9jaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IF9jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBfY2hpbGRyZW5baV0udHJhdmVyc2UoY2FsbGJhY2ssIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmF2ZXJzZSBhbGwgY2hpbGRyZW4gbm9kZXMuXHJcbiAgICAgKlxyXG4gICAgICogKipXQVJOKiogRE9OJ1QgZG8gYGFkZGAsIGByZW1vdmVgIG9wZXJhdGlvbiBpbiB0aGUgY2FsbGJhY2sgZHVyaW5nIGl0ZXJhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAgICogQHBhcmFtIHtOb2RlfSBbY29udGV4dF1cclxuICAgICAqL1xyXG4gICAgZWFjaENoaWxkOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNvbnRleHQpIHtcclxuICAgICAgICB2YXIgX2NoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcbiAgICAgICAgZm9yKHZhciBpID0gMCwgbGVuID0gX2NoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IF9jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgY2FsbGJhY2suY2FsbChjb250ZXh0LCBjaGlsZCwgaSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgbG9jYWwgdHJhbnNmb3JtIGFuZCBkZWNvbXBvc2UgdG8gU1JUXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gbWF0cml4XHJcbiAgICAgKi9cclxuICAgIHNldExvY2FsVHJhbnNmb3JtOiBmdW5jdGlvbiAobWF0cml4KSB7XHJcbiAgICAgICAgbWF0NC5jb3B5KHRoaXMubG9jYWxUcmFuc2Zvcm0uYXJyYXksIG1hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5kZWNvbXBvc2VMb2NhbFRyYW5zZm9ybSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlY29tcG9zZSB0aGUgbG9jYWwgdHJhbnNmb3JtIHRvIFNSVFxyXG4gICAgICovXHJcbiAgICBkZWNvbXBvc2VMb2NhbFRyYW5zZm9ybTogZnVuY3Rpb24gKGtlZXBTY2FsZSkge1xyXG4gICAgICAgIHZhciBzY2FsZSA9ICFrZWVwU2NhbGUgPyB0aGlzLnNjYWxlOiBudWxsO1xyXG4gICAgICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0uZGVjb21wb3NlTWF0cml4KHNjYWxlLCB0aGlzLnJvdGF0aW9uLCB0aGlzLnBvc2l0aW9uKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHdvcmxkIHRyYW5zZm9ybSBhbmQgZGVjb21wb3NlIHRvIFNSVFxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBzZXRXb3JsZFRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG4gICAgICAgIG1hdDQuY29weSh0aGlzLndvcmxkVHJhbnNmb3JtLmFycmF5LCBtYXRyaXguYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuZGVjb21wb3NlV29ybGRUcmFuc2Zvcm0oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNvbXBvc2UgdGhlIHdvcmxkIHRyYW5zZm9ybSB0byBTUlRcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICovXHJcbiAgICBkZWNvbXBvc2VXb3JsZFRyYW5zZm9ybTogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIHRtcCA9IG1hdDQuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoa2VlcFNjYWxlKSB7XHJcbiAgICAgICAgICAgIHZhciBsb2NhbFRyYW5zZm9ybSA9IHRoaXMubG9jYWxUcmFuc2Zvcm07XHJcbiAgICAgICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XHJcbiAgICAgICAgICAgIC8vIEFzc3VtZSB3b3JsZCB0cmFuc2Zvcm0gaXMgdXBkYXRlZFxyXG4gICAgICAgICAgICBpZiAodGhpcy5fcGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBtYXQ0LmludmVydCh0bXAsIHRoaXMuX3BhcmVudC53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KGxvY2FsVHJhbnNmb3JtLmFycmF5LCB0bXAsIHdvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1hdDQuY29weShsb2NhbFRyYW5zZm9ybS5hcnJheSwgd29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBzY2FsZSA9ICFrZWVwU2NhbGUgPyB0aGlzLnNjYWxlOiBudWxsO1xyXG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5kZWNvbXBvc2VNYXRyaXgoc2NhbGUsIHRoaXMucm90YXRpb24sIHRoaXMucG9zaXRpb24pO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIHRyYW5zZm9ybU5lZWRzVXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24uX2RpcnR5XHJcbiAgICAgICAgICAgIHx8IHRoaXMucm90YXRpb24uX2RpcnR5XHJcbiAgICAgICAgICAgIHx8IHRoaXMuc2NhbGUuX2RpcnR5O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBsb2NhbCB0cmFuc2Zvcm0gZnJvbSBTUlRcclxuICAgICAqIE5vdGljZSB0aGF0IGxvY2FsIHRyYW5zZm9ybSB3aWxsIG5vdCBiZSB1cGRhdGVkIGlmIF9kaXJ0eSBtYXJrIG9mIHBvc2l0aW9uLCByb3RhdGlvbiwgc2NhbGUgaXMgYWxsIGZhbHNlXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUxvY2FsVHJhbnNmb3JtOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgcm90YXRpb24gPSB0aGlzLnJvdGF0aW9uO1xyXG4gICAgICAgIHZhciBzY2FsZSA9IHRoaXMuc2NhbGU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybU5lZWRzVXBkYXRlKCkpIHtcclxuICAgICAgICAgICAgdmFyIG0gPSB0aGlzLmxvY2FsVHJhbnNmb3JtLmFycmF5O1xyXG5cclxuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIG9yZGVyLCBzY2FsZS0+cm90YXRpb24tPnBvc2l0aW9uXHJcbiAgICAgICAgICAgIG1hdDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24obSwgcm90YXRpb24uYXJyYXksIHBvc2l0aW9uLmFycmF5KTtcclxuXHJcbiAgICAgICAgICAgIG1hdDQuc2NhbGUobSwgbSwgc2NhbGUuYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgcm90YXRpb24uX2RpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNjYWxlLl9kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBwb3NpdGlvbi5fZGlydHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgd29ybGQgdHJhbnNmb3JtLCBhc3N1bWUgaXRzIHBhcmVudCB3b3JsZCB0cmFuc2Zvcm0gaGF2ZSBiZWVuIHVwZGF0ZWRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF91cGRhdGVXb3JsZFRyYW5zZm9ybVRvcERvd246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbG9jYWxUcmFuc2Zvcm0gPSB0aGlzLmxvY2FsVHJhbnNmb3JtLmFycmF5O1xyXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0uYXJyYXk7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5QWZmaW5lKFxyXG4gICAgICAgICAgICAgICAgd29ybGRUcmFuc2Zvcm0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnQud29ybGRUcmFuc2Zvcm0uYXJyYXksXHJcbiAgICAgICAgICAgICAgICBsb2NhbFRyYW5zZm9ybVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWF0NC5jb3B5KHdvcmxkVHJhbnNmb3JtLCBsb2NhbFRyYW5zZm9ybSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB3b3JsZCB0cmFuc2Zvcm0gYmVmb3JlIHdob2xlIHNjZW5lIGlzIHVwZGF0ZWQuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVdvcmxkVHJhbnNmb3JtOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gRmluZCB0aGUgcm9vdCBub2RlIHdoaWNoIHRyYW5zZm9ybSBuZWVkcyB1cGRhdGU7XHJcbiAgICAgICAgdmFyIHJvb3ROb2RlSXNEaXJ0eSA9IHRoaXM7XHJcbiAgICAgICAgd2hpbGUgKHJvb3ROb2RlSXNEaXJ0eSAmJiByb290Tm9kZUlzRGlydHkuZ2V0UGFyZW50KClcclxuICAgICAgICAgICAgJiYgcm9vdE5vZGVJc0RpcnR5LmdldFBhcmVudCgpLnRyYW5zZm9ybU5lZWRzVXBkYXRlKClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcm9vdE5vZGVJc0RpcnR5ID0gcm9vdE5vZGVJc0RpcnR5LmdldFBhcmVudCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb290Tm9kZUlzRGlydHkudXBkYXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIGxvY2FsIHRyYW5zZm9ybSBhbmQgd29ybGQgdHJhbnNmb3JtIHJlY3Vyc2l2ZWx5XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlVXBkYXRlV29ybGRcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZm9yY2VVcGRhdGVXb3JsZCkge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9VcGRhdGVMb2NhbFRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gaXMgbWFudWFsbHkgc2V0dGVkXHJcbiAgICAgICAgICAgIGZvcmNlVXBkYXRlV29ybGQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZvcmNlVXBkYXRlV29ybGQgfHwgdGhpcy5fbmVlZHNVcGRhdGVXb3JsZFRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVXb3JsZFRyYW5zZm9ybVRvcERvd24oKTtcclxuICAgICAgICAgICAgZm9yY2VVcGRhdGVXb3JsZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0gPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZShmb3JjZVVwZGF0ZVdvcmxkKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGJvdW5kaW5nIGJveCBvZiBub2RlXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW2ZpbHRlcl1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuQm91bmRpbmdCb3h9IFtvdXRdXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LkJvdW5kaW5nQm94fVxyXG4gICAgICovXHJcbiAgICAvLyBUT0RPIFNraW5uaW5nXHJcbiAgICBnZXRCb3VuZGluZ0JveDogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmdW5jdGlvbiBkZWZhdWx0RmlsdGVyIChlbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIWVsLmludmlzaWJsZSAmJiBlbC5nZW9tZXRyeTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHRtcEJCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB2YXIgdG1wTWF0NCA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgdmFyIGludldvcmxkVHJhbnNmb3JtID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZpbHRlciwgb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG91dCB8fCBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICAgICAgZmlsdGVyID0gZmlsdGVyIHx8IGRlZmF1bHRGaWx0ZXI7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fcGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBNYXRyaXg0LmludmVydChpbnZXb3JsZFRyYW5zZm9ybSwgdGhpcy5fcGFyZW50LndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIE1hdHJpeDQuaWRlbnRpdHkoaW52V29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRyYXZlcnNlKGZ1bmN0aW9uIChtZXNoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWVzaC5nZW9tZXRyeSAmJiBtZXNoLmdlb21ldHJ5LmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG1wQkJveC5jb3B5KG1lc2guZ2VvbWV0cnkuYm91bmRpbmdCb3gpO1xyXG4gICAgICAgICAgICAgICAgICAgIE1hdHJpeDQubXVsdGlwbHkodG1wTWF0NCwgaW52V29ybGRUcmFuc2Zvcm0sIG1lc2gud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcEJCb3guYXBwbHlUcmFuc2Zvcm0odG1wTWF0NCk7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0LnVuaW9uKHRtcEJCb3gpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCB0aGlzLCBkZWZhdWx0RmlsdGVyKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgd29ybGQgcG9zaXRpb24sIGV4dHJhY3RlZCBmcm9tIHdvcmxkIHRyYW5zZm9ybVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBbb3V0XVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBnZXRXb3JsZFBvc2l0aW9uOiBmdW5jdGlvbiAob3V0KSB7XHJcbiAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybU5lZWRzVXBkYXRlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbSA9IHRoaXMud29ybGRUcmFuc2Zvcm0uYXJyYXk7XHJcbiAgICAgICAgaWYgKG91dCkge1xyXG4gICAgICAgICAgICB2YXIgYXJyID0gb3V0LmFycmF5O1xyXG4gICAgICAgICAgICBhcnJbMF0gPSBtWzEyXTtcclxuICAgICAgICAgICAgYXJyWzFdID0gbVsxM107XHJcbiAgICAgICAgICAgIGFyclsyXSA9IG1bMTRdO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKG1bMTJdLCBtWzEzXSwgbVsxNF0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBub2RlXHJcbiAgICAgKiBAcmV0dXJuIHtOb2RlfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBub2RlID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKTtcclxuXHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcblxyXG4gICAgICAgIG5vZGUuc2V0TmFtZSh0aGlzLm5hbWUpO1xyXG4gICAgICAgIG5vZGUucG9zaXRpb24uY29weSh0aGlzLnBvc2l0aW9uKTtcclxuICAgICAgICBub2RlLnJvdGF0aW9uLmNvcHkodGhpcy5yb3RhdGlvbik7XHJcbiAgICAgICAgbm9kZS5zY2FsZS5jb3B5KHRoaXMuc2NhbGUpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG5vZGUuYWRkKGNoaWxkcmVuW2ldLmNsb25lKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHRoZSBub2RlIGFyb3VuZCBhIGF4aXMgYnkgYW5nbGUgZGVncmVlcywgYXhpcyBwYXNzZXMgdGhyb3VnaCBwb2ludFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHBvaW50IENlbnRlciBwb2ludFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IGF4aXMgIENlbnRlciBheGlzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gICAgICAgYW5nbGUgUm90YXRpb24gYW5nbGVcclxuICAgICAqIEBzZWUgaHR0cDovL2RvY3MudW5pdHkzZC5jb20vRG9jdW1lbnRhdGlvbi9TY3JpcHRSZWZlcmVuY2UvVHJhbnNmb3JtLlJvdGF0ZUFyb3VuZC5odG1sXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqL1xyXG4gICAgcm90YXRlQXJvdW5kOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB2YXIgUlRNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuICAgICAgICAvLyBUT0RPIGltcHJvdmUgcGVyZm9ybWFuY2VcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHBvaW50LCBheGlzLCBhbmdsZSkge1xyXG5cclxuICAgICAgICAgICAgdi5jb3B5KHRoaXMucG9zaXRpb24pLnN1YnRyYWN0KHBvaW50KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBsb2NhbFRyYW5zZm9ybSA9IHRoaXMubG9jYWxUcmFuc2Zvcm07XHJcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLmlkZW50aXR5KCk7XHJcbiAgICAgICAgICAgIC8vIHBhcmVudCBub2RlXHJcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZShwb2ludCk7XHJcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLnJvdGF0ZShhbmdsZSwgYXhpcyk7XHJcblxyXG4gICAgICAgICAgICBSVE1hdHJpeC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbih0aGlzLnJvdGF0aW9uLCB2KTtcclxuICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm0ubXVsdGlwbHkoUlRNYXRyaXgpO1xyXG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5zY2FsZSh0aGlzLnNjYWxlKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGVjb21wb3NlTG9jYWxUcmFuc2Zvcm0oKTtcclxuICAgICAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGVXb3JsZFRyYW5zZm9ybSA9IHRydWU7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW3VwXVxyXG4gICAgICogQHNlZSBodHRwOi8vd3d3Lm9wZW5nbC5vcmcvc2RrL2RvY3MvbWFuMi94aHRtbC9nbHVMb29rQXQueG1sXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqL1xyXG4gICAgbG9va0F0OiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdXApIHtcclxuICAgICAgICAgICAgbS5sb29rQXQodGhpcy5wb3NpdGlvbiwgdGFyZ2V0LCB1cCB8fCB0aGlzLmxvY2FsVHJhbnNmb3JtLnkpLmludmVydCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNldExvY2FsVHJhbnNmb3JtKG0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKClcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBOb2RlO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcInZlYzMgY2FsY0FtYmllbnRTSExpZ2h0KGludCBpZHgsIHZlYzMgTikge1xcbiBpbnQgb2Zmc2V0ID0gOSAqIGlkeDtcXG4gcmV0dXJuIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzBdXFxuICsgYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbMV0gKiBOLnhcXG4gKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1syXSAqIE4ueVxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzNdICogTi56XFxuICsgYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbNF0gKiBOLnggKiBOLnpcXG4gKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1s1XSAqIE4ueiAqIE4ueVxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzZdICogTi55ICogTi54XFxuICsgYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbN10gKiAoMy4wICogTi56ICogTi56IC0gMS4wKVxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzhdICogKE4ueCAqIE4ueCAtIE4ueSAqIE4ueSk7XFxufVwiO1xyXG4iLCJpbXBvcnQgY2FsY0FtYmllbnRTSExpZ2h0RXNzbCBmcm9tICcuL2NhbGNBbWJpZW50U0hMaWdodC5nbHNsLmpzJztcclxuXHJcbnZhciB1bmlmb3JtVmVjM1ByZWZpeCA9ICd1bmlmb3JtIHZlYzMgJztcclxudmFyIHVuaWZvcm1GbG9hdFByZWZpeCA9ICd1bmlmb3JtIGZsb2F0ICc7XHJcbnZhciBleHBvcnRIZWFkZXJQcmVmaXggPSAnQGV4cG9ydCBjbGF5LmhlYWRlci4nO1xyXG52YXIgZXhwb3J0RW5kID0gJ0BlbmQnO1xyXG52YXIgdW5jb25maWd1cmFibGUgPSAnOnVuY29uZmlndXJhYmxlOyc7XHJcbmV4cG9ydCBkZWZhdWx0IFtcclxuICAgIGV4cG9ydEhlYWRlclByZWZpeCArICdkaXJlY3Rpb25hbF9saWdodCcsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdkaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9uW0RJUkVDVElPTkFMX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ2RpcmVjdGlvbmFsTGlnaHRDb2xvcltESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICBleHBvcnRFbmQsXHJcblxyXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ2FtYmllbnRfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnYW1iaWVudExpZ2h0Q29sb3JbQU1CSUVOVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICBleHBvcnRFbmQsXHJcblxyXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ2FtYmllbnRfc2hfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnYW1iaWVudFNITGlnaHRDb2xvcltBTUJJRU5UX1NIX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ2FtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzW0FNQklFTlRfU0hfTElHSFRfQ09VTlQgKiA5XScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIGNhbGNBbWJpZW50U0hMaWdodEVzc2wsXHJcbiAgICBleHBvcnRFbmQsXHJcblxyXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ2FtYmllbnRfY3ViZW1hcF9saWdodCcsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdhbWJpZW50Q3ViZW1hcExpZ2h0Q29sb3JbQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgICd1bmlmb3JtIHNhbXBsZXJDdWJlIGFtYmllbnRDdWJlbWFwTGlnaHRDdWJlbWFwW0FNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgYW1iaWVudEN1YmVtYXBMaWdodEJSREZMb29rdXBbQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIGV4cG9ydEVuZCxcclxuXHJcbiAgICBleHBvcnRIZWFkZXJQcmVmaXggKyAncG9pbnRfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAncG9pbnRMaWdodFBvc2l0aW9uW1BPSU5UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1GbG9hdFByZWZpeCArICdwb2ludExpZ2h0UmFuZ2VbUE9JTlRfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAncG9pbnRMaWdodENvbG9yW1BPSU5UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIGV4cG9ydEVuZCxcclxuXHJcbiAgICBleHBvcnRIZWFkZXJQcmVmaXggKyAnc3BvdF9saWdodCcsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdzcG90TGlnaHRQb3NpdGlvbltTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ3Nwb3RMaWdodERpcmVjdGlvbltTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1GbG9hdFByZWZpeCArICdzcG90TGlnaHRSYW5nZVtTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1GbG9hdFByZWZpeCArICdzcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lW1NQT1RfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgdW5pZm9ybUZsb2F0UHJlZml4ICsgJ3Nwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmVbU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAnc3BvdExpZ2h0RmFsbG9mZkZhY3RvcltTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ3Nwb3RMaWdodENvbG9yW1NQT1RfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgZXhwb3J0RW5kXHJcbl0uam9pbignXFxuJyk7XHJcbiIsImltcG9ydCBOb2RlIGZyb20gJy4vTm9kZSc7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi9TaGFkZXInO1xyXG5cclxuaW1wb3J0IGxpZ2h0U2hhZGVyIGZyb20gJy4vc2hhZGVyL3NvdXJjZS9oZWFkZXIvbGlnaHQnO1xyXG5TaGFkZXJbJ2ltcG9ydCddKGxpZ2h0U2hhZGVyKTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5MaWdodFxyXG4gKiBAZXh0ZW5kcyBjbGF5Lk5vZGVcclxuICovXHJcbnZhciBMaWdodCA9IE5vZGUuZXh0ZW5kKGZ1bmN0aW9uKCl7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LkxpZ2h0IyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTGlnaHQgUkdCIGNvbG9yXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcltdfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbG9yOiBbMSwgMSwgMV0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIExpZ2h0IGludGVuc2l0eVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW50ZW5zaXR5OiAxLjAsXHJcblxyXG4gICAgICAgIC8vIENvbmZpZyBmb3Igc2hhZG93IG1hcFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGxpZ2h0IGNhc3Qgc2hhZG93XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2FzdFNoYWRvdzogdHJ1ZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2hhZG93IG1hcCBzaXplXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzaGFkb3dSZXNvbHV0aW9uOiA1MTIsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIExpZ2h0IGdyb3VwLCBzaGFkZXIgd2l0aCBzYW1lIGBsaWdodEdyb3VwYCB3aWxsIGJlIGFmZmVjdGVkXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBPbmx5IHVzZWZ1bCBpbiBmb3J3YXJkIHJlbmRlcmluZ1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ3JvdXA6IDBcclxuICAgIH07XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5MaWdodC5wcm90b3R5cGUuICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogTGlnaHQgdHlwZVxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LkxpZ2h0I1xyXG4gICAgICovXHJcbiAgICB0eXBlOiAnJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTGlnaHR9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5MaWdodC5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBsaWdodCA9IE5vZGUucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICAgICAgbGlnaHQuY29sb3IgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmNvbG9yKTtcclxuICAgICAgICBsaWdodC5pbnRlbnNpdHkgPSB0aGlzLmludGVuc2l0eTtcclxuICAgICAgICBsaWdodC5jYXN0U2hhZG93ID0gdGhpcy5jYXN0U2hhZG93O1xyXG4gICAgICAgIGxpZ2h0LnNoYWRvd1Jlc29sdXRpb24gPSB0aGlzLnNoYWRvd1Jlc29sdXRpb247XHJcblxyXG4gICAgICAgIHJldHVybiBsaWdodDtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaWdodDtcclxuIiwiaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9WZWN0b3IzJztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0NCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5pbXBvcnQgdmVjNCBmcm9tICcuLi9nbG1hdHJpeC92ZWM0JztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuUGxhbmVcclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFtub3JtYWxdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZGlzdGFuY2VdXHJcbiAqL1xyXG52YXIgUGxhbmUgPSBmdW5jdGlvbihub3JtYWwsIGRpc3RhbmNlKSB7XHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbCBvZiB0aGUgcGxhbmVcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubm9ybWFsID0gbm9ybWFsIHx8IG5ldyBWZWN0b3IzKDAsIDEsIDApO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29uc3RhbnQgb2YgdGhlIHBsYW5lIGVxdWF0aW9uLCB1c2VkIGFzIGRpc3RhbmNlIHRvIHRoZSBvcmlnaW5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZGlzdGFuY2UgPSBkaXN0YW5jZSB8fCAwO1xyXG59O1xyXG5cclxuUGxhbmUucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBQbGFuZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGZyb20gYSBnaXZlbiBwb2ludCB0byB0aGUgcGxhbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gcG9pbnRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGlzdGFuY2VUb1BvaW50OiBmdW5jdGlvbihwb2ludCkge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLmRvdChwb2ludC5hcnJheSwgdGhpcy5ub3JtYWwuYXJyYXkpIC0gdGhpcy5kaXN0YW5jZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIHByb2plY3Rpb24gcG9pbnQgb24gdGhlIHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHBvaW50XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBwcm9qZWN0UG9pbnQ6IGZ1bmN0aW9uKHBvaW50LCBvdXQpIHtcclxuICAgICAgICBpZiAoIW91dCkge1xyXG4gICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZCA9IHRoaXMuZGlzdGFuY2VUb1BvaW50KHBvaW50KTtcclxuICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgcG9pbnQuYXJyYXksIHRoaXMubm9ybWFsLmFycmF5LCAtZCk7XHJcbiAgICAgICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWxpemUgdGhlIHBsYW5lJ3Mgbm9ybWFsIGFuZCBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGludkxlbiA9IDEgLyB2ZWMzLmxlbih0aGlzLm5vcm1hbC5hcnJheSk7XHJcbiAgICAgICAgdmVjMy5zY2FsZSh0aGlzLm5vcm1hbC5hcnJheSwgaW52TGVuKTtcclxuICAgICAgICB0aGlzLmRpc3RhbmNlICo9IGludkxlbjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgcGxhbmUgaW50ZXJzZWN0IGEgZnJ1c3R1bVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5GcnVzdHVtfSBGcnVzdHVtXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RGcnVzdHVtOiBmdW5jdGlvbihmcnVzdHVtKSB7XHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgYWxsIGNvb3JkcyBvZiBmcnVzdHVtIGlzIG9uIHBsYW5lIGFsbCB1bmRlciBwbGFuZVxyXG4gICAgICAgIHZhciBjb29yZHMgPSBmcnVzdHVtLnZlcnRpY2VzO1xyXG4gICAgICAgIHZhciBub3JtYWwgPSB0aGlzLm5vcm1hbC5hcnJheTtcclxuICAgICAgICB2YXIgb25QbGFuZSA9IHZlYzMuZG90KGNvb3Jkc1swXS5hcnJheSwgbm9ybWFsKSA+IHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCh2ZWMzLmRvdChjb29yZHNbaV0uYXJyYXksIG5vcm1hbCkgPiB0aGlzLmRpc3RhbmNlKSAhPSBvblBsYW5lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIHBsYW5lIGFuZCBhIGdpdmVuIGxpbmVcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHN0YXJ0IHN0YXJ0IHBvaW50IG9mIGxpbmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBlbmQgZW5kIHBvaW50IG9mIGxpbmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBbb3V0XVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RMaW5lOiAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHJkID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCwgb3V0KSB7XHJcbiAgICAgICAgICAgIHZhciBkMCA9IHRoaXMuZGlzdGFuY2VUb1BvaW50KHN0YXJ0KTtcclxuICAgICAgICAgICAgdmFyIGQxID0gdGhpcy5kaXN0YW5jZVRvUG9pbnQoZW5kKTtcclxuICAgICAgICAgICAgaWYgKChkMCA+IDAgJiYgZDEgPiAwKSB8fCAoZDAgPCAwICYmIGQxIDwgMCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFJheSBpbnRlcnNlY3Rpb25cclxuICAgICAgICAgICAgdmFyIHBuID0gdGhpcy5ub3JtYWwuYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBkID0gdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdmFyIHJvID0gc3RhcnQuYXJyYXk7XHJcbiAgICAgICAgICAgIC8vIGRpcmVjdGlvblxyXG4gICAgICAgICAgICB2ZWMzLnN1YihyZCwgZW5kLmFycmF5LCBzdGFydC5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHJkLCByZCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZGl2aWRlciA9IHZlYzMuZG90KHBuLCByZCk7XHJcbiAgICAgICAgICAgIC8vIHJheSBpcyBwYXJhbGxlbCB0byB0aGUgcGxhbmVcclxuICAgICAgICAgICAgaWYgKGRpdmlkZXIgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB0ID0gKHZlYzMuZG90KHBuLCBybykgLSBkKSAvIGRpdmlkZXI7XHJcbiAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBybywgcmQsIC10KTtcclxuICAgICAgICAgICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhbiBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCB0byBwbGFuZVxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGFwcGx5VHJhbnNmb3JtOiAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGludmVyc2VUcmFuc3Bvc2UgPSBtYXQ0LmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciBub3JtYWx2NCA9IHZlYzQuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHBvaW50djQgPSB2ZWM0LmNyZWF0ZSgpO1xyXG4gICAgICAgIHBvaW50djRbM10gPSAxO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihtNCkge1xyXG4gICAgICAgICAgICBtNCA9IG00LmFycmF5O1xyXG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gcG9pbnQgb24gcGxhbmVcclxuICAgICAgICAgICAgdmVjMy5zY2FsZShwb2ludHY0LCB0aGlzLm5vcm1hbC5hcnJheSwgdGhpcy5kaXN0YW5jZSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChwb2ludHY0LCBwb2ludHY0LCBtNCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzdGFuY2UgPSB2ZWMzLmRvdChwb2ludHY0LCB0aGlzLm5vcm1hbC5hcnJheSk7XHJcbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSBwbGFuZSBub3JtYWxcclxuICAgICAgICAgICAgbWF0NC5pbnZlcnQoaW52ZXJzZVRyYW5zcG9zZSwgbTQpO1xyXG4gICAgICAgICAgICBtYXQ0LnRyYW5zcG9zZShpbnZlcnNlVHJhbnNwb3NlLCBpbnZlcnNlVHJhbnNwb3NlKTtcclxuICAgICAgICAgICAgbm9ybWFsdjRbM10gPSAwO1xyXG4gICAgICAgICAgICB2ZWMzLmNvcHkobm9ybWFsdjQsIHRoaXMubm9ybWFsLmFycmF5KTtcclxuICAgICAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KG5vcm1hbHY0LCBub3JtYWx2NCwgaW52ZXJzZVRyYW5zcG9zZSk7XHJcbiAgICAgICAgICAgIHZlYzMuY29weSh0aGlzLm5vcm1hbC5hcnJheSwgbm9ybWFsdjQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGFub3RoZXIgcGxhbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gcGxhbmVcclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24ocGxhbmUpIHtcclxuICAgICAgICB2ZWMzLmNvcHkodGhpcy5ub3JtYWwuYXJyYXksIHBsYW5lLm5vcm1hbC5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5ub3JtYWwuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpc3RhbmNlID0gcGxhbmUuZGlzdGFuY2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgcGxhbmVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUGxhbmV9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgcGxhbmUgPSBuZXcgUGxhbmUoKTtcclxuICAgICAgICBwbGFuZS5jb3B5KHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBwbGFuZTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBsYW5lO1xyXG4iLCJpbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCBQbGFuZSBmcm9tICcuL1BsYW5lJztcclxuXHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxudmFyIHZlYzNTZXQgPSB2ZWMzLnNldDtcclxudmFyIHZlYzNDb3B5ID0gdmVjMy5jb3B5O1xyXG52YXIgdmVjM1RyYW5mb3JtTWF0NCA9IHZlYzMudHJhbnNmb3JtTWF0NDtcclxudmFyIG1hdGhNaW4gPSBNYXRoLm1pbjtcclxudmFyIG1hdGhNYXggPSBNYXRoLm1heDtcclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5GcnVzdHVtXHJcbiAqL1xyXG52YXIgRnJ1c3R1bSA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWlnaHQgcGxhbmVzIHRvIGVuY2xvc2UgdGhlIGZydXN0dW1cclxuICAgICAqIEB0eXBlIHtjbGF5LlBsYW5lW119XHJcbiAgICAgKi9cclxuICAgIHRoaXMucGxhbmVzID0gW107XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICB0aGlzLnBsYW5lcy5wdXNoKG5ldyBQbGFuZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEJvdW5kaW5nIGJveCBvZiBmcnVzdHVtXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAqL1xyXG4gICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWlnaHQgdmVydGljZXMgb2YgZnJ1c3R1bVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheVtdfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZlcnRpY2VzID0gW107XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xyXG4gICAgICAgIHRoaXMudmVydGljZXNbaV0gPSB2ZWMzLmZyb21WYWx1ZXMoMCwgMCwgMCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5GcnVzdHVtLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICAvLyBodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDEyMDUzMTIzMTAwNS9odHRwOi8vY3Jhenlqb2tlLmZyZWUuZnIvZG9jLzNEL3BsYW5lJTIwZXh0cmFjdGlvbi5wZGZcclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZydXN0dW0gZnJvbSBhIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gcHJvamVjdGlvbk1hdHJpeFxyXG4gICAgICovXHJcbiAgICBzZXRGcm9tUHJvamVjdGlvbjogZnVuY3Rpb24ocHJvamVjdGlvbk1hdHJpeCkge1xyXG5cclxuICAgICAgICB2YXIgcGxhbmVzID0gdGhpcy5wbGFuZXM7XHJcbiAgICAgICAgdmFyIG0gPSBwcm9qZWN0aW9uTWF0cml4LmFycmF5O1xyXG4gICAgICAgIHZhciBtMCA9IG1bMF0sIG0xID0gbVsxXSwgbTIgPSBtWzJdLCBtMyA9IG1bM107XHJcbiAgICAgICAgdmFyIG00ID0gbVs0XSwgbTUgPSBtWzVdLCBtNiA9IG1bNl0sIG03ID0gbVs3XTtcclxuICAgICAgICB2YXIgbTggPSBtWzhdLCBtOSA9IG1bOV0sIG0xMCA9IG1bMTBdLCBtMTEgPSBtWzExXTtcclxuICAgICAgICB2YXIgbTEyID0gbVsxMl0sIG0xMyA9IG1bMTNdLCBtMTQgPSBtWzE0XSwgbTE1ID0gbVsxNV07XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSBwbGFuZXNcclxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1swXS5ub3JtYWwuYXJyYXksIG0zIC0gbTAsIG03IC0gbTQsIG0xMSAtIG04KTtcclxuICAgICAgICBwbGFuZXNbMF0uZGlzdGFuY2UgPSAtKG0xNSAtIG0xMik7XHJcbiAgICAgICAgcGxhbmVzWzBdLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1sxXS5ub3JtYWwuYXJyYXksIG0zICsgbTAsIG03ICsgbTQsIG0xMSArIG04KTtcclxuICAgICAgICBwbGFuZXNbMV0uZGlzdGFuY2UgPSAtKG0xNSArIG0xMik7XHJcbiAgICAgICAgcGxhbmVzWzFdLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1syXS5ub3JtYWwuYXJyYXksIG0zICsgbTEsIG03ICsgbTUsIG0xMSArIG05KTtcclxuICAgICAgICBwbGFuZXNbMl0uZGlzdGFuY2UgPSAtKG0xNSArIG0xMyk7XHJcbiAgICAgICAgcGxhbmVzWzJdLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1szXS5ub3JtYWwuYXJyYXksIG0zIC0gbTEsIG03IC0gbTUsIG0xMSAtIG05KTtcclxuICAgICAgICBwbGFuZXNbM10uZGlzdGFuY2UgPSAtKG0xNSAtIG0xMyk7XHJcbiAgICAgICAgcGxhbmVzWzNdLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1s0XS5ub3JtYWwuYXJyYXksIG0zIC0gbTIsIG03IC0gbTYsIG0xMSAtIG0xMCk7XHJcbiAgICAgICAgcGxhbmVzWzRdLmRpc3RhbmNlID0gLShtMTUgLSBtMTQpO1xyXG4gICAgICAgIHBsYW5lc1s0XS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbNV0ubm9ybWFsLmFycmF5LCBtMyArIG0yLCBtNyArIG02LCBtMTEgKyBtMTApO1xyXG4gICAgICAgIHBsYW5lc1s1XS5kaXN0YW5jZSA9IC0obTE1ICsgbTE0KTtcclxuICAgICAgICBwbGFuZXNbNV0ubm9ybWFsaXplKCk7XHJcblxyXG4gICAgICAgIC8vIFBlcnNwZWN0aXZlIHByb2plY3Rpb25cclxuICAgICAgICB2YXIgYm91bmRpbmdCb3ggPSB0aGlzLmJvdW5kaW5nQm94O1xyXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XHJcbiAgICAgICAgaWYgKG0xNSA9PT0gMCkgIHtcclxuICAgICAgICAgICAgdmFyIGFzcGVjdCA9IG01IC8gbTA7XHJcbiAgICAgICAgICAgIHZhciB6TmVhciA9IC1tMTQgLyAobTEwIC0gMSk7XHJcbiAgICAgICAgICAgIHZhciB6RmFyID0gLW0xNCAvIChtMTAgKyAxKTtcclxuICAgICAgICAgICAgdmFyIGZhclkgPSAtekZhciAvIG01O1xyXG4gICAgICAgICAgICB2YXIgbmVhclkgPSAtek5lYXIgLyBtNTtcclxuICAgICAgICAgICAgLy8gVXBkYXRlIGJvdW5kaW5nIGJveFxyXG4gICAgICAgICAgICBib3VuZGluZ0JveC5taW4uc2V0KC1mYXJZICogYXNwZWN0LCAtZmFyWSwgekZhcik7XHJcbiAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1heC5zZXQoZmFyWSAqIGFzcGVjdCwgZmFyWSwgek5lYXIpO1xyXG4gICAgICAgICAgICAvLyB1cGRhdGUgdmVydGljZXNcclxuICAgICAgICAgICAgLy8tLS0gbWluIHpcclxuICAgICAgICAgICAgLy8gbWluIHhcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1swXSwgLWZhclkgKiBhc3BlY3QsIC1mYXJZLCB6RmFyKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1sxXSwgLWZhclkgKiBhc3BlY3QsIGZhclksIHpGYXIpO1xyXG4gICAgICAgICAgICAvLyBtYXggeFxyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzJdLCBmYXJZICogYXNwZWN0LCAtZmFyWSwgekZhcik7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbM10sIGZhclkgKiBhc3BlY3QsIGZhclksIHpGYXIpO1xyXG4gICAgICAgICAgICAvLy0tIG1heCB6XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNF0sIC1uZWFyWSAqIGFzcGVjdCwgLW5lYXJZLCB6TmVhcik7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNV0sIC1uZWFyWSAqIGFzcGVjdCwgbmVhclksIHpOZWFyKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s2XSwgbmVhclkgKiBhc3BlY3QsIC1uZWFyWSwgek5lYXIpO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzddLCBuZWFyWSAqIGFzcGVjdCwgbmVhclksIHpOZWFyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7IC8vIE9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uXHJcbiAgICAgICAgICAgIHZhciBsZWZ0ID0gKC0xIC0gbTEyKSAvIG0wO1xyXG4gICAgICAgICAgICB2YXIgcmlnaHQgPSAoMSAtIG0xMikgLyBtMDtcclxuICAgICAgICAgICAgdmFyIHRvcCA9ICgxIC0gbTEzKSAvIG01O1xyXG4gICAgICAgICAgICB2YXIgYm90dG9tID0gKC0xIC0gbTEzKSAvIG01O1xyXG4gICAgICAgICAgICB2YXIgbmVhciA9ICgtMSAtIG0xNCkgLyBtMTA7XHJcbiAgICAgICAgICAgIHZhciBmYXIgPSAoMSAtIG0xNCkgLyBtMTA7XHJcblxyXG5cclxuICAgICAgICAgICAgYm91bmRpbmdCb3gubWluLnNldChNYXRoLm1pbihsZWZ0LCByaWdodCksIE1hdGgubWluKGJvdHRvbSwgdG9wKSwgTWF0aC5taW4oZmFyLCBuZWFyKSk7XHJcbiAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1heC5zZXQoTWF0aC5tYXgocmlnaHQsIGxlZnQpLCBNYXRoLm1heCh0b3AsIGJvdHRvbSksIE1hdGgubWF4KG5lYXIsIGZhcikpO1xyXG5cclxuICAgICAgICAgICAgdmFyIG1pbiA9IGJvdW5kaW5nQm94Lm1pbi5hcnJheTtcclxuICAgICAgICAgICAgdmFyIG1heCA9IGJvdW5kaW5nQm94Lm1heC5hcnJheTtcclxuICAgICAgICAgICAgLy8tLS0gbWluIHpcclxuICAgICAgICAgICAgLy8gbWluIHhcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1swXSwgbWluWzBdLCBtaW5bMV0sIG1pblsyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbMV0sIG1pblswXSwgbWF4WzFdLCBtaW5bMl0pO1xyXG4gICAgICAgICAgICAvLyBtYXggeFxyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzJdLCBtYXhbMF0sIG1pblsxXSwgbWluWzJdKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1szXSwgbWF4WzBdLCBtYXhbMV0sIG1pblsyXSk7XHJcbiAgICAgICAgICAgIC8vLS0gbWF4IHpcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s0XSwgbWluWzBdLCBtaW5bMV0sIG1heFsyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNV0sIG1pblswXSwgbWF4WzFdLCBtYXhbMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzZdLCBtYXhbMF0sIG1pblsxXSwgbWF4WzJdKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s3XSwgbWF4WzBdLCBtYXhbMV0sIG1heFsyXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IGEgYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggYW5kIHNldCB0byB0aGUgZ2l2ZW4gYm91bmRpbmcgYm94XHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBwYXJhbSB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAqIEBwYXJhbSB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAqL1xyXG4gICAgZ2V0VHJhbnNmb3JtZWRCb3VuZGluZ0JveDogKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgdG1wVmVjMyA9IHZlYzMuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihiYm94LCBtYXRyaXgpIHtcclxuICAgICAgICAgICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcclxuXHJcbiAgICAgICAgICAgIHZhciBtNCA9IG1hdHJpeC5hcnJheTtcclxuICAgICAgICAgICAgdmFyIG1pbiA9IGJib3gubWluO1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gYmJveC5tYXg7XHJcbiAgICAgICAgICAgIHZhciBtaW5BcnIgPSBtaW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXhBcnIgPSBtYXguYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciB2ID0gdmVydGljZXNbMF07XHJcbiAgICAgICAgICAgIHZlYzNUcmFuZm9ybU1hdDQodG1wVmVjMywgdiwgbTQpO1xyXG4gICAgICAgICAgICB2ZWMzQ29weShtaW5BcnIsIHRtcFZlYzMpO1xyXG4gICAgICAgICAgICB2ZWMzQ29weShtYXhBcnIsIHRtcFZlYzMpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHYgPSB2ZXJ0aWNlc1tpXTtcclxuICAgICAgICAgICAgICAgIHZlYzNUcmFuZm9ybU1hdDQodG1wVmVjMywgdiwgbTQpO1xyXG5cclxuICAgICAgICAgICAgICAgIG1pbkFyclswXSA9IG1hdGhNaW4odG1wVmVjM1swXSwgbWluQXJyWzBdKTtcclxuICAgICAgICAgICAgICAgIG1pbkFyclsxXSA9IG1hdGhNaW4odG1wVmVjM1sxXSwgbWluQXJyWzFdKTtcclxuICAgICAgICAgICAgICAgIG1pbkFyclsyXSA9IG1hdGhNaW4odG1wVmVjM1syXSwgbWluQXJyWzJdKTtcclxuXHJcbiAgICAgICAgICAgICAgICBtYXhBcnJbMF0gPSBtYXRoTWF4KHRtcFZlYzNbMF0sIG1heEFyclswXSk7XHJcbiAgICAgICAgICAgICAgICBtYXhBcnJbMV0gPSBtYXRoTWF4KHRtcFZlYzNbMV0sIG1heEFyclsxXSk7XHJcbiAgICAgICAgICAgICAgICBtYXhBcnJbMl0gPSBtYXRoTWF4KHRtcFZlYzNbMl0sIG1heEFyclsyXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICBtYXguX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBiYm94O1xyXG4gICAgICAgIH07XHJcbiAgICB9KSAoKVxyXG59O1xyXG5leHBvcnQgZGVmYXVsdCBGcnVzdHVtO1xyXG4iLCJpbXBvcnQgVmVjdG9yMyBmcm9tICcuL1ZlY3RvcjMnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcbnZhciBFUFNJTE9OID0gMWUtNTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuUmF5XHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBbb3JpZ2luXVxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW2RpcmVjdGlvbl1cclxuICovXHJcbnZhciBSYXkgPSBmdW5jdGlvbiAob3JpZ2luLCBkaXJlY3Rpb24pIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW4gfHwgbmV3IFZlY3RvcjMoKTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5kaXJlY3Rpb24gPSBkaXJlY3Rpb24gfHwgbmV3IFZlY3RvcjMoKTtcclxufTtcclxuXHJcblJheS5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IFJheSxcclxuXHJcbiAgICAvLyBodHRwOi8vd3d3LnNpZ2dyYXBoLm9yZy9lZHVjYXRpb24vbWF0ZXJpYWxzL0h5cGVyR3JhcGgvcmF5dHJhY2UvcmF5cGxhbmVfaW50ZXJzZWN0aW9uLmh0bVxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgaW50ZXJzZWN0aW9uIHBvaW50IGJldHdlZW4gcmF5IGFuZCBhIGdpdmUgcGxhbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUGxhbmV9IHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IFtvdXRdXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdFBsYW5lOiBmdW5jdGlvbiAocGxhbmUsIG91dCkge1xyXG4gICAgICAgIHZhciBwbiA9IHBsYW5lLm5vcm1hbC5hcnJheTtcclxuICAgICAgICB2YXIgZCA9IHBsYW5lLmRpc3RhbmNlO1xyXG4gICAgICAgIHZhciBybyA9IHRoaXMub3JpZ2luLmFycmF5O1xyXG4gICAgICAgIHZhciByZCA9IHRoaXMuZGlyZWN0aW9uLmFycmF5O1xyXG5cclxuICAgICAgICB2YXIgZGl2aWRlciA9IHZlYzMuZG90KHBuLCByZCk7XHJcbiAgICAgICAgLy8gcmF5IGlzIHBhcmFsbGVsIHRvIHRoZSBwbGFuZVxyXG4gICAgICAgIGlmIChkaXZpZGVyID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW91dCkge1xyXG4gICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdCA9ICh2ZWMzLmRvdChwbiwgcm8pIC0gZCkgLyBkaXZpZGVyO1xyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBybywgcmQsIC10KTtcclxuICAgICAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1pcnJvciB0aGUgcmF5IGFnYWluc3QgcGxhbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUGxhbmV9IHBsYW5lXHJcbiAgICAgKi9cclxuICAgIG1pcnJvckFnYWluc3RQbGFuZTogZnVuY3Rpb24gKHBsYW5lKSB7XHJcbiAgICAgICAgLy8gRGlzdGFuY2UgdG8gcGxhbmVcclxuICAgICAgICB2YXIgZCA9IHZlYzMuZG90KHBsYW5lLm5vcm1hbC5hcnJheSwgdGhpcy5kaXJlY3Rpb24uYXJyYXkpO1xyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQodGhpcy5kaXJlY3Rpb24uYXJyYXksIHRoaXMuZGlyZWN0aW9uLmFycmF5LCBwbGFuZS5ub3JtYWwuYXJyYXksIC1kICogMik7XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZGlzdGFuY2VUb1BvaW50OiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2ID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYsIHBvaW50LCB0aGlzLm9yaWdpbi5hcnJheSk7XHJcbiAgICAgICAgICAgIC8vIERpc3RhbmNlIGZyb20gcHJvamVjdGlvbiBwb2ludCB0byBvcmlnaW5cclxuICAgICAgICAgICAgdmFyIGIgPSB2ZWMzLmRvdCh2LCB0aGlzLmRpcmVjdGlvbi5hcnJheSk7XHJcbiAgICAgICAgICAgIGlmIChiIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzMuZGlzdGFuY2UodGhpcy5vcmlnaW4uYXJyYXksIHBvaW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBTcXVhcmVkIGRpc3RhbmNlIGZyb20gY2VudGVyIHRvIG9yaWdpblxyXG4gICAgICAgICAgICB2YXIgYzIgPSB2ZWMzLmxlblNxdWFyZWQodik7XHJcbiAgICAgICAgICAgIC8vIFNxdWFyZWQgZGlzdGFuY2UgZnJvbSBjZW50ZXIgdG8gcHJvamVjdGlvbiBwb2ludFxyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KGMyIC0gYiAqIGIpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIHJheSBhbmQgc3BoZXJlXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGNlbnRlclxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSByYWRpdXNcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdFNwaGVyZTogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdiA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjZW50ZXIsIHJhZGl1cywgb3V0KSB7XHJcbiAgICAgICAgICAgIHZhciBvcmlnaW4gPSB0aGlzLm9yaWdpbi5hcnJheTtcclxuICAgICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmFycmF5O1xyXG4gICAgICAgICAgICBjZW50ZXIgPSBjZW50ZXIuYXJyYXk7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYsIGNlbnRlciwgb3JpZ2luKTtcclxuICAgICAgICAgICAgLy8gRGlzdGFuY2UgZnJvbSBwcm9qZWN0aW9uIHBvaW50IHRvIG9yaWdpblxyXG4gICAgICAgICAgICB2YXIgYiA9IHZlYzMuZG90KHYsIGRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgIC8vIFNxdWFyZWQgZGlzdGFuY2UgZnJvbSBjZW50ZXIgdG8gb3JpZ2luXHJcbiAgICAgICAgICAgIHZhciBjMiA9IHZlYzMuc3F1YXJlZExlbmd0aCh2KTtcclxuICAgICAgICAgICAgLy8gU3F1YXJlZCBkaXN0YW5jZSBmcm9tIGNlbnRlciB0byBwcm9qZWN0aW9uIHBvaW50XHJcbiAgICAgICAgICAgIHZhciBkMiA9IGMyIC0gYiAqIGI7XHJcblxyXG4gICAgICAgICAgICB2YXIgcjIgPSByYWRpdXMgKiByYWRpdXM7XHJcbiAgICAgICAgICAgIC8vIE5vIGludGVyc2VjdGlvblxyXG4gICAgICAgICAgICBpZiAoZDIgPiByMikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgYSA9IE1hdGguc3FydChyMiAtIGQyKTtcclxuICAgICAgICAgICAgLy8gRmlyc3QgaW50ZXJzZWN0IHBvaW50XHJcbiAgICAgICAgICAgIHZhciB0MCA9IGIgLSBhO1xyXG4gICAgICAgICAgICAvLyBTZWNvbmQgaW50ZXJzZWN0IHBvaW50XHJcbiAgICAgICAgICAgIHZhciB0MSA9IGIgKyBhO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHQwIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHQxIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIG9yaWdpbiwgZGlyZWN0aW9uLCB0MSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBvcmlnaW4sIGRpcmVjdGlvbiwgdDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8vIGh0dHA6Ly93d3cuc2NyYXRjaGFwaXhlbC5jb20vbGVzc29ucy8zZC1iYXNpYy1sZXNzb25zL2xlc3Nvbi03LWludGVyc2VjdGluZy1zaW1wbGUtc2hhcGVzL3JheS1ib3gtaW50ZXJzZWN0aW9uL1xyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgaW50ZXJzZWN0aW9uIHBvaW50IGJldHdlZW4gcmF5IGFuZCBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Cb3VuZGluZ0JveH0gYmJveFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdEJvdW5kaW5nQm94OiBmdW5jdGlvbiAoYmJveCwgb3V0KSB7XHJcbiAgICAgICAgdmFyIGRpciA9IHRoaXMuZGlyZWN0aW9uLmFycmF5O1xyXG4gICAgICAgIHZhciBvcmlnaW4gPSB0aGlzLm9yaWdpbi5hcnJheTtcclxuICAgICAgICB2YXIgbWluID0gYmJveC5taW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIG1heCA9IGJib3gubWF4LmFycmF5O1xyXG5cclxuICAgICAgICB2YXIgaW52ZGlyeCA9IDEgLyBkaXJbMF07XHJcbiAgICAgICAgdmFyIGludmRpcnkgPSAxIC8gZGlyWzFdO1xyXG4gICAgICAgIHZhciBpbnZkaXJ6ID0gMSAvIGRpclsyXTtcclxuXHJcbiAgICAgICAgdmFyIHRtaW4sIHRtYXgsIHR5bWluLCB0eW1heCwgdHptaW4sIHR6bWF4O1xyXG4gICAgICAgIGlmIChpbnZkaXJ4ID49IDApIHtcclxuICAgICAgICAgICAgdG1pbiA9IChtaW5bMF0gLSBvcmlnaW5bMF0pICogaW52ZGlyeDtcclxuICAgICAgICAgICAgdG1heCA9IChtYXhbMF0gLSBvcmlnaW5bMF0pICogaW52ZGlyeDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRtYXggPSAobWluWzBdIC0gb3JpZ2luWzBdKSAqIGludmRpcng7XHJcbiAgICAgICAgICAgIHRtaW4gPSAobWF4WzBdIC0gb3JpZ2luWzBdKSAqIGludmRpcng7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbnZkaXJ5ID49IDApIHtcclxuICAgICAgICAgICAgdHltaW4gPSAobWluWzFdIC0gb3JpZ2luWzFdKSAqIGludmRpcnk7XHJcbiAgICAgICAgICAgIHR5bWF4ID0gKG1heFsxXSAtIG9yaWdpblsxXSkgKiBpbnZkaXJ5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdHltYXggPSAobWluWzFdIC0gb3JpZ2luWzFdKSAqIGludmRpcnk7XHJcbiAgICAgICAgICAgIHR5bWluID0gKG1heFsxXSAtIG9yaWdpblsxXSkgKiBpbnZkaXJ5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCh0bWluID4gdHltYXgpIHx8ICh0eW1pbiA+IHRtYXgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5bWluID4gdG1pbiB8fCB0bWluICE9PSB0bWluKSB7XHJcbiAgICAgICAgICAgIHRtaW4gPSB0eW1pbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5bWF4IDwgdG1heCB8fCB0bWF4ICE9PSB0bWF4KSB7XHJcbiAgICAgICAgICAgIHRtYXggPSB0eW1heDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpbnZkaXJ6ID49IDApIHtcclxuICAgICAgICAgICAgdHptaW4gPSAobWluWzJdIC0gb3JpZ2luWzJdKSAqIGludmRpcno7XHJcbiAgICAgICAgICAgIHR6bWF4ID0gKG1heFsyXSAtIG9yaWdpblsyXSkgKiBpbnZkaXJ6O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdHptYXggPSAobWluWzJdIC0gb3JpZ2luWzJdKSAqIGludmRpcno7XHJcbiAgICAgICAgICAgIHR6bWluID0gKG1heFsyXSAtIG9yaWdpblsyXSkgKiBpbnZkaXJ6O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCh0bWluID4gdHptYXgpIHx8ICh0em1pbiA+IHRtYXgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR6bWluID4gdG1pbiB8fCB0bWluICE9PSB0bWluKSB7XHJcbiAgICAgICAgICAgIHRtaW4gPSB0em1pbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR6bWF4IDwgdG1heCB8fCB0bWF4ICE9PSB0bWF4KSB7XHJcbiAgICAgICAgICAgIHRtYXggPSB0em1heDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRtYXggPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHQgPSB0bWluID49IDAgPyB0bWluIDogdG1heDtcclxuXHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIG9yaWdpbiwgZGlyLCB0KTtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL00lQzMlQjZsbGVyJUUyJTgwJTkzVHJ1bWJvcmVfaW50ZXJzZWN0aW9uX2FsZ29yaXRobVxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgaW50ZXJzZWN0aW9uIHBvaW50IGJldHdlZW4gcmF5IGFuZCB0aHJlZSB0cmlhbmdsZSB2ZXJ0aWNlc1xyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IGFcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gY1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgc2luZ2xlU2lkZWQsIENXIHRyaWFuZ2xlIHdpbGwgYmUgaWdub3JlZFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFtvdXRdXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW2JhcnljZW50ZXJpY10gYmFyeWNlbnRyaWMgY29vcmRzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdFRyaWFuZ2xlOiAoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2YXIgZUJBID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgZUNBID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgQU8gPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB2Q3Jvc3MgPSB2ZWMzLmNyZWF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMsIHNpbmdsZVNpZGVkLCBvdXQsIGJhcnljZW50ZXJpYykge1xyXG4gICAgICAgICAgICB2YXIgZGlyID0gdGhpcy5kaXJlY3Rpb24uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBvcmlnaW4gPSB0aGlzLm9yaWdpbi5hcnJheTtcclxuICAgICAgICAgICAgYSA9IGEuYXJyYXk7XHJcbiAgICAgICAgICAgIGIgPSBiLmFycmF5O1xyXG4gICAgICAgICAgICBjID0gYy5hcnJheTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMuc3ViKGVCQSwgYiwgYSk7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKGVDQSwgYywgYSk7XHJcblxyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKHZDcm9zcywgZUNBLCBkaXIpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRldCA9IHZlYzMuZG90KGVCQSwgdkNyb3NzKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzaW5nbGVTaWRlZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRldCA+IC1FUFNJTE9OKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGV0ID4gLUVQU0lMT04gJiYgZGV0IDwgRVBTSUxPTikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2ZWMzLnN1YihBTywgb3JpZ2luLCBhKTtcclxuICAgICAgICAgICAgdmFyIHUgPSB2ZWMzLmRvdCh2Q3Jvc3MsIEFPKSAvIGRldDtcclxuICAgICAgICAgICAgaWYgKHUgPCAwIHx8IHUgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVjMy5jcm9zcyh2Q3Jvc3MsIGVCQSwgQU8pO1xyXG4gICAgICAgICAgICB2YXIgdiA9IHZlYzMuZG90KGRpciwgdkNyb3NzKSAvIGRldDtcclxuXHJcbiAgICAgICAgICAgIGlmICh2IDwgMCB8fCB2ID4gMSB8fCAodSArIHYgPiAxKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlYzMuY3Jvc3ModkNyb3NzLCBlQkEsIGVDQSk7XHJcbiAgICAgICAgICAgIHZhciB0ID0gLXZlYzMuZG90KEFPLCB2Q3Jvc3MpIC8gZGV0O1xyXG5cclxuICAgICAgICAgICAgaWYgKHQgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGJhcnljZW50ZXJpYykge1xyXG4gICAgICAgICAgICAgICAgVmVjdG9yMy5zZXQoYmFyeWNlbnRlcmljLCAoMSAtIHUgLSB2KSwgdSwgdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIG9yaWdpbiwgZGlyLCB0KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhbiBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCB0byB0aGUgcmF5XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBhcHBseVRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG4gICAgICAgIFZlY3RvcjMuYWRkKHRoaXMuZGlyZWN0aW9uLCB0aGlzLmRpcmVjdGlvbiwgdGhpcy5vcmlnaW4pO1xyXG4gICAgICAgIFZlY3RvcjMudHJhbnNmb3JtTWF0NCh0aGlzLm9yaWdpbiwgdGhpcy5vcmlnaW4sIG1hdHJpeCk7XHJcbiAgICAgICAgVmVjdG9yMy50cmFuc2Zvcm1NYXQ0KHRoaXMuZGlyZWN0aW9uLCB0aGlzLmRpcmVjdGlvbiwgbWF0cml4KTtcclxuXHJcbiAgICAgICAgVmVjdG9yMy5zdWIodGhpcy5kaXJlY3Rpb24sIHRoaXMuZGlyZWN0aW9uLCB0aGlzLm9yaWdpbik7XHJcbiAgICAgICAgVmVjdG9yMy5ub3JtYWxpemUodGhpcy5kaXJlY3Rpb24sIHRoaXMuZGlyZWN0aW9uKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IHZhbHVlcyBmcm9tIGFub3RoZXIgcmF5XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuUmF5fSByYXlcclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24gKHJheSkge1xyXG4gICAgICAgIFZlY3RvcjMuY29weSh0aGlzLm9yaWdpbiwgcmF5Lm9yaWdpbik7XHJcbiAgICAgICAgVmVjdG9yMy5jb3B5KHRoaXMuZGlyZWN0aW9uLCByYXkuZGlyZWN0aW9uKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyByYXlcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUmF5fVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciByYXkgPSBuZXcgUmF5KCk7XHJcbiAgICAgICAgcmF5LmNvcHkodGhpcyk7XHJcbiAgICAgICAgcmV0dXJuIHJheTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJheTtcclxuIiwiaW1wb3J0IE5vZGUgZnJvbSAnLi9Ob2RlJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgRnJ1c3R1bSBmcm9tICcuL21hdGgvRnJ1c3R1bSc7XHJcbmltcG9ydCBSYXkgZnJvbSAnLi9tYXRoL1JheSc7XHJcblxyXG5pbXBvcnQgdmVjNCBmcm9tICcuL2dsbWF0cml4L3ZlYzQnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5DYW1lcmFcclxuICogQGV4dGVuZHMgY2xheS5Ob2RlXHJcbiAqL1xyXG52YXIgQ2FtZXJhID0gTm9kZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5DYW1lcmEjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW1lcmEgcHJvamVjdGlvbiBtYXRyaXhcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6IG5ldyBNYXRyaXg0KCksXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludmVyc2Ugb2YgY2FtZXJhIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTWF0cml4NH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBpbnZQcm9qZWN0aW9uTWF0cml4OiBuZXcgTWF0cml4NCgpLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBWaWV3IG1hdHJpeCwgZXF1YWwgdG8gaW52ZXJzZSBvZiBjYW1lcmEncyB3b3JsZCBtYXRyaXhcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZpZXdNYXRyaXg6IG5ldyBNYXRyaXg0KCksXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbWVyYSBmcnVzdHVtIGluIHZpZXcgc3BhY2VcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5GcnVzdHVtfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZydXN0dW06IG5ldyBGcnVzdHVtKClcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuQ2FtZXJhLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgICAgICBOb2RlLnByb3RvdHlwZS51cGRhdGUuY2FsbCh0aGlzLCBmb3JjZSk7XHJcbiAgICAgICAgTWF0cml4NC5pbnZlcnQodGhpcy52aWV3TWF0cml4LCB0aGlzLndvcmxkVHJhbnNmb3JtKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgTWF0cml4NC5pbnZlcnQodGhpcy5pbnZQcm9qZWN0aW9uTWF0cml4LCB0aGlzLnByb2plY3Rpb25NYXRyaXgpO1xyXG5cclxuICAgICAgICB0aGlzLmZydXN0dW0uc2V0RnJvbVByb2plY3Rpb24odGhpcy5wcm9qZWN0aW9uTWF0cml4KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY2FtZXJhIHZpZXcgbWF0cml4XHJcbiAgICAgKi9cclxuICAgIHNldFZpZXdNYXRyaXg6IGZ1bmN0aW9uICh2aWV3TWF0cml4KSB7XHJcbiAgICAgICAgTWF0cml4NC5jb3B5KHRoaXMudmlld01hdHJpeCwgdmlld01hdHJpeCk7XHJcbiAgICAgICAgTWF0cml4NC5pbnZlcnQodGhpcy53b3JsZFRyYW5zZm9ybSwgdmlld01hdHJpeCk7XHJcbiAgICAgICAgdGhpcy5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlY29tcG9zZSBjYW1lcmEgcHJvamVjdGlvbiBtYXRyaXhcclxuICAgICAqL1xyXG4gICAgZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY2FtZXJhIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gcHJvamVjdGlvbk1hdHJpeFxyXG4gICAgICovXHJcbiAgICBzZXRQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAocHJvamVjdGlvbk1hdHJpeCkge1xyXG4gICAgICAgIE1hdHJpeDQuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgsIHByb2plY3Rpb25NYXRyaXgpO1xyXG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeCwgcHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgdGhpcy5kZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgcHJvamVjdGlvbiBtYXRyaXgsIGNhbGxlZCBhZnRlciB1cGRhdGVcclxuICAgICAqL1xyXG4gICAgdXBkYXRlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYXN0IGEgcGlja2luZyByYXkgZnJvbSBjYW1lcmEgbmVhciBwbGFuZSB0byBmYXIgcGxhbmVcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjJ9IG5kY1xyXG4gICAgICogQHBhcmFtIHtjbGF5LlJheX0gW291dF1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuUmF5fVxyXG4gICAgICovXHJcbiAgICBjYXN0UmF5OiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2NCA9IHZlYzQuY3JlYXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChuZGMsIG91dCkge1xyXG4gICAgICAgICAgICB2YXIgcmF5ID0gb3V0ICE9PSB1bmRlZmluZWQgPyBvdXQgOiBuZXcgUmF5KCk7XHJcbiAgICAgICAgICAgIHZhciB4ID0gbmRjLmFycmF5WzBdO1xyXG4gICAgICAgICAgICB2YXIgeSA9IG5kYy5hcnJheVsxXTtcclxuICAgICAgICAgICAgdmVjNC5zZXQodjQsIHgsIHksIC0xLCAxKTtcclxuICAgICAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KHY0LCB2NCwgdGhpcy5pbnZQcm9qZWN0aW9uTWF0cml4LmFycmF5KTtcclxuICAgICAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KHY0LCB2NCwgdGhpcy53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzMuc2NhbGUocmF5Lm9yaWdpbi5hcnJheSwgdjQsIDEgLyB2NFszXSk7XHJcblxyXG4gICAgICAgICAgICB2ZWM0LnNldCh2NCwgeCwgeSwgMSwgMSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2NCwgdjQsIHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2NCwgdjQsIHRoaXMud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlKHY0LCB2NCwgMSAvIHY0WzNdKTtcclxuICAgICAgICAgICAgdmVjMy5zdWIocmF5LmRpcmVjdGlvbi5hcnJheSwgdjQsIHJheS5vcmlnaW4uYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUocmF5LmRpcmVjdGlvbi5hcnJheSwgcmF5LmRpcmVjdGlvbi5hcnJheSk7XHJcbiAgICAgICAgICAgIHJheS5kaXJlY3Rpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmF5Lm9yaWdpbi5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJheTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQG5hbWUgY2xvbmVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuQ2FtZXJhfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuQ2FtZXJhLnByb3RvdHlwZVxyXG4gICAgICovXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ2FtZXJhO1xyXG4iLCJpbXBvcnQgTm9kZSBmcm9tICcuL05vZGUnO1xyXG5pbXBvcnQgTGlnaHQgZnJvbSAnLi9MaWdodCc7XHJcbmltcG9ydCBDYW1lcmEgZnJvbSAnLi9DYW1lcmEnO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi9tYXRoL0JvdW5kaW5nQm94JztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgbWF0NCBmcm9tICcuL2dsbWF0cml4L21hdDQnO1xyXG5pbXBvcnQgTFJVQ2FjaGUgZnJvbSAnLi9jb3JlL0xSVSc7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4vbWF0aC9NYXRyaXg0JztcclxuXHJcbnZhciBJREVOVElUWSA9IG1hdDQuY3JlYXRlKCk7XHJcbnZhciBXT1JMRFZJRVcgPSBtYXQ0LmNyZWF0ZSgpO1xyXG5cclxudmFyIHByb2dyYW1LZXlDYWNoZSA9IHt9O1xyXG5cclxuZnVuY3Rpb24gZ2V0UHJvZ3JhbUtleShsaWdodE51bWJlcnMpIHtcclxuICAgIHZhciBkZWZpbmVTdHIgPSBbXTtcclxuICAgIHZhciBsaWdodFR5cGVzID0gT2JqZWN0LmtleXMobGlnaHROdW1iZXJzKTtcclxuICAgIGxpZ2h0VHlwZXMuc29ydCgpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaWdodFR5cGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0VHlwZSA9IGxpZ2h0VHlwZXNbaV07XHJcbiAgICAgICAgZGVmaW5lU3RyLnB1c2gobGlnaHRUeXBlICsgJyAnICsgbGlnaHROdW1iZXJzW2xpZ2h0VHlwZV0pO1xyXG4gICAgfVxyXG4gICAgdmFyIGtleSA9IGRlZmluZVN0ci5qb2luKCdcXG4nKTtcclxuXHJcbiAgICBpZiAocHJvZ3JhbUtleUNhY2hlW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gcHJvZ3JhbUtleUNhY2hlW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGlkID0gdXRpbC5nZW5HVUlEKCk7XHJcbiAgICBwcm9ncmFtS2V5Q2FjaGVba2V5XSA9IGlkO1xyXG4gICAgcmV0dXJuIGlkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBSZW5kZXJMaXN0KCkge1xyXG5cclxuICAgIHRoaXMub3BhcXVlID0gW107XHJcbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gW107XHJcblxyXG4gICAgdGhpcy5fb3BhcXVlQ291bnQgPSAwO1xyXG4gICAgdGhpcy5fdHJhbnNwYXJlbnRDb3VudCA9IDA7XHJcbn1cclxuXHJcblJlbmRlckxpc3QucHJvdG90eXBlLnN0YXJ0Q291bnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9vcGFxdWVDb3VudCA9IDA7XHJcbiAgICB0aGlzLl90cmFuc3BhcmVudENvdW50ID0gMDtcclxufTtcclxuXHJcblJlbmRlckxpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChvYmplY3QsIGlzVHJhbnNwYXJlbnQpIHtcclxuICAgIGlmIChpc1RyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgdGhpcy50cmFuc3BhcmVudFt0aGlzLl90cmFuc3BhcmVudENvdW50KytdID0gb2JqZWN0O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vcGFxdWVbdGhpcy5fb3BhcXVlQ291bnQrK10gPSBvYmplY3Q7XHJcbiAgICB9XHJcbn07XHJcblxyXG5SZW5kZXJMaXN0LnByb3RvdHlwZS5lbmRDb3VudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMudHJhbnNwYXJlbnQubGVuZ3RoID0gdGhpcy5fdHJhbnNwYXJlbnRDb3VudDtcclxuICAgIHRoaXMub3BhcXVlLmxlbmd0aCA9IHRoaXMuX29wYXF1ZUNvdW50O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IGNsYXkuU2NlbmUuUmVuZGVyTGlzdFxyXG4gKiBAcHJvcGVydHkge0FycmF5LjxjbGF5LlJlbmRlcmFibGU+fSBvcGFxdWVcclxuICogQHByb3BlcnR5IHtBcnJheS48Y2xheS5SZW5kZXJhYmxlPn0gdHJhbnNwYXJlbnRcclxuICovXHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuU2NlbmVcclxuICogQGV4dGVuZHMgY2xheS5Ob2RlXHJcbiAqL1xyXG52YXIgU2NlbmUgPSBOb2RlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlNjZW5lIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogR2xvYmFsIG1hdGVyaWFsIG9mIHNjZW5lXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTWF0ZXJpYWx9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWF0ZXJpYWw6IG51bGwsXHJcblxyXG4gICAgICAgIGxpZ2h0czogW10sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNjZW5lIGJvdW5kaW5nIGJveCBpbiB2aWV3IHNwYWNlLlxyXG4gICAgICAgICAqIFVzZWQgd2hlbiBjYW1lcmEgbmVlZHMgdG8gYWR1anN0IHRoZSBuZWFyIGFuZCBmYXIgcGxhbmUgYXV0b21hdGljYWxseVxyXG4gICAgICAgICAqIHNvIHRoYXQgdGhlIHZpZXcgZnJ1c3R1bSBjb250YWlucyB0aGUgdmlzaWJsZSBvYmplY3RzIGFzIHRpZ2h0bHkgYXMgcG9zc2libGUuXHJcbiAgICAgICAgICogTm90aWNlOlxyXG4gICAgICAgICAqICBJdCBpcyB1cGRhdGVkIGFmdGVyIHJlbmRlcmluZyAoaW4gdGhlIHN0ZXAgb2YgZnJ1c3R1bSBjdWxsaW5nIHBhc3NpbmdseSkuIFNvIG1heSBiZSBub3Qgc28gYWNjdXJhdGUsIGJ1dCBzYXZlcyBhIGxvdCBvZiBjYWxjdWxhdGlvblxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdmlld0JvdW5kaW5nQm94TGFzdEZyYW1lOiBuZXcgQm91bmRpbmdCb3goKSxcclxuXHJcbiAgICAgICAgLy8gVW5pZm9ybXMgZm9yIHNoYWRvdyBtYXAuXHJcbiAgICAgICAgc2hhZG93VW5pZm9ybXM6IHt9LFxyXG5cclxuICAgICAgICBfY2FtZXJhTGlzdDogW10sXHJcblxyXG4gICAgICAgIC8vIFByb3BlcnRpZXMgdG8gc2F2ZSB0aGUgbGlnaHQgaW5mb3JtYXRpb24gaW4gdGhlIHNjZW5lXHJcbiAgICAgICAgLy8gV2lsbCBiZSBzZXQgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxyXG4gICAgICAgIF9saWdodFVuaWZvcm1zOiB7fSxcclxuXHJcbiAgICAgICAgX3ByZXZpb3VzTGlnaHROdW1iZXI6IHt9LFxyXG5cclxuICAgICAgICBfbGlnaHROdW1iZXI6IHtcclxuICAgICAgICAgICAgLy8gZ3JvdXBJZDoge1xyXG4gICAgICAgICAgICAgICAgLy8gUE9JTlRfTElHSFQ6IDAsXHJcbiAgICAgICAgICAgICAgICAvLyBESVJFQ1RJT05BTF9MSUdIVDogMCxcclxuICAgICAgICAgICAgICAgIC8vIFNQT1RfTElHSFQ6IDAsXHJcbiAgICAgICAgICAgICAgICAvLyBBTUJJRU5UX0xJR0hUOiAwLFxyXG4gICAgICAgICAgICAgICAgLy8gQU1CSUVOVF9TSF9MSUdIVDogMFxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2xpZ2h0UHJvZ3JhbUtleXM6IHt9LFxyXG5cclxuICAgICAgICBfbm9kZVJlcG9zaXRvcnk6IHt9LFxyXG5cclxuICAgICAgICBfcmVuZGVyTGlzdHM6IG5ldyBMUlVDYWNoZSgyMClcclxuXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9zY2VuZSA9IHRoaXM7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5TY2VuZS5wcm90b3R5cGUuICovXHJcbntcclxuXHJcbiAgICAvLyBBZGQgbm9kZSB0byBzY2VuZVxyXG4gICAgYWRkVG9TY2VuZTogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbWVyYSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fY2FtZXJhTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0ZvdW5kIG11bHRpcGxlIGNhbWVyYSBpbiBvbmUgc2NlbmUuIFVzZSB0aGUgZmlzdCBvbmUuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fY2FtZXJhTGlzdC5wdXNoKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgTGlnaHQpIHtcclxuICAgICAgICAgICAgdGhpcy5saWdodHMucHVzaChub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5vZGUubmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub2RlUmVwb3NpdG9yeVtub2RlLm5hbWVdID0gbm9kZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFJlbW92ZSBub2RlIGZyb20gc2NlbmVcclxuICAgIHJlbW92ZUZyb21TY2VuZTogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICB2YXIgaWR4O1xyXG4gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgQ2FtZXJhKSB7XHJcbiAgICAgICAgICAgIGlkeCA9IHRoaXMuX2NhbWVyYUxpc3QuaW5kZXhPZihub2RlKTtcclxuICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYW1lcmFMaXN0LnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBMaWdodCkge1xyXG4gICAgICAgICAgICBpZHggPSB0aGlzLmxpZ2h0cy5pbmRleE9mKG5vZGUpO1xyXG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlnaHRzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlLm5hbWUpIHtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX25vZGVSZXBvc2l0b3J5W25vZGUubmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBub2RlIGJ5IG5hbWVcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7Tm9kZX1cclxuICAgICAqIEBERVBSRUNBVEVEXHJcbiAgICAgKi9cclxuICAgIGdldE5vZGU6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVSZXBvc2l0b3J5W25hbWVdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBtYWluIGNhbWVyYSBvZiB0aGUgc2NlbmUuXHJcbiAgICAgKiBAcGFyYW0ge2NsYXlnbC5DYW1lcmF9IGNhbWVyYVxyXG4gICAgICovXHJcbiAgICBzZXRNYWluQ2FtZXJhOiBmdW5jdGlvbiAoY2FtZXJhKSB7XHJcbiAgICAgICAgdmFyIGlkeCA9IHRoaXMuX2NhbWVyYUxpc3QuaW5kZXhPZihjYW1lcmEpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jYW1lcmFMaXN0LnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jYW1lcmFMaXN0LnVuc2hpZnQoY2FtZXJhKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBtYWluIGNhbWVyYSBvZiB0aGUgc2NlbmUuXHJcbiAgICAgKi9cclxuICAgIGdldE1haW5DYW1lcmE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2FtZXJhTGlzdFswXTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TGlnaHRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGlnaHRzO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVMaWdodHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbGlnaHRzID0gdGhpcy5saWdodHM7XHJcbiAgICAgICAgdGhpcy5fcHJldmlvdXNMaWdodE51bWJlciA9IHRoaXMuX2xpZ2h0TnVtYmVyO1xyXG5cclxuICAgICAgICB2YXIgbGlnaHROdW1iZXIgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbGlnaHQgPSBsaWdodHNbaV07XHJcbiAgICAgICAgICAgIGlmIChsaWdodC5pbnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBncm91cCA9IGxpZ2h0Lmdyb3VwO1xyXG4gICAgICAgICAgICBpZiAoIWxpZ2h0TnVtYmVyW2dyb3VwXSkge1xyXG4gICAgICAgICAgICAgICAgbGlnaHROdW1iZXJbZ3JvdXBdID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gVXNlciBjYW4gdXNlIGFueSB0eXBlIG9mIGxpZ2h0XHJcbiAgICAgICAgICAgIGxpZ2h0TnVtYmVyW2dyb3VwXVtsaWdodC50eXBlXSA9IGxpZ2h0TnVtYmVyW2dyb3VwXVtsaWdodC50eXBlXSB8fCAwO1xyXG4gICAgICAgICAgICBsaWdodE51bWJlcltncm91cF1bbGlnaHQudHlwZV0rKztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fbGlnaHROdW1iZXIgPSBsaWdodE51bWJlcjtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgZ3JvdXBJZCBpbiBsaWdodE51bWJlcikge1xyXG4gICAgICAgICAgICB0aGlzLl9saWdodFByb2dyYW1LZXlzW2dyb3VwSWRdID0gZ2V0UHJvZ3JhbUtleShsaWdodE51bWJlcltncm91cElkXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl91cGRhdGVMaWdodFVuaWZvcm1zKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBub2RlIGFuZCBpdCdzIGNoaWxkcmVuLCBpbmNsdWRpbmcgbWVzaCwgY2FtZXJhLCBsaWdodCwgZXRjLlxyXG4gICAgICogVW5saWtlIHVzaW5nIGBOb2RlI2Nsb25lYC4gSXQgd2lsbCBjbG9uZSBza2VsZXRvbiBhbmQgcmVtYXAgdGhlIGpvaW50cy4gTWF0ZXJpYWwgd2lsbCBhbHNvIGJlIGNsb25lZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICBjbG9uZU5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgdmFyIG5ld05vZGUgPSBub2RlLmNsb25lKCk7XHJcbiAgICAgICAgdmFyIGNsb25lZE5vZGVzTWFwID0ge307XHJcbiAgICAgICAgZnVuY3Rpb24gYnVpbGROb2Rlc01hcChzTm9kZSwgdE5vZGUpIHtcclxuICAgICAgICAgICAgY2xvbmVkTm9kZXNNYXBbc05vZGUuX191aWRfX10gPSB0Tm9kZTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc05vZGUuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc0NoaWxkID0gc05vZGUuX2NoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRDaGlsZCA9IHROb2RlLl9jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgIGJ1aWxkTm9kZXNNYXAoc0NoaWxkLCB0Q2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJ1aWxkTm9kZXNNYXAobm9kZSwgbmV3Tm9kZSk7XHJcblxyXG4gICAgICAgIG5ld05vZGUudHJhdmVyc2UoZnVuY3Rpb24gKG5ld0NoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5za2VsZXRvbikge1xyXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQuc2tlbGV0b24gPSBuZXdDaGlsZC5za2VsZXRvbi5jbG9uZShjbG9uZWROb2Rlc01hcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdDaGlsZC5tYXRlcmlhbCA9IG5ld0NoaWxkLm1hdGVyaWFsLmNsb25lKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ld05vZGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhdmVyc2UgdGhlIHNjZW5lIGFuZCBhZGQgdGhlIHJlbmRlcmFibGUgb2JqZWN0IHRvIHRoZSByZW5kZXIgbGlzdC5cclxuICAgICAqIEl0IG5lZWRzIGNhbWVyYSBmb3IgdGhlIGZydXN0dW0gY3VsbGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdXBkYXRlU2NlbmVCb3VuZGluZ0JveFxyXG4gICAgICogQHJldHVybiB7Y2xheS5TY2VuZS5SZW5kZXJMaXN0fVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVSZW5kZXJMaXN0OiBmdW5jdGlvbiAoY2FtZXJhLCB1cGRhdGVTY2VuZUJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgdmFyIGlkID0gY2FtZXJhLl9fdWlkX187XHJcbiAgICAgICAgdmFyIHJlbmRlckxpc3QgPSB0aGlzLl9yZW5kZXJMaXN0cy5nZXQoaWQpO1xyXG4gICAgICAgIGlmICghcmVuZGVyTGlzdCkge1xyXG4gICAgICAgICAgICByZW5kZXJMaXN0ID0gbmV3IFJlbmRlckxpc3QoKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyTGlzdHMucHV0KGlkLCByZW5kZXJMaXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyTGlzdC5zdGFydENvdW50KCk7XHJcblxyXG4gICAgICAgIGlmICh1cGRhdGVTY2VuZUJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lLm1pbi5zZXQoSW5maW5pdHksIEluZmluaXR5LCBJbmZpbml0eSk7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lLm1heC5zZXQoLUluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc2NlbmVNYXRlcmlhbFRyYW5zcGFyZW50ID0gdGhpcy5tYXRlcmlhbCAmJiB0aGlzLm1hdGVyaWFsLnRyYW5zcGFyZW50IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2RvVXBkYXRlUmVuZGVyTGlzdCh0aGlzLCBjYW1lcmEsIHNjZW5lTWF0ZXJpYWxUcmFuc3BhcmVudCwgcmVuZGVyTGlzdCwgdXBkYXRlU2NlbmVCb3VuZGluZ0JveCk7XHJcblxyXG4gICAgICAgIHJlbmRlckxpc3QuZW5kQ291bnQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlbmRlckxpc3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHJlbmRlciBsaXN0LiBVc2VkIGFmdGVyIHtAbGluayBjbGF5LlNjZW5lI3VwZGF0ZVJlbmRlckxpc3R9XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuU2NlbmUuUmVuZGVyTGlzdH1cclxuICAgICAqL1xyXG4gICAgZ2V0UmVuZGVyTGlzdDogZnVuY3Rpb24gKGNhbWVyYSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJMaXN0cy5nZXQoY2FtZXJhLl9fdWlkX18pO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZG9VcGRhdGVSZW5kZXJMaXN0OiBmdW5jdGlvbiAocGFyZW50LCBjYW1lcmEsIHNjZW5lTWF0ZXJpYWxUcmFuc3BhcmVudCwgcmVuZGVyTGlzdCwgdXBkYXRlU2NlbmVCb3VuZGluZ0JveCkge1xyXG4gICAgICAgIGlmIChwYXJlbnQuaW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETyBPcHRpbWl6ZVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50Ll9jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBwYXJlbnQuX2NoaWxkcmVuW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoaWxkLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBGcnVzdHVtIGN1bGxpbmdcclxuICAgICAgICAgICAgICAgIHZhciB3b3JsZE0gPSBjaGlsZC5pc1NraW5uZWRNZXNoKCkgPyBJREVOVElUWSA6IGNoaWxkLndvcmxkVHJhbnNmb3JtLmFycmF5O1xyXG4gICAgICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gY2hpbGQuZ2VvbWV0cnk7XHJcblxyXG4gICAgICAgICAgICAgICAgbWF0NC5tdWx0aXBseUFmZmluZShXT1JMRFZJRVcsIGNhbWVyYS52aWV3TWF0cml4LmFycmF5LCB3b3JsZE0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZVNjZW5lQm91bmRpbmdCb3ggJiYgIWdlb21ldHJ5LmJvdW5kaW5nQm94IHx8ICF0aGlzLmlzRnJ1c3R1bUN1bGxlZChjaGlsZCwgY2FtZXJhLCBXT1JMRFZJRVcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGlzdC5hZGQoY2hpbGQsIGNoaWxkLm1hdGVyaWFsLnRyYW5zcGFyZW50IHx8IHNjZW5lTWF0ZXJpYWxUcmFuc3BhcmVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNoaWxkLl9jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kb1VwZGF0ZVJlbmRlckxpc3QoY2hpbGQsIGNhbWVyYSwgc2NlbmVNYXRlcmlhbFRyYW5zcGFyZW50LCByZW5kZXJMaXN0LCB1cGRhdGVTY2VuZUJvdW5kaW5nQm94KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBhbiBzY2VuZSBvYmplY3QgaXMgY3VsbGVkIGJ5IGNhbWVyYSBmcnVzdHVtXHJcbiAgICAgKlxyXG4gICAgICogT2JqZWN0IGNhbiBiZSBhIHJlbmRlcmFibGUgb3IgYSBsaWdodFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBvYmplY3RcclxuICAgICAqIEBwYXJhbSB7Y2xheS5DYW1lcmF9IGNhbWVyYVxyXG4gICAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gd29ybGRWaWV3TWF0IHJlcHJlc2VudGVkIHdpdGggYXJyYXlcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHByb2plY3Rpb25NYXQgcmVwcmVzZW50ZWQgd2l0aCBhcnJheVxyXG4gICAgICovXHJcbiAgICBpc0ZydXN0dW1DdWxsZWQ6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gRnJ1c3R1bSBjdWxsaW5nXHJcbiAgICAgICAgLy8gaHR0cDovL3d3dy5jc2UuY2hhbG1lcnMuc2UvfnVmZmUvdmZjX2Jib3gucGRmXHJcbiAgICAgICAgdmFyIGN1bGxpbmdCb3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHZhciBjdWxsaW5nTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBjYW1lcmEsIHdvcmxkVmlld01hdCkge1xyXG4gICAgICAgICAgICAvLyBCb3VuZGluZyBib3ggY2FuIGJlIGEgcHJvcGVydHkgb2Ygb2JqZWN0KGxpa2UgbGlnaHQpIG9yIHJlbmRlcmFibGUuZ2VvbWV0cnlcclxuICAgICAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgICAgICB2YXIgZ2VvQkJveCA9IG9iamVjdC5ib3VuZGluZ0JveDtcclxuICAgICAgICAgICAgaWYgKCFnZW9CQm94KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNrZWxldG9uICYmIG9iamVjdC5za2VsZXRvbi5ib3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdlb0JCb3ggPSBvYmplY3Quc2tlbGV0b24uYm91bmRpbmdCb3g7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBnZW9CQm94ID0gb2JqZWN0Lmdlb21ldHJ5LmJvdW5kaW5nQm94O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWdlb0JCb3gpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY3VsbGluZ01hdHJpeC5hcnJheSA9IHdvcmxkVmlld01hdDtcclxuICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94LnRyYW5zZm9ybUZyb20oZ2VvQkJveCwgY3VsbGluZ01hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICAvLyBQYXNzaW5nbHkgdXBkYXRlIHRoZSBzY2VuZSBib3VuZGluZyBib3hcclxuICAgICAgICAgICAgLy8gRklYTUUgZXhjbHVkZSB2ZXJ5IGxhcmdlIG1lc2ggbGlrZSBncm91bmQgcGxhbmUgb3IgdGVycmFpbiA/XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIE9ubHkgcmVuZGVyZXJhYmxlIHdoaWNoIGNhc3Qgc2hhZG93ID9cclxuXHJcbiAgICAgICAgICAgIC8vIEZJWE1FIGJvdW5kaW5nQm94IGJlY29tZXMgbXVjaCBsYXJnZXIgYWZ0ZXIgdHJhbnNmb3JtZC5cclxuICAgICAgICAgICAgaWYgKG9iamVjdC5jYXN0U2hhZG93KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS51bmlvbihjdWxsaW5nQm91bmRpbmdCb3gpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIElnbm9yZSBmcnVzdHVtIGN1bGxpbmcgaWYgb2JqZWN0IGlzIHNraW5uZWQgbWVzaC5cclxuICAgICAgICAgICAgaWYgKG9iamVjdC5mcnVzdHVtQ3VsbGluZykgIHtcclxuICAgICAgICAgICAgICAgIGlmICghY3VsbGluZ0JvdW5kaW5nQm94LmludGVyc2VjdEJvdW5kaW5nQm94KGNhbWVyYS5mcnVzdHVtLmJvdW5kaW5nQm94KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGN1bGxpbmdNYXRyaXguYXJyYXkgPSBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5hcnJheTtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBjdWxsaW5nQm91bmRpbmdCb3gubWF4LmFycmF5WzJdID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGN1bGxpbmdCb3VuZGluZ0JveC5taW4uYXJyYXlbMl0gPCAwXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBDbGlwIGluIHRoZSBuZWFyIHBsYW5lXHJcbiAgICAgICAgICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94Lm1heC5hcnJheVsyXSA9IC0xZS0yMDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjdWxsaW5nQm91bmRpbmdCb3guYXBwbHlQcm9qZWN0aW9uKGN1bGxpbmdNYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBtaW4gPSBjdWxsaW5nQm91bmRpbmdCb3gubWluLmFycmF5O1xyXG4gICAgICAgICAgICAgICAgdmFyIG1heCA9IGN1bGxpbmdCb3VuZGluZ0JveC5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIG1heFswXSA8IC0xIHx8IG1pblswXSA+IDFcclxuICAgICAgICAgICAgICAgICAgICB8fCBtYXhbMV0gPCAtMSB8fCBtaW5bMV0gPiAxXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgbWF4WzJdIDwgLTEgfHwgbWluWzJdID4gMVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICBfdXBkYXRlTGlnaHRVbmlmb3JtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsaWdodHMgPSB0aGlzLmxpZ2h0cztcclxuICAgICAgICAvLyBQdXQgdGhlIGxpZ2h0IGNhc3Qgc2hhZG93IGJlZm9yZSB0aGUgbGlnaHQgbm90IGNhc3Qgc2hhZG93XHJcbiAgICAgICAgbGlnaHRzLnNvcnQobGlnaHRTb3J0RnVuYyk7XHJcblxyXG4gICAgICAgIHZhciBsaWdodFVuaWZvcm1zID0gdGhpcy5fbGlnaHRVbmlmb3JtcztcclxuICAgICAgICBmb3IgKHZhciBncm91cCBpbiBsaWdodFVuaWZvcm1zKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiBsaWdodFVuaWZvcm1zW2dyb3VwXSkge1xyXG4gICAgICAgICAgICAgICAgbGlnaHRVbmlmb3Jtc1tncm91cF1bc3ltYm9sXS52YWx1ZS5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgbGlnaHQgPSBsaWdodHNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAobGlnaHQuaW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGdyb3VwID0gbGlnaHQuZ3JvdXA7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gbGlnaHQudW5pZm9ybVRlbXBsYXRlcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHVuaWZvcm1UcGwgPSBsaWdodC51bmlmb3JtVGVtcGxhdGVzW3N5bWJvbF07XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB1bmlmb3JtVHBsLnZhbHVlKGxpZ2h0KTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWxpZ2h0VW5pZm9ybXNbZ3JvdXBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGlnaHRVbmlmb3Jtc1tncm91cF0gPSB7fTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghbGlnaHRVbmlmb3Jtc1tncm91cF1bc3ltYm9sXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0VW5pZm9ybXNbZ3JvdXBdW3N5bWJvbF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogW11cclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIGx1ID0gbGlnaHRVbmlmb3Jtc1tncm91cF1bc3ltYm9sXTtcclxuICAgICAgICAgICAgICAgIGx1LnR5cGUgPSB1bmlmb3JtVHBsLnR5cGUgKyAndic7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHVuaWZvcm1UcGwudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzFpJzpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICcxZic6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGx1LnZhbHVlLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICcyZic6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnM2YnOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzRmJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWx1ZS5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbHUudmFsdWUucHVzaCh2YWx1ZVtqXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVW5rb3duIGxpZ2h0IHVuaWZvcm0gdHlwZSAnICsgdW5pZm9ybVRwbC50eXBlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TGlnaHRHcm91cHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbGlnaHRHcm91cHMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBncm91cElkIGluIHRoaXMuX2xpZ2h0TnVtYmVyKSB7XHJcbiAgICAgICAgICAgIGxpZ2h0R3JvdXBzLnB1c2goZ3JvdXBJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaWdodEdyb3VwcztcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TnVtYmVyQ2hhbmdlZExpZ2h0R3JvdXBzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0R3JvdXBzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgZ3JvdXBJZCBpbiB0aGlzLl9saWdodE51bWJlcikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0xpZ2h0TnVtYmVyQ2hhbmdlZChncm91cElkKSkge1xyXG4gICAgICAgICAgICAgICAgbGlnaHRHcm91cHMucHVzaChncm91cElkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbGlnaHRHcm91cHM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIERldGVybWluZSBpZiBsaWdodCBncm91cCBpcyBkaWZmZXJlbnQgd2l0aCBzaW5jZSBsYXN0IGZyYW1lXHJcbiAgICAvLyBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHVwZGF0ZSBzaGFkZXIgYW5kIHNjZW5lJ3MgdW5pZm9ybXMgaW4gUmVuZGVyZXIucmVuZGVyXHJcbiAgICBpc0xpZ2h0TnVtYmVyQ2hhbmdlZDogZnVuY3Rpb24gKGxpZ2h0R3JvdXApIHtcclxuICAgICAgICB2YXIgcHJldkxpZ2h0TnVtYmVyID0gdGhpcy5fcHJldmlvdXNMaWdodE51bWJlcjtcclxuICAgICAgICB2YXIgY3VycmVudExpZ2h0TnVtYmVyID0gdGhpcy5fbGlnaHROdW1iZXI7XHJcbiAgICAgICAgLy8gUEVORElORyBQZXJmb3JtYW5jZVxyXG4gICAgICAgIGZvciAodmFyIHR5cGUgaW4gY3VycmVudExpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdKSB7XHJcbiAgICAgICAgICAgIGlmICghcHJldkxpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY3VycmVudExpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdW3R5cGVdICE9PSBwcmV2TGlnaHROdW1iZXJbbGlnaHRHcm91cF1bdHlwZV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIHR5cGUgaW4gcHJldkxpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdKSB7XHJcbiAgICAgICAgICAgIGlmICghY3VycmVudExpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY3VycmVudExpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdW3R5cGVdICE9PSBwcmV2TGlnaHROdW1iZXJbbGlnaHRHcm91cF1bdHlwZV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TGlnaHRzTnVtYmVyczogZnVuY3Rpb24gKGxpZ2h0R3JvdXApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGlnaHROdW1iZXJbbGlnaHRHcm91cF07XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFByb2dyYW1LZXk6IGZ1bmN0aW9uIChsaWdodEdyb3VwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0UHJvZ3JhbUtleXNbbGlnaHRHcm91cF07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldExpZ2h0VW5pZm9ybXM6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gc2V0VW5pZm9ybXModW5pZm9ybXMsIHByb2dyYW0sIHJlbmRlcmVyKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiB1bmlmb3Jtcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGx1ID0gdW5pZm9ybXNbc3ltYm9sXTtcclxuICAgICAgICAgICAgICAgIGlmIChsdS50eXBlID09PSAndHYnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9ncmFtLmhhc1VuaWZvcm0oc3ltYm9sKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRleFNsb3RzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsdS52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IGx1LnZhbHVlW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2xvdCA9IHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdChyZW5kZXJlciwgdGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleFNsb3RzLnB1c2goc2xvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShyZW5kZXJlci5nbCwgJzFpdicsIHN5bWJvbCwgdGV4U2xvdHMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKHJlbmRlcmVyLmdsLCBsdS50eXBlLCBzeW1ib2wsIGx1LnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9ncmFtLCBsaWdodEdyb3VwLCByZW5kZXJlcikge1xyXG4gICAgICAgICAgICBzZXRVbmlmb3Jtcyh0aGlzLl9saWdodFVuaWZvcm1zW2xpZ2h0R3JvdXBdLCBwcm9ncmFtLCByZW5kZXJlcik7XHJcbiAgICAgICAgICAgIC8vIFNldCBzaGFkb3dzXHJcbiAgICAgICAgICAgIHNldFVuaWZvcm1zKHRoaXMuc2hhZG93VW5pZm9ybXMsIHByb2dyYW0sIHJlbmRlcmVyKTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2Ugc2VsZiwgY2xlYXIgYWxsIHRoZSBzY2VuZSBvYmplY3RzXHJcbiAgICAgKiBCdXQgcmVzb3VyY2VzIG9mIGdsIGxpa2UgdGV4dXR1cmUsIHNoYWRlciB3aWxsIG5vdCBiZSBkaXNwb3NlZC5cclxuICAgICAqIE1vc3RseSB5b3Ugc2hvdWxkIHVzZSBkaXNwb3NlU2NlbmUgbWV0aG9kIGluIFJlbmRlcmVyIHRvIGRvIGRpc3Bvc2UuXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9vcGFxdWVMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5fdHJhbnNwYXJlbnRMaXN0ID0gW107XHJcblxyXG4gICAgICAgIHRoaXMubGlnaHRzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuX2xpZ2h0VW5pZm9ybXMgPSB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGlnaHROdW1iZXIgPSB7fTtcclxuICAgICAgICB0aGlzLl9ub2RlUmVwb3NpdG9yeSA9IHt9O1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmZ1bmN0aW9uIGxpZ2h0U29ydEZ1bmMoYSwgYikge1xyXG4gICAgaWYgKGIuY2FzdFNoYWRvdyAmJiAhYS5jYXN0U2hhZG93KSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNjZW5lO1xyXG4iLCJ2YXIgRElSVFlfUFJFRklYID0gJ19fZHRfXyc7XHJcblxyXG52YXIgQ2FjaGUgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdGhpcy5fY29udGV4dElkID0gMDtcclxuXHJcbiAgICB0aGlzLl9jYWNoZXMgPSBbXTtcclxuXHJcbiAgICB0aGlzLl9jb250ZXh0ID0ge307XHJcbn07XHJcblxyXG5DYWNoZS5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgdXNlOiBmdW5jdGlvbiAoY29udGV4dElkLCBkb2N1bWVudFNjaGVtYSkge1xyXG4gICAgICAgIHZhciBjYWNoZXMgPSB0aGlzLl9jYWNoZXM7XHJcbiAgICAgICAgaWYgKCFjYWNoZXNbY29udGV4dElkXSkge1xyXG4gICAgICAgICAgICBjYWNoZXNbY29udGV4dElkXSA9IHt9O1xyXG5cclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50U2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZXNbY29udGV4dElkXSA9IGRvY3VtZW50U2NoZW1hKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY29udGV4dElkID0gY29udGV4dElkO1xyXG5cclxuICAgICAgICB0aGlzLl9jb250ZXh0ID0gY2FjaGVzW2NvbnRleHRJZF07XHJcbiAgICB9LFxyXG5cclxuICAgIHB1dDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9jb250ZXh0W2tleV0gPSB2YWx1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHRba2V5XTtcclxuICAgIH0sXHJcblxyXG4gICAgZGlydHk6IGZ1bmN0aW9uIChmaWVsZCkge1xyXG4gICAgICAgIGZpZWxkID0gZmllbGQgfHwgJyc7XHJcbiAgICAgICAgdmFyIGtleSA9IERJUlRZX1BSRUZJWCArIGZpZWxkO1xyXG4gICAgICAgIHRoaXMucHV0KGtleSwgdHJ1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGRpcnR5QWxsOiBmdW5jdGlvbiAoZmllbGQpIHtcclxuICAgICAgICBmaWVsZCA9IGZpZWxkIHx8ICcnO1xyXG4gICAgICAgIHZhciBrZXkgPSBESVJUWV9QUkVGSVggKyBmaWVsZDtcclxuICAgICAgICB2YXIgY2FjaGVzID0gdGhpcy5fY2FjaGVzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FjaGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChjYWNoZXNbaV0pIHtcclxuICAgICAgICAgICAgICAgIGNhY2hlc1tpXVtrZXldID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZnJlc2g6IGZ1bmN0aW9uIChmaWVsZCkge1xyXG4gICAgICAgIGZpZWxkID0gZmllbGQgfHwgJyc7XHJcbiAgICAgICAgdmFyIGtleSA9IERJUlRZX1BSRUZJWCArIGZpZWxkO1xyXG4gICAgICAgIHRoaXMucHV0KGtleSwgZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICBmcmVzaEFsbDogZnVuY3Rpb24gKGZpZWxkKSB7XHJcbiAgICAgICAgZmllbGQgPSBmaWVsZCB8fCAnJztcclxuICAgICAgICB2YXIga2V5ID0gRElSVFlfUFJFRklYICsgZmllbGQ7XHJcbiAgICAgICAgdmFyIGNhY2hlcyA9IHRoaXMuX2NhY2hlcztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhY2hlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoY2FjaGVzW2ldKSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZXNbaV1ba2V5XSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBpc0RpcnR5OiBmdW5jdGlvbiAoZmllbGQpIHtcclxuICAgICAgICBmaWVsZCA9IGZpZWxkIHx8ICcnO1xyXG4gICAgICAgIHZhciBrZXkgPSBESVJUWV9QUkVGSVggKyBmaWVsZDtcclxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuX2NvbnRleHQ7XHJcbiAgICAgICAgcmV0dXJuICAhY29udGV4dC5oYXNPd25Qcm9wZXJ0eShrZXkpXHJcbiAgICAgICAgICAgIHx8IGNvbnRleHRba2V5XSA9PT0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZGVsZXRlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHRJZCkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9jYWNoZXNbY29udGV4dElkXTtcclxuICAgICAgICB0aGlzLl9jb250ZXh0ID0ge307XHJcbiAgICB9LFxyXG5cclxuICAgIGRlbGV0ZTogZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9jb250ZXh0W2tleV07XHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyQWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fY2FjaGVzID0ge307XHJcbiAgICB9LFxyXG5cclxuICAgIGdldENvbnRleHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dDtcclxuICAgIH0sXHJcblxyXG4gICAgZWFjaENvbnRleHQgOiBmdW5jdGlvbiAoY2IsIGNvbnRleHQpIHtcclxuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuX2NhY2hlcyk7XHJcbiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgY2IgJiYgY2IuY2FsbChjb250ZXh0LCBrZXkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBtaXNzOiBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuICEgdGhpcy5fY29udGV4dC5oYXNPd25Qcm9wZXJ0eShrZXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuQ2FjaGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FjaGU7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDYWNoZTtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgQ2FjaGUgZnJvbSAnLi9jb3JlL0NhY2hlJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxuXHJcbmZ1bmN0aW9uIGdldEFycmF5Q3RvckJ5VHlwZSAodHlwZSkge1xyXG4gICAgcmV0dXJuICh7XHJcbiAgICAgICAgJ2J5dGUnOiB2ZW5kb3IuSW50OEFycmF5LFxyXG4gICAgICAgICd1Ynl0ZSc6IHZlbmRvci5VaW50OEFycmF5LFxyXG4gICAgICAgICdzaG9ydCc6IHZlbmRvci5JbnQxNkFycmF5LFxyXG4gICAgICAgICd1c2hvcnQnOiB2ZW5kb3IuVWludDE2QXJyYXlcclxuICAgIH0pW3R5cGVdIHx8IHZlbmRvci5GbG9hdDMyQXJyYXk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1ha2VBdHRyS2V5KGF0dHJOYW1lKSB7XHJcbiAgICByZXR1cm4gJ2F0dHJfJyArIGF0dHJOYW1lO1xyXG59XHJcbi8qKlxyXG4gKiBHZW9tZXRyeUJhc2UgYXR0cmlidXRlXHJcbiAqIEBhbGlhcyBjbGF5Lkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGVcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqL1xyXG5mdW5jdGlvbiBBdHRyaWJ1dGUobmFtZSwgdHlwZSwgc2l6ZSwgc2VtYW50aWMpIHtcclxuICAgIC8qKlxyXG4gICAgICogQXR0cmlidXRlIG5hbWVcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAvKipcclxuICAgICAqIEF0dHJpYnV0ZSB0eXBlXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyBgJ2J5dGUnYFxyXG4gICAgICogICsgYCd1Ynl0ZSdgXHJcbiAgICAgKiAgKyBgJ3Nob3J0J2BcclxuICAgICAqICArIGAndXNob3J0J2BcclxuICAgICAqICArIGAnZmxvYXQnYCBNb3N0IGNvbW1vbmx5IHVzZWQuXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBTaXplIG9mIGF0dHJpYnV0ZSBjb21wb25lbnQuIDEgLSA0LlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5zaXplID0gc2l6ZTtcclxuICAgIC8qKlxyXG4gICAgICogU2VtYW50aWMgb2YgdGhpcyBhdHRyaWJ1dGUuXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyBgJ1BPU0lUSU9OJ2BcclxuICAgICAqICArIGAnTk9STUFMJ2BcclxuICAgICAqICArIGAnQklOT1JNQUwnYFxyXG4gICAgICogICsgYCdUQU5HRU5UJ2BcclxuICAgICAqICArIGAnVEVYQ09PUkQnYFxyXG4gICAgICogICsgYCdURVhDT09SRF8wJ2BcclxuICAgICAqICArIGAnVEVYQ09PUkRfMSdgXHJcbiAgICAgKiAgKyBgJ0NPTE9SJ2BcclxuICAgICAqICArIGAnSk9JTlQnYFxyXG4gICAgICogICsgYCdXRUlHSFQnYFxyXG4gICAgICpcclxuICAgICAqIEluIHNoYWRlciwgYXR0cmlidXRlIHdpdGggc2FtZSBzZW1hbnRpYyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgbWFwcGVkLiBGb3IgZXhhbXBsZTpcclxuICAgICAqIGBgYGdsc2xcclxuICAgICAqIGF0dHJpYnV0ZSB2ZWMzIHBvczogUE9TSVRJT05cclxuICAgICAqIGBgYFxyXG4gICAgICogd2lsbCB1c2UgdGhlIGF0dHJpYnV0ZSB2YWx1ZSB3aXRoIHNlbWFudGljIFBPU0lUSU9OIGluIGdlb21ldHJ5LCBubyBtYXR0ZXIgd2hhdCBuYW1lIGl0IHVzZWQuXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnNlbWFudGljID0gc2VtYW50aWMgfHwgJyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWx1ZSBvZiB0aGUgYXR0cmlidXRlLlxyXG4gICAgICogQHR5cGUge1R5cGVkQXJyYXl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG5cclxuICAgIC8vIEluaXQgZ2V0dGVyIHNldHRlclxyXG4gICAgc3dpdGNoIChzaXplKSB7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICB0aGlzLmdldCA9IGZ1bmN0aW9uIChpZHgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlW2lkeF07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gZnVuY3Rpb24gKGlkeCwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaWR4XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvLyBDb3B5IGZyb20gc291cmNlIHRvIHRhcmdldFxyXG4gICAgICAgICAgICB0aGlzLmNvcHkgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbdGFyZ2V0XSA9IHRoaXMudmFsdWVbdGFyZ2V0XTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICB0aGlzLmdldCA9IGZ1bmN0aW9uIChpZHgsIG91dCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBvdXRbMF0gPSBhcnJbaWR4ICogMl07XHJcbiAgICAgICAgICAgICAgICBvdXRbMV0gPSBhcnJbaWR4ICogMiArIDFdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZXQgPSBmdW5jdGlvbiAoaWR4LCB2YWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeCAqIDJdID0gdmFsWzBdO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeCAqIDIgKyAxXSA9IHZhbFsxXTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5jb3B5ID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIHNvdXJjZSAqPSAyO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ICo9IDI7XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0XSA9IGFycltzb3VyY2VdO1xyXG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldCArIDFdID0gYXJyW3NvdXJjZSArIDFdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24gKGlkeCwgb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4MyA9IGlkeCAqIDM7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIG91dFswXSA9IGFycltpZHgzXTtcclxuICAgICAgICAgICAgICAgIG91dFsxXSA9IGFycltpZHgzICsgMV07XHJcbiAgICAgICAgICAgICAgICBvdXRbMl0gPSBhcnJbaWR4MyArIDJdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZXQgPSBmdW5jdGlvbiAoaWR4LCB2YWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpZHgzID0gaWR4ICogMztcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeDNdID0gdmFsWzBdO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeDMgKyAxXSA9IHZhbFsxXTtcclxuICAgICAgICAgICAgICAgIGFycltpZHgzICsgMl0gPSB2YWxbMl07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuY29weSA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2UgKj0gMztcclxuICAgICAgICAgICAgICAgIHRhcmdldCAqPSAzO1xyXG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldF0gPSBhcnJbc291cmNlXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAxXSA9IGFycltzb3VyY2UgKyAxXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAyXSA9IGFycltzb3VyY2UgKyAyXTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICB0aGlzLmdldCA9IGZ1bmN0aW9uIChpZHgsIG91dCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4NCA9IGlkeCAqIDQ7XHJcbiAgICAgICAgICAgICAgICBvdXRbMF0gPSBhcnJbaWR4NF07XHJcbiAgICAgICAgICAgICAgICBvdXRbMV0gPSBhcnJbaWR4NCArIDFdO1xyXG4gICAgICAgICAgICAgICAgb3V0WzJdID0gYXJyW2lkeDQgKyAyXTtcclxuICAgICAgICAgICAgICAgIG91dFszXSA9IGFycltpZHg0ICsgM107XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNldCA9IGZ1bmN0aW9uIChpZHgsIHZhbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4NCA9IGlkeCAqIDQ7XHJcbiAgICAgICAgICAgICAgICBhcnJbaWR4NF0gPSB2YWxbMF07XHJcbiAgICAgICAgICAgICAgICBhcnJbaWR4NCArIDFdID0gdmFsWzFdO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeDQgKyAyXSA9IHZhbFsyXTtcclxuICAgICAgICAgICAgICAgIGFycltpZHg0ICsgM10gPSB2YWxbM107XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuY29weSA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2UgKj0gNDtcclxuICAgICAgICAgICAgICAgIHRhcmdldCAqPSA0O1xyXG4gICAgICAgICAgICAgICAgLy8gY29weVdpdGhpbiBpcyBleHRyZW1lbHkgc2xvd1xyXG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldF0gPSBhcnJbc291cmNlXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAxXSA9IGFycltzb3VyY2UgKyAxXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAyXSA9IGFycltzb3VyY2UgKyAyXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAzXSA9IGFycltzb3VyY2UgKyAzXTtcclxuICAgICAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFNldCBpdGVtIHZhbHVlIGF0IGdpdmUgaW5kZXguIFNlY29uZCBwYXJhbWV0ZXIgdmFsIGlzIG51bWJlciBpZiBzaXplIGlzIDFcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBuYW1lIGNsYXkuR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZSNzZXRcclxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gKiBAcGFyYW0ge251bWJlcltdfG51bWJlcn0gdmFsXHJcbiAqIEBleGFtcGxlXHJcbiAqIGdlb21ldHJ5LmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKS5zZXQoMCwgWzEsIDEsIDFdKTtcclxuICovXHJcblxyXG4vKipcclxuICogR2V0IGl0ZW0gdmFsdWUgYXQgZ2l2ZSBpbmRleC4gU2Vjb25kIHBhcmFtZXRlciBvdXQgaXMgbm8gbmVlZCBpZiBzaXplIGlzIDFcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBuYW1lIGNsYXkuR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZSNzZXRcclxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gKiBAcGFyYW0ge251bWJlcltdfSBbb3V0XVxyXG4gKiBAZXhhbXBsZVxyXG4gKiBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJykuZ2V0KDAsIG91dCk7XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEluaXRpYWxpemUgYXR0cmlidXRlIHdpdGggZ2l2ZW4gdmVydGV4IGNvdW50XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBuVmVydGV4XHJcbiAqL1xyXG5BdHRyaWJ1dGUucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoblZlcnRleCkge1xyXG4gICAgaWYgKCF0aGlzLnZhbHVlIHx8IHRoaXMudmFsdWUubGVuZ3RoICE9IG5WZXJ0ZXggKiB0aGlzLnNpemUpIHtcclxuICAgICAgICB2YXIgQXJyYXlDb25zdHJ1Y3RvciA9IGdldEFycmF5Q3RvckJ5VHlwZSh0aGlzLnR5cGUpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihuVmVydGV4ICogdGhpcy5zaXplKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbml0aWFsaXplIGF0dHJpYnV0ZSB3aXRoIGdpdmVuIGFycmF5LiBXaGljaCBjYW4gYmUgMSBkaW1lbnNpb25hbCBvciAyIGRpbWVuc2lvbmFsXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XHJcbiAqIEBleGFtcGxlXHJcbiAqICBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJykuZnJvbUFycmF5KFxyXG4gKiAgICAgIFstMSwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMF1cclxuICogICk7XHJcbiAqICBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJykuZnJvbUFycmF5KFxyXG4gKiAgICAgIFsgWy0xLCAwLCAwXSwgWzEsIDAsIDBdLCBbMCwgMSwgMF0gXVxyXG4gKiAgKTtcclxuICovXHJcbkF0dHJpYnV0ZS5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KSB7XHJcbiAgICB2YXIgQXJyYXlDb25zdHJ1Y3RvciA9IGdldEFycmF5Q3RvckJ5VHlwZSh0aGlzLnR5cGUpO1xyXG4gICAgdmFyIHZhbHVlO1xyXG4gICAgLy8gQ29udmVydCAyZCBhcnJheSB0byBmbGF0XHJcbiAgICBpZiAoYXJyYXlbMF0gJiYgKGFycmF5WzBdLmxlbmd0aCkpIHtcclxuICAgICAgICB2YXIgbiA9IDA7XHJcbiAgICAgICAgdmFyIHNpemUgPSB0aGlzLnNpemU7XHJcbiAgICAgICAgdmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihhcnJheS5sZW5ndGggKiBzaXplKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZVtuKytdID0gYXJyYXlbaV1bal07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YWx1ZSA9IG5ldyBBcnJheUNvbnN0cnVjdG9yKGFycmF5KTtcclxuICAgIH1cclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxufTtcclxuXHJcbkF0dHJpYnV0ZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbihjb3B5VmFsdWUpIHtcclxuICAgIHZhciByZXQgPSBuZXcgQXR0cmlidXRlKHRoaXMubmFtZSwgdGhpcy50eXBlLCB0aGlzLnNpemUsIHRoaXMuc2VtYW50aWMpO1xyXG4gICAgLy8gRklYTUVcclxuICAgIGlmIChjb3B5VmFsdWUpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ3RvZG8nKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXQ7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBBdHRyaWJ1dGVCdWZmZXIobmFtZSwgdHlwZSwgYnVmZmVyLCBzaXplLCBzZW1hbnRpYykge1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIHRoaXMudHlwZSA9IHR5cGU7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcclxuICAgIHRoaXMuc2l6ZSA9IHNpemU7XHJcbiAgICB0aGlzLnNlbWFudGljID0gc2VtYW50aWM7XHJcblxyXG4gICAgLy8gVG8gYmUgc2V0IGluIG1lc2hcclxuICAgIC8vIHN5bWJvbCBpbiB0aGUgc2hhZGVyXHJcbiAgICB0aGlzLnN5bWJvbCA9ICcnO1xyXG5cclxuICAgIC8vIE5lZWRzIHJlbW92ZSBmbGFnXHJcbiAgICB0aGlzLm5lZWRzUmVtb3ZlID0gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEluZGljZXNCdWZmZXIoYnVmZmVyKSB7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcclxuICAgIHRoaXMuY291bnQgPSAwO1xyXG59XHJcblxyXG4vKipcclxuICogQmFzZSBvZiBhbGwgZ2VvbWV0cnkuIFVzZSB7QGxpbmsgY2xheS5HZW9tZXRyeX0gZm9yIGNvbW1vbiAzRCB1c2FnZS5cclxuICogQGNvbnN0cnVjdG9yIGNsYXkuR2VvbWV0cnlCYXNlXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgR2VvbWV0cnlCYXNlID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5HZW9tZXRyeUJhc2UjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBdHRyaWJ1dGVzIG9mIGdlb21ldHJ5LlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3QuPHN0cmluZywgY2xheS5HZW9tZXRyeUJhc2UuQXR0cmlidXRlPn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhdHRyaWJ1dGVzOiB7fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW5kaWNlcyBvZiBnZW9tZXRyeS5cclxuICAgICAgICAgKiBAdHlwZSB7VWludDE2QXJyYXl8VWludDMyQXJyYXl9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5kaWNlczogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdmVydGljZXMgZGF0YSBkeW5hbWljYWxseSB1cGRhdGVkLlxyXG4gICAgICAgICAqIEF0dHJpYnV0ZXMgdmFsdWUgY2FuJ3QgYmUgY2hhbmdlZCBhZnRlciBmaXJzdCByZW5kZXIgaWYgZHlhbm1pYyBpcyBmYWxzZS5cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkeW5hbWljOiB0cnVlLFxyXG5cclxuICAgICAgICBfZW5hYmxlZEF0dHJpYnV0ZXM6IG51bGwsXHJcblxyXG4gICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAvLyBJbml0IGl0IGhlcmUgdG8gYXZvaWQgZGVvcHRpbWl6YXRpb24gd2hlbiBpdCdzIGFzc2lnbmVkIGluIGFwcGxpY2F0aW9uIGR5bmFtaWNhbGx5XHJcbiAgICAgICAgX191c2VkOiAwXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbigpIHtcclxuICAgIC8vIFVzZSBjYWNoZVxyXG4gICAgdGhpcy5fY2FjaGUgPSBuZXcgQ2FjaGUoKTtcclxuXHJcbiAgICB0aGlzLl9hdHRyaWJ1dGVMaXN0ID0gT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKTtcclxuXHJcbiAgICB0aGlzLl9fdmFvQ2FjaGUgPSB7fTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5Lkdlb21ldHJ5QmFzZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBNYWluIGF0dHJpYnV0ZSB3aWxsIGJlIHVzZWQgdG8gY291bnQgdmVydGV4IG51bWJlclxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgbWFpbkF0dHJpYnV0ZTogJycsXHJcbiAgICAvKipcclxuICAgICAqIFVzZXIgZGVmaW5lZCBwaWNraW5nIGFsZ29yaXRobSBpbnN0ZWFkIG9mIGRlZmF1bHRcclxuICAgICAqIHRyaWFuZ2xlIHJheSBpbnRlcnNlY3Rpb25cclxuICAgICAqIHgsIHkgYXJlIE5EQy5cclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqICh4LCB5LCByZW5kZXJlciwgY2FtZXJhLCByZW5kZXJhYmxlLCBvdXQpID0+IGJvb2xlYW5cclxuICAgICAqIGBgYFxyXG4gICAgICogQHR5cGUgez9GdW5jdGlvbn1cclxuICAgICAqL1xyXG4gICAgcGljazogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZXIgZGVmaW5lZCByYXkgcGlja2luZyBhbGdvcml0aG0gaW5zdGVhZCBvZiBkZWZhdWx0XHJcbiAgICAgKiB0cmlhbmdsZSByYXkgaW50ZXJzZWN0aW9uXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAocmF5OiBjbGF5LlJheSwgcmVuZGVyYWJsZTogY2xheS5SZW5kZXJhYmxlLCBvdXQ6IEFycmF5KSA9PiBib29sZWFuXHJcbiAgICAgKiBgYGBcclxuICAgICAqIEB0eXBlIHs/RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIHBpY2tCeVJheTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmsgYXR0cmlidXRlcyBhbmQgaW5kaWNlcyBpbiBnZW9tZXRyeSBuZWVkcyB0byB1cGRhdGUuXHJcbiAgICAgKiBVc3VhbGx5IGNhbGxlZCBhZnRlciB5b3UgY2hhbmdlIHRoZSBkYXRhIGluIGF0dHJpYnV0ZXMuXHJcbiAgICAgKi9cclxuICAgIGRpcnR5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGVuYWJsZWRBdHRyaWJ1dGVzID0gdGhpcy5nZXRFbmFibGVkQXR0cmlidXRlcygpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5hYmxlZEF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5kaXJ0eUF0dHJpYnV0ZShlbmFibGVkQXR0cmlidXRlc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlydHlJbmRpY2VzKCk7XHJcbiAgICAgICAgdGhpcy5fZW5hYmxlZEF0dHJpYnV0ZXMgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLl9jYWNoZS5kaXJ0eSgnYW55Jyk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIHRoZSBpbmRpY2VzIG5lZWRzIHRvIHVwZGF0ZS5cclxuICAgICAqL1xyXG4gICAgZGlydHlJbmRpY2VzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fY2FjaGUuZGlydHlBbGwoJ2luZGljZXMnKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIE1hcmsgdGhlIGF0dHJpYnV0ZXMgbmVlZHMgdG8gdXBkYXRlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFthdHRyTmFtZV1cclxuICAgICAqL1xyXG4gICAgZGlydHlBdHRyaWJ1dGU6IGZ1bmN0aW9uIChhdHRyTmFtZSkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlLmRpcnR5QWxsKG1ha2VBdHRyS2V5KGF0dHJOYW1lKSk7XHJcbiAgICAgICAgdGhpcy5fY2FjaGUuZGlydHlBbGwoJ2F0dHJpYnV0ZXMnKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBpbmRpY2VzIG9mIHRyaWFuZ2xlIGF0IGdpdmVuIGluZGV4LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gICAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gb3V0XHJcbiAgICAgKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgZ2V0VHJpYW5nbGVJbmRpY2VzOiBmdW5jdGlvbiAoaWR4LCBvdXQpIHtcclxuICAgICAgICBpZiAoaWR4IDwgdGhpcy50cmlhbmdsZUNvdW50ICYmIGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgICAgICBvdXQgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICAgICAgb3V0WzBdID0gaW5kaWNlc1tpZHggKiAzXTtcclxuICAgICAgICAgICAgb3V0WzFdID0gaW5kaWNlc1tpZHggKiAzICsgMV07XHJcbiAgICAgICAgICAgIG91dFsyXSA9IGluZGljZXNbaWR4ICogMyArIDJdO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgaW5kaWNlcyBvZiB0cmlhbmdsZSBhdCBnaXZlbiBpbmRleC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxyXG4gICAgICovXHJcbiAgICBzZXRUcmlhbmdsZUluZGljZXM6IGZ1bmN0aW9uIChpZHgsIGFycikge1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG4gICAgICAgIGluZGljZXNbaWR4ICogM10gPSBhcnJbMF07XHJcbiAgICAgICAgaW5kaWNlc1tpZHggKiAzICsgMV0gPSBhcnJbMV07XHJcbiAgICAgICAgaW5kaWNlc1tpZHggKiAzICsgMl0gPSBhcnJbMl07XHJcbiAgICB9LFxyXG5cclxuICAgIGlzVXNlSW5kaWNlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuaW5kaWNlcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplIGluZGljZXMgZnJvbSBhbiBhcnJheS5cclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XHJcbiAgICAgKi9cclxuICAgIGluaXRJbmRpY2VzRnJvbUFycmF5OiBmdW5jdGlvbiAoYXJyYXkpIHtcclxuICAgICAgICB2YXIgdmFsdWU7XHJcbiAgICAgICAgdmFyIEFycmF5Q29uc3RydWN0b3IgPSB0aGlzLnZlcnRleENvdW50ID4gMHhmZmZmXHJcbiAgICAgICAgICAgID8gdmVuZG9yLlVpbnQzMkFycmF5IDogdmVuZG9yLlVpbnQxNkFycmF5O1xyXG4gICAgICAgIC8vIENvbnZlcnQgMmQgYXJyYXkgdG8gZmxhdFxyXG4gICAgICAgIGlmIChhcnJheVswXSAmJiAoYXJyYXlbMF0ubGVuZ3RoKSkge1xyXG4gICAgICAgICAgICB2YXIgbiA9IDA7XHJcbiAgICAgICAgICAgIHZhciBzaXplID0gMztcclxuXHJcbiAgICAgICAgICAgIHZhbHVlID0gbmV3IEFycmF5Q29uc3RydWN0b3IoYXJyYXkubGVuZ3RoICogc2l6ZSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVbbisrXSA9IGFycmF5W2ldW2pdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IG5ldyBBcnJheUNvbnN0cnVjdG9yKGFycmF5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW5kaWNlcyA9IHZhbHVlO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgbmV3IGF0dHJpYnV0ZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZW1hbnRpY11cclxuICAgICAqL1xyXG4gICAgY3JlYXRlQXR0cmlidXRlOiBmdW5jdGlvbiAobmFtZSwgdHlwZSwgc2l6ZSwgc2VtYW50aWMpIHtcclxuICAgICAgICB2YXIgYXR0cmliID0gbmV3IEF0dHJpYnV0ZShuYW1lLCB0eXBlLCBzaXplLCBzZW1hbnRpYyk7XHJcbiAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlc1tuYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW25hbWVdID0gYXR0cmliO1xyXG4gICAgICAgIHRoaXMuX2F0dHJpYnV0ZUxpc3QucHVzaChuYW1lKTtcclxuICAgICAgICByZXR1cm4gYXR0cmliO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGF0dHJpYnV0ZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQXR0cmlidXRlOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVMaXN0ID0gdGhpcy5fYXR0cmlidXRlTGlzdDtcclxuICAgICAgICB2YXIgaWR4ID0gYXR0cmlidXRlTGlzdC5pbmRleE9mKG5hbWUpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICBhdHRyaWJ1dGVMaXN0LnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhdHRyaWJ1dGVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGV9XHJcbiAgICAgKi9cclxuICAgIGdldEF0dHJpYnV0ZTogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBlbmFibGVkIGF0dHJpYnV0ZXMgbmFtZSBsaXN0XHJcbiAgICAgKiBBdHRyaWJ1dGUgd2hpY2ggaGFzIHRoZSBzYW1lIHZlcnRleCBudW1iZXIgd2l0aCBwb3NpdGlvbiBpcyB0cmVhdGVkIGFzIGEgZW5hYmxlZCBhdHRyaWJ1dGVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfVxyXG4gICAgICovXHJcbiAgICBnZXRFbmFibGVkQXR0cmlidXRlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBlbmFibGVkQXR0cmlidXRlcyA9IHRoaXMuX2VuYWJsZWRBdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVMaXN0ID0gdGhpcy5fYXR0cmlidXRlTGlzdDtcclxuICAgICAgICAvLyBDYWNoZVxyXG4gICAgICAgIGlmIChlbmFibGVkQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gZW5hYmxlZEF0dHJpYnV0ZXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgdmFyIG5WZXJ0ZXggPSB0aGlzLnZlcnRleENvdW50O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZUxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVMaXN0W2ldO1xyXG4gICAgICAgICAgICB2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoYXR0cmliLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXR0cmliLnZhbHVlLmxlbmd0aCA9PT0gblZlcnRleCAqIGF0dHJpYi5zaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2VuYWJsZWRBdHRyaWJ1dGVzID0gcmVzdWx0O1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRCdWZmZXJDaHVua3M6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcclxuICAgICAgICB2YXIgaXNBdHRyaWJ1dGVzRGlydHkgPSBjYWNoZS5pc0RpcnR5KCdhdHRyaWJ1dGVzJyk7XHJcbiAgICAgICAgdmFyIGlzSW5kaWNlc0RpcnR5ID0gY2FjaGUuaXNEaXJ0eSgnaW5kaWNlcycpO1xyXG4gICAgICAgIGlmIChpc0F0dHJpYnV0ZXNEaXJ0eSB8fCBpc0luZGljZXNEaXJ0eSkge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVCdWZmZXIocmVuZGVyZXIuZ2wsIGlzQXR0cmlidXRlc0RpcnR5LCBpc0luZGljZXNEaXJ0eSk7XHJcbiAgICAgICAgICAgIHZhciBlbmFibGVkQXR0cmlidXRlcyA9IHRoaXMuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkQXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY2FjaGUuZnJlc2gobWFrZUF0dHJLZXkoZW5hYmxlZEF0dHJpYnV0ZXNbaV0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYWNoZS5mcmVzaCgnYXR0cmlidXRlcycpO1xyXG4gICAgICAgICAgICBjYWNoZS5mcmVzaCgnaW5kaWNlcycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYWNoZS5mcmVzaCgnYW55Jyk7XHJcbiAgICAgICAgcmV0dXJuIGNhY2hlLmdldCgnY2h1bmtzJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVCdWZmZXI6IGZ1bmN0aW9uIChfZ2wsIGlzQXR0cmlidXRlc0RpcnR5LCBpc0luZGljZXNEaXJ0eSkge1xyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG4gICAgICAgIHZhciBjaHVua3MgPSBjYWNoZS5nZXQoJ2NodW5rcycpO1xyXG4gICAgICAgIHZhciBmaXJzdFVwZGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghY2h1bmtzKSB7XHJcbiAgICAgICAgICAgIGNodW5rcyA9IFtdO1xyXG4gICAgICAgICAgICAvLyBJbnRpYWxpemVcclxuICAgICAgICAgICAgY2h1bmtzWzBdID0ge1xyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlQnVmZmVyczogW10sXHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzQnVmZmVyOiBudWxsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNhY2hlLnB1dCgnY2h1bmtzJywgY2h1bmtzKTtcclxuICAgICAgICAgICAgZmlyc3RVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNodW5rID0gY2h1bmtzWzBdO1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVCdWZmZXJzID0gY2h1bmsuYXR0cmlidXRlQnVmZmVycztcclxuICAgICAgICB2YXIgaW5kaWNlc0J1ZmZlciA9IGNodW5rLmluZGljZXNCdWZmZXI7XHJcblxyXG4gICAgICAgIGlmIChpc0F0dHJpYnV0ZXNEaXJ0eSB8fCBmaXJzdFVwZGF0ZSkge1xyXG4gICAgICAgICAgICB2YXIgYXR0cmlidXRlTGlzdCA9IHRoaXMuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVCdWZmZXJNYXAgPSB7fTtcclxuICAgICAgICAgICAgaWYgKCFmaXJzdFVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlQnVmZmVyTWFwW2F0dHJpYnV0ZUJ1ZmZlcnNbaV0ubmFtZV0gPSBhdHRyaWJ1dGVCdWZmZXJzW2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIElmIHNvbWUgYXR0cmlidXRlcyByZW1vdmVkXHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYXR0cmlidXRlTGlzdC5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVMaXN0W2tdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgYnVmZmVySW5mbztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWZpcnN0VXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVySW5mbyA9IGF0dHJpYnV0ZUJ1ZmZlck1hcFtuYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBidWZmZXI7XHJcbiAgICAgICAgICAgICAgICBpZiAoYnVmZmVySW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlckluZm8uYnVmZmVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gX2dsLmNyZWF0ZUJ1ZmZlcigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNhY2hlLmlzRGlydHkobWFrZUF0dHJLZXkobmFtZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSB1cGRhdGUgd2hlbiB0aGV5IGFyZSBkaXJ0eS5cclxuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBVc2UgQnVmZmVyU3ViRGF0YT9cclxuICAgICAgICAgICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlcihfZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9nbC5idWZmZXJEYXRhKF9nbC5BUlJBWV9CVUZGRVIsIGF0dHJpYnV0ZS52YWx1ZSwgdGhpcy5keW5hbWljID8gZ2xlbnVtLkRZTkFNSUNfRFJBVyA6IGdsZW51bS5TVEFUSUNfRFJBVyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlQnVmZmVyc1trXSA9IG5ldyBBdHRyaWJ1dGVCdWZmZXIobmFtZSwgYXR0cmlidXRlLnR5cGUsIGJ1ZmZlciwgYXR0cmlidXRlLnNpemUsIGF0dHJpYnV0ZS5zZW1hbnRpYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUmVtb3ZlIHVudXNlZCBhdHRyaWJ1dGVzIGJ1ZmZlcnMuXHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGs7IGkgPCBhdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZGVsZXRlQnVmZmVyKGF0dHJpYnV0ZUJ1ZmZlcnNbaV0uYnVmZmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aCA9IGs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNVc2VJbmRpY2VzKCkgJiYgKGlzSW5kaWNlc0RpcnR5IHx8IGZpcnN0VXBkYXRlKSkge1xyXG4gICAgICAgICAgICBpZiAoIWluZGljZXNCdWZmZXIpIHtcclxuICAgICAgICAgICAgICAgIGluZGljZXNCdWZmZXIgPSBuZXcgSW5kaWNlc0J1ZmZlcihfZ2wuY3JlYXRlQnVmZmVyKCkpO1xyXG4gICAgICAgICAgICAgICAgY2h1bmsuaW5kaWNlc0J1ZmZlciA9IGluZGljZXNCdWZmZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW5kaWNlc0J1ZmZlci5jb3VudCA9IHRoaXMuaW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIF9nbC5iaW5kQnVmZmVyKF9nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgaW5kaWNlc0J1ZmZlci5idWZmZXIpO1xyXG4gICAgICAgICAgICBfZ2wuYnVmZmVyRGF0YShfZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kaWNlcywgdGhpcy5keW5hbWljID8gZ2xlbnVtLkRZTkFNSUNfRFJBVyA6IGdsZW51bS5TVEFUSUNfRFJBVyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgZ2VvbWV0cnkgZGF0YSBpbiBHTCBjb250ZXh0LlxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuXHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcblxyXG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcclxuICAgICAgICB2YXIgY2h1bmtzID0gY2FjaGUuZ2V0KCdjaHVua3MnKTtcclxuICAgICAgICBpZiAoY2h1bmtzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY2h1bmtzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBjaHVua3NbY107XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBjaHVuay5hdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnMgPSBjaHVuay5hdHRyaWJ1dGVCdWZmZXJzW2tdO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLmdsLmRlbGV0ZUJ1ZmZlcihhdHRyaWJzLmJ1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNodW5rLmluZGljZXNCdWZmZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5nbC5kZWxldGVCdWZmZXIoY2h1bmsuaW5kaWNlc0J1ZmZlci5idWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9fdmFvQ2FjaGUpIHtcclxuICAgICAgICAgICAgdmFyIHZhb0V4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9fdmFvQ2FjaGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YW8gPSB0aGlzLl9fdmFvQ2FjaGVbaWRdLnZhbztcclxuICAgICAgICAgICAgICAgIGlmICh2YW8pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YW9FeHQuZGVsZXRlVmVydGV4QXJyYXlPRVModmFvKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9fdmFvQ2FjaGUgPSB7fTtcclxuICAgICAgICBjYWNoZS5kZWxldGVDb250ZXh0KHJlbmRlcmVyLl9fdWlkX18pO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIGNsYXkuR2VvbWV0cnlCYXNlI3ZlcnRleENvdW50XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHZW9tZXRyeUJhc2UucHJvdG90eXBlLCAndmVydGV4Q291bnQnLCB7XHJcblxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBtYWluQXR0cmlidXRlID0gdGhpcy5hdHRyaWJ1dGVzW3RoaXMubWFpbkF0dHJpYnV0ZV07XHJcblxyXG4gICAgICAgICAgICBpZiAoIW1haW5BdHRyaWJ1dGUpIHtcclxuICAgICAgICAgICAgICAgIG1haW5BdHRyaWJ1dGUgPSB0aGlzLmF0dHJpYnV0ZXNbdGhpcy5fYXR0cmlidXRlTGlzdFswXV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghbWFpbkF0dHJpYnV0ZSB8fCAhbWFpbkF0dHJpYnV0ZS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG1haW5BdHRyaWJ1dGUudmFsdWUubGVuZ3RoIC8gbWFpbkF0dHJpYnV0ZS5zaXplO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBjbGF5Lkdlb21ldHJ5QmFzZSN0cmlhbmdsZUNvdW50XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHZW9tZXRyeUJhc2UucHJvdG90eXBlLCAndHJpYW5nbGVDb3VudCcsIHtcclxuXHJcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICAgICAgaWYgKCFpbmRpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbmRpY2VzLmxlbmd0aCAvIDM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuR2VvbWV0cnlCYXNlLlNUQVRJQ19EUkFXID0gZ2xlbnVtLlNUQVRJQ19EUkFXO1xyXG5HZW9tZXRyeUJhc2UuRFlOQU1JQ19EUkFXID0gZ2xlbnVtLkRZTkFNSUNfRFJBVztcclxuR2VvbWV0cnlCYXNlLlNUUkVBTV9EUkFXID0gZ2xlbnVtLlNUUkVBTV9EUkFXO1xyXG5cclxuR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZUJ1ZmZlciA9IEF0dHJpYnV0ZUJ1ZmZlcjtcclxuR2VvbWV0cnlCYXNlLkluZGljZXNCdWZmZXIgPSBJbmRpY2VzQnVmZmVyO1xyXG5cclxuR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdlb21ldHJ5QmFzZTtcclxuIiwiaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi9nbG1hdHJpeC92ZWMzJztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCBHZW9tZXRyeUJhc2UgZnJvbSAnLi9HZW9tZXRyeUJhc2UnO1xyXG5cclxudmFyIHZlYzNDcmVhdGUgPSB2ZWMzLmNyZWF0ZTtcclxudmFyIHZlYzNBZGQgPSB2ZWMzLmFkZDtcclxudmFyIHZlYzNTZXQgPSB2ZWMzLnNldDtcclxuXHJcbnZhciBBdHRyaWJ1dGUgPSBHZW9tZXRyeUJhc2UuQXR0cmlidXRlO1xyXG5cclxuLyoqXHJcbiAqIEdlb21ldHJ5IGluIENsYXlHTCBjb250YWlucyB2ZXJ0ZXggYXR0cmlidXRlcyBvZiBtZXNoLiBUaGVzZSB2ZXJ0ZXggYXR0cmlidXRlcyB3aWxsIGJlIGZpbmFsbHkgcHJvdmlkZWQgdG8gdGhlIHtAbGluayBjbGF5LlNoYWRlcn0uXHJcbiAqIERpZmZlcmVudCB7QGxpbmsgY2xheS5TaGFkZXJ9IG5lZWRzIGRpZmZlcmVudCBhdHRyaWJ1dGVzLiBIZXJlIGlzIGEgbGlzdCBvZiBhdHRyaWJ1dGVzIHVzZWQgaW4gdGhlIGJ1aWx0aW4gc2hhZGVycy5cclxuICpcclxuICogKyBwb3NpdGlvbjogYGNsYXkuYmFzaWNgLCBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgdGV4Y29vcmQwOiBgY2xheS5iYXNpY2AsIGBjbGF5LmxhbWJlcnRgLCBgY2xheS5zdGFuZGFyZGBcclxuICogKyBjb2xvcjogYGNsYXkuYmFzaWNgLCBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgd2VpZ2h0OiBgY2xheS5iYXNpY2AsIGBjbGF5LmxhbWJlcnRgLCBgY2xheS5zdGFuZGFyZGBcclxuICogKyBqb2ludDogYGNsYXkuYmFzaWNgLCBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgbm9ybWFsOiBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgdGFuZ2VudDogYGNsYXkuc3RhbmRhcmRgXHJcbiAqXHJcbiAqICMjIyMgQ3JlYXRlIGEgcHJvY2VkdXJhbCBnZW9tZXRyeVxyXG4gKlxyXG4gKiBDbGF5R0wgcHJvdmlkZXMgYSBjb3VwbGUgb2YgYnVpbHRpbiBwcm9jZWR1cmFsIGdlb21ldHJpZXMuIElubGN1ZGluZzpcclxuICpcclxuICogICsge0BsaW5rIGNsYXkuZ2VvbWV0cnkuQ3ViZX1cclxuICogICsge0BsaW5rIGNsYXkuZ2VvbWV0cnkuU3BoZXJlfVxyXG4gKiAgKyB7QGxpbmsgY2xheS5nZW9tZXRyeS5QbGFuZX1cclxuICogICsge0BsaW5rIGNsYXkuZ2VvbWV0cnkuQ3lsaW5kZXJ9XHJcbiAqICArIHtAbGluayBjbGF5Lmdlb21ldHJ5LkNvbmV9XHJcbiAqICArIHtAbGluayBjbGF5Lmdlb21ldHJ5LlBhcmFtZXRyaWNTdXJmYWNlfVxyXG4gKlxyXG4gKiBJdCdzIHNpbXBsZSB0byBjcmVhdGUgYSBiYXNpYyBnZW9tZXRyeSB3aXRoIHRoZXNlIGNsYXNzZXMuXHJcbiAqXHJcbmBgYGpzXHJcbnZhciBzcGhlcmUgPSBuZXcgY2xheS5nZW9tZXRyeS5TcGhlcmUoe1xyXG4gICAgcmFkaXVzOiAyXHJcbn0pO1xyXG5gYGBcclxuICpcclxuICogIyMjIyBDcmVhdGUgdGhlIGdlb21ldHJ5IGRhdGEgYnkgeW91cnNlbGZcclxuICpcclxuICogVXN1YWxseSB0aGUgdmVydGV4IGF0dHJpYnV0ZXMgZGF0YSBhcmUgY3JlYXRlZCBieSB0aGUge0BsaW5rIGNsYXkubG9hZGVyLkdMVEZ9IG9yIHByb2NlZHVyYWwgZ2VvbWV0cmllcyBsaWtlIHtAbGluayBjbGF5Lmdlb21ldHJ5LlNwaGVyZX0uXHJcbiAqIEJlc2lkZXMgdGhlc2UsIHlvdSBjYW4gY3JlYXRlIHRoZSBkYXRhIG1hbnVhbGx5LiBIZXJlIGlzIGEgc2ltcGxlIGV4YW1wbGUgdG8gY3JlYXRlIGEgdHJpYW5nbGUuXHJcbmBgYGpzXHJcbnZhciBUUklBTkdMRV9QT1NJVElPTlMgPSBbXHJcbiAgICBbLTAuNSwgLTAuNSwgMF0sXHJcbiAgICBbMC41LCAtMC41LCAwXSxcclxuICAgIFswLCAwLjUsIDBdXHJcbl07XHJcbnZhciBnZW9tZXRyeSA9IG5ldyBjbGF5LlN0YXRpY0dlb21ldHJ5QmFzZSgpO1xyXG4vLyBBZGQgdHJpYW5nbGUgdmVydGljZXMgdG8gcG9zaXRpb24gYXR0cmlidXRlLlxyXG5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmZyb21BcnJheShUUklBTkdMRV9QT1NJVElPTlMpO1xyXG5gYGBcclxuICogVGhlbiB5b3UgY2FuIHVzZSB0aGUgdXRpbGl0eSBtZXRob2RzIGxpa2UgYGdlbmVyYXRlVmVydGV4Tm9ybWFsc2AsIGBnZW5lcmF0ZVRhbmdlbnRzYCB0byBjcmVhdGUgdGhlIHJlbWFpbmluZyBuZWNlc3NhcnkgYXR0cmlidXRlcy5cclxuICpcclxuICpcclxuICogIyMjIyBVc2Ugd2l0aCBjdXN0b20gc2hhZGVyc1xyXG4gKlxyXG4gKiBJZiB5b3Ugd2FuJ3QgdG8gd3JpdGUgY3VzdG9tIHNoYWRlcnMuIERvbid0IGZvcmdldCB0byBhZGQgU0VNQU5USUNTIHRvIHRoZXNlIGF0dHJpYnV0ZXMuIEZvciBleGFtcGxlXHJcbiAqXHJcbiBgYGBnbHNsXHJcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcclxudW5pZm9ybSBtYXQ0IHdvcmxkSW52ZXJzZVRyYW5zcG9zZSA6IFdPUkxESU5WRVJTRVRSQU5TUE9TRTtcclxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XHJcblxyXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xyXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZCA6IFRFWENPT1JEXzA7XHJcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbCA6IE5PUk1BTDtcclxuYGBgXHJcbiAqIFRoZXNlIGBQT1NJVElPTmAsIGBURVhDT09SRF8wYCwgYE5PUk1BTGAgYXJlIFNFTUFOVElDUyB3aGljaCB3aWxsIG1hcCB0aGUgYXR0cmlidXRlcyBpbiBzaGFkZXIgdG8gdGhlIGF0dHJpYnV0ZXMgaW4gdGhlIEdlb21ldHJ5QmFzZVxyXG4gKlxyXG4gKiBBdmFpbGFibGUgYXR0cmlidXRlcyBTRU1BTlRJQ1MgaW5jbHVkZXMgYFBPU0lUSU9OYCwgYFRFWENPT1JEXzBgLCBgVEVYQ09PUkRfMWAgYE5PUk1BTGAsIGBUQU5HRU5UYCwgYENPTE9SYCwgYFdFSUdIVGAsIGBKT0lOVGAuXHJcbiAqXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlCYXNlXHJcbiAqL1xyXG52YXIgR2VvbWV0cnkgPSBHZW9tZXRyeUJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuR2VvbWV0cnkjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBdHRyaWJ1dGVzIG9mIGdlb21ldHJ5LiBJbmNsdWRpbmc6XHJcbiAgICAgICAgICogICsgYHBvc2l0aW9uYFxyXG4gICAgICAgICAqICArIGB0ZXhjb29yZDBgXHJcbiAgICAgICAgICogICsgYHRleGNvb3JkMWBcclxuICAgICAgICAgKiAgKyBgbm9ybWFsYFxyXG4gICAgICAgICAqICArIGB0YW5nZW50YFxyXG4gICAgICAgICAqICArIGBjb2xvcmBcclxuICAgICAgICAgKiAgKyBgd2VpZ2h0YFxyXG4gICAgICAgICAqICArIGBqb2ludGBcclxuICAgICAgICAgKiAgKyBgYmFyeWNlbnRyaWNgXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIGNsYXkuR2VvbWV0cnkuQXR0cmlidXRlPn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgQXR0cmlidXRlKCdwb3NpdGlvbicsICdmbG9hdCcsIDMsICdQT1NJVElPTicpLFxyXG4gICAgICAgICAgICB0ZXhjb29yZDA6IG5ldyBBdHRyaWJ1dGUoJ3RleGNvb3JkMCcsICdmbG9hdCcsIDIsICdURVhDT09SRF8wJyksXHJcbiAgICAgICAgICAgIHRleGNvb3JkMTogbmV3IEF0dHJpYnV0ZSgndGV4Y29vcmQxJywgJ2Zsb2F0JywgMiwgJ1RFWENPT1JEXzEnKSxcclxuICAgICAgICAgICAgbm9ybWFsOiBuZXcgQXR0cmlidXRlKCdub3JtYWwnLCAnZmxvYXQnLCAzLCAnTk9STUFMJyksXHJcbiAgICAgICAgICAgIHRhbmdlbnQ6IG5ldyBBdHRyaWJ1dGUoJ3RhbmdlbnQnLCAnZmxvYXQnLCA0LCAnVEFOR0VOVCcpLFxyXG4gICAgICAgICAgICBjb2xvcjogbmV3IEF0dHJpYnV0ZSgnY29sb3InLCAnZmxvYXQnLCA0LCAnQ09MT1InKSxcclxuICAgICAgICAgICAgLy8gU2tpbm5pbmcgYXR0cmlidXRlc1xyXG4gICAgICAgICAgICAvLyBFYWNoIHZlcnRleCBjYW4gYmUgYmluZCB0byA0IGJvbmVzLCBiZWNhdXNlIHRoZVxyXG4gICAgICAgICAgICAvLyBzdW0gb2Ygd2VpZ2h0cyBpcyAxLCBzbyB0aGUgd2VpZ2h0cyBpcyBzdG9yZWQgaW4gdmVjMyBhbmQgdGhlIGxhc3RcclxuICAgICAgICAgICAgLy8gY2FuIGJlIGNhbGN1bGF0ZWQgYnkgMS13Lngtdy55LXcuelxyXG4gICAgICAgICAgICB3ZWlnaHQ6IG5ldyBBdHRyaWJ1dGUoJ3dlaWdodCcsICdmbG9hdCcsIDMsICdXRUlHSFQnKSxcclxuICAgICAgICAgICAgam9pbnQ6IG5ldyBBdHRyaWJ1dGUoJ2pvaW50JywgJ2Zsb2F0JywgNCwgJ0pPSU5UJyksXHJcbiAgICAgICAgICAgIC8vIEZvciB3aXJlZnJhbWUgZGlzcGxheVxyXG4gICAgICAgICAgICAvLyBodHRwOi8vY29kZWZsb3cub3JnL2VudHJpZXMvMjAxMi9hdWcvMDIvZWFzeS13aXJlZnJhbWUtZGlzcGxheS13aXRoLWJhcnljZW50cmljLWNvb3JkaW5hdGVzL1xyXG4gICAgICAgICAgICBiYXJ5Y2VudHJpYzogbmV3IEF0dHJpYnV0ZSgnYmFyeWNlbnRyaWMnLCAnZmxvYXQnLCAzLCBudWxsKSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbGN1bGF0ZWQgYm91bmRpbmcgYm94IG9mIGdlb21ldHJ5LlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LkJvdW5kaW5nQm94fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGJvdW5kaW5nQm94OiBudWxsXHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuR2VvbWV0cnkucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICBtYWluQXR0cmlidXRlOiAncG9zaXRpb24nLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIGJvdW5kaW5nQm94IG9mIEdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUJvdW5kaW5nQm94OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGJib3ggPSB0aGlzLmJvdW5kaW5nQm94O1xyXG4gICAgICAgIGlmICghYmJveCkge1xyXG4gICAgICAgICAgICBiYm94ID0gdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcG9zQXJyID0gdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIGlmIChwb3NBcnIgJiYgcG9zQXJyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YXIgbWluID0gYmJveC5taW47XHJcbiAgICAgICAgICAgIHZhciBtYXggPSBiYm94Lm1heDtcclxuICAgICAgICAgICAgdmFyIG1pbkFyciA9IG1pbi5hcnJheTtcclxuICAgICAgICAgICAgdmFyIG1heEFyciA9IG1heC5hcnJheTtcclxuICAgICAgICAgICAgdmVjMy5zZXQobWluQXJyLCBwb3NBcnJbMF0sIHBvc0FyclsxXSwgcG9zQXJyWzJdKTtcclxuICAgICAgICAgICAgdmVjMy5zZXQobWF4QXJyLCBwb3NBcnJbMF0sIHBvc0FyclsxXSwgcG9zQXJyWzJdKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDM7IGkgPCBwb3NBcnIubGVuZ3RoOykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHggPSBwb3NBcnJbaSsrXTtcclxuICAgICAgICAgICAgICAgIHZhciB5ID0gcG9zQXJyW2krK107XHJcbiAgICAgICAgICAgICAgICB2YXIgeiA9IHBvc0FycltpKytdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHggPCBtaW5BcnJbMF0pIHsgbWluQXJyWzBdID0geDsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHkgPCBtaW5BcnJbMV0pIHsgbWluQXJyWzFdID0geTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHogPCBtaW5BcnJbMl0pIHsgbWluQXJyWzJdID0gejsgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh4ID4gbWF4QXJyWzBdKSB7IG1heEFyclswXSA9IHg7IH1cclxuICAgICAgICAgICAgICAgIGlmICh5ID4gbWF4QXJyWzFdKSB7IG1heEFyclsxXSA9IHk7IH1cclxuICAgICAgICAgICAgICAgIGlmICh6ID4gbWF4QXJyWzJdKSB7IG1heEFyclsyXSA9IHo7IH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIG5vcm1hbHMgcGVyIHZlcnRleC5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVWZXJ0ZXhOb3JtYWxzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZlcnRleENvdW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIHZhciBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICghbm9ybWFscyB8fCBub3JtYWxzLmxlbmd0aCAhPT0gcG9zaXRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWUgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheShwb3NpdGlvbnMubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFJlc2V0XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9ybWFscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsc1tpXSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwMSA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgcDIgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHAzID0gdmVjM0NyZWF0ZSgpO1xyXG5cclxuICAgICAgICB2YXIgdjIxID0gdmVjM0NyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB2MzIgPSB2ZWMzQ3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHZhciBuID0gdmVjM0NyZWF0ZSgpO1xyXG5cclxuICAgICAgICB2YXIgbGVuID0gaW5kaWNlcyA/IGluZGljZXMubGVuZ3RoIDogdGhpcy52ZXJ0ZXhDb3VudDtcclxuICAgICAgICB2YXIgaTEsIGkyLCBpMztcclxuICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGxlbjspIHtcclxuICAgICAgICAgICAgaWYgKGluZGljZXMpIHtcclxuICAgICAgICAgICAgICAgIGkxID0gaW5kaWNlc1tmKytdO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBpbmRpY2VzW2YrK107XHJcbiAgICAgICAgICAgICAgICBpMyA9IGluZGljZXNbZisrXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGkxID0gZisrO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBmKys7XHJcbiAgICAgICAgICAgICAgICBpMyA9IGYrKztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVjM1NldChwMSwgcG9zaXRpb25zW2kxKjNdLCBwb3NpdGlvbnNbaTEqMysxXSwgcG9zaXRpb25zW2kxKjMrMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHAyLCBwb3NpdGlvbnNbaTIqM10sIHBvc2l0aW9uc1tpMiozKzFdLCBwb3NpdGlvbnNbaTIqMysyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQocDMsIHBvc2l0aW9uc1tpMyozXSwgcG9zaXRpb25zW2kzKjMrMV0sIHBvc2l0aW9uc1tpMyozKzJdKTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYyMSwgcDEsIHAyKTtcclxuICAgICAgICAgICAgdmVjMy5zdWIodjMyLCBwMiwgcDMpO1xyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKG4sIHYyMSwgdjMyKTtcclxuICAgICAgICAgICAgLy8gQWxyZWFkeSBiZSB3ZWlnaHRlZCBieSB0aGUgdHJpYW5nbGUgYXJlYVxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsc1tpMSozK2ldID0gbm9ybWFsc1tpMSozK2ldICsgbltpXTtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTIqMytpXSA9IG5vcm1hbHNbaTIqMytpXSArIG5baV07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kzKjMraV0gPSBub3JtYWxzW2kzKjMraV0gKyBuW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vcm1hbHMubGVuZ3RoOykge1xyXG4gICAgICAgICAgICB2ZWMzU2V0KG4sIG5vcm1hbHNbaV0sIG5vcm1hbHNbaSsxXSwgbm9ybWFsc1tpKzJdKTtcclxuICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUobiwgbik7XHJcbiAgICAgICAgICAgIG5vcm1hbHNbaSsrXSA9IG5bMF07XHJcbiAgICAgICAgICAgIG5vcm1hbHNbaSsrXSA9IG5bMV07XHJcbiAgICAgICAgICAgIG5vcm1hbHNbaSsrXSA9IG5bMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlydHkoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBub3JtYWxzIHBlciBmYWNlLlxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZUZhY2VOb3JtYWxzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZlcnRleENvdW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc1VuaXF1ZVZlcnRleCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVVbmlxdWVWZXJ0ZXgoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIHZhciBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcblxyXG4gICAgICAgIHZhciBwMSA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgcDIgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHAzID0gdmVjM0NyZWF0ZSgpO1xyXG5cclxuICAgICAgICB2YXIgdjIxID0gdmVjM0NyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB2MzIgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIG4gPSB2ZWMzQ3JlYXRlKCk7XHJcblxyXG4gICAgICAgIGlmICghbm9ybWFscykge1xyXG4gICAgICAgICAgICBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHBvc2l0aW9ucy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbGVuID0gaW5kaWNlcyA/IGluZGljZXMubGVuZ3RoIDogdGhpcy52ZXJ0ZXhDb3VudDtcclxuICAgICAgICB2YXIgaTEsIGkyLCBpMztcclxuICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGxlbjspIHtcclxuICAgICAgICAgICAgaWYgKGluZGljZXMpIHtcclxuICAgICAgICAgICAgICAgIGkxID0gaW5kaWNlc1tmKytdO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBpbmRpY2VzW2YrK107XHJcbiAgICAgICAgICAgICAgICBpMyA9IGluZGljZXNbZisrXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGkxID0gZisrO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBmKys7XHJcbiAgICAgICAgICAgICAgICBpMyA9IGYrKztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVjM1NldChwMSwgcG9zaXRpb25zW2kxKjNdLCBwb3NpdGlvbnNbaTEqMysxXSwgcG9zaXRpb25zW2kxKjMrMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHAyLCBwb3NpdGlvbnNbaTIqM10sIHBvc2l0aW9uc1tpMiozKzFdLCBwb3NpdGlvbnNbaTIqMysyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQocDMsIHBvc2l0aW9uc1tpMyozXSwgcG9zaXRpb25zW2kzKjMrMV0sIHBvc2l0aW9uc1tpMyozKzJdKTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYyMSwgcDEsIHAyKTtcclxuICAgICAgICAgICAgdmVjMy5zdWIodjMyLCBwMiwgcDMpO1xyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKG4sIHYyMSwgdjMyKTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKG4sIG4pO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTEqMyArIGldID0gbltpXTtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTIqMyArIGldID0gbltpXTtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTMqMyArIGldID0gbltpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgdGFuZ2VudHMgYXR0cmlidXRlcy5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVUYW5nZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgblZlcnRleCA9IHRoaXMudmVydGV4Q291bnQ7XHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgaWYgKCFhdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWUpIHtcclxuICAgICAgICAgICAgYXR0cmlidXRlcy50YW5nZW50LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShuVmVydGV4ICogNCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0ZXhjb29yZHMgPSBhdHRyaWJ1dGVzLnRleGNvb3JkMC52YWx1ZTtcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICB2YXIgdGFuZ2VudHMgPSBhdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWU7XHJcbiAgICAgICAgdmFyIG5vcm1hbHMgPSBhdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKCF0ZXhjb29yZHMpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdHZW9tZXRyeSB3aXRob3V0IHRleGNvb3JkcyBjYW5cXCd0IGdlbmVyYXRlIHRhbmdlbnRzLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGFuMSA9IFtdO1xyXG4gICAgICAgIHZhciB0YW4yID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVmVydGV4OyBpKyspIHtcclxuICAgICAgICAgICAgdGFuMVtpXSA9IFswLjAsIDAuMCwgMC4wXTtcclxuICAgICAgICAgICAgdGFuMltpXSA9IFswLjAsIDAuMCwgMC4wXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzZGlyID0gWzAuMCwgMC4wLCAwLjBdO1xyXG4gICAgICAgIHZhciB0ZGlyID0gWzAuMCwgMC4wLCAwLjBdO1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG5cclxuICAgICAgICB2YXIgbGVuID0gaW5kaWNlcyA/IGluZGljZXMubGVuZ3RoIDogdGhpcy52ZXJ0ZXhDb3VudDtcclxuICAgICAgICB2YXIgaTEsIGkyLCBpMztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjspIHtcclxuICAgICAgICAgICAgaWYgKGluZGljZXMpIHtcclxuICAgICAgICAgICAgICAgIGkxID0gaW5kaWNlc1tpKytdO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBpbmRpY2VzW2krK107XHJcbiAgICAgICAgICAgICAgICBpMyA9IGluZGljZXNbaSsrXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGkxID0gaSsrO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBpKys7XHJcbiAgICAgICAgICAgICAgICBpMyA9IGkrKztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHN0MXMgPSB0ZXhjb29yZHNbaTEgKiAyXSxcclxuICAgICAgICAgICAgICAgIHN0MnMgPSB0ZXhjb29yZHNbaTIgKiAyXSxcclxuICAgICAgICAgICAgICAgIHN0M3MgPSB0ZXhjb29yZHNbaTMgKiAyXSxcclxuICAgICAgICAgICAgICAgIHN0MXQgPSB0ZXhjb29yZHNbaTEgKiAyICsgMV0sXHJcbiAgICAgICAgICAgICAgICBzdDJ0ID0gdGV4Y29vcmRzW2kyICogMiArIDFdLFxyXG4gICAgICAgICAgICAgICAgc3QzdCA9IHRleGNvb3Jkc1tpMyAqIDIgKyAxXSxcclxuXHJcbiAgICAgICAgICAgICAgICBwMXggPSBwb3NpdGlvbnNbaTEgKiAzXSxcclxuICAgICAgICAgICAgICAgIHAyeCA9IHBvc2l0aW9uc1tpMiAqIDNdLFxyXG4gICAgICAgICAgICAgICAgcDN4ID0gcG9zaXRpb25zW2kzICogM10sXHJcbiAgICAgICAgICAgICAgICBwMXkgPSBwb3NpdGlvbnNbaTEgKiAzICsgMV0sXHJcbiAgICAgICAgICAgICAgICBwMnkgPSBwb3NpdGlvbnNbaTIgKiAzICsgMV0sXHJcbiAgICAgICAgICAgICAgICBwM3kgPSBwb3NpdGlvbnNbaTMgKiAzICsgMV0sXHJcbiAgICAgICAgICAgICAgICBwMXogPSBwb3NpdGlvbnNbaTEgKiAzICsgMl0sXHJcbiAgICAgICAgICAgICAgICBwMnogPSBwb3NpdGlvbnNbaTIgKiAzICsgMl0sXHJcbiAgICAgICAgICAgICAgICBwM3ogPSBwb3NpdGlvbnNbaTMgKiAzICsgMl07XHJcblxyXG4gICAgICAgICAgICB2YXIgeDEgPSBwMnggLSBwMXgsXHJcbiAgICAgICAgICAgICAgICB4MiA9IHAzeCAtIHAxeCxcclxuICAgICAgICAgICAgICAgIHkxID0gcDJ5IC0gcDF5LFxyXG4gICAgICAgICAgICAgICAgeTIgPSBwM3kgLSBwMXksXHJcbiAgICAgICAgICAgICAgICB6MSA9IHAyeiAtIHAxeixcclxuICAgICAgICAgICAgICAgIHoyID0gcDN6IC0gcDF6O1xyXG5cclxuICAgICAgICAgICAgdmFyIHMxID0gc3QycyAtIHN0MXMsXHJcbiAgICAgICAgICAgICAgICBzMiA9IHN0M3MgLSBzdDFzLFxyXG4gICAgICAgICAgICAgICAgdDEgPSBzdDJ0IC0gc3QxdCxcclxuICAgICAgICAgICAgICAgIHQyID0gc3QzdCAtIHN0MXQ7XHJcblxyXG4gICAgICAgICAgICB2YXIgciA9IDEuMCAvIChzMSAqIHQyIC0gdDEgKiBzMik7XHJcbiAgICAgICAgICAgIHNkaXJbMF0gPSAodDIgKiB4MSAtIHQxICogeDIpICogcjtcclxuICAgICAgICAgICAgc2RpclsxXSA9ICh0MiAqIHkxIC0gdDEgKiB5MikgKiByO1xyXG4gICAgICAgICAgICBzZGlyWzJdID0gKHQyICogejEgLSB0MSAqIHoyKSAqIHI7XHJcblxyXG4gICAgICAgICAgICB0ZGlyWzBdID0gKHMxICogeDIgLSBzMiAqIHgxKSAqIHI7XHJcbiAgICAgICAgICAgIHRkaXJbMV0gPSAoczEgKiB5MiAtIHMyICogeTEpICogcjtcclxuICAgICAgICAgICAgdGRpclsyXSA9IChzMSAqIHoyIC0gczIgKiB6MSkgKiByO1xyXG5cclxuICAgICAgICAgICAgdmVjM0FkZCh0YW4xW2kxXSwgdGFuMVtpMV0sIHNkaXIpO1xyXG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjFbaTJdLCB0YW4xW2kyXSwgc2Rpcik7XHJcbiAgICAgICAgICAgIHZlYzNBZGQodGFuMVtpM10sIHRhbjFbaTNdLCBzZGlyKTtcclxuICAgICAgICAgICAgdmVjM0FkZCh0YW4yW2kxXSwgdGFuMltpMV0sIHRkaXIpO1xyXG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjJbaTJdLCB0YW4yW2kyXSwgdGRpcik7XHJcbiAgICAgICAgICAgIHZlYzNBZGQodGFuMltpM10sIHRhbjJbaTNdLCB0ZGlyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHRtcCA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgbkNyb3NzVCA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgbiA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5WZXJ0ZXg7IGkrKykge1xyXG4gICAgICAgICAgICBuWzBdID0gbm9ybWFsc1tpICogM107XHJcbiAgICAgICAgICAgIG5bMV0gPSBub3JtYWxzW2kgKiAzICsgMV07XHJcbiAgICAgICAgICAgIG5bMl0gPSBub3JtYWxzW2kgKiAzICsgMl07XHJcbiAgICAgICAgICAgIHZhciB0ID0gdGFuMVtpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIEdyYW0tU2NobWlkdCBvcnRob2dvbmFsaXplXHJcbiAgICAgICAgICAgIHZlYzMuc2NhbGUodG1wLCBuLCB2ZWMzLmRvdChuLCB0KSk7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHRtcCwgdCwgdG1wKTtcclxuICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUodG1wLCB0bXApO1xyXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgaGFuZGVkbmVzcy5cclxuICAgICAgICAgICAgdmVjMy5jcm9zcyhuQ3Jvc3NULCBuLCB0KTtcclxuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDRdID0gdG1wWzBdO1xyXG4gICAgICAgICAgICB0YW5nZW50c1tpICogNCArIDFdID0gdG1wWzFdO1xyXG4gICAgICAgICAgICB0YW5nZW50c1tpICogNCArIDJdID0gdG1wWzJdO1xyXG4gICAgICAgICAgICAvLyBQRU5ESU5HIGNhbiBjb25maWcgP1xyXG4gICAgICAgICAgICB0YW5nZW50c1tpICogNCArIDNdID0gdmVjMy5kb3QobkNyb3NzVCwgdGFuMltpXSkgPCAwLjAgPyAtMS4wIDogMS4wO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdmVydGljZXMgYXJlIG5vdCBzaGFyZWQgYnkgZGlmZmVyZW50IGluZGljZXMuXHJcbiAgICAgKi9cclxuICAgIGlzVW5pcXVlVmVydGV4OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNVc2VJbmRpY2VzKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmVydGV4Q291bnQgPT09IHRoaXMuaW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYSB1bmlxdWUgdmVydGV4IGZvciBlYWNoIGluZGV4LlxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZVVuaXF1ZVZlcnRleDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCB8fCAhdGhpcy5pbmRpY2VzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmluZGljZXMubGVuZ3RoID4gMHhmZmZmKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5kaWNlcyA9IG5ldyB2ZW5kb3IuVWludDMyQXJyYXkodGhpcy5pbmRpY2VzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlTmFtZUxpc3QgPSB0aGlzLmdldEVuYWJsZWRBdHRyaWJ1dGVzKCk7XHJcblxyXG4gICAgICAgIHZhciBvbGRBdHRyVmFsdWVzID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBhdHRyaWJ1dGVOYW1lTGlzdC5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVMaXN0W2FdO1xyXG4gICAgICAgICAgICBvbGRBdHRyVmFsdWVzW25hbWVdID0gYXR0cmlidXRlc1tuYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgYXR0cmlidXRlc1tuYW1lXS5pbml0KHRoaXMuaW5kaWNlcy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGN1cnNvciA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpaSA9IGluZGljZXNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmlidXRlTmFtZUxpc3QubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZUxpc3RbYV07XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBhdHRyaWJ1dGVzW25hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNpemUgPSBhdHRyaWJ1dGVzW25hbWVdLnNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzaXplOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtjdXJzb3IgKiBzaXplICsga10gPSBvbGRBdHRyVmFsdWVzW25hbWVdW2lpICogc2l6ZSArIGtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGluZGljZXNbaV0gPSBjdXJzb3I7XHJcbiAgICAgICAgICAgIGN1cnNvcisrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIGJhcnljZW50cmljIGNvb3JkaW5hdGVzIGZvciB3aXJlZnJhbWUgZHJhdy5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVCYXJ5Y2VudHJpYzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNVbmlxdWVWZXJ0ZXgoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlVW5pcXVlVmVydGV4KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgYXJyYXkgPSBhdHRyaWJ1dGVzLmJhcnljZW50cmljLnZhbHVlO1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG4gICAgICAgIC8vIEFscmVhZHkgZXhpc3RlZDtcclxuICAgICAgICBpZiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoID09PSBpbmRpY2VzLmxlbmd0aCAqIDMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhcnJheSA9IGF0dHJpYnV0ZXMuYmFyeWNlbnRyaWMudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KGluZGljZXMubGVuZ3RoICogMyk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHRoaXMudmVydGV4Q291bnQgLyAzKTspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAzOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBpaSA9IGluZGljZXMgPyBpbmRpY2VzW2krK10gOiAoaSAqIDMgKyBqKTtcclxuICAgICAgICAgICAgICAgIGFycmF5W2lpICogMyArIGpdID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgdHJhbnNmb3JtIHRvIGdlb21ldHJ5IGF0dHJpYnV0ZXMuXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gbWF0cml4XHJcbiAgICAgKi9cclxuICAgIGFwcGx5VHJhbnNmb3JtOiBmdW5jdGlvbiAobWF0cml4KSB7XHJcblxyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIHZhciBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcbiAgICAgICAgdmFyIHRhbmdlbnRzID0gYXR0cmlidXRlcy50YW5nZW50LnZhbHVlO1xyXG5cclxuICAgICAgICBtYXRyaXggPSBtYXRyaXguYXJyYXk7XHJcbiAgICAgICAgLy8gTm9ybWFsIE1hdHJpeFxyXG4gICAgICAgIHZhciBpbnZlcnNlVHJhbnNwb3NlTWF0cml4ID0gbWF0NC5jcmVhdGUoKTtcclxuICAgICAgICBtYXQ0LmludmVydChpbnZlcnNlVHJhbnNwb3NlTWF0cml4LCBtYXRyaXgpO1xyXG4gICAgICAgIG1hdDQudHJhbnNwb3NlKGludmVyc2VUcmFuc3Bvc2VNYXRyaXgsIGludmVyc2VUcmFuc3Bvc2VNYXRyaXgpO1xyXG5cclxuICAgICAgICB2YXIgdmVjM1RyYW5zZm9ybU1hdDQgPSB2ZWMzLnRyYW5zZm9ybU1hdDQ7XHJcbiAgICAgICAgdmFyIHZlYzNGb3JFYWNoID0gdmVjMy5mb3JFYWNoO1xyXG4gICAgICAgIHZlYzNGb3JFYWNoKHBvc2l0aW9ucywgMywgMCwgbnVsbCwgdmVjM1RyYW5zZm9ybU1hdDQsIG1hdHJpeCk7XHJcbiAgICAgICAgaWYgKG5vcm1hbHMpIHtcclxuICAgICAgICAgICAgdmVjM0ZvckVhY2gobm9ybWFscywgMywgMCwgbnVsbCwgdmVjM1RyYW5zZm9ybU1hdDQsIGludmVyc2VUcmFuc3Bvc2VNYXRyaXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGFuZ2VudHMpIHtcclxuICAgICAgICAgICAgdmVjM0ZvckVhY2godGFuZ2VudHMsIDQsIDAsIG51bGwsIHZlYzNUcmFuc2Zvcm1NYXQ0LCBpbnZlcnNlVHJhbnNwb3NlTWF0cml4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdlb21ldHJ5IGRhdGEgaW4gR0wgY29udGV4dC5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcblxyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG5cclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICAgICAgdmFyIGNodW5rcyA9IGNhY2hlLmdldCgnY2h1bmtzJyk7XHJcbiAgICAgICAgaWYgKGNodW5rcykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNodW5rcy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNodW5rID0gY2h1bmtzW2NdO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgY2h1bmsuYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJzID0gY2h1bmsuYXR0cmlidXRlQnVmZmVyc1trXTtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5nbC5kZWxldGVCdWZmZXIoYXR0cmlicy5idWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjaHVuay5pbmRpY2VzQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKGNodW5rLmluZGljZXNCdWZmZXIuYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fX3Zhb0NhY2hlKSB7XHJcbiAgICAgICAgICAgIHZhciB2YW9FeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fX3Zhb0NhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFvID0gdGhpcy5fX3Zhb0NhY2hlW2lkXS52YW87XHJcbiAgICAgICAgICAgICAgICBpZiAodmFvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFvRXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHZhbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fX3Zhb0NhY2hlID0ge307XHJcbiAgICAgICAgY2FjaGUuZGVsZXRlQ29udGV4dChyZW5kZXJlci5fX3VpZF9fKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuR2VvbWV0cnkuU1RBVElDX0RSQVcgPSBHZW9tZXRyeUJhc2UuU1RBVElDX0RSQVc7XHJcbkdlb21ldHJ5LkRZTkFNSUNfRFJBVyA9IEdlb21ldHJ5QmFzZS5EWU5BTUlDX0RSQVc7XHJcbkdlb21ldHJ5LlNUUkVBTV9EUkFXID0gR2VvbWV0cnlCYXNlLlNUUkVBTV9EUkFXO1xyXG5cclxuR2VvbWV0cnkuQXR0cmlidXRlQnVmZmVyID0gR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZUJ1ZmZlcjtcclxuR2VvbWV0cnkuSW5kaWNlc0J1ZmZlciA9IEdlb21ldHJ5QmFzZS5JbmRpY2VzQnVmZmVyO1xyXG5cclxuR2VvbWV0cnkuQXR0cmlidXRlID0gQXR0cmlidXRlO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgR2VvbWV0cnk7XHJcbiIsImltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5nZW9tZXRyeS5QbGFuZVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC53aWR0aFNlZ21lbnRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5oZWlnaHRTZWdtZW50c11cclxuICovXHJcbnZhciBQbGFuZSA9IEdlb21ldHJ5LmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5Lmdlb21ldHJ5LlBsYW5lIyAqL1xyXG57XHJcbiAgICBkeW5hbWljOiBmYWxzZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd2lkdGhTZWdtZW50czogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaGVpZ2h0U2VnbWVudHM6IDFcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5QbGFuZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCBwbGFuZSBnZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICBidWlsZDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGhlaWdodFNlZ21lbnRzID0gdGhpcy5oZWlnaHRTZWdtZW50cztcclxuICAgICAgICB2YXIgd2lkdGhTZWdtZW50cyA9IHRoaXMud2lkdGhTZWdtZW50cztcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gW107XHJcbiAgICAgICAgdmFyIHRleGNvb3JkcyA9IFtdO1xyXG4gICAgICAgIHZhciBub3JtYWxzID0gW107XHJcbiAgICAgICAgdmFyIGZhY2VzID0gW107XHJcblxyXG4gICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDw9IGhlaWdodFNlZ21lbnRzOyB5KyspIHtcclxuICAgICAgICAgICAgdmFyIHQgPSB5IC8gaGVpZ2h0U2VnbWVudHM7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDw9IHdpZHRoU2VnbWVudHM7IHgrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHMgPSB4IC8gd2lkdGhTZWdtZW50cztcclxuXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChbMiAqIHMgLSAxLCAyICogdCAtIDEsIDBdKTtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXhjb29yZHMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXhjb29yZHMucHVzaChbcywgdF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBub3JtYWxzLnB1c2goWzAsIDAsIDFdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh4IDwgd2lkdGhTZWdtZW50cyAmJiB5IDwgaGVpZ2h0U2VnbWVudHMpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHggKyB5ICogKHdpZHRoU2VnbWVudHMgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKFtpLCBpICsgMSwgaSArIHdpZHRoU2VnbWVudHMgKyAxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFjZXMucHVzaChbaSArIHdpZHRoU2VnbWVudHMgKyAxLCBpICsgMSwgaSArIHdpZHRoU2VnbWVudHMgKyAyXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF0dHJpYnV0ZXMucG9zaXRpb24uZnJvbUFycmF5KHBvc2l0aW9ucyk7XHJcbiAgICAgICAgYXR0cmlidXRlcy50ZXhjb29yZDAuZnJvbUFycmF5KHRleGNvb3Jkcyk7XHJcbiAgICAgICAgYXR0cmlidXRlcy5ub3JtYWwuZnJvbUFycmF5KG5vcm1hbHMpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRJbmRpY2VzRnJvbUFycmF5KGZhY2VzKTtcclxuXHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldCgtMSwgLTEsIDApO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWF4LnNldCgxLCAxLCAwKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQbGFuZTtcclxuIiwiaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IFBsYW5lIGZyb20gJy4vUGxhbmUnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5cclxudmFyIHBsYW5lTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5nZW9tZXRyeS5DdWJlXHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LndpZHRoU2VnbWVudHNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmhlaWdodFNlZ21lbnRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5kZXB0aFNlZ21lbnRzXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHQuaW5zaWRlXVxyXG4gKi9cclxudmFyIEN1YmUgPSBHZW9tZXRyeS5leHRlbmQoXHJcbi8qKkBsZW5kcyBjbGF5Lmdlb21ldHJ5LkN1YmUjICovXHJcbntcclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB3aWR0aFNlZ21lbnRzOiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBoZWlnaHRTZWdtZW50czogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGVwdGhTZWdtZW50czogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGluc2lkZTogZmFsc2VcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5DdWJlLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGN1YmUgZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgcGxhbmVzID0ge1xyXG4gICAgICAgICAgICAncHgnOiBjcmVhdGVQbGFuZSgncHgnLCB0aGlzLmRlcHRoU2VnbWVudHMsIHRoaXMuaGVpZ2h0U2VnbWVudHMpLFxyXG4gICAgICAgICAgICAnbngnOiBjcmVhdGVQbGFuZSgnbngnLCB0aGlzLmRlcHRoU2VnbWVudHMsIHRoaXMuaGVpZ2h0U2VnbWVudHMpLFxyXG4gICAgICAgICAgICAncHknOiBjcmVhdGVQbGFuZSgncHknLCB0aGlzLndpZHRoU2VnbWVudHMsIHRoaXMuZGVwdGhTZWdtZW50cyksXHJcbiAgICAgICAgICAgICdueSc6IGNyZWF0ZVBsYW5lKCdueScsIHRoaXMud2lkdGhTZWdtZW50cywgdGhpcy5kZXB0aFNlZ21lbnRzKSxcclxuICAgICAgICAgICAgJ3B6JzogY3JlYXRlUGxhbmUoJ3B6JywgdGhpcy53aWR0aFNlZ21lbnRzLCB0aGlzLmhlaWdodFNlZ21lbnRzKSxcclxuICAgICAgICAgICAgJ256JzogY3JlYXRlUGxhbmUoJ256JywgdGhpcy53aWR0aFNlZ21lbnRzLCB0aGlzLmhlaWdodFNlZ21lbnRzKSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgYXR0ckxpc3QgPSBbJ3Bvc2l0aW9uJywgJ3RleGNvb3JkMCcsICdub3JtYWwnXTtcclxuICAgICAgICB2YXIgdmVydGV4TnVtYmVyID0gMDtcclxuICAgICAgICB2YXIgZmFjZU51bWJlciA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgcG9zIGluIHBsYW5lcykge1xyXG4gICAgICAgICAgICB2ZXJ0ZXhOdW1iZXIgKz0gcGxhbmVzW3Bvc10udmVydGV4Q291bnQ7XHJcbiAgICAgICAgICAgIGZhY2VOdW1iZXIgKz0gcGxhbmVzW3Bvc10uaW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYXR0ckxpc3QubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2F0dHJMaXN0W2tdXS5pbml0KHZlcnRleE51bWJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW5kaWNlcyA9IG5ldyB2ZW5kb3IuVWludDE2QXJyYXkoZmFjZU51bWJlcik7XHJcbiAgICAgICAgdmFyIGZhY2VPZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciB2ZXJ0ZXhPZmZzZXQgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIHBvcyBpbiBwbGFuZXMpIHtcclxuICAgICAgICAgICAgdmFyIHBsYW5lID0gcGxhbmVzW3Bvc107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYXR0ckxpc3QubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyTmFtZSA9IGF0dHJMaXN0W2tdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJBcnJheSA9IHBsYW5lLmF0dHJpYnV0ZXNbYXR0ck5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJTaXplID0gcGxhbmUuYXR0cmlidXRlc1thdHRyTmFtZV0uc2l6ZTtcclxuICAgICAgICAgICAgICAgIHZhciBpc05vcm1hbCA9IGF0dHJOYW1lID09PSAnbm9ybWFsJztcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0ckFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gYXR0ckFycmF5W2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluc2lkZSAmJiBpc05vcm1hbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IC12YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2F0dHJOYW1lXS52YWx1ZVtpICsgYXR0clNpemUgKiB2ZXJ0ZXhPZmZzZXRdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGxlbiA9IHBsYW5lLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYW5lLmluZGljZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5kaWNlc1tpICsgZmFjZU9mZnNldF0gPSB2ZXJ0ZXhPZmZzZXQgKyBwbGFuZS5pbmRpY2VzW3RoaXMuaW5zaWRlID8gKGxlbiAtIGkgLSAxKSA6IGldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZhY2VPZmZzZXQgKz0gcGxhbmUuaW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIHZlcnRleE9mZnNldCArPSBwbGFuZS52ZXJ0ZXhDb3VudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1heC5zZXQoMSwgMSwgMSk7XHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5taW4uc2V0KC0xLCAtMSwgLTEpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVBsYW5lKHBvcywgd2lkdGhTZWdtZW50cywgaGVpZ2h0U2VnbWVudHMpIHtcclxuXHJcbiAgICBwbGFuZU1hdHJpeC5pZGVudGl0eSgpO1xyXG5cclxuICAgIHZhciBwbGFuZSA9IG5ldyBQbGFuZSh7XHJcbiAgICAgICAgd2lkdGhTZWdtZW50czogd2lkdGhTZWdtZW50cyxcclxuICAgICAgICBoZWlnaHRTZWdtZW50czogaGVpZ2h0U2VnbWVudHNcclxuICAgIH0pO1xyXG5cclxuICAgIHN3aXRjaChwb3MpIHtcclxuICAgICAgICBjYXNlICdweCc6XHJcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5QT1NJVElWRV9YKTtcclxuICAgICAgICAgICAgTWF0cml4NC5yb3RhdGVZKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgTWF0aC5QSSAvIDIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdueCc6XHJcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5ORUdBVElWRV9YKTtcclxuICAgICAgICAgICAgTWF0cml4NC5yb3RhdGVZKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgLU1hdGguUEkgLyAyKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAncHknOlxyXG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuUE9TSVRJVkVfWSk7XHJcbiAgICAgICAgICAgIE1hdHJpeDQucm90YXRlWChwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIC1NYXRoLlBJIC8gMik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ255JzpcclxuICAgICAgICAgICAgTWF0cml4NC50cmFuc2xhdGUocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgICAgICAgICBNYXRyaXg0LnJvdGF0ZVgocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBNYXRoLlBJIC8gMik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3B6JzpcclxuICAgICAgICAgICAgTWF0cml4NC50cmFuc2xhdGUocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBWZWN0b3IzLlBPU0lUSVZFX1opO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdueic6XHJcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5ORUdBVElWRV9aKTtcclxuICAgICAgICAgICAgTWF0cml4NC5yb3RhdGVZKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgTWF0aC5QSSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcGxhbmUuYXBwbHlUcmFuc2Zvcm0ocGxhbmVNYXRyaXgpO1xyXG4gICAgcmV0dXJuIHBsYW5lO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDdWJlO1xyXG4iLCJpbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuU3BoZXJlXHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHRTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwaGlTdGFydF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwaGlMZW5ndGhdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbdGhldGFTdGFydF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFt0aGV0YUxlbmd0aF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtyYWRpdXNdXHJcbiAqL1xyXG52YXIgU3BoZXJlID0gR2VvbWV0cnkuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5TcGhlcmUjICovIHtcclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB3aWR0aFNlZ21lbnRzOiA0MCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaGVpZ2h0U2VnbWVudHM6IDIwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcGhpU3RhcnQ6IDAsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHBoaUxlbmd0aDogTWF0aC5QSSAqIDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGV0YVN0YXJ0OiAwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGV0YUxlbmd0aDogTWF0aC5QSSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJhZGl1czogMVxyXG5cclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5TcGhlcmUucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgc3BoZXJlIGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGJ1aWxkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgaGVpZ2h0U2VnbWVudHMgPSB0aGlzLmhlaWdodFNlZ21lbnRzO1xyXG4gICAgICAgIHZhciB3aWR0aFNlZ21lbnRzID0gdGhpcy53aWR0aFNlZ21lbnRzO1xyXG5cclxuICAgICAgICB2YXIgcG9zaXRpb25BdHRyID0gdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciB0ZXhjb29yZEF0dHIgPSB0aGlzLmF0dHJpYnV0ZXMudGV4Y29vcmQwO1xyXG4gICAgICAgIHZhciBub3JtYWxBdHRyID0gdGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtcclxuXHJcbiAgICAgICAgdmFyIHZlcnRleENvdW50ID0gKHdpZHRoU2VnbWVudHMgKyAxKSAqIChoZWlnaHRTZWdtZW50cyArIDEpO1xyXG4gICAgICAgIHBvc2l0aW9uQXR0ci5pbml0KHZlcnRleENvdW50KTtcclxuICAgICAgICB0ZXhjb29yZEF0dHIuaW5pdCh2ZXJ0ZXhDb3VudCk7XHJcbiAgICAgICAgbm9ybWFsQXR0ci5pbml0KHZlcnRleENvdW50KTtcclxuXHJcbiAgICAgICAgdmFyIEluZGljZXNDdG9yID0gdmVydGV4Q291bnQgPiAweGZmZmYgPyBVaW50MzJBcnJheSA6IFVpbnQxNkFycmF5O1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzID0gbmV3IEluZGljZXNDdG9yKHdpZHRoU2VnbWVudHMgKiBoZWlnaHRTZWdtZW50cyAqIDYpO1xyXG5cclxuICAgICAgICB2YXIgeCwgeSwgeixcclxuICAgICAgICAgICAgdSwgdixcclxuICAgICAgICAgICAgaSwgajtcclxuXHJcbiAgICAgICAgdmFyIHJhZGl1cyA9IHRoaXMucmFkaXVzO1xyXG4gICAgICAgIHZhciBwaGlTdGFydCA9IHRoaXMucGhpU3RhcnQ7XHJcbiAgICAgICAgdmFyIHBoaUxlbmd0aCA9IHRoaXMucGhpTGVuZ3RoO1xyXG4gICAgICAgIHZhciB0aGV0YVN0YXJ0ID0gdGhpcy50aGV0YVN0YXJ0O1xyXG4gICAgICAgIHZhciB0aGV0YUxlbmd0aCA9IHRoaXMudGhldGFMZW5ndGg7XHJcbiAgICAgICAgdmFyIHJhZGl1cyA9IHRoaXMucmFkaXVzO1xyXG5cclxuICAgICAgICB2YXIgcG9zID0gW107XHJcbiAgICAgICAgdmFyIHV2ID0gW107XHJcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XHJcbiAgICAgICAgdmFyIGRpdmlkZXIgPSAxIC8gcmFkaXVzO1xyXG4gICAgICAgIGZvciAoaiA9IDA7IGogPD0gaGVpZ2h0U2VnbWVudHM7IGogKyspIHtcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8PSB3aWR0aFNlZ21lbnRzOyBpICsrKSB7XHJcbiAgICAgICAgICAgICAgICB1ID0gaSAvIHdpZHRoU2VnbWVudHM7XHJcbiAgICAgICAgICAgICAgICB2ID0gaiAvIGhlaWdodFNlZ21lbnRzO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFggYXhpcyBpcyBpbnZlcnRlZCBzbyB0ZXh0dXJlIGNhbiBiZSBtYXBwZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0XHJcbiAgICAgICAgICAgICAgICB4ID0gLXJhZGl1cyAqIE1hdGguY29zKHBoaVN0YXJ0ICsgdSAqIHBoaUxlbmd0aCkgKiBNYXRoLnNpbih0aGV0YVN0YXJ0ICsgdiAqIHRoZXRhTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHkgPSByYWRpdXMgKiBNYXRoLmNvcyh0aGV0YVN0YXJ0ICsgdiAqIHRoZXRhTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHogPSByYWRpdXMgKiBNYXRoLnNpbihwaGlTdGFydCArIHUgKiBwaGlMZW5ndGgpICogTWF0aC5zaW4odGhldGFTdGFydCArIHYgKiB0aGV0YUxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcG9zWzBdID0geDsgcG9zWzFdID0geTsgcG9zWzJdID0gejtcclxuICAgICAgICAgICAgICAgIHV2WzBdID0gdTsgdXZbMV0gPSB2O1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25BdHRyLnNldChvZmZzZXQsIHBvcyk7XHJcbiAgICAgICAgICAgICAgICB0ZXhjb29yZEF0dHIuc2V0KG9mZnNldCwgdXYpO1xyXG4gICAgICAgICAgICAgICAgcG9zWzBdICo9IGRpdmlkZXI7XHJcbiAgICAgICAgICAgICAgICBwb3NbMV0gKj0gZGl2aWRlcjtcclxuICAgICAgICAgICAgICAgIHBvc1syXSAqPSBkaXZpZGVyO1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsQXR0ci5zZXQob2Zmc2V0LCBwb3MpO1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0Kys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpMSwgaTIsIGkzLCBpNDtcclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IHdpZHRoU2VnbWVudHMgKyAxO1xyXG5cclxuICAgICAgICB2YXIgbiA9IDA7XHJcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGhlaWdodFNlZ21lbnRzOyBqICsrKSB7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB3aWR0aFNlZ21lbnRzOyBpICsrKSB7XHJcbiAgICAgICAgICAgICAgICBpMiA9IGogKiBsZW4gKyBpO1xyXG4gICAgICAgICAgICAgICAgaTEgPSAoaiAqIGxlbiArIGkgKyAxKTtcclxuICAgICAgICAgICAgICAgIGk0ID0gKGogKyAxKSAqIGxlbiArIGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgaTMgPSAoaiArIDEpICogbGVuICsgaTtcclxuXHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMTtcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGkyO1xyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTQ7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTI7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMztcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGk0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5tYXguc2V0KHJhZGl1cywgcmFkaXVzLCByYWRpdXMpO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldCgtcmFkaXVzLCAtcmFkaXVzLCAtcmFkaXVzKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTcGhlcmU7XHJcbiIsImltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuUGFyYW1ldHJpY1N1cmZhY2VcclxuICogQGV4dGVuZHMgY2xheS5HZW9tZXRyeVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdF1cclxuICogQHBhcmFtIHtPYmplY3R9IFtnZW5lcmF0b3JdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdlbmVyYXRvci54XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdlbmVyYXRvci55XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdlbmVyYXRvci56XHJcbiAqIEBwYXJhbSB7QXJyYXl9IFtnZW5lcmF0b3IudT1bMCwgMSwgMC4wNV1dXHJcbiAqIEBwYXJhbSB7QXJyYXl9IFtnZW5lcmF0b3Iudj1bMCwgMSwgMC4wNV1dXHJcbiAqL1xyXG52YXIgUGFyYW1ldHJpY1N1cmZhY2UgPSBHZW9tZXRyeS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5QYXJhbWV0cmljU3VyZmFjZSMgKi9cclxue1xyXG4gICAgZHluYW1pYzogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRvcjogbnVsbFxyXG5cclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5QYXJhbWV0cmljU3VyZmFjZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCBwYXJhbWV0cmljIHN1cmZhY2UgZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgYnVpbGQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZ2VuZXJhdG9yID0gdGhpcy5nZW5lcmF0b3I7XHJcblxyXG4gICAgICAgIGlmICghZ2VuZXJhdG9yIHx8ICFnZW5lcmF0b3IueCB8fCAhZ2VuZXJhdG9yLnkgfHwgIWdlbmVyYXRvci56KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBnZW5lcmF0b3InKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHhGdW5jID0gZ2VuZXJhdG9yLng7XHJcbiAgICAgICAgdmFyIHlGdW5jID0gZ2VuZXJhdG9yLnk7XHJcbiAgICAgICAgdmFyIHpGdW5jID0gZ2VuZXJhdG9yLno7XHJcbiAgICAgICAgdmFyIHVSYW5nZSA9IGdlbmVyYXRvci51IHx8IFswLCAxLCAwLjA1XTtcclxuICAgICAgICB2YXIgdlJhbmdlID0gZ2VuZXJhdG9yLnYgfHwgWzAsIDEsIDAuMDVdO1xyXG5cclxuICAgICAgICB2YXIgdU51bSA9IE1hdGguZmxvb3IoKHVSYW5nZVsxXSAtIHVSYW5nZVswXSArIHVSYW5nZVsyXSkgLyB1UmFuZ2VbMl0pO1xyXG4gICAgICAgIHZhciB2TnVtID0gTWF0aC5mbG9vcigodlJhbmdlWzFdIC0gdlJhbmdlWzBdICsgdlJhbmdlWzJdKSAvIHZSYW5nZVsyXSk7XHJcblxyXG4gICAgICAgIGlmICghaXNGaW5pdGUodU51bSkgfHwgIWlzRmluaXRlKHZOdW0pKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5maW5pdGUgZ2VuZXJhdG9yJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdmVydGV4TnVtID0gdU51bSAqIHZOdW07XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLmluaXQodmVydGV4TnVtKTtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMudGV4Y29vcmQwLmluaXQodmVydGV4TnVtKTtcclxuXHJcbiAgICAgICAgdmFyIHBvcyA9IFtdO1xyXG4gICAgICAgIHZhciB0ZXhjb29yZCA9IFtdO1xyXG4gICAgICAgIHZhciBuVmVydGV4ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZOdW07IGorKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVOdW07IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHUgPSBpICogdVJhbmdlWzJdICsgdVJhbmdlWzBdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHYgPSBqICogdlJhbmdlWzJdICsgdlJhbmdlWzBdO1xyXG4gICAgICAgICAgICAgICAgcG9zWzBdID0geEZ1bmModSwgdik7XHJcbiAgICAgICAgICAgICAgICBwb3NbMV0gPSB5RnVuYyh1LCB2KTtcclxuICAgICAgICAgICAgICAgIHBvc1syXSA9IHpGdW5jKHUsIHYpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRleGNvb3JkWzBdID0gaSAvICh1TnVtIC0gMSk7XHJcbiAgICAgICAgICAgICAgICB0ZXhjb29yZFsxXSA9IGogLyAodk51bSAtIDEpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbi5zZXQoblZlcnRleCwgcG9zKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy50ZXhjb29yZDAuc2V0KG5WZXJ0ZXgsIHRleGNvb3JkKTtcclxuICAgICAgICAgICAgICAgIG5WZXJ0ZXgrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIEluZGljZXNDdG9yID0gdmVydGV4TnVtID4gMHhmZmZmID8gVWludDMyQXJyYXkgOiBVaW50MTZBcnJheTtcclxuICAgICAgICB2YXIgbkluZGljZXMgPSAodU51bSAtIDEpICogKHZOdW0gLSAxKSAqIDY7XHJcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXMgPSBuZXcgSW5kaWNlc0N0b3IobkluZGljZXMpO1xyXG5cclxuICAgICAgICB2YXIgbiA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2TnVtIC0gMTsgaisrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdU51bSAtIDE7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGkyID0gaiAqIHVOdW0gKyBpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGkxID0gKGogKiB1TnVtICsgaSArIDEpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGk0ID0gKGogKyAxKSAqIHVOdW0gKyBpICsgMTtcclxuICAgICAgICAgICAgICAgIHZhciBpMyA9IChqICsgMSkgKiB1TnVtICsgaTtcclxuXHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMTtcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGkyO1xyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTQ7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTI7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMztcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGk0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdlbmVyYXRlVmVydGV4Tm9ybWFscygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQYXJhbWV0cmljU3VyZmFjZTtcclxuIiwiLyoqXHJcbiAqIEJhc2UgY2xhc3MgZm9yIGFsbCB0ZXh0dXJlcyBsaWtlIGNvbXByZXNzZWQgdGV4dHVyZSwgdGV4dHVyZTJkLCB0ZXh0dXJlY3ViZVxyXG4gKiBUT0RPIG1hcHBpbmdcclxuICovXHJcbmltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IENhY2hlIGZyb20gJy4vY29yZS9DYWNoZSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlRleHR1cmVcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBUZXh0dXJlID0gQmFzZS5leHRlbmQoIC8qKiBAbGVuZHMgY2xheS5UZXh0dXJlIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIFRleHR1cmUgd2lkdGgsIHJlYWRvbmx5IHdoZW4gdGhlIHRleHR1cmUgc291cmNlIGlzIGltYWdlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB3aWR0aDogNTEyLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0dXJlIGhlaWdodCwgcmVhZG9ubHkgd2hlbiB0aGUgdGV4dHVyZSBzb3VyY2UgaXMgaW1hZ2VcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodDogNTEyLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXhlbCBkYXRhIHR5cGUuXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlVOU0lHTkVEX0JZVEV9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkhBTEZfRkxPQVR9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkZMT0FUfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuVU5TSUdORURfSU5UfVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdHlwZTogZ2xlbnVtLlVOU0lHTkVEX0JZVEUsXHJcbiAgICAvKipcclxuICAgICAqIEZvcm1hdCBvZiB0ZXhlbCBkYXRhXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlJHQkF9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkRFUFRIX0NPTVBPTkVOVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuREVQVEhfU1RFTkNJTH1cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGZvcm1hdDogZ2xlbnVtLlJHQkEsXHJcbiAgICAvKipcclxuICAgICAqIFRleHR1cmUgd3JhcC4gRGVmYXVsdCB0byBiZSBSRVBFQVQuXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkNMQU1QX1RPX0VER0V9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlJFUEVBVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTUlSUk9SRURfUkVQRUFUfVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd3JhcFM6IGdsZW51bS5SRVBFQVQsXHJcbiAgICAvKipcclxuICAgICAqIFRleHR1cmUgd3JhcC4gRGVmYXVsdCB0byBiZSBSRVBFQVQuXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkNMQU1QX1RPX0VER0V9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlJFUEVBVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTUlSUk9SRURfUkVQRUFUfVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd3JhcFQ6IGdsZW51bS5SRVBFQVQsXHJcbiAgICAvKipcclxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTkVBUkVTVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTElORUFSfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5MSU5FQVJfTUlQTUFQX05FQVJFU1R9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLk5FQVJFU1RfTUlQTUFQX0xJTkVBUn1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTElORUFSX01JUE1BUF9MSU5FQVJ9XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBtaW5GaWx0ZXI6IGdsZW51bS5MSU5FQVJfTUlQTUFQX0xJTkVBUixcclxuICAgIC8qKlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ORUFSRVNUfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5MSU5FQVJ9XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBtYWdGaWx0ZXI6IGdsZW51bS5MSU5FQVIsXHJcbiAgICAvKipcclxuICAgICAqIElmIGVuYWJsZSBtaW1hcC5cclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICB1c2VNaXBtYXA6IHRydWUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbmlzb3Ryb3BpYyBmaWx0ZXJpbmcsIGVuYWJsZWQgaWYgdmFsdWUgaXMgbGFyZ2VyIHRoYW4gMVxyXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBhbmlzb3Ryb3BpYzogMSxcclxuICAgIC8vIHBpeGVsU3RvcmVpIHBhcmFtZXRlcnMsIG5vdCBhdmFpbGFibGUgd2hlbiB0ZXh0dXJlIGlzIHVzZWQgYXMgcmVuZGVyIHRhcmdldFxyXG4gICAgLy8gaHR0cDovL3d3dy5raHJvbm9zLm9yZy9vcGVuZ2xlcy9zZGsvZG9jcy9tYW4veGh0bWwvZ2xQaXhlbFN0b3JlaS54bWxcclxuICAgIC8qKlxyXG4gICAgICogSWYgZmxpcCBpbiB5IGF4aXMgZm9yIGdpdmVuIGltYWdlIHNvdXJjZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgKi9cclxuICAgIGZsaXBZOiB0cnVlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBmbGFnIHRvIGluZGljYXRlIGlmIHRleHR1cmUgc291cmNlIGlzIHNSR0JcclxuICAgICAqL1xyXG4gICAgc1JHQjogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDRcclxuICAgICAqL1xyXG4gICAgdW5wYWNrQWxpZ25tZW50OiA0LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgKi9cclxuICAgIHByZW11bHRpcGx5QWxwaGE6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHluYW1pYyBvcHRpb24gZm9yIHRleHR1cmUgbGlrZSB2aWRlb1xyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG5cclxuICAgIE5QT1Q6IGZhbHNlLFxyXG5cclxuICAgIC8vIFBFTkRJTkdcclxuICAgIC8vIEluaXQgaXQgaGVyZSB0byBhdm9pZCBkZW9wdGltaXphdGlvbiB3aGVuIGl0J3MgYXNzaWduZWQgaW4gYXBwbGljYXRpb24gZHluYW1pY2FsbHlcclxuICAgIF9fdXNlZDogMFxyXG5cclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fY2FjaGUgPSBuZXcgQ2FjaGUoKTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LlRleHR1cmUucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICBnZXRXZWJHTFRleHR1cmU6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcblxyXG4gICAgICAgIGlmIChjYWNoZS5taXNzKCd3ZWJnbF90ZXh0dXJlJykpIHtcclxuICAgICAgICAgICAgLy8gSW4gYSBuZXcgZ2wgY29udGV4dCwgY3JlYXRlIG5ldyB0ZXh0dXJlIGFuZCBzZXQgZGlydHkgdHJ1ZVxyXG4gICAgICAgICAgICBjYWNoZS5wdXQoJ3dlYmdsX3RleHR1cmUnLCBfZ2wuY3JlYXRlVGV4dHVyZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZHluYW1pYykge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZShyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNhY2hlLmlzRGlydHkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZShyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIGNhY2hlLmZyZXNoKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGJpbmQ6IGZ1bmN0aW9uICgpIHt9LFxyXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAoKSB7fSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmsgdGV4dHVyZSBpcyBkaXJ0eSBhbmQgdXBkYXRlIGluIHRoZSBuZXh0IGZyYW1lXHJcbiAgICAgKi9cclxuICAgIGRpcnR5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NhY2hlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlLmRpcnR5QWxsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChyZW5kZXJlcikge30sXHJcblxyXG4gICAgLy8gVXBkYXRlIHRoZSBjb21tb24gcGFyYW1ldGVycyBvZiB0ZXh0dXJlXHJcbiAgICB1cGRhdGVDb21tb246IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19GTElQX1lfV0VCR0wsIHRoaXMuZmxpcFkpO1xyXG4gICAgICAgIF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xyXG4gICAgICAgIF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX0FMSUdOTUVOVCwgdGhpcy51bnBhY2tBbGlnbm1lbnQpO1xyXG5cclxuICAgICAgICAvLyBVc2Ugb2Ygbm9uZS1wb3dlciBvZiB0d28gdGV4dHVyZVxyXG4gICAgICAgIC8vIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvd2ViZ2wvd2lraS9XZWJHTF9hbmRfT3BlbkdMX0RpZmZlcmVuY2VzXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ID09PSBnbGVudW0uREVQVEhfQ09NUE9ORU5UKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlTWlwbWFwID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc1JHQkV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfc1JHQicpO1xyXG4gICAgICAgIC8vIEZhbGxiYWNrXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ID09PSBUZXh0dXJlLlNSR0IgJiYgIXNSR0JFeHQpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSBUZXh0dXJlLlJHQjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ID09PSBUZXh0dXJlLlNSR0JfQUxQSEEgJiYgIXNSR0JFeHQpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSBUZXh0dXJlLlJHQkE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLk5QT1QgPSAhdGhpcy5pc1Bvd2VyT2ZUd28oKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0QXZhaWxhYmxlV3JhcFM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5OUE9UKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBnbGVudW0uQ0xBTVBfVE9fRURHRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud3JhcFM7XHJcbiAgICB9LFxyXG4gICAgZ2V0QXZhaWxhYmxlV3JhcFQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5OUE9UKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBnbGVudW0uQ0xBTVBfVE9fRURHRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud3JhcFQ7XHJcbiAgICB9LFxyXG4gICAgZ2V0QXZhaWxhYmxlTWluRmlsdGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG1pbkZpbHRlciA9IHRoaXMubWluRmlsdGVyO1xyXG4gICAgICAgIGlmICh0aGlzLk5QT1QgfHwgIXRoaXMudXNlTWlwbWFwKSB7XHJcbiAgICAgICAgICAgIGlmIChtaW5GaWx0ZXIgPT09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUIHx8XHJcbiAgICAgICAgICAgICAgICBtaW5GaWx0ZXIgPT09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9MSU5FQVJcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2xlbnVtLk5FQVJFU1Q7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobWluRmlsdGVyID09PSBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVIgfHxcclxuICAgICAgICAgICAgICAgIG1pbkZpbHRlciA9PT0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTkVBUkVTVFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBnbGVudW0uTElORUFSO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1pbkZpbHRlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1pbkZpbHRlcjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZ2V0QXZhaWxhYmxlTWFnRmlsdGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFnRmlsdGVyO1xyXG4gICAgfSxcclxuXHJcbiAgICBuZXh0SGlnaGVzdFBvd2VyT2ZUd286IGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgLS14O1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgMzI7IGkgPDw9IDEpIHtcclxuICAgICAgICAgICAgeCA9IHggfCB4ID4+IGk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB4ICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG5cclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuXHJcbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG5cclxuICAgICAgICB2YXIgd2ViZ2xUZXh0dXJlID0gY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJyk7XHJcbiAgICAgICAgaWYgKHdlYmdsVGV4dHVyZSl7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLmdsLmRlbGV0ZVRleHR1cmUod2ViZ2xUZXh0dXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FjaGUuZGVsZXRlQ29udGV4dChyZW5kZXJlci5fX3VpZF9fKTtcclxuXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXN0IGlmIGltYWdlIG9mIHRleHR1cmUgaXMgdmFsaWQgYW5kIGxvYWRlZC5cclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzUmVuZGVyYWJsZTogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXN0IGlmIHRleHR1cmUgc2l6ZSBpcyBwb3dlciBvZiB0d29cclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzUG93ZXJPZlR3bzogZnVuY3Rpb24gKCkge31cclxufSk7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZS5wcm90b3R5cGUsICd3aWR0aCcsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XHJcbiAgICB9XHJcbn0pO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZS5wcm90b3R5cGUsICdoZWlnaHQnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyogRGF0YVR5cGUgKi9cclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5CWVRFID0gZ2xlbnVtLkJZVEU7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5VTlNJR05FRF9CWVRFID0gZ2xlbnVtLlVOU0lHTkVEX0JZVEU7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5TSE9SVCA9IGdsZW51bS5TSE9SVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlVOU0lHTkVEX1NIT1JUID0gZ2xlbnVtLlVOU0lHTkVEX1NIT1JUO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuSU5UID0gZ2xlbnVtLklOVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlVOU0lHTkVEX0lOVCA9IGdsZW51bS5VTlNJR05FRF9JTlQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5GTE9BVCA9IGdsZW51bS5GTE9BVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkhBTEZfRkxPQVQgPSAweDhENjE7XHJcblxyXG4vKipcclxuICogVU5TSUdORURfSU5UXzI0XzhfV0VCR0wgZm9yIFdFQkdMX2RlcHRoX3RleHR1cmUgZXh0ZW5zaW9uXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMID0gMzQwNDI7XHJcblxyXG4vKiBQaXhlbEZvcm1hdCAqL1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuREVQVEhfQ09NUE9ORU5UID0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkRFUFRIX1NURU5DSUwgPSBnbGVudW0uREVQVEhfU1RFTkNJTDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkFMUEhBID0gZ2xlbnVtLkFMUEhBO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuUkdCID0gZ2xlbnVtLlJHQjtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlJHQkEgPSBnbGVudW0uUkdCQTtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkxVTUlOQU5DRSA9IGdsZW51bS5MVU1JTkFOQ0U7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5MVU1JTkFOQ0VfQUxQSEEgPSBnbGVudW0uTFVNSU5BTkNFX0FMUEhBO1xyXG5cclxuLyoqXHJcbiAqIEBzZWUgaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvZXh0ZW5zaW9ucy9FWFRfc1JHQi9cclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuU1JHQiA9IDB4OEM0MDtcclxuLyoqXHJcbiAqIEBzZWUgaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvZXh0ZW5zaW9ucy9FWFRfc1JHQi9cclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuU1JHQl9BTFBIQSA9IDB4OEM0MjtcclxuXHJcbi8qIENvbXByZXNzZWQgVGV4dHVyZSAqL1xyXG5UZXh0dXJlLkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgPSAweDgzRjA7XHJcblRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQgPSAweDgzRjE7XHJcblRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQgPSAweDgzRjI7XHJcblRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQgPSAweDgzRjM7XHJcblxyXG4vKiBUZXh0dXJlTWFnRmlsdGVyICovXHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5ORUFSRVNUID0gZ2xlbnVtLk5FQVJFU1Q7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5MSU5FQVIgPSBnbGVudW0uTElORUFSO1xyXG5cclxuLyogVGV4dHVyZU1pbkZpbHRlciAqL1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCA9IGdsZW51bS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTElORUFSX01JUE1BUF9ORUFSRVNUID0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTkVBUkVTVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLk5FQVJFU1RfTUlQTUFQX0xJTkVBUiA9IGdsZW51bS5ORUFSRVNUX01JUE1BUF9MSU5FQVI7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5MSU5FQVJfTUlQTUFQX0xJTkVBUiA9IGdsZW51bS5MSU5FQVJfTUlQTUFQX0xJTkVBUjtcclxuXHJcbi8qIFRleHR1cmVXcmFwTW9kZSAqL1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuUkVQRUFUID0gZ2xlbnVtLlJFUEVBVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkNMQU1QX1RPX0VER0UgPSBnbGVudW0uQ0xBTVBfVE9fRURHRTtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLk1JUlJPUkVEX1JFUEVBVCA9IGdsZW51bS5NSVJST1JFRF9SRVBFQVQ7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZTtcclxuIiwidmFyIG1hdGhVdGlsID0ge307XHJcblxyXG5tYXRoVXRpbC5pc1Bvd2VyT2ZUd28gPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHJldHVybiAodmFsdWUgJiAodmFsdWUgLSAxKSkgPT09IDA7XHJcbn07XHJcblxyXG5tYXRoVXRpbC5uZXh0UG93ZXJPZlR3byA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgdmFsdWUgLS07XHJcbiAgICB2YWx1ZSB8PSB2YWx1ZSA+PiAxO1xyXG4gICAgdmFsdWUgfD0gdmFsdWUgPj4gMjtcclxuICAgIHZhbHVlIHw9IHZhbHVlID4+IDQ7XHJcbiAgICB2YWx1ZSB8PSB2YWx1ZSA+PiA4O1xyXG4gICAgdmFsdWUgfD0gdmFsdWUgPj4gMTY7XHJcbiAgICB2YWx1ZSArKztcclxuXHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn07XHJcblxyXG5tYXRoVXRpbC5uZWFyZXN0UG93ZXJPZlR3byA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIE1hdGgucG93KCAyLCBNYXRoLnJvdW5kKCBNYXRoLmxvZyggdmFsdWUgKSAvIE1hdGguTE4yICkgKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG1hdGhVdGlsO1xyXG4iLCJpbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgbWF0aFV0aWwgZnJvbSAnLi9tYXRoL3V0aWwnO1xyXG52YXIgaXNQb3dlck9mVHdvID0gbWF0aFV0aWwuaXNQb3dlck9mVHdvO1xyXG5cclxuZnVuY3Rpb24gbmVhcmVzdFBvd2VyT2ZUd28odmFsKSB7XHJcbiAgICByZXR1cm4gTWF0aC5wb3coMiwgTWF0aC5yb3VuZChNYXRoLmxvZyh2YWwpIC8gTWF0aC5MTjIpKTtcclxufVxyXG5mdW5jdGlvbiBjb252ZXJ0VGV4dHVyZVRvUG93ZXJPZlR3byh0ZXh0dXJlLCBjYW52YXMpIHtcclxuICAgIC8vIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciB3aWR0aCA9IG5lYXJlc3RQb3dlck9mVHdvKHRleHR1cmUud2lkdGgpO1xyXG4gICAgdmFyIGhlaWdodCA9IG5lYXJlc3RQb3dlck9mVHdvKHRleHR1cmUuaGVpZ2h0KTtcclxuICAgIGNhbnZhcyA9IGNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcclxuICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGN0eC5kcmF3SW1hZ2UodGV4dHVyZS5pbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgcmV0dXJuIGNhbnZhcztcclxufVxyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlRleHR1cmUyRFxyXG4gKiBAZXh0ZW5kcyBjbGF5LlRleHR1cmVcclxuICpcclxuICogQGV4YW1wbGVcclxuICogICAgIC4uLlxyXG4gKiAgICAgdmFyIG1hdCA9IG5ldyBjbGF5Lk1hdGVyaWFsKHtcclxuICogICAgICAgICBzaGFkZXI6IGNsYXkuc2hhZGVyLmxpYnJhcnkuZ2V0KCdjbGF5LnBob25nJywgJ2RpZmZ1c2VNYXAnKVxyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgZGlmZnVzZU1hcCA9IG5ldyBjbGF5LlRleHR1cmUyRCgpO1xyXG4gKiAgICAgZGlmZnVzZU1hcC5sb2FkKCdhc3NldHMvdGV4dHVyZXMvZGlmZnVzZS5qcGcnKTtcclxuICogICAgIG1hdC5zZXQoJ2RpZmZ1c2VNYXAnLCBkaWZmdXNlTWFwKTtcclxuICogICAgIC4uLlxyXG4gKiAgICAgZGlmZnVzZU1hcC5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICogICAgICAgICAvLyBXYWl0IGZvciB0aGUgZGlmZnVzZSB0ZXh0dXJlIGxvYWRlZFxyXG4gKiAgICAgICAgIGFuaW1hdGlvbi5vbignZnJhbWUnLCBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcbiAqICAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTtcclxuICogICAgICAgICB9KTtcclxuICogICAgIH0pO1xyXG4gKi9cclxudmFyIFRleHR1cmUyRCA9IFRleHR1cmUuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuVGV4dHVyZTJEIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUgez9IVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtbmV0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIC8vIFRPRE8gbWFyayBkaXJ0eSB3aGVuIGFzc2lnbmVkLlxyXG4gICAgICAgIGltYWdlOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFBpeGVscyBkYXRhLiBXaWxsIGJlIGlnbm9yZWQgaWYgaW1hZ2UgaXMgc2V0LlxyXG4gICAgICAgICAqIEB0eXBlIHs/VWludDhBcnJheXxGbG9hdDMyQXJyYXl9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcGl4ZWxzOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48T2JqZWN0Pn1cclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqICAgICBbe1xyXG4gICAgICAgICAqICAgICAgICAgaW1hZ2U6IG1pcG1hcDAsXHJcbiAgICAgICAgICogICAgICAgICBwaXhlbHM6IG51bGxcclxuICAgICAgICAgKiAgICAgfSwge1xyXG4gICAgICAgICAqICAgICAgICAgaW1hZ2U6IG1pcG1hcDEsXHJcbiAgICAgICAgICogICAgICAgICBwaXhlbHM6IG51bGxcclxuICAgICAgICAgKiAgICAgfSwgLi4uLl1cclxuICAgICAgICAgKi9cclxuICAgICAgICBtaXBtYXBzOiBbXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgY29udmVydCB0ZXh0dXJlIHRvIHBvd2VyLW9mLXR3b1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnZlcnRUb1BPVDogZmFsc2VcclxuICAgIH07XHJcbn0sIHtcclxuXHJcbiAgICB0ZXh0dXJlVHlwZTogJ3RleHR1cmUyRCcsXHJcblxyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV8yRCwgdGhpcy5fY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJykpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUNvbW1vbihyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHZhciBnbEZvcm1hdCA9IHRoaXMuZm9ybWF0O1xyXG4gICAgICAgIHZhciBnbFR5cGUgPSB0aGlzLnR5cGU7XHJcblxyXG4gICAgICAgIC8vIENvbnZlcnQgdG8gcG90IGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gdXNpbmcgaW1hZ2UvY2FudmFzL3ZpZGVvIGVsZW1lbnQuXHJcbiAgICAgICAgdmFyIGNvbnZlcnRUb1BPVCA9ICEhKHRoaXMuY29udmVydFRvUE9UXHJcbiAgICAgICAgICAgICYmICF0aGlzLm1pcG1hcHMubGVuZ3RoICYmIHRoaXMuaW1hZ2VcclxuICAgICAgICAgICAgJiYgKHRoaXMud3JhcFMgPT09IFRleHR1cmUuUkVQRUFUIHx8IHRoaXMud3JhcFQgPT09IFRleHR1cmUuUkVQRUFUKVxyXG4gICAgICAgICAgICAmJiB0aGlzLk5QT1RcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV8yRCwgX2dsLlRFWFRVUkVfV1JBUF9TLCBjb252ZXJ0VG9QT1QgPyB0aGlzLndyYXBTIDogdGhpcy5nZXRBdmFpbGFibGVXcmFwUygpKTtcclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV8yRCwgX2dsLlRFWFRVUkVfV1JBUF9ULCBjb252ZXJ0VG9QT1QgPyB0aGlzLndyYXBUIDogdGhpcy5nZXRBdmFpbGFibGVXcmFwVCgpKTtcclxuXHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfMkQsIF9nbC5URVhUVVJFX01BR19GSUxURVIsIGNvbnZlcnRUb1BPVCA/IHRoaXMubWFnRmlsdGVyIDogdGhpcy5nZXRBdmFpbGFibGVNYWdGaWx0ZXIoKSk7XHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfMkQsIF9nbC5URVhUVVJFX01JTl9GSUxURVIsIGNvbnZlcnRUb1BPVCA/IHRoaXMubWluRmlsdGVyIDogdGhpcy5nZXRBdmFpbGFibGVNaW5GaWx0ZXIoKSk7XHJcblxyXG4gICAgICAgIHZhciBhbmlzb3Ryb3BpY0V4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKTtcclxuICAgICAgICBpZiAoYW5pc290cm9waWNFeHQgJiYgdGhpcy5hbmlzb3Ryb3BpYyA+IDEpIHtcclxuICAgICAgICAgICAgX2dsLnRleFBhcmFtZXRlcmYoX2dsLlRFWFRVUkVfMkQsIGFuaXNvdHJvcGljRXh0LlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULCB0aGlzLmFuaXNvdHJvcGljKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIGZsb2F0IHR5cGUgaWYgYnJvd3NlciBkb24ndCBoYXZlIGhhbGYgZmxvYXQgZXh0ZW5zaW9uXHJcbiAgICAgICAgaWYgKGdsVHlwZSA9PT0gMzYxOTMpIHtcclxuICAgICAgICAgICAgdmFyIGhhbGZGbG9hdEV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Jyk7XHJcbiAgICAgICAgICAgIGlmICghaGFsZkZsb2F0RXh0KSB7XHJcbiAgICAgICAgICAgICAgICBnbFR5cGUgPSBnbGVudW0uRkxPQVQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1pcG1hcHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1pcG1hcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBtaXBtYXAgPSB0aGlzLm1pcG1hcHNbaV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVUZXh0dXJlRGF0YShfZ2wsIG1pcG1hcCwgaSwgd2lkdGgsIGhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgd2lkdGggLz0gMjtcclxuICAgICAgICAgICAgICAgIGhlaWdodCAvPSAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVUZXh0dXJlRGF0YShfZ2wsIHRoaXMsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlLCBjb252ZXJ0VG9QT1QpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMudXNlTWlwbWFwICYmICghdGhpcy5OUE9UIHx8IGNvbnZlcnRUb1BPVCkpIHtcclxuICAgICAgICAgICAgICAgIF9nbC5nZW5lcmF0ZU1pcG1hcChfZ2wuVEVYVFVSRV8yRCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVUZXh0dXJlRGF0YTogZnVuY3Rpb24gKF9nbCwgZGF0YSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIGNvbnZlcnRUb1BPVCkge1xyXG4gICAgICAgIGlmIChkYXRhLmltYWdlKSB7XHJcbiAgICAgICAgICAgIHZhciBpbWdEYXRhID0gZGF0YS5pbWFnZTtcclxuICAgICAgICAgICAgaWYgKGNvbnZlcnRUb1BPVCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcG90Q2FudmFzID0gY29udmVydFRleHR1cmVUb1Bvd2VyT2ZUd28odGhpcywgdGhpcy5fcG90Q2FudmFzKTtcclxuICAgICAgICAgICAgICAgIGltZ0RhdGEgPSB0aGlzLl9wb3RDYW52YXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgX2dsLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfMkQsIGxldmVsLCBnbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1nRGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBDYW4gYmUgdXNlZCBhcyBhIGJsYW5rIHRleHR1cmUgd2hlbiB3cml0aW5nIHJlbmRlciB0byB0ZXh0dXJlKFJUVClcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgZ2xGb3JtYXQgPD0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVFxyXG4gICAgICAgICAgICAgICAgJiYgZ2xGb3JtYXQgPj0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgX2dsLmNvbXByZXNzZWRUZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgZ2xGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGRhdGEucGl4ZWxzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIElzIGEgcmVuZGVyIHRhcmdldCBpZiBwaXhlbHMgaXMgbnVsbFxyXG4gICAgICAgICAgICAgICAgX2dsLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfMkQsIGxldmVsLCBnbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgZGF0YS5waXhlbHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5UZXh0dXJlMkQucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlTWlwbWFwOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlTWlwbWFwICYmICF0aGlzLk5QT1QpIHtcclxuICAgICAgICAgICAgX2dsLmJpbmRUZXh0dXJlKF9nbC5URVhUVVJFXzJELCB0aGlzLl9jYWNoZS5nZXQoJ3dlYmdsX3RleHR1cmUnKSk7XHJcbiAgICAgICAgICAgIF9nbC5nZW5lcmF0ZU1pcG1hcChfZ2wuVEVYVFVSRV8yRCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gaXNQb3dlck9mVHdvKHRoaXMud2lkdGgpICYmIGlzUG93ZXJPZlR3byh0aGlzLmhlaWdodCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGlzUmVuZGVyYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlLndpZHRoID4gMCAmJiB0aGlzLmltYWdlLmhlaWdodCA+IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gISEodGhpcy53aWR0aCAmJiB0aGlzLmhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBiaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICByZW5kZXJlci5nbC5iaW5kVGV4dHVyZShyZW5kZXJlci5nbC5URVhUVVJFXzJELCB0aGlzLmdldFdlYkdMVGV4dHVyZShyZW5kZXJlcikpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1bmJpbmQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHJlbmRlcmVyLmdsLmJpbmRUZXh0dXJlKHJlbmRlcmVyLmdsLlRFWFRVUkVfMkQsIG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICBsb2FkOiBmdW5jdGlvbiAoc3JjLCBjcm9zc09yaWdpbikge1xyXG4gICAgICAgIHZhciBpbWFnZSA9IHZlbmRvci5jcmVhdGVJbWFnZSgpO1xyXG4gICAgICAgIGlmIChjcm9zc09yaWdpbikge1xyXG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9IGNyb3NzT3JpZ2luO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLmRpcnR5KCk7XHJcbiAgICAgICAgICAgIHNlbGYudHJpZ2dlcignc3VjY2VzcycsIHNlbGYpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaW1hZ2Uub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdlcnJvcicsIHNlbGYpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGltYWdlLnNyYyA9IHNyYztcclxuICAgICAgICB0aGlzLmltYWdlID0gaW1hZ2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZXh0dXJlMkQucHJvdG90eXBlLCAnd2lkdGgnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZS53aWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUZXh0dXJlIGZyb20gaW1hZ2UgY2FuXFwndCBzZXQgd2lkdGgnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl93aWR0aCAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZXh0dXJlMkQucHJvdG90eXBlLCAnaGVpZ2h0Jywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2UuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUZXh0dXJlIGZyb20gaW1hZ2UgY2FuXFwndCBzZXQgaGVpZ2h0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faGVpZ2h0ICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlMkQ7XHJcbiIsImltcG9ydCBUZXh0dXJlIGZyb20gJy4vVGV4dHVyZSc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4vY29yZS91dGlsJztcclxuaW1wb3J0IG1hdGhVdGlsIGZyb20gJy4vbWF0aC91dGlsJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxudmFyIGlzUG93ZXJPZlR3byA9IG1hdGhVdGlsLmlzUG93ZXJPZlR3bztcclxuXHJcbnZhciB0YXJnZXRMaXN0ID0gWydweCcsICdueCcsICdweScsICdueScsICdweicsICdueiddO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlRleHR1cmVDdWJlXHJcbiAqIEBleHRlbmRzIGNsYXkuVGV4dHVyZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgLi4uXHJcbiAqICAgICB2YXIgbWF0ID0gbmV3IGNsYXkuTWF0ZXJpYWwoe1xyXG4gKiAgICAgICAgIHNoYWRlcjogY2xheS5zaGFkZXIubGlicmFyeS5nZXQoJ2NsYXkucGhvbmcnLCAnZW52aXJvbm1lbnRNYXAnKVxyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgZW52TWFwID0gbmV3IGNsYXkuVGV4dHVyZUN1YmUoKTtcclxuICogICAgIGVudk1hcC5sb2FkKHtcclxuICogICAgICAgICAncHgnOiAnYXNzZXRzL3RleHR1cmVzL3NreS9weC5qcGcnLFxyXG4gKiAgICAgICAgICdueCc6ICdhc3NldHMvdGV4dHVyZXMvc2t5L254LmpwZydcclxuICogICAgICAgICAncHknOiAnYXNzZXRzL3RleHR1cmVzL3NreS9weS5qcGcnXHJcbiAqICAgICAgICAgJ255JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvbnkuanBnJ1xyXG4gKiAgICAgICAgICdweic6ICdhc3NldHMvdGV4dHVyZXMvc2t5L3B6LmpwZydcclxuICogICAgICAgICAnbnonOiAnYXNzZXRzL3RleHR1cmVzL3NreS9uei5qcGcnXHJcbiAqICAgICB9KTtcclxuICogICAgIG1hdC5zZXQoJ2Vudmlyb25tZW50TWFwJywgZW52TWFwKTtcclxuICogICAgIC4uLlxyXG4gKiAgICAgZW52TWFwLnN1Y2Nlc3MoZnVuY3Rpb24gKCkge1xyXG4gKiAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBza3kgdGV4dHVyZSBsb2FkZWRcclxuICogICAgICAgICBhbmltYXRpb24ub24oJ2ZyYW1lJywgZnVuY3Rpb24gKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAqICAgICAgICAgfSk7XHJcbiAqICAgICB9KTtcclxuICovXHJcbnZhciBUZXh0dXJlQ3ViZSA9IFRleHR1cmUuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuVGV4dHVyZUN1YmUjICove1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIC8vIFBFTkRJTkcgY3ViZW1hcCBzaG91bGQgbm90IGZsaXBZIGluIGRlZmF1bHQuXHJcbiAgICAgICAgLy8gZmxpcFk6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1uZXR9IHB4XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gbnhcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9IVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtbmV0fSBweVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1uZXR9IG55XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gcHpcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9IVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtbmV0fSBuelxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGltYWdlOiB7XHJcbiAgICAgICAgICAgIHB4OiBudWxsLFxyXG4gICAgICAgICAgICBueDogbnVsbCxcclxuICAgICAgICAgICAgcHk6IG51bGwsXHJcbiAgICAgICAgICAgIG55OiBudWxsLFxyXG4gICAgICAgICAgICBwejogbnVsbCxcclxuICAgICAgICAgICAgbno6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFBpeGVscyBkYXRhIG9mIGVhY2ggc2lkZS4gV2lsbCBiZSBpZ25vcmVkIGlmIGltYWdlcyBhcmUgc2V0LlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/VWludDhBcnJheX0gcHhcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBueFxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P1VpbnQ4QXJyYXl9IHB5XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/VWludDhBcnJheX0gbnlcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBwelxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P1VpbnQ4QXJyYXl9IG56XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcGl4ZWxzOiB7XHJcbiAgICAgICAgICAgIHB4OiBudWxsLFxyXG4gICAgICAgICAgICBueDogbnVsbCxcclxuICAgICAgICAgICAgcHk6IG51bGwsXHJcbiAgICAgICAgICAgIG55OiBudWxsLFxyXG4gICAgICAgICAgICBwejogbnVsbCxcclxuICAgICAgICAgICAgbno6IG51bGxcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPE9iamVjdD59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWlwbWFwczogW11cclxuICAgIH07XHJcbn0sIHtcclxuXHJcbiAgICB0ZXh0dXJlVHlwZTogJ3RleHR1cmVDdWJlJyxcclxuXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIHRoaXMuX2NhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVDb21tb24ocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB2YXIgZ2xGb3JtYXQgPSB0aGlzLmZvcm1hdDtcclxuICAgICAgICB2YXIgZ2xUeXBlID0gdGhpcy50eXBlO1xyXG5cclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgX2dsLlRFWFRVUkVfV1JBUF9TLCB0aGlzLmdldEF2YWlsYWJsZVdyYXBTKCkpO1xyXG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFX0NVQkVfTUFQLCBfZ2wuVEVYVFVSRV9XUkFQX1QsIHRoaXMuZ2V0QXZhaWxhYmxlV3JhcFQoKSk7XHJcblxyXG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFX0NVQkVfTUFQLCBfZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCB0aGlzLmdldEF2YWlsYWJsZU1hZ0ZpbHRlcigpKTtcclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgX2dsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgdGhpcy5nZXRBdmFpbGFibGVNaW5GaWx0ZXIoKSk7XHJcblxyXG4gICAgICAgIHZhciBhbmlzb3Ryb3BpY0V4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKTtcclxuICAgICAgICBpZiAoYW5pc290cm9waWNFeHQgJiYgdGhpcy5hbmlzb3Ryb3BpYyA+IDEpIHtcclxuICAgICAgICAgICAgX2dsLnRleFBhcmFtZXRlcmYoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIGFuaXNvdHJvcGljRXh0LlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULCB0aGlzLmFuaXNvdHJvcGljKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIGZsb2F0IHR5cGUgaWYgYnJvd3NlciBkb24ndCBoYXZlIGhhbGYgZmxvYXQgZXh0ZW5zaW9uXHJcbiAgICAgICAgaWYgKGdsVHlwZSA9PT0gMzYxOTMpIHtcclxuICAgICAgICAgICAgdmFyIGhhbGZGbG9hdEV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Jyk7XHJcbiAgICAgICAgICAgIGlmICghaGFsZkZsb2F0RXh0KSB7XHJcbiAgICAgICAgICAgICAgICBnbFR5cGUgPSBnbGVudW0uRkxPQVQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1pcG1hcHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1pcG1hcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBtaXBtYXAgPSB0aGlzLm1pcG1hcHNbaV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVUZXh0dXJlRGF0YShfZ2wsIG1pcG1hcCwgaSwgd2lkdGgsIGhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSk7XHJcbiAgICAgICAgICAgICAgICB3aWR0aCAvPSAyO1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0IC89IDI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVRleHR1cmVEYXRhKF9nbCwgdGhpcywgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLk5QT1QgJiYgdGhpcy51c2VNaXBtYXApIHtcclxuICAgICAgICAgICAgICAgIF9nbC5nZW5lcmF0ZU1pcG1hcChfZ2wuVEVYVFVSRV9DVUJFX01BUCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgbnVsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVUZXh0dXJlRGF0YTogZnVuY3Rpb24gKF9nbCwgZGF0YSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGFyZ2V0TGlzdFtpXTtcclxuICAgICAgICAgICAgdmFyIGltZyA9IGRhdGEuaW1hZ2UgJiYgZGF0YS5pbWFnZVt0YXJnZXRdO1xyXG4gICAgICAgICAgICBpZiAoaW1nKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wudGV4SW1hZ2UyRChfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSwgbGV2ZWwsIGdsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgX2dsLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIGxldmVsLCBnbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgZGF0YS5waXhlbHMgJiYgZGF0YS5waXhlbHNbdGFyZ2V0XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlRleHR1cmVDdWJlLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZU1pcG1hcDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIGlmICh0aGlzLnVzZU1pcG1hcCAmJiAhdGhpcy5OUE9UKSB7XHJcbiAgICAgICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGhpcy5fY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJykpO1xyXG4gICAgICAgICAgICBfZ2wuZ2VuZXJhdGVNaXBtYXAoX2dsLlRFWFRVUkVfQ1VCRV9NQVApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuZ2wuYmluZFRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGhpcy5nZXRXZWJHTFRleHR1cmUocmVuZGVyZXIpKTtcclxuICAgIH0sXHJcblxyXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICByZW5kZXJlci5nbC5iaW5kVGV4dHVyZShyZW5kZXJlci5nbC5URVhUVVJFX0NVQkVfTUFQLCBudWxsKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gT3ZlcndyaXRlIHRoZSBpc1Bvd2VyT2ZUd28gbWV0aG9kXHJcbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXNQb3dlck9mVHdvKHRoaXMuaW1hZ2UucHgud2lkdGgpXHJcbiAgICAgICAgICAgICAgICAmJiBpc1Bvd2VyT2ZUd28odGhpcy5pbWFnZS5weC5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzUG93ZXJPZlR3byh0aGlzLndpZHRoKVxyXG4gICAgICAgICAgICAgICAgJiYgaXNQb3dlck9mVHdvKHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGlzUmVuZGVyYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlLnB4KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpc0ltYWdlUmVuZGVyYWJsZSh0aGlzLmltYWdlLnB4KVxyXG4gICAgICAgICAgICAgICAgJiYgaXNJbWFnZVJlbmRlcmFibGUodGhpcy5pbWFnZS5ueClcclxuICAgICAgICAgICAgICAgICYmIGlzSW1hZ2VSZW5kZXJhYmxlKHRoaXMuaW1hZ2UucHkpXHJcbiAgICAgICAgICAgICAgICAmJiBpc0ltYWdlUmVuZGVyYWJsZSh0aGlzLmltYWdlLm55KVxyXG4gICAgICAgICAgICAgICAgJiYgaXNJbWFnZVJlbmRlcmFibGUodGhpcy5pbWFnZS5weilcclxuICAgICAgICAgICAgICAgICYmIGlzSW1hZ2VSZW5kZXJhYmxlKHRoaXMuaW1hZ2UubnopO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICEhKHRoaXMud2lkdGggJiYgdGhpcy5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgbG9hZDogZnVuY3Rpb24gKGltYWdlTGlzdCwgY3Jvc3NPcmlnaW4pIHtcclxuICAgICAgICB2YXIgbG9hZGluZyA9IDA7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHV0aWwuZWFjaChpbWFnZUxpc3QsIGZ1bmN0aW9uIChzcmMsIHRhcmdldCl7XHJcbiAgICAgICAgICAgIHZhciBpbWFnZSA9IHZlbmRvci5jcmVhdGVJbWFnZSgpO1xyXG4gICAgICAgICAgICBpZiAoY3Jvc3NPcmlnaW4pIHtcclxuICAgICAgICAgICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgbG9hZGluZyAtLTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2FkaW5nID09PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmRpcnR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdzdWNjZXNzJywgc2VsZik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGltYWdlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nIC0tO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgbG9hZGluZysrO1xyXG4gICAgICAgICAgICBpbWFnZS5zcmMgPSBzcmM7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VbdGFyZ2V0XSA9IGltYWdlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxufSk7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZUN1YmUucHJvdG90eXBlLCAnd2lkdGgnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZSAmJiB0aGlzLmltYWdlLnB4KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlLnB4LndpZHRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XHJcbiAgICB9LFxyXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZSAmJiB0aGlzLmltYWdlLnB4KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGV4dHVyZSBmcm9tIGltYWdlIGNhblxcJ3Qgc2V0IHdpZHRoJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fd2lkdGggIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZUN1YmUucHJvdG90eXBlLCAnaGVpZ2h0Jywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UgJiYgdGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZS5weC5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XHJcbiAgICB9LFxyXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZSAmJiB0aGlzLmltYWdlLnB4KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGV4dHVyZSBmcm9tIGltYWdlIGNhblxcJ3Qgc2V0IGhlaWdodCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2hlaWdodCAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5mdW5jdGlvbiBpc0ltYWdlUmVuZGVyYWJsZShpbWFnZSkge1xyXG4gICAgcmV0dXJuIGltYWdlLndpZHRoID4gMCAmJiBpbWFnZS5oZWlnaHQgPiAwO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlQ3ViZTtcclxuIiwiaW1wb3J0IE5vZGUgZnJvbSAnLi9Ob2RlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuUmVuZGVyYWJsZVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lk5vZGVcclxuICovXHJcbnZhciBSZW5kZXJhYmxlID0gTm9kZS5leHRlbmQoLyoqIEBsZW5kcyBjbGF5LlJlbmRlcmFibGUjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuTWF0ZXJpYWx9XHJcbiAgICAgKi9cclxuICAgIG1hdGVyaWFsOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuR2VvbWV0cnl9XHJcbiAgICAgKi9cclxuICAgIGdlb21ldHJ5OiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbW9kZTogZ2xlbnVtLlRSSUFOR0xFUyxcclxuXHJcbiAgICBfcmVuZGVySW5mbzogbnVsbFxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuUmVuZGVyYWJsZS5wcm90b3R5cGUgKi9cclxue1xyXG5cclxuICAgIF9fcHJvZ3JhbTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdyb3VwIG9mIHJlY2VpdmVkIGxpZ2h0LlxyXG4gICAgICovXHJcbiAgICBsaWdodEdyb3VwOiAwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW5kZXIgb3JkZXIsIE5vZGVzIHdpdGggc21hbGxlciB2YWx1ZSByZW5kZXJzIGJlZm9yZSBub2RlcyB3aXRoIGxhcmdlciB2YWx1ZXMuXHJcbiAgICAgKiBAdHlwZSB7TnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByZW5kZXJPcmRlcjogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZWQgd2hlbiBtb2RlIGlzIExJTkVTLCBMSU5FX1NUUklQIG9yIExJTkVfTE9PUFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgLy8gbGluZVdpZHRoOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgZW5hYmxlIGN1bGxpbmdcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBjdWxsaW5nOiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGVjaWZ5IHdoaWNoIHNpZGUgb2YgcG9seWdvbiB3aWxsIGJlIGN1bGxlZC5cclxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcclxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuQkFDS31cclxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuRlJPTlR9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5SZW5kZXJhYmxlLkZST05UX0FORF9CQUNLfVxyXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViR0xSZW5kZXJpbmdDb250ZXh0L2N1bGxGYWNlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjdWxsRmFjZTogZ2xlbnVtLkJBQ0ssXHJcbiAgICAvKipcclxuICAgICAqIFNwZWNpZnkgd2hpY2ggc2lkZSBpcyBmcm9udCBmYWNlLlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuUmVuZGVyYWJsZS5DV31cclxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuQ0NXfVxyXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViR0xSZW5kZXJpbmdDb250ZXh0L2Zyb250RmFjZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZnJvbnRGYWNlOiBnbGVudW0uQ0NXLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgZW5hYmxlIHNvZnR3YXJlIGZydXN0dW0gY3VsbGluZ1xyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGZydXN0dW1DdWxsaW5nOiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgcmVjZWl2ZVNoYWRvdzogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGNhc3RTaGFkb3c6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpZ25vcmVQaWNraW5nOiBmYWxzZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlnbm9yZVByZVo6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlnbm9yZUdCdWZmZXI6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNSZW5kZXJhYmxlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAvLyBUT0RPIFNoYWRlciA/XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VvbWV0cnkgJiYgdGhpcy5tYXRlcmlhbCAmJiB0aGlzLm1hdGVyaWFsLnNoYWRlciAmJiAhdGhpcy5pbnZpc2libGVcclxuICAgICAgICAgICAgJiYgdGhpcy5nZW9tZXRyeS52ZXJ0ZXhDb3VudCA+IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmVmb3JlIHJlbmRlciBob29rXHJcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIGJlZm9yZVJlbmRlcjogZnVuY3Rpb24gKF9nbCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCZWZvcmUgcmVuZGVyIGhvb2tcclxuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cclxuICAgICAqL1xyXG4gICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uIChfZ2wsIHJlbmRlclN0YXQpIHt9LFxyXG5cclxuICAgIGdldEJvdW5kaW5nQm94OiBmdW5jdGlvbiAoZmlsdGVyLCBvdXQpIHtcclxuICAgICAgICBvdXQgPSBOb2RlLnByb3RvdHlwZS5nZXRCb3VuZGluZ0JveC5jYWxsKHRoaXMsIGZpbHRlciwgb3V0KTtcclxuICAgICAgICBpZiAodGhpcy5nZW9tZXRyeSAmJiB0aGlzLmdlb21ldHJ5LmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIG91dC51bmlvbih0aGlzLmdlb21ldHJ5LmJvdW5kaW5nQm94KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgcmVuZGVyYWJsZVxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlJlbmRlcmFibGV9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXHJcbiAgICAgICAgICAgICdjYXN0U2hhZG93JywgJ3JlY2VpdmVTaGFkb3cnLFxyXG4gICAgICAgICAgICAnbW9kZScsICdjdWxsaW5nJywgJ2N1bGxGYWNlJywgJ2Zyb250RmFjZScsXHJcbiAgICAgICAgICAgICdmcnVzdHVtQ3VsbGluZycsXHJcbiAgICAgICAgICAgICdyZW5kZXJPcmRlcicsICdsaW5lV2lkdGgnLFxyXG4gICAgICAgICAgICAnaWdub3JlUGlja2luZycsICdpZ25vcmVQcmVaJywgJ2lnbm9yZUdCdWZmZXInXHJcbiAgICAgICAgXTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJhYmxlID0gTm9kZS5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIHJlbmRlcmFibGUuZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xyXG4gICAgICAgICAgICByZW5kZXJhYmxlLm1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbDtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBwcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgLy8gVHJ5IG5vdCB0byBvdmVyd3JpdGUgdGhlIHByb3RvdHlwZSBwcm9wZXJ0eVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlbmRlcmFibGVbbmFtZV0gIT09IHRoaXNbbmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlW25hbWVdID0gdGhpc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGU7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKClcclxufSk7XHJcblxyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuUE9JTlRTID0gZ2xlbnVtLlBPSU5UUztcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLkxJTkVTID0gZ2xlbnVtLkxJTkVTO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuTElORV9MT09QID0gZ2xlbnVtLkxJTkVfTE9PUDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLkxJTkVfU1RSSVAgPSBnbGVudW0uTElORV9TVFJJUDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLlRSSUFOR0xFUyA9IGdsZW51bS5UUklBTkdMRVM7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5UUklBTkdMRV9TVFJJUCA9IGdsZW51bS5UUklBTkdMRV9TVFJJUDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLlRSSUFOR0xFX0ZBTiA9IGdsZW51bS5UUklBTkdMRV9GQU47XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5CQUNLID0gZ2xlbnVtLkJBQ0s7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5GUk9OVCA9IGdsZW51bS5GUk9OVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLkZST05UX0FORF9CQUNLID0gZ2xlbnVtLkZST05UX0FORF9CQUNLO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuQ1cgPSBnbGVudW0uQ1c7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5DQ1cgPSBnbGVudW0uQ0NXO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUmVuZGVyYWJsZTtcclxuIiwiaW1wb3J0IFJlbmRlcmFibGUgZnJvbSAnLi9SZW5kZXJhYmxlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5NZXNoXHJcbiAqIEBleHRlbmRzIGNsYXkuUmVuZGVyYWJsZVxyXG4gKi9cclxudmFyIE1lc2ggPSBSZW5kZXJhYmxlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkuTWVzaCMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VkIHdoZW4gaXQgaXMgYSBza2lubmVkIG1lc2hcclxuICAgICAqIEB0eXBlIHtjbGF5LlNrZWxldG9ufVxyXG4gICAgICovXHJcbiAgICBza2VsZXRvbjogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogSm9pbnRzIGluZGljZXMgTWVzaGVzIGNhbiBzaGFyZSB0aGUgb25lIHNrZWxldG9uIGluc3RhbmNlIGFuZCBlYWNoIG1lc2ggY2FuIHVzZSBvbmUgcGFydCBvZiBqb2ludHMuIEpvaW50cyBpbmRpY2VzIGluZGljYXRlIHRoZSBpbmRleCBvZiBqb2ludCBpbiB0aGUgc2tlbGV0b24gaW5zdGFuY2VcclxuICAgICAqIEB0eXBlIHtudW1iZXJbXX1cclxuICAgICAqL1xyXG4gICAgam9pbnRzOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgc3RvcmUgdGhlIHNraW4gbWF0cmljZXMgaW4gdmVydGV4IHRleHR1cmVcclxuICAgICAqIEB0eXBlIHtib29sfVxyXG4gICAgICovXHJcbiAgICB1c2VTa2luTWF0cmljZXNUZXh0dXJlOiBmYWxzZVxyXG5cclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCF0aGlzLmpvaW50cykge1xyXG4gICAgICAgIHRoaXMuam9pbnRzID0gW107XHJcbiAgICB9XHJcbn0sIHtcclxuXHJcbiAgICBpc1NraW5uZWRNZXNoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuc2tlbGV0b24gJiYgdGhpcy5qb2ludHMgJiYgdGhpcy5qb2ludHMubGVuZ3RoID4gMCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG1lc2ggPSBSZW5kZXJhYmxlLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIG1lc2guc2tlbGV0b24gPSB0aGlzLnNrZWxldG9uO1xyXG4gICAgICAgIGlmICh0aGlzLmpvaW50cykge1xyXG4gICAgICAgICAgICBtZXNoLmpvaW50cyA9IHRoaXMuam9pbnRzLnNsaWNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtZXNoO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbi8vIEVudW1zXHJcbk1lc2guUE9JTlRTID0gZ2xlbnVtLlBPSU5UUztcclxuTWVzaC5MSU5FUyA9IGdsZW51bS5MSU5FUztcclxuTWVzaC5MSU5FX0xPT1AgPSBnbGVudW0uTElORV9MT09QO1xyXG5NZXNoLkxJTkVfU1RSSVAgPSBnbGVudW0uTElORV9TVFJJUDtcclxuTWVzaC5UUklBTkdMRVMgPSBnbGVudW0uVFJJQU5HTEVTO1xyXG5NZXNoLlRSSUFOR0xFX1NUUklQID0gZ2xlbnVtLlRSSUFOR0xFX1NUUklQO1xyXG5NZXNoLlRSSUFOR0xFX0ZBTiA9IGdsZW51bS5UUklBTkdMRV9GQU47XHJcblxyXG5NZXNoLkJBQ0sgPSBnbGVudW0uQkFDSztcclxuTWVzaC5GUk9OVCA9IGdsZW51bS5GUk9OVDtcclxuTWVzaC5GUk9OVF9BTkRfQkFDSyA9IGdsZW51bS5GUk9OVF9BTkRfQkFDSztcclxuTWVzaC5DVyA9IGdsZW51bS5DVztcclxuTWVzaC5DQ1cgPSBnbGVudW0uQ0NXO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWVzaDtcclxuIiwiaW1wb3J0IENhbWVyYSBmcm9tICcuLi9DYW1lcmEnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNhbWVyYS5QZXJzcGVjdGl2ZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LkNhbWVyYVxyXG4gKi9cclxudmFyIFBlcnNwZWN0aXZlID0gQ2FtZXJhLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkuY2FtZXJhLlBlcnNwZWN0aXZlIyAqL3tcclxuICAgIC8qKlxyXG4gICAgICogVmVydGljYWwgZmllbGQgb2YgdmlldyBpbiBkZWdyZWVzXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBmb3Y6IDUwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBBc3BlY3QgcmF0aW8sIHR5cGljYWxseSB2aWV3cG9ydCB3aWR0aCAvIGhlaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYXNwZWN0OiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBuZWFyOiAwLjEsXHJcbiAgICAvKipcclxuICAgICAqIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZmFyOiAyMDAwXHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jYW1lcmEuUGVyc3BlY3RpdmUucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICB1cGRhdGVQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgcmFkID0gdGhpcy5mb3YgLyAxODAgKiBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5wZXJzcGVjdGl2ZShyYWQsIHRoaXMuYXNwZWN0LCB0aGlzLm5lYXIsIHRoaXMuZmFyKTtcclxuICAgIH0sXHJcbiAgICBkZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG0gPSB0aGlzLnByb2plY3Rpb25NYXRyaXguYXJyYXk7XHJcbiAgICAgICAgdmFyIHJhZCA9IE1hdGguYXRhbigxIC8gbVs1XSkgKiAyO1xyXG4gICAgICAgIHRoaXMuZm92ID0gcmFkIC8gTWF0aC5QSSAqIDE4MDtcclxuICAgICAgICB0aGlzLmFzcGVjdCA9IG1bNV0gLyBtWzBdO1xyXG4gICAgICAgIHRoaXMubmVhciA9IG1bMTRdIC8gKG1bMTBdIC0gMSk7XHJcbiAgICAgICAgdGhpcy5mYXIgPSBtWzE0XSAvIChtWzEwXSArIDEpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybiB7Y2xheS5jYW1lcmEuUGVyc3BlY3RpdmV9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgY2FtZXJhID0gQ2FtZXJhLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGNhbWVyYS5mb3YgPSB0aGlzLmZvdjtcclxuICAgICAgICBjYW1lcmEuYXNwZWN0ID0gdGhpcy5hc3BlY3Q7XHJcbiAgICAgICAgY2FtZXJhLm5lYXIgPSB0aGlzLm5lYXI7XHJcbiAgICAgICAgY2FtZXJhLmZhciA9IHRoaXMuZmFyO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FtZXJhO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBlcnNwZWN0aXZlO1xyXG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gJy4uL0NhbWVyYSc7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jYW1lcmEuT3J0aG9ncmFwaGljXHJcbiAqIEBleHRlbmRzIGNsYXkuQ2FtZXJhXHJcbiAqL1xyXG52YXIgT3J0aG9ncmFwaGljID0gQ2FtZXJhLmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5LmNhbWVyYS5PcnRob2dyYXBoaWMjICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVmdDogLTEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJpZ2h0OiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBuZWFyOiAtMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZmFyOiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0b3A6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJvdHRvbTogLTFcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LmNhbWVyYS5PcnRob2dyYXBoaWMucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICB1cGRhdGVQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbigpIHtcclxuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXgub3J0aG8odGhpcy5sZWZ0LCB0aGlzLnJpZ2h0LCB0aGlzLmJvdHRvbSwgdGhpcy50b3AsIHRoaXMubmVhciwgdGhpcy5mYXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBkZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG0gPSB0aGlzLnByb2plY3Rpb25NYXRyaXguYXJyYXk7XHJcbiAgICAgICAgdGhpcy5sZWZ0ID0gKC0xIC0gbVsxMl0pIC8gbVswXTtcclxuICAgICAgICB0aGlzLnJpZ2h0ID0gKDEgLSBtWzEyXSkgLyBtWzBdO1xyXG4gICAgICAgIHRoaXMudG9wID0gKDEgLSBtWzEzXSkgLyBtWzVdO1xyXG4gICAgICAgIHRoaXMuYm90dG9tID0gKC0xIC0gbVsxM10pIC8gbVs1XTtcclxuICAgICAgICB0aGlzLm5lYXIgPSAtKC0xIC0gbVsxNF0pIC8gbVsxMF07XHJcbiAgICAgICAgdGhpcy5mYXIgPSAtKDEgLSBtWzE0XSkgLyBtWzEwXTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuY2FtZXJhLk9ydGhvZ3JhcGhpY31cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBjYW1lcmEgPSBDYW1lcmEucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICAgICAgY2FtZXJhLmxlZnQgPSB0aGlzLmxlZnQ7XHJcbiAgICAgICAgY2FtZXJhLnJpZ2h0ID0gdGhpcy5yaWdodDtcclxuICAgICAgICBjYW1lcmEubmVhciA9IHRoaXMubmVhcjtcclxuICAgICAgICBjYW1lcmEuZmFyID0gdGhpcy5mYXI7XHJcbiAgICAgICAgY2FtZXJhLnRvcCA9IHRoaXMudG9wO1xyXG4gICAgICAgIGNhbWVyYS5ib3R0b20gPSB0aGlzLmJvdHRvbTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNhbWVyYTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBPcnRob2dyYXBoaWM7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LnN0YW5kYXJkLmNodW5rLnZhcnlpbmdcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Ob3JtYWw7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG4jaWYgZGVmaW5lZChQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEKSB8fCBkZWZpbmVkKE5PUk1BTE1BUF9FTkFCTEVEKVxcbnZhcnlpbmcgdmVjMyB2X1RhbmdlbnQ7XFxudmFyeWluZyB2ZWMzIHZfQml0YW5nZW50O1xcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKEFPTUFQX0VOQUJMRUQpXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQyO1xcbiNlbmRpZlxcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnN0YW5kYXJkLmNodW5rLmxpZ2h0X2hlYWRlclxcbiNpZmRlZiBBTUJJRU5UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5hbWJpZW50X2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfU0hfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLmFtYmllbnRfc2hfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5hbWJpZW50X2N1YmVtYXBfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgUE9JTlRfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLnBvaW50X2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIERJUkVDVElPTkFMX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5kaXJlY3Rpb25hbF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBTUE9UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5zcG90X2xpZ2h0XFxuI2VuZGlmXFxuQGVuZFxcbkBleHBvcnQgY2xheS5zdGFuZGFyZC52ZXJ0ZXhcXG4jZGVmaW5lIFNIQURFUl9OQU1FIHN0YW5kYXJkXFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gbWF0NCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgOiBXT1JMRElOVkVSU0VUUkFOU1BPU0U7XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxudW5pZm9ybSB2ZWMyIHV2UmVwZWF0ID0gdmVjMigxLjAsIDEuMCk7XFxudW5pZm9ybSB2ZWMyIHV2T2Zmc2V0ID0gdmVjMigwLjAsIDAuMCk7XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZCA6IFRFWENPT1JEXzA7XFxuI2lmIGRlZmluZWQoQU9NQVBfRU5BQkxFRClcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZDIgOiBURVhDT09SRF8xO1xcbiNlbmRpZlxcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbCA6IE5PUk1BTDtcXG5hdHRyaWJ1dGUgdmVjNCB0YW5nZW50IDogVEFOR0VOVDtcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuYXR0cmlidXRlIHZlYzQgYV9Db2xvciA6IENPTE9SO1xcbiNlbmRpZlxcbmF0dHJpYnV0ZSB2ZWMzIGJhcnljZW50cmljO1xcbkBpbXBvcnQgY2xheS5zdGFuZGFyZC5jaHVuay52YXJ5aW5nXFxuQGltcG9ydCBjbGF5LmNodW5rLnNraW5uaW5nX2hlYWRlclxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiB2ZWMzIHNraW5uZWROb3JtYWwgPSBub3JtYWw7XFxuIHZlYzMgc2tpbm5lZFRhbmdlbnQgPSB0YW5nZW50Lnh5ejtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuIHNraW5uZWROb3JtYWwgPSAoc2tpbk1hdHJpeFdTICogdmVjNChub3JtYWwsIDAuMCkpLnh5ejtcXG4gc2tpbm5lZFRhbmdlbnQgPSAoc2tpbk1hdHJpeFdTICogdmVjNCh0YW5nZW50Lnh5eiwgMC4wKSkueHl6O1xcbiNlbmRpZlxcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkICogdXZSZXBlYXQgKyB1dk9mZnNldDtcXG4gdl9Xb3JsZFBvc2l0aW9uID0gKHdvcmxkICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gdl9CYXJ5Y2VudHJpYyA9IGJhcnljZW50cmljO1xcbiB2X05vcm1hbCA9IG5vcm1hbGl6ZSgod29ybGRJbnZlcnNlVHJhbnNwb3NlICogdmVjNChza2lubmVkTm9ybWFsLCAwLjApKS54eXopO1xcbiNpZiBkZWZpbmVkKFBBUkFMTEFYT0NDTFVTSU9OTUFQX0VOQUJMRUQpIHx8IGRlZmluZWQoTk9STUFMTUFQX0VOQUJMRUQpXFxuIHZfVGFuZ2VudCA9IG5vcm1hbGl6ZSgod29ybGRJbnZlcnNlVHJhbnNwb3NlICogdmVjNChza2lubmVkVGFuZ2VudCwgMC4wKSkueHl6KTtcXG4gdl9CaXRhbmdlbnQgPSBub3JtYWxpemUoY3Jvc3Modl9Ob3JtYWwsIHZfVGFuZ2VudCkgKiB0YW5nZW50LncpO1xcbiNlbmRpZlxcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gdl9Db2xvciA9IGFfQ29sb3I7XFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoQU9NQVBfRU5BQkxFRClcXG4gdl9UZXhjb29yZDIgPSB0ZXhjb29yZDI7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc3RhbmRhcmQuZnJhZ21lbnRcXG4jZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzlcXG4jZGVmaW5lIEdMT1NTSU5FU1NfQ0hBTk5FTCAwXFxuI2RlZmluZSBST1VHSE5FU1NfQ0hBTk5FTCAwXFxuI2RlZmluZSBNRVRBTE5FU1NfQ0hBTk5FTCAxXFxuI2RlZmluZSBESUZGVVNFTUFQX0FMUEhBX0FMUEhBXFxuQGltcG9ydCBjbGF5LnN0YW5kYXJkLmNodW5rLnZhcnlpbmdcXG51bmlmb3JtIG1hdDQgdmlld0ludmVyc2UgOiBWSUVXSU5WRVJTRTtcXG4jaWZkZWYgTk9STUFMTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7XFxuI2VuZGlmXFxudW5pZm9ybSBmbG9hdCBub3JtYWxTY2FsZTogMS4wO1xcbiNpZmRlZiBESUZGVVNFTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBTUEVDVUxBUk1BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJNYXA7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9ST1VHSE5FU1NcXG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcyA6IDAuNTtcXG4gI2lmZGVmIFJPVUdITkVTU01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgcm91Z2huZXNzTWFwO1xcbiAjZW5kaWZcXG4jZWxzZVxcbnVuaWZvcm0gZmxvYXQgZ2xvc3NpbmVzczogMC41O1xcbiAjaWZkZWYgR0xPU1NJTkVTU01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgZ2xvc3NpbmVzc01hcDtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIE1FVEFMTkVTU01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBPQ0NMVVNJT05NQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIG9jY2x1c2lvbk1hcDtcXG4jZW5kaWZcXG4jaWZkZWYgRU5WSVJPTk1FTlRNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlckN1YmUgZW52aXJvbm1lbnRNYXA7XFxuICNpZmRlZiBQQVJBTExBWF9DT1JSRUNURURcXG51bmlmb3JtIHZlYzMgZW52aXJvbm1lbnRCb3hNaW47XFxudW5pZm9ybSB2ZWMzIGVudmlyb25tZW50Qm94TWF4O1xcbiAjZW5kaWZcXG4jZW5kaWZcXG4jaWZkZWYgQlJERkxPT0tVUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgYnJkZkxvb2t1cDtcXG4jZW5kaWZcXG4jaWZkZWYgRU1JU1NJVkVNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBTU0FPTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBzc2FvTWFwO1xcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydCA6IFZJRVdQT1JUO1xcbiNlbmRpZlxcbiNpZmRlZiBBT01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgYW9NYXA7XFxudW5pZm9ybSBmbG9hdCBhb0ludGVuc2l0eTtcXG4jZW5kaWZcXG51bmlmb3JtIHZlYzMgY29sb3IgOiBbMS4wLCAxLjAsIDEuMF07XFxudW5pZm9ybSBmbG9hdCBhbHBoYSA6IDEuMDtcXG4jaWZkZWYgQUxQSEFfVEVTVFxcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuOTtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX01FVEFMTkVTU1xcbnVuaWZvcm0gZmxvYXQgbWV0YWxuZXNzIDogMC4wO1xcbiNlbHNlXFxudW5pZm9ybSB2ZWMzIHNwZWN1bGFyQ29sb3IgOiBbMC4xLCAwLjEsIDAuMV07XFxuI2VuZGlmXFxudW5pZm9ybSB2ZWMzIGVtaXNzaW9uIDogWzAuMCwgMC4wLCAwLjBdO1xcbnVuaWZvcm0gZmxvYXQgZW1pc3Npb25JbnRlbnNpdHk6IDE7XFxudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGggOiAwLjA7XFxudW5pZm9ybSB2ZWM0IGxpbmVDb2xvciA6IFswLjAsIDAuMCwgMC4wLCAwLjZdO1xcbiNpZmRlZiBFTlZJUk9OTUVOVE1BUF9QUkVGSUxURVJcXG51bmlmb3JtIGZsb2F0IG1heE1pcG1hcExldmVsOiA1O1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5zdGFuZGFyZC5jaHVuay5saWdodF9oZWFkZXJcXG5AaW1wb3J0IGNsYXkudXRpbC5jYWxjdWxhdGVfYXR0ZW51YXRpb25cXG5AaW1wb3J0IGNsYXkudXRpbC5lZGdlX2ZhY3RvclxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkudXRpbC5zcmdiXFxuQGltcG9ydCBjbGF5LnBsdWdpbi5jb21wdXRlX3NoYWRvd19tYXBcXG5AaW1wb3J0IGNsYXkudXRpbC5wYXJhbGxheF9jb3JyZWN0XFxuQGltcG9ydCBjbGF5LnV0aWwuQUNFU1xcbmZsb2F0IEdfU21pdGgoZmxvYXQgZywgZmxvYXQgbmR2LCBmbG9hdCBuZGwpXFxue1xcbiBmbG9hdCByb3VnaG5lc3MgPSAxLjAgLSBnO1xcbiBmbG9hdCBrID0gcm91Z2huZXNzICogcm91Z2huZXNzIC8gMi4wO1xcbiBmbG9hdCBHMVYgPSBuZHYgLyAobmR2ICogKDEuMCAtIGspICsgayk7XFxuIGZsb2F0IEcxTCA9IG5kbCAvIChuZGwgKiAoMS4wIC0gaykgKyBrKTtcXG4gcmV0dXJuIEcxTCAqIEcxVjtcXG59XFxudmVjMyBGX1NjaGxpY2soZmxvYXQgbmR2LCB2ZWMzIHNwZWMpIHtcXG4gcmV0dXJuIHNwZWMgKyAoMS4wIC0gc3BlYykgKiBwb3coMS4wIC0gbmR2LCA1LjApO1xcbn1cXG5mbG9hdCBEX1Bob25nKGZsb2F0IGcsIGZsb2F0IG5kaCkge1xcbiBmbG9hdCBhID0gcG93KDgxOTIuMCwgZyk7XFxuIHJldHVybiAoYSArIDIuMCkgLyA4LjAgKiBwb3cobmRoLCBhKTtcXG59XFxuZmxvYXQgRF9HR1goZmxvYXQgZywgZmxvYXQgbmRoKSB7XFxuIGZsb2F0IHIgPSAxLjAgLSBnO1xcbiBmbG9hdCBhID0gciAqIHI7XFxuIGZsb2F0IHRtcCA9IG5kaCAqIG5kaCAqIChhIC0gMS4wKSArIDEuMDtcXG4gcmV0dXJuIGEgLyAoUEkgKiB0bXAgKiB0bXApO1xcbn1cXG4jaWZkZWYgUEFSQUxMQVhPQ0NMVVNJT05NQVBfRU5BQkxFRFxcbnVuaWZvcm0gZmxvYXQgcGFyYWxsYXhPY2NsdXNpb25TY2FsZSA6IDAuMDI7XFxudW5pZm9ybSBmbG9hdCBwYXJhbGxheE1heExheWVycyA6IDIwO1xcbnVuaWZvcm0gZmxvYXQgcGFyYWxsYXhNaW5MYXllcnMgOiA1O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHBhcmFsbGF4T2NjbHVzaW9uTWFwO1xcbm1hdDMgdHJhbnNwb3NlKGluIG1hdDMgaW5NYXQpXFxue1xcbiB2ZWMzIGkwID0gaW5NYXRbMF07XFxuIHZlYzMgaTEgPSBpbk1hdFsxXTtcXG4gdmVjMyBpMiA9IGluTWF0WzJdO1xcbiByZXR1cm4gbWF0MyhcXG4gdmVjMyhpMC54LCBpMS54LCBpMi54KSxcXG4gdmVjMyhpMC55LCBpMS55LCBpMi55KSxcXG4gdmVjMyhpMC56LCBpMS56LCBpMi56KVxcbiApO1xcbn1cXG52ZWMyIHBhcmFsbGF4VXYodmVjMiB1diwgdmVjMyB2aWV3RGlyKVxcbntcXG4gZmxvYXQgbnVtTGF5ZXJzID0gbWl4KHBhcmFsbGF4TWF4TGF5ZXJzLCBwYXJhbGxheE1pbkxheWVycywgYWJzKGRvdCh2ZWMzKDAuMCwgMC4wLCAxLjApLCB2aWV3RGlyKSkpO1xcbiBmbG9hdCBsYXllckhlaWdodCA9IDEuMCAvIG51bUxheWVycztcXG4gZmxvYXQgY3VyTGF5ZXJIZWlnaHQgPSAwLjA7XFxuIHZlYzIgZGVsdGFVdiA9IHZpZXdEaXIueHkgKiBwYXJhbGxheE9jY2x1c2lvblNjYWxlIC8gKHZpZXdEaXIueiAqIG51bUxheWVycyk7XFxuIHZlYzIgY3VyVXYgPSB1djtcXG4gZmxvYXQgaGVpZ2h0ID0gMS4wIC0gdGV4dHVyZTJEKHBhcmFsbGF4T2NjbHVzaW9uTWFwLCBjdXJVdikucjtcXG4gZm9yIChpbnQgaSA9IDA7IGkgPCAzMDsgaSsrKSB7XFxuIGN1ckxheWVySGVpZ2h0ICs9IGxheWVySGVpZ2h0O1xcbiBjdXJVdiAtPSBkZWx0YVV2O1xcbiBoZWlnaHQgPSAxLjAgLSB0ZXh0dXJlMkQocGFyYWxsYXhPY2NsdXNpb25NYXAsIGN1clV2KS5yO1xcbiBpZiAoaGVpZ2h0IDwgY3VyTGF5ZXJIZWlnaHQpIHtcXG4gYnJlYWs7XFxuIH1cXG4gfVxcbiB2ZWMyIHByZXZVdiA9IGN1clV2ICsgZGVsdGFVdjtcXG4gZmxvYXQgbmV4dCA9IGhlaWdodCAtIGN1ckxheWVySGVpZ2h0O1xcbiBmbG9hdCBwcmV2ID0gMS4wIC0gdGV4dHVyZTJEKHBhcmFsbGF4T2NjbHVzaW9uTWFwLCBwcmV2VXYpLnIgLSBjdXJMYXllckhlaWdodCArIGxheWVySGVpZ2h0O1xcbiByZXR1cm4gbWl4KGN1clV2LCBwcmV2VXYsIG5leHQgLyAobmV4dCAtIHByZXYpKTtcXG59XFxuI2VuZGlmXFxudm9pZCBtYWluKCkge1xcbiB2ZWM0IGFsYmVkb0NvbG9yID0gdmVjNChjb2xvciwgYWxwaGEpO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gYWxiZWRvQ29sb3IgKj0gdl9Db2xvcjtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9ERUNPREVcXG4gYWxiZWRvQ29sb3IgPSBzUkdCVG9MaW5lYXIoYWxiZWRvQ29sb3IpO1xcbiNlbmRpZlxcbiB2ZWMzIGV5ZVBvcyA9IHZpZXdJbnZlcnNlWzNdLnh5ejtcXG4gdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvcyAtIHZfV29ybGRQb3NpdGlvbik7XFxuIHZlYzIgdXYgPSB2X1RleGNvb3JkO1xcbiNpZiBkZWZpbmVkKFBBUkFMTEFYT0NDTFVTSU9OTUFQX0VOQUJMRUQpIHx8IGRlZmluZWQoTk9STUFMTUFQX0VOQUJMRUQpXFxuIG1hdDMgdGJuID0gbWF0Myh2X1RhbmdlbnQsIHZfQml0YW5nZW50LCB2X05vcm1hbCk7XFxuI2VuZGlmXFxuI2lmZGVmIFBBUkFMTEFYT0NDTFVTSU9OTUFQX0VOQUJMRURcXG4gdXYgPSBwYXJhbGxheFV2KHZfVGV4Y29vcmQsIG5vcm1hbGl6ZSh0cmFuc3Bvc2UodGJuKSAqIC1WKSk7XFxuI2VuZGlmXFxuI2lmZGVmIERJRkZVU0VNQVBfRU5BQkxFRFxcbiB2ZWM0IHRleGVsID0gdGV4dHVyZTJEKGRpZmZ1c2VNYXAsIHV2KTtcXG4gI2lmZGVmIFNSR0JfREVDT0RFXFxuIHRleGVsID0gc1JHQlRvTGluZWFyKHRleGVsKTtcXG4gI2VuZGlmXFxuIGFsYmVkb0NvbG9yLnJnYiAqPSB0ZXhlbC5yZ2I7XFxuICNpZmRlZiBESUZGVVNFTUFQX0FMUEhBX0FMUEhBXFxuIGFsYmVkb0NvbG9yLmEgKj0gdGV4ZWwuYTtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9NRVRBTE5FU1NcXG4gZmxvYXQgbSA9IG1ldGFsbmVzcztcXG4gI2lmZGVmIE1FVEFMTkVTU01BUF9FTkFCTEVEXFxuIGZsb2F0IG0yID0gdGV4dHVyZTJEKG1ldGFsbmVzc01hcCwgdXYpW01FVEFMTkVTU19DSEFOTkVMXTtcXG4gbSA9IGNsYW1wKG0yICsgKG0gLSAwLjUpICogMi4wLCAwLjAsIDEuMCk7XFxuICNlbmRpZlxcbiB2ZWMzIGJhc2VDb2xvciA9IGFsYmVkb0NvbG9yLnJnYjtcXG4gYWxiZWRvQ29sb3IucmdiID0gYmFzZUNvbG9yICogKDEuMCAtIG0pO1xcbiB2ZWMzIHNwZWMgPSBtaXgodmVjMygwLjA0KSwgYmFzZUNvbG9yLCBtKTtcXG4jZWxzZVxcbiB2ZWMzIHNwZWMgPSBzcGVjdWxhckNvbG9yO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfUk9VR0hORVNTXFxuIGZsb2F0IGcgPSBjbGFtcCgxLjAgLSByb3VnaG5lc3MsIDAuMCwgMS4wKTtcXG4gI2lmZGVmIFJPVUdITkVTU01BUF9FTkFCTEVEXFxuIGZsb2F0IGcyID0gMS4wIC0gdGV4dHVyZTJEKHJvdWdobmVzc01hcCwgdXYpW1JPVUdITkVTU19DSEFOTkVMXTtcXG4gZyA9IGNsYW1wKGcyICsgKGcgLSAwLjUpICogMi4wLCAwLjAsIDEuMCk7XFxuICNlbmRpZlxcbiNlbHNlXFxuIGZsb2F0IGcgPSBnbG9zc2luZXNzO1xcbiAjaWZkZWYgR0xPU1NJTkVTU01BUF9FTkFCTEVEXFxuIGZsb2F0IGcyID0gdGV4dHVyZTJEKGdsb3NzaW5lc3NNYXAsIHV2KVtHTE9TU0lORVNTX0NIQU5ORUxdO1xcbiBnID0gY2xhbXAoZzIgKyAoZyAtIDAuNSkgKiAyLjAsIDAuMCwgMS4wKTtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIFNQRUNVTEFSTUFQX0VOQUJMRURcXG4gc3BlYyAqPSBzUkdCVG9MaW5lYXIodGV4dHVyZTJEKHNwZWN1bGFyTWFwLCB1dikpLnJnYjtcXG4jZW5kaWZcXG4gdmVjMyBOID0gdl9Ob3JtYWw7XFxuI2lmZGVmIERPVUJMRV9TSURFRFxcbiBpZiAoZG90KE4sIFYpIDwgMC4wKSB7XFxuIE4gPSAtTjtcXG4gfVxcbiNlbmRpZlxcbiNpZmRlZiBOT1JNQUxNQVBfRU5BQkxFRFxcbiBpZiAoZG90KHZfVGFuZ2VudCwgdl9UYW5nZW50KSA+IDAuMCkge1xcbiB2ZWMzIG5vcm1hbFRleGVsID0gdGV4dHVyZTJEKG5vcm1hbE1hcCwgdXYpLnh5ejtcXG4gaWYgKGRvdChub3JtYWxUZXhlbCwgbm9ybWFsVGV4ZWwpID4gMC4wKSB7IE4gPSAobm9ybWFsVGV4ZWwgKiAyLjAgLSAxLjApO1xcbiBOID0gbm9ybWFsaXplKE4gKiB2ZWMzKG5vcm1hbFNjYWxlLCBub3JtYWxTY2FsZSwgMS4wKSk7XFxuIHRiblsxXSA9IC10Ym5bMV07XFxuIE4gPSBub3JtYWxpemUodGJuICogTik7XFxuIH1cXG4gfVxcbiNlbmRpZlxcbiB2ZWMzIGRpZmZ1c2VUZXJtID0gdmVjMygwLjAsIDAuMCwgMC4wKTtcXG4gdmVjMyBzcGVjdWxhclRlcm0gPSB2ZWMzKDAuMCwgMC4wLCAwLjApO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gdmVjMyBmcmVzbmVsVGVybSA9IEZfU2NobGljayhuZHYsIHNwZWMpO1xcbiNpZmRlZiBBTUJJRU5UX0xJR0hUX0NPVU5UXFxuIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IEFNQklFTlRfTElHSFRfQ09VTlQ7IF9pZHhfKyspXFxuIHt7XFxuIGRpZmZ1c2VUZXJtICs9IGFtYmllbnRMaWdodENvbG9yW19pZHhfXTtcXG4gfX1cXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVFxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX1NIX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7e1xcbiBkaWZmdXNlVGVybSArPSBjYWxjQW1iaWVudFNITGlnaHQoX2lkeF8sIE4pICogYW1iaWVudFNITGlnaHRDb2xvcltfaWR4X107XFxuIH19XFxuI2VuZGlmXFxuI2lmZGVmIFBPSU5UX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBmbG9hdCBzaGFkb3dDb250cmlic1BvaW50W1BPSU5UX0xJR0hUX0NPVU5UXTtcXG4gaWYoc2hhZG93RW5hYmxlZClcXG4ge1xcbiBjb21wdXRlU2hhZG93T2ZQb2ludExpZ2h0cyh2X1dvcmxkUG9zaXRpb24sIHNoYWRvd0NvbnRyaWJzUG9pbnQpO1xcbiB9XFxuI2VuZGlmXFxuIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IFBPSU5UX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7e1xcbiB2ZWMzIGxpZ2h0UG9zaXRpb24gPSBwb2ludExpZ2h0UG9zaXRpb25bX2lkeF9dO1xcbiB2ZWMzIGxjID0gcG9pbnRMaWdodENvbG9yW19pZHhfXTtcXG4gZmxvYXQgcmFuZ2UgPSBwb2ludExpZ2h0UmFuZ2VbX2lkeF9dO1xcbiB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgcmFuZ2UpO1xcbiBMIC89IGRpc3Q7XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kbCA9IGNsYW1wKGRvdChOLCBMKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgc2hhZG93Q29udHJpYiA9IDEuMDtcXG4jaWYgZGVmaW5lZChQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGlmKHNoYWRvd0VuYWJsZWQpXFxuIHtcXG4gc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzUG9pbnRbX2lkeF9dO1xcbiB9XFxuI2VuZGlmXFxuIHZlYzMgbGkgPSBsYyAqIG5kbCAqIGF0dGVudWF0aW9uICogc2hhZG93Q29udHJpYjtcXG4gZGlmZnVzZVRlcm0gKz0gbGk7XFxuIHNwZWN1bGFyVGVybSArPSBsaSAqIGZyZXNuZWxUZXJtICogRF9QaG9uZyhnLCBuZGgpO1xcbiB9fVxcbiNlbmRpZlxcbiNpZmRlZiBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVFxcbiNpZiBkZWZpbmVkKERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gZmxvYXQgc2hhZG93Q29udHJpYnNEaXJbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdO1xcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIGNvbXB1dGVTaGFkb3dPZkRpcmVjdGlvbmFsTGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNEaXIpO1xcbiB9XFxuI2VuZGlmXFxuIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IERJUkVDVElPTkFMX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7e1xcbiB2ZWMzIEwgPSAtbm9ybWFsaXplKGRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb25bX2lkeF9dKTtcXG4gdmVjMyBsYyA9IGRpcmVjdGlvbmFsTGlnaHRDb2xvcltfaWR4X107XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kbCA9IGNsYW1wKGRvdChOLCBMKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgc2hhZG93Q29udHJpYiA9IDEuMDtcXG4jaWYgZGVmaW5lZChESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGlmKHNoYWRvd0VuYWJsZWQpXFxuIHtcXG4gc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzRGlyW19pZHhfXTtcXG4gfVxcbiNlbmRpZlxcbiB2ZWMzIGxpID0gbGMgKiBuZGwgKiBzaGFkb3dDb250cmliO1xcbiBkaWZmdXNlVGVybSArPSBsaTtcXG4gc3BlY3VsYXJUZXJtICs9IGxpICogZnJlc25lbFRlcm0gKiBEX1Bob25nKGcsIG5kaCk7XFxuIH19XFxuI2VuZGlmXFxuI2lmZGVmIFNQT1RfTElHSFRfQ09VTlRcXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gZmxvYXQgc2hhZG93Q29udHJpYnNTcG90W1NQT1RfTElHSFRfQ09VTlRdO1xcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIGNvbXB1dGVTaGFkb3dPZlNwb3RMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic1Nwb3QpO1xcbiB9XFxuI2VuZGlmXFxuIGZvcihpbnQgaSA9IDA7IGkgPCBTUE9UX0xJR0hUX0NPVU5UOyBpKyspXFxuIHtcXG4gdmVjMyBsaWdodFBvc2l0aW9uID0gc3BvdExpZ2h0UG9zaXRpb25baV07XFxuIHZlYzMgc3BvdExpZ2h0RGlyZWN0aW9uID0gLW5vcm1hbGl6ZShzcG90TGlnaHREaXJlY3Rpb25baV0pO1xcbiB2ZWMzIGxjID0gc3BvdExpZ2h0Q29sb3JbaV07XFxuIGZsb2F0IHJhbmdlID0gc3BvdExpZ2h0UmFuZ2VbaV07XFxuIGZsb2F0IGEgPSBzcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lW2ldO1xcbiBmbG9hdCBiID0gc3BvdExpZ2h0UGVudW1icmFBbmdsZUNvc2luZVtpXTtcXG4gZmxvYXQgZmFsbG9mZkZhY3RvciA9IHNwb3RMaWdodEZhbGxvZmZGYWN0b3JbaV07XFxuIHZlYzMgTCA9IGxpZ2h0UG9zaXRpb24gLSB2X1dvcmxkUG9zaXRpb247XFxuIGZsb2F0IGRpc3QgPSBsZW5ndGgoTCk7XFxuIGZsb2F0IGF0dGVudWF0aW9uID0gbGlnaHRBdHRlbnVhdGlvbihkaXN0LCByYW5nZSk7XFxuIEwgLz0gZGlzdDtcXG4gZmxvYXQgYyA9IGRvdChzcG90TGlnaHREaXJlY3Rpb24sIEwpO1xcbiBmbG9hdCBmYWxsb2ZmO1xcbiBmYWxsb2ZmID0gY2xhbXAoKGMgLSBhKSAvKGIgLSBhKSwgMC4wLCAxLjApO1xcbiBmYWxsb2ZmID0gcG93KGZhbGxvZmYsIGZhbGxvZmZGYWN0b3IpO1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGlmIChzaGFkb3dFbmFibGVkKVxcbiB7XFxuIHNoYWRvd0NvbnRyaWIgPSBzaGFkb3dDb250cmlic1Nwb3RbaV07XFxuIH1cXG4jZW5kaWZcXG4gdmVjMyBsaSA9IGxjICogYXR0ZW51YXRpb24gKiAoMS4wIC0gZmFsbG9mZikgKiBzaGFkb3dDb250cmliICogbmRsO1xcbiBkaWZmdXNlVGVybSArPSBsaTtcXG4gc3BlY3VsYXJUZXJtICs9IGxpICogZnJlc25lbFRlcm0gKiBEX1Bob25nKGcsIG5kaCk7XFxuIH1cXG4jZW5kaWZcXG4gdmVjNCBvdXRDb2xvciA9IGFsYmVkb0NvbG9yO1xcbiBvdXRDb2xvci5yZ2IgKj0gbWF4KGRpZmZ1c2VUZXJtLCB2ZWMzKDAuMCkpO1xcbiBvdXRDb2xvci5yZ2IgKz0gbWF4KHNwZWN1bGFyVGVybSwgdmVjMygwLjApKTtcXG4jaWZkZWYgQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXFxuIHZlYzMgTCA9IHJlZmxlY3QoLVYsIE4pO1xcbiBmbG9hdCByb3VnaDIgPSBjbGFtcCgxLjAgLSBnLCAwLjAsIDEuMCk7XFxuIGZsb2F0IGJpYXMyID0gcm91Z2gyICogNS4wO1xcbiB2ZWMyIGJyZGZQYXJhbTIgPSB0ZXh0dXJlMkQoYW1iaWVudEN1YmVtYXBMaWdodEJSREZMb29rdXBbMF0sIHZlYzIocm91Z2gyLCBuZHYpKS54eTtcXG4gdmVjMyBlbnZXZWlnaHQyID0gc3BlYyAqIGJyZGZQYXJhbTIueCArIGJyZGZQYXJhbTIueTtcXG4gdmVjMyBlbnZUZXhlbDI7XFxuIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IEFNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge3tcXG4gI2lmZGVmIFNVUFBPUlRfVEVYVFVSRV9MT0RcXG4gZW52VGV4ZWwyID0gUkdCTURlY29kZSh0ZXh0dXJlQ3ViZUxvZEVYVChhbWJpZW50Q3ViZW1hcExpZ2h0Q3ViZW1hcFtfaWR4X10sIEwsIGJpYXMyKSwgOC4xMik7XFxuICNlbHNlXFxuIGVudlRleGVsMiA9IFJHQk1EZWNvZGUodGV4dHVyZUN1YmUoYW1iaWVudEN1YmVtYXBMaWdodEN1YmVtYXBbX2lkeF9dLCBMKSwgOC4xMik7XFxuICNlbmRpZlxcbiBvdXRDb2xvci5yZ2IgKz0gYW1iaWVudEN1YmVtYXBMaWdodENvbG9yW19pZHhfXSAqIGVudlRleGVsMiAqIGVudldlaWdodDI7XFxuIH19XFxuI2VuZGlmXFxuI2lmZGVmIEVOVklST05NRU5UTUFQX0VOQUJMRURcXG4gdmVjMyBlbnZXZWlnaHQgPSBnICogZnJlc25lbFRlcm07XFxuIHZlYzMgTCA9IHJlZmxlY3QoLVYsIE4pO1xcbiAjaWZkZWYgUEFSQUxMQVhfQ09SUkVDVEVEXFxuIEwgPSBwYXJhbGxheENvcnJlY3QoTCwgdl9Xb3JsZFBvc2l0aW9uLCBlbnZpcm9ubWVudEJveE1pbiwgZW52aXJvbm1lbnRCb3hNYXgpO1xcbiNlbmRpZlxcbiAjaWZkZWYgRU5WSVJPTk1FTlRNQVBfUFJFRklMVEVSXFxuIGZsb2F0IHJvdWdoID0gY2xhbXAoMS4wIC0gZywgMC4wLCAxLjApO1xcbiBmbG9hdCBiaWFzID0gcm91Z2ggKiBtYXhNaXBtYXBMZXZlbDtcXG4gI2lmZGVmIFNVUFBPUlRfVEVYVFVSRV9MT0RcXG4gdmVjMyBlbnZUZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZUxvZEVYVChlbnZpcm9ubWVudE1hcCwgTCwgYmlhcykpLnJnYjtcXG4gI2Vsc2VcXG4gdmVjMyBlbnZUZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZShlbnZpcm9ubWVudE1hcCwgTCkpLnJnYjtcXG4gI2VuZGlmXFxuICNpZmRlZiBCUkRGTE9PS1VQX0VOQUJMRURcXG4gdmVjMiBicmRmUGFyYW0gPSB0ZXh0dXJlMkQoYnJkZkxvb2t1cCwgdmVjMihyb3VnaCwgbmR2KSkueHk7XFxuIGVudldlaWdodCA9IHNwZWMgKiBicmRmUGFyYW0ueCArIGJyZGZQYXJhbS55O1xcbiAjZW5kaWZcXG4gI2Vsc2VcXG4gdmVjMyBlbnZUZXhlbCA9IHRleHR1cmVDdWJlKGVudmlyb25tZW50TWFwLCBMKS54eXo7XFxuICNlbmRpZlxcbiBvdXRDb2xvci5yZ2IgKz0gZW52VGV4ZWwgKiBlbnZXZWlnaHQ7XFxuI2VuZGlmXFxuIGZsb2F0IGFvRmFjdG9yID0gMS4wO1xcbiNpZmRlZiBTU0FPTUFQX0VOQUJMRURcXG4gYW9GYWN0b3IgPSBtaW4odGV4dHVyZTJEKHNzYW9NYXAsIChnbF9GcmFnQ29vcmQueHkgLSB2aWV3cG9ydC54eSkgLyB2aWV3cG9ydC56dykuciwgYW9GYWN0b3IpO1xcbiNlbmRpZlxcbiNpZmRlZiBBT01BUF9FTkFCTEVEXFxuIGFvRmFjdG9yID0gbWluKDEuMCAtIGNsYW1wKCgxLjAgLSB0ZXh0dXJlMkQoYW9NYXAsIHZfVGV4Y29vcmQyKS5yKSAqIGFvSW50ZW5zaXR5LCAwLjAsIDEuMCksIGFvRmFjdG9yKTtcXG4jZW5kaWZcXG4jaWZkZWYgT0NDTFVTSU9OTUFQX0VOQUJMRURcXG4gYW9GYWN0b3IgPSBtaW4oMS4wIC0gY2xhbXAoKDEuMCAtIHRleHR1cmUyRChvY2NsdXNpb25NYXAsIHZfVGV4Y29vcmQpLnIpLCAwLjAsIDEuMCksIGFvRmFjdG9yKTtcXG4jZW5kaWZcXG4gb3V0Q29sb3IucmdiICo9IGFvRmFjdG9yO1xcbiB2ZWMzIGxFbWlzc2lvbiA9IGVtaXNzaW9uO1xcbiNpZmRlZiBFTUlTU0lWRU1BUF9FTkFCTEVEXFxuIGxFbWlzc2lvbiAqPSB0ZXh0dXJlMkQoZW1pc3NpdmVNYXAsIHV2KS5yZ2I7XFxuI2VuZGlmXFxuIG91dENvbG9yLnJnYiArPSBsRW1pc3Npb24gKiBlbWlzc2lvbkludGVuc2l0eTtcXG4gaWYobGluZVdpZHRoID4gMC4pXFxuIHtcXG4gb3V0Q29sb3IucmdiID0gbWl4KG91dENvbG9yLnJnYiwgbGluZUNvbG9yLnJnYiwgKDEuMCAtIGVkZ2VGYWN0b3IobGluZVdpZHRoKSkgKiBsaW5lQ29sb3IuYSk7XFxuIH1cXG4jaWZkZWYgQUxQSEFfVEVTVFxcbiBpZiAob3V0Q29sb3IuYSA8IGFscGhhQ3V0b2ZmKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4jZW5kaWZcXG4jaWZkZWYgVE9ORU1BUFBJTkdcXG4gb3V0Q29sb3IucmdiID0gQUNFU1RvbmVNYXBwaW5nKG91dENvbG9yLnJnYik7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfRU5DT0RFXFxuIG91dENvbG9yID0gbGluZWFyVG9zUkdCKG91dENvbG9yKTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKG91dENvbG9yKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zdGFuZGFyZE1SLnZlcnRleFxcbkBpbXBvcnQgY2xheS5zdGFuZGFyZC52ZXJ0ZXhcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnN0YW5kYXJkTVIuZnJhZ21lbnRcXG4jZGVmaW5lIFVTRV9NRVRBTE5FU1NcXG4jZGVmaW5lIFVTRV9ST1VHSE5FU1NcXG5AaW1wb3J0IGNsYXkuc3RhbmRhcmQuZnJhZ21lbnRcXG5AZW5kXCI7XHJcbiIsImltcG9ydCBNYXRlcmlhbCBmcm9tICcuL01hdGVyaWFsJztcclxuXHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi9TaGFkZXInO1xyXG5pbXBvcnQgc3RhbmRhcmRFc3NsIGZyb20gJy4vc2hhZGVyL3NvdXJjZS9zdGFuZGFyZC5nbHNsLmpzJztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5cclxuLy8gSW1wb3J0IHN0YW5kYXJkIHNoYWRlclxyXG5TaGFkZXJbJ2ltcG9ydCddKHN0YW5kYXJkRXNzbCk7XHJcblxyXG52YXIgVEVYVFVSRV9QUk9QRVJUSUVTID0gWydkaWZmdXNlTWFwJywgJ25vcm1hbE1hcCcsICdyb3VnaG5lc3NNYXAnLCAnbWV0YWxuZXNzTWFwJywgJ2VtaXNzaXZlTWFwJywgJ2Vudmlyb25tZW50TWFwJywgJ2JyZGZMb29rdXAnLCAnc3Nhb01hcCcsICdhb01hcCddO1xyXG52YXIgU0lNUExFX1BST1BFUlRJRVMgPSBbJ2NvbG9yJywgJ2VtaXNzaW9uJywgJ2VtaXNzaW9uSW50ZW5zaXR5JywgJ2FscGhhJywgJ3JvdWdobmVzcycsICdtZXRhbG5lc3MnLCAndXZSZXBlYXQnLCAndXZPZmZzZXQnLCAnYW9JbnRlbnNpdHknLCAnYWxwaGFDdXRvZmYnLCAnbm9ybWFsU2NhbGUnXTtcclxudmFyIFBST1BFUlRJRVNfQ0hBTkdFX1NIQURFUiA9IFsnbGluZWFyJywgJ2VuY29kZVJHQk0nLCAnZGVjb2RlUkdCTScsICdkb3VibGVTaWRlZCcsICdhbHBoYVRlc3QnLCAncm91Z2huZXNzQ2hhbm5lbCcsICdtZXRhbG5lc3NDaGFubmVsJywgJ2Vudmlyb25tZW50TWFwUHJlZmlsdGVyZWQnXTtcclxuXHJcbnZhciBOVU1fREVGSU5FX01BUCA9IHtcclxuICAgICdyb3VnaG5lc3NDaGFubmVsJzogJ1JPVUdITkVTU19DSEFOTkVMJyxcclxuICAgICdtZXRhbG5lc3NDaGFubmVsJzogJ01FVEFMTkVTU19DSEFOTkVMJ1xyXG59O1xyXG52YXIgQk9PTF9ERUZJTkVfTUFQID0ge1xyXG4gICAgJ2xpbmVhcic6ICdTUkdCX0RFQ09ERScsXHJcbiAgICAnZW5jb2RlUkdCTSc6ICdSR0JNX0VOQ09ERScsXHJcbiAgICAnZGVjb2RlUkdCTSc6ICdSR0JNX0RFQ09ERScsXHJcbiAgICAnZG91YmxlU2lkZWQnOiAnRE9VQkxFX1NJREVEJyxcclxuICAgICdhbHBoYVRlc3QnOiAnQUxQSEFfVEVTVCcsXHJcbiAgICAnZW52aXJvbm1lbnRNYXBQcmVmaWx0ZXJlZCc6ICdFTlZJUk9OTUVOVE1BUF9QUkVGSUxURVInXHJcbn07XHJcblxyXG5cclxudmFyIHN0YW5kYXJkU2hhZGVyO1xyXG4vKipcclxuICogU3RhbmRhcmQgbWF0ZXJpYWwgd2l0aG91dCBjdXN0b20gc2hhZGVyLlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5TdGFuZGFyZE1hdGVyaWFsXHJcbiAqIEBleHRlbmRzIGNsYXkuQmFzZVxyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgbWF0ID0gbmV3IGNsYXkuU3RhbmRhcmRNYXRlcmlhbCh7XHJcbiAqICAgICBjb2xvcjogWzEsIDEsIDFdLFxyXG4gKiAgICAgZGlmZnVzZU1hcDogZGlmZnVzZVRleHR1cmVcclxuICogfSk7XHJcbiAqIG1hdC5yb3VnaG5lc3MgPSAxO1xyXG4gKi9cclxudmFyIFN0YW5kYXJkTWF0ZXJpYWwgPSBNYXRlcmlhbC5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFzdGFuZGFyZFNoYWRlcikge1xyXG4gICAgICAgIHN0YW5kYXJkU2hhZGVyID0gbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkTVIudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmRNUi5mcmFnbWVudCcpKTtcclxuICAgIH1cclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuU3RhbmRhcmRNYXRlcmlhbCMgKi8ge1xyXG4gICAgICAgIHNoYWRlcjogc3RhbmRhcmRTaGFkZXJcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uIChvcHRpb24pIHtcclxuICAgIC8vIFBFTkRJTkdcclxuICAgIHV0aWwuZXh0ZW5kKHRoaXMsIG9wdGlvbik7XHJcbiAgICAvLyBFeHRlbmQgYWZ0ZXIgc2hhZGVyIGlzIGNyZWF0ZWQuXHJcbiAgICB1dGlsLmRlZmF1bHRzKHRoaXMsIC8qKiBAbGVuZHMgY2xheS5TdGFuZGFyZE1hdGVyaWFsIyAqLyAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBbMSwgMSwgMV1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb2xvcjogWzEsIDEsIDFdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgICAgICogQGRlZmF1bHQgWzAsIDAsIDBdXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW1pc3Npb246IFswLCAwLCAwXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW1pc3Npb25JbnRlbnNpdHk6IDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMC41XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcm91Z2huZXNzOiAwLjUsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1ldGFsbmVzczogMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYWxwaGE6IDEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFscGhhVGVzdDogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEN1dG9mZiB0aHJlc2hvbGQgZm9yIGFscGhhIHRlc3RcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFscGhhQ3V0b2ZmOiAwLjksXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNjYWxhciBtdWx0aXBsaWVyIGFwcGxpZWQgdG8gZWFjaCBub3JtYWwgdmVjdG9yIG9mIG5vcm1hbCB0ZXh0dXJlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFhYWCBUaGlzIHZhbHVlIGlzIGNvbnNpZGVyZWQgb25seSBpZiBhIG5vcm1hbCB0ZXh0dXJlIGlzIHNwZWNpZmllZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBub3JtYWxTY2FsZTogMS4wLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBUT0RPIE11c3QgZGlzYWJsZSBjdWxsaW5nLlxyXG4gICAgICAgIGRvdWJsZVNpZGVkOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRpZmZ1c2VNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBub3JtYWxNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICByb3VnaG5lc3NNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBtZXRhbG5lc3NNYXA6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVtaXNzaXZlTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlQ3ViZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbnZpcm9ubWVudE1hcDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW52aXJvbm1lbnRCb3g6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQlJERiBMb29rdXAgaXMgZ2VuZXJhdGVkIGJ5IGNsYXkudXRpbC5jdWJlbWFwLmludGVncmF0ZUJyZGZcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYnJkZkxvb2t1cDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNzYW9NYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhb01hcDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFsxLCAxXVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHV2UmVwZWF0OiBbMSwgMV0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBbMCwgMF1cclxuICAgICAgICAgKi9cclxuICAgICAgICB1dk9mZnNldDogWzAsIDBdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKi9cclxuICAgICAgICBhb0ludGVuc2l0eTogMSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXBQcmVmaWx0ZXJlZDogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGxpbmVhcjogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVuY29kZVJHQk06IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkZWNvZGVSR0JNOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge051bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICByb3VnaG5lc3NDaGFubmVsOiAwLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtOdW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWV0YWxuZXNzQ2hhbm5lbDogMVxyXG4gICAgfSk7XHJcbn0sIHtcclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG1hdGVyaWFsID0gbmV3IFN0YW5kYXJkTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBURVhUVVJFX1BST1BFUlRJRVMuZm9yRWFjaChmdW5jdGlvbiAocHJvcE5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXNbcHJvcE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbFtwcm9wTmFtZV0gPSB0aGlzW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgICAgIFNJTVBMRV9QUk9QRVJUSUVTLmNvbmNhdChQUk9QRVJUSUVTX0NIQU5HRV9TSEFERVIpLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsW3Byb3BOYW1lXSA9IHRoaXNbcHJvcE5hbWVdO1xyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcclxuICAgIH1cclxufSk7XHJcblxyXG5TSU1QTEVfUFJPUEVSVElFUy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wTmFtZSkge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCBwcm9wTmFtZSwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQocHJvcE5hbWUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKHByb3BOYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxuVEVYVFVSRV9QUk9QRVJUSUVTLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsIHByb3BOYW1lLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChwcm9wTmFtZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFVuaWZvcm0ocHJvcE5hbWUsIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufSk7XHJcblxyXG5QUk9QRVJUSUVTX0NIQU5HRV9TSEFERVIuZm9yRWFjaChmdW5jdGlvbiAocHJvcE5hbWUpIHtcclxuICAgIHZhciBwcml2YXRlS2V5ID0gJ18nICsgcHJvcE5hbWU7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsIHByb3BOYW1lLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3ByaXZhdGVLZXldO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpc1twcml2YXRlS2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAocHJvcE5hbWUgaW4gTlVNX0RFRklORV9NQVApIHtcclxuICAgICAgICAgICAgICAgIHZhciBkZWZpbmVOYW1lID0gTlVNX0RFRklORV9NQVBbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWZpbmUoJ2ZyYWdtZW50JywgZGVmaW5lTmFtZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZU5hbWUgPSBCT09MX0RFRklORV9NQVBbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPyB0aGlzLmRlZmluZSgnZnJhZ21lbnQnLCBkZWZpbmVOYW1lKSA6IHRoaXMudW5kZWZpbmUoJ2ZyYWdtZW50JywgZGVmaW5lTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufSk7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICdlbnZpcm9ubWVudEJveCcsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBlbnZCb3ggPSB0aGlzLl9lbnZpcm9ubWVudEJveDtcclxuICAgICAgICBpZiAoZW52Qm94KSB7XHJcbiAgICAgICAgICAgIGVudkJveC5taW4uc2V0QXJyYXkodGhpcy5nZXQoJ2Vudmlyb25tZW50Qm94TWluJykpO1xyXG4gICAgICAgICAgICBlbnZCb3gubWF4LnNldEFycmF5KHRoaXMuZ2V0KCdlbnZpcm9ubWVudEJveE1heCcpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVudkJveDtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9lbnZpcm9ubWVudEJveCA9IHZhbHVlO1xyXG5cclxuICAgICAgICB2YXIgdW5pZm9ybXMgPSB0aGlzLnVuaWZvcm1zID0gdGhpcy51bmlmb3JtcyB8fCB7fTtcclxuICAgICAgICB1bmlmb3Jtc1snZW52aXJvbm1lbnRCb3hNaW4nXSA9IHVuaWZvcm1zWydlbnZpcm9ubWVudEJveE1pbiddIHx8IHtcclxuICAgICAgICAgICAgdmFsdWU6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHVuaWZvcm1zWydlbnZpcm9ubWVudEJveE1heCddID0gdW5pZm9ybXNbJ2Vudmlyb25tZW50Qm94TWF4J10gfHwge1xyXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIFRPRE8gQ2FuJ3QgZGV0ZWN0IG9wZXJhdGlvbiBsaWtlIGJveC5taW4gPSBuZXcgVmVjdG9yKClcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKCdlbnZpcm9ubWVudEJveE1pbicsIHZhbHVlLm1pbi5hcnJheSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybSgnZW52aXJvbm1lbnRCb3hNYXgnLCB2YWx1ZS5tYXguYXJyYXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmaW5lKCdmcmFnbWVudCcsICdQQVJBTExBWF9DT1JSRUNURUQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1BBUkFMTEFYX0NPUlJFQ1RFRCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTdGFuZGFyZE1hdGVyaWFsO1xyXG4iLCJpbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcblxyXG52YXIgX2xpYnJhcnkgPSB7fTtcclxuXHJcbmZ1bmN0aW9uIFNoYWRlckxpYnJhcnkgKCkge1xyXG4gICAgdGhpcy5fcG9vbCA9IHt9O1xyXG59XHJcblxyXG5TaGFkZXJMaWJyYXJ5LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICB2YXIga2V5ID0gbmFtZTtcclxuXHJcbiAgICBpZiAodGhpcy5fcG9vbFtrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvb2xba2V5XTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBzb3VyY2UgPSBfbGlicmFyeVtuYW1lXTtcclxuICAgICAgICBpZiAoIXNvdXJjZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTaGFkZXIgXCInICsgbmFtZSArICdcIicgKyAnIGlzIG5vdCBpbiB0aGUgbGlicmFyeScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKHNvdXJjZS52ZXJ0ZXgsIHNvdXJjZS5mcmFnbWVudCk7XHJcbiAgICAgICAgdGhpcy5fcG9vbFtrZXldID0gc2hhZGVyO1xyXG4gICAgICAgIHJldHVybiBzaGFkZXI7XHJcbiAgICB9XHJcbn07XHJcblxyXG5TaGFkZXJMaWJyYXJ5LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5fcG9vbCA9IHt9O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gdGVtcGxhdGUobmFtZSwgdmVydGV4LCBmcmFnbWVudCkge1xyXG4gICAgX2xpYnJhcnlbbmFtZV0gPSB7XHJcbiAgICAgICAgdmVydGV4OiB2ZXJ0ZXgsXHJcbiAgICAgICAgZnJhZ21lbnQ6IGZyYWdtZW50XHJcbiAgICB9O1xyXG59XHJcblxyXG52YXIgZGVmYXVsdExpYnJhcnkgPSBuZXcgU2hhZGVyTGlicmFyeSgpO1xyXG5cclxuLyoqXHJcbiAqICMjIyBCdWlsaW4gc2hhZGVyc1xyXG4gKiArIGNsYXkuc3RhbmRhcmRcclxuICogKyBjbGF5LmJhc2ljXHJcbiAqICsgY2xheS5sYW1iZXJ0XHJcbiAqICsgY2xheS53aXJlZnJhbWVcclxuICpcclxuICogQG5hbWVzcGFjZSBjbGF5LnNoYWRlci5saWJyYXJ5XHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIG5ldyBzaGFkZXIgbGlicmFyeS5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlTGlicmFyeTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgU2hhZGVyTGlicmFyeSgpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogR2V0IHNoYWRlciBmcm9tIGRlZmF1bHQgbGlicmFyeS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlNoYWRlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnNoYWRlci5saWJyYXJ5XHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogICAgIGNsYXkuc2hhZGVyLmxpYnJhcnkuZ2V0KCdjbGF5LnN0YW5kYXJkJylcclxuICAgICAqL1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRMaWJyYXJ5LmdldC5hcHBseShkZWZhdWx0TGlicmFyeSwgYXJndW1lbnRzKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnNoYWRlci5saWJyYXJ5XHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gdmVydGV4IC0gVmVydGV4IHNoYWRlciBjb2RlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGZyYWdtZW50IC0gRnJhZ21lbnQgc2hhZGVyIGNvZGVcclxuICAgICAqL1xyXG4gICAgdGVtcGxhdGU6IHRlbXBsYXRlLFxyXG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gZGVmYXVsdExpYnJhcnkuY2xlYXIoKTtcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LkpvaW50XHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgSm9pbnQgPSBCYXNlLmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5LkpvaW50IyAqL1xyXG57XHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvaXNzdWVzLzE5MyNpc3N1ZWNvbW1lbnQtMjkyMTY1NzZcclxuICAgIC8qKlxyXG4gICAgICogSm9pbnQgbmFtZVxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgbmFtZTogJycsXHJcbiAgICAvKipcclxuICAgICAqIEluZGV4IG9mIGpvaW50IGluIHRoZSBza2VsZXRvblxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaW5kZXg6IC0xLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NlbmUgbm9kZSBhdHRhY2hlZCB0b1xyXG4gICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgbm9kZTogbnVsbFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEpvaW50O1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBKb2ludCBmcm9tICcuL0pvaW50JztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vVGV4dHVyZSc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuL21hdGgvTWF0cml4NCc7XHJcblxyXG5pbXBvcnQgbWF0NCBmcm9tICcuL2dsbWF0cml4L21hdDQnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuL2dsbWF0cml4L3ZlYzMnO1xyXG5pbXBvcnQgcXVhdCBmcm9tICcuL2dsbWF0cml4L3F1YXQnO1xyXG5cclxuXHJcbnZhciB0bXBCb3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG52YXIgdG1wTWF0NCA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuU2tlbGV0b25cclxuICovXHJcbnZhciBTa2VsZXRvbiA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuU2tlbGV0b24jICove1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZWxhdGl2ZSByb290IG5vZGUgdGhhdCBub3QgYWZmZWN0IHRyYW5zZm9ybSBvZiBqb2ludC5cclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlbGF0aXZlUm9vdE5vZGU6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBuYW1lOiAnJyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogam9pbnRzXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxjbGF5LkpvaW50Pn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBqb2ludHM6IFtdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBib3VuZGluZyBib3ggd2l0aCBib3VuZCBnZW9tZXRyeS5cclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBib3VuZGluZ0JveDogbnVsbCxcclxuXHJcbiAgICAgICAgX2NsaXBzOiBbXSxcclxuXHJcbiAgICAgICAgLy8gTWF0cml4IHRvIGpvaW50IHNwYWNlIChyZWxhdGl2ZSB0byByb290IGpvaW50KVxyXG4gICAgICAgIF9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXk6IG51bGwsXHJcblxyXG4gICAgICAgIC8vIFVzZSBzdWJhcnJheSBpbnN0ZWFkIG9mIGNvcHkgYmFjayBlYWNoIHRpbWUgY29tcHV0aW5nIG1hdHJpeFxyXG4gICAgICAgIC8vIGh0dHA6Ly9qc3BlcmYuY29tL3N1YmFycmF5LXZzLWNvcHktZm9yLWFycmF5LXRyYW5zZm9ybS81XHJcbiAgICAgICAgX2pvaW50TWF0cmljZXNTdWJBcnJheXM6IFtdLFxyXG5cclxuICAgICAgICAvLyBqb2ludE1hdHJpeCAqIGN1cnJlbnRQb3NlTWF0cml4XHJcbiAgICAgICAgLy8gd29ybGRUcmFuc2Zvcm0gaXMgcmVsYXRpdmUgdG8gdGhlIHJvb3QgYm9uZVxyXG4gICAgICAgIC8vIHN0aWxsIGluIG1vZGVsIHNwYWNlIG5vdCB3b3JsZCBzcGFjZVxyXG4gICAgICAgIF9za2luTWF0cmljZXNBcnJheTogbnVsbCxcclxuXHJcbiAgICAgICAgX3NraW5NYXRyaWNlc1N1YkFycmF5czogW10sXHJcblxyXG4gICAgICAgIF9zdWJTa2luTWF0cmljZXNBcnJheToge31cclxuICAgIH07XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5Ta2VsZXRvbi5wcm90b3R5cGUgKi9cclxue1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGEgc2tpbm5pbmcgY2xpcCBhbmQgY3JlYXRlIGEgbWFwIGJldHdlZW4gY2xpcCBhbmQgc2tlbGV0b25cclxuICAgICAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uU2tpbm5pbmdDbGlwfSBjbGlwXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW21hcFJ1bGVdIE1hcCBiZXR3ZWVuIGpvaW50IG5hbWUgaW4gc2tlbGV0b24gYW5kIGpvaW50IG5hbWUgaW4gY2xpcFxyXG4gICAgICovXHJcbiAgICBhZGRDbGlwOiBmdW5jdGlvbiAoY2xpcCwgbWFwUnVsZSkge1xyXG4gICAgICAgIC8vIENsaXAgaGF2ZSBiZWVuIGV4aXN0cyBpblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fY2xpcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NsaXBzW2ldLmNsaXAgPT09IGNsaXApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBNYXAgdGhlIGpvaW50IGluZGV4IGluIHNrZWxldG9uIHRvIGpvaW50IHBvc2UgaW5kZXggaW4gY2xpcFxyXG4gICAgICAgIHZhciBtYXBzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBtYXBzW2ldID0gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIENyZWF0ZSBhdmF0YXJcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsaXAudHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2pdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRyYWNrID0gY2xpcC50cmFja3NbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgam9pbnROYW1lID0gam9pbnQubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmIChtYXBSdWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgam9pbnROYW1lID0gbWFwUnVsZVtqb2ludE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRyYWNrLm5hbWUgPT09IGpvaW50TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcHNbal0gPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9jbGlwcy5wdXNoKHtcclxuICAgICAgICAgICAgbWFwczogbWFwcyxcclxuICAgICAgICAgICAgY2xpcDogY2xpcFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpcHMubGVuZ3RoIC0gMTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLlNraW5uaW5nQ2xpcH0gY2xpcFxyXG4gICAgICovXHJcbiAgICByZW1vdmVDbGlwOiBmdW5jdGlvbiAoY2xpcCkge1xyXG4gICAgICAgIHZhciBpZHggPSAtMTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NsaXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9jbGlwc1tpXS5jbGlwID09PSBjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICBpZHggPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkeCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2xpcHMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGFsbCBjbGlwc1xyXG4gICAgICovXHJcbiAgICByZW1vdmVDbGlwc0FsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NsaXBzID0gW107XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGNsaXAgYnkgaW5kZXhcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gaW5kZXhcclxuICAgICAqL1xyXG4gICAgZ2V0Q2xpcDogZnVuY3Rpb24gKGluZGV4KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NsaXBzW2luZGV4XSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xpcHNbaW5kZXhdLmNsaXA7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2xpcE51bWJlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGlwcy5sZW5ndGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIGpvaW50IG1hdHJpY2VzIGZyb20gbm9kZSB0cmFuc2Zvcm1cclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICovXHJcbiAgICB1cGRhdGVKb2ludE1hdHJpY2VzOiAoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2YXIgbTQgPSBtYXQ0LmNyZWF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuam9pbnRzLmxlbmd0aCAqIDE2KTtcclxuICAgICAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuam9pbnRzLmxlbmd0aCAqIDE2KTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgbWF0NC5jb3B5KG00LCBqb2ludC5ub2RlLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgICAgIG1hdDQuaW52ZXJ0KG00LCBtNCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IGkgKiAxNjtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheVtvZmZzZXQgKyBqXSA9IG00W2pdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1hdHJpY2VzU3ViQXJyYXlzKCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgYm91bmRpbmdCb3ggb2YgZWFjaCBqb2ludCBib3VuZCB0byBnZW9tZXRyeS5cclxuICAgICAqIEFTU1VNRSBza2VsZXRvbiBhbmQgZ2VvbWV0cnkgam9pbnRzIGFyZSBtYXRjaGVkLlxyXG4gICAgICogQHBhcmFtIHtjbGF5Lkdlb21ldHJ5fSBnZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVKb2ludHNCb3VuZGluZ0JveGVzOiBmdW5jdGlvbiAoZ2VvbWV0cnkpIHtcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IGF0dHJpYnV0ZXMucG9zaXRpb247XHJcbiAgICAgICAgdmFyIGpvaW50QXR0ciA9IGF0dHJpYnV0ZXMuam9pbnQ7XHJcbiAgICAgICAgdmFyIHdlaWdodEF0dHIgPSBhdHRyaWJ1dGVzLndlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIGpvaW50c0JvdW5kaW5nQm94ZXMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGpvaW50c0JvdW5kaW5nQm94ZXNbaV0gPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICAgICAgam9pbnRzQm91bmRpbmdCb3hlc1tpXS5fX3VwZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2dHhKb2ludCA9IFtdO1xyXG4gICAgICAgIHZhciB2dHhQb3MgPSBbXTtcclxuICAgICAgICB2YXIgdnR4V2VpZ2h0ID0gW107XHJcbiAgICAgICAgdmFyIG1heEpvaW50SWR4ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb21ldHJ5LnZlcnRleENvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgam9pbnRBdHRyLmdldChpLCB2dHhKb2ludCk7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uQXR0ci5nZXQoaSwgdnR4UG9zKTtcclxuICAgICAgICAgICAgd2VpZ2h0QXR0ci5nZXQoaSwgdnR4V2VpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgNDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodnR4V2VpZ2h0W2tdID4gMC4wMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBqb2ludElkeCA9IHZ0eEpvaW50W2tdO1xyXG4gICAgICAgICAgICAgICAgICAgIG1heEpvaW50SWR4ID0gTWF0aC5tYXgobWF4Sm9pbnRJZHgsIGpvaW50SWR4KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1pbiA9IGpvaW50c0JvdW5kaW5nQm94ZXNbam9pbnRJZHhdLm1pbi5hcnJheTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWF4ID0gam9pbnRzQm91bmRpbmdCb3hlc1tqb2ludElkeF0ubWF4LmFycmF5O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBqb2ludHNCb3VuZGluZ0JveGVzW2pvaW50SWR4XS5fX3VwZGF0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBtaW4gPSB2ZWMzLm1pbihtaW4sIG1pbiwgdnR4UG9zKTtcclxuICAgICAgICAgICAgICAgICAgICBtYXggPSB2ZWMzLm1heChtYXgsIG1heCwgdnR4UG9zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fam9pbnRzQm91bmRpbmdCb3hlcyA9IGpvaW50c0JvdW5kaW5nQm94ZXM7XHJcblxyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuXHJcbiAgICAgICAgaWYgKG1heEpvaW50SWR4IDwgdGhpcy5qb2ludHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0dlb21ldHJ5IGpvaW50cyBhbmQgc2tlbGV0b24gam9pbnRzIGRvblxcJ3QgbWF0Y2gnKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHNldEpvaW50TWF0cmljZXNBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheSA9IGFycjtcclxuICAgICAgICB0aGlzLl9za2luTWF0cmljZXNBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYXJyLmxlbmd0aCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVNYXRyaWNlc1N1YkFycmF5cygpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVNYXRyaWNlc1N1YkFycmF5czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fam9pbnRNYXRyaWNlc1N1YkFycmF5c1tpXSA9IHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheS5zdWJhcnJheShpICogMTYsIChpKzEpICogMTYpO1xyXG4gICAgICAgICAgICB0aGlzLl9za2luTWF0cmljZXNTdWJBcnJheXNbaV0gPSB0aGlzLl9za2luTWF0cmljZXNBcnJheS5zdWJhcnJheShpICogMTYsIChpKzEpICogMTYpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgc2tpbm5pbmcgbWF0cmljZXNcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuX3NldFBvc2UoKTtcclxuXHJcbiAgICAgICAgdmFyIGpvaW50c0JvdW5kaW5nQm94ZXMgPSB0aGlzLl9qb2ludHNCb3VuZGluZ0JveGVzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2ldO1xyXG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzU3ViQXJyYXlzW2ldLFxyXG4gICAgICAgICAgICAgICAgam9pbnQubm9kZS53b3JsZFRyYW5zZm9ybS5hcnJheSxcclxuICAgICAgICAgICAgICAgIHRoaXMuX2pvaW50TWF0cmljZXNTdWJBcnJheXNbaV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5taW4uc2V0KEluZmluaXR5LCBJbmZpbml0eSwgSW5maW5pdHkpO1xyXG4gICAgICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1heC5zZXQoLUluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJib3ggPSBqb2ludHNCb3VuZGluZ0JveGVzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJib3guX191cGRhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG1wQm91bmRpbmdCb3guY29weShiYm94KTtcclxuICAgICAgICAgICAgICAgICAgICB0bXBNYXQ0LmFycmF5ID0gdGhpcy5fc2tpbk1hdHJpY2VzU3ViQXJyYXlzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcEJvdW5kaW5nQm94LmFwcGx5VHJhbnNmb3JtKHRtcE1hdDQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvdW5kaW5nQm94LnVuaW9uKHRtcEJvdW5kaW5nQm94KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0U3ViU2tpbk1hdHJpY2VzOiBmdW5jdGlvbiAobWVzaElkLCBqb2ludHMpIHtcclxuICAgICAgICB2YXIgc3ViQXJyYXkgPSB0aGlzLl9zdWJTa2luTWF0cmljZXNBcnJheVttZXNoSWRdO1xyXG4gICAgICAgIGlmICghc3ViQXJyYXkpIHtcclxuICAgICAgICAgICAgc3ViQXJyYXlcclxuICAgICAgICAgICAgICAgID0gdGhpcy5fc3ViU2tpbk1hdHJpY2VzQXJyYXlbbWVzaElkXVxyXG4gICAgICAgICAgICAgICAgPSBuZXcgRmxvYXQzMkFycmF5KGpvaW50cy5sZW5ndGggKiAxNik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpZHggPSBqb2ludHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7IGorKykge1xyXG4gICAgICAgICAgICAgICAgc3ViQXJyYXlbY3Vyc29yKytdID0gdGhpcy5fc2tpbk1hdHJpY2VzQXJyYXlbaWR4ICogMTYgKyBqXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3ViQXJyYXk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFN1YlNraW5NYXRyaWNlc1RleHR1cmU6IGZ1bmN0aW9uIChtZXNoSWQsIGpvaW50cykge1xyXG4gICAgICAgIHZhciBza2luTWF0cmljZXMgPSB0aGlzLmdldFN1YlNraW5NYXRyaWNlcyhtZXNoSWQsIGpvaW50cyk7XHJcbiAgICAgICAgdmFyIHNpemU7XHJcbiAgICAgICAgdmFyIG51bUpvaW50cyA9IHRoaXMuam9pbnRzLmxlbmd0aDtcclxuICAgICAgICBpZiAobnVtSm9pbnRzID4gMjU2KSB7XHJcbiAgICAgICAgICAgIHNpemUgPSA2NDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobnVtSm9pbnRzID4gNjQpIHtcclxuICAgICAgICAgICAgc2l6ZSA9IDMyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChudW1Kb2ludHMgPiAxNikge1xyXG4gICAgICAgICAgICBzaXplID0gMTY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzaXplID0gODtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fc2tpbk1hdHJpY2VzVGV4dHVyZSA9IHRoaXMuX3NraW5NYXRyaWNlc1RleHR1cmUgfHwgbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIHR5cGU6IFRleHR1cmUuRkxPQVQsXHJcbiAgICAgICAgICAgIG1pbkZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxyXG4gICAgICAgICAgICBtYWdGaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICAgICAgdXNlTWlwbWFwOiBmYWxzZSxcclxuICAgICAgICAgICAgZmxpcFk6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGV4dHVyZS53aWR0aCA9IHNpemU7XHJcbiAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSBzaXplO1xyXG5cclxuICAgICAgICBpZiAoIXRleHR1cmUucGl4ZWxzIHx8IHRleHR1cmUucGl4ZWxzLmxlbmd0aCAhPT0gc2l6ZSAqIHNpemUgKiA0KSB7XHJcbiAgICAgICAgICAgIHRleHR1cmUucGl4ZWxzID0gbmV3IEZsb2F0MzJBcnJheShzaXplICogc2l6ZSAqIDQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZXh0dXJlLnBpeGVscy5zZXQoc2tpbk1hdHJpY2VzKTtcclxuICAgICAgICB0ZXh0dXJlLmRpcnR5KCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRTa2luTWF0cmljZXNUZXh0dXJlOiBmdW5jdGlvbiAoKSB7XHJcblxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fc2tpbk1hdHJpY2VzVGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldFBvc2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5fY2xpcHNbMF0pIHtcclxuICAgICAgICAgICAgdmFyIGNsaXAgPSB0aGlzLl9jbGlwc1swXS5jbGlwO1xyXG4gICAgICAgICAgICB2YXIgbWFwcyA9IHRoaXMuX2NsaXBzWzBdLm1hcHM7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChtYXBzW2ldID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHBvc2UgPSBjbGlwLnRyYWNrc1ttYXBzW2ldXTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBOb3QgdXBkYXRlIGlmIHRoZXJlIGlzIG5vIGRhdGEuXHJcbiAgICAgICAgICAgICAgICAvLyBQRU5ESU5HIElmIHN5bmMgcG9zZS5wb3NpdGlvbiwgcG9zZS5yb3RhdGlvbiwgcG9zZS5zY2FsZVxyXG4gICAgICAgICAgICAgICAgaWYgKHBvc2UuY2hhbm5lbHMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZWMzLmNvcHkoam9pbnQubm9kZS5wb3NpdGlvbi5hcnJheSwgcG9zZS5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocG9zZS5jaGFubmVscy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHF1YXQuY29weShqb2ludC5ub2RlLnJvdGF0aW9uLmFycmF5LCBwb3NlLnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwb3NlLmNoYW5uZWxzLnNjYWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5jb3B5KGpvaW50Lm5vZGUuc2NhbGUuYXJyYXksIHBvc2Uuc2NhbGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGpvaW50Lm5vZGUucG9zaXRpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGpvaW50Lm5vZGUucm90YXRpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGpvaW50Lm5vZGUuc2NhbGUuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uIChjbG9uZWROb2Rlc01hcCkge1xyXG4gICAgICAgIHZhciBza2VsZXRvbiA9IG5ldyBTa2VsZXRvbigpO1xyXG4gICAgICAgIHNrZWxldG9uLm5hbWUgPSB0aGlzLm5hbWU7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5ld0pvaW50ID0gbmV3IEpvaW50KCk7XHJcbiAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2ldO1xyXG4gICAgICAgICAgICBuZXdKb2ludC5uYW1lID0gam9pbnQubmFtZTtcclxuICAgICAgICAgICAgbmV3Sm9pbnQuaW5kZXggPSBqb2ludC5pbmRleDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjbG9uZWROb2Rlc01hcCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5ld05vZGUgPSBjbG9uZWROb2Rlc01hcFtqb2ludC5ub2RlLl9fdWlkX19dO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghbmV3Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NhblxcJ3QgZmluZCBub2RlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbmV3Sm9pbnQubm9kZSA9IG5ld05vZGUgfHwgam9pbnQubm9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5ld0pvaW50Lm5vZGUgPSBqb2ludC5ub2RlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBza2VsZXRvbi5qb2ludHMucHVzaChuZXdKb2ludCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5KSB7XHJcbiAgICAgICAgICAgIHZhciBsZW4gPSB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkubGVuZ3RoO1xyXG4gICAgICAgICAgICBza2VsZXRvbi5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheShsZW4pO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbi5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5W2ldID0gdGhpcy5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5W2ldO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBza2VsZXRvbi5fc2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGxlbik7XHJcblxyXG4gICAgICAgICAgICBza2VsZXRvbi51cGRhdGVNYXRyaWNlc1N1YkFycmF5cygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2tlbGV0b24uX2pvaW50c0JvdW5kaW5nQm94ZSA9ICh0aGlzLl9qb2ludHNCb3VuZGluZ0JveGVzIHx8IFtdKS5tYXAoZnVuY3Rpb24gKGJib3gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGJib3guY2xvbmUoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2tlbGV0b24udXBkYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBza2VsZXRvbjtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTa2VsZXRvbjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJcXG5AZXhwb3J0IGNsYXkudXRpbC5yYW5kXFxuaGlnaHAgZmxvYXQgcmFuZCh2ZWMyIHV2KSB7XFxuIGNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1MztcXG4gaGlnaHAgZmxvYXQgZHQgPSBkb3QodXYueHksIHZlYzIoYSxiKSksIHNuID0gbW9kKGR0LCAzLjE0MTU5MjY1MzU4OTc5Myk7XFxuIHJldHVybiBmcmFjdChzaW4oc24pICogYyk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5jYWxjdWxhdGVfYXR0ZW51YXRpb25cXG51bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uRmFjdG9yIDogNS4wO1xcbmZsb2F0IGxpZ2h0QXR0ZW51YXRpb24oZmxvYXQgZGlzdCwgZmxvYXQgcmFuZ2UpXFxue1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IDEuMDtcXG4gYXR0ZW51YXRpb24gPSBkaXN0KmRpc3QvKHJhbmdlKnJhbmdlKzEuMCk7XFxuIGZsb2F0IGF0dF9zID0gYXR0ZW51YXRpb25GYWN0b3I7XFxuIGF0dGVudWF0aW9uID0gMS4wLyhhdHRlbnVhdGlvbiphdHRfcysxLjApO1xcbiBhdHRfcyA9IDEuMC8oYXR0X3MrMS4wKTtcXG4gYXR0ZW51YXRpb24gPSBhdHRlbnVhdGlvbiAtIGF0dF9zO1xcbiBhdHRlbnVhdGlvbiAvPSAxLjAgLSBhdHRfcztcXG4gcmV0dXJuIGNsYW1wKGF0dGVudWF0aW9uLCAwLjAsIDEuMCk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5lZGdlX2ZhY3RvclxcbiNpZmRlZiBTVVBQT1JUX1NUQU5EQVJEX0RFUklWQVRJVkVTXFxuZmxvYXQgZWRnZUZhY3RvcihmbG9hdCB3aWR0aClcXG57XFxuIHZlYzMgZCA9IGZ3aWR0aCh2X0JhcnljZW50cmljKTtcXG4gdmVjMyBhMyA9IHNtb290aHN0ZXAodmVjMygwLjApLCBkICogd2lkdGgsIHZfQmFyeWNlbnRyaWMpO1xcbiByZXR1cm4gbWluKG1pbihhMy54LCBhMy55KSwgYTMueik7XFxufVxcbiNlbHNlXFxuZmxvYXQgZWRnZUZhY3RvcihmbG9hdCB3aWR0aClcXG57XFxuIHJldHVybiAxLjA7XFxufVxcbiNlbmRpZlxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5lbmNvZGVfZmxvYXRcXG52ZWM0IGVuY29kZUZsb2F0KGNvbnN0IGluIGZsb2F0IGRlcHRoKVxcbntcXG4gY29uc3QgdmVjNCBiaXRTaGlmdHMgPSB2ZWM0KDI1Ni4wKjI1Ni4wKjI1Ni4wLCAyNTYuMCoyNTYuMCwgMjU2LjAsIDEuMCk7XFxuIGNvbnN0IHZlYzQgYml0X21hc2sgPSB2ZWM0KDAuMCwgMS4wLzI1Ni4wLCAxLjAvMjU2LjAsIDEuMC8yNTYuMCk7XFxuIHZlYzQgcmVzID0gZnJhY3QoZGVwdGggKiBiaXRTaGlmdHMpO1xcbiByZXMgLT0gcmVzLnh4eXogKiBiaXRfbWFzaztcXG4gcmV0dXJuIHJlcztcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbmZsb2F0IGRlY29kZUZsb2F0KGNvbnN0IGluIHZlYzQgY29sb3IpXFxue1xcbiBjb25zdCB2ZWM0IGJpdFNoaWZ0cyA9IHZlYzQoMS4wLygyNTYuMCoyNTYuMCoyNTYuMCksIDEuMC8oMjU2LjAqMjU2LjApLCAxLjAvMjU2LjAsIDEuMCk7XFxuIHJldHVybiBkb3QoY29sb3IsIGJpdFNoaWZ0cyk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5mbG9hdFxcbkBpbXBvcnQgY2xheS51dGlsLmVuY29kZV9mbG9hdFxcbkBpbXBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5yZ2JtX2RlY29kZVxcbnZlYzMgUkdCTURlY29kZSh2ZWM0IHJnYm0sIGZsb2F0IHJhbmdlKSB7XFxuIHJldHVybiByYW5nZSAqIHJnYm0ucmdiICogcmdibS5hO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucmdibV9lbmNvZGVcXG52ZWM0IFJHQk1FbmNvZGUodmVjMyBjb2xvciwgZmxvYXQgcmFuZ2UpIHtcXG4gaWYgKGRvdChjb2xvciwgY29sb3IpID09IDAuMCkge1xcbiByZXR1cm4gdmVjNCgwLjApO1xcbiB9XFxuIHZlYzQgcmdibTtcXG4gY29sb3IgLz0gcmFuZ2U7XFxuIHJnYm0uYSA9IGNsYW1wKG1heChtYXgoY29sb3IuciwgY29sb3IuZyksIG1heChjb2xvci5iLCAxZS02KSksIDAuMCwgMS4wKTtcXG4gcmdibS5hID0gY2VpbChyZ2JtLmEgKiAyNTUuMCkgLyAyNTUuMDtcXG4gcmdibS5yZ2IgPSBjb2xvciAvIHJnYm0uYTtcXG4gcmV0dXJuIHJnYm07XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibV9kZWNvZGVcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtX2VuY29kZVxcbnZlYzQgZGVjb2RlSERSKHZlYzQgY29sb3IpXFxue1xcbiNpZiBkZWZpbmVkKFJHQk1fREVDT0RFKSB8fCBkZWZpbmVkKFJHQk0pXFxuIHJldHVybiB2ZWM0KFJHQk1EZWNvZGUoY29sb3IsIDguMTIpLCAxLjApO1xcbiNlbHNlXFxuIHJldHVybiBjb2xvcjtcXG4jZW5kaWZcXG59XFxudmVjNCBlbmNvZGVIRFIodmVjNCBjb2xvcilcXG57XFxuI2lmIGRlZmluZWQoUkdCTV9FTkNPREUpIHx8IGRlZmluZWQoUkdCTSlcXG4gcmV0dXJuIFJHQk1FbmNvZGUoY29sb3IueHl6LCA4LjEyKTtcXG4jZWxzZVxcbiByZXR1cm4gY29sb3I7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5zcmdiXFxudmVjNCBzUkdCVG9MaW5lYXIoaW4gdmVjNCB2YWx1ZSkge1xcbiByZXR1cm4gdmVjNChtaXgocG93KHZhbHVlLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoMC4wNTIxMzI3MDE0KSwgdmVjMygyLjQpKSwgdmFsdWUucmdiICogMC4wNzczOTkzODA4LCB2ZWMzKGxlc3NUaGFuRXF1YWwodmFsdWUucmdiLCB2ZWMzKDAuMDQwNDUpKSkpLCB2YWx1ZS53KTtcXG59XFxudmVjNCBsaW5lYXJUb3NSR0IoaW4gdmVjNCB2YWx1ZSkge1xcbiByZXR1cm4gdmVjNChtaXgocG93KHZhbHVlLnJnYiwgdmVjMygwLjQxNjY2KSkgKiAxLjA1NSAtIHZlYzMoMC4wNTUpLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMyhsZXNzVGhhbkVxdWFsKHZhbHVlLnJnYiwgdmVjMygwLjAwMzEzMDgpKSkpLCB2YWx1ZS53KTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG4jaWZkZWYgU0tJTk5JTkdcXG5hdHRyaWJ1dGUgdmVjMyB3ZWlnaHQgOiBXRUlHSFQ7XFxuYXR0cmlidXRlIHZlYzQgam9pbnQgOiBKT0lOVDtcXG4jaWZkZWYgVVNFX1NLSU5fTUFUUklDRVNfVEVYVFVSRVxcbnVuaWZvcm0gc2FtcGxlcjJEIHNraW5NYXRyaWNlc1RleHR1cmUgOiBpZ25vcmU7XFxudW5pZm9ybSBmbG9hdCBza2luTWF0cmljZXNUZXh0dXJlU2l6ZTogaWdub3JlO1xcbm1hdDQgZ2V0U2tpbk1hdHJpeChzYW1wbGVyMkQgdGV4LCBmbG9hdCBpZHgpIHtcXG4gZmxvYXQgaiA9IGlkeCAqIDQuMDtcXG4gZmxvYXQgeCA9IG1vZChqLCBza2luTWF0cmljZXNUZXh0dXJlU2l6ZSk7XFxuIGZsb2F0IHkgPSBmbG9vcihqIC8gc2tpbk1hdHJpY2VzVGV4dHVyZVNpemUpICsgMC41O1xcbiB2ZWMyIHNjYWxlID0gdmVjMihza2luTWF0cmljZXNUZXh0dXJlU2l6ZSk7XFxuIHJldHVybiBtYXQ0KFxcbiB0ZXh0dXJlMkQodGV4LCB2ZWMyKHggKyAwLjUsIHkpIC8gc2NhbGUpLFxcbiB0ZXh0dXJlMkQodGV4LCB2ZWMyKHggKyAxLjUsIHkpIC8gc2NhbGUpLFxcbiB0ZXh0dXJlMkQodGV4LCB2ZWMyKHggKyAyLjUsIHkpIC8gc2NhbGUpLFxcbiB0ZXh0dXJlMkQodGV4LCB2ZWMyKHggKyAzLjUsIHkpIC8gc2NhbGUpXFxuICk7XFxufVxcbm1hdDQgZ2V0U2tpbk1hdHJpeChmbG9hdCBpZHgpIHtcXG4gcmV0dXJuIGdldFNraW5NYXRyaXgoc2tpbk1hdHJpY2VzVGV4dHVyZSwgaWR4KTtcXG59XFxuI2Vsc2VcXG51bmlmb3JtIG1hdDQgc2tpbk1hdHJpeFtKT0lOVF9DT1VOVF0gOiBTS0lOX01BVFJJWDtcXG5tYXQ0IGdldFNraW5NYXRyaXgoZmxvYXQgaWR4KSB7XFxuIHJldHVybiBza2luTWF0cml4W2ludChpZHgpXTtcXG59XFxuI2VuZGlmXFxuI2VuZGlmXFxuQGVuZFxcbkBleHBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbm1hdDQgc2tpbk1hdHJpeFdTID0gZ2V0U2tpbk1hdHJpeChqb2ludC54KSAqIHdlaWdodC54O1xcbmlmICh3ZWlnaHQueSA+IDFlLTQpXFxue1xcbiBza2luTWF0cml4V1MgKz0gZ2V0U2tpbk1hdHJpeChqb2ludC55KSAqIHdlaWdodC55O1xcbn1cXG5pZiAod2VpZ2h0LnogPiAxZS00KVxcbntcXG4gc2tpbk1hdHJpeFdTICs9IGdldFNraW5NYXRyaXgoam9pbnQueikgKiB3ZWlnaHQuejtcXG59XFxuZmxvYXQgd2VpZ2h0VyA9IDEuMC13ZWlnaHQueC13ZWlnaHQueS13ZWlnaHQuejtcXG5pZiAod2VpZ2h0VyA+IDFlLTQpXFxue1xcbiBza2luTWF0cml4V1MgKz0gZ2V0U2tpbk1hdHJpeChqb2ludC53KSAqIHdlaWdodFc7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5wYXJhbGxheF9jb3JyZWN0XFxudmVjMyBwYXJhbGxheENvcnJlY3QoaW4gdmVjMyBkaXIsIGluIHZlYzMgcG9zLCBpbiB2ZWMzIGJveE1pbiwgaW4gdmVjMyBib3hNYXgpIHtcXG4gdmVjMyBmaXJzdCA9IChib3hNYXggLSBwb3MpIC8gZGlyO1xcbiB2ZWMzIHNlY29uZCA9IChib3hNaW4gLSBwb3MpIC8gZGlyO1xcbiB2ZWMzIGZ1cnRoZXIgPSBtYXgoZmlyc3QsIHNlY29uZCk7XFxuIGZsb2F0IGRpc3QgPSBtaW4oZnVydGhlci54LCBtaW4oZnVydGhlci55LCBmdXJ0aGVyLnopKTtcXG4gdmVjMyBmaXhlZFBvcyA9IHBvcyArIGRpciAqIGRpc3Q7XFxuIHZlYzMgYm94Q2VudGVyID0gKGJveE1heCArIGJveE1pbikgKiAwLjU7XFxuIHJldHVybiBub3JtYWxpemUoZml4ZWRQb3MgLSBib3hDZW50ZXIpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuY2xhbXBfc2FtcGxlXFxudmVjNCBjbGFtcFNhbXBsZShjb25zdCBpbiBzYW1wbGVyMkQgdGV4dHVyZSwgY29uc3QgaW4gdmVjMiBjb29yZClcXG57XFxuI2lmZGVmIFNURVJFT1xcbiBmbG9hdCBleWUgPSBzdGVwKDAuNSwgY29vcmQueCkgKiAwLjU7XFxuIHZlYzIgY29vcmRDbGFtcGVkID0gY2xhbXAoY29vcmQsIHZlYzIoZXllLCAwLjApLCB2ZWMyKDAuNSArIGV5ZSwgMS4wKSk7XFxuI2Vsc2VcXG4gdmVjMiBjb29yZENsYW1wZWQgPSBjbGFtcChjb29yZCwgdmVjMigwLjApLCB2ZWMyKDEuMCkpO1xcbiNlbmRpZlxcbiByZXR1cm4gdGV4dHVyZTJEKHRleHR1cmUsIGNvb3JkQ2xhbXBlZCk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5BQ0VTXFxudmVjMyBBQ0VTVG9uZU1hcHBpbmcodmVjMyBjb2xvcilcXG57XFxuIGNvbnN0IGZsb2F0IEEgPSAyLjUxO1xcbiBjb25zdCBmbG9hdCBCID0gMC4wMztcXG4gY29uc3QgZmxvYXQgQyA9IDIuNDM7XFxuIGNvbnN0IGZsb2F0IEQgPSAwLjU5O1xcbiBjb25zdCBmbG9hdCBFID0gMC4xNDtcXG4gcmV0dXJuIChjb2xvciAqIChBICogY29sb3IgKyBCKSkgLyAoY29sb3IgKiAoQyAqIGNvbG9yICsgRCkgKyBFKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5iYXNpYy52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxudW5pZm9ybSB2ZWMyIHV2UmVwZWF0IDogWzEuMCwgMS4wXTtcXG51bmlmb3JtIHZlYzIgdXZPZmZzZXQgOiBbMC4wLCAwLjBdO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkIDogVEVYQ09PUkRfMDtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIGJhcnljZW50cmljO1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuYXR0cmlidXRlIHZlYzQgYV9Db2xvciA6IENPTE9SO1xcbnZhcnlpbmcgdmVjNCB2X0NvbG9yO1xcbiNlbmRpZlxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkICogdXZSZXBlYXQgKyB1dk9mZnNldDtcXG4gdl9CYXJ5Y2VudHJpYyA9IGJhcnljZW50cmljO1xcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuIHZfQ29sb3IgPSBhX0NvbG9yO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmJhc2ljLmZyYWdtZW50XFxuI2RlZmluZSBESUZGVVNFTUFQX0FMUEhBX0FMUEhBXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZU1hcDtcXG51bmlmb3JtIHZlYzMgY29sb3IgOiBbMS4wLCAxLjAsIDEuMF07XFxudW5pZm9ybSB2ZWMzIGVtaXNzaW9uIDogWzAuMCwgMC4wLCAwLjBdO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGEgOiAxLjA7XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG51bmlmb3JtIGZsb2F0IGFscGhhQ3V0b2ZmOiAwLjk7XFxuI2VuZGlmXFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbnZhcnlpbmcgdmVjNCB2X0NvbG9yO1xcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoIDogMC4wO1xcbnVuaWZvcm0gdmVjNCBsaW5lQ29sb3IgOiBbMC4wLCAwLjAsIDAuMCwgMC42XTtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG5AaW1wb3J0IGNsYXkudXRpbC5lZGdlX2ZhY3RvclxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkudXRpbC5zcmdiXFxuQGltcG9ydCBjbGF5LnV0aWwuQUNFU1xcbnZvaWQgbWFpbigpXFxue1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCBhbHBoYSk7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbiBnbF9GcmFnQ29sb3IgKj0gdl9Db2xvcjtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9ERUNPREVcXG4gZ2xfRnJhZ0NvbG9yID0gc1JHQlRvTGluZWFyKGdsX0ZyYWdDb2xvcik7XFxuI2VuZGlmXFxuI2lmZGVmIERJRkZVU0VNQVBfRU5BQkxFRFxcbiB2ZWM0IHRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRChkaWZmdXNlTWFwLCB2X1RleGNvb3JkKSk7XFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIHRleGVsID0gc1JHQlRvTGluZWFyKHRleGVsKTtcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChESUZGVVNFTUFQX0FMUEhBX0FMUEhBKVxcbiBnbF9GcmFnQ29sb3IuYSA9IHRleGVsLmE7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gdGV4ZWwucmdiO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IucmdiICs9IGVtaXNzaW9uO1xcbiBpZiggbGluZVdpZHRoID4gMC4pXFxuIHtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peChnbF9GcmFnQ29sb3IucmdiLCBsaW5lQ29sb3IucmdiLCAoMS4wIC0gZWRnZUZhY3RvcihsaW5lV2lkdGgpKSAqIGxpbmVDb2xvci5hKTtcXG4gfVxcbiNpZmRlZiBBTFBIQV9URVNUXFxuIGlmIChnbF9GcmFnQ29sb3IuYSA8IGFscGhhQ3V0b2ZmKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4jZW5kaWZcXG4jaWZkZWYgVE9ORU1BUFBJTkdcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IEFDRVNUb25lTWFwcGluZyhnbF9GcmFnQ29sb3IucmdiKTtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9FTkNPREVcXG4gZ2xfRnJhZ0NvbG9yID0gbGluZWFyVG9zUkdCKGdsX0ZyYWdDb2xvcik7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihnbF9GcmFnQ29sb3IpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LmxhbWJlcnQudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gbWF0NCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgOiBXT1JMRElOVkVSU0VUUkFOU1BPU0U7XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxudW5pZm9ybSB2ZWMyIHV2UmVwZWF0IDogWzEuMCwgMS4wXTtcXG51bmlmb3JtIHZlYzIgdXZPZmZzZXQgOiBbMC4wLCAwLjBdO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbCA6IE5PUk1BTDtcXG5hdHRyaWJ1dGUgdmVjMyBiYXJ5Y2VudHJpYztcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuYXR0cmlidXRlIHZlYzQgYV9Db2xvciA6IENPTE9SO1xcbnZhcnlpbmcgdmVjNCB2X0NvbG9yO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Ob3JtYWw7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4gdmVjMyBza2lubmVkTm9ybWFsID0gbm9ybWFsO1xcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gc2tpbm5lZE5vcm1hbCA9IChza2luTWF0cml4V1MgKiB2ZWM0KG5vcm1hbCwgMC4wKSkueHl6O1xcbiNlbmRpZlxcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KCBza2lubmVkUG9zaXRpb24sIDEuMCApO1xcbiB2X1RleGNvb3JkID0gdGV4Y29vcmQgKiB1dlJlcGVhdCArIHV2T2Zmc2V0O1xcbiB2X05vcm1hbCA9IG5vcm1hbGl6ZSggKCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgKiB2ZWM0KHNraW5uZWROb3JtYWwsIDAuMCkgKS54eXogKTtcXG4gdl9Xb3JsZFBvc2l0aW9uID0gKCB3b3JsZCAqIHZlYzQoIHNraW5uZWRQb3NpdGlvbiwgMS4wKSApLnh5ejtcXG4gdl9CYXJ5Y2VudHJpYyA9IGJhcnljZW50cmljO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gdl9Db2xvciA9IGFfQ29sb3I7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkubGFtYmVydC5mcmFnbWVudFxcbiNkZWZpbmUgRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZhcnlpbmcgdmVjMyB2X05vcm1hbDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGRpZmZ1c2VNYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzEuMCwgMS4wLCAxLjBdO1xcbnVuaWZvcm0gdmVjMyBlbWlzc2lvbiA6IFswLjAsIDAuMCwgMC4wXTtcXG51bmlmb3JtIGZsb2F0IGFscGhhIDogMS4wO1xcbiNpZmRlZiBBTFBIQV9URVNUXFxudW5pZm9ybSBmbG9hdCBhbHBoYUN1dG9mZjogMC45O1xcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoIDogMC4wO1xcbnVuaWZvcm0gdmVjNCBsaW5lQ29sb3IgOiBbMC4wLCAwLjAsIDAuMCwgMC42XTtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxudmFyeWluZyB2ZWM0IHZfQ29sb3I7XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLmFtYmllbnRfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuYW1iaWVudF9zaF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBQT0lOVF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIucG9pbnRfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgRElSRUNUSU9OQUxfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLmRpcmVjdGlvbmFsX2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIFNQT1RfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLnNwb3RfbGlnaHRcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkudXRpbC5jYWxjdWxhdGVfYXR0ZW51YXRpb25cXG5AaW1wb3J0IGNsYXkudXRpbC5lZGdlX2ZhY3RvclxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkucGx1Z2luLmNvbXB1dGVfc2hhZG93X21hcFxcbkBpbXBvcnQgY2xheS51dGlsLkFDRVNcXG52b2lkIG1haW4oKVxcbntcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgYWxwaGEpO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gZ2xfRnJhZ0NvbG9yICo9IHZfQ29sb3I7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIGdsX0ZyYWdDb2xvciA9IHNSR0JUb0xpbmVhcihnbF9GcmFnQ29sb3IpO1xcbiNlbmRpZlxcbiNpZmRlZiBESUZGVVNFTUFQX0VOQUJMRURcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQoIGRpZmZ1c2VNYXAsIHZfVGV4Y29vcmQgKTtcXG4jaWZkZWYgU1JHQl9ERUNPREVcXG4gdGV4LnJnYiA9IHBvdyh0ZXgucmdiLCB2ZWMzKDIuMikpO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IucmdiICo9IHRleC5yZ2I7XFxuI2lmZGVmIERJRkZVU0VNQVBfQUxQSEFfQUxQSEFcXG4gZ2xfRnJhZ0NvbG9yLmEgKj0gdGV4LmE7XFxuI2VuZGlmXFxuI2VuZGlmXFxuIHZlYzMgZGlmZnVzZUNvbG9yID0gdmVjMygwLjAsIDAuMCwgMC4wKTtcXG4jaWZkZWYgQU1CSUVOVF9MSUdIVF9DT1VOVFxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7XFxuIGRpZmZ1c2VDb2xvciArPSBhbWJpZW50TGlnaHRDb2xvcltfaWR4X107XFxuIH1cXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVFxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX1NIX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7e1xcbiBkaWZmdXNlQ29sb3IgKz0gY2FsY0FtYmllbnRTSExpZ2h0KF9pZHhfLCB2X05vcm1hbCkgKiBhbWJpZW50U0hMaWdodENvbG9yW19pZHhfXTtcXG4gfX1cXG4jZW5kaWZcXG4jaWZkZWYgUE9JTlRfTElHSFRfQ09VTlRcXG4jaWYgZGVmaW5lZChQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWJzUG9pbnRbUE9JTlRfTElHSFRfQ09VTlRdO1xcbiBpZiggc2hhZG93RW5hYmxlZCApXFxuIHtcXG4gY29tcHV0ZVNoYWRvd09mUG9pbnRMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic1BvaW50KTtcXG4gfVxcbiNlbmRpZlxcbiBmb3IoaW50IGkgPSAwOyBpIDwgUE9JTlRfTElHSFRfQ09VTlQ7IGkrKylcXG4ge1xcbiB2ZWMzIGxpZ2h0UG9zaXRpb24gPSBwb2ludExpZ2h0UG9zaXRpb25baV07XFxuIHZlYzMgbGlnaHRDb2xvciA9IHBvaW50TGlnaHRDb2xvcltpXTtcXG4gZmxvYXQgcmFuZ2UgPSBwb2ludExpZ2h0UmFuZ2VbaV07XFxuIHZlYzMgbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKGxpZ2h0RGlyZWN0aW9uKTtcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIHJhbmdlKTtcXG4gbGlnaHREaXJlY3Rpb24gLz0gZGlzdDtcXG4gZmxvYXQgbmRsID0gZG90KCB2X05vcm1hbCwgbGlnaHREaXJlY3Rpb24gKTtcXG4gZmxvYXQgc2hhZG93Q29udHJpYiA9IDEuMDtcXG4jaWYgZGVmaW5lZChQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGlmKCBzaGFkb3dFbmFibGVkIClcXG4ge1xcbiBzaGFkb3dDb250cmliID0gc2hhZG93Q29udHJpYnNQb2ludFtpXTtcXG4gfVxcbiNlbmRpZlxcbiBkaWZmdXNlQ29sb3IgKz0gbGlnaHRDb2xvciAqIGNsYW1wKG5kbCwgMC4wLCAxLjApICogYXR0ZW51YXRpb24gKiBzaGFkb3dDb250cmliO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIERJUkVDVElPTkFMX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBmbG9hdCBzaGFkb3dDb250cmlic0RpcltESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF07XFxuIGlmKHNoYWRvd0VuYWJsZWQpXFxuIHtcXG4gY29tcHV0ZVNoYWRvd09mRGlyZWN0aW9uYWxMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic0Rpcik7XFxuIH1cXG4jZW5kaWZcXG4gZm9yKGludCBpID0gMDsgaSA8IERJUkVDVElPTkFMX0xJR0hUX0NPVU5UOyBpKyspXFxuIHtcXG4gdmVjMyBsaWdodERpcmVjdGlvbiA9IC1kaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9uW2ldO1xcbiB2ZWMzIGxpZ2h0Q29sb3IgPSBkaXJlY3Rpb25hbExpZ2h0Q29sb3JbaV07XFxuIGZsb2F0IG5kbCA9IGRvdCh2X05vcm1hbCwgbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uKSk7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZiggc2hhZG93RW5hYmxlZCApXFxuIHtcXG4gc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzRGlyW2ldO1xcbiB9XFxuI2VuZGlmXFxuIGRpZmZ1c2VDb2xvciArPSBsaWdodENvbG9yICogY2xhbXAobmRsLCAwLjAsIDEuMCkgKiBzaGFkb3dDb250cmliO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIFNQT1RfTElHSFRfQ09VTlRcXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gZmxvYXQgc2hhZG93Q29udHJpYnNTcG90W1NQT1RfTElHSFRfQ09VTlRdO1xcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIGNvbXB1dGVTaGFkb3dPZlNwb3RMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic1Nwb3QpO1xcbiB9XFxuI2VuZGlmXFxuIGZvcihpbnQgaSA9IDA7IGkgPCBTUE9UX0xJR0hUX0NPVU5UOyBpKyspXFxuIHtcXG4gdmVjMyBsaWdodFBvc2l0aW9uID0gLXNwb3RMaWdodFBvc2l0aW9uW2ldO1xcbiB2ZWMzIHNwb3RMaWdodERpcmVjdGlvbiA9IC1ub3JtYWxpemUoIHNwb3RMaWdodERpcmVjdGlvbltpXSApO1xcbiB2ZWMzIGxpZ2h0Q29sb3IgPSBzcG90TGlnaHRDb2xvcltpXTtcXG4gZmxvYXQgcmFuZ2UgPSBzcG90TGlnaHRSYW5nZVtpXTtcXG4gZmxvYXQgYSA9IHNwb3RMaWdodFVtYnJhQW5nbGVDb3NpbmVbaV07XFxuIGZsb2F0IGIgPSBzcG90TGlnaHRQZW51bWJyYUFuZ2xlQ29zaW5lW2ldO1xcbiBmbG9hdCBmYWxsb2ZmRmFjdG9yID0gc3BvdExpZ2h0RmFsbG9mZkZhY3RvcltpXTtcXG4gdmVjMyBsaWdodERpcmVjdGlvbiA9IGxpZ2h0UG9zaXRpb24gLSB2X1dvcmxkUG9zaXRpb247XFxuIGZsb2F0IGRpc3QgPSBsZW5ndGgobGlnaHREaXJlY3Rpb24pO1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgcmFuZ2UpO1xcbiBsaWdodERpcmVjdGlvbiAvPSBkaXN0O1xcbiBmbG9hdCBjID0gZG90KHNwb3RMaWdodERpcmVjdGlvbiwgbGlnaHREaXJlY3Rpb24pO1xcbiBmbG9hdCBmYWxsb2ZmO1xcbiBmYWxsb2ZmID0gY2xhbXAoKGMgLSBhKSAvKCBiIC0gYSksIDAuMCwgMS4wKTtcXG4gZmFsbG9mZiA9IHBvdyhmYWxsb2ZmLCBmYWxsb2ZmRmFjdG9yKTtcXG4gZmxvYXQgbmRsID0gZG90KHZfTm9ybWFsLCBsaWdodERpcmVjdGlvbik7XFxuIG5kbCA9IGNsYW1wKG5kbCwgMC4wLCAxLjApO1xcbiBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiNpZiBkZWZpbmVkKFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZiggc2hhZG93RW5hYmxlZCApXFxuIHtcXG4gc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzU3BvdFtpXTtcXG4gfVxcbiNlbmRpZlxcbiBkaWZmdXNlQ29sb3IgKz0gbGlnaHRDb2xvciAqIG5kbCAqIGF0dGVudWF0aW9uICogKDEuMC1mYWxsb2ZmKSAqIHNoYWRvd0NvbnRyaWI7XFxuIH1cXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yLnJnYiAqPSBkaWZmdXNlQ29sb3I7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgKz0gZW1pc3Npb247XFxuIGlmKGxpbmVXaWR0aCA+IDAuKVxcbiB7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoZ2xfRnJhZ0NvbG9yLnJnYiwgbGluZUNvbG9yLnJnYiwgKDEuMCAtIGVkZ2VGYWN0b3IobGluZVdpZHRoKSkgKiBsaW5lQ29sb3IuYSk7XFxuIH1cXG4jaWZkZWYgQUxQSEFfVEVTVFxcbiBpZiAoZ2xfRnJhZ0NvbG9yLmEgPCBhbHBoYUN1dG9mZikge1xcbiBkaXNjYXJkO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIFRPTkVNQVBQSU5HXFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBBQ0VTVG9uZU1hcHBpbmcoZ2xfRnJhZ0NvbG9yLnJnYik7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfRU5DT0RFXFxuIGdsX0ZyYWdDb2xvciA9IGxpbmVhclRvc1JHQihnbF9GcmFnQ29sb3IpO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoZ2xfRnJhZ0NvbG9yKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS53aXJlZnJhbWUudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzMgYmFyeWNlbnRyaWM7XFxuQGltcG9ydCBjbGF5LmNodW5rLnNraW5uaW5nX2hlYWRlclxcbnZhcnlpbmcgdmVjMyB2X0JhcnljZW50cmljO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCApO1xcbiB2X0JhcnljZW50cmljID0gYmFyeWNlbnRyaWM7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkud2lyZWZyYW1lLmZyYWdtZW50XFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzAuMCwgMC4wLCAwLjBdO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGEgOiAxLjA7XFxudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGggOiAxLjA7XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuQGltcG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG52b2lkIG1haW4oKVxcbntcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGNvbG9yO1xcbiBnbF9GcmFnQ29sb3IuYSA9ICgxLjAtZWRnZUZhY3RvcihsaW5lV2lkdGgpKSAqIGFscGhhO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LnNreWJveC52ZXJ0ZXhcXG4jZGVmaW5lIFNIQURFUl9OQU1FIHNreWJveFxcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudm9pZCBtYWluKClcXG57XFxuIHZfV29ybGRQb3NpdGlvbiA9ICh3b3JsZCAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5za3lib3guZnJhZ21lbnRcXG4jZGVmaW5lIFBJIDMuMTQxNTkyNlxcbnVuaWZvcm0gbWF0NCB2aWV3SW52ZXJzZSA6IFZJRVdJTlZFUlNFO1xcbiNpZmRlZiBFUVVJUkVDVEFOR1VMQVJcXG51bmlmb3JtIHNhbXBsZXIyRCBlbnZpcm9ubWVudE1hcDtcXG4jZWxzZVxcbnVuaWZvcm0gc2FtcGxlckN1YmUgZW52aXJvbm1lbnRNYXA7XFxuI2VuZGlmXFxudW5pZm9ybSBmbG9hdCBsb2Q6IDAuMDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkudXRpbC5zcmdiXFxuQGltcG9ydCBjbGF5LnV0aWwuQUNFU1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIGV5ZVBvcyA9IHZpZXdJbnZlcnNlWzNdLnh5ejtcXG4gdmVjMyBWID0gbm9ybWFsaXplKHZfV29ybGRQb3NpdGlvbiAtIGV5ZVBvcyk7XFxuI2lmZGVmIEVRVUlSRUNUQU5HVUxBUlxcbiBmbG9hdCBwaGkgPSBhY29zKFYueSk7XFxuIGZsb2F0IHRoZXRhID0gYXRhbigtVi54LCBWLnopICsgUEkgKiAwLjU7XFxuIHZlYzIgdXYgPSB2ZWMyKHRoZXRhIC8gMi4wIC8gUEksIHBoaSAvIFBJKTtcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlMkQoZW52aXJvbm1lbnRNYXAsIGZyYWN0KHV2KSkpO1xcbiNlbHNlXFxuICNpZiBkZWZpbmVkKExPRCkgfHwgZGVmaW5lZChTVVBQT1JUX1RFWFRVUkVfTE9EKVxcbiB2ZWM0IHRleGVsID0gZGVjb2RlSERSKHRleHR1cmVDdWJlTG9kRVhUKGVudmlyb25tZW50TWFwLCBWLCBsb2QpKTtcXG4gI2Vsc2VcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZShlbnZpcm9ubWVudE1hcCwgVikpO1xcbiAjZW5kaWZcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9ERUNPREVcXG4gdGV4ZWwgPSBzUkdCVG9MaW5lYXIodGV4ZWwpO1xcbiNlbmRpZlxcbiNpZmRlZiBUT05FTUFQUElOR1xcbiB0ZXhlbC5yZ2IgPSBBQ0VTVG9uZU1hcHBpbmcodGV4ZWwucmdiKTtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9FTkNPREVcXG4gdGV4ZWwgPSBsaW5lYXJUb3NSR0IodGV4ZWwpO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNCh0ZXhlbC5yZ2IsIDEuMCkpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBsaWdodEVzc2wgZnJvbSAnLi9zb3VyY2UvaGVhZGVyL2xpZ2h0JztcclxuaW1wb3J0IHV0aWxFc3NsIGZyb20gJy4vc291cmNlL3V0aWwuZ2xzbC5qcyc7XHJcblxyXG5pbXBvcnQgYmFzaWNFc3NsIGZyb20gJy4vc291cmNlL2Jhc2ljLmdsc2wuanMnO1xyXG5pbXBvcnQgbGFtYmVydEVzc2wgZnJvbSAnLi9zb3VyY2UvbGFtYmVydC5nbHNsLmpzJztcclxuaW1wb3J0IHN0YW5kYXJkRXNzbCBmcm9tICcuL3NvdXJjZS9zdGFuZGFyZC5nbHNsLmpzJztcclxuaW1wb3J0IHdpcmVmcmFtZUVzc2wgZnJvbSAnLi9zb3VyY2Uvd2lyZWZyYW1lLmdsc2wuanMnO1xyXG5pbXBvcnQgc2t5Ym94RXNzbCBmcm9tICcuL3NvdXJjZS9za3lib3guZ2xzbC5qcyc7XHJcbmltcG9ydCBwcmV6RXNzbCBmcm9tICcuL3NvdXJjZS9wcmV6Lmdsc2wuanMnO1xyXG5cclxuaW1wb3J0IGxpYnJhcnkgZnJvbSAnLi9saWJyYXJ5JztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5cclxuXHJcblNoYWRlclsnaW1wb3J0J10obGlnaHRFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXSh1dGlsRXNzbCk7XHJcblxyXG4vLyBTb21lIGJ1aWxkIGluIHNoYWRlcnNcclxuU2hhZGVyWydpbXBvcnQnXShiYXNpY0Vzc2wpO1xyXG5TaGFkZXJbJ2ltcG9ydCddKGxhbWJlcnRFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXShzdGFuZGFyZEVzc2wpO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHdpcmVmcmFtZUVzc2wpO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHNreWJveEVzc2wpO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHByZXpFc3NsKTtcclxuXHJcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuYmFzaWMnLCBTaGFkZXIuc291cmNlKCdjbGF5LmJhc2ljLnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LmJhc2ljLmZyYWdtZW50JykpO1xyXG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LmxhbWJlcnQnLCBTaGFkZXIuc291cmNlKCdjbGF5LmxhbWJlcnQudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkubGFtYmVydC5mcmFnbWVudCcpKTtcclxubGlicmFyeS50ZW1wbGF0ZSgnY2xheS53aXJlZnJhbWUnLCBTaGFkZXIuc291cmNlKCdjbGF5LndpcmVmcmFtZS52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS53aXJlZnJhbWUuZnJhZ21lbnQnKSk7XHJcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuc2t5Ym94JywgU2hhZGVyLnNvdXJjZSgnY2xheS5za3lib3gudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkuc2t5Ym94LmZyYWdtZW50JykpO1xyXG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LnByZXonLCBTaGFkZXIuc291cmNlKCdjbGF5LnByZXoudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucHJlei5mcmFnbWVudCcpKTtcclxubGlicmFyeS50ZW1wbGF0ZSgnY2xheS5zdGFuZGFyZCcsIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmQudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmQuZnJhZ21lbnQnKSk7XHJcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuc3RhbmRhcmRNUicsIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmRNUi52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZE1SLmZyYWdtZW50JykpO1xyXG5cclxuLy8gVE9ETyBNdXN0IGV4cG9ydCBhIG1vZHVsZSBhbmQgYmUgdXNlZCBpbiB0aGUgb3RoZXIgbW9kdWxlcy4gT3IgaXQgd2lsbCBiZSB0cmVlIHNoYWtlZFxyXG5leHBvcnQgZGVmYXVsdCBsaWJyYXJ5OyIsIi8qKlxyXG4gKiBnbFRGIExvYWRlclxyXG4gKiBTcGVjaWZpY2F0aW9uIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi9ibG9iL21hc3Rlci9zcGVjaWZpY2F0aW9uL1JFQURNRS5tZFxyXG4gKlxyXG4gKiBUT0RPIE1vcnBoIHRhcmdldHNcclxuICovXHJcbmltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4uL2NvcmUvdXRpbCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5cclxuaW1wb3J0IFNjZW5lIGZyb20gJy4uL1NjZW5lJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IFN0YW5kYXJkTWF0ZXJpYWwgZnJvbSAnLi4vU3RhbmRhcmRNYXRlcmlhbCc7XHJcbmltcG9ydCBNZXNoIGZyb20gJy4uL01lc2gnO1xyXG5pbXBvcnQgTm9kZSBmcm9tICcuLi9Ob2RlJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcclxuaW1wb3J0IHNoYWRlckxpYnJhcnkgZnJvbSAnLi4vc2hhZGVyL2xpYnJhcnknO1xyXG5pbXBvcnQgU2tlbGV0b24gZnJvbSAnLi4vU2tlbGV0b24nO1xyXG5pbXBvcnQgSm9pbnQgZnJvbSAnLi4vSm9pbnQnO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IE9ydGhvZ3JhcGhpY0NhbWVyYSBmcm9tICcuLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcblxyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcblxyXG5pbXBvcnQgVHJhY2tDbGlwIGZyb20gJy4uL2FuaW1hdGlvbi9UcmFja0NsaXAnO1xyXG5pbXBvcnQgU2FtcGxlclRyYWNrIGZyb20gJy4uL2FuaW1hdGlvbi9TYW1wbGVyVHJhY2snO1xyXG5cclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuXHJcbi8vIEltcG9ydCBidWlsdGluIHNoYWRlclxyXG5pbXBvcnQgJy4uL3NoYWRlci9idWlsdGluJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5cclxudmFyIHNlbWFudGljQXR0cmlidXRlTWFwID0ge1xyXG4gICAgJ05PUk1BTCc6ICdub3JtYWwnLFxyXG4gICAgJ1BPU0lUSU9OJzogJ3Bvc2l0aW9uJyxcclxuICAgICdURVhDT09SRF8wJzogJ3RleGNvb3JkMCcsXHJcbiAgICAnVEVYQ09PUkRfMSc6ICd0ZXhjb29yZDEnLFxyXG4gICAgJ1dFSUdIVFNfMCc6ICd3ZWlnaHQnLFxyXG4gICAgJ0pPSU5UU18wJzogJ2pvaW50JyxcclxuICAgICdDT0xPUl8wJzogJ2NvbG9yJ1xyXG59O1xyXG5cclxudmFyIEFSUkFZX0NUT1JfTUFQID0ge1xyXG4gICAgNTEyMDogdmVuZG9yLkludDhBcnJheSxcclxuICAgIDUxMjE6IHZlbmRvci5VaW50OEFycmF5LFxyXG4gICAgNTEyMjogdmVuZG9yLkludDE2QXJyYXksXHJcbiAgICA1MTIzOiB2ZW5kb3IuVWludDE2QXJyYXksXHJcbiAgICA1MTI1OiB2ZW5kb3IuVWludDMyQXJyYXksXHJcbiAgICA1MTI2OiB2ZW5kb3IuRmxvYXQzMkFycmF5XHJcbn07XHJcbnZhciBTSVpFX01BUCA9IHtcclxuICAgIFNDQUxBUjogMSxcclxuICAgIFZFQzI6IDIsXHJcbiAgICBWRUMzOiAzLFxyXG4gICAgVkVDNDogNCxcclxuICAgIE1BVDI6IDQsXHJcbiAgICBNQVQzOiA5LFxyXG4gICAgTUFUNDogMTZcclxufTtcclxuXHJcbmZ1bmN0aW9uIGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIGFjY2Vzc29ySWR4LCBpc0luZGljZXMpIHtcclxuICAgIHZhciBhY2Nlc3NvckluZm8gPSBqc29uLmFjY2Vzc29yc1thY2Nlc3NvcklkeF07XHJcblxyXG4gICAgdmFyIGJ1ZmZlciA9IGxpYi5idWZmZXJWaWV3c1thY2Nlc3NvckluZm8uYnVmZmVyVmlld107XHJcbiAgICB2YXIgYnl0ZU9mZnNldCA9IGFjY2Vzc29ySW5mby5ieXRlT2Zmc2V0IHx8IDA7XHJcbiAgICB2YXIgQXJyYXlDdG9yID0gQVJSQVlfQ1RPUl9NQVBbYWNjZXNzb3JJbmZvLmNvbXBvbmVudFR5cGVdIHx8IHZlbmRvci5GbG9hdDMyQXJyYXk7XHJcblxyXG4gICAgdmFyIHNpemUgPSBTSVpFX01BUFthY2Nlc3NvckluZm8udHlwZV07XHJcbiAgICBpZiAoc2l6ZSA9PSBudWxsICYmIGlzSW5kaWNlcykge1xyXG4gICAgICAgIHNpemUgPSAxO1xyXG4gICAgfVxyXG4gICAgdmFyIGFyciA9IG5ldyBBcnJheUN0b3IoYnVmZmVyLCBieXRlT2Zmc2V0LCBzaXplICogYWNjZXNzb3JJbmZvLmNvdW50KTtcclxuXHJcbiAgICB2YXIgcXVhbnRpemVFeHRlbnNpb24gPSBhY2Nlc3NvckluZm8uZXh0ZW5zaW9ucyAmJiBhY2Nlc3NvckluZm8uZXh0ZW5zaW9uc1snV0VCM0RfcXVhbnRpemVkX2F0dHJpYnV0ZXMnXTtcclxuICAgIGlmIChxdWFudGl6ZUV4dGVuc2lvbikge1xyXG4gICAgICAgIHZhciBkZWNvZGVkQXJyID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoc2l6ZSAqIGFjY2Vzc29ySW5mby5jb3VudCk7XHJcbiAgICAgICAgdmFyIGRlY29kZU1hdHJpeCA9IHF1YW50aXplRXh0ZW5zaW9uLmRlY29kZU1hdHJpeDtcclxuICAgICAgICB2YXIgZGVjb2RlT2Zmc2V0O1xyXG4gICAgICAgIHZhciBkZWNvZGVTY2FsZTtcclxuICAgICAgICB2YXIgZGVjb2RlT2Zmc2V0ID0gbmV3IEFycmF5KHNpemUpO1xyXG4gICAgICAgIHZhciBkZWNvZGVTY2FsZSA9IG5ldyBBcnJheShzaXplKTtcclxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHNpemU7IGsrKykge1xyXG4gICAgICAgICAgICBkZWNvZGVPZmZzZXRba10gPSBkZWNvZGVNYXRyaXhbc2l6ZSAqIChzaXplICsgMSkgKyBrXTtcclxuICAgICAgICAgICAgZGVjb2RlU2NhbGVba10gPSBkZWNvZGVNYXRyaXhbayAqIChzaXplICsgMSkgKyBrXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY2Nlc3NvckluZm8uY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHNpemU7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgZGVjb2RlZEFycltpICogc2l6ZSArIGtdID0gYXJyW2kgKiBzaXplICsga10gKiBkZWNvZGVTY2FsZVtrXSArIGRlY29kZU9mZnNldFtrXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXJyID0gZGVjb2RlZEFycjtcclxuICAgIH1cclxuICAgIHJldHVybiBhcnI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJhc2U2NFRvQmluYXJ5KGlucHV0LCBjaGFyU3RhcnQpIHtcclxuICAgIHZhciBjaGFycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcclxuICAgIHZhciBsb29rdXAgPSBuZXcgVWludDhBcnJheSgxMzApO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxvb2t1cFtjaGFycy5jaGFyQ29kZUF0KGkpXSA9IGk7XHJcbiAgICB9XHJcbiAgICAvLyBJZ25vcmVcclxuICAgIHZhciBsZW4gPSBpbnB1dC5sZW5ndGggLSBjaGFyU3RhcnQ7XHJcbiAgICBpZiAoaW5wdXQuY2hhckF0KGxlbiAtIDEpID09PSAnPScpIHsgbGVuLS07IH1cclxuICAgIGlmIChpbnB1dC5jaGFyQXQobGVuIC0gMSkgPT09ICc9JykgeyBsZW4tLTsgfVxyXG5cclxuICAgIHZhciB1YXJyYXkgPSBuZXcgVWludDhBcnJheSgobGVuIC8gNCkgKiAzKTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IGNoYXJTdGFydDsgaSA8IHVhcnJheS5sZW5ndGg7KSB7XHJcbiAgICAgICAgdmFyIGMxID0gbG9va3VwW2lucHV0LmNoYXJDb2RlQXQoaisrKV07XHJcbiAgICAgICAgdmFyIGMyID0gbG9va3VwW2lucHV0LmNoYXJDb2RlQXQoaisrKV07XHJcbiAgICAgICAgdmFyIGMzID0gbG9va3VwW2lucHV0LmNoYXJDb2RlQXQoaisrKV07XHJcbiAgICAgICAgdmFyIGM0ID0gbG9va3VwW2lucHV0LmNoYXJDb2RlQXQoaisrKV07XHJcblxyXG4gICAgICAgIHVhcnJheVtpKytdID0gKGMxIDw8IDIpIHwgKGMyID4+IDQpO1xyXG4gICAgICAgIHVhcnJheVtpKytdID0gKChjMiAmIDE1KSA8PCA0KSB8IChjMyA+PiAyKTtcclxuICAgICAgICB1YXJyYXlbaSsrXSA9ICgoYzMgJiAzKSA8PCA2KSB8IGM0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1YXJyYXkuYnVmZmVyO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IGNsYXkubG9hZGVyLkdMVEYuUmVzdWx0XHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBqc29uXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICogQHByb3BlcnR5IHtjbGF5Lk5vZGV9IHJvb3ROb2RlXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5DYW1lcmFbXX0gY2FtZXJhc1xyXG4gKiBAcHJvcGVydHkge2NsYXkuVGV4dHVyZVtdfSB0ZXh0dXJlc1xyXG4gKiBAcHJvcGVydHkge2NsYXkuTWF0ZXJpYWxbXX0gbWF0ZXJpYWxzXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5Ta2VsZXRvbltdfSBza2VsZXRvbnNcclxuICogQHByb3BlcnR5IHtjbGF5Lk1lc2hbXX0gbWVzaGVzXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwW119IGNsaXBzXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5Ob2RlW119IG5vZGVzXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxvYWRlci5HTFRGXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgR0xURkxvYWRlciA9IEJhc2UuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5sb2FkZXIuR0xURiMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgcm9vdE5vZGU6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFJvb3QgcGF0aCBmb3IgdXJpIHBhcnNpbmcuXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICByb290UGF0aDogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvb3QgcGF0aCBmb3IgdGV4dHVyZSB1cmkgcGFyc2luZy4gRGVmYXVsdGx5IHVzZSB0aGUgcm9vdFBhdGhcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHRleHR1cmVSb290UGF0aDogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvb3QgcGF0aCBmb3IgYnVmZmVyIHVyaSBwYXJzaW5nLiBEZWZhdWx0bHkgdXNlIHRoZSByb290UGF0aFxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgYnVmZmVyUm9vdFBhdGg6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaGFkZXIgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSBtYXRlcmlhbHMuXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfGNsYXkuU2hhZGVyfVxyXG4gICAgICogQGRlZmF1bHQgJ2NsYXkuc3RhbmRhcmQnXHJcbiAgICAgKi9cclxuICAgIHNoYWRlcjogJ2NsYXkuc3RhbmRhcmQnLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdXNlIHtAbGluayBjbGF5LlN0YW5kYXJkTWF0ZXJpYWx9XHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB1c2VTdGFuZGFyZE1hdGVyaWFsOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGxvYWRpbmcgdGhlIGNhbWVyYXMuXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaW5jbHVkZUNhbWVyYTogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGxvYWRpbmcgdGhlIGFuaW1hdGlvbnMuXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaW5jbHVkZUFuaW1hdGlvbjogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogSWYgbG9hZGluZyB0aGUgbWVzaGVzXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaW5jbHVkZU1lc2g6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIElmIGxvYWRpbmcgdGhlIHRleHR1cmVzLlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGluY2x1ZGVUZXh0dXJlOiB0cnVlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgY3Jvc3NPcmlnaW46ICcnLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL2lzc3Vlcy82NzRcclxuICAgICAqL1xyXG4gICAgdGV4dHVyZUZsaXBZOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGNvbnZlcnQgdGV4dHVyZSB0byBwb3dlci1vZi10d29cclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICB0ZXh0dXJlQ29udmVydFRvUE9UOiBmYWxzZSxcclxuXHJcbiAgICBzaGFkZXJMaWJyYXJ5OiBudWxsXHJcbn0sXHJcbmZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghdGhpcy5zaGFkZXJMaWJyYXJ5KSB7XHJcbiAgICAgICAgdGhpcy5zaGFkZXJMaWJyYXJ5ID0gc2hhZGVyTGlicmFyeS5jcmVhdGVMaWJyYXJ5KCk7XHJcbiAgICB9XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5sb2FkZXIuR0xURi5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXHJcbiAgICAgKi9cclxuICAgIGxvYWQ6IGZ1bmN0aW9uICh1cmwpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGlzQmluYXJ5ID0gdXJsLmVuZHNXaXRoKCcuZ2xiJyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJvb3RQYXRoID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5yb290UGF0aCA9IHVybC5zbGljZSgwLCB1cmwubGFzdEluZGV4T2YoJy8nKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZW5kb3IucmVxdWVzdC5nZXQoe1xyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgb25wcm9ncmVzczogZnVuY3Rpb24gKHBlcmNlbnQsIGxvYWRlZCwgdG90YWwpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcigncHJvZ3Jlc3MnLCBwZXJjZW50LCBsb2FkZWQsIHRvdGFsKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25lcnJvcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignZXJyb3InLCBlKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBpc0JpbmFyeSA/ICdhcnJheWJ1ZmZlcicgOiAndGV4dCcsXHJcbiAgICAgICAgICAgIG9ubG9hZDogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0JpbmFyeSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VCaW5hcnkoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFyc2UgZ2xURiBiaW5hcnlcclxuICAgICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGJ1ZmZlclxyXG4gICAgICogQHJldHVybiB7Y2xheS5sb2FkZXIuR0xURi5SZXN1bHR9XHJcbiAgICAgKi9cclxuICAgIHBhcnNlQmluYXJ5OiBmdW5jdGlvbiAoYnVmZmVyKSB7XHJcbiAgICAgICAgdmFyIGhlYWRlciA9IG5ldyBVaW50MzJBcnJheShidWZmZXIsIDAsIDQpO1xyXG4gICAgICAgIGlmIChoZWFkZXJbMF0gIT09IDB4NDY1NDZDNjcpIHtcclxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsICdJbnZhbGlkIGdsVEYgYmluYXJ5IGZvcm1hdDogSW52YWxpZCBoZWFkZXInKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaGVhZGVyWzBdIDwgMikge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2Vycm9yJywgJ09ubHkgZ2xURjIuMCBpcyBzdXBwb3J0ZWQuJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIsIDEyKTtcclxuXHJcbiAgICAgICAgdmFyIGpzb247XHJcbiAgICAgICAgdmFyIGJ1ZmZlcnMgPSBbXTtcclxuICAgICAgICAvLyBSZWFkIGNodW5rc1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YVZpZXcuYnl0ZUxlbmd0aDspIHtcclxuICAgICAgICAgICAgdmFyIGNodW5rTGVuZ3RoID0gZGF0YVZpZXcuZ2V0VWludDMyKGksIHRydWUpO1xyXG4gICAgICAgICAgICBpICs9IDQ7XHJcbiAgICAgICAgICAgIHZhciBjaHVua1R5cGUgPSBkYXRhVmlldy5nZXRVaW50MzIoaSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGkgKz0gNDtcclxuXHJcbiAgICAgICAgICAgIC8vIGpzb25cclxuICAgICAgICAgICAgaWYgKGNodW5rVHlwZSA9PT0gMHg0RTRGNTM0QSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlciwgaSArIDEyLCBjaHVua0xlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPLCBmb3IgdGhlIGJyb3dzZXIgbm90IHN1cHBvcnQgVGV4dERlY29kZXIuXHJcbiAgICAgICAgICAgICAgICB2YXIgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0ciA9IGRlY29kZXIuZGVjb2RlKGFycik7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKHN0cik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCAnSlNPTiBQYXJzZSBlcnJvcjonICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY2h1bmtUeXBlID09PSAweDAwNEU0OTQyKSB7XHJcbiAgICAgICAgICAgICAgICBidWZmZXJzLnB1c2goYnVmZmVyLnNsaWNlKGkgKyAxMiwgaSArIDEyICsgY2h1bmtMZW5ndGgpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaSArPSBjaHVua0xlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFqc29uKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCAnSW52YWxpZCBnbFRGIGJpbmFyeSBmb3JtYXQ6IENhblxcJ3QgZmluZCBKU09OLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZShqc29uLCBidWZmZXJzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0ganNvblxyXG4gICAgICogQHBhcmFtIHtBcnJheUJ1ZmZlcltdfSBbYnVmZmVyXVxyXG4gICAgICogQHJldHVybiB7Y2xheS5sb2FkZXIuR0xURi5SZXN1bHR9XHJcbiAgICAgKi9cclxuICAgIHBhcnNlOiBmdW5jdGlvbiAoanNvbiwgYnVmZmVycykge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgdmFyIGxpYiA9IHtcclxuICAgICAgICAgICAganNvbjoganNvbixcclxuICAgICAgICAgICAgYnVmZmVyczogW10sXHJcbiAgICAgICAgICAgIGJ1ZmZlclZpZXdzOiBbXSxcclxuICAgICAgICAgICAgbWF0ZXJpYWxzOiBbXSxcclxuICAgICAgICAgICAgdGV4dHVyZXM6IFtdLFxyXG4gICAgICAgICAgICBtZXNoZXM6IFtdLFxyXG4gICAgICAgICAgICBqb2ludHM6IFtdLFxyXG4gICAgICAgICAgICBza2VsZXRvbnM6IFtdLFxyXG4gICAgICAgICAgICBjYW1lcmFzOiBbXSxcclxuICAgICAgICAgICAgbm9kZXM6IFtdLFxyXG4gICAgICAgICAgICBjbGlwczogW11cclxuICAgICAgICB9O1xyXG4gICAgICAgIC8vIE1vdW50IG9uIHRoZSByb290IG5vZGUgaWYgZ2l2ZW5cclxuICAgICAgICB2YXIgcm9vdE5vZGUgPSB0aGlzLnJvb3ROb2RlIHx8IG5ldyBTY2VuZSgpO1xyXG5cclxuICAgICAgICB2YXIgbG9hZGluZyA9IDA7XHJcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tMb2FkKCkge1xyXG4gICAgICAgICAgICBsb2FkaW5nLS07XHJcbiAgICAgICAgICAgIGlmIChsb2FkaW5nID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBhZnRlckxvYWRCdWZmZXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBhbHJlYWR5IGxvYWQgYnVmZmVyc1xyXG4gICAgICAgIGlmIChidWZmZXJzKSB7XHJcbiAgICAgICAgICAgIGxpYi5idWZmZXJzID0gYnVmZmVycy5zbGljZSgpO1xyXG4gICAgICAgICAgICBhZnRlckxvYWRCdWZmZXIodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBMb2FkIGJ1ZmZlcnNcclxuICAgICAgICAgICAgdXRpbC5lYWNoKGpzb24uYnVmZmVycywgZnVuY3Rpb24gKGJ1ZmZlckluZm8sIGlkeCkge1xyXG4gICAgICAgICAgICAgICAgbG9hZGluZysrO1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhdGggPSBidWZmZXJJbmZvLnVyaTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZWxmLl9sb2FkQnVmZmVycyhwYXRoLCBmdW5jdGlvbiAoYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGliLmJ1ZmZlcnNbaWR4XSA9IGJ1ZmZlcjtcclxuICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWQoKTtcclxuICAgICAgICAgICAgICAgIH0sIGNoZWNrTG9hZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZ2V0UmVzdWx0KCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAganNvbjoganNvbixcclxuICAgICAgICAgICAgICAgIHNjZW5lOiBzZWxmLnJvb3ROb2RlID8gbnVsbCA6IHJvb3ROb2RlLFxyXG4gICAgICAgICAgICAgICAgcm9vdE5vZGU6IHNlbGYucm9vdE5vZGUgPyByb290Tm9kZSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBjYW1lcmFzOiBsaWIuY2FtZXJhcyxcclxuICAgICAgICAgICAgICAgIHRleHR1cmVzOiBsaWIudGV4dHVyZXMsXHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbHM6IGxpYi5tYXRlcmlhbHMsXHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbnM6IGxpYi5za2VsZXRvbnMsXHJcbiAgICAgICAgICAgICAgICBtZXNoZXM6IGxpYi5pbnN0YW5jZWRNZXNoZXMsXHJcbiAgICAgICAgICAgICAgICBjbGlwczogbGliLmNsaXBzLFxyXG4gICAgICAgICAgICAgICAgbm9kZXM6IGxpYi5ub2Rlc1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gYWZ0ZXJMb2FkQnVmZmVyKGltbWVkaWF0ZWx5KSB7XHJcbiAgICAgICAgICAgIC8vIEJ1ZmZlciBub3QgbG9hZCBjb21wbGV0ZS5cclxuICAgICAgICAgICAgaWYgKGxpYi5idWZmZXJzLmxlbmd0aCAhPT0ganNvbi5idWZmZXJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdlcnJvcicsICdCdWZmZXIgbm90IGxvYWQgY29tcGxldGUuJyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAganNvbi5idWZmZXJWaWV3cy5mb3JFYWNoKGZ1bmN0aW9uIChidWZmZXJWaWV3SW5mbywgaWR4KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBQRU5ESU5HIFBlcmZvcm1hbmNlXHJcbiAgICAgICAgICAgICAgICBsaWIuYnVmZmVyVmlld3NbaWR4XSA9IGxpYi5idWZmZXJzW2J1ZmZlclZpZXdJbmZvLmJ1ZmZlcl1cclxuICAgICAgICAgICAgICAgICAgICAuc2xpY2UoYnVmZmVyVmlld0luZm8uYnl0ZU9mZnNldCB8fCAwLCAoYnVmZmVyVmlld0luZm8uYnl0ZU9mZnNldCB8fCAwKSArIChidWZmZXJWaWV3SW5mby5ieXRlTGVuZ3RoIHx8IDApKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxpYi5idWZmZXJzID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHNlbGYuaW5jbHVkZU1lc2gpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmluY2x1ZGVUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VUZXh0dXJlcyhqc29uLCBsaWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VNYXRlcmlhbHMoanNvbiwgbGliKTtcclxuICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlTWVzaGVzKGpzb24sIGxpYik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2VsZi5fcGFyc2VOb2Rlcyhqc29uLCBsaWIpO1xyXG5cclxuICAgICAgICAgICAgLy8gT25seSBzdXBwb3J0IG9uZSBzY2VuZS5cclxuICAgICAgICAgICAgaWYgKGpzb24uc2NlbmVzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2NlbmVJbmZvID0ganNvbi5zY2VuZXNbanNvbi5zY2VuZSB8fCAwXTsgLy8gRGVmYXVsdCB1c2UgdGhlIGZpcnN0IHNjZW5lLlxyXG4gICAgICAgICAgICAgICAgaWYgKHNjZW5lSW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NlbmVJbmZvLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gbGliLm5vZGVzW3NjZW5lSW5mby5ub2Rlc1tpXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3ROb2RlLmFkZChub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxmLmluY2x1ZGVNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZVNraW5zKGpzb24sIGxpYik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxmLmluY2x1ZGVBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlQW5pbWF0aW9ucyhqc29uLCBsaWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpbW1lZGlhdGVseSkge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdzdWNjZXNzJywgZ2V0UmVzdWx0KCkpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3N1Y2Nlc3MnLCBnZXRSZXN1bHQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBnZXRSZXN1bHQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCaW5hcnkgZmlsZSBwYXRoIHJlc29sdmVyLiBVc2VyIGNhbiBvdmVycmlkZSBpdFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcclxuICAgICAqL1xyXG4gICAgcmVzb2x2ZUJ1ZmZlclBhdGg6IGZ1bmN0aW9uIChwYXRoKSB7XHJcbiAgICAgICAgaWYgKHBhdGggJiYgcGF0aC5tYXRjaCgvXmRhdGE6KC4qPyliYXNlNjQsLykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhdGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcm9vdFBhdGggPSB0aGlzLmJ1ZmZlclJvb3RQYXRoO1xyXG4gICAgICAgIGlmIChyb290UGF0aCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJvb3RQYXRoID0gdGhpcy5yb290UGF0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHV0aWwucmVsYXRpdmUyYWJzb2x1dGUocGF0aCwgcm9vdFBhdGgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRleHR1cmUgZmlsZSBwYXRoIHJlc29sdmVyLiBVc2VyIGNhbiBvdmVycmlkZSBpdFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcclxuICAgICAqL1xyXG4gICAgcmVzb2x2ZVRleHR1cmVQYXRoOiBmdW5jdGlvbiAocGF0aCkge1xyXG4gICAgICAgIGlmIChwYXRoICYmIHBhdGgubWF0Y2goL15kYXRhOiguKj8pYmFzZTY0LC8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJvb3RQYXRoID0gdGhpcy50ZXh0dXJlUm9vdFBhdGg7XHJcbiAgICAgICAgaWYgKHJvb3RQYXRoID09IG51bGwpIHtcclxuICAgICAgICAgICAgcm9vdFBhdGggPSB0aGlzLnJvb3RQYXRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdXRpbC5yZWxhdGl2ZTJhYnNvbHV0ZShwYXRoLCByb290UGF0aCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnVmZmVyIGxvYWRlclxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9XHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbnN1Y2Nlc3NcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9uZXJyb3JcclxuICAgICAqL1xyXG4gICAgbG9hZEJ1ZmZlcjogZnVuY3Rpb24gKHBhdGgsIG9uc3VjY2Vzcywgb25lcnJvcikge1xyXG4gICAgICAgIHZlbmRvci5yZXF1ZXN0LmdldCh7XHJcbiAgICAgICAgICAgIHVybDogcGF0aCxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxyXG4gICAgICAgICAgICBvbmxvYWQ6IGZ1bmN0aW9uIChidWZmZXIpIHtcclxuICAgICAgICAgICAgICAgIG9uc3VjY2VzcyAmJiBvbnN1Y2Nlc3MoYnVmZmVyKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25lcnJvcjogZnVuY3Rpb24gKGJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgb25lcnJvciAmJiBvbmVycm9yKGJ1ZmZlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgX2dldFNoYWRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zaGFkZXIgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNoYWRlckxpYnJhcnkuZ2V0KHRoaXMuc2hhZGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5zaGFkZXIgaW5zdGFuY2VvZiBTaGFkZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hhZGVyO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2xvYWRCdWZmZXJzOiBmdW5jdGlvbiAocGF0aCwgb25zdWNjZXNzLCBvbmVycm9yKSB7XHJcbiAgICAgICAgdmFyIGJhc2U2NFByZWZpeCA9ICdkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsJztcclxuICAgICAgICB2YXIgc3RyU3RhcnQgPSBwYXRoLnN1YnN0cigwLCBiYXNlNjRQcmVmaXgubGVuZ3RoKTtcclxuICAgICAgICBpZiAoc3RyU3RhcnQgPT09IGJhc2U2NFByZWZpeCkge1xyXG4gICAgICAgICAgICBvbnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICBiYXNlNjRUb0JpbmFyeShwYXRoLCBiYXNlNjRQcmVmaXgubGVuZ3RoKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkQnVmZmVyKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlQnVmZmVyUGF0aChwYXRoKSxcclxuICAgICAgICAgICAgICAgIG9uc3VjY2VzcyxcclxuICAgICAgICAgICAgICAgIG9uZXJyb3JcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi9pc3N1ZXMvMTAwXHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvaXNzdWVzLzE5M1xyXG4gICAgX3BhcnNlU2tpbnM6IGZ1bmN0aW9uIChqc29uLCBsaWIpIHtcclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIHNrZWxldG9ucyBhbmQgam9pbnRzXHJcbiAgICAgICAgdmFyIGhhdmVJbnZCaW5kTWF0cmljZXMgPSBmYWxzZTtcclxuICAgICAgICB1dGlsLmVhY2goanNvbi5za2lucywgZnVuY3Rpb24gKHNraW5JbmZvLCBpZHgpIHtcclxuICAgICAgICAgICAgdmFyIHNrZWxldG9uID0gbmV3IFNrZWxldG9uKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHNraW5JbmZvLm5hbWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2tpbkluZm8uam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9kZUlkeCA9IHNraW5JbmZvLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBub2RlID0gbGliLm5vZGVzW25vZGVJZHhdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50ID0gbmV3IEpvaW50KHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBub2RlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBpbmRleDogc2tlbGV0b24uam9pbnRzLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbi5qb2ludHMucHVzaChqb2ludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2tlbGV0b24ucmVsYXRpdmVSb290Tm9kZSA9IGxpYi5ub2Rlc1tza2luSW5mby5za2VsZXRvbl0gfHwgdGhpcy5yb290Tm9kZTtcclxuICAgICAgICAgICAgaWYgKHNraW5JbmZvLmludmVyc2VCaW5kTWF0cmljZXMpIHtcclxuICAgICAgICAgICAgICAgIGhhdmVJbnZCaW5kTWF0cmljZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIElCTUluZm8gPSBqc29uLmFjY2Vzc29yc1tza2luSW5mby5pbnZlcnNlQmluZE1hdHJpY2VzXTtcclxuICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBsaWIuYnVmZmVyVmlld3NbSUJNSW5mby5idWZmZXJWaWV3XTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gSUJNSW5mby5ieXRlT2Zmc2V0IHx8IDA7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IElCTUluZm8uY291bnQgKiAxNjtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgc2l6ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2tlbGV0b24uc2V0Sm9pbnRNYXRyaWNlc0FycmF5KGFycmF5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNrZWxldG9uLnVwZGF0ZUpvaW50TWF0cmljZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsaWIuc2tlbGV0b25zW2lkeF0gPSBza2VsZXRvbjtcclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZW5hYmxlU2tpbm5pbmdGb3JNZXNoKG1lc2gsIHNrZWxldG9uLCBqb2ludEluZGljZXMpIHtcclxuICAgICAgICAgICAgbWVzaC5za2VsZXRvbiA9IHNrZWxldG9uO1xyXG4gICAgICAgICAgICBtZXNoLmpvaW50cyA9IGpvaW50SW5kaWNlcztcclxuXHJcbiAgICAgICAgICAgIGlmICghc2tlbGV0b24uYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgICAgIHNrZWxldG9uLnVwZGF0ZUpvaW50c0JvdW5kaW5nQm94ZXMobWVzaC5nZW9tZXRyeSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGdldEpvaW50SW5kZXgoam9pbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGpvaW50LmluZGV4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24ubm9kZXMsIGZ1bmN0aW9uIChub2RlSW5mbywgbm9kZUlkeCkge1xyXG4gICAgICAgICAgICBpZiAobm9kZUluZm8uc2tpbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2tpbklkeCA9IG5vZGVJbmZvLnNraW47XHJcbiAgICAgICAgICAgICAgICB2YXIgc2tlbGV0b24gPSBsaWIuc2tlbGV0b25zW3NraW5JZHhdO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBub2RlID0gbGliLm5vZGVzW25vZGVJZHhdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50SW5kaWNlcyA9IHNrZWxldG9uLmpvaW50cy5tYXAoZ2V0Sm9pbnRJbmRleCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIE1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVTa2lubmluZ0Zvck1lc2gobm9kZSwgc2tlbGV0b24sIGpvaW50SW5kaWNlcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBNZXNoIGhhdmUgbXVsdGlwbGUgcHJpbWl0aXZlc1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4oKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZVNraW5uaW5nRm9yTWVzaChjaGlsZHJlbltpXSwgc2tlbGV0b24sIGpvaW50SW5kaWNlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZVRleHR1cmVzOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24udGV4dHVyZXMsIGZ1bmN0aW9uICh0ZXh0dXJlSW5mbywgaWR4KXtcclxuICAgICAgICAgICAgLy8gc2FtcGxlcnMgaXMgb3B0aW9uYWxcclxuICAgICAgICAgICAgdmFyIHNhbXBsZXJJbmZvID0gKGpzb24uc2FtcGxlcnMgJiYganNvbi5zYW1wbGVyc1t0ZXh0dXJlSW5mby5zYW1wbGVyXSkgfHwge307XHJcbiAgICAgICAgICAgIHZhciBwYXJhbWV0ZXJzID0ge307XHJcbiAgICAgICAgICAgIFsnd3JhcFMnLCAnd3JhcFQnLCAnbWFnRmlsdGVyJywgJ21pbkZpbHRlciddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHNhbXBsZXJJbmZvW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW25hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB1dGlsLmRlZmF1bHRzKHBhcmFtZXRlcnMsIHtcclxuICAgICAgICAgICAgICAgIHdyYXBTOiBUZXh0dXJlLlJFUEVBVCxcclxuICAgICAgICAgICAgICAgIHdyYXBUOiBUZXh0dXJlLlJFUEVBVCxcclxuICAgICAgICAgICAgICAgIGZsaXBZOiB0aGlzLnRleHR1cmVGbGlwWSxcclxuICAgICAgICAgICAgICAgIGNvbnZlcnRUb1BPVDogdGhpcy50ZXh0dXJlQ29udmVydFRvUE9UXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRleHR1cmVJbmZvLnRhcmdldCB8fCBnbGVudW0uVEVYVFVSRV8yRDtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdCA9IHRleHR1cmVJbmZvLmZvcm1hdDtcclxuICAgICAgICAgICAgaWYgKGZvcm1hdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmZvcm1hdCA9IGZvcm1hdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gZ2xlbnVtLlRFWFRVUkVfMkQpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRChwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHZhciBpbWFnZUluZm8gPSBqc29uLmltYWdlc1t0ZXh0dXJlSW5mby5zb3VyY2VdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHVyaTtcclxuICAgICAgICAgICAgICAgIGlmIChpbWFnZUluZm8udXJpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJpID0gdGhpcy5yZXNvbHZlVGV4dHVyZVBhdGgoaW1hZ2VJbmZvLnVyaSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpbWFnZUluZm8uYnVmZmVyVmlldyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJpID0gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbbGliLmJ1ZmZlclZpZXdzW2ltYWdlSW5mby5idWZmZXJWaWV3XV0sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogaW1hZ2VJbmZvLm1pbWVUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHVyaSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHR1cmUubG9hZCh1cmksIHRoaXMuY3Jvc3NPcmlnaW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpYi50ZXh0dXJlc1tpZHhdID0gdGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfS0hSQ29tbW9uTWF0ZXJpYWxUb1N0YW5kYXJkOiBmdW5jdGlvbiAobWF0ZXJpYWxJbmZvLCBsaWIpIHtcclxuICAgICAgICB2YXIgdW5pZm9ybXMgPSB7fTtcclxuICAgICAgICB2YXIgY29tbW9uTWF0ZXJpYWxJbmZvID0gbWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnNbJ0tIUl9tYXRlcmlhbHNfY29tbW9uJ107XHJcbiAgICAgICAgdW5pZm9ybXMgPSBjb21tb25NYXRlcmlhbEluZm8udmFsdWVzIHx8IHt9O1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHVuaWZvcm1zLmRpZmZ1c2UgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIHVuaWZvcm1zLmRpZmZ1c2UgPSBsaWIudGV4dHVyZXNbdW5pZm9ybXMuZGlmZnVzZV0gfHwgbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiB1bmlmb3Jtcy5lbWlzc2lvbiA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgdW5pZm9ybXMuZW1pc3Npb24gPSBsaWIudGV4dHVyZXNbdW5pZm9ybXMuZW1pc3Npb25dIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZW5hYmxlZFRleHR1cmVzID0gW107XHJcbiAgICAgICAgaWYgKHVuaWZvcm1zWydkaWZmdXNlJ10gaW5zdGFuY2VvZiBUZXh0dXJlMkQpIHtcclxuICAgICAgICAgICAgZW5hYmxlZFRleHR1cmVzLnB1c2goJ2RpZmZ1c2VNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdub3JtYWxNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHVuaWZvcm1zWydlbWlzc2lvbiddIGluc3RhbmNlb2YgVGV4dHVyZTJEKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdlbWlzc2l2ZU1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIGlzU3RhbmRhcmRNYXRlcmlhbCA9IHRoaXMudXNlU3RhbmRhcmRNYXRlcmlhbDtcclxuICAgICAgICBpZiAoaXNTdGFuZGFyZE1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsID0gbmV3IFN0YW5kYXJkTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbWF0ZXJpYWxJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBkb3VibGVTaWRlZDogbWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbWF0ZXJpYWxJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBzaGFkZXI6IHRoaXMuX2dldFNoYWRlcigpXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfUk9VR0hORVNTJyk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX01FVEFMTkVTUycpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZCkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHVuaWZvcm1zLnRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlcHRoTWFzayA9IGZhbHNlO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZXB0aFRlc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC50cmFuc3BhcmVudCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGlmZnVzZVByb3AgPSB1bmlmb3Jtc1snZGlmZnVzZSddO1xyXG4gICAgICAgIGlmIChkaWZmdXNlUHJvcCkge1xyXG4gICAgICAgICAgICAvLyBDb2xvclxyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkaWZmdXNlUHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGRpZmZ1c2VQcm9wID0gZGlmZnVzZVByb3Auc2xpY2UoMCwgMyk7XHJcbiAgICAgICAgICAgICAgICBpc1N0YW5kYXJkTWF0ZXJpYWwgPyAobWF0ZXJpYWwuY29sb3IgPSBkaWZmdXNlUHJvcClcclxuICAgICAgICAgICAgICAgICAgICA6IG1hdGVyaWFsLnNldCgnY29sb3InLCBkaWZmdXNlUHJvcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7IC8vIFRleHR1cmVcclxuICAgICAgICAgICAgICAgIGlzU3RhbmRhcmRNYXRlcmlhbCA/IChtYXRlcmlhbC5kaWZmdXNlTWFwID0gZGlmZnVzZVByb3ApXHJcbiAgICAgICAgICAgICAgICAgICAgOiBtYXRlcmlhbC5zZXQoJ2RpZmZ1c2VNYXAnLCBkaWZmdXNlUHJvcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGVtaXNzaW9uUHJvcCA9IHVuaWZvcm1zWydlbWlzc2lvbiddO1xyXG4gICAgICAgIGlmIChlbWlzc2lvblByb3AgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBDb2xvclxyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbWlzc2lvblByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBlbWlzc2lvblByb3AgPSBlbWlzc2lvblByb3Auc2xpY2UoMCwgMyk7XHJcbiAgICAgICAgICAgICAgICBpc1N0YW5kYXJkTWF0ZXJpYWwgPyAobWF0ZXJpYWwuZW1pc3Npb24gPSBlbWlzc2lvblByb3ApXHJcbiAgICAgICAgICAgICAgICAgICAgOiBtYXRlcmlhbC5zZXQoJ2VtaXNzaW9uJywgZW1pc3Npb25Qcm9wKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHsgLy8gVGV4dHVyZVxyXG4gICAgICAgICAgICAgICAgaXNTdGFuZGFyZE1hdGVyaWFsID8gKG1hdGVyaWFsLmVtaXNzaXZlTWFwID0gZW1pc3Npb25Qcm9wKVxyXG4gICAgICAgICAgICAgICAgICAgIDogbWF0ZXJpYWwuc2V0KCdlbWlzc2l2ZU1hcCcsIGVtaXNzaW9uUHJvcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyB0ZXhDb29yZFxyXG4gICAgICAgICAgICB2YXIgbm9ybWFsVGV4dHVyZUluZGV4ID0gbWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUuaW5kZXg7XHJcbiAgICAgICAgICAgIGlmIChpc1N0YW5kYXJkTWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLm5vcm1hbE1hcCA9IGxpYi50ZXh0dXJlc1tub3JtYWxUZXh0dXJlSW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ25vcm1hbE1hcCcsIGxpYi50ZXh0dXJlc1tub3JtYWxUZXh0dXJlSW5kZXhdIHx8IG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1bmlmb3Jtc1snc2hpbmluZXNzJ10gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB2YXIgZ2xvc3NpbmVzcyA9IE1hdGgubG9nKHVuaWZvcm1zWydzaGluaW5lc3MnXSkgLyBNYXRoLmxvZyg4MTkyKTtcclxuICAgICAgICAgICAgLy8gVW5pZm9ybSBnbG9zc2luZXNzXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnZ2xvc3NpbmVzcycsIGdsb3NzaW5lc3MpO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ3JvdWdobmVzcycsIDEgLSBnbG9zc2luZXNzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnZ2xvc3NpbmVzcycsIDAuMyk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgncm91Z2huZXNzJywgMC4zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHVuaWZvcm1zWydzcGVjdWxhciddICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdzcGVjdWxhckNvbG9yJywgdW5pZm9ybXNbJ3NwZWN1bGFyJ10uc2xpY2UoMCwgMykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodW5pZm9ybXNbJ3RyYW5zcGFyZW5jeSddICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdhbHBoYScsIHVuaWZvcm1zWyd0cmFuc3BhcmVuY3knXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWw7XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYnJNZXRhbGxpY1JvdWdobmVzc1RvU3RhbmRhcmQ6IGZ1bmN0aW9uIChtYXRlcmlhbEluZm8sIG1ldGFsbGljUm91Z2huZXNzTWF0SW5mbywgbGliKSB7XHJcbiAgICAgICAgdmFyIGFscGhhVGVzdCA9IG1hdGVyaWFsSW5mby5hbHBoYU1vZGUgPT09ICdNQVNLJztcclxuXHJcbiAgICAgICAgdmFyIGlzU3RhbmRhcmRNYXRlcmlhbCA9IHRoaXMudXNlU3RhbmRhcmRNYXRlcmlhbDtcclxuICAgICAgICB2YXIgbWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIGRpZmZ1c2VNYXAsIHJvdWdobmVzc01hcCwgbWV0YWxuZXNzTWFwLCBub3JtYWxNYXAsIGVtaXNzaXZlTWFwLCBvY2NsdXNpb25NYXA7XHJcbiAgICAgICAgdmFyIGVuYWJsZWRUZXh0dXJlcyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc2NhbGFyIG11bHRpcGxpZXIgYXBwbGllZCB0byBlYWNoIG5vcm1hbCB2ZWN0b3Igb2YgdGhlIG5vcm1hbCB0ZXh0dXJlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFhYWCBUaGlzIHZhbHVlIGlzIGlnbm9yZWQgaWYgYG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlYCBpcyBub3Qgc3BlY2lmaWVkLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZhciBub3JtYWxTY2FsZSA9IDEuMDtcclxuXHJcbiAgICAgICAgLy8gVE9ETyB0ZXhDb29yZFxyXG4gICAgICAgIGlmIChtZXRhbGxpY1JvdWdobmVzc01hdEluZm8uYmFzZUNvbG9yVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwID0gbGliLnRleHR1cmVzW21ldGFsbGljUm91Z2huZXNzTWF0SW5mby5iYXNlQ29sb3JUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdkaWZmdXNlTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtZXRhbGxpY1JvdWdobmVzc01hdEluZm8ubWV0YWxsaWNSb3VnaG5lc3NUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIHJvdWdobmVzc01hcCA9IG1ldGFsbmVzc01hcCA9IGxpYi50ZXh0dXJlc1ttZXRhbGxpY1JvdWdobmVzc01hdEluZm8ubWV0YWxsaWNSb3VnaG5lc3NUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICByb3VnaG5lc3NNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ21ldGFsbmVzc01hcCcsICdyb3VnaG5lc3NNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlKSB7XHJcblxyXG4gICAgICAgICAgICBub3JtYWxNYXAgPSBsaWIudGV4dHVyZXNbbWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIG5vcm1hbE1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnbm9ybWFsTWFwJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlLnNjYWxlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsU2NhbGUgPSBtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZS5zY2FsZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5lbWlzc2l2ZVRleHR1cmUpIHtcclxuICAgICAgICAgICAgZW1pc3NpdmVNYXAgPSBsaWIudGV4dHVyZXNbbWF0ZXJpYWxJbmZvLmVtaXNzaXZlVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgZW1pc3NpdmVNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ2VtaXNzaXZlTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ub2NjbHVzaW9uVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBvY2NsdXNpb25NYXAgPSBsaWIudGV4dHVyZXNbbWF0ZXJpYWxJbmZvLm9jY2x1c2lvblRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIG9jY2x1c2lvbk1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnb2NjbHVzaW9uTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBiYXNlQ29sb3IgPSBtZXRhbGxpY1JvdWdobmVzc01hdEluZm8uYmFzZUNvbG9yRmFjdG9yIHx8IFsxLCAxLCAxLCAxXTtcclxuXHJcbiAgICAgICAgdmFyIGNvbW1vblByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICAgIGRpZmZ1c2VNYXA6IGRpZmZ1c2VNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgcm91Z2huZXNzTWFwOiByb3VnaG5lc3NNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgbWV0YWxuZXNzTWFwOiBtZXRhbG5lc3NNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgbm9ybWFsTWFwOiBub3JtYWxNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgb2NjbHVzaW9uTWFwOiBvY2NsdXNpb25NYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgZW1pc3NpdmVNYXA6IGVtaXNzaXZlTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGNvbG9yOiBiYXNlQ29sb3Iuc2xpY2UoMCwgMyksXHJcbiAgICAgICAgICAgIGFscGhhOiBiYXNlQ29sb3JbM10sXHJcbiAgICAgICAgICAgIG1ldGFsbmVzczogbWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLm1ldGFsbGljRmFjdG9yIHx8IDAsXHJcbiAgICAgICAgICAgIHJvdWdobmVzczogbWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLnJvdWdobmVzc0ZhY3RvciB8fCAwLFxyXG4gICAgICAgICAgICBlbWlzc2lvbjogbWF0ZXJpYWxJbmZvLmVtaXNzaXZlRmFjdG9yIHx8IFswLCAwLCAwXSxcclxuICAgICAgICAgICAgZW1pc3Npb25JbnRlbnNpdHk6IDEsXHJcbiAgICAgICAgICAgIGFscGhhQ3V0b2ZmOiBtYXRlcmlhbEluZm8uYWxwaGFDdXRvZmYgfHwgMCxcclxuICAgICAgICAgICAgbm9ybWFsU2NhbGU6IG5vcm1hbFNjYWxlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoY29tbW9uUHJvcGVydGllcy5yb3VnaG5lc3NNYXApIHtcclxuICAgICAgICAgICAgLy8gSW4gZ2xURiBtZXRhbGxpY0ZhY3RvciB3aWxsIGRvIG11bHRpcGx5LCB3aGljaCBpcyBkaWZmZXJlbnQgZnJvbSBTdGFuZGFyZE1hdGVyaWFsLlxyXG4gICAgICAgICAgICAvLyBTbyBzaW1wbHkgaWdub3JlIGl0XHJcbiAgICAgICAgICAgIGNvbW1vblByb3BlcnRpZXMubWV0YWxuZXNzID0gMC41O1xyXG4gICAgICAgICAgICBjb21tb25Qcm9wZXJ0aWVzLnJvdWdobmVzcyA9IDAuNTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RhbmRhcmRNYXRlcmlhbCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBTdGFuZGFyZE1hdGVyaWFsKHV0aWwuZXh0ZW5kKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgYWxwaGFUZXN0OiBhbHBoYVRlc3QsXHJcbiAgICAgICAgICAgICAgICBkb3VibGVTaWRlZDogbWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkLFxyXG4gICAgICAgICAgICAgICAgLy8gRyBjaGFubmVsXHJcbiAgICAgICAgICAgICAgICByb3VnaG5lc3NDaGFubmVsOiAxLFxyXG4gICAgICAgICAgICAgICAgLy8gQiBDaGFubmVsXHJcbiAgICAgICAgICAgICAgICBtZXRhbG5lc3NDaGFubmVsOiAyXHJcbiAgICAgICAgICAgIH0sIGNvbW1vblByb3BlcnRpZXMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBtYXRlcmlhbEluZm8ubmFtZSxcclxuICAgICAgICAgICAgICAgIHNoYWRlcjogdGhpcy5fZ2V0U2hhZGVyKClcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9ST1VHSE5FU1MnKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfTUVUQUxORVNTJyk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUk9VR0hORVNTX0NIQU5ORUwnLCAxKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdNRVRBTE5FU1NfQ0hBTk5FTCcsIDIpO1xyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdESUZGVVNFTUFQX0FMUEhBX0FMUEhBJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYWxwaGFUZXN0KSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ0RPVUJMRV9TSURFRCcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoY29tbW9uUHJvcGVydGllcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmFscGhhTW9kZSA9PT0gJ0JMRU5EJykge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZXB0aE1hc2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGJyU3BlY3VsYXJHbG9zc2luZXNzVG9TdGFuZGFyZDogZnVuY3Rpb24gKG1hdGVyaWFsSW5mbywgc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mbywgbGliKSB7XHJcbiAgICAgICAgdmFyIGFscGhhVGVzdCA9IG1hdGVyaWFsSW5mby5hbHBoYU1vZGUgPT09ICdNQVNLJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXNlU3RhbmRhcmRNYXRlcmlhbCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTdGFuZGFyZE1hdGVyaWFsIGRvZXNuXFwndCBzdXBwb3J0IHNwZWN1bGFyIGdsb3NzaW5lc3Mgd29ya2Zsb3cgeWV0Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIGRpZmZ1c2VNYXAsIGdsb3NzaW5lc3NNYXAsIHNwZWN1bGFyTWFwLCBub3JtYWxNYXAsIGVtaXNzaXZlTWFwLCBvY2NsdXNpb25NYXA7XHJcbiAgICAgICAgdmFyIGVuYWJsZWRUZXh0dXJlcyA9IFtdO1xyXG4gICAgICAgIC8vIFRPRE8gdGV4Q29vcmRcclxuICAgICAgICBpZiAoc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mby5kaWZmdXNlVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwID0gbGliLnRleHR1cmVzW3NwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uZGlmZnVzZVRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIGRpZmZ1c2VNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ2RpZmZ1c2VNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uc3BlY3VsYXJHbG9zc2luZXNzVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBnbG9zc2luZXNzTWFwID0gc3BlY3VsYXJNYXAgPSBsaWIudGV4dHVyZXNbc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mby5zcGVjdWxhckdsb3NzaW5lc3NUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBnbG9zc2luZXNzTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdzcGVjdWxhck1hcCcsICdnbG9zc2luZXNzTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBub3JtYWxNYXAgPSBsaWIudGV4dHVyZXNbbWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIG5vcm1hbE1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnbm9ybWFsTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8uZW1pc3NpdmVUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5lbWlzc2l2ZVRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdlbWlzc2l2ZU1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLm9jY2x1c2lvblRleHR1cmUpIHtcclxuICAgICAgICAgICAgb2NjbHVzaW9uTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5vY2NsdXNpb25UZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBvY2NsdXNpb25NYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ29jY2x1c2lvbk1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGlmZnVzZUNvbG9yID0gc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mby5kaWZmdXNlRmFjdG9yIHx8IFsxLCAxLCAxLCAxXTtcclxuXHJcbiAgICAgICAgdmFyIGNvbW1vblByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICAgIGRpZmZ1c2VNYXA6IGRpZmZ1c2VNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgZ2xvc3NpbmVzc01hcDogZ2xvc3NpbmVzc01hcCB8fCBudWxsLFxyXG4gICAgICAgICAgICBzcGVjdWxhck1hcDogc3BlY3VsYXJNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgbm9ybWFsTWFwOiBub3JtYWxNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgZW1pc3NpdmVNYXA6IGVtaXNzaXZlTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG9jY2x1c2lvbk1hcDogb2NjbHVzaW9uTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGNvbG9yOiBkaWZmdXNlQ29sb3Iuc2xpY2UoMCwgMyksXHJcbiAgICAgICAgICAgIGFscGhhOiBkaWZmdXNlQ29sb3JbM10sXHJcbiAgICAgICAgICAgIHNwZWN1bGFyQ29sb3I6IHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uc3BlY3VsYXJGYWN0b3IgfHwgWzEsIDEsIDFdLFxyXG4gICAgICAgICAgICBnbG9zc2luZXNzOiBzcGVjdWxhckdsb3NzaW5lc3NNYXRJbmZvLmdsb3NzaW5lc3NGYWN0b3IgfHwgMCxcclxuICAgICAgICAgICAgZW1pc3Npb246IG1hdGVyaWFsSW5mby5lbWlzc2l2ZUZhY3RvciB8fCBbMCwgMCwgMF0sXHJcbiAgICAgICAgICAgIGVtaXNzaW9uSW50ZW5zaXR5OiAxLFxyXG4gICAgICAgICAgICBhbHBoYUN1dG9mZjogbWF0ZXJpYWxJbmZvLmFscGhhQ3V0b2ZmID09IG51bGwgPyAwLjkgOiBtYXRlcmlhbEluZm8uYWxwaGFDdXRvZmZcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChjb21tb25Qcm9wZXJ0aWVzLmdsb3NzaW5lc3NNYXApIHtcclxuICAgICAgICAgICAgLy8gSWdub3JlIHNwZWN1bGFyRmFjdG9yXHJcbiAgICAgICAgICAgIGNvbW1vblByb3BlcnRpZXMuZ2xvc3NpbmVzcyA9IDAuNTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbW1vblByb3BlcnRpZXMuc3BlY3VsYXJNYXApIHtcclxuICAgICAgICAgICAgLy8gSWdub3JlIHNwZWN1bGFyRmFjdG9yXHJcbiAgICAgICAgICAgIGNvbW1vblByb3BlcnRpZXMuc3BlY3VsYXJDb2xvciA9IFsxLCAxLCAxXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgbmFtZTogbWF0ZXJpYWxJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgIHNoYWRlcjogdGhpcy5fZ2V0U2hhZGVyKClcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdHTE9TU0lORVNTX0NIQU5ORUwnLCAzKTtcclxuICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ0RJRkZVU0VNQVBfQUxQSEFfQUxQSEEnKTtcclxuXHJcbiAgICAgICAgaWYgKGFscGhhVGVzdCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ0RPVUJMRV9TSURFRCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWF0ZXJpYWwuc2V0KGNvbW1vblByb3BlcnRpZXMpO1xyXG5cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmFscGhhTW9kZSA9PT0gJ0JMRU5EJykge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZXB0aE1hc2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGFyc2VNYXRlcmlhbHM6IGZ1bmN0aW9uIChqc29uLCBsaWIpIHtcclxuICAgICAgICB1dGlsLmVhY2goanNvbi5tYXRlcmlhbHMsIGZ1bmN0aW9uIChtYXRlcmlhbEluZm8sIGlkeCkge1xyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnMgJiYgbWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnNbJ0tIUl9tYXRlcmlhbHNfY29tbW9uJ10pIHtcclxuICAgICAgICAgICAgICAgIGxpYi5tYXRlcmlhbHNbaWR4XSA9IHRoaXMuX0tIUkNvbW1vbk1hdGVyaWFsVG9TdGFuZGFyZChtYXRlcmlhbEluZm8sIGxpYik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnMgJiYgbWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnNbJ0tIUl9tYXRlcmlhbHNfcGJyU3BlY3VsYXJHbG9zc2luZXNzJ10pIHtcclxuICAgICAgICAgICAgICAgIGxpYi5tYXRlcmlhbHNbaWR4XSA9IHRoaXMuX3BiclNwZWN1bGFyR2xvc3NpbmVzc1RvU3RhbmRhcmQobWF0ZXJpYWxJbmZvLCBtYXRlcmlhbEluZm8uZXh0ZW5zaW9uc1snS0hSX21hdGVyaWFsc19wYnJTcGVjdWxhckdsb3NzaW5lc3MnXSwgbGliKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxpYi5tYXRlcmlhbHNbaWR4XSA9IHRoaXMuX3Bick1ldGFsbGljUm91Z2huZXNzVG9TdGFuZGFyZChtYXRlcmlhbEluZm8sIG1hdGVyaWFsSW5mby5wYnJNZXRhbGxpY1JvdWdobmVzcyB8fCB7fSwgbGliKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGFyc2VNZXNoZXM6IGZ1bmN0aW9uIChqc29uLCBsaWIpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIHV0aWwuZWFjaChqc29uLm1lc2hlcywgZnVuY3Rpb24gKG1lc2hJbmZvLCBpZHgpIHtcclxuICAgICAgICAgICAgbGliLm1lc2hlc1tpZHhdID0gW107XHJcbiAgICAgICAgICAgIC8vIEdlb21ldHJ5XHJcbiAgICAgICAgICAgIGZvciAodmFyIHBwID0gMDsgcHAgPCBtZXNoSW5mby5wcmltaXRpdmVzLmxlbmd0aDsgcHArKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHByaW1pdGl2ZUluZm8gPSBtZXNoSW5mby5wcmltaXRpdmVzW3BwXTtcclxuICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IG5ldyBHZW9tZXRyeSh7XHJcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUEVORElHTlxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG1lc2hJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgYm91bmRpbmdCb3g6IG5ldyBCb3VuZGluZ0JveCgpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIC8vIFBhcnNlIGF0dHJpYnV0ZXNcclxuICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpY3MgPSBPYmplY3Qua2V5cyhwcmltaXRpdmVJbmZvLmF0dHJpYnV0ZXMpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgc3MgPSAwOyBzcyA8IHNlbWFudGljcy5sZW5ndGg7IHNzKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWMgPSBzZW1hbnRpY3Nbc3NdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhY2Nlc3NvcklkeCA9IHByaW1pdGl2ZUluZm8uYXR0cmlidXRlc1tzZW1hbnRpY107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUluZm8gPSBqc29uLmFjY2Vzc29yc1thY2Nlc3NvcklkeF07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBzZW1hbnRpY0F0dHJpYnV0ZU1hcFtzZW1hbnRpY107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGVOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IFNJWkVfTUFQW2F0dHJpYnV0ZUluZm8udHlwZV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUFycmF5ID0gZ2V0QWNjZXNzb3JEYXRhKGpzb24sIGxpYiwgYWNjZXNzb3JJZHgpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFdlYkdMIGF0dHJpYnV0ZSBidWZmZXIgbm90IHN1cHBvcnQgdWludDMyLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIERpcmVjdCB1c2UgRmxvYXQzMkFycmF5IG1heSBhbHNvIGhhdmUgaXNzdWUuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZUFycmF5IGluc3RhbmNlb2YgdmVuZG9yLlVpbnQzMkFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShhdHRyaWJ1dGVBcnJheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYyA9PT0gJ1dFSUdIVFNfMCcgJiYgc2l6ZSA9PT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZWlnaHQgZGF0YSBpbiBRVEVLIGhhcyBvbmx5IDMgY29tcG9uZW50LCB0aGUgbGFzdCBjb21wb25lbnQgY2FuIGJlIGV2YWx1YXRlZCBzaW5jZSBpdCBpcyBub3JtYWxpemVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3ZWlnaHRBcnJheSA9IG5ldyBhdHRyaWJ1dGVBcnJheS5jb25zdHJ1Y3RvcihhdHRyaWJ1dGVJbmZvLmNvdW50ICogMyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlSW5mby5jb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTQgPSBpICogNCwgaTMgPSBpICogMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3MSA9IGF0dHJpYnV0ZUFycmF5W2k0XSwgdzIgPSBhdHRyaWJ1dGVBcnJheVtpNCArIDFdLCB3MyA9IGF0dHJpYnV0ZUFycmF5W2k0ICsgMl0sIHc0ID0gYXR0cmlidXRlQXJyYXlbaTQgKyAzXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3U3VtID0gdzEgKyB3MiArIHczICsgdzQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRBcnJheVtpM10gPSB3MSAvIHdTdW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRBcnJheVtpMyArIDFdID0gdzIgLyB3U3VtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0QXJyYXlbaTMgKyAyXSA9IHczIC8gd1N1bTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdLnZhbHVlID0gd2VpZ2h0QXJyYXk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbWFudGljID09PSAnQ09MT1JfMCcgJiYgc2l6ZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JBcnJheSA9IG5ldyBhdHRyaWJ1dGVBcnJheS5jb25zdHJ1Y3RvcihhdHRyaWJ1dGVJbmZvLmNvdW50ICogNCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlSW5mby5jb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTQgPSBpICogNCwgaTMgPSBpICogMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yQXJyYXlbaTRdID0gYXR0cmlidXRlQXJyYXlbaTNdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JBcnJheVtpNCArIDFdID0gYXR0cmlidXRlQXJyYXlbaTMgKyAxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yQXJyYXlbaTQgKyAyXSA9IGF0dHJpYnV0ZUFycmF5W2kzICsgMl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckFycmF5W2k0ICsgM10gPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0udmFsdWUgPSBjb2xvckFycmF5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXS52YWx1ZSA9IGF0dHJpYnV0ZUFycmF5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZVR5cGUgPSAnZmxvYXQnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVBcnJheSBpbnN0YW5jZW9mIHZlbmRvci5VaW50MTZBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVUeXBlID0gJ3VzaG9ydCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZUFycmF5IGluc3RhbmNlb2YgdmVuZG9yLkludDE2QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9ICdzaG9ydCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZUFycmF5IGluc3RhbmNlb2YgdmVuZG9yLlVpbnQ4QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9ICd1Ynl0ZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZUFycmF5IGluc3RhbmNlb2YgdmVuZG9yLkludDhBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVUeXBlID0gJ2J5dGUnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdLnR5cGUgPSBhdHRyaWJ1dGVUeXBlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMgPT09ICdQT1NJVElPTicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQm91bmRpbmcgQm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaW4gPSBhdHRyaWJ1dGVJbmZvLm1pbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heCA9IGF0dHJpYnV0ZUluZm8ubWF4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5ib3VuZGluZ0JveC5taW4uc2V0KG1pblswXSwgbWluWzFdLCBtaW5bMl0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmJvdW5kaW5nQm94Lm1heC5zZXQobWF4WzBdLCBtYXhbMV0sIG1heFsyXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gUGFyc2UgaW5kaWNlc1xyXG4gICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZUluZm8uaW5kaWNlcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlcyA9IGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIHByaW1pdGl2ZUluZm8uaW5kaWNlcywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdlb21ldHJ5LnZlcnRleENvdW50IDw9IDB4ZmZmZiAmJiBnZW9tZXRyeS5pbmRpY2VzIGluc3RhbmNlb2YgdmVuZG9yLlVpbnQzMkFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgdmVuZG9yLlVpbnQxNkFycmF5KGdlb21ldHJ5LmluZGljZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZihnZW9tZXRyeS5pbmRpY2VzIGluc3RhbmNlb2YgdmVuZG9yLlVpbnQ4QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlcyA9IG5ldyB2ZW5kb3IuVWludDE2QXJyYXkoZ2VvbWV0cnkuaW5kaWNlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IGxpYi5tYXRlcmlhbHNbcHJpbWl0aXZlSW5mby5tYXRlcmlhbF07XHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWxJbmZvID0gKGpzb24ubWF0ZXJpYWxzIHx8IFtdKVtwcmltaXRpdmVJbmZvLm1hdGVyaWFsXTtcclxuICAgICAgICAgICAgICAgIC8vIFVzZSBkZWZhdWx0IG1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXI6IHNlbGYuX2dldFNoYWRlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgbWVzaCA9IG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogZ2VvbWV0cnksXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IFtNZXNoLlBPSU5UUywgTWVzaC5MSU5FUywgTWVzaC5MSU5FX0xPT1AsIE1lc2guTElORV9TVFJJUCwgTWVzaC5UUklBTkdMRVMsIE1lc2guVFJJQU5HTEVfU1RSSVAsIE1lc2guVFJJQU5HTEVfRkFOXVtwcmltaXRpdmVJbmZvLm1vZGVdIHx8IE1lc2guVFJJQU5HTEVTLFxyXG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZUdCdWZmZXI6IG1hdGVyaWFsLnRyYW5zcGFyZW50XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbEluZm8gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc2guY3VsbGluZyA9ICFtYXRlcmlhbEluZm8uZG91YmxlU2lkZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1lc2guZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNoLmdlb21ldHJ5LmdlbmVyYXRlVmVydGV4Tm9ybWFscygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCgobWF0ZXJpYWwgaW5zdGFuY2VvZiBTdGFuZGFyZE1hdGVyaWFsKSAmJiBtYXRlcmlhbC5ub3JtYWxNYXApXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgKG1hdGVyaWFsLmlzVGV4dHVyZUVuYWJsZWQoJ25vcm1hbE1hcCcpKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMudGFuZ2VudC52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNoLmdlb21ldHJ5LmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobWVzaC5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC5kZWZpbmUoJ1ZFUlRFWF9DT0xPUicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG1lc2gubmFtZSA9IEdMVEZMb2FkZXIuZ2VuZXJhdGVNZXNoTmFtZShqc29uLm1lc2hlcywgaWR4LCBwcCk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGliLm1lc2hlc1tpZHhdLnB1c2gobWVzaCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2luc3RhbmNlQ2FtZXJhOiBmdW5jdGlvbiAoanNvbiwgbm9kZUluZm8pIHtcclxuICAgICAgICB2YXIgY2FtZXJhSW5mbyA9IGpzb24uY2FtZXJhc1tub2RlSW5mby5jYW1lcmFdO1xyXG5cclxuICAgICAgICBpZiAoY2FtZXJhSW5mby50eXBlID09PSAncGVyc3BlY3RpdmUnKSB7XHJcbiAgICAgICAgICAgIHZhciBwZXJzcGVjdGl2ZUluZm8gPSBjYW1lcmFJbmZvLnBlcnNwZWN0aXZlIHx8IHt9O1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG5vZGVJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBhc3BlY3Q6IHBlcnNwZWN0aXZlSW5mby5hc3BlY3RSYXRpbyxcclxuICAgICAgICAgICAgICAgIGZvdjogcGVyc3BlY3RpdmVJbmZvLnlmb3YgLyBNYXRoLlBJICogMTgwLFxyXG4gICAgICAgICAgICAgICAgZmFyOiBwZXJzcGVjdGl2ZUluZm8uemZhcixcclxuICAgICAgICAgICAgICAgIG5lYXI6IHBlcnNwZWN0aXZlSW5mby56bmVhclxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBvcnRob2dyYXBoaWNJbmZvID0gY2FtZXJhSW5mby5vcnRob2dyYXBoaWMgfHwge307XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3J0aG9ncmFwaGljQ2FtZXJhKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG5vZGVJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB0b3A6IG9ydGhvZ3JhcGhpY0luZm8ueW1hZyxcclxuICAgICAgICAgICAgICAgIHJpZ2h0OiBvcnRob2dyYXBoaWNJbmZvLnhtYWcsXHJcbiAgICAgICAgICAgICAgICBsZWZ0OiAtb3J0aG9ncmFwaGljSW5mby54bWFnLFxyXG4gICAgICAgICAgICAgICAgYm90dG9tOiAtb3J0aG9ncmFwaGljSW5mby55bWFnLFxyXG4gICAgICAgICAgICAgICAgbmVhcjogb3J0aG9ncmFwaGljSW5mby56bmVhcixcclxuICAgICAgICAgICAgICAgIGZhcjogb3J0aG9ncmFwaGljSW5mby56ZmFyXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3BhcnNlTm9kZXM6IGZ1bmN0aW9uIChqc29uLCBsaWIpIHtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gaW5zdGFuY2VNZXNoKG1lc2gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG1lc2gubmFtZSxcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBtZXNoLmdlb21ldHJ5LFxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWw6IG1lc2gubWF0ZXJpYWwsXHJcbiAgICAgICAgICAgICAgICBjdWxsaW5nOiBtZXNoLmN1bGxpbmcsXHJcbiAgICAgICAgICAgICAgICBtb2RlOiBtZXNoLm1vZGVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsaWIuaW5zdGFuY2VkTWVzaGVzID0gW107XHJcblxyXG4gICAgICAgIHV0aWwuZWFjaChqc29uLm5vZGVzLCBmdW5jdGlvbiAobm9kZUluZm8sIGlkeCkge1xyXG4gICAgICAgICAgICB2YXIgbm9kZTtcclxuICAgICAgICAgICAgaWYgKG5vZGVJbmZvLmNhbWVyYSAhPSBudWxsICYmIHRoaXMuaW5jbHVkZUNhbWVyYSkge1xyXG4gICAgICAgICAgICAgICAgbm9kZSA9IHRoaXMuX2luc3RhbmNlQ2FtZXJhKGpzb24sIG5vZGVJbmZvKTtcclxuICAgICAgICAgICAgICAgIGxpYi5jYW1lcmFzLnB1c2gobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobm9kZUluZm8ubWVzaCAhPSBudWxsICYmIHRoaXMuaW5jbHVkZU1lc2gpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcmltaXRpdmVzID0gbGliLm1lc2hlc1tub2RlSW5mby5tZXNoXTtcclxuICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIG5vZGUgd2l0aCBtZXNoIGRpcmVjdGx5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBpbnN0YW5jZU1lc2gocHJpbWl0aXZlc1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0TmFtZShub2RlSW5mby5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGliLmluc3RhbmNlZE1lc2hlcy5wdXNoKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5ldyBOb2RlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0TmFtZShub2RlSW5mby5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwcmltaXRpdmVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3TWVzaCA9IGluc3RhbmNlTWVzaChwcmltaXRpdmVzW2pdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkKG5ld01lc2gpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliLmluc3RhbmNlZE1lc2hlcy5wdXNoKG5ld01lc2gpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbm9kZSA9IG5ldyBOb2RlKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBQRU5ESU5HIER1bHBsaWNhdGUgbmFtZS5cclxuICAgICAgICAgICAgICAgIG5vZGUuc2V0TmFtZShub2RlSW5mby5uYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobm9kZUluZm8ubWF0cml4KSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLmxvY2FsVHJhbnNmb3JtLnNldEFycmF5KG5vZGVJbmZvLm1hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICBub2RlLmRlY29tcG9zZUxvY2FsVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZUluZm8udHJhbnNsYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnBvc2l0aW9uLnNldEFycmF5KG5vZGVJbmZvLnRyYW5zbGF0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChub2RlSW5mby5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUucm90YXRpb24uc2V0QXJyYXkobm9kZUluZm8ucm90YXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGVJbmZvLnNjYWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zY2FsZS5zZXRBcnJheShub2RlSW5mby5zY2FsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxpYi5ub2Rlc1tpZHhdID0gbm9kZTtcclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgLy8gQnVpbGQgaGllcmFyY2h5XHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24ubm9kZXMsIGZ1bmN0aW9uIChub2RlSW5mbywgaWR4KSB7XHJcbiAgICAgICAgICAgIHZhciBub2RlID0gbGliLm5vZGVzW2lkeF07XHJcbiAgICAgICAgICAgIGlmIChub2RlSW5mby5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlSW5mby5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZElkeCA9IG5vZGVJbmZvLmNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IGxpYi5ub2Rlc1tjaGlsZElkeF07XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hZGQoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICBfcGFyc2VBbmltYXRpb25zOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tDaGFubmVsUGF0aChjaGFubmVsSW5mbykge1xyXG4gICAgICAgICAgICBpZiAoY2hhbm5lbEluZm8ucGF0aCA9PT0gJ3dlaWdodHMnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0dMVEZMb2FkZXIgbm90IHN1cHBvcnQgbW9ycGggdGFyZ2V0cyB5ZXQuJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBnZXRDaGFubmVsSGFzaChjaGFubmVsSW5mbywgYW5pbWF0aW9uSW5mbykge1xyXG4gICAgICAgICAgICByZXR1cm4gY2hhbm5lbEluZm8udGFyZ2V0Lm5vZGUgKyAnXycgKyBhbmltYXRpb25JbmZvLnNhbXBsZXJzW2NoYW5uZWxJbmZvLnNhbXBsZXJdLmlucHV0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRpbWVBY2Nlc3Nvck11bHRpcGxpZWQgPSB7fTtcclxuICAgICAgICB1dGlsLmVhY2goanNvbi5hbmltYXRpb25zLCBmdW5jdGlvbiAoYW5pbWF0aW9uSW5mbywgaWR4KSB7XHJcbiAgICAgICAgICAgIHZhciBjaGFubmVscyA9IGFuaW1hdGlvbkluZm8uY2hhbm5lbHMuZmlsdGVyKGNoZWNrQ2hhbm5lbFBhdGgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjaGFubmVscy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdHJhY2tzID0ge307XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbm5lbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjaGFubmVsSW5mbyA9IGNoYW5uZWxzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNoYW5uZWxIYXNoID0gZ2V0Q2hhbm5lbEhhc2goY2hhbm5lbEluZm8sIGFuaW1hdGlvbkluZm8pO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciB0YXJnZXROb2RlID0gbGliLm5vZGVzW2NoYW5uZWxJbmZvLnRhcmdldC5ub2RlXTtcclxuICAgICAgICAgICAgICAgIHZhciB0cmFjayA9IHRyYWNrc1tjaGFubmVsSGFzaF07XHJcbiAgICAgICAgICAgICAgICB2YXIgc2FtcGxlckluZm8gPSBhbmltYXRpb25JbmZvLnNhbXBsZXJzW2NoYW5uZWxJbmZvLnNhbXBsZXJdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghdHJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICB0cmFjayA9IHRyYWNrc1tjaGFubmVsSGFzaF0gPSBuZXcgU2FtcGxlclRyYWNrKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGFyZ2V0Tm9kZSA/IHRhcmdldE5vZGUubmFtZSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldE5vZGVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFjay50YXJnZXROb2RlSW5kZXggPSBjaGFubmVsSW5mby50YXJnZXQubm9kZTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFjay5jaGFubmVscy50aW1lID0gZ2V0QWNjZXNzb3JEYXRhKGpzb24sIGxpYiwgc2FtcGxlckluZm8uaW5wdXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBmcmFtZUxlbiA9IHRyYWNrLmNoYW5uZWxzLnRpbWUubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGltZUFjY2Vzc29yTXVsdGlwbGllZFtzYW1wbGVySW5mby5pbnB1dF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBmcmFtZUxlbjsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5jaGFubmVscy50aW1lW2tdICo9IDEwMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZUFjY2Vzc29yTXVsdGlwbGllZFtzYW1wbGVySW5mby5pbnB1dF0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZXJwb2xhdGlvbiA9IHNhbXBsZXJJbmZvLmludGVycG9sYXRpb24gfHwgJ0xJTkVBUic7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbiAhPT0gJ0xJTkVBUicpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0dMVEZMb2FkZXIgb25seSBzdXBwb3J0IExJTkVBUiBpbnRlcnBvbGF0aW9uLicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBwYXRoID0gY2hhbm5lbEluZm8udGFyZ2V0LnBhdGg7XHJcbiAgICAgICAgICAgICAgICBpZiAocGF0aCA9PT0gJ3RyYW5zbGF0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGggPSAncG9zaXRpb24nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRyYWNrLmNoYW5uZWxzW3BhdGhdID0gZ2V0QWNjZXNzb3JEYXRhKGpzb24sIGxpYiwgc2FtcGxlckluZm8ub3V0cHV0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdHJhY2tzTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBoYXNoIGluIHRyYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdHJhY2tzTGlzdC5wdXNoKHRyYWNrc1toYXNoXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNsaXAgPSBuZXcgVHJhY2tDbGlwKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGFuaW1hdGlvbkluZm8ubmFtZSxcclxuICAgICAgICAgICAgICAgIGxvb3A6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB0cmFja3M6IHRyYWNrc0xpc3RcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxpYi5jbGlwcy5wdXNoKGNsaXApO1xyXG4gICAgICAgIH0sIHRoaXMpO1xyXG5cclxuXHJcbiAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgIHZhciBtYXhMaWZlID0gbGliLmNsaXBzLnJlZHVjZShmdW5jdGlvbiAobWF4VGltZSwgY2xpcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgobWF4VGltZSwgY2xpcC5saWZlKTtcclxuICAgICAgICB9LCAwKTtcclxuICAgICAgICBsaWIuY2xpcHMuZm9yRWFjaChmdW5jdGlvbiAoY2xpcCkge1xyXG4gICAgICAgICAgICBjbGlwLmxpZmUgPSBtYXhMaWZlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gbGliLmNsaXBzO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbkdMVEZMb2FkZXIuZ2VuZXJhdGVNZXNoTmFtZSA9IGZ1bmN0aW9uIChtZXNoZXMsIGlkeCwgcHJpbWl0aXZlSWR4KSB7XHJcbiAgICB2YXIgbWVzaEluZm8gPSBtZXNoZXNbaWR4XTtcclxuICAgIHZhciBtZXNoTmFtZSA9IG1lc2hJbmZvLm5hbWUgfHwgKCdtZXNoXycgKyBpZHgpO1xyXG4gICAgcmV0dXJuIHByaW1pdGl2ZUlkeCA9PT0gMCA/IG1lc2hOYW1lIDogKG1lc2hOYW1lICsgJyQnICsgcHJpbWl0aXZlSWR4KTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdMVEZMb2FkZXI7XHJcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuRGlyZWN0aW9uYWxcclxuICogQGV4dGVuZHMgY2xheS5MaWdodFxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgdmFyIGxpZ2h0ID0gbmV3IGNsYXkubGlnaHQuRGlyZWN0aW9uYWwoe1xyXG4gKiAgICAgICAgIGludGVuc2l0eTogMC41LFxyXG4gKiAgICAgICAgIGNvbG9yOiBbMS4wLCAwLjAsIDAuMF1cclxuICogICAgIH0pO1xyXG4gKiAgICAgbGlnaHQucG9zaXRpb24uc2V0KDEwLCAxMCwgMTApO1xyXG4gKiAgICAgbGlnaHQubG9va0F0KGNsYXkuVmVjdG9yMy5aRVJPKTtcclxuICogICAgIHNjZW5lLmFkZChsaWdodCk7XHJcbiAqL1xyXG52YXIgRGlyZWN0aW9uYWxMaWdodCA9IExpZ2h0LmV4dGVuZCgvKiogQGxlbmRzIGNsYXkubGlnaHQuRGlyZWN0aW9uYWwjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2hhZG93QmlhczogMC4wMDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNoYWRvd1Nsb3BlU2NhbGU6IDIuMCxcclxuICAgIC8qKlxyXG4gICAgICogU2hhZG93IGNhc2NhZGUuXHJcbiAgICAgKiBVc2UgUFNTTSB0ZWNobmlxdWUgd2hlbiBpdCBpcyBsYXJnZXIgdGhhbiAxIGFuZCBoYXZlIGEgdW5pcXVlIGRpcmVjdGlvbmFsIGxpZ2h0IGluIHNjZW5lLlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2hhZG93Q2FzY2FkZTogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEF2YWlsYWJsZSB3aGVuIHNoYWRvd0Nhc2NhZGUgaXMgbGFyZ2VyIHRoYW4gMSBhbmQgaGF2ZSBhIHVuaXF1ZSBkaXJlY3Rpb25hbCBsaWdodCBpbiBzY2VuZS5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNhc2NhZGVTcGxpdExvZ0ZhY3RvcjogMC4yXHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnRElSRUNUSU9OQUxfTElHSFQnLFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBkaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9uOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLl9fZGlyID0gaW5zdGFuY2UuX19kaXIgfHwgbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICAgICAgICAgIC8vIERpcmVjdGlvbiBpcyB0YXJnZXQgdG8gZXllXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuX19kaXIuY29weShpbnN0YW5jZS53b3JsZFRyYW5zZm9ybS56KS5ub3JtYWxpemUoKS5uZWdhdGUoKS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGlyZWN0aW9uYWxMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0gKiBpbnRlbnNpdHksIGNvbG9yWzFdICogaW50ZW5zaXR5LCBjb2xvclsyXSAqIGludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuRGlyZWN0aW9uYWwucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0ID0gTGlnaHQucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICAgICAgbGlnaHQuc2hhZG93QmlhcyA9IHRoaXMuc2hhZG93QmlhcztcclxuICAgICAgICBsaWdodC5zaGFkb3dTbG9wZVNjYWxlID0gdGhpcy5zaGFkb3dTbG9wZVNjYWxlO1xyXG4gICAgICAgIHJldHVybiBsaWdodDtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEaXJlY3Rpb25hbExpZ2h0O1xyXG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LlBvaW50XHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICovXHJcbnZhciBQb2ludExpZ2h0ID0gTGlnaHQuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5saWdodC5Qb2ludCMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYW5nZTogMTAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY2FzdFNoYWRvdzogZmFsc2VcclxufSwge1xyXG5cclxuICAgIHR5cGU6ICdQT0lOVF9MSUdIVCcsXHJcblxyXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xyXG4gICAgICAgIHBvaW50TGlnaHRQb3NpdGlvbjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvaW50TGlnaHRSYW5nZToge1xyXG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5yYW5nZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcG9pbnRMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSAqIGludGVuc2l0eSwgY29sb3JbMV0gKiBpbnRlbnNpdHksIGNvbG9yWzJdICogaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkubGlnaHQuUG9pbnR9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5Qb2ludC5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBsaWdodCA9IExpZ2h0LnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGxpZ2h0LnJhbmdlID0gdGhpcy5yYW5nZTtcclxuICAgICAgICByZXR1cm4gbGlnaHQ7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUG9pbnRMaWdodDtcclxuIiwiaW1wb3J0IExpZ2h0IGZyb20gJy4uL0xpZ2h0JztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5saWdodC5TcG90XHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICovXHJcbnZhciBTcG90TGlnaHQgPSBMaWdodC5leHRlbmQoLyoqQGxlbmRzIGNsYXkubGlnaHQuU3BvdCAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJhbmdlOiAyMCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdW1icmFBbmdsZTogMzAsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHBlbnVtYnJhQW5nbGU6IDQ1LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBmYWxsb2ZmRmFjdG9yOiAyLjAsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNoYWRvd0JpYXM6IDAuMDAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzaGFkb3dTbG9wZVNjYWxlOiAyLjBcclxufSwge1xyXG5cclxuICAgIHR5cGU6ICdTUE9UX0xJR0hUJyxcclxuXHJcbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XHJcbiAgICAgICAgc3BvdExpZ2h0UG9zaXRpb246IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BvdExpZ2h0UmFuZ2U6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJhbmdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmNvcyhpbnN0YW5jZS51bWJyYUFuZ2xlICogTWF0aC5QSSAvIDE4MCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmU6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguY29zKGluc3RhbmNlLnBlbnVtYnJhQW5nbGUgKiBNYXRoLlBJIC8gMTgwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BvdExpZ2h0RmFsbG9mZkZhY3Rvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZmFsbG9mZkZhY3RvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BvdExpZ2h0RGlyZWN0aW9uOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLl9fZGlyID0gaW5zdGFuY2UuX19kaXIgfHwgbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICAgICAgICAgIC8vIERpcmVjdGlvbiBpcyB0YXJnZXQgdG8gZXllXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuX19kaXIuY29weShpbnN0YW5jZS53b3JsZFRyYW5zZm9ybS56KS5uZWdhdGUoKS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BvdExpZ2h0Q29sb3I6IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSAqIGludGVuc2l0eSwgY29sb3JbMV0gKiBpbnRlbnNpdHksIGNvbG9yWzJdICogaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkubGlnaHQuU3BvdH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LlNwb3QucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0ID0gTGlnaHQucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICAgICAgbGlnaHQucmFuZ2UgPSB0aGlzLnJhbmdlO1xyXG4gICAgICAgIGxpZ2h0LnVtYnJhQW5nbGUgPSB0aGlzLnVtYnJhQW5nbGU7XHJcbiAgICAgICAgbGlnaHQucGVudW1icmFBbmdsZSA9IHRoaXMucGVudW1icmFBbmdsZTtcclxuICAgICAgICBsaWdodC5mYWxsb2ZmRmFjdG9yID0gdGhpcy5mYWxsb2ZmRmFjdG9yO1xyXG4gICAgICAgIGxpZ2h0LnNoYWRvd0JpYXMgPSB0aGlzLnNoYWRvd0JpYXM7XHJcbiAgICAgICAgbGlnaHQuc2hhZG93U2xvcGVTY2FsZSA9IHRoaXMuc2hhZG93U2xvcGVTY2FsZTtcclxuICAgICAgICByZXR1cm4gbGlnaHQ7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BvdExpZ2h0O1xyXG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkFtYmllbnRcclxuICogQGV4dGVuZHMgY2xheS5MaWdodFxyXG4gKi9cclxudmFyIEFtYmllbnRMaWdodCA9IExpZ2h0LmV4dGVuZCh7XHJcblxyXG4gICAgY2FzdFNoYWRvdzogZmFsc2VcclxuXHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnQU1CSUVOVF9MSUdIVCcsXHJcblxyXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xyXG4gICAgICAgIGFtYmllbnRMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSppbnRlbnNpdHksIGNvbG9yWzFdKmludGVuc2l0eSwgY29sb3JbMl0qaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAbmFtZSBjbG9uZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5BbWJpZW50fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuQW1iaWVudC5wcm90b3R5cGVcclxuICAgICAqL1xyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFtYmllbnRMaWdodDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi9UZXh0dXJlQ3ViZSc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCBDYWNoZSBmcm9tICcuL2NvcmUvQ2FjaGUnO1xyXG5cclxudmFyIEtFWV9GUkFNRUJVRkZFUiA9ICdmcmFtZWJ1ZmZlcic7XHJcbnZhciBLRVlfUkVOREVSQlVGRkVSID0gJ3JlbmRlcmJ1ZmZlcic7XHJcbnZhciBLRVlfUkVOREVSQlVGRkVSX1dJRFRIID0gS0VZX1JFTkRFUkJVRkZFUiArICdfd2lkdGgnO1xyXG52YXIgS0VZX1JFTkRFUkJVRkZFUl9IRUlHSFQgPSBLRVlfUkVOREVSQlVGRkVSICsgJ19oZWlnaHQnO1xyXG52YXIgS0VZX1JFTkRFUkJVRkZFUl9BVFRBQ0hFRCA9IEtFWV9SRU5ERVJCVUZGRVIgKyAnX2F0dGFjaGVkJztcclxudmFyIEtFWV9ERVBUSFRFWFRVUkVfQVRUQUNIRUQgPSAnZGVwdGh0ZXh0dXJlX2F0dGFjaGVkJztcclxuXHJcbnZhciBHTF9GUkFNRUJVRkZFUiA9IGdsZW51bS5GUkFNRUJVRkZFUjtcclxudmFyIEdMX1JFTkRFUkJVRkZFUiA9IGdsZW51bS5SRU5ERVJCVUZGRVI7XHJcbnZhciBHTF9ERVBUSF9BVFRBQ0hNRU5UID0gZ2xlbnVtLkRFUFRIX0FUVEFDSE1FTlQ7XHJcbnZhciBHTF9DT0xPUl9BVFRBQ0hNRU5UMCA9IGdsZW51bS5DT0xPUl9BVFRBQ0hNRU5UMDtcclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LkZyYW1lQnVmZmVyXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgRnJhbWVCdWZmZXIgPSBCYXNlLmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5LkZyYW1lQnVmZmVyIyAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIElmIHVzZSBkZXB0aCBidWZmZXJcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBkZXB0aEJ1ZmZlcjogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgKi9cclxuICAgIHZpZXdwb3J0OiBudWxsLFxyXG5cclxuICAgIF93aWR0aDogMCxcclxuICAgIF9oZWlnaHQ6IDAsXHJcblxyXG4gICAgX3RleHR1cmVzOiBudWxsLFxyXG5cclxuICAgIF9ib3VuZFJlbmRlcmVyOiBudWxsLFxyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBVc2UgY2FjaGVcclxuICAgIHRoaXMuX2NhY2hlID0gbmV3IENhY2hlKCk7XHJcblxyXG4gICAgdGhpcy5fdGV4dHVyZXMgPSB7fTtcclxufSxcclxuXHJcbi8qKkBsZW5kcyBjbGF5LkZyYW1lQnVmZmVyLnByb3RvdHlwZS4gKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYXR0YWNoZWQgdGV4dHVyZSB3aWR0aFxyXG4gICAgICoge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgLy8gRklYTUUgQ2FuJ3QgdXNlIGJlZm9yZSAjYmluZFxyXG4gICAgZ2V0VGV4dHVyZVdpZHRoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhdHRhY2hlZCB0ZXh0dXJlIGhlaWdodFxyXG4gICAgICoge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0VGV4dHVyZUhlaWdodDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmluZCB0aGUgZnJhbWVidWZmZXIgdG8gZ2l2ZW4gcmVuZGVyZXIgYmVmb3JlIHJlbmRlcmluZ1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcblxyXG4gICAgICAgIGlmIChyZW5kZXJlci5fX2N1cnJlbnRGcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgICAgICAvLyBBbHJlYWR5IGJvdW5kXHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJlci5fX2N1cnJlbnRGcmFtZUJ1ZmZlciA9PT0gdGhpcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JlbmRlcmVyIGFscmVhZHkgYm91bmQgd2l0aCBhbm90aGVyIGZyYW1lYnVmZmVyLiBVbmJpbmQgaXQgZmlyc3QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyZXIuX19jdXJyZW50RnJhbWVCdWZmZXIgPSB0aGlzO1xyXG5cclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIF9nbC5iaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIHRoaXMuX2dldEZyYW1lQnVmZmVyR0wocmVuZGVyZXIpKTtcclxuICAgICAgICB0aGlzLl9ib3VuZFJlbmRlcmVyID0gcmVuZGVyZXI7XHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcblxyXG4gICAgICAgIGNhY2hlLnB1dCgndmlld3BvcnQnLCByZW5kZXJlci52aWV3cG9ydCk7XHJcblxyXG4gICAgICAgIHZhciBoYXNUZXh0dXJlQXR0YWNoZWQgPSBmYWxzZTtcclxuICAgICAgICB2YXIgd2lkdGg7XHJcbiAgICAgICAgdmFyIGhlaWdodDtcclxuICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMuX3RleHR1cmVzKSB7XHJcbiAgICAgICAgICAgIGhhc1RleHR1cmVBdHRhY2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XTtcclxuICAgICAgICAgICAgaWYgKG9iaikge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBEbyB3aWR0aCwgaGVpZ2h0IGNoZWNraW5nLCBtYWtlIHN1cmUgc2l6ZSBhcmUgc2FtZVxyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBvYmoudGV4dHVyZS53aWR0aDtcclxuICAgICAgICAgICAgICAgIGhlaWdodCA9IG9iai50ZXh0dXJlLmhlaWdodDtcclxuICAgICAgICAgICAgICAgIC8vIEF0dGFjaCB0ZXh0dXJlc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZG9BdHRhY2gocmVuZGVyZXIsIG9iai50ZXh0dXJlLCBhdHRhY2htZW50LCBvYmoudGFyZ2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fd2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmICghaGFzVGV4dHVyZUF0dGFjaGVkICYmIHRoaXMuZGVwdGhCdWZmZXIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignTXVzdCBhdHRhY2ggdGV4dHVyZSBiZWZvcmUgYmluZCwgb3IgcmVuZGVyYnVmZmVyIG1heSBoYXZlIGluY29ycmVjdCB3aWR0aCBhbmQgaGVpZ2h0LicpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy52aWV3cG9ydCkge1xyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCh0aGlzLnZpZXdwb3J0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQsIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXMgPSBjYWNoZS5nZXQoJ2F0dGFjaGVkX3RleHR1cmVzJyk7XHJcbiAgICAgICAgaWYgKGF0dGFjaGVkVGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiBhdHRhY2hlZFRleHR1cmVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG9EZXRhY2goX2dsLCBhdHRhY2htZW50LCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY2FjaGUuZ2V0KEtFWV9ERVBUSFRFWFRVUkVfQVRUQUNIRUQpICYmIHRoaXMuZGVwdGhCdWZmZXIpIHtcclxuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHJlbmRlciBidWZmZXJcclxuICAgICAgICAgICAgaWYgKGNhY2hlLm1pc3MoS0VZX1JFTkRFUkJVRkZFUikpIHtcclxuICAgICAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSLCBfZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJidWZmZXIgPSBjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUik7XHJcblxyXG4gICAgICAgICAgICBpZiAod2lkdGggIT09IGNhY2hlLmdldChLRVlfUkVOREVSQlVGRkVSX1dJRFRIKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IGhlaWdodCAhPT0gY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVJfSEVJR0hUKSkge1xyXG4gICAgICAgICAgICAgICAgX2dsLmJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgX2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBfZ2wuREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgY2FjaGUucHV0KEtFWV9SRU5ERVJCVUZGRVJfV0lEVEgsIHdpZHRoKTtcclxuICAgICAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSX0hFSUdIVCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgIF9nbC5iaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUl9BVFRBQ0hFRCkpIHtcclxuICAgICAgICAgICAgICAgIF9nbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgY2FjaGUucHV0KEtFWV9SRU5ERVJCVUZGRVJfQVRUQUNIRUQsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVuYmluZCB0aGUgZnJhbWUgYnVmZmVyIGFmdGVyIHJlbmRlcmluZ1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICAvLyBSZW1vdmUgc3RhdHVzIHJlY29yZCBvbiByZW5kZXJlclxyXG4gICAgICAgIHJlbmRlcmVyLl9fY3VycmVudEZyYW1lQnVmZmVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICBfZ2wuYmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBudWxsKTtcclxuICAgICAgICB0aGlzLl9ib3VuZFJlbmRlcmVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5fY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IHRoaXMuX2NhY2hlLmdldCgndmlld3BvcnQnKTtcclxuICAgICAgICAvLyBSZXNldCB2aWV3cG9ydDtcclxuICAgICAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodmlld3BvcnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVNaXBtYXAocmVuZGVyZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBCZWNhdXNlIHRoZSBkYXRhIG9mIHRleHR1cmUgaXMgY2hhbmdlZCBvdmVyIHRpbWUsXHJcbiAgICAvLyBIZXJlIHVwZGF0ZSB0aGUgbWlwbWFwcyBvZiB0ZXh0dXJlIGVhY2ggdGltZSBhZnRlciByZW5kZXJlZDtcclxuICAgIHVwZGF0ZU1pcG1hcDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gdGhpcy5fdGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgdmFyIG9iaiA9IHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgICAgICBpZiAob2JqKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IG9iai50ZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgLy8gRklYTUUgc29tZSB0ZXh0dXJlIGZvcm1hdCBjYW4ndCBnZW5lcmF0ZSBtaXBtYXBcclxuICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS5OUE9UICYmIHRleHR1cmUudXNlTWlwbWFwXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgdGV4dHVyZS5taW5GaWx0ZXIgPT09IFRleHR1cmUuTElORUFSX01JUE1BUF9MSU5FQVIpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGV4dHVyZS50ZXh0dXJlVHlwZSA9PT0gJ3RleHR1cmVDdWJlJyA/IGdsZW51bS5URVhUVVJFX0NVQkVfTUFQIDogZ2xlbnVtLlRFWFRVUkVfMkQ7XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZS5nZXRXZWJHTFRleHR1cmUocmVuZGVyZXIpKTtcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuZ2VuZXJhdGVNaXBtYXAodGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuYmluZFRleHR1cmUodGFyZ2V0LCBudWxsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG5cclxuICAgIC8vIDB4OENENSwgMzYwNTMsIEZSQU1FQlVGRkVSX0NPTVBMRVRFXHJcbiAgICAvLyAweDhDRDYsIDM2MDU0LCBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlRcclxuICAgIC8vIDB4OENENywgMzYwNTUsIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UXHJcbiAgICAvLyAweDhDRDksIDM2MDU3LCBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlNcclxuICAgIC8vIDB4OENERCwgMzYwNjEsIEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEXHJcbiAgICBjaGVja1N0YXR1czogZnVuY3Rpb24gKF9nbCkge1xyXG4gICAgICAgIHJldHVybiBfZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTF9GUkFNRUJVRkZFUik7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXRGcmFtZUJ1ZmZlckdMOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcblxyXG4gICAgICAgIGlmIChjYWNoZS5taXNzKEtFWV9GUkFNRUJVRkZFUikpIHtcclxuICAgICAgICAgICAgY2FjaGUucHV0KEtFWV9GUkFNRUJVRkZFUiwgcmVuZGVyZXIuZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KEtFWV9GUkFNRUJVRkZFUik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXR0YWNoIGEgdGV4dHVyZShSVFQpIHRvIHRoZSBmcmFtZWJ1ZmZlclxyXG4gICAgICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSB0ZXh0dXJlXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFthdHRhY2htZW50PWdsLkNPTE9SX0FUVEFDSE1FTlQwXVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbdGFyZ2V0PWdsLlRFWFRVUkVfMkRdXHJcbiAgICAgKi9cclxuICAgIGF0dGFjaDogZnVuY3Rpb24gKHRleHR1cmUsIGF0dGFjaG1lbnQsIHRhcmdldCkge1xyXG5cclxuICAgICAgICBpZiAoIXRleHR1cmUud2lkdGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdGV4dHVyZSBhdHRhY2hlZCB0byBjb2xvciBidWZmZXIgaXMgbm90IGEgdmFsaWQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE8gd2lkdGggYW5kIGhlaWdodCBjaGVja1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgZGVwdGhfdGV4dHVyZSBleHRlbnNpb24gaXMgZW5hYmxlZCwgZGV2ZWxvcGVyc1xyXG4gICAgICAgIC8vIENhbiBhdHRhY2ggYSBkZXB0aCB0ZXh0dXJlIHRvIHRoZSBkZXB0aCBidWZmZXJcclxuICAgICAgICAvLyBodHRwOi8vYmxvZy50b2ppY29kZS5jb20vMjAxMi8wNy91c2luZy13ZWJnbGRlcHRodGV4dHVyZS5odG1sXHJcbiAgICAgICAgYXR0YWNobWVudCA9IGF0dGFjaG1lbnQgfHwgR0xfQ09MT1JfQVRUQUNITUVOVDA7XHJcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0IHx8IGdsZW51bS5URVhUVVJFXzJEO1xyXG5cclxuICAgICAgICB2YXIgYm91bmRSZW5kZXJlciA9IHRoaXMuX2JvdW5kUmVuZGVyZXI7XHJcbiAgICAgICAgdmFyIF9nbCA9IGJvdW5kUmVuZGVyZXIgJiYgYm91bmRSZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgYXR0YWNoZWRUZXh0dXJlcztcclxuXHJcbiAgICAgICAgaWYgKF9nbCkge1xyXG4gICAgICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICAgICAgY2FjaGUudXNlKGJvdW5kUmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICAgICAgICAgIGF0dGFjaGVkVGV4dHVyZXMgPSBjYWNoZS5nZXQoJ2F0dGFjaGVkX3RleHR1cmVzJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDaGVjayBpZiB0ZXh0dXJlIGF0dGFjaGVkXHJcbiAgICAgICAgdmFyIHByZXZpb3VzID0gdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF07XHJcbiAgICAgICAgaWYgKHByZXZpb3VzICYmIHByZXZpb3VzLnRhcmdldCA9PT0gdGFyZ2V0XHJcbiAgICAgICAgICAgICYmIHByZXZpb3VzLnRleHR1cmUgPT09IHRleHR1cmVcclxuICAgICAgICAgICAgJiYgKGF0dGFjaGVkVGV4dHVyZXMgJiYgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSAhPSBudWxsKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2FuQXR0YWNoID0gdHJ1ZTtcclxuICAgICAgICBpZiAoYm91bmRSZW5kZXJlcikge1xyXG4gICAgICAgICAgICBjYW5BdHRhY2ggPSB0aGlzLl9kb0F0dGFjaChib3VuZFJlbmRlcmVyLCB0ZXh0dXJlLCBhdHRhY2htZW50LCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAvLyBTZXQgdmlld3BvcnQgYWdhaW4gaW5jYXNlIGF0dGFjaGVkIHRvIGRpZmZlcmVudCBzaXplIHRleHR1cmVzLlxyXG4gICAgICAgICAgICBpZiAoIXRoaXMudmlld3BvcnQpIHtcclxuICAgICAgICAgICAgICAgIGJvdW5kUmVuZGVyZXIuc2V0Vmlld3BvcnQoMCwgMCwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2FuQXR0YWNoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdID0gdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF0gfHwge307XHJcbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdLnRleHR1cmUgPSB0ZXh0dXJlO1xyXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XS50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfZG9BdHRhY2g6IGZ1bmN0aW9uIChyZW5kZXJlciwgdGV4dHVyZSwgYXR0YWNobWVudCwgdGFyZ2V0KSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0ZXh0dXJlIGlzIGFsd2F5cyB1cGRhdGVkXHJcbiAgICAgICAgLy8gQmVjYXVzZSB0ZXh0dXJlIHdpZHRoIG9yIGhlaWdodCBtYXkgYmUgY2hhbmdlZCBhbmQgaW4gdGhpcyB3ZSBjYW4ndCBiZSBub3RpZmllZFxyXG4gICAgICAgIC8vIEZJWE1FIGF3a3dhcmQ7XHJcbiAgICAgICAgdmFyIHdlYmdsVGV4dHVyZSA9IHRleHR1cmUuZ2V0V2ViR0xUZXh0dXJlKHJlbmRlcmVyKTtcclxuICAgICAgICAvLyBBc3N1bWUgY2FjaGUgaGFzIGJlZW4gdXNlZC5cclxuICAgICAgICB2YXIgYXR0YWNoZWRUZXh0dXJlcyA9IHRoaXMuX2NhY2hlLmdldCgnYXR0YWNoZWRfdGV4dHVyZXMnKTtcclxuICAgICAgICBpZiAoYXR0YWNoZWRUZXh0dXJlcyAmJiBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdKSB7XHJcbiAgICAgICAgICAgIHZhciBvYmogPSBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0ZXh0dXJlIGFuZCB0YXJnZXQgbm90IGNoYW5nZWRcclxuICAgICAgICAgICAgaWYgKG9iai50ZXh0dXJlID09PSB0ZXh0dXJlICYmIG9iai50YXJnZXQgPT09IHRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF0dGFjaG1lbnQgPSArYXR0YWNobWVudDtcclxuXHJcbiAgICAgICAgdmFyIGNhbkF0dGFjaCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGF0dGFjaG1lbnQgPT09IEdMX0RFUFRIX0FUVEFDSE1FTlQgfHwgYXR0YWNobWVudCA9PT0gZ2xlbnVtLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkge1xyXG4gICAgICAgICAgICB2YXIgZXh0ZW5zaW9uID0gcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oJ1dFQkdMX2RlcHRoX3RleHR1cmUnKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghZXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdEZXB0aCB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXInKTtcclxuICAgICAgICAgICAgICAgIGNhbkF0dGFjaCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlLmZvcm1hdCAhPT0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVFxyXG4gICAgICAgICAgICAgICAgJiYgdGV4dHVyZS5mb3JtYXQgIT09IGdsZW51bS5ERVBUSF9TVEVOQ0lMXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVGhlIHRleHR1cmUgYXR0YWNoZWQgdG8gZGVwdGggYnVmZmVyIGlzIG5vdCBhIHZhbGlkLicpO1xyXG4gICAgICAgICAgICAgICAgY2FuQXR0YWNoID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIERpc3Bvc2UgcmVuZGVyIGJ1ZmZlciBjcmVhdGVkIHByZXZpb3VzXHJcbiAgICAgICAgICAgIGlmIChjYW5BdHRhY2gpIHtcclxuICAgICAgICAgICAgICAgIHZhciByZW5kZXJidWZmZXIgPSB0aGlzLl9jYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUik7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9ERVBUSF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9nbC5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUiwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSX0FUVEFDSEVELCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5wdXQoS0VZX0RFUFRIVEVYVFVSRV9BVFRBQ0hFRCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1pcG1hcCBsZXZlbCBjYW4gb25seSBiZSAwXHJcbiAgICAgICAgX2dsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBhdHRhY2htZW50LCB0YXJnZXQsIHdlYmdsVGV4dHVyZSwgMCk7XHJcblxyXG4gICAgICAgIGlmICghYXR0YWNoZWRUZXh0dXJlcykge1xyXG4gICAgICAgICAgICBhdHRhY2hlZFRleHR1cmVzID0ge307XHJcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlLnB1dCgnYXR0YWNoZWRfdGV4dHVyZXMnLCBhdHRhY2hlZFRleHR1cmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSA9IGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0gfHwge307XHJcbiAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XS50ZXh0dXJlID0gdGV4dHVyZTtcclxuICAgICAgICBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdLnRhcmdldCA9IHRhcmdldDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNhbkF0dGFjaDtcclxuICAgIH0sXHJcblxyXG4gICAgX2RvRGV0YWNoOiBmdW5jdGlvbiAoX2dsLCBhdHRhY2htZW50LCB0YXJnZXQpIHtcclxuICAgICAgICAvLyBEZXRhY2ggYSB0ZXh0dXJlIGZyb20gZnJhbWVidWZmZXJcclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL1dlYkdML2Jsb2IvbWFzdGVyL2NvbmZvcm1hbmNlLXN1aXRlcy8xLjAuMC9jb25mb3JtYW5jZS9mcmFtZWJ1ZmZlci10ZXN0Lmh0bWwjTDE0NVxyXG4gICAgICAgIF9nbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgYXR0YWNobWVudCwgdGFyZ2V0LCBudWxsLCAwKTtcclxuXHJcbiAgICAgICAgLy8gQXNzdW1lIGNhY2hlIGhhcyBiZWVuIHVzZWQuXHJcbiAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXMgPSB0aGlzLl9jYWNoZS5nZXQoJ2F0dGFjaGVkX3RleHR1cmVzJyk7XHJcbiAgICAgICAgaWYgKGF0dGFjaGVkVGV4dHVyZXMgJiYgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSkge1xyXG4gICAgICAgICAgICBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhdHRhY2htZW50ID09PSBHTF9ERVBUSF9BVFRBQ0hNRU5UIHx8IGF0dGFjaG1lbnQgPT09IGdsZW51bS5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FjaGUucHV0KEtFWV9ERVBUSFRFWFRVUkVfQVRUQUNIRUQsIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0YWNoIGEgdGV4dHVyZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbYXR0YWNobWVudD1nbC5DT0xPUl9BVFRBQ0hNRU5UMF1cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW3RhcmdldD1nbC5URVhUVVJFXzJEXVxyXG4gICAgICovXHJcbiAgICBkZXRhY2g6IGZ1bmN0aW9uIChhdHRhY2htZW50LCB0YXJnZXQpIHtcclxuICAgICAgICAvLyBUT0RPIGRlcHRoIGV4dGVuc2lvbiBjaGVjayA/XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF0gPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLl9ib3VuZFJlbmRlcmVyKSB7XHJcbiAgICAgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG4gICAgICAgICAgICBjYWNoZS51c2UodGhpcy5fYm91bmRSZW5kZXJlci5fX3VpZF9fKTtcclxuICAgICAgICAgICAgdGhpcy5fZG9EZXRhY2godGhpcy5fYm91bmRSZW5kZXJlci5nbCwgYXR0YWNobWVudCwgdGFyZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlXHJcbiAgICAgKiBAcGFyYW0gIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IF9nbFxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG5cclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJCdWZmZXIgPSBjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUik7XHJcbiAgICAgICAgaWYgKHJlbmRlckJ1ZmZlcikge1xyXG4gICAgICAgICAgICBfZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlckJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBmcmFtZUJ1ZmZlciA9IGNhY2hlLmdldChLRVlfRlJBTUVCVUZGRVIpO1xyXG4gICAgICAgIGlmIChmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgICAgICBfZ2wuZGVsZXRlRnJhbWVidWZmZXIoZnJhbWVCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYWNoZS5kZWxldGVDb250ZXh0KHJlbmRlcmVyLl9fdWlkX18pO1xyXG5cclxuICAgICAgICAvLyBDbGVhciBjYWNoZSBmb3IgcmV1c2luZ1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmVzID0ge307XHJcblxyXG4gICAgfVxyXG59KTtcclxuXHJcbkZyYW1lQnVmZmVyLkRFUFRIX0FUVEFDSE1FTlQgPSBHTF9ERVBUSF9BVFRBQ0hNRU5UO1xyXG5GcmFtZUJ1ZmZlci5DT0xPUl9BVFRBQ0hNRU5UMCA9IEdMX0NPTE9SX0FUVEFDSE1FTlQwO1xyXG5GcmFtZUJ1ZmZlci5TVEVOQ0lMX0FUVEFDSE1FTlQgPSBnbGVudW0uU1RFTkNJTF9BVFRBQ0hNRU5UO1xyXG5GcmFtZUJ1ZmZlci5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgPSBnbGVudW0uREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRnJhbWVCdWZmZXI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2X1RleGNvb3JkID0gdGV4Y29vcmQ7XFxuIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxufVxcbkBlbmRcIjtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IE9ydGhvQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9PcnRob2dyYXBoaWMnO1xyXG5pbXBvcnQgUGxhbmUgZnJvbSAnLi4vZ2VvbWV0cnkvUGxhbmUnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBNZXNoIGZyb20gJy4uL01lc2gnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IHZlcnRleEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3ZlcnRleC5nbHNsLmpzJztcclxuXHJcblNoYWRlclsnaW1wb3J0J10odmVydGV4R2xzbCk7XHJcblxyXG52YXIgcGxhbmVHZW8gPSBuZXcgUGxhbmUoKTtcclxudmFyIG1lc2ggPSBuZXcgTWVzaCh7XHJcbiAgICBnZW9tZXRyeTogcGxhbmVHZW8sXHJcbiAgICBmcnVzdHVtQ3VsbGluZzogZmFsc2VcclxufSk7XHJcbnZhciBjYW1lcmEgPSBuZXcgT3J0aG9DYW1lcmEoKTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLlBhc3NcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBQYXNzID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLlBhc3MjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGcmFnbWVudCBzaGFkZXIgc3RyaW5nXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBQRU5ESU5HIHNoYWRlciBvciBmcmFnbWVudCA/XHJcbiAgICAgICAgZnJhZ21lbnQ6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG91dHB1dHM6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lk1hdGVyaWFsfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1hdGVyaWFsOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBibGVuZFdpdGhQcmV2aW91czogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtCb29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNsZWFyQ29sb3I6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGVhckRlcHRoOiB0cnVlXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICB2YXIgc2hhZGVyID0gbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IudmVydGV4JyksIHRoaXMuZnJhZ21lbnQpO1xyXG4gICAgdmFyIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICBzaGFkZXI6IHNoYWRlclxyXG4gICAgfSk7XHJcbiAgICBtYXRlcmlhbC5lbmFibGVUZXh0dXJlc0FsbCgpO1xyXG5cclxuICAgIHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbDtcclxuXHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLlBhc3MucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSB7fSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBzZXRVbmlmb3JtOiBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwuc2V0VW5pZm9ybShuYW1lLCB2YWx1ZSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge31cclxuICAgICAqL1xyXG4gICAgZ2V0VW5pZm9ybTogZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICAgIHZhciB1bmlmb3JtID0gdGhpcy5tYXRlcmlhbC51bmlmb3Jtc1tuYW1lXTtcclxuICAgICAgICBpZiAodW5pZm9ybSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5pZm9ybS52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmV9IHRleHR1cmVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gYXR0YWNobWVudFxyXG4gICAgICovXHJcbiAgICBhdHRhY2hPdXRwdXQ6IGZ1bmN0aW9uKHRleHR1cmUsIGF0dGFjaG1lbnQpIHtcclxuICAgICAgICBpZiAoIXRoaXMub3V0cHV0cykge1xyXG4gICAgICAgICAgICB0aGlzLm91dHB1dHMgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXR0YWNobWVudCA9IGF0dGFjaG1lbnQgfHwgZ2xlbnVtLkNPTE9SX0FUVEFDSE1FTlQwO1xyXG4gICAgICAgIHRoaXMub3V0cHV0c1thdHRhY2htZW50XSA9IHRleHR1cmU7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmV9IHRleHR1cmVcclxuICAgICAqL1xyXG4gICAgZGV0YWNoT3V0cHV0OiBmdW5jdGlvbih0ZXh0dXJlKSB7XHJcbiAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0c1thdHRhY2htZW50XSA9PT0gdGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRzW2F0dGFjaG1lbnRdID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYmluZDogZnVuY3Rpb24ocmVuZGVyZXIsIGZyYW1lQnVmZmVyKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5vdXRwdXRzW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBmcmFtZUJ1ZmZlci5hdHRhY2godGV4dHVyZSwgYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHVuYmluZDogZnVuY3Rpb24ocmVuZGVyZXIsIGZyYW1lQnVmZmVyKSB7XHJcbiAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkZyYW1lQnVmZmVyfSBbZnJhbWVCdWZmZXJdXHJcbiAgICAgKi9cclxuICAgIHJlbmRlcjogZnVuY3Rpb24ocmVuZGVyZXIsIGZyYW1lQnVmZmVyKSB7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgaWYgKGZyYW1lQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmluZChyZW5kZXJlciwgZnJhbWVCdWZmZXIpO1xyXG4gICAgICAgICAgICAvLyBNUlQgU3VwcG9ydCBpbiBjaHJvbWVcclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc2RrL3Rlc3RzL2NvbmZvcm1hbmNlL2V4dGVuc2lvbnMvZXh0LWRyYXctYnVmZmVycy5odG1sXHJcbiAgICAgICAgICAgIHZhciBleHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX2RyYXdfYnVmZmVycycpO1xyXG4gICAgICAgICAgICBpZiAoZXh0ICYmIHRoaXMub3V0cHV0cykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ1ZnMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9ICthdHRhY2htZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50ID49IF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCAmJiBhdHRhY2htZW50IDw9IF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCArIDgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnVmcy5wdXNoKGF0dGFjaG1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGV4dC5kcmF3QnVmZmVyc0VYVChidWZzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXInLCB0aGlzLCByZW5kZXJlcik7XHJcblxyXG4gICAgICAgIC8vIEZJWE1FIERvbid0IGNsZWFyIGluIGVhY2ggcGFzcyBpbiBkZWZhdWx0LCBsZXQgdGhlIGNvbG9yIG92ZXJ3cml0ZSB0aGUgYnVmZmVyXHJcbiAgICAgICAgLy8gRklYTUUgcGl4ZWxzIG1heSBiZSBkaXNjYXJkXHJcbiAgICAgICAgdmFyIGNsZWFyQml0ID0gdGhpcy5jbGVhckRlcHRoID8gX2dsLkRFUFRIX0JVRkZFUl9CSVQgOiAwO1xyXG4gICAgICAgIF9nbC5kZXB0aE1hc2sodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJDb2xvcikge1xyXG4gICAgICAgICAgICBjbGVhckJpdCA9IGNsZWFyQml0IHwgX2dsLkNPTE9SX0JVRkZFUl9CSVQ7XHJcbiAgICAgICAgICAgIF9nbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHZhciBjYyA9IHRoaXMuY2xlYXJDb2xvcjtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2MpKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuY2xlYXJDb2xvcihjY1swXSwgY2NbMV0sIGNjWzJdLCBjY1szXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgX2dsLmNsZWFyKGNsZWFyQml0KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYmxlbmRXaXRoUHJldmlvdXMpIHtcclxuICAgICAgICAgICAgLy8gQmxlbmQgd2l0aCBwcmV2aW91cyByZW5kZXJlZCBzY2VuZSBpbiB0aGUgZmluYWwgb3V0cHV0XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIENvbmZpZ3VyZSBibGVuZC5cclxuICAgICAgICAgICAgLy8gRklYTUUgSXQgd2lsbCBjYXVzZSBzY3JlZW4gYmxpbmvvvJ9cclxuICAgICAgICAgICAgX2dsLmVuYWJsZShfZ2wuQkxFTkQpO1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIF9nbC5kaXNhYmxlKF9nbC5CTEVORCk7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudHJhbnNwYXJlbnQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyUXVhZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJyZW5kZXInLCB0aGlzLCByZW5kZXJlcik7XHJcblxyXG4gICAgICAgIGlmIChmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgICAgICB0aGlzLnVuYmluZChyZW5kZXJlciwgZnJhbWVCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaW1wbHkgZG8gcXVhZCByZW5kZXJpbmdcclxuICAgICAqL1xyXG4gICAgcmVuZGVyUXVhZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgbWVzaC5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XHJcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhbbWVzaF0sIGNhbWVyYSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7fVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBhc3M7XHJcbiIsIi8vIFRPRE8gU2hvdWxkIG5vdCBkZXJpdmVkIGZyb20gbWVzaD9cclxuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XHJcbmltcG9ydCBDdWJlR2VvbWV0cnkgZnJvbSAnLi4vZ2VvbWV0cnkvQ3ViZSc7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XHJcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tICcuLi9jYW1lcmEvUGVyc3BlY3RpdmUnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5cclxuaW1wb3J0IHNreWJveEVzc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9za3lib3guZ2xzbC5qcyc7XHJcblNoYWRlci5pbXBvcnQoc2t5Ym94RXNzbCk7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wbHVnaW4uU2t5Ym94XHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICB2YXIgc2t5VGV4ID0gbmV3IGNsYXkuVGV4dHVyZUN1YmUoKTtcclxuICogICAgIHNreVRleC5sb2FkKHtcclxuICogICAgICAgICAncHgnOiAnYXNzZXRzL3RleHR1cmVzL3NreS9weC5qcGcnLFxyXG4gKiAgICAgICAgICdueCc6ICdhc3NldHMvdGV4dHVyZXMvc2t5L254LmpwZydcclxuICogICAgICAgICAncHknOiAnYXNzZXRzL3RleHR1cmVzL3NreS9weS5qcGcnXHJcbiAqICAgICAgICAgJ255JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvbnkuanBnJ1xyXG4gKiAgICAgICAgICdweic6ICdhc3NldHMvdGV4dHVyZXMvc2t5L3B6LmpwZydcclxuICogICAgICAgICAnbnonOiAnYXNzZXRzL3RleHR1cmVzL3NreS9uei5qcGcnXHJcbiAqICAgICB9KTtcclxuICogICAgIHZhciBza3lib3ggPSBuZXcgY2xheS5wbHVnaW4uU2t5Ym94KHtcclxuICogICAgICAgICBzY2VuZTogc2NlbmVcclxuICogICAgIH0pO1xyXG4gKiAgICAgc2t5Ym94Lm1hdGVyaWFsLnNldCgnZW52aXJvbm1lbnRNYXAnLCBza3lUZXgpO1xyXG4gKi9cclxudmFyIFNreWJveCA9IE1lc2guZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgc2t5Ym94U2hhZGVyID0gbmV3IFNoYWRlcih7XHJcbiAgICAgICAgdmVydGV4OiBTaGFkZXIuc291cmNlKCdjbGF5LnNreWJveC52ZXJ0ZXgnKSxcclxuICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5za3lib3guZnJhZ21lbnQnKVxyXG4gICAgfSk7XHJcbiAgICB2YXIgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgIHNoYWRlcjogc2t5Ym94U2hhZGVyLFxyXG4gICAgICAgIGRlcHRoTWFzazogZmFsc2VcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuU2NlbmV9XHJcbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucGx1Z2luLlNreWJveC5wcm90b3R5cGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBzY2VuZTogbnVsbCxcclxuXHJcbiAgICAgICAgZ2VvbWV0cnk6IG5ldyBDdWJlR2VvbWV0cnkoKSxcclxuXHJcbiAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxyXG5cclxuICAgICAgICBlbnZpcm9ubWVudE1hcDogbnVsbCxcclxuXHJcbiAgICAgICAgY3VsbGluZzogZmFsc2UsXHJcblxyXG4gICAgICAgIF9kdW1teUNhbWVyYTogbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKClcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7XHJcbiAgICBpZiAoc2NlbmUpIHtcclxuICAgICAgICB0aGlzLmF0dGFjaFNjZW5lKHNjZW5lKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmVudmlyb25tZW50TWFwKSB7XHJcbiAgICAgICAgdGhpcy5zZXRFbnZpcm9ubWVudE1hcCh0aGlzLmVudmlyb25tZW50TWFwKTtcclxuICAgIH1cclxufSwgLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5Ta3lib3gjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogQXR0YWNoIHRoZSBza3lib3ggdG8gdGhlIHNjZW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlNjZW5lfSBzY2VuZVxyXG4gICAgICovXHJcbiAgICBhdHRhY2hTY2VuZTogZnVuY3Rpb24gKHNjZW5lKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5kZXRhY2hTY2VuZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY2VuZS5za3lib3ggPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7XHJcbiAgICAgICAgc2NlbmUub24oJ2JlZm9yZXJlbmRlcicsIHRoaXMuX2JlZm9yZVJlbmRlclNjZW5lLCB0aGlzKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERldGFjaCBmcm9tIHNjZW5lXHJcbiAgICAgKi9cclxuICAgIGRldGFjaFNjZW5lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5vZmYoJ2JlZm9yZXJlbmRlcicsIHRoaXMuX2JlZm9yZVJlbmRlclNjZW5lKTtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5za3lib3ggPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIHNreWJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5kZXRhY2hTY2VuZSgpO1xyXG4gICAgICAgIHRoaXMuZ2VvbWV0cnkuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZW52aXJvbm1lbnQgbWFwXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVGV4dHVyZUN1YmV9IGVudk1hcFxyXG4gICAgICovXHJcbiAgICBzZXRFbnZpcm9ubWVudE1hcDogZnVuY3Rpb24gKGVudk1hcCkge1xyXG4gICAgICAgIGlmIChlbnZNYXAudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlMkQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwuZGVmaW5lKCdFUVVJUkVDVEFOR1VMQVInKTtcclxuICAgICAgICAgICAgLy8gTElORUFSIGZpbHRlciBjYW4gcmVtb3ZlIHRoZSBhcnRpZmFjdHMgaW4gcG9sZVxyXG4gICAgICAgICAgICBlbnZNYXAubWluRmlsdGVyID0gVGV4dHVyZS5MSU5FQVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnVuZGVmaW5lKCdFUVVJUkVDVEFOR1VMQVInKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC5zZXQoJ2Vudmlyb25tZW50TWFwJywgZW52TWFwKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBlbnZpcm9ubWVudCBtYXBcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZUN1YmV9XHJcbiAgICAgKi9cclxuICAgIGdldEVudmlyb25tZW50TWFwOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0ZXJpYWwuZ2V0KCdlbnZpcm9ubWVudE1hcCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfYmVmb3JlUmVuZGVyU2NlbmU6IGZ1bmN0aW9uKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJTa3lib3gocmVuZGVyZXIsIGNhbWVyYSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbmRlclNreWJveDogZnVuY3Rpb24gKHJlbmRlcmVyLCBjYW1lcmEpIHtcclxuICAgICAgICB2YXIgZHVtbXlDYW1lcmEgPSB0aGlzLl9kdW1teUNhbWVyYTtcclxuICAgICAgICBkdW1teUNhbWVyYS5hc3BlY3QgPSByZW5kZXJlci5nZXRWaWV3cG9ydEFzcGVjdCgpO1xyXG4gICAgICAgIGR1bW15Q2FtZXJhLmZvdiA9IGNhbWVyYS5mb3YgfHwgNTA7XHJcbiAgICAgICAgZHVtbXlDYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KGR1bW15Q2FtZXJhLmludlByb2plY3Rpb25NYXRyaXgsIGR1bW15Q2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xyXG4gICAgICAgIGR1bW15Q2FtZXJhLndvcmxkVHJhbnNmb3JtLmNvcHkoY2FtZXJhLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICBkdW1teUNhbWVyYS52aWV3TWF0cml4LmNvcHkoY2FtZXJhLnZpZXdNYXRyaXgpO1xyXG5cclxuICAgICAgICB0aGlzLnBvc2l0aW9uLmNvcHkoY2FtZXJhLmdldFdvcmxkUG9zaXRpb24oKSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgLy8gRG9uJ3QgcmVtZW1iZXIgdG8gZGlzYWJsZSBibGVuZFxyXG4gICAgICAgIHJlbmRlcmVyLmdsLmRpc2FibGUocmVuZGVyZXIuZ2wuQkxFTkQpO1xyXG4gICAgICAgIGlmICh0aGlzLm1hdGVyaWFsLmdldCgnbG9kJykgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdMT0QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ0xPRCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKFt0aGlzXSwgZHVtbXlDYW1lcmEpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNreWJveDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcblxyXG52YXIgdGFyZ2V0cyA9IFsncHgnLCAnbngnLCAncHknLCAnbnknLCAncHonLCAnbnonXTtcclxuXHJcbi8qKlxyXG4gKiBQYXNzIHJlbmRlcmluZyBzY2VuZSB0byBhIGVudmlyb25tZW50IGN1YmUgbWFwXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXBcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICogQGV4YW1wbGVcclxuICogICAgIC8vIEV4YW1wbGUgb2YgY2FyIHJlZmxlY3Rpb25cclxuICogICAgIHZhciBlbnZNYXAgPSBuZXcgY2xheS5UZXh0dXJlQ3ViZSh7XHJcbiAqICAgICAgICAgd2lkdGg6IDI1NixcclxuICogICAgICAgICBoZWlnaHQ6IDI1NlxyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgZW52UGFzcyA9IG5ldyBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAoe1xyXG4gKiAgICAgICAgIHBvc2l0aW9uOiBjYXIucG9zaXRpb24sXHJcbiAqICAgICAgICAgdGV4dHVyZTogZW52TWFwXHJcbiAqICAgICB9KTtcclxuICogICAgIHZhciBjYXJCb2R5ID0gY2FyLmdldENoaWxkQnlOYW1lKCdib2R5Jyk7XHJcbiAqICAgICBjYXJCb2R5Lm1hdGVyaWFsLmVuYWJsZVRleHR1cmUoJ2Vudmlyb25tZW50TWFwJyk7XHJcbiAqICAgICBjYXJCb2R5Lm1hdGVyaWFsLnNldCgnZW52aXJvbm1lbnRNYXAnLCBlbnZNYXApO1xyXG4gKiAgICAgLi4uXHJcbiAqICAgICBhbmltYXRpb24ub24oJ2ZyYW1lJywgZnVuY3Rpb24oZnJhbWVUaW1lKSB7XHJcbiAqICAgICAgICAgZW52UGFzcy5yZW5kZXIocmVuZGVyZXIsIHNjZW5lKTtcclxuICogICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAqICAgICB9KTtcclxuICovXHJcbnZhciBFbnZpcm9ubWVudE1hcFBhc3MgPSBCYXNlLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHZhciByZXQgPSAvKiogQGxlbmRzIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbWVyYSBwb3NpdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCNcclxuICAgICAgICAgKi9cclxuICAgICAgICBwb3NpdGlvbjogbmV3IFZlY3RvcjMoKSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW1lcmEgZmFyIHBsYW5lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAbWVtYmVyT2YgY2xheS5wcmVQYXNzLkVudmlyb25tZW50TWFwI1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZhcjogMTAwMCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW1lcmEgbmVhciBwbGFuZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCNcclxuICAgICAgICAgKi9cclxuICAgICAgICBuZWFyOiAwLjEsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRW52aXJvbm1lbnQgY3ViZSBtYXBcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlQ3ViZX1cclxuICAgICAgICAgKiBAbWVtYmVyT2YgY2xheS5wcmVQYXNzLkVudmlyb25tZW50TWFwI1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRleHR1cmU6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFVzZWQgaWYgeW91IHdhbid0IGhhdmUgc2hhZG93IGluIGVudmlyb25tZW50IG1hcFxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LnByZVBhc3MuU2hhZG93TWFwfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNoYWRvd01hcFBhc3M6IG51bGwsXHJcbiAgICB9O1xyXG4gICAgdmFyIGNhbWVyYXMgPSByZXQuX2NhbWVyYXMgPSB7XHJcbiAgICAgICAgcHg6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXHJcbiAgICAgICAgbng6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXHJcbiAgICAgICAgcHk6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXHJcbiAgICAgICAgbnk6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXHJcbiAgICAgICAgcHo6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXHJcbiAgICAgICAgbno6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSlcclxuICAgIH07XHJcbiAgICBjYW1lcmFzLnB4Lmxvb2tBdChWZWN0b3IzLlBPU0lUSVZFX1gsIFZlY3RvcjMuTkVHQVRJVkVfWSk7XHJcbiAgICBjYW1lcmFzLm54Lmxvb2tBdChWZWN0b3IzLk5FR0FUSVZFX1gsIFZlY3RvcjMuTkVHQVRJVkVfWSk7XHJcbiAgICBjYW1lcmFzLnB5Lmxvb2tBdChWZWN0b3IzLlBPU0lUSVZFX1ksIFZlY3RvcjMuUE9TSVRJVkVfWik7XHJcbiAgICBjYW1lcmFzLm55Lmxvb2tBdChWZWN0b3IzLk5FR0FUSVZFX1ksIFZlY3RvcjMuTkVHQVRJVkVfWik7XHJcbiAgICBjYW1lcmFzLnB6Lmxvb2tBdChWZWN0b3IzLlBPU0lUSVZFX1osIFZlY3RvcjMuTkVHQVRJVkVfWSk7XHJcbiAgICBjYW1lcmFzLm56Lmxvb2tBdChWZWN0b3IzLk5FR0FUSVZFX1osIFZlY3RvcjMuTkVHQVRJVkVfWSk7XHJcblxyXG4gICAgLy8gRklYTUUgSW4gd2luZG93cywgdXNlIG9uZSBmcmFtZWJ1ZmZlciBvbmx5IHJlbmRlcnMgb25lIHNpZGUgb2YgY3ViZW1hcFxyXG4gICAgcmV0Ll9mcmFtZUJ1ZmZlciA9IG5ldyBGcmFtZUJ1ZmZlcigpO1xyXG5cclxuICAgIHJldHVybiByZXQ7XHJcbn0sICAvKiogQGxlbmRzIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHRhcmdldFxyXG4gICAgICogQHJldHVybiAge2NsYXkuQ2FtZXJhfVxyXG4gICAgICovXHJcbiAgICBnZXRDYW1lcmE6IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2FtZXJhc1t0YXJnZXRdO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuU2NlbmV9IHNjZW5lXHJcbiAgICAgKiBAcGFyYW0gIHtib29sZWFufSBbbm90VXBkYXRlU2NlbmU9ZmFsc2VdXHJcbiAgICAgKi9cclxuICAgIHJlbmRlcjogZnVuY3Rpb24ocmVuZGVyZXIsIHNjZW5lLCBub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBpZiAoIW5vdFVwZGF0ZVNjZW5lKSB7XHJcbiAgICAgICAgICAgIHNjZW5lLnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUd2VhayBmb3ZcclxuICAgICAgICAvLyBodHRwOi8vdGhlLXdpdG5lc3MubmV0L25ld3MvMjAxMi8wMi9zZWFtbGVzcy1jdWJlLW1hcC1maWx0ZXJpbmcvXHJcbiAgICAgICAgdmFyIG4gPSB0aGlzLnRleHR1cmUud2lkdGg7XHJcbiAgICAgICAgdmFyIGZvdiA9IDIgKiBNYXRoLmF0YW4obiAvIChuIC0gMC41KSkgLyBNYXRoLlBJICogMTgwO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGFyZ2V0c1tpXTtcclxuICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuX2NhbWVyYXNbdGFyZ2V0XTtcclxuICAgICAgICAgICAgVmVjdG9yMy5jb3B5KGNhbWVyYS5wb3NpdGlvbiwgdGhpcy5wb3NpdGlvbik7XHJcblxyXG4gICAgICAgICAgICBjYW1lcmEuZmFyID0gdGhpcy5mYXI7XHJcbiAgICAgICAgICAgIGNhbWVyYS5uZWFyID0gdGhpcy5uZWFyO1xyXG4gICAgICAgICAgICBjYW1lcmEuZm92ID0gZm92O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hhZG93TWFwUGFzcykge1xyXG4gICAgICAgICAgICAgICAgY2FtZXJhLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBib3VuZGluZ0JveExhc3RGcmFtZVxyXG4gICAgICAgICAgICAgICAgdmFyIGJib3ggPSBzY2VuZS5nZXRCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgICAgICAgICAgYmJveC5hcHBseVRyYW5zZm9ybShjYW1lcmEudmlld01hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICBzY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUuY29weShiYm94KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYWRvd01hcFBhc3MucmVuZGVyKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5hdHRhY2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmUsIF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCxcclxuICAgICAgICAgICAgICAgIF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBFbnZpcm9ubWVudE1hcFBhc3M7XHJcbiIsImltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XHJcblxyXG4vLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2JiOTQzOTkxKHY9dnMuODUpLmFzcHhcclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3Rvamkvd2ViZ2wtdGV4dHVyZS11dGlscy9ibG9iL21hc3Rlci90ZXh0dXJlLXV0aWwvZGRzLmpzXHJcbnZhciBERFNfTUFHSUMgPSAweDIwNTM0NDQ0O1xyXG5cclxudmFyIEREU0RfQ0FQUyA9IDB4MTtcclxudmFyIEREU0RfSEVJR0hUID0gMHgyO1xyXG52YXIgRERTRF9XSURUSCA9IDB4NDtcclxudmFyIEREU0RfUElUQ0ggPSAweDg7XHJcbnZhciBERFNEX1BJWEVMRk9STUFUID0gMHgxMDAwO1xyXG52YXIgRERTRF9NSVBNQVBDT1VOVCA9IDB4MjAwMDA7XHJcbnZhciBERFNEX0xJTkVBUlNJWkUgPSAweDgwMDAwO1xyXG52YXIgRERTRF9ERVBUSCA9IDB4ODAwMDAwO1xyXG5cclxudmFyIEREU0NBUFNfQ09NUExFWCA9IDB4ODtcclxudmFyIEREU0NBUFNfTUlQTUFQID0gMHg0MDAwMDA7XHJcbnZhciBERFNDQVBTX1RFWFRVUkUgPSAweDEwMDA7XHJcblxyXG52YXIgRERTQ0FQUzJfQ1VCRU1BUCA9IDB4MjAwO1xyXG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9QT1NJVElWRVggPSAweDQwMDtcclxudmFyIEREU0NBUFMyX0NVQkVNQVBfTkVHQVRJVkVYID0gMHg4MDA7XHJcbnZhciBERFNDQVBTMl9DVUJFTUFQX1BPU0lUSVZFWSA9IDB4MTAwMDtcclxudmFyIEREU0NBUFMyX0NVQkVNQVBfTkVHQVRJVkVZID0gMHgyMDAwO1xyXG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9QT1NJVElWRVogPSAweDQwMDA7XHJcbnZhciBERFNDQVBTMl9DVUJFTUFQX05FR0FUSVZFWiA9IDB4ODAwMDtcclxudmFyIEREU0NBUFMyX1ZPTFVNRSA9IDB4MjAwMDAwO1xyXG5cclxudmFyIEREUEZfQUxQSEFQSVhFTFMgPSAweDE7XHJcbnZhciBERFBGX0FMUEhBID0gMHgyO1xyXG52YXIgRERQRl9GT1VSQ0MgPSAweDQ7XHJcbnZhciBERFBGX1JHQiA9IDB4NDA7XHJcbnZhciBERFBGX1lVViA9IDB4MjAwO1xyXG52YXIgRERQRl9MVU1JTkFOQ0UgPSAweDIwMDAwO1xyXG5cclxuZnVuY3Rpb24gZm91ckNDVG9JbnQzMih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlLmNoYXJDb2RlQXQoMCkgK1xyXG4gICAgICAgICh2YWx1ZS5jaGFyQ29kZUF0KDEpIDw8IDgpICtcclxuICAgICAgICAodmFsdWUuY2hhckNvZGVBdCgyKSA8PCAxNikgK1xyXG4gICAgICAgICh2YWx1ZS5jaGFyQ29kZUF0KDMpIDw8IDI0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW50MzJUb0ZvdXJDQyh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoXHJcbiAgICAgICAgdmFsdWUgJiAweGZmLFxyXG4gICAgICAgICh2YWx1ZSA+PiA4KSAmIDB4ZmYsXHJcbiAgICAgICAgKHZhbHVlID4+IDE2KSAmIDB4ZmYsXHJcbiAgICAgICAgKHZhbHVlID4+IDI0KSAmIDB4ZmZcclxuICAgICk7XHJcbn1cclxuXHJcbnZhciBoZWFkZXJMZW5ndGhJbnQgPSAzMTsgLy8gVGhlIGhlYWRlciBsZW5ndGggaW4gMzIgYml0IGludHNcclxuXHJcbnZhciBGT1VSQ0NfRFhUMSA9IGZvdXJDQ1RvSW50MzIoJ0RYVDEnKTtcclxudmFyIEZPVVJDQ19EWFQzID0gZm91ckNDVG9JbnQzMignRFhUMycpO1xyXG52YXIgRk9VUkNDX0RYVDUgPSBmb3VyQ0NUb0ludDMyKCdEWFQ1Jyk7XHJcbi8vIE9mZnNldHMgaW50byB0aGUgaGVhZGVyIGFycmF5XHJcbnZhciBvZmZfbWFnaWMgPSAwO1xyXG5cclxudmFyIG9mZl9zaXplID0gMTtcclxudmFyIG9mZl9mbGFncyA9IDI7XHJcbnZhciBvZmZfaGVpZ2h0ID0gMztcclxudmFyIG9mZl93aWR0aCA9IDQ7XHJcblxyXG52YXIgb2ZmX21pcG1hcENvdW50ID0gNztcclxuXHJcbnZhciBvZmZfcGZGbGFncyA9IDIwO1xyXG52YXIgb2ZmX3BmRm91ckNDID0gMjE7XHJcblxyXG52YXIgb2ZmX2NhcHMgPSAyNztcclxudmFyIG9mZl9jYXBzMiA9IDI4O1xyXG52YXIgb2ZmX2NhcHMzID0gMjk7XHJcbnZhciBvZmZfY2FwczQgPSAzMDtcclxuXHJcbnZhciByZXQgPSB7XHJcbiAgICBwYXJzZTogZnVuY3Rpb24oYXJyYXlCdWZmZXIsIG91dCkge1xyXG4gICAgICAgIHZhciBoZWFkZXIgPSBuZXcgSW50MzJBcnJheShhcnJheUJ1ZmZlciwgMCwgaGVhZGVyTGVuZ3RoSW50KTtcclxuICAgICAgICBpZiAoaGVhZGVyW29mZl9tYWdpY10gIT09IEREU19NQUdJQykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFoZWFkZXIob2ZmX3BmRmxhZ3MpICYgRERQRl9GT1VSQ0MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZm91ckNDID0gaGVhZGVyKG9mZl9wZkZvdXJDQyk7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gaGVhZGVyW29mZl93aWR0aF07XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IGhlYWRlcltvZmZfaGVpZ2h0XTtcclxuICAgICAgICB2YXIgaXNDdWJlTWFwID0gaGVhZGVyW29mZl9jYXBzMl0gJiBERFNDQVBTMl9DVUJFTUFQO1xyXG4gICAgICAgIHZhciBoYXNNaXBtYXAgPSBoZWFkZXJbb2ZmX2ZsYWdzXSAmIEREU0RfTUlQTUFQQ09VTlQ7XHJcbiAgICAgICAgdmFyIGJsb2NrQnl0ZXMsIGludGVybmFsRm9ybWF0O1xyXG4gICAgICAgIHN3aXRjaChmb3VyQ0MpIHtcclxuICAgICAgICAgICAgY2FzZSBGT1VSQ0NfRFhUMTpcclxuICAgICAgICAgICAgICAgIGJsb2NrQnl0ZXMgPSA4O1xyXG4gICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSBUZXh0dXJlLkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBGT1VSQ0NfRFhUMzpcclxuICAgICAgICAgICAgICAgIGJsb2NrQnl0ZXMgPSAxNjtcclxuICAgICAgICAgICAgICAgIGludGVybmFsRm9ybWF0ID0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEZPVVJDQ19EWFQ1OlxyXG4gICAgICAgICAgICAgICAgYmxvY2tCeXRlcyA9IDE2O1xyXG4gICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSBUZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRhdGFPZmZzZXQgPSBoZWFkZXJbb2ZmX3NpemVdICsgNDtcclxuICAgICAgICAvLyBUT0RPOiBTdXBwb3NlIGFsbCBmYWNlIGFyZSBleGlzdGVkXHJcbiAgICAgICAgdmFyIGZhY2VOdW1iZXIgPSBpc0N1YmVNYXAgPyA2IDogMTtcclxuICAgICAgICB2YXIgbWlwbWFwQ291bnQgPSAxO1xyXG4gICAgICAgIGlmIChoYXNNaXBtYXApIHtcclxuICAgICAgICAgICAgbWlwbWFwQ291bnQgPSBNYXRoLm1heCgxLCBoZWFkZXJbb2ZmX21pcG1hcENvdW50XSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZXMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGZhY2VOdW1iZXI7IGYrKykge1xyXG4gICAgICAgICAgICB2YXIgX3dpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgICAgIHZhciBfaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgICAgICB0ZXh0dXJlc1tmXSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IF93aWR0aCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogX2hlaWdodCxcclxuICAgICAgICAgICAgICAgIGZvcm1hdDogaW50ZXJuYWxGb3JtYXRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHZhciBtaXBtYXBzID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWlwbWFwQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRhdGFMZW5ndGggPSBNYXRoLm1heCg0LCBfd2lkdGgpIC8gNCAqIE1hdGgubWF4KDQsIF9oZWlnaHQpIC8gNCAqIGJsb2NrQnl0ZXM7XHJcbiAgICAgICAgICAgICAgICB2YXIgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIsIGRhdGFPZmZzZXQsIGRhdGFMZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRhdGFPZmZzZXQgKz0gZGF0YUxlbmd0aDtcclxuICAgICAgICAgICAgICAgIF93aWR0aCAqPSAwLjU7XHJcbiAgICAgICAgICAgICAgICBfaGVpZ2h0ICo9IDAuNTtcclxuICAgICAgICAgICAgICAgIG1pcG1hcHNbaV0gPSBieXRlQXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGV4dHVyZXNbZl0ucGl4ZWxzID0gbWlwbWFwc1swXTtcclxuICAgICAgICAgICAgaWYgKGhhc01pcG1hcCkge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZXNbZl0ubWlwbWFwcyA9IG1pcG1hcHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIC8vIHJldHVybiBpc0N1YmVNYXAgPyB0ZXh0dXJlcyA6IHRleHR1cmVzWzBdO1xyXG4gICAgICAgIGlmIChvdXQpIHtcclxuICAgICAgICAgICAgb3V0LndpZHRoID0gdGV4dHVyZXNbMF0ud2lkdGg7XHJcbiAgICAgICAgICAgIG91dC5oZWlnaHQgPSB0ZXh0dXJlc1swXS5oZWlnaHQ7XHJcbiAgICAgICAgICAgIG91dC5mb3JtYXQgPSB0ZXh0dXJlc1swXS5mb3JtYXQ7XHJcbiAgICAgICAgICAgIG91dC5waXhlbHMgPSB0ZXh0dXJlc1swXS5waXhlbHM7XHJcbiAgICAgICAgICAgIG91dC5taXBtYXBzID0gdGV4dHVyZXNbMF0ubWlwbWFwcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlc1swXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCByZXQ7XHJcbiIsImltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbnZhciB0b0NoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xyXG5cclxudmFyIE1JTkVMRU4gPSA4O1xyXG52YXIgTUFYRUxFTiA9IDB4N2ZmZjtcclxuZnVuY3Rpb24gcmdiZTJmbG9hdChyZ2JlLCBidWZmZXIsIG9mZnNldCwgZXhwb3N1cmUpIHtcclxuICAgIGlmIChyZ2JlWzNdID4gMCkge1xyXG4gICAgICAgIHZhciBmID0gTWF0aC5wb3coMi4wLCByZ2JlWzNdIC0gMTI4IC0gOCArIGV4cG9zdXJlKTtcclxuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMF0gPSByZ2JlWzBdICogZjtcclxuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMV0gPSByZ2JlWzFdICogZjtcclxuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMl0gPSByZ2JlWzJdICogZjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGJ1ZmZlcltvZmZzZXQgKyAwXSA9IDA7XHJcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDFdID0gMDtcclxuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMl0gPSAwO1xyXG4gICAgfVxyXG4gICAgYnVmZmVyW29mZnNldCArIDNdID0gMS4wO1xyXG4gICAgcmV0dXJuIGJ1ZmZlcjtcclxufVxyXG5cclxuZnVuY3Rpb24gdWludDgyc3RyaW5nKGFycmF5LCBvZmZzZXQsIHNpemUpIHtcclxuICAgIHZhciBzdHIgPSAnJztcclxuICAgIGZvciAodmFyIGkgPSBvZmZzZXQ7IGkgPCBzaXplOyBpKyspIHtcclxuICAgICAgICBzdHIgKz0gdG9DaGFyKGFycmF5W2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvcHlyZ2JlKHMsIHQpIHtcclxuICAgIHRbMF0gPSBzWzBdO1xyXG4gICAgdFsxXSA9IHNbMV07XHJcbiAgICB0WzJdID0gc1syXTtcclxuICAgIHRbM10gPSBzWzNdO1xyXG59XHJcblxyXG4vLyBUT0RPIDogY2hlY2tcclxuZnVuY3Rpb24gb2xkUmVhZENvbG9ycyhzY2FuLCBidWZmZXIsIG9mZnNldCwgeG1heCkge1xyXG4gICAgdmFyIHJzaGlmdCA9IDAsIHggPSAwLCBsZW4gPSB4bWF4O1xyXG4gICAgd2hpbGUgKGxlbiA+IDApIHtcclxuICAgICAgICBzY2FuW3hdWzBdID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgICAgICBzY2FuW3hdWzFdID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgICAgICBzY2FuW3hdWzJdID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgICAgICBzY2FuW3hdWzNdID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgICAgICBpZiAoc2Nhblt4XVswXSA9PT0gMSAmJiBzY2FuW3hdWzFdID09PSAxICYmIHNjYW5beF1bMl0gPT09IDEpIHtcclxuICAgICAgICAgICAgLy8gZXhwIGlzIGNvdW50IG9mIHJlcGVhdGVkIHBpeGVsc1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gKHNjYW5beF1bM10gPDwgcnNoaWZ0KSA+Pj4gMDsgaSA+IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgY29weXJnYmUoc2Nhblt4LTFdLCBzY2FuW3hdKTtcclxuICAgICAgICAgICAgICAgIHgrKztcclxuICAgICAgICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJzaGlmdCArPSA4O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHgrKztcclxuICAgICAgICAgICAgbGVuLS07XHJcbiAgICAgICAgICAgIHJzaGlmdCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9mZnNldDtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVhZENvbG9ycyhzY2FuLCBidWZmZXIsIG9mZnNldCwgeG1heCkge1xyXG4gICAgaWYgKCh4bWF4IDwgTUlORUxFTikgfCAoeG1heCA+IE1BWEVMRU4pKSB7XHJcbiAgICAgICAgcmV0dXJuIG9sZFJlYWRDb2xvcnMoc2NhbiwgYnVmZmVyLCBvZmZzZXQsIHhtYXgpO1xyXG4gICAgfVxyXG4gICAgdmFyIGkgPSBidWZmZXJbb2Zmc2V0KytdO1xyXG4gICAgaWYgKGkgIT0gMikge1xyXG4gICAgICAgIHJldHVybiBvbGRSZWFkQ29sb3JzKHNjYW4sIGJ1ZmZlciwgb2Zmc2V0IC0gMSwgeG1heCk7XHJcbiAgICB9XHJcbiAgICBzY2FuWzBdWzFdID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgIHNjYW5bMF1bMl0gPSBidWZmZXJbb2Zmc2V0KytdO1xyXG5cclxuICAgIGkgPSBidWZmZXJbb2Zmc2V0KytdO1xyXG4gICAgaWYgKCgoKHNjYW5bMF1bMl0gPDwgOCkgPj4+IDApIHwgaSkgPj4+IDAgIT09IHhtYXgpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XHJcbiAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB4bWF4Oykge1xyXG4gICAgICAgICAgICB2YXIgY29kZSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgICAgIGlmIChjb2RlID4gMTI4KSB7XHJcbiAgICAgICAgICAgICAgICBjb2RlID0gKGNvZGUgJiAxMjcpID4+PiAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY29kZS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nhblt4KytdW2ldID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvZGUtLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjYW5beCsrXVtpXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2Zmc2V0O1xyXG59XHJcblxyXG5cclxudmFyIHJldCA9IHtcclxuICAgIC8vIGh0dHA6Ly93d3cuZ3JhcGhpY3MuY29ybmVsbC5lZHUvfmJqdy9yZ2JlLmh0bWxcclxuICAgIC8vIEJsZW5kZXIgc291cmNlXHJcbiAgICAvLyBodHRwOi8vcmFkc2l0ZS5sYmwuZ292L3JhZGlhbmNlL3JlZmVyL05vdGVzL3BpY3R1cmVfZm9ybWF0Lmh0bWxcclxuICAgIHBhcnNlUkdCRTogZnVuY3Rpb24oYXJyYXlCdWZmZXIsIHRleHR1cmUsIGV4cG9zdXJlKSB7XHJcbiAgICAgICAgaWYgKGV4cG9zdXJlID09IG51bGwpIHtcclxuICAgICAgICAgICAgZXhwb3N1cmUgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGF0YSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKTtcclxuICAgICAgICB2YXIgc2l6ZSA9IGRhdGEubGVuZ3RoO1xyXG4gICAgICAgIGlmICh1aW50ODJzdHJpbmcoZGF0YSwgMCwgMikgIT09ICcjPycpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBmaW5kIGVtcHR5IGxpbmUsIG5leHQgbGluZSBpcyByZXNvbHV0aW9uIGluZm9cclxuICAgICAgICBmb3IgKHZhciBpID0gMjsgaSA8IHNpemU7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodG9DaGFyKGRhdGFbaV0pID09PSAnXFxuJyAmJiB0b0NoYXIoZGF0YVtpKzFdKSA9PT0gJ1xcbicpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpID49IHNpemUpIHsgLy8gbm90IGZvdW5kXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZmluZCByZXNvbHV0aW9uIGluZm8gbGluZVxyXG4gICAgICAgIGkgKz0gMjtcclxuICAgICAgICB2YXIgc3RyID0gJyc7XHJcbiAgICAgICAgZm9yICg7IGkgPCBzaXplOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIF9jaGFyID0gdG9DaGFyKGRhdGFbaV0pO1xyXG4gICAgICAgICAgICBpZiAoX2NoYXIgPT09ICdcXG4nKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdHIgKz0gX2NoYXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIC1ZIE0gK1ggTlxyXG4gICAgICAgIHZhciB0bXAgPSBzdHIuc3BsaXQoJyAnKTtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gcGFyc2VJbnQodG1wWzFdKTtcclxuICAgICAgICB2YXIgd2lkdGggPSBwYXJzZUludCh0bXBbM10pO1xyXG4gICAgICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZWFkIGFuZCBkZWNvZGUgYWN0dWFsIGRhdGFcclxuICAgICAgICB2YXIgb2Zmc2V0ID0gaSsxO1xyXG4gICAgICAgIHZhciBzY2FubGluZSA9IFtdO1xyXG4gICAgICAgIC8vIG1lbXplcm9cclxuICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcclxuICAgICAgICAgICAgc2NhbmxpbmVbeF0gPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHNjYW5saW5lW3hdW2pdID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcGl4ZWxzID0gbmV3IEZsb2F0MzJBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpO1xyXG4gICAgICAgIHZhciBvZmZzZXQyID0gMDtcclxuICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkQ29sb3JzKHNjYW5saW5lLCBkYXRhLCBvZmZzZXQsIHdpZHRoKTtcclxuICAgICAgICAgICAgaWYgKCFvZmZzZXQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xyXG4gICAgICAgICAgICAgICAgcmdiZTJmbG9hdChzY2FubGluZVt4XSwgcGl4ZWxzLCBvZmZzZXQyLCBleHBvc3VyZSk7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQyICs9IDQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGV4dHVyZSkge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZXh0dXJlLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgdGV4dHVyZS5waXhlbHMgPSBwaXhlbHM7XHJcbiAgICAgICAgLy8gSEFMRl9GTE9BVCBjYW4ndCB1c2UgRmxvYXQzMkFycmF5XHJcbiAgICAgICAgdGV4dHVyZS50eXBlID0gVGV4dHVyZS5GTE9BVDtcclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgcGFyc2VSR0JFRnJvbVBORzogZnVuY3Rpb24ocG5nKSB7XHJcblxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgcmV0O1xyXG4iLCJpbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgRW52aXJvbm1lbnRNYXBQYXNzIGZyb20gJy4uL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAnO1xyXG5pbXBvcnQgU2t5ZG9tZSBmcm9tICcuLi9wbHVnaW4vU2t5ZG9tZSc7XHJcbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XHJcblxyXG5pbXBvcnQgZGRzIGZyb20gJy4vZGRzJztcclxuaW1wb3J0IGhkciBmcm9tICcuL2hkcic7XHJcblxyXG4vKipcclxuICogQGFsaWFzIGNsYXkudXRpbC50ZXh0dXJlXHJcbiAqL1xyXG52YXIgdGV4dHVyZVV0aWwgPSB7XHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ3xvYmplY3R9IHBhdGhcclxuICAgICAqIEBwYXJhbSAge29iamVjdH0gW29wdGlvbl1cclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb25zdWNjZXNzXVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvbmVycm9yXVxyXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlfVxyXG4gICAgICovXHJcbiAgICBsb2FkVGV4dHVyZTogZnVuY3Rpb24gKHBhdGgsIG9wdGlvbiwgb25zdWNjZXNzLCBvbmVycm9yKSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmU7XHJcbiAgICAgICAgaWYgKHR5cGVvZihvcHRpb24pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIG9uc3VjY2VzcyA9IG9wdGlvbjtcclxuICAgICAgICAgICAgb25lcnJvciA9IG9uc3VjY2VzcztcclxuICAgICAgICAgICAgb3B0aW9uID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvcHRpb24gPSBvcHRpb24gfHwge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YocGF0aCkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXRoLm1hdGNoKC8uaGRyJC8pIHx8IG9wdGlvbi5maWxlVHlwZSA9PT0gJ2hkcicpIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgc1JHQjogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZVV0aWwuX2ZldGNoVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhkci5wYXJzZVJHQkUoZGF0YSwgdGV4dHVyZSwgb3B0aW9uLmV4cG9zdXJlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5kaXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbnN1Y2Nlc3MgJiYgb25zdWNjZXNzKHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgb25lcnJvclxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHBhdGgubWF0Y2goLy5kZHMkLykgfHwgb3B0aW9uLmZpbGVUeXBlID09PSAnZGRzJykge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlVXRpbC5fZmV0Y2hUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGRzLnBhcnNlKGRhdGEsIHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLmRpcnR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uc3VjY2VzcyAmJiBvbnN1Y2Nlc3ModGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBvbmVycm9yXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoKTtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUubG9hZChwYXRoKTtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUuc3VjY2VzcyhvbnN1Y2Nlc3MpO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5lcnJvcihvbmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgcGF0aCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mKHBhdGgucHgpICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmVDdWJlKCk7XHJcbiAgICAgICAgICAgIHRleHR1cmUubG9hZChwYXRoKTtcclxuICAgICAgICAgICAgdGV4dHVyZS5zdWNjZXNzKG9uc3VjY2Vzcyk7XHJcbiAgICAgICAgICAgIHRleHR1cmUuZXJyb3Iob25lcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIExvYWQgYSBwYW5vcmFtYSB0ZXh0dXJlIGFuZCByZW5kZXIgaXQgdG8gYSBjdWJlIG1hcFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gcGF0aFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5UZXh0dXJlQ3ViZX0gY3ViZU1hcFxyXG4gICAgICogQHBhcmFtICB7b2JqZWN0fSBbb3B0aW9uXVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW29wdGlvbi5lbmNvZGVSR0JNXVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbb3B0aW9uLmV4cG9zdXJlXVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvbnN1Y2Nlc3NdXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW29uZXJyb3JdXHJcbiAgICAgKi9cclxuICAgIGxvYWRQYW5vcmFtYTogZnVuY3Rpb24gKHJlbmRlcmVyLCBwYXRoLCBjdWJlTWFwLCBvcHRpb24sIG9uc3VjY2Vzcywgb25lcnJvcikge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZihvcHRpb24pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIG9uc3VjY2VzcyA9IG9wdGlvbjtcclxuICAgICAgICAgICAgb25lcnJvciA9IG9uc3VjY2VzcztcclxuICAgICAgICAgICAgb3B0aW9uID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvcHRpb24gPSBvcHRpb24gfHwge307XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0ZXh0dXJlVXRpbC5sb2FkVGV4dHVyZShwYXRoLCBvcHRpb24sIGZ1bmN0aW9uICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgdGV4dHVyZS5mbGlwWSA9IG9wdGlvbi5mbGlwWSB8fCBmYWxzZTtcclxuICAgICAgICAgICAgc2VsZi5wYW5vcmFtYVRvQ3ViZU1hcChyZW5kZXJlciwgdGV4dHVyZSwgY3ViZU1hcCwgb3B0aW9uKTtcclxuICAgICAgICAgICAgdGV4dHVyZS5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgb25zdWNjZXNzICYmIG9uc3VjY2VzcyhjdWJlTWFwKTtcclxuICAgICAgICB9LCBvbmVycm9yKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW5kZXIgYSBwYW5vcmFtYSB0ZXh0dXJlIHRvIGEgY3ViZSBtYXBcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmUyRH0gcGFub3JhbWFNYXBcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZUN1YmV9IGN1YmVNYXBcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtib29sZWFufSBbb3B0aW9uLmVuY29kZVJHQk1dXHJcbiAgICAgKi9cclxuICAgIHBhbm9yYW1hVG9DdWJlTWFwOiBmdW5jdGlvbiAocmVuZGVyZXIsIHBhbm9yYW1hTWFwLCBjdWJlTWFwLCBvcHRpb24pIHtcclxuICAgICAgICB2YXIgZW52aXJvbm1lbnRNYXBQYXNzID0gbmV3IEVudmlyb25tZW50TWFwUGFzcygpO1xyXG4gICAgICAgIHZhciBza3lkb21lID0gbmV3IFNreWRvbWUoe1xyXG4gICAgICAgICAgICBzY2VuZTogbmV3IFNjZW5lKClcclxuICAgICAgICB9KTtcclxuICAgICAgICBza3lkb21lLnNldEVudmlyb25tZW50TWFwKHBhbm9yYW1hTWFwKTtcclxuXHJcbiAgICAgICAgb3B0aW9uID0gb3B0aW9uIHx8IHt9O1xyXG4gICAgICAgIGlmIChvcHRpb24uZW5jb2RlUkdCTSkge1xyXG4gICAgICAgICAgICBza3lkb21lLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUkdCTV9FTkNPREUnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNoYXJlIHNSR0JcclxuICAgICAgICBjdWJlTWFwLnNSR0IgPSBwYW5vcmFtYU1hcC5zUkdCO1xyXG5cclxuICAgICAgICBlbnZpcm9ubWVudE1hcFBhc3MudGV4dHVyZSA9IGN1YmVNYXA7XHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXBQYXNzLnJlbmRlcihyZW5kZXJlciwgc2t5ZG9tZS5zY2VuZSk7XHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXBQYXNzLnRleHR1cmUgPSBudWxsO1xyXG4gICAgICAgIGVudmlyb25tZW50TWFwUGFzcy5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICByZXR1cm4gY3ViZU1hcDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGhlaWdodCBtYXAgdG8gbm9ybWFsIG1hcFxyXG4gICAgICogQHBhcmFtIHtIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fSBpbWFnZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tCdW1wPWZhbHNlXVxyXG4gICAgICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodFRvTm9ybWFsOiBmdW5jdGlvbiAoaW1hZ2UsIGNoZWNrQnVtcCkge1xyXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICB2YXIgd2lkdGggPSBjYW52YXMud2lkdGggPSBpbWFnZS53aWR0aDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gY2FudmFzLmhlaWdodCA9IGltYWdlLmhlaWdodDtcclxuICAgICAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgY2hlY2tCdW1wID0gY2hlY2tCdW1wIHx8IGZhbHNlO1xyXG4gICAgICAgIHZhciBzcmNEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICB2YXIgZHN0RGF0YSA9IGN0eC5jcmVhdGVJbWFnZURhdGEod2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcmNEYXRhLmRhdGEubGVuZ3RoOyBpICs9IDQpIHtcclxuICAgICAgICAgICAgaWYgKGNoZWNrQnVtcCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHIgPSBzcmNEYXRhLmRhdGFbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgZyA9IHNyY0RhdGEuZGF0YVtpICsgMV07XHJcbiAgICAgICAgICAgICAgICB2YXIgYiA9IHNyY0RhdGEuZGF0YVtpICsgMl07XHJcbiAgICAgICAgICAgICAgICB2YXIgZGlmZiA9IE1hdGguYWJzKHIgLSBnKSArIE1hdGguYWJzKGcgLSBiKTtcclxuICAgICAgICAgICAgICAgIGlmIChkaWZmID4gMjApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0dpdmVuIGltYWdlIGlzIG5vdCBhIGhlaWdodCBtYXAnKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gTW9kaWZpZWQgZnJvbSBodHRwOi8vbXJkb29iLmNvbS9sYWIvamF2YXNjcmlwdC9oZWlnaHQybm9ybWFsL1xyXG4gICAgICAgICAgICB2YXIgeDEsIHkxLCB4MiwgeTI7XHJcbiAgICAgICAgICAgIGlmIChpICUgKHdpZHRoICogNCkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIGxlZnQgZWRnZVxyXG4gICAgICAgICAgICAgICAgeDEgPSBzcmNEYXRhLmRhdGFbaV07XHJcbiAgICAgICAgICAgICAgICB4MiA9IHNyY0RhdGEuZGF0YVtpICsgNF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaSAlICh3aWR0aCAqIDQpID09PSAod2lkdGggLSAxKSAqIDQpIHtcclxuICAgICAgICAgICAgICAgIC8vIHJpZ2h0IGVkZ2VcclxuICAgICAgICAgICAgICAgIHgxID0gc3JjRGF0YS5kYXRhW2kgLSA0XTtcclxuICAgICAgICAgICAgICAgIHgyID0gc3JjRGF0YS5kYXRhW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgeDEgPSBzcmNEYXRhLmRhdGFbaSAtIDRdO1xyXG4gICAgICAgICAgICAgICAgeDIgPSBzcmNEYXRhLmRhdGFbaSArIDRdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaSA8IHdpZHRoICogNCkge1xyXG4gICAgICAgICAgICAgICAgLy8gdG9wIGVkZ2VcclxuICAgICAgICAgICAgICAgIHkxID0gc3JjRGF0YS5kYXRhW2ldO1xyXG4gICAgICAgICAgICAgICAgeTIgPSBzcmNEYXRhLmRhdGFbaSArIHdpZHRoICogNF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaSA+IHdpZHRoICogKGhlaWdodCAtIDEpICogNCkge1xyXG4gICAgICAgICAgICAgICAgLy8gYm90dG9tIGVkZ2VcclxuICAgICAgICAgICAgICAgIHkxID0gc3JjRGF0YS5kYXRhW2kgLSB3aWR0aCAqIDRdO1xyXG4gICAgICAgICAgICAgICAgeTIgPSBzcmNEYXRhLmRhdGFbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB5MSA9IHNyY0RhdGEuZGF0YVtpIC0gd2lkdGggKiA0XTtcclxuICAgICAgICAgICAgICAgIHkyID0gc3JjRGF0YS5kYXRhW2kgKyB3aWR0aCAqIDRdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkc3REYXRhLmRhdGFbaV0gPSAoeDEgLSB4MikgKyAxMjc7XHJcbiAgICAgICAgICAgIGRzdERhdGEuZGF0YVtpICsgMV0gPSAoeTEgLSB5MikgKyAxMjc7XHJcbiAgICAgICAgICAgIGRzdERhdGEuZGF0YVtpICsgMl0gPSAyNTU7XHJcbiAgICAgICAgICAgIGRzdERhdGEuZGF0YVtpICsgM10gPSAyNTU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoZHN0RGF0YSwgMCwgMCk7XHJcbiAgICAgICAgcmV0dXJuIGNhbnZhcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGhlaWdodCBtYXAgdG8gbm9ybWFsIG1hcFxyXG4gICAgICogQHBhcmFtIHtIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fSBpbWFnZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tCdW1wPWZhbHNlXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt0aHJlc2hvbGQ9MjBdXHJcbiAgICAgKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH1cclxuICAgICAqL1xyXG4gICAgaXNIZWlnaHRJbWFnZTogZnVuY3Rpb24gKGltZywgZG93blNjYWxlU2l6ZSwgdGhyZXNob2xkKSB7XHJcbiAgICAgICAgaWYgKCFpbWcgfHwgIWltZy53aWR0aCB8fCAhaW1nLmhlaWdodCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIHZhciBzaXplID0gZG93blNjYWxlU2l6ZSB8fCAzMjtcclxuICAgICAgICB0aHJlc2hvbGQgPSB0aHJlc2hvbGQgfHwgMjA7XHJcbiAgICAgICAgY2FudmFzLndpZHRoID0gY2FudmFzLmhlaWdodCA9IHNpemU7XHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIHNpemUsIHNpemUpO1xyXG4gICAgICAgIHZhciBzcmNEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCBzaXplLCBzaXplKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNyY0RhdGEuZGF0YS5sZW5ndGg7IGkgKz0gNCkge1xyXG4gICAgICAgICAgICB2YXIgciA9IHNyY0RhdGEuZGF0YVtpXTtcclxuICAgICAgICAgICAgdmFyIGcgPSBzcmNEYXRhLmRhdGFbaSArIDFdO1xyXG4gICAgICAgICAgICB2YXIgYiA9IHNyY0RhdGEuZGF0YVtpICsgMl07XHJcbiAgICAgICAgICAgIHZhciBkaWZmID0gTWF0aC5hYnMociAtIGcpICsgTWF0aC5hYnMoZyAtIGIpO1xyXG4gICAgICAgICAgICBpZiAoZGlmZiA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZmV0Y2hUZXh0dXJlOiBmdW5jdGlvbiAocGF0aCwgb25zdWNjZXNzLCBvbmVycm9yKSB7XHJcbiAgICAgICAgdmVuZG9yLnJlcXVlc3QuZ2V0KHtcclxuICAgICAgICAgICAgdXJsOiBwYXRoLFxyXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicsXHJcbiAgICAgICAgICAgIG9ubG9hZDogb25zdWNjZXNzLFxyXG4gICAgICAgICAgICBvbmVycm9yOiBvbmVycm9yXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgY2hlc3Nib2FyZCB0ZXh0dXJlXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFtzaXplXVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbdW5pdFNpemVdXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IFtjb2xvcjFdXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IFtjb2xvcjJdXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAqL1xyXG4gICAgY3JlYXRlQ2hlc3Nib2FyZDogZnVuY3Rpb24gKHNpemUsIHVuaXRTaXplLCBjb2xvcjEsIGNvbG9yMikge1xyXG4gICAgICAgIHNpemUgPSBzaXplIHx8IDUxMjtcclxuICAgICAgICB1bml0U2l6ZSA9IHVuaXRTaXplIHx8IDY0O1xyXG4gICAgICAgIGNvbG9yMSA9IGNvbG9yMSB8fCAnYmxhY2snO1xyXG4gICAgICAgIGNvbG9yMiA9IGNvbG9yMiB8fCAnd2hpdGUnO1xyXG5cclxuICAgICAgICB2YXIgcmVwZWF0ID0gTWF0aC5jZWlsKHNpemUgLyB1bml0U2l6ZSk7XHJcblxyXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBjYW52YXMud2lkdGggPSBzaXplO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBzaXplO1xyXG4gICAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBjdHguZmlsbFN0eWxlID0gY29sb3IyO1xyXG4gICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBzaXplLCBzaXplKTtcclxuXHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGNvbG9yMTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcGVhdDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmVwZWF0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBpc0ZpbGwgPSBqICUgMiA/IChpICUgMikgOiAoaSAlIDIgLSAxKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc0ZpbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoaSAqIHVuaXRTaXplLCBqICogdW5pdFNpemUsIHVuaXRTaXplLCB1bml0U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjYW52YXMsXHJcbiAgICAgICAgICAgIGFuaXNvdHJvcGljOiA4XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIGJsYW5rIHB1cmUgY29sb3IgMXgxIHRleHR1cmVcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gY29sb3JcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICovXHJcbiAgICBjcmVhdGVCbGFuazogZnVuY3Rpb24gKGNvbG9yKSB7XHJcbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IDE7XHJcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IDE7XHJcbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvcjtcclxuICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgMSwgMSk7XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjYW52YXNcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCB0ZXh0dXJlVXRpbDtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCIjZGVmaW5lIFNBTVBMRV9OVU1CRVIgMTAyNFxcbiNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OVxcbnVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbERpc3RyaWJ1dGlvbjtcXG51bmlmb3JtIHZlYzIgdmlld3BvcnRTaXplIDogWzUxMiwgMjU2XTtcXG5jb25zdCB2ZWMzIE4gPSB2ZWMzKDAuMCwgMC4wLCAxLjApO1xcbmNvbnN0IGZsb2F0IGZTYW1wbGVOdW1iZXIgPSBmbG9hdChTQU1QTEVfTlVNQkVSKTtcXG52ZWMzIGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQgaSwgZmxvYXQgcm91Z2huZXNzLCB2ZWMzIE4pIHtcXG4gdmVjMyBIID0gdGV4dHVyZTJEKG5vcm1hbERpc3RyaWJ1dGlvbiwgdmVjMihyb3VnaG5lc3MsIGkpKS5yZ2I7XFxuIHZlYzMgdXBWZWN0b3IgPSBhYnMoTi55KSA+IDAuOTk5ID8gdmVjMygxLjAsIDAuMCwgMC4wKSA6IHZlYzMoMC4wLCAxLjAsIDAuMCk7XFxuIHZlYzMgdGFuZ2VudFggPSBub3JtYWxpemUoY3Jvc3MoTiwgdXBWZWN0b3IpKTtcXG4gdmVjMyB0YW5nZW50WiA9IGNyb3NzKE4sIHRhbmdlbnRYKTtcXG4gcmV0dXJuIG5vcm1hbGl6ZSh0YW5nZW50WCAqIEgueCArIE4gKiBILnkgKyB0YW5nZW50WiAqIEgueik7XFxufVxcbmZsb2F0IEdfU21pdGgoZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBOb1YsIGZsb2F0IE5vTCkge1xcbiBmbG9hdCBrID0gcm91Z2huZXNzICogcm91Z2huZXNzIC8gMi4wO1xcbiBmbG9hdCBHMVYgPSBOb1YgLyAoTm9WICogKDEuMCAtIGspICsgayk7XFxuIGZsb2F0IEcxTCA9IE5vTCAvIChOb0wgKiAoMS4wIC0gaykgKyBrKTtcXG4gcmV0dXJuIEcxTCAqIEcxVjtcXG59XFxudm9pZCBtYWluKCkge1xcbiB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC8gdmlld3BvcnRTaXplO1xcbiBmbG9hdCBOb1YgPSB1di54O1xcbiBmbG9hdCByb3VnaG5lc3MgPSB1di55O1xcbiB2ZWMzIFY7XFxuIFYueCA9IHNxcnQoMS4wIC0gTm9WICogTm9WKTtcXG4gVi55ID0gMC4wO1xcbiBWLnogPSBOb1Y7XFxuIGZsb2F0IEEgPSAwLjA7XFxuIGZsb2F0IEIgPSAwLjA7XFxuIGZvciAoaW50IGkgPSAwOyBpIDwgU0FNUExFX05VTUJFUjsgaSsrKSB7XFxuIHZlYzMgSCA9IGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQoaSkgLyBmU2FtcGxlTnVtYmVyLCByb3VnaG5lc3MsIE4pO1xcbiB2ZWMzIEwgPSByZWZsZWN0KC1WLCBIKTtcXG4gZmxvYXQgTm9MID0gY2xhbXAoTC56LCAwLjAsIDEuMCk7XFxuIGZsb2F0IE5vSCA9IGNsYW1wKEgueiwgMC4wLCAxLjApO1xcbiBmbG9hdCBWb0ggPSBjbGFtcChkb3QoViwgSCksIDAuMCwgMS4wKTtcXG4gaWYgKE5vTCA+IDAuMCkge1xcbiBmbG9hdCBHID0gR19TbWl0aChyb3VnaG5lc3MsIE5vViwgTm9MKTtcXG4gZmxvYXQgR19WaXMgPSBHICogVm9IIC8gKE5vSCAqIE5vVik7XFxuIGZsb2F0IEZjID0gcG93KDEuMCAtIFZvSCwgNS4wKTtcXG4gQSArPSAoMS4wIC0gRmMpICogR19WaXM7XFxuIEIgKz0gRmMgKiBHX1ZpcztcXG4gfVxcbiB9XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMihBLCBCKSAvIGZTYW1wbGVOdW1iZXIsIDAuMCwgMS4wKTtcXG59XFxuXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiI2RlZmluZSBTSEFERVJfTkFNRSBwcmVmaWx0ZXJcXG4jZGVmaW5lIFNBTVBMRV9OVU1CRVIgMTAyNFxcbiNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OVxcbnVuaWZvcm0gbWF0NCB2aWV3SW52ZXJzZSA6IFZJRVdJTlZFUlNFO1xcbnVuaWZvcm0gc2FtcGxlckN1YmUgZW52aXJvbm1lbnRNYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsRGlzdHJpYnV0aW9uO1xcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzIDogMC41O1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZlYzMgaW1wb3J0YW5jZVNhbXBsZU5vcm1hbChmbG9hdCBpLCBmbG9hdCByb3VnaG5lc3MsIHZlYzMgTikge1xcbiB2ZWMzIEggPSB0ZXh0dXJlMkQobm9ybWFsRGlzdHJpYnV0aW9uLCB2ZWMyKHJvdWdobmVzcywgaSkpLnJnYjtcXG4gdmVjMyB1cFZlY3RvciA9IGFicyhOLnkpID4gMC45OTkgPyB2ZWMzKDEuMCwgMC4wLCAwLjApIDogdmVjMygwLjAsIDEuMCwgMC4wKTtcXG4gdmVjMyB0YW5nZW50WCA9IG5vcm1hbGl6ZShjcm9zcyhOLCB1cFZlY3RvcikpO1xcbiB2ZWMzIHRhbmdlbnRaID0gY3Jvc3MoTiwgdGFuZ2VudFgpO1xcbiByZXR1cm4gbm9ybWFsaXplKHRhbmdlbnRYICogSC54ICsgTiAqIEgueSArIHRhbmdlbnRaICogSC56KTtcXG59XFxudm9pZCBtYWluKCkge1xcbiB2ZWMzIGV5ZVBvcyA9IHZpZXdJbnZlcnNlWzNdLnh5ejtcXG4gdmVjMyBWID0gbm9ybWFsaXplKHZfV29ybGRQb3NpdGlvbiAtIGV5ZVBvcyk7XFxuIHZlYzMgTiA9IFY7XFxuIHZlYzMgcHJlZmlsdGVyZWRDb2xvciA9IHZlYzMoMC4wKTtcXG4gZmxvYXQgdG90YWxXZWlnaHQgPSAwLjA7XFxuIGZsb2F0IGZNYXhTYW1wbGVOdW1iZXIgPSBmbG9hdChTQU1QTEVfTlVNQkVSKTtcXG4gZm9yIChpbnQgaSA9IDA7IGkgPCBTQU1QTEVfTlVNQkVSOyBpKyspIHtcXG4gdmVjMyBIID0gaW1wb3J0YW5jZVNhbXBsZU5vcm1hbChmbG9hdChpKSAvIGZNYXhTYW1wbGVOdW1iZXIsIHJvdWdobmVzcywgTik7XFxuIHZlYzMgTCA9IHJlZmxlY3QoLVYsIEgpO1xcbiBmbG9hdCBOb0wgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gaWYgKE5vTCA+IDAuMCkge1xcbiBwcmVmaWx0ZXJlZENvbG9yICs9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZShlbnZpcm9ubWVudE1hcCwgTCkpLnJnYiAqIE5vTDtcXG4gdG90YWxXZWlnaHQgKz0gTm9MO1xcbiB9XFxuIH1cXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHZlYzQocHJlZmlsdGVyZWRDb2xvciAvIHRvdGFsV2VpZ2h0LCAxLjApKTtcXG59XFxuXCI7XHJcbiIsIi8vIEN1YmVtYXAgcHJlZmlsdGVyIHV0aWxpdHlcclxuLy8gaHR0cDovL3d3dy51bnJlYWxlbmdpbmUuY29tL2ZpbGVzL2Rvd25sb2Fkcy8yMDEzU2lnZ3JhcGhQcmVzZW50YXRpb25zTm90ZXMucGRmXHJcbi8vIGh0dHA6Ly9odHRwLmRldmVsb3Blci5udmlkaWEuY29tL0dQVUdlbXMzL2dwdWdlbXMzX2NoMjAuaHRtbFxyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgUGFzcyBmcm9tICcuLi9jb21wb3NpdG9yL1Bhc3MnO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcbmltcG9ydCBTa3lib3ggZnJvbSAnLi4vcGx1Z2luL1NreWJveCc7XHJcbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XHJcbmltcG9ydCBFbnZpcm9ubWVudE1hcFBhc3MgZnJvbSAnLi4vcHJlUGFzcy9FbnZpcm9ubWVudE1hcCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgdGV4dHVyZVV0aWwgZnJvbSAnLi90ZXh0dXJlJztcclxuXHJcbmltcG9ydCBpbnRlZ3JhdGVCUkRGU2hhZGVyQ29kZSBmcm9tICcuL3NoYWRlci9pbnRlZ3JhdGVCUkRGLmdsc2wuanMnO1xyXG5pbXBvcnQgcHJlZmlsdGVyRnJhZ0NvZGUgZnJvbSAnLi9zaGFkZXIvcHJlZmlsdGVyLmdsc2wuanMnO1xyXG5cclxudmFyIGN1YmVtYXBVdGlsID0ge307XHJcblxyXG52YXIgdGFyZ2V0cyA9IFsncHgnLCAnbngnLCAncHknLCAnbnknLCAncHonLCAnbnonXTtcclxuXHJcbi8vIFRPRE8gRG93bnNhbXBsZVxyXG4vKipcclxuICogQG5hbWUgY2xheS51dGlsLmN1YmVtYXAucHJlZmlsdGVyRW52aXJvbm1lbnRNYXBcclxuICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSBlbnZNYXBcclxuICogQHBhcmFtICB7T2JqZWN0fSBbdGV4dHVyZU9wdHNdXHJcbiAqIEBwYXJhbSAge251bWJlcn0gW3RleHR1cmVPcHRzLndpZHRoPTY0XVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFt0ZXh0dXJlT3B0cy5oZWlnaHQ9NjRdXHJcbiAqIEBwYXJhbSAge251bWJlcn0gW3RleHR1cmVPcHRzLnR5cGVdXHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFt0ZXh0dXJlT3B0cy5lbmNvZGVSR0JNPWZhbHNlXVxyXG4gKiBAcGFyYW0gIHtib29sZWFufSBbdGV4dHVyZU9wdHMuZGVjb2RlUkdCTT1mYWxzZV1cclxuICogQHBhcmFtICB7Y2xheS5UZXh0dXJlMkR9IFtub3JtYWxEaXN0cmlidXRpb25dXHJcbiAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZTJEfSBbYnJkZkxvb2t1cF1cclxuICovXHJcbmN1YmVtYXBVdGlsLnByZWZpbHRlckVudmlyb25tZW50TWFwID0gZnVuY3Rpb24gKFxyXG4gICAgcmVuZGVyZXIsIGVudk1hcCwgdGV4dHVyZU9wdHMsIG5vcm1hbERpc3RyaWJ1dGlvbiwgYnJkZkxvb2t1cFxyXG4pIHtcclxuICAgIC8vIE5vdCBjcmVhdGUgb3RoZXIgcmVuZGVyZXIsIGl0IGlzIGVhc3kgaGF2aW5nIGlzc3VlIG9mIGNyb3NzIHJlZmVyZW5jZSBvZiByZXNvdXJjZXMgbGlrZSBmcmFtZWJ1ZmZlclxyXG4gICAgLy8gUEVORElORyBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI/XHJcbiAgICBpZiAoIWJyZGZMb29rdXAgfHwgIW5vcm1hbERpc3RyaWJ1dGlvbikge1xyXG4gICAgICAgIG5vcm1hbERpc3RyaWJ1dGlvbiA9IGN1YmVtYXBVdGlsLmdlbmVyYXRlTm9ybWFsRGlzdHJpYnV0aW9uKCk7XHJcbiAgICAgICAgYnJkZkxvb2t1cCA9IGN1YmVtYXBVdGlsLmludGVncmF0ZUJSREYocmVuZGVyZXIsIG5vcm1hbERpc3RyaWJ1dGlvbik7XHJcbiAgICB9XHJcbiAgICB0ZXh0dXJlT3B0cyA9IHRleHR1cmVPcHRzIHx8IHt9O1xyXG5cclxuICAgIHZhciB3aWR0aCA9IHRleHR1cmVPcHRzLndpZHRoIHx8IDY0O1xyXG4gICAgdmFyIGhlaWdodCA9IHRleHR1cmVPcHRzLmhlaWdodCB8fCA2NDtcclxuXHJcbiAgICB2YXIgdGV4dHVyZVR5cGUgPSB0ZXh0dXJlT3B0cy50eXBlIHx8IGVudk1hcC50eXBlO1xyXG5cclxuICAgIC8vIFVzZSBzYW1lIHR5cGUgd2l0aCBnaXZlbiBlbnZNYXBcclxuICAgIHZhciBwcmVmaWx0ZXJlZEN1YmVNYXAgPSBuZXcgVGV4dHVyZUN1YmUoe1xyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICB0eXBlOiB0ZXh0dXJlVHlwZSxcclxuICAgICAgICBmbGlwWTogZmFsc2UsXHJcbiAgICAgICAgbWlwbWFwczogW11cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghcHJlZmlsdGVyZWRDdWJlTWFwLmlzUG93ZXJPZlR3bygpKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdXaWR0aCBhbmQgaGVpZ2h0IG11c3QgYmUgcG93ZXIgb2YgdHdvIHRvIGVuYWJsZSBtaXBtYXAuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHNpemUgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KTtcclxuICAgIHZhciBtaXBtYXBOdW0gPSBNYXRoLmxvZyhzaXplKSAvIE1hdGgubG9nKDIpICsgMTtcclxuXHJcbiAgICB2YXIgcHJlZmlsdGVyTWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcih7XHJcbiAgICAgICAgICAgIHZlcnRleDogU2hhZGVyLnNvdXJjZSgnY2xheS5za3lib3gudmVydGV4JyksXHJcbiAgICAgICAgICAgIGZyYWdtZW50OiBwcmVmaWx0ZXJGcmFnQ29kZVxyXG4gICAgICAgIH0pXHJcbiAgICB9KTtcclxuICAgIHByZWZpbHRlck1hdGVyaWFsLnNldCgnbm9ybWFsRGlzdHJpYnV0aW9uJywgbm9ybWFsRGlzdHJpYnV0aW9uKTtcclxuXHJcbiAgICB0ZXh0dXJlT3B0cy5lbmNvZGVSR0JNICYmIHByZWZpbHRlck1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUkdCTV9FTkNPREUnKTtcclxuICAgIHRleHR1cmVPcHRzLmRlY29kZVJHQk0gJiYgcHJlZmlsdGVyTWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdSR0JNX0RFQ09ERScpO1xyXG5cclxuICAgIHZhciBkdW1teVNjZW5lID0gbmV3IFNjZW5lKCk7XHJcbiAgICB2YXIgc2t5RW52O1xyXG5cclxuICAgIGlmIChlbnZNYXAudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlMkQnKSB7XHJcbiAgICAgICAgLy8gQ29udmVydCBwYW5vcmFtYSB0byBjdWJlbWFwXHJcbiAgICAgICAgdmFyIGVudkN1YmVtYXAgPSBuZXcgVGV4dHVyZUN1YmUoe1xyXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICAgICAgICAvLyBGSVhNRSBGTE9BVCB0eXBlIHdpbGwgY2F1c2UgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UIGVycm9yIG9uIGlPU1xyXG4gICAgICAgICAgICB0eXBlOiB0ZXh0dXJlVHlwZSA9PT0gVGV4dHVyZS5GTE9BVCA/XHJcbiAgICAgICAgICAgICAgICBUZXh0dXJlLkhBTEZfRkxPQVQgOiB0ZXh0dXJlVHlwZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRleHR1cmVVdGlsLnBhbm9yYW1hVG9DdWJlTWFwKHJlbmRlcmVyLCBlbnZNYXAsIGVudkN1YmVtYXAsIHtcclxuICAgICAgICAgICAgLy8gUEVORElORyBlbmNvZGVSR0JNIHNvIGl0IGNhbiBiZSBkZWNvZGVkIGFzIFJHQk1cclxuICAgICAgICAgICAgZW5jb2RlUkdCTTogdGV4dHVyZU9wdHMuZGVjb2RlUkdCTVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGVudk1hcCA9IGVudkN1YmVtYXA7XHJcbiAgICB9XHJcbiAgICBza3lFbnYgPSBuZXcgU2t5Ym94KHtcclxuICAgICAgICBzY2VuZTogZHVtbXlTY2VuZSxcclxuICAgICAgICBtYXRlcmlhbDogcHJlZmlsdGVyTWF0ZXJpYWxcclxuICAgIH0pO1xyXG4gICAgc2t5RW52Lm1hdGVyaWFsLnNldCgnZW52aXJvbm1lbnRNYXAnLCBlbnZNYXApO1xyXG5cclxuICAgIHZhciBlbnZNYXBQYXNzID0gbmV3IEVudmlyb25tZW50TWFwUGFzcyh7XHJcbiAgICAgICAgdGV4dHVyZTogcHJlZmlsdGVyZWRDdWJlTWFwXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBGb3JjZSB0byBiZSBVTlNJR05FRF9CWVRFXHJcbiAgICBpZiAodGV4dHVyZU9wdHMuZW5jb2RlUkdCTSkge1xyXG4gICAgICAgIHRleHR1cmVUeXBlID0gcHJlZmlsdGVyZWRDdWJlTWFwLnR5cGUgPSBUZXh0dXJlLlVOU0lHTkVEX0JZVEU7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJlbmRlclRhcmdldFRtcCA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICB0eXBlOiB0ZXh0dXJlVHlwZVxyXG4gICAgfSk7XHJcbiAgICB2YXIgZnJhbWVCdWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoe1xyXG4gICAgICAgIGRlcHRoQnVmZmVyOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgICB2YXIgQXJyYXlDdG9yID0gdmVuZG9yW3RleHR1cmVUeXBlID09PSBUZXh0dXJlLlVOU0lHTkVEX0JZVEUgPyAnVWludDhBcnJheScgOiAnRmxvYXQzMkFycmF5J107XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pcG1hcE51bTsgaSsrKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS50aW1lKCdwcmVmaWx0ZXInKTtcclxuICAgICAgICBwcmVmaWx0ZXJlZEN1YmVNYXAubWlwbWFwc1tpXSA9IHtcclxuICAgICAgICAgICAgcGl4ZWxzOiB7fVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgc2t5RW52Lm1hdGVyaWFsLnNldCgncm91Z2huZXNzJywgaSAvIChtaXBtYXBOdW0gLSAxKSk7XHJcblxyXG4gICAgICAgIC8vIFR3ZWFrIGZvdlxyXG4gICAgICAgIC8vIGh0dHA6Ly90aGUtd2l0bmVzcy5uZXQvbmV3cy8yMDEyLzAyL3NlYW1sZXNzLWN1YmUtbWFwLWZpbHRlcmluZy9cclxuICAgICAgICB2YXIgbiA9IHJlbmRlclRhcmdldFRtcC53aWR0aDtcclxuICAgICAgICB2YXIgZm92ID0gMiAqIE1hdGguYXRhbihuIC8gKG4gLSAwLjUpKSAvIE1hdGguUEkgKiAxODA7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGFyZ2V0cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICB2YXIgcGl4ZWxzID0gbmV3IEFycmF5Q3RvcihyZW5kZXJUYXJnZXRUbXAud2lkdGggKiByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0ICogNCk7XHJcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChyZW5kZXJUYXJnZXRUbXApO1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBjYW1lcmEgPSBlbnZNYXBQYXNzLmdldENhbWVyYSh0YXJnZXRzW2pdKTtcclxuICAgICAgICAgICAgY2FtZXJhLmZvdiA9IGZvdjtcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyKGR1bW15U2NlbmUsIGNhbWVyYSk7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLmdsLnJlYWRQaXhlbHMoXHJcbiAgICAgICAgICAgICAgICAwLCAwLCByZW5kZXJUYXJnZXRUbXAud2lkdGgsIHJlbmRlclRhcmdldFRtcC5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBUZXh0dXJlLlJHQkEsIHRleHR1cmVUeXBlLCBwaXhlbHNcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgLy8gdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgICAgICAvLyBjYW52YXMud2lkdGggPSByZW5kZXJUYXJnZXRUbXAud2lkdGg7XHJcbiAgICAgICAgICAgIC8vIGNhbnZhcy5oZWlnaHQgPSByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0O1xyXG4gICAgICAgICAgICAvLyB2YXIgaW1hZ2VEYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YShyZW5kZXJUYXJnZXRUbXAud2lkdGgsIHJlbmRlclRhcmdldFRtcC5oZWlnaHQpO1xyXG4gICAgICAgICAgICAvLyBmb3IgKHZhciBrID0gMDsgayA8IHBpeGVscy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAvLyAgICAgaW1hZ2VEYXRhLmRhdGFba10gPSBwaXhlbHNba107XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgLy8gY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xyXG4gICAgICAgICAgICAvLyBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNhbnZhcyk7XHJcblxyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICBwcmVmaWx0ZXJlZEN1YmVNYXAubWlwbWFwc1tpXS5waXhlbHNbdGFyZ2V0c1tqXV0gPSBwaXhlbHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXJUYXJnZXRUbXAud2lkdGggLz0gMjtcclxuICAgICAgICByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0IC89IDI7XHJcbiAgICAgICAgcmVuZGVyVGFyZ2V0VG1wLmRpcnR5KCk7XHJcbiAgICAgICAgLy8gY29uc29sZS50aW1lRW5kKCdwcmVmaWx0ZXInKTtcclxuICAgIH1cclxuXHJcbiAgICBmcmFtZUJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIHJlbmRlclRhcmdldFRtcC5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIHNreUVudi5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIC8vIFJlbW92ZSBncHUgcmVzb3VyY2UgYWxsdWNhdGVkIGluIHJlbmRlcmVyXHJcbiAgICBub3JtYWxEaXN0cmlidXRpb24uZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgLy8gcmVuZGVyZXIuZGlzcG9zZSgpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXA6IHByZWZpbHRlcmVkQ3ViZU1hcCxcclxuICAgICAgICBicmRmTG9va3VwOiBicmRmTG9va3VwLFxyXG4gICAgICAgIG5vcm1hbERpc3RyaWJ1dGlvbjogbm9ybWFsRGlzdHJpYnV0aW9uLFxyXG4gICAgICAgIG1heE1pcG1hcExldmVsOiBtaXBtYXBOdW1cclxuICAgIH07XHJcbn07XHJcblxyXG5jdWJlbWFwVXRpbC5pbnRlZ3JhdGVCUkRGID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBub3JtYWxEaXN0cmlidXRpb24pIHtcclxuICAgIG5vcm1hbERpc3RyaWJ1dGlvbiA9IG5vcm1hbERpc3RyaWJ1dGlvbiB8fCBjdWJlbWFwVXRpbC5nZW5lcmF0ZU5vcm1hbERpc3RyaWJ1dGlvbigpO1xyXG4gICAgdmFyIGZyYW1lYnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKHtcclxuICAgICAgICBkZXB0aEJ1ZmZlcjogZmFsc2VcclxuICAgIH0pO1xyXG4gICAgdmFyIHBhc3MgPSBuZXcgUGFzcyh7XHJcbiAgICAgICAgZnJhZ21lbnQ6IGludGVncmF0ZUJSREZTaGFkZXJDb2RlXHJcbiAgICB9KTtcclxuXHJcbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgIHdpZHRoOiA1MTIsXHJcbiAgICAgICAgaGVpZ2h0OiAyNTYsXHJcbiAgICAgICAgdHlwZTogVGV4dHVyZS5IQUxGX0ZMT0FULFxyXG4gICAgICAgIHdyYXBTOiBUZXh0dXJlLkNMQU1QX1RPX0VER0UsXHJcbiAgICAgICAgd3JhcFQ6IFRleHR1cmUuQ0xBTVBfVE9fRURHRSxcclxuICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICBtYWdGaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICB1c2VNaXBtYXA6IGZhbHNlXHJcbiAgICB9KTtcclxuICAgIHBhc3Muc2V0VW5pZm9ybSgnbm9ybWFsRGlzdHJpYnV0aW9uJywgbm9ybWFsRGlzdHJpYnV0aW9uKTtcclxuICAgIHBhc3Muc2V0VW5pZm9ybSgndmlld3BvcnRTaXplJywgWzUxMiwgMjU2XSk7XHJcbiAgICBwYXNzLmF0dGFjaE91dHB1dCh0ZXh0dXJlKTtcclxuICAgIHBhc3MucmVuZGVyKHJlbmRlcmVyLCBmcmFtZWJ1ZmZlcik7XHJcblxyXG4gICAgLy8gRklYTUUgT25seSBjaHJvbWUgYW5kIGZpcmVmb3ggY2FuIHJlYWRQaXhlbHMgd2l0aCBmbG9hdCB0eXBlLlxyXG4gICAgLy8gZnJhbWVidWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAvLyB2YXIgcGl4ZWxzID0gbmV3IEZsb2F0MzJBcnJheSg1MTIgKiAyNTYgKiA0KTtcclxuICAgIC8vIHJlbmRlcmVyLmdsLnJlYWRQaXhlbHMoXHJcbiAgICAvLyAgICAgMCwgMCwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQsXHJcbiAgICAvLyAgICAgVGV4dHVyZS5SR0JBLCBUZXh0dXJlLkZMT0FULCBwaXhlbHNcclxuICAgIC8vICk7XHJcbiAgICAvLyB0ZXh0dXJlLnBpeGVscyA9IHBpeGVscztcclxuICAgIC8vIHRleHR1cmUuZmxpcFkgPSBmYWxzZTtcclxuICAgIC8vIHRleHR1cmUuZGlydHkoKTtcclxuICAgIC8vIGZyYW1lYnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgZnJhbWVidWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgcmV0dXJuIHRleHR1cmU7XHJcbn07XHJcblxyXG5jdWJlbWFwVXRpbC5nZW5lcmF0ZU5vcm1hbERpc3RyaWJ1dGlvbiA9IGZ1bmN0aW9uIChyb3VnaG5lc3NMZXZlbHMsIHNhbXBsZVNpemUpIHtcclxuXHJcbiAgICAvLyBodHRwOi8vaG9sZ2VyLmRhbW1lcnR6Lm9yZy9zdHVmZi9ub3Rlc19IYW1tZXJzbGV5T25IZW1pc3BoZXJlLmh0bWxcclxuICAgIC8vIEdMU0wgbm90IHN1cHBvcnQgYml0IG9wZXJhdGlvbiwgdXNlIGxvb2t1cCBpbnN0ZWFkXHJcbiAgICAvLyBWIC0+IGkgLyBOLCBVIC0+IHJvdWdobmVzc1xyXG4gICAgdmFyIHJvdWdobmVzc0xldmVscyA9IHJvdWdobmVzc0xldmVscyB8fCAyNTY7XHJcbiAgICB2YXIgc2FtcGxlU2l6ZSA9IHNhbXBsZVNpemUgfHwgMTAyNDtcclxuXHJcbiAgICB2YXIgbm9ybWFsRGlzdHJpYnV0aW9uID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgd2lkdGg6IHJvdWdobmVzc0xldmVscyxcclxuICAgICAgICBoZWlnaHQ6IHNhbXBsZVNpemUsXHJcbiAgICAgICAgdHlwZTogVGV4dHVyZS5GTE9BVCxcclxuICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICBtYWdGaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICB3cmFwUzogVGV4dHVyZS5DTEFNUF9UT19FREdFLFxyXG4gICAgICAgIHdyYXBUOiBUZXh0dXJlLkNMQU1QX1RPX0VER0UsXHJcbiAgICAgICAgdXNlTWlwbWFwOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgICB2YXIgcGl4ZWxzID0gbmV3IEZsb2F0MzJBcnJheShzYW1wbGVTaXplICogcm91Z2huZXNzTGV2ZWxzICogNCk7XHJcbiAgICB2YXIgdG1wID0gW107XHJcblxyXG4gICAgLy8gZnVuY3Rpb24gc29ydEZ1bmMoYSwgYikge1xyXG4gICAgLy8gICAgIHJldHVybiBNYXRoLmFicyhiKSAtIE1hdGguYWJzKGEpO1xyXG4gICAgLy8gfVxyXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCByb3VnaG5lc3NMZXZlbHM7IGorKykge1xyXG4gICAgICAgIHZhciByb3VnaG5lc3MgPSBqIC8gcm91Z2huZXNzTGV2ZWxzO1xyXG4gICAgICAgIHZhciBhID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNhbXBsZVNpemU7IGkrKykge1xyXG4gICAgICAgICAgICAvLyBodHRwOi8vaG9sZ2VyLmRhbW1lcnR6Lm9yZy9zdHVmZi9ub3Rlc19IYW1tZXJzbGV5T25IZW1pc3BoZXJlLmh0bWxcclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT3BlcmF0b3JzL0JpdHdpc2VfT3BlcmF0b3JzXHJcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTkwODQ5Mi91bnNpZ25lZC1pbnRlZ2VyLWluLWphdmFzY3JpcHRcclxuICAgICAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xODIyMzUwL3doYXQtaXMtdGhlLWphdmFzY3JpcHQtb3BlcmF0b3ItYW5kLWhvdy1kby15b3UtdXNlLWl0XHJcbiAgICAgICAgICAgIHZhciB5ID0gKGkgPDwgMTYgfCBpID4+PiAxNikgPj4+IDA7XHJcbiAgICAgICAgICAgIHkgPSAoKHkgJiAxNDMxNjU1NzY1KSA8PCAxIHwgKHkgJiAyODYzMzExNTMwKSA+Pj4gMSkgPj4+IDA7XHJcbiAgICAgICAgICAgIHkgPSAoKHkgJiA4NTg5OTM0NTkpIDw8IDIgfCAoeSAmIDM0MzU5NzM4MzYpID4+PiAyKSA+Pj4gMDtcclxuICAgICAgICAgICAgeSA9ICgoeSAmIDI1MjY0NTEzNSkgPDwgNCB8ICh5ICYgNDA0MjMyMjE2MCkgPj4+IDQpID4+PiAwO1xyXG4gICAgICAgICAgICB5ID0gKCgoeSAmIDE2NzExOTM1KSA8PCA4IHwgKHkgJiA0Mjc4MjU1MzYwKSA+Pj4gOCkgPj4+IDApIC8gNDI5NDk2NzI5NjtcclxuXHJcbiAgICAgICAgICAgIC8vIENERlxyXG4gICAgICAgICAgICB2YXIgY29zVGhldGEgPSBNYXRoLnNxcnQoKDEgLSB5KSAvICgxICsgKGEgKiBhIC0gMS4wKSAqIHkpKTtcclxuICAgICAgICAgICAgdG1wW2ldID0gY29zVGhldGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNhbXBsZVNpemU7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gKGkgKiByb3VnaG5lc3NMZXZlbHMgKyBqKSAqIDQ7XHJcbiAgICAgICAgICAgIHZhciBjb3NUaGV0YSA9IHRtcFtpXTtcclxuICAgICAgICAgICAgdmFyIHNpblRoZXRhID0gTWF0aC5zcXJ0KDEuMCAtIGNvc1RoZXRhICogY29zVGhldGEpO1xyXG4gICAgICAgICAgICB2YXIgeCA9IGkgLyBzYW1wbGVTaXplO1xyXG4gICAgICAgICAgICB2YXIgcGhpID0gMi4wICogTWF0aC5QSSAqIHg7XHJcbiAgICAgICAgICAgIHBpeGVsc1tvZmZzZXRdID0gc2luVGhldGEgKiBNYXRoLmNvcyhwaGkpO1xyXG4gICAgICAgICAgICBwaXhlbHNbb2Zmc2V0ICsgMV0gPSBjb3NUaGV0YTtcclxuICAgICAgICAgICAgcGl4ZWxzW29mZnNldCArIDJdID0gc2luVGhldGEgKiBNYXRoLnNpbihwaGkpO1xyXG4gICAgICAgICAgICBwaXhlbHNbb2Zmc2V0ICsgM10gPSAxLjA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbm9ybWFsRGlzdHJpYnV0aW9uLnBpeGVscyA9IHBpeGVscztcclxuXHJcbiAgICByZXR1cm4gbm9ybWFsRGlzdHJpYnV0aW9uO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY3ViZW1hcFV0aWw7XHJcbiIsIi8vIGh0dHBzOi8vZG9jcy51bnJlYWxlbmdpbmUuY29tL2xhdGVzdC9JTlQvRW5naW5lL1JlbmRlcmluZy9MaWdodGluZ0FuZFNoYWRvd3MvQW1iaWVudEN1YmVtYXAvXHJcbmltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcbmltcG9ydCBjdWJlbWFwVXRpbCBmcm9tICcuLi91dGlsL2N1YmVtYXAnO1xyXG5cclxuLyoqXHJcbiAqIEFtYmllbnQgY3ViZW1hcCBsaWdodCBwcm92aWRlcyBzcGVjdWxhciBwYXJ0cyBvZiBJbWFnZSBCYXNlZCBMaWdodGluZy5cclxuICogV2hpY2ggaXMgYSBiYXNpYyByZXF1aXJlbWVudCBmb3IgUGh5c2ljYWxseSBCYXNlZCBSZW5kZXJpbmdcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuQW1iaWVudEN1YmVtYXBcclxuICogQGV4dGVuZHMgY2xheS5MaWdodFxyXG4gKi9cclxudmFyIEFtYmllbnRDdWJlbWFwTGlnaHQgPSBMaWdodC5leHRlbmQoe1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVGV4dHVyZUN1YmV9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5BbWJpZW50Q3ViZW1hcCNcclxuICAgICAqL1xyXG4gICAgY3ViZW1hcDogbnVsbCxcclxuXHJcbiAgICAvLyBUT0RPXHJcbiAgICAvLyByYW5nZTogMTAwLFxyXG5cclxuICAgIGNhc3RTaGFkb3c6IGZhbHNlLFxyXG5cclxuICAgIF9ub3JtYWxEaXN0cmlidXRpb246IG51bGwsXHJcbiAgICBfYnJkZkxvb2t1cDogbnVsbFxyXG5cclxufSwgLyoqIEBsZW5kcyBjbGF5LmxpZ2h0LkFtYmllbnRDdWJlbWFwIyAqLyB7XHJcblxyXG4gICAgdHlwZTogJ0FNQklFTlRfQ1VCRU1BUF9MSUdIVCcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEbyBwcmVmaXRlcmluZyB0aGUgY3ViZW1hcFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTMyXVxyXG4gICAgICovXHJcbiAgICBwcmVmaWx0ZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2l6ZSkge1xyXG4gICAgICAgIGlmICghcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oJ0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QnKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RldmljZSBub3Qgc3VwcG9ydCB0ZXh0dXJlQ3ViZUxvZEVYVCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5fYnJkZkxvb2t1cCkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3JtYWxEaXN0cmlidXRpb24gPSBjdWJlbWFwVXRpbC5nZW5lcmF0ZU5vcm1hbERpc3RyaWJ1dGlvbigpO1xyXG4gICAgICAgICAgICB0aGlzLl9icmRmTG9va3VwID0gY3ViZW1hcFV0aWwuaW50ZWdyYXRlQlJERihyZW5kZXJlciwgdGhpcy5fbm9ybWFsRGlzdHJpYnV0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGN1YmVtYXAgPSB0aGlzLmN1YmVtYXA7XHJcbiAgICAgICAgaWYgKGN1YmVtYXAuX19wcmVmaWx0ZXJlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcmVzdWx0ID0gY3ViZW1hcFV0aWwucHJlZmlsdGVyRW52aXJvbm1lbnRNYXAoXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLCBjdWJlbWFwLCB7XHJcbiAgICAgICAgICAgICAgICBlbmNvZGVSR0JNOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHNpemUsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHNpemVcclxuICAgICAgICAgICAgfSwgdGhpcy5fbm9ybWFsRGlzdHJpYnV0aW9uLCB0aGlzLl9icmRmTG9va3VwXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmN1YmVtYXAgPSByZXN1bHQuZW52aXJvbm1lbnRNYXA7XHJcbiAgICAgICAgdGhpcy5jdWJlbWFwLl9fcHJlZmlsdGVyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBjdWJlbWFwLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRCUkRGTG9va3VwOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JyZGZMb29rdXA7XHJcbiAgICB9LFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBhbWJpZW50Q3ViZW1hcExpZ2h0Q29sb3I6IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSppbnRlbnNpdHksIGNvbG9yWzFdKmludGVuc2l0eSwgY29sb3JbMl0qaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGFtYmllbnRDdWJlbWFwTGlnaHRDdWJlbWFwOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICd0JyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmN1YmVtYXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBhbWJpZW50Q3ViZW1hcExpZ2h0QlJERkxvb2t1cDoge1xyXG4gICAgICAgICAgICB0eXBlOiAndCcsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5fYnJkZkxvb2t1cDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAbmFtZSBjbG9uZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5BbWJpZW50Q3ViZW1hcH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LkFtYmllbnRDdWJlbWFwLnByb3RvdHlwZVxyXG4gICAgICovXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW1iaWVudEN1YmVtYXBMaWdodDtcclxuIiwiaW1wb3J0IExpZ2h0IGZyb20gJy4uL0xpZ2h0JztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XHJcblxyXG4vKipcclxuICogU3BoZXJpY2FsIEhhcm1vbmljIEFtYmllbnQgTGlnaHRcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuQW1iaWVudFNIXHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICovXHJcbnZhciBBbWJpZW50U0hMaWdodCA9IExpZ2h0LmV4dGVuZCh7XHJcblxyXG4gICAgY2FzdFNoYWRvdzogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGhlcmljYWwgSGFybW9uaWMgQ29lZmZpY2llbnRzXHJcbiAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5BbWJpZW50U0gjXHJcbiAgICAgKi9cclxuICAgIGNvZWZmaWNpZW50czogW10sXHJcblxyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9jb2VmZmljaWVudHNUbXBBcnIgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSg5ICogMyk7XHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnQU1CSUVOVF9TSF9MSUdIVCcsXHJcblxyXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xyXG4gICAgICAgIGFtYmllbnRTSExpZ2h0Q29sb3I6IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSAqIGludGVuc2l0eSwgY29sb3JbMV0gKiBpbnRlbnNpdHksIGNvbG9yWzJdICogaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2VmZmljaWVudHNUbXBBcnIgPSBpbnN0YW5jZS5fY29lZmZpY2llbnRzVG1wQXJyO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnN0YW5jZS5jb2VmZmljaWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2VmZmljaWVudHNUbXBBcnJbaV0gPSBpbnN0YW5jZS5jb2VmZmljaWVudHNbaV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29lZmZpY2llbnRzVG1wQXJyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBuYW1lIGNsb25lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmxpZ2h0LkFtYmllbnR9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5BbWJpZW50LnByb3RvdHlwZVxyXG4gICAgICovXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW1iaWVudFNITGlnaHQ7XHJcbiIsImltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4uL2NvcmUvdXRpbCc7XHJcblxyXG52YXIgVGV4dHVyZVBvb2wgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdGhpcy5fcG9vbCA9IHt9O1xyXG5cclxuICAgIHRoaXMuX2FsbG9jYXRlZFRleHR1cmVzID0gW107XHJcbn07XHJcblxyXG5UZXh0dXJlUG9vbC5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IFRleHR1cmVQb29sLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24gKHBhcmFtZXRlcnMpIHtcclxuICAgICAgICB2YXIga2V5ID0gZ2VuZXJhdGVLZXkocGFyYW1ldGVycyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wb29sLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcG9vbFtrZXldID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsaXN0ID0gdGhpcy5fcG9vbFtrZXldO1xyXG4gICAgICAgIGlmICghbGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICB0aGlzLl9hbGxvY2F0ZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxpc3QucG9wKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIHB1dDogZnVuY3Rpb24gKHRleHR1cmUpIHtcclxuICAgICAgICB2YXIga2V5ID0gZ2VuZXJhdGVLZXkodGV4dHVyZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wb29sLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcG9vbFtrZXldID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsaXN0ID0gdGhpcy5fcG9vbFtrZXldO1xyXG4gICAgICAgIGxpc3QucHVzaCh0ZXh0dXJlKTtcclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXI6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXNbaV0uZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3Bvb2wgPSB7fTtcclxuICAgICAgICB0aGlzLl9hbGxvY2F0ZWRUZXh0dXJlcyA9IFtdO1xyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIGRlZmF1bHRQYXJhbXMgPSB7XHJcbiAgICB3aWR0aDogNTEyLFxyXG4gICAgaGVpZ2h0OiA1MTIsXHJcbiAgICB0eXBlOiBnbGVudW0uVU5TSUdORURfQllURSxcclxuICAgIGZvcm1hdDogZ2xlbnVtLlJHQkEsXHJcbiAgICB3cmFwUzogZ2xlbnVtLkNMQU1QX1RPX0VER0UsXHJcbiAgICB3cmFwVDogZ2xlbnVtLkNMQU1QX1RPX0VER0UsXHJcbiAgICBtaW5GaWx0ZXI6IGdsZW51bS5MSU5FQVJfTUlQTUFQX0xJTkVBUixcclxuICAgIG1hZ0ZpbHRlcjogZ2xlbnVtLkxJTkVBUixcclxuICAgIHVzZU1pcG1hcDogdHJ1ZSxcclxuICAgIGFuaXNvdHJvcGljOiAxLFxyXG4gICAgZmxpcFk6IHRydWUsXHJcbiAgICB1bnBhY2tBbGlnbm1lbnQ6IDQsXHJcbiAgICBwcmVtdWx0aXBseUFscGhhOiBmYWxzZVxyXG59O1xyXG5cclxudmFyIGRlZmF1bHRQYXJhbVByb3BMaXN0ID0gT2JqZWN0LmtleXMoZGVmYXVsdFBhcmFtcyk7XHJcblxyXG5mdW5jdGlvbiBnZW5lcmF0ZUtleShwYXJhbWV0ZXJzKSB7XHJcbiAgICB1dGlsLmRlZmF1bHRzV2l0aFByb3BMaXN0KHBhcmFtZXRlcnMsIGRlZmF1bHRQYXJhbXMsIGRlZmF1bHRQYXJhbVByb3BMaXN0KTtcclxuICAgIGZhbGxCYWNrKHBhcmFtZXRlcnMpO1xyXG5cclxuICAgIHZhciBrZXkgPSAnJztcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVmYXVsdFBhcmFtUHJvcExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgbmFtZSA9IGRlZmF1bHRQYXJhbVByb3BMaXN0W2ldO1xyXG4gICAgICAgIHZhciBjaHVuayA9IHBhcmFtZXRlcnNbbmFtZV0udG9TdHJpbmcoKTtcclxuICAgICAgICBrZXkgKz0gY2h1bms7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ga2V5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBmYWxsQmFjayh0YXJnZXQpIHtcclxuXHJcbiAgICB2YXIgSVBPVCA9IGlzUG93ZXJPZlR3byh0YXJnZXQud2lkdGgsIHRhcmdldC5oZWlnaHQpO1xyXG5cclxuICAgIGlmICh0YXJnZXQuZm9ybWF0ID09PSBnbGVudW0uREVQVEhfQ09NUE9ORU5UKSB7XHJcbiAgICAgICAgdGFyZ2V0LnVzZU1pcG1hcCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghSVBPVCB8fCAhdGFyZ2V0LnVzZU1pcG1hcCkge1xyXG4gICAgICAgIGlmICh0YXJnZXQubWluRmlsdGVyID09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUIHx8XHJcbiAgICAgICAgICAgIHRhcmdldC5taW5GaWx0ZXIgPT0gZ2xlbnVtLk5FQVJFU1RfTUlQTUFQX0xJTkVBUikge1xyXG4gICAgICAgICAgICB0YXJnZXQubWluRmlsdGVyID0gZ2xlbnVtLk5FQVJFU1Q7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgdGFyZ2V0Lm1pbkZpbHRlciA9PSBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVIgfHxcclxuICAgICAgICAgICAgdGFyZ2V0Lm1pbkZpbHRlciA9PSBnbGVudW0uTElORUFSX01JUE1BUF9ORUFSRVNUXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRhcmdldC5taW5GaWx0ZXIgPSBnbGVudW0uTElORUFSO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghSVBPVCkge1xyXG4gICAgICAgIHRhcmdldC53cmFwUyA9IGdsZW51bS5DTEFNUF9UT19FREdFO1xyXG4gICAgICAgIHRhcmdldC53cmFwVCA9IGdsZW51bS5DTEFNUF9UT19FREdFO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1Bvd2VyT2ZUd28od2lkdGgsIGhlaWdodCkge1xyXG4gICAgcmV0dXJuICh3aWR0aCAmICh3aWR0aC0xKSkgPT09IDAgJiZcclxuICAgICAgICAgICAgKGhlaWdodCAmIChoZWlnaHQtMSkpID09PSAwO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlUG9vbDtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuc20uZGVwdGgudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA9IHZlYzIoMS4wLCAxLjApO1xcbnVuaWZvcm0gdmVjMiB1dk9mZnNldCA9IHZlYzIoMC4wLCAwLjApO1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52YXJ5aW5nIHZlYzQgdl9WaWV3UG9zaXRpb247XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudm9pZCBtYWluKCl7XFxuIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiNlbmRpZlxcbiB2X1ZpZXdQb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG4gZ2xfUG9zaXRpb24gPSB2X1ZpZXdQb3NpdGlvbjtcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkICogdXZSZXBlYXQgKyB1dk9mZnNldDtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zbS5kZXB0aC5mcmFnbWVudFxcbnZhcnlpbmcgdmVjNCB2X1ZpZXdQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIGZsb2F0IGJpYXMgOiAwLjAwMTtcXG51bmlmb3JtIGZsb2F0IHNsb3BlU2NhbGUgOiAxLjA7XFxudW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XFxudW5pZm9ybSBmbG9hdCBhbHBoYUN1dG9mZjogMC4wO1xcbkBpbXBvcnQgY2xheS51dGlsLmVuY29kZV9mbG9hdFxcbnZvaWQgbWFpbigpe1xcbiBmbG9hdCBkZXB0aCA9IHZfVmlld1Bvc2l0aW9uLnogLyB2X1ZpZXdQb3NpdGlvbi53O1xcbiBpZiAoYWxwaGFDdXRvZmYgPiAwLjApIHtcXG4gaWYgKHRleHR1cmUyRChhbHBoYU1hcCwgdl9UZXhjb29yZCkuYSA8PSBhbHBoYUN1dG9mZikge1xcbiBkaXNjYXJkO1xcbiB9XFxuIH1cXG4jaWZkZWYgVVNFX1ZTTVxcbiBkZXB0aCA9IGRlcHRoICogMC41ICsgMC41O1xcbiBmbG9hdCBtb21lbnQxID0gZGVwdGg7XFxuIGZsb2F0IG1vbWVudDIgPSBkZXB0aCAqIGRlcHRoO1xcbiAjaWZkZWYgU1VQUE9SVF9TVEFOREFSRF9ERVJJVkFUSVZFU1xcbiBmbG9hdCBkeCA9IGRGZHgoZGVwdGgpO1xcbiBmbG9hdCBkeSA9IGRGZHkoZGVwdGgpO1xcbiBtb21lbnQyICs9IDAuMjUqKGR4KmR4K2R5KmR5KTtcXG4gI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQobW9tZW50MSwgbW9tZW50MiwgMC4wLCAxLjApO1xcbiNlbHNlXFxuICNpZmRlZiBTVVBQT1JUX1NUQU5EQVJEX0RFUklWQVRJVkVTXFxuIGZsb2F0IGR4ID0gZEZkeChkZXB0aCk7XFxuIGZsb2F0IGR5ID0gZEZkeShkZXB0aCk7XFxuIGRlcHRoICs9IHNxcnQoZHgqZHggKyBkeSpkeSkgKiBzbG9wZVNjYWxlICsgYmlhcztcXG4gI2Vsc2VcXG4gZGVwdGggKz0gYmlhcztcXG4gI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUZsb2F0KGRlcHRoICogMC41ICsgMC41KTtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zbS5kZWJ1Z19kZXB0aFxcbnVuaWZvcm0gc2FtcGxlcjJEIGRlcHRoTWFwO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbnZvaWQgbWFpbigpIHtcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQoZGVwdGhNYXAsIHZfVGV4Y29vcmQpO1xcbiNpZmRlZiBVU0VfVlNNXFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQodGV4LnJnYiwgMS4wKTtcXG4jZWxzZVxcbiBmbG9hdCBkZXB0aCA9IGRlY29kZUZsb2F0KHRleCk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoZGVwdGgsIGRlcHRoLCBkZXB0aCwgMS4wKTtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zbS5kaXN0YW5jZS52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG52b2lkIG1haW4gKCl7XFxuIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiNlbmRpZlxcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiAsIDEuMCk7XFxuIHZfV29ybGRQb3NpdGlvbiA9ICh3b3JsZCAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApKS54eXo7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc20uZGlzdGFuY2UuZnJhZ21lbnRcXG51bmlmb3JtIHZlYzMgbGlnaHRQb3NpdGlvbjtcXG51bmlmb3JtIGZsb2F0IHJhbmdlIDogMTAwO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxuQGltcG9ydCBjbGF5LnV0aWwuZW5jb2RlX2Zsb2F0XFxudm9pZCBtYWluKCl7XFxuIGZsb2F0IGRpc3QgPSBkaXN0YW5jZShsaWdodFBvc2l0aW9uLCB2X1dvcmxkUG9zaXRpb24pO1xcbiNpZmRlZiBVU0VfVlNNXFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoZGlzdCwgZGlzdCAqIGRpc3QsIDAuMCwgMC4wKTtcXG4jZWxzZVxcbiBkaXN0ID0gZGlzdCAvIHJhbmdlO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVGbG9hdChkaXN0KTtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG5AaW1wb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG5mbG9hdCB0YXBTaGFkb3dNYXAoc2FtcGxlcjJEIG1hcCwgdmVjMiB1diwgZmxvYXQgeil7XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKG1hcCwgdXYpO1xcbiByZXR1cm4gc3RlcCh6LCBkZWNvZGVGbG9hdCh0ZXgpICogMi4wIC0gMS4wKTtcXG59XFxuZmxvYXQgcGNmKHNhbXBsZXIyRCBtYXAsIHZlYzIgdXYsIGZsb2F0IHosIGZsb2F0IHRleHR1cmVTaXplLCB2ZWMyIHNjYWxlKSB7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSB0YXBTaGFkb3dNYXAobWFwLCB1diwgeik7XFxuIHZlYzIgb2Zmc2V0ID0gdmVjMigxLjAgLyB0ZXh0dXJlU2l6ZSkgKiBzY2FsZTtcXG4jaWZkZWYgUENGX0tFUk5FTF9TSVpFXFxuIGZvciAoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBQQ0ZfS0VSTkVMX1NJWkU7IF9pZHhfKyspIHt7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYgKyBvZmZzZXQgKiBwY2ZLZXJuZWxbX2lkeF9dLCB6KTtcXG4gfX1cXG4gcmV0dXJuIHNoYWRvd0NvbnRyaWIgLyBmbG9hdChQQ0ZfS0VSTkVMX1NJWkUgKyAxKTtcXG4jZWxzZVxcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIob2Zmc2V0LngsIDAuMCksIHopO1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIob2Zmc2V0LngsIG9mZnNldC55KSwgeik7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigtb2Zmc2V0LngsIG9mZnNldC55KSwgeik7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigwLjAsIG9mZnNldC55KSwgeik7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigtb2Zmc2V0LngsIDAuMCksIHopO1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIoLW9mZnNldC54LCAtb2Zmc2V0LnkpLCB6KTtcXG4gc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKG9mZnNldC54LCAtb2Zmc2V0LnkpLCB6KTtcXG4gc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKDAuMCwgLW9mZnNldC55KSwgeik7XFxuIHJldHVybiBzaGFkb3dDb250cmliIC8gOS4wO1xcbiNlbmRpZlxcbn1cXG5mbG9hdCBwY2Yoc2FtcGxlcjJEIG1hcCwgdmVjMiB1diwgZmxvYXQgeiwgZmxvYXQgdGV4dHVyZVNpemUpIHtcXG4gcmV0dXJuIHBjZihtYXAsIHV2LCB6LCB0ZXh0dXJlU2l6ZSwgdmVjMigxLjApKTtcXG59XFxuZmxvYXQgY2hlYnlzaGV2VXBwZXJCb3VuZCh2ZWMyIG1vbWVudHMsIGZsb2F0IHope1xcbiBmbG9hdCBwID0gMC4wO1xcbiB6ID0geiAqIDAuNSArIDAuNTtcXG4gaWYgKHogPD0gbW9tZW50cy54KSB7XFxuIHAgPSAxLjA7XFxuIH1cXG4gZmxvYXQgdmFyaWFuY2UgPSBtb21lbnRzLnkgLSBtb21lbnRzLnggKiBtb21lbnRzLng7XFxuIHZhcmlhbmNlID0gbWF4KHZhcmlhbmNlLCAwLjAwMDAwMDEpO1xcbiBmbG9hdCBtRCA9IG1vbWVudHMueCAtIHo7XFxuIGZsb2F0IHBNYXggPSB2YXJpYW5jZSAvICh2YXJpYW5jZSArIG1EICogbUQpO1xcbiBwTWF4ID0gY2xhbXAoKHBNYXgtMC40KS8oMS4wLTAuNCksIDAuMCwgMS4wKTtcXG4gcmV0dXJuIG1heChwLCBwTWF4KTtcXG59XFxuZmxvYXQgY29tcHV0ZVNoYWRvd0NvbnRyaWIoXFxuIHNhbXBsZXIyRCBtYXAsIG1hdDQgbGlnaHRWUE0sIHZlYzMgcG9zaXRpb24sIGZsb2F0IHRleHR1cmVTaXplLCB2ZWMyIHNjYWxlLCB2ZWMyIG9mZnNldFxcbikge1xcbiB2ZWM0IHBvc0luTGlnaHRTcGFjZSA9IGxpZ2h0VlBNICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gcG9zSW5MaWdodFNwYWNlLnh5eiAvPSBwb3NJbkxpZ2h0U3BhY2UudztcXG4gZmxvYXQgeiA9IHBvc0luTGlnaHRTcGFjZS56O1xcbiBpZihhbGwoZ3JlYXRlclRoYW4ocG9zSW5MaWdodFNwYWNlLnh5eiwgdmVjMygtMC45OSwgLTAuOTksIC0xLjApKSkgJiZcXG4gYWxsKGxlc3NUaGFuKHBvc0luTGlnaHRTcGFjZS54eXosIHZlYzMoMC45OSwgMC45OSwgMS4wKSkpKXtcXG4gdmVjMiB1diA9IChwb3NJbkxpZ2h0U3BhY2UueHkrMS4wKSAvIDIuMDtcXG4gI2lmZGVmIFVTRV9WU01cXG4gdmVjMiBtb21lbnRzID0gdGV4dHVyZTJEKG1hcCwgdXYgKiBzY2FsZSArIG9mZnNldCkueHk7XFxuIHJldHVybiBjaGVieXNoZXZVcHBlckJvdW5kKG1vbWVudHMsIHopO1xcbiAjZWxzZVxcbiByZXR1cm4gcGNmKG1hcCwgdXYgKiBzY2FsZSArIG9mZnNldCwgeiwgdGV4dHVyZVNpemUsIHNjYWxlKTtcXG4gI2VuZGlmXFxuIH1cXG4gcmV0dXJuIDEuMDtcXG59XFxuZmxvYXQgY29tcHV0ZVNoYWRvd0NvbnRyaWIoc2FtcGxlcjJEIG1hcCwgbWF0NCBsaWdodFZQTSwgdmVjMyBwb3NpdGlvbiwgZmxvYXQgdGV4dHVyZVNpemUpIHtcXG4gcmV0dXJuIGNvbXB1dGVTaGFkb3dDb250cmliKG1hcCwgbGlnaHRWUE0sIHBvc2l0aW9uLCB0ZXh0dXJlU2l6ZSwgdmVjMigxLjApLCB2ZWMyKDAuMCkpO1xcbn1cXG5mbG9hdCBjb21wdXRlU2hhZG93Q29udHJpYk9tbmkoc2FtcGxlckN1YmUgbWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgcmFuZ2UpXFxue1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKGRpcmVjdGlvbik7XFxuIHZlYzQgc2hhZG93VGV4ID0gdGV4dHVyZUN1YmUobWFwLCBkaXJlY3Rpb24pO1xcbiNpZmRlZiBVU0VfVlNNXFxuIHZlYzIgbW9tZW50cyA9IHNoYWRvd1RleC54eTtcXG4gZmxvYXQgdmFyaWFuY2UgPSBtb21lbnRzLnkgLSBtb21lbnRzLnggKiBtb21lbnRzLng7XFxuIGZsb2F0IG1EID0gbW9tZW50cy54IC0gZGlzdDtcXG4gZmxvYXQgcCA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgbUQgKiBtRCk7XFxuIGlmKG1vbWVudHMueCArIDAuMDAxIDwgZGlzdCl7XFxuIHJldHVybiBjbGFtcChwLCAwLjAsIDEuMCk7XFxuIH1lbHNle1xcbiByZXR1cm4gMS4wO1xcbiB9XFxuI2Vsc2VcXG4gcmV0dXJuIHN0ZXAoZGlzdCwgKGRlY29kZUZsb2F0KHNoYWRvd1RleCkgKyAwLjAwMDIpICogcmFuZ2UpO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnBsdWdpbi5jb21wdXRlX3NoYWRvd19tYXBcXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVCkgfHwgZGVmaW5lZChESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpIHx8IGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiNpZmRlZiBTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVFxcbnVuaWZvcm0gc2FtcGxlcjJEIHNwb3RMaWdodFNoYWRvd01hcHNbU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gbWF0NCBzcG90TGlnaHRNYXRyaWNlc1tTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBmbG9hdCBzcG90TGlnaHRTaGFkb3dNYXBTaXplc1tTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxuI2VuZGlmXFxuI2lmZGVmIERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVFxcbiNpZiBkZWZpbmVkKFNIQURPV19DQVNDQURFKVxcbnVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzWzFdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXNbU0hBRE9XX0NBU0NBREVdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gZmxvYXQgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzWzFdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gZmxvYXQgc2hhZG93Q2FzY2FkZUNsaXBzTmVhcltTSEFET1dfQ0FTQ0FERV06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBmbG9hdCBzaGFkb3dDYXNjYWRlQ2xpcHNGYXJbU0hBRE9XX0NBU0NBREVdOnVuY29uZmlndXJhYmxlO1xcbiNlbHNlXFxudW5pZm9ybSBzYW1wbGVyMkQgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHNbRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIG1hdDQgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzW0RJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBmbG9hdCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXNbRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG4jZW5kaWZcXG4jZW5kaWZcXG4jaWZkZWYgUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UXFxudW5pZm9ybSBzYW1wbGVyQ3ViZSBwb2ludExpZ2h0U2hhZG93TWFwc1tQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbiNlbmRpZlxcbnVuaWZvcm0gYm9vbCBzaGFkb3dFbmFibGVkIDogdHJ1ZTtcXG4jaWZkZWYgUENGX0tFUk5FTF9TSVpFXFxudW5pZm9ybSB2ZWMyIHBjZktlcm5lbFtQQ0ZfS0VSTkVMX1NJWkVdO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG52b2lkIGNvbXB1dGVTaGFkb3dPZlNwb3RMaWdodHModmVjMyBwb3NpdGlvbiwgaW5vdXQgZmxvYXQgc2hhZG93Q29udHJpYnNbU1BPVF9MSUdIVF9DT1VOVF0gKSB7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWI7XFxuIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmliID0gY29tcHV0ZVNoYWRvd0NvbnRyaWIoXFxuIHNwb3RMaWdodFNoYWRvd01hcHNbX2lkeF9dLCBzcG90TGlnaHRNYXRyaWNlc1tfaWR4X10sIHBvc2l0aW9uLFxcbiBzcG90TGlnaHRTaGFkb3dNYXBTaXplc1tfaWR4X11cXG4gKTtcXG4gc2hhZG93Q29udHJpYnNbX2lkeF9dID0gc2hhZG93Q29udHJpYjtcXG4gfX1cXG4gZm9yKGludCBfaWR4XyA9IFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XyA8IFNQT1RfTElHSFRfQ09VTlQ7IF9pZHhfKyspe3tcXG4gc2hhZG93Q29udHJpYnNbX2lkeF9dID0gMS4wO1xcbiB9fVxcbn1cXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuI2lmZGVmIFNIQURPV19DQVNDQURFXFxudm9pZCBjb21wdXRlU2hhZG93T2ZEaXJlY3Rpb25hbExpZ2h0cyh2ZWMzIHBvc2l0aW9uLCBpbm91dCBmbG9hdCBzaGFkb3dDb250cmlic1tESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF0pe1xcbiBmbG9hdCBkZXB0aCA9ICgyLjAgKiBnbF9GcmFnQ29vcmQueiAtIGdsX0RlcHRoUmFuZ2UubmVhciAtIGdsX0RlcHRoUmFuZ2UuZmFyKVxcbiAvIChnbF9EZXB0aFJhbmdlLmZhciAtIGdsX0RlcHRoUmFuZ2UubmVhcik7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWI7XFxuIHNoYWRvd0NvbnRyaWJzWzBdID0gMS4wO1xcbiBmb3IgKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgU0hBRE9XX0NBU0NBREU7IF9pZHhfKyspIHt7XFxuIGlmIChcXG4gZGVwdGggPj0gc2hhZG93Q2FzY2FkZUNsaXBzTmVhcltfaWR4X10gJiZcXG4gZGVwdGggPD0gc2hhZG93Q2FzY2FkZUNsaXBzRmFyW19pZHhfXVxcbiApIHtcXG4gc2hhZG93Q29udHJpYiA9IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwc1swXSwgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzW19pZHhfXSwgcG9zaXRpb24sXFxuIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBTaXplc1swXSxcXG4gdmVjMigxLjAgLyBmbG9hdChTSEFET1dfQ0FTQ0FERSksIDEuMCksXFxuIHZlYzIoZmxvYXQoX2lkeF8pIC8gZmxvYXQoU0hBRE9XX0NBU0NBREUpLCAwLjApXFxuICk7XFxuIHNoYWRvd0NvbnRyaWJzWzBdID0gc2hhZG93Q29udHJpYjtcXG4gfVxcbiB9fVxcbiBmb3IoaW50IF9pZHhfID0gRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XyA8IERJUkVDVElPTkFMX0xJR0hUX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmlic1tfaWR4X10gPSAxLjA7XFxuIH19XFxufVxcbiNlbHNlXFxudm9pZCBjb21wdXRlU2hhZG93T2ZEaXJlY3Rpb25hbExpZ2h0cyh2ZWMzIHBvc2l0aW9uLCBpbm91dCBmbG9hdCBzaGFkb3dDb250cmlic1tESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF0pe1xcbiBmbG9hdCBzaGFkb3dDb250cmliO1xcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQ7IF9pZHhfKyspIHt7XFxuIHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYihcXG4gZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHNbX2lkeF9dLCBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXNbX2lkeF9dLCBwb3NpdGlvbixcXG4gZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzW19pZHhfXVxcbiApO1xcbiBzaGFkb3dDb250cmlic1tfaWR4X10gPSBzaGFkb3dDb250cmliO1xcbiB9fVxcbiBmb3IoaW50IF9pZHhfID0gRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XyA8IERJUkVDVElPTkFMX0xJR0hUX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmlic1tfaWR4X10gPSAxLjA7XFxuIH19XFxufVxcbiNlbmRpZlxcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG52b2lkIGNvbXB1dGVTaGFkb3dPZlBvaW50TGlnaHRzKHZlYzMgcG9zaXRpb24sIGlub3V0IGZsb2F0IHNoYWRvd0NvbnRyaWJzW1BPSU5UX0xJR0hUX0NPVU5UXSApe1xcbiB2ZWMzIGxpZ2h0UG9zaXRpb247XFxuIHZlYzMgZGlyZWN0aW9uO1xcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQ7IF9pZHhfKyspIHt7XFxuIGxpZ2h0UG9zaXRpb24gPSBwb2ludExpZ2h0UG9zaXRpb25bX2lkeF9dO1xcbiBkaXJlY3Rpb24gPSBwb3NpdGlvbiAtIGxpZ2h0UG9zaXRpb247XFxuIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IGNvbXB1dGVTaGFkb3dDb250cmliT21uaShwb2ludExpZ2h0U2hhZG93TWFwc1tfaWR4X10sIGRpcmVjdGlvbiwgcG9pbnRMaWdodFJhbmdlW19pZHhfXSk7XFxuIH19XFxuIGZvcihpbnQgX2lkeF8gPSBQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQ7IF9pZHhfIDwgUE9JTlRfTElHSFRfQ09VTlQ7IF9pZHhfKyspIHt7XFxuIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IDEuMDtcXG4gfX1cXG59XFxuI2VuZGlmXFxuI2VuZGlmXFxuQGVuZFwiO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgRnJ1c3R1bSBmcm9tICcuLi9tYXRoL0ZydXN0dW0nO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgUmVuZGVyZXIgZnJvbSAnLi4vUmVuZGVyZXInO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XHJcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tICcuLi9jYW1lcmEvUGVyc3BlY3RpdmUnO1xyXG5pbXBvcnQgT3J0aG9DYW1lcmEgZnJvbSAnLi4vY2FtZXJhL09ydGhvZ3JhcGhpYyc7XHJcblxyXG5pbXBvcnQgUGFzcyBmcm9tICcuLi9jb21wb3NpdG9yL1Bhc3MnO1xyXG5pbXBvcnQgVGV4dHVyZVBvb2wgZnJvbSAnLi4vY29tcG9zaXRvci9UZXh0dXJlUG9vbCc7XHJcblxyXG5pbXBvcnQgbWF0NCBmcm9tICcuLi9nbG1hdHJpeC9tYXQ0JztcclxuXHJcbnZhciB0YXJnZXRzID0gWydweCcsICdueCcsICdweScsICdueScsICdweicsICdueiddO1xyXG5cclxuaW1wb3J0IHNoYWRvd21hcEVzc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9zaGFkb3dtYXAuZ2xzbC5qcyc7XHJcblNoYWRlclsnaW1wb3J0J10oc2hhZG93bWFwRXNzbCk7XHJcblxyXG5mdW5jdGlvbiBnZXREZXB0aE1hdGVyaWFsVW5pZm9ybShyZW5kZXJhYmxlLCBkZXB0aE1hdGVyaWFsLCBzeW1ib2wpIHtcclxuICAgIGlmIChzeW1ib2wgPT09ICdhbHBoYU1hcCcpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ2RpZmZ1c2VNYXAnKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ2FscGhhQ3V0b2ZmJykge1xyXG4gICAgICAgIGlmIChyZW5kZXJhYmxlLm1hdGVyaWFsLmlzRGVmaW5lZCgnZnJhZ21lbnQnLCAnQUxQSEFfVEVTVCcpXHJcbiAgICAgICAgICAgICYmIHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdkaWZmdXNlTWFwJylcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdmFyIGFscGhhQ3V0b2ZmID0gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ2FscGhhQ3V0b2ZmJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBhbHBoYUN1dG9mZiB8fCAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3V2UmVwZWF0Jykge1xyXG4gICAgICAgIHJldHVybiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgndXZSZXBlYXQnKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3V2T2Zmc2V0Jykge1xyXG4gICAgICAgIHJldHVybiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgndXZPZmZzZXQnKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBkZXB0aE1hdGVyaWFsLmdldChzeW1ib2wpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0RlcHRoTWF0ZXJpYWxDaGFuZ2VkKHJlbmRlcmFibGUsIHByZXZSZW5kZXJhYmxlKSB7XHJcbiAgICB2YXIgbWF0QSA9IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICB2YXIgbWF0QiA9IHByZXZSZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgcmV0dXJuIG1hdEEuZ2V0KCdkaWZmdXNlTWFwJykgIT09IG1hdEIuZ2V0KCdkaWZmdXNlTWFwJylcclxuICAgICAgICB8fCAobWF0QS5nZXQoJ2FscGhhQ3V0b2ZmJykgfHwgMCkgIT09IChtYXRCLmdldCgnYWxwaGFDdXRvZmYnKSB8fCAwKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFBhc3MgcmVuZGVyaW5nIHNoYWRvdyBtYXAuXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnByZVBhc3MuU2hhZG93TWFwXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICB2YXIgc2hhZG93TWFwUGFzcyA9IG5ldyBjbGF5LnByZVBhc3MuU2hhZG93TWFwKHtcclxuICogICAgICAgICBzb2Z0U2hhZG93OiBjbGF5LnByZVBhc3MuU2hhZG93TWFwLlZTTVxyXG4gKiAgICAgfSk7XHJcbiAqICAgICAuLi5cclxuICogICAgIGFuaW1hdGlvbi5vbignZnJhbWUnLCBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcbiAqICAgICAgICAgc2hhZG93TWFwUGFzcy5yZW5kZXIocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpO1xyXG4gKiAgICAgICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTtcclxuICogICAgIH0pO1xyXG4gKi9cclxudmFyIFNoYWRvd01hcFBhc3MgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LnByZVBhc3MuU2hhZG93TWFwIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU29mdCBzaGFkb3cgdGVjaG5pcXVlLlxyXG4gICAgICAgICAqIENhbiBiZSB7QGxpbmsgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5QQ0Z9IG9yIHtAbGluayBjbGF5LnByZVBhc3MuU2hhZG93TWFwLlZTTX1cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNvZnRTaGFkb3c6IFNoYWRvd01hcFBhc3MuUENGLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTb2Z0IHNoYWRvdyBibHVyIHNpemVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNoYWRvd0JsdXI6IDEuMCxcclxuXHJcbiAgICAgICAgbGlnaHRGcnVzdHVtQmlhczogJ2F1dG8nLFxyXG5cclxuICAgICAgICBrZXJuZWxQQ0Y6IG5ldyBGbG9hdDMyQXJyYXkoW1xyXG4gICAgICAgICAgICAxLCAwLFxyXG4gICAgICAgICAgICAxLCAxLFxyXG4gICAgICAgICAgICAtMSwgMSxcclxuICAgICAgICAgICAgMCwgMSxcclxuICAgICAgICAgICAgLTEsIDAsXHJcbiAgICAgICAgICAgIC0xLCAtMSxcclxuICAgICAgICAgICAgMSwgLTEsXHJcbiAgICAgICAgICAgIDAsIC0xXHJcbiAgICAgICAgXSksXHJcblxyXG4gICAgICAgIHByZWNpc2lvbjogJ2hpZ2hwJyxcclxuXHJcbiAgICAgICAgX2xhc3RSZW5kZXJOb3RDYXN0U2hhZG93OiBmYWxzZSxcclxuXHJcbiAgICAgICAgX2ZyYW1lQnVmZmVyOiBuZXcgRnJhbWVCdWZmZXIoKSxcclxuXHJcbiAgICAgICAgX3RleHR1cmVzOiB7fSxcclxuICAgICAgICBfc2hhZG93TWFwTnVtYmVyOiB7XHJcbiAgICAgICAgICAgICdQT0lOVF9MSUdIVCc6IDAsXHJcbiAgICAgICAgICAgICdESVJFQ1RJT05BTF9MSUdIVCc6IDAsXHJcbiAgICAgICAgICAgICdTUE9UX0xJR0hUJzogMFxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9kZXB0aE1hdGVyaWFsczoge30sXHJcbiAgICAgICAgX2Rpc3RhbmNlTWF0ZXJpYWxzOiB7fSxcclxuXHJcbiAgICAgICAgX3JlY2VpdmVyczogW10sXHJcbiAgICAgICAgX2xpZ2h0c0Nhc3RTaGFkb3c6IFtdLFxyXG5cclxuICAgICAgICBfbGlnaHRDYW1lcmFzOiB7fSxcclxuICAgICAgICBfbGlnaHRNYXRlcmlhbHM6IHt9LFxyXG5cclxuICAgICAgICBfdGV4dHVyZVBvb2w6IG5ldyBUZXh0dXJlUG9vbCgpXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBHYXVzc2lhbiBmaWx0ZXIgcGFzcyBmb3IgVlNNXHJcbiAgICB0aGlzLl9nYXVzc2lhblBhc3NIID0gbmV3IFBhc3Moe1xyXG4gICAgICAgIGZyYWdtZW50OiBTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IuZ2F1c3NpYW5fYmx1cicpXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2dhdXNzaWFuUGFzc1YgPSBuZXcgUGFzcyh7XHJcbiAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkuY29tcG9zaXRvci5nYXVzc2lhbl9ibHVyJylcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzSC5zZXRVbmlmb3JtKCdibHVyU2l6ZScsIHRoaXMuc2hhZG93Qmx1cik7XHJcbiAgICB0aGlzLl9nYXVzc2lhblBhc3NILnNldFVuaWZvcm0oJ2JsdXJEaXInLCAwLjApO1xyXG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzVi5zZXRVbmlmb3JtKCdibHVyU2l6ZScsIHRoaXMuc2hhZG93Qmx1cik7XHJcbiAgICB0aGlzLl9nYXVzc2lhblBhc3NWLnNldFVuaWZvcm0oJ2JsdXJEaXInLCAxLjApO1xyXG5cclxuICAgIHRoaXMuX291dHB1dERlcHRoUGFzcyA9IG5ldyBQYXNzKHtcclxuICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5zbS5kZWJ1Z19kZXB0aCcpXHJcbiAgICB9KTtcclxufSwge1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZW5kZXIgc2NlbmUgdG8gc2hhZG93IHRleHR1cmVzXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtICB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQ2FtZXJhfSBzY2VuZUNhbWVyYVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW25vdFVwZGF0ZVNjZW5lPWZhbHNlXVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIHJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgc2NlbmVDYW1lcmEsIG5vdFVwZGF0ZVNjZW5lKSB7XHJcbiAgICAgICAgaWYgKCFzY2VuZUNhbWVyYSkge1xyXG4gICAgICAgICAgICBzY2VuZUNhbWVyYSA9IHNjZW5lLmdldE1haW5DYW1lcmEoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXInLCB0aGlzLCByZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhKTtcclxuICAgICAgICB0aGlzLl9yZW5kZXJTaGFkb3dQYXNzKHJlbmRlcmVyLCBzY2VuZSwgc2NlbmVDYW1lcmEsIG5vdFVwZGF0ZVNjZW5lKTtcclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2FmdGVycmVuZGVyJywgdGhpcywgcmVuZGVyZXIsIHNjZW5lLCBzY2VuZUNhbWVyYSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVidWcgcmVuZGVyaW5nIG9mIHNoYWRvdyB0ZXh0dXJlc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gc2l6ZVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIHJlbmRlckRlYnVnOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNpemUpIHtcclxuICAgICAgICByZW5kZXJlci5zYXZlQ2xlYXIoKTtcclxuICAgICAgICB2YXIgdmlld3BvcnQgPSByZW5kZXJlci52aWV3cG9ydDtcclxuICAgICAgICB2YXIgeCA9IDAsIHkgPSAwO1xyXG4gICAgICAgIHZhciB3aWR0aCA9IHNpemUgfHwgdmlld3BvcnQud2lkdGggLyA0O1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSB3aWR0aDtcclxuICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXREZXB0aFBhc3MubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfVlNNJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXREZXB0aFBhc3MubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9WU00nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl90ZXh0dXJlcykge1xyXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW25hbWVdO1xyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCh4LCB5LCB3aWR0aCAqIHRleHR1cmUud2lkdGggLyB0ZXh0dXJlLmhlaWdodCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0RGVwdGhQYXNzLnNldFVuaWZvcm0oJ2RlcHRoTWFwJywgdGV4dHVyZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dERlcHRoUGFzcy5yZW5kZXIocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB4ICs9IHdpZHRoICogdGV4dHVyZS53aWR0aCAvIHRleHR1cmUuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCh2aWV3cG9ydCk7XHJcbiAgICAgICAgcmVuZGVyZXIucmVzdG9yZUNsZWFyKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVSZWNlaXZlcnM6IGZ1bmN0aW9uIChyZW5kZXJlciwgbWVzaCkge1xyXG4gICAgICAgIGlmIChtZXNoLnJlY2VpdmVTaGFkb3cpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVjZWl2ZXJzLnB1c2gobWVzaCk7XHJcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuc2V0KCdzaGFkb3dFbmFibGVkJywgMSk7XHJcblxyXG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLnNldCgncGNmS2VybmVsJywgdGhpcy5rZXJuZWxQQ0YpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC5zZXQoJ3NoYWRvd0VuYWJsZWQnLCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XHJcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfVlNNJyk7XHJcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1BDRl9LRVJORUxfU0laRScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xyXG4gICAgICAgICAgICB2YXIga2VybmVsUENGID0gdGhpcy5rZXJuZWxQQ0Y7XHJcbiAgICAgICAgICAgIGlmIChrZXJuZWxQQ0YgJiYga2VybmVsUENGLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1BDRl9LRVJORUxfU0laRScsIGtlcm5lbFBDRi5sZW5ndGggLyAyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1BDRl9LRVJORUxfU0laRScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNjZW5lLnRyYXZlcnNlKGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl91cGRhdGVSZWNlaXZlcnMocmVuZGVyZXIsIHJlbmRlcmFibGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBsaWdodCA9IHNjZW5lLmxpZ2h0c1tpXTtcclxuICAgICAgICAgICAgaWYgKGxpZ2h0LmNhc3RTaGFkb3cgJiYgIWxpZ2h0LmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRzQ2FzdFNoYWRvdy5wdXNoKGxpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3JlbmRlclNoYWRvd1Bhc3M6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhLCBub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgIC8vIHJlc2V0XHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl9zaGFkb3dNYXBOdW1iZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2hhZG93TWFwTnVtYmVyW25hbWVdID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fbGlnaHRzQ2FzdFNoYWRvdy5sZW5ndGggPSAwO1xyXG4gICAgICAgIHRoaXMuX3JlY2VpdmVycy5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIGlmICghbm90VXBkYXRlU2NlbmUpIHtcclxuICAgICAgICAgICAgc2NlbmUudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2VuZUNhbWVyYSkge1xyXG4gICAgICAgICAgICBzY2VuZUNhbWVyYS51cGRhdGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNjZW5lLnVwZGF0ZUxpZ2h0cygpO1xyXG4gICAgICAgIHRoaXMuX3VwZGF0ZShyZW5kZXJlciwgc2NlbmUpO1xyXG5cclxuICAgICAgICAvLyBOZWVkcyB0byB1cGRhdGUgdGhlIHJlY2VpdmVycyBhZ2FpbiBpZiBzaGFkb3dzIGNvbWUgZnJvbSAxIHRvIDAuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9saWdodHNDYXN0U2hhZG93Lmxlbmd0aCAmJiB0aGlzLl9sYXN0UmVuZGVyTm90Q2FzdFNoYWRvdykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9sYXN0UmVuZGVyTm90Q2FzdFNoYWRvdyA9IHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cgPT09IDA7XHJcblxyXG4gICAgICAgIF9nbC5lbmFibGUoX2dsLkRFUFRIX1RFU1QpO1xyXG4gICAgICAgIF9nbC5kZXB0aE1hc2sodHJ1ZSk7XHJcbiAgICAgICAgX2dsLmRpc2FibGUoX2dsLkJMRU5EKTtcclxuXHJcbiAgICAgICAgLy8gQ2xlYXIgd2l0aCBoaWdoLXosIHNvIHRoZSBwYXJ0IG5vdCByZW5kZXJlZCB3aWxsIG5vdCBiZWVuIHNoYWRvd2VkXHJcbiAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIC8vIFRPRE8gcmVzdG9yZVxyXG4gICAgICAgIF9nbC5jbGVhckNvbG9yKDEuMCwgMS4wLCAxLjAsIDEuMCk7XHJcblxyXG4gICAgICAgIC8vIFNoYWRvdyB1bmlmb3Jtc1xyXG4gICAgICAgIHZhciBzcG90TGlnaHRTaGFkb3dNYXBzID0gW107XHJcbiAgICAgICAgdmFyIHNwb3RMaWdodE1hdHJpY2VzID0gW107XHJcbiAgICAgICAgdmFyIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzID0gW107XHJcbiAgICAgICAgdmFyIGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlcyA9IFtdO1xyXG4gICAgICAgIHZhciBzaGFkb3dDYXNjYWRlQ2xpcHMgPSBbXTtcclxuICAgICAgICB2YXIgcG9pbnRMaWdodFNoYWRvd01hcHMgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIGRpckxpZ2h0SGFzQ2FzY2FkZTtcclxuICAgICAgICAvLyBDcmVhdGUgdGV4dHVyZXMgZm9yIHNoYWRvdyBtYXBcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGxpZ2h0ID0gdGhpcy5fbGlnaHRzQ2FzdFNoYWRvd1tpXTtcclxuICAgICAgICAgICAgaWYgKGxpZ2h0LnR5cGUgPT09ICdESVJFQ1RJT05BTF9MSUdIVCcpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGlyTGlnaHRIYXNDYXNjYWRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdPbmx5IG9uZSBkaXJlZWN0aW9uYWwgbGlnaHQgc3VwcG9ydGVkIHdpdGggc2hhZG93IGNhc2NhZGUnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChsaWdodC5zaGFkb3dDYXNjYWRlID4gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignU3VwcG9ydCBhdCBtb3N0IDQgY2FzY2FkZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGxpZ2h0LnNoYWRvd0Nhc2NhZGUgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlyTGlnaHRIYXNDYXNjYWRlID0gbGlnaHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJEaXJlY3Rpb25hbExpZ2h0U2hhZG93KFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lQ2FtZXJhLFxyXG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwcyxcclxuICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobGlnaHQudHlwZSA9PT0gJ1NQT1RfTElHSFQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclNwb3RMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlcixcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZSxcclxuICAgICAgICAgICAgICAgICAgICBsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBzcG90TGlnaHRNYXRyaWNlcyxcclxuICAgICAgICAgICAgICAgICAgICBzcG90TGlnaHRTaGFkb3dNYXBzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxpZ2h0LnR5cGUgPT09ICdQT0lOVF9MSUdIVCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyUG9pbnRMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlcixcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZSxcclxuICAgICAgICAgICAgICAgICAgICBsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBwb2ludExpZ2h0U2hhZG93TWFwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fc2hhZG93TWFwTnVtYmVyW2xpZ2h0LnR5cGVdKys7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBsaWdodFR5cGUgaW4gdGhpcy5fc2hhZG93TWFwTnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHZhciBudW1iZXIgPSB0aGlzLl9zaGFkb3dNYXBOdW1iZXJbbGlnaHRUeXBlXTtcclxuICAgICAgICAgICAgdmFyIGtleSA9IGxpZ2h0VHlwZSArICdfU0hBRE9XTUFQX0NPVU5UJztcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9yZWNlaXZlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fcmVjZWl2ZXJzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5mcmFnbWVudERlZmluZXNba2V5XSAhPT0gbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlciA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsIGtleSwgbnVtYmVyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50Jywga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9yZWNlaXZlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG1lc2ggPSB0aGlzLl9yZWNlaXZlcnNbaV07XHJcbiAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IG1lc2gubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIGlmIChkaXJMaWdodEhhc0Nhc2NhZGUpIHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnU0hBRE9XX0NBU0NBREUnLCBkaXJMaWdodEhhc0Nhc2NhZGUuc2hhZG93Q2FzY2FkZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnU0hBRE9XX0NBU0NBREUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNoYWRvd1VuaWZvcm1zID0gc2NlbmUuc2hhZG93VW5pZm9ybXM7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGdldFNpemUodGV4dHVyZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZS5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXMgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcy5tYXAoZ2V0U2l6ZSk7XHJcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzID0geyB2YWx1ZTogZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMsIHR5cGU6ICd0dicgfTtcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzID0geyB2YWx1ZTogZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzLCB0eXBlOiAnbTR2JyB9O1xyXG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5kaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXMgPSB7IHZhbHVlOiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXMsIHR5cGU6ICcxZnYnIH07XHJcbiAgICAgICAgICAgIGlmIChkaXJMaWdodEhhc0Nhc2NhZGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyID0gc2hhZG93Q2FzY2FkZUNsaXBzLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93Q2FzY2FkZUNsaXBzRmFyID0gc2hhZG93Q2FzY2FkZUNsaXBzLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgc2hhZG93Q2FzY2FkZUNsaXBzRmFyLnNoaWZ0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSBmcm9tIGZhciB0byBuZWFyXHJcbiAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyLnJldmVyc2UoKTtcclxuICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwc0Zhci5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcy5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc2hhZG93Q2FzY2FkZUNsaXBzTmVhciA9IHsgdmFsdWU6IHNoYWRvd0Nhc2NhZGVDbGlwc05lYXIsIHR5cGU6ICcxZnYnIH07XHJcbiAgICAgICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zaGFkb3dDYXNjYWRlQ2xpcHNGYXIgPSB7IHZhbHVlOiBzaGFkb3dDYXNjYWRlQ2xpcHNGYXIsIHR5cGU6ICcxZnYnIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzcG90TGlnaHRTaGFkb3dNYXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIHNwb3RMaWdodFNoYWRvd01hcFNpemVzID0gc3BvdExpZ2h0U2hhZG93TWFwcy5tYXAoZ2V0U2l6ZSk7XHJcbiAgICAgICAgICAgIHZhciBzaGFkb3dVbmlmb3JtcyA9IHNjZW5lLnNoYWRvd1VuaWZvcm1zO1xyXG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zcG90TGlnaHRTaGFkb3dNYXBzID0geyB2YWx1ZTogc3BvdExpZ2h0U2hhZG93TWFwcywgdHlwZTogJ3R2JyB9O1xyXG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zcG90TGlnaHRNYXRyaWNlcyA9IHsgdmFsdWU6IHNwb3RMaWdodE1hdHJpY2VzLCB0eXBlOiAnbTR2JyB9O1xyXG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zcG90TGlnaHRTaGFkb3dNYXBTaXplcyA9IHsgdmFsdWU6IHNwb3RMaWdodFNoYWRvd01hcFNpemVzLCB0eXBlOiAnMWZ2JyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBvaW50TGlnaHRTaGFkb3dNYXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMucG9pbnRMaWdodFNoYWRvd01hcHMgPSB7IHZhbHVlOiBwb2ludExpZ2h0U2hhZG93TWFwcywgdHlwZTogJ3R2JyB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcmVuZGVyRGlyZWN0aW9uYWxMaWdodFNoYWRvdzogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIHNwbGl0RnJ1c3R1bSA9IG5ldyBGcnVzdHVtKCk7XHJcbiAgICAgICAgdmFyIHNwbGl0UHJvak1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgdmFyIGNyb3BCQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdmFyIGNyb3BNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBsaWdodFZpZXdNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBsaWdodFZpZXdQcm9qTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICB2YXIgbGlnaHRQcm9qTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhLCBsaWdodCwgc2hhZG93Q2FzY2FkZUNsaXBzLCBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgZGVmYXVsdFNoYWRvd01hdGVyaWFsID0gdGhpcy5fZ2V0RGVwdGhNYXRlcmlhbChsaWdodCk7XHJcbiAgICAgICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGUuc2hhZG93RGVwdGhNYXRlcmlhbCB8fCBkZWZhdWx0U2hhZG93TWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGlzRGVwdGhNYXRlcmlhbENoYW5nZWQsXHJcbiAgICAgICAgICAgICAgICBnZXRVbmlmb3JtOiBnZXREZXB0aE1hdGVyaWFsVW5pZm9ybSxcclxuICAgICAgICAgICAgICAgIGlmUmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLmNhc3RTaGFkb3c7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc29ydENvbXBhcmU6IFJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAvLyBGaXJzdCBmcmFtZVxyXG4gICAgICAgICAgICBpZiAoIXNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5pc0Zpbml0ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYm91bmRpbmdCb3ggPSBzY2VuZS5nZXRCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgICAgICAgICAgc2NlbmUudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgLmNvcHkoYm91bmRpbmdCb3gpLmFwcGx5VHJhbnNmb3JtKHNjZW5lQ2FtZXJhLnZpZXdNYXRyaXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIENvbnNpZGVyaW5nIG1vdmluZyBzcGVlZCBzaW5jZSB0aGUgYm91bmRpbmcgYm94IGlzIGZyb20gbGFzdCBmcmFtZVxyXG4gICAgICAgICAgICAvLyBUT0RPOiBhZGQgYSBiaWFzXHJcbiAgICAgICAgICAgIHZhciBjbGlwcGVkRmFyID0gTWF0aC5taW4oLXNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5taW4ueiwgc2NlbmVDYW1lcmEuZmFyKTtcclxuICAgICAgICAgICAgdmFyIGNsaXBwZWROZWFyID0gTWF0aC5tYXgoLXNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5tYXgueiwgc2NlbmVDYW1lcmEubmVhcik7XHJcblxyXG4gICAgICAgICAgICB2YXIgbGlnaHRDYW1lcmEgPSB0aGlzLl9nZXREaXJlY3Rpb25hbExpZ2h0Q2FtZXJhKGxpZ2h0LCBzY2VuZSwgc2NlbmVDYW1lcmEpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGx2cE1hdDRBcnIgPSBsaWdodFZpZXdQcm9qTWF0cml4LmFycmF5O1xyXG4gICAgICAgICAgICBsaWdodFByb2pNYXRyaXguY29weShsaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICAgICAgbWF0NC5pbnZlcnQobGlnaHRWaWV3TWF0cml4LmFycmF5LCBsaWdodENhbWVyYS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgIG1hdDQubXVsdGlwbHkobGlnaHRWaWV3TWF0cml4LmFycmF5LCBsaWdodFZpZXdNYXRyaXguYXJyYXksIHNjZW5lQ2FtZXJhLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgbWF0NC5tdWx0aXBseShsdnBNYXQ0QXJyLCBsaWdodFByb2pNYXRyaXguYXJyYXksIGxpZ2h0Vmlld01hdHJpeC5hcnJheSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgY2xpcFBsYW5lcyA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgaXNQZXJzcGVjdGl2ZSA9IHNjZW5lQ2FtZXJhIGluc3RhbmNlb2YgUGVyc3BlY3RpdmVDYW1lcmE7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2NhbGVaID0gKHNjZW5lQ2FtZXJhLm5lYXIgKyBzY2VuZUNhbWVyYS5mYXIpIC8gKHNjZW5lQ2FtZXJhLm5lYXIgLSBzY2VuZUNhbWVyYS5mYXIpO1xyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0WiA9IDIgKiBzY2VuZUNhbWVyYS5uZWFyICogc2NlbmVDYW1lcmEuZmFyIC8gKHNjZW5lQ2FtZXJhLm5lYXIgLSBzY2VuZUNhbWVyYS5mYXIpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBsaWdodC5zaGFkb3dDYXNjYWRlOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjbG9nID0gY2xpcHBlZE5lYXIgKiBNYXRoLnBvdyhjbGlwcGVkRmFyIC8gY2xpcHBlZE5lYXIsIGkgLyBsaWdodC5zaGFkb3dDYXNjYWRlKTtcclxuICAgICAgICAgICAgICAgIHZhciBjdW5pID0gY2xpcHBlZE5lYXIgKyAoY2xpcHBlZEZhciAtIGNsaXBwZWROZWFyKSAqIGkgLyBsaWdodC5zaGFkb3dDYXNjYWRlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGMgPSBjbG9nICogbGlnaHQuY2FzY2FkZVNwbGl0TG9nRmFjdG9yICsgY3VuaSAqICgxIC0gbGlnaHQuY2FzY2FkZVNwbGl0TG9nRmFjdG9yKTtcclxuICAgICAgICAgICAgICAgIGNsaXBQbGFuZXMucHVzaChjKTtcclxuICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwcy5wdXNoKC0oLWMgKiBzY2FsZVogKyBvZmZzZXRaKSAvIC1jKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX2dldFRleHR1cmUobGlnaHQsIGxpZ2h0LnNoYWRvd0Nhc2NhZGUpO1xyXG4gICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcy5wdXNoKHRleHR1cmUpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHZpZXdwb3J0ID0gcmVuZGVyZXIudmlld3BvcnQ7XHJcblxyXG4gICAgICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmF0dGFjaCh0ZXh0dXJlKTtcclxuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIF9nbC5jbGVhcihfZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IF9nbC5ERVBUSF9CVUZGRVJfQklUKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlnaHQuc2hhZG93Q2FzY2FkZTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHNwbGl0dGVkIGZydXN0dW1cclxuICAgICAgICAgICAgICAgIHZhciBuZWFyUGxhbmUgPSBjbGlwUGxhbmVzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGZhclBsYW5lID0gY2xpcFBsYW5lc1tpICsgMV07XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNQZXJzcGVjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdDQucGVyc3BlY3RpdmUoc3BsaXRQcm9qTWF0cml4LmFycmF5LCBzY2VuZUNhbWVyYS5mb3YgLyAxODAgKiBNYXRoLlBJLCBzY2VuZUNhbWVyYS5hc3BlY3QsIG5lYXJQbGFuZSwgZmFyUGxhbmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0NC5vcnRobyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRQcm9qTWF0cml4LmFycmF5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2VuZUNhbWVyYS5sZWZ0LCBzY2VuZUNhbWVyYS5yaWdodCwgc2NlbmVDYW1lcmEuYm90dG9tLCBzY2VuZUNhbWVyYS50b3AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lYXJQbGFuZSwgZmFyUGxhbmVcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc3BsaXRGcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uKHNwbGl0UHJvak1hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICBzcGxpdEZydXN0dW0uZ2V0VHJhbnNmb3JtZWRCb3VuZGluZ0JveChjcm9wQkJveCwgbGlnaHRWaWV3TWF0cml4KTtcclxuICAgICAgICAgICAgICAgIGNyb3BCQm94LmFwcGx5UHJvamVjdGlvbihsaWdodFByb2pNYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIF9taW4gPSBjcm9wQkJveC5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgICAgICB2YXIgX21heCA9IGNyb3BCQm94Lm1heC5hcnJheTtcclxuICAgICAgICAgICAgICAgIF9taW5bMF0gPSBNYXRoLm1heChfbWluWzBdLCAtMSk7XHJcbiAgICAgICAgICAgICAgICBfbWluWzFdID0gTWF0aC5tYXgoX21pblsxXSwgLTEpO1xyXG4gICAgICAgICAgICAgICAgX21heFswXSA9IE1hdGgubWluKF9tYXhbMF0sIDEpO1xyXG4gICAgICAgICAgICAgICAgX21heFsxXSA9IE1hdGgubWluKF9tYXhbMV0sIDEpO1xyXG4gICAgICAgICAgICAgICAgY3JvcE1hdHJpeC5vcnRobyhfbWluWzBdLCBfbWF4WzBdLCBfbWluWzFdLCBfbWF4WzFdLCAxLCAtMSk7XHJcbiAgICAgICAgICAgICAgICBsaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4Lm11bHRpcGx5TGVmdChjcm9wTWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93U2l6ZSA9IGxpZ2h0LnNoYWRvd1Jlc29sdXRpb24gfHwgNTEyO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFJldmVyc2VkLCBsZWZ0IHRvIHJpZ2h0ID0+IGZhciB0byBuZWFyXHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCgobGlnaHQuc2hhZG93Q2FzY2FkZSAtIGkgLSAxKSAqIHNoYWRvd1NpemUsIDAsIHNoYWRvd1NpemUsIHNoYWRvd1NpemUsIDEpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciByZW5kZXJMaXN0ID0gc2NlbmUudXBkYXRlUmVuZGVyTGlzdChsaWdodENhbWVyYSk7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKHJlbmRlckxpc3Qub3BhcXVlLCBsaWdodENhbWVyYSwgcGFzc0NvbmZpZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gRmlsdGVyIGZvciBWU01cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2F1c3NpYW5GaWx0ZXIocmVuZGVyZXIsIHRleHR1cmUsIHRleHR1cmUud2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgICAgICAgICAgbWF0cml4LmNvcHkobGlnaHRDYW1lcmEudmlld01hdHJpeClcclxuICAgICAgICAgICAgICAgICAgICAubXVsdGlwbHlMZWZ0KGxpZ2h0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlcy5wdXNoKG1hdHJpeC5hcnJheSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5jb3B5KGxpZ2h0UHJvak1hdHJpeCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCh2aWV3cG9ydCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgcmVuZGVyU3BvdExpZ2h0U2hhZG93OiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBsaWdodCwgc3BvdExpZ2h0TWF0cmljZXMsIHNwb3RMaWdodFNoYWRvd01hcHMpIHtcclxuXHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9nZXRUZXh0dXJlKGxpZ2h0KTtcclxuICAgICAgICB2YXIgbGlnaHRDYW1lcmEgPSB0aGlzLl9nZXRTcG90TGlnaHRDYW1lcmEobGlnaHQpO1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUpO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICBfZ2wuY2xlYXIoX2dsLkNPTE9SX0JVRkZFUl9CSVQgfCBfZ2wuREVQVEhfQlVGRkVSX0JJVCk7XHJcblxyXG4gICAgICAgIHZhciBkZWZhdWx0U2hhZG93TWF0ZXJpYWwgPSB0aGlzLl9nZXREZXB0aE1hdGVyaWFsKGxpZ2h0KTtcclxuICAgICAgICB2YXIgcGFzc0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5zaGFkb3dEZXB0aE1hdGVyaWFsIHx8IGRlZmF1bHRTaGFkb3dNYXRlcmlhbDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGlzRGVwdGhNYXRlcmlhbENoYW5nZWQsXHJcbiAgICAgICAgICAgIGdldFVuaWZvcm06IGdldERlcHRoTWF0ZXJpYWxVbmlmb3JtLFxyXG4gICAgICAgICAgICBpZlJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLmNhc3RTaGFkb3c7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNvcnRDb21wYXJlOiBSZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJMaXN0ID0gc2NlbmUudXBkYXRlUmVuZGVyTGlzdChsaWdodENhbWVyYSk7XHJcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhyZW5kZXJMaXN0Lm9wYXF1ZSwgbGlnaHRDYW1lcmEsIHBhc3NDb25maWcpO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAvLyBGaWx0ZXIgZm9yIFZTTVxyXG4gICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2dhdXNzaWFuRmlsdGVyKHJlbmRlcmVyLCB0ZXh0dXJlLCB0ZXh0dXJlLndpZHRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIG1hdHJpeC5jb3B5KGxpZ2h0Q2FtZXJhLndvcmxkVHJhbnNmb3JtKVxyXG4gICAgICAgICAgICAuaW52ZXJ0KClcclxuICAgICAgICAgICAgLm11bHRpcGx5TGVmdChsaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgc3BvdExpZ2h0U2hhZG93TWFwcy5wdXNoKHRleHR1cmUpO1xyXG4gICAgICAgIHNwb3RMaWdodE1hdHJpY2VzLnB1c2gobWF0cml4LmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVuZGVyUG9pbnRMaWdodFNoYWRvdzogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgbGlnaHQsIHBvaW50TGlnaHRTaGFkb3dNYXBzKSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9nZXRUZXh0dXJlKGxpZ2h0KTtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgcG9pbnRMaWdodFNoYWRvd01hcHMucHVzaCh0ZXh0dXJlKTtcclxuXHJcbiAgICAgICAgdmFyIGRlZmF1bHRTaGFkb3dNYXRlcmlhbCA9IHRoaXMuX2dldERlcHRoTWF0ZXJpYWwobGlnaHQpO1xyXG4gICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLnNoYWRvd0RlcHRoTWF0ZXJpYWwgfHwgZGVmYXVsdFNoYWRvd01hdGVyaWFsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnZXRVbmlmb3JtOiBnZXREZXB0aE1hdGVyaWFsVW5pZm9ybSxcclxuICAgICAgICAgICAgc29ydENvbXBhcmU6IFJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIHJlbmRlckxpc3RFYWNoU2lkZSA9IHtcclxuICAgICAgICAgICAgcHg6IFtdLCBweTogW10sIHB6OiBbXSwgbng6IFtdLCBueTogW10sIG56OiBbXVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIGJib3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB2YXIgbGlnaHRXb3JsZFBvc2l0aW9uID0gbGlnaHQuZ2V0V29ybGRQb3NpdGlvbigpLmFycmF5O1xyXG4gICAgICAgIHZhciBsaWdodEJCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB2YXIgcmFuZ2UgPSBsaWdodC5yYW5nZTtcclxuICAgICAgICBsaWdodEJCb3gubWluLnNldEFycmF5KGxpZ2h0V29ybGRQb3NpdGlvbik7XHJcbiAgICAgICAgbGlnaHRCQm94Lm1heC5zZXRBcnJheShsaWdodFdvcmxkUG9zaXRpb24pO1xyXG4gICAgICAgIHZhciBleHRlbnQgPSBuZXcgVmVjdG9yMyhyYW5nZSwgcmFuZ2UsIHJhbmdlKTtcclxuICAgICAgICBsaWdodEJCb3gubWF4LmFkZChleHRlbnQpO1xyXG4gICAgICAgIGxpZ2h0QkJveC5taW4uc3ViKGV4dGVudCk7XHJcblxyXG4gICAgICAgIHZhciB0YXJnZXRzTmVlZFJlbmRlciA9IHsgcHg6IGZhbHNlLCBweTogZmFsc2UsIHB6OiBmYWxzZSwgbng6IGZhbHNlLCBueTogZmFsc2UsIG56OiBmYWxzZSB9O1xyXG4gICAgICAgIHNjZW5lLnRyYXZlcnNlKGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLmlzUmVuZGVyYWJsZSgpICYmIHJlbmRlcmFibGUuY2FzdFNoYWRvdykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gcmVuZGVyYWJsZS5nZW9tZXRyeTtcclxuICAgICAgICAgICAgICAgIGlmICghZ2VvbWV0cnkuYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGlzdEVhY2hTaWRlW3RhcmdldHNbaV1dLnB1c2gocmVuZGVyYWJsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJib3gudHJhbnNmb3JtRnJvbShnZW9tZXRyeS5ib3VuZGluZ0JveCwgcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWJib3guaW50ZXJzZWN0Qm91bmRpbmdCb3gobGlnaHRCQm94KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBiYm94LnVwZGF0ZVZlcnRpY2VzKCk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRzTmVlZFJlbmRlclt0YXJnZXRzW2ldXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdnR4ID0gYmJveC52ZXJ0aWNlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IHZ0eFswXSAtIGxpZ2h0V29ybGRQb3NpdGlvblswXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IHZ0eFsxXSAtIGxpZ2h0V29ybGRQb3NpdGlvblsxXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeiA9IHZ0eFsyXSAtIGxpZ2h0V29ybGRQb3NpdGlvblsyXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYWJzeCA9IE1hdGguYWJzKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhYnN5ID0gTWF0aC5hYnMoeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFic3ogPSBNYXRoLmFicyh6KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWJzeCA+IGFic3kpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFic3ggPiBhYnN6KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzTmVlZFJlbmRlclt4ID4gMCA/ICdweCcgOiAnbngnXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzTmVlZFJlbmRlclt6ID4gMCA/ICdweicgOiAnbnonXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYnN5ID4gYWJzeikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c05lZWRSZW5kZXJbeSA+IDAgPyAncHknIDogJ255J10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c05lZWRSZW5kZXJbeiA+IDAgPyAncHonIDogJ256J10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YXJnZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldHNOZWVkUmVuZGVyW3RhcmdldHNbaV1dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxpc3RFYWNoU2lkZVt0YXJnZXRzW2ldXS5wdXNoKHJlbmRlcmFibGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGFyZ2V0c1tpXTtcclxuICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuX2dldFBvaW50TGlnaHRDYW1lcmEobGlnaHQsIHRhcmdldCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5hdHRhY2godGV4dHVyZSwgX2dsLkNPTE9SX0FUVEFDSE1FTlQwLCBfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICBfZ2wuY2xlYXIoX2dsLkNPTE9SX0JVRkZFUl9CSVQgfCBfZ2wuREVQVEhfQlVGRkVSX0JJVCk7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKHJlbmRlckxpc3RFYWNoU2lkZVt0YXJnZXRdLCBjYW1lcmEsIHBhc3NDb25maWcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2dldERlcHRoTWF0ZXJpYWw6IGZ1bmN0aW9uIChsaWdodCkge1xyXG4gICAgICAgIHZhciBzaGFkb3dNYXRlcmlhbCA9IHRoaXMuX2xpZ2h0TWF0ZXJpYWxzW2xpZ2h0Ll9fdWlkX19dO1xyXG4gICAgICAgIHZhciBpc1BvaW50TGlnaHQgPSBsaWdodC50eXBlID09PSAnUE9JTlRfTElHSFQnO1xyXG4gICAgICAgIGlmICghc2hhZG93TWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgdmFyIHNoYWRlclByZWZpeCA9IGlzUG9pbnRMaWdodCA/ICdjbGF5LnNtLmRpc3RhbmNlLicgOiAnY2xheS5zbS5kZXB0aC4nO1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IHRoaXMucHJlY2lzaW9uLFxyXG4gICAgICAgICAgICAgICAgc2hhZGVyOiBuZXcgU2hhZGVyKFNoYWRlci5zb3VyY2Uoc2hhZGVyUHJlZml4ICsgJ3ZlcnRleCcpLCBTaGFkZXIuc291cmNlKHNoYWRlclByZWZpeCArICdmcmFnbWVudCcpKVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2xpZ2h0TWF0ZXJpYWxzW2xpZ2h0Ll9fdWlkX19dID0gc2hhZG93TWF0ZXJpYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsaWdodC5zaGFkb3dTbG9wZVNjYWxlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwuc2V0VW5pZm9ybSgnc2xvcGVTY2FsZScsIGxpZ2h0LnNoYWRvd1Nsb3BlU2NhbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGlnaHQuc2hhZG93QmlhcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHNoYWRvd01hdGVyaWFsLnNldFVuaWZvcm0oJ2JpYXMnLCBsaWdodC5zaGFkb3dCaWFzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc29mdFNoYWRvdyA9PT0gU2hhZG93TWFwUGFzcy5WU00pIHtcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfVlNNJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzUG9pbnRMaWdodCkge1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbC5zZXQoJ2xpZ2h0UG9zaXRpb24nLCBsaWdodC5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXkpO1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbC5zZXQoJ3JhbmdlJywgbGlnaHQucmFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHNoYWRvd01hdGVyaWFsO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZ2F1c3NpYW5GaWx0ZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgdGV4dHVyZSwgc2l6ZSkge1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXIgPSB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBzaXplLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IHNpemUsXHJcbiAgICAgICAgICAgIHR5cGU6IFRleHR1cmUuRkxPQVRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciB0bXBUZXh0dXJlID0gdGhpcy5fdGV4dHVyZVBvb2wuZ2V0KHBhcmFtZXRlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmF0dGFjaCh0bXBUZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NILnNldFVuaWZvcm0oJ3RleHR1cmUnLCB0ZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NILnNldFVuaWZvcm0oJ3RleHR1cmVXaWR0aCcsIHNpemUpO1xyXG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc0gucmVuZGVyKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUpO1xyXG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc1Yuc2V0VW5pZm9ybSgndGV4dHVyZScsIHRtcFRleHR1cmUpO1xyXG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc1Yuc2V0VW5pZm9ybSgndGV4dHVyZUhlaWdodCcsIHNpemUpO1xyXG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc1YucmVuZGVyKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl90ZXh0dXJlUG9vbC5wdXQodG1wVGV4dHVyZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXRUZXh0dXJlOiBmdW5jdGlvbiAobGlnaHQsIGNhc2NhZGUpIHtcclxuICAgICAgICB2YXIga2V5ID0gbGlnaHQuX191aWRfXztcclxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW2tleV07XHJcbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBsaWdodC5zaGFkb3dSZXNvbHV0aW9uIHx8IDUxMjtcclxuICAgICAgICBjYXNjYWRlID0gY2FzY2FkZSB8fCAxO1xyXG4gICAgICAgIGlmICghdGV4dHVyZSkge1xyXG4gICAgICAgICAgICBpZiAobGlnaHQudHlwZSA9PT0gJ1BPSU5UX0xJR0hUJykge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlQ3ViZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBBdCBtb3N0IDQgY2FzY2FkZVxyXG4gICAgICAgICAgICAvLyBUT0RPIHNoYXJlIHdpdGggaGVpZ2h0ID9cclxuICAgICAgICAgICAgdGV4dHVyZS53aWR0aCA9IHJlc29sdXRpb24gKiBjYXNjYWRlO1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmhlaWdodCA9IHJlc29sdXRpb247XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnR5cGUgPSBUZXh0dXJlLkZMT0FUO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5hbmlzb3Ryb3BpYyA9IDQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLm1pbkZpbHRlciA9IGdsZW51bS5ORUFSRVNUO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5tYWdGaWx0ZXIgPSBnbGVudW0uTkVBUkVTVDtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUudXNlTWlwbWFwID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXNba2V5XSA9IHRleHR1cmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgX2dldFBvaW50TGlnaHRDYW1lcmE6IGZ1bmN0aW9uIChsaWdodCwgdGFyZ2V0KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9saWdodENhbWVyYXMucG9pbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5fbGlnaHRDYW1lcmFzLnBvaW50ID0ge1xyXG4gICAgICAgICAgICAgICAgcHg6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxyXG4gICAgICAgICAgICAgICAgbng6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxyXG4gICAgICAgICAgICAgICAgcHk6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxyXG4gICAgICAgICAgICAgICAgbnk6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxyXG4gICAgICAgICAgICAgICAgcHo6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxyXG4gICAgICAgICAgICAgICAgbno6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLl9saWdodENhbWVyYXMucG9pbnRbdGFyZ2V0XTtcclxuXHJcbiAgICAgICAgY2FtZXJhLmZhciA9IGxpZ2h0LnJhbmdlO1xyXG4gICAgICAgIGNhbWVyYS5mb3YgPSA5MDtcclxuICAgICAgICBjYW1lcmEucG9zaXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgICAgIHN3aXRjaCAodGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3B4JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9YLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ254JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9YLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3B5JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9ZLCBWZWN0b3IzLlBPU0lUSVZFX1opO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ255JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9ZLCBWZWN0b3IzLk5FR0FUSVZFX1opO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3B6JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9aLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ256JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9aLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpZ2h0LmdldFdvcmxkUG9zaXRpb24oY2FtZXJhLnBvc2l0aW9uKTtcclxuICAgICAgICBjYW1lcmEudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBjYW1lcmE7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXREaXJlY3Rpb25hbExpZ2h0Q2FtZXJhOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsaWdodFZpZXdNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBzY2VuZVZpZXdCb3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHZhciBsaWdodFZpZXdCQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgLy8gQ2FtZXJhIG9mIGRpcmVjdGlvbmFsIGxpZ2h0IHdpbGwgYmUgYWRqdXN0ZWRcclxuICAgICAgICAvLyB0byBjb250YWluIHRoZSB2aWV3IGZydXN0dW0gYW5kIHNjZW5lIGJvdW5kaW5nIGJveCBhcyB0aWdodGx5IGFzIHBvc3NpYmxlXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChsaWdodCwgc2NlbmUsIHNjZW5lQ2FtZXJhKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fbGlnaHRDYW1lcmFzLmRpcmVjdGlvbmFsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9saWdodENhbWVyYXMuZGlyZWN0aW9uYWwgPSBuZXcgT3J0aG9DYW1lcmEoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fbGlnaHRDYW1lcmFzLmRpcmVjdGlvbmFsO1xyXG5cclxuICAgICAgICAgICAgc2NlbmVWaWV3Qm91bmRpbmdCb3guY29weShzY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUpO1xyXG4gICAgICAgICAgICBzY2VuZVZpZXdCb3VuZGluZ0JveC5pbnRlcnNlY3Rpb24oc2NlbmVDYW1lcmEuZnJ1c3R1bS5ib3VuZGluZ0JveCk7XHJcbiAgICAgICAgICAgIC8vIE1vdmUgdG8gdGhlIGNlbnRlciBvZiBmcnVzdHVtKGluIHdvcmxkIHNwYWNlKVxyXG4gICAgICAgICAgICBjYW1lcmEucG9zaXRpb25cclxuICAgICAgICAgICAgICAgIC5jb3B5KHNjZW5lVmlld0JvdW5kaW5nQm94Lm1pbilcclxuICAgICAgICAgICAgICAgIC5hZGQoc2NlbmVWaWV3Qm91bmRpbmdCb3gubWF4KVxyXG4gICAgICAgICAgICAgICAgLnNjYWxlKDAuNSlcclxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm1NYXQ0KHNjZW5lQ2FtZXJhLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgY2FtZXJhLnJvdGF0aW9uLmNvcHkobGlnaHQucm90YXRpb24pO1xyXG4gICAgICAgICAgICBjYW1lcmEuc2NhbGUuY29weShsaWdodC5zY2FsZSk7XHJcbiAgICAgICAgICAgIGNhbWVyYS51cGRhdGVXb3JsZFRyYW5zZm9ybSgpO1xyXG5cclxuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHRvIGxpZ2h0IHZpZXcgc3BhY2VcclxuICAgICAgICAgICAgTWF0cml4NC5pbnZlcnQobGlnaHRWaWV3TWF0cml4LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KGxpZ2h0Vmlld01hdHJpeCwgbGlnaHRWaWV3TWF0cml4LCBzY2VuZUNhbWVyYS53b3JsZFRyYW5zZm9ybSk7XHJcblxyXG4gICAgICAgICAgICBsaWdodFZpZXdCQm94LmNvcHkoc2NlbmVWaWV3Qm91bmRpbmdCb3gpLmFwcGx5VHJhbnNmb3JtKGxpZ2h0Vmlld01hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgbWluID0gbGlnaHRWaWV3QkJveC5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXggPSBsaWdodFZpZXdCQm94Lm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgICAgIC8vIE1vdmUgY2FtZXJhIHRvIGFkanVzdCB0aGUgbmVhciB0byAwXHJcbiAgICAgICAgICAgIGNhbWVyYS5wb3NpdGlvbi5zZXQoKG1pblswXSArIG1heFswXSkgLyAyLCAobWluWzFdICsgbWF4WzFdKSAvIDIsIG1heFsyXSlcclxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm1NYXQ0KGNhbWVyYS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIGNhbWVyYS5uZWFyID0gMDtcclxuICAgICAgICAgICAgY2FtZXJhLmZhciA9IC1taW5bMl0gKyBtYXhbMl07XHJcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSByZWNlaXZlcnMgbm90IGluIHRoZSBmcnVzdHVtIHdpbGwgc3RpbCByZWNlaXZlIHRoZSBzaGFkb3cuXHJcbiAgICAgICAgICAgIGlmIChpc05hTih0aGlzLmxpZ2h0RnJ1c3R1bUJpYXMpKSB7XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEuZmFyICo9IDQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEuZmFyICs9IHRoaXMubGlnaHRGcnVzdHVtQmlhcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYW1lcmEubGVmdCA9IG1pblswXTtcclxuICAgICAgICAgICAgY2FtZXJhLnJpZ2h0ID0gbWF4WzBdO1xyXG4gICAgICAgICAgICBjYW1lcmEudG9wID0gbWF4WzFdO1xyXG4gICAgICAgICAgICBjYW1lcmEuYm90dG9tID0gbWluWzFdO1xyXG4gICAgICAgICAgICBjYW1lcmEudXBkYXRlKHRydWUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGNhbWVyYTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICBfZ2V0U3BvdExpZ2h0Q2FtZXJhOiBmdW5jdGlvbiAobGlnaHQpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2xpZ2h0Q2FtZXJhcy5zcG90KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpZ2h0Q2FtZXJhcy5zcG90ID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLl9saWdodENhbWVyYXMuc3BvdDtcclxuICAgICAgICAvLyBVcGRhdGUgcHJvcGVydGllc1xyXG4gICAgICAgIGNhbWVyYS5mb3YgPSBsaWdodC5wZW51bWJyYUFuZ2xlICogMjtcclxuICAgICAgICBjYW1lcmEuZmFyID0gbGlnaHQucmFuZ2U7XHJcbiAgICAgICAgY2FtZXJhLndvcmxkVHJhbnNmb3JtLmNvcHkobGlnaHQud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgIGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgbWF0NC5pbnZlcnQoY2FtZXJhLnZpZXdNYXRyaXguYXJyYXksIGNhbWVyYS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjYW1lcmE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcnxXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFtyZW5kZXJlcl1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuU2hhZG93TWFwLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICAvLyBQRU5ESU5HIFJlbmRlcmVyIG9yIFdlYkdMUmVuZGVyaW5nQ29udGV4dFxyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsIHx8IHJlbmRlcmVyO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuZGlzcG9zZShfZ2wpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl90ZXh0dXJlcykge1xyXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlc1tuYW1lXS5kaXNwb3NlKF9nbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90ZXh0dXJlUG9vbC5jbGVhcihyZW5kZXJlci5nbCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2RlcHRoTWF0ZXJpYWxzID0ge307XHJcbiAgICAgICAgdGhpcy5fZGlzdGFuY2VNYXRlcmlhbHMgPSB7fTtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0Q2FtZXJhcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX3NoYWRvd01hcE51bWJlciA9IHtcclxuICAgICAgICAgICAgJ1BPSU5UX0xJR0hUJzogMCxcclxuICAgICAgICAgICAgJ0RJUkVDVElPTkFMX0xJR0hUJzogMCxcclxuICAgICAgICAgICAgJ1NQT1RfTElHSFQnOiAwXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLl9tZXNoTWF0ZXJpYWxzID0ge307XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcmVjZWl2ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fcmVjZWl2ZXJzW2ldO1xyXG4gICAgICAgICAgICAvLyBNZXNoIG1heSBiZSBkaXNwb3NlZFxyXG4gICAgICAgICAgICBpZiAobWVzaC5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdQT0lOVF9MSUdIVF9TSEFET1dfQ09VTlQnKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dfQ09VTlQnKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdBTUJJRU5UX0xJR0hUX1NIQURPV19DT1VOVCcpO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdzaGFkb3dFbmFibGVkJywgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3JlY2VpdmVycyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cgPSBbXTtcclxuICAgIH1cclxufSk7XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5WU01cclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblNoYWRvd01hcFBhc3MuVlNNID0gMTtcclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LnByZVBhc3MuU2hhZG93TWFwLlBDRlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuU2hhZG93TWFwUGFzcy5QQ0YgPSAyO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2hhZG93TWFwUGFzcztcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFJheSBmcm9tICcuLi9tYXRoL1JheSc7XHJcbmltcG9ydCBWZWN0b3IyIGZyb20gJy4uL21hdGgvVmVjdG9yMic7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4uL21hdGgvTWF0cml4NCc7XHJcbmltcG9ydCBSZW5kZXJhYmxlIGZyb20gJy4uL1JlbmRlcmFibGUnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGlja2luZy5SYXlQaWNraW5nXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgUmF5UGlja2luZyA9IEJhc2UuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5waWNraW5nLlJheVBpY2tpbmcjICove1xyXG4gICAgLyoqXHJcbiAgICAgKiBUYXJnZXQgc2NlbmVcclxuICAgICAqIEB0eXBlIHtjbGF5LlNjZW5lfVxyXG4gICAgICovXHJcbiAgICBzY2VuZTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogVGFyZ2V0IGNhbWVyYVxyXG4gICAgICogQHR5cGUge2NsYXkuQ2FtZXJhfVxyXG4gICAgICovXHJcbiAgICBjYW1lcmE6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFRhcmdldCByZW5kZXJlclxyXG4gICAgICogQHR5cGUge2NsYXkuUmVuZGVyZXJ9XHJcbiAgICAgKi9cclxuICAgIHJlbmRlcmVyOiBudWxsXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX3JheSA9IG5ldyBSYXkoKTtcclxuICAgIHRoaXMuX25kYyA9IG5ldyBWZWN0b3IyKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5waWNraW5nLlJheVBpY2tpbmcucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpY2sgdGhlIG5lYXJlc3QgaW50ZXJzZWN0aW9uIG9iamVjdCBpbiB0aGUgc2NlbmVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0geCBNb3VzZSBwb3NpdGlvbiB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHkgTW91c2UgcG9zaXRpb24geVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW2ZvcmNlUGlja0FsbD1mYWxzZV0gaWdub3JlIGlnbm9yZVBpY2tpbmdcclxuICAgICAqIEByZXR1cm4ge2NsYXkucGlja2luZy5SYXlQaWNraW5nfkludGVyc2VjdGlvbn1cclxuICAgICAqL1xyXG4gICAgcGljazogZnVuY3Rpb24gKHgsIHksIGZvcmNlUGlja0FsbCkge1xyXG4gICAgICAgIHZhciBvdXQgPSB0aGlzLnBpY2tBbGwoeCwgeSwgW10sIGZvcmNlUGlja0FsbCk7XHJcbiAgICAgICAgcmV0dXJuIG91dFswXSB8fCBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpY2sgYWxsIGludGVyc2VjdGlvbiBvYmplY3RzLCB3aWNoIHdpbGwgYmUgc29ydGVkIGZyb20gbmVhciB0byBmYXJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0geCBNb3VzZSBwb3NpdGlvbiB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHkgTW91c2UgcG9zaXRpb24geVxyXG4gICAgICogQHBhcmFtICB7QXJyYXl9IFtvdXRwdXRdXHJcbiAgICAgKiBAcGFyYW0gIHtib29sZWFufSBbZm9yY2VQaWNrQWxsPWZhbHNlXSBpZ25vcmUgaWdub3JlUGlja2luZ1xyXG4gICAgICogQHJldHVybiB7QXJyYXkuPGNsYXkucGlja2luZy5SYXlQaWNraW5nfkludGVyc2VjdGlvbj59XHJcbiAgICAgKi9cclxuICAgIHBpY2tBbGw6IGZ1bmN0aW9uICh4LCB5LCBvdXRwdXQsIGZvcmNlUGlja0FsbCkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2NyZWVuVG9OREMoeCwgeSwgdGhpcy5fbmRjKTtcclxuICAgICAgICB0aGlzLmNhbWVyYS5jYXN0UmF5KHRoaXMuX25kYywgdGhpcy5fcmF5KTtcclxuXHJcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0IHx8IFtdO1xyXG5cclxuICAgICAgICB0aGlzLl9pbnRlcnNlY3ROb2RlKHRoaXMuc2NlbmUsIG91dHB1dCwgZm9yY2VQaWNrQWxsIHx8IGZhbHNlKTtcclxuXHJcbiAgICAgICAgb3V0cHV0LnNvcnQodGhpcy5faW50ZXJzZWN0aW9uQ29tcGFyZUZ1bmMpO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfSxcclxuXHJcbiAgICBfaW50ZXJzZWN0Tm9kZTogZnVuY3Rpb24gKG5vZGUsIG91dCwgZm9yY2VQaWNrQWxsKSB7XHJcbiAgICAgICAgaWYgKChub2RlIGluc3RhbmNlb2YgUmVuZGVyYWJsZSkgJiYgbm9kZS5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICBpZiAoKCFub2RlLmlnbm9yZVBpY2tpbmcgfHwgZm9yY2VQaWNrQWxsKVxyXG4gICAgICAgICAgICAgICAgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdHJpYW5nbGUgbWVzaCBzdXBwb3J0IHJheSBwaWNraW5nXHJcbiAgICAgICAgICAgICAgICAgICAgKG5vZGUubW9kZSA9PT0gZ2xlbnVtLlRSSUFOR0xFUyAmJiBub2RlLmdlb21ldHJ5LmlzVXNlSW5kaWNlcygpKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9yIGlmIGdlb21ldHJ5IGhhcyBpdCdzIG93biBwaWNrQnlSYXksIHBpY2ssIGltcGxlbWVudGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgbm9kZS5nZW9tZXRyeS5waWNrQnlSYXlcclxuICAgICAgICAgICAgICAgICAgICB8fCBub2RlLmdlb21ldHJ5LnBpY2tcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcnNlY3RSZW5kZXJhYmxlKG5vZGUsIG91dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLl9jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9pbnRlcnNlY3ROb2RlKG5vZGUuX2NoaWxkcmVuW2ldLCBvdXQsIGZvcmNlUGlja0FsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfaW50ZXJzZWN0UmVuZGVyYWJsZTogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB2YXIgdjIgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIHZhciB2MyA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgdmFyIHJheSA9IG5ldyBSYXkoKTtcclxuICAgICAgICB2YXIgd29ybGRJbnZlcnNlID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBvdXQpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBpc1NraW5uZWRNZXNoID0gcmVuZGVyYWJsZS5pc1NraW5uZWRNZXNoKCk7XHJcbiAgICAgICAgICAgIHJheS5jb3B5KHRoaXMuX3JheSk7XHJcbiAgICAgICAgICAgIE1hdHJpeDQuaW52ZXJ0KHdvcmxkSW52ZXJzZSwgcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybSk7XHJcblxyXG4gICAgICAgICAgICAvLyBTa2lubmVkIG1lc2ggd2lsbCBpZ25vcmUgdGhlIHdvcmxkIHRyYW5zZm9ybS5cclxuICAgICAgICAgICAgaWYgKCFpc1NraW5uZWRNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICByYXkuYXBwbHlUcmFuc2Zvcm0od29ybGRJbnZlcnNlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gcmVuZGVyYWJsZS5nZW9tZXRyeTtcclxuXHJcbiAgICAgICAgICAgIHZhciBiYm94ID0gaXNTa2lubmVkTWVzaCA/IHJlbmRlcmFibGUuc2tlbGV0b24uYm91bmRpbmdCb3ggOiBnZW9tZXRyeS5ib3VuZGluZ0JveDtcclxuXHJcbiAgICAgICAgICAgIGlmIChiYm94ICYmICFyYXkuaW50ZXJzZWN0Qm91bmRpbmdCb3goYmJveCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBVc2UgdXNlciBkZWZpbmVkIHBpY2tpbmcgYWxnb3JpdGhtXHJcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeS5waWNrKSB7XHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5waWNrKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25kYy54LCB0aGlzLl9uZGMueSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGUsIG91dFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBVc2UgdXNlciBkZWZpbmVkIHJheSBwaWNraW5nIGFsZ29yaXRobVxyXG4gICAgICAgICAgICBlbHNlIGlmIChnZW9tZXRyeS5waWNrQnlSYXkpIHtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LnBpY2tCeVJheShyYXksIHJlbmRlcmFibGUsIG91dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBjdWxsQmFjayA9IChyZW5kZXJhYmxlLmN1bGxGYWNlID09PSBnbGVudW0uQkFDSyAmJiByZW5kZXJhYmxlLmZyb250RmFjZSA9PT0gZ2xlbnVtLkNDVylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHJlbmRlcmFibGUuY3VsbEZhY2UgPT09IGdsZW51bS5GUk9OVCAmJiByZW5kZXJhYmxlLmZyb250RmFjZSA9PT0gZ2xlbnVtLkNXKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwb2ludDtcclxuICAgICAgICAgICAgdmFyIGluZGljZXMgPSBnZW9tZXRyeS5pbmRpY2VzO1xyXG4gICAgICAgICAgICB2YXIgcG9zaXRpb25BdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcclxuICAgICAgICAgICAgdmFyIHdlaWdodEF0dHIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLndlaWdodDtcclxuICAgICAgICAgICAgdmFyIGpvaW50QXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMuam9pbnQ7XHJcbiAgICAgICAgICAgIHZhciBza2luTWF0cmljZXNBcnJheTtcclxuICAgICAgICAgICAgdmFyIHNraW5NYXRyaWNlcyA9IFtdO1xyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB2YWxpZC5cclxuICAgICAgICAgICAgaWYgKCFwb3NpdGlvbkF0dHIgfHwgIXBvc2l0aW9uQXR0ci52YWx1ZSB8fCAhaW5kaWNlcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc1NraW5uZWRNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICBza2luTWF0cmljZXNBcnJheSA9IHJlbmRlcmFibGUuc2tlbGV0b24uZ2V0U3ViU2tpbk1hdHJpY2VzKHJlbmRlcmFibGUuX191aWRfXywgcmVuZGVyYWJsZS5qb2ludHMpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZW5kZXJhYmxlLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNraW5NYXRyaWNlc1tpXSA9IHNraW5NYXRyaWNlc1tpXSB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDE2OyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpbk1hdHJpY2VzW2ldW2tdID0gc2tpbk1hdHJpY2VzQXJyYXlbaSAqIDE2ICsga107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHBvcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHdlaWdodCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50ID0gW107XHJcbiAgICAgICAgICAgICAgICB2YXIgc2tpbm5lZFBvcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRtcCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNraW5uZWRQb3NpdGlvbkF0dHIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5uZWRQb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgIGlmICghc2tpbm5lZFBvc2l0aW9uQXR0ciB8fCAhc2tpbm5lZFBvc2l0aW9uQXR0ci52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmNyZWF0ZUF0dHJpYnV0ZSgnc2tpbm5lZFBvc2l0aW9uJywgJ2YnLCAzKTtcclxuICAgICAgICAgICAgICAgICAgICBza2lubmVkUG9zaXRpb25BdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5za2lubmVkUG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgc2tpbm5lZFBvc2l0aW9uQXR0ci5pbml0KGdlb21ldHJ5LnZlcnRleENvdW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvbWV0cnkudmVydGV4Q291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uQXR0ci5nZXQoaSwgcG9zKTtcclxuICAgICAgICAgICAgICAgICAgICB3ZWlnaHRBdHRyLmdldChpLCB3ZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGpvaW50QXR0ci5nZXQoaSwgam9pbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdlaWdodFszXSA9IDEgLSB3ZWlnaHRbMF0gLSB3ZWlnaHRbMV0gLSB3ZWlnaHRbMl07XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5zZXQoc2tpbm5lZFBvcywgMCwgMCwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCA0OyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpvaW50W2tdID49IDAgJiYgd2VpZ2h0W2tdID4gMWUtNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMy50cmFuc2Zvcm1NYXQ0KHRtcCwgcG9zLCBza2luTWF0cmljZXNbam9pbnRba11dKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQoc2tpbm5lZFBvcywgc2tpbm5lZFBvcywgdG1wLCB3ZWlnaHRba10pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNraW5uZWRQb3NpdGlvbkF0dHIuc2V0KGksIHNraW5uZWRQb3MpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpICs9IDMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpMSA9IGluZGljZXNbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgaTIgPSBpbmRpY2VzW2kgKyAxXTtcclxuICAgICAgICAgICAgICAgIHZhciBpMyA9IGluZGljZXNbaSArIDJdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsUG9zQXR0ciA9IGlzU2tpbm5lZE1lc2hcclxuICAgICAgICAgICAgICAgICAgICA/IGdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbm5lZFBvc2l0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgOiBwb3NpdGlvbkF0dHI7XHJcbiAgICAgICAgICAgICAgICBmaW5hbFBvc0F0dHIuZ2V0KGkxLCB2MS5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICBmaW5hbFBvc0F0dHIuZ2V0KGkyLCB2Mi5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICBmaW5hbFBvc0F0dHIuZ2V0KGkzLCB2My5hcnJheSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGN1bGxCYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnQgPSByYXkuaW50ZXJzZWN0VHJpYW5nbGUodjEsIHYyLCB2MywgcmVuZGVyYWJsZS5jdWxsaW5nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50ID0gcmF5LmludGVyc2VjdFRyaWFuZ2xlKHYxLCB2MywgdjIsIHJlbmRlcmFibGUuY3VsbGluZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9pbnRXID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yMy50cmFuc2Zvcm1NYXQ0KHBvaW50VywgcG9pbnQsIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBwb2ludCBtYXliZSBub3QgcmlnaHQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjMuY29weShwb2ludFcsIHBvaW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0LnB1c2gobmV3IFJheVBpY2tpbmcuSW50ZXJzZWN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludCwgcG9pbnRXLCByZW5kZXJhYmxlLCBbaTEsIGkyLCBpM10sIGkgLyAzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3IzLmRpc3QocG9pbnRXLCB0aGlzLl9yYXkub3JpZ2luKVxyXG4gICAgICAgICAgICAgICAgICAgICkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgX2ludGVyc2VjdGlvbkNvbXBhcmVGdW5jOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgIHJldHVybiBhLmRpc3RhbmNlIC0gYi5kaXN0YW5jZTtcclxuICAgIH1cclxufSk7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGlja2luZy5SYXlQaWNraW5nfkludGVyc2VjdGlvblxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gcG9pbnRcclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHBvaW50V29ybGRcclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IHRhcmdldFxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB0cmlhbmdsZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gdHJpYW5nbGVJbmRleFxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2VcclxuICovXHJcblJheVBpY2tpbmcuSW50ZXJzZWN0aW9uID0gZnVuY3Rpb24gKHBvaW50LCBwb2ludFdvcmxkLCB0YXJnZXQsIHRyaWFuZ2xlLCB0cmlhbmdsZUluZGV4LCBkaXN0YW5jZSkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcnNlY3Rpb24gcG9pbnQgaW4gbG9jYWwgdHJhbnNmb3JtIGNvb3JkaW5hdGVzXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnBvaW50ID0gcG9pbnQ7XHJcbiAgICAvKipcclxuICAgICAqIEludGVyc2VjdGlvbiBwb2ludCBpbiB3b3JsZCB0cmFuc2Zvcm0gY29vcmRpbmF0ZXNcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucG9pbnRXb3JsZCA9IHBvaW50V29ybGQ7XHJcbiAgICAvKipcclxuICAgICAqIEludGVyc2VjdGlvbiBzY2VuZSBub2RlXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJzZWN0aW9uIHRyaWFuZ2xlLCB3aGljaCBpcyBhbiBhcnJheSBvZiB2ZXJ0ZXggaW5kZXhcclxuICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgdGhpcy50cmlhbmdsZSA9IHRyaWFuZ2xlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRleCBvZiBpbnRlcnNlY3Rpb24gdHJpYW5nbGUuXHJcbiAgICAgKi9cclxuICAgIHRoaXMudHJpYW5nbGVJbmRleCA9IHRyaWFuZ2xlSW5kZXg7XHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGZyb20gaW50ZXJzZWN0aW9uIHBvaW50IHRvIHJheSBvcmlnaW5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZGlzdGFuY2UgPSBkaXN0YW5jZTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJheVBpY2tpbmc7XHJcbiIsIi8vIFNwaGVyaWNhbCBIYXJtb25pYyBIZWxwZXJzXHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBQYXNzIGZyb20gJy4uL2NvbXBvc2l0b3IvUGFzcyc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgU2t5Ym94IGZyb20gJy4uL3BsdWdpbi9Ta3lib3gnO1xyXG5pbXBvcnQgU2t5ZG9tZSBmcm9tICcuLi9wbHVnaW4vU2t5ZG9tZSc7XHJcbmltcG9ydCBFbnZpcm9ubWVudE1hcFBhc3MgZnJvbSAnLi4vcHJlUGFzcy9FbnZpcm9ubWVudE1hcCc7XHJcbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG52YXIgc2ggPSB7fTtcclxuXHJcbmltcG9ydCBwcm9qZWN0RW52TWFwU2hhZGVyQ29kZSBmcm9tICcuL3NoYWRlci9wcm9qZWN0RW52TWFwLmdsc2wuanMnO1xyXG5cclxudmFyIHRhcmdldHMgPSBbJ3B4JywgJ254JywgJ3B5JywgJ255JywgJ3B6JywgJ256J107XHJcblxyXG4vLyBQcm9qZWN0IG9uIGdwdSwgYnV0IG5lZWRzIGJyb3dzZXIgdG8gc3VwcG9ydCByZWFkUGl4ZWxzIGFzIEZsb2F0MzJBcnJheS5cclxuZnVuY3Rpb24gcHJvamVjdEVudmlyb25tZW50TWFwR1BVKHJlbmRlcmVyLCBlbnZNYXApIHtcclxuICAgIHZhciBzaFRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICB3aWR0aDogOSxcclxuICAgICAgICBoZWlnaHQ6IDEsXHJcbiAgICAgICAgdHlwZTogVGV4dHVyZS5GTE9BVFxyXG4gICAgfSk7XHJcbiAgICB2YXIgcGFzcyA9IG5ldyBQYXNzKHtcclxuICAgICAgICBmcmFnbWVudDogcHJvamVjdEVudk1hcFNoYWRlckNvZGVcclxuICAgIH0pO1xyXG4gICAgcGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1RFWFRVUkVfU0laRScsIGVudk1hcC53aWR0aCk7XHJcbiAgICBwYXNzLnNldFVuaWZvcm0oJ2Vudmlyb25tZW50TWFwJywgZW52TWFwKTtcclxuXHJcbiAgICB2YXIgZnJhbWVidWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcclxuICAgIGZyYW1lYnVmZmVyLmF0dGFjaChzaFRleHR1cmUpO1xyXG4gICAgcGFzcy5yZW5kZXIocmVuZGVyZXIsIGZyYW1lYnVmZmVyKTtcclxuXHJcbiAgICBmcmFtZWJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgIC8vIFRPRE8gT25seSBjaHJvbWUgYW5kIGZpcmVmb3ggc3VwcG9ydCBGbG9hdDMyQXJyYXlcclxuICAgIHZhciBwaXhlbHMgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSg5ICogNCk7XHJcbiAgICByZW5kZXJlci5nbC5yZWFkUGl4ZWxzKDAsIDAsIDksIDEsIFRleHR1cmUuUkdCQSwgVGV4dHVyZS5GTE9BVCwgcGl4ZWxzKTtcclxuXHJcbiAgICB2YXIgY29lZmYgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSg5ICogMyk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDk7IGkrKykge1xyXG4gICAgICAgIGNvZWZmW2kgKiAzXSA9IHBpeGVsc1tpICogNF07XHJcbiAgICAgICAgY29lZmZbaSAqIDMgKyAxXSA9IHBpeGVsc1tpICogNCArIDFdO1xyXG4gICAgICAgIGNvZWZmW2kgKiAzICsgMl0gPSBwaXhlbHNbaSAqIDQgKyAyXTtcclxuICAgIH1cclxuICAgIGZyYW1lYnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgZnJhbWVidWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICBwYXNzLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgcmV0dXJuIGNvZWZmO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYXJtb25pY3Mobm9ybWFsLCBpbmRleCl7XHJcbiAgICB2YXIgeCA9IG5vcm1hbFswXTtcclxuICAgIHZhciB5ID0gbm9ybWFsWzFdO1xyXG4gICAgdmFyIHogPSBub3JtYWxbMl07XHJcblxyXG4gICAgaWYgKGluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIDEuMDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGluZGV4ID09PSAxKSB7XHJcbiAgICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmRleCA9PT0gMikge1xyXG4gICAgICAgIHJldHVybiB5O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaW5kZXggPT09IDMpIHtcclxuICAgICAgICByZXR1cm4gejtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGluZGV4ID09PSA0KSB7XHJcbiAgICAgICAgcmV0dXJuIHggKiB6O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaW5kZXggPT09IDUpIHtcclxuICAgICAgICByZXR1cm4geSAqIHo7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmRleCA9PT0gNikge1xyXG4gICAgICAgIHJldHVybiB4ICogeTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGluZGV4ID09PSA3KSB7XHJcbiAgICAgICAgcmV0dXJuIDMuMCAqIHogKiB6IC0gMS4wO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHggKiB4IC0geSAqIHk7XHJcbiAgICB9XHJcbn1cclxuXHJcbnZhciBub3JtYWxUcmFuc2Zvcm0gPSB7XHJcbiAgICBweDogWzIsIDEsIDAsIC0xLCAtMSwgMV0sXHJcbiAgICBueDogWzIsIDEsIDAsIDEsIC0xLCAtMV0sXHJcbiAgICBweTogWzAsIDIsIDEsIDEsIC0xLCAtMV0sXHJcbiAgICBueTogWzAsIDIsIDEsIDEsIDEsIDFdLFxyXG4gICAgcHo6IFswLCAxLCAyLCAtMSwgLTEsIC0xXSxcclxuICAgIG56OiBbMCwgMSwgMiwgMSwgLTEsIDFdXHJcbn07XHJcblxyXG4vLyBQcm9qZWN0IG9uIGNwdS5cclxuZnVuY3Rpb24gcHJvamVjdEVudmlyb25tZW50TWFwQ1BVKHJlbmRlcmVyLCBjdWJlUGl4ZWxzLCB3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICB2YXIgY29lZmYgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSg5ICogMyk7XHJcbiAgICB2YXIgbm9ybWFsID0gdmVjMy5jcmVhdGUoKTtcclxuICAgIHZhciB0ZXhlbCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICB2YXIgZmV0Y2hOb3JtYWwgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgZm9yICh2YXIgbSA9IDA7IG0gPCA5OyBtKyspIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRhcmdldHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgdmFyIHBpeGVscyA9IGN1YmVQaXhlbHNbdGFyZ2V0c1trXV07XHJcblxyXG4gICAgICAgICAgICB2YXIgc2lkZVJlc3VsdCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIHZhciBkaXZpZGVyID0gMDtcclxuICAgICAgICAgICAgdmFyIGkgPSAwO1xyXG4gICAgICAgICAgICB2YXIgdHJhbnNmb3JtID0gbm9ybWFsVHJhbnNmb3JtW3RhcmdldHNba11dO1xyXG4gICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsWzBdID0geCAvICh3aWR0aCAtIDEuMCkgKiAyLjAgLSAxLjA7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBGbGlwIHk/XHJcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsWzFdID0geSAvIChoZWlnaHQgLSAxLjApICogMi4wIC0gMS4wO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbFsyXSA9IC0xLjA7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUobm9ybWFsLCBub3JtYWwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmZXRjaE5vcm1hbFswXSA9IG5vcm1hbFt0cmFuc2Zvcm1bMF1dICogdHJhbnNmb3JtWzNdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZldGNoTm9ybWFsWzFdID0gbm9ybWFsW3RyYW5zZm9ybVsxXV0gKiB0cmFuc2Zvcm1bNF07XHJcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2hOb3JtYWxbMl0gPSBub3JtYWxbdHJhbnNmb3JtWzJdXSAqIHRyYW5zZm9ybVs1XTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMF0gPSBwaXhlbHNbaSsrXSAvIDI1NTtcclxuICAgICAgICAgICAgICAgICAgICB0ZXhlbFsxXSA9IHBpeGVsc1tpKytdIC8gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzJdID0gcGl4ZWxzW2krK10gLyAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUkdCTSBEZWNvZGVcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSBwaXhlbHNbaSsrXSAvIDI1NSAqIDguMTI7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMF0gKj0gc2NhbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMV0gKj0gc2NhbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMl0gKj0gc2NhbGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQoc2lkZVJlc3VsdCwgc2lkZVJlc3VsdCwgdGV4ZWwsIGhhcm1vbmljcyhmZXRjaE5vcm1hbCwgbSkgKiAtbm9ybWFsWzJdKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyAtbm9ybWFsLnogZXF1YWxzIGNvcyh0aGV0YSkgb2YgTGFtYmVydGlhblxyXG4gICAgICAgICAgICAgICAgICAgIGRpdmlkZXIgKz0gLW5vcm1hbFsyXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHJlc3VsdCwgcmVzdWx0LCBzaWRlUmVzdWx0LCAxIC8gZGl2aWRlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb2VmZlttICogM10gPSByZXN1bHRbMF0gLyA2LjA7XHJcbiAgICAgICAgY29lZmZbbSAqIDMgKyAxXSA9IHJlc3VsdFsxXSAvIDYuMDtcclxuICAgICAgICBjb2VmZlttICogMyArIDJdID0gcmVzdWx0WzJdIC8gNi4wO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvZWZmO1xyXG59XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSBlbnZNYXBcclxuICogQHBhcmFtICB7T2JqZWN0fSBbdGV4dHVyZU9wdHNdXHJcbiAqIEBwYXJhbSAge09iamVjdH0gW3RleHR1cmVPcHRzLmxvZF1cclxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3RleHR1cmVPcHRzLmRlY29kZVJHQk1dXHJcbiAqL1xyXG5zaC5wcm9qZWN0RW52aXJvbm1lbnRNYXAgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGVudk1hcCwgb3B0cykge1xyXG5cclxuICAgIC8vIFRPRE8gc1JHQlxyXG5cclxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG4gICAgb3B0cy5sb2QgPSBvcHRzLmxvZCB8fCAwO1xyXG5cclxuICAgIHZhciBza3lib3g7XHJcbiAgICB2YXIgZHVtbXlTY2VuZSA9IG5ldyBTY2VuZSgpO1xyXG4gICAgdmFyIHNpemUgPSA2NDtcclxuICAgIGlmIChlbnZNYXAudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlMkQnKSB7XHJcbiAgICAgICAgc2t5Ym94ID0gbmV3IFNreWRvbWUoe1xyXG4gICAgICAgICAgICBzY2VuZTogZHVtbXlTY2VuZSxcclxuICAgICAgICAgICAgZW52aXJvbm1lbnRNYXA6IGVudk1hcFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgc2l6ZSA9IChlbnZNYXAuaW1hZ2UgJiYgZW52TWFwLmltYWdlLnB4KSA/IGVudk1hcC5pbWFnZS5weC53aWR0aCA6IGVudk1hcC53aWR0aDtcclxuICAgICAgICBza3lib3ggPSBuZXcgU2t5Ym94KHtcclxuICAgICAgICAgICAgc2NlbmU6IGR1bW15U2NlbmUsXHJcbiAgICAgICAgICAgIGVudmlyb25tZW50TWFwOiBlbnZNYXBcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIENvbnZlcnQgdG8gcmdibVxyXG4gICAgdmFyIHdpZHRoID0gTWF0aC5jZWlsKHNpemUgLyBNYXRoLnBvdygyLCBvcHRzLmxvZCkpO1xyXG4gICAgdmFyIGhlaWdodCA9IE1hdGguY2VpbChzaXplIC8gTWF0aC5wb3coMiwgb3B0cy5sb2QpKTtcclxuICAgIHZhciByZ2JtVGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGhlaWdodFxyXG4gICAgfSk7XHJcbiAgICB2YXIgZnJhbWVidWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcclxuICAgIHNreWJveC5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fRU5DT0RFJyk7XHJcbiAgICBpZiAob3B0cy5kZWNvZGVSR0JNKSB7XHJcbiAgICAgICAgc2t5Ym94Lm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUkdCTV9ERUNPREUnKTtcclxuICAgIH1cclxuICAgIHNreWJveC5tYXRlcmlhbC5zZXQoJ2xvZCcsIG9wdHMubG9kKTtcclxuICAgIHZhciBlbnZNYXBQYXNzID0gbmV3IEVudmlyb25tZW50TWFwUGFzcyh7XHJcbiAgICAgICAgdGV4dHVyZTogcmdibVRleHR1cmVcclxuICAgIH0pO1xyXG4gICAgdmFyIGN1YmVQaXhlbHMgPSB7fTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFyZ2V0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGN1YmVQaXhlbHNbdGFyZ2V0c1tpXV0gPSBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpO1xyXG4gICAgICAgIHZhciBjYW1lcmEgPSBlbnZNYXBQYXNzLmdldENhbWVyYSh0YXJnZXRzW2ldKTtcclxuICAgICAgICBjYW1lcmEuZm92ID0gOTA7XHJcbiAgICAgICAgZnJhbWVidWZmZXIuYXR0YWNoKHJnYm1UZXh0dXJlKTtcclxuICAgICAgICBmcmFtZWJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICByZW5kZXJlci5yZW5kZXIoZHVtbXlTY2VuZSwgY2FtZXJhKTtcclxuICAgICAgICByZW5kZXJlci5nbC5yZWFkUGl4ZWxzKFxyXG4gICAgICAgICAgICAwLCAwLCB3aWR0aCwgaGVpZ2h0LFxyXG4gICAgICAgICAgICBUZXh0dXJlLlJHQkEsIFRleHR1cmUuVU5TSUdORURfQllURSwgY3ViZVBpeGVsc1t0YXJnZXRzW2ldXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZnJhbWVidWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBza3lib3guZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICBmcmFtZWJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIHJnYm1UZXh0dXJlLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG5cclxuICAgIHJldHVybiBwcm9qZWN0RW52aXJvbm1lbnRNYXBDUFUocmVuZGVyZXIsIGN1YmVQaXhlbHMsIHdpZHRoLCBoZWlnaHQpO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgc2g7XHJcbiIsIlxyXG4vKipcclxuICogSGVscGVycyBmb3IgY3JlYXRpbmcgYSBjb21tb24gM2QgYXBwbGljYXRpb24uXHJcbiAqIEBuYW1lc3BhY2UgY2xheS5hcHBsaWNhdGlvblxyXG4gKi9cclxuXHJcbiAvLyBUT0RPIGNyZWF0ZUNvbXBvc2l0b3JcclxuIC8vIFRPRE8gRGlzcG9zZSB0ZXN0LiBnZW9DYWNoZSB0ZXN0LlxyXG4gLy8gVE9ETyBUb25lbWFwcGluZyBleHBvc3VyZVxyXG4gLy8gVE9ETyBmaXRNb2RlbC5cclxuIC8vIFRPRE8gUGFydGljbGUgP1xyXG5pbXBvcnQgUmVuZGVyZXIgZnJvbSAnLi9SZW5kZXJlcic7XHJcbmltcG9ydCBTY2VuZSBmcm9tICcuL1NjZW5lJztcclxuaW1wb3J0IFRpbWVsaW5lIGZyb20gJy4vVGltZWxpbmUnO1xyXG5pbXBvcnQgQ3ViZUdlbyBmcm9tICcuL2dlb21ldHJ5L0N1YmUnO1xyXG5pbXBvcnQgU3BoZXJlR2VvIGZyb20gJy4vZ2VvbWV0cnkvU3BoZXJlJztcclxuaW1wb3J0IFBsYW5lR2VvIGZyb20gJy4vZ2VvbWV0cnkvUGxhbmUnO1xyXG5pbXBvcnQgUGFyYW1ldHJpY1N1cmZhY2VHZW8gZnJvbSAnLi9nZW9tZXRyeS9QYXJhbWV0cmljU3VyZmFjZSc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi9UZXh0dXJlQ3ViZSc7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vVGV4dHVyZSc7XHJcbmltcG9ydCBNZXNoIGZyb20gJy4vTWVzaCc7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuL01hdGVyaWFsJztcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IE9ydGhvZ3JhcGhpY0NhbWVyYSBmcm9tICcuL2NhbWVyYS9PcnRob2dyYXBoaWMnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBHTFRGTG9hZGVyIGZyb20gJy4vbG9hZGVyL0dMVEYnO1xyXG5pbXBvcnQgTm9kZSBmcm9tICcuL05vZGUnO1xyXG5pbXBvcnQgRGlyZWN0aW9uYWxMaWdodCBmcm9tICcuL2xpZ2h0L0RpcmVjdGlvbmFsJztcclxuaW1wb3J0IFBvaW50TGlnaHQgZnJvbSAnLi9saWdodC9Qb2ludCc7XHJcbmltcG9ydCBTcG90TGlnaHQgZnJvbSAnLi9saWdodC9TcG90JztcclxuaW1wb3J0IEFtYmllbnRMaWdodCBmcm9tICcuL2xpZ2h0L0FtYmllbnQnO1xyXG5pbXBvcnQgQW1iaWVudEN1YmVtYXBMaWdodCBmcm9tICcuL2xpZ2h0L0FtYmllbnRDdWJlbWFwJztcclxuaW1wb3J0IEFtYmllbnRTSExpZ2h0IGZyb20gJy4vbGlnaHQvQW1iaWVudFNIJztcclxuaW1wb3J0IFNoYWRvd01hcFBhc3MgZnJvbSAnLi9wcmVQYXNzL1NoYWRvd01hcCc7XHJcbmltcG9ydCBSYXlQaWNraW5nIGZyb20gJy4vcGlja2luZy9SYXlQaWNraW5nJztcclxuaW1wb3J0IExSVUNhY2hlIGZyb20gJy4vY29yZS9MUlUnO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCBzaFV0aWwgZnJvbSAnLi91dGlsL3NoJztcclxuaW1wb3J0IHRleHR1cmVVdGlsIGZyb20gJy4vdXRpbC90ZXh0dXJlJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxuXHJcbmltcG9ydCBjb2xvclV0aWwgZnJvbSAnLi9jb3JlL2NvbG9yJztcclxudmFyIHBhcnNlQ29sb3IgPSBjb2xvclV0aWwucGFyc2VUb0Zsb2F0O1xyXG5cclxuaW1wb3J0IHNoYWRlckxpYnJhcnkgZnJvbSAnLi9zaGFkZXIvYnVpbHRpbic7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi9TaGFkZXInO1xyXG5cclxuXHJcbnZhciBFVkVfTkFNRVMgPSBbJ2NsaWNrJywgJ2RibGNsaWNrJywgJ21vdXNlb3ZlcicsICdtb3VzZW91dCcsICdtb3VzZW1vdmUnLFxyXG4gICAgJ3RvdWNoc3RhcnQnLCAndG91Y2hlbmQnLCAndG91Y2htb3ZlJyxcclxuICAgICdtb3VzZXdoZWVsJywgJ0RPTU1vdXNlU2Nyb2xsJ1xyXG5dO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtzdHJpbmd8SFRNTENhbnZhc0VsZW1lbnR8SFRNTEltYWdlRWxlbWVudHxIVE1MVmlkZW9FbGVtZW50fSBJbWFnZUxpa2VcclxuICovXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7c3RyaW5nfEhUTUxDYW52YXNFbGVtZW50fEhUTUxJbWFnZUVsZW1lbnR8SFRNTFZpZGVvRWxlbWVudHxjbGF5LlRleHR1cmUyRH0gVGV4dHVyZUxpa2VcclxuICovXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7c3RyaW5nfEFycmF5LjxudW1iZXI+fSBDb2xvclxyXG4gKi9cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtIVE1MRWxlbWVudHxzdHJpbmd9IERvbVF1ZXJ5XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFwcDNETmFtZXNwYWNlXHJcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGluaXQgSW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIGluaXRpbmcgYXBwLlxyXG4gKiAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHJldHVybiBhIHByb21pc2UgaW4gaW5pdCB0byBzdGFydCB0aGUgbG9vcCBhc3luY2hyb25vdXNseSB3aGVuIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkLlxyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBsb29wIExvb3AgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCBlYWNoIGZyYW1lLlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthdXRvUmVuZGVyPXRydWVdIElmIHJlbmRlciBhdXRvbWF0aWNhbGx5IGVhY2ggZnJhbWUuXHJcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IFtiZWZvcmVSZW5kZXJdXHJcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IFthZnRlclJlbmRlcl1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFt3aWR0aF0gQ29udGFpbmVyIHdpZHRoLlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2hlaWdodF0gQ29udGFpbmVyIGhlaWdodC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtkZXZpY2VQaXhlbFJhdGlvXVxyXG4gKiBAcHJvcGVydHkge09iamVjdC48c3RyaW5nLCBGdW5jdGlvbj59IFttZXRob2RzXSBNZXRob2RzIHRoYXQgd2lsbCBiZSBpbmplY3RlZCB0byBBcHAzRCNtZXRob2RzLlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2dyYXBoaWNdIEdyYXBoaWMgY29uZmlndXJhdGlvbiBpbmNsdWRpbmcgc2hhZG93LCBjb2xvciBzcGFjZS5cclxuICogQHByb3BlcnR5IHtib29sZWFufSBbZ3JhcGhpYy5zaGFkb3c9ZmFsc2VdIElmIGVuYWJsZSBzaGFkb3dcclxuICogQHByb3BlcnR5IHtib29sZWFufSBbZ3JhcGhpYy5saW5lYXI9ZmFsc2VdIElmIHVzZSBsaW5lYXIgY29sb3Igc3BhY2VcclxuICogQHByb3BlcnR5IHtib29sZWFufSBbZ3JhcGhpYy50b25lbWFwcGluZz1mYWxzZV0gSWYgZW5hYmxlIEFDRVMgdG9uZSBtYXBwaW5nLlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtldmVudD1mYWxzZV0gSWYgZW5hYmxlIG1vdXNlL3RvdWNoIGV2ZW50LiBJdCB3aWxsIHNsb3cgZG93biB0aGUgc3lzdGVtIGlmIGdlb21ldHJpZXMgYXJlIGNvbXBsZXguXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0YW5kYXJkTWF0ZXJpYWxNUkNvbmZpZ1xyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2hhZGVyPSdzdGFuZGFyZE1SJ11cclxuICogQHByb3BlcnR5IHtDb2xvcn0gW2NvbG9yXVxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2FscGhhXVxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21ldGFsbmVzc11cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtyb3VnaG5lc3NdXHJcbiAqIEBwcm9wZXJ0eSB7Q29sb3J9IFtlbWlzc2lvbl1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtlbWlzc2lvbkludGVuc2l0eV1cclxuICogQHByb3BlcnR5IHtib29sZWFufSBbdHJhbnNwYXJlbnRdXHJcbiAqIEBwcm9wZXJ0eSB7VGV4dHVyZUxpa2V9IFtkaWZmdXNlTWFwXVxyXG4gKiBAcHJvcGVydHkge1RleHR1cmVMaWtlfSBbbm9ybWFsTWFwXVxyXG4gKiBAcHJvcGVydHkge1RleHR1cmVMaWtlfSBbcm91Z2huZXNzTWFwXVxyXG4gKiBAcHJvcGVydHkge1RleHR1cmVMaWtlfSBbbWV0YWxuZXNzTWFwXVxyXG4gKiBAcHJvcGVydHkge1RleHR1cmVMaWtlfSBbZW1pc3NpdmVNYXBdXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFVzaW5nIEFwcDNEIGlzIGEgbXVjaCBtb3JlIGNvbnZlbmllbnQgd2F5IHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHlvdXIgM0QgYXBwbGljYXRpb24uXHJcbiAqXHJcbiAqIEl0IHByb3ZpZGVzIHRoZSBhYmlsaXRpZXMgdG86XHJcbiAqXHJcbiAqICsgTWFuYWdlIGFwcGxpY2F0aW9uIGxvb3AgYW5kIHJlbmRlcmluZy5cclxuICogKyBDb2xsZWN0IEdQVSByZXNvdXJjZSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbWVtb3J5IGxlYWsgY29uY2Vybi5cclxuICogKyBNb3VzZSBldmVudCBtYW5hZ2VtZW50LlxyXG4gKiArIENyZWF0ZSBzY2VuZSBvYmplY3RzLCBtYXRlcmlhbHMsIHRleHR1cmVzIHdpdGggc2ltcGxlciBjb2RlLlxyXG4gKiArIExvYWQgbW9kZWxzIHdpdGggb25lIGxpbmUgb2YgY29kZS5cclxuICogKyBQcm9taXNlZCBpbnRlcmZhY2VzLlxyXG4gKlxyXG4gKiBIZXJlIGlzIGEgYmFzaWMgZXhhbXBsZSB0byBjcmVhdGUgYSByb3RhdGluZyBjdWJlLlxyXG4gKlxyXG5gYGBqc1xyXG52YXIgYXBwID0gY2xheS5hcHBsaWNhdGlvbi5jcmVhdGUoJyN2aWV3cG9ydCcsIHtcclxuICAgIGluaXQ6IGZ1bmN0aW9uIChhcHApIHtcclxuICAgICAgICAvLyBDcmVhdGUgYSBwZXJzcGVjdGl2ZSBjYW1lcmEuXHJcbiAgICAgICAgLy8gRmlyc3QgcGFyYW1ldGVyIGlzIHRoZSBjYW1lcmEgcG9zaXRpb24uIFdoaWNoIGlzIGluIGZyb250IG9mIHRoZSBjdWJlLlxyXG4gICAgICAgIC8vIFNlY29uZCBwYXJhbWV0ZXIgaXMgdGhlIGNhbWVyYSBsb29rQXQgdGFyZ2V0LiBXaGljaCBpcyB0aGUgb3JpZ2luIG9mIHRoZSB3b3JsZCwgYW5kIHdoZXJlIHRoZSBjdWJlIHB1dHMuXHJcbiAgICAgICAgdGhpcy5fY2FtZXJhID0gYXBwLmNyZWF0ZUNhbWVyYShbMCwgMiwgNV0sIFswLCAwLCAwXSk7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgc2FtcGxlIGN1YmVcclxuICAgICAgICB0aGlzLl9jdWJlID0gYXBwLmNyZWF0ZUN1YmUoKTtcclxuICAgICAgICAvLyBDcmVhdGUgYSBkaXJlY3Rpb25hbCBsaWdodC4gVGhlIGRpcmVjdGlvbiBpcyBmcm9tIHRvcCByaWdodCB0byBsZWZ0IGJvdHRvbSwgYXdheSBmcm9tIGNhbWVyYS5cclxuICAgICAgICB0aGlzLl9tYWluTGlnaHQgPSBhcHAuY3JlYXRlRGlyZWN0aW9uYWxMaWdodChbLTEsIC0xLCAtMV0pO1xyXG4gICAgfSxcclxuICAgIGxvb3A6IGZ1bmN0aW9uIChhcHApIHtcclxuICAgICAgICAvLyBTaW1wbHkgcm90YXRpbmcgdGhlIGN1YmUgZXZlcnkgZnJhbWUuXHJcbiAgICAgICAgdGhpcy5fY3ViZS5yb3RhdGlvbi5yb3RhdGVZKGFwcC5mcmFtZVRpbWUgLyAxMDAwKTtcclxuICAgIH1cclxufSk7XHJcbmBgYFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuYXBwbGljYXRpb24uQXBwM0RcclxuICogQHBhcmFtIHtEb21RdWVyeX0gZG9tIENvbnRhaW5lciBkb20gZWxlbWVudCBvciBhIHNlbGVjdG9yIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGluIGBxdWVyeVNlbGVjdG9yYFxyXG4gKiBAcGFyYW0ge0FwcDNETmFtZXNwYWNlfSBhcHBOUyBPcHRpb25zIGFuZCBuYW1lc3BhY2UgdXNlZCBpbiBjcmVhdGluZyBhcHAzRFxyXG4gKi9cclxuZnVuY3Rpb24gQXBwM0QoZG9tLCBhcHBOUykge1xyXG5cclxuICAgIGFwcE5TID0gYXBwTlMgfHwge307XHJcbiAgICBhcHBOUy5ncmFwaGljID0gYXBwTlMuZ3JhcGhpYyB8fCB7fTtcclxuXHJcbiAgICBpZiAoYXBwTlMuYXV0b1JlbmRlciA9PSBudWxsKSB7XHJcbiAgICAgICAgYXBwTlMuYXV0b1JlbmRlciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBkb20gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgZG9tID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihkb20pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZG9tKSB7IHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkb20nKTsgfVxyXG5cclxuICAgIHZhciBpc0RvbUNhbnZhcyA9ICFkb20ubm9kZU5hbWUgIC8vIE5vdCBpbiBkb20gZW52aXJvbm1lbnRcclxuICAgICAgICB8fCBkb20ubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0NBTlZBUyc7XHJcblxyXG4gICAgdmFyIHJlbmRlcmVyT3B0cyA9IHt9O1xyXG4gICAgaXNEb21DYW52YXMgJiYgKHJlbmRlcmVyT3B0cy5jYW52YXMgPSBkb20pO1xyXG4gICAgYXBwTlMuZGV2aWNlUGl4ZWxSYXRpbyAmJiAocmVuZGVyZXJPcHRzLmRldmljZVBpeGVsUmF0aW8gPSBhcHBOUy5kZXZpY2VQaXhlbFJhdGlvKTtcclxuXHJcbiAgICB2YXIgZ1JlbmRlcmVyID0gbmV3IFJlbmRlcmVyKHJlbmRlcmVyT3B0cyk7XHJcbiAgICB2YXIgZ1dpZHRoID0gYXBwTlMud2lkdGggfHwgZG9tLmNsaWVudFdpZHRoO1xyXG4gICAgdmFyIGdIZWlnaHQgPSBhcHBOUy5oZWlnaHQgfHwgZG9tLmNsaWVudEhlaWdodDtcclxuXHJcbiAgICB2YXIgZ1NjZW5lID0gbmV3IFNjZW5lKCk7XHJcbiAgICB2YXIgZ1RpbWVsaW5lID0gbmV3IFRpbWVsaW5lKCk7XHJcbiAgICB2YXIgZ1NoYWRvd1Bhc3MgPSBhcHBOUy5ncmFwaGljLnNoYWRvdyAmJiBuZXcgU2hhZG93TWFwUGFzcygpO1xyXG4gICAgdmFyIGdSYXlQaWNraW5nID0gYXBwTlMuZXZlbnQgJiYgbmV3IFJheVBpY2tpbmcoe1xyXG4gICAgICAgIHNjZW5lOiBnU2NlbmUsXHJcbiAgICAgICAgcmVuZGVyZXI6IGdSZW5kZXJlclxyXG4gICAgfSk7XHJcblxyXG4gICAgIWlzRG9tQ2FudmFzICYmIGRvbS5hcHBlbmRDaGlsZChnUmVuZGVyZXIuY2FudmFzKTtcclxuXHJcbiAgICBnUmVuZGVyZXIucmVzaXplKGdXaWR0aCwgZ0hlaWdodCk7XHJcblxyXG4gICAgdmFyIGdGcmFtZVRpbWUgPSAwO1xyXG4gICAgdmFyIGdFbGFwc2VkVGltZSA9IDA7XHJcblxyXG4gICAgZ1RpbWVsaW5lLnN0YXJ0KCk7XHJcblxyXG4gICAgdmFyIHVzZXJNZXRob2RzID0ge307XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gYXBwTlMubWV0aG9kcykge1xyXG4gICAgICAgIHVzZXJNZXRob2RzW2tleV0gPSBhcHBOUy5tZXRob2RzW2tleV0uYmluZChhcHBOUywgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENvbnRhaW5lciBkb20gZWxlbWVudFxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjY29udGFpbmVyXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnRhaW5lcjogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvbTsgfSB9LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjcmVuZGVyZXJcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5SZW5kZXJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICByZW5kZXJlcjogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdSZW5kZXJlcjsgfX0sXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5BcHAzRCNzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlJlbmRlcmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNjZW5lOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1NjZW5lOyB9fSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI3RpbWVsaW5lXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuUmVuZGVyZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGltZWxpbmU6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnVGltZWxpbmU7IH19LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRpbWUgZWxhcHNlZCBzaW5jZSBsYXN0IGZyYW1lLiBDYW4gYmUgdXNlZCBpbiBsb29wIHRvIGNhbGN1bGF0ZSB0aGUgbW92ZW1lbnQuXHJcbiAgICAgICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5BcHAzRCNmcmFtZVRpbWVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZyYW1lVGltZTogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdGcmFtZVRpbWU7IH19LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRpbWUgZWxhcHNlZCBzaW5jZSBhcHBsaWNhdGlvbiBjcmVhdGVkLlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjZWxhcHNlZFRpbWVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVsYXBzZWRUaW1lOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ0VsYXBzZWRUaW1lOyB9fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2lkdGggb2Ygdmlld3BvcnQuXHJcbiAgICAgICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5BcHAzRCN3aWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgd2lkdGg6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnUmVuZGVyZXIuZ2V0V2lkdGgoKTsgfX0sXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSGVpZ2h0IG9mIHZpZXdwb3J0LlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjaGVpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBoZWlnaHQ6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnUmVuZGVyZXIuZ2V0SGVpZ2h0KCk7IH19LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNZXRob2RzIGZyb20ge0BsaW5rIGNsYXkuYXBwbGljYXRpb24uY3JlYXRlfVxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjbWV0aG9kc1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWV0aG9kczogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVzZXJNZXRob2RzOyB9IH0sXHJcblxyXG4gICAgICAgIF9zaGFkb3dQYXNzOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1NoYWRvd1Bhc3M7IH0gfSxcclxuXHJcbiAgICAgICAgX2FwcE5TOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXBwTlM7IH0gfSxcclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzaXplIHRoZSBhcHBsaWNhdGlvbi4gV2lsbCB1c2UgdGhlIGNvbnRhaW5lciBjbGllbnRXaWR0aC9jbGllbnRIZWlnaHQgaWYgd2lkdGgvaGVpZ2h0IGluIHBhcmFtZXRlcnMgYXJlIG5vdCBnaXZlbi5cclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQG1lbWJlck9mIHtjbGF5LmFwcGxpY2F0aW9uLkFwcDNEfVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aF1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0XVxyXG4gICAgICovXHJcbiAgICB0aGlzLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICAgICAgZ1dpZHRoID0gd2lkdGggfHwgYXBwTlMud2lkdGggfHwgZG9tLmNsaWVudFdpZHRoO1xyXG4gICAgICAgIGdIZWlnaHQgPSBoZWlnaHQgfHwgZG9tLmhlaWdodCB8fCBkb20uY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgIGdSZW5kZXJlci5yZXNpemUoZ1dpZHRoLCBnSGVpZ2h0KTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIHRoZSBhcHBsaWNhdGlvblxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKi9cclxuICAgIHRoaXMuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmIChhcHBOUy5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgIGFwcE5TLmRpc3Bvc2UodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdUaW1lbGluZS5zdG9wKCk7XHJcbiAgICAgICAgZ1JlbmRlcmVyLmRpc3Bvc2VTY2VuZShnU2NlbmUpO1xyXG4gICAgICAgIGdTaGFkb3dQYXNzICYmIGdTaGFkb3dQYXNzLmRpc3Bvc2UoZ1JlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgZG9tLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIEVWRV9OQU1FUy5mb3JFYWNoKGZ1bmN0aW9uIChldmVUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXNbbWFrZUhhbmRsZXJOYW1lKGV2ZVR5cGUpXSAmJiB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sIG1ha2VIYW5kbGVyTmFtZShldmVUeXBlKSk7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9O1xyXG5cclxuICAgIGdSYXlQaWNraW5nICYmIHRoaXMuX2luaXRNb3VzZUV2ZW50cyhnUmF5UGlja2luZyk7XHJcblxyXG4gICAgdGhpcy5fZ2VvQ2FjaGUgPSBuZXcgTFJVQ2FjaGUoMjApO1xyXG4gICAgdGhpcy5fdGV4Q2FjaGUgPSBuZXcgTFJVQ2FjaGUoMjApO1xyXG5cclxuICAgIC8vIEdQVSBSZXNvdXJjZXMuXHJcbiAgICB0aGlzLl90ZXh0dXJlc0xpc3QgPSB7fTtcclxuICAgIHRoaXMuX2dlb21ldHJpZXNMaXN0ID0ge307XHJcblxyXG4gICAgLy8gRG8gaW5pdCB0aGUgYXBwbGljYXRpb24uXHJcbiAgICB2YXIgaW5pdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoYXBwTlMuaW5pdCAmJiBhcHBOUy5pbml0KHRoaXMpKTtcclxuICAgIC8vIFVzZSB0aGUgaW5pdGVkIGNhbWVyYS5cclxuICAgIGdSYXlQaWNraW5nICYmIChnUmF5UGlja2luZy5jYW1lcmEgPSBnU2NlbmUuZ2V0TWFpbkNhbWVyYSgpKTtcclxuXHJcbiAgICBpZiAoIWFwcE5TLmxvb3ApIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ01pc3MgbG9vcCBtZXRob2QuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgaW5pdFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZ1RpbWVsaW5lLm9uKCdmcmFtZScsIGZ1bmN0aW9uIChmcmFtZVRpbWUpIHtcclxuICAgICAgICAgICAgZ0ZyYW1lVGltZSA9IGZyYW1lVGltZTtcclxuICAgICAgICAgICAgZ0VsYXBzZWRUaW1lICs9IGZyYW1lVGltZTtcclxuXHJcbiAgICAgICAgICAgIHZhciBjYW1lcmEgPSBnU2NlbmUuZ2V0TWFpbkNhbWVyYSgpO1xyXG4gICAgICAgICAgICBpZiAoY2FtZXJhKSB7XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEuYXNwZWN0ID0gZ1JlbmRlcmVyLmdldFZpZXdwb3J0QXNwZWN0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ1JheVBpY2tpbmcgJiYgKGdSYXlQaWNraW5nLmNhbWVyYSA9IGNhbWVyYSk7XHJcblxyXG4gICAgICAgICAgICBhcHBOUy5sb29wICYmIGFwcE5TLmxvb3Aoc2VsZik7XHJcblxyXG4gICAgICAgICAgICBpZiAoYXBwTlMuYXV0b1JlbmRlcikge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yZW5kZXIoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2VsZi5jb2xsZWN0UmVzb3VyY2VzKCk7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBnU2NlbmUub24oJ2JlZm9yZXJlbmRlcicsIGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgcmVuZGVyTGlzdCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pblJlbmRlcikge1xyXG4gICAgICAgICAgICAvLyBPbmx5IHVwZGF0ZSBncmFwaGljIG9wdGlvbnMgd2hlbiB1c2luZyAjcmVuZGVyIGZ1bmN0aW9uLlxyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVHcmFwaGljT3B0aW9ucyhhcHBOUy5ncmFwaGljLCByZW5kZXJMaXN0Lm9wYXF1ZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVHcmFwaGljT3B0aW9ucyhhcHBOUy5ncmFwaGljLCByZW5kZXJMaXN0LnRyYW5zcGFyZW50LCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgdGhpcyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSW1hZ2VMaWtlRWxlbWVudCh2YWwpIHtcclxuICAgIHJldHVybiAodHlwZW9mIEltYWdlICE9PSAndW5kZWZpbmVkJyAmJiB2YWwgaW5zdGFuY2VvZiBJbWFnZSlcclxuICAgICAgICB8fCAodHlwZW9mIEhUTUxDYW52YXNFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB2YWwgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudClcclxuICAgICAgICB8fCAodHlwZW9mIEhUTUxWaWRlb0VsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHZhbCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRLZXlGcm9tSW1hZ2VMaWtlKHZhbCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgPyB2YWwgOiAodmFsLl9fa2V5X18gfHwgKHZhbC5fX2tleV9fID0gdXRpbC5nZW5HVUlEKCkpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbWFrZUhhbmRsZXJOYW1lKGV2ZVR5cGUpIHtcclxuICAgIHJldHVybiAnXycgKyBldmVUeXBlICsgJ0hhbmRsZXInO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYWNrYWdlRXZlbnQoZXZlbnRUeXBlLCBwaWNrUmVzdWx0LCBvZmZzZXRYLCBvZmZzZXRZLCB3aGVlbERlbHRhKSB7XHJcbiAgICB2YXIgZXZlbnQgPSB1dGlsLmNsb25lKHBpY2tSZXN1bHQpO1xyXG4gICAgZXZlbnQudHlwZSA9IGV2ZW50VHlwZTtcclxuICAgIGV2ZW50Lm9mZnNldFggPSBvZmZzZXRYO1xyXG4gICAgZXZlbnQub2Zmc2V0WSA9IG9mZnNldFk7XHJcbiAgICBpZiAod2hlZWxEZWx0YSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGV2ZW50LndoZWVsRGVsdGEgPSB3aGVlbERlbHRhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGV2ZW50O1xyXG59XHJcblxyXG5mdW5jdGlvbiBidWJibGluZ0V2ZW50KHRhcmdldCwgZXZlbnQpIHtcclxuICAgIHdoaWxlICh0YXJnZXQgJiYgIWV2ZW50LmNhbmNlbEJ1YmJsZSkge1xyXG4gICAgICAgIHRhcmdldC50cmlnZ2VyKGV2ZW50LnR5cGUsIGV2ZW50KTtcclxuICAgICAgICB0YXJnZXQgPSB0YXJnZXQuZ2V0UGFyZW50KCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbkFwcDNELnByb3RvdHlwZS5faW5pdE1vdXNlRXZlbnRzID0gZnVuY3Rpb24gKHJheVBpY2tpbmcpIHtcclxuICAgIHZhciBkb20gPSB0aGlzLmNvbnRhaW5lcjtcclxuXHJcbiAgICB2YXIgb2xkVGFyZ2V0ID0gbnVsbDtcclxuICAgIEVWRV9OQU1FUy5mb3JFYWNoKGZ1bmN0aW9uIChfZXZlVHlwZSkge1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgX2V2ZVR5cGUsIHRoaXNbbWFrZUhhbmRsZXJOYW1lKF9ldmVUeXBlKV0gPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBpZiAoIXJheVBpY2tpbmcuY2FtZXJhKSB7IC8vIE5vdCBoYXZlIGNhbWVyYSB5ZXQuXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCAmJiBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYm94ID0gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0WCwgb2Zmc2V0WTtcclxuICAgICAgICAgICAgdmFyIGV2ZVR5cGUgPSBfZXZlVHlwZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChldmVUeXBlLmluZGV4T2YoJ3RvdWNoJykgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRvdWNoID0gZXZlVHlwZSAhPT0gJ3RvdWNoZW5kJ1xyXG4gICAgICAgICAgICAgICAgICAgID8gZS50YXJnZXRUb3VjaGVzWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgOiBlLmNoYW5nZWRUb3VjaGVzWzBdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZVR5cGUgPT09ICd0b3VjaHN0YXJ0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZVR5cGUgPSAnbW91c2Vkb3duJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZVR5cGUgPT09ICd0b3VjaGVuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVUeXBlID0gJ21vdXNldXAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXZlVHlwZSA9PT0gJ3RvdWNobW92ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVUeXBlID0gJ21vdXNlbW92ZSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBvZmZzZXRYID0gdG91Y2guY2xpZW50WCAtIGJveC5sZWZ0O1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0WSA9IHRvdWNoLmNsaWVudFkgLSBib3gudG9wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0WCA9IGUuY2xpZW50WCAtIGJveC5sZWZ0O1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0WSA9IGUuY2xpZW50WSAtIGJveC50b3A7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBwaWNrUmVzdWx0ID0gcmF5UGlja2luZy5waWNrKG9mZnNldFgsIG9mZnNldFkpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAoZXZlVHlwZSA9PT0gJ0RPTU1vdXNlU2Nyb2xsJyB8fCBldmVUeXBlID09PSAnbW91c2V3aGVlbCcpIHtcclxuICAgICAgICAgICAgICAgIGRlbHRhID0gKGUud2hlZWxEZWx0YSkgPyBlLndoZWVsRGVsdGEgLyAxMjAgOiAtKGUuZGV0YWlsIHx8IDApIC8gMztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHBpY2tSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIC8vIEp1c3QgaWdub3JlIHNpbGVudCBlbGVtZW50LlxyXG4gICAgICAgICAgICAgICAgaWYgKHBpY2tSZXN1bHQudGFyZ2V0LnNpbGVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlVHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBQRU5ESU5HIHRvdWNoZG93biBzaG91bGQgdHJpZ2dlciBtb3VzZW92ZXIgZXZlbnQgP1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXRDaGFuZ2VkID0gcGlja1Jlc3VsdC50YXJnZXQgIT09IG9sZFRhcmdldDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbGRUYXJnZXQgJiYgYnViYmxpbmdFdmVudChvbGRUYXJnZXQsIHBhY2thZ2VFdmVudCgnbW91c2VvdXQnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG9sZFRhcmdldFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvZmZzZXRYLCBvZmZzZXRZKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJ1YmJsaW5nRXZlbnQocGlja1Jlc3VsdC50YXJnZXQsIHBhY2thZ2VFdmVudCgnbW91c2Vtb3ZlJywgcGlja1Jlc3VsdCwgb2Zmc2V0WCwgb2Zmc2V0WSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1YmJsaW5nRXZlbnQocGlja1Jlc3VsdC50YXJnZXQsIHBhY2thZ2VFdmVudCgnbW91c2VvdmVyJywgcGlja1Jlc3VsdCwgb2Zmc2V0WCwgb2Zmc2V0WSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1YmJsaW5nRXZlbnQocGlja1Jlc3VsdC50YXJnZXQsIHBhY2thZ2VFdmVudChldmVUeXBlLCBwaWNrUmVzdWx0LCBvZmZzZXRYLCBvZmZzZXRZLCBkZWx0YSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb2xkVGFyZ2V0ID0gcGlja1Jlc3VsdC50YXJnZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAob2xkVGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KG9sZFRhcmdldCwgcGFja2FnZUV2ZW50KCdtb3VzZW91dCcsIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG9sZFRhcmdldFxyXG4gICAgICAgICAgICAgICAgfSwgb2Zmc2V0WCwgb2Zmc2V0WSkpO1xyXG4gICAgICAgICAgICAgICAgb2xkVGFyZ2V0ID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgdGhpcyk7XHJcbn07XHJcblxyXG5BcHAzRC5wcm90b3R5cGUuX3VwZGF0ZUdyYXBoaWNPcHRpb25zID0gZnVuY3Rpb24gKGdyYXBoaWNPcHRzLCBsaXN0LCBpc1NreWJveCkge1xyXG4gICAgdmFyIGVuYWJsZVRvbmVtYXBwaW5nID0gISFncmFwaGljT3B0cy50b25lbWFwcGluZztcclxuICAgIHZhciBpc0xpbmVhclNwYWNlID0gISFncmFwaGljT3B0cy5saW5lYXI7XHJcblxyXG4gICAgdmFyIHByZXZNYXRlcmlhbDtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgbWF0ID0gbGlzdFtpXS5tYXRlcmlhbDtcclxuICAgICAgICBpZiAobWF0ID09PSBwcmV2TWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbmFibGVUb25lbWFwcGluZyA/IG1hdC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1RPTkVNQVBQSU5HJykgOiBtYXQudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1RPTkVNQVBQSU5HJyk7XHJcbiAgICAgICAgaWYgKGlzTGluZWFyU3BhY2UpIHtcclxuICAgICAgICAgICAgdmFyIGRlY29kZVNSR0IgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoaXNTa3lib3ggJiYgbWF0LmdldCgnZW52aXJvbm1lbnRNYXAnKSAmJiAhbWF0LmdldCgnZW52aXJvbm1lbnRNYXAnKS5zUkdCKSB7XHJcbiAgICAgICAgICAgICAgICBkZWNvZGVTUkdCID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVjb2RlU1JHQiAmJiBtYXQuZGVmaW5lKCdmcmFnbWVudCcsICdTUkdCX0RFQ09ERScpO1xyXG4gICAgICAgICAgICBtYXQuZGVmaW5lKCdmcmFnbWVudCcsICdTUkdCX0VOQ09ERScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWF0LnVuZGVmaW5lKCdmcmFnbWVudCcsICdTUkdCX0RFQ09ERScpO1xyXG4gICAgICAgICAgICBtYXQudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NSR0JfRU5DT0RFJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcmV2TWF0ZXJpYWwgPSBtYXQ7XHJcbiAgICB9XHJcbn07XHJcblxyXG5BcHAzRC5wcm90b3R5cGUuX2RvUmVuZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSkge1xyXG4gICAgdmFyIGNhbWVyYSA9IHNjZW5lLmdldE1haW5DYW1lcmEoKTtcclxuICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhLCB0cnVlKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBEbyByZW5kZXJcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9pblJlbmRlciA9IHRydWU7XHJcbiAgICB2YXIgYXBwTlMgPSB0aGlzLl9hcHBOUztcclxuICAgIGFwcE5TLmJlZm9yZVJlbmRlciAmJiBhcHBOUy5iZWZvcmVSZW5kZXIoc2VsZik7XHJcblxyXG4gICAgdmFyIHNjZW5lID0gdGhpcy5zY2VuZTtcclxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcbiAgICB2YXIgc2hhZG93UGFzcyA9IHRoaXMuX3NoYWRvd1Bhc3M7XHJcblxyXG4gICAgc2NlbmUudXBkYXRlKCk7XHJcbiAgICB2YXIgc2t5Ym94TGlzdCA9IFtdO1xyXG4gICAgc2NlbmUuc2t5Ym94ICYmIHNreWJveExpc3QucHVzaChzY2VuZS5za3lib3gpO1xyXG4gICAgc2NlbmUuc2t5ZG9tZSAmJiBza3lib3hMaXN0LnB1c2goc2NlbmUuc2t5ZG9tZSk7XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlR3JhcGhpY09wdGlvbnMoYXBwTlMuZ3JhcGhpYywgc2t5Ym94TGlzdCwgdHJ1ZSk7XHJcbiAgICAvLyBSZW5kZXIgc2hhZG93IHBhc3NcclxuICAgIHNoYWRvd1Bhc3MgJiYgc2hhZG93UGFzcy5yZW5kZXIocmVuZGVyZXIsIHNjZW5lLCBudWxsLCB0cnVlKTtcclxuXHJcbiAgICB0aGlzLl9kb1JlbmRlcihyZW5kZXJlciwgc2NlbmUsIHRydWUpO1xyXG5cclxuICAgIGFwcE5TLmFmdGVyUmVuZGVyICYmIGFwcE5TLmFmdGVyUmVuZGVyKHNlbGYpO1xyXG4gICAgdGhpcy5faW5SZW5kZXIgPSBmYWxzZTtcclxufTtcclxuXHJcbkFwcDNELnByb3RvdHlwZS5jb2xsZWN0UmVzb3VyY2VzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcclxuICAgIHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7XHJcbiAgICB2YXIgdGV4dHVyZXNMaXN0ID0gdGhpcy5fdGV4dHVyZXNMaXN0O1xyXG4gICAgdmFyIGdlb21ldHJpZXNMaXN0ID0gdGhpcy5fZ2VvbWV0cmllc0xpc3Q7XHJcbiAgICAvLyBNYXJrIGFsbCByZXNvdXJjZXMgdW51c2VkO1xyXG4gICAgbWFya1VudXNlZCh0ZXh0dXJlc0xpc3QpO1xyXG4gICAgbWFya1VudXNlZChnZW9tZXRyaWVzTGlzdCk7XHJcblxyXG4gICAgLy8gQ29sbGVjdCByZXNvdXJjZXMgdXNlZCBpbiB0aGlzIGZyYW1lLlxyXG4gICAgdmFyIG5ld1RleHR1cmVzTGlzdCA9IFtdO1xyXG4gICAgdmFyIG5ld0dlb21ldHJpZXNMaXN0ID0gW107XHJcbiAgICBjb2xsZWN0UmVzb3VyY2VzKHNjZW5lLCBuZXdUZXh0dXJlc0xpc3QsIG5ld0dlb21ldHJpZXNMaXN0KTtcclxuXHJcbiAgICAvLyBEaXNwb3NlIHRob3NlIHVuc2VkIHJlc291cmNlcy5cclxuICAgIGNoZWNrQW5kRGlzcG9zZShyZW5kZXJlciwgdGV4dHVyZXNMaXN0KTtcclxuICAgIGNoZWNrQW5kRGlzcG9zZShyZW5kZXJlciwgZ2VvbWV0cmllc0xpc3QpO1xyXG5cclxuICAgIHRoaXMuX3RleHR1cmVzTGlzdCA9IG5ld1RleHR1cmVzTGlzdDtcclxuICAgIHRoaXMuX2dlb21ldHJpZXNMaXN0ID0gbmV3R2VvbWV0cmllc0xpc3Q7XHJcbn07XHJcblxyXG5cclxuZnVuY3Rpb24gbWFya1VudXNlZChyZXNvdXJjZUxpc3QpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzb3VyY2VMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcmVzb3VyY2VMaXN0W2ldLl9fdXNlZCA9IDA7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNoZWNrQW5kRGlzcG9zZShyZW5kZXJlciwgcmVzb3VyY2VMaXN0KSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc291cmNlTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICghcmVzb3VyY2VMaXN0W2ldLl9fdXNlZCkge1xyXG4gICAgICAgICAgICByZXNvdXJjZUxpc3RbaV0uZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVVc2VkKHJlc291cmNlLCBsaXN0KSB7XHJcbiAgICByZXNvdXJjZS5fX3VzZWQgPSByZXNvdXJjZS5fX3VzZWQgfHwgMDtcclxuICAgIHJlc291cmNlLl9fdXNlZCsrO1xyXG4gICAgaWYgKHJlc291cmNlLl9fdXNlZCA9PT0gMSkge1xyXG4gICAgICAgIC8vIERvbid0IHB1c2ggdG8gdGhlIGxpc3QgdHdpY2UuXHJcbiAgICAgICAgbGlzdC5wdXNoKHJlc291cmNlKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjb2xsZWN0UmVzb3VyY2VzKHNjZW5lLCB0ZXh0dXJlUmVzb3VyY2VMaXN0LCBnZW9tZXRyeVJlc291cmNlTGlzdCkge1xyXG4gICAgdmFyIHByZXZNYXRlcmlhbDtcclxuICAgIHZhciBwcmV2R2VvbWV0cnk7XHJcbiAgICBzY2VuZS50cmF2ZXJzZShmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgIGlmIChyZW5kZXJhYmxlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IHJlbmRlcmFibGUuZ2VvbWV0cnk7XHJcbiAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcblxyXG4gICAgICAgICAgICAvLyBUT0RPIG9wdGltaXplISFcclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsICE9PSBwcmV2TWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlVW5pZm9ybXMgPSBtYXRlcmlhbC5nZXRUZXh0dXJlVW5pZm9ybXMoKTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHUgPSAwOyB1IDwgdGV4dHVyZVVuaWZvcm1zLmxlbmd0aDsgdSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWZvcm1OYW1lID0gdGV4dHVyZVVuaWZvcm1zW3VdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBtYXRlcmlhbC51bmlmb3Jtc1t1bmlmb3JtTmFtZV0udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWZvcm1UeXBlID0gbWF0ZXJpYWwudW5pZm9ybXNbdW5pZm9ybU5hbWVdLnR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVHlwZSA9PT0gJ3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVVzZWQodmFsLCB0ZXh0dXJlUmVzb3VyY2VMaXN0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUgPT09ICd0dicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB2YWwubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxba10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVVc2VkKHZhbFtrXSwgdGV4dHVyZVJlc291cmNlTGlzdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGdlb21ldHJ5ICE9PSBwcmV2R2VvbWV0cnkpIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZWQoZ2VvbWV0cnksIGdlb21ldHJ5UmVzb3VyY2VMaXN0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcHJldk1hdGVyaWFsID0gbWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIHByZXZHZW9tZXRyeSA9IGdlb21ldHJ5O1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgLy8gVHJhY2sgQW1iaWVudEN1YmVtYXBcclxuICAgICAgICBpZiAoc2NlbmUubGlnaHRzW2tdLmN1YmVtYXApIHtcclxuICAgICAgICAgICAgdXBkYXRlVXNlZChzY2VuZS5saWdodHNba10uY3ViZW1hcCwgdGV4dHVyZVJlc291cmNlTGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBMb2FkIGEgdGV4dHVyZSBmcm9tIGltYWdlIG9yIHN0cmluZy5cclxuICogQHBhcmFtIHtJbWFnZUxpa2V9IGltZ1xyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIFRleHR1cmUgb3B0aW9ucy5cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbGlwWT10cnVlXSBJZiBmbGlwWS4gU2VlIHtAbGluayBjbGF5LlRleHR1cmUuZmxpcFl9XHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuY29udmVydFRvUE9UPWZhbHNlXSBGb3JjZSBjb252ZXJ0IE5vbmUgUG93ZXIgb2YgVHdvIHRleHR1cmUgdG8gUG93ZXIgb2YgdHdvIHNvIGl0IGNhbiBiZSB0aWxlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmFuaXNvdHJvcGljXSBBbmlzb3Ryb3BpYyBmaWx0ZXJpbmcuIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLmFuaXNvdHJvcGljfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMud3JhcFM9Y2xheS5UZXh0dXJlLlJFUEVBVF0gU2VlIHtAbGluayBjbGF5LlRleHR1cmUud3JhcFN9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy53cmFwVD1jbGF5LlRleHR1cmUuUkVQRUFUXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS53cmFwVH1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLm1pbkZpbHRlcj1jbGF5LlRleHR1cmUuTElORUFSX01JUE1BUF9MSU5FQVJdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLm1pbkZpbHRlcn1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLm1hZ0ZpbHRlcj1jbGF5LlRleHR1cmUuTElORUFSXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5tYWdGaWx0ZXJ9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5leHBvc3VyZV0gT25seSBiZSB1c2VkIHdoZW4gc291cmNlIGlzIGEgSERSIGltYWdlLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt1c2VDYWNoZV0gSWYgdXNlIGNhY2hlLlxyXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgYXBwLmxvYWRUZXh0dXJlKCdkaWZmdXNlTWFwLmpwZycpXHJcbiAqICAgICAgLnRoZW4oZnVuY3Rpb24gKHRleHR1cmUpIHtcclxuICogICAgICAgICAgbWF0ZXJpYWwuc2V0KCdkaWZmdXNlTWFwJywgdGV4dHVyZSk7XHJcbiAqICAgICAgfSk7XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUubG9hZFRleHR1cmUgPSBmdW5jdGlvbiAodXJsT3JJbWcsIG9wdHMsIHVzZUNhY2hlKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICB2YXIga2V5ID0gZ2V0S2V5RnJvbUltYWdlTGlrZSh1cmxPckltZyk7XHJcbiAgICBpZiAodXNlQ2FjaGUpIHtcclxuICAgICAgICBpZiAodGhpcy5fdGV4Q2FjaGUuZ2V0KGtleSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleENhY2hlLmdldChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIFRPRE8gUHJvbWlzZSA/XHJcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZSA9IHNlbGYubG9hZFRleHR1cmVTeW5jKHVybE9ySW1nLCBvcHRzKTtcclxuICAgICAgICBpZiAoIXRleHR1cmUuaXNSZW5kZXJhYmxlKCkpIHtcclxuICAgICAgICAgICAgdGV4dHVyZS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLl9kaXNwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc29sdmUodGV4dHVyZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmVycm9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLl9kaXNwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUodGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAodXNlQ2FjaGUpIHtcclxuICAgICAgICB0aGlzLl90ZXhDYWNoZS5wdXQoa2V5LCBwcm9taXNlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcm9taXNlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHRleHR1cmUgZnJvbSBpbWFnZSBvciBzdHJpbmcgc3luY2hyb25vdXNseS4gVGV4dHVyZSBjYW4gYmUgdXNlIGRpcmVjdGx5IGFuZCBkb24ndCBoYXZlIHRvIHdhaXQgZm9yIGl0J3MgbG9hZGVkLlxyXG4gKiBAcGFyYW0ge0ltYWdlTGlrZX0gaW1nXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gVGV4dHVyZSBvcHRpb25zLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmZsaXBZPXRydWVdIElmIGZsaXBZLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5mbGlwWX1cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5jb252ZXJ0VG9QT1Q9ZmFsc2VdIEZvcmNlIGNvbnZlcnQgTm9uZSBQb3dlciBvZiBUd28gdGV4dHVyZSB0byBQb3dlciBvZiB0d28gc28gaXQgY2FuIGJlIHRpbGVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuYW5pc290cm9waWNdIEFuaXNvdHJvcGljIGZpbHRlcmluZy4gU2VlIHtAbGluayBjbGF5LlRleHR1cmUuYW5pc290cm9waWN9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy53cmFwUz1jbGF5LlRleHR1cmUuUkVQRUFUXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS53cmFwU31cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLndyYXBUPWNsYXkuVGV4dHVyZS5SRVBFQVRdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLndyYXBUfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMubWluRmlsdGVyPWNsYXkuVGV4dHVyZS5MSU5FQVJfTUlQTUFQX0xJTkVBUl0gU2VlIHtAbGluayBjbGF5LlRleHR1cmUubWluRmlsdGVyfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMubWFnRmlsdGVyPWNsYXkuVGV4dHVyZS5MSU5FQVJdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLm1hZ0ZpbHRlcn1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmV4cG9zdXJlXSBPbmx5IGJlIHVzZWQgd2hlbiBzb3VyY2UgaXMgYSBIRFIgaW1hZ2UuXHJcbiAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgdmFyIHRleHR1cmUgPSBhcHAubG9hZFRleHR1cmUoJ2RpZmZ1c2VNYXAuanBnJywge1xyXG4gKiAgICAgIGFuaXNvdHJvcGljOiA4LFxyXG4gKiAgICAgIGZsaXBZOiBmYWxzZVxyXG4gKiAgfSk7XHJcbiAqICBtYXRlcmlhbC5zZXQoJ2RpZmZ1c2VNYXAnLCB0ZXh0dXJlKTtcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5sb2FkVGV4dHVyZVN5bmMgPSBmdW5jdGlvbiAodXJsT3JJbWcsIG9wdHMpIHtcclxuICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRChvcHRzKTtcclxuICAgIGlmICh0eXBlb2YgdXJsT3JJbWcgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgaWYgKHVybE9ySW1nLm1hdGNoKC8uaGRyJHxeZGF0YTphcHBsaWNhdGlvblxcL29jdGV0LXN0cmVhbS8pKSB7XHJcbiAgICAgICAgICAgIHRleHR1cmUgPSB0ZXh0dXJlVXRpbC5sb2FkVGV4dHVyZSh1cmxPckltZywge1xyXG4gICAgICAgICAgICAgICAgZXhwb3N1cmU6IG9wdHMgJiYgb3B0cy5leHBvc3VyZSxcclxuICAgICAgICAgICAgICAgIGZpbGVUeXBlOiAnaGRyJ1xyXG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmRpcnR5KCk7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnRyaWdnZXIoJ3N1Y2Nlc3MnKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRzKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlW2tleV0gPSBvcHRzW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRleHR1cmUubG9hZCh1cmxPckltZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNJbWFnZUxpa2VFbGVtZW50KHVybE9ySW1nKSkge1xyXG4gICAgICAgIHRleHR1cmUuaW1hZ2UgPSB1cmxPckltZztcclxuICAgICAgICB0ZXh0dXJlLmR5bmFtaWMgPSB1cmxPckltZyBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGV4dHVyZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSB0ZXh0dXJlIGZyb20gaW1hZ2Ugb3Igc3RyaW5nIHN5bmNocm9ub3VzbHkuIFRleHR1cmUgY2FuIGJlIHVzZSBkaXJlY3RseSBhbmQgZG9uJ3QgaGF2ZSB0byB3YWl0IGZvciBpdCdzIGxvYWRlZC5cclxuICogQHBhcmFtIHtJbWFnZUxpa2V9IGltZ1xyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIFRleHR1cmUgb3B0aW9ucy5cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbGlwWT1mYWxzZV0gSWYgZmxpcFkuIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLmZsaXBZfVxyXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgYXBwLmxvYWRUZXh0dXJlQ3ViZSh7XHJcbiAqICAgICAgcHg6ICdza3lib3gvcHguanBnJywgcHk6ICdza3lib3gvcHkuanBnJywgcHo6ICdza3lib3gvcHouanBnJyxcclxuICogICAgICBueDogJ3NreWJveC9ueC5qcGcnLCBueTogJ3NreWJveC9ueS5qcGcnLCBuejogJ3NreWJveC9uei5qcGcnXHJcbiAqICB9KS50aGVuKGZ1bmN0aW9uICh0ZXh0dXJlKSB7XHJcbiAqICAgICAgc2t5Ym94LnNldEVudmlyb25tZW50TWFwKHRleHR1cmUpO1xyXG4gKiAgfSlcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5sb2FkVGV4dHVyZUN1YmUgPSBmdW5jdGlvbiAoaW1nTGlzdCwgb3B0cykge1xyXG4gICAgdmFyIHRleHR1cmVDdWJlID0gdGhpcy5sb2FkVGV4dHVyZUN1YmVTeW5jKGltZ0xpc3QsIG9wdHMpO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBpZiAodGV4dHVyZUN1YmUuaXNSZW5kZXJhYmxlKCkpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0ZXh0dXJlQ3ViZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0ZXh0dXJlQ3ViZS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodGV4dHVyZUN1YmUpO1xyXG4gICAgICAgICAgICB9KS5lcnJvcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgdGV4dHVyZSBmcm9tIGltYWdlIG9yIHN0cmluZyBzeW5jaHJvbm91c2x5LiBUZXh0dXJlIGNhbiBiZSB1c2UgZGlyZWN0bHkgYW5kIGRvbid0IGhhdmUgdG8gd2FpdCBmb3IgaXQncyBsb2FkZWQuXHJcbiAqIEBwYXJhbSB7SW1hZ2VMaWtlfSBpbWdcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSBUZXh0dXJlIG9wdGlvbnMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZmxpcFk9ZmFsc2VdIElmIGZsaXBZLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5mbGlwWX1cclxuICogQHJldHVybiB7Y2xheS5UZXh0dXJlQ3ViZX1cclxuICogQGV4YW1wbGVcclxuICogIHZhciB0ZXh0dXJlID0gYXBwLmxvYWRUZXh0dXJlQ3ViZVN5bmMoe1xyXG4gKiAgICAgIHB4OiAnc2t5Ym94L3B4LmpwZycsIHB5OiAnc2t5Ym94L3B5LmpwZycsIHB6OiAnc2t5Ym94L3B6LmpwZycsXHJcbiAqICAgICAgbng6ICdza3lib3gvbnguanBnJywgbnk6ICdza3lib3gvbnkuanBnJywgbno6ICdza3lib3gvbnouanBnJ1xyXG4gKiAgfSk7XHJcbiAqICBza3lib3guc2V0RW52aXJvbm1lbnRNYXAodGV4dHVyZSk7XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUubG9hZFRleHR1cmVDdWJlU3luYyA9IGZ1bmN0aW9uIChpbWdMaXN0LCBvcHRzKSB7XHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuICAgIG9wdHMuZmxpcFkgPSBvcHRzLmZsaXBZIHx8IGZhbHNlO1xyXG4gICAgdmFyIHRleHR1cmVDdWJlID0gbmV3IFRleHR1cmVDdWJlKG9wdHMpO1xyXG4gICAgaWYgKCFpbWdMaXN0IHx8ICFpbWdMaXN0LnB4IHx8ICFpbWdMaXN0Lm54IHx8ICFpbWdMaXN0LnB5IHx8ICFpbWdMaXN0Lm55IHx8ICFpbWdMaXN0LnB6IHx8ICFpbWdMaXN0Lm56KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGN1YmVtYXAgZm9ybWF0LiBTaG91bGQgYmUgYW4gb2JqZWN0IGluY2x1ZGluZyBweCxueCxweSxueSxweixueicpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBpbWdMaXN0LnB4ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRleHR1cmVDdWJlLmxvYWQoaW1nTGlzdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0ZXh0dXJlQ3ViZS5pbWFnZSA9IHV0aWwuY2xvbmUoaW1nTGlzdCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGV4dHVyZUN1YmU7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgbWF0ZXJpYWwuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fFN0YW5kYXJkTWF0ZXJpYWxNUkNvbmZpZ30gbWF0ZXJpYWxDb25maWcuIG1hdGVyaWFsQ29uZmlnIGNvbnRhaW5zIGBzaGFkZXJgLCBgdHJhbnNwYXJlbnRgIGFuZCB1bmlmb3JtcyB0aGF0IHVzZWQgaW4gY29ycmVzcG9uZGluZyB1bmlmb3Jtcy5cclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmlmb3JtcyBjYW4gYmUgYGNvbG9yYCwgYGFscGhhYCBgZGlmZnVzZU1hcGAgZXRjLlxyXG4gKiBAcGFyYW0ge3N0cmluZ3xjbGF5LlNoYWRlcn0gW3NoYWRlcj0nY2xheS5zdGFuZGFyZE1SJ10gRGVmYXVsdCB0byBiZSBzdGFuZGFyZCBzaGFkZXIgd2l0aCBtZXRhbG5lc3MgYW5kIHJvdWdobmVzcyB3b3JrZmxvdy5cclxuICogQHBhcmFtIHtib29sZWFufSBbdHJhbnNwYXJlbnQ9ZmFsc2VdIElmIG1hdGVyaWFsIGlzIHRyYW5zcGFyZW50LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt0ZXh0dXJlQ29udmVydFRvUE9UPWZhbHNlXSBGb3JjZSBjb252ZXJ0IE5vbmUgUG93ZXIgb2YgVHdvIHRleHR1cmUgdG8gUG93ZXIgb2YgdHdvIHNvIGl0IGNhbiBiZSB0aWxlZC5cclxuICogQHBhcmFtIHtib29sZWFufSBbdGV4dHVyZUZsaXBZPXRydWVdIElmIGZsaXAgeSBvZiB0ZXh0dXJlLlxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbdGV4dHVyZUxvYWRlZF0gQ2FsbGJhY2sgd2hlbiBzaW5nbGUgdGV4dHVyZSBsb2FkZWQuXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFt0ZXh0dXJlc1JlYWR5XSBDYWxsYmFjayB3aGVuIGFsbCB0ZXh0dXJlIGxvYWRlZC5cclxuICogQHJldHVybiB7Y2xheS5NYXRlcmlhbH1cclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVNYXRlcmlhbCA9IGZ1bmN0aW9uIChtYXRDb25maWcpIHtcclxuICAgIG1hdENvbmZpZyA9IG1hdENvbmZpZyB8fCB7fTtcclxuICAgIG1hdENvbmZpZy5zaGFkZXIgPSBtYXRDb25maWcuc2hhZGVyIHx8ICdjbGF5LnN0YW5kYXJkTVInO1xyXG4gICAgdmFyIHNoYWRlciA9IG1hdENvbmZpZy5zaGFkZXIgaW5zdGFuY2VvZiBTaGFkZXIgPyBtYXRDb25maWcuc2hhZGVyIDogc2hhZGVyTGlicmFyeS5nZXQobWF0Q29uZmlnLnNoYWRlcik7XHJcbiAgICB2YXIgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgIHNoYWRlcjogc2hhZGVyXHJcbiAgICB9KTtcclxuICAgIGlmIChtYXRDb25maWcubmFtZSkge1xyXG4gICAgICAgIG1hdGVyaWFsLm5hbWUgPSBtYXRDb25maWcubmFtZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdGV4dHVyZXNMb2FkaW5nID0gW107XHJcbiAgICBmdW5jdGlvbiBtYWtlVGV4dHVyZVNldHRlcihrZXkpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRleHR1cmUpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybShrZXksIHRleHR1cmUpO1xyXG4gICAgICAgICAgICBtYXRDb25maWcudGV4dHVyZUxvYWRlZCAmJiBtYXRDb25maWcudGV4dHVyZUxvYWRlZChrZXksIHRleHR1cmUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZm9yICh2YXIga2V5IGluIG1hdENvbmZpZykge1xyXG4gICAgICAgIGlmIChtYXRlcmlhbC51bmlmb3Jtc1trZXldKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWwgPSBtYXRDb25maWdba2V5XTtcclxuICAgICAgICAgICAgaWYgKChtYXRlcmlhbC51bmlmb3Jtc1trZXldLnR5cGUgPT09ICd0JyB8fCBpc0ltYWdlTGlrZUVsZW1lbnQodmFsKSlcclxuICAgICAgICAgICAgICAgICYmICEodmFsIGluc3RhbmNlb2YgVGV4dHVyZSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUcnkgdG8gbG9hZCBhIHRleHR1cmUuXHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlc0xvYWRpbmcucHVzaCh0aGlzLmxvYWRUZXh0dXJlKHZhbCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1BPVDogbWF0Q29uZmlnLnRleHR1cmVDb252ZXJ0VG9QT1QgfHwgZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZmxpcFk6IG1hdENvbmZpZy50ZXh0dXJlRmxpcFkgPT0gbnVsbCA/IHRydWUgOiBtYXRDb25maWcudGV4dHVyZUZsaXBZXHJcbiAgICAgICAgICAgICAgICB9KS50aGVuKG1ha2VUZXh0dXJlU2V0dGVyKGtleSkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oa2V5LCB2YWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChtYXRDb25maWcudHJhbnNwYXJlbnQpIHtcclxuICAgICAgICBtYXRDb25maWcuZGVwdGhNYXNrID0gZmFsc2U7XHJcbiAgICAgICAgbWF0Q29uZmlnLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKG1hdENvbmZpZy50ZXh0dXJlc1JlYWR5KSB7XHJcbiAgICAgICAgUHJvbWlzZS5hbGwodGV4dHVyZXNMb2FkaW5nKS50aGVuKGZ1bmN0aW9uICh0ZXh0dXJlcykge1xyXG4gICAgICAgICAgICBtYXRDb25maWcudGV4dHVyZXNSZWFkeSh0ZXh0dXJlcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1hdGVyaWFsO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGN1YmUgbWVzaCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZSBvciB0aGUgZ2l2ZW4gcGFyZW50IG5vZGUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge09iamVjdHxjbGF5Lk1hdGVyaWFsfSBbbWF0ZXJpYWxdXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fG51bWJlcn0gW3N1YmRpdmlzaW9uPTFdIFN1YmRpdmlzaW9uIG9mIGN1YmUuXHJcbiAqICAgICAgICAgIENhbiBiZSBhIG51bWJlciB0byByZXByZXNlbnQgYm90aCB3aWR0aCwgaGVpZ2h0IGFuZCBkZXB0aCBkaW1lbnNpb25zLiBPciBhbiBhcnJheSB0byByZXByZXNlbnQgdGhlbSByZXNwZWN0aXZlbHkuXHJcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICogQGV4YW1wbGVcclxuICogIC8vIENyZWF0ZSBhIHdoaXRlIGN1YmUuXHJcbiAqICBhcHAuY3JlYXRlQ3ViZSgpXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQ3ViZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCwgcGFyZW50Tm9kZSwgc3ViZGl2KSB7XHJcbiAgICBpZiAoc3ViZGl2ID09IG51bGwpIHtcclxuICAgICAgICBzdWJkaXYgPSAxO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBzdWJkaXYgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gW3N1YmRpdiwgc3ViZGl2LCBzdWJkaXZdO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBnZW9LZXkgPSAnY3ViZS0nICsgc3ViZGl2LmpvaW4oJy0nKTtcclxuICAgIHZhciBjdWJlID0gdGhpcy5fZ2VvQ2FjaGUuZ2V0KGdlb0tleSk7XHJcbiAgICBpZiAoIWN1YmUpIHtcclxuICAgICAgICBjdWJlID0gbmV3IEN1YmVHZW8oe1xyXG4gICAgICAgICAgICB3aWR0aFNlZ21lbnRzOiBzdWJkaXZbMF0sXHJcbiAgICAgICAgICAgIGhlaWdodFNlZ21lbnRzOiBzdWJkaXZbMV0sXHJcbiAgICAgICAgICAgIGRlcHRoU2VnbWVudHM6IHN1YmRpdlsyXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGN1YmUuZ2VuZXJhdGVUYW5nZW50cygpO1xyXG4gICAgICAgIHRoaXMuX2dlb0NhY2hlLnB1dChnZW9LZXksIGN1YmUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVzaChjdWJlLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgY3ViZSBtZXNoIHRoYXQgY2FtZXJhIGlzIGluc2lkZSB0aGUgY3ViZS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7T2JqZWN0fGNsYXkuTWF0ZXJpYWx9IFttYXRlcmlhbF1cclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtwYXJlbnROb2RlXSBQYXJlbnQgbm9kZSB0byBhcHBlbmQuIERlZmF1bHQgdG8gYmUgc2NlbmUuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58bnVtYmVyfSBbc3ViZGl2aXNpb249MV0gU3ViZGl2aXNpb24gb2YgY3ViZS5cclxuICogICAgICAgICAgQ2FuIGJlIGEgbnVtYmVyIHRvIHJlcHJlc2VudCBib3RoIHdpZHRoLCBoZWlnaHQgYW5kIGRlcHRoIGRpbWVuc2lvbnMuIE9yIGFuIGFycmF5IHRvIHJlcHJlc2VudCB0aGVtIHJlc3BlY3RpdmVseS5cclxuICogQHJldHVybiB7Y2xheS5NZXNofVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgLy8gQ3JlYXRlIGEgd2hpdGUgY3ViZSBpbnNpZGUuXHJcbiAqICBhcHAuY3JlYXRlQ3ViZUluc2lkZSgpXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQ3ViZUluc2lkZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCwgcGFyZW50Tm9kZSwgc3ViZGl2KSB7XHJcbiAgICBpZiAoc3ViZGl2ID09IG51bGwpIHtcclxuICAgICAgICBzdWJkaXYgPSAxO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBzdWJkaXYgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gW3N1YmRpdiwgc3ViZGl2LCBzdWJkaXZdO1xyXG4gICAgfVxyXG4gICAgdmFyIGdlb0tleSA9ICdjdWJlSW5zaWRlLScgKyBzdWJkaXYuam9pbignLScpO1xyXG4gICAgdmFyIGN1YmUgPSB0aGlzLl9nZW9DYWNoZS5nZXQoZ2VvS2V5KTtcclxuICAgIGlmICghY3ViZSkge1xyXG4gICAgICAgIGN1YmUgPSBuZXcgQ3ViZUdlbyh7XHJcbiAgICAgICAgICAgIGluc2lkZTogdHJ1ZSxcclxuICAgICAgICAgICAgd2lkdGhTZWdtZW50czogc3ViZGl2WzBdLFxyXG4gICAgICAgICAgICBoZWlnaHRTZWdtZW50czogc3ViZGl2WzFdLFxyXG4gICAgICAgICAgICBkZXB0aFNlZ21lbnRzOiBzdWJkaXZbMl1cclxuICAgICAgICB9KTtcclxuICAgICAgICBjdWJlLmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgICAgICB0aGlzLl9nZW9DYWNoZS5wdXQoZ2VvS2V5LCBjdWJlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVNZXNoKGN1YmUsIG1hdGVyaWFsLCBwYXJlbnROb2RlKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBzcGhlcmUgbWVzaCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZSBvciB0aGUgZ2l2ZW4gcGFyZW50IG5vZGUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge09iamVjdHxjbGF5Lk1hdGVyaWFsfSBbbWF0ZXJpYWxdXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N1YmRpdmlzaW9uPTIwXSBTdWJkaXZpc2lvbiBvZiBzcGhlcmUuXHJcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICogQGV4YW1wbGVcclxuICogIC8vIENyZWF0ZSBhIHNlbWktdHJhbnNwYXJlbnQgc3BoZXJlLlxyXG4gKiAgYXBwLmNyZWF0ZVNwaGVyZSh7XHJcbiAqICAgICAgY29sb3I6IFswLCAwLCAxXSxcclxuICogICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICogICAgICBhbHBoYTogMC41XHJcbiAqICB9KVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZVNwaGVyZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCwgcGFyZW50Tm9kZSwgc3ViZGl2aXNpb24pIHtcclxuICAgIGlmIChzdWJkaXZpc2lvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgc3ViZGl2aXNpb24gPSAyMDtcclxuICAgIH1cclxuICAgIHZhciBnZW9LZXkgPSAnc3BoZXJlLScgKyBzdWJkaXZpc2lvbjtcclxuICAgIHZhciBzcGhlcmUgPSB0aGlzLl9nZW9DYWNoZS5nZXQoZ2VvS2V5KTtcclxuICAgIGlmICghc3BoZXJlKSB7XHJcbiAgICAgICAgc3BoZXJlID0gbmV3IFNwaGVyZUdlbyh7XHJcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IHN1YmRpdmlzaW9uICogMixcclxuICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IHN1YmRpdmlzaW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc3BoZXJlLmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgICAgICB0aGlzLl9nZW9DYWNoZS5wdXQoZ2VvS2V5LCBzcGhlcmUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVzaChzcGhlcmUsIG1hdGVyaWFsLCBwYXJlbnROb2RlKTtcclxufTtcclxuXHJcbi8vIFRPRE8gbWF5IGJlIG1vZGlmaWVkP1xyXG4vKipcclxuICogQ3JlYXRlIGEgcGxhbmUgbWVzaCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZSBvciB0aGUgZ2l2ZW4gcGFyZW50IG5vZGUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge09iamVjdHxjbGF5Lk1hdGVyaWFsfSBbbWF0ZXJpYWxdXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fG51bWJlcn0gW3N1YmRpdmlzaW9uPTFdIFN1YmRpdmlzaW9uIG9mIHBsYW5lLlxyXG4gKiAgICAgICAgICBDYW4gYmUgYSBudW1iZXIgdG8gcmVwcmVzZW50IGJvdGggd2lkdGggYW5kIGhlaWdodCBkaW1lbnNpb25zLiBPciBhbiBhcnJheSB0byByZXByZXNlbnQgdGhlbSByZXNwZWN0aXZlbHkuXHJcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICogQGV4YW1wbGVcclxuICogIC8vIENyZWF0ZSBhIHJlZCBjb2xvciBwbGFuZS5cclxuICogIGFwcC5jcmVhdGVQbGFuZSh7XHJcbiAqICAgICAgY29sb3I6IFsxLCAwLCAwXVxyXG4gKiAgfSlcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVQbGFuZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCwgcGFyZW50Tm9kZSwgc3ViZGl2KSB7XHJcbiAgICBpZiAoc3ViZGl2ID09IG51bGwpIHtcclxuICAgICAgICBzdWJkaXYgPSAxO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBzdWJkaXYgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gW3N1YmRpdiwgc3ViZGl2XTtcclxuICAgIH1cclxuICAgIHZhciBnZW9LZXkgPSAncGxhbmUtJyArIHN1YmRpdi5qb2luKCctJyk7XHJcbiAgICB2YXIgcGxhbmVHZW8gPSB0aGlzLl9nZW9DYWNoZS5nZXQoZ2VvS2V5KTtcclxuICAgIGlmICghcGxhbmVHZW8pIHtcclxuICAgICAgICBwbGFuZUdlbyA9IG5ldyBQbGFuZUdlbyh7XHJcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IHN1YmRpdlswXSxcclxuICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IHN1YmRpdlsxXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHBsYW5lR2VvLmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgICAgICB0aGlzLl9nZW9DYWNoZS5wdXQoZ2VvS2V5LCBwbGFuZUdlbyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVNZXNoKHBsYW5lR2VvLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIG1lc2ggd2l0aCBwYXJhbWV0cmljIHN1cmZhY2UgZnVuY3Rpb25cclxuICogQHBhcmFtIHtPYmplY3R8Y2xheS5NYXRlcmlhbH0gW21hdGVyaWFsXVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRvIGFwcGVuZC4gRGVmYXVsdCB0byBiZSBzY2VuZS5cclxuICogQHBhcmFtIHtPYmplY3R9IGdlbmVyYXRvclxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IueFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IueVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IuelxyXG4gKiBAcGFyYW0ge0FycmF5fSBbZ2VuZXJhdG9yLnU9WzAsIDEsIDAuMDVdXVxyXG4gKiBAcGFyYW0ge0FycmF5fSBbZ2VuZXJhdG9yLnY9WzAsIDEsIDAuMDVdXVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlUGFyYW1ldHJpY1N1cmZhY2UgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIHBhcmVudE5vZGUsIGdlbmVyYXRvcikge1xyXG4gICAgdmFyIGdlbyA9IG5ldyBQYXJhbWV0cmljU3VyZmFjZUdlbyh7XHJcbiAgICAgICAgZ2VuZXJhdG9yOiBnZW5lcmF0b3JcclxuICAgIH0pO1xyXG4gICAgZ2VvLmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZU1lc2goZ2VvLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGdlbmVyYWwgbWVzaCB3aXRoIGdpdmVuIGdlb21ldHJ5IGluc3RhbmNlIGFuZCBtYXRlcmlhbCBjb25maWcuXHJcbiAqIEBwYXJhbSB7Y2xheS5HZW9tZXRyeX0gZ2VvbWV0cnlcclxuICogQHJldHVybiB7Y2xheS5NZXNofVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZU1lc2ggPSBmdW5jdGlvbiAoZ2VvbWV0cnksIG1hdCwgcGFyZW50Tm9kZSkge1xyXG4gICAgdmFyIG1lc2ggPSBuZXcgTWVzaCh7XHJcbiAgICAgICAgZ2VvbWV0cnk6IGdlb21ldHJ5LFxyXG4gICAgICAgIG1hdGVyaWFsOiBtYXQgaW5zdGFuY2VvZiBNYXRlcmlhbCA/IG1hdCA6IHRoaXMuY3JlYXRlTWF0ZXJpYWwobWF0KVxyXG4gICAgfSk7XHJcbiAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZSB8fCB0aGlzLnNjZW5lO1xyXG4gICAgcGFyZW50Tm9kZS5hZGQobWVzaCk7XHJcbiAgICByZXR1cm4gbWVzaDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYW4gZW1wdHkgbm9kZVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gcGFyZW50Tm9kZVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlTm9kZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlKSB7XHJcbiAgICB2YXIgbm9kZSA9IG5ldyBOb2RlKCk7XHJcbiAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZSB8fCB0aGlzLnNjZW5lO1xyXG4gICAgcGFyZW50Tm9kZS5hZGQobm9kZSk7XHJcbiAgICByZXR1cm4gbm9kZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBwZXJzcGVjdGl2ZSBvciBvcnRob2dyYXBoaWMgY2FtZXJhIGFuZCBhZGQgaXQgdG8gdGhlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gcG9zaXRpb25cclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5LlZlY3RvcjN9IHRhcmdldFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3R5cGU9XCJwZXJzcGVjdGl2ZVwiXSBDYW4gYmUgJ3BlcnNwZWN0aXZlJyBvciAnb3J0aG9ncmFwaGljJyhpbiBzaG9ydCAnb3J0aG8nKVxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gW2V4dGVudF0gRXh0ZW50IGlzIGF2YWlsYWJsZSBvbmx5IGlmIHR5cGUgaXMgb3J0aG9ncmFwaGljLlxyXG4gKiBAcmV0dXJuIHtjbGF5LmNhbWVyYS5QZXJzcGVjdGl2ZXxjbGF5LmNhbWVyYS5PcnRob2dyYXBoaWN9XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQ2FtZXJhID0gZnVuY3Rpb24gKHBvc2l0aW9uLCB0YXJnZXQsIHR5cGUsIGV4dGVudCkge1xyXG4gICAgdmFyIENhbWVyYUN0b3I7XHJcbiAgICB2YXIgaXNPcnRobyA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09ICdvcnRobycgfHwgdHlwZSA9PT0gJ29ydGhvZ3JhcGhpYycpIHtcclxuICAgICAgICBpc09ydGhvID0gdHJ1ZTtcclxuICAgICAgICBDYW1lcmFDdG9yID0gT3J0aG9ncmFwaGljQ2FtZXJhO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHR5cGUgJiYgdHlwZSAhPT0gJ3BlcnNwZWN0aXZlJykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmtvd24gY2FtZXJhIHR5cGUgJyArIHR5cGUgKyAnLiBVc2UgZGVmYXVsdCBwZXJzcGVjdGl2ZSBjYW1lcmEnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgQ2FtZXJhQ3RvciA9IFBlcnNwZWN0aXZlQ2FtZXJhO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjYW1lcmEgPSBuZXcgQ2FtZXJhQ3RvcigpO1xyXG4gICAgaWYgKHBvc2l0aW9uIGluc3RhbmNlb2YgVmVjdG9yMykge1xyXG4gICAgICAgIGNhbWVyYS5wb3NpdGlvbi5jb3B5KHBvc2l0aW9uKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHBvc2l0aW9uIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICBjYW1lcmEucG9zaXRpb24uc2V0QXJyYXkocG9zaXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKHRhcmdldFswXSwgdGFyZ2V0WzFdLCB0YXJnZXRbMl0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcclxuICAgICAgICBjYW1lcmEubG9va0F0KHRhcmdldCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4dGVudCAmJiBpc09ydGhvKSB7XHJcbiAgICAgICAgZXh0ZW50ID0gZXh0ZW50LmFycmF5IHx8IGV4dGVudDtcclxuICAgICAgICBjYW1lcmEubGVmdCA9IC1leHRlbnRbMF0gLyAyO1xyXG4gICAgICAgIGNhbWVyYS5yaWdodCA9IGV4dGVudFswXSAvIDI7XHJcbiAgICAgICAgY2FtZXJhLnRvcCA9IGV4dGVudFsxXSAvIDI7XHJcbiAgICAgICAgY2FtZXJhLmJvdHRvbSA9IC1leHRlbnRbMV0gLyAyO1xyXG4gICAgICAgIGNhbWVyYS5uZWFyID0gMDtcclxuICAgICAgICBjYW1lcmEuZmFyID0gZXh0ZW50WzJdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgY2FtZXJhLmFzcGVjdCA9IHRoaXMucmVuZGVyZXIuZ2V0Vmlld3BvcnRBc3BlY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChjYW1lcmEpO1xyXG5cclxuICAgIHJldHVybiBjYW1lcmE7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgZGlyZWN0aW9uYWwgbGlnaHQgYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58Y2xheS5WZWN0b3IzfSBkaXIgQSBWZWN0b3IzIG9yIGFycmF5IHRvIHJlcHJlc2VudCB0aGUgZGlyZWN0aW9uLlxyXG4gKiBAcGFyYW0ge0NvbG9yfSBbY29sb3I9JyNmZmYnXSBDb2xvciBvZiBkaXJlY3Rpb25hbCBsaWdodCwgZGVmYXVsdCB0byBiZSB3aGl0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtpbnRlbnNpdHldIEludGVuc2l0eSBvZiBkaXJlY3Rpb25hbCBsaWdodCwgZGVmYXVsdCB0byBiZSAxLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgYXBwLmNyZWF0ZURpcmVjdGlvbmFsTGlnaHQoWy0xLCAtMSwgLTFdLCAnI2ZmZicsIDIpO1xyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZURpcmVjdGlvbmFsTGlnaHQgPSBmdW5jdGlvbiAoZGlyLCBjb2xvciwgaW50ZW5zaXR5KSB7XHJcbiAgICB2YXIgbGlnaHQgPSBuZXcgRGlyZWN0aW9uYWxMaWdodCgpO1xyXG4gICAgaWYgKGRpciBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcclxuICAgICAgICBkaXIgPSBkaXIuYXJyYXk7XHJcbiAgICB9XHJcbiAgICBsaWdodC5wb3NpdGlvbi5zZXRBcnJheShkaXIpLm5lZ2F0ZSgpO1xyXG4gICAgbGlnaHQubG9va0F0KFZlY3RvcjMuWkVSTyk7XHJcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbG9yID0gcGFyc2VDb2xvcihjb2xvcik7XHJcbiAgICB9XHJcbiAgICBjb2xvciAhPSBudWxsICYmIChsaWdodC5jb2xvciA9IGNvbG9yKTtcclxuICAgIGludGVuc2l0eSAhPSBudWxsICYmIChsaWdodC5pbnRlbnNpdHkgPSBpbnRlbnNpdHkpO1xyXG5cclxuICAgIHRoaXMuc2NlbmUuYWRkKGxpZ2h0KTtcclxuICAgIHJldHVybiBsaWdodDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBzcG90IGxpZ2h0IGFuZCBhZGQgaXQgdG8gdGhlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gcG9zaXRpb24gUG9zaXRpb24gb2YgdGhlIHNwb3QgbGlnaHQuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58Y2xheS5WZWN0b3IzfSBbdGFyZ2V0XSBUYXJnZXQgcG9zaXRpb24gd2hlcmUgc3BvdCBsaWdodCBwb2ludHMgdG8uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcmFuZ2U9MjBdIEZhbGxvZmYgcmFuZ2Ugb2Ygc3BvdCBsaWdodC4gRGVmYXVsdCB0byBiZSAyMC5cclxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2Ygc3BvdCBsaWdodCwgZGVmYXVsdCB0byBiZSB3aGl0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtpbnRlbnNpdHk9MV0gSW50ZW5zaXR5IG9mIHNwb3QgbGlnaHQsIGRlZmF1bHQgdG8gYmUgMS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt1bWJyYUFuZ2xlPTMwXSBVbWJyYSBhbmdsZSBvZiBzcG90IGxpZ2h0LiBEZWZhdWx0IHRvIGJlIDMwIGRlZ3JlZSBmcm9tIHRoZSBtaWRkbGUgbGluZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwZW51bWJyYUFuZ2xlPTQ1XSBQZW51bWJyYSBhbmdsZSBvZiBzcG90IGxpZ2h0LiBEZWZhdWx0IHRvIGJlIDQ1IGRlZ3JlZSBmcm9tIHRoZSBtaWRkbGUgbGluZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogIGFwcC5jcmVhdGVTcG90TGlnaHQoWzUsIDUsIDVdLCBbMCwgMCwgMF0sIDIwLCAjOTAwKTtcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVTcG90TGlnaHQgPSBmdW5jdGlvbiAocG9zaXRpb24sIHRhcmdldCwgcmFuZ2UsIGNvbG9yLCBpbnRlbnNpdHksIHVtYnJhQW5nbGUsIHBlbnVtYnJhQW5nbGUpIHtcclxuICAgIHZhciBsaWdodCA9IG5ldyBTcG90TGlnaHQoKTtcclxuICAgIGxpZ2h0LnBvc2l0aW9uLnNldEFycmF5KHBvc2l0aW9uIGluc3RhbmNlb2YgVmVjdG9yMyA/IHBvc2l0aW9uLmFycmF5IDogcG9zaXRpb24pO1xyXG5cclxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKHRhcmdldFswXSwgdGFyZ2V0WzFdLCB0YXJnZXRbMl0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcclxuICAgICAgICBsaWdodC5sb29rQXQodGFyZ2V0KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbG9yID0gcGFyc2VDb2xvcihjb2xvcik7XHJcbiAgICB9XHJcbiAgICByYW5nZSAhPSBudWxsICYmIChsaWdodC5yYW5nZSA9IHJhbmdlKTtcclxuICAgIGNvbG9yICE9IG51bGwgJiYgKGxpZ2h0LmNvbG9yID0gY29sb3IpO1xyXG4gICAgaW50ZW5zaXR5ICE9IG51bGwgJiYgKGxpZ2h0LmludGVuc2l0eSA9IGludGVuc2l0eSk7XHJcbiAgICB1bWJyYUFuZ2xlICE9IG51bGwgJiYgKGxpZ2h0LnVtYnJhQW5nbGUgPSB1bWJyYUFuZ2xlKTtcclxuICAgIHBlbnVtYnJhQW5nbGUgIT0gbnVsbCAmJiAobGlnaHQucGVudW1icmFBbmdsZSA9IHBlbnVtYnJhQW5nbGUpO1xyXG5cclxuICAgIHRoaXMuc2NlbmUuYWRkKGxpZ2h0KTtcclxuXHJcbiAgICByZXR1cm4gbGlnaHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgcG9pbnQgbGlnaHQuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58Y2xheS5WZWN0b3IzfSBwb3NpdGlvbiBQb3NpdGlvbiBvZiBwb2ludCBsaWdodC4uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcmFuZ2U9MTAwXSBGYWxsb2ZmIHJhbmdlIG9mIHBvaW50IGxpZ2h0LlxyXG4gKiBAcGFyYW0ge0NvbG9yfSBbY29sb3I9JyNmZmYnXSBDb2xvciBvZiBwb2ludCBsaWdodC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtpbnRlbnNpdHk9MV0gSW50ZW5zaXR5IG9mIHBvaW50IGxpZ2h0LlxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZVBvaW50TGlnaHQgPSBmdW5jdGlvbiAocG9zaXRpb24sIHJhbmdlLCBjb2xvciwgaW50ZW5zaXR5KSB7XHJcbiAgICB2YXIgbGlnaHQgPSBuZXcgUG9pbnRMaWdodCgpO1xyXG4gICAgbGlnaHQucG9zaXRpb24uc2V0QXJyYXkocG9zaXRpb24gaW5zdGFuY2VvZiBWZWN0b3IzID8gcG9zaXRpb24uYXJyYXkgOiBwb3NpdGlvbik7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb2xvciA9IHBhcnNlQ29sb3IoY29sb3IpO1xyXG4gICAgfVxyXG4gICAgcmFuZ2UgIT0gbnVsbCAmJiAobGlnaHQucmFuZ2UgPSByYW5nZSk7XHJcbiAgICBjb2xvciAhPSBudWxsICYmIChsaWdodC5jb2xvciA9IGNvbG9yKTtcclxuICAgIGludGVuc2l0eSAhPSBudWxsICYmIChsaWdodC5pbnRlbnNpdHkgPSBpbnRlbnNpdHkpO1xyXG5cclxuICAgIHRoaXMuc2NlbmUuYWRkKGxpZ2h0KTtcclxuXHJcbiAgICByZXR1cm4gbGlnaHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgYW1iaWVudCBsaWdodC5cclxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2YgYW1iaWVudCBsaWdodC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtpbnRlbnNpdHk9MV0gSW50ZW5zaXR5IG9mIGFtYmllbnQgbGlnaHQuXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQW1iaWVudExpZ2h0ID0gZnVuY3Rpb24gKGNvbG9yLCBpbnRlbnNpdHkpIHtcclxuICAgIHZhciBsaWdodCA9IG5ldyBBbWJpZW50TGlnaHQoKTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbG9yID0gcGFyc2VDb2xvcihjb2xvcik7XHJcbiAgICB9XHJcbiAgICBjb2xvciAhPSBudWxsICYmIChsaWdodC5jb2xvciA9IGNvbG9yKTtcclxuICAgIGludGVuc2l0eSAhPSBudWxsICYmIChsaWdodC5pbnRlbnNpdHkgPSBpbnRlbnNpdHkpO1xyXG5cclxuICAgIHRoaXMuc2NlbmUuYWRkKGxpZ2h0KTtcclxuXHJcbiAgICByZXR1cm4gbGlnaHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFuIGN1YmVtYXAgYW1iaWVudCBsaWdodCBhbmQgYW4gc3BoZXJpY2FsIGhhcm1vbmljIGFtYmllbnQgbGlnaHRcclxuICogZm9yIHNwZWN1bGFyIGFuZCBkaWZmdXNlIGxpZ2h0aW5nIGluIFBCUiByZW5kZXJpbmdcclxuICogQHBhcmFtIHtJbWFnZUxpa2V8VGV4dHVyZUN1YmV9IFtlbnZJbWFnZV0gUGFub3JhbWEgZW52aXJvbm1lbnQgaW1hZ2UsIEhEUiBmb3JtYXQgaXMgYmV0dGVyLiBPciBhIHByZSBsb2FkZWQgdGV4dHVyZSBjdWJlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3BlY3VsYXJJbnRlbnN0aXR5PTAuN10gSW50ZW5zaXR5IG9mIHNwZWN1bGFyIGxpZ2h0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2RpZmZ1c2VJbnRlbnN0aXR5PTAuN10gSW50ZW5zaXR5IG9mIGRpZmZ1c2UgbGlnaHQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZXhwb3N1cmU9MV0gRXhwb3N1cmUgb2YgSERSIGltYWdlLiBPbmx5IGlmIGltYWdlIGluIGZpcnN0IHBhcmFtdGVyIGlzIEhEUi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVmaWx0ZXJlZEN1YmVtYXBTaXplPTMyXSBUaGUgc2l6ZSBvZiBwcmVmaWxlcnRlZCBjdWJlbWFwLiBMYXJnZXIgdmFsdWUgd2lsbCB0YWtlIG1vcmUgdGltZSB0byBkbyBleHBlbnNpdmUgcHJlZmlsdGVyaW5nLlxyXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZUFtYmllbnRDdWJlbWFwTGlnaHQgPSBmdW5jdGlvbiAoZW52SW1hZ2UsIHNwZWNJbnRlbnNpdHksIGRpZmZJbnRlbnNpdHksIGV4cG9zdXJlLCBwcmVmaWx0ZXJlZEN1YmVtYXBTaXplKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICBpZiAoZXhwb3N1cmUgPT0gbnVsbCkge1xyXG4gICAgICAgIGV4cG9zdXJlID0gMDtcclxuICAgIH1cclxuICAgIGlmIChwcmVmaWx0ZXJlZEN1YmVtYXBTaXplID09IG51bGwpIHtcclxuICAgICAgICBwcmVmaWx0ZXJlZEN1YmVtYXBTaXplID0gMzI7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHNjZW5lID0gdGhpcy5zY2VuZTtcclxuXHJcbiAgICB2YXIgbG9hZFByb21pc2U7XHJcbiAgICBpZiAoZW52SW1hZ2UudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlQ3ViZScpIHtcclxuICAgICAgICBsb2FkUHJvbWlzZSA9IGVudkltYWdlLmlzUmVuZGVyYWJsZSgpXHJcbiAgICAgICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKGVudkltYWdlKVxyXG4gICAgICAgICAgICA6IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgICAgIGVudkltYWdlLnN1Y2Nlc3MoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZW52SW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgbG9hZFByb21pc2UgPSB0aGlzLmxvYWRUZXh0dXJlKGVudkltYWdlLCB7XHJcbiAgICAgICAgICAgIGV4cG9zdXJlOiBleHBvc3VyZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsb2FkUHJvbWlzZS50aGVuKGZ1bmN0aW9uIChlbnZUZXh0dXJlKSB7XHJcbiAgICAgICAgdmFyIHNwZWNMaWdodCA9IG5ldyBBbWJpZW50Q3ViZW1hcExpZ2h0KHtcclxuICAgICAgICAgICAgaW50ZW5zaXR5OiBzcGVjSW50ZW5zaXR5ICE9IG51bGwgPyBzcGVjSW50ZW5zaXR5IDogMC43XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc3BlY0xpZ2h0LmN1YmVtYXAgPSBlbnZUZXh0dXJlO1xyXG4gICAgICAgIGVudlRleHR1cmUuZmxpcFkgPSBmYWxzZTtcclxuICAgICAgICAvLyBUT0RPIENhY2hlIHByZWZpbHRlciA/XHJcbiAgICAgICAgc3BlY0xpZ2h0LnByZWZpbHRlcihzZWxmLnJlbmRlcmVyLCAzMik7XHJcblxyXG4gICAgICAgIHZhciBkaWZmTGlnaHQgPSBuZXcgQW1iaWVudFNITGlnaHQoe1xyXG4gICAgICAgICAgICBpbnRlbnNpdHk6IGRpZmZJbnRlbnNpdHkgIT0gbnVsbCA/IGRpZmZJbnRlbnNpdHkgOiAwLjcsXHJcbiAgICAgICAgICAgIGNvZWZmaWNpZW50czogc2hVdGlsLnByb2plY3RFbnZpcm9ubWVudE1hcChcclxuICAgICAgICAgICAgICAgIHNlbGYucmVuZGVyZXIsIHNwZWNMaWdodC5jdWJlbWFwLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9kOiAxXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9KTtcclxuICAgICAgICBzY2VuZS5hZGQoc3BlY0xpZ2h0KTtcclxuICAgICAgICBzY2VuZS5hZGQoZGlmZkxpZ2h0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc3BlY3VsYXI6IHNwZWNMaWdodCxcclxuICAgICAgICAgICAgZGlmZnVzZTogZGlmZkxpZ2h0LFxyXG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBlbnZpcm9ubWVudCBtYXBcclxuICAgICAgICAgICAgZW52aXJvbm1lbnRNYXA6IGVudlRleHR1cmVcclxuICAgICAgICB9O1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogTG9hZCBhIFtnbFRGXShodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYpIGZvcm1hdCBtb2RlbC5cclxuICogWW91IGNhbiBjb252ZXJ0IEZCWC9EQUUvT0JKIGZvcm1hdCBtb2RlbHMgdG8gW2dsVEZdKGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURikgd2l0aCBbZmJ4MmdsdGZdKGh0dHBzOi8vZ2l0aHViLmNvbS9waXNzYW5nL2NsYXlnbCNmYngtdG8tZ2x0ZjIwLWNvbnZlcnRlcikgcHl0aG9uIHNjcmlwdCxcclxuICogb3Igc2ltcGx5IHVzaW5nIHRoZSBbQ2xheSBWaWV3ZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9waXNzYW5nL2NsYXktdmlld2VyKSBjbGllbnQgYXBwbGljYXRpb24uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcclxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcclxuICogQHBhcmFtIHtzdHJpbmd8Y2xheS5TaGFkZXJ9IFtvcHRzLnNoYWRlcj0nY2xheS5zdGFuZGFyZCddICdiYXNpYyd8J2xhbWJlcnQnfCdzdGFuZGFyZCcuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMud2FpdFRleHR1cmVMb2FkZWQ9ZmFsc2VdIElmIGFkZCB0byBzY2VuZSB1dGlsIHRleHR1cmVzIGFyZSBhbGwgbG9hZGVkLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmF1dG9QbGF5QW5pbWF0aW9uPXRydWVdIElmIGF1dG9wbGF5IHRoZSBhbmltYXRpb24gb2YgbW9kZWwuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMudXBBeGlzPSd5J10gQ2hhbmdlIG1vZGVsIHRvIHkgdXAgaWYgdXBBeGlzIGlzICd6J1xyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnRleHR1cmVGbGlwWT1mYWxzZV1cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy50ZXh0dXJlQ29udmVydFRvUE9UPWZhbHNlXSBJZiBjb252ZXJ0IHRleHR1cmUgdG8gcG93ZXItb2YtdHdvXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy50ZXh0dXJlUm9vdFBhdGhdIFJvb3QgcGF0aCBvZiB0ZXh0dXJlLiBEZWZhdWx0IHRvIGJlIHJlbGF0aXZlIHdpdGggZ2xURiBmaWxlLlxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRoYXQgbW9kZWwgd2lsbCBiZSBtb3VudGVkLiBEZWZhdWx0IHRvIGJlIHNjZW5lXHJcbiAqIEByZXR1cm4ge1Byb21pc2V9XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUubG9hZE1vZGVsID0gZnVuY3Rpb24gKHVybCwgb3B0cywgcGFyZW50Tm9kZSkge1xyXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFVSTC4nKTtcclxuICAgIH1cclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuICAgIGlmIChvcHRzLmF1dG9QbGF5QW5pbWF0aW9uID09IG51bGwpIHtcclxuICAgICAgICBvcHRzLmF1dG9QbGF5QW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBzaGFkZXIgPSBvcHRzLnNoYWRlciB8fCAnY2xheS5zdGFuZGFyZCc7XHJcblxyXG4gICAgdmFyIGxvYWRlck9wdHMgPSB7XHJcbiAgICAgICAgcm9vdE5vZGU6IG5ldyBOb2RlKCksXHJcbiAgICAgICAgc2hhZGVyOiBzaGFkZXIsXHJcbiAgICAgICAgdGV4dHVyZVJvb3RQYXRoOiBvcHRzLnRleHR1cmVSb290UGF0aCxcclxuICAgICAgICBjcm9zc09yaWdpbjogJ0Fub255bW91cycsXHJcbiAgICAgICAgdGV4dHVyZUZsaXBZOiBvcHRzLnRleHR1cmVGbGlwWSxcclxuICAgICAgICB0ZXh0dXJlQ29udmVydFRvUE9UOiBvcHRzLnRleHR1cmVDb252ZXJ0VG9QT1RcclxuICAgIH07XHJcbiAgICBpZiAob3B0cy51cEF4aXMgJiYgb3B0cy51cEF4aXMudG9Mb3dlckNhc2UoKSA9PT0gJ3onKSB7XHJcbiAgICAgICAgbG9hZGVyT3B0cy5yb290Tm9kZS5yb3RhdGlvbi5pZGVudGl0eSgpLnJvdGF0ZVgoLU1hdGguUEkgLyAyKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbG9hZGVyID0gbmV3IEdMVEZMb2FkZXIobG9hZGVyT3B0cyk7XHJcblxyXG4gICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgdGhpcy5zY2VuZTtcclxuICAgIHZhciB0aW1lbGluZSA9IHRoaXMudGltZWxpbmU7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBhZnRlckxvYWQocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLl9kaXNwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwYXJlbnROb2RlLmFkZChyZXN1bHQucm9vdE5vZGUpO1xyXG4gICAgICAgICAgICBpZiAob3B0cy5hdXRvUGxheUFuaW1hdGlvbikge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LmNsaXBzLmZvckVhY2goZnVuY3Rpb24gKGNsaXApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aW1lbGluZS5hZGRDbGlwKGNsaXApO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsb2FkZXIuc3VjY2VzcyhmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLl9kaXNwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIW9wdHMud2FpdFRleHR1cmVMb2FkZWQpIHtcclxuICAgICAgICAgICAgICAgIGFmdGVyTG9hZChyZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwocmVzdWx0LnRleHR1cmVzLm1hcChmdW5jdGlvbiAodGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLnN1Y2Nlc3MocmVzb2x2ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZXJyb3IocmVzb2x2ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSkudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJMb2FkKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJMb2FkKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxvYWRlci5lcnJvcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxvYWRlci5sb2FkKHVybCk7XHJcbiAgICB9KTtcclxufTtcclxuXHJcblxyXG4vLyBUT0RPIGNsb25lTW9kZWxcclxuXHJcbi8qKlxyXG4gKiBTaW1pbGFyIHRvIGBhcHAuc2NlbmUuY2xvbmVOb2RlYCwgZXhjZXB0IGl0IHdpbGwgbW91bnQgdGhlIGNsb25lZCBub2RlIHRvIHRoZSBzY2VuZSBhdXRvbWF0aWNhbGx5LlxyXG4gKiBTZWUgbW9yZSBpbiB7QGxpbmsgY2xheS5TY2VuZSNjbG9uZU5vZGV9XHJcbiAqXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBub2RlXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdGhhdCBuZXcgY2xvbmVkIG5vZGUgd2lsbCBiZSBtb3VudGVkLlxyXG4gKiAgICAgICAgICBEZWZhdWx0IHRvIGhhdmUgc2FtZSBwYXJlbnQgd2l0aCBzb3VyY2Ugbm9kZS5cclxuICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNsb25lTm9kZSA9IGZ1bmN0aW9uIChub2RlLCBwYXJlbnROb2RlKSB7XHJcbiAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZSB8fCBub2RlLmdldFBhcmVudCgpO1xyXG5cclxuICAgIHZhciBuZXdOb2RlID0gdGhpcy5zY2VuZS5jbG9uZU5vZGUobm9kZSwgcGFyZW50Tm9kZSk7XHJcbiAgICBpZiAocGFyZW50Tm9kZSkge1xyXG4gICAgICAgIHBhcmVudE5vZGUuYWRkKG5ld05vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXdOb2RlO1xyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIEFwcDNEOiBBcHAzRCxcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgM0QgYXBwbGljYXRpb24gdGhhdCB3aWxsIG1hbmFnZSB0aGUgYXBwIGluaXRpYWxpemF0aW9uIGFuZCBsb29wLlxyXG4gICAgICpcclxuICAgICAqIFNlZSBtb3JlIGRldGFpbHMgYXQge0BsaW5rIGNsYXkuYXBwbGljYXRpb24uQXBwM0R9XHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5jcmVhdGVcclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8c3RyaW5nfSBkb20gQ29udGFpbmVyIGRvbSBlbGVtZW50IG9yIGEgc2VsZWN0b3Igc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgaW4gYHF1ZXJ5U2VsZWN0b3JgXHJcbiAgICAgKiBAcGFyYW0ge0FwcDNETmFtZXNwYWNlfSBhcHBOUyBPcHRpb25zIGFuZCBuYW1lc3BhY2UgdXNlZCBpbiBjcmVhdGluZyBhcHAzRFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2NsYXkuYXBwbGljYXRpb24uQXBwM0R9XHJcbiAgICAgKlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqICBjbGF5LmFwcGxpY2F0aW9uLmNyZWF0ZSgnI2FwcCcsIHtcclxuICAgICAqICAgICAgaW5pdDogZnVuY3Rpb24gKGFwcCkge1xyXG4gICAgICogICAgICAgICAgYXBwLmNyZWF0ZUN1YmUoKTtcclxuICAgICAqICAgICAgICAgIHZhciBjYW1lcmEgPSBhcHAuY3JlYXRlQ2FtZXJhKCk7XHJcbiAgICAgKiAgICAgICAgICBjYW1lcmEucG9zaXRpb24uc2V0KDAsIDAsIDIpO1xyXG4gICAgICogICAgICB9LFxyXG4gICAgICogICAgICBsb29wOiBmdW5jdGlvbiAoKSB7IC8vIG5vb3AgfVxyXG4gICAgICogIH0pXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZTogZnVuY3Rpb24gKGRvbSwgYXBwTlMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEFwcDNEKGRvbSwgYXBwTlMpO1xyXG4gICAgfVxyXG59OyIsImltcG9ydCBub3RpZmllciBmcm9tICcuLi9jb3JlL21peGluL25vdGlmaWVyJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCB1dGlsICBmcm9tICcuLi9jb3JlL3V0aWwnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hc3luYy5UYXNrXHJcbiAqIEBtaXhlcyBjbGF5LmNvcmUubWl4aW4ubm90aWZpZXJcclxuICovXHJcbmZ1bmN0aW9uIFRhc2soKSB7XHJcbiAgICB0aGlzLl9mdWxsZmlsbGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9yZWplY3RlZCA9IGZhbHNlO1xyXG59O1xyXG4vKipcclxuICogVGFzayBzdWNjZXNzZWRcclxuICogQHBhcmFtIHt9IGRhdGFcclxuICovXHJcblRhc2sucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICB0aGlzLl9mdWxsZmlsbGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuX3JlamVjdGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnRyaWdnZXIoJ3N1Y2Nlc3MnLCBkYXRhKTtcclxufTtcclxuLyoqXHJcbiAqIFRhc2sgZmFpbGVkXHJcbiAqIEBwYXJhbSB7fSBlcnJcclxuICovXHJcblRhc2sucHJvdG90eXBlLnJlamVjdCA9IGZ1bmN0aW9uKGVycikge1xyXG4gICAgdGhpcy5fcmVqZWN0ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5fZnVsbGZpbGxlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsIGVycik7XHJcbn07XHJcbi8qKlxyXG4gKiBJZiB0YXNrIHN1Y2Nlc3NlZFxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKi9cclxuVGFzay5wcm90b3R5cGUuaXNGdWxsZmlsbGVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZnVsbGZpbGxlZDtcclxufTtcclxuLyoqXHJcbiAqIElmIHRhc2sgZmFpbGVkXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAqL1xyXG5UYXNrLnByb3RvdHlwZS5pc1JlamVjdGVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVqZWN0ZWQ7XHJcbn07XHJcbi8qKlxyXG4gKiBJZiB0YXNrIGZpbmlzaGVkLCBlaXRoZXIgc3VjY2Vzc2VkIG9yIGZhaWxlZFxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKi9cclxuVGFzay5wcm90b3R5cGUuaXNTZXR0bGVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZnVsbGZpbGxlZCB8fCB0aGlzLl9yZWplY3RlZDtcclxufTtcclxuXHJcbnV0aWwuZXh0ZW5kKFRhc2sucHJvdG90eXBlLCBub3RpZmllcik7XHJcblxyXG5mdW5jdGlvbiBtYWtlUmVxdWVzdFRhc2sodXJsLCByZXNwb25zZVR5cGUpIHtcclxuICAgIHZhciB0YXNrID0gbmV3IFRhc2soKTtcclxuICAgIHZlbmRvci5yZXF1ZXN0LmdldCh7XHJcbiAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgcmVzcG9uc2VUeXBlOiByZXNwb25zZVR5cGUsXHJcbiAgICAgICAgb25sb2FkOiBmdW5jdGlvbihyZXMpIHtcclxuICAgICAgICAgICAgdGFzay5yZXNvbHZlKHJlcyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvbmVycm9yOiBmdW5jdGlvbihlcnJvcikge1xyXG4gICAgICAgICAgICB0YXNrLnJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGFzaztcclxufVxyXG4vKipcclxuICogTWFrZSBhIHZlbmRvci5yZXF1ZXN0IHRhc2tcclxuICogQHBhcmFtICB7c3RyaW5nfG9iamVjdHxvYmplY3RbXXxzdHJpbmdbXX0gdXJsXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gW3Jlc3BvbnNlVHlwZV1cclxuICogQGV4YW1wbGVcclxuICogICAgIHZhciB0YXNrID0gVGFzay5tYWtlUmVxdWVzdFRhc2soJy4vYS5qc29uJyk7XHJcbiAqICAgICB2YXIgdGFzayA9IFRhc2subWFrZVJlcXVlc3RUYXNrKHtcclxuICogICAgICAgICB1cmw6ICdiLmJpbicsXHJcbiAqICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXHJcbiAqICAgICB9KTtcclxuICogICAgIHZhciB0YXNrcyA9IFRhc2subWFrZVJlcXVlc3RUYXNrKFsnLi9hLmpzb24nLCAnLi9iLmpzb24nXSk7XHJcbiAqICAgICB2YXIgdGFza3MgPSBUYXNrLm1ha2VSZXF1ZXN0VGFzayhbXHJcbiAqICAgICAgICAge3VybDogJ2EuanNvbid9LFxyXG4gKiAgICAgICAgIHt1cmw6ICdiLmJpbicsIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ31cclxuICogICAgIF0pO1xyXG4gKiBAcmV0dXJuIHtjbGF5LmFzeW5jLlRhc2t8Y2xheS5hc3luYy5UYXNrW119XHJcbiAqL1xyXG5UYXNrLm1ha2VSZXF1ZXN0VGFzayA9IGZ1bmN0aW9uKHVybCwgcmVzcG9uc2VUeXBlKSB7XHJcbiAgICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gbWFrZVJlcXVlc3RUYXNrKHVybCwgcmVzcG9uc2VUeXBlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHVybC51cmwpIHsgICAvLyAgQ29uZmlndXJlIG9iamVjdFxyXG4gICAgICAgIHZhciBvYmogPSB1cmw7XHJcbiAgICAgICAgcmV0dXJuIG1ha2VSZXF1ZXN0VGFzayhvYmoudXJsLCBvYmoucmVzcG9uc2VUeXBlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodXJsKSkgeyAgLy8gVXJsIGxpc3RcclxuICAgICAgICB2YXIgdXJsTGlzdCA9IHVybDtcclxuICAgICAgICB2YXIgdGFza3MgPSBbXTtcclxuICAgICAgICB1cmxMaXN0LmZvckVhY2goZnVuY3Rpb24ob2JqKSB7XHJcbiAgICAgICAgICAgIHZhciB1cmwsIHJlc3BvbnNlVHlwZTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICB1cmwgPSBvYmo7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoT2JqZWN0KG9iaikgPT09IG9iaikge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gb2JqLnVybDtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZSA9IG9iai5yZXNwb25zZVR5cGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGFza3MucHVzaChtYWtlUmVxdWVzdFRhc2sodXJsLCByZXNwb25zZVR5cGUpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGFza3M7XHJcbiAgICB9XHJcbn07XHJcbi8qKlxyXG4gKiBAcmV0dXJuIHtjbGF5LmFzeW5jLlRhc2t9XHJcbiAqL1xyXG5UYXNrLm1ha2VUYXNrID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gbmV3IFRhc2soKTtcclxufTtcclxuXHJcbnV0aWwuZXh0ZW5kKFRhc2sucHJvdG90eXBlLCBub3RpZmllcik7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUYXNrO1xyXG4iLCJpbXBvcnQgdXRpbCBmcm9tICcuLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgVGFzayBmcm9tICcuL1Rhc2snO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hc3luYy5UYXNrR3JvdXBcclxuICogQGV4dGVuZHMgY2xheS5hc3luYy5UYXNrXHJcbiAqL1xyXG52YXIgVGFza0dyb3VwID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIFRhc2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuXHJcbiAgICB0aGlzLl90YXNrcyA9IFtdO1xyXG5cclxuICAgIHRoaXMuX2Z1bGZpbGxlZE51bWJlciA9IDA7XHJcblxyXG4gICAgdGhpcy5fcmVqZWN0ZWROdW1iZXIgPSAwO1xyXG59O1xyXG5cclxudmFyIEN0b3IgPSBmdW5jdGlvbiAoKXt9O1xyXG5DdG9yLnByb3RvdHlwZSA9IFRhc2sucHJvdG90eXBlO1xyXG5UYXNrR3JvdXAucHJvdG90eXBlID0gbmV3IEN0b3IoKTtcclxuXHJcblRhc2tHcm91cC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUYXNrR3JvdXA7XHJcblxyXG4vKipcclxuICogV2FpdCBmb3IgYWxsIGdpdmVuIHRhc2tzIHN1Y2Nlc3NlZCwgdGFzayBjYW4gYWxzbyBiZSBhbnkgbm90aWZpZXIgb2JqZWN0IHdoaWNoIHdpbGwgdHJpZ2dlciBzdWNjZXNzIGFuZCBlcnJvciBldmVudHMuIExpa2Uge0BsaW5rIGNsYXkuVGV4dHVyZTJEfSwge0BsaW5rIGNsYXkuVGV4dHVyZUN1YmV9LCB7QGxpbmsgY2xheS5sb2FkZXIuR0xURn0uXHJcbiAqIEBwYXJhbSAge0FycmF5LjxjbGF5LmFzeW5jLlRhc2s+fSB0YXNrc1xyXG4gKiBAY2hhaW5hYmxlXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICAvLyBMb2FkIHRleHR1cmUgbGlzdFxyXG4gKiAgICAgdmFyIGxpc3QgPSBbJ2EuanBnJywgJ2IuanBnJywgJ2MuanBnJ11cclxuICogICAgIHZhciB0ZXh0dXJlcyA9IGxpc3QubWFwKGZ1bmN0aW9uIChzcmMpIHtcclxuICogICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBjbGF5LlRleHR1cmUyRCgpO1xyXG4gKiAgICAgICAgIHRleHR1cmUubG9hZChzcmMpO1xyXG4gKiAgICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgdGFza0dyb3VwID0gbmV3IGNsYXkuYXN5bmMuVGFza0dyb3VwKCk7XHJcbiAqICAgICB0YXNrR3JvdXAuYWxsKHRleHR1cmVzKS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICogICAgICAgICAvLyBEbyBzb21lIHRoaW5nIGFmdGVyIGFsbCB0ZXh0dXJlcyBsb2FkZWRcclxuICogICAgIH0pO1xyXG4gKi9cclxuVGFza0dyb3VwLnByb3RvdHlwZS5hbGwgPSBmdW5jdGlvbiAodGFza3MpIHtcclxuICAgIHZhciBjb3VudCA9IDA7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICB2YXIgZGF0YSA9IFtdO1xyXG4gICAgdGhpcy5fdGFza3MgPSB0YXNrcztcclxuICAgIHRoaXMuX2Z1bGZpbGxlZE51bWJlciA9IDA7XHJcbiAgICB0aGlzLl9yZWplY3RlZE51bWJlciA9IDA7XHJcblxyXG4gICAgdXRpbC5lYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaywgaWR4KSB7XHJcbiAgICAgICAgaWYgKCF0YXNrIHx8ICF0YXNrLm9uY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgIHRhc2sub25jZSgnc3VjY2VzcycsIGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgY291bnQtLTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuX2Z1bGZpbGxlZE51bWJlcisrO1xyXG4gICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICAgIC8vIFNvbWUgdGFza3MgbGlrZSB0ZXh0dXJlLCBsb2FkZXIgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSB0YXNrXHJcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBzdGF0ZXMgaGVyZVxyXG4gICAgICAgICAgICB0YXNrLl9mdWxmaWxsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0YXNrLl9yZWplY3RlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgZGF0YVtpZHhdID0gcmVzO1xyXG4gICAgICAgICAgICBpZiAoY291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRhc2sub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICBzZWxmLl9yZWplY3RlZE51bWJlciArKztcclxuXHJcbiAgICAgICAgICAgIHRhc2suX2Z1bGZpbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0YXNrLl9yZWplY3RlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBzZWxmLnJlamVjdCh0YXNrKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgaWYgKGNvdW50ID09PSAwKSB7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHNlbGYucmVzb2x2ZShkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG4vKipcclxuICogV2FpdCBmb3IgYWxsIGdpdmVuIHRhc2tzIGZpbmlzaGVkLCBlaXRoZXIgc3VjY2Vzc2VkIG9yIGZhaWxlZFxyXG4gKiBAcGFyYW0gIHtBcnJheS48Y2xheS5hc3luYy5UYXNrPn0gdGFza3NcclxuICogQHJldHVybiB7Y2xheS5hc3luYy5UYXNrR3JvdXB9XHJcbiAqL1xyXG5UYXNrR3JvdXAucHJvdG90eXBlLmFsbFNldHRsZWQgPSBmdW5jdGlvbiAodGFza3MpIHtcclxuICAgIHZhciBjb3VudCA9IDA7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICB2YXIgZGF0YSA9IFtdO1xyXG4gICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3N1Y2Nlc3MnLCBkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHRoaXMuX3Rhc2tzID0gdGFza3M7XHJcblxyXG4gICAgdXRpbC5lYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaywgaWR4KSB7XHJcbiAgICAgICAgaWYgKCF0YXNrIHx8ICF0YXNrLm9uY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgIHRhc2sub25jZSgnc3VjY2VzcycsIGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgY291bnQtLTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuX2Z1bGZpbGxlZE51bWJlcisrO1xyXG5cclxuICAgICAgICAgICAgdGFzay5fZnVsZmlsbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGRhdGFbaWR4XSA9IHJlcztcclxuICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0YXNrLm9uY2UoJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICBjb3VudC0tO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5fcmVqZWN0ZWROdW1iZXIrKztcclxuXHJcbiAgICAgICAgICAgIHRhc2suX2Z1bGZpbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0YXNrLl9yZWplY3RlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICAgIGRhdGFbaWR4XSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG4vKipcclxuICogR2V0IHN1Y2Nlc3NlZCBzdWIgdGFza3MgbnVtYmVyLCByZWN1cnNpdmUgY2FuIGJlIHRydWUgaWYgc3ViIHRhc2sgaXMgYWxzbyBhIFRhc2tHcm91cC5cclxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3JlY3Vyc2l2ZV1cclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVGFza0dyb3VwLnByb3RvdHlwZS5nZXRGdWxmaWxsZWROdW1iZXIgPSBmdW5jdGlvbiAocmVjdXJzaXZlKSB7XHJcbiAgICBpZiAocmVjdXJzaXZlKSB7XHJcbiAgICAgICAgdmFyIG5GdWxmaWxsZWQgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGFza3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRhc2sgaW5zdGFuY2VvZiBUYXNrR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIG5GdWxmaWxsZWQgKz0gdGFzay5nZXRGdWxmaWxsZWROdW1iZXIocmVjdXJzaXZlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKHRhc2suX2Z1bGZpbGxlZCkge1xyXG4gICAgICAgICAgICAgICAgbkZ1bGZpbGxlZCArPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuRnVsZmlsbGVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZnVsZmlsbGVkTnVtYmVyO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBmYWlsZWQgc3ViIHRhc2tzIG51bWJlciwgcmVjdXJzaXZlIGNhbiBiZSB0cnVlIGlmIHN1YiB0YXNrIGlzIGFsc28gYSBUYXNrR3JvdXAuXHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFtyZWN1cnNpdmVdXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblRhc2tHcm91cC5wcm90b3R5cGUuZ2V0UmVqZWN0ZWROdW1iZXIgPSBmdW5jdGlvbiAocmVjdXJzaXZlKSB7XHJcbiAgICBpZiAocmVjdXJzaXZlKSB7XHJcbiAgICAgICAgdmFyIG5SZWplY3RlZCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFzayA9IHRoaXMuX3Rhc2tzW2ldO1xyXG4gICAgICAgICAgICBpZiAodGFzayBpbnN0YW5jZW9mIFRhc2tHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgblJlamVjdGVkICs9IHRhc2suZ2V0UmVqZWN0ZWROdW1iZXIocmVjdXJzaXZlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKHRhc2suX3JlamVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBuUmVqZWN0ZWQgKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gblJlamVjdGVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVqZWN0ZWROdW1iZXI7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IGZpbmlzaGVkIHN1YiB0YXNrcyBudW1iZXIsIHJlY3Vyc2l2ZSBjYW4gYmUgdHJ1ZSBpZiBzdWIgdGFzayBpcyBhbHNvIGEgVGFza0dyb3VwLlxyXG4gKiBAcGFyYW0gIHtib29sZWFufSBbcmVjdXJzaXZlXVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5UYXNrR3JvdXAucHJvdG90eXBlLmdldFNldHRsZWROdW1iZXIgPSBmdW5jdGlvbiAocmVjdXJzaXZlKSB7XHJcblxyXG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xyXG4gICAgICAgIHZhciBuU2V0dGxlZCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFzayA9IHRoaXMuX3Rhc2tzW2ldO1xyXG4gICAgICAgICAgICBpZiAodGFzayBpbnN0YW5jZW9mIFRhc2tHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgblNldHRsZWQgKz0gdGFzay5nZXRTZXR0bGVkTnVtYmVyKHJlY3Vyc2l2ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZih0YXNrLl9yZWplY3RlZCB8fCB0YXNrLl9mdWxmaWxsZWQpIHtcclxuICAgICAgICAgICAgICAgIG5TZXR0bGVkICs9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5TZXR0bGVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZnVsZmlsbGVkTnVtYmVyICsgdGhpcy5fcmVqZWN0ZWROdW1iZXI7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IGFsbCBzdWIgdGFza3MgbnVtYmVyLCByZWN1cnNpdmUgY2FuIGJlIHRydWUgaWYgc3ViIHRhc2sgaXMgYWxzbyBhIFRhc2tHcm91cC5cclxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3JlY3Vyc2l2ZV1cclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVGFza0dyb3VwLnByb3RvdHlwZS5nZXRUYXNrTnVtYmVyID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xyXG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xyXG4gICAgICAgIHZhciBuVGFzayA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFzayA9IHRoaXMuX3Rhc2tzW2ldO1xyXG4gICAgICAgICAgICBpZiAodGFzayBpbnN0YW5jZW9mIFRhc2tHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgblRhc2sgKz0gdGFzay5nZXRUYXNrTnVtYmVyKHJlY3Vyc2l2ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuVGFzayArPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuVGFzaztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rhc2tzLmxlbmd0aDtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRhc2tHcm91cDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuXHJcbi8vIFBFTkRJTkdcclxuLy8gVXNlIHRvcG9sb2dpY2FsIHNvcnQgP1xyXG5cclxuLyoqXHJcbiAqIE5vZGUgb2YgZ3JhcGggYmFzZWQgcG9zdCBwcm9jZXNzaW5nLlxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqXHJcbiAqL1xyXG52YXIgQ29tcG9zaXRvck5vZGUgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvck5vZGUjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG5hbWU6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnB1dCBsaW5rcywgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBncmFwaFxyXG4gICAgICAgICAqIEBleGFtcGxlOlxyXG4gICAgICAgICAqICAgICBpbnB1dE5hbWU6IHtcclxuICAgICAgICAgKiAgICAgICAgIG5vZGU6IHNvbWVOb2RlLFxyXG4gICAgICAgICAqICAgICAgICAgcGluOiAneHh4eCdcclxuICAgICAgICAgKiAgICAgfVxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5wdXRMaW5rczoge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE91dHB1dCBsaW5rcywgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBncmFwaFxyXG4gICAgICAgICAqIEBleGFtcGxlOlxyXG4gICAgICAgICAqICAgICBvdXRwdXROYW1lOiB7XHJcbiAgICAgICAgICogICAgICAgICBub2RlOiBzb21lTm9kZSxcclxuICAgICAgICAgKiAgICAgICAgIHBpbjogJ3h4eHgnXHJcbiAgICAgICAgICogICAgIH1cclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG91dHB1dExpbmtzOiB7fSxcclxuXHJcbiAgICAgICAgLy8gU2F2ZSB0aGUgb3V0cHV0IHRleHR1cmUgb2YgcHJldmlvdXMgZnJhbWVcclxuICAgICAgICAvLyBXaWxsIGJlIHVzZWQgd2hlbiB0aGVyZSBleGlzdCBhIGNpcmN1bGFyIHJlZmVyZW5jZVxyXG4gICAgICAgIF9wcmV2T3V0cHV0VGV4dHVyZXM6IHt9LFxyXG4gICAgICAgIF9vdXRwdXRUZXh0dXJlczoge30sXHJcblxyXG4gICAgICAgIC8vIEV4YW1wbGU6IHsgbmFtZTogMiB9XHJcbiAgICAgICAgX291dHB1dFJlZmVyZW5jZXM6IHt9LFxyXG5cclxuICAgICAgICBfcmVuZGVyaW5nOiBmYWxzZSxcclxuICAgICAgICAvLyBJZiByZW5kZXJlZCBpbiB0aGlzIGZyYW1lXHJcbiAgICAgICAgX3JlbmRlcmVkOiBmYWxzZSxcclxuXHJcbiAgICAgICAgX2NvbXBvc2l0b3I6IG51bGxcclxuICAgIH07XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgLy8gVE9ETyBSZW1vdmUgcGFyYW1ldGVyIGZ1bmN0aW9uIGNhbGxiYWNrXHJcbiAgICB1cGRhdGVQYXJhbWV0ZXI6IGZ1bmN0aW9uIChvdXRwdXROYW1lLCByZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW291dHB1dE5hbWVdO1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzID0gb3V0cHV0SW5mby5wYXJhbWV0ZXJzO1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzQ29weSA9IG91dHB1dEluZm8uX3BhcmFtZXRlcnNDb3B5O1xyXG4gICAgICAgIGlmICghcGFyYW1ldGVyc0NvcHkpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHkgPSBvdXRwdXRJbmZvLl9wYXJhbWV0ZXJzQ29weSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3dpZHRoJyAmJiBrZXkgIT09ICdoZWlnaHQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHlba2V5XSA9IHBhcmFtZXRlcnNba2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgd2lkdGgsIGhlaWdodDtcclxuICAgICAgICBpZiAocGFyYW1ldGVycy53aWR0aCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gcGFyYW1ldGVycy53aWR0aC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gcGFyYW1ldGVycy53aWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMuaGVpZ2h0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gcGFyYW1ldGVycy5oZWlnaHQuY2FsbCh0aGlzLCByZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBwYXJhbWV0ZXJzLmhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBwYXJhbWV0ZXJzQ29weS53aWR0aCAhPT0gd2lkdGhcclxuICAgICAgICAgICAgfHwgcGFyYW1ldGVyc0NvcHkuaGVpZ2h0ICE9PSBoZWlnaHRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX291dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXS5kaXNwb3NlKHJlbmRlcmVyLmdsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwYXJhbWV0ZXJzQ29weS53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHBhcmFtZXRlcnNDb3B5LmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnNDb3B5O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBwYXJhbWV0ZXJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge30gdmFsdWVcclxuICAgICAqL1xyXG4gICAgc2V0UGFyYW1ldGVyOiBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHt9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcGFyYW1ldGVyIHZhbHVlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge31cclxuICAgICAqL1xyXG4gICAgZ2V0UGFyYW1ldGVyOiBmdW5jdGlvbiAobmFtZSkge30sXHJcbiAgICAvKipcclxuICAgICAqIFNldCBwYXJhbWV0ZXJzXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqXHJcbiAgICAgKi9cclxuICAgIHNldFBhcmFtZXRlcnM6IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9iaikge1xyXG4gICAgICAgICAgICB0aGlzLnNldFBhcmFtZXRlcihuYW1lLCBvYmpbbmFtZV0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7fSxcclxuXHJcbiAgICBnZXRPdXRwdXQ6IGZ1bmN0aW9uIChyZW5kZXJlciAvKm9wdGlvbmFsKi8sIG5hbWUpIHtcclxuICAgICAgICBpZiAobmFtZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIFJldHVybiB0aGUgb3V0cHV0IHRleHR1cmUgd2l0aG91dCByZW5kZXJpbmdcclxuICAgICAgICAgICAgbmFtZSA9IHJlbmRlcmVyO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW25hbWVdO1xyXG4gICAgICAgIGlmICghb3V0cHV0SW5mbykge1xyXG4gICAgICAgICAgICByZXR1cm4gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQWxyZWFkeSBiZWVuIHJlbmRlcmVkIGluIHRoaXMgZnJhbWVcclxuICAgICAgICBpZiAodGhpcy5fcmVuZGVyZWQpIHtcclxuICAgICAgICAgICAgLy8gRm9yY2UgcmV0dXJuIHRleHR1cmUgaW4gbGFzdCBmcmFtZVxyXG4gICAgICAgICAgICBpZiAob3V0cHV0SW5mby5vdXRwdXRMYXN0RnJhbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIC8vIFRPRE9cclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyaW5nICAgLy8gU29sdmUgQ2lyY3VsYXIgUmVmZXJlbmNlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBibGFuayB0ZXh0dXJlIGF0IGZpcnN0IHBhc3NcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tuYW1lXSA9IHRoaXMuX2NvbXBvc2l0b3IuYWxsb2NhdGVUZXh0dXJlKG91dHB1dEluZm8ucGFyYW1ldGVycyB8fCB7fSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tuYW1lXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW1vdmVSZWZlcmVuY2U6IGZ1bmN0aW9uIChvdXRwdXROYW1lKSB7XHJcbiAgICAgICAgdGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXS0tO1xyXG4gICAgICAgIGlmICh0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW291dHB1dE5hbWVdID09PSAwKSB7XHJcbiAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW291dHB1dE5hbWVdO1xyXG4gICAgICAgICAgICBpZiAob3V0cHV0SW5mby5rZWVwTGFzdEZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdID0gdGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBPdXRwdXQgb2YgdGhpcyBub2RlIGhhdmUgYWxyZWF5IGJlZW4gdXNlZCBieSBhbGwgb3RoZXIgbm9kZXNcclxuICAgICAgICAgICAgICAgIC8vIFB1dCB0aGUgdGV4dHVyZSBiYWNrIHRvIHRoZSBwb29sLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGxpbms6IGZ1bmN0aW9uIChpbnB1dFBpbk5hbWUsIGZyb21Ob2RlLCBmcm9tUGluTmFtZSkge1xyXG5cclxuICAgICAgICAvLyBUaGUgcmVsYXRpb25zaGlwIGZyb20gb3V0cHV0IHBpbiB0byBpbnB1dCBwaW4gaXMgb25lLW9uLW11bHRpcGxlXHJcbiAgICAgICAgdGhpcy5pbnB1dExpbmtzW2lucHV0UGluTmFtZV0gPSB7XHJcbiAgICAgICAgICAgIG5vZGU6IGZyb21Ob2RlLFxyXG4gICAgICAgICAgICBwaW46IGZyb21QaW5OYW1lXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoIWZyb21Ob2RlLm91dHB1dExpbmtzW2Zyb21QaW5OYW1lXSkge1xyXG4gICAgICAgICAgICBmcm9tTm9kZS5vdXRwdXRMaW5rc1tmcm9tUGluTmFtZV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnJvbU5vZGUub3V0cHV0TGlua3NbZnJvbVBpbk5hbWVdLnB1c2goe1xyXG4gICAgICAgICAgICBub2RlOiB0aGlzLFxyXG4gICAgICAgICAgICBwaW46IGlucHV0UGluTmFtZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBFbmFibGVkIHRoZSBwaW4gdGV4dHVyZSBpbiBzaGFkZXJcclxuICAgICAgICB0aGlzLnBhc3MubWF0ZXJpYWwuZW5hYmxlVGV4dHVyZShpbnB1dFBpbk5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRMaW5rcyA9IHt9O1xyXG4gICAgICAgIHRoaXMub3V0cHV0TGlua3MgPSB7fTtcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlUmVmZXJlbmNlOiBmdW5jdGlvbiAob3V0cHV0TmFtZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5fcmVuZGVyaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGlucHV0TmFtZSBpbiB0aGlzLmlucHV0TGlua3MpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsaW5rID0gdGhpcy5pbnB1dExpbmtzW2lucHV0TmFtZV07XHJcbiAgICAgICAgICAgICAgICBsaW5rLm5vZGUudXBkYXRlUmVmZXJlbmNlKGxpbmsucGluKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG91dHB1dE5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXSArKztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGJlZm9yZUZyYW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm91dHB1dExpbmtzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dFJlZmVyZW5jZXNbbmFtZV0gPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYWZ0ZXJGcmFtZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIFB1dCBiYWNrIGFsbCB0aGUgdGV4dHVyZXMgdG8gcG9vbFxyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5vdXRwdXRMaW5rcykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tuYW1lXSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ua2VlcExhc3RGcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV0gPSB0aGlzLl9vdXRwdXRUZXh0dXJlc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbXBvc2l0b3JOb2RlO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgR3JhcGhOb2RlIGZyb20gJy4vQ29tcG9zaXRvck5vZGUnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNvbXBvc2l0b3IuR3JhcGhcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBHcmFwaCA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5HcmFwaCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48Y2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlPn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBub2RlczogW11cclxuICAgIH07XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkdyYXBoLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIHRvIHVwZGF0ZVxyXG4gICAgICovXHJcbiAgICBkaXJ0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7Y2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlfSBub2RlXHJcbiAgICAgKi9cclxuICAgIGFkZE5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm5vZGVzLmluZGV4T2Yobm9kZSkgPj0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm5vZGVzLnB1c2gobm9kZSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZXxzdHJpbmd9IG5vZGVcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlTm9kZTogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIG5vZGUgPSB0aGlzLmdldE5vZGVCeU5hbWUobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpZHggPSB0aGlzLm5vZGVzLmluZGV4T2Yobm9kZSk7XHJcbiAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZXMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlfVxyXG4gICAgICovXHJcbiAgICBnZXROb2RlQnlOYW1lOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ub2Rlc1tpXS5uYW1lID09PSBuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ub2Rlc1tpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBsaW5rcyBvZiBncmFwaFxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5ub2Rlc1tpXS5jbGVhcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUcmF2ZXJzZSBhbGwgdGhlIG5vZGVzIGFuZCBidWlsZCB0aGUgZ3JhcGhcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLm5vZGVzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFub2RlLmlucHV0cykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yICh2YXIgaW5wdXROYW1lIGluIG5vZGUuaW5wdXRzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGUuaW5wdXRzW2lucHV0TmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChub2RlLnBhc3MgJiYgIW5vZGUucGFzcy5tYXRlcmlhbC5pc1VuaWZvcm1FbmFibGVkKGlucHV0TmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpbiAnICArIG5vZGUubmFtZSArICcuJyArIGlucHV0TmFtZSArICcgbm90IHVzZWQuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgZnJvbVBpbkluZm8gPSBub2RlLmlucHV0c1tpbnB1dE5hbWVdO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBmcm9tUGluID0gdGhpcy5maW5kUGluKGZyb21QaW5JbmZvKTtcclxuICAgICAgICAgICAgICAgIGlmIChmcm9tUGluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5saW5rKGlucHV0TmFtZSwgZnJvbVBpbi5ub2RlLCBmcm9tUGluLnBpbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZyb21QaW5JbmZvID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ05vZGUgJyArIGZyb21QaW5JbmZvICsgJyBub3QgZXhpc3QnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUGluIG9mICcgKyBmcm9tUGluSW5mby5ub2RlICsgJy4nICsgZnJvbVBpbkluZm8ucGluICsgJyBub3QgZXhpc3QnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmRQaW46IGZ1bmN0aW9uIChpbnB1dCkge1xyXG4gICAgICAgIHZhciBub2RlO1xyXG4gICAgICAgIC8vIFRyeSB0byB0YWtlIGlucHV0IGFzIGEgZGlyZWN0bHkgYSBub2RlXHJcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgfHwgaW5wdXQgaW5zdGFuY2VvZiBHcmFwaE5vZGUpIHtcclxuICAgICAgICAgICAgaW5wdXQgPSB7XHJcbiAgICAgICAgICAgICAgICBub2RlOiBpbnB1dFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dC5ub2RlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB0bXAgPSB0aGlzLm5vZGVzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRtcC5uYW1lID09PSBpbnB1dC5ub2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHRtcDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbm9kZSA9IGlucHV0Lm5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlKSB7XHJcbiAgICAgICAgICAgIHZhciBpbnB1dFBpbiA9IGlucHV0LnBpbjtcclxuICAgICAgICAgICAgaWYgKCFpbnB1dFBpbikge1xyXG4gICAgICAgICAgICAgICAgLy8gVXNlIGZpcnN0IHBpbiBkZWZhdWx0bHlcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFBpbiA9IE9iamVjdC5rZXlzKG5vZGUub3V0cHV0cylbMF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5vZGUub3V0cHV0c1tpbnB1dFBpbl0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBwaW46IGlucHV0UGluXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdyYXBoO1xyXG4iLCJpbXBvcnQgR3JhcGggZnJvbSAnLi9HcmFwaCc7XHJcbmltcG9ydCBUZXh0dXJlUG9vbCBmcm9tICcuL1RleHR1cmVQb29sJztcclxuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcclxuXHJcbi8qKlxyXG4gKiBDb21wb3NpdG9yIHByb3ZpZGUgZ3JhcGggYmFzZWQgcG9zdCBwcm9jZXNzaW5nXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvbXBvc2l0b3IuR3JhcGhcclxuICpcclxuICovXHJcbnZhciBDb21wb3NpdG9yID0gR3JhcGguZXh0ZW5kKGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAvLyBPdXRwdXQgbm9kZVxyXG4gICAgICAgIF9vdXRwdXRzOiBbXSxcclxuXHJcbiAgICAgICAgX3RleHR1cmVQb29sOiBuZXcgVGV4dHVyZVBvb2woKSxcclxuXHJcbiAgICAgICAgX2ZyYW1lQnVmZmVyOiBuZXcgRnJhbWVCdWZmZXIoe1xyXG4gICAgICAgICAgICBkZXB0aEJ1ZmZlcjogZmFsc2VcclxuICAgICAgICB9KVxyXG4gICAgfTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvci5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgYWRkTm9kZTogZnVuY3Rpb24obm9kZSkge1xyXG4gICAgICAgIEdyYXBoLnByb3RvdHlwZS5hZGROb2RlLmNhbGwodGhpcywgbm9kZSk7XHJcbiAgICAgICAgbm9kZS5fY29tcG9zaXRvciA9IHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgIGlmICh0aGlzLl9kaXJ0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0cy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5ub2Rlc1tpXS5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0cy5wdXNoKHRoaXMubm9kZXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSByZWZlcmVuY2UgbnVtYmVyIG9mIGVhY2ggb3V0cHV0IHRleHR1cmVcclxuICAgICAgICAgICAgdGhpcy5ub2Rlc1tpXS5iZWZvcmVGcmFtZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vdXRwdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHNbaV0udXBkYXRlUmVmZXJlbmNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX291dHB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0c1tpXS5yZW5kZXIocmVuZGVyZXIsIGZyYW1lQnVmZmVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAvLyBDbGVhciB1cFxyXG4gICAgICAgICAgICB0aGlzLm5vZGVzW2ldLmFmdGVyRnJhbWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFsbG9jYXRlVGV4dHVyZTogZnVuY3Rpb24gKHBhcmFtZXRlcnMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZVBvb2wuZ2V0KHBhcmFtZXRlcnMpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZWxlYXNlVGV4dHVyZTogZnVuY3Rpb24gKHBhcmFtZXRlcnMpIHtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlUG9vbC5wdXQocGFyYW1ldGVycyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEZyYW1lQnVmZmVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lQnVmZmVyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgY29tcG9zaXRvclxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlUG9vbC5jbGVhcihyZW5kZXJlcik7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ29tcG9zaXRvcjtcclxuIiwiaW1wb3J0IENvbXBvc2l0b3JOb2RlIGZyb20gJy4vQ29tcG9zaXRvck5vZGUnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLlNjZW5lTm9kZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvck5vZGVcclxuICovXHJcbnZhciBTY2VuZU5vZGUgPSBDb21wb3NpdG9yTm9kZS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLlNjZW5lTm9kZSMgKi9cclxue1xyXG4gICAgbmFtZTogJ3NjZW5lJyxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuU2NlbmV9XHJcbiAgICAgKi9cclxuICAgIHNjZW5lOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5DYW1lcmF9XHJcbiAgICAgKi9cclxuICAgIGNhbWVyYTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGF1dG9VcGRhdGVTY2VuZTogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIHByZVo6IGZhbHNlXHJcblxyXG59LCBmdW5jdGlvbigpIHtcclxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcclxufSwge1xyXG4gICAgcmVuZGVyOiBmdW5jdGlvbihyZW5kZXJlcikge1xyXG5cclxuICAgICAgICB0aGlzLl9yZW5kZXJpbmcgPSB0cnVlO1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXInKTtcclxuXHJcbiAgICAgICAgdmFyIHJlbmRlckluZm87XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5vdXRwdXRzKSB7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJJbmZvID0gcmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsIHRoaXMuY2FtZXJhLCAhdGhpcy5hdXRvVXBkYXRlU2NlbmUsIHRoaXMucHJlWik7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBmcmFtZUJ1ZmZlciA9IHRoaXMuZnJhbWVCdWZmZXI7XHJcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHRoaXMudXBkYXRlUGFyYW1ldGVyKG5hbWUsIHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9jb21wb3NpdG9yLmFsbG9jYXRlVGV4dHVyZShwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdID0gdGV4dHVyZTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0YWNobWVudCA9IG91dHB1dEluZm8uYXR0YWNobWVudCB8fCBfZ2wuQ09MT1JfQVRUQUNITUVOVDA7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKGF0dGFjaG1lbnQpID09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9IF9nbFthdHRhY2htZW50XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaCh0ZXh0dXJlLCBhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIC8vIE1SVCBTdXBwb3J0IGluIGNocm9tZVxyXG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9zZGsvdGVzdHMvY29uZm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZHJhdy1idWZmZXJzLmh0bWxcclxuICAgICAgICAgICAgdmFyIGV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfZHJhd19idWZmZXJzJyk7XHJcbiAgICAgICAgICAgIGlmIChleHQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBidWZzID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMub3V0cHV0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQgPSBwYXJzZUludChhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBfZ2wuQ09MT1JfQVRUQUNITUVOVDAgJiYgYXR0YWNobWVudCA8PSBfZ2wuQ09MT1JfQVRUQUNITUVOVDAgKyA4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZnMucHVzaChhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBleHQuZHJhd0J1ZmZlcnNFWFQoYnVmcyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEFsd2F5cyBjbGVhclxyXG4gICAgICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNhdmVDbGVhcigpO1xyXG4gICAgICAgICAgICByZW5kZXJlci5jbGVhckJpdCA9IGdsZW51bS5ERVBUSF9CVUZGRVJfQklUIHwgZ2xlbnVtLkNPTE9SX0JVRkZFUl9CSVQ7XHJcbiAgICAgICAgICAgIHJlbmRlckluZm8gPSByZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSwgdGhpcy5jYW1lcmEsICF0aGlzLmF1dG9VcGRhdGVTY2VuZSwgdGhpcy5wcmVaKTtcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVzdG9yZUNsZWFyKCk7XHJcblxyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdhZnRlcnJlbmRlcicsIHJlbmRlckluZm8pO1xyXG5cclxuICAgICAgICB0aGlzLl9yZW5kZXJpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9yZW5kZXJlZCA9IHRydWU7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2NlbmVOb2RlO1xyXG4iLCJpbXBvcnQgQ29tcG9zaXRvck5vZGUgZnJvbSAnLi9Db21wb3NpdG9yTm9kZSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5UZXh0dXJlTm9kZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvck5vZGVcclxuICovXHJcbnZhciBUZXh0dXJlTm9kZSA9IENvbXBvc2l0b3JOb2RlLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5UZXh0dXJlTm9kZSMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0ZXh0dXJlOiBudWxsLFxyXG5cclxuICAgICAgICAvLyBUZXh0dXJlIG5vZGUgbXVzdCBoYXZlIG91dHB1dCB3aXRob3V0IHBhcmFtZXRlcnNcclxuICAgICAgICBvdXRwdXRzOiB7XHJcbiAgICAgICAgICAgIGNvbG9yOiB7fVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxufSwge1xyXG5cclxuICAgIGdldE91dHB1dDogZnVuY3Rpb24gKHJlbmRlcmVyLCBuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gRG8gbm90aGluZ1xyXG4gICAgYmVmb3JlRnJhbWU6IGZ1bmN0aW9uICgpIHt9LFxyXG4gICAgYWZ0ZXJGcmFtZTogZnVuY3Rpb24gKCkge31cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlTm9kZTtcclxuIiwiLy8gVE9ETyBTaGFkZXIgbGlicmFyeVxyXG5pbXBvcnQgUGFzcyBmcm9tICcuL1Bhc3MnO1xyXG5pbXBvcnQgQ29tcG9zaXRvck5vZGUgZnJvbSAnLi9Db21wb3NpdG9yTm9kZSc7XHJcblxyXG4vLyBUT0RPIGN1cmxub2lzZSBkZW1vIHdyb25nXHJcblxyXG4vLyBQRU5ESU5HXHJcbi8vIFVzZSB0b3BvbG9naWNhbCBzb3J0ID9cclxuXHJcbi8qKlxyXG4gKiBGaWx0ZXIgbm9kZVxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLkZpbHRlck5vZGVcclxuICogQGV4dGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgICB2YXIgbm9kZSA9IG5ldyBjbGF5LmNvbXBvc2l0b3IuRmlsdGVyTm9kZSh7XHJcbiAgICAgICAgbmFtZTogJ2Z4YWEnLFxyXG4gICAgICAgIHNoYWRlcjogY2xheS5TaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IuZnhhYScpLFxyXG4gICAgICAgIGlucHV0czoge1xyXG4gICAgICAgICAgICB0ZXh0dXJlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogJ3NjZW5lJyxcclxuICAgICAgICAgICAgICAgICAgICBwaW46ICdjb2xvcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gTXVsdGlwbGUgb3V0cHV0cyBpcyBwcmVzZXJ2ZWQgZm9yIE1SVCBzdXBwb3J0IGluIFdlYkdMMi4wXHJcbiAgICAgICAgb3V0cHV0czoge1xyXG4gICAgICAgICAgICBjb2xvcjoge1xyXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudDogY2xheS5GcmFtZUJ1ZmZlci5DT0xPUl9BVFRBQ0hNRU5UMFxyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogY2xheS5UZXh0dXJlLlJHQkEsXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDUxMixcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDUxMlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8vIE5vZGUgd2lsbCBrZWVwIHRoZSBSVFQgcmVuZGVyZWQgaW4gbGFzdCBmcmFtZVxyXG4gICAgICAgICAgICAgICAga2VlcExhc3RGcmFtZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBub2RlIG91dHB1dCB0aGUgUlRUIHJlbmRlcmVkIGluIGxhc3QgZnJhbWVcclxuICAgICAgICAgICAgICAgIG91dHB1dExhc3RGcmFtZTogdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAqXHJcbiAgICAqL1xyXG52YXIgRmlsdGVyTm9kZSA9IENvbXBvc2l0b3JOb2RlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuRmlsdGVyTm9kZSMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbmFtZTogJycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5wdXRzOiB7fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvdXRwdXRzOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNoYWRlcjogJycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElucHV0IGxpbmtzLCB3aWxsIGJlIHVwZGF0ZWQgYnkgdGhlIGdyYXBoXHJcbiAgICAgICAgICogQGV4YW1wbGU6XHJcbiAgICAgICAgICogICAgIGlucHV0TmFtZToge1xyXG4gICAgICAgICAqICAgICAgICAgbm9kZTogc29tZU5vZGUsXHJcbiAgICAgICAgICogICAgICAgICBwaW46ICd4eHh4J1xyXG4gICAgICAgICAqICAgICB9XHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBpbnB1dExpbmtzOiB7fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogT3V0cHV0IGxpbmtzLCB3aWxsIGJlIHVwZGF0ZWQgYnkgdGhlIGdyYXBoXHJcbiAgICAgICAgICogQGV4YW1wbGU6XHJcbiAgICAgICAgICogICAgIG91dHB1dE5hbWU6IHtcclxuICAgICAgICAgKiAgICAgICAgIG5vZGU6IHNvbWVOb2RlLFxyXG4gICAgICAgICAqICAgICAgICAgcGluOiAneHh4eCdcclxuICAgICAgICAgKiAgICAgfVxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb3V0cHV0TGlua3M6IHt9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5jb21wb3NpdG9yLlBhc3N9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcGFzczogbnVsbCxcclxuXHJcbiAgICAgICAgLy8gU2F2ZSB0aGUgb3V0cHV0IHRleHR1cmUgb2YgcHJldmlvdXMgZnJhbWVcclxuICAgICAgICAvLyBXaWxsIGJlIHVzZWQgd2hlbiB0aGVyZSBleGlzdCBhIGNpcmN1bGFyIHJlZmVyZW5jZVxyXG4gICAgICAgIF9wcmV2T3V0cHV0VGV4dHVyZXM6IHt9LFxyXG4gICAgICAgIF9vdXRwdXRUZXh0dXJlczoge30sXHJcblxyXG4gICAgICAgIC8vIEV4YW1wbGU6IHsgbmFtZTogMiB9XHJcbiAgICAgICAgX291dHB1dFJlZmVyZW5jZXM6IHt9LFxyXG5cclxuICAgICAgICBfcmVuZGVyaW5nOiBmYWxzZSxcclxuICAgICAgICAvLyBJZiByZW5kZXJlZCBpbiB0aGlzIGZyYW1lXHJcbiAgICAgICAgX3JlbmRlcmVkOiBmYWxzZSxcclxuXHJcbiAgICAgICAgX2NvbXBvc2l0b3I6IG51bGxcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgcGFzcyA9IG5ldyBQYXNzKHtcclxuICAgICAgICBmcmFnbWVudDogdGhpcy5zaGFkZXJcclxuICAgIH0pO1xyXG4gICAgdGhpcy5wYXNzID0gcGFzcztcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuRmlsdGVyTm9kZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZXJlbmRlcicsIHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpbnB1dE5hbWUgaW4gdGhpcy5pbnB1dExpbmtzKSB7XHJcbiAgICAgICAgICAgIHZhciBsaW5rID0gdGhpcy5pbnB1dExpbmtzW2lucHV0TmFtZV07XHJcbiAgICAgICAgICAgIHZhciBpbnB1dFRleHR1cmUgPSBsaW5rLm5vZGUuZ2V0T3V0cHV0KHJlbmRlcmVyLCBsaW5rLnBpbik7XHJcbiAgICAgICAgICAgIHRoaXMucGFzcy5zZXRVbmlmb3JtKGlucHV0TmFtZSwgaW5wdXRUZXh0dXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gT3V0cHV0XHJcbiAgICAgICAgaWYgKCF0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXNzLm91dHB1dHMgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5nZXRGcmFtZUJ1ZmZlcigpLnVuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBhc3MucmVuZGVyKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBhc3Mub3V0cHV0cyA9IHt9O1xyXG5cclxuICAgICAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXMgPSB7fTtcclxuICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJhbWV0ZXJzID0gdGhpcy51cGRhdGVQYXJhbWV0ZXIobmFtZSwgcmVuZGVyZXIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKHBhcmFtZXRlcnMud2lkdGgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQYXJhbWV0ZXIobmFtZSwgcmVuZGVyZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIG91dHB1dEluZm8gPSB0aGlzLm91dHB1dHNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX2NvbXBvc2l0b3IuYWxsb2NhdGVUZXh0dXJlKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV0gPSB0ZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dGFjaG1lbnQgPSBvdXRwdXRJbmZvLmF0dGFjaG1lbnQgfHwgX2dsLkNPTE9SX0FUVEFDSE1FTlQwO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihhdHRhY2htZW50KSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50ID0gX2dsW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSA9IHRleHR1cmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5nZXRGcmFtZUJ1ZmZlcigpLmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiBhdHRhY2hlZFRleHR1cmVzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBGSVhNRSBhdHRhY2htZW50IGNoYW5nZXMgaW4gZGlmZmVyZW50IG5vZGVzXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb21wb3NpdG9yLmdldEZyYW1lQnVmZmVyKCkuYXR0YWNoKFxyXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0sIGF0dGFjaG1lbnRcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucGFzcy5yZW5kZXIocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgZGF0YSBvZiB0ZXh0dXJlIGlzIGNoYW5nZWQgb3ZlciB0aW1lLFxyXG4gICAgICAgICAgICAvLyBIZXJlIHVwZGF0ZSB0aGUgbWlwbWFwcyBvZiB0ZXh0dXJlIGVhY2ggdGltZSBhZnRlciByZW5kZXJlZDtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5nZXRGcmFtZUJ1ZmZlcigpLnVwZGF0ZU1pcG1hcChyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpbnB1dE5hbWUgaW4gdGhpcy5pbnB1dExpbmtzKSB7XHJcbiAgICAgICAgICAgIHZhciBsaW5rID0gdGhpcy5pbnB1dExpbmtzW2lucHV0TmFtZV07XHJcbiAgICAgICAgICAgIGxpbmsubm9kZS5yZW1vdmVSZWZlcmVuY2UobGluay5waW4pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2FmdGVycmVuZGVyJywgcmVuZGVyZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBUT0RPIFJlbW92ZSBwYXJhbWV0ZXIgZnVuY3Rpb24gY2FsbGJhY2tcclxuICAgIHVwZGF0ZVBhcmFtZXRlcjogZnVuY3Rpb24gKG91dHB1dE5hbWUsIHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIG91dHB1dEluZm8gPSB0aGlzLm91dHB1dHNbb3V0cHV0TmFtZV07XHJcbiAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSBvdXRwdXRJbmZvLnBhcmFtZXRlcnM7XHJcbiAgICAgICAgdmFyIHBhcmFtZXRlcnNDb3B5ID0gb3V0cHV0SW5mby5fcGFyYW1ldGVyc0NvcHk7XHJcbiAgICAgICAgaWYgKCFwYXJhbWV0ZXJzQ29weSkge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJzQ29weSA9IG91dHB1dEluZm8uX3BhcmFtZXRlcnNDb3B5ID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSAnd2lkdGgnICYmIGtleSAhPT0gJ2hlaWdodCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzQ29weVtrZXldID0gcGFyYW1ldGVyc1trZXldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB3aWR0aCwgaGVpZ2h0O1xyXG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVycy53aWR0aCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHBhcmFtZXRlcnMud2lkdGguY2FsbCh0aGlzLCByZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHBhcmFtZXRlcnMud2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVycy5oZWlnaHQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gcGFyYW1ldGVycy5oZWlnaHQuY2FsbCh0aGlzLCByZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBwYXJhbWV0ZXJzLmhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2lkdGggPSBNYXRoLmNlaWwod2lkdGgpO1xyXG4gICAgICAgIGhlaWdodCA9IE1hdGguY2VpbChoZWlnaHQpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHkud2lkdGggIT09IHdpZHRoXHJcbiAgICAgICAgICAgIHx8IHBhcmFtZXRlcnNDb3B5LmhlaWdodCAhPT0gaGVpZ2h0XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0uZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcGFyYW1ldGVyc0NvcHkud2lkdGggPSB3aWR0aDtcclxuICAgICAgICBwYXJhbWV0ZXJzQ29weS5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJhbWV0ZXJzQ29weTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcGFyYW1ldGVyXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHBhcmFtIHt9IHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHNldFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5wYXNzLnNldFVuaWZvcm0obmFtZSwgdmFsdWUpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogR2V0IHBhcmFtZXRlciB2YWx1ZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHt9XHJcbiAgICAgKi9cclxuICAgIGdldFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXNzLmdldFVuaWZvcm0obmFtZSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcGFyYW1ldGVyc1xyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9ialxyXG4gICAgICovXHJcbiAgICBzZXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBvYmopIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXIobmFtZSwgb2JqW25hbWVdKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLy8gLyoqXHJcbiAgICAvLyAgKiBTZXQgc2hhZGVyIGNvZGVcclxuICAgIC8vICAqIEBwYXJhbSB7c3RyaW5nfSBzaGFkZXJTdHJcclxuICAgIC8vICAqL1xyXG4gICAgLy8gc2V0U2hhZGVyOiBmdW5jdGlvbiAoc2hhZGVyU3RyKSB7XHJcbiAgICAvLyAgICAgdmFyIG1hdGVyaWFsID0gdGhpcy5wYXNzLm1hdGVyaWFsO1xyXG4gICAgLy8gICAgIG1hdGVyaWFsLnNoYWRlci5zZXRGcmFnbWVudChzaGFkZXJTdHIpO1xyXG4gICAgLy8gICAgIG1hdGVyaWFsLmF0dGFjaFNoYWRlcihtYXRlcmlhbC5zaGFkZXIsIHRydWUpO1xyXG4gICAgLy8gfSxcclxuICAgIC8qKlxyXG4gICAgICogUHJveHkgb2YgcGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgeHh4KTtcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFt2YWxdXHJcbiAgICAgKi9cclxuICAgIGRlZmluZTogZnVuY3Rpb24gKHN5bWJvbCwgdmFsKSB7XHJcbiAgICAgICAgdGhpcy5wYXNzLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCBzeW1ib2wsIHZhbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJveHkgb2YgcGFzcy5tYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCB4eHgpXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICovXHJcbiAgICB1bmRlZmluZTogZnVuY3Rpb24gKHN5bWJvbCkge1xyXG4gICAgICAgIHRoaXMucGFzcy5tYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCBzeW1ib2wpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW1vdmVSZWZlcmVuY2U6IGZ1bmN0aW9uIChvdXRwdXROYW1lKSB7XHJcbiAgICAgICAgdGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXS0tO1xyXG4gICAgICAgIGlmICh0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW291dHB1dE5hbWVdID09PSAwKSB7XHJcbiAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW291dHB1dE5hbWVdO1xyXG4gICAgICAgICAgICBpZiAob3V0cHV0SW5mby5rZWVwTGFzdEZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdID0gdGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBPdXRwdXQgb2YgdGhpcyBub2RlIGhhdmUgYWxyZWF5IGJlZW4gdXNlZCBieSBhbGwgb3RoZXIgbm9kZXNcclxuICAgICAgICAgICAgICAgIC8vIFB1dCB0aGUgdGV4dHVyZSBiYWNrIHRvIHRoZSBwb29sLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgQ29tcG9zaXRvck5vZGUucHJvdG90eXBlLmNsZWFyLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIC8vIERlZmF1bHQgZGlzYWJsZSBhbGwgdGV4dHVyZVxyXG4gICAgICAgIHRoaXMucGFzcy5tYXRlcmlhbC5kaXNhYmxlVGV4dHVyZXNBbGwoKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGaWx0ZXJOb2RlO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmNvbG9yYWRqdXN0XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGJyaWdodG5lc3MgOiAwLjA7XFxudW5pZm9ybSBmbG9hdCBjb250cmFzdCA6IDEuMDtcXG51bmlmb3JtIGZsb2F0IGV4cG9zdXJlIDogMC4wO1xcbnVuaWZvcm0gZmxvYXQgZ2FtbWEgOiAxLjA7XFxudW5pZm9ybSBmbG9hdCBzYXR1cmF0aW9uIDogMS4wO1xcbmNvbnN0IHZlYzMgdyA9IHZlYzMoMC4yMTI1LCAwLjcxNTQsIDAuMDcyMSk7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9IGNsYW1wKHRleC5yZ2IgKyB2ZWMzKGJyaWdodG5lc3MpLCAwLjAsIDEuMCk7XFxuIGNvbG9yID0gY2xhbXAoIChjb2xvci12ZWMzKDAuNSkpKmNvbnRyYXN0K3ZlYzMoMC41KSwgMC4wLCAxLjApO1xcbiBjb2xvciA9IGNsYW1wKCBjb2xvciAqIHBvdygyLjAsIGV4cG9zdXJlKSwgMC4wLCAxLjApO1xcbiBjb2xvciA9IGNsYW1wKCBwb3coY29sb3IsIHZlYzMoZ2FtbWEpKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBsdW1pbmFuY2UgPSBkb3QoIGNvbG9yLCB3ICk7XFxuIGNvbG9yID0gbWl4KHZlYzMobHVtaW5hbmNlKSwgY29sb3IsIHNhdHVyYXRpb24pO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5icmlnaHRuZXNzXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGJyaWdodG5lc3MgOiAwLjA7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9IHRleC5yZ2IgKyB2ZWMzKGJyaWdodG5lc3MpO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5jb250cmFzdFxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBjb250cmFzdCA6IDEuMDtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQoIHRleHR1cmUsIHZfVGV4Y29vcmQpO1xcbiB2ZWMzIGNvbG9yID0gKHRleC5yZ2ItdmVjMygwLjUpKSpjb250cmFzdCt2ZWMzKDAuNSk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIHRleC5hKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmV4cG9zdXJlXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGV4cG9zdXJlIDogMC4wO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9IHRleC5yZ2IgKiBwb3coMi4wLCBleHBvc3VyZSk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIHRleC5hKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmdhbW1hXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGdhbW1hIDogMS4wO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9IHBvdyh0ZXgucmdiLCB2ZWMzKGdhbW1hKSk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIHRleC5hKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLnNhdHVyYXRpb25cXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gZmxvYXQgc2F0dXJhdGlvbiA6IDEuMDtcXG5jb25zdCB2ZWMzIHcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9IHRleC5yZ2I7XFxuIGZsb2F0IGx1bWluYW5jZSA9IGRvdChjb2xvciwgdyk7XFxuIGNvbG9yID0gbWl4KHZlYzMobHVtaW5hbmNlKSwgY29sb3IsIHNhdHVyYXRpb24pO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5rZXJuZWwuZ2F1c3NpYW5fOVxcbmZsb2F0IGdhdXNzaWFuS2VybmVsWzldO1xcbmdhdXNzaWFuS2VybmVsWzBdID0gMC4wNztcXG5nYXVzc2lhbktlcm5lbFsxXSA9IDAuMDk7XFxuZ2F1c3NpYW5LZXJuZWxbMl0gPSAwLjEyO1xcbmdhdXNzaWFuS2VybmVsWzNdID0gMC4xNDtcXG5nYXVzc2lhbktlcm5lbFs0XSA9IDAuMTY7XFxuZ2F1c3NpYW5LZXJuZWxbNV0gPSAwLjE0O1xcbmdhdXNzaWFuS2VybmVsWzZdID0gMC4xMjtcXG5nYXVzc2lhbktlcm5lbFs3XSA9IDAuMDk7XFxuZ2F1c3NpYW5LZXJuZWxbOF0gPSAwLjA3O1xcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5rZXJuZWwuZ2F1c3NpYW5fMTNcXG5mbG9hdCBnYXVzc2lhbktlcm5lbFsxM107XFxuZ2F1c3NpYW5LZXJuZWxbMF0gPSAwLjAyO1xcbmdhdXNzaWFuS2VybmVsWzFdID0gMC4wMztcXG5nYXVzc2lhbktlcm5lbFsyXSA9IDAuMDY7XFxuZ2F1c3NpYW5LZXJuZWxbM10gPSAwLjA4O1xcbmdhdXNzaWFuS2VybmVsWzRdID0gMC4xMTtcXG5nYXVzc2lhbktlcm5lbFs1XSA9IDAuMTM7XFxuZ2F1c3NpYW5LZXJuZWxbNl0gPSAwLjE0O1xcbmdhdXNzaWFuS2VybmVsWzddID0gMC4xMztcXG5nYXVzc2lhbktlcm5lbFs4XSA9IDAuMTE7XFxuZ2F1c3NpYW5LZXJuZWxbOV0gPSAwLjA4O1xcbmdhdXNzaWFuS2VybmVsWzEwXSA9IDAuMDY7XFxuZ2F1c3NpYW5LZXJuZWxbMTFdID0gMC4wMztcXG5nYXVzc2lhbktlcm5lbFsxMl0gPSAwLjAyO1xcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5nYXVzc2lhbl9ibHVyXFxuI2RlZmluZSBTSEFERVJfTkFNRSBnYXVzc2lhbl9ibHVyXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTt2YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIGZsb2F0IGJsdXJTaXplIDogMi4wO1xcbnVuaWZvcm0gdmVjMiB0ZXh0dXJlU2l6ZSA6IFs1MTIuMCwgNTEyLjBdO1xcbnVuaWZvcm0gZmxvYXQgYmx1ckRpciA6IDAuMDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwuY2xhbXBfc2FtcGxlXFxudm9pZCBtYWluICh2b2lkKVxcbntcXG4gQGltcG9ydCBjbGF5LmNvbXBvc2l0b3Iua2VybmVsLmdhdXNzaWFuXzlcXG4gdmVjMiBvZmYgPSBibHVyU2l6ZSAvIHRleHR1cmVTaXplO1xcbiBvZmYgKj0gdmVjMigxLjAgLSBibHVyRGlyLCBibHVyRGlyKTtcXG4gdmVjNCBzdW0gPSB2ZWM0KDAuMCk7XFxuIGZsb2F0IHdlaWdodEFsbCA9IDAuMDtcXG4gZm9yIChpbnQgaSA9IDA7IGkgPCA5OyBpKyspIHtcXG4gZmxvYXQgdyA9IGdhdXNzaWFuS2VybmVsW2ldO1xcbiB2ZWM0IHRleGVsID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBmbG9hdChpIC0gNCkgKiBvZmYpKTtcXG4gc3VtICs9IHRleGVsICogdztcXG4gd2VpZ2h0QWxsICs9IHc7XFxuIH1cXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHN1bSAvIG1heCh3ZWlnaHRBbGwsIDAuMDEpKTtcXG59XFxuQGVuZFxcblwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmhkci5sb2dfbHVtXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG5jb25zdCB2ZWMzIHcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQpKTtcXG4gZmxvYXQgbHVtaW5hbmNlID0gZG90KHRleC5yZ2IsIHcpO1xcbiBsdW1pbmFuY2UgPSBsb2cobHVtaW5hbmNlICsgMC4wMDEpO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNCh2ZWMzKGx1bWluYW5jZSksIDEuMCkpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuaGRyLmx1bV9hZGFwdGlvblxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGFkYXB0ZWRMdW07XFxudW5pZm9ybSBzYW1wbGVyMkQgY3VycmVudEx1bTtcXG51bmlmb3JtIGZsb2F0IGZyYW1lVGltZSA6IDAuMDI7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiBmbG9hdCBmQWRhcHRlZEx1bSA9IGRlY29kZUhEUih0ZXh0dXJlMkQoYWRhcHRlZEx1bSwgdmVjMigwLjUsIDAuNSkpKS5yO1xcbiBmbG9hdCBmQ3VycmVudEx1bSA9IGV4cChlbmNvZGVIRFIodGV4dHVyZTJEKGN1cnJlbnRMdW0sIHZlYzIoMC41LCAwLjUpKSkucik7XFxuIGZBZGFwdGVkTHVtICs9IChmQ3VycmVudEx1bSAtIGZBZGFwdGVkTHVtKSAqICgxLjAgLSBwb3coMC45OCwgMzAuMCAqIGZyYW1lVGltZSkpO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNCh2ZWMzKGZBZGFwdGVkTHVtKSwgMS4wKSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5sdW1cXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbmNvbnN0IHZlYzMgdyA9IHZlYzMoMC4yMTI1LCAwLjcxNTQsIDAuMDcyMSk7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkICk7XFxuIGZsb2F0IGx1bWluYW5jZSA9IGRvdCh0ZXgucmdiLCB3KTtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGx1bWluYW5jZSksIDEuMCk7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5sdXRcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGxvb2t1cDtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIGZsb2F0IGJsdWVDb2xvciA9IHRleC5iICogNjMuMDtcXG4gdmVjMiBxdWFkMTtcXG4gcXVhZDEueSA9IGZsb29yKGZsb29yKGJsdWVDb2xvcikgLyA4LjApO1xcbiBxdWFkMS54ID0gZmxvb3IoYmx1ZUNvbG9yKSAtIChxdWFkMS55ICogOC4wKTtcXG4gdmVjMiBxdWFkMjtcXG4gcXVhZDIueSA9IGZsb29yKGNlaWwoYmx1ZUNvbG9yKSAvIDguMCk7XFxuIHF1YWQyLnggPSBjZWlsKGJsdWVDb2xvcikgLSAocXVhZDIueSAqIDguMCk7XFxuIHZlYzIgdGV4UG9zMTtcXG4gdGV4UG9zMS54ID0gKHF1YWQxLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIHRleC5yKTtcXG4gdGV4UG9zMS55ID0gKHF1YWQxLnkgKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIHRleC5nKTtcXG4gdmVjMiB0ZXhQb3MyO1xcbiB0ZXhQb3MyLnggPSAocXVhZDIueCAqIDAuMTI1KSArIDAuNS81MTIuMCArICgoMC4xMjUgLSAxLjAvNTEyLjApICogdGV4LnIpO1xcbiB0ZXhQb3MyLnkgPSAocXVhZDIueSAqIDAuMTI1KSArIDAuNS81MTIuMCArICgoMC4xMjUgLSAxLjAvNTEyLjApICogdGV4LmcpO1xcbiB2ZWM0IG5ld0NvbG9yMSA9IHRleHR1cmUyRChsb29rdXAsIHRleFBvczEpO1xcbiB2ZWM0IG5ld0NvbG9yMiA9IHRleHR1cmUyRChsb29rdXAsIHRleFBvczIpO1xcbiB2ZWM0IG5ld0NvbG9yID0gbWl4KG5ld0NvbG9yMSwgbmV3Q29sb3IyLCBmcmFjdChibHVlQ29sb3IpKTtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChuZXdDb2xvci5yZ2IsIHRleC53KTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLnZpZ25ldHRlXFxuI2RlZmluZSBPVVRQVVRfQUxQSEFcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gZmxvYXQgZGFya25lc3M6IDE7XFxudW5pZm9ybSBmbG9hdCBvZmZzZXQ6IDE7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSB0ZXhlbC5yZ2I7XFxuIHZlYzIgdXYgPSAodl9UZXhjb29yZCAtIHZlYzIoMC41KSkgKiB2ZWMyKG9mZnNldCk7XFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUih2ZWM0KG1peCh0ZXhlbC5yZ2IsIHZlYzMoMS4wIC0gZGFya25lc3MpLCBkb3QodXYsIHV2KSksIHRleGVsLmEpKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLm91dHB1dFxcbiNkZWZpbmUgT1VUUFVUX0FMUEhBXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSB0ZXgucmdiO1xcbiNpZmRlZiBPVVRQVVRfQUxQSEFcXG4gZ2xfRnJhZ0NvbG9yLmEgPSB0ZXguYTtcXG4jZWxzZVxcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGdsX0ZyYWdDb2xvcik7XFxuI2lmZGVmIFBSRU1VTFRJUExZX0FMUEhBXFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7XFxuI2VuZGlmXFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5icmlnaHRcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gZmxvYXQgdGhyZXNob2xkIDogMTtcXG51bmlmb3JtIGZsb2F0IHNjYWxlIDogMS4wO1xcbnVuaWZvcm0gdmVjMiB0ZXh0dXJlU2l6ZTogWzUxMiwgNTEyXTtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5jb25zdCB2ZWMzIGx1bVdlaWdodCA9IHZlYzMoMC4yMTI1LCAwLjcxNTQsIDAuMDcyMSk7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZlYzQgbWVkaWFuKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IGMpXFxue1xcbiByZXR1cm4gYSArIGIgKyBjIC0gbWluKG1pbihhLCBiKSwgYykgLSBtYXgobWF4KGEsIGIpLCBjKTtcXG59XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQpKTtcXG4jaWZkZWYgQU5USV9GTElDS0VSXFxuIHZlYzMgZCA9IDEuMCAvIHRleHR1cmVTaXplLnh5eCAqIHZlYzMoMS4wLCAxLjAsIDAuMCk7XFxuIHZlYzQgczEgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQgLSBkLnh6KSk7XFxuIHZlYzQgczIgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh6KSk7XFxuIHZlYzQgczMgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQgLSBkLnp5KSk7XFxuIHZlYzQgczQgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp5KSk7XFxuIHRleGVsID0gbWVkaWFuKG1lZGlhbih0ZXhlbCwgczEsIHMyKSwgczMsIHM0KTtcXG4jZW5kaWZcXG4gZmxvYXQgbHVtID0gZG90KHRleGVsLnJnYiAsIGx1bVdlaWdodCk7XFxuIHZlYzQgY29sb3I7XFxuIGlmIChsdW0gPiB0aHJlc2hvbGQgJiYgdGV4ZWwuYSA+IDAuMClcXG4ge1xcbiBjb2xvciA9IHZlYzQodGV4ZWwucmdiICogc2NhbGUsIHRleGVsLmEgKiBzY2FsZSk7XFxuIH1cXG4gZWxzZVxcbiB7XFxuIGNvbG9yID0gdmVjNCgwLjApO1xcbiB9XFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihjb2xvcik7XFxufVxcbkBlbmRcXG5cIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5kb3duc2FtcGxlXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemUgOiBbNTEyLCA1MTJdO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5mbG9hdCBicmlnaHRuZXNzKHZlYzMgYylcXG57XFxuIHJldHVybiBtYXgobWF4KGMuciwgYy5nKSwgYy5iKTtcXG59XFxuQGltcG9ydCBjbGF5LnV0aWwuY2xhbXBfc2FtcGxlXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgZCA9IHZlYzQoLTEuMCwgLTEuMCwgMS4wLCAxLjApIC8gdGV4dHVyZVNpemUueHl4eTtcXG4jaWZkZWYgQU5USV9GTElDS0VSXFxuIHZlYzMgczEgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHkpKS5yZ2I7XFxuIHZlYzMgczIgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuenkpKS5yZ2I7XFxuIHZlYzMgczMgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHcpKS5yZ2I7XFxuIHZlYzMgczQgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuencpKS5yZ2I7XFxuIGZsb2F0IHMxdyA9IDEuMCAvIChicmlnaHRuZXNzKHMxKSArIDEuMCk7XFxuIGZsb2F0IHMydyA9IDEuMCAvIChicmlnaHRuZXNzKHMyKSArIDEuMCk7XFxuIGZsb2F0IHMzdyA9IDEuMCAvIChicmlnaHRuZXNzKHMzKSArIDEuMCk7XFxuIGZsb2F0IHM0dyA9IDEuMCAvIChicmlnaHRuZXNzKHM0KSArIDEuMCk7XFxuIGZsb2F0IG9uZURpdmlkZVN1bSA9IDEuMCAvIChzMXcgKyBzMncgKyBzM3cgKyBzNHcpO1xcbiB2ZWM0IGNvbG9yID0gdmVjNChcXG4gKHMxICogczF3ICsgczIgKiBzMncgKyBzMyAqIHMzdyArIHM0ICogczR3KSAqIG9uZURpdmlkZVN1bSxcXG4gMS4wXFxuICk7XFxuI2Vsc2VcXG4gdmVjNCBjb2xvciA9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eSkpO1xcbiBjb2xvciArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuenkpKTtcXG4gY29sb3IgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh3KSk7XFxuIGNvbG9yICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56dykpO1xcbiBjb2xvciAqPSAwLjI1O1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoY29sb3IpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IudXBzYW1wbGVcXG4jZGVmaW5lIEhJR0hfUVVBTElUWVxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMiwgNTEyXTtcXG51bmlmb3JtIGZsb2F0IHNhbXBsZVNjYWxlOiAwLjU7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZvaWQgbWFpbigpXFxue1xcbiNpZmRlZiBISUdIX1FVQUxJVFlcXG4gdmVjNCBkID0gdmVjNCgxLjAsIDEuMCwgLTEuMCwgMC4wKSAvIHRleHR1cmVTaXplLnh5eHkgKiBzYW1wbGVTY2FsZTtcXG4gdmVjNCBzO1xcbiBzID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgLSBkLnh5KSk7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgLSBkLnd5KSkgKiAyLjA7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgLSBkLnp5KSk7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp3KSkgKiAyLjA7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKSkgKiA0LjA7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh3KSkgKiAyLjA7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp5KSk7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnd5KSkgKiAyLjA7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh5KSk7XFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihzIC8gMTYuMCk7XFxuI2Vsc2VcXG4gdmVjNCBkID0gdmVjNCgtMS4wLCAtMS4wLCArMS4wLCArMS4wKSAvIHRleHR1cmVTaXplLnh5eHk7XFxuIHZlYzQgcztcXG4gcyA9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eSkpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56eSkpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54dykpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56dykpO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIocyAvIDQuMCk7XFxuI2VuZGlmXFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5oZHIuY29tcG9zaXRlXFxuI2RlZmluZSBUT05FTUFQUElOR1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxuI2lmZGVmIEJMT09NX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBibG9vbTtcXG4jZW5kaWZcXG4jaWZkZWYgTEVOU0ZMQVJFX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBsZW5zZmxhcmU7XFxudW5pZm9ybSBzYW1wbGVyMkQgbGVuc2RpcnQ7XFxuI2VuZGlmXFxuI2lmZGVmIExVTV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbHVtO1xcbiNlbmRpZlxcbiNpZmRlZiBMVVRfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGx1dDtcXG4jZW5kaWZcXG4jaWZkZWYgQ09MT1JfQ09SUkVDVElPTlxcbnVuaWZvcm0gZmxvYXQgYnJpZ2h0bmVzcyA6IDAuMDtcXG51bmlmb3JtIGZsb2F0IGNvbnRyYXN0IDogMS4wO1xcbnVuaWZvcm0gZmxvYXQgc2F0dXJhdGlvbiA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVklHTkVUVEVcXG51bmlmb3JtIGZsb2F0IHZpZ25ldHRlRGFya25lc3M6IDEuMDtcXG51bmlmb3JtIGZsb2F0IHZpZ25ldHRlT2Zmc2V0OiAxLjA7XFxuI2VuZGlmXFxudW5pZm9ybSBmbG9hdCBleHBvc3VyZSA6IDEuMDtcXG51bmlmb3JtIGZsb2F0IGJsb29tSW50ZW5zaXR5IDogMC4yNTtcXG51bmlmb3JtIGZsb2F0IGxlbnNmbGFyZUludGVuc2l0eSA6IDE7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwuc3JnYlxcbnZlYzMgQUNFU1RvbmVNYXBwaW5nKHZlYzMgY29sb3IpXFxue1xcbiBjb25zdCBmbG9hdCBBID0gMi41MTtcXG4gY29uc3QgZmxvYXQgQiA9IDAuMDM7XFxuIGNvbnN0IGZsb2F0IEMgPSAyLjQzO1xcbiBjb25zdCBmbG9hdCBEID0gMC41OTtcXG4gY29uc3QgZmxvYXQgRSA9IDAuMTQ7XFxuIHJldHVybiAoY29sb3IgKiAoQSAqIGNvbG9yICsgQikpIC8gKGNvbG9yICogKEMgKiBjb2xvciArIEQpICsgRSk7XFxufVxcbmZsb2F0IGV5ZUFkYXB0aW9uKGZsb2F0IGZMdW0pXFxue1xcbiByZXR1cm4gbWl4KDAuMiwgZkx1bSwgMC41KTtcXG59XFxuI2lmZGVmIExVVF9FTkFCTEVEXFxudmVjMyBsdXRUcmFuc2Zvcm0odmVjMyBjb2xvcikge1xcbiBmbG9hdCBibHVlQ29sb3IgPSBjb2xvci5iICogNjMuMDtcXG4gdmVjMiBxdWFkMTtcXG4gcXVhZDEueSA9IGZsb29yKGZsb29yKGJsdWVDb2xvcikgLyA4LjApO1xcbiBxdWFkMS54ID0gZmxvb3IoYmx1ZUNvbG9yKSAtIChxdWFkMS55ICogOC4wKTtcXG4gdmVjMiBxdWFkMjtcXG4gcXVhZDIueSA9IGZsb29yKGNlaWwoYmx1ZUNvbG9yKSAvIDguMCk7XFxuIHF1YWQyLnggPSBjZWlsKGJsdWVDb2xvcikgLSAocXVhZDIueSAqIDguMCk7XFxuIHZlYzIgdGV4UG9zMTtcXG4gdGV4UG9zMS54ID0gKHF1YWQxLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIGNvbG9yLnIpO1xcbiB0ZXhQb3MxLnkgPSAocXVhZDEueSAqIDAuMTI1KSArIDAuNS81MTIuMCArICgoMC4xMjUgLSAxLjAvNTEyLjApICogY29sb3IuZyk7XFxuIHZlYzIgdGV4UG9zMjtcXG4gdGV4UG9zMi54ID0gKHF1YWQyLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIGNvbG9yLnIpO1xcbiB0ZXhQb3MyLnkgPSAocXVhZDIueSAqIDAuMTI1KSArIDAuNS81MTIuMCArICgoMC4xMjUgLSAxLjAvNTEyLjApICogY29sb3IuZyk7XFxuIHZlYzQgbmV3Q29sb3IxID0gdGV4dHVyZTJEKGx1dCwgdGV4UG9zMSk7XFxuIHZlYzQgbmV3Q29sb3IyID0gdGV4dHVyZTJEKGx1dCwgdGV4UG9zMik7XFxuIHZlYzQgbmV3Q29sb3IgPSBtaXgobmV3Q29sb3IxLCBuZXdDb2xvcjIsIGZyYWN0KGJsdWVDb2xvcikpO1xcbiByZXR1cm4gbmV3Q29sb3IucmdiO1xcbn1cXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ZWwgPSB2ZWM0KDAuMCk7XFxuIHZlYzQgb3JpZ2luYWxUZXhlbCA9IHZlYzQoMC4wKTtcXG4jaWZkZWYgVEVYVFVSRV9FTkFCTEVEXFxuIHRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuIG9yaWdpbmFsVGV4ZWwgPSB0ZXhlbDtcXG4jZW5kaWZcXG4jaWZkZWYgQkxPT01fRU5BQkxFRFxcbiB2ZWM0IGJsb29tVGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZTJEKGJsb29tLCB2X1RleGNvb3JkKSk7XFxuIHRleGVsLnJnYiArPSBibG9vbVRleGVsLnJnYiAqIGJsb29tSW50ZW5zaXR5O1xcbiB0ZXhlbC5hICs9IGJsb29tVGV4ZWwuYSAqIGJsb29tSW50ZW5zaXR5O1xcbiNlbmRpZlxcbiNpZmRlZiBMRU5TRkxBUkVfRU5BQkxFRFxcbiB0ZXhlbCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKGxlbnNmbGFyZSwgdl9UZXhjb29yZCkpICogdGV4dHVyZTJEKGxlbnNkaXJ0LCB2X1RleGNvb3JkKSAqIGxlbnNmbGFyZUludGVuc2l0eTtcXG4jZW5kaWZcXG4gdGV4ZWwuYSA9IG1pbih0ZXhlbC5hLCAxLjApO1xcbiNpZmRlZiBMVU1fRU5BQkxFRFxcbiBmbG9hdCBmTHVtID0gdGV4dHVyZTJEKGx1bSwgdmVjMigwLjUsIDAuNSkpLnI7XFxuIGZsb2F0IGFkYXB0ZWRMdW1EZXN0ID0gMy4wIC8gKG1heCgwLjEsIDEuMCArIDEwLjAqZXllQWRhcHRpb24oZkx1bSkpKTtcXG4gZmxvYXQgZXhwb3N1cmVCaWFzID0gYWRhcHRlZEx1bURlc3QgKiBleHBvc3VyZTtcXG4jZWxzZVxcbiBmbG9hdCBleHBvc3VyZUJpYXMgPSBleHBvc3VyZTtcXG4jZW5kaWZcXG4jaWZkZWYgVE9ORU1BUFBJTkdcXG4gdGV4ZWwucmdiICo9IGV4cG9zdXJlQmlhcztcXG4gdGV4ZWwucmdiID0gQUNFU1RvbmVNYXBwaW5nKHRleGVsLnJnYik7XFxuI2VuZGlmXFxuIHRleGVsID0gbGluZWFyVG9zUkdCKHRleGVsKTtcXG4jaWZkZWYgTFVUX0VOQUJMRURcXG4gdGV4ZWwucmdiID0gbHV0VHJhbnNmb3JtKGNsYW1wKHRleGVsLnJnYix2ZWMzKDAuMCksdmVjMygxLjApKSk7XFxuI2VuZGlmXFxuI2lmZGVmIENPTE9SX0NPUlJFQ1RJT05cXG4gdGV4ZWwucmdiID0gY2xhbXAodGV4ZWwucmdiICsgdmVjMyhicmlnaHRuZXNzKSwgMC4wLCAxLjApO1xcbiB0ZXhlbC5yZ2IgPSBjbGFtcCgodGV4ZWwucmdiIC0gdmVjMygwLjUpKSpjb250cmFzdCt2ZWMzKDAuNSksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbHVtID0gZG90KHRleGVsLnJnYiwgdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKSk7XFxuIHRleGVsLnJnYiA9IG1peCh2ZWMzKGx1bSksIHRleGVsLnJnYiwgc2F0dXJhdGlvbik7XFxuI2VuZGlmXFxuI2lmZGVmIFZJR05FVFRFXFxuIHZlYzIgdXYgPSAodl9UZXhjb29yZCAtIHZlYzIoMC41KSkgKiB2ZWMyKHZpZ25ldHRlT2Zmc2V0KTtcXG4gdGV4ZWwucmdiID0gbWl4KHRleGVsLnJnYiwgdmVjMygxLjAgLSB2aWduZXR0ZURhcmtuZXNzKSwgZG90KHV2LCB1dikpO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodGV4ZWwpO1xcbiNpZmRlZiBERUJVR1xcbiAjaWYgREVCVUcgPT0gMVxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSkpO1xcbiAjZWxpZiBERUJVRyA9PSAyXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihkZWNvZGVIRFIodGV4dHVyZTJEKGJsb29tLCB2X1RleGNvb3JkKSkgKiBibG9vbUludGVuc2l0eSk7XFxuICNlbGlmIERFQlVHID09IDNcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGRlY29kZUhEUih0ZXh0dXJlMkQobGVuc2ZsYXJlLCB2X1RleGNvb3JkKSAqIGxlbnNmbGFyZUludGVuc2l0eSkpO1xcbiAjZW5kaWZcXG4jZW5kaWZcXG4gaWYgKG9yaWdpbmFsVGV4ZWwuYSA8PSAwLjAxICYmIGdsX0ZyYWdDb2xvci5hID4gMWUtNSkge1xcbiBnbF9GcmFnQ29sb3IuYSA9IGRvdChnbF9GcmFnQ29sb3IucmdiLCB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpKTtcXG4gfVxcbiNpZmRlZiBQUkVNVUxUSVBMWV9BTFBIQVxcbiBnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hO1xcbiNlbmRpZlxcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IubGVuc2ZsYXJlXFxuI2RlZmluZSBTQU1QTEVfTlVNQkVSIDhcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGxlbnNjb2xvcjtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemUgOiBbNTEyLCA1MTJdO1xcbnVuaWZvcm0gZmxvYXQgZGlzcGVyc2FsIDogMC4zO1xcbnVuaWZvcm0gZmxvYXQgaGFsb1dpZHRoIDogMC40O1xcbnVuaWZvcm0gZmxvYXQgZGlzdG9ydGlvbiA6IDEuMDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudmVjNCB0ZXh0dXJlRGlzdG9ydGVkKFxcbiBpbiB2ZWMyIHRleGNvb3JkLFxcbiBpbiB2ZWMyIGRpcmVjdGlvbixcXG4gaW4gdmVjMyBkaXN0b3J0aW9uXFxuKSB7XFxuIHJldHVybiB2ZWM0KFxcbiBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHRleGNvb3JkICsgZGlyZWN0aW9uICogZGlzdG9ydGlvbi5yKSkucixcXG4gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB0ZXhjb29yZCArIGRpcmVjdGlvbiAqIGRpc3RvcnRpb24uZykpLmcsXFxuIGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdGV4Y29vcmQgKyBkaXJlY3Rpb24gKiBkaXN0b3J0aW9uLmIpKS5iLFxcbiAxLjBcXG4gKTtcXG59XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzIgdGV4Y29vcmQgPSAtdl9UZXhjb29yZCArIHZlYzIoMS4wKTsgdmVjMiB0ZXh0dXJlT2Zmc2V0ID0gMS4wIC8gdGV4dHVyZVNpemU7XFxuIHZlYzIgZ2hvc3RWZWMgPSAodmVjMigwLjUpIC0gdGV4Y29vcmQpICogZGlzcGVyc2FsO1xcbiB2ZWMyIGhhbG9WZWMgPSBub3JtYWxpemUoZ2hvc3RWZWMpICogaGFsb1dpZHRoO1xcbiB2ZWMzIGRpc3RvcnRpb24gPSB2ZWMzKC10ZXh0dXJlT2Zmc2V0LnggKiBkaXN0b3J0aW9uLCAwLjAsIHRleHR1cmVPZmZzZXQueCAqIGRpc3RvcnRpb24pO1xcbiB2ZWM0IHJlc3VsdCA9IHZlYzQoMC4wKTtcXG4gZm9yIChpbnQgaSA9IDA7IGkgPCBTQU1QTEVfTlVNQkVSOyBpKyspXFxuIHtcXG4gdmVjMiBvZmZzZXQgPSBmcmFjdCh0ZXhjb29yZCArIGdob3N0VmVjICogZmxvYXQoaSkpO1xcbiBmbG9hdCB3ZWlnaHQgPSBsZW5ndGgodmVjMigwLjUpIC0gb2Zmc2V0KSAvIGxlbmd0aCh2ZWMyKDAuNSkpO1xcbiB3ZWlnaHQgPSBwb3coMS4wIC0gd2VpZ2h0LCAxMC4wKTtcXG4gcmVzdWx0ICs9IHRleHR1cmVEaXN0b3J0ZWQob2Zmc2V0LCBub3JtYWxpemUoZ2hvc3RWZWMpLCBkaXN0b3J0aW9uKSAqIHdlaWdodDtcXG4gfVxcbiByZXN1bHQgKj0gdGV4dHVyZTJEKGxlbnNjb2xvciwgdmVjMihsZW5ndGgodmVjMigwLjUpIC0gdGV4Y29vcmQpKSAvIGxlbmd0aCh2ZWMyKDAuNSkpKTtcXG4gZmxvYXQgd2VpZ2h0ID0gbGVuZ3RoKHZlYzIoMC41KSAtIGZyYWN0KHRleGNvb3JkICsgaGFsb1ZlYykpIC8gbGVuZ3RoKHZlYzIoMC41KSk7XFxuIHdlaWdodCA9IHBvdygxLjAgLSB3ZWlnaHQsIDEwLjApO1xcbiB2ZWMyIG9mZnNldCA9IGZyYWN0KHRleGNvb3JkICsgaGFsb1ZlYyk7XFxuIHJlc3VsdCArPSB0ZXh0dXJlRGlzdG9ydGVkKG9mZnNldCwgbm9ybWFsaXplKGdob3N0VmVjKSwgZGlzdG9ydGlvbikgKiB3ZWlnaHQ7XFxuIGdsX0ZyYWdDb2xvciA9IHJlc3VsdDtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmJsZW5kXFxuI2RlZmluZSBTSEFERVJfTkFNRSBibGVuZFxcbiNpZmRlZiBURVhUVVJFMV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTE7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQxIDogMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFMl9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTI7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQyIDogMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFM19FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTM7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQzIDogMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTQ7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQ0IDogMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTU7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQ1IDogMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNl9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTY7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQ2IDogMS4wO1xcbiNlbmRpZlxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB2ZWM0KDAuMCk7XFxuI2lmZGVmIFRFWFRVUkUxX0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTEsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDE7XFxuI2VuZGlmXFxuI2lmZGVmIFRFWFRVUkUyX0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTIsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDI7XFxuI2VuZGlmXFxuI2lmZGVmIFRFWFRVUkUzX0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTMsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDM7XFxuI2VuZGlmXFxuI2lmZGVmIFRFWFRVUkU0X0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTQsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDQ7XFxuI2VuZGlmXFxuI2lmZGVmIFRFWFRVUkU1X0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTUsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDU7XFxuI2VuZGlmXFxuI2lmZGVmIFRFWFRVUkU2X0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTYsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDY7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUih0ZXgpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZnhhYVxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSB2ZWM0IHZpZXdwb3J0IDogVklFV1BPUlQ7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gKDEuMC8xMjguMClcXG4jZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAoMS4wLzguMClcXG4jZGVmaW5lIEZYQUFfU1BBTl9NQVggOC4wXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMyIHJlc29sdXRpb24gPSAxLjAgLyB2aWV3cG9ydC56dztcXG4gdmVjMyByZ2JOVyA9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIC0xLjAsIC0xLjAgKSApICogcmVzb2x1dGlvbiApICkueHl6O1xcbiB2ZWMzIHJnYk5FID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMS4wLCAtMS4wICkgKSAqIHJlc29sdXRpb24gKSApLnh5ejtcXG4gdmVjMyByZ2JTVyA9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIC0xLjAsIDEuMCApICkgKiByZXNvbHV0aW9uICkgKS54eXo7XFxuIHZlYzMgcmdiU0UgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAxLjAsIDEuMCApICkgKiByZXNvbHV0aW9uICkgKS54eXo7XFxuIHZlYzQgcmdiYU0gPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgZ2xfRnJhZ0Nvb3JkLnh5ICogcmVzb2x1dGlvbiApICk7XFxuIHZlYzMgcmdiTSA9IHJnYmFNLnh5ejtcXG4gZmxvYXQgb3BhY2l0eSA9IHJnYmFNLnc7XFxuIHZlYzMgbHVtYSA9IHZlYzMoIDAuMjk5LCAwLjU4NywgMC4xMTQgKTtcXG4gZmxvYXQgbHVtYU5XID0gZG90KCByZ2JOVywgbHVtYSApO1xcbiBmbG9hdCBsdW1hTkUgPSBkb3QoIHJnYk5FLCBsdW1hICk7XFxuIGZsb2F0IGx1bWFTVyA9IGRvdCggcmdiU1csIGx1bWEgKTtcXG4gZmxvYXQgbHVtYVNFID0gZG90KCByZ2JTRSwgbHVtYSApO1xcbiBmbG9hdCBsdW1hTSA9IGRvdCggcmdiTSwgbHVtYSApO1xcbiBmbG9hdCBsdW1hTWluID0gbWluKCBsdW1hTSwgbWluKCBtaW4oIGx1bWFOVywgbHVtYU5FICksIG1pbiggbHVtYVNXLCBsdW1hU0UgKSApICk7XFxuIGZsb2F0IGx1bWFNYXggPSBtYXgoIGx1bWFNLCBtYXgoIG1heCggbHVtYU5XLCBsdW1hTkUpICwgbWF4KCBsdW1hU1csIGx1bWFTRSApICkgKTtcXG4gdmVjMiBkaXI7XFxuIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gZGlyLnkgPSAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuIGZsb2F0IGRpclJlZHVjZSA9IG1heCggKCBsdW1hTlcgKyBsdW1hTkUgKyBsdW1hU1cgKyBsdW1hU0UgKSAqICggMC4yNSAqIEZYQUFfUkVEVUNFX01VTCApLCBGWEFBX1JFRFVDRV9NSU4gKTtcXG4gZmxvYXQgcmNwRGlyTWluID0gMS4wIC8gKCBtaW4oIGFicyggZGlyLnggKSwgYWJzKCBkaXIueSApICkgKyBkaXJSZWR1Y2UgKTtcXG4gZGlyID0gbWluKCB2ZWMyKCBGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gbWF4KCB2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuIGRpciAqIHJjcERpck1pbikpICogcmVzb2x1dGlvbjtcXG4gdmVjMyByZ2JBID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAqIHJlc29sdXRpb24gKyBkaXIgKiAoIDEuMCAvIDMuMCAtIDAuNSApICkgKS54eXo7XFxuIHJnYkEgKz0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAqIHJlc29sdXRpb24gKyBkaXIgKiAoIDIuMCAvIDMuMCAtIDAuNSApICkgKS54eXo7XFxuIHJnYkEgKj0gMC41O1xcbiB2ZWMzIHJnYkIgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgZ2xfRnJhZ0Nvb3JkLnh5ICogcmVzb2x1dGlvbiArIGRpciAqIC0wLjUgKSApLnh5ejtcXG4gcmdiQiArPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgZ2xfRnJhZ0Nvb3JkLnh5ICogcmVzb2x1dGlvbiArIGRpciAqIDAuNSApICkueHl6O1xcbiByZ2JCICo9IDAuMjU7XFxuIHJnYkIgKz0gcmdiQSAqIDAuNTtcXG4gZmxvYXQgbHVtYUIgPSBkb3QoIHJnYkIsIGx1bWEgKTtcXG4gaWYgKCAoIGx1bWFCIDwgbHVtYU1pbiApIHx8ICggbHVtYUIgPiBsdW1hTWF4ICkgKVxcbiB7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoIHJnYkEsIG9wYWNpdHkgKTtcXG4gfVxcbiBlbHNlIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCggcmdiQiwgb3BhY2l0eSApO1xcbiB9XFxufVxcbkBlbmRcIjtcclxuIiwiaW1wb3J0IGNvbG9yYWRqdXN0RXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2NvbG9yYWRqdXN0Lmdsc2wuanMnO1xyXG5pbXBvcnQgYmx1ckVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9ibHVyLmdsc2wuanMnO1xyXG5pbXBvcnQgbHVtRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2x1bS5nbHNsLmpzJztcclxuaW1wb3J0IGx1dEVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9sdXQuZ2xzbC5qcyc7XHJcbmltcG9ydCB2aWdlbnR0ZUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci92aWduZXR0ZS5nbHNsLmpzJztcclxuaW1wb3J0IG91dHB1dEVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9vdXRwdXQuZ2xzbC5qcyc7XHJcbmltcG9ydCBicmlnaHRFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvYnJpZ2h0Lmdsc2wuanMnO1xyXG5pbXBvcnQgZG93bnNhbXBsZUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9kb3duc2FtcGxlLmdsc2wuanMnO1xyXG5pbXBvcnQgdXBzYW1wbGVFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvdXBzYW1wbGUuZ2xzbC5qcyc7XHJcbmltcG9ydCBoZHJFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvaGRyLmdsc2wuanMnO1xyXG5pbXBvcnQgbGVuc2ZsYXJlRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2xlbnNmbGFyZS5nbHNsLmpzJztcclxuaW1wb3J0IGJsZW5kRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2JsZW5kLmdsc2wuanMnO1xyXG5pbXBvcnQgZnhhYUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9meGFhLmdsc2wuanMnO1xyXG4vLyBpbXBvcnQgZnhhYTNFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvZnhhYTMuZ2xzbC5qcyc7XHJcblxyXG4vLyBUT0RPIE11c3QgZXhwb3J0IGEgbW9kdWxlIGFuZCBiZSB1c2VkIGluIHRoZSBvdGhlciBtb2R1bGVzLiBPciBpdCB3aWxsIGJlIHRyZWUgc2hha2VkXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKFNoYWRlcikge1xyXG4gICAgLy8gU29tZSBidWlsZCBpbiBzaGFkZXJzXHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGNvbG9yYWRqdXN0RXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGJsdXJFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10obHVtRXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGx1dEVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXSh2aWdlbnR0ZUVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShvdXRwdXRFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10oYnJpZ2h0RXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGRvd25zYW1wbGVFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10odXBzYW1wbGVFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10oaGRyRXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGxlbnNmbGFyZUVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShibGVuZEVzc2wpO1xyXG5cclxuICAgIFNoYWRlclsnaW1wb3J0J10oZnhhYUVzc2wpO1xyXG5cclxufSIsImltcG9ydCB1dGlsIGZyb20gJy4vY29yZS91dGlsJztcclxuaW1wb3J0IENvbXBvc2l0b3IgZnJvbSAnLi9jb21wb3NpdG9yL0NvbXBvc2l0b3InO1xyXG5pbXBvcnQgQ29tcG9TY2VuZU5vZGUgZnJvbSAnLi9jb21wb3NpdG9yL1NjZW5lTm9kZSc7XHJcbmltcG9ydCBDb21wb1RleHR1cmVOb2RlIGZyb20gJy4vY29tcG9zaXRvci9UZXh0dXJlTm9kZSc7XHJcbmltcG9ydCBDb21wb0ZpbHRlck5vZGUgZnJvbSAnLi9jb21wb3NpdG9yL0ZpbHRlck5vZGUnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4vU2hhZGVyJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuL1RleHR1cmVDdWJlJztcclxuXHJcbmltcG9ydCByZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yIGZyb20gJy4vc2hhZGVyL3JlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3InO1xyXG5cclxucmVnaXN0ZXJCdWlsdGluQ29tcG9zaXRvcihTaGFkZXIpO1xyXG5cclxudmFyIHNoYWRlclNvdXJjZVJlZyA9IC9eI3NvdXJjZVxcKCguKj8pXFwpLztcclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LmNyZWF0ZUNvbXBvc2l0b3JcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBqc29uXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHJldHVybiB7Y2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3J9XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVDb21wb3NpdG9yKGpzb24sIG9wdHMpIHtcclxuICAgIHZhciBjb21wb3NpdG9yID0gbmV3IENvbXBvc2l0b3IoKTtcclxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG5cclxuICAgIHZhciBsaWIgPSB7XHJcbiAgICAgICAgdGV4dHVyZXM6IHt9LFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IHt9XHJcbiAgICB9O1xyXG4gICAgdmFyIGFmdGVyTG9hZCA9IGZ1bmN0aW9uKHNoYWRlckxpYiwgdGV4dHVyZUxpYikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwganNvbi5ub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbm9kZUluZm8gPSBqc29uLm5vZGVzW2ldO1xyXG4gICAgICAgICAgICB2YXIgbm9kZSA9IGNyZWF0ZU5vZGUobm9kZUluZm8sIGxpYiwgb3B0cyk7XHJcbiAgICAgICAgICAgIGlmIChub2RlKSB7XHJcbiAgICAgICAgICAgICAgICBjb21wb3NpdG9yLmFkZE5vZGUobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGZvciAodmFyIG5hbWUgaW4ganNvbi5wYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgdmFyIHBhcmFtSW5mbyA9IGpzb24ucGFyYW1ldGVyc1tuYW1lXTtcclxuICAgICAgICBsaWIucGFyYW1ldGVyc1tuYW1lXSA9IGNvbnZlcnRQYXJhbWV0ZXIocGFyYW1JbmZvKTtcclxuICAgIH1cclxuICAgIC8vIFRPRE8gbG9hZCB0ZXh0dXJlIGFzeW5jaHJvbm91c1xyXG4gICAgbG9hZFRleHR1cmVzKGpzb24sIGxpYiwgb3B0cywgZnVuY3Rpb24odGV4dHVyZUxpYikge1xyXG4gICAgICAgIGxpYi50ZXh0dXJlcyA9IHRleHR1cmVMaWI7XHJcbiAgICAgICAgYWZ0ZXJMb2FkKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gY29tcG9zaXRvcjtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlTm9kZShub2RlSW5mbywgbGliLCBvcHRzKSB7XHJcbiAgICB2YXIgdHlwZSA9IG5vZGVJbmZvLnR5cGUgfHwgJ2ZpbHRlcic7XHJcbiAgICB2YXIgc2hhZGVyU291cmNlO1xyXG4gICAgdmFyIGlucHV0cztcclxuICAgIHZhciBvdXRwdXRzO1xyXG5cclxuICAgIGlmICh0eXBlID09PSAnZmlsdGVyJykge1xyXG4gICAgICAgIHZhciBzaGFkZXJFeHAgPSBub2RlSW5mby5zaGFkZXIudHJpbSgpO1xyXG4gICAgICAgIHZhciByZXMgPSBzaGFkZXJTb3VyY2VSZWcuZXhlYyhzaGFkZXJFeHApO1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgc2hhZGVyU291cmNlID0gU2hhZGVyLnNvdXJjZShyZXNbMV0udHJpbSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2hhZGVyRXhwLmNoYXJBdCgwKSA9PT0gJyMnKSB7XHJcbiAgICAgICAgICAgIHNoYWRlclNvdXJjZSA9IGxpYi5zaGFkZXJzW3NoYWRlckV4cC5zdWJzdHIoMSldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXNoYWRlclNvdXJjZSkge1xyXG4gICAgICAgICAgICBzaGFkZXJTb3VyY2UgPSBzaGFkZXJFeHA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghc2hhZGVyU291cmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5vZGVJbmZvLmlucHV0cykge1xyXG4gICAgICAgIGlucHV0cyA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gbm9kZUluZm8uaW5wdXRzKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZUluZm8uaW5wdXRzW25hbWVdID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgaW5wdXRzW25hbWVdID0gbm9kZUluZm8uaW5wdXRzW25hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaW5wdXRzW25hbWVdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGVJbmZvLmlucHV0c1tuYW1lXS5ub2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIHBpbjogbm9kZUluZm8uaW5wdXRzW25hbWVdLnBpblxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChub2RlSW5mby5vdXRwdXRzKSB7XHJcbiAgICAgICAgb3V0cHV0cyA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gbm9kZUluZm8ub3V0cHV0cykge1xyXG4gICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IG5vZGVJbmZvLm91dHB1dHNbbmFtZV07XHJcbiAgICAgICAgICAgIG91dHB1dHNbbmFtZV0gPSB7fTtcclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8uYXR0YWNobWVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRzW25hbWVdLmF0dGFjaG1lbnQgPSBvdXRwdXRJbmZvLmF0dGFjaG1lbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ua2VlcExhc3RGcmFtZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRzW25hbWVdLmtlZXBMYXN0RnJhbWUgPSBvdXRwdXRJbmZvLmtlZXBMYXN0RnJhbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ub3V0cHV0TGFzdEZyYW1lICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dHNbbmFtZV0ub3V0cHV0TGFzdEZyYW1lID0gb3V0cHV0SW5mby5vdXRwdXRMYXN0RnJhbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ucGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0c1tuYW1lXS5wYXJhbWV0ZXJzID0gY29udmVydFBhcmFtZXRlcihvdXRwdXRJbmZvLnBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIG5vZGU7XHJcbiAgICBpZiAodHlwZSA9PT0gJ3NjZW5lJykge1xyXG4gICAgICAgIG5vZGUgPSBuZXcgQ29tcG9TY2VuZU5vZGUoe1xyXG4gICAgICAgICAgICBuYW1lOiBub2RlSW5mby5uYW1lLFxyXG4gICAgICAgICAgICBzY2VuZTogb3B0cy5zY2VuZSxcclxuICAgICAgICAgICAgY2FtZXJhOiBvcHRzLmNhbWVyYSxcclxuICAgICAgICAgICAgb3V0cHV0czogb3V0cHV0c1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ3RleHR1cmUnKSB7XHJcbiAgICAgICAgbm9kZSA9IG5ldyBDb21wb1RleHR1cmVOb2RlKHtcclxuICAgICAgICAgICAgbmFtZTogbm9kZUluZm8ubmFtZSxcclxuICAgICAgICAgICAgb3V0cHV0czogb3V0cHV0c1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8gRGVmYXVsdCBpcyBmaWx0ZXJcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIG5vZGUgPSBuZXcgQ29tcG9GaWx0ZXJOb2RlKHtcclxuICAgICAgICAgICAgbmFtZTogbm9kZUluZm8ubmFtZSxcclxuICAgICAgICAgICAgc2hhZGVyOiBzaGFkZXJTb3VyY2UsXHJcbiAgICAgICAgICAgIGlucHV0czogaW5wdXRzLFxyXG4gICAgICAgICAgICBvdXRwdXRzOiBvdXRwdXRzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAobm9kZSkge1xyXG4gICAgICAgIGlmIChub2RlSW5mby5wYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gbm9kZUluZm8ucGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IG5vZGVJbmZvLnBhcmFtZXRlcnNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWwuY2hhckF0KDApID09PSAnIycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gbGliLnRleHR1cmVzW3ZhbC5zdWJzdHIoMSldO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5vbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZWZvcmVyZW5kZXInLCBjcmVhdGVTaXplU2V0SGFuZGxlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCB0cnlDb252ZXJ0RXhwcih2YWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUub24oJ2JlZm9yZXJlbmRlcicsIHZhbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBub2RlLnNldFBhcmFtZXRlcihuYW1lLCB2YWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlSW5mby5kZWZpbmVzICYmIG5vZGUucGFzcykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIG5vZGVJbmZvLmRlZmluZXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBub2RlSW5mby5kZWZpbmVzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgbm9kZS5wYXNzLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCBuYW1lLCB2YWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vZGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRXaWR0aEZ1bmMod2lkdGgsIGhlaWdodCkge1xyXG4gICAgcmV0dXJuIHdpZHRoO1xyXG59XHJcbmZ1bmN0aW9uIGRlZmF1bHRIZWlnaHRGdW5jKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHJldHVybiBoZWlnaHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbnZlcnRQYXJhbWV0ZXIocGFyYW1JbmZvKSB7XHJcbiAgICB2YXIgcGFyYW0gPSB7fTtcclxuICAgIGlmICghcGFyYW1JbmZvKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcmFtO1xyXG4gICAgfVxyXG4gICAgWyd0eXBlJywgJ21pbkZpbHRlcicsICdtYWdGaWx0ZXInLCAnd3JhcFMnLCAnd3JhcFQnLCAnZmxpcFknLCAndXNlTWlwbWFwJ11cclxuICAgICAgICAuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWwgPSBwYXJhbUluZm9bbmFtZV07XHJcbiAgICAgICAgICAgIGlmICh2YWwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgLy8gQ29udmVydCBzdHJpbmcgdG8gZW51bVxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gVGV4dHVyZVt2YWxdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcGFyYW1bbmFtZV0gPSB2YWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB2YXIgc2l6ZVNjYWxlID0gcGFyYW1JbmZvLnNjYWxlIHx8IDE7XHJcbiAgICBbJ3dpZHRoJywgJ2hlaWdodCddXHJcbiAgICAgICAgLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICAgICAgICBpZiAocGFyYW1JbmZvW25hbWVdICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBwYXJhbUluZm9bbmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtW25hbWVdID0gY3JlYXRlU2l6ZVBhcnNlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgdHJ5Q29udmVydEV4cHIodmFsKSwgc2l6ZVNjYWxlXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtW25hbWVdID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICBpZiAoIXBhcmFtLndpZHRoKSB7XHJcbiAgICAgICAgcGFyYW0ud2lkdGggPSBkZWZhdWx0V2lkdGhGdW5jO1xyXG4gICAgfVxyXG4gICAgaWYgKCFwYXJhbS5oZWlnaHQpIHtcclxuICAgICAgICBwYXJhbS5oZWlnaHQgPSBkZWZhdWx0SGVpZ2h0RnVuYztcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyYW1JbmZvLnVzZU1pcG1hcCAhPSBudWxsKSB7XHJcbiAgICAgICAgcGFyYW0udXNlTWlwbWFwID0gcGFyYW1JbmZvLnVzZU1pcG1hcDtcclxuICAgIH1cclxuICAgIHJldHVybiBwYXJhbTtcclxufVxyXG5cclxuZnVuY3Rpb24gbG9hZFRleHR1cmVzKGpzb24sIGxpYiwgb3B0cywgY2FsbGJhY2spIHtcclxuICAgIGlmICghanNvbi50ZXh0dXJlcykge1xyXG4gICAgICAgIGNhbGxiYWNrKHt9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgdGV4dHVyZXMgPSB7fTtcclxuICAgIHZhciBsb2FkaW5nID0gMDtcclxuXHJcbiAgICB2YXIgY2JkID0gZmFsc2U7XHJcbiAgICB2YXIgdGV4dHVyZVJvb3RQYXRoID0gb3B0cy50ZXh0dXJlUm9vdFBhdGg7XHJcbiAgICB1dGlsLmVhY2goanNvbi50ZXh0dXJlcywgZnVuY3Rpb24odGV4dHVyZUluZm8sIG5hbWUpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZTtcclxuICAgICAgICB2YXIgcGF0aCA9IHRleHR1cmVJbmZvLnBhdGg7XHJcbiAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSBjb252ZXJ0UGFyYW1ldGVyKHRleHR1cmVJbmZvLnBhcmFtZXRlcnMpO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGgpICYmIHBhdGgubGVuZ3RoID09PSA2KSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlUm9vdFBhdGgpIHtcclxuICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoLm1hcChmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHV0aWwucmVsYXRpdmUyYWJzb2x1dGUoaXRlbSwgdGV4dHVyZVJvb3RQYXRoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZUN1YmUocGFyYW1ldGVycyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlUm9vdFBhdGgpIHtcclxuICAgICAgICAgICAgICAgIHBhdGggPSB1dGlsLnJlbGF0aXZlMmFic29sdXRlKHBhdGgsIHRleHR1cmVSb290UGF0aCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQocGFyYW1ldGVycyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0ZXh0dXJlLmxvYWQocGF0aCk7XHJcbiAgICAgICAgbG9hZGluZysrO1xyXG4gICAgICAgIHRleHR1cmUub25jZSgnc3VjY2VzcycsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB0ZXh0dXJlc1tuYW1lXSA9IHRleHR1cmU7XHJcbiAgICAgICAgICAgIGxvYWRpbmctLTtcclxuICAgICAgICAgICAgaWYgKGxvYWRpbmcgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHRleHR1cmVzKTtcclxuICAgICAgICAgICAgICAgIGNiZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChsb2FkaW5nID09PSAwICYmICFjYmQpIHtcclxuICAgICAgICBjYWxsYmFjayh0ZXh0dXJlcyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVNpemVTZXRIYW5kbGVyKG5hbWUsIGV4cHJGdW5jKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgLy8gUEVORElORyB2aWV3cG9ydCBzaXplIG9yIHdpbmRvdyBzaXplXHJcbiAgICAgICAgdmFyIGRwciA9IHJlbmRlcmVyLmdldERldmljZVBpeGVsUmF0aW8oKTtcclxuICAgICAgICAvLyBQRU5ESU5HIElmIG11bHRpcGx5IGRwciA/XHJcbiAgICAgICAgdmFyIHdpZHRoID0gcmVuZGVyZXIuZ2V0V2lkdGgoKTtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gcmVuZGVyZXIuZ2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGV4cHJGdW5jKHdpZHRoLCBoZWlnaHQsIGRwcik7XHJcbiAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXIobmFtZSwgcmVzdWx0KTtcclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVNpemVQYXJzZXIobmFtZSwgZXhwckZ1bmMsIHNjYWxlKSB7XHJcbiAgICBzY2FsZSA9IHNjYWxlIHx8IDE7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIGRwciA9IHJlbmRlcmVyLmdldERldmljZVBpeGVsUmF0aW8oKTtcclxuICAgICAgICB2YXIgd2lkdGggPSByZW5kZXJlci5nZXRXaWR0aCgpICogc2NhbGU7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IHJlbmRlcmVyLmdldEhlaWdodCgpICogc2NhbGU7XHJcbiAgICAgICAgcmV0dXJuIGV4cHJGdW5jKHdpZHRoLCBoZWlnaHQsIGRwcik7XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiB0cnlDb252ZXJ0RXhwcihzdHJpbmcpIHtcclxuICAgIC8vIFBFTkRJTkdcclxuICAgIHZhciBleHByUmVzID0gL15leHByXFwoKC4qKVxcKSQvLmV4ZWMoc3RyaW5nKTtcclxuICAgIGlmIChleHByUmVzKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIGZ1bmMgPSBuZXcgRnVuY3Rpb24oJ3dpZHRoJywgJ2hlaWdodCcsICdkcHInLCAncmV0dXJuICcgKyBleHByUmVzWzFdKTtcclxuICAgICAgICAgICAgLy8gVHJ5IHJ1biB0XHJcbiAgICAgICAgICAgIGZ1bmMoMSwgMSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZnVuYztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGV4cHJlc3Npb24uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVDb21wb3NpdG9yO1xyXG4iLCIvLyBERVBSRUNBVEVEXHJcbmltcG9ydCBjcmVhdGVDb21wb3NpdG9yIGZyb20gJy4uL2NyZWF0ZUNvbXBvc2l0b3InO1xyXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVDb21wb3NpdG9yOyIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuI2lmIGRlZmluZWQoU0VDT05EX1BBU1MpIHx8IGRlZmluZWQoRklSU1RfUEFTUylcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZCA6IFRFWENPT1JEXzA7XFxudW5pZm9ybSB2ZWMyIHV2UmVwZWF0O1xcbnVuaWZvcm0gdmVjMiB1dk9mZnNldDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG4jZW5kaWZcXG4jaWZkZWYgRklSU1RfUEFTU1xcbnVuaWZvcm0gbWF0NCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgOiBXT1JMRElOVkVSU0VUUkFOU1BPU0U7XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxudmFyeWluZyB2ZWMzIHZfTm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbCA6IE5PUk1BTDtcXG5hdHRyaWJ1dGUgdmVjNCB0YW5nZW50IDogVEFOR0VOVDtcXG52YXJ5aW5nIHZlYzMgdl9UYW5nZW50O1xcbnZhcnlpbmcgdmVjMyB2X0JpdGFuZ2VudDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG4jaWZkZWYgVEhJUkRfUEFTU1xcbnVuaWZvcm0gbWF0NCBwcmV2V29ybGRWaWV3UHJvamVjdGlvbjtcXG52YXJ5aW5nIHZlYzQgdl9WaWV3UG9zaXRpb247XFxudmFyeWluZyB2ZWM0IHZfUHJldlZpZXdQb3NpdGlvbjtcXG4jaWZkZWYgU0tJTk5JTkdcXG4jaWZkZWYgVVNFX1NLSU5fTUFUUklDRVNfVEVYVFVSRVxcbnVuaWZvcm0gc2FtcGxlcjJEIHByZXZTa2luTWF0cmljZXNUZXh0dXJlO1xcbm1hdDQgZ2V0UHJldlNraW5NYXRyaXgoZmxvYXQgaWR4KSB7XFxuIHJldHVybiBnZXRTa2luTWF0cml4KHByZXZTa2luTWF0cmljZXNUZXh0dXJlLCBpZHgpO1xcbn1cXG4jZWxzZVxcbnVuaWZvcm0gbWF0NCBwcmV2U2tpbk1hdHJpeFtKT0lOVF9DT1VOVF07XFxubWF0NCBnZXRQcmV2U2tpbk1hdHJpeChmbG9hdCBpZHgpIHtcXG4gcmV0dXJuIHByZXZTa2luTWF0cml4W2ludChpZHgpXTtcXG59XFxuI2VuZGlmXFxuI2VuZGlmXFxuI2VuZGlmXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuIHZlYzMgcHJldlNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiNpZmRlZiBGSVJTVF9QQVNTXFxuIHZlYzMgc2tpbm5lZE5vcm1hbCA9IG5vcm1hbDtcXG4gdmVjMyBza2lubmVkVGFuZ2VudCA9IHRhbmdlbnQueHl6O1xcbiBib29sIGhhc1RhbmdlbnQgPSBkb3QodGFuZ2VudCwgdGFuZ2VudCkgPiAwLjA7XFxuI2VuZGlmXFxuI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiAjaWZkZWYgRklSU1RfUEFTU1xcbiBza2lubmVkTm9ybWFsID0gKHNraW5NYXRyaXhXUyAqIHZlYzQobm9ybWFsLCAwLjApKS54eXo7XFxuIGlmIChoYXNUYW5nZW50KSB7XFxuIHNraW5uZWRUYW5nZW50ID0gKHNraW5NYXRyaXhXUyAqIHZlYzQodGFuZ2VudC54eXosIDAuMCkpLnh5ejtcXG4gfVxcbiAjZW5kaWZcXG4gI2lmZGVmIFRISVJEX1BBU1NcXG4ge1xcbiBtYXQ0IHByZXZTa2luTWF0cml4V1MgPSBnZXRQcmV2U2tpbk1hdHJpeChqb2ludC54KSAqIHdlaWdodC54O1xcbiBpZiAod2VpZ2h0LnkgPiAxZS00KSB7IHByZXZTa2luTWF0cml4V1MgKz0gZ2V0UHJldlNraW5NYXRyaXgoam9pbnQueSkgKiB3ZWlnaHQueTsgfVxcbiBpZiAod2VpZ2h0LnogPiAxZS00KSB7IHByZXZTa2luTWF0cml4V1MgKz0gZ2V0UHJldlNraW5NYXRyaXgoam9pbnQueikgKiB3ZWlnaHQuejsgfVxcbiBmbG9hdCB3ZWlnaHRXID0gMS4wLXdlaWdodC54LXdlaWdodC55LXdlaWdodC56O1xcbiBpZiAod2VpZ2h0VyA+IDFlLTQpIHsgcHJldlNraW5NYXRyaXhXUyArPSBnZXRQcmV2U2tpbk1hdHJpeChqb2ludC53KSAqIHdlaWdodFc7IH1cXG4gcHJldlNraW5uZWRQb3NpdGlvbiA9IChwcmV2U2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiB9XFxuICNlbmRpZlxcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKFNFQ09ORF9QQVNTKSB8fCBkZWZpbmVkKEZJUlNUX1BBU1MpXFxuIHZfVGV4Y29vcmQgPSB0ZXhjb29yZCAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxuI2VuZGlmXFxuI2lmZGVmIEZJUlNUX1BBU1NcXG4gdl9Ob3JtYWwgPSBub3JtYWxpemUoKHdvcmxkSW52ZXJzZVRyYW5zcG9zZSAqIHZlYzQoc2tpbm5lZE5vcm1hbCwgMC4wKSkueHl6KTtcXG4gaWYgKGhhc1RhbmdlbnQpIHtcXG4gdl9UYW5nZW50ID0gbm9ybWFsaXplKCh3b3JsZEludmVyc2VUcmFuc3Bvc2UgKiB2ZWM0KHNraW5uZWRUYW5nZW50LCAwLjApKS54eXopO1xcbiB2X0JpdGFuZ2VudCA9IG5vcm1hbGl6ZShjcm9zcyh2X05vcm1hbCwgdl9UYW5nZW50KSAqIHRhbmdlbnQudyk7XFxuIH1cXG4gdl9Xb3JsZFBvc2l0aW9uID0gKHdvcmxkICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4jaWZkZWYgVEhJUkRfUEFTU1xcbiB2X1ZpZXdQb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG4gdl9QcmV2Vmlld1Bvc2l0aW9uID0gcHJldldvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHByZXZTa2lubmVkUG9zaXRpb24sIDEuMCk7XFxuI2VuZGlmXFxuIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIxLmZyYWdtZW50XFxudW5pZm9ybSBtYXQ0IHZpZXdJbnZlcnNlIDogVklFV0lOVkVSU0U7XFxudW5pZm9ybSBmbG9hdCBnbG9zc2luZXNzO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZhcnlpbmcgdmVjMyB2X05vcm1hbDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcXG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlTWFwO1xcbnZhcnlpbmcgdmVjMyB2X1RhbmdlbnQ7XFxudmFyeWluZyB2ZWMzIHZfQml0YW5nZW50O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHJvdWdoR2xvc3NNYXA7XFxudW5pZm9ybSBib29sIHVzZVJvdWdoR2xvc3NNYXA7XFxudW5pZm9ybSBib29sIHVzZVJvdWdobmVzcztcXG51bmlmb3JtIGJvb2wgZG91YmxlU2lkZWQ7XFxudW5pZm9ybSBmbG9hdCBhbHBoYUN1dG9mZjogMC4wO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE6IDEuMDtcXG51bmlmb3JtIGludCByb3VnaEdsb3NzQ2hhbm5lbDogMDtcXG5mbG9hdCBpbmRleGluZ1RleGVsKGluIHZlYzQgdGV4ZWwsIGluIGludCBpZHgpIHtcXG4gaWYgKGlkeCA9PSAzKSByZXR1cm4gdGV4ZWwuYTtcXG4gZWxzZSBpZiAoaWR4ID09IDEpIHJldHVybiB0ZXhlbC5nO1xcbiBlbHNlIGlmIChpZHggPT0gMikgcmV0dXJuIHRleGVsLmI7XFxuIGVsc2UgcmV0dXJuIHRleGVsLnI7XFxufVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIE4gPSB2X05vcm1hbDtcXG4gaWYgKGRvdWJsZVNpZGVkKSB7XFxuIHZlYzMgZXllUG9zID0gdmlld0ludmVyc2VbM10ueHl6O1xcbiB2ZWMzIFYgPSBleWVQb3MgLSB2X1dvcmxkUG9zaXRpb247XFxuIGlmIChkb3QoTiwgVikgPCAwLjApIHtcXG4gTiA9IC1OO1xcbiB9XFxuIH1cXG4gaWYgKGFscGhhQ3V0b2ZmID4gMC4wKSB7XFxuIGZsb2F0IGEgPSB0ZXh0dXJlMkQoZGlmZnVzZU1hcCwgdl9UZXhjb29yZCkuYSAqIGFscGhhO1xcbiBpZiAoYSA8IGFscGhhQ3V0b2ZmKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4gfVxcbiBpZiAoZG90KHZfVGFuZ2VudCwgdl9UYW5nZW50KSA+IDAuMCkge1xcbiB2ZWMzIG5vcm1hbFRleGVsID0gdGV4dHVyZTJEKG5vcm1hbE1hcCwgdl9UZXhjb29yZCkueHl6O1xcbiBpZiAoZG90KG5vcm1hbFRleGVsLCBub3JtYWxUZXhlbCkgPiAwLjApIHsgTiA9IG5vcm1hbFRleGVsICogMi4wIC0gMS4wO1xcbiBtYXQzIHRibiA9IG1hdDModl9UYW5nZW50LCB2X0JpdGFuZ2VudCwgdl9Ob3JtYWwpO1xcbiBOID0gbm9ybWFsaXplKHRibiAqIE4pO1xcbiB9XFxuIH1cXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IChOICsgMS4wKSAqIDAuNTtcXG4gZmxvYXQgZyA9IGdsb3NzaW5lc3M7XFxuIGlmICh1c2VSb3VnaEdsb3NzTWFwKSB7XFxuIGZsb2F0IGcyID0gaW5kZXhpbmdUZXhlbCh0ZXh0dXJlMkQocm91Z2hHbG9zc01hcCwgdl9UZXhjb29yZCksIHJvdWdoR2xvc3NDaGFubmVsKTtcXG4gaWYgKHVzZVJvdWdobmVzcykge1xcbiBnMiA9IDEuMCAtIGcyO1xcbiB9XFxuIGcgPSBjbGFtcChnMiArIChnIC0gMC41KSAqIDIuMCwgMC4wLCAxLjApO1xcbiB9XFxuIGdsX0ZyYWdDb2xvci5hID0gZyArIDAuMDA1O1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIyLmZyYWdtZW50XFxudW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZU1hcDtcXG51bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7XFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgbWV0YWxuZXNzO1xcbnVuaWZvcm0gYm9vbCB1c2VNZXRhbG5lc3NNYXA7XFxudW5pZm9ybSBib29sIGxpbmVhcjtcXG51bmlmb3JtIGZsb2F0IGFscGhhQ3V0b2ZmOiAwLjA7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTogMS4wO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnNyZ2JcXG52b2lkIG1haW4oKVxcbntcXG4gZmxvYXQgbSA9IG1ldGFsbmVzcztcXG4gaWYgKHVzZU1ldGFsbmVzc01hcCkge1xcbiB2ZWM0IG1ldGFsbmVzc1RleGVsID0gdGV4dHVyZTJEKG1ldGFsbmVzc01hcCwgdl9UZXhjb29yZCk7XFxuIG0gPSBjbGFtcChtZXRhbG5lc3NUZXhlbC5yICsgKG0gKiAyLjAgLSAxLjApLCAwLjAsIDEuMCk7XFxuIH1cXG4gdmVjNCB0ZXhlbCA9IHRleHR1cmUyRChkaWZmdXNlTWFwLCB2X1RleGNvb3JkKTtcXG4gaWYgKGxpbmVhcikge1xcbiB0ZXhlbCA9IHNSR0JUb0xpbmVhcih0ZXhlbCk7XFxuIH1cXG4gaWYgKGFscGhhQ3V0b2ZmID4gMC4wKSB7XFxuIGZsb2F0IGEgPSB0ZXhlbC5hICogYWxwaGE7XFxuIGlmIChhIDwgYWxwaGFDdXRvZmYpIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiB9XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSB0ZXhlbC5yZ2IgKiBjb2xvcjtcXG4gZ2xfRnJhZ0NvbG9yLmEgPSBtICsgMC4wMDU7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuZGVmZXJyZWQuZ2J1ZmZlcjMuZnJhZ21lbnRcXG51bmlmb3JtIGJvb2wgZmlyc3RSZW5kZXI7XFxudmFyeWluZyB2ZWM0IHZfVmlld1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCB2X1ByZXZWaWV3UG9zaXRpb247XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzIgYSA9IHZfVmlld1Bvc2l0aW9uLnh5IC8gdl9WaWV3UG9zaXRpb24udztcXG4gdmVjMiBiID0gdl9QcmV2Vmlld1Bvc2l0aW9uLnh5IC8gdl9QcmV2Vmlld1Bvc2l0aW9uLnc7XFxuIGlmIChmaXJzdFJlbmRlcikge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuIH1cXG4gZWxzZSB7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoKGEgLSBiKSAqIDAuNSArIDAuNSwgMC4wLCAxLjApO1xcbiB9XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuZGVmZXJyZWQuZ2J1ZmZlci5kZWJ1Z1xcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmU0O1xcbnVuaWZvcm0gaW50IGRlYnVnOiAwO1xcbnZvaWQgbWFpbiAoKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiBpZiAoZGVidWcgPT0gMCkge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KE4sIDEuMCk7XFxuIH1cXG4gZWxzZSBpZiAoZGVidWcgPT0gMSkge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMoeiksIDEuMCk7XFxuIH1cXG4gZWxzZSBpZiAoZGVidWcgPT0gMikge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbiB9XFxuIGVsc2UgaWYgKGRlYnVnID09IDMpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGdsb3NzaW5lc3MpLCAxLjApO1xcbiB9XFxuIGVsc2UgaWYgKGRlYnVnID09IDQpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKG1ldGFsbmVzcyksIDEuMCk7XFxuIH1cXG4gZWxzZSBpZiAoZGVidWcgPT0gNSkge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGFsYmVkbywgMS4wKTtcXG4gfVxcbiBlbHNlIHtcXG4gdmVjNCBjb2xvciA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTQsIHV2KTtcXG4gY29sb3IucmcgLT0gMC41O1xcbiBjb2xvci5yZyAqPSAyLjA7XFxuIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbiB9XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMTtcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTI7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUzO1xcbnVuaWZvcm0gdmVjMiB3aW5kb3dTaXplOiBXSU5ET1dfU0laRTtcXG51bmlmb3JtIHZlYzQgdmlld3BvcnQ6IFZJRVdQT1JUO1xcbnVuaWZvcm0gbWF0NCB2aWV3UHJvamVjdGlvbkludjtcXG4jaWZkZWYgREVQVEhfRU5DT0RFRFxcbkBpbXBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbiNlbmRpZlxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHkgLyB3aW5kb3dTaXplO1xcbiB2ZWMyIHV2MiA9IChnbF9GcmFnQ29vcmQueHkgLSB2aWV3cG9ydC54eSkgLyB2aWV3cG9ydC56dztcXG4gdmVjNCB0ZXhlbDEgPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUxLCB1dik7XFxuIHZlYzQgdGV4ZWwzID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMywgdXYpO1xcbiBpZiAoZG90KHRleGVsMS5yZ2IsIHZlYzMoMS4wKSkgPT0gMC4wKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4gZmxvYXQgZ2xvc3NpbmVzcyA9IHRleGVsMS5hO1xcbiBmbG9hdCBtZXRhbG5lc3MgPSB0ZXhlbDMuYTtcXG4gdmVjMyBOID0gdGV4ZWwxLnJnYiAqIDIuMCAtIDEuMDtcXG4gZmxvYXQgeiA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTIsIHV2KS5yICogMi4wIC0gMS4wO1xcbiB2ZWMyIHh5ID0gdXYyICogMi4wIC0gMS4wO1xcbiB2ZWM0IHByb2plY3RlZFBvcyA9IHZlYzQoeHksIHosIDEuMCk7XFxuIHZlYzQgcDQgPSB2aWV3UHJvamVjdGlvbkludiAqIHByb2plY3RlZFBvcztcXG4gdmVjMyBwb3NpdGlvbiA9IHA0Lnh5eiAvIHA0Lnc7XFxuIHZlYzMgYWxiZWRvID0gdGV4ZWwzLnJnYjtcXG4gdmVjMyBkaWZmdXNlQ29sb3IgPSBhbGJlZG8gKiAoMS4wIC0gbWV0YWxuZXNzKTtcXG4gdmVjMyBzcGVjdWxhckNvbG9yID0gbWl4KHZlYzMoMC4wNCksIGFsYmVkbywgbWV0YWxuZXNzKTtcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxuZmxvYXQgRF9QaG9uZyhpbiBmbG9hdCBnLCBpbiBmbG9hdCBuZGgpIHtcXG4gZmxvYXQgYSA9IHBvdyg4MTkyLjAsIGcpO1xcbiByZXR1cm4gKGEgKyAyLjApIC8gOC4wICogcG93KG5kaCwgYSk7XFxufVxcbmZsb2F0IERfR0dYKGluIGZsb2F0IGcsIGluIGZsb2F0IG5kaCkge1xcbiBmbG9hdCByID0gMS4wIC0gZztcXG4gZmxvYXQgYSA9IHIgKiByO1xcbiBmbG9hdCB0bXAgPSBuZGggKiBuZGggKiAoYSAtIDEuMCkgKyAxLjA7XFxuIHJldHVybiBhIC8gKDMuMTQxNTkyNiAqIHRtcCAqIHRtcCk7XFxufVxcbnZlYzMgRl9TY2hsaWNrKGluIGZsb2F0IG5kdiwgdmVjMyBzcGVjKSB7XFxuIHJldHVybiBzcGVjICsgKDEuMCAtIHNwZWMpICogcG93KDEuMCAtIG5kdiwgNS4wKTtcXG59XFxudmVjMyBsaWdodEVxdWF0aW9uKFxcbiBpbiB2ZWMzIGxpZ2h0Q29sb3IsIGluIHZlYzMgZGlmZnVzZUNvbG9yLCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsXFxuIGluIGZsb2F0IG5kbCwgaW4gZmxvYXQgbmRoLCBpbiBmbG9hdCBuZHYsIGluIGZsb2F0IGdcXG4pXFxue1xcbiByZXR1cm4gbmRsICogbGlnaHRDb2xvclxcbiAqIChkaWZmdXNlQ29sb3IgKyBEX1Bob25nKGcsIG5kaCkgKiBGX1NjaGxpY2sobmR2LCBzcGVjdWxhckNvbG9yKSk7XFxufVxcbkBlbmRcIjtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgUGFzcyBmcm9tICcuLi9jb21wb3NpdG9yL1Bhc3MnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgbWF0NCBmcm9tICcuLi9nbG1hdHJpeC9tYXQ0JztcclxuXHJcbmltcG9ydCBnYnVmZmVyRXNzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL2didWZmZXIuZ2xzbC5qcyc7XHJcbmltcG9ydCBjaHVua0Vzc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9jaHVuay5nbHNsLmpzJztcclxuXHJcblNoYWRlci5pbXBvcnQoZ2J1ZmZlckVzc2wpO1xyXG5TaGFkZXIuaW1wb3J0KGNodW5rRXNzbCk7XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVGaWxsQ2FudmFzKGNvbG9yKSB7XHJcbiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBjYW52YXMud2lkdGggPSBjYW52YXMuaGVpZ2h0ID0gMTtcclxuICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvciB8fCAnIzAwMCc7XHJcbiAgICBjdHguZmlsbFJlY3QoMCwgMCwgMSwgMSk7XHJcblxyXG4gICAgcmV0dXJuIGNhbnZhcztcclxufVxyXG5cclxuLy8gVE9ETyBzcGVjdWxhckNvbG9yXHJcbi8vIFRPRE8gUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRcclxuZnVuY3Rpb24gZ2V0R2V0VW5pZm9ybUhvb2sxKGRlZmF1bHROb3JtYWxNYXAsIGRlZmF1bHRSb3VnaG5lc3NNYXAsIGRlZmF1bHREaWZmdXNlTWFwKSB7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBnQnVmZmVyTWF0LCBzeW1ib2wpIHtcclxuICAgICAgICB2YXIgc3RhbmRhcmRNYXRlcmlhbCA9IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgaWYgKHN5bWJvbCA9PT0gJ2RvdWJsZVNpZGVkJykge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0RPVUJMRV9TSURFRCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd1dlJlcGVhdCcgfHwgc3ltYm9sID09PSAndXZPZmZzZXQnIHx8IHN5bWJvbCA9PT0gJ2FscGhhJykge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5nZXQoc3ltYm9sKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAnbm9ybWFsTWFwJykge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5nZXQoc3ltYm9sKSB8fCBkZWZhdWx0Tm9ybWFsTWFwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdkaWZmdXNlTWFwJykge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5nZXQoc3ltYm9sKSB8fCBkZWZhdWx0RGlmZnVzZU1hcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAnYWxwaGFDdXRvZmYnKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxyXG4gICAgICAgICAgICBpZiAoc3RhbmRhcmRNYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFscGhhQ3V0b2ZmID0gc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ2FscGhhQ3V0b2ZmJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWxwaGFDdXRvZmYgfHwgMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciB1c2VSb3VnaG5lc3NXb3JrZmxvdyA9IHN0YW5kYXJkTWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsICdVU0VfUk9VR0hORVNTJyk7XHJcbiAgICAgICAgICAgIHZhciByb3VnaEdsb3NzTWFwID0gdXNlUm91Z2huZXNzV29ya2Zsb3cgPyBzdGFuZGFyZE1hdGVyaWFsLmdldCgncm91Z2huZXNzTWFwJykgOiBzdGFuZGFyZE1hdGVyaWFsLmdldCgnZ2xvc3NpbmVzc01hcCcpO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnZ2xvc3NpbmVzcyc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZVJvdWdobmVzc1dvcmtmbG93ID8gKDEuMCAtIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdyb3VnaG5lc3MnKSkgOiBzdGFuZGFyZE1hdGVyaWFsLmdldCgnZ2xvc3NpbmVzcycpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncm91Z2hHbG9zc01hcCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvdWdoR2xvc3NNYXA7XHJcbiAgICAgICAgICAgICAgICBjYXNlICd1c2VSb3VnaEdsb3NzTWFwJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFyb3VnaEdsb3NzTWFwO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAndXNlUm91Z2huZXNzJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNlUm91Z2huZXNzV29ya2Zsb3c7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdyb3VnaEdsb3NzQ2hhbm5lbCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZVJvdWdobmVzc1dvcmtmbG93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc3RhbmRhcmRNYXRlcmlhbC5nZXREZWZpbmUoJ2ZyYWdtZW50JywgJ1JPVUdITkVTU19DSEFOTkVMJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGFuZGFyZE1hdGVyaWFsLmdldERlZmluZSgnZnJhZ21lbnQnLCAnR0xPU1NJTkVTU19DSEFOTkVMJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRHZXRVbmlmb3JtSG9vazIoZGVmYXVsdERpZmZ1c2VNYXAsIGRlZmF1bHRNZXRhbG5lc3NNYXApIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgZ0J1ZmZlck1hdCwgc3ltYm9sKSB7XHJcbiAgICAgICAgdmFyIHN0YW5kYXJkTWF0ZXJpYWwgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgICAgIHN3aXRjaCAoc3ltYm9sKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbG9yJzpcclxuICAgICAgICAgICAgY2FzZSAndXZSZXBlYXQnOlxyXG4gICAgICAgICAgICBjYXNlICd1dk9mZnNldCc6XHJcbiAgICAgICAgICAgIGNhc2UgJ2FscGhhJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1hdGVyaWFsLmdldChzeW1ib2wpO1xyXG4gICAgICAgICAgICBjYXNlICdtZXRhbG5lc3MnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdtZXRhbG5lc3MnKSB8fCAwO1xyXG4gICAgICAgICAgICBjYXNlICdkaWZmdXNlTWFwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1hdGVyaWFsLmdldChzeW1ib2wpIHx8IGRlZmF1bHREaWZmdXNlTWFwO1xyXG4gICAgICAgICAgICBjYXNlICdtZXRhbG5lc3NNYXAnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KHN5bWJvbCkgfHwgZGVmYXVsdE1ldGFsbmVzc01hcDtcclxuICAgICAgICAgICAgY2FzZSAndXNlTWV0YWxuZXNzTWFwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAhIXN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdtZXRhbG5lc3NNYXAnKTtcclxuICAgICAgICAgICAgY2FzZSAnbGluZWFyJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1hdGVyaWFsLmlzRGVmaW5lZCgnU1JHQl9ERUNPREUnKTtcclxuICAgICAgICAgICAgY2FzZSAnYWxwaGFDdXRvZmYnOlxyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBESUZGVVNFTUFQX0FMUEhBX0FMUEhBXHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhbmRhcmRNYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhbHBoYUN1dG9mZiA9IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdhbHBoYUN1dG9mZicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhbHBoYUN1dG9mZiB8fCAwLjA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMC4wO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHQnVmZmVyIGlzIHByb3ZpZGVkIGZvciBkZWZlcnJlZCByZW5kZXJpbmcgYW5kIFNTQU8sIFNTUiBwYXNzLlxyXG4gKiBJdCB3aWxsIGRvIHRocmVlIHBhc3NlcyByZW5kZXJpbmcgdG8gZm91ciB0YXJnZXQgdGV4dHVyZXMuIFNlZVxyXG4gKiArIHtAbGluayBjbGF5LmRlZmVycmVkLkdCdWZmZXIjZ2V0VGFyZ2V0VGV4dHVyZTF9XHJcbiAqICsge0BsaW5rIGNsYXkuZGVmZXJyZWQuR0J1ZmZlciNnZXRUYXJnZXRUZXh0dXJlMn1cclxuICogKyB7QGxpbmsgY2xheS5kZWZlcnJlZC5HQnVmZmVyI2dldFRhcmdldFRleHR1cmUzfVxyXG4gKiArIHtAbGluayBjbGF5LmRlZmVycmVkLkdCdWZmZXIjZ2V0VGFyZ2V0VGV4dHVyZTR9XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5kZWZlcnJlZC5HQnVmZmVyXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgR0J1ZmZlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgY29tbW9uVGV4dHVyZU9wdHMgPSB7XHJcbiAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgd3JhcFM6IFRleHR1cmUuQ0xBTVBfVE9fRURHRSxcclxuICAgICAgICB3cmFwVDogVGV4dHVyZS5DTEFNUF9UT19FREdFLFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmRlZmVycmVkLkdCdWZmZXIjICovIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIGdidWZmZXIgdGV4dHVyZSAxLlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVuYWJsZVRhcmdldFRleHR1cmUxOiB0cnVlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgZ2J1ZmZlciB0ZXh0dXJlIDIuXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW5hYmxlVGFyZ2V0VGV4dHVyZTI6IHRydWUsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBnYnVmZmVyIHRleHR1cmUgMy5cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbmFibGVUYXJnZXRUZXh0dXJlMzogdHJ1ZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIGdidWZmZXIgdGV4dHVyZSA0LlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVuYWJsZVRhcmdldFRleHR1cmU0OiBmYWxzZSxcclxuXHJcbiAgICAgICAgcmVuZGVyVHJhbnNwYXJlbnQ6IGZhbHNlLFxyXG5cclxuICAgICAgICBfZ0J1ZmZlclJlbmRlckxpc3Q6IFtdLFxyXG4gICAgICAgIC8vIC0gUjogbm9ybWFsLnhcclxuICAgICAgICAvLyAtIEc6IG5vcm1hbC55XHJcbiAgICAgICAgLy8gLSBCOiBub3JtYWwuelxyXG4gICAgICAgIC8vIC0gQTogZ2xvc3NpbmVzc1xyXG4gICAgICAgIF9nQnVmZmVyVGV4MTogbmV3IFRleHR1cmUyRChPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkhBTEZfRkxPQVRcclxuICAgICAgICB9LCBjb21tb25UZXh0dXJlT3B0cykpLFxyXG5cclxuICAgICAgICAvLyAtIFI6IGRlcHRoXHJcbiAgICAgICAgX2dCdWZmZXJUZXgyOiBuZXcgVGV4dHVyZTJEKE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICAvLyBmb3JtYXQ6IFRleHR1cmUuREVQVEhfQ09NUE9ORU5ULFxyXG4gICAgICAgICAgICAvLyB0eXBlOiBUZXh0dXJlLlVOU0lHTkVEX0lOVFxyXG5cclxuICAgICAgICAgICAgZm9ybWF0OiBUZXh0dXJlLkRFUFRIX1NURU5DSUwsXHJcbiAgICAgICAgICAgIHR5cGU6IFRleHR1cmUuVU5TSUdORURfSU5UXzI0XzhfV0VCR0xcclxuICAgICAgICB9LCBjb21tb25UZXh0dXJlT3B0cykpLFxyXG5cclxuICAgICAgICAvLyAtIFI6IGFsYmVkby5yXHJcbiAgICAgICAgLy8gLSBHOiBhbGJlZG8uZ1xyXG4gICAgICAgIC8vIC0gQjogYWxiZWRvLmJcclxuICAgICAgICAvLyAtIEE6IG1ldGFsbmVzc1xyXG4gICAgICAgIF9nQnVmZmVyVGV4MzogbmV3IFRleHR1cmUyRChjb21tb25UZXh0dXJlT3B0cyksXHJcblxyXG4gICAgICAgIF9nQnVmZmVyVGV4NDogbmV3IFRleHR1cmUyRChPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgLy8gRkxPQVQgVGV4dHVyZSBoYXMgYnVnIG9uIGlPUy4gaXMgSEFMRl9GTE9BVCBlbm91Z2g/XHJcbiAgICAgICAgICAgIHR5cGU6IFRleHR1cmUuSEFMRl9GTE9BVFxyXG4gICAgICAgIH0sIGNvbW1vblRleHR1cmVPcHRzKSksXHJcblxyXG4gICAgICAgIF9kZWZhdWx0Tm9ybWFsTWFwOiBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgaW1hZ2U6IGNyZWF0ZUZpbGxDYW52YXMoJyMwMDAnKVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIF9kZWZhdWx0Um91Z2huZXNzTWFwOiBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgaW1hZ2U6IGNyZWF0ZUZpbGxDYW52YXMoJyNmZmYnKVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIF9kZWZhdWx0TWV0YWxuZXNzTWFwOiBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgaW1hZ2U6IGNyZWF0ZUZpbGxDYW52YXMoJyNmZmYnKVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIF9kZWZhdWx0RGlmZnVzZU1hcDogbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjZmZmJylcclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgX2ZyYW1lQnVmZmVyOiBuZXcgRnJhbWVCdWZmZXIoKSxcclxuXHJcbiAgICAgICAgX2dCdWZmZXJNYXRlcmlhbDE6IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlci52ZXJ0ZXgnKSxcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlcjEuZnJhZ21lbnQnKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB2ZXJ0ZXhEZWZpbmVzOiB7XHJcbiAgICAgICAgICAgICAgICBGSVJTVF9QQVNTOiBudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZyYWdtZW50RGVmaW5lczoge1xyXG4gICAgICAgICAgICAgICAgRklSU1RfUEFTUzogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgX2dCdWZmZXJNYXRlcmlhbDI6IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlci52ZXJ0ZXgnKSxcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlcjIuZnJhZ21lbnQnKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB2ZXJ0ZXhEZWZpbmVzOiB7XHJcbiAgICAgICAgICAgICAgICBTRUNPTkRfUEFTUzogbnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmcmFnbWVudERlZmluZXM6IHtcclxuICAgICAgICAgICAgICAgIFNFQ09ORF9QQVNTOiBudWxsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBfZ0J1ZmZlck1hdGVyaWFsMzogbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgc2hhZGVyOiBuZXcgU2hhZGVyKFxyXG4gICAgICAgICAgICAgICAgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5nYnVmZmVyLnZlcnRleCcpLFxyXG4gICAgICAgICAgICAgICAgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5nYnVmZmVyMy5mcmFnbWVudCcpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHZlcnRleERlZmluZXM6IHtcclxuICAgICAgICAgICAgICAgIFRISVJEX1BBU1M6IG51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZnJhZ21lbnREZWZpbmVzOiB7XHJcbiAgICAgICAgICAgICAgICBUSElSRF9QQVNTOiBudWxsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgX2RlYnVnUGFzczogbmV3IFBhc3Moe1xyXG4gICAgICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5nYnVmZmVyLmRlYnVnJylcclxuICAgICAgICB9KVxyXG4gICAgfTtcclxufSwgLyoqIEBsZW5kcyBjbGF5LmRlZmVycmVkLkdCdWZmZXIjICove1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IEcgQnVmZmVyIHNpemUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcclxuICAgICAqL1xyXG4gICAgcmVzaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9nQnVmZmVyVGV4MS53aWR0aCA9PT0gd2lkdGhcclxuICAgICAgICAgICAgJiYgdGhpcy5fZ0J1ZmZlclRleDEuaGVpZ2h0ID09PSBoZWlnaHRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4MS53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXgxLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDIud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4Mi5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXgzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4NC53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXg0LmhlaWdodCA9IGhlaWdodDtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVE9ETyBpcyBkcHIgbmVlZGVkP1xyXG4gICAgc2V0Vmlld3BvcnQ6IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkcHIpIHtcclxuICAgICAgICB2YXIgdmlld3BvcnQ7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICB2aWV3cG9ydCA9IHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2aWV3cG9ydCA9IHtcclxuICAgICAgICAgICAgICAgIHg6IHgsIHk6IHksXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgZGV2aWNlUGl4ZWxSYXRpbzogZHByIHx8IDFcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudmlld3BvcnQgPSB2aWV3cG9ydDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0Vmlld3BvcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5fZnJhbWVCdWZmZXIudmlld3BvcnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lQnVmZmVyLnZpZXdwb3J0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHg6IDAsIHk6IDAsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5fZ0J1ZmZlclRleDEud2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMuX2dCdWZmZXJUZXgxLmhlaWdodCxcclxuICAgICAgICAgICAgICAgIGRldmljZVBpeGVsUmF0aW86IDFcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIEdCdWZmZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5DYW1lcmF9IGNhbWVyYVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIG9wdHMpIHtcclxuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIHZhciBmcmFtZUJ1ZmZlciA9IHRoaXMuX2ZyYW1lQnVmZmVyO1xyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IGZyYW1lQnVmZmVyLnZpZXdwb3J0O1xyXG5cclxuICAgICAgICB2YXIgcmVuZGVyTGlzdCA9IHNjZW5lLnVwZGF0ZVJlbmRlckxpc3QoY2FtZXJhLCB0cnVlKTtcclxuXHJcbiAgICAgICAgdmFyIG9wYXF1ZUxpc3QgPSByZW5kZXJMaXN0Lm9wYXF1ZTtcclxuICAgICAgICB2YXIgdHJhbnNwYXJlbnRMaXN0ID0gcmVuZGVyTGlzdC50cmFuc3BhcmVudDtcclxuXHJcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XHJcbiAgICAgICAgdmFyIGdCdWZmZXJSZW5kZXJMaXN0ID0gdGhpcy5fZ0J1ZmZlclJlbmRlckxpc3Q7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcGFxdWVMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghb3BhcXVlTGlzdFtpXS5pZ25vcmVHQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICBnQnVmZmVyUmVuZGVyTGlzdFtvZmZzZXQrK10gPSBvcGFxdWVMaXN0W2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnJlbmRlclRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhbnNwYXJlbnRMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRyYW5zcGFyZW50TGlzdFtpXS5pZ25vcmVHQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ0J1ZmZlclJlbmRlckxpc3Rbb2Zmc2V0KytdID0gdHJhbnNwYXJlbnRMaXN0W2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdCdWZmZXJSZW5kZXJMaXN0Lmxlbmd0aCA9IG9mZnNldDtcclxuXHJcbiAgICAgICAgZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTtcclxuICAgICAgICBnbC5kZXB0aE1hc2sodHJ1ZSk7XHJcbiAgICAgICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xyXG4gICAgICAgIGdsLmRpc2FibGUoZ2wuQkxFTkQpO1xyXG5cclxuICAgICAgICB2YXIgZW5hYmxlVGFyZ2V0VGV4dHVyZTEgPSB0aGlzLmVuYWJsZVRhcmdldFRleHR1cmUxO1xyXG4gICAgICAgIHZhciBlbmFibGVUYXJnZXRUZXh0dXJlMiA9IHRoaXMuZW5hYmxlVGFyZ2V0VGV4dHVyZTI7XHJcbiAgICAgICAgdmFyIGVuYWJsZVRhcmdldFRleHR1cmUzID0gdGhpcy5lbmFibGVUYXJnZXRUZXh0dXJlMztcclxuICAgICAgICB2YXIgZW5hYmxlVGFyZ2V0VGV4dHVyZTQgPSB0aGlzLmVuYWJsZVRhcmdldFRleHR1cmU0O1xyXG4gICAgICAgIGlmICghZW5hYmxlVGFyZ2V0VGV4dHVyZTEgJiYgIWVuYWJsZVRhcmdldFRleHR1cmUzICYmICFlbmFibGVUYXJnZXRUZXh0dXJlNCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NhblxcJ3QgZGlzYWJsZSB0YXJnZXRUZXh0dXJlMSwgdGFyZ2V0VGV4dHVyZTMsIHRhcmdldFRleHR1cmU0IGJvdGgnKTtcclxuICAgICAgICAgICAgZW5hYmxlVGFyZ2V0VGV4dHVyZTEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVuYWJsZVRhcmdldFRleHR1cmUyKSB7XHJcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChvcHRzLnRhcmdldFRleHR1cmUyIHx8IHRoaXMuX2dCdWZmZXJUZXgyLCByZW5kZXJlci5nbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gY2xlYXJWaWV3cG9ydCgpIHtcclxuICAgICAgICAgICAgaWYgKHZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICAgICAgICAgIC8vIHVzZSBzY2lzc29yIHRvIG1ha2Ugc3VyZSBvbmx5IGNsZWFyIHRoZSB2aWV3cG9ydFxyXG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XHJcbiAgICAgICAgICAgICAgICBnbC5zY2lzc29yKHZpZXdwb3J0LnggKiBkcHIsIHZpZXdwb3J0LnkgKiBkcHIsIHZpZXdwb3J0LndpZHRoICogZHByLCB2aWV3cG9ydC5oZWlnaHQgKiBkcHIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJfQklUKTtcclxuICAgICAgICAgICAgaWYgKHZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlKGdsLlNDSVNTT1JfVEVTVCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGlzTWF0ZXJpYWxDaGFuZ2VkKHJlbmRlcmFibGUsIHByZXZSZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLm1hdGVyaWFsICE9PSBwcmV2UmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFBFTkRJTkcsIHNjZW5lLmJvdW5kaW5nQm94TGFzdEZyYW1lIG5lZWRzIGJlIHVwZGF0ZWQgaWYgaGF2ZSBzaGFkb3dcclxuICAgICAgICByZW5kZXJlci5iaW5kU2NlbmVSZW5kZXJpbmcoc2NlbmUpO1xyXG4gICAgICAgIGlmIChlbmFibGVUYXJnZXRUZXh0dXJlMSkge1xyXG4gICAgICAgICAgICAvLyBQYXNzIDFcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYXR0YWNoKG9wdHMudGFyZ2V0VGV4dHVyZTEgfHwgdGhpcy5fZ0J1ZmZlclRleDEpO1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIGNsZWFyVmlld3BvcnQoKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBnQnVmZmVyTWF0ZXJpYWwxID0gdGhpcy5fZ0J1ZmZlck1hdGVyaWFsMTtcclxuICAgICAgICAgICAgdmFyIHBhc3NDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnQnVmZmVyTWF0ZXJpYWwxO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGdldFVuaWZvcm06IGdldEdldFVuaWZvcm1Ib29rMSh0aGlzLl9kZWZhdWx0Tm9ybWFsTWFwLCB0aGlzLl9kZWZhdWx0Um91Z2huZXNzTWFwLCB0aGlzLl9kZWZhdWx0RGlmZnVzZU1hcCksXHJcbiAgICAgICAgICAgICAgICBpc01hdGVyaWFsQ2hhbmdlZDogaXNNYXRlcmlhbENoYW5nZWQsXHJcbiAgICAgICAgICAgICAgICBzb3J0Q29tcGFyZTogcmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy8gRklYTUUgVXNlIE1SVCBpZiBwb3NzaWJsZVxyXG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKGdCdWZmZXJSZW5kZXJMaXN0LCBjYW1lcmEsIHBhc3NDb25maWcpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuYWJsZVRhcmdldFRleHR1cmUzKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBQYXNzIDJcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYXR0YWNoKG9wdHMudGFyZ2V0VGV4dHVyZTMgfHwgdGhpcy5fZ0J1ZmZlclRleDMpO1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIGNsZWFyVmlld3BvcnQoKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBnQnVmZmVyTWF0ZXJpYWwyID0gdGhpcy5fZ0J1ZmZlck1hdGVyaWFsMjtcclxuICAgICAgICAgICAgdmFyIHBhc3NDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnQnVmZmVyTWF0ZXJpYWwyO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGdldFVuaWZvcm06IGdldEdldFVuaWZvcm1Ib29rMih0aGlzLl9kZWZhdWx0RGlmZnVzZU1hcCwgdGhpcy5fZGVmYXVsdE1ldGFsbmVzc01hcCksXHJcbiAgICAgICAgICAgICAgICBpc01hdGVyaWFsQ2hhbmdlZDogaXNNYXRlcmlhbENoYW5nZWQsXHJcbiAgICAgICAgICAgICAgICBzb3J0Q29tcGFyZTogcmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhnQnVmZmVyUmVuZGVyTGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbmFibGVUYXJnZXRUZXh0dXJlNCkge1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYXR0YWNoKG9wdHMudGFyZ2V0VGV4dHVyZTQgfHwgdGhpcy5fZ0J1ZmZlclRleDQpO1xyXG5cclxuICAgICAgICAgICAgY2xlYXJWaWV3cG9ydCgpO1xyXG5cclxuICAgICAgICAgICAgLy8gUmVtb3ZlIGppdHRlcmluZyBpbiB0ZW1wb3JhbCBhYS5cclxuICAgICAgICAgICAgLy8gUEVORElORy4gQmV0dGVyIHNvbHV0aW9uP1xyXG4gICAgICAgICAgICBjYW1lcmEudXBkYXRlKCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZ0J1ZmZlck1hdGVyaWFsMyA9IHRoaXMuX2dCdWZmZXJNYXRlcmlhbDM7XHJcbiAgICAgICAgICAgIHZhciBjYW1lcmFWaWV3UHJvaiA9IG1hdDQuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIG1hdDQubXVsdGlwbHkoY2FtZXJhVmlld1Byb2osIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmFycmF5LCBjYW1lcmEudmlld01hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ0J1ZmZlck1hdGVyaWFsMztcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCByZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzU2tpbm5lZE1lc2ggPSByZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2goKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTa2lubmVkTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2tlbGV0b24gPSByZW5kZXJhYmxlLnNrZWxldG9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgam9pbnRzID0gcmVuZGVyYWJsZS5qb2ludHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqb2ludHMubGVuZ3RoID4gcmVuZGVyZXIuZ2V0TWF4Sm9pbnROdW1iZXIoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNraW5NYXRyaWNlc1RleHR1cmUgPSBza2VsZXRvbi5nZXRTdWJTa2luTWF0cmljZXNUZXh0dXJlKHJlbmRlcmFibGUuX191aWRfXywgam9pbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZSA9IHJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzVGV4dHVyZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJldlNraW5NYXRyaWNlc1RleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZSA9IHJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzVGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkZMT0FULFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZU1pcG1hcDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsaXBZOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHMubGVuZ3RoICE9PSBza2luTWF0cmljZXNUZXh0dXJlLnBpeGVscy5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZTa2luTWF0cmljZXNUZXh0dXJlLnBpeGVscyA9IG5ldyBGbG9hdDMyQXJyYXkoc2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBza2luTWF0cmljZXNUZXh0dXJlLnBpeGVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHNbaV0gPSBza2luTWF0cmljZXNUZXh0dXJlLnBpeGVsc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS53aWR0aCA9IHNraW5NYXRyaWNlc1RleHR1cmUud2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS5oZWlnaHQgPSBza2luTWF0cmljZXNUZXh0dXJlLmhlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBza2luTWF0cmljZXNBcnJheSA9IHNrZWxldG9uLmdldFN1YlNraW5NYXRyaWNlcyhyZW5kZXJhYmxlLl9fdWlkX18sIGpvaW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzQXJyYXkgfHwgcmVuZGVyYWJsZS5fX3ByZXZTa2luTWF0cmljZXNBcnJheS5sZW5ndGggIT09IHNraW5NYXRyaWNlc0FycmF5Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHNraW5NYXRyaWNlc0FycmF5Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc0FycmF5LnNldChza2luTWF0cmljZXNBcnJheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyYWJsZS5fX3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uID0gcmVuZGVyYWJsZS5fX3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uIHx8IG1hdDQuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIHdvcmxkIHRyYW5zZm9ybSBvZiBza2lubmVkIG1lc2guXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdDQuY29weShyZW5kZXJhYmxlLl9fcHJldldvcmxkVmlld1Byb2plY3Rpb24sIGNhbWVyYVZpZXdQcm9qKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdDQubXVsdGlwbHkocmVuZGVyYWJsZS5fX3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uLCBjYW1lcmFWaWV3UHJvaiwgcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGdldFVuaWZvcm06IGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBnQnVmZmVyTWF0LCBzeW1ib2wpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sID09PSAncHJldldvcmxkVmlld1Byb2plY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLl9fcHJldldvcmxkVmlld1Byb2plY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3ByZXZTa2luTWF0cml4Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5fX3ByZXZTa2luTWF0cmljZXNBcnJheTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAncHJldlNraW5NYXRyaWNlc1RleHR1cmUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc1RleHR1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ2ZpcnN0UmVuZGVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXJlbmRlcmFibGUuX19wcmV2V29ybGRWaWV3UHJvamVjdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnQnVmZmVyTWF0LmdldChzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBpc01hdGVyaWFsQ2hhbmdlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyB1cGRhdGUgcHJldldvcmxkVmlld1Byb2plY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzb3J0Q29tcGFyZTogcmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmVcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoZ0J1ZmZlclJlbmRlckxpc3QsIGNhbWVyYSwgcGFzc0NvbmZpZyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXJlci5iaW5kU2NlbmVSZW5kZXJpbmcobnVsbCk7XHJcbiAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWJ1ZyBvdXRwdXQgb2YgZ0J1ZmZlci4gVXNlIGB0eXBlYCBwYXJhbWV0ZXIgdG8gY2hvb3MgdGhlIGRlYnVnIG91dHB1dCB0eXBlLCB3aGljaCBjYW4gYmU6XHJcbiAgICAgKlxyXG4gICAgICogKyAnbm9ybWFsJ1xyXG4gICAgICogKyAnZGVwdGgnXHJcbiAgICAgKiArICdwb3NpdGlvbidcclxuICAgICAqICsgJ2dsb3NzaW5lc3MnXHJcbiAgICAgKiArICdtZXRhbG5lc3MnXHJcbiAgICAgKiArICdhbGJlZG8nXHJcbiAgICAgKiArICd2ZWxvY2l0eSdcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZT0nbm9ybWFsJ11cclxuICAgICAqL1xyXG4gICAgcmVuZGVyRGVidWc6IGZ1bmN0aW9uIChyZW5kZXJlciwgY2FtZXJhLCB0eXBlLCB2aWV3cG9ydCkge1xyXG4gICAgICAgIHZhciBkZWJ1Z1R5cGVzID0ge1xyXG4gICAgICAgICAgICBub3JtYWw6IDAsXHJcbiAgICAgICAgICAgIGRlcHRoOiAxLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogMixcclxuICAgICAgICAgICAgZ2xvc3NpbmVzczogMyxcclxuICAgICAgICAgICAgbWV0YWxuZXNzOiA0LFxyXG4gICAgICAgICAgICBhbGJlZG86IDUsXHJcbiAgICAgICAgICAgIHZlbG9jaXR5OiA2XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoZGVidWdUeXBlc1t0eXBlXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5rb3duIHR5cGUgXCInICsgdHlwZSArICdcIicpO1xyXG4gICAgICAgICAgICAvLyBEZWZhdWx0IHVzZSBub3JtYWxcclxuICAgICAgICAgICAgdHlwZSA9ICdub3JtYWwnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyZXIuc2F2ZUNsZWFyKCk7XHJcbiAgICAgICAgcmVuZGVyZXIuc2F2ZVZpZXdwb3J0KCk7XHJcbiAgICAgICAgcmVuZGVyZXIuY2xlYXJCaXQgPSByZW5kZXJlci5nbC5ERVBUSF9CVUZGRVJfQklUO1xyXG5cclxuICAgICAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodmlld3BvcnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdmlld1Byb2plY3Rpb25JbnYgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIE1hdHJpeDQubXVsdGlwbHkodmlld1Byb2plY3Rpb25JbnYsIGNhbWVyYS53b3JsZFRyYW5zZm9ybSwgY2FtZXJhLmludlByb2plY3Rpb25NYXRyaXgpO1xyXG5cclxuICAgICAgICB2YXIgZGVidWdQYXNzID0gdGhpcy5fZGVidWdQYXNzO1xyXG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCd2aWV3cG9ydFNpemUnLCBbcmVuZGVyZXIuZ2V0V2lkdGgoKSwgcmVuZGVyZXIuZ2V0SGVpZ2h0KCldKTtcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUxJywgdGhpcy5fZ0J1ZmZlclRleDEpO1xyXG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTInLCB0aGlzLl9nQnVmZmVyVGV4Mik7XHJcbiAgICAgICAgZGVidWdQYXNzLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMycsIHRoaXMuX2dCdWZmZXJUZXgzKTtcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmU0JywgdGhpcy5fZ0J1ZmZlclRleDQpO1xyXG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCdkZWJ1ZycsIGRlYnVnVHlwZXNbdHlwZV0pO1xyXG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCd2aWV3UHJvamVjdGlvbkludicsIHZpZXdQcm9qZWN0aW9uSW52LmFycmF5KTtcclxuICAgICAgICBkZWJ1Z1Bhc3MucmVuZGVyKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgcmVuZGVyZXIucmVzdG9yZVZpZXdwb3J0KCk7XHJcbiAgICAgICAgcmVuZGVyZXIucmVzdG9yZUNsZWFyKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGZpcnN0IHRhcmdldCB0ZXh0dXJlLlxyXG4gICAgICogQ2hhbm5lbCBzdG9yYWdlOlxyXG4gICAgICogKyBSOiBub3JtYWwueCAqIDAuNSArIDAuNVxyXG4gICAgICogKyBHOiBub3JtYWwueSAqIDAuNSArIDAuNVxyXG4gICAgICogKyBCOiBub3JtYWwueiAqIDAuNSArIDAuNVxyXG4gICAgICogKyBBOiBnbG9zc2luZXNzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAqL1xyXG4gICAgZ2V0VGFyZ2V0VGV4dHVyZTE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ0J1ZmZlclRleDE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHNlY29uZCB0YXJnZXQgdGV4dHVyZS5cclxuICAgICAqIENoYW5uZWwgc3RvcmFnZTpcclxuICAgICAqICsgUjogZGVwdGhcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICovXHJcbiAgICBnZXRUYXJnZXRUZXh0dXJlMjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nQnVmZmVyVGV4MjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhpcmQgdGFyZ2V0IHRleHR1cmUuXHJcbiAgICAgKiBDaGFubmVsIHN0b3JhZ2U6XHJcbiAgICAgKiArIFI6IGFsYmVkby5yXHJcbiAgICAgKiArIEc6IGFsYmVkby5nXHJcbiAgICAgKiArIEI6IGFsYmVkby5iXHJcbiAgICAgKiArIEE6IG1ldGFsbmVzc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgKi9cclxuICAgIGdldFRhcmdldFRleHR1cmUzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dCdWZmZXJUZXgzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBmb3VydGggdGFyZ2V0IHRleHR1cmUuXHJcbiAgICAgKiBDaGFubmVsIHN0b3JhZ2U6XHJcbiAgICAgKiArIFI6IHZlbG9jaXR5LnJcclxuICAgICAqICsgRzogdmVsb2NpdHkuZ1xyXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgKi9cclxuICAgIGdldFRhcmdldFRleHR1cmU0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dCdWZmZXJUZXg0O1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4MS5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4Mi5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4My5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdE5vcm1hbE1hcC5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9kZWZhdWx0Um91Z2huZXNzTWFwLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRNZXRhbG5lc3NNYXAuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdERpZmZ1c2VNYXAuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgR0J1ZmZlcjsiLCJpbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5pbXBvcnQgdmVjMiBmcm9tICcuLi9nbG1hdHJpeC92ZWMyJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5nZW9tZXRyeS5Db25lXHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LnRvcFJhZGl1c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuYm90dG9tUmFkaXVzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5oZWlnaHRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmNhcFNlZ21lbnRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5oZWlnaHRTZWdtZW50c11cclxuICovXHJcbnZhciBDb25lID0gR2VvbWV0cnkuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5Db25lIyAqLyB7XHJcbiAgICBkeW5hbWljOiBmYWxzZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdG9wUmFkaXVzOiAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYm90dG9tUmFkaXVzOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaGVpZ2h0OiAyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY2FwU2VnbWVudHM6IDIwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaGVpZ2h0U2VnbWVudHM6IDFcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5Db25lLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGNvbmUgZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBbXTtcclxuICAgICAgICB2YXIgdGV4Y29vcmRzID0gW107XHJcbiAgICAgICAgdmFyIGZhY2VzID0gW107XHJcbiAgICAgICAgcG9zaXRpb25zLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGV4Y29vcmRzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgZmFjZXMubGVuZ3RoID0gMDtcclxuICAgICAgICAvLyBUb3AgY2FwXHJcbiAgICAgICAgdmFyIGNhcFNlZ1JhZGlhbCA9IE1hdGguUEkgKiAyIC8gdGhpcy5jYXBTZWdtZW50cztcclxuXHJcbiAgICAgICAgdmFyIHRvcENhcCA9IFtdO1xyXG4gICAgICAgIHZhciBib3R0b21DYXAgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIHIxID0gdGhpcy50b3BSYWRpdXM7XHJcbiAgICAgICAgdmFyIHIyID0gdGhpcy5ib3R0b21SYWRpdXM7XHJcbiAgICAgICAgdmFyIHkgPSB0aGlzLmhlaWdodCAvIDI7XHJcblxyXG4gICAgICAgIHZhciBjMSA9IHZlYzMuZnJvbVZhbHVlcygwLCB5LCAwKTtcclxuICAgICAgICB2YXIgYzIgPSB2ZWMzLmZyb21WYWx1ZXMoMCwgLXksIDApO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jYXBTZWdtZW50czsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB0aGV0YSA9IGkgKiBjYXBTZWdSYWRpYWw7XHJcbiAgICAgICAgICAgIHZhciB4ID0gcjEgKiBNYXRoLnNpbih0aGV0YSk7XHJcbiAgICAgICAgICAgIHZhciB6ID0gcjEgKiBNYXRoLmNvcyh0aGV0YSk7XHJcbiAgICAgICAgICAgIHRvcENhcC5wdXNoKHZlYzMuZnJvbVZhbHVlcyh4LCB5LCB6KSk7XHJcblxyXG4gICAgICAgICAgICB4ID0gcjIgKiBNYXRoLnNpbih0aGV0YSk7XHJcbiAgICAgICAgICAgIHogPSByMiAqIE1hdGguY29zKHRoZXRhKTtcclxuICAgICAgICAgICAgYm90dG9tQ2FwLnB1c2godmVjMy5mcm9tVmFsdWVzKHgsIC15LCB6KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBCdWlsZCB0b3AgY2FwXHJcbiAgICAgICAgcG9zaXRpb25zLnB1c2goYzEpO1xyXG4gICAgICAgIC8vIEZJWE1FXHJcbiAgICAgICAgdGV4Y29vcmRzLnB1c2godmVjMi5mcm9tVmFsdWVzKDAsIDEpKTtcclxuICAgICAgICB2YXIgbiA9IHRoaXMuY2FwU2VnbWVudHM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcG9zaXRpb25zLnB1c2godG9wQ2FwW2ldKTtcclxuICAgICAgICAgICAgLy8gRklYTUVcclxuICAgICAgICAgICAgdGV4Y29vcmRzLnB1c2godmVjMi5mcm9tVmFsdWVzKGkgLyBuLCAwKSk7XHJcbiAgICAgICAgICAgIGZhY2VzLnB1c2goWzAsIGkrMSwgKGkrMSkgJSBuICsgMV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQnVpbGQgYm90dG9tIGNhcFxyXG4gICAgICAgIHZhciBvZmZzZXQgPSBwb3NpdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIHBvc2l0aW9ucy5wdXNoKGMyKTtcclxuICAgICAgICB0ZXhjb29yZHMucHVzaCh2ZWMyLmZyb21WYWx1ZXMoMCwgMSkpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKGJvdHRvbUNhcFtpXSk7XHJcbiAgICAgICAgICAgIC8vIEZJWE1FXHJcbiAgICAgICAgICAgIHRleGNvb3Jkcy5wdXNoKHZlYzIuZnJvbVZhbHVlcyhpIC8gbiwgMCkpO1xyXG4gICAgICAgICAgICBmYWNlcy5wdXNoKFtvZmZzZXQsIG9mZnNldCsoKGkrMSkgJSBuICsgMSksIG9mZnNldCtpKzFdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEJ1aWxkIHNpZGVcclxuICAgICAgICBvZmZzZXQgPSBwb3NpdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIHZhciBuMiA9IHRoaXMuaGVpZ2h0U2VnbWVudHM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuMisxOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB2ID0gaiAvIG4yO1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2godmVjMy5sZXJwKHZlYzMuY3JlYXRlKCksIHRvcENhcFtpXSwgYm90dG9tQ2FwW2ldLCB2KSk7XHJcbiAgICAgICAgICAgICAgICB0ZXhjb29yZHMucHVzaCh2ZWMyLmZyb21WYWx1ZXMoaSAvIG4sIHYpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG4yOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBpMSA9IGkgKiAobjIgKyAxKSArIGo7XHJcbiAgICAgICAgICAgICAgICB2YXIgaTIgPSAoKGkgKyAxKSAlIG4pICogKG4yICsgMSkgKyBqO1xyXG4gICAgICAgICAgICAgICAgdmFyIGkzID0gKChpICsgMSkgJSBuKSAqIChuMiArIDEpICsgaiArIDE7XHJcbiAgICAgICAgICAgICAgICB2YXIgaTQgPSBpICogKG4yICsgMSkgKyBqICsgMTtcclxuICAgICAgICAgICAgICAgIGZhY2VzLnB1c2goW29mZnNldCtpMiwgb2Zmc2V0K2kxLCBvZmZzZXQraTRdKTtcclxuICAgICAgICAgICAgICAgIGZhY2VzLnB1c2goW29mZnNldCtpNCwgb2Zmc2V0K2kzLCBvZmZzZXQraTJdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLmZyb21BcnJheShwb3NpdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy50ZXhjb29yZDAuZnJvbUFycmF5KHRleGNvb3Jkcyk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdEluZGljZXNGcm9tQXJyYXkoZmFjZXMpO1xyXG5cclxuICAgICAgICB0aGlzLmdlbmVyYXRlVmVydGV4Tm9ybWFscygpO1xyXG5cclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdmFyIHIgPSBNYXRoLm1heCh0aGlzLnRvcFJhZGl1cywgdGhpcy5ib3R0b21SYWRpdXMpO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldCgtciwgLXRoaXMuaGVpZ2h0LzIsIC1yKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1heC5zZXQociwgdGhpcy5oZWlnaHQvMiwgcik7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ29uZTtcclxuIiwiaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IENvbmVHZW9tZXRyeSBmcm9tICcuL0NvbmUnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lmdlb21ldHJ5LkN5bGluZGVyXHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LnJhZGl1c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5jYXBTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0U2VnbWVudHNdXHJcbiAqL1xyXG52YXIgQ3lsaW5kZXIgPSBHZW9tZXRyeS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5DeWxpbmRlciMgKi9cclxue1xyXG4gICAgZHluYW1pYzogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJhZGl1czogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodDogMixcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNhcFNlZ21lbnRzOiA1MCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodFNlZ21lbnRzOiAxXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ3lsaW5kZXIucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgY3lsaW5kZXIgZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBjb25lID0gbmV3IENvbmVHZW9tZXRyeSh7XHJcbiAgICAgICAgICAgIHRvcFJhZGl1czogdGhpcy5yYWRpdXMsXHJcbiAgICAgICAgICAgIGJvdHRvbVJhZGl1czogdGhpcy5yYWRpdXMsXHJcbiAgICAgICAgICAgIGNhcFNlZ21lbnRzOiB0aGlzLmNhcFNlZ21lbnRzLFxyXG4gICAgICAgICAgICBoZWlnaHRTZWdtZW50czogdGhpcy5oZWlnaHRTZWdtZW50cyxcclxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWUgPSBjb25lLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWU7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZSA9IGNvbmUuYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnRleGNvb3JkMC52YWx1ZSA9IGNvbmUuYXR0cmlidXRlcy50ZXhjb29yZDAudmFsdWU7XHJcbiAgICAgICAgdGhpcy5pbmRpY2VzID0gY29uZS5pbmRpY2VzO1xyXG5cclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gY29uZS5ib3VuZGluZ0JveDtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDeWxpbmRlcjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQubGlnaHRfdm9sdW1lLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbnZhcnlpbmcgdmVjMyB2X1Bvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbiB2X1Bvc2l0aW9uID0gcG9zaXRpb247XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuc3BvdF9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0RGlyZWN0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gZmxvYXQgdW1icmFBbmdsZUNvc2luZTtcXG51bmlmb3JtIGZsb2F0IHBlbnVtYnJhQW5nbGVDb3NpbmU7XFxudW5pZm9ybSBmbG9hdCBsaWdodFJhbmdlO1xcbnVuaWZvcm0gZmxvYXQgZmFsbG9mZkZhY3RvcjtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRTaGFkb3dNYXA7XFxudW5pZm9ybSBtYXQ0IGxpZ2h0TWF0cml4O1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRTaGFkb3dNYXBTaXplO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG52b2lkIG1haW4oKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gcG9zaXRpb247XFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gTCAvPSBkaXN0O1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgbGlnaHRSYW5nZSk7XFxuIGZsb2F0IGMgPSBkb3QoLW5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiksIEwpO1xcbiBmbG9hdCBmYWxsb2ZmID0gY2xhbXAoKGMgLSB1bWJyYUFuZ2xlQ29zaW5lKSAvIChwZW51bWJyYUFuZ2xlQ29zaW5lIC0gdW1icmFBbmdsZUNvc2luZSksIDAuMCwgMS4wKTtcXG4gZmFsbG9mZiA9IHBvdyhmYWxsb2ZmLCBmYWxsb2ZmRmFjdG9yKTtcXG4gdmVjMyBIID0gbm9ybWFsaXplKEwgKyBWKTtcXG4gZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9ICgxLjAgLSBmYWxsb2ZmKSAqIGF0dGVudWF0aW9uICogbGlnaHRFcXVhdGlvbihcXG4gbGlnaHRDb2xvciwgZGlmZnVzZUNvbG9yLCBzcGVjdWxhckNvbG9yLCBuZGwsIG5kaCwgbmR2LCBnbG9zc2luZXNzXFxuICk7XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYihcXG4gbGlnaHRTaGFkb3dNYXAsIGxpZ2h0TWF0cml4LCBwb3NpdGlvbiwgbGlnaHRTaGFkb3dNYXBTaXplXFxuICk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gc2hhZG93Q29udHJpYjtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcXG5cIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuZGlyZWN0aW9uYWxfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodERpcmVjdGlvbjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRTaGFkb3dNYXA7XFxudW5pZm9ybSBmbG9hdCBsaWdodFNoYWRvd01hcFNpemU7XFxudW5pZm9ybSBtYXQ0IGxpZ2h0TWF0cmljZXNbU0hBRE9XX0NBU0NBREVdO1xcbnVuaWZvcm0gZmxvYXQgc2hhZG93Q2FzY2FkZUNsaXBzTmVhcltTSEFET1dfQ0FTQ0FERV07XFxudW5pZm9ybSBmbG9hdCBzaGFkb3dDYXNjYWRlQ2xpcHNGYXJbU0hBRE9XX0NBU0NBREVdO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG52b2lkIG1haW4oKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMzIEwgPSAtbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uKTtcXG4gdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvc2l0aW9uIC0gcG9zaXRpb24pO1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kdiA9IGNsYW1wKGRvdChOLCBWKSwgMC4wLCAxLjApO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRFcXVhdGlvbihcXG4gbGlnaHRDb2xvciwgZGlmZnVzZUNvbG9yLCBzcGVjdWxhckNvbG9yLCBuZGwsIG5kaCwgbmR2LCBnbG9zc2luZXNzXFxuICk7XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuIGZvciAoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBTSEFET1dfQ0FTQ0FERTsgX2lkeF8rKykge3tcXG4gaWYgKFxcbiB6ID49IHNoYWRvd0Nhc2NhZGVDbGlwc05lYXJbX2lkeF9dICYmXFxuIHogPD0gc2hhZG93Q2FzY2FkZUNsaXBzRmFyW19pZHhfXVxcbiApIHtcXG4gc2hhZG93Q29udHJpYiA9IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiBsaWdodFNoYWRvd01hcCwgbGlnaHRNYXRyaWNlc1tfaWR4X10sIHBvc2l0aW9uLCBsaWdodFNoYWRvd01hcFNpemUsXFxuIHZlYzIoMS4wIC8gZmxvYXQoU0hBRE9XX0NBU0NBREUpLCAxLjApLFxcbiB2ZWMyKGZsb2F0KF9pZHhfKSAvIGZsb2F0KFNIQURPV19DQVNDQURFKSwgMC4wKVxcbiApO1xcbiB9XFxuIH19XFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gc2hhZG93Q29udHJpYjtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcXG5cIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuYW1iaWVudF9saWdodFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMTtcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTM7XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSB2ZWMyIHdpbmRvd1NpemU6IFdJTkRPV19TSVpFO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC8gd2luZG93U2l6ZTtcXG4gdmVjNCB0ZXhlbDEgPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUxLCB1dik7XFxuIGlmIChkb3QodGV4ZWwxLnJnYiwgdmVjMygxLjApKSA9PSAwLjApIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiB2ZWMzIGFsYmVkbyA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTMsIHV2KS5yZ2I7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBsaWdodENvbG9yICogYWxiZWRvO1xcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5hbWJpZW50X3NoX2xpZ2h0XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUxO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMztcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2VmZmljaWVudHNbOV07XFxudW5pZm9ybSB2ZWMyIHdpbmRvd1NpemU6IFdJTkRPV19TSVpFO1xcbnZlYzMgY2FsY0FtYmllbnRTSExpZ2h0KHZlYzMgTikge1xcbiByZXR1cm4gbGlnaHRDb2VmZmljaWVudHNbMF1cXG4gKyBsaWdodENvZWZmaWNpZW50c1sxXSAqIE4ueFxcbiArIGxpZ2h0Q29lZmZpY2llbnRzWzJdICogTi55XFxuICsgbGlnaHRDb2VmZmljaWVudHNbM10gKiBOLnpcXG4gKyBsaWdodENvZWZmaWNpZW50c1s0XSAqIE4ueCAqIE4uelxcbiArIGxpZ2h0Q29lZmZpY2llbnRzWzVdICogTi56ICogTi55XFxuICsgbGlnaHRDb2VmZmljaWVudHNbNl0gKiBOLnkgKiBOLnhcXG4gKyBsaWdodENvZWZmaWNpZW50c1s3XSAqICgzLjAgKiBOLnogKiBOLnogLSAxLjApXFxuICsgbGlnaHRDb2VmZmljaWVudHNbOF0gKiAoTi54ICogTi54IC0gTi55ICogTi55KTtcXG59XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHkgLyB3aW5kb3dTaXplO1xcbiB2ZWM0IHRleGVsMSA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTEsIHV2KTtcXG4gaWYgKGRvdCh0ZXhlbDEucmdiLCB2ZWMzKDEuMCkpID09IDAuMCkge1xcbiBkaXNjYXJkO1xcbiB9XFxuIHZlYzMgTiA9IHRleGVsMS5yZ2IgKiAyLjAgLSAxLjA7XFxuIHZlYzMgYWxiZWRvID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMywgdXYpLnJnYjtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGxpZ2h0Q29sb3IgKiBhbGJlZG8gKiBjYWxjQW1iaWVudFNITGlnaHQoTik7XFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmFtYmllbnRfY3ViZW1hcF9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSBzYW1wbGVyQ3ViZSBsaWdodEN1YmVtYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgYnJkZkxvb2t1cDtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiBAaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gdmVjMyBMID0gcmVmbGVjdCgtViwgTik7XFxuIGZsb2F0IG5kdiA9IGNsYW1wKGRvdChOLCBWKSwgMC4wLCAxLjApO1xcbiBmbG9hdCByb3VnaCA9IGNsYW1wKDEuMCAtIGdsb3NzaW5lc3MsIDAuMCwgMS4wKTtcXG4gZmxvYXQgYmlhcyA9IHJvdWdoICogNS4wO1xcbiB2ZWMyIGJyZGZQYXJhbSA9IHRleHR1cmUyRChicmRmTG9va3VwLCB2ZWMyKHJvdWdoLCBuZHYpKS54eTtcXG4gdmVjMyBlbnZXZWlnaHQgPSBzcGVjdWxhckNvbG9yICogYnJkZlBhcmFtLnggKyBicmRmUGFyYW0ueTtcXG4gdmVjMyBlbnZUZXhlbCA9IFJHQk1EZWNvZGUodGV4dHVyZUN1YmVMb2RFWFQobGlnaHRDdWJlbWFwLCBMLCBiaWFzKSwgOC4xMik7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBsaWdodENvbG9yICogZW52VGV4ZWwgKiBlbnZXZWlnaHQ7XFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLnBvaW50X2xpZ2h0XFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2hlYWRcXG5AaW1wb3J0IGNsYXkudXRpbC5jYWxjdWxhdGVfYXR0ZW51YXRpb25cXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfZXF1YXRpb25cXG51bmlmb3JtIHZlYzMgbGlnaHRQb3NpdGlvbjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIGZsb2F0IGxpZ2h0UmFuZ2U7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlckN1YmUgbGlnaHRTaGFkb3dNYXA7XFxudW5pZm9ybSBmbG9hdCBsaWdodFNoYWRvd01hcFNpemU7XFxuI2VuZGlmXFxudmFyeWluZyB2ZWMzIHZfUG9zaXRpb247XFxuQGltcG9ydCBjbGF5LnBsdWdpbi5zaGFkb3dfbWFwX2NvbW1vblxcbnZvaWQgbWFpbigpXFxue1xcbiBAaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuIHZlYzMgTCA9IGxpZ2h0UG9zaXRpb24gLSBwb3NpdGlvbjtcXG4gdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvc2l0aW9uIC0gcG9zaXRpb24pO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiBMIC89IGRpc3Q7XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kbCA9IGNsYW1wKGRvdChOLCBMKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IGF0dGVudWF0aW9uID0gbGlnaHRBdHRlbnVhdGlvbihkaXN0LCBsaWdodFJhbmdlKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGF0dGVudWF0aW9uICogbGlnaHRFcXVhdGlvbihcXG4gbGlnaHRDb2xvciwgZGlmZnVzZUNvbG9yLCBzcGVjdWxhckNvbG9yLCBuZGwsIG5kaCwgbmR2LCBnbG9zc2luZXNzXFxuICk7XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYk9tbmkoXFxuIGxpZ2h0U2hhZG93TWFwLCAtTCAqIGRpc3QsIGxpZ2h0UmFuZ2VcXG4gKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiAqPSBjbGFtcChzaGFkb3dDb250cmliLCAwLjAsIDEuMCk7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLnNwaGVyZV9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSBmbG9hdCBsaWdodFJhbmdlO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRSYWRpdXM7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMyB2X1Bvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiBAaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuIHZlYzMgTCA9IGxpZ2h0UG9zaXRpb24gLSBwb3NpdGlvbjtcXG4gdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvc2l0aW9uIC0gcG9zaXRpb24pO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiB2ZWMzIFIgPSByZWZsZWN0KFYsIE4pO1xcbiBmbG9hdCB0bXAgPSBkb3QoTCwgUik7XFxuIHZlYzMgY1RvUiA9IHRtcCAqIFIgLSBMO1xcbiBmbG9hdCBkID0gbGVuZ3RoKGNUb1IpO1xcbiBMID0gTCArIGNUb1IgKiBjbGFtcChsaWdodFJhZGl1cyAvIGQsIDAuMCwgMS4wKTtcXG4gTCA9IG5vcm1hbGl6ZShMKTtcXG4gdmVjMyBIID0gbm9ybWFsaXplKEwgKyBWKTtcXG4gZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIGxpZ2h0UmFuZ2UpO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRDb2xvciAqIG5kbCAqIGF0dGVudWF0aW9uO1xcbiBnbG9zc2luZXNzID0gY2xhbXAoZ2xvc3NpbmVzcyAtIGxpZ2h0UmFkaXVzIC8gMi4wIC8gZGlzdCwgMC4wLCAxLjApO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gYXR0ZW51YXRpb24gKiBsaWdodEVxdWF0aW9uKFxcbiBsaWdodENvbG9yLCBkaWZmdXNlQ29sb3IsIHNwZWN1bGFyQ29sb3IsIG5kbCwgbmRoLCBuZHYsIGdsb3NzaW5lc3NcXG4gKTtcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQudHViZV9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSBmbG9hdCBsaWdodFJhbmdlO1xcbnVuaWZvcm0gdmVjMyBsaWdodEV4dGVuZDtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZfUG9zaXRpb247XFxudm9pZCBtYWluKClcXG57XFxuIEBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5nYnVmZmVyX3JlYWRcXG4gdmVjMyBMID0gbGlnaHRQb3NpdGlvbiAtIHBvc2l0aW9uO1xcbiB2ZWMzIFYgPSBub3JtYWxpemUoZXllUG9zaXRpb24gLSBwb3NpdGlvbik7XFxuIHZlYzMgUiA9IHJlZmxlY3QoViwgTik7XFxuIHZlYzMgTDAgPSBsaWdodFBvc2l0aW9uIC0gbGlnaHRFeHRlbmQgLSBwb3NpdGlvbjtcXG4gdmVjMyBMMSA9IGxpZ2h0UG9zaXRpb24gKyBsaWdodEV4dGVuZCAtIHBvc2l0aW9uO1xcbiB2ZWMzIExEID0gTDEgLSBMMDtcXG4gZmxvYXQgbGVuMCA9IGxlbmd0aChMMCk7XFxuIGZsb2F0IGxlbjEgPSBsZW5ndGgoTDEpO1xcbiBmbG9hdCBpcnJhID0gMi4wICogY2xhbXAoZG90KE4sIEwwKSAvICgyLjAgKiBsZW4wKSArIGRvdChOLCBMMSkgLyAoMi4wICogbGVuMSksIDAuMCwgMS4wKTtcXG4gZmxvYXQgTEREb3RSID0gZG90KFIsIExEKTtcXG4gZmxvYXQgdCA9IChMRERvdFIgKiBkb3QoUiwgTDApIC0gZG90KEwwLCBMRCkpIC8gKGRvdChMRCwgTEQpIC0gTEREb3RSICogTEREb3RSKTtcXG4gdCA9IGNsYW1wKHQsIDAuMCwgMS4wKTtcXG4gTCA9IEwwICsgdCAqIExEO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiBMIC89IGRpc3Q7XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gZ2xvc3NpbmVzcyA9IGNsYW1wKGdsb3NzaW5lc3MgLSAwLjAgLyAyLjAgLyBkaXN0LCAwLjAsIDEuMCk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBsaWdodENvbG9yICogaXJyYSAqIGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgbGlnaHRSYW5nZSlcXG4gKiAoZGlmZnVzZUNvbG9yICsgRF9QaG9uZyhnbG9zc2luZXNzLCBuZGgpICogRl9TY2hsaWNrKG5kdiwgc3BlY3VsYXJDb2xvcikpO1xcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xyXG4iLCIvLyBMaWdodC1wcmUgcGFzcyBkZWZlcnJlZCByZW5kZXJpbmdcclxuLy8gaHR0cDovL3d3dy5yZWFsdGltZXJlbmRlcmluZy5jb20vYmxvZy9kZWZlcnJlZC1saWdodGluZy1hcHByb2FjaGVzL1xyXG5pbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcbmltcG9ydCBGdWxsUXVhZFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XHJcbmltcG9ydCBTcGhlcmVHZW8gZnJvbSAnLi4vZ2VvbWV0cnkvU3BoZXJlJztcclxuaW1wb3J0IENvbmVHZW8gZnJvbSAnLi4vZ2VvbWV0cnkvQ29uZSc7XHJcbmltcG9ydCBDeWxpbmRlckdlbyBmcm9tICcuLi9nZW9tZXRyeS9DeWxpbmRlcic7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4uL21hdGgvTWF0cml4NCc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBHQnVmZmVyIGZyb20gJy4vR0J1ZmZlcic7XHJcblxyXG5pbXBvcnQgcHJlekdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9wcmV6Lmdsc2wuanMnO1xyXG5pbXBvcnQgdXRpbEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS91dGlsLmdsc2wuanMnO1xyXG5cclxuaW1wb3J0IGxpZ2h0dm9sdW1lR2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL2xpZ2h0dm9sdW1lLmdsc2wuanMnO1xyXG4vLyBMaWdodCBzaGFkZXJzXHJcbmltcG9ydCBzcG90R2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL3Nwb3QuZ2xzbC5qcyc7XHJcbmltcG9ydCBkaXJlY3Rpb25hbEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9kaXJlY3Rpb25hbC5nbHNsLmpzJztcclxuaW1wb3J0IGFtYmllbnRHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudC5nbHNsLmpzJztcclxuaW1wb3J0IGFtYmllbnRzaEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9hbWJpZW50c2guZ2xzbC5qcyc7XHJcbmltcG9ydCBhbWJpZW50Y3ViZW1hcEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9hbWJpZW50Y3ViZW1hcC5nbHNsLmpzJztcclxuaW1wb3J0IHBvaW50R2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL3BvaW50Lmdsc2wuanMnO1xyXG5pbXBvcnQgc3BoZXJlR2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL3NwaGVyZS5nbHNsLmpzJztcclxuaW1wb3J0IHR1YmVHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvdHViZS5nbHNsLmpzJztcclxuXHJcblNoYWRlci5pbXBvcnQocHJlekdsc2wpO1xyXG5TaGFkZXIuaW1wb3J0KHV0aWxHbHNsKTtcclxuU2hhZGVyLmltcG9ydChsaWdodHZvbHVtZUdsc2wpO1xyXG5cclxuLy8gTGlnaHQgc2hhZGVyc1xyXG5TaGFkZXIuaW1wb3J0KHNwb3RHbHNsKTtcclxuU2hhZGVyLmltcG9ydChkaXJlY3Rpb25hbEdsc2wpO1xyXG5TaGFkZXIuaW1wb3J0KGFtYmllbnRHbHNsKTtcclxuU2hhZGVyLmltcG9ydChhbWJpZW50c2hHbHNsKTtcclxuU2hhZGVyLmltcG9ydChhbWJpZW50Y3ViZW1hcEdsc2wpO1xyXG5TaGFkZXIuaW1wb3J0KHBvaW50R2xzbCk7XHJcblNoYWRlci5pbXBvcnQoc3BoZXJlR2xzbCk7XHJcblNoYWRlci5pbXBvcnQodHViZUdsc2wpO1xyXG5cclxuU2hhZGVyLmltcG9ydChwcmV6R2xzbCk7XHJcblxyXG4vKipcclxuICogRGVmZXJyZWQgcmVuZGVyZXJcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmRlZmVycmVkLlJlbmRlcmVyXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgRGVmZXJyZWRSZW5kZXJlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgZnVsbFF1YWRWZXJ0ZXggPSBTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IudmVydGV4Jyk7XHJcbiAgICB2YXIgbGlnaHRWb2x1bWVWZXJ0ZXggPSBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmxpZ2h0X3ZvbHVtZS52ZXJ0ZXgnKTtcclxuXHJcbiAgICB2YXIgZGlyZWN0aW9uYWxMaWdodFNoYWRlciA9IG5ldyBTaGFkZXIoZnVsbFF1YWRWZXJ0ZXgsIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZGlyZWN0aW9uYWxfbGlnaHQnKSk7XHJcblxyXG4gICAgdmFyIGxpZ2h0QWNjdW11bGF0ZUJsZW5kRnVuYyA9IGZ1bmN0aW9uIChnbCkge1xyXG4gICAgICAgIGdsLmJsZW5kRXF1YXRpb24oZ2wuRlVOQ19BREQpO1xyXG4gICAgICAgIGdsLmJsZW5kRnVuY1NlcGFyYXRlKGdsLk9ORSwgZ2wuT05FLCBnbC5PTkUsIGdsLk9ORSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBjcmVhdGVMaWdodFBhc3NNYXQgPSBmdW5jdGlvbiAoc2hhZGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogc2hhZGVyLFxyXG4gICAgICAgICAgICBibGVuZDogbGlnaHRBY2N1bXVsYXRlQmxlbmRGdW5jLFxyXG4gICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgICAgICAgZGVwdGhNYXNrOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgY3JlYXRlVm9sdW1lU2hhZGVyID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFNoYWRlcihsaWdodFZvbHVtZVZlcnRleCwgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC4nICsgbmFtZSkpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBSb3RhdGUgYW5kIHBvc2l0aW9uaW5nIHRvIGZpdCB0aGUgc3BvdCBsaWdodFxyXG4gICAgLy8gV2hpY2ggdGhlIGN1c3Agb2YgY29uZSBwb2ludGluZyB0byB0aGUgcG9zaXRpdmUgelxyXG4gICAgLy8gYW5kIHBvc2l0aW9uZWQgb24gdGhlIG9yaWdpblxyXG4gICAgdmFyIGNvbmVHZW8gPSBuZXcgQ29uZUdlbyh7XHJcbiAgICAgICAgY2FwU2VnbWVudHM6IDEwXHJcbiAgICB9KTtcclxuICAgIHZhciBtYXQgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgbWF0LnJvdGF0ZVgoTWF0aC5QSSAvIDIpXHJcbiAgICAgICAgLnRyYW5zbGF0ZShuZXcgVmVjdG9yMygwLCAtMSwgMCkpO1xyXG5cclxuICAgIGNvbmVHZW8uYXBwbHlUcmFuc2Zvcm0obWF0KTtcclxuXHJcbiAgICB2YXIgY3lsaW5kZXJHZW8gPSBuZXcgQ3lsaW5kZXJHZW8oe1xyXG4gICAgICAgIGNhcFNlZ21lbnRzOiAxMFxyXG4gICAgfSk7XHJcbiAgICAvLyBBbGlnbiB3aXRoIHggYXhpc1xyXG4gICAgbWF0LmlkZW50aXR5KCkucm90YXRlWihNYXRoLlBJIC8gMik7XHJcbiAgICBjeWxpbmRlckdlby5hcHBseVRyYW5zZm9ybShtYXQpO1xyXG5cclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuZGVmZXJyZWQuUmVuZGVyZXIjICovIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUHJvdmlkZSBTaGFkb3dNYXBQYXNzIGZvciBzaGFkb3cgcmVuZGVyaW5nLlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LnByZVBhc3MuU2hhZG93TWFwfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNoYWRvd01hcFBhc3M6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIGF1dG8gcmVzaXppbmcgZnJvbSBnaXZlbiBkZWZ1YWx0IHJlbmRlcmVyIHNpemUuXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXV0b1Jlc2l6ZTogdHJ1ZSxcclxuXHJcbiAgICAgICAgX2NyZWF0ZUxpZ2h0UGFzc01hdDogY3JlYXRlTGlnaHRQYXNzTWF0LFxyXG5cclxuICAgICAgICBfZ0J1ZmZlcjogbmV3IEdCdWZmZXIoKSxcclxuXHJcbiAgICAgICAgX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlcjogbmV3IEZyYW1lQnVmZmVyKCksXHJcblxyXG4gICAgICAgIF9saWdodEFjY3VtVGV4OiBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgLy8gRklYTUUgRGV2aWNlIG5vdCBzdXBwb3J0IGZsb2F0IHRleHR1cmVcclxuICAgICAgICAgICAgdHlwZTogVGV4dHVyZS5IQUxGX0ZMT0FULFxyXG4gICAgICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1RcclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgX2Z1bGxRdWFkUGFzczogbmV3IEZ1bGxRdWFkUGFzcyh7XHJcbiAgICAgICAgICAgIGJsZW5kV2l0aFByZXZpb3VzOiB0cnVlXHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIF9kaXJlY3Rpb25hbExpZ2h0TWF0OiBjcmVhdGVMaWdodFBhc3NNYXQoZGlyZWN0aW9uYWxMaWdodFNoYWRlciksXHJcblxyXG4gICAgICAgIF9hbWJpZW50TWF0OiBjcmVhdGVMaWdodFBhc3NNYXQobmV3IFNoYWRlcihcclxuICAgICAgICAgICAgZnVsbFF1YWRWZXJ0ZXgsIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuYW1iaWVudF9saWdodCcpXHJcbiAgICAgICAgKSksXHJcbiAgICAgICAgX2FtYmllbnRTSE1hdDogY3JlYXRlTGlnaHRQYXNzTWF0KG5ldyBTaGFkZXIoXHJcbiAgICAgICAgICAgIGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmFtYmllbnRfc2hfbGlnaHQnKVxyXG4gICAgICAgICkpLFxyXG4gICAgICAgIF9hbWJpZW50Q3ViZW1hcE1hdDogY3JlYXRlTGlnaHRQYXNzTWF0KG5ldyBTaGFkZXIoXHJcbiAgICAgICAgICAgIGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmFtYmllbnRfY3ViZW1hcF9saWdodCcpXHJcbiAgICAgICAgKSksXHJcblxyXG4gICAgICAgIF9zcG90TGlnaHRTaGFkZXI6IGNyZWF0ZVZvbHVtZVNoYWRlcignc3BvdF9saWdodCcpLFxyXG4gICAgICAgIF9wb2ludExpZ2h0U2hhZGVyOiBjcmVhdGVWb2x1bWVTaGFkZXIoJ3BvaW50X2xpZ2h0JyksXHJcblxyXG4gICAgICAgIF9zcGhlcmVMaWdodFNoYWRlcjogY3JlYXRlVm9sdW1lU2hhZGVyKCdzcGhlcmVfbGlnaHQnKSxcclxuICAgICAgICBfdHViZUxpZ2h0U2hhZGVyOiBjcmVhdGVWb2x1bWVTaGFkZXIoJ3R1YmVfbGlnaHQnKSxcclxuXHJcbiAgICAgICAgX2xpZ2h0U3BoZXJlR2VvOiBuZXcgU3BoZXJlR2VvKHtcclxuICAgICAgICAgICAgd2lkdGhTZWdtZW50czogMTAsXHJcbiAgICAgICAgICAgIGhlaWdodFNlZ2VtZW50czogMTBcclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgX2xpZ2h0Q29uZUdlbzogY29uZUdlbyxcclxuXHJcbiAgICAgICAgX2xpZ2h0Q3lsaW5kZXJHZW86IGN5bGluZGVyR2VvLFxyXG5cclxuICAgICAgICBfb3V0cHV0UGFzczogbmV3IEZ1bGxRdWFkUGFzcyh7XHJcbiAgICAgICAgICAgIGZyYWdtZW50OiBTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3Iub3V0cHV0JylcclxuICAgICAgICB9KVxyXG4gICAgfTtcclxufSwgLyoqIEBsZW5kcyBjbGF5LmRlZmVycmVkLlJlbmRlcmVyIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIERvIHJlbmRlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LlNjZW5lfSBzY2VuZVxyXG4gICAgICogQHBhcmFtIHtjbGF5LkNhbWVyYX0gY2FtZXJhXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnJlbmRlclRvVGFyZ2V0ID0gZmFsc2VdIElmIG5vdCBvdXB1dCBhbmQgcmVuZGVyIHRvIHRoZSB0YXJnZXQgdGV4dHVyZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5ub3RVcGRhdGVTaGFkb3cgPSB0cnVlXSBJZiBub3QgdXBkYXRlIHRoZSBzaGFkb3cuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLm5vdFVwZGF0ZVNjZW5lID0gdHJ1ZV0gSWYgbm90IHVwZGF0ZSB0aGUgc2NlbmUuXHJcbiAgICAgKi9cclxuICAgIHJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBvcHRzKSB7XHJcblxyXG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG4gICAgICAgIG9wdHMucmVuZGVyVG9UYXJnZXQgPSBvcHRzLnJlbmRlclRvVGFyZ2V0IHx8IGZhbHNlO1xyXG4gICAgICAgIG9wdHMubm90VXBkYXRlU2hhZG93ID0gb3B0cy5ub3RVcGRhdGVTaGFkb3cgfHwgZmFsc2U7XHJcbiAgICAgICAgb3B0cy5ub3RVcGRhdGVTY2VuZSA9IG9wdHMubm90VXBkYXRlU2NlbmUgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICghb3B0cy5ub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgICAgICBzY2VuZS51cGRhdGUoZmFsc2UsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY2VuZS51cGRhdGVMaWdodHMoKTtcclxuICAgICAgICAvLyBSZW5kZXIgbGlzdCB3aWxsIGJlIHVwZGF0ZWQgaW4gZ2J1ZmZlci5cclxuXHJcbiAgICAgICAgY2FtZXJhLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgICAgLy8gUEVORElORyBGb3Igc3RlcmVvIHJlbmRlcmluZ1xyXG4gICAgICAgIHZhciBkcHIgPSByZW5kZXJlci5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZVxyXG4gICAgICAgICAgICAmJiAocmVuZGVyZXIuZ2V0V2lkdGgoKSAqIGRwciAhPT0gdGhpcy5fbGlnaHRBY2N1bVRleC53aWR0aFxyXG4gICAgICAgICAgICB8fCByZW5kZXJlci5nZXRIZWlnaHQoKSAqIGRwciAhPT0gdGhpcy5fbGlnaHRBY2N1bVRleC5oZWlnaHQpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzaXplKHJlbmRlcmVyLmdldFdpZHRoKCkgKiBkcHIsIHJlbmRlcmVyLmdldEhlaWdodCgpICogZHByKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2dCdWZmZXIudXBkYXRlKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKTtcclxuXHJcbiAgICAgICAgLy8gQWNjdW11bGF0ZSBsaWdodCBidWZmZXJcclxuICAgICAgICB0aGlzLl9hY2N1bXVsYXRlTGlnaHRCdWZmZXIocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsICFvcHRzLm5vdFVwZGF0ZVNoYWRvdyk7XHJcblxyXG4gICAgICAgIGlmICghb3B0cy5yZW5kZXJUb1RhcmdldCkge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRQYXNzLnNldFVuaWZvcm0oJ3RleHR1cmUnLCB0aGlzLl9saWdodEFjY3VtVGV4KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dFBhc3MucmVuZGVyKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5fZ0J1ZmZlci5yZW5kZXJEZWJ1ZyhyZW5kZXJlciwgY2FtZXJhLCAnbm9ybWFsJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICovXHJcbiAgICBnZXRUYXJnZXRUZXh0dXJlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0QWNjdW1UZXg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybiB7Y2xheS5GcmFtZUJ1ZmZlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0VGFyZ2V0RnJhbWVCdWZmZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGlnaHRBY2N1bUZyYW1lQnVmZmVyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuZGVmZXJyZWQuR0J1ZmZlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0R0J1ZmZlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nQnVmZmVyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBUT0RPIGlzIGRwciBuZWVkZWQ/XHJcbiAgICBzZXRWaWV3cG9ydDogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIGRwcikge1xyXG4gICAgICAgIHRoaXMuX2dCdWZmZXIuc2V0Vmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZHByKTtcclxuICAgICAgICB0aGlzLl9saWdodEFjY3VtRnJhbWVCdWZmZXIudmlld3BvcnQgPSB0aGlzLl9nQnVmZmVyLmdldFZpZXdwb3J0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIGdldEZ1bGxRdWFkTGlnaHRQYXNzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuX2Z1bGxRdWFkUGFzcztcclxuICAgIC8vIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcmVuZGVyZXIgc2l6ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxyXG4gICAgICovXHJcbiAgICByZXNpemU6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICAgICAgdGhpcy5fbGlnaHRBY2N1bVRleC53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0QWNjdW1UZXguaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICAvLyBQRU5ESU5HIHZpZXdwb3J0ID9cclxuICAgICAgICB0aGlzLl9nQnVmZmVyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuICAgIH0sXHJcblxyXG4gICAgX2FjY3VtdWxhdGVMaWdodEJ1ZmZlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCB1cGRhdGVTaGFkb3cpIHtcclxuICAgICAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgbGlnaHRBY2N1bVRleCA9IHRoaXMuX2xpZ2h0QWNjdW1UZXg7XHJcbiAgICAgICAgdmFyIGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlciA9IHRoaXMuX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlcjtcclxuXHJcbiAgICAgICAgdmFyIGV5ZVBvc2l0aW9uID0gY2FtZXJhLmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHZvbHVtZSBtZXNoZXNcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIXNjZW5lLmxpZ2h0c1tpXS5pbnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUxpZ2h0UHJveHkoc2NlbmUubGlnaHRzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNoYWRvd01hcFBhc3MgPSB0aGlzLnNoYWRvd01hcFBhc3M7XHJcbiAgICAgICAgaWYgKHNoYWRvd01hcFBhc3MgJiYgdXBkYXRlU2hhZG93KSB7XHJcbiAgICAgICAgICAgIGdsLmNsZWFyQ29sb3IoMSwgMSwgMSwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVMaWdodFNoYWRvdyhyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZWxpZ2h0YWNjdW11bGF0ZScsIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCB1cGRhdGVTaGFkb3cpO1xyXG5cclxuICAgICAgICBsaWdodEFjY3VtRnJhbWVCdWZmZXIuYXR0YWNoKGxpZ2h0QWNjdW1UZXgpO1xyXG4gICAgICAgIGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB2YXIgY2xlYXJDb2xvciA9IHJlbmRlcmVyLmNsZWFyQ29sb3I7XHJcblxyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlci52aWV3cG9ydDtcclxuICAgICAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgICAgICAgdmFyIGRwciA9IHZpZXdwb3J0LmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgICAgIC8vIHVzZSBzY2lzc29yIHRvIG1ha2Ugc3VyZSBvbmx5IGNsZWFyIHRoZSB2aWV3cG9ydFxyXG4gICAgICAgICAgICBnbC5lbmFibGUoZ2wuU0NJU1NPUl9URVNUKTtcclxuICAgICAgICAgICAgZ2wuc2Npc3Nvcih2aWV3cG9ydC54ICogZHByLCB2aWV3cG9ydC55ICogZHByLCB2aWV3cG9ydC53aWR0aCAqIGRwciwgdmlld3BvcnQuaGVpZ2h0ICogZHByKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ2wuY2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTtcclxuICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUKTtcclxuICAgICAgICBnbC5lbmFibGUoZ2wuQkxFTkQpO1xyXG4gICAgICAgIGlmICh2aWV3cG9ydCkge1xyXG4gICAgICAgICAgICBnbC5kaXNhYmxlKGdsLlNDSVNTT1JfVEVTVCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ3N0YXJ0bGlnaHRhY2N1bXVsYXRlJywgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpO1xyXG5cclxuICAgICAgICB2YXIgdmlld1Byb2plY3Rpb25JbnYgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIE1hdHJpeDQubXVsdGlwbHkodmlld1Byb2plY3Rpb25JbnYsIGNhbWVyYS53b3JsZFRyYW5zZm9ybSwgY2FtZXJhLmludlByb2plY3Rpb25NYXRyaXgpO1xyXG5cclxuICAgICAgICB2YXIgdm9sdW1lTWVzaExpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY2VuZS5saWdodHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGxpZ2h0ID0gc2NlbmUubGlnaHRzW2ldO1xyXG4gICAgICAgICAgICBpZiAobGlnaHQuaW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHVUcGwgPSBsaWdodC51bmlmb3JtVGVtcGxhdGVzO1xyXG5cclxuICAgICAgICAgICAgdmFyIHZvbHVtZU1lc2ggPSBsaWdodC52b2x1bWVNZXNoIHx8IGxpZ2h0Ll9fdm9sdW1lTWVzaDtcclxuXHJcbiAgICAgICAgICAgIGlmICh2b2x1bWVNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSB2b2x1bWVNZXNoLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgLy8gVm9sdW1lIG1lc2ggd2lsbCBhZmZlY3QgdGhlIHNjZW5lIGJvdW5kaW5nIGJveCB3aGVuIHJlbmRlcmluZ1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgY2FzdFNoYWRvdyBpcyB0cnVlXHJcbiAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLmNhc3RTaGFkb3cgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdW5rbm93bkxpZ2h0VHlwZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChsaWdodC50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnUE9JTlRfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvbG9yJywgdVRwbC5wb2ludExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYW5nZScsIHVUcGwucG9pbnRMaWdodFJhbmdlLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UG9zaXRpb24nLCB1VHBsLnBvaW50TGlnaHRQb3NpdGlvbi52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdTUE9UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRQb3NpdGlvbicsIHVUcGwuc3BvdExpZ2h0UG9zaXRpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuc3BvdExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYW5nZScsIHVUcGwuc3BvdExpZ2h0UmFuZ2UudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHREaXJlY3Rpb24nLCB1VHBsLnNwb3RMaWdodERpcmVjdGlvbi52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCd1bWJyYUFuZ2xlQ29zaW5lJywgdVRwbC5zcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ3BlbnVtYnJhQW5nbGVDb3NpbmUnLCB1VHBsLnNwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmUudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnZmFsbG9mZkZhY3RvcicsIHVUcGwuc3BvdExpZ2h0RmFsbG9mZkZhY3Rvci52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdTUEhFUkVfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvbG9yJywgdVRwbC5zcGhlcmVMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UmFuZ2UnLCB1VHBsLnNwaGVyZUxpZ2h0UmFuZ2UudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYWRpdXMnLCB1VHBsLnNwaGVyZUxpZ2h0UmFkaXVzLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UG9zaXRpb24nLCB1VHBsLnNwaGVyZUxpZ2h0UG9zaXRpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnVFVCRV9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLnR1YmVMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UmFuZ2UnLCB1VHBsLnR1YmVMaWdodFJhbmdlLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0RXh0ZW5kJywgdVRwbC50dWJlTGlnaHRFeHRlbmQudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRQb3NpdGlvbicsIHVUcGwudHViZUxpZ2h0UG9zaXRpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93bkxpZ2h0VHlwZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHVua25vd25MaWdodFR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdleWVQb3NpdGlvbicsIGV5ZVBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ3ZpZXdQcm9qZWN0aW9uSW52Jywgdmlld1Byb2plY3Rpb25JbnYuYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUxJywgdGhpcy5fZ0J1ZmZlci5nZXRUYXJnZXRUZXh0dXJlMSgpKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMicsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTIoKSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTMnLCB0aGlzLl9nQnVmZmVyLmdldFRhcmdldFRleHR1cmUzKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZvbHVtZU1lc2hMaXN0LnB1c2godm9sdW1lTWVzaCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhc3MgPSB0aGlzLl9mdWxsUXVhZFBhc3M7XHJcbiAgICAgICAgICAgICAgICB2YXIgdW5rbm93bkxpZ2h0VHlwZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gRnVsbCBxdWFkIGxpZ2h0XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGxpZ2h0LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdBTUJJRU5UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbCA9IHRoaXMuX2FtYmllbnRNYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuYW1iaWVudExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQU1CSUVOVF9TSF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwgPSB0aGlzLl9hbWJpZW50U0hNYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuYW1iaWVudFNITGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29lZmZpY2llbnRzJywgdVRwbC5hbWJpZW50U0hMaWdodENvZWZmaWNpZW50cy52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdBTUJJRU5UX0NVQkVNQVBfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsID0gdGhpcy5fYW1iaWVudEN1YmVtYXBNYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuYW1iaWVudEN1YmVtYXBMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDdWJlbWFwJywgdVRwbC5hbWJpZW50Q3ViZW1hcExpZ2h0Q3ViZW1hcC52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2JyZGZMb29rdXAnLCB1VHBsLmFtYmllbnRDdWJlbWFwTGlnaHRCUkRGTG9va3VwLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RJUkVDVElPTkFMX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc1NoYWRvdyA9IHNoYWRvd01hcFBhc3MgJiYgbGlnaHQuY2FzdFNoYWRvdztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbCA9IHRoaXMuX2RpcmVjdGlvbmFsTGlnaHRNYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWxbaGFzU2hhZG93ID8gJ2RlZmluZScgOiAndW5kZWZpbmUnXSgnZnJhZ21lbnQnLCAnU0hBRE9XTUFQX0VOQUJMRUQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NoYWRvdykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NIQURPV19DQVNDQURFJywgbGlnaHQuc2hhZG93Q2FzY2FkZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvbG9yJywgdVRwbC5kaXJlY3Rpb25hbExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodERpcmVjdGlvbicsIHVUcGwuZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbi52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmtvbncgbGlnaHQgdHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duTGlnaHRUeXBlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh1bmtub3duTGlnaHRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHBhc3NNYXRlcmlhbCA9IHBhc3MubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnZXllUG9zaXRpb24nLCBleWVQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgndmlld1Byb2plY3Rpb25JbnYnLCB2aWV3UHJvamVjdGlvbkludi5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUxJywgdGhpcy5fZ0J1ZmZlci5nZXRUYXJnZXRUZXh0dXJlMSgpKTtcclxuICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTInLCB0aGlzLl9nQnVmZmVyLmdldFRhcmdldFRleHR1cmUyKCkpO1xyXG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMycsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTMoKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRvd01hcFBhc3MgJiYgbGlnaHQuY2FzdFNoYWRvdykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcCcsIGxpZ2h0Ll9fc2hhZG93TWFwKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRNYXRyaWNlcycsIGxpZ2h0Ll9fbGlnaHRNYXRyaWNlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ3NoYWRvd0Nhc2NhZGVDbGlwc05lYXInLCBsaWdodC5fX2Nhc2NhZGVDbGlwc05lYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdzaGFkb3dDYXNjYWRlQ2xpcHNGYXInLCBsaWdodC5fX2Nhc2NhZGVDbGlwc0Zhcik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcFNpemUnLCBsaWdodC5zaGFkb3dSZXNvbHV0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXNzLnJlbmRlclF1YWQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9yZW5kZXJWb2x1bWVNZXNoTGlzdChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdm9sdW1lTWVzaExpc3QpO1xyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2xpZ2h0YWNjdW11bGF0ZScsIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKTtcclxuXHJcbiAgICAgICAgbGlnaHRBY2N1bUZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJsaWdodGFjY3VtdWxhdGUnLCByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBfcHJlcGFyZUxpZ2h0U2hhZG93OiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB3b3JsZFZpZXcgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpIHtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGlnaHQgPSBzY2VuZS5saWdodHNbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgdm9sdW1lTWVzaCA9IGxpZ2h0LnZvbHVtZU1lc2ggfHwgbGlnaHQuX192b2x1bWVNZXNoO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFsaWdodC5jYXN0U2hhZG93IHx8IGxpZ2h0LmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCAobGlnaHQudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BPSU5UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdTUE9UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRnJ1c3R1bSBjdWxsaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdHJpeDQubXVsdGlwbHkod29ybGRWaWV3LCBjYW1lcmEudmlld01hdHJpeCwgdm9sdW1lTWVzaC53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2VuZS5pc0ZydXN0dW1DdWxsZWQodm9sdW1lTWVzaCwgY2FtZXJhLCB3b3JsZFZpZXcuYXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVNpbmdsZUxpZ2h0U2hhZG93KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIGxpZ2h0LCB2b2x1bWVNZXNoLm1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RJUkVDVElPTkFMX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVNpbmdsZUxpZ2h0U2hhZG93KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIGxpZ2h0LCBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICBfcHJlcGFyZVNpbmdsZUxpZ2h0U2hhZG93OiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIGxpZ2h0LCBtYXRlcmlhbCkge1xyXG4gICAgICAgIHN3aXRjaCAobGlnaHQudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdQT0lOVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93TWFwcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFkb3dNYXBQYXNzLnJlbmRlclBvaW50TGlnaHRTaGFkb3coXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBsaWdodCwgc2hhZG93TWFwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0U2hhZG93TWFwJywgc2hhZG93TWFwc1swXSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcFNpemUnLCBsaWdodC5zaGFkb3dSZXNvbHV0aW9uKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdTUE9UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgIHZhciBzaGFkb3dNYXBzID0gW107XHJcbiAgICAgICAgICAgICAgICB2YXIgbGlnaHRNYXRyaWNlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFkb3dNYXBQYXNzLnJlbmRlclNwb3RMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlciwgc2NlbmUsIGxpZ2h0LCBsaWdodE1hdHJpY2VzLCBzaGFkb3dNYXBzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXAnLCBzaGFkb3dNYXBzWzBdKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0TWF0cml4JywgbGlnaHRNYXRyaWNlc1swXSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcFNpemUnLCBsaWdodC5zaGFkb3dSZXNvbHV0aW9uKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdESVJFQ1RJT05BTF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93TWFwcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpZ2h0TWF0cmljZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciBjYXNjYWRlQ2xpcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhZG93TWFwUGFzcy5yZW5kZXJEaXJlY3Rpb25hbExpZ2h0U2hhZG93KFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBsaWdodCwgY2FzY2FkZUNsaXBzLCBsaWdodE1hdHJpY2VzLCBzaGFkb3dNYXBzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNhc2NhZGVDbGlwc05lYXIgPSBjYXNjYWRlQ2xpcHMuc2xpY2UoKTtcclxuICAgICAgICAgICAgICAgIHZhciBjYXNjYWRlQ2xpcHNGYXIgPSBjYXNjYWRlQ2xpcHMuc2xpY2UoKTtcclxuICAgICAgICAgICAgICAgIGNhc2NhZGVDbGlwc05lYXIucG9wKCk7XHJcbiAgICAgICAgICAgICAgICBjYXNjYWRlQ2xpcHNGYXIuc2hpZnQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBJdGVyYXRlIGZyb20gZmFyIHRvIG5lYXJcclxuICAgICAgICAgICAgICAgIGNhc2NhZGVDbGlwc05lYXIucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgY2FzY2FkZUNsaXBzRmFyLnJldmVyc2UoKTtcclxuICAgICAgICAgICAgICAgIGxpZ2h0TWF0cmljZXMucmV2ZXJzZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxpZ2h0Ll9fY2FzY2FkZUNsaXBzTmVhciA9IGNhc2NhZGVDbGlwc05lYXI7XHJcbiAgICAgICAgICAgICAgICBsaWdodC5fX2Nhc2NhZGVDbGlwc0ZhciA9IGNhc2NhZGVDbGlwc0ZhcjtcclxuICAgICAgICAgICAgICAgIGxpZ2h0Ll9fc2hhZG93TWFwID0gc2hhZG93TWFwc1swXTtcclxuICAgICAgICAgICAgICAgIGxpZ2h0Ll9fbGlnaHRNYXRyaWNlcyA9IGxpZ2h0TWF0cmljZXM7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFVwZGF0ZSBsaWdodCB2b2x1bWUgbWVzaFxyXG4gICAgLy8gTGlnaHQgdm9sdW1lIG1lc2ggaXMgcmVuZGVyZWQgaW4gbGlnaHQgYWNjdW11bGF0ZSBwYXNzIGluc3RlYWQgb2YgZnVsbCBxdWFkLlxyXG4gICAgLy8gSXQgd2lsbCByZWR1Y2UgcGl4ZWxzIHNpZ25pZmljYW50bHkgd2hlbiBsb2NhbCBsaWdodCBpcyByZWxhdGl2ZWx5IHNtYWxsLlxyXG4gICAgLy8gQW5kIHdlIGNhbiB1c2UgY3VzdG9tIHZvbHVtZSBtZXNoIHRvIHNoYXBlIHRoZSBsaWdodC5cclxuICAgIC8vXHJcbiAgICAvLyBTZWUgXCJEZWZlcnJlZCBTaGFkaW5nIE9wdGltaXphdGlvbnNcIiBpbiBHREMyMDExXHJcbiAgICBfdXBkYXRlTGlnaHRQcm94eTogZnVuY3Rpb24gKGxpZ2h0KSB7XHJcbiAgICAgICAgdmFyIHZvbHVtZU1lc2g7XHJcbiAgICAgICAgaWYgKGxpZ2h0LnZvbHVtZU1lc2gpIHtcclxuICAgICAgICAgICAgdm9sdW1lTWVzaCA9IGxpZ2h0LnZvbHVtZU1lc2g7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGxpZ2h0LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIE9ubHkgbG9jYWwgbGlnaHQgKHBvaW50IGFuZCBzcG90KSBuZWVkcyB2b2x1bWUgbWVzaC5cclxuICAgICAgICAgICAgICAgIC8vIERpcmVjdGlvbmFsIGFuZCBhbWJpZW50IGxpZ2h0IHJlbmRlcnMgaW4gZnVsbCBxdWFkXHJcbiAgICAgICAgICAgICAgICBjYXNlICdQT0lOVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdTUEhFUkVfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzaGFkZXIgPSBsaWdodC50eXBlID09PSAnU1BIRVJFX0xJR0hUJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX3NwaGVyZUxpZ2h0U2hhZGVyIDogdGhpcy5fcG9pbnRMaWdodFNoYWRlcjtcclxuICAgICAgICAgICAgICAgICAgICAvLyBWb2x1bWUgbWVzaCBjcmVhdGVkIGF1dG9tYXRpY2FsbHlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWxpZ2h0Ll9fdm9sdW1lTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaWdodC5fX3ZvbHVtZU1lc2ggPSBuZXcgTWVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbDogdGhpcy5fY3JlYXRlTGlnaHRQYXNzTWF0KHNoYWRlciksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogdGhpcy5fbGlnaHRTcGhlcmVHZW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEaXNhYmxlIGN1bGxpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGxpZ2h0IHZvbHVtZSBtZXNoIGludGVyc2VjdCBjYW1lcmEgbmVhciBwbGFuZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCBtZXNoIGluc2lkZSBjYW4gc3RpbGwgYmUgcmVuZGVyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1bGxpbmc6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByID0gbGlnaHQucmFuZ2UgKyAobGlnaHQucmFkaXVzIHx8IDApO1xyXG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2guc2NhbGUuc2V0KHIsIHIsIHIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnU1BPVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQuX192b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoIHx8IG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWw6IHRoaXMuX2NyZWF0ZUxpZ2h0UGFzc01hdCh0aGlzLl9zcG90TGlnaHRTaGFkZXIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogdGhpcy5fbGlnaHRDb25lR2VvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdWxsaW5nOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2ggPSBsaWdodC5fX3ZvbHVtZU1lc2g7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFzcGVjdCA9IE1hdGgudGFuKGxpZ2h0LnBlbnVtYnJhQW5nbGUgKiBNYXRoLlBJIC8gMTgwKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBsaWdodC5yYW5nZTtcclxuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLnNjYWxlLnNldChhc3BlY3QgKiByYW5nZSwgYXNwZWN0ICogcmFuZ2UsIHJhbmdlIC8gMik7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdUVUJFX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICBsaWdodC5fX3ZvbHVtZU1lc2ggPSBsaWdodC5fX3ZvbHVtZU1lc2ggfHwgbmV3IE1lc2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbDogdGhpcy5fY3JlYXRlTGlnaHRQYXNzTWF0KHRoaXMuX3R1YmVMaWdodFNoYWRlciksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5OiB0aGlzLl9saWdodEN5bGluZGVyR2VvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdWxsaW5nOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2ggPSBsaWdodC5fX3ZvbHVtZU1lc2g7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gbGlnaHQucmFuZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5zY2FsZS5zZXQobGlnaHQubGVuZ3RoIC8gMiArIHJhbmdlLCByYW5nZSwgcmFuZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2b2x1bWVNZXNoKSB7XHJcbiAgICAgICAgICAgIHZvbHVtZU1lc2gudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIC8vIEFwcGx5IGxpZ2h0IHRyYW5zZm9ybVxyXG4gICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHZvbHVtZU1lc2gud29ybGRUcmFuc2Zvcm0sIGxpZ2h0LndvcmxkVHJhbnNmb3JtLCB2b2x1bWVNZXNoLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgdmFyIGhhc1NoYWRvdyA9IHRoaXMuc2hhZG93TWFwUGFzcyAmJiBsaWdodC5jYXN0U2hhZG93O1xyXG4gICAgICAgICAgICB2b2x1bWVNZXNoLm1hdGVyaWFsW2hhc1NoYWRvdyA/ICdkZWZpbmUnIDogJ3VuZGVmaW5lJ10oJ2ZyYWdtZW50JywgJ1NIQURPV01BUF9FTkFCTEVEJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfcmVuZGVyVm9sdW1lTWVzaExpc3Q6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHdvcmxkVmlldyA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgdmFyIHByZVpNYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LnByZXoudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucHJlei5mcmFnbWVudCcpKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGZ1bmN0aW9uIGdldFByZVpNYXRlcmlhbCgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByZVpNYXRlcmlhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdm9sdW1lTWVzaExpc3QpIHtcclxuICAgICAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgICAgICBnbC5kZXB0aEZ1bmMoZ2wuTEVRVUFMKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm9sdW1lTWVzaExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB2b2x1bWVNZXNoID0gdm9sdW1lTWVzaExpc3RbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gRnJ1c3R1bSBjdWxsaW5nXHJcbiAgICAgICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHdvcmxkVmlldywgY2FtZXJhLnZpZXdNYXRyaXgsIHZvbHVtZU1lc2gud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNjZW5lLmlzRnJ1c3R1bUN1bGxlZCh2b2x1bWVNZXNoLCBjYW1lcmEsIHdvcmxkVmlldy5hcnJheSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBVc2UgcHJleiB0byBhdm9pZCBvbmUgcGl4ZWwgcmVuZGVyZWQgdHdpY2VcclxuICAgICAgICAgICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBnbC5kZXB0aE1hc2sodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBkZXB0aE1hc2sgbXVzdCBiZSBlbmFibGVkIGJlZm9yZSBjbGVhciBERVBUSF9CVUZGRVJcclxuICAgICAgICAgICAgICAgIGdsLmNsZWFyKGdsLkRFUFRIX0JVRkZFUl9CSVQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoW3ZvbHVtZU1lc2hdLCBjYW1lcmEsIHtcclxuICAgICAgICAgICAgICAgICAgICBnZXRNYXRlcmlhbDogZ2V0UHJlWk1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBSZW5kZXIgbGlnaHRcclxuICAgICAgICAgICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLm1hdGVyaWFsLmRlcHRoTWFzayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKFt2b2x1bWVNZXNoXSwgY2FtZXJhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZ2wuZGVwdGhGdW5jKGdsLkxFU1MpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGlnaHRBY2N1bUZyYW1lQnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0QWNjdW1UZXguZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2xpZ2h0Q29uZUdlby5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9saWdodEN5bGluZGVyR2VvLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0U3BoZXJlR2VvLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9mdWxsUXVhZFBhc3MuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fb3V0cHV0UGFzcy5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlyZWN0aW9uYWxMaWdodE1hdC5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5zaGFkb3dNYXBQYXNzLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IERlZmVycmVkUmVuZGVyZXI7XHJcbiIsIlxyXG5cclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgMngyIE1hdHJpeFxyXG4gKiBAbmFtZSBtYXQyXHJcbiAqL1xyXG5cclxudmFyIG1hdDIgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDJcclxuICpcclxuICogQHJldHVybnMge21hdDJ9IGEgbmV3IDJ4MiBtYXRyaXhcclxuICovXHJcbm1hdDIuY3JlYXRlID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoNCk7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDIgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gYSBuZXcgMngyIG1hdHJpeFxyXG4gKi9cclxubWF0Mi5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIG91dFszXSA9IGFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQyIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2V0IGEgbWF0MiB0byB0aGUgaWRlbnRpdHkgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcclxuICAgIG91dFswXSA9IDE7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zcG9zZSB0aGUgdmFsdWVzIG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cclxubWF0Mi50cmFuc3Bvc2UgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIC8vIElmIHdlIGFyZSB0cmFuc3Bvc2luZyBvdXJzZWx2ZXMgd2UgY2FuIHNraXAgYSBmZXcgc3RlcHMgYnV0IGhhdmUgdG8gY2FjaGUgc29tZSB2YWx1ZXNcclxuICAgIGlmIChvdXQgPT09IGEpIHtcclxuICAgICAgICB2YXIgYTEgPSBhWzFdO1xyXG4gICAgICAgIG91dFsxXSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzJdID0gYTE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG91dFswXSA9IGFbMF07XHJcbiAgICAgICAgb3V0WzFdID0gYVsyXTtcclxuICAgICAgICBvdXRbMl0gPSBhWzFdO1xyXG4gICAgICAgIG91dFszXSA9IGFbM107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnZlcnRzIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cclxubWF0Mi5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sXHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcclxuICAgICAgICBkZXQgPSBhMCAqIGEzIC0gYTIgKiBhMTtcclxuXHJcbiAgICBpZiAoIWRldCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuICAgIG91dFswXSA9ICBhMyAqIGRldDtcclxuICAgIG91dFsxXSA9IC1hMSAqIGRldDtcclxuICAgIG91dFsyXSA9IC1hMiAqIGRldDtcclxuICAgIG91dFszXSA9ICBhMCAqIGRldDtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGFkanVnYXRlIG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cclxubWF0Mi5hZGpvaW50ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICAvLyBDYWNoaW5nIHRoaXMgdmFsdWUgaXMgbmVzc2VjYXJ5IGlmIG91dCA9PSBhXHJcbiAgICB2YXIgYTAgPSBhWzBdO1xyXG4gICAgb3V0WzBdID0gIGFbM107XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIG91dFsyXSA9IC1hWzJdO1xyXG4gICAgb3V0WzNdID0gIGEwO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkZXRlcm1pbmFudCBvZiBhXHJcbiAqL1xyXG5tYXQyLmRldGVybWluYW50ID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybiBhWzBdICogYVszXSAtIGFbMl0gKiBhWzFdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xyXG5tYXQyLm11bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYikge1xyXG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXTtcclxuICAgIHZhciBiMCA9IGJbMF0sIGIxID0gYlsxXSwgYjIgPSBiWzJdLCBiMyA9IGJbM107XHJcbiAgICBvdXRbMF0gPSBhMCAqIGIwICsgYTIgKiBiMTtcclxuICAgIG91dFsxXSA9IGExICogYjAgKyBhMyAqIGIxO1xyXG4gICAgb3V0WzJdID0gYTAgKiBiMiArIGEyICogYjM7XHJcbiAgICBvdXRbM10gPSBhMSAqIGIyICsgYTMgKiBiMztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQyLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbm1hdDIubXVsID0gbWF0Mi5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0MiBieSB0aGUgZ2l2ZW4gYW5nbGVcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLFxyXG4gICAgICAgIHMgPSBNYXRoLnNpbihyYWQpLFxyXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpO1xyXG4gICAgb3V0WzBdID0gYTAgKiAgYyArIGEyICogcztcclxuICAgIG91dFsxXSA9IGExICogIGMgKyBhMyAqIHM7XHJcbiAgICBvdXRbMl0gPSBhMCAqIC1zICsgYTIgKiBjO1xyXG4gICAgb3V0WzNdID0gYTEgKiAtcyArIGEzICogYztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2NhbGVzIHRoZSBtYXQyIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgdGhlIHZlYzIgdG8gc2NhbGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqKi9cclxubWF0Mi5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXSxcclxuICAgICAgICB2MCA9IHZbMF0sIHYxID0gdlsxXTtcclxuICAgIG91dFswXSA9IGEwICogdjA7XHJcbiAgICBvdXRbMV0gPSBhMSAqIHYwO1xyXG4gICAgb3V0WzJdID0gYTIgKiB2MTtcclxuICAgIG91dFszXSA9IGEzICogdjE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cclxubWF0Mi5mcm9iID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybihNYXRoLnNxcnQoTWF0aC5wb3coYVswXSwgMikgKyBNYXRoLnBvdyhhWzFdLCAyKSArIE1hdGgucG93KGFbMl0sIDIpICsgTWF0aC5wb3coYVszXSwgMikpKVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgTCwgRCBhbmQgVSBtYXRyaWNlcyAoTG93ZXIgdHJpYW5ndWxhciwgRGlhZ29uYWwgYW5kIFVwcGVyIHRyaWFuZ3VsYXIpIGJ5IGZhY3Rvcml6aW5nIHRoZSBpbnB1dCBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBMIHRoZSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IEQgdGhlIGRpYWdvbmFsIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IFUgdGhlIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgaW5wdXQgbWF0cml4IHRvIGZhY3Rvcml6ZVxyXG4gKi9cclxuXHJcbm1hdDIuTERVID0gZnVuY3Rpb24gKEwsIEQsIFUsIGEpIHtcclxuICAgIExbMl0gPSBhWzJdL2FbMF07XHJcbiAgICBVWzBdID0gYVswXTtcclxuICAgIFVbMV0gPSBhWzFdO1xyXG4gICAgVVszXSA9IGFbM10gLSBMWzJdICogVVsxXTtcclxuICAgIHJldHVybiBbTCwgRCwgVV07XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbWF0MjsiLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgMngzIE1hdHJpeFxyXG4gKiBAbmFtZSBtYXQyZFxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogQSBtYXQyZCBjb250YWlucyBzaXggZWxlbWVudHMgZGVmaW5lZCBhczpcclxuICogPHByZT5cclxuICogW2EsIGMsIHR4LFxyXG4gKiAgYiwgZCwgdHldXHJcbiAqIDwvcHJlPlxyXG4gKiBUaGlzIGlzIGEgc2hvcnQgZm9ybSBmb3IgdGhlIDN4MyBtYXRyaXg6XHJcbiAqIDxwcmU+XHJcbiAqIFthLCBjLCB0eCxcclxuICogIGIsIGQsIHR5LFxyXG4gKiAgMCwgMCwgMV1cclxuICogPC9wcmU+XHJcbiAqIFRoZSBsYXN0IHJvdyBpcyBpZ25vcmVkIHNvIHRoZSBhcnJheSBpcyBzaG9ydGVyIGFuZCBvcGVyYXRpb25zIGFyZSBmYXN0ZXIuXHJcbiAqL1xyXG5cclxudmFyIG1hdDJkID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBtYXQyZFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IGEgbmV3IDJ4MyBtYXRyaXhcclxuICovXHJcbm1hdDJkLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDYpO1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMTtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSAwO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDJkIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgbWF0cml4IHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gYSBuZXcgMngzIG1hdHJpeFxyXG4gKi9cclxubWF0MmQuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoNik7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQyZCB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xyXG5tYXQyZC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBhIG1hdDJkIHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xyXG5tYXQyZC5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMTtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSAwO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnZlcnRzIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXHJcbm1hdDJkLmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmFyIGFhID0gYVswXSwgYWIgPSBhWzFdLCBhYyA9IGFbMl0sIGFkID0gYVszXSxcclxuICAgICAgICBhdHggPSBhWzRdLCBhdHkgPSBhWzVdO1xyXG5cclxuICAgIHZhciBkZXQgPSBhYSAqIGFkIC0gYWIgKiBhYztcclxuICAgIGlmKCFkZXQpe1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuICAgIG91dFswXSA9IGFkICogZGV0O1xyXG4gICAgb3V0WzFdID0gLWFiICogZGV0O1xyXG4gICAgb3V0WzJdID0gLWFjICogZGV0O1xyXG4gICAgb3V0WzNdID0gYWEgKiBkZXQ7XHJcbiAgICBvdXRbNF0gPSAoYWMgKiBhdHkgLSBhZCAqIGF0eCkgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoYWIgKiBhdHggLSBhYSAqIGF0eSkgKiBkZXQ7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkZXRlcm1pbmFudCBvZiBhXHJcbiAqL1xyXG5tYXQyZC5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4gYVswXSAqIGFbM10gLSBhWzFdICogYVsyXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQyZCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xyXG5tYXQyZC5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sIGE0ID0gYVs0XSwgYTUgPSBhWzVdLFxyXG4gICAgICAgIGIwID0gYlswXSwgYjEgPSBiWzFdLCBiMiA9IGJbMl0sIGIzID0gYlszXSwgYjQgPSBiWzRdLCBiNSA9IGJbNV07XHJcbiAgICBvdXRbMF0gPSBhMCAqIGIwICsgYTIgKiBiMTtcclxuICAgIG91dFsxXSA9IGExICogYjAgKyBhMyAqIGIxO1xyXG4gICAgb3V0WzJdID0gYTAgKiBiMiArIGEyICogYjM7XHJcbiAgICBvdXRbM10gPSBhMSAqIGIyICsgYTMgKiBiMztcclxuICAgIG91dFs0XSA9IGEwICogYjQgKyBhMiAqIGI1ICsgYTQ7XHJcbiAgICBvdXRbNV0gPSBhMSAqIGI0ICsgYTMgKiBiNSArIGE1O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDJkLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbm1hdDJkLm11bCA9IG1hdDJkLm11bHRpcGx5O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0MmQgYnkgdGhlIGdpdmVuIGFuZ2xlXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xyXG5tYXQyZC5yb3RhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sIGE0ID0gYVs0XSwgYTUgPSBhWzVdLFxyXG4gICAgICAgIHMgPSBNYXRoLnNpbihyYWQpLFxyXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpO1xyXG4gICAgb3V0WzBdID0gYTAgKiAgYyArIGEyICogcztcclxuICAgIG91dFsxXSA9IGExICogIGMgKyBhMyAqIHM7XHJcbiAgICBvdXRbMl0gPSBhMCAqIC1zICsgYTIgKiBjO1xyXG4gICAgb3V0WzNdID0gYTEgKiAtcyArIGEzICogYztcclxuICAgIG91dFs0XSA9IGE0O1xyXG4gICAgb3V0WzVdID0gYTU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MmQgYnkgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGdpdmVuIHZlYzJcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICoqL1xyXG5tYXQyZC5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXSwgYTQgPSBhWzRdLCBhNSA9IGFbNV0sXHJcbiAgICAgICAgdjAgPSB2WzBdLCB2MSA9IHZbMV07XHJcbiAgICBvdXRbMF0gPSBhMCAqIHYwO1xyXG4gICAgb3V0WzFdID0gYTEgKiB2MDtcclxuICAgIG91dFsyXSA9IGEyICogdjE7XHJcbiAgICBvdXRbM10gPSBhMyAqIHYxO1xyXG4gICAgb3V0WzRdID0gYTQ7XHJcbiAgICBvdXRbNV0gPSBhNTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNsYXRlcyB0aGUgbWF0MmQgYnkgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGdpdmVuIHZlYzJcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHRyYW5zbGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqKi9cclxubWF0MmQudHJhbnNsYXRlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLCBhNCA9IGFbNF0sIGE1ID0gYVs1XSxcclxuICAgICAgICB2MCA9IHZbMF0sIHYxID0gdlsxXTtcclxuICAgIG91dFswXSA9IGEwO1xyXG4gICAgb3V0WzFdID0gYTE7XHJcbiAgICBvdXRbMl0gPSBhMjtcclxuICAgIG91dFszXSA9IGEzO1xyXG4gICAgb3V0WzRdID0gYTAgKiB2MCArIGEyICogdjEgKyBhNDtcclxuICAgIG91dFs1XSA9IGExICogdjAgKyBhMyAqIHYxICsgYTU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQyZFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gY2FsY3VsYXRlIEZyb2Jlbml1cyBub3JtIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IEZyb2Jlbml1cyBub3JtXHJcbiAqL1xyXG5tYXQyZC5mcm9iID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybihNYXRoLnNxcnQoTWF0aC5wb3coYVswXSwgMikgKyBNYXRoLnBvdyhhWzFdLCAyKSArIE1hdGgucG93KGFbMl0sIDIpICsgTWF0aC5wb3coYVszXSwgMikgKyBNYXRoLnBvdyhhWzRdLCAyKSArIE1hdGgucG93KGFbNV0sIDIpICsgMSkpXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbWF0MmQ7IiwiLyoqXHJcbiAqIEBmaWxlb3ZlcnZpZXcgZ2wtbWF0cml4IC0gSGlnaCBwZXJmb3JtYW5jZSBtYXRyaXggYW5kIHZlY3RvciBvcGVyYXRpb25zXHJcbiAqIEBhdXRob3IgQnJhbmRvbiBKb25lc1xyXG4gKiBAYXV0aG9yIENvbGluIE1hY0tlbnppZSBJVlxyXG4gKiBAdmVyc2lvbiAyLjIuMlxyXG4gKi9cclxuXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB2ZWMyIGZyb20gJy4vdmVjMic7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vdmVjMyc7XHJcbmltcG9ydCB2ZWM0IGZyb20gJy4vdmVjNCc7XHJcbmltcG9ydCBtYXQyIGZyb20gJy4vbWF0Mic7XHJcbmltcG9ydCBtYXQyZCBmcm9tICcuL21hdDJkJztcclxuaW1wb3J0IG1hdDMgZnJvbSAnLi9tYXQzJztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9tYXQ0JztcclxuaW1wb3J0IHF1YXQgZnJvbSAnLi9xdWF0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIHZlYzI6IHZlYzIsXHJcbiAgICB2ZWMzOiB2ZWMzLFxyXG4gICAgdmVjNDogdmVjNCxcclxuICAgIG1hdDI6IG1hdDIsXHJcbiAgICBtYXQyZDogbWF0MmQsXHJcbiAgICBtYXQzOiBtYXQzLFxyXG4gICAgbWF0NDogbWF0NCxcclxuICAgIHF1YXQ6IHF1YXRcclxufTtcclxuIiwiLy8gREVQUkVDQVRFRFxyXG5pbXBvcnQgZ2xtYXRyaXggZnJvbSAnLi4vZ2xtYXRyaXgnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZ2xtYXRyaXg7XHJcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuU3BoZXJlXHJcbiAqIEBleHRlbmRzIHtjbGF5LkxpZ2h0fVxyXG4gKi9cclxudmFyIFNwaGVyZUxpZ2h0ID0gTGlnaHQuZXh0ZW5kKFxyXG4vKiogQGxlbmRzIGNsYXkubGlnaHQuU3BoZXJlIyAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJhbmdlOiAxMDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYWRpdXM6IDVcclxufSwge1xyXG5cclxuICAgIHR5cGU6ICdTUEhFUkVfTElHSFQnLFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBzcGhlcmVMaWdodFBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BoZXJlTGlnaHRSYW5nZToge1xyXG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5yYW5nZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BoZXJlTGlnaHRSYWRpdXM6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmFkaXVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzcGhlcmVMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSppbnRlbnNpdHksIGNvbG9yWzFdKmludGVuc2l0eSwgY29sb3JbMl0qaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTcGhlcmVMaWdodDtcclxuIiwiaW1wb3J0IExpZ2h0IGZyb20gJy4uL0xpZ2h0JztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5saWdodC5UdWJlXHJcbiAqIEBleHRlbmRzIHtjbGF5LkxpZ2h0fVxyXG4gKi9cclxudmFyIFR1YmVMaWdodCA9IExpZ2h0LmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5LmxpZ2h0LlR1YmUjICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcmFuZ2U6IDEwMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogMTBcclxufSwge1xyXG5cclxuICAgIHR5cGU6ICdUVUJFX0xJR0hUJyxcclxuXHJcbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XHJcbiAgICAgICAgdHViZUxpZ2h0UG9zaXRpb246IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0V29ybGRQb3NpdGlvbigpLmFycmF5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdHViZUxpZ2h0RXh0ZW5kOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBFeHRlbmQgaW4geCBheGlzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguY29weShpbnN0YW5jZS53b3JsZFRyYW5zZm9ybS54KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubm9ybWFsaXplKCkuc2NhbGUoaW5zdGFuY2UubGVuZ3RoIC8gMikuYXJyYXk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KSgpXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdHViZUxpZ2h0UmFuZ2U6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmFuZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICB0dWJlTGlnaHRDb2xvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0qaW50ZW5zaXR5LCBjb2xvclsxXSppbnRlbnNpdHksIGNvbG9yWzJdKmludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVHViZUxpZ2h0O1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IGNyZWF0ZUNvbXBvc2l0b3IgZnJvbSAnLi4vY3JlYXRlQ29tcG9zaXRvcic7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubG9hZGVyLkZYXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgRlhMb2FkZXIgPSBCYXNlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkubG9hZGVyLkZYIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHJvb3RQYXRoOiAnJyxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGV4dHVyZVJvb3RQYXRoOiAnJyxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgc2hhZGVyUm9vdFBhdGg6ICcnLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuU2NlbmV9XHJcbiAgICAgKi9cclxuICAgIHNjZW5lOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuQ2FtZXJhfVxyXG4gICAgICovXHJcbiAgICBjYW1lcmE6IG51bGxcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LmxvYWRlci5GWC5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHVybFxyXG4gICAgICovXHJcbiAgICBsb2FkOiBmdW5jdGlvbih1cmwpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5yb290UGF0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnJvb3RQYXRoID0gdXJsLnNsaWNlKDAsIHVybC5sYXN0SW5kZXhPZignLycpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZlbmRvci5yZXF1ZXN0LmdldCh7XHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICBvbnByb2dyZXNzOiBmdW5jdGlvbihwZXJjZW50LCBsb2FkZWQsIHRvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3Byb2dyZXNzJywgcGVyY2VudCwgbG9hZGVkLCB0b3RhbCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uZXJyb3I6IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignZXJyb3InLCBlKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgIG9ubG9hZDogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGNyZWF0ZUNvbXBvc2l0b3IoSlNPTi5wYXJzZShkYXRhKSwge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHR1cmVSb290UGF0aDogdGhpcy50ZXh0dXJlUm9vdFBhdGggfHwgdGhpcy5yb290UGF0aCxcclxuICAgICAgICAgICAgICAgICAgICBjYW1lcmE6IHRoaXMuY2FtZXJhLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lOiB0aGlzLnNjZW5lXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZYTG9hZGVyO1xyXG4iLCJpbXBvcnQgbWF0MiBmcm9tICcuLi9nbG1hdHJpeC9tYXQyJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuTWF0cml4MlxyXG4gKi9cclxudmFyIE1hdHJpeDIgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JhZ2Ugb2YgTWF0cml4MlxyXG4gICAgICogQG5hbWUgYXJyYXlcclxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5NYXRyaXgyI1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFycmF5ID0gbWF0Mi5jcmVhdGUoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIF9kaXJ0eVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5NYXRyaXgyI1xyXG4gICAgICovXHJcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbn07XHJcblxyXG5NYXRyaXgyLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogTWF0cml4MixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBjb21wb25lbnRzIGZyb20gYXJyYXlcclxuICAgICAqIEBwYXJhbSAge0Zsb2F0MzJBcnJheXxudW1iZXJbXX0gYXJyXHJcbiAgICAgKi9cclxuICAgIHNldEFycmF5OiBmdW5jdGlvbiAoYXJyKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbaV0gPSBhcnJbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IE1hdHJpeDJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAobmV3IE1hdHJpeDIoKSkuY29weSh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGZyb20gYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQyLmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgYWRqdWdhdGUgb2Ygc2VsZiwgaW4tcGxhY2VcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgYWRqb2ludDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0Mi5hZGpvaW50KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgbWF0cml4IGRldGVybWluYW50XHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRldGVybWluYW50OiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbWF0Mi5kZXRlcm1pbmFudCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdG8gYSBpZGVudGl0eSBtYXRyaXhcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgaWRlbnRpdHk6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDIuaWRlbnRpdHkodGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydCBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIGludmVydDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0Mi5pbnZlcnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdXRpcGx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgbXVsOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0Mi5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseUxlZnRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBtdWxMZWZ0OiBmdW5jdGlvbihhKSB7XHJcbiAgICAgICAgbWF0Mi5tdWwodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDIubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IGEgYW5kIHNlbGYsIGEgaXMgb24gdGhlIGxlZnRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uKGEpIHtcclxuICAgICAgICBtYXQyLm11bHRpcGx5KHRoaXMuYXJyYXksIGEuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhblxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgIHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICByb3RhdGU6IGZ1bmN0aW9uKHJhZCkge1xyXG4gICAgICAgIG1hdDIucm90YXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHJhZCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHNlbGYgYnkgc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24odikge1xyXG4gICAgICAgIG1hdDIuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgdi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNwb3NlIHNlbGYsIGluLXBsYWNlLlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc3Bvc2U6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDIudHJhbnNwb3NlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7TWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge01hdHJpeDJ9IGFcclxuICogQHJldHVybiB7TWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIuYWRqb2ludCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0Mi5hZGpvaW50KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0Mi5jb3B5KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbk1hdHJpeDIuZGV0ZXJtaW5hbnQgPSBmdW5jdGlvbihhKSB7XHJcbiAgICByZXR1cm4gbWF0Mi5kZXRlcm1pbmFudChhLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IG91dFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICBtYXQyLmlkZW50aXR5KG91dC5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBtYXQyLmludmVydChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gKi9cclxuTWF0cml4Mi5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG1hdDIubXVsKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gKi9cclxuTWF0cml4Mi5tdWx0aXBseSA9IE1hdHJpeDIubXVsO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIucm90YXRlID0gZnVuY3Rpb24ob3V0LCBhLCByYWQpIHtcclxuICAgIG1hdDIucm90YXRlKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICBtYXQyLnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtNYXRyaXgyfSBvdXRcclxuICogQHBhcmFtICB7TWF0cml4Mn0gYVxyXG4gKiBAcmV0dXJuIHtNYXRyaXgyfVxyXG4gKi9cclxuTWF0cml4Mi50cmFuc3Bvc2UgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDIudHJhbnNwb3NlKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRyaXgyO1xyXG4iLCJpbXBvcnQgbWF0MmQgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0MmQnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5NYXRyaXgyZFxyXG4gKi9cclxudmFyIE1hdHJpeDJkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAvKipcclxuICAgICAqIFN0b3JhZ2Ugb2YgTWF0cml4MmRcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MmQjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSBtYXQyZC5jcmVhdGUoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIF9kaXJ0eVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5NYXRyaXgyZCNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuTWF0cml4MmQucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBNYXRyaXgyZCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBjb21wb25lbnRzIGZyb20gYXJyYXlcclxuICAgICAqIEBwYXJhbSAge0Zsb2F0MzJBcnJheXxudW1iZXJbXX0gYXJyXHJcbiAgICAgKi9cclxuICAgIHNldEFycmF5OiBmdW5jdGlvbiAoYXJyKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbaV0gPSBhcnJbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IE1hdHJpeDJkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgTWF0cml4MmQoKSkuY29weSh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGZyb20gYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDJkLmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBtYXRyaXggZGV0ZXJtaW5hbnRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGV0ZXJtaW5hbnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBtYXQyZC5kZXRlcm1pbmFudCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdG8gYSBpZGVudGl0eSBtYXRyaXhcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIGlkZW50aXR5OiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQyZC5pZGVudGl0eSh0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0IHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIGludmVydDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0MmQuaW52ZXJ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXV0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgbXVsOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0MmQubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBtdWxMZWZ0OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0MmQubXVsKHRoaXMuYXJyYXksIGIuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDJkLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBhIGFuZCBzZWxmLCBhIGlzIG9uIHRoZSBsZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQyZC5tdWx0aXBseSh0aGlzLmFycmF5LCBiLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW5cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gICByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZTogZnVuY3Rpb24ocmFkKSB7XHJcbiAgICAgICAgbWF0MmQucm90YXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHJhZCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHNlbGYgYnkgc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgc2NhbGU6IGZ1bmN0aW9uKHMpIHtcclxuICAgICAgICBtYXQyZC5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNsYXRlIHNlbGYgYnkgdlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgdlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgdHJhbnNsYXRlOiBmdW5jdGlvbih2KSB7XHJcbiAgICAgICAgbWF0MmQudHJhbnNsYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDJkLmNvcHkob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbk1hdHJpeDJkLmRldGVybWluYW50ID0gZnVuY3Rpb24oYSkge1xyXG4gICAgcmV0dXJuIG1hdDJkLmRldGVybWluYW50KGEuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcclxuICAgIG1hdDJkLmlkZW50aXR5KG91dC5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0MmQuaW52ZXJ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQubXVsID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBtYXQyZC5tdWwob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQubXVsdGlwbHkgPSBNYXRyaXgyZC5tdWw7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgIHJhZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQucm90YXRlID0gZnVuY3Rpb24ob3V0LCBhLCByYWQpIHtcclxuICAgIG1hdDJkLnJvdGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIG1hdDJkLnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQudHJhbnNsYXRlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICBtYXQyZC50cmFuc2xhdGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1hdHJpeDJkO1xyXG4iLCJpbXBvcnQgbWF0MyBmcm9tICcuLi9nbG1hdHJpeC9tYXQzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuTWF0cml4M1xyXG4gKi9cclxudmFyIE1hdHJpeDMgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIE1hdHJpeDNcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MyNcclxuICAgICAqL1xyXG4gICAgdGhpcy5hcnJheSA9IG1hdDMuY3JlYXRlKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MyNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuTWF0cml4My5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IE1hdHJpeDMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gYXJyW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGFkanVnYXRlIG9mIHNlbGYsIGluLXBsYWNlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGFkam9pbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBtYXQzLmFkam9pbnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IE1hdHJpeDNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gKG5ldyBNYXRyaXgzKCkpLmNvcHkodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIG1hdDMuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIG1hdHJpeCBkZXRlcm1pbmFudFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkZXRlcm1pbmFudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBtYXQzLmRldGVybWluYW50KHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIE1hdHJpeDJkIGFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDJkOiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIG1hdDMuZnJvbU1hdDJkKHRoaXMuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3BpZXMgdGhlIHVwcGVyLWxlZnQgM3gzIHZhbHVlcyBvZiBNYXRyaXg0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDQ6IGZ1bmN0aW9uIChhKSB7XHJcbiAgICAgICAgbWF0My5mcm9tTWF0NCh0aGlzLmFycmF5LCBhLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyBhIHJvdGF0aW9uIG1hdHJpeCBmcm9tIHRoZSBnaXZlbiBxdWF0ZXJuaW9uXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgZnJvbVF1YXQ6IGZ1bmN0aW9uIChxKSB7XHJcbiAgICAgICAgbWF0My5mcm9tUXVhdCh0aGlzLmFycmF5LCBxLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRvIGEgaWRlbnRpdHkgbWF0cml4XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGlkZW50aXR5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbWF0My5pZGVudGl0eSh0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0IHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgaW52ZXJ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbWF0My5pbnZlcnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdXRpcGx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgbXVsOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIG1hdDMubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgbXVsTGVmdDogZnVuY3Rpb24gKGEpIHtcclxuICAgICAgICBtYXQzLm11bCh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIG1hdDMubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IGEgYW5kIHNlbGYsIGEgaXMgb24gdGhlIGxlZnRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uIChhKSB7XHJcbiAgICAgICAgbWF0My5tdWx0aXBseSh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW5cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gICByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgcm90YXRlOiBmdW5jdGlvbiAocmFkKSB7XHJcbiAgICAgICAgbWF0My5yb3RhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgc2VsZiBieSBzXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9ICBzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbiAodikge1xyXG4gICAgICAgIG1hdDMuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgdi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zbGF0ZSBzZWxmIGJ5IHZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAodikge1xyXG4gICAgICAgIG1hdDMudHJhbnNsYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgYSAzeDMgbm9ybWFsIG1hdHJpeCAodHJhbnNwb3NlIGludmVyc2UpIGZyb20gdGhlIDR4NCBtYXRyaXhcclxuICAgICAqIEBwYXJhbSB7Y2xheS5NYXRyaXg0fSBhXHJcbiAgICAgKi9cclxuICAgIG5vcm1hbEZyb21NYXQ0OiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIG1hdDMubm9ybWFsRnJvbU1hdDQodGhpcy5hcnJheSwgYS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zcG9zZSBzZWxmLCBpbi1wbGFjZS5cclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgdHJhbnNwb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbWF0My50cmFuc3Bvc2UodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSk7XHJcbiAgICB9XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5hZGpvaW50ID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgbWF0My5hZGpvaW50KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuY29weSA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMuY29weShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5NYXRyaXgzLmRldGVybWluYW50ID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybiBtYXQzLmRldGVybWluYW50KGEuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuaWRlbnRpdHkgPSBmdW5jdGlvbiAob3V0KSB7XHJcbiAgICBtYXQzLmlkZW50aXR5KG91dC5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuaW52ZXJ0ID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgbWF0My5pbnZlcnQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLm11bCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIG1hdDMubXVsKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5tdWx0aXBseSA9IE1hdHJpeDMubXVsO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gIG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuZnJvbU1hdDJkID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgbWF0My5mcm9tTWF0MmQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5mcm9tTWF0NCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMuZnJvbU1hdDQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9ICAgIG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5mcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEpIHtcclxuICAgIG1hdDMuZnJvbVF1YXQob3V0LmFycmF5LCBxLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5ub3JtYWxGcm9tTWF0NCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMubm9ybWFsRnJvbU1hdDQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICBtYXQzLnJvdGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLnNjYWxlID0gZnVuY3Rpb24gKG91dCwgYSwgdikge1xyXG4gICAgbWF0My5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLnRyYW5zcG9zZSA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMudHJhbnNwb3NlKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHYpIHtcclxuICAgIG1hdDMudHJhbnNsYXRlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRyaXgzO1xyXG4iLCJpbXBvcnQgVmVjdG9yMyBmcm9tICcuL1ZlY3RvcjMnO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tICcuL1ZlY3RvcjInO1xyXG5cclxuLyoqXHJcbiAqIFJhbmRvbSBvciBjb25zdGFudCAxZCwgMmQsIDNkIHZlY3RvciBnZW5lcmF0b3JcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlZhbHVlXHJcbiAqL1xyXG52YXIgVmFsdWUgPSBmdW5jdGlvbigpIHt9O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcnxjbGF5LlZlY3RvcjJ8Y2xheS5WZWN0b3IzfSBbb3V0XVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ8Y2xheS5WZWN0b3IyfGNsYXkuVmVjdG9yM31cclxuICovXHJcblZhbHVlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihvdXQpIHt9O1xyXG5cclxuLy8gQ29uc3RhbnRcclxudmFyIENvbnN0YW50VmFsdWUgPSBmdW5jdGlvbih2YWwpIHtcclxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgIH07XHJcbn07XHJcbkNvbnN0YW50VmFsdWUucHJvdG90eXBlID0gbmV3IFZhbHVlKCk7XHJcbkNvbnN0YW50VmFsdWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29uc3RhbnRWYWx1ZTtcclxuXHJcbi8vIFZlY3RvclxyXG52YXIgVmVjdG9yVmFsdWUgPSBmdW5jdGlvbih2YWwpIHtcclxuICAgIHZhciBDb25zdHJ1Y3RvciA9IHZhbC5jb25zdHJ1Y3RvcjtcclxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IENvbnN0cnVjdG9yKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG91dC5jb3B5KHZhbCk7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH07XHJcbn07XHJcblZlY3RvclZhbHVlLnByb3RvdHlwZSA9IG5ldyBWYWx1ZSgpO1xyXG5WZWN0b3JWYWx1ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWZWN0b3JWYWx1ZTtcclxuLy9SYW5kb20gMURcclxudmFyIFJhbmRvbTFEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIHZhciByYW5nZSA9IG1heCAtIG1pbjtcclxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiByYW5nZSArIG1pbjtcclxuICAgIH07XHJcbn07XHJcblJhbmRvbTFELnByb3RvdHlwZSA9IG5ldyBWYWx1ZSgpO1xyXG5SYW5kb20xRC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSYW5kb20xRDtcclxuXHJcbi8vIFJhbmRvbTJEXHJcbnZhciBSYW5kb20yRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XHJcbiAgICB2YXIgcmFuZ2VYID0gbWF4LnggLSBtaW4ueDtcclxuICAgIHZhciByYW5nZVkgPSBtYXgueSAtIG1pbi55O1xyXG5cclxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgVmVjdG9yMi5zZXQoXHJcbiAgICAgICAgICAgIG91dCxcclxuICAgICAgICAgICAgcmFuZ2VYICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVswXSxcclxuICAgICAgICAgICAgcmFuZ2VZICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVsxXVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9O1xyXG59O1xyXG5SYW5kb20yRC5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcclxuUmFuZG9tMkQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZG9tMkQ7XHJcblxyXG52YXIgUmFuZG9tM0QgPSBmdW5jdGlvbihtaW4sIG1heCkge1xyXG4gICAgdmFyIHJhbmdlWCA9IG1heC54IC0gbWluLng7XHJcbiAgICB2YXIgcmFuZ2VZID0gbWF4LnkgLSBtaW4ueTtcclxuICAgIHZhciByYW5nZVogPSBtYXgueiAtIG1pbi56O1xyXG5cclxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgVmVjdG9yMy5zZXQoXHJcbiAgICAgICAgICAgIG91dCxcclxuICAgICAgICAgICAgcmFuZ2VYICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVswXSxcclxuICAgICAgICAgICAgcmFuZ2VZICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVsxXSxcclxuICAgICAgICAgICAgcmFuZ2VaICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVsyXVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9O1xyXG59O1xyXG5SYW5kb20zRC5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcclxuUmFuZG9tM0QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZG9tM0Q7XHJcblxyXG4vLyBGYWN0b3J5IG1ldGhvZHNcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBjb25zdGFudCAxZCB2YWx1ZSBnZW5lcmF0b3JcclxuICogQHBhcmFtICB7bnVtYmVyfSBjb25zdGFudFxyXG4gKiBAcmV0dXJuIHtjbGF5LlZhbHVlfVxyXG4gKi9cclxuVmFsdWUuY29uc3RhbnQgPSBmdW5jdGlvbihjb25zdGFudCkge1xyXG4gICAgcmV0dXJuIG5ldyBDb25zdGFudFZhbHVlKGNvbnN0YW50KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBjb25zdGFudCB2ZWN0b3IgdmFsdWUoMmQgb3IgM2QpIGdlbmVyYXRvclxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ8Y2xheS5WZWN0b3IzfSB2ZWN0b3JcclxuICogQHJldHVybiB7Y2xheS5WYWx1ZX1cclxuICovXHJcblZhbHVlLnZlY3RvciA9IGZ1bmN0aW9uKHZlY3Rvcikge1xyXG4gICAgcmV0dXJuIG5ldyBWZWN0b3JWYWx1ZSh2ZWN0b3IpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHJhbmRvbSAxZCB2YWx1ZSBnZW5lcmF0b3JcclxuICogQHBhcmFtICB7bnVtYmVyfSBtaW5cclxuICogQHBhcmFtICB7bnVtYmVyfSBtYXhcclxuICogQHJldHVybiB7Y2xheS5WYWx1ZX1cclxuICovXHJcblZhbHVlLnJhbmRvbTFEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIHJldHVybiBuZXcgUmFuZG9tMUQobWluLCBtYXgpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHJhbmRvbSAyZCB2YWx1ZSBnZW5lcmF0b3JcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBtaW5cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBtYXhcclxuICogQHJldHVybiB7Y2xheS5WYWx1ZX1cclxuICovXHJcblZhbHVlLnJhbmRvbTJEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIHJldHVybiBuZXcgUmFuZG9tMkQobWluLCBtYXgpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHJhbmRvbSAzZCB2YWx1ZSBnZW5lcmF0b3JcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBtaW5cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBtYXhcclxuICogQHJldHVybiB7Y2xheS5WYWx1ZX1cclxuICovXHJcblZhbHVlLnJhbmRvbTNEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIHJldHVybiBuZXcgUmFuZG9tM0QobWluLCBtYXgpO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVmFsdWU7XHJcbiIsImltcG9ydCB2ZWM0IGZyb20gJy4uL2dsbWF0cml4L3ZlYzQnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5WZWN0b3I0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB6XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XHJcbiAqL1xyXG52YXIgVmVjdG9yNCA9IGZ1bmN0aW9uKHgsIHksIHosIHcpIHtcclxuXHJcbiAgICB4ID0geCB8fCAwO1xyXG4gICAgeSA9IHkgfHwgMDtcclxuICAgIHogPSB6IHx8IDA7XHJcbiAgICB3ID0gdyB8fCAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcmFnZSBvZiBWZWN0b3I0LCByZWFkIGFuZCB3cml0ZSBvZiB4LCB5LCB6LCB3IHdpbGwgY2hhbmdlIHRoZSB2YWx1ZXMgaW4gYXJyYXlcclxuICAgICAqIEFsbCBtZXRob2RzIGFsc28gb3BlcmF0ZSBvbiB0aGUgYXJyYXkgaW5zdGVhZCBvZiB4LCB5LCB6LCB3IGNvbXBvbmVudHNcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yNCNcclxuICAgICAqL1xyXG4gICAgdGhpcy5hcnJheSA9IHZlYzQuZnJvbVZhbHVlcyh4LCB5LCB6LCB3KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpcnR5IGZsYWcgaXMgdXNlZCBieSB0aGUgTm9kZSB0byBkZXRlcm1pbmVcclxuICAgICAqIGlmIHRoZSBtYXRyaXggaXMgdXBkYXRlZCB0byBsYXRlc3RcclxuICAgICAqIEBuYW1lIF9kaXJ0eVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3I0I1xyXG4gICAgICovXHJcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbn07XHJcblxyXG5WZWN0b3I0LnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogVmVjdG9yNCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBiIHRvIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0LmFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50c1xyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgelxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgd1xyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKHgsIHksIHosIHcpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0geDtcclxuICAgICAgICB0aGlzLmFycmF5WzFdID0geTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gejtcclxuICAgICAgICB0aGlzLmFycmF5WzNdID0gdztcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHksIHogYW5kIHcgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24oYXJyKSB7XHJcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IGFyclswXTtcclxuICAgICAgICB0aGlzLmFycmF5WzFdID0gYXJyWzFdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMl0gPSBhcnJbMl07XHJcbiAgICAgICAgdGhpcy5hcnJheVszXSA9IGFyclszXTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IFZlY3RvcjRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yNCh0aGlzLngsIHRoaXMueSwgdGhpcy56LCB0aGlzLncpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgZnJvbSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIGRpc3RhbmNlXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGlzdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHJldHVybiB2ZWM0LmRpc3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzdGFuY2UgYmV0d2VlbiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGlzdGFuY2U6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5kaXN0YW5jZSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgZGl2aWRlXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgZGl2OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5kaXYodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpdmlkZSBzZWxmIGJ5IGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBkaXZpZGU6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0LmRpdmlkZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRG90IHByb2R1Y3Qgb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRvdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHJldHVybiB2ZWM0LmRvdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBvZiBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVuOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5sZW4odGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVuZ3RoOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5sZW5ndGgodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBMaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGEgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB0XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIGxlcnA6IGZ1bmN0aW9uKGEsIGIsIHQpIHtcclxuICAgICAgICB2ZWM0LmxlcnAodGhpcy5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgdCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1pbmltdW0gb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIG1pbjogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQubWluKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXhpbXVtIG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBtYXg6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0Lm1heCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgbXVsOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11dGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5tdWx0aXBseSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTmVnYXRlIHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgbmVnYXRlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2ZWM0Lm5lZ2F0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTm9ybWFsaXplIHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2ZWM0Lm5vcm1hbGl6ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgcmFuZG9tIHgsIHksIHosIHcgY29tcG9uZW50cyB3aXRoIGEgZ2l2ZW4gc2NhbGVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gc2NhbGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgcmFuZG9tOiBmdW5jdGlvbihzY2FsZSkge1xyXG4gICAgICAgIHZlYzQucmFuZG9tKHRoaXMuYXJyYXksIHNjYWxlKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgc2VsZlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgc2NhbGU6IGZ1bmN0aW9uKHMpIHtcclxuICAgICAgICB2ZWM0LnNjYWxlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHMpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIGIgYW5kIGFkZCB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlQW5kQWRkOiBmdW5jdGlvbihiLCBzKSB7XHJcbiAgICAgICAgdmVjNC5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5zcXJEaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZERpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQuc3F1YXJlZERpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkTGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQuc3FyTGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQuc3F1YXJlZExlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3Igc3VidHJhY3RcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBzdWI6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0LnN1Yih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgYiBmcm9tIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBzdWJ0cmFjdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQuc3VidHJhY3QodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXg0IG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQ0OiBmdW5jdGlvbihtKSB7XHJcbiAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgUXVhdGVybmlvbiBxXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtUXVhdDogZnVuY3Rpb24ocSkge1xyXG4gICAgICAgIHZlYzQudHJhbnNmb3JtUXVhdCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBxLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xyXG4vLyBHZXR0ZXIgYW5kIFNldHRlclxyXG5pZiAoZGVmaW5lUHJvcGVydHkpIHtcclxuXHJcbiAgICB2YXIgcHJvdG8gPSBWZWN0b3I0LnByb3RvdHlwZTtcclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgeFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzBdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVswXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yNFxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneScsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMV07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzFdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHpcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3I0XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd6Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVsyXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMl0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgd1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3cnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzNdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVszXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8vIFN1cHBseSBtZXRob2RzIHRoYXQgYXJlIG5vdCBpbiBwbGFjZVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5hZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzQuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHpcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHosIHcpIHtcclxuICAgIHZlYzQuc2V0KG91dC5hcnJheSwgeCwgeSwgeiwgdyk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBiKSB7XHJcbiAgICB2ZWM0LmNvcHkob3V0LmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQuZGlzdCA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHJldHVybiB2ZWM0LmRpc3RhbmNlKGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQuZGlzdGFuY2UgPSBWZWN0b3I0LmRpc3Q7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LmRpdiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjNC5kaXZpZGUob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LmRpdmlkZSA9IFZlY3RvcjQuZGl2O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yNC5kb3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjNC5kb3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQubGVuID0gZnVuY3Rpb24oYikge1xyXG4gICAgcmV0dXJuIHZlYzQubGVuZ3RoKGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLy8gVmVjdG9yNC5sZW5ndGggPSBWZWN0b3I0LmxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5sZXJwID0gZnVuY3Rpb24ob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2ZWM0LmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWM0Lm1pbihvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5tYXggPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzQubWF4KG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0Lm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjNC5tdWx0aXBseShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubXVsdGlwbHkgPSBWZWN0b3I0Lm11bDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5uZWdhdGUgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZlYzQubmVnYXRlKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2ZWM0Lm5vcm1hbGl6ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQucmFuZG9tID0gZnVuY3Rpb24ob3V0LCBzY2FsZSkge1xyXG4gICAgdmVjNC5yYW5kb20ob3V0LmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHNjYWxlKSB7XHJcbiAgICB2ZWM0LnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIHZlYzQuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LnNxckRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjNC5zcXJEaXN0KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQuc3F1YXJlZERpc3RhbmNlID0gVmVjdG9yNC5zcXJEaXN0O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LnNxckxlbiA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHJldHVybiB2ZWM0LnNxckxlbihhLmFycmF5KTtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yNC5zcXVhcmVkTGVuZ3RoID0gVmVjdG9yNC5zcXJMZW47XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LnN1YiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjNC5zdWJ0cmFjdChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5zdWJ0cmFjdCA9IFZlY3RvcjQuc3ViO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC50cmFuc2Zvcm1NYXQ0ID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2ZWM0LnRyYW5zZm9ybU1hdDQob3V0LmFycmF5LCBhLmFycmF5LCBtLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQudHJhbnNmb3JtUXVhdCA9IGZ1bmN0aW9uKG91dCwgYSwgcSkge1xyXG4gICAgdmVjNC50cmFuc2Zvcm1RdWF0KG91dC5hcnJheSwgYS5hcnJheSwgcS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBWZWN0b3I0O1xyXG4iLCJpbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkucGFydGljbGUuUGFydGljbGVcclxuICovXHJcbnZhciBQYXJ0aWNsZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZSBldWxlciBhbmdsZSB0byByZXByZXNlbnQgcGFydGljbGUgcm90YXRpb25cclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucm90YXRpb24gPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUgez9jbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMudmVsb2NpdHkgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUgez9jbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuYW5ndWxhclZlbG9jaXR5ID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubGlmZSA9IDE7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmFnZSA9IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnNwcml0ZVNpemUgPSAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy53ZWlnaHQgPSAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkucGFydGljbGUuRW1pdHRlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5lbWl0dGVyID0gbnVsbDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBVcGRhdGUgcGFydGljbGUgcG9zaXRpb25cclxuICogQHBhcmFtICB7bnVtYmVyfSBkZWx0YVRpbWVcclxuICovXHJcblBhcnRpY2xlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbihkZWx0YVRpbWUpIHtcclxuICAgIGlmICh0aGlzLnZlbG9jaXR5KSB7XHJcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZCh0aGlzLnBvc2l0aW9uLmFycmF5LCB0aGlzLnBvc2l0aW9uLmFycmF5LCB0aGlzLnZlbG9jaXR5LmFycmF5LCBkZWx0YVRpbWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYW5ndWxhclZlbG9jaXR5KSB7XHJcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZCh0aGlzLnJvdGF0aW9uLmFycmF5LCB0aGlzLnJvdGF0aW9uLmFycmF5LCB0aGlzLmFuZ3VsYXJWZWxvY2l0eS5hcnJheSwgZGVsdGFUaW1lKTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBhcnRpY2xlO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgUGFydGljbGUgZnJvbSAnLi9QYXJ0aWNsZSc7XHJcbmltcG9ydCBWYWx1ZSBmcm9tICcuLi9tYXRoL1ZhbHVlJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wYXJ0aWNsZS5FbWl0dGVyXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgRW1pdHRlciA9IEJhc2UuZXh0ZW5kKCAvKiogQGxlbmRzIGNsYXkucGFydGljbGUuRW1pdHRlciMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBNYXhpbXVtIG51bWJlciBvZiBwYXJ0aWNsZXMgY3JlYXRlZCBieSB0aGlzIGVtaXR0ZXJcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIG1heDogMTAwMCxcclxuICAgIC8qKlxyXG4gICAgICogTnVtYmVyIG9mIHBhcnRpY2xlcyBjcmVhdGVkIGJ5IHRoaXMgZW1pdHRlciBlYWNoIHNob3RcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGFtb3VudDogMjAsXHJcblxyXG4gICAgLy8gSW5pdCBzdGF0dXMgZm9yIGVhY2ggcGFydGljbGVcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgbGlmZSBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgbGlmZTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgcG9zaXRpb24gZ2VuZXJhdG9yXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmFsdWUuPGNsYXkuVmVjdG9yMz59XHJcbiAgICAgKi9cclxuICAgIHBvc2l0aW9uOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJ0aWNsZSByb3RhdGlvbiBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48Y2xheS5WZWN0b3IzPn1cclxuICAgICAqL1xyXG4gICAgcm90YXRpb246IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRpY2xlIHZlbG9jaXR5IGdlbmVyYXRvclxyXG4gICAgICogQHR5cGUgez9jbGF5LlZhbHVlLjxjbGF5LlZlY3RvcjM+fVxyXG4gICAgICovXHJcbiAgICB2ZWxvY2l0eTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgYW5ndWxhciB2ZWxvY2l0eSBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48Y2xheS5WZWN0b3IzPn1cclxuICAgICAqL1xyXG4gICAgYW5ndWxhclZlbG9jaXR5OiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJ0aWNsZSBzcHJpdGUgc2l6ZSBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgc3ByaXRlU2l6ZTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgd2VpZ2h0IGdlbmVyYXRvclxyXG4gICAgICogQHR5cGUgez9jbGF5LlZhbHVlLjxudW1iZXI+fVxyXG4gICAgICovXHJcbiAgICB3ZWlnaHQ6IG51bGwsXHJcblxyXG4gICAgX3BhcnRpY2xlUG9vbDogbnVsbFxyXG5cclxufSwgZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgdGhpcy5fcGFydGljbGVQb29sID0gW107XHJcblxyXG4gICAgLy8gVE9ETyBSZWR1Y2UgaGVhcCBtZW1vcnlcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXg7IGkrKykge1xyXG4gICAgICAgIHZhciBwYXJ0aWNsZSA9IG5ldyBQYXJ0aWNsZSgpO1xyXG4gICAgICAgIHBhcnRpY2xlLmVtaXR0ZXIgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuX3BhcnRpY2xlUG9vbC5wdXNoKHBhcnRpY2xlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmVsb2NpdHkpIHtcclxuICAgICAgICAgICAgcGFydGljbGUudmVsb2NpdHkgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5hbmd1bGFyVmVsb2NpdHkpIHtcclxuICAgICAgICAgICAgcGFydGljbGUuYW5ndWxhclZlbG9jaXR5ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEVtaXR0ZXIgbnVtYmVyIG9mIHBhcnRpY2xlcyBhbmQgcHVzaCB0aGVtIHRvIGEgZ2l2ZW4gcGFydGljbGUgbGlzdC4gRW1taXQgbnVtYmVyIGlzIGRlZmluZWQgYnkgYW1vdW50IHByb3BlcnR5XHJcbiAgICAgKiBAcGFyYW0gIHtBcnJheS48Y2xheS5wYXJ0aWNsZS5QYXJ0aWNsZT59IG91dFxyXG4gICAgICovXHJcbiAgICBlbWl0OiBmdW5jdGlvbihvdXQpIHtcclxuICAgICAgICB2YXIgYW1vdW50ID0gTWF0aC5taW4odGhpcy5fcGFydGljbGVQb29sLmxlbmd0aCwgdGhpcy5hbW91bnQpO1xyXG5cclxuICAgICAgICB2YXIgcGFydGljbGU7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBwYXJ0aWNsZSA9IHRoaXMuX3BhcnRpY2xlUG9vbC5wb3AoKTtcclxuICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBwYXJ0aWNsZSBzdGF0dXNcclxuICAgICAgICAgICAgaWYgKHRoaXMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24uZ2V0KHBhcnRpY2xlLnBvc2l0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGlvbi5nZXQocGFydGljbGUucm90YXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZlbG9jaXR5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZlbG9jaXR5LmdldChwYXJ0aWNsZS52ZWxvY2l0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuYW5ndWxhclZlbG9jaXR5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuZ3VsYXJWZWxvY2l0eS5nZXQocGFydGljbGUuYW5ndWxhclZlbG9jaXR5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5saWZlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZS5saWZlID0gdGhpcy5saWZlLmdldCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNwcml0ZVNpemUpIHtcclxuICAgICAgICAgICAgICAgIHBhcnRpY2xlLnNwcml0ZVNpemUgPSB0aGlzLnNwcml0ZVNpemUuZ2V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMud2VpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZS53ZWlnaHQgPSB0aGlzLndlaWdodC5nZXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYXJ0aWNsZS5hZ2UgPSAwO1xyXG5cclxuICAgICAgICAgICAgb3V0LnB1c2gocGFydGljbGUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEtpbGwgYSBkZWFkIHBhcnRpY2xlIGFuZCBwdXQgaXQgYmFjayBpbiB0aGUgcG9vbFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5wYXJ0aWNsZS5QYXJ0aWNsZX0gcGFydGljbGVcclxuICAgICAqL1xyXG4gICAga2lsbDogZnVuY3Rpb24ocGFydGljbGUpIHtcclxuICAgICAgICB0aGlzLl9wYXJ0aWNsZVBvb2wucHVzaChwYXJ0aWNsZSk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGNvbnN0YW50IDFkIHZhbHVlIGdlbmVyYXRvci4gQWxpYXMgZm9yIHtAbGluayBjbGF5LlZhbHVlLmNvbnN0YW50fVxyXG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLmNvbnN0YW50XHJcbiAqL1xyXG5FbWl0dGVyLmNvbnN0YW50ID0gVmFsdWUuY29uc3RhbnQ7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgY29uc3RhbnQgdmVjdG9yIHZhbHVlKDJkIG9yIDNkKSBnZW5lcmF0b3IuIEFsaWFzIGZvciB7QGxpbmsgY2xheS5WYWx1ZS52ZWN0b3J9XHJcbiAqIEBmdW5jdGlvbiBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIudmVjdG9yXHJcbiAqL1xyXG5FbWl0dGVyLnZlY3RvciA9IFZhbHVlLnZlY3RvcjtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gMWQgdmFsdWUgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkuVmFsdWUucmFuZG9tMUR9XHJcbiAqIEBmdW5jdGlvbiBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIucmFuZG9tMURcclxuICovXHJcbkVtaXR0ZXIucmFuZG9tMUQgPSBWYWx1ZS5yYW5kb20xRDtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gMmQgdmFsdWUgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkuVmFsdWUucmFuZG9tMkR9XHJcbiAqIEBmdW5jdGlvbiBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIucmFuZG9tMkRcclxuICovXHJcbkVtaXR0ZXIucmFuZG9tMkQgPSBWYWx1ZS5yYW5kb20yRDtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gM2QgdmFsdWUgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkuVmFsdWUucmFuZG9tM0R9XHJcbiAqIEBmdW5jdGlvbiBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIucmFuZG9tM0RcclxuICovXHJcbkVtaXR0ZXIucmFuZG9tM0QgPSBWYWx1ZS5yYW5kb20zRDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEVtaXR0ZXI7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wYXJ0aWNsZS5GaWVsZFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEZpZWxkID0gQmFzZS5leHRlbmQoe30sIHtcclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgYSBmaWVsZCB0byB0aGUgcGFydGljbGUgYW5kIHVwZGF0ZSB0aGUgcGFydGljbGUgdmVsb2NpdHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gdmVsb2NpdHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gcG9zaXRpb25cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gd2VpZ2h0XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGRlbHRhVGltZVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkucGFydGljbGUuRmllbGQucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGFwcGx5VG86IGZ1bmN0aW9uKHZlbG9jaXR5LCBwb3NpdGlvbiwgd2VpZ2h0LCBkZWx0YVRpbWUpIHt9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRmllbGQ7XHJcbiIsImltcG9ydCBGaWVsZCBmcm9tICcuL0ZpZWxkJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGFydGljbGUuRm9yY2VGaWVsZFxyXG4gKiBAZXh0ZW5kcyBjbGF5LnBhcnRpY2xlLkZpZWxkXHJcbiAqL1xyXG52YXIgRm9yY2VGaWVsZCA9IEZpZWxkLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZm9yY2U6IG5ldyBWZWN0b3IzKClcclxuICAgIH07XHJcbn0sIHtcclxuICAgIGFwcGx5VG86IGZ1bmN0aW9uKHZlbG9jaXR5LCBwb3NpdGlvbiwgd2VpZ2h0LCBkZWx0YVRpbWUpIHtcclxuICAgICAgICBpZiAod2VpZ2h0ID4gMCkge1xyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHZlbG9jaXR5LmFycmF5LCB2ZWxvY2l0eS5hcnJheSwgdGhpcy5mb3JjZS5hcnJheSwgZGVsdGFUaW1lIC8gd2VpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRm9yY2VGaWVsZDtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkucGFydGljbGUudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlldyA6IFdPUkxEVklFVztcXG51bmlmb3JtIG1hdDQgcHJvamVjdGlvbiA6IFBST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XFxuI2lmZGVmIFVWX0FOSU1BVElPTlxcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkMCA6IFRFWENPT1JEXzA7XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQxIDogVEVYQ09PUkRfMTtcXG52YXJ5aW5nIHZlYzIgdl9VdjA7XFxudmFyeWluZyB2ZWMyIHZfVXYxO1xcbiNlbmRpZlxcbnZhcnlpbmcgZmxvYXQgdl9BZ2U7XFxudm9pZCBtYWluKCkge1xcbiB2X0FnZSA9IG5vcm1hbC54O1xcbiBmbG9hdCByb3RhdGlvbiA9IG5vcm1hbC55O1xcbiB2ZWM0IHdvcmxkVmlld1Bvc2l0aW9uID0gd29ybGRWaWV3ICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogd29ybGRWaWV3UG9zaXRpb247XFxuIGZsb2F0IHcgPSBnbF9Qb3NpdGlvbi53O1xcbiBnbF9Qb2ludFNpemUgPSBub3JtYWwueiAqIHByb2plY3Rpb25bMF0ueCAvIHc7XFxuICNpZmRlZiBVVl9BTklNQVRJT05cXG4gdl9VdjAgPSB0ZXhjb29yZDA7XFxuIHZfVXYxID0gdGV4Y29vcmQxO1xcbiAjZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5wYXJ0aWNsZS5mcmFnbWVudFxcbnVuaWZvcm0gc2FtcGxlcjJEIHNwcml0ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudDtcXG51bmlmb3JtIHZlYzMgY29sb3IgOiBbMS4wLCAxLjAsIDEuMF07XFxudW5pZm9ybSBmbG9hdCBhbHBoYSA6IDEuMDtcXG52YXJ5aW5nIGZsb2F0IHZfQWdlO1xcbiNpZmRlZiBVVl9BTklNQVRJT05cXG52YXJ5aW5nIHZlYzIgdl9VdjA7XFxudmFyeWluZyB2ZWMyIHZfVXYxO1xcbiNlbmRpZlxcbnZvaWQgbWFpbigpIHtcXG4gdmVjNCBjb2xvciA9IHZlYzQoY29sb3IsIGFscGhhKTtcXG4gI2lmZGVmIFNQUklURV9FTkFCTEVEXFxuICNpZmRlZiBVVl9BTklNQVRJT05cXG4gY29sb3IgKj0gdGV4dHVyZTJEKHNwcml0ZSwgbWl4KHZfVXYwLCB2X1V2MSwgZ2xfUG9pbnRDb29yZCkpO1xcbiAjZWxzZVxcbiBjb2xvciAqPSB0ZXh0dXJlMkQoc3ByaXRlLCBnbF9Qb2ludENvb3JkKTtcXG4gI2VuZGlmXFxuICNlbmRpZlxcbiAjaWZkZWYgR1JBRElFTlRfRU5BQkxFRFxcbiBjb2xvciAqPSB0ZXh0dXJlMkQoZ3JhZGllbnQsIHZlYzIodl9BZ2UsIDAuNSkpO1xcbiAjZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcbkBlbmRcIjtcclxuIiwiaW1wb3J0IFJlbmRlcmFibGUgZnJvbSAnLi4vUmVuZGVyYWJsZSc7XHJcblxyXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcblxyXG5pbXBvcnQgcGFydGljbGVFc3NsIGZyb20gJy4vcGFydGljbGUuZ2xzbC5qcyc7XHJcblNoYWRlclsnaW1wb3J0J10ocGFydGljbGVFc3NsKTtcclxuXHJcbnZhciBwYXJ0aWNsZVNoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5wYXJ0aWNsZS52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5wYXJ0aWNsZS5mcmFnbWVudCcpKTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wYXJ0aWNsZS5QYXJ0aWNsZVJlbmRlcmFibGVcclxuICogQGV4dGVuZHMgY2xheS5SZW5kZXJhYmxlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICB2YXIgcGFydGljbGVSZW5kZXJhYmxlID0gbmV3IGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlKHtcclxuICogICAgICAgICBzcHJpdGVBbmltYXRpb25UaWxlWDogNCxcclxuICogICAgICAgICBzcHJpdGVBbmltYXRpb25UaWxlWTogNCxcclxuICogICAgICAgICBzcHJpdGVBbmltYXRpb25SZXBlYXQ6IDFcclxuICogICAgIH0pO1xyXG4gKiAgICAgc2NlbmUuYWRkKHBhcnRpY2xlUmVuZGVyYWJsZSk7XHJcbiAqICAgICAvLyBFbmFibGUgdXYgYW5pbWF0aW9uIGluIHRoZSBzaGFkZXJcclxuICogICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5tYXRlcmlhbC5kZWZpbmUoJ2JvdGgnLCAnVVZfQU5JTUFUSU9OJyk7XHJcbiAqICAgICB2YXIgRW1pdHRlciA9IGNsYXkucGFydGljbGUuRW1pdHRlcjtcclxuICogICAgIHZhciBWZWN0b3IzID0gY2xheS5WZWN0b3IzO1xyXG4gKiAgICAgdmFyIGVtaXR0ZXIgPSBuZXcgRW1pdHRlcih7XHJcbiAqICAgICAgICAgbWF4OiAyMDAwLFxyXG4gKiAgICAgICAgIGFtb3VudDogMTAwLFxyXG4gKiAgICAgICAgIGxpZmU6IEVtaXR0ZXIucmFuZG9tMUQoMTAsIDIwKSxcclxuICogICAgICAgICBwb3NpdGlvbjogRW1pdHRlci52ZWN0b3IobmV3IFZlY3RvcjMoKSksXHJcbiAqICAgICAgICAgdmVsb2NpdHk6IEVtaXR0ZXIucmFuZG9tM0QobmV3IFZlY3RvcjMoLTEwLCAwLCAtMTApLCBuZXcgVmVjdG9yMygxMCwgMCwgMTApKTtcclxuICogICAgIH0pO1xyXG4gKiAgICAgcGFydGljbGVSZW5kZXJhYmxlLmFkZEVtaXR0ZXIoZW1pdHRlcik7XHJcbiAqICAgICB2YXIgZ3Jhdml0eUZpZWxkID0gbmV3IGNsYXkucGFydGljbGUuRm9yY2VGaWVsZCgpO1xyXG4gKiAgICAgZ3Jhdml0eUZpZWxkLmZvcmNlLnkgPSAtMTA7XHJcbiAqICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuYWRkRmllbGQoZ3Jhdml0eUZpZWxkKTtcclxuICogICAgIC4uLlxyXG4gKiAgICAgYW5pbWF0aW9uLm9uKCdmcmFtZScsIGZ1bmN0aW9uKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS51cGRhdGVQYXJ0aWNsZXMoZnJhbWVUaW1lKTtcclxuICogICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAqICAgICB9KTtcclxuICovXHJcbnZhciBQYXJ0aWNsZVJlbmRlcmFibGUgPSBSZW5kZXJhYmxlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBsb29wOiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgb25lc2hvdDogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIER1cmF0aW9uIG9mIHBhcnRpY2xlIHN5c3RlbSBpbiBtaWxsaXNlY29uZHNcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGR1cmF0aW9uOiAxLFxyXG5cclxuICAgIC8vIFVWIEFuaW1hdGlvblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcHJpdGVBbmltYXRpb25UaWxlWDogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3ByaXRlQW5pbWF0aW9uVGlsZVk6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNwcml0ZUFuaW1hdGlvblJlcGVhdDogMCxcclxuXHJcbiAgICBtb2RlOiBSZW5kZXJhYmxlLlBPSU5UUyxcclxuXHJcbiAgICBpZ25vcmVQaWNraW5nOiB0cnVlLFxyXG5cclxuICAgIF9lbGFwc2VkVGltZTogMCxcclxuXHJcbiAgICBfZW1pdHRpbmc6IHRydWVcclxuXHJcbn0sIGZ1bmN0aW9uKCl7XHJcblxyXG4gICAgdGhpcy5nZW9tZXRyeSA9IG5ldyBHZW9tZXRyeSh7XHJcbiAgICAgICAgZHluYW1pYzogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogcGFydGljbGVTaGFkZXIsXHJcbiAgICAgICAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAgICAgICAgICBkZXB0aE1hc2s6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwuZW5hYmxlVGV4dHVyZSgnc3ByaXRlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcGFydGljbGVzID0gW107XHJcbiAgICB0aGlzLl9maWVsZHMgPSBbXTtcclxuICAgIHRoaXMuX2VtaXR0ZXJzID0gW107XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5wYXJ0aWNsZS5QYXJ0aWNsZVJlbmRlcmFibGUucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICBjdWxsaW5nOiBmYWxzZSxcclxuXHJcbiAgICBmcnVzdHVtQ3VsbGluZzogZmFsc2UsXHJcblxyXG4gICAgY2FzdFNoYWRvdzogZmFsc2UsXHJcbiAgICByZWNlaXZlU2hhZG93OiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBlbWl0dGVyXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkucGFydGljbGUuRW1pdHRlcn0gZW1pdHRlclxyXG4gICAgICovXHJcbiAgICBhZGRFbWl0dGVyOiBmdW5jdGlvbihlbWl0dGVyKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdHRlcnMucHVzaChlbWl0dGVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgZW1pdHRlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LnBhcnRpY2xlLkVtaXR0ZXJ9IGVtaXR0ZXJcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlRW1pdHRlcjogZnVuY3Rpb24oZW1pdHRlcikge1xyXG4gICAgICAgIHRoaXMuX2VtaXR0ZXJzLnNwbGljZSh0aGlzLl9lbWl0dGVycy5pbmRleE9mKGVtaXR0ZXIpLCAxKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgZmllbGRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5wYXJ0aWNsZS5GaWVsZH0gZmllbGRcclxuICAgICAqL1xyXG4gICAgYWRkRmllbGQ6IGZ1bmN0aW9uKGZpZWxkKSB7XHJcbiAgICAgICAgdGhpcy5fZmllbGRzLnB1c2goZmllbGQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBmaWVsZFxyXG4gICAgICogQHBhcmFtIHtjbGF5LnBhcnRpY2xlLkZpZWxkfSBmaWVsZFxyXG4gICAgICovXHJcbiAgICByZW1vdmVGaWVsZDogZnVuY3Rpb24oZmllbGQpIHtcclxuICAgICAgICB0aGlzLl9maWVsZHMuc3BsaWNlKHRoaXMuX2ZpZWxkcy5pbmRleE9mKGZpZWxkKSwgMSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXQgdGhlIHBhcnRpY2xlIHN5c3RlbS5cclxuICAgICAqL1xyXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vIFB1dCBhbGwgdGhlIHBhcnRpY2xlcyBiYWNrXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHAgPSB0aGlzLl9wYXJ0aWNsZXNbaV07XHJcbiAgICAgICAgICAgIHAuZW1pdHRlci5raWxsKHApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XHJcbiAgICAgICAgdGhpcy5fZW1pdHRpbmcgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gZGVsdGFUaW1lXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVBhcnRpY2xlczogZnVuY3Rpb24oZGVsdGFUaW1lKSB7XHJcblxyXG4gICAgICAgIC8vIE1TID0+IFNlY29uZHNcclxuICAgICAgICBkZWx0YVRpbWUgLz0gMTAwMDtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSArPSBkZWx0YVRpbWU7XHJcblxyXG4gICAgICAgIHZhciBwYXJ0aWNsZXMgPSB0aGlzLl9wYXJ0aWNsZXM7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9lbWl0dGluZykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2VtaXR0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0dGVyc1tpXS5lbWl0KHBhcnRpY2xlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMub25lc2hvdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQWdpbmdcclxuICAgICAgICB2YXIgbGVuID0gcGFydGljbGVzLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjspIHtcclxuICAgICAgICAgICAgdmFyIHAgPSBwYXJ0aWNsZXNbaV07XHJcbiAgICAgICAgICAgIHAuYWdlICs9IGRlbHRhVGltZTtcclxuICAgICAgICAgICAgaWYgKHAuYWdlID49IHAubGlmZSkge1xyXG4gICAgICAgICAgICAgICAgcC5lbWl0dGVyLmtpbGwocCk7XHJcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZXNbaV0gPSBwYXJ0aWNsZXNbbGVuLTFdO1xyXG4gICAgICAgICAgICAgICAgcGFydGljbGVzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgbGVuLS07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gVXBkYXRlXHJcbiAgICAgICAgICAgIHZhciBwID0gcGFydGljbGVzW2ldO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fZmllbGRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmllbGRzW2pdLmFwcGx5VG8ocC52ZWxvY2l0eSwgcC5wb3NpdGlvbiwgcC53ZWlnaHQsIGRlbHRhVGltZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcC51cGRhdGUoZGVsdGFUaW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVZlcnRpY2VzKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVWZXJ0aWNlczogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcclxuICAgICAgICAvLyBJZiBoYXMgdXYgYW5pbWF0aW9uXHJcbiAgICAgICAgdmFyIGFuaW1UaWxlWCA9IHRoaXMuc3ByaXRlQW5pbWF0aW9uVGlsZVg7XHJcbiAgICAgICAgdmFyIGFuaW1UaWxlWSA9IHRoaXMuc3ByaXRlQW5pbWF0aW9uVGlsZVk7XHJcbiAgICAgICAgdmFyIGFuaW1SZXBlYXQgPSB0aGlzLnNwcml0ZUFuaW1hdGlvblJlcGVhdDtcclxuICAgICAgICB2YXIgblV2QW5pbUZyYW1lID0gYW5pbVRpbGVZICogYW5pbVRpbGVYICogYW5pbVJlcGVhdDtcclxuICAgICAgICB2YXIgaGFzVXZBbmltYXRpb24gPSBuVXZBbmltRnJhbWUgPiAxO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIC8vIFB1dCBwYXJ0aWNsZSBzdGF0dXMgaW4gbm9ybWFsXHJcbiAgICAgICAgdmFyIG5vcm1hbHMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZTtcclxuICAgICAgICB2YXIgdXZzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDAudmFsdWU7XHJcbiAgICAgICAgdmFyIHV2czIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMS52YWx1ZTtcclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IHRoaXMuX3BhcnRpY2xlcy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKCFwb3NpdGlvbnMgfHwgcG9zaXRpb25zLmxlbmd0aCAhPT0gbGVuICogMykge1xyXG4gICAgICAgICAgICAvLyBUT0RPIE9wdGltaXplXHJcbiAgICAgICAgICAgIHBvc2l0aW9ucyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KGxlbiAqIDMpO1xyXG4gICAgICAgICAgICBub3JtYWxzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KGxlbiAqIDMpO1xyXG4gICAgICAgICAgICBpZiAoaGFzVXZBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHV2cyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMudGV4Y29vcmQwLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShsZW4gKiAyKTtcclxuICAgICAgICAgICAgICAgIHV2czIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMS52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkobGVuICogMik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpbnZBbmltVGlsZVggPSAxIC8gYW5pbVRpbGVYO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHBhcnRpY2xlID0gdGhpcy5fcGFydGljbGVzW2ldO1xyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gaSAqIDM7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMzsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnNbb2Zmc2V0ICsgal0gPSBwYXJ0aWNsZS5wb3NpdGlvbi5hcnJheVtqXTtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbb2Zmc2V0XSA9IHBhcnRpY2xlLmFnZSAvIHBhcnRpY2xlLmxpZmU7XHJcbiAgICAgICAgICAgICAgICAvLyBub3JtYWxzW29mZnNldCArIDFdID0gcGFydGljbGUucm90YXRpb247XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW29mZnNldCArIDFdID0gMDtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbb2Zmc2V0ICsgMl0gPSBwYXJ0aWNsZS5zcHJpdGVTaXplO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBvZmZzZXQyID0gaSAqIDI7XHJcbiAgICAgICAgICAgIGlmIChoYXNVdkFuaW1hdGlvbikge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICAgICAgdmFyIHAgPSBwYXJ0aWNsZS5hZ2UgLyBwYXJ0aWNsZS5saWZlO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0YWdlID0gTWF0aC5yb3VuZChwICogKG5VdkFuaW1GcmFtZSAtIDEpKSAqIGFuaW1SZXBlYXQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgdiA9IE1hdGguZmxvb3Ioc3RhZ2UgKiBpbnZBbmltVGlsZVgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHUgPSBzdGFnZSAtIHYgKiBhbmltVGlsZVg7XHJcbiAgICAgICAgICAgICAgICB1dnNbb2Zmc2V0Ml0gPSB1IC8gYW5pbVRpbGVYO1xyXG4gICAgICAgICAgICAgICAgdXZzW29mZnNldDIgKyAxXSA9IDEgLSB2IC8gYW5pbVRpbGVZO1xyXG4gICAgICAgICAgICAgICAgdXZzMltvZmZzZXQyXSA9ICh1ICsgMSkgLyBhbmltVGlsZVg7XHJcbiAgICAgICAgICAgICAgICB1dnMyW29mZnNldDIgKyAxXSA9IDEgLSAodiArIDEpIC8gYW5pbVRpbGVZO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZW9tZXRyeS5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzRmluaXNoZWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9lbGFwc2VkVGltZSA+IHRoaXMuZHVyYXRpb24gJiYgIXRoaXMubG9vcDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbihyZW5kZXJlcikge1xyXG4gICAgICAgIC8vIFB1dCBhbGwgdGhlIHBhcnRpY2xlcyBiYWNrXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHAgPSB0aGlzLl9wYXJ0aWNsZXNbaV07XHJcbiAgICAgICAgICAgIHAuZW1pdHRlci5raWxsKHApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdlb21ldHJ5LmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIC8vIFRPRE8gRGlzcG9zZSB0ZXh0dXJlID9cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LnBhcnRpY2xlLlBhcnRpY2xlUmVuZGVyYWJsZX1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBwYXJ0aWNsZVJlbmRlcmFibGUgPSBuZXcgUGFydGljbGVSZW5kZXJhYmxlKHtcclxuICAgICAgICAgICAgbWF0ZXJpYWw6IHRoaXMubWF0ZXJpYWxcclxuICAgICAgICB9KTtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUubG9vcCA9IHRoaXMubG9vcDtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuZHVyYXRpb24gPSB0aGlzLmR1cmF0aW9uO1xyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5vbmVzaG90ID0gdGhpcy5vbmVzaG90O1xyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5zcHJpdGVBbmltYXRpb25SZXBlYXQgPSB0aGlzLnNwcml0ZUFuaW1hdGlvblJlcGVhdDtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuc3ByaXRlQW5pbWF0aW9uVGlsZVkgPSB0aGlzLnNwcml0ZUFuaW1hdGlvblRpbGVZO1xyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5zcHJpdGVBbmltYXRpb25UaWxlWCA9IHRoaXMuc3ByaXRlQW5pbWF0aW9uVGlsZVg7XHJcblxyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5wb3NpdGlvbi5jb3B5KHRoaXMucG9zaXRpb24pO1xyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5yb3RhdGlvbi5jb3B5KHRoaXMucm90YXRpb24pO1xyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5zY2FsZS5jb3B5KHRoaXMuc2NhbGUpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5hZGQodGhpcy5fY2hpbGRyZW5baV0uY2xvbmUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXJ0aWNsZVJlbmRlcmFibGU7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGFydGljbGVSZW5kZXJhYmxlO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5waWNraW5nLmNvbG9yLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52b2lkIG1haW4oKXtcXG4gdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4gI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiAjZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxufVxcbkBlbmRcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnBpY2tpbmcuY29sb3IuZnJhZ21lbnRcXG51bmlmb3JtIHZlYzQgY29sb3IgOiBbMS4wLCAxLjAsIDEuMCwgMS4wXTtcXG52b2lkIG1haW4oKSB7XFxuIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5cclxuaW1wb3J0IGNvbG9yRXNzbCBmcm9tICcuL2NvbG9yLmdsc2wuanMnO1xyXG5TaGFkZXIuaW1wb3J0KGNvbG9yRXNzbCk7XHJcblxyXG4vKipcclxuICogUGl4ZWwgcGlja2luZyBpcyBncHUgYmFzZWQgcGlja2luZywgd2hpY2ggaXMgZmFzdCBhbmQgYWNjdXJhdGUuXHJcbiAqIEJ1dCBub3QgbGlrZSByYXkgcGlja2luZywgaXQgY2FuJ3QgZ2V0IHRoZSBpbnRlcnNlY3Rpb24gcG9pbnQgYW5kIHRyaWFuZ2xlLlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5waWNraW5nLlBpeGVsUGlja2luZ1xyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIFBpeGVsUGlja2luZyA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5waWNraW5nLlBpeGVsUGlja2luZyMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRhcmdldCByZW5kZXJlclxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlJlbmRlcmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlbmRlcmVyOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERvd25zYW1wbGUgcmF0aW8gb2YgaGlkZGVuIGZyYW1lIGJ1ZmZlclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZG93blNhbXBsZVJhdGlvOiAxLFxyXG5cclxuICAgICAgICB3aWR0aDogMTAwLFxyXG4gICAgICAgIGhlaWdodDogMTAwLFxyXG5cclxuICAgICAgICBsb29rdXBPZmZzZXQ6IDEsXHJcblxyXG4gICAgICAgIF9mcmFtZUJ1ZmZlcjogbnVsbCxcclxuICAgICAgICBfdGV4dHVyZTogbnVsbCxcclxuICAgICAgICBfc2hhZGVyOiBudWxsLFxyXG5cclxuICAgICAgICBfaWRNYXRlcmlhbHM6IFtdLFxyXG4gICAgICAgIF9sb29rdXBUYWJsZTogW10sXHJcblxyXG4gICAgICAgIF9tZXNoTWF0ZXJpYWxzOiBbXSxcclxuXHJcbiAgICAgICAgX2lkT2Zmc2V0OiAwXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMucmVuZGVyZXIuZ2V0V2lkdGgoKTtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuZ2V0SGVpZ2h0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pbml0KCk7XHJcbn0sIC8qKiBAbGVuZHMgY2xheS5waWNraW5nLlBpeGVsUGlja2luZy5wcm90b3R5cGUgKi8ge1xyXG4gICAgX2luaXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGggKiB0aGlzLmRvd25TYW1wbGVSYXRpbyxcclxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCAqIHRoaXMuZG93blNhbXBsZVJhdGlvXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2hhZGVyID0gbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LnBpY2tpbmcuY29sb3IudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucGlja2luZy5jb2xvci5mcmFnbWVudCcpKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFNldCBwaWNraW5nIHByZXNpc2lvblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhdGlvXHJcbiAgICAgKi9cclxuICAgIHNldFByZWNpc2lvbjogZnVuY3Rpb24ocmF0aW8pIHtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlLndpZHRoID0gdGhpcy53aWR0aCAqIHJhdGlvO1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgKiByYXRpbztcclxuICAgICAgICB0aGlzLmRvd25TYW1wbGVSYXRpbyA9IHJhdGlvO1xyXG4gICAgfSxcclxuICAgIHJlc2l6ZTogZnVuY3Rpb24od2lkdGgsIGhlaWdodCkge1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmUud2lkdGggPSB3aWR0aCAqIHRoaXMuZG93blNhbXBsZVJhdGlvO1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5kb3duU2FtcGxlUmF0aW87XHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmUuZGlydHkoKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0aGUgcGlja2luZyBmcmFtZWJ1ZmZlclxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhdGlvXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24oc2NlbmUsIGNhbWVyYSkge1xyXG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcbiAgICAgICAgaWYgKHJlbmRlcmVyLmdldFdpZHRoKCkgIT09IHRoaXMud2lkdGggfHwgcmVuZGVyZXIuZ2V0SGVpZ2h0KCkgIT09IHRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzaXplKHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRoaXMuX3RleHR1cmUpO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2lkT2Zmc2V0ID0gdGhpcy5sb29rdXBPZmZzZXQ7XHJcbiAgICAgICAgdGhpcy5fc2V0TWF0ZXJpYWwoc2NlbmUpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTtcclxuICAgICAgICB0aGlzLl9yZXN0b3JlTWF0ZXJpYWwoKTtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfc2V0TWF0ZXJpYWw6IGZ1bmN0aW9uKHJvb3QpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0wOyBpIDwgcm9vdC5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkID0gcm9vdC5fY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5nZW9tZXRyeSAmJiBjaGlsZC5tYXRlcmlhbCAmJiBjaGlsZC5tYXRlcmlhbC5zaGFkZXIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpZCA9IHRoaXMuX2lkT2Zmc2V0Kys7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gaWQgLSB0aGlzLmxvb2t1cE9mZnNldDtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IHRoaXMuX2lkTWF0ZXJpYWxzW2lkeF07XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXI6IHRoaXMuX3NoYWRlclxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IHBhY2tJRChpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3JbMF0gLz0gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yWzFdIC89IDI1NTtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvclsyXSAvPSAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3JbM10gPSAxLjA7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdjb2xvcicsIGNvbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pZE1hdGVyaWFsc1tpZHhdID0gbWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXNoTWF0ZXJpYWxzW2lkeF0gPSBjaGlsZC5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvb2t1cFRhYmxlW2lkeF0gPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgIGNoaWxkLm1hdGVyaWFsID0gbWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNoaWxkLl9jaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldE1hdGVyaWFsKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaWNrIHRoZSBvYmplY3RcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0geCBNb3VzZSBwb3NpdGlvbiB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHkgTW91c2UgcG9zaXRpb24geVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICBwaWNrOiBmdW5jdGlvbih4LCB5KSB7XHJcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcclxuXHJcbiAgICAgICAgdmFyIHJhdGlvID0gdGhpcy5kb3duU2FtcGxlUmF0aW87XHJcbiAgICAgICAgeCA9IE1hdGguY2VpbChyYXRpbyAqIHgpO1xyXG4gICAgICAgIHkgPSBNYXRoLmNlaWwocmF0aW8gKiAodGhpcy5oZWlnaHQgLSB5KSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgIHZhciBwaXhlbCA9IG5ldyBVaW50OEFycmF5KDQpO1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICAvLyBUT0RPIG91dCBvZiBib3VuZHMgP1xyXG4gICAgICAgIC8vIHByZXNlcnZlRHJhd2luZ0J1ZmZlciA/XHJcbiAgICAgICAgX2dsLnJlYWRQaXhlbHMoeCwgeSwgMSwgMSwgX2dsLlJHQkEsIF9nbC5VTlNJR05FRF9CWVRFLCBwaXhlbCk7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAvLyBTa2lwIGludGVycG9sYXRlZCBwaXhlbCBiZWNhdXNlIG9mIGFudGkgYWxpYXNcclxuICAgICAgICBpZiAocGl4ZWxbM10gPT09IDI1NSkge1xyXG4gICAgICAgICAgICB2YXIgaWQgPSB1bnBhY2tJRChwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdKTtcclxuICAgICAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZWwgPSB0aGlzLl9sb29rdXBUYWJsZVtpZCAtIHRoaXMubG9va3VwT2Zmc2V0XTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3Jlc3RvcmVNYXRlcmlhbDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9sb29rdXBUYWJsZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9sb29rdXBUYWJsZVtpXS5tYXRlcmlhbCA9IHRoaXMuX21lc2hNYXRlcmlhbHNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbihyZW5kZXJlcikge1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmZ1bmN0aW9uIHBhY2tJRChpZCl7XHJcbiAgICB2YXIgciA9IGlkID4+IDE2O1xyXG4gICAgdmFyIGcgPSAoaWQgLSAociA8PCA4KSkgPj4gODtcclxuICAgIHZhciBiID0gaWQgLSAociA8PCAxNikgLSAoZzw8OCk7XHJcbiAgICByZXR1cm4gW3IsIGcsIGJdO1xyXG59XHJcblxyXG5mdW5jdGlvbiB1bnBhY2tJRChyLCBnLCBiKXtcclxuICAgIHJldHVybiAociA8PCAxNikgKyAoZzw8OCkgKyBiO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQaXhlbFBpY2tpbmc7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5cclxudmFyIGRvYyA9IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgPyB7fSA6IGRvY3VtZW50O1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBsdWdpbi5GcmVlQ29udHJvbFxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgdmFyIGNvbnRyb2wgPSBuZXcgY2xheS5wbHVnaW4uRnJlZUNvbnRyb2woe1xyXG4gKiAgICAgICAgIHRhcmdldDogY2FtZXJhLFxyXG4gKiAgICAgICAgIGRvbUVsZW1lbnQ6IHJlbmRlcmVyLmNhbnZhc1xyXG4gKiAgICAgfSk7XHJcbiAqICAgICAuLi5cclxuICogICAgIHRpbWVsaW5lLm9uKCdmcmFtZScsIGZ1bmN0aW9uKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgIGNvbnRyb2wudXBkYXRlKGZyYW1lVGltZSk7XHJcbiAqICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xyXG4gKiAgICAgfSk7XHJcbiAqL1xyXG52YXIgRnJlZUNvbnRyb2wgPSBCYXNlLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkucGx1Z2luLkZyZWVDb250cm9sIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2NlbmUgbm9kZSB0byBjb250cm9sLCBtb3N0bHkgaXQgaXMgYSBjYW1lcmFcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRhcmdldDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGFyZ2V0IGRvbSB0byBiaW5kIHdpdGggbW91c2UgZXZlbnRzXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRvbUVsZW1lbnQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1vdXNlIG1vdmUgc2Vuc2l0aXZpdHlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNlbnNpdGl2aXR5OiAxLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUYXJnZXQgbW92ZSBzcGVlZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc3BlZWQ6IDAuNCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVXAgYXhpc1xyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdXA6IG5ldyBWZWN0b3IzKDAsIDEsIDApLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBsb2NrIHZlcnRpY2FsIG1vdmVtZW50XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdmVydGljYWxNb3ZlTG9jazogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRpbWVsaW5lfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRpbWVsaW5lOiBudWxsLFxyXG5cclxuICAgICAgICBfbW92ZUZvcndhcmQ6IGZhbHNlLFxyXG4gICAgICAgIF9tb3ZlQmFja3dhcmQ6IGZhbHNlLFxyXG4gICAgICAgIF9tb3ZlTGVmdDogZmFsc2UsXHJcbiAgICAgICAgX21vdmVSaWdodDogZmFsc2UsXHJcblxyXG4gICAgICAgIF9vZmZzZXRQaXRjaDogMCxcclxuICAgICAgICBfb2Zmc2V0Um9sbDogMFxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLl9sb2NrQ2hhbmdlID0gdGhpcy5fbG9ja0NoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fa2V5RG93biA9IHRoaXMuX2tleURvd24uYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX2tleVVwID0gdGhpcy5fa2V5VXAuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX21vdXNlTW92ZSA9IHRoaXMuX21vdXNlTW92ZS5iaW5kKHRoaXMpO1xyXG5cclxuICAgIGlmICh0aGlzLmRvbUVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5GcmVlQ29udHJvbC5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBpbml0IGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgaW5pdDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gVXNlIHBvaW50ZXIgbG9ja1xyXG4gICAgICAgIC8vIGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL3BvaW50ZXJsb2NrL2ludHJvL1xyXG4gICAgICAgIHZhciBlbCA9IHRoaXMuZG9tRWxlbWVudDtcclxuXHJcbiAgICAgICAgLy9NdXN0IHJlcXVlc3QgcG9pbnRlciBsb2NrIGFmdGVyIGNsaWNrIGV2ZW50LCBjYW4ndCBub3QgZG8gaXQgZGlyZWN0bHlcclxuICAgICAgICAvL1doeSA/ID9cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ2NsaWNrJywgdGhpcy5fcmVxdWVzdFBvaW50ZXJMb2NrKTtcclxuXHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9jLCAncG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLl9sb2NrQ2hhbmdlKTtcclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb2MsICdtb3pwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvYywgJ3dlYmtpdHBvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5fbG9ja0NoYW5nZSk7XHJcblxyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvYywgJ2tleWRvd24nLCB0aGlzLl9rZXlEb3duKTtcclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb2MsICdrZXl1cCcsIHRoaXMuX2tleVVwKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGltZWxpbmUpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lbGluZS5vbignZnJhbWUnLCB0aGlzLl9kZXRlY3RNb3ZlbWVudENoYW5nZSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgY29udHJvbFxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIGVsID0gdGhpcy5kb21FbGVtZW50O1xyXG5cclxuICAgICAgICBlbC5leGl0UG9pbnRlckxvY2sgPSBlbC5leGl0UG9pbnRlckxvY2tcclxuICAgICAgICAgICAgfHwgZWwubW96RXhpdFBvaW50ZXJMb2NrXHJcbiAgICAgICAgICAgIHx8IGVsLndlYmtpdEV4aXRQb2ludGVyTG9jaztcclxuXHJcbiAgICAgICAgaWYgKGVsLmV4aXRQb2ludGVyTG9jaykge1xyXG4gICAgICAgICAgICBlbC5leGl0UG9pbnRlckxvY2soKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGVsLCAnY2xpY2snLCB0aGlzLl9yZXF1ZXN0UG9pbnRlckxvY2spO1xyXG5cclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2MsICdwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvYywgJ21venBvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5fbG9ja0NoYW5nZSk7XHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9jLCAnd2Via2l0cG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLl9sb2NrQ2hhbmdlKTtcclxuXHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9jLCAna2V5ZG93bicsIHRoaXMuX2tleURvd24pO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvYywgJ2tleXVwJywgdGhpcy5fa2V5VXApO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aW1lbGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lLm9mZignZnJhbWUnLCB0aGlzLl9kZXRlY3RNb3ZlbWVudENoYW5nZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfcmVxdWVzdFBvaW50ZXJMb2NrOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgZWwgPSB0aGlzO1xyXG4gICAgICAgIGVsLnJlcXVlc3RQb2ludGVyTG9jayA9IGVsLnJlcXVlc3RQb2ludGVyTG9ja1xyXG4gICAgICAgICAgICB8fCBlbC5tb3pSZXF1ZXN0UG9pbnRlckxvY2tcclxuICAgICAgICAgICAgfHwgZWwud2Via2l0UmVxdWVzdFBvaW50ZXJMb2NrO1xyXG5cclxuICAgICAgICBlbC5yZXF1ZXN0UG9pbnRlckxvY2soKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250cm9sIHVwZGF0ZS4gU2hvdWxkIGJlIGludm9rZWQgZXZlcnkgZnJhbWVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcmFtZVRpbWUgRnJhbWUgdGltZVxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChmcmFtZVRpbWUpIHtcclxuICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XHJcblxyXG4gICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMudGFyZ2V0LnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS54Lm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgIHZhciB6QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS56Lm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy52ZXJ0aWNhbE1vdmVMb2NrKSB7XHJcbiAgICAgICAgICAgIHpBeGlzLnkgPSAwO1xyXG4gICAgICAgICAgICB6QXhpcy5ub3JtYWxpemUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzcGVlZCA9IHRoaXMuc3BlZWQgKiBmcmFtZVRpbWUgLyAyMDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX21vdmVGb3J3YXJkKSB7XHJcbiAgICAgICAgICAgIC8vIE9wcG9zaXRlIGRpcmVjdGlvbiBvZiB6XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHpBeGlzLCAtc3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZUJhY2t3YXJkKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHpBeGlzLCBzcGVlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlTGVmdCkge1xyXG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh4QXhpcywgLXNwZWVkIC8gMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlUmlnaHQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoeEF4aXMsIHNwZWVkIC8gMik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0YXJnZXQucm90YXRlQXJvdW5kKHRhcmdldC5wb3NpdGlvbiwgdGhpcy51cCwgLXRoaXMuX29mZnNldFBpdGNoICogZnJhbWVUaW1lICogTWF0aC5QSSAvIDM2MCk7XHJcbiAgICAgICAgdmFyIHhBeGlzID0gdGFyZ2V0LmxvY2FsVHJhbnNmb3JtLng7XHJcbiAgICAgICAgdGFyZ2V0LnJvdGF0ZUFyb3VuZCh0YXJnZXQucG9zaXRpb24sIHhBeGlzLCAtdGhpcy5fb2Zmc2V0Um9sbCAqIGZyYW1lVGltZSAqIE1hdGguUEkgLyAzNjApO1xyXG5cclxuICAgICAgICB0aGlzLl9vZmZzZXRSb2xsID0gdGhpcy5fb2Zmc2V0UGl0Y2ggPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICBfbG9ja0NoYW5nZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBkb2MucG9pbnRlckxvY2tFbGVtZW50ID09PSB0aGlzLmRvbUVsZW1lbnRcclxuICAgICAgICAgICAgfHwgZG9jLm1velBvaW50ZXJMb2NrRWxlbWVudCA9PT0gdGhpcy5kb21FbGVtZW50XHJcbiAgICAgICAgICAgIHx8IGRvYy53ZWJraXRQb2ludGVyTG9ja0VsZW1lbnQgPT09IHRoaXMuZG9tRWxlbWVudFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb2MsICdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmUsIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvYywgJ21vdXNlbW92ZScsIHRoaXMuX21vdXNlTW92ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfbW91c2VNb3ZlOiBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgdmFyIGR4ID0gZS5tb3ZlbWVudFggfHwgZS5tb3pNb3ZlbWVudFggfHwgZS53ZWJraXRNb3ZlbWVudFggfHwgMDtcclxuICAgICAgICB2YXIgZHkgPSBlLm1vdmVtZW50WSB8fCBlLm1vek1vdmVtZW50WSB8fCBlLndlYmtpdE1vdmVtZW50WSB8fCAwO1xyXG5cclxuICAgICAgICB0aGlzLl9vZmZzZXRQaXRjaCArPSBkeCAqIHRoaXMuc2Vuc2l0aXZpdHkgLyAyMDA7XHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0Um9sbCArPSBkeSAqIHRoaXMuc2Vuc2l0aXZpdHkgLyAyMDA7XHJcblxyXG4gICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGV2ZW50IHRvIHJlbWluZCByZW5kZXJlciBkbyByZW5kZXJcclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2NoYW5nZScpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZGV0ZWN0TW92ZW1lbnRDaGFuZ2U6IGZ1bmN0aW9uIChmcmFtZVRpbWUpIHtcclxuICAgICAgICBpZiAodGhpcy5fbW92ZUZvcndhcmQgfHwgdGhpcy5fbW92ZUJhY2t3YXJkIHx8IHRoaXMuX21vdmVMZWZ0IHx8IHRoaXMuX21vdmVSaWdodCkge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2NoYW5nZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0ZShmcmFtZVRpbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfa2V5RG93bjogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIHN3aXRjaChlLmtleUNvZGUpIHtcclxuICAgICAgICAgICAgY2FzZSA4NzogLy93XHJcbiAgICAgICAgICAgIGNhc2UgMzc6IC8vdXAgYXJyb3dcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVGb3J3YXJkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDgzOiAvL3NcclxuICAgICAgICAgICAgY2FzZSA0MDogLy9kb3duIGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlQmFja3dhcmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNjU6IC8vYVxyXG4gICAgICAgICAgICBjYXNlIDM3OiAvL2xlZnQgYXJyb3dcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVMZWZ0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDY4OiAvL2RcclxuICAgICAgICAgICAgY2FzZSAzOTogLy9yaWdodCBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZVJpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBldmVudCB0byByZW1pbmQgcmVuZGVyZXIgZG8gcmVuZGVyXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2UnKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2tleVVwOiBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgc3dpdGNoKGUua2V5Q29kZSkge1xyXG4gICAgICAgICAgICBjYXNlIDg3OiAvL3dcclxuICAgICAgICAgICAgY2FzZSAzNzogLy91cCBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUZvcndhcmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDgzOiAvL3NcclxuICAgICAgICAgICAgY2FzZSA0MDogLy9kb3duIGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlQmFja3dhcmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDY1OiAvL2FcclxuICAgICAgICAgICAgY2FzZSAzNzogLy9sZWZ0IGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlTGVmdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNjg6IC8vZFxyXG4gICAgICAgICAgICBjYXNlIDM5OiAvL3JpZ2h0IGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlUmlnaHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGcmVlQ29udHJvbDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XHJcblxyXG4vKipcclxuICogR2FtZXBhZCBDb250cm9sIHBsdWdpbi5cclxuICpcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGx1Z2luLkdhbWVwYWRDb250cm9sXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgaW5pdDogZnVuY3Rpb24oYXBwKSB7XHJcbiAqICAgICB0aGlzLl9nYW1lcGFkQ29udHJvbCA9IG5ldyBjbGF5LnBsdWdpbi5HYW1lcGFkQ29udHJvbCh7XHJcbiAqICAgICAgICAgdGFyZ2V0OiBjYW1lcmEsXHJcbiAqICAgICAgICAgb25TdGFuZGFyZEdhbWVwYWRSZWFkeTogY3VzdG9tQ2FsbGJhY2tcclxuICogICAgIH0pO1xyXG4gKiAgIH0sXHJcbiAqXHJcbiAqICAgbG9vcDogZnVuY3Rpb24oYXBwKSB7XHJcbiAqICAgICB0aGlzLl9nYW1lcGFkQ29udHJvbC51cGRhdGUoYXBwLmZyYW1lVGltZSk7XHJcbiAqICAgfVxyXG4gKi9cclxudmFyIEdhbWVwYWRDb250cm9sID0gQmFzZS5leHRlbmQoZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5wbHVnaW4uR2FtZXBhZENvbnRyb2wjICovIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2NlbmUgbm9kZSB0byBjb250cm9sLCBtb3N0bHkgaXQgaXMgYSBjYW1lcmEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRhcmdldDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTW92ZSBzcGVlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbW92ZVNwZWVkOiAwLjEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIExvb2sgYXJvdW5kIHNwZWVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBsb29rQXJvdW5kU3BlZWQ6IDAuMSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVXAgYXhpcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdXA6IG5ldyBWZWN0b3IzKDAsIDEsIDApLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lbGluZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRpbWVsaW5lfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRpbWVsaW5lOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhIHN0YW5kYXJkIGdhbWVwYWQgaXMgcmVhZHkgdG8gdXNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uU3RhbmRhcmRHYW1lcGFkUmVhZHk6IGZ1bmN0aW9uKGdhbWVwYWQpe30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGEgZ2FtZXBhZCBpcyBkaXNjb25uZWN0ZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb25HYW1lcGFkRGlzY29ubmVjdGVkOiBmdW5jdGlvbihnYW1lcGFkKXt9LFxyXG5cclxuICAgICAgICAvLyBQcml2YXRlIHByb3BlcnRpZXM6XHJcblxyXG4gICAgICAgIF9tb3ZlRm9yd2FyZDogZmFsc2UsXHJcbiAgICAgICAgX21vdmVCYWNrd2FyZDogZmFsc2UsXHJcbiAgICAgICAgX21vdmVMZWZ0OiBmYWxzZSxcclxuICAgICAgICBfbW92ZVJpZ2h0OiBmYWxzZSxcclxuXHJcbiAgICAgICAgX29mZnNldFBpdGNoOiAwLFxyXG4gICAgICAgIF9vZmZzZXRSb2xsOiAwLFxyXG5cclxuICAgICAgICBfY29ubmVjdGVkR2FtZXBhZEluZGV4OiAwLFxyXG4gICAgICAgIF9zdGFuZGFyZEdhbWVwYWRBdmFpbGFibGU6IGZhbHNlLFxyXG4gICAgICAgIF9nYW1lcGFkQXhpc1RocmVzaG9sZDogMC4zXHJcblxyXG4gICAgfTtcclxuXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIHRoaXMuX2NoZWNrR2FtZXBhZENvbXBhdGliaWxpdHkgPSB0aGlzLl9jaGVja0dhbWVwYWRDb21wYXRpYmlsaXR5LmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9kaXNjb25uZWN0R2FtZXBhZCA9IHRoaXMuX2Rpc2Nvbm5lY3RHYW1lcGFkLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9nZXRTdGFuZGFyZEdhbWVwYWQgPSB0aGlzLl9nZXRTdGFuZGFyZEdhbWVwYWQuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX3NjYW5QcmVzc2VkR2FtZXBhZEJ1dHRvbnMgPSB0aGlzLl9zY2FuUHJlc3NlZEdhbWVwYWRCdXR0b25zLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9zY2FuSW5jbGluZWRHYW1lcGFkQXhlcyA9IHRoaXMuX3NjYW5JbmNsaW5lZEdhbWVwYWRBeGVzLmJpbmQodGhpcyk7XHJcblxyXG4gICAgdGhpcy51cGRhdGUgPSB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpO1xyXG5cclxuICAgIC8vIElmIGJyb3dzZXIgc3VwcG9ydHMgR2FtZXBhZCBBUEk6XHJcbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvci5nZXRHYW1lcGFkcyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5HYW1lcGFkQ29udHJvbC5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0LiBjb250cm9sLlxyXG4gICAgICovXHJcbiAgICBpbml0OiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hlbiB1c2VyIGJlZ2lucyB0byBpbnRlcmFjdCB3aXRoIGNvbm5lY3RlZCBnYW1lcGFkOlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vZ2FtZXBhZC8jZG9tLWdhbWVwYWRldmVudFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKHdpbmRvdywgJ2dhbWVwYWRjb25uZWN0ZWQnLCB0aGlzLl9jaGVja0dhbWVwYWRDb21wYXRpYmlsaXR5KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGltZWxpbmUpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lbGluZS5vbignZnJhbWUnLCB0aGlzLnVwZGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csICdnYW1lcGFkZGlzY29ubmVjdGVkJywgdGhpcy5fZGlzY29ubmVjdEdhbWVwYWQpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGNvbnRyb2wuXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3csICdnYW1lcGFkY29ubmVjdGVkJywgdGhpcy5fY2hlY2tHYW1lcGFkQ29tcGF0aWJpbGl0eSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZWxpbmUub2ZmKCdmcmFtZScsIHRoaXMudXBkYXRlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKHdpbmRvdywgJ2dhbWVwYWRkaXNjb25uZWN0ZWQnLCB0aGlzLl9kaXNjb25uZWN0R2FtZXBhZCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnRyb2wncyB1cGRhdGUuIFNob3VsZCBiZSBpbnZva2VkIGV2ZXJ5IGZyYW1lLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcmFtZVRpbWUgRnJhbWUgdGltZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fc3RhbmRhcmRHYW1lcGFkQXZhaWxhYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NjYW5QcmVzc2VkR2FtZXBhZEJ1dHRvbnMoKTtcclxuICAgICAgICB0aGlzLl9zY2FuSW5jbGluZWRHYW1lcGFkQXhlcygpO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGFyZ2V0IGRlcGVuZGluZyBvbiB1c2VyIGlucHV0LlxyXG5cclxuICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XHJcblxyXG4gICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMudGFyZ2V0LnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS54Lm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgIHZhciB6QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS56Lm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2YXIgbW92ZVNwZWVkID0gdGhpcy5tb3ZlU3BlZWQgKiBmcmFtZVRpbWUgLyAyMDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX21vdmVGb3J3YXJkKSB7XHJcbiAgICAgICAgICAgIC8vIE9wcG9zaXRlIGRpcmVjdGlvbiBvZiB6LlxyXG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh6QXhpcywgLW1vdmVTcGVlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlQmFja3dhcmQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoekF4aXMsIG1vdmVTcGVlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlTGVmdCkge1xyXG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh4QXhpcywgLW1vdmVTcGVlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlUmlnaHQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoeEF4aXMsIG1vdmVTcGVlZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0YXJnZXQucm90YXRlQXJvdW5kKHRhcmdldC5wb3NpdGlvbiwgdGhpcy51cCwgLXRoaXMuX29mZnNldFBpdGNoICogZnJhbWVUaW1lICogTWF0aC5QSSAvIDM2MCk7XHJcbiAgICAgICAgdmFyIHhBeGlzID0gdGFyZ2V0LmxvY2FsVHJhbnNmb3JtLng7XHJcbiAgICAgICAgdGFyZ2V0LnJvdGF0ZUFyb3VuZCh0YXJnZXQucG9zaXRpb24sIHhBeGlzLCAtdGhpcy5fb2Zmc2V0Um9sbCAqIGZyYW1lVGltZSAqIE1hdGguUEkgLyAzNjApO1xyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIElmIG5lY2Vzc2FyeTogdHJpZ2dlciBgdXBkYXRlYCBldmVudC5cclxuICAgICAgICAgKiBYWFggVGhpcyBjYW4gZWNvbm9taXplIHJlbmRlcmluZyBPUHMuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYgKHRoaXMuX21vdmVGb3J3YXJkID09PSB0cnVlIHx8IHRoaXMuX21vdmVCYWNrd2FyZCA9PT0gdHJ1ZSB8fCB0aGlzLl9tb3ZlTGVmdCA9PT0gdHJ1ZVxyXG4gICAgICAgICAgICB8fCB0aGlzLl9tb3ZlUmlnaHQgPT09IHRydWUgfHwgdGhpcy5fb2Zmc2V0UGl0Y2ggIT09IDAgfHwgdGhpcy5fb2Zmc2V0Um9sbCAhPT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndXBkYXRlJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZXNldCB2YWx1ZXMgdG8gYXZvaWQgbG9zdCBvZiBjb250cm9sLlxyXG5cclxuICAgICAgICB0aGlzLl9tb3ZlRm9yd2FyZCA9IHRoaXMuX21vdmVCYWNrd2FyZCA9IHRoaXMuX21vdmVMZWZ0ID0gdGhpcy5fbW92ZVJpZ2h0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0UGl0Y2ggPSB0aGlzLl9vZmZzZXRSb2xsID0gMDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFByaXZhdGUgbWV0aG9kczpcclxuXHJcbiAgICBfY2hlY2tHYW1lcGFkQ29tcGF0aWJpbGl0eTogZnVuY3Rpb24oZXZlbnQpIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgY29ubmVjdGVkIGdhbWVwYWQgaGFzIGEgKipzdGFuZGFyZCoqIGxheW91dDpcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2dhbWVwYWQvI3JlbWFwcGluZyBhYm91dCBzdGFuZGFyZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAoZXZlbnQuZ2FtZXBhZC5tYXBwaW5nID09PSAnc3RhbmRhcmQnKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9zdGFuZGFyZEdhbWVwYWRJbmRleCA9IGV2ZW50LmdhbWVwYWQuaW5kZXg7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YW5kYXJkR2FtZXBhZEF2YWlsYWJsZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm9uU3RhbmRhcmRHYW1lcGFkUmVhZHkoZXZlbnQuZ2FtZXBhZCk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIF9kaXNjb25uZWN0R2FtZXBhZDogZnVuY3Rpb24oZXZlbnQpIHtcclxuXHJcbiAgICAgICAgdGhpcy5fc3RhbmRhcmRHYW1lcGFkQXZhaWxhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMub25HYW1lcGFkRGlzY29ubmVjdGVkKGV2ZW50LmdhbWVwYWQpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgX2dldFN0YW5kYXJkR2FtZXBhZDogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBuYXZpZ2F0b3IuZ2V0R2FtZXBhZHMoKVt0aGlzLl9zdGFuZGFyZEdhbWVwYWRJbmRleF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBfc2NhblByZXNzZWRHYW1lcGFkQnV0dG9uczogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBnYW1lcGFkQnV0dG9ucyA9IHRoaXMuX2dldFN0YW5kYXJkR2FtZXBhZCgpLmJ1dHRvbnM7XHJcblxyXG4gICAgICAgIC8vIEZvciBlYWNoIGdhbWVwYWQgYnV0dG9uOlxyXG4gICAgICAgIGZvciAodmFyIGdhbWVwYWRCdXR0b25JZCA9IDA7IGdhbWVwYWRCdXR0b25JZCA8IGdhbWVwYWRCdXR0b25zLmxlbmd0aDsgZ2FtZXBhZEJ1dHRvbklkKyspIHtcclxuXHJcbiAgICAgICAgICAgIC8vIEdldCB1c2VyIGlucHV0LlxyXG4gICAgICAgICAgICB2YXIgZ2FtZXBhZEJ1dHRvbiA9IGdhbWVwYWRCdXR0b25zW2dhbWVwYWRCdXR0b25JZF07XHJcblxyXG4gICAgICAgICAgICBpZiAoZ2FtZXBhZEJ1dHRvbi5wcmVzc2VkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChnYW1lcGFkQnV0dG9uSWQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRC1wYWQgVXBcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlRm9yd2FyZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBELXBhZCBEb3duXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUJhY2t3YXJkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEQtcGFkIExlZnRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlTGVmdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBELXBhZCBSaWdodFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVSaWdodCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgX3NjYW5JbmNsaW5lZEdhbWVwYWRBeGVzOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIGdhbWVwYWRBeGVzID0gdGhpcy5fZ2V0U3RhbmRhcmRHYW1lcGFkKCkuYXhlcztcclxuXHJcbiAgICAgICAgLy8gRm9yIGVhY2ggZ2FtZXBhZCBheGlzOlxyXG4gICAgICAgIGZvciAodmFyIGdhbWVwYWRBeGlzSWQgPSAwOyBnYW1lcGFkQXhpc0lkIDwgZ2FtZXBhZEF4ZXMubGVuZ3RoOyBnYW1lcGFkQXhpc0lkKyspIHtcclxuXHJcbiAgICAgICAgICAgIC8vIEdldCB1c2VyIGlucHV0LlxyXG4gICAgICAgICAgICB2YXIgZ2FtZXBhZEF4aXMgPSBnYW1lcGFkQXhlc1tnYW1lcGFkQXhpc0lkXTtcclxuXHJcbiAgICAgICAgICAgIC8vIFhYWCBXZSB1c2UgYSB0aHJlc2hvbGQgYmVjYXVzZSBheGVzIGFyZSBuZXZlciBuZXV0cmFsLlxyXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMoZ2FtZXBhZEF4aXMpID4gdGhpcy5fZ2FtZXBhZEF4aXNUaHJlc2hvbGQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGdhbWVwYWRBeGlzSWQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTGVmdCBzdGljayBYwrFcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVMZWZ0ID0gZ2FtZXBhZEF4aXMgPCAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlUmlnaHQgPSBnYW1lcGFkQXhpcyA+IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBMZWZ0IHN0aWNrIFnCsVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUZvcndhcmQgPSBnYW1lcGFkQXhpcyA8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVCYWNrd2FyZCA9IGdhbWVwYWRBeGlzID4gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFJpZ2h0IHN0aWNrIFjCsVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2Zmc2V0UGl0Y2ggKz0gZ2FtZXBhZEF4aXMgKiB0aGlzLmxvb2tBcm91bmRTcGVlZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFJpZ2h0IHN0aWNrIFnCsVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2Zmc2V0Um9sbCArPSBnYW1lcGFkQXhpcyAqIHRoaXMubG9va0Fyb3VuZFNwZWVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdhbWVwYWRDb250cm9sO1xyXG4iLCJ2YXIgR2VzdHVyZU1nciA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB0aGlzLl90cmFjayA9IFtdO1xyXG59O1xyXG5cclxuR2VzdHVyZU1nci5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IEdlc3R1cmVNZ3IsXHJcblxyXG4gICAgcmVjb2duaXplOiBmdW5jdGlvbiAoZXZlbnQsIHRhcmdldCwgcm9vdCkge1xyXG4gICAgICAgIHRoaXMuX2RvVHJhY2soZXZlbnQsIHRhcmdldCwgcm9vdCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlY29nbml6ZShldmVudCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2subGVuZ3RoID0gMDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgX2RvVHJhY2s6IGZ1bmN0aW9uIChldmVudCwgdGFyZ2V0LCByb290KSB7XHJcbiAgICAgICAgdmFyIHRvdWNoZXMgPSBldmVudC50YXJnZXRUb3VjaGVzO1xyXG5cclxuICAgICAgICBpZiAoIXRvdWNoZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRyYWNrSXRlbSA9IHtcclxuICAgICAgICAgICAgcG9pbnRzOiBbXSxcclxuICAgICAgICAgICAgdG91Y2hlczogW10sXHJcbiAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxyXG4gICAgICAgICAgICBldmVudDogZXZlbnRcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdG91Y2hlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdG91Y2ggPSB0b3VjaGVzW2ldO1xyXG4gICAgICAgICAgICB0cmFja0l0ZW0ucG9pbnRzLnB1c2goW3RvdWNoLmNsaWVudFgsIHRvdWNoLmNsaWVudFldKTtcclxuICAgICAgICAgICAgdHJhY2tJdGVtLnRvdWNoZXMucHVzaCh0b3VjaCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90cmFjay5wdXNoKHRyYWNrSXRlbSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZWNvZ25pemU6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiByZWNvZ25pemVycykge1xyXG4gICAgICAgICAgICBpZiAocmVjb2duaXplcnMuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGdlc3R1cmVJbmZvID0gcmVjb2duaXplcnNbZXZlbnROYW1lXSh0aGlzLl90cmFjaywgZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGdlc3R1cmVJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdlc3R1cmVJbmZvO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZnVuY3Rpb24gZGlzdChwb2ludFBhaXIpIHtcclxuICAgIHZhciBkeCA9IHBvaW50UGFpclsxXVswXSAtIHBvaW50UGFpclswXVswXTtcclxuICAgIHZhciBkeSA9IHBvaW50UGFpclsxXVsxXSAtIHBvaW50UGFpclswXVsxXTtcclxuXHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2VudGVyKHBvaW50UGFpcikge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICAocG9pbnRQYWlyWzBdWzBdICsgcG9pbnRQYWlyWzFdWzBdKSAvIDIsXHJcbiAgICAgICAgKHBvaW50UGFpclswXVsxXSArIHBvaW50UGFpclsxXVsxXSkgLyAyXHJcbiAgICBdO1xyXG59XHJcblxyXG52YXIgcmVjb2duaXplcnMgPSB7XHJcblxyXG4gICAgcGluY2g6IGZ1bmN0aW9uICh0cmFjaywgZXZlbnQpIHtcclxuICAgICAgICB2YXIgdHJhY2tMZW4gPSB0cmFjay5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmICghdHJhY2tMZW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHBpbmNoRW5kID0gKHRyYWNrW3RyYWNrTGVuIC0gMV0gfHwge30pLnBvaW50cztcclxuICAgICAgICB2YXIgcGluY2hQcmUgPSAodHJhY2tbdHJhY2tMZW4gLSAyXSB8fCB7fSkucG9pbnRzIHx8IHBpbmNoRW5kO1xyXG5cclxuICAgICAgICBpZiAocGluY2hQcmVcclxuICAgICAgICAgICAgJiYgcGluY2hQcmUubGVuZ3RoID4gMVxyXG4gICAgICAgICAgICAmJiBwaW5jaEVuZFxyXG4gICAgICAgICAgICAmJiBwaW5jaEVuZC5sZW5ndGggPiAxXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHZhciBwaW5jaFNjYWxlID0gZGlzdChwaW5jaEVuZCkgLyBkaXN0KHBpbmNoUHJlKTtcclxuICAgICAgICAgICAgIWlzRmluaXRlKHBpbmNoU2NhbGUpICYmIChwaW5jaFNjYWxlID0gMSk7XHJcblxyXG4gICAgICAgICAgICBldmVudC5waW5jaFNjYWxlID0gcGluY2hTY2FsZTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwaW5jaENlbnRlciA9IGNlbnRlcihwaW5jaEVuZCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnBpbmNoWCA9IHBpbmNoQ2VudGVyWzBdO1xyXG4gICAgICAgICAgICBldmVudC5waW5jaFkgPSBwaW5jaENlbnRlclsxXTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAncGluY2gnLFxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB0cmFja1swXS50YXJnZXQsXHJcbiAgICAgICAgICAgICAgICBldmVudDogZXZlbnRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHZXN0dXJlTWdyO1xyXG4iLCJpbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IFBsYW5lIGZyb20gJy4uL21hdGgvUGxhbmUnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgUmF5IGZyb20gJy4uL21hdGgvUmF5JztcclxuXHJcbnZhciB1dnMgPSBbWzAsIDBdLCBbMCwgMV0sIFsxLCAxXSwgWzEsIDBdXTtcclxudmFyIHRyaXMgPSBbMCwgMSwgMiwgMiwgMywgMF07XHJcblxyXG52YXIgSW5maW5pdGVQbGFuZSA9IE1lc2guZXh0ZW5kKHtcclxuXHJcbiAgICBjYW1lcmE6IG51bGwsXHJcblxyXG4gICAgcGxhbmU6IG51bGwsXHJcblxyXG4gICAgbWF4R3JpZDogMCxcclxuXHJcbiAgICAvLyBUT0RPXHJcbiAgICBmcnVzdHVtQ3VsbGluZzogZmFsc2VcclxuXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe1xyXG4gICAgICAgIGR5bmFtaWM6IHRydWVcclxuICAgIH0pO1xyXG4gICAgZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5pbml0KDYpO1xyXG4gICAgZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwuaW5pdCg2KTtcclxuICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXMudGV4Y29vcmQwLmluaXQoNik7XHJcbiAgICBnZW9tZXRyeS5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDYpO1xyXG5cclxuICAgIHRoaXMucGxhbmUgPSBuZXcgUGxhbmUoKTtcclxufSwge1xyXG5cclxuICAgIHVwZGF0ZUdlb21ldHJ5OiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciBjb29yZHMgPSB0aGlzLl91blByb2plY3RHcmlkKCk7XHJcbiAgICAgICAgaWYgKCFjb29yZHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcG9zaXRpb25BdHRyID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciBub3JtYWxBdHRyID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLm5vcm1hbDtcclxuICAgICAgICB2YXIgdGV4Y29vcmRzID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMDtcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuZ2VvbWV0cnkuaW5kaWNlcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGlkeCA9IHRyaXNbaV07XHJcbiAgICAgICAgICAgIHBvc2l0aW9uQXR0ci5zZXQoaSwgY29vcmRzW2lkeF0uYXJyYXkpO1xyXG4gICAgICAgICAgICBub3JtYWxBdHRyLnNldChpLCB0aGlzLnBsYW5lLm5vcm1hbC5hcnJheSk7XHJcbiAgICAgICAgICAgIHRleGNvb3Jkcy5zZXQoaSwgdXZzW2lkeF0pO1xyXG4gICAgICAgICAgICBpbmRpY2VzW2ldID0gaTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZW9tZXRyeS5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBodHRwOi8vZmlsZWFkbWluLmNzLmx0aC5zZS9ncmFwaGljcy90aGVzZXMvcHJvamVjdHMvcHJvamdyaWQvXHJcbiAgICBfdW5Qcm9qZWN0R3JpZDogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIHBsYW5lVmlld1NwYWNlID0gbmV3IFBsYW5lKCk7XHJcbiAgICAgICAgdmFyIGxpbmVzID0gW1xyXG4gICAgICAgICAgICAwLCAxLCAwLCAyLCAxLCAzLCAyLCAzLFxyXG4gICAgICAgICAgICA0LCA1LCA0LCA2LCA1LCA3LCA2LCA3LFxyXG4gICAgICAgICAgICAwLCA0LCAxLCA1LCAyLCA2LCAzLCA3XHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB2YXIgZW5kID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbiAgICAgICAgdmFyIHBvaW50cyA9IFtdO1xyXG5cclxuICAgICAgICAvLyAxLS0tLTJcclxuICAgICAgICAvLyB8ICAgIHxcclxuICAgICAgICAvLyAwLS0tLTNcclxuICAgICAgICB2YXIgY29vcmRzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcclxuICAgICAgICAgICAgY29vcmRzW2ldID0gbmV3IFZlY3RvcjMoMCwgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcmF5ID0gbmV3IFJheSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBwbGFuZVZpZXdTcGFjZS5jb3B5KHRoaXMucGxhbmUpO1xyXG4gICAgICAgICAgICBwbGFuZVZpZXdTcGFjZS5hcHBseVRyYW5zZm9ybSh0aGlzLmNhbWVyYS52aWV3TWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBmcnVzdHVtVmVydGljZXMgPSB0aGlzLmNhbWVyYS5mcnVzdHVtLnZlcnRpY2VzO1xyXG5cclxuICAgICAgICAgICAgdmFyIG5Qb2ludHMgPSAwO1xyXG4gICAgICAgICAgICAvLyBJbnRlcnNlY3Qgd2l0aCBsaW5lcyBvZiBmcnVzdHVtXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTI7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQuYXJyYXkgPSBmcnVzdHVtVmVydGljZXNbbGluZXNbaSAqIDJdXTtcclxuICAgICAgICAgICAgICAgIGVuZC5hcnJheSA9IGZydXN0dW1WZXJ0aWNlc1tsaW5lc1tpICogMiArIDFdXTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcG9pbnQgPSBwbGFuZVZpZXdTcGFjZS5pbnRlcnNlY3RMaW5lKHN0YXJ0LCBlbmQsIHBvaW50c1tuUG9pbnRzXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXBvaW50c1tuUG9pbnRzXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbblBvaW50c10gPSBwb2ludDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgblBvaW50cysrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChuUG9pbnRzID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuUG9pbnRzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHBvaW50c1tpXS5hcHBseVByb2plY3Rpb24odGhpcy5jYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIG1pblggPSBwb2ludHNbMF0uYXJyYXlbMF07XHJcbiAgICAgICAgICAgIHZhciBtaW5ZID0gcG9pbnRzWzBdLmFycmF5WzFdO1xyXG4gICAgICAgICAgICB2YXIgbWF4WCA9IHBvaW50c1swXS5hcnJheVswXTtcclxuICAgICAgICAgICAgdmFyIG1heFkgPSBwb2ludHNbMF0uYXJyYXlbMV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgblBvaW50czsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcG9pbnRzW2ldLmFycmF5WzBdKTtcclxuICAgICAgICAgICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBwb2ludHNbaV0uYXJyYXlbMV0pO1xyXG4gICAgICAgICAgICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIHBvaW50c1tpXS5hcnJheVswXSk7XHJcbiAgICAgICAgICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcG9pbnRzW2ldLmFycmF5WzFdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWluWCA9PSBtYXhYIHx8IG1pblkgPT0gbWF4WSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvb3Jkc1swXS5hcnJheVswXSA9IG1pblg7XHJcbiAgICAgICAgICAgIGNvb3Jkc1swXS5hcnJheVsxXSA9IG1pblk7XHJcbiAgICAgICAgICAgIGNvb3Jkc1sxXS5hcnJheVswXSA9IG1pblg7XHJcbiAgICAgICAgICAgIGNvb3Jkc1sxXS5hcnJheVsxXSA9IG1heFk7XHJcbiAgICAgICAgICAgIGNvb3Jkc1syXS5hcnJheVswXSA9IG1heFg7XHJcbiAgICAgICAgICAgIGNvb3Jkc1syXS5hcnJheVsxXSA9IG1heFk7XHJcbiAgICAgICAgICAgIGNvb3Jkc1szXS5hcnJheVswXSA9IG1heFg7XHJcbiAgICAgICAgICAgIGNvb3Jkc1szXS5hcnJheVsxXSA9IG1pblk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW1lcmEuY2FzdFJheShjb29yZHNbaV0sIHJheSk7XHJcbiAgICAgICAgICAgICAgICByYXkuaW50ZXJzZWN0UGxhbmUodGhpcy5wbGFuZSwgY29vcmRzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGNvb3JkcztcclxuICAgICAgICB9O1xyXG4gICAgfSkoKVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEluZmluaXRlUGxhbmU7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBWZWN0b3IyIGZyb20gJy4uL21hdGgvVmVjdG9yMic7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBHZXN0dXJlTWdyIGZyb20gJy4vR2VzdHVyZU1ncic7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuXHJcbnZhciBNT1VTRV9CVVRUT05fS0VZX01BUCA9IHtcclxuICAgIGxlZnQ6IDAsXHJcbiAgICBtaWRkbGU6IDEsXHJcbiAgICByaWdodDogMlxyXG59O1xyXG5cclxuZnVuY3Rpb24gZmlyc3ROb3ROdWxsKCkge1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGlmIChhcmd1bWVudHNbaV0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY29udmVydFRvQXJyYXkodmFsKSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkge1xyXG4gICAgICAgIHZhbCA9IFt2YWwsIHZhbF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG59XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LnBsdWdpbi5PcmJpdENvbnRyb2xcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBPcmJpdENvbnRyb2wgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5wbHVnaW4uT3JiaXRDb250cm9sIyAqLyB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRpbWVsaW5lfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRpbWVsaW5lOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZG9tRWxlbWVudDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0YXJnZXQ6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAgICAgKi9cclxuICAgICAgICBfY2VudGVyOiBuZXcgVmVjdG9yMygpLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNaW5pbXVtIGRpc3RhbmNlIHRvIHRoZSBjZW50ZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDAuNVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1pbkRpc3RhbmNlOiAwLjEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1heGltdW0gZGlzdGFuY2UgdG8gdGhlIGNlbnRlclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1heERpc3RhbmNlOiAxMDAwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBPbmx5IGF2YWlsYWJsZSB3aGVuIGNhbWVyYSBpcyBvcnRob2dyYXBoaWNcclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXhPcnRob2dyYXBoaWNTaXplOiAzMDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE9ubHkgYXZhaWxhYmxlIHdoZW4gY2FtZXJhIGlzIG9ydGhvZ3JhcGhpY1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1pbk9ydGhvZ3JhcGhpY1NpemU6IDMwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBc3BlY3Qgb2Ygb3J0aG9ncmFwaGljIGNhbWVyYVxyXG4gICAgICAgICAqIE9ubHkgYXZhaWxhYmxlIHdoZW4gY2FtZXJhIGlzIG9ydGhvZ3JhcGhpY1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9ydGhvZ3JhcGhpY0FzcGVjdDogMSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWluaW11bSBhbHBoYSByb3RhdGlvblxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1pbkFscGhhOiAtOTAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1heGltdW0gYWxwaGEgcm90YXRpb25cclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXhBbHBoYTogOTAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1pbmltdW0gYmV0YSByb3RhdGlvblxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1pbkJldGE6IC1JbmZpbml0eSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNYXhpbXVtIGJldGEgcm90YXRpb25cclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXhCZXRhOiBJbmZpbml0eSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU3RhcnQgYXV0byByb3RhdGluZyBhZnRlciBzdGlsbCBmb3IgdGhlIGdpdmVuIHRpbWVcclxuICAgICAgICAgKi9cclxuICAgICAgICBhdXRvUm90YXRlQWZ0ZXJTdGlsbDogMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRGlyZWN0aW9uIG9mIGF1dG9Sb3RhdGUuIGN3IG9yIGNjdyB3aGVuIGxvb2tpbmcgdG9wIGRvd24uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXV0b1JvdGF0ZURpcmVjdGlvbjogJ2N3JyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRGVncmVlIHBlciBzZWNvbmRcclxuICAgICAgICAgKi9cclxuICAgICAgICBhdXRvUm90YXRlU3BlZWQ6IDYwLFxyXG5cclxuICAgICAgICBwYW5Nb3VzZUJ1dHRvbjogJ21pZGRsZScsXHJcbiAgICAgICAgcm90YXRlTW91c2VCdXR0b246ICdsZWZ0JyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUGFuIG9yIHJvdGF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtTdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX21vZGU6ICdyb3RhdGUnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkYW1waW5nOiAwLjgsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJvdGF0ZVNlbnNpdGl2aXR5OiAxLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB6b29tU2Vuc2l0aXZpdHk6IDEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHBhblNlbnNpdGl2aXR5OiAxLFxyXG5cclxuICAgICAgICBfbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICAgICAgICBfcm90YXRpbmc6IGZhbHNlLFxyXG5cclxuICAgICAgICAvLyBSb3RhdGlvbiBhcm91bmQgeUF4aXNcclxuICAgICAgICBfcGhpOiAwLFxyXG4gICAgICAgIC8vIFJvdGF0aW9uIGFyb3VuZCB4QXhpc1xyXG4gICAgICAgIF90aGV0YTogMCxcclxuXHJcbiAgICAgICAgX21vdXNlWDogMCxcclxuICAgICAgICBfbW91c2VZOiAwLFxyXG5cclxuICAgICAgICBfcm90YXRlVmVsb2NpdHk6IG5ldyBWZWN0b3IyKCksXHJcblxyXG4gICAgICAgIF9wYW5WZWxvY2l0eTogbmV3IFZlY3RvcjIoKSxcclxuXHJcbiAgICAgICAgX2Rpc3RhbmNlOiAyMCxcclxuXHJcbiAgICAgICAgX3pvb21TcGVlZDogMCxcclxuXHJcbiAgICAgICAgX3N0aWxsVGltZW91dDogMCxcclxuXHJcbiAgICAgICAgX2FuaW1hdG9yczogW10sXHJcblxyXG4gICAgICAgIF9nZXN0dXJlTWdyOiBuZXcgR2VzdHVyZU1ncigpXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBFYWNoIE9yYml0Q29udHJvbCBoYXMgaXQncyBvd24gaGFuZGxlclxyXG4gICAgdGhpcy5fbW91c2VEb3duSGFuZGxlciA9IHRoaXMuX21vdXNlRG93bkhhbmRsZXIuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX21vdXNlV2hlZWxIYW5kbGVyID0gdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIgPSB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9tb3VzZVVwSGFuZGxlciA9IHRoaXMuX21vdXNlVXBIYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9waW5jaEhhbmRsZXIgPSB0aGlzLl9waW5jaEhhbmRsZXIuYmluZCh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxufSwgLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5PcmJpdENvbnRyb2wjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZS5cclxuICAgICAqIE1vdXNlIGV2ZW50IGJpbmRpbmdcclxuICAgICAqL1xyXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBkb20gPSB0aGlzLmRvbUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNoc3RhcnQnLCB0aGlzLl9tb3VzZURvd25IYW5kbGVyKTtcclxuXHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2Vkb3duJywgdGhpcy5fbW91c2VEb3duSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9tLCAnd2hlZWwnLCB0aGlzLl9tb3VzZVdoZWVsSGFuZGxlcik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZWxpbmUub24oJ2ZyYW1lJywgdGhpcy51cGRhdGUsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy50YXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWNvbXBvc2VUcmFuc2Zvcm0oKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZS5cclxuICAgICAqIE1vdXNlIGV2ZW50IHVuYmluZGluZ1xyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGRvbSA9IHRoaXMuZG9tRWxlbWVudDtcclxuXHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCAndG91Y2hzdGFydCcsIHRoaXMuX21vdXNlRG93bkhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNobW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNoZW5kJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG5cclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZWRvd24nLCB0aGlzLl9tb3VzZURvd25IYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZXVwJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3doZWVsJywgdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlb3V0JywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aW1lbGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lLm9mZignZnJhbWUnLCB0aGlzLnVwZGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RvcEFsbEFuaW1hdGlvbigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBkaXN0YW5jZVxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXREaXN0YW5jZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZGlzdGFuY2VcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZVxyXG4gICAgICovXHJcbiAgICBzZXREaXN0YW5jZTogZnVuY3Rpb24gKGRpc3RhbmNlKSB7XHJcbiAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHNpemUgb2Ygb3J0aG9ncmFwaGljIHZpZXdpbmcgdm9sdW1lXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldE9ydGhvZ3JhcGhpY1NpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fb3J0aG9TaXplO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBzaXplIG9mIG9ydGhvZ3JhcGhpYyB2aWV3aW5nIHZvbHVtZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemVcclxuICAgICAqL1xyXG4gICAgc2V0T3J0aG9ncmFwaGljU2l6ZTogZnVuY3Rpb24gKHNpemUpIHtcclxuICAgICAgICB0aGlzLl9vcnRob1NpemUgPSBzaXplO1xyXG4gICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYWxwaGEgcm90YXRpb25cclxuICAgICAqIEFscGhhIGFuZ2xlIGZvciB0b3AtZG93biByb3RhdGlvbi4gUG9zaXRpdmUgdG8gcm90YXRlIHRvIHRvcC5cclxuICAgICAqXHJcbiAgICAgKiBXaGljaCBtZWFucyBjYW1lcmEgcm90YXRpb24gYXJvdW5kIHggYXhpcy5cclxuICAgICAqL1xyXG4gICAgZ2V0QWxwaGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGhldGEgLyBNYXRoLlBJICogMTgwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBiZXRhIHJvdGF0aW9uXHJcbiAgICAgKiBCZXRhIGFuZ2xlIGZvciBsZWZ0LXJpZ2h0IHJvdGF0aW9uLiBQb3NpdGl2ZSB0byByb3RhdGUgdG8gcmlnaHQuXHJcbiAgICAgKlxyXG4gICAgICogV2hpY2ggbWVhbnMgY2FtZXJhIHJvdGF0aW9uIGFyb3VuZCB5IGF4aXMuXHJcbiAgICAgKi9cclxuICAgIGdldEJldGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gLXRoaXMuX3BoaSAvIE1hdGguUEkgKiAxODA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGNvbnRyb2wgY2VudGVyXHJcbiAgICAgKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2VudGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NlbnRlci50b0FycmF5KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGFscGhhIHJvdGF0aW9uIGFuZ2xlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYWxwaGFcclxuICAgICAqL1xyXG4gICAgc2V0QWxwaGE6IGZ1bmN0aW9uIChhbHBoYSkge1xyXG4gICAgICAgIGFscGhhID0gTWF0aC5tYXgoTWF0aC5taW4odGhpcy5tYXhBbHBoYSwgYWxwaGEpLCB0aGlzLm1pbkFscGhhKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdGhldGEgPSBhbHBoYSAvIDE4MCAqIE1hdGguUEk7XHJcbiAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBiZXRhIHJvdGF0aW9uIGFuZ2xlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYmV0YVxyXG4gICAgICovXHJcbiAgICBzZXRCZXRhOiBmdW5jdGlvbiAoYmV0YSkge1xyXG4gICAgICAgIGJldGEgPSBNYXRoLm1heChNYXRoLm1pbih0aGlzLm1heEJldGEsIGJldGEpLCB0aGlzLm1pbkJldGEpO1xyXG5cclxuICAgICAgICB0aGlzLl9waGkgPSAtYmV0YSAvIDE4MCAqIE1hdGguUEk7XHJcbiAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBjb250cm9sIGNlbnRlclxyXG4gICAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gY2VudGVyXHJcbiAgICAgKi9cclxuICAgIHNldENlbnRlcjogZnVuY3Rpb24gKGNlbnRlckFycikge1xyXG4gICAgICAgIHRoaXMuX2NlbnRlci5zZXRBcnJheShjZW50ZXJBcnIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRPcHRpb246IGZ1bmN0aW9uIChvcHRzKSB7XHJcbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XHJcblxyXG4gICAgICAgIFsnYXV0b1JvdGF0ZScsICdhdXRvUm90YXRlQWZ0ZXJTdGlsbCcsXHJcbiAgICAgICAgICAgICdhdXRvUm90YXRlRGlyZWN0aW9uJywgJ2F1dG9Sb3RhdGVTcGVlZCcsXHJcbiAgICAgICAgICAgICdkYW1waW5nJyxcclxuICAgICAgICAgICAgJ21pbkRpc3RhbmNlJywgJ21heERpc3RhbmNlJyxcclxuICAgICAgICAgICAgJ21pbk9ydGhvZ3JhcGhpY1NpemUnLCAnbWF4T3J0aG9ncmFwaGljU2l6ZScsICdvcnRob2dyYXBoaWNBc3BlY3QnLFxyXG4gICAgICAgICAgICAnbWluQWxwaGEnLCAnbWF4QWxwaGEnLCAnbWluQmV0YScsICdtYXhCZXRhJyxcclxuICAgICAgICAgICAgJ3JvdGF0ZVNlbnNpdGl2aXR5JywgJ3pvb21TZW5zaXRpdml0eScsICdwYW5TZW5zaXRpdml0eSdcclxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICBpZiAob3B0c1trZXldICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IG9wdHNba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG5cclxuICAgICAgICBpZiAob3B0cy5kaXN0YW5jZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGlzdGFuY2Uob3B0cy5kaXN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRzLm9ydGhvZ3JhcGhpY1NpemUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldE9ydGhvZ3JhcGhpY1NpemUob3B0cy5vcnRob2dyYXBoaWNTaXplKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcHRzLmFscGhhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRBbHBoYShvcHRzLmFscGhhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuYmV0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0QmV0YShvcHRzLmJldGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wdHMuY2VudGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2VudGVyKG9wdHMuY2VudGVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRhcmdldCkge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVUcmFuc2Zvcm0oKTtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXQudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0cy5kaXN0YW5jZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdHMub3J0aG9ncmFwaGljU2l6ZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdHMuYWxwaGFcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLmJldGFcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IG9wdHMuY2VudGVyXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZHVyYXRpb249MTAwMF1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5lYXNpbmc9J2xpbmVhciddXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZG9uZV1cclxuICAgICAqL1xyXG4gICAgYW5pbWF0ZVRvOiBmdW5jdGlvbiAob3B0cykge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgdmFyIG9iaiA9IHt9O1xyXG4gICAgICAgIHZhciB0YXJnZXQgPSB7fTtcclxuICAgICAgICB2YXIgdGltZWxpbmUgPSB0aGlzLnRpbWVsaW5lO1xyXG4gICAgICAgIGlmICghdGltZWxpbmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0cy5kaXN0YW5jZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG9iai5kaXN0YW5jZSA9IHRoaXMuZ2V0RGlzdGFuY2UoKTtcclxuICAgICAgICAgICAgdGFyZ2V0LmRpc3RhbmNlID0gb3B0cy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMub3J0aG9ncmFwaGljU2l6ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG9iai5vcnRob2dyYXBoaWNTaXplID0gdGhpcy5nZXRPcnRob2dyYXBoaWNTaXplKCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5vcnRob2dyYXBoaWNTaXplID0gb3B0cy5vcnRob2dyYXBoaWNTaXplO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0cy5hbHBoYSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG9iai5hbHBoYSA9IHRoaXMuZ2V0QWxwaGEoKTtcclxuICAgICAgICAgICAgdGFyZ2V0LmFscGhhID0gb3B0cy5hbHBoYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuYmV0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG9iai5iZXRhID0gdGhpcy5nZXRCZXRhKCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5iZXRhID0gb3B0cy5iZXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0cy5jZW50ZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvYmouY2VudGVyID0gdGhpcy5nZXRDZW50ZXIoKTtcclxuICAgICAgICAgICAgdGFyZ2V0LmNlbnRlciA9IG9wdHMuY2VudGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEFuaW1hdG9yKFxyXG4gICAgICAgICAgICB0aW1lbGluZS5hbmltYXRlKG9iailcclxuICAgICAgICAgICAgICAgIC53aGVuKG9wdHMuZHVyYXRpb24gfHwgMTAwMCwgdGFyZ2V0KVxyXG4gICAgICAgICAgICAgICAgLmR1cmluZyhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5hbHBoYSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0QWxwaGEob2JqLmFscGhhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5iZXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRCZXRhKG9iai5iZXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5kaXN0YW5jZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0RGlzdGFuY2Uob2JqLmRpc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5vcnRob2dyYXBoaWNTaXplICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRPcnRob2dyYXBoaWNTaXplKG9iai5vcnRob2dyYXBoaWNTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5jZW50ZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldENlbnRlcihvYmouY2VudGVyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5kb25lKG9wdHMuZG9uZSlcclxuICAgICAgICApLnN0YXJ0KG9wdHMuZWFzaW5nIHx8ICdsaW5lYXInKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wIGFsbCBhbmltYXRpb25zXHJcbiAgICAgKi9cclxuICAgIHN0b3BBbGxBbmltYXRpb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2FuaW1hdG9ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9hbmltYXRvcnNbaV0uc3RvcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9hbmltYXRvcnMubGVuZ3RoID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgX2lzQW5pbWF0aW5nOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FuaW1hdG9ycy5sZW5ndGggPiAwO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ2FsbCB1cGRhdGUgZWFjaCBmcmFtZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBkZWx0YVRpbWUgRnJhbWUgdGltZVxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChkZWx0YVRpbWUpIHtcclxuXHJcbiAgICAgICAgZGVsdGFUaW1lID0gZGVsdGFUaW1lIHx8IDE2O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fcm90YXRpbmcpIHtcclxuICAgICAgICAgICAgdmFyIHJhZGlhbiA9ICh0aGlzLmF1dG9Sb3RhdGVEaXJlY3Rpb24gPT09ICdjdycgPyAxIDogLTEpXHJcbiAgICAgICAgICAgICAgICAqIHRoaXMuYXV0b1JvdGF0ZVNwZWVkIC8gMTgwICogTWF0aC5QSTtcclxuICAgICAgICAgICAgdGhpcy5fcGhpIC09IHJhZGlhbiAqIGRlbHRhVGltZSAvIDEwMDA7XHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fcm90YXRlVmVsb2NpdHkubGVuKCkgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLl96b29tU3BlZWQpID4gMC4wMSB8fCB0aGlzLl9wYW5WZWxvY2l0eS5sZW4oKSA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9uZWVkc1VwZGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGaXhlZCBkZWx0YVRpbWVcclxuICAgICAgICB0aGlzLl91cGRhdGVEaXN0YW5jZU9yU2l6ZShNYXRoLm1pbihkZWx0YVRpbWUsIDUwKSk7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlUGFuKE1hdGgubWluKGRlbHRhVGltZSwgNTApKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlUm90YXRlKE1hdGgubWluKGRlbHRhVGltZSwgNTApKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlVHJhbnNmb3JtKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGFyZ2V0LnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ3VwZGF0ZScpO1xyXG5cclxuICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlUm90YXRlOiBmdW5jdGlvbiAoZGVsdGFUaW1lKSB7XHJcbiAgICAgICAgdmFyIHZlbG9jaXR5ID0gdGhpcy5fcm90YXRlVmVsb2NpdHk7XHJcbiAgICAgICAgdGhpcy5fcGhpID0gdmVsb2NpdHkueSAqIGRlbHRhVGltZSAvIDIwICsgdGhpcy5fcGhpO1xyXG4gICAgICAgIHRoaXMuX3RoZXRhID0gdmVsb2NpdHkueCAqIGRlbHRhVGltZSAvIDIwICsgdGhpcy5fdGhldGE7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0QWxwaGEodGhpcy5nZXRBbHBoYSgpKTtcclxuICAgICAgICB0aGlzLnNldEJldGEodGhpcy5nZXRCZXRhKCkpO1xyXG5cclxuICAgICAgICB0aGlzLl92ZWN0b3JEYW1waW5nKHZlbG9jaXR5LCB0aGlzLmRhbXBpbmcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlRGlzdGFuY2VPclNpemU6IGZ1bmN0aW9uIChkZWx0YVRpbWUpIHtcclxuICAgICAgICB0aGlzLl9zZXREaXN0YW5jZSh0aGlzLl9kaXN0YW5jZSArIHRoaXMuX3pvb21TcGVlZCAqIGRlbHRhVGltZSAvIDIwKTtcclxuICAgICAgICBpZiAoISh0aGlzLnRhcmdldCBpbnN0YW5jZW9mIFBlcnNwZWN0aXZlQ2FtZXJhKSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRPcnRob1NpemUodGhpcy5fb3J0aG9TaXplICsgdGhpcy5fem9vbVNwZWVkICogZGVsdGFUaW1lIC8gMjApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fem9vbVNwZWVkICo9IE1hdGgucG93KHRoaXMuZGFtcGluZywgZGVsdGFUaW1lIC8gMTYpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfc2V0RGlzdGFuY2U6IGZ1bmN0aW9uIChkaXN0YW5jZSkge1xyXG4gICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gTWF0aC5tYXgoTWF0aC5taW4oZGlzdGFuY2UsIHRoaXMubWF4RGlzdGFuY2UpLCB0aGlzLm1pbkRpc3RhbmNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldE9ydGhvU2l6ZTogZnVuY3Rpb24gKHNpemUpIHtcclxuICAgICAgICB0aGlzLl9vcnRob1NpemUgPSBNYXRoLm1heChNYXRoLm1pbihzaXplLCB0aGlzLm1heE9ydGhvZ3JhcGhpY1NpemUpLCB0aGlzLm1pbk9ydGhvZ3JhcGhpY1NpemUpO1xyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLnRhcmdldDtcclxuICAgICAgICB2YXIgY2FtZXJhSGVpZ2h0ID0gdGhpcy5fb3J0aG9TaXplO1xyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICB2YXIgY2FtZXJhV2lkdGggPSBjYW1lcmFIZWlnaHQgKiB0aGlzLm9ydGhvZ3JhcGhpY0FzcGVjdDtcclxuICAgICAgICBjYW1lcmEubGVmdCA9IC1jYW1lcmFXaWR0aCAvIDI7XHJcbiAgICAgICAgY2FtZXJhLnJpZ2h0ID0gY2FtZXJhV2lkdGggLyAyO1xyXG4gICAgICAgIGNhbWVyYS50b3AgPSBjYW1lcmFIZWlnaHQgLyAyO1xyXG4gICAgICAgIGNhbWVyYS5ib3R0b20gPSAtY2FtZXJhSGVpZ2h0IC8gMjtcclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZVBhbjogZnVuY3Rpb24gKGRlbHRhVGltZSkge1xyXG4gICAgICAgIHZhciB2ZWxvY2l0eSA9IHRoaXMuX3BhblZlbG9jaXR5O1xyXG4gICAgICAgIHZhciBsZW4gPSB0aGlzLl9kaXN0YW5jZTtcclxuXHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG4gICAgICAgIHZhciB5QXhpcyA9IHRhcmdldC53b3JsZFRyYW5zZm9ybS55O1xyXG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC53b3JsZFRyYW5zZm9ybS54O1xyXG5cclxuICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgdGhpcy5fY2VudGVyXHJcbiAgICAgICAgICAgIC5zY2FsZUFuZEFkZCh4QXhpcywgLXZlbG9jaXR5LnggKiBsZW4gLyAyMDApXHJcbiAgICAgICAgICAgIC5zY2FsZUFuZEFkZCh5QXhpcywgLXZlbG9jaXR5LnkgKiBsZW4gLyAyMDApO1xyXG5cclxuICAgICAgICB0aGlzLl92ZWN0b3JEYW1waW5nKHZlbG9jaXR5LCAwKTtcclxuXHJcbiAgICAgICAgdmVsb2NpdHkueCA9IHZlbG9jaXR5LnkgPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlVHJhbnNmb3JtOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICB2YXIgZGlyID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB2YXIgdGhldGEgPSB0aGlzLl90aGV0YSArIE1hdGguUEkgLyAyO1xyXG4gICAgICAgIHZhciBwaGkgPSB0aGlzLl9waGkgKyBNYXRoLlBJIC8gMjtcclxuICAgICAgICB2YXIgciA9IE1hdGguc2luKHRoZXRhKTtcclxuXHJcbiAgICAgICAgZGlyLnggPSByICogTWF0aC5jb3MocGhpKTtcclxuICAgICAgICBkaXIueSA9IC1NYXRoLmNvcyh0aGV0YSk7XHJcbiAgICAgICAgZGlyLnogPSByICogTWF0aC5zaW4ocGhpKTtcclxuXHJcbiAgICAgICAgY2FtZXJhLnBvc2l0aW9uLmNvcHkodGhpcy5fY2VudGVyKS5zY2FsZUFuZEFkZChkaXIsIHRoaXMuX2Rpc3RhbmNlKTtcclxuICAgICAgICBjYW1lcmEucm90YXRpb24uaWRlbnRpdHkoKVxyXG4gICAgICAgICAgICAvLyBGaXJzdCBhcm91bmQgeSwgdGhlbiBhcm91bmQgeFxyXG4gICAgICAgICAgICAucm90YXRlWSgtdGhpcy5fcGhpKVxyXG4gICAgICAgICAgICAucm90YXRlWCgtdGhpcy5fdGhldGEpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfc3RhcnRDb3VudGluZ1N0aWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3N0aWxsVGltZW91dCk7XHJcblxyXG4gICAgICAgIHZhciB0aW1lID0gdGhpcy5hdXRvUm90YXRlQWZ0ZXJTdGlsbDtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKCFpc05hTih0aW1lKSAmJiB0aW1lID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zdGlsbFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuX3JvdGF0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSwgdGltZSAqIDEwMDApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3ZlY3RvckRhbXBpbmc6IGZ1bmN0aW9uICh2LCBkYW1waW5nKSB7XHJcbiAgICAgICAgdmFyIHNwZWVkID0gdi5sZW4oKTtcclxuICAgICAgICBzcGVlZCA9IHNwZWVkICogZGFtcGluZztcclxuICAgICAgICBpZiAoc3BlZWQgPCAxZS00KSB7XHJcbiAgICAgICAgICAgIHNwZWVkID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdi5ub3JtYWxpemUoKS5zY2FsZShzcGVlZCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlY29tcG9zZVRyYW5zZm9ybTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy50YXJnZXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50YXJnZXQudXBkYXRlV29ybGRUcmFuc2Zvcm0oKTtcclxuXHJcbiAgICAgICAgdmFyIGZvcndhcmQgPSB0aGlzLnRhcmdldC53b3JsZFRyYW5zZm9ybS56O1xyXG4gICAgICAgIHZhciBhbHBoYSA9IE1hdGguYXNpbihmb3J3YXJkLnkpO1xyXG4gICAgICAgIHZhciBiZXRhID0gTWF0aC5hdGFuMihmb3J3YXJkLngsIGZvcndhcmQueik7XHJcblxyXG4gICAgICAgIHRoaXMuX3RoZXRhID0gYWxwaGE7XHJcbiAgICAgICAgdGhpcy5fcGhpID0gLWJldGE7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0QmV0YSh0aGlzLmdldEJldGEoKSk7XHJcbiAgICAgICAgdGhpcy5zZXRBbHBoYSh0aGlzLmdldEFscGhhKCkpO1xyXG5cclxuICAgICAgICB0aGlzLl9zZXREaXN0YW5jZSh0aGlzLnRhcmdldC5wb3NpdGlvbi5kaXN0KHRoaXMuX2NlbnRlcikpO1xyXG4gICAgICAgIGlmICghKHRoaXMudGFyZ2V0IGluc3RhbmNlb2YgUGVyc3BlY3RpdmVDYW1lcmEpKXtcclxuICAgICAgICAgICAgdGhpcy5fc2V0T3J0aG9TaXplKHRoaXMudGFyZ2V0LnRvcCAtIHRoaXMudGFyZ2V0LmJvdHRvbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfbW91c2VEb3duSGFuZGxlcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBbmltYXRpbmcoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHZhciB5ID0gZS5jbGllbnRZO1xyXG4gICAgICAgIC8vIFRvdWNoXHJcbiAgICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlcykge1xyXG4gICAgICAgICAgICB2YXIgdG91Y2ggPSBlLnRhcmdldFRvdWNoZXNbMF07XHJcbiAgICAgICAgICAgIHggPSB0b3VjaC5jbGllbnRYO1xyXG4gICAgICAgICAgICB5ID0gdG91Y2guY2xpZW50WTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX21vZGUgPSAncm90YXRlJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NHZXN0dXJlKGUsICdzdGFydCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGUuYnV0dG9uID09PSBNT1VTRV9CVVRUT05fS0VZX01BUFt0aGlzLnJvdGF0ZU1vdXNlQnV0dG9uXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZSA9ICdyb3RhdGUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGUuYnV0dG9uID09PSBNT1VTRV9CVVRUT05fS0VZX01BUFt0aGlzLnBhbk1vdXNlQnV0dG9uXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZSA9ICdwYW4nO1xyXG5cclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogVmVuZG9ycyBsaWtlIE1vemlsbGEgcHJvdmlkZSBhIG1vdXNlLWRyaXZlbiBwYW5uaW5nIGZlYXR1cmVcclxuICAgICAgICAgICAgICAgICAqIHRoYXQgaXMgYWN0aXZhdGVkIHdoZW4gdGhlIG1pZGRsZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZC5cclxuICAgICAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAgICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby91aWV2ZW50cy8jZXZlbnQtdHlwZS1tb3VzZWRvd25cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkb20gPSB0aGlzLmRvbUVsZW1lbnQ7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9tLCAndG91Y2htb3ZlJywgdGhpcy5fbW91c2VNb3ZlSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9tLCAndG91Y2hlbmQnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XHJcblxyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlbW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNldXAnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2VvdXQnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IHJvdGF0ZSB2ZWxvY2l0eVxyXG4gICAgICAgIHRoaXMuX3JvdGF0ZVZlbG9jaXR5LnNldCgwLCAwKTtcclxuICAgICAgICB0aGlzLl9yb3RhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9Sb3RhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRDb3VudGluZ1N0aWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9tb3VzZVggPSB4O1xyXG4gICAgICAgIHRoaXMuX21vdXNlWSA9IHk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9tb3VzZU1vdmVIYW5kbGVyOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0FuaW1hdGluZygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgdmFyIHkgPSBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIHZhciBoYXZlR2VzdHVyZTtcclxuICAgICAgICAvLyBUb3VjaFxyXG4gICAgICAgIGlmIChlLnRhcmdldFRvdWNoZXMpIHtcclxuICAgICAgICAgICAgdmFyIHRvdWNoID0gZS50YXJnZXRUb3VjaGVzWzBdO1xyXG4gICAgICAgICAgICB4ID0gdG91Y2guY2xpZW50WDtcclxuICAgICAgICAgICAgeSA9IHRvdWNoLmNsaWVudFk7XHJcblxyXG4gICAgICAgICAgICBoYXZlR2VzdHVyZSA9IHRoaXMuX3Byb2Nlc3NHZXN0dXJlKGUsICdjaGFuZ2UnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwYW5TZW5zaXRpdml0eSA9IGNvbnZlcnRUb0FycmF5KHRoaXMucGFuU2Vuc2l0aXZpdHkpO1xyXG4gICAgICAgIHZhciByb3RhdGVTZW5zaXRpdml0eSA9IGNvbnZlcnRUb0FycmF5KHRoaXMucm90YXRlU2Vuc2l0aXZpdHkpO1xyXG5cclxuICAgICAgICBpZiAoIWhhdmVHZXN0dXJlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9tb2RlID09PSAncm90YXRlJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlVmVsb2NpdHkueSArPSAoeCAtIHRoaXMuX21vdXNlWCkgLyB0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGggKiAyICogcm90YXRlU2Vuc2l0aXZpdHlbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yb3RhdGVWZWxvY2l0eS54ICs9ICh5IC0gdGhpcy5fbW91c2VZKSAvIHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQgKiAyICogcm90YXRlU2Vuc2l0aXZpdHlbMV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fbW9kZSA9PT0gJ3BhbicpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BhblZlbG9jaXR5LnggKz0gKHggLSB0aGlzLl9tb3VzZVgpIC8gdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoICogcGFuU2Vuc2l0aXZpdHlbMF0gKiA0MDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wYW5WZWxvY2l0eS55ICs9ICgteSArIHRoaXMuX21vdXNlWSkgLyB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0ICogcGFuU2Vuc2l0aXZpdHlbMV0gKiA0MDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX21vdXNlWCA9IHg7XHJcbiAgICAgICAgdGhpcy5fbW91c2VZID0geTtcclxuXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCAmJiBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9tb3VzZVdoZWVsSGFuZGxlcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBbmltYXRpbmcoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBkZWx0YSA9IGUuZGVsdGFZO1xyXG4gICAgICAgIGlmIChkZWx0YSA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3pvb21IYW5kbGVyKGUsIGRlbHRhID4gMCA/IDEgOiAtMSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9waW5jaEhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzQW5pbWF0aW5nKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl96b29tSGFuZGxlcihlLCBlLnBpbmNoU2NhbGUgPiAxID8gLTAuNCA6IDAuNCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF96b29tSGFuZGxlcjogZnVuY3Rpb24gKGUsIGRlbHRhKSB7XHJcblxyXG4gICAgICAgIHZhciBzcGVlZDtcclxuICAgICAgICBpZiAodGhpcy50YXJnZXQgaW5zdGFuY2VvZiBQZXJzcGVjdGl2ZUNhbWVyYSkge1xyXG4gICAgICAgICAgICBzcGVlZCA9IE1hdGgubWF4KE1hdGgubWF4KE1hdGgubWluKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgLSB0aGlzLm1pbkRpc3RhbmNlLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXhEaXN0YW5jZSAtIHRoaXMuX2Rpc3RhbmNlXHJcbiAgICAgICAgICAgICkpIC8gMjAsIDAuNSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzcGVlZCA9IE1hdGgubWF4KE1hdGgubWF4KE1hdGgubWluKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3J0aG9TaXplIC0gdGhpcy5taW5PcnRob2dyYXBoaWNTaXplLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXhPcnRob2dyYXBoaWNTaXplIC0gdGhpcy5fb3J0aG9TaXplXHJcbiAgICAgICAgICAgICkpIC8gMjAsIDAuNSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl96b29tU3BlZWQgPSAoZGVsdGEgPiAwID8gLTEgOiAxKSAqIHNwZWVkICogdGhpcy56b29tU2Vuc2l0aXZpdHk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JvdGF0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmF1dG9Sb3RhdGUgJiYgdGhpcy5fbW9kZSA9PT0gJ3JvdGF0ZScpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRDb3VudGluZ1N0aWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0ICYmIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgX21vdXNlVXBIYW5kbGVyOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICB2YXIgZG9tID0gdGhpcy5kb21FbGVtZW50O1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNobW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNoZW5kJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlbW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNldXAnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2VvdXQnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb2Nlc3NHZXN0dXJlKGV2ZW50LCAnZW5kJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9hZGRBbmltYXRvcjogZnVuY3Rpb24gKGFuaW1hdG9yKSB7XHJcbiAgICAgICAgdmFyIGFuaW1hdG9ycyA9IHRoaXMuX2FuaW1hdG9ycztcclxuICAgICAgICBhbmltYXRvcnMucHVzaChhbmltYXRvcik7XHJcbiAgICAgICAgYW5pbWF0b3IuZG9uZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBpZHggPSBhbmltYXRvcnMuaW5kZXhPZihhbmltYXRvcik7XHJcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgYW5pbWF0b3JzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFuaW1hdG9yO1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgX3Byb2Nlc3NHZXN0dXJlOiBmdW5jdGlvbiAoZXZlbnQsIHN0YWdlKSB7XHJcbiAgICAgICAgdmFyIGdlc3R1cmVNZ3IgPSB0aGlzLl9nZXN0dXJlTWdyO1xyXG5cclxuICAgICAgICBzdGFnZSA9PT0gJ3N0YXJ0JyAmJiBnZXN0dXJlTWdyLmNsZWFyKCk7XHJcblxyXG4gICAgICAgIHZhciBnZXN0dXJlSW5mbyA9IGdlc3R1cmVNZ3IucmVjb2duaXplKFxyXG4gICAgICAgICAgICBldmVudCxcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgc3RhZ2UgPT09ICdlbmQnICYmIGdlc3R1cmVNZ3IuY2xlYXIoKTtcclxuXHJcbiAgICAgICAgLy8gRG8gbm90IGRvIGFueSBwcmV2ZW50RGVmYXVsdCBoZXJlLiBVcHBlciBhcHBsaWNhdGlvbiBkbyB0aGF0IGlmIG5lY2Vzc2FyeS5cclxuICAgICAgICBpZiAoZ2VzdHVyZUluZm8pIHtcclxuICAgICAgICAgICAgdmFyIHR5cGUgPSBnZXN0dXJlSW5mby50eXBlO1xyXG4gICAgICAgICAgICBldmVudC5nZXN0dXJlRXZlbnQgPSB0eXBlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fcGluY2hIYW5kbGVyKGdlc3R1cmVJbmZvLmV2ZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBnZXN0dXJlSW5mbztcclxuICAgIH1cclxufSk7XHJcblxyXG4vKipcclxuICogSWYgYXV0byByb3RhdGUgdGhlIHRhcmdldFxyXG4gKiBAdHlwZSB7Ym9vbGVhbn1cclxuICogQGRlZmF1bHQgZmFsc2VcclxuICovXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShPcmJpdENvbnRyb2wucHJvdG90eXBlLCAnYXV0b1JvdGF0ZScsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvUm90YXRlO1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xyXG4gICAgICAgIHRoaXMuX2F1dG9Sb3RhdGUgPSB2YWw7XHJcbiAgICAgICAgdGhpcy5fcm90YXRpbmcgPSB2YWw7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE9yYml0Q29udHJvbC5wcm90b3R5cGUsICd0YXJnZXQnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGFyZ2V0O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xyXG4gICAgICAgIGlmICh2YWwgJiYgdmFsLnRhcmdldCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldENlbnRlcih2YWwudGFyZ2V0LnRvQXJyYXkoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3RhcmdldCA9IHZhbDtcclxuICAgICAgICB0aGlzLmRlY29tcG9zZVRyYW5zZm9ybSgpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBPcmJpdENvbnRyb2w7XHJcbiIsIi8qKlxyXG4gKiBTdGF0aWNHZW9tZXRyeSBjYW4gbm90IGJlIGNoYW5nZWQgb25jZSB0aGV5J3ZlIGJlZW4gc2V0dXBcclxuICovXHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuL0dlb21ldHJ5JztcclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlN0YXRpY0dlb21ldHJ5XHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICovXHJcbnZhciBTdGF0aWNHZW9tZXRyeSA9IEdlb21ldHJ5LmV4dGVuZCh7XHJcbiAgICBkeW5hbWljOiBmYWxzZVxyXG59KTtcclxuZXhwb3J0IGRlZmF1bHQgU3RhdGljR2VvbWV0cnk7XHJcbiIsIi8vIFRPRE8gdGVzdFxyXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5pbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcclxuaW1wb3J0IE5vZGUgZnJvbSAnLi4vTm9kZSc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4uL2dsbWF0cml4L21hdDQnO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgY2xheS51dGlsLm1lc2hcclxuICovXHJcbnZhciBtZXNoVXRpbCA9IHtcclxuICAgIC8qKlxyXG4gICAgICogTWVyZ2UgbXVsdGlwbGUgbWVzaGVzIHRvIG9uZS5cclxuICAgICAqIE5vdGUgdGhhdCB0aGVzZSBtZXNoZXMgbXVzdCBoYXZlIHRoZSBzYW1lIG1hdGVyaWFsXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtBcnJheS48Y2xheS5NZXNoPn0gbWVzaGVzXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGFwcGx5V29ybGRUcmFuc2Zvcm1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnV0aWwubWVzaFxyXG4gICAgICovXHJcbiAgICBtZXJnZTogZnVuY3Rpb24gKG1lc2hlcywgYXBwbHlXb3JsZFRyYW5zZm9ybSkge1xyXG5cclxuICAgICAgICBpZiAoISBtZXNoZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ZW1wbGF0ZU1lc2ggPSBtZXNoZXNbMF07XHJcbiAgICAgICAgdmFyIHRlbXBsYXRlR2VvID0gdGVtcGxhdGVNZXNoLmdlb21ldHJ5O1xyXG4gICAgICAgIHZhciBtYXRlcmlhbCA9IHRlbXBsYXRlTWVzaC5tYXRlcmlhbDtcclxuXHJcbiAgICAgICAgdmFyIGdlb21ldHJ5ID0gbmV3IEdlb21ldHJ5KHtcclxuICAgICAgICAgICAgZHluYW1pYzogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgICAgICBnZW9tZXRyeS5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlTmFtZXMgPSB0ZW1wbGF0ZUdlby5nZXRFbmFibGVkQXR0cmlidXRlcygpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZU5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZXNbaV07XHJcbiAgICAgICAgICAgIHZhciBhdHRyID0gdGVtcGxhdGVHZW8uYXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICAgICAgLy8gRXh0ZW5kIGN1c3RvbSBhdHRyaWJ1dGVzXHJcbiAgICAgICAgICAgIGlmICghZ2VvbWV0cnkuYXR0cmlidXRlc1tuYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlc1tuYW1lXSA9IGF0dHIuY2xvbmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCA9IG1hdDQuY3JlYXRlKCk7XHJcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgYXJyYXkgZGF0YSBhbmQgbWVyZ2UgYm91bmRpbmcgYm94XHJcbiAgICAgICAgdmFyIG5WZXJ0ZXggPSAwO1xyXG4gICAgICAgIHZhciBuRmFjZSA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBtZXNoZXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRHZW8gPSBtZXNoZXNba10uZ2VvbWV0cnk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50R2VvLmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50R2VvLmJvdW5kaW5nQm94LmFwcGx5VHJhbnNmb3JtKGFwcGx5V29ybGRUcmFuc2Zvcm0gPyBtZXNoZXNba10ud29ybGRUcmFuc2Zvcm0gOiBtZXNoZXNba10ubG9jYWxUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkuYm91bmRpbmdCb3gudW5pb24oY3VycmVudEdlby5ib3VuZGluZ0JveCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgblZlcnRleCArPSBjdXJyZW50R2VvLnZlcnRleENvdW50O1xyXG4gICAgICAgICAgICBuRmFjZSArPSBjdXJyZW50R2VvLnRyaWFuZ2xlQ291bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgYXR0cmlidXRlTmFtZXMubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lc1tuXTtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYiA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV07XHJcbiAgICAgICAgICAgIGF0dHJpYi5pbml0KG5WZXJ0ZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoblZlcnRleCA+PSAweGZmZmYpIHtcclxuICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlcyA9IG5ldyBVaW50MzJBcnJheShuRmFjZSAqIDMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShuRmFjZSAqIDMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZlcnRleE9mZnNldCA9IDA7XHJcbiAgICAgICAgdmFyIGluZGljZXNPZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciB1c2VJbmRpY2VzID0gdGVtcGxhdGVHZW8uaXNVc2VJbmRpY2VzKCk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIG1tID0gMDsgbW0gPCBtZXNoZXMubGVuZ3RoOyBtbSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXNoID0gbWVzaGVzW21tXTtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRHZW8gPSBtZXNoLmdlb21ldHJ5O1xyXG5cclxuICAgICAgICAgICAgdmFyIG5WZXJ0ZXggPSBjdXJyZW50R2VvLnZlcnRleENvdW50O1xyXG5cclxuICAgICAgICAgICAgdmFyIG1hdHJpeCA9IGFwcGx5V29ybGRUcmFuc2Zvcm0gPyBtZXNoLndvcmxkVHJhbnNmb3JtLmFycmF5IDogbWVzaC5sb2NhbFRyYW5zZm9ybS5hcnJheTtcclxuICAgICAgICAgICAgbWF0NC5pbnZlcnQoaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCwgbWF0cml4KTtcclxuICAgICAgICAgICAgbWF0NC50cmFuc3Bvc2UoaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCwgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBubiA9IDA7IG5uIDwgYXR0cmlidXRlTmFtZXMubGVuZ3RoOyBubisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVzW25uXTtcclxuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50QXR0ciA9IGN1cnJlbnRHZW8uYXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIHZhciB0YXJnZXRBdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIC8vIFNraXAgdGhlIHVudXNlZCBhdHRyaWJ1dGVzO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50QXR0ci52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBsZW4gPSBjdXJyZW50QXR0ci52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IGN1cnJlbnRBdHRyLnNpemU7XHJcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmVydGV4T2Zmc2V0ICogc2l6ZTtcclxuICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IGxlbiAvIHNpemU7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QXR0ci52YWx1ZVtvZmZzZXQgKyBpXSA9IGN1cnJlbnRBdHRyLnZhbHVlW2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHBvc2l0aW9uLCBub3JtYWwgYW5kIHRhbmdlbnRcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAncG9zaXRpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5mb3JFYWNoKHRhcmdldEF0dHIudmFsdWUsIHNpemUsIG9mZnNldCwgY291bnQsIHZlYzMudHJhbnNmb3JtTWF0NCwgbWF0cml4KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT09ICdub3JtYWwnIHx8IG5hbWUgPT09ICd0YW5nZW50Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuZm9yRWFjaCh0YXJnZXRBdHRyLnZhbHVlLCBzaXplLCBvZmZzZXQsIGNvdW50LCB2ZWMzLnRyYW5zZm9ybU1hdDQsIGludmVyc2VUcmFuc3Bvc2VNYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodXNlSW5kaWNlcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxlbiA9IGN1cnJlbnRHZW8uaW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlc1tpICsgaW5kaWNlc09mZnNldF0gPSBjdXJyZW50R2VvLmluZGljZXNbaV0gKyB2ZXJ0ZXhPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzT2Zmc2V0ICs9IGxlbjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVydGV4T2Zmc2V0ICs9IG5WZXJ0ZXg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmV3IE1lc2goe1xyXG4gICAgICAgICAgICBtYXRlcmlhbDogbWF0ZXJpYWwsXHJcbiAgICAgICAgICAgIGdlb21ldHJ5OiBnZW9tZXRyeVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNwbGl0IG1lc2ggaW50byBzdWIgbWVzaGVzLCBlYWNoIG1lc2ggd2lsbCBoYXZlIG1heEpvaW50TnVtYmVyIGpvaW50cy5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5NZXNofSBtZXNoXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4Sm9pbnROdW1iZXJcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5QbGFjZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICpcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnV0aWwubWVzaFxyXG4gICAgICovXHJcblxyXG4gICAgLy8gRklYTUUsIEhhdmUgaXNzdWVzIG9uIHNvbWUgbW9kZWxzXHJcbiAgICBzcGxpdEJ5Sm9pbnRzOiBmdW5jdGlvbiAobWVzaCwgbWF4Sm9pbnROdW1iZXIsIGluUGxhY2UpIHtcclxuICAgICAgICB2YXIgZ2VvbWV0cnkgPSBtZXNoLmdlb21ldHJ5O1xyXG4gICAgICAgIHZhciBza2VsZXRvbiA9IG1lc2guc2tlbGV0b247XHJcbiAgICAgICAgdmFyIG1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbDtcclxuICAgICAgICB2YXIgam9pbnRzID0gbWVzaC5qb2ludHM7XHJcbiAgICAgICAgaWYgKCFnZW9tZXRyeSB8fCAhc2tlbGV0b24gfHwgIWpvaW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoam9pbnRzLmxlbmd0aCA8IG1heEpvaW50TnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtZXNoO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIHZhciBpbmRpY2VzID0gZ2VvbWV0cnkuaW5kaWNlcztcclxuXHJcbiAgICAgICAgdmFyIGZhY2VMZW4gPSBnZW9tZXRyeS50cmlhbmdsZUNvdW50O1xyXG4gICAgICAgIHZhciByZXN0ID0gZmFjZUxlbjtcclxuICAgICAgICB2YXIgaXNGYWNlQWRkZWQgPSBbXTtcclxuICAgICAgICB2YXIgam9pbnRWYWx1ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLmpvaW50LnZhbHVlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmFjZUxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlzRmFjZUFkZGVkW2ldID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBhZGRlZEpvaW50SWR4UGVyRmFjZSA9IFtdO1xyXG5cclxuICAgICAgICB2YXIgYnVja2V0cyA9IFtdO1xyXG5cclxuICAgICAgICB2YXIgZ2V0Sm9pbnRCeUluZGV4ID0gZnVuY3Rpb24gKGlkeCkge1xyXG4gICAgICAgICAgICByZXR1cm4gam9pbnRzW2lkeF07XHJcbiAgICAgICAgfTtcclxuICAgICAgICB3aGlsZSAocmVzdCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIGJ1Y2tldFRyaWFuZ2xlcyA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgYnVja2V0Sm9pbnRSZXZlcnNlTWFwID0gW107XHJcbiAgICAgICAgICAgIHZhciBidWNrZXRKb2ludHMgPSBbXTtcclxuICAgICAgICAgICAgdmFyIHN1YkpvaW50TnVtYmVyID0gMDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBqb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50UmV2ZXJzZU1hcFtpXSA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIGYgPSAwOyBmIDwgZmFjZUxlbjsgZisrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGYWNlQWRkZWRbZl0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBjYW5BZGRUb0J1Y2tldCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgYWRkZWROdW1iZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkeCA9IGluZGljZXNbZiAqIDMgKyBpXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpvaW50SWR4ID0gam9pbnRWYWx1ZXNbaWR4ICogNCArIGpdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpvaW50SWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWNrZXRKb2ludFJldmVyc2VNYXBbam9pbnRJZHhdID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJKb2ludE51bWJlciA8IG1heEpvaW50TnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50UmV2ZXJzZU1hcFtqb2ludElkeF0gPSBzdWJKb2ludE51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0Sm9pbnRzW3N1YkpvaW50TnVtYmVyKytdID0gam9pbnRJZHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkSm9pbnRJZHhQZXJGYWNlW2FkZGVkTnVtYmVyKytdID0gam9pbnRJZHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5BZGRUb0J1Y2tldCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghY2FuQWRkVG9CdWNrZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBSZXZlcnNlIG9wZXJhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWRkZWROdW1iZXI7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRKb2ludFJldmVyc2VNYXBbYWRkZWRKb2ludElkeFBlckZhY2VbaV1dID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50cy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViSm9pbnROdW1iZXItLTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBidWNrZXRUcmlhbmdsZXMucHVzaChpbmRpY2VzLnN1YmFycmF5KGYgKiAzLCAoZiArIDEpICogMykpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpc0ZhY2VBZGRlZFtmXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdC0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJ1Y2tldHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0cmlhbmdsZXM6IGJ1Y2tldFRyaWFuZ2xlcyxcclxuICAgICAgICAgICAgICAgIGpvaW50czogYnVja2V0Sm9pbnRzLm1hcChnZXRKb2ludEJ5SW5kZXgpLFxyXG4gICAgICAgICAgICAgICAgam9pbnRSZXZlcnNlTWFwOiBidWNrZXRKb2ludFJldmVyc2VNYXBcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcm9vdCA9IG5ldyBOb2RlKHtcclxuICAgICAgICAgICAgbmFtZTogbWVzaC5uYW1lXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdmFyIGF0dHJpYk5hbWVzID0gZ2VvbWV0cnkuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcclxuXHJcbiAgICAgICAgYXR0cmliTmFtZXMuc3BsaWNlKGF0dHJpYk5hbWVzLmluZGV4T2YoJ2pvaW50JyksIDEpO1xyXG4gICAgICAgIC8vIE1hcCBmcm9tIG9sZCB2ZXJ0ZXggaW5kZXggdG8gbmV3IHZlcnRleCBpbmRleFxyXG4gICAgICAgIHZhciBuZXdJbmRpY2VzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgYiA9IDA7IGIgPCBidWNrZXRzLmxlbmd0aDsgYisrKSB7XHJcbiAgICAgICAgICAgIHZhciBidWNrZXQgPSBidWNrZXRzW2JdO1xyXG4gICAgICAgICAgICB2YXIgam9pbnRSZXZlcnNlTWFwID0gYnVja2V0LmpvaW50UmV2ZXJzZU1hcDtcclxuICAgICAgICAgICAgdmFyIHN1YkpvaW50TnVtYmVyID0gYnVja2V0LmpvaW50cy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICB2YXIgc3ViR2VvID0gbmV3IEdlb21ldHJ5KCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgc3ViTWVzaCA9IG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFttZXNoLm5hbWUsIGldLmpvaW4oJy0nKSxcclxuICAgICAgICAgICAgICAgIC8vIERPTidUIGNsb25lIG1hdGVyaWFsLlxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnk6IHN1YkdlbyxcclxuICAgICAgICAgICAgICAgIHNrZWxldG9uOiBza2VsZXRvbixcclxuICAgICAgICAgICAgICAgIGpvaW50czogYnVja2V0LmpvaW50cy5zbGljZSgpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgblZlcnRleCA9IDA7XHJcbiAgICAgICAgICAgIHZhciBuVmVydGV4MiA9IGdlb21ldHJ5LnZlcnRleENvdW50O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5WZXJ0ZXgyOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG5ld0luZGljZXNbaV0gPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBDb3VudCBzdWIgZ2VvIG51bWJlclxyXG4gICAgICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGJ1Y2tldC50cmlhbmdsZXMubGVuZ3RoOyBmKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBmYWNlID0gYnVja2V0LnRyaWFuZ2xlc1tmXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkeCA9IGZhY2VbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0luZGljZXNbaWR4XSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5kaWNlc1tpZHhdID0gblZlcnRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgblZlcnRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGF0dHJpYk5hbWVzLmxlbmd0aDsgYSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0cmliTmFtZSA9IGF0dHJpYk5hbWVzW2FdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN1YkF0dHJpYiA9IHN1Ykdlby5hdHRyaWJ1dGVzW2F0dHJpYk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgc3ViQXR0cmliLmluaXQoblZlcnRleCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3ViR2VvLmF0dHJpYnV0ZXMuam9pbnQudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KG5WZXJ0ZXggKiA0KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChuVmVydGV4ID4gMHhmZmZmKSB7XHJcbiAgICAgICAgICAgICAgICBzdWJHZW8uaW5kaWNlcyA9IG5ldyBVaW50MzJBcnJheShidWNrZXQudHJpYW5nbGVzLmxlbmd0aCAqIDMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3ViR2VvLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoYnVja2V0LnRyaWFuZ2xlcy5sZW5ndGggKiAzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGluZGljZXNPZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICBuVmVydGV4ID0gMDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVmVydGV4MjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdJbmRpY2VzW2ldID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGYgPSAwOyBmIDwgYnVja2V0LnRyaWFuZ2xlcy5sZW5ndGg7IGYrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRyaWFuZ2xlID0gYnVja2V0LnRyaWFuZ2xlc1tmXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpZHggPSB0cmlhbmdsZVtpXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0luZGljZXNbaWR4XSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5kaWNlc1tpZHhdID0gblZlcnRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBhdHRyaWJOYW1lcy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYk5hbWUgPSBhdHRyaWJOYW1lc1thXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YkF0dHJpYiA9IHN1Ykdlby5hdHRyaWJ1dGVzW2F0dHJpYk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBhdHRyaWIuc2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNpemU7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YkF0dHJpYi52YWx1ZVtuVmVydGV4ICogc2l6ZSArIGpdID0gYXR0cmliLnZhbHVlW2lkeCAqIHNpemUgKyBqXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDQ7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpvaW50SWR4ID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5qb2ludC52YWx1ZVtpZHggKiA0ICsgal07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gblZlcnRleCAqIDQgKyBqO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpvaW50SWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJHZW8uYXR0cmlidXRlcy5qb2ludC52YWx1ZVtvZmZzZXRdID0gam9pbnRSZXZlcnNlTWFwW2pvaW50SWR4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ykdlby5hdHRyaWJ1dGVzLmpvaW50LnZhbHVlW29mZnNldF0gPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuVmVydGV4Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHN1Ykdlby5pbmRpY2VzW2luZGljZXNPZmZzZXQrK10gPSBuZXdJbmRpY2VzW2lkeF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3ViR2VvLnVwZGF0ZUJvdW5kaW5nQm94KCk7XHJcblxyXG4gICAgICAgICAgICByb290LmFkZChzdWJNZXNoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gbWVzaC5jaGlsZHJlbigpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcm9vdC5hZGQoY2hpbGRyZW5baV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb290LnBvc2l0aW9uLmNvcHkobWVzaC5wb3NpdGlvbik7XHJcbiAgICAgICAgcm9vdC5yb3RhdGlvbi5jb3B5KG1lc2gucm90YXRpb24pO1xyXG4gICAgICAgIHJvb3Quc2NhbGUuY29weShtZXNoLnNjYWxlKTtcclxuXHJcbiAgICAgICAgaWYgKGluUGxhY2UpIHtcclxuICAgICAgICAgICAgaWYgKG1lc2guZ2V0UGFyZW50KCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBtZXNoLmdldFBhcmVudCgpO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50LnJlbW92ZShtZXNoKTtcclxuICAgICAgICAgICAgICAgIHBhcmVudC5hZGQocm9vdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJvb3Q7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBtZXNoVXRpbDtcclxuIiwiaW1wb3J0IHV0aWwgZnJvbSAnLi4vY29yZS91dGlsJztcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5cclxudmFyIE1FVEEgPSB7XHJcbiAgICB2ZXJzaW9uOiAxLjAsXHJcbiAgICB0eXBlOiAnR2VvbWV0cnknLFxyXG4gICAgZ2VuZXJhdG9yOiAndXRpbC50cmFuc2ZlcmFibGUudG9PYmplY3QnXHJcbn07XHJcblxyXG4vKipcclxuICogQGFsaWFzIGNsYXkudXRpbC50cmFuc2ZlcmFibGVcclxuICovXHJcbnZhciB0cmFuc2ZlcmFibGVVdGlsID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGdlb21ldHJ5IHRvIGEgb2JqZWN0IGNvbnRhaW5pbmcgdHJhbnNmZXJhYmxlIGRhdGFcclxuICAgICAqIEBwYXJhbSB7R2VvbWV0cnl9IGdlb21ldHJ5IGdlb21ldHJ5XHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHNoYWxsb3cgd2hldGhlciBzaGFsbG93IGNvcHlcclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHsgZGF0YSA6IGRhdGEsIGJ1ZmZlcnMgOiBidWZmZXJzIH0sIGJ1ZmZlcnMgaXMgdGhlIHRyYW5zZmVyYWJsZSBsaXN0XHJcbiAgICAgKi9cclxuICAgIHRvT2JqZWN0IDogZnVuY3Rpb24gKGdlb21ldHJ5LCBzaGFsbG93KSB7XHJcbiAgICAgICAgaWYgKCFnZW9tZXRyeSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRhdGEgPSB7XHJcbiAgICAgICAgICAgIG1ldGFkYXRhIDogdXRpbC5leHRlbmQoe30sIE1FVEEpXHJcbiAgICAgICAgfTtcclxuICAgICAgICAvL3RyYW5zZmVyYWJsZSBidWZmZXJzXHJcbiAgICAgICAgdmFyIGJ1ZmZlcnMgPSBbXTtcclxuXHJcbiAgICAgICAgLy9keW5hbWljXHJcbiAgICAgICAgZGF0YS5keW5hbWljID0gZ2VvbWV0cnkuZHluYW1pYztcclxuXHJcbiAgICAgICAgLy9ib3VuZGluZyBib3hcclxuICAgICAgICBpZiAoZ2VvbWV0cnkuYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgZGF0YS5ib3VuZGluZ0JveCA9IHtcclxuICAgICAgICAgICAgICAgIG1pbiA6IGdlb21ldHJ5LmJvdW5kaW5nQm94Lm1pbi50b0FycmF5KCksXHJcbiAgICAgICAgICAgICAgICBtYXggOiBnZW9tZXRyeS5ib3VuZGluZ0JveC5tYXgudG9BcnJheSgpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2luZGljZXNcclxuICAgICAgICBpZiAoZ2VvbWV0cnkuaW5kaWNlcyAmJiBnZW9tZXRyeS5pbmRpY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZGF0YS5pbmRpY2VzID0gY29weUlmTmVjZXNzYXJ5KGdlb21ldHJ5LmluZGljZXMsIHNoYWxsb3cpO1xyXG4gICAgICAgICAgICBidWZmZXJzLnB1c2goZGF0YS5pbmRpY2VzLmJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2F0dHJpYnV0ZXNcclxuICAgICAgICBkYXRhLmF0dHJpYnV0ZXMgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIGdlb21ldHJ5LmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgaWYgKGdlb21ldHJ5LmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkocCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlc1twXTtcclxuICAgICAgICAgICAgICAgIC8vaWdub3JlIGVtcHR5IGF0dHJpYnV0ZXNcclxuICAgICAgICAgICAgICAgIGlmIChhdHRyICYmIGF0dHIudmFsdWUgJiYgYXR0ci52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0ciA9IGRhdGEuYXR0cmlidXRlc1twXSA9IGNvcHlBdHRyaWJ1dGUoYXR0ciwgc2hhbGxvdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVycy5wdXNoKGF0dHIudmFsdWUuYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGF0YSA6IGRhdGEsXHJcbiAgICAgICAgICAgIGJ1ZmZlcnMgOiBidWZmZXJzXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXByb2R1Y2UgYSBnZW9tZXRyeSBmcm9tIG9iamVjdCBnZW5lcmF0ZWQgYnkgdG9PYmplY3RcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb2JqZWN0IGdlbmVyYXRlZCBieSB0b09iamVjdFxyXG4gICAgICogQHJldHVybnMge0dlb21ldHJ5fSBnZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICB0b0dlb21ldHJ5IDogZnVuY3Rpb24gKG9iamVjdCkge1xyXG4gICAgICAgIGlmICghb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0LmRhdGEgJiYgb2JqZWN0LmJ1ZmZlcnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zZmVyYWJsZVV0aWwudG9HZW9tZXRyeShvYmplY3QuZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghb2JqZWN0Lm1ldGFkYXRhIHx8IG9iamVjdC5tZXRhZGF0YS5nZW5lcmF0b3IgIT09IE1FVEEuZ2VuZXJhdG9yKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignW3V0aWwudHJhbnNmZXJhYmxlLnRvR2VvbWV0cnldIHRoZSBvYmplY3QgaXMgbm90IGdlbmVyYXRlZCBieSB1dGlsLnRyYW5zZmVyYWJsZS4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vYmFzaWMgb3B0aW9uc1xyXG4gICAgICAgIHZhciBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICBkeW5hbWljIDogb2JqZWN0LmR5bmFtaWMsXHJcbiAgICAgICAgICAgIGluZGljZXMgOiBvYmplY3QuaW5kaWNlc1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChvYmplY3QuYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgdmFyIG1pbiA9IG5ldyBWZWN0b3IzKCkuc2V0QXJyYXkob2JqZWN0LmJvdW5kaW5nQm94Lm1pbik7XHJcbiAgICAgICAgICAgIHZhciBtYXggPSBuZXcgVmVjdG9yMygpLnNldEFycmF5KG9iamVjdC5ib3VuZGluZ0JveC5tYXgpO1xyXG4gICAgICAgICAgICBvcHRpb25zLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KG1pbiwgbWF4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBnZW9tZXRyeSA9IG5ldyBHZW9tZXRyeShvcHRpb25zKTtcclxuXHJcbiAgICAgICAgLy9hdHRyaWJ1dGVzXHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBvYmplY3QuYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICBpZiAob2JqZWN0LmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkocCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyID0gb2JqZWN0LmF0dHJpYnV0ZXNbcF07XHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW3BdID0gbmV3IEdlb21ldHJ5LkF0dHJpYnV0ZShhdHRyLm5hbWUsIGF0dHIudHlwZSwgYXR0ci5zaXplLCBhdHRyLnNlbWFudGljKTtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbcF0udmFsdWUgPSBhdHRyLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZ2VvbWV0cnk7XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiBjb3B5QXR0cmlidXRlKGF0dHIsIHNoYWxsb3cpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmFtZSA6IGF0dHIubmFtZSxcclxuICAgICAgICB0eXBlIDogYXR0ci50eXBlLFxyXG4gICAgICAgIHNpemUgOiBhdHRyLnNpemUsXHJcbiAgICAgICAgc2VtYW50aWMgOiBhdHRyLnNlbWFudGljLFxyXG4gICAgICAgIHZhbHVlIDogY29weUlmTmVjZXNzYXJ5KGF0dHIudmFsdWUsIHNoYWxsb3cpXHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb3B5SWZOZWNlc3NhcnkoYXJyLCBzaGFsbG93KSB7XHJcbiAgICBpZiAoIXNoYWxsb3cpIHtcclxuICAgICAgICByZXR1cm4gbmV3IGFyci5jb25zdHJ1Y3RvcihhcnIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB0cmFuc2ZlcmFibGVVdGlsO1xyXG4iLCIvKipcclxuICogQG5hbWUgY2xheS52ZXJzaW9uXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCAnMS4yLjMnO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS52ci5kaXNvcnRlci5vdXRwdXQudmVydGV4XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQ6IFRFWENPT1JEXzA7XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb246IFBPU0lUSU9OO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2X1RleGNvb3JkID0gdGV4Y29vcmQ7XFxuIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbi54eSwgMC41LCAxLjApO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnZyLmRpc29ydGVyLm91dHB1dC5mcmFnbWVudFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudm9pZCBtYWluKClcXG57XFxuIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG59XFxuQGVuZFwiO1xyXG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xldnIvd2VidnItcG9seWZpbGwvYmxvYi9tYXN0ZXIvc3JjL2NhcmRib2FyZC1kaXN0b3J0ZXIuanNcclxuXHJcbi8vIFVzZSB3ZWJ2ciBtYXkgaGF2ZSBzY2FsZSBwcm9ibGVtLlxyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xldnIvd2VidnItcG9seWZpbGwvaXNzdWVzLzE0MFxyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xldnIvd2VidnItcG9seWZpbGwvc2VhcmNoP3E9U0NBTEUmdHlwZT1Jc3N1ZXMmdXRmOD0lRTIlOUMlOTNcclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZXZyL3dlYnZyLXBvbHlmaWxsL2lzc3Vlcy8xNDdcclxuXHJcblxyXG5pbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuXHJcbmltcG9ydCBvdXRwdXRFc3NsIGZyb20gJy4vb3V0cHV0Lmdsc2wuanMnO1xyXG5cclxuU2hhZGVyLmltcG9ydChvdXRwdXRFc3NsKTtcclxuXHJcbmZ1bmN0aW9uIGxlcnAgKGEsIGIsIHQpIHtcclxuICAgIHJldHVybiBhICogKDEgLSB0KSArIGIgKiB0O1xyXG59XHJcblxyXG52YXIgQ2FyZGJvYXJkRGlzdG9ydGVyID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuXHJcbiAgICAgICAgY2xlYXJDb2xvcjogWzAsIDAsIDAsIDFdLFxyXG5cclxuICAgICAgICBfbWVzaDogbmV3IE1lc2goe1xyXG4gICAgICAgICAgICBnZW9tZXRyeTogbmV3IEdlb21ldHJ5KHtcclxuICAgICAgICAgICAgICAgIGR5bmFtaWM6IHRydWVcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIGN1bGxpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICBtYXRlcmlhbDogbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgIC8vIEZJWE1FIFdoeSBkaXNhYmxlIGRlcHRoTWFzayB3aWxsIGJlIHdyb25nXHJcbiAgICAgICAgICAgICAgICAvLyBkZXB0aE1hc2s6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgZGVwdGhUZXN0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVydGV4OiBTaGFkZXIuc291cmNlKCdjbGF5LnZyLmRpc29ydGVyLm91dHB1dC52ZXJ0ZXgnKSxcclxuICAgICAgICAgICAgICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS52ci5kaXNvcnRlci5vdXRwdXQuZnJhZ21lbnQnKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KSxcclxuICAgICAgICBfZmFrZUNhbWVyYTogbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKClcclxuICAgIH07XHJcbn0sIHtcclxuXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc291cmNlVGV4dHVyZSkge1xyXG4gICAgICAgIHZhciBjbGVhckNvbG9yID0gdGhpcy5jbGVhckNvbG9yO1xyXG4gICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIGdsLmNsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7XHJcbiAgICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XHJcblxyXG4gICAgICAgIGdsLmRpc2FibGUoZ2wuQkxFTkQpO1xyXG5cclxuICAgICAgICB0aGlzLl9tZXNoLm1hdGVyaWFsLnNldCgndGV4dHVyZScsIHNvdXJjZVRleHR1cmUpO1xyXG5cclxuICAgICAgICAvLyBGdWxsIHNpemU/XHJcbiAgICAgICAgcmVuZGVyZXIuc2F2ZVZpZXdwb3J0KCk7XHJcbiAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQoMCwgMCwgcmVuZGVyZXIuZ2V0V2lkdGgoKSwgcmVuZGVyZXIuZ2V0SGVpZ2h0KCkpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoW3RoaXMuX21lc2hdLCB0aGlzLl9mYWtlQ2FtZXJhKTtcclxuICAgICAgICByZW5kZXJlci5yZXN0b3JlVmlld3BvcnQoKTtcclxuICAgICAgICAvLyB0aGlzLl9tZXNoLm1hdGVyaWFsLnNoYWRlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAvLyB0aGlzLl9tZXNoLm1hdGVyaWFsLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgIC8vIHRoaXMuX21lc2gucmVuZGVyKHJlbmRlcmVyLmdsKTtcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlRnJvbVZSRGlzcGxheTogZnVuY3Rpb24gKHZyRGlzcGxheSkge1xyXG5cclxuICAgICAgICAvLyBGSVhNRVxyXG4gICAgICAgIGlmICh2ckRpc3BsYXkuZGV2aWNlSW5mb18pIHtcclxuICAgICAgICAgICAgLy8gSGFyZGNvZGVkIG1lc2ggc2l6ZVxyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVNZXNoKDIwLCAyMCwgdnJEaXNwbGF5LmRldmljZUluZm9fKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignQ2FudCBnZXQgdnJEaXNwbGF5LmRldmljZUluZm9fLCBzZWVtcyBjb2RlIGNoYW5nZWQnKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVNZXNoOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgZGV2aWNlSW5mbykge1xyXG5cclxuICAgICAgICB2YXIgcG9zaXRpb25BdHRyID0gdGhpcy5fbWVzaC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciB0ZXhjb29yZEF0dHIgPSB0aGlzLl9tZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMudGV4Y29vcmQwO1xyXG4gICAgICAgIHBvc2l0aW9uQXR0ci5pbml0KDIgKiB3aWR0aCAqIGhlaWdodCk7XHJcbiAgICAgICAgdGV4Y29vcmRBdHRyLmluaXQoMiAqIHdpZHRoICogaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgdmFyIGxlbnNGcnVzdHVtID0gZGV2aWNlSW5mby5nZXRMZWZ0RXllVmlzaWJsZVRhbkFuZ2xlcygpO1xyXG4gICAgICAgIHZhciBub0xlbnNGcnVzdHVtID0gZGV2aWNlSW5mby5nZXRMZWZ0RXllTm9MZW5zVGFuQW5nbGVzKCk7XHJcbiAgICAgICAgdmFyIHZpZXdwb3J0ID0gZGV2aWNlSW5mby5nZXRMZWZ0RXllVmlzaWJsZVNjcmVlblJlY3Qobm9MZW5zRnJ1c3R1bSk7XHJcbiAgICAgICAgdmFyIHZpZHggPSAwO1xyXG5cclxuICAgICAgICB2YXIgcG9zID0gW107XHJcbiAgICAgICAgdmFyIHV2ID0gW107XHJcblxyXG4gICAgICAgIC8vIFZlcnRpY2VzXHJcbiAgICAgICAgZm9yICh2YXIgZSA9IDA7IGUgPCAyOyBlKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBoZWlnaHQ7IGorKykge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3aWR0aDsgaSsrLCB2aWR4KyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdSA9IGkgLyAod2lkdGggLSAxKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IGogLyAoaGVpZ2h0IC0gMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEdyaWQgcG9pbnRzIHJlZ3VsYXJseSBzcGFjZWQgaW4gU3RyZW9TY3JlZW4sIGFuZCBiYXJyZWwgZGlzdG9ydGVkIGluXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG1lc2guXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSB1O1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IGxlcnAobGVuc0ZydXN0dW1bMF0sIGxlbnNGcnVzdHVtWzJdLCB1KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IGxlcnAobGVuc0ZydXN0dW1bM10sIGxlbnNGcnVzdHVtWzFdLCB2KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgciA9IGRldmljZUluZm8uZGlzdG9ydGlvbi5kaXN0b3J0SW52ZXJzZShkKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IHggKiByIC8gZDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHkgKiByIC8gZDtcclxuICAgICAgICAgICAgICAgICAgICB1ID0gKHAgLSBub0xlbnNGcnVzdHVtWzBdKSAvIChub0xlbnNGcnVzdHVtWzJdIC0gbm9MZW5zRnJ1c3R1bVswXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9IChxIC0gbm9MZW5zRnJ1c3R1bVszXSkgLyAobm9MZW5zRnJ1c3R1bVsxXSAtIG5vTGVuc0ZydXN0dW1bM10pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHUsdiB0byBtZXNoIHNjcmVlbiBjb29yZGluYXRlcy5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgYXNwZWN0ID0gZGV2aWNlSW5mby5kZXZpY2Uud2lkdGhNZXRlcnMgLyBkZXZpY2VJbmZvLmRldmljZS5oZWlnaHRNZXRlcnM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgb3JpZ2luYWwgVW5pdHkgcGx1Z2luIG11bHRpcGxpZWQgVSBieSB0aGUgYXNwZWN0IHJhdGlvXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGRpZG4ndCBtdWx0aXBseSBlaXRoZXIgdmFsdWUgYnkgMiwgYnV0IHRoYXQgc2VlbXMgdG8gZ2V0IGl0XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVhbGx5IGNsb3NlIHRvIGNvcnJlY3QgbG9va2luZyBmb3IgbWUuIEkgaGF0ZSB0aGlzIGtpbmQgb2YgXCJEb24ndFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGtub3cgd2h5IGl0IHdvcmtzXCIgY29kZSB0aG91Z2gsIGFuZCB3b2xkIGxvdmUgYSBtb3JlIGxvZ2ljYWxcclxuICAgICAgICAgICAgICAgICAgICAvLyBleHBsYW5hdGlvbiBvZiB3aGF0IG5lZWRzIHRvIGhhcHBlbiBoZXJlLlxyXG4gICAgICAgICAgICAgICAgICAgIHUgPSAodmlld3BvcnQueCArIHUgKiB2aWV3cG9ydC53aWR0aCAtIDAuNSkgKiAyLjA7IC8vKiBhc3BlY3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9ICh2aWV3cG9ydC55ICsgdiAqIHZpZXdwb3J0LmhlaWdodCAtIDAuNSkgKiAyLjA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHBvc1swXSA9IHU7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zWzFdID0gdjtcclxuICAgICAgICAgICAgICAgICAgICBwb3NbMl0gPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB1dlswXSA9IHMgKiAwLjUgKyBlICogMC41O1xyXG4gICAgICAgICAgICAgICAgICAgIHV2WzFdID0gdDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25BdHRyLnNldCh2aWR4LCBwb3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGNvb3JkQXR0ci5zZXQodmlkeCwgdXYpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgdyA9IGxlbnNGcnVzdHVtWzJdIC0gbGVuc0ZydXN0dW1bMF07XHJcbiAgICAgICAgICAgIGxlbnNGcnVzdHVtWzBdID0gLSh3ICsgbGVuc0ZydXN0dW1bMF0pO1xyXG4gICAgICAgICAgICBsZW5zRnJ1c3R1bVsyXSA9IHcgLSBsZW5zRnJ1c3R1bVsyXTtcclxuICAgICAgICAgICAgdyA9IG5vTGVuc0ZydXN0dW1bMl0gLSBub0xlbnNGcnVzdHVtWzBdO1xyXG4gICAgICAgICAgICBub0xlbnNGcnVzdHVtWzBdID0gLSh3ICsgbm9MZW5zRnJ1c3R1bVswXSk7XHJcbiAgICAgICAgICAgIG5vTGVuc0ZydXN0dW1bMl0gPSB3IC0gbm9MZW5zRnJ1c3R1bVsyXTtcclxuICAgICAgICAgICAgdmlld3BvcnQueCA9IDEgLSAodmlld3BvcnQueCArIHZpZXdwb3J0LndpZHRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEluZGljZXNcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSgyICogKHdpZHRoIC0gMSkgKiAoaGVpZ2h0IC0gMSkgKiA2KTtcclxuICAgICAgICB2YXIgaGFsZndpZHRoID0gd2lkdGggLyAyO1xyXG4gICAgICAgIHZhciBoYWxmaGVpZ2h0ID0gaGVpZ2h0IC8gMjtcclxuICAgICAgICB2YXIgdmlkeCA9IDA7XHJcbiAgICAgICAgdmFyIGlpZHggPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgMjsgZSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaGVpZ2h0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd2lkdGg7IGkrKywgdmlkeCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgaiA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQnVpbGQgYSBxdWFkLiAgTG93ZXIgcmlnaHQgYW5kIHVwcGVyIGxlZnQgcXVhZHJhbnRzIGhhdmUgcXVhZHMgd2l0aFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0cmlhbmdsZSBkaWFnb25hbCBmbGlwcGVkIHRvIGdldCB0aGUgdmlnbmV0dGUgdG8gaW50ZXJwb2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZWN0bHkuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChpIDw9IGhhbGZ3aWR0aCkgPT0gKGogPD0gaGFsZmhlaWdodCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVhZCBkaWFnb25hbCBsb3dlciBsZWZ0IHRvIHVwcGVyIHJpZ2h0LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSB3aWR0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVhZCBkaWFnb25hbCB1cHBlciBsZWZ0IHRvIGxvd2VyIHJpZ2h0LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fbWVzaC5nZW9tZXRyeS5pbmRpY2VzID0gaW5kaWNlcztcclxuXHJcbiAgICAgICAgdGhpcy5fbWVzaC5nZW9tZXRyeS5kaXJ0eSgpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENhcmRib2FyZERpc3RvcnRlcjtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vTm9kZSc7XHJcbmltcG9ydCBDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcclxuXHJcbnZhciB0bXBQcm9qZWN0aW9uTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbnZhciBTdGVyZW9DYW1lcmEgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG5cclxuICAgICAgICBhc3BlY3Q6IDAuNSxcclxuXHJcbiAgICAgICAgX2xlZnRDYW1lcmE6IG5ldyBDYW1lcmEoKSxcclxuXHJcbiAgICAgICAgX3JpZ2h0Q2FtZXJhOiBuZXcgQ2FtZXJhKCksXHJcblxyXG4gICAgICAgIF9leWVMZWZ0OiBuZXcgTWF0cml4NCgpLFxyXG4gICAgICAgIF9leWVSaWdodDogbmV3IE1hdHJpeDQoKSxcclxuXHJcbiAgICAgICAgX2ZyYW1lRGF0YTogbnVsbFxyXG4gICAgfTtcclxufSwge1xyXG5cclxuICAgIHVwZGF0ZUZyb21DYW1lcmE6IGZ1bmN0aW9uIChjYW1lcmEsIGZvY3VzLCB6b29tLCBleWVTZXApIHtcclxuICAgICAgICBpZiAoY2FtZXJhLnRyYW5zZm9ybU5lZWRzVXBkYXRlKCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdOb2RlIHRyYW5zZm9ybSBpcyBub3QgdXBkYXRlZCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9jdXMgPSBmb2N1cyA9PSBudWxsID8gMTAgOiBmb2N1cztcclxuICAgICAgICB6b29tID0gem9vbSA9PSBudWxsID8gMSA6IHpvb207XHJcbiAgICAgICAgZXllU2VwID0gZXllU2VwID09IG51bGwgPyAwLjA2NCA6IGV5ZVNlcDtcclxuXHJcbiAgICAgICAgdmFyIGZvdiA9IGNhbWVyYS5mb3Y7XHJcbiAgICAgICAgdmFyIGFzcGVjdCA9IGNhbWVyYS5hc3BlY3QgKiB0aGlzLmFzcGVjdDtcclxuICAgICAgICB2YXIgbmVhciA9IGNhbWVyYS5uZWFyO1xyXG5cclxuICAgICAgICAvLyBPZmYtYXhpcyBzdGVyZW9zY29waWMgZWZmZWN0IGJhc2VkIG9uXHJcbiAgICAgICAgLy8gaHR0cDovL3BhdWxib3Vya2UubmV0L3N0ZXJlb2dyYXBoaWNzL3N0ZXJlb3JlbmRlci9cclxuXHJcbiAgICAgICAgdG1wUHJvamVjdGlvbk1hdHJpeC5jb3B5KGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICB2YXIgZXllU2VwID0gZXllU2VwIC8gMjtcclxuICAgICAgICB2YXIgZXllU2VwT25Qcm9qZWN0aW9uID0gZXllU2VwICogbmVhciAvIGZvY3VzO1xyXG4gICAgICAgIHZhciB5bWF4ID0gKG5lYXIgKiBNYXRoLnRhbihNYXRoLlBJIC8gMTgwICogZm92ICogMC41ICkgKSAvIHpvb207XHJcbiAgICAgICAgdmFyIHhtaW4sIHhtYXg7XHJcblxyXG4gICAgICAgIC8vIHRyYW5zbGF0ZSB4T2Zmc2V0XHJcbiAgICAgICAgdGhpcy5fZXllTGVmdC5hcnJheVsxMl0gPSAtIGV5ZVNlcDtcclxuICAgICAgICB0aGlzLl9leWVSaWdodC5hcnJheVsxMl0gPSBleWVTZXA7XHJcblxyXG4gICAgICAgIC8vIGZvciBsZWZ0IGV5ZVxyXG4gICAgICAgIHhtaW4gPSAtIHltYXggKiBhc3BlY3QgKyBleWVTZXBPblByb2plY3Rpb247XHJcbiAgICAgICAgeG1heCA9IHltYXggKiBhc3BlY3QgKyBleWVTZXBPblByb2plY3Rpb247XHJcblxyXG4gICAgICAgIHRtcFByb2plY3Rpb25NYXRyaXguYXJyYXlbMF0gPSAyICogbmVhciAvICh4bWF4IC0geG1pbik7XHJcbiAgICAgICAgdG1wUHJvamVjdGlvbk1hdHJpeC5hcnJheVs4XSA9ICh4bWF4ICsgeG1pbiApIC8gKHhtYXggLSB4bWluKTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGVmdENhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmNvcHkodG1wUHJvamVjdGlvbk1hdHJpeCk7XHJcblxyXG4gICAgICAgIC8vIGZvciByaWdodCBleWVcclxuICAgICAgICB4bWluID0gLSB5bWF4ICogYXNwZWN0IC0gZXllU2VwT25Qcm9qZWN0aW9uO1xyXG4gICAgICAgIHhtYXggPSB5bWF4ICogYXNwZWN0IC0gZXllU2VwT25Qcm9qZWN0aW9uO1xyXG5cclxuICAgICAgICB0bXBQcm9qZWN0aW9uTWF0cml4LmFycmF5WzBdID0gMiAqIG5lYXIgLyAoeG1heCAtIHhtaW4pO1xyXG4gICAgICAgIHRtcFByb2plY3Rpb25NYXRyaXguYXJyYXlbOF0gPSAoeG1heCArIHhtaW4gKSAvICh4bWF4IC0geG1pbik7XHJcblxyXG4gICAgICAgIHRoaXMuX3JpZ2h0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXguY29weSh0bXBQcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGVmdENhbWVyYS53b3JsZFRyYW5zZm9ybVxyXG4gICAgICAgICAgICAuY29weShjYW1lcmEud29ybGRUcmFuc2Zvcm0pXHJcbiAgICAgICAgICAgIC5tdWx0aXBseSh0aGlzLl9leWVMZWZ0KTtcclxuXHJcbiAgICAgICAgdGhpcy5fcmlnaHRDYW1lcmEud29ybGRUcmFuc2Zvcm1cclxuICAgICAgICAgICAgLmNvcHkoY2FtZXJhLndvcmxkVHJhbnNmb3JtKVxyXG4gICAgICAgICAgICAubXVsdGlwbHkodGhpcy5fZXllUmlnaHQpO1xyXG5cclxuICAgICAgICB0aGlzLl9sZWZ0Q2FtZXJhLmRlY29tcG9zZVdvcmxkVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgdGhpcy5fbGVmdENhbWVyYS5kZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JpZ2h0Q2FtZXJhLmRlY29tcG9zZVdvcmxkVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgdGhpcy5fcmlnaHRDYW1lcmEuZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVGcm9tVlJEaXNwbGF5OiBmdW5jdGlvbiAodnJEaXNwbGF5LCBwYXJlbnROb2RlKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgVlJGcmFtZURhdGEgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmcmFtZURhdGEgPSB0aGlzLl9mcmFtZURhdGEgfHwgKHRoaXMuX2ZyYW1lRGF0YSA9IG5ldyBWUkZyYW1lRGF0YSgpKTtcclxuICAgICAgICB2ckRpc3BsYXkuZ2V0RnJhbWVEYXRhKGZyYW1lRGF0YSk7XHJcbiAgICAgICAgdmFyIGxlZnRDYW1lcmEgPSB0aGlzLl9sZWZ0Q2FtZXJhO1xyXG4gICAgICAgIHZhciByaWdodENhbWVyYSA9IHRoaXMuX3JpZ2h0Q2FtZXJhO1xyXG5cclxuICAgICAgICBsZWZ0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXguc2V0QXJyYXkoZnJhbWVEYXRhLmxlZnRQcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICBsZWZ0Q2FtZXJhLmRlY29tcG9zZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICAgICAgICBsZWZ0Q2FtZXJhLnZpZXdNYXRyaXguc2V0QXJyYXkoZnJhbWVEYXRhLmxlZnRWaWV3TWF0cml4KTtcclxuICAgICAgICBsZWZ0Q2FtZXJhLnNldFZpZXdNYXRyaXgobGVmdENhbWVyYS52aWV3TWF0cml4KTtcclxuXHJcbiAgICAgICAgcmlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5zZXRBcnJheShmcmFtZURhdGEucmlnaHRQcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICByaWdodENhbWVyYS5kZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgcmlnaHRDYW1lcmEudmlld01hdHJpeC5zZXRBcnJheShmcmFtZURhdGEucmlnaHRWaWV3TWF0cml4KTtcclxuICAgICAgICByaWdodENhbWVyYS5zZXRWaWV3TWF0cml4KHJpZ2h0Q2FtZXJhLnZpZXdNYXRyaXgpO1xyXG5cclxuICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLndvcmxkVHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlLnRyYW5zZm9ybU5lZWRzVXBkYXRlKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTm9kZSB0cmFuc2Zvcm0gaXMgbm90IHVwZGF0ZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZWZ0Q2FtZXJhLndvcmxkVHJhbnNmb3JtLm11bHRpcGx5TGVmdChwYXJlbnROb2RlLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgbGVmdENhbWVyYS5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgICAgICAgICByaWdodENhbWVyYS53b3JsZFRyYW5zZm9ybS5tdWx0aXBseUxlZnQocGFyZW50Tm9kZS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIHJpZ2h0Q2FtZXJhLmRlY29tcG9zZVdvcmxkVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBnZXRMZWZ0Q2FtZXJhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlZnRDYW1lcmE7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFJpZ2h0Q2FtZXJhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JpZ2h0Q2FtZXJhO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFN0ZXJlb0NhbWVyYTtcclxuIiwiLyoqIEBuYW1lc3BhY2UgY2xheSAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5Lm1hdGggKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5hbmltYXRpb24gKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5hc3luYyAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LmNhbWVyYSAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LmNvbXBvc2l0b3IgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5jb3JlICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkuZ2VvbWV0cnkgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5oZWxwZXIgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5saWdodCAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LmxvYWRlciAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LnBhcnRpY2xlICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkucGx1Z2luICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkucHJlUGFzcyAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LnNoYWRlciAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LnRleHR1cmUgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS51dGlsICovXHJcblxyXG5pbXBvcnQgQW5pbWF0b3IkMCBmcm9tICcuL2FuaW1hdGlvbi9BbmltYXRvcic7XHJcbmltcG9ydCBCbGVuZDFEQ2xpcCQxIGZyb20gJy4vYW5pbWF0aW9uL0JsZW5kMURDbGlwJztcclxuaW1wb3J0IEJsZW5kMkRDbGlwJDIgZnJvbSAnLi9hbmltYXRpb24vQmxlbmQyRENsaXAnO1xyXG5pbXBvcnQgQ2xpcCQzIGZyb20gJy4vYW5pbWF0aW9uL0NsaXAnO1xyXG5pbXBvcnQgZWFzaW5nJDQgZnJvbSAnLi9hbmltYXRpb24vZWFzaW5nJztcclxuaW1wb3J0IFNhbXBsZXJUcmFjayQ1IGZyb20gJy4vYW5pbWF0aW9uL1NhbXBsZXJUcmFjayc7XHJcbmltcG9ydCBUaW1lbGluZSQ2IGZyb20gJy4vYW5pbWF0aW9uL1RpbWVsaW5lJztcclxuaW1wb3J0IFRyYWNrQ2xpcCQ3IGZyb20gJy4vYW5pbWF0aW9uL1RyYWNrQ2xpcCc7XHJcbmltcG9ydCBhcHBsaWNhdGlvbiQ4IGZyb20gJy4vYXBwbGljYXRpb24nO1xyXG5pbXBvcnQgVGFzayQ5IGZyb20gJy4vYXN5bmMvVGFzayc7XHJcbmltcG9ydCBUYXNrR3JvdXAkMTAgZnJvbSAnLi9hc3luYy9UYXNrR3JvdXAnO1xyXG5pbXBvcnQgQ2FtZXJhJDExIGZyb20gJy4vQ2FtZXJhJztcclxuaW1wb3J0IE9ydGhvZ3JhcGhpYyQxMiBmcm9tICcuL2NhbWVyYS9PcnRob2dyYXBoaWMnO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmUkMTMgZnJvbSAnLi9jYW1lcmEvUGVyc3BlY3RpdmUnO1xyXG5pbXBvcnQgQ29tcG9zaXRvciQxNCBmcm9tICcuL2NvbXBvc2l0b3IvQ29tcG9zaXRvcic7XHJcbmltcG9ydCBDb21wb3NpdG9yTm9kZSQxNSBmcm9tICcuL2NvbXBvc2l0b3IvQ29tcG9zaXRvck5vZGUnO1xyXG5pbXBvcnQgY3JlYXRlQ29tcG9zaXRvciQxNiBmcm9tICcuL2NvbXBvc2l0b3IvY3JlYXRlQ29tcG9zaXRvcic7XHJcbmltcG9ydCBGaWx0ZXJOb2RlJDE3IGZyb20gJy4vY29tcG9zaXRvci9GaWx0ZXJOb2RlJztcclxuaW1wb3J0IEdyYXBoJDE4IGZyb20gJy4vY29tcG9zaXRvci9HcmFwaCc7XHJcbmltcG9ydCBQYXNzJDE5IGZyb20gJy4vY29tcG9zaXRvci9QYXNzJztcclxuaW1wb3J0IFNjZW5lTm9kZSQyMCBmcm9tICcuL2NvbXBvc2l0b3IvU2NlbmVOb2RlJztcclxuaW1wb3J0IFRleHR1cmVOb2RlJDIxIGZyb20gJy4vY29tcG9zaXRvci9UZXh0dXJlTm9kZSc7XHJcbmltcG9ydCBUZXh0dXJlUG9vbCQyMiBmcm9tICcuL2NvbXBvc2l0b3IvVGV4dHVyZVBvb2wnO1xyXG5pbXBvcnQgQmFzZSQyMyBmcm9tICcuL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBDYWNoZSQyNCBmcm9tICcuL2NvcmUvQ2FjaGUnO1xyXG5pbXBvcnQgY29sb3IkMjUgZnJvbSAnLi9jb3JlL2NvbG9yJztcclxuaW1wb3J0IGdsZW51bSQyNiBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IEdMSW5mbyQyNyBmcm9tICcuL2NvcmUvR0xJbmZvJztcclxuaW1wb3J0IExpbmtlZExpc3QkMjggZnJvbSAnLi9jb3JlL0xpbmtlZExpc3QnO1xyXG5pbXBvcnQgTFJVJDI5IGZyb20gJy4vY29yZS9MUlUnO1xyXG5pbXBvcnQgZXh0ZW5kJDMwIGZyb20gJy4vY29yZS9taXhpbi9leHRlbmQnO1xyXG5pbXBvcnQgbm90aWZpZXIkMzEgZnJvbSAnLi9jb3JlL21peGluL25vdGlmaWVyJztcclxuaW1wb3J0IHJlcXVlc3QkMzIgZnJvbSAnLi9jb3JlL3JlcXVlc3QnO1xyXG5pbXBvcnQgdXRpbCQzMyBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCB2ZW5kb3IkMzQgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCBjcmVhdGVDb21wb3NpdG9yJDM1IGZyb20gJy4vY3JlYXRlQ29tcG9zaXRvcic7XHJcbmltcG9ydCBHQnVmZmVyJDM2IGZyb20gJy4vZGVmZXJyZWQvR0J1ZmZlcic7XHJcbmltcG9ydCBSZW5kZXJlciQzNyBmcm9tICcuL2RlZmVycmVkL1JlbmRlcmVyJztcclxuaW1wb3J0IGdsbWF0cml4JDM4IGZyb20gJy4vZGVwL2dsbWF0cml4JztcclxuaW1wb3J0IEZyYW1lQnVmZmVyJDM5IGZyb20gJy4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgR2VvbWV0cnkkNDAgZnJvbSAnLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBDb25lJDQxIGZyb20gJy4vZ2VvbWV0cnkvQ29uZSc7XHJcbmltcG9ydCBDdWJlJDQyIGZyb20gJy4vZ2VvbWV0cnkvQ3ViZSc7XHJcbmltcG9ydCBDeWxpbmRlciQ0MyBmcm9tICcuL2dlb21ldHJ5L0N5bGluZGVyJztcclxuaW1wb3J0IFBhcmFtZXRyaWNTdXJmYWNlJDQ0IGZyb20gJy4vZ2VvbWV0cnkvUGFyYW1ldHJpY1N1cmZhY2UnO1xyXG5pbXBvcnQgUGxhbmUkNDUgZnJvbSAnLi9nZW9tZXRyeS9QbGFuZSc7XHJcbmltcG9ydCBTcGhlcmUkNDYgZnJvbSAnLi9nZW9tZXRyeS9TcGhlcmUnO1xyXG5pbXBvcnQgR2VvbWV0cnlCYXNlJDQ3IGZyb20gJy4vR2VvbWV0cnlCYXNlJztcclxuaW1wb3J0IEpvaW50JDQ4IGZyb20gJy4vSm9pbnQnO1xyXG5pbXBvcnQgTGlnaHQkNDkgZnJvbSAnLi9MaWdodCc7XHJcbmltcG9ydCBBbWJpZW50JDUwIGZyb20gJy4vbGlnaHQvQW1iaWVudCc7XHJcbmltcG9ydCBBbWJpZW50Q3ViZW1hcCQ1MSBmcm9tICcuL2xpZ2h0L0FtYmllbnRDdWJlbWFwJztcclxuaW1wb3J0IEFtYmllbnRTSCQ1MiBmcm9tICcuL2xpZ2h0L0FtYmllbnRTSCc7XHJcbmltcG9ydCBEaXJlY3Rpb25hbCQ1MyBmcm9tICcuL2xpZ2h0L0RpcmVjdGlvbmFsJztcclxuaW1wb3J0IFBvaW50JDU0IGZyb20gJy4vbGlnaHQvUG9pbnQnO1xyXG5pbXBvcnQgU3BoZXJlJDU1IGZyb20gJy4vbGlnaHQvU3BoZXJlJztcclxuaW1wb3J0IFNwb3QkNTYgZnJvbSAnLi9saWdodC9TcG90JztcclxuaW1wb3J0IFR1YmUkNTcgZnJvbSAnLi9saWdodC9UdWJlJztcclxuaW1wb3J0IEZYJDU4IGZyb20gJy4vbG9hZGVyL0ZYJztcclxuaW1wb3J0IEdMVEYkNTkgZnJvbSAnLi9sb2FkZXIvR0xURic7XHJcbmltcG9ydCBNYXRlcmlhbCQ2MCBmcm9tICcuL01hdGVyaWFsJztcclxuaW1wb3J0IEJvdW5kaW5nQm94JDYxIGZyb20gJy4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCBGcnVzdHVtJDYyIGZyb20gJy4vbWF0aC9GcnVzdHVtJztcclxuaW1wb3J0IE1hdHJpeDIkNjMgZnJvbSAnLi9tYXRoL01hdHJpeDInO1xyXG5pbXBvcnQgTWF0cml4MmQkNjQgZnJvbSAnLi9tYXRoL01hdHJpeDJkJztcclxuaW1wb3J0IE1hdHJpeDMkNjUgZnJvbSAnLi9tYXRoL01hdHJpeDMnO1xyXG5pbXBvcnQgTWF0cml4NCQ2NiBmcm9tICcuL21hdGgvTWF0cml4NCc7XHJcbmltcG9ydCBQbGFuZSQ2NyBmcm9tICcuL21hdGgvUGxhbmUnO1xyXG5pbXBvcnQgUXVhdGVybmlvbiQ2OCBmcm9tICcuL21hdGgvUXVhdGVybmlvbic7XHJcbmltcG9ydCBSYXkkNjkgZnJvbSAnLi9tYXRoL1JheSc7XHJcbmltcG9ydCB1dGlsJDcwIGZyb20gJy4vbWF0aC91dGlsJztcclxuaW1wb3J0IFZhbHVlJDcxIGZyb20gJy4vbWF0aC9WYWx1ZSc7XHJcbmltcG9ydCBWZWN0b3IyJDcyIGZyb20gJy4vbWF0aC9WZWN0b3IyJztcclxuaW1wb3J0IFZlY3RvcjMkNzMgZnJvbSAnLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgVmVjdG9yNCQ3NCBmcm9tICcuL21hdGgvVmVjdG9yNCc7XHJcbmltcG9ydCBNZXNoJDc1IGZyb20gJy4vTWVzaCc7XHJcbmltcG9ydCBOb2RlJDc2IGZyb20gJy4vTm9kZSc7XHJcbmltcG9ydCBFbWl0dGVyJDc3IGZyb20gJy4vcGFydGljbGUvRW1pdHRlcic7XHJcbmltcG9ydCBGaWVsZCQ3OCBmcm9tICcuL3BhcnRpY2xlL0ZpZWxkJztcclxuaW1wb3J0IEZvcmNlRmllbGQkNzkgZnJvbSAnLi9wYXJ0aWNsZS9Gb3JjZUZpZWxkJztcclxuaW1wb3J0IFBhcnRpY2xlJDgwIGZyb20gJy4vcGFydGljbGUvUGFydGljbGUnO1xyXG5pbXBvcnQgUGFydGljbGVSZW5kZXJhYmxlJDgxIGZyb20gJy4vcGFydGljbGUvUGFydGljbGVSZW5kZXJhYmxlJztcclxuaW1wb3J0IFBpeGVsUGlja2luZyQ4MiBmcm9tICcuL3BpY2tpbmcvUGl4ZWxQaWNraW5nJztcclxuaW1wb3J0IFJheVBpY2tpbmckODMgZnJvbSAnLi9waWNraW5nL1JheVBpY2tpbmcnO1xyXG5pbXBvcnQgRnJlZUNvbnRyb2wkODQgZnJvbSAnLi9wbHVnaW4vRnJlZUNvbnRyb2wnO1xyXG5pbXBvcnQgR2FtZXBhZENvbnRyb2wkODUgZnJvbSAnLi9wbHVnaW4vR2FtZXBhZENvbnRyb2wnO1xyXG5pbXBvcnQgR2VzdHVyZU1nciQ4NiBmcm9tICcuL3BsdWdpbi9HZXN0dXJlTWdyJztcclxuaW1wb3J0IEluZmluaXRlUGxhbmUkODcgZnJvbSAnLi9wbHVnaW4vSW5maW5pdGVQbGFuZSc7XHJcbmltcG9ydCBPcmJpdENvbnRyb2wkODggZnJvbSAnLi9wbHVnaW4vT3JiaXRDb250cm9sJztcclxuaW1wb3J0IFNreWJveCQ4OSBmcm9tICcuL3BsdWdpbi9Ta3lib3gnO1xyXG5pbXBvcnQgU2t5ZG9tZSQ5MCBmcm9tICcuL3BsdWdpbi9Ta3lkb21lJztcclxuaW1wb3J0IEVudmlyb25tZW50TWFwJDkxIGZyb20gJy4vcHJlUGFzcy9FbnZpcm9ubWVudE1hcCc7XHJcbmltcG9ydCBTaGFkb3dNYXAkOTIgZnJvbSAnLi9wcmVQYXNzL1NoYWRvd01hcCc7XHJcbmltcG9ydCBSZW5kZXJhYmxlJDkzIGZyb20gJy4vUmVuZGVyYWJsZSc7XHJcbmltcG9ydCBSZW5kZXJlciQ5NCBmcm9tICcuL1JlbmRlcmVyJztcclxuaW1wb3J0IFNjZW5lJDk1IGZyb20gJy4vU2NlbmUnO1xyXG5pbXBvcnQgU2hhZGVyJDk2IGZyb20gJy4vU2hhZGVyJztcclxuaW1wb3J0IGxpYnJhcnkkOTcgZnJvbSAnLi9zaGFkZXIvbGlicmFyeSc7XHJcbmltcG9ydCByZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yJDk4IGZyb20gJy4vc2hhZGVyL3JlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3InO1xyXG5pbXBvcnQgbGlnaHQkOTkgZnJvbSAnLi9zaGFkZXIvc291cmNlL2hlYWRlci9saWdodCc7XHJcbmltcG9ydCBTa2VsZXRvbiQxMDAgZnJvbSAnLi9Ta2VsZXRvbic7XHJcbmltcG9ydCBTdGFuZGFyZE1hdGVyaWFsJDEwMSBmcm9tICcuL1N0YW5kYXJkTWF0ZXJpYWwnO1xyXG5pbXBvcnQgU3RhdGljR2VvbWV0cnkkMTAyIGZyb20gJy4vU3RhdGljR2VvbWV0cnknO1xyXG5pbXBvcnQgVGV4dHVyZSQxMDMgZnJvbSAnLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmUyRCQxMDQgZnJvbSAnLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUkMTA1IGZyb20gJy4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgVGltZWxpbmUkMTA2IGZyb20gJy4vVGltZWxpbmUnO1xyXG5pbXBvcnQgY3ViZW1hcCQxMDcgZnJvbSAnLi91dGlsL2N1YmVtYXAnO1xyXG5pbXBvcnQgZGRzJDEwOCBmcm9tICcuL3V0aWwvZGRzJztcclxuaW1wb3J0IGRlbGF1bmF5JDEwOSBmcm9tICcuL3V0aWwvZGVsYXVuYXknO1xyXG5pbXBvcnQgaGRyJDExMCBmcm9tICcuL3V0aWwvaGRyJztcclxuaW1wb3J0IG1lc2gkMTExIGZyb20gJy4vdXRpbC9tZXNoJztcclxuaW1wb3J0IHNoJDExMiBmcm9tICcuL3V0aWwvc2gnO1xyXG5pbXBvcnQgdGV4dHVyZSQxMTMgZnJvbSAnLi91dGlsL3RleHR1cmUnO1xyXG5pbXBvcnQgdHJhbnNmZXJhYmxlJDExNCBmcm9tICcuL3V0aWwvdHJhbnNmZXJhYmxlJztcclxuaW1wb3J0IHZlcnNpb24kMTE1IGZyb20gJy4vdmVyc2lvbic7XHJcbmltcG9ydCBDYXJkYm9hcmREaXN0b3J0ZXIkMTE2IGZyb20gJy4vdnIvQ2FyZGJvYXJkRGlzdG9ydGVyJztcclxuaW1wb3J0IFN0ZXJlb0NhbWVyYSQxMTcgZnJvbSAnLi92ci9TdGVyZW9DYW1lcmEnO1xyXG5cclxuXHJcbnZhciBhbmltYXRpb24gPSB7XHJcbiAgICBBbmltYXRvciA6IEFuaW1hdG9yJDAsXHJcbiAgICBCbGVuZDFEQ2xpcCA6IEJsZW5kMURDbGlwJDEsXHJcbiAgICBCbGVuZDJEQ2xpcCA6IEJsZW5kMkRDbGlwJDIsXHJcbiAgICBDbGlwIDogQ2xpcCQzLFxyXG4gICAgZWFzaW5nIDogZWFzaW5nJDQsXHJcbiAgICBTYW1wbGVyVHJhY2sgOiBTYW1wbGVyVHJhY2skNSxcclxuICAgIFRpbWVsaW5lIDogVGltZWxpbmUkNixcclxuICAgIFRyYWNrQ2xpcCA6IFRyYWNrQ2xpcCQ3XHJcbn07XHJcbmV4cG9ydCB7IGFuaW1hdGlvbiB9O1xyXG5cclxuZXhwb3J0IHsgYXBwbGljYXRpb24kOCBhcyBhcHBsaWNhdGlvbiB9O1xyXG5cclxudmFyIGFzeW5jID0ge1xyXG4gICAgVGFzayA6IFRhc2skOSxcclxuICAgIFRhc2tHcm91cCA6IFRhc2tHcm91cCQxMFxyXG59O1xyXG5leHBvcnQgeyBhc3luYyB9O1xyXG5cclxuZXhwb3J0IHsgQ2FtZXJhJDExIGFzIENhbWVyYSB9O1xyXG5cclxudmFyIGNhbWVyYSA9IHtcclxuICAgIE9ydGhvZ3JhcGhpYyA6IE9ydGhvZ3JhcGhpYyQxMixcclxuICAgIFBlcnNwZWN0aXZlIDogUGVyc3BlY3RpdmUkMTNcclxufTtcclxuZXhwb3J0IHsgY2FtZXJhIH07XHJcblxyXG5cclxudmFyIGNvbXBvc2l0b3IgPSB7XHJcbiAgICBDb21wb3NpdG9yIDogQ29tcG9zaXRvciQxNCxcclxuICAgIENvbXBvc2l0b3JOb2RlIDogQ29tcG9zaXRvck5vZGUkMTUsXHJcbiAgICBjcmVhdGVDb21wb3NpdG9yIDogY3JlYXRlQ29tcG9zaXRvciQxNixcclxuICAgIEZpbHRlck5vZGUgOiBGaWx0ZXJOb2RlJDE3LFxyXG4gICAgR3JhcGggOiBHcmFwaCQxOCxcclxuICAgIFBhc3MgOiBQYXNzJDE5LFxyXG4gICAgU2NlbmVOb2RlIDogU2NlbmVOb2RlJDIwLFxyXG4gICAgVGV4dHVyZU5vZGUgOiBUZXh0dXJlTm9kZSQyMSxcclxuICAgIFRleHR1cmVQb29sIDogVGV4dHVyZVBvb2wkMjJcclxufTtcclxuZXhwb3J0IHsgY29tcG9zaXRvciB9O1xyXG5cclxuXHJcbnZhciBjb3JlID0ge1xyXG4gICAgQmFzZSA6IEJhc2UkMjMsXHJcbiAgICBDYWNoZSA6IENhY2hlJDI0LFxyXG4gICAgY29sb3IgOiBjb2xvciQyNSxcclxuICAgIGdsZW51bSA6IGdsZW51bSQyNixcclxuICAgIEdMSW5mbyA6IEdMSW5mbyQyNyxcclxuICAgIExpbmtlZExpc3QgOiBMaW5rZWRMaXN0JDI4LFxyXG4gICAgTFJVIDogTFJVJDI5LFxyXG4gICAgbWl4aW4gOiB7XHJcbiAgICAgICAgZXh0ZW5kIDogZXh0ZW5kJDMwLFxyXG4gICAgICAgIG5vdGlmaWVyIDogbm90aWZpZXIkMzFcclxuICAgIH0sXHJcbiAgICByZXF1ZXN0IDogcmVxdWVzdCQzMixcclxuICAgIHV0aWwgOiB1dGlsJDMzLFxyXG4gICAgdmVuZG9yIDogdmVuZG9yJDM0XHJcbn07XHJcbmV4cG9ydCB7IGNvcmUgfTtcclxuXHJcbmV4cG9ydCB7IGNyZWF0ZUNvbXBvc2l0b3IkMzUgYXMgY3JlYXRlQ29tcG9zaXRvciB9O1xyXG5cclxudmFyIGRlZmVycmVkID0ge1xyXG4gICAgR0J1ZmZlciA6IEdCdWZmZXIkMzYsXHJcbiAgICBSZW5kZXJlciA6IFJlbmRlcmVyJDM3XHJcbn07XHJcbmV4cG9ydCB7IGRlZmVycmVkIH07XHJcblxyXG5cclxudmFyIGRlcCA9IHtcclxuICAgIGdsbWF0cml4IDogZ2xtYXRyaXgkMzhcclxufTtcclxuZXhwb3J0IHsgZGVwIH07XHJcblxyXG5leHBvcnQgeyBGcmFtZUJ1ZmZlciQzOSBhcyBGcmFtZUJ1ZmZlciB9O1xyXG5leHBvcnQgeyBHZW9tZXRyeSQ0MCBhcyBHZW9tZXRyeSB9O1xyXG5cclxudmFyIGdlb21ldHJ5ID0ge1xyXG4gICAgQ29uZSA6IENvbmUkNDEsXHJcbiAgICBDdWJlIDogQ3ViZSQ0MixcclxuICAgIEN5bGluZGVyIDogQ3lsaW5kZXIkNDMsXHJcbiAgICBQYXJhbWV0cmljU3VyZmFjZSA6IFBhcmFtZXRyaWNTdXJmYWNlJDQ0LFxyXG4gICAgUGxhbmUgOiBQbGFuZSQ0NSxcclxuICAgIFNwaGVyZSA6IFNwaGVyZSQ0NlxyXG59O1xyXG5leHBvcnQgeyBnZW9tZXRyeSB9O1xyXG5cclxuZXhwb3J0IHsgR2VvbWV0cnlCYXNlJDQ3IGFzIEdlb21ldHJ5QmFzZSB9O1xyXG5leHBvcnQgeyBKb2ludCQ0OCBhcyBKb2ludCB9O1xyXG5leHBvcnQgeyBMaWdodCQ0OSBhcyBMaWdodCB9O1xyXG5cclxudmFyIGxpZ2h0ID0ge1xyXG4gICAgQW1iaWVudCA6IEFtYmllbnQkNTAsXHJcbiAgICBBbWJpZW50Q3ViZW1hcCA6IEFtYmllbnRDdWJlbWFwJDUxLFxyXG4gICAgQW1iaWVudFNIIDogQW1iaWVudFNIJDUyLFxyXG4gICAgRGlyZWN0aW9uYWwgOiBEaXJlY3Rpb25hbCQ1MyxcclxuICAgIFBvaW50IDogUG9pbnQkNTQsXHJcbiAgICBTcGhlcmUgOiBTcGhlcmUkNTUsXHJcbiAgICBTcG90IDogU3BvdCQ1NixcclxuICAgIFR1YmUgOiBUdWJlJDU3XHJcbn07XHJcbmV4cG9ydCB7IGxpZ2h0IH07XHJcblxyXG5cclxudmFyIGxvYWRlciA9IHtcclxuICAgIEZYIDogRlgkNTgsXHJcbiAgICBHTFRGIDogR0xURiQ1OVxyXG59O1xyXG5leHBvcnQgeyBsb2FkZXIgfTtcclxuXHJcbmV4cG9ydCB7IE1hdGVyaWFsJDYwIGFzIE1hdGVyaWFsIH07XHJcblxyXG52YXIgbWF0aCA9IHtcclxuICAgIEJvdW5kaW5nQm94IDogQm91bmRpbmdCb3gkNjEsXHJcbiAgICBGcnVzdHVtIDogRnJ1c3R1bSQ2MixcclxuICAgIE1hdHJpeDIgOiBNYXRyaXgyJDYzLFxyXG4gICAgTWF0cml4MmQgOiBNYXRyaXgyZCQ2NCxcclxuICAgIE1hdHJpeDMgOiBNYXRyaXgzJDY1LFxyXG4gICAgTWF0cml4NCA6IE1hdHJpeDQkNjYsXHJcbiAgICBQbGFuZSA6IFBsYW5lJDY3LFxyXG4gICAgUXVhdGVybmlvbiA6IFF1YXRlcm5pb24kNjgsXHJcbiAgICBSYXkgOiBSYXkkNjksXHJcbiAgICB1dGlsIDogdXRpbCQ3MCxcclxuICAgIFZhbHVlIDogVmFsdWUkNzEsXHJcbiAgICBWZWN0b3IyIDogVmVjdG9yMiQ3MixcclxuICAgIFZlY3RvcjMgOiBWZWN0b3IzJDczLFxyXG4gICAgVmVjdG9yNCA6IFZlY3RvcjQkNzRcclxufTtcclxuZXhwb3J0IHsgbWF0aCB9O1xyXG5leHBvcnQgeyBCb3VuZGluZ0JveCQ2MSBhcyBCb3VuZGluZ0JveCB9O1xyXG5leHBvcnQgeyBGcnVzdHVtJDYyIGFzIEZydXN0dW0gfTtcclxuZXhwb3J0IHsgTWF0cml4MiQ2MyBhcyBNYXRyaXgyIH07XHJcbmV4cG9ydCB7IE1hdHJpeDJkJDY0IGFzIE1hdHJpeDJkIH07XHJcbmV4cG9ydCB7IE1hdHJpeDMkNjUgYXMgTWF0cml4MyB9O1xyXG5leHBvcnQgeyBNYXRyaXg0JDY2IGFzIE1hdHJpeDQgfTtcclxuZXhwb3J0IHsgUGxhbmUkNjcgYXMgUGxhbmUgfTtcclxuZXhwb3J0IHsgUXVhdGVybmlvbiQ2OCBhcyBRdWF0ZXJuaW9uIH07XHJcbmV4cG9ydCB7IFJheSQ2OSBhcyBSYXkgfTtcclxuZXhwb3J0IHsgVmFsdWUkNzEgYXMgVmFsdWUgfTtcclxuZXhwb3J0IHsgVmVjdG9yMiQ3MiBhcyBWZWN0b3IyIH07XHJcbmV4cG9ydCB7IFZlY3RvcjMkNzMgYXMgVmVjdG9yMyB9O1xyXG5leHBvcnQgeyBWZWN0b3I0JDc0IGFzIFZlY3RvcjQgfTtcclxuXHJcbmV4cG9ydCB7IE1lc2gkNzUgYXMgTWVzaCB9O1xyXG5leHBvcnQgeyBOb2RlJDc2IGFzIE5vZGUgfTtcclxuXHJcbnZhciBwYXJ0aWNsZSA9IHtcclxuICAgIEVtaXR0ZXIgOiBFbWl0dGVyJDc3LFxyXG4gICAgRmllbGQgOiBGaWVsZCQ3OCxcclxuICAgIEZvcmNlRmllbGQgOiBGb3JjZUZpZWxkJDc5LFxyXG4gICAgUGFydGljbGUgOiBQYXJ0aWNsZSQ4MCxcclxuICAgIFBhcnRpY2xlUmVuZGVyYWJsZSA6IFBhcnRpY2xlUmVuZGVyYWJsZSQ4MVxyXG59O1xyXG5leHBvcnQgeyBwYXJ0aWNsZSB9O1xyXG5cclxuXHJcbnZhciBwaWNraW5nID0ge1xyXG4gICAgUGl4ZWxQaWNraW5nIDogUGl4ZWxQaWNraW5nJDgyLFxyXG4gICAgUmF5UGlja2luZyA6IFJheVBpY2tpbmckODNcclxufTtcclxuZXhwb3J0IHsgcGlja2luZyB9O1xyXG5cclxuXHJcbnZhciBwbHVnaW4gPSB7XHJcbiAgICBGcmVlQ29udHJvbCA6IEZyZWVDb250cm9sJDg0LFxyXG4gICAgR2FtZXBhZENvbnRyb2wgOiBHYW1lcGFkQ29udHJvbCQ4NSxcclxuICAgIEdlc3R1cmVNZ3IgOiBHZXN0dXJlTWdyJDg2LFxyXG4gICAgSW5maW5pdGVQbGFuZSA6IEluZmluaXRlUGxhbmUkODcsXHJcbiAgICBPcmJpdENvbnRyb2wgOiBPcmJpdENvbnRyb2wkODgsXHJcbiAgICBTa3lib3ggOiBTa3lib3gkODksXHJcbiAgICBTa3lkb21lIDogU2t5ZG9tZSQ5MFxyXG59O1xyXG5leHBvcnQgeyBwbHVnaW4gfTtcclxuXHJcblxyXG52YXIgcHJlUGFzcyA9IHtcclxuICAgIEVudmlyb25tZW50TWFwIDogRW52aXJvbm1lbnRNYXAkOTEsXHJcbiAgICBTaGFkb3dNYXAgOiBTaGFkb3dNYXAkOTJcclxufTtcclxuZXhwb3J0IHsgcHJlUGFzcyB9O1xyXG5cclxuZXhwb3J0IHsgUmVuZGVyYWJsZSQ5MyBhcyBSZW5kZXJhYmxlIH07XHJcbmV4cG9ydCB7IFJlbmRlcmVyJDk0IGFzIFJlbmRlcmVyIH07XHJcbmV4cG9ydCB7IFNjZW5lJDk1IGFzIFNjZW5lIH07XHJcbmV4cG9ydCB7IFNoYWRlciQ5NiBhcyBTaGFkZXIgfTtcclxuXHJcbnZhciBzaGFkZXIgPSB7XHJcbiAgICBsaWJyYXJ5IDogbGlicmFyeSQ5NyxcclxuICAgIHJlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3IgOiByZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yJDk4LFxyXG4gICAgc291cmNlIDoge1xyXG4gICAgaGVhZGVyIDoge1xyXG4gICAgICAgIGxpZ2h0IDogbGlnaHQkOTlcclxuICAgIH1cclxuICAgIH1cclxufTtcclxuZXhwb3J0IHsgc2hhZGVyIH07XHJcblxyXG5leHBvcnQgeyBTa2VsZXRvbiQxMDAgYXMgU2tlbGV0b24gfTtcclxuZXhwb3J0IHsgU3RhbmRhcmRNYXRlcmlhbCQxMDEgYXMgU3RhbmRhcmRNYXRlcmlhbCB9O1xyXG5leHBvcnQgeyBTdGF0aWNHZW9tZXRyeSQxMDIgYXMgU3RhdGljR2VvbWV0cnkgfTtcclxuZXhwb3J0IHsgVGV4dHVyZSQxMDMgYXMgVGV4dHVyZSB9O1xyXG5leHBvcnQgeyBUZXh0dXJlMkQkMTA0IGFzIFRleHR1cmUyRCB9O1xyXG5leHBvcnQgeyBUZXh0dXJlQ3ViZSQxMDUgYXMgVGV4dHVyZUN1YmUgfTtcclxuZXhwb3J0IHsgVGltZWxpbmUkMTA2IGFzIFRpbWVsaW5lIH07XHJcblxyXG52YXIgdXRpbCA9IHtcclxuICAgIGN1YmVtYXAgOiBjdWJlbWFwJDEwNyxcclxuICAgIGRkcyA6IGRkcyQxMDgsXHJcbiAgICBkZWxhdW5heSA6IGRlbGF1bmF5JDEwOSxcclxuICAgIGhkciA6IGhkciQxMTAsXHJcbiAgICBtZXNoIDogbWVzaCQxMTEsXHJcbiAgICBzaCA6IHNoJDExMixcclxuICAgIHRleHR1cmUgOiB0ZXh0dXJlJDExMyxcclxuICAgIHRyYW5zZmVyYWJsZSA6IHRyYW5zZmVyYWJsZSQxMTRcclxufTtcclxuZXhwb3J0IHsgdXRpbCB9O1xyXG5cclxuZXhwb3J0IHsgdmVyc2lvbiQxMTUgYXMgdmVyc2lvbiB9O1xyXG5cclxudmFyIHZyID0ge1xyXG4gICAgQ2FyZGJvYXJkRGlzdG9ydGVyIDogQ2FyZGJvYXJkRGlzdG9ydGVyJDExNixcclxuICAgIFN0ZXJlb0NhbWVyYSA6IFN0ZXJlb0NhbWVyYSQxMTdcclxufTtcclxuZXhwb3J0IHsgdnIgfTtcclxuO1xyXG4iXSwibmFtZXMiOlsiZWFzaW5nIiwiRWFzaW5nIiwiZWFzaW5nRnVuY3MiLCJHTE1BVF9SQU5ET00iLCJ1dGlsIiwibm90aWZpZXJNaXhpbiIsIkxSVSIsInBhcnNlQ29sb3IiLCJnZXREZWZpbmVDb2RlIiwicHJlekVzc2wiLCJub29wIiwicHJvdG8iLCJkZWZpbmVQcm9wZXJ0eSIsImxpZ2h0U2hhZGVyIiwiUGxhbmUiLCJ2ZWMzU2V0IiwidmVjM0NvcHkiLCJFUFNJTE9OIiwicHJvZ3JhbUtleUNhY2hlIiwiZ2V0UHJvZ3JhbUtleSIsIkxSVUNhY2hlIiwiQXR0cmlidXRlIiwiQ3ViZSIsIlNwaGVyZSIsIlBhcmFtZXRyaWNTdXJmYWNlIiwiaXNQb3dlck9mVHdvIiwiUGVyc3BlY3RpdmUiLCJPcnRob2dyYXBoaWMiLCJ1dGlsRXNzbCIsInNoYWRlckxpYnJhcnkiLCJQZXJzcGVjdGl2ZUNhbWVyYSIsIk9ydGhvZ3JhcGhpY0NhbWVyYSIsImNhbWVyYSIsIk9ydGhvQ2FtZXJhIiwiU2t5Ym94IiwiQ3ViZUdlb21ldHJ5IiwidGFyZ2V0cyIsInJldCIsImhkciIsImRkcyIsIlNreWRvbWUiLCJDdWJlR2VvIiwiU3BoZXJlR2VvIiwiUGxhbmVHZW8iLCJQYXJhbWV0cmljU3VyZmFjZUdlbyIsInNoVXRpbCIsIkdyYXBoTm9kZSIsIlNjZW5lTm9kZSIsIlRleHR1cmVOb2RlIiwiRmlsdGVyTm9kZSIsInJlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3IiLCJDb21wb1NjZW5lTm9kZSIsIkNvbXBvVGV4dHVyZU5vZGUiLCJDb21wb0ZpbHRlck5vZGUiLCJDb25lIiwiQ3lsaW5kZXIiLCJDb25lR2VvbWV0cnkiLCJDb25lR2VvIiwiQ3lsaW5kZXJHZW8iLCJGdWxsUXVhZFBhc3MiLCJvdXRwdXRFc3NsIiwiQmFzZSIsIkNhbWVyYSIsIkFuaW1hdG9yJDAiLCJCbGVuZDFEQ2xpcCQxIiwiQmxlbmQyRENsaXAkMiIsIkNsaXAkMyIsImVhc2luZyQ0IiwiU2FtcGxlclRyYWNrJDUiLCJUaW1lbGluZSQ2IiwiVHJhY2tDbGlwJDciLCJUYXNrJDkiLCJUYXNrR3JvdXAkMTAiLCJPcnRob2dyYXBoaWMkMTIiLCJQZXJzcGVjdGl2ZSQxMyIsIkNvbXBvc2l0b3IkMTQiLCJDb21wb3NpdG9yTm9kZSQxNSIsImNyZWF0ZUNvbXBvc2l0b3IkMTYiLCJGaWx0ZXJOb2RlJDE3IiwiR3JhcGgkMTgiLCJQYXNzJDE5IiwiU2NlbmVOb2RlJDIwIiwiVGV4dHVyZU5vZGUkMjEiLCJUZXh0dXJlUG9vbCQyMiIsIkJhc2UkMjMiLCJDYWNoZSQyNCIsImNvbG9yJDI1IiwiZ2xlbnVtJDI2IiwiR0xJbmZvJDI3IiwiTGlua2VkTGlzdCQyOCIsIkxSVSQyOSIsImV4dGVuZCQzMCIsIm5vdGlmaWVyJDMxIiwicmVxdWVzdCQzMiIsInV0aWwkMzMiLCJ2ZW5kb3IkMzQiLCJHQnVmZmVyJDM2IiwiUmVuZGVyZXIkMzciLCJnbG1hdHJpeCQzOCIsIkNvbmUkNDEiLCJDdWJlJDQyIiwiQ3lsaW5kZXIkNDMiLCJQYXJhbWV0cmljU3VyZmFjZSQ0NCIsIlBsYW5lJDQ1IiwiU3BoZXJlJDQ2IiwiQW1iaWVudCQ1MCIsIkFtYmllbnRDdWJlbWFwJDUxIiwiQW1iaWVudFNIJDUyIiwiRGlyZWN0aW9uYWwkNTMiLCJQb2ludCQ1NCIsIlNwaGVyZSQ1NSIsIlNwb3QkNTYiLCJUdWJlJDU3IiwiRlgkNTgiLCJHTFRGJDU5IiwiQm91bmRpbmdCb3gkNjEiLCJGcnVzdHVtJDYyIiwiTWF0cml4MiQ2MyIsIk1hdHJpeDJkJDY0IiwiTWF0cml4MyQ2NSIsIk1hdHJpeDQkNjYiLCJQbGFuZSQ2NyIsIlF1YXRlcm5pb24kNjgiLCJSYXkkNjkiLCJ1dGlsJDcwIiwiVmFsdWUkNzEiLCJWZWN0b3IyJDcyIiwiVmVjdG9yMyQ3MyIsIlZlY3RvcjQkNzQiLCJFbWl0dGVyJDc3IiwiRmllbGQkNzgiLCJGb3JjZUZpZWxkJDc5IiwiUGFydGljbGUkODAiLCJQYXJ0aWNsZVJlbmRlcmFibGUkODEiLCJQaXhlbFBpY2tpbmckODIiLCJSYXlQaWNraW5nJDgzIiwiRnJlZUNvbnRyb2wkODQiLCJHYW1lcGFkQ29udHJvbCQ4NSIsIkdlc3R1cmVNZ3IkODYiLCJJbmZpbml0ZVBsYW5lJDg3IiwiT3JiaXRDb250cm9sJDg4IiwiU2t5Ym94JDg5IiwiU2t5ZG9tZSQ5MCIsIkVudmlyb25tZW50TWFwJDkxIiwiU2hhZG93TWFwJDkyIiwibGlicmFyeSQ5NyIsInJlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3IkOTgiLCJsaWdodCQ5OSIsImN1YmVtYXAkMTA3IiwiZGRzJDEwOCIsImRlbGF1bmF5JDEwOSIsImhkciQxMTAiLCJtZXNoJDExMSIsInNoJDExMiIsInRleHR1cmUkMTEzIiwidHJhbnNmZXJhYmxlJDExNCIsIkNhcmRib2FyZERpc3RvcnRlciQxMTYiLCJTdGVyZW9DYW1lcmEkMTE3Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7QUFLQSxJQUFJLE1BQU0sR0FBRzs7Ozs7O0lBTVQsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2hCLE9BQU8sQ0FBQyxDQUFDO0tBQ1o7Ozs7OztJQU1ELFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDaEI7Ozs7OztJQU1ELFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDdEI7Ozs7OztJQU1ELGNBQWMsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN4QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZCxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3RCO1FBQ0QsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDdEM7Ozs7OztJQU1ELE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3BCOzs7Ozs7SUFNRCxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDbEIsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUMxQjs7Ozs7O0lBTUQsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3BCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNkLE9BQU8sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzFCO1FBQ0QsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDdkM7Ozs7OztJQU1ELFNBQVMsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN4Qjs7Ozs7O0lBTUQsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3BCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDaEM7Ozs7OztJQU1ELFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN0QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZCxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDOUI7UUFDRCxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUM3Qzs7Ozs7O0lBTUQsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUM1Qjs7Ozs7O0lBTUQsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3BCLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNsQzs7Ozs7O0lBTUQsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3RCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNkLE9BQU8sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbEM7UUFDRCxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQy9DOzs7Ozs7SUFNRCxZQUFZLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUN4Qzs7Ozs7O0lBTUQsYUFBYSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUNwQzs7Ozs7O0lBTUQsZUFBZSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3pCLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1Qzs7Ozs7O0lBTUQsYUFBYSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3ZCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQzlDOzs7Ozs7SUFNRCxjQUFjLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDeEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDbEQ7Ozs7OztJQU1ELGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNULE9BQU8sQ0FBQyxDQUFDO1NBQ1o7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDVCxPQUFPLENBQUMsQ0FBQztTQUNaO1FBQ0QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2QsT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3RDO1FBQ0QsT0FBTyxHQUFHLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUNwRDs7Ozs7O0lBTUQsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3BCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUNuQzs7Ozs7O0lBTUQsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNuQzs7Ozs7O0lBTUQsYUFBYSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3ZCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNkLE9BQU8sRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ2xEOzs7Ozs7SUFNRCxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDbkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNULE9BQU8sQ0FBQyxDQUFDO1NBQ1o7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDVCxPQUFPLENBQUMsQ0FBQztTQUNaO1FBQ0QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3BCLElBQUk7WUFDRCxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN0RDs7Ozs7O0lBTUQsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3BCLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDVCxPQUFPLENBQUMsQ0FBQztTQUNaO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1QsT0FBTyxDQUFDLENBQUM7U0FDWjtRQUNELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNiLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNwQjtZQUNHO1lBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtLQUN0RDs7Ozs7O0lBTUQsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3RCLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDVCxPQUFPLENBQUMsQ0FBQztTQUNaO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1QsT0FBTyxDQUFDLENBQUM7U0FDWjtRQUNELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNiLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNwQjtZQUNHO1lBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2QsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztrQkFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2tCQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7O0tBRTdEOzs7Ozs7SUFNRCxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDaEIsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3BDOzs7Ozs7SUFNRCxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDakIsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzFDOzs7Ozs7SUFNRCxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDbkIsSUFBSSxDQUFDLEdBQUcsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZCxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM1QztRQUNELE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUN2RDs7Ozs7O0lBTUQsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3RDOzs7Ozs7SUFNRCxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFO1lBQ2hCLE9BQU8sTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekI7YUFDSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUU7WUFDckIsT0FBTyxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDbEQsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUU7WUFDekIsT0FBTyxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7U0FDckQsTUFBTTtZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDO1NBQ3hEO0tBQ0o7Ozs7OztJQU1ELFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNyQixJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUU7WUFDVCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUN2QztRQUNELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7S0FDbEQ7Q0FDSjs7QUNwVkQsU0FBUyxJQUFJLElBQUksRUFBRTs7Ozs7Ozs7Ozs7Ozs7OztBQWdCbkIsSUFBSSxJQUFJLEdBQUcsVUFBVSxJQUFJLEVBQUU7O0lBRXZCLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDOzs7OztJQUtsQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDOzs7OztJQUs1QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7O0lBSzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7Ozs7O0lBSzlCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7Ozs7O0lBSzdCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7Ozs7O0lBS3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUM7OztJQUczQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQzs7SUFFMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7O0lBRXRCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7O0lBRXpCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUU7UUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDL0I7Ozs7O0lBS0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQzs7Ozs7SUFLcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQzs7Ozs7SUFLdEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQzs7SUFFeEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Q0FDeEIsQ0FBQzs7QUFFRixJQUFJLENBQUMsU0FBUyxHQUFHOztJQUViLEdBQUcsRUFBRSxDQUFDOztJQUVOLElBQUksRUFBRSxDQUFDOztJQUVQLEtBQUssRUFBRSxDQUFDOzs7OztJQUtSLE9BQU8sRUFBRSxVQUFVLElBQUksRUFBRTtRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLElBQUksRUFBRTtZQUNOLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzthQUM3QjtpQkFDSTtnQkFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQzthQUNqQztTQUNKO0tBQ0o7Ozs7O0lBS0QsU0FBUyxFQUFFLFVBQVVBLFNBQU0sRUFBRTtRQUN6QixJQUFJLE9BQU9BLFNBQU0sQ0FBQyxLQUFLLFFBQVEsRUFBRTtZQUM3QkEsU0FBTSxHQUFHQyxNQUFNLENBQUNELFNBQU0sQ0FBQyxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBR0EsU0FBTSxDQUFDO0tBQ3hCOzs7Ozs7SUFNRCxJQUFJLEVBQUUsVUFBVSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRTtRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksRUFBRTtZQUMzQixTQUFTLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDeEM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQzs7UUFFekIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsT0FBTyxRQUFRLENBQUM7U0FDbkI7O1FBRUQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN4QixPQUFPO1NBQ1Y7OztRQUdELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDOztRQUU5QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzs7UUFFekQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFO1lBQ2IsT0FBTztTQUNWOztRQUVELElBQUksUUFBUSxDQUFDO1FBQ2IsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2IsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkM7YUFDSTtZQUNELFFBQVEsR0FBRyxPQUFPLENBQUM7U0FDdEI7O1FBRUQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ2hDOztRQUVELElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtZQUNmLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQixPQUFPLFNBQVMsQ0FBQzthQUNwQjtpQkFDSTs7O2dCQUdELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDOztnQkFFekIsT0FBTyxRQUFRLENBQUM7YUFDbkI7U0FDSjthQUNJO1lBQ0QsT0FBTyxJQUFJLENBQUM7U0FDZjtLQUNKOzs7Ozs7SUFNRCxPQUFPLEVBQUUsVUFBVSxJQUFJLEVBQUU7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDNUM7O0lBRUQsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFOzs7OztRQUtyQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7O1FBRWxCLElBQUksSUFBSSxFQUFFO1lBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQixTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7O1FBRTFCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDOztRQUV0QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztLQUN4Qjs7SUFFRCxjQUFjLEVBQUUsWUFBWTtRQUN4QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7S0FDNUI7O0lBRUQsY0FBYyxFQUFFLFVBQVUsSUFBSSxFQUFFO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7S0FDekI7O0lBRUQsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLFNBQVMsRUFBRTtRQUNoQyxJQUFJLENBQUMsWUFBWSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0tBQ3REOztJQUVELElBQUksRUFBRSxVQUFVLFNBQVMsRUFBRSxHQUFHLEVBQUU7UUFDNUIsSUFBSSxTQUFTLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNyQztLQUNKOztJQUVELEtBQUssRUFBRSxZQUFZO1FBQ2YsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7O1FBRXhDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDOztRQUV4QixPQUFPLElBQUksQ0FBQztLQUNmOzs7O0lBSUQsS0FBSyxFQUFFLFlBQVk7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztLQUN2Qjs7Ozs7SUFLRCxNQUFNLEVBQUUsWUFBWTtRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztLQUN4QjtDQUNKLENBQUM7QUFDRixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7O0FDeFBsQyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQzs7QUFFdkMsU0FBUyxhQUFhLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtJQUNoQyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QjtBQUNELFNBQVMsYUFBYSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO0lBQ3ZDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7Q0FDdkI7O0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRTtJQUN4QyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0NBQ25DOztBQUVELFNBQVMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtJQUNwRCxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ3BCLElBQUksTUFBTSxJQUFJLENBQUMsRUFBRTtRQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDckQ7S0FDSjtTQUNJO1FBQ0QsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUI7b0JBQ3pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTztpQkFDOUIsQ0FBQzthQUNMO1NBQ0o7S0FDSjtDQUNKOztBQUVELFNBQVMsV0FBVyxDQUFDLElBQUksRUFBRTtJQUN2QixJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksV0FBVyxFQUFFO1FBQzdCLE9BQU8sS0FBSyxDQUFDO0tBQ2hCLE1BQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLFFBQVEsRUFBRTtRQUNqQyxPQUFPLEtBQUssQ0FBQztLQUNoQixNQUFNO1FBQ0gsT0FBTyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUM7S0FDMUM7Q0FDSjs7QUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUFLLEVBQUU7SUFDdkIsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDcEIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUN2QixJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN2QixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDYixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMxQixHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2QztZQUNELE9BQU8sR0FBRyxDQUFDO1NBQ2QsTUFBTTtZQUNILE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNqQztLQUNKLE1BQU07UUFDSCxPQUFPLEtBQUssQ0FBQztLQUNoQjtDQUNKOztBQUVELFNBQVMsMEJBQTBCO0lBQy9CLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTTtFQUN4QztJQUNFLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDcEIsSUFBSSxNQUFNLElBQUksQ0FBQyxFQUFFO1FBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQXFCO2dCQUMxQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO2FBQ3hDLENBQUM7U0FDTDtLQUNKLE1BQU07UUFDSCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHFCQUFxQjtvQkFDN0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO2lCQUNaLENBQUM7YUFDTDtTQUNKO0tBQ0o7Q0FDSjs7QUFFRCxTQUFTLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUN0RCxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO0lBQ3pCLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDekIsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO2NBQzNCLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7Y0FDcEMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDekI7Ozs7QUFJRCxTQUFTLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtJQUNqQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQzFCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDMUIsSUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFOztRQUVyQixJQUFJLGdCQUFnQixHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDekMsSUFBSSxnQkFBZ0IsRUFBRTs7WUFFbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7U0FDekI7YUFDSTs7WUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNwQyxJQUFJLENBQUMsSUFBSTtvQkFDTCxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDcEQsQ0FBQzthQUNMO1NBQ0o7S0FDSjs7SUFFRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNsQyxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDZCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyQjtTQUNKO2FBQ0k7WUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMzQixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDM0I7YUFDSjtTQUNKO0tBQ0o7Q0FDSjs7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtJQUNyQyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7UUFDZixPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN0QixJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ3JCLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBQ0QsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JCLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1NBQ0o7S0FDSjtTQUNJO1FBQ0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDM0IsT0FBTyxLQUFLLENBQUM7aUJBQ2hCO2FBQ0o7U0FDSjtLQUNKO0lBQ0QsT0FBTyxJQUFJLENBQUM7Q0FDZjs7QUFFRCxTQUFTLGVBQWUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUU7SUFDdkcsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUM5QixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBQzlCLElBQUksU0FBUyxHQUFHLFlBQVksS0FBSyxRQUFRLENBQUM7O0lBRTFDLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDaEMsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNYLE9BQU87S0FDVjs7SUFFRCxJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ2xDLElBQUksWUFBWSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7O0lBR3pDLElBQUksTUFBTSxHQUFHO1lBQ0wsWUFBWTtlQUNULFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7O1VBRTdCLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRVosU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDMUIsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7S0FDMUIsQ0FBQyxDQUFDOzs7SUFHSCxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7O0lBRXBCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQzs7SUFFbEIsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDOztJQUVuQixJQUFJLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ25DLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQztJQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQy9CLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQzs7O1FBRzdDLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7OztRQUcvQixJQUFJLEVBQUUsQ0FBQyxZQUFZLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDO2dCQUNwRCxDQUFDLFlBQVksSUFBSSxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsRUFBRTtZQUM1QyxlQUFlLEdBQUcsS0FBSyxDQUFDO1NBQzNCO1FBQ0QsU0FBUyxHQUFHLEtBQUssQ0FBQzs7UUFFbEIsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN2QztJQUNELElBQUksZUFBZSxFQUFFO1FBQ2pCLE9BQU87S0FDVjs7SUFFRCxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDOztJQUV2QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNuQyxJQUFJLFlBQVksRUFBRTtZQUNkLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzNDO2FBQ0k7WUFDRCxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDekMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQzthQUMzQjtTQUNKO0tBQ0o7SUFDRCxZQUFZLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQzs7OztJQUkvRSxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDakIsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLElBQUksS0FBSyxDQUFDO0lBQ1YsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7O0lBRW5CLElBQUksT0FBTyxHQUFHLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRTs7OztRQUlwQyxJQUFJLE9BQU8sR0FBRyxZQUFZLEVBQUU7O1lBRXhCLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzdDLEtBQUssQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN6QixJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUU7b0JBQzFCLE1BQU07aUJBQ1Q7YUFDSjtZQUNELENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDakM7YUFDSTtZQUNELEtBQUssQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNsQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUU7b0JBQ3pCLE1BQU07aUJBQ1Q7YUFDSjtZQUNELENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNiLFlBQVksR0FBRyxPQUFPLENBQUM7O1FBRXZCLElBQUksS0FBSyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO1lBQ2IsT0FBTztTQUNWO2FBQ0k7WUFDRCxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQzs7WUFFdEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbkM7UUFDRCxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFeEIsSUFBSSxTQUFTLEVBQUU7WUFDWCxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ25DLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkQsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN2RCxJQUFJLFlBQVksRUFBRTtnQkFDZCxNQUFNO29CQUNGLE1BQU07b0JBQ04sUUFBUTtvQkFDUixZQUFZO3dCQUNSLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDO3dCQUN4QixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztxQkFDcEI7aUJBQ0osQ0FBQzthQUNMO2lCQUNJLElBQUksWUFBWSxFQUFFO2dCQUNuQiwwQkFBMEI7b0JBQ3RCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzdCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDO29CQUN4QixNQUFNO2lCQUNULENBQUM7YUFDTDtpQkFDSTtnQkFDRCxNQUFNO29CQUNGLE1BQU07b0JBQ04sUUFBUTtvQkFDUixxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZELENBQUM7YUFDTDtTQUNKO2FBQ0k7WUFDRCxJQUFJLFlBQVksRUFBRTtnQkFDZCxNQUFNO29CQUNGLE1BQU07b0JBQ04sUUFBUTtvQkFDUixZQUFZO3dCQUNSLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDO3dCQUN4QixRQUFRLENBQUMsQ0FBQyxDQUFDO3dCQUNYLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNmLENBQUM7cUJBQ0o7aUJBQ0osQ0FBQzthQUNMOztpQkFFSSxJQUFJLFlBQVksRUFBRTtnQkFDbkIsZ0JBQWdCO29CQUNaLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzdCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDO29CQUN4QixNQUFNO2lCQUNULENBQUM7YUFDTDtpQkFDSTtnQkFDRCxNQUFNO29CQUNGLE1BQU07b0JBQ04sUUFBUTtvQkFDUixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ25ELENBQUM7YUFDTDtTQUNKO0tBQ0osQ0FBQzs7SUFFRixJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQztRQUNoQixNQUFNLEVBQUUsUUFBUSxDQUFDLE9BQU87UUFDeEIsSUFBSSxFQUFFLE9BQU87UUFDYixJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUs7UUFDcEIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxNQUFNO1FBQ3RCLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLFFBQVEsRUFBRSxZQUFZO0tBQ3pCLENBQUMsQ0FBQzs7SUFFSCxJQUFJLFlBQVksSUFBSSxZQUFZLEtBQUssUUFBUSxFQUFFO1FBQzNDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDaEM7O0lBRUQsT0FBTyxJQUFJLENBQUM7Q0FDZjs7Ozs7Ozs7Ozs7Ozs7O0FBZUQsU0FBUyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRTtJQUMxRCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQzs7SUFFdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxDQUFDOztJQUUzQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sSUFBSSxhQUFhLENBQUM7SUFDdkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUksYUFBYSxDQUFDOztJQUV2QyxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksSUFBSSxJQUFJLENBQUM7O0lBRTFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOztJQUVoQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQzs7SUFFcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7O0lBRXZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDOztJQUVwQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQzs7SUFFbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7Q0FDeEI7O0FBRUQsU0FBUyxVQUFVLENBQUMsQ0FBQyxFQUFFO0lBQ25CLE9BQU8sQ0FBQyxDQUFDO0NBQ1o7O0FBRUQsUUFBUSxDQUFDLFNBQVMsR0FBRzs7SUFFakIsV0FBVyxFQUFFLFFBQVE7Ozs7Ozs7OztJQVNyQixJQUFJLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxFQUFFQSxTQUFNLEVBQUU7O1FBRWpDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztRQUU5Q0EsU0FBTSxHQUFHLENBQUMsT0FBT0EsU0FBTSxLQUFLLFVBQVUsR0FBR0EsU0FBTSxHQUFHRSxNQUFXLENBQUNGLFNBQU0sQ0FBQyxLQUFLLFVBQVUsQ0FBQztRQUNyRixLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssRUFBRTtZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7Ozs7O2dCQUs1QixJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7b0JBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUM7d0JBQ3hCLElBQUksRUFBRSxDQUFDO3dCQUNQLEtBQUssRUFBRSxVQUFVOzRCQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7eUJBQ3ZDO3dCQUNELE1BQU0sRUFBRUEsU0FBTTtxQkFDakIsQ0FBQyxDQUFDO2lCQUNOO2FBQ0o7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDeEIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BCLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDO2dCQUN0QixNQUFNLEVBQUVBLFNBQU07YUFDakIsQ0FBQyxDQUFDO1NBQ047UUFDRCxPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELElBQUksRUFBRSxVQUFVLFVBQVUsRUFBRSxLQUFLLEVBQUVBLFNBQU0sRUFBRTtRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRUEsU0FBTSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFdBQVcsSUFBSSxVQUFVLENBQUM7UUFDL0IsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELE1BQU0sRUFBRSxVQUFVLFFBQVEsRUFBRTtRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELGFBQWEsRUFBRSxZQUFZOztRQUV2QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzs7UUFFbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOztRQUUxQixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzlCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzFCO0tBQ0o7Ozs7Ozs7SUFPRCxLQUFLLEVBQUUsVUFBVSxZQUFZLEVBQUU7O1FBRTNCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7O1FBRWxCLElBQUksWUFBWSxHQUFHLFdBQVc7WUFDMUIsU0FBUyxFQUFFLENBQUM7WUFDWixJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUN4QjtTQUNKLENBQUM7O1FBRUYsSUFBSSxRQUFRLENBQUM7UUFDYixBQUNBLEtBQUssSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUMvQixJQUFJLElBQUksR0FBRyxlQUFlO2dCQUN0QixJQUFJLEVBQUUsWUFBWSxFQUFFLFlBQVk7Z0JBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDdEUsQ0FBQztZQUNGLElBQUksSUFBSSxFQUFFO2dCQUNOLEFBQ0EsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFCLFNBQVMsRUFBRSxDQUFDOzs7Z0JBR1osSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDaEM7O2dCQUVELFFBQVEsR0FBRyxJQUFJLENBQUM7YUFDbkI7U0FDSjs7O1FBR0QsSUFBSSxRQUFRLEVBQUU7WUFDVixJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ2xDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsVUFBVSxNQUFNLEVBQUUsT0FBTyxFQUFFO2dCQUMxQyxVQUFVLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDOztnQkFFNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztpQkFDekM7YUFDSixDQUFDO1NBQ0w7O1FBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNaLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN4QjtRQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7OztJQU1ELElBQUksRUFBRSxZQUFZO1FBQ2QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztLQUN2Qjs7Ozs7OztJQU9ELEtBQUssRUFBRSxVQUFVLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsSUFBSSxFQUFFLFVBQVUsSUFBSSxFQUFFO1FBQ2xCLElBQUksSUFBSSxFQUFFO1lBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDN0I7UUFDRCxPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7SUFNRCxRQUFRLEVBQUUsWUFBWTtRQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7S0FDekI7Q0FDSixDQUFDOztBQ25qQkY7OztBQUdBLEFBRUEsSUFBSSxZQUFZLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQy9CLE9BQU8sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0NBQ2xDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0NGLElBQUksV0FBVyxHQUFHLFVBQVUsSUFBSSxFQUFFOztJQUU5QixJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQzs7SUFFbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7Ozs7O0lBS3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7Ozs7SUFJbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQzs7OztJQUloQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQzs7SUFFbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDbkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLFFBQVEsQ0FBQzs7SUFFaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Q0FDbEMsQ0FBQzs7QUFFRixXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFDbkMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDOzs7Ozs7OztBQVFoRCxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxVQUFVLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFO0lBQ3BFLElBQUksR0FBRyxHQUFHO1FBQ04sUUFBUSxFQUFFLFFBQVE7UUFDbEIsSUFBSSxFQUFFLFNBQVM7UUFDZixNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7S0FDdEIsQ0FBQztJQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7SUFFaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1FBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLE9BQU8sR0FBRyxDQUFDO0tBQ2Q7SUFDRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM3QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLFFBQVEsRUFBRTtRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUM1QixNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsRUFBRTtRQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN6QixNQUFNO1FBQ0gsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDaEM7O0lBRUQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOztBQUVGLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLFVBQVUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7O0lBRXhELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O0lBRS9DLElBQUksR0FBRyxLQUFLLFFBQVEsRUFBRTtRQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZDOzs7SUFHRCxJQUFJLENBQUMsTUFBTSxJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUU7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUN0QjtJQUNELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7QUFFRixXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxVQUFVLElBQUksRUFBRTtJQUM1QyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzdCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDekIsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN4QixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQzdCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDOztJQUVqQyxJQUFJLFFBQVEsSUFBSSxHQUFHLElBQUksUUFBUSxJQUFJLEdBQUcsRUFBRTtRQUNwQyxJQUFJLEdBQUcsR0FBRyxRQUFRLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDcEIsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7OztRQUcxQyxJQUFJLElBQUksQ0FBQyxNQUFNLFlBQVksSUFBSSxFQUFFO1lBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNqQyxNQUFNO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDMUI7S0FDSixNQUFNO1FBQ0gsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQyxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxQixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ3JCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7O1FBRXJCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzs7UUFFaEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEtBQUssR0FBRyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7O1FBRXZFLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLFlBQVksSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQzdELElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLFlBQVksSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQzdELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDbEM7Q0FDSixDQUFDOzs7Ozs7O0FBT0YsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsVUFBVSxXQUFXLEVBQUU7SUFDakQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNsQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDekMsSUFBSSxTQUFTLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNwRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzVFO0lBQ0QsT0FBTyxJQUFJLENBQUM7Q0FDZixDQUFDOzs7QUFHRixXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxVQUFVLFFBQVEsRUFBRTtJQUNqRCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNiLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDekIsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN4QixJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxFQUFFO1FBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQkFDbkUsR0FBRyxHQUFHLENBQUMsQ0FBQzthQUNYO1NBQ0o7S0FDSixNQUFNO1FBQ0gsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pCLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO2dCQUNuRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO2FBQ1g7U0FDSjtLQUNKO0lBQ0QsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFO1FBQ1YsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFDckIsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7S0FDbEM7O0lBRUQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOztBQzlMRjs7QUFFQSxJQUFJLE9BQU8sR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDOztBQUU5QixTQUFTLGFBQWEsQ0FBQyxRQUFRLEVBQUU7SUFDN0IsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDO0lBQ3BDLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztJQUNwQyxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7SUFDcEMsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDO0lBQ3BDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7O0lBRWhDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUk7UUFDN0IsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3JELElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNyRCxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDckQsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0tBQ3hEOztJQUVELEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4QixJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDdkIsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDOztJQUV2QixPQUFPO1FBQ0gsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLFFBQVEsSUFBSSxDQUFDO1FBQ3BDLENBQUMsSUFBSSxjQUFjLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxRQUFRLElBQUksQ0FBQztLQUN2QyxDQUFDO0NBQ0w7O0FBRUQsU0FBUyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JDLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDZixFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQzVCLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDNUIsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDOzs7SUFHbkQsSUFBSSxRQUFRLEdBQUcsT0FBTyxJQUFJLFFBQVEsR0FBRyxPQUFPLEVBQUU7UUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0tBQzlDOztJQUVELElBQUksUUFBUSxHQUFHLE9BQU8sRUFBRTtRQUNwQixFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQy9COztTQUVJLElBQUksUUFBUSxHQUFHLE9BQU8sRUFBRTtRQUN6QixFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQy9COztTQUVJO1FBQ0QsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvQixHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDcEQsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVE7WUFDdEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FB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LENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFVdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0lBQzFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQy9CLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7QUFTMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQixDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7Ozs7Ozs7O0FBUXBDLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7OztBQVF2QixJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDcEIsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDOzs7Ozs7Ozs7QUFTakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsT0FBTyxHQUFH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QUcsS0FBSyxDQUFDO0lBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUM3QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7OztBQVdGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7Ozs7OztBQWNGLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxXQUFXO0lBQ3ZCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzs7SUFFeEIsT0FBTyxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO1FBQy9DLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNULEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDUixNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQ2Q7O1FBRUQsR0FBRyxDQUFDLE1BQU0sRUFBRTtZQUNSLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDZDs7UUFFRCxHQUFHLEtBQUssRUFBRTtZQUNOLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JELE1BQU07WUFDSCxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUNoQjs7UUFFRCxJQUFJLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksTUFBTSxFQUFFO1lBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNsQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEM7O1FBRUQsT0FBTyxDQUFDLENBQUM7S0FDWixDQUFDO0NBQ0wsR0FBRyxDQUFDOztBQ2hnQkw7Ozs7OztBQU1BLElBQUksT0FBTyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTs7SUFFekIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7Ozs7Ozs7O0lBU1gsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7Ozs7Ozs7O0lBU25DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQ3RCLENBQUM7O0FBRUYsT0FBTyxDQUFDLFNBQVMsR0FBRzs7SUFFaEIsV0FBVyxFQUFFLE9BQU87Ozs7Ozs7SUFPcEIsR0FBRyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7O0lBUUQsR0FBRyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsUUFBUSxFQUFFLFNBQVMsR0FBRyxFQUFFO1FBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUV2QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7SUFNRCxLQUFLLEVBQUUsV0FBVztRQUNkLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdEM7Ozs7Ozs7SUFPRCxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7O0lBUUQsS0FBSyxFQUFFLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtRQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELElBQUksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN6Qzs7Ozs7OztJQU9ELFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNsQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDN0M7Ozs7Ozs7SUFPRCxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNiLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN4Qzs7Ozs7O0lBTUQsR0FBRyxFQUFFLFdBQVc7UUFDWixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQy9COzs7Ozs7SUFNRCxNQUFNLEVBQUUsV0FBVztRQUNmLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDbEM7Ozs7Ozs7OztJQVNELElBQUksRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsR0FBRyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7O0lBTUQsTUFBTSxFQUFFLFdBQVc7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7OztJQU1ELFNBQVMsRUFBRSxXQUFXO1FBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELE1BQU0sRUFBRSxTQUFTLEtBQUssRUFBRTtRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7O0lBUUQsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzVDOzs7Ozs7O0lBT0QsZUFBZSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNwRDs7Ozs7O0lBTUQsTUFBTSxFQUFFLFdBQVc7UUFDZixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ2xDOzs7Ozs7SUFNRCxhQUFhLEVBQUUsV0FBVztRQUN0QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3pDOzs7Ozs7O0lBT0QsR0FBRyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxhQUFhLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxjQUFjLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxhQUFhLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxhQUFhLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7O0lBRUQsUUFBUSxFQUFFLFdBQVc7UUFDakIsT0FBTyxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2pFOztJQUVELE9BQU8sRUFBRSxZQUFZO1FBQ2pCLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNqRDtDQUNKLENBQUM7OztBQUdGLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTs7SUFFdkIsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQzs7Ozs7OztJQU85QixNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7UUFDOUIsR0FBRyxFQUFFLFlBQVk7WUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEI7UUFDRCxHQUFHLEVBQUUsVUFBVSxLQUFLLEVBQUU7WUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDdEI7S0FDSixDQUFDLENBQUM7Ozs7Ozs7O0lBUUgsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO1FBQzlCLEdBQUcsRUFBRSxZQUFZO1lBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsR0FBRyxFQUFFLFVBQVUsS0FBSyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ3RCO0tBQ0osQ0FBQyxDQUFDO0NBQ047Ozs7Ozs7Ozs7QUFVRCxPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7QUFPRixPQUFPLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDMUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzFDLENBQUM7Ozs7Ozs7QUFPRixPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7Ozs7Ozs7QUFPaEMsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDOzs7Ozs7QUFNN0IsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDekIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ3JDLENBQUM7Ozs7OztBQU1GLE9BQU8sQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDdEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMvQixDQUFDOzs7Ozs7Ozs7OztBQVdGLE9BQU8sQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7QUFPRixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7OztBQU9GLE9BQU8sQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQzs7Ozs7O0FBTS9CLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixPQUFPLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxLQUFLLEVBQUU7SUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7OztBQU9GLE9BQU8sQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLFdBQVcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUM3QyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JELEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsT0FBTyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ3pDLENBQUM7Ozs7Ozs7QUFPRixPQUFPLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7Ozs7OztBQU0xQyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDL0IsQ0FBQzs7Ozs7O0FBTUYsT0FBTyxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDOzs7Ozs7OztBQVF2QyxPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7Ozs7Ozs7QUFPL0IsT0FBTyxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7QUFPRixPQUFPLENBQUMsY0FBYyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pELEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7OztBQU9GLE9BQU8sQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7O0FBT0YsT0FBTyxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3hDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7O0FDdHRCRjs7QUFFQSxBQUlBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4QkEsSUFBSSxXQUFXLEdBQUcsVUFBVSxJQUFJLEVBQUU7O0lBRTlCLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDOztJQUVsQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs7Ozs7SUFLdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQzs7OztJQUlsQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDOzs7O0lBSWhDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQzs7SUFFOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7O0lBRTNCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDOztJQUVyQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztDQUMzQixDQUFDOztBQUVGLFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuQyxXQUFXLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7Ozs7Ozs7QUFPaEQsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRTtJQUNwRSxJQUFJLEdBQUcsR0FBRztRQUNOLFFBQVEsR0FBRyxRQUFRO1FBQ25CLElBQUksR0FBRyxTQUFTO1FBQ2hCLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQztLQUN2QixDQUFDO0lBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOztJQUVoRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzs7SUFFeEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7QUFHRixXQUFXLENBQUMsU0FBUyxDQUFDLGdCQUFnQixHQUFHLFlBQVk7SUFDakQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDdEMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDO0tBQ3JCLENBQUMsQ0FBQztJQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7Q0FDM0QsQ0FBQzs7QUFFRixXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxVQUFVLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFOztJQUV4RCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDOztJQUUvQyxJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUU7UUFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztLQUN2Qzs7O0lBR0QsSUFBSSxDQUFDLE1BQU0sSUFBSSxHQUFHLEtBQUssUUFBUSxFQUFFO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDdEI7SUFDRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7O0FBRUYsV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBVSxJQUFJLEVBQUU7SUFDNUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNOLE9BQU87S0FDVjs7SUFFRCxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRWYsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVqQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ3JCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDckIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQzs7SUFFckIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7O0lBRWhELElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLFlBQVksSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQzdELElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLFlBQVksSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQzdELElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLFlBQVksSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDOztJQUU3RCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FB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QUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUMxQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckMsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7QUFTMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFCLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFRcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRTtJQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckMsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7OztBQVF2QixJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFCLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7Ozs7Ozs7O0FBU2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsT0FBTyxHQUFHLENBQUM7Q0FDWixDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFOztRQUVULEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUN2QixJQUFJO1FBQ0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3ZCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbEQsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFcEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7OztBQVdGLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUU7SUFDaEMsS0FBSyxHQUFHLEtBQUssSUFBSSxHQUFHLENBQUM7O0lBRXJCLElBQUksQ0FBQyxHQUFHQSxjQUFZLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDQSxjQUFZLEVBQUUsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3JDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0lBRXhDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDbkIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7OztBQVdGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFOzs7SUFHckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7OztRQUcxQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDN0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUM3QixFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzs7O0lBR25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2xELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7R0FDbEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7O01BRWQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7OztNQUdqQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1osQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzNDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O01BRzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDOztJQUVqQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0lBR25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDLENBQUMsQ0FB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LEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7O0FBVXZCLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7OztBQVdGLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7SUFDMUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0MsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7QUFTMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFT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QyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O1FBRzFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDN0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUM3QixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFF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QUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2YsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDckIsSUFBSSxHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7O0lBRTlCLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtRQUNYLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2hCLE1BQU07UUFDSCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakI7O0lBRUQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVsQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzVCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHOzs7UUFHM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUU1QyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ04sT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3ZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN2QyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzVCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDNUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QyxPQUFPLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDekcsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRTNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7O0FBVXpCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDOztJQUViLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7SUFFYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDakMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFbEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUV0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7SUFFM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7O0lBRTNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRWxCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRVgsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDVixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDVixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7O1FBRVYsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7SUFFakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUVqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7O0lBRXJCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3BDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEQsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7O1FBRWxELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHOzs7UUFHM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoRixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ04sT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQzs7SUFFbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7O0lBRW5ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDOztJQUVuRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsRUFBRTtJQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcs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QUFDLENBQUM7SUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTs7SUFFNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7RUFFaEM7Ozs7Ozs7Ozs7O0FBV0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDOzs7Ozs7Ozs7O0FBVXBCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRS9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7OztBQVd6QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Ozs7Ozs7Ozs7QUFVeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUU7O0lBRTlCLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVuQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVwQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBRTs7SUFFOUIsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRW5CLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRXBDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxHQUFHLENBQUMsR0FBRyxFQUFFO0lBQzlCLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVuQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVwQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWXBCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQzs7Ozs7Ozs7Ozs7QUFXdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTs7OztJQUlqQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRS9DLFdBQVcsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQzs7O0lBRy9DLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUU5QyxLQUFLLEtBQUssR0FBRyxHQUFHLEdBQUc7UUFDZixLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDZixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7S0FDYjs7SUFFRCxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssSUFBSSxRQUFRLEdBQUc7O1FBRTVCLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDN0MsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztLQUN4QyxNQUFNOzs7UUFHSCxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNqQixNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQ2Q7O0lBRUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDbkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQzs7SUFFbkMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtRQUNuQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDOzs7O0lBSS9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ25CLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7O0FBTTFCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7Ozs7O0FBU3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7Ozs7O0FBTXhDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7Ozs7Ozs7OztBQVVqQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFhaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7OztJQUc3QixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxJQUFJLEtBQUssQ0FBQzs7SUFFVixLQUFLLE1BQU0sR0FBRyxHQUFHLEdBQUc7O1FBRWhCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUNyQixLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztLQUM5QixNQUFNOztRQUVILElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDZCxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ2xCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDUixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1FBRWhCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0tBQzFDOztJQUVELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7QUNoaEJGOzs7QUFHQSxBQUdBO0FBQ0EsU0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDcEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7O0lBRW5DLE9BQU8sR0FBRyxDQUFDO0NBQ2Q7O0FBRUQsU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7Ozs7SUFJckMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDOUQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7O0lBRW5FLElBQUksS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQzs7O0lBR3hDLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUU5QyxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUU7UUFDYixLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDZixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7S0FDYjs7SUFFRCxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssSUFBSSxRQUFRLEVBQUU7O1FBRTFCLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDN0MsTUFBTSxHQUFHLElBQUksQ0FB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QyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxRSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO1FBQ0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQzlELE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUM3RTs7SUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFD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LEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O1FBRWxCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztRQUVoRixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7OztRQUlwRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN6QzthQUNJO1lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDNUM7S0FDSixDQUFDO0NBQ0wsR0FBRyxDQUFDOzs7Ozs7O0FBT0wsWUFBWSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ3JELElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7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QUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BELGdCQUFnQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVELFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RCxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0QsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdELFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RCxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRCxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xELFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLHNCQUFzQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9ELGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLGdCQUFnQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0Msa0JBQWtCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9ELGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRSxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9ELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRCxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEQsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRCxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekQsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFB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QyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQyxJQUFJLEVBQUUsR0FBRyxLQUFLLEdBQUcsU0FBUyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25FLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs7SUFFcEUsT0FBTyxHQUFHLENBQUM7RUFDZDs7QUFFRCxTQUFTLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7OztBQVM5QyxTQUFTLENBQUMsSUFBSSxHQUFHLFVBQVUsZUFBZSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUU7SUFDNUQsSUFBSSxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDO1dBQ3ZCLEVBQUUsZUFBZSxJQUFJLENBQUMsSUFBSSxlQUFlLElBQUksQ0FBQyxDQUFDO01BQ3BEO1FBQ0UsT0FBTztL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LElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEQsTUFBTTtZQUNWLEtBQUssSUFBSTtnQkFDTCxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixNQUFNO1lBQ1YsS0FBSyxLQUFLO2dCQUNOLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNoQyxNQUFNO1lBQ1YsS0FBSyxLQUFLO2dCQUNOLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEtB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Z0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUU7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7O0lBRTlCLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtRQUNYLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7UUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNqQixNQUFNO1FBQ0gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNuQjs7SUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEQsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7O1FBRWxELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHOzs7UUFHM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoRixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ04sT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7O0lBRXBELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDNUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztJQUV2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDNUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7UUFFbEQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7O0lBR2hDLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDaEYsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hELEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7OztJQUd2RCxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7O0lBRTNDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7O0lBRTNDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7O0lBRTVDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3ZDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7OztJQUcxQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDOzs7SUFHbEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDOzs7SUFHbEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDbEMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDOzs7SUFHbkMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDekMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUN6QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUV6QyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBTXpCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQzs7Ozs7Ozs7O0FBU3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDOztJQUV2QixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7UUFDWCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3JELE1BQU07UUFDSCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7UUFFakQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3ZELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7O1FBRXpELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDakQ7O0lBRUQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRWpDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7OztBQVdGLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7SUFDdkMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ1AsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2IsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2IsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7O0lBRWxCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFOztJQUVuRCxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNkLENBQUMsSUFBSSxHQUFHLENBQUM7SUFDVCxDQUFDLElBQUksR0FBRyxDQUFDO0lBQ1QsQ0FBQyxJQUFJLEdBQUcsQ0FBQzs7SUFFVCxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7O0lBR2pELEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzs7SUFHdEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUM1QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRTVDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtRQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbkI7SUFDRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7SUFFaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbkI7OztJQUdELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDNUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUM1QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7SUFFaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbkI7OztJQUdELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDNUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUM1QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFZixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7UUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ25COzs7SUFHRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixH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QUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ1YsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ1YsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDOztRQUVWLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDOztJQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDdEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVaLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFjRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQy9ELElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUN2QixFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUM3QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUM1QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7Ozs7QUFZRixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtJQUN2RCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQzVCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ2hDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBY0YsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtJQUM3RCxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQztRQUN2QixFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDdkIsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQzVCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtJQUMxQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUc7UUFDdkMs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Q0FBQztRQUNWLEVBQUUsSUFBSSxHQUFHLENBQUM7S0FDYjs7SUFFRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDL0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMvQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVaLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENB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QUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7OztJQVNELEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxRQUFRLEVBQUUsVUFBVSxHQUFHLEVBQUU7UUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRXZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7OztJQU1ELEtBQUssRUFBRSxZQUFZO1FBQ2YsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzlDOzs7Ozs7O0lBT0QsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FB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QzlCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7OztBQU9GLE9BQU8sQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzFCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMxQyxDQUFDOzs7Ozs7OztBQVFGLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQzs7Ozs7Ozs7QUFRaEMsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQzs7Ozs7OztBQU83QixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUN6QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FD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Q0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNO1FBQ1Y7WUFDSSxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDO0tBQzlDO0lBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixPQUFPLENBQUMsYUFBYSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7O0lBRTdDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDakIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQzs7SUFFdkIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDOztJQUUzQyxRQUFRLEtBQUs7UUFDVCxLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUU7Z0JBQ3BCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDaEM7aUJBQ0k7Z0JBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDakI7WUFDRCxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFH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QUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQzs7Ozs7Ozs7SUFRSEMsZ0JBQWMsQ0FBQ0QsT0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQzs7Ozs7Ozs7SUFRSEMsZ0JBQWMsQ0FBQ0QsT0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQztDQUNOOzs7Ozs7Ozs7O0FBVUQsVUFBVSxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMs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RyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs7SUFFNUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDOzs7Ozs7SUFNM0MsUUFBUSxLQUFLO1FBQ1QsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFH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Q0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2VBQ2pFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDMUU7Ozs7Ozs7SUFPRCxrQkFBa0IsRUFBRSxVQUFVLElBQUksRUFBRTs7UUFFaEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7O1FBRTFCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQzNCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOztRQUUzQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztlQUNqRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1RTs7Ozs7OztJQU9ELFlBQVksRUFBRSxVQUFVLENBQUMsRUFBRTtRQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7UUFFMUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQzs7UUFFakIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7ZUFDeEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkU7Ozs7O0lBS0QsUUFBUSxFQUFFLFlBQVk7UUFDbEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7ZUFDM0QsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdEU7Ozs7OztJQU1ELGNBQWMsRUFBRSxVQUFVLE1BQU0sRUFBRTtRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNwQzs7Ozs7OztJQU9ELGFBQWEsRUFBRSxDQUFDLFlBQVk7O1FBRXhCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOztRQUV2QixPQUFPLFVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRTtZQUM3QixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUMzQixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7WUFFM0IsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzs7WUFFckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFcEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFcEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFckUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3JCLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7WUFFMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENB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QyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUU3QyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7UUFHN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUU3QyxPQUFPLElBQUksQ0FBQztLQUNmOzs7OztJQUtELElB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QUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7OztRQUd2REMsU0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7O1FBRXRCQSxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7UUFFdEJBLFNBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOztRQUV0QkEsU0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7O1FBRXRCQSxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUM3RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7UUFFdEJBLFNBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOzs7UUFHdEIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNuQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRztZQUNaLElBQUksTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDOztZQUV4QixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakQsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Ozs7WUFJaERBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xEQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O1lBRWpEQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakRBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O1lBRWhEQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNyREEsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BEQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcERBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDdEQ7YUFDSTtZQUNELElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUMzQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDO1lBQzNCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDekIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDO1lBQzdCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztZQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDOzs7WUFHMUIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN2RixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDOztZQUV2RixJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNoQyxJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7O1lBR2hDQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0NBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFN0NBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUU3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FB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QUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHO2dCQUNoQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQixJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDckMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFOztnQkFFckMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMs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QUNsQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7O1lBRWxDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxHQUFHLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDdkIsSUFBSSxPQUFPLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM5QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENB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LElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ25DOzs7O0lBSUQsS0FBSyxFQUFFLFdBQVc7UUFDZCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMxQixNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDeEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FB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RSxTQUFTLEVBQUU7SUFDdEMsSUFBSSxLQUFLLEdBQUcsa0VBQWtFLENBQUM7SUFDL0UsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbkMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDbkM7O0lBRUQsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDbkMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzdDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTs7SUFFN0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOztJQUUzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHO1FBQy9DLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksRUFBRSxHQUFHLE1BQU0s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RUFBRSxFQUFFO1FBQ3RDLElBQUksU0FBUyxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUM7UUFDcEMsSUFBSSxDQUFDLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQzs7UUFFOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTs7Ozs7WUFLakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ25DLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxRCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFELENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUM7OztZQUd4RSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7U0FDckI7O1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxD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QyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRTdCLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUQ7OztRQUdELE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQzFCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDZixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckUsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM3QztTQUNKO1FBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixL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Q0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7O0lBRWIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDNUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDcEMsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0lBQ2pDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsRUFBRTtJQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNuRyxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNwQixDQUFDOztBQzVQRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQSxBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJBLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQzs7Ozs7OztBQU9mLEtBQUssQ0FBQyxNQUFNLEdBQUcsV0FBVztJQUN0QixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3RCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzVCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUUzQixJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDNUIsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNKLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNyQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQyxDQUFDOzs7Ozs7Ozs7O0FBVUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7O0FBVzNCLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxD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Q0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENB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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xheWdsLmVzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvYW5pbWF0aW9uL2Vhc2luZy5qcyIsIi4uL3NyYy9hbmltYXRpb24vQ2xpcC5qcyIsIi4uL3NyYy9hbmltYXRpb24vQW5pbWF0b3IuanMiLCIuLi9zcmMvYW5pbWF0aW9uL0JsZW5kMURDbGlwLmpzIiwiLi4vc3JjL3V0aWwvZGVsYXVuYXkuanMiLCIuLi9zcmMvZ2xtYXRyaXgvY29tbW9uLmpzIiwiLi4vc3JjL2dsbWF0cml4L3ZlYzIuanMiLCIuLi9zcmMvbWF0aC9WZWN0b3IyLmpzIiwiLi4vc3JjL2FuaW1hdGlvbi9CbGVuZDJEQ2xpcC5qcyIsIi4uL3NyYy9nbG1hdHJpeC92ZWMzLmpzIiwiLi4vc3JjL2dsbWF0cml4L3ZlYzQuanMiLCIuLi9zcmMvZ2xtYXRyaXgvbWF0My5qcyIsIi4uL3NyYy9nbG1hdHJpeC9xdWF0LmpzIiwiLi4vc3JjL2FuaW1hdGlvbi9TYW1wbGVyVHJhY2suanMiLCIuLi9zcmMvY29yZS9taXhpbi9leHRlbmQuanMiLCIuLi9zcmMvY29yZS9taXhpbi9ub3RpZmllci5qcyIsIi4uL3NyYy9jb3JlL3V0aWwuanMiLCIuLi9zcmMvY29yZS9CYXNlLmpzIiwiLi4vc3JjL2NvcmUvcmVxdWVzdC5qcyIsIi4uL3NyYy9jb3JlL3ZlbmRvci5qcyIsIi4uL3NyYy9UaW1lbGluZS5qcyIsIi4uL3NyYy9hbmltYXRpb24vVGltZWxpbmUuanMiLCIuLi9zcmMvYW5pbWF0aW9uL1RyYWNrQ2xpcC5qcyIsIi4uL3NyYy9jb3JlL0dMSW5mby5qcyIsIi4uL3NyYy9jb3JlL2dsZW51bS5qcyIsIi4uL3NyYy9jb3JlL0xpbmtlZExpc3QuanMiLCIuLi9zcmMvY29yZS9MUlUuanMiLCIuLi9zcmMvY29yZS9jb2xvci5qcyIsIi4uL3NyYy9NYXRlcmlhbC5qcyIsIi4uL3NyYy9ncHUvR0xQcm9ncmFtLmpzIiwiLi4vc3JjL2dwdS9Qcm9ncmFtTWFuYWdlci5qcyIsIi4uL3NyYy9TaGFkZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9wcmV6Lmdsc2wuanMiLCIuLi9zcmMvZ2xtYXRyaXgvbWF0NC5qcyIsIi4uL3NyYy9SZW5kZXJlci5qcyIsIi4uL3NyYy9tYXRoL1ZlY3RvcjMuanMiLCIuLi9zcmMvbWF0aC9RdWF0ZXJuaW9uLmpzIiwiLi4vc3JjL21hdGgvTWF0cml4NC5qcyIsIi4uL3NyYy9tYXRoL0JvdW5kaW5nQm94LmpzIiwiLi4vc3JjL05vZGUuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9oZWFkZXIvY2FsY0FtYmllbnRTSExpZ2h0Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9oZWFkZXIvbGlnaHQuanMiLCIuLi9zcmMvTGlnaHQuanMiLCIuLi9zcmMvbWF0aC9QbGFuZS5qcyIsIi4uL3NyYy9tYXRoL0ZydXN0dW0uanMiLCIuLi9zcmMvbWF0aC9SYXkuanMiLCIuLi9zcmMvQ2FtZXJhLmpzIiwiLi4vc3JjL1NjZW5lLmpzIiwiLi4vc3JjL2NvcmUvQ2FjaGUuanMiLCIuLi9zcmMvR2VvbWV0cnlCYXNlLmpzIiwiLi4vc3JjL0dlb21ldHJ5LmpzIiwiLi4vc3JjL2dlb21ldHJ5L1BsYW5lLmpzIiwiLi4vc3JjL2dlb21ldHJ5L0N1YmUuanMiLCIuLi9zcmMvZ2VvbWV0cnkvU3BoZXJlLmpzIiwiLi4vc3JjL2dlb21ldHJ5L1BhcmFtZXRyaWNTdXJmYWNlLmpzIiwiLi4vc3JjL1RleHR1cmUuanMiLCIuLi9zcmMvbWF0aC91dGlsLmpzIiwiLi4vc3JjL1RleHR1cmUyRC5qcyIsIi4uL3NyYy9UZXh0dXJlQ3ViZS5qcyIsIi4uL3NyYy9SZW5kZXJhYmxlLmpzIiwiLi4vc3JjL01lc2guanMiLCIuLi9zcmMvY2FtZXJhL1BlcnNwZWN0aXZlLmpzIiwiLi4vc3JjL2NhbWVyYS9PcnRob2dyYXBoaWMuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9zdGFuZGFyZC5nbHNsLmpzIiwiLi4vc3JjL1N0YW5kYXJkTWF0ZXJpYWwuanMiLCIuLi9zcmMvc2hhZGVyL2xpYnJhcnkuanMiLCIuLi9zcmMvSm9pbnQuanMiLCIuLi9zcmMvU2tlbGV0b24uanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS91dGlsLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9iYXNpYy5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvbGFtYmVydC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2Uvd2lyZWZyYW1lLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9za3lib3guZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvYnVpbHRpbi5qcyIsIi4uL3NyYy9sb2FkZXIvR0xURi5qcyIsIi4uL3NyYy9saWdodC9EaXJlY3Rpb25hbC5qcyIsIi4uL3NyYy9saWdodC9Qb2ludC5qcyIsIi4uL3NyYy9saWdodC9TcG90LmpzIiwiLi4vc3JjL2xpZ2h0L0FtYmllbnQuanMiLCIuLi9zcmMvRnJhbWVCdWZmZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3ZlcnRleC5nbHNsLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvUGFzcy5qcyIsIi4uL3NyYy9wbHVnaW4vU2t5Ym94LmpzIiwiLi4vc3JjL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAuanMiLCIuLi9zcmMvdXRpbC9kZHMuanMiLCIuLi9zcmMvdXRpbC9oZHIuanMiLCIuLi9zcmMvdXRpbC90ZXh0dXJlLmpzIiwiLi4vc3JjL3V0aWwvc2hhZGVyL2ludGVncmF0ZUJSREYuZ2xzbC5qcyIsIi4uL3NyYy91dGlsL3NoYWRlci9wcmVmaWx0ZXIuZ2xzbC5qcyIsIi4uL3NyYy91dGlsL2N1YmVtYXAuanMiLCIuLi9zcmMvbGlnaHQvQW1iaWVudEN1YmVtYXAuanMiLCIuLi9zcmMvbGlnaHQvQW1iaWVudFNILmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvVGV4dHVyZVBvb2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9zaGFkb3dtYXAuZ2xzbC5qcyIsIi4uL3NyYy9wcmVQYXNzL1NoYWRvd01hcC5qcyIsIi4uL3NyYy9waWNraW5nL1JheVBpY2tpbmcuanMiLCIuLi9zcmMvdXRpbC9zaC5qcyIsIi4uL3NyYy9hcHBsaWNhdGlvbi5qcyIsIi4uL3NyYy9hc3luYy9UYXNrLmpzIiwiLi4vc3JjL2FzeW5jL1Rhc2tHcm91cC5qcyIsIi4uL3NyYy9jb21wb3NpdG9yL0NvbXBvc2l0b3JOb2RlLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvR3JhcGguanMiLCIuLi9zcmMvY29tcG9zaXRvci9Db21wb3NpdG9yLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvU2NlbmVOb2RlLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvVGV4dHVyZU5vZGUuanMiLCIuLi9zcmMvY29tcG9zaXRvci9GaWx0ZXJOb2RlLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9jb2xvcmFkanVzdC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9ibHVyLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2x1bS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9sdXQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvdmlnbmV0dGUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3Ivb3V0cHV0Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2JyaWdodC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9kb3duc2FtcGxlLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3Vwc2FtcGxlLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2hkci5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9sZW5zZmxhcmUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvYmxlbmQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvZnhhYS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9yZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yLmpzIiwiLi4vc3JjL2NyZWF0ZUNvbXBvc2l0b3IuanMiLCIuLi9zcmMvY29tcG9zaXRvci9jcmVhdGVDb21wb3NpdG9yLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZ2J1ZmZlci5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvY2h1bmsuZ2xzbC5qcyIsIi4uL3NyYy9kZWZlcnJlZC9HQnVmZmVyLmpzIiwiLi4vc3JjL2dlb21ldHJ5L0NvbmUuanMiLCIuLi9zcmMvZ2VvbWV0cnkvQ3lsaW5kZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9saWdodHZvbHVtZS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvc3BvdC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZGlyZWN0aW9uYWwuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnRzaC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudGN1YmVtYXAuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL3BvaW50Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcGhlcmUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL3R1YmUuZ2xzbC5qcyIsIi4uL3NyYy9kZWZlcnJlZC9SZW5kZXJlci5qcyIsIi4uL3NyYy9nbG1hdHJpeC9tYXQyLmpzIiwiLi4vc3JjL2dsbWF0cml4L21hdDJkLmpzIiwiLi4vc3JjL2dsbWF0cml4L2luZGV4LmpzIiwiLi4vc3JjL2RlcC9nbG1hdHJpeC5qcyIsIi4uL3NyYy9saWdodC9TcGhlcmUuanMiLCIuLi9zcmMvbGlnaHQvVHViZS5qcyIsIi4uL3NyYy9sb2FkZXIvRlguanMiLCIuLi9zcmMvbWF0aC9NYXRyaXgyLmpzIiwiLi4vc3JjL21hdGgvTWF0cml4MmQuanMiLCIuLi9zcmMvbWF0aC9NYXRyaXgzLmpzIiwiLi4vc3JjL21hdGgvVmFsdWUuanMiLCIuLi9zcmMvbWF0aC9WZWN0b3I0LmpzIiwiLi4vc3JjL3BhcnRpY2xlL1BhcnRpY2xlLmpzIiwiLi4vc3JjL3BhcnRpY2xlL0VtaXR0ZXIuanMiLCIuLi9zcmMvcGFydGljbGUvRmllbGQuanMiLCIuLi9zcmMvcGFydGljbGUvRm9yY2VGaWVsZC5qcyIsIi4uL3NyYy9wYXJ0aWNsZS9wYXJ0aWNsZS5nbHNsLmpzIiwiLi4vc3JjL3BhcnRpY2xlL1BhcnRpY2xlUmVuZGVyYWJsZS5qcyIsIi4uL3NyYy9waWNraW5nL2NvbG9yLmdsc2wuanMiLCIuLi9zcmMvcGlja2luZy9QaXhlbFBpY2tpbmcuanMiLCIuLi9zcmMvcGx1Z2luL0ZyZWVDb250cm9sLmpzIiwiLi4vc3JjL3BsdWdpbi9HYW1lcGFkQ29udHJvbC5qcyIsIi4uL3NyYy9wbHVnaW4vR2VzdHVyZU1nci5qcyIsIi4uL3NyYy9wbHVnaW4vSW5maW5pdGVQbGFuZS5qcyIsIi4uL3NyYy9wbHVnaW4vT3JiaXRDb250cm9sLmpzIiwiLi4vc3JjL1N0YXRpY0dlb21ldHJ5LmpzIiwiLi4vc3JjL3V0aWwvbWVzaC5qcyIsIi4uL3NyYy91dGlsL3RyYW5zZmVyYWJsZS5qcyIsIi4uL3NyYy92ZXJzaW9uLmpzIiwiLi4vc3JjL3ZyL291dHB1dC5nbHNsLmpzIiwiLi4vc3JjL3ZyL0NhcmRib2FyZERpc3RvcnRlci5qcyIsIi4uL3NyYy92ci9TdGVyZW9DYW1lcmEuanMiLCIuLi9zcmMvY2xheWdsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIOe8k+WKqOWHveaVsOadpeiHqiBodHRwczovL2dpdGh1Yi5jb20vc29sZS90d2Vlbi5qcy9ibG9iL21hc3Rlci9zcmMvVHdlZW4uanNcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkuYW5pbWF0aW9uLmVhc2luZ1xyXG4gKi9cclxudmFyIGVhc2luZyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5saW5lYXJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxpbmVhcjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFkcmF0aWNJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1YWRyYXRpY091dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIGsgKiAoMiAtIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFkcmF0aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC0gMC41ICogKC0tayAqIChrIC0gMikgLSAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuY3ViaWNJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY3ViaWNJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrICogayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmN1YmljT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjdWJpY091dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiAtLWsgKiBrICogayArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmN1YmljSW5PdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGN1YmljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwLjUgKiAoKGsgLT0gMikgKiBrICogayArIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFydGljSW5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHF1YXJ0aWNJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrICogayAqIGsgKiBrO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFydGljT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWFydGljT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSAoLS1rICogayAqIGsgKiBrKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcucXVhcnRpY0luT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWFydGljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGsgKiBrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLSAwLjUgKiAoKGsgLT0gMikgKiBrICogayAqIGsgLSAyKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcucXVpbnRpY0luXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWludGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gayAqIGsgKiBrICogayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1aW50aWNPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHF1aW50aWNPdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gLS1rICogayAqIGsgKiBrICogayArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1aW50aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVpbnRpY0luT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMC41ICogayAqIGsgKiBrICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwLjUgKiAoKGsgLT0gMikgKiBrICogayAqIGsgKiBrICsgMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnNpbnVzb2lkYWxJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2ludXNvaWRhbEluOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSBNYXRoLmNvcyhrICogTWF0aC5QSSAvIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5zaW51c29pZGFsT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzaW51c29pZGFsT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguc2luKGsgKiBNYXRoLlBJIC8gMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnNpbnVzb2lkYWxJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2ludXNvaWRhbEluT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqICgxIC0gTWF0aC5jb3MoTWF0aC5QSSAqIGspKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZXhwb25lbnRpYWxJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrID09PSAwID8gMCA6IE1hdGgucG93KDEwMjQsIGsgLSAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGV4cG9uZW50aWFsT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIGsgPT09IDEgPyAxIDogMSAtIE1hdGgucG93KDIsIC0gMTAgKiBrKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZXhwb25lbnRpYWxJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMC41ICogTWF0aC5wb3coMTAyNCwgayAtIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMC41ICogKC0gTWF0aC5wb3coMiwgLSAxMCAqIChrIC0gMSkpICsgMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmNpcmN1bGFySW5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNpcmN1bGFySW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gMSAtIE1hdGguc3FydCgxIC0gayAqIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jaXJjdWxhck91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY2lyY3VsYXJPdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KDEgLSAoLS1rICogaykpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jaXJjdWxhckluT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjaXJjdWxhckluT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLSAwLjUgKiAoTWF0aC5zcXJ0KDEgLSBrICogaykgLSAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqIChNYXRoLnNxcnQoMSAtIChrIC09IDIpICogaykgKyAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZWxhc3RpY0luXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBlbGFzdGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICB2YXIgcywgYSA9IDAuMSwgcCA9IDAuNDtcclxuICAgICAgICBpZiAoayA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGsgPT09IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYSB8fCBhIDwgMSkge1xyXG4gICAgICAgICAgICBhID0gMTsgcyA9IHAgLyA0O1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBzID0gcCAqIE1hdGguYXNpbigxIC8gYSkgLyAoMiAqIE1hdGguUEkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLSAoYSAqIE1hdGgucG93KDIsIDEwICogKGsgLT0gMSkpICpcclxuICAgICAgICAgICAgICAgICAgICBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZWxhc3RpY091dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZWxhc3RpY091dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHZhciBzLCBhID0gMC4xLCBwID0gMC40O1xyXG4gICAgICAgIGlmIChrID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhIHx8IGEgPCAxKSB7XHJcbiAgICAgICAgICAgIGEgPSAxOyBzID0gcCAvIDQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHMgPSBwICogTWF0aC5hc2luKDEgLyBhKSAvICgyICogTWF0aC5QSSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoYSAqIE1hdGgucG93KDIsIC0gMTAgKiBrKSAqXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICsgMSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmVsYXN0aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZWxhc3RpY0luT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMsIGEgPSAwLjEsIHAgPSAwLjQ7XHJcbiAgICAgICAgaWYgKGsgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWEgfHwgYSA8IDEpIHtcclxuICAgICAgICAgICAgYSA9IDE7IHMgPSBwIC8gNDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgcyA9IHAgKiBNYXRoLmFzaW4oMSAvIGEpIC8gKDIgKiBNYXRoLlBJKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLSAwLjUgKiAoYSAqIE1hdGgucG93KDIsIDEwICogKGsgLT0gMSkpXHJcbiAgICAgICAgICAgICAgICAqIE1hdGguc2luKChrIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYSAqIE1hdGgucG93KDIsIC0xMCAqIChrIC09IDEpKVxyXG4gICAgICAgICAgICAgICAgKiBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICogMC41ICsgMTtcclxuXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmJhY2tJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYmFja0luOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMgPSAxLjcwMTU4O1xyXG4gICAgICAgIHJldHVybiBrICogayAqICgocyArIDEpICogayAtIHMpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5iYWNrT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBiYWNrT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMgPSAxLjcwMTU4O1xyXG4gICAgICAgIHJldHVybiAtLWsgKiBrICogKChzICsgMSkgKiBrICsgcykgKyAxO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5iYWNrSW5PdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJhY2tJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHZhciBzID0gMS43MDE1OCAqIDEuNTI1O1xyXG4gICAgICAgIGlmICgoayAqPSAyKSA8IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDAuNSAqIChrICogayAqICgocyArIDEpICogayAtIHMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqICgoayAtPSAyKSAqIGsgKiAoKHMgKyAxKSAqIGsgKyBzKSArIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5ib3VuY2VJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYm91bmNlSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gMSAtIGVhc2luZy5ib3VuY2VPdXQoMSAtIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5ib3VuY2VPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJvdW5jZU91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrIDwgKDEgLyAyLjc1KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gNy41NjI1ICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGsgPCAoMiAvIDIuNzUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA3LjU2MjUgKiAoayAtPSAoMS41IC8gMi43NSkpICogayArIDAuNzU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChrIDwgKDIuNSAvIDIuNzUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA3LjU2MjUgKiAoayAtPSAoMi4yNSAvIDIuNzUpKSAqIGsgKyAwLjkzNzU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDcuNTYyNSAqIChrIC09ICgyLjYyNSAvIDIuNzUpKSAqIGsgKyAwLjk4NDM3NTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmJvdW5jZUluT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBib3VuY2VJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrIDwgMC41KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlYXNpbmcuYm91bmNlSW4oayAqIDIpICogMC41O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZWFzaW5nLmJvdW5jZU91dChrICogMiAtIDEpICogMC41ICsgMC41O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZWFzaW5nO1xyXG4iLCJpbXBvcnQgRWFzaW5nIGZyb20gJy4vZWFzaW5nJztcclxuXHJcbmZ1bmN0aW9uIG5vb3AgKCkge31cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hbmltYXRpb24uQ2xpcFxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGVdXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbnxudW1iZXJ9IFtvcHRzLmxvb3BdIElmIGxvb3AgaXMgYSBudW1iZXIsIGl0IGluZGljYXRlIHRoZSBsb29wIGNvdW50IG9mIGFuaW1hdGlvblxyXG4gKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW29wdHMuZWFzaW5nXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZyYW1lXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZpbmlzaF1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25yZXN0YXJ0XVxyXG4gKi9cclxudmFyIENsaXAgPSBmdW5jdGlvbiAob3B0cykge1xyXG5cclxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGhpcy5uYW1lID0gb3B0cy5uYW1lIHx8ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAqL1xyXG4gICAgdGhpcy50YXJnZXQgPSBvcHRzLnRhcmdldDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubGlmZSA9IG9wdHMubGlmZSB8fCAxMDAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5kZWxheSA9IG9wdHMuZGVsYXkgfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZ2FwID0gb3B0cy5nYXAgfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucGxheWJhY2tSYXRlID0gb3B0cy5wbGF5YmFja1JhdGUgfHwgMTtcclxuXHJcblxyXG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XHJcblxyXG4gICAgdGhpcy5fbG9vcCA9IG9wdHMubG9vcCA9PSBudWxsID8gZmFsc2UgOiBvcHRzLmxvb3A7XHJcbiAgICB0aGlzLnNldExvb3AodGhpcy5fbG9vcCk7XHJcblxyXG4gICAgaWYgKG9wdHMuZWFzaW5nICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLnNldEVhc2luZyhvcHRzLmVhc2luZyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIHRoaXMub25mcmFtZSA9IG9wdHMub25mcmFtZSB8fCBub29wO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICB0aGlzLm9uZmluaXNoID0gb3B0cy5vbmZpbmlzaCB8fCBub29wO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICB0aGlzLm9ucmVzdGFydCA9IG9wdHMub25yZXN0YXJ0IHx8IG5vb3A7XHJcblxyXG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbn07XHJcblxyXG5DbGlwLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBnYXA6IDAsXHJcblxyXG4gICAgbGlmZTogMCxcclxuXHJcbiAgICBkZWxheTogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfGJvb2xlYW59IGxvb3BcclxuICAgICAqL1xyXG4gICAgc2V0TG9vcDogZnVuY3Rpb24gKGxvb3ApIHtcclxuICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcclxuICAgICAgICBpZiAobG9vcCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGxvb3AgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb29wUmVtYWluZWQgPSBsb29wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9vcFJlbWFpbmVkID0gSW5maW5pdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IGVhc2luZ1xyXG4gICAgICovXHJcbiAgICBzZXRFYXNpbmc6IGZ1bmN0aW9uIChlYXNpbmcpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGVhc2luZykgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGVhc2luZyA9IEVhc2luZ1tlYXNpbmddO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVhc2luZyA9IGVhc2luZztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRpbWVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgc3RlcDogZnVuY3Rpb24gKHRpbWUsIGRlbHRhVGltZSwgc2lsZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSB0aW1lICsgdGhpcy5kZWxheTtcclxuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFRpbWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWx0YVRpbWUgPSB0aW1lIC0gdGhpcy5fY3VycmVudFRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gdGltZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3BhdXNlZCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZSA8IHRoaXMuX3N0YXJ0VGltZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQRU5ESUdOIFN5bmMgP1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZSh0aW1lLCBkZWx0YVRpbWUpO1xyXG5cclxuICAgICAgICB2YXIgcGVyY2VudCA9IE1hdGgubWluKHRoaXMuX2VsYXBzZWRUaW1lIC8gdGhpcy5saWZlLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKHBlcmNlbnQgPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzY2hlZHVsZTtcclxuICAgICAgICBpZiAodGhpcy5lYXNpbmcpIHtcclxuICAgICAgICAgICAgc2NoZWR1bGUgPSB0aGlzLmVhc2luZyhwZXJjZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHNjaGVkdWxlID0gcGVyY2VudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2lsZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZSgnZnJhbWUnLCBzY2hlZHVsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGVyY2VudCA9PT0gMSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fbG9vcCAmJiB0aGlzLl9sb29wUmVtYWluZWQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXN0YXJ0SW5Mb29wKHRpbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9vcFJlbWFpbmVkLS07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Jlc3RhcnQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gTWFyayB0aGlzIGNsaXAgdG8gYmUgZGVsZXRlZFxyXG4gICAgICAgICAgICAgICAgLy8gSW4gdGhlIGFuaW1hdGlvbi51cGRhdGVcclxuICAgICAgICAgICAgICAgIHRoaXMuX25lZWRzUmVtb3ZlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2ZpbmlzaCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRpbWVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgc2V0VGltZTogZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGVwKHRpbWUgKyB0aGlzLl9zdGFydFRpbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZXN0YXJ0OiBmdW5jdGlvbiAodGltZSkge1xyXG4gICAgICAgIC8vIElmIHVzZXIgbGVhdmUgdGhlIHBhZ2UgZm9yIGEgd2hpbGUsIHdoZW4gaGUgZ2V0cyBiYWNrXHJcbiAgICAgICAgLy8gQWxsIGNsaXBzIG1heSBiZSBleHBpcmVkIGFuZCBhbGwgc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nIHZhbHVlKHBvc2l0aW9uKVxyXG4gICAgICAgIC8vIEl0IGlzIGNsZWFybHkgd3JvbmcsIHNvIHdlIHVzZSByZW1haW5kZXIgdG8gYWRkIGEgb2Zmc2V0XHJcblxyXG4gICAgICAgIHZhciByZW1haW5kZXIgPSAwO1xyXG4gICAgICAgIC8vIFJlbWFpbmRlciBpZ25vcmVkIGlmIHJlc3RhcnQgaXMgaW52b2tlZCBtYW51YWxseVxyXG4gICAgICAgIGlmICh0aW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2VsYXBzZSh0aW1lKTtcclxuICAgICAgICAgICAgcmVtYWluZGVyID0gdGhpcy5fZWxhcHNlZFRpbWUgJSB0aGlzLmxpZmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRpbWUgPSB0aW1lIHx8IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWUgLSByZW1haW5kZXIgKyB0aGlzLmRlbGF5O1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fbmVlZHNSZW1vdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0RWxhcHNlZFRpbWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZWxhcHNlZFRpbWU7XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZXN0YXJ0SW5Mb29wOiBmdW5jdGlvbiAodGltZSkge1xyXG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWUgKyB0aGlzLmdhcDtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIF9lbGFwc2U6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YVRpbWUpIHtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSArPSBkZWx0YVRpbWUgKiB0aGlzLnBsYXliYWNrUmF0ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZmlyZTogZnVuY3Rpb24gKGV2ZW50VHlwZSwgYXJnKSB7XHJcbiAgICAgICAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudFR5cGU7XHJcbiAgICAgICAgaWYgKHRoaXNbZXZlbnROYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzW2V2ZW50TmFtZV0odGhpcy50YXJnZXQsIGFyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjbGlwID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKTtcclxuICAgICAgICBjbGlwLm5hbWUgPSB0aGlzLm5hbWU7XHJcbiAgICAgICAgY2xpcC5fbG9vcCA9IHRoaXMuX2xvb3A7XHJcbiAgICAgICAgY2xpcC5fbG9vcFJlbWFpbmVkID0gdGhpcy5fbG9vcFJlbWFpbmVkO1xyXG5cclxuICAgICAgICBjbGlwLmxpZmUgPSB0aGlzLmxpZmU7XHJcbiAgICAgICAgY2xpcC5nYXAgPSB0aGlzLmdhcDtcclxuICAgICAgICBjbGlwLmRlbGF5ID0gdGhpcy5kZWxheTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNsaXA7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXVzZSB0aGUgY2xpcC5cclxuICAgICAqL1xyXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3VtZSB0aGUgY2xpcC5cclxuICAgICAqL1xyXG4gICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICB9XHJcbn07XHJcbkNsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2xpcDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENsaXA7XHJcbiIsImltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcbmltcG9ydCBlYXNpbmdGdW5jcyBmcm9tICcuL2Vhc2luZyc7XHJcblxyXG52YXIgYXJyYXlTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRHZXR0ZXIodGFyZ2V0LCBrZXkpIHtcclxuICAgIHJldHVybiB0YXJnZXRba2V5XTtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0U2V0dGVyKHRhcmdldCwga2V5LCB2YWx1ZSkge1xyXG4gICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW50ZXJwb2xhdGVOdW1iZXIocDAsIHAxLCBwZXJjZW50KSB7XHJcbiAgICByZXR1cm4gKHAxIC0gcDApICogcGVyY2VudCArIHAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUFycmF5KHAwLCBwMSwgcGVyY2VudCwgb3V0LCBhcnJEaW0pIHtcclxuICAgIHZhciBsZW4gPSBwMC5sZW5ndGg7XHJcbiAgICBpZiAoYXJyRGltID09IDEpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIG91dFtpXSA9IGludGVycG9sYXRlTnVtYmVyKHAwW2ldLCBwMVtpXSwgcGVyY2VudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIGxlbjIgPSBwMFswXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgb3V0W2ldW2pdID0gaW50ZXJwb2xhdGVOdW1iZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgcDBbaV1bal0sIHAxW2ldW2pdLCBwZXJjZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FycmF5TGlrZShkYXRhKSB7XHJcbiAgICBpZiAodHlwZW9mKGRhdGEpID09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YoZGF0YSkgPT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YoZGF0YS5sZW5ndGgpID09ICdudW1iZXInO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9uZVZhbHVlKHZhbHVlKSB7XHJcbiAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpKSB7XHJcbiAgICAgICAgdmFyIGxlbiA9IHZhbHVlLmxlbmd0aDtcclxuICAgICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWVbMF0pKSB7XHJcbiAgICAgICAgICAgIHZhciByZXQgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmV0LnB1c2goYXJyYXlTbGljZS5jYWxsKHZhbHVlW2ldKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2F0bXVsbFJvbUludGVycG9sYXRlQXJyYXkoXHJcbiAgICBwMCwgcDEsIHAyLCBwMywgdCwgdDIsIHQzLCBvdXQsIGFyckRpbVxyXG4pIHtcclxuICAgIHZhciBsZW4gPSBwMC5sZW5ndGg7XHJcbiAgICBpZiAoYXJyRGltID09IDEpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIG91dFtpXSA9IGNhdG11bGxSb21JbnRlcnBvbGF0ZShcclxuICAgICAgICAgICAgICAgIHAwW2ldLCBwMVtpXSwgcDJbaV0sIHAzW2ldLCB0LCB0MiwgdDNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciBsZW4yID0gcDBbMF0ubGVuZ3RoO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW4yOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIG91dFtpXVtqXSA9IGNhdG11bGxSb21JbnRlcnBvbGF0ZShcclxuICAgICAgICAgICAgICAgICAgICBwMFtpXVtqXSwgcDFbaV1bal0sIHAyW2ldW2pdLCBwM1tpXVtqXSxcclxuICAgICAgICAgICAgICAgICAgICB0LCB0MiwgdDNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhdG11bGxSb21JbnRlcnBvbGF0ZShwMCwgcDEsIHAyLCBwMywgdCwgdDIsIHQzKSB7XHJcbiAgICB2YXIgdjAgPSAocDIgLSBwMCkgKiAwLjU7XHJcbiAgICB2YXIgdjEgPSAocDMgLSBwMSkgKiAwLjU7XHJcbiAgICByZXR1cm4gKDIgKiAocDEgLSBwMikgKyB2MCArIHYxKSAqIHQzXHJcbiAgICAgICAgICAgICsgKC0gMyAqIChwMSAtIHAyKSAtIDIgKiB2MCAtIHYxKSAqIHQyXHJcbiAgICAgICAgICAgICsgdjAgKiB0ICsgcDE7XHJcbn1cclxuXHJcbi8vIGFycjAgaXMgc291cmNlIGFycmF5LCBhcnIxIGlzIHRhcmdldCBhcnJheS5cclxuLy8gRG8gc29tZSBwcmVwcm9jZXNzIHRvIGF2b2lkIGVycm9yIGhhcHBlbmVkIHdoZW4gaW50ZXJwb2xhdGluZyBmcm9tIGFycjAgdG8gYXJyMVxyXG5mdW5jdGlvbiBmaWxsQXJyKGFycjAsIGFycjEsIGFyckRpbSkge1xyXG4gICAgdmFyIGFycjBMZW4gPSBhcnIwLmxlbmd0aDtcclxuICAgIHZhciBhcnIxTGVuID0gYXJyMS5sZW5ndGg7XHJcbiAgICBpZiAoYXJyMExlbiAhPT0gYXJyMUxlbikge1xyXG4gICAgICAgIC8vIEZJWE1FIE5vdCB3b3JrIGZvciBUeXBlZEFycmF5XHJcbiAgICAgICAgdmFyIGlzUHJldmlvdXNMYXJnZXIgPSBhcnIwTGVuID4gYXJyMUxlbjtcclxuICAgICAgICBpZiAoaXNQcmV2aW91c0xhcmdlcikge1xyXG4gICAgICAgICAgICAvLyBDdXQgdGhlIHByZXZpb3VzXHJcbiAgICAgICAgICAgIGFycjAubGVuZ3RoID0gYXJyMUxlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIEZpbGwgdGhlIHByZXZpb3VzXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBhcnIwTGVuOyBpIDwgYXJyMUxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhcnIwLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgYXJyRGltID09PSAxID8gYXJyMVtpXSA6IGFycmF5U2xpY2UuY2FsbChhcnIxW2ldKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEhhbmRsaW5nIE5hTiB2YWx1ZVxyXG4gICAgdmFyIGxlbjIgPSBhcnIwWzBdICYmIGFycjBbMF0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyckRpbSA9PT0gMSkge1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4oYXJyMFtpXSkpIHtcclxuICAgICAgICAgICAgICAgIGFycjBbaV0gPSBhcnIxW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKGFycjBbaV1bal0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyMFtpXVtqXSA9IGFycjFbaV1bal07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXJyYXlTYW1lKGFycjAsIGFycjEsIGFyckRpbSkge1xyXG4gICAgaWYgKGFycjAgPT09IGFycjEpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBsZW4gPSBhcnIwLmxlbmd0aDtcclxuICAgIGlmIChsZW4gIT09IGFycjEubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGFyckRpbSA9PT0gMSkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFycjBbaV0gIT09IGFycjFbaV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBsZW4yID0gYXJyMFswXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFycjBbaV1bal0gIT09IGFycjFbaV1bal0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlVHJhY2tDbGlwKGFuaW1hdG9yLCBnbG9iYWxFYXNpbmcsIG9uZVRyYWNrRG9uZSwga2V5ZnJhbWVzLCBwcm9wTmFtZSwgaW50ZXJwb2xhdGVyLCBtYXhUaW1lKSB7XHJcbiAgICB2YXIgZ2V0dGVyID0gYW5pbWF0b3IuX2dldHRlcjtcclxuICAgIHZhciBzZXR0ZXIgPSBhbmltYXRvci5fc2V0dGVyO1xyXG4gICAgdmFyIHVzZVNwbGluZSA9IGdsb2JhbEVhc2luZyA9PT0gJ3NwbGluZSc7XHJcblxyXG4gICAgdmFyIHRyYWNrTGVuID0ga2V5ZnJhbWVzLmxlbmd0aDtcclxuICAgIGlmICghdHJhY2tMZW4pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBHdWVzcyBkYXRhIHR5cGVcclxuICAgIHZhciBmaXJzdFZhbCA9IGtleWZyYW1lc1swXS52YWx1ZTtcclxuICAgIHZhciBpc1ZhbHVlQXJyYXkgPSBpc0FycmF5TGlrZShmaXJzdFZhbCk7XHJcblxyXG4gICAgLy8gRm9yIHZlcnRpY2VzIG1vcnBoaW5nXHJcbiAgICB2YXIgYXJyRGltID0gKFxyXG4gICAgICAgICAgICBpc1ZhbHVlQXJyYXlcclxuICAgICAgICAgICAgJiYgaXNBcnJheUxpa2UoZmlyc3RWYWxbMF0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgID8gMiA6IDE7XHJcbiAgICAvLyBTb3J0IGtleWZyYW1lIGFzIGFzY2VuZGluZ1xyXG4gICAga2V5ZnJhbWVzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xyXG4gICAgICAgIHJldHVybiBhLnRpbWUgLSBiLnRpbWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQZXJjZW50cyBvZiBlYWNoIGtleWZyYW1lXHJcbiAgICB2YXIga2ZQZXJjZW50cyA9IFtdO1xyXG4gICAgLy8gVmFsdWUgb2YgZWFjaCBrZXlmcmFtZVxyXG4gICAgdmFyIGtmVmFsdWVzID0gW107XHJcbiAgICAvLyBFYXNpbmcgZnVuY3Mgb2YgZWFjaCBrZXlmcmFtZS5cclxuICAgIHZhciBrZkVhc2luZ3MgPSBbXTtcclxuXHJcbiAgICB2YXIgcHJldlZhbHVlID0ga2V5ZnJhbWVzWzBdLnZhbHVlO1xyXG4gICAgdmFyIGlzQWxsVmFsdWVFcXVhbCA9IHRydWU7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWNrTGVuOyBpKyspIHtcclxuICAgICAgICBrZlBlcmNlbnRzLnB1c2goa2V5ZnJhbWVzW2ldLnRpbWUgLyBtYXhUaW1lKTtcclxuXHJcbiAgICAgICAgLy8gQXNzdW1lIHZhbHVlIGlzIGEgY29sb3Igd2hlbiBpdCBpcyBhIHN0cmluZ1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGtleWZyYW1lc1tpXS52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdmFsdWUgaXMgZXF1YWwsIGRlZXAgY2hlY2sgaWYgdmFsdWUgaXMgYXJyYXlcclxuICAgICAgICBpZiAoISgoaXNWYWx1ZUFycmF5ICYmIGlzQXJyYXlTYW1lKHZhbHVlLCBwcmV2VmFsdWUsIGFyckRpbSkpXHJcbiAgICAgICAgICAgIHx8ICghaXNWYWx1ZUFycmF5ICYmIHZhbHVlID09PSBwcmV2VmFsdWUpKSkge1xyXG4gICAgICAgICAgICBpc0FsbFZhbHVlRXF1YWwgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJldlZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGtmVmFsdWVzLnB1c2godmFsdWUpO1xyXG4gICAgICAgIGtmRWFzaW5ncy5wdXNoKGtleWZyYW1lc1tpXS5lYXNpbmcpO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzQWxsVmFsdWVFcXVhbCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbGFzdFZhbHVlID0ga2ZWYWx1ZXNbdHJhY2tMZW4gLSAxXTtcclxuICAgIC8vIFBvbHlmaWxsIGFycmF5IGFuZCBOYU4gdmFsdWVcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhY2tMZW4gLSAxOyBpKyspIHtcclxuICAgICAgICBpZiAoaXNWYWx1ZUFycmF5KSB7XHJcbiAgICAgICAgICAgIGZpbGxBcnIoa2ZWYWx1ZXNbaV0sIGxhc3RWYWx1ZSwgYXJyRGltKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihrZlZhbHVlc1tpXSkgJiYgIWlzTmFOKGxhc3RWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGtmVmFsdWVzW2ldID0gbGFzdFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaXNWYWx1ZUFycmF5ICYmIGZpbGxBcnIoZ2V0dGVyKGFuaW1hdG9yLl90YXJnZXQsIHByb3BOYW1lKSwgbGFzdFZhbHVlLCBhcnJEaW0pO1xyXG5cclxuICAgIC8vIENhY2hlIHRoZSBrZXkgb2YgbGFzdCBmcmFtZSB0byBzcGVlZCB1cCB3aGVuXHJcbiAgICAvLyBhbmltYXRpb24gcGxheWJhY2sgaXMgc2VxdWVuY3lcclxuICAgIHZhciBjYWNoZUtleSA9IDA7XHJcbiAgICB2YXIgY2FjaGVQZXJjZW50ID0gMDtcclxuICAgIHZhciBzdGFydDtcclxuICAgIHZhciBpLCB3O1xyXG4gICAgdmFyIHAwLCBwMSwgcDIsIHAzO1xyXG5cclxuICAgIHZhciBvbmZyYW1lID0gZnVuY3Rpb24odGFyZ2V0LCBwZXJjZW50KSB7XHJcbiAgICAgICAgLy8gRmluZCB0aGUgcmFuZ2Uga2V5ZnJhbWVzXHJcbiAgICAgICAgLy8ga2YxLS0tLS1rZjItLS0tLS0tLS1jdXJyZW50LS0tLS0tLS1rZjNcclxuICAgICAgICAvLyBmaW5kIGtmMihpKSBhbmQga2YzKGkgKyAxKSBhbmQgZG8gaW50ZXJwb2xhdGlvblxyXG4gICAgICAgIGlmIChwZXJjZW50IDwgY2FjaGVQZXJjZW50KSB7XHJcbiAgICAgICAgICAgIC8vIFN0YXJ0IGZyb20gbmV4dCBrZXlcclxuICAgICAgICAgICAgc3RhcnQgPSBNYXRoLm1pbihjYWNoZUtleSArIDEsIHRyYWNrTGVuIC0gMSk7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtmUGVyY2VudHNbaV0gPD0gcGVyY2VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkgPSBNYXRoLm1pbihpLCB0cmFja0xlbiAtIDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChpID0gY2FjaGVLZXk7IGkgPCB0cmFja0xlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2ZQZXJjZW50c1tpXSA+IHBlcmNlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpID0gTWF0aC5taW4oaSAtIDEsIHRyYWNrTGVuIC0gMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhY2hlS2V5ID0gaTtcclxuICAgICAgICBjYWNoZVBlcmNlbnQgPSBwZXJjZW50O1xyXG5cclxuICAgICAgICB2YXIgcmFuZ2UgPSAoa2ZQZXJjZW50c1tpICsgMV0gLSBrZlBlcmNlbnRzW2ldKTtcclxuICAgICAgICBpZiAocmFuZ2UgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdyA9IChwZXJjZW50IC0ga2ZQZXJjZW50c1tpXSkgLyByYW5nZTtcclxuICAgICAgICAgICAgLy8gQ2xhbXAgMCAtIDFcclxuICAgICAgICAgICAgdyA9IE1hdGgubWF4KE1hdGgubWluKDEsIHcpLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdyA9IGtmRWFzaW5nc1tpICsgMV0odyk7XHJcblxyXG4gICAgICAgIGlmICh1c2VTcGxpbmUpIHtcclxuICAgICAgICAgICAgcDEgPSBrZlZhbHVlc1tpXTtcclxuICAgICAgICAgICAgcDAgPSBrZlZhbHVlc1tpID09PSAwID8gaSA6IGkgLSAxXTtcclxuICAgICAgICAgICAgcDIgPSBrZlZhbHVlc1tpID4gdHJhY2tMZW4gLSAyID8gdHJhY2tMZW4gLSAxIDogaSArIDFdO1xyXG4gICAgICAgICAgICBwMyA9IGtmVmFsdWVzW2kgPiB0cmFja0xlbiAtIDMgPyB0cmFja0xlbiAtIDEgOiBpICsgMl07XHJcbiAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXIodGFyZ2V0LCBwcm9wTmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAwLCBwMSwgcDIsIHAzLCB3XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1ZhbHVlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGNhdG11bGxSb21JbnRlcnBvbGF0ZUFycmF5KFxyXG4gICAgICAgICAgICAgICAgICAgIHAwLCBwMSwgcDIsIHAzLCB3LCB3KncsIHcqdyp3LFxyXG4gICAgICAgICAgICAgICAgICAgIGdldHRlcih0YXJnZXQsIHByb3BOYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICBhcnJEaW1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhdG11bGxSb21JbnRlcnBvbGF0ZShwMCwgcDEsIHAyLCBwMywgdywgdyp3LCB3KncqdylcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXIodGFyZ2V0LCBwcm9wTmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtmVmFsdWVzW2ldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZlZhbHVlc1tpICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1ZhbHVlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGludGVycG9sYXRlQXJyYXkoXHJcbiAgICAgICAgICAgICAgICAgICAga2ZWYWx1ZXNbaV0sIGtmVmFsdWVzW2krMV0sIHcsXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0dGVyKHRhcmdldCwgcHJvcE5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyckRpbVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVOdW1iZXIoa2ZWYWx1ZXNbaV0sIGtmVmFsdWVzW2krMV0sIHcpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgY2xpcCA9IG5ldyBDbGlwKHtcclxuICAgICAgICB0YXJnZXQ6IGFuaW1hdG9yLl90YXJnZXQsXHJcbiAgICAgICAgbGlmZTogbWF4VGltZSxcclxuICAgICAgICBsb29wOiBhbmltYXRvci5fbG9vcCxcclxuICAgICAgICBkZWxheTogYW5pbWF0b3IuX2RlbGF5LFxyXG4gICAgICAgIG9uZnJhbWU6IG9uZnJhbWUsXHJcbiAgICAgICAgb25maW5pc2g6IG9uZVRyYWNrRG9uZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGdsb2JhbEVhc2luZyAmJiBnbG9iYWxFYXNpbmcgIT09ICdzcGxpbmUnKSB7XHJcbiAgICAgICAgY2xpcC5zZXRFYXNpbmcoZ2xvYmFsRWFzaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2xpcDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBBbmltYXRvciBvYmplY3QgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSBBbmltYXRpb24ucHJvdG90eXBlLmFuaW1hdGUgbWV0aG9kLlxyXG4gKiBBZnRlciBjcmVhdGVkLCB3ZSBjYW4gdXNlIHtAbGluayBjbGF5LmFuaW1hdGlvbi5BbmltYXRvciN3aGVufSB0byBhZGQgYWxsIGtleWZyYW1lcyBhbmQge0BsaW5rIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yI3N0YXJ0fSBpdC5cclxuICogQ2xpcHMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYW5kIGFkZGVkIHRvIHRoZSBhbmltYXRpb24gaW5zdGFuY2Ugd2hpY2ggY3JlYXRlZCB0aGlzIGRlZmVycmVkIG9iamVjdC5cclxuICpcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcclxuICogQHBhcmFtIHtib29sZWFufSBsb29wXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdldHRlclxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXJcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gaW50ZXJwb2xhdGVyXHJcbiAqL1xyXG5mdW5jdGlvbiBBbmltYXRvcih0YXJnZXQsIGxvb3AsIGdldHRlciwgc2V0dGVyLCBpbnRlcnBvbGF0ZXIpIHtcclxuICAgIHRoaXMuX3RyYWNrcyA9IHt9O1xyXG4gICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0O1xyXG5cclxuICAgIHRoaXMuX2xvb3AgPSBsb29wIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuX2dldHRlciA9IGdldHRlciB8fCBkZWZhdWx0R2V0dGVyO1xyXG4gICAgdGhpcy5fc2V0dGVyID0gc2V0dGVyIHx8IGRlZmF1bHRTZXR0ZXI7XHJcblxyXG4gICAgdGhpcy5faW50ZXJwb2xhdGVyID0gaW50ZXJwb2xhdGVyIHx8IG51bGw7XHJcblxyXG4gICAgdGhpcy5fZGVsYXkgPSAwO1xyXG5cclxuICAgIHRoaXMuX2RvbmVMaXN0ID0gW107XHJcblxyXG4gICAgdGhpcy5fb25mcmFtZUxpc3QgPSBbXTtcclxuXHJcbiAgICB0aGlzLl9jbGlwTGlzdCA9IFtdO1xyXG5cclxuICAgIHRoaXMuX21heFRpbWUgPSAwO1xyXG5cclxuICAgIHRoaXMuX2xhc3RLRlRpbWUgPSAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub29wRWFzaW5nKHcpIHtcclxuICAgIHJldHVybiB3O1xyXG59XHJcblxyXG5BbmltYXRvci5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IEFuaW1hdG9yLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgS2V5ZnJhbWUgdGltZSB1c2luZyBtaWxsaXNlY29uZFxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEga2V5LXZhbHVlIG9iamVjdC4gVmFsdWUgY2FuIGJlIG51bWJlciwgMWQgYW5kIDJkIGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW2Vhc2luZ11cclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICB3aGVuOiBmdW5jdGlvbiAodGltZSwgcHJvcHMsIGVhc2luZykge1xyXG5cclxuICAgICAgICB0aGlzLl9tYXhUaW1lID0gTWF0aC5tYXgodGltZSwgdGhpcy5fbWF4VGltZSk7XHJcblxyXG4gICAgICAgIGVhc2luZyA9ICh0eXBlb2YgZWFzaW5nID09PSAnZnVuY3Rpb24nID8gZWFzaW5nIDogZWFzaW5nRnVuY3NbZWFzaW5nXSkgfHwgbm9vcEVhc2luZztcclxuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBwcm9wcykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RyYWNrc1twcm9wTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrc1twcm9wTmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgIC8vIElmIHRpbWUgaXMgMFxyXG4gICAgICAgICAgICAgICAgLy8gIFRoZW4gcHJvcHMgaXMgZ2l2ZW4gaW5pdGlhbGl6ZSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgLy8gRWxzZVxyXG4gICAgICAgICAgICAgICAgLy8gIEluaXRpYWxpemUgdmFsdWUgZnJvbSBjdXJyZW50IHByb3AgdmFsdWVcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tzW3Byb3BOYW1lXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNsb25lVmFsdWUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXR0ZXIodGhpcy5fdGFyZ2V0LCBwcm9wTmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWFzaW5nOiBlYXNpbmdcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl90cmFja3NbcHJvcE5hbWVdLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGltZTogcGFyc2VJbnQodGltZSksXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogcHJvcHNbcHJvcE5hbWVdLFxyXG4gICAgICAgICAgICAgICAgZWFzaW5nOiBlYXNpbmdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgRHVyaW5nIHRpbWUgc2luY2UgbGFzdCBrZXlmcmFtZVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEga2V5LXZhbHVlIG9iamVjdC4gVmFsdWUgY2FuIGJlIG51bWJlciwgMWQgYW5kIDJkIGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW2Vhc2luZ11cclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICB0aGVuOiBmdW5jdGlvbiAoZHVyaW5nVGltZSwgcHJvcHMsIGVhc2luZykge1xyXG4gICAgICAgIHRoaXMud2hlbihkdXJpbmdUaW1lICsgdGhpcy5fbGFzdEtGVGltZSwgcHJvcHMsIGVhc2luZyk7XHJcbiAgICAgICAgdGhpcy5fbGFzdEtGVGltZSArPSBkdXJpbmdUaW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogY2FsbGJhY2sgd2hlbiBydW5uaW5nIGFuaW1hdGlvblxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrIGNhbGxiYWNrIGhhdmUgdHdvIGFyZ3MsIGFuaW1hdGluZyB0YXJnZXQgYW5kIGN1cnJlbnQgcGVyY2VudFxyXG4gICAgICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQW5pbWF0b3J9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGR1cmluZzogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5fb25mcmFtZUxpc3QucHVzaChjYWxsYmFjayk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9kb25lQ2FsbGJhY2s6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBDbGVhciBhbGwgdHJhY2tzXHJcbiAgICAgICAgdGhpcy5fdHJhY2tzID0ge307XHJcbiAgICAgICAgLy8gQ2xlYXIgYWxsIGNsaXBzXHJcbiAgICAgICAgdGhpcy5fY2xpcExpc3QubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgdmFyIGRvbmVMaXN0ID0gdGhpcy5fZG9uZUxpc3Q7XHJcbiAgICAgICAgdmFyIGxlbiA9IGRvbmVMaXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRvbmVMaXN0W2ldLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU3RhcnQgdGhlIGFuaW1hdGlvblxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfEZ1bmN0aW9ufSBlYXNpbmdcclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKGdsb2JhbEVhc2luZykge1xyXG5cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGNsaXBDb3VudCA9IDA7XHJcblxyXG4gICAgICAgIHZhciBvbmVUcmFja0RvbmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY2xpcENvdW50LS07XHJcbiAgICAgICAgICAgIGlmIChjbGlwQ291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuX2RvbmVDYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIGxhc3RDbGlwO1xyXG4gICAgICAgIHZhciBjbGlwTWF4VGltZSA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gdGhpcy5fdHJhY2tzKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gY3JlYXRlVHJhY2tDbGlwKFxyXG4gICAgICAgICAgICAgICAgdGhpcywgZ2xvYmFsRWFzaW5nLCBvbmVUcmFja0RvbmUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja3NbcHJvcE5hbWVdLCBwcm9wTmFtZSwgc2VsZi5faW50ZXJwb2xhdGVyLCBzZWxmLl9tYXhUaW1lXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICBjbGlwTWF4VGltZSA9IE1hdGgubWF4KGNsaXBNYXhUaW1lLCBjbGlwLmxpZmUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpcExpc3QucHVzaChjbGlwKTtcclxuICAgICAgICAgICAgICAgIGNsaXBDb3VudCsrO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIElmIHN0YXJ0IGFmdGVyIGFkZGVkIHRvIGFuaW1hdGlvblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRpb24uYWRkQ2xpcChjbGlwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsYXN0Q2xpcCA9IGNsaXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFkZCBkdXJpbmcgY2FsbGJhY2sgb24gdGhlIGxhc3QgY2xpcFxyXG4gICAgICAgIGlmIChsYXN0Q2xpcCkge1xyXG4gICAgICAgICAgICB2YXIgb2xkT25GcmFtZSA9IGxhc3RDbGlwLm9uZnJhbWU7XHJcbiAgICAgICAgICAgIGxhc3RDbGlwLm9uZnJhbWUgPSBmdW5jdGlvbiAodGFyZ2V0LCBwZXJjZW50KSB7XHJcbiAgICAgICAgICAgICAgICBvbGRPbkZyYW1lKHRhcmdldCwgcGVyY2VudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLl9vbmZyYW1lTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX29uZnJhbWVMaXN0W2ldKHRhcmdldCwgcGVyY2VudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNsaXBDb3VudCkge1xyXG4gICAgICAgICAgICB0aGlzLl9kb25lQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcCB0aGUgYW5pbWF0aW9uXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NsaXBMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gdGhpcy5fY2xpcExpc3RbaV07XHJcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uLnJlbW92ZUNsaXAoY2xpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NsaXBMaXN0ID0gW107XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxheSBnaXZlbiBtaWxsaXNlY29uZHNcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gdGltZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQW5pbWF0b3J9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGRlbGF5OiBmdW5jdGlvbiAodGltZSl7XHJcbiAgICAgICAgdGhpcy5fZGVsYXkgPSB0aW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgYWZ0ZXIgYW5pbWF0aW9uIGZpbmlzaGVkXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5BbmltYXRvcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmFuaW1hdGlvbi5BbmltYXRvci5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgZG9uZTogZnVuY3Rpb24gKGZ1bmMpIHtcclxuICAgICAgICBpZiAoZnVuYykge1xyXG4gICAgICAgICAgICB0aGlzLl9kb25lTGlzdC5wdXNoKGZ1bmMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhbGwgY2xpcHMgY3JlYXRlZCBpbiBzdGFydCBtZXRob2QuXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5DbGlwW119XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGdldENsaXBzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBMaXN0O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0b3I7XHJcbiIsIi8vIDFEIEJsZW5kIGNsaXAgb2YgYmxlbmQgdHJlZVxyXG4vLyBodHRwOi8vZG9jcy51bml0eTNkLmNvbS9Eb2N1bWVudGF0aW9uL01hbnVhbC8xREJsZW5kaW5nLmh0bWxcclxuXHJcbmltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcblxyXG52YXIgY2xpcFNvcnRGdW5jID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhLnBvc2l0aW9uIDwgYi5wb3NpdGlvbjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcC5JQ2xpcElucHV0XHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwb3NpdGlvblxyXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiAxZCBibGVuZGluZyBub2RlIGluIGFuaW1hdGlvbiBibGVuZCB0cmVlLlxyXG4gKiBvdXRwdXQgY2xpcCBtdXN0IGhhdmUgYmxlbmQxRCBhbmQgY29weSBtZXRob2RcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGlvXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cclxuICogQHBhcmFtIHtvYmplY3RbXX0gW29wdHMuaW5wdXRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMucG9zaXRpb25dXHJcbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gW29wdHMub3V0cHV0XVxyXG4gKi9cclxudmFyIEJsZW5kMURDbGlwID0gZnVuY3Rpb24gKG9wdHMpIHtcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XHJcbiAgICAvKipcclxuICAgICAqIE91dHB1dCBjbGlwIG11c3QgaGF2ZSBibGVuZDFEIGFuZCBjb3B5IG1ldGhvZFxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkNsaXB9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3V0cHV0ID0gb3B0cy5vdXRwdXQgfHwgbnVsbDtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwLklDbGlwSW5wdXRbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5pbnB1dHMgPSBvcHRzLmlucHV0cyB8fCBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IDA7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVLZXkgPSAwO1xyXG4gICAgdGhpcy5fY2FjaGVQb3NpdGlvbiA9IC1JbmZpbml0eTtcclxuXHJcbiAgICB0aGlzLmlucHV0cy5zb3J0KGNsaXBTb3J0RnVuYyk7XHJcbn07XHJcblxyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUgPSBuZXcgQ2xpcCgpO1xyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZDFEQ2xpcDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb25cclxuICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5DbGlwfSBpbnB1dENsaXBcclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRdXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwLklDbGlwSW5wdXR9XHJcbiAqL1xyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuYWRkSW5wdXQgPSBmdW5jdGlvbiAocG9zaXRpb24sIGlucHV0Q2xpcCwgb2Zmc2V0KSB7XHJcbiAgICB2YXIgb2JqID0ge1xyXG4gICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcclxuICAgICAgICBjbGlwOiBpbnB1dENsaXAsXHJcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQgfHwgMFxyXG4gICAgfTtcclxuICAgIHRoaXMubGlmZSA9IE1hdGgubWF4KGlucHV0Q2xpcC5saWZlLCB0aGlzLmxpZmUpO1xyXG5cclxuICAgIGlmICghdGhpcy5pbnB1dHMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbiAgICB2YXIgbGVuID0gdGhpcy5pbnB1dHMubGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMuaW5wdXRzWzBdLnBvc2l0aW9uID4gcG9zaXRpb24pIHtcclxuICAgICAgICB0aGlzLmlucHV0cy51bnNoaWZ0KG9iaik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5wdXRzW2xlbiAtIDFdLnBvc2l0aW9uIDw9IHBvc2l0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIga2V5ID0gdGhpcy5fZmluZEtleShwb3NpdGlvbik7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMuc3BsaWNlKGtleSwgb2JqKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG59O1xyXG5cclxuQmxlbmQxRENsaXAucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAodGltZSwgZFRpbWUsIHNpbGVudCkge1xyXG5cclxuICAgIHZhciByZXQgPSBDbGlwLnByb3RvdHlwZS5zdGVwLmNhbGwodGhpcywgdGltZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcclxuICAgICAgICB0aGlzLnNldFRpbWUodGhpcy5nZXRFbGFwc2VkVGltZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXHJcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufTtcclxuXHJcbkJsZW5kMURDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIHZhciBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb247XHJcbiAgICB2YXIgaW5wdXRzID0gdGhpcy5pbnB1dHM7XHJcbiAgICB2YXIgbGVuID0gaW5wdXRzLmxlbmd0aDtcclxuICAgIHZhciBtaW4gPSBpbnB1dHNbMF0ucG9zaXRpb247XHJcbiAgICB2YXIgbWF4ID0gaW5wdXRzW2xlbi0xXS5wb3NpdGlvbjtcclxuXHJcbiAgICBpZiAocG9zaXRpb24gPD0gbWluIHx8IHBvc2l0aW9uID49IG1heCkge1xyXG4gICAgICAgIHZhciBpbjAgPSBwb3NpdGlvbiA8PSBtaW4gPyBpbnB1dHNbMF0gOiBpbnB1dHNbbGVuLTFdO1xyXG4gICAgICAgIHZhciBjbGlwID0gaW4wLmNsaXA7XHJcbiAgICAgICAgdmFyIG9mZnNldCA9IGluMC5vZmZzZXQ7XHJcbiAgICAgICAgY2xpcC5zZXRUaW1lKCh0aW1lICsgb2Zmc2V0KSAlIGNsaXAubGlmZSk7XHJcbiAgICAgICAgLy8gSW5wdXQgY2xpcCBpcyBhIGJsZW5kIGNsaXBcclxuICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgaWYgKGNsaXAub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCkge1xyXG4gICAgICAgICAgICB0aGlzLm91dHB1dC5jb3B5KGNsaXAub3V0cHV0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm91dHB1dC5jb3B5KGNsaXApO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIGtleSA9IHRoaXMuX2ZpbmRLZXkocG9zaXRpb24pO1xyXG4gICAgICAgIHZhciBpbjEgPSBpbnB1dHNba2V5XTtcclxuICAgICAgICB2YXIgaW4yID0gaW5wdXRzW2tleSArIDFdO1xyXG4gICAgICAgIHZhciBjbGlwMSA9IGluMS5jbGlwO1xyXG4gICAgICAgIHZhciBjbGlwMiA9IGluMi5jbGlwO1xyXG4gICAgICAgIC8vIFNldCB0aW1lIG9uIGlucHV0IGNsaXBzXHJcbiAgICAgICAgY2xpcDEuc2V0VGltZSgodGltZSArIGluMS5vZmZzZXQpICUgY2xpcDEubGlmZSk7XHJcbiAgICAgICAgY2xpcDIuc2V0VGltZSgodGltZSArIGluMi5vZmZzZXQpICUgY2xpcDIubGlmZSk7XHJcblxyXG4gICAgICAgIHZhciB3ID0gKHRoaXMucG9zaXRpb24gLSBpbjEucG9zaXRpb24pIC8gKGluMi5wb3NpdGlvbiAtIGluMS5wb3NpdGlvbik7XHJcblxyXG4gICAgICAgIHZhciBjMSA9IGNsaXAxLm91dHB1dCBpbnN0YW5jZW9mIENsaXAgPyBjbGlwMS5vdXRwdXQgOiBjbGlwMTtcclxuICAgICAgICB2YXIgYzIgPSBjbGlwMi5vdXRwdXQgaW5zdGFuY2VvZiBDbGlwID8gY2xpcDIub3V0cHV0IDogY2xpcDI7XHJcbiAgICAgICAgdGhpcy5vdXRwdXQuYmxlbmQxRChjMSwgYzIsIHcpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsb25lIGEgbmV3IEJsZW5kMUQgY2xpcFxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNsb25lSW5wdXRzIFRydWUgaWYgY2xvbmUgdGhlIGlucHV0IGNsaXBzXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwfVxyXG4gKi9cclxuQmxlbmQxRENsaXAucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKGNsb25lSW5wdXRzKSB7XHJcbiAgICB2YXIgY2xpcCA9IENsaXAucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICBjbGlwLm91dHB1dCA9IHRoaXMub3V0cHV0LmNsb25lKCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGlucHV0Q2xpcCA9IGNsb25lSW5wdXRzID8gdGhpcy5pbnB1dHNbaV0uY2xpcC5jbG9uZSh0cnVlKSA6IHRoaXMuaW5wdXRzW2ldLmNsaXA7XHJcbiAgICAgICAgY2xpcC5hZGRJbnB1dCh0aGlzLmlucHV0c1tpXS5wb3NpdGlvbiwgaW5wdXRDbGlwLCB0aGlzLmlucHV0c1tpXS5vZmZzZXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsaXA7XHJcbn07XHJcblxyXG4vLyBGaW5kIHRoZSBrZXkgd2hlcmUgcG9zaXRpb24gaW4gcmFuZ2UgW2lucHV0c1trZXldLnBvc2l0aW9uLCBpbnB1dHNba2V5KzFdLnBvc2l0aW9uKVxyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuX2ZpbmRLZXkgPSBmdW5jdGlvbiAocG9zaXRpb24pIHtcclxuICAgIHZhciBrZXkgPSAtMTtcclxuICAgIHZhciBpbnB1dHMgPSB0aGlzLmlucHV0cztcclxuICAgIHZhciBsZW4gPSBpbnB1dHMubGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMuX2NhY2hlUG9zaXRpb24gPCBwb3NpdGlvbikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9jYWNoZUtleTsgaSA8IGxlbi0xOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0c1tpXS5wb3NpdGlvbiAmJiBwb3NpdGlvbiA8IGlucHV0c1tpKzFdLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBrZXkgPSBpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgcyA9IE1hdGgubWluKGxlbi0yLCB0aGlzLl9jYWNoZUtleSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IHM7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSBpbnB1dHNbaV0ucG9zaXRpb24gJiYgcG9zaXRpb24gPCBpbnB1dHNbaSsxXS5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAga2V5ID0gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChrZXkgPj0gMCkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlS2V5ID0ga2V5O1xyXG4gICAgICAgIHRoaXMuX2NhY2hlUG9zaXRpb24gPSBwb3NpdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ga2V5O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmxlbmQxRENsaXA7IiwiLy8gRGVsYXVuYXkgVHJpYW5ndWxhdGlvblxyXG4vLyBNb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9pcm9ud2FsbGFieS9kZWxhdW5heVxyXG52YXIgRVBTSUxPTiA9IDEuMCAvIDEwNDg1NzYuMDtcclxuXHJcbmZ1bmN0aW9uIHN1cGVydHJpYW5nbGUodmVydGljZXMpIHtcclxuICAgIHZhciB4bWluID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xyXG4gICAgdmFyIHltaW4gPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XHJcbiAgICB2YXIgeG1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcclxuICAgIHZhciB5bWF4ID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xyXG4gICAgdmFyIGksIGR4LCBkeSwgZG1heCwgeG1pZCwgeW1pZDtcclxuXHJcbiAgICBmb3IgKGkgPSB2ZXJ0aWNlcy5sZW5ndGg7IGktLTsgKSB7XHJcbiAgICAgICAgaWYgKHZlcnRpY2VzW2ldWzBdIDwgeG1pbikgeyB4bWluID0gdmVydGljZXNbaV1bMF07IH1cclxuICAgICAgICBpZiAodmVydGljZXNbaV1bMF0gPiB4bWF4KSB7IHhtYXggPSB2ZXJ0aWNlc1tpXVswXTsgfVxyXG4gICAgICAgIGlmICh2ZXJ0aWNlc1tpXVsxXSA8IHltaW4pIHsgeW1pbiA9IHZlcnRpY2VzW2ldWzFdOyB9XHJcbiAgICAgICAgaWYgKHZlcnRpY2VzW2ldWzFdID4geW1heCkgeyB5bWF4ID0gdmVydGljZXNbaV1bMV07IH1cclxuICAgIH1cclxuXHJcbiAgICBkeCA9IHhtYXggLSB4bWluO1xyXG4gICAgZHkgPSB5bWF4IC0geW1pbjtcclxuICAgIGRtYXggPSBNYXRoLm1heChkeCwgZHkpO1xyXG4gICAgeG1pZCA9IHhtaW4gKyBkeCAqIDAuNTtcclxuICAgIHltaWQgPSB5bWluICsgZHkgKiAwLjU7XHJcblxyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICBbeG1pZCAtIDIwICogZG1heCwgeW1pZCAtICAgICAgZG1heF0sXHJcbiAgICAgICAgW3htaWQgICAgICAgICAgICAsIHltaWQgKyAyMCAqIGRtYXhdLFxyXG4gICAgICAgIFt4bWlkICsgMjAgKiBkbWF4LCB5bWlkIC0gICAgICBkbWF4XVxyXG4gICAgXTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2lyY3VtY2lyY2xlKHZlcnRpY2VzLCBpLCBqLCBrKSB7XHJcbiAgICB2YXIgeDEgPSB2ZXJ0aWNlc1tpXVswXSxcclxuICAgICAgICAgICAgeTEgPSB2ZXJ0aWNlc1tpXVsxXSxcclxuICAgICAgICAgICAgeDIgPSB2ZXJ0aWNlc1tqXVswXSxcclxuICAgICAgICAgICAgeTIgPSB2ZXJ0aWNlc1tqXVsxXSxcclxuICAgICAgICAgICAgeDMgPSB2ZXJ0aWNlc1trXVswXSxcclxuICAgICAgICAgICAgeTMgPSB2ZXJ0aWNlc1trXVsxXSxcclxuICAgICAgICAgICAgZmFic3kxeTIgPSBNYXRoLmFicyh5MSAtIHkyKSxcclxuICAgICAgICAgICAgZmFic3kyeTMgPSBNYXRoLmFicyh5MiAtIHkzKSxcclxuICAgICAgICAgICAgeGMsIHljLCBtMSwgbTIsIG14MSwgbXgyLCBteTEsIG15MiwgZHgsIGR5O1xyXG5cclxuICAgIC8qIENoZWNrIGZvciBjb2luY2lkZW50IHBvaW50cyAqL1xyXG4gICAgaWYgKGZhYnN5MXkyIDwgRVBTSUxPTiAmJiBmYWJzeTJ5MyA8IEVQU0lMT04pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VlayEgQ29pbmNpZGVudCBwb2ludHMhJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZhYnN5MXkyIDwgRVBTSUxPTikge1xyXG4gICAgICAgIG0yICA9IC0oKHgzIC0geDIpIC8gKHkzIC0geTIpKTtcclxuICAgICAgICBteDIgPSAoeDIgKyB4MykgLyAyLjA7XHJcbiAgICAgICAgbXkyID0gKHkyICsgeTMpIC8gMi4wO1xyXG4gICAgICAgIHhjICA9ICh4MiArIHgxKSAvIDIuMDtcclxuICAgICAgICB5YyAgPSBtMiAqICh4YyAtIG14MikgKyBteTI7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoZmFic3kyeTMgPCBFUFNJTE9OKSB7XHJcbiAgICAgICAgbTEgID0gLSgoeDIgLSB4MSkgLyAoeTIgLSB5MSkpO1xyXG4gICAgICAgIG14MSA9ICh4MSArIHgyKSAvIDIuMDtcclxuICAgICAgICBteTEgPSAoeTEgKyB5MikgLyAyLjA7XHJcbiAgICAgICAgeGMgID0gKHgzICsgeDIpIC8gMi4wO1xyXG4gICAgICAgIHljICA9IG0xICogKHhjIC0gbXgxKSArIG15MTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBtMSAgPSAtKCh4MiAtIHgxKSAvICh5MiAtIHkxKSk7XHJcbiAgICAgICAgbTIgID0gLSgoeDMgLSB4MikgLyAoeTMgLSB5MikpO1xyXG4gICAgICAgIG14MSA9ICh4MSArIHgyKSAvIDIuMDtcclxuICAgICAgICBteDIgPSAoeDIgKyB4MykgLyAyLjA7XHJcbiAgICAgICAgbXkxID0gKHkxICsgeTIpIC8gMi4wO1xyXG4gICAgICAgIG15MiA9ICh5MiArIHkzKSAvIDIuMDtcclxuICAgICAgICB4YyAgPSAobTEgKiBteDEgLSBtMiAqIG14MiArIG15MiAtIG15MSkgLyAobTEgLSBtMik7XHJcbiAgICAgICAgeWMgID0gKGZhYnN5MXkyID4gZmFic3kyeTMpID9cclxuICAgICAgICAgICAgbTEgKiAoeGMgLSBteDEpICsgbXkxIDpcclxuICAgICAgICAgICAgbTIgKiAoeGMgLSBteDIpICsgbXkyO1xyXG4gICAgfVxyXG5cclxuICAgIGR4ID0geDIgLSB4YztcclxuICAgIGR5ID0geTIgLSB5YztcclxuICAgIHJldHVybiB7aTogaSwgajogaiwgazogaywgeDogeGMsIHk6IHljLCByOiBkeCAqIGR4ICsgZHkgKiBkeX07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZHVwKGVkZ2VzKSB7XHJcbiAgICB2YXIgaSwgaiwgYSwgYiwgbSwgbjtcclxuXHJcbiAgICBmb3IgKGogPSBlZGdlcy5sZW5ndGg7IGo7ICkge1xyXG4gICAgICAgIGIgPSBlZGdlc1stLWpdO1xyXG4gICAgICAgIGEgPSBlZGdlc1stLWpdO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSBqOyBpOyApIHtcclxuICAgICAgICAgICAgbiA9IGVkZ2VzWy0taV07XHJcbiAgICAgICAgICAgIG0gPSBlZGdlc1stLWldO1xyXG5cclxuICAgICAgICAgICAgaWYgKChhID09PSBtICYmIGIgPT09IG4pIHx8IChhID09PSBuICYmIGIgPT09IG0pKSB7XHJcbiAgICAgICAgICAgICAgICBlZGdlcy5zcGxpY2UoaiwgMik7XHJcbiAgICAgICAgICAgICAgICBlZGdlcy5zcGxpY2UoaSwgMik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxudmFyIGRlbGF1bmF5ID0ge1xyXG4gICAgdHJpYW5ndWxhdGU6IGZ1bmN0aW9uKHZlcnRpY2VzLCBrZXkpIHtcclxuICAgICAgICB2YXIgbiA9IHZlcnRpY2VzLmxlbmd0aDtcclxuICAgICAgICB2YXIgaSwgaiwgaW5kaWNlcywgc3QsIG9wZW4sIGNsb3NlZCwgZWRnZXMsIGR4LCBkeSwgYSwgYiwgYztcclxuXHJcbiAgICAgICAgLyogQmFpbCBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIHZlcnRpY2VzIHRvIGZvcm0gYW55IHRyaWFuZ2xlcy4gKi9cclxuICAgICAgICBpZiAobiA8IDMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogU2xpY2Ugb3V0IHRoZSBhY3R1YWwgdmVydGljZXMgZnJvbSB0aGUgcGFzc2VkIG9iamVjdHMuIChEdXBsaWNhdGUgdGhlXHJcbiAgICAgICAgICAgICogYXJyYXkgZXZlbiBpZiB3ZSBkb24ndCwgdGhvdWdoLCBzaW5jZSB3ZSBuZWVkIHRvIG1ha2UgYSBzdXBlcnRyaWFuZ2xlXHJcbiAgICAgICAgICAgICogbGF0ZXIgb24hKSAqL1xyXG4gICAgICAgIHZlcnRpY2VzID0gdmVydGljZXMuc2xpY2UoMCk7XHJcblxyXG4gICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgICAgZm9yIChpID0gbjsgaS0tOyApIHtcclxuICAgICAgICAgICAgICAgIHZlcnRpY2VzW2ldID0gdmVydGljZXNbaV1ba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogTWFrZSBhbiBhcnJheSBvZiBpbmRpY2VzIGludG8gdGhlIHZlcnRleCBhcnJheSwgc29ydGVkIGJ5IHRoZVxyXG4gICAgICAgICAgICAqIHZlcnRpY2VzJyB4LXBvc2l0aW9uLiBGb3JjZSBzdGFibGUgc29ydGluZyBieSBjb21wYXJpbmcgaW5kaWNlcyBpZlxyXG4gICAgICAgICAgICAqIHRoZSB4LXBvc2l0aW9ucyBhcmUgZXF1YWwuICovXHJcbiAgICAgICAgaW5kaWNlcyA9IG5ldyBBcnJheShuKTtcclxuXHJcbiAgICAgICAgZm9yIChpID0gbjsgaS0tOyApIHtcclxuICAgICAgICAgICAgaW5kaWNlc1tpXSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpbmRpY2VzLnNvcnQoZnVuY3Rpb24oaSwgaikge1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IHZlcnRpY2VzW2pdWzBdIC0gdmVydGljZXNbaV1bMF07XHJcbiAgICAgICAgICAgIHJldHVybiBkaWZmICE9PSAwID8gZGlmZiA6IGkgLSBqO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvKiBOZXh0LCBmaW5kIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgc3VwZXJ0cmlhbmdsZSAod2hpY2ggY29udGFpbnMgYWxsIG90aGVyXHJcbiAgICAgICAgICAgICogdHJpYW5nbGVzKSwgYW5kIGFwcGVuZCB0aGVtIG9udG8gdGhlIGVuZCBvZiBhIChjb3B5IG9mKSB0aGUgdmVydGV4XHJcbiAgICAgICAgICAgICogYXJyYXkuICovXHJcbiAgICAgICAgc3QgPSBzdXBlcnRyaWFuZ2xlKHZlcnRpY2VzKTtcclxuICAgICAgICB2ZXJ0aWNlcy5wdXNoKHN0WzBdLCBzdFsxXSwgc3RbMl0pO1xyXG5cclxuICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBvcGVuIGxpc3QgKGNvbnRhaW5pbmcgdGhlIHN1cGVydHJpYW5nbGUgYW5kIG5vdGhpbmdcclxuICAgICAgICAgICAgKiBlbHNlKSBhbmQgdGhlIGNsb3NlZCBsaXN0ICh3aGljaCBpcyBlbXB0eSBzaW5jZSB3ZSBoYXZuJ3QgcHJvY2Vzc2VkXHJcbiAgICAgICAgICAgICogYW55IHRyaWFuZ2xlcyB5ZXQpLiAqL1xyXG4gICAgICAgIG9wZW4gICA9IFtjaXJjdW1jaXJjbGUodmVydGljZXMsIG4gKyAwLCBuICsgMSwgbiArIDIpXTtcclxuICAgICAgICBjbG9zZWQgPSBbXTtcclxuICAgICAgICBlZGdlcyAgPSBbXTtcclxuXHJcbiAgICAgICAgLyogSW5jcmVtZW50YWxseSBhZGQgZWFjaCB2ZXJ0ZXggdG8gdGhlIG1lc2guICovXHJcbiAgICAgICAgZm9yIChpID0gaW5kaWNlcy5sZW5ndGg7IGktLTsgZWRnZXMubGVuZ3RoID0gMCkge1xyXG4gICAgICAgICAgICBjID0gaW5kaWNlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8qIEZvciBlYWNoIG9wZW4gdHJpYW5nbGUsIGNoZWNrIHRvIHNlZSBpZiB0aGUgY3VycmVudCBwb2ludCBpc1xyXG4gICAgICAgICAgICAgICAgKiBpbnNpZGUgaXQncyBjaXJjdW1jaXJjbGUuIElmIGl0IGlzLCByZW1vdmUgdGhlIHRyaWFuZ2xlIGFuZCBhZGRcclxuICAgICAgICAgICAgICAgICogaXQncyBlZGdlcyB0byBhbiBlZGdlIGxpc3QuICovXHJcbiAgICAgICAgICAgIGZvciAoaiA9IG9wZW4ubGVuZ3RoOyBqLS07ICkge1xyXG4gICAgICAgICAgICAgICAgLyogSWYgdGhpcyBwb2ludCBpcyB0byB0aGUgcmlnaHQgb2YgdGhpcyB0cmlhbmdsZSdzIGNpcmN1bWNpcmNsZSxcclxuICAgICAgICAgICAgICAgICAgICAqIHRoZW4gdGhpcyB0cmlhbmdsZSBzaG91bGQgbmV2ZXIgZ2V0IGNoZWNrZWQgYWdhaW4uIFJlbW92ZSBpdFxyXG4gICAgICAgICAgICAgICAgICAgICogZnJvbSB0aGUgb3BlbiBsaXN0LCBhZGQgaXQgdG8gdGhlIGNsb3NlZCBsaXN0LCBhbmQgc2tpcC4gKi9cclxuICAgICAgICAgICAgICAgIGR4ID0gdmVydGljZXNbY11bMF0gLSBvcGVuW2pdLng7XHJcbiAgICAgICAgICAgICAgICBpZiAoZHggPiAwLjAgJiYgZHggKiBkeCA+IG9wZW5bal0ucikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlZC5wdXNoKG9wZW5bal0pO1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZW4uc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8qIElmIHdlJ3JlIG91dHNpZGUgdGhlIGNpcmN1bWNpcmNsZSwgc2tpcCB0aGlzIHRyaWFuZ2xlLiAqL1xyXG4gICAgICAgICAgICAgICAgZHkgPSB2ZXJ0aWNlc1tjXVsxXSAtIG9wZW5bal0ueTtcclxuICAgICAgICAgICAgICAgIGlmIChkeCAqIGR4ICsgZHkgKiBkeSAtIG9wZW5bal0uciA+IEVQU0lMT04pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvKiBSZW1vdmUgdGhlIHRyaWFuZ2xlIGFuZCBhZGQgaXQncyBlZGdlcyB0byB0aGUgZWRnZSBsaXN0LiAqL1xyXG4gICAgICAgICAgICAgICAgZWRnZXMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmksIG9wZW5bal0uaixcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmosIG9wZW5bal0uayxcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmssIG9wZW5bal0uaVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIG9wZW4uc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKiBSZW1vdmUgYW55IGRvdWJsZWQgZWRnZXMuICovXHJcbiAgICAgICAgICAgIGRlZHVwKGVkZ2VzKTtcclxuXHJcbiAgICAgICAgICAgIC8qIEFkZCBhIG5ldyB0cmlhbmdsZSBmb3IgZWFjaCBlZGdlLiAqL1xyXG4gICAgICAgICAgICBmb3IgKGogPSBlZGdlcy5sZW5ndGg7IGo7ICkge1xyXG4gICAgICAgICAgICAgICAgYiA9IGVkZ2VzWy0tal07XHJcbiAgICAgICAgICAgICAgICBhID0gZWRnZXNbLS1qXTtcclxuICAgICAgICAgICAgICAgIG9wZW4ucHVzaChjaXJjdW1jaXJjbGUodmVydGljZXMsIGEsIGIsIGMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogQ29weSBhbnkgcmVtYWluaW5nIG9wZW4gdHJpYW5nbGVzIHRvIHRoZSBjbG9zZWQgbGlzdCwgYW5kIHRoZW5cclxuICAgICAgICAgICAgKiByZW1vdmUgYW55IHRyaWFuZ2xlcyB0aGF0IHNoYXJlIGEgdmVydGV4IHdpdGggdGhlIHN1cGVydHJpYW5nbGUsXHJcbiAgICAgICAgICAgICogYnVpbGRpbmcgYSBsaXN0IG9mIHRyaXBsZXRzIHRoYXQgcmVwcmVzZW50IHRyaWFuZ2xlcy4gKi9cclxuICAgICAgICBmb3IgKGkgPSBvcGVuLmxlbmd0aDsgaS0tOyApIHtcclxuICAgICAgICAgICAgY2xvc2VkLnB1c2gob3BlbltpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wZW4ubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChpID0gY2xvc2VkLmxlbmd0aDsgaS0tOyApIHtcclxuICAgICAgICAgICAgaWYgKGNsb3NlZFtpXS5pIDwgbiAmJiBjbG9zZWRbaV0uaiA8IG4gJiYgY2xvc2VkW2ldLmsgPCBuKSB7XHJcbiAgICAgICAgICAgICAgICBvcGVuLnB1c2goY2xvc2VkW2ldLmksIGNsb3NlZFtpXS5qLCBjbG9zZWRbaV0uayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIFlheSwgd2UncmUgZG9uZSEgKi9cclxuICAgICAgICByZXR1cm4gb3BlbjtcclxuICAgIH0sXHJcbiAgICBjb250YWluczogZnVuY3Rpb24odHJpLCBwKSB7XHJcbiAgICAgICAgLyogQm91bmRpbmcgYm94IHRlc3QgZmlyc3QsIGZvciBxdWljayByZWplY3Rpb25zLiAqL1xyXG4gICAgICAgIGlmICgocFswXSA8IHRyaVswXVswXSAmJiBwWzBdIDwgdHJpWzFdWzBdICYmIHBbMF0gPCB0cmlbMl1bMF0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFswXSA+IHRyaVswXVswXSAmJiBwWzBdID4gdHJpWzFdWzBdICYmIHBbMF0gPiB0cmlbMl1bMF0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFsxXSA8IHRyaVswXVsxXSAmJiBwWzFdIDwgdHJpWzFdWzFdICYmIHBbMV0gPCB0cmlbMl1bMV0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFsxXSA+IHRyaVswXVsxXSAmJiBwWzFdID4gdHJpWzFdWzFdICYmIHBbMV0gPiB0cmlbMl1bMV0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGEgPSB0cmlbMV1bMF0gLSB0cmlbMF1bMF07XHJcbiAgICAgICAgdmFyIGIgPSB0cmlbMl1bMF0gLSB0cmlbMF1bMF07XHJcbiAgICAgICAgdmFyIGMgPSB0cmlbMV1bMV0gLSB0cmlbMF1bMV07XHJcbiAgICAgICAgdmFyIGQgPSB0cmlbMl1bMV0gLSB0cmlbMF1bMV07XHJcbiAgICAgICAgdmFyIGkgPSBhICogZCAtIGIgKiBjO1xyXG5cclxuICAgICAgICAvKiBEZWdlbmVyYXRlIHRyaS4gKi9cclxuICAgICAgICBpZiAoaSA9PT0gMC4wKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHUgPSAoZCAqIChwWzBdIC0gdHJpWzBdWzBdKSAtIGIgKiAocFsxXSAtIHRyaVswXVsxXSkpIC8gaSxcclxuICAgICAgICAgICAgICAgIHYgPSAoYSAqIChwWzFdIC0gdHJpWzBdWzFdKSAtIGMgKiAocFswXSAtIHRyaVswXVswXSkpIC8gaTtcclxuXHJcbiAgICAgICAgLyogSWYgd2UncmUgb3V0c2lkZSB0aGUgdHJpLCBmYWlsLiAqL1xyXG4gICAgICAgIGlmICh1IDwgMC4wIHx8IHYgPCAwLjAgfHwgKHUgKyB2KSA+IDEuMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBbdSwgdl07XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBkZWxhdW5heTtcclxuIiwiXHJcbmV4cG9ydCB2YXIgR0xNQVRfRVBTSUxPTiA9IDAuMDAwMDAxO1xyXG5cclxuLy8gVXNlIEFycmF5IGluc3RlYWQgb2YgRmxvYXQzMkFycmF5LiBJdCBzZWVtcyB0byBiZSBtdWNoIGZhc3RlciBhbmQgaGlnaGVyIHByZWNpc2lvbi5cclxuZXhwb3J0IHZhciBHTE1BVF9BUlJBWV9UWVBFID0gQXJyYXk7XHJcbi8vIGlmKCFHTE1BVF9BUlJBWV9UWVBFKSB7XHJcbi8vICAgICBHTE1BVF9BUlJBWV9UWVBFID0gKHR5cGVvZiBGbG9hdDMyQXJyYXkgIT09ICd1bmRlZmluZWQnKSA/IEZsb2F0MzJBcnJheSA6IEFycmF5O1xyXG4vLyB9XHJcblxyXG5leHBvcnQgdmFyIEdMTUFUX1JBTkRPTSA9IE1hdGgucmFuZG9tO1xyXG4iLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgMiBEaW1lbnNpb25hbCBWZWN0b3JcclxuICogQG5hbWUgdmVjMlxyXG4gKi9cclxuXHJcbnZhciB2ZWMyID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjMlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjMn0gYSBuZXcgMkQgdmVjdG9yXHJcbiAqL1xyXG52ZWMyLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDIpO1xyXG4gICAgb3V0WzBdID0gMDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMiBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBhIG5ldyAyRCB2ZWN0b3JcclxuICovXHJcbnZlYzIuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMik7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMyIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gYSBuZXcgMkQgdmVjdG9yXHJcbiAqL1xyXG52ZWMyLmZyb21WYWx1ZXMgPSBmdW5jdGlvbih4LCB5KSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMik7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzIgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMiB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5KSB7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTdWJ0cmFjdHMgdmVjdG9yIGIgZnJvbSB2ZWN0b3IgYVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnN1YnRyYWN0ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMi5zdWIgPSB2ZWMyLnN1YnRyYWN0O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm11bHRpcGx5ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMi5tdWwgPSB2ZWMyLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLmRpdmlkZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAvIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpdmlkZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLmRpdiA9IHZlYzIuZGl2aWRlO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1pbmltdW0gb2YgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gTWF0aC5taW4oYVswXSwgYlswXSk7XHJcbiAgICBvdXRbMV0gPSBNYXRoLm1pbihhWzFdLCBiWzFdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMyIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYjtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWMyJ3MgYWZ0ZXIgc2NhbGluZyB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWVcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYiBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgKGJbMF0gKiBzY2FsZSk7XHJcbiAgICBvdXRbMV0gPSBhWzFdICsgKGJbMV0gKiBzY2FsZSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMyLmRpc3RhbmNlID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgdmFyIHggPSBiWzBdIC0gYVswXSxcclxuICAgICAgICB5ID0gYlsxXSAtIGFbMV07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuZGlzdCA9IHZlYzIuZGlzdGFuY2U7XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMyLnNxdWFyZWREaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXHJcbiAgICAgICAgeSA9IGJbMV0gLSBhWzFdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuc3FyRGlzdCA9IHZlYzIuc3F1YXJlZERpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWMyLmxlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLmxlbiA9IHZlYzIubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWMyLnNxdWFyZWRMZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLnNxckxlbiA9IHZlYzIuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gLWFbMF07XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5pbnZlcnNlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcclxuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xyXG4gIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogTm9ybWFsaXplIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgdmFyIGxlbiA9IHgqeCArIHkqeTtcclxuICAgIGlmIChsZW4gPiAwKSB7XHJcbiAgICAgICAgLy9UT0RPOiBldmFsdWF0ZSB1c2Ugb2YgZ2xtX2ludnNxcnQgaGVyZT9cclxuICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgICAgb3V0WzBdID0gYVswXSAqIGxlbjtcclxuICAgICAgICBvdXRbMV0gPSBhWzFdICogbGVuO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXHJcbnZlYzIuZG90ID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbXB1dGVzIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHR3byB2ZWMyJ3NcclxuICogTm90ZSB0aGF0IHRoZSBjcm9zcyBwcm9kdWN0IG11c3QgYnkgZGVmaW5pdGlvbiBwcm9kdWNlIGEgM0QgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzIuY3Jvc3MgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZhciB6ID0gYVswXSAqIGJbMV0gLSBhWzFdICogYlswXTtcclxuICAgIG91dFswXSA9IG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSB6O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIubGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcclxuICAgIHZhciBheCA9IGFbMF0sXHJcbiAgICAgICAgYXkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XHJcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHZlY3RvciB3aXRoIHRoZSBnaXZlbiBzY2FsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3NjYWxlXSBMZW5ndGggb2YgdGhlIHJlc3VsdGluZyB2ZWN0b3IuIElmIG9tbWl0dGVkLCBhIHVuaXQgdmVjdG9yIHdpbGwgYmUgcmV0dXJuZWRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5yYW5kb20gPSBmdW5jdGlvbiAob3V0LCBzY2FsZSkge1xyXG4gICAgc2NhbGUgPSBzY2FsZSB8fCAxLjA7XHJcbiAgICB2YXIgciA9IEdMTUFUX1JBTkRPTSgpICogMi4wICogTWF0aC5QSTtcclxuICAgIG91dFswXSA9IE1hdGguY29zKHIpICogc2NhbGU7XHJcbiAgICBvdXRbMV0gPSBNYXRoLnNpbihyKSAqIHNjYWxlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDJ9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIudHJhbnNmb3JtTWF0MiA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzJdICogeTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDJkfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnRyYW5zZm9ybU1hdDJkID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV07XHJcbiAgICBvdXRbMF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHkgKyBtWzVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQzXHJcbiAqIDNyZCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDN9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIudHJhbnNmb3JtTWF0MyA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzNdICogeSArIG1bNl07XHJcbiAgICBvdXRbMV0gPSBtWzFdICogeCArIG1bNF0gKiB5ICsgbVs3XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMiB3aXRoIGEgbWF0NFxyXG4gKiAzcmQgdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcwJ1xyXG4gKiA0dGggdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQ0fSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnRyYW5zZm9ybU1hdDQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZhciB4ID0gYVswXSxcclxuICAgICAgICB5ID0gYVsxXTtcclxuICAgIG91dFswXSA9IG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzEyXTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzEzXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybSBzb21lIG9wZXJhdGlvbiBvdmVyIGFuIGFycmF5IG9mIHZlYzJzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3ZlclxyXG4gKiBAcGFyYW0ge051bWJlcn0gc3RyaWRlIE51bWJlciBvZiBlbGVtZW50cyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHZlYzIuIElmIDAgYXNzdW1lcyB0aWdodGx5IHBhY2tlZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IE51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjMnMgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggdmVjdG9yIGluIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW2FyZ10gYWRkaXRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGZuXHJcbiAqIEByZXR1cm5zIHtBcnJheX0gYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuZm9yRWFjaCA9IChmdW5jdGlvbigpIHtcclxuICAgIHZhciB2ZWMgPSB2ZWMyLmNyZWF0ZSgpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbihhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcclxuICAgICAgICB2YXIgaSwgbDtcclxuICAgICAgICBpZighc3RyaWRlKSB7XHJcbiAgICAgICAgICAgIHN0cmlkZSA9IDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZighb2Zmc2V0KSB7XHJcbiAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjb3VudCkge1xyXG4gICAgICAgICAgICBsID0gTWF0aC5taW4oKGNvdW50ICogc3RyaWRlKSArIG9mZnNldCwgYS5sZW5ndGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGwgPSBhLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihpID0gb2Zmc2V0OyBpIDwgbDsgaSArPSBzdHJpZGUpIHtcclxuICAgICAgICAgICAgdmVjWzBdID0gYVtpXTsgdmVjWzFdID0gYVtpKzFdO1xyXG4gICAgICAgICAgICBmbih2ZWMsIHZlYywgYXJnKTtcclxuICAgICAgICAgICAgYVtpXSA9IHZlY1swXTsgYVtpKzFdID0gdmVjWzFdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjMjsiLCJpbXBvcnQgdmVjMiBmcm9tICcuLi9nbG1hdHJpeC92ZWMyJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuVmVjdG9yMlxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKi9cclxudmFyIFZlY3RvcjIgPSBmdW5jdGlvbih4LCB5KSB7XHJcblxyXG4gICAgeCA9IHggfHwgMDtcclxuICAgIHkgPSB5IHx8IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIFZlY3RvcjIsIHJlYWQgYW5kIHdyaXRlIG9mIHgsIHkgd2lsbCBjaGFuZ2UgdGhlIHZhbHVlcyBpbiBhcnJheVxyXG4gICAgICogQWxsIG1ldGhvZHMgYWxzbyBvcGVyYXRlIG9uIHRoZSBhcnJheSBpbnN0ZWFkIG9mIHgsIHkgY29tcG9uZW50c1xyXG4gICAgICogQG5hbWUgYXJyYXlcclxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IyI1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFycmF5ID0gdmVjMi5mcm9tVmFsdWVzKHgsIHkpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlydHkgZmxhZyBpcyB1c2VkIGJ5IHRoZSBOb2RlIHRvIGRldGVybWluZVxyXG4gICAgICogaWYgdGhlIG1hdHJpeCBpcyB1cGRhdGVkIHRvIGxhdGVzdFxyXG4gICAgICogQG5hbWUgX2RpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjIjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcblZlY3RvcjIucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBWZWN0b3IyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGIgdG8gc2VsZlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCBhbmQgeSBjb21wb25lbnRzXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24oeCwgeSkge1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSB4O1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSB5O1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCBhbmQgeSBjb21wb25lbnRzIGZyb20gYXJyYXlcclxuICAgICAqIEBwYXJhbSAge0Zsb2F0MzJBcnJheXxudW1iZXJbXX0gYXJyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNldEFycmF5OiBmdW5jdGlvbihhcnIpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0gYXJyWzBdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSBhcnJbMV07XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBWZWN0b3IyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIodGhpcy54LCB0aGlzLnkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgeCwgeSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcm9zcyBwcm9kdWN0IG9mIHNlbGYgYW5kIGIsIHdyaXR0ZW4gdG8gYSBWZWN0b3IzIG91dFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBjcm9zczogZnVuY3Rpb24ob3V0LCBiKSB7XHJcbiAgICAgICAgdmVjMi5jcm9zcyhvdXQuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBkaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5kaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuZGlzdGFuY2UodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIGRpdmlkZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGRpdjogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuZGl2KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXZpZGUgc2VsZiBieSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgZGl2aWRlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5kaXZpZGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5kb3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2YgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIubGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIubGVuZ3RoKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIExpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbGVycDogZnVuY3Rpb24oYSwgYiwgdCkge1xyXG4gICAgICAgIHZlYzIubGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWluaW11bSBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbWluOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5taW4odGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1heGltdW0gb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIG1heDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIubWF4KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBtdWw6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXV0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOZWdhdGUgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBuZWdhdGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZlYzIubmVnYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWxpemUgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZlYzIubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSByYW5kb20geCwgeSBjb21wb25lbnRzIHdpdGggYSBnaXZlbiBzY2FsZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICByYW5kb206IGZ1bmN0aW9uKHNjYWxlKSB7XHJcbiAgICAgICAgdmVjMi5yYW5kb20odGhpcy5hcnJheSwgc2NhbGUpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24ocykge1xyXG4gICAgICAgIHZlYzIuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIGIgYW5kIGFkZCB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlQW5kQWRkOiBmdW5jdGlvbihiLCBzKSB7XHJcbiAgICAgICAgdmVjMi5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5zcXJEaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZERpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3F1YXJlZERpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkTGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3FyTGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3F1YXJlZExlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3Igc3VidHJhY3RcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzdWI6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLnN1Yih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgYiBmcm9tIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzdWJ0cmFjdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuc3VidHJhY3QodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgyIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQyOiBmdW5jdGlvbihtKSB7XHJcbiAgICAgICAgdmVjMi50cmFuc2Zvcm1NYXQyKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4MmQgbVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQyZDogZnVuY3Rpb24obSkge1xyXG4gICAgICAgIHZlYzIudHJhbnNmb3JtTWF0MmQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgbS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgzIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQzOiBmdW5jdGlvbihtKSB7XHJcbiAgICAgICAgdmVjMi50cmFuc2Zvcm1NYXQzKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4NCBtXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtTWF0NDogZnVuY3Rpb24obSkge1xyXG4gICAgICAgIHZlYzIudHJhbnNmb3JtTWF0NCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLy8gR2V0dGVyIGFuZCBTZXR0ZXJcclxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xyXG5cclxuICAgIHZhciBwcm90byA9IFZlY3RvcjIucHJvdG90eXBlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yMlxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzBdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVswXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yMlxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8vIFN1cHBseSBtZXRob2RzIHRoYXQgYXJlIG5vdCBpbiBwbGFjZVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5hZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5KSB7XHJcbiAgICB2ZWMyLnNldChvdXQuYXJyYXksIHgsIHkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGIpIHtcclxuICAgIHZlYzIuY29weShvdXQuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5jcm9zcyA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMi5jcm9zcyhvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLmRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5kaXN0YW5jZShhLmFycmF5LCBiLmFycmF5KTtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIuZGlzdGFuY2UgPSBWZWN0b3IyLmRpc3Q7XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuZGl2ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMyLmRpdmlkZShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5kaXZpZGUgPSBWZWN0b3IyLmRpdjtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMi5kb3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5kb3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIubGVuID0gZnVuY3Rpb24oYikge1xyXG4gICAgcmV0dXJuIHZlYzIubGVuZ3RoKGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLy8gVmVjdG9yMi5sZW5ndGggPSBWZWN0b3IyLmxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5sZXJwID0gZnVuY3Rpb24ob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2ZWMyLmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5taW4gPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIubWluKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMi5tYXgob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIubXVsdGlwbHkob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIubXVsdGlwbHkgPSBWZWN0b3IyLm11bDtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMi5uZWdhdGUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMi5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIucmFuZG9tID0gZnVuY3Rpb24ob3V0LCBzY2FsZSkge1xyXG4gICAgdmVjMi5yYW5kb20ob3V0LmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgc2NhbGUpIHtcclxuICAgIHZlYzIuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICB2ZWMyLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLnNxckRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5zcXJEaXN0KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMi5zcXVhcmVkRGlzdGFuY2UgPSBWZWN0b3IyLnNxckRpc3Q7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIuc3FyTGVuID0gZnVuY3Rpb24oYSkge1xyXG4gICAgcmV0dXJuIHZlYzIuc3FyTGVuKGEuYXJyYXkpO1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLnNxdWFyZWRMZW5ndGggPSBWZWN0b3IyLnNxckxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc3ViID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMyLnN1YnRyYWN0KG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLnN1YnRyYWN0ID0gVmVjdG9yMi5zdWI7XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MiA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQyKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9ICBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MmQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZlYzIudHJhbnNmb3JtTWF0MmQob3V0LmFycmF5LCBhLmFycmF5LCBtLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtNYXRyaXgzfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MyA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQzKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQ0KG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBWZWN0b3IyO1xyXG4iLCIvLyAyRCBCbGVuZCBjbGlwIG9mIGJsZW5kIHRyZWVcclxuLy8gaHR0cDovL2RvY3MudW5pdHkzZC5jb20vRG9jdW1lbnRhdGlvbi9NYW51YWwvMkRCbGVuZGluZy5odG1sXHJcbmltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcbmltcG9ydCBkZWxhdW5heSBmcm9tICcuLi91dGlsL2RlbGF1bmF5JztcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi4vbWF0aC9WZWN0b3IyJztcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmFuaW1hdGlvbi5CbGVuZDJEQ2xpcC5JQ2xpcElucHV0XHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5WZWN0b3IyfSBwb3NpdGlvblxyXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiAyZCBibGVuZGluZyBub2RlIGluIGFuaW1hdGlvbiBibGVuZCB0cmVlLlxyXG4gKiBvdXRwdXQgY2xpcCBtdXN0IGhhdmUgYmxlbmQyRCBtZXRob2RcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5CbGVuZDJEQ2xpcFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGlvXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cclxuICogQHBhcmFtIHtvYmplY3RbXX0gW29wdHMuaW5wdXRzXVxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yMn0gW29wdHMucG9zaXRpb25dXHJcbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gW29wdHMub3V0cHV0XVxyXG4gKi9cclxudmFyIEJsZW5kMkRDbGlwID0gZnVuY3Rpb24gKG9wdHMpIHtcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XHJcbiAgICAvKipcclxuICAgICAqIE91dHB1dCBjbGlwIG11c3QgaGF2ZSBibGVuZDJEIG1ldGhvZFxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkNsaXB9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3V0cHV0ID0gb3B0cy5vdXRwdXQgfHwgbnVsbDtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkJsZW5kMkRDbGlwLklDbGlwSW5wdXRbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5pbnB1dHMgPSBvcHRzLmlucHV0cyB8fCBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVUcmlhbmdsZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5fdHJpYW5nbGVzID0gW107XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlVHJpYW5nbGVzKCk7XHJcbn07XHJcblxyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUgPSBuZXcgQ2xpcCgpO1xyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZDJEQ2xpcDtcclxuLyoqXHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IyfSBwb3NpdGlvblxyXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGlucHV0Q2xpcFxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldF1cclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQmxlbmQyRENsaXAuSUNsaXBJbnB1dH1cclxuICovXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5hZGRJbnB1dCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgaW5wdXRDbGlwLCBvZmZzZXQpIHtcclxuICAgIHZhciBvYmogPSB7XHJcbiAgICAgICAgcG9zaXRpb24gOiBwb3NpdGlvbixcclxuICAgICAgICBjbGlwIDogaW5wdXRDbGlwLFxyXG4gICAgICAgIG9mZnNldCA6IG9mZnNldCB8fCAwXHJcbiAgICB9O1xyXG4gICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgdGhpcy5saWZlID0gTWF0aC5tYXgoaW5wdXRDbGlwLmxpZmUsIHRoaXMubGlmZSk7XHJcbiAgICAvLyBUT0RPIENoYW5nZSB0byBpbmNyZW1lbnRhbGx5IGFkZGluZ1xyXG4gICAgdGhpcy5fdXBkYXRlVHJpYW5nbGVzKCk7XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxufTtcclxuXHJcbi8vIERlbGF1bmF5IHRyaWFuZ3VsYXRlXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5fdXBkYXRlVHJpYW5nbGVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGlucHV0cyA9IHRoaXMuaW5wdXRzLm1hcChmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIHJldHVybiBhLnBvc2l0aW9uO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl90cmlhbmdsZXMgPSBkZWxhdW5heS50cmlhbmd1bGF0ZShpbnB1dHMsICdhcnJheScpO1xyXG59O1xyXG5cclxuQmxlbmQyRENsaXAucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAodGltZSwgZFRpbWUsIHNpbGVudCkge1xyXG5cclxuICAgIHZhciByZXQgPSBDbGlwLnByb3RvdHlwZS5zdGVwLmNhbGwodGhpcywgdGltZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcclxuICAgICAgICB0aGlzLnNldFRpbWUodGhpcy5nZXRFbGFwc2VkVGltZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXHJcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufTtcclxuXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIHZhciByZXMgPSB0aGlzLl9maW5kVHJpYW5nbGUodGhpcy5wb3NpdGlvbik7XHJcbiAgICBpZiAoIXJlcykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIEluIEJhcnljZW50cmljXHJcbiAgICB2YXIgYSA9IHJlc1sxXTsgLy8gUGVyY2VudCBvZiBjbGlwMlxyXG4gICAgdmFyIGIgPSByZXNbMl07IC8vIFBlcmNlbnQgb2YgY2xpcDNcclxuXHJcbiAgICB2YXIgdHJpID0gcmVzWzBdO1xyXG5cclxuICAgIHZhciBpbjEgPSB0aGlzLmlucHV0c1t0cmkuaW5kaWNlc1swXV07XHJcbiAgICB2YXIgaW4yID0gdGhpcy5pbnB1dHNbdHJpLmluZGljZXNbMV1dO1xyXG4gICAgdmFyIGluMyA9IHRoaXMuaW5wdXRzW3RyaS5pbmRpY2VzWzJdXTtcclxuICAgIHZhciBjbGlwMSA9IGluMS5jbGlwO1xyXG4gICAgdmFyIGNsaXAyID0gaW4yLmNsaXA7XHJcbiAgICB2YXIgY2xpcDMgPSBpbjMuY2xpcDtcclxuXHJcbiAgICBjbGlwMS5zZXRUaW1lKCh0aW1lICsgaW4xLm9mZnNldCkgJSBjbGlwMS5saWZlKTtcclxuICAgIGNsaXAyLnNldFRpbWUoKHRpbWUgKyBpbjIub2Zmc2V0KSAlIGNsaXAyLmxpZmUpO1xyXG4gICAgY2xpcDMuc2V0VGltZSgodGltZSArIGluMy5vZmZzZXQpICUgY2xpcDMubGlmZSk7XHJcblxyXG4gICAgdmFyIGMxID0gY2xpcDEub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAxLm91dHB1dCA6IGNsaXAxO1xyXG4gICAgdmFyIGMyID0gY2xpcDIub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAyLm91dHB1dCA6IGNsaXAyO1xyXG4gICAgdmFyIGMzID0gY2xpcDMub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAzLm91dHB1dCA6IGNsaXAzO1xyXG5cclxuICAgIHRoaXMub3V0cHV0LmJsZW5kMkQoYzEsIGMyLCBjMywgYSwgYik7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xvbmUgYSBuZXcgQmxlbmQyRCBjbGlwXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2xvbmVJbnB1dHMgVHJ1ZSBpZiBjbG9uZSB0aGUgaW5wdXQgY2xpcHNcclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQmxlbmQyRENsaXB9XHJcbiAqL1xyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoY2xvbmVJbnB1dHMpIHtcclxuICAgIHZhciBjbGlwID0gQ2xpcC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgIGNsaXAub3V0cHV0ID0gdGhpcy5vdXRwdXQuY2xvbmUoKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgaW5wdXRDbGlwID0gY2xvbmVJbnB1dHMgPyB0aGlzLmlucHV0c1tpXS5jbGlwLmNsb25lKHRydWUpIDogdGhpcy5pbnB1dHNbaV0uY2xpcDtcclxuICAgICAgICBjbGlwLmFkZElucHV0KHRoaXMuaW5wdXRzW2ldLnBvc2l0aW9uLCBpbnB1dENsaXAsIHRoaXMuaW5wdXRzW2ldLm9mZnNldCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xpcDtcclxufTtcclxuXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5fZmluZFRyaWFuZ2xlID0gZnVuY3Rpb24gKHBvc2l0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fY2FjaGVUcmlhbmdsZSkge1xyXG4gICAgICAgIHZhciByZXMgPSBkZWxhdW5heS5jb250YWlucyh0aGlzLl9jYWNoZVRyaWFuZ2xlLnZlcnRpY2VzLCBwb3NpdGlvbi5hcnJheSk7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuX2NhY2hlVHJpYW5nbGUsIHJlc1swXSwgcmVzWzFdXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RyaWFuZ2xlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciB0cmkgPSB0aGlzLl90cmlhbmdsZXNbaV07XHJcbiAgICAgICAgdmFyIHJlcyA9IGRlbGF1bmF5LmNvbnRhaW5zKHRyaS52ZXJ0aWNlcywgdGhpcy5wb3NpdGlvbi5hcnJheSk7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWNoZVRyaWFuZ2xlID0gdHJpO1xyXG4gICAgICAgICAgICByZXR1cm4gW3RyaSwgcmVzWzBdLCByZXNbMV1dO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJsZW5kMkRDbGlwOyIsIlxyXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTMsIEJyYW5kb24gSm9uZXMsIENvbGluIE1hY0tlbnppZSBJVi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuXHJcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXHJcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcclxuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcclxuICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxyXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxyXG4gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxyXG4gICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXHJcblxyXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcclxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcclxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxyXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxyXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcclxuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xyXG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cclxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcclxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcclxuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovXHJcblxyXG5pbXBvcnQgeyBHTE1BVF9SQU5ET00sIEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcblxyXG4vKipcclxuICogQGNsYXNzIDMgRGltZW5zaW9uYWwgVmVjdG9yXHJcbiAqIEBuYW1lIHZlYzNcclxuICovXHJcblxyXG52YXIgdmVjMyA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5IHZlYzNcclxuICpcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cclxudmVjMy5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgzKTtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cclxudmVjMy5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgzKTtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjM30gYSBuZXcgM0QgdmVjdG9yXHJcbiAqL1xyXG52ZWMzLmZyb21WYWx1ZXMgPSBmdW5jdGlvbih4LCB5LCB6KSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMyk7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIG91dFsyXSA9IHo7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWMzIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBzb3VyY2UgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzIHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHopIHtcclxuICAgIG91dFswXSA9IHg7XHJcbiAgICBvdXRbMV0gPSB5O1xyXG4gICAgb3V0WzJdID0gejtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXSArIGJbMl07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuc3VidHJhY3QgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuc3ViID0gdmVjMy5zdWJ0cmFjdDtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5tdWx0aXBseSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAqIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdICogYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gKiBiWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5tdWwgPSB2ZWMzLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmRpdmlkZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAvIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gLyBiWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuZGl2ID0gdmVjMy5kaXZpZGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1heGltdW0gb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gTWF0aC5tYXgoYVswXSwgYlswXSk7XHJcbiAgICBvdXRbMV0gPSBNYXRoLm1heChhWzFdLCBiWzFdKTtcclxuICAgIG91dFsyXSA9IE1hdGgubWF4KGFbMl0sIGJbMl0pO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMzIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYjtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiO1xyXG4gICAgb3V0WzJdID0gYVsyXSAqIGI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzMncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIG91dFswXSA9IGFbMF0gKyAoYlswXSAqIHNjYWxlKTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyAoYlsxXSAqIHNjYWxlKTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyAoYlsyXSAqIHNjYWxlKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXHJcbnZlYzMuZGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSArIHoqeik7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuZGlzdCA9IHZlYzMuZGlzdGFuY2U7XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMzLnNxdWFyZWREaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXHJcbiAgICAgICAgeSA9IGJbMV0gLSBhWzFdLFxyXG4gICAgICAgIHogPSBiWzJdIC0gYVsyXTtcclxuICAgIHJldHVybiB4KnggKyB5KnkgKyB6Kno7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWREaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMzLnNxckRpc3QgPSB2ZWMzLnNxdWFyZWREaXN0YW5jZTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKi9cclxudmVjMy5sZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdLFxyXG4gICAgICAgIHogPSBhWzJdO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCh4KnggKyB5KnkgKyB6KnopO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5sZW4gPSB2ZWMzLmxlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKi9cclxudmVjMy5zcXVhcmVkTGVuZ3RoID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHZhciB4ID0gYVswXSxcclxuICAgICAgICB5ID0gYVsxXSxcclxuICAgICAgICB6ID0gYVsyXTtcclxuICAgIHJldHVybiB4KnggKyB5KnkgKyB6Kno7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5zcXJMZW4gPSB2ZWMzLnNxdWFyZWRMZW5ndGg7XHJcblxyXG4vKipcclxuICogTmVnYXRlcyB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBuZWdhdGVcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5uZWdhdGUgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IC1hWzBdO1xyXG4gICAgb3V0WzFdID0gLWFbMV07XHJcbiAgICBvdXRbMl0gPSAtYVsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5pbnZlcnNlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcclxuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xyXG4gIG91dFsyXSA9IDEuMCAvIGFbMl07XHJcbiAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl07XHJcbiAgICB2YXIgbGVuID0geCp4ICsgeSp5ICsgeip6O1xyXG4gICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgICAvL1RPRE86IGV2YWx1YXRlIHVzZSBvZiBnbG1faW52c3FydCBoZXJlP1xyXG4gICAgICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcclxuICAgICAgICBvdXRbMF0gPSBhWzBdICogbGVuO1xyXG4gICAgICAgIG91dFsxXSA9IGFbMV0gKiBsZW47XHJcbiAgICAgICAgb3V0WzJdID0gYVsyXSAqIGxlbjtcclxuICAgIH1lbHNle1xyXG4gICAgICAgIG91dFswXSA9IDA7XHJcbiAgICAgICAgb3V0WzFdID0gMDtcclxuICAgICAgICBvdXRbMl0gPSAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXHJcbnZlYzMuZG90ID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdICsgYVsyXSAqIGJbMl07XHJcbn07XHJcblxyXG4vKipcclxuICogQ29tcHV0ZXMgdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmNyb3NzID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLCBheSA9IGFbMV0sIGF6ID0gYVsyXSxcclxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdO1xyXG5cclxuICAgIG91dFswXSA9IGF5ICogYnogLSBheiAqIGJ5O1xyXG4gICAgb3V0WzFdID0gYXogKiBieCAtIGF4ICogYno7XHJcbiAgICBvdXRbMl0gPSBheCAqIGJ5IC0gYXkgKiBieDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmxlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLFxyXG4gICAgICAgIGF5ID0gYVsxXSxcclxuICAgICAgICBheiA9IGFbMl07XHJcbiAgICBvdXRbMF0gPSBheCArIHQgKiAoYlswXSAtIGF4KTtcclxuICAgIG91dFsxXSA9IGF5ICsgdCAqIChiWzFdIC0gYXkpO1xyXG4gICAgb3V0WzJdID0gYXogKyB0ICogKGJbMl0gLSBheik7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMucmFuZG9tID0gZnVuY3Rpb24gKG91dCwgc2NhbGUpIHtcclxuICAgIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xyXG5cclxuICAgIHZhciByID0gR0xNQVRfUkFORE9NKCkgKiAyLjAgKiBNYXRoLlBJO1xyXG4gICAgdmFyIHogPSAoR0xNQVRfUkFORE9NKCkgKiAyLjApIC0gMS4wO1xyXG4gICAgdmFyIHpTY2FsZSA9IE1hdGguc3FydCgxLjAteip6KSAqIHNjYWxlO1xyXG5cclxuICAgIG91dFswXSA9IE1hdGguY29zKHIpICogelNjYWxlO1xyXG4gICAgb3V0WzFdID0gTWF0aC5zaW4ocikgKiB6U2NhbGU7XHJcbiAgICBvdXRbMl0gPSB6ICogc2NhbGU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDQuXHJcbiAqIDR0aCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XTtcclxuICAgIHcgPSB3IHx8IDEuMDtcclxuICAgIG91dFswXSA9IChtWzBdICogeCArIG1bNF0gKiB5ICsgbVs4XSAqIHogKyBtWzEyXSkgLyB3O1xyXG4gICAgb3V0WzFdID0gKG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzldICogeiArIG1bMTNdKSAvIHc7XHJcbiAgICBvdXRbMl0gPSAobVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdKSAvIHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gdGhlIDN4MyBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy50cmFuc2Zvcm1NYXQzID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sIHkgPSBhWzFdLCB6ID0gYVsyXTtcclxuICAgIG91dFswXSA9IHggKiBtWzBdICsgeSAqIG1bM10gKyB6ICogbVs2XTtcclxuICAgIG91dFsxXSA9IHggKiBtWzFdICsgeSAqIG1bNF0gKyB6ICogbVs3XTtcclxuICAgIG91dFsyXSA9IHggKiBtWzJdICsgeSAqIG1bNV0gKyB6ICogbVs4XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMyB3aXRoIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy50cmFuc2Zvcm1RdWF0ID0gZnVuY3Rpb24ob3V0LCBhLCBxKSB7XHJcbiAgICAvLyBiZW5jaG1hcmtzOiBodHRwOi8vanNwZXJmLmNvbS9xdWF0ZXJuaW9uLXRyYW5zZm9ybS12ZWMzLWltcGxlbWVudGF0aW9uc1xyXG5cclxuICAgIHZhciB4ID0gYVswXSwgeSA9IGFbMV0sIHogPSBhWzJdLFxyXG4gICAgICAgIHF4ID0gcVswXSwgcXkgPSBxWzFdLCBxeiA9IHFbMl0sIHF3ID0gcVszXSxcclxuXHJcbiAgICAgICAgLy8gY2FsY3VsYXRlIHF1YXQgKiB2ZWNcclxuICAgICAgICBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeSxcclxuICAgICAgICBpeSA9IHF3ICogeSArIHF6ICogeCAtIHF4ICogeixcclxuICAgICAgICBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeCxcclxuICAgICAgICBpdyA9IC1xeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7XHJcblxyXG4gICAgLy8gY2FsY3VsYXRlIHJlc3VsdCAqIGludmVyc2UgcXVhdFxyXG4gICAgb3V0WzBdID0gaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeTtcclxuICAgIG91dFsxXSA9IGl5ICogcXcgKyBpdyAqIC1xeSArIGl6ICogLXF4IC0gaXggKiAtcXo7XHJcbiAgICBvdXRbMl0gPSBpeiAqIHF3ICsgaXcgKiAtcXogKyBpeCAqIC1xeSAtIGl5ICogLXF4O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGUgYSAzRCB2ZWN0b3IgYXJvdW5kIHRoZSB4LWF4aXNcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgdmVjMyBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLnJvdGF0ZVggPSBmdW5jdGlvbihvdXQsIGEsIGIsIGMpe1xyXG4gICB2YXIgcCA9IFtdLCByPVtdO1xyXG4gICAgICAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXHJcbiAgICAgIHBbMF0gPSBhWzBdIC0gYlswXTtcclxuICAgICAgcFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcFsyXSA9IGFbMl0gLSBiWzJdO1xyXG5cclxuICAgICAgLy9wZXJmb3JtIHJvdGF0aW9uXHJcbiAgICAgIHJbMF0gPSBwWzBdO1xyXG4gICAgICByWzFdID0gcFsxXSpNYXRoLmNvcyhjKSAtIHBbMl0qTWF0aC5zaW4oYyk7XHJcbiAgICAgIHJbMl0gPSBwWzFdKk1hdGguc2luKGMpICsgcFsyXSpNYXRoLmNvcyhjKTtcclxuXHJcbiAgICAgIC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cclxuICAgICAgb3V0WzBdID0gclswXSArIGJbMF07XHJcbiAgICAgIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xyXG4gICAgICBvdXRbMl0gPSByWzJdICsgYlsyXTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHktYXhpc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCBUaGUgcmVjZWl2aW5nIHZlYzNcclxuICogQHBhcmFtIHt2ZWMzfSBhIFRoZSB2ZWMzIHBvaW50IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IGMgVGhlIGFuZ2xlIG9mIHJvdGF0aW9uXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMucm90YXRlWSA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgYyl7XHJcbiAgICB2YXIgcCA9IFtdLCByPVtdO1xyXG4gICAgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxyXG4gICAgcFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgcFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcFsyXSA9IGFbMl0gLSBiWzJdO1xyXG5cclxuICAgIC8vcGVyZm9ybSByb3RhdGlvblxyXG4gICAgclswXSA9IHBbMl0qTWF0aC5zaW4oYykgKyBwWzBdKk1hdGguY29zKGMpO1xyXG4gICAgclsxXSA9IHBbMV07XHJcbiAgICByWzJdID0gcFsyXSpNYXRoLmNvcyhjKSAtIHBbMF0qTWF0aC5zaW4oYyk7XHJcblxyXG4gICAgLy90cmFuc2xhdGUgdG8gY29ycmVjdCBwb3NpdGlvblxyXG4gICAgb3V0WzBdID0gclswXSArIGJbMF07XHJcbiAgICBvdXRbMV0gPSByWzFdICsgYlsxXTtcclxuICAgIG91dFsyXSA9IHJbMl0gKyBiWzJdO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlIGEgM0QgdmVjdG9yIGFyb3VuZCB0aGUgei1heGlzXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IFRoZSByZWNlaXZpbmcgdmVjM1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7dmVjM30gYiBUaGUgb3JpZ2luIG9mIHRoZSByb3RhdGlvblxyXG4gKiBAcGFyYW0ge051bWJlcn0gYyBUaGUgYW5nbGUgb2Ygcm90YXRpb25cclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5yb3RhdGVaID0gZnVuY3Rpb24ob3V0LCBhLCBiLCBjKXtcclxuICAgIHZhciBwID0gW10sIHI9W107XHJcbiAgICAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXHJcbiAgICBwWzBdID0gYVswXSAtIGJbMF07XHJcbiAgICBwWzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBwWzJdID0gYVsyXSAtIGJbMl07XHJcblxyXG4gICAgLy9wZXJmb3JtIHJvdGF0aW9uXHJcbiAgICByWzBdID0gcFswXSpNYXRoLmNvcyhjKSAtIHBbMV0qTWF0aC5zaW4oYyk7XHJcbiAgICByWzFdID0gcFswXSpNYXRoLnNpbihjKSArIHBbMV0qTWF0aC5jb3MoYyk7XHJcbiAgICByWzJdID0gcFsyXTtcclxuXHJcbiAgICAvL3RyYW5zbGF0ZSB0byBjb3JyZWN0IHBvc2l0aW9uXHJcbiAgICBvdXRbMF0gPSByWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xyXG4gICAgb3V0WzJdID0gclsyXSArIGJbMl07XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQZXJmb3JtIHNvbWUgb3BlcmF0aW9uIG92ZXIgYW4gYXJyYXkgb2YgdmVjM3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGEgdGhlIGFycmF5IG9mIHZlY3RvcnMgdG8gaXRlcmF0ZSBvdmVyXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdHJpZGUgTnVtYmVyIG9mIGVsZW1lbnRzIGJldHdlZW4gdGhlIHN0YXJ0IG9mIGVhY2ggdmVjMy4gSWYgMCBhc3N1bWVzIHRpZ2h0bHkgcGFja2VkXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNraXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50IE51bWJlciBvZiB2ZWMzcyB0byBpdGVyYXRlIG92ZXIuIElmIDAgaXRlcmF0ZXMgb3ZlciBlbnRpcmUgYXJyYXlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gRnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCB2ZWN0b3IgaW4gdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXJnXSBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gZm5cclxuICogQHJldHVybnMge0FycmF5fSBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5mb3JFYWNoID0gKGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIHZlYyA9IHZlYzMuY3JlYXRlKCk7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGEsIHN0cmlkZSwgb2Zmc2V0LCBjb3VudCwgZm4sIGFyZykge1xyXG4gICAgICAgIHZhciBpLCBsO1xyXG4gICAgICAgIGlmKCFzdHJpZGUpIHtcclxuICAgICAgICAgICAgc3RyaWRlID0gMztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCFvZmZzZXQpIHtcclxuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGNvdW50KSB7XHJcbiAgICAgICAgICAgIGwgPSBNYXRoLm1pbigoY291bnQgKiBzdHJpZGUpICsgb2Zmc2V0LCBhLmxlbmd0aCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbCA9IGEubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKGkgPSBvZmZzZXQ7IGkgPCBsOyBpICs9IHN0cmlkZSkge1xyXG4gICAgICAgICAgICB2ZWNbMF0gPSBhW2ldOyB2ZWNbMV0gPSBhW2krMV07IHZlY1syXSA9IGFbaSsyXTtcclxuICAgICAgICAgICAgZm4odmVjLCB2ZWMsIGFyZyk7XHJcbiAgICAgICAgICAgIGFbaV0gPSB2ZWNbMF07IGFbaSsxXSA9IHZlY1sxXTsgYVtpKzJdID0gdmVjWzJdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgYW5nbGUgYmV0d2VlbiB0d28gM0QgdmVjdG9yc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYW5nbGUgaW4gcmFkaWFuc1xyXG4gKi9cclxudmVjMy5hbmdsZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuXHJcbiAgICB2YXIgdGVtcEEgPSB2ZWMzLmZyb21WYWx1ZXMoYVswXSwgYVsxXSwgYVsyXSk7XHJcbiAgICB2YXIgdGVtcEIgPSB2ZWMzLmZyb21WYWx1ZXMoYlswXSwgYlsxXSwgYlsyXSk7XHJcblxyXG4gICAgdmVjMy5ub3JtYWxpemUodGVtcEEsIHRlbXBBKTtcclxuICAgIHZlYzMubm9ybWFsaXplKHRlbXBCLCB0ZW1wQik7XHJcblxyXG4gICAgdmFyIGNvc2luZSA9IHZlYzMuZG90KHRlbXBBLCB0ZW1wQik7XHJcblxyXG4gICAgaWYoY29zaW5lID4gMS4wKXtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguYWNvcyhjb3NpbmUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjMzsiLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfUkFORE9NLCBHTE1BVF9BUlJBWV9UWVBFIH0gZnJvbSAnLi9jb21tb24nO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyA0IERpbWVuc2lvbmFsIFZlY3RvclxyXG4gKiBAbmFtZSB2ZWM0XHJcbiAqL1xyXG5cclxuZXhwb3J0IHZhciB2ZWM0ID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjNFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjNH0gYSBuZXcgNEQgdmVjdG9yXHJcbiAqL1xyXG52ZWM0LmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xyXG4gICAgb3V0WzBdID0gMDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWM0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cclxudmVjNC5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIG91dFszXSA9IGFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjNCBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cclxudmVjNC5mcm9tVmFsdWVzID0gZnVuY3Rpb24oeCwgeSwgeiwgdykge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xyXG4gICAgb3V0WzBdID0geDtcclxuICAgIG91dFsxXSA9IHk7XHJcbiAgICBvdXRbMl0gPSB6O1xyXG4gICAgb3V0WzNdID0gdztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHosIHcpIHtcclxuICAgIG91dFswXSA9IHg7XHJcbiAgICBvdXRbMV0gPSB5O1xyXG4gICAgb3V0WzJdID0gejtcclxuICAgIG91dFszXSA9IHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0LmFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSArIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXSArIGJbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQuc3VidHJhY3QgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcclxuICAgIG91dFszXSA9IGFbM10gLSBiWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjNC5zdWIgPSB2ZWM0LnN1YnRyYWN0O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0Lm11bHRpcGx5ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXSAqIGJbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdICogYlszXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQubXVsID0gdmVjNC5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBEaXZpZGVzIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5kaXZpZGUgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLyBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAvIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC8gYlsyXTtcclxuICAgIG91dFszXSA9IGFbM10gLyBiWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQuZGl2ID0gdmVjNC5kaXZpZGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XHJcbiAgICBvdXRbM10gPSBNYXRoLm1pbihhWzNdLCBiWzNdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5tYXgoYVsyXSwgYlsyXSk7XHJcbiAgICBvdXRbM10gPSBNYXRoLm1heChhWzNdLCBiWzNdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2NhbGVzIGEgdmVjNCBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAqIGI7XHJcbiAgICBvdXRbMV0gPSBhWzFdICogYjtcclxuICAgIG91dFsyXSA9IGFbMl0gKiBiO1xyXG4gICAgb3V0WzNdID0gYVszXSAqIGI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIG91dFswXSA9IGFbMF0gKyAoYlswXSAqIHNjYWxlKTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyAoYlsxXSAqIHNjYWxlKTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyAoYlsyXSAqIHNjYWxlKTtcclxuICAgIG91dFszXSA9IGFbM10gKyAoYlszXSAqIHNjYWxlKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXHJcbnZlYzQuZGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl0sXHJcbiAgICAgICAgdyA9IGJbM10gLSBhWzNdO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCh4KnggKyB5KnkgKyB6KnogKyB3KncpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5kaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmRpc3QgPSB2ZWM0LmRpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cclxudmVjNC5zcXVhcmVkRGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl0sXHJcbiAgICAgICAgdyA9IGJbM10gLSBhWzNdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeSArIHoqeiArIHcqdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQuc3FyRGlzdCA9IHZlYzQuc3F1YXJlZERpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWM0Lmxlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IGFbM107XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSArIHoqeiArIHcqdyk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0Lmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmxlbiA9IHZlYzQubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWM0LnNxdWFyZWRMZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdLFxyXG4gICAgICAgIHogPSBhWzJdLFxyXG4gICAgICAgIHcgPSBhWzNdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeSArIHoqeiArIHcqdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LnNxckxlbiA9IHZlYzQuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0Lm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gLWFbMF07XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIG91dFsyXSA9IC1hWzJdO1xyXG4gICAgb3V0WzNdID0gLWFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGludmVyc2Ugb2YgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gaW52ZXJ0XHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQuaW52ZXJzZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gIG91dFswXSA9IDEuMCAvIGFbMF07XHJcbiAgb3V0WzFdID0gMS4wIC8gYVsxXTtcclxuICBvdXRbMl0gPSAxLjAgLyBhWzJdO1xyXG4gIG91dFszXSA9IDEuMCAvIGFbM107XHJcbiAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IGFbM107XHJcbiAgICB2YXIgbGVuID0geCp4ICsgeSp5ICsgeip6ICsgdyp3O1xyXG4gICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgICAgb3V0WzBdID0gYVswXSAqIGxlbjtcclxuICAgICAgICBvdXRbMV0gPSBhWzFdICogbGVuO1xyXG4gICAgICAgIG91dFsyXSA9IGFbMl0gKiBsZW47XHJcbiAgICAgICAgb3V0WzNdID0gYVszXSAqIGxlbjtcclxuICAgIH1cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqL1xyXG52ZWM0LmRvdCA9IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICByZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdICsgYVszXSAqIGJbM107XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0LmxlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLFxyXG4gICAgICAgIGF5ID0gYVsxXSxcclxuICAgICAgICBheiA9IGFbMl0sXHJcbiAgICAgICAgYXcgPSBhWzNdO1xyXG4gICAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XHJcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcclxuICAgIG91dFsyXSA9IGF6ICsgdCAqIChiWzJdIC0gYXopO1xyXG4gICAgb3V0WzNdID0gYXcgKyB0ICogKGJbM10gLSBhdyk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQucmFuZG9tID0gZnVuY3Rpb24gKG91dCwgc2NhbGUpIHtcclxuICAgIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xyXG5cclxuICAgIC8vVE9ETzogVGhpcyBpcyBhIHByZXR0eSBhd2Z1bCB3YXkgb2YgZG9pbmcgdGhpcy4gRmluZCBzb21ldGhpbmcgYmV0dGVyLlxyXG4gICAgb3V0WzBdID0gR0xNQVRfUkFORE9NKCk7XHJcbiAgICBvdXRbMV0gPSBHTE1BVF9SQU5ET00oKTtcclxuICAgIG91dFsyXSA9IEdMTUFUX1JBTkRPTSgpO1xyXG4gICAgb3V0WzNdID0gR0xNQVRfUkFORE9NKCk7XHJcbiAgICB2ZWM0Lm5vcm1hbGl6ZShvdXQsIG91dCk7XHJcbiAgICB2ZWM0LnNjYWxlKG91dCwgb3V0LCBzY2FsZSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIG1hdDQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sIHcgPSBhWzNdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzRdICogeSArIG1bOF0gKiB6ICsgbVsxMl0gKiB3O1xyXG4gICAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzVdICogeSArIG1bOV0gKiB6ICsgbVsxM10gKiB3O1xyXG4gICAgb3V0WzJdID0gbVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdICogdztcclxuICAgIG91dFszXSA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XSAqIHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBxdWF0ZXJuaW9uIHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQudHJhbnNmb3JtUXVhdCA9IGZ1bmN0aW9uKG91dCwgYSwgcSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sXHJcbiAgICAgICAgcXggPSBxWzBdLCBxeSA9IHFbMV0sIHF6ID0gcVsyXSwgcXcgPSBxWzNdLFxyXG5cclxuICAgICAgICAvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY1xyXG4gICAgICAgIGl4ID0gcXcgKiB4ICsgcXkgKiB6IC0gcXogKiB5LFxyXG4gICAgICAgIGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6LFxyXG4gICAgICAgIGl6ID0gcXcgKiB6ICsgcXggKiB5IC0gcXkgKiB4LFxyXG4gICAgICAgIGl3ID0gLXF4ICogeCAtIHF5ICogeSAtIHF6ICogejtcclxuXHJcbiAgICAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XHJcbiAgICBvdXRbMF0gPSBpeCAqIHF3ICsgaXcgKiAtcXggKyBpeSAqIC1xeiAtIGl6ICogLXF5O1xyXG4gICAgb3V0WzFdID0gaXkgKiBxdyArIGl3ICogLXF5ICsgaXogKiAtcXggLSBpeCAqIC1xejtcclxuICAgIG91dFsyXSA9IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXg7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWM0cy5cclxuICpcclxuICogQHBhcmFtIHtBcnJheX0gYSB0aGUgYXJyYXkgb2YgdmVjdG9ycyB0byBpdGVyYXRlIG92ZXJcclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWM0LiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcclxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnQgTnVtYmVyIG9mIHZlYzRzIHRvIGl0ZXJhdGUgb3Zlci4gSWYgMCBpdGVyYXRlcyBvdmVyIGVudGlyZSBhcnJheVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxyXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmZvckVhY2ggPSAoZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgdmVjID0gdmVjNC5jcmVhdGUoKTtcclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24oYSwgc3RyaWRlLCBvZmZzZXQsIGNvdW50LCBmbiwgYXJnKSB7XHJcbiAgICAgICAgdmFyIGksIGw7XHJcbiAgICAgICAgaWYoIXN0cmlkZSkge1xyXG4gICAgICAgICAgICBzdHJpZGUgPSA0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIW9mZnNldCkge1xyXG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoY291bnQpIHtcclxuICAgICAgICAgICAgbCA9IE1hdGgubWluKChjb3VudCAqIHN0cmlkZSkgKyBvZmZzZXQsIGEubGVuZ3RoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsID0gYS5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7XHJcbiAgICAgICAgICAgIHZlY1swXSA9IGFbaV07IHZlY1sxXSA9IGFbaSsxXTsgdmVjWzJdID0gYVtpKzJdOyB2ZWNbM10gPSBhW2krM107XHJcbiAgICAgICAgICAgIGZuKHZlYywgdmVjLCBhcmcpO1xyXG4gICAgICAgICAgICBhW2ldID0gdmVjWzBdOyBhW2krMV0gPSB2ZWNbMV07IGFbaSsyXSA9IHZlY1syXTsgYVtpKzNdID0gdmVjWzNdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjNDsiLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgM3gzIE1hdHJpeFxyXG4gKiBAbmFtZSBtYXQzXHJcbiAqL1xyXG5cclxudmFyIG1hdDMgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDNcclxuICpcclxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcclxuICovXHJcbm1hdDMuY3JlYXRlID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoOSk7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMTtcclxuICAgIG91dFs1XSA9IDA7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcGllcyB0aGUgdXBwZXItbGVmdCAzeDMgdmFsdWVzIGludG8gdGhlIGdpdmVuIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgM3gzIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgICB0aGUgc291cmNlIDR4NCBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5mcm9tTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVs0XTtcclxuICAgIG91dFs0XSA9IGFbNV07XHJcbiAgICBvdXRbNV0gPSBhWzZdO1xyXG4gICAgb3V0WzZdID0gYVs4XTtcclxuICAgIG91dFs3XSA9IGFbOV07XHJcbiAgICBvdXRbOF0gPSBhWzEwXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcclxuICovXHJcbm1hdDMuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoOSk7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQzIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICBvdXRbNV0gPSBhWzVdO1xyXG4gICAgb3V0WzZdID0gYVs2XTtcclxuICAgIG91dFs3XSA9IGFbN107XHJcbiAgICBvdXRbOF0gPSBhWzhdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgYSBtYXQzIHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDE7XHJcbiAgICBvdXRbNV0gPSAwO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXHJcbiAgICBpZiAob3V0ID09PSBhKSB7XHJcbiAgICAgICAgdmFyIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGExMiA9IGFbNV07XHJcbiAgICAgICAgb3V0WzFdID0gYVszXTtcclxuICAgICAgICBvdXRbMl0gPSBhWzZdO1xyXG4gICAgICAgIG91dFszXSA9IGEwMTtcclxuICAgICAgICBvdXRbNV0gPSBhWzddO1xyXG4gICAgICAgIG91dFs2XSA9IGEwMjtcclxuICAgICAgICBvdXRbN10gPSBhMTI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG91dFswXSA9IGFbMF07XHJcbiAgICAgICAgb3V0WzFdID0gYVszXTtcclxuICAgICAgICBvdXRbMl0gPSBhWzZdO1xyXG4gICAgICAgIG91dFszXSA9IGFbMV07XHJcbiAgICAgICAgb3V0WzRdID0gYVs0XTtcclxuICAgICAgICBvdXRbNV0gPSBhWzddO1xyXG4gICAgICAgIG91dFs2XSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzddID0gYVs1XTtcclxuICAgICAgICBvdXRbOF0gPSBhWzhdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF0sXHJcblxyXG4gICAgICAgIGIwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMSxcclxuICAgICAgICBiMTEgPSAtYTIyICogYTEwICsgYTEyICogYTIwLFxyXG4gICAgICAgIGIyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMCxcclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxyXG4gICAgICAgIGRldCA9IGEwMCAqIGIwMSArIGEwMSAqIGIxMSArIGEwMiAqIGIyMTtcclxuXHJcbiAgICBpZiAoIWRldCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuICAgIG91dFswXSA9IGIwMSAqIGRldDtcclxuICAgIG91dFsxXSA9ICgtYTIyICogYTAxICsgYTAyICogYTIxKSAqIGRldDtcclxuICAgIG91dFsyXSA9IChhMTIgKiBhMDEgLSBhMDIgKiBhMTEpICogZGV0O1xyXG4gICAgb3V0WzNdID0gYjExICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGEyMiAqIGEwMCAtIGEwMiAqIGEyMCkgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoLWExMiAqIGEwMCArIGEwMiAqIGExMCkgKiBkZXQ7XHJcbiAgICBvdXRbNl0gPSBiMjEgKiBkZXQ7XHJcbiAgICBvdXRbN10gPSAoLWEyMSAqIGEwMCArIGEwMSAqIGEyMCkgKiBkZXQ7XHJcbiAgICBvdXRbOF0gPSAoYTExICogYTAwIC0gYTAxICogYTEwKSAqIGRldDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYWRqdWdhdGUgb2YgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xyXG5tYXQzLmFkam9pbnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XTtcclxuXHJcbiAgICBvdXRbMF0gPSAoYTExICogYTIyIC0gYTEyICogYTIxKTtcclxuICAgIG91dFsxXSA9IChhMDIgKiBhMjEgLSBhMDEgKiBhMjIpO1xyXG4gICAgb3V0WzJdID0gKGEwMSAqIGExMiAtIGEwMiAqIGExMSk7XHJcbiAgICBvdXRbM10gPSAoYTEyICogYTIwIC0gYTEwICogYTIyKTtcclxuICAgIG91dFs0XSA9IChhMDAgKiBhMjIgLSBhMDIgKiBhMjApO1xyXG4gICAgb3V0WzVdID0gKGEwMiAqIGExMCAtIGEwMCAqIGExMik7XHJcbiAgICBvdXRbNl0gPSAoYTEwICogYTIxIC0gYTExICogYTIwKTtcclxuICAgIG91dFs3XSA9IChhMDEgKiBhMjAgLSBhMDAgKiBhMjEpO1xyXG4gICAgb3V0WzhdID0gKGEwMCAqIGExMSAtIGEwMSAqIGExMCk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cclxubWF0My5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF07XHJcblxyXG4gICAgcmV0dXJuIGEwMCAqIChhMjIgKiBhMTEgLSBhMTIgKiBhMjEpICsgYTAxICogKC1hMjIgKiBhMTAgKyBhMTIgKiBhMjApICsgYTAyICogKGEyMSAqIGExMCAtIGExMSAqIGEyMCk7XHJcbn07XHJcblxyXG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0MydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMubXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF0sXHJcblxyXG4gICAgICAgIGIwMCA9IGJbMF0sIGIwMSA9IGJbMV0sIGIwMiA9IGJbMl0sXHJcbiAgICAgICAgYjEwID0gYlszXSwgYjExID0gYls0XSwgYjEyID0gYls1XSxcclxuICAgICAgICBiMjAgPSBiWzZdLCBiMjEgPSBiWzddLCBiMjIgPSBiWzhdO1xyXG5cclxuICAgIG91dFswXSA9IGIwMCAqIGEwMCArIGIwMSAqIGExMCArIGIwMiAqIGEyMDtcclxuICAgIG91dFsxXSA9IGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMTtcclxuICAgIG91dFsyXSA9IGIwMCAqIGEwMiArIGIwMSAqIGExMiArIGIwMiAqIGEyMjtcclxuXHJcbiAgICBvdXRbM10gPSBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjA7XHJcbiAgICBvdXRbNF0gPSBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjE7XHJcbiAgICBvdXRbNV0gPSBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjI7XHJcblxyXG4gICAgb3V0WzZdID0gYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwO1xyXG4gICAgb3V0WzddID0gYjIwICogYTAxICsgYjIxICogYTExICsgYjIyICogYTIxO1xyXG4gICAgb3V0WzhdID0gYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDMubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxubWF0My5tdWwgPSBtYXQzLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zbGF0ZSBhIG1hdDMgYnkgdGhlIGdpdmVuIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My50cmFuc2xhdGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcclxuICAgICAgICB4ID0gdlswXSwgeSA9IHZbMV07XHJcblxyXG4gICAgb3V0WzBdID0gYTAwO1xyXG4gICAgb3V0WzFdID0gYTAxO1xyXG4gICAgb3V0WzJdID0gYTAyO1xyXG5cclxuICAgIG91dFszXSA9IGExMDtcclxuICAgIG91dFs0XSA9IGExMTtcclxuICAgIG91dFs1XSA9IGExMjtcclxuXHJcbiAgICBvdXRbNl0gPSB4ICogYTAwICsgeSAqIGExMCArIGEyMDtcclxuICAgIG91dFs3XSA9IHggKiBhMDEgKyB5ICogYTExICsgYTIxO1xyXG4gICAgb3V0WzhdID0geCAqIGEwMiArIHkgKiBhMTIgKyBhMjI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXQzIGJ5IHRoZSBnaXZlbiBhbmdsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5yb3RhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcclxuXHJcbiAgICAgICAgcyA9IE1hdGguc2luKHJhZCksXHJcbiAgICAgICAgYyA9IE1hdGguY29zKHJhZCk7XHJcblxyXG4gICAgb3V0WzBdID0gYyAqIGEwMCArIHMgKiBhMTA7XHJcbiAgICBvdXRbMV0gPSBjICogYTAxICsgcyAqIGExMTtcclxuICAgIG91dFsyXSA9IGMgKiBhMDIgKyBzICogYTEyO1xyXG5cclxuICAgIG91dFszXSA9IGMgKiBhMTAgLSBzICogYTAwO1xyXG4gICAgb3V0WzRdID0gYyAqIGExMSAtIHMgKiBhMDE7XHJcbiAgICBvdXRbNV0gPSBjICogYTEyIC0gcyAqIGEwMjtcclxuXHJcbiAgICBvdXRbNl0gPSBhMjA7XHJcbiAgICBvdXRbN10gPSBhMjE7XHJcbiAgICBvdXRbOF0gPSBhMjI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MyBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKiovXHJcbm1hdDMuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciB4ID0gdlswXSwgeSA9IHZbMV07XHJcblxyXG4gICAgb3V0WzBdID0geCAqIGFbMF07XHJcbiAgICBvdXRbMV0gPSB4ICogYVsxXTtcclxuICAgIG91dFsyXSA9IHggKiBhWzJdO1xyXG5cclxuICAgIG91dFszXSA9IHkgKiBhWzNdO1xyXG4gICAgb3V0WzRdID0geSAqIGFbNF07XHJcbiAgICBvdXRbNV0gPSB5ICogYVs1XTtcclxuXHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcGllcyB0aGUgdmFsdWVzIGZyb20gYSBtYXQyZCBpbnRvIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gY29weVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqKi9cclxubWF0My5mcm9tTWF0MmQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gMDtcclxuXHJcbiAgICBvdXRbM10gPSBhWzJdO1xyXG4gICAgb3V0WzRdID0gYVszXTtcclxuICAgIG91dFs1XSA9IDA7XHJcblxyXG4gICAgb3V0WzZdID0gYVs0XTtcclxuICAgIG91dFs3XSA9IGFbNV07XHJcbiAgICBvdXRbOF0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4qIENhbGN1bGF0ZXMgYSAzeDMgbWF0cml4IGZyb20gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuKlxyXG4qIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuKiBAcGFyYW0ge3F1YXR9IHEgUXVhdGVybmlvbiB0byBjcmVhdGUgbWF0cml4IGZyb21cclxuKlxyXG4qIEByZXR1cm5zIHttYXQzfSBvdXRcclxuKi9cclxubWF0My5mcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEpIHtcclxuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXSxcclxuICAgICAgICB4MiA9IHggKyB4LFxyXG4gICAgICAgIHkyID0geSArIHksXHJcbiAgICAgICAgejIgPSB6ICsgeixcclxuXHJcbiAgICAgICAgeHggPSB4ICogeDIsXHJcbiAgICAgICAgeXggPSB5ICogeDIsXHJcbiAgICAgICAgeXkgPSB5ICogeTIsXHJcbiAgICAgICAgenggPSB6ICogeDIsXHJcbiAgICAgICAgenkgPSB6ICogeTIsXHJcbiAgICAgICAgenogPSB6ICogejIsXHJcbiAgICAgICAgd3ggPSB3ICogeDIsXHJcbiAgICAgICAgd3kgPSB3ICogeTIsXHJcbiAgICAgICAgd3ogPSB3ICogejI7XHJcblxyXG4gICAgb3V0WzBdID0gMSAtIHl5IC0geno7XHJcbiAgICBvdXRbM10gPSB5eCAtIHd6O1xyXG4gICAgb3V0WzZdID0genggKyB3eTtcclxuXHJcbiAgICBvdXRbMV0gPSB5eCArIHd6O1xyXG4gICAgb3V0WzRdID0gMSAtIHh4IC0geno7XHJcbiAgICBvdXRbN10gPSB6eSAtIHd4O1xyXG5cclxuICAgIG91dFsyXSA9IHp4IC0gd3k7XHJcbiAgICBvdXRbNV0gPSB6eSArIHd4O1xyXG4gICAgb3V0WzhdID0gMSAtIHh4IC0geXk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4qIENhbGN1bGF0ZXMgYSAzeDMgbm9ybWFsIG1hdHJpeCAodHJhbnNwb3NlIGludmVyc2UpIGZyb20gdGhlIDR4NCBtYXRyaXhcclxuKlxyXG4qIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuKiBAcGFyYW0ge21hdDR9IGEgTWF0NCB0byBkZXJpdmUgdGhlIG5vcm1hbCBtYXRyaXggZnJvbVxyXG4qXHJcbiogQHJldHVybnMge21hdDN9IG91dFxyXG4qL1xyXG5tYXQzLm5vcm1hbEZyb21NYXQ0ID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM10sXHJcbiAgICAgICAgYTEwID0gYVs0XSwgYTExID0gYVs1XSwgYTEyID0gYVs2XSwgYTEzID0gYVs3XSxcclxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSwgYTIzID0gYVsxMV0sXHJcbiAgICAgICAgYTMwID0gYVsxMl0sIGEzMSA9IGFbMTNdLCBhMzIgPSBhWzE0XSwgYTMzID0gYVsxNV0sXHJcblxyXG4gICAgICAgIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMCxcclxuICAgICAgICBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTAsXHJcbiAgICAgICAgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwLFxyXG4gICAgICAgIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMSxcclxuICAgICAgICBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTEsXHJcbiAgICAgICAgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyLFxyXG4gICAgICAgIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMCxcclxuICAgICAgICBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzAsXHJcbiAgICAgICAgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwLFxyXG4gICAgICAgIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMSxcclxuICAgICAgICBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzEsXHJcbiAgICAgICAgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyLFxyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XHJcbiAgICAgICAgZGV0ID0gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xyXG5cclxuICAgIGlmICghZGV0KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBkZXQgPSAxLjAgLyBkZXQ7XHJcblxyXG4gICAgb3V0WzBdID0gKGExMSAqIGIxMSAtIGExMiAqIGIxMCArIGExMyAqIGIwOSkgKiBkZXQ7XHJcbiAgICBvdXRbMV0gPSAoYTEyICogYjA4IC0gYTEwICogYjExIC0gYTEzICogYjA3KSAqIGRldDtcclxuICAgIG91dFsyXSA9IChhMTAgKiBiMTAgLSBhMTEgKiBiMDggKyBhMTMgKiBiMDYpICogZGV0O1xyXG5cclxuICAgIG91dFszXSA9IChhMDIgKiBiMTAgLSBhMDEgKiBiMTEgLSBhMDMgKiBiMDkpICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGEwMCAqIGIxMSAtIGEwMiAqIGIwOCArIGEwMyAqIGIwNykgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcclxuXHJcbiAgICBvdXRbNl0gPSAoYTMxICogYjA1IC0gYTMyICogYjA0ICsgYTMzICogYjAzKSAqIGRldDtcclxuICAgIG91dFs3XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xyXG4gICAgb3V0WzhdID0gKGEzMCAqIGIwNCAtIGEzMSAqIGIwMiArIGEzMyAqIGIwMCkgKiBkZXQ7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXHJcbm1hdDMuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpICsgTWF0aC5wb3coYVs0XSwgMikgKyBNYXRoLnBvdyhhWzVdLCAyKSArIE1hdGgucG93KGFbNl0sIDIpICsgTWF0aC5wb3coYVs3XSwgMikgKyBNYXRoLnBvdyhhWzhdLCAyKSkpXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbWF0MzsiLCJcclxuXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB7IEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vdmVjMyc7XHJcbmltcG9ydCB2ZWM0IGZyb20gJy4vdmVjNCc7XHJcbmltcG9ydCBtYXQzIGZyb20gJy4vbWF0Myc7XHJcblxyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyBRdWF0ZXJuaW9uXHJcbiAqIEBuYW1lIHF1YXRcclxuICovXHJcblxyXG52YXIgcXVhdCA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgcXVhdFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gYSBuZXcgcXVhdGVybmlvblxyXG4gKi9cclxucXVhdC5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldHMgYSBxdWF0ZXJuaW9uIHRvIHJlcHJlc2VudCB0aGUgc2hvcnRlc3Qgcm90YXRpb24gZnJvbSBvbmVcclxuICogdmVjdG9yIHRvIGFub3RoZXIuXHJcbiAqXHJcbiAqIEJvdGggdmVjdG9ycyBhcmUgYXNzdW1lZCB0byBiZSB1bml0IGxlbmd0aC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uLlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGluaXRpYWwgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgZGVzdGluYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQucm90YXRpb25UbyA9IChmdW5jdGlvbigpIHtcclxuICAgIHZhciB0bXB2ZWMzID0gdmVjMy5jcmVhdGUoKTtcclxuICAgIHZhciB4VW5pdFZlYzMgPSB2ZWMzLmZyb21WYWx1ZXMoMSwwLDApO1xyXG4gICAgdmFyIHlVbml0VmVjMyA9IHZlYzMuZnJvbVZhbHVlcygwLDEsMCk7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgICAgIHZhciBkb3QgPSB2ZWMzLmRvdChhLCBiKTtcclxuICAgICAgICBpZiAoZG90IDwgLTAuOTk5OTk5KSB7XHJcbiAgICAgICAgICAgIHZlYzMuY3Jvc3ModG1wdmVjMywgeFVuaXRWZWMzLCBhKTtcclxuICAgICAgICAgICAgaWYgKHZlYzMubGVuZ3RoKHRtcHZlYzMpIDwgMC4wMDAwMDEpXHJcbiAgICAgICAgICAgICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIHlVbml0VmVjMywgYSk7XHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHRtcHZlYzMsIHRtcHZlYzMpO1xyXG4gICAgICAgICAgICBxdWF0LnNldEF4aXNBbmdsZShvdXQsIHRtcHZlYzMsIE1hdGguUEkpO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZG90ID4gMC45OTk5OTkpIHtcclxuICAgICAgICAgICAgb3V0WzBdID0gMDtcclxuICAgICAgICAgICAgb3V0WzFdID0gMDtcclxuICAgICAgICAgICAgb3V0WzJdID0gMDtcclxuICAgICAgICAgICAgb3V0WzNdID0gMTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIGEsIGIpO1xyXG4gICAgICAgICAgICBvdXRbMF0gPSB0bXB2ZWMzWzBdO1xyXG4gICAgICAgICAgICBvdXRbMV0gPSB0bXB2ZWMzWzFdO1xyXG4gICAgICAgICAgICBvdXRbMl0gPSB0bXB2ZWMzWzJdO1xyXG4gICAgICAgICAgICBvdXRbM10gPSAxICsgZG90O1xyXG4gICAgICAgICAgICByZXR1cm4gcXVhdC5ub3JtYWxpemUob3V0LCBvdXQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pKCk7XHJcblxyXG4vKipcclxuICogU2V0cyB0aGUgc3BlY2lmaWVkIHF1YXRlcm5pb24gd2l0aCB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW5cclxuICogYXhlcy4gRWFjaCBheGlzIGlzIGEgdmVjMyBhbmQgaXMgZXhwZWN0ZWQgdG8gYmUgdW5pdCBsZW5ndGggYW5kXHJcbiAqIHBlcnBlbmRpY3VsYXIgdG8gYWxsIG90aGVyIHNwZWNpZmllZCBheGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IHZpZXcgIHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSB2aWV3aW5nIGRpcmVjdGlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHJpZ2h0IHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBsb2NhbCBcInJpZ2h0XCIgZGlyZWN0aW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gdXAgICAgdGhlIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGxvY2FsIFwidXBcIiBkaXJlY3Rpb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5zZXRBeGVzID0gKGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG1hdHIgPSBtYXQzLmNyZWF0ZSgpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbihvdXQsIHZpZXcsIHJpZ2h0LCB1cCkge1xyXG4gICAgICAgIG1hdHJbMF0gPSByaWdodFswXTtcclxuICAgICAgICBtYXRyWzNdID0gcmlnaHRbMV07XHJcbiAgICAgICAgbWF0cls2XSA9IHJpZ2h0WzJdO1xyXG5cclxuICAgICAgICBtYXRyWzFdID0gdXBbMF07XHJcbiAgICAgICAgbWF0cls0XSA9IHVwWzFdO1xyXG4gICAgICAgIG1hdHJbN10gPSB1cFsyXTtcclxuXHJcbiAgICAgICAgbWF0clsyXSA9IC12aWV3WzBdO1xyXG4gICAgICAgIG1hdHJbNV0gPSAtdmlld1sxXTtcclxuICAgICAgICBtYXRyWzhdID0gLXZpZXdbMl07XHJcblxyXG4gICAgICAgIHJldHVybiBxdWF0Lm5vcm1hbGl6ZShvdXQsIHF1YXQuZnJvbU1hdDMob3V0LCBtYXRyKSk7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgcXVhdCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXRlcm5pb24gdG8gY2xvbmVcclxuICogQHJldHVybnMge3F1YXR9IGEgbmV3IHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmNsb25lID0gdmVjNC5jbG9uZTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHF1YXQgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBhIG5ldyBxdWF0ZXJuaW9uXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5mcm9tVmFsdWVzID0gdmVjNC5mcm9tVmFsdWVzO1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBxdWF0IHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgc291cmNlIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuY29weSA9IHZlYzQuY29weTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBxdWF0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LnNldCA9IHZlYzQuc2V0O1xyXG5cclxuLyoqXHJcbiAqIFNldCBhIHF1YXQgdG8gdGhlIGlkZW50aXR5IHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldHMgYSBxdWF0IGZyb20gdGhlIGdpdmVuIGFuZ2xlIGFuZCByb3RhdGlvbiBheGlzLFxyXG4gKiB0aGVuIHJldHVybnMgaXQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IGF4aXMgdGhlIGF4aXMgYXJvdW5kIHdoaWNoIHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSBpbiByYWRpYW5zXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICoqL1xyXG5xdWF0LnNldEF4aXNBbmdsZSA9IGZ1bmN0aW9uKG91dCwgYXhpcywgcmFkKSB7XHJcbiAgICByYWQgPSByYWQgKiAwLjU7XHJcbiAgICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XHJcbiAgICBvdXRbMF0gPSBzICogYXhpc1swXTtcclxuICAgIG91dFsxXSA9IHMgKiBheGlzWzFdO1xyXG4gICAgb3V0WzJdID0gcyAqIGF4aXNbMl07XHJcbiAgICBvdXRbM10gPSBNYXRoLmNvcyhyYWQpO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiB6aCA6IOe7leWNleS9jeWQkemHj+iHqui9rFxyXG4gKiBAcGFyYW0gb3V0ICB7cXVhdH1cclxuICogQHBhcmFtIHF1YXQyICB7cXVhdH1cclxuICogQHBhcmFtIGF4aXMgICB7dmVjM31cclxuICogQHBhcmFtIHJhZCAgICB7TnVtYmVyfVxyXG4gKi9cclxuXHJcbnF1YXQucm90YXRlQXhpcyA9IGZ1bmN0aW9uIChvdXQscXVhdDIsYXhpcyxyYWQpIHtcclxuICAgIHZlYzMubm9ybWFsaXplKGF4aXMsYXhpcyk7XHJcbiAgICBxdWF0LnNldEF4aXNBbmdsZShxdWF0MixheGlzLHJhZCk7XHJcbiAgICBxdWF0Lm11bHRpcGx5KG91dCxvdXQscXVhdDIpO1xyXG59XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5hZGQgPSB2ZWM0LmFkZDtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQubXVsdGlwbHkgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZhciBheCA9IGFbMF0sIGF5ID0gYVsxXSwgYXogPSBhWzJdLCBhdyA9IGFbM10sXHJcbiAgICAgICAgYnggPSBiWzBdLCBieSA9IGJbMV0sIGJ6ID0gYlsyXSwgYncgPSBiWzNdO1xyXG5cclxuICAgIG91dFswXSA9IGF4ICogYncgKyBhdyAqIGJ4ICsgYXkgKiBieiAtIGF6ICogYnk7XHJcbiAgICBvdXRbMV0gPSBheSAqIGJ3ICsgYXcgKiBieSArIGF6ICogYnggLSBheCAqIGJ6O1xyXG4gICAgb3V0WzJdID0gYXogKiBidyArIGF3ICogYnogKyBheCAqIGJ5IC0gYXkgKiBieDtcclxuICAgIG91dFszXSA9IGF3ICogYncgLSBheCAqIGJ4IC0gYXkgKiBieSAtIGF6ICogYno7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0Lm11bCA9IHF1YXQubXVsdGlwbHk7XHJcblxyXG4vKipcclxuICogU2NhbGVzIGEgcXVhdCBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuc2NhbGUgPSB2ZWM0LnNjYWxlO1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBxdWF0ZXJuaW9uIGJ5IHRoZSBnaXZlbiBhbmdsZSBhYm91dCB0aGUgWCBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHF1YXQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgYW5nbGUgKGluIHJhZGlhbnMpIHRvIHJvdGF0ZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xyXG5xdWF0LnJvdGF0ZVggPSBmdW5jdGlvbiAob3V0LHJhZCkge1xyXG4gICAgdmFyIHF1YXQyID1bMCwwLDAsMV07XHJcbiAgICB2YXIgYXhpcyA9IFsxLDAsMF07XHJcbiAgICBxdWF0LnJvdGF0ZUF4aXMob3V0LHF1YXQyLGF4aXMscmFkKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIHF1YXRlcm5pb24gYnkgdGhlIGdpdmVuIGFuZ2xlIGFib3V0IHRoZSBZIGF4aXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgcXVhdCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byByb3RhdGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBhbmdsZSAoaW4gcmFkaWFucykgdG8gcm90YXRlXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQucm90YXRlWSA9IGZ1bmN0aW9uIChvdXQscmFkKSB7XHJcbiAgICB2YXIgcXVhdDIgPVswLDAsMCwxXTtcclxuICAgIHZhciBheGlzID0gWzAsMSwwXTtcclxuICAgIHF1YXQucm90YXRlQXhpcyhvdXQscXVhdDIsYXhpcyxyYWQpO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgcXVhdGVybmlvbiBieSB0aGUgZ2l2ZW4gYW5nbGUgYWJvdXQgdGhlIFogYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCBxdWF0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGFuZ2xlIChpbiByYWRpYW5zKSB0byByb3RhdGVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5yb3RhdGVaID0gZnVuY3Rpb24gKG91dCxyYWQpIHtcclxuICAgIHZhciBxdWF0MiA9WzAsMCwwLDFdO1xyXG4gICAgdmFyIGF4aXMgPSBbMCwwLDFdO1xyXG4gICAgcXVhdC5yb3RhdGVBeGlzKG91dCxxdWF0MixheGlzLHJhZCk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIFcgY29tcG9uZW50IG9mIGEgcXVhdCBmcm9tIHRoZSBYLCBZLCBhbmQgWiBjb21wb25lbnRzLlxyXG4gKiBBc3N1bWVzIHRoYXQgcXVhdGVybmlvbiBpcyAxIHVuaXQgaW4gbGVuZ3RoLlxyXG4gKiBBbnkgZXhpc3RpbmcgVyBjb21wb25lbnQgd2lsbCBiZSBpZ25vcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gY2FsY3VsYXRlIFcgY29tcG9uZW50IG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuY2FsY3VsYXRlVyA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIHZhciB4ID0gYVswXSwgeSA9IGFbMV0sIHogPSBhWzJdO1xyXG4gICAgb3V0WzBdID0geDtcclxuICAgIG91dFsxXSA9IHk7XHJcbiAgICBvdXRbMl0gPSB6O1xyXG4gICAgb3V0WzNdID0gTWF0aC5zcXJ0KE1hdGguYWJzKDEuMCAtIHggKiB4IC0geSAqIHkgLSB6ICogeikpO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmRvdCA9IHZlYzQuZG90O1xyXG5cclxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmxlcnAgPSB2ZWM0LmxlcnA7XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBzcGhlcmljYWwgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xyXG5xdWF0LnNsZXJwID0gZnVuY3Rpb24gKG91dCwgYSwgYiwgdCkge1xyXG4gICAgLy8gYmVuY2htYXJrczpcclxuICAgIC8vICAgIGh0dHA6Ly9qc3BlcmYuY29tL3F1YXRlcm5pb24tc2xlcnAtaW1wbGVtZW50YXRpb25zXHJcblxyXG4gICAgdmFyIGF4ID0gYVswXSwgYXkgPSBhWzFdLCBheiA9IGFbMl0sIGF3ID0gYVszXSxcclxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdLCBidyA9IGJbM107XHJcblxyXG4gICAgdmFyICAgICAgICBvbWVnYSwgY29zb20sIHNpbm9tLCBzY2FsZTAsIHNjYWxlMTtcclxuXHJcbiAgICAvLyBjYWxjIGNvc2luZVxyXG4gICAgY29zb20gPSBheCAqIGJ4ICsgYXkgKiBieSArIGF6ICogYnogKyBhdyAqIGJ3O1xyXG4gICAgLy8gYWRqdXN0IHNpZ25zIChpZiBuZWNlc3NhcnkpXHJcbiAgICBpZiAoIGNvc29tIDwgMC4wICkge1xyXG4gICAgICAgIGNvc29tID0gLWNvc29tO1xyXG4gICAgICAgIGJ4ID0gLSBieDtcclxuICAgICAgICBieSA9IC0gYnk7XHJcbiAgICAgICAgYnogPSAtIGJ6O1xyXG4gICAgICAgIGJ3ID0gLSBidztcclxuICAgIH1cclxuICAgIC8vIGNhbGN1bGF0ZSBjb2VmZmljaWVudHNcclxuICAgIGlmICggKDEuMCAtIGNvc29tKSA+IDAuMDAwMDAxICkge1xyXG4gICAgICAgIC8vIHN0YW5kYXJkIGNhc2UgKHNsZXJwKVxyXG4gICAgICAgIG9tZWdhICA9IE1hdGguYWNvcyhjb3NvbSk7XHJcbiAgICAgICAgc2lub20gID0gTWF0aC5zaW4ob21lZ2EpO1xyXG4gICAgICAgIHNjYWxlMCA9IE1hdGguc2luKCgxLjAgLSB0KSAqIG9tZWdhKSAvIHNpbm9tO1xyXG4gICAgICAgIHNjYWxlMSA9IE1hdGguc2luKHQgKiBvbWVnYSkgLyBzaW5vbTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gXCJmcm9tXCIgYW5kIFwidG9cIiBxdWF0ZXJuaW9ucyBhcmUgdmVyeSBjbG9zZVxyXG4gICAgICAgIC8vICAuLi4gc28gd2UgY2FuIGRvIGEgbGluZWFyIGludGVycG9sYXRpb25cclxuICAgICAgICBzY2FsZTAgPSAxLjAgLSB0O1xyXG4gICAgICAgIHNjYWxlMSA9IHQ7XHJcbiAgICB9XHJcbiAgICAvLyBjYWxjdWxhdGUgZmluYWwgdmFsdWVzXHJcbiAgICBvdXRbMF0gPSBzY2FsZTAgKiBheCArIHNjYWxlMSAqIGJ4O1xyXG4gICAgb3V0WzFdID0gc2NhbGUwICogYXkgKyBzY2FsZTEgKiBieTtcclxuICAgIG91dFsyXSA9IHNjYWxlMCAqIGF6ICsgc2NhbGUxICogYno7XHJcbiAgICBvdXRbM10gPSBzY2FsZTAgKiBhdyArIHNjYWxlMSAqIGJ3O1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgaW52ZXJzZSBvZiBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBpbnZlcnNlIG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLFxyXG4gICAgICAgIGRvdCA9IGEwKmEwICsgYTEqYTEgKyBhMiphMiArIGEzKmEzLFxyXG4gICAgICAgIGludkRvdCA9IGRvdCA/IDEuMC9kb3QgOiAwO1xyXG5cclxuICAgIC8vIFRPRE86IFdvdWxkIGJlIGZhc3RlciB0byByZXR1cm4gWzAsMCwwLDBdIGltbWVkaWF0ZWx5IGlmIGRvdCA9PSAwXHJcblxyXG4gICAgb3V0WzBdID0gLWEwKmludkRvdDtcclxuICAgIG91dFsxXSA9IC1hMSppbnZEb3Q7XHJcbiAgICBvdXRbMl0gPSAtYTIqaW52RG90O1xyXG4gICAgb3V0WzNdID0gYTMqaW52RG90O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBjb25qdWdhdGUgb2YgYSBxdWF0XHJcbiAqIElmIHRoZSBxdWF0ZXJuaW9uIGlzIG5vcm1hbGl6ZWQsIHRoaXMgZnVuY3Rpb24gaXMgZmFzdGVyIHRoYW4gcXVhdC5pbnZlcnNlIGFuZCBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byBjYWxjdWxhdGUgY29uanVnYXRlIG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuY29uanVnYXRlID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gLWFbMF07XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIG91dFsyXSA9IC1hWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgbGVuZ3RoIG9mIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gbGVuZ3RoIG9mIGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0Lmxlbmd0aCA9IHZlYzQubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5sZW4gPSBxdWF0Lmxlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuc3F1YXJlZExlbmd0aCA9IHZlYzQuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHF1YXQuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LnNxckxlbiA9IHF1YXQuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdGVybmlvbiB0byBub3JtYWxpemVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQubm9ybWFsaXplID0gdmVjNC5ub3JtYWxpemU7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIHF1YXRlcm5pb24gZnJvbSB0aGUgZ2l2ZW4gM3gzIHJvdGF0aW9uIG1hdHJpeC5cclxuICpcclxuICogTk9URTogVGhlIHJlc3VsdGFudCBxdWF0ZXJuaW9uIGlzIG5vdCBub3JtYWxpemVkLCBzbyB5b3Ugc2hvdWxkIGJlIHN1cmVcclxuICogdG8gcmVub3JtYWxpemUgdGhlIHF1YXRlcm5pb24geW91cnNlbGYgd2hlcmUgbmVjZXNzYXJ5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHttYXQzfSBtIHJvdGF0aW9uIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5mcm9tTWF0MyA9IGZ1bmN0aW9uKG91dCwgbSkge1xyXG4gICAgLy8gQWxnb3JpdGhtIGluIEtlbiBTaG9lbWFrZSdzIGFydGljbGUgaW4gMTk4NyBTSUdHUkFQSCBjb3Vyc2Ugbm90ZXNcclxuICAgIC8vIGFydGljbGUgXCJRdWF0ZXJuaW9uIENhbGN1bHVzIGFuZCBGYXN0IEFuaW1hdGlvblwiLlxyXG4gICAgdmFyIGZUcmFjZSA9IG1bMF0gKyBtWzRdICsgbVs4XTtcclxuICAgIHZhciBmUm9vdDtcclxuXHJcbiAgICBpZiAoIGZUcmFjZSA+IDAuMCApIHtcclxuICAgICAgICAvLyB8d3wgPiAxLzIsIG1heSBhcyB3ZWxsIGNob29zZSB3ID4gMS8yXHJcbiAgICAgICAgZlJvb3QgPSBNYXRoLnNxcnQoZlRyYWNlICsgMS4wKTsgIC8vIDJ3XHJcbiAgICAgICAgb3V0WzNdID0gMC41ICogZlJvb3Q7XHJcbiAgICAgICAgZlJvb3QgPSAwLjUvZlJvb3Q7ICAvLyAxLyg0dylcclxuICAgICAgICBvdXRbMF0gPSAobVs1XS1tWzddKSpmUm9vdDtcclxuICAgICAgICBvdXRbMV0gPSAobVs2XS1tWzJdKSpmUm9vdDtcclxuICAgICAgICBvdXRbMl0gPSAobVsxXS1tWzNdKSpmUm9vdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gfHd8IDw9IDEvMlxyXG4gICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICBpZiAoIG1bNF0gPiBtWzBdIClcclxuICAgICAgICAgIGkgPSAxO1xyXG4gICAgICAgIGlmICggbVs4XSA+IG1baSozK2ldIClcclxuICAgICAgICAgIGkgPSAyO1xyXG4gICAgICAgIHZhciBqID0gKGkrMSklMztcclxuICAgICAgICB2YXIgayA9IChpKzIpJTM7XHJcblxyXG4gICAgICAgIGZSb290ID0gTWF0aC5zcXJ0KG1baSozK2ldLW1baiozK2pdLW1bayozK2tdICsgMS4wKTtcclxuICAgICAgICBvdXRbaV0gPSAwLjUgKiBmUm9vdDtcclxuICAgICAgICBmUm9vdCA9IDAuNSAvIGZSb290O1xyXG4gICAgICAgIG91dFszXSA9IChtW2oqMytrXSAtIG1bayozK2pdKSAqIGZSb290O1xyXG4gICAgICAgIG91dFtqXSA9IChtW2oqMytpXSArIG1baSozK2pdKSAqIGZSb290O1xyXG4gICAgICAgIG91dFtrXSA9IChtW2sqMytpXSArIG1baSozK2tdKSAqIGZSb290O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBxdWF0OyIsIi8vIFNhbXBsZXIgY2xpcCBpcyBlc3BlY2lhbGx5IGZvciB0aGUgYW5pbWF0aW9uIHNhbXBsZXIgaW4gZ2xURlxyXG4vLyBVc2UgVHlwZWQgQXJyYXkgY2FuIHJlZHVjZSBhIGxvdCBvZiBoZWFwIG1lbW9yeVxyXG5cclxuaW1wb3J0IHF1YXQgZnJvbSAnLi4vZ2xtYXRyaXgvcXVhdCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxuLy8gbGVycCBmdW5jdGlvbiB3aXRoIG9mZnNldCBpbiBsYXJnZSBhcnJheVxyXG5mdW5jdGlvbiB2ZWMzbGVycChvdXQsIGEsIGIsIHQsIG9hLCBvYikge1xyXG4gICAgdmFyIGF4ID0gYVtvYV07XHJcbiAgICB2YXIgYXkgPSBhW29hICsgMV07XHJcbiAgICB2YXIgYXogPSBhW29hICsgMl07XHJcbiAgICBvdXRbMF0gPSBheCArIHQgKiAoYltvYl0gLSBheCk7XHJcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYltvYiArIDFdIC0gYXkpO1xyXG4gICAgb3V0WzJdID0gYXogKyB0ICogKGJbb2IgKyAyXSAtIGF6KTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBxdWF0U2xlcnAob3V0LCBhLCBiLCB0LCBvYSwgb2IpIHtcclxuICAgIC8vIGJlbmNobWFya3M6XHJcbiAgICAvLyAgICBodHRwOi8vanNwZXJmLmNvbS9xdWF0ZXJuaW9uLXNsZXJwLWltcGxlbWVudGF0aW9uc1xyXG5cclxuICAgIHZhciBheCA9IGFbMCArIG9hXSwgYXkgPSBhWzEgKyBvYV0sIGF6ID0gYVsyICsgb2FdLCBhdyA9IGFbMyArIG9hXSxcclxuICAgICAgICBieCA9IGJbMCArIG9iXSwgYnkgPSBiWzEgKyBvYl0sIGJ6ID0gYlsyICsgb2JdLCBidyA9IGJbMyArIG9iXTtcclxuXHJcbiAgICB2YXIgb21lZ2EsIGNvc29tLCBzaW5vbSwgc2NhbGUwLCBzY2FsZTE7XHJcblxyXG4gICAgLy8gY2FsYyBjb3NpbmVcclxuICAgIGNvc29tID0gYXggKiBieCArIGF5ICogYnkgKyBheiAqIGJ6ICsgYXcgKiBidztcclxuICAgIC8vIGFkanVzdCBzaWducyAoaWYgbmVjZXNzYXJ5KVxyXG4gICAgaWYgKGNvc29tIDwgMC4wKSB7XHJcbiAgICAgICAgY29zb20gPSAtY29zb207XHJcbiAgICAgICAgYnggPSAtIGJ4O1xyXG4gICAgICAgIGJ5ID0gLSBieTtcclxuICAgICAgICBieiA9IC0gYno7XHJcbiAgICAgICAgYncgPSAtIGJ3O1xyXG4gICAgfVxyXG4gICAgLy8gY2FsY3VsYXRlIGNvZWZmaWNpZW50c1xyXG4gICAgaWYgKCgxLjAgLSBjb3NvbSkgPiAwLjAwMDAwMSkge1xyXG4gICAgICAgIC8vIHN0YW5kYXJkIGNhc2UgKHNsZXJwKVxyXG4gICAgICAgIG9tZWdhICA9IE1hdGguYWNvcyhjb3NvbSk7XHJcbiAgICAgICAgc2lub20gID0gTWF0aC5zaW4ob21lZ2EpO1xyXG4gICAgICAgIHNjYWxlMCA9IE1hdGguc2luKCgxLjAgLSB0KSAqIG9tZWdhKSAvIHNpbm9tO1xyXG4gICAgICAgIHNjYWxlMSA9IE1hdGguc2luKHQgKiBvbWVnYSkgLyBzaW5vbTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vICdmcm9tJyBhbmQgJ3RvJyBxdWF0ZXJuaW9ucyBhcmUgdmVyeSBjbG9zZVxyXG4gICAgICAgIC8vICAuLi4gc28gd2UgY2FuIGRvIGEgbGluZWFyIGludGVycG9sYXRpb25cclxuICAgICAgICBzY2FsZTAgPSAxLjAgLSB0O1xyXG4gICAgICAgIHNjYWxlMSA9IHQ7XHJcbiAgICB9XHJcbiAgICAvLyBjYWxjdWxhdGUgZmluYWwgdmFsdWVzXHJcbiAgICBvdXRbMF0gPSBzY2FsZTAgKiBheCArIHNjYWxlMSAqIGJ4O1xyXG4gICAgb3V0WzFdID0gc2NhbGUwICogYXkgKyBzY2FsZTEgKiBieTtcclxuICAgIG91dFsyXSA9IHNjYWxlMCAqIGF6ICsgc2NhbGUxICogYno7XHJcbiAgICBvdXRbM10gPSBzY2FsZTAgKiBhdyArIHNjYWxlMSAqIGJ3O1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTYW1wbGVyVHJhY2sgbWFuYWdlcyBgcG9zaXRpb25gLCBgcm90YXRpb25gLCBgc2NhbGVgIHRyYWNrcyBpbiBhbmltYXRpb24gb2Ygc2luZ2xlIHNjZW5lIG5vZGUuXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdIFRyYWNrIG5hbWVcclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtvcHRzLnRhcmdldF0gVGFyZ2V0IG5vZGUncyB0cmFuc2Zvcm0gd2lsbCB1cGRhdGVkIGF1dG9tYXRpY2FsbHlcclxuICovXHJcbnZhciBTYW1wbGVyVHJhY2sgPSBmdW5jdGlvbiAob3B0cykge1xyXG4gICAgb3B0cyA9IG9wdHMgfHwge307XHJcblxyXG4gICAgdGhpcy5uYW1lID0gb3B0cy5uYW1lIHx8ICcnO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgdGhpcy50YXJnZXQgPSBvcHRzLnRhcmdldCB8fCBudWxsO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7QXJyYXl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucG9zaXRpb24gPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGlvbiBpcyByZXByZXNlbnRlZCBieSBhIHF1YXRlcm5pb25cclxuICAgICAqIEB0eXBlIHtBcnJheX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5yb3RhdGlvbiA9IHF1YXQuY3JlYXRlKCk7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtBcnJheX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5zY2FsZSA9IHZlYzMuZnJvbVZhbHVlcygxLCAxLCAxKTtcclxuXHJcbiAgICB0aGlzLmNoYW5uZWxzID0ge1xyXG4gICAgICAgIHRpbWU6IG51bGwsXHJcbiAgICAgICAgcG9zaXRpb246IG51bGwsXHJcbiAgICAgICAgcm90YXRpb246IG51bGwsXHJcbiAgICAgICAgc2NhbGU6IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5fY2FjaGVLZXkgPSAwO1xyXG4gICAgdGhpcy5fY2FjaGVUaW1lID0gMDtcclxufTtcclxuXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuc2V0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hhbm5lbHMudGltZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBjaGFubmVscyA9IHRoaXMuY2hhbm5lbHM7XHJcbiAgICB2YXIgbGVuID0gY2hhbm5lbHMudGltZS5sZW5ndGg7XHJcbiAgICB2YXIga2V5ID0gLTE7XHJcbiAgICAvLyBPbmx5IG9uZSBmcmFtZVxyXG4gICAgaWYgKGxlbiA9PT0gMSkge1xyXG4gICAgICAgIGlmIChjaGFubmVscy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICBxdWF0LmNvcHkodGhpcy5yb3RhdGlvbiwgY2hhbm5lbHMucm90YXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbm5lbHMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgdmVjMy5jb3B5KHRoaXMucG9zaXRpb24sIGNoYW5uZWxzLnBvc2l0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnNjYWxlKSB7XHJcbiAgICAgICAgICAgIHZlYzMuY29weSh0aGlzLnNjYWxlLCBjaGFubmVscy5zY2FsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIENsYW1wXHJcbiAgICBlbHNlIGlmICh0aW1lIDw9IGNoYW5uZWxzLnRpbWVbMF0pIHtcclxuICAgICAgICB0aW1lID0gY2hhbm5lbHMudGltZVswXTtcclxuICAgICAgICBrZXkgPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGltZSA+PSBjaGFubmVscy50aW1lW2xlbiAtIDFdKSB7XHJcbiAgICAgICAgdGltZSA9IGNoYW5uZWxzLnRpbWVbbGVuIC0gMV07XHJcbiAgICAgICAga2V5ID0gbGVuIC0gMjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aW1lIDwgdGhpcy5fY2FjaGVUaW1lKSB7XHJcbiAgICAgICAgICAgIHZhciBzID0gTWF0aC5taW4obGVuIC0gMSwgdGhpcy5fY2FjaGVLZXkgKyAxKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHM7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hhbm5lbHMudGltZVtpIC0gMV0gPD0gdGltZSAmJiBjaGFubmVscy50aW1lW2ldID4gdGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9IGkgLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fY2FjaGVLZXk7IGkgPCBsZW4gLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChjaGFubmVscy50aW1lW2ldIDw9IHRpbWUgJiYgY2hhbm5lbHMudGltZVtpICsgMV0gPiB0aW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChrZXkgPiAtMSkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlS2V5ID0ga2V5O1xyXG4gICAgICAgIHRoaXMuX2NhY2hlVGltZSA9IHRpbWU7XHJcbiAgICAgICAgdmFyIHN0YXJ0ID0ga2V5O1xyXG4gICAgICAgIHZhciBlbmQgPSBrZXkgKyAxO1xyXG4gICAgICAgIHZhciBzdGFydFRpbWUgPSBjaGFubmVscy50aW1lW3N0YXJ0XTtcclxuICAgICAgICB2YXIgZW5kVGltZSA9IGNoYW5uZWxzLnRpbWVbZW5kXTtcclxuICAgICAgICB2YXIgcmFuZ2UgPSBlbmRUaW1lIC0gc3RhcnRUaW1lO1xyXG4gICAgICAgIHZhciBwZXJjZW50ID0gcmFuZ2UgPT09IDAgPyAwIDogKHRpbWUgLSBzdGFydFRpbWUpIC8gcmFuZ2U7XHJcblxyXG4gICAgICAgIGlmIChjaGFubmVscy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICBxdWF0U2xlcnAodGhpcy5yb3RhdGlvbiwgY2hhbm5lbHMucm90YXRpb24sIGNoYW5uZWxzLnJvdGF0aW9uLCBwZXJjZW50LCBzdGFydCAqIDQsIGVuZCAqIDQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbm5lbHMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgdmVjM2xlcnAodGhpcy5wb3NpdGlvbiwgY2hhbm5lbHMucG9zaXRpb24sIGNoYW5uZWxzLnBvc2l0aW9uLCBwZXJjZW50LCBzdGFydCAqIDMsIGVuZCAqIDMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbm5lbHMuc2NhbGUpIHtcclxuICAgICAgICAgICAgdmVjM2xlcnAodGhpcy5zY2FsZSwgY2hhbm5lbHMuc2NhbGUsIGNoYW5uZWxzLnNjYWxlLCBwZXJjZW50LCBzdGFydCAqIDMsIGVuZCAqIDMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIExvb3AgaGFuZGxpbmdcclxuICAgIGlmIChrZXkgPT09IGxlbiAtIDIpIHtcclxuICAgICAgICB0aGlzLl9jYWNoZUtleSA9IDA7XHJcbiAgICAgICAgdGhpcy5fY2FjaGVUaW1lID0gMDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwZGF0ZVRhcmdldCgpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFVwZGF0ZSB0cmFuc2Zvcm0gb2YgdGFyZ2V0IG5vZGUgbWFudWFsbHlcclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUudXBkYXRlVGFyZ2V0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGNoYW5uZWxzID0gdGhpcy5jaGFubmVscztcclxuICAgIGlmICh0aGlzLnRhcmdldCkge1xyXG4gICAgICAgIC8vIE9ubHkgdXBkYXRlIHRhcmdldCBwcm9wIGlmIGhhdmUgZGF0YS5cclxuICAgICAgICBpZiAoY2hhbm5lbHMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXQucG9zaXRpb24uc2V0QXJyYXkodGhpcy5wb3NpdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFubmVscy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldC5yb3RhdGlvbi5zZXRBcnJheSh0aGlzLnJvdGF0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnNjYWxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnNjYWxlLnNldEFycmF5KHRoaXMuc2NhbGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5TYW1wbGVyVHJhY2sucHJvdG90eXBlLmdldE1heFRpbWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGFubmVscy50aW1lW3RoaXMuY2hhbm5lbHMudGltZS5sZW5ndGggLSAxXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnRUaW1lXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRUaW1lXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja31cclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuZ2V0U3ViVHJhY2sgPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lKSB7XHJcblxyXG4gICAgdmFyIHN1YkNsaXAgPSBuZXcgU2FtcGxlclRyYWNrKHtcclxuICAgICAgICBuYW1lOiB0aGlzLm5hbWVcclxuICAgIH0pO1xyXG4gICAgdmFyIG1pblRpbWUgPSB0aGlzLmNoYW5uZWxzLnRpbWVbMF07XHJcbiAgICBzdGFydFRpbWUgPSBNYXRoLm1pbihNYXRoLm1heChzdGFydFRpbWUsIG1pblRpbWUpLCB0aGlzLmxpZmUpO1xyXG4gICAgZW5kVGltZSA9IE1hdGgubWluKE1hdGgubWF4KGVuZFRpbWUsIG1pblRpbWUpLCB0aGlzLmxpZmUpO1xyXG5cclxuICAgIHZhciByYW5nZVN0YXJ0ID0gdGhpcy5fZmluZFJhbmdlKHN0YXJ0VGltZSk7XHJcbiAgICB2YXIgcmFuZ2VFbmQgPSB0aGlzLl9maW5kUmFuZ2UoZW5kVGltZSk7XHJcblxyXG4gICAgdmFyIGNvdW50ID0gcmFuZ2VFbmRbMF0gLSByYW5nZVN0YXJ0WzBdICsgMTtcclxuICAgIGlmIChyYW5nZVN0YXJ0WzFdID09PSAwICYmIHJhbmdlRW5kWzFdID09PSAwKSB7XHJcbiAgICAgICAgY291bnQgLT0gMTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYW5uZWxzLnJvdGF0aW9uKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvbiA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQgKiA0KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYW5uZWxzLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5wb3NpdGlvbiA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQgKiAzKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYW5uZWxzLnNjYWxlKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5zY2FsZSA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQgKiAzKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYW5uZWxzLnRpbWUpIHtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnRpbWUgPSBuZXcgRmxvYXQzMkFycmF5KGNvdW50KTtcclxuICAgIH1cclxuICAgIC8vIENsaXAgYXQgdGhlIHN0YXJ0XHJcbiAgICB0aGlzLnNldFRpbWUoc3RhcnRUaW1lKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvbltpXSA9IHRoaXMucm90YXRpb25baV07XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5wb3NpdGlvbltpXSA9IHRoaXMucG9zaXRpb25baV07XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5zY2FsZVtpXSA9IHRoaXMuc2NhbGVbaV07XHJcbiAgICB9XHJcbiAgICBzdWJDbGlwLmNoYW5uZWxzLnRpbWVbMF0gPSAwO1xyXG4gICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvblszXSA9IHRoaXMucm90YXRpb25bM107XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBjb3VudC0xOyBpKyspIHtcclxuICAgICAgICB2YXIgaTI7XHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAzOyBqKyspIHtcclxuICAgICAgICAgICAgaTIgPSByYW5nZVN0YXJ0WzBdICsgaTtcclxuICAgICAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvbltpICogNCArIGpdID0gdGhpcy5jaGFubmVscy5yb3RhdGlvbltpMiAqIDQgKyBqXTtcclxuICAgICAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5wb3NpdGlvbltpICogMyArIGpdID0gdGhpcy5jaGFubmVscy5wb3NpdGlvbltpMiAqIDMgKyBqXTtcclxuICAgICAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5zY2FsZVtpICogMyArIGpdID0gdGhpcy5jaGFubmVscy5zY2FsZVtpMiAqIDMgKyBqXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy50aW1lW2ldID0gdGhpcy5jaGFubmVscy50aW1lW2kyXSAtIHN0YXJ0VGltZTtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uW2kgKiA0ICsgM10gPSB0aGlzLmNoYW5uZWxzLnJvdGF0aW9uW2kyICogNCArIDNdO1xyXG4gICAgfVxyXG4gICAgLy8gQ2xpcCBhdCB0aGUgZW5kXHJcbiAgICB0aGlzLnNldFRpbWUoZW5kVGltZSk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMucm90YXRpb25bKGNvdW50IC0gMSkgKiA0ICsgaV0gPSB0aGlzLnJvdGF0aW9uW2ldO1xyXG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMucG9zaXRpb25bKGNvdW50IC0gMSkgKiAzICsgaV0gPSB0aGlzLnBvc2l0aW9uW2ldO1xyXG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMuc2NhbGVbKGNvdW50IC0gMSkgKiAzICsgaV0gPSB0aGlzLnNjYWxlW2ldO1xyXG4gICAgfVxyXG4gICAgc3ViQ2xpcC5jaGFubmVscy50aW1lWyhjb3VudCAtIDEpXSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XHJcbiAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uWyhjb3VudCAtIDEpICogNCArIDNdID0gdGhpcy5yb3RhdGlvblszXTtcclxuXHJcbiAgICAvLyBUT0RPIHNldCBiYWNrID9cclxuICAgIHN1YkNsaXAubGlmZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XHJcbiAgICByZXR1cm4gc3ViQ2xpcDtcclxufTtcclxuXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuX2ZpbmRSYW5nZSA9IGZ1bmN0aW9uICh0aW1lKSB7XHJcbiAgICB2YXIgY2hhbm5lbHMgPSB0aGlzLmNoYW5uZWxzO1xyXG4gICAgdmFyIGxlbiA9IGNoYW5uZWxzLnRpbWUubGVuZ3RoO1xyXG4gICAgdmFyIHN0YXJ0ID0gLTE7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykge1xyXG4gICAgICAgIGlmIChjaGFubmVscy50aW1lW2ldIDw9IHRpbWUgJiYgY2hhbm5lbHMudGltZVtpKzFdID4gdGltZSkge1xyXG4gICAgICAgICAgICBzdGFydCA9IGk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIHBlcmNlbnQgPSAwO1xyXG4gICAgaWYgKHN0YXJ0ID49IDApIHtcclxuICAgICAgICB2YXIgc3RhcnRUaW1lID0gY2hhbm5lbHMudGltZVtzdGFydF07XHJcbiAgICAgICAgdmFyIGVuZFRpbWUgPSBjaGFubmVscy50aW1lW3N0YXJ0KzFdO1xyXG4gICAgICAgIHZhciBwZXJjZW50ID0gKHRpbWUtc3RhcnRUaW1lKSAvIChlbmRUaW1lLXN0YXJ0VGltZSk7XHJcbiAgICB9XHJcbiAgICAvLyBQZXJjZW50IFswLCAxKVxyXG4gICAgcmV0dXJuIFtzdGFydCwgcGVyY2VudF07XHJcbn07XHJcblxyXG4vKipcclxuICogMUQgYmxlbmRpbmcgYmV0d2VlbiB0d28gY2xpcHNcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzFcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMlxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHdcclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuYmxlbmQxRCA9IGZ1bmN0aW9uICh0MSwgdDIsIHcpIHtcclxuICAgIHZlYzMubGVycCh0aGlzLnBvc2l0aW9uLCB0MS5wb3NpdGlvbiwgdDIucG9zaXRpb24sIHcpO1xyXG4gICAgdmVjMy5sZXJwKHRoaXMuc2NhbGUsIHQxLnNjYWxlLCB0Mi5zY2FsZSwgdyk7XHJcbiAgICBxdWF0LnNsZXJwKHRoaXMucm90YXRpb24sIHQxLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbiwgdyk7XHJcbn07XHJcbi8qKlxyXG4gKiAyRCBibGVuZGluZyBiZXR3ZWVuIHRocmVlIGNsaXBzXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzJcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjM1xyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IGZcclxuICogQHBhcmFtICB7bnVtYmVyfSBnXHJcbiAqL1xyXG5TYW1wbGVyVHJhY2sucHJvdG90eXBlLmJsZW5kMkQgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHExID0gcXVhdC5jcmVhdGUoKTtcclxuICAgIHZhciBxMiA9IHF1YXQuY3JlYXRlKCk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHQxLCB0MiwgdDMsIGYsIGcpIHtcclxuICAgICAgICB2YXIgYSA9IDEgLSBmIC0gZztcclxuXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvblswXSA9IHQxLnBvc2l0aW9uWzBdICogYSArIHQyLnBvc2l0aW9uWzBdICogZiArIHQzLnBvc2l0aW9uWzBdICogZztcclxuICAgICAgICB0aGlzLnBvc2l0aW9uWzFdID0gdDEucG9zaXRpb25bMV0gKiBhICsgdDIucG9zaXRpb25bMV0gKiBmICsgdDMucG9zaXRpb25bMV0gKiBnO1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25bMl0gPSB0MS5wb3NpdGlvblsyXSAqIGEgKyB0Mi5wb3NpdGlvblsyXSAqIGYgKyB0My5wb3NpdGlvblsyXSAqIGc7XHJcblxyXG4gICAgICAgIHRoaXMuc2NhbGVbMF0gPSB0MS5zY2FsZVswXSAqIGEgKyB0Mi5zY2FsZVswXSAqIGYgKyB0My5zY2FsZVswXSAqIGc7XHJcbiAgICAgICAgdGhpcy5zY2FsZVsxXSA9IHQxLnNjYWxlWzFdICogYSArIHQyLnNjYWxlWzFdICogZiArIHQzLnNjYWxlWzFdICogZztcclxuICAgICAgICB0aGlzLnNjYWxlWzJdID0gdDEuc2NhbGVbMl0gKiBhICsgdDIuc2NhbGVbMl0gKiBmICsgdDMuc2NhbGVbMl0gKiBnO1xyXG5cclxuICAgICAgICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2JiMjA1NDAzKHY9dnMuODUpLmFzcHhcclxuICAgICAgICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21pY3Jvc29mdC5kaXJlY3R4X3Nkay5xdWF0ZXJuaW9uLnhtcXVhdGVybmlvbmJhcnljZW50cmljKHY9dnMuODUpLmFzcHhcclxuICAgICAgICB2YXIgcyA9IGYgKyBnO1xyXG4gICAgICAgIGlmIChzID09PSAwKSB7XHJcbiAgICAgICAgICAgIHF1YXQuY29weSh0aGlzLnJvdGF0aW9uLCB0MS5yb3RhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxdWF0LnNsZXJwKHExLCB0MS5yb3RhdGlvbiwgdDIucm90YXRpb24sIHMpO1xyXG4gICAgICAgICAgICBxdWF0LnNsZXJwKHEyLCB0MS5yb3RhdGlvbiwgdDMucm90YXRpb24sIHMpO1xyXG4gICAgICAgICAgICBxdWF0LnNsZXJwKHRoaXMucm90YXRpb24sIHExLCBxMiwgZyAvIHMpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pKCk7XHJcbi8qKlxyXG4gKiBBZGRpdGl2ZSBibGVuZGluZyBiZXR3ZWVuIHR3byBjbGlwc1xyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMVxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMyXHJcbiAqL1xyXG5TYW1wbGVyVHJhY2sucHJvdG90eXBlLmFkZGl0aXZlQmxlbmQgPSBmdW5jdGlvbiAodDEsIHQyKSB7XHJcbiAgICB2ZWMzLmFkZCh0aGlzLnBvc2l0aW9uLCB0MS5wb3NpdGlvbiwgdDIucG9zaXRpb24pO1xyXG4gICAgdmVjMy5hZGQodGhpcy5zY2FsZSwgdDEuc2NhbGUsIHQyLnNjYWxlKTtcclxuICAgIHF1YXQubXVsdGlwbHkodGhpcy5yb3RhdGlvbiwgdDIucm90YXRpb24sIHQxLnJvdGF0aW9uKTtcclxufTtcclxuLyoqXHJcbiAqIFN1YnRyYWN0aXZlIGJsZW5kaW5nIGJldHdlZW4gdHdvIGNsaXBzXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzJcclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuc3VidHJhY3RpdmVCbGVuZCA9IGZ1bmN0aW9uICh0MSwgdDIpIHtcclxuICAgIHZlYzMuc3ViKHRoaXMucG9zaXRpb24sIHQxLnBvc2l0aW9uLCB0Mi5wb3NpdGlvbik7XHJcbiAgICB2ZWMzLnN1Yih0aGlzLnNjYWxlLCB0MS5zY2FsZSwgdDIuc2NhbGUpO1xyXG4gICAgcXVhdC5pbnZlcnQodGhpcy5yb3RhdGlvbiwgdDIucm90YXRpb24pO1xyXG4gICAgcXVhdC5tdWx0aXBseSh0aGlzLnJvdGF0aW9uLCB0aGlzLnJvdGF0aW9uLCB0MS5yb3RhdGlvbik7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xvbmUgYSBuZXcgU2FtcGxlclRyYWNrXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja31cclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgdHJhY2sgPSBTYW1wbGVyVHJhY2sucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICB0cmFjay5jaGFubmVscyA9IHtcclxuICAgICAgICB0aW1lOiB0aGlzLmNoYW5uZWxzLnRpbWUgfHwgbnVsbCxcclxuICAgICAgICBwb3NpdGlvbjogdGhpcy5jaGFubmVscy5wb3NpdGlvbiB8fCBudWxsLFxyXG4gICAgICAgIHJvdGF0aW9uOiB0aGlzLmNoYW5uZWxzLnJvdGF0aW9uIHx8IG51bGwsXHJcbiAgICAgICAgc2NhbGU6IHRoaXMuY2hhbm5lbHMuc2NhbGUgfHwgbnVsbFxyXG4gICAgfTtcclxuICAgIHZlYzMuY29weSh0cmFjay5wb3NpdGlvbiwgdGhpcy5wb3NpdGlvbik7XHJcbiAgICBxdWF0LmNvcHkodHJhY2sucm90YXRpb24sIHRoaXMucm90YXRpb24pO1xyXG4gICAgdmVjMy5jb3B5KHRyYWNrLnNjYWxlLCB0aGlzLnNjYWxlKTtcclxuXHJcbiAgICB0cmFjay50YXJnZXQgPSB0aGlzLnRhcmdldDtcclxuICAgIHRyYWNrLnVwZGF0ZVRhcmdldCgpO1xyXG5cclxuICAgIHJldHVybiB0cmFjaztcclxuXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTYW1wbGVyVHJhY2s7XHJcbiIsIi8qKlxyXG4gKiBFeHRlbmQgYSBzdWIgY2xhc3MgZnJvbSBiYXNlIGNsYXNzXHJcbiAqIEBwYXJhbSB7b2JqZWN0fEZ1bmN0aW9ufSBtYWtlRGVmYXVsdE9wdCBkZWZhdWx0IG9wdGlvbiBvZiB0aGlzIHN1YiBjbGFzcywgbWV0aG9kIG9mIHRoZSBzdWIgY2FuIHVzZSB0aGlzLnh4eCB0byBhY2Nlc3MgdGhpcyBvcHRpb25cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2luaXRpYWxpemVdIEluaXRpYWxpemUgYWZ0ZXIgdGhlIHN1YiBjbGFzcyBpcyBpbnN0YW50aWF0ZWRcclxuICogQHBhcmFtIHtPYmplY3R9IFtwcm90b10gUHJvdG90eXBlIG1ldGhvZHMvcHJvcGVydGllcyBvZiB0aGUgc3ViIGNsYXNzXHJcbiAqIEBtZW1iZXJPZiBjbGF5LmNvcmUubWl4aW4uZXh0ZW5kXHJcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxyXG4gKi9cclxuZnVuY3Rpb24gZGVyaXZlKG1ha2VEZWZhdWx0T3B0LCBpbml0aWFsaXplLypvcHRpb25hbCovLCBwcm90by8qb3B0aW9uYWwqLykge1xyXG5cclxuICAgIGlmICh0eXBlb2YgaW5pdGlhbGl6ZSA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHByb3RvID0gaW5pdGlhbGl6ZTtcclxuICAgICAgICBpbml0aWFsaXplID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgX3N1cGVyID0gdGhpcztcclxuXHJcbiAgICB2YXIgcHJvcExpc3Q7XHJcbiAgICBpZiAoIShtYWtlRGVmYXVsdE9wdCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xyXG4gICAgICAgIC8vIE9wdGltaXplIHRoZSBwcm9wZXJ0eSBpdGVyYXRlIGlmIGl0IGhhdmUgYmVlbiBmaXhlZFxyXG4gICAgICAgIHByb3BMaXN0ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gbWFrZURlZmF1bHRPcHQpIHtcclxuICAgICAgICAgICAgaWYgKG1ha2VEZWZhdWx0T3B0Lmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcExpc3QucHVzaChwcm9wTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHN1YiA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuXHJcbiAgICAgICAgLy8gY2FsbCBzdXBlciBjb25zdHJ1Y3RvclxyXG4gICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG5cclxuICAgICAgICBpZiAobWFrZURlZmF1bHRPcHQgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICAgICAgICAvLyBJbnZva2UgbWFrZURlZmF1bHRPcHQgZWFjaCB0aW1lIGlmIGl0IGlzIGEgZnVuY3Rpb24sIFNvIHdlIGNhbiBtYWtlIHN1cmUgZWFjaFxyXG4gICAgICAgICAgICAvLyBwcm9wZXJ0eSBpbiB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIHNoYXJlZCBieSBtdXRpcGxlIGluc3RhbmNlc1xyXG4gICAgICAgICAgICBleHRlbmQodGhpcywgbWFrZURlZmF1bHRPcHQuY2FsbCh0aGlzLCBvcHRpb25zKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBleHRlbmRXaXRoUHJvcExpc3QodGhpcywgbWFrZURlZmF1bHRPcHQsIHByb3BMaXN0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBzdWIpIHtcclxuICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0aGUgb3JkZXIgb2YgaW5oZXJpdFxyXG4gICAgICAgICAgICB2YXIgaW5pdGlhbGl6ZXJzID0gc3ViLl9faW5pdGlhbGl6ZXJzX187XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpbml0aWFsaXplcnNbaV0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBzYXZlIHN1cGVyIGNvbnN0cnVjdG9yXHJcbiAgICBzdWIuX19zdXBlcl9fID0gX3N1cGVyO1xyXG4gICAgLy8gSW5pdGlhbGl6ZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBhbGwgdGhlIHN1cGVyIGNvbnN0cnVjdG9yIGlzIGNhbGxlZFxyXG4gICAgaWYgKCFfc3VwZXIuX19pbml0aWFsaXplcnNfXykge1xyXG4gICAgICAgIHN1Yi5fX2luaXRpYWxpemVyc19fID0gW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHN1Yi5fX2luaXRpYWxpemVyc19fID0gX3N1cGVyLl9faW5pdGlhbGl6ZXJzX18uc2xpY2UoKTtcclxuICAgIH1cclxuICAgIGlmIChpbml0aWFsaXplKSB7XHJcbiAgICAgICAgc3ViLl9faW5pdGlhbGl6ZXJzX18ucHVzaChpbml0aWFsaXplKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgQ3RvciA9IGZ1bmN0aW9uKCkge307XHJcbiAgICBDdG9yLnByb3RvdHlwZSA9IF9zdXBlci5wcm90b3R5cGU7XHJcbiAgICBzdWIucHJvdG90eXBlID0gbmV3IEN0b3IoKTtcclxuICAgIHN1Yi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWI7XHJcbiAgICBleHRlbmQoc3ViLnByb3RvdHlwZSwgcHJvdG8pO1xyXG5cclxuICAgIC8vIGV4dGVuZCB0aGUgZGVyaXZlIG1ldGhvZCBhcyBhIHN0YXRpYyBtZXRob2Q7XHJcbiAgICBzdWIuZXh0ZW5kID0gX3N1cGVyLmV4dGVuZDtcclxuXHJcbiAgICAvLyBERVBDUkFURURcclxuICAgIHN1Yi5kZXJpdmUgPSBfc3VwZXIuZXh0ZW5kO1xyXG5cclxuICAgIHJldHVybiBzdWI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGV4dGVuZCh0YXJnZXQsIHNvdXJjZSkge1xyXG4gICAgaWYgKCFzb3VyY2UpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBuYW1lIGluIHNvdXJjZSkge1xyXG4gICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gc291cmNlW25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZXh0ZW5kV2l0aFByb3BMaXN0KHRhcmdldCwgc291cmNlLCBwcm9wTGlzdCkge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBwcm9wTmFtZSA9IHByb3BMaXN0W2ldO1xyXG4gICAgICAgIHRhcmdldFtwcm9wTmFtZV0gPSBzb3VyY2VbcHJvcE5hbWVdO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQGFsaWFzIGNsYXkuY29yZS5taXhpbi5leHRlbmRcclxuICogQG1peGluXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcblxyXG4gICAgZXh0ZW5kOiBkZXJpdmUsXHJcblxyXG4gICAgLy8gREVQQ1JBVEVEXHJcbiAgICBkZXJpdmU6IGRlcml2ZVxyXG59O1xyXG4iLCJmdW5jdGlvbiBIYW5kbGVyKGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247XHJcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG59XHJcbi8qKlxyXG4gKiBAbWl4aW5cclxuICogQGFsaWFzIGNsYXkuY29yZS5taXhpbi5ub3RpZmllclxyXG4gKi9cclxudmFyIG5vdGlmaWVyID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUcmlnZ2VyIGV2ZW50XHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqL1xyXG4gICAgdHJpZ2dlcjogZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNPd25Qcm9wZXJ0eSgnX19oYW5kbGVyc19fJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuX19oYW5kbGVyc19fLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBoZGxzID0gdGhpcy5fX2hhbmRsZXJzX19bbmFtZV07XHJcbiAgICAgICAgdmFyIGwgPSBoZGxzLmxlbmd0aCwgaSA9IC0xLCBhcmdzID0gYXJndW1lbnRzO1xyXG4gICAgICAgIC8vIE9wdGltaXplIGFkdmlzZSBmcm9tIGJhY2tib25lXHJcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhkbHNbaV0uYWN0aW9uLmNhbGwoaGRsc1tpXS5jb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKCsraSA8IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCwgYXJnc1sxXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgIHdoaWxlICgrK2kgPCBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGRsc1tpXS5hY3Rpb24uY2FsbChoZGxzW2ldLmNvbnRleHQsIGFyZ3NbMV0sIGFyZ3NbMl0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhkbHNbaV0uYWN0aW9uLmNhbGwoaGRsc1tpXS5jb250ZXh0LCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKCsraSA8IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhkbHNbaV0uYWN0aW9uLmFwcGx5KGhkbHNbaV0uY29udGV4dCwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncywgMSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVyIGV2ZW50IGhhbmRsZXJcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGFjdGlvblxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgb246IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGhhbmRsZXJzID0gdGhpcy5fX2hhbmRsZXJzX18gfHwgKHRoaXMuX19oYW5kbGVyc19fPXt9KTtcclxuICAgICAgICBpZiAoIWhhbmRsZXJzW25hbWVdKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZXJzW25hbWVdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oYXMobmFtZSwgYWN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBoYW5kbGVyID0gbmV3IEhhbmRsZXIoYWN0aW9uLCBjb250ZXh0IHx8IHRoaXMpO1xyXG4gICAgICAgIGhhbmRsZXJzW25hbWVdLnB1c2goaGFuZGxlcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVyIGV2ZW50LCBldmVudCB3aWxsIG9ubHkgYmUgdHJpZ2dlcmVkIG9uY2UgYW5kIHRoZW4gcmVtb3ZlZFxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBvbmNlOiBmdW5jdGlvbihuYW1lLCBhY3Rpb24sIGNvbnRleHQpIHtcclxuICAgICAgICBpZiAoIW5hbWUgfHwgIWFjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVyKCkge1xyXG4gICAgICAgICAgICBzZWxmLm9mZihuYW1lLCB3cmFwcGVyKTtcclxuICAgICAgICAgICAgYWN0aW9uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLm9uKG5hbWUsIHdyYXBwZXIsIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIG9mIG9uY2UoJ2JlZm9yZScgKyBuYW1lKVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBiZWZvcmU6IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmFtZSA9ICdiZWZvcmUnICsgbmFtZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5vbihuYW1lLCBhY3Rpb24sIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIG9mIG9uY2UoJ2FmdGVyJyArIG5hbWUpXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIGFmdGVyOiBmdW5jdGlvbihuYW1lLCBhY3Rpb24sIGNvbnRleHQpIHtcclxuICAgICAgICBpZiAoIW5hbWUgfHwgIWFjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5hbWUgPSAnYWZ0ZXInICsgbmFtZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5vbihuYW1lLCBhY3Rpb24sIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIG9mIG9uKCdzdWNjZXNzJylcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9uY2UoJ3N1Y2Nlc3MnLCBhY3Rpb24sIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIG9mIG9uKCdlcnJvcicpXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBlcnJvcjogZnVuY3Rpb24oYWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub25jZSgnZXJyb3InLCBhY3Rpb24sIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBldmVudCBsaXN0ZW5lclxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGFjdGlvblxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgb2ZmOiBmdW5jdGlvbihuYW1lLCBhY3Rpb24pIHtcclxuXHJcbiAgICAgICAgdmFyIGhhbmRsZXJzID0gdGhpcy5fX2hhbmRsZXJzX18gfHwgKHRoaXMuX19oYW5kbGVyc19fPXt9KTtcclxuXHJcbiAgICAgICAgaWYgKCFhY3Rpb24pIHtcclxuICAgICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaGFuZGxlcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgdmFyIGhkbHMgPSBoYW5kbGVyc1tuYW1lXTtcclxuICAgICAgICAgICAgdmFyIHJldGFpbnMgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uICYmIGhkbHNbaV0uYWN0aW9uICE9PSBhY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXRhaW5zLnB1c2goaGRsc1tpXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSByZXRhaW5zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgcmVnaXN0ZXJlZCB0aGUgZXZlbnQgaGFuZGxlclxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSAgbmFtZVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259ICBhY3Rpb25cclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGhhczogZnVuY3Rpb24obmFtZSwgYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIGhhbmRsZXJzID0gdGhpcy5fX2hhbmRsZXJzX187XHJcblxyXG4gICAgICAgIGlmICghIGhhbmRsZXJzIHx8XHJcbiAgICAgICAgICAgICEgaGFuZGxlcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaGRscyA9IGhhbmRsZXJzW25hbWVdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGRscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaGRsc1tpXS5hY3Rpb24gPT09IGFjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBub3RpZmllcjsiLCJ2YXIgZ3VpZCA9IDA7XHJcblxyXG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcclxudmFyIG5hdGl2ZUZvckVhY2ggPSBBcnJheVByb3RvLmZvckVhY2g7XHJcblxyXG4vKipcclxuICogVXRpbCBmdW5jdGlvbnNcclxuICogQG5hbWVzcGFjZSBjbGF5LmNvcmUudXRpbFxyXG4gKi9cclxudmFyIHV0aWwgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBHVUlEXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgZ2VuR1VJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiArK2d1aWQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWxhdGl2ZSBwYXRoIHRvIGFic29sdXRlIHBhdGhcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gcGF0aFxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBiYXNlUGF0aFxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIHJlbGF0aXZlMmFic29sdXRlOiBmdW5jdGlvbiAocGF0aCwgYmFzZVBhdGgpIHtcclxuICAgICAgICBpZiAoIWJhc2VQYXRoIHx8IHBhdGgubWF0Y2goL15cXC8vKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBhdGhQYXJ0cyA9IHBhdGguc3BsaXQoJy8nKTtcclxuICAgICAgICB2YXIgYmFzZVBhdGhQYXJ0cyA9IGJhc2VQYXRoLnNwbGl0KCcvJyk7XHJcblxyXG4gICAgICAgIHZhciBpdGVtID0gcGF0aFBhcnRzWzBdO1xyXG4gICAgICAgIHdoaWxlKGl0ZW0gPT09ICcuJyB8fCBpdGVtID09PSAnLi4nKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtID09PSAnLi4nKSB7XHJcbiAgICAgICAgICAgICAgICBiYXNlUGF0aFBhcnRzLnBvcCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhdGhQYXJ0cy5zaGlmdCgpO1xyXG4gICAgICAgICAgICBpdGVtID0gcGF0aFBhcnRzWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYmFzZVBhdGhQYXJ0cy5qb2luKCcvJykgKyAnLycgKyBwYXRoUGFydHMuam9pbignLycpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4dGVuZCB0YXJnZXQgd2l0aCBzb3VyY2VcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHNvdXJjZVxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIGV4dGVuZDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtuYW1lXSA9IHNvdXJjZVtuYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4dGVuZCBwcm9wZXJ0aWVzIHRvIHRhcmdldCBpZiBub3QgZXhpc3QuXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBzb3VyY2VcclxuICAgICAqIEByZXR1cm4ge09iamVjdH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBkZWZhdWx0czogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcE5hbWVdID0gc291cmNlW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRXh0ZW5kIHByb3BlcnRpZXMgd2l0aCBhIGdpdmVuIHByb3BlcnR5IGxpc3QgdG8gYXZvaWQgZm9yLi5pbi4uIGl0ZXJhdGlvbi5cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHNvdXJjZVxyXG4gICAgICogQHBhcmFtICB7QXJyYXkuPHN0cmluZz59IHByb3BMaXN0XHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgZXh0ZW5kV2l0aFByb3BMaXN0OiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIHByb3BMaXN0KSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJvcE5hbWUgPSBwcm9wTGlzdFtpXTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wTmFtZV0gPSBzb3VyY2VbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBFeHRlbmQgcHJvcGVydGllcyB0byB0YXJnZXQgaWYgbm90IGV4aXN0LiBXaXRoIGEgZ2l2ZW4gcHJvcGVydHkgbGlzdCBhdm9pZCBmb3IuLmluLi4gaXRlcmF0aW9uLlxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gc291cmNlXHJcbiAgICAgKiBAcGFyYW0gIHtBcnJheS48c3RyaW5nPn0gcHJvcExpc3RcclxuICAgICAqIEByZXR1cm4ge09iamVjdH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBkZWZhdWx0c1dpdGhQcm9wTGlzdDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBwcm9wTGlzdCkge1xyXG4gICAgICAgIGlmIChzb3VyY2UpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHByb3BOYW1lID0gcHJvcExpc3RbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0W3Byb3BOYW1lXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BOYW1lXSA9IHNvdXJjZVtwcm9wTmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge09iamVjdHxBcnJheX0gb2JqXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gaXRlcmF0b3JcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgZWFjaDogZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcclxuICAgICAgICBpZiAoIShvYmogJiYgaXRlcmF0b3IpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iai5mb3JFYWNoICYmIG9iai5mb3JFYWNoID09PSBuYXRpdmVGb3JFYWNoKSB7XHJcbiAgICAgICAgICAgIG9iai5mb3JFYWNoKGl0ZXJhdG9yLCBjb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob2JqLmxlbmd0aCA9PT0gKyBvYmoubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBvYmoubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtrZXldLCBrZXksIG9iaik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXMgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0gIHt9ICBvYmpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgaXNPYmplY3Q6IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqID09PSBPYmplY3Qob2JqKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyBhcnJheSA/XHJcbiAgICAgKiBAcGFyYW0gIHt9ICBvYmpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgaXNBcnJheTogZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KG9iaik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXMgYXJyYXkgbGlrZSwgd2hpY2ggaGF2ZSBhIGxlbmd0aCBwcm9wZXJ0eVxyXG4gICAgICogQHBhcmFtICB7fSAgb2JqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIGlzQXJyYXlMaWtlOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgaWYgKCFvYmopIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9iai5sZW5ndGggPT09ICsgb2JqLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7fSBvYmpcclxuICAgICAqIEByZXR1cm4ge31cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIGlmICghdXRpbC5pc09iamVjdChvYmopKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHV0aWwuaXNBcnJheShvYmopKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmouc2xpY2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodXRpbC5pc0FycmF5TGlrZShvYmopKSB7IC8vIGlzIHR5cGVkIGFycmF5XHJcbiAgICAgICAgICAgIHZhciByZXQgPSBuZXcgb2JqLmNvbnN0cnVjdG9yKG9iai5sZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmV0W2ldID0gb2JqW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdXRpbC5leHRlbmQoe30sIG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdXRpbDtcclxuIiwiaW1wb3J0IGV4dGVuZE1peGluIGZyb20gJy4vbWl4aW4vZXh0ZW5kJztcclxuaW1wb3J0IG5vdGlmaWVyTWl4aW4gZnJvbSAnLi9taXhpbi9ub3RpZmllcic7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4vdXRpbCc7XHJcblxyXG4vKipcclxuICogQmFzZSBjbGFzcyBvZiBhbGwgb2JqZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuY29yZS5CYXNlXHJcbiAqIEBtaXhlcyBjbGF5LmNvcmUubWl4aW4ubm90aWZpZXJcclxuICovXHJcbnZhciBCYXNlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLl9fdWlkX18gPSB1dGlsLmdlbkdVSUQoKTtcclxufTtcclxuXHJcbkJhc2UuX19pbml0aWFsaXplcnNfXyA9IFtcclxuICAgIGZ1bmN0aW9uIChvcHRzKSB7XHJcbiAgICAgICAgdXRpbC5leHRlbmQodGhpcywgb3B0cyk7XHJcbiAgICB9XHJcbl07XHJcblxyXG51dGlsLmV4dGVuZChCYXNlLCBleHRlbmRNaXhpbik7XHJcbnV0aWwuZXh0ZW5kKEJhc2UucHJvdG90eXBlLCBub3RpZmllck1peGluKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJhc2U7XHJcbiIsImZ1bmN0aW9uIGdldChvcHRpb25zKSB7XHJcblxyXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG5cclxuICAgIHhoci5vcGVuKCdnZXQnLCBvcHRpb25zLnVybCk7XHJcbiAgICAvLyBXaXRoIHJlc3BvbnNlIHR5cGUgc2V0IGJyb3dzZXIgY2FuIGdldCBhbmQgcHV0IGJpbmFyeSBkYXRhXHJcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0RPTS9YTUxIdHRwUmVxdWVzdC9TZW5kaW5nX2FuZF9SZWNlaXZpbmdfQmluYXJ5X0RhdGFcclxuICAgIC8vIERlZmF1bHQgaXMgdGV4dCwgYW5kIGl0IGNhbiBiZSBzZXRcclxuICAgIC8vIGFycmF5YnVmZmVyLCBibG9iLCBkb2N1bWVudCwganNvbiwgdGV4dFxyXG4gICAgeGhyLnJlc3BvbnNlVHlwZSA9IG9wdGlvbnMucmVzcG9uc2VUeXBlIHx8ICd0ZXh0JztcclxuXHJcbiAgICBpZiAob3B0aW9ucy5vbnByb2dyZXNzKSB7XHJcbiAgICAgICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0RPTS9YTUxIdHRwUmVxdWVzdC9Vc2luZ19YTUxIdHRwUmVxdWVzdFxyXG4gICAgICAgIHhoci5vbnByb2dyZXNzID0gZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICBpZiAoZS5sZW5ndGhDb21wdXRhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGVyY2VudCA9IGUubG9hZGVkIC8gZS50b3RhbDtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMub25wcm9ncmVzcyhwZXJjZW50LCBlLmxvYWRlZCwgZS50b3RhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9ucHJvZ3Jlc3MobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICBpZiAoeGhyLnN0YXR1cyA+PSA0MDApIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5vbmVycm9yICYmIG9wdGlvbnMub25lcnJvcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5vbmxvYWQgJiYgb3B0aW9ucy5vbmxvYWQoeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgaWYgKG9wdGlvbnMub25lcnJvcikge1xyXG4gICAgICAgIHhoci5vbmVycm9yID0gb3B0aW9ucy5vbmVycm9yO1xyXG4gICAgfVxyXG4gICAgeGhyLnNlbmQobnVsbCk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIGdldDogZ2V0XHJcbn07XHJcbiIsImltcG9ydCByZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XHJcblxyXG52YXIgc3VwcG9ydFdlYkdMO1xyXG5cclxudmFyIHZlbmRvciA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIElmIHN1cHBvcnQgV2ViR0xcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICovXHJcbnZlbmRvci5zdXBwb3J0V2ViR0wgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoc3VwcG9ydFdlYkdMID09IG51bGwpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgIHZhciBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnKTtcclxuICAgICAgICAgICAgaWYgKCFnbCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgc3VwcG9ydFdlYkdMID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIHJldHVybiBzdXBwb3J0V2ViR0w7XHJcbn07XHJcblxyXG52ZW5kb3IuSW50OEFycmF5ID0gdHlwZW9mIEludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEludDhBcnJheTtcclxuXHJcbnZlbmRvci5VaW50OEFycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBVaW50OEFycmF5O1xyXG5cclxudmVuZG9yLlVpbnQxNkFycmF5ID0gdHlwZW9mIFVpbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IEFycmF5IDogVWludDE2QXJyYXk7XHJcblxyXG52ZW5kb3IuVWludDMyQXJyYXkgPSB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBVaW50MzJBcnJheTtcclxuXHJcbnZlbmRvci5JbnQxNkFycmF5ID0gdHlwZW9mIEludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBJbnQxNkFycmF5O1xyXG5cclxudmVuZG9yLkZsb2F0MzJBcnJheSA9IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBGbG9hdDMyQXJyYXk7XHJcblxyXG52ZW5kb3IuRmxvYXQ2NEFycmF5ID0gdHlwZW9mIEZsb2F0NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEZsb2F0NjRBcnJheTtcclxuXHJcbnZhciBnID0ge307XHJcbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgZyA9IHdpbmRvdztcclxufVxyXG5lbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgZyA9IGdsb2JhbDtcclxufVxyXG5cclxuXHJcbnZlbmRvci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnLnJlcXVlc3RBbmltYXRpb25GcmFtZVxyXG4gICAgfHwgZy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZVxyXG4gICAgfHwgZy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcclxuICAgIHx8IGcud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lXHJcbiAgICB8fCBmdW5jdGlvbiAoZnVuYyl7IHNldFRpbWVvdXQoZnVuYywgMTYpOyB9O1xyXG5cclxudmVuZG9yLmNyZWF0ZUNhbnZhcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxufTtcclxuXHJcbnZlbmRvci5jcmVhdGVJbWFnZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBuZXcgZy5JbWFnZSgpO1xyXG59O1xyXG5cclxudmVuZG9yLnJlcXVlc3QgPSB7XHJcbiAgICBnZXQ6IHJlcXVlc3QuZ2V0XHJcbn07XHJcblxyXG52ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChkb20sIHR5cGUsIGZ1bmMsIHVzZUNhcHR1cmUpIHtcclxuICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmMsIHVzZUNhcHR1cmUpO1xyXG59O1xyXG5cclxudmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAoZG9tLCB0eXBlLCBmdW5jKSB7XHJcbiAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBmdW5jKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHZlbmRvcjtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgQW5pbWF0b3IgZnJvbSAnLi9hbmltYXRpb24vQW5pbWF0b3InO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBBbmltYXRpb24gaXMgZ2xvYmFsIHRpbWVsaW5lIHRoYXQgc2NoZWR1bGUgYWxsIGNsaXBzLiBlYWNoIGZyYW1lIGFuaW1hdGlvbiB3aWxsIHNldCB0aGUgdGltZSBvZiBjbGlwcyB0byBjdXJyZW50IGFuZCB1cGRhdGUgdGhlIHN0YXRlcyBvZiBjbGlwc1xyXG4gKiBAY29uc3RydWN0b3IgY2xheS5UaW1lbGluZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgYW5pbWF0aW9uID0gbmV3IGNsYXkuVGltZWxpbmUoKTtcclxuICogdmFyIG5vZGUgPSBuZXcgY2xheS5Ob2RlKCk7XHJcbiAqIGFuaW1hdGlvbi5hbmltYXRlKG5vZGUucG9zaXRpb24pXHJcbiAqICAgICAud2hlbigxMDAwLCB7XHJcbiAqICAgICAgICAgeDogNTAwLFxyXG4gKiAgICAgICAgIHk6IDUwMFxyXG4gKiAgICAgfSlcclxuICogICAgIC53aGVuKDIwMDAsIHtcclxuICogICAgICAgICB4OiAxMDAsXHJcbiAqICAgICAgICAgeTogMTAwXHJcbiAqICAgICB9KVxyXG4gKiAgICAgLndoZW4oMzAwMCwge1xyXG4gKiAgICAgICAgIHo6IDEwXHJcbiAqICAgICB9KVxyXG4gKiAgICAgLnN0YXJ0KCdzcGxpbmUnKTtcclxuICovXHJcbnZhciBUaW1lbGluZSA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuVGltZWxpbmUjICove1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIHN0YWdlIGlzIGFuIG9iamVjdCB3aXRoIHJlbmRlciBtZXRob2QsIGVhY2ggZnJhbWUgaWYgdGhlcmUgZXhpc3RzIGFueSBhbmltYXRpbmcgY2xpcHMsIHN0YWdlLnJlbmRlciB3aWxsIGJlIGNhbGxlZFxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc3RhZ2U6IG51bGwsXHJcblxyXG4gICAgICAgIF9jbGlwczogW10sXHJcblxyXG4gICAgICAgIF9ydW5uaW5nOiBmYWxzZSxcclxuXHJcbiAgICAgICAgX3RpbWU6IDAsXHJcblxyXG4gICAgICAgIF9wYXVzZWQ6IGZhbHNlLFxyXG5cclxuICAgICAgICBfcGF1c2VkVGltZTogMFxyXG4gICAgfTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LlRpbWVsaW5lLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYW5pbWF0b3JcclxuICAgICAqIEBwYXJhbSB7Y2xheS5hbmltYXRlLkFuaW1hdG9yfSBhbmltYXRvclxyXG4gICAgICovXHJcbiAgICBhZGRBbmltYXRvcjogZnVuY3Rpb24gKGFuaW1hdG9yKSB7XHJcbiAgICAgICAgYW5pbWF0b3IuYW5pbWF0aW9uID0gdGhpcztcclxuICAgICAgICB2YXIgY2xpcHMgPSBhbmltYXRvci5nZXRDbGlwcygpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xpcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRDbGlwKGNsaXBzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5DbGlwfSBjbGlwXHJcbiAgICAgKi9cclxuICAgIGFkZENsaXA6IGZ1bmN0aW9uIChjbGlwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NsaXBzLmluZGV4T2YoY2xpcCkgPCAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NsaXBzLnB1c2goY2xpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2xpcDogZnVuY3Rpb24gKGNsaXApIHtcclxuICAgICAgICB2YXIgaWR4ID0gdGhpcy5fY2xpcHMuaW5kZXhPZihjbGlwKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2xpcHMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhbmltYXRvclxyXG4gICAgICogQHBhcmFtIHtjbGF5LmFuaW1hdGUuQW5pbWF0b3J9IGFuaW1hdG9yXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUFuaW1hdG9yOiBmdW5jdGlvbiAoYW5pbWF0b3IpIHtcclxuICAgICAgICB2YXIgY2xpcHMgPSBhbmltYXRvci5nZXRDbGlwcygpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xpcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVDbGlwKGNsaXBzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYW5pbWF0b3IuYW5pbWF0aW9uID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2YXIgdGltZSA9IERhdGUubm93KCkgLSB0aGlzLl9wYXVzZWRUaW1lO1xyXG4gICAgICAgIHZhciBkZWx0YSA9IHRpbWUgLSB0aGlzLl90aW1lO1xyXG4gICAgICAgIHZhciBjbGlwcyA9IHRoaXMuX2NsaXBzO1xyXG4gICAgICAgIHZhciBsZW4gPSBjbGlwcy5sZW5ndGg7XHJcblxyXG4gICAgICAgIHZhciBkZWZlcnJlZEV2ZW50cyA9IFtdO1xyXG4gICAgICAgIHZhciBkZWZlcnJlZENsaXBzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2xpcCA9IGNsaXBzW2ldO1xyXG4gICAgICAgICAgICB2YXIgZSA9IGNsaXAuc3RlcCh0aW1lLCBkZWx0YSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAvLyBUaHJvdyBvdXQgdGhlIGV2ZW50cyBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlclxyXG4gICAgICAgICAgICAvLyBzdGFnZS5yZW5kZXIsIGxpa2UgZmluaXNoXHJcbiAgICAgICAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgICAgICAgICBkZWZlcnJlZEV2ZW50cy5wdXNoKGUpO1xyXG4gICAgICAgICAgICAgICAgZGVmZXJyZWRDbGlwcy5wdXNoKGNsaXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZW1vdmUgdGhlIGZpbmlzaGVkIGNsaXBcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjspIHtcclxuICAgICAgICAgICAgaWYgKGNsaXBzW2ldLl9uZWVkc1JlbW92ZSkge1xyXG4gICAgICAgICAgICAgICAgY2xpcHNbaV0gPSBjbGlwc1tsZW4tMV07XHJcbiAgICAgICAgICAgICAgICBjbGlwcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZW4gPSBkZWZlcnJlZEV2ZW50cy5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBkZWZlcnJlZENsaXBzW2ldLmZpcmUoZGVmZXJyZWRFdmVudHNbaV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdGltZSA9IHRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignZnJhbWUnLCBkZWx0YSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN0YWdlICYmIHRoaXMuc3RhZ2UucmVuZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhZ2UucmVuZGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU3RhcnQgcnVubmluZyBhbmltYXRpb25cclxuICAgICAqL1xyXG4gICAgc3RhcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX3RpbWUgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgICAgICB0aGlzLl9wYXVzZWRUaW1lID0gMDtcclxuXHJcbiAgICAgICAgdmFyIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHZlbmRvci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAoKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLl9ydW5uaW5nKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghc2VsZi5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fdXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcclxuXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wIHJ1bm5pbmcgYW5pbWF0aW9uXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9ydW5uaW5nID0gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGF1c2VcclxuICAgICAqL1xyXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wYXVzZVN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzdW1lXHJcbiAgICAgKi9cclxuICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9wYXVzZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkVGltZSArPSBEYXRlLm5vdygpIC0gdGhpcy5fcGF1c2VTdGFydDtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhbGwgY2xpcHNcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2xpcHNBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9jbGlwcyA9IFtdO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGFuIGFuaW1hdG9yXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbb3B0aW9uc11cclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtvcHRpb25zLmxvb3BdXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW29wdGlvbnMuZ2V0dGVyXVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvcHRpb25zLnNldHRlcl1cclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb3B0aW9ucy5pbnRlcnBvbGF0ZXJdXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5BbmltYXRvcn1cclxuICAgICAqL1xyXG4gICAgYW5pbWF0ZTogZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucykge1xyXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgICAgIHZhciBhbmltYXRvciA9IG5ldyBBbmltYXRvcihcclxuICAgICAgICAgICAgdGFyZ2V0LFxyXG4gICAgICAgICAgICBvcHRpb25zLmxvb3AsXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZ2V0dGVyLFxyXG4gICAgICAgICAgICBvcHRpb25zLnNldHRlcixcclxuICAgICAgICAgICAgb3B0aW9ucy5pbnRlcnBvbGF0ZXJcclxuICAgICAgICApO1xyXG4gICAgICAgIGFuaW1hdG9yLmFuaW1hdGlvbiA9IHRoaXM7XHJcbiAgICAgICAgcmV0dXJuIGFuaW1hdG9yO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRpbWVsaW5lO1xyXG4iLCIvLyBERVBSRUNBVEVEXHJcbmltcG9ydCBUaW1lbGluZSBmcm9tICcuLi9UaW1lbGluZSc7XHJcbmV4cG9ydCBkZWZhdWx0IFRpbWVsaW5lOyIsImltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcblxyXG5pbXBvcnQgcXVhdCBmcm9tICcuLi9nbG1hdHJpeC9xdWF0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG5cclxuLyoqXHJcbiAqXHJcbiAqIEFuaW1hdGlvbiBjbGlwIHRoYXQgbWFuYWdlIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgY2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGlvXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cclxuICogQHBhcmFtIHtBcnJheS48Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrPn0gW29wdHMudHJhY2tzXVxyXG4gKi9cclxudmFyIFRyYWNrQ2xpcCA9IGZ1bmN0aW9uIChvcHRzKSB7XHJcblxyXG4gICAgb3B0cyA9IG9wdHMgfHwge307XHJcblxyXG4gICAgQ2xpcC5jYWxsKHRoaXMsIG9wdHMpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2tbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy50cmFja3MgPSBvcHRzLnRyYWNrcyB8fCBbXTtcclxuXHJcbiAgICB0aGlzLmNhbGNMaWZlRnJvbVRyYWNrcygpO1xyXG59O1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ2xpcC5wcm90b3R5cGUpO1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRyYWNrQ2xpcDtcclxuXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uICh0aW1lLCBkVGltZSwgc2lsZW50KSB7XHJcblxyXG4gICAgdmFyIHJldCA9IENsaXAucHJvdG90eXBlLnN0ZXAuY2FsbCh0aGlzLCB0aW1lLCBkVGltZSwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcclxuICAgICAgICB2YXIgdGltZSA9IHRoaXMuZ2V0RWxhcHNlZFRpbWUoKTtcclxuICAgICAgICAvLyBUT0RPIGxpZmUgbWF5IGJlIGNoYW5nZWQuXHJcbiAgICAgICAgaWYgKHRoaXMuX3JhbmdlKSB7XHJcbiAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9yYW5nZVswXSArIHRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VGltZSh0aW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXHJcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcmFuZ2VcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuc2V0UmFuZ2UgPSBmdW5jdGlvbiAocmFuZ2UpIHtcclxuICAgIHRoaXMuY2FsY0xpZmVGcm9tVHJhY2tzKCk7XHJcbiAgICB0aGlzLl9yYW5nZSA9IHJhbmdlO1xyXG4gICAgaWYgKHJhbmdlKSB7XHJcbiAgICAgICAgcmFuZ2VbMV0gPSBNYXRoLm1pbihyYW5nZVsxXSwgdGhpcy5saWZlKTtcclxuICAgICAgICByYW5nZVswXSA9IE1hdGgubWluKHJhbmdlWzBdLCB0aGlzLmxpZmUpO1xyXG4gICAgICAgIHRoaXMubGlmZSA9IChyYW5nZVsxXSAtIHJhbmdlWzBdKTtcclxuICAgIH1cclxufTtcclxuXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuc2V0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy50cmFja3NbaV0uc2V0VGltZSh0aW1lKTtcclxuICAgIH1cclxufTtcclxuXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuY2FsY0xpZmVGcm9tVHJhY2tzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5saWZlID0gMDtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLmxpZmUgPSBNYXRoLm1heCh0aGlzLmxpZmUsIHRoaXMudHJhY2tzW2ldLmdldE1heFRpbWUoKSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t9IHRyYWNrXHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLmFkZFRyYWNrID0gZnVuY3Rpb24gKHRyYWNrKSB7XHJcbiAgICB0aGlzLnRyYWNrcy5wdXNoKHRyYWNrKTtcclxuICAgIHRoaXMuY2FsY0xpZmVGcm9tVHJhY2tzKCk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t9IHRyYWNrXHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLnJlbW92ZVRhcmNrID0gZnVuY3Rpb24gKHRyYWNrKSB7XHJcbiAgICB2YXIgaWR4ID0gdGhpcy50cmFja3MuaW5kZXhPZih0cmFjayk7XHJcbiAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICB0aGlzLnRyYWNrcy5zcGxpY2UoaWR4LCAxKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnRUaW1lXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRUaW1lXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNMb29wXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH1cclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuZ2V0U3ViQ2xpcCA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUsIGlzTG9vcCkge1xyXG4gICAgdmFyIHN1YkNsaXAgPSBuZXcgVHJhY2tDbGlwKHtcclxuICAgICAgICBuYW1lOiB0aGlzLm5hbWVcclxuICAgIH0pO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgc3ViVHJhY2sgPSB0aGlzLnRyYWNrc1tpXS5nZXRTdWJUcmFjayhzdGFydFRpbWUsIGVuZFRpbWUpO1xyXG4gICAgICAgIHN1YkNsaXAuYWRkVHJhY2soc3ViVHJhY2spO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0xvb3AgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHN1YkNsaXAuc2V0TG9vcChpc0xvb3ApO1xyXG4gICAgfVxyXG5cclxuICAgIHN1YkNsaXAubGlmZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XHJcblxyXG4gICAgcmV0dXJuIHN1YkNsaXA7XHJcbn07XHJcblxyXG4vKipcclxuICogMWQgYmxlbmRpbmcgZnJvbSB0d28gc2tpbm5pbmcgY2xpcHNcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMVxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAyXHJcbiAqIEBwYXJhbSAge251bWJlcn0gd1xyXG4gKi9cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5ibGVuZDFEID0gZnVuY3Rpb24gKGNsaXAxLCBjbGlwMiwgdykge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBjMSA9IGNsaXAxLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgYzIgPSBjbGlwMi50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIHRDbGlwID0gdGhpcy50cmFja3NbaV07XHJcblxyXG4gICAgICAgIHRDbGlwLmJsZW5kMUQoYzEsIGMyLCB3KTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRpdGl2ZSBibGVuZGluZyBmcm9tIHR3byBza2lubmluZyBjbGlwc1xyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDJcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuYWRkaXRpdmVCbGVuZCA9IGZ1bmN0aW9uIChjbGlwMSwgY2xpcDIpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYzEgPSBjbGlwMS50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIGMyID0gY2xpcDIudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciB0Q2xpcCA9IHRoaXMudHJhY2tzW2ldO1xyXG5cclxuICAgICAgICB0Q2xpcC5hZGRpdGl2ZUJsZW5kKGMxLCBjMik7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogU3VidHJhY3RpdmUgYmxlbmRpbmcgZnJvbSB0d28gc2tpbm5pbmcgY2xpcHNcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMVxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAyXHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLnN1YnRyYWN0aXZlQmxlbmQgPSBmdW5jdGlvbiAoY2xpcDEsIGNsaXAyKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGMxID0gY2xpcDEudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciBjMiA9IGNsaXAyLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgdENsaXAgPSB0aGlzLnRyYWNrc1tpXTtcclxuXHJcbiAgICAgICAgdENsaXAuc3VidHJhY3RpdmVCbGVuZChjMSwgYzIpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIDJEIGJsZW5kaW5nIGZyb20gdGhyZWUgc2tpbm5pbmcgY2xpcHNcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMVxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAyXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDNcclxuICogQHBhcmFtICB7bnVtYmVyfSBmXHJcbiAqIEBwYXJhbSAge251bWJlcn0gZ1xyXG4gKi9cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5ibGVuZDJEID0gZnVuY3Rpb24gKGNsaXAxLCBjbGlwMiwgY2xpcDMsIGYsIGcpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYzEgPSBjbGlwMS50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIGMyID0gY2xpcDIudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciBjMyA9IGNsaXAzLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgdENsaXAgPSB0aGlzLnRyYWNrc1tpXTtcclxuXHJcbiAgICAgICAgdENsaXAuYmxlbmQyRChjMSwgYzIsIGMzLCBmLCBnKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb3B5IFNSVCBvZiBhbGwgam9pbnRzIGNsaXBzIGZyb20gYW5vdGhlciBUcmFja0NsaXBcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwXHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoY2xpcCkge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBzVHJhY2sgPSBjbGlwLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgdFRyYWNrID0gdGhpcy50cmFja3NbaV07XHJcblxyXG4gICAgICAgIHZlYzMuY29weSh0VHJhY2sucG9zaXRpb24sIHNUcmFjay5wb3NpdGlvbik7XHJcbiAgICAgICAgdmVjMy5jb3B5KHRUcmFjay5zY2FsZSwgc1RyYWNrLnNjYWxlKTtcclxuICAgICAgICBxdWF0LmNvcHkodFRyYWNrLnJvdGF0aW9uLCBzVHJhY2sucm90YXRpb24pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBjbGlwID0gQ2xpcC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjbGlwLmFkZFRyYWNrKHRoaXMudHJhY2tzW2ldLmNsb25lKCkpO1xyXG4gICAgfVxyXG4gICAgY2xpcC5saWZlID0gdGhpcy5saWZlO1xyXG4gICAgcmV0dXJuIGNsaXA7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUcmFja0NsaXA7XHJcbiIsInZhciBFWFRFTlNJT05fTElTVCA9IFtcclxuICAgICdPRVNfdGV4dHVyZV9mbG9hdCcsXHJcbiAgICAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcsXHJcbiAgICAnT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyJyxcclxuICAgICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhcicsXHJcbiAgICAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyxcclxuICAgICdPRVNfdmVydGV4X2FycmF5X29iamVjdCcsXHJcbiAgICAnT0VTX2VsZW1lbnRfaW5kZXhfdWludCcsXHJcbiAgICAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnLFxyXG4gICAgJ1dFQkdMX2RlcHRoX3RleHR1cmUnLFxyXG4gICAgJ0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycsXHJcbiAgICAnRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCcsXHJcbiAgICAnV0VCR0xfZHJhd19idWZmZXJzJyxcclxuICAgICdFWFRfZnJhZ19kZXB0aCcsXHJcbiAgICAnRVhUX3NSR0InXHJcbl07XHJcblxyXG52YXIgUEFSQU1FVEVSX05BTUVTID0gW1xyXG4gICAgJ01BWF9URVhUVVJFX1NJWkUnLFxyXG4gICAgJ01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUnXHJcbl07XHJcblxyXG5mdW5jdGlvbiBHTEluZm8oX2dsKSB7XHJcbiAgICB2YXIgZXh0ZW5zaW9ucyA9IHt9O1xyXG4gICAgdmFyIHBhcmFtZXRlcnMgPSB7fTtcclxuXHJcbiAgICAvLyBHZXQgd2ViZ2wgZXh0ZW5zaW9uXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEVYVEVOU0lPTl9MSVNULmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGV4dE5hbWUgPSBFWFRFTlNJT05fTElTVFtpXTtcclxuICAgICAgICBjcmVhdGVFeHRlbnNpb24oZXh0TmFtZSk7XHJcbiAgICB9XHJcbiAgICAvLyBHZXQgcGFyYW1ldGVyc1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBQQVJBTUVURVJfTkFNRVMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgbmFtZSA9IFBBUkFNRVRFUl9OQU1FU1tpXTtcclxuICAgICAgICBwYXJhbWV0ZXJzW25hbWVdID0gX2dsLmdldFBhcmFtZXRlcihfZ2xbbmFtZV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2V0RXh0ZW5zaW9uID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICBpZiAoIShuYW1lIGluIGV4dGVuc2lvbnMpKSB7XHJcbiAgICAgICAgICAgIGNyZWF0ZUV4dGVuc2lvbihuYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGV4dGVuc2lvbnNbbmFtZV07XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuZ2V0UGFyYW1ldGVyID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gcGFyYW1ldGVyc1tuYW1lXTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5nZXRNYXhKb2ludE51bWJlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gMTU7XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUV4dGVuc2lvbihuYW1lKSB7XHJcbiAgICAgICAgaWYgKF9nbC5nZXRFeHRlbnNpb24pIHtcclxuICAgICAgICAgICAgdmFyIGV4dCA9IF9nbC5nZXRFeHRlbnNpb24obmFtZSk7XHJcbiAgICAgICAgICAgIGlmICghZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBleHQgPSBfZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfJyArIG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBleHQgPSBfZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfJyArIG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGV4dGVuc2lvbnNbbmFtZV0gPSBleHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHTEluZm87XHJcbiIsIi8qKlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkuY29yZS5nbGVudW1cclxuICogQHNlZSBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3NwZWNzL2xhdGVzdC8xLjAvIzUuMTRcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIC8qIENsZWFyQnVmZmVyTWFzayAqL1xyXG4gICAgREVQVEhfQlVGRkVSX0JJVCAgICAgICAgICAgICAgIDogMHgwMDAwMDEwMCxcclxuICAgIFNURU5DSUxfQlVGRkVSX0JJVCAgICAgICAgICAgICA6IDB4MDAwMDA0MDAsXHJcbiAgICBDT0xPUl9CVUZGRVJfQklUICAgICAgICAgICAgICAgOiAweDAwMDA0MDAwLFxyXG5cclxuICAgIC8qIEJlZ2luTW9kZSAqL1xyXG4gICAgUE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMDAwLFxyXG4gICAgTElORVMgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMDAxLFxyXG4gICAgTElORV9MT09QICAgICAgICAgICAgICAgICAgICAgIDogMHgwMDAyLFxyXG4gICAgTElORV9TVFJJUCAgICAgICAgICAgICAgICAgICAgIDogMHgwMDAzLFxyXG4gICAgVFJJQU5HTEVTICAgICAgICAgICAgICAgICAgICAgIDogMHgwMDA0LFxyXG4gICAgVFJJQU5HTEVfU1RSSVAgICAgICAgICAgICAgICAgIDogMHgwMDA1LFxyXG4gICAgVFJJQU5HTEVfRkFOICAgICAgICAgICAgICAgICAgIDogMHgwMDA2LFxyXG5cclxuICAgIC8qIEFscGhhRnVuY3Rpb24gKG5vdCBzdXBwb3J0ZWQgaW4gRVMyMCkgKi9cclxuICAgIC8qICAgICAgTkVWRVIgKi9cclxuICAgIC8qICAgICAgTEVTUyAqL1xyXG4gICAgLyogICAgICBFUVVBTCAqL1xyXG4gICAgLyogICAgICBMRVFVQUwgKi9cclxuICAgIC8qICAgICAgR1JFQVRFUiAqL1xyXG4gICAgLyogICAgICBOT1RFUVVBTCAqL1xyXG4gICAgLyogICAgICBHRVFVQUwgKi9cclxuICAgIC8qICAgICAgQUxXQVlTICovXHJcblxyXG4gICAgLyogQmxlbmRpbmdGYWN0b3JEZXN0ICovXHJcbiAgICBaRVJPICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwLFxyXG4gICAgT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMSxcclxuICAgIFNSQ19DT0xPUiAgICAgICAgICAgICAgICAgICAgICA6IDB4MDMwMCxcclxuICAgIE9ORV9NSU5VU19TUkNfQ09MT1IgICAgICAgICAgICA6IDB4MDMwMSxcclxuICAgIFNSQ19BTFBIQSAgICAgICAgICAgICAgICAgICAgICA6IDB4MDMwMixcclxuICAgIE9ORV9NSU5VU19TUkNfQUxQSEEgICAgICAgICAgICA6IDB4MDMwMyxcclxuICAgIERTVF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICA6IDB4MDMwNCxcclxuICAgIE9ORV9NSU5VU19EU1RfQUxQSEEgICAgICAgICAgICA6IDB4MDMwNSxcclxuXHJcbiAgICAvKiBCbGVuZGluZ0ZhY3RvclNyYyAqL1xyXG4gICAgLyogICAgICBaRVJPICovXHJcbiAgICAvKiAgICAgIE9ORSAqL1xyXG4gICAgRFNUX0NPTE9SICAgICAgICAgICAgICAgICAgICAgIDogMHgwMzA2LFxyXG4gICAgT05FX01JTlVTX0RTVF9DT0xPUiAgICAgICAgICAgIDogMHgwMzA3LFxyXG4gICAgU1JDX0FMUEhBX1NBVFVSQVRFICAgICAgICAgICAgIDogMHgwMzA4LFxyXG4gICAgLyogICAgICBTUkNfQUxQSEEgKi9cclxuICAgIC8qICAgICAgT05FX01JTlVTX1NSQ19BTFBIQSAqL1xyXG4gICAgLyogICAgICBEU1RfQUxQSEEgKi9cclxuICAgIC8qICAgICAgT05FX01JTlVTX0RTVF9BTFBIQSAqL1xyXG5cclxuICAgIC8qIEJsZW5kRXF1YXRpb25TZXBhcmF0ZSAqL1xyXG4gICAgRlVOQ19BREQgICAgICAgICAgICAgICAgICAgICAgIDogMHg4MDA2LFxyXG4gICAgQkxFTkRfRVFVQVRJT04gICAgICAgICAgICAgICAgIDogMHg4MDA5LFxyXG4gICAgQkxFTkRfRVFVQVRJT05fUkdCICAgICAgICAgICAgIDogMHg4MDA5LCAvKiBzYW1lIGFzIEJMRU5EX0VRVUFUSU9OICovXHJcbiAgICBCTEVORF9FUVVBVElPTl9BTFBIQSAgICAgICAgICAgOiAweDg4M0QsXHJcblxyXG4gICAgLyogQmxlbmRTdWJ0cmFjdCAqL1xyXG4gICAgRlVOQ19TVUJUUkFDVCAgICAgICAgICAgICAgICAgIDogMHg4MDBBLFxyXG4gICAgRlVOQ19SRVZFUlNFX1NVQlRSQUNUICAgICAgICAgIDogMHg4MDBCLFxyXG5cclxuICAgIC8qIFNlcGFyYXRlIEJsZW5kIEZ1bmN0aW9ucyAqL1xyXG4gICAgQkxFTkRfRFNUX1JHQiAgICAgICAgICAgICAgICAgIDogMHg4MEM4LFxyXG4gICAgQkxFTkRfU1JDX1JHQiAgICAgICAgICAgICAgICAgIDogMHg4MEM5LFxyXG4gICAgQkxFTkRfRFNUX0FMUEhBICAgICAgICAgICAgICAgIDogMHg4MENBLFxyXG4gICAgQkxFTkRfU1JDX0FMUEhBICAgICAgICAgICAgICAgIDogMHg4MENCLFxyXG4gICAgQ09OU1RBTlRfQ09MT1IgICAgICAgICAgICAgICAgIDogMHg4MDAxLFxyXG4gICAgT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SICAgICAgIDogMHg4MDAyLFxyXG4gICAgQ09OU1RBTlRfQUxQSEEgICAgICAgICAgICAgICAgIDogMHg4MDAzLFxyXG4gICAgT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBICAgICAgIDogMHg4MDA0LFxyXG4gICAgQkxFTkRfQ09MT1IgICAgICAgICAgICAgICAgICAgIDogMHg4MDA1LFxyXG5cclxuICAgIC8qIEJ1ZmZlciBPYmplY3RzICovXHJcbiAgICBBUlJBWV9CVUZGRVIgICAgICAgICAgICAgICAgICAgOiAweDg4OTIsXHJcbiAgICBFTEVNRU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAgOiAweDg4OTMsXHJcbiAgICBBUlJBWV9CVUZGRVJfQklORElORyAgICAgICAgICAgOiAweDg4OTQsXHJcbiAgICBFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgOiAweDg4OTUsXHJcblxyXG4gICAgU1RSRUFNX0RSQVcgICAgICAgICAgICAgICAgICAgIDogMHg4OEUwLFxyXG4gICAgU1RBVElDX0RSQVcgICAgICAgICAgICAgICAgICAgIDogMHg4OEU0LFxyXG4gICAgRFlOQU1JQ19EUkFXICAgICAgICAgICAgICAgICAgIDogMHg4OEU4LFxyXG5cclxuICAgIEJVRkZFUl9TSVpFICAgICAgICAgICAgICAgICAgICA6IDB4ODc2NCxcclxuICAgIEJVRkZFUl9VU0FHRSAgICAgICAgICAgICAgICAgICA6IDB4ODc2NSxcclxuXHJcbiAgICBDVVJSRU5UX1ZFUlRFWF9BVFRSSUIgICAgICAgICAgOiAweDg2MjYsXHJcblxyXG4gICAgLyogQ3VsbEZhY2VNb2RlICovXHJcbiAgICBGUk9OVCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDA0MDQsXHJcbiAgICBCQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDA0MDUsXHJcbiAgICBGUk9OVF9BTkRfQkFDSyAgICAgICAgICAgICAgICAgOiAweDA0MDgsXHJcblxyXG4gICAgLyogRGVwdGhGdW5jdGlvbiAqL1xyXG4gICAgLyogICAgICBORVZFUiAqL1xyXG4gICAgLyogICAgICBMRVNTICovXHJcbiAgICAvKiAgICAgIEVRVUFMICovXHJcbiAgICAvKiAgICAgIExFUVVBTCAqL1xyXG4gICAgLyogICAgICBHUkVBVEVSICovXHJcbiAgICAvKiAgICAgIE5PVEVRVUFMICovXHJcbiAgICAvKiAgICAgIEdFUVVBTCAqL1xyXG4gICAgLyogICAgICBBTFdBWVMgKi9cclxuXHJcbiAgICAvKiBFbmFibGVDYXAgKi9cclxuICAgIC8qIFRFWFRVUkVfMkQgKi9cclxuICAgIENVTExfRkFDRSAgICAgICAgICAgICAgICAgICAgICA6IDB4MEI0NCxcclxuICAgIEJMRU5EICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MEJFMixcclxuICAgIERJVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MEJEMCxcclxuICAgIFNURU5DSUxfVEVTVCAgICAgICAgICAgICAgICAgICA6IDB4MEI5MCxcclxuICAgIERFUFRIX1RFU1QgICAgICAgICAgICAgICAgICAgICA6IDB4MEI3MSxcclxuICAgIFNDSVNTT1JfVEVTVCAgICAgICAgICAgICAgICAgICA6IDB4MEMxMSxcclxuICAgIFBPTFlHT05fT0ZGU0VUX0ZJTEwgICAgICAgICAgICA6IDB4ODAzNyxcclxuICAgIFNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSAgICAgICA6IDB4ODA5RSxcclxuICAgIFNBTVBMRV9DT1ZFUkFHRSAgICAgICAgICAgICAgICA6IDB4ODBBMCxcclxuXHJcbiAgICAvKiBFcnJvckNvZGUgKi9cclxuICAgIE5PX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICA6IDAsXHJcbiAgICBJTlZBTElEX0VOVU0gICAgICAgICAgICAgICAgICAgOiAweDA1MDAsXHJcbiAgICBJTlZBTElEX1ZBTFVFICAgICAgICAgICAgICAgICAgOiAweDA1MDEsXHJcbiAgICBJTlZBTElEX09QRVJBVElPTiAgICAgICAgICAgICAgOiAweDA1MDIsXHJcbiAgICBPVVRfT0ZfTUVNT1JZICAgICAgICAgICAgICAgICAgOiAweDA1MDUsXHJcblxyXG4gICAgLyogRnJvbnRGYWNlRGlyZWN0aW9uICovXHJcbiAgICBDVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDA5MDAsXHJcbiAgICBDQ1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDA5MDEsXHJcblxyXG4gICAgLyogR2V0UE5hbWUgKi9cclxuICAgIExJTkVfV0lEVEggICAgICAgICAgICAgICAgICAgICA6IDB4MEIyMSxcclxuICAgIEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRSAgICAgICA6IDB4ODQ2RCxcclxuICAgIEFMSUFTRURfTElORV9XSURUSF9SQU5HRSAgICAgICA6IDB4ODQ2RSxcclxuICAgIENVTExfRkFDRV9NT0RFICAgICAgICAgICAgICAgICA6IDB4MEI0NSxcclxuICAgIEZST05UX0ZBQ0UgICAgICAgICAgICAgICAgICAgICA6IDB4MEI0NixcclxuICAgIERFUFRIX1JBTkdFICAgICAgICAgICAgICAgICAgICA6IDB4MEI3MCxcclxuICAgIERFUFRIX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA6IDB4MEI3MixcclxuICAgIERFUFRIX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICA6IDB4MEI3MyxcclxuICAgIERFUFRIX0ZVTkMgICAgICAgICAgICAgICAgICAgICA6IDB4MEI3NCxcclxuICAgIFNURU5DSUxfQ0xFQVJfVkFMVUUgICAgICAgICAgICA6IDB4MEI5MSxcclxuICAgIFNURU5DSUxfRlVOQyAgICAgICAgICAgICAgICAgICA6IDB4MEI5MixcclxuICAgIFNURU5DSUxfRkFJTCAgICAgICAgICAgICAgICAgICA6IDB4MEI5NCxcclxuICAgIFNURU5DSUxfUEFTU19ERVBUSF9GQUlMICAgICAgICA6IDB4MEI5NSxcclxuICAgIFNURU5DSUxfUEFTU19ERVBUSF9QQVNTICAgICAgICA6IDB4MEI5NixcclxuICAgIFNURU5DSUxfUkVGICAgICAgICAgICAgICAgICAgICA6IDB4MEI5NyxcclxuICAgIFNURU5DSUxfVkFMVUVfTUFTSyAgICAgICAgICAgICA6IDB4MEI5MyxcclxuICAgIFNURU5DSUxfV1JJVEVNQVNLICAgICAgICAgICAgICA6IDB4MEI5OCxcclxuICAgIFNURU5DSUxfQkFDS19GVU5DICAgICAgICAgICAgICA6IDB4ODgwMCxcclxuICAgIFNURU5DSUxfQkFDS19GQUlMICAgICAgICAgICAgICA6IDB4ODgwMSxcclxuICAgIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwgICA6IDB4ODgwMixcclxuICAgIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgICA6IDB4ODgwMyxcclxuICAgIFNURU5DSUxfQkFDS19SRUYgICAgICAgICAgICAgICA6IDB4OENBMyxcclxuICAgIFNURU5DSUxfQkFDS19WQUxVRV9NQVNLICAgICAgICA6IDB4OENBNCxcclxuICAgIFNURU5DSUxfQkFDS19XUklURU1BU0sgICAgICAgICA6IDB4OENBNSxcclxuICAgIFZJRVdQT1JUICAgICAgICAgICAgICAgICAgICAgICA6IDB4MEJBMixcclxuICAgIFNDSVNTT1JfQk9YICAgICAgICAgICAgICAgICAgICA6IDB4MEMxMCxcclxuICAgIC8qICAgICAgU0NJU1NPUl9URVNUICovXHJcbiAgICBDT0xPUl9DTEVBUl9WQUxVRSAgICAgICAgICAgICAgOiAweDBDMjIsXHJcbiAgICBDT0xPUl9XUklURU1BU0sgICAgICAgICAgICAgICAgOiAweDBDMjMsXHJcbiAgICBVTlBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgOiAweDBDRjUsXHJcbiAgICBQQUNLX0FMSUdOTUVOVCAgICAgICAgICAgICAgICAgOiAweDBEMDUsXHJcbiAgICBNQVhfVEVYVFVSRV9TSVpFICAgICAgICAgICAgICAgOiAweDBEMzMsXHJcbiAgICBNQVhfVklFV1BPUlRfRElNUyAgICAgICAgICAgICAgOiAweDBEM0EsXHJcbiAgICBTVUJQSVhFTF9CSVRTICAgICAgICAgICAgICAgICAgOiAweDBENTAsXHJcbiAgICBSRURfQklUUyAgICAgICAgICAgICAgICAgICAgICAgOiAweDBENTIsXHJcbiAgICBHUkVFTl9CSVRTICAgICAgICAgICAgICAgICAgICAgOiAweDBENTMsXHJcbiAgICBCTFVFX0JJVFMgICAgICAgICAgICAgICAgICAgICAgOiAweDBENTQsXHJcbiAgICBBTFBIQV9CSVRTICAgICAgICAgICAgICAgICAgICAgOiAweDBENTUsXHJcbiAgICBERVBUSF9CSVRTICAgICAgICAgICAgICAgICAgICAgOiAweDBENTYsXHJcbiAgICBTVEVOQ0lMX0JJVFMgICAgICAgICAgICAgICAgICAgOiAweDBENTcsXHJcbiAgICBQT0xZR09OX09GRlNFVF9VTklUUyAgICAgICAgICAgOiAweDJBMDAsXHJcbiAgICAvKiAgICAgIFBPTFlHT05fT0ZGU0VUX0ZJTEwgKi9cclxuICAgIFBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICA6IDB4ODAzOCxcclxuICAgIFRFWFRVUkVfQklORElOR18yRCAgICAgICAgICAgICA6IDB4ODA2OSxcclxuICAgIFNBTVBMRV9CVUZGRVJTICAgICAgICAgICAgICAgICA6IDB4ODBBOCxcclxuICAgIFNBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgICA6IDB4ODBBOSxcclxuICAgIFNBTVBMRV9DT1ZFUkFHRV9WQUxVRSAgICAgICAgICA6IDB4ODBBQSxcclxuICAgIFNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQgICAgICAgICA6IDB4ODBBQixcclxuXHJcbiAgICAvKiBHZXRUZXh0dXJlUGFyYW1ldGVyICovXHJcbiAgICAvKiAgICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiAqL1xyXG4gICAgLyogICAgICBURVhUVVJFX01JTl9GSUxURVIgKi9cclxuICAgIC8qICAgICAgVEVYVFVSRV9XUkFQX1MgKi9cclxuICAgIC8qICAgICAgVEVYVFVSRV9XUkFQX1QgKi9cclxuXHJcbiAgICBDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyAgICAgOiAweDg2QTMsXHJcblxyXG4gICAgLyogSGludE1vZGUgKi9cclxuICAgIERPTlRfQ0FSRSAgICAgICAgICAgICAgICAgICAgICA6IDB4MTEwMCxcclxuICAgIEZBU1RFU1QgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTEwMSxcclxuICAgIE5JQ0VTVCAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTEwMixcclxuXHJcbiAgICAvKiBIaW50VGFyZ2V0ICovXHJcbiAgICBHRU5FUkFURV9NSVBNQVBfSElOVCAgICAgICAgICAgIDogMHg4MTkyLFxyXG5cclxuICAgIC8qIERhdGFUeXBlICovXHJcbiAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE0MDAsXHJcbiAgICBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAgOiAweDE0MDEsXHJcbiAgICBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE0MDIsXHJcbiAgICBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAgOiAweDE0MDMsXHJcbiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE0MDQsXHJcbiAgICBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAgOiAweDE0MDUsXHJcbiAgICBGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE0MDYsXHJcblxyXG4gICAgLyogUGl4ZWxGb3JtYXQgKi9cclxuICAgIERFUFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICA6IDB4MTkwMixcclxuICAgIEFMUEhBICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTkwNixcclxuICAgIFJHQiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTkwNyxcclxuICAgIFJHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTkwOCxcclxuICAgIExVTUlOQU5DRSAgICAgICAgICAgICAgICAgICAgICA6IDB4MTkwOSxcclxuICAgIExVTUlOQU5DRV9BTFBIQSAgICAgICAgICAgICAgICA6IDB4MTkwQSxcclxuXHJcbiAgICAvKiBQaXhlbFR5cGUgKi9cclxuICAgIC8qICAgICAgVU5TSUdORURfQllURSAqL1xyXG4gICAgVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgIDogMHg4MDMzLFxyXG4gICAgVU5TSUdORURfU0hPUlRfNV81XzVfMSAgICAgICAgIDogMHg4MDM0LFxyXG4gICAgVU5TSUdORURfU0hPUlRfNV82XzUgICAgICAgICAgIDogMHg4MzYzLFxyXG5cclxuICAgIC8qIFNoYWRlcnMgKi9cclxuICAgIEZSQUdNRU5UX1NIQURFUiAgICAgICAgICAgICAgICAgIDogMHg4QjMwLFxyXG4gICAgVkVSVEVYX1NIQURFUiAgICAgICAgICAgICAgICAgICAgOiAweDhCMzEsXHJcbiAgICBNQVhfVkVSVEVYX0FUVFJJQlMgICAgICAgICAgICAgICA6IDB4ODg2OSxcclxuICAgIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTICAgICAgIDogMHg4REZCLFxyXG4gICAgTUFYX1ZBUllJTkdfVkVDVE9SUyAgICAgICAgICAgICAgOiAweDhERkMsXHJcbiAgICBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA6IDB4OEI0RCxcclxuICAgIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgIDogMHg4QjRDLFxyXG4gICAgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgICAgICAgICAgOiAweDg4NzIsXHJcbiAgICBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTICAgICA6IDB4OERGRCxcclxuICAgIFNIQURFUl9UWVBFICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjRGLFxyXG4gICAgREVMRVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgOiAweDhCODAsXHJcbiAgICBMSU5LX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI4MixcclxuICAgIFZBTElEQVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgIDogMHg4QjgzLFxyXG4gICAgQVRUQUNIRURfU0hBREVSUyAgICAgICAgICAgICAgICAgOiAweDhCODUsXHJcbiAgICBBQ1RJVkVfVU5JRk9STVMgICAgICAgICAgICAgICAgICA6IDB4OEI4NixcclxuICAgIEFDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICAgICAgIDogMHg4Qjg5LFxyXG4gICAgU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OICAgICAgICAgOiAweDhCOEMsXHJcbiAgICBDVVJSRU5UX1BST0dSQU0gICAgICAgICAgICAgICAgICA6IDB4OEI4RCxcclxuXHJcbiAgICAvKiBTdGVuY2lsRnVuY3Rpb24gKi9cclxuICAgIE5FVkVSICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwMCxcclxuICAgIExFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwMSxcclxuICAgIEVRVUFMICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwMixcclxuICAgIExFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwMyxcclxuICAgIEdSRUFURVIgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwNCxcclxuICAgIE5PVEVRVUFMICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwNSxcclxuICAgIEdFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwNixcclxuICAgIEFMV0FZUyAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwNyxcclxuXHJcbiAgICAvKiBTdGVuY2lsT3AgKi9cclxuICAgIC8qICAgICAgWkVSTyAqL1xyXG4gICAgS0VFUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRTAwLFxyXG4gICAgUkVQTEFDRSAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRTAxLFxyXG4gICAgSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRTAyLFxyXG4gICAgREVDUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRTAzLFxyXG4gICAgSU5WRVJUICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxNTBBLFxyXG4gICAgSU5DUl9XUkFQICAgICAgICAgICAgICAgICAgICAgIDogMHg4NTA3LFxyXG4gICAgREVDUl9XUkFQICAgICAgICAgICAgICAgICAgICAgIDogMHg4NTA4LFxyXG5cclxuICAgIC8qIFN0cmluZ05hbWUgKi9cclxuICAgIFZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MUYwMCxcclxuICAgIFJFTkRFUkVSICAgICAgICAgICAgICAgICAgICAgICA6IDB4MUYwMSxcclxuICAgIFZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICA6IDB4MUYwMixcclxuXHJcbiAgICAvKiBUZXh0dXJlTWFnRmlsdGVyICovXHJcbiAgICBORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAgOiAweDI2MDAsXHJcbiAgICBMSU5FQVIgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDI2MDEsXHJcblxyXG4gICAgLyogVGV4dHVyZU1pbkZpbHRlciAqL1xyXG4gICAgLyogICAgICBORUFSRVNUICovXHJcbiAgICAvKiAgICAgIExJTkVBUiAqL1xyXG4gICAgTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCAgICAgICAgIDogMHgyNzAwLFxyXG4gICAgTElORUFSX01JUE1BUF9ORUFSRVNUICAgICAgICAgIDogMHgyNzAxLFxyXG4gICAgTkVBUkVTVF9NSVBNQVBfTElORUFSICAgICAgICAgIDogMHgyNzAyLFxyXG4gICAgTElORUFSX01JUE1BUF9MSU5FQVIgICAgICAgICAgIDogMHgyNzAzLFxyXG5cclxuICAgIC8qIFRleHR1cmVQYXJhbWV0ZXJOYW1lICovXHJcbiAgICBURVhUVVJFX01BR19GSUxURVIgICAgICAgICAgICAgOiAweDI4MDAsXHJcbiAgICBURVhUVVJFX01JTl9GSUxURVIgICAgICAgICAgICAgOiAweDI4MDEsXHJcbiAgICBURVhUVVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgOiAweDI4MDIsXHJcbiAgICBURVhUVVJFX1dSQVBfVCAgICAgICAgICAgICAgICAgOiAweDI4MDMsXHJcblxyXG4gICAgLyogVGV4dHVyZVRhcmdldCAqL1xyXG4gICAgVEVYVFVSRV8yRCAgICAgICAgICAgICAgICAgICAgIDogMHgwREUxLFxyXG4gICAgVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxNzAyLFxyXG5cclxuICAgIFRFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAgICA6IDB4ODUxMyxcclxuICAgIFRFWFRVUkVfQklORElOR19DVUJFX01BUCAgICAgICA6IDB4ODUxNCxcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCAgICA6IDB4ODUxNSxcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICA6IDB4ODUxNixcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAgICA6IDB4ODUxNyxcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSAgICA6IDB4ODUxOCxcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAgICA6IDB4ODUxOSxcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAgICA6IDB4ODUxQSxcclxuICAgIE1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgICAgICA6IDB4ODUxQyxcclxuXHJcbiAgICAvKiBUZXh0dXJlVW5pdCAqL1xyXG4gICAgVEVYVFVSRTAgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEMwLFxyXG4gICAgVEVYVFVSRTEgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEMxLFxyXG4gICAgVEVYVFVSRTIgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEMyLFxyXG4gICAgVEVYVFVSRTMgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEMzLFxyXG4gICAgVEVYVFVSRTQgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM0LFxyXG4gICAgVEVYVFVSRTUgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM1LFxyXG4gICAgVEVYVFVSRTYgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM2LFxyXG4gICAgVEVYVFVSRTcgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM3LFxyXG4gICAgVEVYVFVSRTggICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM4LFxyXG4gICAgVEVYVFVSRTkgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM5LFxyXG4gICAgVEVYVFVSRTEwICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENBLFxyXG4gICAgVEVYVFVSRTExICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENCLFxyXG4gICAgVEVYVFVSRTEyICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENDLFxyXG4gICAgVEVYVFVSRTEzICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENELFxyXG4gICAgVEVYVFVSRTE0ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENFLFxyXG4gICAgVEVYVFVSRTE1ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENGLFxyXG4gICAgVEVYVFVSRTE2ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQwLFxyXG4gICAgVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQxLFxyXG4gICAgVEVYVFVSRTE4ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQyLFxyXG4gICAgVEVYVFVSRTE5ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQzLFxyXG4gICAgVEVYVFVSRTIwICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ0LFxyXG4gICAgVEVYVFVSRTIxICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ1LFxyXG4gICAgVEVYVFVSRTIyICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ2LFxyXG4gICAgVEVYVFVSRTIzICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ3LFxyXG4gICAgVEVYVFVSRTI0ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ4LFxyXG4gICAgVEVYVFVSRTI1ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ5LFxyXG4gICAgVEVYVFVSRTI2ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERBLFxyXG4gICAgVEVYVFVSRTI3ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERCLFxyXG4gICAgVEVYVFVSRTI4ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERDLFxyXG4gICAgVEVYVFVSRTI5ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERELFxyXG4gICAgVEVYVFVSRTMwICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERFLFxyXG4gICAgVEVYVFVSRTMxICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERGLFxyXG4gICAgQUNUSVZFX1RFWFRVUkUgICAgICAgICAgICAgICAgIDogMHg4NEUwLFxyXG5cclxuICAgIC8qIFRleHR1cmVXcmFwTW9kZSAqL1xyXG4gICAgUkVQRUFUICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgyOTAxLFxyXG4gICAgQ0xBTVBfVE9fRURHRSAgICAgICAgICAgICAgICAgIDogMHg4MTJGLFxyXG4gICAgTUlSUk9SRURfUkVQRUFUICAgICAgICAgICAgICAgIDogMHg4MzcwLFxyXG5cclxuICAgIC8qIFVuaWZvcm0gVHlwZXMgKi9cclxuICAgIEZMT0FUX1ZFQzIgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1MCxcclxuICAgIEZMT0FUX1ZFQzMgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1MSxcclxuICAgIEZMT0FUX1ZFQzQgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1MixcclxuICAgIElOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1MyxcclxuICAgIElOVF9WRUMzICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1NCxcclxuICAgIElOVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1NSxcclxuICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1NixcclxuICAgIEJPT0xfVkVDMiAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1NyxcclxuICAgIEJPT0xfVkVDMyAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1OCxcclxuICAgIEJPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1OSxcclxuICAgIEZMT0FUX01BVDIgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1QSxcclxuICAgIEZMT0FUX01BVDMgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1QixcclxuICAgIEZMT0FUX01BVDQgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1QyxcclxuICAgIFNBTVBMRVJfMkQgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1RSxcclxuICAgIFNBTVBMRVJfQ1VCRSAgICAgICAgICAgICAgICAgICA6IDB4OEI2MCxcclxuXHJcbiAgICAvKiBWZXJ0ZXggQXJyYXlzICovXHJcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQgICAgICAgIDogMHg4NjIyLFxyXG4gICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFICAgICAgICAgICA6IDB4ODYyMyxcclxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFICAgICAgICAgOiAweDg2MjQsXHJcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUgICAgICAgICAgIDogMHg4NjI1LFxyXG4gICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEICAgICA6IDB4ODg2QSxcclxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUiAgICAgICAgOiAweDg2NDUsXHJcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HIDogMHg4ODlGLFxyXG5cclxuICAgIC8qIFNoYWRlciBTb3VyY2UgKi9cclxuICAgIENPTVBJTEVfU1RBVFVTICAgICAgICAgICAgICAgICA6IDB4OEI4MSxcclxuXHJcbiAgICAvKiBTaGFkZXIgUHJlY2lzaW9uLVNwZWNpZmllZCBUeXBlcyAqL1xyXG4gICAgTE9XX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgIDogMHg4REYwLFxyXG4gICAgTUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgIDogMHg4REYxLFxyXG4gICAgSElHSF9GTE9BVCAgICAgICAgICAgICAgICAgICAgIDogMHg4REYyLFxyXG4gICAgTE9XX0lOVCAgICAgICAgICAgICAgICAgICAgICAgIDogMHg4REYzLFxyXG4gICAgTUVESVVNX0lOVCAgICAgICAgICAgICAgICAgICAgIDogMHg4REY0LFxyXG4gICAgSElHSF9JTlQgICAgICAgICAgICAgICAgICAgICAgIDogMHg4REY1LFxyXG5cclxuICAgIC8qIEZyYW1lYnVmZmVyIE9iamVjdC4gKi9cclxuICAgIEZSQU1FQlVGRkVSICAgICAgICAgICAgICAgICAgICA6IDB4OEQ0MCxcclxuICAgIFJFTkRFUkJVRkZFUiAgICAgICAgICAgICAgICAgICA6IDB4OEQ0MSxcclxuXHJcbiAgICBSR0JBNCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDgwNTYsXHJcbiAgICBSR0I1X0ExICAgICAgICAgICAgICAgICAgICAgICAgOiAweDgwNTcsXHJcbiAgICBSR0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDhENjIsXHJcbiAgICBERVBUSF9DT01QT05FTlQxNiAgICAgICAgICAgICAgOiAweDgxQTUsXHJcbiAgICBTVEVOQ0lMX0lOREVYICAgICAgICAgICAgICAgICAgOiAweDE5MDEsXHJcbiAgICBTVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgOiAweDhENDgsXHJcbiAgICBERVBUSF9TVEVOQ0lMICAgICAgICAgICAgICAgICAgOiAweDg0RjksXHJcblxyXG4gICAgUkVOREVSQlVGRkVSX1dJRFRIICAgICAgICAgICAgIDogMHg4RDQyLFxyXG4gICAgUkVOREVSQlVGRkVSX0hFSUdIVCAgICAgICAgICAgIDogMHg4RDQzLFxyXG4gICAgUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCAgIDogMHg4RDQ0LFxyXG4gICAgUkVOREVSQlVGRkVSX1JFRF9TSVpFICAgICAgICAgIDogMHg4RDUwLFxyXG4gICAgUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUgICAgICAgIDogMHg4RDUxLFxyXG4gICAgUkVOREVSQlVGRkVSX0JMVUVfU0laRSAgICAgICAgIDogMHg4RDUyLFxyXG4gICAgUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUgICAgICAgIDogMHg4RDUzLFxyXG4gICAgUkVOREVSQlVGRkVSX0RFUFRIX1NJWkUgICAgICAgIDogMHg4RDU0LFxyXG4gICAgUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSAgICAgIDogMHg4RDU1LFxyXG5cclxuICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUgICAgICAgICAgIDogMHg4Q0QwLFxyXG4gICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSAgICAgICAgICAgOiAweDhDRDEsXHJcbiAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUwgICAgICAgICA6IDB4OENEMixcclxuICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFIDogMHg4Q0QzLFxyXG5cclxuICAgIENPTE9SX0FUVEFDSE1FTlQwICAgICAgICAgICAgICA6IDB4OENFMCxcclxuICAgIERFUFRIX0FUVEFDSE1FTlQgICAgICAgICAgICAgICA6IDB4OEQwMCxcclxuICAgIFNURU5DSUxfQVRUQUNITUVOVCAgICAgICAgICAgICA6IDB4OEQyMCxcclxuICAgIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCAgICAgICA6IDB4ODIxQSxcclxuXHJcbiAgICBOT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwLFxyXG5cclxuICAgIEZSQU1FQlVGRkVSX0NPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgIDogMHg4Q0Q1LFxyXG4gICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UICAgICAgICAgOiAweDhDRDYsXHJcbiAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCA6IDB4OENENyxcclxuICAgIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyAgICAgICAgIDogMHg4Q0Q5LFxyXG4gICAgRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgOiAweDhDREQsXHJcblxyXG4gICAgRlJBTUVCVUZGRVJfQklORElORyAgICAgICAgICAgIDogMHg4Q0E2LFxyXG4gICAgUkVOREVSQlVGRkVSX0JJTkRJTkcgICAgICAgICAgIDogMHg4Q0E3LFxyXG4gICAgTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgIDogMHg4NEU4LFxyXG5cclxuICAgIElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICA6IDB4MDUwNixcclxuXHJcbiAgICAvKiBXZWJHTC1zcGVjaWZpYyBlbnVtcyAqL1xyXG4gICAgVU5QQUNLX0ZMSVBfWV9XRUJHTCAgICAgICAgICAgIDogMHg5MjQwLFxyXG4gICAgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIDogMHg5MjQxLFxyXG4gICAgQ09OVEVYVF9MT1NUX1dFQkdMICAgICAgICAgICAgIDogMHg5MjQyLFxyXG4gICAgVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCA6IDB4OTI0MyxcclxuICAgIEJST1dTRVJfREVGQVVMVF9XRUJHTCAgICAgICAgICA6IDB4OTI0NCxcclxufTtcclxuIiwiLyoqXHJcbiAqIFNpbXBsZSBkb3VibGUgbGlua2VkIGxpc3QuIENvbXBhcmVkIHdpdGggYXJyYXksIGl0IGhhcyBPKDEpIHJlbW92ZSBvcGVyYXRpb24uXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5jb3JlLkxpbmtlZExpc3RcclxuICovXHJcbnZhciBMaW5rZWRMaXN0ID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLmhlYWQgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRhaWwgPSBudWxsO1xyXG5cclxuICAgIHRoaXMuX2xlbmd0aCA9IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogSW5zZXJ0IGEgbmV3IHZhbHVlIGF0IHRoZSB0YWlsXHJcbiAqIEBwYXJhbSAge30gdmFsXHJcbiAqIEByZXR1cm4ge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24gKHZhbCkge1xyXG4gICAgdmFyIGVudHJ5ID0gbmV3IExpbmtlZExpc3QuRW50cnkodmFsKTtcclxuICAgIHRoaXMuaW5zZXJ0RW50cnkoZW50cnkpO1xyXG4gICAgcmV0dXJuIGVudHJ5O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEluc2VydCBhIG5ldyB2YWx1ZSBhdCBpZHhcclxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gKiBAcGFyYW0gIHt9IHZhbFxyXG4gKiBAcmV0dXJuIHtjbGF5LmNvcmUuTGlua2VkTGlzdC5FbnRyeX1cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmluc2VydEF0ID0gZnVuY3Rpb24gKGlkeCwgdmFsKSB7XHJcbiAgICBpZiAoaWR4IDwgMCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBuZXh0ID0gdGhpcy5oZWFkO1xyXG4gICAgdmFyIGN1cnNvciA9IDA7XHJcbiAgICB3aGlsZSAobmV4dCAmJiBjdXJzb3IgIT0gaWR4KSB7XHJcbiAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcclxuICAgICAgICBjdXJzb3IrKztcclxuICAgIH1cclxuICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gbmV3IExpbmtlZExpc3QuRW50cnkodmFsKTtcclxuICAgICAgICB2YXIgcHJldiA9IG5leHQucHJldjtcclxuICAgICAgICBpZiAoIXByZXYpIHsgLy9uZXh0IGlzIGhlYWRcclxuICAgICAgICAgICAgdGhpcy5oZWFkID0gZW50cnk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBwcmV2Lm5leHQgPSBlbnRyeTtcclxuICAgICAgICAgICAgZW50cnkucHJldiA9IHByZXY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVudHJ5Lm5leHQgPSBuZXh0O1xyXG4gICAgICAgIG5leHQucHJldiA9IGVudHJ5O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pbnNlcnQodmFsKTtcclxuICAgIH1cclxufTtcclxuXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmluc2VydEJlZm9yZUVudHJ5ID0gZnVuY3Rpb24gKHZhbCwgbmV4dCkge1xyXG4gICAgdmFyIGVudHJ5ID0gbmV3IExpbmtlZExpc3QuRW50cnkodmFsKTtcclxuICAgIHZhciBwcmV2ID0gbmV4dC5wcmV2O1xyXG4gICAgaWYgKCFwcmV2KSB7IC8vbmV4dCBpcyBoZWFkXHJcbiAgICAgICAgdGhpcy5oZWFkID0gZW50cnk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBwcmV2Lm5leHQgPSBlbnRyeTtcclxuICAgICAgICBlbnRyeS5wcmV2ID0gcHJldjtcclxuICAgIH1cclxuICAgIGVudHJ5Lm5leHQgPSBuZXh0O1xyXG4gICAgbmV4dC5wcmV2ID0gZW50cnk7XHJcblxyXG4gICAgdGhpcy5fbGVuZ3RoKys7XHJcbn07XHJcblxyXG4vKipcclxuICogSW5zZXJ0IGFuIGVudHJ5IGF0IHRoZSB0YWlsXHJcbiAqIEBwYXJhbSAge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fSBlbnRyeVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuaW5zZXJ0RW50cnkgPSBmdW5jdGlvbiAoZW50cnkpIHtcclxuICAgIGlmICghdGhpcy5oZWFkKSB7XHJcbiAgICAgICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gZW50cnk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnRhaWwubmV4dCA9IGVudHJ5O1xyXG4gICAgICAgIGVudHJ5LnByZXYgPSB0aGlzLnRhaWw7XHJcbiAgICAgICAgdGhpcy50YWlsID0gZW50cnk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9sZW5ndGgrKztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZW1vdmUgZW50cnkuXHJcbiAqIEBwYXJhbSAge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fSBlbnRyeVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGVudHJ5KSB7XHJcbiAgICB2YXIgcHJldiA9IGVudHJ5LnByZXY7XHJcbiAgICB2YXIgbmV4dCA9IGVudHJ5Lm5leHQ7XHJcbiAgICBpZiAocHJldikge1xyXG4gICAgICAgIHByZXYubmV4dCA9IG5leHQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBJcyBoZWFkXHJcbiAgICAgICAgdGhpcy5oZWFkID0gbmV4dDtcclxuICAgIH1cclxuICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgbmV4dC5wcmV2ID0gcHJldjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIElzIHRhaWxcclxuICAgICAgICB0aGlzLnRhaWwgPSBwcmV2O1xyXG4gICAgfVxyXG4gICAgZW50cnkubmV4dCA9IGVudHJ5LnByZXYgPSBudWxsO1xyXG4gICAgdGhpcy5fbGVuZ3RoLS07XHJcbn07XHJcblxyXG4vKipcclxuICogUmVtb3ZlIGVudHJ5IGF0IGluZGV4LlxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IGlkeFxyXG4gKiBAcmV0dXJuIHt9XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5yZW1vdmVBdCA9IGZ1bmN0aW9uIChpZHgpIHtcclxuICAgIGlmIChpZHggPCAwKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGN1cnIgPSB0aGlzLmhlYWQ7XHJcbiAgICB2YXIgY3Vyc29yID0gMDtcclxuICAgIHdoaWxlIChjdXJyICYmIGN1cnNvciAhPSBpZHgpIHtcclxuICAgICAgICBjdXJyID0gY3Vyci5uZXh0O1xyXG4gICAgICAgIGN1cnNvcisrO1xyXG4gICAgfVxyXG4gICAgaWYgKGN1cnIpIHtcclxuICAgICAgICB0aGlzLnJlbW92ZShjdXJyKTtcclxuICAgICAgICByZXR1cm4gY3Vyci52YWx1ZTtcclxuICAgIH1cclxufTtcclxuLyoqXHJcbiAqIEdldCBoZWFkIHZhbHVlXHJcbiAqIEByZXR1cm4ge31cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmdldEhlYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodGhpcy5oZWFkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVhZC52YWx1ZTtcclxuICAgIH1cclxufTtcclxuLyoqXHJcbiAqIEdldCB0YWlsIHZhbHVlXHJcbiAqIEByZXR1cm4ge31cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmdldFRhaWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodGhpcy50YWlsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGFpbC52YWx1ZTtcclxuICAgIH1cclxufTtcclxuLyoqXHJcbiAqIEdldCB2YWx1ZSBhdCBpZHhcclxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gKiBAcmV0dXJuIHt9XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5nZXRBdCA9IGZ1bmN0aW9uIChpZHgpIHtcclxuICAgIGlmIChpZHggPCAwKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGN1cnIgPSB0aGlzLmhlYWQ7XHJcbiAgICB2YXIgY3Vyc29yID0gMDtcclxuICAgIHdoaWxlIChjdXJyICYmIGN1cnNvciAhPSBpZHgpIHtcclxuICAgICAgICBjdXJyID0gY3Vyci5uZXh0O1xyXG4gICAgICAgIGN1cnNvcisrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN1cnIudmFsdWU7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7fSB2YWx1ZVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICB2YXIgY3VyciA9IHRoaXMuaGVhZDtcclxuICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgd2hpbGUgKGN1cnIpIHtcclxuICAgICAgICBpZiAoY3Vyci52YWx1ZSA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGN1cnNvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY3VyciA9IGN1cnIubmV4dDtcclxuICAgICAgICBjdXJzb3IrKztcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIElmIGxpc3QgaXMgZW1wdHlcclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGVuZ3RoID09PSAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYlxyXG4gKiBAcGFyYW0gIHt9IGNvbnRleHRcclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2IsIGNvbnRleHQpIHtcclxuICAgIHZhciBjdXJyID0gdGhpcy5oZWFkO1xyXG4gICAgdmFyIGlkeCA9IDA7XHJcbiAgICB2YXIgaGF2ZUNvbnRleHQgPSB0eXBlb2YoY29udGV4dCkgIT0gJ3VuZGVmaW5lZCc7XHJcbiAgICB3aGlsZSAoY3Vycikge1xyXG4gICAgICAgIGlmIChoYXZlQ29udGV4dCkge1xyXG4gICAgICAgICAgICBjYi5jYWxsKGNvbnRleHQsIGN1cnIudmFsdWUsIGlkeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjYihjdXJyLnZhbHVlLCBpZHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyID0gY3Vyci5uZXh0O1xyXG4gICAgICAgIGlkeCsrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsZWFyIHRoZSBsaXN0XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMudGFpbCA9IHRoaXMuaGVhZCA9IG51bGw7XHJcbiAgICB0aGlzLl9sZW5ndGggPSAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAcGFyYW0ge30gdmFsXHJcbiAqL1xyXG5MaW5rZWRMaXN0LkVudHJ5ID0gZnVuY3Rpb24gKHZhbCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZhbHVlID0gdmFsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLm5leHQgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnByZXYgPSBudWxsO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlua2VkTGlzdDtcclxuIiwiaW1wb3J0IExpbmtlZExpc3QgZnJvbSAnLi9MaW5rZWRMaXN0JztcclxuXHJcbi8qKlxyXG4gKiBMUlUgQ2FjaGVcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmNvcmUuTFJVXHJcbiAqL1xyXG52YXIgTFJVID0gZnVuY3Rpb24gKG1heFNpemUpIHtcclxuXHJcbiAgICB0aGlzLl9saXN0ID0gbmV3IExpbmtlZExpc3QoKTtcclxuXHJcbiAgICB0aGlzLl9tYXAgPSB7fTtcclxuXHJcbiAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZSB8fCAxMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgY2FjaGUgbWF4IHNpemVcclxuICogQHBhcmFtIHtudW1iZXJ9IHNpemVcclxuICovXHJcbkxSVS5wcm90b3R5cGUuc2V0TWF4U2l6ZSA9IGZ1bmN0aW9uIChzaXplKSB7XHJcbiAgICB0aGlzLl9tYXhTaXplID0gc2l6ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGtleVxyXG4gKiBAcGFyYW0gIHt9IHZhbHVlXHJcbiAqL1xyXG5MUlUucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICBpZiAoIXRoaXMuX21hcC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgdmFyIGxlbiA9IHRoaXMuX2xpc3QubGVuZ3RoKCk7XHJcbiAgICAgICAgaWYgKGxlbiA+PSB0aGlzLl9tYXhTaXplICYmIGxlbiA+IDApIHtcclxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkXHJcbiAgICAgICAgICAgIHZhciBsZWFzdFVzZWRFbnRyeSA9IHRoaXMuX2xpc3QuaGVhZDtcclxuICAgICAgICAgICAgdGhpcy5fbGlzdC5yZW1vdmUobGVhc3RVc2VkRW50cnkpO1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fbWFwW2xlYXN0VXNlZEVudHJ5LmtleV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLl9saXN0Lmluc2VydCh2YWx1ZSk7XHJcbiAgICAgICAgZW50cnkua2V5ID0ga2V5O1xyXG4gICAgICAgIHRoaXMuX21hcFtrZXldID0gZW50cnk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7c3RyaW5nfSBrZXlcclxuICogQHJldHVybiB7fVxyXG4gKi9cclxuTFJVLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICB2YXIgZW50cnkgPSB0aGlzLl9tYXBba2V5XTtcclxuICAgIGlmICh0aGlzLl9tYXAuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIC8vIFB1dCB0aGUgbGF0ZXN0IHVzZWQgZW50cnkgaW4gdGhlIHRhaWxcclxuICAgICAgICBpZiAoZW50cnkgIT09IHRoaXMuX2xpc3QudGFpbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9saXN0LnJlbW92ZShlbnRyeSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpc3QuaW5zZXJ0RW50cnkoZW50cnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcclxuICovXHJcbkxSVS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgdmFyIGVudHJ5ID0gdGhpcy5fbWFwW2tleV07XHJcbiAgICBpZiAodHlwZW9mKGVudHJ5KSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5fbWFwW2tleV07XHJcbiAgICAgICAgdGhpcy5fbGlzdC5yZW1vdmUoZW50cnkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsZWFyIHRoZSBjYWNoZVxyXG4gKi9cclxuTFJVLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX2xpc3QuY2xlYXIoKTtcclxuICAgIHRoaXMuX21hcCA9IHt9O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTFJVO1xyXG4iLCIvKipcclxuICogQG5hbWVzcGFjZSBjbGF5LmNvcmUuY29sb3JcclxuICovXHJcbmltcG9ydCBMUlUgZnJvbSAnLi4vY29yZS9MUlUnO1xyXG5cclxudmFyIGNvbG9yVXRpbCA9IHt9O1xyXG5cclxudmFyIGtDU1NDb2xvclRhYmxlID0ge1xyXG4gICAgJ3RyYW5zcGFyZW50JzogWzAsMCwwLDBdLCAnYWxpY2VibHVlJzogWzI0MCwyNDgsMjU1LDFdLFxyXG4gICAgJ2FudGlxdWV3aGl0ZSc6IFsyNTAsMjM1LDIxNSwxXSwgJ2FxdWEnOiBbMCwyNTUsMjU1LDFdLFxyXG4gICAgJ2FxdWFtYXJpbmUnOiBbMTI3LDI1NSwyMTIsMV0sICdhenVyZSc6IFsyNDAsMjU1LDI1NSwxXSxcclxuICAgICdiZWlnZSc6IFsyNDUsMjQ1LDIyMCwxXSwgJ2Jpc3F1ZSc6IFsyNTUsMjI4LDE5NiwxXSxcclxuICAgICdibGFjayc6IFswLDAsMCwxXSwgJ2JsYW5jaGVkYWxtb25kJzogWzI1NSwyMzUsMjA1LDFdLFxyXG4gICAgJ2JsdWUnOiBbMCwwLDI1NSwxXSwgJ2JsdWV2aW9sZXQnOiBbMTM4LDQzLDIyNiwxXSxcclxuICAgICdicm93bic6IFsxNjUsNDIsNDIsMV0sICdidXJseXdvb2QnOiBbMjIyLDE4NCwxMzUsMV0sXHJcbiAgICAnY2FkZXRibHVlJzogWzk1LDE1OCwxNjAsMV0sICdjaGFydHJldXNlJzogWzEyNywyNTUsMCwxXSxcclxuICAgICdjaG9jb2xhdGUnOiBbMjEwLDEwNSwzMCwxXSwgJ2NvcmFsJzogWzI1NSwxMjcsODAsMV0sXHJcbiAgICAnY29ybmZsb3dlcmJsdWUnOiBbMTAwLDE0OSwyMzcsMV0sICdjb3Juc2lsayc6IFsyNTUsMjQ4LDIyMCwxXSxcclxuICAgICdjcmltc29uJzogWzIyMCwyMCw2MCwxXSwgJ2N5YW4nOiBbMCwyNTUsMjU1LDFdLFxyXG4gICAgJ2RhcmtibHVlJzogWzAsMCwxMzksMV0sICdkYXJrY3lhbic6IFswLDEzOSwxMzksMV0sXHJcbiAgICAnZGFya2dvbGRlbnJvZCc6IFsxODQsMTM0LDExLDFdLCAnZGFya2dyYXknOiBbMTY5LDE2OSwxNjksMV0sXHJcbiAgICAnZGFya2dyZWVuJzogWzAsMTAwLDAsMV0sICdkYXJrZ3JleSc6IFsxNjksMTY5LDE2OSwxXSxcclxuICAgICdkYXJra2hha2knOiBbMTg5LDE4MywxMDcsMV0sICdkYXJrbWFnZW50YSc6IFsxMzksMCwxMzksMV0sXHJcbiAgICAnZGFya29saXZlZ3JlZW4nOiBbODUsMTA3LDQ3LDFdLCAnZGFya29yYW5nZSc6IFsyNTUsMTQwLDAsMV0sXHJcbiAgICAnZGFya29yY2hpZCc6IFsxNTMsNTAsMjA0LDFdLCAnZGFya3JlZCc6IFsxMzksMCwwLDFdLFxyXG4gICAgJ2RhcmtzYWxtb24nOiBbMjMzLDE1MCwxMjIsMV0sICdkYXJrc2VhZ3JlZW4nOiBbMTQzLDE4OCwxNDMsMV0sXHJcbiAgICAnZGFya3NsYXRlYmx1ZSc6IFs3Miw2MSwxMzksMV0sICdkYXJrc2xhdGVncmF5JzogWzQ3LDc5LDc5LDFdLFxyXG4gICAgJ2RhcmtzbGF0ZWdyZXknOiBbNDcsNzksNzksMV0sICdkYXJrdHVycXVvaXNlJzogWzAsMjA2LDIwOSwxXSxcclxuICAgICdkYXJrdmlvbGV0JzogWzE0OCwwLDIxMSwxXSwgJ2RlZXBwaW5rJzogWzI1NSwyMCwxNDcsMV0sXHJcbiAgICAnZGVlcHNreWJsdWUnOiBbMCwxOTEsMjU1LDFdLCAnZGltZ3JheSc6IFsxMDUsMTA1LDEwNSwxXSxcclxuICAgICdkaW1ncmV5JzogWzEwNSwxMDUsMTA1LDFdLCAnZG9kZ2VyYmx1ZSc6IFszMCwxNDQsMjU1LDFdLFxyXG4gICAgJ2ZpcmVicmljayc6IFsxNzgsMzQsMzQsMV0sICdmbG9yYWx3aGl0ZSc6IFsyNTUsMjUwLDI0MCwxXSxcclxuICAgICdmb3Jlc3RncmVlbic6IFszNCwxMzksMzQsMV0sICdmdWNoc2lhJzogWzI1NSwwLDI1NSwxXSxcclxuICAgICdnYWluc2Jvcm8nOiBbMjIwLDIyMCwyMjAsMV0sICdnaG9zdHdoaXRlJzogWzI0OCwyNDgsMjU1LDFdLFxyXG4gICAgJ2dvbGQnOiBbMjU1LDIxNSwwLDFdLCAnZ29sZGVucm9kJzogWzIxOCwxNjUsMzIsMV0sXHJcbiAgICAnZ3JheSc6IFsxMjgsMTI4LDEyOCwxXSwgJ2dyZWVuJzogWzAsMTI4LDAsMV0sXHJcbiAgICAnZ3JlZW55ZWxsb3cnOiBbMTczLDI1NSw0NywxXSwgJ2dyZXknOiBbMTI4LDEyOCwxMjgsMV0sXHJcbiAgICAnaG9uZXlkZXcnOiBbMjQwLDI1NSwyNDAsMV0sICdob3RwaW5rJzogWzI1NSwxMDUsMTgwLDFdLFxyXG4gICAgJ2luZGlhbnJlZCc6IFsyMDUsOTIsOTIsMV0sICdpbmRpZ28nOiBbNzUsMCwxMzAsMV0sXHJcbiAgICAnaXZvcnknOiBbMjU1LDI1NSwyNDAsMV0sICdraGFraSc6IFsyNDAsMjMwLDE0MCwxXSxcclxuICAgICdsYXZlbmRlcic6IFsyMzAsMjMwLDI1MCwxXSwgJ2xhdmVuZGVyYmx1c2gnOiBbMjU1LDI0MCwyNDUsMV0sXHJcbiAgICAnbGF3bmdyZWVuJzogWzEyNCwyNTIsMCwxXSwgJ2xlbW9uY2hpZmZvbic6IFsyNTUsMjUwLDIwNSwxXSxcclxuICAgICdsaWdodGJsdWUnOiBbMTczLDIxNiwyMzAsMV0sICdsaWdodGNvcmFsJzogWzI0MCwxMjgsMTI4LDFdLFxyXG4gICAgJ2xpZ2h0Y3lhbic6IFsyMjQsMjU1LDI1NSwxXSwgJ2xpZ2h0Z29sZGVucm9keWVsbG93JzogWzI1MCwyNTAsMjEwLDFdLFxyXG4gICAgJ2xpZ2h0Z3JheSc6IFsyMTEsMjExLDIxMSwxXSwgJ2xpZ2h0Z3JlZW4nOiBbMTQ0LDIzOCwxNDQsMV0sXHJcbiAgICAnbGlnaHRncmV5JzogWzIxMSwyMTEsMjExLDFdLCAnbGlnaHRwaW5rJzogWzI1NSwxODIsMTkzLDFdLFxyXG4gICAgJ2xpZ2h0c2FsbW9uJzogWzI1NSwxNjAsMTIyLDFdLCAnbGlnaHRzZWFncmVlbic6IFszMiwxNzgsMTcwLDFdLFxyXG4gICAgJ2xpZ2h0c2t5Ymx1ZSc6IFsxMzUsMjA2LDI1MCwxXSwgJ2xpZ2h0c2xhdGVncmF5JzogWzExOSwxMzYsMTUzLDFdLFxyXG4gICAgJ2xpZ2h0c2xhdGVncmV5JzogWzExOSwxMzYsMTUzLDFdLCAnbGlnaHRzdGVlbGJsdWUnOiBbMTc2LDE5NiwyMjIsMV0sXHJcbiAgICAnbGlnaHR5ZWxsb3cnOiBbMjU1LDI1NSwyMjQsMV0sICdsaW1lJzogWzAsMjU1LDAsMV0sXHJcbiAgICAnbGltZWdyZWVuJzogWzUwLDIwNSw1MCwxXSwgJ2xpbmVuJzogWzI1MCwyNDAsMjMwLDFdLFxyXG4gICAgJ21hZ2VudGEnOiBbMjU1LDAsMjU1LDFdLCAnbWFyb29uJzogWzEyOCwwLDAsMV0sXHJcbiAgICAnbWVkaXVtYXF1YW1hcmluZSc6IFsxMDIsMjA1LDE3MCwxXSwgJ21lZGl1bWJsdWUnOiBbMCwwLDIwNSwxXSxcclxuICAgICdtZWRpdW1vcmNoaWQnOiBbMTg2LDg1LDIxMSwxXSwgJ21lZGl1bXB1cnBsZSc6IFsxNDcsMTEyLDIxOSwxXSxcclxuICAgICdtZWRpdW1zZWFncmVlbic6IFs2MCwxNzksMTEzLDFdLCAnbWVkaXVtc2xhdGVibHVlJzogWzEyMywxMDQsMjM4LDFdLFxyXG4gICAgJ21lZGl1bXNwcmluZ2dyZWVuJzogWzAsMjUwLDE1NCwxXSwgJ21lZGl1bXR1cnF1b2lzZSc6IFs3MiwyMDksMjA0LDFdLFxyXG4gICAgJ21lZGl1bXZpb2xldHJlZCc6IFsxOTksMjEsMTMzLDFdLCAnbWlkbmlnaHRibHVlJzogWzI1LDI1LDExMiwxXSxcclxuICAgICdtaW50Y3JlYW0nOiBbMjQ1LDI1NSwyNTAsMV0sICdtaXN0eXJvc2UnOiBbMjU1LDIyOCwyMjUsMV0sXHJcbiAgICAnbW9jY2FzaW4nOiBbMjU1LDIyOCwxODEsMV0sICduYXZham93aGl0ZSc6IFsyNTUsMjIyLDE3MywxXSxcclxuICAgICduYXZ5JzogWzAsMCwxMjgsMV0sICdvbGRsYWNlJzogWzI1MywyNDUsMjMwLDFdLFxyXG4gICAgJ29saXZlJzogWzEyOCwxMjgsMCwxXSwgJ29saXZlZHJhYic6IFsxMDcsMTQyLDM1LDFdLFxyXG4gICAgJ29yYW5nZSc6IFsyNTUsMTY1LDAsMV0sICdvcmFuZ2VyZWQnOiBbMjU1LDY5LDAsMV0sXHJcbiAgICAnb3JjaGlkJzogWzIxOCwxMTIsMjE0LDFdLCAncGFsZWdvbGRlbnJvZCc6IFsyMzgsMjMyLDE3MCwxXSxcclxuICAgICdwYWxlZ3JlZW4nOiBbMTUyLDI1MSwxNTIsMV0sICdwYWxldHVycXVvaXNlJzogWzE3NSwyMzgsMjM4LDFdLFxyXG4gICAgJ3BhbGV2aW9sZXRyZWQnOiBbMjE5LDExMiwxNDcsMV0sICdwYXBheWF3aGlwJzogWzI1NSwyMzksMjEzLDFdLFxyXG4gICAgJ3BlYWNocHVmZic6IFsyNTUsMjE4LDE4NSwxXSwgJ3BlcnUnOiBbMjA1LDEzMyw2MywxXSxcclxuICAgICdwaW5rJzogWzI1NSwxOTIsMjAzLDFdLCAncGx1bSc6IFsyMjEsMTYwLDIyMSwxXSxcclxuICAgICdwb3dkZXJibHVlJzogWzE3NiwyMjQsMjMwLDFdLCAncHVycGxlJzogWzEyOCwwLDEyOCwxXSxcclxuICAgICdyZWQnOiBbMjU1LDAsMCwxXSwgJ3Jvc3licm93bic6IFsxODgsMTQzLDE0MywxXSxcclxuICAgICdyb3lhbGJsdWUnOiBbNjUsMTA1LDIyNSwxXSwgJ3NhZGRsZWJyb3duJzogWzEzOSw2OSwxOSwxXSxcclxuICAgICdzYWxtb24nOiBbMjUwLDEyOCwxMTQsMV0sICdzYW5keWJyb3duJzogWzI0NCwxNjQsOTYsMV0sXHJcbiAgICAnc2VhZ3JlZW4nOiBbNDYsMTM5LDg3LDFdLCAnc2Vhc2hlbGwnOiBbMjU1LDI0NSwyMzgsMV0sXHJcbiAgICAnc2llbm5hJzogWzE2MCw4Miw0NSwxXSwgJ3NpbHZlcic6IFsxOTIsMTkyLDE5MiwxXSxcclxuICAgICdza3libHVlJzogWzEzNSwyMDYsMjM1LDFdLCAnc2xhdGVibHVlJzogWzEwNiw5MCwyMDUsMV0sXHJcbiAgICAnc2xhdGVncmF5JzogWzExMiwxMjgsMTQ0LDFdLCAnc2xhdGVncmV5JzogWzExMiwxMjgsMTQ0LDFdLFxyXG4gICAgJ3Nub3cnOiBbMjU1LDI1MCwyNTAsMV0sICdzcHJpbmdncmVlbic6IFswLDI1NSwxMjcsMV0sXHJcbiAgICAnc3RlZWxibHVlJzogWzcwLDEzMCwxODAsMV0sICd0YW4nOiBbMjEwLDE4MCwxNDAsMV0sXHJcbiAgICAndGVhbCc6IFswLDEyOCwxMjgsMV0sICd0aGlzdGxlJzogWzIxNiwxOTEsMjE2LDFdLFxyXG4gICAgJ3RvbWF0byc6IFsyNTUsOTksNzEsMV0sICd0dXJxdW9pc2UnOiBbNjQsMjI0LDIwOCwxXSxcclxuICAgICd2aW9sZXQnOiBbMjM4LDEzMCwyMzgsMV0sICd3aGVhdCc6IFsyNDUsMjIyLDE3OSwxXSxcclxuICAgICd3aGl0ZSc6IFsyNTUsMjU1LDI1NSwxXSwgJ3doaXRlc21va2UnOiBbMjQ1LDI0NSwyNDUsMV0sXHJcbiAgICAneWVsbG93JzogWzI1NSwyNTUsMCwxXSwgJ3llbGxvd2dyZWVuJzogWzE1NCwyMDUsNTAsMV1cclxufTtcclxuXHJcbmZ1bmN0aW9uIGNsYW1wQ3NzQnl0ZShpKSB7ICAvLyBDbGFtcCB0byBpbnRlZ2VyIDAgLi4gMjU1LlxyXG4gICAgaSA9IE1hdGgucm91bmQoaSk7ICAvLyBTZWVtcyB0byBiZSB3aGF0IENocm9tZSBkb2VzICh2cyB0cnVuY2F0aW9uKS5cclxuICAgIHJldHVybiBpIDwgMCA/IDAgOiBpID4gMjU1ID8gMjU1IDogaTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xhbXBDc3NBbmdsZShpKSB7ICAvLyBDbGFtcCB0byBpbnRlZ2VyIDAgLi4gMzYwLlxyXG4gICAgaSA9IE1hdGgucm91bmQoaSk7ICAvLyBTZWVtcyB0byBiZSB3aGF0IENocm9tZSBkb2VzICh2cyB0cnVuY2F0aW9uKS5cclxuICAgIHJldHVybiBpIDwgMCA/IDAgOiBpID4gMzYwID8gMzYwIDogaTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xhbXBDc3NGbG9hdChmKSB7ICAvLyBDbGFtcCB0byBmbG9hdCAwLjAgLi4gMS4wLlxyXG4gICAgcmV0dXJuIGYgPCAwID8gMCA6IGYgPiAxID8gMSA6IGY7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ3NzSW50KHN0cikgeyAgLy8gaW50IG9yIHBlcmNlbnRhZ2UuXHJcbiAgICBpZiAoc3RyLmxlbmd0aCAmJiBzdHIuY2hhckF0KHN0ci5sZW5ndGggLSAxKSA9PT0gJyUnKSB7XHJcbiAgICAgICAgcmV0dXJuIGNsYW1wQ3NzQnl0ZShwYXJzZUZsb2F0KHN0cikgLyAxMDAgKiAyNTUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsYW1wQ3NzQnl0ZShwYXJzZUludChzdHIsIDEwKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ3NzRmxvYXQoc3RyKSB7ICAvLyBmbG9hdCBvciBwZXJjZW50YWdlLlxyXG4gICAgaWYgKHN0ci5sZW5ndGggJiYgc3RyLmNoYXJBdChzdHIubGVuZ3RoIC0gMSkgPT09ICclJykge1xyXG4gICAgICAgIHJldHVybiBjbGFtcENzc0Zsb2F0KHBhcnNlRmxvYXQoc3RyKSAvIDEwMCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xhbXBDc3NGbG9hdChwYXJzZUZsb2F0KHN0cikpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjc3NIdWVUb1JnYihtMSwgbTIsIGgpIHtcclxuICAgIGlmIChoIDwgMCkge1xyXG4gICAgICAgIGggKz0gMTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGggPiAxKSB7XHJcbiAgICAgICAgaCAtPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoICogNiA8IDEpIHtcclxuICAgICAgICByZXR1cm4gbTEgKyAobTIgLSBtMSkgKiBoICogNjtcclxuICAgIH1cclxuICAgIGlmIChoICogMiA8IDEpIHtcclxuICAgICAgICByZXR1cm4gbTI7XHJcbiAgICB9XHJcbiAgICBpZiAoaCAqIDMgPCAyKSB7XHJcbiAgICAgICAgcmV0dXJuIG0xICsgKG0yIC0gbTEpICogKDIvMyAtIGgpICogNjtcclxuICAgIH1cclxuICAgIHJldHVybiBtMTtcclxufVxyXG5cclxuZnVuY3Rpb24gbGVycE51bWJlcihhLCBiLCBwKSB7XHJcbiAgICByZXR1cm4gYSArIChiIC0gYSkgKiBwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRSZ2JhKG91dCwgciwgZywgYiwgYSkge1xyXG4gICAgb3V0WzBdID0gcjsgb3V0WzFdID0gZzsgb3V0WzJdID0gYjsgb3V0WzNdID0gYTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn1cclxuZnVuY3Rpb24gY29weVJnYmEob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdOyBvdXRbMV0gPSBhWzFdOyBvdXRbMl0gPSBhWzJdOyBvdXRbM10gPSBhWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufVxyXG5cclxudmFyIGNvbG9yQ2FjaGUgPSBuZXcgTFJVKDIwKTtcclxudmFyIGxhc3RSZW1vdmVkQXJyID0gbnVsbDtcclxuXHJcbmZ1bmN0aW9uIHB1dFRvQ2FjaGUoY29sb3JTdHIsIHJnYmFBcnIpIHtcclxuICAgIC8vIFJldXNlIHJlbW92ZWQgYXJyYXlcclxuICAgIGlmIChsYXN0UmVtb3ZlZEFycikge1xyXG4gICAgICAgIGNvcHlSZ2JhKGxhc3RSZW1vdmVkQXJyLCByZ2JhQXJyKTtcclxuICAgIH1cclxuICAgIGxhc3RSZW1vdmVkQXJyID0gY29sb3JDYWNoZS5wdXQoY29sb3JTdHIsIGxhc3RSZW1vdmVkQXJyIHx8IChyZ2JhQXJyLnNsaWNlKCkpKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci5wYXJzZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JTdHJcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gb3V0XHJcbiAqIEByZXR1cm4ge0FycmF5LjxudW1iZXI+fVxyXG4gKi9cclxuY29sb3JVdGlsLnBhcnNlID0gZnVuY3Rpb24gKGNvbG9yU3RyLCByZ2JhQXJyKSB7XHJcbiAgICBpZiAoIWNvbG9yU3RyKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmdiYUFyciA9IHJnYmFBcnIgfHwgW107XHJcblxyXG4gICAgdmFyIGNhY2hlZCA9IGNvbG9yQ2FjaGUuZ2V0KGNvbG9yU3RyKTtcclxuICAgIGlmIChjYWNoZWQpIHtcclxuICAgICAgICByZXR1cm4gY29weVJnYmEocmdiYUFyciwgY2FjaGVkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb2xvclN0ciBtYXkgYmUgbm90IHN0cmluZ1xyXG4gICAgY29sb3JTdHIgPSBjb2xvclN0ciArICcnO1xyXG4gICAgLy8gUmVtb3ZlIGFsbCB3aGl0ZXNwYWNlLCBub3QgY29tcGxpYW50LCBidXQgc2hvdWxkIGp1c3QgYmUgbW9yZSBhY2NlcHRpbmcuXHJcbiAgICB2YXIgc3RyID0gY29sb3JTdHIucmVwbGFjZSgvIC9nLCAnJykudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAvLyBDb2xvciBrZXl3b3JkcyAoYW5kIHRyYW5zcGFyZW50KSBsb29rdXAuXHJcbiAgICBpZiAoc3RyIGluIGtDU1NDb2xvclRhYmxlKSB7XHJcbiAgICAgICAgY29weVJnYmEocmdiYUFyciwga0NTU0NvbG9yVGFibGVbc3RyXSk7XHJcbiAgICAgICAgcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycik7XHJcbiAgICAgICAgcmV0dXJuIHJnYmFBcnI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gI2FiYyBhbmQgI2FiYzEyMyBzeW50YXguXHJcbiAgICBpZiAoc3RyLmNoYXJBdCgwKSA9PT0gJyMnKSB7XHJcbiAgICAgICAgaWYgKHN0ci5sZW5ndGggPT09IDQpIHtcclxuICAgICAgICAgICAgdmFyIGl2ID0gcGFyc2VJbnQoc3RyLnN1YnN0cigxKSwgMTYpOyAgLy8gVE9ETyhkZWFubSk6IFN0cmljdGVyIHBhcnNpbmcuXHJcbiAgICAgICAgICAgIGlmICghKGl2ID49IDAgJiYgaXYgPD0gMHhmZmYpKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuOyAgLy8gQ292ZXJzIE5hTi5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsXHJcbiAgICAgICAgICAgICAgICAoKGl2ICYgMHhmMDApID4+IDQpIHwgKChpdiAmIDB4ZjAwKSA+PiA4KSxcclxuICAgICAgICAgICAgICAgIChpdiAmIDB4ZjApIHwgKChpdiAmIDB4ZjApID4+IDQpLFxyXG4gICAgICAgICAgICAgICAgKGl2ICYgMHhmKSB8ICgoaXYgJiAweGYpIDw8IDQpLFxyXG4gICAgICAgICAgICAgICAgMVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJnYmFBcnI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHN0ci5sZW5ndGggPT09IDcpIHtcclxuICAgICAgICAgICAgdmFyIGl2ID0gcGFyc2VJbnQoc3RyLnN1YnN0cigxKSwgMTYpOyAgLy8gVE9ETyhkZWFubSk6IFN0cmljdGVyIHBhcnNpbmcuXHJcbiAgICAgICAgICAgIGlmICghKGl2ID49IDAgJiYgaXYgPD0gMHhmZmZmZmYpKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuOyAgLy8gQ292ZXJzIE5hTi5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsXHJcbiAgICAgICAgICAgICAgICAoaXYgJiAweGZmMDAwMCkgPj4gMTYsXHJcbiAgICAgICAgICAgICAgICAoaXYgJiAweGZmMDApID4+IDgsXHJcbiAgICAgICAgICAgICAgICBpdiAmIDB4ZmYsXHJcbiAgICAgICAgICAgICAgICAxXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHB1dFRvQ2FjaGUoY29sb3JTdHIsIHJnYmFBcnIpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmdiYUFycjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBvcCA9IHN0ci5pbmRleE9mKCcoJyksIGVwID0gc3RyLmluZGV4T2YoJyknKTtcclxuICAgIGlmIChvcCAhPT0gLTEgJiYgZXAgKyAxID09PSBzdHIubGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIGZuYW1lID0gc3RyLnN1YnN0cigwLCBvcCk7XHJcbiAgICAgICAgdmFyIHBhcmFtcyA9IHN0ci5zdWJzdHIob3AgKyAxLCBlcCAtIChvcCArIDEpKS5zcGxpdCgnLCcpO1xyXG4gICAgICAgIHZhciBhbHBoYSA9IDE7ICAvLyBUbyBhbGxvdyBjYXNlIGZhbGx0aHJvdWdoLlxyXG4gICAgICAgIHN3aXRjaCAoZm5hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSAncmdiYSc6XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYWxwaGEgPSBwYXJzZUNzc0Zsb2F0KHBhcmFtcy5wb3AoKSk7IC8vIGpzaGludCBpZ25vcmU6bGluZVxyXG4gICAgICAgICAgICAvLyBGYWxsIHRocm91Z2guXHJcbiAgICAgICAgICAgIGNhc2UgJ3JnYic6XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlQ3NzSW50KHBhcmFtc1swXSksXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VDc3NJbnQocGFyYW1zWzFdKSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJzZUNzc0ludChwYXJhbXNbMl0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGFscGhhXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmdiYUFycjtcclxuICAgICAgICAgICAgY2FzZSAnaHNsYSc6XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcGFyYW1zWzNdID0gcGFyc2VDc3NGbG9hdChwYXJhbXNbM10pO1xyXG4gICAgICAgICAgICAgICAgaHNsYTJyZ2JhKHBhcmFtcywgcmdiYUFycik7XHJcbiAgICAgICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZ2JhQXJyO1xyXG4gICAgICAgICAgICBjYXNlICdoc2wnOlxyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGhzbGEycmdiYShwYXJhbXMsIHJnYmFBcnIpO1xyXG4gICAgICAgICAgICAgICAgcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmdiYUFycjtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcclxuICAgIHJldHVybjtcclxufTtcclxuXHJcbmNvbG9yVXRpbC5wYXJzZVRvRmxvYXQgPSBmdW5jdGlvbiAoY29sb3JTdHIsIHJnYmFBcnIpIHtcclxuICAgIHJnYmFBcnIgPSBjb2xvclV0aWwucGFyc2UoY29sb3JTdHIsIHJnYmFBcnIpO1xyXG4gICAgaWYgKCFyZ2JhQXJyKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmdiYUFyclswXSAvPSAyNTU7XHJcbiAgICByZ2JhQXJyWzFdIC89IDI1NTtcclxuICAgIHJnYmFBcnJbMl0gLz0gMjU1O1xyXG4gICAgcmV0dXJuIHJnYmFBcnI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3IuaHNsYTJyZ2JhXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGhzbGFcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcmdiYVxyXG4gKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn0gcmdiYVxyXG4gKi9cclxuZnVuY3Rpb24gaHNsYTJyZ2JhKGhzbGEsIHJnYmEpIHtcclxuICAgIHZhciBoID0gKCgocGFyc2VGbG9hdChoc2xhWzBdKSAlIDM2MCkgKyAzNjApICUgMzYwKSAvIDM2MDsgIC8vIDAgLi4gMVxyXG4gICAgLy8gTk9URShkZWFubSk6IEFjY29yZGluZyB0byB0aGUgQ1NTIHNwZWMgcy9sIHNob3VsZCBvbmx5IGJlXHJcbiAgICAvLyBwZXJjZW50YWdlcywgYnV0IHdlIGRvbid0IGJvdGhlciBhbmQgbGV0IGZsb2F0IG9yIHBlcmNlbnRhZ2UuXHJcbiAgICB2YXIgcyA9IHBhcnNlQ3NzRmxvYXQoaHNsYVsxXSk7XHJcbiAgICB2YXIgbCA9IHBhcnNlQ3NzRmxvYXQoaHNsYVsyXSk7XHJcbiAgICB2YXIgbTIgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSBsICogcztcclxuICAgIHZhciBtMSA9IGwgKiAyIC0gbTI7XHJcblxyXG4gICAgcmdiYSA9IHJnYmEgfHwgW107XHJcbiAgICBzZXRSZ2JhKHJnYmEsXHJcbiAgICAgICAgY2xhbXBDc3NCeXRlKGNzc0h1ZVRvUmdiKG0xLCBtMiwgaCArIDEgLyAzKSAqIDI1NSksXHJcbiAgICAgICAgY2xhbXBDc3NCeXRlKGNzc0h1ZVRvUmdiKG0xLCBtMiwgaCkgKiAyNTUpLFxyXG4gICAgICAgIGNsYW1wQ3NzQnl0ZShjc3NIdWVUb1JnYihtMSwgbTIsIGggLSAxIC8gMykgKiAyNTUpLFxyXG4gICAgICAgIDFcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGhzbGEubGVuZ3RoID09PSA0KSB7XHJcbiAgICAgICAgcmdiYVszXSA9IGhzbGFbM107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJnYmE7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3IucmdiYTJoc2xhXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHJnYmFcclxuICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59IGhzbGFcclxuICovXHJcbmZ1bmN0aW9uIHJnYmEyaHNsYShyZ2JhKSB7XHJcbiAgICBpZiAoIXJnYmEpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUkdCIGZyb20gMCB0byAyNTVcclxuICAgIHZhciBSID0gcmdiYVswXSAvIDI1NTtcclxuICAgIHZhciBHID0gcmdiYVsxXSAvIDI1NTtcclxuICAgIHZhciBCID0gcmdiYVsyXSAvIDI1NTtcclxuXHJcbiAgICB2YXIgdk1pbiA9IE1hdGgubWluKFIsIEcsIEIpOyAvLyBNaW4uIHZhbHVlIG9mIFJHQlxyXG4gICAgdmFyIHZNYXggPSBNYXRoLm1heChSLCBHLCBCKTsgLy8gTWF4LiB2YWx1ZSBvZiBSR0JcclxuICAgIHZhciBkZWx0YSA9IHZNYXggLSB2TWluOyAvLyBEZWx0YSBSR0IgdmFsdWVcclxuXHJcbiAgICB2YXIgTCA9ICh2TWF4ICsgdk1pbikgLyAyO1xyXG4gICAgdmFyIEg7XHJcbiAgICB2YXIgUztcclxuICAgIC8vIEhTTCByZXN1bHRzIGZyb20gMCB0byAxXHJcbiAgICBpZiAoZGVsdGEgPT09IDApIHtcclxuICAgICAgICBIID0gMDtcclxuICAgICAgICBTID0gMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChMIDwgMC41KSB7XHJcbiAgICAgICAgICAgIFMgPSBkZWx0YSAvICh2TWF4ICsgdk1pbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBTID0gZGVsdGEgLyAoMiAtIHZNYXggLSB2TWluKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkZWx0YVIgPSAoKCh2TWF4IC0gUikgLyA2KSArIChkZWx0YSAvIDIpKSAvIGRlbHRhO1xyXG4gICAgICAgIHZhciBkZWx0YUcgPSAoKCh2TWF4IC0gRykgLyA2KSArIChkZWx0YSAvIDIpKSAvIGRlbHRhO1xyXG4gICAgICAgIHZhciBkZWx0YUIgPSAoKCh2TWF4IC0gQikgLyA2KSArIChkZWx0YSAvIDIpKSAvIGRlbHRhO1xyXG5cclxuICAgICAgICBpZiAoUiA9PT0gdk1heCkge1xyXG4gICAgICAgICAgICBIID0gZGVsdGFCIC0gZGVsdGFHO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChHID09PSB2TWF4KSB7XHJcbiAgICAgICAgICAgIEggPSAoMSAvIDMpICsgZGVsdGFSIC0gZGVsdGFCO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChCID09PSB2TWF4KSB7XHJcbiAgICAgICAgICAgIEggPSAoMiAvIDMpICsgZGVsdGFHIC0gZGVsdGFSO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEggPCAwKSB7XHJcbiAgICAgICAgICAgIEggKz0gMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChIID4gMSkge1xyXG4gICAgICAgICAgICBIIC09IDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBoc2xhID0gW0ggKiAzNjAsIFMsIExdO1xyXG5cclxuICAgIGlmIChyZ2JhWzNdICE9IG51bGwpIHtcclxuICAgICAgICBoc2xhLnB1c2gocmdiYVszXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhzbGE7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3IubGlmdFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcclxuICogQHBhcmFtIHtudW1iZXJ9IGxldmVsXHJcbiAqIEByZXR1cm4ge3N0cmluZ31cclxuICovXHJcbmNvbG9yVXRpbC5saWZ0ID0gZnVuY3Rpb24gKGNvbG9yLCBsZXZlbCkge1xyXG4gICAgdmFyIGNvbG9yQXJyID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yKTtcclxuICAgIGlmIChjb2xvckFycikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChsZXZlbCA8IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yQXJyW2ldID0gY29sb3JBcnJbaV0gKiAoMSAtIGxldmVsKSB8IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb2xvckFycltpXSA9ICgoMjU1IC0gY29sb3JBcnJbaV0pICogbGV2ZWwgKyBjb2xvckFycltpXSkgfCAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb2xvclV0aWwuc3RyaW5naWZ5KGNvbG9yQXJyLCBjb2xvckFyci5sZW5ndGggPT09IDQgPyAncmdiYScgOiAncmdiJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3IudG9IZXhcclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXHJcbiAqIEByZXR1cm4ge3N0cmluZ31cclxuICovXHJcbmNvbG9yVXRpbC50b0hleCA9IGZ1bmN0aW9uIChjb2xvcikge1xyXG4gICAgdmFyIGNvbG9yQXJyID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yKTtcclxuICAgIGlmIChjb2xvckFycikge1xyXG4gICAgICAgIHJldHVybiAoKDEgPDwgMjQpICsgKGNvbG9yQXJyWzBdIDw8IDE2KSArIChjb2xvckFyclsxXSA8PCA4KSArICgrY29sb3JBcnJbMl0pKS50b1N0cmluZygxNikuc2xpY2UoMSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogTWFwIHZhbHVlIHRvIGNvbG9yLiBGYXN0ZXIgdGhhbiBsZXJwIG1ldGhvZHMgYmVjYXVzZSBjb2xvciBpcyByZXByZXNlbnRlZCBieSByZ2JhIGFycmF5LlxyXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3JcclxuICogQHBhcmFtIHtudW1iZXJ9IG5vcm1hbGl6ZWRWYWx1ZSBBIGZsb2F0IGJldHdlZW4gMCBhbmQgMS5cclxuICogQHBhcmFtIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSBjb2xvcnMgTGlzdCBvZiByZ2JhIGNvbG9yIGFycmF5XHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IFtvdXRdIE1hcHBlZCBnYmEgY29sb3IgYXJyYXlcclxuICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59IHdpbGwgYmUgbnVsbC91bmRlZmluZWQgaWYgaW5wdXQgaWxsZWdhbC5cclxuICovXHJcbmNvbG9yVXRpbC5mYXN0TGVycCA9IGZ1bmN0aW9uIChub3JtYWxpemVkVmFsdWUsIGNvbG9ycywgb3V0KSB7XHJcbiAgICBpZiAoIShjb2xvcnMgJiYgY29sb3JzLmxlbmd0aClcclxuICAgICAgICB8fCAhKG5vcm1hbGl6ZWRWYWx1ZSA+PSAwICYmIG5vcm1hbGl6ZWRWYWx1ZSA8PSAxKVxyXG4gICAgKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIG91dCA9IG91dCB8fCBbXTtcclxuXHJcbiAgICB2YXIgdmFsdWUgPSBub3JtYWxpemVkVmFsdWUgKiAoY29sb3JzLmxlbmd0aCAtIDEpO1xyXG4gICAgdmFyIGxlZnRJbmRleCA9IE1hdGguZmxvb3IodmFsdWUpO1xyXG4gICAgdmFyIHJpZ2h0SW5kZXggPSBNYXRoLmNlaWwodmFsdWUpO1xyXG4gICAgdmFyIGxlZnRDb2xvciA9IGNvbG9yc1tsZWZ0SW5kZXhdO1xyXG4gICAgdmFyIHJpZ2h0Q29sb3IgPSBjb2xvcnNbcmlnaHRJbmRleF07XHJcbiAgICB2YXIgZHYgPSB2YWx1ZSAtIGxlZnRJbmRleDtcclxuICAgIG91dFswXSA9IGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclswXSwgcmlnaHRDb2xvclswXSwgZHYpKTtcclxuICAgIG91dFsxXSA9IGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclsxXSwgcmlnaHRDb2xvclsxXSwgZHYpKTtcclxuICAgIG91dFsyXSA9IGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclsyXSwgcmlnaHRDb2xvclsyXSwgZHYpKTtcclxuICAgIG91dFszXSA9IGNsYW1wQ3NzRmxvYXQobGVycE51bWJlcihsZWZ0Q29sb3JbM10sIHJpZ2h0Q29sb3JbM10sIGR2KSk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufVxyXG5cclxuY29sb3JVdGlsLmZhc3RNYXBUb0NvbG9yID0gY29sb3JVdGlsLmZhc3RMZXJwO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBub3JtYWxpemVkVmFsdWUgQSBmbG9hdCBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGNvbG9ycyBDb2xvciBsaXN0LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBmdWxsT3V0cHV0IERlZmF1bHQgZmFsc2UuXHJcbiAqIEByZXR1cm4geyhzdHJpbmd8T2JqZWN0KX0gUmVzdWx0IGNvbG9yLiBJZiBmdWxsT3V0cHV0LFxyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Y29sb3I6IC4uLiwgbGVmdEluZGV4OiAuLi4sIHJpZ2h0SW5kZXg6IC4uLiwgdmFsdWU6IC4uLn0sXHJcbiAqL1xyXG5jb2xvclV0aWwubGVycCA9IGZ1bmN0aW9uIChub3JtYWxpemVkVmFsdWUsIGNvbG9ycywgZnVsbE91dHB1dCkge1xyXG4gICAgaWYgKCEoY29sb3JzICYmIGNvbG9ycy5sZW5ndGgpXHJcbiAgICAgICAgfHwgIShub3JtYWxpemVkVmFsdWUgPj0gMCAmJiBub3JtYWxpemVkVmFsdWUgPD0gMSlcclxuICAgICkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdmFsdWUgPSBub3JtYWxpemVkVmFsdWUgKiAoY29sb3JzLmxlbmd0aCAtIDEpO1xyXG4gICAgdmFyIGxlZnRJbmRleCA9IE1hdGguZmxvb3IodmFsdWUpO1xyXG4gICAgdmFyIHJpZ2h0SW5kZXggPSBNYXRoLmNlaWwodmFsdWUpO1xyXG4gICAgdmFyIGxlZnRDb2xvciA9IGNvbG9yVXRpbC5wYXJzZShjb2xvcnNbbGVmdEluZGV4XSk7XHJcbiAgICB2YXIgcmlnaHRDb2xvciA9IGNvbG9yVXRpbC5wYXJzZShjb2xvcnNbcmlnaHRJbmRleF0pO1xyXG4gICAgdmFyIGR2ID0gdmFsdWUgLSBsZWZ0SW5kZXg7XHJcblxyXG4gICAgdmFyIGNvbG9yID0gY29sb3JVdGlsLnN0cmluZ2lmeShcclxuICAgICAgICBbXHJcbiAgICAgICAgICAgIGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclswXSwgcmlnaHRDb2xvclswXSwgZHYpKSxcclxuICAgICAgICAgICAgY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzFdLCByaWdodENvbG9yWzFdLCBkdikpLFxyXG4gICAgICAgICAgICBjbGFtcENzc0J5dGUobGVycE51bWJlcihsZWZ0Q29sb3JbMl0sIHJpZ2h0Q29sb3JbMl0sIGR2KSksXHJcbiAgICAgICAgICAgIGNsYW1wQ3NzRmxvYXQobGVycE51bWJlcihsZWZ0Q29sb3JbM10sIHJpZ2h0Q29sb3JbM10sIGR2KSlcclxuICAgICAgICBdLFxyXG4gICAgICAgICdyZ2JhJ1xyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gZnVsbE91dHB1dFxyXG4gICAgICAgID8ge1xyXG4gICAgICAgICAgICBjb2xvcjogY29sb3IsXHJcbiAgICAgICAgICAgIGxlZnRJbmRleDogbGVmdEluZGV4LFxyXG4gICAgICAgICAgICByaWdodEluZGV4OiByaWdodEluZGV4LFxyXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgOiBjb2xvcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBkZXByZWNhdGVkXHJcbiAqL1xyXG5jb2xvclV0aWwubWFwVG9Db2xvciA9IGNvbG9yVXRpbC5sZXJwO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvclxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcclxuICogQHBhcmFtIHtudW1iZXI9fSBoIDAgfiAzNjAsIGlnbm9yZSB3aGVuIG51bGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gcyAwIH4gMSwgaWdub3JlIHdoZW4gbnVsbC5cclxuICogQHBhcmFtIHtudW1iZXI9fSBsIDAgfiAxLCBpZ25vcmUgd2hlbiBudWxsLlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IENvbG9yIHN0cmluZyBpbiByZ2JhIGZvcm1hdC5cclxuICovXHJcbmNvbG9yVXRpbC5tb2RpZnlIU0wgPSBmdW5jdGlvbiAoY29sb3IsIGgsIHMsIGwpIHtcclxuICAgIGNvbG9yID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yKTtcclxuXHJcbiAgICBpZiAoY29sb3IpIHtcclxuICAgICAgICBjb2xvciA9IHJnYmEyaHNsYShjb2xvcik7XHJcbiAgICAgICAgaCAhPSBudWxsICYmIChjb2xvclswXSA9IGNsYW1wQ3NzQW5nbGUoaCkpO1xyXG4gICAgICAgIHMgIT0gbnVsbCAmJiAoY29sb3JbMV0gPSBwYXJzZUNzc0Zsb2F0KHMpKTtcclxuICAgICAgICBsICE9IG51bGwgJiYgKGNvbG9yWzJdID0gcGFyc2VDc3NGbG9hdChsKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclV0aWwuc3RyaW5naWZ5KGhzbGEycmdiYShjb2xvciksICdyZ2JhJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcclxuICogQHBhcmFtIHtudW1iZXI9fSBhbHBoYSAwIH4gMVxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IENvbG9yIHN0cmluZyBpbiByZ2JhIGZvcm1hdC5cclxuICovXHJcbmNvbG9yVXRpbC5tb2RpZnlBbHBoYSA9IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEpIHtcclxuICAgIGNvbG9yID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yKTtcclxuXHJcbiAgICBpZiAoY29sb3IgJiYgYWxwaGEgIT0gbnVsbCkge1xyXG4gICAgICAgIGNvbG9yWzNdID0gY2xhbXBDc3NGbG9hdChhbHBoYSk7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yVXRpbC5zdHJpbmdpZnkoY29sb3IsICdyZ2JhJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJDb2xvciBsaWtlIFsxMiwzMyw0NCwwLjRdXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlICdyZ2JhJywgJ2hzdmEnLCAuLi5cclxuICogQHJldHVybiB7c3RyaW5nfSBSZXN1bHQgY29sb3IuIChJZiBpbnB1dCBpbGxlZ2FsLCByZXR1cm4gdW5kZWZpbmVkKS5cclxuICovXHJcbmNvbG9yVXRpbC5zdHJpbmdpZnkgPSBmdW5jdGlvbiAoYXJyQ29sb3IsIHR5cGUpIHtcclxuICAgIGlmICghYXJyQ29sb3IgfHwgIWFyckNvbG9yLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBjb2xvclN0ciA9IGFyckNvbG9yWzBdICsgJywnICsgYXJyQ29sb3JbMV0gKyAnLCcgKyBhcnJDb2xvclsyXTtcclxuICAgIGlmICh0eXBlID09PSAncmdiYScgfHwgdHlwZSA9PT0gJ2hzdmEnIHx8IHR5cGUgPT09ICdoc2xhJykge1xyXG4gICAgICAgIGNvbG9yU3RyICs9ICcsJyArIGFyckNvbG9yWzNdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHR5cGUgKyAnKCcgKyBjb2xvclN0ciArICcpJztcclxufTtcclxuXHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY29sb3JVdGlsOyIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgY29sb3JVdGlsIGZyb20gJy4vY29yZS9jb2xvcic7XHJcbnZhciBwYXJzZUNvbG9yID0gY29sb3JVdGlsLnBhcnNlVG9GbG9hdDtcclxuXHJcbnZhciBwcm9ncmFtS2V5Q2FjaGUgPSB7fTtcclxuXHJcbmZ1bmN0aW9uIGdldERlZmluZUNvZGUoZGVmaW5lcykge1xyXG4gICAgdmFyIGRlZmluZUtleXMgPSBPYmplY3Qua2V5cyhkZWZpbmVzKTtcclxuICAgIGRlZmluZUtleXMuc29ydCgpO1xyXG4gICAgdmFyIGRlZmluZVN0ciA9IFtdO1xyXG4gICAgLy8gQ3VzdG9tIERlZmluZXNcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVmaW5lS2V5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBrZXkgPSBkZWZpbmVLZXlzW2ldO1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGRlZmluZXNba2V5XTtcclxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgZGVmaW5lU3RyLnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgZGVmaW5lU3RyLnB1c2goa2V5ICsgJyAnICsgdmFsdWUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlZmluZVN0ci5qb2luKCdcXG4nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UHJvZ3JhbUtleSh2ZXJ0ZXhEZWZpbmVzLCBmcmFnbWVudERlZmluZXMsIGVuYWJsZWRUZXh0dXJlcykge1xyXG4gICAgZW5hYmxlZFRleHR1cmVzLnNvcnQoKTtcclxuICAgIHZhciBkZWZpbmVTdHIgPSBbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5hYmxlZFRleHR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHN5bWJvbCA9IGVuYWJsZWRUZXh0dXJlc1tpXTtcclxuICAgICAgICBkZWZpbmVTdHIucHVzaChzeW1ib2wpO1xyXG4gICAgfVxyXG4gICAgdmFyIGtleSA9IGdldERlZmluZUNvZGUodmVydGV4RGVmaW5lcykgKyAnXFxuJ1xyXG4gICAgICAgICsgZ2V0RGVmaW5lQ29kZShmcmFnbWVudERlZmluZXMpICsgJ1xcbidcclxuICAgICAgICArIGRlZmluZVN0ci5qb2luKCdcXG4nKTtcclxuXHJcbiAgICBpZiAocHJvZ3JhbUtleUNhY2hlW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gcHJvZ3JhbUtleUNhY2hlW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGlkID0gdXRpbC5nZW5HVUlEKCk7XHJcbiAgICBwcm9ncmFtS2V5Q2FjaGVba2V5XSA9IGlkO1xyXG4gICAgcmV0dXJuIGlkO1xyXG59XHJcblxyXG4vKipcclxuICogTWF0ZXJpYWwgZGVmaW5lcyB0aGUgYXBwZWFyYW5jZSBvZiBtZXNoIHN1cmZhY2UsIGxpa2UgYGNvbG9yYCwgYHJvdWdobmVzc2AsIGBtZXRhbG5lc3NgLCBldGMuXHJcbiAqIEl0IGNvbnRhaW5zIGEge0BsaW5rIGNsYXkuU2hhZGVyfSBhbmQgY29ycmVzcG9uZGluZyB1bmlmb3Jtcy5cclxuICpcclxuICogSGVyZSBpcyBhIGJhc2ljIGV4YW1wbGUgdG8gY3JlYXRlIGEgc3RhbmRhcmQgbWF0ZXJpYWxcclxuYGBganNcclxudmFyIG1hdGVyaWFsID0gbmV3IGNsYXkuTWF0ZXJpYWwoe1xyXG4gICAgc2hhZGVyOiBuZXcgY2xheS5TaGFkZXIoXHJcbiAgICAgICAgY2xheS5TaGFkZXIuc291cmNlKCdjbGF5LnZlcnRleCcpLFxyXG4gICAgICAgIGNsYXkuU2hhZGVyLnNvdXJjZSgnY2xheS5mcmFnbWVudCcpXHJcbiAgICApXHJcbn0pO1xyXG5gYGBcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuTWF0ZXJpYWxcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBNYXRlcmlhbCA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuTWF0ZXJpYWwjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG5hbWU6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIC8vIHVuaWZvcm1zOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5TaGFkZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgLy8gc2hhZGVyOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkZXB0aFRlc3Q6IHRydWUsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRlcHRoTWFzazogdHJ1ZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdHJhbnNwYXJlbnQ6IGZhbHNlLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEJsZW5kIGZ1bmMgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIHRoZSBtYXRlcmlhbFxyXG4gICAgICAgICAqIGhhdmUgY3VzdG9tIGJsZW5kaW5nXHJcbiAgICAgICAgICogVGhlIGdsIGNvbnRleHQgd2lsbCBiZSB0aGUgb25seSBhcmd1bWVudCBwYXNzZWQgaW4gdGhvIHRoZVxyXG4gICAgICAgICAqIGJsZW5kIGZ1bmN0aW9uXHJcbiAgICAgICAgICogRGV0YWlsIG9mIGJsZW5kIGZ1bmN0aW9uIGluIFdlYkdMOlxyXG4gICAgICAgICAqIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvZ2xlcy9zcGVjcy8yLjAvZXNfZnVsbF9zcGVjXzIuMC4yNS5wZGZcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEV4YW1wbGUgOlxyXG4gICAgICAgICAqIGZ1bmN0aW9uKF9nbCkge1xyXG4gICAgICAgICAqICBfZ2wuYmxlbmRFcXVhdGlvbihfZ2wuRlVOQ19BREQpO1xyXG4gICAgICAgICAqICBfZ2wuYmxlbmRGdW5jKF9nbC5TUkNfQUxQSEEsIF9nbC5PTkVfTUlOVVNfU1JDX0FMUEhBKTtcclxuICAgICAgICAgKiB9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYmxlbmQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHVwZGF0ZSB0ZXh0dXJlIHN0YXR1cyBhdXRvbWF0aWNhbGx5LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGF1dG9VcGRhdGVUZXh0dXJlU3RhdHVzOiB0cnVlLFxyXG5cclxuICAgICAgICB1bmlmb3Jtczoge30sXHJcbiAgICAgICAgdmVydGV4RGVmaW5lczoge30sXHJcbiAgICAgICAgZnJhZ21lbnREZWZpbmVzOiB7fSxcclxuICAgICAgICBfdGV4dHVyZVN0YXR1czoge30sXHJcblxyXG4gICAgICAgIC8vIHNoYWRvd1RyYW5zcGFyZW50TWFwIDogbnVsbFxyXG5cclxuICAgICAgICAvLyBQRU5ESU5HIGVuYWJsZSB0aGUgdW5pZm9ybSB0aGF0IG9ubHkgdXNlZCBpbiBzaGFkZXIuXHJcbiAgICAgICAgX2VuYWJsZWRVbmlmb3JtczogbnVsbCxcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gJ01BVEVSSUFMXycgKyB0aGlzLl9fdWlkX187XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2hhZGVyKSB7XHJcbiAgICAgICAgLy8gS2VlcCBzdGF0dXMsIG1haW5seSBwcmVzZXQgdW5pZm9ybXMsIHZlcnRleERlZmluZXMgYW5kIGZyYWdtZW50RGVmaW5lc1xyXG4gICAgICAgIHRoaXMuYXR0YWNoU2hhZGVyKHRoaXMuc2hhZGVyLCB0cnVlKTtcclxuICAgIH1cclxufSxcclxuLyoqIEBsZW5kcyBjbGF5Lk1hdGVyaWFsLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICBwcmVjaXNpb246ICdoaWdocCcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgbWF0ZXJpYWwgdW5pZm9ybVxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqICBtYXQuc2V0VW5pZm9ybSgnY29sb3InLCBbMSwgMSwgMSwgMV0pO1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ8YXJyYXl8Y2xheS5UZXh0dXJlfEFycmF5QnVmZmVyVmlld30gdmFsdWVcclxuICAgICAqL1xyXG4gICAgc2V0VW5pZm9ybTogZnVuY3Rpb24gKHN5bWJvbCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1VuaWZvcm0gdmFsdWUgXCInICsgc3ltYm9sICsgJ1wiIGlzIHVuZGVmaW5lZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdW5pZm9ybSA9IHRoaXMudW5pZm9ybXNbc3ltYm9sXTtcclxuICAgICAgICBpZiAodW5pZm9ybSkge1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBwYXJzZSBhcyBhIGNvbG9yLiBJbnZhbGlkIGNvbG9yIHN0cmluZyB3aWxsIHJldHVybiBudWxsLlxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUNvbG9yKHZhbHVlKSB8fCB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdW5pZm9ybS52YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1VwZGF0ZVRleHR1cmVTdGF0dXMgJiYgdW5pZm9ybS50eXBlID09PSAndCcpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlVGV4dHVyZShzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlVGV4dHVyZShzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcclxuICAgICAqL1xyXG4gICAgc2V0VW5pZm9ybXM6IGZ1bmN0aW9uKG9iaikge1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgdmFyIHZhbCA9IG9ialtrZXldO1xyXG4gICAgICAgICAgICB0aGlzLnNldFVuaWZvcm0oa2V5LCB2YWwpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBzeW1ib2xcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzVW5pZm9ybUVuYWJsZWQ6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZFVuaWZvcm1zLmluZGV4T2Yoc3ltYm9sKSA+PSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRFbmFibGVkVW5pZm9ybXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZFVuaWZvcm1zO1xyXG4gICAgfSxcclxuICAgIGdldFRleHR1cmVVbmlmb3JtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlVW5pZm9ybXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2Ygc2V0VW5pZm9ybSBhbmQgc2V0VW5pZm9ybXNcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fHN0cmluZ30gc3ltYm9sXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcnxhcnJheXxjbGF5LlRleHR1cmV8QXJyYXlCdWZmZXJWaWV3fSBbdmFsdWVdXHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24gKHN5bWJvbCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHN5bWJvbCkgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBzeW1ib2wpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBzeW1ib2xba2V5XTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShrZXksIHZhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShzeW1ib2wsIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdW5pZm9ybSB2YWx1ZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcclxuICAgICAqIEByZXR1cm4ge251bWJlcnxhcnJheXxjbGF5LlRleHR1cmV8QXJyYXlCdWZmZXJWaWV3fVxyXG4gICAgICovXHJcbiAgICBnZXQ6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICB2YXIgdW5pZm9ybSA9IHRoaXMudW5pZm9ybXNbc3ltYm9sXTtcclxuICAgICAgICBpZiAodW5pZm9ybSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5pZm9ybS52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRhY2ggYSBzaGFkZXIgaW5zdGFuY2VcclxuICAgICAqIEBwYXJhbSAge2NsYXkuU2hhZGVyfSBzaGFkZXJcclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IGtlZXBTdGF0dXMgSWYgdHJ5IHRvIGtlZXAgdW5pZm9ybSBhbmQgdGV4dHVyZVxyXG4gICAgICovXHJcbiAgICBhdHRhY2hTaGFkZXI6IGZ1bmN0aW9uKHNoYWRlciwga2VlcFN0YXR1cykge1xyXG4gICAgICAgIHZhciBvcmlnaW5hbFVuaWZvcm1zID0gdGhpcy51bmlmb3JtcztcclxuXHJcbiAgICAgICAgLy8gSWdub3JlIGlmIHVuaWZvcm0gY2FuIHVzZSBpbiBzaGFkZXIuXHJcbiAgICAgICAgdGhpcy51bmlmb3JtcyA9IHNoYWRlci5jcmVhdGVVbmlmb3JtcygpO1xyXG4gICAgICAgIHRoaXMuc2hhZGVyID0gc2hhZGVyO1xyXG5cclxuICAgICAgICB2YXIgdW5pZm9ybXMgPSB0aGlzLnVuaWZvcm1zO1xyXG4gICAgICAgIHRoaXMuX2VuYWJsZWRVbmlmb3JtcyA9IE9iamVjdC5rZXlzKHVuaWZvcm1zKTtcclxuICAgICAgICAvLyBNYWtlIHN1cmUgdW5pZm9ybXMgYXJlIHNldCBpbiBzYW1lIG9yZGVyIHRvIGF2b2lkIHRleHR1cmUgc2xvdCB3cm9uZ1xyXG4gICAgICAgIHRoaXMuX2VuYWJsZWRVbmlmb3Jtcy5zb3J0KCk7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVVuaWZvcm1zID0gdGhpcy5fZW5hYmxlZFVuaWZvcm1zLmZpbHRlcihmdW5jdGlvbiAodW5pZm9ybU5hbWUpIHtcclxuICAgICAgICAgICAgdmFyIHR5cGUgPSB0aGlzLnVuaWZvcm1zW3VuaWZvcm1OYW1lXS50eXBlO1xyXG4gICAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ3QnIHx8IHR5cGUgPT09ICd0dic7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcblxyXG4gICAgICAgIHZhciBvcmlnaW5hbFZlcnRleERlZmluZXMgPSB0aGlzLnZlcnRleERlZmluZXM7XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsRnJhZ21lbnREZWZpbmVzID0gdGhpcy5mcmFnbWVudERlZmluZXM7XHJcblxyXG4gICAgICAgIHRoaXMudmVydGV4RGVmaW5lcyA9IHV0aWwuY2xvbmUoc2hhZGVyLnZlcnRleERlZmluZXMpO1xyXG4gICAgICAgIHRoaXMuZnJhZ21lbnREZWZpbmVzID0gdXRpbC5jbG9uZShzaGFkZXIuZnJhZ21lbnREZWZpbmVzKTtcclxuXHJcbiAgICAgICAgaWYgKGtlZXBTdGF0dXMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIG9yaWdpbmFsVW5pZm9ybXMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3Jtc1tzeW1ib2xdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXNbc3ltYm9sXS52YWx1ZSA9IG9yaWdpbmFsVW5pZm9ybXNbc3ltYm9sXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdXRpbC5kZWZhdWx0cyh0aGlzLnZlcnRleERlZmluZXMsIG9yaWdpbmFsVmVydGV4RGVmaW5lcyk7XHJcbiAgICAgICAgICAgIHV0aWwuZGVmYXVsdHModGhpcy5mcmFnbWVudERlZmluZXMsIG9yaWdpbmFsRnJhZ21lbnREZWZpbmVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlU3RhdHVzID0ge307XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNoYWRlci50ZXh0dXJlcykge1xyXG4gICAgICAgICAgICB0ZXh0dXJlU3RhdHVzW2tleV0gPSB7XHJcbiAgICAgICAgICAgICAgICBzaGFkZXJUeXBlOiBzaGFkZXIudGV4dHVyZXNba2V5XS5zaGFkZXJUeXBlLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogc2hhZGVyLnRleHR1cmVzW2tleV0udHlwZSxcclxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IChrZWVwU3RhdHVzICYmIHRoaXMuX3RleHR1cmVTdGF0dXNba2V5XSkgPyB0aGlzLl90ZXh0dXJlU3RhdHVzW2tleV0uZW5hYmxlZCA6IGZhbHNlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90ZXh0dXJlU3RhdHVzID0gdGV4dHVyZVN0YXR1cztcclxuXHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IG1hdGVyaWFsIGFuZCBrZWVwIHVuaWZvcm1zLCBzaGFkZXIgd2lsbCBub3QgYmUgY2xvbmVkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdGVyaWFsfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtYXRlcmlhbCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICBzaGFkZXI6IHRoaXMuc2hhZGVyXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRoaXMudW5pZm9ybXMpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudW5pZm9ybXNbc3ltYm9sXS52YWx1ZSA9IHRoaXMudW5pZm9ybXNbc3ltYm9sXS52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID0gdGhpcy5kZXB0aFRlc3Q7XHJcbiAgICAgICAgbWF0ZXJpYWwuZGVwdGhNYXNrID0gdGhpcy5kZXB0aE1hc2s7XHJcbiAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0aGlzLnRyYW5zcGFyZW50O1xyXG4gICAgICAgIG1hdGVyaWFsLmJsZW5kID0gdGhpcy5ibGVuZDtcclxuXHJcbiAgICAgICAgbWF0ZXJpYWwudmVydGV4RGVmaW5lcyA9IHV0aWwuY2xvbmUodGhpcy52ZXJ0ZXhEZWZpbmVzKTtcclxuICAgICAgICBtYXRlcmlhbC5mcmFnbWVudERlZmluZXMgPSB1dGlsLmNsb25lKHRoaXMuZnJhZ21lbnREZWZpbmVzKTtcclxuICAgICAgICBtYXRlcmlhbC5lbmFibGVUZXh0dXJlKHRoaXMuZ2V0RW5hYmxlZFRleHR1cmVzKCkpO1xyXG4gICAgICAgIG1hdGVyaWFsLnByZWNpc2lvbiA9IHRoaXMucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGEgI2RlZmluZSBtYWNybyBpbiBzaGFkZXIgY29kZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJUeXBlIENhbiBiZSB2ZXJ0ZXgsIGZyYWdtZW50IG9yIGJvdGhcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFt2YWxdXHJcbiAgICAgKi9cclxuICAgIGRlZmluZTogZnVuY3Rpb24gKHNoYWRlclR5cGUsIHN5bWJvbCwgdmFsKSB7XHJcbiAgICAgICAgdmFyIHZlcnRleERlZmluZXMgPSB0aGlzLnZlcnRleERlZmluZXM7XHJcbiAgICAgICAgdmFyIGZyYWdtZW50RGVmaW5lcyA9IHRoaXMuZnJhZ21lbnREZWZpbmVzO1xyXG4gICAgICAgIGlmIChzaGFkZXJUeXBlICE9PSAndmVydGV4JyAmJiBzaGFkZXJUeXBlICE9PSAnZnJhZ21lbnQnICYmIHNoYWRlclR5cGUgIT09ICdib3RoJ1xyXG4gICAgICAgICAgICAmJiBhcmd1bWVudHMubGVuZ3RoIDwgM1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICAvLyBzaGFkZXJUeXBlIGRlZmF1bHQgdG8gYmUgJ2JvdGgnXHJcbiAgICAgICAgICAgIHZhbCA9IHN5bWJvbDtcclxuICAgICAgICAgICAgc3ltYm9sID0gc2hhZGVyVHlwZTtcclxuICAgICAgICAgICAgc2hhZGVyVHlwZSA9ICdib3RoJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFsID0gdmFsICE9IG51bGwgPyB2YWwgOiBudWxsO1xyXG4gICAgICAgIGlmIChzaGFkZXJUeXBlID09PSAndmVydGV4JyB8fCBzaGFkZXJUeXBlID09PSAnYm90aCcpIHtcclxuICAgICAgICAgICAgaWYgKHZlcnRleERlZmluZXNbc3ltYm9sXSAhPT0gdmFsKSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0ZXhEZWZpbmVzW3N5bWJvbF0gPSB2YWw7XHJcbiAgICAgICAgICAgICAgICAvLyBNYXJrIGFzIGRpcnR5XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgPT09ICdmcmFnbWVudCcgfHwgc2hhZGVyVHlwZSA9PT0gJ2JvdGgnKSB7XHJcbiAgICAgICAgICAgIGlmIChmcmFnbWVudERlZmluZXNbc3ltYm9sXSAhPT0gdmFsKSB7XHJcbiAgICAgICAgICAgICAgICBmcmFnbWVudERlZmluZXNbc3ltYm9sXSA9IHZhbDtcclxuICAgICAgICAgICAgICAgIGlmIChzaGFkZXJUeXBlICE9PSAnYm90aCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGEgI2RlZmluZSBtYWNybyBpbiBzaGFkZXIgY29kZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJUeXBlIENhbiBiZSB2ZXJ0ZXgsIGZyYWdtZW50IG9yIGJvdGhcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKi9cclxuICAgIHVuZGVmaW5lOiBmdW5jdGlvbiAoc2hhZGVyVHlwZSwgc3ltYm9sKSB7XHJcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgIT09ICd2ZXJ0ZXgnICYmIHNoYWRlclR5cGUgIT09ICdmcmFnbWVudCcgJiYgc2hhZGVyVHlwZSAhPT0gJ2JvdGgnXHJcbiAgICAgICAgICAgICYmIGFyZ3VtZW50cy5sZW5ndGggPCAyXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIHNoYWRlclR5cGUgZGVmYXVsdCB0byBiZSAnYm90aCdcclxuICAgICAgICAgICAgc3ltYm9sID0gc2hhZGVyVHlwZTtcclxuICAgICAgICAgICAgc2hhZGVyVHlwZSA9ICdib3RoJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgPT09ICd2ZXJ0ZXgnIHx8IHNoYWRlclR5cGUgPT09ICdib3RoJykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0RlZmluZWQoJ3ZlcnRleCcsIHN5bWJvbCkpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZlcnRleERlZmluZXNbc3ltYm9sXTtcclxuICAgICAgICAgICAgICAgIC8vIE1hcmsgYXMgZGlydHlcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2hhZGVyVHlwZSA9PT0gJ2ZyYWdtZW50JyB8fCBzaGFkZXJUeXBlID09PSAnYm90aCcpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEZWZpbmVkKCdmcmFnbWVudCcsIHN5bWJvbCkpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmZyYWdtZW50RGVmaW5lc1tzeW1ib2xdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRlclR5cGUgIT09ICdib3RoJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBtYWNybyBpcyBkZWZpbmVkIGluIHNoYWRlci5cclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc2hhZGVyVHlwZSBDYW4gYmUgdmVydGV4LCBmcmFnbWVudCBvciBib3RoXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICovXHJcbiAgICBpc0RlZmluZWQ6IGZ1bmN0aW9uIChzaGFkZXJUeXBlLCBzeW1ib2wpIHtcclxuICAgICAgICAvLyBQRU5ESU5HIGhhc093blByb3BlcnR5ID9cclxuICAgICAgICBzd2l0Y2ggKHNoYWRlclR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAndmVydGV4JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZlcnRleERlZmluZXNbc3ltYm9sXSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBjYXNlICdmcmFnbWVudCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mcmFnbWVudERlZmluZXNbc3ltYm9sXSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBtYWNybyB2YWx1ZSBkZWZpbmVkIGluIHNoYWRlci5cclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc2hhZGVyVHlwZSBDYW4gYmUgdmVydGV4LCBmcmFnbWVudCBvciBib3RoXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICovXHJcbiAgICBnZXREZWZpbmU6IGZ1bmN0aW9uIChzaGFkZXJUeXBlLCBzeW1ib2wpIHtcclxuICAgICAgICBzd2l0Y2goc2hhZGVyVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICd2ZXJ0ZXgnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmVydGV4RGVmaW5lc1tzeW1ib2xdO1xyXG4gICAgICAgICAgICBjYXNlICdmcmFnbWVudCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mcmFnbWVudERlZmluZXNbc3ltYm9sXTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmFibGUgYSB0ZXh0dXJlLCBhY3R1YWxseSBpdCB3aWxsIGFkZCBhICNkZWZpbmUgbWFjcm8gaW4gdGhlIHNoYWRlciBjb2RlXHJcbiAgICAgKiBGb3IgZXhhbXBsZSwgaWYgdGV4dHVyZSBzeW1ib2wgaXMgZGlmZnVzZU1hcCwgaXQgd2lsbCBhZGQgYSBsaW5lIGAjZGVmaW5lIERJRkZVU0VNQVBfRU5BQkxFRGAgaW4gdGhlIHNoYWRlciBjb2RlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICovXHJcbiAgICBlbmFibGVUZXh0dXJlOiBmdW5jdGlvbiAoc3ltYm9sKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3ltYm9sKSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVUZXh0dXJlKHN5bWJvbFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXNbc3ltYm9sXTtcclxuICAgICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHZhciBpc0VuYWJsZWQgPSBzdGF0dXMuZW5hYmxlZDtcclxuICAgICAgICAgICAgaWYgKCFpc0VuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHN0YXR1cy5lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZSBhbGwgdGV4dHVyZXMgdXNlZCBpbiB0aGUgc2hhZGVyXHJcbiAgICAgKi9cclxuICAgIGVuYWJsZVRleHR1cmVzQWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB0aGlzLl90ZXh0dXJlU3RhdHVzO1xyXG4gICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiB0ZXh0dXJlU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHRleHR1cmVTdGF0dXNbc3ltYm9sXS5lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERpc2FibGUgYSB0ZXh0dXJlLCBpdCByZW1vdmUgYSAjZGVmaW5lIG1hY3JvIGluIHRoZSBzaGFkZXJcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKi9cclxuICAgIGRpc2FibGVUZXh0dXJlOiBmdW5jdGlvbiAoc3ltYm9sKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3ltYm9sKSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlVGV4dHVyZShzeW1ib2xbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzdGF0dXMgPSB0aGlzLl90ZXh0dXJlU3RhdHVzW3N5bWJvbF07XHJcbiAgICAgICAgaWYgKHN0YXR1cykge1xyXG4gICAgICAgICAgICB2YXIgaXNEaXNhYmxlZCA9ICEgc3RhdHVzLmVuYWJsZWQ7XHJcbiAgICAgICAgICAgIGlmICghaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzLmVuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERpc2FibGUgYWxsIHRleHR1cmVzIHVzZWQgaW4gdGhlIHNoYWRlclxyXG4gICAgICovXHJcbiAgICBkaXNhYmxlVGV4dHVyZXNBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZVN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXM7XHJcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRleHR1cmVTdGF0dXMpIHtcclxuICAgICAgICAgICAgdGV4dHVyZVN0YXR1c1tzeW1ib2xdLmVuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIElmIHRleHR1cmUgb2YgZ2l2ZW4gdHlwZSBpcyBlbmFibGVkLlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSAgc3ltYm9sXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc1RleHR1cmVFbmFibGVkOiBmdW5jdGlvbiAoc3ltYm9sKSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB0aGlzLl90ZXh0dXJlU3RhdHVzO1xyXG4gICAgICAgIHJldHVybiAhIXRleHR1cmVTdGF0dXNbc3ltYm9sXVxyXG4gICAgICAgICAgICAmJiB0ZXh0dXJlU3RhdHVzW3N5bWJvbF0uZW5hYmxlZDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYWxsIGVuYWJsZWQgdGV4dHVyZXNcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfVxyXG4gICAgICovXHJcbiAgICBnZXRFbmFibGVkVGV4dHVyZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZW5hYmxlZFRleHR1cmVzID0gW107XHJcbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB0aGlzLl90ZXh0dXJlU3RhdHVzO1xyXG4gICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiB0ZXh0dXJlU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlU3RhdHVzW3N5bWJvbF0uZW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZFRleHR1cmVzLnB1c2goc3ltYm9sKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZW5hYmxlZFRleHR1cmVzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmsgZGVmaW5lcyBhcmUgdXBkYXRlZC5cclxuICAgICAqL1xyXG4gICAgZGlydHlEZWZpbmVzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRQcm9ncmFtS2V5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wcm9ncmFtS2V5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSBnZXRQcm9ncmFtS2V5KFxyXG4gICAgICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEZWZpbmVzLCB0aGlzLmZyYWdtZW50RGVmaW5lcywgdGhpcy5nZXRFbmFibGVkVGV4dHVyZXMoKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3JhbUtleTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRlcmlhbDtcclxuIiwiaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcblxyXG52YXIgU0hBREVSX1NUQVRFX1RPX0VOQUJMRSA9IDE7XHJcbnZhciBTSEFERVJfU1RBVEVfS0VFUF9FTkFCTEUgPSAyO1xyXG52YXIgU0hBREVSX1NUQVRFX1BFTkRJTkcgPSAzO1xyXG5cclxuLy8gRW5hYmxlIGF0dHJpYnV0ZSBvcGVyYXRpb24gaXMgZ2xvYmFsIHRvIGFsbCBwcm9ncmFtc1xyXG4vLyBIZXJlIHNhdmVkIHRoZSBsaXN0IG9mIGFsbCBlbmFibGVkIGF0dHJpYnV0ZSBpbmRleFxyXG4vLyBodHRwOi8vd3d3Lm1qYnNoYXcuY29tLzIwMTMvMDMvd2ViZ2wtZml4aW5nLWludmFsaWRvcGVyYXRpb24uaHRtbFxyXG52YXIgZW5hYmxlZEF0dHJpYnV0ZUxpc3QgPSB7fTtcclxuXHJcbi8vIHNvbWUgdXRpbCBmdW5jdGlvbnNcclxuZnVuY3Rpb24gYWRkTGluZU51bWJlcnMoc3RyaW5nKSB7XHJcbiAgICB2YXIgY2h1bmtzID0gc3RyaW5nLnNwbGl0KCdcXG4nKTtcclxuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGNodW5rcy5sZW5ndGg7IGkgPCBpbDsgaSArKykge1xyXG4gICAgICAgIC8vIENocm9tZSByZXBvcnRzIHNoYWRlciBlcnJvcnMgb24gbGluZXNcclxuICAgICAgICAvLyBzdGFydGluZyBjb3VudGluZyBmcm9tIDFcclxuICAgICAgICBjaHVua3NbaV0gPSAoaSArIDEpICsgJzogJyArIGNodW5rc1tpXTtcclxuICAgIH1cclxuICAgIHJldHVybiBjaHVua3Muam9pbignXFxuJyk7XHJcbn1cclxuXHJcbi8vIFJldHVybiB0cnVlIG9yIGVycm9yIG1zZyBpZiBlcnJvciBoYXBwZW5lZFxyXG5mdW5jdGlvbiBjaGVja1NoYWRlckVycm9yTXNnKF9nbCwgc2hhZGVyLCBzaGFkZXJTdHJpbmcpIHtcclxuICAgIGlmICghX2dsLmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIF9nbC5DT01QSUxFX1NUQVRVUykpIHtcclxuICAgICAgICByZXR1cm4gW19nbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlciksIGFkZExpbmVOdW1iZXJzKHNoYWRlclN0cmluZyldLmpvaW4oJ1xcbicpO1xyXG4gICAgfVxyXG59XHJcblxyXG52YXIgdG1wRmxvYXQzMkFycmF5MTYgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSgxNik7XHJcblxyXG52YXIgR0xQcm9ncmFtID0gQmFzZS5leHRlbmQoe1xyXG5cclxuICAgIHVuaWZvcm1TZW1hbnRpY3M6IHt9LFxyXG4gICAgYXR0cmlidXRlczoge31cclxuXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX2xvY2F0aW9ucyA9IHt9O1xyXG5cclxuICAgIHRoaXMuX3RleHR1cmVTbG90ID0gMDtcclxuXHJcbiAgICB0aGlzLl9wcm9ncmFtID0gbnVsbDtcclxufSwge1xyXG5cclxuICAgIGJpbmQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmVTbG90ID0gMDtcclxuICAgICAgICByZW5kZXJlci5nbC51c2VQcm9ncmFtKHRoaXMuX3Byb2dyYW0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBoYXNVbmlmb3JtOiBmdW5jdGlvbiAoc3ltYm9sKSB7XHJcbiAgICAgICAgdmFyIGxvY2F0aW9uID0gdGhpcy5fbG9jYXRpb25zW3N5bWJvbF07XHJcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uICE9PSBudWxsICYmIGxvY2F0aW9uICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9LFxyXG5cclxuICAgIHVzZVRleHR1cmVTbG90OiBmdW5jdGlvbiAocmVuZGVyZXIsIHRleHR1cmUsIHNsb3QpIHtcclxuICAgICAgICBpZiAodGV4dHVyZSkge1xyXG4gICAgICAgICAgICByZW5kZXJlci5nbC5hY3RpdmVUZXh0dXJlKHJlbmRlcmVyLmdsLlRFWFRVUkUwICsgc2xvdCk7XHJcbiAgICAgICAgICAgIC8vIE1heWJlIHRleHR1cmUgaXMgbm90IGxvYWRlZCB5ZXQ7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gQmluZCB0ZXh0dXJlIHRvIG51bGxcclxuICAgICAgICAgICAgICAgIHRleHR1cmUudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY3VycmVudFRleHR1cmVTbG90OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVTbG90O1xyXG4gICAgfSxcclxuXHJcbiAgICByZXNldFRleHR1cmVTbG90OiBmdW5jdGlvbiAoc2xvdCkge1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmVTbG90ID0gc2xvdCB8fCAwO1xyXG4gICAgfSxcclxuXHJcbiAgICB0YWtlQ3VycmVudFRleHR1cmVTbG90OiBmdW5jdGlvbiAocmVuZGVyZXIsIHRleHR1cmUpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZVNsb3QgPSB0aGlzLl90ZXh0dXJlU2xvdDtcclxuXHJcbiAgICAgICAgdGhpcy51c2VUZXh0dXJlU2xvdChyZW5kZXJlciwgdGV4dHVyZSwgdGV4dHVyZVNsb3QpO1xyXG5cclxuICAgICAgICB0aGlzLl90ZXh0dXJlU2xvdCsrO1xyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZVNsb3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFVuaWZvcm06IGZ1bmN0aW9uIChfZ2wsIHR5cGUsIHN5bWJvbCwgdmFsdWUpIHtcclxuICAgICAgICB2YXIgbG9jYXRpb25NYXAgPSB0aGlzLl9sb2NhdGlvbnM7XHJcbiAgICAgICAgdmFyIGxvY2F0aW9uID0gbG9jYXRpb25NYXBbc3ltYm9sXTtcclxuICAgICAgICAvLyBVbmlmb3JtIGlzIG5vdCBleGlzdGVkIGluIHRoZSBzaGFkZXJcclxuICAgICAgICBpZiAobG9jYXRpb24gPT09IG51bGwgfHwgbG9jYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnbTQnOlxyXG4gICAgICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIEZsb2F0MzJBcnJheSBpcyBtdWNoIGZhc3RlciB0aGFuIGFycmF5IHdoZW4gdW5pZm9ybU1hdHJpeDRmdi5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcEZsb2F0MzJBcnJheTE2W2ldID0gdmFsdWVbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdG1wRmxvYXQzMkFycmF5MTY7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICcyaSc6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzJmJzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnM2knOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnM2YnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnNGknOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzRmJzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICcxaSc6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMWYnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzFmdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzFpdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzJpdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzJmdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzNpdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzNmdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzRpdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzRmdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ20yJzpcclxuICAgICAgICAgICAgY2FzZSAnbTJ2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ20zJzpcclxuICAgICAgICAgICAgY2FzZSAnbTN2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ200dic6XHJcbiAgICAgICAgICAgICAgICAvLyBSYXcgdmFsdWVcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBBcnJheS5pc0FycmF5KHZhbHVlWzBdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IG5ldyB2ZW5kb3IuRmxvYXQzMkFycmF5KHZhbHVlLmxlbmd0aCAqIDE2KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc29yID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdmFsdWVbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbY3Vyc29yKytdID0gaXRlbVtqXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIGFycmF5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyAgIC8vIEFycmF5QnVmZmVyVmlld1xyXG4gICAgICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRVbmlmb3JtT2ZTZW1hbnRpYzogZnVuY3Rpb24gKF9nbCwgc2VtYW50aWMsIHZhbCkge1xyXG4gICAgICAgIHZhciBzZW1hbnRpY0luZm8gPSB0aGlzLnVuaWZvcm1TZW1hbnRpY3Nbc2VtYW50aWNdO1xyXG4gICAgICAgIGlmIChzZW1hbnRpY0luZm8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0VW5pZm9ybShfZ2wsIHNlbWFudGljSW5mby50eXBlLCBzZW1hbnRpY0luZm8uc3ltYm9sLCB2YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFVzZWQgZm9yIGNyZWF0aW5nIFZBT1xyXG4gICAgLy8gRW5hYmxlIHRoZSBhdHRyaWJ1dGVzIHBhc3NlZCBpbiBhbmQgZGlzYWJsZSB0aGUgcmVzdFxyXG4gICAgLy8gRXhhbXBsZSBVc2FnZTpcclxuICAgIC8vIGVuYWJsZUF0dHJpYnV0ZXMocmVuZGVyZXIsIFtcInBvc2l0aW9uXCIsIFwidGV4Y29vcmRzXCJdKVxyXG4gICAgZW5hYmxlQXR0cmlidXRlczogZnVuY3Rpb24gKHJlbmRlcmVyLCBhdHRyaWJMaXN0LCB2YW8pIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgdmFyIHByb2dyYW0gPSB0aGlzLl9wcm9ncmFtO1xyXG5cclxuICAgICAgICB2YXIgbG9jYXRpb25NYXAgPSB0aGlzLl9sb2NhdGlvbnM7XHJcblxyXG4gICAgICAgIHZhciBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dDtcclxuICAgICAgICBpZiAodmFvKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0ID0gdmFvLl9fZW5hYmxlZEF0dHJpYnV0ZUxpc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dCA9IGVuYWJsZWRBdHRyaWJ1dGVMaXN0W3JlbmRlcmVyLl9fdWlkX19dO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0KSB7XHJcbiAgICAgICAgICAgIC8vIEluIHZlcnRleCBhcnJheSBvYmplY3QgY29udGV4dFxyXG4gICAgICAgICAgICAvLyBQRU5ESU5HIEVhY2ggdmFvIG9iamVjdCBuZWVkcyB0byBlbmFibGUgYXR0cmlidXRlcyBhZ2Fpbj9cclxuICAgICAgICAgICAgaWYgKHZhbykge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRcclxuICAgICAgICAgICAgICAgICAgICA9IHZhby5fX2VuYWJsZWRBdHRyaWJ1dGVMaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgPSBlbmFibGVkQXR0cmlidXRlTGlzdFtyZW5kZXJlci5fX3VpZF9fXVxyXG4gICAgICAgICAgICAgICAgICAgID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGxvY2F0aW9uTGlzdCA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmliTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgc3ltYm9sID0gYXR0cmliTGlzdFtpXTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmF0dHJpYnV0ZXNbc3ltYm9sXSkge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb25MaXN0W2ldID0gLTE7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgbG9jYXRpb24gPSBsb2NhdGlvbk1hcFtzeW1ib2xdO1xyXG4gICAgICAgICAgICBpZiAobG9jYXRpb24gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb24gPSBfZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgc3ltYm9sKTtcclxuICAgICAgICAgICAgICAgIC8vIEF0dHJpYiBsb2NhdGlvbiBpcyBhIG51bWJlciBmcm9tIDAgdG8gLi4uXHJcbiAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24gPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25MaXN0W2ldID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbk1hcFtzeW1ib2xdID0gbG9jYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbG9jYXRpb25MaXN0W2ldID0gbG9jYXRpb247XHJcblxyXG4gICAgICAgICAgICBpZiAoIWVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0W2xvY2F0aW9uXSkge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbbG9jYXRpb25dID0gU0hBREVSX1NUQVRFX1RPX0VOQUJMRTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0W2xvY2F0aW9uXSA9IFNIQURFUl9TVEFURV9LRUVQX0VOQUJMRTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBzd2l0Y2goZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbaV0pe1xyXG4gICAgICAgICAgICAgICAgY2FzZSBTSEFERVJfU1RBVEVfVE9fRU5BQkxFOlxyXG4gICAgICAgICAgICAgICAgICAgIF9nbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtpXSA9IFNIQURFUl9TVEFURV9QRU5ESU5HO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBTSEFERVJfU1RBVEVfS0VFUF9FTkFCTEU6XHJcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbaV0gPSBTSEFERVJfU1RBVEVfUEVORElORztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIC8vIEV4cGlyZWRcclxuICAgICAgICAgICAgICAgIGNhc2UgU0hBREVSX1NUQVRFX1BFTkRJTkc6XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBsb2NhdGlvbkxpc3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIGJ1aWxkUHJvZ3JhbTogZnVuY3Rpb24gKF9nbCwgc2hhZGVyLCB2ZXJ0ZXhTaGFkZXJDb2RlLCBmcmFnbWVudFNoYWRlckNvZGUpIHtcclxuICAgICAgICB2YXIgdmVydGV4U2hhZGVyID0gX2dsLmNyZWF0ZVNoYWRlcihfZ2wuVkVSVEVYX1NIQURFUik7XHJcbiAgICAgICAgdmFyIHByb2dyYW0gPSBfZ2wuY3JlYXRlUHJvZ3JhbSgpO1xyXG5cclxuICAgICAgICBfZ2wuc2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyQ29kZSk7XHJcbiAgICAgICAgX2dsLmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTtcclxuXHJcbiAgICAgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gX2dsLmNyZWF0ZVNoYWRlcihfZ2wuRlJBR01FTlRfU0hBREVSKTtcclxuICAgICAgICBfZ2wuc2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlckNvZGUpO1xyXG4gICAgICAgIF9nbC5jb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTtcclxuXHJcbiAgICAgICAgdmFyIG1zZyA9IGNoZWNrU2hhZGVyRXJyb3JNc2coX2dsLCB2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNoYWRlckNvZGUpO1xyXG4gICAgICAgIGlmIChtc2cpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1zZztcclxuICAgICAgICB9XHJcbiAgICAgICAgbXNnID0gY2hlY2tTaGFkZXJFcnJvck1zZyhfZ2wsIGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlckNvZGUpO1xyXG4gICAgICAgIGlmIChtc2cpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1zZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9nbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgdmVydGV4U2hhZGVyKTtcclxuICAgICAgICBfZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTtcclxuICAgICAgICAvLyBGb3JjZSB0aGUgcG9zaXRpb24gYmluZCB0byBsb2NhdGlvbiAwO1xyXG4gICAgICAgIGlmIChzaGFkZXIuYXR0cmlidXRlU2VtYW50aWNzWydQT1NJVElPTiddKSB7XHJcbiAgICAgICAgICAgIF9nbC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgMCwgc2hhZGVyLmF0dHJpYnV0ZVNlbWFudGljc1snUE9TSVRJT04nXS5zeW1ib2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gRWxzZSBjaG9vc2UgYW4gYXR0cmlidXRlIGFuZCBiaW5kIHRvIGxvY2F0aW9uIDA7XHJcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKTtcclxuICAgICAgICAgICAgX2dsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAwLCBrZXlzWzBdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9nbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcclxuXHJcbiAgICAgICAgX2dsLmRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpO1xyXG4gICAgICAgIF9nbC5kZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9wcm9ncmFtID0gcHJvZ3JhbTtcclxuXHJcbiAgICAgICAgLy8gU2F2ZSBjb2RlLlxyXG4gICAgICAgIHRoaXMudmVydGV4Q29kZSA9IHZlcnRleFNoYWRlckNvZGU7XHJcbiAgICAgICAgdGhpcy5mcmFnbWVudENvZGUgPSBmcmFnbWVudFNoYWRlckNvZGU7XHJcblxyXG4gICAgICAgIGlmICghX2dsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgX2dsLkxJTktfU1RBVFVTKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ0NvdWxkIG5vdCBsaW5rIHByb2dyYW1cXG4nICsgX2dsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ2FjaGUgdW5pZm9ybSBsb2NhdGlvbnNcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNoYWRlci51bmlmb3Jtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybVN5bWJvbCA9IHNoYWRlci51bmlmb3Jtc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5fbG9jYXRpb25zW3VuaWZvcm1TeW1ib2xdID0gX2dsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1bmlmb3JtU3ltYm9sKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdMUHJvZ3JhbTsiLCJpbXBvcnQgR0xQcm9ncmFtIGZyb20gJy4vR0xQcm9ncmFtJztcclxuXHJcbnZhciBsb29wUmVnZXggPSAvZm9yXFxzKj9cXChpbnRcXHMqP19pZHhfXFxzKlxcPVxccyooW1xcdy1dKylcXDtcXHMqX2lkeF9cXHMqPFxccyooW1xcdy1dKyk7XFxzKl9pZHhfXFxzKlxcK1xcK1xccypcXClcXHMqXFx7XFx7KFtcXHNcXFNdKz8pKD89XFx9XFx9KVxcfVxcfS9nO1xyXG5cclxuZnVuY3Rpb24gdW5yb2xsTG9vcChzaGFkZXJTdHIsIGRlZmluZXMsIGxpZ2h0c051bWJlcnMpIHtcclxuICAgIC8vIExvb3AgdW5yb2xsIGZyb20gdGhyZWUuanMsIGh0dHBzOi8vZ2l0aHViLmNvbS9tcmRvb2IvdGhyZWUuanMvYmxvYi9tYXN0ZXIvc3JjL3JlbmRlcmVycy93ZWJnbC9XZWJHTFByb2dyYW0uanMjTDE3NVxyXG4gICAgLy8gSW4gc29tZSBjYXNlIGxpa2Ugc2hhZG93TWFwIGluIGxvb3AgdXNlICdpJyB0byBpbmRleCB2YWx1ZSBtdWNoIHNsb3dlci5cclxuXHJcbiAgICAvLyBMb29wIHVzZSBfaWR4XyBhbmQgaW5jcmVhc2VkIHdpdGggX2lkeF8rKyB3aWxsIGJlIHVucm9sbGVkXHJcbiAgICAvLyBVc2Uge3sgfX0gdG8gbWF0Y2ggdGhlIHBhaXIgc28gdGhlIGlmIHN0YXRlbWVudCB3aWxsIG5vdCBiZSBhZmZlY3RlZFxyXG4gICAgLy8gV3JpdGUgbGlrZSBmb2xsb3dpbmdcclxuICAgIC8vIGZvciAoaW50IF9pZHhfID0gMDsgX2lkeF8gPCA0OyBfaWR4XysrKSB7e1xyXG4gICAgLy8gICAgIHZlYzMgY29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZXNbX2lkeF9dLCB1dikucmdiO1xyXG4gICAgLy8gfX1cclxuICAgIGZ1bmN0aW9uIHJlcGxhY2UobWF0Y2gsIHN0YXJ0LCBlbmQsIHNuaXBwZXQpIHtcclxuICAgICAgICB2YXIgdW5yb2xsID0gJyc7XHJcbiAgICAgICAgLy8gVHJ5IHRvIHRyZWF0IGFzIGRlZmluZVxyXG4gICAgICAgIGlmIChpc05hTihzdGFydCkpIHtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0IGluIGRlZmluZXMpIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gZGVmaW5lc1tzdGFydF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydCA9IGxpZ2h0TnVtYmVyRGVmaW5lc1tzdGFydF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzTmFOKGVuZCkpIHtcclxuICAgICAgICAgICAgaWYgKGVuZCBpbiBkZWZpbmVzKSB7XHJcbiAgICAgICAgICAgICAgICBlbmQgPSBkZWZpbmVzW2VuZF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbmQgPSBsaWdodE51bWJlckRlZmluZXNbZW5kXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPIEVycm9yIGNoZWNraW5nXHJcblxyXG4gICAgICAgIGZvciAodmFyIGlkeCA9IHBhcnNlSW50KHN0YXJ0KTsgaWR4IDwgcGFyc2VJbnQoZW5kKTsgaWR4KyspIHtcclxuICAgICAgICAgICAgLy8gUEVORElORyBBZGQgc2NvcGU/XHJcbiAgICAgICAgICAgIHVucm9sbCArPSAneydcclxuICAgICAgICAgICAgICAgICsgc25pcHBldFxyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9mbG9hdFxccypcXChcXHMqX2lkeF9cXHMqXFwpL2csIGlkeC50b0ZpeGVkKDEpKVxyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9faWR4Xy9nLCBpZHgpXHJcbiAgICAgICAgICAgICsgJ30nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVucm9sbDtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbGlnaHROdW1iZXJEZWZpbmVzID0ge307XHJcbiAgICBmb3IgKHZhciBsaWdodFR5cGUgaW4gbGlnaHRzTnVtYmVycykge1xyXG4gICAgICAgIGxpZ2h0TnVtYmVyRGVmaW5lc1tsaWdodFR5cGUgKyAnX0NPVU5UJ10gPSBsaWdodHNOdW1iZXJzW2xpZ2h0VHlwZV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2hhZGVyU3RyLnJlcGxhY2UobG9vcFJlZ2V4LCByZXBsYWNlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0RGVmaW5lQ29kZShkZWZpbmVzLCBsaWdodHNOdW1iZXJzLCBlbmFibGVkVGV4dHVyZXMpIHtcclxuICAgIHZhciBkZWZpbmVTdHIgPSBbXTtcclxuICAgIGlmIChsaWdodHNOdW1iZXJzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgbGlnaHRUeXBlIGluIGxpZ2h0c051bWJlcnMpIHtcclxuICAgICAgICAgICAgdmFyIGNvdW50ID0gbGlnaHRzTnVtYmVyc1tsaWdodFR5cGVdO1xyXG4gICAgICAgICAgICBpZiAoY291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBkZWZpbmVTdHIucHVzaCgnI2RlZmluZSAnICsgbGlnaHRUeXBlLnRvVXBwZXJDYXNlKCkgKyAnX0NPVU5UICcgKyBjb3VudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZW5hYmxlZFRleHR1cmVzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkVGV4dHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHN5bWJvbCA9IGVuYWJsZWRUZXh0dXJlc1tpXTtcclxuICAgICAgICAgICAgZGVmaW5lU3RyLnB1c2goJyNkZWZpbmUgJyArIHN5bWJvbC50b1VwcGVyQ2FzZSgpICsgJ19FTkFCTEVEJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gQ3VzdG9tIERlZmluZXNcclxuICAgIGZvciAodmFyIHN5bWJvbCBpbiBkZWZpbmVzKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gZGVmaW5lc1tzeW1ib2xdO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaCgnI2RlZmluZSAnICsgc3ltYm9sKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgZGVmaW5lU3RyLnB1c2goJyNkZWZpbmUgJyArIHN5bWJvbCArICcgJyArIHZhbHVlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkZWZpbmVTdHIuam9pbignXFxuJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEV4dGVuc2lvbkNvZGUoZXh0cykge1xyXG4gICAgLy8gRXh0ZW5zaW9uIGRlY2xhcmF0aW9uIG11c3QgYmVmb3JlIGFsbCBub24tcHJlcHJvY2Vzc29yIGNvZGVzXHJcbiAgICAvLyBUT0RPIHZlcnRleCA/IGV4dGVuc2lvbiBlbnVtID9cclxuICAgIHZhciBleHRlbnNpb25TdHIgPSBbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGV4dGVuc2lvblN0ci5wdXNoKCcjZXh0ZW5zaW9uIEdMXycgKyBleHRzW2ldICsgJyA6IGVuYWJsZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGV4dGVuc2lvblN0ci5qb2luKCdcXG4nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UHJlY2lzaW9uQ29kZShwcmVjaXNpb24pIHtcclxuICAgIHJldHVybiBbJ3ByZWNpc2lvbicsIHByZWNpc2lvbiwgJ2Zsb2F0J10uam9pbignICcpICsgJztcXG4nXHJcbiAgICAgICAgKyBbJ3ByZWNpc2lvbicsIHByZWNpc2lvbiwgJ2ludCddLmpvaW4oJyAnKSArICc7XFxuJ1xyXG4gICAgICAgIC8vIGRlcHRoIHRleHR1cmUgbWF5IGhhdmUgcHJlY2lzaW9uIHByb2JsZW0gb24gaU9TIGRldmljZS5cclxuICAgICAgICArIFsncHJlY2lzaW9uJywgcHJlY2lzaW9uLCAnc2FtcGxlcjJEJ10uam9pbignICcpICsgJztcXG4nO1xyXG59XHJcblxyXG5mdW5jdGlvbiBQcm9ncmFtTWFuYWdlcihyZW5kZXJlcikge1xyXG4gICAgdGhpcy5fcmVuZGVyZXIgPSByZW5kZXJlcjtcclxuICAgIHRoaXMuX2NhY2hlID0ge307XHJcbn1cclxuXHJcblByb2dyYW1NYW5hZ2VyLnByb3RvdHlwZS5nZXRQcm9ncmFtID0gZnVuY3Rpb24gKHJlbmRlcmFibGUsIG1hdGVyaWFsLCBzY2VuZSkge1xyXG4gICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcblxyXG4gICAgdmFyIGlzU2tpbm5lZE1lc2ggPSByZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2ggJiYgcmVuZGVyYWJsZS5pc1NraW5uZWRNZXNoKCk7XHJcbiAgICB2YXIga2V5ID0gJ3MnICsgbWF0ZXJpYWwuc2hhZGVyLnNoYWRlcklEICsgJ20nICsgbWF0ZXJpYWwuZ2V0UHJvZ3JhbUtleSgpO1xyXG4gICAgaWYgKHNjZW5lKSB7XHJcbiAgICAgICAga2V5ICs9ICdzZScgKyBzY2VuZS5nZXRQcm9ncmFtS2V5KHJlbmRlcmFibGUubGlnaHRHcm91cCk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNTa2lubmVkTWVzaCkge1xyXG4gICAgICAgIGtleSArPSAnLCcgKyByZW5kZXJhYmxlLmpvaW50cy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICB2YXIgcHJvZ3JhbSA9IGNhY2hlW2tleV07XHJcblxyXG4gICAgaWYgKHByb2dyYW0pIHtcclxuICAgICAgICByZXR1cm4gcHJvZ3JhbTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbGlnaHRzTnVtYmVycyA9IHNjZW5lID8gc2NlbmUuZ2V0TGlnaHRzTnVtYmVycyhyZW5kZXJhYmxlLmxpZ2h0R3JvdXApIDoge307XHJcbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLl9yZW5kZXJlcjtcclxuICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgIHZhciBlbmFibGVkVGV4dHVyZXMgPSBtYXRlcmlhbC5nZXRFbmFibGVkVGV4dHVyZXMoKTtcclxuICAgIHZhciBza2luRGVmaW5lQ29kZSA9ICcnO1xyXG4gICAgaWYgKGlzU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICB2YXIgc2tpbkRlZmluZXMgPSB7XHJcbiAgICAgICAgICAgIFNLSU5OSU5HOiBudWxsLFxyXG4gICAgICAgICAgICBKT0lOVF9DT1VOVDogcmVuZGVyYWJsZS5qb2ludHMubGVuZ3RoXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAocmVuZGVyYWJsZS5qb2ludHMubGVuZ3RoID4gcmVuZGVyZXIuZ2V0TWF4Sm9pbnROdW1iZXIoKSkge1xyXG4gICAgICAgICAgICBza2luRGVmaW5lcy5VU0VfU0tJTl9NQVRSSUNFU19URVhUVVJFID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETyBBZGQgc2tpbm5pbmcgY29kZT9cclxuICAgICAgICBza2luRGVmaW5lQ29kZSA9ICdcXG4nICsgZ2V0RGVmaW5lQ29kZShza2luRGVmaW5lcykgKyAnXFxuJztcclxuICAgIH1cclxuICAgIC8vIFRPRE8gT3B0aW1pemUga2V5IGdlbmVyYXRpb25cclxuICAgIC8vIFZFUlRFWFxyXG4gICAgdmFyIHZlcnRleERlZmluZVN0ciA9IHNraW5EZWZpbmVDb2RlICsgZ2V0RGVmaW5lQ29kZShtYXRlcmlhbC52ZXJ0ZXhEZWZpbmVzLCBsaWdodHNOdW1iZXJzLCBlbmFibGVkVGV4dHVyZXMpO1xyXG4gICAgLy8gRlJBR01FTlRcclxuICAgIHZhciBmcmFnbWVudERlZmluZVN0ciA9IHNraW5EZWZpbmVDb2RlICsgZ2V0RGVmaW5lQ29kZShtYXRlcmlhbC5mcmFnbWVudERlZmluZXMsIGxpZ2h0c051bWJlcnMsIGVuYWJsZWRUZXh0dXJlcyk7XHJcblxyXG4gICAgdmFyIHZlcnRleENvZGUgPSB2ZXJ0ZXhEZWZpbmVTdHIgKyAnXFxuJyArIG1hdGVyaWFsLnNoYWRlci52ZXJ0ZXg7XHJcblxyXG4gICAgdmFyIGV4dGVuc2lvbnMgPSBbXHJcbiAgICAgICAgJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycsXHJcbiAgICAgICAgJ0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QnXHJcbiAgICBdLmZpbHRlcihmdW5jdGlvbiAoZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKGV4dCkgIT0gbnVsbDtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChleHRlbnNpb25zLmluZGV4T2YoJ0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QnKSA+PSAwKSB7XHJcbiAgICAgICAgZnJhZ21lbnREZWZpbmVTdHIgKz0gJ1xcbiNkZWZpbmUgU1VQUE9SVF9URVhUVVJFX0xPRCc7XHJcbiAgICB9XHJcbiAgICBpZiAoZXh0ZW5zaW9ucy5pbmRleE9mKCdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMnKSA+PSAwKSB7XHJcbiAgICAgICAgZnJhZ21lbnREZWZpbmVTdHIgKz0gJ1xcbiNkZWZpbmUgU1VQUE9SVF9TVEFOREFSRF9ERVJJVkFUSVZFUyc7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGZyYWdtZW50Q29kZSA9IGdldEV4dGVuc2lvbkNvZGUoZXh0ZW5zaW9ucykgKyAnXFxuJ1xyXG4gICAgICAgICsgZ2V0UHJlY2lzaW9uQ29kZShtYXRlcmlhbC5wcmVjaXNpb24pICsgJ1xcbidcclxuICAgICAgICArIGZyYWdtZW50RGVmaW5lU3RyICsgJ1xcbidcclxuICAgICAgICArIG1hdGVyaWFsLnNoYWRlci5mcmFnbWVudDtcclxuXHJcbiAgICB2YXIgZmluYWxWZXJ0ZXhDb2RlID0gdW5yb2xsTG9vcCh2ZXJ0ZXhDb2RlLCBtYXRlcmlhbC52ZXJ0ZXhEZWZpbmVzLCBsaWdodHNOdW1iZXJzKTtcclxuICAgIHZhciBmaW5hbEZyYWdtZW50Q29kZSA9IHVucm9sbExvb3AoZnJhZ21lbnRDb2RlLCBtYXRlcmlhbC5mcmFnbWVudERlZmluZXMsIGxpZ2h0c051bWJlcnMpO1xyXG5cclxuICAgIHZhciBwcm9ncmFtID0gbmV3IEdMUHJvZ3JhbSgpO1xyXG4gICAgcHJvZ3JhbS51bmlmb3JtU2VtYW50aWNzID0gbWF0ZXJpYWwuc2hhZGVyLnVuaWZvcm1TZW1hbnRpY3M7XHJcbiAgICBwcm9ncmFtLmF0dHJpYnV0ZXMgPSBtYXRlcmlhbC5zaGFkZXIuYXR0cmlidXRlcztcclxuICAgIHZhciBlcnJvck1zZyA9IHByb2dyYW0uYnVpbGRQcm9ncmFtKF9nbCwgbWF0ZXJpYWwuc2hhZGVyLCBmaW5hbFZlcnRleENvZGUsIGZpbmFsRnJhZ21lbnRDb2RlKTtcclxuICAgIHByb2dyYW0uX19lcnJvciA9IGVycm9yTXNnO1xyXG5cclxuICAgIGNhY2hlW2tleV0gPSBwcm9ncmFtO1xyXG5cclxuICAgIHJldHVybiBwcm9ncmFtO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUHJvZ3JhbU1hbmFnZXI7IiwiLyoqXHJcbiAqIE1haW5seSBkbyB0aGUgcGFyc2UgYW5kIGNvbXBpbGUgb2Ygc2hhZGVyIHN0cmluZ1xyXG4gKiBTdXBwb3J0IHNoYWRlciBjb2RlIGNodW5rIGltcG9ydCBhbmQgZXhwb3J0XHJcbiAqIFN1cHBvcnQgc2hhZGVyIHNlbWFudGljc1xyXG4gKiBodHRwOi8vd3d3Lm52aWRpYS5jb20vb2JqZWN0L3VzaW5nX3Nhcy5odG1sXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvY29sbGFkYTJqc29uL2lzc3Vlcy80NVxyXG4gKi9cclxuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4vY29yZS92ZW5kb3InO1xyXG5cclxudmFyIHVuaWZvcm1SZWdleCA9IC91bmlmb3JtXFxzKyhib29sfGZsb2F0fGludHx2ZWMyfHZlYzN8dmVjNHxpdmVjMnxpdmVjM3xpdmVjNHxtYXQyfG1hdDN8bWF0NHxzYW1wbGVyMkR8c2FtcGxlckN1YmUpXFxzKyhbXFxzXFxTXSo/KTsvZztcclxudmFyIGF0dHJpYnV0ZVJlZ2V4ID0gL2F0dHJpYnV0ZVxccysoZmxvYXR8aW50fHZlYzJ8dmVjM3x2ZWM0KVxccysoW1xcc1xcU10qPyk7L2c7XHJcbi8vIE9ubHkgcGFyc2UgbnVtYmVyIGRlZmluZS5cclxudmFyIGRlZmluZVJlZ2V4ID0gLyNkZWZpbmVcXHMrKFxcdyspPyhcXHMrW1xcZC0uXSspP1xccyo7P1xccypcXG4vZztcclxuXHJcbnZhciB1bmlmb3JtVHlwZU1hcCA9IHtcclxuICAgICdib29sJzogJzFpJyxcclxuICAgICdpbnQnOiAnMWknLFxyXG4gICAgJ3NhbXBsZXIyRCc6ICd0JyxcclxuICAgICdzYW1wbGVyQ3ViZSc6ICd0JyxcclxuICAgICdmbG9hdCc6ICcxZicsXHJcbiAgICAndmVjMic6ICcyZicsXHJcbiAgICAndmVjMyc6ICczZicsXHJcbiAgICAndmVjNCc6ICc0ZicsXHJcbiAgICAnaXZlYzInOiAnMmknLFxyXG4gICAgJ2l2ZWMzJzogJzNpJyxcclxuICAgICdpdmVjNCc6ICc0aScsXHJcbiAgICAnbWF0Mic6ICdtMicsXHJcbiAgICAnbWF0Myc6ICdtMycsXHJcbiAgICAnbWF0NCc6ICdtNCdcclxufTtcclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVplcm9BcnJheShsZW4pIHtcclxuICAgIHZhciBhcnIgPSBbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBhcnJbaV0gPSAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFycjtcclxufVxyXG5cclxudmFyIHVuaWZvcm1WYWx1ZUNvbnN0cnVjdG9yID0ge1xyXG4gICAgJ2Jvb2wnOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9LFxyXG4gICAgJ2ludCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDA7IH0sXHJcbiAgICAnZmxvYXQnOiBmdW5jdGlvbiAoKSB7IHJldHVybiAwOyB9LFxyXG4gICAgJ3NhbXBsZXIyRCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH0sXHJcbiAgICAnc2FtcGxlckN1YmUnOiBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsOyB9LFxyXG5cclxuICAgICd2ZWMyJzogZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlWmVyb0FycmF5KDIpOyB9LFxyXG4gICAgJ3ZlYzMnOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoMyk7IH0sXHJcbiAgICAndmVjNCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSg0KTsgfSxcclxuXHJcbiAgICAnaXZlYzInOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoMik7IH0sXHJcbiAgICAnaXZlYzMnOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoMyk7IH0sXHJcbiAgICAnaXZlYzQnOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoNCk7IH0sXHJcblxyXG4gICAgJ21hdDInOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoNCk7IH0sXHJcbiAgICAnbWF0Myc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSg5KTsgfSxcclxuICAgICdtYXQ0JzogZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlWmVyb0FycmF5KDE2KTsgfSxcclxuXHJcbiAgICAnYXJyYXknOiBmdW5jdGlvbiAoKSB7IHJldHVybiBbXTsgfVxyXG59O1xyXG5cclxudmFyIGF0dHJpYnV0ZVNlbWFudGljcyA9IFtcclxuICAgICdQT1NJVElPTicsXHJcbiAgICAnTk9STUFMJyxcclxuICAgICdCSU5PUk1BTCcsXHJcbiAgICAnVEFOR0VOVCcsXHJcbiAgICAnVEVYQ09PUkQnLFxyXG4gICAgJ1RFWENPT1JEXzAnLFxyXG4gICAgJ1RFWENPT1JEXzEnLFxyXG4gICAgJ0NPTE9SJyxcclxuICAgIC8vIFNraW5uaW5nXHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvYmxvYi9tYXN0ZXIvc3BlY2lmaWNhdGlvbi9SRUFETUUubWQjc2VtYW50aWNzXHJcbiAgICAnSk9JTlQnLFxyXG4gICAgJ1dFSUdIVCdcclxuXTtcclxudmFyIHVuaWZvcm1TZW1hbnRpY3MgPSBbXHJcbiAgICAnU0tJTl9NQVRSSVgnLFxyXG4gICAgLy8gSW5mb3JtYXRpb24gYWJvdXQgdmlld3BvcnRcclxuICAgICdWSUVXUE9SVF9TSVpFJyxcclxuICAgICdWSUVXUE9SVCcsXHJcbiAgICAnREVWSUNFUElYRUxSQVRJTycsXHJcbiAgICAvLyBXaW5kb3cgc2l6ZSBmb3Igd2luZG93IHJlbGF0aXZlIGNvb3JkaW5hdGVcclxuICAgIC8vIGh0dHBzOi8vd3d3Lm9wZW5nbC5vcmcvc2RrL2RvY3MvbWFuL2h0bWwvZ2xfRnJhZ0Nvb3JkLnhodG1sXHJcbiAgICAnV0lORE9XX1NJWkUnLFxyXG4gICAgLy8gSW5mb21hdGlvbiBhYm91dCBjYW1lcmFcclxuICAgICdORUFSJyxcclxuICAgICdGQVInLFxyXG4gICAgLy8gVGltZVxyXG4gICAgJ1RJTUUnXHJcbl07XHJcbnZhciBtYXRyaXhTZW1hbnRpY3MgPSBbXHJcbiAgICAnV09STEQnLFxyXG4gICAgJ1ZJRVcnLFxyXG4gICAgJ1BST0pFQ1RJT04nLFxyXG4gICAgJ1dPUkxEVklFVycsXHJcbiAgICAnVklFV1BST0pFQ1RJT04nLFxyXG4gICAgJ1dPUkxEVklFV1BST0pFQ1RJT04nLFxyXG4gICAgJ1dPUkxESU5WRVJTRScsXHJcbiAgICAnVklFV0lOVkVSU0UnLFxyXG4gICAgJ1BST0pFQ1RJT05JTlZFUlNFJyxcclxuICAgICdXT1JMRFZJRVdJTlZFUlNFJyxcclxuICAgICdWSUVXUFJPSkVDVElPTklOVkVSU0UnLFxyXG4gICAgJ1dPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFJyxcclxuICAgICdXT1JMRFRSQU5TUE9TRScsXHJcbiAgICAnVklFV1RSQU5TUE9TRScsXHJcbiAgICAnUFJPSkVDVElPTlRSQU5TUE9TRScsXHJcbiAgICAnV09STERWSUVXVFJBTlNQT1NFJyxcclxuICAgICdWSUVXUFJPSkVDVElPTlRSQU5TUE9TRScsXHJcbiAgICAnV09STERWSUVXUFJPSkVDVElPTlRSQU5TUE9TRScsXHJcbiAgICAnV09STERJTlZFUlNFVFJBTlNQT1NFJyxcclxuICAgICdWSUVXSU5WRVJTRVRSQU5TUE9TRScsXHJcbiAgICAnUFJPSkVDVElPTklOVkVSU0VUUkFOU1BPU0UnLFxyXG4gICAgJ1dPUkxEVklFV0lOVkVSU0VUUkFOU1BPU0UnLFxyXG4gICAgJ1ZJRVdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRScsXHJcbiAgICAnV09STERWSUVXUFJPSkVDVElPTklOVkVSU0VUUkFOU1BPU0UnXHJcbl07XHJcblxyXG52YXIgYXR0cmlidXRlU2l6ZU1hcCA9IHtcclxuICAgIC8vIFdlYkdMIGRvZXMgbm90IHN1cHBvcnQgaW50ZWdlciBhdHRyaWJ1dGVzXHJcbiAgICAndmVjNCc6IDQsXHJcbiAgICAndmVjMyc6IDMsXHJcbiAgICAndmVjMic6IDIsXHJcbiAgICAnZmxvYXQnOiAxXHJcbn07XHJcblxyXG5cclxudmFyIHNoYWRlcklEQ2FjaGUgPSB7fTtcclxudmFyIHNoYWRlckNvZGVDYWNoZSA9IHt9O1xyXG5cclxuZnVuY3Rpb24gZ2V0U2hhZGVySUQodmVydGV4LCBmcmFnbWVudCkge1xyXG4gICAgdmFyIGtleSA9ICd2ZXJ0ZXg6JyArIHZlcnRleCArICdmcmFnbWVudDonICsgZnJhZ21lbnQ7XHJcbiAgICBpZiAoc2hhZGVySURDYWNoZVtrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIHNoYWRlcklEQ2FjaGVba2V5XTtcclxuICAgIH1cclxuICAgIHZhciBpZCA9IHV0aWwuZ2VuR1VJRCgpO1xyXG4gICAgc2hhZGVySURDYWNoZVtrZXldID0gaWQ7XHJcblxyXG4gICAgc2hhZGVyQ29kZUNhY2hlW2lkXSA9IHtcclxuICAgICAgICB2ZXJ0ZXg6IHZlcnRleCxcclxuICAgICAgICBmcmFnbWVudDogZnJhZ21lbnRcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGlkO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVDb21tZW50KGNvZGUpIHtcclxuICAgIHJldHVybiBjb2RlLnJlcGxhY2UoL1sgXFx0XSpcXC9cXC8uKlxcbi9nLCAnJyApICAgLy8gcmVtb3ZlIC8vXHJcbiAgICAgICAgLnJlcGxhY2UoL1sgXFx0XSpcXC9cXCpbXFxzXFxTXSo/XFwqXFwvL2csICcnICk7IC8vIHJlbW92ZSAvKiAqL1xyXG59XHJcblxyXG5mdW5jdGlvbiBsb2dTeW50YXhFcnJvcigpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoJ1dyb25nIHVuaWZvcm0vYXR0cmlidXRlcyBzeW50YXgnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VEZWNsYXJhdGlvbnModHlwZSwgbGluZSkge1xyXG4gICAgdmFyIHNwZXJhdG9yc1JlZ2V4cCA9IC9bLD1cXChcXCk6XS87XHJcbiAgICB2YXIgdG9rZW5zID0gbGluZVxyXG4gICAgICAgIC8vIENvbnZlcnQgYHN5bWJvbDogWzEsMiwzXWAgdG8gYHN5bWJvbDogdmVjMygxLDIsMylgXHJcbiAgICAgICAgLnJlcGxhY2UoLzpcXHMqXFxbXFxzKiguKilcXHMqXFxdL2csICc9JyArIHR5cGUgKyAnKCQxKScpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xccysvZywgJycpXHJcbiAgICAgICAgLnNwbGl0KC8oPz1bLD1cXChcXCk6XSkvZyk7XHJcblxyXG4gICAgdmFyIG5ld1Rva2VucyA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAodG9rZW5zW2ldLm1hdGNoKHNwZXJhdG9yc1JlZ2V4cCkpIHtcclxuICAgICAgICAgICAgbmV3VG9rZW5zLnB1c2goXHJcbiAgICAgICAgICAgICAgICB0b2tlbnNbaV0uY2hhckF0KDApLFxyXG4gICAgICAgICAgICAgICAgdG9rZW5zW2ldLnNsaWNlKDEpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBuZXdUb2tlbnMucHVzaCh0b2tlbnNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRva2VucyA9IG5ld1Rva2VucztcclxuXHJcbiAgICB2YXIgVFlQRV9TWU1CT0wgPSAwO1xyXG4gICAgdmFyIFRZUEVfQVNTSUdOID0gMTtcclxuICAgIHZhciBUWVBFX1ZFQyA9IDI7XHJcbiAgICB2YXIgVFlQRV9BUlIgPSAzO1xyXG4gICAgdmFyIFRZUEVfU0VNQU5USUMgPSA0O1xyXG4gICAgdmFyIFRZUEVfTk9STUFMID0gNTtcclxuXHJcbiAgICB2YXIgb3BUeXBlID0gVFlQRV9TWU1CT0w7XHJcbiAgICB2YXIgZGVjbGFyYXRpb25zID0ge307XHJcbiAgICB2YXIgZGVjbGFyYXRpb25WYWx1ZSA9IG51bGw7XHJcbiAgICB2YXIgY3VycmVudERlY2xhcmF0aW9uO1xyXG5cclxuICAgIGFkZFN5bWJvbCh0b2tlbnNbMF0pO1xyXG5cclxuICAgIGZ1bmN0aW9uIGFkZFN5bWJvbChzeW1ib2wpIHtcclxuICAgICAgICBpZiAoIXN5bWJvbCkge1xyXG4gICAgICAgICAgICBsb2dTeW50YXhFcnJvcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYXJyUmVzdWx0ID0gc3ltYm9sLm1hdGNoKC9cXFsoLio/KVxcXS8pO1xyXG4gICAgICAgIGN1cnJlbnREZWNsYXJhdGlvbiA9IHN5bWJvbC5yZXBsYWNlKC9cXFsoLio/KVxcXS8sICcnKTtcclxuICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXSA9IHt9O1xyXG4gICAgICAgIGlmIChhcnJSZXN1bHQpIHtcclxuICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0uaXNBcnJheSA9IHRydWU7XHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dLmFycmF5U2l6ZSA9IGFyclJlc3VsdFsxXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07XHJcbiAgICAgICAgaWYgKCF0b2tlbikgeyAgIC8vIEVtcHR5IHRva2VuO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRva2VuID09PSAnPScpIHtcclxuICAgICAgICAgICAgaWYgKG9wVHlwZSAhPT0gVFlQRV9TWU1CT0xcclxuICAgICAgICAgICAgJiYgb3BUeXBlICE9PSBUWVBFX0FSUikge1xyXG4gICAgICAgICAgICAgICAgbG9nU3ludGF4RXJyb3IoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wVHlwZSA9IFRZUEVfQVNTSUdOO1xyXG5cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRva2VuID09PSAnOicpIHtcclxuICAgICAgICAgICAgb3BUeXBlID0gVFlQRV9TRU1BTlRJQztcclxuXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0b2tlbiA9PT0gJywnKSB7XHJcbiAgICAgICAgICAgIGlmIChvcFR5cGUgPT09IFRZUEVfVkVDKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIShkZWNsYXJhdGlvblZhbHVlIGluc3RhbmNlb2YgQXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nU3ludGF4RXJyb3IoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uVmFsdWUucHVzaCgrdG9rZW5zWysraV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb3BUeXBlID0gVFlQRV9OT1JNQUw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0b2tlbiA9PT0gJyknKSB7XHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dLnZhbHVlID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoZGVjbGFyYXRpb25WYWx1ZSk7XHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICBvcFR5cGUgPSBUWVBFX05PUk1BTDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRva2VuID09PSAnKCcpIHtcclxuICAgICAgICAgICAgaWYgKG9wVHlwZSAhPT0gVFlQRV9WRUMpIHtcclxuICAgICAgICAgICAgICAgIGxvZ1N5bnRheEVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIShkZWNsYXJhdGlvblZhbHVlIGluc3RhbmNlb2YgQXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICBsb2dTeW50YXhFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVjbGFyYXRpb25WYWx1ZS5wdXNoKCt0b2tlbnNbKytpXSk7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0b2tlbi5pbmRleE9mKCd2ZWMnKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChvcFR5cGUgIT09IFRZUEVfQVNTSUdOXHJcbiAgICAgICAgICAgIC8vIENvbXBhdGl0YWJsZSB3aXRoIG9sZCBzeW50YXggYHN5bWJvbDogWzEsMiwzXWBcclxuICAgICAgICAgICAgJiYgb3BUeXBlICE9PSBUWVBFX1NFTUFOVElDKSB7XHJcbiAgICAgICAgICAgICAgICBsb2dTeW50YXhFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3BUeXBlID0gVFlQRV9WRUM7XHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uVmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG9wVHlwZSA9PT0gVFlQRV9BU1NJR04pIHtcclxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdib29sJykge1xyXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0udmFsdWUgPSB0b2tlbiA9PT0gJ3RydWUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0udmFsdWUgPSBwYXJzZUZsb2F0KHRva2VuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWNsYXJhdGlvblZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG9wVHlwZSA9PT0gVFlQRV9TRU1BTlRJQykge1xyXG4gICAgICAgICAgICB2YXIgc2VtYW50aWMgPSB0b2tlbjtcclxuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZVNlbWFudGljcy5pbmRleE9mKHNlbWFudGljKSA+PSAwXHJcbiAgICAgICAgICAgICAgICB8fCB1bmlmb3JtU2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDBcclxuICAgICAgICAgICAgICAgIHx8IG1hdHJpeFNlbWFudGljcy5pbmRleE9mKHNlbWFudGljKSA+PSAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0uc2VtYW50aWMgPSBzZW1hbnRpYztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChzZW1hbnRpYyA9PT0gJ2lnbm9yZScgfHwgc2VtYW50aWMgPT09ICd1bmNvbmZpZ3VyYWJsZScpIHtcclxuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dLmlnbm9yZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUcnkgdG8gcGFyc2UgYXMgYSBkZWZhdWx0IHR2YWx1ZS5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnYm9vbCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS52YWx1ZSA9IHNlbWFudGljID09PSAndHJ1ZSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS52YWx1ZSA9IHBhcnNlRmxvYXQoc2VtYW50aWMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdHJlYXQgYXMgc3ltYm9sLlxyXG4gICAgICAgIGFkZFN5bWJvbCh0b2tlbik7XHJcbiAgICAgICAgb3BUeXBlID0gVFlQRV9TWU1CT0w7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRlY2xhcmF0aW9ucztcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICogQGFsaWFzIGNsYXkuU2hhZGVyXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJ0ZXhcclxuICogQHBhcmFtIHtzdHJpbmd9IGZyYWdtZW50XHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIENyZWF0ZSBhIHBob25nIHNoYWRlclxyXG4gKiB2YXIgc2hhZGVyID0gbmV3IGNsYXkuU2hhZGVyKFxyXG4gKiAgICAgIGNsYXkuU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZC52ZXJ0ZXgnKSxcclxuICogICAgICBjbGF5LlNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmQuZnJhZ21lbnQnKVxyXG4gKiApO1xyXG4gKi9cclxuZnVuY3Rpb24gU2hhZGVyKHZlcnRleCwgZnJhZ21lbnQpIHtcclxuICAgIC8vIEZpcnN0IGFyZ3VtZW50IGNhbiBiZSB7IHZlcnRleCwgZnJhZ21lbnQgfVxyXG4gICAgaWYgKHR5cGVvZiB2ZXJ0ZXggPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgZnJhZ21lbnQgPSB2ZXJ0ZXguZnJhZ21lbnQ7XHJcbiAgICAgICAgdmVydGV4ID0gdmVydGV4LnZlcnRleDtcclxuICAgIH1cclxuXHJcbiAgICB2ZXJ0ZXggPSByZW1vdmVDb21tZW50KHZlcnRleCk7XHJcbiAgICBmcmFnbWVudCA9IHJlbW92ZUNvbW1lbnQoZnJhZ21lbnQpO1xyXG5cclxuICAgIHRoaXMuX3NoYWRlcklEID0gZ2V0U2hhZGVySUQodmVydGV4LCBmcmFnbWVudCk7XHJcblxyXG4gICAgdGhpcy5fdmVydGV4Q29kZSA9IFNoYWRlci5wYXJzZUltcG9ydCh2ZXJ0ZXgpO1xyXG4gICAgdGhpcy5fZnJhZ21lbnRDb2RlID0gU2hhZGVyLnBhcnNlSW1wb3J0KGZyYWdtZW50KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlbWFudGljcyA9IHt9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy5tYXRyaXhTZW1hbnRpY3MgPSB7fTtcclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMudW5pZm9ybVNlbWFudGljcyA9IHt9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy5tYXRyaXhTZW1hbnRpY0tleXMgPSBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMudW5pZm9ybVRlbXBsYXRlcyA9IHt9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRleHR1cmVzID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZlcnRleERlZmluZXMgPSB7fTtcclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZnJhZ21lbnREZWZpbmVzID0ge307XHJcblxyXG4gICAgdGhpcy5fcGFyc2VBdHRyaWJ1dGVzKCk7XHJcbiAgICB0aGlzLl9wYXJzZVVuaWZvcm1zKCk7XHJcbiAgICB0aGlzLl9wYXJzZURlZmluZXMoKTtcclxufVxyXG5cclxuU2hhZGVyLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogU2hhZGVyLFxyXG5cclxuICAgIC8vIENyZWF0ZSBhIG5ldyB1bmlmb3JtIGluc3RhbmNlIGZvciBtYXRlcmlhbFxyXG4gICAgY3JlYXRlVW5pZm9ybXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdW5pZm9ybXMgPSB7fTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRoaXMudW5pZm9ybVRlbXBsYXRlcyl7XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtVHBsID0gdGhpcy51bmlmb3JtVGVtcGxhdGVzW3N5bWJvbF07XHJcbiAgICAgICAgICAgIHVuaWZvcm1zW3N5bWJvbF0gPSB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiB1bmlmb3JtVHBsLnR5cGUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdW5pZm9ybVRwbC52YWx1ZSgpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdW5pZm9ybXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZUltcG9ydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3ZlcnRleENvZGUgPSBTaGFkZXIucGFyc2VJbXBvcnQodGhpcy52ZXJ0ZXgpO1xyXG4gICAgICAgIHRoaXMuX2ZyYWdtZW50Q29kZSA9IFNoYWRlci5wYXJzZUltcG9ydCh0aGlzLmZyYWdtZW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgX2FkZFNlbWFudGljVW5pZm9ybTogZnVuY3Rpb24gKHN5bWJvbCwgdW5pZm9ybVR5cGUsIHNlbWFudGljKSB7XHJcbiAgICAgICAgLy8gVGhpcyBjYXNlIGlzIG9ubHkgZm9yIFNLSU5fTUFUUklYXHJcbiAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIGlmIChhdHRyaWJ1dGVTZW1hbnRpY3MuaW5kZXhPZihzZW1hbnRpYykgPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZVNlbWFudGljc1tzZW1hbnRpY10gPSB7XHJcbiAgICAgICAgICAgICAgICBzeW1ib2w6IHN5bWJvbCxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHVuaWZvcm1UeXBlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG1hdHJpeFNlbWFudGljcy5pbmRleE9mKHNlbWFudGljKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHZhciBpc1RyYW5zcG9zZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB2YXIgc2VtYW50aWNOb1RyYW5zcG9zZSA9IHNlbWFudGljO1xyXG4gICAgICAgICAgICBpZiAoc2VtYW50aWMubWF0Y2goL1RSQU5TUE9TRSQvKSkge1xyXG4gICAgICAgICAgICAgICAgaXNUcmFuc3Bvc2UgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgc2VtYW50aWNOb1RyYW5zcG9zZSA9IHNlbWFudGljLnNsaWNlKDAsIC05KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm1hdHJpeFNlbWFudGljc1tzZW1hbnRpY10gPSB7XHJcbiAgICAgICAgICAgICAgICBzeW1ib2w6IHN5bWJvbCxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHVuaWZvcm1UeXBlLFxyXG4gICAgICAgICAgICAgICAgaXNUcmFuc3Bvc2U6IGlzVHJhbnNwb3NlLFxyXG4gICAgICAgICAgICAgICAgc2VtYW50aWNOb1RyYW5zcG9zZTogc2VtYW50aWNOb1RyYW5zcG9zZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh1bmlmb3JtU2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy51bmlmb3JtU2VtYW50aWNzW3NlbWFudGljXSA9IHtcclxuICAgICAgICAgICAgICAgIHN5bWJvbDogc3ltYm9sLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdW5pZm9ybVR5cGVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9hZGRNYXRlcmlhbFVuaWZvcm06IGZ1bmN0aW9uIChzeW1ib2wsIHR5cGUsIHVuaWZvcm1UeXBlLCBkZWZhdWx0VmFsdWVGdW5jLCBpc0FycmF5LCBtYXRlcmlhbFVuaWZvcm1zKSB7XHJcbiAgICAgICAgbWF0ZXJpYWxVbmlmb3Jtc1tzeW1ib2xdID0ge1xyXG4gICAgICAgICAgICB0eXBlOiB1bmlmb3JtVHlwZSxcclxuICAgICAgICAgICAgdmFsdWU6IGlzQXJyYXkgPyB1bmlmb3JtVmFsdWVDb25zdHJ1Y3RvclsnYXJyYXknXSA6IChkZWZhdWx0VmFsdWVGdW5jIHx8IHVuaWZvcm1WYWx1ZUNvbnN0cnVjdG9yW3R5cGVdKSxcclxuICAgICAgICAgICAgc2VtYW50aWM6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGFyc2VVbmlmb3JtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB1bmlmb3JtcyA9IHt9O1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB2YXIgc2hhZGVyVHlwZSA9ICd2ZXJ0ZXgnO1xyXG4gICAgICAgIHRoaXMuX3VuaWZvcm1MaXN0ID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuX3ZlcnRleENvZGUgPSB0aGlzLl92ZXJ0ZXhDb2RlLnJlcGxhY2UodW5pZm9ybVJlZ2V4LCBfdW5pZm9ybVBhcnNlcik7XHJcbiAgICAgICAgc2hhZGVyVHlwZSA9ICdmcmFnbWVudCc7XHJcbiAgICAgICAgdGhpcy5fZnJhZ21lbnRDb2RlID0gdGhpcy5fZnJhZ21lbnRDb2RlLnJlcGxhY2UodW5pZm9ybVJlZ2V4LCBfdW5pZm9ybVBhcnNlcik7XHJcblxyXG4gICAgICAgIHNlbGYubWF0cml4U2VtYW50aWNLZXlzID0gT2JqZWN0LmtleXModGhpcy5tYXRyaXhTZW1hbnRpY3MpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBtYWtlRGVmYXVsdFZhbHVlRnVuYyh2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9IDogbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIF91bmlmb3JtUGFyc2VyKHN0ciwgdHlwZSwgY29udGVudCkge1xyXG4gICAgICAgICAgICB2YXIgZGVjbGFyZWRVbmlmb3JtcyA9IHBhcnNlRGVjbGFyYXRpb25zKHR5cGUsIGNvbnRlbnQpO1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybU1haW5TdHIgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIGRlY2xhcmVkVW5pZm9ybXMpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdW5pZm9ybUluZm8gPSBkZWNsYXJlZFVuaWZvcm1zW3N5bWJvbF07XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWMgPSB1bmlmb3JtSW5mby5zZW1hbnRpYztcclxuICAgICAgICAgICAgICAgIHZhciB0bXBTdHIgPSBzeW1ib2w7XHJcbiAgICAgICAgICAgICAgICB2YXIgdW5pZm9ybVR5cGUgPSB1bmlmb3JtVHlwZU1hcFt0eXBlXTtcclxuICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0VmFsdWVGdW5jID0gbWFrZURlZmF1bHRWYWx1ZUZ1bmMoZGVjbGFyZWRVbmlmb3Jtc1tzeW1ib2xdLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChkZWNsYXJlZFVuaWZvcm1zW3N5bWJvbF0uaXNBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcFN0ciArPSAnWycgKyBkZWNsYXJlZFVuaWZvcm1zW3N5bWJvbF0uYXJyYXlTaXplICsgJ10nO1xyXG4gICAgICAgICAgICAgICAgICAgIHVuaWZvcm1UeXBlICs9ICd2JztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB1bmlmb3JtTWFpblN0ci5wdXNoKHRtcFN0cik7XHJcblxyXG4gICAgICAgICAgICAgICAgc2VsZi5fdW5pZm9ybUxpc3QucHVzaChzeW1ib2wpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghdW5pZm9ybUluZm8uaWdub3JlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdzYW1wbGVyMkQnIHx8IHR5cGUgPT09ICdzYW1wbGVyQ3ViZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGV4dHVyZSBpcyBkZWZhdWx0IGRpc2FibGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dHVyZXNbc3ltYm9sXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRlclR5cGU6IHNoYWRlclR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBTaG91bGQgbm90IGRlY2xhcmUgbXVsdGlwbGUgc3ltYm9scyBpZiBoYXZlIHNlbWFudGljLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRTZW1hbnRpY1VuaWZvcm0oc3ltYm9sLCB1bmlmb3JtVHlwZSwgc2VtYW50aWMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkTWF0ZXJpYWxVbmlmb3JtKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sLCB0eXBlLCB1bmlmb3JtVHlwZSwgZGVmYXVsdFZhbHVlRnVuYyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xhcmVkVW5pZm9ybXNbc3ltYm9sXS5pc0FycmF5LCB1bmlmb3Jtc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdW5pZm9ybU1haW5TdHIubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgPyAndW5pZm9ybSAnICsgdHlwZSArICcgJyArIHVuaWZvcm1NYWluU3RyLmpvaW4oJywnKSArICc7XFxuJyA6ICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51bmlmb3JtVGVtcGxhdGVzID0gdW5pZm9ybXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZUF0dHJpYnV0ZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHt9O1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLl92ZXJ0ZXhDb2RlID0gdGhpcy5fdmVydGV4Q29kZS5yZXBsYWNlKGF0dHJpYnV0ZVJlZ2V4LCBfYXR0cmlidXRlUGFyc2VyKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gX2F0dHJpYnV0ZVBhcnNlcihzdHIsIHR5cGUsIGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgdmFyIGRlY2xhcmVkQXR0cmlidXRlcyA9IHBhcnNlRGVjbGFyYXRpb25zKHR5cGUsIGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNpemUgPSBhdHRyaWJ1dGVTaXplTWFwW3R5cGVdIHx8IDE7XHJcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVNYWluU3RyID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiBkZWNsYXJlZEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpYyA9IGRlY2xhcmVkQXR0cmlidXRlc1tzeW1ib2xdLnNlbWFudGljO1xyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tzeW1ib2xdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gQ2FuIG9ubHkgYmUgZmxvYXRcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZmxvYXQnLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgc2VtYW50aWM6IHNlbWFudGljIHx8IG51bGxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPIFNob3VsZCBub3QgZGVjbGFyZSBtdWx0aXBsZSBzeW1ib2xzIGlmIGhhdmUgc2VtYW50aWMuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlU2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua293biBzZW1hbnRpYyBcIicgKyBzZW1hbnRpYyArICdcIicpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hdHRyaWJ1dGVTZW1hbnRpY3Nbc2VtYW50aWNdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sOiBzeW1ib2wsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlTWFpblN0ci5wdXNoKHN5bWJvbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiAnYXR0cmlidXRlICcgKyB0eXBlICsgJyAnICsgYXR0cmlidXRlTWFpblN0ci5qb2luKCcsJykgKyAnO1xcbic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGFyc2VEZWZpbmVzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHZhciBzaGFkZXJUeXBlID0gJ3ZlcnRleCc7XHJcbiAgICAgICAgdGhpcy5fdmVydGV4Q29kZSA9IHRoaXMuX3ZlcnRleENvZGUucmVwbGFjZShkZWZpbmVSZWdleCwgX2RlZmluZVBhcnNlcik7XHJcbiAgICAgICAgc2hhZGVyVHlwZSA9ICdmcmFnbWVudCc7XHJcbiAgICAgICAgdGhpcy5fZnJhZ21lbnRDb2RlID0gdGhpcy5fZnJhZ21lbnRDb2RlLnJlcGxhY2UoZGVmaW5lUmVnZXgsIF9kZWZpbmVQYXJzZXIpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBfZGVmaW5lUGFyc2VyKHN0ciwgc3ltYm9sLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgZGVmaW5lcyA9IHNoYWRlclR5cGUgPT09ICd2ZXJ0ZXgnID8gc2VsZi52ZXJ0ZXhEZWZpbmVzIDogc2VsZi5mcmFnbWVudERlZmluZXM7XHJcbiAgICAgICAgICAgIGlmICghZGVmaW5lc1tzeW1ib2xdKSB7IC8vIEhhdmVuJ3QgYmVlbiBkZWZpbmVkIGJ5IHVzZXJcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmluZXNbc3ltYm9sXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmluZXNbc3ltYm9sXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWZpbmVzW3N5bWJvbF0gPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBjYW4gcGFyc2UgdG8gZmxvYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAoaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpID8gdmFsdWUudHJpbSgpIDogcGFyc2VGbG9hdCh2YWx1ZSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IHNoYWRlclxyXG4gICAgICogQHJldHVybiB7Y2xheS5TaGFkZXJ9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNvZGUgPSBzaGFkZXJDb2RlQ2FjaGVbdGhpcy5fc2hhZGVySURdO1xyXG4gICAgICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKGNvZGUudmVydGV4LCBjb2RlLmZyYWdtZW50KTtcclxuICAgICAgICByZXR1cm4gc2hhZGVyO1xyXG4gICAgfVxyXG59O1xyXG5cclxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlci5wcm90b3R5cGUsICdzaGFkZXJJRCcsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYWRlcklEO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlci5wcm90b3R5cGUsICd2ZXJ0ZXgnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92ZXJ0ZXhDb2RlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlci5wcm90b3R5cGUsICdmcmFnbWVudCcsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYWdtZW50Q29kZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkZXIucHJvdG90eXBlLCAndW5pZm9ybXMnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91bmlmb3JtTGlzdDtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxudmFyIGltcG9ydFJlZ2V4ID0gLyhAaW1wb3J0KVxccyooWzAtOWEtekEtWl9cXC1cXC5dKikvZztcclxuU2hhZGVyLnBhcnNlSW1wb3J0ID0gZnVuY3Rpb24gKHNoYWRlclN0cikge1xyXG4gICAgc2hhZGVyU3RyID0gc2hhZGVyU3RyLnJlcGxhY2UoaW1wb3J0UmVnZXgsIGZ1bmN0aW9uIChzdHIsIGltcG9ydFN5bWJvbCwgaW1wb3J0TmFtZSkge1xyXG4gICAgICAgIHZhciBzdHIgPSBTaGFkZXIuc291cmNlKGltcG9ydE5hbWUpO1xyXG4gICAgICAgIGlmIChzdHIpIHtcclxuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcGFyc2VcclxuICAgICAgICAgICAgcmV0dXJuIFNoYWRlci5wYXJzZUltcG9ydChzdHIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU2hhZGVyIGNodW5rIFwiJyArIGltcG9ydE5hbWUgKyAnXCIgbm90IGV4aXN0ZWQgaW4gbGlicmFyeScpO1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc2hhZGVyU3RyO1xyXG59O1xyXG5cclxudmFyIGV4cG9ydFJlZ2V4ID0gLyhAZXhwb3J0KVxccyooWzAtOWEtekEtWl9cXC1cXC5dKilcXHMqXFxuKFtcXHNcXFNdKj8pQGVuZC9nO1xyXG5cclxuLyoqXHJcbiAqIEltcG9ydCBzaGFkZXIgc291cmNlXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gc2hhZGVyU3RyXHJcbiAqIEBtZW1iZXJPZiBjbGF5LlNoYWRlclxyXG4gKi9cclxuU2hhZGVyWydpbXBvcnQnXSA9IGZ1bmN0aW9uIChzaGFkZXJTdHIpIHtcclxuICAgIHNoYWRlclN0ci5yZXBsYWNlKGV4cG9ydFJlZ2V4LCBmdW5jdGlvbiAoc3RyLCBleHBvcnRTeW1ib2wsIGV4cG9ydE5hbWUsIGNvZGUpIHtcclxuICAgICAgICB2YXIgY29kZSA9IGNvZGUucmVwbGFjZSgvKF5bXFxzXFx0XFx4YTBcXHUzMDAwXSspfChbXFx1MzAwMFxceGEwXFxzXFx0XStcXHgyNCkvZywgJycpO1xyXG4gICAgICAgIGlmIChjb2RlKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IGV4cG9ydE5hbWUuc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgdmFyIG9iaiA9IFNoYWRlci5jb2RlcztcclxuICAgICAgICAgICAgdmFyIGkgPSAwO1xyXG4gICAgICAgICAgICB2YXIga2V5O1xyXG4gICAgICAgICAgICB3aGlsZSAoaSA8IHBhcnRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIGtleSA9IHBhcnRzW2krK107XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9ialtrZXldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSB7fTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9iaiA9IG9ialtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGtleSA9IHBhcnRzW2ldO1xyXG4gICAgICAgICAgICBvYmpba2V5XSA9IGNvZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb2RlO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogTGlicmFyeSB0byBzdG9yZSBhbGwgdGhlIGxvYWRlZCBzaGFkZXIgY29kZXNcclxuICogQHR5cGUge09iamVjdH1cclxuICogQHJlYWRPbmx5XHJcbiAqIEBtZW1iZXJPZiBjbGF5LlNoYWRlclxyXG4gKi9cclxuU2hhZGVyLmNvZGVzID0ge307XHJcblxyXG4vKipcclxuICogR2V0IHNoYWRlciBzb3VyY2VcclxuICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAqIEByZXR1cm4ge3N0cmluZ31cclxuICovXHJcblNoYWRlci5zb3VyY2UgPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgnLicpO1xyXG4gICAgdmFyIG9iaiA9IFNoYWRlci5jb2RlcztcclxuICAgIHZhciBpID0gMDtcclxuICAgIHdoaWxlIChvYmogJiYgaSA8IHBhcnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHZhciBrZXkgPSBwYXJ0c1tpKytdO1xyXG4gICAgICAgIG9iaiA9IG9ialtrZXldO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgLy8gRklYTUUgVXNlIGRlZmF1bHQgaW5zdGVhZFxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NoYWRlciBcIicgKyBuYW1lICsgJ1wiIG5vdCBleGlzdGVkIGluIGxpYnJhcnknKTtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2hhZGVyO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5wcmV6LnZlcnRleFxcbnVuaWZvcm0gbWF0NCBXVlAgOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvcyA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMyIHV2IDogVEVYQ09PUkRfMDtcXG51bmlmb3JtIHZlYzIgdXZSZXBlYXQgOiBbMS4wLCAxLjBdO1xcbnVuaWZvcm0gdmVjMiB1dk9mZnNldCA6IFswLjAsIDAuMF07XFxuQGltcG9ydCBjbGF5LmNodW5rLnNraW5uaW5nX2hlYWRlclxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIFAgPSBwb3M7XFxuI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBQID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zLCAxLjApKS54eXo7XFxuI2VuZGlmXFxuIGdsX1Bvc2l0aW9uID0gV1ZQICogdmVjNChQLCAxLjApO1xcbiB2X1RleGNvb3JkID0gdXYgKiB1dlJlcGVhdCArIHV2T2Zmc2V0O1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnByZXouZnJhZ21lbnRcXG51bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDtcXG51bmlmb3JtIGZsb2F0IGFscGhhQ3V0b2ZmOiAwLjA7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudm9pZCBtYWluKClcXG57XFxuIGlmIChhbHBoYUN1dG9mZiA+IDAuMCkge1xcbiBpZiAodGV4dHVyZTJEKGFscGhhTWFwLCB2X1RleGNvb3JkKS5hIDw9IGFscGhhQ3V0b2ZmKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4gfVxcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwwLjAsMC4wLDEuMCk7XFxufVxcbkBlbmRcIjtcclxuIiwiXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB7R0xNQVRfRVBTSUxPTiwgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgNHg0IE1hdHJpeFxyXG4gKiBAbmFtZSBtYXQ0XHJcbiAqL1xyXG5cclxudmFyIG1hdDQgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDRcclxuICpcclxuICogQHJldHVybnMge21hdDR9IGEgbmV3IDR4NCBtYXRyaXhcclxuICovXHJcbm1hdDQuY3JlYXRlID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMTYpO1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSAxO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAwO1xyXG4gICAgb3V0WzldID0gMDtcclxuICAgIG91dFsxMF0gPSAxO1xyXG4gICAgb3V0WzExXSA9IDA7XHJcbiAgICBvdXRbMTJdID0gMDtcclxuICAgIG91dFsxM10gPSAwO1xyXG4gICAgb3V0WzE0XSA9IDA7XHJcbiAgICBvdXRbMTVdID0gMTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQ0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDR9IGEgbmV3IDR4NCBtYXRyaXhcclxuICovXHJcbm1hdDQuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMTYpO1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICBvdXRbNV0gPSBhWzVdO1xyXG4gICAgb3V0WzZdID0gYVs2XTtcclxuICAgIG91dFs3XSA9IGFbN107XHJcbiAgICBvdXRbOF0gPSBhWzhdO1xyXG4gICAgb3V0WzldID0gYVs5XTtcclxuICAgIG91dFsxMF0gPSBhWzEwXTtcclxuICAgIG91dFsxMV0gPSBhWzExXTtcclxuICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgIG91dFsxM10gPSBhWzEzXTtcclxuICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgIG91dFsxNV0gPSBhWzE1XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIG1hdDQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICBvdXRbOV0gPSBhWzldO1xyXG4gICAgb3V0WzEwXSA9IGFbMTBdO1xyXG4gICAgb3V0WzExXSA9IGFbMTFdO1xyXG4gICAgb3V0WzEyXSA9IGFbMTJdO1xyXG4gICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgb3V0WzE1XSA9IGFbMTVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgYSBtYXQ0IHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSAxO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAwO1xyXG4gICAgb3V0WzldID0gMDtcclxuICAgIG91dFsxMF0gPSAxO1xyXG4gICAgb3V0WzExXSA9IDA7XHJcbiAgICBvdXRbMTJdID0gMDtcclxuICAgIG91dFsxM10gPSAwO1xyXG4gICAgb3V0WzE0XSA9IDA7XHJcbiAgICBvdXRbMTVdID0gMTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNwb3NlIHRoZSB2YWx1ZXMgb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LnRyYW5zcG9zZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgLy8gSWYgd2UgYXJlIHRyYW5zcG9zaW5nIG91cnNlbHZlcyB3ZSBjYW4gc2tpcCBhIGZldyBzdGVwcyBidXQgaGF2ZSB0byBjYWNoZSBzb21lIHZhbHVlc1xyXG4gICAgaWYgKG91dCA9PT0gYSkge1xyXG4gICAgICAgIHZhciBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxyXG4gICAgICAgICAgICBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxyXG4gICAgICAgICAgICBhMjMgPSBhWzExXTtcclxuXHJcbiAgICAgICAgb3V0WzFdID0gYVs0XTtcclxuICAgICAgICBvdXRbMl0gPSBhWzhdO1xyXG4gICAgICAgIG91dFszXSA9IGFbMTJdO1xyXG4gICAgICAgIG91dFs0XSA9IGEwMTtcclxuICAgICAgICBvdXRbNl0gPSBhWzldO1xyXG4gICAgICAgIG91dFs3XSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFs4XSA9IGEwMjtcclxuICAgICAgICBvdXRbOV0gPSBhMTI7XHJcbiAgICAgICAgb3V0WzExXSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxMl0gPSBhMDM7XHJcbiAgICAgICAgb3V0WzEzXSA9IGExMztcclxuICAgICAgICBvdXRbMTRdID0gYTIzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgICAgIG91dFsxXSA9IGFbNF07XHJcbiAgICAgICAgb3V0WzJdID0gYVs4XTtcclxuICAgICAgICBvdXRbM10gPSBhWzEyXTtcclxuICAgICAgICBvdXRbNF0gPSBhWzFdO1xyXG4gICAgICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICAgICAgb3V0WzZdID0gYVs5XTtcclxuICAgICAgICBvdXRbN10gPSBhWzEzXTtcclxuICAgICAgICBvdXRbOF0gPSBhWzJdO1xyXG4gICAgICAgIG91dFs5XSA9IGFbNl07XHJcbiAgICAgICAgb3V0WzEwXSA9IGFbMTBdO1xyXG4gICAgICAgIG91dFsxMV0gPSBhWzE0XTtcclxuICAgICAgICBvdXRbMTJdID0gYVszXTtcclxuICAgICAgICBvdXRbMTNdID0gYVs3XTtcclxuICAgICAgICBvdXRbMTRdID0gYVsxMV07XHJcbiAgICAgICAgb3V0WzE1XSA9IGFbMTVdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSwgYTAzID0gYVszXSxcclxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXSxcclxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdLCBhMzMgPSBhWzE1XSxcclxuXHJcbiAgICAgICAgYjAwID0gYTAwICogYTExIC0gYTAxICogYTEwLFxyXG4gICAgICAgIGIwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMCxcclxuICAgICAgICBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTAsXHJcbiAgICAgICAgYjAzID0gYTAxICogYTEyIC0gYTAyICogYTExLFxyXG4gICAgICAgIGIwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMSxcclxuICAgICAgICBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTIsXHJcbiAgICAgICAgYjA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwLFxyXG4gICAgICAgIGIwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMCxcclxuICAgICAgICBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzAsXHJcbiAgICAgICAgYjA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxLFxyXG4gICAgICAgIGIxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMSxcclxuICAgICAgICBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzIsXHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcclxuICAgICAgICBkZXQgPSBiMDAgKiBiMTEgLSBiMDEgKiBiMTAgKyBiMDIgKiBiMDkgKyBiMDMgKiBiMDggLSBiMDQgKiBiMDcgKyBiMDUgKiBiMDY7XHJcblxyXG4gICAgaWYgKCFkZXQpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGRldCA9IDEuMCAvIGRldDtcclxuXHJcbiAgICBvdXRbMF0gPSAoYTExICogYjExIC0gYTEyICogYjEwICsgYTEzICogYjA5KSAqIGRldDtcclxuICAgIG91dFsxXSA9IChhMDIgKiBiMTAgLSBhMDEgKiBiMTEgLSBhMDMgKiBiMDkpICogZGV0O1xyXG4gICAgb3V0WzJdID0gKGEzMSAqIGIwNSAtIGEzMiAqIGIwNCArIGEzMyAqIGIwMykgKiBkZXQ7XHJcbiAgICBvdXRbM10gPSAoYTIyICogYjA0IC0gYTIxICogYjA1IC0gYTIzICogYjAzKSAqIGRldDtcclxuICAgIG91dFs0XSA9IChhMTIgKiBiMDggLSBhMTAgKiBiMTEgLSBhMTMgKiBiMDcpICogZGV0O1xyXG4gICAgb3V0WzVdID0gKGEwMCAqIGIxMSAtIGEwMiAqIGIwOCArIGEwMyAqIGIwNykgKiBkZXQ7XHJcbiAgICBvdXRbNl0gPSAoYTMyICogYjAyIC0gYTMwICogYjA1IC0gYTMzICogYjAxKSAqIGRldDtcclxuICAgIG91dFs3XSA9IChhMjAgKiBiMDUgLSBhMjIgKiBiMDIgKyBhMjMgKiBiMDEpICogZGV0O1xyXG4gICAgb3V0WzhdID0gKGExMCAqIGIxMCAtIGExMSAqIGIwOCArIGExMyAqIGIwNikgKiBkZXQ7XHJcbiAgICBvdXRbOV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcclxuICAgIG91dFsxMF0gPSAoYTMwICogYjA0IC0gYTMxICogYjAyICsgYTMzICogYjAwKSAqIGRldDtcclxuICAgIG91dFsxMV0gPSAoYTIxICogYjAyIC0gYTIwICogYjA0IC0gYTIzICogYjAwKSAqIGRldDtcclxuICAgIG91dFsxMl0gPSAoYTExICogYjA3IC0gYTEwICogYjA5IC0gYTEyICogYjA2KSAqIGRldDtcclxuICAgIG91dFsxM10gPSAoYTAwICogYjA5IC0gYTAxICogYjA3ICsgYTAyICogYjA2KSAqIGRldDtcclxuICAgIG91dFsxNF0gPSAoYTMxICogYjAxIC0gYTMwICogYjAzIC0gYTMyICogYjAwKSAqIGRldDtcclxuICAgIG91dFsxNV0gPSAoYTIwICogYjAzIC0gYTIxICogYjAxICsgYTIyICogYjAwKSAqIGRldDtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGFkanVnYXRlIG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5hZGpvaW50ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSwgYTAzID0gYVszXSxcclxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXSxcclxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdLCBhMzMgPSBhWzE1XTtcclxuXHJcbiAgICBvdXRbMF0gID0gIChhMTEgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMSAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpICsgYTMxICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikpO1xyXG4gICAgb3V0WzFdICA9IC0oYTAxICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjEgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMSAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpKTtcclxuICAgIG91dFsyXSAgPSAgKGEwMSAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpIC0gYTExICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzEgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XHJcbiAgICBvdXRbM10gID0gLShhMDEgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSAtIGExMSAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpICsgYTIxICogKGEwMiAqIGExMyAtIGEwMyAqIGExMikpO1xyXG4gICAgb3V0WzRdICA9IC0oYTEwICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjAgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSArIGEzMCAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpKTtcclxuICAgIG91dFs1XSAgPSAgKGEwMCAqIChhMjIgKiBhMzMgLSBhMjMgKiBhMzIpIC0gYTIwICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzAgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSk7XHJcbiAgICBvdXRbNl0gID0gLShhMDAgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSAtIGExMCAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMwICogKGEwMiAqIGExMyAtIGEwMyAqIGExMikpO1xyXG4gICAgb3V0WzddICA9ICAoYTAwICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikgLSBhMTAgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSArIGEyMCAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpKTtcclxuICAgIG91dFs4XSAgPSAgKGExMCAqIChhMjEgKiBhMzMgLSBhMjMgKiBhMzEpIC0gYTIwICogKGExMSAqIGEzMyAtIGExMyAqIGEzMSkgKyBhMzAgKiAoYTExICogYTIzIC0gYTEzICogYTIxKSk7XHJcbiAgICBvdXRbOV0gID0gLShhMDAgKiAoYTIxICogYTMzIC0gYTIzICogYTMxKSAtIGEyMCAqIChhMDEgKiBhMzMgLSBhMDMgKiBhMzEpICsgYTMwICogKGEwMSAqIGEyMyAtIGEwMyAqIGEyMSkpO1xyXG4gICAgb3V0WzEwXSA9ICAoYTAwICogKGExMSAqIGEzMyAtIGExMyAqIGEzMSkgLSBhMTAgKiAoYTAxICogYTMzIC0gYTAzICogYTMxKSArIGEzMCAqIChhMDEgKiBhMTMgLSBhMDMgKiBhMTEpKTtcclxuICAgIG91dFsxMV0gPSAtKGEwMCAqIChhMTEgKiBhMjMgLSBhMTMgKiBhMjEpIC0gYTEwICogKGEwMSAqIGEyMyAtIGEwMyAqIGEyMSkgKyBhMjAgKiAoYTAxICogYTEzIC0gYTAzICogYTExKSk7XHJcbiAgICBvdXRbMTJdID0gLShhMTAgKiAoYTIxICogYTMyIC0gYTIyICogYTMxKSAtIGEyMCAqIChhMTEgKiBhMzIgLSBhMTIgKiBhMzEpICsgYTMwICogKGExMSAqIGEyMiAtIGExMiAqIGEyMSkpO1xyXG4gICAgb3V0WzEzXSA9ICAoYTAwICogKGEyMSAqIGEzMiAtIGEyMiAqIGEzMSkgLSBhMjAgKiAoYTAxICogYTMyIC0gYTAyICogYTMxKSArIGEzMCAqIChhMDEgKiBhMjIgLSBhMDIgKiBhMjEpKTtcclxuICAgIG91dFsxNF0gPSAtKGEwMCAqIChhMTEgKiBhMzIgLSBhMTIgKiBhMzEpIC0gYTEwICogKGEwMSAqIGEzMiAtIGEwMiAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTEyIC0gYTAyICogYTExKSk7XHJcbiAgICBvdXRbMTVdID0gIChhMDAgKiAoYTExICogYTIyIC0gYTEyICogYTIxKSAtIGExMCAqIChhMDEgKiBhMjIgLSBhMDIgKiBhMjEpICsgYTIwICogKGEwMSAqIGExMiAtIGEwMiAqIGExMSkpO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRldGVybWluYW50IG9mIGFcclxuICovXHJcbm1hdDQuZGV0ZXJtaW5hbnQgPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM10sXHJcbiAgICAgICAgYTEwID0gYVs0XSwgYTExID0gYVs1XSwgYTEyID0gYVs2XSwgYTEzID0gYVs3XSxcclxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSwgYTIzID0gYVsxMV0sXHJcbiAgICAgICAgYTMwID0gYVsxMl0sIGEzMSA9IGFbMTNdLCBhMzIgPSBhWzE0XSwgYTMzID0gYVsxNV0sXHJcblxyXG4gICAgICAgIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMCxcclxuICAgICAgICBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTAsXHJcbiAgICAgICAgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwLFxyXG4gICAgICAgIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMSxcclxuICAgICAgICBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTEsXHJcbiAgICAgICAgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyLFxyXG4gICAgICAgIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMCxcclxuICAgICAgICBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzAsXHJcbiAgICAgICAgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwLFxyXG4gICAgICAgIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMSxcclxuICAgICAgICBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzEsXHJcbiAgICAgICAgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyO1xyXG5cclxuICAgIC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcclxuICAgIHJldHVybiBiMDAgKiBiMTEgLSBiMDEgKiBiMTAgKyBiMDIgKiBiMDkgKyBiMDMgKiBiMDggLSBiMDQgKiBiMDcgKyBiMDUgKiBiMDY7XHJcbn07XHJcblxyXG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0NCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQubXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSwgYTAzID0gYVszXSxcclxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXSxcclxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdLCBhMzMgPSBhWzE1XTtcclxuXHJcbiAgICAvLyBDYWNoZSBvbmx5IHRoZSBjdXJyZW50IGxpbmUgb2YgdGhlIHNlY29uZCBtYXRyaXhcclxuICAgIHZhciBiMCAgPSBiWzBdLCBiMSA9IGJbMV0sIGIyID0gYlsyXSwgYjMgPSBiWzNdO1xyXG4gICAgb3V0WzBdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xyXG4gICAgb3V0WzFdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxICsgYjMqYTMxO1xyXG4gICAgb3V0WzJdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYjMqYTMyO1xyXG4gICAgb3V0WzNdID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xyXG5cclxuICAgIGIwID0gYls0XTsgYjEgPSBiWzVdOyBiMiA9IGJbNl07IGIzID0gYls3XTtcclxuICAgIG91dFs0XSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMCArIGIzKmEzMDtcclxuICAgIG91dFs1XSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcclxuICAgIG91dFs2XSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMiArIGIzKmEzMjtcclxuICAgIG91dFs3XSA9IGIwKmEwMyArIGIxKmExMyArIGIyKmEyMyArIGIzKmEzMztcclxuXHJcbiAgICBiMCA9IGJbOF07IGIxID0gYls5XTsgYjIgPSBiWzEwXTsgYjMgPSBiWzExXTtcclxuICAgIG91dFs4XSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMCArIGIzKmEzMDtcclxuICAgIG91dFs5XSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcclxuICAgIG91dFsxMF0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjIgKyBiMyphMzI7XHJcbiAgICBvdXRbMTFdID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xyXG5cclxuICAgIGIwID0gYlsxMl07IGIxID0gYlsxM107IGIyID0gYlsxNF07IGIzID0gYlsxNV07XHJcbiAgICBvdXRbMTJdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xyXG4gICAgb3V0WzEzXSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcclxuICAgIG91dFsxNF0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjIgKyBiMyphMzI7XHJcbiAgICBvdXRbMTVdID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBhZmZpbmUgbWF0NCdzXHJcbiAqIEFkZCBieSBodHRwczovL2dpdGh1Yi5jb20vcGlzc2FuZ1xyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQ0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0Lm11bHRpcGx5QWZmaW5lID0gZnVuY3Rpb24gKG91dCwgYSwgYikge1xyXG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sXHJcbiAgICAgICAgYTEwID0gYVs0XSwgYTExID0gYVs1XSwgYTEyID0gYVs2XSxcclxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSxcclxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdO1xyXG5cclxuICAgIC8vIENhY2hlIG9ubHkgdGhlIGN1cnJlbnQgbGluZSBvZiB0aGUgc2Vjb25kIG1hdHJpeFxyXG4gICAgdmFyIGIwICA9IGJbMF0sIGIxID0gYlsxXSwgYjIgPSBiWzJdO1xyXG4gICAgb3V0WzBdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwO1xyXG4gICAgb3V0WzFdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxO1xyXG4gICAgb3V0WzJdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyO1xyXG4gICAgLy8gb3V0WzNdID0gMDtcclxuXHJcbiAgICBiMCA9IGJbNF07IGIxID0gYls1XTsgYjIgPSBiWzZdO1xyXG4gICAgb3V0WzRdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwO1xyXG4gICAgb3V0WzVdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxO1xyXG4gICAgb3V0WzZdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyO1xyXG4gICAgLy8gb3V0WzddID0gMDtcclxuXHJcbiAgICBiMCA9IGJbOF07IGIxID0gYls5XTsgYjIgPSBiWzEwXTtcclxuICAgIG91dFs4XSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMDtcclxuICAgIG91dFs5XSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMTtcclxuICAgIG91dFsxMF0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjI7XHJcbiAgICAvLyBvdXRbMTFdID0gMDtcclxuXHJcbiAgICBiMCA9IGJbMTJdOyBiMSA9IGJbMTNdOyBiMiA9IGJbMTRdO1xyXG4gICAgb3V0WzEyXSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMCArIGEzMDtcclxuICAgIG91dFsxM10gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjEgKyBhMzE7XHJcbiAgICBvdXRbMTRdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYTMyO1xyXG4gICAgLy8gb3V0WzE1XSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0NC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5tYXQ0Lm11bCA9IG1hdDQubXVsdGlwbHk7XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQ0Lm11bHRpcGx5QWZmaW5lfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbm1hdDQubXVsQWZmaW5lID0gbWF0NC5tdWx0aXBseUFmZmluZTtcclxuLyoqXHJcbiAqIFRyYW5zbGF0ZSBhIG1hdDQgYnkgdGhlIGdpdmVuIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMzfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC50cmFuc2xhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCB2KSB7XHJcbiAgICB2YXIgeCA9IHZbMF0sIHkgPSB2WzFdLCB6ID0gdlsyXSxcclxuICAgICAgICBhMDAsIGEwMSwgYTAyLCBhMDMsXHJcbiAgICAgICAgYTEwLCBhMTEsIGExMiwgYTEzLFxyXG4gICAgICAgIGEyMCwgYTIxLCBhMjIsIGEyMztcclxuXHJcbiAgICBpZiAoYSA9PT0gb3V0KSB7XHJcbiAgICAgICAgb3V0WzEyXSA9IGFbMF0gKiB4ICsgYVs0XSAqIHkgKyBhWzhdICogeiArIGFbMTJdO1xyXG4gICAgICAgIG91dFsxM10gPSBhWzFdICogeCArIGFbNV0gKiB5ICsgYVs5XSAqIHogKyBhWzEzXTtcclxuICAgICAgICBvdXRbMTRdID0gYVsyXSAqIHggKyBhWzZdICogeSArIGFbMTBdICogeiArIGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhWzNdICogeCArIGFbN10gKiB5ICsgYVsxMV0gKiB6ICsgYVsxNV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGEwMCA9IGFbMF07IGEwMSA9IGFbMV07IGEwMiA9IGFbMl07IGEwMyA9IGFbM107XHJcbiAgICAgICAgYTEwID0gYVs0XTsgYTExID0gYVs1XTsgYTEyID0gYVs2XTsgYTEzID0gYVs3XTtcclxuICAgICAgICBhMjAgPSBhWzhdOyBhMjEgPSBhWzldOyBhMjIgPSBhWzEwXTsgYTIzID0gYVsxMV07XHJcblxyXG4gICAgICAgIG91dFswXSA9IGEwMDsgb3V0WzFdID0gYTAxOyBvdXRbMl0gPSBhMDI7IG91dFszXSA9IGEwMztcclxuICAgICAgICBvdXRbNF0gPSBhMTA7IG91dFs1XSA9IGExMTsgb3V0WzZdID0gYTEyOyBvdXRbN10gPSBhMTM7XHJcbiAgICAgICAgb3V0WzhdID0gYTIwOyBvdXRbOV0gPSBhMjE7IG91dFsxMF0gPSBhMjI7IG91dFsxMV0gPSBhMjM7XHJcblxyXG4gICAgICAgIG91dFsxMl0gPSBhMDAgKiB4ICsgYTEwICogeSArIGEyMCAqIHogKyBhWzEyXTtcclxuICAgICAgICBvdXRbMTNdID0gYTAxICogeCArIGExMSAqIHkgKyBhMjEgKiB6ICsgYVsxM107XHJcbiAgICAgICAgb3V0WzE0XSA9IGEwMiAqIHggKyBhMTIgKiB5ICsgYTIyICogeiArIGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhMDMgKiB4ICsgYTEzICogeSArIGEyMyAqIHogKyBhWzE1XTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0NCBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgdGhlIHZlYzMgdG8gc2NhbGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqKi9cclxubWF0NC5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgdmFyIHggPSB2WzBdLCB5ID0gdlsxXSwgeiA9IHZbMl07XHJcblxyXG4gICAgb3V0WzBdID0gYVswXSAqIHg7XHJcbiAgICBvdXRbMV0gPSBhWzFdICogeDtcclxuICAgIG91dFsyXSA9IGFbMl0gKiB4O1xyXG4gICAgb3V0WzNdID0gYVszXSAqIHg7XHJcbiAgICBvdXRbNF0gPSBhWzRdICogeTtcclxuICAgIG91dFs1XSA9IGFbNV0gKiB5O1xyXG4gICAgb3V0WzZdID0gYVs2XSAqIHk7XHJcbiAgICBvdXRbN10gPSBhWzddICogeTtcclxuICAgIG91dFs4XSA9IGFbOF0gKiB6O1xyXG4gICAgb3V0WzldID0gYVs5XSAqIHo7XHJcbiAgICBvdXRbMTBdID0gYVsxMF0gKiB6O1xyXG4gICAgb3V0WzExXSA9IGFbMTFdICogejtcclxuICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgIG91dFsxM10gPSBhWzEzXTtcclxuICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgIG91dFsxNV0gPSBhWzE1XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIG1hdDQgYnkgdGhlIGdpdmVuIGFuZ2xlXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGF4aXMgdGhlIGF4aXMgdG8gcm90YXRlIGFyb3VuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LnJvdGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCwgYXhpcykge1xyXG4gICAgdmFyIHggPSBheGlzWzBdLCB5ID0gYXhpc1sxXSwgeiA9IGF4aXNbMl0sXHJcbiAgICAgICAgbGVuID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeiksXHJcbiAgICAgICAgcywgYywgdCxcclxuICAgICAgICBhMDAsIGEwMSwgYTAyLCBhMDMsXHJcbiAgICAgICAgYTEwLCBhMTEsIGExMiwgYTEzLFxyXG4gICAgICAgIGEyMCwgYTIxLCBhMjIsIGEyMyxcclxuICAgICAgICBiMDAsIGIwMSwgYjAyLFxyXG4gICAgICAgIGIxMCwgYjExLCBiMTIsXHJcbiAgICAgICAgYjIwLCBiMjEsIGIyMjtcclxuXHJcbiAgICBpZiAoTWF0aC5hYnMobGVuKSA8IEdMTUFUX0VQU0lMT04pIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICBsZW4gPSAxIC8gbGVuO1xyXG4gICAgeCAqPSBsZW47XHJcbiAgICB5ICo9IGxlbjtcclxuICAgIHogKj0gbGVuO1xyXG5cclxuICAgIHMgPSBNYXRoLnNpbihyYWQpO1xyXG4gICAgYyA9IE1hdGguY29zKHJhZCk7XHJcbiAgICB0ID0gMSAtIGM7XHJcblxyXG4gICAgYTAwID0gYVswXTsgYTAxID0gYVsxXTsgYTAyID0gYVsyXTsgYTAzID0gYVszXTtcclxuICAgIGExMCA9IGFbNF07IGExMSA9IGFbNV07IGExMiA9IGFbNl07IGExMyA9IGFbN107XHJcbiAgICBhMjAgPSBhWzhdOyBhMjEgPSBhWzldOyBhMjIgPSBhWzEwXTsgYTIzID0gYVsxMV07XHJcblxyXG4gICAgLy8gQ29uc3RydWN0IHRoZSBlbGVtZW50cyBvZiB0aGUgcm90YXRpb24gbWF0cml4XHJcbiAgICBiMDAgPSB4ICogeCAqIHQgKyBjOyBiMDEgPSB5ICogeCAqIHQgKyB6ICogczsgYjAyID0geiAqIHggKiB0IC0geSAqIHM7XHJcbiAgICBiMTAgPSB4ICogeSAqIHQgLSB6ICogczsgYjExID0geSAqIHkgKiB0ICsgYzsgYjEyID0geiAqIHkgKiB0ICsgeCAqIHM7XHJcbiAgICBiMjAgPSB4ICogeiAqIHQgKyB5ICogczsgYjIxID0geSAqIHogKiB0IC0geCAqIHM7IGIyMiA9IHogKiB6ICogdCArIGM7XHJcblxyXG4gICAgLy8gUGVyZm9ybSByb3RhdGlvbi1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cclxuICAgIG91dFswXSA9IGEwMCAqIGIwMCArIGExMCAqIGIwMSArIGEyMCAqIGIwMjtcclxuICAgIG91dFsxXSA9IGEwMSAqIGIwMCArIGExMSAqIGIwMSArIGEyMSAqIGIwMjtcclxuICAgIG91dFsyXSA9IGEwMiAqIGIwMCArIGExMiAqIGIwMSArIGEyMiAqIGIwMjtcclxuICAgIG91dFszXSA9IGEwMyAqIGIwMCArIGExMyAqIGIwMSArIGEyMyAqIGIwMjtcclxuICAgIG91dFs0XSA9IGEwMCAqIGIxMCArIGExMCAqIGIxMSArIGEyMCAqIGIxMjtcclxuICAgIG91dFs1XSA9IGEwMSAqIGIxMCArIGExMSAqIGIxMSArIGEyMSAqIGIxMjtcclxuICAgIG91dFs2XSA9IGEwMiAqIGIxMCArIGExMiAqIGIxMSArIGEyMiAqIGIxMjtcclxuICAgIG91dFs3XSA9IGEwMyAqIGIxMCArIGExMyAqIGIxMSArIGEyMyAqIGIxMjtcclxuICAgIG91dFs4XSA9IGEwMCAqIGIyMCArIGExMCAqIGIyMSArIGEyMCAqIGIyMjtcclxuICAgIG91dFs5XSA9IGEwMSAqIGIyMCArIGExMSAqIGIyMSArIGEyMSAqIGIyMjtcclxuICAgIG91dFsxMF0gPSBhMDIgKiBiMjAgKyBhMTIgKiBiMjEgKyBhMjIgKiBiMjI7XHJcbiAgICBvdXRbMTFdID0gYTAzICogYjIwICsgYTEzICogYjIxICsgYTIzICogYjIyO1xyXG5cclxuICAgIGlmIChhICE9PSBvdXQpIHsgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgbGFzdCByb3dcclxuICAgICAgICBvdXRbMTJdID0gYVsxMl07XHJcbiAgICAgICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgICAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXRyaXggYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWCBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LnJvdGF0ZVggPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcclxuICAgIHZhciBzID0gTWF0aC5zaW4ocmFkKSxcclxuICAgICAgICBjID0gTWF0aC5jb3MocmFkKSxcclxuICAgICAgICBhMTAgPSBhWzRdLFxyXG4gICAgICAgIGExMSA9IGFbNV0sXHJcbiAgICAgICAgYTEyID0gYVs2XSxcclxuICAgICAgICBhMTMgPSBhWzddLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sXHJcbiAgICAgICAgYTIxID0gYVs5XSxcclxuICAgICAgICBhMjIgPSBhWzEwXSxcclxuICAgICAgICBhMjMgPSBhWzExXTtcclxuXHJcbiAgICBpZiAoYSAhPT0gb3V0KSB7IC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIHJvd3NcclxuICAgICAgICBvdXRbMF0gID0gYVswXTtcclxuICAgICAgICBvdXRbMV0gID0gYVsxXTtcclxuICAgICAgICBvdXRbMl0gID0gYVsyXTtcclxuICAgICAgICBvdXRbM10gID0gYVszXTtcclxuICAgICAgICBvdXRbMTJdID0gYVsxMl07XHJcbiAgICAgICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgICAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxyXG4gICAgb3V0WzRdID0gYTEwICogYyArIGEyMCAqIHM7XHJcbiAgICBvdXRbNV0gPSBhMTEgKiBjICsgYTIxICogcztcclxuICAgIG91dFs2XSA9IGExMiAqIGMgKyBhMjIgKiBzO1xyXG4gICAgb3V0WzddID0gYTEzICogYyArIGEyMyAqIHM7XHJcbiAgICBvdXRbOF0gPSBhMjAgKiBjIC0gYTEwICogcztcclxuICAgIG91dFs5XSA9IGEyMSAqIGMgLSBhMTEgKiBzO1xyXG4gICAgb3V0WzEwXSA9IGEyMiAqIGMgLSBhMTIgKiBzO1xyXG4gICAgb3V0WzExXSA9IGEyMyAqIGMgLSBhMTMgKiBzO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0cml4IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFkgYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5yb3RhdGVZID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICB2YXIgcyA9IE1hdGguc2luKHJhZCksXHJcbiAgICAgICAgYyA9IE1hdGguY29zKHJhZCksXHJcbiAgICAgICAgYTAwID0gYVswXSxcclxuICAgICAgICBhMDEgPSBhWzFdLFxyXG4gICAgICAgIGEwMiA9IGFbMl0sXHJcbiAgICAgICAgYTAzID0gYVszXSxcclxuICAgICAgICBhMjAgPSBhWzhdLFxyXG4gICAgICAgIGEyMSA9IGFbOV0sXHJcbiAgICAgICAgYTIyID0gYVsxMF0sXHJcbiAgICAgICAgYTIzID0gYVsxMV07XHJcblxyXG4gICAgaWYgKGEgIT09IG91dCkgeyAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCByb3dzXHJcbiAgICAgICAgb3V0WzRdICA9IGFbNF07XHJcbiAgICAgICAgb3V0WzVdICA9IGFbNV07XHJcbiAgICAgICAgb3V0WzZdICA9IGFbNl07XHJcbiAgICAgICAgb3V0WzddICA9IGFbN107XHJcbiAgICAgICAgb3V0WzEyXSA9IGFbMTJdO1xyXG4gICAgICAgIG91dFsxM10gPSBhWzEzXTtcclxuICAgICAgICBvdXRbMTRdID0gYVsxNF07XHJcbiAgICAgICAgb3V0WzE1XSA9IGFbMTVdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cclxuICAgIG91dFswXSA9IGEwMCAqIGMgLSBhMjAgKiBzO1xyXG4gICAgb3V0WzFdID0gYTAxICogYyAtIGEyMSAqIHM7XHJcbiAgICBvdXRbMl0gPSBhMDIgKiBjIC0gYTIyICogcztcclxuICAgIG91dFszXSA9IGEwMyAqIGMgLSBhMjMgKiBzO1xyXG4gICAgb3V0WzhdID0gYTAwICogcyArIGEyMCAqIGM7XHJcbiAgICBvdXRbOV0gPSBhMDEgKiBzICsgYTIxICogYztcclxuICAgIG91dFsxMF0gPSBhMDIgKiBzICsgYTIyICogYztcclxuICAgIG91dFsxMV0gPSBhMDMgKiBzICsgYTIzICogYztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIG1hdHJpeCBieSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBaIGF4aXNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQucm90YXRlWiA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgdmFyIHMgPSBNYXRoLnNpbihyYWQpLFxyXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpLFxyXG4gICAgICAgIGEwMCA9IGFbMF0sXHJcbiAgICAgICAgYTAxID0gYVsxXSxcclxuICAgICAgICBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGEwMyA9IGFbM10sXHJcbiAgICAgICAgYTEwID0gYVs0XSxcclxuICAgICAgICBhMTEgPSBhWzVdLFxyXG4gICAgICAgIGExMiA9IGFbNl0sXHJcbiAgICAgICAgYTEzID0gYVs3XTtcclxuXHJcbiAgICBpZiAoYSAhPT0gb3V0KSB7IC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIGxhc3Qgcm93XHJcbiAgICAgICAgb3V0WzhdICA9IGFbOF07XHJcbiAgICAgICAgb3V0WzldICA9IGFbOV07XHJcbiAgICAgICAgb3V0WzEwXSA9IGFbMTBdO1xyXG4gICAgICAgIG91dFsxMV0gPSBhWzExXTtcclxuICAgICAgICBvdXRbMTJdID0gYVsxMl07XHJcbiAgICAgICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgICAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxyXG4gICAgb3V0WzBdID0gYTAwICogYyArIGExMCAqIHM7XHJcbiAgICBvdXRbMV0gPSBhMDEgKiBjICsgYTExICogcztcclxuICAgIG91dFsyXSA9IGEwMiAqIGMgKyBhMTIgKiBzO1xyXG4gICAgb3V0WzNdID0gYTAzICogYyArIGExMyAqIHM7XHJcbiAgICBvdXRbNF0gPSBhMTAgKiBjIC0gYTAwICogcztcclxuICAgIG91dFs1XSA9IGExMSAqIGMgLSBhMDEgKiBzO1xyXG4gICAgb3V0WzZdID0gYTEyICogYyAtIGEwMiAqIHM7XHJcbiAgICBvdXRbN10gPSBhMTMgKiBjIC0gYTAzICogcztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgcXVhdGVybmlvbiByb3RhdGlvbiBhbmQgdmVjdG9yIHRyYW5zbGF0aW9uXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIHZlYyk7XHJcbiAqICAgICB2YXIgcXVhdE1hdCA9IG1hdDQuY3JlYXRlKCk7XHJcbiAqICAgICBxdWF0NC50b01hdDQocXVhdCwgcXVhdE1hdCk7XHJcbiAqICAgICBtYXQ0Lm11bHRpcGx5KGRlc3QsIHF1YXRNYXQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdDR9IHEgUm90YXRpb24gcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgVHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24gPSBmdW5jdGlvbiAob3V0LCBxLCB2KSB7XHJcbiAgICAvLyBRdWF0ZXJuaW9uIG1hdGhcclxuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXSxcclxuICAgICAgICB4MiA9IHggKyB4LFxyXG4gICAgICAgIHkyID0geSArIHksXHJcbiAgICAgICAgejIgPSB6ICsgeixcclxuXHJcbiAgICAgICAgeHggPSB4ICogeDIsXHJcbiAgICAgICAgeHkgPSB4ICogeTIsXHJcbiAgICAgICAgeHogPSB4ICogejIsXHJcbiAgICAgICAgeXkgPSB5ICogeTIsXHJcbiAgICAgICAgeXogPSB5ICogejIsXHJcbiAgICAgICAgenogPSB6ICogejIsXHJcbiAgICAgICAgd3ggPSB3ICogeDIsXHJcbiAgICAgICAgd3kgPSB3ICogeTIsXHJcbiAgICAgICAgd3ogPSB3ICogejI7XHJcblxyXG4gICAgb3V0WzBdID0gMSAtICh5eSArIHp6KTtcclxuICAgIG91dFsxXSA9IHh5ICsgd3o7XHJcbiAgICBvdXRbMl0gPSB4eiAtIHd5O1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IHh5IC0gd3o7XHJcbiAgICBvdXRbNV0gPSAxIC0gKHh4ICsgenopO1xyXG4gICAgb3V0WzZdID0geXogKyB3eDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSB4eiArIHd5O1xyXG4gICAgb3V0WzldID0geXogLSB3eDtcclxuICAgIG91dFsxMF0gPSAxIC0gKHh4ICsgeXkpO1xyXG4gICAgb3V0WzExXSA9IDA7XHJcbiAgICBvdXRbMTJdID0gdlswXTtcclxuICAgIG91dFsxM10gPSB2WzFdO1xyXG4gICAgb3V0WzE0XSA9IHZbMl07XHJcbiAgICBvdXRbMTVdID0gMTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubWF0NC5mcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEpIHtcclxuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXSxcclxuICAgICAgICB4MiA9IHggKyB4LFxyXG4gICAgICAgIHkyID0geSArIHksXHJcbiAgICAgICAgejIgPSB6ICsgeixcclxuXHJcbiAgICAgICAgeHggPSB4ICogeDIsXHJcbiAgICAgICAgeXggPSB5ICogeDIsXHJcbiAgICAgICAgeXkgPSB5ICogeTIsXHJcbiAgICAgICAgenggPSB6ICogeDIsXHJcbiAgICAgICAgenkgPSB6ICogeTIsXHJcbiAgICAgICAgenogPSB6ICogejIsXHJcbiAgICAgICAgd3ggPSB3ICogeDIsXHJcbiAgICAgICAgd3kgPSB3ICogeTIsXHJcbiAgICAgICAgd3ogPSB3ICogejI7XHJcblxyXG4gICAgb3V0WzBdID0gMSAtIHl5IC0geno7XHJcbiAgICBvdXRbMV0gPSB5eCArIHd6O1xyXG4gICAgb3V0WzJdID0genggLSB3eTtcclxuICAgIG91dFszXSA9IDA7XHJcblxyXG4gICAgb3V0WzRdID0geXggLSB3ejtcclxuICAgIG91dFs1XSA9IDEgLSB4eCAtIHp6O1xyXG4gICAgb3V0WzZdID0genkgKyB3eDtcclxuICAgIG91dFs3XSA9IDA7XHJcblxyXG4gICAgb3V0WzhdID0genggKyB3eTtcclxuICAgIG91dFs5XSA9IHp5IC0gd3g7XHJcbiAgICBvdXRbMTBdID0gMSAtIHh4IC0geXk7XHJcbiAgICBvdXRbMTFdID0gMDtcclxuXHJcbiAgICBvdXRbMTJdID0gMDtcclxuICAgIG91dFsxM10gPSAwO1xyXG4gICAgb3V0WzE0XSA9IDA7XHJcbiAgICBvdXRbMTVdID0gMTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIGZydXN0dW0gbWF0cml4IHdpdGggdGhlIGdpdmVuIGJvdW5kc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBsZWZ0IExlZnQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IHJpZ2h0IFJpZ2h0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBib3R0b20gQm90dG9tIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0b3AgVG9wIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBuZWFyIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5mcnVzdHVtID0gZnVuY3Rpb24gKG91dCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcclxuICAgIHZhciBybCA9IDEgLyAocmlnaHQgLSBsZWZ0KSxcclxuICAgICAgICB0YiA9IDEgLyAodG9wIC0gYm90dG9tKSxcclxuICAgICAgICBuZiA9IDEgLyAobmVhciAtIGZhcik7XHJcbiAgICBvdXRbMF0gPSAobmVhciAqIDIpICogcmw7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDA7XHJcbiAgICBvdXRbNF0gPSAwO1xyXG4gICAgb3V0WzVdID0gKG5lYXIgKiAyKSAqIHRiO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAocmlnaHQgKyBsZWZ0KSAqIHJsO1xyXG4gICAgb3V0WzldID0gKHRvcCArIGJvdHRvbSkgKiB0YjtcclxuICAgIG91dFsxMF0gPSAoZmFyICsgbmVhcikgKiBuZjtcclxuICAgIG91dFsxMV0gPSAtMTtcclxuICAgIG91dFsxMl0gPSAwO1xyXG4gICAgb3V0WzEzXSA9IDA7XHJcbiAgICBvdXRbMTRdID0gKGZhciAqIG5lYXIgKiAyKSAqIG5mO1xyXG4gICAgb3V0WzE1XSA9IDA7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHBlcnNwZWN0aXZlIHByb2plY3Rpb24gbWF0cml4IHdpdGggdGhlIGdpdmVuIGJvdW5kc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3Z5IFZlcnRpY2FsIGZpZWxkIG9mIHZpZXcgaW4gcmFkaWFuc1xyXG4gKiBAcGFyYW0ge251bWJlcn0gYXNwZWN0IEFzcGVjdCByYXRpby4gdHlwaWNhbGx5IHZpZXdwb3J0IHdpZHRoL2hlaWdodFxyXG4gKiBAcGFyYW0ge251bWJlcn0gbmVhciBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBmYXIgRmFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQucGVyc3BlY3RpdmUgPSBmdW5jdGlvbiAob3V0LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcikge1xyXG4gICAgdmFyIGYgPSAxLjAgLyBNYXRoLnRhbihmb3Z5IC8gMiksXHJcbiAgICAgICAgbmYgPSAxIC8gKG5lYXIgLSBmYXIpO1xyXG4gICAgb3V0WzBdID0gZiAvIGFzcGVjdDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSBmO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAwO1xyXG4gICAgb3V0WzldID0gMDtcclxuICAgIG91dFsxMF0gPSAoZmFyICsgbmVhcikgKiBuZjtcclxuICAgIG91dFsxMV0gPSAtMTtcclxuICAgIG91dFsxMl0gPSAwO1xyXG4gICAgb3V0WzEzXSA9IDA7XHJcbiAgICBvdXRbMTRdID0gKDIgKiBmYXIgKiBuZWFyKSAqIG5mO1xyXG4gICAgb3V0WzE1XSA9IDA7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIG9ydGhvZ29uYWwgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtudW1iZXJ9IGxlZnQgTGVmdCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmlnaHQgUmlnaHQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IGJvdHRvbSBCb3R0b20gYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IHRvcCBUb3AgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0Lm9ydGhvID0gZnVuY3Rpb24gKG91dCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcclxuICAgIHZhciBsciA9IDEgLyAobGVmdCAtIHJpZ2h0KSxcclxuICAgICAgICBidCA9IDEgLyAoYm90dG9tIC0gdG9wKSxcclxuICAgICAgICBuZiA9IDEgLyAobmVhciAtIGZhcik7XHJcbiAgICBvdXRbMF0gPSAtMiAqIGxyO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMDtcclxuICAgIG91dFs1XSA9IC0yICogYnQ7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDA7XHJcbiAgICBvdXRbOV0gPSAwO1xyXG4gICAgb3V0WzEwXSA9IDIgKiBuZjtcclxuICAgIG91dFsxMV0gPSAwO1xyXG4gICAgb3V0WzEyXSA9IChsZWZ0ICsgcmlnaHQpICogbHI7XHJcbiAgICBvdXRbMTNdID0gKHRvcCArIGJvdHRvbSkgKiBidDtcclxuICAgIG91dFsxNF0gPSAoZmFyICsgbmVhcikgKiBuZjtcclxuICAgIG91dFsxNV0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBsb29rLWF0IG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBleWUgcG9zaXRpb24sIGZvY2FsIHBvaW50LCBhbmQgdXAgYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7dmVjM30gZXllIFBvc2l0aW9uIG9mIHRoZSB2aWV3ZXJcclxuICogQHBhcmFtIHt2ZWMzfSBjZW50ZXIgUG9pbnQgdGhlIHZpZXdlciBpcyBsb29raW5nIGF0XHJcbiAqIEBwYXJhbSB7dmVjM30gdXAgdmVjMyBwb2ludGluZyB1cFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0Lmxvb2tBdCA9IGZ1bmN0aW9uIChvdXQsIGV5ZSwgY2VudGVyLCB1cCkge1xyXG4gICAgdmFyIHgwLCB4MSwgeDIsIHkwLCB5MSwgeTIsIHowLCB6MSwgejIsIGxlbixcclxuICAgICAgICBleWV4ID0gZXllWzBdLFxyXG4gICAgICAgIGV5ZXkgPSBleWVbMV0sXHJcbiAgICAgICAgZXlleiA9IGV5ZVsyXSxcclxuICAgICAgICB1cHggPSB1cFswXSxcclxuICAgICAgICB1cHkgPSB1cFsxXSxcclxuICAgICAgICB1cHogPSB1cFsyXSxcclxuICAgICAgICBjZW50ZXJ4ID0gY2VudGVyWzBdLFxyXG4gICAgICAgIGNlbnRlcnkgPSBjZW50ZXJbMV0sXHJcbiAgICAgICAgY2VudGVyeiA9IGNlbnRlclsyXTtcclxuXHJcbiAgICBpZiAoTWF0aC5hYnMoZXlleCAtIGNlbnRlcngpIDwgR0xNQVRfRVBTSUxPTiAmJlxyXG4gICAgICAgIE1hdGguYWJzKGV5ZXkgLSBjZW50ZXJ5KSA8IEdMTUFUX0VQU0lMT04gJiZcclxuICAgICAgICBNYXRoLmFicyhleWV6IC0gY2VudGVyeikgPCBHTE1BVF9FUFNJTE9OKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdDQuaWRlbnRpdHkob3V0KTtcclxuICAgIH1cclxuXHJcbiAgICB6MCA9IGV5ZXggLSBjZW50ZXJ4O1xyXG4gICAgejEgPSBleWV5IC0gY2VudGVyeTtcclxuICAgIHoyID0gZXlleiAtIGNlbnRlcno7XHJcblxyXG4gICAgbGVuID0gMSAvIE1hdGguc3FydCh6MCAqIHowICsgejEgKiB6MSArIHoyICogejIpO1xyXG4gICAgejAgKj0gbGVuO1xyXG4gICAgejEgKj0gbGVuO1xyXG4gICAgejIgKj0gbGVuO1xyXG5cclxuICAgIHgwID0gdXB5ICogejIgLSB1cHogKiB6MTtcclxuICAgIHgxID0gdXB6ICogejAgLSB1cHggKiB6MjtcclxuICAgIHgyID0gdXB4ICogejEgLSB1cHkgKiB6MDtcclxuICAgIGxlbiA9IE1hdGguc3FydCh4MCAqIHgwICsgeDEgKiB4MSArIHgyICogeDIpO1xyXG4gICAgaWYgKCFsZW4pIHtcclxuICAgICAgICB4MCA9IDA7XHJcbiAgICAgICAgeDEgPSAwO1xyXG4gICAgICAgIHgyID0gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGVuID0gMSAvIGxlbjtcclxuICAgICAgICB4MCAqPSBsZW47XHJcbiAgICAgICAgeDEgKj0gbGVuO1xyXG4gICAgICAgIHgyICo9IGxlbjtcclxuICAgIH1cclxuXHJcbiAgICB5MCA9IHoxICogeDIgLSB6MiAqIHgxO1xyXG4gICAgeTEgPSB6MiAqIHgwIC0gejAgKiB4MjtcclxuICAgIHkyID0gejAgKiB4MSAtIHoxICogeDA7XHJcblxyXG4gICAgbGVuID0gTWF0aC5zcXJ0KHkwICogeTAgKyB5MSAqIHkxICsgeTIgKiB5Mik7XHJcbiAgICBpZiAoIWxlbikge1xyXG4gICAgICAgIHkwID0gMDtcclxuICAgICAgICB5MSA9IDA7XHJcbiAgICAgICAgeTIgPSAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZW4gPSAxIC8gbGVuO1xyXG4gICAgICAgIHkwICo9IGxlbjtcclxuICAgICAgICB5MSAqPSBsZW47XHJcbiAgICAgICAgeTIgKj0gbGVuO1xyXG4gICAgfVxyXG5cclxuICAgIG91dFswXSA9IHgwO1xyXG4gICAgb3V0WzFdID0geTA7XHJcbiAgICBvdXRbMl0gPSB6MDtcclxuICAgIG91dFszXSA9IDA7XHJcbiAgICBvdXRbNF0gPSB4MTtcclxuICAgIG91dFs1XSA9IHkxO1xyXG4gICAgb3V0WzZdID0gejE7XHJcbiAgICBvdXRbN10gPSAwO1xyXG4gICAgb3V0WzhdID0geDI7XHJcbiAgICBvdXRbOV0gPSB5MjtcclxuICAgIG91dFsxMF0gPSB6MjtcclxuICAgIG91dFsxMV0gPSAwO1xyXG4gICAgb3V0WzEyXSA9IC0oeDAgKiBleWV4ICsgeDEgKiBleWV5ICsgeDIgKiBleWV6KTtcclxuICAgIG91dFsxM10gPSAtKHkwICogZXlleCArIHkxICogZXlleSArIHkyICogZXlleik7XHJcbiAgICBvdXRbMTRdID0gLSh6MCAqIGV5ZXggKyB6MSAqIGV5ZXkgKyB6MiAqIGV5ZXopO1xyXG4gICAgb3V0WzE1XSA9IDE7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXHJcbm1hdDQuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpICsgTWF0aC5wb3coYVs0XSwgMikgKyBNYXRoLnBvdyhhWzVdLCAyKSArIE1hdGgucG93KGFbNl0sIDIpICsgTWF0aC5wb3coYVs3XSwgMikgKyBNYXRoLnBvdyhhWzhdLCAyKSArIE1hdGgucG93KGFbOV0sIDIpICsgTWF0aC5wb3coYVsxMF0sIDIpICsgTWF0aC5wb3coYVsxMV0sIDIpICsgTWF0aC5wb3coYVsxMl0sIDIpICsgTWF0aC5wb3coYVsxM10sIDIpICsgTWF0aC5wb3coYVsxNF0sIDIpICsgTWF0aC5wb3coYVsxNV0sIDIpICkpXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBtYXQ0OyIsIi8vIFRPRE8gUmVzb3VyY2VzIGxpa2Ugc2hhZGVyLCB0ZXh0dXJlLCBnZW9tZXRyeSByZWZlcmVuY2UgbWFuYWdlbWVudFxyXG4vLyBUcmFjZSBhbmQgZmluZCBvdXQgd2hpY2ggc2hhZGVyLCB0ZXh0dXJlLCBnZW9tZXRyeSBjYW4gYmUgZGVzdHJveWVkXHJcbmltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IEdMSW5mbyBmcm9tICcuL2NvcmUvR0xJbmZvJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxuXHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuL01hdGVyaWFsJztcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi9tYXRoL1ZlY3RvcjInO1xyXG5pbXBvcnQgUHJvZ3JhbU1hbmFnZXIgZnJvbSAnLi9ncHUvUHJvZ3JhbU1hbmFnZXInO1xyXG5cclxuLy8gTGlnaHQgaGVhZGVyXHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi9TaGFkZXInO1xyXG5cclxuaW1wb3J0IHByZXpFc3NsIGZyb20gJy4vc2hhZGVyL3NvdXJjZS9wcmV6Lmdsc2wuanMnO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHByZXpFc3NsKTtcclxuXHJcbmltcG9ydCBtYXQ0IGZyb20gJy4vZ2xtYXRyaXgvbWF0NCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG52YXIgbWF0NENyZWF0ZSA9IG1hdDQuY3JlYXRlO1xyXG5cclxudmFyIGVycm9yU2hhZGVyID0ge307XHJcblxyXG5mdW5jdGlvbiBkZWZhdWx0R2V0TWF0ZXJpYWwocmVuZGVyYWJsZSkge1xyXG4gICAgcmV0dXJuIHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbn1cclxuZnVuY3Rpb24gZGVmYXVsdEdldFVuaWZvcm0ocmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHN5bWJvbCkge1xyXG4gICAgcmV0dXJuIG1hdGVyaWFsLnVuaWZvcm1zW3N5bWJvbF0udmFsdWU7XHJcbn1cclxuZnVuY3Rpb24gZGVmYXVsdElzTWF0ZXJpYWxDaGFuZ2VkKHJlbmRlcmFibGVkLCBwcmV2UmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHByZXZNYXRlcmlhbCkge1xyXG4gICAgcmV0dXJuIG1hdGVyaWFsICE9PSBwcmV2TWF0ZXJpYWw7XHJcbn1cclxuZnVuY3Rpb24gZGVmYXVsdElmUmVuZGVyKHJlbmRlcmFibGUpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub29wKCkge31cclxuXHJcbnZhciBhdHRyaWJ1dGVCdWZmZXJUeXBlTWFwID0ge1xyXG4gICAgZmxvYXQ6IGdsZW51bS5GTE9BVCxcclxuICAgIGJ5dGU6IGdsZW51bS5CWVRFLFxyXG4gICAgdWJ5dGU6IGdsZW51bS5VTlNJR05FRF9CWVRFLFxyXG4gICAgc2hvcnQ6IGdsZW51bS5TSE9SVCxcclxuICAgIHVzaG9ydDogZ2xlbnVtLlVOU0lHTkVEX1NIT1JUXHJcbn07XHJcblxyXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChhdmFpbGFibGVBdHRyaWJ1dGVzLCBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzLCBpbmRpY2VzQnVmZmVyKSB7XHJcbiAgICB0aGlzLmF2YWlsYWJsZUF0dHJpYnV0ZXMgPSBhdmFpbGFibGVBdHRyaWJ1dGVzO1xyXG4gICAgdGhpcy5hdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzID0gYXZhaWxhYmxlQXR0cmlidXRlU3ltYm9scztcclxuICAgIHRoaXMuaW5kaWNlc0J1ZmZlciA9IGluZGljZXNCdWZmZXI7XHJcblxyXG4gICAgdGhpcy52YW8gPSBudWxsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBQbGFjZUhvbGRlclRleHR1cmUocmVuZGVyZXIpIHtcclxuICAgIHZhciBibGFua0NhbnZhcztcclxuICAgIHZhciB3ZWJnbFRleHR1cmU7XHJcbiAgICB0aGlzLmJpbmQgPSBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICBpZiAoIWJsYW5rQ2FudmFzKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gRW52aXJvbm1lbnQgbm90IHN1cHBvcnQgY3JlYXRlQ2FudmFzLlxyXG4gICAgICAgICAgICBibGFua0NhbnZhcyA9IHZlbmRvci5jcmVhdGVDYW52YXMoKTtcclxuICAgICAgICAgICAgYmxhbmtDYW52YXMud2lkdGggPSBibGFua0NhbnZhcy5oZWlnaHQgPSAxO1xyXG4gICAgICAgICAgICBibGFua0NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgdmFyIGZpcnN0QmluZCA9ICF3ZWJnbFRleHR1cmU7XHJcbiAgICAgICAgaWYgKGZpcnN0QmluZCkge1xyXG4gICAgICAgICAgICB3ZWJnbFRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHdlYmdsVGV4dHVyZSk7XHJcbiAgICAgICAgaWYgKGZpcnN0QmluZCkge1xyXG4gICAgICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJsYW5rQ2FudmFzKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy51bmJpbmQgPSBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICByZW5kZXJlci5nbC5iaW5kVGV4dHVyZShyZW5kZXJlci5nbC5URVhUVVJFXzJELCBudWxsKTtcclxuICAgIH07XHJcbiAgICB0aGlzLmlzUmVuZGVyYWJsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlJlbmRlcmVyXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgUmVuZGVyZXIgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlJlbmRlcmVyIyAqLyB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MQ2FudmFzRWxlbWVudH1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKi9cclxuICAgICAgICBjYW52YXM6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbnZhcyB3aWR0aCwgc2V0IGJ5IHJlc2l6ZSBtZXRob2RcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3dpZHRoOiAxMDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbnZhcyB3aWR0aCwgc2V0IGJ5IHJlc2l6ZSBtZXRob2RcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2hlaWdodDogMTAwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEZXZpY2UgcGl4ZWwgcmF0aW8sIHNldCBieSBzZXREZXZpY2VQaXhlbFJhdGlvIG1ldGhvZFxyXG4gICAgICAgICAqIFNwZWNpYWxseSBmb3IgaGlnaCBkZWZpbmF0aW9uIGRpc3BsYXlcclxuICAgICAgICAgKiBAc2VlIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvd2ViZ2wvd2lraS9IYW5kbGluZ0hpZ2hEUElcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGV2aWNlUGl4ZWxSYXRpbzogKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSB8fCAxLjAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENsZWFyIGNvbG9yXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcltdfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNsZWFyQ29sb3I6IFswLjAsIDAuMCwgMC4wLCAwLjBdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEZWZhdWx0OlxyXG4gICAgICAgICAqICAgICBfZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IF9nbC5ERVBUSF9CVUZGRVJfQklUIHwgX2dsLlNURU5DSUxfQlVGRkVSX0JJVFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xlYXJCaXQ6IDE3NjY0LFxyXG5cclxuICAgICAgICAvLyBTZXR0aW5ncyB3aGVuIGdldHRpbmcgY29udGV4dFxyXG4gICAgICAgIC8vIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc3BlY3MvbGF0ZXN0LyMyLjRcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIGFscGhhLCBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhbHBoYTogdHJ1ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgZGVwdGggYnVmZmVyLCBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkZXB0aDogdHJ1ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgc3RlbmNpbCBidWZmZXIsIGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzdGVuY2lsOiBmYWxzZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgYW50aWFsaWFzLCBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhbnRpYWxpYXM6IHRydWUsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIHByZW11bHRpcGxpZWQgYWxwaGEsIGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdHJ1ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBwcmVzZXJ2ZSBkcmF3aW5nIGJ1ZmZlciwgZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogZmFsc2UsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdGhyb3cgY29udGV4dCBlcnJvciwgdXN1YWxseSB0dXJuZWQgb24gaW4gZGVidWcgbW9kZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRocm93RXJyb3I6IHRydWUsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2ViR0wgQ29udGV4dCBjcmVhdGVkIGZyb20gZ2l2ZW4gY2FudmFzXHJcbiAgICAgICAgICogQHR5cGUge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBnbDogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZW5kZXJlciB2aWV3cG9ydCwgcmVhZC1vbmx5LCBjYW4gYmUgc2V0IGJ5IHNldFZpZXdwb3J0IG1ldGhvZFxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdmlld3BvcnQ6IHt9LFxyXG5cclxuICAgICAgICAvLyBTZXQgYnkgRnJhbWVCdWZmZXIjYmluZFxyXG4gICAgICAgIF9fY3VycmVudEZyYW1lQnVmZmVyOiBudWxsLFxyXG5cclxuICAgICAgICBfdmlld3BvcnRTdGFjazogW10sXHJcbiAgICAgICAgX2NsZWFyU3RhY2s6IFtdLFxyXG5cclxuICAgICAgICBfc2NlbmVSZW5kZXJpbmc6IG51bGxcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICBpZiAoIXRoaXMuY2FudmFzKSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMgPSB2ZW5kb3IuY3JlYXRlQ2FudmFzKCk7XHJcbiAgICB9XHJcbiAgICB2YXIgY2FudmFzID0gdGhpcy5jYW52YXM7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHZhciBvcHRzID0ge1xyXG4gICAgICAgICAgICBhbHBoYTogdGhpcy5hbHBoYSxcclxuICAgICAgICAgICAgZGVwdGg6IHRoaXMuZGVwdGgsXHJcbiAgICAgICAgICAgIHN0ZW5jaWw6IHRoaXMuc3RlbmNpbCxcclxuICAgICAgICAgICAgYW50aWFsaWFzOiB0aGlzLmFudGlhbGlhcyxcclxuICAgICAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSxcclxuICAgICAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRzKVxyXG4gICAgICAgICAgICB8fCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0cyk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5nbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2dsaW5mbyA9IG5ldyBHTEluZm8odGhpcy5nbCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdsLnRhcmdldFJlbmRlcmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FscmVhZHkgY3JlYXRlZCBhIHJlbmRlcmVyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2wudGFyZ2V0UmVuZGVyZXIgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICB0aHJvdyAnRXJyb3IgY3JlYXRpbmcgV2ViR0wgQ29udGV4dCAnICsgZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJbml0IG1hbmFnZXJzXHJcbiAgICB0aGlzLl9wcm9ncmFtTWdyID0gbmV3IFByb2dyYW1NYW5hZ2VyKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuX3BsYWNlaG9sZGVyVGV4dHVyZSA9IG5ldyBQbGFjZUhvbGRlclRleHR1cmUodGhpcyk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5SZW5kZXJlci5wcm90b3R5cGUuICoqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIFJlc2l6ZSB0aGUgY2FudmFzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcclxuICAgICAqL1xyXG4gICAgcmVzaXplOiBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICAgICAgdmFyIGNhbnZhcyA9IHRoaXMuY2FudmFzO1xyXG4gICAgICAgIC8vIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvd2ViZ2wvd2lraS9IYW5kbGluZ0hpZ2hEUElcclxuICAgICAgICAvLyBzZXQgdGhlIGRpc3BsYXkgc2l6ZSBvZiB0aGUgY2FudmFzLlxyXG4gICAgICAgIHZhciBkcHIgPSB0aGlzLmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgaWYgKHdpZHRoICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGNhbnZhcy5zdHlsZSkge1xyXG4gICAgICAgICAgICAgICAgY2FudmFzLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2V0IHRoZSBzaXplIG9mIHRoZSBkcmF3aW5nQnVmZmVyXHJcbiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoICogZHByO1xyXG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0ICogZHByO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB3aWR0aDtcclxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSBjYW52YXMud2lkdGggLyBkcHI7XHJcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IGNhbnZhcy5oZWlnaHQgLyBkcHI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFZpZXdwb3J0KDAsIDAsIHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCByZW5kZXJlciB3aWR0aFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXRXaWR0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcmVuZGVyZXIgaGVpZ2h0XHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldEhlaWdodDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHZpZXdwb3J0IGFzcGVjdCxcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0Vmlld3BvcnRBc3BlY3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xyXG4gICAgICAgIHJldHVybiB2aWV3cG9ydC53aWR0aCAvIHZpZXdwb3J0LmhlaWdodDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZGV2aWNlUGl4ZWxSYXRpb1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRldmljZVBpeGVsUmF0aW9cclxuICAgICAqL1xyXG4gICAgc2V0RGV2aWNlUGl4ZWxSYXRpbzogZnVuY3Rpb24oZGV2aWNlUGl4ZWxSYXRpbykge1xyXG4gICAgICAgIHRoaXMuZGV2aWNlUGl4ZWxSYXRpbyA9IGRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgdGhpcy5yZXNpemUodGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGRldmljZVBpeGVsUmF0aW9cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZXZpY2VQaXhlbFJhdGlvXHJcbiAgICAgKi9cclxuICAgIGdldERldmljZVBpeGVsUmF0aW86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VQaXhlbFJhdGlvO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBXZWJHTCBleHRlbnNpb25cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9XHJcbiAgICAgKi9cclxuICAgIGdldEdMRXh0ZW5zaW9uOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nbGluZm8uZ2V0RXh0ZW5zaW9uKG5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBXZWJHTCBwYXJhbWV0ZXJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHsqfVxyXG4gICAgICovXHJcbiAgICBnZXRHTFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2xpbmZvLmdldFBhcmFtZXRlcihuYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcmVuZGVyaW5nIHZpZXdwb3J0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcnxPYmplY3R9IHhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhdXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGV2aWNlUGl4ZWxSYXRpb11cclxuICAgICAqICAgICAgICBEZWZhdWx0bHkgdXNlIHRoZSByZW5kZXJlcmUgZGV2aWNlUGl4ZWxSYXRpb1xyXG4gICAgICogICAgICAgIEl0IG5lZWRzIHRvIGJlIDEgd2hlbiBzZXRWaWV3cG9ydCBpcyBjYWxsZWQgYnkgZnJhbWVCdWZmZXJcclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogIHNldFZpZXdwb3J0KDAsMCx3aWR0aCxoZWlnaHQsMSlcclxuICAgICAqICBzZXRWaWV3cG9ydCh7XHJcbiAgICAgKiAgICAgIHg6IDAsXHJcbiAgICAgKiAgICAgIHk6IDAsXHJcbiAgICAgKiAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAqICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgKiAgICAgIGRldmljZVBpeGVsUmF0aW86IDFcclxuICAgICAqICB9KVxyXG4gICAgICovXHJcbiAgICBzZXRWaWV3cG9ydDogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIGRwcikge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHggPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHZhciBvYmogPSB4O1xyXG5cclxuICAgICAgICAgICAgeCA9IG9iai54O1xyXG4gICAgICAgICAgICB5ID0gb2JqLnk7XHJcbiAgICAgICAgICAgIHdpZHRoID0gb2JqLndpZHRoO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBvYmouaGVpZ2h0O1xyXG4gICAgICAgICAgICBkcHIgPSBvYmouZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICB9XHJcbiAgICAgICAgZHByID0gZHByIHx8IHRoaXMuZGV2aWNlUGl4ZWxSYXRpbztcclxuXHJcbiAgICAgICAgdGhpcy5nbC52aWV3cG9ydChcclxuICAgICAgICAgICAgeCAqIGRwciwgeSAqIGRwciwgd2lkdGggKiBkcHIsIGhlaWdodCAqIGRwclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gVXNlIGEgZnJlc2ggbmV3IG9iamVjdCwgbm90IHdyaXRlIHByb3BlcnR5LlxyXG4gICAgICAgIHRoaXMudmlld3BvcnQgPSB7XHJcbiAgICAgICAgICAgIHg6IHgsXHJcbiAgICAgICAgICAgIHk6IHksXHJcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgICAgIGRldmljZVBpeGVsUmF0aW86IGRwclxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHVzaCBjdXJyZW50IHZpZXdwb3J0IGludG8gYSBzdGFja1xyXG4gICAgICovXHJcbiAgICBzYXZlVmlld3BvcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl92aWV3cG9ydFN0YWNrLnB1c2godGhpcy52aWV3cG9ydCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUG9wIHZpZXdwb3J0IGZyb20gc3RhY2ssIHJlc3RvcmUgaW4gdGhlIHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIHJlc3RvcmVWaWV3cG9ydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl92aWV3cG9ydFN0YWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRWaWV3cG9ydCh0aGlzLl92aWV3cG9ydFN0YWNrLnBvcCgpKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHVzaCBjdXJyZW50IGNsZWFyIGludG8gYSBzdGFja1xyXG4gICAgICovXHJcbiAgICBzYXZlQ2xlYXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9jbGVhclN0YWNrLnB1c2goe1xyXG4gICAgICAgICAgICBjbGVhckJpdDogdGhpcy5jbGVhckJpdCxcclxuICAgICAgICAgICAgY2xlYXJDb2xvcjogdGhpcy5jbGVhckNvbG9yXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUG9wIGNsZWFyIGZyb20gc3RhY2ssIHJlc3RvcmUgaW4gdGhlIHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIHJlc3RvcmVDbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jbGVhclN0YWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIG9wdCA9IHRoaXMuX2NsZWFyU3RhY2sucG9wKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJDb2xvciA9IG9wdC5jbGVhckNvbG9yO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyQml0ID0gb3B0LmNsZWFyQml0O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYmluZFNjZW5lUmVuZGVyaW5nOiBmdW5jdGlvbiAoc2NlbmUpIHtcclxuICAgICAgICB0aGlzLl9zY2VuZVJlbmRlcmluZyA9IHNjZW5lO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbmRlciB0aGUgc2NlbmUgaW4gY2FtZXJhIHRvIHRoZSBzY3JlZW4gb3IgYmluZGVkIG9mZmxpbmUgZnJhbWVidWZmZXJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuU2NlbmV9ICAgICAgIHNjZW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkNhbWVyYX0gICAgICBjYW1lcmFcclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICBbbm90VXBkYXRlU2NlbmVdIElmIG5vdCBjYWxsIHRoZSBzY2VuZS51cGRhdGUgbWV0aG9kcyBpbiB0aGUgcmVuZGVyaW5nLCBkZWZhdWx0IHRydWVcclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICBbcHJlWl0gICAgICAgICAgIElmIHVzZSBwcmVaIG9wdGltaXphdGlvbiwgZGVmYXVsdCBmYWxzZVxyXG4gICAgICogQHJldHVybiB7SVJlbmRlckluZm99XHJcbiAgICAgKi9cclxuICAgIHJlbmRlcjogZnVuY3Rpb24oc2NlbmUsIGNhbWVyYSwgbm90VXBkYXRlU2NlbmUsIHByZVopIHtcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuXHJcbiAgICAgICAgdmFyIGNsZWFyQ29sb3IgPSB0aGlzLmNsZWFyQ29sb3I7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNsZWFyQml0KSB7XHJcblxyXG4gICAgICAgICAgICAvLyBNdXN0IHNldCBkZXB0aCBhbmQgY29sb3IgbWFzayB0cnVlIGJlZm9yZSBjbGVhclxyXG4gICAgICAgICAgICBfZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xyXG4gICAgICAgICAgICB2YXIgbmVlZHNTY2lzc29yID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciB2aWV3cG9ydERwciA9IHZpZXdwb3J0LmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgICAgIGlmICh2aWV3cG9ydC53aWR0aCAhPT0gdGhpcy5fd2lkdGggfHwgdmlld3BvcnQuaGVpZ2h0ICE9PSB0aGlzLl9oZWlnaHRcclxuICAgICAgICAgICAgICAgIHx8ICh2aWV3cG9ydERwciAmJiB2aWV3cG9ydERwciAhPT0gdGhpcy5kZXZpY2VQaXhlbFJhdGlvKVxyXG4gICAgICAgICAgICAgICAgfHwgdmlld3BvcnQueCB8fCB2aWV3cG9ydC55XHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgbmVlZHNTY2lzc29yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE1NDQ2MDgvaG93LXRvLWNsZWFyLWEtcmVjdGFuZ2xlLWFyZWEtaW4td2ViZ2xcclxuICAgICAgICAgICAgICAgIC8vIE9ubHkgY2xlYXIgdGhlIHZpZXdwb3J0XHJcbiAgICAgICAgICAgICAgICBfZ2wuZW5hYmxlKF9nbC5TQ0lTU09SX1RFU1QpO1xyXG4gICAgICAgICAgICAgICAgX2dsLnNjaXNzb3Iodmlld3BvcnQueCAqIHZpZXdwb3J0RHByLCB2aWV3cG9ydC55ICogdmlld3BvcnREcHIsIHZpZXdwb3J0LndpZHRoICogdmlld3BvcnREcHIsIHZpZXdwb3J0LmhlaWdodCAqIHZpZXdwb3J0RHByKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBfZ2wuY2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTtcclxuICAgICAgICAgICAgX2dsLmNsZWFyKHRoaXMuY2xlYXJCaXQpO1xyXG4gICAgICAgICAgICBpZiAobmVlZHNTY2lzc29yKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZGlzYWJsZShfZ2wuU0NJU1NPUl9URVNUKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIHNjZW5lIGhhdmUgYmVlbiB1cGRhdGVkIGluIHRoZSBwcmVwYXNzIGxpa2Ugc2hhZG93IG1hcFxyXG4gICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXBkYXRlIGl0IGFnYWluXHJcbiAgICAgICAgaWYgKCFub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgICAgICBzY2VuZS51cGRhdGUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY2VuZS51cGRhdGVMaWdodHMoKTtcclxuXHJcbiAgICAgICAgY2FtZXJhID0gY2FtZXJhIHx8IHNjZW5lLmdldE1haW5DYW1lcmEoKTtcclxuICAgICAgICBpZiAoIWNhbWVyYSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5cXCd0IGZpbmQgY2FtZXJhIGluIHRoZSBzY2VuZS4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYW1lcmEudXBkYXRlKCk7XHJcbiAgICAgICAgdmFyIHJlbmRlckxpc3QgPSBzY2VuZS51cGRhdGVSZW5kZXJMaXN0KGNhbWVyYSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3NjZW5lUmVuZGVyaW5nID0gc2NlbmU7XHJcblxyXG4gICAgICAgIHZhciBvcGFxdWVMaXN0ID0gcmVuZGVyTGlzdC5vcGFxdWU7XHJcbiAgICAgICAgdmFyIHRyYW5zcGFyZW50TGlzdCA9IHJlbmRlckxpc3QudHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgdmFyIHNjZW5lTWF0ZXJpYWwgPSBzY2VuZS5tYXRlcmlhbDtcclxuXHJcbiAgICAgICAgc2NlbmUudHJpZ2dlcignYmVmb3JlcmVuZGVyJywgdGhpcywgc2NlbmUsIGNhbWVyYSwgcmVuZGVyTGlzdCk7XHJcblxyXG4gICAgICAgIC8vIFJlbmRlciBwcmUgelxyXG4gICAgICAgIGlmIChwcmVaKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyUHJlWihvcGFxdWVMaXN0LCBzY2VuZSwgY2FtZXJhKTtcclxuICAgICAgICAgICAgX2dsLmRlcHRoRnVuYyhfZ2wuTEVRVUFMKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIF9nbC5kZXB0aEZ1bmMoX2dsLkxFU1MpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBkZXB0aCBvZiB0cmFuc3BhcmVudCBsaXN0LlxyXG4gICAgICAgIHZhciB3b3JsZFZpZXdNYXQgPSBtYXQ0Q3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHBvc1ZpZXdTcGFjZSA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFuc3BhcmVudExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHJlbmRlcmFibGUgPSB0cmFuc3BhcmVudExpc3RbaV07XHJcbiAgICAgICAgICAgIG1hdDQubXVsdGlwbHlBZmZpbmUod29ybGRWaWV3TWF0LCBjYW1lcmEudmlld01hdHJpeC5hcnJheSwgcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzMudHJhbnNmb3JtTWF0NChwb3NWaWV3U3BhY2UsIHJlbmRlcmFibGUucG9zaXRpb24uYXJyYXksIHdvcmxkVmlld01hdCk7XHJcbiAgICAgICAgICAgIHJlbmRlcmFibGUuX19kZXB0aCA9IHBvc1ZpZXdTcGFjZVsyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbmRlciBvcGFxdWUgbGlzdFxyXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyhvcGFxdWVMaXN0LCBjYW1lcmEsIHtcclxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NlbmVNYXRlcmlhbCB8fCByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzb3J0Q29tcGFyZTogdGhpcy5vcGFxdWVTb3J0Q29tcGFyZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJlbmRlclBhc3ModHJhbnNwYXJlbnRMaXN0LCBjYW1lcmEsIHtcclxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NlbmVNYXRlcmlhbCB8fCByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzb3J0Q29tcGFyZTogdGhpcy50cmFuc3BhcmVudFNvcnRDb21wYXJlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNjZW5lLnRyaWdnZXIoJ2FmdGVycmVuZGVyJywgdGhpcywgc2NlbmUsIGNhbWVyYSwgcmVuZGVyTGlzdCk7XHJcblxyXG4gICAgICAgIC8vIENsZWFudXBcclxuICAgICAgICB0aGlzLl9zY2VuZVJlbmRlcmluZyA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFByb2dyYW06IGZ1bmN0aW9uIChyZW5kZXJhYmxlLCByZW5kZXJNYXRlcmlhbCwgc2NlbmUpIHtcclxuICAgICAgICByZW5kZXJNYXRlcmlhbCA9IHJlbmRlck1hdGVyaWFsIHx8IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2dyYW1NZ3IuZ2V0UHJvZ3JhbShyZW5kZXJhYmxlLCByZW5kZXJNYXRlcmlhbCwgc2NlbmUpO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZVByb2dyYW06IGZ1bmN0aW9uIChwcm9ncmFtKSB7XHJcbiAgICAgICAgaWYgKHByb2dyYW0uX19lcnJvcikge1xyXG4gICAgICAgICAgICB2YXIgZXJyb3JNc2cgPSBwcm9ncmFtLl9fZXJyb3I7XHJcbiAgICAgICAgICAgIGlmIChlcnJvclNoYWRlcltwcm9ncmFtLl9fdWlkX19dKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZXJyb3JTaGFkZXJbcHJvZ3JhbS5fX3VpZF9fXSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy50aHJvd0Vycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2cpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsIGVycm9yTXNnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVQcm9ncmFtczogZnVuY3Rpb24gKGxpc3QsIHNjZW5lLCBwYXNzQ29uZmlnKSB7XHJcbiAgICAgICAgdmFyIGdldE1hdGVyaWFsID0gKHBhc3NDb25maWcgJiYgcGFzc0NvbmZpZy5nZXRNYXRlcmlhbCkgfHwgZGVmYXVsdEdldE1hdGVyaWFsO1xyXG4gICAgICAgIHNjZW5lID0gc2NlbmUgfHwgbnVsbDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHJlbmRlcmFibGUgPSBsaXN0W2ldO1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyTWF0ZXJpYWwgPSBnZXRNYXRlcmlhbC5jYWxsKHRoaXMsIHJlbmRlcmFibGUpO1xyXG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcmV2UmVuZGVyYWJsZSA9IGxpc3RbaSAtIDFdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHByZXZKb2ludHNMZW4gPSBwcmV2UmVuZGVyYWJsZS5qb2ludHMgPyBwcmV2UmVuZGVyYWJsZS5qb2ludHMubGVuZ3RoIDogMDtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludHNMZW4gPSByZW5kZXJhYmxlLmpvaW50cyA/IHJlbmRlcmFibGUuam9pbnRzLmxlbmd0aCA6IDA7XHJcbiAgICAgICAgICAgICAgICAvLyBLZWVwIHByb2dyYW0gbm90IGNoYW5nZSBpZiBqb2ludHMsIG1hdGVyaWFsLCBsaWdodEdyb3VwIGFyZSBzYW1lIG9mIHR3byByZW5kZXJhYmxlcy5cclxuICAgICAgICAgICAgICAgIGlmIChqb2ludHNMZW4gPT09IHByZXZKb2ludHNMZW5cclxuICAgICAgICAgICAgICAgICAgICAmJiByZW5kZXJhYmxlLm1hdGVyaWFsID09PSBwcmV2UmVuZGVyYWJsZS5tYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgICAgICYmIHJlbmRlcmFibGUubGlnaHRHcm91cCA9PT0gcHJldlJlbmRlcmFibGUubGlnaHRHcm91cFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyYWJsZS5fX3Byb2dyYW0gPSBwcmV2UmVuZGVyYWJsZS5fX3Byb2dyYW07XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBwcm9ncmFtID0gdGhpcy5fcHJvZ3JhbU1nci5nZXRQcm9ncmFtKHJlbmRlcmFibGUsIHJlbmRlck1hdGVyaWFsLCBzY2VuZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTtcclxuXHJcbiAgICAgICAgICAgIHJlbmRlcmFibGUuX19wcm9ncmFtID0gcHJvZ3JhbTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIGEgc2luZ2xlIHJlbmRlcmFibGUgbGlzdCBpbiBjYW1lcmEgaW4gc2VxdWVuY2VcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJhYmxlW119IGxpc3QgTGlzdCBvZiBhbGwgcmVuZGVyYWJsZXMuXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBbY2FtZXJhXSBDYW1lcmEgcHJvdmlkZSB2aWV3IG1hdHJpeCBhbmQgcG9yamVjdGlvbiBtYXRyaXguIEl0IGNhbiBiZSBudWxsLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtwYXNzQ29uZmlnXVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuZ2V0TWF0ZXJpYWxdIEdldCByZW5kZXJhYmxlIG1hdGVyaWFsLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuZ2V0VW5pZm9ybV0gR2V0IG1hdGVyaWFsIHVuaWZvcm0gdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5pc01hdGVyaWFsQ2hhbmdlZF0gSWYgbWF0ZXJpYWwgY2hhbmdlZC5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXNzQ29uZmlnLmJlZm9yZVJlbmRlcl0gQmVmb3JlIHJlbmRlciBlYWNoIHJlbmRlcmFibGUuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5hZnRlclJlbmRlcl0gQWZ0ZXIgcmVuZGVyIGVhY2ggcmVuZGVyYWJsZVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuaWZSZW5kZXJdIElmIHJlbmRlciB0aGUgcmVuZGVyYWJsZS5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXNzQ29uZmlnLnNvcnRDb21wYXJlXSBTb3J0IGNvbXBhcmUgZnVuY3Rpb24uXHJcbiAgICAgKiBAcmV0dXJuIHtJUmVuZGVySW5mb31cclxuICAgICAqL1xyXG4gICAgcmVuZGVyUGFzczogZnVuY3Rpb24obGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKSB7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXJwYXNzJywgdGhpcywgbGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuXHJcbiAgICAgICAgcGFzc0NvbmZpZyA9IHBhc3NDb25maWcgfHwge307XHJcbiAgICAgICAgcGFzc0NvbmZpZy5nZXRNYXRlcmlhbCA9IHBhc3NDb25maWcuZ2V0TWF0ZXJpYWwgfHwgZGVmYXVsdEdldE1hdGVyaWFsO1xyXG4gICAgICAgIHBhc3NDb25maWcuZ2V0VW5pZm9ybSA9IHBhc3NDb25maWcuZ2V0VW5pZm9ybSB8fCBkZWZhdWx0R2V0VW5pZm9ybTtcclxuICAgICAgICAvLyBQRU5ESU5HIEJldHRlciBzb2x1dGlvbj9cclxuICAgICAgICBwYXNzQ29uZmlnLmlzTWF0ZXJpYWxDaGFuZ2VkID0gcGFzc0NvbmZpZy5pc01hdGVyaWFsQ2hhbmdlZCB8fCBkZWZhdWx0SXNNYXRlcmlhbENoYW5nZWQ7XHJcbiAgICAgICAgcGFzc0NvbmZpZy5iZWZvcmVSZW5kZXIgPSBwYXNzQ29uZmlnLmJlZm9yZVJlbmRlciB8fCBub29wO1xyXG4gICAgICAgIHBhc3NDb25maWcuYWZ0ZXJSZW5kZXIgPSBwYXNzQ29uZmlnLmFmdGVyUmVuZGVyIHx8IG5vb3A7XHJcblxyXG4gICAgICAgIHZhciBpZlJlbmRlck9iamVjdCA9IHBhc3NDb25maWcuaWZSZW5kZXIgfHwgZGVmYXVsdElmUmVuZGVyO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVByb2dyYW1zKGxpc3QsIHRoaXMuX3NjZW5lUmVuZGVyaW5nLCBwYXNzQ29uZmlnKTtcclxuICAgICAgICBpZiAocGFzc0NvbmZpZy5zb3J0Q29tcGFyZSkge1xyXG4gICAgICAgICAgICBsaXN0LnNvcnQocGFzc0NvbmZpZy5zb3J0Q29tcGFyZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTb21lIGNvbW1vbiBidWlsdGluIHVuaWZvcm1zXHJcbiAgICAgICAgdmFyIHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydDtcclxuICAgICAgICB2YXIgdkRwciA9IHZpZXdwb3J0LmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgdmFyIHZpZXdwb3J0VW5pZm9ybSA9IFtcclxuICAgICAgICAgICAgdmlld3BvcnQueCAqIHZEcHIsIHZpZXdwb3J0LnkgKiB2RHByLFxyXG4gICAgICAgICAgICB2aWV3cG9ydC53aWR0aCAqIHZEcHIsIHZpZXdwb3J0LmhlaWdodCAqIHZEcHJcclxuICAgICAgICBdO1xyXG4gICAgICAgIHZhciB3aW5kb3dEcHIgPSB0aGlzLmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgdmFyIHdpbmRvd1NpemVVbmlmb3JtID0gdGhpcy5fX2N1cnJlbnRGcmFtZUJ1ZmZlclxyXG4gICAgICAgICAgICA/IFt0aGlzLl9fY3VycmVudEZyYW1lQnVmZmVyLmdldFRleHR1cmVXaWR0aCgpLCB0aGlzLl9fY3VycmVudEZyYW1lQnVmZmVyLmdldFRleHR1cmVIZWlnaHQoKV1cclxuICAgICAgICAgICAgOiBbdGhpcy5fd2lkdGggKiB3aW5kb3dEcHIsIHRoaXMuX2hlaWdodCAqIHdpbmRvd0Rwcl07XHJcbiAgICAgICAgLy8gREVQUkVDQVRFRFxyXG4gICAgICAgIHZhciB2aWV3cG9ydFNpemVVbmlmb3JtID0gW1xyXG4gICAgICAgICAgICB2aWV3cG9ydFVuaWZvcm1bMl0sIHZpZXdwb3J0VW5pZm9ybVszXVxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdmFyIHRpbWUgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgdmlldyBhbmQgcHJvamVjdGlvbiBtYXRyaXhcclxuICAgICAgICBpZiAoY2FtZXJhKSB7XHJcbiAgICAgICAgICAgIG1hdDQuY29weShtYXRyaWNlcy5WSUVXLCBjYW1lcmEudmlld01hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgICAgIG1hdDQuY29weShtYXRyaWNlcy5QUk9KRUNUSU9OLCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgICAgIG1hdDQuY29weShtYXRyaWNlcy5WSUVXSU5WRVJTRSwgY2FtZXJhLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdDQuaWRlbnRpdHkobWF0cmljZXMuVklFVyk7XHJcbiAgICAgICAgICAgIG1hdDQuaWRlbnRpdHkobWF0cmljZXMuUFJPSkVDVElPTik7XHJcbiAgICAgICAgICAgIG1hdDQuaWRlbnRpdHkobWF0cmljZXMuVklFV0lOVkVSU0UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtYXQ0Lm11bHRpcGx5KG1hdHJpY2VzLlZJRVdQUk9KRUNUSU9OLCBtYXRyaWNlcy5QUk9KRUNUSU9OLCBtYXRyaWNlcy5WSUVXKTtcclxuICAgICAgICBtYXQ0LmludmVydChtYXRyaWNlcy5QUk9KRUNUSU9OSU5WRVJTRSwgbWF0cmljZXMuUFJPSkVDVElPTik7XHJcbiAgICAgICAgbWF0NC5pbnZlcnQobWF0cmljZXMuVklFV1BST0pFQ1RJT05JTlZFUlNFLCBtYXRyaWNlcy5WSUVXUFJPSkVDVElPTik7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBzY2VuZSA9IHRoaXMuX3NjZW5lUmVuZGVyaW5nO1xyXG5cclxuICAgICAgICB2YXIgcHJldk1hdGVyaWFsO1xyXG4gICAgICAgIHZhciBwcmV2UHJvZ3JhbTtcclxuICAgICAgICB2YXIgcHJldlJlbmRlcmFibGU7XHJcblxyXG4gICAgICAgIC8vIFN0YXR1c1xyXG4gICAgICAgIHZhciBkZXB0aFRlc3QsIGRlcHRoTWFzaztcclxuICAgICAgICB2YXIgY3VsbGluZywgY3VsbEZhY2UsIGZyb250RmFjZTtcclxuICAgICAgICB2YXIgdHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgdmFyIGRyYXdJRDtcclxuICAgICAgICB2YXIgY3VycmVudFZBTztcclxuICAgICAgICB2YXIgbWF0ZXJpYWxUYWtlc1RleHR1cmVTbG90O1xyXG5cclxuICAgICAgICAvLyB2YXIgdmFvRXh0ID0gdGhpcy5nZXRHTEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKTtcclxuICAgICAgICAvLyBub3QgdXNlIHZhb0V4dCwgc29tZSBwbGF0Zm9ybXMgbWF5IG1lc3MgaXQgdXAuXHJcbiAgICAgICAgdmFyIHZhb0V4dCA9IG51bGw7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyYWJsZSA9IGxpc3RbaV07XHJcbiAgICAgICAgICAgIHZhciBpc1NjZW5lTm9kZSA9IHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0gIT0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIHdvcmxkTTtcclxuXHJcbiAgICAgICAgICAgIGlmICghaWZSZW5kZXJPYmplY3QocmVuZGVyYWJsZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBTa2lubmVkIG1lc2ggd2lsbCB0cmFuc2Zvcm1lZCB0byBqb2ludCBzcGFjZS4gSWdub3JlIHRoZSBtZXNoIHRyYW5zZm9ybVxyXG4gICAgICAgICAgICBpZiAoaXNTY2VuZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHdvcmxkTSA9IChyZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2ggJiYgcmVuZGVyYWJsZS5pc1NraW5uZWRNZXNoKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgPyBtYXRyaWNlcy5JREVOVElUWSA6IHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0uYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gcmVuZGVyYWJsZS5nZW9tZXRyeTtcclxuICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gcGFzc0NvbmZpZy5nZXRNYXRlcmlhbC5jYWxsKHRoaXMsIHJlbmRlcmFibGUpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHByb2dyYW0gPSByZW5kZXJhYmxlLl9fcHJvZ3JhbTtcclxuICAgICAgICAgICAgdmFyIHNoYWRlciA9IG1hdGVyaWFsLnNoYWRlcjtcclxuXHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50RHJhd0lEID0gZ2VvbWV0cnkuX191aWRfXyArICctJyArIHByb2dyYW0uX191aWRfXztcclxuICAgICAgICAgICAgdmFyIGRyYXdJRENoYW5nZWQgPSBjdXJyZW50RHJhd0lEICE9PSBkcmF3SUQ7XHJcbiAgICAgICAgICAgIGRyYXdJRCA9IGN1cnJlbnREcmF3SUQ7XHJcbiAgICAgICAgICAgIGlmIChkcmF3SURDaGFuZ2VkICYmIHZhb0V4dCkge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBTZWVtcyBuZWVkIHRvIGJlIGJvdW5kIHRvIG51bGwgaW1tZWRpYXRlbHkgKG9yIGJlZm9yZSBiaW5kIGFub3RoZXIgcHJvZ3JhbT8pIGlmIHZhbyBpcyBjaGFuZ2VkXHJcbiAgICAgICAgICAgICAgICB2YW9FeHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc1NjZW5lTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgbWF0NC5jb3B5KG1hdHJpY2VzLldPUkxELCB3b3JsZE0pO1xyXG4gICAgICAgICAgICAgICAgbWF0NC5tdWx0aXBseShtYXRyaWNlcy5XT1JMRFZJRVdQUk9KRUNUSU9OLCBtYXRyaWNlcy5WSUVXUFJPSkVDVElPTiwgd29ybGRNKTtcclxuICAgICAgICAgICAgICAgIG1hdDQubXVsdGlwbHlBZmZpbmUobWF0cmljZXMuV09STERWSUVXLCBtYXRyaWNlcy5WSUVXLCB3b3JsZE0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRlci5tYXRyaXhTZW1hbnRpY3MuV09STERJTlZFUlNFIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRElOVkVSU0VUUkFOU1BPU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXQ0LmludmVydChtYXRyaWNlcy5XT1JMRElOVkVSU0UsIHdvcmxkTSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRFZJRVdJTlZFUlNFIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRFZJRVdJTlZFUlNFVFJBTlNQT1NFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0NC5pbnZlcnQobWF0cmljZXMuV09STERWSUVXSU5WRVJTRSwgbWF0cmljZXMuV09STERWSUVXKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdDQuaW52ZXJ0KG1hdHJpY2VzLldPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFLCBtYXRyaWNlcy5XT1JMRFZJRVdQUk9KRUNUSU9OKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gQmVmb3JlIHJlbmRlciBob29rXHJcbiAgICAgICAgICAgIHJlbmRlcmFibGUuYmVmb3JlUmVuZGVyICYmIHJlbmRlcmFibGUuYmVmb3JlUmVuZGVyKHRoaXMpO1xyXG4gICAgICAgICAgICBwYXNzQ29uZmlnLmJlZm9yZVJlbmRlci5jYWxsKHRoaXMsIHJlbmRlcmFibGUsIG1hdGVyaWFsLCBwcmV2TWF0ZXJpYWwpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHByb2dyYW1DaGFuZ2VkID0gcHJvZ3JhbSAhPT0gcHJldlByb2dyYW07XHJcbiAgICAgICAgICAgIGlmIChwcm9ncmFtQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gU2V0IGxpZ2h0cyBudW1iZXJcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vIFNldCBzb21lIGNvbW1vbiB1bmlmb3Jtc1xyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdWSUVXUE9SVCcsIHZpZXdwb3J0VW5pZm9ybSk7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKF9nbCwgJ1dJTkRPV19TSVpFJywgd2luZG93U2l6ZVVuaWZvcm0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbWVyYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnTkVBUicsIGNhbWVyYS5uZWFyKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKF9nbCwgJ0ZBUicsIGNhbWVyYS5mYXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdERVZJQ0VQSVhFTFJBVElPJywgdkRwcik7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKF9nbCwgJ1RJTUUnLCB0aW1lKTtcclxuICAgICAgICAgICAgICAgIC8vIERFUFJFQ0FURURcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnVklFV1BPUlRfU0laRScsIHZpZXdwb3J0U2l6ZVVuaWZvcm0pO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNldCBsaWdodHMgdW5pZm9ybXNcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gbmVlZHMgb3B0aW1pemVkXHJcbiAgICAgICAgICAgICAgICBpZiAoc2NlbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZS5zZXRMaWdodFVuaWZvcm1zKHByb2dyYW0sIHJlbmRlcmFibGUubGlnaHRHcm91cCwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtID0gcHJldlByb2dyYW07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFByb2dyYW0gY2hhbmdlcyBhbHNvIG5lZWRzIHJlc2V0IHRoZSBtYXRlcmlhbHMuXHJcbiAgICAgICAgICAgIGlmIChwcm9ncmFtQ2hhbmdlZCB8fCBwYXNzQ29uZmlnLmlzTWF0ZXJpYWxDaGFuZ2VkKFxyXG4gICAgICAgICAgICAgICAgcmVuZGVyYWJsZSwgcHJldlJlbmRlcmFibGUsIG1hdGVyaWFsLCBwcmV2TWF0ZXJpYWxcclxuICAgICAgICAgICAgKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmRlcHRoVGVzdCAhPT0gZGVwdGhUZXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID8gX2dsLmVuYWJsZShfZ2wuREVQVEhfVEVTVCkgOiBfZ2wuZGlzYWJsZShfZ2wuREVQVEhfVEVTVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVwdGhUZXN0ID0gbWF0ZXJpYWwuZGVwdGhUZXN0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmRlcHRoTWFzayAhPT0gZGVwdGhNYXNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmRlcHRoTWFzayhtYXRlcmlhbC5kZXB0aE1hc2spO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlcHRoTWFzayA9IG1hdGVyaWFsLmRlcHRoTWFzaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC50cmFuc3BhcmVudCAhPT0gdHJhbnNwYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC50cmFuc3BhcmVudCA/IF9nbC5lbmFibGUoX2dsLkJMRU5EKSA6IF9nbC5kaXNhYmxlKF9nbC5CTEVORCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNwYXJlbnQgPSBtYXRlcmlhbC50cmFuc3BhcmVudDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gY2FjaGUgYmxlbmRpbmdcclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC50cmFuc3BhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5ibGVuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5ibGVuZChfZ2wpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCBibGVuZCBmdW5jdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfZ2wuYmxlbmRFcXVhdGlvblNlcGFyYXRlKF9nbC5GVU5DX0FERCwgX2dsLkZVTkNfQUREKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2dsLmJsZW5kRnVuY1NlcGFyYXRlKF9nbC5TUkNfQUxQSEEsIF9nbC5PTkVfTUlOVVNfU1JDX0FMUEhBLCBfZ2wuT05FLCBfZ2wuT05FX01JTlVTX1NSQ19BTFBIQSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsVGFrZXNUZXh0dXJlU2xvdCA9IHRoaXMuX2JpbmRNYXRlcmlhbChcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLCBtYXRlcmlhbCwgcHJvZ3JhbSxcclxuICAgICAgICAgICAgICAgICAgICBwcmV2UmVuZGVyYWJsZSB8fCBudWxsLCBwcmV2TWF0ZXJpYWwgfHwgbnVsbCwgcHJldlByb2dyYW0gfHwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBwYXNzQ29uZmlnLmdldFVuaWZvcm1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBwcmV2TWF0ZXJpYWwgPSBtYXRlcmlhbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIG1hdHJpeFNlbWFudGljS2V5cyA9IHNoYWRlci5tYXRyaXhTZW1hbnRpY0tleXM7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNTY2VuZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbWF0cml4U2VtYW50aWNLZXlzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbWFudGljID0gbWF0cml4U2VtYW50aWNLZXlzW2tdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpY0luZm8gPSBzaGFkZXIubWF0cml4U2VtYW50aWNzW3NlbWFudGljXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gbWF0cmljZXNbc2VtYW50aWNdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpY0luZm8uaXNUcmFuc3Bvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdHJpeE5vVHJhbnNwb3NlID0gbWF0cmljZXNbc2VtYW50aWNJbmZvLnNlbWFudGljTm9UcmFuc3Bvc2VdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQ0LnRyYW5zcG9zZShtYXRyaXgsIG1hdHJpeE5vVHJhbnNwb3NlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgc2VtYW50aWNJbmZvLnR5cGUsIHNlbWFudGljSW5mby5zeW1ib2wsIG1hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLmN1bGxGYWNlICE9PSBjdWxsRmFjZSkge1xyXG4gICAgICAgICAgICAgICAgY3VsbEZhY2UgPSByZW5kZXJhYmxlLmN1bGxGYWNlO1xyXG4gICAgICAgICAgICAgICAgX2dsLmN1bGxGYWNlKGN1bGxGYWNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5mcm9udEZhY2UgIT09IGZyb250RmFjZSkge1xyXG4gICAgICAgICAgICAgICAgZnJvbnRGYWNlID0gcmVuZGVyYWJsZS5mcm9udEZhY2U7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZnJvbnRGYWNlKGZyb250RmFjZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlbmRlcmFibGUuY3VsbGluZyAhPT0gY3VsbGluZykge1xyXG4gICAgICAgICAgICAgICAgY3VsbGluZyA9IHJlbmRlcmFibGUuY3VsbGluZztcclxuICAgICAgICAgICAgICAgIGN1bGxpbmcgPyBfZ2wuZW5hYmxlKF9nbC5DVUxMX0ZBQ0UpIDogX2dsLmRpc2FibGUoX2dsLkNVTExfRkFDRSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gVE9ETyBOb3QgdXBkYXRlIHNrZWxldG9uIGluIGVhY2ggcmVuZGVyYWJsZS5cclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlU2tlbGV0b24ocmVuZGVyYWJsZSwgcHJvZ3JhbSwgbWF0ZXJpYWxUYWtlc1RleHR1cmVTbG90KTtcclxuICAgICAgICAgICAgaWYgKGRyYXdJRENoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRWQU8gPSB0aGlzLl9iaW5kVkFPKHZhb0V4dCwgc2hhZGVyLCBnZW9tZXRyeSwgcHJvZ3JhbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyT2JqZWN0KHJlbmRlcmFibGUsIGN1cnJlbnRWQU8pO1xyXG5cclxuICAgICAgICAgICAgLy8gQWZ0ZXIgcmVuZGVyIGhvb2tcclxuICAgICAgICAgICAgcGFzc0NvbmZpZy5hZnRlclJlbmRlcih0aGlzLCByZW5kZXJhYmxlKTtcclxuICAgICAgICAgICAgcmVuZGVyYWJsZS5hZnRlclJlbmRlciAmJiByZW5kZXJhYmxlLmFmdGVyUmVuZGVyKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgcHJldlByb2dyYW0gPSBwcm9ncmFtO1xyXG4gICAgICAgICAgICBwcmV2UmVuZGVyYWJsZSA9IHJlbmRlcmFibGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUT0RPIFNlZW1zIG5lZWQgdG8gYmUgYm91bmQgdG8gbnVsbCBpbW1lZGlhdGVseSBpZiB2YW8gaXMgY2hhbmdlZD9cclxuICAgICAgICBpZiAodmFvRXh0KSB7XHJcbiAgICAgICAgICAgIHZhb0V4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2FmdGVycmVuZGVycGFzcycsIHRoaXMsIGxpc3QsIGNhbWVyYSwgcGFzc0NvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldE1heEpvaW50TnVtYmVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dsaW5mby5nZXRNYXhKb2ludE51bWJlcigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlU2tlbGV0b246IGZ1bmN0aW9uIChvYmplY3QsIHByb2dyYW0sIHNsb3QpIHtcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuICAgICAgICB2YXIgc2tlbGV0b24gPSBvYmplY3Quc2tlbGV0b247XHJcbiAgICAgICAgLy8gU2V0IHBvc2UgbWF0cmljZXMgb2Ygc2tpbm5lZCBtZXNoXHJcbiAgICAgICAgaWYgKHNrZWxldG9uKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gVXBkYXRlIGJlZm9yZSBjdWxsaW5nLlxyXG4gICAgICAgICAgICBza2VsZXRvbi51cGRhdGUoKTtcclxuICAgICAgICAgICAgaWYgKG9iamVjdC5qb2ludHMubGVuZ3RoID4gdGhpcy5fZ2xpbmZvLmdldE1heEpvaW50TnVtYmVyKCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBza2luTWF0cmljZXNUZXh0dXJlID0gc2tlbGV0b24uZ2V0U3ViU2tpbk1hdHJpY2VzVGV4dHVyZShvYmplY3QuX191aWRfXywgb2JqZWN0LmpvaW50cyk7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnVzZVRleHR1cmVTbG90KHRoaXMsIHNraW5NYXRyaWNlc1RleHR1cmUsIHNsb3QpO1xyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFpJywgJ3NraW5NYXRyaWNlc1RleHR1cmUnLCBzbG90KTtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShfZ2wsICcxZicsICdza2luTWF0cmljZXNUZXh0dXJlU2l6ZScsIHNraW5NYXRyaWNlc1RleHR1cmUud2lkdGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNraW5NYXRyaWNlc0FycmF5ID0gc2tlbGV0b24uZ2V0U3ViU2tpbk1hdHJpY2VzKG9iamVjdC5fX3VpZF9fLCBvYmplY3Quam9pbnRzKTtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnU0tJTl9NQVRSSVgnLCBza2luTWF0cmljZXNBcnJheSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZW5kZXJPYmplY3Q6IGZ1bmN0aW9uIChyZW5kZXJhYmxlLCB2YW8pIHtcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuICAgICAgICB2YXIgZ2VvbWV0cnkgPSByZW5kZXJhYmxlLmdlb21ldHJ5O1xyXG5cclxuICAgICAgICB2YXIgZ2xEcmF3TW9kZSA9IHJlbmRlcmFibGUubW9kZTtcclxuICAgICAgICBpZiAoZ2xEcmF3TW9kZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGdsRHJhd01vZGUgPSAweDAwMDQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpZiAoZ2xEcmF3TW9kZSA9PT0gZ2xlbnVtLkxJTkVTIHx8IGdsRHJhd01vZGUgPT09IGdsZW51bS5MSU5FX1NUUklQIHx8IGdsRHJhd01vZGUgPT09IGdsZW51bS5MSU5FX0xPT1ApIHtcclxuICAgICAgICAvLyAgICAgX2dsLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aCk7XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICBpZiAodmFvLmluZGljZXNCdWZmZXIpIHtcclxuICAgICAgICAgICAgdmFyIHVpbnRFeHQgPSB0aGlzLmdldEdMRXh0ZW5zaW9uKCdPRVNfZWxlbWVudF9pbmRleF91aW50Jyk7XHJcbiAgICAgICAgICAgIHZhciB1c2VVaW50RXh0ID0gdWludEV4dCAmJiAoZ2VvbWV0cnkuaW5kaWNlcyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KTtcclxuICAgICAgICAgICAgdmFyIGluZGljZXNUeXBlID0gdXNlVWludEV4dCA/IF9nbC5VTlNJR05FRF9JTlQgOiBfZ2wuVU5TSUdORURfU0hPUlQ7XHJcblxyXG4gICAgICAgICAgICBfZ2wuZHJhd0VsZW1lbnRzKGdsRHJhd01vZGUsIHZhby5pbmRpY2VzQnVmZmVyLmNvdW50LCBpbmRpY2VzVHlwZSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBGSVhNRSBVc2UgdmVydGV4IG51bWJlciBpbiBidWZmZXJcclxuICAgICAgICAgICAgLy8gdmVydGV4Q291bnQgbWF5IGdldCB0aGUgd3JvbmcgdmFsdWUgd2hlbiBnZW9tZXRyeSBmb3JnZXQgdG8gbWFyayBkaXJ0eSBhZnRlciB1cGRhdGVcclxuICAgICAgICAgICAgX2dsLmRyYXdBcnJheXMoZ2xEcmF3TW9kZSwgMCwgZ2VvbWV0cnkudmVydGV4Q291bnQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2JpbmRNYXRlcmlhbDogZnVuY3Rpb24gKHJlbmRlcmFibGUsIG1hdGVyaWFsLCBwcm9ncmFtLCBwcmV2UmVuZGVyYWJsZSwgcHJldk1hdGVyaWFsLCBwcmV2UHJvZ3JhbSwgZ2V0VW5pZm9ybVZhbHVlKSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHRoaXMuZ2w7XHJcbiAgICAgICAgLy8gUEVORElORyBTYW1lIHRleHR1cmUgaW4gZGlmZmVyZW50IG1hdGVyaWFsIHRha2UgZGlmZmVyZW50IHNsb3Q/XHJcblxyXG4gICAgICAgIC8vIE1heSB1c2Ugc2hhZGVyIG9mIG90aGVyIG1hdGVyaWFsIGlmIHNoYWRlciBjb2RlIGFyZSBzYW1lXHJcbiAgICAgICAgdmFyIHNhbWVQcm9ncmFtID0gcHJldlByb2dyYW0gPT09IHByb2dyYW07XHJcblxyXG4gICAgICAgIHZhciBjdXJyZW50VGV4dHVyZVNsb3QgPSBwcm9ncmFtLmN1cnJlbnRUZXh0dXJlU2xvdCgpO1xyXG4gICAgICAgIHZhciBlbmFibGVkVW5pZm9ybXMgPSBtYXRlcmlhbC5nZXRFbmFibGVkVW5pZm9ybXMoKTtcclxuICAgICAgICB2YXIgdGV4dHVyZVVuaWZvcm1zID0gbWF0ZXJpYWwuZ2V0VGV4dHVyZVVuaWZvcm1zKCk7XHJcbiAgICAgICAgdmFyIHBsYWNlaG9sZGVyVGV4dHVyZSA9IHRoaXMuX3BsYWNlaG9sZGVyVGV4dHVyZTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPCB0ZXh0dXJlVW5pZm9ybXMubGVuZ3RoOyB1KyspIHtcclxuICAgICAgICAgICAgdmFyIHN5bWJvbCA9IHRleHR1cmVVbmlmb3Jtc1t1XTtcclxuICAgICAgICAgICAgdmFyIHVuaWZvcm1WYWx1ZSA9IGdldFVuaWZvcm1WYWx1ZShyZW5kZXJhYmxlLCBtYXRlcmlhbCwgc3ltYm9sKTtcclxuICAgICAgICAgICAgdmFyIHVuaWZvcm1UeXBlID0gbWF0ZXJpYWwudW5pZm9ybXNbc3ltYm9sXS50eXBlO1xyXG4gICAgICAgICAgICAvLyBOb3QgdXNlIGBpbnN0YW5jZW9mYCB0byBkZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB0ZXh0dXJlIGluIE1hdGVyaWFsI2JpbmQuXHJcbiAgICAgICAgICAgIC8vIFVzZSB0eXBlIGluc3RlYWQsIGluIHNvbWUgY2FzZSB0ZXh0dXJlIG1heSBiZSBpbiBkaWZmZXJlbnQgbmFtZXNwYWNlcy5cclxuICAgICAgICAgICAgLy8gVE9ETyBEdWNrIHR5cGUgdmFsaWRhdGUuXHJcbiAgICAgICAgICAgIGlmICh1bmlmb3JtVHlwZSA9PT0gJ3QnICYmIHVuaWZvcm1WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gUmVzZXQgc2xvdFxyXG4gICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlLl9fc2xvdCA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHVuaWZvcm1UeXBlID09PSAndHYnKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1WYWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVmFsdWVbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlW2ldLl9fc2xvdCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcGxhY2Vob2xkZXJUZXh0dXJlLl9fc2xvdCA9IC0xO1xyXG5cclxuICAgICAgICAvLyBTZXQgdW5pZm9ybXNcclxuICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IGVuYWJsZWRVbmlmb3Jtcy5sZW5ndGg7IHUrKykge1xyXG4gICAgICAgICAgICB2YXIgc3ltYm9sID0gZW5hYmxlZFVuaWZvcm1zW3VdO1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybSA9IG1hdGVyaWFsLnVuaWZvcm1zW3N5bWJvbF07XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtVmFsdWUgPSBnZXRVbmlmb3JtVmFsdWUocmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHN5bWJvbCk7XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtVHlwZSA9IHVuaWZvcm0udHlwZTtcclxuICAgICAgICAgICAgdmFyIGlzVGV4dHVyZSA9IHVuaWZvcm1UeXBlID09PSAndCc7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXVuaWZvcm1WYWx1ZSB8fCAhdW5pZm9ybVZhbHVlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlID0gcGxhY2Vob2xkZXJUZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgLy8gV2hlbiBiaW5kaW5nIHR3byBtYXRlcmlhbHMgd2l0aCB0aGUgc2FtZSBzaGFkZXJcclxuICAgICAgICAgICAgLy8gTWFueSB1bmlmb3JtcyB3aWxsIGJlIGJlIHNldCB0d2ljZSBldmVuIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSB2YWx1ZVxyXG4gICAgICAgICAgICAvLyBTbyBhZGQgYSBldmFsdWF0aW9uIHRvIHNlZSBpZiB0aGUgdW5pZm9ybSBpcyByZWFsbHkgbmVlZGVkIHRvIGJlIHNldFxyXG4gICAgICAgICAgICBpZiAocHJldk1hdGVyaWFsICYmIHNhbWVQcm9ncmFtKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJldlVuaWZvcm1WYWx1ZSA9IGdldFVuaWZvcm1WYWx1ZShwcmV2UmVuZGVyYWJsZSwgcHJldk1hdGVyaWFsLCBzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzVGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJldlVuaWZvcm1WYWx1ZSB8fCAhcHJldlVuaWZvcm1WYWx1ZS5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2VW5pZm9ybVZhbHVlID0gcGxhY2Vob2xkZXJUZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocHJldlVuaWZvcm1WYWx1ZSA9PT0gdW5pZm9ybVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGlsbCB0YWtlIHRoZSBzbG90IHRvIG1ha2Ugc3VyZSBzYW1lIHRleHR1cmUgaW4gZGlmZmVyZW50IG1hdGVyaWFscyBoYXZlIHNhbWUgc2xvdC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS50YWtlQ3VycmVudFRleHR1cmVTbG90KHRoaXMsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh1bmlmb3JtVHlwZSA9PT0gJ3R2JyAmJiB1bmlmb3JtVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmlmb3JtVmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdCh0aGlzLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHVuaWZvcm1WYWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1RleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVmFsdWUuX19zbG90IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzbG90ID0gcHJvZ3JhbS5jdXJyZW50VGV4dHVyZVNsb3QoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzID0gcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFpJywgc3ltYm9sLCBzbG90KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7IC8vIFRleHR1cmUgdW5pZm9ybSBpcyBlbmFibGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdCh0aGlzLCB1bmlmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWUuX19zbG90ID0gc2xvdDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBNdWx0aXBsZSB1bmlmb3JtIHVzZSBzYW1lIHRleHR1cmUuLlxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFpJywgc3ltYm9sLCB1bmlmb3JtVmFsdWUuX19zbG90KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHVuaWZvcm1WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVmFsdWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBUZXh0dXJlIEFycmF5XHJcbiAgICAgICAgICAgICAgICBpZiAodW5pZm9ybVR5cGUgPT09ICd0dicpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2dyYW0uaGFzVW5pZm9ybShzeW1ib2wpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybVZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdW5pZm9ybVZhbHVlW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUuX19zbG90IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNsb3QgPSBwcm9ncmFtLmN1cnJlbnRUZXh0dXJlU2xvdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goc2xvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnRha2VDdXJyZW50VGV4dHVyZVNsb3QodGhpcywgdGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLl9fc2xvdCA9IHNsb3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0ZXh0dXJlLl9fc2xvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShfZ2wsICcxaXYnLCBzeW1ib2wsIGFycik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCB1bmlmb3JtLnR5cGUsIHN5bWJvbCwgdW5pZm9ybVZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgdW5pZm9ybS50eXBlLCBzeW1ib2wsIHVuaWZvcm1WYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5ld1Nsb3QgPSBwcm9ncmFtLmN1cnJlbnRUZXh0dXJlU2xvdCgpO1xyXG4gICAgICAgIC8vIFRleHR1cmUgc2xvdCBtYXliZSB1c2VkIG91dCBvZiBtYXRlcmlhbC5cclxuICAgICAgICBwcm9ncmFtLnJlc2V0VGV4dHVyZVNsb3QoY3VycmVudFRleHR1cmVTbG90KTtcclxuICAgICAgICByZXR1cm4gbmV3U2xvdDtcclxuICAgIH0sXHJcblxyXG4gICAgX2JpbmRWQU86IGZ1bmN0aW9uICh2YW9FeHQsIHNoYWRlciwgZ2VvbWV0cnksIHByb2dyYW0pIHtcclxuICAgICAgICB2YXIgaXNTdGF0aWMgPSAhZ2VvbWV0cnkuZHluYW1pYztcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuXHJcbiAgICAgICAgdmFyIHZhb0lkID0gdGhpcy5fX3VpZF9fICsgJy0nICsgcHJvZ3JhbS5fX3VpZF9fO1xyXG4gICAgICAgIHZhciB2YW8gPSBnZW9tZXRyeS5fX3Zhb0NhY2hlW3Zhb0lkXTtcclxuICAgICAgICBpZiAoIXZhbykge1xyXG4gICAgICAgICAgICB2YXIgY2h1bmtzID0gZ2VvbWV0cnkuZ2V0QnVmZmVyQ2h1bmtzKHRoaXMpO1xyXG4gICAgICAgICAgICBpZiAoIWNodW5rcyB8fCAhY2h1bmtzLmxlbmd0aCkgeyAgLy8gRW1wdHkgbWVzaFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjaHVuayA9IGNodW5rc1swXTtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUJ1ZmZlcnMgPSBjaHVuay5hdHRyaWJ1dGVCdWZmZXJzO1xyXG4gICAgICAgICAgICB2YXIgaW5kaWNlc0J1ZmZlciA9IGNodW5rLmluZGljZXNCdWZmZXI7XHJcblxyXG4gICAgICAgICAgICB2YXIgYXZhaWxhYmxlQXR0cmlidXRlcyA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgYXZhaWxhYmxlQXR0cmlidXRlU3ltYm9scyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGF0dHJpYnV0ZUJ1ZmZlcnMubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVCdWZmZXJJbmZvID0gYXR0cmlidXRlQnVmZmVyc1thXTtcclxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlQnVmZmVySW5mby5uYW1lO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlbWFudGljID0gYXR0cmlidXRlQnVmZmVySW5mby5zZW1hbnRpYztcclxuICAgICAgICAgICAgICAgIHZhciBzeW1ib2w7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWNJbmZvID0gc2hhZGVyLmF0dHJpYnV0ZVNlbWFudGljc1tzZW1hbnRpY107XHJcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sID0gc2VtYW50aWNJbmZvICYmIHNlbWFudGljSW5mby5zeW1ib2w7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzeW1ib2wgPSBuYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHN5bWJvbCAmJiBwcm9ncmFtLmF0dHJpYnV0ZXNbc3ltYm9sXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUF0dHJpYnV0ZXMucHVzaChhdHRyaWJ1dGVCdWZmZXJJbmZvKTtcclxuICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzLnB1c2goc3ltYm9sKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFvID0gbmV3IFZlcnRleEFycmF5T2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgIGF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMsXHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzQnVmZmVyXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNTdGF0aWMpIHtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5Ll9fdmFvQ2FjaGVbdmFvSWRdID0gdmFvO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbmVlZHNCaW5kQXR0cmlidXRlcyA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSB2ZXJ0ZXggb2JqZWN0IGFycmF5IGNvc3QgYSBsb3RcclxuICAgICAgICAvLyBTbyB3ZSBkb24ndCB1c2UgaXQgb24gdGhlIGR5bmFtaWMgb2JqZWN0XHJcbiAgICAgICAgaWYgKHZhb0V4dCAmJiBpc1N0YXRpYykge1xyXG4gICAgICAgICAgICAvLyBVc2UgdmVydGV4IGFycmF5IG9iamVjdFxyXG4gICAgICAgICAgICAvLyBodHRwOi8vYmxvZy50b2ppY29kZS5jb20vMjAxMi8xMC9vZXN2ZXJ0ZXhhcnJheW9iamVjdC1leHRlbnNpb24uaHRtbFxyXG4gICAgICAgICAgICBpZiAodmFvLnZhbyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YW8udmFvID0gdmFvRXh0LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuZWVkc0JpbmRBdHRyaWJ1dGVzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFvRXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh2YW8udmFvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBhdmFpbGFibGVBdHRyaWJ1dGVzID0gdmFvLmF2YWlsYWJsZUF0dHJpYnV0ZXM7XHJcbiAgICAgICAgdmFyIGluZGljZXNCdWZmZXIgPSB2YW8uaW5kaWNlc0J1ZmZlcjtcclxuXHJcbiAgICAgICAgaWYgKG5lZWRzQmluZEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgdmFyIGxvY2F0aW9uTGlzdCA9IHByb2dyYW0uZW5hYmxlQXR0cmlidXRlcyh0aGlzLCB2YW8uYXZhaWxhYmxlQXR0cmlidXRlU3ltYm9scywgKHZhb0V4dCAmJiBpc1N0YXRpYyAmJiB2YW8pKTtcclxuICAgICAgICAgICAgLy8gU2V0dGluZyBhdHRyaWJ1dGVzO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGF2YWlsYWJsZUF0dHJpYnV0ZXMubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGxvY2F0aW9uTGlzdFthXTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVCdWZmZXJJbmZvID0gYXZhaWxhYmxlQXR0cmlidXRlc1thXTtcclxuICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLmJ1ZmZlcjtcclxuICAgICAgICAgICAgICAgIHZhciBzaXplID0gYXR0cmlidXRlQnVmZmVySW5mby5zaXplO1xyXG4gICAgICAgICAgICAgICAgdmFyIGdsVHlwZSA9IGF0dHJpYnV0ZUJ1ZmZlclR5cGVNYXBbYXR0cmlidXRlQnVmZmVySW5mby50eXBlXSB8fCBfZ2wuRkxPQVQ7XHJcblxyXG4gICAgICAgICAgICAgICAgX2dsLmJpbmRCdWZmZXIoX2dsLkFSUkFZX0JVRkZFUiwgYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIF9nbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGxvY2F0aW9uLCBzaXplLCBnbFR5cGUsIGZhbHNlLCAwLCAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGdlb21ldHJ5LmlzVXNlSW5kaWNlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlcihfZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGluZGljZXNCdWZmZXIuYnVmZmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZhbztcclxuICAgIH0sXHJcblxyXG4gICAgcmVuZGVyUHJlWjogZnVuY3Rpb24gKGxpc3QsIHNjZW5lLCBjYW1lcmEpIHtcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuICAgICAgICB2YXIgcHJlWlBhc3NNYXRlcmlhbCA9IHRoaXMuX3ByZXpNYXRlcmlhbCB8fCBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5wcmV6LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnByZXouZnJhZ21lbnQnKSlcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9wcmV6TWF0ZXJpYWwgPSBwcmVaUGFzc01hdGVyaWFsO1xyXG5cclxuICAgICAgICBfZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG5cclxuICAgICAgICAvLyBTdGF0dXNcclxuICAgICAgICB0aGlzLnJlbmRlclBhc3MobGlzdCwgY2FtZXJhLCB7XHJcbiAgICAgICAgICAgIGlmUmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICFyZW5kZXJhYmxlLmlnbm9yZVByZVo7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGlzTWF0ZXJpYWxDaGFuZ2VkOiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgcHJldlJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRBID0gcmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRCID0gcHJldlJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWF0QS5nZXQoJ2RpZmZ1c2VNYXAnKSAhPT0gbWF0Qi5nZXQoJ2RpZmZ1c2VNYXAnKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IChtYXRBLmdldCgnYWxwaGFDdXRvZmYnKSB8fCAwKSAhPT0gKG1hdEIuZ2V0KCdhbHBoYUN1dG9mZicpIHx8IDApO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnZXRVbmlmb3JtOiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgZGVwdGhNYXRlcmlhbCwgc3ltYm9sKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3ltYm9sID09PSAnYWxwaGFNYXAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdkaWZmdXNlTWFwJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdhbHBoYUN1dG9mZicpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5tYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgnZGlmZnVzZU1hcCcpXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbHBoYUN1dG9mZiA9IHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdhbHBoYUN1dG9mZicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxwaGFDdXRvZmYgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd1dlJlcGVhdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ3V2UmVwZWF0Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd1dk9mZnNldCcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ3V2T2Zmc2V0Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVwdGhNYXRlcmlhbC5nZXQoc3ltYm9sKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcmVaUGFzc01hdGVyaWFsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzb3J0OiB0aGlzLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIF9nbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgX2dsLmRlcHRoTWFzayh0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdpdmVuIHNjZW5lLCBpbmNsdWRpbmcgYWxsIGdlb21ldHJpcywgdGV4dHVyZXMgYW5kIHNoYWRlcnMgaW4gdGhlIHNjZW5lXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuU2NlbmV9IHNjZW5lXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VTY2VuZTogZnVuY3Rpb24oc2NlbmUpIHtcclxuICAgICAgICB0aGlzLmRpc3Bvc2VOb2RlKHNjZW5lLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICBzY2VuZS5kaXNwb3NlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBnaXZlbiBub2RlLCBpbmNsdWRpbmcgYWxsIGdlb21ldHJpZXMsIHRleHR1cmVzIGFuZCBzaGFkZXJzIGF0dGFjaGVkIG9uIGl0IG9yIGl0cyBkZXNjZW5kYW50XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZGlzcG9zZUdlb21ldHJ5PWZhbHNlXSBJZiBkaXNwb3NlIHRoZSBnZW9tZXRyaWVzIHVzZWQgaW4gdGhlIGRlc2NlbmRhbnQgbWVzaFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZGlzcG9zZVRleHR1cmU9ZmFsc2VdIElmIGRpc3Bvc2UgdGhlIHRleHR1cmVzIHVzZWQgaW4gdGhlIGRlc2NlbmRhbnQgbWVzaFxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlTm9kZTogZnVuY3Rpb24ocm9vdCwgZGlzcG9zZUdlb21ldHJ5LCBkaXNwb3NlVGV4dHVyZSkge1xyXG4gICAgICAgIC8vIERldHRhY2hlZCBmcm9tIHBhcmVudFxyXG4gICAgICAgIGlmIChyb290LmdldFBhcmVudCgpKSB7XHJcbiAgICAgICAgICAgIHJvb3QuZ2V0UGFyZW50KCkucmVtb3ZlKHJvb3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGlzcG9zZWRNYXAgPSB7fTtcclxuICAgICAgICByb290LnRyYXZlcnNlKGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gbm9kZS5tYXRlcmlhbDtcclxuICAgICAgICAgICAgaWYgKG5vZGUuZ2VvbWV0cnkgJiYgZGlzcG9zZUdlb21ldHJ5KSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLmdlb21ldHJ5LmRpc3Bvc2UodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRpc3Bvc2VUZXh0dXJlICYmIG1hdGVyaWFsICYmICFkaXNwb3NlZE1hcFttYXRlcmlhbC5fX3VpZF9fXSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRleHR1cmVVbmlmb3JtcyA9IG1hdGVyaWFsLmdldFRleHR1cmVVbmlmb3JtcygpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPCB0ZXh0dXJlVW5pZm9ybXMubGVuZ3RoOyB1KyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdW5pZm9ybU5hbWUgPSB0ZXh0dXJlVW5pZm9ybXNbdV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IG1hdGVyaWFsLnVuaWZvcm1zW3VuaWZvcm1OYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdW5pZm9ybVR5cGUgPSBtYXRlcmlhbC51bmlmb3Jtc1t1bmlmb3JtTmFtZV0udHlwZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1UeXBlID09PSAndCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsLmRpc3Bvc2UgJiYgdmFsLmRpc3Bvc2UodGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVuaWZvcm1UeXBlID09PSAndHYnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdmFsLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsW2tdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsW2tdLmRpc3Bvc2UgJiYgdmFsW2tdLmRpc3Bvc2UodGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkaXNwb3NlZE1hcFttYXRlcmlhbC5fX3VpZF9fXSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUGFydGljbGUgc3lzdGVtIGFuZCBBbWJpZW50Q3ViZW1hcCBsaWdodCBuZWVkIHRvIGRpc3Bvc2VcclxuICAgICAgICAgICAgaWYgKG5vZGUuZGlzcG9zZSkge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5kaXNwb3NlKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBnaXZlbiBnZW9tZXRyeVxyXG4gICAgICogQHBhcmFtIHtjbGF5Lkdlb21ldHJ5fSBnZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlR2VvbWV0cnk6IGZ1bmN0aW9uKGdlb21ldHJ5KSB7XHJcbiAgICAgICAgZ2VvbWV0cnkuZGlzcG9zZSh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdpdmVuIHRleHR1cmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5UZXh0dXJlfSB0ZXh0dXJlXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VUZXh0dXJlOiBmdW5jdGlvbih0ZXh0dXJlKSB7XHJcbiAgICAgICAgdGV4dHVyZS5kaXNwb3NlKHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgZ2l2ZW4gZnJhbWUgYnVmZmVyXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuRnJhbWVCdWZmZXJ9IGZyYW1lQnVmZmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VGcmFtZUJ1ZmZlcjogZnVuY3Rpb24oZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICBmcmFtZUJ1ZmZlci5kaXNwb3NlKHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IHNjcmVlbiBjb29yZHMgdG8gbm9ybWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMoTkRDKVxyXG4gICAgICogU2NyZWVuIGNvb3JkcyBjYW4gZ2V0IGZyb20gbW91c2UgZXZlbnQsIGl0IGlzIHBvc2l0aW9uZWQgcmVsYXRpdmUgdG8gY2FudmFzIGVsZW1lbnRcclxuICAgICAqIE5EQyBjYW4gYmUgdXNlZCBpbiByYXkgY2FzdGluZyB3aXRoIENhbWVyYS5wcm90b3R5cGUuY2FzdFJheSBtZXRob2RzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgICAgICB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgICAgIHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gW291dF1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgc2NyZWVuVG9OREM6IGZ1bmN0aW9uKHgsIHksIG91dCkge1xyXG4gICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEludmVydCB5O1xyXG4gICAgICAgIHkgPSB0aGlzLl9oZWlnaHQgLSB5O1xyXG5cclxuICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xyXG4gICAgICAgIHZhciBhcnIgPSBvdXQuYXJyYXk7XHJcbiAgICAgICAgYXJyWzBdID0gKHggLSB2aWV3cG9ydC54KSAvIHZpZXdwb3J0LndpZHRoO1xyXG4gICAgICAgIGFyclswXSA9IGFyclswXSAqIDIgLSAxO1xyXG4gICAgICAgIGFyclsxXSA9ICh5IC0gdmlld3BvcnQueSkgLyB2aWV3cG9ydC5oZWlnaHQ7XHJcbiAgICAgICAgYXJyWzFdID0gYXJyWzFdICogMiAtIDE7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIE9wYXF1ZSByZW5kZXJhYmxlcyBjb21wYXJlIGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyYWJsZX0geFxyXG4gKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmFibGV9IHlcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICogQHN0YXRpY1xyXG4gKi9cclxuUmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmUgPSBSZW5kZXJlci5wcm90b3R5cGUub3BhcXVlU29ydENvbXBhcmUgPSBmdW5jdGlvbih4LCB5KSB7XHJcbiAgICAvLyBQcmlvcml0eSByZW5kZXJPcmRlciAtPiBwcm9ncmFtIC0+IG1hdGVyaWFsIC0+IGdlb21ldHJ5XHJcbiAgICBpZiAoeC5yZW5kZXJPcmRlciA9PT0geS5yZW5kZXJPcmRlcikge1xyXG4gICAgICAgIGlmICh4Ll9fcHJvZ3JhbSA9PT0geS5fX3Byb2dyYW0pIHtcclxuICAgICAgICAgICAgaWYgKHgubWF0ZXJpYWwgPT09IHkubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB4Lmdlb21ldHJ5Ll9fdWlkX18gLSB5Lmdlb21ldHJ5Ll9fdWlkX187XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHgubWF0ZXJpYWwuX191aWRfXyAtIHkubWF0ZXJpYWwuX191aWRfXztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHguX19wcm9ncmFtICYmIHkuX19wcm9ncmFtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4Ll9fcHJvZ3JhbS5fX3VpZF9fIC0geS5fX3Byb2dyYW0uX191aWRfXztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geC5yZW5kZXJPcmRlciAtIHkucmVuZGVyT3JkZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNwYXJlbnQgcmVuZGVyYWJsZXMgY29tcGFyZSBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmFibGV9IGFcclxuICogQHBhcmFtICB7Y2xheS5SZW5kZXJhYmxlfSBiXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAqIEBzdGF0aWNcclxuICovXHJcblJlbmRlcmVyLnRyYW5zcGFyZW50U29ydENvbXBhcmUgPSBSZW5kZXJlci5wcm90b3R5cGUudHJhbnNwYXJlbnRTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uKHgsIHkpIHtcclxuICAgIC8vIFByaW9yaXR5IHJlbmRlck9yZGVyIC0+IGRlcHRoIC0+IHByb2dyYW0gLT4gbWF0ZXJpYWwgLT4gZ2VvbWV0cnlcclxuXHJcbiAgICBpZiAoeC5yZW5kZXJPcmRlciA9PT0geS5yZW5kZXJPcmRlcikge1xyXG4gICAgICAgIGlmICh4Ll9fZGVwdGggPT09IHkuX19kZXB0aCkge1xyXG4gICAgICAgICAgICBpZiAoeC5fX3Byb2dyYW0gPT09IHkuX19wcm9ncmFtKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeC5tYXRlcmlhbCA9PT0geS5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4Lmdlb21ldHJ5Ll9fdWlkX18gLSB5Lmdlb21ldHJ5Ll9fdWlkX187XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geC5tYXRlcmlhbC5fX3VpZF9fIC0geS5tYXRlcmlhbC5fX3VpZF9fO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh4Ll9fcHJvZ3JhbSAgJiYgeS5fX3Byb2dyYW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB4Ll9fcHJvZ3JhbS5fX3VpZF9fIC0geS5fX3Byb2dyYW0uX191aWRfXztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRGVwdGggaXMgbmVnYXRpdmVcclxuICAgICAgICAvLyBTbyBmYXJ0aGVyIG9iamVjdCBoYXMgc21hbGxlciBkZXB0aCB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB4Ll9fZGVwdGggLSB5Ll9fZGVwdGg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geC5yZW5kZXJPcmRlciAtIHkucmVuZGVyT3JkZXI7XHJcbn07XHJcblxyXG4vLyBUZW1wb3JhcnkgdmFyaWFibGVzXHJcbnZhciBtYXRyaWNlcyA9IHtcclxuICAgIElERU5USVRZOiBtYXQ0Q3JlYXRlKCksXHJcblxyXG4gICAgV09STEQ6IG1hdDRDcmVhdGUoKSxcclxuICAgIFZJRVc6IG1hdDRDcmVhdGUoKSxcclxuICAgIFBST0pFQ1RJT046IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFVzogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV1BST0pFQ1RJT046IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFV1BST0pFQ1RJT046IG1hdDRDcmVhdGUoKSxcclxuXHJcbiAgICBXT1JMRElOVkVSU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFZJRVdJTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBQUk9KRUNUSU9OSU5WRVJTRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgV09STERWSUVXSU5WRVJTRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV1BST0pFQ1RJT05JTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRTogbWF0NENyZWF0ZSgpLFxyXG5cclxuICAgIFdPUkxEVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBWSUVXVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBQUk9KRUNUSU9OVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFZJRVdQUk9KRUNUSU9OVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdQUk9KRUNUSU9OVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRElOVkVSU0VUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFZJRVdJTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgV09STERWSUVXSU5WRVJTRVRSQU5TUE9TRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV1BST0pFQ1RJT05JTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRTogbWF0NENyZWF0ZSgpXHJcbn07XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5SZW5kZXJlci5DT0xPUl9CVUZGRVJfQklUXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJlci5DT0xPUl9CVUZGRVJfQklUID0gZ2xlbnVtLkNPTE9SX0JVRkZFUl9CSVQ7XHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LlJlbmRlcmVyLkRFUFRIX0JVRkZFUl9CSVRcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmVyLkRFUFRIX0JVRkZFUl9CSVQgPSBnbGVudW0uREVQVEhfQlVGRkVSX0JJVDtcclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuUmVuZGVyZXIuU1RFTkNJTF9CVUZGRVJfQklUXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJlci5TVEVOQ0lMX0JVRkZFUl9CSVQgPSBnbGVudW0uU1RFTkNJTF9CVUZGRVJfQklUO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUmVuZGVyZXI7XHJcbiIsImltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5WZWN0b3IzXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB6XHJcbiAqL1xyXG52YXIgVmVjdG9yMyA9IGZ1bmN0aW9uKHgsIHksIHopIHtcclxuXHJcbiAgICB4ID0geCB8fCAwO1xyXG4gICAgeSA9IHkgfHwgMDtcclxuICAgIHogPSB6IHx8IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIFZlY3RvcjMsIHJlYWQgYW5kIHdyaXRlIG9mIHgsIHksIHogd2lsbCBjaGFuZ2UgdGhlIHZhbHVlcyBpbiBhcnJheVxyXG4gICAgICogQWxsIG1ldGhvZHMgYWxzbyBvcGVyYXRlIG9uIHRoZSBhcnJheSBpbnN0ZWFkIG9mIHgsIHksIHogY29tcG9uZW50c1xyXG4gICAgICogQG5hbWUgYXJyYXlcclxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzI1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFycmF5ID0gdmVjMy5mcm9tVmFsdWVzKHgsIHksIHopO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlydHkgZmxhZyBpcyB1c2VkIGJ5IHRoZSBOb2RlIHRvIGRldGVybWluZVxyXG4gICAgICogaWYgdGhlIG1hdHJpeCBpcyB1cGRhdGVkIHRvIGxhdGVzdFxyXG4gICAgICogQG5hbWUgX2RpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjMjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcblZlY3RvcjMucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBWZWN0b3IzLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGIgdG8gc2VsZlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICB2ZWMzLmFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50c1xyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgelxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh4LCB5LCB6KSB7XHJcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IHg7XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IHk7XHJcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IHo7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB4LCB5IGFuZCB6IGNvbXBvbmVudHMgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0gYXJyWzBdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSBhcnJbMV07XHJcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IGFyclsyXTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IFZlY3RvcjNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjModGhpcy54LCB0aGlzLnksIHRoaXMueik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3Jvc3MgcHJvZHVjdCBvZiBzZWxmIGFuZCBiLCB3cml0dGVuIHRvIGEgVmVjdG9yMyBvdXRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGNyb3NzOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgIHZlYzMuY3Jvc3ModGhpcy5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBkaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3Q6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMuZGlzdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXN0YW5jZSBiZXR3ZWVuIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkaXN0YW5jZTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5kaXN0YW5jZSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgZGl2aWRlXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgZGl2OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuZGl2KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXZpZGUgc2VsZiBieSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgZGl2aWRlOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuZGl2aWRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEb3QgcHJvZHVjdCBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZG90OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLmRvdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBvZiBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMubGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLmxlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIExpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgbGVycDogZnVuY3Rpb24gKGEsIGIsIHQpIHtcclxuICAgICAgICB2ZWMzLmxlcnAodGhpcy5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgdCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1pbmltdW0gb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIG1pbjogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICB2ZWMzLm1pbih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWF4aW11bSBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgbWF4OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMubWF4KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBtdWw6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11dGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5lZ2F0ZSBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIG5lZ2F0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZlYzMubmVnYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWxpemUgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2ZWMzLm5vcm1hbGl6ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgcmFuZG9tIHgsIHksIHogY29tcG9uZW50cyB3aXRoIGEgZ2l2ZW4gc2NhbGVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gc2NhbGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgcmFuZG9tOiBmdW5jdGlvbiAoc2NhbGUpIHtcclxuICAgICAgICB2ZWMzLnJhbmRvbSh0aGlzLmFycmF5LCBzY2FsZSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHNlbGZcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbiAocykge1xyXG4gICAgICAgIHZlYzMuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIGIgYW5kIGFkZCB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlQW5kQWRkOiBmdW5jdGlvbiAoYiwgcykge1xyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSwgcyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkRGlzdGFuY2VcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXJEaXN0OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLnNxckRpc3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXVhcmVkRGlzdGFuY2U6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMuc3F1YXJlZERpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkTGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckxlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLnNxckxlbih0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcXVhcmVkIGxlbmd0aCBvZiBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxdWFyZWRMZW5ndGg6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5zcXVhcmVkTGVuZ3RoKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzdWJ0cmFjdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHN1YjogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICB2ZWMzLnN1Yih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgYiBmcm9tIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBzdWJ0cmFjdDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICB2ZWMzLnN1YnRyYWN0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4MyBtXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtTWF0MzogZnVuY3Rpb24gKG0pIHtcclxuICAgICAgICB2ZWMzLnRyYW5zZm9ybU1hdDModGhpcy5hcnJheSwgdGhpcy5hcnJheSwgbS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXg0IG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQ0OiBmdW5jdGlvbiAobSkge1xyXG4gICAgICAgIHZlYzMudHJhbnNmb3JtTWF0NCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgUXVhdGVybmlvbiBxXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtUXVhdDogZnVuY3Rpb24gKHEpIHtcclxuICAgICAgICB2ZWMzLnRyYW5zZm9ybVF1YXQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYXNuZm9ybSBzZWxmIGludG8gcHJvamVjdGlvbiBzcGFjZSB3aXRoIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBhcHBseVByb2plY3Rpb246IGZ1bmN0aW9uIChtKSB7XHJcbiAgICAgICAgdmFyIHYgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgIG0gPSBtLmFycmF5O1xyXG5cclxuICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9uXHJcbiAgICAgICAgaWYgKG1bMTVdID09PSAwKSB7XHJcbiAgICAgICAgICAgIHZhciB3ID0gLTEgLyB2WzJdO1xyXG4gICAgICAgICAgICB2WzBdID0gbVswXSAqIHZbMF0gKiB3O1xyXG4gICAgICAgICAgICB2WzFdID0gbVs1XSAqIHZbMV0gKiB3O1xyXG4gICAgICAgICAgICB2WzJdID0gKG1bMTBdICogdlsyXSArIG1bMTRdKSAqIHc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2WzBdID0gbVswXSAqIHZbMF0gKyBtWzEyXTtcclxuICAgICAgICAgICAgdlsxXSA9IG1bNV0gKiB2WzFdICsgbVsxM107XHJcbiAgICAgICAgICAgIHZbMl0gPSBtWzEwXSAqIHZbMl0gKyBtWzE0XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgZXVsZXJGcm9tUXVhdDogZnVuY3Rpb24ocSwgb3JkZXIpIHtcclxuICAgICAgICBWZWN0b3IzLmV1bGVyRnJvbVF1YXQodGhpcywgcSwgb3JkZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBldWxlckZyb21NYXQzOiBmdW5jdGlvbiAobSwgb3JkZXIpIHtcclxuICAgICAgICBWZWN0b3IzLmV1bGVyRnJvbU1hdDModGhpcywgbSwgb3JkZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuICdbJyArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwodGhpcy5hcnJheSwgJywnKSArICddJztcclxuICAgIH0sXHJcblxyXG4gICAgdG9BcnJheTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcclxuLy8gR2V0dGVyIGFuZCBTZXR0ZXJcclxuaWYgKGRlZmluZVByb3BlcnR5KSB7XHJcblxyXG4gICAgdmFyIHByb3RvID0gVmVjdG9yMy5wcm90b3R5cGU7XHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd4Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVswXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgeVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB6XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneicsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMl07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzJdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuXHJcbi8vIFN1cHBseSBtZXRob2RzIHRoYXQgYXJlIG5vdCBpbiBwbGFjZVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5hZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzMuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHpcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHopIHtcclxuICAgIHZlYzMuc2V0KG91dC5hcnJheSwgeCwgeSwgeik7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5jb3B5ID0gZnVuY3Rpb24ob3V0LCBiKSB7XHJcbiAgICB2ZWMzLmNvcHkob3V0LmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMuY3Jvc3MgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzMuY3Jvc3Mob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjMuZGlzdCA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHJldHVybiB2ZWMzLmRpc3RhbmNlKGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjMuZGlzdGFuY2UgPSBWZWN0b3IzLmRpc3Q7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLmRpdiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5kaXZpZGUob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLmRpdmlkZSA9IFZlY3RvcjMuZGl2O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5kb3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMy5kb3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjMubGVuID0gZnVuY3Rpb24oYikge1xyXG4gICAgcmV0dXJuIHZlYzMubGVuZ3RoKGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLy8gVmVjdG9yMy5sZW5ndGggPSBWZWN0b3IzLmxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5sZXJwID0gZnVuY3Rpb24ob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2ZWMzLmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5taW4gPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzMubWluKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5tYXgob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzMubXVsdGlwbHkob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMubXVsdGlwbHkgPSBWZWN0b3IzLm11bDtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMy5uZWdhdGUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMy5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMucmFuZG9tID0gZnVuY3Rpb24ob3V0LCBzY2FsZSkge1xyXG4gICAgdmVjMy5yYW5kb20ob3V0LmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgc2NhbGUpIHtcclxuICAgIHZlYzMuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IzLnNxckRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMy5zcXJEaXN0KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5zcXVhcmVkRGlzdGFuY2UgPSBWZWN0b3IzLnNxckRpc3Q7XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5zcXJMZW4gPSBmdW5jdGlvbihhKSB7XHJcbiAgICByZXR1cm4gdmVjMy5zcXJMZW4oYS5hcnJheSk7XHJcbn07XHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjMuc3F1YXJlZExlbmd0aCA9IFZlY3RvcjMuc3FyTGVuO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5zdWIgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzMuc3VidHJhY3Qob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMuc3VidHJhY3QgPSBWZWN0b3IzLnN1YjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7TWF0cml4M30gbVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnRyYW5zZm9ybU1hdDMgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZlYzMudHJhbnNmb3JtTWF0MyhvdXQuYXJyYXksIGEuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy50cmFuc2Zvcm1NYXQ0ID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2ZWMzLnRyYW5zZm9ybU1hdDQob3V0LmFycmF5LCBhLmFycmF5LCBtLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy50cmFuc2Zvcm1RdWF0ID0gZnVuY3Rpb24ob3V0LCBhLCBxKSB7XHJcbiAgICB2ZWMzLnRyYW5zZm9ybVF1YXQob3V0LmFycmF5LCBhLmFycmF5LCBxLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGNsYW1wKHZhbCwgbWluLCBtYXgpIHtcclxuICAgIHJldHVybiB2YWwgPCBtaW4gPyBtaW4gOiAodmFsID4gbWF4ID8gbWF4IDogdmFsKTtcclxufVxyXG52YXIgYXRhbjIgPSBNYXRoLmF0YW4yO1xyXG52YXIgYXNpbiA9IE1hdGguYXNpbjtcclxudmFyIGFicyA9IE1hdGguYWJzO1xyXG4vKipcclxuICogQ29udmVydCBxdWF0ZXJuaW9uIHRvIGV1bGVyIGFuZ2xlXHJcbiAqIFF1YXRlcm5pb24gbXVzdCBiZSBub3JtYWxpemVkXHJcbiAqIEZyb20gdGhyZWUuanNcclxuICovXHJcblZlY3RvcjMuZXVsZXJGcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEsIG9yZGVyKSB7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHEgPSBxLmFycmF5O1xyXG5cclxuICAgIHZhciB0YXJnZXQgPSBvdXQuYXJyYXk7XHJcbiAgICB2YXIgeCA9IHFbMF0sIHkgPSBxWzFdLCB6ID0gcVsyXSwgdyA9IHFbM107XHJcbiAgICB2YXIgeDIgPSB4ICogeDtcclxuICAgIHZhciB5MiA9IHkgKiB5O1xyXG4gICAgdmFyIHoyID0geiAqIHo7XHJcbiAgICB2YXIgdzIgPSB3ICogdztcclxuXHJcbiAgICB2YXIgb3JkZXIgPSAob3JkZXIgfHwgJ1hZWicpLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgc3dpdGNoIChvcmRlcikge1xyXG4gICAgICAgIGNhc2UgJ1hZWic6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKDIgKiAoeCAqIHcgLSB5ICogeiksICh3MiAtIHgyIC0geTIgKyB6MikpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhc2luKGNsYW1wKDIgKiAoeCAqIHogKyB5ICogdyksIC0gMSwgMSkpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigyICogKHogKiB3IC0geCAqIHkpLCAodzIgKyB4MiAtIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWVhaJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXNpbihjbGFtcCgyICogKHggKiB3IC0geSAqIHopLCAtIDEsIDEpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoMiAqICh4ICogeiArIHkgKiB3KSwgKHcyIC0geDIgLSB5MiArIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKDIgKiAoeCAqIHkgKyB6ICogdyksICh3MiAtIHgyICsgeTIgLSB6MikpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdaWFknOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhc2luKGNsYW1wKDIgKiAoeCAqIHcgKyB5ICogeiksIC0gMSwgMSkpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMigyICogKHkgKiB3IC0geiAqIHgpLCAodzIgLSB4MiAtIHkyICsgejIpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIoMiAqICh6ICogdyAtIHggKiB5KSwgKHcyIC0geDIgKyB5MiAtIHoyKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1pZWCc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKDIgKiAoeCAqIHcgKyB6ICogeSksICh3MiAtIHgyIC0geTIgKyB6MikpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhc2luKGNsYW1wKDIgKiAoeSAqIHcgLSB4ICogeiksIC0gMSwgMSkpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigyICogKHggKiB5ICsgeiAqIHcpLCAodzIgKyB4MiAtIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWVpYJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoMiAqICh4ICogdyAtIHogKiB5KSwgKHcyIC0geDIgKyB5MiAtIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKDIgKiAoeSAqIHcgLSB4ICogeiksICh3MiArIHgyIC0geTIgLSB6MikpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhc2luKGNsYW1wKDIgKiAoeCAqIHkgKyB6ICogdyksIC0gMSwgMSkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdYWlknOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMigyICogKHggKiB3ICsgeSAqIHopLCAodzIgLSB4MiArIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoMiAqICh4ICogeiArIHkgKiB3KSwgKHcyICsgeDIgLSB5MiAtIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGFzaW4oY2xhbXAoMiAqICh6ICogdyAtIHggKiB5KSwgLSAxLCAxKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5rb3duIG9yZGVyOiAnICsgb3JkZXIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHJvdGF0aW9uIG1hdHJpeCB0byBldWxlciBhbmdsZVxyXG4gKiBmcm9tIHRocmVlLmpzXHJcbiAqL1xyXG5WZWN0b3IzLmV1bGVyRnJvbU1hdDMgPSBmdW5jdGlvbiAob3V0LCBtLCBvcmRlcikge1xyXG4gICAgLy8gYXNzdW1lcyB0aGUgdXBwZXIgM3gzIG9mIG0gaXMgYSBwdXJlIHJvdGF0aW9uIG1hdHJpeCAoaS5lLCB1bnNjYWxlZClcclxuICAgIHZhciB0ZSA9IG0uYXJyYXk7XHJcbiAgICB2YXIgbTExID0gdGVbMF0sIG0xMiA9IHRlWzNdLCBtMTMgPSB0ZVs2XTtcclxuICAgIHZhciBtMjEgPSB0ZVsxXSwgbTIyID0gdGVbNF0sIG0yMyA9IHRlWzddO1xyXG4gICAgdmFyIG0zMSA9IHRlWzJdLCBtMzIgPSB0ZVs1XSwgbTMzID0gdGVbOF07XHJcbiAgICB2YXIgdGFyZ2V0ID0gb3V0LmFycmF5O1xyXG5cclxuICAgIHZhciBvcmRlciA9IChvcmRlciB8fCAnWFlaJykudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICBzd2l0Y2ggKG9yZGVyKSB7XHJcbiAgICAgICAgY2FzZSAnWFlaJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXNpbihjbGFtcChtMTMsIC0xLCAxKSk7XHJcbiAgICAgICAgICAgIGlmIChhYnMobTEzKSA8IDAuOTk5OTkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKC1tMjMsIG0zMyk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigtbTEyLCBtMTEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIobTMyLCBtMjIpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWFonOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhc2luKC1jbGFtcChtMjMsIC0xLCAxKSk7XHJcbiAgICAgICAgICAgIGlmIChhYnMobTIzKSA8IDAuOTk5OTkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKG0xMywgbTMzKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKG0yMSwgbTIyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKC1tMzEsIG0xMSk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1pYWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGFzaW4oY2xhbXAobTMyLCAtMSwgMSkpO1xyXG4gICAgICAgICAgICBpZiAoYWJzKG0zMikgPCAwLjk5OTk5KSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMigtbTMxLCBtMzMpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIoLW0xMiwgbTIyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMihtMjEsIG0xMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWllYJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXNpbigtY2xhbXAobTMxLCAtMSwgMSkpO1xyXG4gICAgICAgICAgICBpZiAoYWJzKG0zMSkgPCAwLjk5OTk5KSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMihtMzIsIG0zMyk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMihtMjEsIG0xMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSAwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIoLW0xMiwgbTIyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWlgnOlxyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhc2luKGNsYW1wKG0yMSwgLTEsIDEpKTtcclxuICAgICAgICAgICAgaWYgKGFicyhtMjEpIDwgMC45OTk5OSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoLW0yMywgbTIyKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKC1tMzEsIG0xMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSAwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIobTEzLCBtMzMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1haWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGFzaW4oLWNsYW1wKG0xMiwgLTEsIDEpKTtcclxuICAgICAgICAgICAgaWYgKGFicyhtMTIpIDwgMC45OTk5OSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIobTMyLCBtMjIpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIobTEzLCBtMTEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoLW0yMywgbTMzKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmtvd24gb3JkZXI6ICcgKyBvcmRlcik7XHJcbiAgICB9XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVmVjdG9yMywge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKi9cclxuICAgIFBPU0lUSVZFX1g6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKDEsIDAsIDApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqL1xyXG4gICAgTkVHQVRJVkVfWDoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoLTEsIDAsIDApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqL1xyXG4gICAgUE9TSVRJVkVfWToge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICovXHJcbiAgICBORUdBVElWRV9ZOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLCAtMSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICovXHJcbiAgICBQT1NJVElWRV9aOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLCAwLCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIE5FR0FUSVZFX1o6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKDAsIDAsIC0xKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKi9cclxuICAgIFVQOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLCAxLCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKi9cclxuICAgIFpFUk86IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFZlY3RvcjM7XHJcbiIsImltcG9ydCBxdWF0IGZyb20gJy4uL2dsbWF0cml4L3F1YXQnO1xyXG5pbXBvcnQgbWF0MyBmcm9tICcuLi9nbG1hdHJpeC9tYXQzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuUXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKiBAcGFyYW0ge251bWJlcn0gelxyXG4gKiBAcGFyYW0ge251bWJlcn0gd1xyXG4gKi9cclxudmFyIFF1YXRlcm5pb24gPSBmdW5jdGlvbiAoeCwgeSwgeiwgdykge1xyXG5cclxuICAgIHggPSB4IHx8IDA7XHJcbiAgICB5ID0geSB8fCAwO1xyXG4gICAgeiA9IHogfHwgMDtcclxuICAgIHcgPSB3ID09PSB1bmRlZmluZWQgPyAxIDogdztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JhZ2Ugb2YgUXVhdGVybmlvbiwgcmVhZCBhbmQgd3JpdGUgb2YgeCwgeSwgeiwgdyB3aWxsIGNoYW5nZSB0aGUgdmFsdWVzIGluIGFycmF5XHJcbiAgICAgKiBBbGwgbWV0aG9kcyBhbHNvIG9wZXJhdGUgb24gdGhlIGFycmF5IGluc3RlYWQgb2YgeCwgeSwgeiwgdyBjb21wb25lbnRzXHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlF1YXRlcm5pb24jXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSBxdWF0LmZyb21WYWx1ZXMoeCwgeSwgeiwgdyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXJ0eSBmbGFnIGlzIHVzZWQgYnkgdGhlIE5vZGUgdG8gZGV0ZXJtaW5lXHJcbiAgICAgKiBpZiB0aGUgbWF0cml4IGlzIHVwZGF0ZWQgdG8gbGF0ZXN0XHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuUXVhdGVybmlvbiNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuUXVhdGVybmlvbi5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IFF1YXRlcm5pb24sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYiB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHF1YXQuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIHcgY29tcG9uZW50IGZyb20geCwgeSwgeiBjb21wb25lbnRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgY2FsY3VsYXRlVzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHF1YXQuY2FsY3VsYXRlVyh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50c1xyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgelxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgd1xyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh4LCB5LCB6LCB3KSB7XHJcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IHg7XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IHk7XHJcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IHo7XHJcbiAgICAgICAgdGhpcy5hcnJheVszXSA9IHc7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB4LCB5LCB6IGFuZCB3IGNvbXBvbmVudHMgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0gYXJyWzBdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSBhcnJbMV07XHJcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IGFyclsyXTtcclxuICAgICAgICB0aGlzLmFycmF5WzNdID0gYXJyWzNdO1xyXG5cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgUXVhdGVybmlvblxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUXVhdGVybmlvbih0aGlzLngsIHRoaXMueSwgdGhpcy56LCB0aGlzLncpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGNvbmp1Z2F0ZSBvZiBzZWxmIElmIHRoZSBxdWF0ZXJuaW9uIGlzIG5vcm1hbGl6ZWQsXHJcbiAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIGZhc3RlciB0aGFuIGludmVydCBhbmQgcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgY29uanVnYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcXVhdC5jb25qdWdhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgZnJvbSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICBxdWF0LmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcmV0dXJuIHF1YXQuZG90KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBmcm9tIHRoZSBnaXZlbiAzeDMgcm90YXRpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDM6IGZ1bmN0aW9uIChtKSB7XHJcbiAgICAgICAgcXVhdC5mcm9tTWF0Myh0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gdGhlIGdpdmVuIDR4NCByb3RhdGlvbiBtYXRyaXhcclxuICAgICAqIFRoZSA0dGggY29sdW1uIGFuZCA0dGggcm93IHdpbGwgYmUgZHJvcGVkXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDQ6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG0zID0gbWF0My5jcmVhdGUoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG0pIHtcclxuICAgICAgICAgICAgbWF0My5mcm9tTWF0NChtMywgbS5hcnJheSk7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gTm90IGxpa2UgbWF0NCwgbWF0MyBpbiBnbG1hdHJpeCBzZWVtcyB0byBiZSByb3ctYmFzZWRcclxuICAgICAgICAgICAgbWF0My50cmFuc3Bvc2UobTMsIG0zKTtcclxuICAgICAgICAgICAgcXVhdC5mcm9tTWF0Myh0aGlzLmFycmF5LCBtMyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdG8gaWRlbnRpdHkgcXVhdGVybmlvblxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBpZGVudGl0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHF1YXQuaWRlbnRpdHkodGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0IHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgaW52ZXJ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcXVhdC5pbnZlcnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2YgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBxdWF0Lmxlbih0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGxlbmd0aFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gcXVhdC5sZW5ndGgodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBhIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgdFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBsZXJwOiBmdW5jdGlvbiAoYSwgYiwgdCkge1xyXG4gICAgICAgIHF1YXQubGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgbXVsOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHF1YXQubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgbXVsTGVmdDogZnVuY3Rpb24gKGEpIHtcclxuICAgICAgICBxdWF0Lm11bHRpcGx5KHRoaXMuYXJyYXksIGEuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdXRpcGx5IHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICBxdWF0Lm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdXRpcGx5IGEgYW5kIHNlbGZcclxuICAgICAqIFF1YXRlcm5pb24gbXV0aXBseSBpcyBub3QgY29tbXV0YXRpdmUsIHNvIHRoZSByZXN1bHQgb2YgbXV0aXBseUxlZnQgaXMgZGlmZmVyZW50IHdpdGggbXVsdGlwbHkuXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIHF1YXQubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbGl6ZSBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHF1YXQubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gYXhpc1xyXG4gICAgICogQHBhcmFtIHJhZFxyXG4gICAgICovXHJcbiAgICByb3RhdGVBeGlzOmZ1bmN0aW9uIChheGlzLHJhZCkge1xyXG5cclxuICAgICAgICB2YXIgcXVhdDIgPSBuZXcgUXVhdGVybmlvbigpLmFycmF5O1xyXG5cclxuICAgICAgICBxdWF0LnJvdGF0ZUF4aXModGhpcy5hcnJheSxxdWF0MixheGlzLHJhZCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuIGFib3V0IFggYXhpc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICByb3RhdGVYOiBmdW5jdGlvbiAocmFkKSB7XHJcblxyXG4gICAgICAgIHF1YXQucm90YXRlWCh0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBZIGF4aXNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgcm90YXRlWTogZnVuY3Rpb24gKHJhZCkge1xyXG5cclxuICAgICAgICBxdWF0LnJvdGF0ZVkodGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWiBheGlzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVo6IGZ1bmN0aW9uIChyYWQpIHtcclxuICAgICAgICBxdWF0LnJvdGF0ZVoodGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBzZWxmIHRvIHJlcHJlc2VudCB0aGUgc2hvcnRlc3Qgcm90YXRpb24gZnJvbSBWZWN0b3IzIGEgdG8gVmVjdG9yMyBiLlxyXG4gICAgICogYSBhbmQgYiBuZWVkcyB0byBiZSBub3JtYWxpemVkXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICByb3RhdGlvblRvOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgIHF1YXQucm90YXRpb25Ubyh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHNlbGYgd2l0aCB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gYXhlc1xyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHZpZXdcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSByaWdodFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHVwXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHNldEF4ZXM6IGZ1bmN0aW9uICh2aWV3LCByaWdodCwgdXApIHtcclxuICAgICAgICBxdWF0LnNldEF4ZXModGhpcy5hcnJheSwgdmlldy5hcnJheSwgcmlnaHQuYXJyYXksIHVwLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBzZWxmIHdpdGggYSByb3RhdGlvbiBheGlzIGFuZCByb3RhdGlvbiBhbmdsZVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IGF4aXNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgc2V0QXhpc0FuZ2xlOiBmdW5jdGlvbiAoYXhpcywgcmFkKSB7XHJcbiAgICAgICAgcXVhdC5zZXRBeGlzQW5nbGUodGhpcy5hcnJheSwgYXhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtIHNwaGVyaWNhbCBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGEgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgc2xlcnA6IGZ1bmN0aW9uIChhLCBiLCB0KSB7XHJcbiAgICAgICAgcXVhdC5zbGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWRMZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3FyTGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHF1YXQuc3FyTGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBxdWF0LnNxdWFyZWRMZW5ndGgodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gZXVsZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSB2XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gb3JkZXJcclxuICAgICAqL1xyXG4gICAgZnJvbUV1bGVyOiBmdW5jdGlvbiAodiwgb3JkZXIpIHtcclxuICAgICAgICByZXR1cm4gUXVhdGVybmlvbi5mcm9tRXVsZXIodGhpcywgdiwgb3JkZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XHJcbi8vIEdldHRlciBhbmQgU2V0dGVyXHJcbmlmIChkZWZpbmVQcm9wZXJ0eSkge1xyXG5cclxuICAgIHZhciBwcm90byA9IFF1YXRlcm5pb24ucHJvdG90eXBlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuUXVhdGVybmlvblxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneCcsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMF07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzBdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHlcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5RdWF0ZXJuaW9uXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd5Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVsxXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgelxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlF1YXRlcm5pb25cclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3onLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzJdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsyXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB3XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuUXVhdGVybmlvblxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAndycsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbM107XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzNdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuLy8gU3VwcGx5IG1ldGhvZHMgdGhhdCBhcmUgbm90IGluIHBsYWNlXHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmFkZCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIHF1YXQuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgeFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICB5XHJcbiAqIEBwYXJhbSAge251bWJlcn0gICAgIHpcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgd1xyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnNldCA9IGZ1bmN0aW9uIChvdXQsIHgsIHksIHosIHcpIHtcclxuICAgIHF1YXQuc2V0KG91dC5hcnJheSwgeCwgeSwgeiwgdyk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5jb3B5ID0gZnVuY3Rpb24gKG91dCwgYikge1xyXG4gICAgcXVhdC5jb3B5KG91dC5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uY2FsY3VsYXRlVyA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIHF1YXQuY2FsY3VsYXRlVyhvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmNvbmp1Z2F0ZSA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIHF1YXQuY29uanVnYXRlKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5pZGVudGl0eSA9IGZ1bmN0aW9uIChvdXQpIHtcclxuICAgIHF1YXQuaWRlbnRpdHkob3V0LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5pbnZlcnQgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBxdWF0LmludmVydChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuUXVhdGVybmlvbi5kb3QgPSBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgcmV0dXJuIHF1YXQuZG90KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmxlbiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4gcXVhdC5sZW5ndGgoYS5hcnJheSk7XHJcbn07XHJcblxyXG4vLyBRdWF0ZXJuaW9uLmxlbmd0aCA9IFF1YXRlcm5pb24ubGVuO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgdFxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmxlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICBxdWF0LmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gICAgIHRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5zbGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcclxuICAgIHF1YXQuc2xlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ubXVsID0gZnVuY3Rpb24gKG91dCwgYSwgYikge1xyXG4gICAgcXVhdC5tdWx0aXBseShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ubXVsdGlwbHkgPSBRdWF0ZXJuaW9uLm11bDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ucm90YXRlWCA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgcXVhdC5yb3RhdGVYKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ucm90YXRlWSA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgcXVhdC5yb3RhdGVZKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ucm90YXRlWiA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgcXVhdC5yb3RhdGVaKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICAgIGF4aXNcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uc2V0QXhpc0FuZ2xlID0gZnVuY3Rpb24gKG91dCwgYXhpcywgcmFkKSB7XHJcbiAgICBxdWF0LnNldEF4aXNBbmdsZShvdXQuYXJyYXksIGF4aXMuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ubm9ybWFsaXplID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgcXVhdC5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuUXVhdGVybmlvbi5zcXJMZW4gPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgcmV0dXJuIHF1YXQuc3FyTGVuKGEuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuUXVhdGVybmlvbi5zcXVhcmVkTGVuZ3RoID0gUXVhdGVybmlvbi5zcXJMZW47XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSAgICBtXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uZnJvbU1hdDMgPSBmdW5jdGlvbiAob3V0LCBtKSB7XHJcbiAgICBxdWF0LmZyb21NYXQzKG91dC5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICB2aWV3XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gICAgcmlnaHRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICB1cFxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnNldEF4ZXMgPSBmdW5jdGlvbiAob3V0LCB2aWV3LCByaWdodCwgdXApIHtcclxuICAgIHF1YXQuc2V0QXhlcyhvdXQuYXJyYXksIHZpZXcuYXJyYXksIHJpZ2h0LmFycmF5LCB1cC5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gICAgYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnJvdGF0aW9uVG8gPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICBxdWF0LnJvdGF0aW9uVG8ob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgcXVhdGVybmlvbiBmcm9tIGV1bGVyXHJcbiAqIEBwYXJhbSB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHZcclxuICogQHBhcmFtIHtTdHJpbmd9IG9yZGVyXHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmZyb21FdWxlciA9IGZ1bmN0aW9uIChvdXQsIHYsIG9yZGVyKSB7XHJcblxyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgdiA9IHYuYXJyYXk7XHJcbiAgICB2YXIgdGFyZ2V0ID0gb3V0LmFycmF5O1xyXG4gICAgdmFyIGMxID0gTWF0aC5jb3ModlswXSAvIDIpO1xyXG4gICAgdmFyIGMyID0gTWF0aC5jb3ModlsxXSAvIDIpO1xyXG4gICAgdmFyIGMzID0gTWF0aC5jb3ModlsyXSAvIDIpO1xyXG4gICAgdmFyIHMxID0gTWF0aC5zaW4odlswXSAvIDIpO1xyXG4gICAgdmFyIHMyID0gTWF0aC5zaW4odlsxXSAvIDIpO1xyXG4gICAgdmFyIHMzID0gTWF0aC5zaW4odlsyXSAvIDIpO1xyXG5cclxuICAgIHZhciBvcmRlciA9IChvcmRlciB8fCAnWFlaJykudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAvLyBodHRwOi8vd3d3Lm1hdGh3b3Jrcy5jb20vbWF0bGFiY2VudHJhbC9maWxlZXhjaGFuZ2UvXHJcbiAgICAvLyAgMjA2OTYtZnVuY3Rpb24tdG8tY29udmVydC1iZXR3ZWVuLWRjbS1ldWxlci1hbmdsZXMtcXVhdGVybmlvbnMtYW5kLWV1bGVyLXZlY3RvcnMvXHJcbiAgICAvLyAgY29udGVudC9TcGluQ2FsYy5tXHJcblxyXG4gICAgc3dpdGNoIChvcmRlcikge1xyXG4gICAgICAgIGNhc2UgJ1hZWic6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IHMxICogYzIgKiBjMyArIGMxICogczIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYzEgKiBzMiAqIGMzIC0gczEgKiBjMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBjMSAqIGMyICogczMgKyBzMSAqIHMyICogYzM7XHJcbiAgICAgICAgICAgIHRhcmdldFszXSA9IGMxICogYzIgKiBjMyAtIHMxICogczIgKiBzMztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWVhaJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gczEgKiBjMiAqIGMzICsgYzEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBjMSAqIHMyICogYzMgLSBzMSAqIGMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGMxICogYzIgKiBzMyAtIHMxICogczIgKiBjMztcclxuICAgICAgICAgICAgdGFyZ2V0WzNdID0gYzEgKiBjMiAqIGMzICsgczEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdaWFknOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBzMSAqIGMyICogYzMgLSBjMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGMxICogczIgKiBjMyArIHMxICogYzIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYzEgKiBjMiAqIHMzICsgczEgKiBzMiAqIGMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbM10gPSBjMSAqIGMyICogYzMgLSBzMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1pZWCc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IHMxICogYzIgKiBjMyAtIGMxICogczIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYzEgKiBzMiAqIGMzICsgczEgKiBjMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBjMSAqIGMyICogczMgLSBzMSAqIHMyICogYzM7XHJcbiAgICAgICAgICAgIHRhcmdldFszXSA9IGMxICogYzIgKiBjMyArIHMxICogczIgKiBzMztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWVpYJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gczEgKiBjMiAqIGMzICsgYzEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBjMSAqIHMyICogYzMgKyBzMSAqIGMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGMxICogYzIgKiBzMyAtIHMxICogczIgKiBjMztcclxuICAgICAgICAgICAgdGFyZ2V0WzNdID0gYzEgKiBjMiAqIGMzIC0gczEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdYWlknOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBzMSAqIGMyICogYzMgLSBjMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGMxICogczIgKiBjMyAtIHMxICogYzIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYzEgKiBjMiAqIHMzICsgczEgKiBzMiAqIGMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbM10gPSBjMSAqIGMyICogYzMgKyBzMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUXVhdGVybmlvbjtcclxuIiwiaW1wb3J0IG1hdDQgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0NCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5pbXBvcnQgcXVhdCBmcm9tICcuLi9nbG1hdHJpeC9xdWF0JztcclxuaW1wb3J0IG1hdDMgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0Myc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4vVmVjdG9yMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5Lk1hdHJpeDRcclxuICovXHJcbnZhciBNYXRyaXg0ID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgdGhpcy5fYXhpc1ggPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgdGhpcy5fYXhpc1kgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgdGhpcy5fYXhpc1ogPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcmFnZSBvZiBNYXRyaXg0XHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDQjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSBtYXQ0LmNyZWF0ZSgpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgX2RpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDQjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbk1hdHJpeDQucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBNYXRyaXg0LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGNvbXBvbmVudHMgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcclxuICAgICAqL1xyXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVtpXSA9IGFycltpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBhZGp1Z2F0ZSBvZiBzZWxmLCBpbi1wbGFjZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBhZGpvaW50OiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQ0LmFkam9pbnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IE1hdHJpeDRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAobmV3IE1hdHJpeDQoKSkuY29weSh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGZyb20gYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uKGEpIHtcclxuICAgICAgICBtYXQ0LmNvcHkodGhpcy5hcnJheSwgYS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBtYXRyaXggZGV0ZXJtaW5hbnRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGV0ZXJtaW5hbnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBtYXQ0LmRldGVybWluYW50KHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB1cHBlciAzeDMgcGFydCBmcm9tIHF1YXRlcm5pb25cclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBmcm9tUXVhdDogZnVuY3Rpb24ocSkge1xyXG4gICAgICAgIG1hdDQuZnJvbVF1YXQodGhpcy5hcnJheSwgcS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBmcm9tIGEgcXVhdGVybmlvbiByb3RhdGlvbiBhbmQgYSB2ZWN0b3IgdHJhbnNsYXRpb25cclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSB2XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uOiBmdW5jdGlvbihxLCB2KSB7XHJcbiAgICAgICAgbWF0NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbih0aGlzLmFycmF5LCBxLmFycmF5LCB2LmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gTWF0cml4MmQsIGl0IGlzIHVzZWQgd2hlbiBjb252ZXJ0aW5nIGEgMmQgc2hhcGUgdG8gM2Qgc3BhY2UuXHJcbiAgICAgKiBJbiAzZCBzcGFjZSBpdCBpcyBlcXVpdmFsZW50IHRvIHJhbnNsYXRlIG9uIHh5IHBsYW5lIGFuZCByb3RhdGUgYWJvdXQgeiBheGlzXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBtMmRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDJkOiBmdW5jdGlvbihtMmQpIHtcclxuICAgICAgICBNYXRyaXg0LmZyb21NYXQyZCh0aGlzLCBtMmQpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBmcm9tIGZydXN0dW0gYm91bmRzXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGxlZnRcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gcmlnaHRcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gYm90dG9tXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRvcFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBuZWFyXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGZhclxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBmcnVzdHVtOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcclxuICAgICAgICBtYXQ0LmZydXN0dW0odGhpcy5hcnJheSwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdG8gYSBpZGVudGl0eSBtYXRyaXhcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgaWRlbnRpdHk6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDQuaWRlbnRpdHkodGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydCBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGludmVydDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0NC5pbnZlcnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhcyBhIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBleWUgcG9zaXRpb24sIGZvY2FsIHBvaW50LCBhbmQgdXAgYXhpc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBleWVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gY2VudGVyXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHVwXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGxvb2tBdDogZnVuY3Rpb24oZXllLCBjZW50ZXIsIHVwKSB7XHJcbiAgICAgICAgbWF0NC5sb29rQXQodGhpcy5hcnJheSwgZXllLmFycmF5LCBjZW50ZXIuYXJyYXksIHVwLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11dGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBtdWw6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQ0Lm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5TGVmdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIG11bExlZnQ6IGZ1bmN0aW9uKGEpIHtcclxuICAgICAgICBtYXQ0Lm11bCh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0NC5tdWx0aXBseSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgYSBhbmQgc2VsZiwgYSBpcyBvbiB0aGUgbGVmdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5TGVmdDogZnVuY3Rpb24oYSkge1xyXG4gICAgICAgIG1hdDQubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhcyBhIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBsZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHJpZ2h0XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGJvdHRvbVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB0b3BcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gbmVhclxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBmYXJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgb3J0aG86IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XHJcbiAgICAgICAgbWF0NC5vcnRobyh0aGlzLmFycmF5LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcik7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU2V0IGFzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXhcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gZm92eVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBhc3BlY3RcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gbmVhclxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBmYXJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgcGVyc3BlY3RpdmU6IGZ1bmN0aW9uKGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKSB7XHJcbiAgICAgICAgbWF0NC5wZXJzcGVjdGl2ZSh0aGlzLmFycmF5LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcik7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IHJhZCBhYm91dCBheGlzLlxyXG4gICAgICogRXF1YWwgdG8gcmlnaHQtbXVsdGlwbHkgYSByb3RhaW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgIHJhZFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBheGlzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZTogZnVuY3Rpb24ocmFkLCBheGlzKSB7XHJcbiAgICAgICAgbWF0NC5yb3RhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkLCBheGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWCBheGlzLlxyXG4gICAgICogRXF1YWwgdG8gcmlnaHQtbXVsdGlwbHkgYSByb3RhaW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICByb3RhdGVYOiBmdW5jdGlvbihyYWQpIHtcclxuICAgICAgICBtYXQ0LnJvdGF0ZVgodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWSBheGlzLlxyXG4gICAgICogRXF1YWwgdG8gcmlnaHQtbXVsdGlwbHkgYSByb3RhaW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICByb3RhdGVZOiBmdW5jdGlvbihyYWQpIHtcclxuICAgICAgICBtYXQ0LnJvdGF0ZVkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWiBheGlzLlxyXG4gICAgICogRXF1YWwgdG8gcmlnaHQtbXVsdGlwbHkgYSByb3RhaW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICByb3RhdGVaOiBmdW5jdGlvbihyYWQpIHtcclxuICAgICAgICBtYXQ0LnJvdGF0ZVoodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgc2VsZiBieSBzXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHNjYWxlIG1hdHJpeFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24odikge1xyXG4gICAgICAgIG1hdDQuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgdi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zbGF0ZSBzZWxmIGJ5IHYuXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHRyYW5zbGF0ZSBtYXRyaXhcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gIHZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgdHJhbnNsYXRlOiBmdW5jdGlvbih2KSB7XHJcbiAgICAgICAgbWF0NC50cmFuc2xhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgdi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zcG9zZSBzZWxmLCBpbi1wbGFjZS5cclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgdHJhbnNwb3NlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQ0LnRyYW5zcG9zZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVjb21wb3NlIGEgbWF0cml4IHRvIFNSVFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFtzY2FsZV1cclxuICAgICAqIEBwYXJhbSB7Y2xheS5RdWF0ZXJuaW9ufSByb3RhdGlvblxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3Rvcn0gcG9zaXRpb25cclxuICAgICAqIEBzZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21pY3Jvc29mdC54bmEuZnJhbWV3b3JrLm1hdHJpeC5kZWNvbXBvc2UuYXNweFxyXG4gICAgICovXHJcbiAgICBkZWNvbXBvc2VNYXRyaXg6IChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIHggPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB5ID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgeiA9IHZlYzMuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHZhciBtMyA9IG1hdDMuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihzY2FsZSwgcm90YXRpb24sIHBvc2l0aW9uKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB2ZWMzLnNldCh4LCBlbFswXSwgZWxbMV0sIGVsWzJdKTtcclxuICAgICAgICAgICAgdmVjMy5zZXQoeSwgZWxbNF0sIGVsWzVdLCBlbFs2XSk7XHJcbiAgICAgICAgICAgIHZlYzMuc2V0KHosIGVsWzhdLCBlbFs5XSwgZWxbMTBdKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzeCA9IHZlYzMubGVuZ3RoKHgpO1xyXG4gICAgICAgICAgICB2YXIgc3kgPSB2ZWMzLmxlbmd0aCh5KTtcclxuICAgICAgICAgICAgdmFyIHN6ID0gdmVjMy5sZW5ndGgoeik7XHJcblxyXG4gICAgICAgICAgICAvLyBpZiBkZXRlcm1pbmUgaXMgbmVnYXRpdmUsIHdlIG5lZWQgdG8gaW52ZXJ0IG9uZSBzY2FsZVxyXG4gICAgICAgICAgICB2YXIgZGV0ID0gdGhpcy5kZXRlcm1pbmFudCgpO1xyXG4gICAgICAgICAgICBpZiAoZGV0IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgc3ggPSAtc3g7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgc2NhbGUuc2V0KHN4LCBzeSwgc3opO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwb3NpdGlvbi5zZXQoZWxbMTJdLCBlbFsxM10sIGVsWzE0XSk7XHJcblxyXG4gICAgICAgICAgICBtYXQzLmZyb21NYXQ0KG0zLCBlbCk7XHJcbiAgICAgICAgICAgIC8vIE5vdCBsaWtlIG1hdDQsIG1hdDMgaW4gZ2xtYXRyaXggc2VlbXMgdG8gYmUgcm93LWJhc2VkXHJcbiAgICAgICAgICAgIC8vIFNlZW1zIGZpeGVkIGluIGdsLW1hdHJpeCAyLjIuMlxyXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdG9qaS9nbC1tYXRyaXgvaXNzdWVzLzExNFxyXG4gICAgICAgICAgICAvLyBtYXQzLnRyYW5zcG9zZShtMywgbTMpO1xyXG5cclxuICAgICAgICAgICAgbTNbMF0gLz0gc3g7XHJcbiAgICAgICAgICAgIG0zWzFdIC89IHN4O1xyXG4gICAgICAgICAgICBtM1syXSAvPSBzeDtcclxuXHJcbiAgICAgICAgICAgIG0zWzNdIC89IHN5O1xyXG4gICAgICAgICAgICBtM1s0XSAvPSBzeTtcclxuICAgICAgICAgICAgbTNbNV0gLz0gc3k7XHJcblxyXG4gICAgICAgICAgICBtM1s2XSAvPSBzejtcclxuICAgICAgICAgICAgbTNbN10gLz0gc3o7XHJcbiAgICAgICAgICAgIG0zWzhdIC89IHN6O1xyXG5cclxuICAgICAgICAgICAgcXVhdC5mcm9tTWF0Myhyb3RhdGlvbi5hcnJheSwgbTMpO1xyXG4gICAgICAgICAgICBxdWF0Lm5vcm1hbGl6ZShyb3RhdGlvbi5hcnJheSwgcm90YXRpb24uYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgcm90YXRpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcG9zaXRpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuICdbJyArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwodGhpcy5hcnJheSwgJywnKSArICddJztcclxuICAgIH0sXHJcblxyXG4gICAgdG9BcnJheTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcclxuXHJcbmlmIChkZWZpbmVQcm9wZXJ0eSkge1xyXG4gICAgdmFyIHByb3RvID0gTWF0cml4NC5wcm90b3R5cGU7XHJcbiAgICAvKipcclxuICAgICAqIFogQXhpcyBvZiBsb2NhbCB0cmFuc2Zvcm1cclxuICAgICAqIEBuYW1lIHpcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5NYXRyaXg0XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd6Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB0aGlzLl9heGlzWi5zZXQoZWxbOF0sIGVsWzldLCBlbFsxMF0pO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXhpc1o7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gSGVyZSBoYXMgYSBwcm9ibGVtXHJcbiAgICAgICAgICAgIC8vIElmIG9ubHkgc2V0IGFuIGl0ZW0gb2YgdmVjdG9yIHdpbGwgbm90IHdvcmtcclxuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5hcnJheTtcclxuICAgICAgICAgICAgdiA9IHYuYXJyYXk7XHJcbiAgICAgICAgICAgIGVsWzhdID0gdlswXTtcclxuICAgICAgICAgICAgZWxbOV0gPSB2WzFdO1xyXG4gICAgICAgICAgICBlbFsxMF0gPSB2WzJdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogWSBBeGlzIG9mIGxvY2FsIHRyYW5zZm9ybVxyXG4gICAgICogQG5hbWUgeVxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgICAgIHRoaXMuX2F4aXNZLnNldChlbFs0XSwgZWxbNV0sIGVsWzZdKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F4aXNZO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB2ID0gdi5hcnJheTtcclxuICAgICAgICAgICAgZWxbNF0gPSB2WzBdO1xyXG4gICAgICAgICAgICBlbFs1XSA9IHZbMV07XHJcbiAgICAgICAgICAgIGVsWzZdID0gdlsyXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFggQXhpcyBvZiBsb2NhbCB0cmFuc2Zvcm1cclxuICAgICAqIEBuYW1lIHhcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5NYXRyaXg0XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd4Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB0aGlzLl9heGlzWC5zZXQoZWxbMF0sIGVsWzFdLCBlbFsyXSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9heGlzWDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5hcnJheTtcclxuICAgICAgICAgICAgdiA9IHYuYXJyYXk7XHJcbiAgICAgICAgICAgIGVsWzBdID0gdlswXTtcclxuICAgICAgICAgICAgZWxbMV0gPSB2WzFdO1xyXG4gICAgICAgICAgICBlbFsyXSA9IHZbMl07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LmFkam9pbnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDQuYWRqb2ludChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDQuY29weShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5NYXRyaXg0LmRldGVybWluYW50ID0gZnVuY3Rpb24oYSkge1xyXG4gICAgcmV0dXJuIG1hdDQuZGV0ZXJtaW5hbnQoYS5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgbWF0NC5pZGVudGl0eShvdXQuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIGxlZnRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgcmlnaHRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgYm90dG9tXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRvcFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBuZWFyXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIGZhclxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0Lm9ydGhvID0gZnVuY3Rpb24ob3V0LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xyXG4gICAgbWF0NC5vcnRobyhvdXQuYXJyYXksIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBmb3Z5XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIGFzcGVjdFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBuZWFyXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIGZhclxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnBlcnNwZWN0aXZlID0gZnVuY3Rpb24ob3V0LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcikge1xyXG4gICAgbWF0NC5wZXJzcGVjdGl2ZShvdXQuYXJyYXksIGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGV5ZVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGNlbnRlclxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHVwXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQubG9va0F0ID0gZnVuY3Rpb24ob3V0LCBleWUsIGNlbnRlciwgdXApIHtcclxuICAgIG1hdDQubG9va0F0KG91dC5hcnJheSwgZXllLmFycmF5LCBjZW50ZXIuYXJyYXksIHVwLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDQuaW52ZXJ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0Lm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgbWF0NC5tdWwob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0Lm11bHRpcGx5ID0gTWF0cml4NC5tdWw7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSAgICBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuZnJvbVF1YXQgPSBmdW5jdGlvbihvdXQsIHEpIHtcclxuICAgIG1hdDQuZnJvbVF1YXQob3V0LmFycmF5LCBxLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9ICAgIG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICB2XHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24gPSBmdW5jdGlvbihvdXQsIHEsIHYpIHtcclxuICAgIG1hdDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24ob3V0LmFycmF5LCBxLmFycmF5LCB2LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG00XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG0yZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LmZyb21NYXQyZCA9IGZ1bmN0aW9uKG00LCBtMmQpIHtcclxuICAgIG00Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICB2YXIgbTJkID0gbTJkLmFycmF5O1xyXG4gICAgdmFyIG00ID0gbTQuYXJyYXk7XHJcblxyXG4gICAgbTRbMF0gPSBtMmRbMF07XHJcbiAgICBtNFs0XSA9IG0yZFsyXTtcclxuICAgIG00WzEyXSA9IG0yZFs0XTtcclxuXHJcbiAgICBtNFsxXSA9IG0yZFsxXTtcclxuICAgIG00WzVdID0gbTJkWzNdO1xyXG4gICAgbTRbMTNdID0gbTJkWzVdO1xyXG5cclxuICAgIHJldHVybiBtNDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgcmFkXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYXhpc1xyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnJvdGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkLCBheGlzKSB7XHJcbiAgICBtYXQ0LnJvdGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHJhZCwgYXhpcy5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHJhZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnJvdGF0ZVggPSBmdW5jdGlvbihvdXQsIGEsIHJhZCkge1xyXG4gICAgbWF0NC5yb3RhdGVYKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQucm90YXRlWSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XHJcbiAgICBtYXQ0LnJvdGF0ZVkob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICByYWRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5yb3RhdGVaID0gZnVuY3Rpb24ob3V0LCBhLCByYWQpIHtcclxuICAgIG1hdDQucm90YXRlWihvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICBtYXQ0LnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBtYXQ0LnRyYW5zcG9zZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC50cmFuc2xhdGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIG1hdDQudHJhbnNsYXRlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRyaXg0O1xyXG4iLCJpbXBvcnQgVmVjdG9yMyBmcm9tICcuL1ZlY3RvcjMnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcbnZhciB2ZWMzU2V0ID0gdmVjMy5zZXQ7XHJcbnZhciB2ZWMzQ29weSA9IHZlYzMuY29weTtcclxuXHJcbi8qKlxyXG4gKiBBeGlzIGFsaWduZWQgYm91bmRpbmcgYm94XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5Cb3VuZGluZ0JveFxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW21pbl1cclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFttYXhdXHJcbiAqL1xyXG52YXIgQm91bmRpbmdCb3ggPSBmdW5jdGlvbiAobWluLCBtYXgpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1pbmltdW0gY29vcmRzIG9mIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5taW4gPSBtaW4gfHwgbmV3IFZlY3RvcjMoSW5maW5pdHksIEluZmluaXR5LCBJbmZpbml0eSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXhpbXVtIGNvb3JkcyBvZiBib3VuZGluZyBib3hcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubWF4ID0gbWF4IHx8IG5ldyBWZWN0b3IzKC1JbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHkpO1xyXG5cclxuICAgIHRoaXMudmVydGljZXMgPSBudWxsO1xyXG59O1xyXG5cclxuQm91bmRpbmdCb3gucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBCb3VuZGluZ0JveCxcclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIG1pbiBhbmQgbWF4IGNvb3JkcyBmcm9tIGEgdmVydGljZXMgYXJyYXlcclxuICAgICAqIEBwYXJhbSAge2FycmF5fSB2ZXJ0aWNlc1xyXG4gICAgICovXHJcbiAgICB1cGRhdGVGcm9tVmVydGljZXM6IGZ1bmN0aW9uICh2ZXJ0aWNlcykge1xyXG4gICAgICAgIGlmICh2ZXJ0aWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbjtcclxuICAgICAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB2YXIgbWluQXJyID0gbWluLmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgbWF4QXJyID0gbWF4LmFycmF5O1xyXG4gICAgICAgICAgICB2ZWMzQ29weShtaW5BcnIsIHZlcnRpY2VzWzBdKTtcclxuICAgICAgICAgICAgdmVjM0NvcHkobWF4QXJyLCB2ZXJ0aWNlc1swXSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdmVydGljZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB2ZXJ0ZXggPSB2ZXJ0aWNlc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodmVydGV4WzBdIDwgbWluQXJyWzBdKSB7IG1pbkFyclswXSA9IHZlcnRleFswXTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleFsxXSA8IG1pbkFyclsxXSkgeyBtaW5BcnJbMV0gPSB2ZXJ0ZXhbMV07IH1cclxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhbMl0gPCBtaW5BcnJbMl0pIHsgbWluQXJyWzJdID0gdmVydGV4WzJdOyB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleFswXSA+IG1heEFyclswXSkgeyBtYXhBcnJbMF0gPSB2ZXJ0ZXhbMF07IH1cclxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhbMV0gPiBtYXhBcnJbMV0pIHsgbWF4QXJyWzFdID0gdmVydGV4WzFdOyB9XHJcbiAgICAgICAgICAgICAgICBpZiAodmVydGV4WzJdID4gbWF4QXJyWzJdKSB7IG1heEFyclsyXSA9IHZlcnRleFsyXTsgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICBtYXguX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVW5pb24gb3BlcmF0aW9uIHdpdGggYW5vdGhlciBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQm91bmRpbmdCb3h9IGJib3hcclxuICAgICAqL1xyXG4gICAgdW5pb246IGZ1bmN0aW9uIChiYm94KSB7XHJcbiAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluO1xyXG4gICAgICAgIHZhciBtYXggPSB0aGlzLm1heDtcclxuICAgICAgICB2ZWMzLm1pbihtaW4uYXJyYXksIG1pbi5hcnJheSwgYmJveC5taW4uYXJyYXkpO1xyXG4gICAgICAgIHZlYzMubWF4KG1heC5hcnJheSwgbWF4LmFycmF5LCBiYm94Lm1heC5hcnJheSk7XHJcbiAgICAgICAgbWluLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJzZWN0aW9uIG9wZXJhdGlvbiB3aXRoIGFub3RoZXIgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkJvdW5kaW5nQm94fSBiYm94XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdGlvbjogZnVuY3Rpb24gKGJib3gpIHtcclxuICAgICAgICB2YXIgbWluID0gdGhpcy5taW47XHJcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xyXG4gICAgICAgIHZlYzMubWF4KG1pbi5hcnJheSwgbWluLmFycmF5LCBiYm94Lm1pbi5hcnJheSk7XHJcbiAgICAgICAgdmVjMy5taW4obWF4LmFycmF5LCBtYXguYXJyYXksIGJib3gubWF4LmFycmF5KTtcclxuICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICBtYXguX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBpbnRlcnNlY3Qgd2l0aCBhbm90aGVyIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5Cb3VuZGluZ0JveH0gYmJveFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaW50ZXJzZWN0Qm91bmRpbmdCb3g6IGZ1bmN0aW9uIChiYm94KSB7XHJcbiAgICAgICAgdmFyIF9taW4gPSB0aGlzLm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heCA9IHRoaXMubWF4LmFycmF5O1xyXG5cclxuICAgICAgICB2YXIgX21pbjIgPSBiYm94Lm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heDIgPSBiYm94Lm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgcmV0dXJuICEgKF9taW5bMF0gPiBfbWF4MlswXSB8fCBfbWluWzFdID4gX21heDJbMV0gfHwgX21pblsyXSA+IF9tYXgyWzJdXHJcbiAgICAgICAgICAgIHx8IF9tYXhbMF0gPCBfbWluMlswXSB8fCBfbWF4WzFdIDwgX21pbjJbMV0gfHwgX21heFsyXSA8IF9taW4yWzJdKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBjb250YWluIGFub3RoZXIgYm91bmRpbmcgYm94IGVudGlyZWx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkJvdW5kaW5nQm94fSBiYm94XHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBjb250YWluQm91bmRpbmdCb3g6IGZ1bmN0aW9uIChiYm94KSB7XHJcblxyXG4gICAgICAgIHZhciBfbWluID0gdGhpcy5taW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIF9tYXggPSB0aGlzLm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgdmFyIF9taW4yID0gYmJveC5taW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIF9tYXgyID0gYmJveC5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgIHJldHVybiBfbWluWzBdIDw9IF9taW4yWzBdICYmIF9taW5bMV0gPD0gX21pbjJbMV0gJiYgX21pblsyXSA8PSBfbWluMlsyXVxyXG4gICAgICAgICAgICAmJiBfbWF4WzBdID49IF9tYXgyWzBdICYmIF9tYXhbMV0gPj0gX21heDJbMV0gJiYgX21heFsyXSA+PSBfbWF4MlsyXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBjb250YWluIHBvaW50IGVudGlyZWx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHBvaW50XHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBjb250YWluUG9pbnQ6IGZ1bmN0aW9uIChwKSB7XHJcbiAgICAgICAgdmFyIF9taW4gPSB0aGlzLm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heCA9IHRoaXMubWF4LmFycmF5O1xyXG5cclxuICAgICAgICB2YXIgX3AgPSBwLmFycmF5O1xyXG5cclxuICAgICAgICByZXR1cm4gX21pblswXSA8PSBfcFswXSAmJiBfbWluWzFdIDw9IF9wWzFdICYmIF9taW5bMl0gPD0gX3BbMl1cclxuICAgICAgICAgICAgJiYgX21heFswXSA+PSBfcFswXSAmJiBfbWF4WzFdID49IF9wWzFdICYmIF9tYXhbMl0gPj0gX3BbMl07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgYm91bmRpbmcgYm94IGlzIGZpbml0ZVxyXG4gICAgICovXHJcbiAgICBpc0Zpbml0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfbWluID0gdGhpcy5taW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIF9tYXggPSB0aGlzLm1heC5hcnJheTtcclxuICAgICAgICByZXR1cm4gaXNGaW5pdGUoX21pblswXSkgJiYgaXNGaW5pdGUoX21pblsxXSkgJiYgaXNGaW5pdGUoX21pblsyXSlcclxuICAgICAgICAgICAgJiYgaXNGaW5pdGUoX21heFswXSkgJiYgaXNGaW5pdGUoX21heFsxXSkgJiYgaXNGaW5pdGUoX21heFsyXSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgYW4gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggdG8gdGhlIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtYXRyaXhcclxuICAgICAqL1xyXG4gICAgYXBwbHlUcmFuc2Zvcm06IGZ1bmN0aW9uIChtYXRyaXgpIHtcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybUZyb20odGhpcywgbWF0cml4KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZnJvbSBhbm90aGVyIGJvdW5kaW5nIGJveCBhbmQgYW4gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXguXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQm91bmRpbmdCb3h9IHNvdXJjZVxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1Gcm9tOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIGh0dHA6Ly9kZXYudGhlb21hZGVyLmNvbS90cmFuc2Zvcm0tYm91bmRpbmctYm94ZXMvXHJcbiAgICAgICAgdmFyIHhhID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgeGIgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB5YSA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHliID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgemEgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB6YiA9IHZlYzMuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlLCBtYXRyaXgpIHtcclxuICAgICAgICAgICAgdmFyIG1pbiA9IHNvdXJjZS5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXggPSBzb3VyY2UubWF4LmFycmF5O1xyXG5cclxuICAgICAgICAgICAgdmFyIG0gPSBtYXRyaXguYXJyYXk7XHJcblxyXG4gICAgICAgICAgICB4YVswXSA9IG1bMF0gKiBtaW5bMF07IHhhWzFdID0gbVsxXSAqIG1pblswXTsgeGFbMl0gPSBtWzJdICogbWluWzBdO1xyXG4gICAgICAgICAgICB4YlswXSA9IG1bMF0gKiBtYXhbMF07IHhiWzFdID0gbVsxXSAqIG1heFswXTsgeGJbMl0gPSBtWzJdICogbWF4WzBdO1xyXG5cclxuICAgICAgICAgICAgeWFbMF0gPSBtWzRdICogbWluWzFdOyB5YVsxXSA9IG1bNV0gKiBtaW5bMV07IHlhWzJdID0gbVs2XSAqIG1pblsxXTtcclxuICAgICAgICAgICAgeWJbMF0gPSBtWzRdICogbWF4WzFdOyB5YlsxXSA9IG1bNV0gKiBtYXhbMV07IHliWzJdID0gbVs2XSAqIG1heFsxXTtcclxuXHJcbiAgICAgICAgICAgIHphWzBdID0gbVs4XSAqIG1pblsyXTsgemFbMV0gPSBtWzldICogbWluWzJdOyB6YVsyXSA9IG1bMTBdICogbWluWzJdO1xyXG4gICAgICAgICAgICB6YlswXSA9IG1bOF0gKiBtYXhbMl07IHpiWzFdID0gbVs5XSAqIG1heFsyXTsgemJbMl0gPSBtWzEwXSAqIG1heFsyXTtcclxuXHJcbiAgICAgICAgICAgIG1pbiA9IHRoaXMubWluLmFycmF5O1xyXG4gICAgICAgICAgICBtYXggPSB0aGlzLm1heC5hcnJheTtcclxuICAgICAgICAgICAgbWluWzBdID0gTWF0aC5taW4oeGFbMF0sIHhiWzBdKSArIE1hdGgubWluKHlhWzBdLCB5YlswXSkgKyBNYXRoLm1pbih6YVswXSwgemJbMF0pICsgbVsxMl07XHJcbiAgICAgICAgICAgIG1pblsxXSA9IE1hdGgubWluKHhhWzFdLCB4YlsxXSkgKyBNYXRoLm1pbih5YVsxXSwgeWJbMV0pICsgTWF0aC5taW4oemFbMV0sIHpiWzFdKSArIG1bMTNdO1xyXG4gICAgICAgICAgICBtaW5bMl0gPSBNYXRoLm1pbih4YVsyXSwgeGJbMl0pICsgTWF0aC5taW4oeWFbMl0sIHliWzJdKSArIE1hdGgubWluKHphWzJdLCB6YlsyXSkgKyBtWzE0XTtcclxuXHJcbiAgICAgICAgICAgIG1heFswXSA9IE1hdGgubWF4KHhhWzBdLCB4YlswXSkgKyBNYXRoLm1heCh5YVswXSwgeWJbMF0pICsgTWF0aC5tYXgoemFbMF0sIHpiWzBdKSArIG1bMTJdO1xyXG4gICAgICAgICAgICBtYXhbMV0gPSBNYXRoLm1heCh4YVsxXSwgeGJbMV0pICsgTWF0aC5tYXgoeWFbMV0sIHliWzFdKSArIE1hdGgubWF4KHphWzFdLCB6YlsxXSkgKyBtWzEzXTtcclxuICAgICAgICAgICAgbWF4WzJdID0gTWF0aC5tYXgoeGFbMl0sIHhiWzJdKSArIE1hdGgubWF4KHlhWzJdLCB5YlsyXSkgKyBNYXRoLm1heCh6YVsyXSwgemJbMl0pICsgbVsxNF07XHJcblxyXG4gICAgICAgICAgICB0aGlzLm1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1heC5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhIHByb2plY3Rpb24gbWF0cml4IHRvIHRoZSBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbWF0cml4XHJcbiAgICAgKi9cclxuICAgIGFwcGx5UHJvamVjdGlvbjogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG4gICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgbWF4ID0gdGhpcy5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgIHZhciBtID0gbWF0cml4LmFycmF5O1xyXG4gICAgICAgIC8vIG1pbiBpbiBtaW4gelxyXG4gICAgICAgIHZhciB2MTAgPSBtaW5bMF07XHJcbiAgICAgICAgdmFyIHYxMSA9IG1pblsxXTtcclxuICAgICAgICB2YXIgdjEyID0gbWluWzJdO1xyXG4gICAgICAgIC8vIG1heCBpbiBtaW4gelxyXG4gICAgICAgIHZhciB2MjAgPSBtYXhbMF07XHJcbiAgICAgICAgdmFyIHYyMSA9IG1heFsxXTtcclxuICAgICAgICB2YXIgdjIyID0gbWluWzJdO1xyXG4gICAgICAgIC8vIG1heCBpbiBtYXggelxyXG4gICAgICAgIHZhciB2MzAgPSBtYXhbMF07XHJcbiAgICAgICAgdmFyIHYzMSA9IG1heFsxXTtcclxuICAgICAgICB2YXIgdjMyID0gbWF4WzJdO1xyXG5cclxuICAgICAgICBpZiAobVsxNV0gPT09IDEpIHsgIC8vIE9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uXHJcbiAgICAgICAgICAgIG1pblswXSA9IG1bMF0gKiB2MTAgKyBtWzEyXTtcclxuICAgICAgICAgICAgbWluWzFdID0gbVs1XSAqIHYxMSArIG1bMTNdO1xyXG4gICAgICAgICAgICBtYXhbMl0gPSBtWzEwXSAqIHYxMiArIG1bMTRdO1xyXG5cclxuICAgICAgICAgICAgbWF4WzBdID0gbVswXSAqIHYzMCArIG1bMTJdO1xyXG4gICAgICAgICAgICBtYXhbMV0gPSBtWzVdICogdjMxICsgbVsxM107XHJcbiAgICAgICAgICAgIG1pblsyXSA9IG1bMTBdICogdjMyICsgbVsxNF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgdyA9IC0xIC8gdjEyO1xyXG4gICAgICAgICAgICBtaW5bMF0gPSBtWzBdICogdjEwICogdztcclxuICAgICAgICAgICAgbWluWzFdID0gbVs1XSAqIHYxMSAqIHc7XHJcbiAgICAgICAgICAgIG1heFsyXSA9IChtWzEwXSAqIHYxMiArIG1bMTRdKSAqIHc7XHJcblxyXG4gICAgICAgICAgICB3ID0gLTEgLyB2MjI7XHJcbiAgICAgICAgICAgIG1heFswXSA9IG1bMF0gKiB2MjAgKiB3O1xyXG4gICAgICAgICAgICBtYXhbMV0gPSBtWzVdICogdjIxICogdztcclxuXHJcbiAgICAgICAgICAgIHcgPSAtMSAvIHYzMjtcclxuICAgICAgICAgICAgbWluWzJdID0gKG1bMTBdICogdjMyICsgbVsxNF0pICogdztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5taW4uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1heC5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlVmVydGljZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xyXG4gICAgICAgIGlmICghdmVydGljZXMpIHtcclxuICAgICAgICAgICAgLy8gQ3ViZSB2ZXJ0aWNlc1xyXG4gICAgICAgICAgICB2ZXJ0aWNlcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmVydGljZXNbaV0gPSB2ZWMzLmZyb21WYWx1ZXMoMCwgMCwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBFaWdodCBjb29yZHMgb2YgYm91bmRpbmcgYm94XHJcbiAgICAgICAgICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXlbXX1cclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBtYXggPSB0aGlzLm1heC5hcnJheTtcclxuICAgICAgICAvLy0tLSBtaW4gelxyXG4gICAgICAgIC8vIG1pbiB4XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1swXSwgbWluWzBdLCBtaW5bMV0sIG1pblsyXSk7XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1sxXSwgbWluWzBdLCBtYXhbMV0sIG1pblsyXSk7XHJcbiAgICAgICAgLy8gbWF4IHhcclxuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzJdLCBtYXhbMF0sIG1pblsxXSwgbWluWzJdKTtcclxuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzNdLCBtYXhbMF0sIG1heFsxXSwgbWluWzJdKTtcclxuXHJcbiAgICAgICAgLy8tLSBtYXggelxyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbNF0sIG1pblswXSwgbWluWzFdLCBtYXhbMl0pO1xyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbNV0sIG1pblswXSwgbWF4WzFdLCBtYXhbMl0pO1xyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbNl0sIG1heFswXSwgbWluWzFdLCBtYXhbMl0pO1xyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbN10sIG1heFswXSwgbWF4WzFdLCBtYXhbMl0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgdmFsdWVzIGZyb20gYW5vdGhlciBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQm91bmRpbmdCb3h9IGJib3hcclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24gKGJib3gpIHtcclxuICAgICAgICB2YXIgbWluID0gdGhpcy5taW47XHJcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xyXG4gICAgICAgIHZlYzNDb3B5KG1pbi5hcnJheSwgYmJveC5taW4uYXJyYXkpO1xyXG4gICAgICAgIHZlYzNDb3B5KG1heC5hcnJheSwgYmJveC5tYXguYXJyYXkpO1xyXG4gICAgICAgIG1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIG1heC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IGJvdW5kaW5nIGJveFxyXG4gICAgICogQHJldHVybiB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICBib3VuZGluZ0JveC5jb3B5KHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBib3VuZGluZ0JveDtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJvdW5kaW5nQm94O1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IFF1YXRlcm5pb24gZnJvbSAnLi9tYXRoL1F1YXRlcm5pb24nO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuL21hdGgvTWF0cml4NCc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4vZ2xtYXRyaXgvbWF0NCc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xyXG5cclxudmFyIG5hbWVJZCA9IDA7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuTm9kZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIE5vZGUgPSBCYXNlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkuTm9kZSMgKi97XHJcbiAgICAvKipcclxuICAgICAqIFNjZW5lIG5vZGUgbmFtZVxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgbmFtZTogJycsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3NpdGlvbiByZWxhdGl2ZSB0byBpdHMgcGFyZW50IG5vZGUuIGFrYSB0cmFuc2xhdGlvbi5cclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHBvc2l0aW9uOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRpb24gcmVsYXRpdmUgdG8gaXRzIHBhcmVudCBub2RlLiBSZXByZXNlbnRlZCBieSBhIHF1YXRlcm5pb25cclxuICAgICAqIEB0eXBlIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHJvdGF0aW9uOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgcmVsYXRpdmUgdG8gaXRzIHBhcmVudCBub2RlXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFmZmluZSB0cmFuc2Zvcm0gbWF0cml4IHJlbGF0aXZlIHRvIGl0cyByb290IHNjZW5lLlxyXG4gICAgICogQHR5cGUge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgd29ybGRUcmFuc2Zvcm06IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCByZWxhdGl2ZSB0byBpdHMgcGFyZW50IG5vZGUuXHJcbiAgICAgKiBDb21wb3NpdGVkIHdpdGggcG9zaXRpb24sIHJvdGF0aW9uIGFuZCBzY2FsZS5cclxuICAgICAqIEB0eXBlIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGxvY2FsVHJhbnNmb3JtOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhlIGxvY2FsIHRyYW5zZm9ybSBpcyB1cGRhdGUgZnJvbSBTUlQoc2NhbGUsIHJvdGF0aW9uLCB0cmFuc2xhdGlvbiwgd2hpY2ggaXMgcG9zaXRpb24gaGVyZSkgZWFjaCBmcmFtZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGF1dG9VcGRhdGVMb2NhbFRyYW5zZm9ybTogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcmVudCBvZiBjdXJyZW50IHNjZW5lIG5vZGVcclxuICAgICAqIEB0eXBlIHs/Y2xheS5Ob2RlfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX3BhcmVudDogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJvb3Qgc2NlbmUgbW91bnRlZC4gTnVsbCBpZiBpdCBpcyBhIGlzb2xhdGVkIG5vZGVcclxuICAgICAqIEB0eXBlIHs/Y2xheS5TY2VuZX1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9zY2VuZTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfbmVlZHNVcGRhdGVXb3JsZFRyYW5zZm9ybTogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfaW5JdGVyYXRpbmc6IGZhbHNlLFxyXG5cclxuICAgIC8vIERlcHRoIGZvciB0cmFuc3BhcmVudCBsaXN0IHNvcnRpbmdcclxuICAgIF9fZGVwdGg6IDBcclxuXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICBpZiAoIXRoaXMubmFtZSkge1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICh0aGlzLnR5cGUgfHwgJ05PREUnKSArICdfJyArIChuYW1lSWQrKyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucm90YXRpb24pIHtcclxuICAgICAgICB0aGlzLnJvdGF0aW9uID0gbmV3IFF1YXRlcm5pb24oKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zY2FsZSkge1xyXG4gICAgICAgIHRoaXMuc2NhbGUgPSBuZXcgVmVjdG9yMygxLCAxLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbmV3IE1hdHJpeDQoKTtcclxuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuICAgIHRoaXMuX2NoaWxkcmVuID0gW107XHJcblxyXG59LFxyXG4vKipAbGVuZHMgY2xheS5Ob2RlLnByb3RvdHlwZS4gKi9cclxue1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUgez9jbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgdGFyZ2V0OiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBub2RlIGFuZCBpdHMgY2hpbHJlbiBpbnZpc2libGVcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGludmlzaWJsZTogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBOb2RlIGlzIGEgc2tpbm5lZCBtZXNoXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc1NraW5uZWRNZXNoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgaXQgaXMgYSByZW5kZXJhYmxlIHNjZW5lIG5vZGUsIGxpa2UgTWVzaCBhbmQgUGFydGljbGVTeXN0ZW1cclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzUmVuZGVyYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIG5hbWUgb2YgdGhlIHNjZW5lIG5vZGVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKi9cclxuICAgIHNldE5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5fc2NlbmU7XHJcbiAgICAgICAgaWYgKHNjZW5lKSB7XHJcbiAgICAgICAgICAgIHZhciBub2RlUmVwb3NpdG9yeSA9IHNjZW5lLl9ub2RlUmVwb3NpdG9yeTtcclxuICAgICAgICAgICAgZGVsZXRlIG5vZGVSZXBvc2l0b3J5W3RoaXMubmFtZV07XHJcbiAgICAgICAgICAgIG5vZGVSZXBvc2l0b3J5W25hbWVdID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYSBjaGlsZCBub2RlXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsUGFyZW50ID0gbm9kZS5fcGFyZW50O1xyXG4gICAgICAgIGlmIChvcmlnaW5hbFBhcmVudCA9PT0gdGhpcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcmlnaW5hbFBhcmVudCkge1xyXG4gICAgICAgICAgICBvcmlnaW5hbFBhcmVudC5yZW1vdmUobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5vZGUuX3BhcmVudCA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRyZW4ucHVzaChub2RlKTtcclxuXHJcbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5fc2NlbmU7XHJcbiAgICAgICAgaWYgKHNjZW5lICYmIHNjZW5lICE9PSBub2RlLnNjZW5lKSB7XHJcbiAgICAgICAgICAgIG5vZGUudHJhdmVyc2UodGhpcy5fYWRkU2VsZlRvU2NlbmUsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBNYXJrIGNoaWxkcmVuIG5lZWRzIHVwZGF0ZSB0cmFuc2Zvcm1cclxuICAgICAgICAvLyBJbiBjYXNlIGNoaWxkIGFyZSByZW1vdmUgYW5kIGFkZGVkIGFnYWluIGFmdGVyIHBhcmVudCBtb3ZlZFxyXG4gICAgICAgIG5vZGUuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0gPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSB0aGUgZ2l2ZW4gY2hpbGQgc2NlbmUgbm9kZVxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk5vZGV9IG5vZGVcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIHZhciBpZHggPSBjaGlsZHJlbi5pbmRleE9mKG5vZGUpO1xyXG4gICAgICAgIGlmIChpZHggPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNoaWxkcmVuLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIG5vZGUuX3BhcmVudCA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9zY2VuZSkge1xyXG4gICAgICAgICAgICBub2RlLnRyYXZlcnNlKHRoaXMuX3JlbW92ZVNlbGZGcm9tU2NlbmUsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgYWxsIGNoaWxkcmVuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUFsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBjaGlsZHJlbi5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2lkeF0uX3BhcmVudCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fc2NlbmUpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuW2lkeF0udHJhdmVyc2UodGhpcy5fcmVtb3ZlU2VsZkZyb21TY2VuZSwgdGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2NoaWxkcmVuID0gW107XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHRoZSBzY2VuZSBtb3VudGVkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlNjZW5lfVxyXG4gICAgICovXHJcbiAgICBnZXRTY2VuZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zY2VuZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcGFyZW50IG5vZGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuU2NlbmV9XHJcbiAgICAgKi9cclxuICAgIGdldFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZW1vdmVTZWxmRnJvbVNjZW5lOiBmdW5jdGlvbiAoZGVzY2VuZGFudCkge1xyXG4gICAgICAgIGRlc2NlbmRhbnQuX3NjZW5lLnJlbW92ZUZyb21TY2VuZShkZXNjZW5kYW50KTtcclxuICAgICAgICBkZXNjZW5kYW50Ll9zY2VuZSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIF9hZGRTZWxmVG9TY2VuZTogZnVuY3Rpb24gKGRlc2NlbmRhbnQpIHtcclxuICAgICAgICB0aGlzLl9zY2VuZS5hZGRUb1NjZW5lKGRlc2NlbmRhbnQpO1xyXG4gICAgICAgIGRlc2NlbmRhbnQuX3NjZW5lID0gdGhpcy5fc2NlbmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgaXQgaXMgYW5jZXN0b3Igb2YgdGhlIGdpdmVuIHNjZW5lIG5vZGVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBub2RlXHJcbiAgICAgKi9cclxuICAgIGlzQW5jZXN0b3I6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUuX3BhcmVudDtcclxuICAgICAgICB3aGlsZShwYXJlbnQpIHtcclxuICAgICAgICAgICAgaWYgKHBhcmVudCA9PT0gdGhpcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50Ll9wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYSBuZXcgY3JlYXRlZCBhcnJheSBvZiBhbGwgY2hpbGRyZW4gbm9kZXNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZVtdfVxyXG4gICAgICovXHJcbiAgICBjaGlsZHJlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbi5zbGljZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBjaGlsZCBzY2VuZSBub2RlIGF0IGdpdmVuIGluZGV4LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICBjaGlsZEF0OiBmdW5jdGlvbiAoaWR4KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuW2lkeF07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGZpcnN0IGNoaWxkIHdpdGggdGhlIGdpdmVuIG5hbWVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XHJcbiAgICAgKi9cclxuICAgIGdldENoaWxkQnlOYW1lOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZmlyc3QgZGVzY2VuZGFudCBoYXZlIHRoZSBnaXZlbiBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICBnZXREZXNjZW5kYW50QnlOYW1lOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5uYW1lID09PSBuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzID0gY2hpbGQuZ2V0RGVzY2VuZGFudEJ5TmFtZShuYW1lKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFF1ZXJ5IGRlc2NlbmRhbnQgbm9kZSBieSBwYXRoXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqICBub2RlLnF1ZXJ5Tm9kZSgncm9vdC9wYXJlbnQvY2hpbGQnKTtcclxuICAgICAqL1xyXG4gICAgcXVlcnlOb2RlOiBmdW5jdGlvbiAocGF0aCkge1xyXG4gICAgICAgIGlmICghcGF0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE8gTmFtZSBoYXZlIHNsYXNoID9cclxuICAgICAgICB2YXIgcGF0aEFyciA9IHBhdGguc3BsaXQoJy8nKTtcclxuICAgICAgICB2YXIgY3VycmVudCA9IHRoaXM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoQXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gcGF0aEFycltpXTtcclxuICAgICAgICAgICAgLy8gU2tpcCBlbXB0eVxyXG4gICAgICAgICAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBjdXJyZW50Ll9jaGlsZHJlbjtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjaGlsZHJlbi5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5bal07XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQubmFtZSA9PT0gbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gRWFybHkgcmV0dXJuIGlmIG5vdCBmb3VuZFxyXG4gICAgICAgICAgICBpZiAoIWZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBxdWVyeSBwYXRoLCByZWxhdGl2ZSB0byByb290Tm9kZShkZWZhdWx0IGlzIHNjZW5lKVxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtyb290Tm9kZV1cclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgZ2V0UGF0aDogZnVuY3Rpb24gKHJvb3ROb2RlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcvJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5fcGFyZW50O1xyXG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5uYW1lO1xyXG4gICAgICAgIHdoaWxlIChjdXJyZW50Ll9wYXJlbnQpIHtcclxuICAgICAgICAgICAgcGF0aCA9IGN1cnJlbnQubmFtZSArICcvJyArIHBhdGg7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50Ll9wYXJlbnQgPT0gcm9vdE5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Ll9wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudC5fcGFyZW50ICYmIHJvb3ROb2RlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXB0aCBmaXJzdCB0cmF2ZXJzZSBhbGwgaXRzIGRlc2NlbmRhbnQgc2NlbmUgbm9kZXMuXHJcbiAgICAgKlxyXG4gICAgICogKipXQVJOKiogRG9uJ3QgZG8gYGFkZGAsIGByZW1vdmVgIG9wZXJhdGlvbiBpbiB0aGUgY2FsbGJhY2sgZHVyaW5nIHRyYXZlcnNlLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gW2NvbnRleHRdXHJcbiAgICAgKi9cclxuICAgIHRyYXZlcnNlOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNvbnRleHQpIHtcclxuICAgICAgICBjYWxsYmFjay5jYWxsKGNvbnRleHQsIHRoaXMpO1xyXG4gICAgICAgIHZhciBfY2hpbGRyZW4gPSB0aGlzLl9jaGlsZHJlbjtcclxuICAgICAgICBmb3IodmFyIGkgPSAwLCBsZW4gPSBfY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgX2NoaWxkcmVuW2ldLnRyYXZlcnNlKGNhbGxiYWNrLCBjb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhdmVyc2UgYWxsIGNoaWxkcmVuIG5vZGVzLlxyXG4gICAgICpcclxuICAgICAqICoqV0FSTioqIERPTidUIGRvIGBhZGRgLCBgcmVtb3ZlYCBvcGVyYXRpb24gaW4gdGhlIGNhbGxiYWNrIGR1cmluZyBpdGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gW2NvbnRleHRdXHJcbiAgICAgKi9cclxuICAgIGVhY2hDaGlsZDogZnVuY3Rpb24gKGNhbGxiYWNrLCBjb250ZXh0KSB7XHJcbiAgICAgICAgdmFyIF9jaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IF9jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBfY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoY29udGV4dCwgY2hpbGQsIGkpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIGxvY2FsIHRyYW5zZm9ybSBhbmQgZGVjb21wb3NlIHRvIFNSVFxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBzZXRMb2NhbFRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG4gICAgICAgIG1hdDQuY29weSh0aGlzLmxvY2FsVHJhbnNmb3JtLmFycmF5LCBtYXRyaXguYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuZGVjb21wb3NlTG9jYWxUcmFuc2Zvcm0oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNvbXBvc2UgdGhlIGxvY2FsIHRyYW5zZm9ybSB0byBTUlRcclxuICAgICAqL1xyXG4gICAgZGVjb21wb3NlTG9jYWxUcmFuc2Zvcm06IGZ1bmN0aW9uIChrZWVwU2NhbGUpIHtcclxuICAgICAgICB2YXIgc2NhbGUgPSAha2VlcFNjYWxlID8gdGhpcy5zY2FsZTogbnVsbDtcclxuICAgICAgICB0aGlzLmxvY2FsVHJhbnNmb3JtLmRlY29tcG9zZU1hdHJpeChzY2FsZSwgdGhpcy5yb3RhdGlvbiwgdGhpcy5wb3NpdGlvbik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSB3b3JsZCB0cmFuc2Zvcm0gYW5kIGRlY29tcG9zZSB0byBTUlRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5NYXRyaXg0fSBtYXRyaXhcclxuICAgICAqL1xyXG4gICAgc2V0V29ybGRUcmFuc2Zvcm06IGZ1bmN0aW9uIChtYXRyaXgpIHtcclxuICAgICAgICBtYXQ0LmNvcHkodGhpcy53b3JsZFRyYW5zZm9ybS5hcnJheSwgbWF0cml4LmFycmF5KTtcclxuICAgICAgICB0aGlzLmRlY29tcG9zZVdvcmxkVHJhbnNmb3JtKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVjb21wb3NlIHRoZSB3b3JsZCB0cmFuc2Zvcm0gdG8gU1JUXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqL1xyXG4gICAgZGVjb21wb3NlV29ybGRUcmFuc2Zvcm06IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciB0bXAgPSBtYXQ0LmNyZWF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGtlZXBTY2FsZSkge1xyXG4gICAgICAgICAgICB2YXIgbG9jYWxUcmFuc2Zvcm0gPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xyXG4gICAgICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xyXG4gICAgICAgICAgICAvLyBBc3N1bWUgd29ybGQgdHJhbnNmb3JtIGlzIHVwZGF0ZWRcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgbWF0NC5pbnZlcnQodG1wLCB0aGlzLl9wYXJlbnQud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgbWF0NC5tdWx0aXBseShsb2NhbFRyYW5zZm9ybS5hcnJheSwgdG1wLCB3b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXQ0LmNvcHkobG9jYWxUcmFuc2Zvcm0uYXJyYXksIHdvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgc2NhbGUgPSAha2VlcFNjYWxlID8gdGhpcy5zY2FsZTogbnVsbDtcclxuICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm0uZGVjb21wb3NlTWF0cml4KHNjYWxlLCB0aGlzLnJvdGF0aW9uLCB0aGlzLnBvc2l0aW9uKTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICB0cmFuc2Zvcm1OZWVkc1VwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLl9kaXJ0eVxyXG4gICAgICAgICAgICB8fCB0aGlzLnJvdGF0aW9uLl9kaXJ0eVxyXG4gICAgICAgICAgICB8fCB0aGlzLnNjYWxlLl9kaXJ0eTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgbG9jYWwgdHJhbnNmb3JtIGZyb20gU1JUXHJcbiAgICAgKiBOb3RpY2UgdGhhdCBsb2NhbCB0cmFuc2Zvcm0gd2lsbCBub3QgYmUgdXBkYXRlZCBpZiBfZGlydHkgbWFyayBvZiBwb3NpdGlvbiwgcm90YXRpb24sIHNjYWxlIGlzIGFsbCBmYWxzZVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVMb2NhbFRyYW5zZm9ybTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb247XHJcbiAgICAgICAgdmFyIHJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbjtcclxuICAgICAgICB2YXIgc2NhbGUgPSB0aGlzLnNjYWxlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpKSB7XHJcbiAgICAgICAgICAgIHZhciBtID0gdGhpcy5sb2NhbFRyYW5zZm9ybS5hcnJheTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSBvcmRlciwgc2NhbGUtPnJvdGF0aW9uLT5wb3NpdGlvblxyXG4gICAgICAgICAgICBtYXQ0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG0sIHJvdGF0aW9uLmFycmF5LCBwb3NpdGlvbi5hcnJheSk7XHJcblxyXG4gICAgICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIHNjYWxlLmFycmF5KTtcclxuXHJcbiAgICAgICAgICAgIHJvdGF0aW9uLl9kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzY2FsZS5fZGlydHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgcG9zaXRpb24uX2RpcnR5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZVdvcmxkVHJhbnNmb3JtID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHdvcmxkIHRyYW5zZm9ybSwgYXNzdW1lIGl0cyBwYXJlbnQgd29ybGQgdHJhbnNmb3JtIGhhdmUgYmVlbiB1cGRhdGVkXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfdXBkYXRlV29ybGRUcmFuc2Zvcm1Ub3BEb3duOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxvY2FsVHJhbnNmb3JtID0gdGhpcy5sb2NhbFRyYW5zZm9ybS5hcnJheTtcclxuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtLmFycmF5O1xyXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgICAgICAgbWF0NC5tdWx0aXBseUFmZmluZShcclxuICAgICAgICAgICAgICAgIHdvcmxkVHJhbnNmb3JtLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50LndvcmxkVHJhbnNmb3JtLmFycmF5LFxyXG4gICAgICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdDQuY29weSh3b3JsZFRyYW5zZm9ybSwgbG9jYWxUcmFuc2Zvcm0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgd29ybGQgdHJhbnNmb3JtIGJlZm9yZSB3aG9sZSBzY2VuZSBpcyB1cGRhdGVkLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVXb3JsZFRyYW5zZm9ybTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIEZpbmQgdGhlIHJvb3Qgbm9kZSB3aGljaCB0cmFuc2Zvcm0gbmVlZHMgdXBkYXRlO1xyXG4gICAgICAgIHZhciByb290Tm9kZUlzRGlydHkgPSB0aGlzO1xyXG4gICAgICAgIHdoaWxlIChyb290Tm9kZUlzRGlydHkgJiYgcm9vdE5vZGVJc0RpcnR5LmdldFBhcmVudCgpXHJcbiAgICAgICAgICAgICYmIHJvb3ROb2RlSXNEaXJ0eS5nZXRQYXJlbnQoKS50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJvb3ROb2RlSXNEaXJ0eSA9IHJvb3ROb2RlSXNEaXJ0eS5nZXRQYXJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcm9vdE5vZGVJc0RpcnR5LnVwZGF0ZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBsb2NhbCB0cmFuc2Zvcm0gYW5kIHdvcmxkIHRyYW5zZm9ybSByZWN1cnNpdmVseVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmb3JjZVVwZGF0ZVdvcmxkXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGZvcmNlVXBkYXRlV29ybGQpIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRvVXBkYXRlTG9jYWxUcmFuc2Zvcm0pIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVMb2NhbFRyYW5zZm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIGlzIG1hbnVhbGx5IHNldHRlZFxyXG4gICAgICAgICAgICBmb3JjZVVwZGF0ZVdvcmxkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JjZVVwZGF0ZVdvcmxkIHx8IHRoaXMuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0pIHtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlV29ybGRUcmFuc2Zvcm1Ub3BEb3duKCk7XHJcbiAgICAgICAgICAgIGZvcmNlVXBkYXRlV29ybGQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZVdvcmxkVHJhbnNmb3JtID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLl9jaGlsZHJlbjtcclxuICAgICAgICBmb3IodmFyIGkgPSAwLCBsZW4gPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGUoZm9yY2VVcGRhdGVXb3JsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBib3VuZGluZyBib3ggb2Ygbm9kZVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtmaWx0ZXJdXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkJvdW5kaW5nQm94fSBbb3V0XVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAqL1xyXG4gICAgLy8gVE9ETyBTa2lubmluZ1xyXG4gICAgZ2V0Qm91bmRpbmdCb3g6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZGVmYXVsdEZpbHRlciAoZWwpIHtcclxuICAgICAgICAgICAgcmV0dXJuICFlbC5pbnZpc2libGUgJiYgZWwuZ2VvbWV0cnk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0bXBCQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdmFyIHRtcE1hdDQgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBpbnZXb3JsZFRyYW5zZm9ybSA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmaWx0ZXIsIG91dCkge1xyXG4gICAgICAgICAgICBvdXQgPSBvdXQgfHwgbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgICAgIGZpbHRlciA9IGZpbHRlciB8fCBkZWZhdWx0RmlsdGVyO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgTWF0cml4NC5pbnZlcnQoaW52V29ybGRUcmFuc2Zvcm0sIHRoaXMuX3BhcmVudC53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBNYXRyaXg0LmlkZW50aXR5KGludldvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy50cmF2ZXJzZShmdW5jdGlvbiAobWVzaCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1lc2guZ2VvbWV0cnkgJiYgbWVzaC5nZW9tZXRyeS5ib3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcEJCb3guY29weShtZXNoLmdlb21ldHJ5LmJvdW5kaW5nQm94KTtcclxuICAgICAgICAgICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHRtcE1hdDQsIGludldvcmxkVHJhbnNmb3JtLCBtZXNoLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgICAgICAgICB0bXBCQm94LmFwcGx5VHJhbnNmb3JtKHRtcE1hdDQpO1xyXG4gICAgICAgICAgICAgICAgICAgIG91dC51bmlvbih0bXBCQm94KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgdGhpcywgZGVmYXVsdEZpbHRlcik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHdvcmxkIHBvc2l0aW9uLCBleHRyYWN0ZWQgZnJvbSB3b3JsZCB0cmFuc2Zvcm1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gW291dF1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgZ2V0V29ybGRQb3NpdGlvbjogZnVuY3Rpb24gKG91dCkge1xyXG4gICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICBpZiAodGhpcy50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlV29ybGRUcmFuc2Zvcm0oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG0gPSB0aGlzLndvcmxkVHJhbnNmb3JtLmFycmF5O1xyXG4gICAgICAgIGlmIChvdXQpIHtcclxuICAgICAgICAgICAgdmFyIGFyciA9IG91dC5hcnJheTtcclxuICAgICAgICAgICAgYXJyWzBdID0gbVsxMl07XHJcbiAgICAgICAgICAgIGFyclsxXSA9IG1bMTNdO1xyXG4gICAgICAgICAgICBhcnJbMl0gPSBtWzE0XTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMyhtWzEyXSwgbVsxM10sIG1bMTRdKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgbm9kZVxyXG4gICAgICogQHJldHVybiB7Tm9kZX1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbm9kZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKCk7XHJcblxyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG5cclxuICAgICAgICBub2RlLnNldE5hbWUodGhpcy5uYW1lKTtcclxuICAgICAgICBub2RlLnBvc2l0aW9uLmNvcHkodGhpcy5wb3NpdGlvbik7XHJcbiAgICAgICAgbm9kZS5yb3RhdGlvbi5jb3B5KHRoaXMucm90YXRpb24pO1xyXG4gICAgICAgIG5vZGUuc2NhbGUuY29weSh0aGlzLnNjYWxlKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBub2RlLmFkZChjaGlsZHJlbltpXS5jbG9uZSgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSB0aGUgbm9kZSBhcm91bmQgYSBheGlzIGJ5IGFuZ2xlIGRlZ3JlZXMsIGF4aXMgcGFzc2VzIHRocm91Z2ggcG9pbnRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBwb2ludCBDZW50ZXIgcG9pbnRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBheGlzICBDZW50ZXIgYXhpc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9ICAgICAgIGFuZ2xlIFJvdGF0aW9uIGFuZ2xlXHJcbiAgICAgKiBAc2VlIGh0dHA6Ly9kb2NzLnVuaXR5M2QuY29tL0RvY3VtZW50YXRpb24vU2NyaXB0UmVmZXJlbmNlL1RyYW5zZm9ybS5Sb3RhdGVBcm91bmQuaHRtbFxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZUFyb3VuZDogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdiA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgdmFyIFJUTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBpbXByb3ZlIHBlcmZvcm1hbmNlXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChwb2ludCwgYXhpcywgYW5nbGUpIHtcclxuXHJcbiAgICAgICAgICAgIHYuY29weSh0aGlzLnBvc2l0aW9uKS5zdWJ0cmFjdChwb2ludCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgbG9jYWxUcmFuc2Zvcm0gPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xyXG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5pZGVudGl0eSgpO1xyXG4gICAgICAgICAgICAvLyBwYXJlbnQgbm9kZVxyXG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS50cmFuc2xhdGUocG9pbnQpO1xyXG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5yb3RhdGUoYW5nbGUsIGF4aXMpO1xyXG5cclxuICAgICAgICAgICAgUlRNYXRyaXguZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24odGhpcy5yb3RhdGlvbiwgdik7XHJcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLm11bHRpcGx5KFJUTWF0cml4KTtcclxuICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm0uc2NhbGUodGhpcy5zY2FsZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRlY29tcG9zZUxvY2FsVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0gPSB0cnVlO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHRhcmdldFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFt1cF1cclxuICAgICAqIEBzZWUgaHR0cDovL3d3dy5vcGVuZ2wub3JnL3Nkay9kb2NzL21hbjIveGh0bWwvZ2x1TG9va0F0LnhtbFxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKi9cclxuICAgIGxvb2tBdDogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbSA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHVwKSB7XHJcbiAgICAgICAgICAgIG0ubG9va0F0KHRoaXMucG9zaXRpb24sIHRhcmdldCwgdXAgfHwgdGhpcy5sb2NhbFRyYW5zZm9ybS55KS5pbnZlcnQoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbFRyYW5zZm9ybShtKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTm9kZTtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJ2ZWMzIGNhbGNBbWJpZW50U0hMaWdodChpbnQgaWR4LCB2ZWMzIE4pIHtcXG4gaW50IG9mZnNldCA9IDkgKiBpZHg7XFxuIHJldHVybiBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1swXVxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzFdICogTi54XFxuICsgYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbMl0gKiBOLnlcXG4gKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1szXSAqIE4uelxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzRdICogTi54ICogTi56XFxuICsgYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbNV0gKiBOLnogKiBOLnlcXG4gKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1s2XSAqIE4ueSAqIE4ueFxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzddICogKDMuMCAqIE4ueiAqIE4ueiAtIDEuMClcXG4gKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1s4XSAqIChOLnggKiBOLnggLSBOLnkgKiBOLnkpO1xcbn1cIjtcclxuIiwiaW1wb3J0IGNhbGNBbWJpZW50U0hMaWdodEVzc2wgZnJvbSAnLi9jYWxjQW1iaWVudFNITGlnaHQuZ2xzbC5qcyc7XHJcblxyXG52YXIgdW5pZm9ybVZlYzNQcmVmaXggPSAndW5pZm9ybSB2ZWMzICc7XHJcbnZhciB1bmlmb3JtRmxvYXRQcmVmaXggPSAndW5pZm9ybSBmbG9hdCAnO1xyXG52YXIgZXhwb3J0SGVhZGVyUHJlZml4ID0gJ0BleHBvcnQgY2xheS5oZWFkZXIuJztcclxudmFyIGV4cG9ydEVuZCA9ICdAZW5kJztcclxudmFyIHVuY29uZmlndXJhYmxlID0gJzp1bmNvbmZpZ3VyYWJsZTsnO1xyXG5leHBvcnQgZGVmYXVsdCBbXHJcbiAgICBleHBvcnRIZWFkZXJQcmVmaXggKyAnZGlyZWN0aW9uYWxfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbltESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdkaXJlY3Rpb25hbExpZ2h0Q29sb3JbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgZXhwb3J0RW5kLFxyXG5cclxuICAgIGV4cG9ydEhlYWRlclByZWZpeCArICdhbWJpZW50X2xpZ2h0JyxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ2FtYmllbnRMaWdodENvbG9yW0FNQklFTlRfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgZXhwb3J0RW5kLFxyXG5cclxuICAgIGV4cG9ydEhlYWRlclByZWZpeCArICdhbWJpZW50X3NoX2xpZ2h0JyxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ2FtYmllbnRTSExpZ2h0Q29sb3JbQU1CSUVOVF9TSF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1tBTUJJRU5UX1NIX0xJR0hUX0NPVU5UICogOV0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICBjYWxjQW1iaWVudFNITGlnaHRFc3NsLFxyXG4gICAgZXhwb3J0RW5kLFxyXG5cclxuICAgIGV4cG9ydEhlYWRlclByZWZpeCArICdhbWJpZW50X2N1YmVtYXBfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnYW1iaWVudEN1YmVtYXBMaWdodENvbG9yW0FNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICAndW5pZm9ybSBzYW1wbGVyQ3ViZSBhbWJpZW50Q3ViZW1hcExpZ2h0Q3ViZW1hcFtBTUJJRU5UX0NVQkVNQVBfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgJ3VuaWZvcm0gc2FtcGxlcjJEIGFtYmllbnRDdWJlbWFwTGlnaHRCUkRGTG9va3VwW0FNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICBleHBvcnRFbmQsXHJcblxyXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ3BvaW50X2xpZ2h0JyxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ3BvaW50TGlnaHRQb3NpdGlvbltQT0lOVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAncG9pbnRMaWdodFJhbmdlW1BPSU5UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ3BvaW50TGlnaHRDb2xvcltQT0lOVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICBleHBvcnRFbmQsXHJcblxyXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ3Nwb3RfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnc3BvdExpZ2h0UG9zaXRpb25bU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdzcG90TGlnaHREaXJlY3Rpb25bU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAnc3BvdExpZ2h0UmFuZ2VbU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAnc3BvdExpZ2h0VW1icmFBbmdsZUNvc2luZVtTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1GbG9hdFByZWZpeCArICdzcG90TGlnaHRQZW51bWJyYUFuZ2xlQ29zaW5lW1NQT1RfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgdW5pZm9ybUZsb2F0UHJlZml4ICsgJ3Nwb3RMaWdodEZhbGxvZmZGYWN0b3JbU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdzcG90TGlnaHRDb2xvcltTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIGV4cG9ydEVuZFxyXG5dLmpvaW4oJ1xcbicpO1xyXG4iLCJpbXBvcnQgTm9kZSBmcm9tICcuL05vZGUnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4vU2hhZGVyJztcclxuXHJcbmltcG9ydCBsaWdodFNoYWRlciBmcm9tICcuL3NoYWRlci9zb3VyY2UvaGVhZGVyL2xpZ2h0JztcclxuU2hhZGVyWydpbXBvcnQnXShsaWdodFNoYWRlcik7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuTGlnaHRcclxuICogQGV4dGVuZHMgY2xheS5Ob2RlXHJcbiAqL1xyXG52YXIgTGlnaHQgPSBOb2RlLmV4dGVuZChmdW5jdGlvbigpe1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5MaWdodCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIExpZ2h0IFJHQiBjb2xvclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJbXX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb2xvcjogWzEsIDEsIDFdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBMaWdodCBpbnRlbnNpdHlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGludGVuc2l0eTogMS4wLFxyXG5cclxuICAgICAgICAvLyBDb25maWcgZm9yIHNoYWRvdyBtYXBcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBsaWdodCBjYXN0IHNoYWRvd1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNhc3RTaGFkb3c6IHRydWUsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNoYWRvdyBtYXAgc2l6ZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2hhZG93UmVzb2x1dGlvbjogNTEyLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBMaWdodCBncm91cCwgc2hhZGVyIHdpdGggc2FtZSBgbGlnaHRHcm91cGAgd2lsbCBiZSBhZmZlY3RlZFxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogT25seSB1c2VmdWwgaW4gZm9yd2FyZCByZW5kZXJpbmdcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdyb3VwOiAwXHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuTGlnaHQucHJvdG90eXBlLiAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIExpZ2h0IHR5cGVcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5MaWdodCNcclxuICAgICAqL1xyXG4gICAgdHlwZTogJycsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LkxpZ2h0fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTGlnaHQucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgbGlnaHQgPSBOb2RlLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGxpZ2h0LmNvbG9yID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5jb2xvcik7XHJcbiAgICAgICAgbGlnaHQuaW50ZW5zaXR5ID0gdGhpcy5pbnRlbnNpdHk7XHJcbiAgICAgICAgbGlnaHQuY2FzdFNoYWRvdyA9IHRoaXMuY2FzdFNoYWRvdztcclxuICAgICAgICBsaWdodC5zaGFkb3dSZXNvbHV0aW9uID0gdGhpcy5zaGFkb3dSZXNvbHV0aW9uO1xyXG5cclxuICAgICAgICByZXR1cm4gbGlnaHQ7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlnaHQ7XHJcbiIsImltcG9ydCBWZWN0b3IzIGZyb20gJy4vVmVjdG9yMyc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4uL2dsbWF0cml4L21hdDQnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuaW1wb3J0IHZlYzQgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjNCc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlBsYW5lXHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBbbm9ybWFsXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2Rpc3RhbmNlXVxyXG4gKi9cclxudmFyIFBsYW5lID0gZnVuY3Rpb24obm9ybWFsLCBkaXN0YW5jZSkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWwgb2YgdGhlIHBsYW5lXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLm5vcm1hbCA9IG5vcm1hbCB8fCBuZXcgVmVjdG9yMygwLCAxLCAwKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnN0YW50IG9mIHRoZSBwbGFuZSBlcXVhdGlvbiwgdXNlZCBhcyBkaXN0YW5jZSB0byB0aGUgb3JpZ2luXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmRpc3RhbmNlID0gZGlzdGFuY2UgfHwgMDtcclxufTtcclxuXHJcblBsYW5lLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogUGxhbmUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXN0YW5jZSBmcm9tIGEgZ2l2ZW4gcG9pbnQgdG8gdGhlIHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHBvaW50XHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlVG9Qb2ludDogZnVuY3Rpb24ocG9pbnQpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5kb3QocG9pbnQuYXJyYXksIHRoaXMubm9ybWFsLmFycmF5KSAtIHRoaXMuZGlzdGFuY2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBwcm9qZWN0aW9uIHBvaW50IG9uIHRoZSBwbGFuZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBwb2ludFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgcHJvamVjdFBvaW50OiBmdW5jdGlvbihwb2ludCwgb3V0KSB7XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGQgPSB0aGlzLmRpc3RhbmNlVG9Qb2ludChwb2ludCk7XHJcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIHBvaW50LmFycmF5LCB0aGlzLm5vcm1hbC5hcnJheSwgLWQpO1xyXG4gICAgICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTm9ybWFsaXplIHRoZSBwbGFuZSdzIG5vcm1hbCBhbmQgY2FsY3VsYXRlIHRoZSBkaXN0YW5jZVxyXG4gICAgICovXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBpbnZMZW4gPSAxIC8gdmVjMy5sZW4odGhpcy5ub3JtYWwuYXJyYXkpO1xyXG4gICAgICAgIHZlYzMuc2NhbGUodGhpcy5ub3JtYWwuYXJyYXksIGludkxlbik7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSAqPSBpbnZMZW47XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhlIHBsYW5lIGludGVyc2VjdCBhIGZydXN0dW1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuRnJ1c3R1bX0gRnJ1c3R1bVxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaW50ZXJzZWN0RnJ1c3R1bTogZnVuY3Rpb24oZnJ1c3R1bSkge1xyXG4gICAgICAgIC8vIENoZWNrIGlmIGFsbCBjb29yZHMgb2YgZnJ1c3R1bSBpcyBvbiBwbGFuZSBhbGwgdW5kZXIgcGxhbmVcclxuICAgICAgICB2YXIgY29vcmRzID0gZnJ1c3R1bS52ZXJ0aWNlcztcclxuICAgICAgICB2YXIgbm9ybWFsID0gdGhpcy5ub3JtYWwuYXJyYXk7XHJcbiAgICAgICAgdmFyIG9uUGxhbmUgPSB2ZWMzLmRvdChjb29yZHNbMF0uYXJyYXksIG5vcm1hbCkgPiB0aGlzLmRpc3RhbmNlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICgodmVjMy5kb3QoY29vcmRzW2ldLmFycmF5LCBub3JtYWwpID4gdGhpcy5kaXN0YW5jZSkgIT0gb25QbGFuZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBpbnRlcnNlY3Rpb24gcG9pbnQgYmV0d2VlbiBwbGFuZSBhbmQgYSBnaXZlbiBsaW5lXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBzdGFydCBzdGFydCBwb2ludCBvZiBsaW5lXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gZW5kIGVuZCBwb2ludCBvZiBsaW5lXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW291dF1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgaW50ZXJzZWN0TGluZTogKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciByZCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0YXJ0LCBlbmQsIG91dCkge1xyXG4gICAgICAgICAgICB2YXIgZDAgPSB0aGlzLmRpc3RhbmNlVG9Qb2ludChzdGFydCk7XHJcbiAgICAgICAgICAgIHZhciBkMSA9IHRoaXMuZGlzdGFuY2VUb1BvaW50KGVuZCk7XHJcbiAgICAgICAgICAgIGlmICgoZDAgPiAwICYmIGQxID4gMCkgfHwgKGQwIDwgMCAmJiBkMSA8IDApKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBSYXkgaW50ZXJzZWN0aW9uXHJcbiAgICAgICAgICAgIHZhciBwbiA9IHRoaXMubm9ybWFsLmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgZCA9IHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHZhciBybyA9IHN0YXJ0LmFycmF5O1xyXG4gICAgICAgICAgICAvLyBkaXJlY3Rpb25cclxuICAgICAgICAgICAgdmVjMy5zdWIocmQsIGVuZC5hcnJheSwgc3RhcnQuYXJyYXkpO1xyXG4gICAgICAgICAgICB2ZWMzLm5vcm1hbGl6ZShyZCwgcmQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRpdmlkZXIgPSB2ZWMzLmRvdChwbiwgcmQpO1xyXG4gICAgICAgICAgICAvLyByYXkgaXMgcGFyYWxsZWwgdG8gdGhlIHBsYW5lXHJcbiAgICAgICAgICAgIGlmIChkaXZpZGVyID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIW91dCkge1xyXG4gICAgICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdCA9ICh2ZWMzLmRvdChwbiwgcm8pIC0gZCkgLyBkaXZpZGVyO1xyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgcm8sIHJkLCAtdCk7XHJcbiAgICAgICAgICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgYW4gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggdG8gcGxhbmVcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBhcHBseVRyYW5zZm9ybTogKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBpbnZlcnNlVHJhbnNwb3NlID0gbWF0NC5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgbm9ybWFsdjQgPSB2ZWM0LmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciBwb2ludHY0ID0gdmVjNC5jcmVhdGUoKTtcclxuICAgICAgICBwb2ludHY0WzNdID0gMTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24obTQpIHtcclxuICAgICAgICAgICAgbTQgPSBtNC5hcnJheTtcclxuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHBvaW50IG9uIHBsYW5lXHJcbiAgICAgICAgICAgIHZlYzMuc2NhbGUocG9pbnR2NCwgdGhpcy5ub3JtYWwuYXJyYXksIHRoaXMuZGlzdGFuY2UpO1xyXG4gICAgICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQocG9pbnR2NCwgcG9pbnR2NCwgbTQpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3RhbmNlID0gdmVjMy5kb3QocG9pbnR2NCwgdGhpcy5ub3JtYWwuYXJyYXkpO1xyXG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gcGxhbmUgbm9ybWFsXHJcbiAgICAgICAgICAgIG1hdDQuaW52ZXJ0KGludmVyc2VUcmFuc3Bvc2UsIG00KTtcclxuICAgICAgICAgICAgbWF0NC50cmFuc3Bvc2UoaW52ZXJzZVRyYW5zcG9zZSwgaW52ZXJzZVRyYW5zcG9zZSk7XHJcbiAgICAgICAgICAgIG5vcm1hbHY0WzNdID0gMDtcclxuICAgICAgICAgICAgdmVjMy5jb3B5KG5vcm1hbHY0LCB0aGlzLm5vcm1hbC5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChub3JtYWx2NCwgbm9ybWFsdjQsIGludmVyc2VUcmFuc3Bvc2UpO1xyXG4gICAgICAgICAgICB2ZWMzLmNvcHkodGhpcy5ub3JtYWwuYXJyYXksIG5vcm1hbHY0KTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgZnJvbSBhbm90aGVyIHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHBsYW5lXHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uKHBsYW5lKSB7XHJcbiAgICAgICAgdmVjMy5jb3B5KHRoaXMubm9ybWFsLmFycmF5LCBwbGFuZS5ub3JtYWwuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMubm9ybWFsLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9IHBsYW5lLmRpc3RhbmNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IHBsYW5lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlBsYW5lfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHBsYW5lID0gbmV3IFBsYW5lKCk7XHJcbiAgICAgICAgcGxhbmUuY29weSh0aGlzKTtcclxuICAgICAgICByZXR1cm4gcGxhbmU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQbGFuZTtcclxuIiwiaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4vQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgUGxhbmUgZnJvbSAnLi9QbGFuZSc7XHJcblxyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcbnZhciB2ZWMzU2V0ID0gdmVjMy5zZXQ7XHJcbnZhciB2ZWMzQ29weSA9IHZlYzMuY29weTtcclxudmFyIHZlYzNUcmFuZm9ybU1hdDQgPSB2ZWMzLnRyYW5zZm9ybU1hdDQ7XHJcbnZhciBtYXRoTWluID0gTWF0aC5taW47XHJcbnZhciBtYXRoTWF4ID0gTWF0aC5tYXg7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuRnJ1c3R1bVxyXG4gKi9cclxudmFyIEZydXN0dW0gPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVpZ2h0IHBsYW5lcyB0byBlbmNsb3NlIHRoZSBmcnVzdHVtXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5QbGFuZVtdfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnBsYW5lcyA9IFtdO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5wbGFuZXMucHVzaChuZXcgUGxhbmUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCb3VuZGluZyBib3ggb2YgZnJ1c3R1bVxyXG4gICAgICogQHR5cGUge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVpZ2h0IHZlcnRpY2VzIG9mIGZydXN0dW1cclxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXlbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy52ZXJ0aWNlcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICB0aGlzLnZlcnRpY2VzW2ldID0gdmVjMy5mcm9tVmFsdWVzKDAsIDAsIDApO1xyXG4gICAgfVxyXG59O1xyXG5cclxuRnJ1c3R1bS5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgLy8gaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMjA1MzEyMzEwMDUvaHR0cDovL2NyYXp5am9rZS5mcmVlLmZyL2RvYy8zRC9wbGFuZSUyMGV4dHJhY3Rpb24ucGRmXHJcbiAgICAvKipcclxuICAgICAqIFNldCBmcnVzdHVtIGZyb20gYSBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IHByb2plY3Rpb25NYXRyaXhcclxuICAgICAqL1xyXG4gICAgc2V0RnJvbVByb2plY3Rpb246IGZ1bmN0aW9uKHByb2plY3Rpb25NYXRyaXgpIHtcclxuXHJcbiAgICAgICAgdmFyIHBsYW5lcyA9IHRoaXMucGxhbmVzO1xyXG4gICAgICAgIHZhciBtID0gcHJvamVjdGlvbk1hdHJpeC5hcnJheTtcclxuICAgICAgICB2YXIgbTAgPSBtWzBdLCBtMSA9IG1bMV0sIG0yID0gbVsyXSwgbTMgPSBtWzNdO1xyXG4gICAgICAgIHZhciBtNCA9IG1bNF0sIG01ID0gbVs1XSwgbTYgPSBtWzZdLCBtNyA9IG1bN107XHJcbiAgICAgICAgdmFyIG04ID0gbVs4XSwgbTkgPSBtWzldLCBtMTAgPSBtWzEwXSwgbTExID0gbVsxMV07XHJcbiAgICAgICAgdmFyIG0xMiA9IG1bMTJdLCBtMTMgPSBtWzEzXSwgbTE0ID0gbVsxNF0sIG0xNSA9IG1bMTVdO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgcGxhbmVzXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbMF0ubm9ybWFsLmFycmF5LCBtMyAtIG0wLCBtNyAtIG00LCBtMTEgLSBtOCk7XHJcbiAgICAgICAgcGxhbmVzWzBdLmRpc3RhbmNlID0gLShtMTUgLSBtMTIpO1xyXG4gICAgICAgIHBsYW5lc1swXS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbMV0ubm9ybWFsLmFycmF5LCBtMyArIG0wLCBtNyArIG00LCBtMTEgKyBtOCk7XHJcbiAgICAgICAgcGxhbmVzWzFdLmRpc3RhbmNlID0gLShtMTUgKyBtMTIpO1xyXG4gICAgICAgIHBsYW5lc1sxXS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbMl0ubm9ybWFsLmFycmF5LCBtMyArIG0xLCBtNyArIG01LCBtMTEgKyBtOSk7XHJcbiAgICAgICAgcGxhbmVzWzJdLmRpc3RhbmNlID0gLShtMTUgKyBtMTMpO1xyXG4gICAgICAgIHBsYW5lc1syXS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbM10ubm9ybWFsLmFycmF5LCBtMyAtIG0xLCBtNyAtIG01LCBtMTEgLSBtOSk7XHJcbiAgICAgICAgcGxhbmVzWzNdLmRpc3RhbmNlID0gLShtMTUgLSBtMTMpO1xyXG4gICAgICAgIHBsYW5lc1szXS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbNF0ubm9ybWFsLmFycmF5LCBtMyAtIG0yLCBtNyAtIG02LCBtMTEgLSBtMTApO1xyXG4gICAgICAgIHBsYW5lc1s0XS5kaXN0YW5jZSA9IC0obTE1IC0gbTE0KTtcclxuICAgICAgICBwbGFuZXNbNF0ubm9ybWFsaXplKCk7XHJcblxyXG4gICAgICAgIHZlYzNTZXQocGxhbmVzWzVdLm5vcm1hbC5hcnJheSwgbTMgKyBtMiwgbTcgKyBtNiwgbTExICsgbTEwKTtcclxuICAgICAgICBwbGFuZXNbNV0uZGlzdGFuY2UgPSAtKG0xNSArIG0xNCk7XHJcbiAgICAgICAgcGxhbmVzWzVdLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9uXHJcbiAgICAgICAgdmFyIGJvdW5kaW5nQm94ID0gdGhpcy5ib3VuZGluZ0JveDtcclxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xyXG4gICAgICAgIGlmIChtMTUgPT09IDApICB7XHJcbiAgICAgICAgICAgIHZhciBhc3BlY3QgPSBtNSAvIG0wO1xyXG4gICAgICAgICAgICB2YXIgek5lYXIgPSAtbTE0IC8gKG0xMCAtIDEpO1xyXG4gICAgICAgICAgICB2YXIgekZhciA9IC1tMTQgLyAobTEwICsgMSk7XHJcbiAgICAgICAgICAgIHZhciBmYXJZID0gLXpGYXIgLyBtNTtcclxuICAgICAgICAgICAgdmFyIG5lYXJZID0gLXpOZWFyIC8gbTU7XHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBib3VuZGluZyBib3hcclxuICAgICAgICAgICAgYm91bmRpbmdCb3gubWluLnNldCgtZmFyWSAqIGFzcGVjdCwgLWZhclksIHpGYXIpO1xyXG4gICAgICAgICAgICBib3VuZGluZ0JveC5tYXguc2V0KGZhclkgKiBhc3BlY3QsIGZhclksIHpOZWFyKTtcclxuICAgICAgICAgICAgLy8gdXBkYXRlIHZlcnRpY2VzXHJcbiAgICAgICAgICAgIC8vLS0tIG1pbiB6XHJcbiAgICAgICAgICAgIC8vIG1pbiB4XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbMF0sIC1mYXJZICogYXNwZWN0LCAtZmFyWSwgekZhcik7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbMV0sIC1mYXJZICogYXNwZWN0LCBmYXJZLCB6RmFyKTtcclxuICAgICAgICAgICAgLy8gbWF4IHhcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1syXSwgZmFyWSAqIGFzcGVjdCwgLWZhclksIHpGYXIpO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzNdLCBmYXJZICogYXNwZWN0LCBmYXJZLCB6RmFyKTtcclxuICAgICAgICAgICAgLy8tLSBtYXggelxyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzRdLCAtbmVhclkgKiBhc3BlY3QsIC1uZWFyWSwgek5lYXIpO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzVdLCAtbmVhclkgKiBhc3BlY3QsIG5lYXJZLCB6TmVhcik7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNl0sIG5lYXJZICogYXNwZWN0LCAtbmVhclksIHpOZWFyKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s3XSwgbmVhclkgKiBhc3BlY3QsIG5lYXJZLCB6TmVhcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgeyAvLyBPcnRob2dyYXBoaWMgcHJvamVjdGlvblxyXG4gICAgICAgICAgICB2YXIgbGVmdCA9ICgtMSAtIG0xMikgLyBtMDtcclxuICAgICAgICAgICAgdmFyIHJpZ2h0ID0gKDEgLSBtMTIpIC8gbTA7XHJcbiAgICAgICAgICAgIHZhciB0b3AgPSAoMSAtIG0xMykgLyBtNTtcclxuICAgICAgICAgICAgdmFyIGJvdHRvbSA9ICgtMSAtIG0xMykgLyBtNTtcclxuICAgICAgICAgICAgdmFyIG5lYXIgPSAoLTEgLSBtMTQpIC8gbTEwO1xyXG4gICAgICAgICAgICB2YXIgZmFyID0gKDEgLSBtMTQpIC8gbTEwO1xyXG5cclxuXHJcbiAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1pbi5zZXQoTWF0aC5taW4obGVmdCwgcmlnaHQpLCBNYXRoLm1pbihib3R0b20sIHRvcCksIE1hdGgubWluKGZhciwgbmVhcikpO1xyXG4gICAgICAgICAgICBib3VuZGluZ0JveC5tYXguc2V0KE1hdGgubWF4KHJpZ2h0LCBsZWZ0KSwgTWF0aC5tYXgodG9wLCBib3R0b20pLCBNYXRoLm1heChuZWFyLCBmYXIpKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBtaW4gPSBib3VuZGluZ0JveC5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXggPSBib3VuZGluZ0JveC5tYXguYXJyYXk7XHJcbiAgICAgICAgICAgIC8vLS0tIG1pbiB6XHJcbiAgICAgICAgICAgIC8vIG1pbiB4XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbMF0sIG1pblswXSwgbWluWzFdLCBtaW5bMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzFdLCBtaW5bMF0sIG1heFsxXSwgbWluWzJdKTtcclxuICAgICAgICAgICAgLy8gbWF4IHhcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1syXSwgbWF4WzBdLCBtaW5bMV0sIG1pblsyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbM10sIG1heFswXSwgbWF4WzFdLCBtaW5bMl0pO1xyXG4gICAgICAgICAgICAvLy0tIG1heCB6XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNF0sIG1pblswXSwgbWluWzFdLCBtYXhbMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzVdLCBtaW5bMF0sIG1heFsxXSwgbWF4WzJdKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s2XSwgbWF4WzBdLCBtaW5bMV0sIG1heFsyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbN10sIG1heFswXSwgbWF4WzFdLCBtYXhbMl0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhIGFmZmluZSB0cmFuc2Zvcm0gbWF0cml4IGFuZCBzZXQgdG8gdGhlIGdpdmVuIGJvdW5kaW5nIGJveFxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgKi9cclxuICAgIGdldFRyYW5zZm9ybWVkQm91bmRpbmdCb3g6IChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIHRtcFZlYzMgPSB2ZWMzLmNyZWF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oYmJveCwgbWF0cml4KSB7XHJcbiAgICAgICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XHJcblxyXG4gICAgICAgICAgICB2YXIgbTQgPSBtYXRyaXguYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtaW4gPSBiYm94Lm1pbjtcclxuICAgICAgICAgICAgdmFyIG1heCA9IGJib3gubWF4O1xyXG4gICAgICAgICAgICB2YXIgbWluQXJyID0gbWluLmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgbWF4QXJyID0gbWF4LmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgdiA9IHZlcnRpY2VzWzBdO1xyXG4gICAgICAgICAgICB2ZWMzVHJhbmZvcm1NYXQ0KHRtcFZlYzMsIHYsIG00KTtcclxuICAgICAgICAgICAgdmVjM0NvcHkobWluQXJyLCB0bXBWZWMzKTtcclxuICAgICAgICAgICAgdmVjM0NvcHkobWF4QXJyLCB0bXBWZWMzKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdmVydGljZXNbaV07XHJcbiAgICAgICAgICAgICAgICB2ZWMzVHJhbmZvcm1NYXQ0KHRtcFZlYzMsIHYsIG00KTtcclxuXHJcbiAgICAgICAgICAgICAgICBtaW5BcnJbMF0gPSBtYXRoTWluKHRtcFZlYzNbMF0sIG1pbkFyclswXSk7XHJcbiAgICAgICAgICAgICAgICBtaW5BcnJbMV0gPSBtYXRoTWluKHRtcFZlYzNbMV0sIG1pbkFyclsxXSk7XHJcbiAgICAgICAgICAgICAgICBtaW5BcnJbMl0gPSBtYXRoTWluKHRtcFZlYzNbMl0sIG1pbkFyclsyXSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbWF4QXJyWzBdID0gbWF0aE1heCh0bXBWZWMzWzBdLCBtYXhBcnJbMF0pO1xyXG4gICAgICAgICAgICAgICAgbWF4QXJyWzFdID0gbWF0aE1heCh0bXBWZWMzWzFdLCBtYXhBcnJbMV0pO1xyXG4gICAgICAgICAgICAgICAgbWF4QXJyWzJdID0gbWF0aE1heCh0bXBWZWMzWzJdLCBtYXhBcnJbMl0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gYmJveDtcclxuICAgICAgICB9O1xyXG4gICAgfSkgKClcclxufTtcclxuZXhwb3J0IGRlZmF1bHQgRnJ1c3R1bTtcclxuIiwiaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9WZWN0b3IzJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG52YXIgRVBTSUxPTiA9IDFlLTU7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlJheVxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW29yaWdpbl1cclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFtkaXJlY3Rpb25dXHJcbiAqL1xyXG52YXIgUmF5ID0gZnVuY3Rpb24gKG9yaWdpbiwgZGlyZWN0aW9uKSB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3JpZ2luID0gb3JpZ2luIHx8IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZGlyZWN0aW9uID0gZGlyZWN0aW9uIHx8IG5ldyBWZWN0b3IzKCk7XHJcbn07XHJcblxyXG5SYXkucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBSYXksXHJcblxyXG4gICAgLy8gaHR0cDovL3d3dy5zaWdncmFwaC5vcmcvZWR1Y2F0aW9uL21hdGVyaWFscy9IeXBlckdyYXBoL3JheXRyYWNlL3JheXBsYW5lX2ludGVyc2VjdGlvbi5odG1cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIHJheSBhbmQgYSBnaXZlIHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlBsYW5lfSBwbGFuZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBbb3V0XVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RQbGFuZTogZnVuY3Rpb24gKHBsYW5lLCBvdXQpIHtcclxuICAgICAgICB2YXIgcG4gPSBwbGFuZS5ub3JtYWwuYXJyYXk7XHJcbiAgICAgICAgdmFyIGQgPSBwbGFuZS5kaXN0YW5jZTtcclxuICAgICAgICB2YXIgcm8gPSB0aGlzLm9yaWdpbi5hcnJheTtcclxuICAgICAgICB2YXIgcmQgPSB0aGlzLmRpcmVjdGlvbi5hcnJheTtcclxuXHJcbiAgICAgICAgdmFyIGRpdmlkZXIgPSB2ZWMzLmRvdChwbiwgcmQpO1xyXG4gICAgICAgIC8vIHJheSBpcyBwYXJhbGxlbCB0byB0aGUgcGxhbmVcclxuICAgICAgICBpZiAoZGl2aWRlciA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHQgPSAodmVjMy5kb3QocG4sIHJvKSAtIGQpIC8gZGl2aWRlcjtcclxuICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgcm8sIHJkLCAtdCk7XHJcbiAgICAgICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNaXJyb3IgdGhlIHJheSBhZ2FpbnN0IHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlBsYW5lfSBwbGFuZVxyXG4gICAgICovXHJcbiAgICBtaXJyb3JBZ2FpbnN0UGxhbmU6IGZ1bmN0aW9uIChwbGFuZSkge1xyXG4gICAgICAgIC8vIERpc3RhbmNlIHRvIHBsYW5lXHJcbiAgICAgICAgdmFyIGQgPSB2ZWMzLmRvdChwbGFuZS5ub3JtYWwuYXJyYXksIHRoaXMuZGlyZWN0aW9uLmFycmF5KTtcclxuICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHRoaXMuZGlyZWN0aW9uLmFycmF5LCB0aGlzLmRpcmVjdGlvbi5hcnJheSwgcGxhbmUubm9ybWFsLmFycmF5LCAtZCAqIDIpO1xyXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uLl9kaXJ0eSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGRpc3RhbmNlVG9Qb2ludDogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdiA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChwb2ludCkge1xyXG4gICAgICAgICAgICB2ZWMzLnN1Yih2LCBwb2ludCwgdGhpcy5vcmlnaW4uYXJyYXkpO1xyXG4gICAgICAgICAgICAvLyBEaXN0YW5jZSBmcm9tIHByb2plY3Rpb24gcG9pbnQgdG8gb3JpZ2luXHJcbiAgICAgICAgICAgIHZhciBiID0gdmVjMy5kb3QodiwgdGhpcy5kaXJlY3Rpb24uYXJyYXkpO1xyXG4gICAgICAgICAgICBpZiAoYiA8IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2ZWMzLmRpc3RhbmNlKHRoaXMub3JpZ2luLmFycmF5LCBwb2ludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gU3F1YXJlZCBkaXN0YW5jZSBmcm9tIGNlbnRlciB0byBvcmlnaW5cclxuICAgICAgICAgICAgdmFyIGMyID0gdmVjMy5sZW5TcXVhcmVkKHYpO1xyXG4gICAgICAgICAgICAvLyBTcXVhcmVkIGRpc3RhbmNlIGZyb20gY2VudGVyIHRvIHByb2plY3Rpb24gcG9pbnRcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGguc3FydChjMiAtIGIgKiBiKTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBpbnRlcnNlY3Rpb24gcG9pbnQgYmV0d2VlbiByYXkgYW5kIHNwaGVyZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBjZW50ZXJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gcmFkaXVzXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RTcGhlcmU6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHYgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoY2VudGVyLCByYWRpdXMsIG91dCkge1xyXG4gICAgICAgICAgICB2YXIgb3JpZ2luID0gdGhpcy5vcmlnaW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLmRpcmVjdGlvbi5hcnJheTtcclxuICAgICAgICAgICAgY2VudGVyID0gY2VudGVyLmFycmF5O1xyXG4gICAgICAgICAgICB2ZWMzLnN1Yih2LCBjZW50ZXIsIG9yaWdpbik7XHJcbiAgICAgICAgICAgIC8vIERpc3RhbmNlIGZyb20gcHJvamVjdGlvbiBwb2ludCB0byBvcmlnaW5cclxuICAgICAgICAgICAgdmFyIGIgPSB2ZWMzLmRvdCh2LCBkaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICAvLyBTcXVhcmVkIGRpc3RhbmNlIGZyb20gY2VudGVyIHRvIG9yaWdpblxyXG4gICAgICAgICAgICB2YXIgYzIgPSB2ZWMzLnNxdWFyZWRMZW5ndGgodik7XHJcbiAgICAgICAgICAgIC8vIFNxdWFyZWQgZGlzdGFuY2UgZnJvbSBjZW50ZXIgdG8gcHJvamVjdGlvbiBwb2ludFxyXG4gICAgICAgICAgICB2YXIgZDIgPSBjMiAtIGIgKiBiO1xyXG5cclxuICAgICAgICAgICAgdmFyIHIyID0gcmFkaXVzICogcmFkaXVzO1xyXG4gICAgICAgICAgICAvLyBObyBpbnRlcnNlY3Rpb25cclxuICAgICAgICAgICAgaWYgKGQyID4gcjIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGEgPSBNYXRoLnNxcnQocjIgLSBkMik7XHJcbiAgICAgICAgICAgIC8vIEZpcnN0IGludGVyc2VjdCBwb2ludFxyXG4gICAgICAgICAgICB2YXIgdDAgPSBiIC0gYTtcclxuICAgICAgICAgICAgLy8gU2Vjb25kIGludGVyc2VjdCBwb2ludFxyXG4gICAgICAgICAgICB2YXIgdDEgPSBiICsgYTtcclxuXHJcbiAgICAgICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0MCA8IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh0MSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBvcmlnaW4sIGRpcmVjdGlvbiwgdDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgb3JpZ2luLCBkaXJlY3Rpb24sIHQwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvLyBodHRwOi8vd3d3LnNjcmF0Y2hhcGl4ZWwuY29tL2xlc3NvbnMvM2QtYmFzaWMtbGVzc29ucy9sZXNzb24tNy1pbnRlcnNlY3Rpbmctc2ltcGxlLXNoYXBlcy9yYXktYm94LWludGVyc2VjdGlvbi9cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIHJheSBhbmQgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQm91bmRpbmdCb3h9IGJib3hcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RCb3VuZGluZ0JveDogZnVuY3Rpb24gKGJib3gsIG91dCkge1xyXG4gICAgICAgIHZhciBkaXIgPSB0aGlzLmRpcmVjdGlvbi5hcnJheTtcclxuICAgICAgICB2YXIgb3JpZ2luID0gdGhpcy5vcmlnaW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIG1pbiA9IGJib3gubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBtYXggPSBiYm94Lm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgdmFyIGludmRpcnggPSAxIC8gZGlyWzBdO1xyXG4gICAgICAgIHZhciBpbnZkaXJ5ID0gMSAvIGRpclsxXTtcclxuICAgICAgICB2YXIgaW52ZGlyeiA9IDEgLyBkaXJbMl07XHJcblxyXG4gICAgICAgIHZhciB0bWluLCB0bWF4LCB0eW1pbiwgdHltYXgsIHR6bWluLCB0em1heDtcclxuICAgICAgICBpZiAoaW52ZGlyeCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRtaW4gPSAobWluWzBdIC0gb3JpZ2luWzBdKSAqIGludmRpcng7XHJcbiAgICAgICAgICAgIHRtYXggPSAobWF4WzBdIC0gb3JpZ2luWzBdKSAqIGludmRpcng7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0bWF4ID0gKG1pblswXSAtIG9yaWdpblswXSkgKiBpbnZkaXJ4O1xyXG4gICAgICAgICAgICB0bWluID0gKG1heFswXSAtIG9yaWdpblswXSkgKiBpbnZkaXJ4O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW52ZGlyeSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHR5bWluID0gKG1pblsxXSAtIG9yaWdpblsxXSkgKiBpbnZkaXJ5O1xyXG4gICAgICAgICAgICB0eW1heCA9IChtYXhbMV0gLSBvcmlnaW5bMV0pICogaW52ZGlyeTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHR5bWF4ID0gKG1pblsxXSAtIG9yaWdpblsxXSkgKiBpbnZkaXJ5O1xyXG4gICAgICAgICAgICB0eW1pbiA9IChtYXhbMV0gLSBvcmlnaW5bMV0pICogaW52ZGlyeTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgodG1pbiA+IHR5bWF4KSB8fCAodHltaW4gPiB0bWF4KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eW1pbiA+IHRtaW4gfHwgdG1pbiAhPT0gdG1pbikge1xyXG4gICAgICAgICAgICB0bWluID0gdHltaW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eW1heCA8IHRtYXggfHwgdG1heCAhPT0gdG1heCkge1xyXG4gICAgICAgICAgICB0bWF4ID0gdHltYXg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaW52ZGlyeiA+PSAwKSB7XHJcbiAgICAgICAgICAgIHR6bWluID0gKG1pblsyXSAtIG9yaWdpblsyXSkgKiBpbnZkaXJ6O1xyXG4gICAgICAgICAgICB0em1heCA9IChtYXhbMl0gLSBvcmlnaW5bMl0pICogaW52ZGlyejtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHR6bWF4ID0gKG1pblsyXSAtIG9yaWdpblsyXSkgKiBpbnZkaXJ6O1xyXG4gICAgICAgICAgICB0em1pbiA9IChtYXhbMl0gLSBvcmlnaW5bMl0pICogaW52ZGlyejtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgodG1pbiA+IHR6bWF4KSB8fCAodHptaW4gPiB0bWF4KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0em1pbiA+IHRtaW4gfHwgdG1pbiAhPT0gdG1pbikge1xyXG4gICAgICAgICAgICB0bWluID0gdHptaW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0em1heCA8IHRtYXggfHwgdG1heCAhPT0gdG1heCkge1xyXG4gICAgICAgICAgICB0bWF4ID0gdHptYXg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0bWF4IDwgMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ID0gdG1pbiA+PSAwID8gdG1pbiA6IHRtYXg7XHJcblxyXG4gICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBvcmlnaW4sIGRpciwgdCk7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NJUMzJUI2bGxlciVFMiU4MCU5M1RydW1ib3JlX2ludGVyc2VjdGlvbl9hbGdvcml0aG1cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIHJheSBhbmQgdGhyZWUgdHJpYW5nbGUgdmVydGljZXNcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBhXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IGNcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgIHNpbmdsZVNpZGVkLCBDVyB0cmlhbmdsZSB3aWxsIGJlIGlnbm9yZWRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBbb3V0XVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFtiYXJ5Y2VudGVyaWNdIGJhcnljZW50cmljIGNvb3Jkc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RUcmlhbmdsZTogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIGVCQSA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIGVDQSA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIEFPID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgdkNyb3NzID0gdmVjMy5jcmVhdGUoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjLCBzaW5nbGVTaWRlZCwgb3V0LCBiYXJ5Y2VudGVyaWMpIHtcclxuICAgICAgICAgICAgdmFyIGRpciA9IHRoaXMuZGlyZWN0aW9uLmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgb3JpZ2luID0gdGhpcy5vcmlnaW4uYXJyYXk7XHJcbiAgICAgICAgICAgIGEgPSBhLmFycmF5O1xyXG4gICAgICAgICAgICBiID0gYi5hcnJheTtcclxuICAgICAgICAgICAgYyA9IGMuYXJyYXk7XHJcblxyXG4gICAgICAgICAgICB2ZWMzLnN1YihlQkEsIGIsIGEpO1xyXG4gICAgICAgICAgICB2ZWMzLnN1YihlQ0EsIGMsIGEpO1xyXG5cclxuICAgICAgICAgICAgdmVjMy5jcm9zcyh2Q3Jvc3MsIGVDQSwgZGlyKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBkZXQgPSB2ZWMzLmRvdChlQkEsIHZDcm9zcyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2luZ2xlU2lkZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkZXQgPiAtRVBTSUxPTikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRldCA+IC1FUFNJTE9OICYmIGRldCA8IEVQU0lMT04pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVjMy5zdWIoQU8sIG9yaWdpbiwgYSk7XHJcbiAgICAgICAgICAgIHZhciB1ID0gdmVjMy5kb3QodkNyb3NzLCBBTykgLyBkZXQ7XHJcbiAgICAgICAgICAgIGlmICh1IDwgMCB8fCB1ID4gMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlYzMuY3Jvc3ModkNyb3NzLCBlQkEsIEFPKTtcclxuICAgICAgICAgICAgdmFyIHYgPSB2ZWMzLmRvdChkaXIsIHZDcm9zcykgLyBkZXQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodiA8IDAgfHwgdiA+IDEgfHwgKHUgKyB2ID4gMSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKHZDcm9zcywgZUJBLCBlQ0EpO1xyXG4gICAgICAgICAgICB2YXIgdCA9IC12ZWMzLmRvdChBTywgdkNyb3NzKSAvIGRldDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChiYXJ5Y2VudGVyaWMpIHtcclxuICAgICAgICAgICAgICAgIFZlY3RvcjMuc2V0KGJhcnljZW50ZXJpYywgKDEgLSB1IC0gdiksIHUsIHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBvcmlnaW4sIGRpciwgdCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgYW4gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggdG8gdGhlIHJheVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fSBtYXRyaXhcclxuICAgICAqL1xyXG4gICAgYXBwbHlUcmFuc2Zvcm06IGZ1bmN0aW9uIChtYXRyaXgpIHtcclxuICAgICAgICBWZWN0b3IzLmFkZCh0aGlzLmRpcmVjdGlvbiwgdGhpcy5kaXJlY3Rpb24sIHRoaXMub3JpZ2luKTtcclxuICAgICAgICBWZWN0b3IzLnRyYW5zZm9ybU1hdDQodGhpcy5vcmlnaW4sIHRoaXMub3JpZ2luLCBtYXRyaXgpO1xyXG4gICAgICAgIFZlY3RvcjMudHJhbnNmb3JtTWF0NCh0aGlzLmRpcmVjdGlvbiwgdGhpcy5kaXJlY3Rpb24sIG1hdHJpeCk7XHJcblxyXG4gICAgICAgIFZlY3RvcjMuc3ViKHRoaXMuZGlyZWN0aW9uLCB0aGlzLmRpcmVjdGlvbiwgdGhpcy5vcmlnaW4pO1xyXG4gICAgICAgIFZlY3RvcjMubm9ybWFsaXplKHRoaXMuZGlyZWN0aW9uLCB0aGlzLmRpcmVjdGlvbik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSB2YWx1ZXMgZnJvbSBhbm90aGVyIHJheVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJheX0gcmF5XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uIChyYXkpIHtcclxuICAgICAgICBWZWN0b3IzLmNvcHkodGhpcy5vcmlnaW4sIHJheS5vcmlnaW4pO1xyXG4gICAgICAgIFZlY3RvcjMuY29weSh0aGlzLmRpcmVjdGlvbiwgcmF5LmRpcmVjdGlvbik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgcmF5XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlJheX1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcmF5ID0gbmV3IFJheSgpO1xyXG4gICAgICAgIHJheS5jb3B5KHRoaXMpO1xyXG4gICAgICAgIHJldHVybiByYXk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBSYXk7XHJcbiIsImltcG9ydCBOb2RlIGZyb20gJy4vTm9kZSc7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4vbWF0aC9NYXRyaXg0JztcclxuaW1wb3J0IEZydXN0dW0gZnJvbSAnLi9tYXRoL0ZydXN0dW0nO1xyXG5pbXBvcnQgUmF5IGZyb20gJy4vbWF0aC9SYXknO1xyXG5cclxuaW1wb3J0IHZlYzQgZnJvbSAnLi9nbG1hdHJpeC92ZWM0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuQ2FtZXJhXHJcbiAqIEBleHRlbmRzIGNsYXkuTm9kZVxyXG4gKi9cclxudmFyIENhbWVyYSA9IE5vZGUuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuQ2FtZXJhIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FtZXJhIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTWF0cml4NH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiBuZXcgTWF0cml4NCgpLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnZlcnNlIG9mIGNhbWVyYSBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW52UHJvamVjdGlvbk1hdHJpeDogbmV3IE1hdHJpeDQoKSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVmlldyBtYXRyaXgsIGVxdWFsIHRvIGludmVyc2Ugb2YgY2FtZXJhJ3Mgd29ybGQgbWF0cml4XHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTWF0cml4NH1cclxuICAgICAgICAgKi9cclxuICAgICAgICB2aWV3TWF0cml4OiBuZXcgTWF0cml4NCgpLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW1lcmEgZnJ1c3R1bSBpbiB2aWV3IHNwYWNlXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuRnJ1c3R1bX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBmcnVzdHVtOiBuZXcgRnJ1c3R1bSgpXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LkNhbWVyYS5wcm90b3R5cGUgKi9cclxue1xyXG5cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICAgICAgTm9kZS5wcm90b3R5cGUudXBkYXRlLmNhbGwodGhpcywgZm9yY2UpO1xyXG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KHRoaXMudmlld01hdHJpeCwgdGhpcy53b3JsZFRyYW5zZm9ybSk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeCwgdGhpcy5wcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgdGhpcy5mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uKHRoaXMucHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGNhbWVyYSB2aWV3IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBzZXRWaWV3TWF0cml4OiBmdW5jdGlvbiAodmlld01hdHJpeCkge1xyXG4gICAgICAgIE1hdHJpeDQuY29weSh0aGlzLnZpZXdNYXRyaXgsIHZpZXdNYXRyaXgpO1xyXG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KHRoaXMud29ybGRUcmFuc2Zvcm0sIHZpZXdNYXRyaXgpO1xyXG4gICAgICAgIHRoaXMuZGVjb21wb3NlV29ybGRUcmFuc2Zvcm0oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNvbXBvc2UgY2FtZXJhIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgKi9cclxuICAgIGRlY29tcG9zZVByb2plY3Rpb25NYXRyaXg6IGZ1bmN0aW9uICgpIHt9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGNhbWVyYSBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IHByb2plY3Rpb25NYXRyaXhcclxuICAgICAqL1xyXG4gICAgc2V0UHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKHByb2plY3Rpb25NYXRyaXgpIHtcclxuICAgICAgICBNYXRyaXg0LmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4LCBwcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICBNYXRyaXg0LmludmVydCh0aGlzLmludlByb2plY3Rpb25NYXRyaXgsIHByb2plY3Rpb25NYXRyaXgpO1xyXG4gICAgICAgIHRoaXMuZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHByb2plY3Rpb24gbWF0cml4LCBjYWxsZWQgYWZ0ZXIgdXBkYXRlXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVByb2plY3Rpb25NYXRyaXg6IGZ1bmN0aW9uICgpIHt9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FzdCBhIHBpY2tpbmcgcmF5IGZyb20gY2FtZXJhIG5lYXIgcGxhbmUgdG8gZmFyIHBsYW5lXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IyfSBuZGNcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SYXl9IFtvdXRdXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlJheX1cclxuICAgICAqL1xyXG4gICAgY2FzdFJheTogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdjQgPSB2ZWM0LmNyZWF0ZSgpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobmRjLCBvdXQpIHtcclxuICAgICAgICAgICAgdmFyIHJheSA9IG91dCAhPT0gdW5kZWZpbmVkID8gb3V0IDogbmV3IFJheSgpO1xyXG4gICAgICAgICAgICB2YXIgeCA9IG5kYy5hcnJheVswXTtcclxuICAgICAgICAgICAgdmFyIHkgPSBuZGMuYXJyYXlbMV07XHJcbiAgICAgICAgICAgIHZlYzQuc2V0KHY0LCB4LCB5LCAtMSwgMSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2NCwgdjQsIHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2NCwgdjQsIHRoaXMud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlKHJheS5vcmlnaW4uYXJyYXksIHY0LCAxIC8gdjRbM10pO1xyXG5cclxuICAgICAgICAgICAgdmVjNC5zZXQodjQsIHgsIHksIDEsIDEpO1xyXG4gICAgICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQodjQsIHY0LCB0aGlzLmludlByb2plY3Rpb25NYXRyaXguYXJyYXkpO1xyXG4gICAgICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQodjQsIHY0LCB0aGlzLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgdmVjMy5zY2FsZSh2NCwgdjQsIDEgLyB2NFszXSk7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHJheS5kaXJlY3Rpb24uYXJyYXksIHY0LCByYXkub3JpZ2luLmFycmF5KTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHJheS5kaXJlY3Rpb24uYXJyYXksIHJheS5kaXJlY3Rpb24uYXJyYXkpO1xyXG4gICAgICAgICAgICByYXkuZGlyZWN0aW9uLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJheS5vcmlnaW4uX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiByYXk7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBuYW1lIGNsb25lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LkNhbWVyYX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LkNhbWVyYS5wcm90b3R5cGVcclxuICAgICAqL1xyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENhbWVyYTtcclxuIiwiaW1wb3J0IE5vZGUgZnJvbSAnLi9Ob2RlJztcclxuaW1wb3J0IExpZ2h0IGZyb20gJy4vTGlnaHQnO1xyXG5pbXBvcnQgQ2FtZXJhIGZyb20gJy4vQ2FtZXJhJztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4vY29yZS91dGlsJztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IExSVUNhY2hlIGZyb20gJy4vY29yZS9MUlUnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuL21hdGgvTWF0cml4NCc7XHJcblxyXG52YXIgSURFTlRJVFkgPSBtYXQ0LmNyZWF0ZSgpO1xyXG52YXIgV09STERWSUVXID0gbWF0NC5jcmVhdGUoKTtcclxuXHJcbnZhciBwcm9ncmFtS2V5Q2FjaGUgPSB7fTtcclxuXHJcbmZ1bmN0aW9uIGdldFByb2dyYW1LZXkobGlnaHROdW1iZXJzKSB7XHJcbiAgICB2YXIgZGVmaW5lU3RyID0gW107XHJcbiAgICB2YXIgbGlnaHRUeXBlcyA9IE9iamVjdC5rZXlzKGxpZ2h0TnVtYmVycyk7XHJcbiAgICBsaWdodFR5cGVzLnNvcnQoKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlnaHRUeXBlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBsaWdodFR5cGUgPSBsaWdodFR5cGVzW2ldO1xyXG4gICAgICAgIGRlZmluZVN0ci5wdXNoKGxpZ2h0VHlwZSArICcgJyArIGxpZ2h0TnVtYmVyc1tsaWdodFR5cGVdKTtcclxuICAgIH1cclxuICAgIHZhciBrZXkgPSBkZWZpbmVTdHIuam9pbignXFxuJyk7XHJcblxyXG4gICAgaWYgKHByb2dyYW1LZXlDYWNoZVtrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIHByb2dyYW1LZXlDYWNoZVtrZXldO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBpZCA9IHV0aWwuZ2VuR1VJRCgpO1xyXG4gICAgcHJvZ3JhbUtleUNhY2hlW2tleV0gPSBpZDtcclxuICAgIHJldHVybiBpZDtcclxufVxyXG5cclxuZnVuY3Rpb24gUmVuZGVyTGlzdCgpIHtcclxuXHJcbiAgICB0aGlzLm9wYXF1ZSA9IFtdO1xyXG4gICAgdGhpcy50cmFuc3BhcmVudCA9IFtdO1xyXG5cclxuICAgIHRoaXMuX29wYXF1ZUNvdW50ID0gMDtcclxuICAgIHRoaXMuX3RyYW5zcGFyZW50Q291bnQgPSAwO1xyXG59XHJcblxyXG5SZW5kZXJMaXN0LnByb3RvdHlwZS5zdGFydENvdW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fb3BhcXVlQ291bnQgPSAwO1xyXG4gICAgdGhpcy5fdHJhbnNwYXJlbnRDb3VudCA9IDA7XHJcbn07XHJcblxyXG5SZW5kZXJMaXN0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAob2JqZWN0LCBpc1RyYW5zcGFyZW50KSB7XHJcbiAgICBpZiAoaXNUcmFuc3BhcmVudCkge1xyXG4gICAgICAgIHRoaXMudHJhbnNwYXJlbnRbdGhpcy5fdHJhbnNwYXJlbnRDb3VudCsrXSA9IG9iamVjdDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMub3BhcXVlW3RoaXMuX29wYXF1ZUNvdW50KytdID0gb2JqZWN0O1xyXG4gICAgfVxyXG59O1xyXG5cclxuUmVuZGVyTGlzdC5wcm90b3R5cGUuZW5kQ291bnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLnRyYW5zcGFyZW50Lmxlbmd0aCA9IHRoaXMuX3RyYW5zcGFyZW50Q291bnQ7XHJcbiAgICB0aGlzLm9wYXF1ZS5sZW5ndGggPSB0aGlzLl9vcGFxdWVDb3VudDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LlNjZW5lLlJlbmRlckxpc3RcclxuICogQHByb3BlcnR5IHtBcnJheS48Y2xheS5SZW5kZXJhYmxlPn0gb3BhcXVlXHJcbiAqIEBwcm9wZXJ0eSB7QXJyYXkuPGNsYXkuUmVuZGVyYWJsZT59IHRyYW5zcGFyZW50XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlNjZW5lXHJcbiAqIEBleHRlbmRzIGNsYXkuTm9kZVxyXG4gKi9cclxudmFyIFNjZW5lID0gTm9kZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5TY2VuZSMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEdsb2JhbCBtYXRlcmlhbCBvZiBzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lk1hdGVyaWFsfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1hdGVyaWFsOiBudWxsLFxyXG5cclxuICAgICAgICBsaWdodHM6IFtdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTY2VuZSBib3VuZGluZyBib3ggaW4gdmlldyBzcGFjZS5cclxuICAgICAgICAgKiBVc2VkIHdoZW4gY2FtZXJhIG5lZWRzIHRvIGFkdWpzdCB0aGUgbmVhciBhbmQgZmFyIHBsYW5lIGF1dG9tYXRpY2FsbHlcclxuICAgICAgICAgKiBzbyB0aGF0IHRoZSB2aWV3IGZydXN0dW0gY29udGFpbnMgdGhlIHZpc2libGUgb2JqZWN0cyBhcyB0aWdodGx5IGFzIHBvc3NpYmxlLlxyXG4gICAgICAgICAqIE5vdGljZTpcclxuICAgICAgICAgKiAgSXQgaXMgdXBkYXRlZCBhZnRlciByZW5kZXJpbmcgKGluIHRoZSBzdGVwIG9mIGZydXN0dW0gY3VsbGluZyBwYXNzaW5nbHkpLiBTbyBtYXkgYmUgbm90IHNvIGFjY3VyYXRlLCBidXQgc2F2ZXMgYSBsb3Qgb2YgY2FsY3VsYXRpb25cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LkJvdW5kaW5nQm94fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZpZXdCb3VuZGluZ0JveExhc3RGcmFtZTogbmV3IEJvdW5kaW5nQm94KCksXHJcblxyXG4gICAgICAgIC8vIFVuaWZvcm1zIGZvciBzaGFkb3cgbWFwLlxyXG4gICAgICAgIHNoYWRvd1VuaWZvcm1zOiB7fSxcclxuXHJcbiAgICAgICAgX2NhbWVyYUxpc3Q6IFtdLFxyXG5cclxuICAgICAgICAvLyBQcm9wZXJ0aWVzIHRvIHNhdmUgdGhlIGxpZ2h0IGluZm9ybWF0aW9uIGluIHRoZSBzY2VuZVxyXG4gICAgICAgIC8vIFdpbGwgYmUgc2V0IGluIHRoZSByZW5kZXIgZnVuY3Rpb25cclxuICAgICAgICBfbGlnaHRVbmlmb3Jtczoge30sXHJcblxyXG4gICAgICAgIF9wcmV2aW91c0xpZ2h0TnVtYmVyOiB7fSxcclxuXHJcbiAgICAgICAgX2xpZ2h0TnVtYmVyOiB7XHJcbiAgICAgICAgICAgIC8vIGdyb3VwSWQ6IHtcclxuICAgICAgICAgICAgICAgIC8vIFBPSU5UX0xJR0hUOiAwLFxyXG4gICAgICAgICAgICAgICAgLy8gRElSRUNUSU9OQUxfTElHSFQ6IDAsXHJcbiAgICAgICAgICAgICAgICAvLyBTUE9UX0xJR0hUOiAwLFxyXG4gICAgICAgICAgICAgICAgLy8gQU1CSUVOVF9MSUdIVDogMCxcclxuICAgICAgICAgICAgICAgIC8vIEFNQklFTlRfU0hfTElHSFQ6IDBcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9saWdodFByb2dyYW1LZXlzOiB7fSxcclxuXHJcbiAgICAgICAgX25vZGVSZXBvc2l0b3J5OiB7fSxcclxuXHJcbiAgICAgICAgX3JlbmRlckxpc3RzOiBuZXcgTFJVQ2FjaGUoMjApXHJcblxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fc2NlbmUgPSB0aGlzO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuU2NlbmUucHJvdG90eXBlLiAqL1xyXG57XHJcblxyXG4gICAgLy8gQWRkIG5vZGUgdG8gc2NlbmVcclxuICAgIGFkZFRvU2NlbmU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYW1lcmEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NhbWVyYUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdGb3VuZCBtdWx0aXBsZSBjYW1lcmEgaW4gb25lIHNjZW5lLiBVc2UgdGhlIGZpc3Qgb25lLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbWVyYUxpc3QucHVzaChub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIExpZ2h0KSB7XHJcbiAgICAgICAgICAgIHRoaXMubGlnaHRzLnB1c2gobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlLm5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fbm9kZVJlcG9zaXRvcnlbbm9kZS5uYW1lXSA9IG5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBSZW1vdmUgbm9kZSBmcm9tIHNjZW5lXHJcbiAgICByZW1vdmVGcm9tU2NlbmU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgdmFyIGlkeDtcclxuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbWVyYSkge1xyXG4gICAgICAgICAgICBpZHggPSB0aGlzLl9jYW1lcmFMaXN0LmluZGV4T2Yobm9kZSk7XHJcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FtZXJhTGlzdC5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgTGlnaHQpIHtcclxuICAgICAgICAgICAgaWR4ID0gdGhpcy5saWdodHMuaW5kZXhPZihub2RlKTtcclxuICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpZ2h0cy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9kZS5uYW1lKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9ub2RlUmVwb3NpdG9yeVtub2RlLm5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgbm9kZSBieSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge05vZGV9XHJcbiAgICAgKiBAREVQUkVDQVRFRFxyXG4gICAgICovXHJcbiAgICBnZXROb2RlOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub2RlUmVwb3NpdG9yeVtuYW1lXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgbWFpbiBjYW1lcmEgb2YgdGhlIHNjZW5lLlxyXG4gICAgICogQHBhcmFtIHtjbGF5Z2wuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqL1xyXG4gICAgc2V0TWFpbkNhbWVyYTogZnVuY3Rpb24gKGNhbWVyYSkge1xyXG4gICAgICAgIHZhciBpZHggPSB0aGlzLl9jYW1lcmFMaXN0LmluZGV4T2YoY2FtZXJhKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FtZXJhTGlzdC5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY2FtZXJhTGlzdC51bnNoaWZ0KGNhbWVyYSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgbWFpbiBjYW1lcmEgb2YgdGhlIHNjZW5lLlxyXG4gICAgICovXHJcbiAgICBnZXRNYWluQ2FtZXJhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbWVyYUxpc3RbMF07XHJcbiAgICB9LFxyXG5cclxuICAgIGdldExpZ2h0czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxpZ2h0cztcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlTGlnaHRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0cyA9IHRoaXMubGlnaHRzO1xyXG4gICAgICAgIHRoaXMuX3ByZXZpb3VzTGlnaHROdW1iZXIgPSB0aGlzLl9saWdodE51bWJlcjtcclxuXHJcbiAgICAgICAgdmFyIGxpZ2h0TnVtYmVyID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaWdodHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGxpZ2h0ID0gbGlnaHRzW2ldO1xyXG4gICAgICAgICAgICBpZiAobGlnaHQuaW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZ3JvdXAgPSBsaWdodC5ncm91cDtcclxuICAgICAgICAgICAgaWYgKCFsaWdodE51bWJlcltncm91cF0pIHtcclxuICAgICAgICAgICAgICAgIGxpZ2h0TnVtYmVyW2dyb3VwXSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFVzZXIgY2FuIHVzZSBhbnkgdHlwZSBvZiBsaWdodFxyXG4gICAgICAgICAgICBsaWdodE51bWJlcltncm91cF1bbGlnaHQudHlwZV0gPSBsaWdodE51bWJlcltncm91cF1bbGlnaHQudHlwZV0gfHwgMDtcclxuICAgICAgICAgICAgbGlnaHROdW1iZXJbZ3JvdXBdW2xpZ2h0LnR5cGVdKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2xpZ2h0TnVtYmVyID0gbGlnaHROdW1iZXI7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGdyb3VwSWQgaW4gbGlnaHROdW1iZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fbGlnaHRQcm9ncmFtS2V5c1tncm91cElkXSA9IGdldFByb2dyYW1LZXkobGlnaHROdW1iZXJbZ3JvdXBJZF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlTGlnaHRVbmlmb3JtcygpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbm9kZSBhbmQgaXQncyBjaGlsZHJlbiwgaW5jbHVkaW5nIG1lc2gsIGNhbWVyYSwgbGlnaHQsIGV0Yy5cclxuICAgICAqIFVubGlrZSB1c2luZyBgTm9kZSNjbG9uZWAuIEl0IHdpbGwgY2xvbmUgc2tlbGV0b24gYW5kIHJlbWFwIHRoZSBqb2ludHMuIE1hdGVyaWFsIHdpbGwgYWxzbyBiZSBjbG9uZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk5vZGV9IG5vZGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgY2xvbmVOb2RlOiBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgICAgIHZhciBuZXdOb2RlID0gbm9kZS5jbG9uZSgpO1xyXG4gICAgICAgIHZhciBjbG9uZWROb2Rlc01hcCA9IHt9O1xyXG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkTm9kZXNNYXAoc05vZGUsIHROb2RlKSB7XHJcbiAgICAgICAgICAgIGNsb25lZE5vZGVzTWFwW3NOb2RlLl9fdWlkX19dID0gdE5vZGU7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNOb2RlLl9jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNDaGlsZCA9IHNOb2RlLl9jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgIHZhciB0Q2hpbGQgPSB0Tm9kZS5fY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgICAgICBidWlsZE5vZGVzTWFwKHNDaGlsZCwgdENoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBidWlsZE5vZGVzTWFwKG5vZGUsIG5ld05vZGUpO1xyXG5cclxuICAgICAgICBuZXdOb2RlLnRyYXZlcnNlKGZ1bmN0aW9uIChuZXdDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQuc2tlbGV0b24pIHtcclxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLnNrZWxldG9uID0gbmV3Q2hpbGQuc2tlbGV0b24uY2xvbmUoY2xvbmVkTm9kZXNNYXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQubWF0ZXJpYWwgPSBuZXdDaGlsZC5tYXRlcmlhbC5jbG9uZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXdOb2RlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYXZlcnNlIHRoZSBzY2VuZSBhbmQgYWRkIHRoZSByZW5kZXJhYmxlIG9iamVjdCB0byB0aGUgcmVuZGVyIGxpc3QuXHJcbiAgICAgKiBJdCBuZWVkcyBjYW1lcmEgZm9yIHRoZSBmcnVzdHVtIGN1bGxpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LkNhbWVyYX0gY2FtZXJhXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHVwZGF0ZVNjZW5lQm91bmRpbmdCb3hcclxuICAgICAqIEByZXR1cm4ge2NsYXkuU2NlbmUuUmVuZGVyTGlzdH1cclxuICAgICAqL1xyXG4gICAgdXBkYXRlUmVuZGVyTGlzdDogZnVuY3Rpb24gKGNhbWVyYSwgdXBkYXRlU2NlbmVCb3VuZGluZ0JveCkge1xyXG4gICAgICAgIHZhciBpZCA9IGNhbWVyYS5fX3VpZF9fO1xyXG4gICAgICAgIHZhciByZW5kZXJMaXN0ID0gdGhpcy5fcmVuZGVyTGlzdHMuZ2V0KGlkKTtcclxuICAgICAgICBpZiAoIXJlbmRlckxpc3QpIHtcclxuICAgICAgICAgICAgcmVuZGVyTGlzdCA9IG5ldyBSZW5kZXJMaXN0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlckxpc3RzLnB1dChpZCwgcmVuZGVyTGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlbmRlckxpc3Quc3RhcnRDb3VudCgpO1xyXG5cclxuICAgICAgICBpZiAodXBkYXRlU2NlbmVCb3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5taW4uc2V0KEluZmluaXR5LCBJbmZpbml0eSwgSW5maW5pdHkpO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5tYXguc2V0KC1JbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNjZW5lTWF0ZXJpYWxUcmFuc3BhcmVudCA9IHRoaXMubWF0ZXJpYWwgJiYgdGhpcy5tYXRlcmlhbC50cmFuc3BhcmVudCB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLl9kb1VwZGF0ZVJlbmRlckxpc3QodGhpcywgY2FtZXJhLCBzY2VuZU1hdGVyaWFsVHJhbnNwYXJlbnQsIHJlbmRlckxpc3QsIHVwZGF0ZVNjZW5lQm91bmRpbmdCb3gpO1xyXG5cclxuICAgICAgICByZW5kZXJMaXN0LmVuZENvdW50KCk7XHJcblxyXG4gICAgICAgIHJldHVybiByZW5kZXJMaXN0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCByZW5kZXIgbGlzdC4gVXNlZCBhZnRlciB7QGxpbmsgY2xheS5TY2VuZSN1cGRhdGVSZW5kZXJMaXN0fVxyXG4gICAgICogQHBhcmFtIHtjbGF5LkNhbWVyYX0gY2FtZXJhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlNjZW5lLlJlbmRlckxpc3R9XHJcbiAgICAgKi9cclxuICAgIGdldFJlbmRlckxpc3Q6IGZ1bmN0aW9uIChjYW1lcmEpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyTGlzdHMuZ2V0KGNhbWVyYS5fX3VpZF9fKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2RvVXBkYXRlUmVuZGVyTGlzdDogZnVuY3Rpb24gKHBhcmVudCwgY2FtZXJhLCBzY2VuZU1hdGVyaWFsVHJhbnNwYXJlbnQsIHJlbmRlckxpc3QsIHVwZGF0ZVNjZW5lQm91bmRpbmdCb3gpIHtcclxuICAgICAgICBpZiAocGFyZW50LmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE8gT3B0aW1pemVcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudC5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkID0gcGFyZW50Ll9jaGlsZHJlbltpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gRnJ1c3R1bSBjdWxsaW5nXHJcbiAgICAgICAgICAgICAgICB2YXIgd29ybGRNID0gY2hpbGQuaXNTa2lubmVkTWVzaCgpID8gSURFTlRJVFkgOiBjaGlsZC53b3JsZFRyYW5zZm9ybS5hcnJheTtcclxuICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IGNoaWxkLmdlb21ldHJ5O1xyXG5cclxuICAgICAgICAgICAgICAgIG1hdDQubXVsdGlwbHlBZmZpbmUoV09STERWSUVXLCBjYW1lcmEudmlld01hdHJpeC5hcnJheSwgd29ybGRNKTtcclxuICAgICAgICAgICAgICAgIGlmICh1cGRhdGVTY2VuZUJvdW5kaW5nQm94ICYmICFnZW9tZXRyeS5ib3VuZGluZ0JveCB8fCAhdGhpcy5pc0ZydXN0dW1DdWxsZWQoY2hpbGQsIGNhbWVyYSwgV09STERWSUVXKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckxpc3QuYWRkKGNoaWxkLCBjaGlsZC5tYXRlcmlhbC50cmFuc3BhcmVudCB8fCBzY2VuZU1hdGVyaWFsVHJhbnNwYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5fY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZG9VcGRhdGVSZW5kZXJMaXN0KGNoaWxkLCBjYW1lcmEsIHNjZW5lTWF0ZXJpYWxUcmFuc3BhcmVudCwgcmVuZGVyTGlzdCwgdXBkYXRlU2NlbmVCb3VuZGluZ0JveCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgYW4gc2NlbmUgb2JqZWN0IGlzIGN1bGxlZCBieSBjYW1lcmEgZnJ1c3R1bVxyXG4gICAgICpcclxuICAgICAqIE9iamVjdCBjYW4gYmUgYSByZW5kZXJhYmxlIG9yIGEgbGlnaHRcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHdvcmxkVmlld01hdCByZXByZXNlbnRlZCB3aXRoIGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwcm9qZWN0aW9uTWF0IHJlcHJlc2VudGVkIHdpdGggYXJyYXlcclxuICAgICAqL1xyXG4gICAgaXNGcnVzdHVtQ3VsbGVkOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIEZydXN0dW0gY3VsbGluZ1xyXG4gICAgICAgIC8vIGh0dHA6Ly93d3cuY3NlLmNoYWxtZXJzLnNlL351ZmZlL3ZmY19iYm94LnBkZlxyXG4gICAgICAgIHZhciBjdWxsaW5nQm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB2YXIgY3VsbGluZ01hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgY2FtZXJhLCB3b3JsZFZpZXdNYXQpIHtcclxuICAgICAgICAgICAgLy8gQm91bmRpbmcgYm94IGNhbiBiZSBhIHByb3BlcnR5IG9mIG9iamVjdChsaWtlIGxpZ2h0KSBvciByZW5kZXJhYmxlLmdlb21ldHJ5XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgdmFyIGdlb0JCb3ggPSBvYmplY3QuYm91bmRpbmdCb3g7XHJcbiAgICAgICAgICAgIGlmICghZ2VvQkJveCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9iamVjdC5za2VsZXRvbiAmJiBvYmplY3Quc2tlbGV0b24uYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgICAgICAgICBnZW9CQm94ID0gb2JqZWN0LnNrZWxldG9uLmJvdW5kaW5nQm94O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvQkJveCA9IG9iamVjdC5nZW9tZXRyeS5ib3VuZGluZ0JveDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFnZW9CQm94KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGN1bGxpbmdNYXRyaXguYXJyYXkgPSB3b3JsZFZpZXdNYXQ7XHJcbiAgICAgICAgICAgIGN1bGxpbmdCb3VuZGluZ0JveC50cmFuc2Zvcm1Gcm9tKGdlb0JCb3gsIGN1bGxpbmdNYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgLy8gUGFzc2luZ2x5IHVwZGF0ZSB0aGUgc2NlbmUgYm91bmRpbmcgYm94XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIGV4Y2x1ZGUgdmVyeSBsYXJnZSBtZXNoIGxpa2UgZ3JvdW5kIHBsYW5lIG9yIHRlcnJhaW4gP1xyXG4gICAgICAgICAgICAvLyBGSVhNRSBPbmx5IHJlbmRlcmVyYWJsZSB3aGljaCBjYXN0IHNoYWRvdyA/XHJcblxyXG4gICAgICAgICAgICAvLyBGSVhNRSBib3VuZGluZ0JveCBiZWNvbWVzIG11Y2ggbGFyZ2VyIGFmdGVyIHRyYW5zZm9ybWQuXHJcbiAgICAgICAgICAgIGlmIChvYmplY3QuY2FzdFNoYWRvdykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUudW5pb24oY3VsbGluZ0JvdW5kaW5nQm94KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBJZ25vcmUgZnJ1c3R1bSBjdWxsaW5nIGlmIG9iamVjdCBpcyBza2lubmVkIG1lc2guXHJcbiAgICAgICAgICAgIGlmIChvYmplY3QuZnJ1c3R1bUN1bGxpbmcpICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWN1bGxpbmdCb3VuZGluZ0JveC5pbnRlcnNlY3RCb3VuZGluZ0JveChjYW1lcmEuZnJ1c3R1bS5ib3VuZGluZ0JveCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjdWxsaW5nTWF0cml4LmFycmF5ID0gY2FtZXJhLnByb2plY3Rpb25NYXRyaXguYXJyYXk7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94Lm1heC5hcnJheVsyXSA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICBjdWxsaW5nQm91bmRpbmdCb3gubWluLmFycmF5WzJdIDwgMFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xpcCBpbiB0aGUgbmVhciBwbGFuZVxyXG4gICAgICAgICAgICAgICAgICAgIGN1bGxpbmdCb3VuZGluZ0JveC5tYXguYXJyYXlbMl0gPSAtMWUtMjA7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94LmFwcGx5UHJvamVjdGlvbihjdWxsaW5nTWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbWluID0gY3VsbGluZ0JvdW5kaW5nQm94Lm1pbi5hcnJheTtcclxuICAgICAgICAgICAgICAgIHZhciBtYXggPSBjdWxsaW5nQm91bmRpbmdCb3gubWF4LmFycmF5O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBtYXhbMF0gPCAtMSB8fCBtaW5bMF0gPiAxXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgbWF4WzFdIDwgLTEgfHwgbWluWzFdID4gMVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IG1heFsyXSA8IC0xIHx8IG1pblsyXSA+IDFcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgX3VwZGF0ZUxpZ2h0VW5pZm9ybXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbGlnaHRzID0gdGhpcy5saWdodHM7XHJcbiAgICAgICAgLy8gUHV0IHRoZSBsaWdodCBjYXN0IHNoYWRvdyBiZWZvcmUgdGhlIGxpZ2h0IG5vdCBjYXN0IHNoYWRvd1xyXG4gICAgICAgIGxpZ2h0cy5zb3J0KGxpZ2h0U29ydEZ1bmMpO1xyXG5cclxuICAgICAgICB2YXIgbGlnaHRVbmlmb3JtcyA9IHRoaXMuX2xpZ2h0VW5pZm9ybXM7XHJcbiAgICAgICAgZm9yICh2YXIgZ3JvdXAgaW4gbGlnaHRVbmlmb3Jtcykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gbGlnaHRVbmlmb3Jtc1tncm91cF0pIHtcclxuICAgICAgICAgICAgICAgIGxpZ2h0VW5pZm9ybXNbZ3JvdXBdW3N5bWJvbF0udmFsdWUubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG5cclxuICAgICAgICAgICAgdmFyIGxpZ2h0ID0gbGlnaHRzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGxpZ2h0LmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBncm91cCA9IGxpZ2h0Lmdyb3VwO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIGxpZ2h0LnVuaWZvcm1UZW1wbGF0ZXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtVHBsID0gbGlnaHQudW5pZm9ybVRlbXBsYXRlc1tzeW1ib2xdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdW5pZm9ybVRwbC52YWx1ZShsaWdodCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFsaWdodFVuaWZvcm1zW2dyb3VwXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0VW5pZm9ybXNbZ3JvdXBdID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWxpZ2h0VW5pZm9ybXNbZ3JvdXBdW3N5bWJvbF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBsaWdodFVuaWZvcm1zW2dyb3VwXVtzeW1ib2xdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBsdSA9IGxpZ2h0VW5pZm9ybXNbZ3JvdXBdW3N5bWJvbF07XHJcbiAgICAgICAgICAgICAgICBsdS50eXBlID0gdW5pZm9ybVRwbC50eXBlICsgJ3YnO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoICh1bmlmb3JtVHBsLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICcxaSc6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMWYnOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsdS52YWx1ZS5wdXNoKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMmYnOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzNmJzpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICc0Zic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsdWUubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx1LnZhbHVlLnB1c2godmFsdWVbal0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Vua293biBsaWdodCB1bmlmb3JtIHR5cGUgJyArIHVuaWZvcm1UcGwudHlwZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldExpZ2h0R3JvdXBzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0R3JvdXBzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgZ3JvdXBJZCBpbiB0aGlzLl9saWdodE51bWJlcikge1xyXG4gICAgICAgICAgICBsaWdodEdyb3Vwcy5wdXNoKGdyb3VwSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbGlnaHRHcm91cHM7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldE51bWJlckNoYW5nZWRMaWdodEdyb3VwczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsaWdodEdyb3VwcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGdyb3VwSWQgaW4gdGhpcy5fbGlnaHROdW1iZXIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNMaWdodE51bWJlckNoYW5nZWQoZ3JvdXBJZCkpIHtcclxuICAgICAgICAgICAgICAgIGxpZ2h0R3JvdXBzLnB1c2goZ3JvdXBJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxpZ2h0R3JvdXBzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgaWYgbGlnaHQgZ3JvdXAgaXMgZGlmZmVyZW50IHdpdGggc2luY2UgbGFzdCBmcmFtZVxyXG4gICAgLy8gVXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0byB1cGRhdGUgc2hhZGVyIGFuZCBzY2VuZSdzIHVuaWZvcm1zIGluIFJlbmRlcmVyLnJlbmRlclxyXG4gICAgaXNMaWdodE51bWJlckNoYW5nZWQ6IGZ1bmN0aW9uIChsaWdodEdyb3VwKSB7XHJcbiAgICAgICAgdmFyIHByZXZMaWdodE51bWJlciA9IHRoaXMuX3ByZXZpb3VzTGlnaHROdW1iZXI7XHJcbiAgICAgICAgdmFyIGN1cnJlbnRMaWdodE51bWJlciA9IHRoaXMuX2xpZ2h0TnVtYmVyO1xyXG4gICAgICAgIC8vIFBFTkRJTkcgUGVyZm9ybWFuY2VcclxuICAgICAgICBmb3IgKHZhciB0eXBlIGluIGN1cnJlbnRMaWdodE51bWJlcltsaWdodEdyb3VwXSkge1xyXG4gICAgICAgICAgICBpZiAoIXByZXZMaWdodE51bWJlcltsaWdodEdyb3VwXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMaWdodE51bWJlcltsaWdodEdyb3VwXVt0eXBlXSAhPT0gcHJldkxpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdW3R5cGVdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciB0eXBlIGluIHByZXZMaWdodE51bWJlcltsaWdodEdyb3VwXSkge1xyXG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRMaWdodE51bWJlcltsaWdodEdyb3VwXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMaWdodE51bWJlcltsaWdodEdyb3VwXVt0eXBlXSAhPT0gcHJldkxpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdW3R5cGVdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldExpZ2h0c051bWJlcnM6IGZ1bmN0aW9uIChsaWdodEdyb3VwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRQcm9ncmFtS2V5OiBmdW5jdGlvbiAobGlnaHRHcm91cCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9saWdodFByb2dyYW1LZXlzW2xpZ2h0R3JvdXBdO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRMaWdodFVuaWZvcm1zOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIHNldFVuaWZvcm1zKHVuaWZvcm1zLCBwcm9ncmFtLCByZW5kZXJlcikge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gdW5pZm9ybXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsdSA9IHVuaWZvcm1zW3N5bWJvbF07XHJcbiAgICAgICAgICAgICAgICBpZiAobHUudHlwZSA9PT0gJ3R2Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvZ3JhbS5oYXNVbmlmb3JtKHN5bWJvbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZXhTbG90cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbHUudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBsdS52YWx1ZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNsb3QgPSBwcm9ncmFtLnRha2VDdXJyZW50VGV4dHVyZVNsb3QocmVuZGVyZXIsIHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXhTbG90cy5wdXNoKHNsb3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0ocmVuZGVyZXIuZ2wsICcxaXYnLCBzeW1ib2wsIHRleFNsb3RzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShyZW5kZXJlci5nbCwgbHUudHlwZSwgc3ltYm9sLCBsdS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocHJvZ3JhbSwgbGlnaHRHcm91cCwgcmVuZGVyZXIpIHtcclxuICAgICAgICAgICAgc2V0VW5pZm9ybXModGhpcy5fbGlnaHRVbmlmb3Jtc1tsaWdodEdyb3VwXSwgcHJvZ3JhbSwgcmVuZGVyZXIpO1xyXG4gICAgICAgICAgICAvLyBTZXQgc2hhZG93c1xyXG4gICAgICAgICAgICBzZXRVbmlmb3Jtcyh0aGlzLnNoYWRvd1VuaWZvcm1zLCBwcm9ncmFtLCByZW5kZXJlcik7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIHNlbGYsIGNsZWFyIGFsbCB0aGUgc2NlbmUgb2JqZWN0c1xyXG4gICAgICogQnV0IHJlc291cmNlcyBvZiBnbCBsaWtlIHRleHV0dXJlLCBzaGFkZXIgd2lsbCBub3QgYmUgZGlzcG9zZWQuXHJcbiAgICAgKiBNb3N0bHkgeW91IHNob3VsZCB1c2UgZGlzcG9zZVNjZW5lIG1ldGhvZCBpbiBSZW5kZXJlciB0byBkbyBkaXNwb3NlLlxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fb3BhcXVlTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuX3RyYW5zcGFyZW50TGlzdCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLmxpZ2h0cyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLl9saWdodFVuaWZvcm1zID0ge307XHJcblxyXG4gICAgICAgIHRoaXMuX2xpZ2h0TnVtYmVyID0ge307XHJcbiAgICAgICAgdGhpcy5fbm9kZVJlcG9zaXRvcnkgPSB7fTtcclxuICAgIH1cclxufSk7XHJcblxyXG5mdW5jdGlvbiBsaWdodFNvcnRGdW5jKGEsIGIpIHtcclxuICAgIGlmIChiLmNhc3RTaGFkb3cgJiYgIWEuY2FzdFNoYWRvdykge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTY2VuZTtcclxuIiwidmFyIERJUlRZX1BSRUZJWCA9ICdfX2R0X18nO1xyXG5cclxudmFyIENhY2hlID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIHRoaXMuX2NvbnRleHRJZCA9IDA7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVzID0gW107XHJcblxyXG4gICAgdGhpcy5fY29udGV4dCA9IHt9O1xyXG59O1xyXG5cclxuQ2FjaGUucHJvdG90eXBlID0ge1xyXG5cclxuICAgIHVzZTogZnVuY3Rpb24gKGNvbnRleHRJZCwgZG9jdW1lbnRTY2hlbWEpIHtcclxuICAgICAgICB2YXIgY2FjaGVzID0gdGhpcy5fY2FjaGVzO1xyXG4gICAgICAgIGlmICghY2FjaGVzW2NvbnRleHRJZF0pIHtcclxuICAgICAgICAgICAgY2FjaGVzW2NvbnRleHRJZF0gPSB7fTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgY2FjaGVzW2NvbnRleHRJZF0gPSBkb2N1bWVudFNjaGVtYSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NvbnRleHRJZCA9IGNvbnRleHRJZDtcclxuXHJcbiAgICAgICAgdGhpcy5fY29udGV4dCA9IGNhY2hlc1tjb250ZXh0SWRdO1xyXG4gICAgfSxcclxuXHJcbiAgICBwdXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dFtrZXldID0gdmFsdWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0W2tleV07XHJcbiAgICB9LFxyXG5cclxuICAgIGRpcnR5OiBmdW5jdGlvbiAoZmllbGQpIHtcclxuICAgICAgICBmaWVsZCA9IGZpZWxkIHx8ICcnO1xyXG4gICAgICAgIHZhciBrZXkgPSBESVJUWV9QUkVGSVggKyBmaWVsZDtcclxuICAgICAgICB0aGlzLnB1dChrZXksIHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBkaXJ0eUFsbDogZnVuY3Rpb24gKGZpZWxkKSB7XHJcbiAgICAgICAgZmllbGQgPSBmaWVsZCB8fCAnJztcclxuICAgICAgICB2YXIga2V5ID0gRElSVFlfUFJFRklYICsgZmllbGQ7XHJcbiAgICAgICAgdmFyIGNhY2hlcyA9IHRoaXMuX2NhY2hlcztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhY2hlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoY2FjaGVzW2ldKSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZXNbaV1ba2V5XSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGZyZXNoOiBmdW5jdGlvbiAoZmllbGQpIHtcclxuICAgICAgICBmaWVsZCA9IGZpZWxkIHx8ICcnO1xyXG4gICAgICAgIHZhciBrZXkgPSBESVJUWV9QUkVGSVggKyBmaWVsZDtcclxuICAgICAgICB0aGlzLnB1dChrZXksIGZhbHNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgZnJlc2hBbGw6IGZ1bmN0aW9uIChmaWVsZCkge1xyXG4gICAgICAgIGZpZWxkID0gZmllbGQgfHwgJyc7XHJcbiAgICAgICAgdmFyIGtleSA9IERJUlRZX1BSRUZJWCArIGZpZWxkO1xyXG4gICAgICAgIHZhciBjYWNoZXMgPSB0aGlzLl9jYWNoZXM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWNoZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGNhY2hlc1tpXSkge1xyXG4gICAgICAgICAgICAgICAgY2FjaGVzW2ldW2tleV0gPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXJ0eTogZnVuY3Rpb24gKGZpZWxkKSB7XHJcbiAgICAgICAgZmllbGQgPSBmaWVsZCB8fCAnJztcclxuICAgICAgICB2YXIga2V5ID0gRElSVFlfUFJFRklYICsgZmllbGQ7XHJcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLl9jb250ZXh0O1xyXG4gICAgICAgIHJldHVybiAgIWNvbnRleHQuaGFzT3duUHJvcGVydHkoa2V5KVxyXG4gICAgICAgICAgICB8fCBjb250ZXh0W2tleV0gPT09IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlbGV0ZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0SWQpIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5fY2FjaGVzW2NvbnRleHRJZF07XHJcbiAgICAgICAgdGhpcy5fY29udGV4dCA9IHt9O1xyXG4gICAgfSxcclxuXHJcbiAgICBkZWxldGU6IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5fY29udGV4dFtrZXldO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhckFsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlcyA9IHt9O1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRDb250ZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIGVhY2hDb250ZXh0IDogZnVuY3Rpb24gKGNiLCBjb250ZXh0KSB7XHJcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLl9jYWNoZXMpO1xyXG4gICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIGNiICYmIGNiLmNhbGwoY29udGV4dCwga2V5KTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgbWlzczogZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHJldHVybiAhIHRoaXMuX2NvbnRleHQuaGFzT3duUHJvcGVydHkoa2V5KTtcclxuICAgIH1cclxufTtcclxuXHJcbkNhY2hlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhY2hlO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ2FjaGU7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IENhY2hlIGZyb20gJy4vY29yZS9DYWNoZSc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcblxyXG5mdW5jdGlvbiBnZXRBcnJheUN0b3JCeVR5cGUgKHR5cGUpIHtcclxuICAgIHJldHVybiAoe1xyXG4gICAgICAgICdieXRlJzogdmVuZG9yLkludDhBcnJheSxcclxuICAgICAgICAndWJ5dGUnOiB2ZW5kb3IuVWludDhBcnJheSxcclxuICAgICAgICAnc2hvcnQnOiB2ZW5kb3IuSW50MTZBcnJheSxcclxuICAgICAgICAndXNob3J0JzogdmVuZG9yLlVpbnQxNkFycmF5XHJcbiAgICB9KVt0eXBlXSB8fCB2ZW5kb3IuRmxvYXQzMkFycmF5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYWtlQXR0cktleShhdHRyTmFtZSkge1xyXG4gICAgcmV0dXJuICdhdHRyXycgKyBhdHRyTmFtZTtcclxufVxyXG4vKipcclxuICogR2VvbWV0cnlCYXNlIGF0dHJpYnV0ZVxyXG4gKiBAYWxpYXMgY2xheS5HZW9tZXRyeUJhc2UuQXR0cmlidXRlXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKi9cclxuZnVuY3Rpb24gQXR0cmlidXRlKG5hbWUsIHR5cGUsIHNpemUsIHNlbWFudGljKSB7XHJcbiAgICAvKipcclxuICAgICAqIEF0dHJpYnV0ZSBuYW1lXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRyaWJ1dGUgdHlwZVxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsgYCdieXRlJ2BcclxuICAgICAqICArIGAndWJ5dGUnYFxyXG4gICAgICogICsgYCdzaG9ydCdgXHJcbiAgICAgKiAgKyBgJ3VzaG9ydCdgXHJcbiAgICAgKiAgKyBgJ2Zsb2F0J2AgTW9zdCBjb21tb25seSB1c2VkLlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGhpcy50eXBlID0gdHlwZTtcclxuICAgIC8qKlxyXG4gICAgICogU2l6ZSBvZiBhdHRyaWJ1dGUgY29tcG9uZW50LiAxIC0gNC5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuc2l6ZSA9IHNpemU7XHJcbiAgICAvKipcclxuICAgICAqIFNlbWFudGljIG9mIHRoaXMgYXR0cmlidXRlLlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsgYCdQT1NJVElPTidgXHJcbiAgICAgKiAgKyBgJ05PUk1BTCdgXHJcbiAgICAgKiAgKyBgJ0JJTk9STUFMJ2BcclxuICAgICAqICArIGAnVEFOR0VOVCdgXHJcbiAgICAgKiAgKyBgJ1RFWENPT1JEJ2BcclxuICAgICAqICArIGAnVEVYQ09PUkRfMCdgXHJcbiAgICAgKiAgKyBgJ1RFWENPT1JEXzEnYFxyXG4gICAgICogICsgYCdDT0xPUidgXHJcbiAgICAgKiAgKyBgJ0pPSU5UJ2BcclxuICAgICAqICArIGAnV0VJR0hUJ2BcclxuICAgICAqXHJcbiAgICAgKiBJbiBzaGFkZXIsIGF0dHJpYnV0ZSB3aXRoIHNhbWUgc2VtYW50aWMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IG1hcHBlZC4gRm9yIGV4YW1wbGU6XHJcbiAgICAgKiBgYGBnbHNsXHJcbiAgICAgKiBhdHRyaWJ1dGUgdmVjMyBwb3M6IFBPU0lUSU9OXHJcbiAgICAgKiBgYGBcclxuICAgICAqIHdpbGwgdXNlIHRoZSBhdHRyaWJ1dGUgdmFsdWUgd2l0aCBzZW1hbnRpYyBQT1NJVElPTiBpbiBnZW9tZXRyeSwgbm8gbWF0dGVyIHdoYXQgbmFtZSBpdCB1c2VkLlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGhpcy5zZW1hbnRpYyA9IHNlbWFudGljIHx8ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS5cclxuICAgICAqIEB0eXBlIHtUeXBlZEFycmF5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuXHJcbiAgICAvLyBJbml0IGdldHRlciBzZXR0ZXJcclxuICAgIHN3aXRjaCAoc2l6ZSkge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgdGhpcy5nZXQgPSBmdW5jdGlvbiAoaWR4KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVtpZHhdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNldCA9IGZ1bmN0aW9uIChpZHgsIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2lkeF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy8gQ29weSBmcm9tIHNvdXJjZSB0byB0YXJnZXRcclxuICAgICAgICAgICAgdGhpcy5jb3B5ID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW3RhcmdldF0gPSB0aGlzLnZhbHVlW3RhcmdldF07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgdGhpcy5nZXQgPSBmdW5jdGlvbiAoaWR4LCBvdXQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgb3V0WzBdID0gYXJyW2lkeCAqIDJdO1xyXG4gICAgICAgICAgICAgICAgb3V0WzFdID0gYXJyW2lkeCAqIDIgKyAxXTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gZnVuY3Rpb24gKGlkeCwgdmFsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGFycltpZHggKiAyXSA9IHZhbFswXTtcclxuICAgICAgICAgICAgICAgIGFycltpZHggKiAyICsgMV0gPSB2YWxbMV07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuY29weSA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2UgKj0gMjtcclxuICAgICAgICAgICAgICAgIHRhcmdldCAqPSAyO1xyXG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldF0gPSBhcnJbc291cmNlXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAxXSA9IGFycltzb3VyY2UgKyAxXTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICB0aGlzLmdldCA9IGZ1bmN0aW9uIChpZHgsIG91dCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkeDMgPSBpZHggKiAzO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBvdXRbMF0gPSBhcnJbaWR4M107XHJcbiAgICAgICAgICAgICAgICBvdXRbMV0gPSBhcnJbaWR4MyArIDFdO1xyXG4gICAgICAgICAgICAgICAgb3V0WzJdID0gYXJyW2lkeDMgKyAyXTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gZnVuY3Rpb24gKGlkeCwgdmFsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4MyA9IGlkeCAqIDM7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGFycltpZHgzXSA9IHZhbFswXTtcclxuICAgICAgICAgICAgICAgIGFycltpZHgzICsgMV0gPSB2YWxbMV07XHJcbiAgICAgICAgICAgICAgICBhcnJbaWR4MyArIDJdID0gdmFsWzJdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmNvcHkgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgc291cmNlICo9IDM7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgKj0gMztcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXRdID0gYXJyW3NvdXJjZV07XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgMV0gPSBhcnJbc291cmNlICsgMV07XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgMl0gPSBhcnJbc291cmNlICsgMl07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgdGhpcy5nZXQgPSBmdW5jdGlvbiAoaWR4LCBvdXQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkeDQgPSBpZHggKiA0O1xyXG4gICAgICAgICAgICAgICAgb3V0WzBdID0gYXJyW2lkeDRdO1xyXG4gICAgICAgICAgICAgICAgb3V0WzFdID0gYXJyW2lkeDQgKyAxXTtcclxuICAgICAgICAgICAgICAgIG91dFsyXSA9IGFycltpZHg0ICsgMl07XHJcbiAgICAgICAgICAgICAgICBvdXRbM10gPSBhcnJbaWR4NCArIDNdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZXQgPSBmdW5jdGlvbiAoaWR4LCB2YWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkeDQgPSBpZHggKiA0O1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeDRdID0gdmFsWzBdO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeDQgKyAxXSA9IHZhbFsxXTtcclxuICAgICAgICAgICAgICAgIGFycltpZHg0ICsgMl0gPSB2YWxbMl07XHJcbiAgICAgICAgICAgICAgICBhcnJbaWR4NCArIDNdID0gdmFsWzNdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmNvcHkgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgc291cmNlICo9IDQ7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgKj0gNDtcclxuICAgICAgICAgICAgICAgIC8vIGNvcHlXaXRoaW4gaXMgZXh0cmVtZWx5IHNsb3dcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXRdID0gYXJyW3NvdXJjZV07XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgMV0gPSBhcnJbc291cmNlICsgMV07XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgMl0gPSBhcnJbc291cmNlICsgMl07XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgM10gPSBhcnJbc291cmNlICsgM107XHJcbiAgICAgICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXQgaXRlbSB2YWx1ZSBhdCBnaXZlIGluZGV4LiBTZWNvbmQgcGFyYW1ldGVyIHZhbCBpcyBudW1iZXIgaWYgc2l6ZSBpcyAxXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAbmFtZSBjbGF5Lkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGUjc2V0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICogQHBhcmFtIHtudW1iZXJbXXxudW1iZXJ9IHZhbFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJykuc2V0KDAsIFsxLCAxLCAxXSk7XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEdldCBpdGVtIHZhbHVlIGF0IGdpdmUgaW5kZXguIFNlY29uZCBwYXJhbWV0ZXIgb3V0IGlzIG5vIG5lZWQgaWYgc2l6ZSBpcyAxXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAbmFtZSBjbGF5Lkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGUjc2V0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICogQHBhcmFtIHtudW1iZXJbXX0gW291dF1cclxuICogQGV4YW1wbGVcclxuICogZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpLmdldCgwLCBvdXQpO1xyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBJbml0aWFsaXplIGF0dHJpYnV0ZSB3aXRoIGdpdmVuIHZlcnRleCBjb3VudFxyXG4gKiBAcGFyYW0ge251bWJlcn0gblZlcnRleFxyXG4gKi9cclxuQXR0cmlidXRlLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKG5WZXJ0ZXgpIHtcclxuICAgIGlmICghdGhpcy52YWx1ZSB8fCB0aGlzLnZhbHVlLmxlbmd0aCAhPSBuVmVydGV4ICogdGhpcy5zaXplKSB7XHJcbiAgICAgICAgdmFyIEFycmF5Q29uc3RydWN0b3IgPSBnZXRBcnJheUN0b3JCeVR5cGUodGhpcy50eXBlKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IEFycmF5Q29uc3RydWN0b3IoblZlcnRleCAqIHRoaXMuc2l6ZSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogSW5pdGlhbGl6ZSBhdHRyaWJ1dGUgd2l0aCBnaXZlbiBhcnJheS4gV2hpY2ggY2FuIGJlIDEgZGltZW5zaW9uYWwgb3IgMiBkaW1lbnNpb25hbFxyXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpLmZyb21BcnJheShcclxuICogICAgICBbLTEsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDBdXHJcbiAqICApO1xyXG4gKiAgZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpLmZyb21BcnJheShcclxuICogICAgICBbIFstMSwgMCwgMF0sIFsxLCAwLCAwXSwgWzAsIDEsIDBdIF1cclxuICogICk7XHJcbiAqL1xyXG5BdHRyaWJ1dGUucHJvdG90eXBlLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSkge1xyXG4gICAgdmFyIEFycmF5Q29uc3RydWN0b3IgPSBnZXRBcnJheUN0b3JCeVR5cGUodGhpcy50eXBlKTtcclxuICAgIHZhciB2YWx1ZTtcclxuICAgIC8vIENvbnZlcnQgMmQgYXJyYXkgdG8gZmxhdFxyXG4gICAgaWYgKGFycmF5WzBdICYmIChhcnJheVswXS5sZW5ndGgpKSB7XHJcbiAgICAgICAgdmFyIG4gPSAwO1xyXG4gICAgICAgIHZhciBzaXplID0gdGhpcy5zaXplO1xyXG4gICAgICAgIHZhbHVlID0gbmV3IEFycmF5Q29uc3RydWN0b3IoYXJyYXkubGVuZ3RoICogc2l6ZSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNpemU7IGorKykge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVbbisrXSA9IGFycmF5W2ldW2pdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihhcnJheSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbn07XHJcblxyXG5BdHRyaWJ1dGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oY29weVZhbHVlKSB7XHJcbiAgICB2YXIgcmV0ID0gbmV3IEF0dHJpYnV0ZSh0aGlzLm5hbWUsIHRoaXMudHlwZSwgdGhpcy5zaXplLCB0aGlzLnNlbWFudGljKTtcclxuICAgIC8vIEZJWE1FXHJcbiAgICBpZiAoY29weVZhbHVlKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCd0b2RvJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gQXR0cmlidXRlQnVmZmVyKG5hbWUsIHR5cGUsIGJ1ZmZlciwgc2l6ZSwgc2VtYW50aWMpIHtcclxuICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XHJcbiAgICB0aGlzLnNpemUgPSBzaXplO1xyXG4gICAgdGhpcy5zZW1hbnRpYyA9IHNlbWFudGljO1xyXG5cclxuICAgIC8vIFRvIGJlIHNldCBpbiBtZXNoXHJcbiAgICAvLyBzeW1ib2wgaW4gdGhlIHNoYWRlclxyXG4gICAgdGhpcy5zeW1ib2wgPSAnJztcclxuXHJcbiAgICAvLyBOZWVkcyByZW1vdmUgZmxhZ1xyXG4gICAgdGhpcy5uZWVkc1JlbW92ZSA9IGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBJbmRpY2VzQnVmZmVyKGJ1ZmZlcikge1xyXG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XHJcbiAgICB0aGlzLmNvdW50ID0gMDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEJhc2Ugb2YgYWxsIGdlb21ldHJ5LiBVc2Uge0BsaW5rIGNsYXkuR2VvbWV0cnl9IGZvciBjb21tb24gM0QgdXNhZ2UuXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lkdlb21ldHJ5QmFzZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEdlb21ldHJ5QmFzZSA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuR2VvbWV0cnlCYXNlIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXR0cmlidXRlcyBvZiBnZW9tZXRyeS5cclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIGNsYXkuR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZT59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXR0cmlidXRlczoge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEluZGljZXMgb2YgZ2VvbWV0cnkuXHJcbiAgICAgICAgICogQHR5cGUge1VpbnQxNkFycmF5fFVpbnQzMkFycmF5fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGluZGljZXM6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIHZlcnRpY2VzIGRhdGEgZHluYW1pY2FsbHkgdXBkYXRlZC5cclxuICAgICAgICAgKiBBdHRyaWJ1dGVzIHZhbHVlIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXIgZmlyc3QgcmVuZGVyIGlmIGR5YW5taWMgaXMgZmFsc2UuXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZHluYW1pYzogdHJ1ZSxcclxuXHJcbiAgICAgICAgX2VuYWJsZWRBdHRyaWJ1dGVzOiBudWxsLFxyXG5cclxuICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgLy8gSW5pdCBpdCBoZXJlIHRvIGF2b2lkIGRlb3B0aW1pemF0aW9uIHdoZW4gaXQncyBhc3NpZ25lZCBpbiBhcHBsaWNhdGlvbiBkeW5hbWljYWxseVxyXG4gICAgICAgIF9fdXNlZDogMFxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICAvLyBVc2UgY2FjaGVcclxuICAgIHRoaXMuX2NhY2hlID0gbmV3IENhY2hlKCk7XHJcblxyXG4gICAgdGhpcy5fYXR0cmlidXRlTGlzdCA9IE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcyk7XHJcblxyXG4gICAgdGhpcy5fX3Zhb0NhY2hlID0ge307XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5HZW9tZXRyeUJhc2UucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogTWFpbiBhdHRyaWJ1dGUgd2lsbCBiZSB1c2VkIHRvIGNvdW50IHZlcnRleCBudW1iZXJcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIG1haW5BdHRyaWJ1dGU6ICcnLFxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VyIGRlZmluZWQgcGlja2luZyBhbGdvcml0aG0gaW5zdGVhZCBvZiBkZWZhdWx0XHJcbiAgICAgKiB0cmlhbmdsZSByYXkgaW50ZXJzZWN0aW9uXHJcbiAgICAgKiB4LCB5IGFyZSBOREMuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAoeCwgeSwgcmVuZGVyZXIsIGNhbWVyYSwgcmVuZGVyYWJsZSwgb3V0KSA9PiBib29sZWFuXHJcbiAgICAgKiBgYGBcclxuICAgICAqIEB0eXBlIHs/RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIHBpY2s6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VyIGRlZmluZWQgcmF5IHBpY2tpbmcgYWxnb3JpdGhtIGluc3RlYWQgb2YgZGVmYXVsdFxyXG4gICAgICogdHJpYW5nbGUgcmF5IGludGVyc2VjdGlvblxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogKHJheTogY2xheS5SYXksIHJlbmRlcmFibGU6IGNsYXkuUmVuZGVyYWJsZSwgb3V0OiBBcnJheSkgPT4gYm9vbGVhblxyXG4gICAgICogYGBgXHJcbiAgICAgKiBAdHlwZSB7P0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICBwaWNrQnlSYXk6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIGF0dHJpYnV0ZXMgYW5kIGluZGljZXMgaW4gZ2VvbWV0cnkgbmVlZHMgdG8gdXBkYXRlLlxyXG4gICAgICogVXN1YWxseSBjYWxsZWQgYWZ0ZXIgeW91IGNoYW5nZSB0aGUgZGF0YSBpbiBhdHRyaWJ1dGVzLlxyXG4gICAgICovXHJcbiAgICBkaXJ0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBlbmFibGVkQXR0cmlidXRlcyA9IHRoaXMuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuYWJsZWRBdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlydHlBdHRyaWJ1dGUoZW5hYmxlZEF0dHJpYnV0ZXNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5SW5kaWNlcygpO1xyXG4gICAgICAgIHRoaXMuX2VuYWJsZWRBdHRyaWJ1dGVzID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5fY2FjaGUuZGlydHkoJ2FueScpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogTWFyayB0aGUgaW5kaWNlcyBuZWVkcyB0byB1cGRhdGUuXHJcbiAgICAgKi9cclxuICAgIGRpcnR5SW5kaWNlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlLmRpcnR5QWxsKCdpbmRpY2VzJyk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIHRoZSBhdHRyaWJ1dGVzIG5lZWRzIHRvIHVwZGF0ZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbYXR0ck5hbWVdXHJcbiAgICAgKi9cclxuICAgIGRpcnR5QXR0cmlidXRlOiBmdW5jdGlvbiAoYXR0ck5hbWUpIHtcclxuICAgICAgICB0aGlzLl9jYWNoZS5kaXJ0eUFsbChtYWtlQXR0cktleShhdHRyTmFtZSkpO1xyXG4gICAgICAgIHRoaXMuX2NhY2hlLmRpcnR5QWxsKCdhdHRyaWJ1dGVzJyk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgaW5kaWNlcyBvZiB0cmlhbmdsZSBhdCBnaXZlbiBpbmRleC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IG91dFxyXG4gICAgICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgKi9cclxuICAgIGdldFRyaWFuZ2xlSW5kaWNlczogZnVuY3Rpb24gKGlkeCwgb3V0KSB7XHJcbiAgICAgICAgaWYgKGlkeCA8IHRoaXMudHJpYW5nbGVDb3VudCAmJiBpZHggPj0gMCkge1xyXG4gICAgICAgICAgICBpZiAoIW91dCkge1xyXG4gICAgICAgICAgICAgICAgb3V0ID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XHJcbiAgICAgICAgICAgIG91dFswXSA9IGluZGljZXNbaWR4ICogM107XHJcbiAgICAgICAgICAgIG91dFsxXSA9IGluZGljZXNbaWR4ICogMyArIDFdO1xyXG4gICAgICAgICAgICBvdXRbMl0gPSBpbmRpY2VzW2lkeCAqIDMgKyAyXTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGluZGljZXMgb2YgdHJpYW5nbGUgYXQgZ2l2ZW4gaW5kZXguXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcclxuICAgICAqL1xyXG4gICAgc2V0VHJpYW5nbGVJbmRpY2VzOiBmdW5jdGlvbiAoaWR4LCBhcnIpIHtcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICBpbmRpY2VzW2lkeCAqIDNdID0gYXJyWzBdO1xyXG4gICAgICAgIGluZGljZXNbaWR4ICogMyArIDFdID0gYXJyWzFdO1xyXG4gICAgICAgIGluZGljZXNbaWR4ICogMyArIDJdID0gYXJyWzJdO1xyXG4gICAgfSxcclxuXHJcbiAgICBpc1VzZUluZGljZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLmluZGljZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZSBpbmRpY2VzIGZyb20gYW4gYXJyYXkuXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxyXG4gICAgICovXHJcbiAgICBpbml0SW5kaWNlc0Zyb21BcnJheTogZnVuY3Rpb24gKGFycmF5KSB7XHJcbiAgICAgICAgdmFyIHZhbHVlO1xyXG4gICAgICAgIHZhciBBcnJheUNvbnN0cnVjdG9yID0gdGhpcy52ZXJ0ZXhDb3VudCA+IDB4ZmZmZlxyXG4gICAgICAgICAgICA/IHZlbmRvci5VaW50MzJBcnJheSA6IHZlbmRvci5VaW50MTZBcnJheTtcclxuICAgICAgICAvLyBDb252ZXJ0IDJkIGFycmF5IHRvIGZsYXRcclxuICAgICAgICBpZiAoYXJyYXlbMF0gJiYgKGFycmF5WzBdLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgdmFyIG4gPSAwO1xyXG4gICAgICAgICAgICB2YXIgc2l6ZSA9IDM7XHJcblxyXG4gICAgICAgICAgICB2YWx1ZSA9IG5ldyBBcnJheUNvbnN0cnVjdG9yKGFycmF5Lmxlbmd0aCAqIHNpemUpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNpemU7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlW24rK10gPSBhcnJheVtpXVtqXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihhcnJheSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmluZGljZXMgPSB2YWx1ZTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIG5ldyBhdHRyaWJ1dGVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VtYW50aWNdXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUF0dHJpYnV0ZTogZnVuY3Rpb24gKG5hbWUsIHR5cGUsIHNpemUsIHNlbWFudGljKSB7XHJcbiAgICAgICAgdmFyIGF0dHJpYiA9IG5ldyBBdHRyaWJ1dGUobmFtZSwgdHlwZSwgc2l6ZSwgc2VtYW50aWMpO1xyXG4gICAgICAgIGlmICh0aGlzLmF0dHJpYnV0ZXNbbmFtZV0pIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlc1tuYW1lXSA9IGF0dHJpYjtcclxuICAgICAgICB0aGlzLl9hdHRyaWJ1dGVMaXN0LnB1c2gobmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIGF0dHJpYjtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhdHRyaWJ1dGVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUF0dHJpYnV0ZTogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICB2YXIgYXR0cmlidXRlTGlzdCA9IHRoaXMuX2F0dHJpYnV0ZUxpc3Q7XHJcbiAgICAgICAgdmFyIGlkeCA9IGF0dHJpYnV0ZUxpc3QuaW5kZXhPZihuYW1lKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgYXR0cmlidXRlTGlzdC5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYXR0cmlidXRlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5HZW9tZXRyeUJhc2UuQXR0cmlidXRlfVxyXG4gICAgICovXHJcbiAgICBnZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZW5hYmxlZCBhdHRyaWJ1dGVzIG5hbWUgbGlzdFxyXG4gICAgICogQXR0cmlidXRlIHdoaWNoIGhhcyB0aGUgc2FtZSB2ZXJ0ZXggbnVtYmVyIHdpdGggcG9zaXRpb24gaXMgdHJlYXRlZCBhcyBhIGVuYWJsZWQgYXR0cmlidXRlXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX1cclxuICAgICAqL1xyXG4gICAgZ2V0RW5hYmxlZEF0dHJpYnV0ZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZW5hYmxlZEF0dHJpYnV0ZXMgPSB0aGlzLl9lbmFibGVkQXR0cmlidXRlcztcclxuICAgICAgICB2YXIgYXR0cmlidXRlTGlzdCA9IHRoaXMuX2F0dHJpYnV0ZUxpc3Q7XHJcbiAgICAgICAgLy8gQ2FjaGVcclxuICAgICAgICBpZiAoZW5hYmxlZEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVuYWJsZWRBdHRyaWJ1dGVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIHZhciBuVmVydGV4ID0gdGhpcy52ZXJ0ZXhDb3VudDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTGlzdFtpXTtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYiA9IHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICAgICAgaWYgKGF0dHJpYi52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGF0dHJpYi52YWx1ZS5sZW5ndGggPT09IG5WZXJ0ZXggKiBhdHRyaWIuc2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9lbmFibGVkQXR0cmlidXRlcyA9IHJlc3VsdDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0QnVmZmVyQ2h1bmtzOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICAgICAgdmFyIGlzQXR0cmlidXRlc0RpcnR5ID0gY2FjaGUuaXNEaXJ0eSgnYXR0cmlidXRlcycpO1xyXG4gICAgICAgIHZhciBpc0luZGljZXNEaXJ0eSA9IGNhY2hlLmlzRGlydHkoJ2luZGljZXMnKTtcclxuICAgICAgICBpZiAoaXNBdHRyaWJ1dGVzRGlydHkgfHwgaXNJbmRpY2VzRGlydHkpIHtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQnVmZmVyKHJlbmRlcmVyLmdsLCBpc0F0dHJpYnV0ZXNEaXJ0eSwgaXNJbmRpY2VzRGlydHkpO1xyXG4gICAgICAgICAgICB2YXIgZW5hYmxlZEF0dHJpYnV0ZXMgPSB0aGlzLmdldEVuYWJsZWRBdHRyaWJ1dGVzKCk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5hYmxlZEF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNhY2hlLmZyZXNoKG1ha2VBdHRyS2V5KGVuYWJsZWRBdHRyaWJ1dGVzW2ldKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FjaGUuZnJlc2goJ2F0dHJpYnV0ZXMnKTtcclxuICAgICAgICAgICAgY2FjaGUuZnJlc2goJ2luZGljZXMnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FjaGUuZnJlc2goJ2FueScpO1xyXG4gICAgICAgIHJldHVybiBjYWNoZS5nZXQoJ2NodW5rcycpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlQnVmZmVyOiBmdW5jdGlvbiAoX2dsLCBpc0F0dHJpYnV0ZXNEaXJ0eSwgaXNJbmRpY2VzRGlydHkpIHtcclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICB2YXIgY2h1bmtzID0gY2FjaGUuZ2V0KCdjaHVua3MnKTtcclxuICAgICAgICB2YXIgZmlyc3RVcGRhdGUgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIWNodW5rcykge1xyXG4gICAgICAgICAgICBjaHVua3MgPSBbXTtcclxuICAgICAgICAgICAgLy8gSW50aWFsaXplXHJcbiAgICAgICAgICAgIGNodW5rc1swXSA9IHtcclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUJ1ZmZlcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc0J1ZmZlcjogbnVsbFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjYWNoZS5wdXQoJ2NodW5rcycsIGNodW5rcyk7XHJcbiAgICAgICAgICAgIGZpcnN0VXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjaHVuayA9IGNodW5rc1swXTtcclxuICAgICAgICB2YXIgYXR0cmlidXRlQnVmZmVycyA9IGNodW5rLmF0dHJpYnV0ZUJ1ZmZlcnM7XHJcbiAgICAgICAgdmFyIGluZGljZXNCdWZmZXIgPSBjaHVuay5pbmRpY2VzQnVmZmVyO1xyXG5cclxuICAgICAgICBpZiAoaXNBdHRyaWJ1dGVzRGlydHkgfHwgZmlyc3RVcGRhdGUpIHtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUxpc3QgPSB0aGlzLmdldEVuYWJsZWRBdHRyaWJ1dGVzKCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYXR0cmlidXRlQnVmZmVyTWFwID0ge307XHJcbiAgICAgICAgICAgIGlmICghZmlyc3RVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUJ1ZmZlck1hcFthdHRyaWJ1dGVCdWZmZXJzW2ldLm5hbWVdID0gYXR0cmlidXRlQnVmZmVyc1tpXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBGSVhNRSBJZiBzb21lIGF0dHJpYnV0ZXMgcmVtb3ZlZFxyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGF0dHJpYnV0ZUxpc3QubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTGlzdFtrXTtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUgPSB0aGlzLmF0dHJpYnV0ZXNbbmFtZV07XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckluZm87XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFmaXJzdFVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlckluZm8gPSBhdHRyaWJ1dGVCdWZmZXJNYXBbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgYnVmZmVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlckluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBidWZmZXJJbmZvLmJ1ZmZlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IF9nbC5jcmVhdGVCdWZmZXIoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjYWNoZS5pc0RpcnR5KG1ha2VBdHRyS2V5KG5hbWUpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIHdoZW4gdGhleSBhcmUgZGlydHkuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogVXNlIEJ1ZmZlclN1YkRhdGE/XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRCdWZmZXIoX2dsLkFSUkFZX0JVRkZFUiwgYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuYnVmZmVyRGF0YShfZ2wuQVJSQVlfQlVGRkVSLCBhdHRyaWJ1dGUudmFsdWUsIHRoaXMuZHluYW1pYyA/IGdsZW51bS5EWU5BTUlDX0RSQVcgOiBnbGVudW0uU1RBVElDX0RSQVcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUJ1ZmZlcnNba10gPSBuZXcgQXR0cmlidXRlQnVmZmVyKG5hbWUsIGF0dHJpYnV0ZS50eXBlLCBidWZmZXIsIGF0dHJpYnV0ZS5zaXplLCBhdHRyaWJ1dGUuc2VtYW50aWMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFJlbW92ZSB1bnVzZWQgYXR0cmlidXRlcyBidWZmZXJzLlxyXG4gICAgICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBrOyBpIDwgYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgX2dsLmRlbGV0ZUJ1ZmZlcihhdHRyaWJ1dGVCdWZmZXJzW2ldLmJ1ZmZlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXR0cmlidXRlQnVmZmVycy5sZW5ndGggPSBrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzVXNlSW5kaWNlcygpICYmIChpc0luZGljZXNEaXJ0eSB8fCBmaXJzdFVwZGF0ZSkpIHtcclxuICAgICAgICAgICAgaWYgKCFpbmRpY2VzQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzQnVmZmVyID0gbmV3IEluZGljZXNCdWZmZXIoX2dsLmNyZWF0ZUJ1ZmZlcigpKTtcclxuICAgICAgICAgICAgICAgIGNodW5rLmluZGljZXNCdWZmZXIgPSBpbmRpY2VzQnVmZmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGluZGljZXNCdWZmZXIuY291bnQgPSB0aGlzLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlcihfZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGluZGljZXNCdWZmZXIuYnVmZmVyKTtcclxuICAgICAgICAgICAgX2dsLmJ1ZmZlckRhdGEoX2dsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIHRoaXMuZHluYW1pYyA/IGdsZW51bS5EWU5BTUlDX0RSQVcgOiBnbGVudW0uU1RBVElDX0RSQVcpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdlb21ldHJ5IGRhdGEgaW4gR0wgY29udGV4dC5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcblxyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG5cclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICAgICAgdmFyIGNodW5rcyA9IGNhY2hlLmdldCgnY2h1bmtzJyk7XHJcbiAgICAgICAgaWYgKGNodW5rcykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNodW5rcy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNodW5rID0gY2h1bmtzW2NdO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgY2h1bmsuYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJzID0gY2h1bmsuYXR0cmlidXRlQnVmZmVyc1trXTtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5nbC5kZWxldGVCdWZmZXIoYXR0cmlicy5idWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjaHVuay5pbmRpY2VzQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKGNodW5rLmluZGljZXNCdWZmZXIuYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fX3Zhb0NhY2hlKSB7XHJcbiAgICAgICAgICAgIHZhciB2YW9FeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fX3Zhb0NhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFvID0gdGhpcy5fX3Zhb0NhY2hlW2lkXS52YW87XHJcbiAgICAgICAgICAgICAgICBpZiAodmFvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFvRXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHZhbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fX3Zhb0NhY2hlID0ge307XHJcbiAgICAgICAgY2FjaGUuZGVsZXRlQ29udGV4dChyZW5kZXJlci5fX3VpZF9fKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBjbGF5Lkdlb21ldHJ5QmFzZSN2ZXJ0ZXhDb3VudFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoR2VvbWV0cnlCYXNlLnByb3RvdHlwZSwgJ3ZlcnRleENvdW50Jywge1xyXG5cclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgbWFpbkF0dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlc1t0aGlzLm1haW5BdHRyaWJ1dGVdO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFtYWluQXR0cmlidXRlKSB7XHJcbiAgICAgICAgICAgICAgICBtYWluQXR0cmlidXRlID0gdGhpcy5hdHRyaWJ1dGVzW3RoaXMuX2F0dHJpYnV0ZUxpc3RbMF1dO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIW1haW5BdHRyaWJ1dGUgfHwgIW1haW5BdHRyaWJ1dGUudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBtYWluQXR0cmlidXRlLnZhbHVlLmxlbmd0aCAvIG1haW5BdHRyaWJ1dGUuc2l6ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgY2xheS5HZW9tZXRyeUJhc2UjdHJpYW5nbGVDb3VudFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoR2VvbWV0cnlCYXNlLnByb3RvdHlwZSwgJ3RyaWFuZ2xlQ291bnQnLCB7XHJcblxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XHJcbiAgICAgICAgICAgIGlmICghaW5kaWNlcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kaWNlcy5sZW5ndGggLyAzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbkdlb21ldHJ5QmFzZS5TVEFUSUNfRFJBVyA9IGdsZW51bS5TVEFUSUNfRFJBVztcclxuR2VvbWV0cnlCYXNlLkRZTkFNSUNfRFJBVyA9IGdsZW51bS5EWU5BTUlDX0RSQVc7XHJcbkdlb21ldHJ5QmFzZS5TVFJFQU1fRFJBVyA9IGdsZW51bS5TVFJFQU1fRFJBVztcclxuXHJcbkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGVCdWZmZXIgPSBBdHRyaWJ1dGVCdWZmZXI7XHJcbkdlb21ldHJ5QmFzZS5JbmRpY2VzQnVmZmVyID0gSW5kaWNlc0J1ZmZlcjtcclxuXHJcbkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGUgPSBBdHRyaWJ1dGU7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHZW9tZXRyeUJhc2U7XHJcbiIsImltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vZ2xtYXRyaXgvdmVjMyc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4vZ2xtYXRyaXgvbWF0NCc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgR2VvbWV0cnlCYXNlIGZyb20gJy4vR2VvbWV0cnlCYXNlJztcclxuXHJcbnZhciB2ZWMzQ3JlYXRlID0gdmVjMy5jcmVhdGU7XHJcbnZhciB2ZWMzQWRkID0gdmVjMy5hZGQ7XHJcbnZhciB2ZWMzU2V0ID0gdmVjMy5zZXQ7XHJcblxyXG52YXIgQXR0cmlidXRlID0gR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZTtcclxuXHJcbi8qKlxyXG4gKiBHZW9tZXRyeSBpbiBDbGF5R0wgY29udGFpbnMgdmVydGV4IGF0dHJpYnV0ZXMgb2YgbWVzaC4gVGhlc2UgdmVydGV4IGF0dHJpYnV0ZXMgd2lsbCBiZSBmaW5hbGx5IHByb3ZpZGVkIHRvIHRoZSB7QGxpbmsgY2xheS5TaGFkZXJ9LlxyXG4gKiBEaWZmZXJlbnQge0BsaW5rIGNsYXkuU2hhZGVyfSBuZWVkcyBkaWZmZXJlbnQgYXR0cmlidXRlcy4gSGVyZSBpcyBhIGxpc3Qgb2YgYXR0cmlidXRlcyB1c2VkIGluIHRoZSBidWlsdGluIHNoYWRlcnMuXHJcbiAqXHJcbiAqICsgcG9zaXRpb246IGBjbGF5LmJhc2ljYCwgYGNsYXkubGFtYmVydGAsIGBjbGF5LnN0YW5kYXJkYFxyXG4gKiArIHRleGNvb3JkMDogYGNsYXkuYmFzaWNgLCBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgY29sb3I6IGBjbGF5LmJhc2ljYCwgYGNsYXkubGFtYmVydGAsIGBjbGF5LnN0YW5kYXJkYFxyXG4gKiArIHdlaWdodDogYGNsYXkuYmFzaWNgLCBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgam9pbnQ6IGBjbGF5LmJhc2ljYCwgYGNsYXkubGFtYmVydGAsIGBjbGF5LnN0YW5kYXJkYFxyXG4gKiArIG5vcm1hbDogYGNsYXkubGFtYmVydGAsIGBjbGF5LnN0YW5kYXJkYFxyXG4gKiArIHRhbmdlbnQ6IGBjbGF5LnN0YW5kYXJkYFxyXG4gKlxyXG4gKiAjIyMjIENyZWF0ZSBhIHByb2NlZHVyYWwgZ2VvbWV0cnlcclxuICpcclxuICogQ2xheUdMIHByb3ZpZGVzIGEgY291cGxlIG9mIGJ1aWx0aW4gcHJvY2VkdXJhbCBnZW9tZXRyaWVzLiBJbmxjdWRpbmc6XHJcbiAqXHJcbiAqICArIHtAbGluayBjbGF5Lmdlb21ldHJ5LkN1YmV9XHJcbiAqICArIHtAbGluayBjbGF5Lmdlb21ldHJ5LlNwaGVyZX1cclxuICogICsge0BsaW5rIGNsYXkuZ2VvbWV0cnkuUGxhbmV9XHJcbiAqICArIHtAbGluayBjbGF5Lmdlb21ldHJ5LkN5bGluZGVyfVxyXG4gKiAgKyB7QGxpbmsgY2xheS5nZW9tZXRyeS5Db25lfVxyXG4gKiAgKyB7QGxpbmsgY2xheS5nZW9tZXRyeS5QYXJhbWV0cmljU3VyZmFjZX1cclxuICpcclxuICogSXQncyBzaW1wbGUgdG8gY3JlYXRlIGEgYmFzaWMgZ2VvbWV0cnkgd2l0aCB0aGVzZSBjbGFzc2VzLlxyXG4gKlxyXG5gYGBqc1xyXG52YXIgc3BoZXJlID0gbmV3IGNsYXkuZ2VvbWV0cnkuU3BoZXJlKHtcclxuICAgIHJhZGl1czogMlxyXG59KTtcclxuYGBgXHJcbiAqXHJcbiAqICMjIyMgQ3JlYXRlIHRoZSBnZW9tZXRyeSBkYXRhIGJ5IHlvdXJzZWxmXHJcbiAqXHJcbiAqIFVzdWFsbHkgdGhlIHZlcnRleCBhdHRyaWJ1dGVzIGRhdGEgYXJlIGNyZWF0ZWQgYnkgdGhlIHtAbGluayBjbGF5LmxvYWRlci5HTFRGfSBvciBwcm9jZWR1cmFsIGdlb21ldHJpZXMgbGlrZSB7QGxpbmsgY2xheS5nZW9tZXRyeS5TcGhlcmV9LlxyXG4gKiBCZXNpZGVzIHRoZXNlLCB5b3UgY2FuIGNyZWF0ZSB0aGUgZGF0YSBtYW51YWxseS4gSGVyZSBpcyBhIHNpbXBsZSBleGFtcGxlIHRvIGNyZWF0ZSBhIHRyaWFuZ2xlLlxyXG5gYGBqc1xyXG52YXIgVFJJQU5HTEVfUE9TSVRJT05TID0gW1xyXG4gICAgWy0wLjUsIC0wLjUsIDBdLFxyXG4gICAgWzAuNSwgLTAuNSwgMF0sXHJcbiAgICBbMCwgMC41LCAwXVxyXG5dO1xyXG52YXIgZ2VvbWV0cnkgPSBuZXcgY2xheS5TdGF0aWNHZW9tZXRyeUJhc2UoKTtcclxuLy8gQWRkIHRyaWFuZ2xlIHZlcnRpY2VzIHRvIHBvc2l0aW9uIGF0dHJpYnV0ZS5cclxuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5mcm9tQXJyYXkoVFJJQU5HTEVfUE9TSVRJT05TKTtcclxuYGBgXHJcbiAqIFRoZW4geW91IGNhbiB1c2UgdGhlIHV0aWxpdHkgbWV0aG9kcyBsaWtlIGBnZW5lcmF0ZVZlcnRleE5vcm1hbHNgLCBgZ2VuZXJhdGVUYW5nZW50c2AgdG8gY3JlYXRlIHRoZSByZW1haW5pbmcgbmVjZXNzYXJ5IGF0dHJpYnV0ZXMuXHJcbiAqXHJcbiAqXHJcbiAqICMjIyMgVXNlIHdpdGggY3VzdG9tIHNoYWRlcnNcclxuICpcclxuICogSWYgeW91IHdhbid0IHRvIHdyaXRlIGN1c3RvbSBzaGFkZXJzLiBEb24ndCBmb3JnZXQgdG8gYWRkIFNFTUFOVElDUyB0byB0aGVzZSBhdHRyaWJ1dGVzLiBGb3IgZXhhbXBsZVxyXG4gKlxyXG4gYGBgZ2xzbFxyXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XHJcbnVuaWZvcm0gbWF0NCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgOiBXT1JMRElOVkVSU0VUUkFOU1BPU0U7XHJcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xyXG5cclxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcclxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xyXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XHJcbmBgYFxyXG4gKiBUaGVzZSBgUE9TSVRJT05gLCBgVEVYQ09PUkRfMGAsIGBOT1JNQUxgIGFyZSBTRU1BTlRJQ1Mgd2hpY2ggd2lsbCBtYXAgdGhlIGF0dHJpYnV0ZXMgaW4gc2hhZGVyIHRvIHRoZSBhdHRyaWJ1dGVzIGluIHRoZSBHZW9tZXRyeUJhc2VcclxuICpcclxuICogQXZhaWxhYmxlIGF0dHJpYnV0ZXMgU0VNQU5USUNTIGluY2x1ZGVzIGBQT1NJVElPTmAsIGBURVhDT09SRF8wYCwgYFRFWENPT1JEXzFgIGBOT1JNQUxgLCBgVEFOR0VOVGAsIGBDT0xPUmAsIGBXRUlHSFRgLCBgSk9JTlRgLlxyXG4gKlxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5HZW9tZXRyeVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5QmFzZVxyXG4gKi9cclxudmFyIEdlb21ldHJ5ID0gR2VvbWV0cnlCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5Lkdlb21ldHJ5IyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXR0cmlidXRlcyBvZiBnZW9tZXRyeS4gSW5jbHVkaW5nOlxyXG4gICAgICAgICAqICArIGBwb3NpdGlvbmBcclxuICAgICAgICAgKiAgKyBgdGV4Y29vcmQwYFxyXG4gICAgICAgICAqICArIGB0ZXhjb29yZDFgXHJcbiAgICAgICAgICogICsgYG5vcm1hbGBcclxuICAgICAgICAgKiAgKyBgdGFuZ2VudGBcclxuICAgICAgICAgKiAgKyBgY29sb3JgXHJcbiAgICAgICAgICogICsgYHdlaWdodGBcclxuICAgICAgICAgKiAgKyBgam9pbnRgXHJcbiAgICAgICAgICogICsgYGJhcnljZW50cmljYFxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdC48c3RyaW5nLCBjbGF5Lkdlb21ldHJ5LkF0dHJpYnV0ZT59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogbmV3IEF0dHJpYnV0ZSgncG9zaXRpb24nLCAnZmxvYXQnLCAzLCAnUE9TSVRJT04nKSxcclxuICAgICAgICAgICAgdGV4Y29vcmQwOiBuZXcgQXR0cmlidXRlKCd0ZXhjb29yZDAnLCAnZmxvYXQnLCAyLCAnVEVYQ09PUkRfMCcpLFxyXG4gICAgICAgICAgICB0ZXhjb29yZDE6IG5ldyBBdHRyaWJ1dGUoJ3RleGNvb3JkMScsICdmbG9hdCcsIDIsICdURVhDT09SRF8xJyksXHJcbiAgICAgICAgICAgIG5vcm1hbDogbmV3IEF0dHJpYnV0ZSgnbm9ybWFsJywgJ2Zsb2F0JywgMywgJ05PUk1BTCcpLFxyXG4gICAgICAgICAgICB0YW5nZW50OiBuZXcgQXR0cmlidXRlKCd0YW5nZW50JywgJ2Zsb2F0JywgNCwgJ1RBTkdFTlQnKSxcclxuICAgICAgICAgICAgY29sb3I6IG5ldyBBdHRyaWJ1dGUoJ2NvbG9yJywgJ2Zsb2F0JywgNCwgJ0NPTE9SJyksXHJcbiAgICAgICAgICAgIC8vIFNraW5uaW5nIGF0dHJpYnV0ZXNcclxuICAgICAgICAgICAgLy8gRWFjaCB2ZXJ0ZXggY2FuIGJlIGJpbmQgdG8gNCBib25lcywgYmVjYXVzZSB0aGVcclxuICAgICAgICAgICAgLy8gc3VtIG9mIHdlaWdodHMgaXMgMSwgc28gdGhlIHdlaWdodHMgaXMgc3RvcmVkIGluIHZlYzMgYW5kIHRoZSBsYXN0XHJcbiAgICAgICAgICAgIC8vIGNhbiBiZSBjYWxjdWxhdGVkIGJ5IDEtdy54LXcueS13LnpcclxuICAgICAgICAgICAgd2VpZ2h0OiBuZXcgQXR0cmlidXRlKCd3ZWlnaHQnLCAnZmxvYXQnLCAzLCAnV0VJR0hUJyksXHJcbiAgICAgICAgICAgIGpvaW50OiBuZXcgQXR0cmlidXRlKCdqb2ludCcsICdmbG9hdCcsIDQsICdKT0lOVCcpLFxyXG4gICAgICAgICAgICAvLyBGb3Igd2lyZWZyYW1lIGRpc3BsYXlcclxuICAgICAgICAgICAgLy8gaHR0cDovL2NvZGVmbG93Lm9yZy9lbnRyaWVzLzIwMTIvYXVnLzAyL2Vhc3ktd2lyZWZyYW1lLWRpc3BsYXktd2l0aC1iYXJ5Y2VudHJpYy1jb29yZGluYXRlcy9cclxuICAgICAgICAgICAgYmFyeWNlbnRyaWM6IG5ldyBBdHRyaWJ1dGUoJ2JhcnljZW50cmljJywgJ2Zsb2F0JywgMywgbnVsbCksXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYWxjdWxhdGVkIGJvdW5kaW5nIGJveCBvZiBnZW9tZXRyeS5cclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBib3VuZGluZ0JveDogbnVsbFxyXG4gICAgfTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5Lkdlb21ldHJ5LnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgbWFpbkF0dHJpYnV0ZTogJ3Bvc2l0aW9uJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBib3VuZGluZ0JveCBvZiBHZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVCb3VuZGluZ0JveDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBiYm94ID0gdGhpcy5ib3VuZGluZ0JveDtcclxuICAgICAgICBpZiAoIWJib3gpIHtcclxuICAgICAgICAgICAgYmJveCA9IHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBvc0FyciA9IHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICBpZiAocG9zQXJyICYmIHBvc0Fyci5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFyIG1pbiA9IGJib3gubWluO1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gYmJveC5tYXg7XHJcbiAgICAgICAgICAgIHZhciBtaW5BcnIgPSBtaW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXhBcnIgPSBtYXguYXJyYXk7XHJcbiAgICAgICAgICAgIHZlYzMuc2V0KG1pbkFyciwgcG9zQXJyWzBdLCBwb3NBcnJbMV0sIHBvc0FyclsyXSk7XHJcbiAgICAgICAgICAgIHZlYzMuc2V0KG1heEFyciwgcG9zQXJyWzBdLCBwb3NBcnJbMV0sIHBvc0FyclsyXSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAzOyBpIDwgcG9zQXJyLmxlbmd0aDspIHtcclxuICAgICAgICAgICAgICAgIHZhciB4ID0gcG9zQXJyW2krK107XHJcbiAgICAgICAgICAgICAgICB2YXIgeSA9IHBvc0FycltpKytdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHogPSBwb3NBcnJbaSsrXTtcclxuICAgICAgICAgICAgICAgIGlmICh4IDwgbWluQXJyWzBdKSB7IG1pbkFyclswXSA9IHg7IH1cclxuICAgICAgICAgICAgICAgIGlmICh5IDwgbWluQXJyWzFdKSB7IG1pbkFyclsxXSA9IHk7IH1cclxuICAgICAgICAgICAgICAgIGlmICh6IDwgbWluQXJyWzJdKSB7IG1pbkFyclsyXSA9IHo7IH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoeCA+IG1heEFyclswXSkgeyBtYXhBcnJbMF0gPSB4OyB9XHJcbiAgICAgICAgICAgICAgICBpZiAoeSA+IG1heEFyclsxXSkgeyBtYXhBcnJbMV0gPSB5OyB9XHJcbiAgICAgICAgICAgICAgICBpZiAoeiA+IG1heEFyclsyXSkgeyBtYXhBcnJbMl0gPSB6OyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWluLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIG1heC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBub3JtYWxzIHBlciB2ZXJ0ZXguXHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlVmVydGV4Tm9ybWFsczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICB2YXIgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xyXG5cclxuICAgICAgICBpZiAoIW5vcm1hbHMgfHwgbm9ybWFscy5sZW5ndGggIT09IHBvc2l0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkocG9zaXRpb25zLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBSZXNldFxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vcm1hbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaV0gPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcDEgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHAyID0gdmVjM0NyZWF0ZSgpO1xyXG4gICAgICAgIHZhciBwMyA9IHZlYzNDcmVhdGUoKTtcclxuXHJcbiAgICAgICAgdmFyIHYyMSA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgdjMyID0gdmVjM0NyZWF0ZSgpO1xyXG5cclxuICAgICAgICB2YXIgbiA9IHZlYzNDcmVhdGUoKTtcclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHRoaXMudmVydGV4Q291bnQ7XHJcbiAgICAgICAgdmFyIGkxLCBpMiwgaTM7XHJcbiAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBsZW47KSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGluZGljZXNbZisrXTtcclxuICAgICAgICAgICAgICAgIGkyID0gaW5kaWNlc1tmKytdO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBpbmRpY2VzW2YrK107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGYrKztcclxuICAgICAgICAgICAgICAgIGkyID0gZisrO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBmKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlYzNTZXQocDEsIHBvc2l0aW9uc1tpMSozXSwgcG9zaXRpb25zW2kxKjMrMV0sIHBvc2l0aW9uc1tpMSozKzJdKTtcclxuICAgICAgICAgICAgdmVjM1NldChwMiwgcG9zaXRpb25zW2kyKjNdLCBwb3NpdGlvbnNbaTIqMysxXSwgcG9zaXRpb25zW2kyKjMrMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHAzLCBwb3NpdGlvbnNbaTMqM10sIHBvc2l0aW9uc1tpMyozKzFdLCBwb3NpdGlvbnNbaTMqMysyXSk7XHJcblxyXG4gICAgICAgICAgICB2ZWMzLnN1Yih2MjEsIHAxLCBwMik7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYzMiwgcDIsIHAzKTtcclxuICAgICAgICAgICAgdmVjMy5jcm9zcyhuLCB2MjEsIHYzMik7XHJcbiAgICAgICAgICAgIC8vIEFscmVhZHkgYmUgd2VpZ2h0ZWQgYnkgdGhlIHRyaWFuZ2xlIGFyZWFcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTEqMytpXSA9IG5vcm1hbHNbaTEqMytpXSArIG5baV07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kyKjMraV0gPSBub3JtYWxzW2kyKjMraV0gKyBuW2ldO1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsc1tpMyozK2ldID0gbm9ybWFsc1tpMyozK2ldICsgbltpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub3JtYWxzLmxlbmd0aDspIHtcclxuICAgICAgICAgICAgdmVjM1NldChuLCBub3JtYWxzW2ldLCBub3JtYWxzW2krMV0sIG5vcm1hbHNbaSsyXSk7XHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKG4sIG4pO1xyXG4gICAgICAgICAgICBub3JtYWxzW2krK10gPSBuWzBdO1xyXG4gICAgICAgICAgICBub3JtYWxzW2krK10gPSBuWzFdO1xyXG4gICAgICAgICAgICBub3JtYWxzW2krK10gPSBuWzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgbm9ybWFscyBwZXIgZmFjZS5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVGYWNlTm9ybWFsczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNVbmlxdWVWZXJ0ZXgoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlVW5pcXVlVmVydGV4KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICB2YXIgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xyXG5cclxuICAgICAgICB2YXIgcDEgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHAyID0gdmVjM0NyZWF0ZSgpO1xyXG4gICAgICAgIHZhciBwMyA9IHZlYzNDcmVhdGUoKTtcclxuXHJcbiAgICAgICAgdmFyIHYyMSA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgdjMyID0gdmVjM0NyZWF0ZSgpO1xyXG4gICAgICAgIHZhciBuID0gdmVjM0NyZWF0ZSgpO1xyXG5cclxuICAgICAgICBpZiAoIW5vcm1hbHMpIHtcclxuICAgICAgICAgICAgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShwb3NpdGlvbnMubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGxlbiA9IGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHRoaXMudmVydGV4Q291bnQ7XHJcbiAgICAgICAgdmFyIGkxLCBpMiwgaTM7XHJcbiAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBsZW47KSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGluZGljZXNbZisrXTtcclxuICAgICAgICAgICAgICAgIGkyID0gaW5kaWNlc1tmKytdO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBpbmRpY2VzW2YrK107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGYrKztcclxuICAgICAgICAgICAgICAgIGkyID0gZisrO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBmKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlYzNTZXQocDEsIHBvc2l0aW9uc1tpMSozXSwgcG9zaXRpb25zW2kxKjMrMV0sIHBvc2l0aW9uc1tpMSozKzJdKTtcclxuICAgICAgICAgICAgdmVjM1NldChwMiwgcG9zaXRpb25zW2kyKjNdLCBwb3NpdGlvbnNbaTIqMysxXSwgcG9zaXRpb25zW2kyKjMrMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHAzLCBwb3NpdGlvbnNbaTMqM10sIHBvc2l0aW9uc1tpMyozKzFdLCBwb3NpdGlvbnNbaTMqMysyXSk7XHJcblxyXG4gICAgICAgICAgICB2ZWMzLnN1Yih2MjEsIHAxLCBwMik7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYzMiwgcDIsIHAzKTtcclxuICAgICAgICAgICAgdmVjMy5jcm9zcyhuLCB2MjEsIHYzMik7XHJcblxyXG4gICAgICAgICAgICB2ZWMzLm5vcm1hbGl6ZShuLCBuKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kxKjMgKyBpXSA9IG5baV07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kyKjMgKyBpXSA9IG5baV07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kzKjMgKyBpXSA9IG5baV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIHRhbmdlbnRzIGF0dHJpYnV0ZXMuXHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlVGFuZ2VudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudmVydGV4Q291bnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG5WZXJ0ZXggPSB0aGlzLnZlcnRleENvdW50O1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIGlmICghYXR0cmlidXRlcy50YW5nZW50LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMudGFuZ2VudC52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkoblZlcnRleCAqIDQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdGV4Y29vcmRzID0gYXR0cmlidXRlcy50ZXhjb29yZDAudmFsdWU7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9ucyA9IGF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWU7XHJcbiAgICAgICAgdmFyIHRhbmdlbnRzID0gYXR0cmlidXRlcy50YW5nZW50LnZhbHVlO1xyXG4gICAgICAgIHZhciBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICghdGV4Y29vcmRzKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignR2VvbWV0cnkgd2l0aG91dCB0ZXhjb29yZHMgY2FuXFwndCBnZW5lcmF0ZSB0YW5nZW50cy4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRhbjEgPSBbXTtcclxuICAgICAgICB2YXIgdGFuMiA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblZlcnRleDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRhbjFbaV0gPSBbMC4wLCAwLjAsIDAuMF07XHJcbiAgICAgICAgICAgIHRhbjJbaV0gPSBbMC4wLCAwLjAsIDAuMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc2RpciA9IFswLjAsIDAuMCwgMC4wXTtcclxuICAgICAgICB2YXIgdGRpciA9IFswLjAsIDAuMCwgMC4wXTtcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHRoaXMudmVydGV4Q291bnQ7XHJcbiAgICAgICAgdmFyIGkxLCBpMiwgaTM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47KSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGluZGljZXNbaSsrXTtcclxuICAgICAgICAgICAgICAgIGkyID0gaW5kaWNlc1tpKytdO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBpbmRpY2VzW2krK107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGkrKztcclxuICAgICAgICAgICAgICAgIGkyID0gaSsrO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBpKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBzdDFzID0gdGV4Y29vcmRzW2kxICogMl0sXHJcbiAgICAgICAgICAgICAgICBzdDJzID0gdGV4Y29vcmRzW2kyICogMl0sXHJcbiAgICAgICAgICAgICAgICBzdDNzID0gdGV4Y29vcmRzW2kzICogMl0sXHJcbiAgICAgICAgICAgICAgICBzdDF0ID0gdGV4Y29vcmRzW2kxICogMiArIDFdLFxyXG4gICAgICAgICAgICAgICAgc3QydCA9IHRleGNvb3Jkc1tpMiAqIDIgKyAxXSxcclxuICAgICAgICAgICAgICAgIHN0M3QgPSB0ZXhjb29yZHNbaTMgKiAyICsgMV0sXHJcblxyXG4gICAgICAgICAgICAgICAgcDF4ID0gcG9zaXRpb25zW2kxICogM10sXHJcbiAgICAgICAgICAgICAgICBwMnggPSBwb3NpdGlvbnNbaTIgKiAzXSxcclxuICAgICAgICAgICAgICAgIHAzeCA9IHBvc2l0aW9uc1tpMyAqIDNdLFxyXG4gICAgICAgICAgICAgICAgcDF5ID0gcG9zaXRpb25zW2kxICogMyArIDFdLFxyXG4gICAgICAgICAgICAgICAgcDJ5ID0gcG9zaXRpb25zW2kyICogMyArIDFdLFxyXG4gICAgICAgICAgICAgICAgcDN5ID0gcG9zaXRpb25zW2kzICogMyArIDFdLFxyXG4gICAgICAgICAgICAgICAgcDF6ID0gcG9zaXRpb25zW2kxICogMyArIDJdLFxyXG4gICAgICAgICAgICAgICAgcDJ6ID0gcG9zaXRpb25zW2kyICogMyArIDJdLFxyXG4gICAgICAgICAgICAgICAgcDN6ID0gcG9zaXRpb25zW2kzICogMyArIDJdO1xyXG5cclxuICAgICAgICAgICAgdmFyIHgxID0gcDJ4IC0gcDF4LFxyXG4gICAgICAgICAgICAgICAgeDIgPSBwM3ggLSBwMXgsXHJcbiAgICAgICAgICAgICAgICB5MSA9IHAyeSAtIHAxeSxcclxuICAgICAgICAgICAgICAgIHkyID0gcDN5IC0gcDF5LFxyXG4gICAgICAgICAgICAgICAgejEgPSBwMnogLSBwMXosXHJcbiAgICAgICAgICAgICAgICB6MiA9IHAzeiAtIHAxejtcclxuXHJcbiAgICAgICAgICAgIHZhciBzMSA9IHN0MnMgLSBzdDFzLFxyXG4gICAgICAgICAgICAgICAgczIgPSBzdDNzIC0gc3QxcyxcclxuICAgICAgICAgICAgICAgIHQxID0gc3QydCAtIHN0MXQsXHJcbiAgICAgICAgICAgICAgICB0MiA9IHN0M3QgLSBzdDF0O1xyXG5cclxuICAgICAgICAgICAgdmFyIHIgPSAxLjAgLyAoczEgKiB0MiAtIHQxICogczIpO1xyXG4gICAgICAgICAgICBzZGlyWzBdID0gKHQyICogeDEgLSB0MSAqIHgyKSAqIHI7XHJcbiAgICAgICAgICAgIHNkaXJbMV0gPSAodDIgKiB5MSAtIHQxICogeTIpICogcjtcclxuICAgICAgICAgICAgc2RpclsyXSA9ICh0MiAqIHoxIC0gdDEgKiB6MikgKiByO1xyXG5cclxuICAgICAgICAgICAgdGRpclswXSA9IChzMSAqIHgyIC0gczIgKiB4MSkgKiByO1xyXG4gICAgICAgICAgICB0ZGlyWzFdID0gKHMxICogeTIgLSBzMiAqIHkxKSAqIHI7XHJcbiAgICAgICAgICAgIHRkaXJbMl0gPSAoczEgKiB6MiAtIHMyICogejEpICogcjtcclxuXHJcbiAgICAgICAgICAgIHZlYzNBZGQodGFuMVtpMV0sIHRhbjFbaTFdLCBzZGlyKTtcclxuICAgICAgICAgICAgdmVjM0FkZCh0YW4xW2kyXSwgdGFuMVtpMl0sIHNkaXIpO1xyXG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjFbaTNdLCB0YW4xW2kzXSwgc2Rpcik7XHJcbiAgICAgICAgICAgIHZlYzNBZGQodGFuMltpMV0sIHRhbjJbaTFdLCB0ZGlyKTtcclxuICAgICAgICAgICAgdmVjM0FkZCh0YW4yW2kyXSwgdGFuMltpMl0sIHRkaXIpO1xyXG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjJbaTNdLCB0YW4yW2kzXSwgdGRpcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0bXAgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIG5Dcm9zc1QgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIG4gPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVmVydGV4OyBpKyspIHtcclxuICAgICAgICAgICAgblswXSA9IG5vcm1hbHNbaSAqIDNdO1xyXG4gICAgICAgICAgICBuWzFdID0gbm9ybWFsc1tpICogMyArIDFdO1xyXG4gICAgICAgICAgICBuWzJdID0gbm9ybWFsc1tpICogMyArIDJdO1xyXG4gICAgICAgICAgICB2YXIgdCA9IHRhbjFbaV07XHJcblxyXG4gICAgICAgICAgICAvLyBHcmFtLVNjaG1pZHQgb3J0aG9nb25hbGl6ZVxyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlKHRtcCwgbiwgdmVjMy5kb3QobiwgdCkpO1xyXG4gICAgICAgICAgICB2ZWMzLnN1Yih0bXAsIHQsIHRtcCk7XHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHRtcCwgdG1wKTtcclxuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGhhbmRlZG5lc3MuXHJcbiAgICAgICAgICAgIHZlYzMuY3Jvc3MobkNyb3NzVCwgbiwgdCk7XHJcbiAgICAgICAgICAgIHRhbmdlbnRzW2kgKiA0XSA9IHRtcFswXTtcclxuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDQgKyAxXSA9IHRtcFsxXTtcclxuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDQgKyAyXSA9IHRtcFsyXTtcclxuICAgICAgICAgICAgLy8gUEVORElORyBjYW4gY29uZmlnID9cclxuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDQgKyAzXSA9IHZlYzMuZG90KG5Dcm9zc1QsIHRhbjJbaV0pIDwgMC4wID8gLTEuMCA6IDEuMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHZlcnRpY2VzIGFyZSBub3Qgc2hhcmVkIGJ5IGRpZmZlcmVudCBpbmRpY2VzLlxyXG4gICAgICovXHJcbiAgICBpc1VuaXF1ZVZlcnRleDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzVXNlSW5kaWNlcygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZlcnRleENvdW50ID09PSB0aGlzLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgdW5pcXVlIHZlcnRleCBmb3IgZWFjaCBpbmRleC5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVVbmlxdWVWZXJ0ZXg6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudmVydGV4Q291bnQgfHwgIXRoaXMuaW5kaWNlcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pbmRpY2VzLmxlbmd0aCA+IDB4ZmZmZikge1xyXG4gICAgICAgICAgICB0aGlzLmluZGljZXMgPSBuZXcgdmVuZG9yLlVpbnQzMkFycmF5KHRoaXMuaW5kaWNlcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuXHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWVMaXN0ID0gdGhpcy5nZXRFbmFibGVkQXR0cmlidXRlcygpO1xyXG5cclxuICAgICAgICB2YXIgb2xkQXR0clZhbHVlcyA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmlidXRlTmFtZUxpc3QubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lTGlzdFthXTtcclxuICAgICAgICAgICAgb2xkQXR0clZhbHVlc1tuYW1lXSA9IGF0dHJpYnV0ZXNbbmFtZV0udmFsdWU7XHJcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbbmFtZV0uaW5pdCh0aGlzLmluZGljZXMubGVuZ3RoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgaWkgPSBpbmRpY2VzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGF0dHJpYnV0ZU5hbWVMaXN0Lmxlbmd0aDsgYSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVMaXN0W2FdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gYXR0cmlidXRlc1tuYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIHZhciBzaXplID0gYXR0cmlidXRlc1tuYW1lXS5zaXplO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbY3Vyc29yICogc2l6ZSArIGtdID0gb2xkQXR0clZhbHVlc1tuYW1lXVtpaSAqIHNpemUgKyBrXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbmRpY2VzW2ldID0gY3Vyc29yO1xyXG4gICAgICAgICAgICBjdXJzb3IrKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGlydHkoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBiYXJ5Y2VudHJpYyBjb29yZGluYXRlcyBmb3Igd2lyZWZyYW1lIGRyYXcuXHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlQmFyeWNlbnRyaWM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudmVydGV4Q291bnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzVW5pcXVlVmVydGV4KCkpIHtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVVuaXF1ZVZlcnRleCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgdmFyIGFycmF5ID0gYXR0cmlidXRlcy5iYXJ5Y2VudHJpYy52YWx1ZTtcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICAvLyBBbHJlYWR5IGV4aXN0ZWQ7XHJcbiAgICAgICAgaWYgKGFycmF5ICYmIGFycmF5Lmxlbmd0aCA9PT0gaW5kaWNlcy5sZW5ndGggKiAzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXJyYXkgPSBhdHRyaWJ1dGVzLmJhcnljZW50cmljLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShpbmRpY2VzLmxlbmd0aCAqIDMpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IChpbmRpY2VzID8gaW5kaWNlcy5sZW5ndGggOiB0aGlzLnZlcnRleENvdW50IC8gMyk7KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMzsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWkgPSBpbmRpY2VzID8gaW5kaWNlc1tpKytdIDogKGkgKiAzICsgaik7XHJcbiAgICAgICAgICAgICAgICBhcnJheVtpaSAqIDMgKyBqXSA9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IHRyYW5zZm9ybSB0byBnZW9tZXRyeSBhdHRyaWJ1dGVzLlxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBhcHBseVRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICB2YXIgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xyXG4gICAgICAgIHZhciB0YW5nZW50cyA9IGF0dHJpYnV0ZXMudGFuZ2VudC52YWx1ZTtcclxuXHJcbiAgICAgICAgbWF0cml4ID0gbWF0cml4LmFycmF5O1xyXG4gICAgICAgIC8vIE5vcm1hbCBNYXRyaXhcclxuICAgICAgICB2YXIgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCA9IG1hdDQuY3JlYXRlKCk7XHJcbiAgICAgICAgbWF0NC5pbnZlcnQoaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCwgbWF0cml4KTtcclxuICAgICAgICBtYXQ0LnRyYW5zcG9zZShpbnZlcnNlVHJhbnNwb3NlTWF0cml4LCBpbnZlcnNlVHJhbnNwb3NlTWF0cml4KTtcclxuXHJcbiAgICAgICAgdmFyIHZlYzNUcmFuc2Zvcm1NYXQ0ID0gdmVjMy50cmFuc2Zvcm1NYXQ0O1xyXG4gICAgICAgIHZhciB2ZWMzRm9yRWFjaCA9IHZlYzMuZm9yRWFjaDtcclxuICAgICAgICB2ZWMzRm9yRWFjaChwb3NpdGlvbnMsIDMsIDAsIG51bGwsIHZlYzNUcmFuc2Zvcm1NYXQ0LCBtYXRyaXgpO1xyXG4gICAgICAgIGlmIChub3JtYWxzKSB7XHJcbiAgICAgICAgICAgIHZlYzNGb3JFYWNoKG5vcm1hbHMsIDMsIDAsIG51bGwsIHZlYzNUcmFuc2Zvcm1NYXQ0LCBpbnZlcnNlVHJhbnNwb3NlTWF0cml4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRhbmdlbnRzKSB7XHJcbiAgICAgICAgICAgIHZlYzNGb3JFYWNoKHRhbmdlbnRzLCA0LCAwLCBudWxsLCB2ZWMzVHJhbnNmb3JtTWF0NCwgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5ib3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBnZW9tZXRyeSBkYXRhIGluIEdMIGNvbnRleHQuXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG5cclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuXHJcbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG4gICAgICAgIHZhciBjaHVua3MgPSBjYWNoZS5nZXQoJ2NodW5rcycpO1xyXG4gICAgICAgIGlmIChjaHVua3MpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBjaHVua3MubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjaHVuayA9IGNodW5rc1tjXTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGNodW5rLmF0dHJpYnV0ZUJ1ZmZlcnMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cmlicyA9IGNodW5rLmF0dHJpYnV0ZUJ1ZmZlcnNba107XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKGF0dHJpYnMuYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2h1bmsuaW5kaWNlc0J1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLmdsLmRlbGV0ZUJ1ZmZlcihjaHVuay5pbmRpY2VzQnVmZmVyLmJ1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX192YW9DYWNoZSkge1xyXG4gICAgICAgICAgICB2YXIgdmFvRXh0ID0gcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Jyk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMuX192YW9DYWNoZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbyA9IHRoaXMuX192YW9DYWNoZVtpZF0udmFvO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhb0V4dC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh2YW8pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX192YW9DYWNoZSA9IHt9O1xyXG4gICAgICAgIGNhY2hlLmRlbGV0ZUNvbnRleHQocmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbkdlb21ldHJ5LlNUQVRJQ19EUkFXID0gR2VvbWV0cnlCYXNlLlNUQVRJQ19EUkFXO1xyXG5HZW9tZXRyeS5EWU5BTUlDX0RSQVcgPSBHZW9tZXRyeUJhc2UuRFlOQU1JQ19EUkFXO1xyXG5HZW9tZXRyeS5TVFJFQU1fRFJBVyA9IEdlb21ldHJ5QmFzZS5TVFJFQU1fRFJBVztcclxuXHJcbkdlb21ldHJ5LkF0dHJpYnV0ZUJ1ZmZlciA9IEdlb21ldHJ5QmFzZS5BdHRyaWJ1dGVCdWZmZXI7XHJcbkdlb21ldHJ5LkluZGljZXNCdWZmZXIgPSBHZW9tZXRyeUJhc2UuSW5kaWNlc0J1ZmZlcjtcclxuXHJcbkdlb21ldHJ5LkF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdlb21ldHJ5O1xyXG4iLCJpbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuUGxhbmVcclxuICogQGV4dGVuZHMgY2xheS5HZW9tZXRyeVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQud2lkdGhTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0U2VnbWVudHNdXHJcbiAqL1xyXG52YXIgUGxhbmUgPSBHZW9tZXRyeS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5QbGFuZSMgKi9cclxue1xyXG4gICAgZHluYW1pYzogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHdpZHRoU2VnbWVudHM6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodFNlZ21lbnRzOiAxXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuUGxhbmUucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgcGxhbmUgZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBoZWlnaHRTZWdtZW50cyA9IHRoaXMuaGVpZ2h0U2VnbWVudHM7XHJcbiAgICAgICAgdmFyIHdpZHRoU2VnbWVudHMgPSB0aGlzLndpZHRoU2VnbWVudHM7XHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9ucyA9IFtdO1xyXG4gICAgICAgIHZhciB0ZXhjb29yZHMgPSBbXTtcclxuICAgICAgICB2YXIgbm9ybWFscyA9IFtdO1xyXG4gICAgICAgIHZhciBmYWNlcyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8PSBoZWlnaHRTZWdtZW50czsgeSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB0ID0geSAvIGhlaWdodFNlZ21lbnRzO1xyXG4gICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8PSB3aWR0aFNlZ21lbnRzOyB4KyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBzID0geCAvIHdpZHRoU2VnbWVudHM7XHJcblxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goWzIgKiBzIC0gMSwgMiAqIHQgLSAxLCAwXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGV4Y29vcmRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4Y29vcmRzLnB1c2goW3MsIHRdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChub3JtYWxzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFscy5wdXNoKFswLCAwLCAxXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoeCA8IHdpZHRoU2VnbWVudHMgJiYgeSA8IGhlaWdodFNlZ21lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSB4ICsgeSAqICh3aWR0aFNlZ21lbnRzICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFjZXMucHVzaChbaSwgaSArIDEsIGkgKyB3aWR0aFNlZ21lbnRzICsgMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY2VzLnB1c2goW2kgKyB3aWR0aFNlZ21lbnRzICsgMSwgaSArIDEsIGkgKyB3aWR0aFNlZ21lbnRzICsgMl0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhdHRyaWJ1dGVzLnBvc2l0aW9uLmZyb21BcnJheShwb3NpdGlvbnMpO1xyXG4gICAgICAgIGF0dHJpYnV0ZXMudGV4Y29vcmQwLmZyb21BcnJheSh0ZXhjb29yZHMpO1xyXG4gICAgICAgIGF0dHJpYnV0ZXMubm9ybWFsLmZyb21BcnJheShub3JtYWxzKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0SW5kaWNlc0Zyb21BcnJheShmYWNlcyk7XHJcblxyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1pbi5zZXQoLTEsIC0xLCAwKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1heC5zZXQoMSwgMSwgMCk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGxhbmU7XHJcbiIsImltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBQbGFuZSBmcm9tICcuL1BsYW5lJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuXHJcbnZhciBwbGFuZU1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuQ3ViZVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC53aWR0aFNlZ21lbnRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5oZWlnaHRTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuZGVwdGhTZWdtZW50c11cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0Lmluc2lkZV1cclxuICovXHJcbnZhciBDdWJlID0gR2VvbWV0cnkuZXh0ZW5kKFxyXG4vKipAbGVuZHMgY2xheS5nZW9tZXRyeS5DdWJlIyAqL1xyXG57XHJcbiAgICBkeW5hbWljOiBmYWxzZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd2lkdGhTZWdtZW50czogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaGVpZ2h0U2VnbWVudHM6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRlcHRoU2VnbWVudHM6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpbnNpZGU6IGZhbHNlXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ3ViZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCBjdWJlIGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGJ1aWxkOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIHBsYW5lcyA9IHtcclxuICAgICAgICAgICAgJ3B4JzogY3JlYXRlUGxhbmUoJ3B4JywgdGhpcy5kZXB0aFNlZ21lbnRzLCB0aGlzLmhlaWdodFNlZ21lbnRzKSxcclxuICAgICAgICAgICAgJ254JzogY3JlYXRlUGxhbmUoJ254JywgdGhpcy5kZXB0aFNlZ21lbnRzLCB0aGlzLmhlaWdodFNlZ21lbnRzKSxcclxuICAgICAgICAgICAgJ3B5JzogY3JlYXRlUGxhbmUoJ3B5JywgdGhpcy53aWR0aFNlZ21lbnRzLCB0aGlzLmRlcHRoU2VnbWVudHMpLFxyXG4gICAgICAgICAgICAnbnknOiBjcmVhdGVQbGFuZSgnbnknLCB0aGlzLndpZHRoU2VnbWVudHMsIHRoaXMuZGVwdGhTZWdtZW50cyksXHJcbiAgICAgICAgICAgICdweic6IGNyZWF0ZVBsYW5lKCdweicsIHRoaXMud2lkdGhTZWdtZW50cywgdGhpcy5oZWlnaHRTZWdtZW50cyksXHJcbiAgICAgICAgICAgICdueic6IGNyZWF0ZVBsYW5lKCdueicsIHRoaXMud2lkdGhTZWdtZW50cywgdGhpcy5oZWlnaHRTZWdtZW50cyksXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIGF0dHJMaXN0ID0gWydwb3NpdGlvbicsICd0ZXhjb29yZDAnLCAnbm9ybWFsJ107XHJcbiAgICAgICAgdmFyIHZlcnRleE51bWJlciA9IDA7XHJcbiAgICAgICAgdmFyIGZhY2VOdW1iZXIgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIHBvcyBpbiBwbGFuZXMpIHtcclxuICAgICAgICAgICAgdmVydGV4TnVtYmVyICs9IHBsYW5lc1twb3NdLnZlcnRleENvdW50O1xyXG4gICAgICAgICAgICBmYWNlTnVtYmVyICs9IHBsYW5lc1twb3NdLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGF0dHJMaXN0Lmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1thdHRyTGlzdFtrXV0uaW5pdCh2ZXJ0ZXhOdW1iZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluZGljZXMgPSBuZXcgdmVuZG9yLlVpbnQxNkFycmF5KGZhY2VOdW1iZXIpO1xyXG4gICAgICAgIHZhciBmYWNlT2Zmc2V0ID0gMDtcclxuICAgICAgICB2YXIgdmVydGV4T2Zmc2V0ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBwb3MgaW4gcGxhbmVzKSB7XHJcbiAgICAgICAgICAgIHZhciBwbGFuZSA9IHBsYW5lc1twb3NdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGF0dHJMaXN0Lmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0ck5hbWUgPSBhdHRyTGlzdFtrXTtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyQXJyYXkgPSBwbGFuZS5hdHRyaWJ1dGVzW2F0dHJOYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyU2l6ZSA9IHBsYW5lLmF0dHJpYnV0ZXNbYXR0ck5hbWVdLnNpemU7XHJcbiAgICAgICAgICAgICAgICB2YXIgaXNOb3JtYWwgPSBhdHRyTmFtZSA9PT0gJ25vcm1hbCc7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGF0dHJBcnJheVtpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnNpZGUgJiYgaXNOb3JtYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAtdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1thdHRyTmFtZV0udmFsdWVbaSArIGF0dHJTaXplICogdmVydGV4T2Zmc2V0XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBsZW4gPSBwbGFuZS5pbmRpY2VzLmxlbmd0aDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbGFuZS5pbmRpY2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluZGljZXNbaSArIGZhY2VPZmZzZXRdID0gdmVydGV4T2Zmc2V0ICsgcGxhbmUuaW5kaWNlc1t0aGlzLmluc2lkZSA/IChsZW4gLSBpIC0gMSkgOiBpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmYWNlT2Zmc2V0ICs9IHBsYW5lLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICB2ZXJ0ZXhPZmZzZXQgKz0gcGxhbmUudmVydGV4Q291bnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5tYXguc2V0KDEsIDEsIDEpO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldCgtMSwgLTEsIC0xKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVQbGFuZShwb3MsIHdpZHRoU2VnbWVudHMsIGhlaWdodFNlZ21lbnRzKSB7XHJcblxyXG4gICAgcGxhbmVNYXRyaXguaWRlbnRpdHkoKTtcclxuXHJcbiAgICB2YXIgcGxhbmUgPSBuZXcgUGxhbmUoe1xyXG4gICAgICAgIHdpZHRoU2VnbWVudHM6IHdpZHRoU2VnbWVudHMsXHJcbiAgICAgICAgaGVpZ2h0U2VnbWVudHM6IGhlaWdodFNlZ21lbnRzXHJcbiAgICB9KTtcclxuXHJcbiAgICBzd2l0Y2gocG9zKSB7XHJcbiAgICAgICAgY2FzZSAncHgnOlxyXG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuUE9TSVRJVkVfWCk7XHJcbiAgICAgICAgICAgIE1hdHJpeDQucm90YXRlWShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIE1hdGguUEkgLyAyKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnbngnOlxyXG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuTkVHQVRJVkVfWCk7XHJcbiAgICAgICAgICAgIE1hdHJpeDQucm90YXRlWShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIC1NYXRoLlBJIC8gMik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3B5JzpcclxuICAgICAgICAgICAgTWF0cml4NC50cmFuc2xhdGUocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBWZWN0b3IzLlBPU0lUSVZFX1kpO1xyXG4gICAgICAgICAgICBNYXRyaXg0LnJvdGF0ZVgocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCAtTWF0aC5QSSAvIDIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdueSc6XHJcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcclxuICAgICAgICAgICAgTWF0cml4NC5yb3RhdGVYKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgTWF0aC5QSSAvIDIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdweic6XHJcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5QT1NJVElWRV9aKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnbnonOlxyXG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuTkVHQVRJVkVfWik7XHJcbiAgICAgICAgICAgIE1hdHJpeDQucm90YXRlWShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIE1hdGguUEkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHBsYW5lLmFwcGx5VHJhbnNmb3JtKHBsYW5lTWF0cml4KTtcclxuICAgIHJldHVybiBwbGFuZTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ3ViZTtcclxuIiwiaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lmdlb21ldHJ5LlNwaGVyZVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoU2VnbWVudHNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0U2VnbWVudHNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGhpU3RhcnRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGhpTGVuZ3RoXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3RoZXRhU3RhcnRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbdGhldGFMZW5ndGhdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcmFkaXVzXVxyXG4gKi9cclxudmFyIFNwaGVyZSA9IEdlb21ldHJ5LmV4dGVuZCgvKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuU3BoZXJlIyAqLyB7XHJcbiAgICBkeW5hbWljOiBmYWxzZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd2lkdGhTZWdtZW50czogNDAsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodFNlZ21lbnRzOiAyMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHBoaVN0YXJ0OiAwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBwaGlMZW5ndGg6IE1hdGguUEkgKiAyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhldGFTdGFydDogMCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhldGFMZW5ndGg6IE1hdGguUEksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYWRpdXM6IDFcclxuXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuU3BoZXJlLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIHNwaGVyZSBnZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICBidWlsZDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGhlaWdodFNlZ21lbnRzID0gdGhpcy5oZWlnaHRTZWdtZW50cztcclxuICAgICAgICB2YXIgd2lkdGhTZWdtZW50cyA9IHRoaXMud2lkdGhTZWdtZW50cztcclxuXHJcbiAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgdGV4Y29vcmRBdHRyID0gdGhpcy5hdHRyaWJ1dGVzLnRleGNvb3JkMDtcclxuICAgICAgICB2YXIgbm9ybWFsQXR0ciA9IHRoaXMuYXR0cmlidXRlcy5ub3JtYWw7XHJcblxyXG4gICAgICAgIHZhciB2ZXJ0ZXhDb3VudCA9ICh3aWR0aFNlZ21lbnRzICsgMSkgKiAoaGVpZ2h0U2VnbWVudHMgKyAxKTtcclxuICAgICAgICBwb3NpdGlvbkF0dHIuaW5pdCh2ZXJ0ZXhDb3VudCk7XHJcbiAgICAgICAgdGV4Y29vcmRBdHRyLmluaXQodmVydGV4Q291bnQpO1xyXG4gICAgICAgIG5vcm1hbEF0dHIuaW5pdCh2ZXJ0ZXhDb3VudCk7XHJcblxyXG4gICAgICAgIHZhciBJbmRpY2VzQ3RvciA9IHZlcnRleENvdW50ID4gMHhmZmZmID8gVWludDMyQXJyYXkgOiBVaW50MTZBcnJheTtcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcyA9IG5ldyBJbmRpY2VzQ3Rvcih3aWR0aFNlZ21lbnRzICogaGVpZ2h0U2VnbWVudHMgKiA2KTtcclxuXHJcbiAgICAgICAgdmFyIHgsIHksIHosXHJcbiAgICAgICAgICAgIHUsIHYsXHJcbiAgICAgICAgICAgIGksIGo7XHJcblxyXG4gICAgICAgIHZhciByYWRpdXMgPSB0aGlzLnJhZGl1cztcclxuICAgICAgICB2YXIgcGhpU3RhcnQgPSB0aGlzLnBoaVN0YXJ0O1xyXG4gICAgICAgIHZhciBwaGlMZW5ndGggPSB0aGlzLnBoaUxlbmd0aDtcclxuICAgICAgICB2YXIgdGhldGFTdGFydCA9IHRoaXMudGhldGFTdGFydDtcclxuICAgICAgICB2YXIgdGhldGFMZW5ndGggPSB0aGlzLnRoZXRhTGVuZ3RoO1xyXG4gICAgICAgIHZhciByYWRpdXMgPSB0aGlzLnJhZGl1cztcclxuXHJcbiAgICAgICAgdmFyIHBvcyA9IFtdO1xyXG4gICAgICAgIHZhciB1diA9IFtdO1xyXG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciBkaXZpZGVyID0gMSAvIHJhZGl1cztcclxuICAgICAgICBmb3IgKGogPSAwOyBqIDw9IGhlaWdodFNlZ21lbnRzOyBqICsrKSB7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gd2lkdGhTZWdtZW50czsgaSArKykge1xyXG4gICAgICAgICAgICAgICAgdSA9IGkgLyB3aWR0aFNlZ21lbnRzO1xyXG4gICAgICAgICAgICAgICAgdiA9IGogLyBoZWlnaHRTZWdtZW50cztcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBYIGF4aXMgaXMgaW52ZXJ0ZWQgc28gdGV4dHVyZSBjYW4gYmUgbWFwcGVkIGZyb20gbGVmdCB0byByaWdodFxyXG4gICAgICAgICAgICAgICAgeCA9IC1yYWRpdXMgKiBNYXRoLmNvcyhwaGlTdGFydCArIHUgKiBwaGlMZW5ndGgpICogTWF0aC5zaW4odGhldGFTdGFydCArIHYgKiB0aGV0YUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB5ID0gcmFkaXVzICogTWF0aC5jb3ModGhldGFTdGFydCArIHYgKiB0aGV0YUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB6ID0gcmFkaXVzICogTWF0aC5zaW4ocGhpU3RhcnQgKyB1ICogcGhpTGVuZ3RoKSAqIE1hdGguc2luKHRoZXRhU3RhcnQgKyB2ICogdGhldGFMZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHBvc1swXSA9IHg7IHBvc1sxXSA9IHk7IHBvc1syXSA9IHo7XHJcbiAgICAgICAgICAgICAgICB1dlswXSA9IHU7IHV2WzFdID0gdjtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uQXR0ci5zZXQob2Zmc2V0LCBwb3MpO1xyXG4gICAgICAgICAgICAgICAgdGV4Y29vcmRBdHRyLnNldChvZmZzZXQsIHV2KTtcclxuICAgICAgICAgICAgICAgIHBvc1swXSAqPSBkaXZpZGVyO1xyXG4gICAgICAgICAgICAgICAgcG9zWzFdICo9IGRpdmlkZXI7XHJcbiAgICAgICAgICAgICAgICBwb3NbMl0gKj0gZGl2aWRlcjtcclxuICAgICAgICAgICAgICAgIG5vcm1hbEF0dHIuc2V0KG9mZnNldCwgcG9zKTtcclxuICAgICAgICAgICAgICAgIG9mZnNldCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaTEsIGkyLCBpMywgaTQ7XHJcblxyXG4gICAgICAgIHZhciBsZW4gPSB3aWR0aFNlZ21lbnRzICsgMTtcclxuXHJcbiAgICAgICAgdmFyIG4gPSAwO1xyXG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBoZWlnaHRTZWdtZW50czsgaiArKykge1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2lkdGhTZWdtZW50czsgaSArKykge1xyXG4gICAgICAgICAgICAgICAgaTIgPSBqICogbGVuICsgaTtcclxuICAgICAgICAgICAgICAgIGkxID0gKGogKiBsZW4gKyBpICsgMSk7XHJcbiAgICAgICAgICAgICAgICBpNCA9IChqICsgMSkgKiBsZW4gKyBpICsgMTtcclxuICAgICAgICAgICAgICAgIGkzID0gKGogKyAxKSAqIGxlbiArIGk7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTE7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMjtcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGk0O1xyXG5cclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGkyO1xyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTM7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpNDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWF4LnNldChyYWRpdXMsIHJhZGl1cywgcmFkaXVzKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1pbi5zZXQoLXJhZGl1cywgLXJhZGl1cywgLXJhZGl1cyk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BoZXJlO1xyXG4iLCJpbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lmdlb21ldHJ5LlBhcmFtZXRyaWNTdXJmYWNlXHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZ2VuZXJhdG9yXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IueFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IueVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IuelxyXG4gKiBAcGFyYW0ge0FycmF5fSBbZ2VuZXJhdG9yLnU9WzAsIDEsIDAuMDVdXVxyXG4gKiBAcGFyYW0ge0FycmF5fSBbZ2VuZXJhdG9yLnY9WzAsIDEsIDAuMDVdXVxyXG4gKi9cclxudmFyIFBhcmFtZXRyaWNTdXJmYWNlID0gR2VvbWV0cnkuZXh0ZW5kKFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuUGFyYW1ldHJpY1N1cmZhY2UjICovXHJcbntcclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0b3I6IG51bGxcclxuXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuUGFyYW1ldHJpY1N1cmZhY2UucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgcGFyYW1ldHJpYyBzdXJmYWNlIGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGJ1aWxkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGdlbmVyYXRvciA9IHRoaXMuZ2VuZXJhdG9yO1xyXG5cclxuICAgICAgICBpZiAoIWdlbmVyYXRvciB8fCAhZ2VuZXJhdG9yLnggfHwgIWdlbmVyYXRvci55IHx8ICFnZW5lcmF0b3Iueikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZ2VuZXJhdG9yJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB4RnVuYyA9IGdlbmVyYXRvci54O1xyXG4gICAgICAgIHZhciB5RnVuYyA9IGdlbmVyYXRvci55O1xyXG4gICAgICAgIHZhciB6RnVuYyA9IGdlbmVyYXRvci56O1xyXG4gICAgICAgIHZhciB1UmFuZ2UgPSBnZW5lcmF0b3IudSB8fCBbMCwgMSwgMC4wNV07XHJcbiAgICAgICAgdmFyIHZSYW5nZSA9IGdlbmVyYXRvci52IHx8IFswLCAxLCAwLjA1XTtcclxuXHJcbiAgICAgICAgdmFyIHVOdW0gPSBNYXRoLmZsb29yKCh1UmFuZ2VbMV0gLSB1UmFuZ2VbMF0gKyB1UmFuZ2VbMl0pIC8gdVJhbmdlWzJdKTtcclxuICAgICAgICB2YXIgdk51bSA9IE1hdGguZmxvb3IoKHZSYW5nZVsxXSAtIHZSYW5nZVswXSArIHZSYW5nZVsyXSkgLyB2UmFuZ2VbMl0pO1xyXG5cclxuICAgICAgICBpZiAoIWlzRmluaXRlKHVOdW0pIHx8ICFpc0Zpbml0ZSh2TnVtKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luZmluaXRlIGdlbmVyYXRvcicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZlcnRleE51bSA9IHVOdW0gKiB2TnVtO1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbi5pbml0KHZlcnRleE51bSk7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnRleGNvb3JkMC5pbml0KHZlcnRleE51bSk7XHJcblxyXG4gICAgICAgIHZhciBwb3MgPSBbXTtcclxuICAgICAgICB2YXIgdGV4Y29vcmQgPSBbXTtcclxuICAgICAgICB2YXIgblZlcnRleCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2TnVtOyBqKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1TnVtOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB1ID0gaSAqIHVSYW5nZVsyXSArIHVSYW5nZVswXTtcclxuICAgICAgICAgICAgICAgIHZhciB2ID0gaiAqIHZSYW5nZVsyXSArIHZSYW5nZVswXTtcclxuICAgICAgICAgICAgICAgIHBvc1swXSA9IHhGdW5jKHUsIHYpO1xyXG4gICAgICAgICAgICAgICAgcG9zWzFdID0geUZ1bmModSwgdik7XHJcbiAgICAgICAgICAgICAgICBwb3NbMl0gPSB6RnVuYyh1LCB2KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZXhjb29yZFswXSA9IGkgLyAodU51bSAtIDEpO1xyXG4gICAgICAgICAgICAgICAgdGV4Y29vcmRbMV0gPSBqIC8gKHZOdW0gLSAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24uc2V0KG5WZXJ0ZXgsIHBvcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMudGV4Y29vcmQwLnNldChuVmVydGV4LCB0ZXhjb29yZCk7XHJcbiAgICAgICAgICAgICAgICBuVmVydGV4Kys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBJbmRpY2VzQ3RvciA9IHZlcnRleE51bSA+IDB4ZmZmZiA/IFVpbnQzMkFycmF5IDogVWludDE2QXJyYXk7XHJcbiAgICAgICAgdmFyIG5JbmRpY2VzID0gKHVOdW0gLSAxKSAqICh2TnVtIC0gMSkgKiA2O1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzID0gbmV3IEluZGljZXNDdG9yKG5JbmRpY2VzKTtcclxuXHJcbiAgICAgICAgdmFyIG4gPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdk51bSAtIDE7IGorKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVOdW0gLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBpMiA9IGogKiB1TnVtICsgaTtcclxuICAgICAgICAgICAgICAgIHZhciBpMSA9IChqICogdU51bSArIGkgKyAxKTtcclxuICAgICAgICAgICAgICAgIHZhciBpNCA9IChqICsgMSkgKiB1TnVtICsgaSArIDE7XHJcbiAgICAgICAgICAgICAgICB2YXIgaTMgPSAoaiArIDEpICogdU51bSArIGk7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTE7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMjtcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGk0O1xyXG5cclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGkyO1xyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTM7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpNDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVZlcnRleE5vcm1hbHMoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KCk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGFyYW1ldHJpY1N1cmZhY2U7XHJcbiIsIi8qKlxyXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgdGV4dHVyZXMgbGlrZSBjb21wcmVzc2VkIHRleHR1cmUsIHRleHR1cmUyZCwgdGV4dHVyZWN1YmVcclxuICogVE9ETyBtYXBwaW5nXHJcbiAqL1xyXG5pbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCBDYWNoZSBmcm9tICcuL2NvcmUvQ2FjaGUnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5UZXh0dXJlXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgVGV4dHVyZSA9IEJhc2UuZXh0ZW5kKCAvKiogQGxlbmRzIGNsYXkuVGV4dHVyZSMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0dXJlIHdpZHRoLCByZWFkb25seSB3aGVuIHRoZSB0ZXh0dXJlIHNvdXJjZSBpcyBpbWFnZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd2lkdGg6IDUxMixcclxuICAgIC8qKlxyXG4gICAgICogVGV4dHVyZSBoZWlnaHQsIHJlYWRvbmx5IHdoZW4gdGhlIHRleHR1cmUgc291cmNlIGlzIGltYWdlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBoZWlnaHQ6IDUxMixcclxuICAgIC8qKlxyXG4gICAgICogVGV4ZWwgZGF0YSB0eXBlLlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5VTlNJR05FRF9CWVRFfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5IQUxGX0ZMT0FUfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5GTE9BVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuVU5TSUdORURfSU5UXzI0XzhfV0VCR0x9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlVOU0lHTkVEX0lOVH1cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHR5cGU6IGdsZW51bS5VTlNJR05FRF9CWVRFLFxyXG4gICAgLyoqXHJcbiAgICAgKiBGb3JtYXQgb2YgdGV4ZWwgZGF0YVxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5SR0JBfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ERVBUSF9DT01QT05FTlR9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkRFUFRIX1NURU5DSUx9XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBmb3JtYXQ6IGdsZW51bS5SR0JBLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0dXJlIHdyYXAuIERlZmF1bHQgdG8gYmUgUkVQRUFULlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5DTEFNUF9UT19FREdFfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5SRVBFQVR9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLk1JUlJPUkVEX1JFUEVBVH1cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHdyYXBTOiBnbGVudW0uUkVQRUFULFxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0dXJlIHdyYXAuIERlZmF1bHQgdG8gYmUgUkVQRUFULlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5DTEFNUF9UT19FREdFfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5SRVBFQVR9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLk1JUlJPUkVEX1JFUEVBVH1cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHdyYXBUOiBnbGVudW0uUkVQRUFULFxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLk5FQVJFU1R9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkxJTkVBUn1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTElORUFSX01JUE1BUF9ORUFSRVNUfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ORUFSRVNUX01JUE1BUF9MSU5FQVJ9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTElORUFSfVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbWluRmlsdGVyOiBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVIsXHJcbiAgICAvKipcclxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTkVBUkVTVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTElORUFSfVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbWFnRmlsdGVyOiBnbGVudW0uTElORUFSLFxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBlbmFibGUgbWltYXAuXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgdXNlTWlwbWFwOiB0cnVlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW5pc290cm9waWMgZmlsdGVyaW5nLCBlbmFibGVkIGlmIHZhbHVlIGlzIGxhcmdlciB0aGFuIDFcclxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpY1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYW5pc290cm9waWM6IDEsXHJcbiAgICAvLyBwaXhlbFN0b3JlaSBwYXJhbWV0ZXJzLCBub3QgYXZhaWxhYmxlIHdoZW4gdGV4dHVyZSBpcyB1c2VkIGFzIHJlbmRlciB0YXJnZXRcclxuICAgIC8vIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvb3BlbmdsZXMvc2RrL2RvY3MvbWFuL3hodG1sL2dsUGl4ZWxTdG9yZWkueG1sXHJcbiAgICAvKipcclxuICAgICAqIElmIGZsaXAgaW4geSBheGlzIGZvciBnaXZlbiBpbWFnZSBzb3VyY2VcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICovXHJcbiAgICBmbGlwWTogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgZmxhZyB0byBpbmRpY2F0ZSBpZiB0ZXh0dXJlIHNvdXJjZSBpcyBzUkdCXHJcbiAgICAgKi9cclxuICAgIHNSR0I6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCA0XHJcbiAgICAgKi9cclxuICAgIHVucGFja0FsaWdubWVudDogNCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICovXHJcbiAgICBwcmVtdWx0aXBseUFscGhhOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIER5bmFtaWMgb3B0aW9uIGZvciB0ZXh0dXJlIGxpa2UgdmlkZW9cclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBkeW5hbWljOiBmYWxzZSxcclxuXHJcbiAgICBOUE9UOiBmYWxzZSxcclxuXHJcbiAgICAvLyBQRU5ESU5HXHJcbiAgICAvLyBJbml0IGl0IGhlcmUgdG8gYXZvaWQgZGVvcHRpbWl6YXRpb24gd2hlbiBpdCdzIGFzc2lnbmVkIGluIGFwcGxpY2F0aW9uIGR5bmFtaWNhbGx5XHJcbiAgICBfX3VzZWQ6IDBcclxuXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX2NhY2hlID0gbmV3IENhY2hlKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5UZXh0dXJlLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgZ2V0V2ViR0xUZXh0dXJlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG5cclxuICAgICAgICBpZiAoY2FjaGUubWlzcygnd2ViZ2xfdGV4dHVyZScpKSB7XHJcbiAgICAgICAgICAgIC8vIEluIGEgbmV3IGdsIGNvbnRleHQsIGNyZWF0ZSBuZXcgdGV4dHVyZSBhbmQgc2V0IGRpcnR5IHRydWVcclxuICAgICAgICAgICAgY2FjaGUucHV0KCd3ZWJnbF90ZXh0dXJlJywgX2dsLmNyZWF0ZVRleHR1cmUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmR5bmFtaWMpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjYWNoZS5pc0RpcnR5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICBjYWNoZS5mcmVzaCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpO1xyXG4gICAgfSxcclxuXHJcbiAgICBiaW5kOiBmdW5jdGlvbiAoKSB7fSxcclxuICAgIHVuYmluZDogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIHRleHR1cmUgaXMgZGlydHkgYW5kIHVwZGF0ZSBpbiB0aGUgbmV4dCBmcmFtZVxyXG4gICAgICovXHJcbiAgICBkaXJ0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jYWNoZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWNoZS5kaXJ0eUFsbCgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHt9LFxyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgY29tbW9uIHBhcmFtZXRlcnMgb2YgdGV4dHVyZVxyXG4gICAgdXBkYXRlQ29tbW9uOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgX2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfRkxJUF9ZX1dFQkdMLCB0aGlzLmZsaXBZKTtcclxuICAgICAgICBfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcclxuICAgICAgICBfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19BTElHTk1FTlQsIHRoaXMudW5wYWNrQWxpZ25tZW50KTtcclxuXHJcbiAgICAgICAgLy8gVXNlIG9mIG5vbmUtcG93ZXIgb2YgdHdvIHRleHR1cmVcclxuICAgICAgICAvLyBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3dlYmdsL3dpa2kvV2ViR0xfYW5kX09wZW5HTF9EaWZmZXJlbmNlc1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdCA9PT0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVCkge1xyXG4gICAgICAgICAgICB0aGlzLnVzZU1pcG1hcCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNSR0JFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX3NSR0InKTtcclxuICAgICAgICAvLyBGYWxsYmFja1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdCA9PT0gVGV4dHVyZS5TUkdCICYmICFzUkdCRXh0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gVGV4dHVyZS5SR0I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdCA9PT0gVGV4dHVyZS5TUkdCX0FMUEhBICYmICFzUkdCRXh0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gVGV4dHVyZS5SR0JBO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5OUE9UID0gIXRoaXMuaXNQb3dlck9mVHdvKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEF2YWlsYWJsZVdyYXBTOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuTlBPVCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2xlbnVtLkNMQU1QX1RPX0VER0U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBTO1xyXG4gICAgfSxcclxuICAgIGdldEF2YWlsYWJsZVdyYXBUOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuTlBPVCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2xlbnVtLkNMQU1QX1RPX0VER0U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBUO1xyXG4gICAgfSxcclxuICAgIGdldEF2YWlsYWJsZU1pbkZpbHRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtaW5GaWx0ZXIgPSB0aGlzLm1pbkZpbHRlcjtcclxuICAgICAgICBpZiAodGhpcy5OUE9UIHx8ICF0aGlzLnVzZU1pcG1hcCkge1xyXG4gICAgICAgICAgICBpZiAobWluRmlsdGVyID09PSBnbGVudW0uTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCB8fFxyXG4gICAgICAgICAgICAgICAgbWluRmlsdGVyID09PSBnbGVudW0uTkVBUkVTVF9NSVBNQVBfTElORUFSXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdsZW51bS5ORUFSRVNUO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1pbkZpbHRlciA9PT0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTElORUFSIHx8XHJcbiAgICAgICAgICAgICAgICBtaW5GaWx0ZXIgPT09IGdsZW51bS5MSU5FQVJfTUlQTUFQX05FQVJFU1RcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2xlbnVtLkxJTkVBUjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtaW5GaWx0ZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtaW5GaWx0ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGdldEF2YWlsYWJsZU1hZ0ZpbHRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hZ0ZpbHRlcjtcclxuICAgIH0sXHJcblxyXG4gICAgbmV4dEhpZ2hlc3RQb3dlck9mVHdvOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgIC0teDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IDMyOyBpIDw8PSAxKSB7XHJcbiAgICAgICAgICAgIHggPSB4IHwgeCA+PiBpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geCArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuXHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcblxyXG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcclxuXHJcbiAgICAgICAgdmFyIHdlYmdsVGV4dHVyZSA9IGNhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpO1xyXG4gICAgICAgIGlmICh3ZWJnbFRleHR1cmUpe1xyXG4gICAgICAgICAgICByZW5kZXJlci5nbC5kZWxldGVUZXh0dXJlKHdlYmdsVGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhY2hlLmRlbGV0ZUNvbnRleHQocmVuZGVyZXIuX191aWRfXyk7XHJcblxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogVGVzdCBpZiBpbWFnZSBvZiB0ZXh0dXJlIGlzIHZhbGlkIGFuZCBsb2FkZWQuXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc1JlbmRlcmFibGU6IGZ1bmN0aW9uICgpIHt9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVzdCBpZiB0ZXh0dXJlIHNpemUgaXMgcG93ZXIgb2YgdHdvXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICgpIHt9XHJcbn0pO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmUucHJvdG90eXBlLCAnd2lkdGgnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XHJcbiAgICB9LFxyXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xyXG4gICAgfVxyXG59KTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmUucHJvdG90eXBlLCAnaGVpZ2h0Jywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbi8qIERhdGFUeXBlICovXHJcblxyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuQllURSA9IGdsZW51bS5CWVRFO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuVU5TSUdORURfQllURSA9IGdsZW51bS5VTlNJR05FRF9CWVRFO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuU0hPUlQgPSBnbGVudW0uU0hPUlQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5VTlNJR05FRF9TSE9SVCA9IGdsZW51bS5VTlNJR05FRF9TSE9SVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLklOVCA9IGdsZW51bS5JTlQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5VTlNJR05FRF9JTlQgPSBnbGVudW0uVU5TSUdORURfSU5UO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuRkxPQVQgPSBnbGVudW0uRkxPQVQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5IQUxGX0ZMT0FUID0gMHg4RDYxO1xyXG5cclxuLyoqXHJcbiAqIFVOU0lHTkVEX0lOVF8yNF84X1dFQkdMIGZvciBXRUJHTF9kZXB0aF90ZXh0dXJlIGV4dGVuc2lvblxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTCA9IDM0MDQyO1xyXG5cclxuLyogUGl4ZWxGb3JtYXQgKi9cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkRFUFRIX0NPTVBPTkVOVCA9IGdsZW51bS5ERVBUSF9DT01QT05FTlQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5ERVBUSF9TVEVOQ0lMID0gZ2xlbnVtLkRFUFRIX1NURU5DSUw7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5BTFBIQSA9IGdsZW51bS5BTFBIQTtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlJHQiA9IGdsZW51bS5SR0I7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5SR0JBID0gZ2xlbnVtLlJHQkE7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5MVU1JTkFOQ0UgPSBnbGVudW0uTFVNSU5BTkNFO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTFVNSU5BTkNFX0FMUEhBID0gZ2xlbnVtLkxVTUlOQU5DRV9BTFBIQTtcclxuXHJcbi8qKlxyXG4gKiBAc2VlIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL2V4dGVuc2lvbnMvRVhUX3NSR0IvXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlNSR0IgPSAweDhDNDA7XHJcbi8qKlxyXG4gKiBAc2VlIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL2V4dGVuc2lvbnMvRVhUX3NSR0IvXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlNSR0JfQUxQSEEgPSAweDhDNDI7XHJcblxyXG4vKiBDb21wcmVzc2VkIFRleHR1cmUgKi9cclxuVGV4dHVyZS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUID0gMHg4M0YwO1xyXG5UZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUID0gMHg4M0YxO1xyXG5UZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUID0gMHg4M0YyO1xyXG5UZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUID0gMHg4M0YzO1xyXG5cclxuLyogVGV4dHVyZU1hZ0ZpbHRlciAqL1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTkVBUkVTVCA9IGdsZW51bS5ORUFSRVNUO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTElORUFSID0gZ2xlbnVtLkxJTkVBUjtcclxuXHJcbi8qIFRleHR1cmVNaW5GaWx0ZXIgKi9cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLk5FQVJFU1RfTUlQTUFQX05FQVJFU1QgPSBnbGVudW0uTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCA9IGdsZW51bS5MSU5FQVJfTUlQTUFQX05FQVJFU1Q7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5ORUFSRVNUX01JUE1BUF9MSU5FQVIgPSBnbGVudW0uTkVBUkVTVF9NSVBNQVBfTElORUFSO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTElORUFSX01JUE1BUF9MSU5FQVIgPSBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVI7XHJcblxyXG4vKiBUZXh0dXJlV3JhcE1vZGUgKi9cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlJFUEVBVCA9IGdsZW51bS5SRVBFQVQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5DTEFNUF9UT19FREdFID0gZ2xlbnVtLkNMQU1QX1RPX0VER0U7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5NSVJST1JFRF9SRVBFQVQgPSBnbGVudW0uTUlSUk9SRURfUkVQRUFUO1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRleHR1cmU7XHJcbiIsInZhciBtYXRoVXRpbCA9IHt9O1xyXG5cclxubWF0aFV0aWwuaXNQb3dlck9mVHdvID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gKHZhbHVlICYgKHZhbHVlIC0gMSkpID09PSAwO1xyXG59O1xyXG5cclxubWF0aFV0aWwubmV4dFBvd2VyT2ZUd28gPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHZhbHVlIC0tO1xyXG4gICAgdmFsdWUgfD0gdmFsdWUgPj4gMTtcclxuICAgIHZhbHVlIHw9IHZhbHVlID4+IDI7XHJcbiAgICB2YWx1ZSB8PSB2YWx1ZSA+PiA0O1xyXG4gICAgdmFsdWUgfD0gdmFsdWUgPj4gODtcclxuICAgIHZhbHVlIHw9IHZhbHVlID4+IDE2O1xyXG4gICAgdmFsdWUgKys7XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59O1xyXG5cclxubWF0aFV0aWwubmVhcmVzdFBvd2VyT2ZUd28gPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHJldHVybiBNYXRoLnBvdyggMiwgTWF0aC5yb3VuZCggTWF0aC5sb2coIHZhbHVlICkgLyBNYXRoLkxOMiApICk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBtYXRoVXRpbDtcclxuIiwiaW1wb3J0IFRleHR1cmUgZnJvbSAnLi9UZXh0dXJlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IG1hdGhVdGlsIGZyb20gJy4vbWF0aC91dGlsJztcclxudmFyIGlzUG93ZXJPZlR3byA9IG1hdGhVdGlsLmlzUG93ZXJPZlR3bztcclxuXHJcbmZ1bmN0aW9uIG5lYXJlc3RQb3dlck9mVHdvKHZhbCkge1xyXG4gICAgcmV0dXJuIE1hdGgucG93KDIsIE1hdGgucm91bmQoTWF0aC5sb2codmFsKSAvIE1hdGguTE4yKSk7XHJcbn1cclxuZnVuY3Rpb24gY29udmVydFRleHR1cmVUb1Bvd2VyT2ZUd28odGV4dHVyZSwgY2FudmFzKSB7XHJcbiAgICAvLyB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICB2YXIgd2lkdGggPSBuZWFyZXN0UG93ZXJPZlR3byh0ZXh0dXJlLndpZHRoKTtcclxuICAgIHZhciBoZWlnaHQgPSBuZWFyZXN0UG93ZXJPZlR3byh0ZXh0dXJlLmhlaWdodCk7XHJcbiAgICBjYW52YXMgPSBjYW52YXMgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcclxuICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBjdHguZHJhd0ltYWdlKHRleHR1cmUuaW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgIHJldHVybiBjYW52YXM7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5UZXh0dXJlMkRcclxuICogQGV4dGVuZHMgY2xheS5UZXh0dXJlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICAuLi5cclxuICogICAgIHZhciBtYXQgPSBuZXcgY2xheS5NYXRlcmlhbCh7XHJcbiAqICAgICAgICAgc2hhZGVyOiBjbGF5LnNoYWRlci5saWJyYXJ5LmdldCgnY2xheS5waG9uZycsICdkaWZmdXNlTWFwJylcclxuICogICAgIH0pO1xyXG4gKiAgICAgdmFyIGRpZmZ1c2VNYXAgPSBuZXcgY2xheS5UZXh0dXJlMkQoKTtcclxuICogICAgIGRpZmZ1c2VNYXAubG9hZCgnYXNzZXRzL3RleHR1cmVzL2RpZmZ1c2UuanBnJyk7XHJcbiAqICAgICBtYXQuc2V0KCdkaWZmdXNlTWFwJywgZGlmZnVzZU1hcCk7XHJcbiAqICAgICAuLi5cclxuICogICAgIGRpZmZ1c2VNYXAuc3VjY2VzcyhmdW5jdGlvbiAoKSB7XHJcbiAqICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGRpZmZ1c2UgdGV4dHVyZSBsb2FkZWRcclxuICogICAgICAgICBhbmltYXRpb24ub24oJ2ZyYW1lJywgZnVuY3Rpb24gKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAqICAgICAgICAgfSk7XHJcbiAqICAgICB9KTtcclxuICovXHJcbnZhciBUZXh0dXJlMkQgPSBUZXh0dXJlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlRleHR1cmUyRCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH1cclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBUT0RPIG1hcmsgZGlydHkgd2hlbiBhc3NpZ25lZC5cclxuICAgICAgICBpbWFnZTogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQaXhlbHMgZGF0YS4gV2lsbCBiZSBpZ25vcmVkIGlmIGltYWdlIGlzIHNldC5cclxuICAgICAgICAgKiBAdHlwZSB7P1VpbnQ4QXJyYXl8RmxvYXQzMkFycmF5fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHBpeGVsczogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPE9iamVjdD59XHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiAgICAgW3tcclxuICAgICAgICAgKiAgICAgICAgIGltYWdlOiBtaXBtYXAwLFxyXG4gICAgICAgICAqICAgICAgICAgcGl4ZWxzOiBudWxsXHJcbiAgICAgICAgICogICAgIH0sIHtcclxuICAgICAgICAgKiAgICAgICAgIGltYWdlOiBtaXBtYXAxLFxyXG4gICAgICAgICAqICAgICAgICAgcGl4ZWxzOiBudWxsXHJcbiAgICAgICAgICogICAgIH0sIC4uLi5dXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWlwbWFwczogW10sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGNvbnZlcnQgdGV4dHVyZSB0byBwb3dlci1vZi10d29cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb252ZXJ0VG9QT1Q6IGZhbHNlXHJcbiAgICB9O1xyXG59LCB7XHJcblxyXG4gICAgdGV4dHVyZVR5cGU6ICd0ZXh0dXJlMkQnLFxyXG5cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfMkQsIHRoaXMuX2NhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVDb21tb24ocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB2YXIgZ2xGb3JtYXQgPSB0aGlzLmZvcm1hdDtcclxuICAgICAgICB2YXIgZ2xUeXBlID0gdGhpcy50eXBlO1xyXG5cclxuICAgICAgICAvLyBDb252ZXJ0IHRvIHBvdCBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIHVzaW5nIGltYWdlL2NhbnZhcy92aWRlbyBlbGVtZW50LlxyXG4gICAgICAgIHZhciBjb252ZXJ0VG9QT1QgPSAhISh0aGlzLmNvbnZlcnRUb1BPVFxyXG4gICAgICAgICAgICAmJiAhdGhpcy5taXBtYXBzLmxlbmd0aCAmJiB0aGlzLmltYWdlXHJcbiAgICAgICAgICAgICYmICh0aGlzLndyYXBTID09PSBUZXh0dXJlLlJFUEVBVCB8fCB0aGlzLndyYXBUID09PSBUZXh0dXJlLlJFUEVBVClcclxuICAgICAgICAgICAgJiYgdGhpcy5OUE9UXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfMkQsIF9nbC5URVhUVVJFX1dSQVBfUywgY29udmVydFRvUE9UID8gdGhpcy53cmFwUyA6IHRoaXMuZ2V0QXZhaWxhYmxlV3JhcFMoKSk7XHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfMkQsIF9nbC5URVhUVVJFX1dSQVBfVCwgY29udmVydFRvUE9UID8gdGhpcy53cmFwVCA6IHRoaXMuZ2V0QXZhaWxhYmxlV3JhcFQoKSk7XHJcblxyXG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFXzJELCBfZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBjb252ZXJ0VG9QT1QgPyB0aGlzLm1hZ0ZpbHRlciA6IHRoaXMuZ2V0QXZhaWxhYmxlTWFnRmlsdGVyKCkpO1xyXG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFXzJELCBfZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBjb252ZXJ0VG9QT1QgPyB0aGlzLm1pbkZpbHRlciA6IHRoaXMuZ2V0QXZhaWxhYmxlTWluRmlsdGVyKCkpO1xyXG5cclxuICAgICAgICB2YXIgYW5pc290cm9waWNFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyk7XHJcbiAgICAgICAgaWYgKGFuaXNvdHJvcGljRXh0ICYmIHRoaXMuYW5pc290cm9waWMgPiAxKSB7XHJcbiAgICAgICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJmKF9nbC5URVhUVVJFXzJELCBhbmlzb3Ryb3BpY0V4dC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCwgdGhpcy5hbmlzb3Ryb3BpYyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGYWxsYmFjayB0byBmbG9hdCB0eXBlIGlmIGJyb3dzZXIgZG9uJ3QgaGF2ZSBoYWxmIGZsb2F0IGV4dGVuc2lvblxyXG4gICAgICAgIGlmIChnbFR5cGUgPT09IDM2MTkzKSB7XHJcbiAgICAgICAgICAgIHZhciBoYWxmRmxvYXRFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcpO1xyXG4gICAgICAgICAgICBpZiAoIWhhbGZGbG9hdEV4dCkge1xyXG4gICAgICAgICAgICAgICAgZ2xUeXBlID0gZ2xlbnVtLkZMT0FUO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5taXBtYXBzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5taXBtYXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWlwbWFwID0gdGhpcy5taXBtYXBzW2ldO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGV4dHVyZURhdGEoX2dsLCBtaXBtYXAsIGksIHdpZHRoLCBoZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHdpZHRoIC89IDI7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgLz0gMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGV4dHVyZURhdGEoX2dsLCB0aGlzLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgY29udmVydFRvUE9UKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZU1pcG1hcCAmJiAoIXRoaXMuTlBPVCB8fCBjb252ZXJ0VG9QT1QpKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZ2VuZXJhdGVNaXBtYXAoX2dsLlRFWFRVUkVfMkQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfMkQsIG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlVGV4dHVyZURhdGE6IGZ1bmN0aW9uIChfZ2wsIGRhdGEsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlLCBjb252ZXJ0VG9QT1QpIHtcclxuICAgICAgICBpZiAoZGF0YS5pbWFnZSkge1xyXG4gICAgICAgICAgICB2YXIgaW1nRGF0YSA9IGRhdGEuaW1hZ2U7XHJcbiAgICAgICAgICAgIGlmIChjb252ZXJ0VG9QT1QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvdENhbnZhcyA9IGNvbnZlcnRUZXh0dXJlVG9Qb3dlck9mVHdvKHRoaXMsIHRoaXMuX3BvdENhbnZhcyk7XHJcbiAgICAgICAgICAgICAgICBpbWdEYXRhID0gdGhpcy5fcG90Q2FudmFzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF9nbC50ZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgZ2xGb3JtYXQsIGdsRm9ybWF0LCBnbFR5cGUsIGltZ0RhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gQ2FuIGJlIHVzZWQgYXMgYSBibGFuayB0ZXh0dXJlIHdoZW4gd3JpdGluZyByZW5kZXIgdG8gdGV4dHVyZShSVFQpXHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGdsRm9ybWF0IDw9IFRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFRcclxuICAgICAgICAgICAgICAgICYmIGdsRm9ybWF0ID49IFRleHR1cmUuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIF9nbC5jb21wcmVzc2VkVGV4SW1hZ2UyRChfZ2wuVEVYVFVSRV8yRCwgbGV2ZWwsIGdsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBkYXRhLnBpeGVscyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJcyBhIHJlbmRlciB0YXJnZXQgaWYgcGl4ZWxzIGlzIG51bGxcclxuICAgICAgICAgICAgICAgIF9nbC50ZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgZ2xGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIGRhdGEucGl4ZWxzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVGV4dHVyZTJELnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZU1pcG1hcDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIGlmICh0aGlzLnVzZU1pcG1hcCAmJiAhdGhpcy5OUE9UKSB7XHJcbiAgICAgICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV8yRCwgdGhpcy5fY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJykpO1xyXG4gICAgICAgICAgICBfZ2wuZ2VuZXJhdGVNaXBtYXAoX2dsLlRFWFRVUkVfMkQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzUG93ZXJPZlR3byh0aGlzLndpZHRoKSAmJiBpc1Bvd2VyT2ZUd28odGhpcy5oZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBpc1JlbmRlcmFibGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZS53aWR0aCA+IDAgJiYgdGhpcy5pbWFnZS5oZWlnaHQgPiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICEhKHRoaXMud2lkdGggJiYgdGhpcy5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuZ2wuYmluZFRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRV8yRCwgdGhpcy5nZXRXZWJHTFRleHR1cmUocmVuZGVyZXIpKTtcclxuICAgIH0sXHJcblxyXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICByZW5kZXJlci5nbC5iaW5kVGV4dHVyZShyZW5kZXJlci5nbC5URVhUVVJFXzJELCBudWxsKTtcclxuICAgIH0sXHJcblxyXG4gICAgbG9hZDogZnVuY3Rpb24gKHNyYywgY3Jvc3NPcmlnaW4pIHtcclxuICAgICAgICB2YXIgaW1hZ2UgPSB2ZW5kb3IuY3JlYXRlSW1hZ2UoKTtcclxuICAgICAgICBpZiAoY3Jvc3NPcmlnaW4pIHtcclxuICAgICAgICAgICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSBjcm9zc09yaWdpbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2VsZi5kaXJ0eSgpO1xyXG4gICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3N1Y2Nlc3MnLCBzZWxmKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGltYWdlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHNlbGYudHJpZ2dlcignZXJyb3InLCBzZWxmKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpbWFnZS5zcmMgPSBzcmM7XHJcbiAgICAgICAgdGhpcy5pbWFnZSA9IGltYWdlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxufSk7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZTJELnByb3RvdHlwZSwgJ3dpZHRoJywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2Uud2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGV4dHVyZSBmcm9tIGltYWdlIGNhblxcJ3Qgc2V0IHdpZHRoJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fd2lkdGggIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZTJELnByb3RvdHlwZSwgJ2hlaWdodCcsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlLmhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGV4dHVyZSBmcm9tIGltYWdlIGNhblxcJ3Qgc2V0IGhlaWdodCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2hlaWdodCAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZTJEO1xyXG4iLCJpbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCBtYXRoVXRpbCBmcm9tICcuL21hdGgvdXRpbCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcbnZhciBpc1Bvd2VyT2ZUd28gPSBtYXRoVXRpbC5pc1Bvd2VyT2ZUd287XHJcblxyXG52YXIgdGFyZ2V0TGlzdCA9IFsncHgnLCAnbngnLCAncHknLCAnbnknLCAncHonLCAnbnonXTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5UZXh0dXJlQ3ViZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LlRleHR1cmVcclxuICpcclxuICogQGV4YW1wbGVcclxuICogICAgIC4uLlxyXG4gKiAgICAgdmFyIG1hdCA9IG5ldyBjbGF5Lk1hdGVyaWFsKHtcclxuICogICAgICAgICBzaGFkZXI6IGNsYXkuc2hhZGVyLmxpYnJhcnkuZ2V0KCdjbGF5LnBob25nJywgJ2Vudmlyb25tZW50TWFwJylcclxuICogICAgIH0pO1xyXG4gKiAgICAgdmFyIGVudk1hcCA9IG5ldyBjbGF5LlRleHR1cmVDdWJlKCk7XHJcbiAqICAgICBlbnZNYXAubG9hZCh7XHJcbiAqICAgICAgICAgJ3B4JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHguanBnJyxcclxuICogICAgICAgICAnbngnOiAnYXNzZXRzL3RleHR1cmVzL3NreS9ueC5qcGcnXHJcbiAqICAgICAgICAgJ3B5JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHkuanBnJ1xyXG4gKiAgICAgICAgICdueSc6ICdhc3NldHMvdGV4dHVyZXMvc2t5L255LmpwZydcclxuICogICAgICAgICAncHonOiAnYXNzZXRzL3RleHR1cmVzL3NreS9wei5qcGcnXHJcbiAqICAgICAgICAgJ256JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvbnouanBnJ1xyXG4gKiAgICAgfSk7XHJcbiAqICAgICBtYXQuc2V0KCdlbnZpcm9ubWVudE1hcCcsIGVudk1hcCk7XHJcbiAqICAgICAuLi5cclxuICogICAgIGVudk1hcC5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICogICAgICAgICAvLyBXYWl0IGZvciB0aGUgc2t5IHRleHR1cmUgbG9hZGVkXHJcbiAqICAgICAgICAgYW5pbWF0aW9uLm9uKCdmcmFtZScsIGZ1bmN0aW9uIChmcmFtZVRpbWUpIHtcclxuICogICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xyXG4gKiAgICAgICAgIH0pO1xyXG4gKiAgICAgfSk7XHJcbiAqL1xyXG52YXIgVGV4dHVyZUN1YmUgPSBUZXh0dXJlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlRleHR1cmVDdWJlIyAqL3tcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBQRU5ESU5HIGN1YmVtYXAgc2hvdWxkIG5vdCBmbGlwWSBpbiBkZWZhdWx0LlxyXG4gICAgICAgIC8vIGZsaXBZOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKiBAcHJvcGVydHkgez9IVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtbmV0fSBweFxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1uZXR9IG54XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gcHlcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9IVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtbmV0fSBueVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1uZXR9IHB6XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gbnpcclxuICAgICAgICAgKi9cclxuICAgICAgICBpbWFnZToge1xyXG4gICAgICAgICAgICBweDogbnVsbCxcclxuICAgICAgICAgICAgbng6IG51bGwsXHJcbiAgICAgICAgICAgIHB5OiBudWxsLFxyXG4gICAgICAgICAgICBueTogbnVsbCxcclxuICAgICAgICAgICAgcHo6IG51bGwsXHJcbiAgICAgICAgICAgIG56OiBudWxsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQaXhlbHMgZGF0YSBvZiBlYWNoIHNpZGUuIFdpbGwgYmUgaWdub3JlZCBpZiBpbWFnZXMgYXJlIHNldC5cclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P1VpbnQ4QXJyYXl9IHB4XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/VWludDhBcnJheX0gbnhcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBweVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P1VpbnQ4QXJyYXl9IG55XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/VWludDhBcnJheX0gcHpcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBuelxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHBpeGVsczoge1xyXG4gICAgICAgICAgICBweDogbnVsbCxcclxuICAgICAgICAgICAgbng6IG51bGwsXHJcbiAgICAgICAgICAgIHB5OiBudWxsLFxyXG4gICAgICAgICAgICBueTogbnVsbCxcclxuICAgICAgICAgICAgcHo6IG51bGwsXHJcbiAgICAgICAgICAgIG56OiBudWxsXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxPYmplY3Q+fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1pcG1hcHM6IFtdXHJcbiAgICB9O1xyXG59LCB7XHJcblxyXG4gICAgdGV4dHVyZVR5cGU6ICd0ZXh0dXJlQ3ViZScsXHJcblxyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgX2dsLmJpbmRUZXh0dXJlKF9nbC5URVhUVVJFX0NVQkVfTUFQLCB0aGlzLl9jYWNoZS5nZXQoJ3dlYmdsX3RleHR1cmUnKSk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ29tbW9uKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdmFyIGdsRm9ybWF0ID0gdGhpcy5mb3JtYXQ7XHJcbiAgICAgICAgdmFyIGdsVHlwZSA9IHRoaXMudHlwZTtcclxuXHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIF9nbC5URVhUVVJFX1dSQVBfUywgdGhpcy5nZXRBdmFpbGFibGVXcmFwUygpKTtcclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgX2dsLlRFWFRVUkVfV1JBUF9ULCB0aGlzLmdldEF2YWlsYWJsZVdyYXBUKCkpO1xyXG5cclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgX2dsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgdGhpcy5nZXRBdmFpbGFibGVNYWdGaWx0ZXIoKSk7XHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIF9nbC5URVhUVVJFX01JTl9GSUxURVIsIHRoaXMuZ2V0QXZhaWxhYmxlTWluRmlsdGVyKCkpO1xyXG5cclxuICAgICAgICB2YXIgYW5pc290cm9waWNFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyk7XHJcbiAgICAgICAgaWYgKGFuaXNvdHJvcGljRXh0ICYmIHRoaXMuYW5pc290cm9waWMgPiAxKSB7XHJcbiAgICAgICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJmKF9nbC5URVhUVVJFX0NVQkVfTUFQLCBhbmlzb3Ryb3BpY0V4dC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCwgdGhpcy5hbmlzb3Ryb3BpYyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGYWxsYmFjayB0byBmbG9hdCB0eXBlIGlmIGJyb3dzZXIgZG9uJ3QgaGF2ZSBoYWxmIGZsb2F0IGV4dGVuc2lvblxyXG4gICAgICAgIGlmIChnbFR5cGUgPT09IDM2MTkzKSB7XHJcbiAgICAgICAgICAgIHZhciBoYWxmRmxvYXRFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcpO1xyXG4gICAgICAgICAgICBpZiAoIWhhbGZGbG9hdEV4dCkge1xyXG4gICAgICAgICAgICAgICAgZ2xUeXBlID0gZ2xlbnVtLkZMT0FUO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5taXBtYXBzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5taXBtYXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWlwbWFwID0gdGhpcy5taXBtYXBzW2ldO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGV4dHVyZURhdGEoX2dsLCBtaXBtYXAsIGksIHdpZHRoLCBoZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUpO1xyXG4gICAgICAgICAgICAgICAgd2lkdGggLz0gMjtcclxuICAgICAgICAgICAgICAgIGhlaWdodCAvPSAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVUZXh0dXJlRGF0YShfZ2wsIHRoaXMsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5OUE9UICYmIHRoaXMudXNlTWlwbWFwKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZ2VuZXJhdGVNaXBtYXAoX2dsLlRFWFRVUkVfQ1VCRV9NQVApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlVGV4dHVyZURhdGE6IGZ1bmN0aW9uIChfZ2wsIGRhdGEsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRhcmdldExpc3RbaV07XHJcbiAgICAgICAgICAgIHZhciBpbWcgPSBkYXRhLmltYWdlICYmIGRhdGEuaW1hZ2VbdGFyZ2V0XTtcclxuICAgICAgICAgICAgaWYgKGltZykge1xyXG4gICAgICAgICAgICAgICAgX2dsLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIGxldmVsLCBnbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF9nbC50ZXhJbWFnZTJEKF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCBsZXZlbCwgZ2xGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIGRhdGEucGl4ZWxzICYmIGRhdGEucGl4ZWxzW3RhcmdldF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5UZXh0dXJlQ3ViZS5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVNaXBtYXA6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBpZiAodGhpcy51c2VNaXBtYXAgJiYgIXRoaXMuTlBPVCkge1xyXG4gICAgICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIHRoaXMuX2NhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpKTtcclxuICAgICAgICAgICAgX2dsLmdlbmVyYXRlTWlwbWFwKF9nbC5URVhUVVJFX0NVQkVfTUFQKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGJpbmQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHJlbmRlcmVyLmdsLmJpbmRUZXh0dXJlKHJlbmRlcmVyLmdsLlRFWFRVUkVfQ1VCRV9NQVAsIHRoaXMuZ2V0V2ViR0xUZXh0dXJlKHJlbmRlcmVyKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHVuYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuZ2wuYmluZFRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRV9DVUJFX01BUCwgbnVsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIE92ZXJ3cml0ZSB0aGUgaXNQb3dlck9mVHdvIG1ldGhvZFxyXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UucHgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzUG93ZXJPZlR3byh0aGlzLmltYWdlLnB4LndpZHRoKVxyXG4gICAgICAgICAgICAgICAgJiYgaXNQb3dlck9mVHdvKHRoaXMuaW1hZ2UucHguaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpc1Bvd2VyT2ZUd28odGhpcy53aWR0aClcclxuICAgICAgICAgICAgICAgICYmIGlzUG93ZXJPZlR3byh0aGlzLmhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBpc1JlbmRlcmFibGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXNJbWFnZVJlbmRlcmFibGUodGhpcy5pbWFnZS5weClcclxuICAgICAgICAgICAgICAgICYmIGlzSW1hZ2VSZW5kZXJhYmxlKHRoaXMuaW1hZ2UubngpXHJcbiAgICAgICAgICAgICAgICAmJiBpc0ltYWdlUmVuZGVyYWJsZSh0aGlzLmltYWdlLnB5KVxyXG4gICAgICAgICAgICAgICAgJiYgaXNJbWFnZVJlbmRlcmFibGUodGhpcy5pbWFnZS5ueSlcclxuICAgICAgICAgICAgICAgICYmIGlzSW1hZ2VSZW5kZXJhYmxlKHRoaXMuaW1hZ2UucHopXHJcbiAgICAgICAgICAgICAgICAmJiBpc0ltYWdlUmVuZGVyYWJsZSh0aGlzLmltYWdlLm56KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhISh0aGlzLndpZHRoICYmIHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGxvYWQ6IGZ1bmN0aW9uIChpbWFnZUxpc3QsIGNyb3NzT3JpZ2luKSB7XHJcbiAgICAgICAgdmFyIGxvYWRpbmcgPSAwO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB1dGlsLmVhY2goaW1hZ2VMaXN0LCBmdW5jdGlvbiAoc3JjLCB0YXJnZXQpe1xyXG4gICAgICAgICAgICB2YXIgaW1hZ2UgPSB2ZW5kb3IuY3JlYXRlSW1hZ2UoKTtcclxuICAgICAgICAgICAgaWYgKGNyb3NzT3JpZ2luKSB7XHJcbiAgICAgICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9IGNyb3NzT3JpZ2luO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGxvYWRpbmcgLS07XHJcbiAgICAgICAgICAgICAgICBpZiAobG9hZGluZyA9PT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignc3VjY2VzcycsIHNlbGYpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpbWFnZS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgbG9hZGluZyAtLTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGxvYWRpbmcrKztcclxuICAgICAgICAgICAgaW1hZ2Uuc3JjID0gc3JjO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlW3RhcmdldF0gPSBpbWFnZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmVDdWJlLnByb3RvdHlwZSwgJ3dpZHRoJywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UgJiYgdGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZS5weC53aWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UgJiYgdGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RleHR1cmUgZnJvbSBpbWFnZSBjYW5cXCd0IHNldCB3aWR0aCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3dpZHRoICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmVDdWJlLnByb3RvdHlwZSwgJ2hlaWdodCcsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlICYmIHRoaXMuaW1hZ2UucHgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2UucHguaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UgJiYgdGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RleHR1cmUgZnJvbSBpbWFnZSBjYW5cXCd0IHNldCBoZWlnaHQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9oZWlnaHQgIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuZnVuY3Rpb24gaXNJbWFnZVJlbmRlcmFibGUoaW1hZ2UpIHtcclxuICAgIHJldHVybiBpbWFnZS53aWR0aCA+IDAgJiYgaW1hZ2UuaGVpZ2h0ID4gMDtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZUN1YmU7XHJcbiIsImltcG9ydCBOb2RlIGZyb20gJy4vTm9kZSc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlJlbmRlcmFibGVcclxuICogQGV4dGVuZHMgY2xheS5Ob2RlXHJcbiAqL1xyXG52YXIgUmVuZGVyYWJsZSA9IE5vZGUuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5SZW5kZXJhYmxlIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5Lk1hdGVyaWFsfVxyXG4gICAgICovXHJcbiAgICBtYXRlcmlhbDogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5Lkdlb21ldHJ5fVxyXG4gICAgICovXHJcbiAgICBnZW9tZXRyeTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIG1vZGU6IGdsZW51bS5UUklBTkdMRVMsXHJcblxyXG4gICAgX3JlbmRlckluZm86IG51bGxcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LlJlbmRlcmFibGUucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICBfX3Byb2dyYW06IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHcm91cCBvZiByZWNlaXZlZCBsaWdodC5cclxuICAgICAqL1xyXG4gICAgbGlnaHRHcm91cDogMCxcclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIG9yZGVyLCBOb2RlcyB3aXRoIHNtYWxsZXIgdmFsdWUgcmVuZGVycyBiZWZvcmUgbm9kZXMgd2l0aCBsYXJnZXIgdmFsdWVzLlxyXG4gICAgICogQHR5cGUge051bWJlcn1cclxuICAgICAqL1xyXG4gICAgcmVuZGVyT3JkZXI6IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VkIHdoZW4gbW9kZSBpcyBMSU5FUywgTElORV9TVFJJUCBvciBMSU5FX0xPT1BcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIC8vIGxpbmVXaWR0aDogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGVuYWJsZSBjdWxsaW5nXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgY3VsbGluZzogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogU3BlY2lmeSB3aGljaCBzaWRlIG9mIHBvbHlnb24gd2lsbCBiZSBjdWxsZWQuXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5SZW5kZXJhYmxlLkJBQ0t9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5SZW5kZXJhYmxlLkZST05UfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuUmVuZGVyYWJsZS5GUk9OVF9BTkRfQkFDS31cclxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dlYkdMUmVuZGVyaW5nQ29udGV4dC9jdWxsRmFjZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY3VsbEZhY2U6IGdsZW51bS5CQUNLLFxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGVjaWZ5IHdoaWNoIHNpZGUgaXMgZnJvbnQgZmFjZS5cclxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcclxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuQ1d9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5SZW5kZXJhYmxlLkNDV31cclxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dlYkdMUmVuZGVyaW5nQ29udGV4dC9mcm9udEZhY2VcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGZyb250RmFjZTogZ2xlbnVtLkNDVyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGVuYWJsZSBzb2Z0d2FyZSBmcnVzdHVtIGN1bGxpbmdcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBmcnVzdHVtQ3VsbGluZzogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIHJlY2VpdmVTaGFkb3c6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBjYXN0U2hhZG93OiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaWdub3JlUGlja2luZzogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpZ25vcmVQcmVaOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpZ25vcmVHQnVmZmVyOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzUmVuZGVyYWJsZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gVE9ETyBTaGFkZXIgP1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdlb21ldHJ5ICYmIHRoaXMubWF0ZXJpYWwgJiYgdGhpcy5tYXRlcmlhbC5zaGFkZXIgJiYgIXRoaXMuaW52aXNpYmxlXHJcbiAgICAgICAgICAgICYmIHRoaXMuZ2VvbWV0cnkudmVydGV4Q291bnQgPiAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJlZm9yZSByZW5kZXIgaG9va1xyXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICBiZWZvcmVSZW5kZXI6IGZ1bmN0aW9uIChfZ2wpIHt9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmVmb3JlIHJlbmRlciBob29rXHJcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIGFmdGVyUmVuZGVyOiBmdW5jdGlvbiAoX2dsLCByZW5kZXJTdGF0KSB7fSxcclxuXHJcbiAgICBnZXRCb3VuZGluZ0JveDogZnVuY3Rpb24gKGZpbHRlciwgb3V0KSB7XHJcbiAgICAgICAgb3V0ID0gTm9kZS5wcm90b3R5cGUuZ2V0Qm91bmRpbmdCb3guY2FsbCh0aGlzLCBmaWx0ZXIsIG91dCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2VvbWV0cnkgJiYgdGhpcy5nZW9tZXRyeS5ib3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICBvdXQudW5pb24odGhpcy5nZW9tZXRyeS5ib3VuZGluZ0JveCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IHJlbmRlcmFibGVcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQHJldHVybiB7Y2xheS5SZW5kZXJhYmxlfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gW1xyXG4gICAgICAgICAgICAnY2FzdFNoYWRvdycsICdyZWNlaXZlU2hhZG93JyxcclxuICAgICAgICAgICAgJ21vZGUnLCAnY3VsbGluZycsICdjdWxsRmFjZScsICdmcm9udEZhY2UnLFxyXG4gICAgICAgICAgICAnZnJ1c3R1bUN1bGxpbmcnLFxyXG4gICAgICAgICAgICAncmVuZGVyT3JkZXInLCAnbGluZVdpZHRoJyxcclxuICAgICAgICAgICAgJ2lnbm9yZVBpY2tpbmcnLCAnaWdub3JlUHJlWicsICdpZ25vcmVHQnVmZmVyJ1xyXG4gICAgICAgIF07XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyYWJsZSA9IE5vZGUucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJhYmxlLmdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcclxuICAgICAgICAgICAgcmVuZGVyYWJsZS5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gcHJvcGVydGllc1tpXTtcclxuICAgICAgICAgICAgICAgIC8vIFRyeSBub3QgdG8gb3ZlcndyaXRlIHRoZSBwcm90b3R5cGUgcHJvcGVydHlcclxuICAgICAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlW25hbWVdICE9PSB0aGlzW25hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyYWJsZVtuYW1lXSA9IHRoaXNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLlBPSU5UUyA9IGdsZW51bS5QT0lOVFM7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5MSU5FUyA9IGdsZW51bS5MSU5FUztcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLkxJTkVfTE9PUCA9IGdsZW51bS5MSU5FX0xPT1A7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5MSU5FX1NUUklQID0gZ2xlbnVtLkxJTkVfU1RSSVA7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5UUklBTkdMRVMgPSBnbGVudW0uVFJJQU5HTEVTO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuVFJJQU5HTEVfU1RSSVAgPSBnbGVudW0uVFJJQU5HTEVfU1RSSVA7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5UUklBTkdMRV9GQU4gPSBnbGVudW0uVFJJQU5HTEVfRkFOO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuQkFDSyA9IGdsZW51bS5CQUNLO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuRlJPTlQgPSBnbGVudW0uRlJPTlQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5GUk9OVF9BTkRfQkFDSyA9IGdsZW51bS5GUk9OVF9BTkRfQkFDSztcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLkNXID0gZ2xlbnVtLkNXO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuQ0NXID0gZ2xlbnVtLkNDVztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJlbmRlcmFibGU7XHJcbiIsImltcG9ydCBSZW5kZXJhYmxlIGZyb20gJy4vUmVuZGVyYWJsZSc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuTWVzaFxyXG4gKiBAZXh0ZW5kcyBjbGF5LlJlbmRlcmFibGVcclxuICovXHJcbnZhciBNZXNoID0gUmVuZGVyYWJsZS5leHRlbmQoLyoqIEBsZW5kcyBjbGF5Lk1lc2gjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogVXNlZCB3aGVuIGl0IGlzIGEgc2tpbm5lZCBtZXNoXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5Ta2VsZXRvbn1cclxuICAgICAqL1xyXG4gICAgc2tlbGV0b246IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIEpvaW50cyBpbmRpY2VzIE1lc2hlcyBjYW4gc2hhcmUgdGhlIG9uZSBza2VsZXRvbiBpbnN0YW5jZSBhbmQgZWFjaCBtZXNoIGNhbiB1c2Ugb25lIHBhcnQgb2Ygam9pbnRzLiBKb2ludHMgaW5kaWNlcyBpbmRpY2F0ZSB0aGUgaW5kZXggb2Ygam9pbnQgaW4gdGhlIHNrZWxldG9uIGluc3RhbmNlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyW119XHJcbiAgICAgKi9cclxuICAgIGpvaW50czogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHN0b3JlIHRoZSBza2luIG1hdHJpY2VzIGluIHZlcnRleCB0ZXh0dXJlXHJcbiAgICAgKiBAdHlwZSB7Ym9vbH1cclxuICAgICAqL1xyXG4gICAgdXNlU2tpbk1hdHJpY2VzVGV4dHVyZTogZmFsc2VcclxuXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghdGhpcy5qb2ludHMpIHtcclxuICAgICAgICB0aGlzLmpvaW50cyA9IFtdO1xyXG4gICAgfVxyXG59LCB7XHJcblxyXG4gICAgaXNTa2lubmVkTWVzaDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAhISh0aGlzLnNrZWxldG9uICYmIHRoaXMuam9pbnRzICYmIHRoaXMuam9pbnRzLmxlbmd0aCA+IDApO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtZXNoID0gUmVuZGVyYWJsZS5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgICAgICBtZXNoLnNrZWxldG9uID0gdGhpcy5za2VsZXRvbjtcclxuICAgICAgICBpZiAodGhpcy5qb2ludHMpIHtcclxuICAgICAgICAgICAgbWVzaC5qb2ludHMgPSB0aGlzLmpvaW50cy5zbGljZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWVzaDtcclxuICAgIH1cclxufSk7XHJcblxyXG4vLyBFbnVtc1xyXG5NZXNoLlBPSU5UUyA9IGdsZW51bS5QT0lOVFM7XHJcbk1lc2guTElORVMgPSBnbGVudW0uTElORVM7XHJcbk1lc2guTElORV9MT09QID0gZ2xlbnVtLkxJTkVfTE9PUDtcclxuTWVzaC5MSU5FX1NUUklQID0gZ2xlbnVtLkxJTkVfU1RSSVA7XHJcbk1lc2guVFJJQU5HTEVTID0gZ2xlbnVtLlRSSUFOR0xFUztcclxuTWVzaC5UUklBTkdMRV9TVFJJUCA9IGdsZW51bS5UUklBTkdMRV9TVFJJUDtcclxuTWVzaC5UUklBTkdMRV9GQU4gPSBnbGVudW0uVFJJQU5HTEVfRkFOO1xyXG5cclxuTWVzaC5CQUNLID0gZ2xlbnVtLkJBQ0s7XHJcbk1lc2guRlJPTlQgPSBnbGVudW0uRlJPTlQ7XHJcbk1lc2guRlJPTlRfQU5EX0JBQ0sgPSBnbGVudW0uRlJPTlRfQU5EX0JBQ0s7XHJcbk1lc2guQ1cgPSBnbGVudW0uQ1c7XHJcbk1lc2guQ0NXID0gZ2xlbnVtLkNDVztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1lc2g7XHJcbiIsImltcG9ydCBDYW1lcmEgZnJvbSAnLi4vQ2FtZXJhJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jYW1lcmEuUGVyc3BlY3RpdmVcclxuICogQGV4dGVuZHMgY2xheS5DYW1lcmFcclxuICovXHJcbnZhciBQZXJzcGVjdGl2ZSA9IENhbWVyYS5leHRlbmQoLyoqIEBsZW5kcyBjbGF5LmNhbWVyYS5QZXJzcGVjdGl2ZSMgKi97XHJcbiAgICAvKipcclxuICAgICAqIFZlcnRpY2FsIGZpZWxkIG9mIHZpZXcgaW4gZGVncmVlc1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZm92OiA1MCxcclxuICAgIC8qKlxyXG4gICAgICogQXNwZWN0IHJhdGlvLCB0eXBpY2FsbHkgdmlld3BvcnQgd2lkdGggLyBoZWlnaHRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGFzcGVjdDogMSxcclxuICAgIC8qKlxyXG4gICAgICogTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbmVhcjogMC4xLFxyXG4gICAgLyoqXHJcbiAgICAgKiBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGZhcjogMjAwMFxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuY2FtZXJhLlBlcnNwZWN0aXZlLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgdXBkYXRlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHJhZCA9IHRoaXMuZm92IC8gMTgwICogTWF0aC5QSTtcclxuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXgucGVyc3BlY3RpdmUocmFkLCB0aGlzLmFzcGVjdCwgdGhpcy5uZWFyLCB0aGlzLmZhcik7XHJcbiAgICB9LFxyXG4gICAgZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFycmF5O1xyXG4gICAgICAgIHZhciByYWQgPSBNYXRoLmF0YW4oMSAvIG1bNV0pICogMjtcclxuICAgICAgICB0aGlzLmZvdiA9IHJhZCAvIE1hdGguUEkgKiAxODA7XHJcbiAgICAgICAgdGhpcy5hc3BlY3QgPSBtWzVdIC8gbVswXTtcclxuICAgICAgICB0aGlzLm5lYXIgPSBtWzE0XSAvIChtWzEwXSAtIDEpO1xyXG4gICAgICAgIHRoaXMuZmFyID0gbVsxNF0gLyAobVsxMF0gKyAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuY2FtZXJhLlBlcnNwZWN0aXZlfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGNhbWVyYSA9IENhbWVyYS5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgICAgICBjYW1lcmEuZm92ID0gdGhpcy5mb3Y7XHJcbiAgICAgICAgY2FtZXJhLmFzcGVjdCA9IHRoaXMuYXNwZWN0O1xyXG4gICAgICAgIGNhbWVyYS5uZWFyID0gdGhpcy5uZWFyO1xyXG4gICAgICAgIGNhbWVyYS5mYXIgPSB0aGlzLmZhcjtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNhbWVyYTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQZXJzcGVjdGl2ZTtcclxuIiwiaW1wb3J0IENhbWVyYSBmcm9tICcuLi9DYW1lcmEnO1xyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY2FtZXJhLk9ydGhvZ3JhcGhpY1xyXG4gKiBAZXh0ZW5kcyBjbGF5LkNhbWVyYVxyXG4gKi9cclxudmFyIE9ydGhvZ3JhcGhpYyA9IENhbWVyYS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5jYW1lcmEuT3J0aG9ncmFwaGljIyAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlZnQ6IC0xLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByaWdodDogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbmVhcjogLTEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGZhcjogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdG9wOiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBib3R0b206IC0xXHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jYW1lcmEuT3J0aG9ncmFwaGljLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgdXBkYXRlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4Lm9ydGhvKHRoaXMubGVmdCwgdGhpcy5yaWdodCwgdGhpcy5ib3R0b20sIHRoaXMudG9wLCB0aGlzLm5lYXIsIHRoaXMuZmFyKTtcclxuICAgIH0sXHJcblxyXG4gICAgZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFycmF5O1xyXG4gICAgICAgIHRoaXMubGVmdCA9ICgtMSAtIG1bMTJdKSAvIG1bMF07XHJcbiAgICAgICAgdGhpcy5yaWdodCA9ICgxIC0gbVsxMl0pIC8gbVswXTtcclxuICAgICAgICB0aGlzLnRvcCA9ICgxIC0gbVsxM10pIC8gbVs1XTtcclxuICAgICAgICB0aGlzLmJvdHRvbSA9ICgtMSAtIG1bMTNdKSAvIG1bNV07XHJcbiAgICAgICAgdGhpcy5uZWFyID0gLSgtMSAtIG1bMTRdKSAvIG1bMTBdO1xyXG4gICAgICAgIHRoaXMuZmFyID0gLSgxIC0gbVsxNF0pIC8gbVsxMF07XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmNhbWVyYS5PcnRob2dyYXBoaWN9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgY2FtZXJhID0gQ2FtZXJhLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGNhbWVyYS5sZWZ0ID0gdGhpcy5sZWZ0O1xyXG4gICAgICAgIGNhbWVyYS5yaWdodCA9IHRoaXMucmlnaHQ7XHJcbiAgICAgICAgY2FtZXJhLm5lYXIgPSB0aGlzLm5lYXI7XHJcbiAgICAgICAgY2FtZXJhLmZhciA9IHRoaXMuZmFyO1xyXG4gICAgICAgIGNhbWVyYS50b3AgPSB0aGlzLnRvcDtcclxuICAgICAgICBjYW1lcmEuYm90dG9tID0gdGhpcy5ib3R0b207XHJcblxyXG4gICAgICAgIHJldHVybiBjYW1lcmE7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgT3J0aG9ncmFwaGljO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5zdGFuZGFyZC5jaHVuay52YXJ5aW5nXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudmFyeWluZyB2ZWMzIHZfTm9ybWFsO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuI2lmIGRlZmluZWQoUEFSQUxMQVhPQ0NMVVNJT05NQVBfRU5BQkxFRCkgfHwgZGVmaW5lZChOT1JNQUxNQVBfRU5BQkxFRClcXG52YXJ5aW5nIHZlYzMgdl9UYW5nZW50O1xcbnZhcnlpbmcgdmVjMyB2X0JpdGFuZ2VudDtcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChBT01BUF9FTkFCTEVEKVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkMjtcXG4jZW5kaWZcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxudmFyeWluZyB2ZWM0IHZfQ29sb3I7XFxuI2VuZGlmXFxuQGVuZFxcbkBleHBvcnQgY2xheS5zdGFuZGFyZC5jaHVuay5saWdodF9oZWFkZXJcXG4jaWZkZWYgQU1CSUVOVF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuYW1iaWVudF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBBTUJJRU5UX1NIX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5hbWJpZW50X3NoX2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuYW1iaWVudF9jdWJlbWFwX2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIFBPSU5UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5wb2ludF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuZGlyZWN0aW9uYWxfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgU1BPVF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuc3BvdF9saWdodFxcbiNlbmRpZlxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc3RhbmRhcmQudmVydGV4XFxuI2RlZmluZSBTSEFERVJfTkFNRSBzdGFuZGFyZFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG51bmlmb3JtIG1hdDQgd29ybGRJbnZlcnNlVHJhbnNwb3NlIDogV09STERJTlZFUlNFVFJBTlNQT1NFO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA9IHZlYzIoMS4wLCAxLjApO1xcbnVuaWZvcm0gdmVjMiB1dk9mZnNldCA9IHZlYzIoMC4wLCAwLjApO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbiNpZiBkZWZpbmVkKEFPTUFQX0VOQUJMRUQpXFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQyIDogVEVYQ09PUkRfMTtcXG4jZW5kaWZcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XFxuYXR0cmlidXRlIHZlYzQgdGFuZ2VudCA6IFRBTkdFTlQ7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbmF0dHJpYnV0ZSB2ZWM0IGFfQ29sb3IgOiBDT0xPUjtcXG4jZW5kaWZcXG5hdHRyaWJ1dGUgdmVjMyBiYXJ5Y2VudHJpYztcXG5AaW1wb3J0IGNsYXkuc3RhbmRhcmQuY2h1bmsudmFyeWluZ1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4gdmVjMyBza2lubmVkTm9ybWFsID0gbm9ybWFsO1xcbiB2ZWMzIHNraW5uZWRUYW5nZW50ID0gdGFuZ2VudC54eXo7XFxuI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiBza2lubmVkTm9ybWFsID0gKHNraW5NYXRyaXhXUyAqIHZlYzQobm9ybWFsLCAwLjApKS54eXo7XFxuIHNraW5uZWRUYW5nZW50ID0gKHNraW5NYXRyaXhXUyAqIHZlYzQodGFuZ2VudC54eXosIDAuMCkpLnh5ejtcXG4jZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxuIHZfVGV4Y29vcmQgPSB0ZXhjb29yZCAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxuIHZfV29ybGRQb3NpdGlvbiA9ICh3b3JsZCAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApKS54eXo7XFxuIHZfQmFyeWNlbnRyaWMgPSBiYXJ5Y2VudHJpYztcXG4gdl9Ob3JtYWwgPSBub3JtYWxpemUoKHdvcmxkSW52ZXJzZVRyYW5zcG9zZSAqIHZlYzQoc2tpbm5lZE5vcm1hbCwgMC4wKSkueHl6KTtcXG4jaWYgZGVmaW5lZChQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEKSB8fCBkZWZpbmVkKE5PUk1BTE1BUF9FTkFCTEVEKVxcbiB2X1RhbmdlbnQgPSBub3JtYWxpemUoKHdvcmxkSW52ZXJzZVRyYW5zcG9zZSAqIHZlYzQoc2tpbm5lZFRhbmdlbnQsIDAuMCkpLnh5eik7XFxuIHZfQml0YW5nZW50ID0gbm9ybWFsaXplKGNyb3NzKHZfTm9ybWFsLCB2X1RhbmdlbnQpICogdGFuZ2VudC53KTtcXG4jZW5kaWZcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuIHZfQ29sb3IgPSBhX0NvbG9yO1xcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKEFPTUFQX0VOQUJMRUQpXFxuIHZfVGV4Y29vcmQyID0gdGV4Y29vcmQyO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnN0YW5kYXJkLmZyYWdtZW50XFxuI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5XFxuI2RlZmluZSBHTE9TU0lORVNTX0NIQU5ORUwgMFxcbiNkZWZpbmUgUk9VR0hORVNTX0NIQU5ORUwgMFxcbiNkZWZpbmUgTUVUQUxORVNTX0NIQU5ORUwgMVxcbiNkZWZpbmUgRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxcbkBpbXBvcnQgY2xheS5zdGFuZGFyZC5jaHVuay52YXJ5aW5nXFxudW5pZm9ybSBtYXQ0IHZpZXdJbnZlcnNlIDogVklFV0lOVkVSU0U7XFxuI2lmZGVmIE5PUk1BTE1BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsTWFwO1xcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgbm9ybWFsU2NhbGU6IDEuMDtcXG4jaWZkZWYgRElGRlVTRU1BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZU1hcDtcXG4jZW5kaWZcXG4jaWZkZWYgU1BFQ1VMQVJNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfUk9VR0hORVNTXFxudW5pZm9ybSBmbG9hdCByb3VnaG5lc3MgOiAwLjU7XFxuICNpZmRlZiBST1VHSE5FU1NNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDtcXG4gI2VuZGlmXFxuI2Vsc2VcXG51bmlmb3JtIGZsb2F0IGdsb3NzaW5lc3M6IDAuNTtcXG4gI2lmZGVmIEdMT1NTSU5FU1NNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdsb3NzaW5lc3NNYXA7XFxuICNlbmRpZlxcbiNlbmRpZlxcbiNpZmRlZiBNRVRBTE5FU1NNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIG1ldGFsbmVzc01hcDtcXG4jZW5kaWZcXG4jaWZkZWYgT0NDTFVTSU9OTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBvY2NsdXNpb25NYXA7XFxuI2VuZGlmXFxuI2lmZGVmIEVOVklST05NRU5UTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXJDdWJlIGVudmlyb25tZW50TWFwO1xcbiAjaWZkZWYgUEFSQUxMQVhfQ09SUkVDVEVEXFxudW5pZm9ybSB2ZWMzIGVudmlyb25tZW50Qm94TWluO1xcbnVuaWZvcm0gdmVjMyBlbnZpcm9ubWVudEJveE1heDtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIEJSREZMT09LVVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGJyZGZMb29rdXA7XFxuI2VuZGlmXFxuI2lmZGVmIEVNSVNTSVZFTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBlbWlzc2l2ZU1hcDtcXG4jZW5kaWZcXG4jaWZkZWYgU1NBT01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgc3Nhb01hcDtcXG51bmlmb3JtIHZlYzQgdmlld3BvcnQgOiBWSUVXUE9SVDtcXG4jZW5kaWZcXG4jaWZkZWYgQU9NQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwO1xcbnVuaWZvcm0gZmxvYXQgYW9JbnRlbnNpdHk7XFxuI2VuZGlmXFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzEuMCwgMS4wLCAxLjBdO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGEgOiAxLjA7XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG51bmlmb3JtIGZsb2F0IGFscGhhQ3V0b2ZmOiAwLjk7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9NRVRBTE5FU1NcXG51bmlmb3JtIGZsb2F0IG1ldGFsbmVzcyA6IDAuMDtcXG4jZWxzZVxcbnVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yIDogWzAuMSwgMC4xLCAwLjFdO1xcbiNlbmRpZlxcbnVuaWZvcm0gdmVjMyBlbWlzc2lvbiA6IFswLjAsIDAuMCwgMC4wXTtcXG51bmlmb3JtIGZsb2F0IGVtaXNzaW9uSW50ZW5zaXR5OiAxO1xcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoIDogMC4wO1xcbnVuaWZvcm0gdmVjNCBsaW5lQ29sb3IgOiBbMC4wLCAwLjAsIDAuMCwgMC42XTtcXG4jaWZkZWYgRU5WSVJPTk1FTlRNQVBfUFJFRklMVEVSXFxudW5pZm9ybSBmbG9hdCBtYXhNaXBtYXBMZXZlbDogNTtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkuc3RhbmRhcmQuY2h1bmsubGlnaHRfaGVhZGVyXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwuc3JnYlxcbkBpbXBvcnQgY2xheS5wbHVnaW4uY29tcHV0ZV9zaGFkb3dfbWFwXFxuQGltcG9ydCBjbGF5LnV0aWwucGFyYWxsYXhfY29ycmVjdFxcbkBpbXBvcnQgY2xheS51dGlsLkFDRVNcXG5mbG9hdCBHX1NtaXRoKGZsb2F0IGcsIGZsb2F0IG5kdiwgZmxvYXQgbmRsKVxcbntcXG4gZmxvYXQgcm91Z2huZXNzID0gMS4wIC0gZztcXG4gZmxvYXQgayA9IHJvdWdobmVzcyAqIHJvdWdobmVzcyAvIDIuMDtcXG4gZmxvYXQgRzFWID0gbmR2IC8gKG5kdiAqICgxLjAgLSBrKSArIGspO1xcbiBmbG9hdCBHMUwgPSBuZGwgLyAobmRsICogKDEuMCAtIGspICsgayk7XFxuIHJldHVybiBHMUwgKiBHMVY7XFxufVxcbnZlYzMgRl9TY2hsaWNrKGZsb2F0IG5kdiwgdmVjMyBzcGVjKSB7XFxuIHJldHVybiBzcGVjICsgKDEuMCAtIHNwZWMpICogcG93KDEuMCAtIG5kdiwgNS4wKTtcXG59XFxuZmxvYXQgRF9QaG9uZyhmbG9hdCBnLCBmbG9hdCBuZGgpIHtcXG4gZmxvYXQgYSA9IHBvdyg4MTkyLjAsIGcpO1xcbiByZXR1cm4gKGEgKyAyLjApIC8gOC4wICogcG93KG5kaCwgYSk7XFxufVxcbmZsb2F0IERfR0dYKGZsb2F0IGcsIGZsb2F0IG5kaCkge1xcbiBmbG9hdCByID0gMS4wIC0gZztcXG4gZmxvYXQgYSA9IHIgKiByO1xcbiBmbG9hdCB0bXAgPSBuZGggKiBuZGggKiAoYSAtIDEuMCkgKyAxLjA7XFxuIHJldHVybiBhIC8gKFBJICogdG1wICogdG1wKTtcXG59XFxuI2lmZGVmIFBBUkFMTEFYT0NDTFVTSU9OTUFQX0VOQUJMRURcXG51bmlmb3JtIGZsb2F0IHBhcmFsbGF4T2NjbHVzaW9uU2NhbGUgOiAwLjAyO1xcbnVuaWZvcm0gZmxvYXQgcGFyYWxsYXhNYXhMYXllcnMgOiAyMDtcXG51bmlmb3JtIGZsb2F0IHBhcmFsbGF4TWluTGF5ZXJzIDogNTtcXG51bmlmb3JtIHNhbXBsZXIyRCBwYXJhbGxheE9jY2x1c2lvbk1hcDtcXG5tYXQzIHRyYW5zcG9zZShpbiBtYXQzIGluTWF0KVxcbntcXG4gdmVjMyBpMCA9IGluTWF0WzBdO1xcbiB2ZWMzIGkxID0gaW5NYXRbMV07XFxuIHZlYzMgaTIgPSBpbk1hdFsyXTtcXG4gcmV0dXJuIG1hdDMoXFxuIHZlYzMoaTAueCwgaTEueCwgaTIueCksXFxuIHZlYzMoaTAueSwgaTEueSwgaTIueSksXFxuIHZlYzMoaTAueiwgaTEueiwgaTIueilcXG4gKTtcXG59XFxudmVjMiBwYXJhbGxheFV2KHZlYzIgdXYsIHZlYzMgdmlld0RpcilcXG57XFxuIGZsb2F0IG51bUxheWVycyA9IG1peChwYXJhbGxheE1heExheWVycywgcGFyYWxsYXhNaW5MYXllcnMsIGFicyhkb3QodmVjMygwLjAsIDAuMCwgMS4wKSwgdmlld0RpcikpKTtcXG4gZmxvYXQgbGF5ZXJIZWlnaHQgPSAxLjAgLyBudW1MYXllcnM7XFxuIGZsb2F0IGN1ckxheWVySGVpZ2h0ID0gMC4wO1xcbiB2ZWMyIGRlbHRhVXYgPSB2aWV3RGlyLnh5ICogcGFyYWxsYXhPY2NsdXNpb25TY2FsZSAvICh2aWV3RGlyLnogKiBudW1MYXllcnMpO1xcbiB2ZWMyIGN1clV2ID0gdXY7XFxuIGZsb2F0IGhlaWdodCA9IDEuMCAtIHRleHR1cmUyRChwYXJhbGxheE9jY2x1c2lvbk1hcCwgY3VyVXYpLnI7XFxuIGZvciAoaW50IGkgPSAwOyBpIDwgMzA7IGkrKykge1xcbiBjdXJMYXllckhlaWdodCArPSBsYXllckhlaWdodDtcXG4gY3VyVXYgLT0gZGVsdGFVdjtcXG4gaGVpZ2h0ID0gMS4wIC0gdGV4dHVyZTJEKHBhcmFsbGF4T2NjbHVzaW9uTWFwLCBjdXJVdikucjtcXG4gaWYgKGhlaWdodCA8IGN1ckxheWVySGVpZ2h0KSB7XFxuIGJyZWFrO1xcbiB9XFxuIH1cXG4gdmVjMiBwcmV2VXYgPSBjdXJVdiArIGRlbHRhVXY7XFxuIGZsb2F0IG5leHQgPSBoZWlnaHQgLSBjdXJMYXllckhlaWdodDtcXG4gZmxvYXQgcHJldiA9IDEuMCAtIHRleHR1cmUyRChwYXJhbGxheE9jY2x1c2lvbk1hcCwgcHJldlV2KS5yIC0gY3VyTGF5ZXJIZWlnaHQgKyBsYXllckhlaWdodDtcXG4gcmV0dXJuIG1peChjdXJVdiwgcHJldlV2LCBuZXh0IC8gKG5leHQgLSBwcmV2KSk7XFxufVxcbiNlbmRpZlxcbnZvaWQgbWFpbigpIHtcXG4gdmVjNCBhbGJlZG9Db2xvciA9IHZlYzQoY29sb3IsIGFscGhhKTtcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuIGFsYmVkb0NvbG9yICo9IHZfQ29sb3I7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIGFsYmVkb0NvbG9yID0gc1JHQlRvTGluZWFyKGFsYmVkb0NvbG9yKTtcXG4jZW5kaWZcXG4gdmVjMyBleWVQb3MgPSB2aWV3SW52ZXJzZVszXS54eXo7XFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3MgLSB2X1dvcmxkUG9zaXRpb24pO1xcbiB2ZWMyIHV2ID0gdl9UZXhjb29yZDtcXG4jaWYgZGVmaW5lZChQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEKSB8fCBkZWZpbmVkKE5PUk1BTE1BUF9FTkFCTEVEKVxcbiBtYXQzIHRibiA9IG1hdDModl9UYW5nZW50LCB2X0JpdGFuZ2VudCwgdl9Ob3JtYWwpO1xcbiNlbmRpZlxcbiNpZmRlZiBQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEXFxuIHV2ID0gcGFyYWxsYXhVdih2X1RleGNvb3JkLCBub3JtYWxpemUodHJhbnNwb3NlKHRibikgKiAtVikpO1xcbiNlbmRpZlxcbiNpZmRlZiBESUZGVVNFTUFQX0VOQUJMRURcXG4gdmVjNCB0ZXhlbCA9IHRleHR1cmUyRChkaWZmdXNlTWFwLCB1dik7XFxuICNpZmRlZiBTUkdCX0RFQ09ERVxcbiB0ZXhlbCA9IHNSR0JUb0xpbmVhcih0ZXhlbCk7XFxuICNlbmRpZlxcbiBhbGJlZG9Db2xvci5yZ2IgKj0gdGV4ZWwucmdiO1xcbiAjaWZkZWYgRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxcbiBhbGJlZG9Db2xvci5hICo9IHRleGVsLmE7XFxuICNlbmRpZlxcbiNlbmRpZlxcbiNpZmRlZiBVU0VfTUVUQUxORVNTXFxuIGZsb2F0IG0gPSBtZXRhbG5lc3M7XFxuICNpZmRlZiBNRVRBTE5FU1NNQVBfRU5BQkxFRFxcbiBmbG9hdCBtMiA9IHRleHR1cmUyRChtZXRhbG5lc3NNYXAsIHV2KVtNRVRBTE5FU1NfQ0hBTk5FTF07XFxuIG0gPSBjbGFtcChtMiArIChtIC0gMC41KSAqIDIuMCwgMC4wLCAxLjApO1xcbiAjZW5kaWZcXG4gdmVjMyBiYXNlQ29sb3IgPSBhbGJlZG9Db2xvci5yZ2I7XFxuIGFsYmVkb0NvbG9yLnJnYiA9IGJhc2VDb2xvciAqICgxLjAgLSBtKTtcXG4gdmVjMyBzcGVjID0gbWl4KHZlYzMoMC4wNCksIGJhc2VDb2xvciwgbSk7XFxuI2Vsc2VcXG4gdmVjMyBzcGVjID0gc3BlY3VsYXJDb2xvcjtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX1JPVUdITkVTU1xcbiBmbG9hdCBnID0gY2xhbXAoMS4wIC0gcm91Z2huZXNzLCAwLjAsIDEuMCk7XFxuICNpZmRlZiBST1VHSE5FU1NNQVBfRU5BQkxFRFxcbiBmbG9hdCBnMiA9IDEuMCAtIHRleHR1cmUyRChyb3VnaG5lc3NNYXAsIHV2KVtST1VHSE5FU1NfQ0hBTk5FTF07XFxuIGcgPSBjbGFtcChnMiArIChnIC0gMC41KSAqIDIuMCwgMC4wLCAxLjApO1xcbiAjZW5kaWZcXG4jZWxzZVxcbiBmbG9hdCBnID0gZ2xvc3NpbmVzcztcXG4gI2lmZGVmIEdMT1NTSU5FU1NNQVBfRU5BQkxFRFxcbiBmbG9hdCBnMiA9IHRleHR1cmUyRChnbG9zc2luZXNzTWFwLCB1dilbR0xPU1NJTkVTU19DSEFOTkVMXTtcXG4gZyA9IGNsYW1wKGcyICsgKGcgLSAwLjUpICogMi4wLCAwLjAsIDEuMCk7XFxuICNlbmRpZlxcbiNlbmRpZlxcbiNpZmRlZiBTUEVDVUxBUk1BUF9FTkFCTEVEXFxuIHNwZWMgKj0gc1JHQlRvTGluZWFyKHRleHR1cmUyRChzcGVjdWxhck1hcCwgdXYpKS5yZ2I7XFxuI2VuZGlmXFxuIHZlYzMgTiA9IHZfTm9ybWFsO1xcbiNpZmRlZiBET1VCTEVfU0lERURcXG4gaWYgKGRvdChOLCBWKSA8IDAuMCkge1xcbiBOID0gLU47XFxuIH1cXG4jZW5kaWZcXG4jaWZkZWYgTk9STUFMTUFQX0VOQUJMRURcXG4gaWYgKGRvdCh2X1RhbmdlbnQsIHZfVGFuZ2VudCkgPiAwLjApIHtcXG4gdmVjMyBub3JtYWxUZXhlbCA9IHRleHR1cmUyRChub3JtYWxNYXAsIHV2KS54eXo7XFxuIGlmIChkb3Qobm9ybWFsVGV4ZWwsIG5vcm1hbFRleGVsKSA+IDAuMCkgeyBOID0gKG5vcm1hbFRleGVsICogMi4wIC0gMS4wKTtcXG4gTiA9IG5vcm1hbGl6ZShOICogdmVjMyhub3JtYWxTY2FsZSwgbm9ybWFsU2NhbGUsIDEuMCkpO1xcbiB0Ym5bMV0gPSAtdGJuWzFdO1xcbiBOID0gbm9ybWFsaXplKHRibiAqIE4pO1xcbiB9XFxuIH1cXG4jZW5kaWZcXG4gdmVjMyBkaWZmdXNlVGVybSA9IHZlYzMoMC4wLCAwLjAsIDAuMCk7XFxuIHZlYzMgc3BlY3VsYXJUZXJtID0gdmVjMygwLjAsIDAuMCwgMC4wKTtcXG4gZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuIHZlYzMgZnJlc25lbFRlcm0gPSBGX1NjaGxpY2sobmR2LCBzcGVjKTtcXG4jaWZkZWYgQU1CSUVOVF9MSUdIVF9DT1VOVFxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7e1xcbiBkaWZmdXNlVGVybSArPSBhbWJpZW50TGlnaHRDb2xvcltfaWR4X107XFxuIH19XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfU0hfTElHSFRfQ09VTlRcXG4gZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge3tcXG4gZGlmZnVzZVRlcm0gKz0gY2FsY0FtYmllbnRTSExpZ2h0KF9pZHhfLCBOKSAqIGFtYmllbnRTSExpZ2h0Q29sb3JbX2lkeF9dO1xcbiB9fVxcbiNlbmRpZlxcbiNpZmRlZiBQT0lOVF9MSUdIVF9DT1VOVFxcbiNpZiBkZWZpbmVkKFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gZmxvYXQgc2hhZG93Q29udHJpYnNQb2ludFtQT0lOVF9MSUdIVF9DT1VOVF07XFxuIGlmKHNoYWRvd0VuYWJsZWQpXFxuIHtcXG4gY29tcHV0ZVNoYWRvd09mUG9pbnRMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic1BvaW50KTtcXG4gfVxcbiNlbmRpZlxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBQT0lOVF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge3tcXG4gdmVjMyBsaWdodFBvc2l0aW9uID0gcG9pbnRMaWdodFBvc2l0aW9uW19pZHhfXTtcXG4gdmVjMyBsYyA9IHBvaW50TGlnaHRDb2xvcltfaWR4X107XFxuIGZsb2F0IHJhbmdlID0gcG9pbnRMaWdodFJhbmdlW19pZHhfXTtcXG4gdmVjMyBMID0gbGlnaHRQb3NpdGlvbiAtIHZfV29ybGRQb3NpdGlvbjtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIHJhbmdlKTtcXG4gTCAvPSBkaXN0O1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIHNoYWRvd0NvbnRyaWIgPSBzaGFkb3dDb250cmlic1BvaW50W19pZHhfXTtcXG4gfVxcbiNlbmRpZlxcbiB2ZWMzIGxpID0gbGMgKiBuZGwgKiBhdHRlbnVhdGlvbiAqIHNoYWRvd0NvbnRyaWI7XFxuIGRpZmZ1c2VUZXJtICs9IGxpO1xcbiBzcGVjdWxhclRlcm0gKz0gbGkgKiBmcmVzbmVsVGVybSAqIERfUGhvbmcoZywgbmRoKTtcXG4gfX1cXG4jZW5kaWZcXG4jaWZkZWYgRElSRUNUSU9OQUxfTElHSFRfQ09VTlRcXG4jaWYgZGVmaW5lZChESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWJzRGlyW0RJUkVDVElPTkFMX0xJR0hUX0NPVU5UXTtcXG4gaWYoc2hhZG93RW5hYmxlZClcXG4ge1xcbiBjb21wdXRlU2hhZG93T2ZEaXJlY3Rpb25hbExpZ2h0cyh2X1dvcmxkUG9zaXRpb24sIHNoYWRvd0NvbnRyaWJzRGlyKTtcXG4gfVxcbiNlbmRpZlxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge3tcXG4gdmVjMyBMID0gLW5vcm1hbGl6ZShkaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9uW19pZHhfXSk7XFxuIHZlYzMgbGMgPSBkaXJlY3Rpb25hbExpZ2h0Q29sb3JbX2lkeF9dO1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIHNoYWRvd0NvbnRyaWIgPSBzaGFkb3dDb250cmlic0RpcltfaWR4X107XFxuIH1cXG4jZW5kaWZcXG4gdmVjMyBsaSA9IGxjICogbmRsICogc2hhZG93Q29udHJpYjtcXG4gZGlmZnVzZVRlcm0gKz0gbGk7XFxuIHNwZWN1bGFyVGVybSArPSBsaSAqIGZyZXNuZWxUZXJtICogRF9QaG9uZyhnLCBuZGgpO1xcbiB9fVxcbiNlbmRpZlxcbiNpZmRlZiBTUE9UX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWJzU3BvdFtTUE9UX0xJR0hUX0NPVU5UXTtcXG4gaWYoc2hhZG93RW5hYmxlZClcXG4ge1xcbiBjb21wdXRlU2hhZG93T2ZTcG90TGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNTcG90KTtcXG4gfVxcbiNlbmRpZlxcbiBmb3IoaW50IGkgPSAwOyBpIDwgU1BPVF9MSUdIVF9DT1VOVDsgaSsrKVxcbiB7XFxuIHZlYzMgbGlnaHRQb3NpdGlvbiA9IHNwb3RMaWdodFBvc2l0aW9uW2ldO1xcbiB2ZWMzIHNwb3RMaWdodERpcmVjdGlvbiA9IC1ub3JtYWxpemUoc3BvdExpZ2h0RGlyZWN0aW9uW2ldKTtcXG4gdmVjMyBsYyA9IHNwb3RMaWdodENvbG9yW2ldO1xcbiBmbG9hdCByYW5nZSA9IHNwb3RMaWdodFJhbmdlW2ldO1xcbiBmbG9hdCBhID0gc3BvdExpZ2h0VW1icmFBbmdsZUNvc2luZVtpXTtcXG4gZmxvYXQgYiA9IHNwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmVbaV07XFxuIGZsb2F0IGZhbGxvZmZGYWN0b3IgPSBzcG90TGlnaHRGYWxsb2ZmRmFjdG9yW2ldO1xcbiB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgcmFuZ2UpO1xcbiBMIC89IGRpc3Q7XFxuIGZsb2F0IGMgPSBkb3Qoc3BvdExpZ2h0RGlyZWN0aW9uLCBMKTtcXG4gZmxvYXQgZmFsbG9mZjtcXG4gZmFsbG9mZiA9IGNsYW1wKChjIC0gYSkgLyhiIC0gYSksIDAuMCwgMS4wKTtcXG4gZmFsbG9mZiA9IHBvdyhmYWxsb2ZmLCBmYWxsb2ZmRmFjdG9yKTtcXG4gdmVjMyBIID0gbm9ybWFsaXplKEwgKyBWKTtcXG4gZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiNpZiBkZWZpbmVkKFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZiAoc2hhZG93RW5hYmxlZClcXG4ge1xcbiBzaGFkb3dDb250cmliID0gc2hhZG93Q29udHJpYnNTcG90W2ldO1xcbiB9XFxuI2VuZGlmXFxuIHZlYzMgbGkgPSBsYyAqIGF0dGVudWF0aW9uICogKDEuMCAtIGZhbGxvZmYpICogc2hhZG93Q29udHJpYiAqIG5kbDtcXG4gZGlmZnVzZVRlcm0gKz0gbGk7XFxuIHNwZWN1bGFyVGVybSArPSBsaSAqIGZyZXNuZWxUZXJtICogRF9QaG9uZyhnLCBuZGgpO1xcbiB9XFxuI2VuZGlmXFxuIHZlYzQgb3V0Q29sb3IgPSBhbGJlZG9Db2xvcjtcXG4gb3V0Q29sb3IucmdiICo9IG1heChkaWZmdXNlVGVybSwgdmVjMygwLjApKTtcXG4gb3V0Q29sb3IucmdiICs9IG1heChzcGVjdWxhclRlcm0sIHZlYzMoMC4wKSk7XFxuI2lmZGVmIEFNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVFxcbiB2ZWMzIEwgPSByZWZsZWN0KC1WLCBOKTtcXG4gZmxvYXQgcm91Z2gyID0gY2xhbXAoMS4wIC0gZywgMC4wLCAxLjApO1xcbiBmbG9hdCBiaWFzMiA9IHJvdWdoMiAqIDUuMDtcXG4gdmVjMiBicmRmUGFyYW0yID0gdGV4dHVyZTJEKGFtYmllbnRDdWJlbWFwTGlnaHRCUkRGTG9va3VwWzBdLCB2ZWMyKHJvdWdoMiwgbmR2KSkueHk7XFxuIHZlYzMgZW52V2VpZ2h0MiA9IHNwZWMgKiBicmRmUGFyYW0yLnggKyBicmRmUGFyYW0yLnk7XFxuIHZlYzMgZW52VGV4ZWwyO1xcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX0NVQkVNQVBfTElHSFRfQ09VTlQ7IF9pZHhfKyspXFxuIHt7XFxuICNpZmRlZiBTVVBQT1JUX1RFWFRVUkVfTE9EXFxuIGVudlRleGVsMiA9IFJHQk1EZWNvZGUodGV4dHVyZUN1YmVMb2RFWFQoYW1iaWVudEN1YmVtYXBMaWdodEN1YmVtYXBbX2lkeF9dLCBMLCBiaWFzMiksIDguMTIpO1xcbiAjZWxzZVxcbiBlbnZUZXhlbDIgPSBSR0JNRGVjb2RlKHRleHR1cmVDdWJlKGFtYmllbnRDdWJlbWFwTGlnaHRDdWJlbWFwW19pZHhfXSwgTCksIDguMTIpO1xcbiAjZW5kaWZcXG4gb3V0Q29sb3IucmdiICs9IGFtYmllbnRDdWJlbWFwTGlnaHRDb2xvcltfaWR4X10gKiBlbnZUZXhlbDIgKiBlbnZXZWlnaHQyO1xcbiB9fVxcbiNlbmRpZlxcbiNpZmRlZiBFTlZJUk9OTUVOVE1BUF9FTkFCTEVEXFxuIHZlYzMgZW52V2VpZ2h0ID0gZyAqIGZyZXNuZWxUZXJtO1xcbiB2ZWMzIEwgPSByZWZsZWN0KC1WLCBOKTtcXG4gI2lmZGVmIFBBUkFMTEFYX0NPUlJFQ1RFRFxcbiBMID0gcGFyYWxsYXhDb3JyZWN0KEwsIHZfV29ybGRQb3NpdGlvbiwgZW52aXJvbm1lbnRCb3hNaW4sIGVudmlyb25tZW50Qm94TWF4KTtcXG4jZW5kaWZcXG4gI2lmZGVmIEVOVklST05NRU5UTUFQX1BSRUZJTFRFUlxcbiBmbG9hdCByb3VnaCA9IGNsYW1wKDEuMCAtIGcsIDAuMCwgMS4wKTtcXG4gZmxvYXQgYmlhcyA9IHJvdWdoICogbWF4TWlwbWFwTGV2ZWw7XFxuICNpZmRlZiBTVVBQT1JUX1RFWFRVUkVfTE9EXFxuIHZlYzMgZW52VGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZUN1YmVMb2RFWFQoZW52aXJvbm1lbnRNYXAsIEwsIGJpYXMpKS5yZ2I7XFxuICNlbHNlXFxuIHZlYzMgZW52VGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZUN1YmUoZW52aXJvbm1lbnRNYXAsIEwpKS5yZ2I7XFxuICNlbmRpZlxcbiAjaWZkZWYgQlJERkxPT0tVUF9FTkFCTEVEXFxuIHZlYzIgYnJkZlBhcmFtID0gdGV4dHVyZTJEKGJyZGZMb29rdXAsIHZlYzIocm91Z2gsIG5kdikpLnh5O1xcbiBlbnZXZWlnaHQgPSBzcGVjICogYnJkZlBhcmFtLnggKyBicmRmUGFyYW0ueTtcXG4gI2VuZGlmXFxuICNlbHNlXFxuIHZlYzMgZW52VGV4ZWwgPSB0ZXh0dXJlQ3ViZShlbnZpcm9ubWVudE1hcCwgTCkueHl6O1xcbiAjZW5kaWZcXG4gb3V0Q29sb3IucmdiICs9IGVudlRleGVsICogZW52V2VpZ2h0O1xcbiNlbmRpZlxcbiBmbG9hdCBhb0ZhY3RvciA9IDEuMDtcXG4jaWZkZWYgU1NBT01BUF9FTkFCTEVEXFxuIGFvRmFjdG9yID0gbWluKHRleHR1cmUyRChzc2FvTWFwLCAoZ2xfRnJhZ0Nvb3JkLnh5IC0gdmlld3BvcnQueHkpIC8gdmlld3BvcnQuencpLnIsIGFvRmFjdG9yKTtcXG4jZW5kaWZcXG4jaWZkZWYgQU9NQVBfRU5BQkxFRFxcbiBhb0ZhY3RvciA9IG1pbigxLjAgLSBjbGFtcCgoMS4wIC0gdGV4dHVyZTJEKGFvTWFwLCB2X1RleGNvb3JkMikucikgKiBhb0ludGVuc2l0eSwgMC4wLCAxLjApLCBhb0ZhY3Rvcik7XFxuI2VuZGlmXFxuI2lmZGVmIE9DQ0xVU0lPTk1BUF9FTkFCTEVEXFxuIGFvRmFjdG9yID0gbWluKDEuMCAtIGNsYW1wKCgxLjAgLSB0ZXh0dXJlMkQob2NjbHVzaW9uTWFwLCB2X1RleGNvb3JkKS5yKSwgMC4wLCAxLjApLCBhb0ZhY3Rvcik7XFxuI2VuZGlmXFxuIG91dENvbG9yLnJnYiAqPSBhb0ZhY3RvcjtcXG4gdmVjMyBsRW1pc3Npb24gPSBlbWlzc2lvbjtcXG4jaWZkZWYgRU1JU1NJVkVNQVBfRU5BQkxFRFxcbiBsRW1pc3Npb24gKj0gdGV4dHVyZTJEKGVtaXNzaXZlTWFwLCB1dikucmdiO1xcbiNlbmRpZlxcbiBvdXRDb2xvci5yZ2IgKz0gbEVtaXNzaW9uICogZW1pc3Npb25JbnRlbnNpdHk7XFxuIGlmKGxpbmVXaWR0aCA+IDAuKVxcbiB7XFxuIG91dENvbG9yLnJnYiA9IG1peChvdXRDb2xvci5yZ2IsIGxpbmVDb2xvci5yZ2IsICgxLjAgLSBlZGdlRmFjdG9yKGxpbmVXaWR0aCkpICogbGluZUNvbG9yLmEpO1xcbiB9XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG4gaWYgKG91dENvbG9yLmEgPCBhbHBoYUN1dG9mZikge1xcbiBkaXNjYXJkO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIFRPTkVNQVBQSU5HXFxuIG91dENvbG9yLnJnYiA9IEFDRVNUb25lTWFwcGluZyhvdXRDb2xvci5yZ2IpO1xcbiNlbmRpZlxcbiNpZmRlZiBTUkdCX0VOQ09ERVxcbiBvdXRDb2xvciA9IGxpbmVhclRvc1JHQihvdXRDb2xvcik7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihvdXRDb2xvcik7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc3RhbmRhcmRNUi52ZXJ0ZXhcXG5AaW1wb3J0IGNsYXkuc3RhbmRhcmQudmVydGV4XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zdGFuZGFyZE1SLmZyYWdtZW50XFxuI2RlZmluZSBVU0VfTUVUQUxORVNTXFxuI2RlZmluZSBVU0VfUk9VR0hORVNTXFxuQGltcG9ydCBjbGF5LnN0YW5kYXJkLmZyYWdtZW50XFxuQGVuZFwiO1xyXG4iLCJpbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi9NYXRlcmlhbCc7XHJcblxyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4vU2hhZGVyJztcclxuaW1wb3J0IHN0YW5kYXJkRXNzbCBmcm9tICcuL3NoYWRlci9zb3VyY2Uvc3RhbmRhcmQuZ2xzbC5qcyc7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4vY29yZS91dGlsJztcclxuXHJcbi8vIEltcG9ydCBzdGFuZGFyZCBzaGFkZXJcclxuU2hhZGVyWydpbXBvcnQnXShzdGFuZGFyZEVzc2wpO1xyXG5cclxudmFyIFRFWFRVUkVfUFJPUEVSVElFUyA9IFsnZGlmZnVzZU1hcCcsICdub3JtYWxNYXAnLCAncm91Z2huZXNzTWFwJywgJ21ldGFsbmVzc01hcCcsICdlbWlzc2l2ZU1hcCcsICdlbnZpcm9ubWVudE1hcCcsICdicmRmTG9va3VwJywgJ3NzYW9NYXAnLCAnYW9NYXAnXTtcclxudmFyIFNJTVBMRV9QUk9QRVJUSUVTID0gWydjb2xvcicsICdlbWlzc2lvbicsICdlbWlzc2lvbkludGVuc2l0eScsICdhbHBoYScsICdyb3VnaG5lc3MnLCAnbWV0YWxuZXNzJywgJ3V2UmVwZWF0JywgJ3V2T2Zmc2V0JywgJ2FvSW50ZW5zaXR5JywgJ2FscGhhQ3V0b2ZmJywgJ25vcm1hbFNjYWxlJ107XHJcbnZhciBQUk9QRVJUSUVTX0NIQU5HRV9TSEFERVIgPSBbJ2xpbmVhcicsICdlbmNvZGVSR0JNJywgJ2RlY29kZVJHQk0nLCAnZG91YmxlU2lkZWQnLCAnYWxwaGFUZXN0JywgJ3JvdWdobmVzc0NoYW5uZWwnLCAnbWV0YWxuZXNzQ2hhbm5lbCcsICdlbnZpcm9ubWVudE1hcFByZWZpbHRlcmVkJ107XHJcblxyXG52YXIgTlVNX0RFRklORV9NQVAgPSB7XHJcbiAgICAncm91Z2huZXNzQ2hhbm5lbCc6ICdST1VHSE5FU1NfQ0hBTk5FTCcsXHJcbiAgICAnbWV0YWxuZXNzQ2hhbm5lbCc6ICdNRVRBTE5FU1NfQ0hBTk5FTCdcclxufTtcclxudmFyIEJPT0xfREVGSU5FX01BUCA9IHtcclxuICAgICdsaW5lYXInOiAnU1JHQl9ERUNPREUnLFxyXG4gICAgJ2VuY29kZVJHQk0nOiAnUkdCTV9FTkNPREUnLFxyXG4gICAgJ2RlY29kZVJHQk0nOiAnUkdCTV9ERUNPREUnLFxyXG4gICAgJ2RvdWJsZVNpZGVkJzogJ0RPVUJMRV9TSURFRCcsXHJcbiAgICAnYWxwaGFUZXN0JzogJ0FMUEhBX1RFU1QnLFxyXG4gICAgJ2Vudmlyb25tZW50TWFwUHJlZmlsdGVyZWQnOiAnRU5WSVJPTk1FTlRNQVBfUFJFRklMVEVSJ1xyXG59O1xyXG5cclxuXHJcbnZhciBzdGFuZGFyZFNoYWRlcjtcclxuLyoqXHJcbiAqIFN0YW5kYXJkIG1hdGVyaWFsIHdpdGhvdXQgY3VzdG9tIHNoYWRlci5cclxuICogQGNvbnN0cnVjdG9yIGNsYXkuU3RhbmRhcmRNYXRlcmlhbFxyXG4gKiBAZXh0ZW5kcyBjbGF5LkJhc2VcclxuICogQGV4YW1wbGVcclxuICogdmFyIG1hdCA9IG5ldyBjbGF5LlN0YW5kYXJkTWF0ZXJpYWwoe1xyXG4gKiAgICAgY29sb3I6IFsxLCAxLCAxXSxcclxuICogICAgIGRpZmZ1c2VNYXA6IGRpZmZ1c2VUZXh0dXJlXHJcbiAqIH0pO1xyXG4gKiBtYXQucm91Z2huZXNzID0gMTtcclxuICovXHJcbnZhciBTdGFuZGFyZE1hdGVyaWFsID0gTWF0ZXJpYWwuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghc3RhbmRhcmRTaGFkZXIpIHtcclxuICAgICAgICBzdGFuZGFyZFNoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZE1SLnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkTVIuZnJhZ21lbnQnKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlN0YW5kYXJkTWF0ZXJpYWwjICovIHtcclxuICAgICAgICBzaGFkZXI6IHN0YW5kYXJkU2hhZGVyXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAob3B0aW9uKSB7XHJcbiAgICAvLyBQRU5ESU5HXHJcbiAgICB1dGlsLmV4dGVuZCh0aGlzLCBvcHRpb24pO1xyXG4gICAgLy8gRXh0ZW5kIGFmdGVyIHNoYWRlciBpcyBjcmVhdGVkLlxyXG4gICAgdXRpbC5kZWZhdWx0cyh0aGlzLCAvKiogQGxlbmRzIGNsYXkuU3RhbmRhcmRNYXRlcmlhbCMgKi8gIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgICAgICogQGRlZmF1bHQgWzEsIDEsIDFdXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29sb3I6IFsxLCAxLCAxXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFswLCAwLCAwXVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVtaXNzaW9uOiBbMCwgMCwgMF0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVtaXNzaW9uSW50ZW5zaXR5OiAwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDAuNVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJvdWdobmVzczogMC41LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKi9cclxuICAgICAgICBtZXRhbG5lc3M6IDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFscGhhOiAxLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhbHBoYVRlc3Q6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDdXRvZmYgdGhyZXNob2xkIGZvciBhbHBoYSB0ZXN0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhbHBoYUN1dG9mZjogMC45LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTY2FsYXIgbXVsdGlwbGllciBhcHBsaWVkIHRvIGVhY2ggbm9ybWFsIHZlY3RvciBvZiBub3JtYWwgdGV4dHVyZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBYWFggVGhpcyB2YWx1ZSBpcyBjb25zaWRlcmVkIG9ubHkgaWYgYSBub3JtYWwgdGV4dHVyZSBpcyBzcGVjaWZpZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbm9ybWFsU2NhbGU6IDEuMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgLy8gVE9ETyBNdXN0IGRpc2FibGUgY3VsbGluZy5cclxuICAgICAgICBkb3VibGVTaWRlZDogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkaWZmdXNlTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbm9ybWFsTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcm91Z2huZXNzTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWV0YWxuZXNzTWFwOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbWlzc2l2ZU1hcDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZUN1YmV9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LkJvdW5kaW5nQm94fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVudmlyb25tZW50Qm94OiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEJSREYgTG9va3VwIGlzIGdlbmVyYXRlZCBieSBjbGF5LnV0aWwuY3ViZW1hcC5pbnRlZ3JhdGVCcmRmXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGJyZGZMb29rdXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzc2FvTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYW9NYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBbMSwgMV1cclxuICAgICAgICAgKi9cclxuICAgICAgICB1dlJlcGVhdDogWzEsIDFdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgICAgICogQGRlZmF1bHQgWzAsIDBdXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdXZPZmZzZXQ6IFswLCAwXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYW9JbnRlbnNpdHk6IDEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVudmlyb25tZW50TWFwUHJlZmlsdGVyZWQ6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBsaW5lYXI6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbmNvZGVSR0JNOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGVjb2RlUkdCTTogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtOdW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcm91Z2huZXNzQ2hhbm5lbDogMCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7TnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1ldGFsbmVzc0NoYW5uZWw6IDFcclxuICAgIH0pO1xyXG59LCB7XHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtYXRlcmlhbCA9IG5ldyBTdGFuZGFyZE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgVEVYVFVSRV9QUk9QRVJUSUVTLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzW3Byb3BOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxbcHJvcE5hbWVdID0gdGhpc1twcm9wTmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgICAgICBTSU1QTEVfUFJPUEVSVElFUy5jb25jYXQoUFJPUEVSVElFU19DSEFOR0VfU0hBREVSKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wTmFtZSkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbFtwcm9wTmFtZV0gPSB0aGlzW3Byb3BOYW1lXTtcclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWw7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuU0lNUExFX1BST1BFUlRJRVMuZm9yRWFjaChmdW5jdGlvbiAocHJvcE5hbWUpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgcHJvcE5hbWUsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KHByb3BOYW1lKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShwcm9wTmFtZSwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59KTtcclxuXHJcblRFWFRVUkVfUFJPUEVSVElFUy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wTmFtZSkge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCBwcm9wTmFtZSwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQocHJvcE5hbWUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKHByb3BOYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxuUFJPUEVSVElFU19DSEFOR0VfU0hBREVSLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICB2YXIgcHJpdmF0ZUtleSA9ICdfJyArIHByb3BOYW1lO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCBwcm9wTmFtZSwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpc1twcml2YXRlS2V5XTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXNbcHJpdmF0ZUtleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHByb3BOYW1lIGluIE5VTV9ERUZJTkVfTUFQKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGVmaW5lTmFtZSA9IE5VTV9ERUZJTkVfTUFQW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lKCdmcmFnbWVudCcsIGRlZmluZU5hbWUsIHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBkZWZpbmVOYW1lID0gQk9PTF9ERUZJTkVfTUFQW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgICAgIHZhbHVlID8gdGhpcy5kZWZpbmUoJ2ZyYWdtZW50JywgZGVmaW5lTmFtZSkgOiB0aGlzLnVuZGVmaW5lKCdmcmFnbWVudCcsIGRlZmluZU5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAnZW52aXJvbm1lbnRCb3gnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZW52Qm94ID0gdGhpcy5fZW52aXJvbm1lbnRCb3g7XHJcbiAgICAgICAgaWYgKGVudkJveCkge1xyXG4gICAgICAgICAgICBlbnZCb3gubWluLnNldEFycmF5KHRoaXMuZ2V0KCdlbnZpcm9ubWVudEJveE1pbicpKTtcclxuICAgICAgICAgICAgZW52Qm94Lm1heC5zZXRBcnJheSh0aGlzLmdldCgnZW52aXJvbm1lbnRCb3hNYXgnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlbnZCb3g7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fZW52aXJvbm1lbnRCb3ggPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgdmFyIHVuaWZvcm1zID0gdGhpcy51bmlmb3JtcyA9IHRoaXMudW5pZm9ybXMgfHwge307XHJcbiAgICAgICAgdW5pZm9ybXNbJ2Vudmlyb25tZW50Qm94TWluJ10gPSB1bmlmb3Jtc1snZW52aXJvbm1lbnRCb3hNaW4nXSB8fCB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB1bmlmb3Jtc1snZW52aXJvbm1lbnRCb3hNYXgnXSA9IHVuaWZvcm1zWydlbnZpcm9ubWVudEJveE1heCddIHx8IHtcclxuICAgICAgICAgICAgdmFsdWU6IG51bGxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBUT0RPIENhbid0IGRldGVjdCBvcGVyYXRpb24gbGlrZSBib3gubWluID0gbmV3IFZlY3RvcigpXHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybSgnZW52aXJvbm1lbnRCb3hNaW4nLCB2YWx1ZS5taW4uYXJyYXkpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFVuaWZvcm0oJ2Vudmlyb25tZW50Qm94TWF4JywgdmFsdWUubWF4LmFycmF5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRlZmluZSgnZnJhZ21lbnQnLCAnUEFSQUxMQVhfQ09SUkVDVEVEJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVuZGVmaW5lKCdmcmFnbWVudCcsICdQQVJBTExBWF9DT1JSRUNURUQnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3RhbmRhcmRNYXRlcmlhbDtcclxuIiwiaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5cclxudmFyIF9saWJyYXJ5ID0ge307XHJcblxyXG5mdW5jdGlvbiBTaGFkZXJMaWJyYXJ5ICgpIHtcclxuICAgIHRoaXMuX3Bvb2wgPSB7fTtcclxufVxyXG5cclxuU2hhZGVyTGlicmFyeS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgdmFyIGtleSA9IG5hbWU7XHJcblxyXG4gICAgaWYgKHRoaXMuX3Bvb2xba2V5XSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb29sW2tleV07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YXIgc291cmNlID0gX2xpYnJhcnlbbmFtZV07XHJcbiAgICAgICAgaWYgKCFzb3VyY2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU2hhZGVyIFwiJyArIG5hbWUgKyAnXCInICsgJyBpcyBub3QgaW4gdGhlIGxpYnJhcnknKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc2hhZGVyID0gbmV3IFNoYWRlcihzb3VyY2UudmVydGV4LCBzb3VyY2UuZnJhZ21lbnQpO1xyXG4gICAgICAgIHRoaXMuX3Bvb2xba2V5XSA9IHNoYWRlcjtcclxuICAgICAgICByZXR1cm4gc2hhZGVyO1xyXG4gICAgfVxyXG59O1xyXG5cclxuU2hhZGVyTGlicmFyeS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcclxuICAgIHRoaXMuX3Bvb2wgPSB7fTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIHRlbXBsYXRlKG5hbWUsIHZlcnRleCwgZnJhZ21lbnQpIHtcclxuICAgIF9saWJyYXJ5W25hbWVdID0ge1xyXG4gICAgICAgIHZlcnRleDogdmVydGV4LFxyXG4gICAgICAgIGZyYWdtZW50OiBmcmFnbWVudFxyXG4gICAgfTtcclxufVxyXG5cclxudmFyIGRlZmF1bHRMaWJyYXJ5ID0gbmV3IFNoYWRlckxpYnJhcnkoKTtcclxuXHJcbi8qKlxyXG4gKiAjIyMgQnVpbGluIHNoYWRlcnNcclxuICogKyBjbGF5LnN0YW5kYXJkXHJcbiAqICsgY2xheS5iYXNpY1xyXG4gKiArIGNsYXkubGFtYmVydFxyXG4gKiArIGNsYXkud2lyZWZyYW1lXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgY2xheS5zaGFkZXIubGlicmFyeVxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYSBuZXcgc2hhZGVyIGxpYnJhcnkuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUxpYnJhcnk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFNoYWRlckxpYnJhcnkoKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBzaGFkZXIgZnJvbSBkZWZhdWx0IGxpYnJhcnkuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5TaGFkZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5zaGFkZXIubGlicmFyeVxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqICAgICBjbGF5LnNoYWRlci5saWJyYXJ5LmdldCgnY2xheS5zdGFuZGFyZCcpXHJcbiAgICAgKi9cclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBkZWZhdWx0TGlicmFyeS5nZXQuYXBwbHkoZGVmYXVsdExpYnJhcnksIGFyZ3VtZW50cyk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5zaGFkZXIubGlicmFyeVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHZlcnRleCAtIFZlcnRleCBzaGFkZXIgY29kZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBmcmFnbWVudCAtIEZyYWdtZW50IHNoYWRlciBjb2RlXHJcbiAgICAgKi9cclxuICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSxcclxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRMaWJyYXJ5LmNsZWFyKCk7XHJcbiAgICB9XHJcbn07XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5Kb2ludFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEpvaW50ID0gQmFzZS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5Kb2ludCMgKi9cclxue1xyXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL2lzc3Vlcy8xOTMjaXNzdWVjb21tZW50LTI5MjE2NTc2XHJcbiAgICAvKipcclxuICAgICAqIEpvaW50IG5hbWVcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIG5hbWU6ICcnLFxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRleCBvZiBqb2ludCBpbiB0aGUgc2tlbGV0b25cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGluZGV4OiAtMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjZW5lIG5vZGUgYXR0YWNoZWQgdG9cclxuICAgICAqIEB0eXBlIHtjbGF5Lk5vZGV9XHJcbiAgICAgKi9cclxuICAgIG5vZGU6IG51bGxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBKb2ludDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgSm9pbnQgZnJvbSAnLi9Kb2ludCc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi9tYXRoL0JvdW5kaW5nQm94JztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi9tYXRoL01hdHJpeDQnO1xyXG5cclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi9nbG1hdHJpeC92ZWMzJztcclxuaW1wb3J0IHF1YXQgZnJvbSAnLi9nbG1hdHJpeC9xdWF0JztcclxuXHJcblxyXG52YXIgdG1wQm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxudmFyIHRtcE1hdDQgPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlNrZWxldG9uXHJcbiAqL1xyXG52YXIgU2tlbGV0b24gPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlNrZWxldG9uIyAqL3tcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUmVsYXRpdmUgcm9vdCBub2RlIHRoYXQgbm90IGFmZmVjdCB0cmFuc2Zvcm0gb2Ygam9pbnQuXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICByZWxhdGl2ZVJvb3ROb2RlOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbmFtZTogJycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIGpvaW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48Y2xheS5Kb2ludD59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgam9pbnRzOiBbXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogYm91bmRpbmcgYm94IHdpdGggYm91bmQgZ2VvbWV0cnkuXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYm91bmRpbmdCb3g6IG51bGwsXHJcblxyXG4gICAgICAgIF9jbGlwczogW10sXHJcblxyXG4gICAgICAgIC8vIE1hdHJpeCB0byBqb2ludCBzcGFjZSAocmVsYXRpdmUgdG8gcm9vdCBqb2ludClcclxuICAgICAgICBfaW52QmluZFBvc2VNYXRyaWNlc0FycmF5OiBudWxsLFxyXG5cclxuICAgICAgICAvLyBVc2Ugc3ViYXJyYXkgaW5zdGVhZCBvZiBjb3B5IGJhY2sgZWFjaCB0aW1lIGNvbXB1dGluZyBtYXRyaXhcclxuICAgICAgICAvLyBodHRwOi8vanNwZXJmLmNvbS9zdWJhcnJheS12cy1jb3B5LWZvci1hcnJheS10cmFuc2Zvcm0vNVxyXG4gICAgICAgIF9qb2ludE1hdHJpY2VzU3ViQXJyYXlzOiBbXSxcclxuXHJcbiAgICAgICAgLy8gam9pbnRNYXRyaXggKiBjdXJyZW50UG9zZU1hdHJpeFxyXG4gICAgICAgIC8vIHdvcmxkVHJhbnNmb3JtIGlzIHJlbGF0aXZlIHRvIHRoZSByb290IGJvbmVcclxuICAgICAgICAvLyBzdGlsbCBpbiBtb2RlbCBzcGFjZSBub3Qgd29ybGQgc3BhY2VcclxuICAgICAgICBfc2tpbk1hdHJpY2VzQXJyYXk6IG51bGwsXHJcblxyXG4gICAgICAgIF9za2luTWF0cmljZXNTdWJBcnJheXM6IFtdLFxyXG5cclxuICAgICAgICBfc3ViU2tpbk1hdHJpY2VzQXJyYXk6IHt9XHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuU2tlbGV0b24ucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBhIHNraW5uaW5nIGNsaXAgYW5kIGNyZWF0ZSBhIG1hcCBiZXR3ZWVuIGNsaXAgYW5kIHNrZWxldG9uXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLlNraW5uaW5nQ2xpcH0gY2xpcFxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFttYXBSdWxlXSBNYXAgYmV0d2VlbiBqb2ludCBuYW1lIGluIHNrZWxldG9uIGFuZCBqb2ludCBuYW1lIGluIGNsaXBcclxuICAgICAqL1xyXG4gICAgYWRkQ2xpcDogZnVuY3Rpb24gKGNsaXAsIG1hcFJ1bGUpIHtcclxuICAgICAgICAvLyBDbGlwIGhhdmUgYmVlbiBleGlzdHMgaW5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NsaXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9jbGlwc1tpXS5jbGlwID09PSBjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gTWFwIHRoZSBqb2ludCBpbmRleCBpbiBza2VsZXRvbiB0byBqb2ludCBwb3NlIGluZGV4IGluIGNsaXBcclxuICAgICAgICB2YXIgbWFwcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbWFwc1tpXSA9IC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBDcmVhdGUgYXZhdGFyXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGlwLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tqXTtcclxuICAgICAgICAgICAgICAgIHZhciB0cmFjayA9IGNsaXAudHJhY2tzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50TmFtZSA9IGpvaW50Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAobWFwUnVsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGpvaW50TmFtZSA9IG1hcFJ1bGVbam9pbnROYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0cmFjay5uYW1lID09PSBqb2ludE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXBzW2pdID0gaTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fY2xpcHMucHVzaCh7XHJcbiAgICAgICAgICAgIG1hcHM6IG1hcHMsXHJcbiAgICAgICAgICAgIGNsaXA6IGNsaXBcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBzLmxlbmd0aCAtIDE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5Ta2lubmluZ0NsaXB9IGNsaXBcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2xpcDogZnVuY3Rpb24gKGNsaXApIHtcclxuICAgICAgICB2YXIgaWR4ID0gLTE7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jbGlwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fY2xpcHNbaV0uY2xpcCA9PT0gY2xpcCkge1xyXG4gICAgICAgICAgICAgICAgaWR4ID0gaTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZHggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NsaXBzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhbGwgY2xpcHNcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2xpcHNBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9jbGlwcyA9IFtdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBjbGlwIGJ5IGluZGV4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGluZGV4XHJcbiAgICAgKi9cclxuICAgIGdldENsaXA6IGZ1bmN0aW9uIChpbmRleCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jbGlwc1tpbmRleF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBzW2luZGV4XS5jbGlwO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldENsaXBOdW1iZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpcHMubGVuZ3RoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBqb2ludCBtYXRyaWNlcyBmcm9tIG5vZGUgdHJhbnNmb3JtXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqL1xyXG4gICAgdXBkYXRlSm9pbnRNYXRyaWNlczogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIG00ID0gbWF0NC5jcmVhdGUoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmpvaW50cy5sZW5ndGggKiAxNik7XHJcbiAgICAgICAgICAgIHRoaXMuX3NraW5NYXRyaWNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmpvaW50cy5sZW5ndGggKiAxNik7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgICAgIG1hdDQuY29weShtNCwgam9pbnQubm9kZS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICBtYXQ0LmludmVydChtNCwgbTQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBpICogMTY7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE2OyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXlbb2Zmc2V0ICsgal0gPSBtNFtqXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVNYXRyaWNlc1N1YkFycmF5cygpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIGJvdW5kaW5nQm94IG9mIGVhY2ggam9pbnQgYm91bmQgdG8gZ2VvbWV0cnkuXHJcbiAgICAgKiBBU1NVTUUgc2tlbGV0b24gYW5kIGdlb21ldHJ5IGpvaW50cyBhcmUgbWF0Y2hlZC5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5HZW9tZXRyeX0gZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgdXBkYXRlSm9pbnRzQm91bmRpbmdCb3hlczogZnVuY3Rpb24gKGdlb21ldHJ5KSB7XHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbkF0dHIgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciBqb2ludEF0dHIgPSBhdHRyaWJ1dGVzLmpvaW50O1xyXG4gICAgICAgIHZhciB3ZWlnaHRBdHRyID0gYXR0cmlidXRlcy53ZWlnaHQ7XHJcblxyXG4gICAgICAgIHZhciBqb2ludHNCb3VuZGluZ0JveGVzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBqb2ludHNCb3VuZGluZ0JveGVzW2ldID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgICAgIGpvaW50c0JvdW5kaW5nQm94ZXNbaV0uX191cGRhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdnR4Sm9pbnQgPSBbXTtcclxuICAgICAgICB2YXIgdnR4UG9zID0gW107XHJcbiAgICAgICAgdmFyIHZ0eFdlaWdodCA9IFtdO1xyXG4gICAgICAgIHZhciBtYXhKb2ludElkeCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tZXRyeS52ZXJ0ZXhDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGpvaW50QXR0ci5nZXQoaSwgdnR4Sm9pbnQpO1xyXG4gICAgICAgICAgICBwb3NpdGlvbkF0dHIuZ2V0KGksIHZ0eFBvcyk7XHJcbiAgICAgICAgICAgIHdlaWdodEF0dHIuZ2V0KGksIHZ0eFdlaWdodCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDQ7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZ0eFdlaWdodFtrXSA+IDAuMDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgam9pbnRJZHggPSB2dHhKb2ludFtrXTtcclxuICAgICAgICAgICAgICAgICAgICBtYXhKb2ludElkeCA9IE1hdGgubWF4KG1heEpvaW50SWR4LCBqb2ludElkeCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtaW4gPSBqb2ludHNCb3VuZGluZ0JveGVzW2pvaW50SWR4XS5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1heCA9IGpvaW50c0JvdW5kaW5nQm94ZXNbam9pbnRJZHhdLm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgam9pbnRzQm91bmRpbmdCb3hlc1tqb2ludElkeF0uX191cGRhdGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbWluID0gdmVjMy5taW4obWluLCBtaW4sIHZ0eFBvcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF4ID0gdmVjMy5tYXgobWF4LCBtYXgsIHZ0eFBvcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2pvaW50c0JvdW5kaW5nQm94ZXMgPSBqb2ludHNCb3VuZGluZ0JveGVzO1xyXG5cclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcblxyXG4gICAgICAgIGlmIChtYXhKb2ludElkeCA8IHRoaXMuam9pbnRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdHZW9tZXRyeSBqb2ludHMgYW5kIHNrZWxldG9uIGpvaW50cyBkb25cXCd0IG1hdGNoJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRKb2ludE1hdHJpY2VzQXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkgPSBhcnI7XHJcbiAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGFyci5sZW5ndGgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTWF0cmljZXNTdWJBcnJheXMoKTtcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlTWF0cmljZXNTdWJBcnJheXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2pvaW50TWF0cmljZXNTdWJBcnJheXNbaV0gPSB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkuc3ViYXJyYXkoaSAqIDE2LCAoaSsxKSAqIDE2KTtcclxuICAgICAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzU3ViQXJyYXlzW2ldID0gdGhpcy5fc2tpbk1hdHJpY2VzQXJyYXkuc3ViYXJyYXkoaSAqIDE2LCAoaSsxKSAqIDE2KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHNraW5uaW5nIG1hdHJpY2VzXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB0aGlzLl9zZXRQb3NlKCk7XHJcblxyXG4gICAgICAgIHZhciBqb2ludHNCb3VuZGluZ0JveGVzID0gdGhpcy5fam9pbnRzQm91bmRpbmdCb3hlcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgbWF0NC5tdWx0aXBseShcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NraW5NYXRyaWNlc1N1YkFycmF5c1tpXSxcclxuICAgICAgICAgICAgICAgIGpvaW50Lm5vZGUud29ybGRUcmFuc2Zvcm0uYXJyYXksXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9qb2ludE1hdHJpY2VzU3ViQXJyYXlzW2ldXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldChJbmZpbml0eSwgSW5maW5pdHksIEluZmluaXR5KTtcclxuICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5tYXguc2V0KC1JbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHkpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBiYm94ID0gam9pbnRzQm91bmRpbmdCb3hlc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChiYm94Ll9fdXBkYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcEJvdW5kaW5nQm94LmNvcHkoYmJveCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdG1wTWF0NC5hcnJheSA9IHRoaXMuX3NraW5NYXRyaWNlc1N1YkFycmF5c1tpXTtcclxuICAgICAgICAgICAgICAgICAgICB0bXBCb3VuZGluZ0JveC5hcHBseVRyYW5zZm9ybSh0bXBNYXQ0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveC51bmlvbih0bXBCb3VuZGluZ0JveCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFN1YlNraW5NYXRyaWNlczogZnVuY3Rpb24gKG1lc2hJZCwgam9pbnRzKSB7XHJcbiAgICAgICAgdmFyIHN1YkFycmF5ID0gdGhpcy5fc3ViU2tpbk1hdHJpY2VzQXJyYXlbbWVzaElkXTtcclxuICAgICAgICBpZiAoIXN1YkFycmF5KSB7XHJcbiAgICAgICAgICAgIHN1YkFycmF5XHJcbiAgICAgICAgICAgICAgICA9IHRoaXMuX3N1YlNraW5NYXRyaWNlc0FycmF5W21lc2hJZF1cclxuICAgICAgICAgICAgICAgID0gbmV3IEZsb2F0MzJBcnJheShqb2ludHMubGVuZ3RoICogMTYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY3Vyc29yID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgaWR4ID0gam9pbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE2OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHN1YkFycmF5W2N1cnNvcisrXSA9IHRoaXMuX3NraW5NYXRyaWNlc0FycmF5W2lkeCAqIDE2ICsgal07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1YkFycmF5O1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRTdWJTa2luTWF0cmljZXNUZXh0dXJlOiBmdW5jdGlvbiAobWVzaElkLCBqb2ludHMpIHtcclxuICAgICAgICB2YXIgc2tpbk1hdHJpY2VzID0gdGhpcy5nZXRTdWJTa2luTWF0cmljZXMobWVzaElkLCBqb2ludHMpO1xyXG4gICAgICAgIHZhciBzaXplO1xyXG4gICAgICAgIHZhciBudW1Kb2ludHMgPSB0aGlzLmpvaW50cy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKG51bUpvaW50cyA+IDI1Nikge1xyXG4gICAgICAgICAgICBzaXplID0gNjQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG51bUpvaW50cyA+IDY0KSB7XHJcbiAgICAgICAgICAgIHNpemUgPSAzMjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobnVtSm9pbnRzID4gMTYpIHtcclxuICAgICAgICAgICAgc2l6ZSA9IDE2O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc2l6ZSA9IDg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3NraW5NYXRyaWNlc1RleHR1cmUgPSB0aGlzLl9za2luTWF0cmljZXNUZXh0dXJlIHx8IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkZMT0FULFxyXG4gICAgICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgICAgIHVzZU1pcG1hcDogZmFsc2UsXHJcbiAgICAgICAgICAgIGZsaXBZOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRleHR1cmUud2lkdGggPSBzaXplO1xyXG4gICAgICAgIHRleHR1cmUuaGVpZ2h0ID0gc2l6ZTtcclxuXHJcbiAgICAgICAgaWYgKCF0ZXh0dXJlLnBpeGVscyB8fCB0ZXh0dXJlLnBpeGVscy5sZW5ndGggIT09IHNpemUgKiBzaXplICogNCkge1xyXG4gICAgICAgICAgICB0ZXh0dXJlLnBpeGVscyA9IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZSAqIHNpemUgKiA0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGV4dHVyZS5waXhlbHMuc2V0KHNraW5NYXRyaWNlcyk7XHJcbiAgICAgICAgdGV4dHVyZS5kaXJ0eSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0U2tpbk1hdHJpY2VzVGV4dHVyZTogZnVuY3Rpb24gKCkge1xyXG5cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NraW5NYXRyaWNlc1RleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIF9zZXRQb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NsaXBzWzBdKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gdGhpcy5fY2xpcHNbMF0uY2xpcDtcclxuICAgICAgICAgICAgdmFyIG1hcHMgPSB0aGlzLl9jbGlwc1swXS5tYXBzO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50ID0gdGhpcy5qb2ludHNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAobWFwc1tpXSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBwb3NlID0gY2xpcC50cmFja3NbbWFwc1tpXV07XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gTm90IHVwZGF0ZSBpZiB0aGVyZSBpcyBubyBkYXRhLlxyXG4gICAgICAgICAgICAgICAgLy8gUEVORElORyBJZiBzeW5jIHBvc2UucG9zaXRpb24sIHBvc2Uucm90YXRpb24sIHBvc2Uuc2NhbGVcclxuICAgICAgICAgICAgICAgIGlmIChwb3NlLmNoYW5uZWxzLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5jb3B5KGpvaW50Lm5vZGUucG9zaXRpb24uYXJyYXksIHBvc2UucG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBvc2UuY2hhbm5lbHMucm90YXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBxdWF0LmNvcHkoam9pbnQubm9kZS5yb3RhdGlvbi5hcnJheSwgcG9zZS5yb3RhdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocG9zZS5jaGFubmVscy5zY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuY29weShqb2ludC5ub2RlLnNjYWxlLmFycmF5LCBwb3NlLnNjYWxlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBqb2ludC5ub2RlLnBvc2l0aW9uLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBqb2ludC5ub2RlLnJvdGF0aW9uLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBqb2ludC5ub2RlLnNjYWxlLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoY2xvbmVkTm9kZXNNYXApIHtcclxuICAgICAgICB2YXIgc2tlbGV0b24gPSBuZXcgU2tlbGV0b24oKTtcclxuICAgICAgICBza2VsZXRvbi5uYW1lID0gdGhpcy5uYW1lO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuZXdKb2ludCA9IG5ldyBKb2ludCgpO1xyXG4gICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgbmV3Sm9pbnQubmFtZSA9IGpvaW50Lm5hbWU7XHJcbiAgICAgICAgICAgIG5ld0pvaW50LmluZGV4ID0gam9pbnQuaW5kZXg7XHJcblxyXG4gICAgICAgICAgICBpZiAoY2xvbmVkTm9kZXNNYXApIHtcclxuICAgICAgICAgICAgICAgIHZhciBuZXdOb2RlID0gY2xvbmVkTm9kZXNNYXBbam9pbnQubm9kZS5fX3VpZF9fXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIW5ld05vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdDYW5cXCd0IGZpbmQgbm9kZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG5ld0pvaW50Lm5vZGUgPSBuZXdOb2RlIHx8IGpvaW50Lm5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuZXdKb2ludC5ub2RlID0gam9pbnQubm9kZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2tlbGV0b24uam9pbnRzLnB1c2gobmV3Sm9pbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheSkge1xyXG4gICAgICAgICAgICB2YXIgbGVuID0gdGhpcy5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5Lmxlbmd0aDtcclxuICAgICAgICAgICAgc2tlbGV0b24uX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkobGVuKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgc2tlbGV0b24uX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheVtpXSA9IHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheVtpXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2tlbGV0b24uX3NraW5NYXRyaWNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheShsZW4pO1xyXG5cclxuICAgICAgICAgICAgc2tlbGV0b24udXBkYXRlTWF0cmljZXNTdWJBcnJheXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNrZWxldG9uLl9qb2ludHNCb3VuZGluZ0JveGUgPSAodGhpcy5fam9pbnRzQm91bmRpbmdCb3hlcyB8fCBbXSkubWFwKGZ1bmN0aW9uIChiYm94KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBiYm94LmNsb25lKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNrZWxldG9uLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gc2tlbGV0b247XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2tlbGV0b247XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LnV0aWwucmFuZFxcbmhpZ2hwIGZsb2F0IHJhbmQodmVjMiB1dikge1xcbiBjb25zdCBoaWdocCBmbG9hdCBhID0gMTIuOTg5OCwgYiA9IDc4LjIzMywgYyA9IDQzNzU4LjU0NTM7XFxuIGhpZ2hwIGZsb2F0IGR0ID0gZG90KHV2Lnh5LCB2ZWMyKGEsYikpLCBzbiA9IG1vZChkdCwgMy4xNDE1OTI2NTM1ODk3OTMpO1xcbiByZXR1cm4gZnJhY3Qoc2luKHNuKSAqIGMpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxudW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkZhY3RvciA6IDUuMDtcXG5mbG9hdCBsaWdodEF0dGVudWF0aW9uKGZsb2F0IGRpc3QsIGZsb2F0IHJhbmdlKVxcbntcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSAxLjA7XFxuIGF0dGVudWF0aW9uID0gZGlzdCpkaXN0LyhyYW5nZSpyYW5nZSsxLjApO1xcbiBmbG9hdCBhdHRfcyA9IGF0dGVudWF0aW9uRmFjdG9yO1xcbiBhdHRlbnVhdGlvbiA9IDEuMC8oYXR0ZW51YXRpb24qYXR0X3MrMS4wKTtcXG4gYXR0X3MgPSAxLjAvKGF0dF9zKzEuMCk7XFxuIGF0dGVudWF0aW9uID0gYXR0ZW51YXRpb24gLSBhdHRfcztcXG4gYXR0ZW51YXRpb24gLz0gMS4wIC0gYXR0X3M7XFxuIHJldHVybiBjbGFtcChhdHRlbnVhdGlvbiwgMC4wLCAxLjApO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG4jaWZkZWYgU1VQUE9SVF9TVEFOREFSRF9ERVJJVkFUSVZFU1xcbmZsb2F0IGVkZ2VGYWN0b3IoZmxvYXQgd2lkdGgpXFxue1xcbiB2ZWMzIGQgPSBmd2lkdGgodl9CYXJ5Y2VudHJpYyk7XFxuIHZlYzMgYTMgPSBzbW9vdGhzdGVwKHZlYzMoMC4wKSwgZCAqIHdpZHRoLCB2X0JhcnljZW50cmljKTtcXG4gcmV0dXJuIG1pbihtaW4oYTMueCwgYTMueSksIGEzLnopO1xcbn1cXG4jZWxzZVxcbmZsb2F0IGVkZ2VGYWN0b3IoZmxvYXQgd2lkdGgpXFxue1xcbiByZXR1cm4gMS4wO1xcbn1cXG4jZW5kaWZcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuZW5jb2RlX2Zsb2F0XFxudmVjNCBlbmNvZGVGbG9hdChjb25zdCBpbiBmbG9hdCBkZXB0aClcXG57XFxuIGNvbnN0IHZlYzQgYml0U2hpZnRzID0gdmVjNCgyNTYuMCoyNTYuMCoyNTYuMCwgMjU2LjAqMjU2LjAsIDI1Ni4wLCAxLjApO1xcbiBjb25zdCB2ZWM0IGJpdF9tYXNrID0gdmVjNCgwLjAsIDEuMC8yNTYuMCwgMS4wLzI1Ni4wLCAxLjAvMjU2LjApO1xcbiB2ZWM0IHJlcyA9IGZyYWN0KGRlcHRoICogYml0U2hpZnRzKTtcXG4gcmVzIC09IHJlcy54eHl6ICogYml0X21hc2s7XFxuIHJldHVybiByZXM7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG5mbG9hdCBkZWNvZGVGbG9hdChjb25zdCBpbiB2ZWM0IGNvbG9yKVxcbntcXG4gY29uc3QgdmVjNCBiaXRTaGlmdHMgPSB2ZWM0KDEuMC8oMjU2LjAqMjU2LjAqMjU2LjApLCAxLjAvKDI1Ni4wKjI1Ni4wKSwgMS4wLzI1Ni4wLCAxLjApO1xcbiByZXR1cm4gZG90KGNvbG9yLCBiaXRTaGlmdHMpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuZmxvYXRcXG5AaW1wb3J0IGNsYXkudXRpbC5lbmNvZGVfZmxvYXRcXG5AaW1wb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucmdibV9kZWNvZGVcXG52ZWMzIFJHQk1EZWNvZGUodmVjNCByZ2JtLCBmbG9hdCByYW5nZSkge1xcbiByZXR1cm4gcmFuZ2UgKiByZ2JtLnJnYiAqIHJnYm0uYTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS51dGlsLnJnYm1fZW5jb2RlXFxudmVjNCBSR0JNRW5jb2RlKHZlYzMgY29sb3IsIGZsb2F0IHJhbmdlKSB7XFxuIGlmIChkb3QoY29sb3IsIGNvbG9yKSA9PSAwLjApIHtcXG4gcmV0dXJuIHZlYzQoMC4wKTtcXG4gfVxcbiB2ZWM0IHJnYm07XFxuIGNvbG9yIC89IHJhbmdlO1xcbiByZ2JtLmEgPSBjbGFtcChtYXgobWF4KGNvbG9yLnIsIGNvbG9yLmcpLCBtYXgoY29sb3IuYiwgMWUtNikpLCAwLjAsIDEuMCk7XFxuIHJnYm0uYSA9IGNlaWwocmdibS5hICogMjU1LjApIC8gMjU1LjA7XFxuIHJnYm0ucmdiID0gY29sb3IgLyByZ2JtLmE7XFxuIHJldHVybiByZ2JtO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1fZGVjb2RlXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibV9lbmNvZGVcXG52ZWM0IGRlY29kZUhEUih2ZWM0IGNvbG9yKVxcbntcXG4jaWYgZGVmaW5lZChSR0JNX0RFQ09ERSkgfHwgZGVmaW5lZChSR0JNKVxcbiByZXR1cm4gdmVjNChSR0JNRGVjb2RlKGNvbG9yLCA4LjEyKSwgMS4wKTtcXG4jZWxzZVxcbiByZXR1cm4gY29sb3I7XFxuI2VuZGlmXFxufVxcbnZlYzQgZW5jb2RlSERSKHZlYzQgY29sb3IpXFxue1xcbiNpZiBkZWZpbmVkKFJHQk1fRU5DT0RFKSB8fCBkZWZpbmVkKFJHQk0pXFxuIHJldHVybiBSR0JNRW5jb2RlKGNvbG9yLnh5eiwgOC4xMik7XFxuI2Vsc2VcXG4gcmV0dXJuIGNvbG9yO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuc3JnYlxcbnZlYzQgc1JHQlRvTGluZWFyKGluIHZlYzQgdmFsdWUpIHtcXG4gcmV0dXJuIHZlYzQobWl4KHBvdyh2YWx1ZS5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKDAuMDUyMTMyNzAxNCksIHZlYzMoMi40KSksIHZhbHVlLnJnYiAqIDAuMDc3Mzk5MzgwOCwgdmVjMyhsZXNzVGhhbkVxdWFsKHZhbHVlLnJnYiwgdmVjMygwLjA0MDQ1KSkpKSwgdmFsdWUudyk7XFxufVxcbnZlYzQgbGluZWFyVG9zUkdCKGluIHZlYzQgdmFsdWUpIHtcXG4gcmV0dXJuIHZlYzQobWl4KHBvdyh2YWx1ZS5yZ2IsIHZlYzMoMC40MTY2NikpICogMS4wNTUgLSB2ZWMzKDAuMDU1KSwgdmFsdWUucmdiICogMTIuOTIsIHZlYzMobGVzc1RoYW5FcXVhbCh2YWx1ZS5yZ2IsIHZlYzMoMC4wMDMxMzA4KSkpKSwgdmFsdWUudyk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxuI2lmZGVmIFNLSU5OSU5HXFxuYXR0cmlidXRlIHZlYzMgd2VpZ2h0IDogV0VJR0hUO1xcbmF0dHJpYnV0ZSB2ZWM0IGpvaW50IDogSk9JTlQ7XFxuI2lmZGVmIFVTRV9TS0lOX01BVFJJQ0VTX1RFWFRVUkVcXG51bmlmb3JtIHNhbXBsZXIyRCBza2luTWF0cmljZXNUZXh0dXJlIDogaWdub3JlO1xcbnVuaWZvcm0gZmxvYXQgc2tpbk1hdHJpY2VzVGV4dHVyZVNpemU6IGlnbm9yZTtcXG5tYXQ0IGdldFNraW5NYXRyaXgoc2FtcGxlcjJEIHRleCwgZmxvYXQgaWR4KSB7XFxuIGZsb2F0IGogPSBpZHggKiA0LjA7XFxuIGZsb2F0IHggPSBtb2Qoaiwgc2tpbk1hdHJpY2VzVGV4dHVyZVNpemUpO1xcbiBmbG9hdCB5ID0gZmxvb3IoaiAvIHNraW5NYXRyaWNlc1RleHR1cmVTaXplKSArIDAuNTtcXG4gdmVjMiBzY2FsZSA9IHZlYzIoc2tpbk1hdHJpY2VzVGV4dHVyZVNpemUpO1xcbiByZXR1cm4gbWF0NChcXG4gdGV4dHVyZTJEKHRleCwgdmVjMih4ICsgMC41LCB5KSAvIHNjYWxlKSxcXG4gdGV4dHVyZTJEKHRleCwgdmVjMih4ICsgMS41LCB5KSAvIHNjYWxlKSxcXG4gdGV4dHVyZTJEKHRleCwgdmVjMih4ICsgMi41LCB5KSAvIHNjYWxlKSxcXG4gdGV4dHVyZTJEKHRleCwgdmVjMih4ICsgMy41LCB5KSAvIHNjYWxlKVxcbiApO1xcbn1cXG5tYXQ0IGdldFNraW5NYXRyaXgoZmxvYXQgaWR4KSB7XFxuIHJldHVybiBnZXRTa2luTWF0cml4KHNraW5NYXRyaWNlc1RleHR1cmUsIGlkeCk7XFxufVxcbiNlbHNlXFxudW5pZm9ybSBtYXQ0IHNraW5NYXRyaXhbSk9JTlRfQ09VTlRdIDogU0tJTl9NQVRSSVg7XFxubWF0NCBnZXRTa2luTWF0cml4KGZsb2F0IGlkeCkge1xcbiByZXR1cm4gc2tpbk1hdHJpeFtpbnQoaWR4KV07XFxufVxcbiNlbmRpZlxcbiNlbmRpZlxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG5tYXQ0IHNraW5NYXRyaXhXUyA9IGdldFNraW5NYXRyaXgoam9pbnQueCkgKiB3ZWlnaHQueDtcXG5pZiAod2VpZ2h0LnkgPiAxZS00KVxcbntcXG4gc2tpbk1hdHJpeFdTICs9IGdldFNraW5NYXRyaXgoam9pbnQueSkgKiB3ZWlnaHQueTtcXG59XFxuaWYgKHdlaWdodC56ID4gMWUtNClcXG57XFxuIHNraW5NYXRyaXhXUyArPSBnZXRTa2luTWF0cml4KGpvaW50LnopICogd2VpZ2h0Lno7XFxufVxcbmZsb2F0IHdlaWdodFcgPSAxLjAtd2VpZ2h0Lngtd2VpZ2h0Lnktd2VpZ2h0Lno7XFxuaWYgKHdlaWdodFcgPiAxZS00KVxcbntcXG4gc2tpbk1hdHJpeFdTICs9IGdldFNraW5NYXRyaXgoam9pbnQudykgKiB3ZWlnaHRXO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucGFyYWxsYXhfY29ycmVjdFxcbnZlYzMgcGFyYWxsYXhDb3JyZWN0KGluIHZlYzMgZGlyLCBpbiB2ZWMzIHBvcywgaW4gdmVjMyBib3hNaW4sIGluIHZlYzMgYm94TWF4KSB7XFxuIHZlYzMgZmlyc3QgPSAoYm94TWF4IC0gcG9zKSAvIGRpcjtcXG4gdmVjMyBzZWNvbmQgPSAoYm94TWluIC0gcG9zKSAvIGRpcjtcXG4gdmVjMyBmdXJ0aGVyID0gbWF4KGZpcnN0LCBzZWNvbmQpO1xcbiBmbG9hdCBkaXN0ID0gbWluKGZ1cnRoZXIueCwgbWluKGZ1cnRoZXIueSwgZnVydGhlci56KSk7XFxuIHZlYzMgZml4ZWRQb3MgPSBwb3MgKyBkaXIgKiBkaXN0O1xcbiB2ZWMzIGJveENlbnRlciA9IChib3hNYXggKyBib3hNaW4pICogMC41O1xcbiByZXR1cm4gbm9ybWFsaXplKGZpeGVkUG9zIC0gYm94Q2VudGVyKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZlYzQgY2xhbXBTYW1wbGUoY29uc3QgaW4gc2FtcGxlcjJEIHRleHR1cmUsIGNvbnN0IGluIHZlYzIgY29vcmQpXFxue1xcbiNpZmRlZiBTVEVSRU9cXG4gZmxvYXQgZXllID0gc3RlcCgwLjUsIGNvb3JkLngpICogMC41O1xcbiB2ZWMyIGNvb3JkQ2xhbXBlZCA9IGNsYW1wKGNvb3JkLCB2ZWMyKGV5ZSwgMC4wKSwgdmVjMigwLjUgKyBleWUsIDEuMCkpO1xcbiNlbHNlXFxuIHZlYzIgY29vcmRDbGFtcGVkID0gY2xhbXAoY29vcmQsIHZlYzIoMC4wKSwgdmVjMigxLjApKTtcXG4jZW5kaWZcXG4gcmV0dXJuIHRleHR1cmUyRCh0ZXh0dXJlLCBjb29yZENsYW1wZWQpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuQUNFU1xcbnZlYzMgQUNFU1RvbmVNYXBwaW5nKHZlYzMgY29sb3IpXFxue1xcbiBjb25zdCBmbG9hdCBBID0gMi41MTtcXG4gY29uc3QgZmxvYXQgQiA9IDAuMDM7XFxuIGNvbnN0IGZsb2F0IEMgPSAyLjQzO1xcbiBjb25zdCBmbG9hdCBEID0gMC41OTtcXG4gY29uc3QgZmxvYXQgRSA9IDAuMTQ7XFxuIHJldHVybiAoY29sb3IgKiAoQSAqIGNvbG9yICsgQikpIC8gKGNvbG9yICogKEMgKiBjb2xvciArIEQpICsgRSk7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuYmFzaWMudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA6IFsxLjAsIDEuMF07XFxudW5pZm9ybSB2ZWMyIHV2T2Zmc2V0IDogWzAuMCwgMC4wXTtcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZCA6IFRFWENPT1JEXzA7XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBiYXJ5Y2VudHJpYztcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbmF0dHJpYnV0ZSB2ZWM0IGFfQ29sb3IgOiBDT0xPUjtcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuI2VuZGlmXFxuIHZfVGV4Y29vcmQgPSB0ZXhjb29yZCAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxuIHZfQmFyeWNlbnRyaWMgPSBiYXJ5Y2VudHJpYztcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbiB2X0NvbG9yID0gYV9Db2xvcjtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5iYXNpYy5mcmFnbWVudFxcbiNkZWZpbmUgRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGRpZmZ1c2VNYXA7XFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzEuMCwgMS4wLCAxLjBdO1xcbnVuaWZvcm0gdmVjMyBlbWlzc2lvbiA6IFswLjAsIDAuMCwgMC4wXTtcXG51bmlmb3JtIGZsb2F0IGFscGhhIDogMS4wO1xcbiNpZmRlZiBBTFBIQV9URVNUXFxudW5pZm9ybSBmbG9hdCBhbHBoYUN1dG9mZjogMC45O1xcbiNlbmRpZlxcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aCA6IDAuMDtcXG51bmlmb3JtIHZlYzQgbGluZUNvbG9yIDogWzAuMCwgMC4wLCAwLjAsIDAuNl07XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuQGltcG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwuc3JnYlxcbkBpbXBvcnQgY2xheS51dGlsLkFDRVNcXG52b2lkIG1haW4oKVxcbntcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgYWxwaGEpO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gZ2xfRnJhZ0NvbG9yICo9IHZfQ29sb3I7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIGdsX0ZyYWdDb2xvciA9IHNSR0JUb0xpbmVhcihnbF9GcmFnQ29sb3IpO1xcbiNlbmRpZlxcbiNpZmRlZiBESUZGVVNFTUFQX0VOQUJMRURcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlMkQoZGlmZnVzZU1hcCwgdl9UZXhjb29yZCkpO1xcbiNpZmRlZiBTUkdCX0RFQ09ERVxcbiB0ZXhlbCA9IHNSR0JUb0xpbmVhcih0ZXhlbCk7XFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoRElGRlVTRU1BUF9BTFBIQV9BTFBIQSlcXG4gZ2xfRnJhZ0NvbG9yLmEgPSB0ZXhlbC5hO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IucmdiICo9IHRleGVsLnJnYjtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yLnJnYiArPSBlbWlzc2lvbjtcXG4gaWYoIGxpbmVXaWR0aCA+IDAuKVxcbiB7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoZ2xfRnJhZ0NvbG9yLnJnYiwgbGluZUNvbG9yLnJnYiwgKDEuMCAtIGVkZ2VGYWN0b3IobGluZVdpZHRoKSkgKiBsaW5lQ29sb3IuYSk7XFxuIH1cXG4jaWZkZWYgQUxQSEFfVEVTVFxcbiBpZiAoZ2xfRnJhZ0NvbG9yLmEgPCBhbHBoYUN1dG9mZikge1xcbiBkaXNjYXJkO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIFRPTkVNQVBQSU5HXFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBBQ0VTVG9uZU1hcHBpbmcoZ2xfRnJhZ0NvbG9yLnJnYik7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfRU5DT0RFXFxuIGdsX0ZyYWdDb2xvciA9IGxpbmVhclRvc1JHQihnbF9GcmFnQ29sb3IpO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoZ2xfRnJhZ0NvbG9yKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5sYW1iZXJ0LnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG51bmlmb3JtIG1hdDQgd29ybGRJbnZlcnNlVHJhbnNwb3NlIDogV09STERJTlZFUlNFVFJBTlNQT1NFO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA6IFsxLjAsIDEuMF07XFxudW5pZm9ybSB2ZWMyIHV2T2Zmc2V0IDogWzAuMCwgMC4wXTtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkIDogVEVYQ09PUkRfMDtcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XFxuYXR0cmlidXRlIHZlYzMgYmFyeWNlbnRyaWM7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbmF0dHJpYnV0ZSB2ZWM0IGFfQ29sb3IgOiBDT0xPUjtcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudmFyeWluZyB2ZWMzIHZfTm9ybWFsO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuIHZlYzMgc2tpbm5lZE5vcm1hbCA9IG5vcm1hbDtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuIHNraW5uZWROb3JtYWwgPSAoc2tpbk1hdHJpeFdTICogdmVjNChub3JtYWwsIDAuMCkpLnh5ejtcXG4jZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNCggc2tpbm5lZFBvc2l0aW9uLCAxLjAgKTtcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkICogdXZSZXBlYXQgKyB1dk9mZnNldDtcXG4gdl9Ob3JtYWwgPSBub3JtYWxpemUoICggd29ybGRJbnZlcnNlVHJhbnNwb3NlICogdmVjNChza2lubmVkTm9ybWFsLCAwLjApICkueHl6ICk7XFxuIHZfV29ybGRQb3NpdGlvbiA9ICggd29ybGQgKiB2ZWM0KCBza2lubmVkUG9zaXRpb24sIDEuMCkgKS54eXo7XFxuIHZfQmFyeWNlbnRyaWMgPSBiYXJ5Y2VudHJpYztcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuIHZfQ29sb3IgPSBhX0NvbG9yO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmxhbWJlcnQuZnJhZ21lbnRcXG4jZGVmaW5lIERJRkZVU0VNQVBfQUxQSEFfQUxQSEFcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Ob3JtYWw7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlTWFwO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xcbnVuaWZvcm0gdmVjMyBjb2xvciA6IFsxLjAsIDEuMCwgMS4wXTtcXG51bmlmb3JtIHZlYzMgZW1pc3Npb24gOiBbMC4wLCAwLjAsIDAuMF07XFxudW5pZm9ybSBmbG9hdCBhbHBoYSA6IDEuMDtcXG4jaWZkZWYgQUxQSEFfVEVTVFxcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuOTtcXG4jZW5kaWZcXG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aCA6IDAuMDtcXG51bmlmb3JtIHZlYzQgbGluZUNvbG9yIDogWzAuMCwgMC4wLCAwLjAsIDAuNl07XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbnZhcnlpbmcgdmVjNCB2X0NvbG9yO1xcbiNlbmRpZlxcbiNpZmRlZiBBTUJJRU5UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5hbWJpZW50X2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfU0hfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLmFtYmllbnRfc2hfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgUE9JTlRfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLnBvaW50X2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIERJUkVDVElPTkFMX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5kaXJlY3Rpb25hbF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBTUE9UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5zcG90X2xpZ2h0XFxuI2VuZGlmXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnBsdWdpbi5jb21wdXRlX3NoYWRvd19tYXBcXG5AaW1wb3J0IGNsYXkudXRpbC5BQ0VTXFxudm9pZCBtYWluKClcXG57XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIGFscGhhKTtcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuIGdsX0ZyYWdDb2xvciAqPSB2X0NvbG9yO1xcbiNlbmRpZlxcbiNpZmRlZiBTUkdCX0RFQ09ERVxcbiBnbF9GcmFnQ29sb3IgPSBzUkdCVG9MaW5lYXIoZ2xfRnJhZ0NvbG9yKTtcXG4jZW5kaWZcXG4jaWZkZWYgRElGRlVTRU1BUF9FTkFCTEVEXFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCBkaWZmdXNlTWFwLCB2X1RleGNvb3JkICk7XFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIHRleC5yZ2IgPSBwb3codGV4LnJnYiwgdmVjMygyLjIpKTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yLnJnYiAqPSB0ZXgucmdiO1xcbiNpZmRlZiBESUZGVVNFTUFQX0FMUEhBX0FMUEhBXFxuIGdsX0ZyYWdDb2xvci5hICo9IHRleC5hO1xcbiNlbmRpZlxcbiNlbmRpZlxcbiB2ZWMzIGRpZmZ1c2VDb2xvciA9IHZlYzMoMC4wLCAwLjAsIDAuMCk7XFxuI2lmZGVmIEFNQklFTlRfTElHSFRfQ09VTlRcXG4gZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgQU1CSUVOVF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge1xcbiBkaWZmdXNlQ29sb3IgKz0gYW1iaWVudExpZ2h0Q29sb3JbX2lkeF9dO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfU0hfTElHSFRfQ09VTlRcXG4gZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge3tcXG4gZGlmZnVzZUNvbG9yICs9IGNhbGNBbWJpZW50U0hMaWdodChfaWR4Xywgdl9Ob3JtYWwpICogYW1iaWVudFNITGlnaHRDb2xvcltfaWR4X107XFxuIH19XFxuI2VuZGlmXFxuI2lmZGVmIFBPSU5UX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBmbG9hdCBzaGFkb3dDb250cmlic1BvaW50W1BPSU5UX0xJR0hUX0NPVU5UXTtcXG4gaWYoIHNoYWRvd0VuYWJsZWQgKVxcbiB7XFxuIGNvbXB1dGVTaGFkb3dPZlBvaW50TGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNQb2ludCk7XFxuIH1cXG4jZW5kaWZcXG4gZm9yKGludCBpID0gMDsgaSA8IFBPSU5UX0xJR0hUX0NPVU5UOyBpKyspXFxuIHtcXG4gdmVjMyBsaWdodFBvc2l0aW9uID0gcG9pbnRMaWdodFBvc2l0aW9uW2ldO1xcbiB2ZWMzIGxpZ2h0Q29sb3IgPSBwb2ludExpZ2h0Q29sb3JbaV07XFxuIGZsb2F0IHJhbmdlID0gcG9pbnRMaWdodFJhbmdlW2ldO1xcbiB2ZWMzIGxpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIHZfV29ybGRQb3NpdGlvbjtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChsaWdodERpcmVjdGlvbik7XFxuIGZsb2F0IGF0dGVudWF0aW9uID0gbGlnaHRBdHRlbnVhdGlvbihkaXN0LCByYW5nZSk7XFxuIGxpZ2h0RGlyZWN0aW9uIC89IGRpc3Q7XFxuIGZsb2F0IG5kbCA9IGRvdCggdl9Ob3JtYWwsIGxpZ2h0RGlyZWN0aW9uICk7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZiggc2hhZG93RW5hYmxlZCApXFxuIHtcXG4gc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzUG9pbnRbaV07XFxuIH1cXG4jZW5kaWZcXG4gZGlmZnVzZUNvbG9yICs9IGxpZ2h0Q29sb3IgKiBjbGFtcChuZGwsIDAuMCwgMS4wKSAqIGF0dGVudWF0aW9uICogc2hhZG93Q29udHJpYjtcXG4gfVxcbiNlbmRpZlxcbiNpZmRlZiBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVFxcbiNpZiBkZWZpbmVkKERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gZmxvYXQgc2hhZG93Q29udHJpYnNEaXJbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdO1xcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIGNvbXB1dGVTaGFkb3dPZkRpcmVjdGlvbmFsTGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNEaXIpO1xcbiB9XFxuI2VuZGlmXFxuIGZvcihpbnQgaSA9IDA7IGkgPCBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVDsgaSsrKVxcbiB7XFxuIHZlYzMgbGlnaHREaXJlY3Rpb24gPSAtZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbltpXTtcXG4gdmVjMyBsaWdodENvbG9yID0gZGlyZWN0aW9uYWxMaWdodENvbG9yW2ldO1xcbiBmbG9hdCBuZGwgPSBkb3Qodl9Ob3JtYWwsIG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbikpO1xcbiBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiNpZiBkZWZpbmVkKERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gaWYoIHNoYWRvd0VuYWJsZWQgKVxcbiB7XFxuIHNoYWRvd0NvbnRyaWIgPSBzaGFkb3dDb250cmlic0RpcltpXTtcXG4gfVxcbiNlbmRpZlxcbiBkaWZmdXNlQ29sb3IgKz0gbGlnaHRDb2xvciAqIGNsYW1wKG5kbCwgMC4wLCAxLjApICogc2hhZG93Q29udHJpYjtcXG4gfVxcbiNlbmRpZlxcbiNpZmRlZiBTUE9UX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWJzU3BvdFtTUE9UX0xJR0hUX0NPVU5UXTtcXG4gaWYoc2hhZG93RW5hYmxlZClcXG4ge1xcbiBjb21wdXRlU2hhZG93T2ZTcG90TGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNTcG90KTtcXG4gfVxcbiNlbmRpZlxcbiBmb3IoaW50IGkgPSAwOyBpIDwgU1BPVF9MSUdIVF9DT1VOVDsgaSsrKVxcbiB7XFxuIHZlYzMgbGlnaHRQb3NpdGlvbiA9IC1zcG90TGlnaHRQb3NpdGlvbltpXTtcXG4gdmVjMyBzcG90TGlnaHREaXJlY3Rpb24gPSAtbm9ybWFsaXplKCBzcG90TGlnaHREaXJlY3Rpb25baV0gKTtcXG4gdmVjMyBsaWdodENvbG9yID0gc3BvdExpZ2h0Q29sb3JbaV07XFxuIGZsb2F0IHJhbmdlID0gc3BvdExpZ2h0UmFuZ2VbaV07XFxuIGZsb2F0IGEgPSBzcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lW2ldO1xcbiBmbG9hdCBiID0gc3BvdExpZ2h0UGVudW1icmFBbmdsZUNvc2luZVtpXTtcXG4gZmxvYXQgZmFsbG9mZkZhY3RvciA9IHNwb3RMaWdodEZhbGxvZmZGYWN0b3JbaV07XFxuIHZlYzMgbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKGxpZ2h0RGlyZWN0aW9uKTtcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIHJhbmdlKTtcXG4gbGlnaHREaXJlY3Rpb24gLz0gZGlzdDtcXG4gZmxvYXQgYyA9IGRvdChzcG90TGlnaHREaXJlY3Rpb24sIGxpZ2h0RGlyZWN0aW9uKTtcXG4gZmxvYXQgZmFsbG9mZjtcXG4gZmFsbG9mZiA9IGNsYW1wKChjIC0gYSkgLyggYiAtIGEpLCAwLjAsIDEuMCk7XFxuIGZhbGxvZmYgPSBwb3coZmFsbG9mZiwgZmFsbG9mZkZhY3Rvcik7XFxuIGZsb2F0IG5kbCA9IGRvdCh2X05vcm1hbCwgbGlnaHREaXJlY3Rpb24pO1xcbiBuZGwgPSBjbGFtcChuZGwsIDAuMCwgMS4wKTtcXG4gZmxvYXQgc2hhZG93Q29udHJpYiA9IDEuMDtcXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gaWYoIHNoYWRvd0VuYWJsZWQgKVxcbiB7XFxuIHNoYWRvd0NvbnRyaWIgPSBzaGFkb3dDb250cmlic1Nwb3RbaV07XFxuIH1cXG4jZW5kaWZcXG4gZGlmZnVzZUNvbG9yICs9IGxpZ2h0Q29sb3IgKiBuZGwgKiBhdHRlbnVhdGlvbiAqICgxLjAtZmFsbG9mZikgKiBzaGFkb3dDb250cmliO1xcbiB9XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gZGlmZnVzZUNvbG9yO1xcbiBnbF9GcmFnQ29sb3IucmdiICs9IGVtaXNzaW9uO1xcbiBpZihsaW5lV2lkdGggPiAwLilcXG4ge1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIGxpbmVDb2xvci5yZ2IsICgxLjAgLSBlZGdlRmFjdG9yKGxpbmVXaWR0aCkpICogbGluZUNvbG9yLmEpO1xcbiB9XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG4gaWYgKGdsX0ZyYWdDb2xvci5hIDwgYWxwaGFDdXRvZmYpIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiNlbmRpZlxcbiNpZmRlZiBUT05FTUFQUElOR1xcbiBnbF9GcmFnQ29sb3IucmdiID0gQUNFU1RvbmVNYXBwaW5nKGdsX0ZyYWdDb2xvci5yZ2IpO1xcbiNlbmRpZlxcbiNpZmRlZiBTUkdCX0VOQ09ERVxcbiBnbF9GcmFnQ29sb3IgPSBsaW5lYXJUb3NSR0IoZ2xfRnJhZ0NvbG9yKTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGdsX0ZyYWdDb2xvcik7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkud2lyZWZyYW1lLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG51bmlmb3JtIG1hdDQgd29ybGQgOiBXT1JMRDtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIGJhcnljZW50cmljO1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuI2VuZGlmXFxuIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjAgKTtcXG4gdl9CYXJ5Y2VudHJpYyA9IGJhcnljZW50cmljO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LndpcmVmcmFtZS5mcmFnbWVudFxcbnVuaWZvcm0gdmVjMyBjb2xvciA6IFswLjAsIDAuMCwgMC4wXTtcXG51bmlmb3JtIGZsb2F0IGFscGhhIDogMS4wO1xcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoIDogMS4wO1xcbnZhcnlpbmcgdmVjMyB2X0JhcnljZW50cmljO1xcbkBpbXBvcnQgY2xheS51dGlsLmVkZ2VfZmFjdG9yXFxudm9pZCBtYWluKClcXG57XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBjb2xvcjtcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAoMS4wLWVkZ2VGYWN0b3IobGluZVdpZHRoKSkgKiBhbHBoYTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5za3lib3gudmVydGV4XFxuI2RlZmluZSBTSEFERVJfTkFNRSBza3lib3hcXG51bmlmb3JtIG1hdDQgd29ybGQgOiBXT1JMRDtcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2X1dvcmxkUG9zaXRpb24gPSAod29ybGQgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc2t5Ym94LmZyYWdtZW50XFxuI2RlZmluZSBQSSAzLjE0MTU5MjZcXG51bmlmb3JtIG1hdDQgdmlld0ludmVyc2UgOiBWSUVXSU5WRVJTRTtcXG4jaWZkZWYgRVFVSVJFQ1RBTkdVTEFSXFxudW5pZm9ybSBzYW1wbGVyMkQgZW52aXJvbm1lbnRNYXA7XFxuI2Vsc2VcXG51bmlmb3JtIHNhbXBsZXJDdWJlIGVudmlyb25tZW50TWFwO1xcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgbG9kOiAwLjA7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwuc3JnYlxcbkBpbXBvcnQgY2xheS51dGlsLkFDRVNcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBleWVQb3MgPSB2aWV3SW52ZXJzZVszXS54eXo7XFxuIHZlYzMgViA9IG5vcm1hbGl6ZSh2X1dvcmxkUG9zaXRpb24gLSBleWVQb3MpO1xcbiNpZmRlZiBFUVVJUkVDVEFOR1VMQVJcXG4gZmxvYXQgcGhpID0gYWNvcyhWLnkpO1xcbiBmbG9hdCB0aGV0YSA9IGF0YW4oLVYueCwgVi56KSArIFBJICogMC41O1xcbiB2ZWMyIHV2ID0gdmVjMih0aGV0YSAvIDIuMCAvIFBJLCBwaGkgLyBQSSk7XFxuIHZlYzQgdGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZTJEKGVudmlyb25tZW50TWFwLCBmcmFjdCh1dikpKTtcXG4jZWxzZVxcbiAjaWYgZGVmaW5lZChMT0QpIHx8IGRlZmluZWQoU1VQUE9SVF9URVhUVVJFX0xPRClcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZUxvZEVYVChlbnZpcm9ubWVudE1hcCwgViwgbG9kKSk7XFxuICNlbHNlXFxuIHZlYzQgdGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZUN1YmUoZW52aXJvbm1lbnRNYXAsIFYpKTtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIHRleGVsID0gc1JHQlRvTGluZWFyKHRleGVsKTtcXG4jZW5kaWZcXG4jaWZkZWYgVE9ORU1BUFBJTkdcXG4gdGV4ZWwucmdiID0gQUNFU1RvbmVNYXBwaW5nKHRleGVsLnJnYik7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfRU5DT0RFXFxuIHRleGVsID0gbGluZWFyVG9zUkdCKHRleGVsKTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHZlYzQodGV4ZWwucmdiLCAxLjApKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJpbXBvcnQgbGlnaHRFc3NsIGZyb20gJy4vc291cmNlL2hlYWRlci9saWdodCc7XHJcbmltcG9ydCB1dGlsRXNzbCBmcm9tICcuL3NvdXJjZS91dGlsLmdsc2wuanMnO1xyXG5cclxuaW1wb3J0IGJhc2ljRXNzbCBmcm9tICcuL3NvdXJjZS9iYXNpYy5nbHNsLmpzJztcclxuaW1wb3J0IGxhbWJlcnRFc3NsIGZyb20gJy4vc291cmNlL2xhbWJlcnQuZ2xzbC5qcyc7XHJcbmltcG9ydCBzdGFuZGFyZEVzc2wgZnJvbSAnLi9zb3VyY2Uvc3RhbmRhcmQuZ2xzbC5qcyc7XHJcbmltcG9ydCB3aXJlZnJhbWVFc3NsIGZyb20gJy4vc291cmNlL3dpcmVmcmFtZS5nbHNsLmpzJztcclxuaW1wb3J0IHNreWJveEVzc2wgZnJvbSAnLi9zb3VyY2Uvc2t5Ym94Lmdsc2wuanMnO1xyXG5pbXBvcnQgcHJlekVzc2wgZnJvbSAnLi9zb3VyY2UvcHJlei5nbHNsLmpzJztcclxuXHJcbmltcG9ydCBsaWJyYXJ5IGZyb20gJy4vbGlicmFyeSc7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuXHJcblxyXG5TaGFkZXJbJ2ltcG9ydCddKGxpZ2h0RXNzbCk7XHJcblNoYWRlclsnaW1wb3J0J10odXRpbEVzc2wpO1xyXG5cclxuLy8gU29tZSBidWlsZCBpbiBzaGFkZXJzXHJcblNoYWRlclsnaW1wb3J0J10oYmFzaWNFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXShsYW1iZXJ0RXNzbCk7XHJcblNoYWRlclsnaW1wb3J0J10oc3RhbmRhcmRFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXSh3aXJlZnJhbWVFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXShza3lib3hFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXShwcmV6RXNzbCk7XHJcblxyXG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LmJhc2ljJywgU2hhZGVyLnNvdXJjZSgnY2xheS5iYXNpYy52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5iYXNpYy5mcmFnbWVudCcpKTtcclxubGlicmFyeS50ZW1wbGF0ZSgnY2xheS5sYW1iZXJ0JywgU2hhZGVyLnNvdXJjZSgnY2xheS5sYW1iZXJ0LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LmxhbWJlcnQuZnJhZ21lbnQnKSk7XHJcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkud2lyZWZyYW1lJywgU2hhZGVyLnNvdXJjZSgnY2xheS53aXJlZnJhbWUudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkud2lyZWZyYW1lLmZyYWdtZW50JykpO1xyXG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LnNreWJveCcsIFNoYWRlci5zb3VyY2UoJ2NsYXkuc2t5Ym94LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnNreWJveC5mcmFnbWVudCcpKTtcclxubGlicmFyeS50ZW1wbGF0ZSgnY2xheS5wcmV6JywgU2hhZGVyLnNvdXJjZSgnY2xheS5wcmV6LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnByZXouZnJhZ21lbnQnKSk7XHJcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuc3RhbmRhcmQnLCBTaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkLnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkLmZyYWdtZW50JykpO1xyXG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LnN0YW5kYXJkTVInLCBTaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkTVIudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmRNUi5mcmFnbWVudCcpKTtcclxuXHJcbi8vIFRPRE8gTXVzdCBleHBvcnQgYSBtb2R1bGUgYW5kIGJlIHVzZWQgaW4gdGhlIG90aGVyIG1vZHVsZXMuIE9yIGl0IHdpbGwgYmUgdHJlZSBzaGFrZWRcclxuZXhwb3J0IGRlZmF1bHQgbGlicmFyeTsiLCIvKipcclxuICogZ2xURiBMb2FkZXJcclxuICogU3BlY2lmaWNhdGlvbiBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvYmxvYi9tYXN0ZXIvc3BlY2lmaWNhdGlvbi9SRUFETUUubWRcclxuICpcclxuICogVE9ETyBNb3JwaCB0YXJnZXRzXHJcbiAqL1xyXG5pbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuXHJcbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBTdGFuZGFyZE1hdGVyaWFsIGZyb20gJy4uL1N0YW5kYXJkTWF0ZXJpYWwnO1xyXG5pbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcclxuaW1wb3J0IE5vZGUgZnJvbSAnLi4vTm9kZSc7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBzaGFkZXJMaWJyYXJ5IGZyb20gJy4uL3NoYWRlci9saWJyYXJ5JztcclxuaW1wb3J0IFNrZWxldG9uIGZyb20gJy4uL1NrZWxldG9uJztcclxuaW1wb3J0IEpvaW50IGZyb20gJy4uL0pvaW50JztcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcbmltcG9ydCBPcnRob2dyYXBoaWNDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL09ydGhvZ3JhcGhpYyc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi4vY29yZS9nbGVudW0nO1xyXG5cclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5cclxuaW1wb3J0IFRyYWNrQ2xpcCBmcm9tICcuLi9hbmltYXRpb24vVHJhY2tDbGlwJztcclxuaW1wb3J0IFNhbXBsZXJUcmFjayBmcm9tICcuLi9hbmltYXRpb24vU2FtcGxlclRyYWNrJztcclxuXHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcblxyXG4vLyBJbXBvcnQgYnVpbHRpbiBzaGFkZXJcclxuaW1wb3J0ICcuLi9zaGFkZXIvYnVpbHRpbic7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuXHJcbnZhciBzZW1hbnRpY0F0dHJpYnV0ZU1hcCA9IHtcclxuICAgICdOT1JNQUwnOiAnbm9ybWFsJyxcclxuICAgICdQT1NJVElPTic6ICdwb3NpdGlvbicsXHJcbiAgICAnVEVYQ09PUkRfMCc6ICd0ZXhjb29yZDAnLFxyXG4gICAgJ1RFWENPT1JEXzEnOiAndGV4Y29vcmQxJyxcclxuICAgICdXRUlHSFRTXzAnOiAnd2VpZ2h0JyxcclxuICAgICdKT0lOVFNfMCc6ICdqb2ludCcsXHJcbiAgICAnQ09MT1JfMCc6ICdjb2xvcidcclxufTtcclxuXHJcbnZhciBBUlJBWV9DVE9SX01BUCA9IHtcclxuICAgIDUxMjA6IHZlbmRvci5JbnQ4QXJyYXksXHJcbiAgICA1MTIxOiB2ZW5kb3IuVWludDhBcnJheSxcclxuICAgIDUxMjI6IHZlbmRvci5JbnQxNkFycmF5LFxyXG4gICAgNTEyMzogdmVuZG9yLlVpbnQxNkFycmF5LFxyXG4gICAgNTEyNTogdmVuZG9yLlVpbnQzMkFycmF5LFxyXG4gICAgNTEyNjogdmVuZG9yLkZsb2F0MzJBcnJheVxyXG59O1xyXG52YXIgU0laRV9NQVAgPSB7XHJcbiAgICBTQ0FMQVI6IDEsXHJcbiAgICBWRUMyOiAyLFxyXG4gICAgVkVDMzogMyxcclxuICAgIFZFQzQ6IDQsXHJcbiAgICBNQVQyOiA0LFxyXG4gICAgTUFUMzogOSxcclxuICAgIE1BVDQ6IDE2XHJcbn07XHJcblxyXG5mdW5jdGlvbiBnZXRBY2Nlc3NvckRhdGEoanNvbiwgbGliLCBhY2Nlc3NvcklkeCwgaXNJbmRpY2VzKSB7XHJcbiAgICB2YXIgYWNjZXNzb3JJbmZvID0ganNvbi5hY2Nlc3NvcnNbYWNjZXNzb3JJZHhdO1xyXG5cclxuICAgIHZhciBidWZmZXIgPSBsaWIuYnVmZmVyVmlld3NbYWNjZXNzb3JJbmZvLmJ1ZmZlclZpZXddO1xyXG4gICAgdmFyIGJ5dGVPZmZzZXQgPSBhY2Nlc3NvckluZm8uYnl0ZU9mZnNldCB8fCAwO1xyXG4gICAgdmFyIEFycmF5Q3RvciA9IEFSUkFZX0NUT1JfTUFQW2FjY2Vzc29ySW5mby5jb21wb25lbnRUeXBlXSB8fCB2ZW5kb3IuRmxvYXQzMkFycmF5O1xyXG5cclxuICAgIHZhciBzaXplID0gU0laRV9NQVBbYWNjZXNzb3JJbmZvLnR5cGVdO1xyXG4gICAgaWYgKHNpemUgPT0gbnVsbCAmJiBpc0luZGljZXMpIHtcclxuICAgICAgICBzaXplID0gMTtcclxuICAgIH1cclxuICAgIHZhciBhcnIgPSBuZXcgQXJyYXlDdG9yKGJ1ZmZlciwgYnl0ZU9mZnNldCwgc2l6ZSAqIGFjY2Vzc29ySW5mby5jb3VudCk7XHJcblxyXG4gICAgdmFyIHF1YW50aXplRXh0ZW5zaW9uID0gYWNjZXNzb3JJbmZvLmV4dGVuc2lvbnMgJiYgYWNjZXNzb3JJbmZvLmV4dGVuc2lvbnNbJ1dFQjNEX3F1YW50aXplZF9hdHRyaWJ1dGVzJ107XHJcbiAgICBpZiAocXVhbnRpemVFeHRlbnNpb24pIHtcclxuICAgICAgICB2YXIgZGVjb2RlZEFyciA9IG5ldyB2ZW5kb3IuRmxvYXQzMkFycmF5KHNpemUgKiBhY2Nlc3NvckluZm8uY291bnQpO1xyXG4gICAgICAgIHZhciBkZWNvZGVNYXRyaXggPSBxdWFudGl6ZUV4dGVuc2lvbi5kZWNvZGVNYXRyaXg7XHJcbiAgICAgICAgdmFyIGRlY29kZU9mZnNldDtcclxuICAgICAgICB2YXIgZGVjb2RlU2NhbGU7XHJcbiAgICAgICAgdmFyIGRlY29kZU9mZnNldCA9IG5ldyBBcnJheShzaXplKTtcclxuICAgICAgICB2YXIgZGVjb2RlU2NhbGUgPSBuZXcgQXJyYXkoc2l6ZSk7XHJcbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzaXplOyBrKyspIHtcclxuICAgICAgICAgICAgZGVjb2RlT2Zmc2V0W2tdID0gZGVjb2RlTWF0cml4W3NpemUgKiAoc2l6ZSArIDEpICsga107XHJcbiAgICAgICAgICAgIGRlY29kZVNjYWxlW2tdID0gZGVjb2RlTWF0cml4W2sgKiAoc2l6ZSArIDEpICsga107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWNjZXNzb3JJbmZvLmNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzaXplOyBrKyspIHtcclxuICAgICAgICAgICAgICAgIGRlY29kZWRBcnJbaSAqIHNpemUgKyBrXSA9IGFycltpICogc2l6ZSArIGtdICogZGVjb2RlU2NhbGVba10gKyBkZWNvZGVPZmZzZXRba107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFyciA9IGRlY29kZWRBcnI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBiYXNlNjRUb0JpbmFyeShpbnB1dCwgY2hhclN0YXJ0KSB7XHJcbiAgICB2YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XHJcbiAgICB2YXIgbG9va3VwID0gbmV3IFVpbnQ4QXJyYXkoMTMwKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsb29rdXBbY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpO1xyXG4gICAgfVxyXG4gICAgLy8gSWdub3JlXHJcbiAgICB2YXIgbGVuID0gaW5wdXQubGVuZ3RoIC0gY2hhclN0YXJ0O1xyXG4gICAgaWYgKGlucHV0LmNoYXJBdChsZW4gLSAxKSA9PT0gJz0nKSB7IGxlbi0tOyB9XHJcbiAgICBpZiAoaW5wdXQuY2hhckF0KGxlbiAtIDEpID09PSAnPScpIHsgbGVuLS07IH1cclxuXHJcbiAgICB2YXIgdWFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoKGxlbiAvIDQpICogMyk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBjaGFyU3RhcnQ7IGkgPCB1YXJyYXkubGVuZ3RoOykge1xyXG4gICAgICAgIHZhciBjMSA9IGxvb2t1cFtpbnB1dC5jaGFyQ29kZUF0KGorKyldO1xyXG4gICAgICAgIHZhciBjMiA9IGxvb2t1cFtpbnB1dC5jaGFyQ29kZUF0KGorKyldO1xyXG4gICAgICAgIHZhciBjMyA9IGxvb2t1cFtpbnB1dC5jaGFyQ29kZUF0KGorKyldO1xyXG4gICAgICAgIHZhciBjNCA9IGxvb2t1cFtpbnB1dC5jaGFyQ29kZUF0KGorKyldO1xyXG5cclxuICAgICAgICB1YXJyYXlbaSsrXSA9IChjMSA8PCAyKSB8IChjMiA+PiA0KTtcclxuICAgICAgICB1YXJyYXlbaSsrXSA9ICgoYzIgJiAxNSkgPDwgNCkgfCAoYzMgPj4gMik7XHJcbiAgICAgICAgdWFycmF5W2krK10gPSAoKGMzICYgMykgPDwgNikgfCBjNDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdWFycmF5LmJ1ZmZlcjtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmxvYWRlci5HTFRGLlJlc3VsdFxyXG4gKiBAcHJvcGVydHkge09iamVjdH0ganNvblxyXG4gKiBAcHJvcGVydHkge2NsYXkuU2NlbmV9IHNjZW5lXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5Ob2RlfSByb290Tm9kZVxyXG4gKiBAcHJvcGVydHkge2NsYXkuQ2FtZXJhW119IGNhbWVyYXNcclxuICogQHByb3BlcnR5IHtjbGF5LlRleHR1cmVbXX0gdGV4dHVyZXNcclxuICogQHByb3BlcnR5IHtjbGF5Lk1hdGVyaWFsW119IG1hdGVyaWFsc1xyXG4gKiBAcHJvcGVydHkge2NsYXkuU2tlbGV0b25bXX0gc2tlbGV0b25zXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5NZXNoW119IG1lc2hlc1xyXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcFtdfSBjbGlwc1xyXG4gKiBAcHJvcGVydHkge2NsYXkuTm9kZVtdfSBub2Rlc1xyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5sb2FkZXIuR0xURlxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEdMVEZMb2FkZXIgPSBCYXNlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkubG9hZGVyLkdMVEYjICovIHtcclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtjbGF5Lk5vZGV9XHJcbiAgICAgKi9cclxuICAgIHJvb3ROb2RlOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBSb290IHBhdGggZm9yIHVyaSBwYXJzaW5nLlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgcm9vdFBhdGg6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb290IHBhdGggZm9yIHRleHR1cmUgdXJpIHBhcnNpbmcuIERlZmF1bHRseSB1c2UgdGhlIHJvb3RQYXRoXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB0ZXh0dXJlUm9vdFBhdGg6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb290IHBhdGggZm9yIGJ1ZmZlciB1cmkgcGFyc2luZy4gRGVmYXVsdGx5IHVzZSB0aGUgcm9vdFBhdGhcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIGJ1ZmZlclJvb3RQYXRoOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hhZGVyIHVzZWQgd2hlbiBjcmVhdGluZyB0aGUgbWF0ZXJpYWxzLlxyXG4gICAgICogQHR5cGUge3N0cmluZ3xjbGF5LlNoYWRlcn1cclxuICAgICAqIEBkZWZhdWx0ICdjbGF5LnN0YW5kYXJkJ1xyXG4gICAgICovXHJcbiAgICBzaGFkZXI6ICdjbGF5LnN0YW5kYXJkJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHVzZSB7QGxpbmsgY2xheS5TdGFuZGFyZE1hdGVyaWFsfVxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdXNlU3RhbmRhcmRNYXRlcmlhbDogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBsb2FkaW5nIHRoZSBjYW1lcmFzLlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGluY2x1ZGVDYW1lcmE6IHRydWUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBsb2FkaW5nIHRoZSBhbmltYXRpb25zLlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGluY2x1ZGVBbmltYXRpb246IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIElmIGxvYWRpbmcgdGhlIG1lc2hlc1xyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGluY2x1ZGVNZXNoOiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBsb2FkaW5nIHRoZSB0ZXh0dXJlcy5cclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpbmNsdWRlVGV4dHVyZTogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIGNyb3NzT3JpZ2luOiAnJyxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi9pc3N1ZXMvNjc0XHJcbiAgICAgKi9cclxuICAgIHRleHR1cmVGbGlwWTogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBjb252ZXJ0IHRleHR1cmUgdG8gcG93ZXItb2YtdHdvXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgdGV4dHVyZUNvbnZlcnRUb1BPVDogZmFsc2UsXHJcblxyXG4gICAgc2hhZGVyTGlicmFyeTogbnVsbFxyXG59LFxyXG5mdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2hhZGVyTGlicmFyeSkge1xyXG4gICAgICAgIHRoaXMuc2hhZGVyTGlicmFyeSA9IHNoYWRlckxpYnJhcnkuY3JlYXRlTGlicmFyeSgpO1xyXG4gICAgfVxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkubG9hZGVyLkdMVEYucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxyXG4gICAgICovXHJcbiAgICBsb2FkOiBmdW5jdGlvbiAodXJsKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHZhciBpc0JpbmFyeSA9IHVybC5lbmRzV2l0aCgnLmdsYicpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yb290UGF0aCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm9vdFBhdGggPSB1cmwuc2xpY2UoMCwgdXJsLmxhc3RJbmRleE9mKCcvJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmVuZG9yLnJlcXVlc3QuZ2V0KHtcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIG9ucHJvZ3Jlc3M6IGZ1bmN0aW9uIChwZXJjZW50LCBsb2FkZWQsIHRvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3Byb2dyZXNzJywgcGVyY2VudCwgbG9hZGVkLCB0b3RhbCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uZXJyb3I6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ2Vycm9yJywgZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogaXNCaW5hcnkgPyAnYXJyYXlidWZmZXInIDogJ3RleHQnLFxyXG4gICAgICAgICAgICBvbmxvYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNCaW5hcnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlQmluYXJ5KGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcnNlIGdsVEYgYmluYXJ5XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBidWZmZXJcclxuICAgICAqIEByZXR1cm4ge2NsYXkubG9hZGVyLkdMVEYuUmVzdWx0fVxyXG4gICAgICovXHJcbiAgICBwYXJzZUJpbmFyeTogZnVuY3Rpb24gKGJ1ZmZlcikge1xyXG4gICAgICAgIHZhciBoZWFkZXIgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyLCAwLCA0KTtcclxuICAgICAgICBpZiAoaGVhZGVyWzBdICE9PSAweDQ2NTQ2QzY3KSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCAnSW52YWxpZCBnbFRGIGJpbmFyeSBmb3JtYXQ6IEludmFsaWQgaGVhZGVyJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGhlYWRlclswXSA8IDIpIHtcclxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsICdPbmx5IGdsVEYyLjAgaXMgc3VwcG9ydGVkLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLCAxMik7XHJcblxyXG4gICAgICAgIHZhciBqc29uO1xyXG4gICAgICAgIHZhciBidWZmZXJzID0gW107XHJcbiAgICAgICAgLy8gUmVhZCBjaHVua3NcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFWaWV3LmJ5dGVMZW5ndGg7KSB7XHJcbiAgICAgICAgICAgIHZhciBjaHVua0xlbmd0aCA9IGRhdGFWaWV3LmdldFVpbnQzMihpLCB0cnVlKTtcclxuICAgICAgICAgICAgaSArPSA0O1xyXG4gICAgICAgICAgICB2YXIgY2h1bmtUeXBlID0gZGF0YVZpZXcuZ2V0VWludDMyKGksIHRydWUpO1xyXG4gICAgICAgICAgICBpICs9IDQ7XHJcblxyXG4gICAgICAgICAgICAvLyBqc29uXHJcbiAgICAgICAgICAgIGlmIChjaHVua1R5cGUgPT09IDB4NEU0RjUzNEEpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheShidWZmZXIsIGkgKyAxMiwgY2h1bmtMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETywgZm9yIHRoZSBicm93c2VyIG5vdCBzdXBwb3J0IFRleHREZWNvZGVyLlxyXG4gICAgICAgICAgICAgICAgdmFyIGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcclxuICAgICAgICAgICAgICAgIHZhciBzdHIgPSBkZWNvZGVyLmRlY29kZShhcnIpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShzdHIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2Vycm9yJywgJ0pTT04gUGFyc2UgZXJyb3I6JyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNodW5rVHlwZSA9PT0gMHgwMDRFNDk0Mikge1xyXG4gICAgICAgICAgICAgICAgYnVmZmVycy5wdXNoKGJ1ZmZlci5zbGljZShpICsgMTIsIGkgKyAxMiArIGNodW5rTGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGkgKz0gY2h1bmtMZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghanNvbikge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2Vycm9yJywgJ0ludmFsaWQgZ2xURiBiaW5hcnkgZm9ybWF0OiBDYW5cXCd0IGZpbmQgSlNPTi4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2UoanNvbiwgYnVmZmVycyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGpzb25cclxuICAgICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJbXX0gW2J1ZmZlcl1cclxuICAgICAqIEByZXR1cm4ge2NsYXkubG9hZGVyLkdMVEYuUmVzdWx0fVxyXG4gICAgICovXHJcbiAgICBwYXJzZTogZnVuY3Rpb24gKGpzb24sIGJ1ZmZlcnMpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIHZhciBsaWIgPSB7XHJcbiAgICAgICAgICAgIGpzb246IGpzb24sXHJcbiAgICAgICAgICAgIGJ1ZmZlcnM6IFtdLFxyXG4gICAgICAgICAgICBidWZmZXJWaWV3czogW10sXHJcbiAgICAgICAgICAgIG1hdGVyaWFsczogW10sXHJcbiAgICAgICAgICAgIHRleHR1cmVzOiBbXSxcclxuICAgICAgICAgICAgbWVzaGVzOiBbXSxcclxuICAgICAgICAgICAgam9pbnRzOiBbXSxcclxuICAgICAgICAgICAgc2tlbGV0b25zOiBbXSxcclxuICAgICAgICAgICAgY2FtZXJhczogW10sXHJcbiAgICAgICAgICAgIG5vZGVzOiBbXSxcclxuICAgICAgICAgICAgY2xpcHM6IFtdXHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyBNb3VudCBvbiB0aGUgcm9vdCBub2RlIGlmIGdpdmVuXHJcbiAgICAgICAgdmFyIHJvb3ROb2RlID0gdGhpcy5yb290Tm9kZSB8fCBuZXcgU2NlbmUoKTtcclxuXHJcbiAgICAgICAgdmFyIGxvYWRpbmcgPSAwO1xyXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrTG9hZCgpIHtcclxuICAgICAgICAgICAgbG9hZGluZy0tO1xyXG4gICAgICAgICAgICBpZiAobG9hZGluZyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgYWZ0ZXJMb2FkQnVmZmVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSWYgYWxyZWFkeSBsb2FkIGJ1ZmZlcnNcclxuICAgICAgICBpZiAoYnVmZmVycykge1xyXG4gICAgICAgICAgICBsaWIuYnVmZmVycyA9IGJ1ZmZlcnMuc2xpY2UoKTtcclxuICAgICAgICAgICAgYWZ0ZXJMb2FkQnVmZmVyKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gTG9hZCBidWZmZXJzXHJcbiAgICAgICAgICAgIHV0aWwuZWFjaChqc29uLmJ1ZmZlcnMsIGZ1bmN0aW9uIChidWZmZXJJbmZvLCBpZHgpIHtcclxuICAgICAgICAgICAgICAgIGxvYWRpbmcrKztcclxuICAgICAgICAgICAgICAgIHZhciBwYXRoID0gYnVmZmVySW5mby51cmk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2VsZi5fbG9hZEJ1ZmZlcnMocGF0aCwgZnVuY3Rpb24gKGJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpYi5idWZmZXJzW2lkeF0gPSBidWZmZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkKCk7XHJcbiAgICAgICAgICAgICAgICB9LCBjaGVja0xvYWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGdldFJlc3VsdCgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGpzb246IGpzb24sXHJcbiAgICAgICAgICAgICAgICBzY2VuZTogc2VsZi5yb290Tm9kZSA/IG51bGwgOiByb290Tm9kZSxcclxuICAgICAgICAgICAgICAgIHJvb3ROb2RlOiBzZWxmLnJvb3ROb2RlID8gcm9vdE5vZGUgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgY2FtZXJhczogbGliLmNhbWVyYXMsXHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlczogbGliLnRleHR1cmVzLFxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxzOiBsaWIubWF0ZXJpYWxzLFxyXG4gICAgICAgICAgICAgICAgc2tlbGV0b25zOiBsaWIuc2tlbGV0b25zLFxyXG4gICAgICAgICAgICAgICAgbWVzaGVzOiBsaWIuaW5zdGFuY2VkTWVzaGVzLFxyXG4gICAgICAgICAgICAgICAgY2xpcHM6IGxpYi5jbGlwcyxcclxuICAgICAgICAgICAgICAgIG5vZGVzOiBsaWIubm9kZXNcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGFmdGVyTG9hZEJ1ZmZlcihpbW1lZGlhdGVseSkge1xyXG4gICAgICAgICAgICAvLyBCdWZmZXIgbm90IGxvYWQgY29tcGxldGUuXHJcbiAgICAgICAgICAgIGlmIChsaWIuYnVmZmVycy5sZW5ndGggIT09IGpzb24uYnVmZmVycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignZXJyb3InLCAnQnVmZmVyIG5vdCBsb2FkIGNvbXBsZXRlLicpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGpzb24uYnVmZmVyVmlld3MuZm9yRWFjaChmdW5jdGlvbiAoYnVmZmVyVmlld0luZm8sIGlkeCkge1xyXG4gICAgICAgICAgICAgICAgLy8gUEVORElORyBQZXJmb3JtYW5jZVxyXG4gICAgICAgICAgICAgICAgbGliLmJ1ZmZlclZpZXdzW2lkeF0gPSBsaWIuYnVmZmVyc1tidWZmZXJWaWV3SW5mby5idWZmZXJdXHJcbiAgICAgICAgICAgICAgICAgICAgLnNsaWNlKGJ1ZmZlclZpZXdJbmZvLmJ5dGVPZmZzZXQgfHwgMCwgKGJ1ZmZlclZpZXdJbmZvLmJ5dGVPZmZzZXQgfHwgMCkgKyAoYnVmZmVyVmlld0luZm8uYnl0ZUxlbmd0aCB8fCAwKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsaWIuYnVmZmVycyA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLmluY2x1ZGVNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5pbmNsdWRlVGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlVGV4dHVyZXMoanNvbiwgbGliKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlTWF0ZXJpYWxzKGpzb24sIGxpYik7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZU1lc2hlcyhqc29uLCBsaWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNlbGYuX3BhcnNlTm9kZXMoanNvbiwgbGliKTtcclxuXHJcbiAgICAgICAgICAgIC8vIE9ubHkgc3VwcG9ydCBvbmUgc2NlbmUuXHJcbiAgICAgICAgICAgIGlmIChqc29uLnNjZW5lcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNjZW5lSW5mbyA9IGpzb24uc2NlbmVzW2pzb24uc2NlbmUgfHwgMF07IC8vIERlZmF1bHQgdXNlIHRoZSBmaXJzdCBzY2VuZS5cclxuICAgICAgICAgICAgICAgIGlmIChzY2VuZUluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lSW5mby5ub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGxpYi5ub2Rlc1tzY2VuZUluZm8ubm9kZXNbaV1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290Tm9kZS5hZGQobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VsZi5pbmNsdWRlTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VTa2lucyhqc29uLCBsaWIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VsZi5pbmNsdWRlQW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZUFuaW1hdGlvbnMoanNvbiwgbGliKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaW1tZWRpYXRlbHkpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignc3VjY2VzcycsIGdldFJlc3VsdCgpKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdzdWNjZXNzJywgZ2V0UmVzdWx0KCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZ2V0UmVzdWx0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmluYXJ5IGZpbGUgcGF0aCByZXNvbHZlci4gVXNlciBjYW4gb3ZlcnJpZGUgaXRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXHJcbiAgICAgKi9cclxuICAgIHJlc29sdmVCdWZmZXJQYXRoOiBmdW5jdGlvbiAocGF0aCkge1xyXG4gICAgICAgIGlmIChwYXRoICYmIHBhdGgubWF0Y2goL15kYXRhOiguKj8pYmFzZTY0LC8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJvb3RQYXRoID0gdGhpcy5idWZmZXJSb290UGF0aDtcclxuICAgICAgICBpZiAocm9vdFBhdGggPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByb290UGF0aCA9IHRoaXMucm9vdFBhdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1dGlsLnJlbGF0aXZlMmFic29sdXRlKHBhdGgsIHJvb3RQYXRoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0dXJlIGZpbGUgcGF0aCByZXNvbHZlci4gVXNlciBjYW4gb3ZlcnJpZGUgaXRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXHJcbiAgICAgKi9cclxuICAgIHJlc29sdmVUZXh0dXJlUGF0aDogZnVuY3Rpb24gKHBhdGgpIHtcclxuICAgICAgICBpZiAocGF0aCAmJiBwYXRoLm1hdGNoKC9eZGF0YTooLio/KWJhc2U2NCwvKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciByb290UGF0aCA9IHRoaXMudGV4dHVyZVJvb3RQYXRoO1xyXG4gICAgICAgIGlmIChyb290UGF0aCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJvb3RQYXRoID0gdGhpcy5yb290UGF0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHV0aWwucmVsYXRpdmUyYWJzb2x1dGUocGF0aCwgcm9vdFBhdGgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ1ZmZlciBsb2FkZXJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb25zdWNjZXNzXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbmVycm9yXHJcbiAgICAgKi9cclxuICAgIGxvYWRCdWZmZXI6IGZ1bmN0aW9uIChwYXRoLCBvbnN1Y2Nlc3MsIG9uZXJyb3IpIHtcclxuICAgICAgICB2ZW5kb3IucmVxdWVzdC5nZXQoe1xyXG4gICAgICAgICAgICB1cmw6IHBhdGgsXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyxcclxuICAgICAgICAgICAgb25sb2FkOiBmdW5jdGlvbiAoYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICBvbnN1Y2Nlc3MgJiYgb25zdWNjZXNzKGJ1ZmZlcik7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uZXJyb3I6IGZ1bmN0aW9uIChidWZmZXIpIHtcclxuICAgICAgICAgICAgICAgIG9uZXJyb3IgJiYgb25lcnJvcihidWZmZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXRTaGFkZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2hhZGVyID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaGFkZXJMaWJyYXJ5LmdldCh0aGlzLnNoYWRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc2hhZGVyIGluc3RhbmNlb2YgU2hhZGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNoYWRlcjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9sb2FkQnVmZmVyczogZnVuY3Rpb24gKHBhdGgsIG9uc3VjY2Vzcywgb25lcnJvcikge1xyXG4gICAgICAgIHZhciBiYXNlNjRQcmVmaXggPSAnZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCc7XHJcbiAgICAgICAgdmFyIHN0clN0YXJ0ID0gcGF0aC5zdWJzdHIoMCwgYmFzZTY0UHJlZml4Lmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKHN0clN0YXJ0ID09PSBiYXNlNjRQcmVmaXgpIHtcclxuICAgICAgICAgICAgb25zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgYmFzZTY0VG9CaW5hcnkocGF0aCwgYmFzZTY0UHJlZml4Lmxlbmd0aClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZEJ1ZmZlcihcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZUJ1ZmZlclBhdGgocGF0aCksXHJcbiAgICAgICAgICAgICAgICBvbnN1Y2Nlc3MsXHJcbiAgICAgICAgICAgICAgICBvbmVycm9yXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvaXNzdWVzLzEwMFxyXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL2lzc3Vlcy8xOTNcclxuICAgIF9wYXJzZVNraW5zOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSBza2VsZXRvbnMgYW5kIGpvaW50c1xyXG4gICAgICAgIHZhciBoYXZlSW52QmluZE1hdHJpY2VzID0gZmFsc2U7XHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24uc2tpbnMsIGZ1bmN0aW9uIChza2luSW5mbywgaWR4KSB7XHJcbiAgICAgICAgICAgIHZhciBza2VsZXRvbiA9IG5ldyBTa2VsZXRvbih7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBza2luSW5mby5uYW1lXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNraW5JbmZvLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5vZGVJZHggPSBza2luSW5mby5qb2ludHNbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGxpYi5ub2Rlc1tub2RlSWR4XTtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IG5ldyBKb2ludCh7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHNrZWxldG9uLmpvaW50cy5sZW5ndGhcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgc2tlbGV0b24uam9pbnRzLnB1c2goam9pbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNrZWxldG9uLnJlbGF0aXZlUm9vdE5vZGUgPSBsaWIubm9kZXNbc2tpbkluZm8uc2tlbGV0b25dIHx8IHRoaXMucm9vdE5vZGU7XHJcbiAgICAgICAgICAgIGlmIChza2luSW5mby5pbnZlcnNlQmluZE1hdHJpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBoYXZlSW52QmluZE1hdHJpY2VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHZhciBJQk1JbmZvID0ganNvbi5hY2Nlc3NvcnNbc2tpbkluZm8uaW52ZXJzZUJpbmRNYXRyaWNlc107XHJcbiAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gbGliLmJ1ZmZlclZpZXdzW0lCTUluZm8uYnVmZmVyVmlld107XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IElCTUluZm8uYnl0ZU9mZnNldCB8fCAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNpemUgPSBJQk1JbmZvLmNvdW50ICogMTY7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIHNpemUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHNrZWxldG9uLnNldEpvaW50TWF0cmljZXNBcnJheShhcnJheSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbi51cGRhdGVKb2ludE1hdHJpY2VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGliLnNrZWxldG9uc1tpZHhdID0gc2tlbGV0b247XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGVuYWJsZVNraW5uaW5nRm9yTWVzaChtZXNoLCBza2VsZXRvbiwgam9pbnRJbmRpY2VzKSB7XHJcbiAgICAgICAgICAgIG1lc2guc2tlbGV0b24gPSBza2VsZXRvbjtcclxuICAgICAgICAgICAgbWVzaC5qb2ludHMgPSBqb2ludEluZGljZXM7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXNrZWxldG9uLmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbi51cGRhdGVKb2ludHNCb3VuZGluZ0JveGVzKG1lc2guZ2VvbWV0cnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBnZXRKb2ludEluZGV4KGpvaW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBqb2ludC5pbmRleDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHV0aWwuZWFjaChqc29uLm5vZGVzLCBmdW5jdGlvbiAobm9kZUluZm8sIG5vZGVJZHgpIHtcclxuICAgICAgICAgICAgaWYgKG5vZGVJbmZvLnNraW4gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNraW5JZHggPSBub2RlSW5mby5za2luO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNrZWxldG9uID0gbGliLnNrZWxldG9uc1tza2luSWR4XTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGxpYi5ub2Rlc1tub2RlSWR4XTtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludEluZGljZXMgPSBza2VsZXRvbi5qb2ludHMubWFwKGdldEpvaW50SW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlU2tpbm5pbmdGb3JNZXNoKG5vZGUsIHNrZWxldG9uLCBqb2ludEluZGljZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTWVzaCBoYXZlIG11bHRpcGxlIHByaW1pdGl2ZXNcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVTa2lubmluZ0Zvck1lc2goY2hpbGRyZW5baV0sIHNrZWxldG9uLCBqb2ludEluZGljZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGFyc2VUZXh0dXJlczogZnVuY3Rpb24gKGpzb24sIGxpYikge1xyXG4gICAgICAgIHV0aWwuZWFjaChqc29uLnRleHR1cmVzLCBmdW5jdGlvbiAodGV4dHVyZUluZm8sIGlkeCl7XHJcbiAgICAgICAgICAgIC8vIHNhbXBsZXJzIGlzIG9wdGlvbmFsXHJcbiAgICAgICAgICAgIHZhciBzYW1wbGVySW5mbyA9IChqc29uLnNhbXBsZXJzICYmIGpzb24uc2FtcGxlcnNbdGV4dHVyZUluZm8uc2FtcGxlcl0pIHx8IHt9O1xyXG4gICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHt9O1xyXG4gICAgICAgICAgICBbJ3dyYXBTJywgJ3dyYXBUJywgJ21hZ0ZpbHRlcicsICdtaW5GaWx0ZXInXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBzYW1wbGVySW5mb1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc1tuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdXRpbC5kZWZhdWx0cyhwYXJhbWV0ZXJzLCB7XHJcbiAgICAgICAgICAgICAgICB3cmFwUzogVGV4dHVyZS5SRVBFQVQsXHJcbiAgICAgICAgICAgICAgICB3cmFwVDogVGV4dHVyZS5SRVBFQVQsXHJcbiAgICAgICAgICAgICAgICBmbGlwWTogdGhpcy50ZXh0dXJlRmxpcFksXHJcbiAgICAgICAgICAgICAgICBjb252ZXJ0VG9QT1Q6IHRoaXMudGV4dHVyZUNvbnZlcnRUb1BPVFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0ZXh0dXJlSW5mby50YXJnZXQgfHwgZ2xlbnVtLlRFWFRVUkVfMkQ7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXQgPSB0ZXh0dXJlSW5mby5mb3JtYXQ7XHJcbiAgICAgICAgICAgIGlmIChmb3JtYXQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycy5mb3JtYXQgPSBmb3JtYXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQgPT09IGdsZW51bS5URVhUVVJFXzJEKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQocGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2VJbmZvID0ganNvbi5pbWFnZXNbdGV4dHVyZUluZm8uc291cmNlXTtcclxuICAgICAgICAgICAgICAgIHZhciB1cmk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VJbmZvLnVyaSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVyaSA9IHRoaXMucmVzb2x2ZVRleHR1cmVQYXRoKGltYWdlSW5mby51cmkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW1hZ2VJbmZvLmJ1ZmZlclZpZXcgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVyaSA9IFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2xpYi5idWZmZXJWaWV3c1tpbWFnZUluZm8uYnVmZmVyVmlld11dLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGltYWdlSW5mby5taW1lVHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh1cmkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLmxvYWQodXJpLCB0aGlzLmNyb3NzT3JpZ2luKTtcclxuICAgICAgICAgICAgICAgICAgICBsaWIudGV4dHVyZXNbaWR4XSA9IHRleHR1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgX0tIUkNvbW1vbk1hdGVyaWFsVG9TdGFuZGFyZDogZnVuY3Rpb24gKG1hdGVyaWFsSW5mbywgbGliKSB7XHJcbiAgICAgICAgdmFyIHVuaWZvcm1zID0ge307XHJcbiAgICAgICAgdmFyIGNvbW1vbk1hdGVyaWFsSW5mbyA9IG1hdGVyaWFsSW5mby5leHRlbnNpb25zWydLSFJfbWF0ZXJpYWxzX2NvbW1vbiddO1xyXG4gICAgICAgIHVuaWZvcm1zID0gY29tbW9uTWF0ZXJpYWxJbmZvLnZhbHVlcyB8fCB7fTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB1bmlmb3Jtcy5kaWZmdXNlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICB1bmlmb3Jtcy5kaWZmdXNlID0gbGliLnRleHR1cmVzW3VuaWZvcm1zLmRpZmZ1c2VdIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgdW5pZm9ybXMuZW1pc3Npb24gPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIHVuaWZvcm1zLmVtaXNzaW9uID0gbGliLnRleHR1cmVzW3VuaWZvcm1zLmVtaXNzaW9uXSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGVuYWJsZWRUZXh0dXJlcyA9IFtdO1xyXG4gICAgICAgIGlmICh1bmlmb3Jtc1snZGlmZnVzZSddIGluc3RhbmNlb2YgVGV4dHVyZTJEKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdkaWZmdXNlTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBlbmFibGVkVGV4dHVyZXMucHVzaCgnbm9ybWFsTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1bmlmb3Jtc1snZW1pc3Npb24nXSBpbnN0YW5jZW9mIFRleHR1cmUyRCkge1xyXG4gICAgICAgICAgICBlbmFibGVkVGV4dHVyZXMucHVzaCgnZW1pc3NpdmVNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG1hdGVyaWFsO1xyXG4gICAgICAgIHZhciBpc1N0YW5kYXJkTWF0ZXJpYWwgPSB0aGlzLnVzZVN0YW5kYXJkTWF0ZXJpYWw7XHJcbiAgICAgICAgaWYgKGlzU3RhbmRhcmRNYXRlcmlhbCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBTdGFuZGFyZE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgZG91YmxlU2lkZWQ6IG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgc2hhZGVyOiB0aGlzLl9nZXRTaGFkZXIoKVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1JPVUdITkVTUycpO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9NRVRBTE5FU1MnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbEluZm8uZG91YmxlU2lkZWQpIHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnRE9VQkxFX1NJREVEJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh1bmlmb3Jtcy50cmFuc3BhcmVudCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZXB0aE1hc2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGRpZmZ1c2VQcm9wID0gdW5pZm9ybXNbJ2RpZmZ1c2UnXTtcclxuICAgICAgICBpZiAoZGlmZnVzZVByb3ApIHtcclxuICAgICAgICAgICAgLy8gQ29sb3JcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGlmZnVzZVByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBkaWZmdXNlUHJvcCA9IGRpZmZ1c2VQcm9wLnNsaWNlKDAsIDMpO1xyXG4gICAgICAgICAgICAgICAgaXNTdGFuZGFyZE1hdGVyaWFsID8gKG1hdGVyaWFsLmNvbG9yID0gZGlmZnVzZVByb3ApXHJcbiAgICAgICAgICAgICAgICAgICAgOiBtYXRlcmlhbC5zZXQoJ2NvbG9yJywgZGlmZnVzZVByb3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgeyAvLyBUZXh0dXJlXHJcbiAgICAgICAgICAgICAgICBpc1N0YW5kYXJkTWF0ZXJpYWwgPyAobWF0ZXJpYWwuZGlmZnVzZU1hcCA9IGRpZmZ1c2VQcm9wKVxyXG4gICAgICAgICAgICAgICAgICAgIDogbWF0ZXJpYWwuc2V0KCdkaWZmdXNlTWFwJywgZGlmZnVzZVByb3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBlbWlzc2lvblByb3AgPSB1bmlmb3Jtc1snZW1pc3Npb24nXTtcclxuICAgICAgICBpZiAoZW1pc3Npb25Qcm9wICE9IG51bGwpIHtcclxuICAgICAgICAgICAgLy8gQ29sb3JcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW1pc3Npb25Qcm9wKSkge1xyXG4gICAgICAgICAgICAgICAgZW1pc3Npb25Qcm9wID0gZW1pc3Npb25Qcm9wLnNsaWNlKDAsIDMpO1xyXG4gICAgICAgICAgICAgICAgaXNTdGFuZGFyZE1hdGVyaWFsID8gKG1hdGVyaWFsLmVtaXNzaW9uID0gZW1pc3Npb25Qcm9wKVxyXG4gICAgICAgICAgICAgICAgICAgIDogbWF0ZXJpYWwuc2V0KCdlbWlzc2lvbicsIGVtaXNzaW9uUHJvcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7IC8vIFRleHR1cmVcclxuICAgICAgICAgICAgICAgIGlzU3RhbmRhcmRNYXRlcmlhbCA/IChtYXRlcmlhbC5lbWlzc2l2ZU1hcCA9IGVtaXNzaW9uUHJvcClcclxuICAgICAgICAgICAgICAgICAgICA6IG1hdGVyaWFsLnNldCgnZW1pc3NpdmVNYXAnLCBlbWlzc2lvblByb3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gdGV4Q29vcmRcclxuICAgICAgICAgICAgdmFyIG5vcm1hbFRleHR1cmVJbmRleCA9IG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlLmluZGV4O1xyXG4gICAgICAgICAgICBpZiAoaXNTdGFuZGFyZE1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5ub3JtYWxNYXAgPSBsaWIudGV4dHVyZXNbbm9ybWFsVGV4dHVyZUluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdub3JtYWxNYXAnLCBsaWIudGV4dHVyZXNbbm9ybWFsVGV4dHVyZUluZGV4XSB8fCBudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodW5pZm9ybXNbJ3NoaW5pbmVzcyddICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdmFyIGdsb3NzaW5lc3MgPSBNYXRoLmxvZyh1bmlmb3Jtc1snc2hpbmluZXNzJ10pIC8gTWF0aC5sb2coODE5Mik7XHJcbiAgICAgICAgICAgIC8vIFVuaWZvcm0gZ2xvc3NpbmVzc1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ2dsb3NzaW5lc3MnLCBnbG9zc2luZXNzKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdyb3VnaG5lc3MnLCAxIC0gZ2xvc3NpbmVzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ2dsb3NzaW5lc3MnLCAwLjMpO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ3JvdWdobmVzcycsIDAuMyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1bmlmb3Jtc1snc3BlY3VsYXInXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnc3BlY3VsYXJDb2xvcicsIHVuaWZvcm1zWydzcGVjdWxhciddLnNsaWNlKDAsIDMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHVuaWZvcm1zWyd0cmFuc3BhcmVuY3knXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnYWxwaGEnLCB1bmlmb3Jtc1sndHJhbnNwYXJlbmN5J10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGJyTWV0YWxsaWNSb3VnaG5lc3NUb1N0YW5kYXJkOiBmdW5jdGlvbiAobWF0ZXJpYWxJbmZvLCBtZXRhbGxpY1JvdWdobmVzc01hdEluZm8sIGxpYikge1xyXG4gICAgICAgIHZhciBhbHBoYVRlc3QgPSBtYXRlcmlhbEluZm8uYWxwaGFNb2RlID09PSAnTUFTSyc7XHJcblxyXG4gICAgICAgIHZhciBpc1N0YW5kYXJkTWF0ZXJpYWwgPSB0aGlzLnVzZVN0YW5kYXJkTWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIG1hdGVyaWFsO1xyXG4gICAgICAgIHZhciBkaWZmdXNlTWFwLCByb3VnaG5lc3NNYXAsIG1ldGFsbmVzc01hcCwgbm9ybWFsTWFwLCBlbWlzc2l2ZU1hcCwgb2NjbHVzaW9uTWFwO1xyXG4gICAgICAgIHZhciBlbmFibGVkVGV4dHVyZXMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNjYWxhciBtdWx0aXBsaWVyIGFwcGxpZWQgdG8gZWFjaCBub3JtYWwgdmVjdG9yIG9mIHRoZSBub3JtYWwgdGV4dHVyZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBYWFggVGhpcyB2YWx1ZSBpcyBpZ25vcmVkIGlmIGBtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZWAgaXMgbm90IHNwZWNpZmllZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICB2YXIgbm9ybWFsU2NhbGUgPSAxLjA7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gdGV4Q29vcmRcclxuICAgICAgICBpZiAobWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLmJhc2VDb2xvclRleHR1cmUpIHtcclxuICAgICAgICAgICAgZGlmZnVzZU1hcCA9IGxpYi50ZXh0dXJlc1ttZXRhbGxpY1JvdWdobmVzc01hdEluZm8uYmFzZUNvbG9yVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgZGlmZnVzZU1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnZGlmZnVzZU1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLm1ldGFsbGljUm91Z2huZXNzVGV4dHVyZSkge1xyXG4gICAgICAgICAgICByb3VnaG5lc3NNYXAgPSBtZXRhbG5lc3NNYXAgPSBsaWIudGV4dHVyZXNbbWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLm1ldGFsbGljUm91Z2huZXNzVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgcm91Z2huZXNzTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdtZXRhbG5lc3NNYXAnLCAncm91Z2huZXNzTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZSkge1xyXG5cclxuICAgICAgICAgICAgbm9ybWFsTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBub3JtYWxNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ25vcm1hbE1hcCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZS5zY2FsZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgIG5vcm1hbFNjYWxlID0gbWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUuc2NhbGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8uZW1pc3NpdmVUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5lbWlzc2l2ZVRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdlbWlzc2l2ZU1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLm9jY2x1c2lvblRleHR1cmUpIHtcclxuICAgICAgICAgICAgb2NjbHVzaW9uTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5vY2NsdXNpb25UZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBvY2NsdXNpb25NYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ29jY2x1c2lvbk1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYmFzZUNvbG9yID0gbWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLmJhc2VDb2xvckZhY3RvciB8fCBbMSwgMSwgMSwgMV07XHJcblxyXG4gICAgICAgIHZhciBjb21tb25Qcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwOiBkaWZmdXNlTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIHJvdWdobmVzc01hcDogcm91Z2huZXNzTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG1ldGFsbmVzc01hcDogbWV0YWxuZXNzTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG5vcm1hbE1hcDogbm9ybWFsTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG9jY2x1c2lvbk1hcDogb2NjbHVzaW9uTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwOiBlbWlzc2l2ZU1hcCB8fCBudWxsLFxyXG4gICAgICAgICAgICBjb2xvcjogYmFzZUNvbG9yLnNsaWNlKDAsIDMpLFxyXG4gICAgICAgICAgICBhbHBoYTogYmFzZUNvbG9yWzNdLFxyXG4gICAgICAgICAgICBtZXRhbG5lc3M6IG1ldGFsbGljUm91Z2huZXNzTWF0SW5mby5tZXRhbGxpY0ZhY3RvciB8fCAwLFxyXG4gICAgICAgICAgICByb3VnaG5lc3M6IG1ldGFsbGljUm91Z2huZXNzTWF0SW5mby5yb3VnaG5lc3NGYWN0b3IgfHwgMCxcclxuICAgICAgICAgICAgZW1pc3Npb246IG1hdGVyaWFsSW5mby5lbWlzc2l2ZUZhY3RvciB8fCBbMCwgMCwgMF0sXHJcbiAgICAgICAgICAgIGVtaXNzaW9uSW50ZW5zaXR5OiAxLFxyXG4gICAgICAgICAgICBhbHBoYUN1dG9mZjogbWF0ZXJpYWxJbmZvLmFscGhhQ3V0b2ZmIHx8IDAsXHJcbiAgICAgICAgICAgIG5vcm1hbFNjYWxlOiBub3JtYWxTY2FsZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGNvbW1vblByb3BlcnRpZXMucm91Z2huZXNzTWFwKSB7XHJcbiAgICAgICAgICAgIC8vIEluIGdsVEYgbWV0YWxsaWNGYWN0b3Igd2lsbCBkbyBtdWx0aXBseSwgd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gU3RhbmRhcmRNYXRlcmlhbC5cclxuICAgICAgICAgICAgLy8gU28gc2ltcGx5IGlnbm9yZSBpdFxyXG4gICAgICAgICAgICBjb21tb25Qcm9wZXJ0aWVzLm1ldGFsbmVzcyA9IDAuNTtcclxuICAgICAgICAgICAgY29tbW9uUHJvcGVydGllcy5yb3VnaG5lc3MgPSAwLjU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1N0YW5kYXJkTWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgU3RhbmRhcmRNYXRlcmlhbCh1dGlsLmV4dGVuZCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBtYXRlcmlhbEluZm8ubmFtZSxcclxuICAgICAgICAgICAgICAgIGFscGhhVGVzdDogYWxwaGFUZXN0LFxyXG4gICAgICAgICAgICAgICAgZG91YmxlU2lkZWQ6IG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZCxcclxuICAgICAgICAgICAgICAgIC8vIEcgY2hhbm5lbFxyXG4gICAgICAgICAgICAgICAgcm91Z2huZXNzQ2hhbm5lbDogMSxcclxuICAgICAgICAgICAgICAgIC8vIEIgQ2hhbm5lbFxyXG4gICAgICAgICAgICAgICAgbWV0YWxuZXNzQ2hhbm5lbDogMlxyXG4gICAgICAgICAgICB9LCBjb21tb25Qcm9wZXJ0aWVzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbWF0ZXJpYWxJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBzaGFkZXI6IHRoaXMuX2dldFNoYWRlcigpXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfUk9VR0hORVNTJyk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX01FVEFMTkVTUycpO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JPVUdITkVTU19DSEFOTkVMJywgMSk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnTUVUQUxORVNTX0NIQU5ORUwnLCAyKTtcclxuXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnRElGRlVTRU1BUF9BTFBIQV9BTFBIQScpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFscGhhVGVzdCkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdBTFBIQV9URVNUJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZCkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KGNvbW1vblByb3BlcnRpZXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5hbHBoYU1vZGUgPT09ICdCTEVORCcpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhNYXNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlcHRoVGVzdCA9IHRydWU7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcclxuICAgIH0sXHJcblxyXG4gICAgX3BiclNwZWN1bGFyR2xvc3NpbmVzc1RvU3RhbmRhcmQ6IGZ1bmN0aW9uIChtYXRlcmlhbEluZm8sIHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8sIGxpYikge1xyXG4gICAgICAgIHZhciBhbHBoYVRlc3QgPSBtYXRlcmlhbEluZm8uYWxwaGFNb2RlID09PSAnTUFTSyc7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnVzZVN0YW5kYXJkTWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU3RhbmRhcmRNYXRlcmlhbCBkb2VzblxcJ3Qgc3VwcG9ydCBzcGVjdWxhciBnbG9zc2luZXNzIHdvcmtmbG93IHlldCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG1hdGVyaWFsO1xyXG4gICAgICAgIHZhciBkaWZmdXNlTWFwLCBnbG9zc2luZXNzTWFwLCBzcGVjdWxhck1hcCwgbm9ybWFsTWFwLCBlbWlzc2l2ZU1hcCwgb2NjbHVzaW9uTWFwO1xyXG4gICAgICAgIHZhciBlbmFibGVkVGV4dHVyZXMgPSBbXTtcclxuICAgICAgICAvLyBUT0RPIHRleENvb3JkXHJcbiAgICAgICAgaWYgKHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uZGlmZnVzZVRleHR1cmUpIHtcclxuICAgICAgICAgICAgZGlmZnVzZU1hcCA9IGxpYi50ZXh0dXJlc1tzcGVjdWxhckdsb3NzaW5lc3NNYXRJbmZvLmRpZmZ1c2VUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdkaWZmdXNlTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzcGVjdWxhckdsb3NzaW5lc3NNYXRJbmZvLnNwZWN1bGFyR2xvc3NpbmVzc1RleHR1cmUpIHtcclxuICAgICAgICAgICAgZ2xvc3NpbmVzc01hcCA9IHNwZWN1bGFyTWFwID0gbGliLnRleHR1cmVzW3NwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uc3BlY3VsYXJHbG9zc2luZXNzVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgZ2xvc3NpbmVzc01hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnc3BlY3VsYXJNYXAnLCAnZ2xvc3NpbmVzc01hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUpIHtcclxuICAgICAgICAgICAgbm9ybWFsTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBub3JtYWxNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ25vcm1hbE1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmVtaXNzaXZlVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBlbWlzc2l2ZU1hcCA9IGxpYi50ZXh0dXJlc1ttYXRlcmlhbEluZm8uZW1pc3NpdmVUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBlbWlzc2l2ZU1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnZW1pc3NpdmVNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5vY2NsdXNpb25UZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIG9jY2x1c2lvbk1hcCA9IGxpYi50ZXh0dXJlc1ttYXRlcmlhbEluZm8ub2NjbHVzaW9uVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgb2NjbHVzaW9uTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdvY2NsdXNpb25NYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRpZmZ1c2VDb2xvciA9IHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uZGlmZnVzZUZhY3RvciB8fCBbMSwgMSwgMSwgMV07XHJcblxyXG4gICAgICAgIHZhciBjb21tb25Qcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwOiBkaWZmdXNlTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGdsb3NzaW5lc3NNYXA6IGdsb3NzaW5lc3NNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgc3BlY3VsYXJNYXA6IHNwZWN1bGFyTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG5vcm1hbE1hcDogbm9ybWFsTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwOiBlbWlzc2l2ZU1hcCB8fCBudWxsLFxyXG4gICAgICAgICAgICBvY2NsdXNpb25NYXA6IG9jY2x1c2lvbk1hcCB8fCBudWxsLFxyXG4gICAgICAgICAgICBjb2xvcjogZGlmZnVzZUNvbG9yLnNsaWNlKDAsIDMpLFxyXG4gICAgICAgICAgICBhbHBoYTogZGlmZnVzZUNvbG9yWzNdLFxyXG4gICAgICAgICAgICBzcGVjdWxhckNvbG9yOiBzcGVjdWxhckdsb3NzaW5lc3NNYXRJbmZvLnNwZWN1bGFyRmFjdG9yIHx8IFsxLCAxLCAxXSxcclxuICAgICAgICAgICAgZ2xvc3NpbmVzczogc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mby5nbG9zc2luZXNzRmFjdG9yIHx8IDAsXHJcbiAgICAgICAgICAgIGVtaXNzaW9uOiBtYXRlcmlhbEluZm8uZW1pc3NpdmVGYWN0b3IgfHwgWzAsIDAsIDBdLFxyXG4gICAgICAgICAgICBlbWlzc2lvbkludGVuc2l0eTogMSxcclxuICAgICAgICAgICAgYWxwaGFDdXRvZmY6IG1hdGVyaWFsSW5mby5hbHBoYUN1dG9mZiA9PSBudWxsID8gMC45IDogbWF0ZXJpYWxJbmZvLmFscGhhQ3V0b2ZmXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoY29tbW9uUHJvcGVydGllcy5nbG9zc2luZXNzTWFwKSB7XHJcbiAgICAgICAgICAgIC8vIElnbm9yZSBzcGVjdWxhckZhY3RvclxyXG4gICAgICAgICAgICBjb21tb25Qcm9wZXJ0aWVzLmdsb3NzaW5lc3MgPSAwLjU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb21tb25Qcm9wZXJ0aWVzLnNwZWN1bGFyTWFwKSB7XHJcbiAgICAgICAgICAgIC8vIElnbm9yZSBzcGVjdWxhckZhY3RvclxyXG4gICAgICAgICAgICBjb21tb25Qcm9wZXJ0aWVzLnNwZWN1bGFyQ29sb3IgPSBbMSwgMSwgMV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsSW5mby5uYW1lLFxyXG4gICAgICAgICAgICBzaGFkZXI6IHRoaXMuX2dldFNoYWRlcigpXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnR0xPU1NJTkVTU19DSEFOTkVMJywgMyk7XHJcbiAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdESUZGVVNFTUFQX0FMUEhBX0FMUEhBJyk7XHJcblxyXG4gICAgICAgIGlmIChhbHBoYVRlc3QpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdBTFBIQV9URVNUJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8uZG91YmxlU2lkZWQpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1hdGVyaWFsLnNldChjb21tb25Qcm9wZXJ0aWVzKTtcclxuXHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5hbHBoYU1vZGUgPT09ICdCTEVORCcpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhNYXNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlcHRoVGVzdCA9IHRydWU7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcclxuICAgIH0sXHJcblxyXG4gICAgX3BhcnNlTWF0ZXJpYWxzOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24ubWF0ZXJpYWxzLCBmdW5jdGlvbiAobWF0ZXJpYWxJbmZvLCBpZHgpIHtcclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5leHRlbnNpb25zICYmIG1hdGVyaWFsSW5mby5leHRlbnNpb25zWydLSFJfbWF0ZXJpYWxzX2NvbW1vbiddKSB7XHJcbiAgICAgICAgICAgICAgICBsaWIubWF0ZXJpYWxzW2lkeF0gPSB0aGlzLl9LSFJDb21tb25NYXRlcmlhbFRvU3RhbmRhcmQobWF0ZXJpYWxJbmZvLCBsaWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGVyaWFsSW5mby5leHRlbnNpb25zICYmIG1hdGVyaWFsSW5mby5leHRlbnNpb25zWydLSFJfbWF0ZXJpYWxzX3BiclNwZWN1bGFyR2xvc3NpbmVzcyddKSB7XHJcbiAgICAgICAgICAgICAgICBsaWIubWF0ZXJpYWxzW2lkeF0gPSB0aGlzLl9wYnJTcGVjdWxhckdsb3NzaW5lc3NUb1N0YW5kYXJkKG1hdGVyaWFsSW5mbywgbWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnNbJ0tIUl9tYXRlcmlhbHNfcGJyU3BlY3VsYXJHbG9zc2luZXNzJ10sIGxpYik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsaWIubWF0ZXJpYWxzW2lkeF0gPSB0aGlzLl9wYnJNZXRhbGxpY1JvdWdobmVzc1RvU3RhbmRhcmQobWF0ZXJpYWxJbmZvLCBtYXRlcmlhbEluZm8ucGJyTWV0YWxsaWNSb3VnaG5lc3MgfHwge30sIGxpYik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3BhcnNlTWVzaGVzOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICB1dGlsLmVhY2goanNvbi5tZXNoZXMsIGZ1bmN0aW9uIChtZXNoSW5mbywgaWR4KSB7XHJcbiAgICAgICAgICAgIGxpYi5tZXNoZXNbaWR4XSA9IFtdO1xyXG4gICAgICAgICAgICAvLyBHZW9tZXRyeVxyXG4gICAgICAgICAgICBmb3IgKHZhciBwcCA9IDA7IHBwIDwgbWVzaEluZm8ucHJpbWl0aXZlcy5sZW5ndGg7IHBwKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcmltaXRpdmVJbmZvID0gbWVzaEluZm8ucHJpbWl0aXZlc1twcF07XHJcbiAgICAgICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe1xyXG4gICAgICAgICAgICAgICAgICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFBFTkRJR05cclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBtZXNoSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94OiBuZXcgQm91bmRpbmdCb3goKVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAvLyBQYXJzZSBhdHRyaWJ1dGVzXHJcbiAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWNzID0gT2JqZWN0LmtleXMocHJpbWl0aXZlSW5mby5hdHRyaWJ1dGVzKTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHNzID0gMDsgc3MgPCBzZW1hbnRpY3MubGVuZ3RoOyBzcysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbWFudGljID0gc2VtYW50aWNzW3NzXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYWNjZXNzb3JJZHggPSBwcmltaXRpdmVJbmZvLmF0dHJpYnV0ZXNbc2VtYW50aWNdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVJbmZvID0ganNvbi5hY2Nlc3NvcnNbYWNjZXNzb3JJZHhdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gc2VtYW50aWNBdHRyaWJ1dGVNYXBbc2VtYW50aWNdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYXR0cmlidXRlTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBTSVpFX01BUFthdHRyaWJ1dGVJbmZvLnR5cGVdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVBcnJheSA9IGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIGFjY2Vzc29ySWR4KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBXZWJHTCBhdHRyaWJ1dGUgYnVmZmVyIG5vdCBzdXBwb3J0IHVpbnQzMi5cclxuICAgICAgICAgICAgICAgICAgICAvLyBEaXJlY3QgdXNlIEZsb2F0MzJBcnJheSBtYXkgYWxzbyBoYXZlIGlzc3VlLlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVBcnJheSBpbnN0YW5jZW9mIHZlbmRvci5VaW50MzJBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYXR0cmlidXRlQXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMgPT09ICdXRUlHSFRTXzAnICYmIHNpemUgPT09IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2VpZ2h0IGRhdGEgaW4gUVRFSyBoYXMgb25seSAzIGNvbXBvbmVudCwgdGhlIGxhc3QgY29tcG9uZW50IGNhbiBiZSBldmFsdWF0ZWQgc2luY2UgaXQgaXMgbm9ybWFsaXplZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2VpZ2h0QXJyYXkgPSBuZXcgYXR0cmlidXRlQXJyYXkuY29uc3RydWN0b3IoYXR0cmlidXRlSW5mby5jb3VudCAqIDMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZUluZm8uY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk0ID0gaSAqIDQsIGkzID0gaSAqIDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdzEgPSBhdHRyaWJ1dGVBcnJheVtpNF0sIHcyID0gYXR0cmlidXRlQXJyYXlbaTQgKyAxXSwgdzMgPSBhdHRyaWJ1dGVBcnJheVtpNCArIDJdLCB3NCA9IGF0dHJpYnV0ZUFycmF5W2k0ICsgM107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd1N1bSA9IHcxICsgdzIgKyB3MyArIHc0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0QXJyYXlbaTNdID0gdzEgLyB3U3VtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0QXJyYXlbaTMgKyAxXSA9IHcyIC8gd1N1bTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodEFycmF5W2kzICsgMl0gPSB3MyAvIHdTdW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXS52YWx1ZSA9IHdlaWdodEFycmF5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzZW1hbnRpYyA9PT0gJ0NPTE9SXzAnICYmIHNpemUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yQXJyYXkgPSBuZXcgYXR0cmlidXRlQXJyYXkuY29uc3RydWN0b3IoYXR0cmlidXRlSW5mby5jb3VudCAqIDQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZUluZm8uY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk0ID0gaSAqIDQsIGkzID0gaSAqIDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckFycmF5W2k0XSA9IGF0dHJpYnV0ZUFycmF5W2kzXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yQXJyYXlbaTQgKyAxXSA9IGF0dHJpYnV0ZUFycmF5W2kzICsgMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckFycmF5W2k0ICsgMl0gPSBhdHRyaWJ1dGVBcnJheVtpMyArIDJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JBcnJheVtpNCArIDNdID0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdLnZhbHVlID0gY29sb3JBcnJheTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0udmFsdWUgPSBhdHRyaWJ1dGVBcnJheTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVUeXBlID0gJ2Zsb2F0JztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlQXJyYXkgaW5zdGFuY2VvZiB2ZW5kb3IuVWludDE2QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9ICd1c2hvcnQnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVBcnJheSBpbnN0YW5jZW9mIHZlbmRvci5JbnQxNkFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUgPSAnc2hvcnQnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVBcnJheSBpbnN0YW5jZW9mIHZlbmRvci5VaW50OEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUgPSAndWJ5dGUnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVBcnJheSBpbnN0YW5jZW9mIHZlbmRvci5JbnQ4QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9ICdieXRlJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXS50eXBlID0gYXR0cmlidXRlVHlwZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbWFudGljID09PSAnUE9TSVRJT04nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJvdW5kaW5nIEJveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWluID0gYXR0cmlidXRlSW5mby5taW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXggPSBhdHRyaWJ1dGVJbmZvLm1heDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuYm91bmRpbmdCb3gubWluLnNldChtaW5bMF0sIG1pblsxXSwgbWluWzJdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5ib3VuZGluZ0JveC5tYXguc2V0KG1heFswXSwgbWF4WzFdLCBtYXhbMl0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIFBhcnNlIGluZGljZXNcclxuICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVJbmZvLmluZGljZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBnZXRBY2Nlc3NvckRhdGEoanNvbiwgbGliLCBwcmltaXRpdmVJbmZvLmluZGljZXMsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChnZW9tZXRyeS52ZXJ0ZXhDb3VudCA8PSAweGZmZmYgJiYgZ2VvbWV0cnkuaW5kaWNlcyBpbnN0YW5jZW9mIHZlbmRvci5VaW50MzJBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5pbmRpY2VzID0gbmV3IHZlbmRvci5VaW50MTZBcnJheShnZW9tZXRyeS5pbmRpY2VzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZ2VvbWV0cnkuaW5kaWNlcyBpbnN0YW5jZW9mIHZlbmRvci5VaW50OEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgdmVuZG9yLlVpbnQxNkFycmF5KGdlb21ldHJ5LmluZGljZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBsaWIubWF0ZXJpYWxzW3ByaW1pdGl2ZUluZm8ubWF0ZXJpYWxdO1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsSW5mbyA9IChqc29uLm1hdGVyaWFscyB8fCBbXSlbcHJpbWl0aXZlSW5mby5tYXRlcmlhbF07XHJcbiAgICAgICAgICAgICAgICAvLyBVc2UgZGVmYXVsdCBtYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyOiBzZWxmLl9nZXRTaGFkZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIG1lc2ggPSBuZXcgTWVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IGdlb21ldHJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBtYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgICAgICBtb2RlOiBbTWVzaC5QT0lOVFMsIE1lc2guTElORVMsIE1lc2guTElORV9MT09QLCBNZXNoLkxJTkVfU1RSSVAsIE1lc2guVFJJQU5HTEVTLCBNZXNoLlRSSUFOR0xFX1NUUklQLCBNZXNoLlRSSUFOR0xFX0ZBTl1bcHJpbWl0aXZlSW5mby5tb2RlXSB8fCBNZXNoLlRSSUFOR0xFUyxcclxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVHQnVmZmVyOiBtYXRlcmlhbC50cmFuc3BhcmVudFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWxJbmZvICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNoLmN1bGxpbmcgPSAhbWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFtZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzaC5nZW9tZXRyeS5nZW5lcmF0ZVZlcnRleE5vcm1hbHMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICgoKG1hdGVyaWFsIGluc3RhbmNlb2YgU3RhbmRhcmRNYXRlcmlhbCkgJiYgbWF0ZXJpYWwubm9ybWFsTWFwKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IChtYXRlcmlhbC5pc1RleHR1cmVFbmFibGVkKCdub3JtYWxNYXAnKSlcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbWVzaC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5nZW9tZXRyeS5nZW5lcmF0ZVRhbmdlbnRzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG1lc2guZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuZGVmaW5lKCdWRVJURVhfQ09MT1InKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBtZXNoLm5hbWUgPSBHTFRGTG9hZGVyLmdlbmVyYXRlTWVzaE5hbWUoanNvbi5tZXNoZXMsIGlkeCwgcHApO1xyXG5cclxuICAgICAgICAgICAgICAgIGxpYi5tZXNoZXNbaWR4XS5wdXNoKG1lc2gpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9pbnN0YW5jZUNhbWVyYTogZnVuY3Rpb24gKGpzb24sIG5vZGVJbmZvKSB7XHJcbiAgICAgICAgdmFyIGNhbWVyYUluZm8gPSBqc29uLmNhbWVyYXNbbm9kZUluZm8uY2FtZXJhXTtcclxuXHJcbiAgICAgICAgaWYgKGNhbWVyYUluZm8udHlwZSA9PT0gJ3BlcnNwZWN0aXZlJykge1xyXG4gICAgICAgICAgICB2YXIgcGVyc3BlY3RpdmVJbmZvID0gY2FtZXJhSW5mby5wZXJzcGVjdGl2ZSB8fCB7fTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBub2RlSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgYXNwZWN0OiBwZXJzcGVjdGl2ZUluZm8uYXNwZWN0UmF0aW8sXHJcbiAgICAgICAgICAgICAgICBmb3Y6IHBlcnNwZWN0aXZlSW5mby55Zm92IC8gTWF0aC5QSSAqIDE4MCxcclxuICAgICAgICAgICAgICAgIGZhcjogcGVyc3BlY3RpdmVJbmZvLnpmYXIsXHJcbiAgICAgICAgICAgICAgICBuZWFyOiBwZXJzcGVjdGl2ZUluZm8uem5lYXJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgb3J0aG9ncmFwaGljSW5mbyA9IGNhbWVyYUluZm8ub3J0aG9ncmFwaGljIHx8IHt9O1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9ydGhvZ3JhcGhpY0NhbWVyYSh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBub2RlSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdG9wOiBvcnRob2dyYXBoaWNJbmZvLnltYWcsXHJcbiAgICAgICAgICAgICAgICByaWdodDogb3J0aG9ncmFwaGljSW5mby54bWFnLFxyXG4gICAgICAgICAgICAgICAgbGVmdDogLW9ydGhvZ3JhcGhpY0luZm8ueG1hZyxcclxuICAgICAgICAgICAgICAgIGJvdHRvbTogLW9ydGhvZ3JhcGhpY0luZm8ueW1hZyxcclxuICAgICAgICAgICAgICAgIG5lYXI6IG9ydGhvZ3JhcGhpY0luZm8uem5lYXIsXHJcbiAgICAgICAgICAgICAgICBmYXI6IG9ydGhvZ3JhcGhpY0luZm8uemZhclxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZU5vZGVzOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGluc3RhbmNlTWVzaChtZXNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgTWVzaCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBtZXNoLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogbWVzaC5nZW9tZXRyeSxcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBtZXNoLm1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgY3VsbGluZzogbWVzaC5jdWxsaW5nLFxyXG4gICAgICAgICAgICAgICAgbW9kZTogbWVzaC5tb2RlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGliLmluc3RhbmNlZE1lc2hlcyA9IFtdO1xyXG5cclxuICAgICAgICB1dGlsLmVhY2goanNvbi5ub2RlcywgZnVuY3Rpb24gKG5vZGVJbmZvLCBpZHgpIHtcclxuICAgICAgICAgICAgdmFyIG5vZGU7XHJcbiAgICAgICAgICAgIGlmIChub2RlSW5mby5jYW1lcmEgIT0gbnVsbCAmJiB0aGlzLmluY2x1ZGVDYW1lcmEpIHtcclxuICAgICAgICAgICAgICAgIG5vZGUgPSB0aGlzLl9pbnN0YW5jZUNhbWVyYShqc29uLCBub2RlSW5mbyk7XHJcbiAgICAgICAgICAgICAgICBsaWIuY2FtZXJhcy5wdXNoKG5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG5vZGVJbmZvLm1lc2ggIT0gbnVsbCAmJiB0aGlzLmluY2x1ZGVNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJpbWl0aXZlcyA9IGxpYi5tZXNoZXNbbm9kZUluZm8ubWVzaF07XHJcbiAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBub2RlIHdpdGggbWVzaCBkaXJlY3RseVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gaW5zdGFuY2VNZXNoKHByaW1pdGl2ZXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldE5hbWUobm9kZUluZm8ubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpYi5pbnN0YW5jZWRNZXNoZXMucHVzaChub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBuZXcgTm9kZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldE5hbWUobm9kZUluZm8ubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcHJpbWl0aXZlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld01lc2ggPSBpbnN0YW5jZU1lc2gocHJpbWl0aXZlc1tqXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmFkZChuZXdNZXNoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYi5pbnN0YW5jZWRNZXNoZXMucHVzaChuZXdNZXNoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5vZGUgPSBuZXcgTm9kZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gUEVORElORyBEdWxwbGljYXRlIG5hbWUuXHJcbiAgICAgICAgICAgICAgICBub2RlLnNldE5hbWUobm9kZUluZm8ubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5vZGVJbmZvLm1hdHJpeCkge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5sb2NhbFRyYW5zZm9ybS5zZXRBcnJheShub2RlSW5mby5tYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgbm9kZS5kZWNvbXBvc2VMb2NhbFRyYW5zZm9ybSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGVJbmZvLnRyYW5zbGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5wb3NpdGlvbi5zZXRBcnJheShub2RlSW5mby50cmFuc2xhdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZUluZm8ucm90YXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnJvdGF0aW9uLnNldEFycmF5KG5vZGVJbmZvLnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChub2RlSW5mby5zY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2NhbGUuc2V0QXJyYXkobm9kZUluZm8uc2NhbGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsaWIubm9kZXNbaWR4XSA9IG5vZGU7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcblxyXG4gICAgICAgIC8vIEJ1aWxkIGhpZXJhcmNoeVxyXG4gICAgICAgIHV0aWwuZWFjaChqc29uLm5vZGVzLCBmdW5jdGlvbiAobm9kZUluZm8sIGlkeCkge1xyXG4gICAgICAgICAgICB2YXIgbm9kZSA9IGxpYi5ub2Rlc1tpZHhdO1xyXG4gICAgICAgICAgICBpZiAobm9kZUluZm8uY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUluZm8uY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGRJZHggPSBub2RlSW5mby5jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBsaWIubm9kZXNbY2hpbGRJZHhdO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgX3BhcnNlQW5pbWF0aW9uczogZnVuY3Rpb24gKGpzb24sIGxpYikge1xyXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrQ2hhbm5lbFBhdGgoY2hhbm5lbEluZm8pIHtcclxuICAgICAgICAgICAgaWYgKGNoYW5uZWxJbmZvLnBhdGggPT09ICd3ZWlnaHRzJykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdHTFRGTG9hZGVyIG5vdCBzdXBwb3J0IG1vcnBoIHRhcmdldHMgeWV0LicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZ2V0Q2hhbm5lbEhhc2goY2hhbm5lbEluZm8sIGFuaW1hdGlvbkluZm8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNoYW5uZWxJbmZvLnRhcmdldC5ub2RlICsgJ18nICsgYW5pbWF0aW9uSW5mby5zYW1wbGVyc1tjaGFubmVsSW5mby5zYW1wbGVyXS5pbnB1dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0aW1lQWNjZXNzb3JNdWx0aXBsaWVkID0ge307XHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24uYW5pbWF0aW9ucywgZnVuY3Rpb24gKGFuaW1hdGlvbkluZm8sIGlkeCkge1xyXG4gICAgICAgICAgICB2YXIgY2hhbm5lbHMgPSBhbmltYXRpb25JbmZvLmNoYW5uZWxzLmZpbHRlcihjaGVja0NoYW5uZWxQYXRoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghY2hhbm5lbHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHRyYWNrcyA9IHt9O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5uZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbEluZm8gPSBjaGFubmVsc1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBjaGFubmVsSGFzaCA9IGdldENoYW5uZWxIYXNoKGNoYW5uZWxJbmZvLCBhbmltYXRpb25JbmZvKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0Tm9kZSA9IGxpYi5ub2Rlc1tjaGFubmVsSW5mby50YXJnZXQubm9kZV07XHJcbiAgICAgICAgICAgICAgICB2YXIgdHJhY2sgPSB0cmFja3NbY2hhbm5lbEhhc2hdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNhbXBsZXJJbmZvID0gYW5pbWF0aW9uSW5mby5zYW1wbGVyc1tjaGFubmVsSW5mby5zYW1wbGVyXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRyYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhY2sgPSB0cmFja3NbY2hhbm5lbEhhc2hdID0gbmV3IFNhbXBsZXJUcmFjayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRhcmdldE5vZGUgPyB0YXJnZXROb2RlLm5hbWUgOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXROb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhY2sudGFyZ2V0Tm9kZUluZGV4ID0gY2hhbm5lbEluZm8udGFyZ2V0Lm5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhY2suY2hhbm5lbHMudGltZSA9IGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIHNhbXBsZXJJbmZvLmlucHV0KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZnJhbWVMZW4gPSB0cmFjay5jaGFubmVscy50aW1lLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRpbWVBY2Nlc3Nvck11bHRpcGxpZWRbc2FtcGxlckluZm8uaW5wdXRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgZnJhbWVMZW47IGsrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suY2hhbm5lbHMudGltZVtrXSAqPSAxMDAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVBY2Nlc3Nvck11bHRpcGxpZWRbc2FtcGxlckluZm8uaW5wdXRdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGludGVycG9sYXRpb24gPSBzYW1wbGVySW5mby5pbnRlcnBvbGF0aW9uIHx8ICdMSU5FQVInO1xyXG4gICAgICAgICAgICAgICAgaWYgKGludGVycG9sYXRpb24gIT09ICdMSU5FQVInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdHTFRGTG9hZGVyIG9ubHkgc3VwcG9ydCBMSU5FQVIgaW50ZXJwb2xhdGlvbi4nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcGF0aCA9IGNoYW5uZWxJbmZvLnRhcmdldC5wYXRoO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhdGggPT09ICd0cmFuc2xhdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gJ3Bvc2l0aW9uJztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0cmFjay5jaGFubmVsc1twYXRoXSA9IGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIHNhbXBsZXJJbmZvLm91dHB1dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHRyYWNrc0xpc3QgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaGFzaCBpbiB0cmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRyYWNrc0xpc3QucHVzaCh0cmFja3NbaGFzaF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gbmV3IFRyYWNrQ2xpcCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBhbmltYXRpb25JbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBsb29wOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgdHJhY2tzOiB0cmFja3NMaXN0XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsaWIuY2xpcHMucHVzaChjbGlwKTtcclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcblxyXG4gICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICB2YXIgbWF4TGlmZSA9IGxpYi5jbGlwcy5yZWR1Y2UoZnVuY3Rpb24gKG1heFRpbWUsIGNsaXApIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KG1heFRpbWUsIGNsaXAubGlmZSk7XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgbGliLmNsaXBzLmZvckVhY2goZnVuY3Rpb24gKGNsaXApIHtcclxuICAgICAgICAgICAgY2xpcC5saWZlID0gbWF4TGlmZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpYi5jbGlwcztcclxuICAgIH1cclxufSk7XHJcblxyXG5HTFRGTG9hZGVyLmdlbmVyYXRlTWVzaE5hbWUgPSBmdW5jdGlvbiAobWVzaGVzLCBpZHgsIHByaW1pdGl2ZUlkeCkge1xyXG4gICAgdmFyIG1lc2hJbmZvID0gbWVzaGVzW2lkeF07XHJcbiAgICB2YXIgbWVzaE5hbWUgPSBtZXNoSW5mby5uYW1lIHx8ICgnbWVzaF8nICsgaWR4KTtcclxuICAgIHJldHVybiBwcmltaXRpdmVJZHggPT09IDAgPyBtZXNoTmFtZSA6IChtZXNoTmFtZSArICckJyArIHByaW1pdGl2ZUlkeCk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHTFRGTG9hZGVyO1xyXG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsXHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICpcclxuICogQGV4YW1wbGVcclxuICogICAgIHZhciBsaWdodCA9IG5ldyBjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsKHtcclxuICogICAgICAgICBpbnRlbnNpdHk6IDAuNSxcclxuICogICAgICAgICBjb2xvcjogWzEuMCwgMC4wLCAwLjBdXHJcbiAqICAgICB9KTtcclxuICogICAgIGxpZ2h0LnBvc2l0aW9uLnNldCgxMCwgMTAsIDEwKTtcclxuICogICAgIGxpZ2h0Lmxvb2tBdChjbGF5LlZlY3RvcjMuWkVSTyk7XHJcbiAqICAgICBzY2VuZS5hZGQobGlnaHQpO1xyXG4gKi9cclxudmFyIERpcmVjdGlvbmFsTGlnaHQgPSBMaWdodC5leHRlbmQoLyoqIEBsZW5kcyBjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNoYWRvd0JpYXM6IDAuMDAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzaGFkb3dTbG9wZVNjYWxlOiAyLjAsXHJcbiAgICAvKipcclxuICAgICAqIFNoYWRvdyBjYXNjYWRlLlxyXG4gICAgICogVXNlIFBTU00gdGVjaG5pcXVlIHdoZW4gaXQgaXMgbGFyZ2VyIHRoYW4gMSBhbmQgaGF2ZSBhIHVuaXF1ZSBkaXJlY3Rpb25hbCBsaWdodCBpbiBzY2VuZS5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNoYWRvd0Nhc2NhZGU6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdmFpbGFibGUgd2hlbiBzaGFkb3dDYXNjYWRlIGlzIGxhcmdlciB0aGFuIDEgYW5kIGhhdmUgYSB1bmlxdWUgZGlyZWN0aW9uYWwgbGlnaHQgaW4gc2NlbmUuXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjYXNjYWRlU3BsaXRMb2dGYWN0b3I6IDAuMlxyXG59LCB7XHJcblxyXG4gICAgdHlwZTogJ0RJUkVDVElPTkFMX0xJR0hUJyxcclxuXHJcbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XHJcbiAgICAgICAgZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5fX2RpciA9IGluc3RhbmNlLl9fZGlyIHx8IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBEaXJlY3Rpb24gaXMgdGFyZ2V0IHRvIGV5ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLl9fZGlyLmNvcHkoaW5zdGFuY2Uud29ybGRUcmFuc2Zvcm0ueikubm9ybWFsaXplKCkubmVnYXRlKCkuYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGRpcmVjdGlvbmFsTGlnaHRDb2xvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBpbnN0YW5jZS5jb2xvcjtcclxuICAgICAgICAgICAgICAgIHZhciBpbnRlbnNpdHkgPSBpbnN0YW5jZS5pbnRlbnNpdHk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW2NvbG9yWzBdICogaW50ZW5zaXR5LCBjb2xvclsxXSAqIGludGVuc2l0eSwgY29sb3JbMl0gKiBpbnRlbnNpdHldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5EaXJlY3Rpb25hbH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsaWdodCA9IExpZ2h0LnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGxpZ2h0LnNoYWRvd0JpYXMgPSB0aGlzLnNoYWRvd0JpYXM7XHJcbiAgICAgICAgbGlnaHQuc2hhZG93U2xvcGVTY2FsZSA9IHRoaXMuc2hhZG93U2xvcGVTY2FsZTtcclxuICAgICAgICByZXR1cm4gbGlnaHQ7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRGlyZWN0aW9uYWxMaWdodDtcclxuIiwiaW1wb3J0IExpZ2h0IGZyb20gJy4uL0xpZ2h0JztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5saWdodC5Qb2ludFxyXG4gKiBAZXh0ZW5kcyBjbGF5LkxpZ2h0XHJcbiAqL1xyXG52YXIgUG9pbnRMaWdodCA9IExpZ2h0LmV4dGVuZCgvKiogQGxlbmRzIGNsYXkubGlnaHQuUG9pbnQjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcmFuZ2U6IDEwMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNhc3RTaGFkb3c6IGZhbHNlXHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnUE9JTlRfTElHSFQnLFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBwb2ludExpZ2h0UG9zaXRpb246IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0V29ybGRQb3NpdGlvbigpLmFycmF5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwb2ludExpZ2h0UmFuZ2U6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmFuZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvaW50TGlnaHRDb2xvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0gKiBpbnRlbnNpdHksIGNvbG9yWzFdICogaW50ZW5zaXR5LCBjb2xvclsyXSAqIGludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmxpZ2h0LlBvaW50fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuUG9pbnQucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgbGlnaHQgPSBMaWdodC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgICAgICBsaWdodC5yYW5nZSA9IHRoaXMucmFuZ2U7XHJcbiAgICAgICAgcmV0dXJuIGxpZ2h0O1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBvaW50TGlnaHQ7XHJcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuU3BvdFxyXG4gKiBAZXh0ZW5kcyBjbGF5LkxpZ2h0XHJcbiAqL1xyXG52YXIgU3BvdExpZ2h0ID0gTGlnaHQuZXh0ZW5kKC8qKkBsZW5kcyBjbGF5LmxpZ2h0LlNwb3QgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYW5nZTogMjAsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHVtYnJhQW5nbGU6IDMwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBwZW51bWJyYUFuZ2xlOiA0NSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZmFsbG9mZkZhY3RvcjogMi4wLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzaGFkb3dCaWFzOiAwLjAwMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2hhZG93U2xvcGVTY2FsZTogMi4wXHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnU1BPVF9MSUdIVCcsXHJcblxyXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xyXG4gICAgICAgIHNwb3RMaWdodFBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwb3RMaWdodFJhbmdlOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5yYW5nZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BvdExpZ2h0VW1icmFBbmdsZUNvc2luZToge1xyXG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5jb3MoaW5zdGFuY2UudW1icmFBbmdsZSAqIE1hdGguUEkgLyAxODApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzcG90TGlnaHRQZW51bWJyYUFuZ2xlQ29zaW5lOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmNvcyhpbnN0YW5jZS5wZW51bWJyYUFuZ2xlICogTWF0aC5QSSAvIDE4MCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwb3RMaWdodEZhbGxvZmZGYWN0b3I6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmZhbGxvZmZGYWN0b3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwb3RMaWdodERpcmVjdGlvbjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5fX2RpciA9IGluc3RhbmNlLl9fZGlyIHx8IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBEaXJlY3Rpb24gaXMgdGFyZ2V0IHRvIGV5ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLl9fZGlyLmNvcHkoaW5zdGFuY2Uud29ybGRUcmFuc2Zvcm0ueikubmVnYXRlKCkuYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwb3RMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0gKiBpbnRlbnNpdHksIGNvbG9yWzFdICogaW50ZW5zaXR5LCBjb2xvclsyXSAqIGludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmxpZ2h0LlNwb3R9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5TcG90LnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsaWdodCA9IExpZ2h0LnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGxpZ2h0LnJhbmdlID0gdGhpcy5yYW5nZTtcclxuICAgICAgICBsaWdodC51bWJyYUFuZ2xlID0gdGhpcy51bWJyYUFuZ2xlO1xyXG4gICAgICAgIGxpZ2h0LnBlbnVtYnJhQW5nbGUgPSB0aGlzLnBlbnVtYnJhQW5nbGU7XHJcbiAgICAgICAgbGlnaHQuZmFsbG9mZkZhY3RvciA9IHRoaXMuZmFsbG9mZkZhY3RvcjtcclxuICAgICAgICBsaWdodC5zaGFkb3dCaWFzID0gdGhpcy5zaGFkb3dCaWFzO1xyXG4gICAgICAgIGxpZ2h0LnNoYWRvd1Nsb3BlU2NhbGUgPSB0aGlzLnNoYWRvd1Nsb3BlU2NhbGU7XHJcbiAgICAgICAgcmV0dXJuIGxpZ2h0O1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNwb3RMaWdodDtcclxuIiwiaW1wb3J0IExpZ2h0IGZyb20gJy4uL0xpZ2h0JztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5saWdodC5BbWJpZW50XHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICovXHJcbnZhciBBbWJpZW50TGlnaHQgPSBMaWdodC5leHRlbmQoe1xyXG5cclxuICAgIGNhc3RTaGFkb3c6IGZhbHNlXHJcblxyXG59LCB7XHJcblxyXG4gICAgdHlwZTogJ0FNQklFTlRfTElHSFQnLFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBhbWJpZW50TGlnaHRDb2xvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0qaW50ZW5zaXR5LCBjb2xvclsxXSppbnRlbnNpdHksIGNvbG9yWzJdKmludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQG5hbWUgY2xvbmVcclxuICAgICAqIEByZXR1cm4ge2NsYXkubGlnaHQuQW1iaWVudH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LkFtYmllbnQucHJvdG90eXBlXHJcbiAgICAgKi9cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBbWJpZW50TGlnaHQ7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmVDdWJlIGZyb20gJy4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgQ2FjaGUgZnJvbSAnLi9jb3JlL0NhY2hlJztcclxuXHJcbnZhciBLRVlfRlJBTUVCVUZGRVIgPSAnZnJhbWVidWZmZXInO1xyXG52YXIgS0VZX1JFTkRFUkJVRkZFUiA9ICdyZW5kZXJidWZmZXInO1xyXG52YXIgS0VZX1JFTkRFUkJVRkZFUl9XSURUSCA9IEtFWV9SRU5ERVJCVUZGRVIgKyAnX3dpZHRoJztcclxudmFyIEtFWV9SRU5ERVJCVUZGRVJfSEVJR0hUID0gS0VZX1JFTkRFUkJVRkZFUiArICdfaGVpZ2h0JztcclxudmFyIEtFWV9SRU5ERVJCVUZGRVJfQVRUQUNIRUQgPSBLRVlfUkVOREVSQlVGRkVSICsgJ19hdHRhY2hlZCc7XHJcbnZhciBLRVlfREVQVEhURVhUVVJFX0FUVEFDSEVEID0gJ2RlcHRodGV4dHVyZV9hdHRhY2hlZCc7XHJcblxyXG52YXIgR0xfRlJBTUVCVUZGRVIgPSBnbGVudW0uRlJBTUVCVUZGRVI7XHJcbnZhciBHTF9SRU5ERVJCVUZGRVIgPSBnbGVudW0uUkVOREVSQlVGRkVSO1xyXG52YXIgR0xfREVQVEhfQVRUQUNITUVOVCA9IGdsZW51bS5ERVBUSF9BVFRBQ0hNRU5UO1xyXG52YXIgR0xfQ09MT1JfQVRUQUNITUVOVDAgPSBnbGVudW0uQ09MT1JfQVRUQUNITUVOVDA7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5GcmFtZUJ1ZmZlclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEZyYW1lQnVmZmVyID0gQmFzZS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5GcmFtZUJ1ZmZlciMgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB1c2UgZGVwdGggYnVmZmVyXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgZGVwdGhCdWZmZXI6IHRydWUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICovXHJcbiAgICB2aWV3cG9ydDogbnVsbCxcclxuXHJcbiAgICBfd2lkdGg6IDAsXHJcbiAgICBfaGVpZ2h0OiAwLFxyXG5cclxuICAgIF90ZXh0dXJlczogbnVsbCxcclxuXHJcbiAgICBfYm91bmRSZW5kZXJlcjogbnVsbCxcclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gVXNlIGNhY2hlXHJcbiAgICB0aGlzLl9jYWNoZSA9IG5ldyBDYWNoZSgpO1xyXG5cclxuICAgIHRoaXMuX3RleHR1cmVzID0ge307XHJcbn0sXHJcblxyXG4vKipAbGVuZHMgY2xheS5GcmFtZUJ1ZmZlci5wcm90b3R5cGUuICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogR2V0IGF0dGFjaGVkIHRleHR1cmUgd2lkdGhcclxuICAgICAqIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIC8vIEZJWE1FIENhbid0IHVzZSBiZWZvcmUgI2JpbmRcclxuICAgIGdldFRleHR1cmVXaWR0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYXR0YWNoZWQgdGV4dHVyZSBoZWlnaHRcclxuICAgICAqIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldFRleHR1cmVIZWlnaHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJpbmQgdGhlIGZyYW1lYnVmZmVyIHRvIGdpdmVuIHJlbmRlcmVyIGJlZm9yZSByZW5kZXJpbmdcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGJpbmQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG5cclxuICAgICAgICBpZiAocmVuZGVyZXIuX19jdXJyZW50RnJhbWVCdWZmZXIpIHtcclxuICAgICAgICAgICAgLy8gQWxyZWFkeSBib3VuZFxyXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIuX19jdXJyZW50RnJhbWVCdWZmZXIgPT09IHRoaXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdSZW5kZXJlciBhbHJlYWR5IGJvdW5kIHdpdGggYW5vdGhlciBmcmFtZWJ1ZmZlci4gVW5iaW5kIGl0IGZpcnN0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlbmRlcmVyLl9fY3VycmVudEZyYW1lQnVmZmVyID0gdGhpcztcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICBfZ2wuYmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCB0aGlzLl9nZXRGcmFtZUJ1ZmZlckdMKHJlbmRlcmVyKSk7XHJcbiAgICAgICAgdGhpcy5fYm91bmRSZW5kZXJlciA9IHJlbmRlcmVyO1xyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG5cclxuICAgICAgICBjYWNoZS5wdXQoJ3ZpZXdwb3J0JywgcmVuZGVyZXIudmlld3BvcnQpO1xyXG5cclxuICAgICAgICB2YXIgaGFzVGV4dHVyZUF0dGFjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIHdpZHRoO1xyXG4gICAgICAgIHZhciBoZWlnaHQ7XHJcbiAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLl90ZXh0dXJlcykge1xyXG4gICAgICAgICAgICBoYXNUZXh0dXJlQXR0YWNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF07XHJcbiAgICAgICAgICAgIGlmIChvYmopIHtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gRG8gd2lkdGgsIGhlaWdodCBjaGVja2luZywgbWFrZSBzdXJlIHNpemUgYXJlIHNhbWVcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gb2JqLnRleHR1cmUud2lkdGg7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBvYmoudGV4dHVyZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAvLyBBdHRhY2ggdGV4dHVyZXNcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RvQXR0YWNoKHJlbmRlcmVyLCBvYmoudGV4dHVyZSwgYXR0YWNobWVudCwgb2JqLnRhcmdldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAoIWhhc1RleHR1cmVBdHRhY2hlZCAmJiB0aGlzLmRlcHRoQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ011c3QgYXR0YWNoIHRleHR1cmUgYmVmb3JlIGJpbmQsIG9yIHJlbmRlcmJ1ZmZlciBtYXkgaGF2ZSBpbmNvcnJlY3Qgd2lkdGggYW5kIGhlaWdodC4nKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmlld3BvcnQpIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodGhpcy52aWV3cG9ydCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCgwLCAwLCB3aWR0aCwgaGVpZ2h0LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBhdHRhY2hlZFRleHR1cmVzID0gY2FjaGUuZ2V0KCdhdHRhY2hlZF90ZXh0dXJlcycpO1xyXG4gICAgICAgIGlmIChhdHRhY2hlZFRleHR1cmVzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gYXR0YWNoZWRUZXh0dXJlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvRGV0YWNoKF9nbCwgYXR0YWNobWVudCwgdGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWNhY2hlLmdldChLRVlfREVQVEhURVhUVVJFX0FUVEFDSEVEKSAmJiB0aGlzLmRlcHRoQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyByZW5kZXIgYnVmZmVyXHJcbiAgICAgICAgICAgIGlmIChjYWNoZS5taXNzKEtFWV9SRU5ERVJCVUZGRVIpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUiwgX2dsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcmVuZGVyYnVmZmVyID0gY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSBjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUl9XSURUSClcclxuICAgICAgICAgICAgICAgICAgICB8fCBoZWlnaHQgIT09IGNhY2hlLmdldChLRVlfUkVOREVSQlVGRkVSX0hFSUdIVCkpIHtcclxuICAgICAgICAgICAgICAgIF9nbC5iaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIF9nbC5yZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgX2dsLkRFUFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSX1dJRFRILCB3aWR0aCk7XHJcbiAgICAgICAgICAgICAgICBjYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUl9IRUlHSFQsIGhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICBfZ2wuYmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVJfQVRUQUNIRUQpKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSX0FUVEFDSEVELCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVbmJpbmQgdGhlIGZyYW1lIGJ1ZmZlciBhZnRlciByZW5kZXJpbmdcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIHVuYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIHN0YXR1cyByZWNvcmQgb24gcmVuZGVyZXJcclxuICAgICAgICByZW5kZXJlci5fX2N1cnJlbnRGcmFtZUJ1ZmZlciA9IG51bGw7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgX2dsLmJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbnVsbCk7XHJcbiAgICAgICAgdGhpcy5fYm91bmRSZW5kZXJlciA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuX2NhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcclxuICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLl9jYWNoZS5nZXQoJ3ZpZXdwb3J0Jyk7XHJcbiAgICAgICAgLy8gUmVzZXQgdmlld3BvcnQ7XHJcbiAgICAgICAgaWYgKHZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KHZpZXdwb3J0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlTWlwbWFwKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gQmVjYXVzZSB0aGUgZGF0YSBvZiB0ZXh0dXJlIGlzIGNoYW5nZWQgb3ZlciB0aW1lLFxyXG4gICAgLy8gSGVyZSB1cGRhdGUgdGhlIG1pcG1hcHMgb2YgdGV4dHVyZSBlYWNoIHRpbWUgYWZ0ZXIgcmVuZGVyZWQ7XHJcbiAgICB1cGRhdGVNaXBtYXA6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMuX3RleHR1cmVzKSB7XHJcbiAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XTtcclxuICAgICAgICAgICAgaWYgKG9iaikge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBvYmoudGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIC8vIEZJWE1FIHNvbWUgdGV4dHVyZSBmb3JtYXQgY2FuJ3QgZ2VuZXJhdGUgbWlwbWFwXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUuTlBPVCAmJiB0ZXh0dXJlLnVzZU1pcG1hcFxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRleHR1cmUubWluRmlsdGVyID09PSBUZXh0dXJlLkxJTkVBUl9NSVBNQVBfTElORUFSKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRleHR1cmUudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlQ3ViZScgPyBnbGVudW0uVEVYVFVSRV9DVUJFX01BUCA6IGdsZW51bS5URVhUVVJFXzJEO1xyXG4gICAgICAgICAgICAgICAgICAgIF9nbC5iaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUuZ2V0V2ViR0xUZXh0dXJlKHJlbmRlcmVyKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRUZXh0dXJlKHRhcmdldCwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyAweDhDRDUsIDM2MDUzLCBGUkFNRUJVRkZFUl9DT01QTEVURVxyXG4gICAgLy8gMHg4Q0Q2LCAzNjA1NCwgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UXHJcbiAgICAvLyAweDhDRDcsIDM2MDU1LCBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVFxyXG4gICAgLy8gMHg4Q0Q5LCAzNjA1NywgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TXHJcbiAgICAvLyAweDhDREQsIDM2MDYxLCBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRFxyXG4gICAgY2hlY2tTdGF0dXM6IGZ1bmN0aW9uIChfZ2wpIHtcclxuICAgICAgICByZXR1cm4gX2dsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZ2V0RnJhbWVCdWZmZXJHTDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG5cclxuICAgICAgICBpZiAoY2FjaGUubWlzcyhLRVlfRlJBTUVCVUZGRVIpKSB7XHJcbiAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfRlJBTUVCVUZGRVIsIHJlbmRlcmVyLmdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNhY2hlLmdldChLRVlfRlJBTUVCVUZGRVIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEF0dGFjaCBhIHRleHR1cmUoUlRUKSB0byB0aGUgZnJhbWVidWZmZXJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZX0gdGV4dHVyZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbYXR0YWNobWVudD1nbC5DT0xPUl9BVFRBQ0hNRU5UMF1cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW3RhcmdldD1nbC5URVhUVVJFXzJEXVxyXG4gICAgICovXHJcbiAgICBhdHRhY2g6IGZ1bmN0aW9uICh0ZXh0dXJlLCBhdHRhY2htZW50LCB0YXJnZXQpIHtcclxuXHJcbiAgICAgICAgaWYgKCF0ZXh0dXJlLndpZHRoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHRleHR1cmUgYXR0YWNoZWQgdG8gY29sb3IgYnVmZmVyIGlzIG5vdCBhIHZhbGlkLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPIHdpZHRoIGFuZCBoZWlnaHQgY2hlY2tcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIGRlcHRoX3RleHR1cmUgZXh0ZW5zaW9uIGlzIGVuYWJsZWQsIGRldmVsb3BlcnNcclxuICAgICAgICAvLyBDYW4gYXR0YWNoIGEgZGVwdGggdGV4dHVyZSB0byB0aGUgZGVwdGggYnVmZmVyXHJcbiAgICAgICAgLy8gaHR0cDovL2Jsb2cudG9qaWNvZGUuY29tLzIwMTIvMDcvdXNpbmctd2ViZ2xkZXB0aHRleHR1cmUuaHRtbFxyXG4gICAgICAgIGF0dGFjaG1lbnQgPSBhdHRhY2htZW50IHx8IEdMX0NPTE9SX0FUVEFDSE1FTlQwO1xyXG4gICAgICAgIHRhcmdldCA9IHRhcmdldCB8fCBnbGVudW0uVEVYVFVSRV8yRDtcclxuXHJcbiAgICAgICAgdmFyIGJvdW5kUmVuZGVyZXIgPSB0aGlzLl9ib3VuZFJlbmRlcmVyO1xyXG4gICAgICAgIHZhciBfZ2wgPSBib3VuZFJlbmRlcmVyICYmIGJvdW5kUmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXM7XHJcblxyXG4gICAgICAgIGlmIChfZ2wpIHtcclxuICAgICAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcbiAgICAgICAgICAgIGNhY2hlLnVzZShib3VuZFJlbmRlcmVyLl9fdWlkX18pO1xyXG4gICAgICAgICAgICBhdHRhY2hlZFRleHR1cmVzID0gY2FjaGUuZ2V0KCdhdHRhY2hlZF90ZXh0dXJlcycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGV4dHVyZSBhdHRhY2hlZFxyXG4gICAgICAgIHZhciBwcmV2aW91cyA9IHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgIGlmIChwcmV2aW91cyAmJiBwcmV2aW91cy50YXJnZXQgPT09IHRhcmdldFxyXG4gICAgICAgICAgICAmJiBwcmV2aW91cy50ZXh0dXJlID09PSB0ZXh0dXJlXHJcbiAgICAgICAgICAgICYmIChhdHRhY2hlZFRleHR1cmVzICYmIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0gIT0gbnVsbClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNhbkF0dGFjaCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGJvdW5kUmVuZGVyZXIpIHtcclxuICAgICAgICAgICAgY2FuQXR0YWNoID0gdGhpcy5fZG9BdHRhY2goYm91bmRSZW5kZXJlciwgdGV4dHVyZSwgYXR0YWNobWVudCwgdGFyZ2V0KTtcclxuICAgICAgICAgICAgLy8gU2V0IHZpZXdwb3J0IGFnYWluIGluY2FzZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgc2l6ZSB0ZXh0dXJlcy5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLnZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgICAgICBib3VuZFJlbmRlcmVyLnNldFZpZXdwb3J0KDAsIDAsIHRleHR1cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNhbkF0dGFjaCkge1xyXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XSA9IHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdIHx8IHt9O1xyXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XS50ZXh0dXJlID0gdGV4dHVyZTtcclxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF0udGFyZ2V0ID0gdGFyZ2V0O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2RvQXR0YWNoOiBmdW5jdGlvbiAocmVuZGVyZXIsIHRleHR1cmUsIGF0dGFjaG1lbnQsIHRhcmdldCkge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICAvLyBNYWtlIHN1cmUgdGV4dHVyZSBpcyBhbHdheXMgdXBkYXRlZFxyXG4gICAgICAgIC8vIEJlY2F1c2UgdGV4dHVyZSB3aWR0aCBvciBoZWlnaHQgbWF5IGJlIGNoYW5nZWQgYW5kIGluIHRoaXMgd2UgY2FuJ3QgYmUgbm90aWZpZWRcclxuICAgICAgICAvLyBGSVhNRSBhd2t3YXJkO1xyXG4gICAgICAgIHZhciB3ZWJnbFRleHR1cmUgPSB0ZXh0dXJlLmdldFdlYkdMVGV4dHVyZShyZW5kZXJlcik7XHJcbiAgICAgICAgLy8gQXNzdW1lIGNhY2hlIGhhcyBiZWVuIHVzZWQuXHJcbiAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXMgPSB0aGlzLl9jYWNoZS5nZXQoJ2F0dGFjaGVkX3RleHR1cmVzJyk7XHJcbiAgICAgICAgaWYgKGF0dGFjaGVkVGV4dHVyZXMgJiYgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSkge1xyXG4gICAgICAgICAgICB2YXIgb2JqID0gYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XTtcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGV4dHVyZSBhbmQgdGFyZ2V0IG5vdCBjaGFuZ2VkXHJcbiAgICAgICAgICAgIGlmIChvYmoudGV4dHVyZSA9PT0gdGV4dHVyZSAmJiBvYmoudGFyZ2V0ID09PSB0YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhdHRhY2htZW50ID0gK2F0dGFjaG1lbnQ7XHJcblxyXG4gICAgICAgIHZhciBjYW5BdHRhY2ggPSB0cnVlO1xyXG4gICAgICAgIGlmIChhdHRhY2htZW50ID09PSBHTF9ERVBUSF9BVFRBQ0hNRU5UIHx8IGF0dGFjaG1lbnQgPT09IGdsZW51bS5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpIHtcclxuICAgICAgICAgICAgdmFyIGV4dGVuc2lvbiA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdXRUJHTF9kZXB0aF90ZXh0dXJlJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWV4dGVuc2lvbikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRGVwdGggdGV4dHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyJyk7XHJcbiAgICAgICAgICAgICAgICBjYW5BdHRhY2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGV4dHVyZS5mb3JtYXQgIT09IGdsZW51bS5ERVBUSF9DT01QT05FTlRcclxuICAgICAgICAgICAgICAgICYmIHRleHR1cmUuZm9ybWF0ICE9PSBnbGVudW0uREVQVEhfU1RFTkNJTFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSB0ZXh0dXJlIGF0dGFjaGVkIHRvIGRlcHRoIGJ1ZmZlciBpcyBub3QgYSB2YWxpZC4nKTtcclxuICAgICAgICAgICAgICAgIGNhbkF0dGFjaCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBEaXNwb3NlIHJlbmRlciBidWZmZXIgY3JlYXRlZCBwcmV2aW91c1xyXG4gICAgICAgICAgICBpZiAoY2FuQXR0YWNoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVuZGVyYnVmZmVyID0gdGhpcy5fY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIF9nbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUucHV0KEtFWV9SRU5ERVJCVUZGRVIsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUl9BVFRBQ0hFRCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUucHV0KEtFWV9ERVBUSFRFWFRVUkVfQVRUQUNIRUQsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBNaXBtYXAgbGV2ZWwgY2FuIG9ubHkgYmUgMFxyXG4gICAgICAgIF9nbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgYXR0YWNobWVudCwgdGFyZ2V0LCB3ZWJnbFRleHR1cmUsIDApO1xyXG5cclxuICAgICAgICBpZiAoIWF0dGFjaGVkVGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgYXR0YWNoZWRUZXh0dXJlcyA9IHt9O1xyXG4gICAgICAgICAgICB0aGlzLl9jYWNoZS5wdXQoJ2F0dGFjaGVkX3RleHR1cmVzJywgYXR0YWNoZWRUZXh0dXJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0gPSBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdIHx8IHt9O1xyXG4gICAgICAgIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0udGV4dHVyZSA9IHRleHR1cmU7XHJcbiAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XS50YXJnZXQgPSB0YXJnZXQ7XHJcblxyXG4gICAgICAgIHJldHVybiBjYW5BdHRhY2g7XHJcbiAgICB9LFxyXG5cclxuICAgIF9kb0RldGFjaDogZnVuY3Rpb24gKF9nbCwgYXR0YWNobWVudCwgdGFyZ2V0KSB7XHJcbiAgICAgICAgLy8gRGV0YWNoIGEgdGV4dHVyZSBmcm9tIGZyYW1lYnVmZmVyXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9XZWJHTC9ibG9iL21hc3Rlci9jb25mb3JtYW5jZS1zdWl0ZXMvMS4wLjAvY29uZm9ybWFuY2UvZnJhbWVidWZmZXItdGVzdC5odG1sI0wxNDVcclxuICAgICAgICBfZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQsIHRhcmdldCwgbnVsbCwgMCk7XHJcblxyXG4gICAgICAgIC8vIEFzc3VtZSBjYWNoZSBoYXMgYmVlbiB1c2VkLlxyXG4gICAgICAgIHZhciBhdHRhY2hlZFRleHR1cmVzID0gdGhpcy5fY2FjaGUuZ2V0KCdhdHRhY2hlZF90ZXh0dXJlcycpO1xyXG4gICAgICAgIGlmIChhdHRhY2hlZFRleHR1cmVzICYmIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0pIHtcclxuICAgICAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYXR0YWNobWVudCA9PT0gR0xfREVQVEhfQVRUQUNITUVOVCB8fCBhdHRhY2htZW50ID09PSBnbGVudW0uREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlLnB1dChLRVlfREVQVEhURVhUVVJFX0FUVEFDSEVELCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERldGFjaCBhIHRleHR1cmVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW2F0dGFjaG1lbnQ9Z2wuQ09MT1JfQVRUQUNITUVOVDBdXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFt0YXJnZXQ9Z2wuVEVYVFVSRV8yRF1cclxuICAgICAqL1xyXG4gICAgZGV0YWNoOiBmdW5jdGlvbiAoYXR0YWNobWVudCwgdGFyZ2V0KSB7XHJcbiAgICAgICAgLy8gVE9ETyBkZXB0aCBleHRlbnNpb24gY2hlY2sgP1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5fYm91bmRSZW5kZXJlcikge1xyXG4gICAgICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICAgICAgY2FjaGUudXNlKHRoaXMuX2JvdW5kUmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RvRGV0YWNoKHRoaXMuX2JvdW5kUmVuZGVyZXIuZ2wsIGF0dGFjaG1lbnQsIHRhcmdldCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZVxyXG4gICAgICogQHBhcmFtICB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBfZ2xcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuXHJcbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG5cclxuICAgICAgICB2YXIgcmVuZGVyQnVmZmVyID0gY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVIpO1xyXG4gICAgICAgIGlmIChyZW5kZXJCdWZmZXIpIHtcclxuICAgICAgICAgICAgX2dsLmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5kZXJCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZnJhbWVCdWZmZXIgPSBjYWNoZS5nZXQoS0VZX0ZSQU1FQlVGRkVSKTtcclxuICAgICAgICBpZiAoZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICAgICAgX2dsLmRlbGV0ZUZyYW1lYnVmZmVyKGZyYW1lQnVmZmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FjaGUuZGVsZXRlQ29udGV4dChyZW5kZXJlci5fX3VpZF9fKTtcclxuXHJcbiAgICAgICAgLy8gQ2xlYXIgY2FjaGUgZm9yIHJldXNpbmdcclxuICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IHt9O1xyXG5cclxuICAgIH1cclxufSk7XHJcblxyXG5GcmFtZUJ1ZmZlci5ERVBUSF9BVFRBQ0hNRU5UID0gR0xfREVQVEhfQVRUQUNITUVOVDtcclxuRnJhbWVCdWZmZXIuQ09MT1JfQVRUQUNITUVOVDAgPSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDtcclxuRnJhbWVCdWZmZXIuU1RFTkNJTF9BVFRBQ0hNRU5UID0gZ2xlbnVtLlNURU5DSUxfQVRUQUNITUVOVDtcclxuRnJhbWVCdWZmZXIuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UID0gZ2xlbnVtLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZyYW1lQnVmZmVyO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkIDogVEVYQ09PUkRfMDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52b2lkIG1haW4oKVxcbntcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkO1xcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBPcnRob0NhbWVyYSBmcm9tICcuLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcclxuaW1wb3J0IFBsYW5lIGZyb20gJy4uL2dlb21ldHJ5L1BsYW5lJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCB2ZXJ0ZXhHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci92ZXJ0ZXguZ2xzbC5qcyc7XHJcblxyXG5TaGFkZXJbJ2ltcG9ydCddKHZlcnRleEdsc2wpO1xyXG5cclxudmFyIHBsYW5lR2VvID0gbmV3IFBsYW5lKCk7XHJcbnZhciBtZXNoID0gbmV3IE1lc2goe1xyXG4gICAgZ2VvbWV0cnk6IHBsYW5lR2VvLFxyXG4gICAgZnJ1c3R1bUN1bGxpbmc6IGZhbHNlXHJcbn0pO1xyXG52YXIgY2FtZXJhID0gbmV3IE9ydGhvQ2FtZXJhKCk7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5QYXNzXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgUGFzcyA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5QYXNzIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRnJhZ21lbnQgc2hhZGVyIHN0cmluZ1xyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgLy8gUEVORElORyBzaGFkZXIgb3IgZnJhZ21lbnQgP1xyXG4gICAgICAgIGZyYWdtZW50OiAnJyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvdXRwdXRzOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5NYXRlcmlhbH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXRlcmlhbDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYmxlbmRXaXRoUHJldmlvdXM6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGVhckNvbG9yOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xlYXJEZXB0aDogdHJ1ZVxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLnZlcnRleCcpLCB0aGlzLmZyYWdtZW50KTtcclxuICAgIHZhciBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgc2hhZGVyOiBzaGFkZXJcclxuICAgIH0pO1xyXG4gICAgbWF0ZXJpYWwuZW5hYmxlVGV4dHVyZXNBbGwoKTtcclxuXHJcbiAgICB0aGlzLm1hdGVyaWFsID0gbWF0ZXJpYWw7XHJcblxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5QYXNzLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge30gdmFsdWVcclxuICAgICAqL1xyXG4gICAgc2V0VW5pZm9ybTogZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLnNldFVuaWZvcm0obmFtZSwgdmFsdWUpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHt9XHJcbiAgICAgKi9cclxuICAgIGdldFVuaWZvcm06IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgICB2YXIgdW5pZm9ybSA9IHRoaXMubWF0ZXJpYWwudW5pZm9ybXNbbmFtZV07XHJcbiAgICAgICAgaWYgKHVuaWZvcm0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuaWZvcm0udmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSB0ZXh0dXJlXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGF0dGFjaG1lbnRcclxuICAgICAqL1xyXG4gICAgYXR0YWNoT3V0cHV0OiBmdW5jdGlvbih0ZXh0dXJlLCBhdHRhY2htZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgdGhpcy5vdXRwdXRzID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF0dGFjaG1lbnQgPSBhdHRhY2htZW50IHx8IGdsZW51bS5DT0xPUl9BVFRBQ0hNRU5UMDtcclxuICAgICAgICB0aGlzLm91dHB1dHNbYXR0YWNobWVudF0gPSB0ZXh0dXJlO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSB0ZXh0dXJlXHJcbiAgICAgKi9cclxuICAgIGRldGFjaE91dHB1dDogZnVuY3Rpb24odGV4dHVyZSkge1xyXG4gICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dHNbYXR0YWNobWVudF0gPT09IHRleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0c1thdHRhY2htZW50XSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGJpbmQ6IGZ1bmN0aW9uKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcikge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMub3V0cHV0c1thdHRhY2htZW50XTtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUsIGF0dGFjaG1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICB1bmJpbmQ6IGZ1bmN0aW9uKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgIGZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtICB7Y2xheS5GcmFtZUJ1ZmZlcn0gW2ZyYW1lQnVmZmVyXVxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcikge1xyXG5cclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIGlmIChmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgICAgICB0aGlzLmJpbmQocmVuZGVyZXIsIGZyYW1lQnVmZmVyKTtcclxuICAgICAgICAgICAgLy8gTVJUIFN1cHBvcnQgaW4gY2hyb21lXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3Nkay90ZXN0cy9jb25mb3JtYW5jZS9leHRlbnNpb25zL2V4dC1kcmF3LWJ1ZmZlcnMuaHRtbFxyXG4gICAgICAgICAgICB2YXIgZXh0ID0gcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oJ0VYVF9kcmF3X2J1ZmZlcnMnKTtcclxuICAgICAgICAgICAgaWYgKGV4dCAmJiB0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBidWZzID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMub3V0cHV0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQgPSArYXR0YWNobWVudDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBfZ2wuQ09MT1JfQVRUQUNITUVOVDAgJiYgYXR0YWNobWVudCA8PSBfZ2wuQ09MT1JfQVRUQUNITUVOVDAgKyA4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZnMucHVzaChhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBleHQuZHJhd0J1ZmZlcnNFWFQoYnVmcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYmVmb3JlcmVuZGVyJywgdGhpcywgcmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAvLyBGSVhNRSBEb24ndCBjbGVhciBpbiBlYWNoIHBhc3MgaW4gZGVmYXVsdCwgbGV0IHRoZSBjb2xvciBvdmVyd3JpdGUgdGhlIGJ1ZmZlclxyXG4gICAgICAgIC8vIEZJWE1FIHBpeGVscyBtYXkgYmUgZGlzY2FyZFxyXG4gICAgICAgIHZhciBjbGVhckJpdCA9IHRoaXMuY2xlYXJEZXB0aCA/IF9nbC5ERVBUSF9CVUZGRVJfQklUIDogMDtcclxuICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmNsZWFyQ29sb3IpIHtcclxuICAgICAgICAgICAgY2xlYXJCaXQgPSBjbGVhckJpdCB8IF9nbC5DT0xPUl9CVUZGRVJfQklUO1xyXG4gICAgICAgICAgICBfZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgICB2YXIgY2MgPSB0aGlzLmNsZWFyQ29sb3I7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNjKSkge1xyXG4gICAgICAgICAgICAgICAgX2dsLmNsZWFyQ29sb3IoY2NbMF0sIGNjWzFdLCBjY1syXSwgY2NbM10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9nbC5jbGVhcihjbGVhckJpdCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmJsZW5kV2l0aFByZXZpb3VzKSB7XHJcbiAgICAgICAgICAgIC8vIEJsZW5kIHdpdGggcHJldmlvdXMgcmVuZGVyZWQgc2NlbmUgaW4gdGhlIGZpbmFsIG91dHB1dFxyXG4gICAgICAgICAgICAvLyBGSVhNRSBDb25maWd1cmUgYmxlbmQuXHJcbiAgICAgICAgICAgIC8vIEZJWE1FIEl0IHdpbGwgY2F1c2Ugc2NyZWVuIGJsaW5r77yfXHJcbiAgICAgICAgICAgIF9nbC5lbmFibGUoX2dsLkJMRU5EKTtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC50cmFuc3BhcmVudCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBfZ2wuZGlzYWJsZShfZ2wuQkxFTkQpO1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnRyYW5zcGFyZW50ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlbmRlclF1YWQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2FmdGVycmVuZGVyJywgdGhpcywgcmVuZGVyZXIpO1xyXG5cclxuICAgICAgICBpZiAoZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICAgICAgdGhpcy51bmJpbmQocmVuZGVyZXIsIGZyYW1lQnVmZmVyKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2ltcGx5IGRvIHF1YWQgcmVuZGVyaW5nXHJcbiAgICAgKi9cclxuICAgIHJlbmRlclF1YWQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIG1lc2gubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoW21lc2hdLCBjYW1lcmEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge31cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQYXNzO1xyXG4iLCIvLyBUT0RPIFNob3VsZCBub3QgZGVyaXZlZCBmcm9tIG1lc2g/XHJcbmltcG9ydCBNZXNoIGZyb20gJy4uL01lc2gnO1xyXG5pbXBvcnQgQ3ViZUdlb21ldHJ5IGZyb20gJy4uL2dlb21ldHJ5L0N1YmUnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcclxuXHJcbmltcG9ydCBza3lib3hFc3NsIGZyb20gJy4uL3NoYWRlci9zb3VyY2Uvc2t5Ym94Lmdsc2wuanMnO1xyXG5TaGFkZXIuaW1wb3J0KHNreWJveEVzc2wpO1xyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGx1Z2luLlNreWJveFxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgdmFyIHNreVRleCA9IG5ldyBjbGF5LlRleHR1cmVDdWJlKCk7XHJcbiAqICAgICBza3lUZXgubG9hZCh7XHJcbiAqICAgICAgICAgJ3B4JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHguanBnJyxcclxuICogICAgICAgICAnbngnOiAnYXNzZXRzL3RleHR1cmVzL3NreS9ueC5qcGcnXHJcbiAqICAgICAgICAgJ3B5JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHkuanBnJ1xyXG4gKiAgICAgICAgICdueSc6ICdhc3NldHMvdGV4dHVyZXMvc2t5L255LmpwZydcclxuICogICAgICAgICAncHonOiAnYXNzZXRzL3RleHR1cmVzL3NreS9wei5qcGcnXHJcbiAqICAgICAgICAgJ256JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvbnouanBnJ1xyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgc2t5Ym94ID0gbmV3IGNsYXkucGx1Z2luLlNreWJveCh7XHJcbiAqICAgICAgICAgc2NlbmU6IHNjZW5lXHJcbiAqICAgICB9KTtcclxuICogICAgIHNreWJveC5tYXRlcmlhbC5zZXQoJ2Vudmlyb25tZW50TWFwJywgc2t5VGV4KTtcclxuICovXHJcbnZhciBTa3lib3ggPSBNZXNoLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIHNreWJveFNoYWRlciA9IG5ldyBTaGFkZXIoe1xyXG4gICAgICAgIHZlcnRleDogU2hhZGVyLnNvdXJjZSgnY2xheS5za3lib3gudmVydGV4JyksXHJcbiAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkuc2t5Ym94LmZyYWdtZW50JylcclxuICAgIH0pO1xyXG4gICAgdmFyIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICBzaGFkZXI6IHNreWJveFNoYWRlcixcclxuICAgICAgICBkZXB0aE1hc2s6IGZhbHNlXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlNjZW5lfVxyXG4gICAgICAgICAqIEBtZW1iZXJPZiBjbGF5LnBsdWdpbi5Ta3lib3gucHJvdG90eXBlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2NlbmU6IG51bGwsXHJcblxyXG4gICAgICAgIGdlb21ldHJ5OiBuZXcgQ3ViZUdlb21ldHJ5KCksXHJcblxyXG4gICAgICAgIG1hdGVyaWFsOiBtYXRlcmlhbCxcclxuXHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIGN1bGxpbmc6IGZhbHNlLFxyXG5cclxuICAgICAgICBfZHVtbXlDYW1lcmE6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgc2NlbmUgPSB0aGlzLnNjZW5lO1xyXG4gICAgaWYgKHNjZW5lKSB7XHJcbiAgICAgICAgdGhpcy5hdHRhY2hTY2VuZShzY2VuZSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudE1hcCkge1xyXG4gICAgICAgIHRoaXMuc2V0RW52aXJvbm1lbnRNYXAodGhpcy5lbnZpcm9ubWVudE1hcCk7XHJcbiAgICB9XHJcbn0sIC8qKiBAbGVuZHMgY2xheS5wbHVnaW4uU2t5Ym94IyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEF0dGFjaCB0aGUgc2t5Ym94IHRvIHRoZSBzY2VuZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICAgICAqL1xyXG4gICAgYXR0YWNoU2NlbmU6IGZ1bmN0aW9uIChzY2VuZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWNoU2NlbmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2NlbmUuc2t5Ym94ID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG4gICAgICAgIHNjZW5lLm9uKCdiZWZvcmVyZW5kZXInLCB0aGlzLl9iZWZvcmVSZW5kZXJTY2VuZSwgdGhpcyk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRhY2ggZnJvbSBzY2VuZVxyXG4gICAgICovXHJcbiAgICBkZXRhY2hTY2VuZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUub2ZmKCdiZWZvcmVyZW5kZXInLCB0aGlzLl9iZWZvcmVSZW5kZXJTY2VuZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc2t5Ym94ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBza3lib3hcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHRoaXMuZGV0YWNoU2NlbmUoKTtcclxuICAgICAgICB0aGlzLmdlb21ldHJ5LmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU2V0IGVudmlyb25tZW50IG1hcFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlRleHR1cmVDdWJlfSBlbnZNYXBcclxuICAgICAqL1xyXG4gICAgc2V0RW52aXJvbm1lbnRNYXA6IGZ1bmN0aW9uIChlbnZNYXApIHtcclxuICAgICAgICBpZiAoZW52TWFwLnRleHR1cmVUeXBlID09PSAndGV4dHVyZTJEJykge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLmRlZmluZSgnRVFVSVJFQ1RBTkdVTEFSJyk7XHJcbiAgICAgICAgICAgIC8vIExJTkVBUiBmaWx0ZXIgY2FuIHJlbW92ZSB0aGUgYXJ0aWZhY3RzIGluIHBvbGVcclxuICAgICAgICAgICAgZW52TWFwLm1pbkZpbHRlciA9IFRleHR1cmUuTElORUFSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC51bmRlZmluZSgnRVFVSVJFQ1RBTkdVTEFSJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwuc2V0KCdlbnZpcm9ubWVudE1hcCcsIGVudk1hcCk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZW52aXJvbm1lbnQgbWFwXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmVDdWJlfVxyXG4gICAgICovXHJcbiAgICBnZXRFbnZpcm9ubWVudE1hcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hdGVyaWFsLmdldCgnZW52aXJvbm1lbnRNYXAnKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2JlZm9yZVJlbmRlclNjZW5lOiBmdW5jdGlvbihyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyU2t5Ym94KHJlbmRlcmVyLCBjYW1lcmEpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW5kZXJTa3lib3g6IGZ1bmN0aW9uIChyZW5kZXJlciwgY2FtZXJhKSB7XHJcbiAgICAgICAgdmFyIGR1bW15Q2FtZXJhID0gdGhpcy5fZHVtbXlDYW1lcmE7XHJcbiAgICAgICAgZHVtbXlDYW1lcmEuYXNwZWN0ID0gcmVuZGVyZXIuZ2V0Vmlld3BvcnRBc3BlY3QoKTtcclxuICAgICAgICBkdW1teUNhbWVyYS5mb3YgPSBjYW1lcmEuZm92IHx8IDUwO1xyXG4gICAgICAgIGR1bW15Q2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICAgICAgICBNYXRyaXg0LmludmVydChkdW1teUNhbWVyYS5pbnZQcm9qZWN0aW9uTWF0cml4LCBkdW1teUNhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICBkdW1teUNhbWVyYS53b3JsZFRyYW5zZm9ybS5jb3B5KGNhbWVyYS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgZHVtbXlDYW1lcmEudmlld01hdHJpeC5jb3B5KGNhbWVyYS52aWV3TWF0cml4KTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbi5jb3B5KGNhbWVyYS5nZXRXb3JsZFBvc2l0aW9uKCkpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIC8vIERvbid0IHJlbWVtYmVyIHRvIGRpc2FibGUgYmxlbmRcclxuICAgICAgICByZW5kZXJlci5nbC5kaXNhYmxlKHJlbmRlcmVyLmdsLkJMRU5EKTtcclxuICAgICAgICBpZiAodGhpcy5tYXRlcmlhbC5nZXQoJ2xvZCcpID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnTE9EJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdMT0QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhbdGhpc10sIGR1bW15Q2FtZXJhKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTa3lib3g7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tICcuLi9jYW1lcmEvUGVyc3BlY3RpdmUnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5cclxudmFyIHRhcmdldHMgPSBbJ3B4JywgJ254JywgJ3B5JywgJ255JywgJ3B6JywgJ256J107XHJcblxyXG4vKipcclxuICogUGFzcyByZW5kZXJpbmcgc2NlbmUgdG8gYSBlbnZpcm9ubWVudCBjdWJlIG1hcFxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wcmVQYXNzLkVudmlyb25tZW50TWFwXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICAvLyBFeGFtcGxlIG9mIGNhciByZWZsZWN0aW9uXHJcbiAqICAgICB2YXIgZW52TWFwID0gbmV3IGNsYXkuVGV4dHVyZUN1YmUoe1xyXG4gKiAgICAgICAgIHdpZHRoOiAyNTYsXHJcbiAqICAgICAgICAgaGVpZ2h0OiAyNTZcclxuICogICAgIH0pO1xyXG4gKiAgICAgdmFyIGVudlBhc3MgPSBuZXcgY2xheS5wcmVQYXNzLkVudmlyb25tZW50TWFwKHtcclxuICogICAgICAgICBwb3NpdGlvbjogY2FyLnBvc2l0aW9uLFxyXG4gKiAgICAgICAgIHRleHR1cmU6IGVudk1hcFxyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgY2FyQm9keSA9IGNhci5nZXRDaGlsZEJ5TmFtZSgnYm9keScpO1xyXG4gKiAgICAgY2FyQm9keS5tYXRlcmlhbC5lbmFibGVUZXh0dXJlKCdlbnZpcm9ubWVudE1hcCcpO1xyXG4gKiAgICAgY2FyQm9keS5tYXRlcmlhbC5zZXQoJ2Vudmlyb25tZW50TWFwJywgZW52TWFwKTtcclxuICogICAgIC4uLlxyXG4gKiAgICAgYW5pbWF0aW9uLm9uKCdmcmFtZScsIGZ1bmN0aW9uKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgIGVudlBhc3MucmVuZGVyKHJlbmRlcmVyLCBzY2VuZSk7XHJcbiAqICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xyXG4gKiAgICAgfSk7XHJcbiAqL1xyXG52YXIgRW52aXJvbm1lbnRNYXBQYXNzID0gQmFzZS5leHRlbmQoZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgcmV0ID0gLyoqIEBsZW5kcyBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW1lcmEgcG9zaXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcG9zaXRpb246IG5ldyBWZWN0b3IzKCksXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FtZXJhIGZhciBwbGFuZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCNcclxuICAgICAgICAgKi9cclxuICAgICAgICBmYXI6IDEwMDAsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FtZXJhIG5lYXIgcGxhbmVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbmVhcjogMC4xLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEVudmlyb25tZW50IGN1YmUgbWFwXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZUN1YmV9XHJcbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCNcclxuICAgICAgICAgKi9cclxuICAgICAgICB0ZXh0dXJlOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBVc2VkIGlmIHlvdSB3YW4ndCBoYXZlIHNoYWRvdyBpbiBlbnZpcm9ubWVudCBtYXBcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5wcmVQYXNzLlNoYWRvd01hcH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzaGFkb3dNYXBQYXNzOiBudWxsLFxyXG4gICAgfTtcclxuICAgIHZhciBjYW1lcmFzID0gcmV0Ll9jYW1lcmFzID0ge1xyXG4gICAgICAgIHB4OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxyXG4gICAgICAgIG54OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxyXG4gICAgICAgIHB5OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxyXG4gICAgICAgIG55OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxyXG4gICAgICAgIHB6OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxyXG4gICAgICAgIG56OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pXHJcbiAgICB9O1xyXG4gICAgY2FtZXJhcy5weC5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9YLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgY2FtZXJhcy5ueC5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9YLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgY2FtZXJhcy5weS5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9ZLCBWZWN0b3IzLlBPU0lUSVZFX1opO1xyXG4gICAgY2FtZXJhcy5ueS5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9ZLCBWZWN0b3IzLk5FR0FUSVZFX1opO1xyXG4gICAgY2FtZXJhcy5wei5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9aLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgY2FtZXJhcy5uei5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9aLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG5cclxuICAgIC8vIEZJWE1FIEluIHdpbmRvd3MsIHVzZSBvbmUgZnJhbWVidWZmZXIgb25seSByZW5kZXJzIG9uZSBzaWRlIG9mIGN1YmVtYXBcclxuICAgIHJldC5fZnJhbWVCdWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcclxuXHJcbiAgICByZXR1cm4gcmV0O1xyXG59LCAgLyoqIEBsZW5kcyBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSB0YXJnZXRcclxuICAgICAqIEByZXR1cm4gIHtjbGF5LkNhbWVyYX1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FtZXJhOiBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbWVyYXNbdGFyZ2V0XTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlNjZW5lfSBzY2VuZVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW25vdFVwZGF0ZVNjZW5lPWZhbHNlXVxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uKHJlbmRlcmVyLCBzY2VuZSwgbm90VXBkYXRlU2NlbmUpIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgaWYgKCFub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgICAgICBzY2VuZS51cGRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVHdlYWsgZm92XHJcbiAgICAgICAgLy8gaHR0cDovL3RoZS13aXRuZXNzLm5ldC9uZXdzLzIwMTIvMDIvc2VhbWxlc3MtY3ViZS1tYXAtZmlsdGVyaW5nL1xyXG4gICAgICAgIHZhciBuID0gdGhpcy50ZXh0dXJlLndpZHRoO1xyXG4gICAgICAgIHZhciBmb3YgPSAyICogTWF0aC5hdGFuKG4gLyAobiAtIDAuNSkpIC8gTWF0aC5QSSAqIDE4MDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRhcmdldHNbaV07XHJcbiAgICAgICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLl9jYW1lcmFzW3RhcmdldF07XHJcbiAgICAgICAgICAgIFZlY3RvcjMuY29weShjYW1lcmEucG9zaXRpb24sIHRoaXMucG9zaXRpb24pO1xyXG5cclxuICAgICAgICAgICAgY2FtZXJhLmZhciA9IHRoaXMuZmFyO1xyXG4gICAgICAgICAgICBjYW1lcmEubmVhciA9IHRoaXMubmVhcjtcclxuICAgICAgICAgICAgY2FtZXJhLmZvdiA9IGZvdjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNoYWRvd01hcFBhc3MpIHtcclxuICAgICAgICAgICAgICAgIGNhbWVyYS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgYm91bmRpbmdCb3hMYXN0RnJhbWVcclxuICAgICAgICAgICAgICAgIHZhciBiYm94ID0gc2NlbmUuZ2V0Qm91bmRpbmdCb3goKTtcclxuICAgICAgICAgICAgICAgIGJib3guYXBwbHlUcmFuc2Zvcm0oY2FtZXJhLnZpZXdNYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgc2NlbmUudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lLmNvcHkoYmJveCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFkb3dNYXBQYXNzLnJlbmRlcihyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlLCBfZ2wuQ09MT1JfQVRUQUNITUVOVDAsXHJcbiAgICAgICAgICAgICAgICBfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEsIHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRW52aXJvbm1lbnRNYXBQYXNzO1xyXG4iLCJpbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi4vVGV4dHVyZUN1YmUnO1xyXG5cclxuLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9iYjk0Mzk5MSh2PXZzLjg1KS5hc3B4XHJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90b2ppL3dlYmdsLXRleHR1cmUtdXRpbHMvYmxvYi9tYXN0ZXIvdGV4dHVyZS11dGlsL2Rkcy5qc1xyXG52YXIgRERTX01BR0lDID0gMHgyMDUzNDQ0NDtcclxuXHJcbnZhciBERFNEX0NBUFMgPSAweDE7XHJcbnZhciBERFNEX0hFSUdIVCA9IDB4MjtcclxudmFyIEREU0RfV0lEVEggPSAweDQ7XHJcbnZhciBERFNEX1BJVENIID0gMHg4O1xyXG52YXIgRERTRF9QSVhFTEZPUk1BVCA9IDB4MTAwMDtcclxudmFyIEREU0RfTUlQTUFQQ09VTlQgPSAweDIwMDAwO1xyXG52YXIgRERTRF9MSU5FQVJTSVpFID0gMHg4MDAwMDtcclxudmFyIEREU0RfREVQVEggPSAweDgwMDAwMDtcclxuXHJcbnZhciBERFNDQVBTX0NPTVBMRVggPSAweDg7XHJcbnZhciBERFNDQVBTX01JUE1BUCA9IDB4NDAwMDAwO1xyXG52YXIgRERTQ0FQU19URVhUVVJFID0gMHgxMDAwO1xyXG5cclxudmFyIEREU0NBUFMyX0NVQkVNQVAgPSAweDIwMDtcclxudmFyIEREU0NBUFMyX0NVQkVNQVBfUE9TSVRJVkVYID0gMHg0MDA7XHJcbnZhciBERFNDQVBTMl9DVUJFTUFQX05FR0FUSVZFWCA9IDB4ODAwO1xyXG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9QT1NJVElWRVkgPSAweDEwMDA7XHJcbnZhciBERFNDQVBTMl9DVUJFTUFQX05FR0FUSVZFWSA9IDB4MjAwMDtcclxudmFyIEREU0NBUFMyX0NVQkVNQVBfUE9TSVRJVkVaID0gMHg0MDAwO1xyXG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9ORUdBVElWRVogPSAweDgwMDA7XHJcbnZhciBERFNDQVBTMl9WT0xVTUUgPSAweDIwMDAwMDtcclxuXHJcbnZhciBERFBGX0FMUEhBUElYRUxTID0gMHgxO1xyXG52YXIgRERQRl9BTFBIQSA9IDB4MjtcclxudmFyIEREUEZfRk9VUkNDID0gMHg0O1xyXG52YXIgRERQRl9SR0IgPSAweDQwO1xyXG52YXIgRERQRl9ZVVYgPSAweDIwMDtcclxudmFyIEREUEZfTFVNSU5BTkNFID0gMHgyMDAwMDtcclxuXHJcbmZ1bmN0aW9uIGZvdXJDQ1RvSW50MzIodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZS5jaGFyQ29kZUF0KDApICtcclxuICAgICAgICAodmFsdWUuY2hhckNvZGVBdCgxKSA8PCA4KSArXHJcbiAgICAgICAgKHZhbHVlLmNoYXJDb2RlQXQoMikgPDwgMTYpICtcclxuICAgICAgICAodmFsdWUuY2hhckNvZGVBdCgzKSA8PCAyNCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGludDMyVG9Gb3VyQ0ModmFsdWUpIHtcclxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFxyXG4gICAgICAgIHZhbHVlICYgMHhmZixcclxuICAgICAgICAodmFsdWUgPj4gOCkgJiAweGZmLFxyXG4gICAgICAgICh2YWx1ZSA+PiAxNikgJiAweGZmLFxyXG4gICAgICAgICh2YWx1ZSA+PiAyNCkgJiAweGZmXHJcbiAgICApO1xyXG59XHJcblxyXG52YXIgaGVhZGVyTGVuZ3RoSW50ID0gMzE7IC8vIFRoZSBoZWFkZXIgbGVuZ3RoIGluIDMyIGJpdCBpbnRzXHJcblxyXG52YXIgRk9VUkNDX0RYVDEgPSBmb3VyQ0NUb0ludDMyKCdEWFQxJyk7XHJcbnZhciBGT1VSQ0NfRFhUMyA9IGZvdXJDQ1RvSW50MzIoJ0RYVDMnKTtcclxudmFyIEZPVVJDQ19EWFQ1ID0gZm91ckNDVG9JbnQzMignRFhUNScpO1xyXG4vLyBPZmZzZXRzIGludG8gdGhlIGhlYWRlciBhcnJheVxyXG52YXIgb2ZmX21hZ2ljID0gMDtcclxuXHJcbnZhciBvZmZfc2l6ZSA9IDE7XHJcbnZhciBvZmZfZmxhZ3MgPSAyO1xyXG52YXIgb2ZmX2hlaWdodCA9IDM7XHJcbnZhciBvZmZfd2lkdGggPSA0O1xyXG5cclxudmFyIG9mZl9taXBtYXBDb3VudCA9IDc7XHJcblxyXG52YXIgb2ZmX3BmRmxhZ3MgPSAyMDtcclxudmFyIG9mZl9wZkZvdXJDQyA9IDIxO1xyXG5cclxudmFyIG9mZl9jYXBzID0gMjc7XHJcbnZhciBvZmZfY2FwczIgPSAyODtcclxudmFyIG9mZl9jYXBzMyA9IDI5O1xyXG52YXIgb2ZmX2NhcHM0ID0gMzA7XHJcblxyXG52YXIgcmV0ID0ge1xyXG4gICAgcGFyc2U6IGZ1bmN0aW9uKGFycmF5QnVmZmVyLCBvdXQpIHtcclxuICAgICAgICB2YXIgaGVhZGVyID0gbmV3IEludDMyQXJyYXkoYXJyYXlCdWZmZXIsIDAsIGhlYWRlckxlbmd0aEludCk7XHJcbiAgICAgICAgaWYgKGhlYWRlcltvZmZfbWFnaWNdICE9PSBERFNfTUFHSUMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaGVhZGVyKG9mZl9wZkZsYWdzKSAmIEREUEZfRk9VUkNDKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGZvdXJDQyA9IGhlYWRlcihvZmZfcGZGb3VyQ0MpO1xyXG4gICAgICAgIHZhciB3aWR0aCA9IGhlYWRlcltvZmZfd2lkdGhdO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSBoZWFkZXJbb2ZmX2hlaWdodF07XHJcbiAgICAgICAgdmFyIGlzQ3ViZU1hcCA9IGhlYWRlcltvZmZfY2FwczJdICYgRERTQ0FQUzJfQ1VCRU1BUDtcclxuICAgICAgICB2YXIgaGFzTWlwbWFwID0gaGVhZGVyW29mZl9mbGFnc10gJiBERFNEX01JUE1BUENPVU5UO1xyXG4gICAgICAgIHZhciBibG9ja0J5dGVzLCBpbnRlcm5hbEZvcm1hdDtcclxuICAgICAgICBzd2l0Y2goZm91ckNDKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRk9VUkNDX0RYVDE6XHJcbiAgICAgICAgICAgICAgICBibG9ja0J5dGVzID0gODtcclxuICAgICAgICAgICAgICAgIGludGVybmFsRm9ybWF0ID0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRk9VUkNDX0RYVDM6XHJcbiAgICAgICAgICAgICAgICBibG9ja0J5dGVzID0gMTY7XHJcbiAgICAgICAgICAgICAgICBpbnRlcm5hbEZvcm1hdCA9IFRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBGT1VSQ0NfRFhUNTpcclxuICAgICAgICAgICAgICAgIGJsb2NrQnl0ZXMgPSAxNjtcclxuICAgICAgICAgICAgICAgIGludGVybmFsRm9ybWF0ID0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBkYXRhT2Zmc2V0ID0gaGVhZGVyW29mZl9zaXplXSArIDQ7XHJcbiAgICAgICAgLy8gVE9ETzogU3VwcG9zZSBhbGwgZmFjZSBhcmUgZXhpc3RlZFxyXG4gICAgICAgIHZhciBmYWNlTnVtYmVyID0gaXNDdWJlTWFwID8gNiA6IDE7XHJcbiAgICAgICAgdmFyIG1pcG1hcENvdW50ID0gMTtcclxuICAgICAgICBpZiAoaGFzTWlwbWFwKSB7XHJcbiAgICAgICAgICAgIG1pcG1hcENvdW50ID0gTWF0aC5tYXgoMSwgaGVhZGVyW29mZl9taXBtYXBDb3VudF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRleHR1cmVzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBmYWNlTnVtYmVyOyBmKyspIHtcclxuICAgICAgICAgICAgdmFyIF93aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgICB2YXIgX2hlaWdodCA9IGhlaWdodDtcclxuICAgICAgICAgICAgdGV4dHVyZXNbZl0gPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBfd2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IF9oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IGludGVybmFsRm9ybWF0XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgbWlwbWFwcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pcG1hcENvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBkYXRhTGVuZ3RoID0gTWF0aC5tYXgoNCwgX3dpZHRoKSAvIDQgKiBNYXRoLm1heCg0LCBfaGVpZ2h0KSAvIDQgKiBibG9ja0J5dGVzO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyLCBkYXRhT2Zmc2V0LCBkYXRhTGVuZ3RoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkYXRhT2Zmc2V0ICs9IGRhdGFMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBfd2lkdGggKj0gMC41O1xyXG4gICAgICAgICAgICAgICAgX2hlaWdodCAqPSAwLjU7XHJcbiAgICAgICAgICAgICAgICBtaXBtYXBzW2ldID0gYnl0ZUFycmF5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRleHR1cmVzW2ZdLnBpeGVscyA9IG1pcG1hcHNbMF07XHJcbiAgICAgICAgICAgIGlmIChoYXNNaXBtYXApIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmVzW2ZdLm1pcG1hcHMgPSBtaXBtYXBzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICAvLyByZXR1cm4gaXNDdWJlTWFwID8gdGV4dHVyZXMgOiB0ZXh0dXJlc1swXTtcclxuICAgICAgICBpZiAob3V0KSB7XHJcbiAgICAgICAgICAgIG91dC53aWR0aCA9IHRleHR1cmVzWzBdLndpZHRoO1xyXG4gICAgICAgICAgICBvdXQuaGVpZ2h0ID0gdGV4dHVyZXNbMF0uaGVpZ2h0O1xyXG4gICAgICAgICAgICBvdXQuZm9ybWF0ID0gdGV4dHVyZXNbMF0uZm9ybWF0O1xyXG4gICAgICAgICAgICBvdXQucGl4ZWxzID0gdGV4dHVyZXNbMF0ucGl4ZWxzO1xyXG4gICAgICAgICAgICBvdXQubWlwbWFwcyA9IHRleHR1cmVzWzBdLm1pcG1hcHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZXNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgcmV0O1xyXG4iLCJpbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG52YXIgdG9DaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcclxuXHJcbnZhciBNSU5FTEVOID0gODtcclxudmFyIE1BWEVMRU4gPSAweDdmZmY7XHJcbmZ1bmN0aW9uIHJnYmUyZmxvYXQocmdiZSwgYnVmZmVyLCBvZmZzZXQsIGV4cG9zdXJlKSB7XHJcbiAgICBpZiAocmdiZVszXSA+IDApIHtcclxuICAgICAgICB2YXIgZiA9IE1hdGgucG93KDIuMCwgcmdiZVszXSAtIDEyOCAtIDggKyBleHBvc3VyZSk7XHJcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDBdID0gcmdiZVswXSAqIGY7XHJcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDFdID0gcmdiZVsxXSAqIGY7XHJcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDJdID0gcmdiZVsyXSAqIGY7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMF0gPSAwO1xyXG4gICAgICAgIGJ1ZmZlcltvZmZzZXQgKyAxXSA9IDA7XHJcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDJdID0gMDtcclxuICAgIH1cclxuICAgIGJ1ZmZlcltvZmZzZXQgKyAzXSA9IDEuMDtcclxuICAgIHJldHVybiBidWZmZXI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVpbnQ4MnN0cmluZyhhcnJheSwgb2Zmc2V0LCBzaXplKSB7XHJcbiAgICB2YXIgc3RyID0gJyc7XHJcbiAgICBmb3IgKHZhciBpID0gb2Zmc2V0OyBpIDwgc2l6ZTsgaSsrKSB7XHJcbiAgICAgICAgc3RyICs9IHRvQ2hhcihhcnJheVtpXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb3B5cmdiZShzLCB0KSB7XHJcbiAgICB0WzBdID0gc1swXTtcclxuICAgIHRbMV0gPSBzWzFdO1xyXG4gICAgdFsyXSA9IHNbMl07XHJcbiAgICB0WzNdID0gc1szXTtcclxufVxyXG5cclxuLy8gVE9ETyA6IGNoZWNrXHJcbmZ1bmN0aW9uIG9sZFJlYWRDb2xvcnMoc2NhbiwgYnVmZmVyLCBvZmZzZXQsIHhtYXgpIHtcclxuICAgIHZhciByc2hpZnQgPSAwLCB4ID0gMCwgbGVuID0geG1heDtcclxuICAgIHdoaWxlIChsZW4gPiAwKSB7XHJcbiAgICAgICAgc2Nhblt4XVswXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgc2Nhblt4XVsxXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgc2Nhblt4XVsyXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgc2Nhblt4XVszXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgaWYgKHNjYW5beF1bMF0gPT09IDEgJiYgc2Nhblt4XVsxXSA9PT0gMSAmJiBzY2FuW3hdWzJdID09PSAxKSB7XHJcbiAgICAgICAgICAgIC8vIGV4cCBpcyBjb3VudCBvZiByZXBlYXRlZCBwaXhlbHNcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IChzY2FuW3hdWzNdIDw8IHJzaGlmdCkgPj4+IDA7IGkgPiAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgIGNvcHlyZ2JlKHNjYW5beC0xXSwgc2Nhblt4XSk7XHJcbiAgICAgICAgICAgICAgICB4Kys7XHJcbiAgICAgICAgICAgICAgICBsZW4tLTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByc2hpZnQgKz0gODtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB4Kys7XHJcbiAgICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgICByc2hpZnQgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvZmZzZXQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlYWRDb2xvcnMoc2NhbiwgYnVmZmVyLCBvZmZzZXQsIHhtYXgpIHtcclxuICAgIGlmICgoeG1heCA8IE1JTkVMRU4pIHwgKHhtYXggPiBNQVhFTEVOKSkge1xyXG4gICAgICAgIHJldHVybiBvbGRSZWFkQ29sb3JzKHNjYW4sIGJ1ZmZlciwgb2Zmc2V0LCB4bWF4KTtcclxuICAgIH1cclxuICAgIHZhciBpID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgIGlmIChpICE9IDIpIHtcclxuICAgICAgICByZXR1cm4gb2xkUmVhZENvbG9ycyhzY2FuLCBidWZmZXIsIG9mZnNldCAtIDEsIHhtYXgpO1xyXG4gICAgfVxyXG4gICAgc2NhblswXVsxXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICBzY2FuWzBdWzJdID0gYnVmZmVyW29mZnNldCsrXTtcclxuXHJcbiAgICBpID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgIGlmICgoKChzY2FuWzBdWzJdIDw8IDgpID4+PiAwKSB8IGkpID4+PiAwICE9PSB4bWF4KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xyXG4gICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgeG1heDspIHtcclxuICAgICAgICAgICAgdmFyIGNvZGUgPSBidWZmZXJbb2Zmc2V0KytdO1xyXG4gICAgICAgICAgICBpZiAoY29kZSA+IDEyOCkge1xyXG4gICAgICAgICAgICAgICAgY29kZSA9IChjb2RlICYgMTI3KSA+Pj4gMDtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBidWZmZXJbb2Zmc2V0KytdO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvZGUtLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjYW5beCsrXVtpXSA9IHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChjb2RlLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICBzY2FuW3grK11baV0gPSBidWZmZXJbb2Zmc2V0KytdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9mZnNldDtcclxufVxyXG5cclxuXHJcbnZhciByZXQgPSB7XHJcbiAgICAvLyBodHRwOi8vd3d3LmdyYXBoaWNzLmNvcm5lbGwuZWR1L35iancvcmdiZS5odG1sXHJcbiAgICAvLyBCbGVuZGVyIHNvdXJjZVxyXG4gICAgLy8gaHR0cDovL3JhZHNpdGUubGJsLmdvdi9yYWRpYW5jZS9yZWZlci9Ob3Rlcy9waWN0dXJlX2Zvcm1hdC5odG1sXHJcbiAgICBwYXJzZVJHQkU6IGZ1bmN0aW9uKGFycmF5QnVmZmVyLCB0ZXh0dXJlLCBleHBvc3VyZSkge1xyXG4gICAgICAgIGlmIChleHBvc3VyZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGV4cG9zdXJlID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRhdGEgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7XHJcbiAgICAgICAgdmFyIHNpemUgPSBkYXRhLmxlbmd0aDtcclxuICAgICAgICBpZiAodWludDgyc3RyaW5nKGRhdGEsIDAsIDIpICE9PSAnIz8nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZmluZCBlbXB0eSBsaW5lLCBuZXh0IGxpbmUgaXMgcmVzb2x1dGlvbiBpbmZvXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPCBzaXplOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRvQ2hhcihkYXRhW2ldKSA9PT0gJ1xcbicgJiYgdG9DaGFyKGRhdGFbaSsxXSkgPT09ICdcXG4nKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaSA+PSBzaXplKSB7IC8vIG5vdCBmb3VuZFxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGZpbmQgcmVzb2x1dGlvbiBpbmZvIGxpbmVcclxuICAgICAgICBpICs9IDI7XHJcbiAgICAgICAgdmFyIHN0ciA9ICcnO1xyXG4gICAgICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBfY2hhciA9IHRvQ2hhcihkYXRhW2ldKTtcclxuICAgICAgICAgICAgaWYgKF9jaGFyID09PSAnXFxuJykge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3RyICs9IF9jaGFyO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAtWSBNICtYIE5cclxuICAgICAgICB2YXIgdG1wID0gc3RyLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IHBhcnNlSW50KHRtcFsxXSk7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gcGFyc2VJbnQodG1wWzNdKTtcclxuICAgICAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVhZCBhbmQgZGVjb2RlIGFjdHVhbCBkYXRhXHJcbiAgICAgICAgdmFyIG9mZnNldCA9IGkrMTtcclxuICAgICAgICB2YXIgc2NhbmxpbmUgPSBbXTtcclxuICAgICAgICAvLyBtZW16ZXJvXHJcbiAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XHJcbiAgICAgICAgICAgIHNjYW5saW5lW3hdID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBzY2FubGluZVt4XVtqXSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBpeGVscyA9IG5ldyBGbG9hdDMyQXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTtcclxuICAgICAgICB2YXIgb2Zmc2V0MiA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZENvbG9ycyhzY2FubGluZSwgZGF0YSwgb2Zmc2V0LCB3aWR0aCk7XHJcbiAgICAgICAgICAgIGlmICghb2Zmc2V0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcclxuICAgICAgICAgICAgICAgIHJnYmUyZmxvYXQoc2NhbmxpbmVbeF0sIHBpeGVscywgb2Zmc2V0MiwgZXhwb3N1cmUpO1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0MiArPSA0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRleHR1cmUpIHtcclxuICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGV4dHVyZS53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgIHRleHR1cmUucGl4ZWxzID0gcGl4ZWxzO1xyXG4gICAgICAgIC8vIEhBTEZfRkxPQVQgY2FuJ3QgdXNlIEZsb2F0MzJBcnJheVxyXG4gICAgICAgIHRleHR1cmUudHlwZSA9IFRleHR1cmUuRkxPQVQ7XHJcbiAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhcnNlUkdCRUZyb21QTkc6IGZ1bmN0aW9uKHBuZykge1xyXG5cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHJldDtcclxuIiwiaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IEVudmlyb25tZW50TWFwUGFzcyBmcm9tICcuLi9wcmVQYXNzL0Vudmlyb25tZW50TWFwJztcclxuaW1wb3J0IFNreWRvbWUgZnJvbSAnLi4vcGx1Z2luL1NreWRvbWUnO1xyXG5pbXBvcnQgU2NlbmUgZnJvbSAnLi4vU2NlbmUnO1xyXG5cclxuaW1wb3J0IGRkcyBmcm9tICcuL2Rkcyc7XHJcbmltcG9ydCBoZHIgZnJvbSAnLi9oZHInO1xyXG5cclxuLyoqXHJcbiAqIEBhbGlhcyBjbGF5LnV0aWwudGV4dHVyZVxyXG4gKi9cclxudmFyIHRleHR1cmVVdGlsID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd8b2JqZWN0fSBwYXRoXHJcbiAgICAgKiBAcGFyYW0gIHtvYmplY3R9IFtvcHRpb25dXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW29uc3VjY2Vzc11cclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb25lcnJvcl1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZX1cclxuICAgICAqL1xyXG4gICAgbG9hZFRleHR1cmU6IGZ1bmN0aW9uIChwYXRoLCBvcHRpb24sIG9uc3VjY2Vzcywgb25lcnJvcikge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlO1xyXG4gICAgICAgIGlmICh0eXBlb2Yob3B0aW9uKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBvbnN1Y2Nlc3MgPSBvcHRpb247XHJcbiAgICAgICAgICAgIG9uZXJyb3IgPSBvbnN1Y2Nlc3M7XHJcbiAgICAgICAgICAgIG9wdGlvbiA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb3B0aW9uID0gb3B0aW9uIHx8IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mKHBhdGgpID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAocGF0aC5tYXRjaCgvLmhkciQvKSB8fCBvcHRpb24uZmlsZVR5cGUgPT09ICdoZHInKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHNSR0I6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRleHR1cmVVdGlsLl9mZXRjaFRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZHIucGFyc2VSR0JFKGRhdGEsIHRleHR1cmUsIG9wdGlvbi5leHBvc3VyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZGlydHkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25zdWNjZXNzICYmIG9uc3VjY2Vzcyh0ZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIG9uZXJyb3JcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChwYXRoLm1hdGNoKC8uZGRzJC8pIHx8IG9wdGlvbi5maWxlVHlwZSA9PT0gJ2RkcycpIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDBcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZVV0aWwuX2ZldGNoVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRkcy5wYXJzZShkYXRhLCB0ZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5kaXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbnN1Y2Nlc3MgJiYgb25zdWNjZXNzKHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgb25lcnJvclxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKCk7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmxvYWQocGF0aCk7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnN1Y2Nlc3Mob25zdWNjZXNzKTtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUuZXJyb3Iob25lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHBhdGggPT09ICdvYmplY3QnICYmIHR5cGVvZihwYXRoLnB4KSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlQ3ViZSgpO1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmxvYWQocGF0aCk7XHJcbiAgICAgICAgICAgIHRleHR1cmUuc3VjY2VzcyhvbnN1Y2Nlc3MpO1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmVycm9yKG9uZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2FkIGEgcGFub3JhbWEgdGV4dHVyZSBhbmQgcmVuZGVyIGl0IHRvIGEgY3ViZSBtYXBcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHBhdGhcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZUN1YmV9IGN1YmVNYXBcclxuICAgICAqIEBwYXJhbSAge29iamVjdH0gW29wdGlvbl1cclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtvcHRpb24uZW5jb2RlUkdCTV1cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW29wdGlvbi5leHBvc3VyZV1cclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb25zdWNjZXNzXVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvbmVycm9yXVxyXG4gICAgICovXHJcbiAgICBsb2FkUGFub3JhbWE6IGZ1bmN0aW9uIChyZW5kZXJlciwgcGF0aCwgY3ViZU1hcCwgb3B0aW9uLCBvbnN1Y2Nlc3MsIG9uZXJyb3IpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Yob3B0aW9uKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBvbnN1Y2Nlc3MgPSBvcHRpb247XHJcbiAgICAgICAgICAgIG9uZXJyb3IgPSBvbnN1Y2Nlc3M7XHJcbiAgICAgICAgICAgIG9wdGlvbiA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb3B0aW9uID0gb3B0aW9uIHx8IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGV4dHVyZVV0aWwubG9hZFRleHR1cmUocGF0aCwgb3B0aW9uLCBmdW5jdGlvbiAodGV4dHVyZSkge1xyXG4gICAgICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgICAgIHRleHR1cmUuZmxpcFkgPSBvcHRpb24uZmxpcFkgfHwgZmFsc2U7XHJcbiAgICAgICAgICAgIHNlbGYucGFub3JhbWFUb0N1YmVNYXAocmVuZGVyZXIsIHRleHR1cmUsIGN1YmVNYXAsIG9wdGlvbik7XHJcbiAgICAgICAgICAgIHRleHR1cmUuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIG9uc3VjY2VzcyAmJiBvbnN1Y2Nlc3MoY3ViZU1hcCk7XHJcbiAgICAgICAgfSwgb25lcnJvcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIGEgcGFub3JhbWEgdGV4dHVyZSB0byBhIGN1YmUgbWFwXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtICB7Y2xheS5UZXh0dXJlMkR9IHBhbm9yYW1hTWFwXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmVDdWJlfSBjdWJlTWFwXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvblxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW29wdGlvbi5lbmNvZGVSR0JNXVxyXG4gICAgICovXHJcbiAgICBwYW5vcmFtYVRvQ3ViZU1hcDogZnVuY3Rpb24gKHJlbmRlcmVyLCBwYW5vcmFtYU1hcCwgY3ViZU1hcCwgb3B0aW9uKSB7XHJcbiAgICAgICAgdmFyIGVudmlyb25tZW50TWFwUGFzcyA9IG5ldyBFbnZpcm9ubWVudE1hcFBhc3MoKTtcclxuICAgICAgICB2YXIgc2t5ZG9tZSA9IG5ldyBTa3lkb21lKHtcclxuICAgICAgICAgICAgc2NlbmU6IG5ldyBTY2VuZSgpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2t5ZG9tZS5zZXRFbnZpcm9ubWVudE1hcChwYW5vcmFtYU1hcCk7XHJcblxyXG4gICAgICAgIG9wdGlvbiA9IG9wdGlvbiB8fCB7fTtcclxuICAgICAgICBpZiAob3B0aW9uLmVuY29kZVJHQk0pIHtcclxuICAgICAgICAgICAgc2t5ZG9tZS5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fRU5DT0RFJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTaGFyZSBzUkdCXHJcbiAgICAgICAgY3ViZU1hcC5zUkdCID0gcGFub3JhbWFNYXAuc1JHQjtcclxuXHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXBQYXNzLnRleHR1cmUgPSBjdWJlTWFwO1xyXG4gICAgICAgIGVudmlyb25tZW50TWFwUGFzcy5yZW5kZXIocmVuZGVyZXIsIHNreWRvbWUuc2NlbmUpO1xyXG4gICAgICAgIGVudmlyb25tZW50TWFwUGFzcy50ZXh0dXJlID0gbnVsbDtcclxuICAgICAgICBlbnZpcm9ubWVudE1hcFBhc3MuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgcmV0dXJuIGN1YmVNYXA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBoZWlnaHQgbWFwIHRvIG5vcm1hbCBtYXBcclxuICAgICAqIEBwYXJhbSB7SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbWVudH0gaW1hZ2VcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoZWNrQnVtcD1mYWxzZV1cclxuICAgICAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fVxyXG4gICAgICovXHJcbiAgICBoZWlnaHRUb05vcm1hbDogZnVuY3Rpb24gKGltYWdlLCBjaGVja0J1bXApIHtcclxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gY2FudmFzLndpZHRoID0gaW1hZ2Uud2lkdGg7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IGNhbnZhcy5oZWlnaHQgPSBpbWFnZS5oZWlnaHQ7XHJcbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIGNoZWNrQnVtcCA9IGNoZWNrQnVtcCB8fCBmYWxzZTtcclxuICAgICAgICB2YXIgc3JjRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgdmFyIGRzdERhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3JjRGF0YS5kYXRhLmxlbmd0aDsgaSArPSA0KSB7XHJcbiAgICAgICAgICAgIGlmIChjaGVja0J1bXApIHtcclxuICAgICAgICAgICAgICAgIHZhciByID0gc3JjRGF0YS5kYXRhW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGcgPSBzcmNEYXRhLmRhdGFbaSArIDFdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGIgPSBzcmNEYXRhLmRhdGFbaSArIDJdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpZmYgPSBNYXRoLmFicyhyIC0gZykgKyBNYXRoLmFicyhnIC0gYik7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlmZiA+IDIwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdHaXZlbiBpbWFnZSBpcyBub3QgYSBoZWlnaHQgbWFwJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltYWdlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIE1vZGlmaWVkIGZyb20gaHR0cDovL21yZG9vYi5jb20vbGFiL2phdmFzY3JpcHQvaGVpZ2h0Mm5vcm1hbC9cclxuICAgICAgICAgICAgdmFyIHgxLCB5MSwgeDIsIHkyO1xyXG4gICAgICAgICAgICBpZiAoaSAlICh3aWR0aCAqIDQpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBsZWZ0IGVkZ2VcclxuICAgICAgICAgICAgICAgIHgxID0gc3JjRGF0YS5kYXRhW2ldO1xyXG4gICAgICAgICAgICAgICAgeDIgPSBzcmNEYXRhLmRhdGFbaSArIDRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGkgJSAod2lkdGggKiA0KSA9PT0gKHdpZHRoIC0gMSkgKiA0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyByaWdodCBlZGdlXHJcbiAgICAgICAgICAgICAgICB4MSA9IHNyY0RhdGEuZGF0YVtpIC0gNF07XHJcbiAgICAgICAgICAgICAgICB4MiA9IHNyY0RhdGEuZGF0YVtpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHgxID0gc3JjRGF0YS5kYXRhW2kgLSA0XTtcclxuICAgICAgICAgICAgICAgIHgyID0gc3JjRGF0YS5kYXRhW2kgKyA0XTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGkgPCB3aWR0aCAqIDQpIHtcclxuICAgICAgICAgICAgICAgIC8vIHRvcCBlZGdlXHJcbiAgICAgICAgICAgICAgICB5MSA9IHNyY0RhdGEuZGF0YVtpXTtcclxuICAgICAgICAgICAgICAgIHkyID0gc3JjRGF0YS5kYXRhW2kgKyB3aWR0aCAqIDRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGkgPiB3aWR0aCAqIChoZWlnaHQgLSAxKSAqIDQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGJvdHRvbSBlZGdlXHJcbiAgICAgICAgICAgICAgICB5MSA9IHNyY0RhdGEuZGF0YVtpIC0gd2lkdGggKiA0XTtcclxuICAgICAgICAgICAgICAgIHkyID0gc3JjRGF0YS5kYXRhW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgeTEgPSBzcmNEYXRhLmRhdGFbaSAtIHdpZHRoICogNF07XHJcbiAgICAgICAgICAgICAgICB5MiA9IHNyY0RhdGEuZGF0YVtpICsgd2lkdGggKiA0XTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZHN0RGF0YS5kYXRhW2ldID0gKHgxIC0geDIpICsgMTI3O1xyXG4gICAgICAgICAgICBkc3REYXRhLmRhdGFbaSArIDFdID0gKHkxIC0geTIpICsgMTI3O1xyXG4gICAgICAgICAgICBkc3REYXRhLmRhdGFbaSArIDJdID0gMjU1O1xyXG4gICAgICAgICAgICBkc3REYXRhLmRhdGFbaSArIDNdID0gMjU1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdHgucHV0SW1hZ2VEYXRhKGRzdERhdGEsIDAsIDApO1xyXG4gICAgICAgIHJldHVybiBjYW52YXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBoZWlnaHQgbWFwIHRvIG5vcm1hbCBtYXBcclxuICAgICAqIEBwYXJhbSB7SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbWVudH0gaW1hZ2VcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoZWNrQnVtcD1mYWxzZV1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdGhyZXNob2xkPTIwXVxyXG4gICAgICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9XHJcbiAgICAgKi9cclxuICAgIGlzSGVpZ2h0SW1hZ2U6IGZ1bmN0aW9uIChpbWcsIGRvd25TY2FsZVNpemUsIHRocmVzaG9sZCkge1xyXG4gICAgICAgIGlmICghaW1nIHx8ICFpbWcud2lkdGggfHwgIWltZy5oZWlnaHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICB2YXIgc2l6ZSA9IGRvd25TY2FsZVNpemUgfHwgMzI7XHJcbiAgICAgICAgdGhyZXNob2xkID0gdGhyZXNob2xkIHx8IDIwO1xyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IGNhbnZhcy5oZWlnaHQgPSBzaXplO1xyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCBzaXplLCBzaXplKTtcclxuICAgICAgICB2YXIgc3JjRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgc2l6ZSwgc2l6ZSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcmNEYXRhLmRhdGEubGVuZ3RoOyBpICs9IDQpIHtcclxuICAgICAgICAgICAgdmFyIHIgPSBzcmNEYXRhLmRhdGFbaV07XHJcbiAgICAgICAgICAgIHZhciBnID0gc3JjRGF0YS5kYXRhW2kgKyAxXTtcclxuICAgICAgICAgICAgdmFyIGIgPSBzcmNEYXRhLmRhdGFbaSArIDJdO1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IE1hdGguYWJzKHIgLSBnKSArIE1hdGguYWJzKGcgLSBiKTtcclxuICAgICAgICAgICAgaWYgKGRpZmYgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgX2ZldGNoVGV4dHVyZTogZnVuY3Rpb24gKHBhdGgsIG9uc3VjY2Vzcywgb25lcnJvcikge1xyXG4gICAgICAgIHZlbmRvci5yZXF1ZXN0LmdldCh7XHJcbiAgICAgICAgICAgIHVybDogcGF0aCxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxyXG4gICAgICAgICAgICBvbmxvYWQ6IG9uc3VjY2VzcyxcclxuICAgICAgICAgICAgb25lcnJvcjogb25lcnJvclxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIGNoZXNzYm9hcmQgdGV4dHVyZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbc2l6ZV1cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW3VuaXRTaXplXVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBbY29sb3IxXVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBbY29sb3IyXVxyXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUNoZXNzYm9hcmQ6IGZ1bmN0aW9uIChzaXplLCB1bml0U2l6ZSwgY29sb3IxLCBjb2xvcjIpIHtcclxuICAgICAgICBzaXplID0gc2l6ZSB8fCA1MTI7XHJcbiAgICAgICAgdW5pdFNpemUgPSB1bml0U2l6ZSB8fCA2NDtcclxuICAgICAgICBjb2xvcjEgPSBjb2xvcjEgfHwgJ2JsYWNrJztcclxuICAgICAgICBjb2xvcjIgPSBjb2xvcjIgfHwgJ3doaXRlJztcclxuXHJcbiAgICAgICAgdmFyIHJlcGVhdCA9IE1hdGguY2VpbChzaXplIC8gdW5pdFNpemUpO1xyXG5cclxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgY2FudmFzLndpZHRoID0gc2l6ZTtcclxuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gc2l6ZTtcclxuICAgICAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGNvbG9yMjtcclxuICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgc2l6ZSwgc2l6ZSk7XHJcblxyXG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvcjE7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXBlYXQ7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJlcGVhdDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaXNGaWxsID0gaiAlIDIgPyAoaSAlIDIpIDogKGkgJSAyIC0gMSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGaWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KGkgKiB1bml0U2l6ZSwgaiAqIHVuaXRTaXplLCB1bml0U2l6ZSwgdW5pdFNpemUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICBpbWFnZTogY2FudmFzLFxyXG4gICAgICAgICAgICBhbmlzb3Ryb3BpYzogOFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYSBibGFuayBwdXJlIGNvbG9yIDF4MSB0ZXh0dXJlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGNvbG9yXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAqL1xyXG4gICAgY3JlYXRlQmxhbms6IGZ1bmN0aW9uIChjb2xvcikge1xyXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBjYW52YXMud2lkdGggPSAxO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xyXG4gICAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBjdHguZmlsbFN0eWxlID0gY29sb3I7XHJcbiAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEsIDEpO1xyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICBpbWFnZTogY2FudmFzXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdGV4dHVyZVV0aWw7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiI2RlZmluZSBTQU1QTEVfTlVNQkVSIDEwMjRcXG4jZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzlcXG51bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxEaXN0cmlidXRpb247XFxudW5pZm9ybSB2ZWMyIHZpZXdwb3J0U2l6ZSA6IFs1MTIsIDI1Nl07XFxuY29uc3QgdmVjMyBOID0gdmVjMygwLjAsIDAuMCwgMS4wKTtcXG5jb25zdCBmbG9hdCBmU2FtcGxlTnVtYmVyID0gZmxvYXQoU0FNUExFX05VTUJFUik7XFxudmVjMyBpbXBvcnRhbmNlU2FtcGxlTm9ybWFsKGZsb2F0IGksIGZsb2F0IHJvdWdobmVzcywgdmVjMyBOKSB7XFxuIHZlYzMgSCA9IHRleHR1cmUyRChub3JtYWxEaXN0cmlidXRpb24sIHZlYzIocm91Z2huZXNzLCBpKSkucmdiO1xcbiB2ZWMzIHVwVmVjdG9yID0gYWJzKE4ueSkgPiAwLjk5OSA/IHZlYzMoMS4wLCAwLjAsIDAuMCkgOiB2ZWMzKDAuMCwgMS4wLCAwLjApO1xcbiB2ZWMzIHRhbmdlbnRYID0gbm9ybWFsaXplKGNyb3NzKE4sIHVwVmVjdG9yKSk7XFxuIHZlYzMgdGFuZ2VudFogPSBjcm9zcyhOLCB0YW5nZW50WCk7XFxuIHJldHVybiBub3JtYWxpemUodGFuZ2VudFggKiBILnggKyBOICogSC55ICsgdGFuZ2VudFogKiBILnopO1xcbn1cXG5mbG9hdCBHX1NtaXRoKGZsb2F0IHJvdWdobmVzcywgZmxvYXQgTm9WLCBmbG9hdCBOb0wpIHtcXG4gZmxvYXQgayA9IHJvdWdobmVzcyAqIHJvdWdobmVzcyAvIDIuMDtcXG4gZmxvYXQgRzFWID0gTm9WIC8gKE5vViAqICgxLjAgLSBrKSArIGspO1xcbiBmbG9hdCBHMUwgPSBOb0wgLyAoTm9MICogKDEuMCAtIGspICsgayk7XFxuIHJldHVybiBHMUwgKiBHMVY7XFxufVxcbnZvaWQgbWFpbigpIHtcXG4gdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eSAvIHZpZXdwb3J0U2l6ZTtcXG4gZmxvYXQgTm9WID0gdXYueDtcXG4gZmxvYXQgcm91Z2huZXNzID0gdXYueTtcXG4gdmVjMyBWO1xcbiBWLnggPSBzcXJ0KDEuMCAtIE5vViAqIE5vVik7XFxuIFYueSA9IDAuMDtcXG4gVi56ID0gTm9WO1xcbiBmbG9hdCBBID0gMC4wO1xcbiBmbG9hdCBCID0gMC4wO1xcbiBmb3IgKGludCBpID0gMDsgaSA8IFNBTVBMRV9OVU1CRVI7IGkrKykge1xcbiB2ZWMzIEggPSBpbXBvcnRhbmNlU2FtcGxlTm9ybWFsKGZsb2F0KGkpIC8gZlNhbXBsZU51bWJlciwgcm91Z2huZXNzLCBOKTtcXG4gdmVjMyBMID0gcmVmbGVjdCgtViwgSCk7XFxuIGZsb2F0IE5vTCA9IGNsYW1wKEwueiwgMC4wLCAxLjApO1xcbiBmbG9hdCBOb0ggPSBjbGFtcChILnosIDAuMCwgMS4wKTtcXG4gZmxvYXQgVm9IID0gY2xhbXAoZG90KFYsIEgpLCAwLjAsIDEuMCk7XFxuIGlmIChOb0wgPiAwLjApIHtcXG4gZmxvYXQgRyA9IEdfU21pdGgocm91Z2huZXNzLCBOb1YsIE5vTCk7XFxuIGZsb2F0IEdfVmlzID0gRyAqIFZvSCAvIChOb0ggKiBOb1YpO1xcbiBmbG9hdCBGYyA9IHBvdygxLjAgLSBWb0gsIDUuMCk7XFxuIEEgKz0gKDEuMCAtIEZjKSAqIEdfVmlzO1xcbiBCICs9IEZjICogR19WaXM7XFxuIH1cXG4gfVxcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzIoQSwgQikgLyBmU2FtcGxlTnVtYmVyLCAwLjAsIDEuMCk7XFxufVxcblwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIiNkZWZpbmUgU0hBREVSX05BTUUgcHJlZmlsdGVyXFxuI2RlZmluZSBTQU1QTEVfTlVNQkVSIDEwMjRcXG4jZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzlcXG51bmlmb3JtIG1hdDQgdmlld0ludmVyc2UgOiBWSUVXSU5WRVJTRTtcXG51bmlmb3JtIHNhbXBsZXJDdWJlIGVudmlyb25tZW50TWFwO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbERpc3RyaWJ1dGlvbjtcXG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcyA6IDAuNTtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52ZWMzIGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQgaSwgZmxvYXQgcm91Z2huZXNzLCB2ZWMzIE4pIHtcXG4gdmVjMyBIID0gdGV4dHVyZTJEKG5vcm1hbERpc3RyaWJ1dGlvbiwgdmVjMihyb3VnaG5lc3MsIGkpKS5yZ2I7XFxuIHZlYzMgdXBWZWN0b3IgPSBhYnMoTi55KSA+IDAuOTk5ID8gdmVjMygxLjAsIDAuMCwgMC4wKSA6IHZlYzMoMC4wLCAxLjAsIDAuMCk7XFxuIHZlYzMgdGFuZ2VudFggPSBub3JtYWxpemUoY3Jvc3MoTiwgdXBWZWN0b3IpKTtcXG4gdmVjMyB0YW5nZW50WiA9IGNyb3NzKE4sIHRhbmdlbnRYKTtcXG4gcmV0dXJuIG5vcm1hbGl6ZSh0YW5nZW50WCAqIEgueCArIE4gKiBILnkgKyB0YW5nZW50WiAqIEgueik7XFxufVxcbnZvaWQgbWFpbigpIHtcXG4gdmVjMyBleWVQb3MgPSB2aWV3SW52ZXJzZVszXS54eXo7XFxuIHZlYzMgViA9IG5vcm1hbGl6ZSh2X1dvcmxkUG9zaXRpb24gLSBleWVQb3MpO1xcbiB2ZWMzIE4gPSBWO1xcbiB2ZWMzIHByZWZpbHRlcmVkQ29sb3IgPSB2ZWMzKDAuMCk7XFxuIGZsb2F0IHRvdGFsV2VpZ2h0ID0gMC4wO1xcbiBmbG9hdCBmTWF4U2FtcGxlTnVtYmVyID0gZmxvYXQoU0FNUExFX05VTUJFUik7XFxuIGZvciAoaW50IGkgPSAwOyBpIDwgU0FNUExFX05VTUJFUjsgaSsrKSB7XFxuIHZlYzMgSCA9IGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQoaSkgLyBmTWF4U2FtcGxlTnVtYmVyLCByb3VnaG5lc3MsIE4pO1xcbiB2ZWMzIEwgPSByZWZsZWN0KC1WLCBIKTtcXG4gZmxvYXQgTm9MID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuIGlmIChOb0wgPiAwLjApIHtcXG4gcHJlZmlsdGVyZWRDb2xvciArPSBkZWNvZGVIRFIodGV4dHVyZUN1YmUoZW52aXJvbm1lbnRNYXAsIEwpKS5yZ2IgKiBOb0w7XFxuIHRvdGFsV2VpZ2h0ICs9IE5vTDtcXG4gfVxcbiB9XFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUih2ZWM0KHByZWZpbHRlcmVkQ29sb3IgLyB0b3RhbFdlaWdodCwgMS4wKSk7XFxufVxcblwiO1xyXG4iLCIvLyBDdWJlbWFwIHByZWZpbHRlciB1dGlsaXR5XHJcbi8vIGh0dHA6Ly93d3cudW5yZWFsZW5naW5lLmNvbS9maWxlcy9kb3dubG9hZHMvMjAxM1NpZ2dyYXBoUHJlc2VudGF0aW9uc05vdGVzLnBkZlxyXG4vLyBodHRwOi8vaHR0cC5kZXZlbG9wZXIubnZpZGlhLmNvbS9HUFVHZW1zMy9ncHVnZW1zM19jaDIwLmh0bWxcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcclxuaW1wb3J0IFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgU2t5Ym94IGZyb20gJy4uL3BsdWdpbi9Ta3lib3gnO1xyXG5pbXBvcnQgU2NlbmUgZnJvbSAnLi4vU2NlbmUnO1xyXG5pbXBvcnQgRW52aXJvbm1lbnRNYXBQYXNzIGZyb20gJy4uL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IHRleHR1cmVVdGlsIGZyb20gJy4vdGV4dHVyZSc7XHJcblxyXG5pbXBvcnQgaW50ZWdyYXRlQlJERlNoYWRlckNvZGUgZnJvbSAnLi9zaGFkZXIvaW50ZWdyYXRlQlJERi5nbHNsLmpzJztcclxuaW1wb3J0IHByZWZpbHRlckZyYWdDb2RlIGZyb20gJy4vc2hhZGVyL3ByZWZpbHRlci5nbHNsLmpzJztcclxuXHJcbnZhciBjdWJlbWFwVXRpbCA9IHt9O1xyXG5cclxudmFyIHRhcmdldHMgPSBbJ3B4JywgJ254JywgJ3B5JywgJ255JywgJ3B6JywgJ256J107XHJcblxyXG4vLyBUT0RPIERvd25zYW1wbGVcclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkudXRpbC5jdWJlbWFwLnByZWZpbHRlckVudmlyb25tZW50TWFwXHJcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZX0gZW52TWFwXHJcbiAqIEBwYXJhbSAge09iamVjdH0gW3RleHR1cmVPcHRzXVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFt0ZXh0dXJlT3B0cy53aWR0aD02NF1cclxuICogQHBhcmFtICB7bnVtYmVyfSBbdGV4dHVyZU9wdHMuaGVpZ2h0PTY0XVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFt0ZXh0dXJlT3B0cy50eXBlXVxyXG4gKiBAcGFyYW0gIHtib29sZWFufSBbdGV4dHVyZU9wdHMuZW5jb2RlUkdCTT1mYWxzZV1cclxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3RleHR1cmVPcHRzLmRlY29kZVJHQk09ZmFsc2VdXHJcbiAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZTJEfSBbbm9ybWFsRGlzdHJpYnV0aW9uXVxyXG4gKiBAcGFyYW0gIHtjbGF5LlRleHR1cmUyRH0gW2JyZGZMb29rdXBdXHJcbiAqL1xyXG5jdWJlbWFwVXRpbC5wcmVmaWx0ZXJFbnZpcm9ubWVudE1hcCA9IGZ1bmN0aW9uIChcclxuICAgIHJlbmRlcmVyLCBlbnZNYXAsIHRleHR1cmVPcHRzLCBub3JtYWxEaXN0cmlidXRpb24sIGJyZGZMb29rdXBcclxuKSB7XHJcbiAgICAvLyBOb3QgY3JlYXRlIG90aGVyIHJlbmRlcmVyLCBpdCBpcyBlYXN5IGhhdmluZyBpc3N1ZSBvZiBjcm9zcyByZWZlcmVuY2Ugb2YgcmVzb3VyY2VzIGxpa2UgZnJhbWVidWZmZXJcclxuICAgIC8vIFBFTkRJTkcgcHJlc2VydmVEcmF3aW5nQnVmZmVyP1xyXG4gICAgaWYgKCFicmRmTG9va3VwIHx8ICFub3JtYWxEaXN0cmlidXRpb24pIHtcclxuICAgICAgICBub3JtYWxEaXN0cmlidXRpb24gPSBjdWJlbWFwVXRpbC5nZW5lcmF0ZU5vcm1hbERpc3RyaWJ1dGlvbigpO1xyXG4gICAgICAgIGJyZGZMb29rdXAgPSBjdWJlbWFwVXRpbC5pbnRlZ3JhdGVCUkRGKHJlbmRlcmVyLCBub3JtYWxEaXN0cmlidXRpb24pO1xyXG4gICAgfVxyXG4gICAgdGV4dHVyZU9wdHMgPSB0ZXh0dXJlT3B0cyB8fCB7fTtcclxuXHJcbiAgICB2YXIgd2lkdGggPSB0ZXh0dXJlT3B0cy53aWR0aCB8fCA2NDtcclxuICAgIHZhciBoZWlnaHQgPSB0ZXh0dXJlT3B0cy5oZWlnaHQgfHwgNjQ7XHJcblxyXG4gICAgdmFyIHRleHR1cmVUeXBlID0gdGV4dHVyZU9wdHMudHlwZSB8fCBlbnZNYXAudHlwZTtcclxuXHJcbiAgICAvLyBVc2Ugc2FtZSB0eXBlIHdpdGggZ2l2ZW4gZW52TWFwXHJcbiAgICB2YXIgcHJlZmlsdGVyZWRDdWJlTWFwID0gbmV3IFRleHR1cmVDdWJlKHtcclxuICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgdHlwZTogdGV4dHVyZVR5cGUsXHJcbiAgICAgICAgZmxpcFk6IGZhbHNlLFxyXG4gICAgICAgIG1pcG1hcHM6IFtdXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIXByZWZpbHRlcmVkQ3ViZU1hcC5pc1Bvd2VyT2ZUd28oKSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybignV2lkdGggYW5kIGhlaWdodCBtdXN0IGJlIHBvd2VyIG9mIHR3byB0byBlbmFibGUgbWlwbWFwLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBzaXplID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCk7XHJcbiAgICB2YXIgbWlwbWFwTnVtID0gTWF0aC5sb2coc2l6ZSkgLyBNYXRoLmxvZygyKSArIDE7XHJcblxyXG4gICAgdmFyIHByZWZpbHRlck1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoe1xyXG4gICAgICAgICAgICB2ZXJ0ZXg6IFNoYWRlci5zb3VyY2UoJ2NsYXkuc2t5Ym94LnZlcnRleCcpLFxyXG4gICAgICAgICAgICBmcmFnbWVudDogcHJlZmlsdGVyRnJhZ0NvZGVcclxuICAgICAgICB9KVxyXG4gICAgfSk7XHJcbiAgICBwcmVmaWx0ZXJNYXRlcmlhbC5zZXQoJ25vcm1hbERpc3RyaWJ1dGlvbicsIG5vcm1hbERpc3RyaWJ1dGlvbik7XHJcblxyXG4gICAgdGV4dHVyZU9wdHMuZW5jb2RlUkdCTSAmJiBwcmVmaWx0ZXJNYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fRU5DT0RFJyk7XHJcbiAgICB0ZXh0dXJlT3B0cy5kZWNvZGVSR0JNICYmIHByZWZpbHRlck1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUkdCTV9ERUNPREUnKTtcclxuXHJcbiAgICB2YXIgZHVtbXlTY2VuZSA9IG5ldyBTY2VuZSgpO1xyXG4gICAgdmFyIHNreUVudjtcclxuXHJcbiAgICBpZiAoZW52TWFwLnRleHR1cmVUeXBlID09PSAndGV4dHVyZTJEJykge1xyXG4gICAgICAgIC8vIENvbnZlcnQgcGFub3JhbWEgdG8gY3ViZW1hcFxyXG4gICAgICAgIHZhciBlbnZDdWJlbWFwID0gbmV3IFRleHR1cmVDdWJlKHtcclxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICAgICAgLy8gRklYTUUgRkxPQVQgdHlwZSB3aWxsIGNhdXNlIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCBlcnJvciBvbiBpT1NcclxuICAgICAgICAgICAgdHlwZTogdGV4dHVyZVR5cGUgPT09IFRleHR1cmUuRkxPQVQgP1xyXG4gICAgICAgICAgICAgICAgVGV4dHVyZS5IQUxGX0ZMT0FUIDogdGV4dHVyZVR5cGVcclxuICAgICAgICB9KTtcclxuICAgICAgICB0ZXh0dXJlVXRpbC5wYW5vcmFtYVRvQ3ViZU1hcChyZW5kZXJlciwgZW52TWFwLCBlbnZDdWJlbWFwLCB7XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkcgZW5jb2RlUkdCTSBzbyBpdCBjYW4gYmUgZGVjb2RlZCBhcyBSR0JNXHJcbiAgICAgICAgICAgIGVuY29kZVJHQk06IHRleHR1cmVPcHRzLmRlY29kZVJHQk1cclxuICAgICAgICB9KTtcclxuICAgICAgICBlbnZNYXAgPSBlbnZDdWJlbWFwO1xyXG4gICAgfVxyXG4gICAgc2t5RW52ID0gbmV3IFNreWJveCh7XHJcbiAgICAgICAgc2NlbmU6IGR1bW15U2NlbmUsXHJcbiAgICAgICAgbWF0ZXJpYWw6IHByZWZpbHRlck1hdGVyaWFsXHJcbiAgICB9KTtcclxuICAgIHNreUVudi5tYXRlcmlhbC5zZXQoJ2Vudmlyb25tZW50TWFwJywgZW52TWFwKTtcclxuXHJcbiAgICB2YXIgZW52TWFwUGFzcyA9IG5ldyBFbnZpcm9ubWVudE1hcFBhc3Moe1xyXG4gICAgICAgIHRleHR1cmU6IHByZWZpbHRlcmVkQ3ViZU1hcFxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gRm9yY2UgdG8gYmUgVU5TSUdORURfQllURVxyXG4gICAgaWYgKHRleHR1cmVPcHRzLmVuY29kZVJHQk0pIHtcclxuICAgICAgICB0ZXh0dXJlVHlwZSA9IHByZWZpbHRlcmVkQ3ViZU1hcC50eXBlID0gVGV4dHVyZS5VTlNJR05FRF9CWVRFO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciByZW5kZXJUYXJnZXRUbXAgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgdHlwZTogdGV4dHVyZVR5cGVcclxuICAgIH0pO1xyXG4gICAgdmFyIGZyYW1lQnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKHtcclxuICAgICAgICBkZXB0aEJ1ZmZlcjogZmFsc2VcclxuICAgIH0pO1xyXG4gICAgdmFyIEFycmF5Q3RvciA9IHZlbmRvclt0ZXh0dXJlVHlwZSA9PT0gVGV4dHVyZS5VTlNJR05FRF9CWVRFID8gJ1VpbnQ4QXJyYXknIDogJ0Zsb2F0MzJBcnJheSddO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaXBtYXBOdW07IGkrKykge1xyXG4gICAgICAgIC8vIGNvbnNvbGUudGltZSgncHJlZmlsdGVyJyk7XHJcbiAgICAgICAgcHJlZmlsdGVyZWRDdWJlTWFwLm1pcG1hcHNbaV0gPSB7XHJcbiAgICAgICAgICAgIHBpeGVsczoge31cclxuICAgICAgICB9O1xyXG4gICAgICAgIHNreUVudi5tYXRlcmlhbC5zZXQoJ3JvdWdobmVzcycsIGkgLyAobWlwbWFwTnVtIC0gMSkpO1xyXG5cclxuICAgICAgICAvLyBUd2VhayBmb3ZcclxuICAgICAgICAvLyBodHRwOi8vdGhlLXdpdG5lc3MubmV0L25ld3MvMjAxMi8wMi9zZWFtbGVzcy1jdWJlLW1hcC1maWx0ZXJpbmcvXHJcbiAgICAgICAgdmFyIG4gPSByZW5kZXJUYXJnZXRUbXAud2lkdGg7XHJcbiAgICAgICAgdmFyIGZvdiA9IDIgKiBNYXRoLmF0YW4obiAvIChuIC0gMC41KSkgLyBNYXRoLlBJICogMTgwO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRhcmdldHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgdmFyIHBpeGVscyA9IG5ldyBBcnJheUN0b3IocmVuZGVyVGFyZ2V0VG1wLndpZHRoICogcmVuZGVyVGFyZ2V0VG1wLmhlaWdodCAqIDQpO1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5hdHRhY2gocmVuZGVyVGFyZ2V0VG1wKTtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gZW52TWFwUGFzcy5nZXRDYW1lcmEodGFyZ2V0c1tqXSk7XHJcbiAgICAgICAgICAgIGNhbWVyYS5mb3YgPSBmb3Y7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlcihkdW1teVNjZW5lLCBjYW1lcmEpO1xyXG4gICAgICAgICAgICByZW5kZXJlci5nbC5yZWFkUGl4ZWxzKFxyXG4gICAgICAgICAgICAgICAgMCwgMCwgcmVuZGVyVGFyZ2V0VG1wLndpZHRoLCByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgVGV4dHVyZS5SR0JBLCB0ZXh0dXJlVHlwZSwgcGl4ZWxzXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAvLyB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgIC8vIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICAgICAgLy8gY2FudmFzLndpZHRoID0gcmVuZGVyVGFyZ2V0VG1wLndpZHRoO1xyXG4gICAgICAgICAgICAvLyBjYW52YXMuaGVpZ2h0ID0gcmVuZGVyVGFyZ2V0VG1wLmhlaWdodDtcclxuICAgICAgICAgICAgLy8gdmFyIGltYWdlRGF0YSA9IGN0eC5jcmVhdGVJbWFnZURhdGEocmVuZGVyVGFyZ2V0VG1wLndpZHRoLCByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0KTtcclxuICAgICAgICAgICAgLy8gZm9yICh2YXIgayA9IDA7IGsgPCBwaXhlbHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgLy8gICAgIGltYWdlRGF0YS5kYXRhW2tdID0gcGl4ZWxzW2tdO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIC8vIGN0eC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcclxuICAgICAgICAgICAgLy8gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjYW52YXMpO1xyXG5cclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgcHJlZmlsdGVyZWRDdWJlTWFwLm1pcG1hcHNbaV0ucGl4ZWxzW3RhcmdldHNbal1dID0gcGl4ZWxzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyVGFyZ2V0VG1wLndpZHRoIC89IDI7XHJcbiAgICAgICAgcmVuZGVyVGFyZ2V0VG1wLmhlaWdodCAvPSAyO1xyXG4gICAgICAgIHJlbmRlclRhcmdldFRtcC5kaXJ0eSgpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUudGltZUVuZCgncHJlZmlsdGVyJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnJhbWVCdWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICByZW5kZXJUYXJnZXRUbXAuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICBza3lFbnYuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAvLyBSZW1vdmUgZ3B1IHJlc291cmNlIGFsbHVjYXRlZCBpbiByZW5kZXJlclxyXG4gICAgbm9ybWFsRGlzdHJpYnV0aW9uLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG5cclxuICAgIC8vIHJlbmRlcmVyLmRpc3Bvc2UoKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGVudmlyb25tZW50TWFwOiBwcmVmaWx0ZXJlZEN1YmVNYXAsXHJcbiAgICAgICAgYnJkZkxvb2t1cDogYnJkZkxvb2t1cCxcclxuICAgICAgICBub3JtYWxEaXN0cmlidXRpb246IG5vcm1hbERpc3RyaWJ1dGlvbixcclxuICAgICAgICBtYXhNaXBtYXBMZXZlbDogbWlwbWFwTnVtXHJcbiAgICB9O1xyXG59O1xyXG5cclxuY3ViZW1hcFV0aWwuaW50ZWdyYXRlQlJERiA9IGZ1bmN0aW9uIChyZW5kZXJlciwgbm9ybWFsRGlzdHJpYnV0aW9uKSB7XHJcbiAgICBub3JtYWxEaXN0cmlidXRpb24gPSBub3JtYWxEaXN0cmlidXRpb24gfHwgY3ViZW1hcFV0aWwuZ2VuZXJhdGVOb3JtYWxEaXN0cmlidXRpb24oKTtcclxuICAgIHZhciBmcmFtZWJ1ZmZlciA9IG5ldyBGcmFtZUJ1ZmZlcih7XHJcbiAgICAgICAgZGVwdGhCdWZmZXI6IGZhbHNlXHJcbiAgICB9KTtcclxuICAgIHZhciBwYXNzID0gbmV3IFBhc3Moe1xyXG4gICAgICAgIGZyYWdtZW50OiBpbnRlZ3JhdGVCUkRGU2hhZGVyQ29kZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICB3aWR0aDogNTEyLFxyXG4gICAgICAgIGhlaWdodDogMjU2LFxyXG4gICAgICAgIHR5cGU6IFRleHR1cmUuSEFMRl9GTE9BVCxcclxuICAgICAgICB3cmFwUzogVGV4dHVyZS5DTEFNUF9UT19FREdFLFxyXG4gICAgICAgIHdyYXBUOiBUZXh0dXJlLkNMQU1QX1RPX0VER0UsXHJcbiAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgdXNlTWlwbWFwOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgICBwYXNzLnNldFVuaWZvcm0oJ25vcm1hbERpc3RyaWJ1dGlvbicsIG5vcm1hbERpc3RyaWJ1dGlvbik7XHJcbiAgICBwYXNzLnNldFVuaWZvcm0oJ3ZpZXdwb3J0U2l6ZScsIFs1MTIsIDI1Nl0pO1xyXG4gICAgcGFzcy5hdHRhY2hPdXRwdXQodGV4dHVyZSk7XHJcbiAgICBwYXNzLnJlbmRlcihyZW5kZXJlciwgZnJhbWVidWZmZXIpO1xyXG5cclxuICAgIC8vIEZJWE1FIE9ubHkgY2hyb21lIGFuZCBmaXJlZm94IGNhbiByZWFkUGl4ZWxzIHdpdGggZmxvYXQgdHlwZS5cclxuICAgIC8vIGZyYW1lYnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgLy8gdmFyIHBpeGVscyA9IG5ldyBGbG9hdDMyQXJyYXkoNTEyICogMjU2ICogNCk7XHJcbiAgICAvLyByZW5kZXJlci5nbC5yZWFkUGl4ZWxzKFxyXG4gICAgLy8gICAgIDAsIDAsIHRleHR1cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0LFxyXG4gICAgLy8gICAgIFRleHR1cmUuUkdCQSwgVGV4dHVyZS5GTE9BVCwgcGl4ZWxzXHJcbiAgICAvLyApO1xyXG4gICAgLy8gdGV4dHVyZS5waXhlbHMgPSBwaXhlbHM7XHJcbiAgICAvLyB0ZXh0dXJlLmZsaXBZID0gZmFsc2U7XHJcbiAgICAvLyB0ZXh0dXJlLmRpcnR5KCk7XHJcbiAgICAvLyBmcmFtZWJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgIGZyYW1lYnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG5cclxuICAgIHJldHVybiB0ZXh0dXJlO1xyXG59O1xyXG5cclxuY3ViZW1hcFV0aWwuZ2VuZXJhdGVOb3JtYWxEaXN0cmlidXRpb24gPSBmdW5jdGlvbiAocm91Z2huZXNzTGV2ZWxzLCBzYW1wbGVTaXplKSB7XHJcblxyXG4gICAgLy8gaHR0cDovL2hvbGdlci5kYW1tZXJ0ei5vcmcvc3R1ZmYvbm90ZXNfSGFtbWVyc2xleU9uSGVtaXNwaGVyZS5odG1sXHJcbiAgICAvLyBHTFNMIG5vdCBzdXBwb3J0IGJpdCBvcGVyYXRpb24sIHVzZSBsb29rdXAgaW5zdGVhZFxyXG4gICAgLy8gViAtPiBpIC8gTiwgVSAtPiByb3VnaG5lc3NcclxuICAgIHZhciByb3VnaG5lc3NMZXZlbHMgPSByb3VnaG5lc3NMZXZlbHMgfHwgMjU2O1xyXG4gICAgdmFyIHNhbXBsZVNpemUgPSBzYW1wbGVTaXplIHx8IDEwMjQ7XHJcblxyXG4gICAgdmFyIG5vcm1hbERpc3RyaWJ1dGlvbiA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgIHdpZHRoOiByb3VnaG5lc3NMZXZlbHMsXHJcbiAgICAgICAgaGVpZ2h0OiBzYW1wbGVTaXplLFxyXG4gICAgICAgIHR5cGU6IFRleHR1cmUuRkxPQVQsXHJcbiAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgd3JhcFM6IFRleHR1cmUuQ0xBTVBfVE9fRURHRSxcclxuICAgICAgICB3cmFwVDogVGV4dHVyZS5DTEFNUF9UT19FREdFLFxyXG4gICAgICAgIHVzZU1pcG1hcDogZmFsc2VcclxuICAgIH0pO1xyXG4gICAgdmFyIHBpeGVscyA9IG5ldyBGbG9hdDMyQXJyYXkoc2FtcGxlU2l6ZSAqIHJvdWdobmVzc0xldmVscyAqIDQpO1xyXG4gICAgdmFyIHRtcCA9IFtdO1xyXG5cclxuICAgIC8vIGZ1bmN0aW9uIHNvcnRGdW5jKGEsIGIpIHtcclxuICAgIC8vICAgICByZXR1cm4gTWF0aC5hYnMoYikgLSBNYXRoLmFicyhhKTtcclxuICAgIC8vIH1cclxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcm91Z2huZXNzTGV2ZWxzOyBqKyspIHtcclxuICAgICAgICB2YXIgcm91Z2huZXNzID0gaiAvIHJvdWdobmVzc0xldmVscztcclxuICAgICAgICB2YXIgYSA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVTaXplOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gaHR0cDovL2hvbGdlci5kYW1tZXJ0ei5vcmcvc3R1ZmYvbm90ZXNfSGFtbWVyc2xleU9uSGVtaXNwaGVyZS5odG1sXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy9CaXR3aXNlX09wZXJhdG9yc1xyXG4gICAgICAgICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE5MDg0OTIvdW5zaWduZWQtaW50ZWdlci1pbi1qYXZhc2NyaXB0XHJcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTgyMjM1MC93aGF0LWlzLXRoZS1qYXZhc2NyaXB0LW9wZXJhdG9yLWFuZC1ob3ctZG8teW91LXVzZS1pdFxyXG4gICAgICAgICAgICB2YXIgeSA9IChpIDw8IDE2IHwgaSA+Pj4gMTYpID4+PiAwO1xyXG4gICAgICAgICAgICB5ID0gKCh5ICYgMTQzMTY1NTc2NSkgPDwgMSB8ICh5ICYgMjg2MzMxMTUzMCkgPj4+IDEpID4+PiAwO1xyXG4gICAgICAgICAgICB5ID0gKCh5ICYgODU4OTkzNDU5KSA8PCAyIHwgKHkgJiAzNDM1OTczODM2KSA+Pj4gMikgPj4+IDA7XHJcbiAgICAgICAgICAgIHkgPSAoKHkgJiAyNTI2NDUxMzUpIDw8IDQgfCAoeSAmIDQwNDIzMjIxNjApID4+PiA0KSA+Pj4gMDtcclxuICAgICAgICAgICAgeSA9ICgoKHkgJiAxNjcxMTkzNSkgPDwgOCB8ICh5ICYgNDI3ODI1NTM2MCkgPj4+IDgpID4+PiAwKSAvIDQyOTQ5NjcyOTY7XHJcblxyXG4gICAgICAgICAgICAvLyBDREZcclxuICAgICAgICAgICAgdmFyIGNvc1RoZXRhID0gTWF0aC5zcXJ0KCgxIC0geSkgLyAoMSArIChhICogYSAtIDEuMCkgKiB5KSk7XHJcbiAgICAgICAgICAgIHRtcFtpXSA9IGNvc1RoZXRhO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVTaXplOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IChpICogcm91Z2huZXNzTGV2ZWxzICsgaikgKiA0O1xyXG4gICAgICAgICAgICB2YXIgY29zVGhldGEgPSB0bXBbaV07XHJcbiAgICAgICAgICAgIHZhciBzaW5UaGV0YSA9IE1hdGguc3FydCgxLjAgLSBjb3NUaGV0YSAqIGNvc1RoZXRhKTtcclxuICAgICAgICAgICAgdmFyIHggPSBpIC8gc2FtcGxlU2l6ZTtcclxuICAgICAgICAgICAgdmFyIHBoaSA9IDIuMCAqIE1hdGguUEkgKiB4O1xyXG4gICAgICAgICAgICBwaXhlbHNbb2Zmc2V0XSA9IHNpblRoZXRhICogTWF0aC5jb3MocGhpKTtcclxuICAgICAgICAgICAgcGl4ZWxzW29mZnNldCArIDFdID0gY29zVGhldGE7XHJcbiAgICAgICAgICAgIHBpeGVsc1tvZmZzZXQgKyAyXSA9IHNpblRoZXRhICogTWF0aC5zaW4ocGhpKTtcclxuICAgICAgICAgICAgcGl4ZWxzW29mZnNldCArIDNdID0gMS4wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG5vcm1hbERpc3RyaWJ1dGlvbi5waXhlbHMgPSBwaXhlbHM7XHJcblxyXG4gICAgcmV0dXJuIG5vcm1hbERpc3RyaWJ1dGlvbjtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGN1YmVtYXBVdGlsO1xyXG4iLCIvLyBodHRwczovL2RvY3MudW5yZWFsZW5naW5lLmNvbS9sYXRlc3QvSU5UL0VuZ2luZS9SZW5kZXJpbmcvTGlnaHRpbmdBbmRTaGFkb3dzL0FtYmllbnRDdWJlbWFwL1xyXG5pbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xyXG5pbXBvcnQgY3ViZW1hcFV0aWwgZnJvbSAnLi4vdXRpbC9jdWJlbWFwJztcclxuXHJcbi8qKlxyXG4gKiBBbWJpZW50IGN1YmVtYXAgbGlnaHQgcHJvdmlkZXMgc3BlY3VsYXIgcGFydHMgb2YgSW1hZ2UgQmFzZWQgTGlnaHRpbmcuXHJcbiAqIFdoaWNoIGlzIGEgYmFzaWMgcmVxdWlyZW1lbnQgZm9yIFBoeXNpY2FsbHkgQmFzZWQgUmVuZGVyaW5nXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkFtYmllbnRDdWJlbWFwXHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICovXHJcbnZhciBBbWJpZW50Q3ViZW1hcExpZ2h0ID0gTGlnaHQuZXh0ZW5kKHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmVDdWJlfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuQW1iaWVudEN1YmVtYXAjXHJcbiAgICAgKi9cclxuICAgIGN1YmVtYXA6IG51bGwsXHJcblxyXG4gICAgLy8gVE9ET1xyXG4gICAgLy8gcmFuZ2U6IDEwMCxcclxuXHJcbiAgICBjYXN0U2hhZG93OiBmYWxzZSxcclxuXHJcbiAgICBfbm9ybWFsRGlzdHJpYnV0aW9uOiBudWxsLFxyXG4gICAgX2JyZGZMb29rdXA6IG51bGxcclxuXHJcbn0sIC8qKiBAbGVuZHMgY2xheS5saWdodC5BbWJpZW50Q3ViZW1hcCMgKi8ge1xyXG5cclxuICAgIHR5cGU6ICdBTUJJRU5UX0NVQkVNQVBfTElHSFQnLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRG8gcHJlZml0ZXJpbmcgdGhlIGN1YmVtYXBcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc2l6ZT0zMl1cclxuICAgICAqL1xyXG4gICAgcHJlZmlsdGVyOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNpemUpIHtcclxuICAgICAgICBpZiAoIXJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfc2hhZGVyX3RleHR1cmVfbG9kJykpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXZpY2Ugbm90IHN1cHBvcnQgdGV4dHVyZUN1YmVMb2RFWFQnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuX2JyZGZMb29rdXApIHtcclxuICAgICAgICAgICAgdGhpcy5fbm9ybWFsRGlzdHJpYnV0aW9uID0gY3ViZW1hcFV0aWwuZ2VuZXJhdGVOb3JtYWxEaXN0cmlidXRpb24oKTtcclxuICAgICAgICAgICAgdGhpcy5fYnJkZkxvb2t1cCA9IGN1YmVtYXBVdGlsLmludGVncmF0ZUJSREYocmVuZGVyZXIsIHRoaXMuX25vcm1hbERpc3RyaWJ1dGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjdWJlbWFwID0gdGhpcy5jdWJlbWFwO1xyXG4gICAgICAgIGlmIChjdWJlbWFwLl9fcHJlZmlsdGVyZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGN1YmVtYXBVdGlsLnByZWZpbHRlckVudmlyb25tZW50TWFwKFxyXG4gICAgICAgICAgICByZW5kZXJlciwgY3ViZW1hcCwge1xyXG4gICAgICAgICAgICAgICAgZW5jb2RlUkdCTTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBzaXplLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBzaXplXHJcbiAgICAgICAgICAgIH0sIHRoaXMuX25vcm1hbERpc3RyaWJ1dGlvbiwgdGhpcy5fYnJkZkxvb2t1cFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5jdWJlbWFwID0gcmVzdWx0LmVudmlyb25tZW50TWFwO1xyXG4gICAgICAgIHRoaXMuY3ViZW1hcC5fX3ByZWZpbHRlcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY3ViZW1hcC5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0QlJERkxvb2t1cDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9icmRmTG9va3VwO1xyXG4gICAgfSxcclxuXHJcbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XHJcbiAgICAgICAgYW1iaWVudEN1YmVtYXBMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0qaW50ZW5zaXR5LCBjb2xvclsxXSppbnRlbnNpdHksIGNvbG9yWzJdKmludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBhbWJpZW50Q3ViZW1hcExpZ2h0Q3ViZW1hcDoge1xyXG4gICAgICAgICAgICB0eXBlOiAndCcsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5jdWJlbWFwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgYW1iaWVudEN1YmVtYXBMaWdodEJSREZMb29rdXA6IHtcclxuICAgICAgICAgICAgdHlwZTogJ3QnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuX2JyZGZMb29rdXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQG5hbWUgY2xvbmVcclxuICAgICAqIEByZXR1cm4ge2NsYXkubGlnaHQuQW1iaWVudEN1YmVtYXB9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5BbWJpZW50Q3ViZW1hcC5wcm90b3R5cGVcclxuICAgICAqL1xyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFtYmllbnRDdWJlbWFwTGlnaHQ7XHJcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5cclxuLyoqXHJcbiAqIFNwaGVyaWNhbCBIYXJtb25pYyBBbWJpZW50IExpZ2h0XHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkFtYmllbnRTSFxyXG4gKiBAZXh0ZW5kcyBjbGF5LkxpZ2h0XHJcbiAqL1xyXG52YXIgQW1iaWVudFNITGlnaHQgPSBMaWdodC5leHRlbmQoe1xyXG5cclxuICAgIGNhc3RTaGFkb3c6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3BoZXJpY2FsIEhhcm1vbmljIENvZWZmaWNpZW50c1xyXG4gICAgICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuQW1iaWVudFNII1xyXG4gICAgICovXHJcbiAgICBjb2VmZmljaWVudHM6IFtdLFxyXG5cclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fY29lZmZpY2llbnRzVG1wQXJyID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDMpO1xyXG59LCB7XHJcblxyXG4gICAgdHlwZTogJ0FNQklFTlRfU0hfTElHSFQnLFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBhbWJpZW50U0hMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0gKiBpbnRlbnNpdHksIGNvbG9yWzFdICogaW50ZW5zaXR5LCBjb2xvclsyXSAqIGludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50czoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29lZmZpY2llbnRzVG1wQXJyID0gaW5zdGFuY2UuX2NvZWZmaWNpZW50c1RtcEFycjtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5zdGFuY2UuY29lZmZpY2llbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29lZmZpY2llbnRzVG1wQXJyW2ldID0gaW5zdGFuY2UuY29lZmZpY2llbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvZWZmaWNpZW50c1RtcEFycjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAbmFtZSBjbG9uZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5BbWJpZW50fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuQW1iaWVudC5wcm90b3R5cGVcclxuICAgICAqL1xyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFtYmllbnRTSExpZ2h0O1xyXG4iLCJpbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuLi9jb3JlL3V0aWwnO1xyXG5cclxudmFyIFRleHR1cmVQb29sID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIHRoaXMuX3Bvb2wgPSB7fTtcclxuXHJcbiAgICB0aGlzLl9hbGxvY2F0ZWRUZXh0dXJlcyA9IFtdO1xyXG59O1xyXG5cclxuVGV4dHVyZVBvb2wucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBUZXh0dXJlUG9vbCxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uIChwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IGdlbmVyYXRlS2V5KHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIGlmICghdGhpcy5fcG9vbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Bvb2xba2V5XSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbGlzdCA9IHRoaXMuX3Bvb2xba2V5XTtcclxuICAgICAgICBpZiAoIWxpc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRChwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaXN0LnBvcCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICBwdXQ6IGZ1bmN0aW9uICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IGdlbmVyYXRlS2V5KHRleHR1cmUpO1xyXG4gICAgICAgIGlmICghdGhpcy5fcG9vbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Bvb2xba2V5XSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbGlzdCA9IHRoaXMuX3Bvb2xba2V5XTtcclxuICAgICAgICBsaXN0LnB1c2godGV4dHVyZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2FsbG9jYXRlZFRleHR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FsbG9jYXRlZFRleHR1cmVzW2ldLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wb29sID0ge307XHJcbiAgICAgICAgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXMgPSBbXTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZhdWx0UGFyYW1zID0ge1xyXG4gICAgd2lkdGg6IDUxMixcclxuICAgIGhlaWdodDogNTEyLFxyXG4gICAgdHlwZTogZ2xlbnVtLlVOU0lHTkVEX0JZVEUsXHJcbiAgICBmb3JtYXQ6IGdsZW51bS5SR0JBLFxyXG4gICAgd3JhcFM6IGdsZW51bS5DTEFNUF9UT19FREdFLFxyXG4gICAgd3JhcFQ6IGdsZW51bS5DTEFNUF9UT19FREdFLFxyXG4gICAgbWluRmlsdGVyOiBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVIsXHJcbiAgICBtYWdGaWx0ZXI6IGdsZW51bS5MSU5FQVIsXHJcbiAgICB1c2VNaXBtYXA6IHRydWUsXHJcbiAgICBhbmlzb3Ryb3BpYzogMSxcclxuICAgIGZsaXBZOiB0cnVlLFxyXG4gICAgdW5wYWNrQWxpZ25tZW50OiA0LFxyXG4gICAgcHJlbXVsdGlwbHlBbHBoYTogZmFsc2VcclxufTtcclxuXHJcbnZhciBkZWZhdWx0UGFyYW1Qcm9wTGlzdCA9IE9iamVjdC5rZXlzKGRlZmF1bHRQYXJhbXMpO1xyXG5cclxuZnVuY3Rpb24gZ2VuZXJhdGVLZXkocGFyYW1ldGVycykge1xyXG4gICAgdXRpbC5kZWZhdWx0c1dpdGhQcm9wTGlzdChwYXJhbWV0ZXJzLCBkZWZhdWx0UGFyYW1zLCBkZWZhdWx0UGFyYW1Qcm9wTGlzdCk7XHJcbiAgICBmYWxsQmFjayhwYXJhbWV0ZXJzKTtcclxuXHJcbiAgICB2YXIga2V5ID0gJyc7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlZmF1bHRQYXJhbVByb3BMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIG5hbWUgPSBkZWZhdWx0UGFyYW1Qcm9wTGlzdFtpXTtcclxuICAgICAgICB2YXIgY2h1bmsgPSBwYXJhbWV0ZXJzW25hbWVdLnRvU3RyaW5nKCk7XHJcbiAgICAgICAga2V5ICs9IGNodW5rO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleTtcclxufVxyXG5cclxuZnVuY3Rpb24gZmFsbEJhY2sodGFyZ2V0KSB7XHJcblxyXG4gICAgdmFyIElQT1QgPSBpc1Bvd2VyT2ZUd28odGFyZ2V0LndpZHRoLCB0YXJnZXQuaGVpZ2h0KTtcclxuXHJcbiAgICBpZiAodGFyZ2V0LmZvcm1hdCA9PT0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVCkge1xyXG4gICAgICAgIHRhcmdldC51c2VNaXBtYXAgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIUlQT1QgfHwgIXRhcmdldC51c2VNaXBtYXApIHtcclxuICAgICAgICBpZiAodGFyZ2V0Lm1pbkZpbHRlciA9PSBnbGVudW0uTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCB8fFxyXG4gICAgICAgICAgICB0YXJnZXQubWluRmlsdGVyID09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9MSU5FQVIpIHtcclxuICAgICAgICAgICAgdGFyZ2V0Lm1pbkZpbHRlciA9IGdsZW51bS5ORUFSRVNUO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHRhcmdldC5taW5GaWx0ZXIgPT0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTElORUFSIHx8XHJcbiAgICAgICAgICAgIHRhcmdldC5taW5GaWx0ZXIgPT0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTkVBUkVTVFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0YXJnZXQubWluRmlsdGVyID0gZ2xlbnVtLkxJTkVBUjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIUlQT1QpIHtcclxuICAgICAgICB0YXJnZXQud3JhcFMgPSBnbGVudW0uQ0xBTVBfVE9fRURHRTtcclxuICAgICAgICB0YXJnZXQud3JhcFQgPSBnbGVudW0uQ0xBTVBfVE9fRURHRTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaXNQb3dlck9mVHdvKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHJldHVybiAod2lkdGggJiAod2lkdGgtMSkpID09PSAwICYmXHJcbiAgICAgICAgICAgIChoZWlnaHQgJiAoaGVpZ2h0LTEpKSA9PT0gMDtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZVBvb2w7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LnNtLmRlcHRoLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkIDogVEVYQ09PUkRfMDtcXG51bmlmb3JtIHZlYzIgdXZSZXBlYXQgPSB2ZWMyKDEuMCwgMS4wKTtcXG51bmlmb3JtIHZlYzIgdXZPZmZzZXQgPSB2ZWMyKDAuMCwgMC4wKTtcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWM0IHZfVmlld1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpe1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4gdl9WaWV3UG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxuIGdsX1Bvc2l0aW9uID0gdl9WaWV3UG9zaXRpb247XFxuIHZfVGV4Y29vcmQgPSB0ZXhjb29yZCAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc20uZGVwdGguZnJhZ21lbnRcXG52YXJ5aW5nIHZlYzQgdl9WaWV3UG9zaXRpb247XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBmbG9hdCBiaWFzIDogMC4wMDE7XFxudW5pZm9ybSBmbG9hdCBzbG9wZVNjYWxlIDogMS4wO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuMDtcXG5AaW1wb3J0IGNsYXkudXRpbC5lbmNvZGVfZmxvYXRcXG52b2lkIG1haW4oKXtcXG4gZmxvYXQgZGVwdGggPSB2X1ZpZXdQb3NpdGlvbi56IC8gdl9WaWV3UG9zaXRpb24udztcXG4gaWYgKGFscGhhQ3V0b2ZmID4gMC4wKSB7XFxuIGlmICh0ZXh0dXJlMkQoYWxwaGFNYXAsIHZfVGV4Y29vcmQpLmEgPD0gYWxwaGFDdXRvZmYpIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiB9XFxuI2lmZGVmIFVTRV9WU01cXG4gZGVwdGggPSBkZXB0aCAqIDAuNSArIDAuNTtcXG4gZmxvYXQgbW9tZW50MSA9IGRlcHRoO1xcbiBmbG9hdCBtb21lbnQyID0gZGVwdGggKiBkZXB0aDtcXG4gI2lmZGVmIFNVUFBPUlRfU1RBTkRBUkRfREVSSVZBVElWRVNcXG4gZmxvYXQgZHggPSBkRmR4KGRlcHRoKTtcXG4gZmxvYXQgZHkgPSBkRmR5KGRlcHRoKTtcXG4gbW9tZW50MiArPSAwLjI1KihkeCpkeCtkeSpkeSk7XFxuICNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KG1vbWVudDEsIG1vbWVudDIsIDAuMCwgMS4wKTtcXG4jZWxzZVxcbiAjaWZkZWYgU1VQUE9SVF9TVEFOREFSRF9ERVJJVkFUSVZFU1xcbiBmbG9hdCBkeCA9IGRGZHgoZGVwdGgpO1xcbiBmbG9hdCBkeSA9IGRGZHkoZGVwdGgpO1xcbiBkZXB0aCArPSBzcXJ0KGR4KmR4ICsgZHkqZHkpICogc2xvcGVTY2FsZSArIGJpYXM7XFxuICNlbHNlXFxuIGRlcHRoICs9IGJpYXM7XFxuICNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVGbG9hdChkZXB0aCAqIDAuNSArIDAuNSk7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc20uZGVidWdfZGVwdGhcXG51bmlmb3JtIHNhbXBsZXIyRCBkZXB0aE1hcDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG52b2lkIG1haW4oKSB7XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKGRlcHRoTWFwLCB2X1RleGNvb3JkKTtcXG4jaWZkZWYgVVNFX1ZTTVxcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRleC5yZ2IsIDEuMCk7XFxuI2Vsc2VcXG4gZmxvYXQgZGVwdGggPSBkZWNvZGVGbG9hdCh0ZXgpO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGRlcHRoLCBkZXB0aCwgZGVwdGgsIDEuMCk7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc20uZGlzdGFuY2UudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuQGltcG9ydCBjbGF5LmNodW5rLnNraW5uaW5nX2hlYWRlclxcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudm9pZCBtYWluICgpe1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24gLCAxLjApO1xcbiB2X1dvcmxkUG9zaXRpb24gPSAod29ybGQgKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKSkueHl6O1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnNtLmRpc3RhbmNlLmZyYWdtZW50XFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSBmbG9hdCByYW5nZSA6IDEwMDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS51dGlsLmVuY29kZV9mbG9hdFxcbnZvaWQgbWFpbigpe1xcbiBmbG9hdCBkaXN0ID0gZGlzdGFuY2UobGlnaHRQb3NpdGlvbiwgdl9Xb3JsZFBvc2l0aW9uKTtcXG4jaWZkZWYgVVNFX1ZTTVxcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGRpc3QsIGRpc3QgKiBkaXN0LCAwLjAsIDAuMCk7XFxuI2Vsc2VcXG4gZGlzdCA9IGRpc3QgLyByYW5nZTtcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlRmxvYXQoZGlzdCk7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkucGx1Z2luLnNoYWRvd19tYXBfY29tbW9uXFxuQGltcG9ydCBjbGF5LnV0aWwuZGVjb2RlX2Zsb2F0XFxuZmxvYXQgdGFwU2hhZG93TWFwKHNhbXBsZXIyRCBtYXAsIHZlYzIgdXYsIGZsb2F0IHope1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRChtYXAsIHV2KTtcXG4gcmV0dXJuIHN0ZXAoeiwgZGVjb2RlRmxvYXQodGV4KSAqIDIuMCAtIDEuMCk7XFxufVxcbmZsb2F0IHBjZihzYW1wbGVyMkQgbWFwLCB2ZWMyIHV2LCBmbG9hdCB6LCBmbG9hdCB0ZXh0dXJlU2l6ZSwgdmVjMiBzY2FsZSkge1xcbiBmbG9hdCBzaGFkb3dDb250cmliID0gdGFwU2hhZG93TWFwKG1hcCwgdXYsIHopO1xcbiB2ZWMyIG9mZnNldCA9IHZlYzIoMS4wIC8gdGV4dHVyZVNpemUpICogc2NhbGU7XFxuI2lmZGVmIFBDRl9LRVJORUxfU0laRVxcbiBmb3IgKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgUENGX0tFUk5FTF9TSVpFOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2ICsgb2Zmc2V0ICogcGNmS2VybmVsW19pZHhfXSwgeik7XFxuIH19XFxuIHJldHVybiBzaGFkb3dDb250cmliIC8gZmxvYXQoUENGX0tFUk5FTF9TSVpFICsgMSk7XFxuI2Vsc2VcXG4gc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKG9mZnNldC54LCAwLjApLCB6KTtcXG4gc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKG9mZnNldC54LCBvZmZzZXQueSksIHopO1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIoLW9mZnNldC54LCBvZmZzZXQueSksIHopO1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIoMC4wLCBvZmZzZXQueSksIHopO1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIoLW9mZnNldC54LCAwLjApLCB6KTtcXG4gc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKC1vZmZzZXQueCwgLW9mZnNldC55KSwgeik7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMihvZmZzZXQueCwgLW9mZnNldC55KSwgeik7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigwLjAsIC1vZmZzZXQueSksIHopO1xcbiByZXR1cm4gc2hhZG93Q29udHJpYiAvIDkuMDtcXG4jZW5kaWZcXG59XFxuZmxvYXQgcGNmKHNhbXBsZXIyRCBtYXAsIHZlYzIgdXYsIGZsb2F0IHosIGZsb2F0IHRleHR1cmVTaXplKSB7XFxuIHJldHVybiBwY2YobWFwLCB1diwgeiwgdGV4dHVyZVNpemUsIHZlYzIoMS4wKSk7XFxufVxcbmZsb2F0IGNoZWJ5c2hldlVwcGVyQm91bmQodmVjMiBtb21lbnRzLCBmbG9hdCB6KXtcXG4gZmxvYXQgcCA9IDAuMDtcXG4geiA9IHogKiAwLjUgKyAwLjU7XFxuIGlmICh6IDw9IG1vbWVudHMueCkge1xcbiBwID0gMS4wO1xcbiB9XFxuIGZsb2F0IHZhcmlhbmNlID0gbW9tZW50cy55IC0gbW9tZW50cy54ICogbW9tZW50cy54O1xcbiB2YXJpYW5jZSA9IG1heCh2YXJpYW5jZSwgMC4wMDAwMDAxKTtcXG4gZmxvYXQgbUQgPSBtb21lbnRzLnggLSB6O1xcbiBmbG9hdCBwTWF4ID0gdmFyaWFuY2UgLyAodmFyaWFuY2UgKyBtRCAqIG1EKTtcXG4gcE1heCA9IGNsYW1wKChwTWF4LTAuNCkvKDEuMC0wLjQpLCAwLjAsIDEuMCk7XFxuIHJldHVybiBtYXgocCwgcE1heCk7XFxufVxcbmZsb2F0IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiBzYW1wbGVyMkQgbWFwLCBtYXQ0IGxpZ2h0VlBNLCB2ZWMzIHBvc2l0aW9uLCBmbG9hdCB0ZXh0dXJlU2l6ZSwgdmVjMiBzY2FsZSwgdmVjMiBvZmZzZXRcXG4pIHtcXG4gdmVjNCBwb3NJbkxpZ2h0U3BhY2UgPSBsaWdodFZQTSAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxuIHBvc0luTGlnaHRTcGFjZS54eXogLz0gcG9zSW5MaWdodFNwYWNlLnc7XFxuIGZsb2F0IHogPSBwb3NJbkxpZ2h0U3BhY2UuejtcXG4gaWYoYWxsKGdyZWF0ZXJUaGFuKHBvc0luTGlnaHRTcGFjZS54eXosIHZlYzMoLTAuOTksIC0wLjk5LCAtMS4wKSkpICYmXFxuIGFsbChsZXNzVGhhbihwb3NJbkxpZ2h0U3BhY2UueHl6LCB2ZWMzKDAuOTksIDAuOTksIDEuMCkpKSl7XFxuIHZlYzIgdXYgPSAocG9zSW5MaWdodFNwYWNlLnh5KzEuMCkgLyAyLjA7XFxuICNpZmRlZiBVU0VfVlNNXFxuIHZlYzIgbW9tZW50cyA9IHRleHR1cmUyRChtYXAsIHV2ICogc2NhbGUgKyBvZmZzZXQpLnh5O1xcbiByZXR1cm4gY2hlYnlzaGV2VXBwZXJCb3VuZChtb21lbnRzLCB6KTtcXG4gI2Vsc2VcXG4gcmV0dXJuIHBjZihtYXAsIHV2ICogc2NhbGUgKyBvZmZzZXQsIHosIHRleHR1cmVTaXplLCBzY2FsZSk7XFxuICNlbmRpZlxcbiB9XFxuIHJldHVybiAxLjA7XFxufVxcbmZsb2F0IGNvbXB1dGVTaGFkb3dDb250cmliKHNhbXBsZXIyRCBtYXAsIG1hdDQgbGlnaHRWUE0sIHZlYzMgcG9zaXRpb24sIGZsb2F0IHRleHR1cmVTaXplKSB7XFxuIHJldHVybiBjb21wdXRlU2hhZG93Q29udHJpYihtYXAsIGxpZ2h0VlBNLCBwb3NpdGlvbiwgdGV4dHVyZVNpemUsIHZlYzIoMS4wKSwgdmVjMigwLjApKTtcXG59XFxuZmxvYXQgY29tcHV0ZVNoYWRvd0NvbnRyaWJPbW5pKHNhbXBsZXJDdWJlIG1hcCwgdmVjMyBkaXJlY3Rpb24sIGZsb2F0IHJhbmdlKVxcbntcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChkaXJlY3Rpb24pO1xcbiB2ZWM0IHNoYWRvd1RleCA9IHRleHR1cmVDdWJlKG1hcCwgZGlyZWN0aW9uKTtcXG4jaWZkZWYgVVNFX1ZTTVxcbiB2ZWMyIG1vbWVudHMgPSBzaGFkb3dUZXgueHk7XFxuIGZsb2F0IHZhcmlhbmNlID0gbW9tZW50cy55IC0gbW9tZW50cy54ICogbW9tZW50cy54O1xcbiBmbG9hdCBtRCA9IG1vbWVudHMueCAtIGRpc3Q7XFxuIGZsb2F0IHAgPSB2YXJpYW5jZSAvICh2YXJpYW5jZSArIG1EICogbUQpO1xcbiBpZihtb21lbnRzLnggKyAwLjAwMSA8IGRpc3Qpe1xcbiByZXR1cm4gY2xhbXAocCwgMC4wLCAxLjApO1xcbiB9ZWxzZXtcXG4gcmV0dXJuIDEuMDtcXG4gfVxcbiNlbHNlXFxuIHJldHVybiBzdGVwKGRpc3QsIChkZWNvZGVGbG9hdChzaGFkb3dUZXgpICsgMC4wMDAyKSAqIHJhbmdlKTtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5wbHVnaW4uY29tcHV0ZV9zaGFkb3dfbWFwXFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpIHx8IGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKSB8fCBkZWZpbmVkKFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4jaWZkZWYgU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRcXG51bmlmb3JtIHNhbXBsZXIyRCBzcG90TGlnaHRTaGFkb3dNYXBzW1NQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIG1hdDQgc3BvdExpZ2h0TWF0cmljZXNbU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gZmxvYXQgc3BvdExpZ2h0U2hhZG93TWFwU2l6ZXNbU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbiNlbmRpZlxcbiNpZmRlZiBESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlRcXG4jaWYgZGVmaW5lZChTSEFET1dfQ0FTQ0FERSlcXG51bmlmb3JtIHNhbXBsZXIyRCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwc1sxXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIG1hdDQgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzW1NIQURPV19DQVNDQURFXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIGZsb2F0IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBTaXplc1sxXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIGZsb2F0IHNoYWRvd0Nhc2NhZGVDbGlwc05lYXJbU0hBRE9XX0NBU0NBREVdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gZmxvYXQgc2hhZG93Q2FzY2FkZUNsaXBzRmFyW1NIQURPV19DQVNDQURFXTp1bmNvbmZpZ3VyYWJsZTtcXG4jZWxzZVxcbnVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzW0RJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBtYXQ0IGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlc1tESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gZmxvYXQgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzW0RJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxuI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVFxcbnVuaWZvcm0gc2FtcGxlckN1YmUgcG9pbnRMaWdodFNoYWRvd01hcHNbUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG4jZW5kaWZcXG51bmlmb3JtIGJvb2wgc2hhZG93RW5hYmxlZCA6IHRydWU7XFxuI2lmZGVmIFBDRl9LRVJORUxfU0laRVxcbnVuaWZvcm0gdmVjMiBwY2ZLZXJuZWxbUENGX0tFUk5FTF9TSVpFXTtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkucGx1Z2luLnNoYWRvd19tYXBfY29tbW9uXFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxudm9pZCBjb21wdXRlU2hhZG93T2ZTcG90TGlnaHRzKHZlYzMgcG9zaXRpb24sIGlub3V0IGZsb2F0IHNoYWRvd0NvbnRyaWJzW1NQT1RfTElHSFRfQ09VTlRdICkge1xcbiBmbG9hdCBzaGFkb3dDb250cmliO1xcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVDsgX2lkeF8rKykge3tcXG4gc2hhZG93Q29udHJpYiA9IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiBzcG90TGlnaHRTaGFkb3dNYXBzW19pZHhfXSwgc3BvdExpZ2h0TWF0cmljZXNbX2lkeF9dLCBwb3NpdGlvbixcXG4gc3BvdExpZ2h0U2hhZG93TWFwU2l6ZXNbX2lkeF9dXFxuICk7XFxuIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IHNoYWRvd0NvbnRyaWI7XFxuIH19XFxuIGZvcihpbnQgX2lkeF8gPSBTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVDsgX2lkeF8gPCBTUE9UX0xJR0hUX0NPVU5UOyBfaWR4XysrKXt7XFxuIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IDEuMDtcXG4gfX1cXG59XFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiNpZmRlZiBTSEFET1dfQ0FTQ0FERVxcbnZvaWQgY29tcHV0ZVNoYWRvd09mRGlyZWN0aW9uYWxMaWdodHModmVjMyBwb3NpdGlvbiwgaW5vdXQgZmxvYXQgc2hhZG93Q29udHJpYnNbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdKXtcXG4gZmxvYXQgZGVwdGggPSAoMi4wICogZ2xfRnJhZ0Nvb3JkLnogLSBnbF9EZXB0aFJhbmdlLm5lYXIgLSBnbF9EZXB0aFJhbmdlLmZhcilcXG4gLyAoZ2xfRGVwdGhSYW5nZS5mYXIgLSBnbF9EZXB0aFJhbmdlLm5lYXIpO1xcbiBmbG9hdCBzaGFkb3dDb250cmliO1xcbiBzaGFkb3dDb250cmlic1swXSA9IDEuMDtcXG4gZm9yIChpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IFNIQURPV19DQVNDQURFOyBfaWR4XysrKSB7e1xcbiBpZiAoXFxuIGRlcHRoID49IHNoYWRvd0Nhc2NhZGVDbGlwc05lYXJbX2lkeF9dICYmXFxuIGRlcHRoIDw9IHNoYWRvd0Nhc2NhZGVDbGlwc0ZhcltfaWR4X11cXG4gKSB7XFxuIHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYihcXG4gZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHNbMF0sIGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlc1tfaWR4X10sIHBvc2l0aW9uLFxcbiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXNbMF0sXFxuIHZlYzIoMS4wIC8gZmxvYXQoU0hBRE9XX0NBU0NBREUpLCAxLjApLFxcbiB2ZWMyKGZsb2F0KF9pZHhfKSAvIGZsb2F0KFNIQURPV19DQVNDQURFKSwgMC4wKVxcbiApO1xcbiBzaGFkb3dDb250cmlic1swXSA9IHNoYWRvd0NvbnRyaWI7XFxuIH1cXG4gfX1cXG4gZm9yKGludCBfaWR4XyA9IERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVDsgX2lkeF8gPCBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVDsgX2lkeF8rKykge3tcXG4gc2hhZG93Q29udHJpYnNbX2lkeF9dID0gMS4wO1xcbiB9fVxcbn1cXG4jZWxzZVxcbnZvaWQgY29tcHV0ZVNoYWRvd09mRGlyZWN0aW9uYWxMaWdodHModmVjMyBwb3NpdGlvbiwgaW5vdXQgZmxvYXQgc2hhZG93Q29udHJpYnNbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdKXtcXG4gZmxvYXQgc2hhZG93Q29udHJpYjtcXG4gZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmliID0gY29tcHV0ZVNoYWRvd0NvbnRyaWIoXFxuIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzW19pZHhfXSwgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzW19pZHhfXSwgcG9zaXRpb24sXFxuIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBTaXplc1tfaWR4X11cXG4gKTtcXG4gc2hhZG93Q29udHJpYnNbX2lkeF9dID0gc2hhZG93Q29udHJpYjtcXG4gfX1cXG4gZm9yKGludCBfaWR4XyA9IERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVDsgX2lkeF8gPCBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVDsgX2lkeF8rKykge3tcXG4gc2hhZG93Q29udHJpYnNbX2lkeF9dID0gMS4wO1xcbiB9fVxcbn1cXG4jZW5kaWZcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxudm9pZCBjb21wdXRlU2hhZG93T2ZQb2ludExpZ2h0cyh2ZWMzIHBvc2l0aW9uLCBpbm91dCBmbG9hdCBzaGFkb3dDb250cmlic1tQT0lOVF9MSUdIVF9DT1VOVF0gKXtcXG4gdmVjMyBsaWdodFBvc2l0aW9uO1xcbiB2ZWMzIGRpcmVjdGlvbjtcXG4gZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBsaWdodFBvc2l0aW9uID0gcG9pbnRMaWdodFBvc2l0aW9uW19pZHhfXTtcXG4gZGlyZWN0aW9uID0gcG9zaXRpb24gLSBsaWdodFBvc2l0aW9uO1xcbiBzaGFkb3dDb250cmlic1tfaWR4X10gPSBjb21wdXRlU2hhZG93Q29udHJpYk9tbmkocG9pbnRMaWdodFNoYWRvd01hcHNbX2lkeF9dLCBkaXJlY3Rpb24sIHBvaW50TGlnaHRSYW5nZVtfaWR4X10pO1xcbiB9fVxcbiBmb3IoaW50IF9pZHhfID0gUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XyA8IFBPSU5UX0xJR0hUX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmlic1tfaWR4X10gPSAxLjA7XFxuIH19XFxufVxcbiNlbmRpZlxcbiNlbmRpZlxcbkBlbmRcIjtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcclxuaW1wb3J0IEZydXN0dW0gZnJvbSAnLi4vbWF0aC9GcnVzdHVtJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcclxuaW1wb3J0IFJlbmRlcmVyIGZyb20gJy4uL1JlbmRlcmVyJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IE9ydGhvQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9PcnRob2dyYXBoaWMnO1xyXG5cclxuaW1wb3J0IFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcclxuaW1wb3J0IFRleHR1cmVQb29sIGZyb20gJy4uL2NvbXBvc2l0b3IvVGV4dHVyZVBvb2wnO1xyXG5cclxuaW1wb3J0IG1hdDQgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0NCc7XHJcblxyXG52YXIgdGFyZ2V0cyA9IFsncHgnLCAnbngnLCAncHknLCAnbnknLCAncHonLCAnbnonXTtcclxuXHJcbmltcG9ydCBzaGFkb3dtYXBFc3NsIGZyb20gJy4uL3NoYWRlci9zb3VyY2Uvc2hhZG93bWFwLmdsc2wuanMnO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHNoYWRvd21hcEVzc2wpO1xyXG5cclxuZnVuY3Rpb24gZ2V0RGVwdGhNYXRlcmlhbFVuaWZvcm0ocmVuZGVyYWJsZSwgZGVwdGhNYXRlcmlhbCwgc3ltYm9sKSB7XHJcbiAgICBpZiAoc3ltYm9sID09PSAnYWxwaGFNYXAnKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdkaWZmdXNlTWFwJyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdhbHBoYUN1dG9mZicpIHtcclxuICAgICAgICBpZiAocmVuZGVyYWJsZS5tYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKVxyXG4gICAgICAgICAgICAmJiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgnZGlmZnVzZU1hcCcpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHZhciBhbHBoYUN1dG9mZiA9IHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdhbHBoYUN1dG9mZicpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWxwaGFDdXRvZmYgfHwgMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd1dlJlcGVhdCcpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ3V2UmVwZWF0Jyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd1dk9mZnNldCcpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ3V2T2Zmc2V0Jyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZGVwdGhNYXRlcmlhbC5nZXQoc3ltYm9sKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaXNEZXB0aE1hdGVyaWFsQ2hhbmdlZChyZW5kZXJhYmxlLCBwcmV2UmVuZGVyYWJsZSkge1xyXG4gICAgdmFyIG1hdEEgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgdmFyIG1hdEIgPSBwcmV2UmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgIHJldHVybiBtYXRBLmdldCgnZGlmZnVzZU1hcCcpICE9PSBtYXRCLmdldCgnZGlmZnVzZU1hcCcpXHJcbiAgICAgICAgfHwgKG1hdEEuZ2V0KCdhbHBoYUN1dG9mZicpIHx8IDApICE9PSAobWF0Qi5nZXQoJ2FscGhhQ3V0b2ZmJykgfHwgMCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXNzIHJlbmRlcmluZyBzaGFkb3cgbWFwLlxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wcmVQYXNzLlNoYWRvd01hcFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgdmFyIHNoYWRvd01hcFBhc3MgPSBuZXcgY2xheS5wcmVQYXNzLlNoYWRvd01hcCh7XHJcbiAqICAgICAgICAgc29mdFNoYWRvdzogY2xheS5wcmVQYXNzLlNoYWRvd01hcC5WU01cclxuICogICAgIH0pO1xyXG4gKiAgICAgLi4uXHJcbiAqICAgICBhbmltYXRpb24ub24oJ2ZyYW1lJywgZnVuY3Rpb24gKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgIHNoYWRvd01hcFBhc3MucmVuZGVyKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKTtcclxuICogICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAqICAgICB9KTtcclxuICovXHJcbnZhciBTaGFkb3dNYXBQYXNzID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5wcmVQYXNzLlNoYWRvd01hcCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNvZnQgc2hhZG93IHRlY2huaXF1ZS5cclxuICAgICAgICAgKiBDYW4gYmUge0BsaW5rIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAuUENGfSBvciB7QGxpbmsgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5WU019XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzb2Z0U2hhZG93OiBTaGFkb3dNYXBQYXNzLlBDRixcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU29mdCBzaGFkb3cgYmx1ciBzaXplXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzaGFkb3dCbHVyOiAxLjAsXHJcblxyXG4gICAgICAgIGxpZ2h0RnJ1c3R1bUJpYXM6ICdhdXRvJyxcclxuXHJcbiAgICAgICAga2VybmVsUENGOiBuZXcgRmxvYXQzMkFycmF5KFtcclxuICAgICAgICAgICAgMSwgMCxcclxuICAgICAgICAgICAgMSwgMSxcclxuICAgICAgICAgICAgLTEsIDEsXHJcbiAgICAgICAgICAgIDAsIDEsXHJcbiAgICAgICAgICAgIC0xLCAwLFxyXG4gICAgICAgICAgICAtMSwgLTEsXHJcbiAgICAgICAgICAgIDEsIC0xLFxyXG4gICAgICAgICAgICAwLCAtMVxyXG4gICAgICAgIF0pLFxyXG5cclxuICAgICAgICBwcmVjaXNpb246ICdoaWdocCcsXHJcblxyXG4gICAgICAgIF9sYXN0UmVuZGVyTm90Q2FzdFNoYWRvdzogZmFsc2UsXHJcblxyXG4gICAgICAgIF9mcmFtZUJ1ZmZlcjogbmV3IEZyYW1lQnVmZmVyKCksXHJcblxyXG4gICAgICAgIF90ZXh0dXJlczoge30sXHJcbiAgICAgICAgX3NoYWRvd01hcE51bWJlcjoge1xyXG4gICAgICAgICAgICAnUE9JTlRfTElHSFQnOiAwLFxyXG4gICAgICAgICAgICAnRElSRUNUSU9OQUxfTElHSFQnOiAwLFxyXG4gICAgICAgICAgICAnU1BPVF9MSUdIVCc6IDBcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfZGVwdGhNYXRlcmlhbHM6IHt9LFxyXG4gICAgICAgIF9kaXN0YW5jZU1hdGVyaWFsczoge30sXHJcblxyXG4gICAgICAgIF9yZWNlaXZlcnM6IFtdLFxyXG4gICAgICAgIF9saWdodHNDYXN0U2hhZG93OiBbXSxcclxuXHJcbiAgICAgICAgX2xpZ2h0Q2FtZXJhczoge30sXHJcbiAgICAgICAgX2xpZ2h0TWF0ZXJpYWxzOiB7fSxcclxuXHJcbiAgICAgICAgX3RleHR1cmVQb29sOiBuZXcgVGV4dHVyZVBvb2woKVxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gR2F1c3NpYW4gZmlsdGVyIHBhc3MgZm9yIFZTTVxyXG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzSCA9IG5ldyBQYXNzKHtcclxuICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLmdhdXNzaWFuX2JsdXInKVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9nYXVzc2lhblBhc3NWID0gbmV3IFBhc3Moe1xyXG4gICAgICAgIGZyYWdtZW50OiBTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IuZ2F1c3NpYW5fYmx1cicpXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2dhdXNzaWFuUGFzc0guc2V0VW5pZm9ybSgnYmx1clNpemUnLCB0aGlzLnNoYWRvd0JsdXIpO1xyXG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzSC5zZXRVbmlmb3JtKCdibHVyRGlyJywgMC4wKTtcclxuICAgIHRoaXMuX2dhdXNzaWFuUGFzc1Yuc2V0VW5pZm9ybSgnYmx1clNpemUnLCB0aGlzLnNoYWRvd0JsdXIpO1xyXG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzVi5zZXRVbmlmb3JtKCdibHVyRGlyJywgMS4wKTtcclxuXHJcbiAgICB0aGlzLl9vdXRwdXREZXB0aFBhc3MgPSBuZXcgUGFzcyh7XHJcbiAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkuc20uZGVidWdfZGVwdGgnKVxyXG4gICAgfSk7XHJcbn0sIHtcclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIHNjZW5lIHRvIHNoYWRvdyB0ZXh0dXJlc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuU2NlbmV9IHNjZW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkNhbWVyYX0gc2NlbmVDYW1lcmFcclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtub3RVcGRhdGVTY2VuZT1mYWxzZV1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuU2hhZG93TWFwLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhLCBub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgIGlmICghc2NlbmVDYW1lcmEpIHtcclxuICAgICAgICAgICAgc2NlbmVDYW1lcmEgPSBzY2VuZS5nZXRNYWluQ2FtZXJhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYmVmb3JlcmVuZGVyJywgdGhpcywgcmVuZGVyZXIsIHNjZW5lLCBzY2VuZUNhbWVyYSk7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyU2hhZG93UGFzcyhyZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhLCBub3RVcGRhdGVTY2VuZSk7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdhZnRlcnJlbmRlcicsIHRoaXMsIHJlbmRlcmVyLCBzY2VuZSwgc2NlbmVDYW1lcmEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlYnVnIHJlbmRlcmluZyBvZiBzaGFkb3cgdGV4dHVyZXNcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHNpemVcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuU2hhZG93TWFwLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICByZW5kZXJEZWJ1ZzogZnVuY3Rpb24gKHJlbmRlcmVyLCBzaXplKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuc2F2ZUNsZWFyKCk7XHJcbiAgICAgICAgdmFyIHZpZXdwb3J0ID0gcmVuZGVyZXIudmlld3BvcnQ7XHJcbiAgICAgICAgdmFyIHggPSAwLCB5ID0gMDtcclxuICAgICAgICB2YXIgd2lkdGggPSBzaXplIHx8IHZpZXdwb3J0LndpZHRoIC8gNDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gd2lkdGg7XHJcbiAgICAgICAgaWYgKHRoaXMuc29mdFNoYWRvdyA9PT0gU2hhZG93TWFwUGFzcy5WU00pIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0RGVwdGhQYXNzLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0RGVwdGhQYXNzLm1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfVlNNJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fdGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1tuYW1lXTtcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQoeCwgeSwgd2lkdGggKiB0ZXh0dXJlLndpZHRoIC8gdGV4dHVyZS5oZWlnaHQsIGhlaWdodCk7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dERlcHRoUGFzcy5zZXRVbmlmb3JtKCdkZXB0aE1hcCcsIHRleHR1cmUpO1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXREZXB0aFBhc3MucmVuZGVyKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgeCArPSB3aWR0aCAqIHRleHR1cmUud2lkdGggLyB0ZXh0dXJlLmhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodmlld3BvcnQpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlc3RvcmVDbGVhcigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlUmVjZWl2ZXJzOiBmdW5jdGlvbiAocmVuZGVyZXIsIG1lc2gpIHtcclxuICAgICAgICBpZiAobWVzaC5yZWNlaXZlU2hhZG93KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlY2VpdmVycy5wdXNoKG1lc2gpO1xyXG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLnNldCgnc2hhZG93RW5hYmxlZCcsIDEpO1xyXG5cclxuICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC5zZXQoJ3BjZktlcm5lbCcsIHRoaXMua2VybmVsUENGKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuc2V0KCdzaGFkb3dFbmFibGVkJywgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xyXG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xyXG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdQQ0ZfS0VSTkVMX1NJWkUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9WU00nKTtcclxuICAgICAgICAgICAgdmFyIGtlcm5lbFBDRiA9IHRoaXMua2VybmVsUENGO1xyXG4gICAgICAgICAgICBpZiAoa2VybmVsUENGICYmIGtlcm5lbFBDRi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdQQ0ZfS0VSTkVMX1NJWkUnLCBrZXJuZWxQQ0YubGVuZ3RoIC8gMik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdQQ0ZfS0VSTkVMX1NJWkUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZTogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBzY2VuZS50cmF2ZXJzZShmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5fdXBkYXRlUmVjZWl2ZXJzKHJlbmRlcmVyLCByZW5kZXJhYmxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbGlnaHQgPSBzY2VuZS5saWdodHNbaV07XHJcbiAgICAgICAgICAgIGlmIChsaWdodC5jYXN0U2hhZG93ICYmICFsaWdodC5pbnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cucHVzaChsaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZW5kZXJTaGFkb3dQYXNzOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBzY2VuZUNhbWVyYSwgbm90VXBkYXRlU2NlbmUpIHtcclxuICAgICAgICAvLyByZXNldFxyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fc2hhZG93TWFwTnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NoYWRvd01hcE51bWJlcltuYW1lXSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9yZWNlaXZlcnMubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICBpZiAoIW5vdFVwZGF0ZVNjZW5lKSB7XHJcbiAgICAgICAgICAgIHNjZW5lLnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2NlbmVDYW1lcmEpIHtcclxuICAgICAgICAgICAgc2NlbmVDYW1lcmEudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzY2VuZS51cGRhdGVMaWdodHMoKTtcclxuICAgICAgICB0aGlzLl91cGRhdGUocmVuZGVyZXIsIHNjZW5lKTtcclxuXHJcbiAgICAgICAgLy8gTmVlZHMgdG8gdXBkYXRlIHRoZSByZWNlaXZlcnMgYWdhaW4gaWYgc2hhZG93cyBjb21lIGZyb20gMSB0byAwLlxyXG4gICAgICAgIGlmICghdGhpcy5fbGlnaHRzQ2FzdFNoYWRvdy5sZW5ndGggJiYgdGhpcy5fbGFzdFJlbmRlck5vdENhc3RTaGFkb3cpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fbGFzdFJlbmRlck5vdENhc3RTaGFkb3cgPSB0aGlzLl9saWdodHNDYXN0U2hhZG93ID09PSAwO1xyXG5cclxuICAgICAgICBfZ2wuZW5hYmxlKF9nbC5ERVBUSF9URVNUKTtcclxuICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgICAgIF9nbC5kaXNhYmxlKF9nbC5CTEVORCk7XHJcblxyXG4gICAgICAgIC8vIENsZWFyIHdpdGggaGlnaC16LCBzbyB0aGUgcGFydCBub3QgcmVuZGVyZWQgd2lsbCBub3QgYmVlbiBzaGFkb3dlZFxyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICAvLyBUT0RPIHJlc3RvcmVcclxuICAgICAgICBfZ2wuY2xlYXJDb2xvcigxLjAsIDEuMCwgMS4wLCAxLjApO1xyXG5cclxuICAgICAgICAvLyBTaGFkb3cgdW5pZm9ybXNcclxuICAgICAgICB2YXIgc3BvdExpZ2h0U2hhZG93TWFwcyA9IFtdO1xyXG4gICAgICAgIHZhciBzcG90TGlnaHRNYXRyaWNlcyA9IFtdO1xyXG4gICAgICAgIHZhciBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcyA9IFtdO1xyXG4gICAgICAgIHZhciBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMgPSBbXTtcclxuICAgICAgICB2YXIgc2hhZG93Q2FzY2FkZUNsaXBzID0gW107XHJcbiAgICAgICAgdmFyIHBvaW50TGlnaHRTaGFkb3dNYXBzID0gW107XHJcblxyXG4gICAgICAgIHZhciBkaXJMaWdodEhhc0Nhc2NhZGU7XHJcbiAgICAgICAgLy8gQ3JlYXRlIHRleHR1cmVzIGZvciBzaGFkb3cgbWFwXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9saWdodHNDYXN0U2hhZG93Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBsaWdodCA9IHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3dbaV07XHJcbiAgICAgICAgICAgIGlmIChsaWdodC50eXBlID09PSAnRElSRUNUSU9OQUxfTElHSFQnKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRpckxpZ2h0SGFzQ2FzY2FkZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignT25seSBvbmUgZGlyZWVjdGlvbmFsIGxpZ2h0IHN1cHBvcnRlZCB3aXRoIHNoYWRvdyBjYXNjYWRlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobGlnaHQuc2hhZG93Q2FzY2FkZSA+IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1N1cHBvcnQgYXQgbW9zdCA0IGNhc2NhZGUnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChsaWdodC5zaGFkb3dDYXNjYWRlID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpckxpZ2h0SGFzQ2FzY2FkZSA9IGxpZ2h0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRGlyZWN0aW9uYWxMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlcixcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZSxcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZUNhbWVyYSxcclxuICAgICAgICAgICAgICAgICAgICBsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHMsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxpZ2h0LnR5cGUgPT09ICdTUE9UX0xJR0hUJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJTcG90TGlnaHRTaGFkb3coXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2NlbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3BvdExpZ2h0TWF0cmljZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgc3BvdExpZ2h0U2hhZG93TWFwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChsaWdodC50eXBlID09PSAnUE9JTlRfTElHSFQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclBvaW50TGlnaHRTaGFkb3coXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2NlbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRMaWdodFNoYWRvd01hcHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3NoYWRvd01hcE51bWJlcltsaWdodC50eXBlXSsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgbGlnaHRUeXBlIGluIHRoaXMuX3NoYWRvd01hcE51bWJlcikge1xyXG4gICAgICAgICAgICB2YXIgbnVtYmVyID0gdGhpcy5fc2hhZG93TWFwTnVtYmVyW2xpZ2h0VHlwZV07XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBsaWdodFR5cGUgKyAnX1NIQURPV01BUF9DT1VOVCc7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcmVjZWl2ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWVzaCA9IHRoaXMuX3JlY2VpdmVyc1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IG1lc2gubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWwuZnJhZ21lbnREZWZpbmVzW2tleV0gIT09IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCBrZXksIG51bWJlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1hdGVyaWFsLmlzRGVmaW5lZCgnZnJhZ21lbnQnLCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcmVjZWl2ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fcmVjZWl2ZXJzW2ldO1xyXG4gICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBtZXNoLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICBpZiAoZGlyTGlnaHRIYXNDYXNjYWRlKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NIQURPV19DQVNDQURFJywgZGlyTGlnaHRIYXNDYXNjYWRlLnNoYWRvd0Nhc2NhZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NIQURPV19DQVNDQURFJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzaGFkb3dVbmlmb3JtcyA9IHNjZW5lLnNoYWRvd1VuaWZvcm1zO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBnZXRTaXplKHRleHR1cmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB2YXIgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMubWFwKGdldFNpemUpO1xyXG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5kaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcyA9IHsgdmFsdWU6IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzLCB0eXBlOiAndHYnIH07XHJcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLmRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlcyA9IHsgdmFsdWU6IGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlcywgdHlwZTogJ200dicgfTtcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzID0geyB2YWx1ZTogZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzLCB0eXBlOiAnMWZ2JyB9O1xyXG4gICAgICAgICAgICBpZiAoZGlyTGlnaHRIYXNDYXNjYWRlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93Q2FzY2FkZUNsaXBzTmVhciA9IHNoYWRvd0Nhc2NhZGVDbGlwcy5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNoYWRvd0Nhc2NhZGVDbGlwc0ZhciA9IHNoYWRvd0Nhc2NhZGVDbGlwcy5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgc2hhZG93Q2FzY2FkZUNsaXBzTmVhci5wb3AoKTtcclxuICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwc0Zhci5zaGlmdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgZnJvbSBmYXIgdG8gbmVhclxyXG4gICAgICAgICAgICAgICAgc2hhZG93Q2FzY2FkZUNsaXBzTmVhci5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHNGYXIucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzLnJldmVyc2UoKTtcclxuICAgICAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLnNoYWRvd0Nhc2NhZGVDbGlwc05lYXIgPSB7IHZhbHVlOiBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyLCB0eXBlOiAnMWZ2JyB9O1xyXG4gICAgICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc2hhZG93Q2FzY2FkZUNsaXBzRmFyID0geyB2YWx1ZTogc2hhZG93Q2FzY2FkZUNsaXBzRmFyLCB0eXBlOiAnMWZ2JyB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3BvdExpZ2h0U2hhZG93TWFwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBzcG90TGlnaHRTaGFkb3dNYXBTaXplcyA9IHNwb3RMaWdodFNoYWRvd01hcHMubWFwKGdldFNpemUpO1xyXG4gICAgICAgICAgICB2YXIgc2hhZG93VW5pZm9ybXMgPSBzY2VuZS5zaGFkb3dVbmlmb3JtcztcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc3BvdExpZ2h0U2hhZG93TWFwcyA9IHsgdmFsdWU6IHNwb3RMaWdodFNoYWRvd01hcHMsIHR5cGU6ICd0dicgfTtcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc3BvdExpZ2h0TWF0cmljZXMgPSB7IHZhbHVlOiBzcG90TGlnaHRNYXRyaWNlcywgdHlwZTogJ200dicgfTtcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc3BvdExpZ2h0U2hhZG93TWFwU2l6ZXMgPSB7IHZhbHVlOiBzcG90TGlnaHRTaGFkb3dNYXBTaXplcywgdHlwZTogJzFmdicgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwb2ludExpZ2h0U2hhZG93TWFwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLnBvaW50TGlnaHRTaGFkb3dNYXBzID0geyB2YWx1ZTogcG9pbnRMaWdodFNoYWRvd01hcHMsIHR5cGU6ICd0dicgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbmRlckRpcmVjdGlvbmFsTGlnaHRTaGFkb3c6IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciBzcGxpdEZydXN0dW0gPSBuZXcgRnJ1c3R1bSgpO1xyXG4gICAgICAgIHZhciBzcGxpdFByb2pNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBjcm9wQkJveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHZhciBjcm9wTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICB2YXIgbGlnaHRWaWV3TWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICB2YXIgbGlnaHRWaWV3UHJvak1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgdmFyIGxpZ2h0UHJvak1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBzY2VuZUNhbWVyYSwgbGlnaHQsIHNoYWRvd0Nhc2NhZGVDbGlwcywgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcykge1xyXG5cclxuICAgICAgICAgICAgdmFyIGRlZmF1bHRTaGFkb3dNYXRlcmlhbCA9IHRoaXMuX2dldERlcHRoTWF0ZXJpYWwobGlnaHQpO1xyXG4gICAgICAgICAgICB2YXIgcGFzc0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgIGdldE1hdGVyaWFsOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLnNoYWRvd0RlcHRoTWF0ZXJpYWwgfHwgZGVmYXVsdFNoYWRvd01hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGlzTWF0ZXJpYWxDaGFuZ2VkOiBpc0RlcHRoTWF0ZXJpYWxDaGFuZ2VkLFxyXG4gICAgICAgICAgICAgICAgZ2V0VW5pZm9ybTogZ2V0RGVwdGhNYXRlcmlhbFVuaWZvcm0sXHJcbiAgICAgICAgICAgICAgICBpZlJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5jYXN0U2hhZG93O1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNvcnRDb21wYXJlOiBSZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgLy8gRmlyc3QgZnJhbWVcclxuICAgICAgICAgICAgaWYgKCFzY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUuaXNGaW5pdGUoKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJvdW5kaW5nQm94ID0gc2NlbmUuZ2V0Qm91bmRpbmdCb3goKTtcclxuICAgICAgICAgICAgICAgIHNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIC5jb3B5KGJvdW5kaW5nQm94KS5hcHBseVRyYW5zZm9ybShzY2VuZUNhbWVyYS52aWV3TWF0cml4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBDb25zaWRlcmluZyBtb3Zpbmcgc3BlZWQgc2luY2UgdGhlIGJvdW5kaW5nIGJveCBpcyBmcm9tIGxhc3QgZnJhbWVcclxuICAgICAgICAgICAgLy8gVE9ETzogYWRkIGEgYmlhc1xyXG4gICAgICAgICAgICB2YXIgY2xpcHBlZEZhciA9IE1hdGgubWluKC1zY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUubWluLnosIHNjZW5lQ2FtZXJhLmZhcik7XHJcbiAgICAgICAgICAgIHZhciBjbGlwcGVkTmVhciA9IE1hdGgubWF4KC1zY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUubWF4LnosIHNjZW5lQ2FtZXJhLm5lYXIpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGxpZ2h0Q2FtZXJhID0gdGhpcy5fZ2V0RGlyZWN0aW9uYWxMaWdodENhbWVyYShsaWdodCwgc2NlbmUsIHNjZW5lQ2FtZXJhKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBsdnBNYXQ0QXJyID0gbGlnaHRWaWV3UHJvak1hdHJpeC5hcnJheTtcclxuICAgICAgICAgICAgbGlnaHRQcm9qTWF0cml4LmNvcHkobGlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgICAgIG1hdDQuaW52ZXJ0KGxpZ2h0Vmlld01hdHJpeC5hcnJheSwgbGlnaHRDYW1lcmEud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KGxpZ2h0Vmlld01hdHJpeC5hcnJheSwgbGlnaHRWaWV3TWF0cml4LmFycmF5LCBzY2VuZUNhbWVyYS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgIG1hdDQubXVsdGlwbHkobHZwTWF0NEFyciwgbGlnaHRQcm9qTWF0cml4LmFycmF5LCBsaWdodFZpZXdNYXRyaXguYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGNsaXBQbGFuZXMgPSBbXTtcclxuICAgICAgICAgICAgdmFyIGlzUGVyc3BlY3RpdmUgPSBzY2VuZUNhbWVyYSBpbnN0YW5jZW9mIFBlcnNwZWN0aXZlQ2FtZXJhO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNjYWxlWiA9IChzY2VuZUNhbWVyYS5uZWFyICsgc2NlbmVDYW1lcmEuZmFyKSAvIChzY2VuZUNhbWVyYS5uZWFyIC0gc2NlbmVDYW1lcmEuZmFyKTtcclxuICAgICAgICAgICAgdmFyIG9mZnNldFogPSAyICogc2NlbmVDYW1lcmEubmVhciAqIHNjZW5lQ2FtZXJhLmZhciAvIChzY2VuZUNhbWVyYS5uZWFyIC0gc2NlbmVDYW1lcmEuZmFyKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbGlnaHQuc2hhZG93Q2FzY2FkZTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2xvZyA9IGNsaXBwZWROZWFyICogTWF0aC5wb3coY2xpcHBlZEZhciAvIGNsaXBwZWROZWFyLCBpIC8gbGlnaHQuc2hhZG93Q2FzY2FkZSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VuaSA9IGNsaXBwZWROZWFyICsgKGNsaXBwZWRGYXIgLSBjbGlwcGVkTmVhcikgKiBpIC8gbGlnaHQuc2hhZG93Q2FzY2FkZTtcclxuICAgICAgICAgICAgICAgIHZhciBjID0gY2xvZyAqIGxpZ2h0LmNhc2NhZGVTcGxpdExvZ0ZhY3RvciArIGN1bmkgKiAoMSAtIGxpZ2h0LmNhc2NhZGVTcGxpdExvZ0ZhY3Rvcik7XHJcbiAgICAgICAgICAgICAgICBjbGlwUGxhbmVzLnB1c2goYyk7XHJcbiAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHMucHVzaCgtKC1jICogc2NhbGVaICsgb2Zmc2V0WikgLyAtYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9nZXRUZXh0dXJlKGxpZ2h0LCBsaWdodC5zaGFkb3dDYXNjYWRlKTtcclxuICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMucHVzaCh0ZXh0dXJlKTtcclxuXHJcbiAgICAgICAgICAgIHZhciB2aWV3cG9ydCA9IHJlbmRlcmVyLnZpZXdwb3J0O1xyXG5cclxuICAgICAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5hdHRhY2godGV4dHVyZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICBfZ2wuY2xlYXIoX2dsLkNPTE9SX0JVRkZFUl9CSVQgfCBfZ2wuREVQVEhfQlVGRkVSX0JJVCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpZ2h0LnNoYWRvd0Nhc2NhZGU7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBzcGxpdHRlZCBmcnVzdHVtXHJcbiAgICAgICAgICAgICAgICB2YXIgbmVhclBsYW5lID0gY2xpcFBsYW5lc1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBmYXJQbGFuZSA9IGNsaXBQbGFuZXNbaSArIDFdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUGVyc3BlY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXQ0LnBlcnNwZWN0aXZlKHNwbGl0UHJvak1hdHJpeC5hcnJheSwgc2NlbmVDYW1lcmEuZm92IC8gMTgwICogTWF0aC5QSSwgc2NlbmVDYW1lcmEuYXNwZWN0LCBuZWFyUGxhbmUsIGZhclBsYW5lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdDQub3J0aG8oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0UHJvak1hdHJpeC5hcnJheSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NlbmVDYW1lcmEubGVmdCwgc2NlbmVDYW1lcmEucmlnaHQsIHNjZW5lQ2FtZXJhLmJvdHRvbSwgc2NlbmVDYW1lcmEudG9wLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZWFyUGxhbmUsIGZhclBsYW5lXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNwbGl0RnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbihzcGxpdFByb2pNYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgc3BsaXRGcnVzdHVtLmdldFRyYW5zZm9ybWVkQm91bmRpbmdCb3goY3JvcEJCb3gsIGxpZ2h0Vmlld01hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICBjcm9wQkJveC5hcHBseVByb2plY3Rpb24obGlnaHRQcm9qTWF0cml4KTtcclxuICAgICAgICAgICAgICAgIHZhciBfbWluID0gY3JvcEJCb3gubWluLmFycmF5O1xyXG4gICAgICAgICAgICAgICAgdmFyIF9tYXggPSBjcm9wQkJveC5tYXguYXJyYXk7XHJcbiAgICAgICAgICAgICAgICBfbWluWzBdID0gTWF0aC5tYXgoX21pblswXSwgLTEpO1xyXG4gICAgICAgICAgICAgICAgX21pblsxXSA9IE1hdGgubWF4KF9taW5bMV0sIC0xKTtcclxuICAgICAgICAgICAgICAgIF9tYXhbMF0gPSBNYXRoLm1pbihfbWF4WzBdLCAxKTtcclxuICAgICAgICAgICAgICAgIF9tYXhbMV0gPSBNYXRoLm1pbihfbWF4WzFdLCAxKTtcclxuICAgICAgICAgICAgICAgIGNyb3BNYXRyaXgub3J0aG8oX21pblswXSwgX21heFswXSwgX21pblsxXSwgX21heFsxXSwgMSwgLTEpO1xyXG4gICAgICAgICAgICAgICAgbGlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5tdWx0aXBseUxlZnQoY3JvcE1hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHNoYWRvd1NpemUgPSBsaWdodC5zaGFkb3dSZXNvbHV0aW9uIHx8IDUxMjtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBSZXZlcnNlZCwgbGVmdCB0byByaWdodCA9PiBmYXIgdG8gbmVhclxyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQoKGxpZ2h0LnNoYWRvd0Nhc2NhZGUgLSBpIC0gMSkgKiBzaGFkb3dTaXplLCAwLCBzaGFkb3dTaXplLCBzaGFkb3dTaXplLCAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcmVuZGVyTGlzdCA9IHNjZW5lLnVwZGF0ZVJlbmRlckxpc3QobGlnaHRDYW1lcmEpO1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhyZW5kZXJMaXN0Lm9wYXF1ZSwgbGlnaHRDYW1lcmEsIHBhc3NDb25maWcpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEZpbHRlciBmb3IgVlNNXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dhdXNzaWFuRmlsdGVyKHJlbmRlcmVyLCB0ZXh0dXJlLCB0ZXh0dXJlLndpZHRoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICAgICAgICAgIG1hdHJpeC5jb3B5KGxpZ2h0Q2FtZXJhLnZpZXdNYXRyaXgpXHJcbiAgICAgICAgICAgICAgICAgICAgLm11bHRpcGx5TGVmdChsaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMucHVzaChtYXRyaXguYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxpZ2h0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXguY29weShsaWdodFByb2pNYXRyaXgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodmlld3BvcnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIHJlbmRlclNwb3RMaWdodFNoYWRvdzogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgbGlnaHQsIHNwb3RMaWdodE1hdHJpY2VzLCBzcG90TGlnaHRTaGFkb3dNYXBzKSB7XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fZ2V0VGV4dHVyZShsaWdodCk7XHJcbiAgICAgICAgdmFyIGxpZ2h0Q2FtZXJhID0gdGhpcy5fZ2V0U3BvdExpZ2h0Q2FtZXJhKGxpZ2h0KTtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmF0dGFjaCh0ZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgX2dsLmNsZWFyKF9nbC5DT0xPUl9CVUZGRVJfQklUIHwgX2dsLkRFUFRIX0JVRkZFUl9CSVQpO1xyXG5cclxuICAgICAgICB2YXIgZGVmYXVsdFNoYWRvd01hdGVyaWFsID0gdGhpcy5fZ2V0RGVwdGhNYXRlcmlhbChsaWdodCk7XHJcbiAgICAgICAgdmFyIHBhc3NDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGdldE1hdGVyaWFsOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGUuc2hhZG93RGVwdGhNYXRlcmlhbCB8fCBkZWZhdWx0U2hhZG93TWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGlzTWF0ZXJpYWxDaGFuZ2VkOiBpc0RlcHRoTWF0ZXJpYWxDaGFuZ2VkLFxyXG4gICAgICAgICAgICBnZXRVbmlmb3JtOiBnZXREZXB0aE1hdGVyaWFsVW5pZm9ybSxcclxuICAgICAgICAgICAgaWZSZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5jYXN0U2hhZG93O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzb3J0Q29tcGFyZTogUmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgcmVuZGVyTGlzdCA9IHNjZW5lLnVwZGF0ZVJlbmRlckxpc3QobGlnaHRDYW1lcmEpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MocmVuZGVyTGlzdC5vcGFxdWUsIGxpZ2h0Q2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgLy8gRmlsdGVyIGZvciBWU01cclxuICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xyXG4gICAgICAgICAgICB0aGlzLl9nYXVzc2lhbkZpbHRlcihyZW5kZXJlciwgdGV4dHVyZSwgdGV4dHVyZS53aWR0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICBtYXRyaXguY29weShsaWdodENhbWVyYS53b3JsZFRyYW5zZm9ybSlcclxuICAgICAgICAgICAgLmludmVydCgpXHJcbiAgICAgICAgICAgIC5tdWx0aXBseUxlZnQobGlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XHJcblxyXG4gICAgICAgIHNwb3RMaWdodFNoYWRvd01hcHMucHVzaCh0ZXh0dXJlKTtcclxuICAgICAgICBzcG90TGlnaHRNYXRyaWNlcy5wdXNoKG1hdHJpeC5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbmRlclBvaW50TGlnaHRTaGFkb3c6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGxpZ2h0LCBwb2ludExpZ2h0U2hhZG93TWFwcykge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fZ2V0VGV4dHVyZShsaWdodCk7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIHBvaW50TGlnaHRTaGFkb3dNYXBzLnB1c2godGV4dHVyZSk7XHJcblxyXG4gICAgICAgIHZhciBkZWZhdWx0U2hhZG93TWF0ZXJpYWwgPSB0aGlzLl9nZXREZXB0aE1hdGVyaWFsKGxpZ2h0KTtcclxuICAgICAgICB2YXIgcGFzc0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5zaGFkb3dEZXB0aE1hdGVyaWFsIHx8IGRlZmF1bHRTaGFkb3dNYXRlcmlhbDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0VW5pZm9ybTogZ2V0RGVwdGhNYXRlcmlhbFVuaWZvcm0sXHJcbiAgICAgICAgICAgIHNvcnRDb21wYXJlOiBSZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJMaXN0RWFjaFNpZGUgPSB7XHJcbiAgICAgICAgICAgIHB4OiBbXSwgcHk6IFtdLCBwejogW10sIG54OiBbXSwgbnk6IFtdLCBuejogW11cclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciBiYm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdmFyIGxpZ2h0V29ybGRQb3NpdGlvbiA9IGxpZ2h0LmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcclxuICAgICAgICB2YXIgbGlnaHRCQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdmFyIHJhbmdlID0gbGlnaHQucmFuZ2U7XHJcbiAgICAgICAgbGlnaHRCQm94Lm1pbi5zZXRBcnJheShsaWdodFdvcmxkUG9zaXRpb24pO1xyXG4gICAgICAgIGxpZ2h0QkJveC5tYXguc2V0QXJyYXkobGlnaHRXb3JsZFBvc2l0aW9uKTtcclxuICAgICAgICB2YXIgZXh0ZW50ID0gbmV3IFZlY3RvcjMocmFuZ2UsIHJhbmdlLCByYW5nZSk7XHJcbiAgICAgICAgbGlnaHRCQm94Lm1heC5hZGQoZXh0ZW50KTtcclxuICAgICAgICBsaWdodEJCb3gubWluLnN1YihleHRlbnQpO1xyXG5cclxuICAgICAgICB2YXIgdGFyZ2V0c05lZWRSZW5kZXIgPSB7IHB4OiBmYWxzZSwgcHk6IGZhbHNlLCBwejogZmFsc2UsIG54OiBmYWxzZSwgbnk6IGZhbHNlLCBuejogZmFsc2UgfTtcclxuICAgICAgICBzY2VuZS50cmF2ZXJzZShmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5pc1JlbmRlcmFibGUoKSAmJiByZW5kZXJhYmxlLmNhc3RTaGFkb3cpIHtcclxuICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IHJlbmRlcmFibGUuZ2VvbWV0cnk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWdlb21ldHJ5LmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YXJnZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxpc3RFYWNoU2lkZVt0YXJnZXRzW2ldXS5wdXNoKHJlbmRlcmFibGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBiYm94LnRyYW5zZm9ybUZyb20oZ2VvbWV0cnkuYm91bmRpbmdCb3gsIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFiYm94LmludGVyc2VjdEJvdW5kaW5nQm94KGxpZ2h0QkJveCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgYmJveC51cGRhdGVWZXJ0aWNlcygpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YXJnZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c05lZWRSZW5kZXJbdGFyZ2V0c1tpXV0gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZ0eCA9IGJib3gudmVydGljZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHggPSB2dHhbMF0gLSBsaWdodFdvcmxkUG9zaXRpb25bMF07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHkgPSB2dHhbMV0gLSBsaWdodFdvcmxkUG9zaXRpb25bMV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHogPSB2dHhbMl0gLSBsaWdodFdvcmxkUG9zaXRpb25bMl07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFic3ggPSBNYXRoLmFicyh4KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYWJzeSA9IE1hdGguYWJzKHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhYnN6ID0gTWF0aC5hYnMoeik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFic3ggPiBhYnN5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYnN4ID4gYWJzeikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c05lZWRSZW5kZXJbeCA+IDAgPyAncHgnIDogJ254J10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c05lZWRSZW5kZXJbeiA+IDAgPyAncHonIDogJ256J10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWJzeSA+IGFic3opIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHNOZWVkUmVuZGVyW3kgPiAwID8gJ3B5JyA6ICdueSddID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHNOZWVkUmVuZGVyW3ogPiAwID8gJ3B6JyA6ICdueiddID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFyZ2V0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRzTmVlZFJlbmRlclt0YXJnZXRzW2ldXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMaXN0RWFjaFNpZGVbdGFyZ2V0c1tpXV0ucHVzaChyZW5kZXJhYmxlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRhcmdldHNbaV07XHJcbiAgICAgICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLl9nZXRQb2ludExpZ2h0Q2FtZXJhKGxpZ2h0LCB0YXJnZXQpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUsIF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCwgX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGkpO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgX2dsLmNsZWFyKF9nbC5DT0xPUl9CVUZGRVJfQklUIHwgX2dsLkRFUFRIX0JVRkZFUl9CSVQpO1xyXG5cclxuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhyZW5kZXJMaXN0RWFjaFNpZGVbdGFyZ2V0XSwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXREZXB0aE1hdGVyaWFsOiBmdW5jdGlvbiAobGlnaHQpIHtcclxuICAgICAgICB2YXIgc2hhZG93TWF0ZXJpYWwgPSB0aGlzLl9saWdodE1hdGVyaWFsc1tsaWdodC5fX3VpZF9fXTtcclxuICAgICAgICB2YXIgaXNQb2ludExpZ2h0ID0gbGlnaHQudHlwZSA9PT0gJ1BPSU5UX0xJR0hUJztcclxuICAgICAgICBpZiAoIXNoYWRvd01hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIHZhciBzaGFkZXJQcmVmaXggPSBpc1BvaW50TGlnaHQgPyAnY2xheS5zbS5kaXN0YW5jZS4nIDogJ2NsYXkuc20uZGVwdGguJztcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiB0aGlzLnByZWNpc2lvbixcclxuICAgICAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKHNoYWRlclByZWZpeCArICd2ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZShzaGFkZXJQcmVmaXggKyAnZnJhZ21lbnQnKSlcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9saWdodE1hdGVyaWFsc1tsaWdodC5fX3VpZF9fXSA9IHNoYWRvd01hdGVyaWFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGlnaHQuc2hhZG93U2xvcGVTY2FsZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHNoYWRvd01hdGVyaWFsLnNldFVuaWZvcm0oJ3Nsb3BlU2NhbGUnLCBsaWdodC5zaGFkb3dTbG9wZVNjYWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxpZ2h0LnNoYWRvd0JpYXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbC5zZXRVbmlmb3JtKCdiaWFzJywgbGlnaHQuc2hhZG93Qmlhcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XHJcbiAgICAgICAgICAgIHNoYWRvd01hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9WU00nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc1BvaW50TGlnaHQpIHtcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwuc2V0KCdsaWdodFBvc2l0aW9uJywgbGlnaHQuZ2V0V29ybGRQb3NpdGlvbigpLmFycmF5KTtcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwuc2V0KCdyYW5nZScsIGxpZ2h0LnJhbmdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzaGFkb3dNYXRlcmlhbDtcclxuICAgIH0sXHJcblxyXG4gICAgX2dhdXNzaWFuRmlsdGVyOiBmdW5jdGlvbiAocmVuZGVyZXIsIHRleHR1cmUsIHNpemUpIHtcclxuICAgICAgICB2YXIgcGFyYW1ldGVyID0ge1xyXG4gICAgICAgICAgICB3aWR0aDogc2l6ZSxcclxuICAgICAgICAgICAgaGVpZ2h0OiBzaXplLFxyXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkZMT0FUXHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgdG1wVGV4dHVyZSA9IHRoaXMuX3RleHR1cmVQb29sLmdldChwYXJhbWV0ZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5hdHRhY2godG1wVGV4dHVyZSk7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZ2F1c3NpYW5QYXNzSC5zZXRVbmlmb3JtKCd0ZXh0dXJlJywgdGV4dHVyZSk7XHJcbiAgICAgICAgdGhpcy5fZ2F1c3NpYW5QYXNzSC5zZXRVbmlmb3JtKCd0ZXh0dXJlV2lkdGgnLCBzaXplKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NILnJlbmRlcihyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmF0dGFjaCh0ZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NWLnNldFVuaWZvcm0oJ3RleHR1cmUnLCB0bXBUZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NWLnNldFVuaWZvcm0oJ3RleHR1cmVIZWlnaHQnLCBzaXplKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NWLnJlbmRlcihyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVBvb2wucHV0KHRtcFRleHR1cmUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZ2V0VGV4dHVyZTogZnVuY3Rpb24gKGxpZ2h0LCBjYXNjYWRlKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IGxpZ2h0Ll9fdWlkX187XHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1trZXldO1xyXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gbGlnaHQuc2hhZG93UmVzb2x1dGlvbiB8fCA1MTI7XHJcbiAgICAgICAgY2FzY2FkZSA9IGNhc2NhZGUgfHwgMTtcclxuICAgICAgICBpZiAoIXRleHR1cmUpIHtcclxuICAgICAgICAgICAgaWYgKGxpZ2h0LnR5cGUgPT09ICdQT0lOVF9MSUdIVCcpIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZUN1YmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQXQgbW9zdCA0IGNhc2NhZGVcclxuICAgICAgICAgICAgLy8gVE9ETyBzaGFyZSB3aXRoIGhlaWdodCA/XHJcbiAgICAgICAgICAgIHRleHR1cmUud2lkdGggPSByZXNvbHV0aW9uICogY2FzY2FkZTtcclxuICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSByZXNvbHV0aW9uO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS50eXBlID0gVGV4dHVyZS5GTE9BVDtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUuYW5pc290cm9waWMgPSA0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5taW5GaWx0ZXIgPSBnbGVudW0uTkVBUkVTVDtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUubWFnRmlsdGVyID0gZ2xlbnVtLk5FQVJFU1Q7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnVzZU1pcG1hcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzW2tleV0gPSB0ZXh0dXJlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXRQb2ludExpZ2h0Q2FtZXJhOiBmdW5jdGlvbiAobGlnaHQsIHRhcmdldCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fbGlnaHRDYW1lcmFzLnBvaW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpZ2h0Q2FtZXJhcy5wb2ludCA9IHtcclxuICAgICAgICAgICAgICAgIHB4OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcclxuICAgICAgICAgICAgICAgIG54OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcclxuICAgICAgICAgICAgICAgIHB5OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcclxuICAgICAgICAgICAgICAgIG55OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcclxuICAgICAgICAgICAgICAgIHB6OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcclxuICAgICAgICAgICAgICAgIG56OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fbGlnaHRDYW1lcmFzLnBvaW50W3RhcmdldF07XHJcblxyXG4gICAgICAgIGNhbWVyYS5mYXIgPSBsaWdodC5yYW5nZTtcclxuICAgICAgICBjYW1lcmEuZm92ID0gOTA7XHJcbiAgICAgICAgY2FtZXJhLnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgICAgICBzd2l0Y2ggKHRhcmdldCkge1xyXG4gICAgICAgICAgICBjYXNlICdweCc6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuUE9TSVRJVkVfWCwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdueCc6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuTkVHQVRJVkVfWCwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdweSc6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuUE9TSVRJVkVfWSwgVmVjdG9yMy5QT1NJVElWRV9aKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdueSc6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuTkVHQVRJVkVfWSwgVmVjdG9yMy5ORUdBVElWRV9aKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdweic6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuUE9TSVRJVkVfWiwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdueic6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuTkVHQVRJVkVfWiwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsaWdodC5nZXRXb3JsZFBvc2l0aW9uKGNhbWVyYS5wb3NpdGlvbik7XHJcbiAgICAgICAgY2FtZXJhLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FtZXJhO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZ2V0RGlyZWN0aW9uYWxMaWdodENhbWVyYTogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbGlnaHRWaWV3TWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICB2YXIgc2NlbmVWaWV3Qm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB2YXIgbGlnaHRWaWV3QkJveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIC8vIENhbWVyYSBvZiBkaXJlY3Rpb25hbCBsaWdodCB3aWxsIGJlIGFkanVzdGVkXHJcbiAgICAgICAgLy8gdG8gY29udGFpbiB0aGUgdmlldyBmcnVzdHVtIGFuZCBzY2VuZSBib3VuZGluZyBib3ggYXMgdGlnaHRseSBhcyBwb3NzaWJsZVxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobGlnaHQsIHNjZW5lLCBzY2VuZUNhbWVyYSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2xpZ2h0Q2FtZXJhcy5kaXJlY3Rpb25hbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRDYW1lcmFzLmRpcmVjdGlvbmFsID0gbmV3IE9ydGhvQ2FtZXJhKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuX2xpZ2h0Q2FtZXJhcy5kaXJlY3Rpb25hbDtcclxuXHJcbiAgICAgICAgICAgIHNjZW5lVmlld0JvdW5kaW5nQm94LmNvcHkoc2NlbmUudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lKTtcclxuICAgICAgICAgICAgc2NlbmVWaWV3Qm91bmRpbmdCb3guaW50ZXJzZWN0aW9uKHNjZW5lQ2FtZXJhLmZydXN0dW0uYm91bmRpbmdCb3gpO1xyXG4gICAgICAgICAgICAvLyBNb3ZlIHRvIHRoZSBjZW50ZXIgb2YgZnJ1c3R1bShpbiB3b3JsZCBzcGFjZSlcclxuICAgICAgICAgICAgY2FtZXJhLnBvc2l0aW9uXHJcbiAgICAgICAgICAgICAgICAuY29weShzY2VuZVZpZXdCb3VuZGluZ0JveC5taW4pXHJcbiAgICAgICAgICAgICAgICAuYWRkKHNjZW5lVmlld0JvdW5kaW5nQm94Lm1heClcclxuICAgICAgICAgICAgICAgIC5zY2FsZSgwLjUpXHJcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtTWF0NChzY2VuZUNhbWVyYS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIGNhbWVyYS5yb3RhdGlvbi5jb3B5KGxpZ2h0LnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgY2FtZXJhLnNjYWxlLmNvcHkobGlnaHQuc2NhbGUpO1xyXG4gICAgICAgICAgICBjYW1lcmEudXBkYXRlV29ybGRUcmFuc2Zvcm0oKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0byBsaWdodCB2aWV3IHNwYWNlXHJcbiAgICAgICAgICAgIE1hdHJpeDQuaW52ZXJ0KGxpZ2h0Vmlld01hdHJpeCwgY2FtZXJhLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgTWF0cml4NC5tdWx0aXBseShsaWdodFZpZXdNYXRyaXgsIGxpZ2h0Vmlld01hdHJpeCwgc2NlbmVDYW1lcmEud29ybGRUcmFuc2Zvcm0pO1xyXG5cclxuICAgICAgICAgICAgbGlnaHRWaWV3QkJveC5jb3B5KHNjZW5lVmlld0JvdW5kaW5nQm94KS5hcHBseVRyYW5zZm9ybShsaWdodFZpZXdNYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgdmFyIG1pbiA9IGxpZ2h0Vmlld0JCb3gubWluLmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gbGlnaHRWaWV3QkJveC5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgICAgICAvLyBNb3ZlIGNhbWVyYSB0byBhZGp1c3QgdGhlIG5lYXIgdG8gMFxyXG4gICAgICAgICAgICBjYW1lcmEucG9zaXRpb24uc2V0KChtaW5bMF0gKyBtYXhbMF0pIC8gMiwgKG1pblsxXSArIG1heFsxXSkgLyAyLCBtYXhbMl0pXHJcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtTWF0NChjYW1lcmEud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICBjYW1lcmEubmVhciA9IDA7XHJcbiAgICAgICAgICAgIGNhbWVyYS5mYXIgPSAtbWluWzJdICsgbWF4WzJdO1xyXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgcmVjZWl2ZXJzIG5vdCBpbiB0aGUgZnJ1c3R1bSB3aWxsIHN0aWwgcmVjZWl2ZSB0aGUgc2hhZG93LlxyXG4gICAgICAgICAgICBpZiAoaXNOYU4odGhpcy5saWdodEZydXN0dW1CaWFzKSkge1xyXG4gICAgICAgICAgICAgICAgY2FtZXJhLmZhciAqPSA0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY2FtZXJhLmZhciArPSB0aGlzLmxpZ2h0RnJ1c3R1bUJpYXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FtZXJhLmxlZnQgPSBtaW5bMF07XHJcbiAgICAgICAgICAgIGNhbWVyYS5yaWdodCA9IG1heFswXTtcclxuICAgICAgICAgICAgY2FtZXJhLnRvcCA9IG1heFsxXTtcclxuICAgICAgICAgICAgY2FtZXJhLmJvdHRvbSA9IG1pblsxXTtcclxuICAgICAgICAgICAgY2FtZXJhLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBjYW1lcmE7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgX2dldFNwb3RMaWdodENhbWVyYTogZnVuY3Rpb24gKGxpZ2h0KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9saWdodENhbWVyYXMuc3BvdCkge1xyXG4gICAgICAgICAgICB0aGlzLl9saWdodENhbWVyYXMuc3BvdCA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fbGlnaHRDYW1lcmFzLnNwb3Q7XHJcbiAgICAgICAgLy8gVXBkYXRlIHByb3BlcnRpZXNcclxuICAgICAgICBjYW1lcmEuZm92ID0gbGlnaHQucGVudW1icmFBbmdsZSAqIDI7XHJcbiAgICAgICAgY2FtZXJhLmZhciA9IGxpZ2h0LnJhbmdlO1xyXG4gICAgICAgIGNhbWVyYS53b3JsZFRyYW5zZm9ybS5jb3B5KGxpZ2h0LndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICBjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgICAgIG1hdDQuaW52ZXJ0KGNhbWVyYS52aWV3TWF0cml4LmFycmF5LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FtZXJhO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ8V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBbcmVuZGVyZXJdXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgLy8gUEVORElORyBSZW5kZXJlciBvciBXZWJHTFJlbmRlcmluZ0NvbnRleHRcclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbCB8fCByZW5kZXJlcjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmRpc3Bvc2UoX2dsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fdGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXNbbmFtZV0uZGlzcG9zZShfZ2wpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVBvb2wuY2xlYXIocmVuZGVyZXIuZ2wpO1xyXG5cclxuICAgICAgICB0aGlzLl9kZXB0aE1hdGVyaWFscyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2Rpc3RhbmNlTWF0ZXJpYWxzID0ge307XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSB7fTtcclxuICAgICAgICB0aGlzLl9saWdodENhbWVyYXMgPSB7fTtcclxuICAgICAgICB0aGlzLl9zaGFkb3dNYXBOdW1iZXIgPSB7XHJcbiAgICAgICAgICAgICdQT0lOVF9MSUdIVCc6IDAsXHJcbiAgICAgICAgICAgICdESVJFQ1RJT05BTF9MSUdIVCc6IDAsXHJcbiAgICAgICAgICAgICdTUE9UX0xJR0hUJzogMFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fbWVzaE1hdGVyaWFscyA9IHt9O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3JlY2VpdmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbWVzaCA9IHRoaXMuX3JlY2VpdmVyc1tpXTtcclxuICAgICAgICAgICAgLy8gTWVzaCBtYXkgYmUgZGlzcG9zZWRcclxuICAgICAgICAgICAgaWYgKG1lc2gubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IG1lc2gubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnUE9JTlRfTElHSFRfU0hBRE9XX0NPVU5UJyk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XX0NPVU5UJyk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnQU1CSUVOVF9MSUdIVF9TSEFET1dfQ09VTlQnKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnc2hhZG93RW5hYmxlZCcsIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9yZWNlaXZlcnMgPSBbXTtcclxuICAgICAgICB0aGlzLl9saWdodHNDYXN0U2hhZG93ID0gW107XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAuVlNNXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5TaGFkb3dNYXBQYXNzLlZTTSA9IDE7XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5QQ0ZcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblNoYWRvd01hcFBhc3MuUENGID0gMjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNoYWRvd01hcFBhc3M7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBSYXkgZnJvbSAnLi4vbWF0aC9SYXknO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tICcuLi9tYXRoL1ZlY3RvcjInO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgUmVuZGVyYWJsZSBmcm9tICcuLi9SZW5kZXJhYmxlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBpY2tpbmcuUmF5UGlja2luZ1xyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIFJheVBpY2tpbmcgPSBCYXNlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkucGlja2luZy5SYXlQaWNraW5nIyAqL3tcclxuICAgIC8qKlxyXG4gICAgICogVGFyZ2V0IHNjZW5lXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5TY2VuZX1cclxuICAgICAqL1xyXG4gICAgc2NlbmU6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFRhcmdldCBjYW1lcmFcclxuICAgICAqIEB0eXBlIHtjbGF5LkNhbWVyYX1cclxuICAgICAqL1xyXG4gICAgY2FtZXJhOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUYXJnZXQgcmVuZGVyZXJcclxuICAgICAqIEB0eXBlIHtjbGF5LlJlbmRlcmVyfVxyXG4gICAgICovXHJcbiAgICByZW5kZXJlcjogbnVsbFxyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9yYXkgPSBuZXcgUmF5KCk7XHJcbiAgICB0aGlzLl9uZGMgPSBuZXcgVmVjdG9yMigpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkucGlja2luZy5SYXlQaWNraW5nLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaWNrIHRoZSBuZWFyZXN0IGludGVyc2VjdGlvbiBvYmplY3QgaW4gdGhlIHNjZW5lXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHggTW91c2UgcG9zaXRpb24geFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB5IE1vdXNlIHBvc2l0aW9uIHlcclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtmb3JjZVBpY2tBbGw9ZmFsc2VdIGlnbm9yZSBpZ25vcmVQaWNraW5nXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LnBpY2tpbmcuUmF5UGlja2luZ35JbnRlcnNlY3Rpb259XHJcbiAgICAgKi9cclxuICAgIHBpY2s6IGZ1bmN0aW9uICh4LCB5LCBmb3JjZVBpY2tBbGwpIHtcclxuICAgICAgICB2YXIgb3V0ID0gdGhpcy5waWNrQWxsKHgsIHksIFtdLCBmb3JjZVBpY2tBbGwpO1xyXG4gICAgICAgIHJldHVybiBvdXRbMF0gfHwgbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaWNrIGFsbCBpbnRlcnNlY3Rpb24gb2JqZWN0cywgd2ljaCB3aWxsIGJlIHNvcnRlZCBmcm9tIG5lYXIgdG8gZmFyXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHggTW91c2UgcG9zaXRpb24geFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB5IE1vdXNlIHBvc2l0aW9uIHlcclxuICAgICAqIEBwYXJhbSAge0FycmF5fSBbb3V0cHV0XVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW2ZvcmNlUGlja0FsbD1mYWxzZV0gaWdub3JlIGlnbm9yZVBpY2tpbmdcclxuICAgICAqIEByZXR1cm4ge0FycmF5LjxjbGF5LnBpY2tpbmcuUmF5UGlja2luZ35JbnRlcnNlY3Rpb24+fVxyXG4gICAgICovXHJcbiAgICBwaWNrQWxsOiBmdW5jdGlvbiAoeCwgeSwgb3V0cHV0LCBmb3JjZVBpY2tBbGwpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcmVlblRvTkRDKHgsIHksIHRoaXMuX25kYyk7XHJcbiAgICAgICAgdGhpcy5jYW1lcmEuY2FzdFJheSh0aGlzLl9uZGMsIHRoaXMuX3JheSk7XHJcblxyXG4gICAgICAgIG91dHB1dCA9IG91dHB1dCB8fCBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5faW50ZXJzZWN0Tm9kZSh0aGlzLnNjZW5lLCBvdXRwdXQsIGZvcmNlUGlja0FsbCB8fCBmYWxzZSk7XHJcblxyXG4gICAgICAgIG91dHB1dC5zb3J0KHRoaXMuX2ludGVyc2VjdGlvbkNvbXBhcmVGdW5jKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH0sXHJcblxyXG4gICAgX2ludGVyc2VjdE5vZGU6IGZ1bmN0aW9uIChub2RlLCBvdXQsIGZvcmNlUGlja0FsbCkge1xyXG4gICAgICAgIGlmICgobm9kZSBpbnN0YW5jZW9mIFJlbmRlcmFibGUpICYmIG5vZGUuaXNSZW5kZXJhYmxlKCkpIHtcclxuICAgICAgICAgICAgaWYgKCghbm9kZS5pZ25vcmVQaWNraW5nIHx8IGZvcmNlUGlja0FsbClcclxuICAgICAgICAgICAgICAgICYmIChcclxuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHRyaWFuZ2xlIG1lc2ggc3VwcG9ydCByYXkgcGlja2luZ1xyXG4gICAgICAgICAgICAgICAgICAgIChub2RlLm1vZGUgPT09IGdsZW51bS5UUklBTkdMRVMgJiYgbm9kZS5nZW9tZXRyeS5pc1VzZUluZGljZXMoKSlcclxuICAgICAgICAgICAgICAgICAgICAvLyBPciBpZiBnZW9tZXRyeSBoYXMgaXQncyBvd24gcGlja0J5UmF5LCBwaWNrLCBpbXBsZW1lbnRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIHx8IG5vZGUuZ2VvbWV0cnkucGlja0J5UmF5XHJcbiAgICAgICAgICAgICAgICAgICAgfHwgbm9kZS5nZW9tZXRyeS5waWNrXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faW50ZXJzZWN0UmVuZGVyYWJsZShub2RlLCBvdXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5faW50ZXJzZWN0Tm9kZShub2RlLl9jaGlsZHJlbltpXSwgb3V0LCBmb3JjZVBpY2tBbGwpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2ludGVyc2VjdFJlbmRlcmFibGU6IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgdmFyIHYyID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB2YXIgdjMgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIHZhciByYXkgPSBuZXcgUmF5KCk7XHJcbiAgICAgICAgdmFyIHdvcmxkSW52ZXJzZSA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgb3V0KSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgaXNTa2lubmVkTWVzaCA9IHJlbmRlcmFibGUuaXNTa2lubmVkTWVzaCgpO1xyXG4gICAgICAgICAgICByYXkuY29weSh0aGlzLl9yYXkpO1xyXG4gICAgICAgICAgICBNYXRyaXg0LmludmVydCh3b3JsZEludmVyc2UsIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0pO1xyXG5cclxuICAgICAgICAgICAgLy8gU2tpbm5lZCBtZXNoIHdpbGwgaWdub3JlIHRoZSB3b3JsZCB0cmFuc2Zvcm0uXHJcbiAgICAgICAgICAgIGlmICghaXNTa2lubmVkTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgcmF5LmFwcGx5VHJhbnNmb3JtKHdvcmxkSW52ZXJzZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IHJlbmRlcmFibGUuZ2VvbWV0cnk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYmJveCA9IGlzU2tpbm5lZE1lc2ggPyByZW5kZXJhYmxlLnNrZWxldG9uLmJvdW5kaW5nQm94IDogZ2VvbWV0cnkuYm91bmRpbmdCb3g7XHJcblxyXG4gICAgICAgICAgICBpZiAoYmJveCAmJiAhcmF5LmludGVyc2VjdEJvdW5kaW5nQm94KGJib3gpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gVXNlIHVzZXIgZGVmaW5lZCBwaWNraW5nIGFsZ29yaXRobVxyXG4gICAgICAgICAgICBpZiAoZ2VvbWV0cnkucGljaykge1xyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkucGljayhcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9uZGMueCwgdGhpcy5fbmRjLnksXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlcixcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYSxcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLCBvdXRcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gVXNlIHVzZXIgZGVmaW5lZCByYXkgcGlja2luZyBhbGdvcml0aG1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZ2VvbWV0cnkucGlja0J5UmF5KSB7XHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5waWNrQnlSYXkocmF5LCByZW5kZXJhYmxlLCBvdXQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgY3VsbEJhY2sgPSAocmVuZGVyYWJsZS5jdWxsRmFjZSA9PT0gZ2xlbnVtLkJBQ0sgJiYgcmVuZGVyYWJsZS5mcm9udEZhY2UgPT09IGdsZW51bS5DQ1cpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IChyZW5kZXJhYmxlLmN1bGxGYWNlID09PSBnbGVudW0uRlJPTlQgJiYgcmVuZGVyYWJsZS5mcm9udEZhY2UgPT09IGdsZW51bS5DVyk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcG9pbnQ7XHJcbiAgICAgICAgICAgIHZhciBpbmRpY2VzID0gZ2VvbWV0cnkuaW5kaWNlcztcclxuICAgICAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247XHJcbiAgICAgICAgICAgIHZhciB3ZWlnaHRBdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy53ZWlnaHQ7XHJcbiAgICAgICAgICAgIHZhciBqb2ludEF0dHIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLmpvaW50O1xyXG4gICAgICAgICAgICB2YXIgc2tpbk1hdHJpY2VzQXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBza2luTWF0cmljZXMgPSBbXTtcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdmFsaWQuXHJcbiAgICAgICAgICAgIGlmICghcG9zaXRpb25BdHRyIHx8ICFwb3NpdGlvbkF0dHIudmFsdWUgfHwgIWluZGljZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNTa2lubmVkTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgc2tpbk1hdHJpY2VzQXJyYXkgPSByZW5kZXJhYmxlLnNrZWxldG9uLmdldFN1YlNraW5NYXRyaWNlcyhyZW5kZXJhYmxlLl9fdWlkX18sIHJlbmRlcmFibGUuam9pbnRzKTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVuZGVyYWJsZS5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBza2luTWF0cmljZXNbaV0gPSBza2luTWF0cmljZXNbaV0gfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCAxNjsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraW5NYXRyaWNlc1tpXVtrXSA9IHNraW5NYXRyaWNlc0FycmF5W2kgKiAxNiArIGtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBwb3MgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciB3ZWlnaHQgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNraW5uZWRQb3MgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciB0bXAgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciBza2lubmVkUG9zaXRpb25BdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5za2lubmVkUG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNraW5uZWRQb3NpdGlvbkF0dHIgfHwgIXNraW5uZWRQb3NpdGlvbkF0dHIudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5jcmVhdGVBdHRyaWJ1dGUoJ3NraW5uZWRQb3NpdGlvbicsICdmJywgMyk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2tpbm5lZFBvc2l0aW9uQXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbm5lZFBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHNraW5uZWRQb3NpdGlvbkF0dHIuaW5pdChnZW9tZXRyeS52ZXJ0ZXhDb3VudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb21ldHJ5LnZlcnRleENvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbkF0dHIuZ2V0KGksIHBvcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2VpZ2h0QXR0ci5nZXQoaSwgd2VpZ2h0KTtcclxuICAgICAgICAgICAgICAgICAgICBqb2ludEF0dHIuZ2V0KGksIGpvaW50KTtcclxuICAgICAgICAgICAgICAgICAgICB3ZWlnaHRbM10gPSAxIC0gd2VpZ2h0WzBdIC0gd2VpZ2h0WzFdIC0gd2VpZ2h0WzJdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuc2V0KHNraW5uZWRQb3MsIDAsIDAsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgNDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqb2ludFtrXSA+PSAwICYmIHdlaWdodFtrXSA+IDFlLTQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMudHJhbnNmb3JtTWF0NCh0bXAsIHBvcywgc2tpbk1hdHJpY2VzW2pvaW50W2tdXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHNraW5uZWRQb3MsIHNraW5uZWRQb3MsIHRtcCwgd2VpZ2h0W2tdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBza2lubmVkUG9zaXRpb25BdHRyLnNldChpLCBza2lubmVkUG9zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSArPSAzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaTEgPSBpbmRpY2VzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGkyID0gaW5kaWNlc1tpICsgMV07XHJcbiAgICAgICAgICAgICAgICB2YXIgaTMgPSBpbmRpY2VzW2kgKyAyXTtcclxuICAgICAgICAgICAgICAgIHZhciBmaW5hbFBvc0F0dHIgPSBpc1NraW5uZWRNZXNoXHJcbiAgICAgICAgICAgICAgICAgICAgPyBnZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5uZWRQb3NpdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIDogcG9zaXRpb25BdHRyO1xyXG4gICAgICAgICAgICAgICAgZmluYWxQb3NBdHRyLmdldChpMSwgdjEuYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgZmluYWxQb3NBdHRyLmdldChpMiwgdjIuYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgZmluYWxQb3NBdHRyLmdldChpMywgdjMuYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjdWxsQmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50ID0gcmF5LmludGVyc2VjdFRyaWFuZ2xlKHYxLCB2MiwgdjMsIHJlbmRlcmFibGUuY3VsbGluZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwb2ludCA9IHJheS5pbnRlcnNlY3RUcmlhbmdsZSh2MSwgdjMsIHYyLCByZW5kZXJhYmxlLmN1bGxpbmcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBvaW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50VyA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NraW5uZWRNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjMudHJhbnNmb3JtTWF0NChwb2ludFcsIHBvaW50LCByZW5kZXJhYmxlLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gcG9pbnQgbWF5YmUgbm90IHJpZ2h0LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3IzLmNvcHkocG9pbnRXLCBwb2ludCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG91dC5wdXNoKG5ldyBSYXlQaWNraW5nLkludGVyc2VjdGlvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQsIHBvaW50VywgcmVuZGVyYWJsZSwgW2kxLCBpMiwgaTNdLCBpIC8gMyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yMy5kaXN0KHBvaW50VywgdGhpcy5fcmF5Lm9yaWdpbilcclxuICAgICAgICAgICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIF9pbnRlcnNlY3Rpb25Db21wYXJlRnVuYzogZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICByZXR1cm4gYS5kaXN0YW5jZSAtIGIuZGlzdGFuY2U7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBpY2tpbmcuUmF5UGlja2luZ35JbnRlcnNlY3Rpb25cclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHBvaW50XHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBwb2ludFdvcmxkXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSB0YXJnZXRcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdHJpYW5nbGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHRyaWFuZ2xlSW5kZXhcclxuICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlXHJcbiAqL1xyXG5SYXlQaWNraW5nLkludGVyc2VjdGlvbiA9IGZ1bmN0aW9uIChwb2ludCwgcG9pbnRXb3JsZCwgdGFyZ2V0LCB0cmlhbmdsZSwgdHJpYW5nbGVJbmRleCwgZGlzdGFuY2UpIHtcclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJzZWN0aW9uIHBvaW50IGluIGxvY2FsIHRyYW5zZm9ybSBjb29yZGluYXRlc1xyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb2ludCA9IHBvaW50O1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcnNlY3Rpb24gcG9pbnQgaW4gd29ybGQgdHJhbnNmb3JtIGNvb3JkaW5hdGVzXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnBvaW50V29ybGQgPSBwb2ludFdvcmxkO1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcnNlY3Rpb24gc2NlbmUgbm9kZVxyXG4gICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAvKipcclxuICAgICAqIEludGVyc2VjdGlvbiB0cmlhbmdsZSwgd2hpY2ggaXMgYW4gYXJyYXkgb2YgdmVydGV4IGluZGV4XHJcbiAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgKi9cclxuICAgIHRoaXMudHJpYW5nbGUgPSB0cmlhbmdsZTtcclxuICAgIC8qKlxyXG4gICAgICogSW5kZXggb2YgaW50ZXJzZWN0aW9uIHRyaWFuZ2xlLlxyXG4gICAgICovXHJcbiAgICB0aGlzLnRyaWFuZ2xlSW5kZXggPSB0cmlhbmdsZUluZGV4O1xyXG4gICAgLyoqXHJcbiAgICAgKiBEaXN0YW5jZSBmcm9tIGludGVyc2VjdGlvbiBwb2ludCB0byByYXkgb3JpZ2luXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmRpc3RhbmNlID0gZGlzdGFuY2U7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBSYXlQaWNraW5nO1xyXG4iLCIvLyBTcGhlcmljYWwgSGFybW9uaWMgSGVscGVyc1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgUGFzcyBmcm9tICcuLi9jb21wb3NpdG9yL1Bhc3MnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IFNreWJveCBmcm9tICcuLi9wbHVnaW4vU2t5Ym94JztcclxuaW1wb3J0IFNreWRvbWUgZnJvbSAnLi4vcGx1Z2luL1NreWRvbWUnO1xyXG5pbXBvcnQgRW52aXJvbm1lbnRNYXBQYXNzIGZyb20gJy4uL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAnO1xyXG5pbXBvcnQgU2NlbmUgZnJvbSAnLi4vU2NlbmUnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxudmFyIHNoID0ge307XHJcblxyXG5pbXBvcnQgcHJvamVjdEVudk1hcFNoYWRlckNvZGUgZnJvbSAnLi9zaGFkZXIvcHJvamVjdEVudk1hcC5nbHNsLmpzJztcclxuXHJcbnZhciB0YXJnZXRzID0gWydweCcsICdueCcsICdweScsICdueScsICdweicsICdueiddO1xyXG5cclxuLy8gUHJvamVjdCBvbiBncHUsIGJ1dCBuZWVkcyBicm93c2VyIHRvIHN1cHBvcnQgcmVhZFBpeGVscyBhcyBGbG9hdDMyQXJyYXkuXHJcbmZ1bmN0aW9uIHByb2plY3RFbnZpcm9ubWVudE1hcEdQVShyZW5kZXJlciwgZW52TWFwKSB7XHJcbiAgICB2YXIgc2hUZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgd2lkdGg6IDksXHJcbiAgICAgICAgaGVpZ2h0OiAxLFxyXG4gICAgICAgIHR5cGU6IFRleHR1cmUuRkxPQVRcclxuICAgIH0pO1xyXG4gICAgdmFyIHBhc3MgPSBuZXcgUGFzcyh7XHJcbiAgICAgICAgZnJhZ21lbnQ6IHByb2plY3RFbnZNYXBTaGFkZXJDb2RlXHJcbiAgICB9KTtcclxuICAgIHBhc3MubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdURVhUVVJFX1NJWkUnLCBlbnZNYXAud2lkdGgpO1xyXG4gICAgcGFzcy5zZXRVbmlmb3JtKCdlbnZpcm9ubWVudE1hcCcsIGVudk1hcCk7XHJcblxyXG4gICAgdmFyIGZyYW1lYnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKCk7XHJcbiAgICBmcmFtZWJ1ZmZlci5hdHRhY2goc2hUZXh0dXJlKTtcclxuICAgIHBhc3MucmVuZGVyKHJlbmRlcmVyLCBmcmFtZWJ1ZmZlcik7XHJcblxyXG4gICAgZnJhbWVidWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAvLyBUT0RPIE9ubHkgY2hyb21lIGFuZCBmaXJlZm94IHN1cHBvcnQgRmxvYXQzMkFycmF5XHJcbiAgICB2YXIgcGl4ZWxzID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDQpO1xyXG4gICAgcmVuZGVyZXIuZ2wucmVhZFBpeGVscygwLCAwLCA5LCAxLCBUZXh0dXJlLlJHQkEsIFRleHR1cmUuRkxPQVQsIHBpeGVscyk7XHJcblxyXG4gICAgdmFyIGNvZWZmID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDMpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA5OyBpKyspIHtcclxuICAgICAgICBjb2VmZltpICogM10gPSBwaXhlbHNbaSAqIDRdO1xyXG4gICAgICAgIGNvZWZmW2kgKiAzICsgMV0gPSBwaXhlbHNbaSAqIDQgKyAxXTtcclxuICAgICAgICBjb2VmZltpICogMyArIDJdID0gcGl4ZWxzW2kgKiA0ICsgMl07XHJcbiAgICB9XHJcbiAgICBmcmFtZWJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgIGZyYW1lYnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgcGFzcy5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIHJldHVybiBjb2VmZjtcclxufVxyXG5cclxuZnVuY3Rpb24gaGFybW9uaWNzKG5vcm1hbCwgaW5kZXgpe1xyXG4gICAgdmFyIHggPSBub3JtYWxbMF07XHJcbiAgICB2YXIgeSA9IG5vcm1hbFsxXTtcclxuICAgIHZhciB6ID0gbm9ybWFsWzJdO1xyXG5cclxuICAgIGlmIChpbmRleCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiAxLjA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmRleCA9PT0gMSkge1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaW5kZXggPT09IDIpIHtcclxuICAgICAgICByZXR1cm4geTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGluZGV4ID09PSAzKSB7XHJcbiAgICAgICAgcmV0dXJuIHo7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmRleCA9PT0gNCkge1xyXG4gICAgICAgIHJldHVybiB4ICogejtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGluZGV4ID09PSA1KSB7XHJcbiAgICAgICAgcmV0dXJuIHkgKiB6O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaW5kZXggPT09IDYpIHtcclxuICAgICAgICByZXR1cm4geCAqIHk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmRleCA9PT0gNykge1xyXG4gICAgICAgIHJldHVybiAzLjAgKiB6ICogeiAtIDEuMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB4ICogeCAtIHkgKiB5O1xyXG4gICAgfVxyXG59XHJcblxyXG52YXIgbm9ybWFsVHJhbnNmb3JtID0ge1xyXG4gICAgcHg6IFsyLCAxLCAwLCAtMSwgLTEsIDFdLFxyXG4gICAgbng6IFsyLCAxLCAwLCAxLCAtMSwgLTFdLFxyXG4gICAgcHk6IFswLCAyLCAxLCAxLCAtMSwgLTFdLFxyXG4gICAgbnk6IFswLCAyLCAxLCAxLCAxLCAxXSxcclxuICAgIHB6OiBbMCwgMSwgMiwgLTEsIC0xLCAtMV0sXHJcbiAgICBuejogWzAsIDEsIDIsIDEsIC0xLCAxXVxyXG59O1xyXG5cclxuLy8gUHJvamVjdCBvbiBjcHUuXHJcbmZ1bmN0aW9uIHByb2plY3RFbnZpcm9ubWVudE1hcENQVShyZW5kZXJlciwgY3ViZVBpeGVscywgd2lkdGgsIGhlaWdodCkge1xyXG4gICAgdmFyIGNvZWZmID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDMpO1xyXG4gICAgdmFyIG5vcm1hbCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICB2YXIgdGV4ZWwgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgdmFyIGZldGNoTm9ybWFsID0gdmVjMy5jcmVhdGUoKTtcclxuICAgIGZvciAodmFyIG0gPSAwOyBtIDwgOTsgbSsrKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0YXJnZXRzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIHZhciBwaXhlbHMgPSBjdWJlUGl4ZWxzW3RhcmdldHNba11dO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNpZGVSZXN1bHQgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICB2YXIgZGl2aWRlciA9IDA7XHJcbiAgICAgICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5vcm1hbFRyYW5zZm9ybVt0YXJnZXRzW2tdXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbFswXSA9IHggLyAod2lkdGggLSAxLjApICogMi4wIC0gMS4wO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gRmxpcCB5P1xyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbFsxXSA9IHkgLyAoaGVpZ2h0IC0gMS4wKSAqIDIuMCAtIDEuMDtcclxuICAgICAgICAgICAgICAgICAgICBub3JtYWxbMl0gPSAtMS4wO1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKG5vcm1hbCwgbm9ybWFsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2hOb3JtYWxbMF0gPSBub3JtYWxbdHJhbnNmb3JtWzBdXSAqIHRyYW5zZm9ybVszXTtcclxuICAgICAgICAgICAgICAgICAgICBmZXRjaE5vcm1hbFsxXSA9IG5vcm1hbFt0cmFuc2Zvcm1bMV1dICogdHJhbnNmb3JtWzRdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZldGNoTm9ybWFsWzJdID0gbm9ybWFsW3RyYW5zZm9ybVsyXV0gKiB0cmFuc2Zvcm1bNV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzBdID0gcGl4ZWxzW2krK10gLyAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMV0gPSBwaXhlbHNbaSsrXSAvIDI1NTtcclxuICAgICAgICAgICAgICAgICAgICB0ZXhlbFsyXSA9IHBpeGVsc1tpKytdIC8gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFJHQk0gRGVjb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gcGl4ZWxzW2krK10gLyAyNTUgKiA4LjEyO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzBdICo9IHNjYWxlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzFdICo9IHNjYWxlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzJdICo9IHNjYWxlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHNpZGVSZXN1bHQsIHNpZGVSZXN1bHQsIHRleGVsLCBoYXJtb25pY3MoZmV0Y2hOb3JtYWwsIG0pICogLW5vcm1hbFsyXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gLW5vcm1hbC56IGVxdWFscyBjb3ModGhldGEpIG9mIExhbWJlcnRpYW5cclxuICAgICAgICAgICAgICAgICAgICBkaXZpZGVyICs9IC1ub3JtYWxbMl07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChyZXN1bHQsIHJlc3VsdCwgc2lkZVJlc3VsdCwgMSAvIGRpdmlkZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29lZmZbbSAqIDNdID0gcmVzdWx0WzBdIC8gNi4wO1xyXG4gICAgICAgIGNvZWZmW20gKiAzICsgMV0gPSByZXN1bHRbMV0gLyA2LjA7XHJcbiAgICAgICAgY29lZmZbbSAqIDMgKyAyXSA9IHJlc3VsdFsyXSAvIDYuMDtcclxuICAgIH1cclxuICAgIHJldHVybiBjb2VmZjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZX0gZW52TWFwXHJcbiAqIEBwYXJhbSAge09iamVjdH0gW3RleHR1cmVPcHRzXVxyXG4gKiBAcGFyYW0gIHtPYmplY3R9IFt0ZXh0dXJlT3B0cy5sb2RdXHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFt0ZXh0dXJlT3B0cy5kZWNvZGVSR0JNXVxyXG4gKi9cclxuc2gucHJvamVjdEVudmlyb25tZW50TWFwID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBlbnZNYXAsIG9wdHMpIHtcclxuXHJcbiAgICAvLyBUT0RPIHNSR0JcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuICAgIG9wdHMubG9kID0gb3B0cy5sb2QgfHwgMDtcclxuXHJcbiAgICB2YXIgc2t5Ym94O1xyXG4gICAgdmFyIGR1bW15U2NlbmUgPSBuZXcgU2NlbmUoKTtcclxuICAgIHZhciBzaXplID0gNjQ7XHJcbiAgICBpZiAoZW52TWFwLnRleHR1cmVUeXBlID09PSAndGV4dHVyZTJEJykge1xyXG4gICAgICAgIHNreWJveCA9IG5ldyBTa3lkb21lKHtcclxuICAgICAgICAgICAgc2NlbmU6IGR1bW15U2NlbmUsXHJcbiAgICAgICAgICAgIGVudmlyb25tZW50TWFwOiBlbnZNYXBcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHNpemUgPSAoZW52TWFwLmltYWdlICYmIGVudk1hcC5pbWFnZS5weCkgPyBlbnZNYXAuaW1hZ2UucHgud2lkdGggOiBlbnZNYXAud2lkdGg7XHJcbiAgICAgICAgc2t5Ym94ID0gbmV3IFNreWJveCh7XHJcbiAgICAgICAgICAgIHNjZW5lOiBkdW1teVNjZW5lLFxyXG4gICAgICAgICAgICBlbnZpcm9ubWVudE1hcDogZW52TWFwXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBDb252ZXJ0IHRvIHJnYm1cclxuICAgIHZhciB3aWR0aCA9IE1hdGguY2VpbChzaXplIC8gTWF0aC5wb3coMiwgb3B0cy5sb2QpKTtcclxuICAgIHZhciBoZWlnaHQgPSBNYXRoLmNlaWwoc2l6ZSAvIE1hdGgucG93KDIsIG9wdHMubG9kKSk7XHJcbiAgICB2YXIgcmdibVRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHRcclxuICAgIH0pO1xyXG4gICAgdmFyIGZyYW1lYnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKCk7XHJcbiAgICBza3lib3gubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdSR0JNX0VOQ09ERScpO1xyXG4gICAgaWYgKG9wdHMuZGVjb2RlUkdCTSkge1xyXG4gICAgICAgIHNreWJveC5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fREVDT0RFJyk7XHJcbiAgICB9XHJcbiAgICBza3lib3gubWF0ZXJpYWwuc2V0KCdsb2QnLCBvcHRzLmxvZCk7XHJcbiAgICB2YXIgZW52TWFwUGFzcyA9IG5ldyBFbnZpcm9ubWVudE1hcFBhc3Moe1xyXG4gICAgICAgIHRleHR1cmU6IHJnYm1UZXh0dXJlXHJcbiAgICB9KTtcclxuICAgIHZhciBjdWJlUGl4ZWxzID0ge307XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjdWJlUGl4ZWxzW3RhcmdldHNbaV1dID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTtcclxuICAgICAgICB2YXIgY2FtZXJhID0gZW52TWFwUGFzcy5nZXRDYW1lcmEodGFyZ2V0c1tpXSk7XHJcbiAgICAgICAgY2FtZXJhLmZvdiA9IDkwO1xyXG4gICAgICAgIGZyYW1lYnVmZmVyLmF0dGFjaChyZ2JtVGV4dHVyZSk7XHJcbiAgICAgICAgZnJhbWVidWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyKGR1bW15U2NlbmUsIGNhbWVyYSk7XHJcbiAgICAgICAgcmVuZGVyZXIuZ2wucmVhZFBpeGVscyhcclxuICAgICAgICAgICAgMCwgMCwgd2lkdGgsIGhlaWdodCxcclxuICAgICAgICAgICAgVGV4dHVyZS5SR0JBLCBUZXh0dXJlLlVOU0lHTkVEX0JZVEUsIGN1YmVQaXhlbHNbdGFyZ2V0c1tpXV1cclxuICAgICAgICApO1xyXG4gICAgICAgIGZyYW1lYnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICB9XHJcblxyXG4gICAgc2t5Ym94LmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgZnJhbWVidWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICByZ2JtVGV4dHVyZS5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICByZXR1cm4gcHJvamVjdEVudmlyb25tZW50TWFwQ1BVKHJlbmRlcmVyLCBjdWJlUGl4ZWxzLCB3aWR0aCwgaGVpZ2h0KTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHNoO1xyXG4iLCJcclxuLyoqXHJcbiAqIEhlbHBlcnMgZm9yIGNyZWF0aW5nIGEgY29tbW9uIDNkIGFwcGxpY2F0aW9uLlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkuYXBwbGljYXRpb25cclxuICovXHJcblxyXG4gLy8gVE9ETyBjcmVhdGVDb21wb3NpdG9yXHJcbiAvLyBUT0RPIERpc3Bvc2UgdGVzdC4gZ2VvQ2FjaGUgdGVzdC5cclxuIC8vIFRPRE8gVG9uZW1hcHBpbmcgZXhwb3N1cmVcclxuIC8vIFRPRE8gZml0TW9kZWwuXHJcbiAvLyBUT0RPIFBhcnRpY2xlID9cclxuaW1wb3J0IFJlbmRlcmVyIGZyb20gJy4vUmVuZGVyZXInO1xyXG5pbXBvcnQgU2NlbmUgZnJvbSAnLi9TY2VuZSc7XHJcbmltcG9ydCBUaW1lbGluZSBmcm9tICcuL1RpbWVsaW5lJztcclxuaW1wb3J0IEN1YmVHZW8gZnJvbSAnLi9nZW9tZXRyeS9DdWJlJztcclxuaW1wb3J0IFNwaGVyZUdlbyBmcm9tICcuL2dlb21ldHJ5L1NwaGVyZSc7XHJcbmltcG9ydCBQbGFuZUdlbyBmcm9tICcuL2dlb21ldHJ5L1BsYW5lJztcclxuaW1wb3J0IFBhcmFtZXRyaWNTdXJmYWNlR2VvIGZyb20gJy4vZ2VvbWV0cnkvUGFyYW1ldHJpY1N1cmZhY2UnO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4vVGV4dHVyZTJEJztcclxuaW1wb3J0IFRleHR1cmVDdWJlIGZyb20gJy4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xyXG5pbXBvcnQgTWVzaCBmcm9tICcuL01lc2gnO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tICcuL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcbmltcG9ydCBPcnRob2dyYXBoaWNDYW1lcmEgZnJvbSAnLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgR0xURkxvYWRlciBmcm9tICcuL2xvYWRlci9HTFRGJztcclxuaW1wb3J0IE5vZGUgZnJvbSAnLi9Ob2RlJztcclxuaW1wb3J0IERpcmVjdGlvbmFsTGlnaHQgZnJvbSAnLi9saWdodC9EaXJlY3Rpb25hbCc7XHJcbmltcG9ydCBQb2ludExpZ2h0IGZyb20gJy4vbGlnaHQvUG9pbnQnO1xyXG5pbXBvcnQgU3BvdExpZ2h0IGZyb20gJy4vbGlnaHQvU3BvdCc7XHJcbmltcG9ydCBBbWJpZW50TGlnaHQgZnJvbSAnLi9saWdodC9BbWJpZW50JztcclxuaW1wb3J0IEFtYmllbnRDdWJlbWFwTGlnaHQgZnJvbSAnLi9saWdodC9BbWJpZW50Q3ViZW1hcCc7XHJcbmltcG9ydCBBbWJpZW50U0hMaWdodCBmcm9tICcuL2xpZ2h0L0FtYmllbnRTSCc7XHJcbmltcG9ydCBTaGFkb3dNYXBQYXNzIGZyb20gJy4vcHJlUGFzcy9TaGFkb3dNYXAnO1xyXG5pbXBvcnQgUmF5UGlja2luZyBmcm9tICcuL3BpY2tpbmcvUmF5UGlja2luZyc7XHJcbmltcG9ydCBMUlVDYWNoZSBmcm9tICcuL2NvcmUvTFJVJztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgc2hVdGlsIGZyb20gJy4vdXRpbC9zaCc7XHJcbmltcG9ydCB0ZXh0dXJlVXRpbCBmcm9tICcuL3V0aWwvdGV4dHVyZSc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcblxyXG5pbXBvcnQgY29sb3JVdGlsIGZyb20gJy4vY29yZS9jb2xvcic7XHJcbnZhciBwYXJzZUNvbG9yID0gY29sb3JVdGlsLnBhcnNlVG9GbG9hdDtcclxuXHJcbmltcG9ydCBzaGFkZXJMaWJyYXJ5IGZyb20gJy4vc2hhZGVyL2J1aWx0aW4nO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4vU2hhZGVyJztcclxuXHJcblxyXG52YXIgRVZFX05BTUVTID0gWydjbGljaycsICdkYmxjbGljaycsICdtb3VzZW92ZXInLCAnbW91c2VvdXQnLCAnbW91c2Vtb3ZlJyxcclxuICAgICd0b3VjaHN0YXJ0JywgJ3RvdWNoZW5kJywgJ3RvdWNobW92ZScsXHJcbiAgICAnbW91c2V3aGVlbCcsICdET01Nb3VzZVNjcm9sbCdcclxuXTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7c3RyaW5nfEhUTUxDYW52YXNFbGVtZW50fEhUTUxJbWFnZUVsZW1lbnR8SFRNTFZpZGVvRWxlbWVudH0gSW1hZ2VMaWtlXHJcbiAqL1xyXG4vKipcclxuICogQHR5cGVkZWYge3N0cmluZ3xIVE1MQ2FudmFzRWxlbWVudHxIVE1MSW1hZ2VFbGVtZW50fEhUTUxWaWRlb0VsZW1lbnR8Y2xheS5UZXh0dXJlMkR9IFRleHR1cmVMaWtlXHJcbiAqL1xyXG4vKipcclxuICogQHR5cGVkZWYge3N0cmluZ3xBcnJheS48bnVtYmVyPn0gQ29sb3JcclxuICovXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7SFRNTEVsZW1lbnR8c3RyaW5nfSBEb21RdWVyeVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBcHAzRE5hbWVzcGFjZVxyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBpbml0IEluaXRpYWxpemF0aW9uIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBpbml0aW5nIGFwcC5cclxuICogICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiByZXR1cm4gYSBwcm9taXNlIGluIGluaXQgdG8gc3RhcnQgdGhlIGxvb3AgYXN5bmNocm9ub3VzbHkgd2hlbiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZC5cclxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gbG9vcCBMb29wIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgZWFjaCBmcmFtZS5cclxuICogQHByb3BlcnR5IHtib29sZWFufSBbYXV0b1JlbmRlcj10cnVlXSBJZiByZW5kZXIgYXV0b21hdGljYWxseSBlYWNoIGZyYW1lLlxyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBbYmVmb3JlUmVuZGVyXVxyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBbYWZ0ZXJSZW5kZXJdXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbd2lkdGhdIENvbnRhaW5lciB3aWR0aC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtoZWlnaHRdIENvbnRhaW5lciBoZWlnaHQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZGV2aWNlUGl4ZWxSYXRpb11cclxuICogQHByb3BlcnR5IHtPYmplY3QuPHN0cmluZywgRnVuY3Rpb24+fSBbbWV0aG9kc10gTWV0aG9kcyB0aGF0IHdpbGwgYmUgaW5qZWN0ZWQgdG8gQXBwM0QjbWV0aG9kcy5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFtncmFwaGljXSBHcmFwaGljIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIHNoYWRvdywgY29sb3Igc3BhY2UuXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2dyYXBoaWMuc2hhZG93PWZhbHNlXSBJZiBlbmFibGUgc2hhZG93XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2dyYXBoaWMubGluZWFyPWZhbHNlXSBJZiB1c2UgbGluZWFyIGNvbG9yIHNwYWNlXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2dyYXBoaWMudG9uZW1hcHBpbmc9ZmFsc2VdIElmIGVuYWJsZSBBQ0VTIHRvbmUgbWFwcGluZy5cclxuICogQHByb3BlcnR5IHtib29sZWFufSBbZXZlbnQ9ZmFsc2VdIElmIGVuYWJsZSBtb3VzZS90b3VjaCBldmVudC4gSXQgd2lsbCBzbG93IGRvd24gdGhlIHN5c3RlbSBpZiBnZW9tZXRyaWVzIGFyZSBjb21wbGV4LlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdGFuZGFyZE1hdGVyaWFsTVJDb25maWdcclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NoYWRlcj0nc3RhbmRhcmRNUiddXHJcbiAqIEBwcm9wZXJ0eSB7Q29sb3J9IFtjb2xvcl1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFthbHBoYV1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFttZXRhbG5lc3NdXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcm91Z2huZXNzXVxyXG4gKiBAcHJvcGVydHkge0NvbG9yfSBbZW1pc3Npb25dXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZW1pc3Npb25JbnRlbnNpdHldXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3RyYW5zcGFyZW50XVxyXG4gKiBAcHJvcGVydHkge1RleHR1cmVMaWtlfSBbZGlmZnVzZU1hcF1cclxuICogQHByb3BlcnR5IHtUZXh0dXJlTGlrZX0gW25vcm1hbE1hcF1cclxuICogQHByb3BlcnR5IHtUZXh0dXJlTGlrZX0gW3JvdWdobmVzc01hcF1cclxuICogQHByb3BlcnR5IHtUZXh0dXJlTGlrZX0gW21ldGFsbmVzc01hcF1cclxuICogQHByb3BlcnR5IHtUZXh0dXJlTGlrZX0gW2VtaXNzaXZlTWFwXVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBVc2luZyBBcHAzRCBpcyBhIG11Y2ggbW9yZSBjb252ZW5pZW50IHdheSB0byBjcmVhdGUgYW5kIG1hbmFnZSB5b3VyIDNEIGFwcGxpY2F0aW9uLlxyXG4gKlxyXG4gKiBJdCBwcm92aWRlcyB0aGUgYWJpbGl0aWVzIHRvOlxyXG4gKlxyXG4gKiArIE1hbmFnZSBhcHBsaWNhdGlvbiBsb29wIGFuZCByZW5kZXJpbmcuXHJcbiAqICsgQ29sbGVjdCBHUFUgcmVzb3VyY2UgYXV0b21hdGljYWxseSB3aXRob3V0IG1lbW9yeSBsZWFrIGNvbmNlcm4uXHJcbiAqICsgTW91c2UgZXZlbnQgbWFuYWdlbWVudC5cclxuICogKyBDcmVhdGUgc2NlbmUgb2JqZWN0cywgbWF0ZXJpYWxzLCB0ZXh0dXJlcyB3aXRoIHNpbXBsZXIgY29kZS5cclxuICogKyBMb2FkIG1vZGVscyB3aXRoIG9uZSBsaW5lIG9mIGNvZGUuXHJcbiAqICsgUHJvbWlzZWQgaW50ZXJmYWNlcy5cclxuICpcclxuICogSGVyZSBpcyBhIGJhc2ljIGV4YW1wbGUgdG8gY3JlYXRlIGEgcm90YXRpbmcgY3ViZS5cclxuICpcclxuYGBganNcclxudmFyIGFwcCA9IGNsYXkuYXBwbGljYXRpb24uY3JlYXRlKCcjdmlld3BvcnQnLCB7XHJcbiAgICBpbml0OiBmdW5jdGlvbiAoYXBwKSB7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgcGVyc3BlY3RpdmUgY2FtZXJhLlxyXG4gICAgICAgIC8vIEZpcnN0IHBhcmFtZXRlciBpcyB0aGUgY2FtZXJhIHBvc2l0aW9uLiBXaGljaCBpcyBpbiBmcm9udCBvZiB0aGUgY3ViZS5cclxuICAgICAgICAvLyBTZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSBjYW1lcmEgbG9va0F0IHRhcmdldC4gV2hpY2ggaXMgdGhlIG9yaWdpbiBvZiB0aGUgd29ybGQsIGFuZCB3aGVyZSB0aGUgY3ViZSBwdXRzLlxyXG4gICAgICAgIHRoaXMuX2NhbWVyYSA9IGFwcC5jcmVhdGVDYW1lcmEoWzAsIDIsIDVdLCBbMCwgMCwgMF0pO1xyXG4gICAgICAgIC8vIENyZWF0ZSBhIHNhbXBsZSBjdWJlXHJcbiAgICAgICAgdGhpcy5fY3ViZSA9IGFwcC5jcmVhdGVDdWJlKCk7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgZGlyZWN0aW9uYWwgbGlnaHQuIFRoZSBkaXJlY3Rpb24gaXMgZnJvbSB0b3AgcmlnaHQgdG8gbGVmdCBib3R0b20sIGF3YXkgZnJvbSBjYW1lcmEuXHJcbiAgICAgICAgdGhpcy5fbWFpbkxpZ2h0ID0gYXBwLmNyZWF0ZURpcmVjdGlvbmFsTGlnaHQoWy0xLCAtMSwgLTFdKTtcclxuICAgIH0sXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoYXBwKSB7XHJcbiAgICAgICAgLy8gU2ltcGx5IHJvdGF0aW5nIHRoZSBjdWJlIGV2ZXJ5IGZyYW1lLlxyXG4gICAgICAgIHRoaXMuX2N1YmUucm90YXRpb24ucm90YXRlWShhcHAuZnJhbWVUaW1lIC8gMTAwMCk7XHJcbiAgICB9XHJcbn0pO1xyXG5gYGBcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEXHJcbiAqIEBwYXJhbSB7RG9tUXVlcnl9IGRvbSBDb250YWluZXIgZG9tIGVsZW1lbnQgb3IgYSBzZWxlY3RvciBzdHJpbmcgdGhhdCBjYW4gYmUgdXNlZCBpbiBgcXVlcnlTZWxlY3RvcmBcclxuICogQHBhcmFtIHtBcHAzRE5hbWVzcGFjZX0gYXBwTlMgT3B0aW9ucyBhbmQgbmFtZXNwYWNlIHVzZWQgaW4gY3JlYXRpbmcgYXBwM0RcclxuICovXHJcbmZ1bmN0aW9uIEFwcDNEKGRvbSwgYXBwTlMpIHtcclxuXHJcbiAgICBhcHBOUyA9IGFwcE5TIHx8IHt9O1xyXG4gICAgYXBwTlMuZ3JhcGhpYyA9IGFwcE5TLmdyYXBoaWMgfHwge307XHJcblxyXG4gICAgaWYgKGFwcE5TLmF1dG9SZW5kZXIgPT0gbnVsbCkge1xyXG4gICAgICAgIGFwcE5TLmF1dG9SZW5kZXIgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgZG9tID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGRvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZG9tKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWRvbSkgeyB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZG9tJyk7IH1cclxuXHJcbiAgICB2YXIgaXNEb21DYW52YXMgPSAhZG9tLm5vZGVOYW1lICAvLyBOb3QgaW4gZG9tIGVudmlyb25tZW50XHJcbiAgICAgICAgfHwgZG9tLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdDQU5WQVMnO1xyXG5cclxuICAgIHZhciByZW5kZXJlck9wdHMgPSB7fTtcclxuICAgIGlzRG9tQ2FudmFzICYmIChyZW5kZXJlck9wdHMuY2FudmFzID0gZG9tKTtcclxuICAgIGFwcE5TLmRldmljZVBpeGVsUmF0aW8gJiYgKHJlbmRlcmVyT3B0cy5kZXZpY2VQaXhlbFJhdGlvID0gYXBwTlMuZGV2aWNlUGl4ZWxSYXRpbyk7XHJcblxyXG4gICAgdmFyIGdSZW5kZXJlciA9IG5ldyBSZW5kZXJlcihyZW5kZXJlck9wdHMpO1xyXG4gICAgdmFyIGdXaWR0aCA9IGFwcE5TLndpZHRoIHx8IGRvbS5jbGllbnRXaWR0aDtcclxuICAgIHZhciBnSGVpZ2h0ID0gYXBwTlMuaGVpZ2h0IHx8IGRvbS5jbGllbnRIZWlnaHQ7XHJcblxyXG4gICAgdmFyIGdTY2VuZSA9IG5ldyBTY2VuZSgpO1xyXG4gICAgdmFyIGdUaW1lbGluZSA9IG5ldyBUaW1lbGluZSgpO1xyXG4gICAgdmFyIGdTaGFkb3dQYXNzID0gYXBwTlMuZ3JhcGhpYy5zaGFkb3cgJiYgbmV3IFNoYWRvd01hcFBhc3MoKTtcclxuICAgIHZhciBnUmF5UGlja2luZyA9IGFwcE5TLmV2ZW50ICYmIG5ldyBSYXlQaWNraW5nKHtcclxuICAgICAgICBzY2VuZTogZ1NjZW5lLFxyXG4gICAgICAgIHJlbmRlcmVyOiBnUmVuZGVyZXJcclxuICAgIH0pO1xyXG5cclxuICAgICFpc0RvbUNhbnZhcyAmJiBkb20uYXBwZW5kQ2hpbGQoZ1JlbmRlcmVyLmNhbnZhcyk7XHJcblxyXG4gICAgZ1JlbmRlcmVyLnJlc2l6ZShnV2lkdGgsIGdIZWlnaHQpO1xyXG5cclxuICAgIHZhciBnRnJhbWVUaW1lID0gMDtcclxuICAgIHZhciBnRWxhcHNlZFRpbWUgPSAwO1xyXG5cclxuICAgIGdUaW1lbGluZS5zdGFydCgpO1xyXG5cclxuICAgIHZhciB1c2VyTWV0aG9kcyA9IHt9O1xyXG4gICAgZm9yICh2YXIga2V5IGluIGFwcE5TLm1ldGhvZHMpIHtcclxuICAgICAgICB1c2VyTWV0aG9kc1trZXldID0gYXBwTlMubWV0aG9kc1trZXldLmJpbmQoYXBwTlMsIHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb250YWluZXIgZG9tIGVsZW1lbnRcclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI2NvbnRhaW5lclxyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb250YWluZXI6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkb207IH0gfSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI3JlbmRlcmVyXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuUmVuZGVyZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVuZGVyZXI6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnUmVuZGVyZXI7IH19LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0Qjc2NlbmVcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5SZW5kZXJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzY2VuZTogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdTY2VuZTsgfX0sXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5BcHAzRCN0aW1lbGluZVxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlJlbmRlcmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRpbWVsaW5lOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1RpbWVsaW5lOyB9fSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lIGVsYXBzZWQgc2luY2UgbGFzdCBmcmFtZS4gQ2FuIGJlIHVzZWQgaW4gbG9vcCB0byBjYWxjdWxhdGUgdGhlIG1vdmVtZW50LlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjZnJhbWVUaW1lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBmcmFtZVRpbWU6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnRnJhbWVUaW1lOyB9fSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lIGVsYXBzZWQgc2luY2UgYXBwbGljYXRpb24gY3JlYXRlZC5cclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI2VsYXBzZWRUaW1lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbGFwc2VkVGltZTogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdFbGFwc2VkVGltZTsgfX0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdpZHRoIG9mIHZpZXdwb3J0LlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0Qjd2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHdpZHRoOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1JlbmRlcmVyLmdldFdpZHRoKCk7IH19LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEhlaWdodCBvZiB2aWV3cG9ydC5cclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI2hlaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaGVpZ2h0OiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1JlbmRlcmVyLmdldEhlaWdodCgpOyB9fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWV0aG9kcyBmcm9tIHtAbGluayBjbGF5LmFwcGxpY2F0aW9uLmNyZWF0ZX1cclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI21ldGhvZHNcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1ldGhvZHM6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1c2VyTWV0aG9kczsgfSB9LFxyXG5cclxuICAgICAgICBfc2hhZG93UGFzczogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdTaGFkb3dQYXNzOyB9IH0sXHJcblxyXG4gICAgICAgIF9hcHBOUzogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFwcE5TOyB9IH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2l6ZSB0aGUgYXBwbGljYXRpb24uIFdpbGwgdXNlIHRoZSBjb250YWluZXIgY2xpZW50V2lkdGgvY2xpZW50SGVpZ2h0IGlmIHdpZHRoL2hlaWdodCBpbiBwYXJhbWV0ZXJzIGFyZSBub3QgZ2l2ZW4uXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBtZW1iZXJPZiB7Y2xheS5hcHBsaWNhdGlvbi5BcHAzRH1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhdXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF1cclxuICAgICAqL1xyXG4gICAgdGhpcy5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xyXG4gICAgICAgIGdXaWR0aCA9IHdpZHRoIHx8IGFwcE5TLndpZHRoIHx8IGRvbS5jbGllbnRXaWR0aDtcclxuICAgICAgICBnSGVpZ2h0ID0gaGVpZ2h0IHx8IGRvbS5oZWlnaHQgfHwgZG9tLmNsaWVudEhlaWdodDtcclxuICAgICAgICBnUmVuZGVyZXIucmVzaXplKGdXaWR0aCwgZ0hlaWdodCk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSB0aGUgYXBwbGljYXRpb25cclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICovXHJcbiAgICB0aGlzLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoYXBwTlMuZGlzcG9zZSkge1xyXG4gICAgICAgICAgICBhcHBOUy5kaXNwb3NlKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBnVGltZWxpbmUuc3RvcCgpO1xyXG4gICAgICAgIGdSZW5kZXJlci5kaXNwb3NlU2NlbmUoZ1NjZW5lKTtcclxuICAgICAgICBnU2hhZG93UGFzcyAmJiBnU2hhZG93UGFzcy5kaXNwb3NlKGdSZW5kZXJlcik7XHJcblxyXG4gICAgICAgIGRvbS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBFVkVfTkFNRVMuZm9yRWFjaChmdW5jdGlvbiAoZXZlVHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzW21ha2VIYW5kbGVyTmFtZShldmVUeXBlKV0gJiYgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCBtYWtlSGFuZGxlck5hbWUoZXZlVHlwZSkpO1xyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICBnUmF5UGlja2luZyAmJiB0aGlzLl9pbml0TW91c2VFdmVudHMoZ1JheVBpY2tpbmcpO1xyXG5cclxuICAgIHRoaXMuX2dlb0NhY2hlID0gbmV3IExSVUNhY2hlKDIwKTtcclxuICAgIHRoaXMuX3RleENhY2hlID0gbmV3IExSVUNhY2hlKDIwKTtcclxuXHJcbiAgICAvLyBHUFUgUmVzb3VyY2VzLlxyXG4gICAgdGhpcy5fdGV4dHVyZXNMaXN0ID0ge307XHJcbiAgICB0aGlzLl9nZW9tZXRyaWVzTGlzdCA9IHt9O1xyXG5cclxuICAgIC8vIERvIGluaXQgdGhlIGFwcGxpY2F0aW9uLlxyXG4gICAgdmFyIGluaXRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGFwcE5TLmluaXQgJiYgYXBwTlMuaW5pdCh0aGlzKSk7XHJcbiAgICAvLyBVc2UgdGhlIGluaXRlZCBjYW1lcmEuXHJcbiAgICBnUmF5UGlja2luZyAmJiAoZ1JheVBpY2tpbmcuY2FtZXJhID0gZ1NjZW5lLmdldE1haW5DYW1lcmEoKSk7XHJcblxyXG4gICAgaWYgKCFhcHBOUy5sb29wKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdNaXNzIGxvb3AgbWV0aG9kLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgIGluaXRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGdUaW1lbGluZS5vbignZnJhbWUnLCBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcbiAgICAgICAgICAgIGdGcmFtZVRpbWUgPSBmcmFtZVRpbWU7XHJcbiAgICAgICAgICAgIGdFbGFwc2VkVGltZSArPSBmcmFtZVRpbWU7XHJcblxyXG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gZ1NjZW5lLmdldE1haW5DYW1lcmEoKTtcclxuICAgICAgICAgICAgaWYgKGNhbWVyYSkge1xyXG4gICAgICAgICAgICAgICAgY2FtZXJhLmFzcGVjdCA9IGdSZW5kZXJlci5nZXRWaWV3cG9ydEFzcGVjdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGdSYXlQaWNraW5nICYmIChnUmF5UGlja2luZy5jYW1lcmEgPSBjYW1lcmEpO1xyXG5cclxuICAgICAgICAgICAgYXBwTlMubG9vcCAmJiBhcHBOUy5sb29wKHNlbGYpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFwcE5TLmF1dG9SZW5kZXIpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVuZGVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHNlbGYuY29sbGVjdFJlc291cmNlcygpO1xyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZ1NjZW5lLm9uKCdiZWZvcmVyZW5kZXInLCBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIHJlbmRlckxpc3QpIHtcclxuICAgICAgICBpZiAodGhpcy5faW5SZW5kZXIpIHtcclxuICAgICAgICAgICAgLy8gT25seSB1cGRhdGUgZ3JhcGhpYyBvcHRpb25zIHdoZW4gdXNpbmcgI3JlbmRlciBmdW5jdGlvbi5cclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlR3JhcGhpY09wdGlvbnMoYXBwTlMuZ3JhcGhpYywgcmVuZGVyTGlzdC5vcGFxdWUsIGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlR3JhcGhpY09wdGlvbnMoYXBwTlMuZ3JhcGhpYywgcmVuZGVyTGlzdC50cmFuc3BhcmVudCwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIHRoaXMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0ltYWdlTGlrZUVsZW1lbnQodmFsKSB7XHJcbiAgICByZXR1cm4gKHR5cGVvZiBJbWFnZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgSW1hZ2UpXHJcbiAgICAgICAgfHwgKHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpXHJcbiAgICAgICAgfHwgKHR5cGVvZiBIVE1MVmlkZW9FbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB2YWwgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0S2V5RnJvbUltYWdlTGlrZSh2YWwpIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gdmFsIDogKHZhbC5fX2tleV9fIHx8ICh2YWwuX19rZXlfXyA9IHV0aWwuZ2VuR1VJRCgpKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1ha2VIYW5kbGVyTmFtZShldmVUeXBlKSB7XHJcbiAgICByZXR1cm4gJ18nICsgZXZlVHlwZSArICdIYW5kbGVyJztcclxufVxyXG5cclxuZnVuY3Rpb24gcGFja2FnZUV2ZW50KGV2ZW50VHlwZSwgcGlja1Jlc3VsdCwgb2Zmc2V0WCwgb2Zmc2V0WSwgd2hlZWxEZWx0YSkge1xyXG4gICAgdmFyIGV2ZW50ID0gdXRpbC5jbG9uZShwaWNrUmVzdWx0KTtcclxuICAgIGV2ZW50LnR5cGUgPSBldmVudFR5cGU7XHJcbiAgICBldmVudC5vZmZzZXRYID0gb2Zmc2V0WDtcclxuICAgIGV2ZW50Lm9mZnNldFkgPSBvZmZzZXRZO1xyXG4gICAgaWYgKHdoZWVsRGVsdGEgIT09IG51bGwpIHtcclxuICAgICAgICBldmVudC53aGVlbERlbHRhID0gd2hlZWxEZWx0YTtcclxuICAgIH1cclxuICAgIHJldHVybiBldmVudDtcclxufVxyXG5cclxuZnVuY3Rpb24gYnViYmxpbmdFdmVudCh0YXJnZXQsIGV2ZW50KSB7XHJcbiAgICB3aGlsZSAodGFyZ2V0ICYmICFldmVudC5jYW5jZWxCdWJibGUpIHtcclxuICAgICAgICB0YXJnZXQudHJpZ2dlcihldmVudC50eXBlLCBldmVudCk7XHJcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LmdldFBhcmVudCgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5BcHAzRC5wcm90b3R5cGUuX2luaXRNb3VzZUV2ZW50cyA9IGZ1bmN0aW9uIChyYXlQaWNraW5nKSB7XHJcbiAgICB2YXIgZG9tID0gdGhpcy5jb250YWluZXI7XHJcblxyXG4gICAgdmFyIG9sZFRhcmdldCA9IG51bGw7XHJcbiAgICBFVkVfTkFNRVMuZm9yRWFjaChmdW5jdGlvbiAoX2V2ZVR5cGUpIHtcclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb20sIF9ldmVUeXBlLCB0aGlzW21ha2VIYW5kbGVyTmFtZShfZXZlVHlwZSldID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKCFyYXlQaWNraW5nLmNhbWVyYSkgeyAvLyBOb3QgaGF2ZSBjYW1lcmEgeWV0LlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQgJiYgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGJveCA9IGRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgdmFyIG9mZnNldFgsIG9mZnNldFk7XHJcbiAgICAgICAgICAgIHZhciBldmVUeXBlID0gX2V2ZVR5cGU7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXZlVHlwZS5pbmRleE9mKCd0b3VjaCcpID49IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciB0b3VjaCA9IGV2ZVR5cGUgIT09ICd0b3VjaGVuZCdcclxuICAgICAgICAgICAgICAgICAgICA/IGUudGFyZ2V0VG91Y2hlc1swXVxyXG4gICAgICAgICAgICAgICAgICAgIDogZS5jaGFuZ2VkVG91Y2hlc1swXTtcclxuICAgICAgICAgICAgICAgIGlmIChldmVUeXBlID09PSAndG91Y2hzdGFydCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVUeXBlID0gJ21vdXNlZG93bic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChldmVUeXBlID09PSAndG91Y2hlbmQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlVHlwZSA9ICdtb3VzZXVwJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZVR5cGUgPT09ICd0b3VjaG1vdmUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlVHlwZSA9ICdtb3VzZW1vdmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0WCA9IHRvdWNoLmNsaWVudFggLSBib3gubGVmdDtcclxuICAgICAgICAgICAgICAgIG9mZnNldFkgPSB0b3VjaC5jbGllbnRZIC0gYm94LnRvcDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9mZnNldFggPSBlLmNsaWVudFggLSBib3gubGVmdDtcclxuICAgICAgICAgICAgICAgIG9mZnNldFkgPSBlLmNsaWVudFkgLSBib3gudG9wO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcGlja1Jlc3VsdCA9IHJheVBpY2tpbmcucGljayhvZmZzZXRYLCBvZmZzZXRZKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKGV2ZVR5cGUgPT09ICdET01Nb3VzZVNjcm9sbCcgfHwgZXZlVHlwZSA9PT0gJ21vdXNld2hlZWwnKSB7XHJcbiAgICAgICAgICAgICAgICBkZWx0YSA9IChlLndoZWVsRGVsdGEpID8gZS53aGVlbERlbHRhIC8gMTIwIDogLShlLmRldGFpbCB8fCAwKSAvIDM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChwaWNrUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBKdXN0IGlnbm9yZSBzaWxlbnQgZWxlbWVudC5cclxuICAgICAgICAgICAgICAgIGlmIChwaWNrUmVzdWx0LnRhcmdldC5zaWxlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZVR5cGUgPT09ICdtb3VzZW1vdmUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUEVORElORyB0b3VjaGRvd24gc2hvdWxkIHRyaWdnZXIgbW91c2VvdmVyIGV2ZW50ID9cclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0Q2hhbmdlZCA9IHBpY2tSZXN1bHQudGFyZ2V0ICE9PSBvbGRUYXJnZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldENoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2xkVGFyZ2V0ICYmIGJ1YmJsaW5nRXZlbnQob2xkVGFyZ2V0LCBwYWNrYWdlRXZlbnQoJ21vdXNlb3V0Jywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBvbGRUYXJnZXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgb2Zmc2V0WCwgb2Zmc2V0WSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KHBpY2tSZXN1bHQudGFyZ2V0LCBwYWNrYWdlRXZlbnQoJ21vdXNlbW92ZScsIHBpY2tSZXN1bHQsIG9mZnNldFgsIG9mZnNldFkpKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KHBpY2tSZXN1bHQudGFyZ2V0LCBwYWNrYWdlRXZlbnQoJ21vdXNlb3ZlcicsIHBpY2tSZXN1bHQsIG9mZnNldFgsIG9mZnNldFkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KHBpY2tSZXN1bHQudGFyZ2V0LCBwYWNrYWdlRXZlbnQoZXZlVHlwZSwgcGlja1Jlc3VsdCwgb2Zmc2V0WCwgb2Zmc2V0WSwgZGVsdGEpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9sZFRhcmdldCA9IHBpY2tSZXN1bHQudGFyZ2V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG9sZFRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgYnViYmxpbmdFdmVudChvbGRUYXJnZXQsIHBhY2thZ2VFdmVudCgnbW91c2VvdXQnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBvbGRUYXJnZXRcclxuICAgICAgICAgICAgICAgIH0sIG9mZnNldFgsIG9mZnNldFkpKTtcclxuICAgICAgICAgICAgICAgIG9sZFRhcmdldCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0sIHRoaXMpO1xyXG59O1xyXG5cclxuQXBwM0QucHJvdG90eXBlLl91cGRhdGVHcmFwaGljT3B0aW9ucyA9IGZ1bmN0aW9uIChncmFwaGljT3B0cywgbGlzdCwgaXNTa3lib3gpIHtcclxuICAgIHZhciBlbmFibGVUb25lbWFwcGluZyA9ICEhZ3JhcGhpY09wdHMudG9uZW1hcHBpbmc7XHJcbiAgICB2YXIgaXNMaW5lYXJTcGFjZSA9ICEhZ3JhcGhpY09wdHMubGluZWFyO1xyXG5cclxuICAgIHZhciBwcmV2TWF0ZXJpYWw7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIG1hdCA9IGxpc3RbaV0ubWF0ZXJpYWw7XHJcbiAgICAgICAgaWYgKG1hdCA9PT0gcHJldk1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZW5hYmxlVG9uZW1hcHBpbmcgPyBtYXQuZGVmaW5lKCdmcmFnbWVudCcsICdUT05FTUFQUElORycpIDogbWF0LnVuZGVmaW5lKCdmcmFnbWVudCcsICdUT05FTUFQUElORycpO1xyXG4gICAgICAgIGlmIChpc0xpbmVhclNwYWNlKSB7XHJcbiAgICAgICAgICAgIHZhciBkZWNvZGVTUkdCID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGlzU2t5Ym94ICYmIG1hdC5nZXQoJ2Vudmlyb25tZW50TWFwJykgJiYgIW1hdC5nZXQoJ2Vudmlyb25tZW50TWFwJykuc1JHQikge1xyXG4gICAgICAgICAgICAgICAgZGVjb2RlU1JHQiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlY29kZVNSR0IgJiYgbWF0LmRlZmluZSgnZnJhZ21lbnQnLCAnU1JHQl9ERUNPREUnKTtcclxuICAgICAgICAgICAgbWF0LmRlZmluZSgnZnJhZ21lbnQnLCAnU1JHQl9FTkNPREUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdC51bmRlZmluZSgnZnJhZ21lbnQnLCAnU1JHQl9ERUNPREUnKTtcclxuICAgICAgICAgICAgbWF0LnVuZGVmaW5lKCdmcmFnbWVudCcsICdTUkdCX0VOQ09ERScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJldk1hdGVyaWFsID0gbWF0O1xyXG4gICAgfVxyXG59O1xyXG5cclxuQXBwM0QucHJvdG90eXBlLl9kb1JlbmRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUpIHtcclxuICAgIHZhciBjYW1lcmEgPSBzY2VuZS5nZXRNYWluQ2FtZXJhKCk7XHJcbiAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSwgdHJ1ZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogRG8gcmVuZGVyXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5faW5SZW5kZXIgPSB0cnVlO1xyXG4gICAgdmFyIGFwcE5TID0gdGhpcy5fYXBwTlM7XHJcbiAgICBhcHBOUy5iZWZvcmVSZW5kZXIgJiYgYXBwTlMuYmVmb3JlUmVuZGVyKHNlbGYpO1xyXG5cclxuICAgIHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7XHJcbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xyXG4gICAgdmFyIHNoYWRvd1Bhc3MgPSB0aGlzLl9zaGFkb3dQYXNzO1xyXG5cclxuICAgIHNjZW5lLnVwZGF0ZSgpO1xyXG4gICAgdmFyIHNreWJveExpc3QgPSBbXTtcclxuICAgIHNjZW5lLnNreWJveCAmJiBza3lib3hMaXN0LnB1c2goc2NlbmUuc2t5Ym94KTtcclxuICAgIHNjZW5lLnNreWRvbWUgJiYgc2t5Ym94TGlzdC5wdXNoKHNjZW5lLnNreWRvbWUpO1xyXG5cclxuICAgIHRoaXMuX3VwZGF0ZUdyYXBoaWNPcHRpb25zKGFwcE5TLmdyYXBoaWMsIHNreWJveExpc3QsIHRydWUpO1xyXG4gICAgLy8gUmVuZGVyIHNoYWRvdyBwYXNzXHJcbiAgICBzaGFkb3dQYXNzICYmIHNoYWRvd1Bhc3MucmVuZGVyKHJlbmRlcmVyLCBzY2VuZSwgbnVsbCwgdHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5fZG9SZW5kZXIocmVuZGVyZXIsIHNjZW5lLCB0cnVlKTtcclxuXHJcbiAgICBhcHBOUy5hZnRlclJlbmRlciAmJiBhcHBOUy5hZnRlclJlbmRlcihzZWxmKTtcclxuICAgIHRoaXMuX2luUmVuZGVyID0gZmFsc2U7XHJcbn07XHJcblxyXG5BcHAzRC5wcm90b3R5cGUuY29sbGVjdFJlc291cmNlcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcbiAgICB2YXIgc2NlbmUgPSB0aGlzLnNjZW5lO1xyXG4gICAgdmFyIHRleHR1cmVzTGlzdCA9IHRoaXMuX3RleHR1cmVzTGlzdDtcclxuICAgIHZhciBnZW9tZXRyaWVzTGlzdCA9IHRoaXMuX2dlb21ldHJpZXNMaXN0O1xyXG4gICAgLy8gTWFyayBhbGwgcmVzb3VyY2VzIHVudXNlZDtcclxuICAgIG1hcmtVbnVzZWQodGV4dHVyZXNMaXN0KTtcclxuICAgIG1hcmtVbnVzZWQoZ2VvbWV0cmllc0xpc3QpO1xyXG5cclxuICAgIC8vIENvbGxlY3QgcmVzb3VyY2VzIHVzZWQgaW4gdGhpcyBmcmFtZS5cclxuICAgIHZhciBuZXdUZXh0dXJlc0xpc3QgPSBbXTtcclxuICAgIHZhciBuZXdHZW9tZXRyaWVzTGlzdCA9IFtdO1xyXG4gICAgY29sbGVjdFJlc291cmNlcyhzY2VuZSwgbmV3VGV4dHVyZXNMaXN0LCBuZXdHZW9tZXRyaWVzTGlzdCk7XHJcblxyXG4gICAgLy8gRGlzcG9zZSB0aG9zZSB1bnNlZCByZXNvdXJjZXMuXHJcbiAgICBjaGVja0FuZERpc3Bvc2UocmVuZGVyZXIsIHRleHR1cmVzTGlzdCk7XHJcbiAgICBjaGVja0FuZERpc3Bvc2UocmVuZGVyZXIsIGdlb21ldHJpZXNMaXN0KTtcclxuXHJcbiAgICB0aGlzLl90ZXh0dXJlc0xpc3QgPSBuZXdUZXh0dXJlc0xpc3Q7XHJcbiAgICB0aGlzLl9nZW9tZXRyaWVzTGlzdCA9IG5ld0dlb21ldHJpZXNMaXN0O1xyXG59O1xyXG5cclxuXHJcbmZ1bmN0aW9uIG1hcmtVbnVzZWQocmVzb3VyY2VMaXN0KSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc291cmNlTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHJlc291cmNlTGlzdFtpXS5fX3VzZWQgPSAwO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjaGVja0FuZERpc3Bvc2UocmVuZGVyZXIsIHJlc291cmNlTGlzdCkge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXNvdXJjZUxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoIXJlc291cmNlTGlzdFtpXS5fX3VzZWQpIHtcclxuICAgICAgICAgICAgcmVzb3VyY2VMaXN0W2ldLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdXBkYXRlVXNlZChyZXNvdXJjZSwgbGlzdCkge1xyXG4gICAgcmVzb3VyY2UuX191c2VkID0gcmVzb3VyY2UuX191c2VkIHx8IDA7XHJcbiAgICByZXNvdXJjZS5fX3VzZWQrKztcclxuICAgIGlmIChyZXNvdXJjZS5fX3VzZWQgPT09IDEpIHtcclxuICAgICAgICAvLyBEb24ndCBwdXNoIHRvIHRoZSBsaXN0IHR3aWNlLlxyXG4gICAgICAgIGxpc3QucHVzaChyZXNvdXJjZSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY29sbGVjdFJlc291cmNlcyhzY2VuZSwgdGV4dHVyZVJlc291cmNlTGlzdCwgZ2VvbWV0cnlSZXNvdXJjZUxpc3QpIHtcclxuICAgIHZhciBwcmV2TWF0ZXJpYWw7XHJcbiAgICB2YXIgcHJldkdlb21ldHJ5O1xyXG4gICAgc2NlbmUudHJhdmVyc2UoZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICBpZiAocmVuZGVyYWJsZS5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSByZW5kZXJhYmxlLmdlb21ldHJ5O1xyXG4gICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG5cclxuICAgICAgICAgICAgLy8gVE9ETyBvcHRpbWl6ZSEhXHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbCAhPT0gcHJldk1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZVVuaWZvcm1zID0gbWF0ZXJpYWwuZ2V0VGV4dHVyZVVuaWZvcm1zKCk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IHRleHR1cmVVbmlmb3Jtcy5sZW5ndGg7IHUrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtTmFtZSA9IHRleHR1cmVVbmlmb3Jtc1t1XTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gbWF0ZXJpYWwudW5pZm9ybXNbdW5pZm9ybU5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtVHlwZSA9IG1hdGVyaWFsLnVuaWZvcm1zW3VuaWZvcm1OYW1lXS50eXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodW5pZm9ybVR5cGUgPT09ICd0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVVc2VkKHZhbCwgdGV4dHVyZVJlc291cmNlTGlzdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVuaWZvcm1UeXBlID09PSAndHYnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdmFsLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsW2tdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVXNlZCh2YWxba10sIHRleHR1cmVSZXNvdXJjZUxpc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeSAhPT0gcHJldkdlb21ldHJ5KSB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVVc2VkKGdlb21ldHJ5LCBnZW9tZXRyeVJlc291cmNlTGlzdCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHByZXZNYXRlcmlhbCA9IG1hdGVyaWFsO1xyXG4gICAgICAgICAgICBwcmV2R2VvbWV0cnkgPSBnZW9tZXRyeTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBmb3IgKHZhciBrID0gMDsgayA8IHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgIC8vIFRyYWNrIEFtYmllbnRDdWJlbWFwXHJcbiAgICAgICAgaWYgKHNjZW5lLmxpZ2h0c1trXS5jdWJlbWFwKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZVVzZWQoc2NlbmUubGlnaHRzW2tdLmN1YmVtYXAsIHRleHR1cmVSZXNvdXJjZUxpc3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogTG9hZCBhIHRleHR1cmUgZnJvbSBpbWFnZSBvciBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7SW1hZ2VMaWtlfSBpbWdcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSBUZXh0dXJlIG9wdGlvbnMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZmxpcFk9dHJ1ZV0gSWYgZmxpcFkuIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLmZsaXBZfVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmNvbnZlcnRUb1BPVD1mYWxzZV0gRm9yY2UgY29udmVydCBOb25lIFBvd2VyIG9mIFR3byB0ZXh0dXJlIHRvIFBvd2VyIG9mIHR3byBzbyBpdCBjYW4gYmUgdGlsZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5hbmlzb3Ryb3BpY10gQW5pc290cm9waWMgZmlsdGVyaW5nLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5hbmlzb3Ryb3BpY31cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLndyYXBTPWNsYXkuVGV4dHVyZS5SRVBFQVRdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLndyYXBTfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMud3JhcFQ9Y2xheS5UZXh0dXJlLlJFUEVBVF0gU2VlIHtAbGluayBjbGF5LlRleHR1cmUud3JhcFR9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5taW5GaWx0ZXI9Y2xheS5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTElORUFSXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5taW5GaWx0ZXJ9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5tYWdGaWx0ZXI9Y2xheS5UZXh0dXJlLkxJTkVBUl0gU2VlIHtAbGluayBjbGF5LlRleHR1cmUubWFnRmlsdGVyfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZXhwb3N1cmVdIE9ubHkgYmUgdXNlZCB3aGVuIHNvdXJjZSBpcyBhIEhEUiBpbWFnZS5cclxuICogQHBhcmFtIHtib29sZWFufSBbdXNlQ2FjaGVdIElmIHVzZSBjYWNoZS5cclxuICogQHJldHVybiB7UHJvbWlzZX1cclxuICogQGV4YW1wbGVcclxuICogIGFwcC5sb2FkVGV4dHVyZSgnZGlmZnVzZU1hcC5qcGcnKVxyXG4gKiAgICAgIC50aGVuKGZ1bmN0aW9uICh0ZXh0dXJlKSB7XHJcbiAqICAgICAgICAgIG1hdGVyaWFsLnNldCgnZGlmZnVzZU1hcCcsIHRleHR1cmUpO1xyXG4gKiAgICAgIH0pO1xyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmxvYWRUZXh0dXJlID0gZnVuY3Rpb24gKHVybE9ySW1nLCBvcHRzLCB1c2VDYWNoZSkge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgdmFyIGtleSA9IGdldEtleUZyb21JbWFnZUxpa2UodXJsT3JJbWcpO1xyXG4gICAgaWYgKHVzZUNhY2hlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3RleENhY2hlLmdldChrZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXhDYWNoZS5nZXQoa2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPIFByb21pc2UgP1xyXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSBzZWxmLmxvYWRUZXh0dXJlU3luYyh1cmxPckltZywgb3B0cyk7XHJcbiAgICAgICAgaWYgKCF0ZXh0dXJlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgIHRleHR1cmUuc3VjY2VzcyhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRleHR1cmUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGV4dHVyZS5lcnJvcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXNvbHZlKHRleHR1cmUpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHVzZUNhY2hlKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4Q2FjaGUucHV0KGtleSwgcHJvbWlzZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSB0ZXh0dXJlIGZyb20gaW1hZ2Ugb3Igc3RyaW5nIHN5bmNocm9ub3VzbHkuIFRleHR1cmUgY2FuIGJlIHVzZSBkaXJlY3RseSBhbmQgZG9uJ3QgaGF2ZSB0byB3YWl0IGZvciBpdCdzIGxvYWRlZC5cclxuICogQHBhcmFtIHtJbWFnZUxpa2V9IGltZ1xyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIFRleHR1cmUgb3B0aW9ucy5cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbGlwWT10cnVlXSBJZiBmbGlwWS4gU2VlIHtAbGluayBjbGF5LlRleHR1cmUuZmxpcFl9XHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuY29udmVydFRvUE9UPWZhbHNlXSBGb3JjZSBjb252ZXJ0IE5vbmUgUG93ZXIgb2YgVHdvIHRleHR1cmUgdG8gUG93ZXIgb2YgdHdvIHNvIGl0IGNhbiBiZSB0aWxlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmFuaXNvdHJvcGljXSBBbmlzb3Ryb3BpYyBmaWx0ZXJpbmcuIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLmFuaXNvdHJvcGljfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMud3JhcFM9Y2xheS5UZXh0dXJlLlJFUEVBVF0gU2VlIHtAbGluayBjbGF5LlRleHR1cmUud3JhcFN9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy53cmFwVD1jbGF5LlRleHR1cmUuUkVQRUFUXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS53cmFwVH1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLm1pbkZpbHRlcj1jbGF5LlRleHR1cmUuTElORUFSX01JUE1BUF9MSU5FQVJdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLm1pbkZpbHRlcn1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLm1hZ0ZpbHRlcj1jbGF5LlRleHR1cmUuTElORUFSXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5tYWdGaWx0ZXJ9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5leHBvc3VyZV0gT25seSBiZSB1c2VkIHdoZW4gc291cmNlIGlzIGEgSERSIGltYWdlLlxyXG4gKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICogQGV4YW1wbGVcclxuICogIHZhciB0ZXh0dXJlID0gYXBwLmxvYWRUZXh0dXJlKCdkaWZmdXNlTWFwLmpwZycsIHtcclxuICogICAgICBhbmlzb3Ryb3BpYzogOCxcclxuICogICAgICBmbGlwWTogZmFsc2VcclxuICogIH0pO1xyXG4gKiAgbWF0ZXJpYWwuc2V0KCdkaWZmdXNlTWFwJywgdGV4dHVyZSk7XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUubG9hZFRleHR1cmVTeW5jID0gZnVuY3Rpb24gKHVybE9ySW1nLCBvcHRzKSB7XHJcbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQob3B0cyk7XHJcbiAgICBpZiAodHlwZW9mIHVybE9ySW1nID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGlmICh1cmxPckltZy5tYXRjaCgvLmhkciR8XmRhdGE6YXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vKSkge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gdGV4dHVyZVV0aWwubG9hZFRleHR1cmUodXJsT3JJbWcsIHtcclxuICAgICAgICAgICAgICAgIGV4cG9zdXJlOiBvcHRzICYmIG9wdHMuZXhwb3N1cmUsXHJcbiAgICAgICAgICAgICAgICBmaWxlVHlwZTogJ2hkcidcclxuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5kaXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS50cmlnZ2VyKCdzdWNjZXNzJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb3B0cykge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZVtrZXldID0gb3B0c1trZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmxvYWQodXJsT3JJbWcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzSW1hZ2VMaWtlRWxlbWVudCh1cmxPckltZykpIHtcclxuICAgICAgICB0ZXh0dXJlLmltYWdlID0gdXJsT3JJbWc7XHJcbiAgICAgICAgdGV4dHVyZS5keW5hbWljID0gdXJsT3JJbWcgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRleHR1cmU7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgdGV4dHVyZSBmcm9tIGltYWdlIG9yIHN0cmluZyBzeW5jaHJvbm91c2x5LiBUZXh0dXJlIGNhbiBiZSB1c2UgZGlyZWN0bHkgYW5kIGRvbid0IGhhdmUgdG8gd2FpdCBmb3IgaXQncyBsb2FkZWQuXHJcbiAqIEBwYXJhbSB7SW1hZ2VMaWtlfSBpbWdcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSBUZXh0dXJlIG9wdGlvbnMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZmxpcFk9ZmFsc2VdIElmIGZsaXBZLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5mbGlwWX1cclxuICogQHJldHVybiB7UHJvbWlzZX1cclxuICogQGV4YW1wbGVcclxuICogIGFwcC5sb2FkVGV4dHVyZUN1YmUoe1xyXG4gKiAgICAgIHB4OiAnc2t5Ym94L3B4LmpwZycsIHB5OiAnc2t5Ym94L3B5LmpwZycsIHB6OiAnc2t5Ym94L3B6LmpwZycsXHJcbiAqICAgICAgbng6ICdza3lib3gvbnguanBnJywgbnk6ICdza3lib3gvbnkuanBnJywgbno6ICdza3lib3gvbnouanBnJ1xyXG4gKiAgfSkudGhlbihmdW5jdGlvbiAodGV4dHVyZSkge1xyXG4gKiAgICAgIHNreWJveC5zZXRFbnZpcm9ubWVudE1hcCh0ZXh0dXJlKTtcclxuICogIH0pXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUubG9hZFRleHR1cmVDdWJlID0gZnVuY3Rpb24gKGltZ0xpc3QsIG9wdHMpIHtcclxuICAgIHZhciB0ZXh0dXJlQ3ViZSA9IHRoaXMubG9hZFRleHR1cmVDdWJlU3luYyhpbWdMaXN0LCBvcHRzKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgaWYgKHRleHR1cmVDdWJlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUodGV4dHVyZUN1YmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGV4dHVyZUN1YmUuc3VjY2VzcyhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRleHR1cmVDdWJlKTtcclxuICAgICAgICAgICAgfSkuZXJyb3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHRleHR1cmUgZnJvbSBpbWFnZSBvciBzdHJpbmcgc3luY2hyb25vdXNseS4gVGV4dHVyZSBjYW4gYmUgdXNlIGRpcmVjdGx5IGFuZCBkb24ndCBoYXZlIHRvIHdhaXQgZm9yIGl0J3MgbG9hZGVkLlxyXG4gKiBAcGFyYW0ge0ltYWdlTGlrZX0gaW1nXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gVGV4dHVyZSBvcHRpb25zLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmZsaXBZPWZhbHNlXSBJZiBmbGlwWS4gU2VlIHtAbGluayBjbGF5LlRleHR1cmUuZmxpcFl9XHJcbiAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZUN1YmV9XHJcbiAqIEBleGFtcGxlXHJcbiAqICB2YXIgdGV4dHVyZSA9IGFwcC5sb2FkVGV4dHVyZUN1YmVTeW5jKHtcclxuICogICAgICBweDogJ3NreWJveC9weC5qcGcnLCBweTogJ3NreWJveC9weS5qcGcnLCBwejogJ3NreWJveC9wei5qcGcnLFxyXG4gKiAgICAgIG54OiAnc2t5Ym94L254LmpwZycsIG55OiAnc2t5Ym94L255LmpwZycsIG56OiAnc2t5Ym94L256LmpwZydcclxuICogIH0pO1xyXG4gKiAgc2t5Ym94LnNldEVudmlyb25tZW50TWFwKHRleHR1cmUpO1xyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmxvYWRUZXh0dXJlQ3ViZVN5bmMgPSBmdW5jdGlvbiAoaW1nTGlzdCwgb3B0cykge1xyXG4gICAgb3B0cyA9IG9wdHMgfHwge307XHJcbiAgICBvcHRzLmZsaXBZID0gb3B0cy5mbGlwWSB8fCBmYWxzZTtcclxuICAgIHZhciB0ZXh0dXJlQ3ViZSA9IG5ldyBUZXh0dXJlQ3ViZShvcHRzKTtcclxuICAgIGlmICghaW1nTGlzdCB8fCAhaW1nTGlzdC5weCB8fCAhaW1nTGlzdC5ueCB8fCAhaW1nTGlzdC5weSB8fCAhaW1nTGlzdC5ueSB8fCAhaW1nTGlzdC5weiB8fCAhaW1nTGlzdC5ueikge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjdWJlbWFwIGZvcm1hdC4gU2hvdWxkIGJlIGFuIG9iamVjdCBpbmNsdWRpbmcgcHgsbngscHksbnkscHosbnonKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgaW1nTGlzdC5weCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0ZXh0dXJlQ3ViZS5sb2FkKGltZ0xpc3QpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGV4dHVyZUN1YmUuaW1hZ2UgPSB1dGlsLmNsb25lKGltZ0xpc3QpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRleHR1cmVDdWJlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIG1hdGVyaWFsLlxyXG4gKiBAcGFyYW0ge09iamVjdHxTdGFuZGFyZE1hdGVyaWFsTVJDb25maWd9IG1hdGVyaWFsQ29uZmlnLiBtYXRlcmlhbENvbmZpZyBjb250YWlucyBgc2hhZGVyYCwgYHRyYW5zcGFyZW50YCBhbmQgdW5pZm9ybXMgdGhhdCB1c2VkIGluIGNvcnJlc3BvbmRpbmcgdW5pZm9ybXMuXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pZm9ybXMgY2FuIGJlIGBjb2xvcmAsIGBhbHBoYWAgYGRpZmZ1c2VNYXBgIGV0Yy5cclxuICogQHBhcmFtIHtzdHJpbmd8Y2xheS5TaGFkZXJ9IFtzaGFkZXI9J2NsYXkuc3RhbmRhcmRNUiddIERlZmF1bHQgdG8gYmUgc3RhbmRhcmQgc2hhZGVyIHdpdGggbWV0YWxuZXNzIGFuZCByb3VnaG5lc3Mgd29ya2Zsb3cuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RyYW5zcGFyZW50PWZhbHNlXSBJZiBtYXRlcmlhbCBpcyB0cmFuc3BhcmVudC5cclxuICogQHBhcmFtIHtib29sZWFufSBbdGV4dHVyZUNvbnZlcnRUb1BPVD1mYWxzZV0gRm9yY2UgY29udmVydCBOb25lIFBvd2VyIG9mIFR3byB0ZXh0dXJlIHRvIFBvd2VyIG9mIHR3byBzbyBpdCBjYW4gYmUgdGlsZWQuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RleHR1cmVGbGlwWT10cnVlXSBJZiBmbGlwIHkgb2YgdGV4dHVyZS5cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3RleHR1cmVMb2FkZWRdIENhbGxiYWNrIHdoZW4gc2luZ2xlIHRleHR1cmUgbG9hZGVkLlxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbdGV4dHVyZXNSZWFkeV0gQ2FsbGJhY2sgd2hlbiBhbGwgdGV4dHVyZSBsb2FkZWQuXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0ZXJpYWx9XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlTWF0ZXJpYWwgPSBmdW5jdGlvbiAobWF0Q29uZmlnKSB7XHJcbiAgICBtYXRDb25maWcgPSBtYXRDb25maWcgfHwge307XHJcbiAgICBtYXRDb25maWcuc2hhZGVyID0gbWF0Q29uZmlnLnNoYWRlciB8fCAnY2xheS5zdGFuZGFyZE1SJztcclxuICAgIHZhciBzaGFkZXIgPSBtYXRDb25maWcuc2hhZGVyIGluc3RhbmNlb2YgU2hhZGVyID8gbWF0Q29uZmlnLnNoYWRlciA6IHNoYWRlckxpYnJhcnkuZ2V0KG1hdENvbmZpZy5zaGFkZXIpO1xyXG4gICAgdmFyIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICBzaGFkZXI6IHNoYWRlclxyXG4gICAgfSk7XHJcbiAgICBpZiAobWF0Q29uZmlnLm5hbWUpIHtcclxuICAgICAgICBtYXRlcmlhbC5uYW1lID0gbWF0Q29uZmlnLm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHRleHR1cmVzTG9hZGluZyA9IFtdO1xyXG4gICAgZnVuY3Rpb24gbWFrZVRleHR1cmVTZXR0ZXIoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oa2V5LCB0ZXh0dXJlKTtcclxuICAgICAgICAgICAgbWF0Q29uZmlnLnRleHR1cmVMb2FkZWQgJiYgbWF0Q29uZmlnLnRleHR1cmVMb2FkZWQoa2V5LCB0ZXh0dXJlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGZvciAodmFyIGtleSBpbiBtYXRDb25maWcpIHtcclxuICAgICAgICBpZiAobWF0ZXJpYWwudW5pZm9ybXNba2V5XSkge1xyXG4gICAgICAgICAgICB2YXIgdmFsID0gbWF0Q29uZmlnW2tleV07XHJcbiAgICAgICAgICAgIGlmICgobWF0ZXJpYWwudW5pZm9ybXNba2V5XS50eXBlID09PSAndCcgfHwgaXNJbWFnZUxpa2VFbGVtZW50KHZhbCkpXHJcbiAgICAgICAgICAgICAgICAmJiAhKHZhbCBpbnN0YW5jZW9mIFRleHR1cmUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGxvYWQgYSB0ZXh0dXJlLlxyXG4gICAgICAgICAgICAgICAgdGV4dHVyZXNMb2FkaW5nLnB1c2godGhpcy5sb2FkVGV4dHVyZSh2YWwsIHtcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9QT1Q6IG1hdENvbmZpZy50ZXh0dXJlQ29udmVydFRvUE9UIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGZsaXBZOiBtYXRDb25maWcudGV4dHVyZUZsaXBZID09IG51bGwgPyB0cnVlIDogbWF0Q29uZmlnLnRleHR1cmVGbGlwWVxyXG4gICAgICAgICAgICAgICAgfSkudGhlbihtYWtlVGV4dHVyZVNldHRlcihrZXkpKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKGtleSwgdmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobWF0Q29uZmlnLnRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgbWF0Q29uZmlnLmRlcHRoTWFzayA9IGZhbHNlO1xyXG4gICAgICAgIG1hdENvbmZpZy50cmFuc3BhcmVudCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlmIChtYXRDb25maWcudGV4dHVyZXNSZWFkeSkge1xyXG4gICAgICAgIFByb21pc2UuYWxsKHRleHR1cmVzTG9hZGluZykudGhlbihmdW5jdGlvbiAodGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgbWF0Q29uZmlnLnRleHR1cmVzUmVhZHkodGV4dHVyZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtYXRlcmlhbDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBjdWJlIG1lc2ggYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUgb3IgdGhlIGdpdmVuIHBhcmVudCBub2RlLlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtPYmplY3R8Y2xheS5NYXRlcmlhbH0gW21hdGVyaWFsXVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRvIGFwcGVuZC4gRGVmYXVsdCB0byBiZSBzY2VuZS5cclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxudW1iZXJ9IFtzdWJkaXZpc2lvbj0xXSBTdWJkaXZpc2lvbiBvZiBjdWJlLlxyXG4gKiAgICAgICAgICBDYW4gYmUgYSBudW1iZXIgdG8gcmVwcmVzZW50IGJvdGggd2lkdGgsIGhlaWdodCBhbmQgZGVwdGggZGltZW5zaW9ucy4gT3IgYW4gYXJyYXkgdG8gcmVwcmVzZW50IHRoZW0gcmVzcGVjdGl2ZWx5LlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XHJcbiAqIEBleGFtcGxlXHJcbiAqICAvLyBDcmVhdGUgYSB3aGl0ZSBjdWJlLlxyXG4gKiAgYXBwLmNyZWF0ZUN1YmUoKVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZUN1YmUgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIHBhcmVudE5vZGUsIHN1YmRpdikge1xyXG4gICAgaWYgKHN1YmRpdiA9PSBudWxsKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gMTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygc3ViZGl2ID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHN1YmRpdiA9IFtzdWJkaXYsIHN1YmRpdiwgc3ViZGl2XTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZ2VvS2V5ID0gJ2N1YmUtJyArIHN1YmRpdi5qb2luKCctJyk7XHJcbiAgICB2YXIgY3ViZSA9IHRoaXMuX2dlb0NhY2hlLmdldChnZW9LZXkpO1xyXG4gICAgaWYgKCFjdWJlKSB7XHJcbiAgICAgICAgY3ViZSA9IG5ldyBDdWJlR2VvKHtcclxuICAgICAgICAgICAgd2lkdGhTZWdtZW50czogc3ViZGl2WzBdLFxyXG4gICAgICAgICAgICBoZWlnaHRTZWdtZW50czogc3ViZGl2WzFdLFxyXG4gICAgICAgICAgICBkZXB0aFNlZ21lbnRzOiBzdWJkaXZbMl1cclxuICAgICAgICB9KTtcclxuICAgICAgICBjdWJlLmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgICAgICB0aGlzLl9nZW9DYWNoZS5wdXQoZ2VvS2V5LCBjdWJlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZU1lc2goY3ViZSwgbWF0ZXJpYWwsIHBhcmVudE5vZGUpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGN1YmUgbWVzaCB0aGF0IGNhbWVyYSBpcyBpbnNpZGUgdGhlIGN1YmUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge09iamVjdHxjbGF5Lk1hdGVyaWFsfSBbbWF0ZXJpYWxdXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fG51bWJlcn0gW3N1YmRpdmlzaW9uPTFdIFN1YmRpdmlzaW9uIG9mIGN1YmUuXHJcbiAqICAgICAgICAgIENhbiBiZSBhIG51bWJlciB0byByZXByZXNlbnQgYm90aCB3aWR0aCwgaGVpZ2h0IGFuZCBkZXB0aCBkaW1lbnNpb25zLiBPciBhbiBhcnJheSB0byByZXByZXNlbnQgdGhlbSByZXNwZWN0aXZlbHkuXHJcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICogQGV4YW1wbGVcclxuICogIC8vIENyZWF0ZSBhIHdoaXRlIGN1YmUgaW5zaWRlLlxyXG4gKiAgYXBwLmNyZWF0ZUN1YmVJbnNpZGUoKVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZUN1YmVJbnNpZGUgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIHBhcmVudE5vZGUsIHN1YmRpdikge1xyXG4gICAgaWYgKHN1YmRpdiA9PSBudWxsKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gMTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygc3ViZGl2ID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHN1YmRpdiA9IFtzdWJkaXYsIHN1YmRpdiwgc3ViZGl2XTtcclxuICAgIH1cclxuICAgIHZhciBnZW9LZXkgPSAnY3ViZUluc2lkZS0nICsgc3ViZGl2LmpvaW4oJy0nKTtcclxuICAgIHZhciBjdWJlID0gdGhpcy5fZ2VvQ2FjaGUuZ2V0KGdlb0tleSk7XHJcbiAgICBpZiAoIWN1YmUpIHtcclxuICAgICAgICBjdWJlID0gbmV3IEN1YmVHZW8oe1xyXG4gICAgICAgICAgICBpbnNpZGU6IHRydWUsXHJcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IHN1YmRpdlswXSxcclxuICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IHN1YmRpdlsxXSxcclxuICAgICAgICAgICAgZGVwdGhTZWdtZW50czogc3ViZGl2WzJdXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY3ViZS5nZW5lcmF0ZVRhbmdlbnRzKCk7XHJcbiAgICAgICAgdGhpcy5fZ2VvQ2FjaGUucHV0KGdlb0tleSwgY3ViZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVzaChjdWJlLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgc3BoZXJlIG1lc2ggYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUgb3IgdGhlIGdpdmVuIHBhcmVudCBub2RlLlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtPYmplY3R8Y2xheS5NYXRlcmlhbH0gW21hdGVyaWFsXVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRvIGFwcGVuZC4gRGVmYXVsdCB0byBiZSBzY2VuZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdWJkaXZpc2lvbj0yMF0gU3ViZGl2aXNpb24gb2Ygc3BoZXJlLlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XHJcbiAqIEBleGFtcGxlXHJcbiAqICAvLyBDcmVhdGUgYSBzZW1pLXRyYW5zcGFyZW50IHNwaGVyZS5cclxuICogIGFwcC5jcmVhdGVTcGhlcmUoe1xyXG4gKiAgICAgIGNvbG9yOiBbMCwgMCwgMV0sXHJcbiAqICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAqICAgICAgYWxwaGE6IDAuNVxyXG4gKiAgfSlcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVTcGhlcmUgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIHBhcmVudE5vZGUsIHN1YmRpdmlzaW9uKSB7XHJcbiAgICBpZiAoc3ViZGl2aXNpb24gPT0gbnVsbCkge1xyXG4gICAgICAgIHN1YmRpdmlzaW9uID0gMjA7XHJcbiAgICB9XHJcbiAgICB2YXIgZ2VvS2V5ID0gJ3NwaGVyZS0nICsgc3ViZGl2aXNpb247XHJcbiAgICB2YXIgc3BoZXJlID0gdGhpcy5fZ2VvQ2FjaGUuZ2V0KGdlb0tleSk7XHJcbiAgICBpZiAoIXNwaGVyZSkge1xyXG4gICAgICAgIHNwaGVyZSA9IG5ldyBTcGhlcmVHZW8oe1xyXG4gICAgICAgICAgICB3aWR0aFNlZ21lbnRzOiBzdWJkaXZpc2lvbiAqIDIsXHJcbiAgICAgICAgICAgIGhlaWdodFNlZ21lbnRzOiBzdWJkaXZpc2lvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNwaGVyZS5nZW5lcmF0ZVRhbmdlbnRzKCk7XHJcbiAgICAgICAgdGhpcy5fZ2VvQ2FjaGUucHV0KGdlb0tleSwgc3BoZXJlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZU1lc2goc3BoZXJlLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XHJcbn07XHJcblxyXG4vLyBUT0RPIG1heSBiZSBtb2RpZmllZD9cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHBsYW5lIG1lc2ggYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUgb3IgdGhlIGdpdmVuIHBhcmVudCBub2RlLlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtPYmplY3R8Y2xheS5NYXRlcmlhbH0gW21hdGVyaWFsXVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRvIGFwcGVuZC4gRGVmYXVsdCB0byBiZSBzY2VuZS5cclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxudW1iZXJ9IFtzdWJkaXZpc2lvbj0xXSBTdWJkaXZpc2lvbiBvZiBwbGFuZS5cclxuICogICAgICAgICAgQ2FuIGJlIGEgbnVtYmVyIHRvIHJlcHJlc2VudCBib3RoIHdpZHRoIGFuZCBoZWlnaHQgZGltZW5zaW9ucy4gT3IgYW4gYXJyYXkgdG8gcmVwcmVzZW50IHRoZW0gcmVzcGVjdGl2ZWx5LlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XHJcbiAqIEBleGFtcGxlXHJcbiAqICAvLyBDcmVhdGUgYSByZWQgY29sb3IgcGxhbmUuXHJcbiAqICBhcHAuY3JlYXRlUGxhbmUoe1xyXG4gKiAgICAgIGNvbG9yOiBbMSwgMCwgMF1cclxuICogIH0pXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlUGxhbmUgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIHBhcmVudE5vZGUsIHN1YmRpdikge1xyXG4gICAgaWYgKHN1YmRpdiA9PSBudWxsKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gMTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygc3ViZGl2ID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHN1YmRpdiA9IFtzdWJkaXYsIHN1YmRpdl07XHJcbiAgICB9XHJcbiAgICB2YXIgZ2VvS2V5ID0gJ3BsYW5lLScgKyBzdWJkaXYuam9pbignLScpO1xyXG4gICAgdmFyIHBsYW5lR2VvID0gdGhpcy5fZ2VvQ2FjaGUuZ2V0KGdlb0tleSk7XHJcbiAgICBpZiAoIXBsYW5lR2VvKSB7XHJcbiAgICAgICAgcGxhbmVHZW8gPSBuZXcgUGxhbmVHZW8oe1xyXG4gICAgICAgICAgICB3aWR0aFNlZ21lbnRzOiBzdWJkaXZbMF0sXHJcbiAgICAgICAgICAgIGhlaWdodFNlZ21lbnRzOiBzdWJkaXZbMV1cclxuICAgICAgICB9KTtcclxuICAgICAgICBwbGFuZUdlby5nZW5lcmF0ZVRhbmdlbnRzKCk7XHJcbiAgICAgICAgdGhpcy5fZ2VvQ2FjaGUucHV0KGdlb0tleSwgcGxhbmVHZW8pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVzaChwbGFuZUdlbywgbWF0ZXJpYWwsIHBhcmVudE5vZGUpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBtZXNoIHdpdGggcGFyYW1ldHJpYyBzdXJmYWNlIGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7T2JqZWN0fGNsYXkuTWF0ZXJpYWx9IFttYXRlcmlhbF1cclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtwYXJlbnROb2RlXSBQYXJlbnQgbm9kZSB0byBhcHBlbmQuIERlZmF1bHQgdG8gYmUgc2NlbmUuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBnZW5lcmF0b3JcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2VuZXJhdG9yLnhcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2VuZXJhdG9yLnlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2VuZXJhdG9yLnpcclxuICogQHBhcmFtIHtBcnJheX0gW2dlbmVyYXRvci51PVswLCAxLCAwLjA1XV1cclxuICogQHBhcmFtIHtBcnJheX0gW2dlbmVyYXRvci52PVswLCAxLCAwLjA1XV1cclxuICogQHJldHVybiB7Y2xheS5NZXNofVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZVBhcmFtZXRyaWNTdXJmYWNlID0gZnVuY3Rpb24gKG1hdGVyaWFsLCBwYXJlbnROb2RlLCBnZW5lcmF0b3IpIHtcclxuICAgIHZhciBnZW8gPSBuZXcgUGFyYW1ldHJpY1N1cmZhY2VHZW8oe1xyXG4gICAgICAgIGdlbmVyYXRvcjogZ2VuZXJhdG9yXHJcbiAgICB9KTtcclxuICAgIGdlby5nZW5lcmF0ZVRhbmdlbnRzKCk7XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVNZXNoKGdlbywgbWF0ZXJpYWwsIHBhcmVudE5vZGUpO1xyXG59O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBnZW5lcmFsIG1lc2ggd2l0aCBnaXZlbiBnZW9tZXRyeSBpbnN0YW5jZSBhbmQgbWF0ZXJpYWwgY29uZmlnLlxyXG4gKiBAcGFyYW0ge2NsYXkuR2VvbWV0cnl9IGdlb21ldHJ5XHJcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVNZXNoID0gZnVuY3Rpb24gKGdlb21ldHJ5LCBtYXQsIHBhcmVudE5vZGUpIHtcclxuICAgIHZhciBtZXNoID0gbmV3IE1lc2goe1xyXG4gICAgICAgIGdlb21ldHJ5OiBnZW9tZXRyeSxcclxuICAgICAgICBtYXRlcmlhbDogbWF0IGluc3RhbmNlb2YgTWF0ZXJpYWwgPyBtYXQgOiB0aGlzLmNyZWF0ZU1hdGVyaWFsKG1hdClcclxuICAgIH0pO1xyXG4gICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgdGhpcy5zY2VuZTtcclxuICAgIHBhcmVudE5vZGUuYWRkKG1lc2gpO1xyXG4gICAgcmV0dXJuIG1lc2g7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFuIGVtcHR5IG5vZGVcclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IHBhcmVudE5vZGVcclxuICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZU5vZGUgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSkge1xyXG4gICAgdmFyIG5vZGUgPSBuZXcgTm9kZSgpO1xyXG4gICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgdGhpcy5zY2VuZTtcclxuICAgIHBhcmVudE5vZGUuYWRkKG5vZGUpO1xyXG4gICAgcmV0dXJuIG5vZGU7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgcGVyc3BlY3RpdmUgb3Igb3J0aG9ncmFwaGljIGNhbWVyYSBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZS5cclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5LlZlY3RvcjN9IHBvc2l0aW9uXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58Y2xheS5WZWN0b3IzfSB0YXJnZXRcclxuICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlPVwicGVyc3BlY3RpdmVcIl0gQ2FuIGJlICdwZXJzcGVjdGl2ZScgb3IgJ29ydGhvZ3JhcGhpYycoaW4gc2hvcnQgJ29ydGhvJylcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5LlZlY3RvcjN9IFtleHRlbnRdIEV4dGVudCBpcyBhdmFpbGFibGUgb25seSBpZiB0eXBlIGlzIG9ydGhvZ3JhcGhpYy5cclxuICogQHJldHVybiB7Y2xheS5jYW1lcmEuUGVyc3BlY3RpdmV8Y2xheS5jYW1lcmEuT3J0aG9ncmFwaGljfVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZUNhbWVyYSA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgdGFyZ2V0LCB0eXBlLCBleHRlbnQpIHtcclxuICAgIHZhciBDYW1lcmFDdG9yO1xyXG4gICAgdmFyIGlzT3J0aG8gPSBmYWxzZTtcclxuICAgIGlmICh0eXBlID09PSAnb3J0aG8nIHx8IHR5cGUgPT09ICdvcnRob2dyYXBoaWMnKSB7XHJcbiAgICAgICAgaXNPcnRobyA9IHRydWU7XHJcbiAgICAgICAgQ2FtZXJhQ3RvciA9IE9ydGhvZ3JhcGhpY0NhbWVyYTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0eXBlICYmIHR5cGUgIT09ICdwZXJzcGVjdGl2ZScpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVW5rb3duIGNhbWVyYSB0eXBlICcgKyB0eXBlICsgJy4gVXNlIGRlZmF1bHQgcGVyc3BlY3RpdmUgY2FtZXJhJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIENhbWVyYUN0b3IgPSBQZXJzcGVjdGl2ZUNhbWVyYTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY2FtZXJhID0gbmV3IENhbWVyYUN0b3IoKTtcclxuICAgIGlmIChwb3NpdGlvbiBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcclxuICAgICAgICBjYW1lcmEucG9zaXRpb24uY29weShwb3NpdGlvbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwb3NpdGlvbiBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgY2FtZXJhLnBvc2l0aW9uLnNldEFycmF5KHBvc2l0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMyh0YXJnZXRbMF0sIHRhcmdldFsxXSwgdGFyZ2V0WzJdKTtcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBWZWN0b3IzKSB7XHJcbiAgICAgICAgY2FtZXJhLmxvb2tBdCh0YXJnZXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChleHRlbnQgJiYgaXNPcnRobykge1xyXG4gICAgICAgIGV4dGVudCA9IGV4dGVudC5hcnJheSB8fCBleHRlbnQ7XHJcbiAgICAgICAgY2FtZXJhLmxlZnQgPSAtZXh0ZW50WzBdIC8gMjtcclxuICAgICAgICBjYW1lcmEucmlnaHQgPSBleHRlbnRbMF0gLyAyO1xyXG4gICAgICAgIGNhbWVyYS50b3AgPSBleHRlbnRbMV0gLyAyO1xyXG4gICAgICAgIGNhbWVyYS5ib3R0b20gPSAtZXh0ZW50WzFdIC8gMjtcclxuICAgICAgICBjYW1lcmEubmVhciA9IDA7XHJcbiAgICAgICAgY2FtZXJhLmZhciA9IGV4dGVudFsyXTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNhbWVyYS5hc3BlY3QgPSB0aGlzLnJlbmRlcmVyLmdldFZpZXdwb3J0QXNwZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zY2VuZS5hZGQoY2FtZXJhKTtcclxuXHJcbiAgICByZXR1cm4gY2FtZXJhO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGRpcmVjdGlvbmFsIGxpZ2h0IGFuZCBhZGQgaXQgdG8gdGhlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gZGlyIEEgVmVjdG9yMyBvciBhcnJheSB0byByZXByZXNlbnQgdGhlIGRpcmVjdGlvbi5cclxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2YgZGlyZWN0aW9uYWwgbGlnaHQsIGRlZmF1bHQgdG8gYmUgd2hpdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5XSBJbnRlbnNpdHkgb2YgZGlyZWN0aW9uYWwgbGlnaHQsIGRlZmF1bHQgdG8gYmUgMS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogIGFwcC5jcmVhdGVEaXJlY3Rpb25hbExpZ2h0KFstMSwgLTEsIC0xXSwgJyNmZmYnLCAyKTtcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVEaXJlY3Rpb25hbExpZ2h0ID0gZnVuY3Rpb24gKGRpciwgY29sb3IsIGludGVuc2l0eSkge1xyXG4gICAgdmFyIGxpZ2h0ID0gbmV3IERpcmVjdGlvbmFsTGlnaHQoKTtcclxuICAgIGlmIChkaXIgaW5zdGFuY2VvZiBWZWN0b3IzKSB7XHJcbiAgICAgICAgZGlyID0gZGlyLmFycmF5O1xyXG4gICAgfVxyXG4gICAgbGlnaHQucG9zaXRpb24uc2V0QXJyYXkoZGlyKS5uZWdhdGUoKTtcclxuICAgIGxpZ2h0Lmxvb2tBdChWZWN0b3IzLlpFUk8pO1xyXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb2xvciA9IHBhcnNlQ29sb3IoY29sb3IpO1xyXG4gICAgfVxyXG4gICAgY29sb3IgIT0gbnVsbCAmJiAobGlnaHQuY29sb3IgPSBjb2xvcik7XHJcbiAgICBpbnRlbnNpdHkgIT0gbnVsbCAmJiAobGlnaHQuaW50ZW5zaXR5ID0gaW50ZW5zaXR5KTtcclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChsaWdodCk7XHJcbiAgICByZXR1cm4gbGlnaHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgc3BvdCBsaWdodCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZS5cclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5LlZlY3RvcjN9IHBvc2l0aW9uIFBvc2l0aW9uIG9mIHRoZSBzcG90IGxpZ2h0LlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gW3RhcmdldF0gVGFyZ2V0IHBvc2l0aW9uIHdoZXJlIHNwb3QgbGlnaHQgcG9pbnRzIHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3JhbmdlPTIwXSBGYWxsb2ZmIHJhbmdlIG9mIHNwb3QgbGlnaHQuIERlZmF1bHQgdG8gYmUgMjAuXHJcbiAqIEBwYXJhbSB7Q29sb3J9IFtjb2xvcj0nI2ZmZiddIENvbG9yIG9mIHNwb3QgbGlnaHQsIGRlZmF1bHQgdG8gYmUgd2hpdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5PTFdIEludGVuc2l0eSBvZiBzcG90IGxpZ2h0LCBkZWZhdWx0IHRvIGJlIDEuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbdW1icmFBbmdsZT0zMF0gVW1icmEgYW5nbGUgb2Ygc3BvdCBsaWdodC4gRGVmYXVsdCB0byBiZSAzMCBkZWdyZWUgZnJvbSB0aGUgbWlkZGxlIGxpbmUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGVudW1icmFBbmdsZT00NV0gUGVudW1icmEgYW5nbGUgb2Ygc3BvdCBsaWdodC4gRGVmYXVsdCB0byBiZSA0NSBkZWdyZWUgZnJvbSB0aGUgbWlkZGxlIGxpbmUuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqICBhcHAuY3JlYXRlU3BvdExpZ2h0KFs1LCA1LCA1XSwgWzAsIDAsIDBdLCAyMCwgIzkwMCk7XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlU3BvdExpZ2h0ID0gZnVuY3Rpb24gKHBvc2l0aW9uLCB0YXJnZXQsIHJhbmdlLCBjb2xvciwgaW50ZW5zaXR5LCB1bWJyYUFuZ2xlLCBwZW51bWJyYUFuZ2xlKSB7XHJcbiAgICB2YXIgbGlnaHQgPSBuZXcgU3BvdExpZ2h0KCk7XHJcbiAgICBsaWdodC5wb3NpdGlvbi5zZXRBcnJheShwb3NpdGlvbiBpbnN0YW5jZW9mIFZlY3RvcjMgPyBwb3NpdGlvbi5hcnJheSA6IHBvc2l0aW9uKTtcclxuXHJcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMyh0YXJnZXRbMF0sIHRhcmdldFsxXSwgdGFyZ2V0WzJdKTtcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBWZWN0b3IzKSB7XHJcbiAgICAgICAgbGlnaHQubG9va0F0KHRhcmdldCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb2xvciA9IHBhcnNlQ29sb3IoY29sb3IpO1xyXG4gICAgfVxyXG4gICAgcmFuZ2UgIT0gbnVsbCAmJiAobGlnaHQucmFuZ2UgPSByYW5nZSk7XHJcbiAgICBjb2xvciAhPSBudWxsICYmIChsaWdodC5jb2xvciA9IGNvbG9yKTtcclxuICAgIGludGVuc2l0eSAhPSBudWxsICYmIChsaWdodC5pbnRlbnNpdHkgPSBpbnRlbnNpdHkpO1xyXG4gICAgdW1icmFBbmdsZSAhPSBudWxsICYmIChsaWdodC51bWJyYUFuZ2xlID0gdW1icmFBbmdsZSk7XHJcbiAgICBwZW51bWJyYUFuZ2xlICE9IG51bGwgJiYgKGxpZ2h0LnBlbnVtYnJhQW5nbGUgPSBwZW51bWJyYUFuZ2xlKTtcclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChsaWdodCk7XHJcblxyXG4gICAgcmV0dXJuIGxpZ2h0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHBvaW50IGxpZ2h0LlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gcG9zaXRpb24gUG9zaXRpb24gb2YgcG9pbnQgbGlnaHQuLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3JhbmdlPTEwMF0gRmFsbG9mZiByYW5nZSBvZiBwb2ludCBsaWdodC5cclxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2YgcG9pbnQgbGlnaHQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5PTFdIEludGVuc2l0eSBvZiBwb2ludCBsaWdodC5cclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVQb2ludExpZ2h0ID0gZnVuY3Rpb24gKHBvc2l0aW9uLCByYW5nZSwgY29sb3IsIGludGVuc2l0eSkge1xyXG4gICAgdmFyIGxpZ2h0ID0gbmV3IFBvaW50TGlnaHQoKTtcclxuICAgIGxpZ2h0LnBvc2l0aW9uLnNldEFycmF5KHBvc2l0aW9uIGluc3RhbmNlb2YgVmVjdG9yMyA/IHBvc2l0aW9uLmFycmF5IDogcG9zaXRpb24pO1xyXG5cclxuICAgIGlmICh0eXBlb2YgY29sb3IgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgY29sb3IgPSBwYXJzZUNvbG9yKGNvbG9yKTtcclxuICAgIH1cclxuICAgIHJhbmdlICE9IG51bGwgJiYgKGxpZ2h0LnJhbmdlID0gcmFuZ2UpO1xyXG4gICAgY29sb3IgIT0gbnVsbCAmJiAobGlnaHQuY29sb3IgPSBjb2xvcik7XHJcbiAgICBpbnRlbnNpdHkgIT0gbnVsbCAmJiAobGlnaHQuaW50ZW5zaXR5ID0gaW50ZW5zaXR5KTtcclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChsaWdodCk7XHJcblxyXG4gICAgcmV0dXJuIGxpZ2h0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGFtYmllbnQgbGlnaHQuXHJcbiAqIEBwYXJhbSB7Q29sb3J9IFtjb2xvcj0nI2ZmZiddIENvbG9yIG9mIGFtYmllbnQgbGlnaHQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5PTFdIEludGVuc2l0eSBvZiBhbWJpZW50IGxpZ2h0LlxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZUFtYmllbnRMaWdodCA9IGZ1bmN0aW9uIChjb2xvciwgaW50ZW5zaXR5KSB7XHJcbiAgICB2YXIgbGlnaHQgPSBuZXcgQW1iaWVudExpZ2h0KCk7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb2xvciA9IHBhcnNlQ29sb3IoY29sb3IpO1xyXG4gICAgfVxyXG4gICAgY29sb3IgIT0gbnVsbCAmJiAobGlnaHQuY29sb3IgPSBjb2xvcik7XHJcbiAgICBpbnRlbnNpdHkgIT0gbnVsbCAmJiAobGlnaHQuaW50ZW5zaXR5ID0gaW50ZW5zaXR5KTtcclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChsaWdodCk7XHJcblxyXG4gICAgcmV0dXJuIGxpZ2h0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhbiBjdWJlbWFwIGFtYmllbnQgbGlnaHQgYW5kIGFuIHNwaGVyaWNhbCBoYXJtb25pYyBhbWJpZW50IGxpZ2h0XHJcbiAqIGZvciBzcGVjdWxhciBhbmQgZGlmZnVzZSBsaWdodGluZyBpbiBQQlIgcmVuZGVyaW5nXHJcbiAqIEBwYXJhbSB7SW1hZ2VMaWtlfFRleHR1cmVDdWJlfSBbZW52SW1hZ2VdIFBhbm9yYW1hIGVudmlyb25tZW50IGltYWdlLCBIRFIgZm9ybWF0IGlzIGJldHRlci4gT3IgYSBwcmUgbG9hZGVkIHRleHR1cmUgY3ViZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3NwZWN1bGFySW50ZW5zdGl0eT0wLjddIEludGVuc2l0eSBvZiBzcGVjdWxhciBsaWdodC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtkaWZmdXNlSW50ZW5zdGl0eT0wLjddIEludGVuc2l0eSBvZiBkaWZmdXNlIGxpZ2h0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2V4cG9zdXJlPTFdIEV4cG9zdXJlIG9mIEhEUiBpbWFnZS4gT25seSBpZiBpbWFnZSBpbiBmaXJzdCBwYXJhbXRlciBpcyBIRFIuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlZmlsdGVyZWRDdWJlbWFwU2l6ZT0zMl0gVGhlIHNpemUgb2YgcHJlZmlsZXJ0ZWQgY3ViZW1hcC4gTGFyZ2VyIHZhbHVlIHdpbGwgdGFrZSBtb3JlIHRpbWUgdG8gZG8gZXhwZW5zaXZlIHByZWZpbHRlcmluZy5cclxuICogQHJldHVybiB7UHJvbWlzZX1cclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVBbWJpZW50Q3ViZW1hcExpZ2h0ID0gZnVuY3Rpb24gKGVudkltYWdlLCBzcGVjSW50ZW5zaXR5LCBkaWZmSW50ZW5zaXR5LCBleHBvc3VyZSwgcHJlZmlsdGVyZWRDdWJlbWFwU2l6ZSkge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgaWYgKGV4cG9zdXJlID09IG51bGwpIHtcclxuICAgICAgICBleHBvc3VyZSA9IDA7XHJcbiAgICB9XHJcbiAgICBpZiAocHJlZmlsdGVyZWRDdWJlbWFwU2l6ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgcHJlZmlsdGVyZWRDdWJlbWFwU2l6ZSA9IDMyO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7XHJcblxyXG4gICAgdmFyIGxvYWRQcm9taXNlO1xyXG4gICAgaWYgKGVudkltYWdlLnRleHR1cmVUeXBlID09PSAndGV4dHVyZUN1YmUnKSB7XHJcbiAgICAgICAgbG9hZFByb21pc2UgPSBlbnZJbWFnZS5pc1JlbmRlcmFibGUoKVxyXG4gICAgICAgICAgICA/IFByb21pc2UucmVzb2x2ZShlbnZJbWFnZSlcclxuICAgICAgICAgICAgOiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBlbnZJbWFnZS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGVudkltYWdlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGxvYWRQcm9taXNlID0gdGhpcy5sb2FkVGV4dHVyZShlbnZJbWFnZSwge1xyXG4gICAgICAgICAgICBleHBvc3VyZTogZXhwb3N1cmVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbG9hZFByb21pc2UudGhlbihmdW5jdGlvbiAoZW52VGV4dHVyZSkge1xyXG4gICAgICAgIHZhciBzcGVjTGlnaHQgPSBuZXcgQW1iaWVudEN1YmVtYXBMaWdodCh7XHJcbiAgICAgICAgICAgIGludGVuc2l0eTogc3BlY0ludGVuc2l0eSAhPSBudWxsID8gc3BlY0ludGVuc2l0eSA6IDAuN1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNwZWNMaWdodC5jdWJlbWFwID0gZW52VGV4dHVyZTtcclxuICAgICAgICBlbnZUZXh0dXJlLmZsaXBZID0gZmFsc2U7XHJcbiAgICAgICAgLy8gVE9ETyBDYWNoZSBwcmVmaWx0ZXIgP1xyXG4gICAgICAgIHNwZWNMaWdodC5wcmVmaWx0ZXIoc2VsZi5yZW5kZXJlciwgMzIpO1xyXG5cclxuICAgICAgICB2YXIgZGlmZkxpZ2h0ID0gbmV3IEFtYmllbnRTSExpZ2h0KHtcclxuICAgICAgICAgICAgaW50ZW5zaXR5OiBkaWZmSW50ZW5zaXR5ICE9IG51bGwgPyBkaWZmSW50ZW5zaXR5IDogMC43LFxyXG4gICAgICAgICAgICBjb2VmZmljaWVudHM6IHNoVXRpbC5wcm9qZWN0RW52aXJvbm1lbnRNYXAoXHJcbiAgICAgICAgICAgICAgICBzZWxmLnJlbmRlcmVyLCBzcGVjTGlnaHQuY3ViZW1hcCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZDogMVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2NlbmUuYWRkKHNwZWNMaWdodCk7XHJcbiAgICAgICAgc2NlbmUuYWRkKGRpZmZMaWdodCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNwZWN1bGFyOiBzcGVjTGlnaHQsXHJcbiAgICAgICAgICAgIGRpZmZ1c2U6IGRpZmZMaWdodCxcclxuICAgICAgICAgICAgLy8gT3JpZ2luYWwgZW52aXJvbm1lbnQgbWFwXHJcbiAgICAgICAgICAgIGVudmlyb25tZW50TWFwOiBlbnZUZXh0dXJlXHJcbiAgICAgICAgfTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIExvYWQgYSBbZ2xURl0oaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGKSBmb3JtYXQgbW9kZWwuXHJcbiAqIFlvdSBjYW4gY29udmVydCBGQlgvREFFL09CSiBmb3JtYXQgbW9kZWxzIHRvIFtnbFRGXShodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYpIHdpdGggW2ZieDJnbHRmXShodHRwczovL2dpdGh1Yi5jb20vcGlzc2FuZy9jbGF5Z2wjZmJ4LXRvLWdsdGYyMC1jb252ZXJ0ZXIpIHB5dGhvbiBzY3JpcHQsXHJcbiAqIG9yIHNpbXBseSB1c2luZyB0aGUgW0NsYXkgVmlld2VyXShodHRwczovL2dpdGh1Yi5jb20vcGlzc2FuZy9jbGF5LXZpZXdlcikgY2xpZW50IGFwcGxpY2F0aW9uLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXHJcbiAqIEBwYXJhbSB7c3RyaW5nfGNsYXkuU2hhZGVyfSBbb3B0cy5zaGFkZXI9J2NsYXkuc3RhbmRhcmQnXSAnYmFzaWMnfCdsYW1iZXJ0J3wnc3RhbmRhcmQnLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLndhaXRUZXh0dXJlTG9hZGVkPWZhbHNlXSBJZiBhZGQgdG8gc2NlbmUgdXRpbCB0ZXh0dXJlcyBhcmUgYWxsIGxvYWRlZC5cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5hdXRvUGxheUFuaW1hdGlvbj10cnVlXSBJZiBhdXRvcGxheSB0aGUgYW5pbWF0aW9uIG9mIG1vZGVsLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnVwQXhpcz0neSddIENoYW5nZSBtb2RlbCB0byB5IHVwIGlmIHVwQXhpcyBpcyAneidcclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy50ZXh0dXJlRmxpcFk9ZmFsc2VdXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMudGV4dHVyZUNvbnZlcnRUb1BPVD1mYWxzZV0gSWYgY29udmVydCB0ZXh0dXJlIHRvIHBvd2VyLW9mLXR3b1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMudGV4dHVyZVJvb3RQYXRoXSBSb290IHBhdGggb2YgdGV4dHVyZS4gRGVmYXVsdCB0byBiZSByZWxhdGl2ZSB3aXRoIGdsVEYgZmlsZS5cclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtwYXJlbnROb2RlXSBQYXJlbnQgbm9kZSB0aGF0IG1vZGVsIHdpbGwgYmUgbW91bnRlZC4gRGVmYXVsdCB0byBiZSBzY2VuZVxyXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmxvYWRNb2RlbCA9IGZ1bmN0aW9uICh1cmwsIG9wdHMsIHBhcmVudE5vZGUpIHtcclxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBVUkwuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0cyA9IG9wdHMgfHwge307XHJcbiAgICBpZiAob3B0cy5hdXRvUGxheUFuaW1hdGlvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgb3B0cy5hdXRvUGxheUFuaW1hdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB2YXIgc2hhZGVyID0gb3B0cy5zaGFkZXIgfHwgJ2NsYXkuc3RhbmRhcmQnO1xyXG5cclxuICAgIHZhciBsb2FkZXJPcHRzID0ge1xyXG4gICAgICAgIHJvb3ROb2RlOiBuZXcgTm9kZSgpLFxyXG4gICAgICAgIHNoYWRlcjogc2hhZGVyLFxyXG4gICAgICAgIHRleHR1cmVSb290UGF0aDogb3B0cy50ZXh0dXJlUm9vdFBhdGgsXHJcbiAgICAgICAgY3Jvc3NPcmlnaW46ICdBbm9ueW1vdXMnLFxyXG4gICAgICAgIHRleHR1cmVGbGlwWTogb3B0cy50ZXh0dXJlRmxpcFksXHJcbiAgICAgICAgdGV4dHVyZUNvbnZlcnRUb1BPVDogb3B0cy50ZXh0dXJlQ29udmVydFRvUE9UXHJcbiAgICB9O1xyXG4gICAgaWYgKG9wdHMudXBBeGlzICYmIG9wdHMudXBBeGlzLnRvTG93ZXJDYXNlKCkgPT09ICd6Jykge1xyXG4gICAgICAgIGxvYWRlck9wdHMucm9vdE5vZGUucm90YXRpb24uaWRlbnRpdHkoKS5yb3RhdGVYKC1NYXRoLlBJIC8gMik7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGxvYWRlciA9IG5ldyBHTFRGTG9hZGVyKGxvYWRlck9wdHMpO1xyXG5cclxuICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlIHx8IHRoaXMuc2NlbmU7XHJcbiAgICB2YXIgdGltZWxpbmUgPSB0aGlzLnRpbWVsaW5lO1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gYWZ0ZXJMb2FkKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcGFyZW50Tm9kZS5hZGQocmVzdWx0LnJvb3ROb2RlKTtcclxuICAgICAgICAgICAgaWYgKG9wdHMuYXV0b1BsYXlBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5jbGlwcy5mb3JFYWNoKGZ1bmN0aW9uIChjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGltZWxpbmUuYWRkQ2xpcChjbGlwKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbG9hZGVyLnN1Y2Nlc3MoZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFvcHRzLndhaXRUZXh0dXJlTG9hZGVkKSB7XHJcbiAgICAgICAgICAgICAgICBhZnRlckxvYWQocmVzdWx0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKHJlc3VsdC50ZXh0dXJlcy5tYXAoZnVuY3Rpb24gKHRleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5zdWNjZXNzKHJlc29sdmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLmVycm9yKHJlc29sdmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSkpLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyTG9hZChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyTG9hZChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBsb2FkZXIuZXJyb3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBsb2FkZXIubG9hZCh1cmwpO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG5cclxuLy8gVE9ETyBjbG9uZU1vZGVsXHJcblxyXG4vKipcclxuICogU2ltaWxhciB0byBgYXBwLnNjZW5lLmNsb25lTm9kZWAsIGV4Y2VwdCBpdCB3aWxsIG1vdW50IHRoZSBjbG9uZWQgbm9kZSB0byB0aGUgc2NlbmUgYXV0b21hdGljYWxseS5cclxuICogU2VlIG1vcmUgaW4ge0BsaW5rIGNsYXkuU2NlbmUjY2xvbmVOb2RlfVxyXG4gKlxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRoYXQgbmV3IGNsb25lZCBub2RlIHdpbGwgYmUgbW91bnRlZC5cclxuICogICAgICAgICAgRGVmYXVsdCB0byBoYXZlIHNhbWUgcGFyZW50IHdpdGggc291cmNlIG5vZGUuXHJcbiAqIEByZXR1cm4ge2NsYXkuTm9kZX1cclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jbG9uZU5vZGUgPSBmdW5jdGlvbiAobm9kZSwgcGFyZW50Tm9kZSkge1xyXG4gICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgbm9kZS5nZXRQYXJlbnQoKTtcclxuXHJcbiAgICB2YXIgbmV3Tm9kZSA9IHRoaXMuc2NlbmUuY2xvbmVOb2RlKG5vZGUsIHBhcmVudE5vZGUpO1xyXG4gICAgaWYgKHBhcmVudE5vZGUpIHtcclxuICAgICAgICBwYXJlbnROb2RlLmFkZChuZXdOb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3Tm9kZTtcclxufTtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBBcHAzRDogQXBwM0QsXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIDNEIGFwcGxpY2F0aW9uIHRoYXQgd2lsbCBtYW5hZ2UgdGhlIGFwcCBpbml0aWFsaXphdGlvbiBhbmQgbG9vcC5cclxuICAgICAqXHJcbiAgICAgKiBTZWUgbW9yZSBkZXRhaWxzIGF0IHtAbGluayBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEfVxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uY3JlYXRlXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fHN0cmluZ30gZG9tIENvbnRhaW5lciBkb20gZWxlbWVudCBvciBhIHNlbGVjdG9yIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGluIGBxdWVyeVNlbGVjdG9yYFxyXG4gICAgICogQHBhcmFtIHtBcHAzRE5hbWVzcGFjZX0gYXBwTlMgT3B0aW9ucyBhbmQgbmFtZXNwYWNlIHVzZWQgaW4gY3JlYXRpbmcgYXBwM0RcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFwcGxpY2F0aW9uLkFwcDNEfVxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiAgY2xheS5hcHBsaWNhdGlvbi5jcmVhdGUoJyNhcHAnLCB7XHJcbiAgICAgKiAgICAgIGluaXQ6IGZ1bmN0aW9uIChhcHApIHtcclxuICAgICAqICAgICAgICAgIGFwcC5jcmVhdGVDdWJlKCk7XHJcbiAgICAgKiAgICAgICAgICB2YXIgY2FtZXJhID0gYXBwLmNyZWF0ZUNhbWVyYSgpO1xyXG4gICAgICogICAgICAgICAgY2FtZXJhLnBvc2l0aW9uLnNldCgwLCAwLCAyKTtcclxuICAgICAqICAgICAgfSxcclxuICAgICAqICAgICAgbG9vcDogZnVuY3Rpb24gKCkgeyAvLyBub29wIH1cclxuICAgICAqICB9KVxyXG4gICAgICovXHJcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChkb20sIGFwcE5TKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBBcHAzRChkb20sIGFwcE5TKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQgbm90aWZpZXIgZnJvbSAnLi4vY29yZS9taXhpbi9ub3RpZmllcic7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgdXRpbCAgZnJvbSAnLi4vY29yZS91dGlsJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuYXN5bmMuVGFza1xyXG4gKiBAbWl4ZXMgY2xheS5jb3JlLm1peGluLm5vdGlmaWVyXHJcbiAqL1xyXG5mdW5jdGlvbiBUYXNrKCkge1xyXG4gICAgdGhpcy5fZnVsbGZpbGxlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcmVqZWN0ZWQgPSBmYWxzZTtcclxufTtcclxuLyoqXHJcbiAqIFRhc2sgc3VjY2Vzc2VkXHJcbiAqIEBwYXJhbSB7fSBkYXRhXHJcbiAqL1xyXG5UYXNrLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgdGhpcy5fZnVsbGZpbGxlZCA9IHRydWU7XHJcbiAgICB0aGlzLl9yZWplY3RlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy50cmlnZ2VyKCdzdWNjZXNzJywgZGF0YSk7XHJcbn07XHJcbi8qKlxyXG4gKiBUYXNrIGZhaWxlZFxyXG4gKiBAcGFyYW0ge30gZXJyXHJcbiAqL1xyXG5UYXNrLnByb3RvdHlwZS5yZWplY3QgPSBmdW5jdGlvbihlcnIpIHtcclxuICAgIHRoaXMuX3JlamVjdGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuX2Z1bGxmaWxsZWQgPSBmYWxzZTtcclxuICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCBlcnIpO1xyXG59O1xyXG4vKipcclxuICogSWYgdGFzayBzdWNjZXNzZWRcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICovXHJcblRhc2sucHJvdG90eXBlLmlzRnVsbGZpbGxlZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Z1bGxmaWxsZWQ7XHJcbn07XHJcbi8qKlxyXG4gKiBJZiB0YXNrIGZhaWxlZFxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKi9cclxuVGFzay5wcm90b3R5cGUuaXNSZWplY3RlZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlamVjdGVkO1xyXG59O1xyXG4vKipcclxuICogSWYgdGFzayBmaW5pc2hlZCwgZWl0aGVyIHN1Y2Nlc3NlZCBvciBmYWlsZWRcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICovXHJcblRhc2sucHJvdG90eXBlLmlzU2V0dGxlZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Z1bGxmaWxsZWQgfHwgdGhpcy5fcmVqZWN0ZWQ7XHJcbn07XHJcblxyXG51dGlsLmV4dGVuZChUYXNrLnByb3RvdHlwZSwgbm90aWZpZXIpO1xyXG5cclxuZnVuY3Rpb24gbWFrZVJlcXVlc3RUYXNrKHVybCwgcmVzcG9uc2VUeXBlKSB7XHJcbiAgICB2YXIgdGFzayA9IG5ldyBUYXNrKCk7XHJcbiAgICB2ZW5kb3IucmVxdWVzdC5nZXQoe1xyXG4gICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgIHJlc3BvbnNlVHlwZTogcmVzcG9uc2VUeXBlLFxyXG4gICAgICAgIG9ubG9hZDogZnVuY3Rpb24ocmVzKSB7XHJcbiAgICAgICAgICAgIHRhc2sucmVzb2x2ZShyZXMpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25lcnJvcjogZnVuY3Rpb24oZXJyb3IpIHtcclxuICAgICAgICAgICAgdGFzay5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRhc2s7XHJcbn1cclxuLyoqXHJcbiAqIE1ha2UgYSB2ZW5kb3IucmVxdWVzdCB0YXNrXHJcbiAqIEBwYXJhbSAge3N0cmluZ3xvYmplY3R8b2JqZWN0W118c3RyaW5nW119IHVybFxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IFtyZXNwb25zZVR5cGVdXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICB2YXIgdGFzayA9IFRhc2subWFrZVJlcXVlc3RUYXNrKCcuL2EuanNvbicpO1xyXG4gKiAgICAgdmFyIHRhc2sgPSBUYXNrLm1ha2VSZXF1ZXN0VGFzayh7XHJcbiAqICAgICAgICAgdXJsOiAnYi5iaW4nLFxyXG4gKiAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgdGFza3MgPSBUYXNrLm1ha2VSZXF1ZXN0VGFzayhbJy4vYS5qc29uJywgJy4vYi5qc29uJ10pO1xyXG4gKiAgICAgdmFyIHRhc2tzID0gVGFzay5tYWtlUmVxdWVzdFRhc2soW1xyXG4gKiAgICAgICAgIHt1cmw6ICdhLmpzb24nfSxcclxuICogICAgICAgICB7dXJsOiAnYi5iaW4nLCByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcid9XHJcbiAqICAgICBdKTtcclxuICogQHJldHVybiB7Y2xheS5hc3luYy5UYXNrfGNsYXkuYXN5bmMuVGFza1tdfVxyXG4gKi9cclxuVGFzay5tYWtlUmVxdWVzdFRhc2sgPSBmdW5jdGlvbih1cmwsIHJlc3BvbnNlVHlwZSkge1xyXG4gICAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIG1ha2VSZXF1ZXN0VGFzayh1cmwsIHJlc3BvbnNlVHlwZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh1cmwudXJsKSB7ICAgLy8gIENvbmZpZ3VyZSBvYmplY3RcclxuICAgICAgICB2YXIgb2JqID0gdXJsO1xyXG4gICAgICAgIHJldHVybiBtYWtlUmVxdWVzdFRhc2sob2JqLnVybCwgb2JqLnJlc3BvbnNlVHlwZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHVybCkpIHsgIC8vIFVybCBsaXN0XHJcbiAgICAgICAgdmFyIHVybExpc3QgPSB1cmw7XHJcbiAgICAgICAgdmFyIHRhc2tzID0gW107XHJcbiAgICAgICAgdXJsTGlzdC5mb3JFYWNoKGZ1bmN0aW9uKG9iaikge1xyXG4gICAgICAgICAgICB2YXIgdXJsLCByZXNwb25zZVR5cGU7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gb2JqO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKE9iamVjdChvYmopID09PSBvYmopIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IG9iai51cmw7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGUgPSBvYmoucmVzcG9uc2VUeXBlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRhc2tzLnB1c2gobWFrZVJlcXVlc3RUYXNrKHVybCwgcmVzcG9uc2VUeXBlKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRhc2tzO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogQHJldHVybiB7Y2xheS5hc3luYy5UYXNrfVxyXG4gKi9cclxuVGFzay5tYWtlVGFzayA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIG5ldyBUYXNrKCk7XHJcbn07XHJcblxyXG51dGlsLmV4dGVuZChUYXNrLnByb3RvdHlwZSwgbm90aWZpZXIpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGFzaztcclxuIiwiaW1wb3J0IHV0aWwgZnJvbSAnLi4vY29yZS91dGlsJztcclxuaW1wb3J0IFRhc2sgZnJvbSAnLi9UYXNrJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuYXN5bmMuVGFza0dyb3VwXHJcbiAqIEBleHRlbmRzIGNsYXkuYXN5bmMuVGFza1xyXG4gKi9cclxudmFyIFRhc2tHcm91cCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICBUYXNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcblxyXG4gICAgdGhpcy5fdGFza3MgPSBbXTtcclxuXHJcbiAgICB0aGlzLl9mdWxmaWxsZWROdW1iZXIgPSAwO1xyXG5cclxuICAgIHRoaXMuX3JlamVjdGVkTnVtYmVyID0gMDtcclxufTtcclxuXHJcbnZhciBDdG9yID0gZnVuY3Rpb24gKCl7fTtcclxuQ3Rvci5wcm90b3R5cGUgPSBUYXNrLnByb3RvdHlwZTtcclxuVGFza0dyb3VwLnByb3RvdHlwZSA9IG5ldyBDdG9yKCk7XHJcblxyXG5UYXNrR3JvdXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGFza0dyb3VwO1xyXG5cclxuLyoqXHJcbiAqIFdhaXQgZm9yIGFsbCBnaXZlbiB0YXNrcyBzdWNjZXNzZWQsIHRhc2sgY2FuIGFsc28gYmUgYW55IG5vdGlmaWVyIG9iamVjdCB3aGljaCB3aWxsIHRyaWdnZXIgc3VjY2VzcyBhbmQgZXJyb3IgZXZlbnRzLiBMaWtlIHtAbGluayBjbGF5LlRleHR1cmUyRH0sIHtAbGluayBjbGF5LlRleHR1cmVDdWJlfSwge0BsaW5rIGNsYXkubG9hZGVyLkdMVEZ9LlxyXG4gKiBAcGFyYW0gIHtBcnJheS48Y2xheS5hc3luYy5UYXNrPn0gdGFza3NcclxuICogQGNoYWluYWJsZVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgLy8gTG9hZCB0ZXh0dXJlIGxpc3RcclxuICogICAgIHZhciBsaXN0ID0gWydhLmpwZycsICdiLmpwZycsICdjLmpwZyddXHJcbiAqICAgICB2YXIgdGV4dHVyZXMgPSBsaXN0Lm1hcChmdW5jdGlvbiAoc3JjKSB7XHJcbiAqICAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgY2xheS5UZXh0dXJlMkQoKTtcclxuICogICAgICAgICB0ZXh0dXJlLmxvYWQoc3JjKTtcclxuICogICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICogICAgIH0pO1xyXG4gKiAgICAgdmFyIHRhc2tHcm91cCA9IG5ldyBjbGF5LmFzeW5jLlRhc2tHcm91cCgpO1xyXG4gKiAgICAgdGFza0dyb3VwLmFsbCh0ZXh0dXJlcykuc3VjY2VzcyhmdW5jdGlvbiAoKSB7XHJcbiAqICAgICAgICAgLy8gRG8gc29tZSB0aGluZyBhZnRlciBhbGwgdGV4dHVyZXMgbG9hZGVkXHJcbiAqICAgICB9KTtcclxuICovXHJcblRhc2tHcm91cC5wcm90b3R5cGUuYWxsID0gZnVuY3Rpb24gKHRhc2tzKSB7XHJcbiAgICB2YXIgY291bnQgPSAwO1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgdmFyIGRhdGEgPSBbXTtcclxuICAgIHRoaXMuX3Rhc2tzID0gdGFza3M7XHJcbiAgICB0aGlzLl9mdWxmaWxsZWROdW1iZXIgPSAwO1xyXG4gICAgdGhpcy5fcmVqZWN0ZWROdW1iZXIgPSAwO1xyXG5cclxuICAgIHV0aWwuZWFjaCh0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGlkeCkge1xyXG4gICAgICAgIGlmICghdGFzayB8fCAhdGFzay5vbmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY291bnQrKztcclxuICAgICAgICB0YXNrLm9uY2UoJ3N1Y2Nlc3MnLCBmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgIGNvdW50LS07XHJcblxyXG4gICAgICAgICAgICBzZWxmLl9mdWxmaWxsZWROdW1iZXIrKztcclxuICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICAvLyBTb21lIHRhc2tzIGxpa2UgdGV4dHVyZSwgbG9hZGVyIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gdGFza1xyXG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgc3RhdGVzIGhlcmVcclxuICAgICAgICAgICAgdGFzay5fZnVsZmlsbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGRhdGFbaWR4XSA9IHJlcztcclxuICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0YXNrLm9uY2UoJ2Vycm9yJywgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5fcmVqZWN0ZWROdW1iZXIgKys7XHJcblxyXG4gICAgICAgICAgICB0YXNrLl9mdWxmaWxsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5yZWplY3QodGFzayk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIGlmIChjb3VudCA9PT0gMCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLnJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuLyoqXHJcbiAqIFdhaXQgZm9yIGFsbCBnaXZlbiB0YXNrcyBmaW5pc2hlZCwgZWl0aGVyIHN1Y2Nlc3NlZCBvciBmYWlsZWRcclxuICogQHBhcmFtICB7QXJyYXkuPGNsYXkuYXN5bmMuVGFzaz59IHRhc2tzXHJcbiAqIEByZXR1cm4ge2NsYXkuYXN5bmMuVGFza0dyb3VwfVxyXG4gKi9cclxuVGFza0dyb3VwLnByb3RvdHlwZS5hbGxTZXR0bGVkID0gZnVuY3Rpb24gKHRhc2tzKSB7XHJcbiAgICB2YXIgY291bnQgPSAwO1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgdmFyIGRhdGEgPSBbXTtcclxuICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdzdWNjZXNzJywgZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICB0aGlzLl90YXNrcyA9IHRhc2tzO1xyXG5cclxuICAgIHV0aWwuZWFjaCh0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGlkeCkge1xyXG4gICAgICAgIGlmICghdGFzayB8fCAhdGFzay5vbmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY291bnQrKztcclxuICAgICAgICB0YXNrLm9uY2UoJ3N1Y2Nlc3MnLCBmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgIGNvdW50LS07XHJcblxyXG4gICAgICAgICAgICBzZWxmLl9mdWxmaWxsZWROdW1iZXIrKztcclxuXHJcbiAgICAgICAgICAgIHRhc2suX2Z1bGZpbGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRhc2suX3JlamVjdGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBkYXRhW2lkeF0gPSByZXM7XHJcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGFzay5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgY291bnQtLTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuX3JlamVjdGVkTnVtYmVyKys7XHJcblxyXG4gICAgICAgICAgICB0YXNrLl9mdWxmaWxsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICBkYXRhW2lkeF0gPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoY291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuLyoqXHJcbiAqIEdldCBzdWNjZXNzZWQgc3ViIHRhc2tzIG51bWJlciwgcmVjdXJzaXZlIGNhbiBiZSB0cnVlIGlmIHN1YiB0YXNrIGlzIGFsc28gYSBUYXNrR3JvdXAuXHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFtyZWN1cnNpdmVdXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblRhc2tHcm91cC5wcm90b3R5cGUuZ2V0RnVsZmlsbGVkTnVtYmVyID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xyXG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xyXG4gICAgICAgIHZhciBuRnVsZmlsbGVkID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3Rhc2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB0YXNrID0gdGhpcy5fdGFza3NbaV07XHJcbiAgICAgICAgICAgIGlmICh0YXNrIGluc3RhbmNlb2YgVGFza0dyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBuRnVsZmlsbGVkICs9IHRhc2suZ2V0RnVsZmlsbGVkTnVtYmVyKHJlY3Vyc2l2ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZih0YXNrLl9mdWxmaWxsZWQpIHtcclxuICAgICAgICAgICAgICAgIG5GdWxmaWxsZWQgKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbkZ1bGZpbGxlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGZpbGxlZE51bWJlcjtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgZmFpbGVkIHN1YiB0YXNrcyBudW1iZXIsIHJlY3Vyc2l2ZSBjYW4gYmUgdHJ1ZSBpZiBzdWIgdGFzayBpcyBhbHNvIGEgVGFza0dyb3VwLlxyXG4gKiBAcGFyYW0gIHtib29sZWFufSBbcmVjdXJzaXZlXVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5UYXNrR3JvdXAucHJvdG90eXBlLmdldFJlamVjdGVkTnVtYmVyID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xyXG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xyXG4gICAgICAgIHZhciBuUmVqZWN0ZWQgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGFza3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRhc2sgaW5zdGFuY2VvZiBUYXNrR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIG5SZWplY3RlZCArPSB0YXNrLmdldFJlamVjdGVkTnVtYmVyKHJlY3Vyc2l2ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZih0YXNrLl9yZWplY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgblJlamVjdGVkICs9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5SZWplY3RlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlamVjdGVkTnVtYmVyO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBmaW5pc2hlZCBzdWIgdGFza3MgbnVtYmVyLCByZWN1cnNpdmUgY2FuIGJlIHRydWUgaWYgc3ViIHRhc2sgaXMgYWxzbyBhIFRhc2tHcm91cC5cclxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3JlY3Vyc2l2ZV1cclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVGFza0dyb3VwLnByb3RvdHlwZS5nZXRTZXR0bGVkTnVtYmVyID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xyXG5cclxuICAgIGlmIChyZWN1cnNpdmUpIHtcclxuICAgICAgICB2YXIgblNldHRsZWQgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGFza3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRhc2sgaW5zdGFuY2VvZiBUYXNrR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIG5TZXR0bGVkICs9IHRhc2suZ2V0U2V0dGxlZE51bWJlcihyZWN1cnNpdmUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYodGFzay5fcmVqZWN0ZWQgfHwgdGFzay5fZnVsZmlsbGVkKSB7XHJcbiAgICAgICAgICAgICAgICBuU2V0dGxlZCArPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuU2V0dGxlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGZpbGxlZE51bWJlciArIHRoaXMuX3JlamVjdGVkTnVtYmVyO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBhbGwgc3ViIHRhc2tzIG51bWJlciwgcmVjdXJzaXZlIGNhbiBiZSB0cnVlIGlmIHN1YiB0YXNrIGlzIGFsc28gYSBUYXNrR3JvdXAuXHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFtyZWN1cnNpdmVdXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblRhc2tHcm91cC5wcm90b3R5cGUuZ2V0VGFza051bWJlciA9IGZ1bmN0aW9uIChyZWN1cnNpdmUpIHtcclxuICAgIGlmIChyZWN1cnNpdmUpIHtcclxuICAgICAgICB2YXIgblRhc2sgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGFza3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRhc2sgaW5zdGFuY2VvZiBUYXNrR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIG5UYXNrICs9IHRhc2suZ2V0VGFza051bWJlcihyZWN1cnNpdmUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgblRhc2sgKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gblRhc2s7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90YXNrcy5sZW5ndGg7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUYXNrR3JvdXA7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcblxyXG4vLyBQRU5ESU5HXHJcbi8vIFVzZSB0b3BvbG9naWNhbCBzb3J0ID9cclxuXHJcbi8qKlxyXG4gKiBOb2RlIG9mIGdyYXBoIGJhc2VkIHBvc3QgcHJvY2Vzc2luZy5cclxuICpcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKlxyXG4gKi9cclxudmFyIENvbXBvc2l0b3JOb2RlID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBuYW1lOiAnJyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW5wdXQgbGlua3MsIHdpbGwgYmUgdXBkYXRlZCBieSB0aGUgZ3JhcGhcclxuICAgICAgICAgKiBAZXhhbXBsZTpcclxuICAgICAgICAgKiAgICAgaW5wdXROYW1lOiB7XHJcbiAgICAgICAgICogICAgICAgICBub2RlOiBzb21lTm9kZSxcclxuICAgICAgICAgKiAgICAgICAgIHBpbjogJ3h4eHgnXHJcbiAgICAgICAgICogICAgIH1cclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlucHV0TGlua3M6IHt9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBPdXRwdXQgbGlua3MsIHdpbGwgYmUgdXBkYXRlZCBieSB0aGUgZ3JhcGhcclxuICAgICAgICAgKiBAZXhhbXBsZTpcclxuICAgICAgICAgKiAgICAgb3V0cHV0TmFtZToge1xyXG4gICAgICAgICAqICAgICAgICAgbm9kZTogc29tZU5vZGUsXHJcbiAgICAgICAgICogICAgICAgICBwaW46ICd4eHh4J1xyXG4gICAgICAgICAqICAgICB9XHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvdXRwdXRMaW5rczoge30sXHJcblxyXG4gICAgICAgIC8vIFNhdmUgdGhlIG91dHB1dCB0ZXh0dXJlIG9mIHByZXZpb3VzIGZyYW1lXHJcbiAgICAgICAgLy8gV2lsbCBiZSB1c2VkIHdoZW4gdGhlcmUgZXhpc3QgYSBjaXJjdWxhciByZWZlcmVuY2VcclxuICAgICAgICBfcHJldk91dHB1dFRleHR1cmVzOiB7fSxcclxuICAgICAgICBfb3V0cHV0VGV4dHVyZXM6IHt9LFxyXG5cclxuICAgICAgICAvLyBFeGFtcGxlOiB7IG5hbWU6IDIgfVxyXG4gICAgICAgIF9vdXRwdXRSZWZlcmVuY2VzOiB7fSxcclxuXHJcbiAgICAgICAgX3JlbmRlcmluZzogZmFsc2UsXHJcbiAgICAgICAgLy8gSWYgcmVuZGVyZWQgaW4gdGhpcyBmcmFtZVxyXG4gICAgICAgIF9yZW5kZXJlZDogZmFsc2UsXHJcblxyXG4gICAgICAgIF9jb21wb3NpdG9yOiBudWxsXHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZS5wcm90b3R5cGUgKi9cclxue1xyXG5cclxuICAgIC8vIFRPRE8gUmVtb3ZlIHBhcmFtZXRlciBmdW5jdGlvbiBjYWxsYmFja1xyXG4gICAgdXBkYXRlUGFyYW1ldGVyOiBmdW5jdGlvbiAob3V0cHV0TmFtZSwgcmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tvdXRwdXROYW1lXTtcclxuICAgICAgICB2YXIgcGFyYW1ldGVycyA9IG91dHB1dEluZm8ucGFyYW1ldGVycztcclxuICAgICAgICB2YXIgcGFyYW1ldGVyc0NvcHkgPSBvdXRwdXRJbmZvLl9wYXJhbWV0ZXJzQ29weTtcclxuICAgICAgICBpZiAoIXBhcmFtZXRlcnNDb3B5KSB7XHJcbiAgICAgICAgICAgIHBhcmFtZXRlcnNDb3B5ID0gb3V0cHV0SW5mby5fcGFyYW1ldGVyc0NvcHkgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkgIT09ICd3aWR0aCcgJiYga2V5ICE9PSAnaGVpZ2h0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNDb3B5W2tleV0gPSBwYXJhbWV0ZXJzW2tleV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHdpZHRoLCBoZWlnaHQ7XHJcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMud2lkdGggaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHBhcmFtZXRlcnMud2lkdGguY2FsbCh0aGlzLCByZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHBhcmFtZXRlcnMud2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLmhlaWdodCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IHBhcmFtZXRlcnMuaGVpZ2h0LmNhbGwodGhpcywgcmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gcGFyYW1ldGVycy5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHkud2lkdGggIT09IHdpZHRoXHJcbiAgICAgICAgICAgIHx8IHBhcmFtZXRlcnNDb3B5LmhlaWdodCAhPT0gaGVpZ2h0XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0uZGlzcG9zZShyZW5kZXJlci5nbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcGFyYW1ldGVyc0NvcHkud2lkdGggPSB3aWR0aDtcclxuICAgICAgICBwYXJhbWV0ZXJzQ29weS5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJhbWV0ZXJzQ29weTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcGFyYW1ldGVyXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHBhcmFtIHt9IHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHNldFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7fSxcclxuICAgIC8qKlxyXG4gICAgICogR2V0IHBhcmFtZXRlciB2YWx1ZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHt9XHJcbiAgICAgKi9cclxuICAgIGdldFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUpIHt9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcGFyYW1ldGVyc1xyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9ialxyXG4gICAgICovXHJcbiAgICBzZXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBvYmopIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXIobmFtZSwgb2JqW25hbWVdKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgZ2V0T3V0cHV0OiBmdW5jdGlvbiAocmVuZGVyZXIgLypvcHRpb25hbCovLCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBSZXR1cm4gdGhlIG91dHB1dCB0ZXh0dXJlIHdpdGhvdXQgcmVuZGVyaW5nXHJcbiAgICAgICAgICAgIG5hbWUgPSByZW5kZXJlcjtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tuYW1lXTtcclxuICAgICAgICBpZiAoIW91dHB1dEluZm8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFscmVhZHkgYmVlbiByZW5kZXJlZCBpbiB0aGlzIGZyYW1lXHJcbiAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmVkKSB7XHJcbiAgICAgICAgICAgIC8vIEZvcmNlIHJldHVybiB0ZXh0dXJlIGluIGxhc3QgZnJhbWVcclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ub3V0cHV0TGFzdEZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmluZyAgIC8vIFNvbHZlIENpcmN1bGFyIFJlZmVyZW5jZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tuYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgYmxhbmsgdGV4dHVyZSBhdCBmaXJzdCBwYXNzXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV0gPSB0aGlzLl9jb21wb3NpdG9yLmFsbG9jYXRlVGV4dHVyZShvdXRwdXRJbmZvLnBhcmFtZXRlcnMgfHwge30pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlbmRlcihyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRUZXh0dXJlc1tuYW1lXTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVtb3ZlUmVmZXJlbmNlOiBmdW5jdGlvbiAob3V0cHV0TmFtZSkge1xyXG4gICAgICAgIHRoaXMuX291dHB1dFJlZmVyZW5jZXNbb3V0cHV0TmFtZV0tLTtcclxuICAgICAgICBpZiAodGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXSA9PT0gMCkge1xyXG4gICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tvdXRwdXROYW1lXTtcclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ua2VlcExhc3RGcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSA9IHRoaXMuX291dHB1dFRleHR1cmVzW291dHB1dE5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gT3V0cHV0IG9mIHRoaXMgbm9kZSBoYXZlIGFscmVheSBiZWVuIHVzZWQgYnkgYWxsIG90aGVyIG5vZGVzXHJcbiAgICAgICAgICAgICAgICAvLyBQdXQgdGhlIHRleHR1cmUgYmFjayB0byB0aGUgcG9vbC5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBsaW5rOiBmdW5jdGlvbiAoaW5wdXRQaW5OYW1lLCBmcm9tTm9kZSwgZnJvbVBpbk5hbWUpIHtcclxuXHJcbiAgICAgICAgLy8gVGhlIHJlbGF0aW9uc2hpcCBmcm9tIG91dHB1dCBwaW4gdG8gaW5wdXQgcGluIGlzIG9uZS1vbi1tdWx0aXBsZVxyXG4gICAgICAgIHRoaXMuaW5wdXRMaW5rc1tpbnB1dFBpbk5hbWVdID0ge1xyXG4gICAgICAgICAgICBub2RlOiBmcm9tTm9kZSxcclxuICAgICAgICAgICAgcGluOiBmcm9tUGluTmFtZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKCFmcm9tTm9kZS5vdXRwdXRMaW5rc1tmcm9tUGluTmFtZV0pIHtcclxuICAgICAgICAgICAgZnJvbU5vZGUub3V0cHV0TGlua3NbZnJvbVBpbk5hbWVdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZyb21Ob2RlLm91dHB1dExpbmtzW2Zyb21QaW5OYW1lXS5wdXNoKHtcclxuICAgICAgICAgICAgbm9kZTogdGhpcyxcclxuICAgICAgICAgICAgcGluOiBpbnB1dFBpbk5hbWVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gRW5hYmxlZCB0aGUgcGluIHRleHR1cmUgaW4gc2hhZGVyXHJcbiAgICAgICAgdGhpcy5wYXNzLm1hdGVyaWFsLmVuYWJsZVRleHR1cmUoaW5wdXRQaW5OYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmlucHV0TGlua3MgPSB7fTtcclxuICAgICAgICB0aGlzLm91dHB1dExpbmtzID0ge307XHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZVJlZmVyZW5jZTogZnVuY3Rpb24gKG91dHB1dE5hbWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3JlbmRlcmluZykge1xyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpbnB1dE5hbWUgaW4gdGhpcy5pbnB1dExpbmtzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGluayA9IHRoaXMuaW5wdXRMaW5rc1tpbnB1dE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgbGluay5ub2RlLnVwZGF0ZVJlZmVyZW5jZShsaW5rLnBpbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvdXRwdXROYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dFJlZmVyZW5jZXNbb3V0cHV0TmFtZV0gKys7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBiZWZvcmVGcmFtZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5vdXRwdXRMaW5rcykge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW25hbWVdID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFmdGVyRnJhbWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBQdXQgYmFjayBhbGwgdGhlIHRleHR1cmVzIHRvIHBvb2xcclxuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMub3V0cHV0TGlua3MpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX291dHB1dFJlZmVyZW5jZXNbbmFtZV0gPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLmtlZXBMYXN0RnJhbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdID0gdGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21wb3NpdG9yLnJlbGVhc2VUZXh0dXJlKHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDb21wb3NpdG9yTm9kZTtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IEdyYXBoTm9kZSBmcm9tICcuL0NvbXBvc2l0b3JOb2RlJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLkdyYXBoXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgR3JhcGggPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuR3JhcGgjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPGNsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZT59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbm9kZXM6IFtdXHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5HcmFwaC5wcm90b3R5cGUgKi9cclxue1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFyayB0byB1cGRhdGVcclxuICAgICAqL1xyXG4gICAgZGlydHk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZX0gbm9kZVxyXG4gICAgICovXHJcbiAgICBhZGROb2RlOiBmdW5jdGlvbiAobm9kZSkge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ub2Rlcy5pbmRleE9mKG5vZGUpID49IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ub2Rlcy5wdXNoKG5vZGUpO1xyXG5cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvck5vZGV8c3RyaW5nfSBub2RlXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZU5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBub2RlID0gdGhpcy5nZXROb2RlQnlOYW1lKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaWR4ID0gdGhpcy5ub2Rlcy5pbmRleE9mKG5vZGUpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm5vZGVzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZX1cclxuICAgICAqL1xyXG4gICAgZ2V0Tm9kZUJ5TmFtZTogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubm9kZXNbaV0ubmFtZSA9PT0gbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZXNbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgbGlua3Mgb2YgZ3JhcGhcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZXNbaV0uY2xlYXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVHJhdmVyc2UgYWxsIHRoZSBub2RlcyBhbmQgYnVpbGQgdGhlIGdyYXBoXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5ub2Rlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICghbm9kZS5pbnB1dHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIGlucHV0TmFtZSBpbiBub2RlLmlucHV0cykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFub2RlLmlucHV0c1tpbnB1dE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5wYXNzICYmICFub2RlLnBhc3MubWF0ZXJpYWwuaXNVbmlmb3JtRW5hYmxlZChpbnB1dE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaW4gJyAgKyBub2RlLm5hbWUgKyAnLicgKyBpbnB1dE5hbWUgKyAnIG5vdCB1c2VkLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIGZyb21QaW5JbmZvID0gbm9kZS5pbnB1dHNbaW5wdXROYW1lXTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgZnJvbVBpbiA9IHRoaXMuZmluZFBpbihmcm9tUGluSW5mbyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJvbVBpbikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUubGluayhpbnB1dE5hbWUsIGZyb21QaW4ubm9kZSwgZnJvbVBpbi5waW4pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmcm9tUGluSW5mbyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdOb2RlICcgKyBmcm9tUGluSW5mbyArICcgbm90IGV4aXN0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpbiBvZiAnICsgZnJvbVBpbkluZm8ubm9kZSArICcuJyArIGZyb21QaW5JbmZvLnBpbiArICcgbm90IGV4aXN0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBmaW5kUGluOiBmdW5jdGlvbiAoaW5wdXQpIHtcclxuICAgICAgICB2YXIgbm9kZTtcclxuICAgICAgICAvLyBUcnkgdG8gdGFrZSBpbnB1dCBhcyBhIGRpcmVjdGx5IGEgbm9kZVxyXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgR3JhcGhOb2RlKSB7XHJcbiAgICAgICAgICAgIGlucHV0ID0ge1xyXG4gICAgICAgICAgICAgICAgbm9kZTogaW5wdXRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQubm9kZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdG1wID0gdGhpcy5ub2Rlc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmICh0bXAubmFtZSA9PT0gaW5wdXQubm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSB0bXA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG5vZGUgPSBpbnB1dC5ub2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgICAgICB2YXIgaW5wdXRQaW4gPSBpbnB1dC5waW47XHJcbiAgICAgICAgICAgIGlmICghaW5wdXRQaW4pIHtcclxuICAgICAgICAgICAgICAgIC8vIFVzZSBmaXJzdCBwaW4gZGVmYXVsdGx5XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRQaW4gPSBPYmplY3Qua2V5cyhub2RlLm91dHB1dHMpWzBdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChub2RlLm91dHB1dHNbaW5wdXRQaW5dKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGluOiBpbnB1dFBpblxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHcmFwaDtcclxuIiwiaW1wb3J0IEdyYXBoIGZyb20gJy4vR3JhcGgnO1xyXG5pbXBvcnQgVGV4dHVyZVBvb2wgZnJvbSAnLi9UZXh0dXJlUG9vbCc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcblxyXG4vKipcclxuICogQ29tcG9zaXRvciBwcm92aWRlIGdyYXBoIGJhc2VkIHBvc3QgcHJvY2Vzc2luZ1xyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JcclxuICogQGV4dGVuZHMgY2xheS5jb21wb3NpdG9yLkdyYXBoXHJcbiAqXHJcbiAqL1xyXG52YXIgQ29tcG9zaXRvciA9IEdyYXBoLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLy8gT3V0cHV0IG5vZGVcclxuICAgICAgICBfb3V0cHV0czogW10sXHJcblxyXG4gICAgICAgIF90ZXh0dXJlUG9vbDogbmV3IFRleHR1cmVQb29sKCksXHJcblxyXG4gICAgICAgIF9mcmFtZUJ1ZmZlcjogbmV3IEZyYW1lQnVmZmVyKHtcclxuICAgICAgICAgICAgZGVwdGhCdWZmZXI6IGZhbHNlXHJcbiAgICAgICAgfSlcclxuICAgIH07XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3IucHJvdG90eXBlICovXHJcbntcclxuICAgIGFkZE5vZGU6IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgICAgICBHcmFwaC5wcm90b3R5cGUuYWRkTm9kZS5jYWxsKHRoaXMsIG5vZGUpO1xyXG4gICAgICAgIG5vZGUuX2NvbXBvc2l0b3IgPSB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgcmVuZGVyOiBmdW5jdGlvbihyZW5kZXJlciwgZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5fZGlydHkpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHMubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubm9kZXNbaV0ub3V0cHV0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dHMucHVzaCh0aGlzLm5vZGVzW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVmZXJlbmNlIG51bWJlciBvZiBlYWNoIG91dHB1dCB0ZXh0dXJlXHJcbiAgICAgICAgICAgIHRoaXMubm9kZXNbaV0uYmVmb3JlRnJhbWUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3V0cHV0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRzW2ldLnVwZGF0ZVJlZmVyZW5jZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vdXRwdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHNbaV0ucmVuZGVyKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gQ2xlYXIgdXBcclxuICAgICAgICAgICAgdGhpcy5ub2Rlc1tpXS5hZnRlckZyYW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhbGxvY2F0ZVRleHR1cmU6IGZ1bmN0aW9uIChwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVQb29sLmdldChwYXJhbWV0ZXJzKTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVsZWFzZVRleHR1cmU6IGZ1bmN0aW9uIChwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVBvb2wucHV0KHBhcmFtZXRlcnMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRGcmFtZUJ1ZmZlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9mcmFtZUJ1ZmZlcjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGNvbXBvc2l0b3JcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVBvb2wuY2xlYXIocmVuZGVyZXIpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbXBvc2l0b3I7XHJcbiIsImltcG9ydCBDb21wb3NpdG9yTm9kZSBmcm9tICcuL0NvbXBvc2l0b3JOb2RlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5TY2VuZU5vZGVcclxuICogQGV4dGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlXHJcbiAqL1xyXG52YXIgU2NlbmVOb2RlID0gQ29tcG9zaXRvck5vZGUuZXh0ZW5kKFxyXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5TY2VuZU5vZGUjICovXHJcbntcclxuICAgIG5hbWU6ICdzY2VuZScsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlNjZW5lfVxyXG4gICAgICovXHJcbiAgICBzY2VuZTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuQ2FtZXJhfVxyXG4gICAgICovXHJcbiAgICBjYW1lcmE6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBhdXRvVXBkYXRlU2NlbmU6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBwcmVaOiBmYWxzZVxyXG5cclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKCk7XHJcbn0sIHtcclxuICAgIHJlbmRlcjogZnVuY3Rpb24ocmVuZGVyZXIpIHtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gdHJ1ZTtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYmVmb3JlcmVuZGVyJyk7XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJJbmZvO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMub3V0cHV0cykge1xyXG5cclxuICAgICAgICAgICAgcmVuZGVySW5mbyA9IHJlbmRlcmVyLnJlbmRlcih0aGlzLnNjZW5lLCB0aGlzLmNhbWVyYSwgIXRoaXMuYXV0b1VwZGF0ZVNjZW5lLCB0aGlzLnByZVopO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgZnJhbWVCdWZmZXIgPSB0aGlzLmZyYW1lQnVmZmVyO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMub3V0cHV0cykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSB0aGlzLnVwZGF0ZVBhcmFtZXRlcihuYW1lLCByZW5kZXJlcik7XHJcbiAgICAgICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fY29tcG9zaXRvci5hbGxvY2F0ZVRleHR1cmUocGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vdXRwdXRUZXh0dXJlc1tuYW1lXSA9IHRleHR1cmU7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGF0dGFjaG1lbnQgPSBvdXRwdXRJbmZvLmF0dGFjaG1lbnQgfHwgX2dsLkNPTE9SX0FUVEFDSE1FTlQwO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihhdHRhY2htZW50KSA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQgPSBfZ2xbYXR0YWNobWVudF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmcmFtZUJ1ZmZlci5hdHRhY2godGV4dHVyZSwgYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICAvLyBNUlQgU3VwcG9ydCBpbiBjaHJvbWVcclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc2RrL3Rlc3RzL2NvbmZvcm1hbmNlL2V4dGVuc2lvbnMvZXh0LWRyYXctYnVmZmVycy5odG1sXHJcbiAgICAgICAgICAgIHZhciBleHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX2RyYXdfYnVmZmVycycpO1xyXG4gICAgICAgICAgICBpZiAoZXh0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYnVmcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50ID0gcGFyc2VJbnQoYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gX2dsLkNPTE9SX0FUVEFDSE1FTlQwICYmIGF0dGFjaG1lbnQgPD0gX2dsLkNPTE9SX0FUVEFDSE1FTlQwICsgOCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWZzLnB1c2goYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZXh0LmRyYXdCdWZmZXJzRVhUKGJ1ZnMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBBbHdheXMgY2xlYXJcclxuICAgICAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgICAgICByZW5kZXJlci5zYXZlQ2xlYXIoKTtcclxuICAgICAgICAgICAgcmVuZGVyZXIuY2xlYXJCaXQgPSBnbGVudW0uREVQVEhfQlVGRkVSX0JJVCB8IGdsZW51bS5DT0xPUl9CVUZGRVJfQklUO1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvID0gcmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsIHRoaXMuY2FtZXJhLCAhdGhpcy5hdXRvVXBkYXRlU2NlbmUsIHRoaXMucHJlWik7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlc3RvcmVDbGVhcigpO1xyXG5cclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJyZW5kZXInLCByZW5kZXJJbmZvKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZWQgPSB0cnVlO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNjZW5lTm9kZTtcclxuIiwiaW1wb3J0IENvbXBvc2l0b3JOb2RlIGZyb20gJy4vQ29tcG9zaXRvck5vZGUnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNvbXBvc2l0b3IuVGV4dHVyZU5vZGVcclxuICogQGV4dGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlXHJcbiAqL1xyXG52YXIgVGV4dHVyZU5vZGUgPSBDb21wb3NpdG9yTm9kZS5leHRlbmQoZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuVGV4dHVyZU5vZGUjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGV4dHVyZTogbnVsbCxcclxuXHJcbiAgICAgICAgLy8gVGV4dHVyZSBub2RlIG11c3QgaGF2ZSBvdXRwdXQgd2l0aG91dCBwYXJhbWV0ZXJzXHJcbiAgICAgICAgb3V0cHV0czoge1xyXG4gICAgICAgICAgICBjb2xvcjoge31cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbn0sIHtcclxuXHJcbiAgICBnZXRPdXRwdXQ6IGZ1bmN0aW9uIChyZW5kZXJlciwgbmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIERvIG5vdGhpbmdcclxuICAgIGJlZm9yZUZyYW1lOiBmdW5jdGlvbiAoKSB7fSxcclxuICAgIGFmdGVyRnJhbWU6IGZ1bmN0aW9uICgpIHt9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZU5vZGU7XHJcbiIsIi8vIFRPRE8gU2hhZGVyIGxpYnJhcnlcclxuaW1wb3J0IFBhc3MgZnJvbSAnLi9QYXNzJztcclxuaW1wb3J0IENvbXBvc2l0b3JOb2RlIGZyb20gJy4vQ29tcG9zaXRvck5vZGUnO1xyXG5cclxuLy8gVE9ETyBjdXJsbm9pc2UgZGVtbyB3cm9uZ1xyXG5cclxuLy8gUEVORElOR1xyXG4vLyBVc2UgdG9wb2xvZ2ljYWwgc29ydCA/XHJcblxyXG4vKipcclxuICogRmlsdGVyIG5vZGVcclxuICpcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5GaWx0ZXJOb2RlXHJcbiAqIEBleHRlbmRzIGNsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICAgdmFyIG5vZGUgPSBuZXcgY2xheS5jb21wb3NpdG9yLkZpbHRlck5vZGUoe1xyXG4gICAgICAgIG5hbWU6ICdmeGFhJyxcclxuICAgICAgICBzaGFkZXI6IGNsYXkuU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLmZ4YWEnKSxcclxuICAgICAgICBpbnB1dHM6IHtcclxuICAgICAgICAgICAgdGV4dHVyZToge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6ICdzY2VuZScsXHJcbiAgICAgICAgICAgICAgICAgICAgcGluOiAnY29sb3InXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIE11bHRpcGxlIG91dHB1dHMgaXMgcHJlc2VydmVkIGZvciBNUlQgc3VwcG9ydCBpbiBXZWJHTDIuMFxyXG4gICAgICAgIG91dHB1dHM6IHtcclxuICAgICAgICAgICAgY29sb3I6IHtcclxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ6IGNsYXkuRnJhbWVCdWZmZXIuQ09MT1JfQVRUQUNITUVOVDBcclxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IGNsYXkuVGV4dHVyZS5SR0JBLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiA1MTIsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1MTJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAvLyBOb2RlIHdpbGwga2VlcCB0aGUgUlRUIHJlbmRlcmVkIGluIGxhc3QgZnJhbWVcclxuICAgICAgICAgICAgICAgIGtlZXBMYXN0RnJhbWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAvLyBGb3JjZSB0aGUgbm9kZSBvdXRwdXQgdGhlIFJUVCByZW5kZXJlZCBpbiBsYXN0IGZyYW1lXHJcbiAgICAgICAgICAgICAgICBvdXRwdXRMYXN0RnJhbWU6IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgKlxyXG4gICAgKi9cclxudmFyIEZpbHRlck5vZGUgPSBDb21wb3NpdG9yTm9kZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkZpbHRlck5vZGUjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG5hbWU6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlucHV0czoge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb3V0cHV0czogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBzaGFkZXI6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnB1dCBsaW5rcywgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBncmFwaFxyXG4gICAgICAgICAqIEBleGFtcGxlOlxyXG4gICAgICAgICAqICAgICBpbnB1dE5hbWU6IHtcclxuICAgICAgICAgKiAgICAgICAgIG5vZGU6IHNvbWVOb2RlLFxyXG4gICAgICAgICAqICAgICAgICAgcGluOiAneHh4eCdcclxuICAgICAgICAgKiAgICAgfVxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5wdXRMaW5rczoge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE91dHB1dCBsaW5rcywgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBncmFwaFxyXG4gICAgICAgICAqIEBleGFtcGxlOlxyXG4gICAgICAgICAqICAgICBvdXRwdXROYW1lOiB7XHJcbiAgICAgICAgICogICAgICAgICBub2RlOiBzb21lTm9kZSxcclxuICAgICAgICAgKiAgICAgICAgIHBpbjogJ3h4eHgnXHJcbiAgICAgICAgICogICAgIH1cclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG91dHB1dExpbmtzOiB7fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuY29tcG9zaXRvci5QYXNzfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHBhc3M6IG51bGwsXHJcblxyXG4gICAgICAgIC8vIFNhdmUgdGhlIG91dHB1dCB0ZXh0dXJlIG9mIHByZXZpb3VzIGZyYW1lXHJcbiAgICAgICAgLy8gV2lsbCBiZSB1c2VkIHdoZW4gdGhlcmUgZXhpc3QgYSBjaXJjdWxhciByZWZlcmVuY2VcclxuICAgICAgICBfcHJldk91dHB1dFRleHR1cmVzOiB7fSxcclxuICAgICAgICBfb3V0cHV0VGV4dHVyZXM6IHt9LFxyXG5cclxuICAgICAgICAvLyBFeGFtcGxlOiB7IG5hbWU6IDIgfVxyXG4gICAgICAgIF9vdXRwdXRSZWZlcmVuY2VzOiB7fSxcclxuXHJcbiAgICAgICAgX3JlbmRlcmluZzogZmFsc2UsXHJcbiAgICAgICAgLy8gSWYgcmVuZGVyZWQgaW4gdGhpcyBmcmFtZVxyXG4gICAgICAgIF9yZW5kZXJlZDogZmFsc2UsXHJcblxyXG4gICAgICAgIF9jb21wb3NpdG9yOiBudWxsXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIHBhc3MgPSBuZXcgUGFzcyh7XHJcbiAgICAgICAgZnJhZ21lbnQ6IHRoaXMuc2hhZGVyXHJcbiAgICB9KTtcclxuICAgIHRoaXMucGFzcyA9IHBhc3M7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkZpbHRlck5vZGUucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyZXIsIGZyYW1lQnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXInLCByZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX3JlbmRlcmluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaW5wdXROYW1lIGluIHRoaXMuaW5wdXRMaW5rcykge1xyXG4gICAgICAgICAgICB2YXIgbGluayA9IHRoaXMuaW5wdXRMaW5rc1tpbnB1dE5hbWVdO1xyXG4gICAgICAgICAgICB2YXIgaW5wdXRUZXh0dXJlID0gbGluay5ub2RlLmdldE91dHB1dChyZW5kZXJlciwgbGluay5waW4pO1xyXG4gICAgICAgICAgICB0aGlzLnBhc3Muc2V0VW5pZm9ybShpbnB1dE5hbWUsIGlucHV0VGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE91dHB1dFxyXG4gICAgICAgIGlmICghdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFzcy5vdXRwdXRzID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IuZ2V0RnJhbWVCdWZmZXIoKS51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wYXNzLnJlbmRlcihyZW5kZXJlciwgZnJhbWVCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wYXNzLm91dHB1dHMgPSB7fTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhdHRhY2hlZFRleHR1cmVzID0ge307XHJcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHRoaXMudXBkYXRlUGFyYW1ldGVyKG5hbWUsIHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc05hTihwYXJhbWV0ZXJzLndpZHRoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUGFyYW1ldGVyKG5hbWUsIHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9jb21wb3NpdG9yLmFsbG9jYXRlVGV4dHVyZShwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdID0gdGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRhY2htZW50ID0gb3V0cHV0SW5mby5hdHRhY2htZW50IHx8IF9nbC5DT0xPUl9BVFRBQ0hNRU5UMDtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YoYXR0YWNobWVudCkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9IF9nbFthdHRhY2htZW50XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0gPSB0ZXh0dXJlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IuZ2V0RnJhbWVCdWZmZXIoKS5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gYXR0YWNoZWRUZXh0dXJlcykge1xyXG4gICAgICAgICAgICAgICAgLy8gRklYTUUgYXR0YWNobWVudCBjaGFuZ2VzIGluIGRpZmZlcmVudCBub2Rlc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5nZXRGcmFtZUJ1ZmZlcigpLmF0dGFjaChcclxuICAgICAgICAgICAgICAgICAgICBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdLCBhdHRhY2htZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBhc3MucmVuZGVyKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEJlY2F1c2UgdGhlIGRhdGEgb2YgdGV4dHVyZSBpcyBjaGFuZ2VkIG92ZXIgdGltZSxcclxuICAgICAgICAgICAgLy8gSGVyZSB1cGRhdGUgdGhlIG1pcG1hcHMgb2YgdGV4dHVyZSBlYWNoIHRpbWUgYWZ0ZXIgcmVuZGVyZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IuZ2V0RnJhbWVCdWZmZXIoKS51cGRhdGVNaXBtYXAocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaW5wdXROYW1lIGluIHRoaXMuaW5wdXRMaW5rcykge1xyXG4gICAgICAgICAgICB2YXIgbGluayA9IHRoaXMuaW5wdXRMaW5rc1tpbnB1dE5hbWVdO1xyXG4gICAgICAgICAgICBsaW5rLm5vZGUucmVtb3ZlUmVmZXJlbmNlKGxpbmsucGluKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3JlbmRlcmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdhZnRlcnJlbmRlcicsIHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVE9ETyBSZW1vdmUgcGFyYW1ldGVyIGZ1bmN0aW9uIGNhbGxiYWNrXHJcbiAgICB1cGRhdGVQYXJhbWV0ZXI6IGZ1bmN0aW9uIChvdXRwdXROYW1lLCByZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW291dHB1dE5hbWVdO1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzID0gb3V0cHV0SW5mby5wYXJhbWV0ZXJzO1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzQ29weSA9IG91dHB1dEluZm8uX3BhcmFtZXRlcnNDb3B5O1xyXG4gICAgICAgIGlmICghcGFyYW1ldGVyc0NvcHkpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHkgPSBvdXRwdXRJbmZvLl9wYXJhbWV0ZXJzQ29weSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3dpZHRoJyAmJiBrZXkgIT09ICdoZWlnaHQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHlba2V5XSA9IHBhcmFtZXRlcnNba2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgd2lkdGgsIGhlaWdodDtcclxuICAgICAgICBpZiAodHlwZW9mIHBhcmFtZXRlcnMud2lkdGggPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2lkdGggPSBwYXJhbWV0ZXJzLndpZHRoLmNhbGwodGhpcywgcmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgd2lkdGggPSBwYXJhbWV0ZXJzLndpZHRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIHBhcmFtZXRlcnMuaGVpZ2h0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IHBhcmFtZXRlcnMuaGVpZ2h0LmNhbGwodGhpcywgcmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gcGFyYW1ldGVycy5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpZHRoID0gTWF0aC5jZWlsKHdpZHRoKTtcclxuICAgICAgICBoZWlnaHQgPSBNYXRoLmNlaWwoaGVpZ2h0KTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHBhcmFtZXRlcnNDb3B5LndpZHRoICE9PSB3aWR0aFxyXG4gICAgICAgICAgICB8fCBwYXJhbWV0ZXJzQ29weS5oZWlnaHQgIT09IGhlaWdodFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dFRleHR1cmVzW291dHB1dE5hbWVdLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhcmFtZXRlcnNDb3B5LndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgcGFyYW1ldGVyc0NvcHkuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyYW1ldGVyc0NvcHk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHBhcmFtZXRlclxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSB7fSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBzZXRQYXJhbWV0ZXI6IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMucGFzcy5zZXRVbmlmb3JtKG5hbWUsIHZhbHVlKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBwYXJhbWV0ZXIgdmFsdWVcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7fVxyXG4gICAgICovXHJcbiAgICBnZXRQYXJhbWV0ZXI6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFzcy5nZXRVbmlmb3JtKG5hbWUpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU2V0IHBhcmFtZXRlcnNcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcclxuICAgICAqL1xyXG4gICAgc2V0UGFyYW1ldGVyczogZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UGFyYW1ldGVyKG5hbWUsIG9ialtuYW1lXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8vIC8qKlxyXG4gICAgLy8gICogU2V0IHNoYWRlciBjb2RlXHJcbiAgICAvLyAgKiBAcGFyYW0ge3N0cmluZ30gc2hhZGVyU3RyXHJcbiAgICAvLyAgKi9cclxuICAgIC8vIHNldFNoYWRlcjogZnVuY3Rpb24gKHNoYWRlclN0cikge1xyXG4gICAgLy8gICAgIHZhciBtYXRlcmlhbCA9IHRoaXMucGFzcy5tYXRlcmlhbDtcclxuICAgIC8vICAgICBtYXRlcmlhbC5zaGFkZXIuc2V0RnJhZ21lbnQoc2hhZGVyU3RyKTtcclxuICAgIC8vICAgICBtYXRlcmlhbC5hdHRhY2hTaGFkZXIobWF0ZXJpYWwuc2hhZGVyLCB0cnVlKTtcclxuICAgIC8vIH0sXHJcbiAgICAvKipcclxuICAgICAqIFByb3h5IG9mIHBhc3MubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsIHh4eCk7XHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbdmFsXVxyXG4gICAgICovXHJcbiAgICBkZWZpbmU6IGZ1bmN0aW9uIChzeW1ib2wsIHZhbCkge1xyXG4gICAgICAgIHRoaXMucGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50Jywgc3ltYm9sLCB2YWwpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3h5IG9mIHBhc3MubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgeHh4KVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcclxuICAgICAqL1xyXG4gICAgdW5kZWZpbmU6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICB0aGlzLnBhc3MubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50Jywgc3ltYm9sKTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVtb3ZlUmVmZXJlbmNlOiBmdW5jdGlvbiAob3V0cHV0TmFtZSkge1xyXG4gICAgICAgIHRoaXMuX291dHB1dFJlZmVyZW5jZXNbb3V0cHV0TmFtZV0tLTtcclxuICAgICAgICBpZiAodGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXSA9PT0gMCkge1xyXG4gICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tvdXRwdXROYW1lXTtcclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ua2VlcExhc3RGcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSA9IHRoaXMuX291dHB1dFRleHR1cmVzW291dHB1dE5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gT3V0cHV0IG9mIHRoaXMgbm9kZSBoYXZlIGFscmVheSBiZWVuIHVzZWQgYnkgYWxsIG90aGVyIG5vZGVzXHJcbiAgICAgICAgICAgICAgICAvLyBQdXQgdGhlIHRleHR1cmUgYmFjayB0byB0aGUgcG9vbC5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIENvbXBvc2l0b3JOb2RlLnByb3RvdHlwZS5jbGVhci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAvLyBEZWZhdWx0IGRpc2FibGUgYWxsIHRleHR1cmVcclxuICAgICAgICB0aGlzLnBhc3MubWF0ZXJpYWwuZGlzYWJsZVRleHR1cmVzQWxsKCk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRmlsdGVyTm9kZTtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5jb2xvcmFkanVzdFxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBicmlnaHRuZXNzIDogMC4wO1xcbnVuaWZvcm0gZmxvYXQgY29udHJhc3QgOiAxLjA7XFxudW5pZm9ybSBmbG9hdCBleHBvc3VyZSA6IDAuMDtcXG51bmlmb3JtIGZsb2F0IGdhbW1hIDogMS4wO1xcbnVuaWZvcm0gZmxvYXQgc2F0dXJhdGlvbiA6IDEuMDtcXG5jb25zdCB2ZWMzIHcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCggdGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIHZlYzMgY29sb3IgPSBjbGFtcCh0ZXgucmdiICsgdmVjMyhicmlnaHRuZXNzKSwgMC4wLCAxLjApO1xcbiBjb2xvciA9IGNsYW1wKCAoY29sb3ItdmVjMygwLjUpKSpjb250cmFzdCt2ZWMzKDAuNSksIDAuMCwgMS4wKTtcXG4gY29sb3IgPSBjbGFtcCggY29sb3IgKiBwb3coMi4wLCBleHBvc3VyZSksIDAuMCwgMS4wKTtcXG4gY29sb3IgPSBjbGFtcCggcG93KGNvbG9yLCB2ZWMzKGdhbW1hKSksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbHVtaW5hbmNlID0gZG90KCBjb2xvciwgdyApO1xcbiBjb2xvciA9IG1peCh2ZWMzKGx1bWluYW5jZSksIGNvbG9yLCBzYXR1cmF0aW9uKTtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgdGV4LmEpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuYnJpZ2h0bmVzc1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBicmlnaHRuZXNzIDogMC4wO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCggdGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIHZlYzMgY29sb3IgPSB0ZXgucmdiICsgdmVjMyhicmlnaHRuZXNzKTtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgdGV4LmEpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuY29udHJhc3RcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gZmxvYXQgY29udHJhc3QgOiAxLjA7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9ICh0ZXgucmdiLXZlYzMoMC41KSkqY29udHJhc3QrdmVjMygwLjUpO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5leHBvc3VyZVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBleHBvc3VyZSA6IDAuMDtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIHZlYzMgY29sb3IgPSB0ZXgucmdiICogcG93KDIuMCwgZXhwb3N1cmUpO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5nYW1tYVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBnYW1tYSA6IDEuMDtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIHZlYzMgY29sb3IgPSBwb3codGV4LnJnYiwgdmVjMyhnYW1tYSkpO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5zYXR1cmF0aW9uXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IHNhdHVyYXRpb24gOiAxLjA7XFxuY29uc3QgdmVjMyB3ID0gdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKTtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIHZlYzMgY29sb3IgPSB0ZXgucmdiO1xcbiBmbG9hdCBsdW1pbmFuY2UgPSBkb3QoY29sb3IsIHcpO1xcbiBjb2xvciA9IG1peCh2ZWMzKGx1bWluYW5jZSksIGNvbG9yLCBzYXR1cmF0aW9uKTtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgdGV4LmEpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3Iua2VybmVsLmdhdXNzaWFuXzlcXG5mbG9hdCBnYXVzc2lhbktlcm5lbFs5XTtcXG5nYXVzc2lhbktlcm5lbFswXSA9IDAuMDc7XFxuZ2F1c3NpYW5LZXJuZWxbMV0gPSAwLjA5O1xcbmdhdXNzaWFuS2VybmVsWzJdID0gMC4xMjtcXG5nYXVzc2lhbktlcm5lbFszXSA9IDAuMTQ7XFxuZ2F1c3NpYW5LZXJuZWxbNF0gPSAwLjE2O1xcbmdhdXNzaWFuS2VybmVsWzVdID0gMC4xNDtcXG5nYXVzc2lhbktlcm5lbFs2XSA9IDAuMTI7XFxuZ2F1c3NpYW5LZXJuZWxbN10gPSAwLjA5O1xcbmdhdXNzaWFuS2VybmVsWzhdID0gMC4wNztcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3Iua2VybmVsLmdhdXNzaWFuXzEzXFxuZmxvYXQgZ2F1c3NpYW5LZXJuZWxbMTNdO1xcbmdhdXNzaWFuS2VybmVsWzBdID0gMC4wMjtcXG5nYXVzc2lhbktlcm5lbFsxXSA9IDAuMDM7XFxuZ2F1c3NpYW5LZXJuZWxbMl0gPSAwLjA2O1xcbmdhdXNzaWFuS2VybmVsWzNdID0gMC4wODtcXG5nYXVzc2lhbktlcm5lbFs0XSA9IDAuMTE7XFxuZ2F1c3NpYW5LZXJuZWxbNV0gPSAwLjEzO1xcbmdhdXNzaWFuS2VybmVsWzZdID0gMC4xNDtcXG5nYXVzc2lhbktlcm5lbFs3XSA9IDAuMTM7XFxuZ2F1c3NpYW5LZXJuZWxbOF0gPSAwLjExO1xcbmdhdXNzaWFuS2VybmVsWzldID0gMC4wODtcXG5nYXVzc2lhbktlcm5lbFsxMF0gPSAwLjA2O1xcbmdhdXNzaWFuS2VybmVsWzExXSA9IDAuMDM7XFxuZ2F1c3NpYW5LZXJuZWxbMTJdID0gMC4wMjtcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZ2F1c3NpYW5fYmx1clxcbiNkZWZpbmUgU0hBREVSX05BTUUgZ2F1c3NpYW5fYmx1clxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7dmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBmbG9hdCBibHVyU2l6ZSA6IDIuMDtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemUgOiBbNTEyLjAsIDUxMi4wXTtcXG51bmlmb3JtIGZsb2F0IGJsdXJEaXIgOiAwLjA7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZvaWQgbWFpbiAodm9pZClcXG57XFxuIEBpbXBvcnQgY2xheS5jb21wb3NpdG9yLmtlcm5lbC5nYXVzc2lhbl85XFxuIHZlYzIgb2ZmID0gYmx1clNpemUgLyB0ZXh0dXJlU2l6ZTtcXG4gb2ZmICo9IHZlYzIoMS4wIC0gYmx1ckRpciwgYmx1ckRpcik7XFxuIHZlYzQgc3VtID0gdmVjNCgwLjApO1xcbiBmbG9hdCB3ZWlnaHRBbGwgPSAwLjA7XFxuIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKSB7XFxuIGZsb2F0IHcgPSBnYXVzc2lhbktlcm5lbFtpXTtcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZmxvYXQoaSAtIDQpICogb2ZmKSk7XFxuIHN1bSArPSB0ZXhlbCAqIHc7XFxuIHdlaWdodEFsbCArPSB3O1xcbiB9XFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihzdW0gLyBtYXgod2VpZ2h0QWxsLCAwLjAxKSk7XFxufVxcbkBlbmRcXG5cIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5oZHIubG9nX2x1bVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxuY29uc3QgdmVjMyB3ID0gdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKTtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuIGZsb2F0IGx1bWluYW5jZSA9IGRvdCh0ZXgucmdiLCB3KTtcXG4gbHVtaW5hbmNlID0gbG9nKGx1bWluYW5jZSArIDAuMDAxKTtcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHZlYzQodmVjMyhsdW1pbmFuY2UpLCAxLjApKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmhkci5sdW1fYWRhcHRpb25cXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCBhZGFwdGVkTHVtO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGN1cnJlbnRMdW07XFxudW5pZm9ybSBmbG9hdCBmcmFtZVRpbWUgOiAwLjAyO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gZmxvYXQgZkFkYXB0ZWRMdW0gPSBkZWNvZGVIRFIodGV4dHVyZTJEKGFkYXB0ZWRMdW0sIHZlYzIoMC41LCAwLjUpKSkucjtcXG4gZmxvYXQgZkN1cnJlbnRMdW0gPSBleHAoZW5jb2RlSERSKHRleHR1cmUyRChjdXJyZW50THVtLCB2ZWMyKDAuNSwgMC41KSkpLnIpO1xcbiBmQWRhcHRlZEx1bSArPSAoZkN1cnJlbnRMdW0gLSBmQWRhcHRlZEx1bSkgKiAoMS4wIC0gcG93KDAuOTgsIDMwLjAgKiBmcmFtZVRpbWUpKTtcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHZlYzQodmVjMyhmQWRhcHRlZEx1bSksIDEuMCkpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IubHVtXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG5jb25zdCB2ZWMzIHcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCggdGV4dHVyZSwgdl9UZXhjb29yZCApO1xcbiBmbG9hdCBsdW1pbmFuY2UgPSBkb3QodGV4LnJnYiwgdyk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhsdW1pbmFuY2UpLCAxLjApO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IubHV0XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIHNhbXBsZXIyRCBsb29rdXA7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQpO1xcbiBmbG9hdCBibHVlQ29sb3IgPSB0ZXguYiAqIDYzLjA7XFxuIHZlYzIgcXVhZDE7XFxuIHF1YWQxLnkgPSBmbG9vcihmbG9vcihibHVlQ29sb3IpIC8gOC4wKTtcXG4gcXVhZDEueCA9IGZsb29yKGJsdWVDb2xvcikgLSAocXVhZDEueSAqIDguMCk7XFxuIHZlYzIgcXVhZDI7XFxuIHF1YWQyLnkgPSBmbG9vcihjZWlsKGJsdWVDb2xvcikgLyA4LjApO1xcbiBxdWFkMi54ID0gY2VpbChibHVlQ29sb3IpIC0gKHF1YWQyLnkgKiA4LjApO1xcbiB2ZWMyIHRleFBvczE7XFxuIHRleFBvczEueCA9IChxdWFkMS54ICogMC4xMjUpICsgMC41LzUxMi4wICsgKCgwLjEyNSAtIDEuMC81MTIuMCkgKiB0ZXgucik7XFxuIHRleFBvczEueSA9IChxdWFkMS55ICogMC4xMjUpICsgMC41LzUxMi4wICsgKCgwLjEyNSAtIDEuMC81MTIuMCkgKiB0ZXguZyk7XFxuIHZlYzIgdGV4UG9zMjtcXG4gdGV4UG9zMi54ID0gKHF1YWQyLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIHRleC5yKTtcXG4gdGV4UG9zMi55ID0gKHF1YWQyLnkgKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIHRleC5nKTtcXG4gdmVjNCBuZXdDb2xvcjEgPSB0ZXh0dXJlMkQobG9va3VwLCB0ZXhQb3MxKTtcXG4gdmVjNCBuZXdDb2xvcjIgPSB0ZXh0dXJlMkQobG9va3VwLCB0ZXhQb3MyKTtcXG4gdmVjNCBuZXdDb2xvciA9IG1peChuZXdDb2xvcjEsIG5ld0NvbG9yMiwgZnJhY3QoYmx1ZUNvbG9yKSk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQobmV3Q29sb3IucmdiLCB0ZXgudyk7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci52aWduZXR0ZVxcbiNkZWZpbmUgT1VUUFVUX0FMUEhBXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGRhcmtuZXNzOiAxO1xcbnVuaWZvcm0gZmxvYXQgb2Zmc2V0OiAxO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCkpO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gdGV4ZWwucmdiO1xcbiB2ZWMyIHV2ID0gKHZfVGV4Y29vcmQgLSB2ZWMyKDAuNSkpICogdmVjMihvZmZzZXQpO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNChtaXgodGV4ZWwucmdiLCB2ZWMzKDEuMCAtIGRhcmtuZXNzKSwgZG90KHV2LCB1dikpLCB0ZXhlbC5hKSk7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5vdXRwdXRcXG4jZGVmaW5lIE9VVFBVVF9BTFBIQVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCkpO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gdGV4LnJnYjtcXG4jaWZkZWYgT1VUUFVUX0FMUEhBXFxuIGdsX0ZyYWdDb2xvci5hID0gdGV4LmE7XFxuI2Vsc2VcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihnbF9GcmFnQ29sb3IpO1xcbiNpZmRlZiBQUkVNVUxUSVBMWV9BTFBIQVxcbiBnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hO1xcbiNlbmRpZlxcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuYnJpZ2h0XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IHRocmVzaG9sZCA6IDE7XFxudW5pZm9ybSBmbG9hdCBzY2FsZSA6IDEuMDtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemU6IFs1MTIsIDUxMl07XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuY29uc3QgdmVjMyBsdW1XZWlnaHQgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52ZWM0IG1lZGlhbih2ZWM0IGEsIHZlYzQgYiwgdmVjNCBjKVxcbntcXG4gcmV0dXJuIGEgKyBiICsgYyAtIG1pbihtaW4oYSwgYiksIGMpIC0gbWF4KG1heChhLCBiKSwgYyk7XFxufVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuI2lmZGVmIEFOVElfRkxJQ0tFUlxcbiB2ZWMzIGQgPSAxLjAgLyB0ZXh0dXJlU2l6ZS54eXggKiB2ZWMzKDEuMCwgMS4wLCAwLjApO1xcbiB2ZWM0IHMxID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC54eikpO1xcbiB2ZWM0IHMyID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eikpO1xcbiB2ZWM0IHMzID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC56eSkpO1xcbiB2ZWM0IHM0ID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56eSkpO1xcbiB0ZXhlbCA9IG1lZGlhbihtZWRpYW4odGV4ZWwsIHMxLCBzMiksIHMzLCBzNCk7XFxuI2VuZGlmXFxuIGZsb2F0IGx1bSA9IGRvdCh0ZXhlbC5yZ2IgLCBsdW1XZWlnaHQpO1xcbiB2ZWM0IGNvbG9yO1xcbiBpZiAobHVtID4gdGhyZXNob2xkICYmIHRleGVsLmEgPiAwLjApXFxuIHtcXG4gY29sb3IgPSB2ZWM0KHRleGVsLnJnYiAqIHNjYWxlLCB0ZXhlbC5hICogc2NhbGUpO1xcbiB9XFxuIGVsc2VcXG4ge1xcbiBjb2xvciA9IHZlYzQoMC4wKTtcXG4gfVxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoY29sb3IpO1xcbn1cXG5AZW5kXFxuXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZG93bnNhbXBsZVxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMiwgNTEyXTtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuZmxvYXQgYnJpZ2h0bmVzcyh2ZWMzIGMpXFxue1xcbiByZXR1cm4gbWF4KG1heChjLnIsIGMuZyksIGMuYik7XFxufVxcbkBpbXBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IGQgPSB2ZWM0KC0xLjAsIC0xLjAsIDEuMCwgMS4wKSAvIHRleHR1cmVTaXplLnh5eHk7XFxuI2lmZGVmIEFOVElfRkxJQ0tFUlxcbiB2ZWMzIHMxID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh5KSkucmdiO1xcbiB2ZWMzIHMyID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp5KSkucmdiO1xcbiB2ZWMzIHMzID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh3KSkucmdiO1xcbiB2ZWMzIHM0ID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp3KSkucmdiO1xcbiBmbG9hdCBzMXcgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzMSkgKyAxLjApO1xcbiBmbG9hdCBzMncgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzMikgKyAxLjApO1xcbiBmbG9hdCBzM3cgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzMykgKyAxLjApO1xcbiBmbG9hdCBzNHcgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzNCkgKyAxLjApO1xcbiBmbG9hdCBvbmVEaXZpZGVTdW0gPSAxLjAgLyAoczF3ICsgczJ3ICsgczN3ICsgczR3KTtcXG4gdmVjNCBjb2xvciA9IHZlYzQoXFxuIChzMSAqIHMxdyArIHMyICogczJ3ICsgczMgKiBzM3cgKyBzNCAqIHM0dykgKiBvbmVEaXZpZGVTdW0sXFxuIDEuMFxcbiApO1xcbiNlbHNlXFxuIHZlYzQgY29sb3IgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHkpKTtcXG4gY29sb3IgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp5KSk7XFxuIGNvbG9yICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54dykpO1xcbiBjb2xvciArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuencpKTtcXG4gY29sb3IgKj0gMC4yNTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGNvbG9yKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLnVwc2FtcGxlXFxuI2RlZmluZSBISUdIX1FVQUxJVFlcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gdmVjMiB0ZXh0dXJlU2l6ZSA6IFs1MTIsIDUxMl07XFxudW5pZm9ybSBmbG9hdCBzYW1wbGVTY2FsZTogMC41O1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkudXRpbC5jbGFtcF9zYW1wbGVcXG52b2lkIG1haW4oKVxcbntcXG4jaWZkZWYgSElHSF9RVUFMSVRZXFxuIHZlYzQgZCA9IHZlYzQoMS4wLCAxLjAsIC0xLjAsIDAuMCkgLyB0ZXh0dXJlU2l6ZS54eXh5ICogc2FtcGxlU2NhbGU7XFxuIHZlYzQgcztcXG4gcyA9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC54eSkpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC53eSkpICogMi4wO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC56eSkpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56dykpICogMi4wO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICkpICogNC4wO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54dykpICogMi4wO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56eSkpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC53eSkpICogMi4wO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eSkpO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIocyAvIDE2LjApO1xcbiNlbHNlXFxuIHZlYzQgZCA9IHZlYzQoLTEuMCwgLTEuMCwgKzEuMCwgKzEuMCkgLyB0ZXh0dXJlU2l6ZS54eXh5O1xcbiB2ZWM0IHM7XFxuIHMgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHkpKTtcXG4gcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuenkpKTtcXG4gcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHcpKTtcXG4gcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuencpKTtcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHMgLyA0LjApO1xcbiNlbmRpZlxcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuaGRyLmNvbXBvc2l0ZVxcbiNkZWZpbmUgVE9ORU1BUFBJTkdcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbiNpZmRlZiBCTE9PTV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgYmxvb207XFxuI2VuZGlmXFxuI2lmZGVmIExFTlNGTEFSRV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbGVuc2ZsYXJlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGxlbnNkaXJ0O1xcbiNlbmRpZlxcbiNpZmRlZiBMVU1fRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGx1bTtcXG4jZW5kaWZcXG4jaWZkZWYgTFVUX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBsdXQ7XFxuI2VuZGlmXFxuI2lmZGVmIENPTE9SX0NPUlJFQ1RJT05cXG51bmlmb3JtIGZsb2F0IGJyaWdodG5lc3MgOiAwLjA7XFxudW5pZm9ybSBmbG9hdCBjb250cmFzdCA6IDEuMDtcXG51bmlmb3JtIGZsb2F0IHNhdHVyYXRpb24gOiAxLjA7XFxuI2VuZGlmXFxuI2lmZGVmIFZJR05FVFRFXFxudW5pZm9ybSBmbG9hdCB2aWduZXR0ZURhcmtuZXNzOiAxLjA7XFxudW5pZm9ybSBmbG9hdCB2aWduZXR0ZU9mZnNldDogMS4wO1xcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgZXhwb3N1cmUgOiAxLjA7XFxudW5pZm9ybSBmbG9hdCBibG9vbUludGVuc2l0eSA6IDAuMjU7XFxudW5pZm9ybSBmbG9hdCBsZW5zZmxhcmVJbnRlbnNpdHkgOiAxO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnNyZ2JcXG52ZWMzIEFDRVNUb25lTWFwcGluZyh2ZWMzIGNvbG9yKVxcbntcXG4gY29uc3QgZmxvYXQgQSA9IDIuNTE7XFxuIGNvbnN0IGZsb2F0IEIgPSAwLjAzO1xcbiBjb25zdCBmbG9hdCBDID0gMi40MztcXG4gY29uc3QgZmxvYXQgRCA9IDAuNTk7XFxuIGNvbnN0IGZsb2F0IEUgPSAwLjE0O1xcbiByZXR1cm4gKGNvbG9yICogKEEgKiBjb2xvciArIEIpKSAvIChjb2xvciAqIChDICogY29sb3IgKyBEKSArIEUpO1xcbn1cXG5mbG9hdCBleWVBZGFwdGlvbihmbG9hdCBmTHVtKVxcbntcXG4gcmV0dXJuIG1peCgwLjIsIGZMdW0sIDAuNSk7XFxufVxcbiNpZmRlZiBMVVRfRU5BQkxFRFxcbnZlYzMgbHV0VHJhbnNmb3JtKHZlYzMgY29sb3IpIHtcXG4gZmxvYXQgYmx1ZUNvbG9yID0gY29sb3IuYiAqIDYzLjA7XFxuIHZlYzIgcXVhZDE7XFxuIHF1YWQxLnkgPSBmbG9vcihmbG9vcihibHVlQ29sb3IpIC8gOC4wKTtcXG4gcXVhZDEueCA9IGZsb29yKGJsdWVDb2xvcikgLSAocXVhZDEueSAqIDguMCk7XFxuIHZlYzIgcXVhZDI7XFxuIHF1YWQyLnkgPSBmbG9vcihjZWlsKGJsdWVDb2xvcikgLyA4LjApO1xcbiBxdWFkMi54ID0gY2VpbChibHVlQ29sb3IpIC0gKHF1YWQyLnkgKiA4LjApO1xcbiB2ZWMyIHRleFBvczE7XFxuIHRleFBvczEueCA9IChxdWFkMS54ICogMC4xMjUpICsgMC41LzUxMi4wICsgKCgwLjEyNSAtIDEuMC81MTIuMCkgKiBjb2xvci5yKTtcXG4gdGV4UG9zMS55ID0gKHF1YWQxLnkgKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIGNvbG9yLmcpO1xcbiB2ZWMyIHRleFBvczI7XFxuIHRleFBvczIueCA9IChxdWFkMi54ICogMC4xMjUpICsgMC41LzUxMi4wICsgKCgwLjEyNSAtIDEuMC81MTIuMCkgKiBjb2xvci5yKTtcXG4gdGV4UG9zMi55ID0gKHF1YWQyLnkgKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIGNvbG9yLmcpO1xcbiB2ZWM0IG5ld0NvbG9yMSA9IHRleHR1cmUyRChsdXQsIHRleFBvczEpO1xcbiB2ZWM0IG5ld0NvbG9yMiA9IHRleHR1cmUyRChsdXQsIHRleFBvczIpO1xcbiB2ZWM0IG5ld0NvbG9yID0gbWl4KG5ld0NvbG9yMSwgbmV3Q29sb3IyLCBmcmFjdChibHVlQ29sb3IpKTtcXG4gcmV0dXJuIG5ld0NvbG9yLnJnYjtcXG59XFxuI2VuZGlmXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleGVsID0gdmVjNCgwLjApO1xcbiB2ZWM0IG9yaWdpbmFsVGV4ZWwgPSB2ZWM0KDAuMCk7XFxuI2lmZGVmIFRFWFRVUkVfRU5BQkxFRFxcbiB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCkpO1xcbiBvcmlnaW5hbFRleGVsID0gdGV4ZWw7XFxuI2VuZGlmXFxuI2lmZGVmIEJMT09NX0VOQUJMRURcXG4gdmVjNCBibG9vbVRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRChibG9vbSwgdl9UZXhjb29yZCkpO1xcbiB0ZXhlbC5yZ2IgKz0gYmxvb21UZXhlbC5yZ2IgKiBibG9vbUludGVuc2l0eTtcXG4gdGV4ZWwuYSArPSBibG9vbVRleGVsLmEgKiBibG9vbUludGVuc2l0eTtcXG4jZW5kaWZcXG4jaWZkZWYgTEVOU0ZMQVJFX0VOQUJMRURcXG4gdGV4ZWwgKz0gZGVjb2RlSERSKHRleHR1cmUyRChsZW5zZmxhcmUsIHZfVGV4Y29vcmQpKSAqIHRleHR1cmUyRChsZW5zZGlydCwgdl9UZXhjb29yZCkgKiBsZW5zZmxhcmVJbnRlbnNpdHk7XFxuI2VuZGlmXFxuIHRleGVsLmEgPSBtaW4odGV4ZWwuYSwgMS4wKTtcXG4jaWZkZWYgTFVNX0VOQUJMRURcXG4gZmxvYXQgZkx1bSA9IHRleHR1cmUyRChsdW0sIHZlYzIoMC41LCAwLjUpKS5yO1xcbiBmbG9hdCBhZGFwdGVkTHVtRGVzdCA9IDMuMCAvIChtYXgoMC4xLCAxLjAgKyAxMC4wKmV5ZUFkYXB0aW9uKGZMdW0pKSk7XFxuIGZsb2F0IGV4cG9zdXJlQmlhcyA9IGFkYXB0ZWRMdW1EZXN0ICogZXhwb3N1cmU7XFxuI2Vsc2VcXG4gZmxvYXQgZXhwb3N1cmVCaWFzID0gZXhwb3N1cmU7XFxuI2VuZGlmXFxuI2lmZGVmIFRPTkVNQVBQSU5HXFxuIHRleGVsLnJnYiAqPSBleHBvc3VyZUJpYXM7XFxuIHRleGVsLnJnYiA9IEFDRVNUb25lTWFwcGluZyh0ZXhlbC5yZ2IpO1xcbiNlbmRpZlxcbiB0ZXhlbCA9IGxpbmVhclRvc1JHQih0ZXhlbCk7XFxuI2lmZGVmIExVVF9FTkFCTEVEXFxuIHRleGVsLnJnYiA9IGx1dFRyYW5zZm9ybShjbGFtcCh0ZXhlbC5yZ2IsdmVjMygwLjApLHZlYzMoMS4wKSkpO1xcbiNlbmRpZlxcbiNpZmRlZiBDT0xPUl9DT1JSRUNUSU9OXFxuIHRleGVsLnJnYiA9IGNsYW1wKHRleGVsLnJnYiArIHZlYzMoYnJpZ2h0bmVzcyksIDAuMCwgMS4wKTtcXG4gdGV4ZWwucmdiID0gY2xhbXAoKHRleGVsLnJnYiAtIHZlYzMoMC41KSkqY29udHJhc3QrdmVjMygwLjUpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IGx1bSA9IGRvdCh0ZXhlbC5yZ2IsIHZlYzMoMC4yMTI1LCAwLjcxNTQsIDAuMDcyMSkpO1xcbiB0ZXhlbC5yZ2IgPSBtaXgodmVjMyhsdW0pLCB0ZXhlbC5yZ2IsIHNhdHVyYXRpb24pO1xcbiNlbmRpZlxcbiNpZmRlZiBWSUdORVRURVxcbiB2ZWMyIHV2ID0gKHZfVGV4Y29vcmQgLSB2ZWMyKDAuNSkpICogdmVjMih2aWduZXR0ZU9mZnNldCk7XFxuIHRleGVsLnJnYiA9IG1peCh0ZXhlbC5yZ2IsIHZlYzMoMS4wIC0gdmlnbmV0dGVEYXJrbmVzcyksIGRvdCh1diwgdXYpKTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHRleGVsKTtcXG4jaWZkZWYgREVCVUdcXG4gI2lmIERFQlVHID09IDFcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCkpKTtcXG4gI2VsaWYgREVCVUcgPT0gMlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoZGVjb2RlSERSKHRleHR1cmUyRChibG9vbSwgdl9UZXhjb29yZCkpICogYmxvb21JbnRlbnNpdHkpO1xcbiAjZWxpZiBERUJVRyA9PSAzXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihkZWNvZGVIRFIodGV4dHVyZTJEKGxlbnNmbGFyZSwgdl9UZXhjb29yZCkgKiBsZW5zZmxhcmVJbnRlbnNpdHkpKTtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuIGlmIChvcmlnaW5hbFRleGVsLmEgPD0gMC4wMSAmJiBnbF9GcmFnQ29sb3IuYSA+IDFlLTUpIHtcXG4gZ2xfRnJhZ0NvbG9yLmEgPSBkb3QoZ2xfRnJhZ0NvbG9yLnJnYiwgdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKSk7XFxuIH1cXG4jaWZkZWYgUFJFTVVMVElQTFlfQUxQSEFcXG4gZ2xfRnJhZ0NvbG9yLnJnYiAqPSBnbF9GcmFnQ29sb3IuYTtcXG4jZW5kaWZcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmxlbnNmbGFyZVxcbiNkZWZpbmUgU0FNUExFX05VTUJFUiA4XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIHNhbXBsZXIyRCBsZW5zY29sb3I7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMiwgNTEyXTtcXG51bmlmb3JtIGZsb2F0IGRpc3BlcnNhbCA6IDAuMztcXG51bmlmb3JtIGZsb2F0IGhhbG9XaWR0aCA6IDAuNDtcXG51bmlmb3JtIGZsb2F0IGRpc3RvcnRpb24gOiAxLjA7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZlYzQgdGV4dHVyZURpc3RvcnRlZChcXG4gaW4gdmVjMiB0ZXhjb29yZCxcXG4gaW4gdmVjMiBkaXJlY3Rpb24sXFxuIGluIHZlYzMgZGlzdG9ydGlvblxcbikge1xcbiByZXR1cm4gdmVjNChcXG4gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB0ZXhjb29yZCArIGRpcmVjdGlvbiAqIGRpc3RvcnRpb24ucikpLnIsXFxuIGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdGV4Y29vcmQgKyBkaXJlY3Rpb24gKiBkaXN0b3J0aW9uLmcpKS5nLFxcbiBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHRleGNvb3JkICsgZGlyZWN0aW9uICogZGlzdG9ydGlvbi5iKSkuYixcXG4gMS4wXFxuICk7XFxufVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMyIHRleGNvb3JkID0gLXZfVGV4Y29vcmQgKyB2ZWMyKDEuMCk7IHZlYzIgdGV4dHVyZU9mZnNldCA9IDEuMCAvIHRleHR1cmVTaXplO1xcbiB2ZWMyIGdob3N0VmVjID0gKHZlYzIoMC41KSAtIHRleGNvb3JkKSAqIGRpc3BlcnNhbDtcXG4gdmVjMiBoYWxvVmVjID0gbm9ybWFsaXplKGdob3N0VmVjKSAqIGhhbG9XaWR0aDtcXG4gdmVjMyBkaXN0b3J0aW9uID0gdmVjMygtdGV4dHVyZU9mZnNldC54ICogZGlzdG9ydGlvbiwgMC4wLCB0ZXh0dXJlT2Zmc2V0LnggKiBkaXN0b3J0aW9uKTtcXG4gdmVjNCByZXN1bHQgPSB2ZWM0KDAuMCk7XFxuIGZvciAoaW50IGkgPSAwOyBpIDwgU0FNUExFX05VTUJFUjsgaSsrKVxcbiB7XFxuIHZlYzIgb2Zmc2V0ID0gZnJhY3QodGV4Y29vcmQgKyBnaG9zdFZlYyAqIGZsb2F0KGkpKTtcXG4gZmxvYXQgd2VpZ2h0ID0gbGVuZ3RoKHZlYzIoMC41KSAtIG9mZnNldCkgLyBsZW5ndGgodmVjMigwLjUpKTtcXG4gd2VpZ2h0ID0gcG93KDEuMCAtIHdlaWdodCwgMTAuMCk7XFxuIHJlc3VsdCArPSB0ZXh0dXJlRGlzdG9ydGVkKG9mZnNldCwgbm9ybWFsaXplKGdob3N0VmVjKSwgZGlzdG9ydGlvbikgKiB3ZWlnaHQ7XFxuIH1cXG4gcmVzdWx0ICo9IHRleHR1cmUyRChsZW5zY29sb3IsIHZlYzIobGVuZ3RoKHZlYzIoMC41KSAtIHRleGNvb3JkKSkgLyBsZW5ndGgodmVjMigwLjUpKSk7XFxuIGZsb2F0IHdlaWdodCA9IGxlbmd0aCh2ZWMyKDAuNSkgLSBmcmFjdCh0ZXhjb29yZCArIGhhbG9WZWMpKSAvIGxlbmd0aCh2ZWMyKDAuNSkpO1xcbiB3ZWlnaHQgPSBwb3coMS4wIC0gd2VpZ2h0LCAxMC4wKTtcXG4gdmVjMiBvZmZzZXQgPSBmcmFjdCh0ZXhjb29yZCArIGhhbG9WZWMpO1xcbiByZXN1bHQgKz0gdGV4dHVyZURpc3RvcnRlZChvZmZzZXQsIG5vcm1hbGl6ZShnaG9zdFZlYyksIGRpc3RvcnRpb24pICogd2VpZ2h0O1xcbiBnbF9GcmFnQ29sb3IgPSByZXN1bHQ7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5ibGVuZFxcbiNkZWZpbmUgU0hBREVSX05BTUUgYmxlbmRcXG4jaWZkZWYgVEVYVFVSRTFfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmUxO1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0MSA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTJfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmUyO1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0MiA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTNfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmUzO1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0MyA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTRfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU0O1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0NCA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTVfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU1O1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0NSA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTZfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU2O1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0NiA6IDEuMDtcXG4jZW5kaWZcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdmVjNCgwLjApO1xcbiNpZmRlZiBURVhUVVJFMV9FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUxLCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQxO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFMl9FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUyLCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQyO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFM19FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUzLCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQzO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNF9FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmU0LCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQ0O1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNV9FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmU1LCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQ1O1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNl9FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmU2LCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQ2O1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodGV4KTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmZ4YWFcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydCA6IFZJRVdQT1JUO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbiNkZWZpbmUgRlhBQV9SRURVQ0VfTUlOICgxLjAvMTI4LjApXFxuI2RlZmluZSBGWEFBX1JFRFVDRV9NVUwgKDEuMC84LjApXFxuI2RlZmluZSBGWEFBX1NQQU5fTUFYIDguMFxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMiByZXNvbHV0aW9uID0gMS4wIC8gdmlld3BvcnQuenc7XFxuIHZlYzMgcmdiTlcgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAtMS4wLCAtMS4wICkgKSAqIHJlc29sdXRpb24gKSApLnh5ejtcXG4gdmVjMyByZ2JORSA9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIDEuMCwgLTEuMCApICkgKiByZXNvbHV0aW9uICkgKS54eXo7XFxuIHZlYzMgcmdiU1cgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAtMS4wLCAxLjAgKSApICogcmVzb2x1dGlvbiApICkueHl6O1xcbiB2ZWMzIHJnYlNFID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMS4wLCAxLjAgKSApICogcmVzb2x1dGlvbiApICkueHl6O1xcbiB2ZWM0IHJnYmFNID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAqIHJlc29sdXRpb24gKSApO1xcbiB2ZWMzIHJnYk0gPSByZ2JhTS54eXo7XFxuIGZsb2F0IG9wYWNpdHkgPSByZ2JhTS53O1xcbiB2ZWMzIGx1bWEgPSB2ZWMzKCAwLjI5OSwgMC41ODcsIDAuMTE0ICk7XFxuIGZsb2F0IGx1bWFOVyA9IGRvdCggcmdiTlcsIGx1bWEgKTtcXG4gZmxvYXQgbHVtYU5FID0gZG90KCByZ2JORSwgbHVtYSApO1xcbiBmbG9hdCBsdW1hU1cgPSBkb3QoIHJnYlNXLCBsdW1hICk7XFxuIGZsb2F0IGx1bWFTRSA9IGRvdCggcmdiU0UsIGx1bWEgKTtcXG4gZmxvYXQgbHVtYU0gPSBkb3QoIHJnYk0sIGx1bWEgKTtcXG4gZmxvYXQgbHVtYU1pbiA9IG1pbiggbHVtYU0sIG1pbiggbWluKCBsdW1hTlcsIGx1bWFORSApLCBtaW4oIGx1bWFTVywgbHVtYVNFICkgKSApO1xcbiBmbG9hdCBsdW1hTWF4ID0gbWF4KCBsdW1hTSwgbWF4KCBtYXgoIGx1bWFOVywgbHVtYU5FKSAsIG1heCggbHVtYVNXLCBsdW1hU0UgKSApICk7XFxuIHZlYzIgZGlyO1xcbiBkaXIueCA9IC0oKGx1bWFOVyArIGx1bWFORSkgLSAobHVtYVNXICsgbHVtYVNFKSk7XFxuIGRpci55ID0gKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcbiBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoICggbHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFICkgKiAoIDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwgKSwgRlhBQV9SRURVQ0VfTUlOICk7XFxuIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvICggbWluKCBhYnMoIGRpci54ICksIGFicyggZGlyLnkgKSApICsgZGlyUmVkdWNlICk7XFxuIGRpciA9IG1pbiggdmVjMiggRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuIG1heCggdmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiBkaXIgKiByY3BEaXJNaW4pKSAqIHJlc29sdXRpb247XFxuIHZlYzMgcmdiQSA9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCBnbF9GcmFnQ29vcmQueHkgKiByZXNvbHV0aW9uICsgZGlyICogKCAxLjAgLyAzLjAgLSAwLjUgKSApICkueHl6O1xcbiByZ2JBICs9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCBnbF9GcmFnQ29vcmQueHkgKiByZXNvbHV0aW9uICsgZGlyICogKCAyLjAgLyAzLjAgLSAwLjUgKSApICkueHl6O1xcbiByZ2JBICo9IDAuNTtcXG4gdmVjMyByZ2JCID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAqIHJlc29sdXRpb24gKyBkaXIgKiAtMC41ICkgKS54eXo7XFxuIHJnYkIgKz0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAqIHJlc29sdXRpb24gKyBkaXIgKiAwLjUgKSApLnh5ejtcXG4gcmdiQiAqPSAwLjI1O1xcbiByZ2JCICs9IHJnYkEgKiAwLjU7XFxuIGZsb2F0IGx1bWFCID0gZG90KCByZ2JCLCBsdW1hICk7XFxuIGlmICggKCBsdW1hQiA8IGx1bWFNaW4gKSB8fCAoIGx1bWFCID4gbHVtYU1heCApIClcXG4ge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KCByZ2JBLCBvcGFjaXR5ICk7XFxuIH1cXG4gZWxzZSB7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoIHJnYkIsIG9wYWNpdHkgKTtcXG4gfVxcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBjb2xvcmFkanVzdEVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9jb2xvcmFkanVzdC5nbHNsLmpzJztcclxuaW1wb3J0IGJsdXJFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvYmx1ci5nbHNsLmpzJztcclxuaW1wb3J0IGx1bUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9sdW0uZ2xzbC5qcyc7XHJcbmltcG9ydCBsdXRFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvbHV0Lmdsc2wuanMnO1xyXG5pbXBvcnQgdmlnZW50dGVFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvdmlnbmV0dGUuZ2xzbC5qcyc7XHJcbmltcG9ydCBvdXRwdXRFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3Ivb3V0cHV0Lmdsc2wuanMnO1xyXG5pbXBvcnQgYnJpZ2h0RXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2JyaWdodC5nbHNsLmpzJztcclxuaW1wb3J0IGRvd25zYW1wbGVFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvZG93bnNhbXBsZS5nbHNsLmpzJztcclxuaW1wb3J0IHVwc2FtcGxlRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL3Vwc2FtcGxlLmdsc2wuanMnO1xyXG5pbXBvcnQgaGRyRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2hkci5nbHNsLmpzJztcclxuaW1wb3J0IGxlbnNmbGFyZUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9sZW5zZmxhcmUuZ2xzbC5qcyc7XHJcbmltcG9ydCBibGVuZEVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9ibGVuZC5nbHNsLmpzJztcclxuaW1wb3J0IGZ4YWFFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvZnhhYS5nbHNsLmpzJztcclxuLy8gaW1wb3J0IGZ4YWEzRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2Z4YWEzLmdsc2wuanMnO1xyXG5cclxuLy8gVE9ETyBNdXN0IGV4cG9ydCBhIG1vZHVsZSBhbmQgYmUgdXNlZCBpbiB0aGUgb3RoZXIgbW9kdWxlcy4gT3IgaXQgd2lsbCBiZSB0cmVlIHNoYWtlZFxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihTaGFkZXIpIHtcclxuICAgIC8vIFNvbWUgYnVpbGQgaW4gc2hhZGVyc1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShjb2xvcmFkanVzdEVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShibHVyRXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGx1bUVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShsdXRFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10odmlnZW50dGVFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10ob3V0cHV0RXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGJyaWdodEVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShkb3duc2FtcGxlRXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKHVwc2FtcGxlRXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGhkckVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShsZW5zZmxhcmVFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10oYmxlbmRFc3NsKTtcclxuXHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGZ4YWFFc3NsKTtcclxuXHJcbn0iLCJpbXBvcnQgdXRpbCBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCBDb21wb3NpdG9yIGZyb20gJy4vY29tcG9zaXRvci9Db21wb3NpdG9yJztcclxuaW1wb3J0IENvbXBvU2NlbmVOb2RlIGZyb20gJy4vY29tcG9zaXRvci9TY2VuZU5vZGUnO1xyXG5pbXBvcnQgQ29tcG9UZXh0dXJlTm9kZSBmcm9tICcuL2NvbXBvc2l0b3IvVGV4dHVyZU5vZGUnO1xyXG5pbXBvcnQgQ29tcG9GaWx0ZXJOb2RlIGZyb20gJy4vY29tcG9zaXRvci9GaWx0ZXJOb2RlJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuL1NoYWRlcic7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vVGV4dHVyZSc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi9UZXh0dXJlQ3ViZSc7XHJcblxyXG5pbXBvcnQgcmVnaXN0ZXJCdWlsdGluQ29tcG9zaXRvciBmcm9tICcuL3NoYWRlci9yZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yJztcclxuXHJcbnJlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3IoU2hhZGVyKTtcclxuXHJcbnZhciBzaGFkZXJTb3VyY2VSZWcgPSAvXiNzb3VyY2VcXCgoLio/KVxcKS87XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5jcmVhdGVDb21wb3NpdG9yXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge09iamVjdH0ganNvblxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXHJcbiAqIEByZXR1cm4ge2NsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yfVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlQ29tcG9zaXRvcihqc29uLCBvcHRzKSB7XHJcbiAgICB2YXIgY29tcG9zaXRvciA9IG5ldyBDb21wb3NpdG9yKCk7XHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICB2YXIgbGliID0ge1xyXG4gICAgICAgIHRleHR1cmVzOiB7fSxcclxuICAgICAgICBwYXJhbWV0ZXJzOiB7fVxyXG4gICAgfTtcclxuICAgIHZhciBhZnRlckxvYWQgPSBmdW5jdGlvbihzaGFkZXJMaWIsIHRleHR1cmVMaWIpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpzb24ubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5vZGVJbmZvID0ganNvbi5ub2Rlc1tpXTtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSBjcmVhdGVOb2RlKG5vZGVJbmZvLCBsaWIsIG9wdHMpO1xyXG4gICAgICAgICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgICAgICAgICAgY29tcG9zaXRvci5hZGROb2RlKG5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBmb3IgKHZhciBuYW1lIGluIGpzb24ucGFyYW1ldGVycykge1xyXG4gICAgICAgIHZhciBwYXJhbUluZm8gPSBqc29uLnBhcmFtZXRlcnNbbmFtZV07XHJcbiAgICAgICAgbGliLnBhcmFtZXRlcnNbbmFtZV0gPSBjb252ZXJ0UGFyYW1ldGVyKHBhcmFtSW5mbyk7XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPIGxvYWQgdGV4dHVyZSBhc3luY2hyb25vdXNcclxuICAgIGxvYWRUZXh0dXJlcyhqc29uLCBsaWIsIG9wdHMsIGZ1bmN0aW9uKHRleHR1cmVMaWIpIHtcclxuICAgICAgICBsaWIudGV4dHVyZXMgPSB0ZXh0dXJlTGliO1xyXG4gICAgICAgIGFmdGVyTG9hZCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGNvbXBvc2l0b3I7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZU5vZGUobm9kZUluZm8sIGxpYiwgb3B0cykge1xyXG4gICAgdmFyIHR5cGUgPSBub2RlSW5mby50eXBlIHx8ICdmaWx0ZXInO1xyXG4gICAgdmFyIHNoYWRlclNvdXJjZTtcclxuICAgIHZhciBpbnB1dHM7XHJcbiAgICB2YXIgb3V0cHV0cztcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gJ2ZpbHRlcicpIHtcclxuICAgICAgICB2YXIgc2hhZGVyRXhwID0gbm9kZUluZm8uc2hhZGVyLnRyaW0oKTtcclxuICAgICAgICB2YXIgcmVzID0gc2hhZGVyU291cmNlUmVnLmV4ZWMoc2hhZGVyRXhwKTtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIHNoYWRlclNvdXJjZSA9IFNoYWRlci5zb3VyY2UocmVzWzFdLnRyaW0oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNoYWRlckV4cC5jaGFyQXQoMCkgPT09ICcjJykge1xyXG4gICAgICAgICAgICBzaGFkZXJTb3VyY2UgPSBsaWIuc2hhZGVyc1tzaGFkZXJFeHAuc3Vic3RyKDEpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzaGFkZXJTb3VyY2UpIHtcclxuICAgICAgICAgICAgc2hhZGVyU291cmNlID0gc2hhZGVyRXhwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXNoYWRlclNvdXJjZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChub2RlSW5mby5pbnB1dHMpIHtcclxuICAgICAgICBpbnB1dHMgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBuYW1lIGluIG5vZGVJbmZvLmlucHV0cykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG5vZGVJbmZvLmlucHV0c1tuYW1lXSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0c1tuYW1lXSA9IG5vZGVJbmZvLmlucHV0c1tuYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlucHV0c1tuYW1lXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlSW5mby5pbnB1dHNbbmFtZV0ubm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBwaW46IG5vZGVJbmZvLmlucHV0c1tuYW1lXS5waW5cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAobm9kZUluZm8ub3V0cHV0cykge1xyXG4gICAgICAgIG91dHB1dHMgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBuYW1lIGluIG5vZGVJbmZvLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgdmFyIG91dHB1dEluZm8gPSBub2RlSW5mby5vdXRwdXRzW25hbWVdO1xyXG4gICAgICAgICAgICBvdXRwdXRzW25hbWVdID0ge307XHJcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLmF0dGFjaG1lbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0c1tuYW1lXS5hdHRhY2htZW50ID0gb3V0cHV0SW5mby5hdHRhY2htZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLmtlZXBMYXN0RnJhbWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0c1tuYW1lXS5rZWVwTGFzdEZyYW1lID0gb3V0cHV0SW5mby5rZWVwTGFzdEZyYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLm91dHB1dExhc3RGcmFtZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRzW25hbWVdLm91dHB1dExhc3RGcmFtZSA9IG91dHB1dEluZm8ub3V0cHV0TGFzdEZyYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLnBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dHNbbmFtZV0ucGFyYW1ldGVycyA9IGNvbnZlcnRQYXJhbWV0ZXIob3V0cHV0SW5mby5wYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBub2RlO1xyXG4gICAgaWYgKHR5cGUgPT09ICdzY2VuZScpIHtcclxuICAgICAgICBub2RlID0gbmV3IENvbXBvU2NlbmVOb2RlKHtcclxuICAgICAgICAgICAgbmFtZTogbm9kZUluZm8ubmFtZSxcclxuICAgICAgICAgICAgc2NlbmU6IG9wdHMuc2NlbmUsXHJcbiAgICAgICAgICAgIGNhbWVyYTogb3B0cy5jYW1lcmEsXHJcbiAgICAgICAgICAgIG91dHB1dHM6IG91dHB1dHNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGUgPT09ICd0ZXh0dXJlJykge1xyXG4gICAgICAgIG5vZGUgPSBuZXcgQ29tcG9UZXh0dXJlTm9kZSh7XHJcbiAgICAgICAgICAgIG5hbWU6IG5vZGVJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgIG91dHB1dHM6IG91dHB1dHNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIERlZmF1bHQgaXMgZmlsdGVyXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBub2RlID0gbmV3IENvbXBvRmlsdGVyTm9kZSh7XHJcbiAgICAgICAgICAgIG5hbWU6IG5vZGVJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgIHNoYWRlcjogc2hhZGVyU291cmNlLFxyXG4gICAgICAgICAgICBpbnB1dHM6IGlucHV0cyxcclxuICAgICAgICAgICAgb3V0cHV0czogb3V0cHV0c1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKG5vZGUpIHtcclxuICAgICAgICBpZiAobm9kZUluZm8ucGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIG5vZGVJbmZvLnBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBub2RlSW5mby5wYXJhbWV0ZXJzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsLmNoYXJBdCgwKSA9PT0gJyMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGxpYi50ZXh0dXJlc1t2YWwuc3Vic3RyKDEpXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUub24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVmb3JlcmVuZGVyJywgY3JlYXRlU2l6ZVNldEhhbmRsZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgdHJ5Q29udmVydEV4cHIodmFsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLm9uKCdiZWZvcmVyZW5kZXInLCB2YWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbm9kZS5zZXRQYXJhbWV0ZXIobmFtZSwgdmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9kZUluZm8uZGVmaW5lcyAmJiBub2RlLnBhc3MpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBub2RlSW5mby5kZWZpbmVzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsID0gbm9kZUluZm8uZGVmaW5lc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIG5vZGUucGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgbmFtZSwgdmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBub2RlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBkZWZhdWx0V2lkdGhGdW5jKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHJldHVybiB3aWR0aDtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0SGVpZ2h0RnVuYyh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb252ZXJ0UGFyYW1ldGVyKHBhcmFtSW5mbykge1xyXG4gICAgdmFyIHBhcmFtID0ge307XHJcbiAgICBpZiAoIXBhcmFtSW5mbykge1xyXG4gICAgICAgIHJldHVybiBwYXJhbTtcclxuICAgIH1cclxuICAgIFsndHlwZScsICdtaW5GaWx0ZXInLCAnbWFnRmlsdGVyJywgJ3dyYXBTJywgJ3dyYXBUJywgJ2ZsaXBZJywgJ3VzZU1pcG1hcCddXHJcbiAgICAgICAgLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICAgICAgICB2YXIgdmFsID0gcGFyYW1JbmZvW25hbWVdO1xyXG4gICAgICAgICAgICBpZiAodmFsICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIGVudW1cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IFRleHR1cmVbdmFsXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHBhcmFtW25hbWVdID0gdmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgdmFyIHNpemVTY2FsZSA9IHBhcmFtSW5mby5zY2FsZSB8fCAxO1xyXG4gICAgWyd3aWR0aCcsICdoZWlnaHQnXVxyXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKHBhcmFtSW5mb1tuYW1lXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsID0gcGFyYW1JbmZvW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbVtuYW1lXSA9IGNyZWF0ZVNpemVQYXJzZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHRyeUNvbnZlcnRFeHByKHZhbCksIHNpemVTY2FsZVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbVtuYW1lXSA9IHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgaWYgKCFwYXJhbS53aWR0aCkge1xyXG4gICAgICAgIHBhcmFtLndpZHRoID0gZGVmYXVsdFdpZHRoRnVuYztcclxuICAgIH1cclxuICAgIGlmICghcGFyYW0uaGVpZ2h0KSB7XHJcbiAgICAgICAgcGFyYW0uaGVpZ2h0ID0gZGVmYXVsdEhlaWdodEZ1bmM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcmFtSW5mby51c2VNaXBtYXAgIT0gbnVsbCkge1xyXG4gICAgICAgIHBhcmFtLnVzZU1pcG1hcCA9IHBhcmFtSW5mby51c2VNaXBtYXA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFyYW07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxvYWRUZXh0dXJlcyhqc29uLCBsaWIsIG9wdHMsIGNhbGxiYWNrKSB7XHJcbiAgICBpZiAoIWpzb24udGV4dHVyZXMpIHtcclxuICAgICAgICBjYWxsYmFjayh7fSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIHRleHR1cmVzID0ge307XHJcbiAgICB2YXIgbG9hZGluZyA9IDA7XHJcblxyXG4gICAgdmFyIGNiZCA9IGZhbHNlO1xyXG4gICAgdmFyIHRleHR1cmVSb290UGF0aCA9IG9wdHMudGV4dHVyZVJvb3RQYXRoO1xyXG4gICAgdXRpbC5lYWNoKGpzb24udGV4dHVyZXMsIGZ1bmN0aW9uKHRleHR1cmVJbmZvLCBuYW1lKSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmU7XHJcbiAgICAgICAgdmFyIHBhdGggPSB0ZXh0dXJlSW5mby5wYXRoO1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzID0gY29udmVydFBhcmFtZXRlcih0ZXh0dXJlSW5mby5wYXJhbWV0ZXJzKTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRoKSAmJiBwYXRoLmxlbmd0aCA9PT0gNikge1xyXG4gICAgICAgICAgICBpZiAodGV4dHVyZVJvb3RQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5tYXAoZnVuY3Rpb24oaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1dGlsLnJlbGF0aXZlMmFic29sdXRlKGl0ZW0sIHRleHR1cmVSb290UGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmVDdWJlKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAodGV4dHVyZVJvb3RQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICBwYXRoID0gdXRpbC5yZWxhdGl2ZTJhYnNvbHV0ZShwYXRoLCB0ZXh0dXJlUm9vdFBhdGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGV4dHVyZS5sb2FkKHBhdGgpO1xyXG4gICAgICAgIGxvYWRpbmcrKztcclxuICAgICAgICB0ZXh0dXJlLm9uY2UoJ3N1Y2Nlc3MnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdGV4dHVyZXNbbmFtZV0gPSB0ZXh0dXJlO1xyXG4gICAgICAgICAgICBsb2FkaW5nLS07XHJcbiAgICAgICAgICAgIGlmIChsb2FkaW5nID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh0ZXh0dXJlcyk7XHJcbiAgICAgICAgICAgICAgICBjYmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAobG9hZGluZyA9PT0gMCAmJiAhY2JkKSB7XHJcbiAgICAgICAgY2FsbGJhY2sodGV4dHVyZXMpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVTaXplU2V0SGFuZGxlcihuYW1lLCBleHByRnVuYykge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIC8vIFBFTkRJTkcgdmlld3BvcnQgc2l6ZSBvciB3aW5kb3cgc2l6ZVxyXG4gICAgICAgIHZhciBkcHIgPSByZW5kZXJlci5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XHJcbiAgICAgICAgLy8gUEVORElORyBJZiBtdWx0aXBseSBkcHIgP1xyXG4gICAgICAgIHZhciB3aWR0aCA9IHJlbmRlcmVyLmdldFdpZHRoKCk7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IHJlbmRlcmVyLmdldEhlaWdodCgpO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBleHByRnVuYyh3aWR0aCwgaGVpZ2h0LCBkcHIpO1xyXG4gICAgICAgIHRoaXMuc2V0UGFyYW1ldGVyKG5hbWUsIHJlc3VsdCk7XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVTaXplUGFyc2VyKG5hbWUsIGV4cHJGdW5jLCBzY2FsZSkge1xyXG4gICAgc2NhbGUgPSBzY2FsZSB8fCAxO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBkcHIgPSByZW5kZXJlci5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gcmVuZGVyZXIuZ2V0V2lkdGgoKSAqIHNjYWxlO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSByZW5kZXJlci5nZXRIZWlnaHQoKSAqIHNjYWxlO1xyXG4gICAgICAgIHJldHVybiBleHByRnVuYyh3aWR0aCwgaGVpZ2h0LCBkcHIpO1xyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gdHJ5Q29udmVydEV4cHIoc3RyaW5nKSB7XHJcbiAgICAvLyBQRU5ESU5HXHJcbiAgICB2YXIgZXhwclJlcyA9IC9eZXhwclxcKCguKilcXCkkLy5leGVjKHN0cmluZyk7XHJcbiAgICBpZiAoZXhwclJlcykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBmdW5jID0gbmV3IEZ1bmN0aW9uKCd3aWR0aCcsICdoZWlnaHQnLCAnZHByJywgJ3JldHVybiAnICsgZXhwclJlc1sxXSk7XHJcbiAgICAgICAgICAgIC8vIFRyeSBydW4gdFxyXG4gICAgICAgICAgICBmdW5jKDEsIDEpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBleHByZXNzaW9uLicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ29tcG9zaXRvcjtcclxuIiwiLy8gREVQUkVDQVRFRFxyXG5pbXBvcnQgY3JlYXRlQ29tcG9zaXRvciBmcm9tICcuLi9jcmVhdGVDb21wb3NpdG9yJztcclxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ29tcG9zaXRvcjsiLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5nYnVmZmVyLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbiNpZiBkZWZpbmVkKFNFQ09ORF9QQVNTKSB8fCBkZWZpbmVkKEZJUlNUX1BBU1MpXFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdDtcXG51bmlmb3JtIHZlYzIgdXZPZmZzZXQ7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuI2VuZGlmXFxuI2lmZGVmIEZJUlNUX1BBU1NcXG51bmlmb3JtIG1hdDQgd29ybGRJbnZlcnNlVHJhbnNwb3NlIDogV09STERJTlZFUlNFVFJBTlNQT1NFO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbnZhcnlpbmcgdmVjMyB2X05vcm1hbDtcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XFxuYXR0cmlidXRlIHZlYzQgdGFuZ2VudCA6IFRBTkdFTlQ7XFxudmFyeWluZyB2ZWMzIHZfVGFuZ2VudDtcXG52YXJ5aW5nIHZlYzMgdl9CaXRhbmdlbnQ7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxuI2lmZGVmIFRISVJEX1BBU1NcXG51bmlmb3JtIG1hdDQgcHJldldvcmxkVmlld1Byb2plY3Rpb247XFxudmFyeWluZyB2ZWM0IHZfVmlld1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCB2X1ByZXZWaWV3UG9zaXRpb247XFxuI2lmZGVmIFNLSU5OSU5HXFxuI2lmZGVmIFVTRV9TS0lOX01BVFJJQ0VTX1RFWFRVUkVcXG51bmlmb3JtIHNhbXBsZXIyRCBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZTtcXG5tYXQ0IGdldFByZXZTa2luTWF0cml4KGZsb2F0IGlkeCkge1xcbiByZXR1cm4gZ2V0U2tpbk1hdHJpeChwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZSwgaWR4KTtcXG59XFxuI2Vsc2VcXG51bmlmb3JtIG1hdDQgcHJldlNraW5NYXRyaXhbSk9JTlRfQ09VTlRdO1xcbm1hdDQgZ2V0UHJldlNraW5NYXRyaXgoZmxvYXQgaWR4KSB7XFxuIHJldHVybiBwcmV2U2tpbk1hdHJpeFtpbnQoaWR4KV07XFxufVxcbiNlbmRpZlxcbiNlbmRpZlxcbiNlbmRpZlxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiB2ZWMzIHByZXZTa2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4jaWZkZWYgRklSU1RfUEFTU1xcbiB2ZWMzIHNraW5uZWROb3JtYWwgPSBub3JtYWw7XFxuIHZlYzMgc2tpbm5lZFRhbmdlbnQgPSB0YW5nZW50Lnh5ejtcXG4gYm9vbCBoYXNUYW5nZW50ID0gZG90KHRhbmdlbnQsIHRhbmdlbnQpID4gMC4wO1xcbiNlbmRpZlxcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gI2lmZGVmIEZJUlNUX1BBU1NcXG4gc2tpbm5lZE5vcm1hbCA9IChza2luTWF0cml4V1MgKiB2ZWM0KG5vcm1hbCwgMC4wKSkueHl6O1xcbiBpZiAoaGFzVGFuZ2VudCkge1xcbiBza2lubmVkVGFuZ2VudCA9IChza2luTWF0cml4V1MgKiB2ZWM0KHRhbmdlbnQueHl6LCAwLjApKS54eXo7XFxuIH1cXG4gI2VuZGlmXFxuICNpZmRlZiBUSElSRF9QQVNTXFxuIHtcXG4gbWF0NCBwcmV2U2tpbk1hdHJpeFdTID0gZ2V0UHJldlNraW5NYXRyaXgoam9pbnQueCkgKiB3ZWlnaHQueDtcXG4gaWYgKHdlaWdodC55ID4gMWUtNCkgeyBwcmV2U2tpbk1hdHJpeFdTICs9IGdldFByZXZTa2luTWF0cml4KGpvaW50LnkpICogd2VpZ2h0Lnk7IH1cXG4gaWYgKHdlaWdodC56ID4gMWUtNCkgeyBwcmV2U2tpbk1hdHJpeFdTICs9IGdldFByZXZTa2luTWF0cml4KGpvaW50LnopICogd2VpZ2h0Lno7IH1cXG4gZmxvYXQgd2VpZ2h0VyA9IDEuMC13ZWlnaHQueC13ZWlnaHQueS13ZWlnaHQuejtcXG4gaWYgKHdlaWdodFcgPiAxZS00KSB7IHByZXZTa2luTWF0cml4V1MgKz0gZ2V0UHJldlNraW5NYXRyaXgoam9pbnQudykgKiB3ZWlnaHRXOyB9XFxuIHByZXZTa2lubmVkUG9zaXRpb24gPSAocHJldlNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gfVxcbiAjZW5kaWZcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChTRUNPTkRfUEFTUykgfHwgZGVmaW5lZChGSVJTVF9QQVNTKVxcbiB2X1RleGNvb3JkID0gdGV4Y29vcmQgKiB1dlJlcGVhdCArIHV2T2Zmc2V0O1xcbiNlbmRpZlxcbiNpZmRlZiBGSVJTVF9QQVNTXFxuIHZfTm9ybWFsID0gbm9ybWFsaXplKCh3b3JsZEludmVyc2VUcmFuc3Bvc2UgKiB2ZWM0KHNraW5uZWROb3JtYWwsIDAuMCkpLnh5eik7XFxuIGlmIChoYXNUYW5nZW50KSB7XFxuIHZfVGFuZ2VudCA9IG5vcm1hbGl6ZSgod29ybGRJbnZlcnNlVHJhbnNwb3NlICogdmVjNChza2lubmVkVGFuZ2VudCwgMC4wKSkueHl6KTtcXG4gdl9CaXRhbmdlbnQgPSBub3JtYWxpemUoY3Jvc3Modl9Ob3JtYWwsIHZfVGFuZ2VudCkgKiB0YW5nZW50LncpO1xcbiB9XFxuIHZfV29ybGRQb3NpdGlvbiA9ICh3b3JsZCAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApKS54eXo7XFxuI2VuZGlmXFxuI2lmZGVmIFRISVJEX1BBU1NcXG4gdl9WaWV3UG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxuIHZfUHJldlZpZXdQb3NpdGlvbiA9IHByZXZXb3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChwcmV2U2tpbm5lZFBvc2l0aW9uLCAxLjApO1xcbiNlbmRpZlxcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5kZWZlcnJlZC5nYnVmZmVyMS5mcmFnbWVudFxcbnVuaWZvcm0gbWF0NCB2aWV3SW52ZXJzZSA6IFZJRVdJTlZFUlNFO1xcbnVuaWZvcm0gZmxvYXQgZ2xvc3NpbmVzcztcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Ob3JtYWw7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG51bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZU1hcDtcXG52YXJ5aW5nIHZlYzMgdl9UYW5nZW50O1xcbnZhcnlpbmcgdmVjMyB2X0JpdGFuZ2VudDtcXG51bmlmb3JtIHNhbXBsZXIyRCByb3VnaEdsb3NzTWFwO1xcbnVuaWZvcm0gYm9vbCB1c2VSb3VnaEdsb3NzTWFwO1xcbnVuaWZvcm0gYm9vbCB1c2VSb3VnaG5lc3M7XFxudW5pZm9ybSBib29sIGRvdWJsZVNpZGVkO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuMDtcXG51bmlmb3JtIGZsb2F0IGFscGhhOiAxLjA7XFxudW5pZm9ybSBpbnQgcm91Z2hHbG9zc0NoYW5uZWw6IDA7XFxuZmxvYXQgaW5kZXhpbmdUZXhlbChpbiB2ZWM0IHRleGVsLCBpbiBpbnQgaWR4KSB7XFxuIGlmIChpZHggPT0gMykgcmV0dXJuIHRleGVsLmE7XFxuIGVsc2UgaWYgKGlkeCA9PSAxKSByZXR1cm4gdGV4ZWwuZztcXG4gZWxzZSBpZiAoaWR4ID09IDIpIHJldHVybiB0ZXhlbC5iO1xcbiBlbHNlIHJldHVybiB0ZXhlbC5yO1xcbn1cXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBOID0gdl9Ob3JtYWw7XFxuIGlmIChkb3VibGVTaWRlZCkge1xcbiB2ZWMzIGV5ZVBvcyA9IHZpZXdJbnZlcnNlWzNdLnh5ejtcXG4gdmVjMyBWID0gZXllUG9zIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiBpZiAoZG90KE4sIFYpIDwgMC4wKSB7XFxuIE4gPSAtTjtcXG4gfVxcbiB9XFxuIGlmIChhbHBoYUN1dG9mZiA+IDAuMCkge1xcbiBmbG9hdCBhID0gdGV4dHVyZTJEKGRpZmZ1c2VNYXAsIHZfVGV4Y29vcmQpLmEgKiBhbHBoYTtcXG4gaWYgKGEgPCBhbHBoYUN1dG9mZikge1xcbiBkaXNjYXJkO1xcbiB9XFxuIH1cXG4gaWYgKGRvdCh2X1RhbmdlbnQsIHZfVGFuZ2VudCkgPiAwLjApIHtcXG4gdmVjMyBub3JtYWxUZXhlbCA9IHRleHR1cmUyRChub3JtYWxNYXAsIHZfVGV4Y29vcmQpLnh5ejtcXG4gaWYgKGRvdChub3JtYWxUZXhlbCwgbm9ybWFsVGV4ZWwpID4gMC4wKSB7IE4gPSBub3JtYWxUZXhlbCAqIDIuMCAtIDEuMDtcXG4gbWF0MyB0Ym4gPSBtYXQzKHZfVGFuZ2VudCwgdl9CaXRhbmdlbnQsIHZfTm9ybWFsKTtcXG4gTiA9IG5vcm1hbGl6ZSh0Ym4gKiBOKTtcXG4gfVxcbiB9XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSAoTiArIDEuMCkgKiAwLjU7XFxuIGZsb2F0IGcgPSBnbG9zc2luZXNzO1xcbiBpZiAodXNlUm91Z2hHbG9zc01hcCkge1xcbiBmbG9hdCBnMiA9IGluZGV4aW5nVGV4ZWwodGV4dHVyZTJEKHJvdWdoR2xvc3NNYXAsIHZfVGV4Y29vcmQpLCByb3VnaEdsb3NzQ2hhbm5lbCk7XFxuIGlmICh1c2VSb3VnaG5lc3MpIHtcXG4gZzIgPSAxLjAgLSBnMjtcXG4gfVxcbiBnID0gY2xhbXAoZzIgKyAoZyAtIDAuNSkgKiAyLjAsIDAuMCwgMS4wKTtcXG4gfVxcbiBnbF9GcmFnQ29sb3IuYSA9IGcgKyAwLjAwNTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5kZWZlcnJlZC5nYnVmZmVyMi5mcmFnbWVudFxcbnVuaWZvcm0gc2FtcGxlcjJEIGRpZmZ1c2VNYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xcbnVuaWZvcm0gdmVjMyBjb2xvcjtcXG51bmlmb3JtIGZsb2F0IG1ldGFsbmVzcztcXG51bmlmb3JtIGJvb2wgdXNlTWV0YWxuZXNzTWFwO1xcbnVuaWZvcm0gYm9vbCBsaW5lYXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYUN1dG9mZjogMC4wO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE6IDEuMDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5zcmdiXFxudm9pZCBtYWluKClcXG57XFxuIGZsb2F0IG0gPSBtZXRhbG5lc3M7XFxuIGlmICh1c2VNZXRhbG5lc3NNYXApIHtcXG4gdmVjNCBtZXRhbG5lc3NUZXhlbCA9IHRleHR1cmUyRChtZXRhbG5lc3NNYXAsIHZfVGV4Y29vcmQpO1xcbiBtID0gY2xhbXAobWV0YWxuZXNzVGV4ZWwuciArIChtICogMi4wIC0gMS4wKSwgMC4wLCAxLjApO1xcbiB9XFxuIHZlYzQgdGV4ZWwgPSB0ZXh0dXJlMkQoZGlmZnVzZU1hcCwgdl9UZXhjb29yZCk7XFxuIGlmIChsaW5lYXIpIHtcXG4gdGV4ZWwgPSBzUkdCVG9MaW5lYXIodGV4ZWwpO1xcbiB9XFxuIGlmIChhbHBoYUN1dG9mZiA+IDAuMCkge1xcbiBmbG9hdCBhID0gdGV4ZWwuYSAqIGFscGhhO1xcbiBpZiAoYSA8IGFscGhhQ3V0b2ZmKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4gfVxcbiBnbF9GcmFnQ29sb3IucmdiID0gdGV4ZWwucmdiICogY29sb3I7XFxuIGdsX0ZyYWdDb2xvci5hID0gbSArIDAuMDA1O1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIzLmZyYWdtZW50XFxudW5pZm9ybSBib29sIGZpcnN0UmVuZGVyO1xcbnZhcnlpbmcgdmVjNCB2X1ZpZXdQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzQgdl9QcmV2Vmlld1Bvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMyIGEgPSB2X1ZpZXdQb3NpdGlvbi54eSAvIHZfVmlld1Bvc2l0aW9uLnc7XFxuIHZlYzIgYiA9IHZfUHJldlZpZXdQb3NpdGlvbi54eSAvIHZfUHJldlZpZXdQb3NpdGlvbi53O1xcbiBpZiAoZmlyc3RSZW5kZXIpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcbiB9XFxuIGVsc2Uge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KChhIC0gYikgKiAwLjUgKyAwLjUsIDAuMCwgMS4wKTtcXG4gfVxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIuZGVidWdcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlNDtcXG51bmlmb3JtIGludCBkZWJ1ZzogMDtcXG52b2lkIG1haW4gKClcXG57XFxuIEBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5nYnVmZmVyX3JlYWRcXG4gaWYgKGRlYnVnID09IDApIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChOLCAxLjApO1xcbiB9XFxuIGVsc2UgaWYgKGRlYnVnID09IDEpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKHopLCAxLjApO1xcbiB9XFxuIGVsc2UgaWYgKGRlYnVnID09IDIpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gfVxcbiBlbHNlIGlmIChkZWJ1ZyA9PSAzKSB7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhnbG9zc2luZXNzKSwgMS4wKTtcXG4gfVxcbiBlbHNlIGlmIChkZWJ1ZyA9PSA0KSB7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhtZXRhbG5lc3MpLCAxLjApO1xcbiB9XFxuIGVsc2UgaWYgKGRlYnVnID09IDUpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChhbGJlZG8sIDEuMCk7XFxuIH1cXG4gZWxzZSB7XFxuIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmU0LCB1dik7XFxuIGNvbG9yLnJnIC09IDAuNTtcXG4gY29sb3IucmcgKj0gMi4wO1xcbiBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG4gfVxcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2hlYWRcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTE7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMztcXG51bmlmb3JtIHZlYzIgd2luZG93U2l6ZTogV0lORE9XX1NJWkU7XFxudW5pZm9ybSB2ZWM0IHZpZXdwb3J0OiBWSUVXUE9SVDtcXG51bmlmb3JtIG1hdDQgdmlld1Byb2plY3Rpb25JbnY7XFxuI2lmZGVmIERFUFRIX0VOQ09ERURcXG5AaW1wb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG4jZW5kaWZcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC8gd2luZG93U2l6ZTtcXG4gdmVjMiB1djIgPSAoZ2xfRnJhZ0Nvb3JkLnh5IC0gdmlld3BvcnQueHkpIC8gdmlld3BvcnQuenc7XFxuIHZlYzQgdGV4ZWwxID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMSwgdXYpO1xcbiB2ZWM0IHRleGVsMyA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTMsIHV2KTtcXG4gaWYgKGRvdCh0ZXhlbDEucmdiLCB2ZWMzKDEuMCkpID09IDAuMCkge1xcbiBkaXNjYXJkO1xcbiB9XFxuIGZsb2F0IGdsb3NzaW5lc3MgPSB0ZXhlbDEuYTtcXG4gZmxvYXQgbWV0YWxuZXNzID0gdGV4ZWwzLmE7XFxuIHZlYzMgTiA9IHRleGVsMS5yZ2IgKiAyLjAgLSAxLjA7XFxuIGZsb2F0IHogPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUyLCB1dikuciAqIDIuMCAtIDEuMDtcXG4gdmVjMiB4eSA9IHV2MiAqIDIuMCAtIDEuMDtcXG4gdmVjNCBwcm9qZWN0ZWRQb3MgPSB2ZWM0KHh5LCB6LCAxLjApO1xcbiB2ZWM0IHA0ID0gdmlld1Byb2plY3Rpb25JbnYgKiBwcm9qZWN0ZWRQb3M7XFxuIHZlYzMgcG9zaXRpb24gPSBwNC54eXogLyBwNC53O1xcbiB2ZWMzIGFsYmVkbyA9IHRleGVsMy5yZ2I7XFxuIHZlYzMgZGlmZnVzZUNvbG9yID0gYWxiZWRvICogKDEuMCAtIG1ldGFsbmVzcyk7XFxuIHZlYzMgc3BlY3VsYXJDb2xvciA9IG1peCh2ZWMzKDAuMDQpLCBhbGJlZG8sIG1ldGFsbmVzcyk7XFxuQGVuZFxcbkBleHBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbmZsb2F0IERfUGhvbmcoaW4gZmxvYXQgZywgaW4gZmxvYXQgbmRoKSB7XFxuIGZsb2F0IGEgPSBwb3coODE5Mi4wLCBnKTtcXG4gcmV0dXJuIChhICsgMi4wKSAvIDguMCAqIHBvdyhuZGgsIGEpO1xcbn1cXG5mbG9hdCBEX0dHWChpbiBmbG9hdCBnLCBpbiBmbG9hdCBuZGgpIHtcXG4gZmxvYXQgciA9IDEuMCAtIGc7XFxuIGZsb2F0IGEgPSByICogcjtcXG4gZmxvYXQgdG1wID0gbmRoICogbmRoICogKGEgLSAxLjApICsgMS4wO1xcbiByZXR1cm4gYSAvICgzLjE0MTU5MjYgKiB0bXAgKiB0bXApO1xcbn1cXG52ZWMzIEZfU2NobGljayhpbiBmbG9hdCBuZHYsIHZlYzMgc3BlYykge1xcbiByZXR1cm4gc3BlYyArICgxLjAgLSBzcGVjKSAqIHBvdygxLjAgLSBuZHYsIDUuMCk7XFxufVxcbnZlYzMgbGlnaHRFcXVhdGlvbihcXG4gaW4gdmVjMyBsaWdodENvbG9yLCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciwgaW4gdmVjMyBzcGVjdWxhckNvbG9yLFxcbiBpbiBmbG9hdCBuZGwsIGluIGZsb2F0IG5kaCwgaW4gZmxvYXQgbmR2LCBpbiBmbG9hdCBnXFxuKVxcbntcXG4gcmV0dXJuIG5kbCAqIGxpZ2h0Q29sb3JcXG4gKiAoZGlmZnVzZUNvbG9yICsgRF9QaG9uZyhnLCBuZGgpICogRl9TY2hsaWNrKG5kdiwgc3BlY3VsYXJDb2xvcikpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuaW1wb3J0IFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0NCc7XHJcblxyXG5pbXBvcnQgZ2J1ZmZlckVzc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9nYnVmZmVyLmdsc2wuanMnO1xyXG5pbXBvcnQgY2h1bmtFc3NsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvY2h1bmsuZ2xzbC5qcyc7XHJcblxyXG5TaGFkZXIuaW1wb3J0KGdidWZmZXJFc3NsKTtcclxuU2hhZGVyLmltcG9ydChjaHVua0Vzc2wpO1xyXG5cclxuZnVuY3Rpb24gY3JlYXRlRmlsbENhbnZhcyhjb2xvcikge1xyXG4gICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgY2FudmFzLndpZHRoID0gY2FudmFzLmhlaWdodCA9IDE7XHJcbiAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBjdHguZmlsbFN0eWxlID0gY29sb3IgfHwgJyMwMDAnO1xyXG4gICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEsIDEpO1xyXG5cclxuICAgIHJldHVybiBjYW52YXM7XHJcbn1cclxuXHJcbi8vIFRPRE8gc3BlY3VsYXJDb2xvclxyXG4vLyBUT0RPIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50XHJcbmZ1bmN0aW9uIGdldEdldFVuaWZvcm1Ib29rMShkZWZhdWx0Tm9ybWFsTWFwLCBkZWZhdWx0Um91Z2huZXNzTWFwLCBkZWZhdWx0RGlmZnVzZU1hcCkge1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgZ0J1ZmZlck1hdCwgc3ltYm9sKSB7XHJcbiAgICAgICAgdmFyIHN0YW5kYXJkTWF0ZXJpYWwgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgICAgIGlmIChzeW1ib2wgPT09ICdkb3VibGVTaWRlZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAndXZSZXBlYXQnIHx8IHN5bWJvbCA9PT0gJ3V2T2Zmc2V0JyB8fCBzeW1ib2wgPT09ICdhbHBoYScpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KHN5bWJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ25vcm1hbE1hcCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KHN5bWJvbCkgfHwgZGVmYXVsdE5vcm1hbE1hcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAnZGlmZnVzZU1hcCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KHN5bWJvbCkgfHwgZGVmYXVsdERpZmZ1c2VNYXA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ2FscGhhQ3V0b2ZmJykge1xyXG4gICAgICAgICAgICAvLyBUT0RPIERJRkZVU0VNQVBfQUxQSEFfQUxQSEFcclxuICAgICAgICAgICAgaWYgKHN0YW5kYXJkTWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsICdBTFBIQV9URVNUJykpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhbHBoYUN1dG9mZiA9IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdhbHBoYUN1dG9mZicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFscGhhQ3V0b2ZmIHx8IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgdXNlUm91Z2huZXNzV29ya2Zsb3cgPSBzdGFuZGFyZE1hdGVyaWFsLmlzRGVmaW5lZCgnZnJhZ21lbnQnLCAnVVNFX1JPVUdITkVTUycpO1xyXG4gICAgICAgICAgICB2YXIgcm91Z2hHbG9zc01hcCA9IHVzZVJvdWdobmVzc1dvcmtmbG93ID8gc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ3JvdWdobmVzc01hcCcpIDogc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ2dsb3NzaW5lc3NNYXAnKTtcclxuICAgICAgICAgICAgc3dpdGNoIChzeW1ib2wpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2dsb3NzaW5lc3MnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VSb3VnaG5lc3NXb3JrZmxvdyA/ICgxLjAgLSBzdGFuZGFyZE1hdGVyaWFsLmdldCgncm91Z2huZXNzJykpIDogc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ2dsb3NzaW5lc3MnKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3JvdWdoR2xvc3NNYXAnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByb3VnaEdsb3NzTWFwO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAndXNlUm91Z2hHbG9zc01hcCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhcm91Z2hHbG9zc01hcDtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3VzZVJvdWdobmVzcyc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZVJvdWdobmVzc1dvcmtmbG93O1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncm91Z2hHbG9zc0NoYW5uZWwnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VSb3VnaG5lc3NXb3JrZmxvd1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0RGVmaW5lKCdmcmFnbWVudCcsICdST1VHSE5FU1NfQ0hBTk5FTCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhbmRhcmRNYXRlcmlhbC5nZXREZWZpbmUoJ2ZyYWdtZW50JywgJ0dMT1NTSU5FU1NfQ0hBTk5FTCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0R2V0VW5pZm9ybUhvb2syKGRlZmF1bHREaWZmdXNlTWFwLCBkZWZhdWx0TWV0YWxuZXNzTWFwKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlbmRlcmFibGUsIGdCdWZmZXJNYXQsIHN5bWJvbCkge1xyXG4gICAgICAgIHZhciBzdGFuZGFyZE1hdGVyaWFsID0gcmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgICAgICBzd2l0Y2ggKHN5bWJvbCkge1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6XHJcbiAgICAgICAgICAgIGNhc2UgJ3V2UmVwZWF0JzpcclxuICAgICAgICAgICAgY2FzZSAndXZPZmZzZXQnOlxyXG4gICAgICAgICAgICBjYXNlICdhbHBoYSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5nZXQoc3ltYm9sKTtcclxuICAgICAgICAgICAgY2FzZSAnbWV0YWxuZXNzJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1hdGVyaWFsLmdldCgnbWV0YWxuZXNzJykgfHwgMDtcclxuICAgICAgICAgICAgY2FzZSAnZGlmZnVzZU1hcCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5nZXQoc3ltYm9sKSB8fCBkZWZhdWx0RGlmZnVzZU1hcDtcclxuICAgICAgICAgICAgY2FzZSAnbWV0YWxuZXNzTWFwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1hdGVyaWFsLmdldChzeW1ib2wpIHx8IGRlZmF1bHRNZXRhbG5lc3NNYXA7XHJcbiAgICAgICAgICAgIGNhc2UgJ3VzZU1ldGFsbmVzc01hcCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gISFzdGFuZGFyZE1hdGVyaWFsLmdldCgnbWV0YWxuZXNzTWFwJyk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xpbmVhcic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5pc0RlZmluZWQoJ1NSR0JfREVDT0RFJyk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2FscGhhQ3V0b2ZmJzpcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxyXG4gICAgICAgICAgICAgICAgaWYgKHN0YW5kYXJkTWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsICdBTFBIQV9URVNUJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYWxwaGFDdXRvZmYgPSBzdGFuZGFyZE1hdGVyaWFsLmdldCgnYWxwaGFDdXRvZmYnKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxwaGFDdXRvZmYgfHwgMC4wO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDAuMDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG4vKipcclxuICogR0J1ZmZlciBpcyBwcm92aWRlZCBmb3IgZGVmZXJyZWQgcmVuZGVyaW5nIGFuZCBTU0FPLCBTU1IgcGFzcy5cclxuICogSXQgd2lsbCBkbyB0aHJlZSBwYXNzZXMgcmVuZGVyaW5nIHRvIGZvdXIgdGFyZ2V0IHRleHR1cmVzLiBTZWVcclxuICogKyB7QGxpbmsgY2xheS5kZWZlcnJlZC5HQnVmZmVyI2dldFRhcmdldFRleHR1cmUxfVxyXG4gKiArIHtAbGluayBjbGF5LmRlZmVycmVkLkdCdWZmZXIjZ2V0VGFyZ2V0VGV4dHVyZTJ9XHJcbiAqICsge0BsaW5rIGNsYXkuZGVmZXJyZWQuR0J1ZmZlciNnZXRUYXJnZXRUZXh0dXJlM31cclxuICogKyB7QGxpbmsgY2xheS5kZWZlcnJlZC5HQnVmZmVyI2dldFRhcmdldFRleHR1cmU0fVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuZGVmZXJyZWQuR0J1ZmZlclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEdCdWZmZXIgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIGNvbW1vblRleHR1cmVPcHRzID0ge1xyXG4gICAgICAgIG1pbkZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxyXG4gICAgICAgIG1hZ0ZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxyXG4gICAgICAgIHdyYXBTOiBUZXh0dXJlLkNMQU1QX1RPX0VER0UsXHJcbiAgICAgICAgd3JhcFQ6IFRleHR1cmUuQ0xBTVBfVE9fRURHRSxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5kZWZlcnJlZC5HQnVmZmVyIyAqLyB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBnYnVmZmVyIHRleHR1cmUgMS5cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbmFibGVUYXJnZXRUZXh0dXJlMTogdHJ1ZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIGdidWZmZXIgdGV4dHVyZSAyLlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVuYWJsZVRhcmdldFRleHR1cmUyOiB0cnVlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgZ2J1ZmZlciB0ZXh0dXJlIDMuXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW5hYmxlVGFyZ2V0VGV4dHVyZTM6IHRydWUsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBnYnVmZmVyIHRleHR1cmUgNC5cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbmFibGVUYXJnZXRUZXh0dXJlNDogZmFsc2UsXHJcblxyXG4gICAgICAgIHJlbmRlclRyYW5zcGFyZW50OiBmYWxzZSxcclxuXHJcbiAgICAgICAgX2dCdWZmZXJSZW5kZXJMaXN0OiBbXSxcclxuICAgICAgICAvLyAtIFI6IG5vcm1hbC54XHJcbiAgICAgICAgLy8gLSBHOiBub3JtYWwueVxyXG4gICAgICAgIC8vIC0gQjogbm9ybWFsLnpcclxuICAgICAgICAvLyAtIEE6IGdsb3NzaW5lc3NcclxuICAgICAgICBfZ0J1ZmZlclRleDE6IG5ldyBUZXh0dXJlMkQoT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgdHlwZTogVGV4dHVyZS5IQUxGX0ZMT0FUXHJcbiAgICAgICAgfSwgY29tbW9uVGV4dHVyZU9wdHMpKSxcclxuXHJcbiAgICAgICAgLy8gLSBSOiBkZXB0aFxyXG4gICAgICAgIF9nQnVmZmVyVGV4MjogbmV3IFRleHR1cmUyRChPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgLy8gZm9ybWF0OiBUZXh0dXJlLkRFUFRIX0NPTVBPTkVOVCxcclxuICAgICAgICAgICAgLy8gdHlwZTogVGV4dHVyZS5VTlNJR05FRF9JTlRcclxuXHJcbiAgICAgICAgICAgIGZvcm1hdDogVGV4dHVyZS5ERVBUSF9TVEVOQ0lMLFxyXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMXHJcbiAgICAgICAgfSwgY29tbW9uVGV4dHVyZU9wdHMpKSxcclxuXHJcbiAgICAgICAgLy8gLSBSOiBhbGJlZG8uclxyXG4gICAgICAgIC8vIC0gRzogYWxiZWRvLmdcclxuICAgICAgICAvLyAtIEI6IGFsYmVkby5iXHJcbiAgICAgICAgLy8gLSBBOiBtZXRhbG5lc3NcclxuICAgICAgICBfZ0J1ZmZlclRleDM6IG5ldyBUZXh0dXJlMkQoY29tbW9uVGV4dHVyZU9wdHMpLFxyXG5cclxuICAgICAgICBfZ0J1ZmZlclRleDQ6IG5ldyBUZXh0dXJlMkQoT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgIC8vIEZMT0FUIFRleHR1cmUgaGFzIGJ1ZyBvbiBpT1MuIGlzIEhBTEZfRkxPQVQgZW5vdWdoP1xyXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkhBTEZfRkxPQVRcclxuICAgICAgICB9LCBjb21tb25UZXh0dXJlT3B0cykpLFxyXG5cclxuICAgICAgICBfZGVmYXVsdE5vcm1hbE1hcDogbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjMDAwJylcclxuICAgICAgICB9KSxcclxuICAgICAgICBfZGVmYXVsdFJvdWdobmVzc01hcDogbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjZmZmJylcclxuICAgICAgICB9KSxcclxuICAgICAgICBfZGVmYXVsdE1ldGFsbmVzc01hcDogbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjZmZmJylcclxuICAgICAgICB9KSxcclxuICAgICAgICBfZGVmYXVsdERpZmZ1c2VNYXA6IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICBpbWFnZTogY3JlYXRlRmlsbENhbnZhcygnI2ZmZicpXHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIF9mcmFtZUJ1ZmZlcjogbmV3IEZyYW1lQnVmZmVyKCksXHJcblxyXG4gICAgICAgIF9nQnVmZmVyTWF0ZXJpYWwxOiBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoXHJcbiAgICAgICAgICAgICAgICBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmdidWZmZXIudmVydGV4JyksXHJcbiAgICAgICAgICAgICAgICBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmdidWZmZXIxLmZyYWdtZW50JylcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdmVydGV4RGVmaW5lczoge1xyXG4gICAgICAgICAgICAgICAgRklSU1RfUEFTUzogbnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmcmFnbWVudERlZmluZXM6IHtcclxuICAgICAgICAgICAgICAgIEZJUlNUX1BBU1M6IG51bGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIF9nQnVmZmVyTWF0ZXJpYWwyOiBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoXHJcbiAgICAgICAgICAgICAgICBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmdidWZmZXIudmVydGV4JyksXHJcbiAgICAgICAgICAgICAgICBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmdidWZmZXIyLmZyYWdtZW50JylcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdmVydGV4RGVmaW5lczoge1xyXG4gICAgICAgICAgICAgICAgU0VDT05EX1BBU1M6IG51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZnJhZ21lbnREZWZpbmVzOiB7XHJcbiAgICAgICAgICAgICAgICBTRUNPTkRfUEFTUzogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgX2dCdWZmZXJNYXRlcmlhbDM6IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlci52ZXJ0ZXgnKSxcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlcjMuZnJhZ21lbnQnKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB2ZXJ0ZXhEZWZpbmVzOiB7XHJcbiAgICAgICAgICAgICAgICBUSElSRF9QQVNTOiBudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZyYWdtZW50RGVmaW5lczoge1xyXG4gICAgICAgICAgICAgICAgVEhJUkRfUEFTUzogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIF9kZWJ1Z1Bhc3M6IG5ldyBQYXNzKHtcclxuICAgICAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlci5kZWJ1ZycpXHJcbiAgICAgICAgfSlcclxuICAgIH07XHJcbn0sIC8qKiBAbGVuZHMgY2xheS5kZWZlcnJlZC5HQnVmZmVyIyAqL3tcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBHIEJ1ZmZlciBzaXplLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XHJcbiAgICAgKi9cclxuICAgIHJlc2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgICAgICBpZiAodGhpcy5fZ0J1ZmZlclRleDEud2lkdGggPT09IHdpZHRoXHJcbiAgICAgICAgICAgICYmIHRoaXMuX2dCdWZmZXJUZXgxLmhlaWdodCA9PT0gaGVpZ2h0XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDEud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4MS5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXgyLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDIuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4My53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXgzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDQud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4NC5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFRPRE8gaXMgZHByIG5lZWRlZD9cclxuICAgIHNldFZpZXdwb3J0OiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgZHByKSB7XHJcbiAgICAgICAgdmFyIHZpZXdwb3J0O1xyXG4gICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgdmlld3BvcnQgPSB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmlld3BvcnQgPSB7XHJcbiAgICAgICAgICAgICAgICB4OiB4LCB5OiB5LFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICAgICAgICAgIGRldmljZVBpeGVsUmF0aW86IGRwciB8fCAxXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnZpZXdwb3J0ID0gdmlld3BvcnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFZpZXdwb3J0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lQnVmZmVyLnZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmFtZUJ1ZmZlci52aWV3cG9ydDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB4OiAwLCB5OiAwLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMuX2dCdWZmZXJUZXgxLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLl9nQnVmZmVyVGV4MS5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBkZXZpY2VQaXhlbFJhdGlvOiAxXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBHQnVmZmVyXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuU2NlbmV9IHNjZW5lXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBvcHRzKSB7XHJcbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XHJcblxyXG4gICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICB2YXIgZnJhbWVCdWZmZXIgPSB0aGlzLl9mcmFtZUJ1ZmZlcjtcclxuICAgICAgICB2YXIgdmlld3BvcnQgPSBmcmFtZUJ1ZmZlci52aWV3cG9ydDtcclxuXHJcbiAgICAgICAgdmFyIHJlbmRlckxpc3QgPSBzY2VuZS51cGRhdGVSZW5kZXJMaXN0KGNhbWVyYSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHZhciBvcGFxdWVMaXN0ID0gcmVuZGVyTGlzdC5vcGFxdWU7XHJcbiAgICAgICAgdmFyIHRyYW5zcGFyZW50TGlzdCA9IHJlbmRlckxpc3QudHJhbnNwYXJlbnQ7XHJcblxyXG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciBnQnVmZmVyUmVuZGVyTGlzdCA9IHRoaXMuX2dCdWZmZXJSZW5kZXJMaXN0O1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3BhcXVlTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIW9wYXF1ZUxpc3RbaV0uaWdub3JlR0J1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgZ0J1ZmZlclJlbmRlckxpc3Rbb2Zmc2V0KytdID0gb3BhcXVlTGlzdFtpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5yZW5kZXJUcmFuc3BhcmVudCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zcGFyZW50TGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0cmFuc3BhcmVudExpc3RbaV0uaWdub3JlR0J1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGdCdWZmZXJSZW5kZXJMaXN0W29mZnNldCsrXSA9IHRyYW5zcGFyZW50TGlzdFtpXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBnQnVmZmVyUmVuZGVyTGlzdC5sZW5ndGggPSBvZmZzZXQ7XHJcblxyXG4gICAgICAgIGdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7XHJcbiAgICAgICAgZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICBnbC5kaXNhYmxlKGdsLkJMRU5EKTtcclxuXHJcbiAgICAgICAgdmFyIGVuYWJsZVRhcmdldFRleHR1cmUxID0gdGhpcy5lbmFibGVUYXJnZXRUZXh0dXJlMTtcclxuICAgICAgICB2YXIgZW5hYmxlVGFyZ2V0VGV4dHVyZTIgPSB0aGlzLmVuYWJsZVRhcmdldFRleHR1cmUyO1xyXG4gICAgICAgIHZhciBlbmFibGVUYXJnZXRUZXh0dXJlMyA9IHRoaXMuZW5hYmxlVGFyZ2V0VGV4dHVyZTM7XHJcbiAgICAgICAgdmFyIGVuYWJsZVRhcmdldFRleHR1cmU0ID0gdGhpcy5lbmFibGVUYXJnZXRUZXh0dXJlNDtcclxuICAgICAgICBpZiAoIWVuYWJsZVRhcmdldFRleHR1cmUxICYmICFlbmFibGVUYXJnZXRUZXh0dXJlMyAmJiAhZW5hYmxlVGFyZ2V0VGV4dHVyZTQpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdDYW5cXCd0IGRpc2FibGUgdGFyZ2V0VGV4dHVyZTEsIHRhcmdldFRleHR1cmUzLCB0YXJnZXRUZXh0dXJlNCBib3RoJyk7XHJcbiAgICAgICAgICAgIGVuYWJsZVRhcmdldFRleHR1cmUxID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbmFibGVUYXJnZXRUZXh0dXJlMikge1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5hdHRhY2gob3B0cy50YXJnZXRUZXh0dXJlMiB8fCB0aGlzLl9nQnVmZmVyVGV4MiwgcmVuZGVyZXIuZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGNsZWFyVmlld3BvcnQoKSB7XHJcbiAgICAgICAgICAgIGlmICh2aWV3cG9ydCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRwciA9IHZpZXdwb3J0LmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgICAgICAgICAvLyB1c2Ugc2Npc3NvciB0byBtYWtlIHN1cmUgb25seSBjbGVhciB0aGUgdmlld3BvcnRcclxuICAgICAgICAgICAgICAgIGdsLmVuYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xyXG4gICAgICAgICAgICAgICAgZ2wuc2Npc3Nvcih2aWV3cG9ydC54ICogZHByLCB2aWV3cG9ydC55ICogZHByLCB2aWV3cG9ydC53aWR0aCAqIGRwciwgdmlld3BvcnQuaGVpZ2h0ICogZHByKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCk7XHJcbiAgICAgICAgICAgIGlmICh2aWV3cG9ydCkge1xyXG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBpc01hdGVyaWFsQ2hhbmdlZChyZW5kZXJhYmxlLCBwcmV2UmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbCAhPT0gcHJldlJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQRU5ESU5HLCBzY2VuZS5ib3VuZGluZ0JveExhc3RGcmFtZSBuZWVkcyBiZSB1cGRhdGVkIGlmIGhhdmUgc2hhZG93XHJcbiAgICAgICAgcmVuZGVyZXIuYmluZFNjZW5lUmVuZGVyaW5nKHNjZW5lKTtcclxuICAgICAgICBpZiAoZW5hYmxlVGFyZ2V0VGV4dHVyZTEpIHtcclxuICAgICAgICAgICAgLy8gUGFzcyAxXHJcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChvcHRzLnRhcmdldFRleHR1cmUxIHx8IHRoaXMuX2dCdWZmZXJUZXgxKTtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICBjbGVhclZpZXdwb3J0KCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZ0J1ZmZlck1hdGVyaWFsMSA9IHRoaXMuX2dCdWZmZXJNYXRlcmlhbDE7XHJcbiAgICAgICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ0J1ZmZlck1hdGVyaWFsMTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBnZXRVbmlmb3JtOiBnZXRHZXRVbmlmb3JtSG9vazEodGhpcy5fZGVmYXVsdE5vcm1hbE1hcCwgdGhpcy5fZGVmYXVsdFJvdWdobmVzc01hcCwgdGhpcy5fZGVmYXVsdERpZmZ1c2VNYXApLFxyXG4gICAgICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGlzTWF0ZXJpYWxDaGFuZ2VkLFxyXG4gICAgICAgICAgICAgICAgc29ydENvbXBhcmU6IHJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIFVzZSBNUlQgaWYgcG9zc2libGVcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhnQnVmZmVyUmVuZGVyTGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmFibGVUYXJnZXRUZXh0dXJlMykge1xyXG5cclxuICAgICAgICAgICAgLy8gUGFzcyAyXHJcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChvcHRzLnRhcmdldFRleHR1cmUzIHx8IHRoaXMuX2dCdWZmZXJUZXgzKTtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICBjbGVhclZpZXdwb3J0KCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZ0J1ZmZlck1hdGVyaWFsMiA9IHRoaXMuX2dCdWZmZXJNYXRlcmlhbDI7XHJcbiAgICAgICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ0J1ZmZlck1hdGVyaWFsMjtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBnZXRVbmlmb3JtOiBnZXRHZXRVbmlmb3JtSG9vazIodGhpcy5fZGVmYXVsdERpZmZ1c2VNYXAsIHRoaXMuX2RlZmF1bHRNZXRhbG5lc3NNYXApLFxyXG4gICAgICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGlzTWF0ZXJpYWxDaGFuZ2VkLFxyXG4gICAgICAgICAgICAgICAgc29ydENvbXBhcmU6IHJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoZ0J1ZmZlclJlbmRlckxpc3QsIGNhbWVyYSwgcGFzc0NvbmZpZyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZW5hYmxlVGFyZ2V0VGV4dHVyZTQpIHtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChvcHRzLnRhcmdldFRleHR1cmU0IHx8IHRoaXMuX2dCdWZmZXJUZXg0KTtcclxuXHJcbiAgICAgICAgICAgIGNsZWFyVmlld3BvcnQoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlbW92ZSBqaXR0ZXJpbmcgaW4gdGVtcG9yYWwgYWEuXHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkcuIEJldHRlciBzb2x1dGlvbj9cclxuICAgICAgICAgICAgY2FtZXJhLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGdCdWZmZXJNYXRlcmlhbDMgPSB0aGlzLl9nQnVmZmVyTWF0ZXJpYWwzO1xyXG4gICAgICAgICAgICB2YXIgY2FtZXJhVmlld1Byb2ogPSBtYXQ0LmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KGNhbWVyYVZpZXdQcm9qLCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5hcnJheSwgY2FtZXJhLnZpZXdNYXRyaXguYXJyYXkpO1xyXG4gICAgICAgICAgICB2YXIgcGFzc0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgIGdldE1hdGVyaWFsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdCdWZmZXJNYXRlcmlhbDM7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpc1NraW5uZWRNZXNoID0gcmVuZGVyYWJsZS5pc1NraW5uZWRNZXNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNrZWxldG9uID0gcmVuZGVyYWJsZS5za2VsZXRvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpvaW50cyA9IHJlbmRlcmFibGUuam9pbnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoam9pbnRzLmxlbmd0aCA+IHJlbmRlcmVyLmdldE1heEpvaW50TnVtYmVyKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBza2luTWF0cmljZXNUZXh0dXJlID0gc2tlbGV0b24uZ2V0U3ViU2tpbk1hdHJpY2VzVGV4dHVyZShyZW5kZXJhYmxlLl9fdWlkX18sIGpvaW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJldlNraW5NYXRyaWNlc1RleHR1cmUgPSByZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc1RleHR1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZTa2luTWF0cmljZXNUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlNraW5NYXRyaWNlc1RleHR1cmUgPSByZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc1RleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVGV4dHVyZS5GTE9BVCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ0ZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VNaXBtYXA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGlwWTogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJldlNraW5NYXRyaWNlc1RleHR1cmUucGl4ZWxzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldlNraW5NYXRyaWNlc1RleHR1cmUucGl4ZWxzLmxlbmd0aCAhPT0gc2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHMubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHMgPSBuZXcgRmxvYXQzMkFycmF5KHNraW5NYXRyaWNlc1RleHR1cmUucGl4ZWxzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlNraW5NYXRyaWNlc1RleHR1cmUucGl4ZWxzW2ldID0gc2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlNraW5NYXRyaWNlc1RleHR1cmUud2lkdGggPSBza2luTWF0cmljZXNUZXh0dXJlLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlNraW5NYXRyaWNlc1RleHR1cmUuaGVpZ2h0ID0gc2tpbk1hdHJpY2VzVGV4dHVyZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2tpbk1hdHJpY2VzQXJyYXkgPSBza2VsZXRvbi5nZXRTdWJTa2luTWF0cmljZXMocmVuZGVyYWJsZS5fX3VpZF9fLCBqb2ludHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc0FycmF5IHx8IHJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzQXJyYXkubGVuZ3RoICE9PSBza2luTWF0cmljZXNBcnJheS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheShza2luTWF0cmljZXNBcnJheS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyYWJsZS5fX3ByZXZTa2luTWF0cmljZXNBcnJheS5zZXQoc2tpbk1hdHJpY2VzQXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGUuX19wcmV2V29ybGRWaWV3UHJvamVjdGlvbiA9IHJlbmRlcmFibGUuX19wcmV2V29ybGRWaWV3UHJvamVjdGlvbiB8fCBtYXQ0LmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1NraW5uZWRNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSB3b3JsZCB0cmFuc2Zvcm0gb2Ygc2tpbm5lZCBtZXNoLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQ0LmNvcHkocmVuZGVyYWJsZS5fX3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uLCBjYW1lcmFWaWV3UHJvaik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KHJlbmRlcmFibGUuX19wcmV2V29ybGRWaWV3UHJvamVjdGlvbiwgY2FtZXJhVmlld1Byb2osIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBnZXRVbmlmb3JtOiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgZ0J1ZmZlck1hdCwgc3ltYm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCA9PT0gJ3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5fX3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdwcmV2U2tpbk1hdHJpeCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzQXJyYXk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3ByZXZTa2luTWF0cmljZXNUZXh0dXJlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5fX3ByZXZTa2luTWF0cmljZXNUZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdmaXJzdFJlbmRlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFyZW5kZXJhYmxlLl9fcHJldldvcmxkVmlld1Byb2plY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ0J1ZmZlck1hdC5nZXQoc3ltYm9sKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBBbHdheXMgdXBkYXRlIHByZXZXb3JsZFZpZXdQcm9qZWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc29ydENvbXBhcmU6IHJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKGdCdWZmZXJSZW5kZXJMaXN0LCBjYW1lcmEsIHBhc3NDb25maWcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyZXIuYmluZFNjZW5lUmVuZGVyaW5nKG51bGwpO1xyXG4gICAgICAgIGZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVidWcgb3V0cHV0IG9mIGdCdWZmZXIuIFVzZSBgdHlwZWAgcGFyYW1ldGVyIHRvIGNob29zIHRoZSBkZWJ1ZyBvdXRwdXQgdHlwZSwgd2hpY2ggY2FuIGJlOlxyXG4gICAgICpcclxuICAgICAqICsgJ25vcm1hbCdcclxuICAgICAqICsgJ2RlcHRoJ1xyXG4gICAgICogKyAncG9zaXRpb24nXHJcbiAgICAgKiArICdnbG9zc2luZXNzJ1xyXG4gICAgICogKyAnbWV0YWxuZXNzJ1xyXG4gICAgICogKyAnYWxiZWRvJ1xyXG4gICAgICogKyAndmVsb2NpdHknXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LkNhbWVyYX0gY2FtZXJhXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGU9J25vcm1hbCddXHJcbiAgICAgKi9cclxuICAgIHJlbmRlckRlYnVnOiBmdW5jdGlvbiAocmVuZGVyZXIsIGNhbWVyYSwgdHlwZSwgdmlld3BvcnQpIHtcclxuICAgICAgICB2YXIgZGVidWdUeXBlcyA9IHtcclxuICAgICAgICAgICAgbm9ybWFsOiAwLFxyXG4gICAgICAgICAgICBkZXB0aDogMSxcclxuICAgICAgICAgICAgcG9zaXRpb246IDIsXHJcbiAgICAgICAgICAgIGdsb3NzaW5lc3M6IDMsXHJcbiAgICAgICAgICAgIG1ldGFsbmVzczogNCxcclxuICAgICAgICAgICAgYWxiZWRvOiA1LFxyXG4gICAgICAgICAgICB2ZWxvY2l0eTogNlxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGRlYnVnVHlwZXNbdHlwZV0gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua293biB0eXBlIFwiJyArIHR5cGUgKyAnXCInKTtcclxuICAgICAgICAgICAgLy8gRGVmYXVsdCB1c2Ugbm9ybWFsXHJcbiAgICAgICAgICAgIHR5cGUgPSAnbm9ybWFsJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlbmRlcmVyLnNhdmVDbGVhcigpO1xyXG4gICAgICAgIHJlbmRlcmVyLnNhdmVWaWV3cG9ydCgpO1xyXG4gICAgICAgIHJlbmRlcmVyLmNsZWFyQml0ID0gcmVuZGVyZXIuZ2wuREVQVEhfQlVGRkVSX0JJVDtcclxuXHJcbiAgICAgICAgaWYgKHZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KHZpZXdwb3J0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHZpZXdQcm9qZWN0aW9uSW52ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHZpZXdQcm9qZWN0aW9uSW52LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0sIGNhbWVyYS5pbnZQcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgdmFyIGRlYnVnUGFzcyA9IHRoaXMuX2RlYnVnUGFzcztcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgndmlld3BvcnRTaXplJywgW3JlbmRlcmVyLmdldFdpZHRoKCksIHJlbmRlcmVyLmdldEhlaWdodCgpXSk7XHJcbiAgICAgICAgZGVidWdQYXNzLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMScsIHRoaXMuX2dCdWZmZXJUZXgxKTtcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUyJywgdGhpcy5fZ0J1ZmZlclRleDIpO1xyXG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTMnLCB0aGlzLl9nQnVmZmVyVGV4Myk7XHJcbiAgICAgICAgZGVidWdQYXNzLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlNCcsIHRoaXMuX2dCdWZmZXJUZXg0KTtcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgnZGVidWcnLCBkZWJ1Z1R5cGVzW3R5cGVdKTtcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgndmlld1Byb2plY3Rpb25JbnYnLCB2aWV3UHJvamVjdGlvbkludi5hcnJheSk7XHJcbiAgICAgICAgZGVidWdQYXNzLnJlbmRlcihyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHJlbmRlcmVyLnJlc3RvcmVWaWV3cG9ydCgpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlc3RvcmVDbGVhcigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBmaXJzdCB0YXJnZXQgdGV4dHVyZS5cclxuICAgICAqIENoYW5uZWwgc3RvcmFnZTpcclxuICAgICAqICsgUjogbm9ybWFsLnggKiAwLjUgKyAwLjVcclxuICAgICAqICsgRzogbm9ybWFsLnkgKiAwLjUgKyAwLjVcclxuICAgICAqICsgQjogbm9ybWFsLnogKiAwLjUgKyAwLjVcclxuICAgICAqICsgQTogZ2xvc3NpbmVzc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgKi9cclxuICAgIGdldFRhcmdldFRleHR1cmUxOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dCdWZmZXJUZXgxO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBzZWNvbmQgdGFyZ2V0IHRleHR1cmUuXHJcbiAgICAgKiBDaGFubmVsIHN0b3JhZ2U6XHJcbiAgICAgKiArIFI6IGRlcHRoXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAqL1xyXG4gICAgZ2V0VGFyZ2V0VGV4dHVyZTI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ0J1ZmZlclRleDI7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHRoaXJkIHRhcmdldCB0ZXh0dXJlLlxyXG4gICAgICogQ2hhbm5lbCBzdG9yYWdlOlxyXG4gICAgICogKyBSOiBhbGJlZG8uclxyXG4gICAgICogKyBHOiBhbGJlZG8uZ1xyXG4gICAgICogKyBCOiBhbGJlZG8uYlxyXG4gICAgICogKyBBOiBtZXRhbG5lc3NcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICovXHJcbiAgICBnZXRUYXJnZXRUZXh0dXJlMzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nQnVmZmVyVGV4MztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZm91cnRoIHRhcmdldCB0ZXh0dXJlLlxyXG4gICAgICogQ2hhbm5lbCBzdG9yYWdlOlxyXG4gICAgICogKyBSOiB2ZWxvY2l0eS5yXHJcbiAgICAgKiArIEc6IHZlbG9jaXR5LmdcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICovXHJcbiAgICBnZXRUYXJnZXRUZXh0dXJlNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nQnVmZmVyVGV4NDtcclxuICAgIH0sXHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDEuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDMuZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2RlZmF1bHROb3JtYWxNYXAuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdFJvdWdobmVzc01hcC5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9kZWZhdWx0TWV0YWxuZXNzTWFwLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2RlZmF1bHREaWZmdXNlTWFwLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdCdWZmZXI7IiwiaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuaW1wb3J0IHZlYzIgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMic7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuQ29uZVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC50b3BSYWRpdXNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmJvdHRvbVJhZGl1c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5jYXBTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0U2VnbWVudHNdXHJcbiAqL1xyXG52YXIgQ29uZSA9IEdlb21ldHJ5LmV4dGVuZCgvKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ29uZSMgKi8ge1xyXG4gICAgZHluYW1pYzogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRvcFJhZGl1czogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJvdHRvbVJhZGl1czogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodDogMixcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNhcFNlZ21lbnRzOiAyMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodFNlZ21lbnRzOiAxXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ29uZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCBjb25lIGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGJ1aWxkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gW107XHJcbiAgICAgICAgdmFyIHRleGNvb3JkcyA9IFtdO1xyXG4gICAgICAgIHZhciBmYWNlcyA9IFtdO1xyXG4gICAgICAgIHBvc2l0aW9ucy5sZW5ndGggPSAwO1xyXG4gICAgICAgIHRleGNvb3Jkcy5sZW5ndGggPSAwO1xyXG4gICAgICAgIGZhY2VzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgLy8gVG9wIGNhcFxyXG4gICAgICAgIHZhciBjYXBTZWdSYWRpYWwgPSBNYXRoLlBJICogMiAvIHRoaXMuY2FwU2VnbWVudHM7XHJcblxyXG4gICAgICAgIHZhciB0b3BDYXAgPSBbXTtcclxuICAgICAgICB2YXIgYm90dG9tQ2FwID0gW107XHJcblxyXG4gICAgICAgIHZhciByMSA9IHRoaXMudG9wUmFkaXVzO1xyXG4gICAgICAgIHZhciByMiA9IHRoaXMuYm90dG9tUmFkaXVzO1xyXG4gICAgICAgIHZhciB5ID0gdGhpcy5oZWlnaHQgLyAyO1xyXG5cclxuICAgICAgICB2YXIgYzEgPSB2ZWMzLmZyb21WYWx1ZXMoMCwgeSwgMCk7XHJcbiAgICAgICAgdmFyIGMyID0gdmVjMy5mcm9tVmFsdWVzKDAsIC15LCAwKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FwU2VnbWVudHM7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGhldGEgPSBpICogY2FwU2VnUmFkaWFsO1xyXG4gICAgICAgICAgICB2YXIgeCA9IHIxICogTWF0aC5zaW4odGhldGEpO1xyXG4gICAgICAgICAgICB2YXIgeiA9IHIxICogTWF0aC5jb3ModGhldGEpO1xyXG4gICAgICAgICAgICB0b3BDYXAucHVzaCh2ZWMzLmZyb21WYWx1ZXMoeCwgeSwgeikpO1xyXG5cclxuICAgICAgICAgICAgeCA9IHIyICogTWF0aC5zaW4odGhldGEpO1xyXG4gICAgICAgICAgICB6ID0gcjIgKiBNYXRoLmNvcyh0aGV0YSk7XHJcbiAgICAgICAgICAgIGJvdHRvbUNhcC5wdXNoKHZlYzMuZnJvbVZhbHVlcyh4LCAteSwgeikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQnVpbGQgdG9wIGNhcFxyXG4gICAgICAgIHBvc2l0aW9ucy5wdXNoKGMxKTtcclxuICAgICAgICAvLyBGSVhNRVxyXG4gICAgICAgIHRleGNvb3Jkcy5wdXNoKHZlYzIuZnJvbVZhbHVlcygwLCAxKSk7XHJcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNhcFNlZ21lbnRzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHRvcENhcFtpXSk7XHJcbiAgICAgICAgICAgIC8vIEZJWE1FXHJcbiAgICAgICAgICAgIHRleGNvb3Jkcy5wdXNoKHZlYzIuZnJvbVZhbHVlcyhpIC8gbiwgMCkpO1xyXG4gICAgICAgICAgICBmYWNlcy5wdXNoKFswLCBpKzEsIChpKzEpICUgbiArIDFdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEJ1aWxkIGJvdHRvbSBjYXBcclxuICAgICAgICB2YXIgb2Zmc2V0ID0gcG9zaXRpb25zLmxlbmd0aDtcclxuICAgICAgICBwb3NpdGlvbnMucHVzaChjMik7XHJcbiAgICAgICAgdGV4Y29vcmRzLnB1c2godmVjMi5mcm9tVmFsdWVzKDAsIDEpKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBwb3NpdGlvbnMucHVzaChib3R0b21DYXBbaV0pO1xyXG4gICAgICAgICAgICAvLyBGSVhNRVxyXG4gICAgICAgICAgICB0ZXhjb29yZHMucHVzaCh2ZWMyLmZyb21WYWx1ZXMoaSAvIG4sIDApKTtcclxuICAgICAgICAgICAgZmFjZXMucHVzaChbb2Zmc2V0LCBvZmZzZXQrKChpKzEpICUgbiArIDEpLCBvZmZzZXQraSsxXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBCdWlsZCBzaWRlXHJcbiAgICAgICAgb2Zmc2V0ID0gcG9zaXRpb25zLmxlbmd0aDtcclxuICAgICAgICB2YXIgbjIgPSB0aGlzLmhlaWdodFNlZ21lbnRzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjIrMTsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdiA9IGogLyBuMjtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHZlYzMubGVycCh2ZWMzLmNyZWF0ZSgpLCB0b3BDYXBbaV0sIGJvdHRvbUNhcFtpXSwgdikpO1xyXG4gICAgICAgICAgICAgICAgdGV4Y29vcmRzLnB1c2godmVjMi5mcm9tVmFsdWVzKGkgLyBuLCB2KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuMjsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaTEgPSBpICogKG4yICsgMSkgKyBqO1xyXG4gICAgICAgICAgICAgICAgdmFyIGkyID0gKChpICsgMSkgJSBuKSAqIChuMiArIDEpICsgajtcclxuICAgICAgICAgICAgICAgIHZhciBpMyA9ICgoaSArIDEpICUgbikgKiAobjIgKyAxKSArIGogKyAxO1xyXG4gICAgICAgICAgICAgICAgdmFyIGk0ID0gaSAqIChuMiArIDEpICsgaiArIDE7XHJcbiAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKFtvZmZzZXQraTIsIG9mZnNldCtpMSwgb2Zmc2V0K2k0XSk7XHJcbiAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKFtvZmZzZXQraTQsIG9mZnNldCtpMywgb2Zmc2V0K2kyXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbi5mcm9tQXJyYXkocG9zaXRpb25zKTtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMudGV4Y29vcmQwLmZyb21BcnJheSh0ZXhjb29yZHMpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRJbmRpY2VzRnJvbUFycmF5KGZhY2VzKTtcclxuXHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVZlcnRleE5vcm1hbHMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHZhciByID0gTWF0aC5tYXgodGhpcy50b3BSYWRpdXMsIHRoaXMuYm90dG9tUmFkaXVzKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1pbi5zZXQoLXIsIC10aGlzLmhlaWdodC8yLCAtcik7XHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5tYXguc2V0KHIsIHRoaXMuaGVpZ2h0LzIsIHIpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbmU7XHJcbiIsImltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBDb25lR2VvbWV0cnkgZnJvbSAnLi9Db25lJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5nZW9tZXRyeS5DeWxpbmRlclxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5yYWRpdXNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmhlaWdodF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuY2FwU2VnbWVudHNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmhlaWdodFNlZ21lbnRzXVxyXG4gKi9cclxudmFyIEN5bGluZGVyID0gR2VvbWV0cnkuZXh0ZW5kKFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ3lsaW5kZXIjICovXHJcbntcclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYWRpdXM6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBoZWlnaHQ6IDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjYXBTZWdtZW50czogNTAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBoZWlnaHRTZWdtZW50czogMVxyXG59LCBmdW5jdGlvbigpIHtcclxuICAgIHRoaXMuYnVpbGQoKTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5Lmdlb21ldHJ5LkN5bGluZGVyLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGN5bGluZGVyIGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGJ1aWxkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgY29uZSA9IG5ldyBDb25lR2VvbWV0cnkoe1xyXG4gICAgICAgICAgICB0b3BSYWRpdXM6IHRoaXMucmFkaXVzLFxyXG4gICAgICAgICAgICBib3R0b21SYWRpdXM6IHRoaXMucmFkaXVzLFxyXG4gICAgICAgICAgICBjYXBTZWdtZW50czogdGhpcy5jYXBTZWdtZW50cyxcclxuICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IHRoaXMuaGVpZ2h0U2VnbWVudHMsXHJcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHRcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlID0gY29uZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5ub3JtYWwudmFsdWUgPSBjb25lLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy50ZXhjb29yZDAudmFsdWUgPSBjb25lLmF0dHJpYnV0ZXMudGV4Y29vcmQwLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuaW5kaWNlcyA9IGNvbmUuaW5kaWNlcztcclxuXHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IGNvbmUuYm91bmRpbmdCb3g7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ3lsaW5kZXI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmxpZ2h0X3ZvbHVtZS52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG52YXJ5aW5nIHZlYzMgdl9Qb3NpdGlvbjtcXG52b2lkIG1haW4oKVxcbntcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gdl9Qb3NpdGlvbiA9IHBvc2l0aW9uO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLnNwb3RfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbkBpbXBvcnQgY2xheS51dGlsLmNhbGN1bGF0ZV9hdHRlbnVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodFBvc2l0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodERpcmVjdGlvbjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIGZsb2F0IHVtYnJhQW5nbGVDb3NpbmU7XFxudW5pZm9ybSBmbG9hdCBwZW51bWJyYUFuZ2xlQ29zaW5lO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRSYW5nZTtcXG51bmlmb3JtIGZsb2F0IGZhbGxvZmZGYWN0b3I7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0U2hhZG93TWFwO1xcbnVuaWZvcm0gbWF0NCBsaWdodE1hdHJpeDtcXG51bmlmb3JtIGZsb2F0IGxpZ2h0U2hhZG93TWFwU2l6ZTtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkucGx1Z2luLnNoYWRvd19tYXBfY29tbW9uXFxudm9pZCBtYWluKClcXG57XFxuIEBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5nYnVmZmVyX3JlYWRcXG4gdmVjMyBMID0gbGlnaHRQb3NpdGlvbiAtIHBvc2l0aW9uO1xcbiB2ZWMzIFYgPSBub3JtYWxpemUoZXllUG9zaXRpb24gLSBwb3NpdGlvbik7XFxuIGZsb2F0IGRpc3QgPSBsZW5ndGgoTCk7XFxuIEwgLz0gZGlzdDtcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIGxpZ2h0UmFuZ2UpO1xcbiBmbG9hdCBjID0gZG90KC1ub3JtYWxpemUobGlnaHREaXJlY3Rpb24pLCBMKTtcXG4gZmxvYXQgZmFsbG9mZiA9IGNsYW1wKChjIC0gdW1icmFBbmdsZUNvc2luZSkgLyAocGVudW1icmFBbmdsZUNvc2luZSAtIHVtYnJhQW5nbGVDb3NpbmUpLCAwLjAsIDEuMCk7XFxuIGZhbGxvZmYgPSBwb3coZmFsbG9mZiwgZmFsbG9mZkZhY3Rvcik7XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kbCA9IGNsYW1wKGRvdChOLCBMKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSAoMS4wIC0gZmFsbG9mZikgKiBhdHRlbnVhdGlvbiAqIGxpZ2h0RXF1YXRpb24oXFxuIGxpZ2h0Q29sb3IsIGRpZmZ1c2VDb2xvciwgc3BlY3VsYXJDb2xvciwgbmRsLCBuZGgsIG5kdiwgZ2xvc3NpbmVzc1xcbiApO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbiBmbG9hdCBzaGFkb3dDb250cmliID0gY29tcHV0ZVNoYWRvd0NvbnRyaWIoXFxuIGxpZ2h0U2hhZG93TWFwLCBsaWdodE1hdHJpeCwgcG9zaXRpb24sIGxpZ2h0U2hhZG93TWFwU2l6ZVxcbiApO1xcbiBnbF9GcmFnQ29sb3IucmdiICo9IHNoYWRvd0NvbnRyaWI7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXFxuXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmRpcmVjdGlvbmFsX2xpZ2h0XFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2hlYWRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfZXF1YXRpb25cXG51bmlmb3JtIHZlYzMgbGlnaHREaXJlY3Rpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0U2hhZG93TWFwO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRTaGFkb3dNYXBTaXplO1xcbnVuaWZvcm0gbWF0NCBsaWdodE1hdHJpY2VzW1NIQURPV19DQVNDQURFXTtcXG51bmlmb3JtIGZsb2F0IHNoYWRvd0Nhc2NhZGVDbGlwc05lYXJbU0hBRE9XX0NBU0NBREVdO1xcbnVuaWZvcm0gZmxvYXQgc2hhZG93Q2FzY2FkZUNsaXBzRmFyW1NIQURPV19DQVNDQURFXTtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkucGx1Z2luLnNoYWRvd19tYXBfY29tbW9uXFxudm9pZCBtYWluKClcXG57XFxuIEBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5nYnVmZmVyX3JlYWRcXG4gdmVjMyBMID0gLW5vcm1hbGl6ZShsaWdodERpcmVjdGlvbik7XFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gdmVjMyBIID0gbm9ybWFsaXplKEwgKyBWKTtcXG4gZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGxpZ2h0RXF1YXRpb24oXFxuIGxpZ2h0Q29sb3IsIGRpZmZ1c2VDb2xvciwgc3BlY3VsYXJDb2xvciwgbmRsLCBuZGgsIG5kdiwgZ2xvc3NpbmVzc1xcbiApO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbiBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiBmb3IgKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgU0hBRE9XX0NBU0NBREU7IF9pZHhfKyspIHt7XFxuIGlmIChcXG4geiA+PSBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyW19pZHhfXSAmJlxcbiB6IDw9IHNoYWRvd0Nhc2NhZGVDbGlwc0ZhcltfaWR4X11cXG4gKSB7XFxuIHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYihcXG4gbGlnaHRTaGFkb3dNYXAsIGxpZ2h0TWF0cmljZXNbX2lkeF9dLCBwb3NpdGlvbiwgbGlnaHRTaGFkb3dNYXBTaXplLFxcbiB2ZWMyKDEuMCAvIGZsb2F0KFNIQURPV19DQVNDQURFKSwgMS4wKSxcXG4gdmVjMihmbG9hdChfaWR4XykgLyBmbG9hdChTSEFET1dfQ0FTQ0FERSksIDAuMClcXG4gKTtcXG4gfVxcbiB9fVxcbiBnbF9GcmFnQ29sb3IucmdiICo9IHNoYWRvd0NvbnRyaWI7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXFxuXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmFtYmllbnRfbGlnaHRcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTE7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUzO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gdmVjMiB3aW5kb3dTaXplOiBXSU5ET1dfU0laRTtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eSAvIHdpbmRvd1NpemU7XFxuIHZlYzQgdGV4ZWwxID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMSwgdXYpO1xcbiBpZiAoZG90KHRleGVsMS5yZ2IsIHZlYzMoMS4wKSkgPT0gMC4wKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4gdmVjMyBhbGJlZG8gPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUzLCB1dikucmdiO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRDb2xvciAqIGFsYmVkbztcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuYW1iaWVudF9zaF9saWdodFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMTtcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTM7XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29lZmZpY2llbnRzWzldO1xcbnVuaWZvcm0gdmVjMiB3aW5kb3dTaXplOiBXSU5ET1dfU0laRTtcXG52ZWMzIGNhbGNBbWJpZW50U0hMaWdodCh2ZWMzIE4pIHtcXG4gcmV0dXJuIGxpZ2h0Q29lZmZpY2llbnRzWzBdXFxuICsgbGlnaHRDb2VmZmljaWVudHNbMV0gKiBOLnhcXG4gKyBsaWdodENvZWZmaWNpZW50c1syXSAqIE4ueVxcbiArIGxpZ2h0Q29lZmZpY2llbnRzWzNdICogTi56XFxuICsgbGlnaHRDb2VmZmljaWVudHNbNF0gKiBOLnggKiBOLnpcXG4gKyBsaWdodENvZWZmaWNpZW50c1s1XSAqIE4ueiAqIE4ueVxcbiArIGxpZ2h0Q29lZmZpY2llbnRzWzZdICogTi55ICogTi54XFxuICsgbGlnaHRDb2VmZmljaWVudHNbN10gKiAoMy4wICogTi56ICogTi56IC0gMS4wKVxcbiArIGxpZ2h0Q29lZmZpY2llbnRzWzhdICogKE4ueCAqIE4ueCAtIE4ueSAqIE4ueSk7XFxufVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC8gd2luZG93U2l6ZTtcXG4gdmVjNCB0ZXhlbDEgPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUxLCB1dik7XFxuIGlmIChkb3QodGV4ZWwxLnJnYiwgdmVjMygxLjApKSA9PSAwLjApIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiB2ZWMzIE4gPSB0ZXhlbDEucmdiICogMi4wIC0gMS4wO1xcbiB2ZWMzIGFsYmVkbyA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTMsIHV2KS5yZ2I7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBsaWdodENvbG9yICogYWxiZWRvICogY2FsY0FtYmllbnRTSExpZ2h0KE4pO1xcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5hbWJpZW50X2N1YmVtYXBfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gc2FtcGxlckN1YmUgbGlnaHRDdWJlbWFwO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGJyZGZMb29rdXA7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMzIFYgPSBub3JtYWxpemUoZXllUG9zaXRpb24gLSBwb3NpdGlvbik7XFxuIHZlYzMgTCA9IHJlZmxlY3QoLVYsIE4pO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gZmxvYXQgcm91Z2ggPSBjbGFtcCgxLjAgLSBnbG9zc2luZXNzLCAwLjAsIDEuMCk7XFxuIGZsb2F0IGJpYXMgPSByb3VnaCAqIDUuMDtcXG4gdmVjMiBicmRmUGFyYW0gPSB0ZXh0dXJlMkQoYnJkZkxvb2t1cCwgdmVjMihyb3VnaCwgbmR2KSkueHk7XFxuIHZlYzMgZW52V2VpZ2h0ID0gc3BlY3VsYXJDb2xvciAqIGJyZGZQYXJhbS54ICsgYnJkZlBhcmFtLnk7XFxuIHZlYzMgZW52VGV4ZWwgPSBSR0JNRGVjb2RlKHRleHR1cmVDdWJlTG9kRVhUKGxpZ2h0Q3ViZW1hcCwgTCwgYmlhcyksIDguMTIpO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRDb2xvciAqIGVudlRleGVsICogZW52V2VpZ2h0O1xcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5wb2ludF9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSBmbG9hdCBsaWdodFJhbmdlO1xcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvbjtcXG4jaWZkZWYgU0hBRE9XTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXJDdWJlIGxpZ2h0U2hhZG93TWFwO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRTaGFkb3dNYXBTaXplO1xcbiNlbmRpZlxcbnZhcnlpbmcgdmVjMyB2X1Bvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG52b2lkIG1haW4oKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gcG9zaXRpb247XFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gTCAvPSBkaXN0O1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kdiA9IGNsYW1wKGRvdChOLCBWKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgbGlnaHRSYW5nZSk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBhdHRlbnVhdGlvbiAqIGxpZ2h0RXF1YXRpb24oXFxuIGxpZ2h0Q29sb3IsIGRpZmZ1c2VDb2xvciwgc3BlY3VsYXJDb2xvciwgbmRsLCBuZGgsIG5kdiwgZ2xvc3NpbmVzc1xcbiApO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbiBmbG9hdCBzaGFkb3dDb250cmliID0gY29tcHV0ZVNoYWRvd0NvbnRyaWJPbW5pKFxcbiBsaWdodFNoYWRvd01hcCwgLUwgKiBkaXN0LCBsaWdodFJhbmdlXFxuICk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gY2xhbXAoc2hhZG93Q29udHJpYiwgMC4wLCAxLjApO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5zcGhlcmVfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS51dGlsLmNhbGN1bGF0ZV9hdHRlbnVhdGlvblxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodFBvc2l0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRSYW5nZTtcXG51bmlmb3JtIGZsb2F0IGxpZ2h0UmFkaXVzO1xcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzMgdl9Qb3NpdGlvbjtcXG52b2lkIG1haW4oKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gcG9zaXRpb247XFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gdmVjMyBSID0gcmVmbGVjdChWLCBOKTtcXG4gZmxvYXQgdG1wID0gZG90KEwsIFIpO1xcbiB2ZWMzIGNUb1IgPSB0bXAgKiBSIC0gTDtcXG4gZmxvYXQgZCA9IGxlbmd0aChjVG9SKTtcXG4gTCA9IEwgKyBjVG9SICogY2xhbXAobGlnaHRSYWRpdXMgLyBkLCAwLjAsIDEuMCk7XFxuIEwgPSBub3JtYWxpemUoTCk7XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kbCA9IGNsYW1wKGRvdChOLCBMKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IGF0dGVudWF0aW9uID0gbGlnaHRBdHRlbnVhdGlvbihkaXN0LCBsaWdodFJhbmdlKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGxpZ2h0Q29sb3IgKiBuZGwgKiBhdHRlbnVhdGlvbjtcXG4gZ2xvc3NpbmVzcyA9IGNsYW1wKGdsb3NzaW5lc3MgLSBsaWdodFJhZGl1cyAvIDIuMCAvIGRpc3QsIDAuMCwgMS4wKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGF0dGVudWF0aW9uICogbGlnaHRFcXVhdGlvbihcXG4gbGlnaHRDb2xvciwgZGlmZnVzZUNvbG9yLCBzcGVjdWxhckNvbG9yLCBuZGwsIG5kaCwgbmR2LCBnbG9zc2luZXNzXFxuICk7XFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLnR1YmVfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS51dGlsLmNhbGN1bGF0ZV9hdHRlbnVhdGlvblxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodFBvc2l0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRSYW5nZTtcXG51bmlmb3JtIHZlYzMgbGlnaHRFeHRlbmQ7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMyB2X1Bvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiBAaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuIHZlYzMgTCA9IGxpZ2h0UG9zaXRpb24gLSBwb3NpdGlvbjtcXG4gdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvc2l0aW9uIC0gcG9zaXRpb24pO1xcbiB2ZWMzIFIgPSByZWZsZWN0KFYsIE4pO1xcbiB2ZWMzIEwwID0gbGlnaHRQb3NpdGlvbiAtIGxpZ2h0RXh0ZW5kIC0gcG9zaXRpb247XFxuIHZlYzMgTDEgPSBsaWdodFBvc2l0aW9uICsgbGlnaHRFeHRlbmQgLSBwb3NpdGlvbjtcXG4gdmVjMyBMRCA9IEwxIC0gTDA7XFxuIGZsb2F0IGxlbjAgPSBsZW5ndGgoTDApO1xcbiBmbG9hdCBsZW4xID0gbGVuZ3RoKEwxKTtcXG4gZmxvYXQgaXJyYSA9IDIuMCAqIGNsYW1wKGRvdChOLCBMMCkgLyAoMi4wICogbGVuMCkgKyBkb3QoTiwgTDEpIC8gKDIuMCAqIGxlbjEpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IExERG90UiA9IGRvdChSLCBMRCk7XFxuIGZsb2F0IHQgPSAoTEREb3RSICogZG90KFIsIEwwKSAtIGRvdChMMCwgTEQpKSAvIChkb3QoTEQsIExEKSAtIExERG90UiAqIExERG90Uik7XFxuIHQgPSBjbGFtcCh0LCAwLjAsIDEuMCk7XFxuIEwgPSBMMCArIHQgKiBMRDtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gTCAvPSBkaXN0O1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuIGdsb3NzaW5lc3MgPSBjbGFtcChnbG9zc2luZXNzIC0gMC4wIC8gMi4wIC8gZGlzdCwgMC4wLCAxLjApO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRDb2xvciAqIGlycmEgKiBsaWdodEF0dGVudWF0aW9uKGRpc3QsIGxpZ2h0UmFuZ2UpXFxuICogKGRpZmZ1c2VDb2xvciArIERfUGhvbmcoZ2xvc3NpbmVzcywgbmRoKSAqIEZfU2NobGljayhuZHYsIHNwZWN1bGFyQ29sb3IpKTtcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcIjtcclxuIiwiLy8gTGlnaHQtcHJlIHBhc3MgZGVmZXJyZWQgcmVuZGVyaW5nXHJcbi8vIGh0dHA6Ly93d3cucmVhbHRpbWVyZW5kZXJpbmcuY29tL2Jsb2cvZGVmZXJyZWQtbGlnaHRpbmctYXBwcm9hY2hlcy9cclxuaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgRnVsbFF1YWRQYXNzIGZyb20gJy4uL2NvbXBvc2l0b3IvUGFzcyc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XHJcbmltcG9ydCBNZXNoIGZyb20gJy4uL01lc2gnO1xyXG5pbXBvcnQgU3BoZXJlR2VvIGZyb20gJy4uL2dlb21ldHJ5L1NwaGVyZSc7XHJcbmltcG9ydCBDb25lR2VvIGZyb20gJy4uL2dlb21ldHJ5L0NvbmUnO1xyXG5pbXBvcnQgQ3lsaW5kZXJHZW8gZnJvbSAnLi4vZ2VvbWV0cnkvQ3lsaW5kZXInO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgR0J1ZmZlciBmcm9tICcuL0dCdWZmZXInO1xyXG5cclxuaW1wb3J0IHByZXpHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvcHJlei5nbHNsLmpzJztcclxuaW1wb3J0IHV0aWxHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvdXRpbC5nbHNsLmpzJztcclxuXHJcbmltcG9ydCBsaWdodHZvbHVtZUdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9saWdodHZvbHVtZS5nbHNsLmpzJztcclxuLy8gTGlnaHQgc2hhZGVyc1xyXG5pbXBvcnQgc3BvdEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcG90Lmdsc2wuanMnO1xyXG5pbXBvcnQgZGlyZWN0aW9uYWxHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZGlyZWN0aW9uYWwuZ2xzbC5qcyc7XHJcbmltcG9ydCBhbWJpZW50R2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnQuZ2xzbC5qcyc7XHJcbmltcG9ydCBhbWJpZW50c2hHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudHNoLmdsc2wuanMnO1xyXG5pbXBvcnQgYW1iaWVudGN1YmVtYXBHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudGN1YmVtYXAuZ2xzbC5qcyc7XHJcbmltcG9ydCBwb2ludEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9wb2ludC5nbHNsLmpzJztcclxuaW1wb3J0IHNwaGVyZUdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcGhlcmUuZ2xzbC5qcyc7XHJcbmltcG9ydCB0dWJlR2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL3R1YmUuZ2xzbC5qcyc7XHJcblxyXG5TaGFkZXIuaW1wb3J0KHByZXpHbHNsKTtcclxuU2hhZGVyLmltcG9ydCh1dGlsR2xzbCk7XHJcblNoYWRlci5pbXBvcnQobGlnaHR2b2x1bWVHbHNsKTtcclxuXHJcbi8vIExpZ2h0IHNoYWRlcnNcclxuU2hhZGVyLmltcG9ydChzcG90R2xzbCk7XHJcblNoYWRlci5pbXBvcnQoZGlyZWN0aW9uYWxHbHNsKTtcclxuU2hhZGVyLmltcG9ydChhbWJpZW50R2xzbCk7XHJcblNoYWRlci5pbXBvcnQoYW1iaWVudHNoR2xzbCk7XHJcblNoYWRlci5pbXBvcnQoYW1iaWVudGN1YmVtYXBHbHNsKTtcclxuU2hhZGVyLmltcG9ydChwb2ludEdsc2wpO1xyXG5TaGFkZXIuaW1wb3J0KHNwaGVyZUdsc2wpO1xyXG5TaGFkZXIuaW1wb3J0KHR1YmVHbHNsKTtcclxuXHJcblNoYWRlci5pbXBvcnQocHJlekdsc2wpO1xyXG5cclxuLyoqXHJcbiAqIERlZmVycmVkIHJlbmRlcmVyXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5kZWZlcnJlZC5SZW5kZXJlclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIERlZmVycmVkUmVuZGVyZXIgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIGZ1bGxRdWFkVmVydGV4ID0gU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLnZlcnRleCcpO1xyXG4gICAgdmFyIGxpZ2h0Vm9sdW1lVmVydGV4ID0gU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5saWdodF92b2x1bWUudmVydGV4Jyk7XHJcblxyXG4gICAgdmFyIGRpcmVjdGlvbmFsTGlnaHRTaGFkZXIgPSBuZXcgU2hhZGVyKGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmRpcmVjdGlvbmFsX2xpZ2h0JykpO1xyXG5cclxuICAgIHZhciBsaWdodEFjY3VtdWxhdGVCbGVuZEZ1bmMgPSBmdW5jdGlvbiAoZ2wpIHtcclxuICAgICAgICBnbC5ibGVuZEVxdWF0aW9uKGdsLkZVTkNfQUREKTtcclxuICAgICAgICBnbC5ibGVuZEZ1bmNTZXBhcmF0ZShnbC5PTkUsIGdsLk9ORSwgZ2wuT05FLCBnbC5PTkUpO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgY3JlYXRlTGlnaHRQYXNzTWF0ID0gZnVuY3Rpb24gKHNoYWRlcikge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IHNoYWRlcixcclxuICAgICAgICAgICAgYmxlbmQ6IGxpZ2h0QWNjdW11bGF0ZUJsZW5kRnVuYyxcclxuICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgIGRlcHRoTWFzazogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGNyZWF0ZVZvbHVtZVNoYWRlciA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTaGFkZXIobGlnaHRWb2x1bWVWZXJ0ZXgsIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuJyArIG5hbWUpKTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gUm90YXRlIGFuZCBwb3NpdGlvbmluZyB0byBmaXQgdGhlIHNwb3QgbGlnaHRcclxuICAgIC8vIFdoaWNoIHRoZSBjdXNwIG9mIGNvbmUgcG9pbnRpbmcgdG8gdGhlIHBvc2l0aXZlIHpcclxuICAgIC8vIGFuZCBwb3NpdGlvbmVkIG9uIHRoZSBvcmlnaW5cclxuICAgIHZhciBjb25lR2VvID0gbmV3IENvbmVHZW8oe1xyXG4gICAgICAgIGNhcFNlZ21lbnRzOiAxMFxyXG4gICAgfSk7XHJcbiAgICB2YXIgbWF0ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgIG1hdC5yb3RhdGVYKE1hdGguUEkgLyAyKVxyXG4gICAgICAgIC50cmFuc2xhdGUobmV3IFZlY3RvcjMoMCwgLTEsIDApKTtcclxuXHJcbiAgICBjb25lR2VvLmFwcGx5VHJhbnNmb3JtKG1hdCk7XHJcblxyXG4gICAgdmFyIGN5bGluZGVyR2VvID0gbmV3IEN5bGluZGVyR2VvKHtcclxuICAgICAgICBjYXBTZWdtZW50czogMTBcclxuICAgIH0pO1xyXG4gICAgLy8gQWxpZ24gd2l0aCB4IGF4aXNcclxuICAgIG1hdC5pZGVudGl0eSgpLnJvdGF0ZVooTWF0aC5QSSAvIDIpO1xyXG4gICAgY3lsaW5kZXJHZW8uYXBwbHlUcmFuc2Zvcm0obWF0KTtcclxuXHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmRlZmVycmVkLlJlbmRlcmVyIyAqLyB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFByb3ZpZGUgU2hhZG93TWFwUGFzcyBmb3Igc2hhZG93IHJlbmRlcmluZy5cclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5wcmVQYXNzLlNoYWRvd01hcH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzaGFkb3dNYXBQYXNzOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBhdXRvIHJlc2l6aW5nIGZyb20gZ2l2ZW4gZGVmdWFsdCByZW5kZXJlciBzaXplLlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGF1dG9SZXNpemU6IHRydWUsXHJcblxyXG4gICAgICAgIF9jcmVhdGVMaWdodFBhc3NNYXQ6IGNyZWF0ZUxpZ2h0UGFzc01hdCxcclxuXHJcbiAgICAgICAgX2dCdWZmZXI6IG5ldyBHQnVmZmVyKCksXHJcblxyXG4gICAgICAgIF9saWdodEFjY3VtRnJhbWVCdWZmZXI6IG5ldyBGcmFtZUJ1ZmZlcigpLFxyXG5cclxuICAgICAgICBfbGlnaHRBY2N1bVRleDogbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIERldmljZSBub3Qgc3VwcG9ydCBmbG9hdCB0ZXh0dXJlXHJcbiAgICAgICAgICAgIHR5cGU6IFRleHR1cmUuSEFMRl9GTE9BVCxcclxuICAgICAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgICAgIG1hZ0ZpbHRlcjogVGV4dHVyZS5ORUFSRVNUXHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIF9mdWxsUXVhZFBhc3M6IG5ldyBGdWxsUXVhZFBhc3Moe1xyXG4gICAgICAgICAgICBibGVuZFdpdGhQcmV2aW91czogdHJ1ZVxyXG4gICAgICAgIH0pLFxyXG5cclxuICAgICAgICBfZGlyZWN0aW9uYWxMaWdodE1hdDogY3JlYXRlTGlnaHRQYXNzTWF0KGRpcmVjdGlvbmFsTGlnaHRTaGFkZXIpLFxyXG5cclxuICAgICAgICBfYW1iaWVudE1hdDogY3JlYXRlTGlnaHRQYXNzTWF0KG5ldyBTaGFkZXIoXHJcbiAgICAgICAgICAgIGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmFtYmllbnRfbGlnaHQnKVxyXG4gICAgICAgICkpLFxyXG4gICAgICAgIF9hbWJpZW50U0hNYXQ6IGNyZWF0ZUxpZ2h0UGFzc01hdChuZXcgU2hhZGVyKFxyXG4gICAgICAgICAgICBmdWxsUXVhZFZlcnRleCwgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5hbWJpZW50X3NoX2xpZ2h0JylcclxuICAgICAgICApKSxcclxuICAgICAgICBfYW1iaWVudEN1YmVtYXBNYXQ6IGNyZWF0ZUxpZ2h0UGFzc01hdChuZXcgU2hhZGVyKFxyXG4gICAgICAgICAgICBmdWxsUXVhZFZlcnRleCwgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5hbWJpZW50X2N1YmVtYXBfbGlnaHQnKVxyXG4gICAgICAgICkpLFxyXG5cclxuICAgICAgICBfc3BvdExpZ2h0U2hhZGVyOiBjcmVhdGVWb2x1bWVTaGFkZXIoJ3Nwb3RfbGlnaHQnKSxcclxuICAgICAgICBfcG9pbnRMaWdodFNoYWRlcjogY3JlYXRlVm9sdW1lU2hhZGVyKCdwb2ludF9saWdodCcpLFxyXG5cclxuICAgICAgICBfc3BoZXJlTGlnaHRTaGFkZXI6IGNyZWF0ZVZvbHVtZVNoYWRlcignc3BoZXJlX2xpZ2h0JyksXHJcbiAgICAgICAgX3R1YmVMaWdodFNoYWRlcjogY3JlYXRlVm9sdW1lU2hhZGVyKCd0dWJlX2xpZ2h0JyksXHJcblxyXG4gICAgICAgIF9saWdodFNwaGVyZUdlbzogbmV3IFNwaGVyZUdlbyh7XHJcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IDEwLFxyXG4gICAgICAgICAgICBoZWlnaHRTZWdlbWVudHM6IDEwXHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIF9saWdodENvbmVHZW86IGNvbmVHZW8sXHJcblxyXG4gICAgICAgIF9saWdodEN5bGluZGVyR2VvOiBjeWxpbmRlckdlbyxcclxuXHJcbiAgICAgICAgX291dHB1dFBhc3M6IG5ldyBGdWxsUXVhZFBhc3Moe1xyXG4gICAgICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLm91dHB1dCcpXHJcbiAgICAgICAgfSlcclxuICAgIH07XHJcbn0sIC8qKiBAbGVuZHMgY2xheS5kZWZlcnJlZC5SZW5kZXJlciMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBEbyByZW5kZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5DYW1lcmF9IGNhbWVyYVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5yZW5kZXJUb1RhcmdldCA9IGZhbHNlXSBJZiBub3Qgb3VwdXQgYW5kIHJlbmRlciB0byB0aGUgdGFyZ2V0IHRleHR1cmVcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMubm90VXBkYXRlU2hhZG93ID0gdHJ1ZV0gSWYgbm90IHVwZGF0ZSB0aGUgc2hhZG93LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5ub3RVcGRhdGVTY2VuZSA9IHRydWVdIElmIG5vdCB1cGRhdGUgdGhlIHNjZW5lLlxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgb3B0cykge1xyXG5cclxuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuICAgICAgICBvcHRzLnJlbmRlclRvVGFyZ2V0ID0gb3B0cy5yZW5kZXJUb1RhcmdldCB8fCBmYWxzZTtcclxuICAgICAgICBvcHRzLm5vdFVwZGF0ZVNoYWRvdyA9IG9wdHMubm90VXBkYXRlU2hhZG93IHx8IGZhbHNlO1xyXG4gICAgICAgIG9wdHMubm90VXBkYXRlU2NlbmUgPSBvcHRzLm5vdFVwZGF0ZVNjZW5lIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoIW9wdHMubm90VXBkYXRlU2NlbmUpIHtcclxuICAgICAgICAgICAgc2NlbmUudXBkYXRlKGZhbHNlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2NlbmUudXBkYXRlTGlnaHRzKCk7XHJcbiAgICAgICAgLy8gUmVuZGVyIGxpc3Qgd2lsbCBiZSB1cGRhdGVkIGluIGdidWZmZXIuXHJcblxyXG4gICAgICAgIGNhbWVyYS51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICAgIC8vIFBFTkRJTkcgRm9yIHN0ZXJlbyByZW5kZXJpbmdcclxuICAgICAgICB2YXIgZHByID0gcmVuZGVyZXIuZ2V0RGV2aWNlUGl4ZWxSYXRpbygpO1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9SZXNpemVcclxuICAgICAgICAgICAgJiYgKHJlbmRlcmVyLmdldFdpZHRoKCkgKiBkcHIgIT09IHRoaXMuX2xpZ2h0QWNjdW1UZXgud2lkdGhcclxuICAgICAgICAgICAgfHwgcmVuZGVyZXIuZ2V0SGVpZ2h0KCkgKiBkcHIgIT09IHRoaXMuX2xpZ2h0QWNjdW1UZXguaGVpZ2h0KVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZShyZW5kZXJlci5nZXRXaWR0aCgpICogZHByLCByZW5kZXJlci5nZXRIZWlnaHQoKSAqIGRwcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9nQnVmZmVyLnVwZGF0ZShyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XHJcblxyXG4gICAgICAgIC8vIEFjY3VtdWxhdGUgbGlnaHQgYnVmZmVyXHJcbiAgICAgICAgdGhpcy5fYWNjdW11bGF0ZUxpZ2h0QnVmZmVyKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCAhb3B0cy5ub3RVcGRhdGVTaGFkb3cpO1xyXG5cclxuICAgICAgICBpZiAoIW9wdHMucmVuZGVyVG9UYXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0UGFzcy5zZXRVbmlmb3JtKCd0ZXh0dXJlJywgdGhpcy5fbGlnaHRBY2N1bVRleCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRQYXNzLnJlbmRlcihyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuX2dCdWZmZXIucmVuZGVyRGVidWcocmVuZGVyZXIsIGNhbWVyYSwgJ25vcm1hbCcpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAqL1xyXG4gICAgZ2V0VGFyZ2V0VGV4dHVyZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9saWdodEFjY3VtVGV4O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuRnJhbWVCdWZmZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldFRhcmdldEZyYW1lQnVmZmVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlcjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmRlZmVycmVkLkdCdWZmZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldEdCdWZmZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ0J1ZmZlcjtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVE9ETyBpcyBkcHIgbmVlZGVkP1xyXG4gICAgc2V0Vmlld3BvcnQ6IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkcHIpIHtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyLnNldFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQsIGRwcik7XHJcbiAgICAgICAgdGhpcy5fbGlnaHRBY2N1bUZyYW1lQnVmZmVyLnZpZXdwb3J0ID0gdGhpcy5fZ0J1ZmZlci5nZXRWaWV3cG9ydCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBnZXRGdWxsUXVhZExpZ2h0UGFzczogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gICAgIHJldHVybiB0aGlzLl9mdWxsUXVhZFBhc3M7XHJcbiAgICAvLyB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHJlbmRlcmVyIHNpemUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcclxuICAgICAqL1xyXG4gICAgcmVzaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0QWNjdW1UZXgud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLl9saWdodEFjY3VtVGV4LmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgLy8gUEVORElORyB2aWV3cG9ydCA/XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9hY2N1bXVsYXRlTGlnaHRCdWZmZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdXBkYXRlU2hhZG93KSB7XHJcbiAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgdmFyIGxpZ2h0QWNjdW1UZXggPSB0aGlzLl9saWdodEFjY3VtVGV4O1xyXG4gICAgICAgIHZhciBsaWdodEFjY3VtRnJhbWVCdWZmZXIgPSB0aGlzLl9saWdodEFjY3VtRnJhbWVCdWZmZXI7XHJcblxyXG4gICAgICAgIHZhciBleWVQb3NpdGlvbiA9IGNhbWVyYS5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXk7XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB2b2x1bWUgbWVzaGVzXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY2VuZS5saWdodHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCFzY2VuZS5saWdodHNbaV0uaW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVMaWdodFByb3h5KHNjZW5lLmxpZ2h0c1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzaGFkb3dNYXBQYXNzID0gdGhpcy5zaGFkb3dNYXBQYXNzO1xyXG4gICAgICAgIGlmIChzaGFkb3dNYXBQYXNzICYmIHVwZGF0ZVNoYWRvdykge1xyXG4gICAgICAgICAgICBnbC5jbGVhckNvbG9yKDEsIDEsIDEsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLl9wcmVwYXJlTGlnaHRTaGFkb3cocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVsaWdodGFjY3VtdWxhdGUnLCByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdXBkYXRlU2hhZG93KTtcclxuXHJcbiAgICAgICAgbGlnaHRBY2N1bUZyYW1lQnVmZmVyLmF0dGFjaChsaWdodEFjY3VtVGV4KTtcclxuICAgICAgICBsaWdodEFjY3VtRnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgdmFyIGNsZWFyQ29sb3IgPSByZW5kZXJlci5jbGVhckNvbG9yO1xyXG5cclxuICAgICAgICB2YXIgdmlld3BvcnQgPSBsaWdodEFjY3VtRnJhbWVCdWZmZXIudmlld3BvcnQ7XHJcbiAgICAgICAgaWYgKHZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgIHZhciBkcHIgPSB2aWV3cG9ydC5kZXZpY2VQaXhlbFJhdGlvO1xyXG4gICAgICAgICAgICAvLyB1c2Ugc2Npc3NvciB0byBtYWtlIHN1cmUgb25seSBjbGVhciB0aGUgdmlld3BvcnRcclxuICAgICAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XHJcbiAgICAgICAgICAgIGdsLnNjaXNzb3Iodmlld3BvcnQueCAqIGRwciwgdmlld3BvcnQueSAqIGRwciwgdmlld3BvcnQud2lkdGggKiBkcHIsIHZpZXdwb3J0LmhlaWdodCAqIGRwcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdsLmNsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7XHJcbiAgICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XHJcbiAgICAgICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcclxuICAgICAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdzdGFydGxpZ2h0YWNjdW11bGF0ZScsIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKTtcclxuXHJcbiAgICAgICAgdmFyIHZpZXdQcm9qZWN0aW9uSW52ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHZpZXdQcm9qZWN0aW9uSW52LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0sIGNhbWVyYS5pbnZQcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgdmFyIHZvbHVtZU1lc2hMaXN0ID0gW107XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBsaWdodCA9IHNjZW5lLmxpZ2h0c1tpXTtcclxuICAgICAgICAgICAgaWYgKGxpZ2h0LmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciB1VHBsID0gbGlnaHQudW5pZm9ybVRlbXBsYXRlcztcclxuXHJcbiAgICAgICAgICAgIHZhciB2b2x1bWVNZXNoID0gbGlnaHQudm9sdW1lTWVzaCB8fCBsaWdodC5fX3ZvbHVtZU1lc2g7XHJcblxyXG4gICAgICAgICAgICBpZiAodm9sdW1lTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gdm9sdW1lTWVzaC5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIC8vIFZvbHVtZSBtZXNoIHdpbGwgYWZmZWN0IHRoZSBzY2VuZSBib3VuZGluZyBib3ggd2hlbiByZW5kZXJpbmdcclxuICAgICAgICAgICAgICAgIC8vIGlmIGNhc3RTaGFkb3cgaXMgdHJ1ZVxyXG4gICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5jYXN0U2hhZG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHVua25vd25MaWdodFR5cGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAobGlnaHQudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BPSU5UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwucG9pbnRMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UmFuZ2UnLCB1VHBsLnBvaW50TGlnaHRSYW5nZS52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFBvc2l0aW9uJywgdVRwbC5wb2ludExpZ2h0UG9zaXRpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnU1BPVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UG9zaXRpb24nLCB1VHBsLnNwb3RMaWdodFBvc2l0aW9uLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLnNwb3RMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UmFuZ2UnLCB1VHBsLnNwb3RMaWdodFJhbmdlLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0RGlyZWN0aW9uJywgdVRwbC5zcG90TGlnaHREaXJlY3Rpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgndW1icmFBbmdsZUNvc2luZScsIHVUcGwuc3BvdExpZ2h0VW1icmFBbmdsZUNvc2luZS52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdwZW51bWJyYUFuZ2xlQ29zaW5lJywgdVRwbC5zcG90TGlnaHRQZW51bWJyYUFuZ2xlQ29zaW5lLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2ZhbGxvZmZGYWN0b3InLCB1VHBsLnNwb3RMaWdodEZhbGxvZmZGYWN0b3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnU1BIRVJFX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuc3BoZXJlTGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFJhbmdlJywgdVRwbC5zcGhlcmVMaWdodFJhbmdlLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UmFkaXVzJywgdVRwbC5zcGhlcmVMaWdodFJhZGl1cy52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFBvc2l0aW9uJywgdVRwbC5zcGhlcmVMaWdodFBvc2l0aW9uLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1RVQkVfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvbG9yJywgdVRwbC50dWJlTGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFJhbmdlJywgdVRwbC50dWJlTGlnaHRSYW5nZS52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodEV4dGVuZCcsIHVUcGwudHViZUxpZ2h0RXh0ZW5kLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UG9zaXRpb24nLCB1VHBsLnR1YmVMaWdodFBvc2l0aW9uLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd25MaWdodFR5cGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh1bmtub3duTGlnaHRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnZXllUG9zaXRpb24nLCBleWVQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCd2aWV3UHJvamVjdGlvbkludicsIHZpZXdQcm9qZWN0aW9uSW52LmFycmF5KTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMScsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTEoKSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTInLCB0aGlzLl9nQnVmZmVyLmdldFRhcmdldFRleHR1cmUyKCkpO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUzJywgdGhpcy5fZ0J1ZmZlci5nZXRUYXJnZXRUZXh0dXJlMygpKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2b2x1bWVNZXNoTGlzdC5wdXNoKHZvbHVtZU1lc2gpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXNzID0gdGhpcy5fZnVsbFF1YWRQYXNzO1xyXG4gICAgICAgICAgICAgICAgdmFyIHVua25vd25MaWdodFR5cGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vIEZ1bGwgcXVhZCBsaWdodFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChsaWdodC50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQU1CSUVOVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwgPSB0aGlzLl9hbWJpZW50TWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLmFtYmllbnRMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0FNQklFTlRfU0hfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsID0gdGhpcy5fYW1iaWVudFNITWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLmFtYmllbnRTSExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvZWZmaWNpZW50cycsIHVUcGwuYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHMudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQU1CSUVOVF9DVUJFTUFQX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbCA9IHRoaXMuX2FtYmllbnRDdWJlbWFwTWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLmFtYmllbnRDdWJlbWFwTGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q3ViZW1hcCcsIHVUcGwuYW1iaWVudEN1YmVtYXBMaWdodEN1YmVtYXAudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5zZXRVbmlmb3JtKCdicmRmTG9va3VwJywgdVRwbC5hbWJpZW50Q3ViZW1hcExpZ2h0QlJERkxvb2t1cC52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdESVJFQ1RJT05BTF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNTaGFkb3cgPSBzaGFkb3dNYXBQYXNzICYmIGxpZ2h0LmNhc3RTaGFkb3c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwgPSB0aGlzLl9kaXJlY3Rpb25hbExpZ2h0TWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsW2hhc1NoYWRvdyA/ICdkZWZpbmUnIDogJ3VuZGVmaW5lJ10oJ2ZyYWdtZW50JywgJ1NIQURPV01BUF9FTkFCTEVEJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNTaGFkb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdTSEFET1dfQ0FTQ0FERScsIGxpZ2h0LnNoYWRvd0Nhc2NhZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuZGlyZWN0aW9uYWxMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHREaXJlY3Rpb24nLCB1VHBsLmRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5rb253IGxpZ2h0IHR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93bkxpZ2h0VHlwZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodW5rbm93bkxpZ2h0VHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBwYXNzTWF0ZXJpYWwgPSBwYXNzLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2V5ZVBvc2l0aW9uJywgZXllUG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ3ZpZXdQcm9qZWN0aW9uSW52Jywgdmlld1Byb2plY3Rpb25JbnYuYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMScsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTEoKSk7XHJcbiAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUyJywgdGhpcy5fZ0J1ZmZlci5nZXRUYXJnZXRUZXh0dXJlMigpKTtcclxuICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTMnLCB0aGlzLl9nQnVmZmVyLmdldFRhcmdldFRleHR1cmUzKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFRPRE9cclxuICAgICAgICAgICAgICAgIGlmIChzaGFkb3dNYXBQYXNzICYmIGxpZ2h0LmNhc3RTaGFkb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXAnLCBsaWdodC5fX3NoYWRvd01hcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0TWF0cmljZXMnLCBsaWdodC5fX2xpZ2h0TWF0cmljZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyJywgbGlnaHQuX19jYXNjYWRlQ2xpcHNOZWFyKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnc2hhZG93Q2FzY2FkZUNsaXBzRmFyJywgbGlnaHQuX19jYXNjYWRlQ2xpcHNGYXIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXBTaXplJywgbGlnaHQuc2hhZG93UmVzb2x1dGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGFzcy5yZW5kZXJRdWFkKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyVm9sdW1lTWVzaExpc3QocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIHZvbHVtZU1lc2hMaXN0KTtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdsaWdodGFjY3VtdWxhdGUnLCByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XHJcblxyXG4gICAgICAgIGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2FmdGVybGlnaHRhY2N1bXVsYXRlJywgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgX3ByZXBhcmVMaWdodFNoYWRvdzogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgd29ybGRWaWV3ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKSB7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpZ2h0ID0gc2NlbmUubGlnaHRzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZvbHVtZU1lc2ggPSBsaWdodC52b2x1bWVNZXNoIHx8IGxpZ2h0Ll9fdm9sdW1lTWVzaDtcclxuICAgICAgICAgICAgICAgIGlmICghbGlnaHQuY2FzdFNoYWRvdyB8fCBsaWdodC5pbnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGxpZ2h0LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdQT0lOVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnU1BPVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZydXN0dW0gY3VsbGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHdvcmxkVmlldywgY2FtZXJhLnZpZXdNYXRyaXgsIHZvbHVtZU1lc2gud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NlbmUuaXNGcnVzdHVtQ3VsbGVkKHZvbHVtZU1lc2gsIGNhbWVyYSwgd29ybGRWaWV3LmFycmF5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVTaW5nbGVMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBsaWdodCwgdm9sdW1lTWVzaC5tYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdESVJFQ1RJT05BTF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVTaW5nbGVMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBsaWdodCwgbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgX3ByZXBhcmVTaW5nbGVMaWdodFNoYWRvdzogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBsaWdodCwgbWF0ZXJpYWwpIHtcclxuICAgICAgICBzd2l0Y2ggKGxpZ2h0LnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnUE9JTlRfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgdmFyIHNoYWRvd01hcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhZG93TWFwUGFzcy5yZW5kZXJQb2ludExpZ2h0U2hhZG93KFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLCBzY2VuZSwgbGlnaHQsIHNoYWRvd01hcHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcCcsIHNoYWRvd01hcHNbMF0pO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXBTaXplJywgbGlnaHQuc2hhZG93UmVzb2x1dGlvbik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnU1BPVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93TWFwcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpZ2h0TWF0cmljZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhZG93TWFwUGFzcy5yZW5kZXJTcG90TGlnaHRTaGFkb3coXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBsaWdodCwgbGlnaHRNYXRyaWNlcywgc2hhZG93TWFwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0U2hhZG93TWFwJywgc2hhZG93TWFwc1swXSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodE1hdHJpeCcsIGxpZ2h0TWF0cmljZXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXBTaXplJywgbGlnaHQuc2hhZG93UmVzb2x1dGlvbik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnRElSRUNUSU9OQUxfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgdmFyIHNoYWRvd01hcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciBsaWdodE1hdHJpY2VzID0gW107XHJcbiAgICAgICAgICAgICAgICB2YXIgY2FzY2FkZUNsaXBzID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYWRvd01hcFBhc3MucmVuZGVyRGlyZWN0aW9uYWxMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgbGlnaHQsIGNhc2NhZGVDbGlwcywgbGlnaHRNYXRyaWNlcywgc2hhZG93TWFwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHZhciBjYXNjYWRlQ2xpcHNOZWFyID0gY2FzY2FkZUNsaXBzLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2FzY2FkZUNsaXBzRmFyID0gY2FzY2FkZUNsaXBzLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICBjYXNjYWRlQ2xpcHNOZWFyLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgY2FzY2FkZUNsaXBzRmFyLnNoaWZ0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSBmcm9tIGZhciB0byBuZWFyXHJcbiAgICAgICAgICAgICAgICBjYXNjYWRlQ2xpcHNOZWFyLnJldmVyc2UoKTtcclxuICAgICAgICAgICAgICAgIGNhc2NhZGVDbGlwc0Zhci5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICBsaWdodE1hdHJpY2VzLnJldmVyc2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsaWdodC5fX2Nhc2NhZGVDbGlwc05lYXIgPSBjYXNjYWRlQ2xpcHNOZWFyO1xyXG4gICAgICAgICAgICAgICAgbGlnaHQuX19jYXNjYWRlQ2xpcHNGYXIgPSBjYXNjYWRlQ2xpcHNGYXI7XHJcbiAgICAgICAgICAgICAgICBsaWdodC5fX3NoYWRvd01hcCA9IHNoYWRvd01hcHNbMF07XHJcbiAgICAgICAgICAgICAgICBsaWdodC5fX2xpZ2h0TWF0cmljZXMgPSBsaWdodE1hdHJpY2VzO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBVcGRhdGUgbGlnaHQgdm9sdW1lIG1lc2hcclxuICAgIC8vIExpZ2h0IHZvbHVtZSBtZXNoIGlzIHJlbmRlcmVkIGluIGxpZ2h0IGFjY3VtdWxhdGUgcGFzcyBpbnN0ZWFkIG9mIGZ1bGwgcXVhZC5cclxuICAgIC8vIEl0IHdpbGwgcmVkdWNlIHBpeGVscyBzaWduaWZpY2FudGx5IHdoZW4gbG9jYWwgbGlnaHQgaXMgcmVsYXRpdmVseSBzbWFsbC5cclxuICAgIC8vIEFuZCB3ZSBjYW4gdXNlIGN1c3RvbSB2b2x1bWUgbWVzaCB0byBzaGFwZSB0aGUgbGlnaHQuXHJcbiAgICAvL1xyXG4gICAgLy8gU2VlIFwiRGVmZXJyZWQgU2hhZGluZyBPcHRpbWl6YXRpb25zXCIgaW4gR0RDMjAxMVxyXG4gICAgX3VwZGF0ZUxpZ2h0UHJveHk6IGZ1bmN0aW9uIChsaWdodCkge1xyXG4gICAgICAgIHZhciB2b2x1bWVNZXNoO1xyXG4gICAgICAgIGlmIChsaWdodC52b2x1bWVNZXNoKSB7XHJcbiAgICAgICAgICAgIHZvbHVtZU1lc2ggPSBsaWdodC52b2x1bWVNZXNoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc3dpdGNoIChsaWdodC50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBPbmx5IGxvY2FsIGxpZ2h0IChwb2ludCBhbmQgc3BvdCkgbmVlZHMgdm9sdW1lIG1lc2guXHJcbiAgICAgICAgICAgICAgICAvLyBEaXJlY3Rpb25hbCBhbmQgYW1iaWVudCBsaWdodCByZW5kZXJzIGluIGZ1bGwgcXVhZFxyXG4gICAgICAgICAgICAgICAgY2FzZSAnUE9JTlRfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnU1BIRVJFX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2hhZGVyID0gbGlnaHQudHlwZSA9PT0gJ1NQSEVSRV9MSUdIVCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9zcGhlcmVMaWdodFNoYWRlciA6IHRoaXMuX3BvaW50TGlnaHRTaGFkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVm9sdW1lIG1lc2ggY3JlYXRlZCBhdXRvbWF0aWNhbGx5XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFsaWdodC5fX3ZvbHVtZU1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHQuX192b2x1bWVNZXNoID0gbmV3IE1lc2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWw6IHRoaXMuX2NyZWF0ZUxpZ2h0UGFzc01hdChzaGFkZXIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IHRoaXMuX2xpZ2h0U3BoZXJlR2VvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBjdWxsaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBsaWdodCB2b2x1bWUgbWVzaCBpbnRlcnNlY3QgY2FtZXJhIG5lYXIgcGxhbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgbWVzaCBpbnNpZGUgY2FuIHN0aWxsIGJlIHJlbmRlcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdWxsaW5nOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdm9sdW1lTWVzaCA9IGxpZ2h0Ll9fdm9sdW1lTWVzaDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgciA9IGxpZ2h0LnJhbmdlICsgKGxpZ2h0LnJhZGl1cyB8fCAwKTtcclxuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLnNjYWxlLnNldChyLCByLCByKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ1NQT1RfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0Ll9fdm9sdW1lTWVzaCA9IGxpZ2h0Ll9fdm9sdW1lTWVzaCB8fCBuZXcgTWVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsOiB0aGlzLl9jcmVhdGVMaWdodFBhc3NNYXQodGhpcy5fc3BvdExpZ2h0U2hhZGVyKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IHRoaXMuX2xpZ2h0Q29uZUdlbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VsbGluZzogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhc3BlY3QgPSBNYXRoLnRhbihsaWdodC5wZW51bWJyYUFuZ2xlICogTWF0aC5QSSAvIDE4MCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gbGlnaHQucmFuZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5zY2FsZS5zZXQoYXNwZWN0ICogcmFuZ2UsIGFzcGVjdCAqIHJhbmdlLCByYW5nZSAvIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnVFVCRV9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQuX192b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoIHx8IG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWw6IHRoaXMuX2NyZWF0ZUxpZ2h0UGFzc01hdCh0aGlzLl90dWJlTGlnaHRTaGFkZXIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogdGhpcy5fbGlnaHRDeWxpbmRlckdlbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VsbGluZzogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IGxpZ2h0LnJhbmdlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2guc2NhbGUuc2V0KGxpZ2h0Lmxlbmd0aCAvIDIgKyByYW5nZSwgcmFuZ2UsIHJhbmdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodm9sdW1lTWVzaCkge1xyXG4gICAgICAgICAgICB2b2x1bWVNZXNoLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAvLyBBcHBseSBsaWdodCB0cmFuc2Zvcm1cclxuICAgICAgICAgICAgTWF0cml4NC5tdWx0aXBseSh2b2x1bWVNZXNoLndvcmxkVHJhbnNmb3JtLCBsaWdodC53b3JsZFRyYW5zZm9ybSwgdm9sdW1lTWVzaC53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIHZhciBoYXNTaGFkb3cgPSB0aGlzLnNoYWRvd01hcFBhc3MgJiYgbGlnaHQuY2FzdFNoYWRvdztcclxuICAgICAgICAgICAgdm9sdW1lTWVzaC5tYXRlcmlhbFtoYXNTaGFkb3cgPyAnZGVmaW5lJyA6ICd1bmRlZmluZSddKCdmcmFnbWVudCcsICdTSEFET1dNQVBfRU5BQkxFRCcpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3JlbmRlclZvbHVtZU1lc2hMaXN0OiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB3b3JsZFZpZXcgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBwcmVaTWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5wcmV6LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnByZXouZnJhZ21lbnQnKSlcclxuICAgICAgICB9KTtcclxuICAgICAgICBmdW5jdGlvbiBnZXRQcmVaTWF0ZXJpYWwoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcmVaTWF0ZXJpYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIHZvbHVtZU1lc2hMaXN0KSB7XHJcbiAgICAgICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICAgICAgZ2wuZGVwdGhGdW5jKGdsLkxFUVVBTCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZvbHVtZU1lc2hMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdm9sdW1lTWVzaCA9IHZvbHVtZU1lc2hMaXN0W2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEZydXN0dW0gY3VsbGluZ1xyXG4gICAgICAgICAgICAgICAgTWF0cml4NC5tdWx0aXBseSh3b3JsZFZpZXcsIGNhbWVyYS52aWV3TWF0cml4LCB2b2x1bWVNZXNoLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgICAgIGlmIChzY2VuZS5pc0ZydXN0dW1DdWxsZWQodm9sdW1lTWVzaCwgY2FtZXJhLCB3b3JsZFZpZXcuYXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gVXNlIHByZXogdG8gYXZvaWQgb25lIHBpeGVsIHJlbmRlcmVkIHR3aWNlXHJcbiAgICAgICAgICAgICAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgLy8gZGVwdGhNYXNrIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgY2xlYXIgREVQVEhfQlVGRkVSXHJcbiAgICAgICAgICAgICAgICBnbC5jbGVhcihnbC5ERVBUSF9CVUZGRVJfQklUKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKFt2b2x1bWVNZXNoXSwgY2FtZXJhLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGdldFByZVpNYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gUmVuZGVyIGxpZ2h0XHJcbiAgICAgICAgICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5tYXRlcmlhbC5kZXB0aE1hc2sgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhbdm9sdW1lTWVzaF0sIGNhbWVyYSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGdsLmRlcHRoRnVuYyhnbC5MRVNTKTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHRoaXMuX2dCdWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9saWdodEFjY3VtVGV4LmRpc3Bvc2UocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9saWdodENvbmVHZW8uZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fbGlnaHRDeWxpbmRlckdlby5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9saWdodFNwaGVyZUdlby5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZnVsbFF1YWRQYXNzLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX291dHB1dFBhc3MuZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcmVjdGlvbmFsTGlnaHRNYXQuZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuc2hhZG93TWFwUGFzcy5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEZWZlcnJlZFJlbmRlcmVyO1xyXG4iLCJcclxuXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB7IEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcblxyXG4vKipcclxuICogQGNsYXNzIDJ4MiBNYXRyaXhcclxuICogQG5hbWUgbWF0MlxyXG4gKi9cclxuXHJcbnZhciBtYXQyID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBtYXQyXHJcbiAqXHJcbiAqIEByZXR1cm5zIHttYXQyfSBhIG5ldyAyeDIgbWF0cml4XHJcbiAqL1xyXG5tYXQyLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQyIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDJ9IGEgbmV3IDJ4MiBtYXRyaXhcclxuICovXHJcbm1hdDIuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoNCk7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0MiB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xyXG5tYXQyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIG91dFszXSA9IGFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBhIG1hdDIgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xyXG5tYXQyLmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXHJcbiAgICBpZiAob3V0ID09PSBhKSB7XHJcbiAgICAgICAgdmFyIGExID0gYVsxXTtcclxuICAgICAgICBvdXRbMV0gPSBhWzJdO1xyXG4gICAgICAgIG91dFsyXSA9IGExO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgICAgIG91dFsxXSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzJdID0gYVsxXTtcclxuICAgICAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLFxyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XHJcbiAgICAgICAgZGV0ID0gYTAgKiBhMyAtIGEyICogYTE7XHJcblxyXG4gICAgaWYgKCFkZXQpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGRldCA9IDEuMCAvIGRldDtcclxuXHJcbiAgICBvdXRbMF0gPSAgYTMgKiBkZXQ7XHJcbiAgICBvdXRbMV0gPSAtYTEgKiBkZXQ7XHJcbiAgICBvdXRbMl0gPSAtYTIgKiBkZXQ7XHJcbiAgICBvdXRbM10gPSAgYTAgKiBkZXQ7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBhZGp1Z2F0ZSBvZiBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIuYWRqb2ludCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgLy8gQ2FjaGluZyB0aGlzIHZhbHVlIGlzIG5lc3NlY2FyeSBpZiBvdXQgPT0gYVxyXG4gICAgdmFyIGEwID0gYVswXTtcclxuICAgIG91dFswXSA9ICBhWzNdO1xyXG4gICAgb3V0WzFdID0gLWFbMV07XHJcbiAgICBvdXRbMl0gPSAtYVsyXTtcclxuICAgIG91dFszXSA9ICBhMDtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cclxubWF0Mi5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4gYVswXSAqIGFbM10gLSBhWzJdICogYVsxXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQyJ3NcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cclxubWF0Mi5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM107XHJcbiAgICB2YXIgYjAgPSBiWzBdLCBiMSA9IGJbMV0sIGIyID0gYlsyXSwgYjMgPSBiWzNdO1xyXG4gICAgb3V0WzBdID0gYTAgKiBiMCArIGEyICogYjE7XHJcbiAgICBvdXRbMV0gPSBhMSAqIGIwICsgYTMgKiBiMTtcclxuICAgIG91dFsyXSA9IGEwICogYjIgKyBhMiAqIGIzO1xyXG4gICAgb3V0WzNdID0gYTEgKiBiMiArIGEzICogYjM7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0Mi5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5tYXQyLm11bCA9IG1hdDIubXVsdGlwbHk7XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIG1hdDIgYnkgdGhlIGdpdmVuIGFuZ2xlXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xyXG5tYXQyLnJvdGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXSxcclxuICAgICAgICBzID0gTWF0aC5zaW4ocmFkKSxcclxuICAgICAgICBjID0gTWF0aC5jb3MocmFkKTtcclxuICAgIG91dFswXSA9IGEwICogIGMgKyBhMiAqIHM7XHJcbiAgICBvdXRbMV0gPSBhMSAqICBjICsgYTMgKiBzO1xyXG4gICAgb3V0WzJdID0gYTAgKiAtcyArIGEyICogYztcclxuICAgIG91dFszXSA9IGExICogLXMgKyBhMyAqIGM7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MiBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKiovXHJcbm1hdDIuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sXHJcbiAgICAgICAgdjAgPSB2WzBdLCB2MSA9IHZbMV07XHJcbiAgICBvdXRbMF0gPSBhMCAqIHYwO1xyXG4gICAgb3V0WzFdID0gYTEgKiB2MDtcclxuICAgIG91dFsyXSA9IGEyICogdjE7XHJcbiAgICBvdXRbM10gPSBhMyAqIHYxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXHJcbm1hdDIuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpKSlcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEwsIEQgYW5kIFUgbWF0cmljZXMgKExvd2VyIHRyaWFuZ3VsYXIsIERpYWdvbmFsIGFuZCBVcHBlciB0cmlhbmd1bGFyKSBieSBmYWN0b3JpemluZyB0aGUgaW5wdXQgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gTCB0aGUgbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBEIHRoZSBkaWFnb25hbCBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBVIHRoZSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIGlucHV0IG1hdHJpeCB0byBmYWN0b3JpemVcclxuICovXHJcblxyXG5tYXQyLkxEVSA9IGZ1bmN0aW9uIChMLCBELCBVLCBhKSB7XHJcbiAgICBMWzJdID0gYVsyXS9hWzBdO1xyXG4gICAgVVswXSA9IGFbMF07XHJcbiAgICBVWzFdID0gYVsxXTtcclxuICAgIFVbM10gPSBhWzNdIC0gTFsyXSAqIFVbMV07XHJcbiAgICByZXR1cm4gW0wsIEQsIFVdO1xyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG1hdDI7IiwiXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB7IEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcblxyXG4vKipcclxuICogQGNsYXNzIDJ4MyBNYXRyaXhcclxuICogQG5hbWUgbWF0MmRcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIEEgbWF0MmQgY29udGFpbnMgc2l4IGVsZW1lbnRzIGRlZmluZWQgYXM6XHJcbiAqIDxwcmU+XHJcbiAqIFthLCBjLCB0eCxcclxuICogIGIsIGQsIHR5XVxyXG4gKiA8L3ByZT5cclxuICogVGhpcyBpcyBhIHNob3J0IGZvcm0gZm9yIHRoZSAzeDMgbWF0cml4OlxyXG4gKiA8cHJlPlxyXG4gKiBbYSwgYywgdHgsXHJcbiAqICBiLCBkLCB0eSxcclxuICogIDAsIDAsIDFdXHJcbiAqIDwvcHJlPlxyXG4gKiBUaGUgbGFzdCByb3cgaXMgaWdub3JlZCBzbyB0aGUgYXJyYXkgaXMgc2hvcnRlciBhbmQgb3BlcmF0aW9ucyBhcmUgZmFzdGVyLlxyXG4gKi9cclxuXHJcbnZhciBtYXQyZCA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0MmRcclxuICpcclxuICogQHJldHVybnMge21hdDJkfSBhIG5ldyAyeDMgbWF0cml4XHJcbiAqL1xyXG5tYXQyZC5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg2KTtcclxuICAgIG91dFswXSA9IDE7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICBvdXRbNF0gPSAwO1xyXG4gICAgb3V0WzVdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQyZCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IGEgbmV3IDJ4MyBtYXRyaXhcclxuICovXHJcbm1hdDJkLmNsb25lID0gZnVuY3Rpb24oYSkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDYpO1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICBvdXRbNV0gPSBhWzVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0MmQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cclxubWF0MmQuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICBvdXRbNV0gPSBhWzVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgYSBtYXQyZCB0byB0aGUgaWRlbnRpdHkgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cclxubWF0MmQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcclxuICAgIG91dFswXSA9IDE7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICBvdXRbNF0gPSAwO1xyXG4gICAgb3V0WzVdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xyXG5tYXQyZC5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhYSA9IGFbMF0sIGFiID0gYVsxXSwgYWMgPSBhWzJdLCBhZCA9IGFbM10sXHJcbiAgICAgICAgYXR4ID0gYVs0XSwgYXR5ID0gYVs1XTtcclxuXHJcbiAgICB2YXIgZGV0ID0gYWEgKiBhZCAtIGFiICogYWM7XHJcbiAgICBpZighZGV0KXtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGRldCA9IDEuMCAvIGRldDtcclxuXHJcbiAgICBvdXRbMF0gPSBhZCAqIGRldDtcclxuICAgIG91dFsxXSA9IC1hYiAqIGRldDtcclxuICAgIG91dFsyXSA9IC1hYyAqIGRldDtcclxuICAgIG91dFszXSA9IGFhICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGFjICogYXR5IC0gYWQgKiBhdHgpICogZGV0O1xyXG4gICAgb3V0WzVdID0gKGFiICogYXR4IC0gYWEgKiBhdHkpICogZGV0O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cclxubWF0MmQuZGV0ZXJtaW5hbnQgPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgcmV0dXJuIGFbMF0gKiBhWzNdIC0gYVsxXSAqIGFbMl07XHJcbn07XHJcblxyXG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0MmQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDJkfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cclxubWF0MmQubXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLCBhNCA9IGFbNF0sIGE1ID0gYVs1XSxcclxuICAgICAgICBiMCA9IGJbMF0sIGIxID0gYlsxXSwgYjIgPSBiWzJdLCBiMyA9IGJbM10sIGI0ID0gYls0XSwgYjUgPSBiWzVdO1xyXG4gICAgb3V0WzBdID0gYTAgKiBiMCArIGEyICogYjE7XHJcbiAgICBvdXRbMV0gPSBhMSAqIGIwICsgYTMgKiBiMTtcclxuICAgIG91dFsyXSA9IGEwICogYjIgKyBhMiAqIGIzO1xyXG4gICAgb3V0WzNdID0gYTEgKiBiMiArIGEzICogYjM7XHJcbiAgICBvdXRbNF0gPSBhMCAqIGI0ICsgYTIgKiBiNSArIGE0O1xyXG4gICAgb3V0WzVdID0gYTEgKiBiNCArIGEzICogYjUgKyBhNTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQyZC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5tYXQyZC5tdWwgPSBtYXQyZC5tdWx0aXBseTtcclxuXHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIG1hdDJkIGJ5IHRoZSBnaXZlbiBhbmdsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cclxubWF0MmQucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLCBhNCA9IGFbNF0sIGE1ID0gYVs1XSxcclxuICAgICAgICBzID0gTWF0aC5zaW4ocmFkKSxcclxuICAgICAgICBjID0gTWF0aC5jb3MocmFkKTtcclxuICAgIG91dFswXSA9IGEwICogIGMgKyBhMiAqIHM7XHJcbiAgICBvdXRbMV0gPSBhMSAqICBjICsgYTMgKiBzO1xyXG4gICAgb3V0WzJdID0gYTAgKiAtcyArIGEyICogYztcclxuICAgIG91dFszXSA9IGExICogLXMgKyBhMyAqIGM7XHJcbiAgICBvdXRbNF0gPSBhNDtcclxuICAgIG91dFs1XSA9IGE1O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgdGhlIG1hdDJkIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXHJcbiAqIEBwYXJhbSB7dmVjMn0gdiB0aGUgdmVjMiB0byBzY2FsZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqKi9cclxubWF0MmQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sIGE0ID0gYVs0XSwgYTUgPSBhWzVdLFxyXG4gICAgICAgIHYwID0gdlswXSwgdjEgPSB2WzFdO1xyXG4gICAgb3V0WzBdID0gYTAgKiB2MDtcclxuICAgIG91dFsxXSA9IGExICogdjA7XHJcbiAgICBvdXRbMl0gPSBhMiAqIHYxO1xyXG4gICAgb3V0WzNdID0gYTMgKiB2MTtcclxuICAgIG91dFs0XSA9IGE0O1xyXG4gICAgb3V0WzVdID0gYTU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdDJkIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXHJcbiAqIEBwYXJhbSB7dmVjMn0gdiB0aGUgdmVjMiB0byB0cmFuc2xhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKiovXHJcbm1hdDJkLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXSwgYTQgPSBhWzRdLCBhNSA9IGFbNV0sXHJcbiAgICAgICAgdjAgPSB2WzBdLCB2MSA9IHZbMV07XHJcbiAgICBvdXRbMF0gPSBhMDtcclxuICAgIG91dFsxXSA9IGExO1xyXG4gICAgb3V0WzJdID0gYTI7XHJcbiAgICBvdXRbM10gPSBhMztcclxuICAgIG91dFs0XSA9IGEwICogdjAgKyBhMiAqIHYxICsgYTQ7XHJcbiAgICBvdXRbNV0gPSBhMSAqIHYwICsgYTMgKiB2MSArIGE1O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cclxubWF0MmQuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpICsgTWF0aC5wb3coYVs0XSwgMikgKyBNYXRoLnBvdyhhWzVdLCAyKSArIDEpKVxyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG1hdDJkOyIsIi8qKlxyXG4gKiBAZmlsZW92ZXJ2aWV3IGdsLW1hdHJpeCAtIEhpZ2ggcGVyZm9ybWFuY2UgbWF0cml4IGFuZCB2ZWN0b3Igb3BlcmF0aW9uc1xyXG4gKiBAYXV0aG9yIEJyYW5kb24gSm9uZXNcclxuICogQGF1dGhvciBDb2xpbiBNYWNLZW56aWUgSVZcclxuICogQHZlcnNpb24gMi4yLjJcclxuICovXHJcblxyXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTMsIEJyYW5kb24gSm9uZXMsIENvbGluIE1hY0tlbnppZSBJVi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuXHJcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXHJcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcclxuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcclxuICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxyXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxyXG4gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxyXG4gICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXHJcblxyXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcclxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcclxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxyXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxyXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcclxuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xyXG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cclxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcclxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcclxuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovXHJcblxyXG5pbXBvcnQgdmVjMiBmcm9tICcuL3ZlYzInO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuL3ZlYzMnO1xyXG5pbXBvcnQgdmVjNCBmcm9tICcuL3ZlYzQnO1xyXG5pbXBvcnQgbWF0MiBmcm9tICcuL21hdDInO1xyXG5pbXBvcnQgbWF0MmQgZnJvbSAnLi9tYXQyZCc7XHJcbmltcG9ydCBtYXQzIGZyb20gJy4vbWF0Myc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4vbWF0NCc7XHJcbmltcG9ydCBxdWF0IGZyb20gJy4vcXVhdCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICB2ZWMyOiB2ZWMyLFxyXG4gICAgdmVjMzogdmVjMyxcclxuICAgIHZlYzQ6IHZlYzQsXHJcbiAgICBtYXQyOiBtYXQyLFxyXG4gICAgbWF0MmQ6IG1hdDJkLFxyXG4gICAgbWF0MzogbWF0MyxcclxuICAgIG1hdDQ6IG1hdDQsXHJcbiAgICBxdWF0OiBxdWF0XHJcbn07XHJcbiIsIi8vIERFUFJFQ0FURURcclxuaW1wb3J0IGdsbWF0cml4IGZyb20gJy4uL2dsbWF0cml4JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGdsbWF0cml4O1xyXG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LlNwaGVyZVxyXG4gKiBAZXh0ZW5kcyB7Y2xheS5MaWdodH1cclxuICovXHJcbnZhciBTcGhlcmVMaWdodCA9IExpZ2h0LmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5LmxpZ2h0LlNwaGVyZSMgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYW5nZTogMTAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcmFkaXVzOiA1XHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnU1BIRVJFX0xJR0hUJyxcclxuXHJcbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XHJcbiAgICAgICAgc3BoZXJlTGlnaHRQb3NpdGlvbjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwaGVyZUxpZ2h0UmFuZ2U6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmFuZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwaGVyZUxpZ2h0UmFkaXVzOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJhZGl1cztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BoZXJlTGlnaHRDb2xvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0qaW50ZW5zaXR5LCBjb2xvclsxXSppbnRlbnNpdHksIGNvbG9yWzJdKmludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BoZXJlTGlnaHQ7XHJcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuVHViZVxyXG4gKiBAZXh0ZW5kcyB7Y2xheS5MaWdodH1cclxuICovXHJcbnZhciBUdWJlTGlnaHQgPSBMaWdodC5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5saWdodC5UdWJlIyAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJhbmdlOiAxMDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBsZW5ndGg6IDEwXHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnVFVCRV9MSUdIVCcsXHJcblxyXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xyXG4gICAgICAgIHR1YmVMaWdodFBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHR1YmVMaWdodEV4dGVuZDoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHggPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRXh0ZW5kIGluIHggYXhpc1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LmNvcHkoaW5zdGFuY2Uud29ybGRUcmFuc2Zvcm0ueClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm5vcm1hbGl6ZSgpLnNjYWxlKGluc3RhbmNlLmxlbmd0aCAvIDIpLmFycmF5O1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSkoKVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHR1YmVMaWdodFJhbmdlOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJhbmdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdHViZUxpZ2h0Q29sb3I6IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBpbnN0YW5jZS5jb2xvcjtcclxuICAgICAgICAgICAgICAgIHZhciBpbnRlbnNpdHkgPSBpbnN0YW5jZS5pbnRlbnNpdHk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW2NvbG9yWzBdKmludGVuc2l0eSwgY29sb3JbMV0qaW50ZW5zaXR5LCBjb2xvclsyXSppbnRlbnNpdHldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFR1YmVMaWdodDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCBjcmVhdGVDb21wb3NpdG9yIGZyb20gJy4uL2NyZWF0ZUNvbXBvc2l0b3InO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxvYWRlci5GWFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEZYTG9hZGVyID0gQmFzZS5leHRlbmQoLyoqIEBsZW5kcyBjbGF5LmxvYWRlci5GWCMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICByb290UGF0aDogJycsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHRleHR1cmVSb290UGF0aDogJycsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHNoYWRlclJvb3RQYXRoOiAnJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlNjZW5lfVxyXG4gICAgICovXHJcbiAgICBzY2VuZTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LkNhbWVyYX1cclxuICAgICAqL1xyXG4gICAgY2FtZXJhOiBudWxsXHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5sb2FkZXIuRlgucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSB1cmxcclxuICAgICAqL1xyXG4gICAgbG9hZDogZnVuY3Rpb24odXJsKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMucm9vdFBhdGgpIHtcclxuICAgICAgICAgICAgdGhpcy5yb290UGF0aCA9IHVybC5zbGljZSgwLCB1cmwubGFzdEluZGV4T2YoJy8nKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZW5kb3IucmVxdWVzdC5nZXQoe1xyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgb25wcm9ncmVzczogZnVuY3Rpb24ocGVyY2VudCwgbG9hZGVkLCB0b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdwcm9ncmVzcycsIHBlcmNlbnQsIGxvYWRlZCwgdG90YWwpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvbmVycm9yOiBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ2Vycm9yJywgZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICBvbmxvYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBjcmVhdGVDb21wb3NpdG9yKEpTT04ucGFyc2UoZGF0YSksIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUm9vdFBhdGg6IHRoaXMudGV4dHVyZVJvb3RQYXRoIHx8IHRoaXMucm9vdFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FtZXJhOiB0aGlzLmNhbWVyYSxcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZTogdGhpcy5zY2VuZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGWExvYWRlcjtcclxuIiwiaW1wb3J0IG1hdDIgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0Mic7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5Lk1hdHJpeDJcclxuICovXHJcbnZhciBNYXRyaXgyID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIE1hdHJpeDJcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MiNcclxuICAgICAqL1xyXG4gICAgdGhpcy5hcnJheSA9IG1hdDIuY3JlYXRlKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MiNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuTWF0cml4Mi5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IE1hdHJpeDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gYXJyW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBNYXRyaXgyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gKG5ldyBNYXRyaXgyKCkpLmNvcHkodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0Mi5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGFkanVnYXRlIG9mIHNlbGYsIGluLXBsYWNlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIGFkam9pbnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDIuYWRqb2ludCh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIG1hdHJpeCBkZXRlcm1pbmFudFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkZXRlcm1pbmFudDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdDIuZGV0ZXJtaW5hbnQodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRvIGEgaWRlbnRpdHkgbWF0cml4XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIGlkZW50aXR5OiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQyLmlkZW50aXR5KHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnZlcnQgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBpbnZlcnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDIuaW52ZXJ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXV0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDIubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgbXVsTGVmdDogZnVuY3Rpb24oYSkge1xyXG4gICAgICAgIG1hdDIubXVsKHRoaXMuYXJyYXksIGEuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQyLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBhIGFuZCBzZWxmLCBhIGlzIG9uIHRoZSBsZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbihhKSB7XHJcbiAgICAgICAgbWF0Mi5tdWx0aXBseSh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW5cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gICByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgcm90YXRlOiBmdW5jdGlvbihyYWQpIHtcclxuICAgICAgICBtYXQyLnJvdGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBzZWxmIGJ5IHNcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgc2NhbGU6IGZ1bmN0aW9uKHYpIHtcclxuICAgICAgICBtYXQyLnNjYWxlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zcG9zZSBzZWxmLCBpbi1wbGFjZS5cclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgdHJhbnNwb3NlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQyLnRyYW5zcG9zZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge01hdHJpeDJ9IG91dFxyXG4gKiBAcGFyYW0gIHtNYXRyaXgyfSBhXHJcbiAqIEByZXR1cm4ge01hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLmFkam9pbnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDIuYWRqb2ludChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDIuY29weShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5NYXRyaXgyLmRldGVybWluYW50ID0gZnVuY3Rpb24oYSkge1xyXG4gICAgcmV0dXJuIG1hdDIuZGV0ZXJtaW5hbnQoYS5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBvdXRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gKi9cclxuTWF0cml4Mi5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgbWF0Mi5pZGVudGl0eShvdXQuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0Mi5pbnZlcnQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIubXVsID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBtYXQyLm11bChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIubXVsdGlwbHkgPSBNYXRyaXgyLm11bDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgIHJhZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLnJvdGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XHJcbiAgICBtYXQyLnJvdGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gKi9cclxuTWF0cml4Mi5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgbWF0Mi5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7TWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge01hdHJpeDJ9IGFcclxuICogQHJldHVybiB7TWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBtYXQyLnRyYW5zcG9zZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWF0cml4MjtcclxuIiwiaW1wb3J0IG1hdDJkIGZyb20gJy4uL2dsbWF0cml4L21hdDJkJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuTWF0cml4MmRcclxuICovXHJcbnZhciBNYXRyaXgyZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIE1hdHJpeDJkXHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDJkI1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFycmF5ID0gbWF0MmQuY3JlYXRlKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MmQjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbk1hdHJpeDJkLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogTWF0cml4MmQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gYXJyW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBNYXRyaXgyZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAobmV3IE1hdHJpeDJkKCkpLmNvcHkodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQyZC5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgbWF0cml4IGRldGVybWluYW50XHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRldGVybWluYW50OiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbWF0MmQuZGV0ZXJtaW5hbnQodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRvIGEgaWRlbnRpdHkgbWF0cml4XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBpZGVudGl0eTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0MmQuaWRlbnRpdHkodGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydCBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBpbnZlcnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDJkLmludmVydCh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11dGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDJkLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5TGVmdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgbXVsTGVmdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDJkLm11bCh0aGlzLmFycmF5LCBiLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQyZC5tdWx0aXBseSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgYSBhbmQgc2VsZiwgYSBpcyBvbiB0aGUgbGVmdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0MmQubXVsdGlwbHkodGhpcy5hcnJheSwgYi5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICByb3RhdGU6IGZ1bmN0aW9uKHJhZCkge1xyXG4gICAgICAgIG1hdDJkLnJvdGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBzZWxmIGJ5IHNcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbihzKSB7XHJcbiAgICAgICAgbWF0MmQuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zbGF0ZSBzZWxmIGJ5IHZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24odikge1xyXG4gICAgICAgIG1hdDJkLnRyYW5zbGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAqL1xyXG5NYXRyaXgyZC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBtYXQyZC5jb3B5KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5NYXRyaXgyZC5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHJldHVybiBtYXQyZC5kZXRlcm1pbmFudChhLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBvdXRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICBtYXQyZC5pZGVudGl0eShvdXQuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAqL1xyXG5NYXRyaXgyZC5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDJkLmludmVydChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgbWF0MmQubXVsKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLm11bHRpcGx5ID0gTWF0cml4MmQubXVsO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEBwYXJhbSAge251bWJlcn0gICByYWRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLnJvdGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XHJcbiAgICBtYXQyZC5yb3RhdGUob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICBtYXQyZC5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgbWF0MmQudHJhbnNsYXRlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRyaXgyZDtcclxuIiwiaW1wb3J0IG1hdDMgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0Myc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5Lk1hdHJpeDNcclxuICovXHJcbnZhciBNYXRyaXgzID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcmFnZSBvZiBNYXRyaXgzXHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDMjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSBtYXQzLmNyZWF0ZSgpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgX2RpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDMjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbk1hdHJpeDMucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBNYXRyaXgzLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGNvbXBvbmVudHMgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcclxuICAgICAqL1xyXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVtpXSA9IGFycltpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBhZGp1Z2F0ZSBvZiBzZWxmLCBpbi1wbGFjZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBhZGpvaW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbWF0My5hZGpvaW50KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBNYXRyaXgzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgTWF0cml4MygpKS5jb3B5KHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgZnJvbSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICBtYXQzLmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBtYXRyaXggZGV0ZXJtaW5hbnRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGV0ZXJtaW5hbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gbWF0My5kZXRlcm1pbmFudCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBNYXRyaXgyZCBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGZyb21NYXQyZDogZnVuY3Rpb24gKGEpIHtcclxuICAgICAgICBtYXQzLmZyb21NYXQyZCh0aGlzLmFycmF5LCBhLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29waWVzIHRoZSB1cHBlci1sZWZ0IDN4MyB2YWx1ZXMgb2YgTWF0cml4NFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGZyb21NYXQ0OiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIG1hdDMuZnJvbU1hdDQodGhpcy5hcnJheSwgYS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgYSByb3RhdGlvbiBtYXRyaXggZnJvbSB0aGUgZ2l2ZW4gcXVhdGVybmlvblxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGZyb21RdWF0OiBmdW5jdGlvbiAocSkge1xyXG4gICAgICAgIG1hdDMuZnJvbVF1YXQodGhpcy5hcnJheSwgcS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0byBhIGlkZW50aXR5IG1hdHJpeFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBpZGVudGl0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIG1hdDMuaWRlbnRpdHkodGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydCBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGludmVydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIG1hdDMuaW52ZXJ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXV0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICBtYXQzLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5TGVmdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIG11bExlZnQ6IGZ1bmN0aW9uIChhKSB7XHJcbiAgICAgICAgbWF0My5tdWwodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICBtYXQzLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBhIGFuZCBzZWxmLCBhIGlzIG9uIHRoZSBsZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIG1hdDMubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZTogZnVuY3Rpb24gKHJhZCkge1xyXG4gICAgICAgIG1hdDMucm90YXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHJhZCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHNlbGYgYnkgc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICBtYXQzLnNjYWxlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2xhdGUgc2VsZiBieSB2XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9ICB2XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICBtYXQzLnRyYW5zbGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIGEgM3gzIG5vcm1hbCBtYXRyaXggKHRyYW5zcG9zZSBpbnZlcnNlKSBmcm9tIHRoZSA0eDQgbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gYVxyXG4gICAgICovXHJcbiAgICBub3JtYWxGcm9tTWF0NDogZnVuY3Rpb24gKGEpIHtcclxuICAgICAgICBtYXQzLm5vcm1hbEZyb21NYXQ0KHRoaXMuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc3Bvc2Ugc2VsZiwgaW4tcGxhY2UuXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIHRyYW5zcG9zZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIG1hdDMudHJhbnNwb3NlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuYWRqb2ludCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMuYWRqb2ludChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLmNvcHkgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBtYXQzLmNvcHkob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuTWF0cml4My5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4gbWF0My5kZXRlcm1pbmFudChhLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLmlkZW50aXR5ID0gZnVuY3Rpb24gKG91dCkge1xyXG4gICAgbWF0My5pZGVudGl0eShvdXQuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLmludmVydCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMuaW52ZXJ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5tdWwgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICBtYXQzLm11bChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMubXVsdGlwbHkgPSBNYXRyaXgzLm11bDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9ICBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLmZyb21NYXQyZCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMuZnJvbU1hdDJkKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuZnJvbU1hdDQgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBtYXQzLmZyb21NYXQ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSAgICBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuZnJvbVF1YXQgPSBmdW5jdGlvbiAob3V0LCBxKSB7XHJcbiAgICBtYXQzLmZyb21RdWF0KG91dC5hcnJheSwgcS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMubm9ybWFsRnJvbU1hdDQgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBtYXQzLm5vcm1hbEZyb21NYXQ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHJhZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLnJvdGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgbWF0My5yb3RhdGUob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5zY2FsZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHYpIHtcclxuICAgIG1hdDMuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My50cmFuc3Bvc2UgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBtYXQzLnRyYW5zcG9zZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My50cmFuc2xhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCB2KSB7XHJcbiAgICBtYXQzLnRyYW5zbGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWF0cml4MztcclxuIiwiaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9WZWN0b3IzJztcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi9WZWN0b3IyJztcclxuXHJcbi8qKlxyXG4gKiBSYW5kb20gb3IgY29uc3RhbnQgMWQsIDJkLCAzZCB2ZWN0b3IgZ2VuZXJhdG9yXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5WYWx1ZVxyXG4gKi9cclxudmFyIFZhbHVlID0gZnVuY3Rpb24oKSB7fTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ8Y2xheS5WZWN0b3IyfGNsYXkuVmVjdG9yM30gW291dF1cclxuICogQHJldHVybiB7bnVtYmVyfGNsYXkuVmVjdG9yMnxjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WYWx1ZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24ob3V0KSB7fTtcclxuXHJcbi8vIENvbnN0YW50XHJcbnZhciBDb25zdGFudFZhbHVlID0gZnVuY3Rpb24odmFsKSB7XHJcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9O1xyXG59O1xyXG5Db25zdGFudFZhbHVlLnByb3RvdHlwZSA9IG5ldyBWYWx1ZSgpO1xyXG5Db25zdGFudFZhbHVlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnN0YW50VmFsdWU7XHJcblxyXG4vLyBWZWN0b3JcclxudmFyIFZlY3RvclZhbHVlID0gZnVuY3Rpb24odmFsKSB7XHJcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB2YWwuY29uc3RydWN0b3I7XHJcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG5ldyBDb25zdHJ1Y3RvcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvdXQuY29weSh2YWwpO1xyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9O1xyXG59O1xyXG5WZWN0b3JWYWx1ZS5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcclxuVmVjdG9yVmFsdWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVjdG9yVmFsdWU7XHJcbi8vUmFuZG9tIDFEXHJcbnZhciBSYW5kb20xRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XHJcbiAgICB2YXIgcmFuZ2UgPSBtYXggLSBtaW47XHJcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogcmFuZ2UgKyBtaW47XHJcbiAgICB9O1xyXG59O1xyXG5SYW5kb20xRC5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcclxuUmFuZG9tMUQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZG9tMUQ7XHJcblxyXG4vLyBSYW5kb20yRFxyXG52YXIgUmFuZG9tMkQgPSBmdW5jdGlvbihtaW4sIG1heCkge1xyXG4gICAgdmFyIHJhbmdlWCA9IG1heC54IC0gbWluLng7XHJcbiAgICB2YXIgcmFuZ2VZID0gbWF4LnkgLSBtaW4ueTtcclxuXHJcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFZlY3RvcjIuc2V0KFxyXG4gICAgICAgICAgICBvdXQsXHJcbiAgICAgICAgICAgIHJhbmdlWCAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMF0sXHJcbiAgICAgICAgICAgIHJhbmdlWSAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMV1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfTtcclxufTtcclxuUmFuZG9tMkQucHJvdG90eXBlID0gbmV3IFZhbHVlKCk7XHJcblJhbmRvbTJELnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJhbmRvbTJEO1xyXG5cclxudmFyIFJhbmRvbTNEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIHZhciByYW5nZVggPSBtYXgueCAtIG1pbi54O1xyXG4gICAgdmFyIHJhbmdlWSA9IG1heC55IC0gbWluLnk7XHJcbiAgICB2YXIgcmFuZ2VaID0gbWF4LnogLSBtaW4uejtcclxuXHJcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFZlY3RvcjMuc2V0KFxyXG4gICAgICAgICAgICBvdXQsXHJcbiAgICAgICAgICAgIHJhbmdlWCAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMF0sXHJcbiAgICAgICAgICAgIHJhbmdlWSAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMV0sXHJcbiAgICAgICAgICAgIHJhbmdlWiAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMl1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfTtcclxufTtcclxuUmFuZG9tM0QucHJvdG90eXBlID0gbmV3IFZhbHVlKCk7XHJcblJhbmRvbTNELnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJhbmRvbTNEO1xyXG5cclxuLy8gRmFjdG9yeSBtZXRob2RzXHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgY29uc3RhbnQgMWQgdmFsdWUgZ2VuZXJhdG9yXHJcbiAqIEBwYXJhbSAge251bWJlcn0gY29uc3RhbnRcclxuICogQHJldHVybiB7Y2xheS5WYWx1ZX1cclxuICovXHJcblZhbHVlLmNvbnN0YW50ID0gZnVuY3Rpb24oY29uc3RhbnQpIHtcclxuICAgIHJldHVybiBuZXcgQ29uc3RhbnRWYWx1ZShjb25zdGFudCk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgY29uc3RhbnQgdmVjdG9yIHZhbHVlKDJkIG9yIDNkKSBnZW5lcmF0b3JcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfGNsYXkuVmVjdG9yM30gdmVjdG9yXHJcbiAqIEByZXR1cm4ge2NsYXkuVmFsdWV9XHJcbiAqL1xyXG5WYWx1ZS52ZWN0b3IgPSBmdW5jdGlvbih2ZWN0b3IpIHtcclxuICAgIHJldHVybiBuZXcgVmVjdG9yVmFsdWUodmVjdG9yKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gMWQgdmFsdWUgZ2VuZXJhdG9yXHJcbiAqIEBwYXJhbSAge251bWJlcn0gbWluXHJcbiAqIEBwYXJhbSAge251bWJlcn0gbWF4XHJcbiAqIEByZXR1cm4ge2NsYXkuVmFsdWV9XHJcbiAqL1xyXG5WYWx1ZS5yYW5kb20xRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gbmV3IFJhbmRvbTFEKG1pbiwgbWF4KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gMmQgdmFsdWUgZ2VuZXJhdG9yXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gbWluXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gbWF4XHJcbiAqIEByZXR1cm4ge2NsYXkuVmFsdWV9XHJcbiAqL1xyXG5WYWx1ZS5yYW5kb20yRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gbmV3IFJhbmRvbTJEKG1pbiwgbWF4KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gM2QgdmFsdWUgZ2VuZXJhdG9yXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gbWluXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gbWF4XHJcbiAqIEByZXR1cm4ge2NsYXkuVmFsdWV9XHJcbiAqL1xyXG5WYWx1ZS5yYW5kb20zRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gbmV3IFJhbmRvbTNEKG1pbiwgbWF4KTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFZhbHVlO1xyXG4iLCJpbXBvcnQgdmVjNCBmcm9tICcuLi9nbG1hdHJpeC92ZWM0JztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuVmVjdG9yNFxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKiBAcGFyYW0ge251bWJlcn0gelxyXG4gKiBAcGFyYW0ge251bWJlcn0gd1xyXG4gKi9cclxudmFyIFZlY3RvcjQgPSBmdW5jdGlvbih4LCB5LCB6LCB3KSB7XHJcblxyXG4gICAgeCA9IHggfHwgMDtcclxuICAgIHkgPSB5IHx8IDA7XHJcbiAgICB6ID0geiB8fCAwO1xyXG4gICAgdyA9IHcgfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JhZ2Ugb2YgVmVjdG9yNCwgcmVhZCBhbmQgd3JpdGUgb2YgeCwgeSwgeiwgdyB3aWxsIGNoYW5nZSB0aGUgdmFsdWVzIGluIGFycmF5XHJcbiAgICAgKiBBbGwgbWV0aG9kcyBhbHNvIG9wZXJhdGUgb24gdGhlIGFycmF5IGluc3RlYWQgb2YgeCwgeSwgeiwgdyBjb21wb25lbnRzXHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjQjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSB2ZWM0LmZyb21WYWx1ZXMoeCwgeSwgeiwgdyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXJ0eSBmbGFnIGlzIHVzZWQgYnkgdGhlIE5vZGUgdG8gZGV0ZXJtaW5lXHJcbiAgICAgKiBpZiB0aGUgbWF0cml4IGlzIHVwZGF0ZWQgdG8gbGF0ZXN0XHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yNCNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuVmVjdG9yNC5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IFZlY3RvcjQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYiB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5hZGQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB4LCB5IGFuZCB6IGNvbXBvbmVudHNcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHhcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHlcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHpcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHdcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgc2V0OiBmdW5jdGlvbih4LCB5LCB6LCB3KSB7XHJcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IHg7XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IHk7XHJcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IHo7XHJcbiAgICAgICAgdGhpcy5hcnJheVszXSA9IHc7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB4LCB5LCB6IGFuZCB3IGNvbXBvbmVudHMgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uKGFycikge1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSBhcnJbMF07XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IGFyclsxXTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gYXJyWzJdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbM10gPSBhcnJbM107XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBWZWN0b3I0XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjQodGhpcy54LCB0aGlzLnksIHRoaXMueiwgdGhpcy53KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGZyb20gYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0LmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBkaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5kaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQuZGlzdGFuY2UodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIGRpdmlkZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIGRpdjogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQuZGl2KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXZpZGUgc2VsZiBieSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgZGl2aWRlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5kaXZpZGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5kb3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2YgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQubGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQubGVuZ3RoKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogTGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBhIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgdFxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBsZXJwOiBmdW5jdGlvbihhLCBiLCB0KSB7XHJcbiAgICAgICAgdmVjNC5sZXJwKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNaW5pbXVtIG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBtaW46IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0Lm1pbih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWF4aW11bSBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgbWF4OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5tYXgodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdXRpcGx5IHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5lZ2F0ZSBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIG5lZ2F0ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmVjNC5uZWdhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbGl6ZSBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmVjNC5ub3JtYWxpemUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIHJhbmRvbSB4LCB5LCB6LCB3IGNvbXBvbmVudHMgd2l0aCBhIGdpdmVuIHNjYWxlXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIHJhbmRvbTogZnVuY3Rpb24oc2NhbGUpIHtcclxuICAgICAgICB2ZWM0LnJhbmRvbSh0aGlzLmFycmF5LCBzY2FsZSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHNlbGZcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbihzKSB7XHJcbiAgICAgICAgdmVjNC5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBiIGFuZCBhZGQgdG8gc2VsZlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBzY2FsZUFuZEFkZDogZnVuY3Rpb24oYiwgcykge1xyXG4gICAgICAgIHZlYzQuc2NhbGVBbmRBZGQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSwgcyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkRGlzdGFuY2VcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXJEaXN0OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQuc3FyRGlzdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxdWFyZWREaXN0YW5jZTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHJldHVybiB2ZWM0LnNxdWFyZWREaXN0YW5jZSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3Igc3F1YXJlZExlbmd0aFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXJMZW46IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB2ZWM0LnNxckxlbih0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcXVhcmVkIGxlbmd0aCBvZiBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxdWFyZWRMZW5ndGg6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB2ZWM0LnNxdWFyZWRMZW5ndGgodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHN1YnRyYWN0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgc3ViOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5zdWIodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN1YnRyYWN0IGIgZnJvbSBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgc3VidHJhY3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0LnN1YnRyYWN0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4NCBtXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtTWF0NDogZnVuY3Rpb24obSkge1xyXG4gICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNmb3JtIHNlbGYgd2l0aCBhIFF1YXRlcm5pb24gcVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIHRyYW5zZm9ybVF1YXQ6IGZ1bmN0aW9uKHEpIHtcclxuICAgICAgICB2ZWM0LnRyYW5zZm9ybVF1YXQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuICdbJyArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwodGhpcy5hcnJheSwgJywnKSArICddJztcclxuICAgIH0sXHJcblxyXG4gICAgdG9BcnJheTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcclxuLy8gR2V0dGVyIGFuZCBTZXR0ZXJcclxuaWYgKGRlZmluZVByb3BlcnR5KSB7XHJcblxyXG4gICAgdmFyIHByb3RvID0gVmVjdG9yNC5wcm90b3R5cGU7XHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3I0XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd4Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVswXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgeVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB6XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yNFxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneicsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMl07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzJdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHdcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3I0XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd3Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVszXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbM10gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG4vLyBTdXBwbHkgbWV0aG9kcyB0aGF0IGFyZSBub3QgaW4gcGxhY2VcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWM0LmFkZChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHhcclxuICogQHBhcmFtICB7bnVtYmVyfSAgeVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB6XHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5LCB6LCB3KSB7XHJcbiAgICB2ZWM0LnNldChvdXQuYXJyYXksIHgsIHksIHosIHcpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuY29weSA9IGZ1bmN0aW9uKG91dCwgYikge1xyXG4gICAgdmVjNC5jb3B5KG91dC5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LmRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjNC5kaXN0YW5jZShhLmFycmF5LCBiLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LmRpc3RhbmNlID0gVmVjdG9yNC5kaXN0O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5kaXYgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzQuZGl2aWRlKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5kaXZpZGUgPSBWZWN0b3I0LmRpdjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQuZG90ID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgcmV0dXJuIHZlYzQuZG90KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LmxlbiA9IGZ1bmN0aW9uKGIpIHtcclxuICAgIHJldHVybiB2ZWM0Lmxlbmd0aChiLmFycmF5KTtcclxufTtcclxuXHJcbi8vIFZlY3RvcjQubGVuZ3RoID0gVmVjdG9yNC5sZW47XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB0XHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubGVycCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgdCkge1xyXG4gICAgdmVjNC5sZXJwKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgdCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0Lm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjNC5taW4ob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWM0Lm1heChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzQubXVsdGlwbHkob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0Lm11bHRpcGx5ID0gVmVjdG9yNC5tdWw7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubmVnYXRlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2ZWM0Lm5lZ2F0ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0Lm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjNC5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LnJhbmRvbSA9IGZ1bmN0aW9uKG91dCwgc2NhbGUpIHtcclxuICAgIHZlYzQucmFuZG9tKG91dC5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBzY2FsZSkge1xyXG4gICAgdmVjNC5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHNjYWxlKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICB2ZWM0LnNjYWxlQW5kQWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yNC5zcXJEaXN0ID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgcmV0dXJuIHZlYzQuc3FyRGlzdChhLmFycmF5LCBiLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LnNxdWFyZWREaXN0YW5jZSA9IFZlY3RvcjQuc3FyRGlzdDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yNC5zcXJMZW4gPSBmdW5jdGlvbihhKSB7XHJcbiAgICByZXR1cm4gdmVjNC5zcXJMZW4oYS5hcnJheSk7XHJcbn07XHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQuc3F1YXJlZExlbmd0aCA9IFZlY3RvcjQuc3FyTGVuO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5zdWIgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzQuc3VidHJhY3Qob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuc3VidHJhY3QgPSBWZWN0b3I0LnN1YjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjNC50cmFuc2Zvcm1NYXQ0KG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LnRyYW5zZm9ybVF1YXQgPSBmdW5jdGlvbihvdXQsIGEsIHEpIHtcclxuICAgIHZlYzQudHJhbnNmb3JtUXVhdChvdXQuYXJyYXksIGEuYXJyYXksIHEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yNDtcclxuIiwiaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LnBhcnRpY2xlLlBhcnRpY2xlXHJcbiAqL1xyXG52YXIgUGFydGljbGUgPSBmdW5jdGlvbigpIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2UgZXVsZXIgYW5nbGUgdG8gcmVwcmVzZW50IHBhcnRpY2xlIHJvdGF0aW9uXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnJvdGF0aW9uID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZlbG9jaXR5ID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmFuZ3VsYXJWZWxvY2l0eSA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmxpZmUgPSAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5hZ2UgPSAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5zcHJpdGVTaXplID0gMTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMud2VpZ2h0ID0gMTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LnBhcnRpY2xlLkVtaXR0ZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZW1pdHRlciA9IG51bGw7XHJcbn07XHJcblxyXG4vKipcclxuICogVXBkYXRlIHBhcnRpY2xlIHBvc2l0aW9uXHJcbiAqIEBwYXJhbSAge251bWJlcn0gZGVsdGFUaW1lXHJcbiAqL1xyXG5QYXJ0aWNsZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oZGVsdGFUaW1lKSB7XHJcbiAgICBpZiAodGhpcy52ZWxvY2l0eSkge1xyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQodGhpcy5wb3NpdGlvbi5hcnJheSwgdGhpcy5wb3NpdGlvbi5hcnJheSwgdGhpcy52ZWxvY2l0eS5hcnJheSwgZGVsdGFUaW1lKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFuZ3VsYXJWZWxvY2l0eSkge1xyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQodGhpcy5yb3RhdGlvbi5hcnJheSwgdGhpcy5yb3RhdGlvbi5hcnJheSwgdGhpcy5hbmd1bGFyVmVsb2NpdHkuYXJyYXksIGRlbHRhVGltZSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQYXJ0aWNsZTtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IFBhcnRpY2xlIGZyb20gJy4vUGFydGljbGUnO1xyXG5pbXBvcnQgVmFsdWUgZnJvbSAnLi4vbWF0aC9WYWx1ZSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGFydGljbGUuRW1pdHRlclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEVtaXR0ZXIgPSBCYXNlLmV4dGVuZCggLyoqIEBsZW5kcyBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogTWF4aW11bSBudW1iZXIgb2YgcGFydGljbGVzIGNyZWF0ZWQgYnkgdGhpcyBlbWl0dGVyXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBtYXg6IDEwMDAsXHJcbiAgICAvKipcclxuICAgICAqIE51bWJlciBvZiBwYXJ0aWNsZXMgY3JlYXRlZCBieSB0aGlzIGVtaXR0ZXIgZWFjaCBzaG90XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBhbW91bnQ6IDIwLFxyXG5cclxuICAgIC8vIEluaXQgc3RhdHVzIGZvciBlYWNoIHBhcnRpY2xlXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRpY2xlIGxpZmUgZ2VuZXJhdG9yXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmFsdWUuPG51bWJlcj59XHJcbiAgICAgKi9cclxuICAgIGxpZmU6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRpY2xlIHBvc2l0aW9uIGdlbmVyYXRvclxyXG4gICAgICogQHR5cGUgez9jbGF5LlZhbHVlLjxjbGF5LlZlY3RvcjM+fVxyXG4gICAgICovXHJcbiAgICBwb3NpdGlvbjogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgcm90YXRpb24gZ2VuZXJhdG9yXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmFsdWUuPGNsYXkuVmVjdG9yMz59XHJcbiAgICAgKi9cclxuICAgIHJvdGF0aW9uOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJ0aWNsZSB2ZWxvY2l0eSBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48Y2xheS5WZWN0b3IzPn1cclxuICAgICAqL1xyXG4gICAgdmVsb2NpdHk6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRpY2xlIGFuZ3VsYXIgdmVsb2NpdHkgZ2VuZXJhdG9yXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmFsdWUuPGNsYXkuVmVjdG9yMz59XHJcbiAgICAgKi9cclxuICAgIGFuZ3VsYXJWZWxvY2l0eTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgc3ByaXRlIHNpemUgZ2VuZXJhdG9yXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmFsdWUuPG51bWJlcj59XHJcbiAgICAgKi9cclxuICAgIHNwcml0ZVNpemU6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRpY2xlIHdlaWdodCBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgd2VpZ2h0OiBudWxsLFxyXG5cclxuICAgIF9wYXJ0aWNsZVBvb2w6IG51bGxcclxuXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIHRoaXMuX3BhcnRpY2xlUG9vbCA9IFtdO1xyXG5cclxuICAgIC8vIFRPRE8gUmVkdWNlIGhlYXAgbWVtb3J5XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4OyBpKyspIHtcclxuICAgICAgICB2YXIgcGFydGljbGUgPSBuZXcgUGFydGljbGUoKTtcclxuICAgICAgICBwYXJ0aWNsZS5lbWl0dGVyID0gdGhpcztcclxuICAgICAgICB0aGlzLl9wYXJ0aWNsZVBvb2wucHVzaChwYXJ0aWNsZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZlbG9jaXR5KSB7XHJcbiAgICAgICAgICAgIHBhcnRpY2xlLnZlbG9jaXR5ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuYW5ndWxhclZlbG9jaXR5KSB7XHJcbiAgICAgICAgICAgIHBhcnRpY2xlLmFuZ3VsYXJWZWxvY2l0eSA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkucGFydGljbGUuRW1pdHRlci5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0dGVyIG51bWJlciBvZiBwYXJ0aWNsZXMgYW5kIHB1c2ggdGhlbSB0byBhIGdpdmVuIHBhcnRpY2xlIGxpc3QuIEVtbWl0IG51bWJlciBpcyBkZWZpbmVkIGJ5IGFtb3VudCBwcm9wZXJ0eVxyXG4gICAgICogQHBhcmFtICB7QXJyYXkuPGNsYXkucGFydGljbGUuUGFydGljbGU+fSBvdXRcclxuICAgICAqL1xyXG4gICAgZW1pdDogZnVuY3Rpb24ob3V0KSB7XHJcbiAgICAgICAgdmFyIGFtb3VudCA9IE1hdGgubWluKHRoaXMuX3BhcnRpY2xlUG9vbC5sZW5ndGgsIHRoaXMuYW1vdW50KTtcclxuXHJcbiAgICAgICAgdmFyIHBhcnRpY2xlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspIHtcclxuICAgICAgICAgICAgcGFydGljbGUgPSB0aGlzLl9wYXJ0aWNsZVBvb2wucG9wKCk7XHJcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgcGFydGljbGUgc3RhdHVzXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uLmdldChwYXJ0aWNsZS5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMucm90YXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm90YXRpb24uZ2V0KHBhcnRpY2xlLnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy52ZWxvY2l0eSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52ZWxvY2l0eS5nZXQocGFydGljbGUudmVsb2NpdHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFuZ3VsYXJWZWxvY2l0eSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmd1bGFyVmVsb2NpdHkuZ2V0KHBhcnRpY2xlLmFuZ3VsYXJWZWxvY2l0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMubGlmZSkge1xyXG4gICAgICAgICAgICAgICAgcGFydGljbGUubGlmZSA9IHRoaXMubGlmZS5nZXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zcHJpdGVTaXplKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZS5zcHJpdGVTaXplID0gdGhpcy5zcHJpdGVTaXplLmdldCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLndlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgcGFydGljbGUud2VpZ2h0ID0gdGhpcy53ZWlnaHQuZ2V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGFydGljbGUuYWdlID0gMDtcclxuXHJcbiAgICAgICAgICAgIG91dC5wdXNoKHBhcnRpY2xlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBLaWxsIGEgZGVhZCBwYXJ0aWNsZSBhbmQgcHV0IGl0IGJhY2sgaW4gdGhlIHBvb2xcclxuICAgICAqIEBwYXJhbSAge2NsYXkucGFydGljbGUuUGFydGljbGV9IHBhcnRpY2xlXHJcbiAgICAgKi9cclxuICAgIGtpbGw6IGZ1bmN0aW9uKHBhcnRpY2xlKSB7XHJcbiAgICAgICAgdGhpcy5fcGFydGljbGVQb29sLnB1c2gocGFydGljbGUpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBjb25zdGFudCAxZCB2YWx1ZSBnZW5lcmF0b3IuIEFsaWFzIGZvciB7QGxpbmsgY2xheS5WYWx1ZS5jb25zdGFudH1cclxuICogQGZ1bmN0aW9uIGNsYXkucGFydGljbGUuRW1pdHRlci5jb25zdGFudFxyXG4gKi9cclxuRW1pdHRlci5jb25zdGFudCA9IFZhbHVlLmNvbnN0YW50O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGNvbnN0YW50IHZlY3RvciB2YWx1ZSgyZCBvciAzZCkgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkuVmFsdWUudmVjdG9yfVxyXG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnZlY3RvclxyXG4gKi9cclxuRW1pdHRlci52ZWN0b3IgPSBWYWx1ZS52ZWN0b3I7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgcmFuZG9tIDFkIHZhbHVlIGdlbmVyYXRvci4gQWxpYXMgZm9yIHtAbGluayBjbGF5LlZhbHVlLnJhbmRvbTFEfVxyXG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnJhbmRvbTFEXHJcbiAqL1xyXG5FbWl0dGVyLnJhbmRvbTFEID0gVmFsdWUucmFuZG9tMUQ7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgcmFuZG9tIDJkIHZhbHVlIGdlbmVyYXRvci4gQWxpYXMgZm9yIHtAbGluayBjbGF5LlZhbHVlLnJhbmRvbTJEfVxyXG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnJhbmRvbTJEXHJcbiAqL1xyXG5FbWl0dGVyLnJhbmRvbTJEID0gVmFsdWUucmFuZG9tMkQ7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgcmFuZG9tIDNkIHZhbHVlIGdlbmVyYXRvci4gQWxpYXMgZm9yIHtAbGluayBjbGF5LlZhbHVlLnJhbmRvbTNEfVxyXG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnJhbmRvbTNEXHJcbiAqL1xyXG5FbWl0dGVyLnJhbmRvbTNEID0gVmFsdWUucmFuZG9tM0Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBFbWl0dGVyO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGFydGljbGUuRmllbGRcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBGaWVsZCA9IEJhc2UuZXh0ZW5kKHt9LCB7XHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IGEgZmllbGQgdG8gdGhlIHBhcnRpY2xlIGFuZCB1cGRhdGUgdGhlIHBhcnRpY2xlIHZlbG9jaXR5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHZlbG9jaXR5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHBvc2l0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHdlaWdodFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBkZWx0YVRpbWVcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnBhcnRpY2xlLkZpZWxkLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBhcHBseVRvOiBmdW5jdGlvbih2ZWxvY2l0eSwgcG9zaXRpb24sIHdlaWdodCwgZGVsdGFUaW1lKSB7fVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZpZWxkO1xyXG4iLCJpbXBvcnQgRmllbGQgZnJvbSAnLi9GaWVsZCc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBhcnRpY2xlLkZvcmNlRmllbGRcclxuICogQGV4dGVuZHMgY2xheS5wYXJ0aWNsZS5GaWVsZFxyXG4gKi9cclxudmFyIEZvcmNlRmllbGQgPSBGaWVsZC5leHRlbmQoZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGZvcmNlOiBuZXcgVmVjdG9yMygpXHJcbiAgICB9O1xyXG59LCB7XHJcbiAgICBhcHBseVRvOiBmdW5jdGlvbih2ZWxvY2l0eSwgcG9zaXRpb24sIHdlaWdodCwgZGVsdGFUaW1lKSB7XHJcbiAgICAgICAgaWYgKHdlaWdodCA+IDApIHtcclxuICAgICAgICAgICAgdmVjMy5zY2FsZUFuZEFkZCh2ZWxvY2l0eS5hcnJheSwgdmVsb2NpdHkuYXJyYXksIHRoaXMuZm9yY2UuYXJyYXksIGRlbHRhVGltZSAvIHdlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZvcmNlRmllbGQ7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LnBhcnRpY2xlLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXcgOiBXT1JMRFZJRVc7XFxudW5pZm9ybSBtYXQ0IHByb2plY3Rpb24gOiBQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzMgbm9ybWFsIDogTk9STUFMO1xcbiNpZmRlZiBVVl9BTklNQVRJT05cXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZDAgOiBURVhDT09SRF8wO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkMSA6IFRFWENPT1JEXzE7XFxudmFyeWluZyB2ZWMyIHZfVXYwO1xcbnZhcnlpbmcgdmVjMiB2X1V2MTtcXG4jZW5kaWZcXG52YXJ5aW5nIGZsb2F0IHZfQWdlO1xcbnZvaWQgbWFpbigpIHtcXG4gdl9BZ2UgPSBub3JtYWwueDtcXG4gZmxvYXQgcm90YXRpb24gPSBub3JtYWwueTtcXG4gdmVjNCB3b3JsZFZpZXdQb3NpdGlvbiA9IHdvcmxkVmlldyAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxuIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHdvcmxkVmlld1Bvc2l0aW9uO1xcbiBmbG9hdCB3ID0gZ2xfUG9zaXRpb24udztcXG4gZ2xfUG9pbnRTaXplID0gbm9ybWFsLnogKiBwcm9qZWN0aW9uWzBdLnggLyB3O1xcbiAjaWZkZWYgVVZfQU5JTUFUSU9OXFxuIHZfVXYwID0gdGV4Y29vcmQwO1xcbiB2X1V2MSA9IHRleGNvb3JkMTtcXG4gI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkucGFydGljbGUuZnJhZ21lbnRcXG51bmlmb3JtIHNhbXBsZXIyRCBzcHJpdGU7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnQ7XFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzEuMCwgMS4wLCAxLjBdO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGEgOiAxLjA7XFxudmFyeWluZyBmbG9hdCB2X0FnZTtcXG4jaWZkZWYgVVZfQU5JTUFUSU9OXFxudmFyeWluZyB2ZWMyIHZfVXYwO1xcbnZhcnlpbmcgdmVjMiB2X1V2MTtcXG4jZW5kaWZcXG52b2lkIG1haW4oKSB7XFxuIHZlYzQgY29sb3IgPSB2ZWM0KGNvbG9yLCBhbHBoYSk7XFxuICNpZmRlZiBTUFJJVEVfRU5BQkxFRFxcbiAjaWZkZWYgVVZfQU5JTUFUSU9OXFxuIGNvbG9yICo9IHRleHR1cmUyRChzcHJpdGUsIG1peCh2X1V2MCwgdl9VdjEsIGdsX1BvaW50Q29vcmQpKTtcXG4gI2Vsc2VcXG4gY29sb3IgKj0gdGV4dHVyZTJEKHNwcml0ZSwgZ2xfUG9pbnRDb29yZCk7XFxuICNlbmRpZlxcbiAjZW5kaWZcXG4gI2lmZGVmIEdSQURJRU5UX0VOQUJMRURcXG4gY29sb3IgKj0gdGV4dHVyZTJEKGdyYWRpZW50LCB2ZWMyKHZfQWdlLCAwLjUpKTtcXG4gI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBSZW5kZXJhYmxlIGZyb20gJy4uL1JlbmRlcmFibGUnO1xyXG5cclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5cclxuaW1wb3J0IHBhcnRpY2xlRXNzbCBmcm9tICcuL3BhcnRpY2xlLmdsc2wuanMnO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHBhcnRpY2xlRXNzbCk7XHJcblxyXG52YXIgcGFydGljbGVTaGFkZXIgPSBuZXcgU2hhZGVyKFNoYWRlci5zb3VyY2UoJ2NsYXkucGFydGljbGUudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucGFydGljbGUuZnJhZ21lbnQnKSk7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlXHJcbiAqIEBleHRlbmRzIGNsYXkuUmVuZGVyYWJsZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgdmFyIHBhcnRpY2xlUmVuZGVyYWJsZSA9IG5ldyBjbGF5LnBhcnRpY2xlLlBhcnRpY2xlUmVuZGVyYWJsZSh7XHJcbiAqICAgICAgICAgc3ByaXRlQW5pbWF0aW9uVGlsZVg6IDQsXHJcbiAqICAgICAgICAgc3ByaXRlQW5pbWF0aW9uVGlsZVk6IDQsXHJcbiAqICAgICAgICAgc3ByaXRlQW5pbWF0aW9uUmVwZWF0OiAxXHJcbiAqICAgICB9KTtcclxuICogICAgIHNjZW5lLmFkZChwYXJ0aWNsZVJlbmRlcmFibGUpO1xyXG4gKiAgICAgLy8gRW5hYmxlIHV2IGFuaW1hdGlvbiBpbiB0aGUgc2hhZGVyXHJcbiAqICAgICBwYXJ0aWNsZVJlbmRlcmFibGUubWF0ZXJpYWwuZGVmaW5lKCdib3RoJywgJ1VWX0FOSU1BVElPTicpO1xyXG4gKiAgICAgdmFyIEVtaXR0ZXIgPSBjbGF5LnBhcnRpY2xlLkVtaXR0ZXI7XHJcbiAqICAgICB2YXIgVmVjdG9yMyA9IGNsYXkuVmVjdG9yMztcclxuICogICAgIHZhciBlbWl0dGVyID0gbmV3IEVtaXR0ZXIoe1xyXG4gKiAgICAgICAgIG1heDogMjAwMCxcclxuICogICAgICAgICBhbW91bnQ6IDEwMCxcclxuICogICAgICAgICBsaWZlOiBFbWl0dGVyLnJhbmRvbTFEKDEwLCAyMCksXHJcbiAqICAgICAgICAgcG9zaXRpb246IEVtaXR0ZXIudmVjdG9yKG5ldyBWZWN0b3IzKCkpLFxyXG4gKiAgICAgICAgIHZlbG9jaXR5OiBFbWl0dGVyLnJhbmRvbTNEKG5ldyBWZWN0b3IzKC0xMCwgMCwgLTEwKSwgbmV3IFZlY3RvcjMoMTAsIDAsIDEwKSk7XHJcbiAqICAgICB9KTtcclxuICogICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5hZGRFbWl0dGVyKGVtaXR0ZXIpO1xyXG4gKiAgICAgdmFyIGdyYXZpdHlGaWVsZCA9IG5ldyBjbGF5LnBhcnRpY2xlLkZvcmNlRmllbGQoKTtcclxuICogICAgIGdyYXZpdHlGaWVsZC5mb3JjZS55ID0gLTEwO1xyXG4gKiAgICAgcGFydGljbGVSZW5kZXJhYmxlLmFkZEZpZWxkKGdyYXZpdHlGaWVsZCk7XHJcbiAqICAgICAuLi5cclxuICogICAgIGFuaW1hdGlvbi5vbignZnJhbWUnLCBmdW5jdGlvbihmcmFtZVRpbWUpIHtcclxuICogICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUudXBkYXRlUGFydGljbGVzKGZyYW1lVGltZSk7XHJcbiAqICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xyXG4gKiAgICAgfSk7XHJcbiAqL1xyXG52YXIgUGFydGljbGVSZW5kZXJhYmxlID0gUmVuZGVyYWJsZS5leHRlbmQoLyoqIEBsZW5kcyBjbGF5LnBhcnRpY2xlLlBhcnRpY2xlUmVuZGVyYWJsZSMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgbG9vcDogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIG9uZXNob3Q6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBEdXJhdGlvbiBvZiBwYXJ0aWNsZSBzeXN0ZW0gaW4gbWlsbGlzZWNvbmRzXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkdXJhdGlvbjogMSxcclxuXHJcbiAgICAvLyBVViBBbmltYXRpb25cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3ByaXRlQW5pbWF0aW9uVGlsZVg6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNwcml0ZUFuaW1hdGlvblRpbGVZOiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcHJpdGVBbmltYXRpb25SZXBlYXQ6IDAsXHJcblxyXG4gICAgbW9kZTogUmVuZGVyYWJsZS5QT0lOVFMsXHJcblxyXG4gICAgaWdub3JlUGlja2luZzogdHJ1ZSxcclxuXHJcbiAgICBfZWxhcHNlZFRpbWU6IDAsXHJcblxyXG4gICAgX2VtaXR0aW5nOiB0cnVlXHJcblxyXG59LCBmdW5jdGlvbigpe1xyXG5cclxuICAgIHRoaXMuZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe1xyXG4gICAgICAgIGR5bmFtaWM6IHRydWVcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghdGhpcy5tYXRlcmlhbCkge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IHBhcnRpY2xlU2hhZGVyLFxyXG4gICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgICAgICAgZGVwdGhNYXNrOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm1hdGVyaWFsLmVuYWJsZVRleHR1cmUoJ3Nwcml0ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3BhcnRpY2xlcyA9IFtdO1xyXG4gICAgdGhpcy5fZmllbGRzID0gW107XHJcbiAgICB0aGlzLl9lbWl0dGVycyA9IFtdO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgY3VsbGluZzogZmFsc2UsXHJcblxyXG4gICAgZnJ1c3R1bUN1bGxpbmc6IGZhbHNlLFxyXG5cclxuICAgIGNhc3RTaGFkb3c6IGZhbHNlLFxyXG4gICAgcmVjZWl2ZVNoYWRvdzogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgZW1pdHRlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LnBhcnRpY2xlLkVtaXR0ZXJ9IGVtaXR0ZXJcclxuICAgICAqL1xyXG4gICAgYWRkRW1pdHRlcjogZnVuY3Rpb24oZW1pdHRlcikge1xyXG4gICAgICAgIHRoaXMuX2VtaXR0ZXJzLnB1c2goZW1pdHRlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGVtaXR0ZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5wYXJ0aWNsZS5FbWl0dGVyfSBlbWl0dGVyXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUVtaXR0ZXI6IGZ1bmN0aW9uKGVtaXR0ZXIpIHtcclxuICAgICAgICB0aGlzLl9lbWl0dGVycy5zcGxpY2UodGhpcy5fZW1pdHRlcnMuaW5kZXhPZihlbWl0dGVyKSwgMSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGZpZWxkXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkucGFydGljbGUuRmllbGR9IGZpZWxkXHJcbiAgICAgKi9cclxuICAgIGFkZEZpZWxkOiBmdW5jdGlvbihmaWVsZCkge1xyXG4gICAgICAgIHRoaXMuX2ZpZWxkcy5wdXNoKGZpZWxkKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgZmllbGRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5wYXJ0aWNsZS5GaWVsZH0gZmllbGRcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlRmllbGQ6IGZ1bmN0aW9uKGZpZWxkKSB7XHJcbiAgICAgICAgdGhpcy5fZmllbGRzLnNwbGljZSh0aGlzLl9maWVsZHMuaW5kZXhPZihmaWVsZCksIDEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0IHRoZSBwYXJ0aWNsZSBzeXN0ZW0uXHJcbiAgICAgKi9cclxuICAgIHJlc2V0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICAvLyBQdXQgYWxsIHRoZSBwYXJ0aWNsZXMgYmFja1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcGFydGljbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5fcGFydGljbGVzW2ldO1xyXG4gICAgICAgICAgICBwLmVtaXR0ZXIua2lsbChwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcGFydGljbGVzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgPSAwO1xyXG4gICAgICAgIHRoaXMuX2VtaXR0aW5nID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGRlbHRhVGltZVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVQYXJ0aWNsZXM6IGZ1bmN0aW9uKGRlbHRhVGltZSkge1xyXG5cclxuICAgICAgICAvLyBNUyA9PiBTZWNvbmRzXHJcbiAgICAgICAgZGVsdGFUaW1lIC89IDEwMDA7XHJcbiAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgKz0gZGVsdGFUaW1lO1xyXG5cclxuICAgICAgICB2YXIgcGFydGljbGVzID0gdGhpcy5fcGFydGljbGVzO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZW1pdHRpbmcpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9lbWl0dGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdHRlcnNbaV0uZW1pdChwYXJ0aWNsZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9uZXNob3QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFnaW5nXHJcbiAgICAgICAgdmFyIGxlbiA9IHBhcnRpY2xlcy5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47KSB7XHJcbiAgICAgICAgICAgIHZhciBwID0gcGFydGljbGVzW2ldO1xyXG4gICAgICAgICAgICBwLmFnZSArPSBkZWx0YVRpbWU7XHJcbiAgICAgICAgICAgIGlmIChwLmFnZSA+PSBwLmxpZmUpIHtcclxuICAgICAgICAgICAgICAgIHAuZW1pdHRlci5raWxsKHApO1xyXG4gICAgICAgICAgICAgICAgcGFydGljbGVzW2ldID0gcGFydGljbGVzW2xlbi0xXTtcclxuICAgICAgICAgICAgICAgIHBhcnRpY2xlcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZVxyXG4gICAgICAgICAgICB2YXIgcCA9IHBhcnRpY2xlc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2ZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX2ZpZWxkcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpZWxkc1tqXS5hcHBseVRvKHAudmVsb2NpdHksIHAucG9zaXRpb24sIHAud2VpZ2h0LCBkZWx0YVRpbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHAudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl91cGRhdGVWZXJ0aWNlcygpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlVmVydGljZXM6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XHJcbiAgICAgICAgLy8gSWYgaGFzIHV2IGFuaW1hdGlvblxyXG4gICAgICAgIHZhciBhbmltVGlsZVggPSB0aGlzLnNwcml0ZUFuaW1hdGlvblRpbGVYO1xyXG4gICAgICAgIHZhciBhbmltVGlsZVkgPSB0aGlzLnNwcml0ZUFuaW1hdGlvblRpbGVZO1xyXG4gICAgICAgIHZhciBhbmltUmVwZWF0ID0gdGhpcy5zcHJpdGVBbmltYXRpb25SZXBlYXQ7XHJcbiAgICAgICAgdmFyIG5VdkFuaW1GcmFtZSA9IGFuaW1UaWxlWSAqIGFuaW1UaWxlWCAqIGFuaW1SZXBlYXQ7XHJcbiAgICAgICAgdmFyIGhhc1V2QW5pbWF0aW9uID0gblV2QW5pbUZyYW1lID4gMTtcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICAvLyBQdXQgcGFydGljbGUgc3RhdHVzIGluIG5vcm1hbFxyXG4gICAgICAgIHZhciBub3JtYWxzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcbiAgICAgICAgdmFyIHV2cyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMudGV4Y29vcmQwLnZhbHVlO1xyXG4gICAgICAgIHZhciB1dnMyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDEudmFsdWU7XHJcblxyXG4gICAgICAgIHZhciBsZW4gPSB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoO1xyXG4gICAgICAgIGlmICghcG9zaXRpb25zIHx8IHBvc2l0aW9ucy5sZW5ndGggIT09IGxlbiAqIDMpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBPcHRpbWl6ZVxyXG4gICAgICAgICAgICBwb3NpdGlvbnMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShsZW4gKiAzKTtcclxuICAgICAgICAgICAgbm9ybWFscyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShsZW4gKiAzKTtcclxuICAgICAgICAgICAgaWYgKGhhc1V2QW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB1dnMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMC52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkobGVuICogMik7XHJcbiAgICAgICAgICAgICAgICB1dnMyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDEudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KGxlbiAqIDIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW52QW5pbVRpbGVYID0gMSAvIGFuaW1UaWxlWDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXJ0aWNsZSA9IHRoaXMuX3BhcnRpY2xlc1tpXTtcclxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IGkgKiAzO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDM7IGorKykge1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25zW29mZnNldCArIGpdID0gcGFydGljbGUucG9zaXRpb24uYXJyYXlbal07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW29mZnNldF0gPSBwYXJ0aWNsZS5hZ2UgLyBwYXJ0aWNsZS5saWZlO1xyXG4gICAgICAgICAgICAgICAgLy8gbm9ybWFsc1tvZmZzZXQgKyAxXSA9IHBhcnRpY2xlLnJvdGF0aW9uO1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsc1tvZmZzZXQgKyAxXSA9IDA7XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW29mZnNldCArIDJdID0gcGFydGljbGUuc3ByaXRlU2l6ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0MiA9IGkgKiAyO1xyXG4gICAgICAgICAgICBpZiAoaGFzVXZBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE9cclxuICAgICAgICAgICAgICAgIHZhciBwID0gcGFydGljbGUuYWdlIC8gcGFydGljbGUubGlmZTtcclxuICAgICAgICAgICAgICAgIHZhciBzdGFnZSA9IE1hdGgucm91bmQocCAqIChuVXZBbmltRnJhbWUgLSAxKSkgKiBhbmltUmVwZWF0O1xyXG4gICAgICAgICAgICAgICAgdmFyIHYgPSBNYXRoLmZsb29yKHN0YWdlICogaW52QW5pbVRpbGVYKTtcclxuICAgICAgICAgICAgICAgIHZhciB1ID0gc3RhZ2UgLSB2ICogYW5pbVRpbGVYO1xyXG4gICAgICAgICAgICAgICAgdXZzW29mZnNldDJdID0gdSAvIGFuaW1UaWxlWDtcclxuICAgICAgICAgICAgICAgIHV2c1tvZmZzZXQyICsgMV0gPSAxIC0gdiAvIGFuaW1UaWxlWTtcclxuICAgICAgICAgICAgICAgIHV2czJbb2Zmc2V0Ml0gPSAodSArIDEpIC8gYW5pbVRpbGVYO1xyXG4gICAgICAgICAgICAgICAgdXZzMltvZmZzZXQyICsgMV0gPSAxIC0gKHYgKyAxKSAvIGFuaW1UaWxlWTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2VvbWV0cnkuZGlydHkoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc0ZpbmlzaGVkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZWxhcHNlZFRpbWUgPiB0aGlzLmR1cmF0aW9uICYmICF0aGlzLmxvb3A7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24ocmVuZGVyZXIpIHtcclxuICAgICAgICAvLyBQdXQgYWxsIHRoZSBwYXJ0aWNsZXMgYmFja1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcGFydGljbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5fcGFydGljbGVzW2ldO1xyXG4gICAgICAgICAgICBwLmVtaXR0ZXIua2lsbChwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZW9tZXRyeS5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICAvLyBUT0RPIERpc3Bvc2UgdGV4dHVyZSA/XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybiB7Y2xheS5wYXJ0aWNsZS5QYXJ0aWNsZVJlbmRlcmFibGV9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgcGFydGljbGVSZW5kZXJhYmxlID0gbmV3IFBhcnRpY2xlUmVuZGVyYWJsZSh7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsOiB0aGlzLm1hdGVyaWFsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLmxvb3AgPSB0aGlzLmxvb3A7XHJcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLmR1cmF0aW9uID0gdGhpcy5kdXJhdGlvbjtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUub25lc2hvdCA9IHRoaXMub25lc2hvdDtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuc3ByaXRlQW5pbWF0aW9uUmVwZWF0ID0gdGhpcy5zcHJpdGVBbmltYXRpb25SZXBlYXQ7XHJcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLnNwcml0ZUFuaW1hdGlvblRpbGVZID0gdGhpcy5zcHJpdGVBbmltYXRpb25UaWxlWTtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuc3ByaXRlQW5pbWF0aW9uVGlsZVggPSB0aGlzLnNwcml0ZUFuaW1hdGlvblRpbGVYO1xyXG5cclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUucG9zaXRpb24uY29weSh0aGlzLnBvc2l0aW9uKTtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUucm90YXRpb24uY29weSh0aGlzLnJvdGF0aW9uKTtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuc2NhbGUuY29weSh0aGlzLnNjYWxlKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuYWRkKHRoaXMuX2NoaWxkcmVuW2ldLmNsb25lKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFydGljbGVSZW5kZXJhYmxlO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBhcnRpY2xlUmVuZGVyYWJsZTtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkucGlja2luZy5jb2xvci52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudm9pZCBtYWluKCl7XFxuIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuICNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gI2VuZGlmXFxuIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApO1xcbn1cXG5AZW5kXFxuQGVuZFxcbkBleHBvcnQgY2xheS5waWNraW5nLmNvbG9yLmZyYWdtZW50XFxudW5pZm9ybSB2ZWM0IGNvbG9yIDogWzEuMCwgMS4wLCAxLjAsIDEuMF07XFxudm9pZCBtYWluKCkge1xcbiBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuQGVuZFwiO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuXHJcbmltcG9ydCBjb2xvckVzc2wgZnJvbSAnLi9jb2xvci5nbHNsLmpzJztcclxuU2hhZGVyLmltcG9ydChjb2xvckVzc2wpO1xyXG5cclxuLyoqXHJcbiAqIFBpeGVsIHBpY2tpbmcgaXMgZ3B1IGJhc2VkIHBpY2tpbmcsIHdoaWNoIGlzIGZhc3QgYW5kIGFjY3VyYXRlLlxyXG4gKiBCdXQgbm90IGxpa2UgcmF5IHBpY2tpbmcsIGl0IGNhbid0IGdldCB0aGUgaW50ZXJzZWN0aW9uIHBvaW50IGFuZCB0cmlhbmdsZS5cclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGlja2luZy5QaXhlbFBpY2tpbmdcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBQaXhlbFBpY2tpbmcgPSBCYXNlLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkucGlja2luZy5QaXhlbFBpY2tpbmcjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUYXJnZXQgcmVuZGVyZXJcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5SZW5kZXJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICByZW5kZXJlcjogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEb3duc2FtcGxlIHJhdGlvIG9mIGhpZGRlbiBmcmFtZSBidWZmZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRvd25TYW1wbGVSYXRpbzogMSxcclxuXHJcbiAgICAgICAgd2lkdGg6IDEwMCxcclxuICAgICAgICBoZWlnaHQ6IDEwMCxcclxuXHJcbiAgICAgICAgbG9va3VwT2Zmc2V0OiAxLFxyXG5cclxuICAgICAgICBfZnJhbWVCdWZmZXI6IG51bGwsXHJcbiAgICAgICAgX3RleHR1cmU6IG51bGwsXHJcbiAgICAgICAgX3NoYWRlcjogbnVsbCxcclxuXHJcbiAgICAgICAgX2lkTWF0ZXJpYWxzOiBbXSxcclxuICAgICAgICBfbG9va3VwVGFibGU6IFtdLFxyXG5cclxuICAgICAgICBfbWVzaE1hdGVyaWFsczogW10sXHJcblxyXG4gICAgICAgIF9pZE9mZnNldDogMFxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5yZW5kZXJlcikge1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnJlbmRlcmVyLmdldFdpZHRoKCk7XHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmdldEhlaWdodCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faW5pdCgpO1xyXG59LCAvKiogQGxlbmRzIGNsYXkucGlja2luZy5QaXhlbFBpY2tpbmcucHJvdG90eXBlICovIHtcclxuICAgIF9pbml0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLndpZHRoICogdGhpcy5kb3duU2FtcGxlUmF0aW8sXHJcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgKiB0aGlzLmRvd25TYW1wbGVSYXRpb1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3NoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5waWNraW5nLmNvbG9yLnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnBpY2tpbmcuY29sb3IuZnJhZ21lbnQnKSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcGlja2luZyBwcmVzaXNpb25cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYXRpb1xyXG4gICAgICovXHJcbiAgICBzZXRQcmVjaXNpb246IGZ1bmN0aW9uKHJhdGlvKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZS53aWR0aCA9IHRoaXMud2lkdGggKiByYXRpbztcclxuICAgICAgICB0aGlzLl90ZXh0dXJlLmhlaWdodCA9IHRoaXMuaGVpZ2h0ICogcmF0aW87XHJcbiAgICAgICAgdGhpcy5kb3duU2FtcGxlUmF0aW8gPSByYXRpbztcclxuICAgIH0sXHJcbiAgICByZXNpemU6IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlLndpZHRoID0gd2lkdGggKiB0aGlzLmRvd25TYW1wbGVSYXRpbztcclxuICAgICAgICB0aGlzLl90ZXh0dXJlLmhlaWdodCA9IGhlaWdodCAqIHRoaXMuZG93blNhbXBsZVJhdGlvO1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlLmRpcnR5KCk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgdGhlIHBpY2tpbmcgZnJhbWVidWZmZXJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYXRpb1xyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uKHNjZW5lLCBjYW1lcmEpIHtcclxuICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xyXG4gICAgICAgIGlmIChyZW5kZXJlci5nZXRXaWR0aCgpICE9PSB0aGlzLndpZHRoIHx8IHJlbmRlcmVyLmdldEhlaWdodCgpICE9PSB0aGlzLmhlaWdodCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZShyZW5kZXJlci53aWR0aCwgcmVuZGVyZXIuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmF0dGFjaCh0aGlzLl90ZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9pZE9mZnNldCA9IHRoaXMubG9va3VwT2Zmc2V0O1xyXG4gICAgICAgIHRoaXMuX3NldE1hdGVyaWFsKHNjZW5lKTtcclxuICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAgICAgICAgdGhpcy5fcmVzdG9yZU1hdGVyaWFsKCk7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldE1hdGVyaWFsOiBmdW5jdGlvbihyb290KSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9MDsgaSA8IHJvb3QuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJvb3QuX2NoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQuZ2VvbWV0cnkgJiYgY2hpbGQubWF0ZXJpYWwgJiYgY2hpbGQubWF0ZXJpYWwuc2hhZGVyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLl9pZE9mZnNldCsrO1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkeCA9IGlkIC0gdGhpcy5sb29rdXBPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSB0aGlzLl9pZE1hdGVyaWFsc1tpZHhdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyOiB0aGlzLl9zaGFkZXJcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBwYWNrSUQoaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yWzBdIC89IDI1NTtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvclsxXSAvPSAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3JbMl0gLz0gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yWzNdID0gMS4wO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnY29sb3InLCBjb2xvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faWRNYXRlcmlhbHNbaWR4XSA9IG1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWVzaE1hdGVyaWFsc1tpZHhdID0gY2hpbGQubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb29rdXBUYWJsZVtpZHhdID0gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICBjaGlsZC5tYXRlcmlhbCA9IG1hdGVyaWFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5fY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRNYXRlcmlhbChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGljayB0aGUgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHggTW91c2UgcG9zaXRpb24geFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB5IE1vdXNlIHBvc2l0aW9uIHlcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgcGljazogZnVuY3Rpb24oeCwgeSkge1xyXG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcblxyXG4gICAgICAgIHZhciByYXRpbyA9IHRoaXMuZG93blNhbXBsZVJhdGlvO1xyXG4gICAgICAgIHggPSBNYXRoLmNlaWwocmF0aW8gKiB4KTtcclxuICAgICAgICB5ID0gTWF0aC5jZWlsKHJhdGlvICogKHRoaXMuaGVpZ2h0IC0geSkpO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB2YXIgcGl4ZWwgPSBuZXcgVWludDhBcnJheSg0KTtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgLy8gVE9ETyBvdXQgb2YgYm91bmRzID9cclxuICAgICAgICAvLyBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgP1xyXG4gICAgICAgIF9nbC5yZWFkUGl4ZWxzKHgsIHksIDEsIDEsIF9nbC5SR0JBLCBfZ2wuVU5TSUdORURfQllURSwgcGl4ZWwpO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgLy8gU2tpcCBpbnRlcnBvbGF0ZWQgcGl4ZWwgYmVjYXVzZSBvZiBhbnRpIGFsaWFzXHJcbiAgICAgICAgaWYgKHBpeGVsWzNdID09PSAyNTUpIHtcclxuICAgICAgICAgICAgdmFyIGlkID0gdW5wYWNrSUQocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSk7XHJcbiAgICAgICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5fbG9va3VwVGFibGVbaWQgLSB0aGlzLmxvb2t1cE9mZnNldF07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZXN0b3JlTWF0ZXJpYWw6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbG9va3VwVGFibGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fbG9va3VwVGFibGVbaV0ubWF0ZXJpYWwgPSB0aGlzLl9tZXNoTWF0ZXJpYWxzW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24ocmVuZGVyZXIpIHtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5mdW5jdGlvbiBwYWNrSUQoaWQpe1xyXG4gICAgdmFyIHIgPSBpZCA+PiAxNjtcclxuICAgIHZhciBnID0gKGlkIC0gKHIgPDwgOCkpID4+IDg7XHJcbiAgICB2YXIgYiA9IGlkIC0gKHIgPDwgMTYpIC0gKGc8PDgpO1xyXG4gICAgcmV0dXJuIFtyLCBnLCBiXTtcclxufVxyXG5cclxuZnVuY3Rpb24gdW5wYWNrSUQociwgZywgYil7XHJcbiAgICByZXR1cm4gKHIgPDwgMTYpICsgKGc8PDgpICsgYjtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGl4ZWxQaWNraW5nO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuXHJcbnZhciBkb2MgPSB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnID8ge30gOiBkb2N1bWVudDtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wbHVnaW4uRnJlZUNvbnRyb2xcclxuICogQGV4YW1wbGVcclxuICogICAgIHZhciBjb250cm9sID0gbmV3IGNsYXkucGx1Z2luLkZyZWVDb250cm9sKHtcclxuICogICAgICAgICB0YXJnZXQ6IGNhbWVyYSxcclxuICogICAgICAgICBkb21FbGVtZW50OiByZW5kZXJlci5jYW52YXNcclxuICogICAgIH0pO1xyXG4gKiAgICAgLi4uXHJcbiAqICAgICB0aW1lbGluZS5vbignZnJhbWUnLCBmdW5jdGlvbihmcmFtZVRpbWUpIHtcclxuICogICAgICAgICBjb250cm9sLnVwZGF0ZShmcmFtZVRpbWUpO1xyXG4gKiAgICAgICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTtcclxuICogICAgIH0pO1xyXG4gKi9cclxudmFyIEZyZWVDb250cm9sID0gQmFzZS5leHRlbmQoZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5GcmVlQ29udHJvbCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNjZW5lIG5vZGUgdG8gY29udHJvbCwgbW9zdGx5IGl0IGlzIGEgY2FtZXJhXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0YXJnZXQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRhcmdldCBkb20gdG8gYmluZCB3aXRoIG1vdXNlIGV2ZW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkb21FbGVtZW50OiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNb3VzZSBtb3ZlIHNlbnNpdGl2aXR5XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzZW5zaXRpdml0eTogMSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGFyZ2V0IG1vdmUgc3BlZWRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNwZWVkOiAwLjQsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFVwIGF4aXNcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHVwOiBuZXcgVmVjdG9yMygwLCAxLCAwKSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgbG9jayB2ZXJ0aWNhbCBtb3ZlbWVudFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZlcnRpY2FsTW92ZUxvY2s6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UaW1lbGluZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aW1lbGluZTogbnVsbCxcclxuXHJcbiAgICAgICAgX21vdmVGb3J3YXJkOiBmYWxzZSxcclxuICAgICAgICBfbW92ZUJhY2t3YXJkOiBmYWxzZSxcclxuICAgICAgICBfbW92ZUxlZnQ6IGZhbHNlLFxyXG4gICAgICAgIF9tb3ZlUmlnaHQ6IGZhbHNlLFxyXG5cclxuICAgICAgICBfb2Zmc2V0UGl0Y2g6IDAsXHJcbiAgICAgICAgX29mZnNldFJvbGw6IDBcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5fbG9ja0NoYW5nZSA9IHRoaXMuX2xvY2tDaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX2tleURvd24gPSB0aGlzLl9rZXlEb3duLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9rZXlVcCA9IHRoaXMuX2tleVVwLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9tb3VzZU1vdmUgPSB0aGlzLl9tb3VzZU1vdmUuYmluZCh0aGlzKTtcclxuXHJcbiAgICBpZiAodGhpcy5kb21FbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5wbHVnaW4uRnJlZUNvbnRyb2wucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogaW5pdCBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIGluaXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vIFVzZSBwb2ludGVyIGxvY2tcclxuICAgICAgICAvLyBodHRwOi8vd3d3Lmh0bWw1cm9ja3MuY29tL2VuL3R1dG9yaWFscy9wb2ludGVybG9jay9pbnRyby9cclxuICAgICAgICB2YXIgZWwgPSB0aGlzLmRvbUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIC8vTXVzdCByZXF1ZXN0IHBvaW50ZXIgbG9jayBhZnRlciBjbGljayBldmVudCwgY2FuJ3Qgbm90IGRvIGl0IGRpcmVjdGx5XHJcbiAgICAgICAgLy9XaHkgPyA/XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZWwsICdjbGljaycsIHRoaXMuX3JlcXVlc3RQb2ludGVyTG9jayk7XHJcblxyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvYywgJ3BvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5fbG9ja0NoYW5nZSk7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9jLCAnbW96cG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLl9sb2NrQ2hhbmdlKTtcclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb2MsICd3ZWJraXRwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xyXG5cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb2MsICdrZXlkb3duJywgdGhpcy5fa2V5RG93bik7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9jLCAna2V5dXAnLCB0aGlzLl9rZXlVcCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZWxpbmUub24oJ2ZyYW1lJywgdGhpcy5fZGV0ZWN0TW92ZW1lbnRDaGFuZ2UsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBlbCA9IHRoaXMuZG9tRWxlbWVudDtcclxuXHJcbiAgICAgICAgZWwuZXhpdFBvaW50ZXJMb2NrID0gZWwuZXhpdFBvaW50ZXJMb2NrXHJcbiAgICAgICAgICAgIHx8IGVsLm1vekV4aXRQb2ludGVyTG9ja1xyXG4gICAgICAgICAgICB8fCBlbC53ZWJraXRFeGl0UG9pbnRlckxvY2s7XHJcblxyXG4gICAgICAgIGlmIChlbC5leGl0UG9pbnRlckxvY2spIHtcclxuICAgICAgICAgICAgZWwuZXhpdFBvaW50ZXJMb2NrKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihlbCwgJ2NsaWNrJywgdGhpcy5fcmVxdWVzdFBvaW50ZXJMb2NrKTtcclxuXHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9jLCAncG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLl9sb2NrQ2hhbmdlKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2MsICdtb3pwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvYywgJ3dlYmtpdHBvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5fbG9ja0NoYW5nZSk7XHJcblxyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvYywgJ2tleWRvd24nLCB0aGlzLl9rZXlEb3duKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2MsICdrZXl1cCcsIHRoaXMuX2tleVVwKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGltZWxpbmUpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lbGluZS5vZmYoJ2ZyYW1lJywgdGhpcy5fZGV0ZWN0TW92ZW1lbnRDaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3JlcXVlc3RQb2ludGVyTG9jazogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGVsID0gdGhpcztcclxuICAgICAgICBlbC5yZXF1ZXN0UG9pbnRlckxvY2sgPSBlbC5yZXF1ZXN0UG9pbnRlckxvY2tcclxuICAgICAgICAgICAgfHwgZWwubW96UmVxdWVzdFBvaW50ZXJMb2NrXHJcbiAgICAgICAgICAgIHx8IGVsLndlYmtpdFJlcXVlc3RQb2ludGVyTG9jaztcclxuXHJcbiAgICAgICAgZWwucmVxdWVzdFBvaW50ZXJMb2NrKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udHJvbCB1cGRhdGUuIFNob3VsZCBiZSBpbnZva2VkIGV2ZXJ5IGZyYW1lXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZnJhbWVUaW1lIEZyYW1lIHRpbWVcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnRhcmdldC5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgeEF4aXMgPSB0YXJnZXQubG9jYWxUcmFuc2Zvcm0ueC5ub3JtYWxpemUoKTtcclxuICAgICAgICB2YXIgekF4aXMgPSB0YXJnZXQubG9jYWxUcmFuc2Zvcm0uei5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmVydGljYWxNb3ZlTG9jaykge1xyXG4gICAgICAgICAgICB6QXhpcy55ID0gMDtcclxuICAgICAgICAgICAgekF4aXMubm9ybWFsaXplKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc3BlZWQgPSB0aGlzLnNwZWVkICogZnJhbWVUaW1lIC8gMjA7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlRm9yd2FyZCkge1xyXG4gICAgICAgICAgICAvLyBPcHBvc2l0ZSBkaXJlY3Rpb24gb2YgelxyXG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh6QXhpcywgLXNwZWVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX21vdmVCYWNrd2FyZCkge1xyXG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh6QXhpcywgc3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZUxlZnQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoeEF4aXMsIC1zcGVlZCAvIDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZVJpZ2h0KSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHhBeGlzLCBzcGVlZCAvIDIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGFyZ2V0LnJvdGF0ZUFyb3VuZCh0YXJnZXQucG9zaXRpb24sIHRoaXMudXAsIC10aGlzLl9vZmZzZXRQaXRjaCAqIGZyYW1lVGltZSAqIE1hdGguUEkgLyAzNjApO1xyXG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS54O1xyXG4gICAgICAgIHRhcmdldC5yb3RhdGVBcm91bmQodGFyZ2V0LnBvc2l0aW9uLCB4QXhpcywgLXRoaXMuX29mZnNldFJvbGwgKiBmcmFtZVRpbWUgKiBNYXRoLlBJIC8gMzYwKTtcclxuXHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0Um9sbCA9IHRoaXMuX29mZnNldFBpdGNoID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgX2xvY2tDaGFuZ2U6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgZG9jLnBvaW50ZXJMb2NrRWxlbWVudCA9PT0gdGhpcy5kb21FbGVtZW50XHJcbiAgICAgICAgICAgIHx8IGRvYy5tb3pQb2ludGVyTG9ja0VsZW1lbnQgPT09IHRoaXMuZG9tRWxlbWVudFxyXG4gICAgICAgICAgICB8fCBkb2Mud2Via2l0UG9pbnRlckxvY2tFbGVtZW50ID09PSB0aGlzLmRvbUVsZW1lbnRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9jLCAnbW91c2Vtb3ZlJywgdGhpcy5fbW91c2VNb3ZlLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2MsICdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX21vdXNlTW92ZTogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIHZhciBkeCA9IGUubW92ZW1lbnRYIHx8IGUubW96TW92ZW1lbnRYIHx8IGUud2Via2l0TW92ZW1lbnRYIHx8IDA7XHJcbiAgICAgICAgdmFyIGR5ID0gZS5tb3ZlbWVudFkgfHwgZS5tb3pNb3ZlbWVudFkgfHwgZS53ZWJraXRNb3ZlbWVudFkgfHwgMDtcclxuXHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0UGl0Y2ggKz0gZHggKiB0aGlzLnNlbnNpdGl2aXR5IC8gMjAwO1xyXG4gICAgICAgIHRoaXMuX29mZnNldFJvbGwgKz0gZHkgKiB0aGlzLnNlbnNpdGl2aXR5IC8gMjAwO1xyXG5cclxuICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBldmVudCB0byByZW1pbmQgcmVuZGVyZXIgZG8gcmVuZGVyXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2UnKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2RldGVjdE1vdmVtZW50Q2hhbmdlOiBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX21vdmVGb3J3YXJkIHx8IHRoaXMuX21vdmVCYWNrd2FyZCB8fCB0aGlzLl9tb3ZlTGVmdCB8fCB0aGlzLl9tb3ZlUmlnaHQpIHtcclxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2UnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoZnJhbWVUaW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2tleURvd246IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICBzd2l0Y2goZS5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgODc6IC8vd1xyXG4gICAgICAgICAgICBjYXNlIDM3OiAvL3VwIGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlRm9yd2FyZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA4MzogLy9zXHJcbiAgICAgICAgICAgIGNhc2UgNDA6IC8vZG93biBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUJhY2t3YXJkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDY1OiAvL2FcclxuICAgICAgICAgICAgY2FzZSAzNzogLy9sZWZ0IGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlTGVmdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA2ODogLy9kXHJcbiAgICAgICAgICAgIGNhc2UgMzk6IC8vcmlnaHQgYXJyb3dcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVSaWdodCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZXZlbnQgdG8gcmVtaW5kIHJlbmRlcmVyIGRvIHJlbmRlclxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignY2hhbmdlJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9rZXlVcDogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIHN3aXRjaChlLmtleUNvZGUpIHtcclxuICAgICAgICAgICAgY2FzZSA4NzogLy93XHJcbiAgICAgICAgICAgIGNhc2UgMzc6IC8vdXAgYXJyb3dcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVGb3J3YXJkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA4MzogLy9zXHJcbiAgICAgICAgICAgIGNhc2UgNDA6IC8vZG93biBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUJhY2t3YXJkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA2NTogLy9hXHJcbiAgICAgICAgICAgIGNhc2UgMzc6IC8vbGVmdCBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUxlZnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDY4OiAvL2RcclxuICAgICAgICAgICAgY2FzZSAzOTogLy9yaWdodCBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZVJpZ2h0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRnJlZUNvbnRyb2w7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5cclxuLyoqXHJcbiAqIEdhbWVwYWQgQ29udHJvbCBwbHVnaW4uXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBsdWdpbi5HYW1lcGFkQ29udHJvbFxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgIGluaXQ6IGZ1bmN0aW9uKGFwcCkge1xyXG4gKiAgICAgdGhpcy5fZ2FtZXBhZENvbnRyb2wgPSBuZXcgY2xheS5wbHVnaW4uR2FtZXBhZENvbnRyb2woe1xyXG4gKiAgICAgICAgIHRhcmdldDogY2FtZXJhLFxyXG4gKiAgICAgICAgIG9uU3RhbmRhcmRHYW1lcGFkUmVhZHk6IGN1c3RvbUNhbGxiYWNrXHJcbiAqICAgICB9KTtcclxuICogICB9LFxyXG4gKlxyXG4gKiAgIGxvb3A6IGZ1bmN0aW9uKGFwcCkge1xyXG4gKiAgICAgdGhpcy5fZ2FtZXBhZENvbnRyb2wudXBkYXRlKGFwcC5mcmFtZVRpbWUpO1xyXG4gKiAgIH1cclxuICovXHJcbnZhciBHYW1lcGFkQ29udHJvbCA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkucGx1Z2luLkdhbWVwYWRDb250cm9sIyAqLyB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNjZW5lIG5vZGUgdG8gY29udHJvbCwgbW9zdGx5IGl0IGlzIGEgY2FtZXJhLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0YXJnZXQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1vdmUgc3BlZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1vdmVTcGVlZDogMC4xLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBMb29rIGFyb3VuZCBzcGVlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbG9va0Fyb3VuZFNwZWVkOiAwLjEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFVwIGF4aXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHVwOiBuZXcgVmVjdG9yMygwLCAxLCAwKSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGltZWxpbmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UaW1lbGluZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aW1lbGluZTogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSBzdGFuZGFyZCBnYW1lcGFkIGlzIHJlYWR5IHRvIHVzZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvblN0YW5kYXJkR2FtZXBhZFJlYWR5OiBmdW5jdGlvbihnYW1lcGFkKXt9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhIGdhbWVwYWQgaXMgZGlzY29ubmVjdGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uR2FtZXBhZERpc2Nvbm5lY3RlZDogZnVuY3Rpb24oZ2FtZXBhZCl7fSxcclxuXHJcbiAgICAgICAgLy8gUHJpdmF0ZSBwcm9wZXJ0aWVzOlxyXG5cclxuICAgICAgICBfbW92ZUZvcndhcmQ6IGZhbHNlLFxyXG4gICAgICAgIF9tb3ZlQmFja3dhcmQ6IGZhbHNlLFxyXG4gICAgICAgIF9tb3ZlTGVmdDogZmFsc2UsXHJcbiAgICAgICAgX21vdmVSaWdodDogZmFsc2UsXHJcblxyXG4gICAgICAgIF9vZmZzZXRQaXRjaDogMCxcclxuICAgICAgICBfb2Zmc2V0Um9sbDogMCxcclxuXHJcbiAgICAgICAgX2Nvbm5lY3RlZEdhbWVwYWRJbmRleDogMCxcclxuICAgICAgICBfc3RhbmRhcmRHYW1lcGFkQXZhaWxhYmxlOiBmYWxzZSxcclxuICAgICAgICBfZ2FtZXBhZEF4aXNUaHJlc2hvbGQ6IDAuM1xyXG5cclxuICAgIH07XHJcblxyXG59LCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICB0aGlzLl9jaGVja0dhbWVwYWRDb21wYXRpYmlsaXR5ID0gdGhpcy5fY2hlY2tHYW1lcGFkQ29tcGF0aWJpbGl0eS5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fZGlzY29ubmVjdEdhbWVwYWQgPSB0aGlzLl9kaXNjb25uZWN0R2FtZXBhZC5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fZ2V0U3RhbmRhcmRHYW1lcGFkID0gdGhpcy5fZ2V0U3RhbmRhcmRHYW1lcGFkLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9zY2FuUHJlc3NlZEdhbWVwYWRCdXR0b25zID0gdGhpcy5fc2NhblByZXNzZWRHYW1lcGFkQnV0dG9ucy5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fc2NhbkluY2xpbmVkR2FtZXBhZEF4ZXMgPSB0aGlzLl9zY2FuSW5jbGluZWRHYW1lcGFkQXhlcy5iaW5kKHRoaXMpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlID0gdGhpcy51cGRhdGUuYmluZCh0aGlzKTtcclxuXHJcbiAgICAvLyBJZiBicm93c2VyIHN1cHBvcnRzIEdhbWVwYWQgQVBJOlxyXG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IuZ2V0R2FtZXBhZHMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuXHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5wbHVnaW4uR2FtZXBhZENvbnRyb2wucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogSW5pdC4gY29udHJvbC5cclxuICAgICAqL1xyXG4gICAgaW5pdDogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZW4gdXNlciBiZWdpbnMgdG8gaW50ZXJhY3Qgd2l0aCBjb25uZWN0ZWQgZ2FtZXBhZDpcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2dhbWVwYWQvI2RvbS1nYW1lcGFkZXZlbnRcclxuICAgICAgICAgKi9cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csICdnYW1lcGFkY29ubmVjdGVkJywgdGhpcy5fY2hlY2tHYW1lcGFkQ29tcGF0aWJpbGl0eSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZWxpbmUub24oJ2ZyYW1lJywgdGhpcy51cGRhdGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LCAnZ2FtZXBhZGRpc2Nvbm5lY3RlZCcsIHRoaXMuX2Rpc2Nvbm5lY3RHYW1lcGFkKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBjb250cm9sLlxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LCAnZ2FtZXBhZGNvbm5lY3RlZCcsIHRoaXMuX2NoZWNrR2FtZXBhZENvbXBhdGliaWxpdHkpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aW1lbGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lLm9mZignZnJhbWUnLCB0aGlzLnVwZGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3csICdnYW1lcGFkZGlzY29ubmVjdGVkJywgdGhpcy5fZGlzY29ubmVjdEdhbWVwYWQpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250cm9sJ3MgdXBkYXRlLiBTaG91bGQgYmUgaW52b2tlZCBldmVyeSBmcmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZnJhbWVUaW1lIEZyYW1lIHRpbWUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGZyYW1lVGltZSkge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX3N0YW5kYXJkR2FtZXBhZEF2YWlsYWJsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zY2FuUHJlc3NlZEdhbWVwYWRCdXR0b25zKCk7XHJcbiAgICAgICAgdGhpcy5fc2NhbkluY2xpbmVkR2FtZXBhZEF4ZXMoKTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRhcmdldCBkZXBlbmRpbmcgb24gdXNlciBpbnB1dC5cclxuXHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnRhcmdldC5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgeEF4aXMgPSB0YXJnZXQubG9jYWxUcmFuc2Zvcm0ueC5ub3JtYWxpemUoKTtcclxuICAgICAgICB2YXIgekF4aXMgPSB0YXJnZXQubG9jYWxUcmFuc2Zvcm0uei5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmFyIG1vdmVTcGVlZCA9IHRoaXMubW92ZVNwZWVkICogZnJhbWVUaW1lIC8gMjA7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlRm9yd2FyZCkge1xyXG4gICAgICAgICAgICAvLyBPcHBvc2l0ZSBkaXJlY3Rpb24gb2Ygei5cclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoekF4aXMsIC1tb3ZlU3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZUJhY2t3YXJkKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHpBeGlzLCBtb3ZlU3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZUxlZnQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoeEF4aXMsIC1tb3ZlU3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZVJpZ2h0KSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHhBeGlzLCBtb3ZlU3BlZWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGFyZ2V0LnJvdGF0ZUFyb3VuZCh0YXJnZXQucG9zaXRpb24sIHRoaXMudXAsIC10aGlzLl9vZmZzZXRQaXRjaCAqIGZyYW1lVGltZSAqIE1hdGguUEkgLyAzNjApO1xyXG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS54O1xyXG4gICAgICAgIHRhcmdldC5yb3RhdGVBcm91bmQodGFyZ2V0LnBvc2l0aW9uLCB4QXhpcywgLXRoaXMuX29mZnNldFJvbGwgKiBmcmFtZVRpbWUgKiBNYXRoLlBJIC8gMzYwKTtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiBJZiBuZWNlc3Nhcnk6IHRyaWdnZXIgYHVwZGF0ZWAgZXZlbnQuXHJcbiAgICAgICAgICogWFhYIFRoaXMgY2FuIGVjb25vbWl6ZSByZW5kZXJpbmcgT1BzLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlRm9yd2FyZCA9PT0gdHJ1ZSB8fCB0aGlzLl9tb3ZlQmFja3dhcmQgPT09IHRydWUgfHwgdGhpcy5fbW92ZUxlZnQgPT09IHRydWVcclxuICAgICAgICAgICAgfHwgdGhpcy5fbW92ZVJpZ2h0ID09PSB0cnVlIHx8IHRoaXMuX29mZnNldFBpdGNoICE9PSAwIHx8IHRoaXMuX29mZnNldFJvbGwgIT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3VwZGF0ZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVzZXQgdmFsdWVzIHRvIGF2b2lkIGxvc3Qgb2YgY29udHJvbC5cclxuXHJcbiAgICAgICAgdGhpcy5fbW92ZUZvcndhcmQgPSB0aGlzLl9tb3ZlQmFja3dhcmQgPSB0aGlzLl9tb3ZlTGVmdCA9IHRoaXMuX21vdmVSaWdodCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX29mZnNldFBpdGNoID0gdGhpcy5fb2Zmc2V0Um9sbCA9IDA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBQcml2YXRlIG1ldGhvZHM6XHJcblxyXG4gICAgX2NoZWNrR2FtZXBhZENvbXBhdGliaWxpdHk6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGNvbm5lY3RlZCBnYW1lcGFkIGhhcyBhICoqc3RhbmRhcmQqKiBsYXlvdXQ6XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9nYW1lcGFkLyNyZW1hcHBpbmcgYWJvdXQgc3RhbmRhcmQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYgKGV2ZW50LmdhbWVwYWQubWFwcGluZyA9PT0gJ3N0YW5kYXJkJykge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fc3RhbmRhcmRHYW1lcGFkSW5kZXggPSBldmVudC5nYW1lcGFkLmluZGV4O1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFuZGFyZEdhbWVwYWRBdmFpbGFibGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5vblN0YW5kYXJkR2FtZXBhZFJlYWR5KGV2ZW50LmdhbWVwYWQpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBfZGlzY29ubmVjdEdhbWVwYWQ6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YW5kYXJkR2FtZXBhZEF2YWlsYWJsZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLm9uR2FtZXBhZERpc2Nvbm5lY3RlZChldmVudC5nYW1lcGFkKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXRTdGFuZGFyZEdhbWVwYWQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICByZXR1cm4gbmF2aWdhdG9yLmdldEdhbWVwYWRzKClbdGhpcy5fc3RhbmRhcmRHYW1lcGFkSW5kZXhdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgX3NjYW5QcmVzc2VkR2FtZXBhZEJ1dHRvbnM6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgZ2FtZXBhZEJ1dHRvbnMgPSB0aGlzLl9nZXRTdGFuZGFyZEdhbWVwYWQoKS5idXR0b25zO1xyXG5cclxuICAgICAgICAvLyBGb3IgZWFjaCBnYW1lcGFkIGJ1dHRvbjpcclxuICAgICAgICBmb3IgKHZhciBnYW1lcGFkQnV0dG9uSWQgPSAwOyBnYW1lcGFkQnV0dG9uSWQgPCBnYW1lcGFkQnV0dG9ucy5sZW5ndGg7IGdhbWVwYWRCdXR0b25JZCsrKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgdXNlciBpbnB1dC5cclxuICAgICAgICAgICAgdmFyIGdhbWVwYWRCdXR0b24gPSBnYW1lcGFkQnV0dG9uc1tnYW1lcGFkQnV0dG9uSWRdO1xyXG5cclxuICAgICAgICAgICAgaWYgKGdhbWVwYWRCdXR0b24ucHJlc3NlZCkge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2FtZXBhZEJ1dHRvbklkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEQtcGFkIFVwXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUZvcndhcmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRC1wYWQgRG93blxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVCYWNrd2FyZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBELXBhZCBMZWZ0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxNDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUxlZnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRC1wYWQgUmlnaHRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE1OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlUmlnaHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIF9zY2FuSW5jbGluZWRHYW1lcGFkQXhlczogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBnYW1lcGFkQXhlcyA9IHRoaXMuX2dldFN0YW5kYXJkR2FtZXBhZCgpLmF4ZXM7XHJcblxyXG4gICAgICAgIC8vIEZvciBlYWNoIGdhbWVwYWQgYXhpczpcclxuICAgICAgICBmb3IgKHZhciBnYW1lcGFkQXhpc0lkID0gMDsgZ2FtZXBhZEF4aXNJZCA8IGdhbWVwYWRBeGVzLmxlbmd0aDsgZ2FtZXBhZEF4aXNJZCsrKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgdXNlciBpbnB1dC5cclxuICAgICAgICAgICAgdmFyIGdhbWVwYWRBeGlzID0gZ2FtZXBhZEF4ZXNbZ2FtZXBhZEF4aXNJZF07XHJcblxyXG4gICAgICAgICAgICAvLyBYWFggV2UgdXNlIGEgdGhyZXNob2xkIGJlY2F1c2UgYXhlcyBhcmUgbmV2ZXIgbmV1dHJhbC5cclxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGdhbWVwYWRBeGlzKSA+IHRoaXMuX2dhbWVwYWRBeGlzVGhyZXNob2xkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChnYW1lcGFkQXhpc0lkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIExlZnQgc3RpY2sgWMKxXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlTGVmdCA9IGdhbWVwYWRBeGlzIDwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZVJpZ2h0ID0gZ2FtZXBhZEF4aXMgPiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTGVmdCBzdGljayBZwrFcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVGb3J3YXJkID0gZ2FtZXBhZEF4aXMgPCAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlQmFja3dhcmQgPSBnYW1lcGFkQXhpcyA+IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBSaWdodCBzdGljayBYwrFcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29mZnNldFBpdGNoICs9IGdhbWVwYWRBeGlzICogdGhpcy5sb29rQXJvdW5kU3BlZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBSaWdodCBzdGljayBZwrFcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29mZnNldFJvbGwgKz0gZ2FtZXBhZEF4aXMgKiB0aGlzLmxvb2tBcm91bmRTcGVlZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHYW1lcGFkQ29udHJvbDtcclxuIiwidmFyIEdlc3R1cmVNZ3IgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdGhpcy5fdHJhY2sgPSBbXTtcclxufTtcclxuXHJcbkdlc3R1cmVNZ3IucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBHZXN0dXJlTWdyLFxyXG5cclxuICAgIHJlY29nbml6ZTogZnVuY3Rpb24gKGV2ZW50LCB0YXJnZXQsIHJvb3QpIHtcclxuICAgICAgICB0aGlzLl9kb1RyYWNrKGV2ZW50LCB0YXJnZXQsIHJvb3QpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWNvZ25pemUoZXZlbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9kb1RyYWNrOiBmdW5jdGlvbiAoZXZlbnQsIHRhcmdldCwgcm9vdCkge1xyXG4gICAgICAgIHZhciB0b3VjaGVzID0gZXZlbnQudGFyZ2V0VG91Y2hlcztcclxuXHJcbiAgICAgICAgaWYgKCF0b3VjaGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0cmFja0l0ZW0gPSB7XHJcbiAgICAgICAgICAgIHBvaW50czogW10sXHJcbiAgICAgICAgICAgIHRvdWNoZXM6IFtdLFxyXG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcclxuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRvdWNoZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRvdWNoID0gdG91Y2hlc1tpXTtcclxuICAgICAgICAgICAgdHJhY2tJdGVtLnBvaW50cy5wdXNoKFt0b3VjaC5jbGllbnRYLCB0b3VjaC5jbGllbnRZXSk7XHJcbiAgICAgICAgICAgIHRyYWNrSXRlbS50b3VjaGVzLnB1c2godG91Y2gpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2sucHVzaCh0cmFja0l0ZW0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcmVjb2duaXplOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gcmVjb2duaXplcnMpIHtcclxuICAgICAgICAgICAgaWYgKHJlY29nbml6ZXJzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBnZXN0dXJlSW5mbyA9IHJlY29nbml6ZXJzW2V2ZW50TmFtZV0odGhpcy5fdHJhY2ssIGV2ZW50KTtcclxuICAgICAgICAgICAgICAgIGlmIChnZXN0dXJlSW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXN0dXJlSW5mbztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmZ1bmN0aW9uIGRpc3QocG9pbnRQYWlyKSB7XHJcbiAgICB2YXIgZHggPSBwb2ludFBhaXJbMV1bMF0gLSBwb2ludFBhaXJbMF1bMF07XHJcbiAgICB2YXIgZHkgPSBwb2ludFBhaXJbMV1bMV0gLSBwb2ludFBhaXJbMF1bMV07XHJcblxyXG4gICAgcmV0dXJuIE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNlbnRlcihwb2ludFBhaXIpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgKHBvaW50UGFpclswXVswXSArIHBvaW50UGFpclsxXVswXSkgLyAyLFxyXG4gICAgICAgIChwb2ludFBhaXJbMF1bMV0gKyBwb2ludFBhaXJbMV1bMV0pIC8gMlxyXG4gICAgXTtcclxufVxyXG5cclxudmFyIHJlY29nbml6ZXJzID0ge1xyXG5cclxuICAgIHBpbmNoOiBmdW5jdGlvbiAodHJhY2ssIGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIHRyYWNrTGVuID0gdHJhY2subGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAoIXRyYWNrTGVuKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwaW5jaEVuZCA9ICh0cmFja1t0cmFja0xlbiAtIDFdIHx8IHt9KS5wb2ludHM7XHJcbiAgICAgICAgdmFyIHBpbmNoUHJlID0gKHRyYWNrW3RyYWNrTGVuIC0gMl0gfHwge30pLnBvaW50cyB8fCBwaW5jaEVuZDtcclxuXHJcbiAgICAgICAgaWYgKHBpbmNoUHJlXHJcbiAgICAgICAgICAgICYmIHBpbmNoUHJlLmxlbmd0aCA+IDFcclxuICAgICAgICAgICAgJiYgcGluY2hFbmRcclxuICAgICAgICAgICAgJiYgcGluY2hFbmQubGVuZ3RoID4gMVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB2YXIgcGluY2hTY2FsZSA9IGRpc3QocGluY2hFbmQpIC8gZGlzdChwaW5jaFByZSk7XHJcbiAgICAgICAgICAgICFpc0Zpbml0ZShwaW5jaFNjYWxlKSAmJiAocGluY2hTY2FsZSA9IDEpO1xyXG5cclxuICAgICAgICAgICAgZXZlbnQucGluY2hTY2FsZSA9IHBpbmNoU2NhbGU7XHJcblxyXG4gICAgICAgICAgICB2YXIgcGluY2hDZW50ZXIgPSBjZW50ZXIocGluY2hFbmQpO1xyXG4gICAgICAgICAgICBldmVudC5waW5jaFggPSBwaW5jaENlbnRlclswXTtcclxuICAgICAgICAgICAgZXZlbnQucGluY2hZID0gcGluY2hDZW50ZXJbMV07XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ3BpbmNoJyxcclxuICAgICAgICAgICAgICAgIHRhcmdldDogdHJhY2tbMF0udGFyZ2V0LFxyXG4gICAgICAgICAgICAgICAgZXZlbnQ6IGV2ZW50XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgR2VzdHVyZU1ncjtcclxuIiwiaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBQbGFuZSBmcm9tICcuLi9tYXRoL1BsYW5lJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IFJheSBmcm9tICcuLi9tYXRoL1JheSc7XHJcblxyXG52YXIgdXZzID0gW1swLCAwXSwgWzAsIDFdLCBbMSwgMV0sIFsxLCAwXV07XHJcbnZhciB0cmlzID0gWzAsIDEsIDIsIDIsIDMsIDBdO1xyXG5cclxudmFyIEluZmluaXRlUGxhbmUgPSBNZXNoLmV4dGVuZCh7XHJcblxyXG4gICAgY2FtZXJhOiBudWxsLFxyXG5cclxuICAgIHBsYW5lOiBudWxsLFxyXG5cclxuICAgIG1heEdyaWQ6IDAsXHJcblxyXG4gICAgLy8gVE9ET1xyXG4gICAgZnJ1c3R1bUN1bGxpbmc6IGZhbHNlXHJcblxyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5ID0gbmV3IEdlb21ldHJ5KHtcclxuICAgICAgICBkeW5hbWljOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24uaW5pdCg2KTtcclxuICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLmluaXQoNik7XHJcbiAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMC5pbml0KDYpO1xyXG4gICAgZ2VvbWV0cnkuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSg2KTtcclxuXHJcbiAgICB0aGlzLnBsYW5lID0gbmV3IFBsYW5lKCk7XHJcbn0sIHtcclxuXHJcbiAgICB1cGRhdGVHZW9tZXRyeTogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2YXIgY29vcmRzID0gdGhpcy5fdW5Qcm9qZWN0R3JpZCgpO1xyXG4gICAgICAgIGlmICghY29vcmRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgbm9ybWFsQXR0ciA9IHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWw7XHJcbiAgICAgICAgdmFyIHRleGNvb3JkcyA9IHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDA7XHJcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmdlb21ldHJ5LmluZGljZXM7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpZHggPSB0cmlzW2ldO1xyXG4gICAgICAgICAgICBwb3NpdGlvbkF0dHIuc2V0KGksIGNvb3Jkc1tpZHhdLmFycmF5KTtcclxuICAgICAgICAgICAgbm9ybWFsQXR0ci5zZXQoaSwgdGhpcy5wbGFuZS5ub3JtYWwuYXJyYXkpO1xyXG4gICAgICAgICAgICB0ZXhjb29yZHMuc2V0KGksIHV2c1tpZHhdKTtcclxuICAgICAgICAgICAgaW5kaWNlc1tpXSA9IGk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2VvbWV0cnkuZGlydHkoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gaHR0cDovL2ZpbGVhZG1pbi5jcy5sdGguc2UvZ3JhcGhpY3MvdGhlc2VzL3Byb2plY3RzL3Byb2pncmlkL1xyXG4gICAgX3VuUHJvamVjdEdyaWQ6IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciBwbGFuZVZpZXdTcGFjZSA9IG5ldyBQbGFuZSgpO1xyXG4gICAgICAgIHZhciBsaW5lcyA9IFtcclxuICAgICAgICAgICAgMCwgMSwgMCwgMiwgMSwgMywgMiwgMyxcclxuICAgICAgICAgICAgNCwgNSwgNCwgNiwgNSwgNywgNiwgNyxcclxuICAgICAgICAgICAgMCwgNCwgMSwgNSwgMiwgNiwgMywgN1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHZhciBzdGFydCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgdmFyIGVuZCA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4gICAgICAgIHZhciBwb2ludHMgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gMS0tLS0yXHJcbiAgICAgICAgLy8gfCAgICB8XHJcbiAgICAgICAgLy8gMC0tLS0zXHJcbiAgICAgICAgdmFyIGNvb3JkcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvb3Jkc1tpXSA9IG5ldyBWZWN0b3IzKDAsIDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJheSA9IG5ldyBSYXkoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcGxhbmVWaWV3U3BhY2UuY29weSh0aGlzLnBsYW5lKTtcclxuICAgICAgICAgICAgcGxhbmVWaWV3U3BhY2UuYXBwbHlUcmFuc2Zvcm0odGhpcy5jYW1lcmEudmlld01hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZnJ1c3R1bVZlcnRpY2VzID0gdGhpcy5jYW1lcmEuZnJ1c3R1bS52ZXJ0aWNlcztcclxuXHJcbiAgICAgICAgICAgIHZhciBuUG9pbnRzID0gMDtcclxuICAgICAgICAgICAgLy8gSW50ZXJzZWN0IHdpdGggbGluZXMgb2YgZnJ1c3R1bVxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0LmFycmF5ID0gZnJ1c3R1bVZlcnRpY2VzW2xpbmVzW2kgKiAyXV07XHJcbiAgICAgICAgICAgICAgICBlbmQuYXJyYXkgPSBmcnVzdHVtVmVydGljZXNbbGluZXNbaSAqIDIgKyAxXV07XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHBvaW50ID0gcGxhbmVWaWV3U3BhY2UuaW50ZXJzZWN0TGluZShzdGFydCwgZW5kLCBwb2ludHNbblBvaW50c10pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBvaW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwb2ludHNbblBvaW50c10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW25Qb2ludHNdID0gcG9pbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG5Qb2ludHMrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoblBvaW50cyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblBvaW50czsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBwb2ludHNbaV0uYXBwbHlQcm9qZWN0aW9uKHRoaXMuY2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBtaW5YID0gcG9pbnRzWzBdLmFycmF5WzBdO1xyXG4gICAgICAgICAgICB2YXIgbWluWSA9IHBvaW50c1swXS5hcnJheVsxXTtcclxuICAgICAgICAgICAgdmFyIG1heFggPSBwb2ludHNbMF0uYXJyYXlbMF07XHJcbiAgICAgICAgICAgIHZhciBtYXhZID0gcG9pbnRzWzBdLmFycmF5WzFdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IG5Qb2ludHM7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHBvaW50c1tpXS5hcnJheVswXSk7XHJcbiAgICAgICAgICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcG9pbnRzW2ldLmFycmF5WzFdKTtcclxuICAgICAgICAgICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBwb2ludHNbaV0uYXJyYXlbMF0pO1xyXG4gICAgICAgICAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHBvaW50c1tpXS5hcnJheVsxXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1pblggPT0gbWF4WCB8fCBtaW5ZID09IG1heFkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb29yZHNbMF0uYXJyYXlbMF0gPSBtaW5YO1xyXG4gICAgICAgICAgICBjb29yZHNbMF0uYXJyYXlbMV0gPSBtaW5ZO1xyXG4gICAgICAgICAgICBjb29yZHNbMV0uYXJyYXlbMF0gPSBtaW5YO1xyXG4gICAgICAgICAgICBjb29yZHNbMV0uYXJyYXlbMV0gPSBtYXhZO1xyXG4gICAgICAgICAgICBjb29yZHNbMl0uYXJyYXlbMF0gPSBtYXhYO1xyXG4gICAgICAgICAgICBjb29yZHNbMl0uYXJyYXlbMV0gPSBtYXhZO1xyXG4gICAgICAgICAgICBjb29yZHNbM10uYXJyYXlbMF0gPSBtYXhYO1xyXG4gICAgICAgICAgICBjb29yZHNbM10uYXJyYXlbMV0gPSBtaW5ZO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhLmNhc3RSYXkoY29vcmRzW2ldLCByYXkpO1xyXG4gICAgICAgICAgICAgICAgcmF5LmludGVyc2VjdFBsYW5lKHRoaXMucGxhbmUsIGNvb3Jkc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBjb29yZHM7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKClcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBJbmZpbml0ZVBsYW5lO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tICcuLi9tYXRoL1ZlY3RvcjInO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgR2VzdHVyZU1nciBmcm9tICcuL0dlc3R1cmVNZ3InO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcblxyXG52YXIgTU9VU0VfQlVUVE9OX0tFWV9NQVAgPSB7XHJcbiAgICBsZWZ0OiAwLFxyXG4gICAgbWlkZGxlOiAxLFxyXG4gICAgcmlnaHQ6IDJcclxufTtcclxuXHJcbmZ1bmN0aW9uIGZpcnN0Tm90TnVsbCgpIHtcclxuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBpZiAoYXJndW1lbnRzW2ldICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1tpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbnZlcnRUb0FycmF5KHZhbCkge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHtcclxuICAgICAgICB2YWwgPSBbdmFsLCB2YWxdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5wbHVnaW4uT3JiaXRDb250cm9sXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgT3JiaXRDb250cm9sID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkucGx1Z2luLk9yYml0Q29udHJvbCMgKi8ge1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UaW1lbGluZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aW1lbGluZTogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRvbUVsZW1lbnQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lk5vZGV9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGFyZ2V0OiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2NlbnRlcjogbmV3IFZlY3RvcjMoKSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWluaW11bSBkaXN0YW5jZSB0byB0aGUgY2VudGVyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwLjVcclxuICAgICAgICAgKi9cclxuICAgICAgICBtaW5EaXN0YW5jZTogMC4xLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNYXhpbXVtIGRpc3RhbmNlIHRvIHRoZSBjZW50ZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDJcclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXhEaXN0YW5jZTogMTAwMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogT25seSBhdmFpbGFibGUgd2hlbiBjYW1lcmEgaXMgb3J0aG9ncmFwaGljXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWF4T3J0aG9ncmFwaGljU2l6ZTogMzAwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBPbmx5IGF2YWlsYWJsZSB3aGVuIGNhbWVyYSBpcyBvcnRob2dyYXBoaWNcclxuICAgICAgICAgKi9cclxuICAgICAgICBtaW5PcnRob2dyYXBoaWNTaXplOiAzMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXNwZWN0IG9mIG9ydGhvZ3JhcGhpYyBjYW1lcmFcclxuICAgICAgICAgKiBPbmx5IGF2YWlsYWJsZSB3aGVuIGNhbWVyYSBpcyBvcnRob2dyYXBoaWNcclxuICAgICAgICAgKi9cclxuICAgICAgICBvcnRob2dyYXBoaWNBc3BlY3Q6IDEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1pbmltdW0gYWxwaGEgcm90YXRpb25cclxuICAgICAgICAgKi9cclxuICAgICAgICBtaW5BbHBoYTogLTkwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNYXhpbXVtIGFscGhhIHJvdGF0aW9uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWF4QWxwaGE6IDkwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNaW5pbXVtIGJldGEgcm90YXRpb25cclxuICAgICAgICAgKi9cclxuICAgICAgICBtaW5CZXRhOiAtSW5maW5pdHksXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWF4aW11bSBiZXRhIHJvdGF0aW9uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWF4QmV0YTogSW5maW5pdHksXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFN0YXJ0IGF1dG8gcm90YXRpbmcgYWZ0ZXIgc3RpbGwgZm9yIHRoZSBnaXZlbiB0aW1lXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXV0b1JvdGF0ZUFmdGVyU3RpbGw6IDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERpcmVjdGlvbiBvZiBhdXRvUm90YXRlLiBjdyBvciBjY3cgd2hlbiBsb29raW5nIHRvcCBkb3duLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGF1dG9Sb3RhdGVEaXJlY3Rpb246ICdjdycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERlZ3JlZSBwZXIgc2Vjb25kXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXV0b1JvdGF0ZVNwZWVkOiA2MCxcclxuXHJcbiAgICAgICAgcGFuTW91c2VCdXR0b246ICdtaWRkbGUnLFxyXG4gICAgICAgIHJvdGF0ZU1vdXNlQnV0dG9uOiAnbGVmdCcsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFBhbiBvciByb3RhdGVcclxuICAgICAgICAgKiBAdHlwZSB7U3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9tb2RlOiAncm90YXRlJyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGFtcGluZzogMC44LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICByb3RhdGVTZW5zaXRpdml0eTogMSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgem9vbVNlbnNpdGl2aXR5OiAxLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBwYW5TZW5zaXRpdml0eTogMSxcclxuXHJcbiAgICAgICAgX25lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgICAgICAgX3JvdGF0aW5nOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLy8gUm90YXRpb24gYXJvdW5kIHlBeGlzXHJcbiAgICAgICAgX3BoaTogMCxcclxuICAgICAgICAvLyBSb3RhdGlvbiBhcm91bmQgeEF4aXNcclxuICAgICAgICBfdGhldGE6IDAsXHJcblxyXG4gICAgICAgIF9tb3VzZVg6IDAsXHJcbiAgICAgICAgX21vdXNlWTogMCxcclxuXHJcbiAgICAgICAgX3JvdGF0ZVZlbG9jaXR5OiBuZXcgVmVjdG9yMigpLFxyXG5cclxuICAgICAgICBfcGFuVmVsb2NpdHk6IG5ldyBWZWN0b3IyKCksXHJcblxyXG4gICAgICAgIF9kaXN0YW5jZTogMjAsXHJcblxyXG4gICAgICAgIF96b29tU3BlZWQ6IDAsXHJcblxyXG4gICAgICAgIF9zdGlsbFRpbWVvdXQ6IDAsXHJcblxyXG4gICAgICAgIF9hbmltYXRvcnM6IFtdLFxyXG5cclxuICAgICAgICBfZ2VzdHVyZU1ncjogbmV3IEdlc3R1cmVNZ3IoKVxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gRWFjaCBPcmJpdENvbnRyb2wgaGFzIGl0J3Mgb3duIGhhbmRsZXJcclxuICAgIHRoaXMuX21vdXNlRG93bkhhbmRsZXIgPSB0aGlzLl9tb3VzZURvd25IYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9tb3VzZVdoZWVsSGFuZGxlciA9IHRoaXMuX21vdXNlV2hlZWxIYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyID0gdGhpcy5fbW91c2VNb3ZlSGFuZGxlci5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fbW91c2VVcEhhbmRsZXIgPSB0aGlzLl9tb3VzZVVwSGFuZGxlci5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fcGluY2hIYW5kbGVyID0gdGhpcy5fcGluY2hIYW5kbGVyLmJpbmQodGhpcyk7XHJcblxyXG4gICAgdGhpcy5pbml0KCk7XHJcbn0sIC8qKiBAbGVuZHMgY2xheS5wbHVnaW4uT3JiaXRDb250cm9sIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemUuXHJcbiAgICAgKiBNb3VzZSBldmVudCBiaW5kaW5nXHJcbiAgICAgKi9cclxuICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZG9tID0gdGhpcy5kb21FbGVtZW50O1xyXG5cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb20sICd0b3VjaHN0YXJ0JywgdGhpcy5fbW91c2VEb3duSGFuZGxlcik7XHJcblxyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlZG93bicsIHRoaXMuX21vdXNlRG93bkhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ3doZWVsJywgdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aW1lbGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lLm9uKCdmcmFtZScsIHRoaXMudXBkYXRlLCB0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVjb21wb3NlVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UuXHJcbiAgICAgKiBNb3VzZSBldmVudCB1bmJpbmRpbmdcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBkb20gPSB0aGlzLmRvbUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNoc3RhcnQnLCB0aGlzLl9tb3VzZURvd25IYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICd0b3VjaG1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICd0b3VjaGVuZCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcclxuXHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2Vkb3duJywgdGhpcy5fbW91c2VEb3duSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2Vtb3ZlJywgdGhpcy5fbW91c2VNb3ZlSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2V1cCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICd3aGVlbCcsIHRoaXMuX21vdXNlV2hlZWxIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZW91dCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGltZWxpbmUpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lbGluZS5vZmYoJ2ZyYW1lJywgdGhpcy51cGRhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0b3BBbGxBbmltYXRpb24oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZGlzdGFuY2VcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0RGlzdGFuY2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzdGFuY2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGRpc3RhbmNlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2VcclxuICAgICAqL1xyXG4gICAgc2V0RGlzdGFuY2U6IGZ1bmN0aW9uIChkaXN0YW5jZSkge1xyXG4gICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gZGlzdGFuY2U7XHJcbiAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBzaXplIG9mIG9ydGhvZ3JhcGhpYyB2aWV3aW5nIHZvbHVtZVxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXRPcnRob2dyYXBoaWNTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX29ydGhvU2l6ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgc2l6ZSBvZiBvcnRob2dyYXBoaWMgdmlld2luZyB2b2x1bWVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzaXplXHJcbiAgICAgKi9cclxuICAgIHNldE9ydGhvZ3JhcGhpY1NpemU6IGZ1bmN0aW9uIChzaXplKSB7XHJcbiAgICAgICAgdGhpcy5fb3J0aG9TaXplID0gc2l6ZTtcclxuICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGFscGhhIHJvdGF0aW9uXHJcbiAgICAgKiBBbHBoYSBhbmdsZSBmb3IgdG9wLWRvd24gcm90YXRpb24uIFBvc2l0aXZlIHRvIHJvdGF0ZSB0byB0b3AuXHJcbiAgICAgKlxyXG4gICAgICogV2hpY2ggbWVhbnMgY2FtZXJhIHJvdGF0aW9uIGFyb3VuZCB4IGF4aXMuXHJcbiAgICAgKi9cclxuICAgIGdldEFscGhhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoZXRhIC8gTWF0aC5QSSAqIDE4MDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYmV0YSByb3RhdGlvblxyXG4gICAgICogQmV0YSBhbmdsZSBmb3IgbGVmdC1yaWdodCByb3RhdGlvbi4gUG9zaXRpdmUgdG8gcm90YXRlIHRvIHJpZ2h0LlxyXG4gICAgICpcclxuICAgICAqIFdoaWNoIG1lYW5zIGNhbWVyYSByb3RhdGlvbiBhcm91bmQgeSBheGlzLlxyXG4gICAgICovXHJcbiAgICBnZXRCZXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIC10aGlzLl9waGkgLyBNYXRoLlBJICogMTgwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBjb250cm9sIGNlbnRlclxyXG4gICAgICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgKi9cclxuICAgIGdldENlbnRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jZW50ZXIudG9BcnJheSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhbHBoYSByb3RhdGlvbiBhbmdsZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGFscGhhXHJcbiAgICAgKi9cclxuICAgIHNldEFscGhhOiBmdW5jdGlvbiAoYWxwaGEpIHtcclxuICAgICAgICBhbHBoYSA9IE1hdGgubWF4KE1hdGgubWluKHRoaXMubWF4QWxwaGEsIGFscGhhKSwgdGhpcy5taW5BbHBoYSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3RoZXRhID0gYWxwaGEgLyAxODAgKiBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYmV0YSByb3RhdGlvbiBhbmdsZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJldGFcclxuICAgICAqL1xyXG4gICAgc2V0QmV0YTogZnVuY3Rpb24gKGJldGEpIHtcclxuICAgICAgICBiZXRhID0gTWF0aC5tYXgoTWF0aC5taW4odGhpcy5tYXhCZXRhLCBiZXRhKSwgdGhpcy5taW5CZXRhKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcGhpID0gLWJldGEgLyAxODAgKiBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29udHJvbCBjZW50ZXJcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGNlbnRlclxyXG4gICAgICovXHJcbiAgICBzZXRDZW50ZXI6IGZ1bmN0aW9uIChjZW50ZXJBcnIpIHtcclxuICAgICAgICB0aGlzLl9jZW50ZXIuc2V0QXJyYXkoY2VudGVyQXJyKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0T3B0aW9uOiBmdW5jdGlvbiAob3B0cykge1xyXG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG5cclxuICAgICAgICBbJ2F1dG9Sb3RhdGUnLCAnYXV0b1JvdGF0ZUFmdGVyU3RpbGwnLFxyXG4gICAgICAgICAgICAnYXV0b1JvdGF0ZURpcmVjdGlvbicsICdhdXRvUm90YXRlU3BlZWQnLFxyXG4gICAgICAgICAgICAnZGFtcGluZycsXHJcbiAgICAgICAgICAgICdtaW5EaXN0YW5jZScsICdtYXhEaXN0YW5jZScsXHJcbiAgICAgICAgICAgICdtaW5PcnRob2dyYXBoaWNTaXplJywgJ21heE9ydGhvZ3JhcGhpY1NpemUnLCAnb3J0aG9ncmFwaGljQXNwZWN0JyxcclxuICAgICAgICAgICAgJ21pbkFscGhhJywgJ21heEFscGhhJywgJ21pbkJldGEnLCAnbWF4QmV0YScsXHJcbiAgICAgICAgICAgICdyb3RhdGVTZW5zaXRpdml0eScsICd6b29tU2Vuc2l0aXZpdHknLCAncGFuU2Vuc2l0aXZpdHknXHJcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgaWYgKG9wdHNba2V5XSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzW2tleV0gPSBvcHRzW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgaWYgKG9wdHMuZGlzdGFuY2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldERpc3RhbmNlKG9wdHMuZGlzdGFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0cy5vcnRob2dyYXBoaWNTaXplICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRPcnRob2dyYXBoaWNTaXplKG9wdHMub3J0aG9ncmFwaGljU2l6ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3B0cy5hbHBoYSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0QWxwaGEob3B0cy5hbHBoYSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRzLmJldGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldEJldGEob3B0cy5iZXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcHRzLmNlbnRlcikge1xyXG4gICAgICAgICAgICB0aGlzLnNldENlbnRlcihvcHRzLmNlbnRlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy50YXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdHMuZGlzdGFuY2VcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLm9ydGhvZ3JhcGhpY1NpemVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLmFscGhhXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0cy5iZXRhXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBvcHRzLmNlbnRlclxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmR1cmF0aW9uPTEwMDBdXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZWFzaW5nPSdsaW5lYXInXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmRvbmVdXHJcbiAgICAgKi9cclxuICAgIGFuaW1hdGVUbzogZnVuY3Rpb24gKG9wdHMpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIHZhciBvYmogPSB7fTtcclxuICAgICAgICB2YXIgdGFyZ2V0ID0ge307XHJcbiAgICAgICAgdmFyIHRpbWVsaW5lID0gdGhpcy50aW1lbGluZTtcclxuICAgICAgICBpZiAoIXRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuZGlzdGFuY2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvYmouZGlzdGFuY2UgPSB0aGlzLmdldERpc3RhbmNlKCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5kaXN0YW5jZSA9IG9wdHMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRzLm9ydGhvZ3JhcGhpY1NpemUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvYmoub3J0aG9ncmFwaGljU2l6ZSA9IHRoaXMuZ2V0T3J0aG9ncmFwaGljU2l6ZSgpO1xyXG4gICAgICAgICAgICB0YXJnZXQub3J0aG9ncmFwaGljU2l6ZSA9IG9wdHMub3J0aG9ncmFwaGljU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuYWxwaGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvYmouYWxwaGEgPSB0aGlzLmdldEFscGhhKCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5hbHBoYSA9IG9wdHMuYWxwaGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRzLmJldGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvYmouYmV0YSA9IHRoaXMuZ2V0QmV0YSgpO1xyXG4gICAgICAgICAgICB0YXJnZXQuYmV0YSA9IG9wdHMuYmV0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuY2VudGVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgb2JqLmNlbnRlciA9IHRoaXMuZ2V0Q2VudGVyKCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5jZW50ZXIgPSBvcHRzLmNlbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRBbmltYXRvcihcclxuICAgICAgICAgICAgdGltZWxpbmUuYW5pbWF0ZShvYmopXHJcbiAgICAgICAgICAgICAgICAud2hlbihvcHRzLmR1cmF0aW9uIHx8IDEwMDAsIHRhcmdldClcclxuICAgICAgICAgICAgICAgIC5kdXJpbmcoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouYWxwaGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldEFscGhhKG9iai5hbHBoYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouYmV0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0QmV0YShvYmouYmV0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouZGlzdGFuY2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldERpc3RhbmNlKG9iai5kaXN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmoub3J0aG9ncmFwaGljU2l6ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0T3J0aG9ncmFwaGljU2l6ZShvYmoub3J0aG9ncmFwaGljU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouY2VudGVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRDZW50ZXIob2JqLmNlbnRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuZG9uZShvcHRzLmRvbmUpXHJcbiAgICAgICAgKS5zdGFydChvcHRzLmVhc2luZyB8fCAnbGluZWFyJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcCBhbGwgYW5pbWF0aW9uc1xyXG4gICAgICovXHJcbiAgICBzdG9wQWxsQW5pbWF0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9hbmltYXRvcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fYW5pbWF0b3JzW2ldLnN0b3AoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fYW5pbWF0b3JzLmxlbmd0aCA9IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIF9pc0FuaW1hdGluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hbmltYXRvcnMubGVuZ3RoID4gMDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENhbGwgdXBkYXRlIGVhY2ggZnJhbWVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gZGVsdGFUaW1lIEZyYW1lIHRpbWVcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZGVsdGFUaW1lKSB7XHJcblxyXG4gICAgICAgIGRlbHRhVGltZSA9IGRlbHRhVGltZSB8fCAxNjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3JvdGF0aW5nKSB7XHJcbiAgICAgICAgICAgIHZhciByYWRpYW4gPSAodGhpcy5hdXRvUm90YXRlRGlyZWN0aW9uID09PSAnY3cnID8gMSA6IC0xKVxyXG4gICAgICAgICAgICAgICAgKiB0aGlzLmF1dG9Sb3RhdGVTcGVlZCAvIDE4MCAqIE1hdGguUEk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BoaSAtPSByYWRpYW4gKiBkZWx0YVRpbWUgLyAxMDAwO1xyXG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3JvdGF0ZVZlbG9jaXR5LmxlbigpID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy5fem9vbVNwZWVkKSA+IDAuMDEgfHwgdGhpcy5fcGFuVmVsb2NpdHkubGVuKCkgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fbmVlZHNVcGRhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRml4ZWQgZGVsdGFUaW1lXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlRGlzdGFuY2VPclNpemUoTWF0aC5taW4oZGVsdGFUaW1lLCA1MCkpO1xyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVBhbihNYXRoLm1pbihkZWx0YVRpbWUsIDUwKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVJvdGF0ZShNYXRoLm1pbihkZWx0YVRpbWUsIDUwKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVRyYW5zZm9ybSgpO1xyXG5cclxuICAgICAgICB0aGlzLnRhcmdldC51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCd1cGRhdGUnKTtcclxuXHJcbiAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZVJvdGF0ZTogZnVuY3Rpb24gKGRlbHRhVGltZSkge1xyXG4gICAgICAgIHZhciB2ZWxvY2l0eSA9IHRoaXMuX3JvdGF0ZVZlbG9jaXR5O1xyXG4gICAgICAgIHRoaXMuX3BoaSA9IHZlbG9jaXR5LnkgKiBkZWx0YVRpbWUgLyAyMCArIHRoaXMuX3BoaTtcclxuICAgICAgICB0aGlzLl90aGV0YSA9IHZlbG9jaXR5LnggKiBkZWx0YVRpbWUgLyAyMCArIHRoaXMuX3RoZXRhO1xyXG5cclxuICAgICAgICB0aGlzLnNldEFscGhhKHRoaXMuZ2V0QWxwaGEoKSk7XHJcbiAgICAgICAgdGhpcy5zZXRCZXRhKHRoaXMuZ2V0QmV0YSgpKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdmVjdG9yRGFtcGluZyh2ZWxvY2l0eSwgdGhpcy5kYW1waW5nKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZURpc3RhbmNlT3JTaXplOiBmdW5jdGlvbiAoZGVsdGFUaW1lKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0RGlzdGFuY2UodGhpcy5fZGlzdGFuY2UgKyB0aGlzLl96b29tU3BlZWQgKiBkZWx0YVRpbWUgLyAyMCk7XHJcbiAgICAgICAgaWYgKCEodGhpcy50YXJnZXQgaW5zdGFuY2VvZiBQZXJzcGVjdGl2ZUNhbWVyYSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0T3J0aG9TaXplKHRoaXMuX29ydGhvU2l6ZSArIHRoaXMuX3pvb21TcGVlZCAqIGRlbHRhVGltZSAvIDIwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3pvb21TcGVlZCAqPSBNYXRoLnBvdyh0aGlzLmRhbXBpbmcsIGRlbHRhVGltZSAvIDE2KTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldERpc3RhbmNlOiBmdW5jdGlvbiAoZGlzdGFuY2UpIHtcclxuICAgICAgICB0aGlzLl9kaXN0YW5jZSA9IE1hdGgubWF4KE1hdGgubWluKGRpc3RhbmNlLCB0aGlzLm1heERpc3RhbmNlKSwgdGhpcy5taW5EaXN0YW5jZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9zZXRPcnRob1NpemU6IGZ1bmN0aW9uIChzaXplKSB7XHJcbiAgICAgICAgdGhpcy5fb3J0aG9TaXplID0gTWF0aC5tYXgoTWF0aC5taW4oc2l6ZSwgdGhpcy5tYXhPcnRob2dyYXBoaWNTaXplKSwgdGhpcy5taW5PcnRob2dyYXBoaWNTaXplKTtcclxuICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy50YXJnZXQ7XHJcbiAgICAgICAgdmFyIGNhbWVyYUhlaWdodCA9IHRoaXMuX29ydGhvU2l6ZTtcclxuICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgdmFyIGNhbWVyYVdpZHRoID0gY2FtZXJhSGVpZ2h0ICogdGhpcy5vcnRob2dyYXBoaWNBc3BlY3Q7XHJcbiAgICAgICAgY2FtZXJhLmxlZnQgPSAtY2FtZXJhV2lkdGggLyAyO1xyXG4gICAgICAgIGNhbWVyYS5yaWdodCA9IGNhbWVyYVdpZHRoIC8gMjtcclxuICAgICAgICBjYW1lcmEudG9wID0gY2FtZXJhSGVpZ2h0IC8gMjtcclxuICAgICAgICBjYW1lcmEuYm90dG9tID0gLWNhbWVyYUhlaWdodCAvIDI7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVQYW46IGZ1bmN0aW9uIChkZWx0YVRpbWUpIHtcclxuICAgICAgICB2YXIgdmVsb2NpdHkgPSB0aGlzLl9wYW5WZWxvY2l0eTtcclxuICAgICAgICB2YXIgbGVuID0gdGhpcy5fZGlzdGFuY2U7XHJcblxyXG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldDtcclxuICAgICAgICB2YXIgeUF4aXMgPSB0YXJnZXQud29ybGRUcmFuc2Zvcm0ueTtcclxuICAgICAgICB2YXIgeEF4aXMgPSB0YXJnZXQud29ybGRUcmFuc2Zvcm0ueDtcclxuXHJcbiAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgIHRoaXMuX2NlbnRlclxyXG4gICAgICAgICAgICAuc2NhbGVBbmRBZGQoeEF4aXMsIC12ZWxvY2l0eS54ICogbGVuIC8gMjAwKVxyXG4gICAgICAgICAgICAuc2NhbGVBbmRBZGQoeUF4aXMsIC12ZWxvY2l0eS55ICogbGVuIC8gMjAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdmVjdG9yRGFtcGluZyh2ZWxvY2l0eSwgMCk7XHJcblxyXG4gICAgICAgIHZlbG9jaXR5LnggPSB2ZWxvY2l0eS55ID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZVRyYW5zZm9ybTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLnRhcmdldDtcclxuXHJcbiAgICAgICAgdmFyIGRpciA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgdmFyIHRoZXRhID0gdGhpcy5fdGhldGEgKyBNYXRoLlBJIC8gMjtcclxuICAgICAgICB2YXIgcGhpID0gdGhpcy5fcGhpICsgTWF0aC5QSSAvIDI7XHJcbiAgICAgICAgdmFyIHIgPSBNYXRoLnNpbih0aGV0YSk7XHJcblxyXG4gICAgICAgIGRpci54ID0gciAqIE1hdGguY29zKHBoaSk7XHJcbiAgICAgICAgZGlyLnkgPSAtTWF0aC5jb3ModGhldGEpO1xyXG4gICAgICAgIGRpci56ID0gciAqIE1hdGguc2luKHBoaSk7XHJcblxyXG4gICAgICAgIGNhbWVyYS5wb3NpdGlvbi5jb3B5KHRoaXMuX2NlbnRlcikuc2NhbGVBbmRBZGQoZGlyLCB0aGlzLl9kaXN0YW5jZSk7XHJcbiAgICAgICAgY2FtZXJhLnJvdGF0aW9uLmlkZW50aXR5KClcclxuICAgICAgICAgICAgLy8gRmlyc3QgYXJvdW5kIHksIHRoZW4gYXJvdW5kIHhcclxuICAgICAgICAgICAgLnJvdGF0ZVkoLXRoaXMuX3BoaSlcclxuICAgICAgICAgICAgLnJvdGF0ZVgoLXRoaXMuX3RoZXRhKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3N0YXJ0Q291bnRpbmdTdGlsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zdGlsbFRpbWVvdXQpO1xyXG5cclxuICAgICAgICB2YXIgdGltZSA9IHRoaXMuYXV0b1JvdGF0ZUFmdGVyU3RpbGw7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmICghaXNOYU4odGltZSkgJiYgdGltZSA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RpbGxUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl9yb3RhdGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIH0sIHRpbWUgKiAxMDAwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF92ZWN0b3JEYW1waW5nOiBmdW5jdGlvbiAodiwgZGFtcGluZykge1xyXG4gICAgICAgIHZhciBzcGVlZCA9IHYubGVuKCk7XHJcbiAgICAgICAgc3BlZWQgPSBzcGVlZCAqIGRhbXBpbmc7XHJcbiAgICAgICAgaWYgKHNwZWVkIDwgMWUtNCkge1xyXG4gICAgICAgICAgICBzcGVlZCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHYubm9ybWFsaXplKCkuc2NhbGUoc3BlZWQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBkZWNvbXBvc2VUcmFuc2Zvcm06IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudGFyZ2V0LnVwZGF0ZVdvcmxkVHJhbnNmb3JtKCk7XHJcblxyXG4gICAgICAgIHZhciBmb3J3YXJkID0gdGhpcy50YXJnZXQud29ybGRUcmFuc2Zvcm0uejtcclxuICAgICAgICB2YXIgYWxwaGEgPSBNYXRoLmFzaW4oZm9yd2FyZC55KTtcclxuICAgICAgICB2YXIgYmV0YSA9IE1hdGguYXRhbjIoZm9yd2FyZC54LCBmb3J3YXJkLnopO1xyXG5cclxuICAgICAgICB0aGlzLl90aGV0YSA9IGFscGhhO1xyXG4gICAgICAgIHRoaXMuX3BoaSA9IC1iZXRhO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJldGEodGhpcy5nZXRCZXRhKCkpO1xyXG4gICAgICAgIHRoaXMuc2V0QWxwaGEodGhpcy5nZXRBbHBoYSgpKTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2V0RGlzdGFuY2UodGhpcy50YXJnZXQucG9zaXRpb24uZGlzdCh0aGlzLl9jZW50ZXIpKTtcclxuICAgICAgICBpZiAoISh0aGlzLnRhcmdldCBpbnN0YW5jZW9mIFBlcnNwZWN0aXZlQ2FtZXJhKSl7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldE9ydGhvU2l6ZSh0aGlzLnRhcmdldC50b3AgLSB0aGlzLnRhcmdldC5ib3R0b20pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX21vdXNlRG93bkhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzQW5pbWF0aW5nKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgeCA9IGUuY2xpZW50WDtcclxuICAgICAgICB2YXIgeSA9IGUuY2xpZW50WTtcclxuICAgICAgICAvLyBUb3VjaFxyXG4gICAgICAgIGlmIChlLnRhcmdldFRvdWNoZXMpIHtcclxuICAgICAgICAgICAgdmFyIHRvdWNoID0gZS50YXJnZXRUb3VjaGVzWzBdO1xyXG4gICAgICAgICAgICB4ID0gdG91Y2guY2xpZW50WDtcclxuICAgICAgICAgICAgeSA9IHRvdWNoLmNsaWVudFk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9tb2RlID0gJ3JvdGF0ZSc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzR2VzdHVyZShlLCAnc3RhcnQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChlLmJ1dHRvbiA9PT0gTU9VU0VfQlVUVE9OX0tFWV9NQVBbdGhpcy5yb3RhdGVNb3VzZUJ1dHRvbl0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vZGUgPSAncm90YXRlJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChlLmJ1dHRvbiA9PT0gTU9VU0VfQlVUVE9OX0tFWV9NQVBbdGhpcy5wYW5Nb3VzZUJ1dHRvbl0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vZGUgPSAncGFuJztcclxuXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIFZlbmRvcnMgbGlrZSBNb3ppbGxhIHByb3ZpZGUgYSBtb3VzZS1kcml2ZW4gcGFubmluZyBmZWF0dXJlXHJcbiAgICAgICAgICAgICAgICAgKiB0aGF0IGlzIGFjdGl2YXRlZCB3aGVuIHRoZSBtaWRkbGUgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQuXHJcbiAgICAgICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgICAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vdWlldmVudHMvI2V2ZW50LXR5cGUtbW91c2Vkb3duXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZG9tID0gdGhpcy5kb21FbGVtZW50O1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNobW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNoZW5kJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG5cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZXVwJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlb3V0JywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG5cclxuICAgICAgICAvLyBSZXNldCByb3RhdGUgdmVsb2NpdHlcclxuICAgICAgICB0aGlzLl9yb3RhdGVWZWxvY2l0eS5zZXQoMCwgMCk7XHJcbiAgICAgICAgdGhpcy5fcm90YXRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5hdXRvUm90YXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0Q291bnRpbmdTdGlsbCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fbW91c2VYID0geDtcclxuICAgICAgICB0aGlzLl9tb3VzZVkgPSB5O1xyXG4gICAgfSxcclxuXHJcbiAgICBfbW91c2VNb3ZlSGFuZGxlcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBbmltYXRpbmcoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHZhciB5ID0gZS5jbGllbnRZO1xyXG5cclxuICAgICAgICB2YXIgaGF2ZUdlc3R1cmU7XHJcbiAgICAgICAgLy8gVG91Y2hcclxuICAgICAgICBpZiAoZS50YXJnZXRUb3VjaGVzKSB7XHJcbiAgICAgICAgICAgIHZhciB0b3VjaCA9IGUudGFyZ2V0VG91Y2hlc1swXTtcclxuICAgICAgICAgICAgeCA9IHRvdWNoLmNsaWVudFg7XHJcbiAgICAgICAgICAgIHkgPSB0b3VjaC5jbGllbnRZO1xyXG5cclxuICAgICAgICAgICAgaGF2ZUdlc3R1cmUgPSB0aGlzLl9wcm9jZXNzR2VzdHVyZShlLCAnY2hhbmdlJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcGFuU2Vuc2l0aXZpdHkgPSBjb252ZXJ0VG9BcnJheSh0aGlzLnBhblNlbnNpdGl2aXR5KTtcclxuICAgICAgICB2YXIgcm90YXRlU2Vuc2l0aXZpdHkgPSBjb252ZXJ0VG9BcnJheSh0aGlzLnJvdGF0ZVNlbnNpdGl2aXR5KTtcclxuXHJcbiAgICAgICAgaWYgKCFoYXZlR2VzdHVyZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fbW9kZSA9PT0gJ3JvdGF0ZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZVZlbG9jaXR5LnkgKz0gKHggLSB0aGlzLl9tb3VzZVgpIC8gdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoICogMiAqIHJvdGF0ZVNlbnNpdGl2aXR5WzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlVmVsb2NpdHkueCArPSAoeSAtIHRoaXMuX21vdXNlWSkgLyB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0ICogMiAqIHJvdGF0ZVNlbnNpdGl2aXR5WzFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX21vZGUgPT09ICdwYW4nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wYW5WZWxvY2l0eS54ICs9ICh4IC0gdGhpcy5fbW91c2VYKSAvIHRoaXMuZG9tRWxlbWVudC5jbGllbnRXaWR0aCAqIHBhblNlbnNpdGl2aXR5WzBdICogNDAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcGFuVmVsb2NpdHkueSArPSAoLXkgKyB0aGlzLl9tb3VzZVkpIC8gdGhpcy5kb21FbGVtZW50LmNsaWVudEhlaWdodCAqIHBhblNlbnNpdGl2aXR5WzFdICogNDAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9tb3VzZVggPSB4O1xyXG4gICAgICAgIHRoaXMuX21vdXNlWSA9IHk7XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQgJiYgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfbW91c2VXaGVlbEhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzQW5pbWF0aW5nKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGVsdGEgPSBlLmRlbHRhWTtcclxuICAgICAgICBpZiAoZGVsdGEgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl96b29tSGFuZGxlcihlLCBkZWx0YSA+IDAgPyAxIDogLTEpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGluY2hIYW5kbGVyOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0FuaW1hdGluZygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fem9vbUhhbmRsZXIoZSwgZS5waW5jaFNjYWxlID4gMSA/IC0wLjQgOiAwLjQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfem9vbUhhbmRsZXI6IGZ1bmN0aW9uIChlLCBkZWx0YSkge1xyXG5cclxuICAgICAgICB2YXIgc3BlZWQ7XHJcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0IGluc3RhbmNlb2YgUGVyc3BlY3RpdmVDYW1lcmEpIHtcclxuICAgICAgICAgICAgc3BlZWQgPSBNYXRoLm1heChNYXRoLm1heChNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlIC0gdGhpcy5taW5EaXN0YW5jZSxcclxuICAgICAgICAgICAgICAgIHRoaXMubWF4RGlzdGFuY2UgLSB0aGlzLl9kaXN0YW5jZVxyXG4gICAgICAgICAgICApKSAvIDIwLCAwLjUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc3BlZWQgPSBNYXRoLm1heChNYXRoLm1heChNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgIHRoaXMuX29ydGhvU2l6ZSAtIHRoaXMubWluT3J0aG9ncmFwaGljU2l6ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMubWF4T3J0aG9ncmFwaGljU2l6ZSAtIHRoaXMuX29ydGhvU2l6ZVxyXG4gICAgICAgICAgICApKSAvIDIwLCAwLjUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fem9vbVNwZWVkID0gKGRlbHRhID4gMCA/IC0xIDogMSkgKiBzcGVlZCAqIHRoaXMuem9vbVNlbnNpdGl2aXR5O1xyXG5cclxuICAgICAgICB0aGlzLl9yb3RhdGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hdXRvUm90YXRlICYmIHRoaXMuX21vZGUgPT09ICdyb3RhdGUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0Q291bnRpbmdTdGlsbCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCAmJiBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9tb3VzZVVwSGFuZGxlcjogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIGRvbSA9IHRoaXMuZG9tRWxlbWVudDtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICd0b3VjaG1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICd0b3VjaGVuZCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZXVwJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlb3V0JywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9wcm9jZXNzR2VzdHVyZShldmVudCwgJ2VuZCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfYWRkQW5pbWF0b3I6IGZ1bmN0aW9uIChhbmltYXRvcikge1xyXG4gICAgICAgIHZhciBhbmltYXRvcnMgPSB0aGlzLl9hbmltYXRvcnM7XHJcbiAgICAgICAgYW5pbWF0b3JzLnB1c2goYW5pbWF0b3IpO1xyXG4gICAgICAgIGFuaW1hdG9yLmRvbmUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgaWR4ID0gYW5pbWF0b3JzLmluZGV4T2YoYW5pbWF0b3IpO1xyXG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIGFuaW1hdG9ycy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhbmltYXRvcjtcclxuICAgIH0sXHJcblxyXG5cclxuICAgIF9wcm9jZXNzR2VzdHVyZTogZnVuY3Rpb24gKGV2ZW50LCBzdGFnZSkge1xyXG4gICAgICAgIHZhciBnZXN0dXJlTWdyID0gdGhpcy5fZ2VzdHVyZU1ncjtcclxuXHJcbiAgICAgICAgc3RhZ2UgPT09ICdzdGFydCcgJiYgZ2VzdHVyZU1nci5jbGVhcigpO1xyXG5cclxuICAgICAgICB2YXIgZ2VzdHVyZUluZm8gPSBnZXN0dXJlTWdyLnJlY29nbml6ZShcclxuICAgICAgICAgICAgZXZlbnQsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHN0YWdlID09PSAnZW5kJyAmJiBnZXN0dXJlTWdyLmNsZWFyKCk7XHJcblxyXG4gICAgICAgIC8vIERvIG5vdCBkbyBhbnkgcHJldmVudERlZmF1bHQgaGVyZS4gVXBwZXIgYXBwbGljYXRpb24gZG8gdGhhdCBpZiBuZWNlc3NhcnkuXHJcbiAgICAgICAgaWYgKGdlc3R1cmVJbmZvKSB7XHJcbiAgICAgICAgICAgIHZhciB0eXBlID0gZ2VzdHVyZUluZm8udHlwZTtcclxuICAgICAgICAgICAgZXZlbnQuZ2VzdHVyZUV2ZW50ID0gdHlwZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3BpbmNoSGFuZGxlcihnZXN0dXJlSW5mby5ldmVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZ2VzdHVyZUluZm87XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIElmIGF1dG8gcm90YXRlIHRoZSB0YXJnZXRcclxuICogQHR5cGUge2Jvb2xlYW59XHJcbiAqIEBkZWZhdWx0IGZhbHNlXHJcbiAqL1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoT3JiaXRDb250cm9sLnByb3RvdHlwZSwgJ2F1dG9Sb3RhdGUnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b1JvdGF0ZTtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcclxuICAgICAgICB0aGlzLl9hdXRvUm90YXRlID0gdmFsO1xyXG4gICAgICAgIHRoaXMuX3JvdGF0aW5nID0gdmFsO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShPcmJpdENvbnRyb2wucHJvdG90eXBlLCAndGFyZ2V0Jywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhcmdldDtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcclxuICAgICAgICBpZiAodmFsICYmIHZhbC50YXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRDZW50ZXIodmFsLnRhcmdldC50b0FycmF5KCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl90YXJnZXQgPSB2YWw7XHJcbiAgICAgICAgdGhpcy5kZWNvbXBvc2VUcmFuc2Zvcm0oKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgT3JiaXRDb250cm9sO1xyXG4iLCIvKipcclxuICogU3RhdGljR2VvbWV0cnkgY2FuIG5vdCBiZSBjaGFuZ2VkIG9uY2UgdGhleSd2ZSBiZWVuIHNldHVwXHJcbiAqL1xyXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi9HZW9tZXRyeSc7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5TdGF0aWNHZW9tZXRyeVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqL1xyXG52YXIgU3RhdGljR2VvbWV0cnkgPSBHZW9tZXRyeS5leHRlbmQoe1xyXG4gICAgZHluYW1pYzogZmFsc2VcclxufSk7XHJcbmV4cG9ydCBkZWZhdWx0IFN0YXRpY0dlb21ldHJ5O1xyXG4iLCIvLyBUT0RPIHRlc3RcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XHJcbmltcG9ydCBOb2RlIGZyb20gJy4uL05vZGUnO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5pbXBvcnQgbWF0NCBmcm9tICcuLi9nbG1hdHJpeC9tYXQ0JztcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkudXRpbC5tZXNoXHJcbiAqL1xyXG52YXIgbWVzaFV0aWwgPSB7XHJcbiAgICAvKipcclxuICAgICAqIE1lcmdlIG11bHRpcGxlIG1lc2hlcyB0byBvbmUuXHJcbiAgICAgKiBOb3RlIHRoYXQgdGhlc2UgbWVzaGVzIG11c3QgaGF2ZSB0aGUgc2FtZSBtYXRlcmlhbFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPGNsYXkuTWVzaD59IG1lc2hlc1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBhcHBseVdvcmxkVHJhbnNmb3JtXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS51dGlsLm1lc2hcclxuICAgICAqL1xyXG4gICAgbWVyZ2U6IGZ1bmN0aW9uIChtZXNoZXMsIGFwcGx5V29ybGRUcmFuc2Zvcm0pIHtcclxuXHJcbiAgICAgICAgaWYgKCEgbWVzaGVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGVtcGxhdGVNZXNoID0gbWVzaGVzWzBdO1xyXG4gICAgICAgIHZhciB0ZW1wbGF0ZUdlbyA9IHRlbXBsYXRlTWVzaC5nZW9tZXRyeTtcclxuICAgICAgICB2YXIgbWF0ZXJpYWwgPSB0ZW1wbGF0ZU1lc2gubWF0ZXJpYWw7XHJcblxyXG4gICAgICAgIHZhciBnZW9tZXRyeSA9IG5ldyBHZW9tZXRyeSh7XHJcbiAgICAgICAgICAgIGR5bmFtaWM6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZ2VvbWV0cnkuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuXHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWVzID0gdGVtcGxhdGVHZW8uZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVOYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVzW2ldO1xyXG4gICAgICAgICAgICB2YXIgYXR0ciA9IHRlbXBsYXRlR2VvLmF0dHJpYnV0ZXNbbmFtZV07XHJcbiAgICAgICAgICAgIC8vIEV4dGVuZCBjdXN0b20gYXR0cmlidXRlc1xyXG4gICAgICAgICAgICBpZiAoIWdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV0gPSBhdHRyLmNsb25lKGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGludmVyc2VUcmFuc3Bvc2VNYXRyaXggPSBtYXQ0LmNyZWF0ZSgpO1xyXG4gICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGFycmF5IGRhdGEgYW5kIG1lcmdlIGJvdW5kaW5nIGJveFxyXG4gICAgICAgIHZhciBuVmVydGV4ID0gMDtcclxuICAgICAgICB2YXIgbkZhY2UgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbWVzaGVzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50R2VvID0gbWVzaGVzW2tdLmdlb21ldHJ5O1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudEdlby5ib3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudEdlby5ib3VuZGluZ0JveC5hcHBseVRyYW5zZm9ybShhcHBseVdvcmxkVHJhbnNmb3JtID8gbWVzaGVzW2tdLndvcmxkVHJhbnNmb3JtIDogbWVzaGVzW2tdLmxvY2FsVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LmJvdW5kaW5nQm94LnVuaW9uKGN1cnJlbnRHZW8uYm91bmRpbmdCb3gpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5WZXJ0ZXggKz0gY3VycmVudEdlby52ZXJ0ZXhDb3VudDtcclxuICAgICAgICAgICAgbkZhY2UgKz0gY3VycmVudEdlby50cmlhbmdsZUNvdW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGF0dHJpYnV0ZU5hbWVzLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZXNbbl07XHJcbiAgICAgICAgICAgIHZhciBhdHRyaWIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzW25hbWVdO1xyXG4gICAgICAgICAgICBhdHRyaWIuaW5pdChuVmVydGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5WZXJ0ZXggPj0gMHhmZmZmKSB7XHJcbiAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgVWludDMyQXJyYXkobkZhY2UgKiAzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkobkZhY2UgKiAzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2ZXJ0ZXhPZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciBpbmRpY2VzT2Zmc2V0ID0gMDtcclxuICAgICAgICB2YXIgdXNlSW5kaWNlcyA9IHRlbXBsYXRlR2VvLmlzVXNlSW5kaWNlcygpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBtbSA9IDA7IG1tIDwgbWVzaGVzLmxlbmd0aDsgbW0rKykge1xyXG4gICAgICAgICAgICB2YXIgbWVzaCA9IG1lc2hlc1ttbV07XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50R2VvID0gbWVzaC5nZW9tZXRyeTtcclxuXHJcbiAgICAgICAgICAgIHZhciBuVmVydGV4ID0gY3VycmVudEdlby52ZXJ0ZXhDb3VudDtcclxuXHJcbiAgICAgICAgICAgIHZhciBtYXRyaXggPSBhcHBseVdvcmxkVHJhbnNmb3JtID8gbWVzaC53b3JsZFRyYW5zZm9ybS5hcnJheSA6IG1lc2gubG9jYWxUcmFuc2Zvcm0uYXJyYXk7XHJcbiAgICAgICAgICAgIG1hdDQuaW52ZXJ0KGludmVyc2VUcmFuc3Bvc2VNYXRyaXgsIG1hdHJpeCk7XHJcbiAgICAgICAgICAgIG1hdDQudHJhbnNwb3NlKGludmVyc2VUcmFuc3Bvc2VNYXRyaXgsIGludmVyc2VUcmFuc3Bvc2VNYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgbm4gPSAwOyBubiA8IGF0dHJpYnV0ZU5hbWVzLmxlbmd0aDsgbm4rKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lc1tubl07XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudEF0dHIgPSBjdXJyZW50R2VvLmF0dHJpYnV0ZXNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0QXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHRoZSB1bnVzZWQgYXR0cmlidXRlcztcclxuICAgICAgICAgICAgICAgIGlmICghY3VycmVudEF0dHIudmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgbGVuID0gY3VycmVudEF0dHIudmFsdWUubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNpemUgPSBjdXJyZW50QXR0ci5zaXplO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IHZlcnRleE9mZnNldCAqIHNpemU7XHJcbiAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBsZW4gLyBzaXplO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldEF0dHIudmFsdWVbb2Zmc2V0ICsgaV0gPSBjdXJyZW50QXR0ci52YWx1ZVtpXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIFRyYW5zZm9ybSBwb3NpdGlvbiwgbm9ybWFsIGFuZCB0YW5nZW50XHJcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3Bvc2l0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuZm9yRWFjaCh0YXJnZXRBdHRyLnZhbHVlLCBzaXplLCBvZmZzZXQsIGNvdW50LCB2ZWMzLnRyYW5zZm9ybU1hdDQsIG1hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09PSAnbm9ybWFsJyB8fCBuYW1lID09PSAndGFuZ2VudCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZWMzLmZvckVhY2godGFyZ2V0QXR0ci52YWx1ZSwgc2l6ZSwgb2Zmc2V0LCBjb3VudCwgdmVjMy50cmFuc2Zvcm1NYXQ0LCBpbnZlcnNlVHJhbnNwb3NlTWF0cml4KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHVzZUluZGljZXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsZW4gPSBjdXJyZW50R2VvLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXNbaSArIGluZGljZXNPZmZzZXRdID0gY3VycmVudEdlby5pbmRpY2VzW2ldICsgdmVydGV4T2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc09mZnNldCArPSBsZW47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlcnRleE9mZnNldCArPSBuVmVydGV4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxyXG4gICAgICAgICAgICBnZW9tZXRyeTogZ2VvbWV0cnlcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGxpdCBtZXNoIGludG8gc3ViIG1lc2hlcywgZWFjaCBtZXNoIHdpbGwgaGF2ZSBtYXhKb2ludE51bWJlciBqb2ludHMuXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWVzaH0gbWVzaFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heEpvaW50TnVtYmVyXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGluUGxhY2VcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cclxuICAgICAqXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS51dGlsLm1lc2hcclxuICAgICAqL1xyXG5cclxuICAgIC8vIEZJWE1FLCBIYXZlIGlzc3VlcyBvbiBzb21lIG1vZGVsc1xyXG4gICAgc3BsaXRCeUpvaW50czogZnVuY3Rpb24gKG1lc2gsIG1heEpvaW50TnVtYmVyLCBpblBsYWNlKSB7XHJcbiAgICAgICAgdmFyIGdlb21ldHJ5ID0gbWVzaC5nZW9tZXRyeTtcclxuICAgICAgICB2YXIgc2tlbGV0b24gPSBtZXNoLnNrZWxldG9uO1xyXG4gICAgICAgIHZhciBtYXRlcmlhbCA9IG1lc2gubWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIGpvaW50cyA9IG1lc2guam9pbnRzO1xyXG4gICAgICAgIGlmICghZ2VvbWV0cnkgfHwgIXNrZWxldG9uIHx8ICFqb2ludHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGpvaW50cy5sZW5ndGggPCBtYXhKb2ludE51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gbWVzaDtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB2YXIgaW5kaWNlcyA9IGdlb21ldHJ5LmluZGljZXM7XHJcblxyXG4gICAgICAgIHZhciBmYWNlTGVuID0gZ2VvbWV0cnkudHJpYW5nbGVDb3VudDtcclxuICAgICAgICB2YXIgcmVzdCA9IGZhY2VMZW47XHJcbiAgICAgICAgdmFyIGlzRmFjZUFkZGVkID0gW107XHJcbiAgICAgICAgdmFyIGpvaW50VmFsdWVzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5qb2ludC52YWx1ZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZhY2VMZW47IGkrKykge1xyXG4gICAgICAgICAgICBpc0ZhY2VBZGRlZFtpXSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYWRkZWRKb2ludElkeFBlckZhY2UgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIGJ1Y2tldHMgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIGdldEpvaW50QnlJbmRleCA9IGZ1bmN0aW9uIChpZHgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGpvaW50c1tpZHhdO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgd2hpbGUgKHJlc3QgPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBidWNrZXRUcmlhbmdsZXMgPSBbXTtcclxuICAgICAgICAgICAgdmFyIGJ1Y2tldEpvaW50UmV2ZXJzZU1hcCA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgYnVja2V0Sm9pbnRzID0gW107XHJcbiAgICAgICAgICAgIHZhciBzdWJKb2ludE51bWJlciA9IDA7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBidWNrZXRKb2ludFJldmVyc2VNYXBbaV0gPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGZhY2VMZW47IGYrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRmFjZUFkZGVkW2ZdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgY2FuQWRkVG9CdWNrZXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFkZGVkTnVtYmVyID0gMDtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpZHggPSBpbmRpY2VzW2YgKiAzICsgaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqb2ludElkeCA9IGpvaW50VmFsdWVzW2lkeCAqIDQgKyBqXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqb2ludElkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVja2V0Sm9pbnRSZXZlcnNlTWFwW2pvaW50SWR4XSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViSm9pbnROdW1iZXIgPCBtYXhKb2ludE51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRKb2ludFJldmVyc2VNYXBbam9pbnRJZHhdID0gc3ViSm9pbnROdW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50c1tzdWJKb2ludE51bWJlcisrXSA9IGpvaW50SWR4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZEpvaW50SWR4UGVyRmFjZVthZGRlZE51bWJlcisrXSA9IGpvaW50SWR4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuQWRkVG9CdWNrZXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNhbkFkZFRvQnVja2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUmV2ZXJzZSBvcGVyYXRpb25cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFkZGVkTnVtYmVyOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0Sm9pbnRSZXZlcnNlTWFwW2FkZGVkSm9pbnRJZHhQZXJGYWNlW2ldXSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRKb2ludHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YkpvaW50TnVtYmVyLS07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0VHJpYW5nbGVzLnB1c2goaW5kaWNlcy5zdWJhcnJheShmICogMywgKGYgKyAxKSAqIDMpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaXNGYWNlQWRkZWRbZl0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3QtLTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBidWNrZXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdHJpYW5nbGVzOiBidWNrZXRUcmlhbmdsZXMsXHJcbiAgICAgICAgICAgICAgICBqb2ludHM6IGJ1Y2tldEpvaW50cy5tYXAoZ2V0Sm9pbnRCeUluZGV4KSxcclxuICAgICAgICAgICAgICAgIGpvaW50UmV2ZXJzZU1hcDogYnVja2V0Sm9pbnRSZXZlcnNlTWFwXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJvb3QgPSBuZXcgTm9kZSh7XHJcbiAgICAgICAgICAgIG5hbWU6IG1lc2gubmFtZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHZhciBhdHRyaWJOYW1lcyA9IGdlb21ldHJ5LmdldEVuYWJsZWRBdHRyaWJ1dGVzKCk7XHJcblxyXG4gICAgICAgIGF0dHJpYk5hbWVzLnNwbGljZShhdHRyaWJOYW1lcy5pbmRleE9mKCdqb2ludCcpLCAxKTtcclxuICAgICAgICAvLyBNYXAgZnJvbSBvbGQgdmVydGV4IGluZGV4IHRvIG5ldyB2ZXJ0ZXggaW5kZXhcclxuICAgICAgICB2YXIgbmV3SW5kaWNlcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDwgYnVja2V0cy5sZW5ndGg7IGIrKykge1xyXG4gICAgICAgICAgICB2YXIgYnVja2V0ID0gYnVja2V0c1tiXTtcclxuICAgICAgICAgICAgdmFyIGpvaW50UmV2ZXJzZU1hcCA9IGJ1Y2tldC5qb2ludFJldmVyc2VNYXA7XHJcbiAgICAgICAgICAgIHZhciBzdWJKb2ludE51bWJlciA9IGJ1Y2tldC5qb2ludHMubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgdmFyIHN1YkdlbyA9IG5ldyBHZW9tZXRyeSgpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHN1Yk1lc2ggPSBuZXcgTWVzaCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBbbWVzaC5uYW1lLCBpXS5qb2luKCctJyksXHJcbiAgICAgICAgICAgICAgICAvLyBET04nVCBjbG9uZSBtYXRlcmlhbC5cclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBtYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBzdWJHZW8sXHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbjogc2tlbGV0b24sXHJcbiAgICAgICAgICAgICAgICBqb2ludHM6IGJ1Y2tldC5qb2ludHMuc2xpY2UoKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdmFyIG5WZXJ0ZXggPSAwO1xyXG4gICAgICAgICAgICB2YXIgblZlcnRleDIgPSBnZW9tZXRyeS52ZXJ0ZXhDb3VudDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVmVydGV4MjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdJbmRpY2VzW2ldID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQ291bnQgc3ViIGdlbyBudW1iZXJcclxuICAgICAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBidWNrZXQudHJpYW5nbGVzLmxlbmd0aDsgZisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmFjZSA9IGJ1Y2tldC50cmlhbmdsZXNbZl07XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpZHggPSBmYWNlW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdJbmRpY2VzW2lkeF0gPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0luZGljZXNbaWR4XSA9IG5WZXJ0ZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5WZXJ0ZXgrKztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBhdHRyaWJOYW1lcy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYk5hbWUgPSBhdHRyaWJOYW1lc1thXTtcclxuICAgICAgICAgICAgICAgIHZhciBzdWJBdHRyaWIgPSBzdWJHZW8uYXR0cmlidXRlc1thdHRyaWJOYW1lXTtcclxuICAgICAgICAgICAgICAgIHN1YkF0dHJpYi5pbml0KG5WZXJ0ZXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN1Ykdlby5hdHRyaWJ1dGVzLmpvaW50LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShuVmVydGV4ICogNCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoblZlcnRleCA+IDB4ZmZmZikge1xyXG4gICAgICAgICAgICAgICAgc3ViR2VvLmluZGljZXMgPSBuZXcgVWludDMyQXJyYXkoYnVja2V0LnRyaWFuZ2xlcy5sZW5ndGggKiAzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN1Ykdlby5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGJ1Y2tldC50cmlhbmdsZXMubGVuZ3RoICogMyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBpbmRpY2VzT2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgblZlcnRleCA9IDA7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblZlcnRleDI7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbmV3SW5kaWNlc1tpXSA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGJ1Y2tldC50cmlhbmdsZXMubGVuZ3RoOyBmKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB0cmlhbmdsZSA9IGJ1Y2tldC50cmlhbmdsZXNbZl07XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgaWR4ID0gdHJpYW5nbGVbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdJbmRpY2VzW2lkeF0gPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0luZGljZXNbaWR4XSA9IG5WZXJ0ZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmliTmFtZXMubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJOYW1lID0gYXR0cmliTmFtZXNbYV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cmliID0gZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJOYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJBdHRyaWIgPSBzdWJHZW8uYXR0cmlidXRlc1thdHRyaWJOYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gYXR0cmliLnNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzaXplOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJBdHRyaWIudmFsdWVbblZlcnRleCAqIHNpemUgKyBqXSA9IGF0dHJpYi52YWx1ZVtpZHggKiBzaXplICsgal07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqb2ludElkeCA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMuam9pbnQudmFsdWVbaWR4ICogNCArIGpdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IG5WZXJ0ZXggKiA0ICsgajtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqb2ludElkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViR2VvLmF0dHJpYnV0ZXMuam9pbnQudmFsdWVbb2Zmc2V0XSA9IGpvaW50UmV2ZXJzZU1hcFtqb2ludElkeF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJHZW8uYXR0cmlidXRlcy5qb2ludC52YWx1ZVtvZmZzZXRdID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgblZlcnRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzdWJHZW8uaW5kaWNlc1tpbmRpY2VzT2Zmc2V0KytdID0gbmV3SW5kaWNlc1tpZHhdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN1Ykdlby51cGRhdGVCb3VuZGluZ0JveCgpO1xyXG5cclxuICAgICAgICAgICAgcm9vdC5hZGQoc3ViTWVzaCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IG1lc2guY2hpbGRyZW4oKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJvb3QuYWRkKGNoaWxkcmVuW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcm9vdC5wb3NpdGlvbi5jb3B5KG1lc2gucG9zaXRpb24pO1xyXG4gICAgICAgIHJvb3Qucm90YXRpb24uY29weShtZXNoLnJvdGF0aW9uKTtcclxuICAgICAgICByb290LnNjYWxlLmNvcHkobWVzaC5zY2FsZSk7XHJcblxyXG4gICAgICAgIGlmIChpblBsYWNlKSB7XHJcbiAgICAgICAgICAgIGlmIChtZXNoLmdldFBhcmVudCgpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gbWVzaC5nZXRQYXJlbnQoKTtcclxuICAgICAgICAgICAgICAgIHBhcmVudC5yZW1vdmUobWVzaCk7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnQuYWRkKHJvb3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByb290O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbWVzaFV0aWw7XHJcbiIsImltcG9ydCB1dGlsIGZyb20gJy4uL2NvcmUvdXRpbCc7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuXHJcbnZhciBNRVRBID0ge1xyXG4gICAgdmVyc2lvbjogMS4wLFxyXG4gICAgdHlwZTogJ0dlb21ldHJ5JyxcclxuICAgIGdlbmVyYXRvcjogJ3V0aWwudHJhbnNmZXJhYmxlLnRvT2JqZWN0J1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBhbGlhcyBjbGF5LnV0aWwudHJhbnNmZXJhYmxlXHJcbiAqL1xyXG52YXIgdHJhbnNmZXJhYmxlVXRpbCA9IHtcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBnZW9tZXRyeSB0byBhIG9iamVjdCBjb250YWluaW5nIHRyYW5zZmVyYWJsZSBkYXRhXHJcbiAgICAgKiBAcGFyYW0ge0dlb21ldHJ5fSBnZW9tZXRyeSBnZW9tZXRyeVxyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBzaGFsbG93IHdoZXRoZXIgc2hhbGxvdyBjb3B5XHJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSB7IGRhdGEgOiBkYXRhLCBidWZmZXJzIDogYnVmZmVycyB9LCBidWZmZXJzIGlzIHRoZSB0cmFuc2ZlcmFibGUgbGlzdFxyXG4gICAgICovXHJcbiAgICB0b09iamVjdCA6IGZ1bmN0aW9uIChnZW9tZXRyeSwgc2hhbGxvdykge1xyXG4gICAgICAgIGlmICghZ2VvbWV0cnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBkYXRhID0ge1xyXG4gICAgICAgICAgICBtZXRhZGF0YSA6IHV0aWwuZXh0ZW5kKHt9LCBNRVRBKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy90cmFuc2ZlcmFibGUgYnVmZmVyc1xyXG4gICAgICAgIHZhciBidWZmZXJzID0gW107XHJcblxyXG4gICAgICAgIC8vZHluYW1pY1xyXG4gICAgICAgIGRhdGEuZHluYW1pYyA9IGdlb21ldHJ5LmR5bmFtaWM7XHJcblxyXG4gICAgICAgIC8vYm91bmRpbmcgYm94XHJcbiAgICAgICAgaWYgKGdlb21ldHJ5LmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIGRhdGEuYm91bmRpbmdCb3ggPSB7XHJcbiAgICAgICAgICAgICAgICBtaW4gOiBnZW9tZXRyeS5ib3VuZGluZ0JveC5taW4udG9BcnJheSgpLFxyXG4gICAgICAgICAgICAgICAgbWF4IDogZ2VvbWV0cnkuYm91bmRpbmdCb3gubWF4LnRvQXJyYXkoKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9pbmRpY2VzXHJcbiAgICAgICAgaWYgKGdlb21ldHJ5LmluZGljZXMgJiYgZ2VvbWV0cnkuaW5kaWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGRhdGEuaW5kaWNlcyA9IGNvcHlJZk5lY2Vzc2FyeShnZW9tZXRyeS5pbmRpY2VzLCBzaGFsbG93KTtcclxuICAgICAgICAgICAgYnVmZmVycy5wdXNoKGRhdGEuaW5kaWNlcy5idWZmZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9hdHRyaWJ1dGVzXHJcbiAgICAgICAgZGF0YS5hdHRyaWJ1dGVzID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBnZW9tZXRyeS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeS5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KHApKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbcF07XHJcbiAgICAgICAgICAgICAgICAvL2lnbm9yZSBlbXB0eSBhdHRyaWJ1dGVzXHJcbiAgICAgICAgICAgICAgICBpZiAoYXR0ciAmJiBhdHRyLnZhbHVlICYmIGF0dHIudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dHIgPSBkYXRhLmF0dHJpYnV0ZXNbcF0gPSBjb3B5QXR0cmlidXRlKGF0dHIsIHNoYWxsb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChhdHRyLnZhbHVlLmJ1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRhdGEgOiBkYXRhLFxyXG4gICAgICAgICAgICBidWZmZXJzIDogYnVmZmVyc1xyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVwcm9kdWNlIGEgZ2VvbWV0cnkgZnJvbSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHRvT2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9iamVjdCBnZW5lcmF0ZWQgYnkgdG9PYmplY3RcclxuICAgICAqIEByZXR1cm5zIHtHZW9tZXRyeX0gZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgdG9HZW9tZXRyeSA6IGZ1bmN0aW9uIChvYmplY3QpIHtcclxuICAgICAgICBpZiAoIW9iamVjdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdC5kYXRhICYmIG9iamVjdC5idWZmZXJzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2ZlcmFibGVVdGlsLnRvR2VvbWV0cnkob2JqZWN0LmRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW9iamVjdC5tZXRhZGF0YSB8fCBvYmplY3QubWV0YWRhdGEuZ2VuZXJhdG9yICE9PSBNRVRBLmdlbmVyYXRvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1t1dGlsLnRyYW5zZmVyYWJsZS50b0dlb21ldHJ5XSB0aGUgb2JqZWN0IGlzIG5vdCBnZW5lcmF0ZWQgYnkgdXRpbC50cmFuc2ZlcmFibGUuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2Jhc2ljIG9wdGlvbnNcclxuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgZHluYW1pYyA6IG9iamVjdC5keW5hbWljLFxyXG4gICAgICAgICAgICBpbmRpY2VzIDogb2JqZWN0LmluZGljZXNcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAob2JqZWN0LmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIHZhciBtaW4gPSBuZXcgVmVjdG9yMygpLnNldEFycmF5KG9iamVjdC5ib3VuZGluZ0JveC5taW4pO1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gbmV3IFZlY3RvcjMoKS5zZXRBcnJheShvYmplY3QuYm91bmRpbmdCb3gubWF4KTtcclxuICAgICAgICAgICAgb3B0aW9ucy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveChtaW4sIG1heCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkob3B0aW9ucyk7XHJcblxyXG4gICAgICAgIC8vYXR0cmlidXRlc1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gb2JqZWN0LmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgaWYgKG9iamVjdC5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KHApKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IG9iamVjdC5hdHRyaWJ1dGVzW3BdO1xyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlc1twXSA9IG5ldyBHZW9tZXRyeS5BdHRyaWJ1dGUoYXR0ci5uYW1lLCBhdHRyLnR5cGUsIGF0dHIuc2l6ZSwgYXR0ci5zZW1hbnRpYyk7XHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW3BdLnZhbHVlID0gYXR0ci52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGdlb21ldHJ5O1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gY29weUF0dHJpYnV0ZShhdHRyLCBzaGFsbG93KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5hbWUgOiBhdHRyLm5hbWUsXHJcbiAgICAgICAgdHlwZSA6IGF0dHIudHlwZSxcclxuICAgICAgICBzaXplIDogYXR0ci5zaXplLFxyXG4gICAgICAgIHNlbWFudGljIDogYXR0ci5zZW1hbnRpYyxcclxuICAgICAgICB2YWx1ZSA6IGNvcHlJZk5lY2Vzc2FyeShhdHRyLnZhbHVlLCBzaGFsbG93KVxyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29weUlmTmVjZXNzYXJ5KGFyciwgc2hhbGxvdykge1xyXG4gICAgaWYgKCFzaGFsbG93KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBhcnIuY29uc3RydWN0b3IoYXJyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGFycjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgdHJhbnNmZXJhYmxlVXRpbDtcclxuIiwiLyoqXHJcbiAqIEBuYW1lIGNsYXkudmVyc2lvblxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgJzEuMi4zJztcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkudnIuZGlzb3J0ZXIub3V0cHV0LnZlcnRleFxcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkOiBURVhDT09SRF8wO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOiBQT1NJVElPTjtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52b2lkIG1haW4oKVxcbntcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkO1xcbiBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24ueHksIDAuNSwgMS4wKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS52ci5kaXNvcnRlci5vdXRwdXQuZnJhZ21lbnRcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpXFxue1xcbiBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxufVxcbkBlbmRcIjtcclxuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZXZyL3dlYnZyLXBvbHlmaWxsL2Jsb2IvbWFzdGVyL3NyYy9jYXJkYm9hcmQtZGlzdG9ydGVyLmpzXHJcblxyXG4vLyBVc2Ugd2VidnIgbWF5IGhhdmUgc2NhbGUgcHJvYmxlbS5cclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZXZyL3dlYnZyLXBvbHlmaWxsL2lzc3Vlcy8xNDBcclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZXZyL3dlYnZyLXBvbHlmaWxsL3NlYXJjaD9xPVNDQUxFJnR5cGU9SXNzdWVzJnV0Zjg9JUUyJTlDJTkzXHJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGV2ci93ZWJ2ci1wb2x5ZmlsbC9pc3N1ZXMvMTQ3XHJcblxyXG5cclxuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcblxyXG5pbXBvcnQgb3V0cHV0RXNzbCBmcm9tICcuL291dHB1dC5nbHNsLmpzJztcclxuXHJcblNoYWRlci5pbXBvcnQob3V0cHV0RXNzbCk7XHJcblxyXG5mdW5jdGlvbiBsZXJwIChhLCBiLCB0KSB7XHJcbiAgICByZXR1cm4gYSAqICgxIC0gdCkgKyBiICogdDtcclxufVxyXG5cclxudmFyIENhcmRib2FyZERpc3RvcnRlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB7XHJcblxyXG4gICAgICAgIGNsZWFyQ29sb3I6IFswLCAwLCAwLCAxXSxcclxuXHJcbiAgICAgICAgX21lc2g6IG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgZ2VvbWV0cnk6IG5ldyBHZW9tZXRyeSh7XHJcbiAgICAgICAgICAgICAgICBkeW5hbWljOiB0cnVlXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBjdWxsaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgbWF0ZXJpYWw6IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgICAgICAvLyBGSVhNRSBXaHkgZGlzYWJsZSBkZXB0aE1hc2sgd2lsbCBiZSB3cm9uZ1xyXG4gICAgICAgICAgICAgICAgLy8gZGVwdGhNYXNrOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGRlcHRoVGVzdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIHZlcnRleDogU2hhZGVyLnNvdXJjZSgnY2xheS52ci5kaXNvcnRlci5vdXRwdXQudmVydGV4JyksXHJcbiAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkudnIuZGlzb3J0ZXIub3V0cHV0LmZyYWdtZW50JylcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgX2Zha2VDYW1lcmE6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpXHJcbiAgICB9O1xyXG59LCB7XHJcblxyXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNvdXJjZVRleHR1cmUpIHtcclxuICAgICAgICB2YXIgY2xlYXJDb2xvciA9IHRoaXMuY2xlYXJDb2xvcjtcclxuICAgICAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBnbC5jbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pO1xyXG4gICAgICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xyXG5cclxuICAgICAgICBnbC5kaXNhYmxlKGdsLkJMRU5EKTtcclxuXHJcbiAgICAgICAgdGhpcy5fbWVzaC5tYXRlcmlhbC5zZXQoJ3RleHR1cmUnLCBzb3VyY2VUZXh0dXJlKTtcclxuXHJcbiAgICAgICAgLy8gRnVsbCBzaXplP1xyXG4gICAgICAgIHJlbmRlcmVyLnNhdmVWaWV3cG9ydCgpO1xyXG4gICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KDAsIDAsIHJlbmRlcmVyLmdldFdpZHRoKCksIHJlbmRlcmVyLmdldEhlaWdodCgpKTtcclxuICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKFt0aGlzLl9tZXNoXSwgdGhpcy5fZmFrZUNhbWVyYSk7XHJcbiAgICAgICAgcmVuZGVyZXIucmVzdG9yZVZpZXdwb3J0KCk7XHJcbiAgICAgICAgLy8gdGhpcy5fbWVzaC5tYXRlcmlhbC5zaGFkZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgLy8gdGhpcy5fbWVzaC5tYXRlcmlhbC5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAvLyB0aGlzLl9tZXNoLnJlbmRlcihyZW5kZXJlci5nbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZUZyb21WUkRpc3BsYXk6IGZ1bmN0aW9uICh2ckRpc3BsYXkpIHtcclxuXHJcbiAgICAgICAgLy8gRklYTUVcclxuICAgICAgICBpZiAodnJEaXNwbGF5LmRldmljZUluZm9fKSB7XHJcbiAgICAgICAgICAgIC8vIEhhcmRjb2RlZCBtZXNoIHNpemVcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTWVzaCgyMCwgMjAsIHZyRGlzcGxheS5kZXZpY2VJbmZvXyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NhbnQgZ2V0IHZyRGlzcGxheS5kZXZpY2VJbmZvXywgc2VlbXMgY29kZSBjaGFuZ2VkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlTWVzaDogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIGRldmljZUluZm8pIHtcclxuXHJcbiAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IHRoaXMuX21lc2guZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgdGV4Y29vcmRBdHRyID0gdGhpcy5fbWVzaC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMDtcclxuICAgICAgICBwb3NpdGlvbkF0dHIuaW5pdCgyICogd2lkdGggKiBoZWlnaHQpO1xyXG4gICAgICAgIHRleGNvb3JkQXR0ci5pbml0KDIgKiB3aWR0aCAqIGhlaWdodCk7XHJcblxyXG4gICAgICAgIHZhciBsZW5zRnJ1c3R1bSA9IGRldmljZUluZm8uZ2V0TGVmdEV5ZVZpc2libGVUYW5BbmdsZXMoKTtcclxuICAgICAgICB2YXIgbm9MZW5zRnJ1c3R1bSA9IGRldmljZUluZm8uZ2V0TGVmdEV5ZU5vTGVuc1RhbkFuZ2xlcygpO1xyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IGRldmljZUluZm8uZ2V0TGVmdEV5ZVZpc2libGVTY3JlZW5SZWN0KG5vTGVuc0ZydXN0dW0pO1xyXG4gICAgICAgIHZhciB2aWR4ID0gMDtcclxuXHJcbiAgICAgICAgdmFyIHBvcyA9IFtdO1xyXG4gICAgICAgIHZhciB1diA9IFtdO1xyXG5cclxuICAgICAgICAvLyBWZXJ0aWNlc1xyXG4gICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgMjsgZSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaGVpZ2h0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd2lkdGg7IGkrKywgdmlkeCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHUgPSBpIC8gKHdpZHRoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHYgPSBqIC8gKGhlaWdodCAtIDEpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBHcmlkIHBvaW50cyByZWd1bGFybHkgc3BhY2VkIGluIFN0cmVvU2NyZWVuLCBhbmQgYmFycmVsIGRpc3RvcnRlZCBpblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBtZXNoLlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzID0gdTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHggPSBsZXJwKGxlbnNGcnVzdHVtWzBdLCBsZW5zRnJ1c3R1bVsyXSwgdSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHkgPSBsZXJwKGxlbnNGcnVzdHVtWzNdLCBsZW5zRnJ1c3R1bVsxXSwgdik7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBkZXZpY2VJbmZvLmRpc3RvcnRpb24uZGlzdG9ydEludmVyc2UoZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSB4ICogciAvIGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSB5ICogciAvIGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdSA9IChwIC0gbm9MZW5zRnJ1c3R1bVswXSkgLyAobm9MZW5zRnJ1c3R1bVsyXSAtIG5vTGVuc0ZydXN0dW1bMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAocSAtIG5vTGVuc0ZydXN0dW1bM10pIC8gKG5vTGVuc0ZydXN0dW1bMV0gLSBub0xlbnNGcnVzdHVtWzNdKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB1LHYgdG8gbWVzaCBzY3JlZW4gY29vcmRpbmF0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFzcGVjdCA9IGRldmljZUluZm8uZGV2aWNlLndpZHRoTWV0ZXJzIC8gZGV2aWNlSW5mby5kZXZpY2UuaGVpZ2h0TWV0ZXJzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIG9yaWdpbmFsIFVuaXR5IHBsdWdpbiBtdWx0aXBsaWVkIFUgYnkgdGhlIGFzcGVjdCByYXRpb1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFuZCBkaWRuJ3QgbXVsdGlwbHkgZWl0aGVyIHZhbHVlIGJ5IDIsIGJ1dCB0aGF0IHNlZW1zIHRvIGdldCBpdFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlYWxseSBjbG9zZSB0byBjb3JyZWN0IGxvb2tpbmcgZm9yIG1lLiBJIGhhdGUgdGhpcyBraW5kIG9mIFwiRG9uJ3RcclxuICAgICAgICAgICAgICAgICAgICAvLyBrbm93IHdoeSBpdCB3b3Jrc1wiIGNvZGUgdGhvdWdoLCBhbmQgd29sZCBsb3ZlIGEgbW9yZSBsb2dpY2FsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZXhwbGFuYXRpb24gb2Ygd2hhdCBuZWVkcyB0byBoYXBwZW4gaGVyZS5cclxuICAgICAgICAgICAgICAgICAgICB1ID0gKHZpZXdwb3J0LnggKyB1ICogdmlld3BvcnQud2lkdGggLSAwLjUpICogMi4wOyAvLyogYXNwZWN0O1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAodmlld3BvcnQueSArIHYgKiB2aWV3cG9ydC5oZWlnaHQgLSAwLjUpICogMi4wO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBwb3NbMF0gPSB1O1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc1sxXSA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zWzJdID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdXZbMF0gPSBzICogMC41ICsgZSAqIDAuNTtcclxuICAgICAgICAgICAgICAgICAgICB1dlsxXSA9IHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uQXR0ci5zZXQodmlkeCwgcG9zKTtcclxuICAgICAgICAgICAgICAgICAgICB0ZXhjb29yZEF0dHIuc2V0KHZpZHgsIHV2KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHcgPSBsZW5zRnJ1c3R1bVsyXSAtIGxlbnNGcnVzdHVtWzBdO1xyXG4gICAgICAgICAgICBsZW5zRnJ1c3R1bVswXSA9IC0odyArIGxlbnNGcnVzdHVtWzBdKTtcclxuICAgICAgICAgICAgbGVuc0ZydXN0dW1bMl0gPSB3IC0gbGVuc0ZydXN0dW1bMl07XHJcbiAgICAgICAgICAgIHcgPSBub0xlbnNGcnVzdHVtWzJdIC0gbm9MZW5zRnJ1c3R1bVswXTtcclxuICAgICAgICAgICAgbm9MZW5zRnJ1c3R1bVswXSA9IC0odyArIG5vTGVuc0ZydXN0dW1bMF0pO1xyXG4gICAgICAgICAgICBub0xlbnNGcnVzdHVtWzJdID0gdyAtIG5vTGVuc0ZydXN0dW1bMl07XHJcbiAgICAgICAgICAgIHZpZXdwb3J0LnggPSAxIC0gKHZpZXdwb3J0LnggKyB2aWV3cG9ydC53aWR0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJbmRpY2VzXHJcbiAgICAgICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoMiAqICh3aWR0aCAtIDEpICogKGhlaWdodCAtIDEpICogNik7XHJcbiAgICAgICAgdmFyIGhhbGZ3aWR0aCA9IHdpZHRoIC8gMjtcclxuICAgICAgICB2YXIgaGFsZmhlaWdodCA9IGhlaWdodCAvIDI7XHJcbiAgICAgICAgdmFyIHZpZHggPSAwO1xyXG4gICAgICAgIHZhciBpaWR4ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBlID0gMDsgZSA8IDI7IGUrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGhlaWdodDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdpZHRoOyBpKyssIHZpZHgrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwIHx8IGogPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEJ1aWxkIGEgcXVhZC4gIExvd2VyIHJpZ2h0IGFuZCB1cHBlciBsZWZ0IHF1YWRyYW50cyBoYXZlIHF1YWRzIHdpdGhcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgdHJpYW5nbGUgZGlhZ29uYWwgZmxpcHBlZCB0byBnZXQgdGhlIHZpZ25ldHRlIHRvIGludGVycG9sYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVjdGx5LlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoaSA8PSBoYWxmd2lkdGgpID09IChqIDw9IGhhbGZoZWlnaHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFF1YWQgZGlhZ29uYWwgbG93ZXIgbGVmdCB0byB1cHBlciByaWdodC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFF1YWQgZGlhZ29uYWwgdXBwZXIgbGVmdCB0byBsb3dlciByaWdodC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSB3aWR0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX21lc2guZ2VvbWV0cnkuaW5kaWNlcyA9IGluZGljZXM7XHJcblxyXG4gICAgICAgIHRoaXMuX21lc2guZ2VvbWV0cnkuZGlydHkoKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDYXJkYm9hcmREaXN0b3J0ZXI7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL05vZGUnO1xyXG5pbXBvcnQgQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4uL21hdGgvTWF0cml4NCc7XHJcblxyXG52YXIgdG1wUHJvamVjdGlvbk1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG52YXIgU3RlcmVvQ2FtZXJhID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuXHJcbiAgICAgICAgYXNwZWN0OiAwLjUsXHJcblxyXG4gICAgICAgIF9sZWZ0Q2FtZXJhOiBuZXcgQ2FtZXJhKCksXHJcblxyXG4gICAgICAgIF9yaWdodENhbWVyYTogbmV3IENhbWVyYSgpLFxyXG5cclxuICAgICAgICBfZXllTGVmdDogbmV3IE1hdHJpeDQoKSxcclxuICAgICAgICBfZXllUmlnaHQ6IG5ldyBNYXRyaXg0KCksXHJcblxyXG4gICAgICAgIF9mcmFtZURhdGE6IG51bGxcclxuICAgIH07XHJcbn0sIHtcclxuXHJcbiAgICB1cGRhdGVGcm9tQ2FtZXJhOiBmdW5jdGlvbiAoY2FtZXJhLCBmb2N1cywgem9vbSwgZXllU2VwKSB7XHJcbiAgICAgICAgaWYgKGNhbWVyYS50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignTm9kZSB0cmFuc2Zvcm0gaXMgbm90IHVwZGF0ZWQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvY3VzID0gZm9jdXMgPT0gbnVsbCA/IDEwIDogZm9jdXM7XHJcbiAgICAgICAgem9vbSA9IHpvb20gPT0gbnVsbCA/IDEgOiB6b29tO1xyXG4gICAgICAgIGV5ZVNlcCA9IGV5ZVNlcCA9PSBudWxsID8gMC4wNjQgOiBleWVTZXA7XHJcblxyXG4gICAgICAgIHZhciBmb3YgPSBjYW1lcmEuZm92O1xyXG4gICAgICAgIHZhciBhc3BlY3QgPSBjYW1lcmEuYXNwZWN0ICogdGhpcy5hc3BlY3Q7XHJcbiAgICAgICAgdmFyIG5lYXIgPSBjYW1lcmEubmVhcjtcclxuXHJcbiAgICAgICAgLy8gT2ZmLWF4aXMgc3RlcmVvc2NvcGljIGVmZmVjdCBiYXNlZCBvblxyXG4gICAgICAgIC8vIGh0dHA6Ly9wYXVsYm91cmtlLm5ldC9zdGVyZW9ncmFwaGljcy9zdGVyZW9yZW5kZXIvXHJcblxyXG4gICAgICAgIHRtcFByb2plY3Rpb25NYXRyaXguY29weShjYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgdmFyIGV5ZVNlcCA9IGV5ZVNlcCAvIDI7XHJcbiAgICAgICAgdmFyIGV5ZVNlcE9uUHJvamVjdGlvbiA9IGV5ZVNlcCAqIG5lYXIgLyBmb2N1cztcclxuICAgICAgICB2YXIgeW1heCA9IChuZWFyICogTWF0aC50YW4oTWF0aC5QSSAvIDE4MCAqIGZvdiAqIDAuNSApICkgLyB6b29tO1xyXG4gICAgICAgIHZhciB4bWluLCB4bWF4O1xyXG5cclxuICAgICAgICAvLyB0cmFuc2xhdGUgeE9mZnNldFxyXG4gICAgICAgIHRoaXMuX2V5ZUxlZnQuYXJyYXlbMTJdID0gLSBleWVTZXA7XHJcbiAgICAgICAgdGhpcy5fZXllUmlnaHQuYXJyYXlbMTJdID0gZXllU2VwO1xyXG5cclxuICAgICAgICAvLyBmb3IgbGVmdCBleWVcclxuICAgICAgICB4bWluID0gLSB5bWF4ICogYXNwZWN0ICsgZXllU2VwT25Qcm9qZWN0aW9uO1xyXG4gICAgICAgIHhtYXggPSB5bWF4ICogYXNwZWN0ICsgZXllU2VwT25Qcm9qZWN0aW9uO1xyXG5cclxuICAgICAgICB0bXBQcm9qZWN0aW9uTWF0cml4LmFycmF5WzBdID0gMiAqIG5lYXIgLyAoeG1heCAtIHhtaW4pO1xyXG4gICAgICAgIHRtcFByb2plY3Rpb25NYXRyaXguYXJyYXlbOF0gPSAoeG1heCArIHhtaW4gKSAvICh4bWF4IC0geG1pbik7XHJcblxyXG4gICAgICAgIHRoaXMuX2xlZnRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5jb3B5KHRtcFByb2plY3Rpb25NYXRyaXgpO1xyXG5cclxuICAgICAgICAvLyBmb3IgcmlnaHQgZXllXHJcbiAgICAgICAgeG1pbiA9IC0geW1heCAqIGFzcGVjdCAtIGV5ZVNlcE9uUHJvamVjdGlvbjtcclxuICAgICAgICB4bWF4ID0geW1heCAqIGFzcGVjdCAtIGV5ZVNlcE9uUHJvamVjdGlvbjtcclxuXHJcbiAgICAgICAgdG1wUHJvamVjdGlvbk1hdHJpeC5hcnJheVswXSA9IDIgKiBuZWFyIC8gKHhtYXggLSB4bWluKTtcclxuICAgICAgICB0bXBQcm9qZWN0aW9uTWF0cml4LmFycmF5WzhdID0gKHhtYXggKyB4bWluICkgLyAoeG1heCAtIHhtaW4pO1xyXG5cclxuICAgICAgICB0aGlzLl9yaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmNvcHkodG1wUHJvamVjdGlvbk1hdHJpeCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2xlZnRDYW1lcmEud29ybGRUcmFuc2Zvcm1cclxuICAgICAgICAgICAgLmNvcHkoY2FtZXJhLndvcmxkVHJhbnNmb3JtKVxyXG4gICAgICAgICAgICAubXVsdGlwbHkodGhpcy5fZXllTGVmdCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JpZ2h0Q2FtZXJhLndvcmxkVHJhbnNmb3JtXHJcbiAgICAgICAgICAgIC5jb3B5KGNhbWVyYS53b3JsZFRyYW5zZm9ybSlcclxuICAgICAgICAgICAgLm11bHRpcGx5KHRoaXMuX2V5ZVJpZ2h0KTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGVmdENhbWVyYS5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgICAgIHRoaXMuX2xlZnRDYW1lcmEuZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG5cclxuICAgICAgICB0aGlzLl9yaWdodENhbWVyYS5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgICAgIHRoaXMuX3JpZ2h0Q2FtZXJhLmRlY29tcG9zZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlRnJvbVZSRGlzcGxheTogZnVuY3Rpb24gKHZyRGlzcGxheSwgcGFyZW50Tm9kZSkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIFZSRnJhbWVEYXRhID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZnJhbWVEYXRhID0gdGhpcy5fZnJhbWVEYXRhIHx8ICh0aGlzLl9mcmFtZURhdGEgPSBuZXcgVlJGcmFtZURhdGEoKSk7XHJcbiAgICAgICAgdnJEaXNwbGF5LmdldEZyYW1lRGF0YShmcmFtZURhdGEpO1xyXG4gICAgICAgIHZhciBsZWZ0Q2FtZXJhID0gdGhpcy5fbGVmdENhbWVyYTtcclxuICAgICAgICB2YXIgcmlnaHRDYW1lcmEgPSB0aGlzLl9yaWdodENhbWVyYTtcclxuXHJcbiAgICAgICAgbGVmdENhbWVyYS5wcm9qZWN0aW9uTWF0cml4LnNldEFycmF5KGZyYW1lRGF0YS5sZWZ0UHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgbGVmdENhbWVyYS5kZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgbGVmdENhbWVyYS52aWV3TWF0cml4LnNldEFycmF5KGZyYW1lRGF0YS5sZWZ0Vmlld01hdHJpeCk7XHJcbiAgICAgICAgbGVmdENhbWVyYS5zZXRWaWV3TWF0cml4KGxlZnRDYW1lcmEudmlld01hdHJpeCk7XHJcblxyXG4gICAgICAgIHJpZ2h0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXguc2V0QXJyYXkoZnJhbWVEYXRhLnJpZ2h0UHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgcmlnaHRDYW1lcmEuZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgICAgIHJpZ2h0Q2FtZXJhLnZpZXdNYXRyaXguc2V0QXJyYXkoZnJhbWVEYXRhLnJpZ2h0Vmlld01hdHJpeCk7XHJcbiAgICAgICAgcmlnaHRDYW1lcmEuc2V0Vmlld01hdHJpeChyaWdodENhbWVyYS52aWV3TWF0cml4KTtcclxuXHJcbiAgICAgICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS53b3JsZFRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZS50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ05vZGUgdHJhbnNmb3JtIGlzIG5vdCB1cGRhdGVkJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGVmdENhbWVyYS53b3JsZFRyYW5zZm9ybS5tdWx0aXBseUxlZnQocGFyZW50Tm9kZS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIGxlZnRDYW1lcmEuZGVjb21wb3NlV29ybGRUcmFuc2Zvcm0oKTtcclxuICAgICAgICAgICAgcmlnaHRDYW1lcmEud29ybGRUcmFuc2Zvcm0ubXVsdGlwbHlMZWZ0KHBhcmVudE5vZGUud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICByaWdodENhbWVyYS5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TGVmdENhbWVyYTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sZWZ0Q2FtZXJhO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRSaWdodENhbWVyYTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yaWdodENhbWVyYTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTdGVyZW9DYW1lcmE7XHJcbiIsIi8qKiBAbmFtZXNwYWNlIGNsYXkgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5tYXRoICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkuYW5pbWF0aW9uICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkuYXN5bmMgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5jYW1lcmEgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5jb21wb3NpdG9yICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkuY29yZSAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5Lmdlb21ldHJ5ICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkuaGVscGVyICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkubGlnaHQgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5sb2FkZXIgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5wYXJ0aWNsZSAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LnBsdWdpbiAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LnByZVBhc3MgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5zaGFkZXIgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS50ZXh0dXJlICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkudXRpbCAqL1xyXG5cclxuaW1wb3J0IEFuaW1hdG9yJDAgZnJvbSAnLi9hbmltYXRpb24vQW5pbWF0b3InO1xyXG5pbXBvcnQgQmxlbmQxRENsaXAkMSBmcm9tICcuL2FuaW1hdGlvbi9CbGVuZDFEQ2xpcCc7XHJcbmltcG9ydCBCbGVuZDJEQ2xpcCQyIGZyb20gJy4vYW5pbWF0aW9uL0JsZW5kMkRDbGlwJztcclxuaW1wb3J0IENsaXAkMyBmcm9tICcuL2FuaW1hdGlvbi9DbGlwJztcclxuaW1wb3J0IGVhc2luZyQ0IGZyb20gJy4vYW5pbWF0aW9uL2Vhc2luZyc7XHJcbmltcG9ydCBTYW1wbGVyVHJhY2skNSBmcm9tICcuL2FuaW1hdGlvbi9TYW1wbGVyVHJhY2snO1xyXG5pbXBvcnQgVGltZWxpbmUkNiBmcm9tICcuL2FuaW1hdGlvbi9UaW1lbGluZSc7XHJcbmltcG9ydCBUcmFja0NsaXAkNyBmcm9tICcuL2FuaW1hdGlvbi9UcmFja0NsaXAnO1xyXG5pbXBvcnQgYXBwbGljYXRpb24kOCBmcm9tICcuL2FwcGxpY2F0aW9uJztcclxuaW1wb3J0IFRhc2skOSBmcm9tICcuL2FzeW5jL1Rhc2snO1xyXG5pbXBvcnQgVGFza0dyb3VwJDEwIGZyb20gJy4vYXN5bmMvVGFza0dyb3VwJztcclxuaW1wb3J0IENhbWVyYSQxMSBmcm9tICcuL0NhbWVyYSc7XHJcbmltcG9ydCBPcnRob2dyYXBoaWMkMTIgZnJvbSAnLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcclxuaW1wb3J0IFBlcnNwZWN0aXZlJDEzIGZyb20gJy4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IENvbXBvc2l0b3IkMTQgZnJvbSAnLi9jb21wb3NpdG9yL0NvbXBvc2l0b3InO1xyXG5pbXBvcnQgQ29tcG9zaXRvck5vZGUkMTUgZnJvbSAnLi9jb21wb3NpdG9yL0NvbXBvc2l0b3JOb2RlJztcclxuaW1wb3J0IGNyZWF0ZUNvbXBvc2l0b3IkMTYgZnJvbSAnLi9jb21wb3NpdG9yL2NyZWF0ZUNvbXBvc2l0b3InO1xyXG5pbXBvcnQgRmlsdGVyTm9kZSQxNyBmcm9tICcuL2NvbXBvc2l0b3IvRmlsdGVyTm9kZSc7XHJcbmltcG9ydCBHcmFwaCQxOCBmcm9tICcuL2NvbXBvc2l0b3IvR3JhcGgnO1xyXG5pbXBvcnQgUGFzcyQxOSBmcm9tICcuL2NvbXBvc2l0b3IvUGFzcyc7XHJcbmltcG9ydCBTY2VuZU5vZGUkMjAgZnJvbSAnLi9jb21wb3NpdG9yL1NjZW5lTm9kZSc7XHJcbmltcG9ydCBUZXh0dXJlTm9kZSQyMSBmcm9tICcuL2NvbXBvc2l0b3IvVGV4dHVyZU5vZGUnO1xyXG5pbXBvcnQgVGV4dHVyZVBvb2wkMjIgZnJvbSAnLi9jb21wb3NpdG9yL1RleHR1cmVQb29sJztcclxuaW1wb3J0IEJhc2UkMjMgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgQ2FjaGUkMjQgZnJvbSAnLi9jb3JlL0NhY2hlJztcclxuaW1wb3J0IGNvbG9yJDI1IGZyb20gJy4vY29yZS9jb2xvcic7XHJcbmltcG9ydCBnbGVudW0kMjYgZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCBHTEluZm8kMjcgZnJvbSAnLi9jb3JlL0dMSW5mbyc7XHJcbmltcG9ydCBMaW5rZWRMaXN0JDI4IGZyb20gJy4vY29yZS9MaW5rZWRMaXN0JztcclxuaW1wb3J0IExSVSQyOSBmcm9tICcuL2NvcmUvTFJVJztcclxuaW1wb3J0IGV4dGVuZCQzMCBmcm9tICcuL2NvcmUvbWl4aW4vZXh0ZW5kJztcclxuaW1wb3J0IG5vdGlmaWVyJDMxIGZyb20gJy4vY29yZS9taXhpbi9ub3RpZmllcic7XHJcbmltcG9ydCByZXF1ZXN0JDMyIGZyb20gJy4vY29yZS9yZXF1ZXN0JztcclxuaW1wb3J0IHV0aWwkMzMgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgdmVuZG9yJDM0IGZyb20gJy4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgY3JlYXRlQ29tcG9zaXRvciQzNSBmcm9tICcuL2NyZWF0ZUNvbXBvc2l0b3InO1xyXG5pbXBvcnQgR0J1ZmZlciQzNiBmcm9tICcuL2RlZmVycmVkL0dCdWZmZXInO1xyXG5pbXBvcnQgUmVuZGVyZXIkMzcgZnJvbSAnLi9kZWZlcnJlZC9SZW5kZXJlcic7XHJcbmltcG9ydCBnbG1hdHJpeCQzOCBmcm9tICcuL2RlcC9nbG1hdHJpeCc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciQzOSBmcm9tICcuL0ZyYW1lQnVmZmVyJztcclxuaW1wb3J0IEdlb21ldHJ5JDQwIGZyb20gJy4vR2VvbWV0cnknO1xyXG5pbXBvcnQgQ29uZSQ0MSBmcm9tICcuL2dlb21ldHJ5L0NvbmUnO1xyXG5pbXBvcnQgQ3ViZSQ0MiBmcm9tICcuL2dlb21ldHJ5L0N1YmUnO1xyXG5pbXBvcnQgQ3lsaW5kZXIkNDMgZnJvbSAnLi9nZW9tZXRyeS9DeWxpbmRlcic7XHJcbmltcG9ydCBQYXJhbWV0cmljU3VyZmFjZSQ0NCBmcm9tICcuL2dlb21ldHJ5L1BhcmFtZXRyaWNTdXJmYWNlJztcclxuaW1wb3J0IFBsYW5lJDQ1IGZyb20gJy4vZ2VvbWV0cnkvUGxhbmUnO1xyXG5pbXBvcnQgU3BoZXJlJDQ2IGZyb20gJy4vZ2VvbWV0cnkvU3BoZXJlJztcclxuaW1wb3J0IEdlb21ldHJ5QmFzZSQ0NyBmcm9tICcuL0dlb21ldHJ5QmFzZSc7XHJcbmltcG9ydCBKb2ludCQ0OCBmcm9tICcuL0pvaW50JztcclxuaW1wb3J0IExpZ2h0JDQ5IGZyb20gJy4vTGlnaHQnO1xyXG5pbXBvcnQgQW1iaWVudCQ1MCBmcm9tICcuL2xpZ2h0L0FtYmllbnQnO1xyXG5pbXBvcnQgQW1iaWVudEN1YmVtYXAkNTEgZnJvbSAnLi9saWdodC9BbWJpZW50Q3ViZW1hcCc7XHJcbmltcG9ydCBBbWJpZW50U0gkNTIgZnJvbSAnLi9saWdodC9BbWJpZW50U0gnO1xyXG5pbXBvcnQgRGlyZWN0aW9uYWwkNTMgZnJvbSAnLi9saWdodC9EaXJlY3Rpb25hbCc7XHJcbmltcG9ydCBQb2ludCQ1NCBmcm9tICcuL2xpZ2h0L1BvaW50JztcclxuaW1wb3J0IFNwaGVyZSQ1NSBmcm9tICcuL2xpZ2h0L1NwaGVyZSc7XHJcbmltcG9ydCBTcG90JDU2IGZyb20gJy4vbGlnaHQvU3BvdCc7XHJcbmltcG9ydCBUdWJlJDU3IGZyb20gJy4vbGlnaHQvVHViZSc7XHJcbmltcG9ydCBGWCQ1OCBmcm9tICcuL2xvYWRlci9GWCc7XHJcbmltcG9ydCBHTFRGJDU5IGZyb20gJy4vbG9hZGVyL0dMVEYnO1xyXG5pbXBvcnQgTWF0ZXJpYWwkNjAgZnJvbSAnLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCQ2MSBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgRnJ1c3R1bSQ2MiBmcm9tICcuL21hdGgvRnJ1c3R1bSc7XHJcbmltcG9ydCBNYXRyaXgyJDYzIGZyb20gJy4vbWF0aC9NYXRyaXgyJztcclxuaW1wb3J0IE1hdHJpeDJkJDY0IGZyb20gJy4vbWF0aC9NYXRyaXgyZCc7XHJcbmltcG9ydCBNYXRyaXgzJDY1IGZyb20gJy4vbWF0aC9NYXRyaXgzJztcclxuaW1wb3J0IE1hdHJpeDQkNjYgZnJvbSAnLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgUGxhbmUkNjcgZnJvbSAnLi9tYXRoL1BsYW5lJztcclxuaW1wb3J0IFF1YXRlcm5pb24kNjggZnJvbSAnLi9tYXRoL1F1YXRlcm5pb24nO1xyXG5pbXBvcnQgUmF5JDY5IGZyb20gJy4vbWF0aC9SYXknO1xyXG5pbXBvcnQgdXRpbCQ3MCBmcm9tICcuL21hdGgvdXRpbCc7XHJcbmltcG9ydCBWYWx1ZSQ3MSBmcm9tICcuL21hdGgvVmFsdWUnO1xyXG5pbXBvcnQgVmVjdG9yMiQ3MiBmcm9tICcuL21hdGgvVmVjdG9yMic7XHJcbmltcG9ydCBWZWN0b3IzJDczIGZyb20gJy4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IFZlY3RvcjQkNzQgZnJvbSAnLi9tYXRoL1ZlY3RvcjQnO1xyXG5pbXBvcnQgTWVzaCQ3NSBmcm9tICcuL01lc2gnO1xyXG5pbXBvcnQgTm9kZSQ3NiBmcm9tICcuL05vZGUnO1xyXG5pbXBvcnQgRW1pdHRlciQ3NyBmcm9tICcuL3BhcnRpY2xlL0VtaXR0ZXInO1xyXG5pbXBvcnQgRmllbGQkNzggZnJvbSAnLi9wYXJ0aWNsZS9GaWVsZCc7XHJcbmltcG9ydCBGb3JjZUZpZWxkJDc5IGZyb20gJy4vcGFydGljbGUvRm9yY2VGaWVsZCc7XHJcbmltcG9ydCBQYXJ0aWNsZSQ4MCBmcm9tICcuL3BhcnRpY2xlL1BhcnRpY2xlJztcclxuaW1wb3J0IFBhcnRpY2xlUmVuZGVyYWJsZSQ4MSBmcm9tICcuL3BhcnRpY2xlL1BhcnRpY2xlUmVuZGVyYWJsZSc7XHJcbmltcG9ydCBQaXhlbFBpY2tpbmckODIgZnJvbSAnLi9waWNraW5nL1BpeGVsUGlja2luZyc7XHJcbmltcG9ydCBSYXlQaWNraW5nJDgzIGZyb20gJy4vcGlja2luZy9SYXlQaWNraW5nJztcclxuaW1wb3J0IEZyZWVDb250cm9sJDg0IGZyb20gJy4vcGx1Z2luL0ZyZWVDb250cm9sJztcclxuaW1wb3J0IEdhbWVwYWRDb250cm9sJDg1IGZyb20gJy4vcGx1Z2luL0dhbWVwYWRDb250cm9sJztcclxuaW1wb3J0IEdlc3R1cmVNZ3IkODYgZnJvbSAnLi9wbHVnaW4vR2VzdHVyZU1ncic7XHJcbmltcG9ydCBJbmZpbml0ZVBsYW5lJDg3IGZyb20gJy4vcGx1Z2luL0luZmluaXRlUGxhbmUnO1xyXG5pbXBvcnQgT3JiaXRDb250cm9sJDg4IGZyb20gJy4vcGx1Z2luL09yYml0Q29udHJvbCc7XHJcbmltcG9ydCBTa3lib3gkODkgZnJvbSAnLi9wbHVnaW4vU2t5Ym94JztcclxuaW1wb3J0IFNreWRvbWUkOTAgZnJvbSAnLi9wbHVnaW4vU2t5ZG9tZSc7XHJcbmltcG9ydCBFbnZpcm9ubWVudE1hcCQ5MSBmcm9tICcuL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAnO1xyXG5pbXBvcnQgU2hhZG93TWFwJDkyIGZyb20gJy4vcHJlUGFzcy9TaGFkb3dNYXAnO1xyXG5pbXBvcnQgUmVuZGVyYWJsZSQ5MyBmcm9tICcuL1JlbmRlcmFibGUnO1xyXG5pbXBvcnQgUmVuZGVyZXIkOTQgZnJvbSAnLi9SZW5kZXJlcic7XHJcbmltcG9ydCBTY2VuZSQ5NSBmcm9tICcuL1NjZW5lJztcclxuaW1wb3J0IFNoYWRlciQ5NiBmcm9tICcuL1NoYWRlcic7XHJcbmltcG9ydCBsaWJyYXJ5JDk3IGZyb20gJy4vc2hhZGVyL2xpYnJhcnknO1xyXG5pbXBvcnQgcmVnaXN0ZXJCdWlsdGluQ29tcG9zaXRvciQ5OCBmcm9tICcuL3NoYWRlci9yZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yJztcclxuaW1wb3J0IGxpZ2h0JDk5IGZyb20gJy4vc2hhZGVyL3NvdXJjZS9oZWFkZXIvbGlnaHQnO1xyXG5pbXBvcnQgU2tlbGV0b24kMTAwIGZyb20gJy4vU2tlbGV0b24nO1xyXG5pbXBvcnQgU3RhbmRhcmRNYXRlcmlhbCQxMDEgZnJvbSAnLi9TdGFuZGFyZE1hdGVyaWFsJztcclxuaW1wb3J0IFN0YXRpY0dlb21ldHJ5JDEwMiBmcm9tICcuL1N0YXRpY0dlb21ldHJ5JztcclxuaW1wb3J0IFRleHR1cmUkMTAzIGZyb20gJy4vVGV4dHVyZSc7XHJcbmltcG9ydCBUZXh0dXJlMkQkMTA0IGZyb20gJy4vVGV4dHVyZTJEJztcclxuaW1wb3J0IFRleHR1cmVDdWJlJDEwNSBmcm9tICcuL1RleHR1cmVDdWJlJztcclxuaW1wb3J0IFRpbWVsaW5lJDEwNiBmcm9tICcuL1RpbWVsaW5lJztcclxuaW1wb3J0IGN1YmVtYXAkMTA3IGZyb20gJy4vdXRpbC9jdWJlbWFwJztcclxuaW1wb3J0IGRkcyQxMDggZnJvbSAnLi91dGlsL2Rkcyc7XHJcbmltcG9ydCBkZWxhdW5heSQxMDkgZnJvbSAnLi91dGlsL2RlbGF1bmF5JztcclxuaW1wb3J0IGhkciQxMTAgZnJvbSAnLi91dGlsL2hkcic7XHJcbmltcG9ydCBtZXNoJDExMSBmcm9tICcuL3V0aWwvbWVzaCc7XHJcbmltcG9ydCBzaCQxMTIgZnJvbSAnLi91dGlsL3NoJztcclxuaW1wb3J0IHRleHR1cmUkMTEzIGZyb20gJy4vdXRpbC90ZXh0dXJlJztcclxuaW1wb3J0IHRyYW5zZmVyYWJsZSQxMTQgZnJvbSAnLi91dGlsL3RyYW5zZmVyYWJsZSc7XHJcbmltcG9ydCB2ZXJzaW9uJDExNSBmcm9tICcuL3ZlcnNpb24nO1xyXG5pbXBvcnQgQ2FyZGJvYXJkRGlzdG9ydGVyJDExNiBmcm9tICcuL3ZyL0NhcmRib2FyZERpc3RvcnRlcic7XHJcbmltcG9ydCBTdGVyZW9DYW1lcmEkMTE3IGZyb20gJy4vdnIvU3RlcmVvQ2FtZXJhJztcclxuXHJcblxyXG52YXIgYW5pbWF0aW9uID0ge1xyXG4gICAgQW5pbWF0b3IgOiBBbmltYXRvciQwLFxyXG4gICAgQmxlbmQxRENsaXAgOiBCbGVuZDFEQ2xpcCQxLFxyXG4gICAgQmxlbmQyRENsaXAgOiBCbGVuZDJEQ2xpcCQyLFxyXG4gICAgQ2xpcCA6IENsaXAkMyxcclxuICAgIGVhc2luZyA6IGVhc2luZyQ0LFxyXG4gICAgU2FtcGxlclRyYWNrIDogU2FtcGxlclRyYWNrJDUsXHJcbiAgICBUaW1lbGluZSA6IFRpbWVsaW5lJDYsXHJcbiAgICBUcmFja0NsaXAgOiBUcmFja0NsaXAkN1xyXG59O1xyXG5leHBvcnQgeyBhbmltYXRpb24gfTtcclxuXHJcbmV4cG9ydCB7IGFwcGxpY2F0aW9uJDggYXMgYXBwbGljYXRpb24gfTtcclxuXHJcbnZhciBhc3luYyA9IHtcclxuICAgIFRhc2sgOiBUYXNrJDksXHJcbiAgICBUYXNrR3JvdXAgOiBUYXNrR3JvdXAkMTBcclxufTtcclxuZXhwb3J0IHsgYXN5bmMgfTtcclxuXHJcbmV4cG9ydCB7IENhbWVyYSQxMSBhcyBDYW1lcmEgfTtcclxuXHJcbnZhciBjYW1lcmEgPSB7XHJcbiAgICBPcnRob2dyYXBoaWMgOiBPcnRob2dyYXBoaWMkMTIsXHJcbiAgICBQZXJzcGVjdGl2ZSA6IFBlcnNwZWN0aXZlJDEzXHJcbn07XHJcbmV4cG9ydCB7IGNhbWVyYSB9O1xyXG5cclxuXHJcbnZhciBjb21wb3NpdG9yID0ge1xyXG4gICAgQ29tcG9zaXRvciA6IENvbXBvc2l0b3IkMTQsXHJcbiAgICBDb21wb3NpdG9yTm9kZSA6IENvbXBvc2l0b3JOb2RlJDE1LFxyXG4gICAgY3JlYXRlQ29tcG9zaXRvciA6IGNyZWF0ZUNvbXBvc2l0b3IkMTYsXHJcbiAgICBGaWx0ZXJOb2RlIDogRmlsdGVyTm9kZSQxNyxcclxuICAgIEdyYXBoIDogR3JhcGgkMTgsXHJcbiAgICBQYXNzIDogUGFzcyQxOSxcclxuICAgIFNjZW5lTm9kZSA6IFNjZW5lTm9kZSQyMCxcclxuICAgIFRleHR1cmVOb2RlIDogVGV4dHVyZU5vZGUkMjEsXHJcbiAgICBUZXh0dXJlUG9vbCA6IFRleHR1cmVQb29sJDIyXHJcbn07XHJcbmV4cG9ydCB7IGNvbXBvc2l0b3IgfTtcclxuXHJcblxyXG52YXIgY29yZSA9IHtcclxuICAgIEJhc2UgOiBCYXNlJDIzLFxyXG4gICAgQ2FjaGUgOiBDYWNoZSQyNCxcclxuICAgIGNvbG9yIDogY29sb3IkMjUsXHJcbiAgICBnbGVudW0gOiBnbGVudW0kMjYsXHJcbiAgICBHTEluZm8gOiBHTEluZm8kMjcsXHJcbiAgICBMaW5rZWRMaXN0IDogTGlua2VkTGlzdCQyOCxcclxuICAgIExSVSA6IExSVSQyOSxcclxuICAgIG1peGluIDoge1xyXG4gICAgICAgIGV4dGVuZCA6IGV4dGVuZCQzMCxcclxuICAgICAgICBub3RpZmllciA6IG5vdGlmaWVyJDMxXHJcbiAgICB9LFxyXG4gICAgcmVxdWVzdCA6IHJlcXVlc3QkMzIsXHJcbiAgICB1dGlsIDogdXRpbCQzMyxcclxuICAgIHZlbmRvciA6IHZlbmRvciQzNFxyXG59O1xyXG5leHBvcnQgeyBjb3JlIH07XHJcblxyXG5leHBvcnQgeyBjcmVhdGVDb21wb3NpdG9yJDM1IGFzIGNyZWF0ZUNvbXBvc2l0b3IgfTtcclxuXHJcbnZhciBkZWZlcnJlZCA9IHtcclxuICAgIEdCdWZmZXIgOiBHQnVmZmVyJDM2LFxyXG4gICAgUmVuZGVyZXIgOiBSZW5kZXJlciQzN1xyXG59O1xyXG5leHBvcnQgeyBkZWZlcnJlZCB9O1xyXG5cclxuXHJcbnZhciBkZXAgPSB7XHJcbiAgICBnbG1hdHJpeCA6IGdsbWF0cml4JDM4XHJcbn07XHJcbmV4cG9ydCB7IGRlcCB9O1xyXG5cclxuZXhwb3J0IHsgRnJhbWVCdWZmZXIkMzkgYXMgRnJhbWVCdWZmZXIgfTtcclxuZXhwb3J0IHsgR2VvbWV0cnkkNDAgYXMgR2VvbWV0cnkgfTtcclxuXHJcbnZhciBnZW9tZXRyeSA9IHtcclxuICAgIENvbmUgOiBDb25lJDQxLFxyXG4gICAgQ3ViZSA6IEN1YmUkNDIsXHJcbiAgICBDeWxpbmRlciA6IEN5bGluZGVyJDQzLFxyXG4gICAgUGFyYW1ldHJpY1N1cmZhY2UgOiBQYXJhbWV0cmljU3VyZmFjZSQ0NCxcclxuICAgIFBsYW5lIDogUGxhbmUkNDUsXHJcbiAgICBTcGhlcmUgOiBTcGhlcmUkNDZcclxufTtcclxuZXhwb3J0IHsgZ2VvbWV0cnkgfTtcclxuXHJcbmV4cG9ydCB7IEdlb21ldHJ5QmFzZSQ0NyBhcyBHZW9tZXRyeUJhc2UgfTtcclxuZXhwb3J0IHsgSm9pbnQkNDggYXMgSm9pbnQgfTtcclxuZXhwb3J0IHsgTGlnaHQkNDkgYXMgTGlnaHQgfTtcclxuXHJcbnZhciBsaWdodCA9IHtcclxuICAgIEFtYmllbnQgOiBBbWJpZW50JDUwLFxyXG4gICAgQW1iaWVudEN1YmVtYXAgOiBBbWJpZW50Q3ViZW1hcCQ1MSxcclxuICAgIEFtYmllbnRTSCA6IEFtYmllbnRTSCQ1MixcclxuICAgIERpcmVjdGlvbmFsIDogRGlyZWN0aW9uYWwkNTMsXHJcbiAgICBQb2ludCA6IFBvaW50JDU0LFxyXG4gICAgU3BoZXJlIDogU3BoZXJlJDU1LFxyXG4gICAgU3BvdCA6IFNwb3QkNTYsXHJcbiAgICBUdWJlIDogVHViZSQ1N1xyXG59O1xyXG5leHBvcnQgeyBsaWdodCB9O1xyXG5cclxuXHJcbnZhciBsb2FkZXIgPSB7XHJcbiAgICBGWCA6IEZYJDU4LFxyXG4gICAgR0xURiA6IEdMVEYkNTlcclxufTtcclxuZXhwb3J0IHsgbG9hZGVyIH07XHJcblxyXG5leHBvcnQgeyBNYXRlcmlhbCQ2MCBhcyBNYXRlcmlhbCB9O1xyXG5cclxudmFyIG1hdGggPSB7XHJcbiAgICBCb3VuZGluZ0JveCA6IEJvdW5kaW5nQm94JDYxLFxyXG4gICAgRnJ1c3R1bSA6IEZydXN0dW0kNjIsXHJcbiAgICBNYXRyaXgyIDogTWF0cml4MiQ2MyxcclxuICAgIE1hdHJpeDJkIDogTWF0cml4MmQkNjQsXHJcbiAgICBNYXRyaXgzIDogTWF0cml4MyQ2NSxcclxuICAgIE1hdHJpeDQgOiBNYXRyaXg0JDY2LFxyXG4gICAgUGxhbmUgOiBQbGFuZSQ2NyxcclxuICAgIFF1YXRlcm5pb24gOiBRdWF0ZXJuaW9uJDY4LFxyXG4gICAgUmF5IDogUmF5JDY5LFxyXG4gICAgdXRpbCA6IHV0aWwkNzAsXHJcbiAgICBWYWx1ZSA6IFZhbHVlJDcxLFxyXG4gICAgVmVjdG9yMiA6IFZlY3RvcjIkNzIsXHJcbiAgICBWZWN0b3IzIDogVmVjdG9yMyQ3MyxcclxuICAgIFZlY3RvcjQgOiBWZWN0b3I0JDc0XHJcbn07XHJcbmV4cG9ydCB7IG1hdGggfTtcclxuZXhwb3J0IHsgQm91bmRpbmdCb3gkNjEgYXMgQm91bmRpbmdCb3ggfTtcclxuZXhwb3J0IHsgRnJ1c3R1bSQ2MiBhcyBGcnVzdHVtIH07XHJcbmV4cG9ydCB7IE1hdHJpeDIkNjMgYXMgTWF0cml4MiB9O1xyXG5leHBvcnQgeyBNYXRyaXgyZCQ2NCBhcyBNYXRyaXgyZCB9O1xyXG5leHBvcnQgeyBNYXRyaXgzJDY1IGFzIE1hdHJpeDMgfTtcclxuZXhwb3J0IHsgTWF0cml4NCQ2NiBhcyBNYXRyaXg0IH07XHJcbmV4cG9ydCB7IFBsYW5lJDY3IGFzIFBsYW5lIH07XHJcbmV4cG9ydCB7IFF1YXRlcm5pb24kNjggYXMgUXVhdGVybmlvbiB9O1xyXG5leHBvcnQgeyBSYXkkNjkgYXMgUmF5IH07XHJcbmV4cG9ydCB7IFZhbHVlJDcxIGFzIFZhbHVlIH07XHJcbmV4cG9ydCB7IFZlY3RvcjIkNzIgYXMgVmVjdG9yMiB9O1xyXG5leHBvcnQgeyBWZWN0b3IzJDczIGFzIFZlY3RvcjMgfTtcclxuZXhwb3J0IHsgVmVjdG9yNCQ3NCBhcyBWZWN0b3I0IH07XHJcblxyXG5leHBvcnQgeyBNZXNoJDc1IGFzIE1lc2ggfTtcclxuZXhwb3J0IHsgTm9kZSQ3NiBhcyBOb2RlIH07XHJcblxyXG52YXIgcGFydGljbGUgPSB7XHJcbiAgICBFbWl0dGVyIDogRW1pdHRlciQ3NyxcclxuICAgIEZpZWxkIDogRmllbGQkNzgsXHJcbiAgICBGb3JjZUZpZWxkIDogRm9yY2VGaWVsZCQ3OSxcclxuICAgIFBhcnRpY2xlIDogUGFydGljbGUkODAsXHJcbiAgICBQYXJ0aWNsZVJlbmRlcmFibGUgOiBQYXJ0aWNsZVJlbmRlcmFibGUkODFcclxufTtcclxuZXhwb3J0IHsgcGFydGljbGUgfTtcclxuXHJcblxyXG52YXIgcGlja2luZyA9IHtcclxuICAgIFBpeGVsUGlja2luZyA6IFBpeGVsUGlja2luZyQ4MixcclxuICAgIFJheVBpY2tpbmcgOiBSYXlQaWNraW5nJDgzXHJcbn07XHJcbmV4cG9ydCB7IHBpY2tpbmcgfTtcclxuXHJcblxyXG52YXIgcGx1Z2luID0ge1xyXG4gICAgRnJlZUNvbnRyb2wgOiBGcmVlQ29udHJvbCQ4NCxcclxuICAgIEdhbWVwYWRDb250cm9sIDogR2FtZXBhZENvbnRyb2wkODUsXHJcbiAgICBHZXN0dXJlTWdyIDogR2VzdHVyZU1nciQ4NixcclxuICAgIEluZmluaXRlUGxhbmUgOiBJbmZpbml0ZVBsYW5lJDg3LFxyXG4gICAgT3JiaXRDb250cm9sIDogT3JiaXRDb250cm9sJDg4LFxyXG4gICAgU2t5Ym94IDogU2t5Ym94JDg5LFxyXG4gICAgU2t5ZG9tZSA6IFNreWRvbWUkOTBcclxufTtcclxuZXhwb3J0IHsgcGx1Z2luIH07XHJcblxyXG5cclxudmFyIHByZVBhc3MgPSB7XHJcbiAgICBFbnZpcm9ubWVudE1hcCA6IEVudmlyb25tZW50TWFwJDkxLFxyXG4gICAgU2hhZG93TWFwIDogU2hhZG93TWFwJDkyXHJcbn07XHJcbmV4cG9ydCB7IHByZVBhc3MgfTtcclxuXHJcbmV4cG9ydCB7IFJlbmRlcmFibGUkOTMgYXMgUmVuZGVyYWJsZSB9O1xyXG5leHBvcnQgeyBSZW5kZXJlciQ5NCBhcyBSZW5kZXJlciB9O1xyXG5leHBvcnQgeyBTY2VuZSQ5NSBhcyBTY2VuZSB9O1xyXG5leHBvcnQgeyBTaGFkZXIkOTYgYXMgU2hhZGVyIH07XHJcblxyXG52YXIgc2hhZGVyID0ge1xyXG4gICAgbGlicmFyeSA6IGxpYnJhcnkkOTcsXHJcbiAgICByZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yIDogcmVnaXN0ZXJCdWlsdGluQ29tcG9zaXRvciQ5OCxcclxuICAgIHNvdXJjZSA6IHtcclxuICAgIGhlYWRlciA6IHtcclxuICAgICAgICBsaWdodCA6IGxpZ2h0JDk5XHJcbiAgICB9XHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCB7IHNoYWRlciB9O1xyXG5cclxuZXhwb3J0IHsgU2tlbGV0b24kMTAwIGFzIFNrZWxldG9uIH07XHJcbmV4cG9ydCB7IFN0YW5kYXJkTWF0ZXJpYWwkMTAxIGFzIFN0YW5kYXJkTWF0ZXJpYWwgfTtcclxuZXhwb3J0IHsgU3RhdGljR2VvbWV0cnkkMTAyIGFzIFN0YXRpY0dlb21ldHJ5IH07XHJcbmV4cG9ydCB7IFRleHR1cmUkMTAzIGFzIFRleHR1cmUgfTtcclxuZXhwb3J0IHsgVGV4dHVyZTJEJDEwNCBhcyBUZXh0dXJlMkQgfTtcclxuZXhwb3J0IHsgVGV4dHVyZUN1YmUkMTA1IGFzIFRleHR1cmVDdWJlIH07XHJcbmV4cG9ydCB7IFRpbWVsaW5lJDEwNiBhcyBUaW1lbGluZSB9O1xyXG5cclxudmFyIHV0aWwgPSB7XHJcbiAgICBjdWJlbWFwIDogY3ViZW1hcCQxMDcsXHJcbiAgICBkZHMgOiBkZHMkMTA4LFxyXG4gICAgZGVsYXVuYXkgOiBkZWxhdW5heSQxMDksXHJcbiAgICBoZHIgOiBoZHIkMTEwLFxyXG4gICAgbWVzaCA6IG1lc2gkMTExLFxyXG4gICAgc2ggOiBzaCQxMTIsXHJcbiAgICB0ZXh0dXJlIDogdGV4dHVyZSQxMTMsXHJcbiAgICB0cmFuc2ZlcmFibGUgOiB0cmFuc2ZlcmFibGUkMTE0XHJcbn07XHJcbmV4cG9ydCB7IHV0aWwgfTtcclxuXHJcbmV4cG9ydCB7IHZlcnNpb24kMTE1IGFzIHZlcnNpb24gfTtcclxuXHJcbnZhciB2ciA9IHtcclxuICAgIENhcmRib2FyZERpc3RvcnRlciA6IENhcmRib2FyZERpc3RvcnRlciQxMTYsXHJcbiAgICBTdGVyZW9DYW1lcmEgOiBTdGVyZW9DYW1lcmEkMTE3XHJcbn07XHJcbmV4cG9ydCB7IHZyIH07XHJcbjtcclxuIl0sIm5hbWVzIjpbImVhc2luZyIsIkVhc2luZyIsImVhc2luZ0Z1bmNzIiwiR0xNQVRfUkFORE9NIiwidXRpbCIsIm5vdGlmaWVyTWl4aW4iLCJMUlUiLCJwYXJzZUNvbG9yIiwiZ2V0RGVmaW5lQ29kZSIsInByZXpFc3NsIiwibm9vcCIsInByb3RvIiwiZGVmaW5lUHJvcGVydHkiLCJsaWdodFNoYWRlciIsIlBsYW5lIiwidmVjM1NldCIsInZlYzNDb3B5IiwiRVBTSUxPTiIsInByb2dyYW1LZXlDYWNoZSIsImdldFByb2dyYW1LZXkiLCJMUlVDYWNoZSIsIkF0dHJpYnV0ZSIsIkN1YmUiLCJTcGhlcmUiLCJQYXJhbWV0cmljU3VyZmFjZSIsImlzUG93ZXJPZlR3byIsIlBlcnNwZWN0aXZlIiwiT3J0aG9ncmFwaGljIiwidXRpbEVzc2wiLCJzaGFkZXJMaWJyYXJ5IiwiUGVyc3BlY3RpdmVDYW1lcmEiLCJPcnRob2dyYXBoaWNDYW1lcmEiLCJjYW1lcmEiLCJPcnRob0NhbWVyYSIsIlNreWJveCIsIkN1YmVHZW9tZXRyeSIsInRhcmdldHMiLCJyZXQiLCJoZHIiLCJkZHMiLCJTa3lkb21lIiwiQ3ViZUdlbyIsIlNwaGVyZUdlbyIsIlBsYW5lR2VvIiwiUGFyYW1ldHJpY1N1cmZhY2VHZW8iLCJzaFV0aWwiLCJHcmFwaE5vZGUiLCJTY2VuZU5vZGUiLCJUZXh0dXJlTm9kZSIsIkZpbHRlck5vZGUiLCJyZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yIiwiQ29tcG9TY2VuZU5vZGUiLCJDb21wb1RleHR1cmVOb2RlIiwiQ29tcG9GaWx0ZXJOb2RlIiwiQ29uZSIsIkN5bGluZGVyIiwiQ29uZUdlb21ldHJ5IiwiQ29uZUdlbyIsIkN5bGluZGVyR2VvIiwiRnVsbFF1YWRQYXNzIiwib3V0cHV0RXNzbCIsIkJhc2UiLCJDYW1lcmEiLCJBbmltYXRvciQwIiwiQmxlbmQxRENsaXAkMSIsIkJsZW5kMkRDbGlwJDIiLCJDbGlwJDMiLCJlYXNpbmckNCIsIlNhbXBsZXJUcmFjayQ1IiwiVGltZWxpbmUkNiIsIlRyYWNrQ2xpcCQ3IiwiVGFzayQ5IiwiVGFza0dyb3VwJDEwIiwiT3J0aG9ncmFwaGljJDEyIiwiUGVyc3BlY3RpdmUkMTMiLCJDb21wb3NpdG9yJDE0IiwiQ29tcG9zaXRvck5vZGUkMTUiLCJjcmVhdGVDb21wb3NpdG9yJDE2IiwiRmlsdGVyTm9kZSQxNyIsIkdyYXBoJDE4IiwiUGFzcyQxOSIsIlNjZW5lTm9kZSQyMCIsIlRleHR1cmVOb2RlJDIxIiwiVGV4dHVyZVBvb2wkMjIiLCJCYXNlJDIzIiwiQ2FjaGUkMjQiLCJjb2xvciQyNSIsImdsZW51bSQyNiIsIkdMSW5mbyQyNyIsIkxpbmtlZExpc3QkMjgiLCJMUlUkMjkiLCJleHRlbmQkMzAiLCJub3RpZmllciQzMSIsInJlcXVlc3QkMzIiLCJ1dGlsJDMzIiwidmVuZG9yJDM0IiwiR0J1ZmZlciQzNiIsIlJlbmRlcmVyJDM3IiwiZ2xtYXRyaXgkMzgiLCJDb25lJDQxIiwiQ3ViZSQ0MiIsIkN5bGluZGVyJDQzIiwiUGFyYW1ldHJpY1N1cmZhY2UkNDQiLCJQbGFuZSQ0NSIsIlNwaGVyZSQ0NiIsIkFtYmllbnQkNTAiLCJBbWJpZW50Q3ViZW1hcCQ1MSIsIkFtYmllbnRTSCQ1MiIsIkRpcmVjdGlvbmFsJDUzIiwiUG9pbnQkNTQiLCJTcGhlcmUkNTUiLCJTcG90JDU2IiwiVHViZSQ1NyIsIkZYJDU4IiwiR0xURiQ1OSIsIkJvdW5kaW5nQm94JDYxIiwiRnJ1c3R1bSQ2MiIsIk1hdHJpeDIkNjMiLCJNYXRyaXgyZCQ2NCIsIk1hdHJpeDMkNjUiLCJNYXRyaXg0JDY2IiwiUGxhbmUkNjciLCJRdWF0ZXJuaW9uJDY4IiwiUmF5JDY5IiwidXRpbCQ3MCIsIlZhbHVlJDcxIiwiVmVjdG9yMiQ3MiIsIlZlY3RvcjMkNzMiLCJWZWN0b3I0JDc0IiwiRW1pdHRlciQ3NyIsIkZpZWxkJDc4IiwiRm9yY2VGaWVsZCQ3OSIsIlBhcnRpY2xlJDgwIiwiUGFydGljbGVSZW5kZXJhYmxlJDgxIiwiUGl4ZWxQaWNraW5nJDgyIiwiUmF5UGlja2luZyQ4MyIsIkZyZWVDb250cm9sJDg0IiwiR2FtZXBhZENvbnRyb2wkODUiLCJHZXN0dXJlTWdyJDg2IiwiSW5maW5pdGVQbGFuZSQ4NyIsIk9yYml0Q29udHJvbCQ4OCIsIlNreWJveCQ4OSIsIlNreWRvbWUkOTAiLCJFbnZpcm9ubWVudE1hcCQ5MSIsIlNoYWRvd01hcCQ5MiIsImxpYnJhcnkkOTciLCJyZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yJDk4IiwibGlnaHQkOTkiLCJjdWJlbWFwJDEwNyIsImRkcyQxMDgiLCJkZWxhdW5heSQxMDkiLCJoZHIkMTEwIiwibWVzaCQxMTEiLCJzaCQxMTIiLCJ0ZXh0dXJlJDExMyIsInRyYW5zZmVyYWJsZSQxMTQiLCJDYXJkYm9hcmREaXN0b3J0ZXIkMTE2IiwiU3RlcmVvQ2FtZXJhJDExNyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0FBS0EsSUFBSSxNQUFNLEdBQUc7Ozs7OztJQU1ULE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNoQixPQUFPLENBQUMsQ0FBQztLQUNaOzs7Ozs7SUFNRCxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2hCOzs7Ozs7SUFNRCxZQUFZLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3RCOzs7Ozs7SUFNRCxjQUFjLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2QsT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN0QjtRQUNELE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3RDOzs7Ozs7SUFNRCxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNwQjs7Ozs7O0lBTUQsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFF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QVEsR0FBRyxPQUFPLEVBQUU7UUFDekIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3RCLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3RCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUMvQjs7U0FFSTtRQUNELEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvQixFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRO1lBQ3RCLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRztZQUNyQixFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxH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R0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNwRDtTQUNKOzs7UUFHRCxPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsUUFBUSxFQUFFLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTs7UUFFdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDcEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3pELENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN6RCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2hFLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7O1FBRUQsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7OztRQUd0QixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7WUFDWCxPQUFPLElBQUksQ0FBQztTQUNmOztRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3JELENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7OztRQUdsRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFO1lBQ3JDLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7O1FBRUQsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNqQjtDQUNKOztBQy9PTSxJQUFJLGFBQWEsR0FBRyxRQUFRLENBQUM7OztBQUdwQyxBQUFPLElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDOzs7OztBQUtwQyxBQUFPLElBQUlHLGNBQVksR0FBRyxJQUFJLENBQUMsTUFBTTs7QUNSckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQkEsQUFPQSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7Ozs7Ozs7QUFPZCxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVc7SUFDckIsSUFBSSxHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3JCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7O0FBVXZCLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUMxQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7O0FBUzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFD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RCxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELGFBQWEsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELGNBQWMsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELGFBQWEsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJ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SUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztJQUNyQixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ3JCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7O0lBRXJCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDOztJQUVoRCxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxZQUFZLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUM3RCxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxZQUFZLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUM3RCxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxZQUFZLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzs7SUFFN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3pDLENBQUM7Ozs7Ozs7QUFPRixXQUFXLENBQUMsU0FBUyxDQUFD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QUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFVdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7OztBQVdGLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7SUFDMUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3JDLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7O0FBUzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxD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LENBQUMsR0FBRyxHQUFHLENBQUM7UUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDdkIsSUFBSTtRQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNkO0lBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUN2QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xELENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXBDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2hDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsS0FBSyxFQUFFO0lBQ2hDLEtBQUssR0FBRyxLQUFLLElBQUksR0FBRyxDQUFDOztJQUVyQixJQUFJLENBQUMsR0FBR0EsY0FBWSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQ0EsY0FBWSxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNyQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDOztJQUV4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ25CLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTs7O0lBR3JDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7UUFHMUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUM3QixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDN0IsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7OztJQUduQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNsRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0dBQ2xDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDOztNQUVkLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7TUFHakIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUMzQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7OztNQUczQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFdkIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7SUFFakIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7OztJQUduQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0lBRzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDOztJQUVqQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0lBR25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDLENBQUMs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QUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7O0FBVXpCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFVdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUMxQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMzQyxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7OztBQVMxQixJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFD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Q0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtRQUNULEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUN2QjtJQUNELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdkIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hFLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsR0FBRyxFQUFFLEtBQUssRUFBRTtJQUNoQyxLQUFLLEdBQUcsS0FBSyxJQUFJLEdBQUcsQ0FBQzs7O0lBR3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBR0EsY0FBWSxFQUFFLENBQUM7SUFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxjQUFZLEVBQUUsQ0FBQztJQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdBLGNBQVksRUFBRSxDQUFDO0lBQ3hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBR0EsY0FBWSxFQUFFLENBQUM7SUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7UUFHMUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUM3QixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDN0IsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7OztJQUduQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVB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QUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsRUFBRTtJQUNyQixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUU7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTs7SUFFOUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO1FBQ1gsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDaEIsTUFBTTtRQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNqQjs7SUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENB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QUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXZDLE9BQU8sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN6RyxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRWxDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUUzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7O0lBRWIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDOztJQUViLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNqQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVsQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRXRCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDOztJQUUzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7SUFFM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRWxCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7UUFFVixFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUVqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7O0lBRWpCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7SUFFckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDcEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7UUFFbEQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7OztRQUczQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhGLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDTixPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDOztJQUVuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQzs7SUFFbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7O0lBRW5ELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMs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LENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO0lBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDaEM7Ozs7Ozs7Ozs7O0FBV0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDOzs7Ozs7Ozs7O0FBVXBCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRS9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7OztBQVd6QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Ozs7Ozs7Ozs7QUFVeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUU7SUFDOUIsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBRTtJQUM5QixJQUFJLEtBQUss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QUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ2xCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDUixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1FBRWhCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0tBQzFDOztJQUVELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7QUNyZ0JGOzs7QUFHQSxBQUlBLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ3BDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNmLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDOztJQUVuQyxPQUFPLEdBQUcsQ0FBQztDQUNkOztBQUVELFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFOzs7O0lBSXJDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzlELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDOztJQUVuRSxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7OztJQUd4QyxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7SUFFOUMsSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO1FBQ2IsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ2YsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ1YsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ1YsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ1YsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0tBQ2I7O0lBRUQsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLElBQUksUUFBUSxFQUFFOztRQUUxQixLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzdDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7S0FDeEM7U0FDSTs7O1FBR0QsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDakIsTUFBTSxHQUFHLENBQUMsQ0FBQztLQUNkOztJQUVELEdBQUcsQ0FBQyxDQUFD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RyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN2RTtRQUNELE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUM5RCxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDN0U7O0lBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hCLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJ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QyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7UUFFaEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Ozs7UUFJcEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNULElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDekM7YUFDSTtZQUNELElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzVDO0tBQ0osQ0FBQztDQUNMLEdBQUcsQ0FBQzs7Ozs7OztBQU9MLFlBQVksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUNyRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztDQUMxRCxDQUFDOzs7Ozs7O0FBT0YsWUFBWSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDeEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztDQUM1RCxDQUFDOzs7Ozs7QUFNRixZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxZQUFZO0lBQ3ZDLElBQUksS0FBSyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwRCxLQUFLLENBQUMsUUFBUSxHQUFHO1FBQ2IsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUk7UUFDaEMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLElBQUk7UUFDeEMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLElBQUk7UUFDeEMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUk7S0FDckMsQ0FBQztJQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDOztJQUVuQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDM0IsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDOztJQUVyQixPQUFPLEtBQUssQ0FBQzs7Q0FFaEIsQ0FBQzs7QUNqWUY7Ozs7Ozs7O0FBUUEsU0FBUyxNQUFNLENBQUMsY0FBYyxFQUFFLFVBQVUsY0FBYyxLQUFLLGNBQWM7O0lBRXZFLElBQUksT0FBTyxVQUFVLElBQUksUUFBUSxFQUFFO1FBQy9CLEtBQUssR0FBRyxVQUFVLENBQUM7UUFDbkIsVUFBVSxHQUFHLElBQUksQ0FBQztLQUNyQjs7SUFFRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7O0lBRWxCLElBQUksUUFBUSxDQUFDO0lBQ2IsSUFBSSxFQUFFLGNBQWMsWUFBWSxRQUFRLENBQUMsRUFBRTs7UUFFdkMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLEtBQUssSUFBSSxRQUFRLElBQUksY0FBYyxFQUFFO1lBQ2pDLElBQUksY0FBYyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDekMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUMzQjtTQUNKO0tBQ0o7O0lBRUQsSUFBSSxHQUFHLEdBQUcsU0FBUyxPQUFPLEVBQUU7OztRQUd4QixNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQzs7UUFFOUIsSUFBSSxjQUFjLFlBQVksUUFBUSxFQUFFOzs7WUFHcEMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ3BEO2FBQ0k7WUFDRCxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3REOztRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxHQUFHLEVBQUU7O1lBRTFCLElBQUksWUFBWSxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztZQUN4QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDMUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7YUFDMUM7U0FDSjtLQUNKLENBQUM7O0lBRUYsR0FBRyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7O0lBRXZCLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUU7UUFDMUIsR0FBRyxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztLQUM3QixNQUFNO1FBQ0gsR0FBRyxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztLQUMxRDtJQUNELElBQUksVUFBVSxFQUFFO1FBQ1osR0FBRyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUN6Qzs7SUFFRCxJQUFJLElBQUksR0FBRyxXQUFXLEVBQUUsQ0FBQztJQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFDbEMsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztJQUNoQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQzs7O0lBRzdCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQzs7O0lBRzNCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQzs7SUFFM0IsT0FBTyxHQUFHLENBQUM7Q0FDZDs7QUFFRCxTQUFTLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFO0lBQzVCLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDVCxPQUFPO0tBQ1Y7SUFDRCxLQUFLLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRTtRQUNyQixJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMvQjtLQUNKO0NBQ0o7O0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtJQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0QyxJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUN2QztDQUNKOzs7Ozs7QUFNRCxrQkFBZTs7SUFFWCxNQUFNLEVBQUUsTUFBTTs7O0lBR2QsTUFBTSxFQUFFLE1BQU07Q0FDakIsQ0FBQzs7QUN6R0YsU0FBUyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtJQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztDQUMxQjs7Ozs7QUFLRCxJQUFJLFFBQVEsR0FBRzs7Ozs7SUFLWCxPQUFPLEVBQUUsU0FBUyxJQUFJLEVBQUU7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDdEMsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pDLE9BQU87U0FDVjs7UUFFRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxTQUFTLENBQUM7O1FBRTlDLFFBQVEsSUFBSSxDQUFDLE1BQU07WUFDZixLQUFLLENBQUM7Z0JBQ0YsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ1osSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN4QztnQkFDRCxPQUFPO1lBQ1gsS0FBSyxDQUFDO2dCQUNGLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNaLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2pEO2dCQUNELE9BQU87WUFDWCxLQUFLLENBQUM7Z0JBQ0YsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ1osSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzFEO2dCQUNELE9BQU87WUFDWCxLQUFLLENBQUM7Z0JBQ0YsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ1osSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNuRTtnQkFDRCxPQUFPO1lBQ1gsS0FBSyxDQUFDO2dCQUNGLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNaLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzVFO2dCQUNELE9BQU87WUFDWDtnQkFDSSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDWixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDOUU7Z0JBQ0QsT0FBTztTQUNkO0tBQ0o7Ozs7Ozs7O0lBUUQsRUFBRSxFQUFFLFNBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7UUFDaEMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNsQixPQUFPO1NBQ1Y7UUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNqQixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ3ZCO2FBQ0k7WUFDRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFO2dCQUN4QixPQUFPO2FBQ1Y7U0FDSjtRQUNELElBQUksT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUM7UUFDbkQsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzs7UUFFN0IsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7Ozs7O0lBU0QsSUFBSSxFQUFFLFNBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7UUFDbEMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNsQixPQUFPO1NBQ1Y7UUFDRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsU0FBUyxPQUFPLEdBQUc7WUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN4QixNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztTQUNqQztRQUNELE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQzFDOzs7Ozs7Ozs7SUFTRCxNQUFNLEVBQUUsU0FBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRTtRQUNwQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2xCLE9BQU87U0FDVjtRQUNELElBQUksR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3pDOzs7Ozs7Ozs7SUFTRCxLQUFLLEVBQUUsU0FBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRTtRQUNuQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2xCLE9BQU87U0FDVjtRQUNELElBQUksR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ3pDOzs7Ozs7OztJQVFELE9BQU8sRUFBRSxTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUU7UUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDaEQ7Ozs7Ozs7O0lBUUQsS0FBSyxFQUFFLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRTtRQUM3QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztLQUM5Qzs7Ozs7Ozs7SUFRRCxHQUFHLEVBQUUsU0FBUyxJQUFJLEVBQUUsTUFBTSxFQUFFOztRQUV4QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7O1FBRTNELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLE9BQU87U0FDVjtRQUNELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2hCLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDakIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2xDLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFO29CQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN6QjthQUNKO1lBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztTQUM1Qjs7UUFFRCxPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELEdBQUcsRUFBRSxTQUFTLElBQUksRUFBRSxNQUFNLEVBQUU7UUFDeEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQzs7UUFFakMsSUFBSSxFQUFFLFFBQVE7WUFDVixFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsQixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUNELElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFO2dCQUMzQixPQUFPLElBQUksQ0FBQzthQUNmO1NBQ0o7S0FDSjtDQUNKOztBQ3hNRCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7O0FBRWIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztBQUNqQyxJQUFJLGFBQWEsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDOzs7Ozs7QUFNdkMsSUFBSUMsTUFBSSxHQUFHOzs7Ozs7O0lBT1AsT0FBTyxFQUFFLFlBQVk7UUFDakIsT0FBTyxFQUFFLElBQUksQ0FBQztLQUNqQjs7Ozs7Ozs7SUFRRCxpQkFBaUIsRUFBRSxVQUFVLElBQUksRUFBRSxRQUFRLEVBQUU7UUFDekMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2hDLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLElBQUksYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7O1FBRXhDLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixNQUFNLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtZQUNqQyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7Z0JBQ2YsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ3ZCO1lBQ0QsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xCLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkI7UUFDRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDOUQ7Ozs7Ozs7OztJQVNELE1BQU0sRUFBRSxVQUFVLE1BQU0sRUFBRSxNQUFNLEVBQUU7UUFDOUIsSUFBSSxNQUFNLEVBQUU7WUFDUixLQUFLLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRTtnQkFDckIsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMvQjthQUNKO1NBQ0o7UUFDRCxPQUFPLE1BQU0sQ0FBQztLQUNqQjs7Ozs7Ozs7O0lBU0QsUUFBUSxFQUFFLFVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRTtRQUNoQyxJQUFJLE1BQU0sRUFBRTtZQUNSLEtBQUssSUFBSSxRQUFRLElBQUksTUFBTSxFQUFFO2dCQUN6QixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTLEVBQUU7b0JBQ2hDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ3ZDO2FBQ0o7U0FDSjtRQUNELE9BQU8sTUFBTSxDQUFDO0tBQ2pCOzs7Ozs7Ozs7SUFTRCxrQkFBa0IsRUFBRSxVQUFVLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO1FBQ3BELElBQUksTUFBTSxFQUFFO1lBQ1IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3RDLElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUN2QztTQUNKO1FBQ0QsT0FBTyxNQUFNLENBQUM7S0FDakI7Ozs7Ozs7OztJQVNELG9CQUFvQixFQUFFLFVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUU7UUFDdEQsSUFBSSxNQUFNLEVBQUU7WUFDUixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDdEMsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUU7b0JBQzFCLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ3ZDO2FBQ0o7U0FDSjtRQUNELE9BQU8sTUFBTSxDQUFDO0tBQ2pCOzs7Ozs7O0lBT0QsSUFBSSxFQUFFLFVBQVUsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7UUFDcEMsSUFBSSxFQUFFLEdBQUcsSUFBSSxRQUFRLENBQUMsRUFBRTtZQUNwQixPQUFPO1NBQ1Y7UUFDRCxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLE9BQU8sS0FBSyxhQUFhLEVBQUU7WUFDOUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDbEM7YUFDSSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFO1lBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDMUM7U0FDSjthQUNJO1lBQ0QsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDekIsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDOUM7YUFDSjtTQUNKO0tBQ0o7Ozs7Ozs7O0lBUUQsUUFBUSxFQUFFLFVBQVUsR0FBRyxFQUFFO1FBQ3JCLE9BQU8sR0FBRyxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUM5Qjs7Ozs7Ozs7SUFRRCxPQUFPLEVBQUUsVUFBVSxHQUFHLEVBQUU7UUFDcEIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzdCOzs7Ozs7OztJQVFELFdBQVcsRUFBRSxVQUFVLEdBQUcsRUFBRTtRQUN4QixJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ04sT0FBTyxLQUFLLENBQUM7U0FDaEI7YUFDSTtZQUNELE9BQU8sR0FBRyxDQUFDLE1BQU0sS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUM7U0FDdEM7S0FDSjs7Ozs7OztJQU9ELEtBQUssRUFBRSxVQUFVLEdBQUcsRUFBRTtRQUNsQixJQUFJLENBQUNBLE1BQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckIsT0FBTyxHQUFHLENBQUM7U0FDZDthQUNJLElBQUlBLE1BQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEIsT0FBTyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDdEI7YUFDSSxJQUFJQSxNQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVCLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbkI7WUFDRCxPQUFPLEdBQUcsQ0FBQztTQUNkO2FBQ0k7WUFDRCxPQUFPQSxNQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUMvQjtLQUNKO0NBQ0o7O0FDOUxELElBQUksSUFBSSxHQUFHLFlBQVk7Ozs7SUFJbkIsSUFBSSxDQUFDLE9BQU8sR0FBR0EsTUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0NBQ2pDLENBQUM7O0FBRUYsSUFBSSxDQUFDLGdCQUFnQixHQUFHO0lBQ3BCLFVBQVUsSUFBSSxFQUFFO1FBQ1pBLE1BQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzNCO0NBQ0osQ0FBQzs7QUFFRkEsTUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDL0JBLE1BQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRUMsUUFBYSxDQUFDLENBQUM7O0FDeEIzQyxTQUFTLEdBQUcsQ0FBQyxPQUFPLEVBQUU7O0lBRWxCLElBQUksR0FBRyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7O0lBRS9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzs7Ozs7SUFLN0IsR0FBRyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxJQUFJLE1BQU0sQ0FBQzs7SUFFbEQsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFOztRQUVwQixHQUFHLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxDQUFDLGdCQUFnQixFQUFFO2dCQUNwQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ2pDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2xEO2lCQUNJO2dCQUNELE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDNUI7U0FDSixDQUFDO0tBQ0w7SUFDRCxHQUFHLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxFQUFFO1FBQ3JCLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUU7WUFDbkIsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDeEM7YUFDSTtZQUNELE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbEQ7S0FDSixDQUFDO0lBQ0YsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO1FBQ2pCLEdBQUcsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztLQUNqQztJQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDbEI7O0FBRUQsY0FBZTtJQUNYLEdBQUcsRUFBRSxHQUFHO0NBQ1gsQ0FBQzs7QUNyQ0YsSUFBSSxZQUFZLENBQUM7O0FBRWpCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQzs7Ozs7O0FBTWhCLE1BQU0sQ0FBQyxZQUFZLEdBQUcsWUFBWTtJQUM5QixJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUU7UUFDdEIsSUFBSTtZQUNBLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLEVBQUUsRUFBRTtnQkFDTCxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7YUFDckI7U0FDSjtRQUNELE9BQU8sQ0FBQyxFQUFFO1lBQ04sWUFBWSxHQUFHLEtBQUssQ0FBQztTQUN4Qjs7S0FFSjtJQUNELE9BQU8sWUFBWSxDQUFDO0NBQ3ZCLENBQUM7O0FBRUYsTUFBTSxDQUFDLFNBQVMsR0FBRyxPQUFPLFNBQVMsS0FBSyxXQUFXLEdBQUcsS0FBSyxHQUFHLFNBQVMsQ0FBQzs7QUFFeEUsTUFBTSxDQUFDLFVBQVUsR0FBRyxPQUFPLFVBQVUsS0FBSyxXQUFXLEdBQUcsS0FBSyxHQUFHLFVBQVUsQ0FBQzs7QUFFM0UsTUFBTSxDQUFDLFdBQVcsR0FBRyxPQUFPLFdBQVcsS0FBSyxXQUFXLEdBQUcsS0FBSyxHQUFHLFdBQVcsQ0FBQzs7QUFFOUUsTUFBTSxDQUFDLFdBQVcsR0FBRyxPQUFPLFdBQVcsS0FBSyxXQUFXLEdBQUcsS0FBSyxHQUFHLFdBQVcsQ0FBQzs7QUFFOUUsTUFBTSxDQUFDLFVBQVUsR0FBRyxPQUFPLFVBQVUsS0FBSyxXQUFXLEdBQUcsS0FBSyxHQUFHLFVBQVUsQ0FBQzs7QUFFM0UsTUFBTSxDQUFDLFlBQVksR0FBRyxPQUFPLFlBQVksS0FBSyxXQUFXLEdBQUcsS0FBSyxHQUFHLFlBQVksQ0FBQzs7QUFFakYsTUFBTSxDQUFDLFlBQVksR0FBRyxPQUFPLFlBQVksS0FBSyxXQUFXLEdBQUcsS0FBSyxHQUFHLFlBQVksQ0FBQzs7QUFFakYsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ1gsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7SUFDL0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztDQUNkO0tBQ0ksSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7SUFDcEMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztDQUNkOzs7QUFHRCxNQUFNLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDLHFCQUFxQjtPQUMvQyxDQUFDLENBQUMsdUJBQXVCO09BQ3pCLENBQUMsQ0FBQyx3QkFBd0I7T0FDMUIsQ0FBQyxDQUFDLDJCQUEyQjtPQUM3QixVQUFVLElBQUksQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDOztBQUVoRCxNQUFNLENBQUMsWUFBWSxHQUFHLFlBQVk7SUFDOUIsT0FBTyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0NBQzNDLENBQUM7O0FBRUYsTUFBTSxDQUFDLFdBQVcsR0FBRyxZQUFZO0lBQzdCLE9BQU8sSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDeEIsQ0FBQzs7QUFFRixNQUFNLENBQUMsT0FBTyxHQUFHO0lBQ2IsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO0NBQ25CLENBQUM7O0FBRUYsTUFBTSxDQUFDLGdCQUFnQixHQUFHLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0lBQzdELEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0NBQ2hELENBQUM7O0FBRUYsTUFBTSxDQUFDLG1CQUFtQixHQUFHLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7SUFDcEQsR0FBRyxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztDQUN2QyxDQUFDOztBQy9DRixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7SUFDbkMsbUNBQW1DOzs7OztRQUsvQixLQUFLLEVBQUUsSUFBSTs7UUFFWCxNQUFNLEVBQUUsRUFBRTs7UUFFVixRQUFRLEVBQUUsS0FBSzs7UUFFZixLQUFLLEVBQUUsQ0FBQzs7UUFFUixPQUFPLEVBQUUsS0FBSzs7UUFFZCxXQUFXLEVBQUUsQ0FBQztLQUNqQixDQUFDO0NBQ0w7O0FBRUQ7Ozs7OztJQU1JLFdBQVcsRUFBRSxVQUFVLFFBQVEsRUFBRTtRQUM3QixRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxQjtLQUNKOzs7OztJQUtELE9BQU8sRUFBRSxVQUFVLElBQUksRUFBRTtRQUNyQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxQjtLQUNKOzs7OztJQUtELFVBQVUsRUFBRSxVQUFVLElBQUksRUFBRTtRQUN4QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDOUI7S0FDSjs7Ozs7O0lBTUQsY0FBYyxFQUFFLFVBQVUsUUFBUSxFQUFFO1FBQ2hDLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdCO1FBQ0QsUUFBUSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7S0FDN0I7O0lBRUQsT0FBTyxFQUFFLFlBQVk7O1FBRWpCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3pDLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzlCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDeEIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQzs7UUFFdkIsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFCLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7OztZQUd0QyxJQUFJLENBQUMsRUFBRTtnQkFDSCxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QixhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVCO1NBQ0o7OztRQUdELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUc7WUFDdEIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFO2dCQUN2QixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEIsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNaLEdBQUcsRUFBRSxDQUFDO2FBQ1QsTUFBTTtnQkFDSCxDQUFDLEVBQUUsQ0FBQzthQUNQO1NBQ0o7O1FBRUQsR0FBRyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQixhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVDOztRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDOztRQUVsQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQzs7UUFFN0IsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDdkI7S0FDSjs7OztJQUlELEtBQUssRUFBRSxZQUFZO1FBQ2YsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDOztRQUVoQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7UUFFeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7O1FBRXJCLElBQUkscUJBQXFCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDOztRQUV6RCxTQUFTLElBQUksR0FBRztZQUNaLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTs7Z0JBRWYscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7O2dCQUU1QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDZixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ2xCO2FBQ0o7U0FDSjs7UUFFRCxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7S0FFL0I7Ozs7SUFJRCxJQUFJLEVBQUUsWUFBWTtRQUNkLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0tBQ3pCOzs7OztJQUtELEtBQUssRUFBRSxZQUFZO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztTQUN2QjtLQUNKOzs7OztJQUtELE1BQU0sRUFBRSxZQUFZO1FBQ2hCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7U0FDeEI7S0FDSjs7Ozs7SUFLRCxjQUFjLEVBQUUsWUFBWTtRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7Ozs7Ozs7SUFXRCxPQUFPLEVBQUUsVUFBVSxNQUFNLEVBQUUsT0FBTyxFQUFFO1FBQ2hDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ3hCLElBQUksUUFBUSxHQUFHLElBQUksUUFBUTtZQUN2QixNQUFNO1lBQ04sT0FBTyxDQUFDLElBQUk7WUFDWixPQUFPLENBQUMsTUFBTTtZQUNkLE9BQU8sQ0FBQyxNQUFNO1lBQ2QsT0FBTyxDQUFDLFlBQVk7U0FDdkIsQ0FBQztRQUNGLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzFCLE9BQU8sUUFBUSxDQUFDO0tBQ25CO0NBQ0osQ0FBQzs7QUMxTkYsYUFBYTs7QUMyQmIsSUFBSSxTQUFTLEdBQUcsVUFBVSxJQUFJLEVBQUU7O0lBRTVCLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDOztJQUVsQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs7Ozs7O0lBTXRCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7O0lBRWhDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0NBQzdCLENBQUM7O0FBRUYsU0FBUyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzs7QUFFcEQsU0FBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDOztBQUU1QyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxVQUFVLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFOztJQUV0RCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7O0lBRTVELElBQUksR0FBRyxLQUFLLFFBQVEsRUFBRTtRQUNsQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7O1FBRWpDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztTQUNoQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdEI7OztJQUdELElBQUksQ0FBQyxNQUFNLElBQUksR0FBRyxLQUFLLFFBQVEsRUFBRTtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3RCOztJQUVELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7QUFLRixTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxVQUFVLEtBQUssRUFBRTtJQUM1QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNwQixJQUFJLEtBQUssRUFBRTtRQUNQLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNyQztDQUNKLENBQUM7O0FBRUYsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBVSxJQUFJLEVBQUU7SUFDMUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2hDO0NBQ0osQ0FBQzs7QUFFRixTQUFTLENBQUMsU0FBUyxDQUFDLGtCQUFrQixHQUFHLFlBQVk7SUFDakQsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDZCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0tBQ2hFO0NBQ0osQ0FBQzs7Ozs7QUFLRixTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxVQUFVLEtBQUssRUFBRTtJQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztDQUM3QixDQUFDOzs7OztBQUtGLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLFVBQVUsS0FBSyxFQUFFO0lBQy9DLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRTtRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUM5QjtDQUNKLENBQUM7Ozs7Ozs7O0FBUUYsU0FBUyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsVUFBVSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtJQUNuRSxJQUFJLE9BQU8sR0FBRyxJQUFJLFNBQVMsQ0FBQztRQUN4QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7S0FDbEIsQ0FBQyxDQUFDOztJQUVILEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN6QyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUM5Qjs7SUFFRCxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7UUFDdEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMzQjs7SUFFRCxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sR0FBRyxTQUFTLENBQUM7O0lBRW5DLE9BQU8sT0FBTyxDQUFDO0NBQ2xCLENBQUM7Ozs7Ozs7O0FBUUYsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBVSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtJQUNyRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDekMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRTNCLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUM1QjtDQUNKLENBQUM7Ozs7Ozs7QUFPRixTQUFTLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxVQUFVLEtBQUssRUFBRSxLQUFLLEVBQUU7SUFDeEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3pDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUUzQixLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUMvQjtDQUNKLENBQUM7Ozs7Ozs7QUFPRixTQUFTLENBQUMsU0FBUyxDQUFDLGdCQUFnQixHQUFHLFVBQVUsS0FBSyxFQUFFLEtBQUssRUFBRTtJQUMzRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDekMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRTNCLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDbEM7Q0FDSixDQUFDOzs7Ozs7Ozs7O0FBVUYsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBVSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQy9ELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN6QyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUUzQixLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNuQztDQUNKLENBQUM7Ozs7OztBQU1GLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLFVBQVUsSUFBSSxFQUFFO0lBQ3ZDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN6QyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRTVCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQy9DO0NBQ0osQ0FBQzs7QUFFRixTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxZQUFZO0lBQ3BDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDekM7SUFDRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDdEIsT0FBTyxJQUFJLENBQUM7Q0FDZixDQUFDOztBQy9ORixJQUFJLGNBQWMsR0FBRztJQUNqQixtQkFBbUI7SUFDbkIsd0JBQXdCO0lBQ3hCLDBCQUEwQjtJQUMxQiwrQkFBK0I7SUFDL0IsMEJBQTBCO0lBQzFCLHlCQUF5QjtJQUN6Qix3QkFBd0I7SUFDeEIsK0JBQStCO0lBQy9CLHFCQUFxQjtJQUNyQixnQ0FBZ0M7SUFDaEMsd0JBQXdCO0lBQ3hCLG9CQUFvQjtJQUNwQixnQkFBZ0I7SUFDaEIsVUFBVTtDQUNiLENBQUM7O0FBRUYsSUFBSSxlQUFlLEdBQUc7SUFDbEIsa0JBQWtCO0lBQ2xCLDJCQUEyQjtDQUM5QixDQUFDOztBQUVGLFNBQVMsTUFBTSxDQUFDLEdBQUcsRUFBRTtJQUNqQixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDcEIsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDOzs7SUFHcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDNUMsSUFBSSxPQUFPLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUM1Qjs7SUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM3QyxJQUFJLElBQUksR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDbEQ7O0lBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLElBQUksRUFBRTtRQUNoQyxJQUFJLEVBQUUsSUFBSSxJQUFJLFVBQVUsQ0FBQyxFQUFFO1lBQ3ZCLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6QjtRQUNELE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzNCLENBQUM7O0lBRUYsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLElBQUksRUFBRTtRQUNoQyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMzQixDQUFDOztJQUVGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxZQUFZO1FBQ2pDLE9BQU8sRUFBRSxDQUFDO0tBQ2IsQ0FBQzs7SUFFRixTQUFTLGVBQWUsQ0FBQyxJQUFJLEVBQUU7UUFDM0IsSUFBSSxHQUFHLENBQUMsWUFBWSxFQUFFO1lBQ2xCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDTixHQUFHLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUM7YUFDekM7WUFDRCxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNOLEdBQUcsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQzthQUM1QztZQUNELFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7U0FDMUI7S0FDSjtDQUNKOztBQ2hFRDs7OztBQUlBLGFBQWU7O0lBRVgsZ0JBQWdCLGlCQUFpQixVQUFVO0lBQzNDLGtCQUFrQixlQUFlLFVBQVU7SUFDM0MsZ0JBQWdCLGlCQUFpQixVQUFVOzs7SUFHM0MsTUFBTSwyQkFBMkIsTUFBTTtJQUN2QyxLQUFLLDRCQUE0QixNQUFNO0lBQ3ZDLFNBQVMsd0JBQXdCLE1BQU07SUFDdkMsVUFBVSx1QkFBdUIsTUFBTTtJQUN2QyxTQUFTLHdCQUF3QixNQUFNO0lBQ3ZDLGNBQWMsbUJBQW1CLE1BQU07SUFDdkMsWUFBWSxxQkFBcUIsTUFBTTs7Ozs7Ozs7Ozs7OztJQWF2QyxJQUFJLDZCQUE2QixDQUFDO0lBQ2xDLEdBQUcsOEJBQThCLENBQUM7SUFDbEMsU0FBUyx3QkFBd0IsTUFBTTtJQUN2QyxtQkFBbUIsY0FBYyxNQUFNO0lBQ3ZDLFNBQVMsd0JBQXdCLE1BQU07SUFDdkMsbUJBQW1CLGNBQWMsTUFBTTtJQUN2QyxTQUFTLHdCQUF3QixNQUFNO0lBQ3ZDLG1CQUFtQixjQUFjLE1BQU07Ozs7O0lBS3ZDLFNBQVMsd0JBQXdCLE1BQU07SUFDdkMsbUJBQW1CLGNBQWMsTUFBTTtJQUN2QyxrQkFBa0IsZUFBZSxNQUFNOzs7Ozs7O0lBT3ZDLFFBQVEseUJBQXlCLE1BQU07SUFDdkMsY0FBYyxtQkFBbUIsTUFBTTtJQUN2QyxrQkFBa0IsZUFBZSxNQUFNO0lBQ3ZDLG9CQUFvQixhQUFhLE1BQU07OztJQUd2QyxhQUFhLG9CQUFvQixNQUFNO0lBQ3ZDLHFCQUFxQixZQUFZLE1BQU07OztJQUd2QyxhQUFhLG9CQUFvQixNQUFNO0lBQ3ZDLGFBQWEsb0JBQW9CLE1BQU07SUFDdkMsZUFBZSxrQkFBa0IsTUFBTTtJQUN2QyxlQUFlLGtCQUFrQixNQUFNO0lBQ3ZDLGNBQWMsbUJBQW1CLE1BQU07SUFDdkMsd0JBQXdCLFNBQVMsTUFBTTtJQUN2QyxjQUFjLG1CQUFtQixNQUFNO0lBQ3ZDLHdCQUF3QixTQUFTLE1BQU07SUFDdkMsV0FBVyxzQkFBc0IsTUFBTTs7O0lBR3ZDLFlBQVkscUJBQXFCLE1BQU07SUFDdkMsb0JBQW9CLGFBQWEsTUFBTTtJQUN2QyxvQkFBb0IsYUFBYSxNQUFNO0lBQ3ZDLDRCQUE0QixLQUFLLE1BQU07O0lBRXZDLFdBQVcsc0JBQXNCLE1BQU07SUFDdkMsV0FBVyxzQkFBc0IsTUFBTTtJQUN2QyxZQUFZLHFCQUFxQixNQUFNOztJQUV2QyxXQUFXLHNCQUFzQixNQUFNO0lBQ3ZDLFlBQVkscUJBQXFCLE1BQU07O0lBRXZDLHFCQUFxQixZQUFZLE1BQU07OztJQUd2QyxLQUFLLDRCQUE0QixNQUFNO0lBQ3ZDLElBQUksNkJBQTZCLE1BQU07SUFDdkMsY0FBYyxtQkFBbUIsTUFBTTs7Ozs7Ozs7Ozs7Ozs7SUFjdkMsU0FBUyx3QkFBd0IsTUFBTTtJQUN2QyxLQUFLLDRCQUE0QixNQUFNO0lBQ3ZDLE1BQU0sMkJBQTJCLE1BQU07SUFDdkMsWUFBWSxxQkFBcUIsTUFBTTtJQUN2QyxVQUFVLHVCQUF1QixNQUFNO0lBQ3ZDLFlBQVkscUJBQXFCLE1BQU07SUFDdkMsbUJBQW1CLGNBQWMsTUFBTTtJQUN2Qyx3QkFBd0IsU0FBUyxNQUFNO0lBQ3ZDLGVBQWUsa0JBQWtCLE1BQU07OztJQUd2QyxRQUFRLHlCQUF5QixDQUFDO0lBQ2xDLFlBQVkscUJBQXFCLE1BQU07SUFDdkMsYUFBYSxvQkFBb0IsTUFBTTtJQUN2QyxpQkFBaUIsZ0JBQWdCLE1BQU07SUFDdkMsYUFBYSxvQkFBb0IsTUFBTTs7O0lBR3ZDLEVBQUUsK0JBQStCLE1BQU07SUFDdkMsR0FBRyw4QkFBOEIsTUFBTTs7O0lBR3ZDLFVBQVUsdUJBQXVCLE1BQU07SUFDdkMsd0JBQXdCLFNBQVMsTUFBTTtJQUN2Qyx3QkFBd0IsU0FBUyxNQUFNO0lBQ3ZDLGNBQWMsbUJBQW1CLE1BQU07SUFDdkMsVUFBVSx1QkFBdUIsTUFBTTtJQUN2QyxXQUFXLHNCQUFzQixNQUFNO0lBQ3ZDLGVBQWUsa0JBQWtCLE1BQU07SUFDdkMsaUJBQWlCLGdCQUFnQixNQUFNO0lBQ3ZDLFVBQVUsdUJBQXVCLE1BQU07SUFDdkMsbUJBQW1CLGNBQWMsTUFBTTtJQUN2QyxZQUFZLHFCQUFxQixNQUFNO0lBQ3ZDLFlBQVkscUJBQXFCLE1BQU07SUFDdkMsdUJBQXVCLFVBQVUsTUFBTTtJQUN2Qyx1QkFBdUIsVUFBVSxNQUFNO0lBQ3ZDLFdBQVcsc0JBQXNCLE1BQU07SUFDdkMsa0JBQWtCLGVBQWUsTUFBTTtJQUN2QyxpQkFBaUIsZ0JBQWdCLE1BQU07SUFDdkMsaUJBQWlCLGdCQUFnQixNQUFNO0lBQ3ZDLGlCQUFpQixnQkFBZ0IsTUFBTTtJQUN2Qyw0QkFBNEIsS0FBSyxNQUFNO0lBQ3ZDLDRCQUE0QixLQUFLLE1BQU07SUFDdkMsZ0JBQWdCLGlCQUFpQixNQUFNO0lBQ3ZDLHVCQUF1QixVQUFVLE1BQU07SUFDdkMsc0JBQXNCLFdBQVcsTUFBTTtJQUN2QyxRQUFRLHlCQUF5QixNQUFNO0lBQ3ZDLFdBQVcsc0JBQXNCLE1BQU07O0lBRXZDLGlCQUFpQixnQkFBZ0IsTUFBTTtJQUN2QyxlQUFlLGtCQUFrQixNQUFNO0lBQ3ZDLGdCQUFnQixpQkFBaUIsTUFBTTtJQUN2QyxjQUFjLG1CQUFtQixNQUFNO0lBQ3ZDLGdCQUFnQixpQkFBaUIsTUFBTTtJQUN2QyxpQkFBaUIsZ0JBQWdCLE1BQU07SUFDdkMsYUFBYSxvQkFBb0IsTUFBTTtJQUN2QyxRQUFRLHlCQUF5QixNQUFNO0lBQ3ZDLFVBQVUsdUJBQXVCLE1BQU07SUFDdkMsU0FBUyx3QkFBd0IsTUFBTTtJQUN2QyxVQUFVLHVCQUF1QixNQUFNO0lBQ3ZDLFVBQVUsdUJBQXVCLE1BQU07SUFDdkMsWUFBWSxxQkFBcUIsTUFBTTtJQUN2QyxvQkFBb0IsYUFBYSxNQUFNOztJQUV2QyxxQkFBcUIsWUFBWSxNQUFNO0lBQ3ZDLGtCQUFrQixlQUFlLE1BQU07SUFDdkMsY0FBYyxtQkFBbUIsTUFBTTtJQUN2QyxPQUFPLDBCQUEwQixNQUFNO0lBQ3ZDLHFCQUFxQixZQUFZLE1BQU07SUFDdkMsc0JBQXNCLFdBQVcsTUFBTTs7Ozs7Ozs7SUFRdkMsMEJBQTBCLE9BQU8sTUFBTTs7O0lBR3ZDLFNBQVMsd0JBQXdCLE1BQU07SUFDdkMsT0FBTywwQkFBMEIsTUFBTTtJQUN2QyxNQUFNLDJCQUEyQixNQUFNOzs7SUFHdkMsb0JBQW9CLGNBQWMsTUFBTTs7O0lBR3hDLElBQUksNkJBQTZCLE1BQU07SUFDdkMsYUFBYSxvQkFBb0IsTUFBTTtJQUN2QyxLQUFLLDRCQUE0QixNQUFNO0lBQ3ZDLGNBQWMsbUJBQW1CLE1BQU07SUFDdkMsR0FBRyw4QkFBOEIsTUFBTTtJQUN2QyxZQUFZLHFCQUFxQixNQUFNO0lBQ3ZDLEtBQUssNEJBQTRCLE1BQU07OztJQUd2QyxlQUFlLGtCQUFrQixNQUFNO0lBQ3ZDLEtBQUssNEJBQTRCLE1BQU07SUFDdkMsR0FBRyw4QkFBOEIsTUFBTTtJQUN2QyxJQUFJLDZCQUE2QixNQUFNO0lBQ3ZDLFNBQVMsd0JBQXdCLE1BQU07SUFDdkMsZUFBZSxrQkFBa0IsTUFBTTs7OztJQUl2QyxzQkFBc0IsV0FBVyxNQUFNO0lBQ3ZDLHNCQUFzQixXQUFXLE1BQU07SUFDdkMsb0JBQW9CLGFBQWEsTUFBTTs7O0lBR3ZDLGVBQWUsb0JBQW9CLE1BQU07SUFDekMsYUFBYSxzQkFBc0IsTUFBTTtJQUN6QyxrQkFBa0IsaUJBQWlCLE1BQU07SUFDekMsMEJBQTBCLFNBQVMsTUFBTTtJQUN6QyxtQkFBbUIsZ0JBQWdCLE1BQU07SUFDekMsZ0NBQWdDLEdBQUcsTUFBTTtJQUN6Qyw4QkFBOEIsS0FBSyxNQUFNO0lBQ3pDLHVCQUF1QixZQUFZLE1BQU07SUFDekMsNEJBQTRCLE9BQU8sTUFBTTtJQUN6QyxXQUFXLHdCQUF3QixNQUFNO0lBQ3pDLGFBQWEsc0JBQXNCLE1BQU07SUFDekMsV0FBVyx3QkFBd0IsTUFBTTtJQUN6QyxlQUFlLG9CQUFvQixNQUFNO0lBQ3pDLGdCQUFnQixtQkFBbUIsTUFBTTtJQUN6QyxlQUFlLG9CQUFvQixNQUFNO0lBQ3pDLGlCQUFpQixrQkFBa0IsTUFBTTtJQUN6Qyx3QkFBd0IsV0FBVyxNQUFNO0lBQ3pDLGVBQWUsb0JBQW9CLE1BQU07OztJQUd6QyxLQUFLLDRCQUE0QixNQUFNO0lBQ3ZDLElBQUksNkJBQTZCLE1BQU07SUFDdkMsS0FBSyw0QkFBNEIsTUFBTTtJQUN2QyxNQUFNLDJCQUEyQixNQUFNO0lBQ3ZDLE9BQU8sMEJBQTBCLE1BQU07SUFDdkMsUUFBUSx5QkFBeUIsTUFBTTtJQUN2QyxNQUFNLDJCQUEyQixNQUFNO0lBQ3ZDLE1BQU0sMkJBQTJCLE1BQU07Ozs7SUFJdkMsSUFBSSw2QkFBNkIsTUFBTTtJQUN2QyxPQUFPLDBCQUEwQixNQUFNO0lBQ3ZDLElBQUksNkJBQTZCLE1BQU07SUFDdkMsSUFBSSw2QkFBNkIsTUFBTTtJQUN2QyxNQUFNLDJCQUEyQixNQUFNO0lBQ3ZDLFNBQVMsd0JBQXdCLE1BQU07SUFDdkMsU0FBUyx3QkFBd0IsTUFBTTs7O0lBR3ZDLE1BQU0sMkJBQTJCLE1BQU07SUFDdkMsUUFBUSx5QkFBeUIsTUFBTTtJQUN2QyxPQUFPLDBCQUEwQixNQUFNOzs7SUFHdkMsT0FBTywwQkFBMEIsTUFBTTtJQUN2QyxNQUFNLDJCQUEyQixNQUFNOzs7OztJQUt2QyxzQkFBc0IsV0FBVyxNQUFNO0lBQ3ZDLHFCQUFxQixZQUFZLE1BQU07SUFDdkMscUJBQXFCLFlBQVksTUFBTTtJQUN2QyxvQkFBb0IsYUFBYSxNQUFNOzs7SUFHdkMsa0JBQWtCLGVBQWUsTUFBTTtJQUN2QyxrQkFBa0IsZUFBZSxNQUFNO0lBQ3ZDLGNBQWMsbUJBQW1CLE1BQU07SUFDdkMsY0FBYyxtQkFBbUIsTUFBTTs7O0lBR3ZDLFVBQVUsdUJBQXVCLE1BQU07SUFDdkMsT0FBTywwQkFBMEIsTUFBTTs7SUFFdkMsZ0JBQWdCLGlCQUFpQixNQUFNO0lBQ3ZDLHdCQUF3QixTQUFTLE1BQU07SUFDdkMsMkJBQTJCLE1BQU0sTUFBTTtJQUN2QywyQkFBMkIsTUFBTSxNQUFNO0lBQ3ZDLDJCQUEyQixNQUFNLE1BQU07SUFDdkMsMkJBQTJCLE1BQU0sTUFBTTtJQUN2QywyQkFBMkIsTUFBTSxNQUFNO0lBQ3ZDLDJCQUEyQixNQUFNLE1BQU07SUFDdkMseUJBQXlCLFFBQVEsTUFBTTs7O0lBR3ZDLFFBQVEseUJBQXlCLE1BQU07SUFDdkMsUUFBUSx5QkFBeUIsTUFBTTtJQUN2QyxRQUFRLHlCQUF5QixNQUFNO0lBQ3ZDLFFBQVEseUJBQXlCLE1BQU07SUFDdkMsUUFBUSx5QkFBeUIsTUFBTTtJQUN2QyxRQUFRLHlCQUF5QixNQUFNO0lBQ3ZDLFFBQVEseUJBQXlCLE1BQU07SUFDdkMsUUFBUSx5QkFBeUIsTUFBTTtJQUN2QyxRQUFRLHlCQUF5QixNQUFNO0lBQ3ZDLFFBQVEseUJBQXlCLE1BQU07SUFDdkMsU0FBUyx3QkFBd0IsTUFBTTtJQUN2QyxTQUFTLHdCQUF3QixNQUFNO0lBQ3ZDLFNBQVMsd0JBQXdCLE1BQU07SUFDdkMsU0FBUyx3QkFBd0IsTUFBTTtJQUN2QyxTQUFTLHdCQUF3QixNQUFNO0lBQ3ZDLFNBQVMsd0JBQXdCLE1BQU07SUFDdkMsU0FBUyx3QkFBd0IsTUFBTTtJQUN2QyxTQUFTLHdCQUF3QixNQUFNO0lBQ3ZDLFNBQVMsd0JBQXdCLE1BQU07SUFDdkMsU0FBUyx3QkFBd0IsTUFBTTtJQUN2QyxTQUFTLHdCQUF3QixNQUFNO0lBQ3ZDLFNBQVMsd0JBQXdCLE1BQU07SUFDdkMsU0FBUyx3QkFBd0IsTUFBTTtJQUN2QyxTQUFTLHdCQUF3QixNQUFNO0lBQ3ZDLFNBQVMsd0JBQXdCLE1BQU07SUFDdkMsU0FBUyx3QkFBd0IsTUFBTTtJQUN2QyxTQUFTLHdCQUF3QixNQUFNO0lBQ3ZDLFNBQVMsd0JBQXdCLE1BQU07SUFDdkMsU0FBUyx3QkFBd0IsTUFBTTtJQUN2QyxTQUFTLHdCQUF3QixNQUFNO0lBQ3ZDLFNBQVMsd0JBQXdCLE1BQU07SUFDdkMsU0FBUyx3QkFBd0IsTUFBTTtJQUN2QyxjQUFjLG1CQUFtQixNQUFNOzs7SUFHdkMsTUFBTSwyQkFBMkIsTUFBTTtJQUN2QyxhQUFhLG9CQUFvQixNQUFNO0lBQ3ZDLGVBQWUsa0JBQWtCLE1BQU07OztJQUd2QyxVQUFVLHVCQUF1QixNQUFNO0lBQ3ZDLFVBQVUsdUJBQXVCLE1BQU07SUFDdkMsVUFBVSx1QkFBdUIsTUFBTTtJQUN2QyxRQUFRLHlCQUF5QixNQUFNO0lBQ3ZDLFFBQVEseUJBQXlCLE1BQU07SUFDdkMsUUFBUSx5QkFBeUIsTUFBTTtJQUN2QyxJQUFJLDZCQUE2QixNQUFNO0lBQ3ZDLFNBQVMsd0JBQXdCLE1BQU07SUFDdkMsU0FBUyx3QkFBd0IsTUFBTTtJQUN2QyxTQUFTLHdCQUF3QixNQUFNO0lBQ3ZDLFVBQVUsdUJBQXVCLE1BQU07SUFDdkMsVUFBVSx1QkFBdUIsTUFBTTtJQUN2QyxVQUFVLHVCQUF1QixNQUFNO0lBQ3ZDLFVBQVUsdUJBQXVCLE1BQU07SUFDdkMsWUFBWSxxQkFBcUIsTUFBTTs7O0lBR3ZDLDJCQUEyQixVQUFVLE1BQU07SUFDM0Msd0JBQXdCLGFBQWEsTUFBTTtJQUMzQywwQkFBMEIsV0FBVyxNQUFNO0lBQzNDLHdCQUF3QixhQUFhLE1BQU07SUFDM0MsOEJBQThCLE9BQU8sTUFBTTtJQUMzQywyQkFBMkIsVUFBVSxNQUFNO0lBQzNDLGtDQUFrQyxHQUFHLE1BQU07OztJQUczQyxjQUFjLG1CQUFtQixNQUFNOzs7SUFHdkMsU0FBUyx3QkFBd0IsTUFBTTtJQUN2QyxZQUFZLHFCQUFxQixNQUFNO0lBQ3ZDLFVBQVUsdUJBQXVCLE1BQU07SUFDdkMsT0FBTywwQkFBMEIsTUFBTTtJQUN2QyxVQUFVLHVCQUF1QixNQUFNO0lBQ3ZDLFFBQVEseUJBQXlCLE1BQU07OztJQUd2QyxXQUFXLHNCQUFzQixNQUFNO0lBQ3ZDLFlBQVkscUJBQXFCLE1BQU07O0lBRXZDLEtBQUssNEJBQTRCLE1BQU07SUFDdkMsT0FBTywwQkFBMEIsTUFBTTtJQUN2QyxNQUFNLDJCQUEyQixNQUFNO0lBQ3ZDLGlCQUFpQixnQkFBZ0IsTUFBTTtJQUN2QyxhQUFhLG9CQUFvQixNQUFNO0lBQ3ZDLGNBQWMsbUJBQW1CLE1BQU07SUFDdkMsYUFBYSxvQkFBb0IsTUFBTTs7SUFFdkMsa0JBQWtCLGVBQWUsTUFBTTtJQUN2QyxtQkFBbUIsY0FBYyxNQUFNO0lBQ3ZDLDRCQUE0QixLQUFLLE1BQU07SUFDdkMscUJBQXFCLFlBQVksTUFBTTtJQUN2Qyx1QkFBdUIsVUFBVSxNQUFNO0lBQ3ZDLHNCQUFzQixXQUFXLE1BQU07SUFDdkMsdUJBQXVCLFVBQVUsTUFBTTtJQUN2Qyx1QkFBdUIsVUFBVSxNQUFNO0lBQ3ZDLHlCQUF5QixRQUFRLE1BQU07O0lBRXZDLGtDQUFrQyxhQUFhLE1BQU07SUFDckQsa0NBQWtDLGFBQWEsTUFBTTtJQUNyRCxvQ0FBb0MsV0FBVyxNQUFNO0lBQ3JELDRDQUE0QyxHQUFHLE1BQU07O0lBRXJELGlCQUFpQixnQkFBZ0IsTUFBTTtJQUN2QyxnQkFBZ0IsaUJBQWlCLE1BQU07SUFDdkMsa0JBQWtCLGVBQWUsTUFBTTtJQUN2Qyx3QkFBd0IsU0FBUyxNQUFNOztJQUV2QyxJQUFJLDZCQUE2QixDQUFDOztJQUVsQyxvQkFBb0Isd0JBQXdCLE1BQU07SUFDbEQsaUNBQWlDLFdBQVcsTUFBTTtJQUNsRCx5Q0FBeUMsR0FBRyxNQUFNO0lBQ2xELGlDQUFpQyxXQUFXLE1BQU07SUFDbEQsdUJBQXVCLHFCQUFxQixNQUFNOztJQUVsRCxtQkFBbUIsY0FBYyxNQUFNO0lBQ3ZDLG9CQUFvQixhQUFhLE1BQU07SUFDdkMscUJBQXFCLFlBQVksTUFBTTs7SUFFdkMsNkJBQTZCLElBQUksTUFBTTs7O0lBR3ZDLG1CQUFtQixjQUFjLE1BQU07SUFDdkMsOEJBQThCLEdBQUcsTUFBTTtJQUN2QyxrQkFBa0IsZUFBZSxNQUFNO0lBQ3ZDLGtDQUFrQyxHQUFHLE1BQU07SUFDM0MscUJBQXFCLFlBQVksTUFBTTtDQUMxQyxDQUFDOztBQ25hRjs7Ozs7QUFLQSxJQUFJLFVBQVUsR0FBRyxZQUFZOzs7OztJQUt6QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQzs7Ozs7SUFLakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7O0lBRWpCLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0NBQ3BCLENBQUM7Ozs7Ozs7QUFPRixVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxVQUFVLEdBQUcsRUFBRTtJQUN6QyxJQUFJLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixPQUFPLEtBQUssQ0FBQztDQUNoQixDQUFDOzs7Ozs7OztBQVFGLFVBQVUsQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUNoRCxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7UUFDVCxPQUFPO0tBQ1Y7SUFDRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLE9BQU8sSUFBSSxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUU7UUFDMUIsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDakIsTUFBTSxFQUFFLENBQUM7S0FDWjtJQUNELElBQUksSUFBSSxFQUFFO1FBQ04sSUFBSSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1NBQ3JCO2FBQ0k7WUFDRCxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUNsQixLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztTQUNyQjtRQUNELEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0tBQ3JCO1NBQ0k7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3BCO0NBQ0osQ0FBQzs7QUFFRixVQUFVLENBQUMsU0FBUyxDQUFDLGlCQUFpQixHQUFHLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRTtJQUMxRCxJQUFJLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNyQixJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1AsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7S0FDckI7U0FDSTtRQUNELElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0tBQ3JCO0lBQ0QsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7O0lBRWxCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztDQUNsQixDQUFDOzs7Ozs7QUFNRixVQUFVLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxVQUFVLEtBQUssRUFBRTtJQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtRQUNaLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7S0FDakM7U0FDSTtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUN2QixLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7S0FDckI7SUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDbEIsQ0FBQzs7Ozs7O0FBTUYsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsVUFBVSxLQUFLLEVBQUU7SUFDM0MsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztJQUN0QixJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ3RCLElBQUksSUFBSSxFQUFFO1FBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7S0FDcEI7U0FDSTs7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztLQUNwQjtJQUNELElBQUksSUFBSSxFQUFFO1FBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7S0FDcEI7U0FDSTs7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztLQUNwQjtJQUNELEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDL0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0NBQ2xCLENBQUM7Ozs7Ozs7QUFPRixVQUFVLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRTtJQUMzQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7UUFDVCxPQUFPO0tBQ1Y7SUFDRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLE9BQU8sSUFBSSxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUU7UUFDMUIsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDakIsTUFBTSxFQUFFLENBQUM7S0FDWjtJQUNELElBQUksSUFBSSxFQUFFO1FBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDckI7Q0FDSixDQUFDOzs7OztBQUtGLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLFlBQVk7SUFDdkMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUMxQjtDQUNKLENBQUM7Ozs7O0FBS0YsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsWUFBWTtJQUN2QyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDWCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0tBQzFCO0NBQ0osQ0FBQzs7Ozs7O0FBTUYsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFHLEVBQUU7SUFDeEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO1FBQ1QsT0FBTztLQUNWO0lBQ0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNyQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixPQUFPLElBQUksSUFBSSxNQUFNLElBQUksR0FBRyxFQUFFO1FBQzFCLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2pCLE1BQU0sRUFBRSxDQUFDO0tBQ1o7SUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDckIsQ0FBQzs7Ozs7O0FBTUYsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBVSxLQUFLLEVBQUU7SUFDNUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNyQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixPQUFPLElBQUksRUFBRTtRQUNULElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUU7WUFDdEIsT0FBTyxNQUFNLENBQUM7U0FDakI7UUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNqQixNQUFNLEVBQUUsQ0FBQztLQUNaO0NBQ0osQ0FBQzs7Ozs7QUFLRixVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxZQUFZO0lBQ3RDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztDQUN2QixDQUFDOzs7OztBQUtGLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLFlBQVk7SUFDdkMsT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQztDQUM3QixDQUFDOzs7Ozs7QUFNRixVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUU7SUFDbEQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNyQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDWixJQUFJLFdBQVcsR0FBRyxPQUFPLE9BQU8sQ0FBQyxJQUFJLFdBQVcsQ0FBQztJQUNqRCxPQUFPLElBQUksRUFBRTtRQUNULElBQUksV0FBVyxFQUFFO1lBQ2IsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNyQzthQUNJO1lBQ0QsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDdkI7UUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNqQixHQUFHLEVBQUUsQ0FBQztLQUNUO0NBQ0osQ0FBQzs7Ozs7QUFLRixVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxZQUFZO0lBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7Q0FDcEIsQ0FBQzs7Ozs7O0FBTUYsVUFBVSxDQUFDLEtBQUssR0FBRyxVQUFVLEdBQUcsRUFBRTs7OztJQUk5QixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQzs7Ozs7SUFLakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Ozs7O0lBS2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3BCLENBQUM7O0FDeFBGLElBQUlDLEtBQUcsR0FBRyxVQUFVLE9BQU8sRUFBRTs7SUFFekIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDOztJQUU5QixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQzs7SUFFZixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7Q0FDakMsQ0FBQzs7Ozs7O0FBTUZBLEtBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFO0lBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0NBQ3hCLENBQUM7Ozs7OztBQU1GQSxLQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUU7SUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2hDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDOUIsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFOztZQUVqQyxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3hDOztRQUVELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0tBQzFCO0NBQ0osQ0FBQzs7Ozs7O0FBTUZBLEtBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLFVBQVUsR0FBRyxFQUFFO0lBQy9CLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTs7UUFFL0IsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakM7O1FBRUQsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDO0tBQ3RCO0NBQ0osQ0FBQzs7Ozs7QUFLRkEsS0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUU7SUFDbEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixJQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUssV0FBVyxFQUFFO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM1QjtDQUNKLENBQUM7Ozs7O0FBS0ZBLEtBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFlBQVk7SUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztDQUNsQixDQUFDOztBQzlFRjs7O0FBR0EsQUFFQSxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7O0FBRW5CLElBQUksY0FBYyxHQUFHO0lBQ2pCLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRCxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakQsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEQsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9DLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDNUQsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlELGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RCxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0QsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4RCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFH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QyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RCxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRCxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkQsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FB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QUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUs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QUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRTtJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTs7SUFFOUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO1FBQ1gsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztRQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2pCLE1BQU07UUFDSCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ25COztJQUVELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDM0IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7UUFFbEQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7OztRQUczQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhGLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDTixPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQzs7SUFFcEQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hELEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O0lBRXZELEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hELEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDOztRQUVsRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOzs7SUFHaEMsT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNoRixDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEQsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7O0lBR3ZELElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQzs7SUFFM0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQzs7SUFFM0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQzs7SUFFNUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1QyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdkMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7O0lBRzFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7OztJQUdsQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7OztJQUdsQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7OztJQUduQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUN6QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ3pDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRXpDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7QUFNekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDOzs7Ozs7Ozs7QUFTckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7O0lBRXZCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtRQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDckQsTUFBTTtRQUNILEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztRQUVqRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3ZELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDdkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7UUFFekQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNqRDs7SUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtJQUN2QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNyQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDUCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDYixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDYixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQzs7SUFFbEIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUU7O0lBRW5ELEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2QsQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUNULENBQUMsSUFBSSxHQUFHLENBQUM7SUFDVCxDQUFDLElBQUksR0FBRyxDQUFDOztJQUVULENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOzs7SUFHakQsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7OztJQUd0RSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0Ms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Q0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbkI7OztJQUdELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFOztJQUVoRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7UUFFVixFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7O0FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDVixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDVixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7O1FBRVYsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN0QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdB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QyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMVYsQ0FBQzs7QUM3NkJGOztBQUVBLEFBYUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDSyxRQUFRLENBQUMsQ0FBQzs7QUFFM0IsQUFHQSxJQUFJLFVBQVUs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QUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7O0FBT0YsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7QUFPRixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7Ozs7OztBQU0vQixPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFB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TSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRWYsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDOztJQUUzQyxRQUFRLEtBQUs7UUFDVCxLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FB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RyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7O0FBT0YsVUFBVSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ3JDLENBQUM7Ozs7OztBQU1GLFVBQVUsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDMUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMvQixDQUFDOzs7Ozs7Ozs7OztBQVdGLFVBQVUsQ0FBQyxJQUFJLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsVUFBVSxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMs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QUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsVUFBVSxDQUFDLFNBQVMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFOztJQUU1QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzs7SUFFbEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDWixJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0lBQ3ZCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOztJQUU1QixJQUFJLEtBQUssR0FBRyxDQUFDLEtBQUssSUFBSSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7Ozs7OztJQU0zQyxRQUFRLEtBQUs7UUFDVCxLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFN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OztJQVFELE9BQU8sRUFBRSxTQUFTLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELE9BQU8sRUFBRSxTQUFTLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELE9BQU8sRUFBRSxTQUFTLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELFNBQVMsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJ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SUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7O1FBRTFCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQzNCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOztRQUUzQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztlQUNqRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1RTs7Ozs7OztJQU9ELFlBQVksRUFBRSxVQUFVLENBQUMsRUFBRTtRQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7UUFFMUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQzs7UUFFakIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7ZUFDeEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkU7Ozs7O0lBS0QsUUFBUSxFQUFFLFlBQVk7UUFDbEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7ZUFDM0QsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdEU7Ozs7OztJQU1ELGNBQWMsRUFBRSxVQUFVLE1BQU0sRUFBRTtRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNwQzs7Ozs7OztJQU9ELGFBQWEsRUFBRSxDQUFDLFlBQVk7O1FBRXhCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOztRQUV2QixPQUFPLFVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRTtZQUM3QixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUMzQixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7WUFFM0IsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzs7WUFFckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFcEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFcEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFckUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3JCLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7WUFFMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1lBRTFGLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7O1lBRXZCLE9BQU8sSUFBSSxDQUFDO1NBQ2YsQ0FBQztLQUNMLEdBQUc7Ozs7OztJQU1KLGVBQWUsRUFBRSxVQUFVLE1BQU0sRUFBRTtRQUMvQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7UUFFekIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzs7UUFFckIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRWpCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFakIsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1lBRTdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdB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QUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7O1FBR3ZEQyxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7UUFFdEJBLFNBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOztRQUV0QkEsU0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7O1FBRXRCQSxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7UUFFdEJBLFNBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOztRQUV0QkEsU0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDN0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7OztRQUd0QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ25DLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDN0IsSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHO1lBQ1osSUFBSSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FB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LElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOzs7WUFHaENBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUU3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdDQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRTdDQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0NBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxD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QyxHQUFHLEdBQUcsVUFBVSxHQUFHLEVBQUUsS0FBSyxFQUFFO2dCQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUMzQixDQUFDOztZQUVGLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDM0MsQ0FBQztZQUNGLE1BQU07UUFDVixLQUFLLENBQUM7WUFDRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsR0FBRyxFQUFFLEdBQUcsRUFBRTtnQkFDM0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDMUIsT0FBTyxHQUFHLENBQUM7YUFDZCxDQUFDO1lBQ0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUU7Z0JBQzNCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQ3JCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0IsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFO2dCQUNsQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUNyQixNQUFNLElBQUksQ0FBQyxDQUFDO2dC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QUM7Z0JBQ3hCLElBQUksR0FBRyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztnQkFFNUIsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixHQUFHLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZCLEdBQUcsR0FBRyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDdkIsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOztZQUVoQyxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRztnQkFDZCxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUc7Z0JBQ2QsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHO2dCQUNkLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRztnQkFDZCxFQUFFLEdB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QyxFQUFFO0lBQzdDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTs7SUFFN0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOztJQUUzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHO1FBQy9DLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7UUFFdkMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDdEM7O0lBRUQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO0NBQ3hCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUMsQ0FBQztZQUMxRCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFELENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUM7OztZQUd4RSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7U0FDckI7O1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNqQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7WUFDdkIsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUM5QixN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LEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O29CQUU1QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztvQkFFMUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztvQkFDM0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO29CQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQzs7b0JBRS9CLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNyRCxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckQsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7O29CQUVyRCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUM3QixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUM3QixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FB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QUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQztZQUM3QixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUV0QyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3Qzs7O1FBR0QsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzs7UUFFbkIsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUUxQixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkM7OztRQUdELElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDOUIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUU3QixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVEOzs7UUFHRCxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2YsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JFLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0M7U0FDSjtRQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDekIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDOUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFB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Ozs7O0FBU0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7O0lBRTlCLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtRQUNYLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0tBQ2YsTUFBTTtRQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakI7O0lBRUQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7UUFHMUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7SUFFNUIsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNOLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDOztJQUVuQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFOztJQUU1QixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzs7SUFFYixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM1QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQyxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDakMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ25HLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3BCLENBQUM7O0FDNVBGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JBLEFBcUJBLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQzs7Ozs7OztBQU9mLEtBQUssQ0FBQyxNQUFNLEdBQUcsV0FBVztJQUN0QixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3RCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzVCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUUzQixJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDNUIsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNKLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNyQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQyxDQUFDOzs7Ozs7Ozs7O0FBVUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7O0FBVzNCLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsS0FBSyxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLEtBQUssQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQy9JLENBQUM7O0FDcFBGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZCQSxBQVNBLGVBQWU7SUFDWCxJQUFJLEVBQUUsSUFBSTtJQUNWLElBQUksRUFBRSxJQUFJO0lBQ1YsSUFBSSxFQUFFLElBQUk7SUFDVixJQUFJLEVBQUUsSUFBSTtJQUNWLEtBQUssRUFBRSxLQUFLO0lBQ1osSUFBSSxFQUFFLElBQUk7SUFDVixJQUFJLEVBQUUsSUFBSTtJQUNWLElBQUksRUFBRSxJQUFJ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QUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ3JDLENBQUM7Ozs7OztBQU1GLE9BQU8sQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDdEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMvQixDQUFDOzs7Ozs7Ozs7OztBQVdGLE9BQU8sQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFB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 diff --git a/dist/claygl.js b/dist/claygl.js index 1948dbfbc..afac091bd 100644 --- a/dist/claygl.js +++ b/dist/claygl.js @@ -1623,11 +1623,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 2 Dimensional Vector - * @name vec2 - */ - var vec2 = {}; /** @@ -2114,12 +2109,6 @@ vec2.forEach = (function() { }; })(); -/** - * @constructor - * @alias clay.Vector2 - * @param {number} x - * @param {number} y - */ var Vector2 = function(x, y) { x = x || 0; @@ -2842,36 +2831,6 @@ Vector2.transformMat4 = function(out, a, m) { // 2D Blend clip of blend tree // http://docs.unity3d.com/Documentation/Manual/2DBlending.html -/** - * @typedef {Object} clay.animation.Blend2DClip.IClipInput - * @property {clay.Vector2} position - * @property {clay.animation.Clip} clip - * @property {number} offset - */ - -/** - * 2d blending node in animation blend tree. - * output clip must have blend2D method - * @constructor - * @alias clay.animation.Blend2DClip - * @extends clay.animation.Clip - * - * @param {Object} [opts] - * @param {string} [opts.name] - * @param {Object} [opts.target] - * @param {number} [opts.life] - * @param {number} [opts.delay] - * @param {number} [opts.gap] - * @param {number} [opts.playbackRatio] - * @param {boolean|number} [opts.loop] If loop is a number, it indicate the loop count of animation - * @param {string|Function} [opts.easing] - * @param {Function} [opts.onframe] - * @param {Function} [opts.onfinish] - * @param {Function} [opts.onrestart] - * @param {object[]} [opts.inputs] - * @param {clay.Vector2} [opts.position] - * @param {clay.animation.Clip} [opts.output] - */ var Blend2DClip = function (opts) { opts = opts || {}; @@ -3026,11 +2985,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 3 Dimensional Vector - * @name vec3 - */ - var vec3 = {}; /** @@ -3677,11 +3631,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 4 Dimensional Vector - * @name vec4 - */ - var vec4 = {}; /** @@ -4203,11 +4152,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 3x3 Matrix - * @name mat3 - */ - var mat3 = {}; /** @@ -4856,11 +4800,9 @@ quat.setAxisAngle = function(out, axis, rad) { */ quat.rotateAxis = function (out,quat2,axis,rad) { - vec3.normalize(axis,axis); quat.setAxisAngle(quat2,axis,rad); quat.multiply(out,out,quat2); - }; /** @@ -4919,12 +4861,9 @@ quat.scale = vec4.scale; * @returns {quat} out */ quat.rotateX = function (out,rad) { - var quat2 =[0,0,0,1]; var axis = [1,0,0]; - quat.rotateAxis(out,quat2,axis,rad); - return out; }; @@ -4937,12 +4876,9 @@ quat.rotateX = function (out,rad) { * @returns {quat} out */ quat.rotateY = function (out,rad) { - var quat2 =[0,0,0,1]; var axis = [0,1,0]; - quat.rotateAxis(out,quat2,axis,rad); - return out; }; @@ -4957,9 +4893,7 @@ quat.rotateY = function (out,rad) { quat.rotateZ = function (out,rad) { var quat2 =[0,0,0,1]; var axis = [0,0,1]; - quat.rotateAxis(out,quat2,axis,rad); - return out; }; @@ -4974,7 +4908,6 @@ quat.rotateZ = function (out,rad) { */ quat.calculateW = function (out, a) { var x = a[0], y = a[1], z = a[2]; - out[0] = x; out[1] = y; out[2] = z; @@ -5180,7 +5113,6 @@ quat.fromMat3 = function(out, m) { // Sampler clip is especially for the animation sampler in glTF // Use Typed Array can reduce a lot of heap memory -// lerp function with offset in large array function vec3lerp(out, a, b, t, oa, ob) { var ax = a[oa]; var ay = a[oa + 1]; @@ -6072,12 +6004,6 @@ var util$1 = { } }; -/** - * Base class of all objects - * @constructor - * @alias clay.core.Base - * @mixes clay.core.mixin.notifier - */ var Base = function () { /** * @type {number} @@ -6209,28 +6135,6 @@ vendor.removeEventListener = function (dom, type, func) { dom.removeEventListener(type, func); }; -/** - * Animation is global timeline that schedule all clips. each frame animation will set the time of clips to current and update the states of clips - * @constructor clay.Timeline - * @extends clay.core.Base - * - * @example - * var animation = new clay.Timeline(); - * var node = new clay.Node(); - * animation.animate(node.position) - * .when(1000, { - * x: 500, - * y: 500 - * }) - * .when(2000, { - * x: 100, - * y: 100 - * }) - * .when(3000, { - * z: 10 - * }) - * .start('spline'); - */ var Timeline = Base.extend(function () { return /** @lends clay.Timeline# */{ /** @@ -6426,27 +6330,6 @@ var Timeline = Base.extend(function () { // DEPRECATED -/** - * - * Animation clip that manage a collection of {@link clay.animation.SamplerTrack} - * @constructor - * @alias clay.animation.TrackClip - * - * @extends clay.animation.Clip - * @param {Object} [opts] - * @param {string} [opts.name] - * @param {Object} [opts.target] - * @param {number} [opts.life] - * @param {number} [opts.delay] - * @param {number} [opts.gap] - * @param {number} [opts.playbackRatio] - * @param {boolean|number} [opts.loop] If loop is a number, it indicate the loop count of animation - * @param {string|Function} [opts.easing] - * @param {Function} [opts.onframe] - * @param {Function} [opts.onfinish] - * @param {Function} [opts.onrestart] - * @param {Array.} [opts.tracks] - */ var TrackClip = function (opts) { opts = opts || {}; @@ -7389,11 +7272,6 @@ LinkedList.Entry = function (val) { this.prev = null; }; -/** - * LRU Cache - * @constructor - * @alias clay.core.LRU - */ var LRU$1 = function (maxSize) { this._list = new LinkedList(); @@ -9702,11 +9580,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 4x4 Matrix - * @name mat4 - */ - var mat4 = {}; /** @@ -10622,7 +10495,6 @@ mat4.frob = function (a) { // TODO Resources like shader, texture, geometry reference management // Trace and find out which shader, texture, geometry can be destroyed -// Light header Shader['import'](prezGlsl); var mat4Create = mat4.create; @@ -11951,13 +11823,6 @@ Renderer.DEPTH_BUFFER_BIT = glenum.DEPTH_BUFFER_BIT; */ Renderer.STENCIL_BUFFER_BIT = glenum.STENCIL_BUFFER_BIT; -/** - * @constructor - * @alias clay.Vector3 - * @param {number} x - * @param {number} y - * @param {number} z - */ var Vector3 = function(x, y, z) { x = x || 0; @@ -12948,14 +12813,6 @@ Object.defineProperties(Vector3, { } }); -/** - * @constructor - * @alias clay.Quaternion - * @param {number} x - * @param {number} y - * @param {number} z - * @param {number} w - */ var Quaternion = function (x, y, z, w) { x = x || 0; @@ -13733,10 +13590,6 @@ Quaternion.fromEuler = function (out, v, order) { } }; -/** - * @constructor - * @alias clay.Matrix4 - */ var Matrix4 = function() { this._axisX = new Vector3(); @@ -15521,12 +15374,6 @@ var Light = Node.extend(function(){ } }); -/** - * @constructor - * @alias clay.Plane - * @param {clay.Vector3} [normal] - * @param {number} [distance] - */ var Plane$1 = function(normal, distance) { /** * Normal of the plane @@ -16175,10 +16022,6 @@ Ray.prototype = { } }; -/** - * @constructor clay.Camera - * @extends clay.Node - */ var Camera = Node.extend(function () { return /** @lends clay.Camera# */ { /** @@ -18171,13 +18014,6 @@ Geometry.IndicesBuffer = GeometryBase.IndicesBuffer; Geometry.Attribute = Attribute; -/** - * @constructor clay.geometry.Plane - * @extends clay.Geometry - * @param {Object} [opt] - * @param {number} [opt.widthSegments] - * @param {number} [opt.heightSegments] - */ var Plane$3 = Geometry.extend( /** @lends clay.geometry.Plane# */ { @@ -18369,18 +18205,6 @@ function createPlane(pos, widthSegments, heightSegments) { return plane; } -/** - * @constructor clay.geometry.Sphere - * @extends clay.Geometry - * @param {Object} [opt] - * @param {number} [widthSegments] - * @param {number} [heightSegments] - * @param {number} [phiStart] - * @param {number} [phiLength] - * @param {number} [thetaStart] - * @param {number} [thetaLength] - * @param {number} [radius] - */ var Sphere$1 = Geometry.extend(/** @lends clay.geometry.Sphere# */ { dynamic: false, /** @@ -18504,17 +18328,6 @@ var Sphere$1 = Geometry.extend(/** @lends clay.geometry.Sphere# */ { } }); -/** - * @constructor clay.geometry.ParametricSurface - * @extends clay.Geometry - * @param {Object} [opt] - * @param {Object} [generator] - * @param {Function} generator.x - * @param {Function} generator.y - * @param {Function} generator.z - * @param {Array} [generator.u=[0, 1, 0.05]] - * @param {Array} [generator.v=[0, 1, 0.05]] - */ var ParametricSurface$1 = Geometry.extend( /** @lends clay.geometry.ParametricSurface# */ { @@ -18606,11 +18419,6 @@ var ParametricSurface$1 = Geometry.extend( * Base class for all textures like compressed texture, texture2d, texturecube * TODO mapping */ -/** - * @constructor - * @alias clay.Texture - * @extends clay.core.Base - */ var Texture = Base.extend( /** @lends clay.Texture# */ { /** * Texture width, readonly when the texture source is image @@ -19544,11 +19352,6 @@ function isImageRenderable(image) { return image.width > 0 && image.height > 0; } -/** - * @constructor - * @alias clay.Renderable - * @extends clay.Node - */ var Renderable = Node.extend(/** @lends clay.Renderable# */ { /** * @type {clay.Material} @@ -19751,10 +19554,6 @@ Renderable.CW = glenum.CW; */ Renderable.CCW = glenum.CCW; -/** - * @constructor clay.Mesh - * @extends clay.Renderable - */ var Mesh = Renderable.extend(/** @lends clay.Mesh# */ { /** * Used when it is a skinned mesh @@ -19808,10 +19607,6 @@ Mesh.FRONT_AND_BACK = glenum.FRONT_AND_BACK; Mesh.CW = glenum.CW; Mesh.CCW = glenum.CCW; -/** - * @constructor clay.camera.Perspective - * @extends clay.Camera - */ var Perspective$1 = Camera.extend(/** @lends clay.camera.Perspective# */{ /** * Vertical field of view in degrees @@ -19863,10 +19658,6 @@ var Perspective$1 = Camera.extend(/** @lends clay.camera.Perspective# */{ } }); -/** - * @constructor clay.camera.Orthographic - * @extends clay.Camera - */ var Orthographic$1 = Camera.extend( /** @lends clay.camera.Orthographic# */ { @@ -19929,7 +19720,6 @@ var Orthographic$1 = Camera.extend( var standardEssl = "\n@export clay.standard.chunk.varying\nvarying vec2 v_Texcoord;\nvarying vec3 v_Normal;\nvarying vec3 v_WorldPosition;\nvarying vec3 v_Barycentric;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\nvarying vec3 v_Tangent;\nvarying vec3 v_Bitangent;\n#endif\n#if defined(AOMAP_ENABLED)\nvarying vec2 v_Texcoord2;\n#endif\n#ifdef VERTEX_COLOR\nvarying vec4 v_Color;\n#endif\n@end\n@export clay.standard.chunk.light_header\n#ifdef AMBIENT_LIGHT_COUNT\n@import clay.header.ambient_light\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n@import clay.header.ambient_sh_light\n#endif\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n@import clay.header.ambient_cubemap_light\n#endif\n#ifdef POINT_LIGHT_COUNT\n@import clay.header.point_light\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n@import clay.header.directional_light\n#endif\n#ifdef SPOT_LIGHT_COUNT\n@import clay.header.spot_light\n#endif\n@end\n@export clay.standard.vertex\n#define SHADER_NAME standard\nuniform mat4 worldViewProjection : WORLDVIEWPROJECTION;\nuniform mat4 worldInverseTranspose : WORLDINVERSETRANSPOSE;\nuniform mat4 world : WORLD;\nuniform vec2 uvRepeat = vec2(1.0, 1.0);\nuniform vec2 uvOffset = vec2(0.0, 0.0);\nattribute vec3 position : POSITION;\nattribute vec2 texcoord : TEXCOORD_0;\n#if defined(AOMAP_ENABLED)\nattribute vec2 texcoord2 : TEXCOORD_1;\n#endif\nattribute vec3 normal : NORMAL;\nattribute vec4 tangent : TANGENT;\n#ifdef VERTEX_COLOR\nattribute vec4 a_Color : COLOR;\n#endif\nattribute vec3 barycentric;\n@import clay.standard.chunk.varying\n@import clay.chunk.skinning_header\nvoid main()\n{\n vec3 skinnedPosition = position;\n vec3 skinnedNormal = normal;\n vec3 skinnedTangent = tangent.xyz;\n#ifdef SKINNING\n @import clay.chunk.skin_matrix\n skinnedPosition = (skinMatrixWS * vec4(position, 1.0)).xyz;\n skinnedNormal = (skinMatrixWS * vec4(normal, 0.0)).xyz;\n skinnedTangent = (skinMatrixWS * vec4(tangent.xyz, 0.0)).xyz;\n#endif\n gl_Position = worldViewProjection * vec4(skinnedPosition, 1.0);\n v_Texcoord = texcoord * uvRepeat + uvOffset;\n v_WorldPosition = (world * vec4(skinnedPosition, 1.0)).xyz;\n v_Barycentric = barycentric;\n v_Normal = normalize((worldInverseTranspose * vec4(skinnedNormal, 0.0)).xyz);\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n v_Tangent = normalize((worldInverseTranspose * vec4(skinnedTangent, 0.0)).xyz);\n v_Bitangent = normalize(cross(v_Normal, v_Tangent) * tangent.w);\n#endif\n#ifdef VERTEX_COLOR\n v_Color = a_Color;\n#endif\n#if defined(AOMAP_ENABLED)\n v_Texcoord2 = texcoord2;\n#endif\n}\n@end\n@export clay.standard.fragment\n#define PI 3.14159265358979\n#define GLOSSINESS_CHANNEL 0\n#define ROUGHNESS_CHANNEL 0\n#define METALNESS_CHANNEL 1\n#define DIFFUSEMAP_ALPHA_ALPHA\n@import clay.standard.chunk.varying\nuniform mat4 viewInverse : VIEWINVERSE;\n#ifdef NORMALMAP_ENABLED\nuniform sampler2D normalMap;\n#endif\nuniform float normalScale: 1.0;\n#ifdef DIFFUSEMAP_ENABLED\nuniform sampler2D diffuseMap;\n#endif\n#ifdef SPECULARMAP_ENABLED\nuniform sampler2D specularMap;\n#endif\n#ifdef USE_ROUGHNESS\nuniform float roughness : 0.5;\n #ifdef ROUGHNESSMAP_ENABLED\nuniform sampler2D roughnessMap;\n #endif\n#else\nuniform float glossiness: 0.5;\n #ifdef GLOSSINESSMAP_ENABLED\nuniform sampler2D glossinessMap;\n #endif\n#endif\n#ifdef METALNESSMAP_ENABLED\nuniform sampler2D metalnessMap;\n#endif\n#ifdef OCCLUSIONMAP_ENABLED\nuniform sampler2D occlusionMap;\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\nuniform samplerCube environmentMap;\n #ifdef PARALLAX_CORRECTED\nuniform vec3 environmentBoxMin;\nuniform vec3 environmentBoxMax;\n #endif\n#endif\n#ifdef BRDFLOOKUP_ENABLED\nuniform sampler2D brdfLookup;\n#endif\n#ifdef EMISSIVEMAP_ENABLED\nuniform sampler2D emissiveMap;\n#endif\n#ifdef SSAOMAP_ENABLED\nuniform sampler2D ssaoMap;\nuniform vec4 viewport : VIEWPORT;\n#endif\n#ifdef AOMAP_ENABLED\nuniform sampler2D aoMap;\nuniform float aoIntensity;\n#endif\nuniform vec3 color : [1.0, 1.0, 1.0];\nuniform float alpha : 1.0;\n#ifdef ALPHA_TEST\nuniform float alphaCutoff: 0.9;\n#endif\n#ifdef USE_METALNESS\nuniform float metalness : 0.0;\n#else\nuniform vec3 specularColor : [0.1, 0.1, 0.1];\n#endif\nuniform vec3 emission : [0.0, 0.0, 0.0];\nuniform float emissionIntensity: 1;\nuniform float lineWidth : 0.0;\nuniform vec4 lineColor : [0.0, 0.0, 0.0, 0.6];\n#ifdef ENVIRONMENTMAP_PREFILTER\nuniform float maxMipmapLevel: 5;\n#endif\n@import clay.standard.chunk.light_header\n@import clay.util.calculate_attenuation\n@import clay.util.edge_factor\n@import clay.util.rgbm\n@import clay.util.srgb\n@import clay.plugin.compute_shadow_map\n@import clay.util.parallax_correct\n@import clay.util.ACES\nfloat G_Smith(float g, float ndv, float ndl)\n{\n float roughness = 1.0 - g;\n float k = roughness * roughness / 2.0;\n float G1V = ndv / (ndv * (1.0 - k) + k);\n float G1L = ndl / (ndl * (1.0 - k) + k);\n return G1L * G1V;\n}\nvec3 F_Schlick(float ndv, vec3 spec) {\n return spec + (1.0 - spec) * pow(1.0 - ndv, 5.0);\n}\nfloat D_Phong(float g, float ndh) {\n float a = pow(8192.0, g);\n return (a + 2.0) / 8.0 * pow(ndh, a);\n}\nfloat D_GGX(float g, float ndh) {\n float r = 1.0 - g;\n float a = r * r;\n float tmp = ndh * ndh * (a - 1.0) + 1.0;\n return a / (PI * tmp * tmp);\n}\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\nuniform float parallaxOcclusionScale : 0.02;\nuniform float parallaxMaxLayers : 20;\nuniform float parallaxMinLayers : 5;\nuniform sampler2D parallaxOcclusionMap;\nmat3 transpose(in mat3 inMat)\n{\n vec3 i0 = inMat[0];\n vec3 i1 = inMat[1];\n vec3 i2 = inMat[2];\n return mat3(\n vec3(i0.x, i1.x, i2.x),\n vec3(i0.y, i1.y, i2.y),\n vec3(i0.z, i1.z, i2.z)\n );\n}\nvec2 parallaxUv(vec2 uv, vec3 viewDir)\n{\n float numLayers = mix(parallaxMaxLayers, parallaxMinLayers, abs(dot(vec3(0.0, 0.0, 1.0), viewDir)));\n float layerHeight = 1.0 / numLayers;\n float curLayerHeight = 0.0;\n vec2 deltaUv = viewDir.xy * parallaxOcclusionScale / (viewDir.z * numLayers);\n vec2 curUv = uv;\n float height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n for (int i = 0; i < 30; i++) {\n curLayerHeight += layerHeight;\n curUv -= deltaUv;\n height = 1.0 - texture2D(parallaxOcclusionMap, curUv).r;\n if (height < curLayerHeight) {\n break;\n }\n }\n vec2 prevUv = curUv + deltaUv;\n float next = height - curLayerHeight;\n float prev = 1.0 - texture2D(parallaxOcclusionMap, prevUv).r - curLayerHeight + layerHeight;\n return mix(curUv, prevUv, next / (next - prev));\n}\n#endif\nvoid main() {\n vec4 albedoColor = vec4(color, alpha);\n#ifdef VERTEX_COLOR\n albedoColor *= v_Color;\n#endif\n#ifdef SRGB_DECODE\n albedoColor = sRGBToLinear(albedoColor);\n#endif\n vec3 eyePos = viewInverse[3].xyz;\n vec3 V = normalize(eyePos - v_WorldPosition);\n vec2 uv = v_Texcoord;\n#if defined(PARALLAXOCCLUSIONMAP_ENABLED) || defined(NORMALMAP_ENABLED)\n mat3 tbn = mat3(v_Tangent, v_Bitangent, v_Normal);\n#endif\n#ifdef PARALLAXOCCLUSIONMAP_ENABLED\n uv = parallaxUv(v_Texcoord, normalize(transpose(tbn) * -V));\n#endif\n#ifdef DIFFUSEMAP_ENABLED\n vec4 texel = texture2D(diffuseMap, uv);\n #ifdef SRGB_DECODE\n texel = sRGBToLinear(texel);\n #endif\n albedoColor.rgb *= texel.rgb;\n #ifdef DIFFUSEMAP_ALPHA_ALPHA\n albedoColor.a *= texel.a;\n #endif\n#endif\n#ifdef USE_METALNESS\n float m = metalness;\n #ifdef METALNESSMAP_ENABLED\n float m2 = texture2D(metalnessMap, uv)[METALNESS_CHANNEL];\n m = clamp(m2 + (m - 0.5) * 2.0, 0.0, 1.0);\n #endif\n vec3 baseColor = albedoColor.rgb;\n albedoColor.rgb = baseColor * (1.0 - m);\n vec3 spec = mix(vec3(0.04), baseColor, m);\n#else\n vec3 spec = specularColor;\n#endif\n#ifdef USE_ROUGHNESS\n float g = clamp(1.0 - roughness, 0.0, 1.0);\n #ifdef ROUGHNESSMAP_ENABLED\n float g2 = 1.0 - texture2D(roughnessMap, uv)[ROUGHNESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#else\n float g = glossiness;\n #ifdef GLOSSINESSMAP_ENABLED\n float g2 = texture2D(glossinessMap, uv)[GLOSSINESS_CHANNEL];\n g = clamp(g2 + (g - 0.5) * 2.0, 0.0, 1.0);\n #endif\n#endif\n#ifdef SPECULARMAP_ENABLED\n spec *= sRGBToLinear(texture2D(specularMap, uv)).rgb;\n#endif\n vec3 N = v_Normal;\n#ifdef DOUBLE_SIDED\n if (dot(N, V) < 0.0) {\n N = -N;\n }\n#endif\n#ifdef NORMALMAP_ENABLED\n if (dot(v_Tangent, v_Tangent) > 0.0) {\n vec3 normalTexel = texture2D(normalMap, uv).xyz;\n if (dot(normalTexel, normalTexel) > 0.0) { N = (normalTexel * 2.0 - 1.0);\n N = normalize(N * vec3(normalScale, normalScale, 1.0));\n tbn[1] = -tbn[1];\n N = normalize(tbn * N);\n }\n }\n#endif\n vec3 diffuseTerm = vec3(0.0, 0.0, 0.0);\n vec3 specularTerm = vec3(0.0, 0.0, 0.0);\n float ndv = clamp(dot(N, V), 0.0, 1.0);\n vec3 fresnelTerm = F_Schlick(ndv, spec);\n#ifdef AMBIENT_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += ambientLightColor[_idx_];\n }}\n#endif\n#ifdef AMBIENT_SH_LIGHT_COUNT\n for(int _idx_ = 0; _idx_ < AMBIENT_SH_LIGHT_COUNT; _idx_++)\n {{\n diffuseTerm += calcAmbientSHLight(_idx_, N) * ambientSHLightColor[_idx_];\n }}\n#endif\n#ifdef POINT_LIGHT_COUNT\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsPoint[POINT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfPointLights(v_WorldPosition, shadowContribsPoint);\n }\n#endif\n for(int _idx_ = 0; _idx_ < POINT_LIGHT_COUNT; _idx_++)\n {{\n vec3 lightPosition = pointLightPosition[_idx_];\n vec3 lc = pointLightColor[_idx_];\n float range = pointLightRange[_idx_];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(POINT_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsPoint[_idx_];\n }\n#endif\n vec3 li = lc * ndl * attenuation * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef DIRECTIONAL_LIGHT_COUNT\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsDir[DIRECTIONAL_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfDirectionalLights(v_WorldPosition, shadowContribsDir);\n }\n#endif\n for(int _idx_ = 0; _idx_ < DIRECTIONAL_LIGHT_COUNT; _idx_++)\n {{\n vec3 L = -normalize(directionalLightDirection[_idx_]);\n vec3 lc = directionalLightColor[_idx_];\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(DIRECTIONAL_LIGHT_SHADOWMAP_COUNT)\n if(shadowEnabled)\n {\n shadowContrib = shadowContribsDir[_idx_];\n }\n#endif\n vec3 li = lc * ndl * shadowContrib;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }}\n#endif\n#ifdef SPOT_LIGHT_COUNT\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n float shadowContribsSpot[SPOT_LIGHT_COUNT];\n if(shadowEnabled)\n {\n computeShadowOfSpotLights(v_WorldPosition, shadowContribsSpot);\n }\n#endif\n for(int i = 0; i < SPOT_LIGHT_COUNT; i++)\n {\n vec3 lightPosition = spotLightPosition[i];\n vec3 spotLightDirection = -normalize(spotLightDirection[i]);\n vec3 lc = spotLightColor[i];\n float range = spotLightRange[i];\n float a = spotLightUmbraAngleCosine[i];\n float b = spotLightPenumbraAngleCosine[i];\n float falloffFactor = spotLightFalloffFactor[i];\n vec3 L = lightPosition - v_WorldPosition;\n float dist = length(L);\n float attenuation = lightAttenuation(dist, range);\n L /= dist;\n float c = dot(spotLightDirection, L);\n float falloff;\n falloff = clamp((c - a) /(b - a), 0.0, 1.0);\n falloff = pow(falloff, falloffFactor);\n vec3 H = normalize(L + V);\n float ndl = clamp(dot(N, L), 0.0, 1.0);\n float ndh = clamp(dot(N, H), 0.0, 1.0);\n float shadowContrib = 1.0;\n#if defined(SPOT_LIGHT_SHADOWMAP_COUNT)\n if (shadowEnabled)\n {\n shadowContrib = shadowContribsSpot[i];\n }\n#endif\n vec3 li = lc * attenuation * (1.0 - falloff) * shadowContrib * ndl;\n diffuseTerm += li;\n specularTerm += li * fresnelTerm * D_Phong(g, ndh);\n }\n#endif\n vec4 outColor = albedoColor;\n outColor.rgb *= max(diffuseTerm, vec3(0.0));\n outColor.rgb += max(specularTerm, vec3(0.0));\n#ifdef AMBIENT_CUBEMAP_LIGHT_COUNT\n vec3 L = reflect(-V, N);\n float rough2 = clamp(1.0 - g, 0.0, 1.0);\n float bias2 = rough2 * 5.0;\n vec2 brdfParam2 = texture2D(ambientCubemapLightBRDFLookup[0], vec2(rough2, ndv)).xy;\n vec3 envWeight2 = spec * brdfParam2.x + brdfParam2.y;\n vec3 envTexel2;\n for(int _idx_ = 0; _idx_ < AMBIENT_CUBEMAP_LIGHT_COUNT; _idx_++)\n {{\n #ifdef SUPPORT_TEXTURE_LOD\n envTexel2 = RGBMDecode(textureCubeLodEXT(ambientCubemapLightCubemap[_idx_], L, bias2), 8.12);\n #else\n envTexel2 = RGBMDecode(textureCube(ambientCubemapLightCubemap[_idx_], L), 8.12);\n #endif\n outColor.rgb += ambientCubemapLightColor[_idx_] * envTexel2 * envWeight2;\n }}\n#endif\n#ifdef ENVIRONMENTMAP_ENABLED\n vec3 envWeight = g * fresnelTerm;\n vec3 L = reflect(-V, N);\n #ifdef PARALLAX_CORRECTED\n L = parallaxCorrect(L, v_WorldPosition, environmentBoxMin, environmentBoxMax);\n#endif\n #ifdef ENVIRONMENTMAP_PREFILTER\n float rough = clamp(1.0 - g, 0.0, 1.0);\n float bias = rough * maxMipmapLevel;\n #ifdef SUPPORT_TEXTURE_LOD\n vec3 envTexel = decodeHDR(textureCubeLodEXT(environmentMap, L, bias)).rgb;\n #else\n vec3 envTexel = decodeHDR(textureCube(environmentMap, L)).rgb;\n #endif\n #ifdef BRDFLOOKUP_ENABLED\n vec2 brdfParam = texture2D(brdfLookup, vec2(rough, ndv)).xy;\n envWeight = spec * brdfParam.x + brdfParam.y;\n #endif\n #else\n vec3 envTexel = textureCube(environmentMap, L).xyz;\n #endif\n outColor.rgb += envTexel * envWeight;\n#endif\n float aoFactor = 1.0;\n#ifdef SSAOMAP_ENABLED\n aoFactor = min(texture2D(ssaoMap, (gl_FragCoord.xy - viewport.xy) / viewport.zw).r, aoFactor);\n#endif\n#ifdef AOMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(aoMap, v_Texcoord2).r) * aoIntensity, 0.0, 1.0), aoFactor);\n#endif\n#ifdef OCCLUSIONMAP_ENABLED\n aoFactor = min(1.0 - clamp((1.0 - texture2D(occlusionMap, v_Texcoord).r), 0.0, 1.0), aoFactor);\n#endif\n outColor.rgb *= aoFactor;\n vec3 lEmission = emission;\n#ifdef EMISSIVEMAP_ENABLED\n lEmission *= texture2D(emissiveMap, uv).rgb;\n#endif\n outColor.rgb += lEmission * emissionIntensity;\n if(lineWidth > 0.)\n {\n outColor.rgb = mix(outColor.rgb, lineColor.rgb, (1.0 - edgeFactor(lineWidth)) * lineColor.a);\n }\n#ifdef ALPHA_TEST\n if (outColor.a < alphaCutoff) {\n discard;\n }\n#endif\n#ifdef TONEMAPPING\n outColor.rgb = ACESToneMapping(outColor.rgb);\n#endif\n#ifdef SRGB_ENCODE\n outColor = linearTosRGB(outColor);\n#endif\n gl_FragColor = encodeHDR(outColor);\n}\n@end\n@export clay.standardMR.vertex\n@import clay.standard.vertex\n@end\n@export clay.standardMR.fragment\n#define USE_METALNESS\n#define USE_ROUGHNESS\n@import clay.standard.fragment\n@end"; -// Import standard shader Shader['import'](standardEssl); var TEXTURE_PROPERTIES = ['diffuseMap', 'normalMap', 'roughnessMap', 'metalnessMap', 'emissiveMap', 'environmentMap', 'brdfLookup', 'ssaoMap', 'aoMap']; @@ -20303,10 +20093,6 @@ var library = { } }; -/** - * @constructor clay.Joint - * @extends clay.core.Base - */ var Joint = Base.extend( /** @lends clay.Joint# */ { @@ -20755,13 +20541,14 @@ library.template('clay.prez', Shader.source('clay.prez.vertex'), Shader.source(' library.template('clay.standard', Shader.source('clay.standard.vertex'), Shader.source('clay.standard.fragment')); library.template('clay.standardMR', Shader.source('clay.standardMR.vertex'), Shader.source('clay.standardMR.fragment')); +// TODO Must export a module and be used in the other modules. Or it will be tree shaked + /** * glTF Loader * Specification https://github.com/KhronosGroup/glTF/blob/master/specification/README.md * * TODO Morph targets */ -// Import builtin shader var semanticAttributeMap = { 'NORMAL': 'normal', 'POSITION': 'position', @@ -22000,19 +21787,6 @@ GLTFLoader.generateMeshName = function (meshes, idx, primitiveIdx) { return primitiveIdx === 0 ? meshName : (meshName + '$' + primitiveIdx); }; -/** - * @constructor clay.light.Directional - * @extends clay.Light - * - * @example - * var light = new clay.light.Directional({ - * intensity: 0.5, - * color: [1.0, 0.0, 0.0] - * }); - * light.position.set(10, 10, 10); - * light.lookAt(clay.Vector3.ZERO); - * scene.add(light); - */ var DirectionalLight = Light.extend(/** @lends clay.light.Directional# */ { /** * @type {number} @@ -22068,10 +21842,6 @@ var DirectionalLight = Light.extend(/** @lends clay.light.Directional# */ { } }); -/** - * @constructor clay.light.Point - * @extends clay.Light - */ var PointLight = Light.extend(/** @lends clay.light.Point# */ { /** * @type {number} @@ -22119,10 +21889,6 @@ var PointLight = Light.extend(/** @lends clay.light.Point# */ { } }); -/** - * @constructor clay.light.Spot - * @extends clay.Light - */ var SpotLight = Light.extend(/**@lends clay.light.Spot */ { /** * @type {number} @@ -22216,10 +21982,6 @@ var SpotLight = Light.extend(/**@lends clay.light.Spot */ { } }); -/** - * @constructor clay.light.Ambient - * @extends clay.Light - */ var AmbientLight = Light.extend({ castShadow: false @@ -23104,8 +22866,6 @@ var EnvironmentMapPass = Base.extend(function() { } }); -// http://msdn.microsoft.com/en-us/library/windows/desktop/bb943991(v=vs.85).aspx -// https://github.com/toji/webgl-texture-utils/blob/master/texture-util/dds.js var DDS_MAGIC = 0x20534444; var DDSD_MIPMAPCOUNT = 0x20000; @@ -23390,9 +23150,6 @@ var ret$1 = { } }; -/** - * @alias clay.util.texture - */ var textureUtil = { /** * @param {string|object} path @@ -23966,12 +23723,6 @@ cubemapUtil.generateNormalDistribution = function (roughnessLevels, sampleSize) }; // https://docs.unrealengine.com/latest/INT/Engine/Rendering/LightingAndShadows/AmbientCubemap/ -/** - * Ambient cubemap light provides specular parts of Image Based Lighting. - * Which is a basic requirement for Physically Based Rendering - * @constructor clay.light.AmbientCubemap - * @extends clay.Light - */ var AmbientCubemapLight = Light.extend({ /** @@ -24060,11 +23811,6 @@ var AmbientCubemapLight = Light.extend({ */ }); -/** - * Spherical Harmonic Ambient Light - * @constructor clay.light.AmbientSH - * @extends clay.Light - */ var AmbientSHLight = Light.extend({ castShadow: false, @@ -25097,10 +24843,6 @@ ShadowMapPass.VSM = 1; */ ShadowMapPass.PCF = 2; -/** - * @constructor clay.picking.RayPicking - * @extends clay.core.Base - */ var RayPicking = Base.extend(/** @lends clay.picking.RayPicking# */{ /** * Target scene @@ -25353,6 +25095,7 @@ var sh = {}; var targets$3 = ['px', 'nx', 'py', 'ny', 'pz', 'nz']; +// Project on gpu, but needs browser to support readPixels as Float32Array. function harmonics(normal, index){ var x = normal[0]; var y = normal[1]; @@ -26851,11 +26594,6 @@ var application = { } }; -/** - * @constructor - * @alias clay.async.Task - * @mixes clay.core.mixin.notifier - */ function Task() { this._fullfilled = false; this._rejected = false; @@ -26967,11 +26705,6 @@ Task.makeTask = function() { util$1.extend(Task.prototype, notifier); -/** - * @constructor - * @alias clay.async.TaskGroup - * @extends clay.async.Task - */ var TaskGroup = function () { Task.apply(this, arguments); @@ -27193,16 +26926,6 @@ TaskGroup.prototype.getTaskNumber = function (recursive) { } }; -// PENDING -// Use topological sort ? - -/** - * Node of graph based post processing. - * - * @constructor clay.compositor.CompositorNode - * @extends clay.core.Base - * - */ var CompositorNode = Base.extend(function () { return /** @lends clay.compositor.CompositorNode# */ { /** @@ -27436,10 +27159,6 @@ var CompositorNode = Base.extend(function () { } }); -/** - * @constructor clay.compositor.Graph - * @extends clay.core.Base - */ var Graph = Base.extend(function () { return /** @lends clay.compositor.Graph# */ { /** @@ -27572,13 +27291,6 @@ var Graph = Base.extend(function () { } }); -/** - * Compositor provide graph based post processing - * - * @constructor clay.compositor.Compositor - * @extends clay.compositor.Graph - * - */ var Compositor = Graph.extend(function() { return { // Output node @@ -27653,10 +27365,6 @@ var Compositor = Graph.extend(function() { } }); -/** - * @constructor clay.compositor.SceneNode - * @extends clay.compositor.CompositorNode - */ var SceneNode$1 = CompositorNode.extend( /** @lends clay.compositor.SceneNode# */ { @@ -27743,10 +27451,6 @@ var SceneNode$1 = CompositorNode.extend( } }); -/** - * @constructor clay.compositor.TextureNode - * @extends clay.compositor.CompositorNode - */ var TextureNode$1 = CompositorNode.extend(function() { return /** @lends clay.compositor.TextureNode# */ { /** @@ -27772,45 +27476,6 @@ var TextureNode$1 = CompositorNode.extend(function() { }); // TODO Shader library -// TODO curlnoise demo wrong - -// PENDING -// Use topological sort ? - -/** - * Filter node - * - * @constructor clay.compositor.FilterNode - * @extends clay.compositor.CompositorNode - * - * @example - var node = new clay.compositor.FilterNode({ - name: 'fxaa', - shader: clay.Shader.source('clay.compositor.fxaa'), - inputs: { - texture: { - node: 'scene', - pin: 'color' - } - }, - // Multiple outputs is preserved for MRT support in WebGL2.0 - outputs: { - color: { - attachment: clay.FrameBuffer.COLOR_ATTACHMENT0 - parameters: { - format: clay.Texture.RGBA, - width: 512, - height: 512 - }, - // Node will keep the RTT rendered in last frame - keepLastFrame: true, - // Force the node output the RTT rendered in last frame - outputLastFrame: true - } - } - }); - * - */ var FilterNode$1 = CompositorNode.extend(function () { return /** @lends clay.compositor.FilterNode# */ { /** @@ -28098,9 +27763,6 @@ var blendEssl = "@export clay.compositor.blend\n#define SHADER_NAME blend\n#ifde var fxaaEssl = "@export clay.compositor.fxaa\nuniform sampler2D texture;\nuniform vec4 viewport : VIEWPORT;\nvarying vec2 v_Texcoord;\n#define FXAA_REDUCE_MIN (1.0/128.0)\n#define FXAA_REDUCE_MUL (1.0/8.0)\n#define FXAA_SPAN_MAX 8.0\n@import clay.util.rgbm\nvoid main()\n{\n vec2 resolution = 1.0 / viewport.zw;\n vec3 rgbNW = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( -1.0, -1.0 ) ) * resolution ) ).xyz;\n vec3 rgbNE = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( 1.0, -1.0 ) ) * resolution ) ).xyz;\n vec3 rgbSW = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( -1.0, 1.0 ) ) * resolution ) ).xyz;\n vec3 rgbSE = decodeHDR( texture2D( texture, ( gl_FragCoord.xy + vec2( 1.0, 1.0 ) ) * resolution ) ).xyz;\n vec4 rgbaM = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution ) );\n vec3 rgbM = rgbaM.xyz;\n float opacity = rgbaM.w;\n vec3 luma = vec3( 0.299, 0.587, 0.114 );\n float lumaNW = dot( rgbNW, luma );\n float lumaNE = dot( rgbNE, luma );\n float lumaSW = dot( rgbSW, luma );\n float lumaSE = dot( rgbSE, luma );\n float lumaM = dot( rgbM, luma );\n float lumaMin = min( lumaM, min( min( lumaNW, lumaNE ), min( lumaSW, lumaSE ) ) );\n float lumaMax = max( lumaM, max( max( lumaNW, lumaNE) , max( lumaSW, lumaSE ) ) );\n vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n float dirReduce = max( ( lumaNW + lumaNE + lumaSW + lumaSE ) * ( 0.25 * FXAA_REDUCE_MUL ), FXAA_REDUCE_MIN );\n float rcpDirMin = 1.0 / ( min( abs( dir.x ), abs( dir.y ) ) + dirReduce );\n dir = min( vec2( FXAA_SPAN_MAX, FXAA_SPAN_MAX),\n max( vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\n dir * rcpDirMin)) * resolution;\n vec3 rgbA = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * ( 1.0 / 3.0 - 0.5 ) ) ).xyz;\n rgbA += decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * ( 2.0 / 3.0 - 0.5 ) ) ).xyz;\n rgbA *= 0.5;\n vec3 rgbB = decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * -0.5 ) ).xyz;\n rgbB += decodeHDR( texture2D( texture, gl_FragCoord.xy * resolution + dir * 0.5 ) ).xyz;\n rgbB *= 0.25;\n rgbB += rgbA * 0.5;\n float lumaB = dot( rgbB, luma );\n if ( ( lumaB < lumaMin ) || ( lumaB > lumaMax ) )\n {\n gl_FragColor = vec4( rgbA, opacity );\n }\n else {\n gl_FragColor = vec4( rgbB, opacity );\n }\n}\n@end"; -// import fxaa3Essl from './source/compositor/fxaa3.glsl.js'; - -// TODO Must export a module and be used in the other modules. Or it will be tree shaked function register(Shader) { // Some build in shaders Shader['import'](coloradjustEssl); @@ -29029,16 +28691,6 @@ var GBuffer = Base.extend(function () { } }); -/** - * @constructor clay.geometry.Cone - * @extends clay.Geometry - * @param {Object} [opt] - * @param {number} [opt.topRadius] - * @param {number} [opt.bottomRadius] - * @param {number} [opt.height] - * @param {number} [opt.capSegments] - * @param {number} [opt.heightSegments] - */ var Cone$1 = Geometry.extend(/** @lends clay.geometry.Cone# */ { dynamic: false, /** @@ -29161,15 +28813,6 @@ var Cone$1 = Geometry.extend(/** @lends clay.geometry.Cone# */ { } }); -/** - * @constructor clay.geometry.Cylinder - * @extends clay.Geometry - * @param {Object} [opt] - * @param {number} [opt.radius] - * @param {number} [opt.height] - * @param {number} [opt.capSegments] - * @param {number} [opt.heightSegments] - */ var Cylinder$1 = Geometry.extend( /** @lends clay.geometry.Cylinder# */ { @@ -29239,7 +28882,6 @@ var tubeGlsl = "@export clay.deferred.tube_light\n@import clay.deferred.chunk.li // Light-pre pass deferred rendering // http://www.realtimerendering.com/blog/deferred-lighting-approaches/ -// Light shaders Shader.import(prezGlsl); Shader.import(utilGlsl); Shader.import(lightvolumeGlsl); @@ -29867,11 +29509,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 2x2 Matrix - * @name mat2 - */ - var mat2 = {}; /** @@ -30118,25 +29755,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** - * @class 2x3 Matrix - * @name mat2d - * - * @description - * A mat2d contains six elements defined as: - *
- * [a, c, tx,
- *  b, d, ty]
- * 
- * This is a short form for the 3x3 matrix: - *
- * [a, c, tx,
- *  b, d, ty,
- *  0, 0, 1]
- * 
- * The last row is ignored so the array is shorter and operations are faster. - */ - var mat2d = {}; /** @@ -30381,10 +29999,6 @@ var glmatrix = { // DEPRECATED -/** - * @constructor clay.light.Sphere - * @extends {clay.Light} - */ var SphereLight = Light.extend( /** @lends clay.light.Sphere# */ { @@ -30431,10 +30045,6 @@ var SphereLight = Light.extend( } }); -/** - * @constructor clay.light.Tube - * @extends {clay.Light} - */ var TubeLight = Light.extend( /** @lends clay.light.Tube# */ { @@ -30489,10 +30099,6 @@ var TubeLight = Light.extend( } }); -/** - * @constructor clay.loader.FX - * @extends clay.core.Base - */ var FXLoader = Base.extend(/** @lends clay.loader.FX# */ { /** * @type {string} @@ -30549,10 +30155,6 @@ var FXLoader = Base.extend(/** @lends clay.loader.FX# */ { } }); -/** - * @constructor - * @alias clay.Matrix2 - */ var Matrix2 = function() { /** @@ -30833,10 +30435,6 @@ Matrix2.transpose = function(out, a) { return out; }; -/** - * @constructor - * @alias clay.Matrix2d - */ var Matrix2d = function() { /** * Storage of Matrix2d @@ -31099,10 +30697,6 @@ Matrix2d.translate = function(out, a, v) { return out; }; -/** - * @constructor - * @alias clay.Matrix3 - */ var Matrix3 = function () { /** @@ -31492,11 +31086,6 @@ Matrix3.translate = function (out, a, v) { return out; }; -/** - * Random or constant 1d, 2d, 3d vector generator - * @constructor - * @alias clay.Value - */ var Value = function() {}; /** @@ -31631,14 +31220,6 @@ Value.random3D = function(min, max) { return new Random3D(min, max); }; -/** - * @constructor - * @alias clay.Vector4 - * @param {number} x - * @param {number} y - * @param {number} z - * @param {number} w - */ var Vector4 = function(x, y, z, w) { x = x || 0; @@ -32347,10 +31928,6 @@ Vector4.transformQuat = function(out, a, q) { return out; }; -/** - * @constructor - * @alias clay.particle.Particle - */ var Particle = function() { /** * @type {clay.Vector3} @@ -32412,10 +31989,6 @@ Particle.prototype.update = function(deltaTime) { } }; -/** - * @constructor clay.particle.Emitter - * @extends clay.core.Base - */ var Emitter = Base.extend( /** @lends clay.particle.Emitter# */ { /** * Maximum number of particles created by this emitter @@ -32563,10 +32136,6 @@ Emitter.random2D = Value.random2D; */ Emitter.random3D = Value.random3D; -/** - * @constructor clay.particle.Field - * @extends clay.core.Base - */ var Field = Base.extend({}, { /** * Apply a field to the particle and update the particle velocity @@ -32579,10 +32148,6 @@ var Field = Base.extend({}, { applyTo: function(velocity, position, weight, deltaTime) {} }); -/** - * @constructor clay.particle.ForceField - * @extends clay.particle.Field - */ var ForceField = Field.extend(function() { return { force: new Vector3() @@ -33319,23 +32884,6 @@ var FreeControl = Base.extend(function() { } }); -/** - * Gamepad Control plugin. - * - * @constructor clay.plugin.GamepadControl - * - * @example - * init: function(app) { - * this._gamepadControl = new clay.plugin.GamepadControl({ - * target: camera, - * onStandardGamepadReady: customCallback - * }); - * }, - * - * loop: function(app) { - * this._gamepadControl.update(app.frameTime); - * } - */ var GamepadControl = Base.extend(function() { return /** @lends clay.plugin.GamepadControl# */ { @@ -34672,18 +34220,11 @@ Object.defineProperty(OrbitControl.prototype, 'target', { /** * StaticGeometry can not be changed once they've been setup */ -/** - * @constructor clay.StaticGeometry - * @extends clay.Geometry - */ var StaticGeometry = Geometry.extend({ dynamic: false }); // TODO test -/** - * @namespace clay.util.mesh - */ var meshUtil = { /** * Merge multiple meshes to one. @@ -35648,4 +35189,4 @@ exports.vr = vr; Object.defineProperty(exports, '__esModule', { value: true }); }))); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xheWdsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvYW5pbWF0aW9uL2Vhc2luZy5qcyIsIi4uL3NyYy9hbmltYXRpb24vQ2xpcC5qcyIsIi4uL3NyYy9hbmltYXRpb24vQW5pbWF0b3IuanMiLCIuLi9zcmMvYW5pbWF0aW9uL0JsZW5kMURDbGlwLmpzIiwiLi4vc3JjL3V0aWwvZGVsYXVuYXkuanMiLCIuLi9zcmMvZ2xtYXRyaXgvY29tbW9uLmpzIiwiLi4vc3JjL2dsbWF0cml4L3ZlYzIuanMiLCIuLi9zcmMvbWF0aC9WZWN0b3IyLmpzIiwiLi4vc3JjL2FuaW1hdGlvbi9CbGVuZDJEQ2xpcC5qcyIsIi4uL3NyYy9nbG1hdHJpeC92ZWMzLmpzIiwiLi4vc3JjL2dsbWF0cml4L3ZlYzQuanMiLCIuLi9zcmMvZ2xtYXRyaXgvbWF0My5qcyIsIi4uL3NyYy9nbG1hdHJpeC9xdWF0LmpzIiwiLi4vc3JjL2FuaW1hdGlvbi9TYW1wbGVyVHJhY2suanMiLCIuLi9zcmMvY29yZS9taXhpbi9leHRlbmQuanMiLCIuLi9zcmMvY29yZS9taXhpbi9ub3RpZmllci5qcyIsIi4uL3NyYy9jb3JlL3V0aWwuanMiLCIuLi9zcmMvY29yZS9CYXNlLmpzIiwiLi4vc3JjL2NvcmUvcmVxdWVzdC5qcyIsIi4uL3NyYy9jb3JlL3ZlbmRvci5qcyIsIi4uL3NyYy9UaW1lbGluZS5qcyIsIi4uL3NyYy9hbmltYXRpb24vVGltZWxpbmUuanMiLCIuLi9zcmMvYW5pbWF0aW9uL1RyYWNrQ2xpcC5qcyIsIi4uL3NyYy9jb3JlL0dMSW5mby5qcyIsIi4uL3NyYy9jb3JlL2dsZW51bS5qcyIsIi4uL3NyYy9jb3JlL0xpbmtlZExpc3QuanMiLCIuLi9zcmMvY29yZS9MUlUuanMiLCIuLi9zcmMvY29yZS9jb2xvci5qcyIsIi4uL3NyYy9NYXRlcmlhbC5qcyIsIi4uL3NyYy9ncHUvR0xQcm9ncmFtLmpzIiwiLi4vc3JjL2dwdS9Qcm9ncmFtTWFuYWdlci5qcyIsIi4uL3NyYy9TaGFkZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9wcmV6Lmdsc2wuanMiLCIuLi9zcmMvZ2xtYXRyaXgvbWF0NC5qcyIsIi4uL3NyYy9SZW5kZXJlci5qcyIsIi4uL3NyYy9tYXRoL1ZlY3RvcjMuanMiLCIuLi9zcmMvbWF0aC9RdWF0ZXJuaW9uLmpzIiwiLi4vc3JjL21hdGgvTWF0cml4NC5qcyIsIi4uL3NyYy9tYXRoL0JvdW5kaW5nQm94LmpzIiwiLi4vc3JjL05vZGUuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9oZWFkZXIvY2FsY0FtYmllbnRTSExpZ2h0Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9oZWFkZXIvbGlnaHQuanMiLCIuLi9zcmMvTGlnaHQuanMiLCIuLi9zcmMvbWF0aC9QbGFuZS5qcyIsIi4uL3NyYy9tYXRoL0ZydXN0dW0uanMiLCIuLi9zcmMvbWF0aC9SYXkuanMiLCIuLi9zcmMvQ2FtZXJhLmpzIiwiLi4vc3JjL1NjZW5lLmpzIiwiLi4vc3JjL2NvcmUvQ2FjaGUuanMiLCIuLi9zcmMvR2VvbWV0cnlCYXNlLmpzIiwiLi4vc3JjL0dlb21ldHJ5LmpzIiwiLi4vc3JjL2dlb21ldHJ5L1BsYW5lLmpzIiwiLi4vc3JjL2dlb21ldHJ5L0N1YmUuanMiLCIuLi9zcmMvZ2VvbWV0cnkvU3BoZXJlLmpzIiwiLi4vc3JjL2dlb21ldHJ5L1BhcmFtZXRyaWNTdXJmYWNlLmpzIiwiLi4vc3JjL1RleHR1cmUuanMiLCIuLi9zcmMvbWF0aC91dGlsLmpzIiwiLi4vc3JjL1RleHR1cmUyRC5qcyIsIi4uL3NyYy9UZXh0dXJlQ3ViZS5qcyIsIi4uL3NyYy9SZW5kZXJhYmxlLmpzIiwiLi4vc3JjL01lc2guanMiLCIuLi9zcmMvY2FtZXJhL1BlcnNwZWN0aXZlLmpzIiwiLi4vc3JjL2NhbWVyYS9PcnRob2dyYXBoaWMuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9zdGFuZGFyZC5nbHNsLmpzIiwiLi4vc3JjL1N0YW5kYXJkTWF0ZXJpYWwuanMiLCIuLi9zcmMvc2hhZGVyL2xpYnJhcnkuanMiLCIuLi9zcmMvSm9pbnQuanMiLCIuLi9zcmMvU2tlbGV0b24uanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS91dGlsLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9iYXNpYy5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvbGFtYmVydC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2Uvd2lyZWZyYW1lLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9za3lib3guZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvYnVpbHRpbi5qcyIsIi4uL3NyYy9sb2FkZXIvR0xURi5qcyIsIi4uL3NyYy9saWdodC9EaXJlY3Rpb25hbC5qcyIsIi4uL3NyYy9saWdodC9Qb2ludC5qcyIsIi4uL3NyYy9saWdodC9TcG90LmpzIiwiLi4vc3JjL2xpZ2h0L0FtYmllbnQuanMiLCIuLi9zcmMvRnJhbWVCdWZmZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3ZlcnRleC5nbHNsLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvUGFzcy5qcyIsIi4uL3NyYy9wbHVnaW4vU2t5Ym94LmpzIiwiLi4vc3JjL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAuanMiLCIuLi9zcmMvdXRpbC9kZHMuanMiLCIuLi9zcmMvdXRpbC9oZHIuanMiLCIuLi9zcmMvdXRpbC90ZXh0dXJlLmpzIiwiLi4vc3JjL3V0aWwvc2hhZGVyL2ludGVncmF0ZUJSREYuZ2xzbC5qcyIsIi4uL3NyYy91dGlsL3NoYWRlci9wcmVmaWx0ZXIuZ2xzbC5qcyIsIi4uL3NyYy91dGlsL2N1YmVtYXAuanMiLCIuLi9zcmMvbGlnaHQvQW1iaWVudEN1YmVtYXAuanMiLCIuLi9zcmMvbGlnaHQvQW1iaWVudFNILmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvVGV4dHVyZVBvb2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9zaGFkb3dtYXAuZ2xzbC5qcyIsIi4uL3NyYy9wcmVQYXNzL1NoYWRvd01hcC5qcyIsIi4uL3NyYy9waWNraW5nL1JheVBpY2tpbmcuanMiLCIuLi9zcmMvdXRpbC9zaC5qcyIsIi4uL3NyYy9hcHBsaWNhdGlvbi5qcyIsIi4uL3NyYy9hc3luYy9UYXNrLmpzIiwiLi4vc3JjL2FzeW5jL1Rhc2tHcm91cC5qcyIsIi4uL3NyYy9jb21wb3NpdG9yL0NvbXBvc2l0b3JOb2RlLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvR3JhcGguanMiLCIuLi9zcmMvY29tcG9zaXRvci9Db21wb3NpdG9yLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvU2NlbmVOb2RlLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvVGV4dHVyZU5vZGUuanMiLCIuLi9zcmMvY29tcG9zaXRvci9GaWx0ZXJOb2RlLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9jb2xvcmFkanVzdC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9ibHVyLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2x1bS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9sdXQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvdmlnbmV0dGUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3Ivb3V0cHV0Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2JyaWdodC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9kb3duc2FtcGxlLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3Vwc2FtcGxlLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2hkci5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9sZW5zZmxhcmUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvYmxlbmQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvZnhhYS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9yZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yLmpzIiwiLi4vc3JjL2NyZWF0ZUNvbXBvc2l0b3IuanMiLCIuLi9zcmMvY29tcG9zaXRvci9jcmVhdGVDb21wb3NpdG9yLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZ2J1ZmZlci5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvY2h1bmsuZ2xzbC5qcyIsIi4uL3NyYy9kZWZlcnJlZC9HQnVmZmVyLmpzIiwiLi4vc3JjL2dlb21ldHJ5L0NvbmUuanMiLCIuLi9zcmMvZ2VvbWV0cnkvQ3lsaW5kZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9saWdodHZvbHVtZS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvc3BvdC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZGlyZWN0aW9uYWwuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnRzaC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudGN1YmVtYXAuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL3BvaW50Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcGhlcmUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL3R1YmUuZ2xzbC5qcyIsIi4uL3NyYy9kZWZlcnJlZC9SZW5kZXJlci5qcyIsIi4uL3NyYy9nbG1hdHJpeC9tYXQyLmpzIiwiLi4vc3JjL2dsbWF0cml4L21hdDJkLmpzIiwiLi4vc3JjL2dsbWF0cml4L2luZGV4LmpzIiwiLi4vc3JjL2RlcC9nbG1hdHJpeC5qcyIsIi4uL3NyYy9saWdodC9TcGhlcmUuanMiLCIuLi9zcmMvbGlnaHQvVHViZS5qcyIsIi4uL3NyYy9sb2FkZXIvRlguanMiLCIuLi9zcmMvbWF0aC9NYXRyaXgyLmpzIiwiLi4vc3JjL21hdGgvTWF0cml4MmQuanMiLCIuLi9zcmMvbWF0aC9NYXRyaXgzLmpzIiwiLi4vc3JjL21hdGgvVmFsdWUuanMiLCIuLi9zcmMvbWF0aC9WZWN0b3I0LmpzIiwiLi4vc3JjL3BhcnRpY2xlL1BhcnRpY2xlLmpzIiwiLi4vc3JjL3BhcnRpY2xlL0VtaXR0ZXIuanMiLCIuLi9zcmMvcGFydGljbGUvRmllbGQuanMiLCIuLi9zcmMvcGFydGljbGUvRm9yY2VGaWVsZC5qcyIsIi4uL3NyYy9wYXJ0aWNsZS9wYXJ0aWNsZS5nbHNsLmpzIiwiLi4vc3JjL3BhcnRpY2xlL1BhcnRpY2xlUmVuZGVyYWJsZS5qcyIsIi4uL3NyYy9waWNraW5nL2NvbG9yLmdsc2wuanMiLCIuLi9zcmMvcGlja2luZy9QaXhlbFBpY2tpbmcuanMiLCIuLi9zcmMvcGx1Z2luL0ZyZWVDb250cm9sLmpzIiwiLi4vc3JjL3BsdWdpbi9HYW1lcGFkQ29udHJvbC5qcyIsIi4uL3NyYy9wbHVnaW4vR2VzdHVyZU1nci5qcyIsIi4uL3NyYy9wbHVnaW4vSW5maW5pdGVQbGFuZS5qcyIsIi4uL3NyYy9wbHVnaW4vT3JiaXRDb250cm9sLmpzIiwiLi4vc3JjL1N0YXRpY0dlb21ldHJ5LmpzIiwiLi4vc3JjL3V0aWwvbWVzaC5qcyIsIi4uL3NyYy91dGlsL3RyYW5zZmVyYWJsZS5qcyIsIi4uL3NyYy92ZXJzaW9uLmpzIiwiLi4vc3JjL3ZyL291dHB1dC5nbHNsLmpzIiwiLi4vc3JjL3ZyL0NhcmRib2FyZERpc3RvcnRlci5qcyIsIi4uL3NyYy92ci9TdGVyZW9DYW1lcmEuanMiLCIuLi9zcmMvY2xheWdsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIOe8k+WKqOWHveaVsOadpeiHqiBodHRwczovL2dpdGh1Yi5jb20vc29sZS90d2Vlbi5qcy9ibG9iL21hc3Rlci9zcmMvVHdlZW4uanNcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkuYW5pbWF0aW9uLmVhc2luZ1xyXG4gKi9cclxudmFyIGVhc2luZyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5saW5lYXJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxpbmVhcjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFkcmF0aWNJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1YWRyYXRpY091dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIGsgKiAoMiAtIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFkcmF0aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC0gMC41ICogKC0tayAqIChrIC0gMikgLSAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuY3ViaWNJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY3ViaWNJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrICogayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmN1YmljT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjdWJpY091dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiAtLWsgKiBrICogayArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmN1YmljSW5PdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGN1YmljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwLjUgKiAoKGsgLT0gMikgKiBrICogayArIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFydGljSW5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHF1YXJ0aWNJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrICogayAqIGsgKiBrO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFydGljT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWFydGljT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSAoLS1rICogayAqIGsgKiBrKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcucXVhcnRpY0luT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWFydGljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGsgKiBrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLSAwLjUgKiAoKGsgLT0gMikgKiBrICogayAqIGsgLSAyKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcucXVpbnRpY0luXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWludGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gayAqIGsgKiBrICogayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1aW50aWNPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHF1aW50aWNPdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gLS1rICogayAqIGsgKiBrICogayArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1aW50aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVpbnRpY0luT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMC41ICogayAqIGsgKiBrICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwLjUgKiAoKGsgLT0gMikgKiBrICogayAqIGsgKiBrICsgMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnNpbnVzb2lkYWxJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2ludXNvaWRhbEluOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSBNYXRoLmNvcyhrICogTWF0aC5QSSAvIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5zaW51c29pZGFsT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzaW51c29pZGFsT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguc2luKGsgKiBNYXRoLlBJIC8gMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnNpbnVzb2lkYWxJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2ludXNvaWRhbEluT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqICgxIC0gTWF0aC5jb3MoTWF0aC5QSSAqIGspKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZXhwb25lbnRpYWxJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrID09PSAwID8gMCA6IE1hdGgucG93KDEwMjQsIGsgLSAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGV4cG9uZW50aWFsT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIGsgPT09IDEgPyAxIDogMSAtIE1hdGgucG93KDIsIC0gMTAgKiBrKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZXhwb25lbnRpYWxJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMC41ICogTWF0aC5wb3coMTAyNCwgayAtIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMC41ICogKC0gTWF0aC5wb3coMiwgLSAxMCAqIChrIC0gMSkpICsgMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmNpcmN1bGFySW5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNpcmN1bGFySW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gMSAtIE1hdGguc3FydCgxIC0gayAqIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jaXJjdWxhck91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY2lyY3VsYXJPdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KDEgLSAoLS1rICogaykpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jaXJjdWxhckluT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjaXJjdWxhckluT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLSAwLjUgKiAoTWF0aC5zcXJ0KDEgLSBrICogaykgLSAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqIChNYXRoLnNxcnQoMSAtIChrIC09IDIpICogaykgKyAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZWxhc3RpY0luXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBlbGFzdGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICB2YXIgcywgYSA9IDAuMSwgcCA9IDAuNDtcclxuICAgICAgICBpZiAoayA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGsgPT09IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYSB8fCBhIDwgMSkge1xyXG4gICAgICAgICAgICBhID0gMTsgcyA9IHAgLyA0O1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBzID0gcCAqIE1hdGguYXNpbigxIC8gYSkgLyAoMiAqIE1hdGguUEkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLSAoYSAqIE1hdGgucG93KDIsIDEwICogKGsgLT0gMSkpICpcclxuICAgICAgICAgICAgICAgICAgICBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZWxhc3RpY091dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZWxhc3RpY091dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHZhciBzLCBhID0gMC4xLCBwID0gMC40O1xyXG4gICAgICAgIGlmIChrID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhIHx8IGEgPCAxKSB7XHJcbiAgICAgICAgICAgIGEgPSAxOyBzID0gcCAvIDQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHMgPSBwICogTWF0aC5hc2luKDEgLyBhKSAvICgyICogTWF0aC5QSSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoYSAqIE1hdGgucG93KDIsIC0gMTAgKiBrKSAqXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICsgMSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmVsYXN0aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZWxhc3RpY0luT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMsIGEgPSAwLjEsIHAgPSAwLjQ7XHJcbiAgICAgICAgaWYgKGsgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWEgfHwgYSA8IDEpIHtcclxuICAgICAgICAgICAgYSA9IDE7IHMgPSBwIC8gNDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgcyA9IHAgKiBNYXRoLmFzaW4oMSAvIGEpIC8gKDIgKiBNYXRoLlBJKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLSAwLjUgKiAoYSAqIE1hdGgucG93KDIsIDEwICogKGsgLT0gMSkpXHJcbiAgICAgICAgICAgICAgICAqIE1hdGguc2luKChrIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYSAqIE1hdGgucG93KDIsIC0xMCAqIChrIC09IDEpKVxyXG4gICAgICAgICAgICAgICAgKiBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICogMC41ICsgMTtcclxuXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmJhY2tJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYmFja0luOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMgPSAxLjcwMTU4O1xyXG4gICAgICAgIHJldHVybiBrICogayAqICgocyArIDEpICogayAtIHMpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5iYWNrT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBiYWNrT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMgPSAxLjcwMTU4O1xyXG4gICAgICAgIHJldHVybiAtLWsgKiBrICogKChzICsgMSkgKiBrICsgcykgKyAxO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5iYWNrSW5PdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJhY2tJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHZhciBzID0gMS43MDE1OCAqIDEuNTI1O1xyXG4gICAgICAgIGlmICgoayAqPSAyKSA8IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDAuNSAqIChrICogayAqICgocyArIDEpICogayAtIHMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqICgoayAtPSAyKSAqIGsgKiAoKHMgKyAxKSAqIGsgKyBzKSArIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5ib3VuY2VJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYm91bmNlSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gMSAtIGVhc2luZy5ib3VuY2VPdXQoMSAtIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5ib3VuY2VPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJvdW5jZU91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrIDwgKDEgLyAyLjc1KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gNy41NjI1ICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGsgPCAoMiAvIDIuNzUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA3LjU2MjUgKiAoayAtPSAoMS41IC8gMi43NSkpICogayArIDAuNzU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChrIDwgKDIuNSAvIDIuNzUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA3LjU2MjUgKiAoayAtPSAoMi4yNSAvIDIuNzUpKSAqIGsgKyAwLjkzNzU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDcuNTYyNSAqIChrIC09ICgyLjYyNSAvIDIuNzUpKSAqIGsgKyAwLjk4NDM3NTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmJvdW5jZUluT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBib3VuY2VJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrIDwgMC41KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlYXNpbmcuYm91bmNlSW4oayAqIDIpICogMC41O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZWFzaW5nLmJvdW5jZU91dChrICogMiAtIDEpICogMC41ICsgMC41O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZWFzaW5nO1xyXG4iLCJpbXBvcnQgRWFzaW5nIGZyb20gJy4vZWFzaW5nJztcclxuXHJcbmZ1bmN0aW9uIG5vb3AgKCkge31cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hbmltYXRpb24uQ2xpcFxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGVdXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbnxudW1iZXJ9IFtvcHRzLmxvb3BdIElmIGxvb3AgaXMgYSBudW1iZXIsIGl0IGluZGljYXRlIHRoZSBsb29wIGNvdW50IG9mIGFuaW1hdGlvblxyXG4gKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW29wdHMuZWFzaW5nXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZyYW1lXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZpbmlzaF1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25yZXN0YXJ0XVxyXG4gKi9cclxudmFyIENsaXAgPSBmdW5jdGlvbiAob3B0cykge1xyXG5cclxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGhpcy5uYW1lID0gb3B0cy5uYW1lIHx8ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAqL1xyXG4gICAgdGhpcy50YXJnZXQgPSBvcHRzLnRhcmdldDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubGlmZSA9IG9wdHMubGlmZSB8fCAxMDAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5kZWxheSA9IG9wdHMuZGVsYXkgfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZ2FwID0gb3B0cy5nYXAgfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucGxheWJhY2tSYXRlID0gb3B0cy5wbGF5YmFja1JhdGUgfHwgMTtcclxuXHJcblxyXG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XHJcblxyXG4gICAgdGhpcy5fbG9vcCA9IG9wdHMubG9vcCA9PSBudWxsID8gZmFsc2UgOiBvcHRzLmxvb3A7XHJcbiAgICB0aGlzLnNldExvb3AodGhpcy5fbG9vcCk7XHJcblxyXG4gICAgaWYgKG9wdHMuZWFzaW5nICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLnNldEVhc2luZyhvcHRzLmVhc2luZyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIHRoaXMub25mcmFtZSA9IG9wdHMub25mcmFtZSB8fCBub29wO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICB0aGlzLm9uZmluaXNoID0gb3B0cy5vbmZpbmlzaCB8fCBub29wO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICB0aGlzLm9ucmVzdGFydCA9IG9wdHMub25yZXN0YXJ0IHx8IG5vb3A7XHJcblxyXG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbn07XHJcblxyXG5DbGlwLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBnYXA6IDAsXHJcblxyXG4gICAgbGlmZTogMCxcclxuXHJcbiAgICBkZWxheTogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfGJvb2xlYW59IGxvb3BcclxuICAgICAqL1xyXG4gICAgc2V0TG9vcDogZnVuY3Rpb24gKGxvb3ApIHtcclxuICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcclxuICAgICAgICBpZiAobG9vcCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGxvb3AgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb29wUmVtYWluZWQgPSBsb29wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9vcFJlbWFpbmVkID0gSW5maW5pdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IGVhc2luZ1xyXG4gICAgICovXHJcbiAgICBzZXRFYXNpbmc6IGZ1bmN0aW9uIChlYXNpbmcpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGVhc2luZykgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGVhc2luZyA9IEVhc2luZ1tlYXNpbmddO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVhc2luZyA9IGVhc2luZztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRpbWVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgc3RlcDogZnVuY3Rpb24gKHRpbWUsIGRlbHRhVGltZSwgc2lsZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSB0aW1lICsgdGhpcy5kZWxheTtcclxuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFRpbWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWx0YVRpbWUgPSB0aW1lIC0gdGhpcy5fY3VycmVudFRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gdGltZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3BhdXNlZCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZSA8IHRoaXMuX3N0YXJ0VGltZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQRU5ESUdOIFN5bmMgP1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZSh0aW1lLCBkZWx0YVRpbWUpO1xyXG5cclxuICAgICAgICB2YXIgcGVyY2VudCA9IE1hdGgubWluKHRoaXMuX2VsYXBzZWRUaW1lIC8gdGhpcy5saWZlLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKHBlcmNlbnQgPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzY2hlZHVsZTtcclxuICAgICAgICBpZiAodGhpcy5lYXNpbmcpIHtcclxuICAgICAgICAgICAgc2NoZWR1bGUgPSB0aGlzLmVhc2luZyhwZXJjZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHNjaGVkdWxlID0gcGVyY2VudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2lsZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZSgnZnJhbWUnLCBzY2hlZHVsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGVyY2VudCA9PT0gMSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fbG9vcCAmJiB0aGlzLl9sb29wUmVtYWluZWQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXN0YXJ0SW5Mb29wKHRpbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9vcFJlbWFpbmVkLS07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Jlc3RhcnQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gTWFyayB0aGlzIGNsaXAgdG8gYmUgZGVsZXRlZFxyXG4gICAgICAgICAgICAgICAgLy8gSW4gdGhlIGFuaW1hdGlvbi51cGRhdGVcclxuICAgICAgICAgICAgICAgIHRoaXMuX25lZWRzUmVtb3ZlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2ZpbmlzaCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRpbWVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgc2V0VGltZTogZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGVwKHRpbWUgKyB0aGlzLl9zdGFydFRpbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZXN0YXJ0OiBmdW5jdGlvbiAodGltZSkge1xyXG4gICAgICAgIC8vIElmIHVzZXIgbGVhdmUgdGhlIHBhZ2UgZm9yIGEgd2hpbGUsIHdoZW4gaGUgZ2V0cyBiYWNrXHJcbiAgICAgICAgLy8gQWxsIGNsaXBzIG1heSBiZSBleHBpcmVkIGFuZCBhbGwgc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nIHZhbHVlKHBvc2l0aW9uKVxyXG4gICAgICAgIC8vIEl0IGlzIGNsZWFybHkgd3JvbmcsIHNvIHdlIHVzZSByZW1haW5kZXIgdG8gYWRkIGEgb2Zmc2V0XHJcblxyXG4gICAgICAgIHZhciByZW1haW5kZXIgPSAwO1xyXG4gICAgICAgIC8vIFJlbWFpbmRlciBpZ25vcmVkIGlmIHJlc3RhcnQgaXMgaW52b2tlZCBtYW51YWxseVxyXG4gICAgICAgIGlmICh0aW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2VsYXBzZSh0aW1lKTtcclxuICAgICAgICAgICAgcmVtYWluZGVyID0gdGhpcy5fZWxhcHNlZFRpbWUgJSB0aGlzLmxpZmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRpbWUgPSB0aW1lIHx8IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWUgLSByZW1haW5kZXIgKyB0aGlzLmRlbGF5O1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fbmVlZHNSZW1vdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0RWxhcHNlZFRpbWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZWxhcHNlZFRpbWU7XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZXN0YXJ0SW5Mb29wOiBmdW5jdGlvbiAodGltZSkge1xyXG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWUgKyB0aGlzLmdhcDtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIF9lbGFwc2U6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YVRpbWUpIHtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSArPSBkZWx0YVRpbWUgKiB0aGlzLnBsYXliYWNrUmF0ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZmlyZTogZnVuY3Rpb24gKGV2ZW50VHlwZSwgYXJnKSB7XHJcbiAgICAgICAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudFR5cGU7XHJcbiAgICAgICAgaWYgKHRoaXNbZXZlbnROYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzW2V2ZW50TmFtZV0odGhpcy50YXJnZXQsIGFyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjbGlwID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKTtcclxuICAgICAgICBjbGlwLm5hbWUgPSB0aGlzLm5hbWU7XHJcbiAgICAgICAgY2xpcC5fbG9vcCA9IHRoaXMuX2xvb3A7XHJcbiAgICAgICAgY2xpcC5fbG9vcFJlbWFpbmVkID0gdGhpcy5fbG9vcFJlbWFpbmVkO1xyXG5cclxuICAgICAgICBjbGlwLmxpZmUgPSB0aGlzLmxpZmU7XHJcbiAgICAgICAgY2xpcC5nYXAgPSB0aGlzLmdhcDtcclxuICAgICAgICBjbGlwLmRlbGF5ID0gdGhpcy5kZWxheTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNsaXA7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXVzZSB0aGUgY2xpcC5cclxuICAgICAqL1xyXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3VtZSB0aGUgY2xpcC5cclxuICAgICAqL1xyXG4gICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICB9XHJcbn07XHJcbkNsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2xpcDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENsaXA7XHJcbiIsImltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcbmltcG9ydCBlYXNpbmdGdW5jcyBmcm9tICcuL2Vhc2luZyc7XHJcblxyXG52YXIgYXJyYXlTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRHZXR0ZXIodGFyZ2V0LCBrZXkpIHtcclxuICAgIHJldHVybiB0YXJnZXRba2V5XTtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0U2V0dGVyKHRhcmdldCwga2V5LCB2YWx1ZSkge1xyXG4gICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW50ZXJwb2xhdGVOdW1iZXIocDAsIHAxLCBwZXJjZW50KSB7XHJcbiAgICByZXR1cm4gKHAxIC0gcDApICogcGVyY2VudCArIHAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUFycmF5KHAwLCBwMSwgcGVyY2VudCwgb3V0LCBhcnJEaW0pIHtcclxuICAgIHZhciBsZW4gPSBwMC5sZW5ndGg7XHJcbiAgICBpZiAoYXJyRGltID09IDEpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIG91dFtpXSA9IGludGVycG9sYXRlTnVtYmVyKHAwW2ldLCBwMVtpXSwgcGVyY2VudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIGxlbjIgPSBwMFswXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgb3V0W2ldW2pdID0gaW50ZXJwb2xhdGVOdW1iZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgcDBbaV1bal0sIHAxW2ldW2pdLCBwZXJjZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FycmF5TGlrZShkYXRhKSB7XHJcbiAgICBpZiAodHlwZW9mKGRhdGEpID09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YoZGF0YSkgPT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YoZGF0YS5sZW5ndGgpID09ICdudW1iZXInO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9uZVZhbHVlKHZhbHVlKSB7XHJcbiAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpKSB7XHJcbiAgICAgICAgdmFyIGxlbiA9IHZhbHVlLmxlbmd0aDtcclxuICAgICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWVbMF0pKSB7XHJcbiAgICAgICAgICAgIHZhciByZXQgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmV0LnB1c2goYXJyYXlTbGljZS5jYWxsKHZhbHVlW2ldKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2F0bXVsbFJvbUludGVycG9sYXRlQXJyYXkoXHJcbiAgICBwMCwgcDEsIHAyLCBwMywgdCwgdDIsIHQzLCBvdXQsIGFyckRpbVxyXG4pIHtcclxuICAgIHZhciBsZW4gPSBwMC5sZW5ndGg7XHJcbiAgICBpZiAoYXJyRGltID09IDEpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIG91dFtpXSA9IGNhdG11bGxSb21JbnRlcnBvbGF0ZShcclxuICAgICAgICAgICAgICAgIHAwW2ldLCBwMVtpXSwgcDJbaV0sIHAzW2ldLCB0LCB0MiwgdDNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciBsZW4yID0gcDBbMF0ubGVuZ3RoO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW4yOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIG91dFtpXVtqXSA9IGNhdG11bGxSb21JbnRlcnBvbGF0ZShcclxuICAgICAgICAgICAgICAgICAgICBwMFtpXVtqXSwgcDFbaV1bal0sIHAyW2ldW2pdLCBwM1tpXVtqXSxcclxuICAgICAgICAgICAgICAgICAgICB0LCB0MiwgdDNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhdG11bGxSb21JbnRlcnBvbGF0ZShwMCwgcDEsIHAyLCBwMywgdCwgdDIsIHQzKSB7XHJcbiAgICB2YXIgdjAgPSAocDIgLSBwMCkgKiAwLjU7XHJcbiAgICB2YXIgdjEgPSAocDMgLSBwMSkgKiAwLjU7XHJcbiAgICByZXR1cm4gKDIgKiAocDEgLSBwMikgKyB2MCArIHYxKSAqIHQzXHJcbiAgICAgICAgICAgICsgKC0gMyAqIChwMSAtIHAyKSAtIDIgKiB2MCAtIHYxKSAqIHQyXHJcbiAgICAgICAgICAgICsgdjAgKiB0ICsgcDE7XHJcbn1cclxuXHJcbi8vIGFycjAgaXMgc291cmNlIGFycmF5LCBhcnIxIGlzIHRhcmdldCBhcnJheS5cclxuLy8gRG8gc29tZSBwcmVwcm9jZXNzIHRvIGF2b2lkIGVycm9yIGhhcHBlbmVkIHdoZW4gaW50ZXJwb2xhdGluZyBmcm9tIGFycjAgdG8gYXJyMVxyXG5mdW5jdGlvbiBmaWxsQXJyKGFycjAsIGFycjEsIGFyckRpbSkge1xyXG4gICAgdmFyIGFycjBMZW4gPSBhcnIwLmxlbmd0aDtcclxuICAgIHZhciBhcnIxTGVuID0gYXJyMS5sZW5ndGg7XHJcbiAgICBpZiAoYXJyMExlbiAhPT0gYXJyMUxlbikge1xyXG4gICAgICAgIC8vIEZJWE1FIE5vdCB3b3JrIGZvciBUeXBlZEFycmF5XHJcbiAgICAgICAgdmFyIGlzUHJldmlvdXNMYXJnZXIgPSBhcnIwTGVuID4gYXJyMUxlbjtcclxuICAgICAgICBpZiAoaXNQcmV2aW91c0xhcmdlcikge1xyXG4gICAgICAgICAgICAvLyBDdXQgdGhlIHByZXZpb3VzXHJcbiAgICAgICAgICAgIGFycjAubGVuZ3RoID0gYXJyMUxlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIEZpbGwgdGhlIHByZXZpb3VzXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBhcnIwTGVuOyBpIDwgYXJyMUxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhcnIwLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgYXJyRGltID09PSAxID8gYXJyMVtpXSA6IGFycmF5U2xpY2UuY2FsbChhcnIxW2ldKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEhhbmRsaW5nIE5hTiB2YWx1ZVxyXG4gICAgdmFyIGxlbjIgPSBhcnIwWzBdICYmIGFycjBbMF0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyckRpbSA9PT0gMSkge1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4oYXJyMFtpXSkpIHtcclxuICAgICAgICAgICAgICAgIGFycjBbaV0gPSBhcnIxW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKGFycjBbaV1bal0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyMFtpXVtqXSA9IGFycjFbaV1bal07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXJyYXlTYW1lKGFycjAsIGFycjEsIGFyckRpbSkge1xyXG4gICAgaWYgKGFycjAgPT09IGFycjEpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBsZW4gPSBhcnIwLmxlbmd0aDtcclxuICAgIGlmIChsZW4gIT09IGFycjEubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGFyckRpbSA9PT0gMSkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFycjBbaV0gIT09IGFycjFbaV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBsZW4yID0gYXJyMFswXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFycjBbaV1bal0gIT09IGFycjFbaV1bal0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlVHJhY2tDbGlwKGFuaW1hdG9yLCBnbG9iYWxFYXNpbmcsIG9uZVRyYWNrRG9uZSwga2V5ZnJhbWVzLCBwcm9wTmFtZSwgaW50ZXJwb2xhdGVyLCBtYXhUaW1lKSB7XHJcbiAgICB2YXIgZ2V0dGVyID0gYW5pbWF0b3IuX2dldHRlcjtcclxuICAgIHZhciBzZXR0ZXIgPSBhbmltYXRvci5fc2V0dGVyO1xyXG4gICAgdmFyIHVzZVNwbGluZSA9IGdsb2JhbEVhc2luZyA9PT0gJ3NwbGluZSc7XHJcblxyXG4gICAgdmFyIHRyYWNrTGVuID0ga2V5ZnJhbWVzLmxlbmd0aDtcclxuICAgIGlmICghdHJhY2tMZW4pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBHdWVzcyBkYXRhIHR5cGVcclxuICAgIHZhciBmaXJzdFZhbCA9IGtleWZyYW1lc1swXS52YWx1ZTtcclxuICAgIHZhciBpc1ZhbHVlQXJyYXkgPSBpc0FycmF5TGlrZShmaXJzdFZhbCk7XHJcblxyXG4gICAgLy8gRm9yIHZlcnRpY2VzIG1vcnBoaW5nXHJcbiAgICB2YXIgYXJyRGltID0gKFxyXG4gICAgICAgICAgICBpc1ZhbHVlQXJyYXlcclxuICAgICAgICAgICAgJiYgaXNBcnJheUxpa2UoZmlyc3RWYWxbMF0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgID8gMiA6IDE7XHJcbiAgICAvLyBTb3J0IGtleWZyYW1lIGFzIGFzY2VuZGluZ1xyXG4gICAga2V5ZnJhbWVzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xyXG4gICAgICAgIHJldHVybiBhLnRpbWUgLSBiLnRpbWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQZXJjZW50cyBvZiBlYWNoIGtleWZyYW1lXHJcbiAgICB2YXIga2ZQZXJjZW50cyA9IFtdO1xyXG4gICAgLy8gVmFsdWUgb2YgZWFjaCBrZXlmcmFtZVxyXG4gICAgdmFyIGtmVmFsdWVzID0gW107XHJcbiAgICAvLyBFYXNpbmcgZnVuY3Mgb2YgZWFjaCBrZXlmcmFtZS5cclxuICAgIHZhciBrZkVhc2luZ3MgPSBbXTtcclxuXHJcbiAgICB2YXIgcHJldlZhbHVlID0ga2V5ZnJhbWVzWzBdLnZhbHVlO1xyXG4gICAgdmFyIGlzQWxsVmFsdWVFcXVhbCA9IHRydWU7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWNrTGVuOyBpKyspIHtcclxuICAgICAgICBrZlBlcmNlbnRzLnB1c2goa2V5ZnJhbWVzW2ldLnRpbWUgLyBtYXhUaW1lKTtcclxuXHJcbiAgICAgICAgLy8gQXNzdW1lIHZhbHVlIGlzIGEgY29sb3Igd2hlbiBpdCBpcyBhIHN0cmluZ1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGtleWZyYW1lc1tpXS52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdmFsdWUgaXMgZXF1YWwsIGRlZXAgY2hlY2sgaWYgdmFsdWUgaXMgYXJyYXlcclxuICAgICAgICBpZiAoISgoaXNWYWx1ZUFycmF5ICYmIGlzQXJyYXlTYW1lKHZhbHVlLCBwcmV2VmFsdWUsIGFyckRpbSkpXHJcbiAgICAgICAgICAgIHx8ICghaXNWYWx1ZUFycmF5ICYmIHZhbHVlID09PSBwcmV2VmFsdWUpKSkge1xyXG4gICAgICAgICAgICBpc0FsbFZhbHVlRXF1YWwgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJldlZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGtmVmFsdWVzLnB1c2godmFsdWUpO1xyXG4gICAgICAgIGtmRWFzaW5ncy5wdXNoKGtleWZyYW1lc1tpXS5lYXNpbmcpO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzQWxsVmFsdWVFcXVhbCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbGFzdFZhbHVlID0ga2ZWYWx1ZXNbdHJhY2tMZW4gLSAxXTtcclxuICAgIC8vIFBvbHlmaWxsIGFycmF5IGFuZCBOYU4gdmFsdWVcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhY2tMZW4gLSAxOyBpKyspIHtcclxuICAgICAgICBpZiAoaXNWYWx1ZUFycmF5KSB7XHJcbiAgICAgICAgICAgIGZpbGxBcnIoa2ZWYWx1ZXNbaV0sIGxhc3RWYWx1ZSwgYXJyRGltKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihrZlZhbHVlc1tpXSkgJiYgIWlzTmFOKGxhc3RWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGtmVmFsdWVzW2ldID0gbGFzdFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaXNWYWx1ZUFycmF5ICYmIGZpbGxBcnIoZ2V0dGVyKGFuaW1hdG9yLl90YXJnZXQsIHByb3BOYW1lKSwgbGFzdFZhbHVlLCBhcnJEaW0pO1xyXG5cclxuICAgIC8vIENhY2hlIHRoZSBrZXkgb2YgbGFzdCBmcmFtZSB0byBzcGVlZCB1cCB3aGVuXHJcbiAgICAvLyBhbmltYXRpb24gcGxheWJhY2sgaXMgc2VxdWVuY3lcclxuICAgIHZhciBjYWNoZUtleSA9IDA7XHJcbiAgICB2YXIgY2FjaGVQZXJjZW50ID0gMDtcclxuICAgIHZhciBzdGFydDtcclxuICAgIHZhciBpLCB3O1xyXG4gICAgdmFyIHAwLCBwMSwgcDIsIHAzO1xyXG5cclxuICAgIHZhciBvbmZyYW1lID0gZnVuY3Rpb24odGFyZ2V0LCBwZXJjZW50KSB7XHJcbiAgICAgICAgLy8gRmluZCB0aGUgcmFuZ2Uga2V5ZnJhbWVzXHJcbiAgICAgICAgLy8ga2YxLS0tLS1rZjItLS0tLS0tLS1jdXJyZW50LS0tLS0tLS1rZjNcclxuICAgICAgICAvLyBmaW5kIGtmMihpKSBhbmQga2YzKGkgKyAxKSBhbmQgZG8gaW50ZXJwb2xhdGlvblxyXG4gICAgICAgIGlmIChwZXJjZW50IDwgY2FjaGVQZXJjZW50KSB7XHJcbiAgICAgICAgICAgIC8vIFN0YXJ0IGZyb20gbmV4dCBrZXlcclxuICAgICAgICAgICAgc3RhcnQgPSBNYXRoLm1pbihjYWNoZUtleSArIDEsIHRyYWNrTGVuIC0gMSk7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtmUGVyY2VudHNbaV0gPD0gcGVyY2VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkgPSBNYXRoLm1pbihpLCB0cmFja0xlbiAtIDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChpID0gY2FjaGVLZXk7IGkgPCB0cmFja0xlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2ZQZXJjZW50c1tpXSA+IHBlcmNlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpID0gTWF0aC5taW4oaSAtIDEsIHRyYWNrTGVuIC0gMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhY2hlS2V5ID0gaTtcclxuICAgICAgICBjYWNoZVBlcmNlbnQgPSBwZXJjZW50O1xyXG5cclxuICAgICAgICB2YXIgcmFuZ2UgPSAoa2ZQZXJjZW50c1tpICsgMV0gLSBrZlBlcmNlbnRzW2ldKTtcclxuICAgICAgICBpZiAocmFuZ2UgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdyA9IChwZXJjZW50IC0ga2ZQZXJjZW50c1tpXSkgLyByYW5nZTtcclxuICAgICAgICAgICAgLy8gQ2xhbXAgMCAtIDFcclxuICAgICAgICAgICAgdyA9IE1hdGgubWF4KE1hdGgubWluKDEsIHcpLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdyA9IGtmRWFzaW5nc1tpICsgMV0odyk7XHJcblxyXG4gICAgICAgIGlmICh1c2VTcGxpbmUpIHtcclxuICAgICAgICAgICAgcDEgPSBrZlZhbHVlc1tpXTtcclxuICAgICAgICAgICAgcDAgPSBrZlZhbHVlc1tpID09PSAwID8gaSA6IGkgLSAxXTtcclxuICAgICAgICAgICAgcDIgPSBrZlZhbHVlc1tpID4gdHJhY2tMZW4gLSAyID8gdHJhY2tMZW4gLSAxIDogaSArIDFdO1xyXG4gICAgICAgICAgICBwMyA9IGtmVmFsdWVzW2kgPiB0cmFja0xlbiAtIDMgPyB0cmFja0xlbiAtIDEgOiBpICsgMl07XHJcbiAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXIodGFyZ2V0LCBwcm9wTmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAwLCBwMSwgcDIsIHAzLCB3XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1ZhbHVlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGNhdG11bGxSb21JbnRlcnBvbGF0ZUFycmF5KFxyXG4gICAgICAgICAgICAgICAgICAgIHAwLCBwMSwgcDIsIHAzLCB3LCB3KncsIHcqdyp3LFxyXG4gICAgICAgICAgICAgICAgICAgIGdldHRlcih0YXJnZXQsIHByb3BOYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICBhcnJEaW1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhdG11bGxSb21JbnRlcnBvbGF0ZShwMCwgcDEsIHAyLCBwMywgdywgdyp3LCB3KncqdylcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXIodGFyZ2V0LCBwcm9wTmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtmVmFsdWVzW2ldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZlZhbHVlc1tpICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1ZhbHVlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGludGVycG9sYXRlQXJyYXkoXHJcbiAgICAgICAgICAgICAgICAgICAga2ZWYWx1ZXNbaV0sIGtmVmFsdWVzW2krMV0sIHcsXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0dGVyKHRhcmdldCwgcHJvcE5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyckRpbVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVOdW1iZXIoa2ZWYWx1ZXNbaV0sIGtmVmFsdWVzW2krMV0sIHcpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgY2xpcCA9IG5ldyBDbGlwKHtcclxuICAgICAgICB0YXJnZXQ6IGFuaW1hdG9yLl90YXJnZXQsXHJcbiAgICAgICAgbGlmZTogbWF4VGltZSxcclxuICAgICAgICBsb29wOiBhbmltYXRvci5fbG9vcCxcclxuICAgICAgICBkZWxheTogYW5pbWF0b3IuX2RlbGF5LFxyXG4gICAgICAgIG9uZnJhbWU6IG9uZnJhbWUsXHJcbiAgICAgICAgb25maW5pc2g6IG9uZVRyYWNrRG9uZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGdsb2JhbEVhc2luZyAmJiBnbG9iYWxFYXNpbmcgIT09ICdzcGxpbmUnKSB7XHJcbiAgICAgICAgY2xpcC5zZXRFYXNpbmcoZ2xvYmFsRWFzaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2xpcDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBBbmltYXRvciBvYmplY3QgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSBBbmltYXRpb24ucHJvdG90eXBlLmFuaW1hdGUgbWV0aG9kLlxyXG4gKiBBZnRlciBjcmVhdGVkLCB3ZSBjYW4gdXNlIHtAbGluayBjbGF5LmFuaW1hdGlvbi5BbmltYXRvciN3aGVufSB0byBhZGQgYWxsIGtleWZyYW1lcyBhbmQge0BsaW5rIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yI3N0YXJ0fSBpdC5cclxuICogQ2xpcHMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYW5kIGFkZGVkIHRvIHRoZSBhbmltYXRpb24gaW5zdGFuY2Ugd2hpY2ggY3JlYXRlZCB0aGlzIGRlZmVycmVkIG9iamVjdC5cclxuICpcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcclxuICogQHBhcmFtIHtib29sZWFufSBsb29wXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdldHRlclxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXJcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gaW50ZXJwb2xhdGVyXHJcbiAqL1xyXG5mdW5jdGlvbiBBbmltYXRvcih0YXJnZXQsIGxvb3AsIGdldHRlciwgc2V0dGVyLCBpbnRlcnBvbGF0ZXIpIHtcclxuICAgIHRoaXMuX3RyYWNrcyA9IHt9O1xyXG4gICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0O1xyXG5cclxuICAgIHRoaXMuX2xvb3AgPSBsb29wIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuX2dldHRlciA9IGdldHRlciB8fCBkZWZhdWx0R2V0dGVyO1xyXG4gICAgdGhpcy5fc2V0dGVyID0gc2V0dGVyIHx8IGRlZmF1bHRTZXR0ZXI7XHJcblxyXG4gICAgdGhpcy5faW50ZXJwb2xhdGVyID0gaW50ZXJwb2xhdGVyIHx8IG51bGw7XHJcblxyXG4gICAgdGhpcy5fZGVsYXkgPSAwO1xyXG5cclxuICAgIHRoaXMuX2RvbmVMaXN0ID0gW107XHJcblxyXG4gICAgdGhpcy5fb25mcmFtZUxpc3QgPSBbXTtcclxuXHJcbiAgICB0aGlzLl9jbGlwTGlzdCA9IFtdO1xyXG5cclxuICAgIHRoaXMuX21heFRpbWUgPSAwO1xyXG5cclxuICAgIHRoaXMuX2xhc3RLRlRpbWUgPSAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub29wRWFzaW5nKHcpIHtcclxuICAgIHJldHVybiB3O1xyXG59XHJcblxyXG5BbmltYXRvci5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IEFuaW1hdG9yLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgS2V5ZnJhbWUgdGltZSB1c2luZyBtaWxsaXNlY29uZFxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEga2V5LXZhbHVlIG9iamVjdC4gVmFsdWUgY2FuIGJlIG51bWJlciwgMWQgYW5kIDJkIGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW2Vhc2luZ11cclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICB3aGVuOiBmdW5jdGlvbiAodGltZSwgcHJvcHMsIGVhc2luZykge1xyXG5cclxuICAgICAgICB0aGlzLl9tYXhUaW1lID0gTWF0aC5tYXgodGltZSwgdGhpcy5fbWF4VGltZSk7XHJcblxyXG4gICAgICAgIGVhc2luZyA9ICh0eXBlb2YgZWFzaW5nID09PSAnZnVuY3Rpb24nID8gZWFzaW5nIDogZWFzaW5nRnVuY3NbZWFzaW5nXSkgfHwgbm9vcEVhc2luZztcclxuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBwcm9wcykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RyYWNrc1twcm9wTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrc1twcm9wTmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgIC8vIElmIHRpbWUgaXMgMFxyXG4gICAgICAgICAgICAgICAgLy8gIFRoZW4gcHJvcHMgaXMgZ2l2ZW4gaW5pdGlhbGl6ZSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgLy8gRWxzZVxyXG4gICAgICAgICAgICAgICAgLy8gIEluaXRpYWxpemUgdmFsdWUgZnJvbSBjdXJyZW50IHByb3AgdmFsdWVcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tzW3Byb3BOYW1lXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNsb25lVmFsdWUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXR0ZXIodGhpcy5fdGFyZ2V0LCBwcm9wTmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWFzaW5nOiBlYXNpbmdcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl90cmFja3NbcHJvcE5hbWVdLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGltZTogcGFyc2VJbnQodGltZSksXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogcHJvcHNbcHJvcE5hbWVdLFxyXG4gICAgICAgICAgICAgICAgZWFzaW5nOiBlYXNpbmdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgRHVyaW5nIHRpbWUgc2luY2UgbGFzdCBrZXlmcmFtZVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEga2V5LXZhbHVlIG9iamVjdC4gVmFsdWUgY2FuIGJlIG51bWJlciwgMWQgYW5kIDJkIGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW2Vhc2luZ11cclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICB0aGVuOiBmdW5jdGlvbiAoZHVyaW5nVGltZSwgcHJvcHMsIGVhc2luZykge1xyXG4gICAgICAgIHRoaXMud2hlbihkdXJpbmdUaW1lICsgdGhpcy5fbGFzdEtGVGltZSwgcHJvcHMsIGVhc2luZyk7XHJcbiAgICAgICAgdGhpcy5fbGFzdEtGVGltZSArPSBkdXJpbmdUaW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogY2FsbGJhY2sgd2hlbiBydW5uaW5nIGFuaW1hdGlvblxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrIGNhbGxiYWNrIGhhdmUgdHdvIGFyZ3MsIGFuaW1hdGluZyB0YXJnZXQgYW5kIGN1cnJlbnQgcGVyY2VudFxyXG4gICAgICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQW5pbWF0b3J9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGR1cmluZzogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5fb25mcmFtZUxpc3QucHVzaChjYWxsYmFjayk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9kb25lQ2FsbGJhY2s6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBDbGVhciBhbGwgdHJhY2tzXHJcbiAgICAgICAgdGhpcy5fdHJhY2tzID0ge307XHJcbiAgICAgICAgLy8gQ2xlYXIgYWxsIGNsaXBzXHJcbiAgICAgICAgdGhpcy5fY2xpcExpc3QubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgdmFyIGRvbmVMaXN0ID0gdGhpcy5fZG9uZUxpc3Q7XHJcbiAgICAgICAgdmFyIGxlbiA9IGRvbmVMaXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRvbmVMaXN0W2ldLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU3RhcnQgdGhlIGFuaW1hdGlvblxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfEZ1bmN0aW9ufSBlYXNpbmdcclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKGdsb2JhbEVhc2luZykge1xyXG5cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGNsaXBDb3VudCA9IDA7XHJcblxyXG4gICAgICAgIHZhciBvbmVUcmFja0RvbmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY2xpcENvdW50LS07XHJcbiAgICAgICAgICAgIGlmIChjbGlwQ291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuX2RvbmVDYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIGxhc3RDbGlwO1xyXG4gICAgICAgIHZhciBjbGlwTWF4VGltZSA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gdGhpcy5fdHJhY2tzKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gY3JlYXRlVHJhY2tDbGlwKFxyXG4gICAgICAgICAgICAgICAgdGhpcywgZ2xvYmFsRWFzaW5nLCBvbmVUcmFja0RvbmUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja3NbcHJvcE5hbWVdLCBwcm9wTmFtZSwgc2VsZi5faW50ZXJwb2xhdGVyLCBzZWxmLl9tYXhUaW1lXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICBjbGlwTWF4VGltZSA9IE1hdGgubWF4KGNsaXBNYXhUaW1lLCBjbGlwLmxpZmUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpcExpc3QucHVzaChjbGlwKTtcclxuICAgICAgICAgICAgICAgIGNsaXBDb3VudCsrO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIElmIHN0YXJ0IGFmdGVyIGFkZGVkIHRvIGFuaW1hdGlvblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRpb24uYWRkQ2xpcChjbGlwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsYXN0Q2xpcCA9IGNsaXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFkZCBkdXJpbmcgY2FsbGJhY2sgb24gdGhlIGxhc3QgY2xpcFxyXG4gICAgICAgIGlmIChsYXN0Q2xpcCkge1xyXG4gICAgICAgICAgICB2YXIgb2xkT25GcmFtZSA9IGxhc3RDbGlwLm9uZnJhbWU7XHJcbiAgICAgICAgICAgIGxhc3RDbGlwLm9uZnJhbWUgPSBmdW5jdGlvbiAodGFyZ2V0LCBwZXJjZW50KSB7XHJcbiAgICAgICAgICAgICAgICBvbGRPbkZyYW1lKHRhcmdldCwgcGVyY2VudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLl9vbmZyYW1lTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX29uZnJhbWVMaXN0W2ldKHRhcmdldCwgcGVyY2VudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNsaXBDb3VudCkge1xyXG4gICAgICAgICAgICB0aGlzLl9kb25lQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcCB0aGUgYW5pbWF0aW9uXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NsaXBMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gdGhpcy5fY2xpcExpc3RbaV07XHJcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uLnJlbW92ZUNsaXAoY2xpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NsaXBMaXN0ID0gW107XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxheSBnaXZlbiBtaWxsaXNlY29uZHNcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gdGltZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQW5pbWF0b3J9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGRlbGF5OiBmdW5jdGlvbiAodGltZSl7XHJcbiAgICAgICAgdGhpcy5fZGVsYXkgPSB0aW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgYWZ0ZXIgYW5pbWF0aW9uIGZpbmlzaGVkXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5BbmltYXRvcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmFuaW1hdGlvbi5BbmltYXRvci5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgZG9uZTogZnVuY3Rpb24gKGZ1bmMpIHtcclxuICAgICAgICBpZiAoZnVuYykge1xyXG4gICAgICAgICAgICB0aGlzLl9kb25lTGlzdC5wdXNoKGZ1bmMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhbGwgY2xpcHMgY3JlYXRlZCBpbiBzdGFydCBtZXRob2QuXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5DbGlwW119XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGdldENsaXBzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBMaXN0O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0b3I7XHJcbiIsIi8vIDFEIEJsZW5kIGNsaXAgb2YgYmxlbmQgdHJlZVxyXG4vLyBodHRwOi8vZG9jcy51bml0eTNkLmNvbS9Eb2N1bWVudGF0aW9uL01hbnVhbC8xREJsZW5kaW5nLmh0bWxcclxuXHJcbmltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcblxyXG52YXIgY2xpcFNvcnRGdW5jID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhLnBvc2l0aW9uIDwgYi5wb3NpdGlvbjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcC5JQ2xpcElucHV0XHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwb3NpdGlvblxyXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiAxZCBibGVuZGluZyBub2RlIGluIGFuaW1hdGlvbiBibGVuZCB0cmVlLlxyXG4gKiBvdXRwdXQgY2xpcCBtdXN0IGhhdmUgYmxlbmQxRCBhbmQgY29weSBtZXRob2RcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGlvXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cclxuICogQHBhcmFtIHtvYmplY3RbXX0gW29wdHMuaW5wdXRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMucG9zaXRpb25dXHJcbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gW29wdHMub3V0cHV0XVxyXG4gKi9cclxudmFyIEJsZW5kMURDbGlwID0gZnVuY3Rpb24gKG9wdHMpIHtcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XHJcbiAgICAvKipcclxuICAgICAqIE91dHB1dCBjbGlwIG11c3QgaGF2ZSBibGVuZDFEIGFuZCBjb3B5IG1ldGhvZFxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkNsaXB9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3V0cHV0ID0gb3B0cy5vdXRwdXQgfHwgbnVsbDtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwLklDbGlwSW5wdXRbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5pbnB1dHMgPSBvcHRzLmlucHV0cyB8fCBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IDA7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVLZXkgPSAwO1xyXG4gICAgdGhpcy5fY2FjaGVQb3NpdGlvbiA9IC1JbmZpbml0eTtcclxuXHJcbiAgICB0aGlzLmlucHV0cy5zb3J0KGNsaXBTb3J0RnVuYyk7XHJcbn07XHJcblxyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUgPSBuZXcgQ2xpcCgpO1xyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZDFEQ2xpcDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb25cclxuICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5DbGlwfSBpbnB1dENsaXBcclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRdXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwLklDbGlwSW5wdXR9XHJcbiAqL1xyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuYWRkSW5wdXQgPSBmdW5jdGlvbiAocG9zaXRpb24sIGlucHV0Q2xpcCwgb2Zmc2V0KSB7XHJcbiAgICB2YXIgb2JqID0ge1xyXG4gICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcclxuICAgICAgICBjbGlwOiBpbnB1dENsaXAsXHJcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQgfHwgMFxyXG4gICAgfTtcclxuICAgIHRoaXMubGlmZSA9IE1hdGgubWF4KGlucHV0Q2xpcC5saWZlLCB0aGlzLmxpZmUpO1xyXG5cclxuICAgIGlmICghdGhpcy5pbnB1dHMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbiAgICB2YXIgbGVuID0gdGhpcy5pbnB1dHMubGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMuaW5wdXRzWzBdLnBvc2l0aW9uID4gcG9zaXRpb24pIHtcclxuICAgICAgICB0aGlzLmlucHV0cy51bnNoaWZ0KG9iaik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5wdXRzW2xlbiAtIDFdLnBvc2l0aW9uIDw9IHBvc2l0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIga2V5ID0gdGhpcy5fZmluZEtleShwb3NpdGlvbik7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMuc3BsaWNlKGtleSwgb2JqKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG59O1xyXG5cclxuQmxlbmQxRENsaXAucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAodGltZSwgZFRpbWUsIHNpbGVudCkge1xyXG5cclxuICAgIHZhciByZXQgPSBDbGlwLnByb3RvdHlwZS5zdGVwLmNhbGwodGhpcywgdGltZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcclxuICAgICAgICB0aGlzLnNldFRpbWUodGhpcy5nZXRFbGFwc2VkVGltZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXHJcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufTtcclxuXHJcbkJsZW5kMURDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIHZhciBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb247XHJcbiAgICB2YXIgaW5wdXRzID0gdGhpcy5pbnB1dHM7XHJcbiAgICB2YXIgbGVuID0gaW5wdXRzLmxlbmd0aDtcclxuICAgIHZhciBtaW4gPSBpbnB1dHNbMF0ucG9zaXRpb247XHJcbiAgICB2YXIgbWF4ID0gaW5wdXRzW2xlbi0xXS5wb3NpdGlvbjtcclxuXHJcbiAgICBpZiAocG9zaXRpb24gPD0gbWluIHx8IHBvc2l0aW9uID49IG1heCkge1xyXG4gICAgICAgIHZhciBpbjAgPSBwb3NpdGlvbiA8PSBtaW4gPyBpbnB1dHNbMF0gOiBpbnB1dHNbbGVuLTFdO1xyXG4gICAgICAgIHZhciBjbGlwID0gaW4wLmNsaXA7XHJcbiAgICAgICAgdmFyIG9mZnNldCA9IGluMC5vZmZzZXQ7XHJcbiAgICAgICAgY2xpcC5zZXRUaW1lKCh0aW1lICsgb2Zmc2V0KSAlIGNsaXAubGlmZSk7XHJcbiAgICAgICAgLy8gSW5wdXQgY2xpcCBpcyBhIGJsZW5kIGNsaXBcclxuICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgaWYgKGNsaXAub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCkge1xyXG4gICAgICAgICAgICB0aGlzLm91dHB1dC5jb3B5KGNsaXAub3V0cHV0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm91dHB1dC5jb3B5KGNsaXApO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIGtleSA9IHRoaXMuX2ZpbmRLZXkocG9zaXRpb24pO1xyXG4gICAgICAgIHZhciBpbjEgPSBpbnB1dHNba2V5XTtcclxuICAgICAgICB2YXIgaW4yID0gaW5wdXRzW2tleSArIDFdO1xyXG4gICAgICAgIHZhciBjbGlwMSA9IGluMS5jbGlwO1xyXG4gICAgICAgIHZhciBjbGlwMiA9IGluMi5jbGlwO1xyXG4gICAgICAgIC8vIFNldCB0aW1lIG9uIGlucHV0IGNsaXBzXHJcbiAgICAgICAgY2xpcDEuc2V0VGltZSgodGltZSArIGluMS5vZmZzZXQpICUgY2xpcDEubGlmZSk7XHJcbiAgICAgICAgY2xpcDIuc2V0VGltZSgodGltZSArIGluMi5vZmZzZXQpICUgY2xpcDIubGlmZSk7XHJcblxyXG4gICAgICAgIHZhciB3ID0gKHRoaXMucG9zaXRpb24gLSBpbjEucG9zaXRpb24pIC8gKGluMi5wb3NpdGlvbiAtIGluMS5wb3NpdGlvbik7XHJcblxyXG4gICAgICAgIHZhciBjMSA9IGNsaXAxLm91dHB1dCBpbnN0YW5jZW9mIENsaXAgPyBjbGlwMS5vdXRwdXQgOiBjbGlwMTtcclxuICAgICAgICB2YXIgYzIgPSBjbGlwMi5vdXRwdXQgaW5zdGFuY2VvZiBDbGlwID8gY2xpcDIub3V0cHV0IDogY2xpcDI7XHJcbiAgICAgICAgdGhpcy5vdXRwdXQuYmxlbmQxRChjMSwgYzIsIHcpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsb25lIGEgbmV3IEJsZW5kMUQgY2xpcFxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNsb25lSW5wdXRzIFRydWUgaWYgY2xvbmUgdGhlIGlucHV0IGNsaXBzXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwfVxyXG4gKi9cclxuQmxlbmQxRENsaXAucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKGNsb25lSW5wdXRzKSB7XHJcbiAgICB2YXIgY2xpcCA9IENsaXAucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICBjbGlwLm91dHB1dCA9IHRoaXMub3V0cHV0LmNsb25lKCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGlucHV0Q2xpcCA9IGNsb25lSW5wdXRzID8gdGhpcy5pbnB1dHNbaV0uY2xpcC5jbG9uZSh0cnVlKSA6IHRoaXMuaW5wdXRzW2ldLmNsaXA7XHJcbiAgICAgICAgY2xpcC5hZGRJbnB1dCh0aGlzLmlucHV0c1tpXS5wb3NpdGlvbiwgaW5wdXRDbGlwLCB0aGlzLmlucHV0c1tpXS5vZmZzZXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsaXA7XHJcbn07XHJcblxyXG4vLyBGaW5kIHRoZSBrZXkgd2hlcmUgcG9zaXRpb24gaW4gcmFuZ2UgW2lucHV0c1trZXldLnBvc2l0aW9uLCBpbnB1dHNba2V5KzFdLnBvc2l0aW9uKVxyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuX2ZpbmRLZXkgPSBmdW5jdGlvbiAocG9zaXRpb24pIHtcclxuICAgIHZhciBrZXkgPSAtMTtcclxuICAgIHZhciBpbnB1dHMgPSB0aGlzLmlucHV0cztcclxuICAgIHZhciBsZW4gPSBpbnB1dHMubGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMuX2NhY2hlUG9zaXRpb24gPCBwb3NpdGlvbikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9jYWNoZUtleTsgaSA8IGxlbi0xOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0c1tpXS5wb3NpdGlvbiAmJiBwb3NpdGlvbiA8IGlucHV0c1tpKzFdLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBrZXkgPSBpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgcyA9IE1hdGgubWluKGxlbi0yLCB0aGlzLl9jYWNoZUtleSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IHM7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSBpbnB1dHNbaV0ucG9zaXRpb24gJiYgcG9zaXRpb24gPCBpbnB1dHNbaSsxXS5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAga2V5ID0gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChrZXkgPj0gMCkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlS2V5ID0ga2V5O1xyXG4gICAgICAgIHRoaXMuX2NhY2hlUG9zaXRpb24gPSBwb3NpdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ga2V5O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmxlbmQxRENsaXA7IiwiLy8gRGVsYXVuYXkgVHJpYW5ndWxhdGlvblxyXG4vLyBNb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9pcm9ud2FsbGFieS9kZWxhdW5heVxyXG52YXIgRVBTSUxPTiA9IDEuMCAvIDEwNDg1NzYuMDtcclxuXHJcbmZ1bmN0aW9uIHN1cGVydHJpYW5nbGUodmVydGljZXMpIHtcclxuICAgIHZhciB4bWluID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xyXG4gICAgdmFyIHltaW4gPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XHJcbiAgICB2YXIgeG1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcclxuICAgIHZhciB5bWF4ID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xyXG4gICAgdmFyIGksIGR4LCBkeSwgZG1heCwgeG1pZCwgeW1pZDtcclxuXHJcbiAgICBmb3IgKGkgPSB2ZXJ0aWNlcy5sZW5ndGg7IGktLTsgKSB7XHJcbiAgICAgICAgaWYgKHZlcnRpY2VzW2ldWzBdIDwgeG1pbikgeyB4bWluID0gdmVydGljZXNbaV1bMF07IH1cclxuICAgICAgICBpZiAodmVydGljZXNbaV1bMF0gPiB4bWF4KSB7IHhtYXggPSB2ZXJ0aWNlc1tpXVswXTsgfVxyXG4gICAgICAgIGlmICh2ZXJ0aWNlc1tpXVsxXSA8IHltaW4pIHsgeW1pbiA9IHZlcnRpY2VzW2ldWzFdOyB9XHJcbiAgICAgICAgaWYgKHZlcnRpY2VzW2ldWzFdID4geW1heCkgeyB5bWF4ID0gdmVydGljZXNbaV1bMV07IH1cclxuICAgIH1cclxuXHJcbiAgICBkeCA9IHhtYXggLSB4bWluO1xyXG4gICAgZHkgPSB5bWF4IC0geW1pbjtcclxuICAgIGRtYXggPSBNYXRoLm1heChkeCwgZHkpO1xyXG4gICAgeG1pZCA9IHhtaW4gKyBkeCAqIDAuNTtcclxuICAgIHltaWQgPSB5bWluICsgZHkgKiAwLjU7XHJcblxyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICBbeG1pZCAtIDIwICogZG1heCwgeW1pZCAtICAgICAgZG1heF0sXHJcbiAgICAgICAgW3htaWQgICAgICAgICAgICAsIHltaWQgKyAyMCAqIGRtYXhdLFxyXG4gICAgICAgIFt4bWlkICsgMjAgKiBkbWF4LCB5bWlkIC0gICAgICBkbWF4XVxyXG4gICAgXTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2lyY3VtY2lyY2xlKHZlcnRpY2VzLCBpLCBqLCBrKSB7XHJcbiAgICB2YXIgeDEgPSB2ZXJ0aWNlc1tpXVswXSxcclxuICAgICAgICAgICAgeTEgPSB2ZXJ0aWNlc1tpXVsxXSxcclxuICAgICAgICAgICAgeDIgPSB2ZXJ0aWNlc1tqXVswXSxcclxuICAgICAgICAgICAgeTIgPSB2ZXJ0aWNlc1tqXVsxXSxcclxuICAgICAgICAgICAgeDMgPSB2ZXJ0aWNlc1trXVswXSxcclxuICAgICAgICAgICAgeTMgPSB2ZXJ0aWNlc1trXVsxXSxcclxuICAgICAgICAgICAgZmFic3kxeTIgPSBNYXRoLmFicyh5MSAtIHkyKSxcclxuICAgICAgICAgICAgZmFic3kyeTMgPSBNYXRoLmFicyh5MiAtIHkzKSxcclxuICAgICAgICAgICAgeGMsIHljLCBtMSwgbTIsIG14MSwgbXgyLCBteTEsIG15MiwgZHgsIGR5O1xyXG5cclxuICAgIC8qIENoZWNrIGZvciBjb2luY2lkZW50IHBvaW50cyAqL1xyXG4gICAgaWYgKGZhYnN5MXkyIDwgRVBTSUxPTiAmJiBmYWJzeTJ5MyA8IEVQU0lMT04pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VlayEgQ29pbmNpZGVudCBwb2ludHMhJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZhYnN5MXkyIDwgRVBTSUxPTikge1xyXG4gICAgICAgIG0yICA9IC0oKHgzIC0geDIpIC8gKHkzIC0geTIpKTtcclxuICAgICAgICBteDIgPSAoeDIgKyB4MykgLyAyLjA7XHJcbiAgICAgICAgbXkyID0gKHkyICsgeTMpIC8gMi4wO1xyXG4gICAgICAgIHhjICA9ICh4MiArIHgxKSAvIDIuMDtcclxuICAgICAgICB5YyAgPSBtMiAqICh4YyAtIG14MikgKyBteTI7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoZmFic3kyeTMgPCBFUFNJTE9OKSB7XHJcbiAgICAgICAgbTEgID0gLSgoeDIgLSB4MSkgLyAoeTIgLSB5MSkpO1xyXG4gICAgICAgIG14MSA9ICh4MSArIHgyKSAvIDIuMDtcclxuICAgICAgICBteTEgPSAoeTEgKyB5MikgLyAyLjA7XHJcbiAgICAgICAgeGMgID0gKHgzICsgeDIpIC8gMi4wO1xyXG4gICAgICAgIHljICA9IG0xICogKHhjIC0gbXgxKSArIG15MTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBtMSAgPSAtKCh4MiAtIHgxKSAvICh5MiAtIHkxKSk7XHJcbiAgICAgICAgbTIgID0gLSgoeDMgLSB4MikgLyAoeTMgLSB5MikpO1xyXG4gICAgICAgIG14MSA9ICh4MSArIHgyKSAvIDIuMDtcclxuICAgICAgICBteDIgPSAoeDIgKyB4MykgLyAyLjA7XHJcbiAgICAgICAgbXkxID0gKHkxICsgeTIpIC8gMi4wO1xyXG4gICAgICAgIG15MiA9ICh5MiArIHkzKSAvIDIuMDtcclxuICAgICAgICB4YyAgPSAobTEgKiBteDEgLSBtMiAqIG14MiArIG15MiAtIG15MSkgLyAobTEgLSBtMik7XHJcbiAgICAgICAgeWMgID0gKGZhYnN5MXkyID4gZmFic3kyeTMpID9cclxuICAgICAgICAgICAgbTEgKiAoeGMgLSBteDEpICsgbXkxIDpcclxuICAgICAgICAgICAgbTIgKiAoeGMgLSBteDIpICsgbXkyO1xyXG4gICAgfVxyXG5cclxuICAgIGR4ID0geDIgLSB4YztcclxuICAgIGR5ID0geTIgLSB5YztcclxuICAgIHJldHVybiB7aTogaSwgajogaiwgazogaywgeDogeGMsIHk6IHljLCByOiBkeCAqIGR4ICsgZHkgKiBkeX07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZHVwKGVkZ2VzKSB7XHJcbiAgICB2YXIgaSwgaiwgYSwgYiwgbSwgbjtcclxuXHJcbiAgICBmb3IgKGogPSBlZGdlcy5sZW5ndGg7IGo7ICkge1xyXG4gICAgICAgIGIgPSBlZGdlc1stLWpdO1xyXG4gICAgICAgIGEgPSBlZGdlc1stLWpdO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSBqOyBpOyApIHtcclxuICAgICAgICAgICAgbiA9IGVkZ2VzWy0taV07XHJcbiAgICAgICAgICAgIG0gPSBlZGdlc1stLWldO1xyXG5cclxuICAgICAgICAgICAgaWYgKChhID09PSBtICYmIGIgPT09IG4pIHx8IChhID09PSBuICYmIGIgPT09IG0pKSB7XHJcbiAgICAgICAgICAgICAgICBlZGdlcy5zcGxpY2UoaiwgMik7XHJcbiAgICAgICAgICAgICAgICBlZGdlcy5zcGxpY2UoaSwgMik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxudmFyIGRlbGF1bmF5ID0ge1xyXG4gICAgdHJpYW5ndWxhdGU6IGZ1bmN0aW9uKHZlcnRpY2VzLCBrZXkpIHtcclxuICAgICAgICB2YXIgbiA9IHZlcnRpY2VzLmxlbmd0aDtcclxuICAgICAgICB2YXIgaSwgaiwgaW5kaWNlcywgc3QsIG9wZW4sIGNsb3NlZCwgZWRnZXMsIGR4LCBkeSwgYSwgYiwgYztcclxuXHJcbiAgICAgICAgLyogQmFpbCBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIHZlcnRpY2VzIHRvIGZvcm0gYW55IHRyaWFuZ2xlcy4gKi9cclxuICAgICAgICBpZiAobiA8IDMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogU2xpY2Ugb3V0IHRoZSBhY3R1YWwgdmVydGljZXMgZnJvbSB0aGUgcGFzc2VkIG9iamVjdHMuIChEdXBsaWNhdGUgdGhlXHJcbiAgICAgICAgICAgICogYXJyYXkgZXZlbiBpZiB3ZSBkb24ndCwgdGhvdWdoLCBzaW5jZSB3ZSBuZWVkIHRvIG1ha2UgYSBzdXBlcnRyaWFuZ2xlXHJcbiAgICAgICAgICAgICogbGF0ZXIgb24hKSAqL1xyXG4gICAgICAgIHZlcnRpY2VzID0gdmVydGljZXMuc2xpY2UoMCk7XHJcblxyXG4gICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgICAgZm9yIChpID0gbjsgaS0tOyApIHtcclxuICAgICAgICAgICAgICAgIHZlcnRpY2VzW2ldID0gdmVydGljZXNbaV1ba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogTWFrZSBhbiBhcnJheSBvZiBpbmRpY2VzIGludG8gdGhlIHZlcnRleCBhcnJheSwgc29ydGVkIGJ5IHRoZVxyXG4gICAgICAgICAgICAqIHZlcnRpY2VzJyB4LXBvc2l0aW9uLiBGb3JjZSBzdGFibGUgc29ydGluZyBieSBjb21wYXJpbmcgaW5kaWNlcyBpZlxyXG4gICAgICAgICAgICAqIHRoZSB4LXBvc2l0aW9ucyBhcmUgZXF1YWwuICovXHJcbiAgICAgICAgaW5kaWNlcyA9IG5ldyBBcnJheShuKTtcclxuXHJcbiAgICAgICAgZm9yIChpID0gbjsgaS0tOyApIHtcclxuICAgICAgICAgICAgaW5kaWNlc1tpXSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpbmRpY2VzLnNvcnQoZnVuY3Rpb24oaSwgaikge1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IHZlcnRpY2VzW2pdWzBdIC0gdmVydGljZXNbaV1bMF07XHJcbiAgICAgICAgICAgIHJldHVybiBkaWZmICE9PSAwID8gZGlmZiA6IGkgLSBqO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvKiBOZXh0LCBmaW5kIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgc3VwZXJ0cmlhbmdsZSAod2hpY2ggY29udGFpbnMgYWxsIG90aGVyXHJcbiAgICAgICAgICAgICogdHJpYW5nbGVzKSwgYW5kIGFwcGVuZCB0aGVtIG9udG8gdGhlIGVuZCBvZiBhIChjb3B5IG9mKSB0aGUgdmVydGV4XHJcbiAgICAgICAgICAgICogYXJyYXkuICovXHJcbiAgICAgICAgc3QgPSBzdXBlcnRyaWFuZ2xlKHZlcnRpY2VzKTtcclxuICAgICAgICB2ZXJ0aWNlcy5wdXNoKHN0WzBdLCBzdFsxXSwgc3RbMl0pO1xyXG5cclxuICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBvcGVuIGxpc3QgKGNvbnRhaW5pbmcgdGhlIHN1cGVydHJpYW5nbGUgYW5kIG5vdGhpbmdcclxuICAgICAgICAgICAgKiBlbHNlKSBhbmQgdGhlIGNsb3NlZCBsaXN0ICh3aGljaCBpcyBlbXB0eSBzaW5jZSB3ZSBoYXZuJ3QgcHJvY2Vzc2VkXHJcbiAgICAgICAgICAgICogYW55IHRyaWFuZ2xlcyB5ZXQpLiAqL1xyXG4gICAgICAgIG9wZW4gICA9IFtjaXJjdW1jaXJjbGUodmVydGljZXMsIG4gKyAwLCBuICsgMSwgbiArIDIpXTtcclxuICAgICAgICBjbG9zZWQgPSBbXTtcclxuICAgICAgICBlZGdlcyAgPSBbXTtcclxuXHJcbiAgICAgICAgLyogSW5jcmVtZW50YWxseSBhZGQgZWFjaCB2ZXJ0ZXggdG8gdGhlIG1lc2guICovXHJcbiAgICAgICAgZm9yIChpID0gaW5kaWNlcy5sZW5ndGg7IGktLTsgZWRnZXMubGVuZ3RoID0gMCkge1xyXG4gICAgICAgICAgICBjID0gaW5kaWNlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8qIEZvciBlYWNoIG9wZW4gdHJpYW5nbGUsIGNoZWNrIHRvIHNlZSBpZiB0aGUgY3VycmVudCBwb2ludCBpc1xyXG4gICAgICAgICAgICAgICAgKiBpbnNpZGUgaXQncyBjaXJjdW1jaXJjbGUuIElmIGl0IGlzLCByZW1vdmUgdGhlIHRyaWFuZ2xlIGFuZCBhZGRcclxuICAgICAgICAgICAgICAgICogaXQncyBlZGdlcyB0byBhbiBlZGdlIGxpc3QuICovXHJcbiAgICAgICAgICAgIGZvciAoaiA9IG9wZW4ubGVuZ3RoOyBqLS07ICkge1xyXG4gICAgICAgICAgICAgICAgLyogSWYgdGhpcyBwb2ludCBpcyB0byB0aGUgcmlnaHQgb2YgdGhpcyB0cmlhbmdsZSdzIGNpcmN1bWNpcmNsZSxcclxuICAgICAgICAgICAgICAgICAgICAqIHRoZW4gdGhpcyB0cmlhbmdsZSBzaG91bGQgbmV2ZXIgZ2V0IGNoZWNrZWQgYWdhaW4uIFJlbW92ZSBpdFxyXG4gICAgICAgICAgICAgICAgICAgICogZnJvbSB0aGUgb3BlbiBsaXN0LCBhZGQgaXQgdG8gdGhlIGNsb3NlZCBsaXN0LCBhbmQgc2tpcC4gKi9cclxuICAgICAgICAgICAgICAgIGR4ID0gdmVydGljZXNbY11bMF0gLSBvcGVuW2pdLng7XHJcbiAgICAgICAgICAgICAgICBpZiAoZHggPiAwLjAgJiYgZHggKiBkeCA+IG9wZW5bal0ucikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlZC5wdXNoKG9wZW5bal0pO1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZW4uc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8qIElmIHdlJ3JlIG91dHNpZGUgdGhlIGNpcmN1bWNpcmNsZSwgc2tpcCB0aGlzIHRyaWFuZ2xlLiAqL1xyXG4gICAgICAgICAgICAgICAgZHkgPSB2ZXJ0aWNlc1tjXVsxXSAtIG9wZW5bal0ueTtcclxuICAgICAgICAgICAgICAgIGlmIChkeCAqIGR4ICsgZHkgKiBkeSAtIG9wZW5bal0uciA+IEVQU0lMT04pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvKiBSZW1vdmUgdGhlIHRyaWFuZ2xlIGFuZCBhZGQgaXQncyBlZGdlcyB0byB0aGUgZWRnZSBsaXN0LiAqL1xyXG4gICAgICAgICAgICAgICAgZWRnZXMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmksIG9wZW5bal0uaixcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmosIG9wZW5bal0uayxcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmssIG9wZW5bal0uaVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIG9wZW4uc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKiBSZW1vdmUgYW55IGRvdWJsZWQgZWRnZXMuICovXHJcbiAgICAgICAgICAgIGRlZHVwKGVkZ2VzKTtcclxuXHJcbiAgICAgICAgICAgIC8qIEFkZCBhIG5ldyB0cmlhbmdsZSBmb3IgZWFjaCBlZGdlLiAqL1xyXG4gICAgICAgICAgICBmb3IgKGogPSBlZGdlcy5sZW5ndGg7IGo7ICkge1xyXG4gICAgICAgICAgICAgICAgYiA9IGVkZ2VzWy0tal07XHJcbiAgICAgICAgICAgICAgICBhID0gZWRnZXNbLS1qXTtcclxuICAgICAgICAgICAgICAgIG9wZW4ucHVzaChjaXJjdW1jaXJjbGUodmVydGljZXMsIGEsIGIsIGMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogQ29weSBhbnkgcmVtYWluaW5nIG9wZW4gdHJpYW5nbGVzIHRvIHRoZSBjbG9zZWQgbGlzdCwgYW5kIHRoZW5cclxuICAgICAgICAgICAgKiByZW1vdmUgYW55IHRyaWFuZ2xlcyB0aGF0IHNoYXJlIGEgdmVydGV4IHdpdGggdGhlIHN1cGVydHJpYW5nbGUsXHJcbiAgICAgICAgICAgICogYnVpbGRpbmcgYSBsaXN0IG9mIHRyaXBsZXRzIHRoYXQgcmVwcmVzZW50IHRyaWFuZ2xlcy4gKi9cclxuICAgICAgICBmb3IgKGkgPSBvcGVuLmxlbmd0aDsgaS0tOyApIHtcclxuICAgICAgICAgICAgY2xvc2VkLnB1c2gob3BlbltpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wZW4ubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChpID0gY2xvc2VkLmxlbmd0aDsgaS0tOyApIHtcclxuICAgICAgICAgICAgaWYgKGNsb3NlZFtpXS5pIDwgbiAmJiBjbG9zZWRbaV0uaiA8IG4gJiYgY2xvc2VkW2ldLmsgPCBuKSB7XHJcbiAgICAgICAgICAgICAgICBvcGVuLnB1c2goY2xvc2VkW2ldLmksIGNsb3NlZFtpXS5qLCBjbG9zZWRbaV0uayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIFlheSwgd2UncmUgZG9uZSEgKi9cclxuICAgICAgICByZXR1cm4gb3BlbjtcclxuICAgIH0sXHJcbiAgICBjb250YWluczogZnVuY3Rpb24odHJpLCBwKSB7XHJcbiAgICAgICAgLyogQm91bmRpbmcgYm94IHRlc3QgZmlyc3QsIGZvciBxdWljayByZWplY3Rpb25zLiAqL1xyXG4gICAgICAgIGlmICgocFswXSA8IHRyaVswXVswXSAmJiBwWzBdIDwgdHJpWzFdWzBdICYmIHBbMF0gPCB0cmlbMl1bMF0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFswXSA+IHRyaVswXVswXSAmJiBwWzBdID4gdHJpWzFdWzBdICYmIHBbMF0gPiB0cmlbMl1bMF0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFsxXSA8IHRyaVswXVsxXSAmJiBwWzFdIDwgdHJpWzFdWzFdICYmIHBbMV0gPCB0cmlbMl1bMV0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFsxXSA+IHRyaVswXVsxXSAmJiBwWzFdID4gdHJpWzFdWzFdICYmIHBbMV0gPiB0cmlbMl1bMV0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGEgPSB0cmlbMV1bMF0gLSB0cmlbMF1bMF07XHJcbiAgICAgICAgdmFyIGIgPSB0cmlbMl1bMF0gLSB0cmlbMF1bMF07XHJcbiAgICAgICAgdmFyIGMgPSB0cmlbMV1bMV0gLSB0cmlbMF1bMV07XHJcbiAgICAgICAgdmFyIGQgPSB0cmlbMl1bMV0gLSB0cmlbMF1bMV07XHJcbiAgICAgICAgdmFyIGkgPSBhICogZCAtIGIgKiBjO1xyXG5cclxuICAgICAgICAvKiBEZWdlbmVyYXRlIHRyaS4gKi9cclxuICAgICAgICBpZiAoaSA9PT0gMC4wKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHUgPSAoZCAqIChwWzBdIC0gdHJpWzBdWzBdKSAtIGIgKiAocFsxXSAtIHRyaVswXVsxXSkpIC8gaSxcclxuICAgICAgICAgICAgICAgIHYgPSAoYSAqIChwWzFdIC0gdHJpWzBdWzFdKSAtIGMgKiAocFswXSAtIHRyaVswXVswXSkpIC8gaTtcclxuXHJcbiAgICAgICAgLyogSWYgd2UncmUgb3V0c2lkZSB0aGUgdHJpLCBmYWlsLiAqL1xyXG4gICAgICAgIGlmICh1IDwgMC4wIHx8IHYgPCAwLjAgfHwgKHUgKyB2KSA+IDEuMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBbdSwgdl07XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBkZWxhdW5heTtcclxuIiwiXHJcbmV4cG9ydCB2YXIgR0xNQVRfRVBTSUxPTiA9IDAuMDAwMDAxO1xyXG5cclxuLy8gVXNlIEFycmF5IGluc3RlYWQgb2YgRmxvYXQzMkFycmF5LiBJdCBzZWVtcyB0byBiZSBtdWNoIGZhc3RlciBhbmQgaGlnaGVyIHByZWNpc2lvbi5cclxuZXhwb3J0IHZhciBHTE1BVF9BUlJBWV9UWVBFID0gQXJyYXk7XHJcbi8vIGlmKCFHTE1BVF9BUlJBWV9UWVBFKSB7XHJcbi8vICAgICBHTE1BVF9BUlJBWV9UWVBFID0gKHR5cGVvZiBGbG9hdDMyQXJyYXkgIT09ICd1bmRlZmluZWQnKSA/IEZsb2F0MzJBcnJheSA6IEFycmF5O1xyXG4vLyB9XHJcblxyXG5leHBvcnQgdmFyIEdMTUFUX1JBTkRPTSA9IE1hdGgucmFuZG9tO1xyXG4iLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgMiBEaW1lbnNpb25hbCBWZWN0b3JcclxuICogQG5hbWUgdmVjMlxyXG4gKi9cclxuXHJcbnZhciB2ZWMyID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjMlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjMn0gYSBuZXcgMkQgdmVjdG9yXHJcbiAqL1xyXG52ZWMyLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDIpO1xyXG4gICAgb3V0WzBdID0gMDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMiBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBhIG5ldyAyRCB2ZWN0b3JcclxuICovXHJcbnZlYzIuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMik7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMyIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gYSBuZXcgMkQgdmVjdG9yXHJcbiAqL1xyXG52ZWMyLmZyb21WYWx1ZXMgPSBmdW5jdGlvbih4LCB5KSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMik7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzIgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMiB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5KSB7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTdWJ0cmFjdHMgdmVjdG9yIGIgZnJvbSB2ZWN0b3IgYVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnN1YnRyYWN0ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMi5zdWIgPSB2ZWMyLnN1YnRyYWN0O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm11bHRpcGx5ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMi5tdWwgPSB2ZWMyLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLmRpdmlkZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAvIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpdmlkZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLmRpdiA9IHZlYzIuZGl2aWRlO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1pbmltdW0gb2YgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gTWF0aC5taW4oYVswXSwgYlswXSk7XHJcbiAgICBvdXRbMV0gPSBNYXRoLm1pbihhWzFdLCBiWzFdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMyIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYjtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWMyJ3MgYWZ0ZXIgc2NhbGluZyB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWVcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYiBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgKGJbMF0gKiBzY2FsZSk7XHJcbiAgICBvdXRbMV0gPSBhWzFdICsgKGJbMV0gKiBzY2FsZSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMyLmRpc3RhbmNlID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgdmFyIHggPSBiWzBdIC0gYVswXSxcclxuICAgICAgICB5ID0gYlsxXSAtIGFbMV07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuZGlzdCA9IHZlYzIuZGlzdGFuY2U7XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMyLnNxdWFyZWREaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXHJcbiAgICAgICAgeSA9IGJbMV0gLSBhWzFdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuc3FyRGlzdCA9IHZlYzIuc3F1YXJlZERpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWMyLmxlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLmxlbiA9IHZlYzIubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWMyLnNxdWFyZWRMZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLnNxckxlbiA9IHZlYzIuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gLWFbMF07XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5pbnZlcnNlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcclxuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xyXG4gIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogTm9ybWFsaXplIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgdmFyIGxlbiA9IHgqeCArIHkqeTtcclxuICAgIGlmIChsZW4gPiAwKSB7XHJcbiAgICAgICAgLy9UT0RPOiBldmFsdWF0ZSB1c2Ugb2YgZ2xtX2ludnNxcnQgaGVyZT9cclxuICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgICAgb3V0WzBdID0gYVswXSAqIGxlbjtcclxuICAgICAgICBvdXRbMV0gPSBhWzFdICogbGVuO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXHJcbnZlYzIuZG90ID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbXB1dGVzIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHR3byB2ZWMyJ3NcclxuICogTm90ZSB0aGF0IHRoZSBjcm9zcyBwcm9kdWN0IG11c3QgYnkgZGVmaW5pdGlvbiBwcm9kdWNlIGEgM0QgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzIuY3Jvc3MgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZhciB6ID0gYVswXSAqIGJbMV0gLSBhWzFdICogYlswXTtcclxuICAgIG91dFswXSA9IG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSB6O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIubGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcclxuICAgIHZhciBheCA9IGFbMF0sXHJcbiAgICAgICAgYXkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XHJcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHZlY3RvciB3aXRoIHRoZSBnaXZlbiBzY2FsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3NjYWxlXSBMZW5ndGggb2YgdGhlIHJlc3VsdGluZyB2ZWN0b3IuIElmIG9tbWl0dGVkLCBhIHVuaXQgdmVjdG9yIHdpbGwgYmUgcmV0dXJuZWRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5yYW5kb20gPSBmdW5jdGlvbiAob3V0LCBzY2FsZSkge1xyXG4gICAgc2NhbGUgPSBzY2FsZSB8fCAxLjA7XHJcbiAgICB2YXIgciA9IEdMTUFUX1JBTkRPTSgpICogMi4wICogTWF0aC5QSTtcclxuICAgIG91dFswXSA9IE1hdGguY29zKHIpICogc2NhbGU7XHJcbiAgICBvdXRbMV0gPSBNYXRoLnNpbihyKSAqIHNjYWxlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDJ9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIudHJhbnNmb3JtTWF0MiA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzJdICogeTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDJkfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnRyYW5zZm9ybU1hdDJkID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV07XHJcbiAgICBvdXRbMF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHkgKyBtWzVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQzXHJcbiAqIDNyZCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDN9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIudHJhbnNmb3JtTWF0MyA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzNdICogeSArIG1bNl07XHJcbiAgICBvdXRbMV0gPSBtWzFdICogeCArIG1bNF0gKiB5ICsgbVs3XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMiB3aXRoIGEgbWF0NFxyXG4gKiAzcmQgdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcwJ1xyXG4gKiA0dGggdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQ0fSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnRyYW5zZm9ybU1hdDQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZhciB4ID0gYVswXSxcclxuICAgICAgICB5ID0gYVsxXTtcclxuICAgIG91dFswXSA9IG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzEyXTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzEzXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybSBzb21lIG9wZXJhdGlvbiBvdmVyIGFuIGFycmF5IG9mIHZlYzJzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3ZlclxyXG4gKiBAcGFyYW0ge051bWJlcn0gc3RyaWRlIE51bWJlciBvZiBlbGVtZW50cyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHZlYzIuIElmIDAgYXNzdW1lcyB0aWdodGx5IHBhY2tlZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IE51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjMnMgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggdmVjdG9yIGluIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW2FyZ10gYWRkaXRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGZuXHJcbiAqIEByZXR1cm5zIHtBcnJheX0gYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuZm9yRWFjaCA9IChmdW5jdGlvbigpIHtcclxuICAgIHZhciB2ZWMgPSB2ZWMyLmNyZWF0ZSgpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbihhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcclxuICAgICAgICB2YXIgaSwgbDtcclxuICAgICAgICBpZighc3RyaWRlKSB7XHJcbiAgICAgICAgICAgIHN0cmlkZSA9IDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZighb2Zmc2V0KSB7XHJcbiAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjb3VudCkge1xyXG4gICAgICAgICAgICBsID0gTWF0aC5taW4oKGNvdW50ICogc3RyaWRlKSArIG9mZnNldCwgYS5sZW5ndGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGwgPSBhLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihpID0gb2Zmc2V0OyBpIDwgbDsgaSArPSBzdHJpZGUpIHtcclxuICAgICAgICAgICAgdmVjWzBdID0gYVtpXTsgdmVjWzFdID0gYVtpKzFdO1xyXG4gICAgICAgICAgICBmbih2ZWMsIHZlYywgYXJnKTtcclxuICAgICAgICAgICAgYVtpXSA9IHZlY1swXTsgYVtpKzFdID0gdmVjWzFdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjMjsiLCJpbXBvcnQgdmVjMiBmcm9tICcuLi9nbG1hdHJpeC92ZWMyJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuVmVjdG9yMlxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKi9cclxudmFyIFZlY3RvcjIgPSBmdW5jdGlvbih4LCB5KSB7XHJcblxyXG4gICAgeCA9IHggfHwgMDtcclxuICAgIHkgPSB5IHx8IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIFZlY3RvcjIsIHJlYWQgYW5kIHdyaXRlIG9mIHgsIHkgd2lsbCBjaGFuZ2UgdGhlIHZhbHVlcyBpbiBhcnJheVxyXG4gICAgICogQWxsIG1ldGhvZHMgYWxzbyBvcGVyYXRlIG9uIHRoZSBhcnJheSBpbnN0ZWFkIG9mIHgsIHkgY29tcG9uZW50c1xyXG4gICAgICogQG5hbWUgYXJyYXlcclxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IyI1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFycmF5ID0gdmVjMi5mcm9tVmFsdWVzKHgsIHkpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlydHkgZmxhZyBpcyB1c2VkIGJ5IHRoZSBOb2RlIHRvIGRldGVybWluZVxyXG4gICAgICogaWYgdGhlIG1hdHJpeCBpcyB1cGRhdGVkIHRvIGxhdGVzdFxyXG4gICAgICogQG5hbWUgX2RpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjIjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcblZlY3RvcjIucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBWZWN0b3IyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGIgdG8gc2VsZlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCBhbmQgeSBjb21wb25lbnRzXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24oeCwgeSkge1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSB4O1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSB5O1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCBhbmQgeSBjb21wb25lbnRzIGZyb20gYXJyYXlcclxuICAgICAqIEBwYXJhbSAge0Zsb2F0MzJBcnJheXxudW1iZXJbXX0gYXJyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNldEFycmF5OiBmdW5jdGlvbihhcnIpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0gYXJyWzBdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSBhcnJbMV07XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBWZWN0b3IyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIodGhpcy54LCB0aGlzLnkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgeCwgeSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcm9zcyBwcm9kdWN0IG9mIHNlbGYgYW5kIGIsIHdyaXR0ZW4gdG8gYSBWZWN0b3IzIG91dFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBjcm9zczogZnVuY3Rpb24ob3V0LCBiKSB7XHJcbiAgICAgICAgdmVjMi5jcm9zcyhvdXQuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBkaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5kaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuZGlzdGFuY2UodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIGRpdmlkZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGRpdjogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuZGl2KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXZpZGUgc2VsZiBieSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgZGl2aWRlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5kaXZpZGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5kb3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2YgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIubGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIubGVuZ3RoKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIExpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbGVycDogZnVuY3Rpb24oYSwgYiwgdCkge1xyXG4gICAgICAgIHZlYzIubGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWluaW11bSBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbWluOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5taW4odGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1heGltdW0gb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIG1heDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIubWF4KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBtdWw6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXV0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOZWdhdGUgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBuZWdhdGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZlYzIubmVnYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWxpemUgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZlYzIubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSByYW5kb20geCwgeSBjb21wb25lbnRzIHdpdGggYSBnaXZlbiBzY2FsZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICByYW5kb206IGZ1bmN0aW9uKHNjYWxlKSB7XHJcbiAgICAgICAgdmVjMi5yYW5kb20odGhpcy5hcnJheSwgc2NhbGUpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24ocykge1xyXG4gICAgICAgIHZlYzIuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIGIgYW5kIGFkZCB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlQW5kQWRkOiBmdW5jdGlvbihiLCBzKSB7XHJcbiAgICAgICAgdmVjMi5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5zcXJEaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZERpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3F1YXJlZERpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkTGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3FyTGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3F1YXJlZExlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3Igc3VidHJhY3RcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzdWI6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLnN1Yih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgYiBmcm9tIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzdWJ0cmFjdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuc3VidHJhY3QodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgyIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQyOiBmdW5jdGlvbihtKSB7XHJcbiAgICAgICAgdmVjMi50cmFuc2Zvcm1NYXQyKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4MmQgbVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQyZDogZnVuY3Rpb24obSkge1xyXG4gICAgICAgIHZlYzIudHJhbnNmb3JtTWF0MmQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgbS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgzIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQzOiBmdW5jdGlvbihtKSB7XHJcbiAgICAgICAgdmVjMi50cmFuc2Zvcm1NYXQzKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4NCBtXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtTWF0NDogZnVuY3Rpb24obSkge1xyXG4gICAgICAgIHZlYzIudHJhbnNmb3JtTWF0NCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLy8gR2V0dGVyIGFuZCBTZXR0ZXJcclxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xyXG5cclxuICAgIHZhciBwcm90byA9IFZlY3RvcjIucHJvdG90eXBlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yMlxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzBdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVswXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yMlxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8vIFN1cHBseSBtZXRob2RzIHRoYXQgYXJlIG5vdCBpbiBwbGFjZVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5hZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5KSB7XHJcbiAgICB2ZWMyLnNldChvdXQuYXJyYXksIHgsIHkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGIpIHtcclxuICAgIHZlYzIuY29weShvdXQuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5jcm9zcyA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMi5jcm9zcyhvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLmRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5kaXN0YW5jZShhLmFycmF5LCBiLmFycmF5KTtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIuZGlzdGFuY2UgPSBWZWN0b3IyLmRpc3Q7XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuZGl2ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMyLmRpdmlkZShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5kaXZpZGUgPSBWZWN0b3IyLmRpdjtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMi5kb3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5kb3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIubGVuID0gZnVuY3Rpb24oYikge1xyXG4gICAgcmV0dXJuIHZlYzIubGVuZ3RoKGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLy8gVmVjdG9yMi5sZW5ndGggPSBWZWN0b3IyLmxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5sZXJwID0gZnVuY3Rpb24ob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2ZWMyLmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5taW4gPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIubWluKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMi5tYXgob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIubXVsdGlwbHkob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIubXVsdGlwbHkgPSBWZWN0b3IyLm11bDtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMi5uZWdhdGUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMi5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIucmFuZG9tID0gZnVuY3Rpb24ob3V0LCBzY2FsZSkge1xyXG4gICAgdmVjMi5yYW5kb20ob3V0LmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgc2NhbGUpIHtcclxuICAgIHZlYzIuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICB2ZWMyLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLnNxckRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5zcXJEaXN0KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMi5zcXVhcmVkRGlzdGFuY2UgPSBWZWN0b3IyLnNxckRpc3Q7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIuc3FyTGVuID0gZnVuY3Rpb24oYSkge1xyXG4gICAgcmV0dXJuIHZlYzIuc3FyTGVuKGEuYXJyYXkpO1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLnNxdWFyZWRMZW5ndGggPSBWZWN0b3IyLnNxckxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc3ViID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMyLnN1YnRyYWN0KG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLnN1YnRyYWN0ID0gVmVjdG9yMi5zdWI7XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MiA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQyKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9ICBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MmQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZlYzIudHJhbnNmb3JtTWF0MmQob3V0LmFycmF5LCBhLmFycmF5LCBtLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtNYXRyaXgzfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MyA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQzKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQ0KG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBWZWN0b3IyO1xyXG4iLCIvLyAyRCBCbGVuZCBjbGlwIG9mIGJsZW5kIHRyZWVcclxuLy8gaHR0cDovL2RvY3MudW5pdHkzZC5jb20vRG9jdW1lbnRhdGlvbi9NYW51YWwvMkRCbGVuZGluZy5odG1sXHJcbmltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcbmltcG9ydCBkZWxhdW5heSBmcm9tICcuLi91dGlsL2RlbGF1bmF5JztcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi4vbWF0aC9WZWN0b3IyJztcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmFuaW1hdGlvbi5CbGVuZDJEQ2xpcC5JQ2xpcElucHV0XHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5WZWN0b3IyfSBwb3NpdGlvblxyXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiAyZCBibGVuZGluZyBub2RlIGluIGFuaW1hdGlvbiBibGVuZCB0cmVlLlxyXG4gKiBvdXRwdXQgY2xpcCBtdXN0IGhhdmUgYmxlbmQyRCBtZXRob2RcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5CbGVuZDJEQ2xpcFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGlvXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cclxuICogQHBhcmFtIHtvYmplY3RbXX0gW29wdHMuaW5wdXRzXVxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yMn0gW29wdHMucG9zaXRpb25dXHJcbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gW29wdHMub3V0cHV0XVxyXG4gKi9cclxudmFyIEJsZW5kMkRDbGlwID0gZnVuY3Rpb24gKG9wdHMpIHtcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XHJcbiAgICAvKipcclxuICAgICAqIE91dHB1dCBjbGlwIG11c3QgaGF2ZSBibGVuZDJEIG1ldGhvZFxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkNsaXB9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3V0cHV0ID0gb3B0cy5vdXRwdXQgfHwgbnVsbDtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkJsZW5kMkRDbGlwLklDbGlwSW5wdXRbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5pbnB1dHMgPSBvcHRzLmlucHV0cyB8fCBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVUcmlhbmdsZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5fdHJpYW5nbGVzID0gW107XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlVHJpYW5nbGVzKCk7XHJcbn07XHJcblxyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUgPSBuZXcgQ2xpcCgpO1xyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZDJEQ2xpcDtcclxuLyoqXHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IyfSBwb3NpdGlvblxyXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGlucHV0Q2xpcFxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldF1cclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQmxlbmQyRENsaXAuSUNsaXBJbnB1dH1cclxuICovXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5hZGRJbnB1dCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgaW5wdXRDbGlwLCBvZmZzZXQpIHtcclxuICAgIHZhciBvYmogPSB7XHJcbiAgICAgICAgcG9zaXRpb24gOiBwb3NpdGlvbixcclxuICAgICAgICBjbGlwIDogaW5wdXRDbGlwLFxyXG4gICAgICAgIG9mZnNldCA6IG9mZnNldCB8fCAwXHJcbiAgICB9O1xyXG4gICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgdGhpcy5saWZlID0gTWF0aC5tYXgoaW5wdXRDbGlwLmxpZmUsIHRoaXMubGlmZSk7XHJcbiAgICAvLyBUT0RPIENoYW5nZSB0byBpbmNyZW1lbnRhbGx5IGFkZGluZ1xyXG4gICAgdGhpcy5fdXBkYXRlVHJpYW5nbGVzKCk7XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxufTtcclxuXHJcbi8vIERlbGF1bmF5IHRyaWFuZ3VsYXRlXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5fdXBkYXRlVHJpYW5nbGVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGlucHV0cyA9IHRoaXMuaW5wdXRzLm1hcChmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIHJldHVybiBhLnBvc2l0aW9uO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl90cmlhbmdsZXMgPSBkZWxhdW5heS50cmlhbmd1bGF0ZShpbnB1dHMsICdhcnJheScpO1xyXG59O1xyXG5cclxuQmxlbmQyRENsaXAucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAodGltZSwgZFRpbWUsIHNpbGVudCkge1xyXG5cclxuICAgIHZhciByZXQgPSBDbGlwLnByb3RvdHlwZS5zdGVwLmNhbGwodGhpcywgdGltZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcclxuICAgICAgICB0aGlzLnNldFRpbWUodGhpcy5nZXRFbGFwc2VkVGltZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXHJcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufTtcclxuXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIHZhciByZXMgPSB0aGlzLl9maW5kVHJpYW5nbGUodGhpcy5wb3NpdGlvbik7XHJcbiAgICBpZiAoIXJlcykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIEluIEJhcnljZW50cmljXHJcbiAgICB2YXIgYSA9IHJlc1sxXTsgLy8gUGVyY2VudCBvZiBjbGlwMlxyXG4gICAgdmFyIGIgPSByZXNbMl07IC8vIFBlcmNlbnQgb2YgY2xpcDNcclxuXHJcbiAgICB2YXIgdHJpID0gcmVzWzBdO1xyXG5cclxuICAgIHZhciBpbjEgPSB0aGlzLmlucHV0c1t0cmkuaW5kaWNlc1swXV07XHJcbiAgICB2YXIgaW4yID0gdGhpcy5pbnB1dHNbdHJpLmluZGljZXNbMV1dO1xyXG4gICAgdmFyIGluMyA9IHRoaXMuaW5wdXRzW3RyaS5pbmRpY2VzWzJdXTtcclxuICAgIHZhciBjbGlwMSA9IGluMS5jbGlwO1xyXG4gICAgdmFyIGNsaXAyID0gaW4yLmNsaXA7XHJcbiAgICB2YXIgY2xpcDMgPSBpbjMuY2xpcDtcclxuXHJcbiAgICBjbGlwMS5zZXRUaW1lKCh0aW1lICsgaW4xLm9mZnNldCkgJSBjbGlwMS5saWZlKTtcclxuICAgIGNsaXAyLnNldFRpbWUoKHRpbWUgKyBpbjIub2Zmc2V0KSAlIGNsaXAyLmxpZmUpO1xyXG4gICAgY2xpcDMuc2V0VGltZSgodGltZSArIGluMy5vZmZzZXQpICUgY2xpcDMubGlmZSk7XHJcblxyXG4gICAgdmFyIGMxID0gY2xpcDEub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAxLm91dHB1dCA6IGNsaXAxO1xyXG4gICAgdmFyIGMyID0gY2xpcDIub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAyLm91dHB1dCA6IGNsaXAyO1xyXG4gICAgdmFyIGMzID0gY2xpcDMub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAzLm91dHB1dCA6IGNsaXAzO1xyXG5cclxuICAgIHRoaXMub3V0cHV0LmJsZW5kMkQoYzEsIGMyLCBjMywgYSwgYik7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xvbmUgYSBuZXcgQmxlbmQyRCBjbGlwXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2xvbmVJbnB1dHMgVHJ1ZSBpZiBjbG9uZSB0aGUgaW5wdXQgY2xpcHNcclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQmxlbmQyRENsaXB9XHJcbiAqL1xyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoY2xvbmVJbnB1dHMpIHtcclxuICAgIHZhciBjbGlwID0gQ2xpcC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgIGNsaXAub3V0cHV0ID0gdGhpcy5vdXRwdXQuY2xvbmUoKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgaW5wdXRDbGlwID0gY2xvbmVJbnB1dHMgPyB0aGlzLmlucHV0c1tpXS5jbGlwLmNsb25lKHRydWUpIDogdGhpcy5pbnB1dHNbaV0uY2xpcDtcclxuICAgICAgICBjbGlwLmFkZElucHV0KHRoaXMuaW5wdXRzW2ldLnBvc2l0aW9uLCBpbnB1dENsaXAsIHRoaXMuaW5wdXRzW2ldLm9mZnNldCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xpcDtcclxufTtcclxuXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5fZmluZFRyaWFuZ2xlID0gZnVuY3Rpb24gKHBvc2l0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fY2FjaGVUcmlhbmdsZSkge1xyXG4gICAgICAgIHZhciByZXMgPSBkZWxhdW5heS5jb250YWlucyh0aGlzLl9jYWNoZVRyaWFuZ2xlLnZlcnRpY2VzLCBwb3NpdGlvbi5hcnJheSk7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuX2NhY2hlVHJpYW5nbGUsIHJlc1swXSwgcmVzWzFdXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RyaWFuZ2xlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciB0cmkgPSB0aGlzLl90cmlhbmdsZXNbaV07XHJcbiAgICAgICAgdmFyIHJlcyA9IGRlbGF1bmF5LmNvbnRhaW5zKHRyaS52ZXJ0aWNlcywgdGhpcy5wb3NpdGlvbi5hcnJheSk7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWNoZVRyaWFuZ2xlID0gdHJpO1xyXG4gICAgICAgICAgICByZXR1cm4gW3RyaSwgcmVzWzBdLCByZXNbMV1dO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJsZW5kMkRDbGlwOyIsIlxyXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTMsIEJyYW5kb24gSm9uZXMsIENvbGluIE1hY0tlbnppZSBJVi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuXHJcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXHJcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcclxuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcclxuICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxyXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxyXG4gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxyXG4gICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXHJcblxyXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcclxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcclxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxyXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxyXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcclxuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xyXG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cclxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcclxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcclxuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovXHJcblxyXG5pbXBvcnQgeyBHTE1BVF9SQU5ET00sIEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcblxyXG4vKipcclxuICogQGNsYXNzIDMgRGltZW5zaW9uYWwgVmVjdG9yXHJcbiAqIEBuYW1lIHZlYzNcclxuICovXHJcblxyXG52YXIgdmVjMyA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5IHZlYzNcclxuICpcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cclxudmVjMy5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgzKTtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cclxudmVjMy5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgzKTtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjM30gYSBuZXcgM0QgdmVjdG9yXHJcbiAqL1xyXG52ZWMzLmZyb21WYWx1ZXMgPSBmdW5jdGlvbih4LCB5LCB6KSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMyk7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIG91dFsyXSA9IHo7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWMzIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBzb3VyY2UgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzIHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHopIHtcclxuICAgIG91dFswXSA9IHg7XHJcbiAgICBvdXRbMV0gPSB5O1xyXG4gICAgb3V0WzJdID0gejtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXSArIGJbMl07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuc3VidHJhY3QgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuc3ViID0gdmVjMy5zdWJ0cmFjdDtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5tdWx0aXBseSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAqIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdICogYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gKiBiWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5tdWwgPSB2ZWMzLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmRpdmlkZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAvIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gLyBiWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuZGl2ID0gdmVjMy5kaXZpZGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1heGltdW0gb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gTWF0aC5tYXgoYVswXSwgYlswXSk7XHJcbiAgICBvdXRbMV0gPSBNYXRoLm1heChhWzFdLCBiWzFdKTtcclxuICAgIG91dFsyXSA9IE1hdGgubWF4KGFbMl0sIGJbMl0pO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMzIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYjtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiO1xyXG4gICAgb3V0WzJdID0gYVsyXSAqIGI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzMncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIG91dFswXSA9IGFbMF0gKyAoYlswXSAqIHNjYWxlKTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyAoYlsxXSAqIHNjYWxlKTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyAoYlsyXSAqIHNjYWxlKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXHJcbnZlYzMuZGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSArIHoqeik7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuZGlzdCA9IHZlYzMuZGlzdGFuY2U7XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMzLnNxdWFyZWREaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXHJcbiAgICAgICAgeSA9IGJbMV0gLSBhWzFdLFxyXG4gICAgICAgIHogPSBiWzJdIC0gYVsyXTtcclxuICAgIHJldHVybiB4KnggKyB5KnkgKyB6Kno7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWREaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMzLnNxckRpc3QgPSB2ZWMzLnNxdWFyZWREaXN0YW5jZTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKi9cclxudmVjMy5sZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdLFxyXG4gICAgICAgIHogPSBhWzJdO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCh4KnggKyB5KnkgKyB6KnopO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5sZW4gPSB2ZWMzLmxlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKi9cclxudmVjMy5zcXVhcmVkTGVuZ3RoID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHZhciB4ID0gYVswXSxcclxuICAgICAgICB5ID0gYVsxXSxcclxuICAgICAgICB6ID0gYVsyXTtcclxuICAgIHJldHVybiB4KnggKyB5KnkgKyB6Kno7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5zcXJMZW4gPSB2ZWMzLnNxdWFyZWRMZW5ndGg7XHJcblxyXG4vKipcclxuICogTmVnYXRlcyB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBuZWdhdGVcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5uZWdhdGUgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IC1hWzBdO1xyXG4gICAgb3V0WzFdID0gLWFbMV07XHJcbiAgICBvdXRbMl0gPSAtYVsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5pbnZlcnNlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcclxuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xyXG4gIG91dFsyXSA9IDEuMCAvIGFbMl07XHJcbiAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl07XHJcbiAgICB2YXIgbGVuID0geCp4ICsgeSp5ICsgeip6O1xyXG4gICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgICAvL1RPRE86IGV2YWx1YXRlIHVzZSBvZiBnbG1faW52c3FydCBoZXJlP1xyXG4gICAgICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcclxuICAgICAgICBvdXRbMF0gPSBhWzBdICogbGVuO1xyXG4gICAgICAgIG91dFsxXSA9IGFbMV0gKiBsZW47XHJcbiAgICAgICAgb3V0WzJdID0gYVsyXSAqIGxlbjtcclxuICAgIH1lbHNle1xyXG4gICAgICAgIG91dFswXSA9IDA7XHJcbiAgICAgICAgb3V0WzFdID0gMDtcclxuICAgICAgICBvdXRbMl0gPSAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXHJcbnZlYzMuZG90ID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdICsgYVsyXSAqIGJbMl07XHJcbn07XHJcblxyXG4vKipcclxuICogQ29tcHV0ZXMgdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmNyb3NzID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLCBheSA9IGFbMV0sIGF6ID0gYVsyXSxcclxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdO1xyXG5cclxuICAgIG91dFswXSA9IGF5ICogYnogLSBheiAqIGJ5O1xyXG4gICAgb3V0WzFdID0gYXogKiBieCAtIGF4ICogYno7XHJcbiAgICBvdXRbMl0gPSBheCAqIGJ5IC0gYXkgKiBieDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmxlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLFxyXG4gICAgICAgIGF5ID0gYVsxXSxcclxuICAgICAgICBheiA9IGFbMl07XHJcbiAgICBvdXRbMF0gPSBheCArIHQgKiAoYlswXSAtIGF4KTtcclxuICAgIG91dFsxXSA9IGF5ICsgdCAqIChiWzFdIC0gYXkpO1xyXG4gICAgb3V0WzJdID0gYXogKyB0ICogKGJbMl0gLSBheik7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMucmFuZG9tID0gZnVuY3Rpb24gKG91dCwgc2NhbGUpIHtcclxuICAgIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xyXG5cclxuICAgIHZhciByID0gR0xNQVRfUkFORE9NKCkgKiAyLjAgKiBNYXRoLlBJO1xyXG4gICAgdmFyIHogPSAoR0xNQVRfUkFORE9NKCkgKiAyLjApIC0gMS4wO1xyXG4gICAgdmFyIHpTY2FsZSA9IE1hdGguc3FydCgxLjAteip6KSAqIHNjYWxlO1xyXG5cclxuICAgIG91dFswXSA9IE1hdGguY29zKHIpICogelNjYWxlO1xyXG4gICAgb3V0WzFdID0gTWF0aC5zaW4ocikgKiB6U2NhbGU7XHJcbiAgICBvdXRbMl0gPSB6ICogc2NhbGU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDQuXHJcbiAqIDR0aCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XTtcclxuICAgIHcgPSB3IHx8IDEuMDtcclxuICAgIG91dFswXSA9IChtWzBdICogeCArIG1bNF0gKiB5ICsgbVs4XSAqIHogKyBtWzEyXSkgLyB3O1xyXG4gICAgb3V0WzFdID0gKG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzldICogeiArIG1bMTNdKSAvIHc7XHJcbiAgICBvdXRbMl0gPSAobVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdKSAvIHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gdGhlIDN4MyBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy50cmFuc2Zvcm1NYXQzID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sIHkgPSBhWzFdLCB6ID0gYVsyXTtcclxuICAgIG91dFswXSA9IHggKiBtWzBdICsgeSAqIG1bM10gKyB6ICogbVs2XTtcclxuICAgIG91dFsxXSA9IHggKiBtWzFdICsgeSAqIG1bNF0gKyB6ICogbVs3XTtcclxuICAgIG91dFsyXSA9IHggKiBtWzJdICsgeSAqIG1bNV0gKyB6ICogbVs4XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMyB3aXRoIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy50cmFuc2Zvcm1RdWF0ID0gZnVuY3Rpb24ob3V0LCBhLCBxKSB7XHJcbiAgICAvLyBiZW5jaG1hcmtzOiBodHRwOi8vanNwZXJmLmNvbS9xdWF0ZXJuaW9uLXRyYW5zZm9ybS12ZWMzLWltcGxlbWVudGF0aW9uc1xyXG5cclxuICAgIHZhciB4ID0gYVswXSwgeSA9IGFbMV0sIHogPSBhWzJdLFxyXG4gICAgICAgIHF4ID0gcVswXSwgcXkgPSBxWzFdLCBxeiA9IHFbMl0sIHF3ID0gcVszXSxcclxuXHJcbiAgICAgICAgLy8gY2FsY3VsYXRlIHF1YXQgKiB2ZWNcclxuICAgICAgICBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeSxcclxuICAgICAgICBpeSA9IHF3ICogeSArIHF6ICogeCAtIHF4ICogeixcclxuICAgICAgICBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeCxcclxuICAgICAgICBpdyA9IC1xeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7XHJcblxyXG4gICAgLy8gY2FsY3VsYXRlIHJlc3VsdCAqIGludmVyc2UgcXVhdFxyXG4gICAgb3V0WzBdID0gaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeTtcclxuICAgIG91dFsxXSA9IGl5ICogcXcgKyBpdyAqIC1xeSArIGl6ICogLXF4IC0gaXggKiAtcXo7XHJcbiAgICBvdXRbMl0gPSBpeiAqIHF3ICsgaXcgKiAtcXogKyBpeCAqIC1xeSAtIGl5ICogLXF4O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGUgYSAzRCB2ZWN0b3IgYXJvdW5kIHRoZSB4LWF4aXNcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgdmVjMyBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLnJvdGF0ZVggPSBmdW5jdGlvbihvdXQsIGEsIGIsIGMpe1xyXG4gICB2YXIgcCA9IFtdLCByPVtdO1xyXG4gICAgICAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXHJcbiAgICAgIHBbMF0gPSBhWzBdIC0gYlswXTtcclxuICAgICAgcFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcFsyXSA9IGFbMl0gLSBiWzJdO1xyXG5cclxuICAgICAgLy9wZXJmb3JtIHJvdGF0aW9uXHJcbiAgICAgIHJbMF0gPSBwWzBdO1xyXG4gICAgICByWzFdID0gcFsxXSpNYXRoLmNvcyhjKSAtIHBbMl0qTWF0aC5zaW4oYyk7XHJcbiAgICAgIHJbMl0gPSBwWzFdKk1hdGguc2luKGMpICsgcFsyXSpNYXRoLmNvcyhjKTtcclxuXHJcbiAgICAgIC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cclxuICAgICAgb3V0WzBdID0gclswXSArIGJbMF07XHJcbiAgICAgIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xyXG4gICAgICBvdXRbMl0gPSByWzJdICsgYlsyXTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHktYXhpc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCBUaGUgcmVjZWl2aW5nIHZlYzNcclxuICogQHBhcmFtIHt2ZWMzfSBhIFRoZSB2ZWMzIHBvaW50IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IGMgVGhlIGFuZ2xlIG9mIHJvdGF0aW9uXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMucm90YXRlWSA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgYyl7XHJcbiAgICB2YXIgcCA9IFtdLCByPVtdO1xyXG4gICAgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxyXG4gICAgcFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgcFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcFsyXSA9IGFbMl0gLSBiWzJdO1xyXG5cclxuICAgIC8vcGVyZm9ybSByb3RhdGlvblxyXG4gICAgclswXSA9IHBbMl0qTWF0aC5zaW4oYykgKyBwWzBdKk1hdGguY29zKGMpO1xyXG4gICAgclsxXSA9IHBbMV07XHJcbiAgICByWzJdID0gcFsyXSpNYXRoLmNvcyhjKSAtIHBbMF0qTWF0aC5zaW4oYyk7XHJcblxyXG4gICAgLy90cmFuc2xhdGUgdG8gY29ycmVjdCBwb3NpdGlvblxyXG4gICAgb3V0WzBdID0gclswXSArIGJbMF07XHJcbiAgICBvdXRbMV0gPSByWzFdICsgYlsxXTtcclxuICAgIG91dFsyXSA9IHJbMl0gKyBiWzJdO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlIGEgM0QgdmVjdG9yIGFyb3VuZCB0aGUgei1heGlzXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IFRoZSByZWNlaXZpbmcgdmVjM1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7dmVjM30gYiBUaGUgb3JpZ2luIG9mIHRoZSByb3RhdGlvblxyXG4gKiBAcGFyYW0ge051bWJlcn0gYyBUaGUgYW5nbGUgb2Ygcm90YXRpb25cclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5yb3RhdGVaID0gZnVuY3Rpb24ob3V0LCBhLCBiLCBjKXtcclxuICAgIHZhciBwID0gW10sIHI9W107XHJcbiAgICAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXHJcbiAgICBwWzBdID0gYVswXSAtIGJbMF07XHJcbiAgICBwWzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBwWzJdID0gYVsyXSAtIGJbMl07XHJcblxyXG4gICAgLy9wZXJmb3JtIHJvdGF0aW9uXHJcbiAgICByWzBdID0gcFswXSpNYXRoLmNvcyhjKSAtIHBbMV0qTWF0aC5zaW4oYyk7XHJcbiAgICByWzFdID0gcFswXSpNYXRoLnNpbihjKSArIHBbMV0qTWF0aC5jb3MoYyk7XHJcbiAgICByWzJdID0gcFsyXTtcclxuXHJcbiAgICAvL3RyYW5zbGF0ZSB0byBjb3JyZWN0IHBvc2l0aW9uXHJcbiAgICBvdXRbMF0gPSByWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xyXG4gICAgb3V0WzJdID0gclsyXSArIGJbMl07XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQZXJmb3JtIHNvbWUgb3BlcmF0aW9uIG92ZXIgYW4gYXJyYXkgb2YgdmVjM3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGEgdGhlIGFycmF5IG9mIHZlY3RvcnMgdG8gaXRlcmF0ZSBvdmVyXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdHJpZGUgTnVtYmVyIG9mIGVsZW1lbnRzIGJldHdlZW4gdGhlIHN0YXJ0IG9mIGVhY2ggdmVjMy4gSWYgMCBhc3N1bWVzIHRpZ2h0bHkgcGFja2VkXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNraXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50IE51bWJlciBvZiB2ZWMzcyB0byBpdGVyYXRlIG92ZXIuIElmIDAgaXRlcmF0ZXMgb3ZlciBlbnRpcmUgYXJyYXlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gRnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCB2ZWN0b3IgaW4gdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXJnXSBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gZm5cclxuICogQHJldHVybnMge0FycmF5fSBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5mb3JFYWNoID0gKGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIHZlYyA9IHZlYzMuY3JlYXRlKCk7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGEsIHN0cmlkZSwgb2Zmc2V0LCBjb3VudCwgZm4sIGFyZykge1xyXG4gICAgICAgIHZhciBpLCBsO1xyXG4gICAgICAgIGlmKCFzdHJpZGUpIHtcclxuICAgICAgICAgICAgc3RyaWRlID0gMztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCFvZmZzZXQpIHtcclxuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGNvdW50KSB7XHJcbiAgICAgICAgICAgIGwgPSBNYXRoLm1pbigoY291bnQgKiBzdHJpZGUpICsgb2Zmc2V0LCBhLmxlbmd0aCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbCA9IGEubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKGkgPSBvZmZzZXQ7IGkgPCBsOyBpICs9IHN0cmlkZSkge1xyXG4gICAgICAgICAgICB2ZWNbMF0gPSBhW2ldOyB2ZWNbMV0gPSBhW2krMV07IHZlY1syXSA9IGFbaSsyXTtcclxuICAgICAgICAgICAgZm4odmVjLCB2ZWMsIGFyZyk7XHJcbiAgICAgICAgICAgIGFbaV0gPSB2ZWNbMF07IGFbaSsxXSA9IHZlY1sxXTsgYVtpKzJdID0gdmVjWzJdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgYW5nbGUgYmV0d2VlbiB0d28gM0QgdmVjdG9yc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYW5nbGUgaW4gcmFkaWFuc1xyXG4gKi9cclxudmVjMy5hbmdsZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuXHJcbiAgICB2YXIgdGVtcEEgPSB2ZWMzLmZyb21WYWx1ZXMoYVswXSwgYVsxXSwgYVsyXSk7XHJcbiAgICB2YXIgdGVtcEIgPSB2ZWMzLmZyb21WYWx1ZXMoYlswXSwgYlsxXSwgYlsyXSk7XHJcblxyXG4gICAgdmVjMy5ub3JtYWxpemUodGVtcEEsIHRlbXBBKTtcclxuICAgIHZlYzMubm9ybWFsaXplKHRlbXBCLCB0ZW1wQik7XHJcblxyXG4gICAgdmFyIGNvc2luZSA9IHZlYzMuZG90KHRlbXBBLCB0ZW1wQik7XHJcblxyXG4gICAgaWYoY29zaW5lID4gMS4wKXtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguYWNvcyhjb3NpbmUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjMzsiLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfUkFORE9NLCBHTE1BVF9BUlJBWV9UWVBFIH0gZnJvbSAnLi9jb21tb24nO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyA0IERpbWVuc2lvbmFsIFZlY3RvclxyXG4gKiBAbmFtZSB2ZWM0XHJcbiAqL1xyXG5cclxuZXhwb3J0IHZhciB2ZWM0ID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjNFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjNH0gYSBuZXcgNEQgdmVjdG9yXHJcbiAqL1xyXG52ZWM0LmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xyXG4gICAgb3V0WzBdID0gMDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWM0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cclxudmVjNC5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIG91dFszXSA9IGFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjNCBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cclxudmVjNC5mcm9tVmFsdWVzID0gZnVuY3Rpb24oeCwgeSwgeiwgdykge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xyXG4gICAgb3V0WzBdID0geDtcclxuICAgIG91dFsxXSA9IHk7XHJcbiAgICBvdXRbMl0gPSB6O1xyXG4gICAgb3V0WzNdID0gdztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHosIHcpIHtcclxuICAgIG91dFswXSA9IHg7XHJcbiAgICBvdXRbMV0gPSB5O1xyXG4gICAgb3V0WzJdID0gejtcclxuICAgIG91dFszXSA9IHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0LmFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSArIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXSArIGJbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQuc3VidHJhY3QgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcclxuICAgIG91dFszXSA9IGFbM10gLSBiWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjNC5zdWIgPSB2ZWM0LnN1YnRyYWN0O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0Lm11bHRpcGx5ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXSAqIGJbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdICogYlszXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQubXVsID0gdmVjNC5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBEaXZpZGVzIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5kaXZpZGUgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLyBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAvIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC8gYlsyXTtcclxuICAgIG91dFszXSA9IGFbM10gLyBiWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQuZGl2ID0gdmVjNC5kaXZpZGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XHJcbiAgICBvdXRbM10gPSBNYXRoLm1pbihhWzNdLCBiWzNdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5tYXgoYVsyXSwgYlsyXSk7XHJcbiAgICBvdXRbM10gPSBNYXRoLm1heChhWzNdLCBiWzNdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2NhbGVzIGEgdmVjNCBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAqIGI7XHJcbiAgICBvdXRbMV0gPSBhWzFdICogYjtcclxuICAgIG91dFsyXSA9IGFbMl0gKiBiO1xyXG4gICAgb3V0WzNdID0gYVszXSAqIGI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIG91dFswXSA9IGFbMF0gKyAoYlswXSAqIHNjYWxlKTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyAoYlsxXSAqIHNjYWxlKTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyAoYlsyXSAqIHNjYWxlKTtcclxuICAgIG91dFszXSA9IGFbM10gKyAoYlszXSAqIHNjYWxlKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXHJcbnZlYzQuZGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl0sXHJcbiAgICAgICAgdyA9IGJbM10gLSBhWzNdO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCh4KnggKyB5KnkgKyB6KnogKyB3KncpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5kaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmRpc3QgPSB2ZWM0LmRpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cclxudmVjNC5zcXVhcmVkRGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl0sXHJcbiAgICAgICAgdyA9IGJbM10gLSBhWzNdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeSArIHoqeiArIHcqdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQuc3FyRGlzdCA9IHZlYzQuc3F1YXJlZERpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWM0Lmxlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IGFbM107XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSArIHoqeiArIHcqdyk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0Lmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmxlbiA9IHZlYzQubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWM0LnNxdWFyZWRMZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdLFxyXG4gICAgICAgIHogPSBhWzJdLFxyXG4gICAgICAgIHcgPSBhWzNdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeSArIHoqeiArIHcqdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LnNxckxlbiA9IHZlYzQuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0Lm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gLWFbMF07XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIG91dFsyXSA9IC1hWzJdO1xyXG4gICAgb3V0WzNdID0gLWFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGludmVyc2Ugb2YgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gaW52ZXJ0XHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQuaW52ZXJzZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gIG91dFswXSA9IDEuMCAvIGFbMF07XHJcbiAgb3V0WzFdID0gMS4wIC8gYVsxXTtcclxuICBvdXRbMl0gPSAxLjAgLyBhWzJdO1xyXG4gIG91dFszXSA9IDEuMCAvIGFbM107XHJcbiAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IGFbM107XHJcbiAgICB2YXIgbGVuID0geCp4ICsgeSp5ICsgeip6ICsgdyp3O1xyXG4gICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgICAgb3V0WzBdID0gYVswXSAqIGxlbjtcclxuICAgICAgICBvdXRbMV0gPSBhWzFdICogbGVuO1xyXG4gICAgICAgIG91dFsyXSA9IGFbMl0gKiBsZW47XHJcbiAgICAgICAgb3V0WzNdID0gYVszXSAqIGxlbjtcclxuICAgIH1cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqL1xyXG52ZWM0LmRvdCA9IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICByZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdICsgYVszXSAqIGJbM107XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0LmxlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLFxyXG4gICAgICAgIGF5ID0gYVsxXSxcclxuICAgICAgICBheiA9IGFbMl0sXHJcbiAgICAgICAgYXcgPSBhWzNdO1xyXG4gICAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XHJcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcclxuICAgIG91dFsyXSA9IGF6ICsgdCAqIChiWzJdIC0gYXopO1xyXG4gICAgb3V0WzNdID0gYXcgKyB0ICogKGJbM10gLSBhdyk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQucmFuZG9tID0gZnVuY3Rpb24gKG91dCwgc2NhbGUpIHtcclxuICAgIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xyXG5cclxuICAgIC8vVE9ETzogVGhpcyBpcyBhIHByZXR0eSBhd2Z1bCB3YXkgb2YgZG9pbmcgdGhpcy4gRmluZCBzb21ldGhpbmcgYmV0dGVyLlxyXG4gICAgb3V0WzBdID0gR0xNQVRfUkFORE9NKCk7XHJcbiAgICBvdXRbMV0gPSBHTE1BVF9SQU5ET00oKTtcclxuICAgIG91dFsyXSA9IEdMTUFUX1JBTkRPTSgpO1xyXG4gICAgb3V0WzNdID0gR0xNQVRfUkFORE9NKCk7XHJcbiAgICB2ZWM0Lm5vcm1hbGl6ZShvdXQsIG91dCk7XHJcbiAgICB2ZWM0LnNjYWxlKG91dCwgb3V0LCBzY2FsZSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIG1hdDQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sIHcgPSBhWzNdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzRdICogeSArIG1bOF0gKiB6ICsgbVsxMl0gKiB3O1xyXG4gICAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzVdICogeSArIG1bOV0gKiB6ICsgbVsxM10gKiB3O1xyXG4gICAgb3V0WzJdID0gbVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdICogdztcclxuICAgIG91dFszXSA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XSAqIHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBxdWF0ZXJuaW9uIHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQudHJhbnNmb3JtUXVhdCA9IGZ1bmN0aW9uKG91dCwgYSwgcSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sXHJcbiAgICAgICAgcXggPSBxWzBdLCBxeSA9IHFbMV0sIHF6ID0gcVsyXSwgcXcgPSBxWzNdLFxyXG5cclxuICAgICAgICAvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY1xyXG4gICAgICAgIGl4ID0gcXcgKiB4ICsgcXkgKiB6IC0gcXogKiB5LFxyXG4gICAgICAgIGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6LFxyXG4gICAgICAgIGl6ID0gcXcgKiB6ICsgcXggKiB5IC0gcXkgKiB4LFxyXG4gICAgICAgIGl3ID0gLXF4ICogeCAtIHF5ICogeSAtIHF6ICogejtcclxuXHJcbiAgICAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XHJcbiAgICBvdXRbMF0gPSBpeCAqIHF3ICsgaXcgKiAtcXggKyBpeSAqIC1xeiAtIGl6ICogLXF5O1xyXG4gICAgb3V0WzFdID0gaXkgKiBxdyArIGl3ICogLXF5ICsgaXogKiAtcXggLSBpeCAqIC1xejtcclxuICAgIG91dFsyXSA9IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXg7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWM0cy5cclxuICpcclxuICogQHBhcmFtIHtBcnJheX0gYSB0aGUgYXJyYXkgb2YgdmVjdG9ycyB0byBpdGVyYXRlIG92ZXJcclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWM0LiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcclxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnQgTnVtYmVyIG9mIHZlYzRzIHRvIGl0ZXJhdGUgb3Zlci4gSWYgMCBpdGVyYXRlcyBvdmVyIGVudGlyZSBhcnJheVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxyXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmZvckVhY2ggPSAoZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgdmVjID0gdmVjNC5jcmVhdGUoKTtcclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24oYSwgc3RyaWRlLCBvZmZzZXQsIGNvdW50LCBmbiwgYXJnKSB7XHJcbiAgICAgICAgdmFyIGksIGw7XHJcbiAgICAgICAgaWYoIXN0cmlkZSkge1xyXG4gICAgICAgICAgICBzdHJpZGUgPSA0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIW9mZnNldCkge1xyXG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoY291bnQpIHtcclxuICAgICAgICAgICAgbCA9IE1hdGgubWluKChjb3VudCAqIHN0cmlkZSkgKyBvZmZzZXQsIGEubGVuZ3RoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsID0gYS5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7XHJcbiAgICAgICAgICAgIHZlY1swXSA9IGFbaV07IHZlY1sxXSA9IGFbaSsxXTsgdmVjWzJdID0gYVtpKzJdOyB2ZWNbM10gPSBhW2krM107XHJcbiAgICAgICAgICAgIGZuKHZlYywgdmVjLCBhcmcpO1xyXG4gICAgICAgICAgICBhW2ldID0gdmVjWzBdOyBhW2krMV0gPSB2ZWNbMV07IGFbaSsyXSA9IHZlY1syXTsgYVtpKzNdID0gdmVjWzNdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjNDsiLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgM3gzIE1hdHJpeFxyXG4gKiBAbmFtZSBtYXQzXHJcbiAqL1xyXG5cclxudmFyIG1hdDMgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDNcclxuICpcclxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcclxuICovXHJcbm1hdDMuY3JlYXRlID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoOSk7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMTtcclxuICAgIG91dFs1XSA9IDA7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcGllcyB0aGUgdXBwZXItbGVmdCAzeDMgdmFsdWVzIGludG8gdGhlIGdpdmVuIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgM3gzIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgICB0aGUgc291cmNlIDR4NCBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5mcm9tTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVs0XTtcclxuICAgIG91dFs0XSA9IGFbNV07XHJcbiAgICBvdXRbNV0gPSBhWzZdO1xyXG4gICAgb3V0WzZdID0gYVs4XTtcclxuICAgIG91dFs3XSA9IGFbOV07XHJcbiAgICBvdXRbOF0gPSBhWzEwXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcclxuICovXHJcbm1hdDMuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoOSk7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQzIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICBvdXRbNV0gPSBhWzVdO1xyXG4gICAgb3V0WzZdID0gYVs2XTtcclxuICAgIG91dFs3XSA9IGFbN107XHJcbiAgICBvdXRbOF0gPSBhWzhdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgYSBtYXQzIHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDE7XHJcbiAgICBvdXRbNV0gPSAwO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXHJcbiAgICBpZiAob3V0ID09PSBhKSB7XHJcbiAgICAgICAgdmFyIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGExMiA9IGFbNV07XHJcbiAgICAgICAgb3V0WzFdID0gYVszXTtcclxuICAgICAgICBvdXRbMl0gPSBhWzZdO1xyXG4gICAgICAgIG91dFszXSA9IGEwMTtcclxuICAgICAgICBvdXRbNV0gPSBhWzddO1xyXG4gICAgICAgIG91dFs2XSA9IGEwMjtcclxuICAgICAgICBvdXRbN10gPSBhMTI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG91dFswXSA9IGFbMF07XHJcbiAgICAgICAgb3V0WzFdID0gYVszXTtcclxuICAgICAgICBvdXRbMl0gPSBhWzZdO1xyXG4gICAgICAgIG91dFszXSA9IGFbMV07XHJcbiAgICAgICAgb3V0WzRdID0gYVs0XTtcclxuICAgICAgICBvdXRbNV0gPSBhWzddO1xyXG4gICAgICAgIG91dFs2XSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzddID0gYVs1XTtcclxuICAgICAgICBvdXRbOF0gPSBhWzhdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF0sXHJcblxyXG4gICAgICAgIGIwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMSxcclxuICAgICAgICBiMTEgPSAtYTIyICogYTEwICsgYTEyICogYTIwLFxyXG4gICAgICAgIGIyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMCxcclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxyXG4gICAgICAgIGRldCA9IGEwMCAqIGIwMSArIGEwMSAqIGIxMSArIGEwMiAqIGIyMTtcclxuXHJcbiAgICBpZiAoIWRldCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuICAgIG91dFswXSA9IGIwMSAqIGRldDtcclxuICAgIG91dFsxXSA9ICgtYTIyICogYTAxICsgYTAyICogYTIxKSAqIGRldDtcclxuICAgIG91dFsyXSA9IChhMTIgKiBhMDEgLSBhMDIgKiBhMTEpICogZGV0O1xyXG4gICAgb3V0WzNdID0gYjExICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGEyMiAqIGEwMCAtIGEwMiAqIGEyMCkgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoLWExMiAqIGEwMCArIGEwMiAqIGExMCkgKiBkZXQ7XHJcbiAgICBvdXRbNl0gPSBiMjEgKiBkZXQ7XHJcbiAgICBvdXRbN10gPSAoLWEyMSAqIGEwMCArIGEwMSAqIGEyMCkgKiBkZXQ7XHJcbiAgICBvdXRbOF0gPSAoYTExICogYTAwIC0gYTAxICogYTEwKSAqIGRldDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYWRqdWdhdGUgb2YgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xyXG5tYXQzLmFkam9pbnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XTtcclxuXHJcbiAgICBvdXRbMF0gPSAoYTExICogYTIyIC0gYTEyICogYTIxKTtcclxuICAgIG91dFsxXSA9IChhMDIgKiBhMjEgLSBhMDEgKiBhMjIpO1xyXG4gICAgb3V0WzJdID0gKGEwMSAqIGExMiAtIGEwMiAqIGExMSk7XHJcbiAgICBvdXRbM10gPSAoYTEyICogYTIwIC0gYTEwICogYTIyKTtcclxuICAgIG91dFs0XSA9IChhMDAgKiBhMjIgLSBhMDIgKiBhMjApO1xyXG4gICAgb3V0WzVdID0gKGEwMiAqIGExMCAtIGEwMCAqIGExMik7XHJcbiAgICBvdXRbNl0gPSAoYTEwICogYTIxIC0gYTExICogYTIwKTtcclxuICAgIG91dFs3XSA9IChhMDEgKiBhMjAgLSBhMDAgKiBhMjEpO1xyXG4gICAgb3V0WzhdID0gKGEwMCAqIGExMSAtIGEwMSAqIGExMCk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cclxubWF0My5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF07XHJcblxyXG4gICAgcmV0dXJuIGEwMCAqIChhMjIgKiBhMTEgLSBhMTIgKiBhMjEpICsgYTAxICogKC1hMjIgKiBhMTAgKyBhMTIgKiBhMjApICsgYTAyICogKGEyMSAqIGExMCAtIGExMSAqIGEyMCk7XHJcbn07XHJcblxyXG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0MydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMubXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF0sXHJcblxyXG4gICAgICAgIGIwMCA9IGJbMF0sIGIwMSA9IGJbMV0sIGIwMiA9IGJbMl0sXHJcbiAgICAgICAgYjEwID0gYlszXSwgYjExID0gYls0XSwgYjEyID0gYls1XSxcclxuICAgICAgICBiMjAgPSBiWzZdLCBiMjEgPSBiWzddLCBiMjIgPSBiWzhdO1xyXG5cclxuICAgIG91dFswXSA9IGIwMCAqIGEwMCArIGIwMSAqIGExMCArIGIwMiAqIGEyMDtcclxuICAgIG91dFsxXSA9IGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMTtcclxuICAgIG91dFsyXSA9IGIwMCAqIGEwMiArIGIwMSAqIGExMiArIGIwMiAqIGEyMjtcclxuXHJcbiAgICBvdXRbM10gPSBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjA7XHJcbiAgICBvdXRbNF0gPSBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjE7XHJcbiAgICBvdXRbNV0gPSBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjI7XHJcblxyXG4gICAgb3V0WzZdID0gYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwO1xyXG4gICAgb3V0WzddID0gYjIwICogYTAxICsgYjIxICogYTExICsgYjIyICogYTIxO1xyXG4gICAgb3V0WzhdID0gYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDMubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxubWF0My5tdWwgPSBtYXQzLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zbGF0ZSBhIG1hdDMgYnkgdGhlIGdpdmVuIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My50cmFuc2xhdGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcclxuICAgICAgICB4ID0gdlswXSwgeSA9IHZbMV07XHJcblxyXG4gICAgb3V0WzBdID0gYTAwO1xyXG4gICAgb3V0WzFdID0gYTAxO1xyXG4gICAgb3V0WzJdID0gYTAyO1xyXG5cclxuICAgIG91dFszXSA9IGExMDtcclxuICAgIG91dFs0XSA9IGExMTtcclxuICAgIG91dFs1XSA9IGExMjtcclxuXHJcbiAgICBvdXRbNl0gPSB4ICogYTAwICsgeSAqIGExMCArIGEyMDtcclxuICAgIG91dFs3XSA9IHggKiBhMDEgKyB5ICogYTExICsgYTIxO1xyXG4gICAgb3V0WzhdID0geCAqIGEwMiArIHkgKiBhMTIgKyBhMjI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXQzIGJ5IHRoZSBnaXZlbiBhbmdsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5yb3RhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcclxuXHJcbiAgICAgICAgcyA9IE1hdGguc2luKHJhZCksXHJcbiAgICAgICAgYyA9IE1hdGguY29zKHJhZCk7XHJcblxyXG4gICAgb3V0WzBdID0gYyAqIGEwMCArIHMgKiBhMTA7XHJcbiAgICBvdXRbMV0gPSBjICogYTAxICsgcyAqIGExMTtcclxuICAgIG91dFsyXSA9IGMgKiBhMDIgKyBzICogYTEyO1xyXG5cclxuICAgIG91dFszXSA9IGMgKiBhMTAgLSBzICogYTAwO1xyXG4gICAgb3V0WzRdID0gYyAqIGExMSAtIHMgKiBhMDE7XHJcbiAgICBvdXRbNV0gPSBjICogYTEyIC0gcyAqIGEwMjtcclxuXHJcbiAgICBvdXRbNl0gPSBhMjA7XHJcbiAgICBvdXRbN10gPSBhMjE7XHJcbiAgICBvdXRbOF0gPSBhMjI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MyBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKiovXHJcbm1hdDMuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciB4ID0gdlswXSwgeSA9IHZbMV07XHJcblxyXG4gICAgb3V0WzBdID0geCAqIGFbMF07XHJcbiAgICBvdXRbMV0gPSB4ICogYVsxXTtcclxuICAgIG91dFsyXSA9IHggKiBhWzJdO1xyXG5cclxuICAgIG91dFszXSA9IHkgKiBhWzNdO1xyXG4gICAgb3V0WzRdID0geSAqIGFbNF07XHJcbiAgICBvdXRbNV0gPSB5ICogYVs1XTtcclxuXHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcGllcyB0aGUgdmFsdWVzIGZyb20gYSBtYXQyZCBpbnRvIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gY29weVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqKi9cclxubWF0My5mcm9tTWF0MmQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gMDtcclxuXHJcbiAgICBvdXRbM10gPSBhWzJdO1xyXG4gICAgb3V0WzRdID0gYVszXTtcclxuICAgIG91dFs1XSA9IDA7XHJcblxyXG4gICAgb3V0WzZdID0gYVs0XTtcclxuICAgIG91dFs3XSA9IGFbNV07XHJcbiAgICBvdXRbOF0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4qIENhbGN1bGF0ZXMgYSAzeDMgbWF0cml4IGZyb20gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuKlxyXG4qIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuKiBAcGFyYW0ge3F1YXR9IHEgUXVhdGVybmlvbiB0byBjcmVhdGUgbWF0cml4IGZyb21cclxuKlxyXG4qIEByZXR1cm5zIHttYXQzfSBvdXRcclxuKi9cclxubWF0My5mcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEpIHtcclxuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXSxcclxuICAgICAgICB4MiA9IHggKyB4LFxyXG4gICAgICAgIHkyID0geSArIHksXHJcbiAgICAgICAgejIgPSB6ICsgeixcclxuXHJcbiAgICAgICAgeHggPSB4ICogeDIsXHJcbiAgICAgICAgeXggPSB5ICogeDIsXHJcbiAgICAgICAgeXkgPSB5ICogeTIsXHJcbiAgICAgICAgenggPSB6ICogeDIsXHJcbiAgICAgICAgenkgPSB6ICogeTIsXHJcbiAgICAgICAgenogPSB6ICogejIsXHJcbiAgICAgICAgd3ggPSB3ICogeDIsXHJcbiAgICAgICAgd3kgPSB3ICogeTIsXHJcbiAgICAgICAgd3ogPSB3ICogejI7XHJcblxyXG4gICAgb3V0WzBdID0gMSAtIHl5IC0geno7XHJcbiAgICBvdXRbM10gPSB5eCAtIHd6O1xyXG4gICAgb3V0WzZdID0genggKyB3eTtcclxuXHJcbiAgICBvdXRbMV0gPSB5eCArIHd6O1xyXG4gICAgb3V0WzRdID0gMSAtIHh4IC0geno7XHJcbiAgICBvdXRbN10gPSB6eSAtIHd4O1xyXG5cclxuICAgIG91dFsyXSA9IHp4IC0gd3k7XHJcbiAgICBvdXRbNV0gPSB6eSArIHd4O1xyXG4gICAgb3V0WzhdID0gMSAtIHh4IC0geXk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4qIENhbGN1bGF0ZXMgYSAzeDMgbm9ybWFsIG1hdHJpeCAodHJhbnNwb3NlIGludmVyc2UpIGZyb20gdGhlIDR4NCBtYXRyaXhcclxuKlxyXG4qIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuKiBAcGFyYW0ge21hdDR9IGEgTWF0NCB0byBkZXJpdmUgdGhlIG5vcm1hbCBtYXRyaXggZnJvbVxyXG4qXHJcbiogQHJldHVybnMge21hdDN9IG91dFxyXG4qL1xyXG5tYXQzLm5vcm1hbEZyb21NYXQ0ID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM10sXHJcbiAgICAgICAgYTEwID0gYVs0XSwgYTExID0gYVs1XSwgYTEyID0gYVs2XSwgYTEzID0gYVs3XSxcclxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSwgYTIzID0gYVsxMV0sXHJcbiAgICAgICAgYTMwID0gYVsxMl0sIGEzMSA9IGFbMTNdLCBhMzIgPSBhWzE0XSwgYTMzID0gYVsxNV0sXHJcblxyXG4gICAgICAgIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMCxcclxuICAgICAgICBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTAsXHJcbiAgICAgICAgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwLFxyXG4gICAgICAgIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMSxcclxuICAgICAgICBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTEsXHJcbiAgICAgICAgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyLFxyXG4gICAgICAgIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMCxcclxuICAgICAgICBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzAsXHJcbiAgICAgICAgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwLFxyXG4gICAgICAgIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMSxcclxuICAgICAgICBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzEsXHJcbiAgICAgICAgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyLFxyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XHJcbiAgICAgICAgZGV0ID0gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xyXG5cclxuICAgIGlmICghZGV0KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBkZXQgPSAxLjAgLyBkZXQ7XHJcblxyXG4gICAgb3V0WzBdID0gKGExMSAqIGIxMSAtIGExMiAqIGIxMCArIGExMyAqIGIwOSkgKiBkZXQ7XHJcbiAgICBvdXRbMV0gPSAoYTEyICogYjA4IC0gYTEwICogYjExIC0gYTEzICogYjA3KSAqIGRldDtcclxuICAgIG91dFsyXSA9IChhMTAgKiBiMTAgLSBhMTEgKiBiMDggKyBhMTMgKiBiMDYpICogZGV0O1xyXG5cclxuICAgIG91dFszXSA9IChhMDIgKiBiMTAgLSBhMDEgKiBiMTEgLSBhMDMgKiBiMDkpICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGEwMCAqIGIxMSAtIGEwMiAqIGIwOCArIGEwMyAqIGIwNykgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcclxuXHJcbiAgICBvdXRbNl0gPSAoYTMxICogYjA1IC0gYTMyICogYjA0ICsgYTMzICogYjAzKSAqIGRldDtcclxuICAgIG91dFs3XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xyXG4gICAgb3V0WzhdID0gKGEzMCAqIGIwNCAtIGEzMSAqIGIwMiArIGEzMyAqIGIwMCkgKiBkZXQ7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXHJcbm1hdDMuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpICsgTWF0aC5wb3coYVs0XSwgMikgKyBNYXRoLnBvdyhhWzVdLCAyKSArIE1hdGgucG93KGFbNl0sIDIpICsgTWF0aC5wb3coYVs3XSwgMikgKyBNYXRoLnBvdyhhWzhdLCAyKSkpXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbWF0MzsiLCJcclxuXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB7IEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vdmVjMyc7XHJcbmltcG9ydCB2ZWM0IGZyb20gJy4vdmVjNCc7XHJcbmltcG9ydCBtYXQzIGZyb20gJy4vbWF0Myc7XHJcblxyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyBRdWF0ZXJuaW9uXHJcbiAqIEBuYW1lIHF1YXRcclxuICovXHJcblxyXG52YXIgcXVhdCA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgcXVhdFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gYSBuZXcgcXVhdGVybmlvblxyXG4gKi9cclxucXVhdC5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldHMgYSBxdWF0ZXJuaW9uIHRvIHJlcHJlc2VudCB0aGUgc2hvcnRlc3Qgcm90YXRpb24gZnJvbSBvbmVcclxuICogdmVjdG9yIHRvIGFub3RoZXIuXHJcbiAqXHJcbiAqIEJvdGggdmVjdG9ycyBhcmUgYXNzdW1lZCB0byBiZSB1bml0IGxlbmd0aC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uLlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGluaXRpYWwgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgZGVzdGluYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQucm90YXRpb25UbyA9IChmdW5jdGlvbigpIHtcclxuICAgIHZhciB0bXB2ZWMzID0gdmVjMy5jcmVhdGUoKTtcclxuICAgIHZhciB4VW5pdFZlYzMgPSB2ZWMzLmZyb21WYWx1ZXMoMSwwLDApO1xyXG4gICAgdmFyIHlVbml0VmVjMyA9IHZlYzMuZnJvbVZhbHVlcygwLDEsMCk7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgICAgIHZhciBkb3QgPSB2ZWMzLmRvdChhLCBiKTtcclxuICAgICAgICBpZiAoZG90IDwgLTAuOTk5OTk5KSB7XHJcbiAgICAgICAgICAgIHZlYzMuY3Jvc3ModG1wdmVjMywgeFVuaXRWZWMzLCBhKTtcclxuICAgICAgICAgICAgaWYgKHZlYzMubGVuZ3RoKHRtcHZlYzMpIDwgMC4wMDAwMDEpXHJcbiAgICAgICAgICAgICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIHlVbml0VmVjMywgYSk7XHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHRtcHZlYzMsIHRtcHZlYzMpO1xyXG4gICAgICAgICAgICBxdWF0LnNldEF4aXNBbmdsZShvdXQsIHRtcHZlYzMsIE1hdGguUEkpO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZG90ID4gMC45OTk5OTkpIHtcclxuICAgICAgICAgICAgb3V0WzBdID0gMDtcclxuICAgICAgICAgICAgb3V0WzFdID0gMDtcclxuICAgICAgICAgICAgb3V0WzJdID0gMDtcclxuICAgICAgICAgICAgb3V0WzNdID0gMTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIGEsIGIpO1xyXG4gICAgICAgICAgICBvdXRbMF0gPSB0bXB2ZWMzWzBdO1xyXG4gICAgICAgICAgICBvdXRbMV0gPSB0bXB2ZWMzWzFdO1xyXG4gICAgICAgICAgICBvdXRbMl0gPSB0bXB2ZWMzWzJdO1xyXG4gICAgICAgICAgICBvdXRbM10gPSAxICsgZG90O1xyXG4gICAgICAgICAgICByZXR1cm4gcXVhdC5ub3JtYWxpemUob3V0LCBvdXQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pKCk7XHJcblxyXG4vKipcclxuICogU2V0cyB0aGUgc3BlY2lmaWVkIHF1YXRlcm5pb24gd2l0aCB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW5cclxuICogYXhlcy4gRWFjaCBheGlzIGlzIGEgdmVjMyBhbmQgaXMgZXhwZWN0ZWQgdG8gYmUgdW5pdCBsZW5ndGggYW5kXHJcbiAqIHBlcnBlbmRpY3VsYXIgdG8gYWxsIG90aGVyIHNwZWNpZmllZCBheGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IHZpZXcgIHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSB2aWV3aW5nIGRpcmVjdGlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHJpZ2h0IHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBsb2NhbCBcInJpZ2h0XCIgZGlyZWN0aW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gdXAgICAgdGhlIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGxvY2FsIFwidXBcIiBkaXJlY3Rpb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5zZXRBeGVzID0gKGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG1hdHIgPSBtYXQzLmNyZWF0ZSgpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbihvdXQsIHZpZXcsIHJpZ2h0LCB1cCkge1xyXG4gICAgICAgIG1hdHJbMF0gPSByaWdodFswXTtcclxuICAgICAgICBtYXRyWzNdID0gcmlnaHRbMV07XHJcbiAgICAgICAgbWF0cls2XSA9IHJpZ2h0WzJdO1xyXG5cclxuICAgICAgICBtYXRyWzFdID0gdXBbMF07XHJcbiAgICAgICAgbWF0cls0XSA9IHVwWzFdO1xyXG4gICAgICAgIG1hdHJbN10gPSB1cFsyXTtcclxuXHJcbiAgICAgICAgbWF0clsyXSA9IC12aWV3WzBdO1xyXG4gICAgICAgIG1hdHJbNV0gPSAtdmlld1sxXTtcclxuICAgICAgICBtYXRyWzhdID0gLXZpZXdbMl07XHJcblxyXG4gICAgICAgIHJldHVybiBxdWF0Lm5vcm1hbGl6ZShvdXQsIHF1YXQuZnJvbU1hdDMob3V0LCBtYXRyKSk7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgcXVhdCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXRlcm5pb24gdG8gY2xvbmVcclxuICogQHJldHVybnMge3F1YXR9IGEgbmV3IHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmNsb25lID0gdmVjNC5jbG9uZTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHF1YXQgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBhIG5ldyBxdWF0ZXJuaW9uXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5mcm9tVmFsdWVzID0gdmVjNC5mcm9tVmFsdWVzO1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBxdWF0IHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgc291cmNlIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuY29weSA9IHZlYzQuY29weTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBxdWF0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LnNldCA9IHZlYzQuc2V0O1xyXG5cclxuLyoqXHJcbiAqIFNldCBhIHF1YXQgdG8gdGhlIGlkZW50aXR5IHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldHMgYSBxdWF0IGZyb20gdGhlIGdpdmVuIGFuZ2xlIGFuZCByb3RhdGlvbiBheGlzLFxyXG4gKiB0aGVuIHJldHVybnMgaXQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IGF4aXMgdGhlIGF4aXMgYXJvdW5kIHdoaWNoIHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSBpbiByYWRpYW5zXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICoqL1xyXG5xdWF0LnNldEF4aXNBbmdsZSA9IGZ1bmN0aW9uKG91dCwgYXhpcywgcmFkKSB7XHJcbiAgICByYWQgPSByYWQgKiAwLjU7XHJcbiAgICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XHJcbiAgICBvdXRbMF0gPSBzICogYXhpc1swXTtcclxuICAgIG91dFsxXSA9IHMgKiBheGlzWzFdO1xyXG4gICAgb3V0WzJdID0gcyAqIGF4aXNbMl07XHJcbiAgICBvdXRbM10gPSBNYXRoLmNvcyhyYWQpO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiB6aCA6IOe7leWNleS9jeWQkemHj+iHqui9rFxyXG4gKiBAcGFyYW0gb3V0ICB7cXVhdH1cclxuICogQHBhcmFtIHF1YXQyICB7cXVhdH1cclxuICogQHBhcmFtIGF4aXMgICB7dmVjM31cclxuICogQHBhcmFtIHJhZCAgICB7TnVtYmVyfVxyXG4gKi9cclxuXHJcbnF1YXQucm90YXRlQXhpcyA9IGZ1bmN0aW9uIChvdXQscXVhdDIsYXhpcyxyYWQpIHtcclxuXHJcbiAgICB2ZWMzLm5vcm1hbGl6ZShheGlzLGF4aXMpO1xyXG4gICAgcXVhdC5zZXRBeGlzQW5nbGUocXVhdDIsYXhpcyxyYWQpO1xyXG4gICAgcXVhdC5tdWx0aXBseShvdXQsb3V0LHF1YXQyKTtcclxuXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBZGRzIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmFkZCA9IHZlYzQuYWRkO1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHF1YXQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5tdWx0aXBseSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmFyIGF4ID0gYVswXSwgYXkgPSBhWzFdLCBheiA9IGFbMl0sIGF3ID0gYVszXSxcclxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdLCBidyA9IGJbM107XHJcblxyXG4gICAgb3V0WzBdID0gYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieTtcclxuICAgIG91dFsxXSA9IGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYno7XHJcbiAgICBvdXRbMl0gPSBheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4O1xyXG4gICAgb3V0WzNdID0gYXcgKiBidyAtIGF4ICogYnggLSBheSAqIGJ5IC0gYXogKiBiejtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQubXVsID0gcXVhdC5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgYSBxdWF0IGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5zY2FsZSA9IHZlYzQuc2NhbGU7XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIHF1YXRlcm5pb24gYnkgdGhlIGdpdmVuIGFuZ2xlIGFib3V0IHRoZSBYIGF4aXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgcXVhdCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byByb3RhdGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBhbmdsZSAoaW4gcmFkaWFucykgdG8gcm90YXRlXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQucm90YXRlWCA9IGZ1bmN0aW9uIChvdXQscmFkKSB7XHJcblxyXG4gICAgdmFyIHF1YXQyID1bMCwwLDAsMV07XHJcbiAgICB2YXIgYXhpcyA9IFsxLDAsMF07XHJcblxyXG4gICAgcXVhdC5yb3RhdGVBeGlzKG91dCxxdWF0MixheGlzLHJhZCk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgcXVhdGVybmlvbiBieSB0aGUgZ2l2ZW4gYW5nbGUgYWJvdXQgdGhlIFkgYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCBxdWF0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGFuZ2xlIChpbiByYWRpYW5zKSB0byByb3RhdGVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5yb3RhdGVZID0gZnVuY3Rpb24gKG91dCxyYWQpIHtcclxuXHJcbiAgICB2YXIgcXVhdDIgPVswLDAsMCwxXTtcclxuICAgIHZhciBheGlzID0gWzAsMSwwXTtcclxuXHJcbiAgICBxdWF0LnJvdGF0ZUF4aXMob3V0LHF1YXQyLGF4aXMscmFkKTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBxdWF0ZXJuaW9uIGJ5IHRoZSBnaXZlbiBhbmdsZSBhYm91dCB0aGUgWiBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHF1YXQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgYW5nbGUgKGluIHJhZGlhbnMpIHRvIHJvdGF0ZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xyXG5xdWF0LnJvdGF0ZVogPSBmdW5jdGlvbiAob3V0LHJhZCkge1xyXG4gICAgdmFyIHF1YXQyID1bMCwwLDAsMV07XHJcbiAgICB2YXIgYXhpcyA9IFswLDAsMV07XHJcblxyXG4gICAgcXVhdC5yb3RhdGVBeGlzKG91dCxxdWF0MixheGlzLHJhZCk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBXIGNvbXBvbmVudCBvZiBhIHF1YXQgZnJvbSB0aGUgWCwgWSwgYW5kIFogY29tcG9uZW50cy5cclxuICogQXNzdW1lcyB0aGF0IHF1YXRlcm5pb24gaXMgMSB1bml0IGluIGxlbmd0aC5cclxuICogQW55IGV4aXN0aW5nIFcgY29tcG9uZW50IHdpbGwgYmUgaWdub3JlZC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBXIGNvbXBvbmVudCBvZlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xyXG5xdWF0LmNhbGN1bGF0ZVcgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sIHkgPSBhWzFdLCB6ID0gYVsyXTtcclxuXHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIG91dFsyXSA9IHo7XHJcbiAgICBvdXRbM10gPSBNYXRoLnNxcnQoTWF0aC5hYnMoMS4wIC0geCAqIHggLSB5ICogeSAtIHogKiB6KSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuZG90ID0gdmVjNC5kb3Q7XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50IGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQubGVycCA9IHZlYzQubGVycDtcclxuXHJcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIHNwaGVyaWNhbCBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuc2xlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICAvLyBiZW5jaG1hcmtzOlxyXG4gICAgLy8gICAgaHR0cDovL2pzcGVyZi5jb20vcXVhdGVybmlvbi1zbGVycC1pbXBsZW1lbnRhdGlvbnNcclxuXHJcbiAgICB2YXIgYXggPSBhWzBdLCBheSA9IGFbMV0sIGF6ID0gYVsyXSwgYXcgPSBhWzNdLFxyXG4gICAgICAgIGJ4ID0gYlswXSwgYnkgPSBiWzFdLCBieiA9IGJbMl0sIGJ3ID0gYlszXTtcclxuXHJcbiAgICB2YXIgICAgICAgIG9tZWdhLCBjb3NvbSwgc2lub20sIHNjYWxlMCwgc2NhbGUxO1xyXG5cclxuICAgIC8vIGNhbGMgY29zaW5lXHJcbiAgICBjb3NvbSA9IGF4ICogYnggKyBheSAqIGJ5ICsgYXogKiBieiArIGF3ICogYnc7XHJcbiAgICAvLyBhZGp1c3Qgc2lnbnMgKGlmIG5lY2Vzc2FyeSlcclxuICAgIGlmICggY29zb20gPCAwLjAgKSB7XHJcbiAgICAgICAgY29zb20gPSAtY29zb207XHJcbiAgICAgICAgYnggPSAtIGJ4O1xyXG4gICAgICAgIGJ5ID0gLSBieTtcclxuICAgICAgICBieiA9IC0gYno7XHJcbiAgICAgICAgYncgPSAtIGJ3O1xyXG4gICAgfVxyXG4gICAgLy8gY2FsY3VsYXRlIGNvZWZmaWNpZW50c1xyXG4gICAgaWYgKCAoMS4wIC0gY29zb20pID4gMC4wMDAwMDEgKSB7XHJcbiAgICAgICAgLy8gc3RhbmRhcmQgY2FzZSAoc2xlcnApXHJcbiAgICAgICAgb21lZ2EgID0gTWF0aC5hY29zKGNvc29tKTtcclxuICAgICAgICBzaW5vbSAgPSBNYXRoLnNpbihvbWVnYSk7XHJcbiAgICAgICAgc2NhbGUwID0gTWF0aC5zaW4oKDEuMCAtIHQpICogb21lZ2EpIC8gc2lub207XHJcbiAgICAgICAgc2NhbGUxID0gTWF0aC5zaW4odCAqIG9tZWdhKSAvIHNpbm9tO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBcImZyb21cIiBhbmQgXCJ0b1wiIHF1YXRlcm5pb25zIGFyZSB2ZXJ5IGNsb3NlXHJcbiAgICAgICAgLy8gIC4uLiBzbyB3ZSBjYW4gZG8gYSBsaW5lYXIgaW50ZXJwb2xhdGlvblxyXG4gICAgICAgIHNjYWxlMCA9IDEuMCAtIHQ7XHJcbiAgICAgICAgc2NhbGUxID0gdDtcclxuICAgIH1cclxuICAgIC8vIGNhbGN1bGF0ZSBmaW5hbCB2YWx1ZXNcclxuICAgIG91dFswXSA9IHNjYWxlMCAqIGF4ICsgc2NhbGUxICogYng7XHJcbiAgICBvdXRbMV0gPSBzY2FsZTAgKiBheSArIHNjYWxlMSAqIGJ5O1xyXG4gICAgb3V0WzJdID0gc2NhbGUwICogYXogKyBzY2FsZTEgKiBiejtcclxuICAgIG91dFszXSA9IHNjYWxlMCAqIGF3ICsgc2NhbGUxICogYnc7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBpbnZlcnNlIG9mIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gY2FsY3VsYXRlIGludmVyc2Ugb2ZcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sXHJcbiAgICAgICAgZG90ID0gYTAqYTAgKyBhMSphMSArIGEyKmEyICsgYTMqYTMsXHJcbiAgICAgICAgaW52RG90ID0gZG90ID8gMS4wL2RvdCA6IDA7XHJcblxyXG4gICAgLy8gVE9ETzogV291bGQgYmUgZmFzdGVyIHRvIHJldHVybiBbMCwwLDAsMF0gaW1tZWRpYXRlbHkgaWYgZG90ID09IDBcclxuXHJcbiAgICBvdXRbMF0gPSAtYTAqaW52RG90O1xyXG4gICAgb3V0WzFdID0gLWExKmludkRvdDtcclxuICAgIG91dFsyXSA9IC1hMippbnZEb3Q7XHJcbiAgICBvdXRbM10gPSBhMyppbnZEb3Q7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGNvbmp1Z2F0ZSBvZiBhIHF1YXRcclxuICogSWYgdGhlIHF1YXRlcm5pb24gaXMgbm9ybWFsaXplZCwgdGhpcyBmdW5jdGlvbiBpcyBmYXN0ZXIgdGhhbiBxdWF0LmludmVyc2UgYW5kIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBjb25qdWdhdGUgb2ZcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5jb25qdWdhdGUgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSAtYVswXTtcclxuICAgIG91dFsxXSA9IC1hWzFdO1xyXG4gICAgb3V0WzJdID0gLWFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQubGVuZ3RoID0gdmVjNC5sZW5ndGg7XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Lmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmxlbiA9IHF1YXQubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5zcXVhcmVkTGVuZ3RoID0gdmVjNC5zcXVhcmVkTGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5zcXVhcmVkTGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuc3FyTGVuID0gcXVhdC5zcXVhcmVkTGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIE5vcm1hbGl6ZSBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0ZXJuaW9uIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5ub3JtYWxpemUgPSB2ZWM0Lm5vcm1hbGl6ZTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgcXVhdGVybmlvbiBmcm9tIHRoZSBnaXZlbiAzeDMgcm90YXRpb24gbWF0cml4LlxyXG4gKlxyXG4gKiBOT1RFOiBUaGUgcmVzdWx0YW50IHF1YXRlcm5pb24gaXMgbm90IG5vcm1hbGl6ZWQsIHNvIHlvdSBzaG91bGQgYmUgc3VyZVxyXG4gKiB0byByZW5vcm1hbGl6ZSB0aGUgcXVhdGVybmlvbiB5b3Vyc2VsZiB3aGVyZSBuZWNlc3NhcnkuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge21hdDN9IG0gcm90YXRpb24gbWF0cml4XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmZyb21NYXQzID0gZnVuY3Rpb24ob3V0LCBtKSB7XHJcbiAgICAvLyBBbGdvcml0aG0gaW4gS2VuIFNob2VtYWtlJ3MgYXJ0aWNsZSBpbiAxOTg3IFNJR0dSQVBIIGNvdXJzZSBub3Rlc1xyXG4gICAgLy8gYXJ0aWNsZSBcIlF1YXRlcm5pb24gQ2FsY3VsdXMgYW5kIEZhc3QgQW5pbWF0aW9uXCIuXHJcbiAgICB2YXIgZlRyYWNlID0gbVswXSArIG1bNF0gKyBtWzhdO1xyXG4gICAgdmFyIGZSb290O1xyXG5cclxuICAgIGlmICggZlRyYWNlID4gMC4wICkge1xyXG4gICAgICAgIC8vIHx3fCA+IDEvMiwgbWF5IGFzIHdlbGwgY2hvb3NlIHcgPiAxLzJcclxuICAgICAgICBmUm9vdCA9IE1hdGguc3FydChmVHJhY2UgKyAxLjApOyAgLy8gMndcclxuICAgICAgICBvdXRbM10gPSAwLjUgKiBmUm9vdDtcclxuICAgICAgICBmUm9vdCA9IDAuNS9mUm9vdDsgIC8vIDEvKDR3KVxyXG4gICAgICAgIG91dFswXSA9IChtWzVdLW1bN10pKmZSb290O1xyXG4gICAgICAgIG91dFsxXSA9IChtWzZdLW1bMl0pKmZSb290O1xyXG4gICAgICAgIG91dFsyXSA9IChtWzFdLW1bM10pKmZSb290O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAvLyB8d3wgPD0gMS8yXHJcbiAgICAgICAgdmFyIGkgPSAwO1xyXG4gICAgICAgIGlmICggbVs0XSA+IG1bMF0gKVxyXG4gICAgICAgICAgaSA9IDE7XHJcbiAgICAgICAgaWYgKCBtWzhdID4gbVtpKjMraV0gKVxyXG4gICAgICAgICAgaSA9IDI7XHJcbiAgICAgICAgdmFyIGogPSAoaSsxKSUzO1xyXG4gICAgICAgIHZhciBrID0gKGkrMiklMztcclxuXHJcbiAgICAgICAgZlJvb3QgPSBNYXRoLnNxcnQobVtpKjMraV0tbVtqKjMral0tbVtrKjMra10gKyAxLjApO1xyXG4gICAgICAgIG91dFtpXSA9IDAuNSAqIGZSb290O1xyXG4gICAgICAgIGZSb290ID0gMC41IC8gZlJvb3Q7XHJcbiAgICAgICAgb3V0WzNdID0gKG1baiozK2tdIC0gbVtrKjMral0pICogZlJvb3Q7XHJcbiAgICAgICAgb3V0W2pdID0gKG1baiozK2ldICsgbVtpKjMral0pICogZlJvb3Q7XHJcbiAgICAgICAgb3V0W2tdID0gKG1bayozK2ldICsgbVtpKjMra10pICogZlJvb3Q7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHF1YXQ7IiwiLy8gU2FtcGxlciBjbGlwIGlzIGVzcGVjaWFsbHkgZm9yIHRoZSBhbmltYXRpb24gc2FtcGxlciBpbiBnbFRGXHJcbi8vIFVzZSBUeXBlZCBBcnJheSBjYW4gcmVkdWNlIGEgbG90IG9mIGhlYXAgbWVtb3J5XHJcblxyXG5pbXBvcnQgcXVhdCBmcm9tICcuLi9nbG1hdHJpeC9xdWF0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG4vLyBsZXJwIGZ1bmN0aW9uIHdpdGggb2Zmc2V0IGluIGxhcmdlIGFycmF5XHJcbmZ1bmN0aW9uIHZlYzNsZXJwKG91dCwgYSwgYiwgdCwgb2EsIG9iKSB7XHJcbiAgICB2YXIgYXggPSBhW29hXTtcclxuICAgIHZhciBheSA9IGFbb2EgKyAxXTtcclxuICAgIHZhciBheiA9IGFbb2EgKyAyXTtcclxuICAgIG91dFswXSA9IGF4ICsgdCAqIChiW29iXSAtIGF4KTtcclxuICAgIG91dFsxXSA9IGF5ICsgdCAqIChiW29iICsgMV0gLSBheSk7XHJcbiAgICBvdXRbMl0gPSBheiArIHQgKiAoYltvYiArIDJdIC0gYXopO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHF1YXRTbGVycChvdXQsIGEsIGIsIHQsIG9hLCBvYikge1xyXG4gICAgLy8gYmVuY2htYXJrczpcclxuICAgIC8vICAgIGh0dHA6Ly9qc3BlcmYuY29tL3F1YXRlcm5pb24tc2xlcnAtaW1wbGVtZW50YXRpb25zXHJcblxyXG4gICAgdmFyIGF4ID0gYVswICsgb2FdLCBheSA9IGFbMSArIG9hXSwgYXogPSBhWzIgKyBvYV0sIGF3ID0gYVszICsgb2FdLFxyXG4gICAgICAgIGJ4ID0gYlswICsgb2JdLCBieSA9IGJbMSArIG9iXSwgYnogPSBiWzIgKyBvYl0sIGJ3ID0gYlszICsgb2JdO1xyXG5cclxuICAgIHZhciBvbWVnYSwgY29zb20sIHNpbm9tLCBzY2FsZTAsIHNjYWxlMTtcclxuXHJcbiAgICAvLyBjYWxjIGNvc2luZVxyXG4gICAgY29zb20gPSBheCAqIGJ4ICsgYXkgKiBieSArIGF6ICogYnogKyBhdyAqIGJ3O1xyXG4gICAgLy8gYWRqdXN0IHNpZ25zIChpZiBuZWNlc3NhcnkpXHJcbiAgICBpZiAoY29zb20gPCAwLjApIHtcclxuICAgICAgICBjb3NvbSA9IC1jb3NvbTtcclxuICAgICAgICBieCA9IC0gYng7XHJcbiAgICAgICAgYnkgPSAtIGJ5O1xyXG4gICAgICAgIGJ6ID0gLSBiejtcclxuICAgICAgICBidyA9IC0gYnc7XHJcbiAgICB9XHJcbiAgICAvLyBjYWxjdWxhdGUgY29lZmZpY2llbnRzXHJcbiAgICBpZiAoKDEuMCAtIGNvc29tKSA+IDAuMDAwMDAxKSB7XHJcbiAgICAgICAgLy8gc3RhbmRhcmQgY2FzZSAoc2xlcnApXHJcbiAgICAgICAgb21lZ2EgID0gTWF0aC5hY29zKGNvc29tKTtcclxuICAgICAgICBzaW5vbSAgPSBNYXRoLnNpbihvbWVnYSk7XHJcbiAgICAgICAgc2NhbGUwID0gTWF0aC5zaW4oKDEuMCAtIHQpICogb21lZ2EpIC8gc2lub207XHJcbiAgICAgICAgc2NhbGUxID0gTWF0aC5zaW4odCAqIG9tZWdhKSAvIHNpbm9tO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gJ2Zyb20nIGFuZCAndG8nIHF1YXRlcm5pb25zIGFyZSB2ZXJ5IGNsb3NlXHJcbiAgICAgICAgLy8gIC4uLiBzbyB3ZSBjYW4gZG8gYSBsaW5lYXIgaW50ZXJwb2xhdGlvblxyXG4gICAgICAgIHNjYWxlMCA9IDEuMCAtIHQ7XHJcbiAgICAgICAgc2NhbGUxID0gdDtcclxuICAgIH1cclxuICAgIC8vIGNhbGN1bGF0ZSBmaW5hbCB2YWx1ZXNcclxuICAgIG91dFswXSA9IHNjYWxlMCAqIGF4ICsgc2NhbGUxICogYng7XHJcbiAgICBvdXRbMV0gPSBzY2FsZTAgKiBheSArIHNjYWxlMSAqIGJ5O1xyXG4gICAgb3V0WzJdID0gc2NhbGUwICogYXogKyBzY2FsZTEgKiBiejtcclxuICAgIG91dFszXSA9IHNjYWxlMCAqIGF3ICsgc2NhbGUxICogYnc7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNhbXBsZXJUcmFjayBtYW5hZ2VzIGBwb3NpdGlvbmAsIGByb3RhdGlvbmAsIGBzY2FsZWAgdHJhY2tzIGluIGFuaW1hdGlvbiBvZiBzaW5nbGUgc2NlbmUgbm9kZS5cclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2tcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubmFtZV0gVHJhY2sgbmFtZVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW29wdHMudGFyZ2V0XSBUYXJnZXQgbm9kZSdzIHRyYW5zZm9ybSB3aWxsIHVwZGF0ZWQgYXV0b21hdGljYWxseVxyXG4gKi9cclxudmFyIFNhbXBsZXJUcmFjayA9IGZ1bmN0aW9uIChvcHRzKSB7XHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICB0aGlzLm5hbWUgPSBvcHRzLm5hbWUgfHwgJyc7XHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRhcmdldCA9IG9wdHMudGFyZ2V0IHx8IG51bGw7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtBcnJheX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0aW9uIGlzIHJlcHJlc2VudGVkIGJ5IGEgcXVhdGVybmlvblxyXG4gICAgICogQHR5cGUge0FycmF5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnJvdGF0aW9uID0gcXVhdC5jcmVhdGUoKTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge0FycmF5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnNjYWxlID0gdmVjMy5mcm9tVmFsdWVzKDEsIDEsIDEpO1xyXG5cclxuICAgIHRoaXMuY2hhbm5lbHMgPSB7XHJcbiAgICAgICAgdGltZTogbnVsbCxcclxuICAgICAgICBwb3NpdGlvbjogbnVsbCxcclxuICAgICAgICByb3RhdGlvbjogbnVsbCxcclxuICAgICAgICBzY2FsZTogbnVsbFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLl9jYWNoZUtleSA9IDA7XHJcbiAgICB0aGlzLl9jYWNoZVRpbWUgPSAwO1xyXG59O1xyXG5cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIGlmICghdGhpcy5jaGFubmVscy50aW1lKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGNoYW5uZWxzID0gdGhpcy5jaGFubmVscztcclxuICAgIHZhciBsZW4gPSBjaGFubmVscy50aW1lLmxlbmd0aDtcclxuICAgIHZhciBrZXkgPSAtMTtcclxuICAgIC8vIE9ubHkgb25lIGZyYW1lXHJcbiAgICBpZiAobGVuID09PSAxKSB7XHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnJvdGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHF1YXQuY29weSh0aGlzLnJvdGF0aW9uLCBjaGFubmVscy5yb3RhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFubmVscy5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICB2ZWMzLmNvcHkodGhpcy5wb3NpdGlvbiwgY2hhbm5lbHMucG9zaXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbm5lbHMuc2NhbGUpIHtcclxuICAgICAgICAgICAgdmVjMy5jb3B5KHRoaXMuc2NhbGUsIGNoYW5uZWxzLnNjYWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gQ2xhbXBcclxuICAgIGVsc2UgaWYgKHRpbWUgPD0gY2hhbm5lbHMudGltZVswXSkge1xyXG4gICAgICAgIHRpbWUgPSBjaGFubmVscy50aW1lWzBdO1xyXG4gICAgICAgIGtleSA9IDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aW1lID49IGNoYW5uZWxzLnRpbWVbbGVuIC0gMV0pIHtcclxuICAgICAgICB0aW1lID0gY2hhbm5lbHMudGltZVtsZW4gLSAxXTtcclxuICAgICAgICBrZXkgPSBsZW4gLSAyO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRpbWUgPCB0aGlzLl9jYWNoZVRpbWUpIHtcclxuICAgICAgICAgICAgdmFyIHMgPSBNYXRoLm1pbihsZW4gLSAxLCB0aGlzLl9jYWNoZUtleSArIDEpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gczsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChjaGFubmVscy50aW1lW2kgLSAxXSA8PSB0aW1lICYmIGNoYW5uZWxzLnRpbWVbaV0gPiB0aW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gaSAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9jYWNoZUtleTsgaSA8IGxlbiAtIDE7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoYW5uZWxzLnRpbWVbaV0gPD0gdGltZSAmJiBjaGFubmVscy50aW1lW2kgKyAxXSA+IHRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGtleSA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5fY2FjaGVLZXkgPSBrZXk7XHJcbiAgICAgICAgdGhpcy5fY2FjaGVUaW1lID0gdGltZTtcclxuICAgICAgICB2YXIgc3RhcnQgPSBrZXk7XHJcbiAgICAgICAgdmFyIGVuZCA9IGtleSArIDE7XHJcbiAgICAgICAgdmFyIHN0YXJ0VGltZSA9IGNoYW5uZWxzLnRpbWVbc3RhcnRdO1xyXG4gICAgICAgIHZhciBlbmRUaW1lID0gY2hhbm5lbHMudGltZVtlbmRdO1xyXG4gICAgICAgIHZhciByYW5nZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XHJcbiAgICAgICAgdmFyIHBlcmNlbnQgPSByYW5nZSA9PT0gMCA/IDAgOiAodGltZSAtIHN0YXJ0VGltZSkgLyByYW5nZTtcclxuXHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnJvdGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHF1YXRTbGVycCh0aGlzLnJvdGF0aW9uLCBjaGFubmVscy5yb3RhdGlvbiwgY2hhbm5lbHMucm90YXRpb24sIHBlcmNlbnQsIHN0YXJ0ICogNCwgZW5kICogNCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFubmVscy5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICB2ZWMzbGVycCh0aGlzLnBvc2l0aW9uLCBjaGFubmVscy5wb3NpdGlvbiwgY2hhbm5lbHMucG9zaXRpb24sIHBlcmNlbnQsIHN0YXJ0ICogMywgZW5kICogMyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFubmVscy5zY2FsZSkge1xyXG4gICAgICAgICAgICB2ZWMzbGVycCh0aGlzLnNjYWxlLCBjaGFubmVscy5zY2FsZSwgY2hhbm5lbHMuc2NhbGUsIHBlcmNlbnQsIHN0YXJ0ICogMywgZW5kICogMyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gTG9vcCBoYW5kbGluZ1xyXG4gICAgaWYgKGtleSA9PT0gbGVuIC0gMikge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlS2V5ID0gMDtcclxuICAgICAgICB0aGlzLl9jYWNoZVRpbWUgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlVGFyZ2V0KCk7XHJcbn07XHJcblxyXG4vKipcclxuICogVXBkYXRlIHRyYW5zZm9ybSBvZiB0YXJnZXQgbm9kZSBtYW51YWxseVxyXG4gKi9cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS51cGRhdGVUYXJnZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgY2hhbm5lbHMgPSB0aGlzLmNoYW5uZWxzO1xyXG4gICAgaWYgKHRoaXMudGFyZ2V0KSB7XHJcbiAgICAgICAgLy8gT25seSB1cGRhdGUgdGFyZ2V0IHByb3AgaWYgaGF2ZSBkYXRhLlxyXG4gICAgICAgIGlmIChjaGFubmVscy5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldC5wb3NpdGlvbi5zZXRBcnJheSh0aGlzLnBvc2l0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnJvdGF0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnJvdGF0aW9uLnNldEFycmF5KHRoaXMucm90YXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbm5lbHMuc2NhbGUpIHtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXQuc2NhbGUuc2V0QXJyYXkodGhpcy5zY2FsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuZ2V0TWF4VGltZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLmNoYW5uZWxzLnRpbWVbdGhpcy5jaGFubmVscy50aW1lLmxlbmd0aCAtIDFdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFRpbWVcclxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFRpbWVcclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfVxyXG4gKi9cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5nZXRTdWJUcmFjayA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUpIHtcclxuXHJcbiAgICB2YXIgc3ViQ2xpcCA9IG5ldyBTYW1wbGVyVHJhY2soe1xyXG4gICAgICAgIG5hbWU6IHRoaXMubmFtZVxyXG4gICAgfSk7XHJcbiAgICB2YXIgbWluVGltZSA9IHRoaXMuY2hhbm5lbHMudGltZVswXTtcclxuICAgIHN0YXJ0VGltZSA9IE1hdGgubWluKE1hdGgubWF4KHN0YXJ0VGltZSwgbWluVGltZSksIHRoaXMubGlmZSk7XHJcbiAgICBlbmRUaW1lID0gTWF0aC5taW4oTWF0aC5tYXgoZW5kVGltZSwgbWluVGltZSksIHRoaXMubGlmZSk7XHJcblxyXG4gICAgdmFyIHJhbmdlU3RhcnQgPSB0aGlzLl9maW5kUmFuZ2Uoc3RhcnRUaW1lKTtcclxuICAgIHZhciByYW5nZUVuZCA9IHRoaXMuX2ZpbmRSYW5nZShlbmRUaW1lKTtcclxuXHJcbiAgICB2YXIgY291bnQgPSByYW5nZUVuZFswXSAtIHJhbmdlU3RhcnRbMF0gKyAxO1xyXG4gICAgaWYgKHJhbmdlU3RhcnRbMV0gPT09IDAgJiYgcmFuZ2VFbmRbMV0gPT09IDApIHtcclxuICAgICAgICBjb3VudCAtPSAxO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhbm5lbHMucm90YXRpb24pIHtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhbm5lbHMucG9zaXRpb24pIHtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnBvc2l0aW9uID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhbm5lbHMuc2NhbGUpIHtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnNjYWxlID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhbm5lbHMudGltZSkge1xyXG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMudGltZSA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQpO1xyXG4gICAgfVxyXG4gICAgLy8gQ2xpcCBhdCB0aGUgc3RhcnRcclxuICAgIHRoaXMuc2V0VGltZShzdGFydFRpbWUpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uW2ldID0gdGhpcy5yb3RhdGlvbltpXTtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnBvc2l0aW9uW2ldID0gdGhpcy5wb3NpdGlvbltpXTtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnNjYWxlW2ldID0gdGhpcy5zY2FsZVtpXTtcclxuICAgIH1cclxuICAgIHN1YkNsaXAuY2hhbm5lbHMudGltZVswXSA9IDA7XHJcbiAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uWzNdID0gdGhpcy5yb3RhdGlvblszXTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGNvdW50LTE7IGkrKykge1xyXG4gICAgICAgIHZhciBpMjtcclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDM7IGorKykge1xyXG4gICAgICAgICAgICBpMiA9IHJhbmdlU3RhcnRbMF0gKyBpO1xyXG4gICAgICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uW2kgKiA0ICsgal0gPSB0aGlzLmNoYW5uZWxzLnJvdGF0aW9uW2kyICogNCArIGpdO1xyXG4gICAgICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnBvc2l0aW9uW2kgKiAzICsgal0gPSB0aGlzLmNoYW5uZWxzLnBvc2l0aW9uW2kyICogMyArIGpdO1xyXG4gICAgICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnNjYWxlW2kgKiAzICsgal0gPSB0aGlzLmNoYW5uZWxzLnNjYWxlW2kyICogMyArIGpdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnRpbWVbaV0gPSB0aGlzLmNoYW5uZWxzLnRpbWVbaTJdIC0gc3RhcnRUaW1lO1xyXG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMucm90YXRpb25baSAqIDQgKyAzXSA9IHRoaXMuY2hhbm5lbHMucm90YXRpb25baTIgKiA0ICsgM107XHJcbiAgICB9XHJcbiAgICAvLyBDbGlwIGF0IHRoZSBlbmRcclxuICAgIHRoaXMuc2V0VGltZShlbmRUaW1lKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvblsoY291bnQgLSAxKSAqIDQgKyBpXSA9IHRoaXMucm90YXRpb25baV07XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5wb3NpdGlvblsoY291bnQgLSAxKSAqIDMgKyBpXSA9IHRoaXMucG9zaXRpb25baV07XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5zY2FsZVsoY291bnQgLSAxKSAqIDMgKyBpXSA9IHRoaXMuc2NhbGVbaV07XHJcbiAgICB9XHJcbiAgICBzdWJDbGlwLmNoYW5uZWxzLnRpbWVbKGNvdW50IC0gMSldID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcclxuICAgIHN1YkNsaXAuY2hhbm5lbHMucm90YXRpb25bKGNvdW50IC0gMSkgKiA0ICsgM10gPSB0aGlzLnJvdGF0aW9uWzNdO1xyXG5cclxuICAgIC8vIFRPRE8gc2V0IGJhY2sgP1xyXG4gICAgc3ViQ2xpcC5saWZlID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcclxuICAgIHJldHVybiBzdWJDbGlwO1xyXG59O1xyXG5cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5fZmluZFJhbmdlID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIHZhciBjaGFubmVscyA9IHRoaXMuY2hhbm5lbHM7XHJcbiAgICB2YXIgbGVuID0gY2hhbm5lbHMudGltZS5sZW5ndGg7XHJcbiAgICB2YXIgc3RhcnQgPSAtMTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnRpbWVbaV0gPD0gdGltZSAmJiBjaGFubmVscy50aW1lW2krMV0gPiB0aW1lKSB7XHJcbiAgICAgICAgICAgIHN0YXJ0ID0gaTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgcGVyY2VudCA9IDA7XHJcbiAgICBpZiAoc3RhcnQgPj0gMCkge1xyXG4gICAgICAgIHZhciBzdGFydFRpbWUgPSBjaGFubmVscy50aW1lW3N0YXJ0XTtcclxuICAgICAgICB2YXIgZW5kVGltZSA9IGNoYW5uZWxzLnRpbWVbc3RhcnQrMV07XHJcbiAgICAgICAgdmFyIHBlcmNlbnQgPSAodGltZS1zdGFydFRpbWUpIC8gKGVuZFRpbWUtc3RhcnRUaW1lKTtcclxuICAgIH1cclxuICAgIC8vIFBlcmNlbnQgWzAsIDEpXHJcbiAgICByZXR1cm4gW3N0YXJ0LCBwZXJjZW50XTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiAxRCBibGVuZGluZyBiZXR3ZWVuIHR3byBjbGlwc1xyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMVxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMyXHJcbiAqIEBwYXJhbSAge251bWJlcn0gd1xyXG4gKi9cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5ibGVuZDFEID0gZnVuY3Rpb24gKHQxLCB0Miwgdykge1xyXG4gICAgdmVjMy5sZXJwKHRoaXMucG9zaXRpb24sIHQxLnBvc2l0aW9uLCB0Mi5wb3NpdGlvbiwgdyk7XHJcbiAgICB2ZWMzLmxlcnAodGhpcy5zY2FsZSwgdDEuc2NhbGUsIHQyLnNjYWxlLCB3KTtcclxuICAgIHF1YXQuc2xlcnAodGhpcy5yb3RhdGlvbiwgdDEucm90YXRpb24sIHQyLnJvdGF0aW9uLCB3KTtcclxufTtcclxuLyoqXHJcbiAqIDJEIGJsZW5kaW5nIGJldHdlZW4gdGhyZWUgY2xpcHNcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzFcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMlxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMzXHJcbiAqIEBwYXJhbSAge251bWJlcn0gZlxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IGdcclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuYmxlbmQyRCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcTEgPSBxdWF0LmNyZWF0ZSgpO1xyXG4gICAgdmFyIHEyID0gcXVhdC5jcmVhdGUoKTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodDEsIHQyLCB0MywgZiwgZykge1xyXG4gICAgICAgIHZhciBhID0gMSAtIGYgLSBnO1xyXG5cclxuICAgICAgICB0aGlzLnBvc2l0aW9uWzBdID0gdDEucG9zaXRpb25bMF0gKiBhICsgdDIucG9zaXRpb25bMF0gKiBmICsgdDMucG9zaXRpb25bMF0gKiBnO1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25bMV0gPSB0MS5wb3NpdGlvblsxXSAqIGEgKyB0Mi5wb3NpdGlvblsxXSAqIGYgKyB0My5wb3NpdGlvblsxXSAqIGc7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvblsyXSA9IHQxLnBvc2l0aW9uWzJdICogYSArIHQyLnBvc2l0aW9uWzJdICogZiArIHQzLnBvc2l0aW9uWzJdICogZztcclxuXHJcbiAgICAgICAgdGhpcy5zY2FsZVswXSA9IHQxLnNjYWxlWzBdICogYSArIHQyLnNjYWxlWzBdICogZiArIHQzLnNjYWxlWzBdICogZztcclxuICAgICAgICB0aGlzLnNjYWxlWzFdID0gdDEuc2NhbGVbMV0gKiBhICsgdDIuc2NhbGVbMV0gKiBmICsgdDMuc2NhbGVbMV0gKiBnO1xyXG4gICAgICAgIHRoaXMuc2NhbGVbMl0gPSB0MS5zY2FsZVsyXSAqIGEgKyB0Mi5zY2FsZVsyXSAqIGYgKyB0My5zY2FsZVsyXSAqIGc7XHJcblxyXG4gICAgICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYmIyMDU0MDModj12cy44NSkuYXNweFxyXG4gICAgICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbWljcm9zb2Z0LmRpcmVjdHhfc2RrLnF1YXRlcm5pb24ueG1xdWF0ZXJuaW9uYmFyeWNlbnRyaWModj12cy44NSkuYXNweFxyXG4gICAgICAgIHZhciBzID0gZiArIGc7XHJcbiAgICAgICAgaWYgKHMgPT09IDApIHtcclxuICAgICAgICAgICAgcXVhdC5jb3B5KHRoaXMucm90YXRpb24sIHQxLnJvdGF0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHF1YXQuc2xlcnAocTEsIHQxLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbiwgcyk7XHJcbiAgICAgICAgICAgIHF1YXQuc2xlcnAocTIsIHQxLnJvdGF0aW9uLCB0My5yb3RhdGlvbiwgcyk7XHJcbiAgICAgICAgICAgIHF1YXQuc2xlcnAodGhpcy5yb3RhdGlvbiwgcTEsIHEyLCBnIC8gcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufSkoKTtcclxuLyoqXHJcbiAqIEFkZGl0aXZlIGJsZW5kaW5nIGJldHdlZW4gdHdvIGNsaXBzXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzJcclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuYWRkaXRpdmVCbGVuZCA9IGZ1bmN0aW9uICh0MSwgdDIpIHtcclxuICAgIHZlYzMuYWRkKHRoaXMucG9zaXRpb24sIHQxLnBvc2l0aW9uLCB0Mi5wb3NpdGlvbik7XHJcbiAgICB2ZWMzLmFkZCh0aGlzLnNjYWxlLCB0MS5zY2FsZSwgdDIuc2NhbGUpO1xyXG4gICAgcXVhdC5tdWx0aXBseSh0aGlzLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbiwgdDEucm90YXRpb24pO1xyXG59O1xyXG4vKipcclxuICogU3VidHJhY3RpdmUgYmxlbmRpbmcgYmV0d2VlbiB0d28gY2xpcHNcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzFcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMlxyXG4gKi9cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5zdWJ0cmFjdGl2ZUJsZW5kID0gZnVuY3Rpb24gKHQxLCB0Mikge1xyXG4gICAgdmVjMy5zdWIodGhpcy5wb3NpdGlvbiwgdDEucG9zaXRpb24sIHQyLnBvc2l0aW9uKTtcclxuICAgIHZlYzMuc3ViKHRoaXMuc2NhbGUsIHQxLnNjYWxlLCB0Mi5zY2FsZSk7XHJcbiAgICBxdWF0LmludmVydCh0aGlzLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbik7XHJcbiAgICBxdWF0Lm11bHRpcGx5KHRoaXMucm90YXRpb24sIHRoaXMucm90YXRpb24sIHQxLnJvdGF0aW9uKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDbG9uZSBhIG5ldyBTYW1wbGVyVHJhY2tcclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfVxyXG4gKi9cclxuU2FtcGxlclRyYWNrLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB0cmFjayA9IFNhbXBsZXJUcmFjay5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgIHRyYWNrLmNoYW5uZWxzID0ge1xyXG4gICAgICAgIHRpbWU6IHRoaXMuY2hhbm5lbHMudGltZSB8fCBudWxsLFxyXG4gICAgICAgIHBvc2l0aW9uOiB0aGlzLmNoYW5uZWxzLnBvc2l0aW9uIHx8IG51bGwsXHJcbiAgICAgICAgcm90YXRpb246IHRoaXMuY2hhbm5lbHMucm90YXRpb24gfHwgbnVsbCxcclxuICAgICAgICBzY2FsZTogdGhpcy5jaGFubmVscy5zY2FsZSB8fCBudWxsXHJcbiAgICB9O1xyXG4gICAgdmVjMy5jb3B5KHRyYWNrLnBvc2l0aW9uLCB0aGlzLnBvc2l0aW9uKTtcclxuICAgIHF1YXQuY29weSh0cmFjay5yb3RhdGlvbiwgdGhpcy5yb3RhdGlvbik7XHJcbiAgICB2ZWMzLmNvcHkodHJhY2suc2NhbGUsIHRoaXMuc2NhbGUpO1xyXG5cclxuICAgIHRyYWNrLnRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG4gICAgdHJhY2sudXBkYXRlVGFyZ2V0KCk7XHJcblxyXG4gICAgcmV0dXJuIHRyYWNrO1xyXG5cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNhbXBsZXJUcmFjaztcclxuIiwiLyoqXHJcbiAqIEV4dGVuZCBhIHN1YiBjbGFzcyBmcm9tIGJhc2UgY2xhc3NcclxuICogQHBhcmFtIHtvYmplY3R8RnVuY3Rpb259IG1ha2VEZWZhdWx0T3B0IGRlZmF1bHQgb3B0aW9uIG9mIHRoaXMgc3ViIGNsYXNzLCBtZXRob2Qgb2YgdGhlIHN1YiBjYW4gdXNlIHRoaXMueHh4IHRvIGFjY2VzcyB0aGlzIG9wdGlvblxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaW5pdGlhbGl6ZV0gSW5pdGlhbGl6ZSBhZnRlciB0aGUgc3ViIGNsYXNzIGlzIGluc3RhbnRpYXRlZFxyXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3RvXSBQcm90b3R5cGUgbWV0aG9kcy9wcm9wZXJ0aWVzIG9mIHRoZSBzdWIgY2xhc3NcclxuICogQG1lbWJlck9mIGNsYXkuY29yZS5taXhpbi5leHRlbmRcclxuICogQHJldHVybiB7RnVuY3Rpb259XHJcbiAqL1xyXG5mdW5jdGlvbiBkZXJpdmUobWFrZURlZmF1bHRPcHQsIGluaXRpYWxpemUvKm9wdGlvbmFsKi8sIHByb3RvLypvcHRpb25hbCovKSB7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsaXplID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgcHJvdG8gPSBpbml0aWFsaXplO1xyXG4gICAgICAgIGluaXRpYWxpemUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBfc3VwZXIgPSB0aGlzO1xyXG5cclxuICAgIHZhciBwcm9wTGlzdDtcclxuICAgIGlmICghKG1ha2VEZWZhdWx0T3B0IGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XHJcbiAgICAgICAgLy8gT3B0aW1pemUgdGhlIHByb3BlcnR5IGl0ZXJhdGUgaWYgaXQgaGF2ZSBiZWVuIGZpeGVkXHJcbiAgICAgICAgcHJvcExpc3QgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBtYWtlRGVmYXVsdE9wdCkge1xyXG4gICAgICAgICAgICBpZiAobWFrZURlZmF1bHRPcHQuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wTGlzdC5wdXNoKHByb3BOYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIgc3ViID0gZnVuY3Rpb24ob3B0aW9ucykge1xyXG5cclxuICAgICAgICAvLyBjYWxsIHN1cGVyIGNvbnN0cnVjdG9yXHJcbiAgICAgICAgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcblxyXG4gICAgICAgIGlmIChtYWtlRGVmYXVsdE9wdCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIC8vIEludm9rZSBtYWtlRGVmYXVsdE9wdCBlYWNoIHRpbWUgaWYgaXQgaXMgYSBmdW5jdGlvbiwgU28gd2UgY2FuIG1ha2Ugc3VyZSBlYWNoXHJcbiAgICAgICAgICAgIC8vIHByb3BlcnR5IGluIHRoZSBvYmplY3Qgd2lsbCBub3QgYmUgc2hhcmVkIGJ5IG11dGlwbGUgaW5zdGFuY2VzXHJcbiAgICAgICAgICAgIGV4dGVuZCh0aGlzLCBtYWtlRGVmYXVsdE9wdC5jYWxsKHRoaXMsIG9wdGlvbnMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGV4dGVuZFdpdGhQcm9wTGlzdCh0aGlzLCBtYWtlRGVmYXVsdE9wdCwgcHJvcExpc3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IHN1Yikge1xyXG4gICAgICAgICAgICAvLyBJbml0aWFsaXplIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGluIHRoZSBvcmRlciBvZiBpbmhlcml0XHJcbiAgICAgICAgICAgIHZhciBpbml0aWFsaXplcnMgPSBzdWIuX19pbml0aWFsaXplcnNfXztcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGluaXRpYWxpemVyc1tpXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIC8vIHNhdmUgc3VwZXIgY29uc3RydWN0b3JcclxuICAgIHN1Yi5fX3N1cGVyX18gPSBfc3VwZXI7XHJcbiAgICAvLyBJbml0aWFsaXplIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGFsbCB0aGUgc3VwZXIgY29uc3RydWN0b3IgaXMgY2FsbGVkXHJcbiAgICBpZiAoIV9zdXBlci5fX2luaXRpYWxpemVyc19fKSB7XHJcbiAgICAgICAgc3ViLl9faW5pdGlhbGl6ZXJzX18gPSBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc3ViLl9faW5pdGlhbGl6ZXJzX18gPSBfc3VwZXIuX19pbml0aWFsaXplcnNfXy5zbGljZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGluaXRpYWxpemUpIHtcclxuICAgICAgICBzdWIuX19pbml0aWFsaXplcnNfXy5wdXNoKGluaXRpYWxpemUpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBDdG9yID0gZnVuY3Rpb24oKSB7fTtcclxuICAgIEN0b3IucHJvdG90eXBlID0gX3N1cGVyLnByb3RvdHlwZTtcclxuICAgIHN1Yi5wcm90b3R5cGUgPSBuZXcgQ3RvcigpO1xyXG4gICAgc3ViLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YjtcclxuICAgIGV4dGVuZChzdWIucHJvdG90eXBlLCBwcm90byk7XHJcblxyXG4gICAgLy8gZXh0ZW5kIHRoZSBkZXJpdmUgbWV0aG9kIGFzIGEgc3RhdGljIG1ldGhvZDtcclxuICAgIHN1Yi5leHRlbmQgPSBfc3VwZXIuZXh0ZW5kO1xyXG5cclxuICAgIC8vIERFUENSQVRFRFxyXG4gICAgc3ViLmRlcml2ZSA9IF9zdXBlci5leHRlbmQ7XHJcblxyXG4gICAgcmV0dXJuIHN1YjtcclxufVxyXG5cclxuZnVuY3Rpb24gZXh0ZW5kKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICBpZiAoIXNvdXJjZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGZvciAodmFyIG5hbWUgaW4gc291cmNlKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG4gICAgICAgICAgICB0YXJnZXRbbmFtZV0gPSBzb3VyY2VbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBleHRlbmRXaXRoUHJvcExpc3QodGFyZ2V0LCBzb3VyY2UsIHByb3BMaXN0KSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHByb3BOYW1lID0gcHJvcExpc3RbaV07XHJcbiAgICAgICAgdGFyZ2V0W3Byb3BOYW1lXSA9IHNvdXJjZVtwcm9wTmFtZV07XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAYWxpYXMgY2xheS5jb3JlLm1peGluLmV4dGVuZFxyXG4gKiBAbWl4aW5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuXHJcbiAgICBleHRlbmQ6IGRlcml2ZSxcclxuXHJcbiAgICAvLyBERVBDUkFURURcclxuICAgIGRlcml2ZTogZGVyaXZlXHJcbn07XHJcbiIsImZ1bmN0aW9uIEhhbmRsZXIoYWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICB0aGlzLmFjdGlvbiA9IGFjdGlvbjtcclxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbn1cclxuLyoqXHJcbiAqIEBtaXhpblxyXG4gKiBAYWxpYXMgY2xheS5jb3JlLm1peGluLm5vdGlmaWVyXHJcbiAqL1xyXG52YXIgbm90aWZpZXIgPSB7XHJcbiAgICAvKipcclxuICAgICAqIFRyaWdnZXIgZXZlbnRcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxyXG4gICAgICovXHJcbiAgICB0cmlnZ2VyOiBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc093blByb3BlcnR5KCdfX2hhbmRsZXJzX18nKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5fX2hhbmRsZXJzX18uaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGhkbHMgPSB0aGlzLl9faGFuZGxlcnNfX1tuYW1lXTtcclxuICAgICAgICB2YXIgbCA9IGhkbHMubGVuZ3RoLCBpID0gLTEsIGFyZ3MgPSBhcmd1bWVudHM7XHJcbiAgICAgICAgLy8gT3B0aW1pemUgYWR2aXNlIGZyb20gYmFja2JvbmVcclxuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIHdoaWxlICgrK2kgPCBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGRsc1tpXS5hY3Rpb24uY2FsbChoZGxzW2ldLmNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhkbHNbaV0uYWN0aW9uLmNhbGwoaGRsc1tpXS5jb250ZXh0LCBhcmdzWzFdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKCsraSA8IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCwgYXJnc1sxXSwgYXJnc1syXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgIHdoaWxlICgrK2kgPCBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGRsc1tpXS5hY3Rpb24uY2FsbChoZGxzW2ldLmNvbnRleHQsIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhkbHNbaV0uYWN0aW9uLmNhbGwoaGRsc1tpXS5jb250ZXh0LCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHdoaWxlICgrK2kgPCBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGRsc1tpXS5hY3Rpb24uYXBwbHkoaGRsc1tpXS5jb250ZXh0LCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzLCAxKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXIgZXZlbnQgaGFuZGxlclxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBvbjogZnVuY3Rpb24obmFtZSwgYWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICAgICAgaWYgKCFuYW1lIHx8ICFhY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9faGFuZGxlcnNfXyB8fCAodGhpcy5fX2hhbmRsZXJzX189e30pO1xyXG4gICAgICAgIGlmICghaGFuZGxlcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhhcyhuYW1lLCBhY3Rpb24pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBuZXcgSGFuZGxlcihhY3Rpb24sIGNvbnRleHQgfHwgdGhpcyk7XHJcbiAgICAgICAgaGFuZGxlcnNbbmFtZV0ucHVzaChoYW5kbGVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXIgZXZlbnQsIGV2ZW50IHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgb25jZSBhbmQgdGhlbiByZW1vdmVkXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIG9uY2U6IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XHJcbiAgICAgICAgICAgIHNlbGYub2ZmKG5hbWUsIHdyYXBwZXIpO1xyXG4gICAgICAgICAgICBhY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub24obmFtZSwgd3JhcHBlciwgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2Ygb25jZSgnYmVmb3JlJyArIG5hbWUpXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIGJlZm9yZTogZnVuY3Rpb24obmFtZSwgYWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICAgICAgaWYgKCFuYW1lIHx8ICFhY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBuYW1lID0gJ2JlZm9yZScgKyBuYW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2Ygb25jZSgnYWZ0ZXInICsgbmFtZSlcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGFjdGlvblxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgYWZ0ZXI6IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmFtZSA9ICdhZnRlcicgKyBuYW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2Ygb24oJ3N1Y2Nlc3MnKVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGFjdGlvblxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgc3VjY2VzczogZnVuY3Rpb24oYWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub25jZSgnc3VjY2VzcycsIGFjdGlvbiwgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2Ygb24oJ2Vycm9yJylcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIGVycm9yOiBmdW5jdGlvbihhY3Rpb24sIGNvbnRleHQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vbmNlKCdlcnJvcicsIGFjdGlvbiwgY29udGV4dCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGV2ZW50IGxpc3RlbmVyXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBvZmY6IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbikge1xyXG5cclxuICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9faGFuZGxlcnNfXyB8fCAodGhpcy5fX2hhbmRsZXJzX189e30pO1xyXG5cclxuICAgICAgICBpZiAoIWFjdGlvbikge1xyXG4gICAgICAgICAgICBoYW5kbGVyc1tuYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChoYW5kbGVyc1tuYW1lXSkge1xyXG4gICAgICAgICAgICB2YXIgaGRscyA9IGhhbmRsZXJzW25hbWVdO1xyXG4gICAgICAgICAgICB2YXIgcmV0YWlucyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhkbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gJiYgaGRsc1tpXS5hY3Rpb24gIT09IGFjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldGFpbnMucHVzaChoZGxzW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBoYW5kbGVyc1tuYW1lXSA9IHJldGFpbnM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiByZWdpc3RlcmVkIHRoZSBldmVudCBoYW5kbGVyXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gIGFjdGlvblxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaGFzOiBmdW5jdGlvbihuYW1lLCBhY3Rpb24pIHtcclxuICAgICAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9faGFuZGxlcnNfXztcclxuXHJcbiAgICAgICAgaWYgKCEgaGFuZGxlcnMgfHxcclxuICAgICAgICAgICAgISBoYW5kbGVyc1tuYW1lXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBoZGxzID0gaGFuZGxlcnNbbmFtZV07XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChoZGxzW2ldLmFjdGlvbiA9PT0gYWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5vdGlmaWVyOyIsInZhciBndWlkID0gMDtcclxuXHJcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xyXG52YXIgbmF0aXZlRm9yRWFjaCA9IEFycmF5UHJvdG8uZm9yRWFjaDtcclxuXHJcbi8qKlxyXG4gKiBVdGlsIGZ1bmN0aW9uc1xyXG4gKiBAbmFtZXNwYWNlIGNsYXkuY29yZS51dGlsXHJcbiAqL1xyXG52YXIgdXRpbCA9IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIEdVSURcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBnZW5HVUlEOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuICsrZ3VpZDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFJlbGF0aXZlIHBhdGggdG8gYWJzb2x1dGUgcGF0aFxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBwYXRoXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGJhc2VQYXRoXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgcmVsYXRpdmUyYWJzb2x1dGU6IGZ1bmN0aW9uIChwYXRoLCBiYXNlUGF0aCkge1xyXG4gICAgICAgIGlmICghYmFzZVBhdGggfHwgcGF0aC5tYXRjaCgvXlxcLy8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcGF0aFBhcnRzID0gcGF0aC5zcGxpdCgnLycpO1xyXG4gICAgICAgIHZhciBiYXNlUGF0aFBhcnRzID0gYmFzZVBhdGguc3BsaXQoJy8nKTtcclxuXHJcbiAgICAgICAgdmFyIGl0ZW0gPSBwYXRoUGFydHNbMF07XHJcbiAgICAgICAgd2hpbGUoaXRlbSA9PT0gJy4nIHx8IGl0ZW0gPT09ICcuLicpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gPT09ICcuLicpIHtcclxuICAgICAgICAgICAgICAgIGJhc2VQYXRoUGFydHMucG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGF0aFBhcnRzLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgIGl0ZW0gPSBwYXRoUGFydHNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBiYXNlUGF0aFBhcnRzLmpvaW4oJy8nKSArICcvJyArIHBhdGhQYXJ0cy5qb2luKCcvJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXh0ZW5kIHRhcmdldCB3aXRoIHNvdXJjZVxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gc291cmNlXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgZXh0ZW5kOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgICAgICBpZiAoc291cmNlKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gc291cmNlW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXh0ZW5kIHByb3BlcnRpZXMgdG8gdGFyZ2V0IGlmIG5vdCBleGlzdC5cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHNvdXJjZVxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIGRlZmF1bHRzOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgICAgICBpZiAoc291cmNlKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BOYW1lIGluIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldFtwcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wTmFtZV0gPSBzb3VyY2VbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBFeHRlbmQgcHJvcGVydGllcyB3aXRoIGEgZ2l2ZW4gcHJvcGVydHkgbGlzdCB0byBhdm9pZCBmb3IuLmluLi4gaXRlcmF0aW9uLlxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gc291cmNlXHJcbiAgICAgKiBAcGFyYW0gIHtBcnJheS48c3RyaW5nPn0gcHJvcExpc3RcclxuICAgICAqIEByZXR1cm4ge09iamVjdH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBleHRlbmRXaXRoUHJvcExpc3Q6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgcHJvcExpc3QpIHtcclxuICAgICAgICBpZiAoc291cmNlKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcm9wTmFtZSA9IHByb3BMaXN0W2ldO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BOYW1lXSA9IHNvdXJjZVtwcm9wTmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEV4dGVuZCBwcm9wZXJ0aWVzIHRvIHRhcmdldCBpZiBub3QgZXhpc3QuIFdpdGggYSBnaXZlbiBwcm9wZXJ0eSBsaXN0IGF2b2lkIGZvci4uaW4uLiBpdGVyYXRpb24uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBzb3VyY2VcclxuICAgICAqIEBwYXJhbSAge0FycmF5LjxzdHJpbmc+fSBwcm9wTGlzdFxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIGRlZmF1bHRzV2l0aFByb3BMaXN0OiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIHByb3BMaXN0KSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJvcE5hbWUgPSBwcm9wTGlzdFtpXTtcclxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRbcHJvcE5hbWVdID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcE5hbWVdID0gc291cmNlW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fEFycmF5fSBvYmpcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBpdGVyYXRvclxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBlYWNoOiBmdW5jdGlvbiAob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xyXG4gICAgICAgIGlmICghKG9iaiAmJiBpdGVyYXRvcikpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqLmZvckVhY2ggJiYgb2JqLmZvckVhY2ggPT09IG5hdGl2ZUZvckVhY2gpIHtcclxuICAgICAgICAgICAgb2JqLmZvckVhY2goaXRlcmF0b3IsIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChvYmoubGVuZ3RoID09PSArIG9iai5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG9iai5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2tleV0sIGtleSwgb2JqKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyBvYmplY3RcclxuICAgICAqIEBwYXJhbSAge30gIG9ialxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBpc09iamVjdDogZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHJldHVybiBvYmogPT09IE9iamVjdChvYmopO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElzIGFycmF5ID9cclxuICAgICAqIEBwYXJhbSAge30gIG9ialxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBpc0FycmF5OiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkob2JqKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyBhcnJheSBsaWtlLCB3aGljaCBoYXZlIGEgbGVuZ3RoIHByb3BlcnR5XHJcbiAgICAgKiBAcGFyYW0gIHt9ICBvYmpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgaXNBcnJheUxpa2U6IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICBpZiAoIW9iaikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqLmxlbmd0aCA9PT0gKyBvYmoubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHt9IG9ialxyXG4gICAgICogQHJldHVybiB7fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgaWYgKCF1dGlsLmlzT2JqZWN0KG9iaikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9iajtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodXRpbC5pc0FycmF5KG9iaikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9iai5zbGljZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh1dGlsLmlzQXJyYXlMaWtlKG9iaikpIHsgLy8gaXMgdHlwZWQgYXJyYXlcclxuICAgICAgICAgICAgdmFyIHJldCA9IG5ldyBvYmouY29uc3RydWN0b3Iob2JqLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICByZXRbaV0gPSBvYmpbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1dGlsLmV4dGVuZCh7fSwgb2JqKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCB1dGlsO1xyXG4iLCJpbXBvcnQgZXh0ZW5kTWl4aW4gZnJvbSAnLi9taXhpbi9leHRlbmQnO1xyXG5pbXBvcnQgbm90aWZpZXJNaXhpbiBmcm9tICcuL21peGluL25vdGlmaWVyJztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi91dGlsJztcclxuXHJcbi8qKlxyXG4gKiBCYXNlIGNsYXNzIG9mIGFsbCBvYmplY3RzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5jb3JlLkJhc2VcclxuICogQG1peGVzIGNsYXkuY29yZS5taXhpbi5ub3RpZmllclxyXG4gKi9cclxudmFyIEJhc2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuX191aWRfXyA9IHV0aWwuZ2VuR1VJRCgpO1xyXG59O1xyXG5cclxuQmFzZS5fX2luaXRpYWxpemVyc19fID0gW1xyXG4gICAgZnVuY3Rpb24gKG9wdHMpIHtcclxuICAgICAgICB1dGlsLmV4dGVuZCh0aGlzLCBvcHRzKTtcclxuICAgIH1cclxuXTtcclxuXHJcbnV0aWwuZXh0ZW5kKEJhc2UsIGV4dGVuZE1peGluKTtcclxudXRpbC5leHRlbmQoQmFzZS5wcm90b3R5cGUsIG5vdGlmaWVyTWl4aW4pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmFzZTtcclxuIiwiZnVuY3Rpb24gZ2V0KG9wdGlvbnMpIHtcclxuXHJcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcblxyXG4gICAgeGhyLm9wZW4oJ2dldCcsIG9wdGlvbnMudXJsKTtcclxuICAgIC8vIFdpdGggcmVzcG9uc2UgdHlwZSBzZXQgYnJvd3NlciBjYW4gZ2V0IGFuZCBwdXQgYmluYXJ5IGRhdGFcclxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvRE9NL1hNTEh0dHBSZXF1ZXN0L1NlbmRpbmdfYW5kX1JlY2VpdmluZ19CaW5hcnlfRGF0YVxyXG4gICAgLy8gRGVmYXVsdCBpcyB0ZXh0LCBhbmQgaXQgY2FuIGJlIHNldFxyXG4gICAgLy8gYXJyYXlidWZmZXIsIGJsb2IsIGRvY3VtZW50LCBqc29uLCB0ZXh0XHJcbiAgICB4aHIucmVzcG9uc2VUeXBlID0gb3B0aW9ucy5yZXNwb25zZVR5cGUgfHwgJ3RleHQnO1xyXG5cclxuICAgIGlmIChvcHRpb25zLm9ucHJvZ3Jlc3MpIHtcclxuICAgICAgICAvL2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvRE9NL1hNTEh0dHBSZXF1ZXN0L1VzaW5nX1hNTEh0dHBSZXF1ZXN0XHJcbiAgICAgICAgeGhyLm9ucHJvZ3Jlc3MgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmxlbmd0aENvbXB1dGFibGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwZXJjZW50ID0gZS5sb2FkZWQgLyBlLnRvdGFsO1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vbnByb2dyZXNzKHBlcmNlbnQsIGUubG9hZGVkLCBlLnRvdGFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMub25wcm9ncmVzcyhudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIGlmICh4aHIuc3RhdHVzID49IDQwMCkge1xyXG4gICAgICAgICAgICBvcHRpb25zLm9uZXJyb3IgJiYgb3B0aW9ucy5vbmVycm9yKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvcHRpb25zLm9ubG9hZCAmJiBvcHRpb25zLm9ubG9hZCh4aHIucmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBpZiAob3B0aW9ucy5vbmVycm9yKSB7XHJcbiAgICAgICAgeGhyLm9uZXJyb3IgPSBvcHRpb25zLm9uZXJyb3I7XHJcbiAgICB9XHJcbiAgICB4aHIuc2VuZChudWxsKTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgZ2V0OiBnZXRcclxufTtcclxuIiwiaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcclxuXHJcbnZhciBzdXBwb3J0V2ViR0w7XHJcblxyXG52YXIgdmVuZG9yID0ge307XHJcblxyXG4vKipcclxuICogSWYgc3VwcG9ydCBXZWJHTFxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKi9cclxudmVuZG9yLnN1cHBvcnRXZWJHTCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmIChzdXBwb3J0V2ViR0wgPT0gbnVsbCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgdmFyIGdsID0gY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJykgfHwgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcpO1xyXG4gICAgICAgICAgICBpZiAoIWdsKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBzdXBwb3J0V2ViR0wgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1cHBvcnRXZWJHTDtcclxufTtcclxuXHJcbnZlbmRvci5JbnQ4QXJyYXkgPSB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IEFycmF5IDogSW50OEFycmF5O1xyXG5cclxudmVuZG9yLlVpbnQ4QXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IFVpbnQ4QXJyYXk7XHJcblxyXG52ZW5kb3IuVWludDE2QXJyYXkgPSB0eXBlb2YgVWludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBVaW50MTZBcnJheTtcclxuXHJcbnZlbmRvci5VaW50MzJBcnJheSA9IHR5cGVvZiBVaW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IFVpbnQzMkFycmF5O1xyXG5cclxudmVuZG9yLkludDE2QXJyYXkgPSB0eXBlb2YgSW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEludDE2QXJyYXk7XHJcblxyXG52ZW5kb3IuRmxvYXQzMkFycmF5ID0gdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEZsb2F0MzJBcnJheTtcclxuXHJcbnZlbmRvci5GbG9hdDY0QXJyYXkgPSB0eXBlb2YgRmxvYXQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IEFycmF5IDogRmxvYXQ2NEFycmF5O1xyXG5cclxudmFyIGcgPSB7fTtcclxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBnID0gd2luZG93O1xyXG59XHJcbmVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBnID0gZ2xvYmFsO1xyXG59XHJcblxyXG5cclxudmVuZG9yLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGcucmVxdWVzdEFuaW1hdGlvbkZyYW1lXHJcbiAgICB8fCBnLm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lXHJcbiAgICB8fCBnLm1velJlcXVlc3RBbmltYXRpb25GcmFtZVxyXG4gICAgfHwgZy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcclxuICAgIHx8IGZ1bmN0aW9uIChmdW5jKXsgc2V0VGltZW91dChmdW5jLCAxNik7IH07XHJcblxyXG52ZW5kb3IuY3JlYXRlQ2FudmFzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG59O1xyXG5cclxudmVuZG9yLmNyZWF0ZUltYWdlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIG5ldyBnLkltYWdlKCk7XHJcbn07XHJcblxyXG52ZW5kb3IucmVxdWVzdCA9IHtcclxuICAgIGdldDogcmVxdWVzdC5nZXRcclxufTtcclxuXHJcbnZlbmRvci5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKGRvbSwgdHlwZSwgZnVuYywgdXNlQ2FwdHVyZSkge1xyXG4gICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZnVuYywgdXNlQ2FwdHVyZSk7XHJcbn07XHJcblxyXG52ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChkb20sIHR5cGUsIGZ1bmMpIHtcclxuICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmMpO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVuZG9yO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCBBbmltYXRvciBmcm9tICcuL2FuaW1hdGlvbi9BbmltYXRvcic7XHJcblxyXG5cclxuLyoqXHJcbiAqIEFuaW1hdGlvbiBpcyBnbG9iYWwgdGltZWxpbmUgdGhhdCBzY2hlZHVsZSBhbGwgY2xpcHMuIGVhY2ggZnJhbWUgYW5pbWF0aW9uIHdpbGwgc2V0IHRoZSB0aW1lIG9mIGNsaXBzIHRvIGN1cnJlbnQgYW5kIHVwZGF0ZSB0aGUgc3RhdGVzIG9mIGNsaXBzXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlRpbWVsaW5lXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIHZhciBhbmltYXRpb24gPSBuZXcgY2xheS5UaW1lbGluZSgpO1xyXG4gKiB2YXIgbm9kZSA9IG5ldyBjbGF5Lk5vZGUoKTtcclxuICogYW5pbWF0aW9uLmFuaW1hdGUobm9kZS5wb3NpdGlvbilcclxuICogICAgIC53aGVuKDEwMDAsIHtcclxuICogICAgICAgICB4OiA1MDAsXHJcbiAqICAgICAgICAgeTogNTAwXHJcbiAqICAgICB9KVxyXG4gKiAgICAgLndoZW4oMjAwMCwge1xyXG4gKiAgICAgICAgIHg6IDEwMCxcclxuICogICAgICAgICB5OiAxMDBcclxuICogICAgIH0pXHJcbiAqICAgICAud2hlbigzMDAwLCB7XHJcbiAqICAgICAgICAgejogMTBcclxuICogICAgIH0pXHJcbiAqICAgICAuc3RhcnQoJ3NwbGluZScpO1xyXG4gKi9cclxudmFyIFRpbWVsaW5lID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5UaW1lbGluZSMgKi97XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogc3RhZ2UgaXMgYW4gb2JqZWN0IHdpdGggcmVuZGVyIG1ldGhvZCwgZWFjaCBmcmFtZSBpZiB0aGVyZSBleGlzdHMgYW55IGFuaW1hdGluZyBjbGlwcywgc3RhZ2UucmVuZGVyIHdpbGwgYmUgY2FsbGVkXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzdGFnZTogbnVsbCxcclxuXHJcbiAgICAgICAgX2NsaXBzOiBbXSxcclxuXHJcbiAgICAgICAgX3J1bm5pbmc6IGZhbHNlLFxyXG5cclxuICAgICAgICBfdGltZTogMCxcclxuXHJcbiAgICAgICAgX3BhdXNlZDogZmFsc2UsXHJcblxyXG4gICAgICAgIF9wYXVzZWRUaW1lOiAwXHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuVGltZWxpbmUucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBhbmltYXRvclxyXG4gICAgICogQHBhcmFtIHtjbGF5LmFuaW1hdGUuQW5pbWF0b3J9IGFuaW1hdG9yXHJcbiAgICAgKi9cclxuICAgIGFkZEFuaW1hdG9yOiBmdW5jdGlvbiAoYW5pbWF0b3IpIHtcclxuICAgICAgICBhbmltYXRvci5hbmltYXRpb24gPSB0aGlzO1xyXG4gICAgICAgIHZhciBjbGlwcyA9IGFuaW1hdG9yLmdldENsaXBzKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGlwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFkZENsaXAoY2xpcHNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICAgICAqL1xyXG4gICAgYWRkQ2xpcDogZnVuY3Rpb24gKGNsaXApIHtcclxuICAgICAgICBpZiAodGhpcy5fY2xpcHMuaW5kZXhPZihjbGlwKSA8IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2xpcHMucHVzaChjbGlwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uQ2xpcH0gY2xpcFxyXG4gICAgICovXHJcbiAgICByZW1vdmVDbGlwOiBmdW5jdGlvbiAoY2xpcCkge1xyXG4gICAgICAgIHZhciBpZHggPSB0aGlzLl9jbGlwcy5pbmRleE9mKGNsaXApO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jbGlwcy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGFuaW1hdG9yXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuYW5pbWF0ZS5BbmltYXRvcn0gYW5pbWF0b3JcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQW5pbWF0b3I6IGZ1bmN0aW9uIChhbmltYXRvcikge1xyXG4gICAgICAgIHZhciBjbGlwcyA9IGFuaW1hdG9yLmdldENsaXBzKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGlwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNsaXAoY2xpcHNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhbmltYXRvci5hbmltYXRpb24gPSBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciB0aW1lID0gRGF0ZS5ub3coKSAtIHRoaXMuX3BhdXNlZFRpbWU7XHJcbiAgICAgICAgdmFyIGRlbHRhID0gdGltZSAtIHRoaXMuX3RpbWU7XHJcbiAgICAgICAgdmFyIGNsaXBzID0gdGhpcy5fY2xpcHM7XHJcbiAgICAgICAgdmFyIGxlbiA9IGNsaXBzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdmFyIGRlZmVycmVkRXZlbnRzID0gW107XHJcbiAgICAgICAgdmFyIGRlZmVycmVkQ2xpcHMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gY2xpcHNbaV07XHJcbiAgICAgICAgICAgIHZhciBlID0gY2xpcC5zdGVwKHRpbWUsIGRlbHRhLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIC8vIFRocm93IG91dCB0aGUgZXZlbnRzIG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyXHJcbiAgICAgICAgICAgIC8vIHN0YWdlLnJlbmRlciwgbGlrZSBmaW5pc2hcclxuICAgICAgICAgICAgaWYgKGUpIHtcclxuICAgICAgICAgICAgICAgIGRlZmVycmVkRXZlbnRzLnB1c2goZSk7XHJcbiAgICAgICAgICAgICAgICBkZWZlcnJlZENsaXBzLnB1c2goY2xpcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgZmluaXNoZWQgY2xpcFxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOykge1xyXG4gICAgICAgICAgICBpZiAoY2xpcHNbaV0uX25lZWRzUmVtb3ZlKSB7XHJcbiAgICAgICAgICAgICAgICBjbGlwc1tpXSA9IGNsaXBzW2xlbi0xXTtcclxuICAgICAgICAgICAgICAgIGNsaXBzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgbGVuLS07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxlbiA9IGRlZmVycmVkRXZlbnRzLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRlZmVycmVkQ2xpcHNbaV0uZmlyZShkZWZlcnJlZEV2ZW50c1tpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90aW1lID0gdGltZTtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdmcmFtZScsIGRlbHRhKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc3RhZ2UgJiYgdGhpcy5zdGFnZS5yZW5kZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFnZS5yZW5kZXIoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFydCBydW5uaW5nIGFuaW1hdGlvblxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5fcnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fdGltZSA9IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3BhdXNlZFRpbWUgPSAwO1xyXG5cclxuICAgICAgICB2YXIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gdmVuZG9yLnJlcXVlc3RBbmltYXRpb25GcmFtZTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcCgpIHtcclxuICAgICAgICAgICAgaWYgKHNlbGYuX3J1bm5pbmcpIHtcclxuXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFzZWxmLl9wYXVzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLl91cGRhdGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xyXG5cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFN0b3AgcnVubmluZyBhbmltYXRpb25cclxuICAgICAqL1xyXG4gICAgc3RvcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXVzZVxyXG4gICAgICovXHJcbiAgICBwYXVzZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhdXNlU3RhcnQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN1bWVcclxuICAgICAqL1xyXG4gICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wYXVzZWRUaW1lICs9IERhdGUubm93KCkgLSB0aGlzLl9wYXVzZVN0YXJ0O1xyXG4gICAgICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGFsbCBjbGlwc1xyXG4gICAgICovXHJcbiAgICByZW1vdmVDbGlwc0FsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NsaXBzID0gW107XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYW4gYW5pbWF0b3JcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtvcHRpb25zXVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW29wdGlvbnMubG9vcF1cclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb3B0aW9ucy5nZXR0ZXJdXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW29wdGlvbnMuc2V0dGVyXVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvcHRpb25zLmludGVycG9sYXRlcl1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICovXHJcbiAgICBhbmltYXRlOiBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zKSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICAgICAgdmFyIGFuaW1hdG9yID0gbmV3IEFuaW1hdG9yKFxyXG4gICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgIG9wdGlvbnMubG9vcCxcclxuICAgICAgICAgICAgb3B0aW9ucy5nZXR0ZXIsXHJcbiAgICAgICAgICAgIG9wdGlvbnMuc2V0dGVyLFxyXG4gICAgICAgICAgICBvcHRpb25zLmludGVycG9sYXRlclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYW5pbWF0b3IuYW5pbWF0aW9uID0gdGhpcztcclxuICAgICAgICByZXR1cm4gYW5pbWF0b3I7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGltZWxpbmU7XHJcbiIsIi8vIERFUFJFQ0FURURcclxuaW1wb3J0IFRpbWVsaW5lIGZyb20gJy4uL1RpbWVsaW5lJztcclxuZXhwb3J0IGRlZmF1bHQgVGltZWxpbmU7IiwiaW1wb3J0IENsaXAgZnJvbSAnLi9DbGlwJztcclxuXHJcbmltcG9ydCBxdWF0IGZyb20gJy4uL2dsbWF0cml4L3F1YXQnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcblxyXG4vKipcclxuICpcclxuICogQW5pbWF0aW9uIGNsaXAgdGhhdCBtYW5hZ2UgYSBjb2xsZWN0aW9uIG9mIHtAbGluayBjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t9XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hbmltYXRpb24uVHJhY2tDbGlwXHJcbiAqXHJcbiAqIEBleHRlbmRzIGNsYXkuYW5pbWF0aW9uLkNsaXBcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubmFtZV1cclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzLnRhcmdldF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmxpZmVdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5kZWxheV1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmdhcF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLnBsYXliYWNrUmF0aW9dXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbnxudW1iZXJ9IFtvcHRzLmxvb3BdIElmIGxvb3AgaXMgYSBudW1iZXIsIGl0IGluZGljYXRlIHRoZSBsb29wIGNvdW50IG9mIGFuaW1hdGlvblxyXG4gKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW29wdHMuZWFzaW5nXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZyYW1lXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZpbmlzaF1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25yZXN0YXJ0XVxyXG4gKiBAcGFyYW0ge0FycmF5LjxjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2s+fSBbb3B0cy50cmFja3NdXHJcbiAqL1xyXG52YXIgVHJhY2tDbGlwID0gZnVuY3Rpb24gKG9wdHMpIHtcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja1tdfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRyYWNrcyA9IG9wdHMudHJhY2tzIHx8IFtdO1xyXG5cclxuICAgIHRoaXMuY2FsY0xpZmVGcm9tVHJhY2tzKCk7XHJcbn07XHJcblxyXG5UcmFja0NsaXAucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGlwLnByb3RvdHlwZSk7XHJcblxyXG5UcmFja0NsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHJhY2tDbGlwO1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5zdGVwID0gZnVuY3Rpb24gKHRpbWUsIGRUaW1lLCBzaWxlbnQpIHtcclxuXHJcbiAgICB2YXIgcmV0ID0gQ2xpcC5wcm90b3R5cGUuc3RlcC5jYWxsKHRoaXMsIHRpbWUsIGRUaW1lLCB0cnVlKTtcclxuXHJcbiAgICBpZiAocmV0ICE9PSAnZmluaXNoJykge1xyXG4gICAgICAgIHZhciB0aW1lID0gdGhpcy5nZXRFbGFwc2VkVGltZSgpO1xyXG4gICAgICAgIC8vIFRPRE8gbGlmZSBtYXkgYmUgY2hhbmdlZC5cclxuICAgICAgICBpZiAodGhpcy5fcmFuZ2UpIHtcclxuICAgICAgICAgICAgdGltZSA9IHRoaXMuX3JhbmdlWzBdICsgdGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRUaW1lKHRpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBFTkRJTkcgU2NoZWR1bGVcclxuICAgIGlmICghc2lsZW50ICYmIHJldCAhPT0gJ3BhdXNlZCcpIHtcclxuICAgICAgICB0aGlzLmZpcmUoJ2ZyYW1lJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSByYW5nZVxyXG4gKi9cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5zZXRSYW5nZSA9IGZ1bmN0aW9uIChyYW5nZSkge1xyXG4gICAgdGhpcy5jYWxjTGlmZUZyb21UcmFja3MoKTtcclxuICAgIHRoaXMuX3JhbmdlID0gcmFuZ2U7XHJcbiAgICBpZiAocmFuZ2UpIHtcclxuICAgICAgICByYW5nZVsxXSA9IE1hdGgubWluKHJhbmdlWzFdLCB0aGlzLmxpZmUpO1xyXG4gICAgICAgIHJhbmdlWzBdID0gTWF0aC5taW4ocmFuZ2VbMF0sIHRoaXMubGlmZSk7XHJcbiAgICAgICAgdGhpcy5saWZlID0gKHJhbmdlWzFdIC0gcmFuZ2VbMF0pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLnRyYWNrc1tpXS5zZXRUaW1lKHRpbWUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5jYWxjTGlmZUZyb21UcmFja3MgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmxpZmUgPSAwO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHRoaXMubGlmZSA9IE1hdGgubWF4KHRoaXMubGlmZSwgdGhpcy50cmFja3NbaV0uZ2V0TWF4VGltZSgpKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja30gdHJhY2tcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuYWRkVHJhY2sgPSBmdW5jdGlvbiAodHJhY2spIHtcclxuICAgIHRoaXMudHJhY2tzLnB1c2godHJhY2spO1xyXG4gICAgdGhpcy5jYWxjTGlmZUZyb21UcmFja3MoKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja30gdHJhY2tcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUucmVtb3ZlVGFyY2sgPSBmdW5jdGlvbiAodHJhY2spIHtcclxuICAgIHZhciBpZHggPSB0aGlzLnRyYWNrcy5pbmRleE9mKHRyYWNrKTtcclxuICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgIHRoaXMudHJhY2tzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFRpbWVcclxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFRpbWVcclxuICogQHBhcmFtIHtib29sZWFufSBpc0xvb3BcclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfVxyXG4gKi9cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5nZXRTdWJDbGlwID0gZnVuY3Rpb24gKHN0YXJ0VGltZSwgZW5kVGltZSwgaXNMb29wKSB7XHJcbiAgICB2YXIgc3ViQ2xpcCA9IG5ldyBUcmFja0NsaXAoe1xyXG4gICAgICAgIG5hbWU6IHRoaXMubmFtZVxyXG4gICAgfSk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBzdWJUcmFjayA9IHRoaXMudHJhY2tzW2ldLmdldFN1YlRyYWNrKHN0YXJ0VGltZSwgZW5kVGltZSk7XHJcbiAgICAgICAgc3ViQ2xpcC5hZGRUcmFjayhzdWJUcmFjayk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzTG9vcCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5zZXRMb29wKGlzTG9vcCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3ViQ2xpcC5saWZlID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcclxuXHJcbiAgICByZXR1cm4gc3ViQ2xpcDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiAxZCBibGVuZGluZyBmcm9tIHR3byBza2lubmluZyBjbGlwc1xyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDJcclxuICogQHBhcmFtICB7bnVtYmVyfSB3XHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLmJsZW5kMUQgPSBmdW5jdGlvbiAoY2xpcDEsIGNsaXAyLCB3KSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGMxID0gY2xpcDEudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciBjMiA9IGNsaXAyLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgdENsaXAgPSB0aGlzLnRyYWNrc1tpXTtcclxuXHJcbiAgICAgICAgdENsaXAuYmxlbmQxRChjMSwgYzIsIHcpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZGl0aXZlIGJsZW5kaW5nIGZyb20gdHdvIHNraW5uaW5nIGNsaXBzXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDFcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMlxyXG4gKi9cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5hZGRpdGl2ZUJsZW5kID0gZnVuY3Rpb24gKGNsaXAxLCBjbGlwMikge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBjMSA9IGNsaXAxLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgYzIgPSBjbGlwMi50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIHRDbGlwID0gdGhpcy50cmFja3NbaV07XHJcblxyXG4gICAgICAgIHRDbGlwLmFkZGl0aXZlQmxlbmQoYzEsIGMyKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBTdWJ0cmFjdGl2ZSBibGVuZGluZyBmcm9tIHR3byBza2lubmluZyBjbGlwc1xyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDJcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuc3VidHJhY3RpdmVCbGVuZCA9IGZ1bmN0aW9uIChjbGlwMSwgY2xpcDIpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYzEgPSBjbGlwMS50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIGMyID0gY2xpcDIudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciB0Q2xpcCA9IHRoaXMudHJhY2tzW2ldO1xyXG5cclxuICAgICAgICB0Q2xpcC5zdWJ0cmFjdGl2ZUJsZW5kKGMxLCBjMik7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogMkQgYmxlbmRpbmcgZnJvbSB0aHJlZSBza2lubmluZyBjbGlwc1xyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDJcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwM1xyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IGZcclxuICogQHBhcmFtICB7bnVtYmVyfSBnXHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLmJsZW5kMkQgPSBmdW5jdGlvbiAoY2xpcDEsIGNsaXAyLCBjbGlwMywgZiwgZykge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBjMSA9IGNsaXAxLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgYzIgPSBjbGlwMi50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIGMzID0gY2xpcDMudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciB0Q2xpcCA9IHRoaXMudHJhY2tzW2ldO1xyXG5cclxuICAgICAgICB0Q2xpcC5ibGVuZDJEKGMxLCBjMiwgYzMsIGYsIGcpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgU1JUIG9mIGFsbCBqb2ludHMgY2xpcHMgZnJvbSBhbm90aGVyIFRyYWNrQ2xpcFxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXBcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIChjbGlwKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHNUcmFjayA9IGNsaXAudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciB0VHJhY2sgPSB0aGlzLnRyYWNrc1tpXTtcclxuXHJcbiAgICAgICAgdmVjMy5jb3B5KHRUcmFjay5wb3NpdGlvbiwgc1RyYWNrLnBvc2l0aW9uKTtcclxuICAgICAgICB2ZWMzLmNvcHkodFRyYWNrLnNjYWxlLCBzVHJhY2suc2NhbGUpO1xyXG4gICAgICAgIHF1YXQuY29weSh0VHJhY2sucm90YXRpb24sIHNUcmFjay5yb3RhdGlvbik7XHJcbiAgICB9XHJcbn07XHJcblxyXG5UcmFja0NsaXAucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGNsaXAgPSBDbGlwLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNsaXAuYWRkVHJhY2sodGhpcy50cmFja3NbaV0uY2xvbmUoKSk7XHJcbiAgICB9XHJcbiAgICBjbGlwLmxpZmUgPSB0aGlzLmxpZmU7XHJcbiAgICByZXR1cm4gY2xpcDtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRyYWNrQ2xpcDtcclxuIiwidmFyIEVYVEVOU0lPTl9MSVNUID0gW1xyXG4gICAgJ09FU190ZXh0dXJlX2Zsb2F0JyxcclxuICAgICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0JyxcclxuICAgICdPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXInLFxyXG4gICAgJ09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyJyxcclxuICAgICdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMnLFxyXG4gICAgJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0JyxcclxuICAgICdPRVNfZWxlbWVudF9pbmRleF91aW50JyxcclxuICAgICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycsXHJcbiAgICAnV0VCR0xfZGVwdGhfdGV4dHVyZScsXHJcbiAgICAnRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyxcclxuICAgICdFWFRfc2hhZGVyX3RleHR1cmVfbG9kJyxcclxuICAgICdXRUJHTF9kcmF3X2J1ZmZlcnMnLFxyXG4gICAgJ0VYVF9mcmFnX2RlcHRoJyxcclxuICAgICdFWFRfc1JHQidcclxuXTtcclxuXHJcbnZhciBQQVJBTUVURVJfTkFNRVMgPSBbXHJcbiAgICAnTUFYX1RFWFRVUkVfU0laRScsXHJcbiAgICAnTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSdcclxuXTtcclxuXHJcbmZ1bmN0aW9uIEdMSW5mbyhfZ2wpIHtcclxuICAgIHZhciBleHRlbnNpb25zID0ge307XHJcbiAgICB2YXIgcGFyYW1ldGVycyA9IHt9O1xyXG5cclxuICAgIC8vIEdldCB3ZWJnbCBleHRlbnNpb25cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgRVhURU5TSU9OX0xJU1QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgZXh0TmFtZSA9IEVYVEVOU0lPTl9MSVNUW2ldO1xyXG4gICAgICAgIGNyZWF0ZUV4dGVuc2lvbihleHROYW1lKTtcclxuICAgIH1cclxuICAgIC8vIEdldCBwYXJhbWV0ZXJzXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IFBBUkFNRVRFUl9OQU1FUy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBuYW1lID0gUEFSQU1FVEVSX05BTUVTW2ldO1xyXG4gICAgICAgIHBhcmFtZXRlcnNbbmFtZV0gPSBfZ2wuZ2V0UGFyYW1ldGVyKF9nbFtuYW1lXSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nZXRFeHRlbnNpb24gPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIGlmICghKG5hbWUgaW4gZXh0ZW5zaW9ucykpIHtcclxuICAgICAgICAgICAgY3JlYXRlRXh0ZW5zaW9uKG5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXh0ZW5zaW9uc1tuYW1lXTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5nZXRQYXJhbWV0ZXIgPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBwYXJhbWV0ZXJzW25hbWVdO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmdldE1heEpvaW50TnVtYmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAxNTtcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gY3JlYXRlRXh0ZW5zaW9uKG5hbWUpIHtcclxuICAgICAgICBpZiAoX2dsLmdldEV4dGVuc2lvbikge1xyXG4gICAgICAgICAgICB2YXIgZXh0ID0gX2dsLmdldEV4dGVuc2lvbihuYW1lKTtcclxuICAgICAgICAgICAgaWYgKCFleHQpIHtcclxuICAgICAgICAgICAgICAgIGV4dCA9IF9nbC5nZXRFeHRlbnNpb24oJ01PWl8nICsgbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFleHQpIHtcclxuICAgICAgICAgICAgICAgIGV4dCA9IF9nbC5nZXRFeHRlbnNpb24oJ1dFQktJVF8nICsgbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZXh0ZW5zaW9uc1tuYW1lXSA9IGV4dDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdMSW5mbztcclxuIiwiLyoqXHJcbiAqIEBuYW1lc3BhY2UgY2xheS5jb3JlLmdsZW51bVxyXG4gKiBAc2VlIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc3BlY3MvbGF0ZXN0LzEuMC8jNS4xNFxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgLyogQ2xlYXJCdWZmZXJNYXNrICovXHJcbiAgICBERVBUSF9CVUZGRVJfQklUICAgICAgICAgICAgICAgOiAweDAwMDAwMTAwLFxyXG4gICAgU1RFTkNJTF9CVUZGRVJfQklUICAgICAgICAgICAgIDogMHgwMDAwMDQwMCxcclxuICAgIENPTE9SX0JVRkZFUl9CSVQgICAgICAgICAgICAgICA6IDB4MDAwMDQwMDAsXHJcblxyXG4gICAgLyogQmVnaW5Nb2RlICovXHJcbiAgICBQT0lOVFMgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDAsXHJcbiAgICBMSU5FUyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDEsXHJcbiAgICBMSU5FX0xPT1AgICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDIsXHJcbiAgICBMSU5FX1NUUklQICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDMsXHJcbiAgICBUUklBTkdMRVMgICAgICAgICAgICAgICAgICAgICAgOiAweDAwMDQsXHJcbiAgICBUUklBTkdMRV9TVFJJUCAgICAgICAgICAgICAgICAgOiAweDAwMDUsXHJcbiAgICBUUklBTkdMRV9GQU4gICAgICAgICAgICAgICAgICAgOiAweDAwMDYsXHJcblxyXG4gICAgLyogQWxwaGFGdW5jdGlvbiAobm90IHN1cHBvcnRlZCBpbiBFUzIwKSAqL1xyXG4gICAgLyogICAgICBORVZFUiAqL1xyXG4gICAgLyogICAgICBMRVNTICovXHJcbiAgICAvKiAgICAgIEVRVUFMICovXHJcbiAgICAvKiAgICAgIExFUVVBTCAqL1xyXG4gICAgLyogICAgICBHUkVBVEVSICovXHJcbiAgICAvKiAgICAgIE5PVEVRVUFMICovXHJcbiAgICAvKiAgICAgIEdFUVVBTCAqL1xyXG4gICAgLyogICAgICBBTFdBWVMgKi9cclxuXHJcbiAgICAvKiBCbGVuZGluZ0ZhY3RvckRlc3QgKi9cclxuICAgIFpFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXHJcbiAgICBPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxLFxyXG4gICAgU1JDX0NPTE9SICAgICAgICAgICAgICAgICAgICAgIDogMHgwMzAwLFxyXG4gICAgT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgIDogMHgwMzAxLFxyXG4gICAgU1JDX0FMUEhBICAgICAgICAgICAgICAgICAgICAgIDogMHgwMzAyLFxyXG4gICAgT05FX01JTlVTX1NSQ19BTFBIQSAgICAgICAgICAgIDogMHgwMzAzLFxyXG4gICAgRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgIDogMHgwMzA0LFxyXG4gICAgT05FX01JTlVTX0RTVF9BTFBIQSAgICAgICAgICAgIDogMHgwMzA1LFxyXG5cclxuICAgIC8qIEJsZW5kaW5nRmFjdG9yU3JjICovXHJcbiAgICAvKiAgICAgIFpFUk8gKi9cclxuICAgIC8qICAgICAgT05FICovXHJcbiAgICBEU1RfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgOiAweDAzMDYsXHJcbiAgICBPTkVfTUlOVVNfRFNUX0NPTE9SICAgICAgICAgICAgOiAweDAzMDcsXHJcbiAgICBTUkNfQUxQSEFfU0FUVVJBVEUgICAgICAgICAgICAgOiAweDAzMDgsXHJcbiAgICAvKiAgICAgIFNSQ19BTFBIQSAqL1xyXG4gICAgLyogICAgICBPTkVfTUlOVVNfU1JDX0FMUEhBICovXHJcbiAgICAvKiAgICAgIERTVF9BTFBIQSAqL1xyXG4gICAgLyogICAgICBPTkVfTUlOVVNfRFNUX0FMUEhBICovXHJcblxyXG4gICAgLyogQmxlbmRFcXVhdGlvblNlcGFyYXRlICovXHJcbiAgICBGVU5DX0FERCAgICAgICAgICAgICAgICAgICAgICAgOiAweDgwMDYsXHJcbiAgICBCTEVORF9FUVVBVElPTiAgICAgICAgICAgICAgICAgOiAweDgwMDksXHJcbiAgICBCTEVORF9FUVVBVElPTl9SR0IgICAgICAgICAgICAgOiAweDgwMDksIC8qIHNhbWUgYXMgQkxFTkRfRVFVQVRJT04gKi9cclxuICAgIEJMRU5EX0VRVUFUSU9OX0FMUEhBICAgICAgICAgICA6IDB4ODgzRCxcclxuXHJcbiAgICAvKiBCbGVuZFN1YnRyYWN0ICovXHJcbiAgICBGVU5DX1NVQlRSQUNUICAgICAgICAgICAgICAgICAgOiAweDgwMEEsXHJcbiAgICBGVU5DX1JFVkVSU0VfU1VCVFJBQ1QgICAgICAgICAgOiAweDgwMEIsXHJcblxyXG4gICAgLyogU2VwYXJhdGUgQmxlbmQgRnVuY3Rpb25zICovXHJcbiAgICBCTEVORF9EU1RfUkdCICAgICAgICAgICAgICAgICAgOiAweDgwQzgsXHJcbiAgICBCTEVORF9TUkNfUkdCICAgICAgICAgICAgICAgICAgOiAweDgwQzksXHJcbiAgICBCTEVORF9EU1RfQUxQSEEgICAgICAgICAgICAgICAgOiAweDgwQ0EsXHJcbiAgICBCTEVORF9TUkNfQUxQSEEgICAgICAgICAgICAgICAgOiAweDgwQ0IsXHJcbiAgICBDT05TVEFOVF9DT0xPUiAgICAgICAgICAgICAgICAgOiAweDgwMDEsXHJcbiAgICBPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgICAgICAgOiAweDgwMDIsXHJcbiAgICBDT05TVEFOVF9BTFBIQSAgICAgICAgICAgICAgICAgOiAweDgwMDMsXHJcbiAgICBPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgICAgICAgOiAweDgwMDQsXHJcbiAgICBCTEVORF9DT0xPUiAgICAgICAgICAgICAgICAgICAgOiAweDgwMDUsXHJcblxyXG4gICAgLyogQnVmZmVyIE9iamVjdHMgKi9cclxuICAgIEFSUkFZX0JVRkZFUiAgICAgICAgICAgICAgICAgICA6IDB4ODg5MixcclxuICAgIEVMRU1FTlRfQVJSQVlfQlVGRkVSICAgICAgICAgICA6IDB4ODg5MyxcclxuICAgIEFSUkFZX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICA6IDB4ODg5NCxcclxuICAgIEVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICA6IDB4ODg5NSxcclxuXHJcbiAgICBTVFJFQU1fRFJBVyAgICAgICAgICAgICAgICAgICAgOiAweDg4RTAsXHJcbiAgICBTVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAgOiAweDg4RTQsXHJcbiAgICBEWU5BTUlDX0RSQVcgICAgICAgICAgICAgICAgICAgOiAweDg4RTgsXHJcblxyXG4gICAgQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgIDogMHg4NzY0LFxyXG4gICAgQlVGRkVSX1VTQUdFICAgICAgICAgICAgICAgICAgIDogMHg4NzY1LFxyXG5cclxuICAgIENVUlJFTlRfVkVSVEVYX0FUVFJJQiAgICAgICAgICA6IDB4ODYyNixcclxuXHJcbiAgICAvKiBDdWxsRmFjZU1vZGUgKi9cclxuICAgIEZST05UICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDQwNCxcclxuICAgIEJBQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDQwNSxcclxuICAgIEZST05UX0FORF9CQUNLICAgICAgICAgICAgICAgICA6IDB4MDQwOCxcclxuXHJcbiAgICAvKiBEZXB0aEZ1bmN0aW9uICovXHJcbiAgICAvKiAgICAgIE5FVkVSICovXHJcbiAgICAvKiAgICAgIExFU1MgKi9cclxuICAgIC8qICAgICAgRVFVQUwgKi9cclxuICAgIC8qICAgICAgTEVRVUFMICovXHJcbiAgICAvKiAgICAgIEdSRUFURVIgKi9cclxuICAgIC8qICAgICAgTk9URVFVQUwgKi9cclxuICAgIC8qICAgICAgR0VRVUFMICovXHJcbiAgICAvKiAgICAgIEFMV0FZUyAqL1xyXG5cclxuICAgIC8qIEVuYWJsZUNhcCAqL1xyXG4gICAgLyogVEVYVFVSRV8yRCAqL1xyXG4gICAgQ1VMTF9GQUNFICAgICAgICAgICAgICAgICAgICAgIDogMHgwQjQ0LFxyXG4gICAgQkxFTkQgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwQkUyLFxyXG4gICAgRElUSEVSICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwQkQwLFxyXG4gICAgU1RFTkNJTF9URVNUICAgICAgICAgICAgICAgICAgIDogMHgwQjkwLFxyXG4gICAgREVQVEhfVEVTVCAgICAgICAgICAgICAgICAgICAgIDogMHgwQjcxLFxyXG4gICAgU0NJU1NPUl9URVNUICAgICAgICAgICAgICAgICAgIDogMHgwQzExLFxyXG4gICAgUE9MWUdPTl9PRkZTRVRfRklMTCAgICAgICAgICAgIDogMHg4MDM3LFxyXG4gICAgU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFICAgICAgIDogMHg4MDlFLFxyXG4gICAgU0FNUExFX0NPVkVSQUdFICAgICAgICAgICAgICAgIDogMHg4MEEwLFxyXG5cclxuICAgIC8qIEVycm9yQ29kZSAqL1xyXG4gICAgTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgIDogMCxcclxuICAgIElOVkFMSURfRU5VTSAgICAgICAgICAgICAgICAgICA6IDB4MDUwMCxcclxuICAgIElOVkFMSURfVkFMVUUgICAgICAgICAgICAgICAgICA6IDB4MDUwMSxcclxuICAgIElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA6IDB4MDUwMixcclxuICAgIE9VVF9PRl9NRU1PUlkgICAgICAgICAgICAgICAgICA6IDB4MDUwNSxcclxuXHJcbiAgICAvKiBGcm9udEZhY2VEaXJlY3Rpb24gKi9cclxuICAgIENXICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDkwMCxcclxuICAgIENDVyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDkwMSxcclxuXHJcbiAgICAvKiBHZXRQTmFtZSAqL1xyXG4gICAgTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDogMHgwQjIxLFxyXG4gICAgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFICAgICAgIDogMHg4NDZELFxyXG4gICAgQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFICAgICAgIDogMHg4NDZFLFxyXG4gICAgQ1VMTF9GQUNFX01PREUgICAgICAgICAgICAgICAgIDogMHgwQjQ1LFxyXG4gICAgRlJPTlRfRkFDRSAgICAgICAgICAgICAgICAgICAgIDogMHgwQjQ2LFxyXG4gICAgREVQVEhfUkFOR0UgICAgICAgICAgICAgICAgICAgIDogMHgwQjcwLFxyXG4gICAgREVQVEhfV1JJVEVNQVNLICAgICAgICAgICAgICAgIDogMHgwQjcyLFxyXG4gICAgREVQVEhfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgIDogMHgwQjczLFxyXG4gICAgREVQVEhfRlVOQyAgICAgICAgICAgICAgICAgICAgIDogMHgwQjc0LFxyXG4gICAgU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAgICAgIDogMHgwQjkxLFxyXG4gICAgU1RFTkNJTF9GVU5DICAgICAgICAgICAgICAgICAgIDogMHgwQjkyLFxyXG4gICAgU1RFTkNJTF9GQUlMICAgICAgICAgICAgICAgICAgIDogMHgwQjk0LFxyXG4gICAgU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUwgICAgICAgIDogMHgwQjk1LFxyXG4gICAgU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MgICAgICAgIDogMHgwQjk2LFxyXG4gICAgU1RFTkNJTF9SRUYgICAgICAgICAgICAgICAgICAgIDogMHgwQjk3LFxyXG4gICAgU1RFTkNJTF9WQUxVRV9NQVNLICAgICAgICAgICAgIDogMHgwQjkzLFxyXG4gICAgU1RFTkNJTF9XUklURU1BU0sgICAgICAgICAgICAgIDogMHgwQjk4LFxyXG4gICAgU1RFTkNJTF9CQUNLX0ZVTkMgICAgICAgICAgICAgIDogMHg4ODAwLFxyXG4gICAgU1RFTkNJTF9CQUNLX0ZBSUwgICAgICAgICAgICAgIDogMHg4ODAxLFxyXG4gICAgU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCAgIDogMHg4ODAyLFxyXG4gICAgU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyAgIDogMHg4ODAzLFxyXG4gICAgU1RFTkNJTF9CQUNLX1JFRiAgICAgICAgICAgICAgIDogMHg4Q0EzLFxyXG4gICAgU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0sgICAgICAgIDogMHg4Q0E0LFxyXG4gICAgU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyAgICAgICAgIDogMHg4Q0E1LFxyXG4gICAgVklFV1BPUlQgICAgICAgICAgICAgICAgICAgICAgIDogMHgwQkEyLFxyXG4gICAgU0NJU1NPUl9CT1ggICAgICAgICAgICAgICAgICAgIDogMHgwQzEwLFxyXG4gICAgLyogICAgICBTQ0lTU09SX1RFU1QgKi9cclxuICAgIENPTE9SX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICA6IDB4MEMyMixcclxuICAgIENPTE9SX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA6IDB4MEMyMyxcclxuICAgIFVOUEFDS19BTElHTk1FTlQgICAgICAgICAgICAgICA6IDB4MENGNSxcclxuICAgIFBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgICA6IDB4MEQwNSxcclxuICAgIE1BWF9URVhUVVJFX1NJWkUgICAgICAgICAgICAgICA6IDB4MEQzMyxcclxuICAgIE1BWF9WSUVXUE9SVF9ESU1TICAgICAgICAgICAgICA6IDB4MEQzQSxcclxuICAgIFNVQlBJWEVMX0JJVFMgICAgICAgICAgICAgICAgICA6IDB4MEQ1MCxcclxuICAgIFJFRF9CSVRTICAgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1MixcclxuICAgIEdSRUVOX0JJVFMgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1MyxcclxuICAgIEJMVUVfQklUUyAgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1NCxcclxuICAgIEFMUEhBX0JJVFMgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1NSxcclxuICAgIERFUFRIX0JJVFMgICAgICAgICAgICAgICAgICAgICA6IDB4MEQ1NixcclxuICAgIFNURU5DSUxfQklUUyAgICAgICAgICAgICAgICAgICA6IDB4MEQ1NyxcclxuICAgIFBPTFlHT05fT0ZGU0VUX1VOSVRTICAgICAgICAgICA6IDB4MkEwMCxcclxuICAgIC8qICAgICAgUE9MWUdPTl9PRkZTRVRfRklMTCAqL1xyXG4gICAgUE9MWUdPTl9PRkZTRVRfRkFDVE9SICAgICAgICAgIDogMHg4MDM4LFxyXG4gICAgVEVYVFVSRV9CSU5ESU5HXzJEICAgICAgICAgICAgIDogMHg4MDY5LFxyXG4gICAgU0FNUExFX0JVRkZFUlMgICAgICAgICAgICAgICAgIDogMHg4MEE4LFxyXG4gICAgU0FNUExFUyAgICAgICAgICAgICAgICAgICAgICAgIDogMHg4MEE5LFxyXG4gICAgU0FNUExFX0NPVkVSQUdFX1ZBTFVFICAgICAgICAgIDogMHg4MEFBLFxyXG4gICAgU0FNUExFX0NPVkVSQUdFX0lOVkVSVCAgICAgICAgIDogMHg4MEFCLFxyXG5cclxuICAgIC8qIEdldFRleHR1cmVQYXJhbWV0ZXIgKi9cclxuICAgIC8qICAgICAgVEVYVFVSRV9NQUdfRklMVEVSICovXHJcbiAgICAvKiAgICAgIFRFWFRVUkVfTUlOX0ZJTFRFUiAqL1xyXG4gICAgLyogICAgICBURVhUVVJFX1dSQVBfUyAqL1xyXG4gICAgLyogICAgICBURVhUVVJFX1dSQVBfVCAqL1xyXG5cclxuICAgIENPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTICAgICA6IDB4ODZBMyxcclxuXHJcbiAgICAvKiBIaW50TW9kZSAqL1xyXG4gICAgRE9OVF9DQVJFICAgICAgICAgICAgICAgICAgICAgIDogMHgxMTAwLFxyXG4gICAgRkFTVEVTVCAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxMTAxLFxyXG4gICAgTklDRVNUICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxMTAyLFxyXG5cclxuICAgIC8qIEhpbnRUYXJnZXQgKi9cclxuICAgIEdFTkVSQVRFX01JUE1BUF9ISU5UICAgICAgICAgICAgOiAweDgxOTIsXHJcblxyXG4gICAgLyogRGF0YVR5cGUgKi9cclxuICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTQwMCxcclxuICAgIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICA6IDB4MTQwMSxcclxuICAgIFNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTQwMixcclxuICAgIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICA6IDB4MTQwMyxcclxuICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTQwNCxcclxuICAgIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICA6IDB4MTQwNSxcclxuICAgIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTQwNixcclxuXHJcbiAgICAvKiBQaXhlbEZvcm1hdCAqL1xyXG4gICAgREVQVEhfQ09NUE9ORU5UICAgICAgICAgICAgICAgIDogMHgxOTAyLFxyXG4gICAgQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxOTA2LFxyXG4gICAgUkdCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxOTA3LFxyXG4gICAgUkdCQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxOTA4LFxyXG4gICAgTFVNSU5BTkNFICAgICAgICAgICAgICAgICAgICAgIDogMHgxOTA5LFxyXG4gICAgTFVNSU5BTkNFX0FMUEhBICAgICAgICAgICAgICAgIDogMHgxOTBBLFxyXG5cclxuICAgIC8qIFBpeGVsVHlwZSAqL1xyXG4gICAgLyogICAgICBVTlNJR05FRF9CWVRFICovXHJcbiAgICBVTlNJR05FRF9TSE9SVF80XzRfNF80ICAgICAgICAgOiAweDgwMzMsXHJcbiAgICBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgOiAweDgwMzQsXHJcbiAgICBVTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAgICAgOiAweDgzNjMsXHJcblxyXG4gICAgLyogU2hhZGVycyAqL1xyXG4gICAgRlJBR01FTlRfU0hBREVSICAgICAgICAgICAgICAgICAgOiAweDhCMzAsXHJcbiAgICBWRVJURVhfU0hBREVSICAgICAgICAgICAgICAgICAgICA6IDB4OEIzMSxcclxuICAgIE1BWF9WRVJURVhfQVRUUklCUyAgICAgICAgICAgICAgIDogMHg4ODY5LFxyXG4gICAgTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgOiAweDhERkIsXHJcbiAgICBNQVhfVkFSWUlOR19WRUNUT1JTICAgICAgICAgICAgICA6IDB4OERGQyxcclxuICAgIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTIDogMHg4QjRELFxyXG4gICAgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgOiAweDhCNEMsXHJcbiAgICBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgICAgICAgICA6IDB4ODg3MixcclxuICAgIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMgICAgIDogMHg4REZELFxyXG4gICAgU0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgOiAweDhCNEYsXHJcbiAgICBERUxFVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgICA6IDB4OEI4MCxcclxuICAgIExJTktfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjgyLFxyXG4gICAgVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgOiAweDhCODMsXHJcbiAgICBBVFRBQ0hFRF9TSEFERVJTICAgICAgICAgICAgICAgICA6IDB4OEI4NSxcclxuICAgIEFDVElWRV9VTklGT1JNUyAgICAgICAgICAgICAgICAgIDogMHg4Qjg2LFxyXG4gICAgQUNUSVZFX0FUVFJJQlVURVMgICAgICAgICAgICAgICAgOiAweDhCODksXHJcbiAgICBTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04gICAgICAgICA6IDB4OEI4QyxcclxuICAgIENVUlJFTlRfUFJPR1JBTSAgICAgICAgICAgICAgICAgIDogMHg4QjhELFxyXG5cclxuICAgIC8qIFN0ZW5jaWxGdW5jdGlvbiAqL1xyXG4gICAgTkVWRVIgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjAwLFxyXG4gICAgTEVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjAxLFxyXG4gICAgRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjAyLFxyXG4gICAgTEVRVUFMICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjAzLFxyXG4gICAgR1JFQVRFUiAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjA0LFxyXG4gICAgTk9URVFVQUwgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjA1LFxyXG4gICAgR0VRVUFMICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjA2LFxyXG4gICAgQUxXQVlTICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMjA3LFxyXG5cclxuICAgIC8qIFN0ZW5jaWxPcCAqL1xyXG4gICAgLyogICAgICBaRVJPICovXHJcbiAgICBLRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDFFMDAsXHJcbiAgICBSRVBMQUNFICAgICAgICAgICAgICAgICAgICAgICAgOiAweDFFMDEsXHJcbiAgICBJTkNSICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDFFMDIsXHJcbiAgICBERUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDFFMDMsXHJcbiAgICBJTlZFUlQgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE1MEEsXHJcbiAgICBJTkNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgOiAweDg1MDcsXHJcbiAgICBERUNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgOiAweDg1MDgsXHJcblxyXG4gICAgLyogU3RyaW5nTmFtZSAqL1xyXG4gICAgVkVORE9SICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRjAwLFxyXG4gICAgUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRjAxLFxyXG4gICAgVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRjAyLFxyXG5cclxuICAgIC8qIFRleHR1cmVNYWdGaWx0ZXIgKi9cclxuICAgIE5FQVJFU1QgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MjYwMCxcclxuICAgIExJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MjYwMSxcclxuXHJcbiAgICAvKiBUZXh0dXJlTWluRmlsdGVyICovXHJcbiAgICAvKiAgICAgIE5FQVJFU1QgKi9cclxuICAgIC8qICAgICAgTElORUFSICovXHJcbiAgICBORUFSRVNUX01JUE1BUF9ORUFSRVNUICAgICAgICAgOiAweDI3MDAsXHJcbiAgICBMSU5FQVJfTUlQTUFQX05FQVJFU1QgICAgICAgICAgOiAweDI3MDEsXHJcbiAgICBORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgOiAweDI3MDIsXHJcbiAgICBMSU5FQVJfTUlQTUFQX0xJTkVBUiAgICAgICAgICAgOiAweDI3MDMsXHJcblxyXG4gICAgLyogVGV4dHVyZVBhcmFtZXRlck5hbWUgKi9cclxuICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiAgICAgICAgICAgICA6IDB4MjgwMCxcclxuICAgIFRFWFRVUkVfTUlOX0ZJTFRFUiAgICAgICAgICAgICA6IDB4MjgwMSxcclxuICAgIFRFWFRVUkVfV1JBUF9TICAgICAgICAgICAgICAgICA6IDB4MjgwMixcclxuICAgIFRFWFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICA6IDB4MjgwMyxcclxuXHJcbiAgICAvKiBUZXh0dXJlVGFyZ2V0ICovXHJcbiAgICBURVhUVVJFXzJEICAgICAgICAgICAgICAgICAgICAgOiAweDBERTEsXHJcbiAgICBURVhUVVJFICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE3MDIsXHJcblxyXG4gICAgVEVYVFVSRV9DVUJFX01BUCAgICAgICAgICAgICAgIDogMHg4NTEzLFxyXG4gICAgVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQICAgICAgIDogMHg4NTE0LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICAgIDogMHg4NTE1LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YICAgIDogMHg4NTE2LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZICAgIDogMHg4NTE3LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZICAgIDogMHg4NTE4LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aICAgIDogMHg4NTE5LFxyXG4gICAgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aICAgIDogMHg4NTFBLFxyXG4gICAgTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSAgICAgIDogMHg4NTFDLFxyXG5cclxuICAgIC8qIFRleHR1cmVVbml0ICovXHJcbiAgICBURVhUVVJFMCAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzAsXHJcbiAgICBURVhUVVJFMSAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzEsXHJcbiAgICBURVhUVVJFMiAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzIsXHJcbiAgICBURVhUVVJFMyAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzMsXHJcbiAgICBURVhUVVJFNCAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzQsXHJcbiAgICBURVhUVVJFNSAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzUsXHJcbiAgICBURVhUVVJFNiAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzYsXHJcbiAgICBURVhUVVJFNyAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzcsXHJcbiAgICBURVhUVVJFOCAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzgsXHJcbiAgICBURVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0QzksXHJcbiAgICBURVhUVVJFMTAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0EsXHJcbiAgICBURVhUVVJFMTEgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0IsXHJcbiAgICBURVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0MsXHJcbiAgICBURVhUVVJFMTMgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0QsXHJcbiAgICBURVhUVVJFMTQgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0UsXHJcbiAgICBURVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAgOiAweDg0Q0YsXHJcbiAgICBURVhUVVJFMTYgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDAsXHJcbiAgICBURVhUVVJFMTcgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDEsXHJcbiAgICBURVhUVVJFMTggICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDIsXHJcbiAgICBURVhUVVJFMTkgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDMsXHJcbiAgICBURVhUVVJFMjAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDQsXHJcbiAgICBURVhUVVJFMjEgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDUsXHJcbiAgICBURVhUVVJFMjIgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDYsXHJcbiAgICBURVhUVVJFMjMgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDcsXHJcbiAgICBURVhUVVJFMjQgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDgsXHJcbiAgICBURVhUVVJFMjUgICAgICAgICAgICAgICAgICAgICAgOiAweDg0RDksXHJcbiAgICBURVhUVVJFMjYgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REEsXHJcbiAgICBURVhUVVJFMjcgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REIsXHJcbiAgICBURVhUVVJFMjggICAgICAgICAgICAgICAgICAgICAgOiAweDg0REMsXHJcbiAgICBURVhUVVJFMjkgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REQsXHJcbiAgICBURVhUVVJFMzAgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REUsXHJcbiAgICBURVhUVVJFMzEgICAgICAgICAgICAgICAgICAgICAgOiAweDg0REYsXHJcbiAgICBBQ1RJVkVfVEVYVFVSRSAgICAgICAgICAgICAgICAgOiAweDg0RTAsXHJcblxyXG4gICAgLyogVGV4dHVyZVdyYXBNb2RlICovXHJcbiAgICBSRVBFQVQgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDI5MDEsXHJcbiAgICBDTEFNUF9UT19FREdFICAgICAgICAgICAgICAgICAgOiAweDgxMkYsXHJcbiAgICBNSVJST1JFRF9SRVBFQVQgICAgICAgICAgICAgICAgOiAweDgzNzAsXHJcblxyXG4gICAgLyogVW5pZm9ybSBUeXBlcyAqL1xyXG4gICAgRkxPQVRfVkVDMiAgICAgICAgICAgICAgICAgICAgIDogMHg4QjUwLFxyXG4gICAgRkxPQVRfVkVDMyAgICAgICAgICAgICAgICAgICAgIDogMHg4QjUxLFxyXG4gICAgRkxPQVRfVkVDNCAgICAgICAgICAgICAgICAgICAgIDogMHg4QjUyLFxyXG4gICAgSU5UX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjUzLFxyXG4gICAgSU5UX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU0LFxyXG4gICAgSU5UX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU1LFxyXG4gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU2LFxyXG4gICAgQk9PTF9WRUMyICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU3LFxyXG4gICAgQk9PTF9WRUMzICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU4LFxyXG4gICAgQk9PTF9WRUM0ICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjU5LFxyXG4gICAgRkxPQVRfTUFUMiAgICAgICAgICAgICAgICAgICAgIDogMHg4QjVBLFxyXG4gICAgRkxPQVRfTUFUMyAgICAgICAgICAgICAgICAgICAgIDogMHg4QjVCLFxyXG4gICAgRkxPQVRfTUFUNCAgICAgICAgICAgICAgICAgICAgIDogMHg4QjVDLFxyXG4gICAgU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAgIDogMHg4QjVFLFxyXG4gICAgU0FNUExFUl9DVUJFICAgICAgICAgICAgICAgICAgIDogMHg4QjYwLFxyXG5cclxuICAgIC8qIFZlcnRleCBBcnJheXMgKi9cclxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAgOiAweDg2MjIsXHJcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX1NJWkUgICAgICAgICAgIDogMHg4NjIzLFxyXG4gICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUgICAgICAgICA6IDB4ODYyNCxcclxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSAgICAgICAgICAgOiAweDg2MjUsXHJcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQgICAgIDogMHg4ODZBLFxyXG4gICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSICAgICAgICA6IDB4ODY0NSxcclxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkcgOiAweDg4OUYsXHJcblxyXG4gICAgLyogU2hhZGVyIFNvdXJjZSAqL1xyXG4gICAgQ09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgIDogMHg4QjgxLFxyXG5cclxuICAgIC8qIFNoYWRlciBQcmVjaXNpb24tU3BlY2lmaWVkIFR5cGVzICovXHJcbiAgICBMT1dfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgOiAweDhERjAsXHJcbiAgICBNRURJVU1fRkxPQVQgICAgICAgICAgICAgICAgICAgOiAweDhERjEsXHJcbiAgICBISUdIX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgOiAweDhERjIsXHJcbiAgICBMT1dfSU5UICAgICAgICAgICAgICAgICAgICAgICAgOiAweDhERjMsXHJcbiAgICBNRURJVU1fSU5UICAgICAgICAgICAgICAgICAgICAgOiAweDhERjQsXHJcbiAgICBISUdIX0lOVCAgICAgICAgICAgICAgICAgICAgICAgOiAweDhERjUsXHJcblxyXG4gICAgLyogRnJhbWVidWZmZXIgT2JqZWN0LiAqL1xyXG4gICAgRlJBTUVCVUZGRVIgICAgICAgICAgICAgICAgICAgIDogMHg4RDQwLFxyXG4gICAgUkVOREVSQlVGRkVSICAgICAgICAgICAgICAgICAgIDogMHg4RDQxLFxyXG5cclxuICAgIFJHQkE0ICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4ODA1NixcclxuICAgIFJHQjVfQTEgICAgICAgICAgICAgICAgICAgICAgICA6IDB4ODA1NyxcclxuICAgIFJHQjU2NSAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEQ2MixcclxuICAgIERFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA6IDB4ODFBNSxcclxuICAgIFNURU5DSUxfSU5ERVggICAgICAgICAgICAgICAgICA6IDB4MTkwMSxcclxuICAgIFNURU5DSUxfSU5ERVg4ICAgICAgICAgICAgICAgICA6IDB4OEQ0OCxcclxuICAgIERFUFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICA6IDB4ODRGOSxcclxuXHJcbiAgICBSRU5ERVJCVUZGRVJfV0lEVEggICAgICAgICAgICAgOiAweDhENDIsXHJcbiAgICBSRU5ERVJCVUZGRVJfSEVJR0hUICAgICAgICAgICAgOiAweDhENDMsXHJcbiAgICBSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUICAgOiAweDhENDQsXHJcbiAgICBSRU5ERVJCVUZGRVJfUkVEX1NJWkUgICAgICAgICAgOiAweDhENTAsXHJcbiAgICBSRU5ERVJCVUZGRVJfR1JFRU5fU0laRSAgICAgICAgOiAweDhENTEsXHJcbiAgICBSRU5ERVJCVUZGRVJfQkxVRV9TSVpFICAgICAgICAgOiAweDhENTIsXHJcbiAgICBSRU5ERVJCVUZGRVJfQUxQSEFfU0laRSAgICAgICAgOiAweDhENTMsXHJcbiAgICBSRU5ERVJCVUZGRVJfREVQVEhfU0laRSAgICAgICAgOiAweDhENTQsXHJcbiAgICBSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFICAgICAgOiAweDhENTUsXHJcblxyXG4gICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSAgICAgICAgICAgOiAweDhDRDAsXHJcbiAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAgICA6IDB4OENEMSxcclxuICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTCAgICAgICAgIDogMHg4Q0QyLFxyXG4gICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0UgOiAweDhDRDMsXHJcblxyXG4gICAgQ09MT1JfQVRUQUNITUVOVDAgICAgICAgICAgICAgIDogMHg4Q0UwLFxyXG4gICAgREVQVEhfQVRUQUNITUVOVCAgICAgICAgICAgICAgIDogMHg4RDAwLFxyXG4gICAgU1RFTkNJTF9BVFRBQ0hNRU5UICAgICAgICAgICAgIDogMHg4RDIwLFxyXG4gICAgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UICAgICAgIDogMHg4MjFBLFxyXG5cclxuICAgIE5PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAsXHJcblxyXG4gICAgRlJBTUVCVUZGRVJfQ09NUExFVEUgICAgICAgICAgICAgICAgICAgICAgOiAweDhDRDUsXHJcbiAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgICAgICAgICA6IDB4OENENixcclxuICAgIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UIDogMHg4Q0Q3LFxyXG4gICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TICAgICAgICAgOiAweDhDRDksXHJcbiAgICBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCAgICAgICAgICAgICAgICAgICA6IDB4OENERCxcclxuXHJcbiAgICBGUkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgOiAweDhDQTYsXHJcbiAgICBSRU5ERVJCVUZGRVJfQklORElORyAgICAgICAgICAgOiAweDhDQTcsXHJcbiAgICBNQVhfUkVOREVSQlVGRkVSX1NJWkUgICAgICAgICAgOiAweDg0RTgsXHJcblxyXG4gICAgSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gIDogMHgwNTA2LFxyXG5cclxuICAgIC8qIFdlYkdMLXNwZWNpZmljIGVudW1zICovXHJcbiAgICBVTlBBQ0tfRkxJUF9ZX1dFQkdMICAgICAgICAgICAgOiAweDkyNDAsXHJcbiAgICBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgOiAweDkyNDEsXHJcbiAgICBDT05URVhUX0xPU1RfV0VCR0wgICAgICAgICAgICAgOiAweDkyNDIsXHJcbiAgICBVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIDogMHg5MjQzLFxyXG4gICAgQlJPV1NFUl9ERUZBVUxUX1dFQkdMICAgICAgICAgIDogMHg5MjQ0LFxyXG59O1xyXG4iLCIvKipcclxuICogU2ltcGxlIGRvdWJsZSBsaW5rZWQgbGlzdC4gQ29tcGFyZWQgd2l0aCBhcnJheSwgaXQgaGFzIE8oMSkgcmVtb3ZlIG9wZXJhdGlvbi5cclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmNvcmUuTGlua2VkTGlzdFxyXG4gKi9cclxudmFyIExpbmtlZExpc3QgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuaGVhZCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMudGFpbCA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5fbGVuZ3RoID0gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnNlcnQgYSBuZXcgdmFsdWUgYXQgdGhlIHRhaWxcclxuICogQHBhcmFtICB7fSB2YWxcclxuICogQHJldHVybiB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbiAodmFsKSB7XHJcbiAgICB2YXIgZW50cnkgPSBuZXcgTGlua2VkTGlzdC5FbnRyeSh2YWwpO1xyXG4gICAgdGhpcy5pbnNlcnRFbnRyeShlbnRyeSk7XHJcbiAgICByZXR1cm4gZW50cnk7XHJcbn07XHJcblxyXG4vKipcclxuICogSW5zZXJ0IGEgbmV3IHZhbHVlIGF0IGlkeFxyXG4gKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAqIEBwYXJhbSAge30gdmFsXHJcbiAqIEByZXR1cm4ge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuaW5zZXJ0QXQgPSBmdW5jdGlvbiAoaWR4LCB2YWwpIHtcclxuICAgIGlmIChpZHggPCAwKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIG5leHQgPSB0aGlzLmhlYWQ7XHJcbiAgICB2YXIgY3Vyc29yID0gMDtcclxuICAgIHdoaWxlIChuZXh0ICYmIGN1cnNvciAhPSBpZHgpIHtcclxuICAgICAgICBuZXh0ID0gbmV4dC5uZXh0O1xyXG4gICAgICAgIGN1cnNvcisrO1xyXG4gICAgfVxyXG4gICAgaWYgKG5leHQpIHtcclxuICAgICAgICB2YXIgZW50cnkgPSBuZXcgTGlua2VkTGlzdC5FbnRyeSh2YWwpO1xyXG4gICAgICAgIHZhciBwcmV2ID0gbmV4dC5wcmV2O1xyXG4gICAgICAgIGlmICghcHJldikgeyAvL25leHQgaXMgaGVhZFxyXG4gICAgICAgICAgICB0aGlzLmhlYWQgPSBlbnRyeTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHByZXYubmV4dCA9IGVudHJ5O1xyXG4gICAgICAgICAgICBlbnRyeS5wcmV2ID0gcHJldjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZW50cnkubmV4dCA9IG5leHQ7XHJcbiAgICAgICAgbmV4dC5wcmV2ID0gZW50cnk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmluc2VydCh2YWwpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlRW50cnkgPSBmdW5jdGlvbiAodmFsLCBuZXh0KSB7XHJcbiAgICB2YXIgZW50cnkgPSBuZXcgTGlua2VkTGlzdC5FbnRyeSh2YWwpO1xyXG4gICAgdmFyIHByZXYgPSBuZXh0LnByZXY7XHJcbiAgICBpZiAoIXByZXYpIHsgLy9uZXh0IGlzIGhlYWRcclxuICAgICAgICB0aGlzLmhlYWQgPSBlbnRyeTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHByZXYubmV4dCA9IGVudHJ5O1xyXG4gICAgICAgIGVudHJ5LnByZXYgPSBwcmV2O1xyXG4gICAgfVxyXG4gICAgZW50cnkubmV4dCA9IG5leHQ7XHJcbiAgICBuZXh0LnByZXYgPSBlbnRyeTtcclxuXHJcbiAgICB0aGlzLl9sZW5ndGgrKztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnNlcnQgYW4gZW50cnkgYXQgdGhlIHRhaWxcclxuICogQHBhcmFtICB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9IGVudHJ5XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5pbnNlcnRFbnRyeSA9IGZ1bmN0aW9uIChlbnRyeSkge1xyXG4gICAgaWYgKCF0aGlzLmhlYWQpIHtcclxuICAgICAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBlbnRyeTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMudGFpbC5uZXh0ID0gZW50cnk7XHJcbiAgICAgICAgZW50cnkucHJldiA9IHRoaXMudGFpbDtcclxuICAgICAgICB0aGlzLnRhaWwgPSBlbnRyeTtcclxuICAgIH1cclxuICAgIHRoaXMuX2xlbmd0aCsrO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSBlbnRyeS5cclxuICogQHBhcmFtICB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9IGVudHJ5XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoZW50cnkpIHtcclxuICAgIHZhciBwcmV2ID0gZW50cnkucHJldjtcclxuICAgIHZhciBuZXh0ID0gZW50cnkubmV4dDtcclxuICAgIGlmIChwcmV2KSB7XHJcbiAgICAgICAgcHJldi5uZXh0ID0gbmV4dDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIElzIGhlYWRcclxuICAgICAgICB0aGlzLmhlYWQgPSBuZXh0O1xyXG4gICAgfVxyXG4gICAgaWYgKG5leHQpIHtcclxuICAgICAgICBuZXh0LnByZXYgPSBwcmV2O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy8gSXMgdGFpbFxyXG4gICAgICAgIHRoaXMudGFpbCA9IHByZXY7XHJcbiAgICB9XHJcbiAgICBlbnRyeS5uZXh0ID0gZW50cnkucHJldiA9IG51bGw7XHJcbiAgICB0aGlzLl9sZW5ndGgtLTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZW1vdmUgZW50cnkgYXQgaW5kZXguXHJcbiAqIEBwYXJhbSAge251bWJlcn0gaWR4XHJcbiAqIEByZXR1cm4ge31cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLnJlbW92ZUF0ID0gZnVuY3Rpb24gKGlkeCkge1xyXG4gICAgaWYgKGlkeCA8IDApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgY3VyciA9IHRoaXMuaGVhZDtcclxuICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgd2hpbGUgKGN1cnIgJiYgY3Vyc29yICE9IGlkeCkge1xyXG4gICAgICAgIGN1cnIgPSBjdXJyLm5leHQ7XHJcbiAgICAgICAgY3Vyc29yKys7XHJcbiAgICB9XHJcbiAgICBpZiAoY3Vycikge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlKGN1cnIpO1xyXG4gICAgICAgIHJldHVybiBjdXJyLnZhbHVlO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogR2V0IGhlYWQgdmFsdWVcclxuICogQHJldHVybiB7fVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuZ2V0SGVhZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLmhlYWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oZWFkLnZhbHVlO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogR2V0IHRhaWwgdmFsdWVcclxuICogQHJldHVybiB7fVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuZ2V0VGFpbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLnRhaWwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50YWlsLnZhbHVlO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogR2V0IHZhbHVlIGF0IGlkeFxyXG4gKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAqIEByZXR1cm4ge31cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmdldEF0ID0gZnVuY3Rpb24gKGlkeCkge1xyXG4gICAgaWYgKGlkeCA8IDApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgY3VyciA9IHRoaXMuaGVhZDtcclxuICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgd2hpbGUgKGN1cnIgJiYgY3Vyc29yICE9IGlkeCkge1xyXG4gICAgICAgIGN1cnIgPSBjdXJyLm5leHQ7XHJcbiAgICAgICAgY3Vyc29yKys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3Vyci52YWx1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHt9IHZhbHVlXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHZhciBjdXJyID0gdGhpcy5oZWFkO1xyXG4gICAgdmFyIGN1cnNvciA9IDA7XHJcbiAgICB3aGlsZSAoY3Vycikge1xyXG4gICAgICAgIGlmIChjdXJyLnZhbHVlID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY3Vyc29yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyID0gY3Vyci5uZXh0O1xyXG4gICAgICAgIGN1cnNvcisrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLl9sZW5ndGg7XHJcbn07XHJcblxyXG4vKipcclxuICogSWYgbGlzdCBpcyBlbXB0eVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLl9sZW5ndGggPT09IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7RnVuY3Rpb259IGNiXHJcbiAqIEBwYXJhbSAge30gY29udGV4dFxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYiwgY29udGV4dCkge1xyXG4gICAgdmFyIGN1cnIgPSB0aGlzLmhlYWQ7XHJcbiAgICB2YXIgaWR4ID0gMDtcclxuICAgIHZhciBoYXZlQ29udGV4dCA9IHR5cGVvZihjb250ZXh0KSAhPSAndW5kZWZpbmVkJztcclxuICAgIHdoaWxlIChjdXJyKSB7XHJcbiAgICAgICAgaWYgKGhhdmVDb250ZXh0KSB7XHJcbiAgICAgICAgICAgIGNiLmNhbGwoY29udGV4dCwgY3Vyci52YWx1ZSwgaWR4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNiKGN1cnIudmFsdWUsIGlkeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cnIgPSBjdXJyLm5leHQ7XHJcbiAgICAgICAgaWR4Kys7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xlYXIgdGhlIGxpc3RcclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy50YWlsID0gdGhpcy5oZWFkID0gbnVsbDtcclxuICAgIHRoaXMuX2xlbmd0aCA9IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBwYXJhbSB7fSB2YWxcclxuICovXHJcbkxpbmtlZExpc3QuRW50cnkgPSBmdW5jdGlvbiAodmFsKSB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt9XHJcbiAgICAgKi9cclxuICAgIHRoaXMudmFsdWUgPSB2YWw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubmV4dCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5jb3JlLkxpbmtlZExpc3QuRW50cnl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucHJldiA9IG51bGw7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaW5rZWRMaXN0O1xyXG4iLCJpbXBvcnQgTGlua2VkTGlzdCBmcm9tICcuL0xpbmtlZExpc3QnO1xyXG5cclxuLyoqXHJcbiAqIExSVSBDYWNoZVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuY29yZS5MUlVcclxuICovXHJcbnZhciBMUlUgPSBmdW5jdGlvbiAobWF4U2l6ZSkge1xyXG5cclxuICAgIHRoaXMuX2xpc3QgPSBuZXcgTGlua2VkTGlzdCgpO1xyXG5cclxuICAgIHRoaXMuX21hcCA9IHt9O1xyXG5cclxuICAgIHRoaXMuX21heFNpemUgPSBtYXhTaXplIHx8IDEwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBjYWNoZSBtYXggc2l6ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gc2l6ZVxyXG4gKi9cclxuTFJVLnByb3RvdHlwZS5zZXRNYXhTaXplID0gZnVuY3Rpb24gKHNpemUpIHtcclxuICAgIHRoaXMuX21heFNpemUgPSBzaXplO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge3N0cmluZ30ga2V5XHJcbiAqIEBwYXJhbSAge30gdmFsdWVcclxuICovXHJcbkxSVS5wcm90b3R5cGUucHV0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgIGlmICghdGhpcy5fbWFwLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICB2YXIgbGVuID0gdGhpcy5fbGlzdC5sZW5ndGgoKTtcclxuICAgICAgICBpZiAobGVuID49IHRoaXMuX21heFNpemUgJiYgbGVuID4gMCkge1xyXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWRcclxuICAgICAgICAgICAgdmFyIGxlYXN0VXNlZEVudHJ5ID0gdGhpcy5fbGlzdC5oZWFkO1xyXG4gICAgICAgICAgICB0aGlzLl9saXN0LnJlbW92ZShsZWFzdFVzZWRFbnRyeSk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9tYXBbbGVhc3RVc2VkRW50cnkua2V5XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuX2xpc3QuaW5zZXJ0KHZhbHVlKTtcclxuICAgICAgICBlbnRyeS5rZXkgPSBrZXk7XHJcbiAgICAgICAgdGhpcy5fbWFwW2tleV0gPSBlbnRyeTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGtleVxyXG4gKiBAcmV0dXJuIHt9XHJcbiAqL1xyXG5MUlUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgIHZhciBlbnRyeSA9IHRoaXMuX21hcFtrZXldO1xyXG4gICAgaWYgKHRoaXMuX21hcC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgLy8gUHV0IHRoZSBsYXRlc3QgdXNlZCBlbnRyeSBpbiB0aGUgdGFpbFxyXG4gICAgICAgIGlmIChlbnRyeSAhPT0gdGhpcy5fbGlzdC50YWlsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpc3QucmVtb3ZlKGVudHJ5KTtcclxuICAgICAgICAgICAgdGhpcy5fbGlzdC5pbnNlcnRFbnRyeShlbnRyeSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxyXG4gKi9cclxuTFJVLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICB2YXIgZW50cnkgPSB0aGlzLl9tYXBba2V5XTtcclxuICAgIGlmICh0eXBlb2YoZW50cnkpICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9tYXBba2V5XTtcclxuICAgICAgICB0aGlzLl9saXN0LnJlbW92ZShlbnRyeSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xlYXIgdGhlIGNhY2hlXHJcbiAqL1xyXG5MUlUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fbGlzdC5jbGVhcigpO1xyXG4gICAgdGhpcy5fbWFwID0ge307XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMUlU7XHJcbiIsIi8qKlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkuY29yZS5jb2xvclxyXG4gKi9cclxuaW1wb3J0IExSVSBmcm9tICcuLi9jb3JlL0xSVSc7XHJcblxyXG52YXIgY29sb3JVdGlsID0ge307XHJcblxyXG52YXIga0NTU0NvbG9yVGFibGUgPSB7XHJcbiAgICAndHJhbnNwYXJlbnQnOiBbMCwwLDAsMF0sICdhbGljZWJsdWUnOiBbMjQwLDI0OCwyNTUsMV0sXHJcbiAgICAnYW50aXF1ZXdoaXRlJzogWzI1MCwyMzUsMjE1LDFdLCAnYXF1YSc6IFswLDI1NSwyNTUsMV0sXHJcbiAgICAnYXF1YW1hcmluZSc6IFsxMjcsMjU1LDIxMiwxXSwgJ2F6dXJlJzogWzI0MCwyNTUsMjU1LDFdLFxyXG4gICAgJ2JlaWdlJzogWzI0NSwyNDUsMjIwLDFdLCAnYmlzcXVlJzogWzI1NSwyMjgsMTk2LDFdLFxyXG4gICAgJ2JsYWNrJzogWzAsMCwwLDFdLCAnYmxhbmNoZWRhbG1vbmQnOiBbMjU1LDIzNSwyMDUsMV0sXHJcbiAgICAnYmx1ZSc6IFswLDAsMjU1LDFdLCAnYmx1ZXZpb2xldCc6IFsxMzgsNDMsMjI2LDFdLFxyXG4gICAgJ2Jyb3duJzogWzE2NSw0Miw0MiwxXSwgJ2J1cmx5d29vZCc6IFsyMjIsMTg0LDEzNSwxXSxcclxuICAgICdjYWRldGJsdWUnOiBbOTUsMTU4LDE2MCwxXSwgJ2NoYXJ0cmV1c2UnOiBbMTI3LDI1NSwwLDFdLFxyXG4gICAgJ2Nob2NvbGF0ZSc6IFsyMTAsMTA1LDMwLDFdLCAnY29yYWwnOiBbMjU1LDEyNyw4MCwxXSxcclxuICAgICdjb3JuZmxvd2VyYmx1ZSc6IFsxMDAsMTQ5LDIzNywxXSwgJ2Nvcm5zaWxrJzogWzI1NSwyNDgsMjIwLDFdLFxyXG4gICAgJ2NyaW1zb24nOiBbMjIwLDIwLDYwLDFdLCAnY3lhbic6IFswLDI1NSwyNTUsMV0sXHJcbiAgICAnZGFya2JsdWUnOiBbMCwwLDEzOSwxXSwgJ2RhcmtjeWFuJzogWzAsMTM5LDEzOSwxXSxcclxuICAgICdkYXJrZ29sZGVucm9kJzogWzE4NCwxMzQsMTEsMV0sICdkYXJrZ3JheSc6IFsxNjksMTY5LDE2OSwxXSxcclxuICAgICdkYXJrZ3JlZW4nOiBbMCwxMDAsMCwxXSwgJ2RhcmtncmV5JzogWzE2OSwxNjksMTY5LDFdLFxyXG4gICAgJ2RhcmtraGFraSc6IFsxODksMTgzLDEwNywxXSwgJ2RhcmttYWdlbnRhJzogWzEzOSwwLDEzOSwxXSxcclxuICAgICdkYXJrb2xpdmVncmVlbic6IFs4NSwxMDcsNDcsMV0sICdkYXJrb3JhbmdlJzogWzI1NSwxNDAsMCwxXSxcclxuICAgICdkYXJrb3JjaGlkJzogWzE1Myw1MCwyMDQsMV0sICdkYXJrcmVkJzogWzEzOSwwLDAsMV0sXHJcbiAgICAnZGFya3NhbG1vbic6IFsyMzMsMTUwLDEyMiwxXSwgJ2RhcmtzZWFncmVlbic6IFsxNDMsMTg4LDE0MywxXSxcclxuICAgICdkYXJrc2xhdGVibHVlJzogWzcyLDYxLDEzOSwxXSwgJ2RhcmtzbGF0ZWdyYXknOiBbNDcsNzksNzksMV0sXHJcbiAgICAnZGFya3NsYXRlZ3JleSc6IFs0Nyw3OSw3OSwxXSwgJ2Rhcmt0dXJxdW9pc2UnOiBbMCwyMDYsMjA5LDFdLFxyXG4gICAgJ2Rhcmt2aW9sZXQnOiBbMTQ4LDAsMjExLDFdLCAnZGVlcHBpbmsnOiBbMjU1LDIwLDE0NywxXSxcclxuICAgICdkZWVwc2t5Ymx1ZSc6IFswLDE5MSwyNTUsMV0sICdkaW1ncmF5JzogWzEwNSwxMDUsMTA1LDFdLFxyXG4gICAgJ2RpbWdyZXknOiBbMTA1LDEwNSwxMDUsMV0sICdkb2RnZXJibHVlJzogWzMwLDE0NCwyNTUsMV0sXHJcbiAgICAnZmlyZWJyaWNrJzogWzE3OCwzNCwzNCwxXSwgJ2Zsb3JhbHdoaXRlJzogWzI1NSwyNTAsMjQwLDFdLFxyXG4gICAgJ2ZvcmVzdGdyZWVuJzogWzM0LDEzOSwzNCwxXSwgJ2Z1Y2hzaWEnOiBbMjU1LDAsMjU1LDFdLFxyXG4gICAgJ2dhaW5zYm9ybyc6IFsyMjAsMjIwLDIyMCwxXSwgJ2dob3N0d2hpdGUnOiBbMjQ4LDI0OCwyNTUsMV0sXHJcbiAgICAnZ29sZCc6IFsyNTUsMjE1LDAsMV0sICdnb2xkZW5yb2QnOiBbMjE4LDE2NSwzMiwxXSxcclxuICAgICdncmF5JzogWzEyOCwxMjgsMTI4LDFdLCAnZ3JlZW4nOiBbMCwxMjgsMCwxXSxcclxuICAgICdncmVlbnllbGxvdyc6IFsxNzMsMjU1LDQ3LDFdLCAnZ3JleSc6IFsxMjgsMTI4LDEyOCwxXSxcclxuICAgICdob25leWRldyc6IFsyNDAsMjU1LDI0MCwxXSwgJ2hvdHBpbmsnOiBbMjU1LDEwNSwxODAsMV0sXHJcbiAgICAnaW5kaWFucmVkJzogWzIwNSw5Miw5MiwxXSwgJ2luZGlnbyc6IFs3NSwwLDEzMCwxXSxcclxuICAgICdpdm9yeSc6IFsyNTUsMjU1LDI0MCwxXSwgJ2toYWtpJzogWzI0MCwyMzAsMTQwLDFdLFxyXG4gICAgJ2xhdmVuZGVyJzogWzIzMCwyMzAsMjUwLDFdLCAnbGF2ZW5kZXJibHVzaCc6IFsyNTUsMjQwLDI0NSwxXSxcclxuICAgICdsYXduZ3JlZW4nOiBbMTI0LDI1MiwwLDFdLCAnbGVtb25jaGlmZm9uJzogWzI1NSwyNTAsMjA1LDFdLFxyXG4gICAgJ2xpZ2h0Ymx1ZSc6IFsxNzMsMjE2LDIzMCwxXSwgJ2xpZ2h0Y29yYWwnOiBbMjQwLDEyOCwxMjgsMV0sXHJcbiAgICAnbGlnaHRjeWFuJzogWzIyNCwyNTUsMjU1LDFdLCAnbGlnaHRnb2xkZW5yb2R5ZWxsb3cnOiBbMjUwLDI1MCwyMTAsMV0sXHJcbiAgICAnbGlnaHRncmF5JzogWzIxMSwyMTEsMjExLDFdLCAnbGlnaHRncmVlbic6IFsxNDQsMjM4LDE0NCwxXSxcclxuICAgICdsaWdodGdyZXknOiBbMjExLDIxMSwyMTEsMV0sICdsaWdodHBpbmsnOiBbMjU1LDE4MiwxOTMsMV0sXHJcbiAgICAnbGlnaHRzYWxtb24nOiBbMjU1LDE2MCwxMjIsMV0sICdsaWdodHNlYWdyZWVuJzogWzMyLDE3OCwxNzAsMV0sXHJcbiAgICAnbGlnaHRza3libHVlJzogWzEzNSwyMDYsMjUwLDFdLCAnbGlnaHRzbGF0ZWdyYXknOiBbMTE5LDEzNiwxNTMsMV0sXHJcbiAgICAnbGlnaHRzbGF0ZWdyZXknOiBbMTE5LDEzNiwxNTMsMV0sICdsaWdodHN0ZWVsYmx1ZSc6IFsxNzYsMTk2LDIyMiwxXSxcclxuICAgICdsaWdodHllbGxvdyc6IFsyNTUsMjU1LDIyNCwxXSwgJ2xpbWUnOiBbMCwyNTUsMCwxXSxcclxuICAgICdsaW1lZ3JlZW4nOiBbNTAsMjA1LDUwLDFdLCAnbGluZW4nOiBbMjUwLDI0MCwyMzAsMV0sXHJcbiAgICAnbWFnZW50YSc6IFsyNTUsMCwyNTUsMV0sICdtYXJvb24nOiBbMTI4LDAsMCwxXSxcclxuICAgICdtZWRpdW1hcXVhbWFyaW5lJzogWzEwMiwyMDUsMTcwLDFdLCAnbWVkaXVtYmx1ZSc6IFswLDAsMjA1LDFdLFxyXG4gICAgJ21lZGl1bW9yY2hpZCc6IFsxODYsODUsMjExLDFdLCAnbWVkaXVtcHVycGxlJzogWzE0NywxMTIsMjE5LDFdLFxyXG4gICAgJ21lZGl1bXNlYWdyZWVuJzogWzYwLDE3OSwxMTMsMV0sICdtZWRpdW1zbGF0ZWJsdWUnOiBbMTIzLDEwNCwyMzgsMV0sXHJcbiAgICAnbWVkaXVtc3ByaW5nZ3JlZW4nOiBbMCwyNTAsMTU0LDFdLCAnbWVkaXVtdHVycXVvaXNlJzogWzcyLDIwOSwyMDQsMV0sXHJcbiAgICAnbWVkaXVtdmlvbGV0cmVkJzogWzE5OSwyMSwxMzMsMV0sICdtaWRuaWdodGJsdWUnOiBbMjUsMjUsMTEyLDFdLFxyXG4gICAgJ21pbnRjcmVhbSc6IFsyNDUsMjU1LDI1MCwxXSwgJ21pc3R5cm9zZSc6IFsyNTUsMjI4LDIyNSwxXSxcclxuICAgICdtb2NjYXNpbic6IFsyNTUsMjI4LDE4MSwxXSwgJ25hdmFqb3doaXRlJzogWzI1NSwyMjIsMTczLDFdLFxyXG4gICAgJ25hdnknOiBbMCwwLDEyOCwxXSwgJ29sZGxhY2UnOiBbMjUzLDI0NSwyMzAsMV0sXHJcbiAgICAnb2xpdmUnOiBbMTI4LDEyOCwwLDFdLCAnb2xpdmVkcmFiJzogWzEwNywxNDIsMzUsMV0sXHJcbiAgICAnb3JhbmdlJzogWzI1NSwxNjUsMCwxXSwgJ29yYW5nZXJlZCc6IFsyNTUsNjksMCwxXSxcclxuICAgICdvcmNoaWQnOiBbMjE4LDExMiwyMTQsMV0sICdwYWxlZ29sZGVucm9kJzogWzIzOCwyMzIsMTcwLDFdLFxyXG4gICAgJ3BhbGVncmVlbic6IFsxNTIsMjUxLDE1MiwxXSwgJ3BhbGV0dXJxdW9pc2UnOiBbMTc1LDIzOCwyMzgsMV0sXHJcbiAgICAncGFsZXZpb2xldHJlZCc6IFsyMTksMTEyLDE0NywxXSwgJ3BhcGF5YXdoaXAnOiBbMjU1LDIzOSwyMTMsMV0sXHJcbiAgICAncGVhY2hwdWZmJzogWzI1NSwyMTgsMTg1LDFdLCAncGVydSc6IFsyMDUsMTMzLDYzLDFdLFxyXG4gICAgJ3BpbmsnOiBbMjU1LDE5MiwyMDMsMV0sICdwbHVtJzogWzIyMSwxNjAsMjIxLDFdLFxyXG4gICAgJ3Bvd2RlcmJsdWUnOiBbMTc2LDIyNCwyMzAsMV0sICdwdXJwbGUnOiBbMTI4LDAsMTI4LDFdLFxyXG4gICAgJ3JlZCc6IFsyNTUsMCwwLDFdLCAncm9zeWJyb3duJzogWzE4OCwxNDMsMTQzLDFdLFxyXG4gICAgJ3JveWFsYmx1ZSc6IFs2NSwxMDUsMjI1LDFdLCAnc2FkZGxlYnJvd24nOiBbMTM5LDY5LDE5LDFdLFxyXG4gICAgJ3NhbG1vbic6IFsyNTAsMTI4LDExNCwxXSwgJ3NhbmR5YnJvd24nOiBbMjQ0LDE2NCw5NiwxXSxcclxuICAgICdzZWFncmVlbic6IFs0NiwxMzksODcsMV0sICdzZWFzaGVsbCc6IFsyNTUsMjQ1LDIzOCwxXSxcclxuICAgICdzaWVubmEnOiBbMTYwLDgyLDQ1LDFdLCAnc2lsdmVyJzogWzE5MiwxOTIsMTkyLDFdLFxyXG4gICAgJ3NreWJsdWUnOiBbMTM1LDIwNiwyMzUsMV0sICdzbGF0ZWJsdWUnOiBbMTA2LDkwLDIwNSwxXSxcclxuICAgICdzbGF0ZWdyYXknOiBbMTEyLDEyOCwxNDQsMV0sICdzbGF0ZWdyZXknOiBbMTEyLDEyOCwxNDQsMV0sXHJcbiAgICAnc25vdyc6IFsyNTUsMjUwLDI1MCwxXSwgJ3NwcmluZ2dyZWVuJzogWzAsMjU1LDEyNywxXSxcclxuICAgICdzdGVlbGJsdWUnOiBbNzAsMTMwLDE4MCwxXSwgJ3Rhbic6IFsyMTAsMTgwLDE0MCwxXSxcclxuICAgICd0ZWFsJzogWzAsMTI4LDEyOCwxXSwgJ3RoaXN0bGUnOiBbMjE2LDE5MSwyMTYsMV0sXHJcbiAgICAndG9tYXRvJzogWzI1NSw5OSw3MSwxXSwgJ3R1cnF1b2lzZSc6IFs2NCwyMjQsMjA4LDFdLFxyXG4gICAgJ3Zpb2xldCc6IFsyMzgsMTMwLDIzOCwxXSwgJ3doZWF0JzogWzI0NSwyMjIsMTc5LDFdLFxyXG4gICAgJ3doaXRlJzogWzI1NSwyNTUsMjU1LDFdLCAnd2hpdGVzbW9rZSc6IFsyNDUsMjQ1LDI0NSwxXSxcclxuICAgICd5ZWxsb3cnOiBbMjU1LDI1NSwwLDFdLCAneWVsbG93Z3JlZW4nOiBbMTU0LDIwNSw1MCwxXVxyXG59O1xyXG5cclxuZnVuY3Rpb24gY2xhbXBDc3NCeXRlKGkpIHsgIC8vIENsYW1wIHRvIGludGVnZXIgMCAuLiAyNTUuXHJcbiAgICBpID0gTWF0aC5yb3VuZChpKTsgIC8vIFNlZW1zIHRvIGJlIHdoYXQgQ2hyb21lIGRvZXMgKHZzIHRydW5jYXRpb24pLlxyXG4gICAgcmV0dXJuIGkgPCAwID8gMCA6IGkgPiAyNTUgPyAyNTUgOiBpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbGFtcENzc0FuZ2xlKGkpIHsgIC8vIENsYW1wIHRvIGludGVnZXIgMCAuLiAzNjAuXHJcbiAgICBpID0gTWF0aC5yb3VuZChpKTsgIC8vIFNlZW1zIHRvIGJlIHdoYXQgQ2hyb21lIGRvZXMgKHZzIHRydW5jYXRpb24pLlxyXG4gICAgcmV0dXJuIGkgPCAwID8gMCA6IGkgPiAzNjAgPyAzNjAgOiBpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbGFtcENzc0Zsb2F0KGYpIHsgIC8vIENsYW1wIHRvIGZsb2F0IDAuMCAuLiAxLjAuXHJcbiAgICByZXR1cm4gZiA8IDAgPyAwIDogZiA+IDEgPyAxIDogZjtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VDc3NJbnQoc3RyKSB7ICAvLyBpbnQgb3IgcGVyY2VudGFnZS5cclxuICAgIGlmIChzdHIubGVuZ3RoICYmIHN0ci5jaGFyQXQoc3RyLmxlbmd0aCAtIDEpID09PSAnJScpIHtcclxuICAgICAgICByZXR1cm4gY2xhbXBDc3NCeXRlKHBhcnNlRmxvYXQoc3RyKSAvIDEwMCAqIDI1NSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xhbXBDc3NCeXRlKHBhcnNlSW50KHN0ciwgMTApKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VDc3NGbG9hdChzdHIpIHsgIC8vIGZsb2F0IG9yIHBlcmNlbnRhZ2UuXHJcbiAgICBpZiAoc3RyLmxlbmd0aCAmJiBzdHIuY2hhckF0KHN0ci5sZW5ndGggLSAxKSA9PT0gJyUnKSB7XHJcbiAgICAgICAgcmV0dXJuIGNsYW1wQ3NzRmxvYXQocGFyc2VGbG9hdChzdHIpIC8gMTAwKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjbGFtcENzc0Zsb2F0KHBhcnNlRmxvYXQoc3RyKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNzc0h1ZVRvUmdiKG0xLCBtMiwgaCkge1xyXG4gICAgaWYgKGggPCAwKSB7XHJcbiAgICAgICAgaCArPSAxO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaCA+IDEpIHtcclxuICAgICAgICBoIC09IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGggKiA2IDwgMSkge1xyXG4gICAgICAgIHJldHVybiBtMSArIChtMiAtIG0xKSAqIGggKiA2O1xyXG4gICAgfVxyXG4gICAgaWYgKGggKiAyIDwgMSkge1xyXG4gICAgICAgIHJldHVybiBtMjtcclxuICAgIH1cclxuICAgIGlmIChoICogMyA8IDIpIHtcclxuICAgICAgICByZXR1cm4gbTEgKyAobTIgLSBtMSkgKiAoMi8zIC0gaCkgKiA2O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG0xO1xyXG59XHJcblxyXG5mdW5jdGlvbiBsZXJwTnVtYmVyKGEsIGIsIHApIHtcclxuICAgIHJldHVybiBhICsgKGIgLSBhKSAqIHA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldFJnYmEob3V0LCByLCBnLCBiLCBhKSB7XHJcbiAgICBvdXRbMF0gPSByOyBvdXRbMV0gPSBnOyBvdXRbMl0gPSBiOyBvdXRbM10gPSBhO1xyXG4gICAgcmV0dXJuIG91dDtcclxufVxyXG5mdW5jdGlvbiBjb3B5UmdiYShvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IGFbMF07IG91dFsxXSA9IGFbMV07IG91dFsyXSA9IGFbMl07IG91dFszXSA9IGFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59XHJcblxyXG52YXIgY29sb3JDYWNoZSA9IG5ldyBMUlUoMjApO1xyXG52YXIgbGFzdFJlbW92ZWRBcnIgPSBudWxsO1xyXG5cclxuZnVuY3Rpb24gcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycikge1xyXG4gICAgLy8gUmV1c2UgcmVtb3ZlZCBhcnJheVxyXG4gICAgaWYgKGxhc3RSZW1vdmVkQXJyKSB7XHJcbiAgICAgICAgY29weVJnYmEobGFzdFJlbW92ZWRBcnIsIHJnYmFBcnIpO1xyXG4gICAgfVxyXG4gICAgbGFzdFJlbW92ZWRBcnIgPSBjb2xvckNhY2hlLnB1dChjb2xvclN0ciwgbGFzdFJlbW92ZWRBcnIgfHwgKHJnYmFBcnIuc2xpY2UoKSkpO1xyXG59XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5jb3JlLmNvbG9yLnBhcnNlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclN0clxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBvdXRcclxuICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59XHJcbiAqL1xyXG5jb2xvclV0aWwucGFyc2UgPSBmdW5jdGlvbiAoY29sb3JTdHIsIHJnYmFBcnIpIHtcclxuICAgIGlmICghY29sb3JTdHIpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZ2JhQXJyID0gcmdiYUFyciB8fCBbXTtcclxuXHJcbiAgICB2YXIgY2FjaGVkID0gY29sb3JDYWNoZS5nZXQoY29sb3JTdHIpO1xyXG4gICAgaWYgKGNhY2hlZCkge1xyXG4gICAgICAgIHJldHVybiBjb3B5UmdiYShyZ2JhQXJyLCBjYWNoZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbG9yU3RyIG1heSBiZSBub3Qgc3RyaW5nXHJcbiAgICBjb2xvclN0ciA9IGNvbG9yU3RyICsgJyc7XHJcbiAgICAvLyBSZW1vdmUgYWxsIHdoaXRlc3BhY2UsIG5vdCBjb21wbGlhbnQsIGJ1dCBzaG91bGQganVzdCBiZSBtb3JlIGFjY2VwdGluZy5cclxuICAgIHZhciBzdHIgPSBjb2xvclN0ci5yZXBsYWNlKC8gL2csICcnKS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIC8vIENvbG9yIGtleXdvcmRzIChhbmQgdHJhbnNwYXJlbnQpIGxvb2t1cC5cclxuICAgIGlmIChzdHIgaW4ga0NTU0NvbG9yVGFibGUpIHtcclxuICAgICAgICBjb3B5UmdiYShyZ2JhQXJyLCBrQ1NTQ29sb3JUYWJsZVtzdHJdKTtcclxuICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcclxuICAgICAgICByZXR1cm4gcmdiYUFycjtcclxuICAgIH1cclxuXHJcbiAgICAvLyAjYWJjIGFuZCAjYWJjMTIzIHN5bnRheC5cclxuICAgIGlmIChzdHIuY2hhckF0KDApID09PSAnIycpIHtcclxuICAgICAgICBpZiAoc3RyLmxlbmd0aCA9PT0gNCkge1xyXG4gICAgICAgICAgICB2YXIgaXYgPSBwYXJzZUludChzdHIuc3Vic3RyKDEpLCAxNik7ICAvLyBUT0RPKGRlYW5tKTogU3RyaWN0ZXIgcGFyc2luZy5cclxuICAgICAgICAgICAgaWYgKCEoaXYgPj0gMCAmJiBpdiA8PSAweGZmZikpIHtcclxuICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47ICAvLyBDb3ZlcnMgTmFOLlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldFJnYmEocmdiYUFycixcclxuICAgICAgICAgICAgICAgICgoaXYgJiAweGYwMCkgPj4gNCkgfCAoKGl2ICYgMHhmMDApID4+IDgpLFxyXG4gICAgICAgICAgICAgICAgKGl2ICYgMHhmMCkgfCAoKGl2ICYgMHhmMCkgPj4gNCksXHJcbiAgICAgICAgICAgICAgICAoaXYgJiAweGYpIHwgKChpdiAmIDB4ZikgPDwgNCksXHJcbiAgICAgICAgICAgICAgICAxXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHB1dFRvQ2FjaGUoY29sb3JTdHIsIHJnYmFBcnIpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmdiYUFycjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3RyLmxlbmd0aCA9PT0gNykge1xyXG4gICAgICAgICAgICB2YXIgaXYgPSBwYXJzZUludChzdHIuc3Vic3RyKDEpLCAxNik7ICAvLyBUT0RPKGRlYW5tKTogU3RyaWN0ZXIgcGFyc2luZy5cclxuICAgICAgICAgICAgaWYgKCEoaXYgPj0gMCAmJiBpdiA8PSAweGZmZmZmZikpIHtcclxuICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47ICAvLyBDb3ZlcnMgTmFOLlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldFJnYmEocmdiYUFycixcclxuICAgICAgICAgICAgICAgIChpdiAmIDB4ZmYwMDAwKSA+PiAxNixcclxuICAgICAgICAgICAgICAgIChpdiAmIDB4ZmYwMCkgPj4gOCxcclxuICAgICAgICAgICAgICAgIGl2ICYgMHhmZixcclxuICAgICAgICAgICAgICAgIDFcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycik7XHJcbiAgICAgICAgICAgIHJldHVybiByZ2JhQXJyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIG9wID0gc3RyLmluZGV4T2YoJygnKSwgZXAgPSBzdHIuaW5kZXhPZignKScpO1xyXG4gICAgaWYgKG9wICE9PSAtMSAmJiBlcCArIDEgPT09IHN0ci5sZW5ndGgpIHtcclxuICAgICAgICB2YXIgZm5hbWUgPSBzdHIuc3Vic3RyKDAsIG9wKTtcclxuICAgICAgICB2YXIgcGFyYW1zID0gc3RyLnN1YnN0cihvcCArIDEsIGVwIC0gKG9wICsgMSkpLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgdmFyIGFscGhhID0gMTsgIC8vIFRvIGFsbG93IGNhc2UgZmFsbHRocm91Z2guXHJcbiAgICAgICAgc3dpdGNoIChmbmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlICdyZ2JhJzpcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhbHBoYSA9IHBhcnNlQ3NzRmxvYXQocGFyYW1zLnBvcCgpKTsgLy8ganNoaW50IGlnbm9yZTpsaW5lXHJcbiAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaC5cclxuICAgICAgICAgICAgY2FzZSAncmdiJzpcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VDc3NJbnQocGFyYW1zWzBdKSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJzZUNzc0ludChwYXJhbXNbMV0pLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlQ3NzSW50KHBhcmFtc1syXSksXHJcbiAgICAgICAgICAgICAgICAgICAgYWxwaGFcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZ2JhQXJyO1xyXG4gICAgICAgICAgICBjYXNlICdoc2xhJzpcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwYXJhbXNbM10gPSBwYXJzZUNzc0Zsb2F0KHBhcmFtc1szXSk7XHJcbiAgICAgICAgICAgICAgICBoc2xhMnJnYmEocGFyYW1zLCByZ2JhQXJyKTtcclxuICAgICAgICAgICAgICAgIHB1dFRvQ2FjaGUoY29sb3JTdHIsIHJnYmFBcnIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJnYmFBcnI7XHJcbiAgICAgICAgICAgIGNhc2UgJ2hzbCc6XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaHNsYTJyZ2JhKHBhcmFtcywgcmdiYUFycik7XHJcbiAgICAgICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZ2JhQXJyO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xyXG4gICAgcmV0dXJuO1xyXG59O1xyXG5cclxuY29sb3JVdGlsLnBhcnNlVG9GbG9hdCA9IGZ1bmN0aW9uIChjb2xvclN0ciwgcmdiYUFycikge1xyXG4gICAgcmdiYUFyciA9IGNvbG9yVXRpbC5wYXJzZShjb2xvclN0ciwgcmdiYUFycik7XHJcbiAgICBpZiAoIXJnYmFBcnIpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZ2JhQXJyWzBdIC89IDI1NTtcclxuICAgIHJnYmFBcnJbMV0gLz0gMjU1O1xyXG4gICAgcmdiYUFyclsyXSAvPSAyNTU7XHJcbiAgICByZXR1cm4gcmdiYUFycjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci5oc2xhMnJnYmFcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gaHNsYVxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSByZ2JhXHJcbiAqIEByZXR1cm4ge0FycmF5LjxudW1iZXI+fSByZ2JhXHJcbiAqL1xyXG5mdW5jdGlvbiBoc2xhMnJnYmEoaHNsYSwgcmdiYSkge1xyXG4gICAgdmFyIGggPSAoKChwYXJzZUZsb2F0KGhzbGFbMF0pICUgMzYwKSArIDM2MCkgJSAzNjApIC8gMzYwOyAgLy8gMCAuLiAxXHJcbiAgICAvLyBOT1RFKGRlYW5tKTogQWNjb3JkaW5nIHRvIHRoZSBDU1Mgc3BlYyBzL2wgc2hvdWxkIG9ubHkgYmVcclxuICAgIC8vIHBlcmNlbnRhZ2VzLCBidXQgd2UgZG9uJ3QgYm90aGVyIGFuZCBsZXQgZmxvYXQgb3IgcGVyY2VudGFnZS5cclxuICAgIHZhciBzID0gcGFyc2VDc3NGbG9hdChoc2xhWzFdKTtcclxuICAgIHZhciBsID0gcGFyc2VDc3NGbG9hdChoc2xhWzJdKTtcclxuICAgIHZhciBtMiA9IGwgPD0gMC41ID8gbCAqIChzICsgMSkgOiBsICsgcyAtIGwgKiBzO1xyXG4gICAgdmFyIG0xID0gbCAqIDIgLSBtMjtcclxuXHJcbiAgICByZ2JhID0gcmdiYSB8fCBbXTtcclxuICAgIHNldFJnYmEocmdiYSxcclxuICAgICAgICBjbGFtcENzc0J5dGUoY3NzSHVlVG9SZ2IobTEsIG0yLCBoICsgMSAvIDMpICogMjU1KSxcclxuICAgICAgICBjbGFtcENzc0J5dGUoY3NzSHVlVG9SZ2IobTEsIG0yLCBoKSAqIDI1NSksXHJcbiAgICAgICAgY2xhbXBDc3NCeXRlKGNzc0h1ZVRvUmdiKG0xLCBtMiwgaCAtIDEgLyAzKSAqIDI1NSksXHJcbiAgICAgICAgMVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoaHNsYS5sZW5ndGggPT09IDQpIHtcclxuICAgICAgICByZ2JhWzNdID0gaHNsYVszXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmdiYTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci5yZ2JhMmhzbGFcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcmdiYVxyXG4gKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn0gaHNsYVxyXG4gKi9cclxuZnVuY3Rpb24gcmdiYTJoc2xhKHJnYmEpIHtcclxuICAgIGlmICghcmdiYSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSR0IgZnJvbSAwIHRvIDI1NVxyXG4gICAgdmFyIFIgPSByZ2JhWzBdIC8gMjU1O1xyXG4gICAgdmFyIEcgPSByZ2JhWzFdIC8gMjU1O1xyXG4gICAgdmFyIEIgPSByZ2JhWzJdIC8gMjU1O1xyXG5cclxuICAgIHZhciB2TWluID0gTWF0aC5taW4oUiwgRywgQik7IC8vIE1pbi4gdmFsdWUgb2YgUkdCXHJcbiAgICB2YXIgdk1heCA9IE1hdGgubWF4KFIsIEcsIEIpOyAvLyBNYXguIHZhbHVlIG9mIFJHQlxyXG4gICAgdmFyIGRlbHRhID0gdk1heCAtIHZNaW47IC8vIERlbHRhIFJHQiB2YWx1ZVxyXG5cclxuICAgIHZhciBMID0gKHZNYXggKyB2TWluKSAvIDI7XHJcbiAgICB2YXIgSDtcclxuICAgIHZhciBTO1xyXG4gICAgLy8gSFNMIHJlc3VsdHMgZnJvbSAwIHRvIDFcclxuICAgIGlmIChkZWx0YSA9PT0gMCkge1xyXG4gICAgICAgIEggPSAwO1xyXG4gICAgICAgIFMgPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKEwgPCAwLjUpIHtcclxuICAgICAgICAgICAgUyA9IGRlbHRhIC8gKHZNYXggKyB2TWluKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIFMgPSBkZWx0YSAvICgyIC0gdk1heCAtIHZNaW4pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGRlbHRhUiA9ICgoKHZNYXggLSBSKSAvIDYpICsgKGRlbHRhIC8gMikpIC8gZGVsdGE7XHJcbiAgICAgICAgdmFyIGRlbHRhRyA9ICgoKHZNYXggLSBHKSAvIDYpICsgKGRlbHRhIC8gMikpIC8gZGVsdGE7XHJcbiAgICAgICAgdmFyIGRlbHRhQiA9ICgoKHZNYXggLSBCKSAvIDYpICsgKGRlbHRhIC8gMikpIC8gZGVsdGE7XHJcblxyXG4gICAgICAgIGlmIChSID09PSB2TWF4KSB7XHJcbiAgICAgICAgICAgIEggPSBkZWx0YUIgLSBkZWx0YUc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKEcgPT09IHZNYXgpIHtcclxuICAgICAgICAgICAgSCA9ICgxIC8gMykgKyBkZWx0YVIgLSBkZWx0YUI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKEIgPT09IHZNYXgpIHtcclxuICAgICAgICAgICAgSCA9ICgyIC8gMykgKyBkZWx0YUcgLSBkZWx0YVI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoSCA8IDApIHtcclxuICAgICAgICAgICAgSCArPSAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEggPiAxKSB7XHJcbiAgICAgICAgICAgIEggLT0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGhzbGEgPSBbSCAqIDM2MCwgUywgTF07XHJcblxyXG4gICAgaWYgKHJnYmFbM10gIT0gbnVsbCkge1xyXG4gICAgICAgIGhzbGEucHVzaChyZ2JhWzNdKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaHNsYTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci5saWZ0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxyXG4gKiBAcGFyYW0ge251bWJlcn0gbGV2ZWxcclxuICogQHJldHVybiB7c3RyaW5nfVxyXG4gKi9cclxuY29sb3JVdGlsLmxpZnQgPSBmdW5jdGlvbiAoY29sb3IsIGxldmVsKSB7XHJcbiAgICB2YXIgY29sb3JBcnIgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xyXG4gICAgaWYgKGNvbG9yQXJyKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGxldmVsIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgY29sb3JBcnJbaV0gPSBjb2xvckFycltpXSAqICgxIC0gbGV2ZWwpIHwgMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yQXJyW2ldID0gKCgyNTUgLSBjb2xvckFycltpXSkgKiBsZXZlbCArIGNvbG9yQXJyW2ldKSB8IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yVXRpbC5zdHJpbmdpZnkoY29sb3JBcnIsIGNvbG9yQXJyLmxlbmd0aCA9PT0gNCA/ICdyZ2JhJyA6ICdyZ2InKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci50b0hleFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcclxuICogQHJldHVybiB7c3RyaW5nfVxyXG4gKi9cclxuY29sb3JVdGlsLnRvSGV4ID0gZnVuY3Rpb24gKGNvbG9yKSB7XHJcbiAgICB2YXIgY29sb3JBcnIgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xyXG4gICAgaWYgKGNvbG9yQXJyKSB7XHJcbiAgICAgICAgcmV0dXJuICgoMSA8PCAyNCkgKyAoY29sb3JBcnJbMF0gPDwgMTYpICsgKGNvbG9yQXJyWzFdIDw8IDgpICsgKCtjb2xvckFyclsyXSkpLnRvU3RyaW5nKDE2KS5zbGljZSgxKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBNYXAgdmFsdWUgdG8gY29sb3IuIEZhc3RlciB0aGFuIGxlcnAgbWV0aG9kcyBiZWNhdXNlIGNvbG9yIGlzIHJlcHJlc2VudGVkIGJ5IHJnYmEgYXJyYXkuXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvclxyXG4gKiBAcGFyYW0ge251bWJlcn0gbm9ybWFsaXplZFZhbHVlIEEgZmxvYXQgYmV0d2VlbiAwIGFuZCAxLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxBcnJheS48bnVtYmVyPj59IGNvbG9ycyBMaXN0IG9mIHJnYmEgY29sb3IgYXJyYXlcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gW291dF0gTWFwcGVkIGdiYSBjb2xvciBhcnJheVxyXG4gKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn0gd2lsbCBiZSBudWxsL3VuZGVmaW5lZCBpZiBpbnB1dCBpbGxlZ2FsLlxyXG4gKi9cclxuY29sb3JVdGlsLmZhc3RMZXJwID0gZnVuY3Rpb24gKG5vcm1hbGl6ZWRWYWx1ZSwgY29sb3JzLCBvdXQpIHtcclxuICAgIGlmICghKGNvbG9ycyAmJiBjb2xvcnMubGVuZ3RoKVxyXG4gICAgICAgIHx8ICEobm9ybWFsaXplZFZhbHVlID49IDAgJiYgbm9ybWFsaXplZFZhbHVlIDw9IDEpXHJcbiAgICApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgb3V0ID0gb3V0IHx8IFtdO1xyXG5cclxuICAgIHZhciB2YWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZSAqIChjb2xvcnMubGVuZ3RoIC0gMSk7XHJcbiAgICB2YXIgbGVmdEluZGV4ID0gTWF0aC5mbG9vcih2YWx1ZSk7XHJcbiAgICB2YXIgcmlnaHRJbmRleCA9IE1hdGguY2VpbCh2YWx1ZSk7XHJcbiAgICB2YXIgbGVmdENvbG9yID0gY29sb3JzW2xlZnRJbmRleF07XHJcbiAgICB2YXIgcmlnaHRDb2xvciA9IGNvbG9yc1tyaWdodEluZGV4XTtcclxuICAgIHZhciBkdiA9IHZhbHVlIC0gbGVmdEluZGV4O1xyXG4gICAgb3V0WzBdID0gY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzBdLCByaWdodENvbG9yWzBdLCBkdikpO1xyXG4gICAgb3V0WzFdID0gY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzFdLCByaWdodENvbG9yWzFdLCBkdikpO1xyXG4gICAgb3V0WzJdID0gY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzJdLCByaWdodENvbG9yWzJdLCBkdikpO1xyXG4gICAgb3V0WzNdID0gY2xhbXBDc3NGbG9hdChsZXJwTnVtYmVyKGxlZnRDb2xvclszXSwgcmlnaHRDb2xvclszXSwgZHYpKTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59XHJcblxyXG5jb2xvclV0aWwuZmFzdE1hcFRvQ29sb3IgPSBjb2xvclV0aWwuZmFzdExlcnA7XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtudW1iZXJ9IG5vcm1hbGl6ZWRWYWx1ZSBBIGZsb2F0IGJldHdlZW4gMCBhbmQgMS5cclxuICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gY29sb3JzIENvbG9yIGxpc3QuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGZ1bGxPdXRwdXQgRGVmYXVsdCBmYWxzZS5cclxuICogQHJldHVybiB7KHN0cmluZ3xPYmplY3QpfSBSZXN1bHQgY29sb3IuIElmIGZ1bGxPdXRwdXQsXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtjb2xvcjogLi4uLCBsZWZ0SW5kZXg6IC4uLiwgcmlnaHRJbmRleDogLi4uLCB2YWx1ZTogLi4ufSxcclxuICovXHJcbmNvbG9yVXRpbC5sZXJwID0gZnVuY3Rpb24gKG5vcm1hbGl6ZWRWYWx1ZSwgY29sb3JzLCBmdWxsT3V0cHV0KSB7XHJcbiAgICBpZiAoIShjb2xvcnMgJiYgY29sb3JzLmxlbmd0aClcclxuICAgICAgICB8fCAhKG5vcm1hbGl6ZWRWYWx1ZSA+PSAwICYmIG5vcm1hbGl6ZWRWYWx1ZSA8PSAxKVxyXG4gICAgKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciB2YWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZSAqIChjb2xvcnMubGVuZ3RoIC0gMSk7XHJcbiAgICB2YXIgbGVmdEluZGV4ID0gTWF0aC5mbG9vcih2YWx1ZSk7XHJcbiAgICB2YXIgcmlnaHRJbmRleCA9IE1hdGguY2VpbCh2YWx1ZSk7XHJcbiAgICB2YXIgbGVmdENvbG9yID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yc1tsZWZ0SW5kZXhdKTtcclxuICAgIHZhciByaWdodENvbG9yID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yc1tyaWdodEluZGV4XSk7XHJcbiAgICB2YXIgZHYgPSB2YWx1ZSAtIGxlZnRJbmRleDtcclxuXHJcbiAgICB2YXIgY29sb3IgPSBjb2xvclV0aWwuc3RyaW5naWZ5KFxyXG4gICAgICAgIFtcclxuICAgICAgICAgICAgY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzBdLCByaWdodENvbG9yWzBdLCBkdikpLFxyXG4gICAgICAgICAgICBjbGFtcENzc0J5dGUobGVycE51bWJlcihsZWZ0Q29sb3JbMV0sIHJpZ2h0Q29sb3JbMV0sIGR2KSksXHJcbiAgICAgICAgICAgIGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclsyXSwgcmlnaHRDb2xvclsyXSwgZHYpKSxcclxuICAgICAgICAgICAgY2xhbXBDc3NGbG9hdChsZXJwTnVtYmVyKGxlZnRDb2xvclszXSwgcmlnaHRDb2xvclszXSwgZHYpKVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgJ3JnYmEnXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBmdWxsT3V0cHV0XHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIGNvbG9yOiBjb2xvcixcclxuICAgICAgICAgICAgbGVmdEluZGV4OiBsZWZ0SW5kZXgsXHJcbiAgICAgICAgICAgIHJpZ2h0SW5kZXg6IHJpZ2h0SW5kZXgsXHJcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICA6IGNvbG9yO1xyXG59XHJcblxyXG4vKipcclxuICogQGRlcHJlY2F0ZWRcclxuICovXHJcbmNvbG9yVXRpbC5tYXBUb0NvbG9yID0gY29sb3JVdGlsLmxlcnA7XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5jb3JlLmNvbG9yXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxyXG4gKiBAcGFyYW0ge251bWJlcj19IGggMCB+IDM2MCwgaWdub3JlIHdoZW4gbnVsbC5cclxuICogQHBhcmFtIHtudW1iZXI9fSBzIDAgfiAxLCBpZ25vcmUgd2hlbiBudWxsLlxyXG4gKiBAcGFyYW0ge251bWJlcj19IGwgMCB+IDEsIGlnbm9yZSB3aGVuIG51bGwuXHJcbiAqIEByZXR1cm4ge3N0cmluZ30gQ29sb3Igc3RyaW5nIGluIHJnYmEgZm9ybWF0LlxyXG4gKi9cclxuY29sb3JVdGlsLm1vZGlmeUhTTCA9IGZ1bmN0aW9uIChjb2xvciwgaCwgcywgbCkge1xyXG4gICAgY29sb3IgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xyXG5cclxuICAgIGlmIChjb2xvcikge1xyXG4gICAgICAgIGNvbG9yID0gcmdiYTJoc2xhKGNvbG9yKTtcclxuICAgICAgICBoICE9IG51bGwgJiYgKGNvbG9yWzBdID0gY2xhbXBDc3NBbmdsZShoKSk7XHJcbiAgICAgICAgcyAhPSBudWxsICYmIChjb2xvclsxXSA9IHBhcnNlQ3NzRmxvYXQocykpO1xyXG4gICAgICAgIGwgIT0gbnVsbCAmJiAoY29sb3JbMl0gPSBwYXJzZUNzc0Zsb2F0KGwpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbG9yVXRpbC5zdHJpbmdpZnkoaHNsYTJyZ2JhKGNvbG9yKSwgJ3JnYmEnKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvclxyXG4gKiBAcGFyYW0ge251bWJlcj19IGFscGhhIDAgfiAxXHJcbiAqIEByZXR1cm4ge3N0cmluZ30gQ29sb3Igc3RyaW5nIGluIHJnYmEgZm9ybWF0LlxyXG4gKi9cclxuY29sb3JVdGlsLm1vZGlmeUFscGhhID0gZnVuY3Rpb24gKGNvbG9yLCBhbHBoYSkge1xyXG4gICAgY29sb3IgPSBjb2xvclV0aWwucGFyc2UoY29sb3IpO1xyXG5cclxuICAgIGlmIChjb2xvciAmJiBhbHBoYSAhPSBudWxsKSB7XHJcbiAgICAgICAgY29sb3JbM10gPSBjbGFtcENzc0Zsb2F0KGFscGhhKTtcclxuICAgICAgICByZXR1cm4gY29sb3JVdGlsLnN0cmluZ2lmeShjb2xvciwgJ3JnYmEnKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyckNvbG9yIGxpa2UgWzEyLDMzLDQ0LDAuNF1cclxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgJ3JnYmEnLCAnaHN2YScsIC4uLlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFJlc3VsdCBjb2xvci4gKElmIGlucHV0IGlsbGVnYWwsIHJldHVybiB1bmRlZmluZWQpLlxyXG4gKi9cclxuY29sb3JVdGlsLnN0cmluZ2lmeSA9IGZ1bmN0aW9uIChhcnJDb2xvciwgdHlwZSkge1xyXG4gICAgaWYgKCFhcnJDb2xvciB8fCAhYXJyQ29sb3IubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGNvbG9yU3RyID0gYXJyQ29sb3JbMF0gKyAnLCcgKyBhcnJDb2xvclsxXSArICcsJyArIGFyckNvbG9yWzJdO1xyXG4gICAgaWYgKHR5cGUgPT09ICdyZ2JhJyB8fCB0eXBlID09PSAnaHN2YScgfHwgdHlwZSA9PT0gJ2hzbGEnKSB7XHJcbiAgICAgICAgY29sb3JTdHIgKz0gJywnICsgYXJyQ29sb3JbM107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHlwZSArICcoJyArIGNvbG9yU3RyICsgJyknO1xyXG59O1xyXG5cclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjb2xvclV0aWw7IiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCBjb2xvclV0aWwgZnJvbSAnLi9jb3JlL2NvbG9yJztcclxudmFyIHBhcnNlQ29sb3IgPSBjb2xvclV0aWwucGFyc2VUb0Zsb2F0O1xyXG5cclxudmFyIHByb2dyYW1LZXlDYWNoZSA9IHt9O1xyXG5cclxuZnVuY3Rpb24gZ2V0RGVmaW5lQ29kZShkZWZpbmVzKSB7XHJcbiAgICB2YXIgZGVmaW5lS2V5cyA9IE9iamVjdC5rZXlzKGRlZmluZXMpO1xyXG4gICAgZGVmaW5lS2V5cy5zb3J0KCk7XHJcbiAgICB2YXIgZGVmaW5lU3RyID0gW107XHJcbiAgICAvLyBDdXN0b20gRGVmaW5lc1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWZpbmVLZXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IGRlZmluZUtleXNbaV07XHJcbiAgICAgICAgdmFyIHZhbHVlID0gZGVmaW5lc1trZXldO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaChrZXkgKyAnICcgKyB2YWx1ZS50b1N0cmluZygpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGVmaW5lU3RyLmpvaW4oJ1xcbicpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQcm9ncmFtS2V5KHZlcnRleERlZmluZXMsIGZyYWdtZW50RGVmaW5lcywgZW5hYmxlZFRleHR1cmVzKSB7XHJcbiAgICBlbmFibGVkVGV4dHVyZXMuc29ydCgpO1xyXG4gICAgdmFyIGRlZmluZVN0ciA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkVGV4dHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgc3ltYm9sID0gZW5hYmxlZFRleHR1cmVzW2ldO1xyXG4gICAgICAgIGRlZmluZVN0ci5wdXNoKHN5bWJvbCk7XHJcbiAgICB9XHJcbiAgICB2YXIga2V5ID0gZ2V0RGVmaW5lQ29kZSh2ZXJ0ZXhEZWZpbmVzKSArICdcXG4nXHJcbiAgICAgICAgKyBnZXREZWZpbmVDb2RlKGZyYWdtZW50RGVmaW5lcykgKyAnXFxuJ1xyXG4gICAgICAgICsgZGVmaW5lU3RyLmpvaW4oJ1xcbicpO1xyXG5cclxuICAgIGlmIChwcm9ncmFtS2V5Q2FjaGVba2V5XSkge1xyXG4gICAgICAgIHJldHVybiBwcm9ncmFtS2V5Q2FjaGVba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgaWQgPSB1dGlsLmdlbkdVSUQoKTtcclxuICAgIHByb2dyYW1LZXlDYWNoZVtrZXldID0gaWQ7XHJcbiAgICByZXR1cm4gaWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNYXRlcmlhbCBkZWZpbmVzIHRoZSBhcHBlYXJhbmNlIG9mIG1lc2ggc3VyZmFjZSwgbGlrZSBgY29sb3JgLCBgcm91Z2huZXNzYCwgYG1ldGFsbmVzc2AsIGV0Yy5cclxuICogSXQgY29udGFpbnMgYSB7QGxpbmsgY2xheS5TaGFkZXJ9IGFuZCBjb3JyZXNwb25kaW5nIHVuaWZvcm1zLlxyXG4gKlxyXG4gKiBIZXJlIGlzIGEgYmFzaWMgZXhhbXBsZSB0byBjcmVhdGUgYSBzdGFuZGFyZCBtYXRlcmlhbFxyXG5gYGBqc1xyXG52YXIgbWF0ZXJpYWwgPSBuZXcgY2xheS5NYXRlcmlhbCh7XHJcbiAgICBzaGFkZXI6IG5ldyBjbGF5LlNoYWRlcihcclxuICAgICAgICBjbGF5LlNoYWRlci5zb3VyY2UoJ2NsYXkudmVydGV4JyksXHJcbiAgICAgICAgY2xheS5TaGFkZXIuc291cmNlKCdjbGF5LmZyYWdtZW50JylcclxuICAgIClcclxufSk7XHJcbmBgYFxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5NYXRlcmlhbFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIE1hdGVyaWFsID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5NYXRlcmlhbCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbmFtZTogJycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgLy8gdW5pZm9ybXM6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlNoYWRlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBzaGFkZXI6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRlcHRoVGVzdDogdHJ1ZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGVwdGhNYXNrOiB0cnVlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0cmFuc3BhcmVudDogZmFsc2UsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQmxlbmQgZnVuYyBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gdGhlIG1hdGVyaWFsXHJcbiAgICAgICAgICogaGF2ZSBjdXN0b20gYmxlbmRpbmdcclxuICAgICAgICAgKiBUaGUgZ2wgY29udGV4dCB3aWxsIGJlIHRoZSBvbmx5IGFyZ3VtZW50IHBhc3NlZCBpbiB0aG8gdGhlXHJcbiAgICAgICAgICogYmxlbmQgZnVuY3Rpb25cclxuICAgICAgICAgKiBEZXRhaWwgb2YgYmxlbmQgZnVuY3Rpb24gaW4gV2ViR0w6XHJcbiAgICAgICAgICogaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9nbGVzL3NwZWNzLzIuMC9lc19mdWxsX3NwZWNfMi4wLjI1LnBkZlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogRXhhbXBsZSA6XHJcbiAgICAgICAgICogZnVuY3Rpb24oX2dsKSB7XHJcbiAgICAgICAgICogIF9nbC5ibGVuZEVxdWF0aW9uKF9nbC5GVU5DX0FERCk7XHJcbiAgICAgICAgICogIF9nbC5ibGVuZEZ1bmMoX2dsLlNSQ19BTFBIQSwgX2dsLk9ORV9NSU5VU19TUkNfQUxQSEEpO1xyXG4gICAgICAgICAqIH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBibGVuZDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdXBkYXRlIHRleHR1cmUgc3RhdHVzIGF1dG9tYXRpY2FsbHkuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXV0b1VwZGF0ZVRleHR1cmVTdGF0dXM6IHRydWUsXHJcblxyXG4gICAgICAgIHVuaWZvcm1zOiB7fSxcclxuICAgICAgICB2ZXJ0ZXhEZWZpbmVzOiB7fSxcclxuICAgICAgICBmcmFnbWVudERlZmluZXM6IHt9LFxyXG4gICAgICAgIF90ZXh0dXJlU3RhdHVzOiB7fSxcclxuXHJcbiAgICAgICAgLy8gc2hhZG93VHJhbnNwYXJlbnRNYXAgOiBudWxsXHJcblxyXG4gICAgICAgIC8vIFBFTkRJTkcgZW5hYmxlIHRoZSB1bmlmb3JtIHRoYXQgb25seSB1c2VkIGluIHNoYWRlci5cclxuICAgICAgICBfZW5hYmxlZFVuaWZvcm1zOiBudWxsLFxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCF0aGlzLm5hbWUpIHtcclxuICAgICAgICB0aGlzLm5hbWUgPSAnTUFURVJJQUxfJyArIHRoaXMuX191aWRfXztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaGFkZXIpIHtcclxuICAgICAgICAvLyBLZWVwIHN0YXR1cywgbWFpbmx5IHByZXNldCB1bmlmb3JtcywgdmVydGV4RGVmaW5lcyBhbmQgZnJhZ21lbnREZWZpbmVzXHJcbiAgICAgICAgdGhpcy5hdHRhY2hTaGFkZXIodGhpcy5zaGFkZXIsIHRydWUpO1xyXG4gICAgfVxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuTWF0ZXJpYWwucHJvdG90eXBlICovXHJcbntcclxuICAgIHByZWNpc2lvbjogJ2hpZ2hwJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBtYXRlcmlhbCB1bmlmb3JtXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogIG1hdC5zZXRVbmlmb3JtKCdjb2xvcicsIFsxLCAxLCAxLCAxXSk7XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcnxhcnJheXxjbGF5LlRleHR1cmV8QXJyYXlCdWZmZXJWaWV3fSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBzZXRVbmlmb3JtOiBmdW5jdGlvbiAoc3ltYm9sLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5pZm9ybSB2YWx1ZSBcIicgKyBzeW1ib2wgKyAnXCIgaXMgdW5kZWZpbmVkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB1bmlmb3JtID0gdGhpcy51bmlmb3Jtc1tzeW1ib2xdO1xyXG4gICAgICAgIGlmICh1bmlmb3JtKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIGFzIGEgY29sb3IuIEludmFsaWQgY29sb3Igc3RyaW5nIHdpbGwgcmV0dXJuIG51bGwuXHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlQ29sb3IodmFsdWUpIHx8IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB1bmlmb3JtLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvVXBkYXRlVGV4dHVyZVN0YXR1cyAmJiB1bmlmb3JtLnR5cGUgPT09ICd0Jykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVUZXh0dXJlKHN5bWJvbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVUZXh0dXJlKHN5bWJvbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9ialxyXG4gICAgICovXHJcbiAgICBzZXRVbmlmb3JtczogZnVuY3Rpb24ob2JqKSB7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xyXG4gICAgICAgICAgICB2YXIgdmFsID0gb2JqW2tleV07XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShrZXksIHZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gIHN5bWJvbFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNVbmlmb3JtRW5hYmxlZDogZnVuY3Rpb24gKHN5bWJvbCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkVW5pZm9ybXMuaW5kZXhPZihzeW1ib2wpID49IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEVuYWJsZWRVbmlmb3JtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkVW5pZm9ybXM7XHJcbiAgICB9LFxyXG4gICAgZ2V0VGV4dHVyZVVuaWZvcm1zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVVbmlmb3JtcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBvZiBzZXRVbmlmb3JtIGFuZCBzZXRVbmlmb3Jtc1xyXG4gICAgICogQHBhcmFtIHtvYmplY3R8c3RyaW5nfSBzeW1ib2xcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfGFycmF5fGNsYXkuVGV4dHVyZXxBcnJheUJ1ZmZlclZpZXd9IFt2YWx1ZV1cclxuICAgICAqL1xyXG4gICAgc2V0OiBmdW5jdGlvbiAoc3ltYm9sLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2Yoc3ltYm9sKSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHN5bWJvbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IHN5bWJvbFtrZXldO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKGtleSwgdmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKHN5bWJvbCwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCB1bmlmb3JtIHZhbHVlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfGFycmF5fGNsYXkuVGV4dHVyZXxBcnJheUJ1ZmZlclZpZXd9XHJcbiAgICAgKi9cclxuICAgIGdldDogZnVuY3Rpb24gKHN5bWJvbCkge1xyXG4gICAgICAgIHZhciB1bmlmb3JtID0gdGhpcy51bmlmb3Jtc1tzeW1ib2xdO1xyXG4gICAgICAgIGlmICh1bmlmb3JtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmlmb3JtLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEF0dGFjaCBhIHNoYWRlciBpbnN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5TaGFkZXJ9IHNoYWRlclxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0ga2VlcFN0YXR1cyBJZiB0cnkgdG8ga2VlcCB1bmlmb3JtIGFuZCB0ZXh0dXJlXHJcbiAgICAgKi9cclxuICAgIGF0dGFjaFNoYWRlcjogZnVuY3Rpb24oc2hhZGVyLCBrZWVwU3RhdHVzKSB7XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsVW5pZm9ybXMgPSB0aGlzLnVuaWZvcm1zO1xyXG5cclxuICAgICAgICAvLyBJZ25vcmUgaWYgdW5pZm9ybSBjYW4gdXNlIGluIHNoYWRlci5cclxuICAgICAgICB0aGlzLnVuaWZvcm1zID0gc2hhZGVyLmNyZWF0ZVVuaWZvcm1zKCk7XHJcbiAgICAgICAgdGhpcy5zaGFkZXIgPSBzaGFkZXI7XHJcblxyXG4gICAgICAgIHZhciB1bmlmb3JtcyA9IHRoaXMudW5pZm9ybXM7XHJcbiAgICAgICAgdGhpcy5fZW5hYmxlZFVuaWZvcm1zID0gT2JqZWN0LmtleXModW5pZm9ybXMpO1xyXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB1bmlmb3JtcyBhcmUgc2V0IGluIHNhbWUgb3JkZXIgdG8gYXZvaWQgdGV4dHVyZSBzbG90IHdyb25nXHJcbiAgICAgICAgdGhpcy5fZW5hYmxlZFVuaWZvcm1zLnNvcnQoKTtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlVW5pZm9ybXMgPSB0aGlzLl9lbmFibGVkVW5pZm9ybXMuZmlsdGVyKGZ1bmN0aW9uICh1bmlmb3JtTmFtZSkge1xyXG4gICAgICAgICAgICB2YXIgdHlwZSA9IHRoaXMudW5pZm9ybXNbdW5pZm9ybU5hbWVdLnR5cGU7XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlID09PSAndCcgfHwgdHlwZSA9PT0gJ3R2JztcclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgdmFyIG9yaWdpbmFsVmVydGV4RGVmaW5lcyA9IHRoaXMudmVydGV4RGVmaW5lcztcclxuICAgICAgICB2YXIgb3JpZ2luYWxGcmFnbWVudERlZmluZXMgPSB0aGlzLmZyYWdtZW50RGVmaW5lcztcclxuXHJcbiAgICAgICAgdGhpcy52ZXJ0ZXhEZWZpbmVzID0gdXRpbC5jbG9uZShzaGFkZXIudmVydGV4RGVmaW5lcyk7XHJcbiAgICAgICAgdGhpcy5mcmFnbWVudERlZmluZXMgPSB1dGlsLmNsb25lKHNoYWRlci5mcmFnbWVudERlZmluZXMpO1xyXG5cclxuICAgICAgICBpZiAoa2VlcFN0YXR1cykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gb3JpZ2luYWxVbmlmb3Jtcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1zW3N5bWJvbF0pIHtcclxuICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtc1tzeW1ib2xdLnZhbHVlID0gb3JpZ2luYWxVbmlmb3Jtc1tzeW1ib2xdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB1dGlsLmRlZmF1bHRzKHRoaXMudmVydGV4RGVmaW5lcywgb3JpZ2luYWxWZXJ0ZXhEZWZpbmVzKTtcclxuICAgICAgICAgICAgdXRpbC5kZWZhdWx0cyh0aGlzLmZyYWdtZW50RGVmaW5lcywgb3JpZ2luYWxGcmFnbWVudERlZmluZXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc2hhZGVyLnRleHR1cmVzKSB7XHJcbiAgICAgICAgICAgIHRleHR1cmVTdGF0dXNba2V5XSA9IHtcclxuICAgICAgICAgICAgICAgIHNoYWRlclR5cGU6IHNoYWRlci50ZXh0dXJlc1trZXldLnNoYWRlclR5cGUsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBzaGFkZXIudGV4dHVyZXNba2V5XS50eXBlLFxyXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogKGtlZXBTdGF0dXMgJiYgdGhpcy5fdGV4dHVyZVN0YXR1c1trZXldKSA/IHRoaXMuX3RleHR1cmVTdGF0dXNba2V5XS5lbmFibGVkIDogZmFsc2VcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3RleHR1cmVTdGF0dXMgPSB0ZXh0dXJlU3RhdHVzO1xyXG5cclxuICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgbWF0ZXJpYWwgYW5kIGtlZXAgdW5pZm9ybXMsIHNoYWRlciB3aWxsIG5vdCBiZSBjbG9uZWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0ZXJpYWx9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG1hdGVyaWFsID0gbmV3IHRoaXMuY29uc3RydWN0b3Ioe1xyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXHJcbiAgICAgICAgICAgIHNoYWRlcjogdGhpcy5zaGFkZXJcclxuICAgICAgICB9KTtcclxuICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gdGhpcy51bmlmb3Jtcykge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC51bmlmb3Jtc1tzeW1ib2xdLnZhbHVlID0gdGhpcy51bmlmb3Jtc1tzeW1ib2xdLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtYXRlcmlhbC5kZXB0aFRlc3QgPSB0aGlzLmRlcHRoVGVzdDtcclxuICAgICAgICBtYXRlcmlhbC5kZXB0aE1hc2sgPSB0aGlzLmRlcHRoTWFzaztcclxuICAgICAgICBtYXRlcmlhbC50cmFuc3BhcmVudCA9IHRoaXMudHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgbWF0ZXJpYWwuYmxlbmQgPSB0aGlzLmJsZW5kO1xyXG5cclxuICAgICAgICBtYXRlcmlhbC52ZXJ0ZXhEZWZpbmVzID0gdXRpbC5jbG9uZSh0aGlzLnZlcnRleERlZmluZXMpO1xyXG4gICAgICAgIG1hdGVyaWFsLmZyYWdtZW50RGVmaW5lcyA9IHV0aWwuY2xvbmUodGhpcy5mcmFnbWVudERlZmluZXMpO1xyXG4gICAgICAgIG1hdGVyaWFsLmVuYWJsZVRleHR1cmUodGhpcy5nZXRFbmFibGVkVGV4dHVyZXMoKSk7XHJcbiAgICAgICAgbWF0ZXJpYWwucHJlY2lzaW9uID0gdGhpcy5wcmVjaXNpb247XHJcblxyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYSAjZGVmaW5lIG1hY3JvIGluIHNoYWRlciBjb2RlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHNoYWRlclR5cGUgQ2FuIGJlIHZlcnRleCwgZnJhZ21lbnQgb3IgYm90aFxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW3ZhbF1cclxuICAgICAqL1xyXG4gICAgZGVmaW5lOiBmdW5jdGlvbiAoc2hhZGVyVHlwZSwgc3ltYm9sLCB2YWwpIHtcclxuICAgICAgICB2YXIgdmVydGV4RGVmaW5lcyA9IHRoaXMudmVydGV4RGVmaW5lcztcclxuICAgICAgICB2YXIgZnJhZ21lbnREZWZpbmVzID0gdGhpcy5mcmFnbWVudERlZmluZXM7XHJcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgIT09ICd2ZXJ0ZXgnICYmIHNoYWRlclR5cGUgIT09ICdmcmFnbWVudCcgJiYgc2hhZGVyVHlwZSAhPT0gJ2JvdGgnXHJcbiAgICAgICAgICAgICYmIGFyZ3VtZW50cy5sZW5ndGggPCAzXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIHNoYWRlclR5cGUgZGVmYXVsdCB0byBiZSAnYm90aCdcclxuICAgICAgICAgICAgdmFsID0gc3ltYm9sO1xyXG4gICAgICAgICAgICBzeW1ib2wgPSBzaGFkZXJUeXBlO1xyXG4gICAgICAgICAgICBzaGFkZXJUeXBlID0gJ2JvdGgnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YWwgPSB2YWwgIT0gbnVsbCA/IHZhbCA6IG51bGw7XHJcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgPT09ICd2ZXJ0ZXgnIHx8IHNoYWRlclR5cGUgPT09ICdib3RoJykge1xyXG4gICAgICAgICAgICBpZiAodmVydGV4RGVmaW5lc1tzeW1ib2xdICE9PSB2YWwpIHtcclxuICAgICAgICAgICAgICAgIHZlcnRleERlZmluZXNbc3ltYm9sXSA9IHZhbDtcclxuICAgICAgICAgICAgICAgIC8vIE1hcmsgYXMgZGlydHlcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2hhZGVyVHlwZSA9PT0gJ2ZyYWdtZW50JyB8fCBzaGFkZXJUeXBlID09PSAnYm90aCcpIHtcclxuICAgICAgICAgICAgaWYgKGZyYWdtZW50RGVmaW5lc1tzeW1ib2xdICE9PSB2YWwpIHtcclxuICAgICAgICAgICAgICAgIGZyYWdtZW50RGVmaW5lc1tzeW1ib2xdID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRlclR5cGUgIT09ICdib3RoJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgYSAjZGVmaW5lIG1hY3JvIGluIHNoYWRlciBjb2RlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHNoYWRlclR5cGUgQ2FuIGJlIHZlcnRleCwgZnJhZ21lbnQgb3IgYm90aFxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcclxuICAgICAqL1xyXG4gICAgdW5kZWZpbmU6IGZ1bmN0aW9uIChzaGFkZXJUeXBlLCBzeW1ib2wpIHtcclxuICAgICAgICBpZiAoc2hhZGVyVHlwZSAhPT0gJ3ZlcnRleCcgJiYgc2hhZGVyVHlwZSAhPT0gJ2ZyYWdtZW50JyAmJiBzaGFkZXJUeXBlICE9PSAnYm90aCdcclxuICAgICAgICAgICAgJiYgYXJndW1lbnRzLmxlbmd0aCA8IDJcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgLy8gc2hhZGVyVHlwZSBkZWZhdWx0IHRvIGJlICdib3RoJ1xyXG4gICAgICAgICAgICBzeW1ib2wgPSBzaGFkZXJUeXBlO1xyXG4gICAgICAgICAgICBzaGFkZXJUeXBlID0gJ2JvdGgnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2hhZGVyVHlwZSA9PT0gJ3ZlcnRleCcgfHwgc2hhZGVyVHlwZSA9PT0gJ2JvdGgnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVmaW5lZCgndmVydGV4Jywgc3ltYm9sKSkge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudmVydGV4RGVmaW5lc1tzeW1ib2xdO1xyXG4gICAgICAgICAgICAgICAgLy8gTWFyayBhcyBkaXJ0eVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzaGFkZXJUeXBlID09PSAnZnJhZ21lbnQnIHx8IHNoYWRlclR5cGUgPT09ICdib3RoJykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0RlZmluZWQoJ2ZyYWdtZW50Jywgc3ltYm9sKSkge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZnJhZ21lbnREZWZpbmVzW3N5bWJvbF07XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hhZGVyVHlwZSAhPT0gJ2JvdGgnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIG1hY3JvIGlzIGRlZmluZWQgaW4gc2hhZGVyLlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJUeXBlIENhbiBiZSB2ZXJ0ZXgsIGZyYWdtZW50IG9yIGJvdGhcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKi9cclxuICAgIGlzRGVmaW5lZDogZnVuY3Rpb24gKHNoYWRlclR5cGUsIHN5bWJvbCkge1xyXG4gICAgICAgIC8vIFBFTkRJTkcgaGFzT3duUHJvcGVydHkgP1xyXG4gICAgICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICd2ZXJ0ZXgnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmVydGV4RGVmaW5lc1tzeW1ib2xdICE9PSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ZyYWdtZW50JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyYWdtZW50RGVmaW5lc1tzeW1ib2xdICE9PSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogR2V0IG1hY3JvIHZhbHVlIGRlZmluZWQgaW4gc2hhZGVyLlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJUeXBlIENhbiBiZSB2ZXJ0ZXgsIGZyYWdtZW50IG9yIGJvdGhcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKi9cclxuICAgIGdldERlZmluZTogZnVuY3Rpb24gKHNoYWRlclR5cGUsIHN5bWJvbCkge1xyXG4gICAgICAgIHN3aXRjaChzaGFkZXJUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3ZlcnRleCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52ZXJ0ZXhEZWZpbmVzW3N5bWJvbF07XHJcbiAgICAgICAgICAgIGNhc2UgJ2ZyYWdtZW50JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZyYWdtZW50RGVmaW5lc1tzeW1ib2xdO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZSBhIHRleHR1cmUsIGFjdHVhbGx5IGl0IHdpbGwgYWRkIGEgI2RlZmluZSBtYWNybyBpbiB0aGUgc2hhZGVyIGNvZGVcclxuICAgICAqIEZvciBleGFtcGxlLCBpZiB0ZXh0dXJlIHN5bWJvbCBpcyBkaWZmdXNlTWFwLCBpdCB3aWxsIGFkZCBhIGxpbmUgYCNkZWZpbmUgRElGRlVTRU1BUF9FTkFCTEVEYCBpbiB0aGUgc2hhZGVyIGNvZGVcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKi9cclxuICAgIGVuYWJsZVRleHR1cmU6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzeW1ib2wpKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9sLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZVRleHR1cmUoc3ltYm9sW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc3RhdHVzID0gdGhpcy5fdGV4dHVyZVN0YXR1c1tzeW1ib2xdO1xyXG4gICAgICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgICAgICAgdmFyIGlzRW5hYmxlZCA9IHN0YXR1cy5lbmFibGVkO1xyXG4gICAgICAgICAgICBpZiAoIWlzRW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRW5hYmxlIGFsbCB0ZXh0dXJlcyB1c2VkIGluIHRoZSBzaGFkZXJcclxuICAgICAqL1xyXG4gICAgZW5hYmxlVGV4dHVyZXNBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZVN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXM7XHJcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRleHR1cmVTdGF0dXMpIHtcclxuICAgICAgICAgICAgdGV4dHVyZVN0YXR1c1tzeW1ib2xdLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGlzYWJsZSBhIHRleHR1cmUsIGl0IHJlbW92ZSBhICNkZWZpbmUgbWFjcm8gaW4gdGhlIHNoYWRlclxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcclxuICAgICAqL1xyXG4gICAgZGlzYWJsZVRleHR1cmU6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzeW1ib2wpKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9sLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVUZXh0dXJlKHN5bWJvbFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXNbc3ltYm9sXTtcclxuICAgICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHZhciBpc0Rpc2FibGVkID0gISBzdGF0dXMuZW5hYmxlZDtcclxuICAgICAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXMuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGlzYWJsZSBhbGwgdGV4dHVyZXMgdXNlZCBpbiB0aGUgc2hhZGVyXHJcbiAgICAgKi9cclxuICAgIGRpc2FibGVUZXh0dXJlc0FsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlU3RhdHVzID0gdGhpcy5fdGV4dHVyZVN0YXR1cztcclxuICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gdGV4dHVyZVN0YXR1cykge1xyXG4gICAgICAgICAgICB0ZXh0dXJlU3RhdHVzW3N5bWJvbF0uZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogSWYgdGV4dHVyZSBvZiBnaXZlbiB0eXBlIGlzIGVuYWJsZWQuXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBzeW1ib2xcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzVGV4dHVyZUVuYWJsZWQ6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZVN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXM7XHJcbiAgICAgICAgcmV0dXJuICEhdGV4dHVyZVN0YXR1c1tzeW1ib2xdXHJcbiAgICAgICAgICAgICYmIHRleHR1cmVTdGF0dXNbc3ltYm9sXS5lbmFibGVkO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhbGwgZW5hYmxlZCB0ZXh0dXJlc1xyXG4gICAgICogQHJldHVybiB7c3RyaW5nW119XHJcbiAgICAgKi9cclxuICAgIGdldEVuYWJsZWRUZXh0dXJlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBlbmFibGVkVGV4dHVyZXMgPSBbXTtcclxuICAgICAgICB2YXIgdGV4dHVyZVN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXM7XHJcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRleHR1cmVTdGF0dXMpIHtcclxuICAgICAgICAgICAgaWYgKHRleHR1cmVTdGF0dXNbc3ltYm9sXS5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBlbmFibGVkVGV4dHVyZXMucHVzaChzeW1ib2wpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlbmFibGVkVGV4dHVyZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFyayBkZWZpbmVzIGFyZSB1cGRhdGVkLlxyXG4gICAgICovXHJcbiAgICBkaXJ0eURlZmluZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFByb2dyYW1LZXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3Byb2dyYW1LZXkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9IGdldFByb2dyYW1LZXkoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZlcnRleERlZmluZXMsIHRoaXMuZnJhZ21lbnREZWZpbmVzLCB0aGlzLmdldEVuYWJsZWRUZXh0dXJlcygpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9ncmFtS2V5O1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1hdGVyaWFsO1xyXG4iLCJpbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuXHJcbnZhciBTSEFERVJfU1RBVEVfVE9fRU5BQkxFID0gMTtcclxudmFyIFNIQURFUl9TVEFURV9LRUVQX0VOQUJMRSA9IDI7XHJcbnZhciBTSEFERVJfU1RBVEVfUEVORElORyA9IDM7XHJcblxyXG4vLyBFbmFibGUgYXR0cmlidXRlIG9wZXJhdGlvbiBpcyBnbG9iYWwgdG8gYWxsIHByb2dyYW1zXHJcbi8vIEhlcmUgc2F2ZWQgdGhlIGxpc3Qgb2YgYWxsIGVuYWJsZWQgYXR0cmlidXRlIGluZGV4XHJcbi8vIGh0dHA6Ly93d3cubWpic2hhdy5jb20vMjAxMy8wMy93ZWJnbC1maXhpbmctaW52YWxpZG9wZXJhdGlvbi5odG1sXHJcbnZhciBlbmFibGVkQXR0cmlidXRlTGlzdCA9IHt9O1xyXG5cclxuLy8gc29tZSB1dGlsIGZ1bmN0aW9uc1xyXG5mdW5jdGlvbiBhZGRMaW5lTnVtYmVycyhzdHJpbmcpIHtcclxuICAgIHZhciBjaHVua3MgPSBzdHJpbmcuc3BsaXQoJ1xcbicpO1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gY2h1bmtzLmxlbmd0aDsgaSA8IGlsOyBpICsrKSB7XHJcbiAgICAgICAgLy8gQ2hyb21lIHJlcG9ydHMgc2hhZGVyIGVycm9ycyBvbiBsaW5lc1xyXG4gICAgICAgIC8vIHN0YXJ0aW5nIGNvdW50aW5nIGZyb20gMVxyXG4gICAgICAgIGNodW5rc1tpXSA9IChpICsgMSkgKyAnOiAnICsgY2h1bmtzW2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNodW5rcy5qb2luKCdcXG4nKTtcclxufVxyXG5cclxuLy8gUmV0dXJuIHRydWUgb3IgZXJyb3IgbXNnIGlmIGVycm9yIGhhcHBlbmVkXHJcbmZ1bmN0aW9uIGNoZWNrU2hhZGVyRXJyb3JNc2coX2dsLCBzaGFkZXIsIHNoYWRlclN0cmluZykge1xyXG4gICAgaWYgKCFfZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgX2dsLkNPTVBJTEVfU1RBVFVTKSkge1xyXG4gICAgICAgIHJldHVybiBbX2dsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKSwgYWRkTGluZU51bWJlcnMoc2hhZGVyU3RyaW5nKV0uam9pbignXFxuJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbnZhciB0bXBGbG9hdDMyQXJyYXkxNiA9IG5ldyB2ZW5kb3IuRmxvYXQzMkFycmF5KDE2KTtcclxuXHJcbnZhciBHTFByb2dyYW0gPSBCYXNlLmV4dGVuZCh7XHJcblxyXG4gICAgdW5pZm9ybVNlbWFudGljczoge30sXHJcbiAgICBhdHRyaWJ1dGVzOiB7fVxyXG5cclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fbG9jYXRpb25zID0ge307XHJcblxyXG4gICAgdGhpcy5fdGV4dHVyZVNsb3QgPSAwO1xyXG5cclxuICAgIHRoaXMuX3Byb2dyYW0gPSBudWxsO1xyXG59LCB7XHJcblxyXG4gICAgYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVNsb3QgPSAwO1xyXG4gICAgICAgIHJlbmRlcmVyLmdsLnVzZVByb2dyYW0odGhpcy5fcHJvZ3JhbSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGhhc1VuaWZvcm06IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl9sb2NhdGlvbnNbc3ltYm9sXTtcclxuICAgICAgICByZXR1cm4gbG9jYXRpb24gIT09IG51bGwgJiYgbG9jYXRpb24gIT09IHVuZGVmaW5lZDtcclxuICAgIH0sXHJcblxyXG4gICAgdXNlVGV4dHVyZVNsb3Q6IGZ1bmN0aW9uIChyZW5kZXJlciwgdGV4dHVyZSwgc2xvdCkge1xyXG4gICAgICAgIGlmICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLmdsLmFjdGl2ZVRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRTAgKyBzbG90KTtcclxuICAgICAgICAgICAgLy8gTWF5YmUgdGV4dHVyZSBpcyBub3QgbG9hZGVkIHlldDtcclxuICAgICAgICAgICAgaWYgKHRleHR1cmUuaXNSZW5kZXJhYmxlKCkpIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBCaW5kIHRleHR1cmUgdG8gbnVsbFxyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS51bmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjdXJyZW50VGV4dHVyZVNsb3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZVNsb3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlc2V0VGV4dHVyZVNsb3Q6IGZ1bmN0aW9uIChzbG90KSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVNsb3QgPSBzbG90IHx8IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIHRha2VDdXJyZW50VGV4dHVyZVNsb3Q6IGZ1bmN0aW9uIChyZW5kZXJlciwgdGV4dHVyZSkge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlU2xvdCA9IHRoaXMuX3RleHR1cmVTbG90O1xyXG5cclxuICAgICAgICB0aGlzLnVzZVRleHR1cmVTbG90KHJlbmRlcmVyLCB0ZXh0dXJlLCB0ZXh0dXJlU2xvdCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3RleHR1cmVTbG90Kys7XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlU2xvdDtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0VW5pZm9ybTogZnVuY3Rpb24gKF9nbCwgdHlwZSwgc3ltYm9sLCB2YWx1ZSkge1xyXG4gICAgICAgIHZhciBsb2NhdGlvbk1hcCA9IHRoaXMuX2xvY2F0aW9ucztcclxuICAgICAgICB2YXIgbG9jYXRpb24gPSBsb2NhdGlvbk1hcFtzeW1ib2xdO1xyXG4gICAgICAgIC8vIFVuaWZvcm0gaXMgbm90IGV4aXN0ZWQgaW4gdGhlIHNoYWRlclxyXG4gICAgICAgIGlmIChsb2NhdGlvbiA9PT0gbnVsbCB8fCBsb2NhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdtNCc6XHJcbiAgICAgICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBVc2UgRmxvYXQzMkFycmF5IGlzIG11Y2ggZmFzdGVyIHRoYW4gYXJyYXkgd2hlbiB1bmlmb3JtTWF0cml4NGZ2LlxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG1wRmxvYXQzMkFycmF5MTZbaV0gPSB2YWx1ZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0bXBGbG9hdDMyQXJyYXkxNjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzJpJzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMmkobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMmYnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm0yZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICczaSc6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTNpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICczZic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTNmKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICc0aSc6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTRpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0sIHZhbHVlWzJdLCB2YWx1ZVszXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnNGYnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm00Zihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzFpJzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMWkobG9jYXRpb24sIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICcxZic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTFmKGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMWZ2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMWl2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMWl2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMml2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMml2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMmZ2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnM2l2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtM2l2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnM2Z2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnNGl2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtNGl2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnNGZ2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbTInOlxyXG4gICAgICAgICAgICBjYXNlICdtMnYnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbTMnOlxyXG4gICAgICAgICAgICBjYXNlICdtM3YnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbTR2JzpcclxuICAgICAgICAgICAgICAgIC8vIFJhdyB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIEFycmF5LmlzQXJyYXkodmFsdWVbMF0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkodmFsdWUubGVuZ3RoICogMTYpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB2YWx1ZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxNjsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtjdXJzb3IrK10gPSBpdGVtW2pdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBmYWxzZSwgYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7ICAgLy8gQXJyYXlCdWZmZXJWaWV3XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGZhbHNlLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFVuaWZvcm1PZlNlbWFudGljOiBmdW5jdGlvbiAoX2dsLCBzZW1hbnRpYywgdmFsKSB7XHJcbiAgICAgICAgdmFyIHNlbWFudGljSW5mbyA9IHRoaXMudW5pZm9ybVNlbWFudGljc1tzZW1hbnRpY107XHJcbiAgICAgICAgaWYgKHNlbWFudGljSW5mbykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRVbmlmb3JtKF9nbCwgc2VtYW50aWNJbmZvLnR5cGUsIHNlbWFudGljSW5mby5zeW1ib2wsIHZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVXNlZCBmb3IgY3JlYXRpbmcgVkFPXHJcbiAgICAvLyBFbmFibGUgdGhlIGF0dHJpYnV0ZXMgcGFzc2VkIGluIGFuZCBkaXNhYmxlIHRoZSByZXN0XHJcbiAgICAvLyBFeGFtcGxlIFVzYWdlOlxyXG4gICAgLy8gZW5hYmxlQXR0cmlidXRlcyhyZW5kZXJlciwgW1wicG9zaXRpb25cIiwgXCJ0ZXhjb29yZHNcIl0pXHJcbiAgICBlbmFibGVBdHRyaWJ1dGVzOiBmdW5jdGlvbiAocmVuZGVyZXIsIGF0dHJpYkxpc3QsIHZhbykge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgcHJvZ3JhbSA9IHRoaXMuX3Byb2dyYW07XHJcblxyXG4gICAgICAgIHZhciBsb2NhdGlvbk1hcCA9IHRoaXMuX2xvY2F0aW9ucztcclxuXHJcbiAgICAgICAgdmFyIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0O1xyXG4gICAgICAgIGlmICh2YW8pIHtcclxuICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHQgPSB2YW8uX19lbmFibGVkQXR0cmlidXRlTGlzdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0ID0gZW5hYmxlZEF0dHJpYnV0ZUxpc3RbcmVuZGVyZXIuX191aWRfX107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHQpIHtcclxuICAgICAgICAgICAgLy8gSW4gdmVydGV4IGFycmF5IG9iamVjdCBjb250ZXh0XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkcgRWFjaCB2YW8gb2JqZWN0IG5lZWRzIHRvIGVuYWJsZSBhdHRyaWJ1dGVzIGFnYWluP1xyXG4gICAgICAgICAgICBpZiAodmFvKSB7XHJcbiAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFxyXG4gICAgICAgICAgICAgICAgICAgID0gdmFvLl9fZW5hYmxlZEF0dHJpYnV0ZUxpc3RcclxuICAgICAgICAgICAgICAgICAgICA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRcclxuICAgICAgICAgICAgICAgICAgICA9IGVuYWJsZWRBdHRyaWJ1dGVMaXN0W3JlbmRlcmVyLl9fdWlkX19dXHJcbiAgICAgICAgICAgICAgICAgICAgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbG9jYXRpb25MaXN0ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBzeW1ib2wgPSBhdHRyaWJMaXN0W2ldO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuYXR0cmlidXRlc1tzeW1ib2xdKSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbkxpc3RbaV0gPSAtMTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGxvY2F0aW9uTWFwW3N5bWJvbF07XHJcbiAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IF9nbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgLy8gQXR0cmliIGxvY2F0aW9uIGlzIGEgbnVtYmVyIGZyb20gMCB0byAuLi5cclxuICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbkxpc3RbaV0gPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uTWFwW3N5bWJvbF0gPSBsb2NhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsb2NhdGlvbkxpc3RbaV0gPSBsb2NhdGlvbjtcclxuXHJcbiAgICAgICAgICAgIGlmICghZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbbG9jYXRpb25dKSB7XHJcbiAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtsb2NhdGlvbl0gPSBTSEFERVJfU1RBVEVfVE9fRU5BQkxFO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbbG9jYXRpb25dID0gU0hBREVSX1NUQVRFX0tFRVBfRU5BQkxFO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaChlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtpXSl7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFNIQURFUl9TVEFURV9UT19FTkFCTEU6XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0W2ldID0gU0hBREVSX1NUQVRFX1BFTkRJTkc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFNIQURFUl9TVEFURV9LRUVQX0VOQUJMRTpcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtpXSA9IFNIQURFUl9TVEFURV9QRU5ESU5HO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgLy8gRXhwaXJlZFxyXG4gICAgICAgICAgICAgICAgY2FzZSBTSEFERVJfU1RBVEVfUEVORElORzpcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0W2ldID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uTGlzdDtcclxuICAgIH0sXHJcblxyXG4gICAgYnVpbGRQcm9ncmFtOiBmdW5jdGlvbiAoX2dsLCBzaGFkZXIsIHZlcnRleFNoYWRlckNvZGUsIGZyYWdtZW50U2hhZGVyQ29kZSkge1xyXG4gICAgICAgIHZhciB2ZXJ0ZXhTaGFkZXIgPSBfZ2wuY3JlYXRlU2hhZGVyKF9nbC5WRVJURVhfU0hBREVSKTtcclxuICAgICAgICB2YXIgcHJvZ3JhbSA9IF9nbC5jcmVhdGVQcm9ncmFtKCk7XHJcblxyXG4gICAgICAgIF9nbC5zaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJDb2RlKTtcclxuICAgICAgICBfZ2wuY29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpO1xyXG5cclxuICAgICAgICB2YXIgZnJhZ21lbnRTaGFkZXIgPSBfZ2wuY3JlYXRlU2hhZGVyKF9nbC5GUkFHTUVOVF9TSEFERVIpO1xyXG4gICAgICAgIF9nbC5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyQ29kZSk7XHJcbiAgICAgICAgX2dsLmNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpO1xyXG5cclxuICAgICAgICB2YXIgbXNnID0gY2hlY2tTaGFkZXJFcnJvck1zZyhfZ2wsIHZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyQ29kZSk7XHJcbiAgICAgICAgaWYgKG1zZykge1xyXG4gICAgICAgICAgICByZXR1cm4gbXNnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtc2cgPSBjaGVja1NoYWRlckVycm9yTXNnKF9nbCwgZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyQ29kZSk7XHJcbiAgICAgICAgaWYgKG1zZykge1xyXG4gICAgICAgICAgICByZXR1cm4gbXNnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgX2dsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpO1xyXG4gICAgICAgIF9nbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpO1xyXG4gICAgICAgIC8vIEZvcmNlIHRoZSBwb3NpdGlvbiBiaW5kIHRvIGxvY2F0aW9uIDA7XHJcbiAgICAgICAgaWYgKHNoYWRlci5hdHRyaWJ1dGVTZW1hbnRpY3NbJ1BPU0lUSU9OJ10pIHtcclxuICAgICAgICAgICAgX2dsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAwLCBzaGFkZXIuYXR0cmlidXRlU2VtYW50aWNzWydQT1NJVElPTiddLnN5bWJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBFbHNlIGNob29zZSBhbiBhdHRyaWJ1dGUgYW5kIGJpbmQgdG8gbG9jYXRpb24gMDtcclxuICAgICAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmF0dHJpYnV0ZXMpO1xyXG4gICAgICAgICAgICBfZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDAsIGtleXNbMF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgX2dsLmxpbmtQcm9ncmFtKHByb2dyYW0pO1xyXG5cclxuICAgICAgICBfZ2wuZGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcik7XHJcbiAgICAgICAgX2dsLmRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb2dyYW0gPSBwcm9ncmFtO1xyXG5cclxuICAgICAgICAvLyBTYXZlIGNvZGUuXHJcbiAgICAgICAgdGhpcy52ZXJ0ZXhDb2RlID0gdmVydGV4U2hhZGVyQ29kZTtcclxuICAgICAgICB0aGlzLmZyYWdtZW50Q29kZSA9IGZyYWdtZW50U2hhZGVyQ29kZTtcclxuXHJcbiAgICAgICAgaWYgKCFfZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBfZ2wuTElOS19TVEFUVVMpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnQ291bGQgbm90IGxpbmsgcHJvZ3JhbVxcbicgKyBfZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDYWNoZSB1bmlmb3JtIGxvY2F0aW9uc1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2hhZGVyLnVuaWZvcm1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtU3ltYm9sID0gc2hhZGVyLnVuaWZvcm1zW2ldO1xyXG4gICAgICAgICAgICB0aGlzLl9sb2NhdGlvbnNbdW5pZm9ybVN5bWJvbF0gPSBfZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIHVuaWZvcm1TeW1ib2wpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgR0xQcm9ncmFtOyIsImltcG9ydCBHTFByb2dyYW0gZnJvbSAnLi9HTFByb2dyYW0nO1xyXG5cclxudmFyIGxvb3BSZWdleCA9IC9mb3JcXHMqP1xcKGludFxccyo/X2lkeF9cXHMqXFw9XFxzKihbXFx3LV0rKVxcO1xccypfaWR4X1xccyo8XFxzKihbXFx3LV0rKTtcXHMqX2lkeF9cXHMqXFwrXFwrXFxzKlxcKVxccypcXHtcXHsoW1xcc1xcU10rPykoPz1cXH1cXH0pXFx9XFx9L2c7XHJcblxyXG5mdW5jdGlvbiB1bnJvbGxMb29wKHNoYWRlclN0ciwgZGVmaW5lcywgbGlnaHRzTnVtYmVycykge1xyXG4gICAgLy8gTG9vcCB1bnJvbGwgZnJvbSB0aHJlZS5qcywgaHR0cHM6Ly9naXRodWIuY29tL21yZG9vYi90aHJlZS5qcy9ibG9iL21hc3Rlci9zcmMvcmVuZGVyZXJzL3dlYmdsL1dlYkdMUHJvZ3JhbS5qcyNMMTc1XHJcbiAgICAvLyBJbiBzb21lIGNhc2UgbGlrZSBzaGFkb3dNYXAgaW4gbG9vcCB1c2UgJ2knIHRvIGluZGV4IHZhbHVlIG11Y2ggc2xvd2VyLlxyXG5cclxuICAgIC8vIExvb3AgdXNlIF9pZHhfIGFuZCBpbmNyZWFzZWQgd2l0aCBfaWR4XysrIHdpbGwgYmUgdW5yb2xsZWRcclxuICAgIC8vIFVzZSB7eyB9fSB0byBtYXRjaCB0aGUgcGFpciBzbyB0aGUgaWYgc3RhdGVtZW50IHdpbGwgbm90IGJlIGFmZmVjdGVkXHJcbiAgICAvLyBXcml0ZSBsaWtlIGZvbGxvd2luZ1xyXG4gICAgLy8gZm9yIChpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IDQ7IF9pZHhfKyspIHt7XHJcbiAgICAvLyAgICAgdmVjMyBjb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlc1tfaWR4X10sIHV2KS5yZ2I7XHJcbiAgICAvLyB9fVxyXG4gICAgZnVuY3Rpb24gcmVwbGFjZShtYXRjaCwgc3RhcnQsIGVuZCwgc25pcHBldCkge1xyXG4gICAgICAgIHZhciB1bnJvbGwgPSAnJztcclxuICAgICAgICAvLyBUcnkgdG8gdHJlYXQgYXMgZGVmaW5lXHJcbiAgICAgICAgaWYgKGlzTmFOKHN0YXJ0KSkge1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgaW4gZGVmaW5lcykge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQgPSBkZWZpbmVzW3N0YXJ0XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gbGlnaHROdW1iZXJEZWZpbmVzW3N0YXJ0XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNOYU4oZW5kKSkge1xyXG4gICAgICAgICAgICBpZiAoZW5kIGluIGRlZmluZXMpIHtcclxuICAgICAgICAgICAgICAgIGVuZCA9IGRlZmluZXNbZW5kXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVuZCA9IGxpZ2h0TnVtYmVyRGVmaW5lc1tlbmRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE8gRXJyb3IgY2hlY2tpbmdcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaWR4ID0gcGFyc2VJbnQoc3RhcnQpOyBpZHggPCBwYXJzZUludChlbmQpOyBpZHgrKykge1xyXG4gICAgICAgICAgICAvLyBQRU5ESU5HIEFkZCBzY29wZT9cclxuICAgICAgICAgICAgdW5yb2xsICs9ICd7J1xyXG4gICAgICAgICAgICAgICAgKyBzbmlwcGV0XHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL2Zsb2F0XFxzKlxcKFxccypfaWR4X1xccypcXCkvZywgaWR4LnRvRml4ZWQoMSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL19pZHhfL2csIGlkeClcclxuICAgICAgICAgICAgKyAnfSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdW5yb2xsO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBsaWdodE51bWJlckRlZmluZXMgPSB7fTtcclxuICAgIGZvciAodmFyIGxpZ2h0VHlwZSBpbiBsaWdodHNOdW1iZXJzKSB7XHJcbiAgICAgICAgbGlnaHROdW1iZXJEZWZpbmVzW2xpZ2h0VHlwZSArICdfQ09VTlQnXSA9IGxpZ2h0c051bWJlcnNbbGlnaHRUeXBlXTtcclxuICAgIH1cclxuICAgIHJldHVybiBzaGFkZXJTdHIucmVwbGFjZShsb29wUmVnZXgsIHJlcGxhY2UpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXREZWZpbmVDb2RlKGRlZmluZXMsIGxpZ2h0c051bWJlcnMsIGVuYWJsZWRUZXh0dXJlcykge1xyXG4gICAgdmFyIGRlZmluZVN0ciA9IFtdO1xyXG4gICAgaWYgKGxpZ2h0c051bWJlcnMpIHtcclxuICAgICAgICBmb3IgKHZhciBsaWdodFR5cGUgaW4gbGlnaHRzTnVtYmVycykge1xyXG4gICAgICAgICAgICB2YXIgY291bnQgPSBsaWdodHNOdW1iZXJzW2xpZ2h0VHlwZV07XHJcbiAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGRlZmluZVN0ci5wdXNoKCcjZGVmaW5lICcgKyBsaWdodFR5cGUudG9VcHBlckNhc2UoKSArICdfQ09VTlQgJyArIGNvdW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChlbmFibGVkVGV4dHVyZXMpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuYWJsZWRUZXh0dXJlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgc3ltYm9sID0gZW5hYmxlZFRleHR1cmVzW2ldO1xyXG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaCgnI2RlZmluZSAnICsgc3ltYm9sLnRvVXBwZXJDYXNlKCkgKyAnX0VOQUJMRUQnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBDdXN0b20gRGVmaW5lc1xyXG4gICAgZm9yICh2YXIgc3ltYm9sIGluIGRlZmluZXMpIHtcclxuICAgICAgICB2YXIgdmFsdWUgPSBkZWZpbmVzW3N5bWJvbF07XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGRlZmluZVN0ci5wdXNoKCcjZGVmaW5lICcgKyBzeW1ib2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaCgnI2RlZmluZSAnICsgc3ltYm9sICsgJyAnICsgdmFsdWUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlZmluZVN0ci5qb2luKCdcXG4nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uQ29kZShleHRzKSB7XHJcbiAgICAvLyBFeHRlbnNpb24gZGVjbGFyYXRpb24gbXVzdCBiZWZvcmUgYWxsIG5vbi1wcmVwcm9jZXNzb3IgY29kZXNcclxuICAgIC8vIFRPRE8gdmVydGV4ID8gZXh0ZW5zaW9uIGVudW0gP1xyXG4gICAgdmFyIGV4dGVuc2lvblN0ciA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZXh0ZW5zaW9uU3RyLnB1c2goJyNleHRlbnNpb24gR0xfJyArIGV4dHNbaV0gKyAnIDogZW5hYmxlJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXh0ZW5zaW9uU3RyLmpvaW4oJ1xcbicpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQcmVjaXNpb25Db2RlKHByZWNpc2lvbikge1xyXG4gICAgcmV0dXJuIFsncHJlY2lzaW9uJywgcHJlY2lzaW9uLCAnZmxvYXQnXS5qb2luKCcgJykgKyAnO1xcbidcclxuICAgICAgICArIFsncHJlY2lzaW9uJywgcHJlY2lzaW9uLCAnaW50J10uam9pbignICcpICsgJztcXG4nXHJcbiAgICAgICAgLy8gZGVwdGggdGV4dHVyZSBtYXkgaGF2ZSBwcmVjaXNpb24gcHJvYmxlbSBvbiBpT1MgZGV2aWNlLlxyXG4gICAgICAgICsgWydwcmVjaXNpb24nLCBwcmVjaXNpb24sICdzYW1wbGVyMkQnXS5qb2luKCcgJykgKyAnO1xcbic7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFByb2dyYW1NYW5hZ2VyKHJlbmRlcmVyKSB7XHJcbiAgICB0aGlzLl9yZW5kZXJlciA9IHJlbmRlcmVyO1xyXG4gICAgdGhpcy5fY2FjaGUgPSB7fTtcclxufVxyXG5cclxuUHJvZ3JhbU1hbmFnZXIucHJvdG90eXBlLmdldFByb2dyYW0gPSBmdW5jdGlvbiAocmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHNjZW5lKSB7XHJcbiAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuXHJcbiAgICB2YXIgaXNTa2lubmVkTWVzaCA9IHJlbmRlcmFibGUuaXNTa2lubmVkTWVzaCAmJiByZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2goKTtcclxuICAgIHZhciBrZXkgPSAncycgKyBtYXRlcmlhbC5zaGFkZXIuc2hhZGVySUQgKyAnbScgKyBtYXRlcmlhbC5nZXRQcm9ncmFtS2V5KCk7XHJcbiAgICBpZiAoc2NlbmUpIHtcclxuICAgICAgICBrZXkgKz0gJ3NlJyArIHNjZW5lLmdldFByb2dyYW1LZXkocmVuZGVyYWJsZS5saWdodEdyb3VwKTtcclxuICAgIH1cclxuICAgIGlmIChpc1NraW5uZWRNZXNoKSB7XHJcbiAgICAgICAga2V5ICs9ICcsJyArIHJlbmRlcmFibGUuam9pbnRzLmxlbmd0aDtcclxuICAgIH1cclxuICAgIHZhciBwcm9ncmFtID0gY2FjaGVba2V5XTtcclxuXHJcbiAgICBpZiAocHJvZ3JhbSkge1xyXG4gICAgICAgIHJldHVybiBwcm9ncmFtO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBsaWdodHNOdW1iZXJzID0gc2NlbmUgPyBzY2VuZS5nZXRMaWdodHNOdW1iZXJzKHJlbmRlcmFibGUubGlnaHRHcm91cCkgOiB7fTtcclxuICAgIHZhciByZW5kZXJlciA9IHRoaXMuX3JlbmRlcmVyO1xyXG4gICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgdmFyIGVuYWJsZWRUZXh0dXJlcyA9IG1hdGVyaWFsLmdldEVuYWJsZWRUZXh0dXJlcygpO1xyXG4gICAgdmFyIHNraW5EZWZpbmVDb2RlID0gJyc7XHJcbiAgICBpZiAoaXNTa2lubmVkTWVzaCkge1xyXG4gICAgICAgIHZhciBza2luRGVmaW5lcyA9IHtcclxuICAgICAgICAgICAgU0tJTk5JTkc6IG51bGwsXHJcbiAgICAgICAgICAgIEpPSU5UX0NPVU5UOiByZW5kZXJhYmxlLmpvaW50cy5sZW5ndGhcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChyZW5kZXJhYmxlLmpvaW50cy5sZW5ndGggPiByZW5kZXJlci5nZXRNYXhKb2ludE51bWJlcigpKSB7XHJcbiAgICAgICAgICAgIHNraW5EZWZpbmVzLlVTRV9TS0lOX01BVFJJQ0VTX1RFWFRVUkUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPIEFkZCBza2lubmluZyBjb2RlP1xyXG4gICAgICAgIHNraW5EZWZpbmVDb2RlID0gJ1xcbicgKyBnZXREZWZpbmVDb2RlKHNraW5EZWZpbmVzKSArICdcXG4nO1xyXG4gICAgfVxyXG4gICAgLy8gVE9ETyBPcHRpbWl6ZSBrZXkgZ2VuZXJhdGlvblxyXG4gICAgLy8gVkVSVEVYXHJcbiAgICB2YXIgdmVydGV4RGVmaW5lU3RyID0gc2tpbkRlZmluZUNvZGUgKyBnZXREZWZpbmVDb2RlKG1hdGVyaWFsLnZlcnRleERlZmluZXMsIGxpZ2h0c051bWJlcnMsIGVuYWJsZWRUZXh0dXJlcyk7XHJcbiAgICAvLyBGUkFHTUVOVFxyXG4gICAgdmFyIGZyYWdtZW50RGVmaW5lU3RyID0gc2tpbkRlZmluZUNvZGUgKyBnZXREZWZpbmVDb2RlKG1hdGVyaWFsLmZyYWdtZW50RGVmaW5lcywgbGlnaHRzTnVtYmVycywgZW5hYmxlZFRleHR1cmVzKTtcclxuXHJcbiAgICB2YXIgdmVydGV4Q29kZSA9IHZlcnRleERlZmluZVN0ciArICdcXG4nICsgbWF0ZXJpYWwuc2hhZGVyLnZlcnRleDtcclxuXHJcbiAgICB2YXIgZXh0ZW5zaW9ucyA9IFtcclxuICAgICAgICAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyxcclxuICAgICAgICAnRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCdcclxuICAgIF0uZmlsdGVyKGZ1bmN0aW9uIChleHQpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oZXh0KSAhPSBudWxsO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGV4dGVuc2lvbnMuaW5kZXhPZignRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCcpID49IDApIHtcclxuICAgICAgICBmcmFnbWVudERlZmluZVN0ciArPSAnXFxuI2RlZmluZSBTVVBQT1JUX1RFWFRVUkVfTE9EJztcclxuICAgIH1cclxuICAgIGlmIChleHRlbnNpb25zLmluZGV4T2YoJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycpID49IDApIHtcclxuICAgICAgICBmcmFnbWVudERlZmluZVN0ciArPSAnXFxuI2RlZmluZSBTVVBQT1JUX1NUQU5EQVJEX0RFUklWQVRJVkVTJztcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZnJhZ21lbnRDb2RlID0gZ2V0RXh0ZW5zaW9uQ29kZShleHRlbnNpb25zKSArICdcXG4nXHJcbiAgICAgICAgKyBnZXRQcmVjaXNpb25Db2RlKG1hdGVyaWFsLnByZWNpc2lvbikgKyAnXFxuJ1xyXG4gICAgICAgICsgZnJhZ21lbnREZWZpbmVTdHIgKyAnXFxuJ1xyXG4gICAgICAgICsgbWF0ZXJpYWwuc2hhZGVyLmZyYWdtZW50O1xyXG5cclxuICAgIHZhciBmaW5hbFZlcnRleENvZGUgPSB1bnJvbGxMb29wKHZlcnRleENvZGUsIG1hdGVyaWFsLnZlcnRleERlZmluZXMsIGxpZ2h0c051bWJlcnMpO1xyXG4gICAgdmFyIGZpbmFsRnJhZ21lbnRDb2RlID0gdW5yb2xsTG9vcChmcmFnbWVudENvZGUsIG1hdGVyaWFsLmZyYWdtZW50RGVmaW5lcywgbGlnaHRzTnVtYmVycyk7XHJcblxyXG4gICAgdmFyIHByb2dyYW0gPSBuZXcgR0xQcm9ncmFtKCk7XHJcbiAgICBwcm9ncmFtLnVuaWZvcm1TZW1hbnRpY3MgPSBtYXRlcmlhbC5zaGFkZXIudW5pZm9ybVNlbWFudGljcztcclxuICAgIHByb2dyYW0uYXR0cmlidXRlcyA9IG1hdGVyaWFsLnNoYWRlci5hdHRyaWJ1dGVzO1xyXG4gICAgdmFyIGVycm9yTXNnID0gcHJvZ3JhbS5idWlsZFByb2dyYW0oX2dsLCBtYXRlcmlhbC5zaGFkZXIsIGZpbmFsVmVydGV4Q29kZSwgZmluYWxGcmFnbWVudENvZGUpO1xyXG4gICAgcHJvZ3JhbS5fX2Vycm9yID0gZXJyb3JNc2c7XHJcblxyXG4gICAgY2FjaGVba2V5XSA9IHByb2dyYW07XHJcblxyXG4gICAgcmV0dXJuIHByb2dyYW07XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQcm9ncmFtTWFuYWdlcjsiLCIvKipcclxuICogTWFpbmx5IGRvIHRoZSBwYXJzZSBhbmQgY29tcGlsZSBvZiBzaGFkZXIgc3RyaW5nXHJcbiAqIFN1cHBvcnQgc2hhZGVyIGNvZGUgY2h1bmsgaW1wb3J0IGFuZCBleHBvcnRcclxuICogU3VwcG9ydCBzaGFkZXIgc2VtYW50aWNzXHJcbiAqIGh0dHA6Ly93d3cubnZpZGlhLmNvbS9vYmplY3QvdXNpbmdfc2FzLmh0bWxcclxuICogaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9jb2xsYWRhMmpzb24vaXNzdWVzLzQ1XHJcbiAqL1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcblxyXG52YXIgdW5pZm9ybVJlZ2V4ID0gL3VuaWZvcm1cXHMrKGJvb2x8ZmxvYXR8aW50fHZlYzJ8dmVjM3x2ZWM0fGl2ZWMyfGl2ZWMzfGl2ZWM0fG1hdDJ8bWF0M3xtYXQ0fHNhbXBsZXIyRHxzYW1wbGVyQ3ViZSlcXHMrKFtcXHNcXFNdKj8pOy9nO1xyXG52YXIgYXR0cmlidXRlUmVnZXggPSAvYXR0cmlidXRlXFxzKyhmbG9hdHxpbnR8dmVjMnx2ZWMzfHZlYzQpXFxzKyhbXFxzXFxTXSo/KTsvZztcclxuLy8gT25seSBwYXJzZSBudW1iZXIgZGVmaW5lLlxyXG52YXIgZGVmaW5lUmVnZXggPSAvI2RlZmluZVxccysoXFx3Kyk/KFxccytbXFxkLS5dKyk/XFxzKjs/XFxzKlxcbi9nO1xyXG5cclxudmFyIHVuaWZvcm1UeXBlTWFwID0ge1xyXG4gICAgJ2Jvb2wnOiAnMWknLFxyXG4gICAgJ2ludCc6ICcxaScsXHJcbiAgICAnc2FtcGxlcjJEJzogJ3QnLFxyXG4gICAgJ3NhbXBsZXJDdWJlJzogJ3QnLFxyXG4gICAgJ2Zsb2F0JzogJzFmJyxcclxuICAgICd2ZWMyJzogJzJmJyxcclxuICAgICd2ZWMzJzogJzNmJyxcclxuICAgICd2ZWM0JzogJzRmJyxcclxuICAgICdpdmVjMic6ICcyaScsXHJcbiAgICAnaXZlYzMnOiAnM2knLFxyXG4gICAgJ2l2ZWM0JzogJzRpJyxcclxuICAgICdtYXQyJzogJ20yJyxcclxuICAgICdtYXQzJzogJ20zJyxcclxuICAgICdtYXQ0JzogJ200J1xyXG59O1xyXG5cclxuZnVuY3Rpb24gY3JlYXRlWmVyb0FycmF5KGxlbikge1xyXG4gICAgdmFyIGFyciA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGFycltpXSA9IDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyO1xyXG59XHJcblxyXG52YXIgdW5pZm9ybVZhbHVlQ29uc3RydWN0b3IgPSB7XHJcbiAgICAnYm9vbCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH0sXHJcbiAgICAnaW50JzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMDsgfSxcclxuICAgICdmbG9hdCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDA7IH0sXHJcbiAgICAnc2FtcGxlcjJEJzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbnVsbDsgfSxcclxuICAgICdzYW1wbGVyQ3ViZSc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH0sXHJcblxyXG4gICAgJ3ZlYzInOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoMik7IH0sXHJcbiAgICAndmVjMyc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSgzKTsgfSxcclxuICAgICd2ZWM0JzogZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlWmVyb0FycmF5KDQpOyB9LFxyXG5cclxuICAgICdpdmVjMic6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSgyKTsgfSxcclxuICAgICdpdmVjMyc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSgzKTsgfSxcclxuICAgICdpdmVjNCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSg0KTsgfSxcclxuXHJcbiAgICAnbWF0Mic6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSg0KTsgfSxcclxuICAgICdtYXQzJzogZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlWmVyb0FycmF5KDkpOyB9LFxyXG4gICAgJ21hdDQnOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoMTYpOyB9LFxyXG5cclxuICAgICdhcnJheSc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFtdOyB9XHJcbn07XHJcblxyXG52YXIgYXR0cmlidXRlU2VtYW50aWNzID0gW1xyXG4gICAgJ1BPU0lUSU9OJyxcclxuICAgICdOT1JNQUwnLFxyXG4gICAgJ0JJTk9STUFMJyxcclxuICAgICdUQU5HRU5UJyxcclxuICAgICdURVhDT09SRCcsXHJcbiAgICAnVEVYQ09PUkRfMCcsXHJcbiAgICAnVEVYQ09PUkRfMScsXHJcbiAgICAnQ09MT1InLFxyXG4gICAgLy8gU2tpbm5pbmdcclxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi9ibG9iL21hc3Rlci9zcGVjaWZpY2F0aW9uL1JFQURNRS5tZCNzZW1hbnRpY3NcclxuICAgICdKT0lOVCcsXHJcbiAgICAnV0VJR0hUJ1xyXG5dO1xyXG52YXIgdW5pZm9ybVNlbWFudGljcyA9IFtcclxuICAgICdTS0lOX01BVFJJWCcsXHJcbiAgICAvLyBJbmZvcm1hdGlvbiBhYm91dCB2aWV3cG9ydFxyXG4gICAgJ1ZJRVdQT1JUX1NJWkUnLFxyXG4gICAgJ1ZJRVdQT1JUJyxcclxuICAgICdERVZJQ0VQSVhFTFJBVElPJyxcclxuICAgIC8vIFdpbmRvdyBzaXplIGZvciB3aW5kb3cgcmVsYXRpdmUgY29vcmRpbmF0ZVxyXG4gICAgLy8gaHR0cHM6Ly93d3cub3BlbmdsLm9yZy9zZGsvZG9jcy9tYW4vaHRtbC9nbF9GcmFnQ29vcmQueGh0bWxcclxuICAgICdXSU5ET1dfU0laRScsXHJcbiAgICAvLyBJbmZvbWF0aW9uIGFib3V0IGNhbWVyYVxyXG4gICAgJ05FQVInLFxyXG4gICAgJ0ZBUicsXHJcbiAgICAvLyBUaW1lXHJcbiAgICAnVElNRSdcclxuXTtcclxudmFyIG1hdHJpeFNlbWFudGljcyA9IFtcclxuICAgICdXT1JMRCcsXHJcbiAgICAnVklFVycsXHJcbiAgICAnUFJPSkVDVElPTicsXHJcbiAgICAnV09STERWSUVXJyxcclxuICAgICdWSUVXUFJPSkVDVElPTicsXHJcbiAgICAnV09STERWSUVXUFJPSkVDVElPTicsXHJcbiAgICAnV09STERJTlZFUlNFJyxcclxuICAgICdWSUVXSU5WRVJTRScsXHJcbiAgICAnUFJPSkVDVElPTklOVkVSU0UnLFxyXG4gICAgJ1dPUkxEVklFV0lOVkVSU0UnLFxyXG4gICAgJ1ZJRVdQUk9KRUNUSU9OSU5WRVJTRScsXHJcbiAgICAnV09STERWSUVXUFJPSkVDVElPTklOVkVSU0UnLFxyXG4gICAgJ1dPUkxEVFJBTlNQT1NFJyxcclxuICAgICdWSUVXVFJBTlNQT1NFJyxcclxuICAgICdQUk9KRUNUSU9OVFJBTlNQT1NFJyxcclxuICAgICdXT1JMRFZJRVdUUkFOU1BPU0UnLFxyXG4gICAgJ1ZJRVdQUk9KRUNUSU9OVFJBTlNQT1NFJyxcclxuICAgICdXT1JMRFZJRVdQUk9KRUNUSU9OVFJBTlNQT1NFJyxcclxuICAgICdXT1JMRElOVkVSU0VUUkFOU1BPU0UnLFxyXG4gICAgJ1ZJRVdJTlZFUlNFVFJBTlNQT1NFJyxcclxuICAgICdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRScsXHJcbiAgICAnV09STERWSUVXSU5WRVJTRVRSQU5TUE9TRScsXHJcbiAgICAnVklFV1BST0pFQ1RJT05JTlZFUlNFVFJBTlNQT1NFJyxcclxuICAgICdXT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRSdcclxuXTtcclxuXHJcbnZhciBhdHRyaWJ1dGVTaXplTWFwID0ge1xyXG4gICAgLy8gV2ViR0wgZG9lcyBub3Qgc3VwcG9ydCBpbnRlZ2VyIGF0dHJpYnV0ZXNcclxuICAgICd2ZWM0JzogNCxcclxuICAgICd2ZWMzJzogMyxcclxuICAgICd2ZWMyJzogMixcclxuICAgICdmbG9hdCc6IDFcclxufTtcclxuXHJcblxyXG52YXIgc2hhZGVySURDYWNoZSA9IHt9O1xyXG52YXIgc2hhZGVyQ29kZUNhY2hlID0ge307XHJcblxyXG5mdW5jdGlvbiBnZXRTaGFkZXJJRCh2ZXJ0ZXgsIGZyYWdtZW50KSB7XHJcbiAgICB2YXIga2V5ID0gJ3ZlcnRleDonICsgdmVydGV4ICsgJ2ZyYWdtZW50OicgKyBmcmFnbWVudDtcclxuICAgIGlmIChzaGFkZXJJRENhY2hlW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gc2hhZGVySURDYWNoZVtrZXldO1xyXG4gICAgfVxyXG4gICAgdmFyIGlkID0gdXRpbC5nZW5HVUlEKCk7XHJcbiAgICBzaGFkZXJJRENhY2hlW2tleV0gPSBpZDtcclxuXHJcbiAgICBzaGFkZXJDb2RlQ2FjaGVbaWRdID0ge1xyXG4gICAgICAgIHZlcnRleDogdmVydGV4LFxyXG4gICAgICAgIGZyYWdtZW50OiBmcmFnbWVudFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gaWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUNvbW1lbnQoY29kZSkge1xyXG4gICAgcmV0dXJuIGNvZGUucmVwbGFjZSgvWyBcXHRdKlxcL1xcLy4qXFxuL2csICcnICkgICAvLyByZW1vdmUgLy9cclxuICAgICAgICAucmVwbGFjZSgvWyBcXHRdKlxcL1xcKltcXHNcXFNdKj9cXCpcXC8vZywgJycgKTsgLy8gcmVtb3ZlIC8qICovXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxvZ1N5bnRheEVycm9yKCkge1xyXG4gICAgY29uc29sZS5lcnJvcignV3JvbmcgdW5pZm9ybS9hdHRyaWJ1dGVzIHN5bnRheCcpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZURlY2xhcmF0aW9ucyh0eXBlLCBsaW5lKSB7XHJcbiAgICB2YXIgc3BlcmF0b3JzUmVnZXhwID0gL1ssPVxcKFxcKTpdLztcclxuICAgIHZhciB0b2tlbnMgPSBsaW5lXHJcbiAgICAgICAgLy8gQ29udmVydCBgc3ltYm9sOiBbMSwyLDNdYCB0byBgc3ltYm9sOiB2ZWMzKDEsMiwzKWBcclxuICAgICAgICAucmVwbGFjZSgvOlxccypcXFtcXHMqKC4qKVxccypcXF0vZywgJz0nICsgdHlwZSArICcoJDEpJylcclxuICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCAnJylcclxuICAgICAgICAuc3BsaXQoLyg/PVssPVxcKFxcKTpdKS9nKTtcclxuXHJcbiAgICB2YXIgbmV3VG9rZW5zID0gW107XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0b2tlbnNbaV0ubWF0Y2goc3BlcmF0b3JzUmVnZXhwKSkge1xyXG4gICAgICAgICAgICBuZXdUb2tlbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHRva2Vuc1tpXS5jaGFyQXQoMCksXHJcbiAgICAgICAgICAgICAgICB0b2tlbnNbaV0uc2xpY2UoMSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG5ld1Rva2Vucy5wdXNoKHRva2Vuc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdG9rZW5zID0gbmV3VG9rZW5zO1xyXG5cclxuICAgIHZhciBUWVBFX1NZTUJPTCA9IDA7XHJcbiAgICB2YXIgVFlQRV9BU1NJR04gPSAxO1xyXG4gICAgdmFyIFRZUEVfVkVDID0gMjtcclxuICAgIHZhciBUWVBFX0FSUiA9IDM7XHJcbiAgICB2YXIgVFlQRV9TRU1BTlRJQyA9IDQ7XHJcbiAgICB2YXIgVFlQRV9OT1JNQUwgPSA1O1xyXG5cclxuICAgIHZhciBvcFR5cGUgPSBUWVBFX1NZTUJPTDtcclxuICAgIHZhciBkZWNsYXJhdGlvbnMgPSB7fTtcclxuICAgIHZhciBkZWNsYXJhdGlvblZhbHVlID0gbnVsbDtcclxuICAgIHZhciBjdXJyZW50RGVjbGFyYXRpb247XHJcblxyXG4gICAgYWRkU3ltYm9sKHRva2Vuc1swXSk7XHJcblxyXG4gICAgZnVuY3Rpb24gYWRkU3ltYm9sKHN5bWJvbCkge1xyXG4gICAgICAgIGlmICghc3ltYm9sKSB7XHJcbiAgICAgICAgICAgIGxvZ1N5bnRheEVycm9yKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBhcnJSZXN1bHQgPSBzeW1ib2wubWF0Y2goL1xcWyguKj8pXFxdLyk7XHJcbiAgICAgICAgY3VycmVudERlY2xhcmF0aW9uID0gc3ltYm9sLnJlcGxhY2UoL1xcWyguKj8pXFxdLywgJycpO1xyXG4gICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dID0ge307XHJcbiAgICAgICAgaWYgKGFyclJlc3VsdCkge1xyXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS5pc0FycmF5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0uYXJyYXlTaXplID0gYXJyUmVzdWx0WzFdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTtcclxuICAgICAgICBpZiAoIXRva2VuKSB7ICAgLy8gRW1wdHkgdG9rZW47XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodG9rZW4gPT09ICc9Jykge1xyXG4gICAgICAgICAgICBpZiAob3BUeXBlICE9PSBUWVBFX1NZTUJPTFxyXG4gICAgICAgICAgICAmJiBvcFR5cGUgIT09IFRZUEVfQVJSKSB7XHJcbiAgICAgICAgICAgICAgICBsb2dTeW50YXhFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3BUeXBlID0gVFlQRV9BU1NJR047XHJcblxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodG9rZW4gPT09ICc6Jykge1xyXG4gICAgICAgICAgICBvcFR5cGUgPSBUWVBFX1NFTUFOVElDO1xyXG5cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRva2VuID09PSAnLCcpIHtcclxuICAgICAgICAgICAgaWYgKG9wVHlwZSA9PT0gVFlQRV9WRUMpIHtcclxuICAgICAgICAgICAgICAgIGlmICghKGRlY2xhcmF0aW9uVmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dTeW50YXhFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25WYWx1ZS5wdXNoKCt0b2tlbnNbKytpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvcFR5cGUgPSBUWVBFX05PUk1BTDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRva2VuID09PSAnKScpIHtcclxuICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0udmFsdWUgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheShkZWNsYXJhdGlvblZhbHVlKTtcclxuICAgICAgICAgICAgZGVjbGFyYXRpb25WYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIG9wVHlwZSA9IFRZUEVfTk9STUFMO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodG9rZW4gPT09ICcoJykge1xyXG4gICAgICAgICAgICBpZiAob3BUeXBlICE9PSBUWVBFX1ZFQykge1xyXG4gICAgICAgICAgICAgICAgbG9nU3ludGF4RXJyb3IoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghKGRlY2xhcmF0aW9uVmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpIHtcclxuICAgICAgICAgICAgICAgIGxvZ1N5bnRheEVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWNsYXJhdGlvblZhbHVlLnB1c2goK3Rva2Vuc1srK2ldKTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRva2VuLmluZGV4T2YoJ3ZlYycpID49IDApIHtcclxuICAgICAgICAgICAgaWYgKG9wVHlwZSAhPT0gVFlQRV9BU1NJR05cclxuICAgICAgICAgICAgLy8gQ29tcGF0aXRhYmxlIHdpdGggb2xkIHN5bnRheCBgc3ltYm9sOiBbMSwyLDNdYFxyXG4gICAgICAgICAgICAmJiBvcFR5cGUgIT09IFRZUEVfU0VNQU5USUMpIHtcclxuICAgICAgICAgICAgICAgIGxvZ1N5bnRheEVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcFR5cGUgPSBUWVBFX1ZFQztcclxuICAgICAgICAgICAgZGVjbGFyYXRpb25WYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob3BUeXBlID09PSBUWVBFX0FTU0lHTikge1xyXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS52YWx1ZSA9IHRva2VuID09PSAndHJ1ZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS52YWx1ZSA9IHBhcnNlRmxvYXQodG9rZW4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob3BUeXBlID09PSBUWVBFX1NFTUFOVElDKSB7XHJcbiAgICAgICAgICAgIHZhciBzZW1hbnRpYyA9IHRva2VuO1xyXG4gICAgICAgICAgICBpZiAoYXR0cmlidXRlU2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDBcclxuICAgICAgICAgICAgICAgIHx8IHVuaWZvcm1TZW1hbnRpY3MuaW5kZXhPZihzZW1hbnRpYykgPj0gMFxyXG4gICAgICAgICAgICAgICAgfHwgbWF0cml4U2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDBcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS5zZW1hbnRpYyA9IHNlbWFudGljO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHNlbWFudGljID09PSAnaWdub3JlJyB8fCBzZW1hbnRpYyA9PT0gJ3VuY29uZmlndXJhYmxlJykge1xyXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0uaWdub3JlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBwYXJzZSBhcyBhIGRlZmF1bHQgdHZhbHVlLlxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdib29sJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dLnZhbHVlID0gc2VtYW50aWMgPT09ICd0cnVlJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dLnZhbHVlID0gcGFyc2VGbG9hdChzZW1hbnRpYyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0cmVhdCBhcyBzeW1ib2wuXHJcbiAgICAgICAgYWRkU3ltYm9sKHRva2VuKTtcclxuICAgICAgICBvcFR5cGUgPSBUWVBFX1NZTUJPTDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGVjbGFyYXRpb25zO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKiBAYWxpYXMgY2xheS5TaGFkZXJcclxuICogQHBhcmFtIHtzdHJpbmd9IHZlcnRleFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZnJhZ21lbnRcclxuICogQGV4YW1wbGVcclxuICogLy8gQ3JlYXRlIGEgcGhvbmcgc2hhZGVyXHJcbiAqIHZhciBzaGFkZXIgPSBuZXcgY2xheS5TaGFkZXIoXHJcbiAqICAgICAgY2xheS5TaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkLnZlcnRleCcpLFxyXG4gKiAgICAgIGNsYXkuU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZC5mcmFnbWVudCcpXHJcbiAqICk7XHJcbiAqL1xyXG5mdW5jdGlvbiBTaGFkZXIodmVydGV4LCBmcmFnbWVudCkge1xyXG4gICAgLy8gRmlyc3QgYXJndW1lbnQgY2FuIGJlIHsgdmVydGV4LCBmcmFnbWVudCB9XHJcbiAgICBpZiAodHlwZW9mIHZlcnRleCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICBmcmFnbWVudCA9IHZlcnRleC5mcmFnbWVudDtcclxuICAgICAgICB2ZXJ0ZXggPSB2ZXJ0ZXgudmVydGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHZlcnRleCA9IHJlbW92ZUNvbW1lbnQodmVydGV4KTtcclxuICAgIGZyYWdtZW50ID0gcmVtb3ZlQ29tbWVudChmcmFnbWVudCk7XHJcblxyXG4gICAgdGhpcy5fc2hhZGVySUQgPSBnZXRTaGFkZXJJRCh2ZXJ0ZXgsIGZyYWdtZW50KTtcclxuXHJcbiAgICB0aGlzLl92ZXJ0ZXhDb2RlID0gU2hhZGVyLnBhcnNlSW1wb3J0KHZlcnRleCk7XHJcbiAgICB0aGlzLl9mcmFnbWVudENvZGUgPSBTaGFkZXIucGFyc2VJbXBvcnQoZnJhZ21lbnQpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXR0cmlidXRlU2VtYW50aWNzID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLm1hdHJpeFNlbWFudGljcyA9IHt9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy51bmlmb3JtU2VtYW50aWNzID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLm1hdHJpeFNlbWFudGljS2V5cyA9IFtdO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy51bmlmb3JtVGVtcGxhdGVzID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSB7fTtcclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMudGV4dHVyZXMgPSB7fTtcclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMudmVydGV4RGVmaW5lcyA9IHt9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy5mcmFnbWVudERlZmluZXMgPSB7fTtcclxuXHJcbiAgICB0aGlzLl9wYXJzZUF0dHJpYnV0ZXMoKTtcclxuICAgIHRoaXMuX3BhcnNlVW5pZm9ybXMoKTtcclxuICAgIHRoaXMuX3BhcnNlRGVmaW5lcygpO1xyXG59XHJcblxyXG5TaGFkZXIucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBTaGFkZXIsXHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgbmV3IHVuaWZvcm0gaW5zdGFuY2UgZm9yIG1hdGVyaWFsXHJcbiAgICBjcmVhdGVVbmlmb3JtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB1bmlmb3JtcyA9IHt9O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gdGhpcy51bmlmb3JtVGVtcGxhdGVzKXtcclxuICAgICAgICAgICAgdmFyIHVuaWZvcm1UcGwgPSB0aGlzLnVuaWZvcm1UZW1wbGF0ZXNbc3ltYm9sXTtcclxuICAgICAgICAgICAgdW5pZm9ybXNbc3ltYm9sXSA9IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IHVuaWZvcm1UcGwudHlwZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB1bmlmb3JtVHBsLnZhbHVlKClcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1bmlmb3JtcztcclxuICAgIH0sXHJcblxyXG4gICAgX3BhcnNlSW1wb3J0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fdmVydGV4Q29kZSA9IFNoYWRlci5wYXJzZUltcG9ydCh0aGlzLnZlcnRleCk7XHJcbiAgICAgICAgdGhpcy5fZnJhZ21lbnRDb2RlID0gU2hhZGVyLnBhcnNlSW1wb3J0KHRoaXMuZnJhZ21lbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfYWRkU2VtYW50aWNVbmlmb3JtOiBmdW5jdGlvbiAoc3ltYm9sLCB1bmlmb3JtVHlwZSwgc2VtYW50aWMpIHtcclxuICAgICAgICAvLyBUaGlzIGNhc2UgaXMgb25seSBmb3IgU0tJTl9NQVRSSVhcclxuICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZVNlbWFudGljcy5pbmRleE9mKHNlbWFudGljKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlU2VtYW50aWNzW3NlbWFudGljXSA9IHtcclxuICAgICAgICAgICAgICAgIHN5bWJvbDogc3ltYm9sLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdW5pZm9ybVR5cGVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobWF0cml4U2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDApIHtcclxuICAgICAgICAgICAgdmFyIGlzVHJhbnNwb3NlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBzZW1hbnRpY05vVHJhbnNwb3NlID0gc2VtYW50aWM7XHJcbiAgICAgICAgICAgIGlmIChzZW1hbnRpYy5tYXRjaCgvVFJBTlNQT1NFJC8pKSB7XHJcbiAgICAgICAgICAgICAgICBpc1RyYW5zcG9zZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBzZW1hbnRpY05vVHJhbnNwb3NlID0gc2VtYW50aWMuc2xpY2UoMCwgLTkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubWF0cml4U2VtYW50aWNzW3NlbWFudGljXSA9IHtcclxuICAgICAgICAgICAgICAgIHN5bWJvbDogc3ltYm9sLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdW5pZm9ybVR5cGUsXHJcbiAgICAgICAgICAgICAgICBpc1RyYW5zcG9zZTogaXNUcmFuc3Bvc2UsXHJcbiAgICAgICAgICAgICAgICBzZW1hbnRpY05vVHJhbnNwb3NlOiBzZW1hbnRpY05vVHJhbnNwb3NlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHVuaWZvcm1TZW1hbnRpY3MuaW5kZXhPZihzZW1hbnRpYykgPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1TZW1hbnRpY3Nbc2VtYW50aWNdID0ge1xyXG4gICAgICAgICAgICAgICAgc3ltYm9sOiBzeW1ib2wsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB1bmlmb3JtVHlwZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2FkZE1hdGVyaWFsVW5pZm9ybTogZnVuY3Rpb24gKHN5bWJvbCwgdHlwZSwgdW5pZm9ybVR5cGUsIGRlZmF1bHRWYWx1ZUZ1bmMsIGlzQXJyYXksIG1hdGVyaWFsVW5pZm9ybXMpIHtcclxuICAgICAgICBtYXRlcmlhbFVuaWZvcm1zW3N5bWJvbF0gPSB7XHJcbiAgICAgICAgICAgIHR5cGU6IHVuaWZvcm1UeXBlLFxyXG4gICAgICAgICAgICB2YWx1ZTogaXNBcnJheSA/IHVuaWZvcm1WYWx1ZUNvbnN0cnVjdG9yWydhcnJheSddIDogKGRlZmF1bHRWYWx1ZUZ1bmMgfHwgdW5pZm9ybVZhbHVlQ29uc3RydWN0b3JbdHlwZV0pLFxyXG4gICAgICAgICAgICBzZW1hbnRpYzogbnVsbFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZVVuaWZvcm1zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHVuaWZvcm1zID0ge307XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHZhciBzaGFkZXJUeXBlID0gJ3ZlcnRleCc7XHJcbiAgICAgICAgdGhpcy5fdW5pZm9ybUxpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5fdmVydGV4Q29kZSA9IHRoaXMuX3ZlcnRleENvZGUucmVwbGFjZSh1bmlmb3JtUmVnZXgsIF91bmlmb3JtUGFyc2VyKTtcclxuICAgICAgICBzaGFkZXJUeXBlID0gJ2ZyYWdtZW50JztcclxuICAgICAgICB0aGlzLl9mcmFnbWVudENvZGUgPSB0aGlzLl9mcmFnbWVudENvZGUucmVwbGFjZSh1bmlmb3JtUmVnZXgsIF91bmlmb3JtUGFyc2VyKTtcclxuXHJcbiAgICAgICAgc2VsZi5tYXRyaXhTZW1hbnRpY0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLm1hdHJpeFNlbWFudGljcyk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIG1ha2VEZWZhdWx0VmFsdWVGdW5jKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPSBudWxsID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0gOiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gX3VuaWZvcm1QYXJzZXIoc3RyLCB0eXBlLCBjb250ZW50KSB7XHJcbiAgICAgICAgICAgIHZhciBkZWNsYXJlZFVuaWZvcm1zID0gcGFyc2VEZWNsYXJhdGlvbnModHlwZSwgY29udGVudCk7XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtTWFpblN0ciA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gZGVjbGFyZWRVbmlmb3Jtcykge1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtSW5mbyA9IGRlY2xhcmVkVW5pZm9ybXNbc3ltYm9sXTtcclxuICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpYyA9IHVuaWZvcm1JbmZvLnNlbWFudGljO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRtcFN0ciA9IHN5bWJvbDtcclxuICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtVHlwZSA9IHVuaWZvcm1UeXBlTWFwW3R5cGVdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZUZ1bmMgPSBtYWtlRGVmYXVsdFZhbHVlRnVuYyhkZWNsYXJlZFVuaWZvcm1zW3N5bWJvbF0udmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlY2xhcmVkVW5pZm9ybXNbc3ltYm9sXS5pc0FycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG1wU3RyICs9ICdbJyArIGRlY2xhcmVkVW5pZm9ybXNbc3ltYm9sXS5hcnJheVNpemUgKyAnXSc7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pZm9ybVR5cGUgKz0gJ3YnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHVuaWZvcm1NYWluU3RyLnB1c2godG1wU3RyKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZWxmLl91bmlmb3JtTGlzdC5wdXNoKHN5bWJvbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF1bmlmb3JtSW5mby5pZ25vcmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3NhbXBsZXIyRCcgfHwgdHlwZSA9PT0gJ3NhbXBsZXJDdWJlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUZXh0dXJlIGlzIGRlZmF1bHQgZGlzYWJsZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXh0dXJlc1tzeW1ib2xdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyVHlwZTogc2hhZGVyVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIFNob3VsZCBub3QgZGVjbGFyZSBtdWx0aXBsZSBzeW1ib2xzIGlmIGhhdmUgc2VtYW50aWMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZFNlbWFudGljVW5pZm9ybShzeW1ib2wsIHVuaWZvcm1UeXBlLCBzZW1hbnRpYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRNYXRlcmlhbFVuaWZvcm0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2wsIHR5cGUsIHVuaWZvcm1UeXBlLCBkZWZhdWx0VmFsdWVGdW5jLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbGFyZWRVbmlmb3Jtc1tzeW1ib2xdLmlzQXJyYXksIHVuaWZvcm1zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB1bmlmb3JtTWFpblN0ci5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICA/ICd1bmlmb3JtICcgKyB0eXBlICsgJyAnICsgdW5pZm9ybU1haW5TdHIuam9pbignLCcpICsgJztcXG4nIDogJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVuaWZvcm1UZW1wbGF0ZXMgPSB1bmlmb3JtcztcclxuICAgIH0sXHJcblxyXG4gICAgX3BhcnNlQXR0cmlidXRlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0ge307XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuX3ZlcnRleENvZGUgPSB0aGlzLl92ZXJ0ZXhDb2RlLnJlcGxhY2UoYXR0cmlidXRlUmVnZXgsIF9hdHRyaWJ1dGVQYXJzZXIpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBfYXR0cmlidXRlUGFyc2VyKHN0ciwgdHlwZSwgY29udGVudCkge1xyXG4gICAgICAgICAgICB2YXIgZGVjbGFyZWRBdHRyaWJ1dGVzID0gcGFyc2VEZWNsYXJhdGlvbnModHlwZSwgY29udGVudCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2l6ZSA9IGF0dHJpYnV0ZVNpemVNYXBbdHlwZV0gfHwgMTtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU1haW5TdHIgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIGRlY2xhcmVkQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlbWFudGljID0gZGVjbGFyZWRBdHRyaWJ1dGVzW3N5bWJvbF0uc2VtYW50aWM7XHJcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzW3N5bWJvbF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBDYW4gb25seSBiZSBmbG9hdFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdmbG9hdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogc2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICBzZW1hbnRpYzogc2VtYW50aWMgfHwgbnVsbFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gU2hvdWxkIG5vdCBkZWNsYXJlIG11bHRpcGxlIHN5bWJvbHMgaWYgaGF2ZSBzZW1hbnRpYy5cclxuICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVTZW1hbnRpY3MuaW5kZXhPZihzZW1hbnRpYykgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rb3duIHNlbWFudGljIFwiJyArIHNlbWFudGljICsgJ1wiJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmF0dHJpYnV0ZVNlbWFudGljc1tzZW1hbnRpY10gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2w6IHN5bWJvbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVNYWluU3RyLnB1c2goc3ltYm9sKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuICdhdHRyaWJ1dGUgJyArIHR5cGUgKyAnICcgKyBhdHRyaWJ1dGVNYWluU3RyLmpvaW4oJywnKSArICc7XFxuJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZURlZmluZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHNoYWRlclR5cGUgPSAndmVydGV4JztcclxuICAgICAgICB0aGlzLl92ZXJ0ZXhDb2RlID0gdGhpcy5fdmVydGV4Q29kZS5yZXBsYWNlKGRlZmluZVJlZ2V4LCBfZGVmaW5lUGFyc2VyKTtcclxuICAgICAgICBzaGFkZXJUeXBlID0gJ2ZyYWdtZW50JztcclxuICAgICAgICB0aGlzLl9mcmFnbWVudENvZGUgPSB0aGlzLl9mcmFnbWVudENvZGUucmVwbGFjZShkZWZpbmVSZWdleCwgX2RlZmluZVBhcnNlcik7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQYXJzZXIoc3RyLCBzeW1ib2wsIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhciBkZWZpbmVzID0gc2hhZGVyVHlwZSA9PT0gJ3ZlcnRleCcgPyBzZWxmLnZlcnRleERlZmluZXMgOiBzZWxmLmZyYWdtZW50RGVmaW5lcztcclxuICAgICAgICAgICAgaWYgKCFkZWZpbmVzW3N5bWJvbF0pIHsgLy8gSGF2ZW4ndCBiZWVuIGRlZmluZWQgYnkgdXNlclxyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lc1tzeW1ib2xdID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lc1tzeW1ib2xdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmluZXNbc3ltYm9sXSA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGNhbiBwYXJzZSB0byBmbG9hdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChpc05hTihwYXJzZUZsb2F0KHZhbHVlKSkgPyB2YWx1ZS50cmltKCkgOiBwYXJzZUZsb2F0KHZhbHVlKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgc2hhZGVyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlNoYWRlcn1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgY29kZSA9IHNoYWRlckNvZGVDYWNoZVt0aGlzLl9zaGFkZXJJRF07XHJcbiAgICAgICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoY29kZS52ZXJ0ZXgsIGNvZGUuZnJhZ21lbnQpO1xyXG4gICAgICAgIHJldHVybiBzaGFkZXI7XHJcbiAgICB9XHJcbn07XHJcblxyXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZGVyLnByb3RvdHlwZSwgJ3NoYWRlcklEJywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhZGVySUQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZGVyLnByb3RvdHlwZSwgJ3ZlcnRleCcsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZlcnRleENvZGU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2hhZGVyLnByb3RvdHlwZSwgJ2ZyYWdtZW50Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnJhZ21lbnRDb2RlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlci5wcm90b3R5cGUsICd1bmlmb3JtcycsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VuaWZvcm1MaXN0O1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG52YXIgaW1wb3J0UmVnZXggPSAvKEBpbXBvcnQpXFxzKihbMC05YS16QS1aX1xcLVxcLl0qKS9nO1xyXG5TaGFkZXIucGFyc2VJbXBvcnQgPSBmdW5jdGlvbiAoc2hhZGVyU3RyKSB7XHJcbiAgICBzaGFkZXJTdHIgPSBzaGFkZXJTdHIucmVwbGFjZShpbXBvcnRSZWdleCwgZnVuY3Rpb24gKHN0ciwgaW1wb3J0U3ltYm9sLCBpbXBvcnROYW1lKSB7XHJcbiAgICAgICAgdmFyIHN0ciA9IFNoYWRlci5zb3VyY2UoaW1wb3J0TmFtZSk7XHJcbiAgICAgICAgaWYgKHN0cikge1xyXG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwYXJzZVxyXG4gICAgICAgICAgICByZXR1cm4gU2hhZGVyLnBhcnNlSW1wb3J0KHN0cik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTaGFkZXIgY2h1bmsgXCInICsgaW1wb3J0TmFtZSArICdcIiBub3QgZXhpc3RlZCBpbiBsaWJyYXJ5Jyk7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBzaGFkZXJTdHI7XHJcbn07XHJcblxyXG52YXIgZXhwb3J0UmVnZXggPSAvKEBleHBvcnQpXFxzKihbMC05YS16QS1aX1xcLVxcLl0qKVxccypcXG4oW1xcc1xcU10qPylAZW5kL2c7XHJcblxyXG4vKipcclxuICogSW1wb3J0IHNoYWRlciBzb3VyY2VcclxuICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJTdHJcclxuICogQG1lbWJlck9mIGNsYXkuU2hhZGVyXHJcbiAqL1xyXG5TaGFkZXJbJ2ltcG9ydCddID0gZnVuY3Rpb24gKHNoYWRlclN0cikge1xyXG4gICAgc2hhZGVyU3RyLnJlcGxhY2UoZXhwb3J0UmVnZXgsIGZ1bmN0aW9uIChzdHIsIGV4cG9ydFN5bWJvbCwgZXhwb3J0TmFtZSwgY29kZSkge1xyXG4gICAgICAgIHZhciBjb2RlID0gY29kZS5yZXBsYWNlKC8oXltcXHNcXHRcXHhhMFxcdTMwMDBdKyl8KFtcXHUzMDAwXFx4YTBcXHNcXHRdK1xceDI0KS9nLCAnJyk7XHJcbiAgICAgICAgaWYgKGNvZGUpIHtcclxuICAgICAgICAgICAgdmFyIHBhcnRzID0gZXhwb3J0TmFtZS5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICB2YXIgb2JqID0gU2hhZGVyLmNvZGVzO1xyXG4gICAgICAgICAgICB2YXIgaSA9IDA7XHJcbiAgICAgICAgICAgIHZhciBrZXk7XHJcbiAgICAgICAgICAgIHdoaWxlIChpIDwgcGFydHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAga2V5ID0gcGFydHNbaSsrXTtcclxuICAgICAgICAgICAgICAgIGlmICghb2JqW2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb2JqID0gb2JqW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAga2V5ID0gcGFydHNbaV07XHJcbiAgICAgICAgICAgIG9ialtrZXldID0gY29kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvZGU7XHJcbiAgICB9KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBMaWJyYXJ5IHRvIHN0b3JlIGFsbCB0aGUgbG9hZGVkIHNoYWRlciBjb2Rlc1xyXG4gKiBAdHlwZSB7T2JqZWN0fVxyXG4gKiBAcmVhZE9ubHlcclxuICogQG1lbWJlck9mIGNsYXkuU2hhZGVyXHJcbiAqL1xyXG5TaGFkZXIuY29kZXMgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgc2hhZGVyIHNvdXJjZVxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICogQHJldHVybiB7c3RyaW5nfVxyXG4gKi9cclxuU2hhZGVyLnNvdXJjZSA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICB2YXIgcGFydHMgPSBuYW1lLnNwbGl0KCcuJyk7XHJcbiAgICB2YXIgb2JqID0gU2hhZGVyLmNvZGVzO1xyXG4gICAgdmFyIGkgPSAwO1xyXG4gICAgd2hpbGUgKG9iaiAmJiBpIDwgcGFydHMubGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IHBhcnRzW2krK107XHJcbiAgICAgICAgb2JqID0gb2JqW2tleV07XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAvLyBGSVhNRSBVc2UgZGVmYXVsdCBpbnN0ZWFkXHJcbiAgICAgICAgY29uc29sZS5lcnJvcignU2hhZGVyIFwiJyArIG5hbWUgKyAnXCIgbm90IGV4aXN0ZWQgaW4gbGlicmFyeScpO1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiBvYmo7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTaGFkZXI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LnByZXoudmVydGV4XFxudW5pZm9ybSBtYXQ0IFdWUCA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdXYgOiBURVhDT09SRF8wO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA6IFsxLjAsIDEuMF07XFxudW5pZm9ybSB2ZWMyIHV2T2Zmc2V0IDogWzAuMCwgMC4wXTtcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzMgUCA9IHBvcztcXG4jaWZkZWYgU0tJTk5JTkdcXG4gQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuIFAgPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3MsIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSBXVlAgKiB2ZWM0KFAsIDEuMCk7XFxuIHZfVGV4Y29vcmQgPSB1diAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkucHJlei5mcmFnbWVudFxcbnVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuMDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52b2lkIG1haW4oKVxcbntcXG4gaWYgKGFscGhhQ3V0b2ZmID4gMC4wKSB7XFxuIGlmICh0ZXh0dXJlMkQoYWxwaGFNYXAsIHZfVGV4Y29vcmQpLmEgPD0gYWxwaGFDdXRvZmYpIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiB9XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLDAuMCwwLjAsMS4wKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHtHTE1BVF9FUFNJTE9OLCBHTE1BVF9BUlJBWV9UWVBFIH0gZnJvbSAnLi9jb21tb24nO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyA0eDQgTWF0cml4XHJcbiAqIEBuYW1lIG1hdDRcclxuICovXHJcblxyXG52YXIgbWF0NCA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0NFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bWF0NH0gYSBuZXcgNHg0IG1hdHJpeFxyXG4gKi9cclxubWF0NC5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgxNik7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMDtcclxuICAgIG91dFs1XSA9IDE7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDA7XHJcbiAgICBvdXRbOV0gPSAwO1xyXG4gICAgb3V0WzEwXSA9IDE7XHJcbiAgICBvdXRbMTFdID0gMDtcclxuICAgIG91dFsxMl0gPSAwO1xyXG4gICAgb3V0WzEzXSA9IDA7XHJcbiAgICBvdXRbMTRdID0gMDtcclxuICAgIG91dFsxNV0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDQgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gYSBuZXcgNHg0IG1hdHJpeFxyXG4gKi9cclxubWF0NC5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgxNik7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICBvdXRbOV0gPSBhWzldO1xyXG4gICAgb3V0WzEwXSA9IGFbMTBdO1xyXG4gICAgb3V0WzExXSA9IGFbMTFdO1xyXG4gICAgb3V0WzEyXSA9IGFbMTJdO1xyXG4gICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgb3V0WzE1XSA9IGFbMTVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0NCB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIG91dFszXSA9IGFbM107XHJcbiAgICBvdXRbNF0gPSBhWzRdO1xyXG4gICAgb3V0WzVdID0gYVs1XTtcclxuICAgIG91dFs2XSA9IGFbNl07XHJcbiAgICBvdXRbN10gPSBhWzddO1xyXG4gICAgb3V0WzhdID0gYVs4XTtcclxuICAgIG91dFs5XSA9IGFbOV07XHJcbiAgICBvdXRbMTBdID0gYVsxMF07XHJcbiAgICBvdXRbMTFdID0gYVsxMV07XHJcbiAgICBvdXRbMTJdID0gYVsxMl07XHJcbiAgICBvdXRbMTNdID0gYVsxM107XHJcbiAgICBvdXRbMTRdID0gYVsxNF07XHJcbiAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBhIG1hdDQgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMDtcclxuICAgIG91dFs1XSA9IDE7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDA7XHJcbiAgICBvdXRbOV0gPSAwO1xyXG4gICAgb3V0WzEwXSA9IDE7XHJcbiAgICBvdXRbMTFdID0gMDtcclxuICAgIG91dFsxMl0gPSAwO1xyXG4gICAgb3V0WzEzXSA9IDA7XHJcbiAgICBvdXRbMTRdID0gMDtcclxuICAgIG91dFsxNV0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXHJcbiAgICBpZiAob3V0ID09PSBhKSB7XHJcbiAgICAgICAgdmFyIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM10sXHJcbiAgICAgICAgICAgIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXHJcbiAgICAgICAgICAgIGEyMyA9IGFbMTFdO1xyXG5cclxuICAgICAgICBvdXRbMV0gPSBhWzRdO1xyXG4gICAgICAgIG91dFsyXSA9IGFbOF07XHJcbiAgICAgICAgb3V0WzNdID0gYVsxMl07XHJcbiAgICAgICAgb3V0WzRdID0gYTAxO1xyXG4gICAgICAgIG91dFs2XSA9IGFbOV07XHJcbiAgICAgICAgb3V0WzddID0gYVsxM107XHJcbiAgICAgICAgb3V0WzhdID0gYTAyO1xyXG4gICAgICAgIG91dFs5XSA9IGExMjtcclxuICAgICAgICBvdXRbMTFdID0gYVsxNF07XHJcbiAgICAgICAgb3V0WzEyXSA9IGEwMztcclxuICAgICAgICBvdXRbMTNdID0gYTEzO1xyXG4gICAgICAgIG91dFsxNF0gPSBhMjM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG91dFswXSA9IGFbMF07XHJcbiAgICAgICAgb3V0WzFdID0gYVs0XTtcclxuICAgICAgICBvdXRbMl0gPSBhWzhdO1xyXG4gICAgICAgIG91dFszXSA9IGFbMTJdO1xyXG4gICAgICAgIG91dFs0XSA9IGFbMV07XHJcbiAgICAgICAgb3V0WzVdID0gYVs1XTtcclxuICAgICAgICBvdXRbNl0gPSBhWzldO1xyXG4gICAgICAgIG91dFs3XSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFs4XSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzldID0gYVs2XTtcclxuICAgICAgICBvdXRbMTBdID0gYVsxMF07XHJcbiAgICAgICAgb3V0WzExXSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxMl0gPSBhWzNdO1xyXG4gICAgICAgIG91dFsxM10gPSBhWzddO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzExXTtcclxuICAgICAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnZlcnRzIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxyXG4gICAgICAgIGExMCA9IGFbNF0sIGExMSA9IGFbNV0sIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXHJcbiAgICAgICAgYTIwID0gYVs4XSwgYTIxID0gYVs5XSwgYTIyID0gYVsxMF0sIGEyMyA9IGFbMTFdLFxyXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF0sIGEzMyA9IGFbMTVdLFxyXG5cclxuICAgICAgICBiMDAgPSBhMDAgKiBhMTEgLSBhMDEgKiBhMTAsXHJcbiAgICAgICAgYjAxID0gYTAwICogYTEyIC0gYTAyICogYTEwLFxyXG4gICAgICAgIGIwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMCxcclxuICAgICAgICBiMDMgPSBhMDEgKiBhMTIgLSBhMDIgKiBhMTEsXHJcbiAgICAgICAgYjA0ID0gYTAxICogYTEzIC0gYTAzICogYTExLFxyXG4gICAgICAgIGIwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMixcclxuICAgICAgICBiMDYgPSBhMjAgKiBhMzEgLSBhMjEgKiBhMzAsXHJcbiAgICAgICAgYjA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwLFxyXG4gICAgICAgIGIwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMCxcclxuICAgICAgICBiMDkgPSBhMjEgKiBhMzIgLSBhMjIgKiBhMzEsXHJcbiAgICAgICAgYjEwID0gYTIxICogYTMzIC0gYTIzICogYTMxLFxyXG4gICAgICAgIGIxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMixcclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxyXG4gICAgICAgIGRldCA9IGIwMCAqIGIxMSAtIGIwMSAqIGIxMCArIGIwMiAqIGIwOSArIGIwMyAqIGIwOCAtIGIwNCAqIGIwNyArIGIwNSAqIGIwNjtcclxuXHJcbiAgICBpZiAoIWRldCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuICAgIG91dFswXSA9IChhMTEgKiBiMTEgLSBhMTIgKiBiMTAgKyBhMTMgKiBiMDkpICogZGV0O1xyXG4gICAgb3V0WzFdID0gKGEwMiAqIGIxMCAtIGEwMSAqIGIxMSAtIGEwMyAqIGIwOSkgKiBkZXQ7XHJcbiAgICBvdXRbMl0gPSAoYTMxICogYjA1IC0gYTMyICogYjA0ICsgYTMzICogYjAzKSAqIGRldDtcclxuICAgIG91dFszXSA9IChhMjIgKiBiMDQgLSBhMjEgKiBiMDUgLSBhMjMgKiBiMDMpICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGExMiAqIGIwOCAtIGExMCAqIGIxMSAtIGExMyAqIGIwNykgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoYTAwICogYjExIC0gYTAyICogYjA4ICsgYTAzICogYjA3KSAqIGRldDtcclxuICAgIG91dFs2XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xyXG4gICAgb3V0WzddID0gKGEyMCAqIGIwNSAtIGEyMiAqIGIwMiArIGEyMyAqIGIwMSkgKiBkZXQ7XHJcbiAgICBvdXRbOF0gPSAoYTEwICogYjEwIC0gYTExICogYjA4ICsgYTEzICogYjA2KSAqIGRldDtcclxuICAgIG91dFs5XSA9IChhMDEgKiBiMDggLSBhMDAgKiBiMTAgLSBhMDMgKiBiMDYpICogZGV0O1xyXG4gICAgb3V0WzEwXSA9IChhMzAgKiBiMDQgLSBhMzEgKiBiMDIgKyBhMzMgKiBiMDApICogZGV0O1xyXG4gICAgb3V0WzExXSA9IChhMjEgKiBiMDIgLSBhMjAgKiBiMDQgLSBhMjMgKiBiMDApICogZGV0O1xyXG4gICAgb3V0WzEyXSA9IChhMTEgKiBiMDcgLSBhMTAgKiBiMDkgLSBhMTIgKiBiMDYpICogZGV0O1xyXG4gICAgb3V0WzEzXSA9IChhMDAgKiBiMDkgLSBhMDEgKiBiMDcgKyBhMDIgKiBiMDYpICogZGV0O1xyXG4gICAgb3V0WzE0XSA9IChhMzEgKiBiMDEgLSBhMzAgKiBiMDMgLSBhMzIgKiBiMDApICogZGV0O1xyXG4gICAgb3V0WzE1XSA9IChhMjAgKiBiMDMgLSBhMjEgKiBiMDEgKyBhMjIgKiBiMDApICogZGV0O1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYWRqdWdhdGUgb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LmFkam9pbnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxyXG4gICAgICAgIGExMCA9IGFbNF0sIGExMSA9IGFbNV0sIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXHJcbiAgICAgICAgYTIwID0gYVs4XSwgYTIxID0gYVs5XSwgYTIyID0gYVsxMF0sIGEyMyA9IGFbMTFdLFxyXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF0sIGEzMyA9IGFbMTVdO1xyXG5cclxuICAgIG91dFswXSAgPSAgKGExMSAqIChhMjIgKiBhMzMgLSBhMjMgKiBhMzIpIC0gYTIxICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgKyBhMzEgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSk7XHJcbiAgICBvdXRbMV0gID0gLShhMDEgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMSAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMxICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMikpO1xyXG4gICAgb3V0WzJdICA9ICAoYTAxICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgLSBhMTEgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMSAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpKTtcclxuICAgIG91dFszXSAgPSAtKGEwMSAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpIC0gYTExICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMikgKyBhMjEgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XHJcbiAgICBvdXRbNF0gID0gLShhMTAgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMCAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpICsgYTMwICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikpO1xyXG4gICAgb3V0WzVdICA9ICAoYTAwICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjAgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMCAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpKTtcclxuICAgIG91dFs2XSAgPSAtKGEwMCAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpIC0gYTEwICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzAgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XHJcbiAgICBvdXRbN10gID0gIChhMDAgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSAtIGExMCAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpICsgYTIwICogKGEwMiAqIGExMyAtIGEwMyAqIGExMikpO1xyXG4gICAgb3V0WzhdICA9ICAoYTEwICogKGEyMSAqIGEzMyAtIGEyMyAqIGEzMSkgLSBhMjAgKiAoYTExICogYTMzIC0gYTEzICogYTMxKSArIGEzMCAqIChhMTEgKiBhMjMgLSBhMTMgKiBhMjEpKTtcclxuICAgIG91dFs5XSAgPSAtKGEwMCAqIChhMjEgKiBhMzMgLSBhMjMgKiBhMzEpIC0gYTIwICogKGEwMSAqIGEzMyAtIGEwMyAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTIzIC0gYTAzICogYTIxKSk7XHJcbiAgICBvdXRbMTBdID0gIChhMDAgKiAoYTExICogYTMzIC0gYTEzICogYTMxKSAtIGExMCAqIChhMDEgKiBhMzMgLSBhMDMgKiBhMzEpICsgYTMwICogKGEwMSAqIGExMyAtIGEwMyAqIGExMSkpO1xyXG4gICAgb3V0WzExXSA9IC0oYTAwICogKGExMSAqIGEyMyAtIGExMyAqIGEyMSkgLSBhMTAgKiAoYTAxICogYTIzIC0gYTAzICogYTIxKSArIGEyMCAqIChhMDEgKiBhMTMgLSBhMDMgKiBhMTEpKTtcclxuICAgIG91dFsxMl0gPSAtKGExMCAqIChhMjEgKiBhMzIgLSBhMjIgKiBhMzEpIC0gYTIwICogKGExMSAqIGEzMiAtIGExMiAqIGEzMSkgKyBhMzAgKiAoYTExICogYTIyIC0gYTEyICogYTIxKSk7XHJcbiAgICBvdXRbMTNdID0gIChhMDAgKiAoYTIxICogYTMyIC0gYTIyICogYTMxKSAtIGEyMCAqIChhMDEgKiBhMzIgLSBhMDIgKiBhMzEpICsgYTMwICogKGEwMSAqIGEyMiAtIGEwMiAqIGEyMSkpO1xyXG4gICAgb3V0WzE0XSA9IC0oYTAwICogKGExMSAqIGEzMiAtIGExMiAqIGEzMSkgLSBhMTAgKiAoYTAxICogYTMyIC0gYTAyICogYTMxKSArIGEzMCAqIChhMDEgKiBhMTIgLSBhMDIgKiBhMTEpKTtcclxuICAgIG91dFsxNV0gPSAgKGEwMCAqIChhMTEgKiBhMjIgLSBhMTIgKiBhMjEpIC0gYTEwICogKGEwMSAqIGEyMiAtIGEwMiAqIGEyMSkgKyBhMjAgKiAoYTAxICogYTEyIC0gYTAyICogYTExKSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cclxubWF0NC5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSwgYTAzID0gYVszXSxcclxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXSxcclxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdLCBhMzMgPSBhWzE1XSxcclxuXHJcbiAgICAgICAgYjAwID0gYTAwICogYTExIC0gYTAxICogYTEwLFxyXG4gICAgICAgIGIwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMCxcclxuICAgICAgICBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTAsXHJcbiAgICAgICAgYjAzID0gYTAxICogYTEyIC0gYTAyICogYTExLFxyXG4gICAgICAgIGIwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMSxcclxuICAgICAgICBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTIsXHJcbiAgICAgICAgYjA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwLFxyXG4gICAgICAgIGIwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMCxcclxuICAgICAgICBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzAsXHJcbiAgICAgICAgYjA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxLFxyXG4gICAgICAgIGIxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMSxcclxuICAgICAgICBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzI7XHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxyXG4gICAgcmV0dXJuIGIwMCAqIGIxMSAtIGIwMSAqIGIxMCArIGIwMiAqIGIwOSArIGIwMyAqIGIwOCAtIGIwNCAqIGIwNyArIGIwNSAqIGIwNjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQ0J3NcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0NH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxyXG4gICAgICAgIGExMCA9IGFbNF0sIGExMSA9IGFbNV0sIGExMiA9IGFbNl0sIGExMyA9IGFbN10sXHJcbiAgICAgICAgYTIwID0gYVs4XSwgYTIxID0gYVs5XSwgYTIyID0gYVsxMF0sIGEyMyA9IGFbMTFdLFxyXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF0sIGEzMyA9IGFbMTVdO1xyXG5cclxuICAgIC8vIENhY2hlIG9ubHkgdGhlIGN1cnJlbnQgbGluZSBvZiB0aGUgc2Vjb25kIG1hdHJpeFxyXG4gICAgdmFyIGIwICA9IGJbMF0sIGIxID0gYlsxXSwgYjIgPSBiWzJdLCBiMyA9IGJbM107XHJcbiAgICBvdXRbMF0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjAgKyBiMyphMzA7XHJcbiAgICBvdXRbMV0gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjEgKyBiMyphMzE7XHJcbiAgICBvdXRbMl0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjIgKyBiMyphMzI7XHJcbiAgICBvdXRbM10gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XHJcblxyXG4gICAgYjAgPSBiWzRdOyBiMSA9IGJbNV07IGIyID0gYls2XTsgYjMgPSBiWzddO1xyXG4gICAgb3V0WzRdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xyXG4gICAgb3V0WzVdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxICsgYjMqYTMxO1xyXG4gICAgb3V0WzZdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYjMqYTMyO1xyXG4gICAgb3V0WzddID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xyXG5cclxuICAgIGIwID0gYls4XTsgYjEgPSBiWzldOyBiMiA9IGJbMTBdOyBiMyA9IGJbMTFdO1xyXG4gICAgb3V0WzhdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xyXG4gICAgb3V0WzldID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxICsgYjMqYTMxO1xyXG4gICAgb3V0WzEwXSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMiArIGIzKmEzMjtcclxuICAgIG91dFsxMV0gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XHJcblxyXG4gICAgYjAgPSBiWzEyXTsgYjEgPSBiWzEzXTsgYjIgPSBiWzE0XTsgYjMgPSBiWzE1XTtcclxuICAgIG91dFsxMl0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjAgKyBiMyphMzA7XHJcbiAgICBvdXRbMTNdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxICsgYjMqYTMxO1xyXG4gICAgb3V0WzE0XSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMiArIGIzKmEzMjtcclxuICAgIG91dFsxNV0gPSBiMCphMDMgKyBiMSphMTMgKyBiMiphMjMgKyBiMyphMzM7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIGFmZmluZSBtYXQ0J3NcclxuICogQWRkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9waXNzYW5nXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQubXVsdGlwbHlBZmZpbmUgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLFxyXG4gICAgICAgIGEzMCA9IGFbMTJdLCBhMzEgPSBhWzEzXSwgYTMyID0gYVsxNF07XHJcblxyXG4gICAgLy8gQ2FjaGUgb25seSB0aGUgY3VycmVudCBsaW5lIG9mIHRoZSBzZWNvbmQgbWF0cml4XHJcbiAgICB2YXIgYjAgID0gYlswXSwgYjEgPSBiWzFdLCBiMiA9IGJbMl07XHJcbiAgICBvdXRbMF0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjA7XHJcbiAgICBvdXRbMV0gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjE7XHJcbiAgICBvdXRbMl0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjI7XHJcbiAgICAvLyBvdXRbM10gPSAwO1xyXG5cclxuICAgIGIwID0gYls0XTsgYjEgPSBiWzVdOyBiMiA9IGJbNl07XHJcbiAgICBvdXRbNF0gPSBiMCphMDAgKyBiMSphMTAgKyBiMiphMjA7XHJcbiAgICBvdXRbNV0gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjE7XHJcbiAgICBvdXRbNl0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjI7XHJcbiAgICAvLyBvdXRbN10gPSAwO1xyXG5cclxuICAgIGIwID0gYls4XTsgYjEgPSBiWzldOyBiMiA9IGJbMTBdO1xyXG4gICAgb3V0WzhdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwO1xyXG4gICAgb3V0WzldID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxO1xyXG4gICAgb3V0WzEwXSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMjtcclxuICAgIC8vIG91dFsxMV0gPSAwO1xyXG5cclxuICAgIGIwID0gYlsxMl07IGIxID0gYlsxM107IGIyID0gYlsxNF07XHJcbiAgICBvdXRbMTJdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYTMwO1xyXG4gICAgb3V0WzEzXSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGEzMTtcclxuICAgIG91dFsxNF0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjIgKyBhMzI7XHJcbiAgICAvLyBvdXRbMTVdID0gMTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQ0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbm1hdDQubXVsID0gbWF0NC5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDQubXVsdGlwbHlBZmZpbmV9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxubWF0NC5tdWxBZmZpbmUgPSBtYXQ0Lm11bHRpcGx5QWZmaW5lO1xyXG4vKipcclxuICogVHJhbnNsYXRlIGEgbWF0NCBieSB0aGUgZ2l2ZW4gdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHRyYW5zbGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgdmVjdG9yIHRvIHRyYW5zbGF0ZSBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHYpIHtcclxuICAgIHZhciB4ID0gdlswXSwgeSA9IHZbMV0sIHogPSB2WzJdLFxyXG4gICAgICAgIGEwMCwgYTAxLCBhMDIsIGEwMyxcclxuICAgICAgICBhMTAsIGExMSwgYTEyLCBhMTMsXHJcbiAgICAgICAgYTIwLCBhMjEsIGEyMiwgYTIzO1xyXG5cclxuICAgIGlmIChhID09PSBvdXQpIHtcclxuICAgICAgICBvdXRbMTJdID0gYVswXSAqIHggKyBhWzRdICogeSArIGFbOF0gKiB6ICsgYVsxMl07XHJcbiAgICAgICAgb3V0WzEzXSA9IGFbMV0gKiB4ICsgYVs1XSAqIHkgKyBhWzldICogeiArIGFbMTNdO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzJdICogeCArIGFbNl0gKiB5ICsgYVsxMF0gKiB6ICsgYVsxNF07XHJcbiAgICAgICAgb3V0WzE1XSA9IGFbM10gKiB4ICsgYVs3XSAqIHkgKyBhWzExXSAqIHogKyBhWzE1XTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYTAwID0gYVswXTsgYTAxID0gYVsxXTsgYTAyID0gYVsyXTsgYTAzID0gYVszXTtcclxuICAgICAgICBhMTAgPSBhWzRdOyBhMTEgPSBhWzVdOyBhMTIgPSBhWzZdOyBhMTMgPSBhWzddO1xyXG4gICAgICAgIGEyMCA9IGFbOF07IGEyMSA9IGFbOV07IGEyMiA9IGFbMTBdOyBhMjMgPSBhWzExXTtcclxuXHJcbiAgICAgICAgb3V0WzBdID0gYTAwOyBvdXRbMV0gPSBhMDE7IG91dFsyXSA9IGEwMjsgb3V0WzNdID0gYTAzO1xyXG4gICAgICAgIG91dFs0XSA9IGExMDsgb3V0WzVdID0gYTExOyBvdXRbNl0gPSBhMTI7IG91dFs3XSA9IGExMztcclxuICAgICAgICBvdXRbOF0gPSBhMjA7IG91dFs5XSA9IGEyMTsgb3V0WzEwXSA9IGEyMjsgb3V0WzExXSA9IGEyMztcclxuXHJcbiAgICAgICAgb3V0WzEyXSA9IGEwMCAqIHggKyBhMTAgKiB5ICsgYTIwICogeiArIGFbMTJdO1xyXG4gICAgICAgIG91dFsxM10gPSBhMDEgKiB4ICsgYTExICogeSArIGEyMSAqIHogKyBhWzEzXTtcclxuICAgICAgICBvdXRbMTRdID0gYTAyICogeCArIGExMiAqIHkgKyBhMjIgKiB6ICsgYVsxNF07XHJcbiAgICAgICAgb3V0WzE1XSA9IGEwMyAqIHggKyBhMTMgKiB5ICsgYTIzICogeiArIGFbMTVdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2NhbGVzIHRoZSBtYXQ0IGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7dmVjM30gdiB0aGUgdmVjMyB0byBzY2FsZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICoqL1xyXG5tYXQ0LnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICB2YXIgeCA9IHZbMF0sIHkgPSB2WzFdLCB6ID0gdlsyXTtcclxuXHJcbiAgICBvdXRbMF0gPSBhWzBdICogeDtcclxuICAgIG91dFsxXSA9IGFbMV0gKiB4O1xyXG4gICAgb3V0WzJdID0gYVsyXSAqIHg7XHJcbiAgICBvdXRbM10gPSBhWzNdICogeDtcclxuICAgIG91dFs0XSA9IGFbNF0gKiB5O1xyXG4gICAgb3V0WzVdID0gYVs1XSAqIHk7XHJcbiAgICBvdXRbNl0gPSBhWzZdICogeTtcclxuICAgIG91dFs3XSA9IGFbN10gKiB5O1xyXG4gICAgb3V0WzhdID0gYVs4XSAqIHo7XHJcbiAgICBvdXRbOV0gPSBhWzldICogejtcclxuICAgIG91dFsxMF0gPSBhWzEwXSAqIHo7XHJcbiAgICBvdXRbMTFdID0gYVsxMV0gKiB6O1xyXG4gICAgb3V0WzEyXSA9IGFbMTJdO1xyXG4gICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgb3V0WzE1XSA9IGFbMTVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0NCBieSB0aGUgZ2l2ZW4gYW5nbGVcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEBwYXJhbSB7dmVjM30gYXhpcyB0aGUgYXhpcyB0byByb3RhdGUgYXJvdW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkLCBheGlzKSB7XHJcbiAgICB2YXIgeCA9IGF4aXNbMF0sIHkgPSBheGlzWzFdLCB6ID0gYXhpc1syXSxcclxuICAgICAgICBsZW4gPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KSxcclxuICAgICAgICBzLCBjLCB0LFxyXG4gICAgICAgIGEwMCwgYTAxLCBhMDIsIGEwMyxcclxuICAgICAgICBhMTAsIGExMSwgYTEyLCBhMTMsXHJcbiAgICAgICAgYTIwLCBhMjEsIGEyMiwgYTIzLFxyXG4gICAgICAgIGIwMCwgYjAxLCBiMDIsXHJcbiAgICAgICAgYjEwLCBiMTEsIGIxMixcclxuICAgICAgICBiMjAsIGIyMSwgYjIyO1xyXG5cclxuICAgIGlmIChNYXRoLmFicyhsZW4pIDwgR0xNQVRfRVBTSUxPTikgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICAgIGxlbiA9IDEgLyBsZW47XHJcbiAgICB4ICo9IGxlbjtcclxuICAgIHkgKj0gbGVuO1xyXG4gICAgeiAqPSBsZW47XHJcblxyXG4gICAgcyA9IE1hdGguc2luKHJhZCk7XHJcbiAgICBjID0gTWF0aC5jb3MocmFkKTtcclxuICAgIHQgPSAxIC0gYztcclxuXHJcbiAgICBhMDAgPSBhWzBdOyBhMDEgPSBhWzFdOyBhMDIgPSBhWzJdOyBhMDMgPSBhWzNdO1xyXG4gICAgYTEwID0gYVs0XTsgYTExID0gYVs1XTsgYTEyID0gYVs2XTsgYTEzID0gYVs3XTtcclxuICAgIGEyMCA9IGFbOF07IGEyMSA9IGFbOV07IGEyMiA9IGFbMTBdOyBhMjMgPSBhWzExXTtcclxuXHJcbiAgICAvLyBDb25zdHJ1Y3QgdGhlIGVsZW1lbnRzIG9mIHRoZSByb3RhdGlvbiBtYXRyaXhcclxuICAgIGIwMCA9IHggKiB4ICogdCArIGM7IGIwMSA9IHkgKiB4ICogdCArIHogKiBzOyBiMDIgPSB6ICogeCAqIHQgLSB5ICogcztcclxuICAgIGIxMCA9IHggKiB5ICogdCAtIHogKiBzOyBiMTEgPSB5ICogeSAqIHQgKyBjOyBiMTIgPSB6ICogeSAqIHQgKyB4ICogcztcclxuICAgIGIyMCA9IHggKiB6ICogdCArIHkgKiBzOyBiMjEgPSB5ICogeiAqIHQgLSB4ICogczsgYjIyID0geiAqIHogKiB0ICsgYztcclxuXHJcbiAgICAvLyBQZXJmb3JtIHJvdGF0aW9uLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxyXG4gICAgb3V0WzBdID0gYTAwICogYjAwICsgYTEwICogYjAxICsgYTIwICogYjAyO1xyXG4gICAgb3V0WzFdID0gYTAxICogYjAwICsgYTExICogYjAxICsgYTIxICogYjAyO1xyXG4gICAgb3V0WzJdID0gYTAyICogYjAwICsgYTEyICogYjAxICsgYTIyICogYjAyO1xyXG4gICAgb3V0WzNdID0gYTAzICogYjAwICsgYTEzICogYjAxICsgYTIzICogYjAyO1xyXG4gICAgb3V0WzRdID0gYTAwICogYjEwICsgYTEwICogYjExICsgYTIwICogYjEyO1xyXG4gICAgb3V0WzVdID0gYTAxICogYjEwICsgYTExICogYjExICsgYTIxICogYjEyO1xyXG4gICAgb3V0WzZdID0gYTAyICogYjEwICsgYTEyICogYjExICsgYTIyICogYjEyO1xyXG4gICAgb3V0WzddID0gYTAzICogYjEwICsgYTEzICogYjExICsgYTIzICogYjEyO1xyXG4gICAgb3V0WzhdID0gYTAwICogYjIwICsgYTEwICogYjIxICsgYTIwICogYjIyO1xyXG4gICAgb3V0WzldID0gYTAxICogYjIwICsgYTExICogYjIxICsgYTIxICogYjIyO1xyXG4gICAgb3V0WzEwXSA9IGEwMiAqIGIyMCArIGExMiAqIGIyMSArIGEyMiAqIGIyMjtcclxuICAgIG91dFsxMV0gPSBhMDMgKiBiMjAgKyBhMTMgKiBiMjEgKyBhMjMgKiBiMjI7XHJcblxyXG4gICAgaWYgKGEgIT09IG91dCkgeyAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCBsYXN0IHJvd1xyXG4gICAgICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgICAgICBvdXRbMTNdID0gYVsxM107XHJcbiAgICAgICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhWzE1XTtcclxuICAgIH1cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIG1hdHJpeCBieSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBYIGF4aXNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQucm90YXRlWCA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgdmFyIHMgPSBNYXRoLnNpbihyYWQpLFxyXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpLFxyXG4gICAgICAgIGExMCA9IGFbNF0sXHJcbiAgICAgICAgYTExID0gYVs1XSxcclxuICAgICAgICBhMTIgPSBhWzZdLFxyXG4gICAgICAgIGExMyA9IGFbN10sXHJcbiAgICAgICAgYTIwID0gYVs4XSxcclxuICAgICAgICBhMjEgPSBhWzldLFxyXG4gICAgICAgIGEyMiA9IGFbMTBdLFxyXG4gICAgICAgIGEyMyA9IGFbMTFdO1xyXG5cclxuICAgIGlmIChhICE9PSBvdXQpIHsgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgcm93c1xyXG4gICAgICAgIG91dFswXSAgPSBhWzBdO1xyXG4gICAgICAgIG91dFsxXSAgPSBhWzFdO1xyXG4gICAgICAgIG91dFsyXSAgPSBhWzJdO1xyXG4gICAgICAgIG91dFszXSAgPSBhWzNdO1xyXG4gICAgICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgICAgICBvdXRbMTNdID0gYVsxM107XHJcbiAgICAgICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhWzE1XTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXHJcbiAgICBvdXRbNF0gPSBhMTAgKiBjICsgYTIwICogcztcclxuICAgIG91dFs1XSA9IGExMSAqIGMgKyBhMjEgKiBzO1xyXG4gICAgb3V0WzZdID0gYTEyICogYyArIGEyMiAqIHM7XHJcbiAgICBvdXRbN10gPSBhMTMgKiBjICsgYTIzICogcztcclxuICAgIG91dFs4XSA9IGEyMCAqIGMgLSBhMTAgKiBzO1xyXG4gICAgb3V0WzldID0gYTIxICogYyAtIGExMSAqIHM7XHJcbiAgICBvdXRbMTBdID0gYTIyICogYyAtIGExMiAqIHM7XHJcbiAgICBvdXRbMTFdID0gYTIzICogYyAtIGExMyAqIHM7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXRyaXggYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWSBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LnJvdGF0ZVkgPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcclxuICAgIHZhciBzID0gTWF0aC5zaW4ocmFkKSxcclxuICAgICAgICBjID0gTWF0aC5jb3MocmFkKSxcclxuICAgICAgICBhMDAgPSBhWzBdLFxyXG4gICAgICAgIGEwMSA9IGFbMV0sXHJcbiAgICAgICAgYTAyID0gYVsyXSxcclxuICAgICAgICBhMDMgPSBhWzNdLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sXHJcbiAgICAgICAgYTIxID0gYVs5XSxcclxuICAgICAgICBhMjIgPSBhWzEwXSxcclxuICAgICAgICBhMjMgPSBhWzExXTtcclxuXHJcbiAgICBpZiAoYSAhPT0gb3V0KSB7IC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIHJvd3NcclxuICAgICAgICBvdXRbNF0gID0gYVs0XTtcclxuICAgICAgICBvdXRbNV0gID0gYVs1XTtcclxuICAgICAgICBvdXRbNl0gID0gYVs2XTtcclxuICAgICAgICBvdXRbN10gID0gYVs3XTtcclxuICAgICAgICBvdXRbMTJdID0gYVsxMl07XHJcbiAgICAgICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgICAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxyXG4gICAgb3V0WzBdID0gYTAwICogYyAtIGEyMCAqIHM7XHJcbiAgICBvdXRbMV0gPSBhMDEgKiBjIC0gYTIxICogcztcclxuICAgIG91dFsyXSA9IGEwMiAqIGMgLSBhMjIgKiBzO1xyXG4gICAgb3V0WzNdID0gYTAzICogYyAtIGEyMyAqIHM7XHJcbiAgICBvdXRbOF0gPSBhMDAgKiBzICsgYTIwICogYztcclxuICAgIG91dFs5XSA9IGEwMSAqIHMgKyBhMjEgKiBjO1xyXG4gICAgb3V0WzEwXSA9IGEwMiAqIHMgKyBhMjIgKiBjO1xyXG4gICAgb3V0WzExXSA9IGEwMyAqIHMgKyBhMjMgKiBjO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0cml4IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFogYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5yb3RhdGVaID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICB2YXIgcyA9IE1hdGguc2luKHJhZCksXHJcbiAgICAgICAgYyA9IE1hdGguY29zKHJhZCksXHJcbiAgICAgICAgYTAwID0gYVswXSxcclxuICAgICAgICBhMDEgPSBhWzFdLFxyXG4gICAgICAgIGEwMiA9IGFbMl0sXHJcbiAgICAgICAgYTAzID0gYVszXSxcclxuICAgICAgICBhMTAgPSBhWzRdLFxyXG4gICAgICAgIGExMSA9IGFbNV0sXHJcbiAgICAgICAgYTEyID0gYVs2XSxcclxuICAgICAgICBhMTMgPSBhWzddO1xyXG5cclxuICAgIGlmIChhICE9PSBvdXQpIHsgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgbGFzdCByb3dcclxuICAgICAgICBvdXRbOF0gID0gYVs4XTtcclxuICAgICAgICBvdXRbOV0gID0gYVs5XTtcclxuICAgICAgICBvdXRbMTBdID0gYVsxMF07XHJcbiAgICAgICAgb3V0WzExXSA9IGFbMTFdO1xyXG4gICAgICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgICAgICBvdXRbMTNdID0gYVsxM107XHJcbiAgICAgICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhWzE1XTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXHJcbiAgICBvdXRbMF0gPSBhMDAgKiBjICsgYTEwICogcztcclxuICAgIG91dFsxXSA9IGEwMSAqIGMgKyBhMTEgKiBzO1xyXG4gICAgb3V0WzJdID0gYTAyICogYyArIGExMiAqIHM7XHJcbiAgICBvdXRbM10gPSBhMDMgKiBjICsgYTEzICogcztcclxuICAgIG91dFs0XSA9IGExMCAqIGMgLSBhMDAgKiBzO1xyXG4gICAgb3V0WzVdID0gYTExICogYyAtIGEwMSAqIHM7XHJcbiAgICBvdXRbNl0gPSBhMTIgKiBjIC0gYTAyICogcztcclxuICAgIG91dFs3XSA9IGExMyAqIGMgLSBhMDMgKiBzO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBxdWF0ZXJuaW9uIHJvdGF0aW9uIGFuZCB2ZWN0b3IgdHJhbnNsYXRpb25cclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgdmVjKTtcclxuICogICAgIHZhciBxdWF0TWF0ID0gbWF0NC5jcmVhdGUoKTtcclxuICogICAgIHF1YXQ0LnRvTWF0NChxdWF0LCBxdWF0TWF0KTtcclxuICogICAgIG1hdDQubXVsdGlwbHkoZGVzdCwgcXVhdE1hdCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0NH0gcSBSb3RhdGlvbiBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gdiBUcmFuc2xhdGlvbiB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbiA9IGZ1bmN0aW9uIChvdXQsIHEsIHYpIHtcclxuICAgIC8vIFF1YXRlcm5pb24gbWF0aFxyXG4gICAgdmFyIHggPSBxWzBdLCB5ID0gcVsxXSwgeiA9IHFbMl0sIHcgPSBxWzNdLFxyXG4gICAgICAgIHgyID0geCArIHgsXHJcbiAgICAgICAgeTIgPSB5ICsgeSxcclxuICAgICAgICB6MiA9IHogKyB6LFxyXG5cclxuICAgICAgICB4eCA9IHggKiB4MixcclxuICAgICAgICB4eSA9IHggKiB5MixcclxuICAgICAgICB4eiA9IHggKiB6MixcclxuICAgICAgICB5eSA9IHkgKiB5MixcclxuICAgICAgICB5eiA9IHkgKiB6MixcclxuICAgICAgICB6eiA9IHogKiB6MixcclxuICAgICAgICB3eCA9IHcgKiB4MixcclxuICAgICAgICB3eSA9IHcgKiB5MixcclxuICAgICAgICB3eiA9IHcgKiB6MjtcclxuXHJcbiAgICBvdXRbMF0gPSAxIC0gKHl5ICsgenopO1xyXG4gICAgb3V0WzFdID0geHkgKyB3ejtcclxuICAgIG91dFsyXSA9IHh6IC0gd3k7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0geHkgLSB3ejtcclxuICAgIG91dFs1XSA9IDEgLSAoeHggKyB6eik7XHJcbiAgICBvdXRbNl0gPSB5eiArIHd4O1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IHh6ICsgd3k7XHJcbiAgICBvdXRbOV0gPSB5eiAtIHd4O1xyXG4gICAgb3V0WzEwXSA9IDEgLSAoeHggKyB5eSk7XHJcbiAgICBvdXRbMTFdID0gMDtcclxuICAgIG91dFsxMl0gPSB2WzBdO1xyXG4gICAgb3V0WzEzXSA9IHZbMV07XHJcbiAgICBvdXRbMTRdID0gdlsyXTtcclxuICAgIG91dFsxNV0gPSAxO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5tYXQ0LmZyb21RdWF0ID0gZnVuY3Rpb24gKG91dCwgcSkge1xyXG4gICAgdmFyIHggPSBxWzBdLCB5ID0gcVsxXSwgeiA9IHFbMl0sIHcgPSBxWzNdLFxyXG4gICAgICAgIHgyID0geCArIHgsXHJcbiAgICAgICAgeTIgPSB5ICsgeSxcclxuICAgICAgICB6MiA9IHogKyB6LFxyXG5cclxuICAgICAgICB4eCA9IHggKiB4MixcclxuICAgICAgICB5eCA9IHkgKiB4MixcclxuICAgICAgICB5eSA9IHkgKiB5MixcclxuICAgICAgICB6eCA9IHogKiB4MixcclxuICAgICAgICB6eSA9IHogKiB5MixcclxuICAgICAgICB6eiA9IHogKiB6MixcclxuICAgICAgICB3eCA9IHcgKiB4MixcclxuICAgICAgICB3eSA9IHcgKiB5MixcclxuICAgICAgICB3eiA9IHcgKiB6MjtcclxuXHJcbiAgICBvdXRbMF0gPSAxIC0geXkgLSB6ejtcclxuICAgIG91dFsxXSA9IHl4ICsgd3o7XHJcbiAgICBvdXRbMl0gPSB6eCAtIHd5O1xyXG4gICAgb3V0WzNdID0gMDtcclxuXHJcbiAgICBvdXRbNF0gPSB5eCAtIHd6O1xyXG4gICAgb3V0WzVdID0gMSAtIHh4IC0geno7XHJcbiAgICBvdXRbNl0gPSB6eSArIHd4O1xyXG4gICAgb3V0WzddID0gMDtcclxuXHJcbiAgICBvdXRbOF0gPSB6eCArIHd5O1xyXG4gICAgb3V0WzldID0genkgLSB3eDtcclxuICAgIG91dFsxMF0gPSAxIC0geHggLSB5eTtcclxuICAgIG91dFsxMV0gPSAwO1xyXG5cclxuICAgIG91dFsxMl0gPSAwO1xyXG4gICAgb3V0WzEzXSA9IDA7XHJcbiAgICBvdXRbMTRdID0gMDtcclxuICAgIG91dFsxNV0gPSAxO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgZnJ1c3R1bSBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtOdW1iZXJ9IGxlZnQgTGVmdCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmlnaHQgUmlnaHQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IGJvdHRvbSBCb3R0b20gYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IHRvcCBUb3AgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LmZydXN0dW0gPSBmdW5jdGlvbiAob3V0LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xyXG4gICAgdmFyIHJsID0gMSAvIChyaWdodCAtIGxlZnQpLFxyXG4gICAgICAgIHRiID0gMSAvICh0b3AgLSBib3R0b20pLFxyXG4gICAgICAgIG5mID0gMSAvIChuZWFyIC0gZmFyKTtcclxuICAgIG91dFswXSA9IChuZWFyICogMikgKiBybDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSAobmVhciAqIDIpICogdGI7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IChyaWdodCArIGxlZnQpICogcmw7XHJcbiAgICBvdXRbOV0gPSAodG9wICsgYm90dG9tKSAqIHRiO1xyXG4gICAgb3V0WzEwXSA9IChmYXIgKyBuZWFyKSAqIG5mO1xyXG4gICAgb3V0WzExXSA9IC0xO1xyXG4gICAgb3V0WzEyXSA9IDA7XHJcbiAgICBvdXRbMTNdID0gMDtcclxuICAgIG91dFsxNF0gPSAoZmFyICogbmVhciAqIDIpICogbmY7XHJcbiAgICBvdXRbMTVdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtudW1iZXJ9IGZvdnkgVmVydGljYWwgZmllbGQgb2YgdmlldyBpbiByYWRpYW5zXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhc3BlY3QgQXNwZWN0IHJhdGlvLiB0eXBpY2FsbHkgdmlld3BvcnQgd2lkdGgvaGVpZ2h0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZWFyIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5wZXJzcGVjdGl2ZSA9IGZ1bmN0aW9uIChvdXQsIGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKSB7XHJcbiAgICB2YXIgZiA9IDEuMCAvIE1hdGgudGFuKGZvdnkgLyAyKSxcclxuICAgICAgICBuZiA9IDEgLyAobmVhciAtIGZhcik7XHJcbiAgICBvdXRbMF0gPSBmIC8gYXNwZWN0O1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMDtcclxuICAgIG91dFs1XSA9IGY7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDA7XHJcbiAgICBvdXRbOV0gPSAwO1xyXG4gICAgb3V0WzEwXSA9IChmYXIgKyBuZWFyKSAqIG5mO1xyXG4gICAgb3V0WzExXSA9IC0xO1xyXG4gICAgb3V0WzEyXSA9IDA7XHJcbiAgICBvdXRbMTNdID0gMDtcclxuICAgIG91dFsxNF0gPSAoMiAqIGZhciAqIG5lYXIpICogbmY7XHJcbiAgICBvdXRbMTVdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgb3J0aG9nb25hbCBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBib3VuZHNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge251bWJlcn0gbGVmdCBMZWZ0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByaWdodCBSaWdodCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gYm90dG9tIEJvdHRvbSBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gdG9wIFRvcCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gbmVhciBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBmYXIgRmFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQub3J0aG8gPSBmdW5jdGlvbiAob3V0LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xyXG4gICAgdmFyIGxyID0gMSAvIChsZWZ0IC0gcmlnaHQpLFxyXG4gICAgICAgIGJ0ID0gMSAvIChib3R0b20gLSB0b3ApLFxyXG4gICAgICAgIG5mID0gMSAvIChuZWFyIC0gZmFyKTtcclxuICAgIG91dFswXSA9IC0yICogbHI7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDA7XHJcbiAgICBvdXRbNF0gPSAwO1xyXG4gICAgb3V0WzVdID0gLTIgKiBidDtcclxuICAgIG91dFs2XSA9IDA7XHJcbiAgICBvdXRbN10gPSAwO1xyXG4gICAgb3V0WzhdID0gMDtcclxuICAgIG91dFs5XSA9IDA7XHJcbiAgICBvdXRbMTBdID0gMiAqIG5mO1xyXG4gICAgb3V0WzExXSA9IDA7XHJcbiAgICBvdXRbMTJdID0gKGxlZnQgKyByaWdodCkgKiBscjtcclxuICAgIG91dFsxM10gPSAodG9wICsgYm90dG9tKSAqIGJ0O1xyXG4gICAgb3V0WzE0XSA9IChmYXIgKyBuZWFyKSAqIG5mO1xyXG4gICAgb3V0WzE1XSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIGxvb2stYXQgbWF0cml4IHdpdGggdGhlIGdpdmVuIGV5ZSBwb3NpdGlvbiwgZm9jYWwgcG9pbnQsIGFuZCB1cCBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHt2ZWMzfSBleWUgUG9zaXRpb24gb2YgdGhlIHZpZXdlclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGNlbnRlciBQb2ludCB0aGUgdmlld2VyIGlzIGxvb2tpbmcgYXRcclxuICogQHBhcmFtIHt2ZWMzfSB1cCB2ZWMzIHBvaW50aW5nIHVwXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQubG9va0F0ID0gZnVuY3Rpb24gKG91dCwgZXllLCBjZW50ZXIsIHVwKSB7XHJcbiAgICB2YXIgeDAsIHgxLCB4MiwgeTAsIHkxLCB5MiwgejAsIHoxLCB6MiwgbGVuLFxyXG4gICAgICAgIGV5ZXggPSBleWVbMF0sXHJcbiAgICAgICAgZXlleSA9IGV5ZVsxXSxcclxuICAgICAgICBleWV6ID0gZXllWzJdLFxyXG4gICAgICAgIHVweCA9IHVwWzBdLFxyXG4gICAgICAgIHVweSA9IHVwWzFdLFxyXG4gICAgICAgIHVweiA9IHVwWzJdLFxyXG4gICAgICAgIGNlbnRlcnggPSBjZW50ZXJbMF0sXHJcbiAgICAgICAgY2VudGVyeSA9IGNlbnRlclsxXSxcclxuICAgICAgICBjZW50ZXJ6ID0gY2VudGVyWzJdO1xyXG5cclxuICAgIGlmIChNYXRoLmFicyhleWV4IC0gY2VudGVyeCkgPCBHTE1BVF9FUFNJTE9OICYmXHJcbiAgICAgICAgTWF0aC5hYnMoZXlleSAtIGNlbnRlcnkpIDwgR0xNQVRfRVBTSUxPTiAmJlxyXG4gICAgICAgIE1hdGguYWJzKGV5ZXogLSBjZW50ZXJ6KSA8IEdMTUFUX0VQU0lMT04pIHtcclxuICAgICAgICByZXR1cm4gbWF0NC5pZGVudGl0eShvdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHowID0gZXlleCAtIGNlbnRlcng7XHJcbiAgICB6MSA9IGV5ZXkgLSBjZW50ZXJ5O1xyXG4gICAgejIgPSBleWV6IC0gY2VudGVyejtcclxuXHJcbiAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KHowICogejAgKyB6MSAqIHoxICsgejIgKiB6Mik7XHJcbiAgICB6MCAqPSBsZW47XHJcbiAgICB6MSAqPSBsZW47XHJcbiAgICB6MiAqPSBsZW47XHJcblxyXG4gICAgeDAgPSB1cHkgKiB6MiAtIHVweiAqIHoxO1xyXG4gICAgeDEgPSB1cHogKiB6MCAtIHVweCAqIHoyO1xyXG4gICAgeDIgPSB1cHggKiB6MSAtIHVweSAqIHowO1xyXG4gICAgbGVuID0gTWF0aC5zcXJ0KHgwICogeDAgKyB4MSAqIHgxICsgeDIgKiB4Mik7XHJcbiAgICBpZiAoIWxlbikge1xyXG4gICAgICAgIHgwID0gMDtcclxuICAgICAgICB4MSA9IDA7XHJcbiAgICAgICAgeDIgPSAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZW4gPSAxIC8gbGVuO1xyXG4gICAgICAgIHgwICo9IGxlbjtcclxuICAgICAgICB4MSAqPSBsZW47XHJcbiAgICAgICAgeDIgKj0gbGVuO1xyXG4gICAgfVxyXG5cclxuICAgIHkwID0gejEgKiB4MiAtIHoyICogeDE7XHJcbiAgICB5MSA9IHoyICogeDAgLSB6MCAqIHgyO1xyXG4gICAgeTIgPSB6MCAqIHgxIC0gejEgKiB4MDtcclxuXHJcbiAgICBsZW4gPSBNYXRoLnNxcnQoeTAgKiB5MCArIHkxICogeTEgKyB5MiAqIHkyKTtcclxuICAgIGlmICghbGVuKSB7XHJcbiAgICAgICAgeTAgPSAwO1xyXG4gICAgICAgIHkxID0gMDtcclxuICAgICAgICB5MiA9IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxlbiA9IDEgLyBsZW47XHJcbiAgICAgICAgeTAgKj0gbGVuO1xyXG4gICAgICAgIHkxICo9IGxlbjtcclxuICAgICAgICB5MiAqPSBsZW47XHJcbiAgICB9XHJcblxyXG4gICAgb3V0WzBdID0geDA7XHJcbiAgICBvdXRbMV0gPSB5MDtcclxuICAgIG91dFsyXSA9IHowO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IHgxO1xyXG4gICAgb3V0WzVdID0geTE7XHJcbiAgICBvdXRbNl0gPSB6MTtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSB4MjtcclxuICAgIG91dFs5XSA9IHkyO1xyXG4gICAgb3V0WzEwXSA9IHoyO1xyXG4gICAgb3V0WzExXSA9IDA7XHJcbiAgICBvdXRbMTJdID0gLSh4MCAqIGV5ZXggKyB4MSAqIGV5ZXkgKyB4MiAqIGV5ZXopO1xyXG4gICAgb3V0WzEzXSA9IC0oeTAgKiBleWV4ICsgeTEgKiBleWV5ICsgeTIgKiBleWV6KTtcclxuICAgIG91dFsxNF0gPSAtKHowICogZXlleCArIHoxICogZXlleSArIHoyICogZXlleik7XHJcbiAgICBvdXRbMTVdID0gMTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cclxubWF0NC5mcm9iID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybihNYXRoLnNxcnQoTWF0aC5wb3coYVswXSwgMikgKyBNYXRoLnBvdyhhWzFdLCAyKSArIE1hdGgucG93KGFbMl0sIDIpICsgTWF0aC5wb3coYVszXSwgMikgKyBNYXRoLnBvdyhhWzRdLCAyKSArIE1hdGgucG93KGFbNV0sIDIpICsgTWF0aC5wb3coYVs2XSwgMikgKyBNYXRoLnBvdyhhWzddLCAyKSArIE1hdGgucG93KGFbOF0sIDIpICsgTWF0aC5wb3coYVs5XSwgMikgKyBNYXRoLnBvdyhhWzEwXSwgMikgKyBNYXRoLnBvdyhhWzExXSwgMikgKyBNYXRoLnBvdyhhWzEyXSwgMikgKyBNYXRoLnBvdyhhWzEzXSwgMikgKyBNYXRoLnBvdyhhWzE0XSwgMikgKyBNYXRoLnBvdyhhWzE1XSwgMikgKSlcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG1hdDQ7IiwiLy8gVE9ETyBSZXNvdXJjZXMgbGlrZSBzaGFkZXIsIHRleHR1cmUsIGdlb21ldHJ5IHJlZmVyZW5jZSBtYW5hZ2VtZW50XHJcbi8vIFRyYWNlIGFuZCBmaW5kIG91dCB3aGljaCBzaGFkZXIsIHRleHR1cmUsIGdlb21ldHJ5IGNhbiBiZSBkZXN0cm95ZWRcclxuaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgR0xJbmZvIGZyb20gJy4vY29yZS9HTEluZm8nO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4vY29yZS92ZW5kb3InO1xyXG5cclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tICcuL21hdGgvVmVjdG9yMic7XHJcbmltcG9ydCBQcm9ncmFtTWFuYWdlciBmcm9tICcuL2dwdS9Qcm9ncmFtTWFuYWdlcic7XHJcblxyXG4vLyBMaWdodCBoZWFkZXJcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuL1NoYWRlcic7XHJcblxyXG5pbXBvcnQgcHJlekVzc2wgZnJvbSAnLi9zaGFkZXIvc291cmNlL3ByZXouZ2xzbC5qcyc7XHJcblNoYWRlclsnaW1wb3J0J10ocHJlekVzc2wpO1xyXG5cclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcbnZhciBtYXQ0Q3JlYXRlID0gbWF0NC5jcmVhdGU7XHJcblxyXG52YXIgZXJyb3JTaGFkZXIgPSB7fTtcclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRHZXRNYXRlcmlhbChyZW5kZXJhYmxlKSB7XHJcbiAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbDtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0R2V0VW5pZm9ybShyZW5kZXJhYmxlLCBtYXRlcmlhbCwgc3ltYm9sKSB7XHJcbiAgICByZXR1cm4gbWF0ZXJpYWwudW5pZm9ybXNbc3ltYm9sXS52YWx1ZTtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0SXNNYXRlcmlhbENoYW5nZWQocmVuZGVyYWJsZWQsIHByZXZSZW5kZXJhYmxlLCBtYXRlcmlhbCwgcHJldk1hdGVyaWFsKSB7XHJcbiAgICByZXR1cm4gbWF0ZXJpYWwgIT09IHByZXZNYXRlcmlhbDtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0SWZSZW5kZXIocmVuZGVyYWJsZSkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5vb3AoKSB7fVxyXG5cclxudmFyIGF0dHJpYnV0ZUJ1ZmZlclR5cGVNYXAgPSB7XHJcbiAgICBmbG9hdDogZ2xlbnVtLkZMT0FULFxyXG4gICAgYnl0ZTogZ2xlbnVtLkJZVEUsXHJcbiAgICB1Ynl0ZTogZ2xlbnVtLlVOU0lHTkVEX0JZVEUsXHJcbiAgICBzaG9ydDogZ2xlbnVtLlNIT1JULFxyXG4gICAgdXNob3J0OiBnbGVudW0uVU5TSUdORURfU0hPUlRcclxufTtcclxuXHJcbmZ1bmN0aW9uIFZlcnRleEFycmF5T2JqZWN0KGF2YWlsYWJsZUF0dHJpYnV0ZXMsIGF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMsIGluZGljZXNCdWZmZXIpIHtcclxuICAgIHRoaXMuYXZhaWxhYmxlQXR0cmlidXRlcyA9IGF2YWlsYWJsZUF0dHJpYnV0ZXM7XHJcbiAgICB0aGlzLmF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMgPSBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzO1xyXG4gICAgdGhpcy5pbmRpY2VzQnVmZmVyID0gaW5kaWNlc0J1ZmZlcjtcclxuXHJcbiAgICB0aGlzLnZhbyA9IG51bGw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIFBsYWNlSG9sZGVyVGV4dHVyZShyZW5kZXJlcikge1xyXG4gICAgdmFyIGJsYW5rQ2FudmFzO1xyXG4gICAgdmFyIHdlYmdsVGV4dHVyZTtcclxuICAgIHRoaXMuYmluZCA9IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIGlmICghYmxhbmtDYW52YXMpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBFbnZpcm9ubWVudCBub3Qgc3VwcG9ydCBjcmVhdGVDYW52YXMuXHJcbiAgICAgICAgICAgIGJsYW5rQ2FudmFzID0gdmVuZG9yLmNyZWF0ZUNhbnZhcygpO1xyXG4gICAgICAgICAgICBibGFua0NhbnZhcy53aWR0aCA9IGJsYW5rQ2FudmFzLmhlaWdodCA9IDE7XHJcbiAgICAgICAgICAgIGJsYW5rQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgZmlyc3RCaW5kID0gIXdlYmdsVGV4dHVyZTtcclxuICAgICAgICBpZiAoZmlyc3RCaW5kKSB7XHJcbiAgICAgICAgICAgIHdlYmdsVGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgd2ViZ2xUZXh0dXJlKTtcclxuICAgICAgICBpZiAoZmlyc3RCaW5kKSB7XHJcbiAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgYmxhbmtDYW52YXMpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aGlzLnVuYmluZCA9IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHJlbmRlcmVyLmdsLmJpbmRUZXh0dXJlKHJlbmRlcmVyLmdsLlRFWFRVUkVfMkQsIG51bGwpO1xyXG4gICAgfTtcclxuICAgIHRoaXMuaXNSZW5kZXJhYmxlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxufVxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuUmVuZGVyZXJcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBSZW5kZXJlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuUmVuZGVyZXIjICovIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxDYW52YXNFbGVtZW50fVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNhbnZhczogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FudmFzIHdpZHRoLCBzZXQgYnkgcmVzaXplIG1ldGhvZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfd2lkdGg6IDEwMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FudmFzIHdpZHRoLCBzZXQgYnkgcmVzaXplIG1ldGhvZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBfaGVpZ2h0OiAxMDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERldmljZSBwaXhlbCByYXRpbywgc2V0IGJ5IHNldERldmljZVBpeGVsUmF0aW8gbWV0aG9kXHJcbiAgICAgICAgICogU3BlY2lhbGx5IGZvciBoaWdoIGRlZmluYXRpb24gZGlzcGxheVxyXG4gICAgICAgICAqIEBzZWUgaHR0cDovL3d3dy5raHJvbm9zLm9yZy93ZWJnbC93aWtpL0hhbmRsaW5nSGlnaERQSVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQHByaXZhdGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBkZXZpY2VQaXhlbFJhdGlvOiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRldmljZVBpeGVsUmF0aW8pIHx8IDEuMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2xlYXIgY29sb3JcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyW119XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xlYXJDb2xvcjogWzAuMCwgMC4wLCAwLjAsIDAuMF0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERlZmF1bHQ6XHJcbiAgICAgICAgICogICAgIF9nbC5DT0xPUl9CVUZGRVJfQklUIHwgX2dsLkRFUFRIX0JVRkZFUl9CSVQgfCBfZ2wuU1RFTkNJTF9CVUZGRVJfQklUXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGVhckJpdDogMTc2NjQsXHJcblxyXG4gICAgICAgIC8vIFNldHRpbmdzIHdoZW4gZ2V0dGluZyBjb250ZXh0XHJcbiAgICAgICAgLy8gaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9zcGVjcy9sYXRlc3QvIzIuNFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgYWxwaGEsIGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFscGhhOiB0cnVlLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBkZXB0aCBidWZmZXIsIGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRlcHRoOiB0cnVlLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBzdGVuY2lsIGJ1ZmZlciwgZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHN0ZW5jaWw6IGZhbHNlLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBhbnRpYWxpYXMsIGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFudGlhbGlhczogdHJ1ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgcHJlbXVsdGlwbGllZCBhbHBoYSwgZGVmYXVsdCB0cnVlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0cnVlLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHByZXNlcnZlIGRyYXdpbmcgYnVmZmVyLCBkZWZhdWx0IGZhbHNlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBmYWxzZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiB0aHJvdyBjb250ZXh0IGVycm9yLCB1c3VhbGx5IHR1cm5lZCBvbiBpbiBkZWJ1ZyBtb2RlXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhyb3dFcnJvcjogdHJ1ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBXZWJHTCBDb250ZXh0IGNyZWF0ZWQgZnJvbSBnaXZlbiBjYW52YXNcclxuICAgICAgICAgKiBAdHlwZSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdsOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFJlbmRlcmVyIHZpZXdwb3J0LCByZWFkLW9ubHksIGNhbiBiZSBzZXQgYnkgc2V0Vmlld3BvcnQgbWV0aG9kXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICB2aWV3cG9ydDoge30sXHJcblxyXG4gICAgICAgIC8vIFNldCBieSBGcmFtZUJ1ZmZlciNiaW5kXHJcbiAgICAgICAgX19jdXJyZW50RnJhbWVCdWZmZXI6IG51bGwsXHJcblxyXG4gICAgICAgIF92aWV3cG9ydFN0YWNrOiBbXSxcclxuICAgICAgICBfY2xlYXJTdGFjazogW10sXHJcblxyXG4gICAgICAgIF9zY2VuZVJlbmRlcmluZzogbnVsbFxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIGlmICghdGhpcy5jYW52YXMpIHtcclxuICAgICAgICB0aGlzLmNhbnZhcyA9IHZlbmRvci5jcmVhdGVDYW52YXMoKTtcclxuICAgIH1cclxuICAgIHZhciBjYW52YXMgPSB0aGlzLmNhbnZhcztcclxuICAgIHRyeSB7XHJcbiAgICAgICAgdmFyIG9wdHMgPSB7XHJcbiAgICAgICAgICAgIGFscGhhOiB0aGlzLmFscGhhLFxyXG4gICAgICAgICAgICBkZXB0aDogdGhpcy5kZXB0aCxcclxuICAgICAgICAgICAgc3RlbmNpbDogdGhpcy5zdGVuY2lsLFxyXG4gICAgICAgICAgICBhbnRpYWxpYXM6IHRoaXMuYW50aWFsaWFzLFxyXG4gICAgICAgICAgICBwcmVtdWx0aXBsaWVkQWxwaGE6IHRoaXMucHJlbXVsdGlwbGllZEFscGhhLFxyXG4gICAgICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IHRoaXMucHJlc2VydmVEcmF3aW5nQnVmZmVyXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5nbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIG9wdHMpXHJcbiAgICAgICAgICAgIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBvcHRzKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmdsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZ2xpbmZvID0gbmV3IEdMSW5mbyh0aGlzLmdsKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2wudGFyZ2V0UmVuZGVyZXIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQWxyZWFkeSBjcmVhdGVkIGEgcmVuZGVyZXInKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nbC50YXJnZXRSZW5kZXJlciA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMucmVzaXplKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIHRocm93ICdFcnJvciBjcmVhdGluZyBXZWJHTCBDb250ZXh0ICcgKyBlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEluaXQgbWFuYWdlcnNcclxuICAgIHRoaXMuX3Byb2dyYW1NZ3IgPSBuZXcgUHJvZ3JhbU1hbmFnZXIodGhpcyk7XHJcblxyXG4gICAgdGhpcy5fcGxhY2Vob2xkZXJUZXh0dXJlID0gbmV3IFBsYWNlSG9sZGVyVGV4dHVyZSh0aGlzKTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LlJlbmRlcmVyLnByb3RvdHlwZS4gKiovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogUmVzaXplIHRoZSBjYW52YXNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxyXG4gICAgICovXHJcbiAgICByZXNpemU6IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgICAgICB2YXIgY2FudmFzID0gdGhpcy5jYW52YXM7XHJcbiAgICAgICAgLy8gaHR0cDovL3d3dy5raHJvbm9zLm9yZy93ZWJnbC93aWtpL0hhbmRsaW5nSGlnaERQSVxyXG4gICAgICAgIC8vIHNldCB0aGUgZGlzcGxheSBzaXplIG9mIHRoZSBjYW52YXMuXHJcbiAgICAgICAgdmFyIGRwciA9IHRoaXMuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICBpZiAod2lkdGggIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoY2FudmFzLnN0eWxlKSB7XHJcbiAgICAgICAgICAgICAgICBjYW52YXMuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XHJcbiAgICAgICAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzZXQgdGhlIHNpemUgb2YgdGhlIGRyYXdpbmdCdWZmZXJcclxuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGggKiBkcHI7XHJcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQgKiBkcHI7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IGNhbnZhcy53aWR0aCAvIGRwcjtcclxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gY2FudmFzLmhlaWdodCAvIGRwcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0Vmlld3BvcnQoMCwgMCwgdGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHJlbmRlcmVyIHdpZHRoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldFdpZHRoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCByZW5kZXJlciBoZWlnaHRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0SGVpZ2h0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdmlld3BvcnQgYXNwZWN0LFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXRWaWV3cG9ydEFzcGVjdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7XHJcbiAgICAgICAgcmV0dXJuIHZpZXdwb3J0LndpZHRoIC8gdmlld3BvcnQuaGVpZ2h0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBkZXZpY2VQaXhlbFJhdGlvXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGV2aWNlUGl4ZWxSYXRpb1xyXG4gICAgICovXHJcbiAgICBzZXREZXZpY2VQaXhlbFJhdGlvOiBmdW5jdGlvbihkZXZpY2VQaXhlbFJhdGlvKSB7XHJcbiAgICAgICAgdGhpcy5kZXZpY2VQaXhlbFJhdGlvID0gZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICB0aGlzLnJlc2l6ZSh0aGlzLl93aWR0aCwgdGhpcy5faGVpZ2h0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZGV2aWNlUGl4ZWxSYXRpb1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRldmljZVBpeGVsUmF0aW9cclxuICAgICAqL1xyXG4gICAgZ2V0RGV2aWNlUGl4ZWxSYXRpbzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRldmljZVBpeGVsUmF0aW87XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IFdlYkdMIGV4dGVuc2lvblxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge29iamVjdH1cclxuICAgICAqL1xyXG4gICAgZ2V0R0xFeHRlbnNpb246IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dsaW5mby5nZXRFeHRlbnNpb24obmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IFdlYkdMIHBhcmFtZXRlclxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4geyp9XHJcbiAgICAgKi9cclxuICAgIGdldEdMUGFyYW1ldGVyOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nbGluZm8uZ2V0UGFyYW1ldGVyKG5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCByZW5kZXJpbmcgdmlld3BvcnRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfE9iamVjdH0geFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt5XVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aF1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0XVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtkZXZpY2VQaXhlbFJhdGlvXVxyXG4gICAgICogICAgICAgIERlZmF1bHRseSB1c2UgdGhlIHJlbmRlcmVyZSBkZXZpY2VQaXhlbFJhdGlvXHJcbiAgICAgKiAgICAgICAgSXQgbmVlZHMgdG8gYmUgMSB3aGVuIHNldFZpZXdwb3J0IGlzIGNhbGxlZCBieSBmcmFtZUJ1ZmZlclxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiAgc2V0Vmlld3BvcnQoMCwwLHdpZHRoLGhlaWdodCwxKVxyXG4gICAgICogIHNldFZpZXdwb3J0KHtcclxuICAgICAqICAgICAgeDogMCxcclxuICAgICAqICAgICAgeTogMCxcclxuICAgICAqICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICogICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAqICAgICAgZGV2aWNlUGl4ZWxSYXRpbzogMVxyXG4gICAgICogIH0pXHJcbiAgICAgKi9cclxuICAgIHNldFZpZXdwb3J0OiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgZHByKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgdmFyIG9iaiA9IHg7XHJcblxyXG4gICAgICAgICAgICB4ID0gb2JqLng7XHJcbiAgICAgICAgICAgIHkgPSBvYmoueTtcclxuICAgICAgICAgICAgd2lkdGggPSBvYmoud2lkdGg7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IG9iai5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGRwciA9IG9iai5kZXZpY2VQaXhlbFJhdGlvO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkcHIgPSBkcHIgfHwgdGhpcy5kZXZpY2VQaXhlbFJhdGlvO1xyXG5cclxuICAgICAgICB0aGlzLmdsLnZpZXdwb3J0KFxyXG4gICAgICAgICAgICB4ICogZHByLCB5ICogZHByLCB3aWR0aCAqIGRwciwgaGVpZ2h0ICogZHByXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBVc2UgYSBmcmVzaCBuZXcgb2JqZWN0LCBub3Qgd3JpdGUgcHJvcGVydHkuXHJcbiAgICAgICAgdGhpcy52aWV3cG9ydCA9IHtcclxuICAgICAgICAgICAgeDogeCxcclxuICAgICAgICAgICAgeTogeSxcclxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICAgICAgZGV2aWNlUGl4ZWxSYXRpbzogZHByXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQdXNoIGN1cnJlbnQgdmlld3BvcnQgaW50byBhIHN0YWNrXHJcbiAgICAgKi9cclxuICAgIHNhdmVWaWV3cG9ydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3ZpZXdwb3J0U3RhY2sucHVzaCh0aGlzLnZpZXdwb3J0KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3Agdmlld3BvcnQgZnJvbSBzdGFjaywgcmVzdG9yZSBpbiB0aGUgcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgcmVzdG9yZVZpZXdwb3J0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3ZpZXdwb3J0U3RhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZpZXdwb3J0KHRoaXMuX3ZpZXdwb3J0U3RhY2sucG9wKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQdXNoIGN1cnJlbnQgY2xlYXIgaW50byBhIHN0YWNrXHJcbiAgICAgKi9cclxuICAgIHNhdmVDbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFyU3RhY2sucHVzaCh7XHJcbiAgICAgICAgICAgIGNsZWFyQml0OiB0aGlzLmNsZWFyQml0LFxyXG4gICAgICAgICAgICBjbGVhckNvbG9yOiB0aGlzLmNsZWFyQ29sb3JcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3AgY2xlYXIgZnJvbSBzdGFjaywgcmVzdG9yZSBpbiB0aGUgcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgcmVzdG9yZUNsZWFyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NsZWFyU3RhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB2YXIgb3B0ID0gdGhpcy5fY2xlYXJTdGFjay5wb3AoKTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckNvbG9yID0gb3B0LmNsZWFyQ29sb3I7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJCaXQgPSBvcHQuY2xlYXJCaXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBiaW5kU2NlbmVSZW5kZXJpbmc6IGZ1bmN0aW9uIChzY2VuZSkge1xyXG4gICAgICAgIHRoaXMuX3NjZW5lUmVuZGVyaW5nID0gc2NlbmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIHRoZSBzY2VuZSBpbiBjYW1lcmEgdG8gdGhlIHNjcmVlbiBvciBiaW5kZWQgb2ZmbGluZSBmcmFtZWJ1ZmZlclxyXG4gICAgICogQHBhcmFtICB7Y2xheS5TY2VuZX0gICAgICAgc2NlbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQ2FtZXJhfSAgICAgIGNhbWVyYVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgIFtub3RVcGRhdGVTY2VuZV0gSWYgbm90IGNhbGwgdGhlIHNjZW5lLnVwZGF0ZSBtZXRob2RzIGluIHRoZSByZW5kZXJpbmcsIGRlZmF1bHQgdHJ1ZVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gICAgIFtwcmVaXSAgICAgICAgICAgSWYgdXNlIHByZVogb3B0aW1pemF0aW9uLCBkZWZhdWx0IGZhbHNlXHJcbiAgICAgKiBAcmV0dXJuIHtJUmVuZGVySW5mb31cclxuICAgICAqL1xyXG4gICAgcmVuZGVyOiBmdW5jdGlvbihzY2VuZSwgY2FtZXJhLCBub3RVcGRhdGVTY2VuZSwgcHJlWikge1xyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICB2YXIgY2xlYXJDb2xvciA9IHRoaXMuY2xlYXJDb2xvcjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJCaXQpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIE11c3Qgc2V0IGRlcHRoIGFuZCBjb2xvciBtYXNrIHRydWUgYmVmb3JlIGNsZWFyXHJcbiAgICAgICAgICAgIF9nbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIF9nbC5kZXB0aE1hc2sodHJ1ZSk7XHJcbiAgICAgICAgICAgIHZhciB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7XHJcbiAgICAgICAgICAgIHZhciBuZWVkc1NjaXNzb3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgdmFyIHZpZXdwb3J0RHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICAgICAgaWYgKHZpZXdwb3J0LndpZHRoICE9PSB0aGlzLl93aWR0aCB8fCB2aWV3cG9ydC5oZWlnaHQgIT09IHRoaXMuX2hlaWdodFxyXG4gICAgICAgICAgICAgICAgfHwgKHZpZXdwb3J0RHByICYmIHZpZXdwb3J0RHByICE9PSB0aGlzLmRldmljZVBpeGVsUmF0aW8pXHJcbiAgICAgICAgICAgICAgICB8fCB2aWV3cG9ydC54IHx8IHZpZXdwb3J0LnlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBuZWVkc1NjaXNzb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMTU0NDYwOC9ob3ctdG8tY2xlYXItYS1yZWN0YW5nbGUtYXJlYS1pbi13ZWJnbFxyXG4gICAgICAgICAgICAgICAgLy8gT25seSBjbGVhciB0aGUgdmlld3BvcnRcclxuICAgICAgICAgICAgICAgIF9nbC5lbmFibGUoX2dsLlNDSVNTT1JfVEVTVCk7XHJcbiAgICAgICAgICAgICAgICBfZ2wuc2Npc3Nvcih2aWV3cG9ydC54ICogdmlld3BvcnREcHIsIHZpZXdwb3J0LnkgKiB2aWV3cG9ydERwciwgdmlld3BvcnQud2lkdGggKiB2aWV3cG9ydERwciwgdmlld3BvcnQuaGVpZ2h0ICogdmlld3BvcnREcHIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF9nbC5jbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pO1xyXG4gICAgICAgICAgICBfZ2wuY2xlYXIodGhpcy5jbGVhckJpdCk7XHJcbiAgICAgICAgICAgIGlmIChuZWVkc1NjaXNzb3IpIHtcclxuICAgICAgICAgICAgICAgIF9nbC5kaXNhYmxlKF9nbC5TQ0lTU09SX1RFU1QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiB0aGUgc2NlbmUgaGF2ZSBiZWVuIHVwZGF0ZWQgaW4gdGhlIHByZXBhc3MgbGlrZSBzaGFkb3cgbWFwXHJcbiAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byB1cGRhdGUgaXQgYWdhaW5cclxuICAgICAgICBpZiAoIW5vdFVwZGF0ZVNjZW5lKSB7XHJcbiAgICAgICAgICAgIHNjZW5lLnVwZGF0ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjZW5lLnVwZGF0ZUxpZ2h0cygpO1xyXG5cclxuICAgICAgICBjYW1lcmEgPSBjYW1lcmEgfHwgc2NlbmUuZ2V0TWFpbkNhbWVyYSgpO1xyXG4gICAgICAgIGlmICghY2FtZXJhKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NhblxcJ3QgZmluZCBjYW1lcmEgaW4gdGhlIHNjZW5lLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhbWVyYS51cGRhdGUoKTtcclxuICAgICAgICB2YXIgcmVuZGVyTGlzdCA9IHNjZW5lLnVwZGF0ZVJlbmRlckxpc3QoY2FtZXJhLCB0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2NlbmVSZW5kZXJpbmcgPSBzY2VuZTtcclxuXHJcbiAgICAgICAgdmFyIG9wYXF1ZUxpc3QgPSByZW5kZXJMaXN0Lm9wYXF1ZTtcclxuICAgICAgICB2YXIgdHJhbnNwYXJlbnRMaXN0ID0gcmVuZGVyTGlzdC50cmFuc3BhcmVudDtcclxuICAgICAgICB2YXIgc2NlbmVNYXRlcmlhbCA9IHNjZW5lLm1hdGVyaWFsO1xyXG5cclxuICAgICAgICBzY2VuZS50cmlnZ2VyKCdiZWZvcmVyZW5kZXInLCB0aGlzLCBzY2VuZSwgY2FtZXJhLCByZW5kZXJMaXN0KTtcclxuXHJcbiAgICAgICAgLy8gUmVuZGVyIHByZSB6XHJcbiAgICAgICAgaWYgKHByZVopIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJQcmVaKG9wYXF1ZUxpc3QsIHNjZW5lLCBjYW1lcmEpO1xyXG4gICAgICAgICAgICBfZ2wuZGVwdGhGdW5jKF9nbC5MRVFVQUwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgX2dsLmRlcHRoRnVuYyhfZ2wuTEVTUyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIGRlcHRoIG9mIHRyYW5zcGFyZW50IGxpc3QuXHJcbiAgICAgICAgdmFyIHdvcmxkVmlld01hdCA9IG1hdDRDcmVhdGUoKTtcclxuICAgICAgICB2YXIgcG9zVmlld1NwYWNlID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zcGFyZW50TGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyYWJsZSA9IHRyYW5zcGFyZW50TGlzdFtpXTtcclxuICAgICAgICAgICAgbWF0NC5tdWx0aXBseUFmZmluZSh3b3JsZFZpZXdNYXQsIGNhbWVyYS52aWV3TWF0cml4LmFycmF5LCByZW5kZXJhYmxlLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgdmVjMy50cmFuc2Zvcm1NYXQ0KHBvc1ZpZXdTcGFjZSwgcmVuZGVyYWJsZS5wb3NpdGlvbi5hcnJheSwgd29ybGRWaWV3TWF0KTtcclxuICAgICAgICAgICAgcmVuZGVyYWJsZS5fX2RlcHRoID0gcG9zVmlld1NwYWNlWzJdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVuZGVyIG9wYXF1ZSBsaXN0XHJcbiAgICAgICAgdGhpcy5yZW5kZXJQYXNzKG9wYXF1ZUxpc3QsIGNhbWVyYSwge1xyXG4gICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzY2VuZU1hdGVyaWFsIHx8IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNvcnRDb21wYXJlOiB0aGlzLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyh0cmFuc3BhcmVudExpc3QsIGNhbWVyYSwge1xyXG4gICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzY2VuZU1hdGVyaWFsIHx8IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNvcnRDb21wYXJlOiB0aGlzLnRyYW5zcGFyZW50U29ydENvbXBhcmVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2NlbmUudHJpZ2dlcignYWZ0ZXJyZW5kZXInLCB0aGlzLCBzY2VuZSwgY2FtZXJhLCByZW5kZXJMaXN0KTtcclxuXHJcbiAgICAgICAgLy8gQ2xlYW51cFxyXG4gICAgICAgIHRoaXMuX3NjZW5lUmVuZGVyaW5nID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0UHJvZ3JhbTogZnVuY3Rpb24gKHJlbmRlcmFibGUsIHJlbmRlck1hdGVyaWFsLCBzY2VuZSkge1xyXG4gICAgICAgIHJlbmRlck1hdGVyaWFsID0gcmVuZGVyTWF0ZXJpYWwgfHwgcmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3JhbU1nci5nZXRQcm9ncmFtKHJlbmRlcmFibGUsIHJlbmRlck1hdGVyaWFsLCBzY2VuZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHZhbGlkYXRlUHJvZ3JhbTogZnVuY3Rpb24gKHByb2dyYW0pIHtcclxuICAgICAgICBpZiAocHJvZ3JhbS5fX2Vycm9yKSB7XHJcbiAgICAgICAgICAgIHZhciBlcnJvck1zZyA9IHByb2dyYW0uX19lcnJvcjtcclxuICAgICAgICAgICAgaWYgKGVycm9yU2hhZGVyW3Byb2dyYW0uX191aWRfX10pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlcnJvclNoYWRlcltwcm9ncmFtLl9fdWlkX19dID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRocm93RXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2Vycm9yJywgZXJyb3JNc2cpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZVByb2dyYW1zOiBmdW5jdGlvbiAobGlzdCwgc2NlbmUsIHBhc3NDb25maWcpIHtcclxuICAgICAgICB2YXIgZ2V0TWF0ZXJpYWwgPSAocGFzc0NvbmZpZyAmJiBwYXNzQ29uZmlnLmdldE1hdGVyaWFsKSB8fCBkZWZhdWx0R2V0TWF0ZXJpYWw7XHJcbiAgICAgICAgc2NlbmUgPSBzY2VuZSB8fCBudWxsO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyYWJsZSA9IGxpc3RbaV07XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJNYXRlcmlhbCA9IGdldE1hdGVyaWFsLmNhbGwodGhpcywgcmVuZGVyYWJsZSk7XHJcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHByZXZSZW5kZXJhYmxlID0gbGlzdFtpIC0gMV07XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJldkpvaW50c0xlbiA9IHByZXZSZW5kZXJhYmxlLmpvaW50cyA/IHByZXZSZW5kZXJhYmxlLmpvaW50cy5sZW5ndGggOiAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50c0xlbiA9IHJlbmRlcmFibGUuam9pbnRzID8gcmVuZGVyYWJsZS5qb2ludHMubGVuZ3RoIDogMDtcclxuICAgICAgICAgICAgICAgIC8vIEtlZXAgcHJvZ3JhbSBub3QgY2hhbmdlIGlmIGpvaW50cywgbWF0ZXJpYWwsIGxpZ2h0R3JvdXAgYXJlIHNhbWUgb2YgdHdvIHJlbmRlcmFibGVzLlxyXG4gICAgICAgICAgICAgICAgaWYgKGpvaW50c0xlbiA9PT0gcHJldkpvaW50c0xlblxyXG4gICAgICAgICAgICAgICAgICAgICYmIHJlbmRlcmFibGUubWF0ZXJpYWwgPT09IHByZXZSZW5kZXJhYmxlLm1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgcmVuZGVyYWJsZS5saWdodEdyb3VwID09PSBwcmV2UmVuZGVyYWJsZS5saWdodEdyb3VwXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLl9fcHJvZ3JhbSA9IHByZXZSZW5kZXJhYmxlLl9fcHJvZ3JhbTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHByb2dyYW0gPSB0aGlzLl9wcm9ncmFtTWdyLmdldFByb2dyYW0ocmVuZGVyYWJsZSwgcmVuZGVyTWF0ZXJpYWwsIHNjZW5lKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQcm9ncmFtKHByb2dyYW0pO1xyXG5cclxuICAgICAgICAgICAgcmVuZGVyYWJsZS5fX3Byb2dyYW0gPSBwcm9ncmFtO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW5kZXIgYSBzaW5nbGUgcmVuZGVyYWJsZSBsaXN0IGluIGNhbWVyYSBpbiBzZXF1ZW5jZVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmFibGVbXX0gbGlzdCBMaXN0IG9mIGFsbCByZW5kZXJhYmxlcy5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5DYW1lcmF9IFtjYW1lcmFdIENhbWVyYSBwcm92aWRlIHZpZXcgbWF0cml4IGFuZCBwb3JqZWN0aW9uIG1hdHJpeC4gSXQgY2FuIGJlIG51bGwuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3Bhc3NDb25maWddXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5nZXRNYXRlcmlhbF0gR2V0IHJlbmRlcmFibGUgbWF0ZXJpYWwuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5nZXRVbmlmb3JtXSBHZXQgbWF0ZXJpYWwgdW5pZm9ybSB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXNzQ29uZmlnLmlzTWF0ZXJpYWxDaGFuZ2VkXSBJZiBtYXRlcmlhbCBjaGFuZ2VkLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuYmVmb3JlUmVuZGVyXSBCZWZvcmUgcmVuZGVyIGVhY2ggcmVuZGVyYWJsZS5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXNzQ29uZmlnLmFmdGVyUmVuZGVyXSBBZnRlciByZW5kZXIgZWFjaCByZW5kZXJhYmxlXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5pZlJlbmRlcl0gSWYgcmVuZGVyIHRoZSByZW5kZXJhYmxlLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuc29ydENvbXBhcmVdIFNvcnQgY29tcGFyZSBmdW5jdGlvbi5cclxuICAgICAqIEByZXR1cm4ge0lSZW5kZXJJbmZvfVxyXG4gICAgICovXHJcbiAgICByZW5kZXJQYXNzOiBmdW5jdGlvbihsaXN0LCBjYW1lcmEsIHBhc3NDb25maWcpIHtcclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZXJlbmRlcnBhc3MnLCB0aGlzLCBsaXN0LCBjYW1lcmEsIHBhc3NDb25maWcpO1xyXG5cclxuICAgICAgICBwYXNzQ29uZmlnID0gcGFzc0NvbmZpZyB8fCB7fTtcclxuICAgICAgICBwYXNzQ29uZmlnLmdldE1hdGVyaWFsID0gcGFzc0NvbmZpZy5nZXRNYXRlcmlhbCB8fCBkZWZhdWx0R2V0TWF0ZXJpYWw7XHJcbiAgICAgICAgcGFzc0NvbmZpZy5nZXRVbmlmb3JtID0gcGFzc0NvbmZpZy5nZXRVbmlmb3JtIHx8IGRlZmF1bHRHZXRVbmlmb3JtO1xyXG4gICAgICAgIC8vIFBFTkRJTkcgQmV0dGVyIHNvbHV0aW9uP1xyXG4gICAgICAgIHBhc3NDb25maWcuaXNNYXRlcmlhbENoYW5nZWQgPSBwYXNzQ29uZmlnLmlzTWF0ZXJpYWxDaGFuZ2VkIHx8IGRlZmF1bHRJc01hdGVyaWFsQ2hhbmdlZDtcclxuICAgICAgICBwYXNzQ29uZmlnLmJlZm9yZVJlbmRlciA9IHBhc3NDb25maWcuYmVmb3JlUmVuZGVyIHx8IG5vb3A7XHJcbiAgICAgICAgcGFzc0NvbmZpZy5hZnRlclJlbmRlciA9IHBhc3NDb25maWcuYWZ0ZXJSZW5kZXIgfHwgbm9vcDtcclxuXHJcbiAgICAgICAgdmFyIGlmUmVuZGVyT2JqZWN0ID0gcGFzc0NvbmZpZy5pZlJlbmRlciB8fCBkZWZhdWx0SWZSZW5kZXI7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlUHJvZ3JhbXMobGlzdCwgdGhpcy5fc2NlbmVSZW5kZXJpbmcsIHBhc3NDb25maWcpO1xyXG4gICAgICAgIGlmIChwYXNzQ29uZmlnLnNvcnRDb21wYXJlKSB7XHJcbiAgICAgICAgICAgIGxpc3Quc29ydChwYXNzQ29uZmlnLnNvcnRDb21wYXJlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNvbWUgY29tbW9uIGJ1aWx0aW4gdW5pZm9ybXNcclxuICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xyXG4gICAgICAgIHZhciB2RHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICB2YXIgdmlld3BvcnRVbmlmb3JtID0gW1xyXG4gICAgICAgICAgICB2aWV3cG9ydC54ICogdkRwciwgdmlld3BvcnQueSAqIHZEcHIsXHJcbiAgICAgICAgICAgIHZpZXdwb3J0LndpZHRoICogdkRwciwgdmlld3BvcnQuaGVpZ2h0ICogdkRwclxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdmFyIHdpbmRvd0RwciA9IHRoaXMuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICB2YXIgd2luZG93U2l6ZVVuaWZvcm0gPSB0aGlzLl9fY3VycmVudEZyYW1lQnVmZmVyXHJcbiAgICAgICAgICAgID8gW3RoaXMuX19jdXJyZW50RnJhbWVCdWZmZXIuZ2V0VGV4dHVyZVdpZHRoKCksIHRoaXMuX19jdXJyZW50RnJhbWVCdWZmZXIuZ2V0VGV4dHVyZUhlaWdodCgpXVxyXG4gICAgICAgICAgICA6IFt0aGlzLl93aWR0aCAqIHdpbmRvd0RwciwgdGhpcy5faGVpZ2h0ICogd2luZG93RHByXTtcclxuICAgICAgICAvLyBERVBSRUNBVEVEXHJcbiAgICAgICAgdmFyIHZpZXdwb3J0U2l6ZVVuaWZvcm0gPSBbXHJcbiAgICAgICAgICAgIHZpZXdwb3J0VW5pZm9ybVsyXSwgdmlld3BvcnRVbmlmb3JtWzNdXHJcbiAgICAgICAgXTtcclxuICAgICAgICB2YXIgdGltZSA9IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSB2aWV3IGFuZCBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICAgIGlmIChjYW1lcmEpIHtcclxuICAgICAgICAgICAgbWF0NC5jb3B5KG1hdHJpY2VzLlZJRVcsIGNhbWVyYS52aWV3TWF0cml4LmFycmF5KTtcclxuICAgICAgICAgICAgbWF0NC5jb3B5KG1hdHJpY2VzLlBST0pFQ1RJT04sIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmFycmF5KTtcclxuICAgICAgICAgICAgbWF0NC5jb3B5KG1hdHJpY2VzLlZJRVdJTlZFUlNFLCBjYW1lcmEud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWF0NC5pZGVudGl0eShtYXRyaWNlcy5WSUVXKTtcclxuICAgICAgICAgICAgbWF0NC5pZGVudGl0eShtYXRyaWNlcy5QUk9KRUNUSU9OKTtcclxuICAgICAgICAgICAgbWF0NC5pZGVudGl0eShtYXRyaWNlcy5WSUVXSU5WRVJTRSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1hdDQubXVsdGlwbHkobWF0cmljZXMuVklFV1BST0pFQ1RJT04sIG1hdHJpY2VzLlBST0pFQ1RJT04sIG1hdHJpY2VzLlZJRVcpO1xyXG4gICAgICAgIG1hdDQuaW52ZXJ0KG1hdHJpY2VzLlBST0pFQ1RJT05JTlZFUlNFLCBtYXRyaWNlcy5QUk9KRUNUSU9OKTtcclxuICAgICAgICBtYXQ0LmludmVydChtYXRyaWNlcy5WSUVXUFJPSkVDVElPTklOVkVSU0UsIG1hdHJpY2VzLlZJRVdQUk9KRUNUSU9OKTtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHRoaXMuZ2w7XHJcbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5fc2NlbmVSZW5kZXJpbmc7XHJcblxyXG4gICAgICAgIHZhciBwcmV2TWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIHByZXZQcm9ncmFtO1xyXG4gICAgICAgIHZhciBwcmV2UmVuZGVyYWJsZTtcclxuXHJcbiAgICAgICAgLy8gU3RhdHVzXHJcbiAgICAgICAgdmFyIGRlcHRoVGVzdCwgZGVwdGhNYXNrO1xyXG4gICAgICAgIHZhciBjdWxsaW5nLCBjdWxsRmFjZSwgZnJvbnRGYWNlO1xyXG4gICAgICAgIHZhciB0cmFuc3BhcmVudDtcclxuICAgICAgICB2YXIgZHJhd0lEO1xyXG4gICAgICAgIHZhciBjdXJyZW50VkFPO1xyXG4gICAgICAgIHZhciBtYXRlcmlhbFRha2VzVGV4dHVyZVNsb3Q7XHJcblxyXG4gICAgICAgIC8vIHZhciB2YW9FeHQgPSB0aGlzLmdldEdMRXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpO1xyXG4gICAgICAgIC8vIG5vdCB1c2UgdmFvRXh0LCBzb21lIHBsYXRmb3JtcyBtYXkgbWVzcyBpdCB1cC5cclxuICAgICAgICB2YXIgdmFvRXh0ID0gbnVsbDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJhYmxlID0gbGlzdFtpXTtcclxuICAgICAgICAgICAgdmFyIGlzU2NlbmVOb2RlID0gcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybSAhPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgd29ybGRNO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFpZlJlbmRlck9iamVjdChyZW5kZXJhYmxlKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFNraW5uZWQgbWVzaCB3aWxsIHRyYW5zZm9ybWVkIHRvIGpvaW50IHNwYWNlLiBJZ25vcmUgdGhlIG1lc2ggdHJhbnNmb3JtXHJcbiAgICAgICAgICAgIGlmIChpc1NjZW5lTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgd29ybGRNID0gKHJlbmRlcmFibGUuaXNTa2lubmVkTWVzaCAmJiByZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2goKSlcclxuICAgICAgICAgICAgICAgICAgICA/IG1hdHJpY2VzLklERU5USVRZIDogcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSByZW5kZXJhYmxlLmdlb21ldHJ5O1xyXG4gICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBwYXNzQ29uZmlnLmdldE1hdGVyaWFsLmNhbGwodGhpcywgcmVuZGVyYWJsZSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcHJvZ3JhbSA9IHJlbmRlcmFibGUuX19wcm9ncmFtO1xyXG4gICAgICAgICAgICB2YXIgc2hhZGVyID0gbWF0ZXJpYWwuc2hhZGVyO1xyXG5cclxuICAgICAgICAgICAgdmFyIGN1cnJlbnREcmF3SUQgPSBnZW9tZXRyeS5fX3VpZF9fICsgJy0nICsgcHJvZ3JhbS5fX3VpZF9fO1xyXG4gICAgICAgICAgICB2YXIgZHJhd0lEQ2hhbmdlZCA9IGN1cnJlbnREcmF3SUQgIT09IGRyYXdJRDtcclxuICAgICAgICAgICAgZHJhd0lEID0gY3VycmVudERyYXdJRDtcclxuICAgICAgICAgICAgaWYgKGRyYXdJRENoYW5nZWQgJiYgdmFvRXh0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPIFNlZW1zIG5lZWQgdG8gYmUgYm91bmQgdG8gbnVsbCBpbW1lZGlhdGVseSAob3IgYmVmb3JlIGJpbmQgYW5vdGhlciBwcm9ncmFtPykgaWYgdmFvIGlzIGNoYW5nZWRcclxuICAgICAgICAgICAgICAgIHZhb0V4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzU2NlbmVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBtYXQ0LmNvcHkobWF0cmljZXMuV09STEQsIHdvcmxkTSk7XHJcbiAgICAgICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KG1hdHJpY2VzLldPUkxEVklFV1BST0pFQ1RJT04sIG1hdHJpY2VzLlZJRVdQUk9KRUNUSU9OLCB3b3JsZE0pO1xyXG4gICAgICAgICAgICAgICAgbWF0NC5tdWx0aXBseUFmZmluZShtYXRyaWNlcy5XT1JMRFZJRVcsIG1hdHJpY2VzLlZJRVcsIHdvcmxkTSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRElOVkVSU0UgfHxcclxuICAgICAgICAgICAgICAgICAgICBzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxESU5WRVJTRVRSQU5TUE9TRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdDQuaW52ZXJ0KG1hdHJpY2VzLldPUkxESU5WRVJTRSwgd29ybGRNKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxEVklFV0lOVkVSU0UgfHxcclxuICAgICAgICAgICAgICAgICAgICBzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxEVklFV0lOVkVSU0VUUkFOU1BPU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXQ0LmludmVydChtYXRyaWNlcy5XT1JMRFZJRVdJTlZFUlNFLCBtYXRyaWNlcy5XT1JMRFZJRVcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRlci5tYXRyaXhTZW1hbnRpY3MuV09STERWSUVXUFJPSkVDVElPTklOVkVSU0UgfHxcclxuICAgICAgICAgICAgICAgICAgICBzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFVFJBTlNQT1NFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0NC5pbnZlcnQobWF0cmljZXMuV09STERWSUVXUFJPSkVDVElPTklOVkVSU0UsIG1hdHJpY2VzLldPUkxEVklFV1BST0pFQ1RJT04pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBCZWZvcmUgcmVuZGVyIGhvb2tcclxuICAgICAgICAgICAgcmVuZGVyYWJsZS5iZWZvcmVSZW5kZXIgJiYgcmVuZGVyYWJsZS5iZWZvcmVSZW5kZXIodGhpcyk7XHJcbiAgICAgICAgICAgIHBhc3NDb25maWcuYmVmb3JlUmVuZGVyLmNhbGwodGhpcywgcmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHByZXZNYXRlcmlhbCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcHJvZ3JhbUNoYW5nZWQgPSBwcm9ncmFtICE9PSBwcmV2UHJvZ3JhbTtcclxuICAgICAgICAgICAgaWYgKHByb2dyYW1DaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTZXQgbGlnaHRzIG51bWJlclxyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5iaW5kKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy8gU2V0IHNvbWUgY29tbW9uIHVuaWZvcm1zXHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKF9nbCwgJ1ZJRVdQT1JUJywgdmlld3BvcnRVbmlmb3JtKTtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnV0lORE9XX1NJWkUnLCB3aW5kb3dTaXplVW5pZm9ybSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FtZXJhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdORUFSJywgY2FtZXJhLm5lYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnRkFSJywgY2FtZXJhLmZhcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKF9nbCwgJ0RFVklDRVBJWEVMUkFUSU8nLCB2RHByKTtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnVElNRScsIHRpbWUpO1xyXG4gICAgICAgICAgICAgICAgLy8gREVQUkVDQVRFRFxyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdWSUVXUE9SVF9TSVpFJywgdmlld3BvcnRTaXplVW5pZm9ybSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU2V0IGxpZ2h0cyB1bmlmb3Jtc1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBuZWVkcyBvcHRpbWl6ZWRcclxuICAgICAgICAgICAgICAgIGlmIChzY2VuZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lLnNldExpZ2h0VW5pZm9ybXMocHJvZ3JhbSwgcmVuZGVyYWJsZS5saWdodEdyb3VwLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0gPSBwcmV2UHJvZ3JhbTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gUHJvZ3JhbSBjaGFuZ2VzIGFsc28gbmVlZHMgcmVzZXQgdGhlIG1hdGVyaWFscy5cclxuICAgICAgICAgICAgaWYgKHByb2dyYW1DaGFuZ2VkIHx8IHBhc3NDb25maWcuaXNNYXRlcmlhbENoYW5nZWQoXHJcbiAgICAgICAgICAgICAgICByZW5kZXJhYmxlLCBwcmV2UmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHByZXZNYXRlcmlhbFxyXG4gICAgICAgICAgICApKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWwuZGVwdGhUZXN0ICE9PSBkZXB0aFRlc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5kZXB0aFRlc3QgPyBfZ2wuZW5hYmxlKF9nbC5ERVBUSF9URVNUKSA6IF9nbC5kaXNhYmxlKF9nbC5ERVBUSF9URVNUKTtcclxuICAgICAgICAgICAgICAgICAgICBkZXB0aFRlc3QgPSBtYXRlcmlhbC5kZXB0aFRlc3Q7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWwuZGVwdGhNYXNrICE9PSBkZXB0aE1hc2spIHtcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuZGVwdGhNYXNrKG1hdGVyaWFsLmRlcHRoTWFzayk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVwdGhNYXNrID0gbWF0ZXJpYWwuZGVwdGhNYXNrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnRyYW5zcGFyZW50ICE9PSB0cmFuc3BhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zcGFyZW50ID8gX2dsLmVuYWJsZShfZ2wuQkxFTkQpIDogX2dsLmRpc2FibGUoX2dsLkJMRU5EKTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc3BhcmVudCA9IG1hdGVyaWFsLnRyYW5zcGFyZW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBjYWNoZSBibGVuZGluZ1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLnRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmJsZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmJsZW5kKF9nbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IGJsZW5kIGZ1bmN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9nbC5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoX2dsLkZVTkNfQURELCBfZ2wuRlVOQ19BREQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfZ2wuYmxlbmRGdW5jU2VwYXJhdGUoX2dsLlNSQ19BTFBIQSwgX2dsLk9ORV9NSU5VU19TUkNfQUxQSEEsIF9nbC5PTkUsIF9nbC5PTkVfTUlOVVNfU1JDX0FMUEhBKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxUYWtlc1RleHR1cmVTbG90ID0gdGhpcy5fYmluZE1hdGVyaWFsKFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGUsIG1hdGVyaWFsLCBwcm9ncmFtLFxyXG4gICAgICAgICAgICAgICAgICAgIHByZXZSZW5kZXJhYmxlIHx8IG51bGwsIHByZXZNYXRlcmlhbCB8fCBudWxsLCBwcmV2UHJvZ3JhbSB8fCBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NDb25maWcuZ2V0VW5pZm9ybVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHByZXZNYXRlcmlhbCA9IG1hdGVyaWFsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgbWF0cml4U2VtYW50aWNLZXlzID0gc2hhZGVyLm1hdHJpeFNlbWFudGljS2V5cztcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1NjZW5lTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBtYXRyaXhTZW1hbnRpY0tleXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWMgPSBtYXRyaXhTZW1hbnRpY0tleXNba107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbWFudGljSW5mbyA9IHNoYWRlci5tYXRyaXhTZW1hbnRpY3Nbc2VtYW50aWNdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXRyaXggPSBtYXRyaWNlc1tzZW1hbnRpY107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbWFudGljSW5mby5pc1RyYW5zcG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4Tm9UcmFuc3Bvc2UgPSBtYXRyaWNlc1tzZW1hbnRpY0luZm8uc2VtYW50aWNOb1RyYW5zcG9zZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdDQudHJhbnNwb3NlKG1hdHJpeCwgbWF0cml4Tm9UcmFuc3Bvc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCBzZW1hbnRpY0luZm8udHlwZSwgc2VtYW50aWNJbmZvLnN5bWJvbCwgbWF0cml4KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHJlbmRlcmFibGUuY3VsbEZhY2UgIT09IGN1bGxGYWNlKSB7XHJcbiAgICAgICAgICAgICAgICBjdWxsRmFjZSA9IHJlbmRlcmFibGUuY3VsbEZhY2U7XHJcbiAgICAgICAgICAgICAgICBfZ2wuY3VsbEZhY2UoY3VsbEZhY2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLmZyb250RmFjZSAhPT0gZnJvbnRGYWNlKSB7XHJcbiAgICAgICAgICAgICAgICBmcm9udEZhY2UgPSByZW5kZXJhYmxlLmZyb250RmFjZTtcclxuICAgICAgICAgICAgICAgIF9nbC5mcm9udEZhY2UoZnJvbnRGYWNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5jdWxsaW5nICE9PSBjdWxsaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBjdWxsaW5nID0gcmVuZGVyYWJsZS5jdWxsaW5nO1xyXG4gICAgICAgICAgICAgICAgY3VsbGluZyA/IF9nbC5lbmFibGUoX2dsLkNVTExfRkFDRSkgOiBfZ2wuZGlzYWJsZShfZ2wuQ1VMTF9GQUNFKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBUT0RPIE5vdCB1cGRhdGUgc2tlbGV0b24gaW4gZWFjaCByZW5kZXJhYmxlLlxyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVTa2VsZXRvbihyZW5kZXJhYmxlLCBwcm9ncmFtLCBtYXRlcmlhbFRha2VzVGV4dHVyZVNsb3QpO1xyXG4gICAgICAgICAgICBpZiAoZHJhd0lEQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudFZBTyA9IHRoaXMuX2JpbmRWQU8odmFvRXh0LCBzaGFkZXIsIGdlb21ldHJ5LCBwcm9ncmFtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJPYmplY3QocmVuZGVyYWJsZSwgY3VycmVudFZBTyk7XHJcblxyXG4gICAgICAgICAgICAvLyBBZnRlciByZW5kZXIgaG9va1xyXG4gICAgICAgICAgICBwYXNzQ29uZmlnLmFmdGVyUmVuZGVyKHRoaXMsIHJlbmRlcmFibGUpO1xyXG4gICAgICAgICAgICByZW5kZXJhYmxlLmFmdGVyUmVuZGVyICYmIHJlbmRlcmFibGUuYWZ0ZXJSZW5kZXIodGhpcyk7XHJcblxyXG4gICAgICAgICAgICBwcmV2UHJvZ3JhbSA9IHByb2dyYW07XHJcbiAgICAgICAgICAgIHByZXZSZW5kZXJhYmxlID0gcmVuZGVyYWJsZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRPRE8gU2VlbXMgbmVlZCB0byBiZSBib3VuZCB0byBudWxsIGltbWVkaWF0ZWx5IGlmIHZhbyBpcyBjaGFuZ2VkP1xyXG4gICAgICAgIGlmICh2YW9FeHQpIHtcclxuICAgICAgICAgICAgdmFvRXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJyZW5kZXJwYXNzJywgdGhpcywgbGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TWF4Sm9pbnROdW1iZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2xpbmZvLmdldE1heEpvaW50TnVtYmVyKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVTa2VsZXRvbjogZnVuY3Rpb24gKG9iamVjdCwgcHJvZ3JhbSwgc2xvdCkge1xyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBza2VsZXRvbiA9IG9iamVjdC5za2VsZXRvbjtcclxuICAgICAgICAvLyBTZXQgcG9zZSBtYXRyaWNlcyBvZiBza2lubmVkIG1lc2hcclxuICAgICAgICBpZiAoc2tlbGV0b24pIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBVcGRhdGUgYmVmb3JlIGN1bGxpbmcuXHJcbiAgICAgICAgICAgIHNrZWxldG9uLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICBpZiAob2JqZWN0LmpvaW50cy5sZW5ndGggPiB0aGlzLl9nbGluZm8uZ2V0TWF4Sm9pbnROdW1iZXIoKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNraW5NYXRyaWNlc1RleHR1cmUgPSBza2VsZXRvbi5nZXRTdWJTa2luTWF0cmljZXNUZXh0dXJlKG9iamVjdC5fX3VpZF9fLCBvYmplY3Quam9pbnRzKTtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0udXNlVGV4dHVyZVNsb3QodGhpcywgc2tpbk1hdHJpY2VzVGV4dHVyZSwgc2xvdCk7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCAnMWknLCAnc2tpbk1hdHJpY2VzVGV4dHVyZScsIHNsb3QpO1xyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFmJywgJ3NraW5NYXRyaWNlc1RleHR1cmVTaXplJywgc2tpbk1hdHJpY2VzVGV4dHVyZS53aWR0aCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2tpbk1hdHJpY2VzQXJyYXkgPSBza2VsZXRvbi5nZXRTdWJTa2luTWF0cmljZXMob2JqZWN0Ll9fdWlkX18sIG9iamVjdC5qb2ludHMpO1xyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdTS0lOX01BVFJJWCcsIHNraW5NYXRyaWNlc0FycmF5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3JlbmRlck9iamVjdDogZnVuY3Rpb24gKHJlbmRlcmFibGUsIHZhbykge1xyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBnZW9tZXRyeSA9IHJlbmRlcmFibGUuZ2VvbWV0cnk7XHJcblxyXG4gICAgICAgIHZhciBnbERyYXdNb2RlID0gcmVuZGVyYWJsZS5tb2RlO1xyXG4gICAgICAgIGlmIChnbERyYXdNb2RlID09IG51bGwpIHtcclxuICAgICAgICAgICAgZ2xEcmF3TW9kZSA9IDB4MDAwNDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGlmIChnbERyYXdNb2RlID09PSBnbGVudW0uTElORVMgfHwgZ2xEcmF3TW9kZSA9PT0gZ2xlbnVtLkxJTkVfU1RSSVAgfHwgZ2xEcmF3TW9kZSA9PT0gZ2xlbnVtLkxJTkVfTE9PUCkge1xyXG4gICAgICAgIC8vICAgICBfZ2wubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKTtcclxuICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgIGlmICh2YW8uaW5kaWNlc0J1ZmZlcikge1xyXG4gICAgICAgICAgICB2YXIgdWludEV4dCA9IHRoaXMuZ2V0R0xFeHRlbnNpb24oJ09FU19lbGVtZW50X2luZGV4X3VpbnQnKTtcclxuICAgICAgICAgICAgdmFyIHVzZVVpbnRFeHQgPSB1aW50RXh0ICYmIChnZW9tZXRyeS5pbmRpY2VzIGluc3RhbmNlb2YgVWludDMyQXJyYXkpO1xyXG4gICAgICAgICAgICB2YXIgaW5kaWNlc1R5cGUgPSB1c2VVaW50RXh0ID8gX2dsLlVOU0lHTkVEX0lOVCA6IF9nbC5VTlNJR05FRF9TSE9SVDtcclxuXHJcbiAgICAgICAgICAgIF9nbC5kcmF3RWxlbWVudHMoZ2xEcmF3TW9kZSwgdmFvLmluZGljZXNCdWZmZXIuY291bnQsIGluZGljZXNUeXBlLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIFVzZSB2ZXJ0ZXggbnVtYmVyIGluIGJ1ZmZlclxyXG4gICAgICAgICAgICAvLyB2ZXJ0ZXhDb3VudCBtYXkgZ2V0IHRoZSB3cm9uZyB2YWx1ZSB3aGVuIGdlb21ldHJ5IGZvcmdldCB0byBtYXJrIGRpcnR5IGFmdGVyIHVwZGF0ZVxyXG4gICAgICAgICAgICBfZ2wuZHJhd0FycmF5cyhnbERyYXdNb2RlLCAwLCBnZW9tZXRyeS52ZXJ0ZXhDb3VudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfYmluZE1hdGVyaWFsOiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHByb2dyYW0sIHByZXZSZW5kZXJhYmxlLCBwcmV2TWF0ZXJpYWwsIHByZXZQcm9ncmFtLCBnZXRVbmlmb3JtVmFsdWUpIHtcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuICAgICAgICAvLyBQRU5ESU5HIFNhbWUgdGV4dHVyZSBpbiBkaWZmZXJlbnQgbWF0ZXJpYWwgdGFrZSBkaWZmZXJlbnQgc2xvdD9cclxuXHJcbiAgICAgICAgLy8gTWF5IHVzZSBzaGFkZXIgb2Ygb3RoZXIgbWF0ZXJpYWwgaWYgc2hhZGVyIGNvZGUgYXJlIHNhbWVcclxuICAgICAgICB2YXIgc2FtZVByb2dyYW0gPSBwcmV2UHJvZ3JhbSA9PT0gcHJvZ3JhbTtcclxuXHJcbiAgICAgICAgdmFyIGN1cnJlbnRUZXh0dXJlU2xvdCA9IHByb2dyYW0uY3VycmVudFRleHR1cmVTbG90KCk7XHJcbiAgICAgICAgdmFyIGVuYWJsZWRVbmlmb3JtcyA9IG1hdGVyaWFsLmdldEVuYWJsZWRVbmlmb3JtcygpO1xyXG4gICAgICAgIHZhciB0ZXh0dXJlVW5pZm9ybXMgPSBtYXRlcmlhbC5nZXRUZXh0dXJlVW5pZm9ybXMoKTtcclxuICAgICAgICB2YXIgcGxhY2Vob2xkZXJUZXh0dXJlID0gdGhpcy5fcGxhY2Vob2xkZXJUZXh0dXJlO1xyXG5cclxuICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IHRleHR1cmVVbmlmb3Jtcy5sZW5ndGg7IHUrKykge1xyXG4gICAgICAgICAgICB2YXIgc3ltYm9sID0gdGV4dHVyZVVuaWZvcm1zW3VdO1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybVZhbHVlID0gZ2V0VW5pZm9ybVZhbHVlKHJlbmRlcmFibGUsIG1hdGVyaWFsLCBzeW1ib2wpO1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybVR5cGUgPSBtYXRlcmlhbC51bmlmb3Jtc1tzeW1ib2xdLnR5cGU7XHJcbiAgICAgICAgICAgIC8vIE5vdCB1c2UgYGluc3RhbmNlb2ZgIHRvIGRldGVybWluZSBpZiBhIHZhbHVlIGlzIHRleHR1cmUgaW4gTWF0ZXJpYWwjYmluZC5cclxuICAgICAgICAgICAgLy8gVXNlIHR5cGUgaW5zdGVhZCwgaW4gc29tZSBjYXNlIHRleHR1cmUgbWF5IGJlIGluIGRpZmZlcmVudCBuYW1lc3BhY2VzLlxyXG4gICAgICAgICAgICAvLyBUT0RPIER1Y2sgdHlwZSB2YWxpZGF0ZS5cclxuICAgICAgICAgICAgaWYgKHVuaWZvcm1UeXBlID09PSAndCcgJiYgdW5pZm9ybVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBSZXNldCBzbG90XHJcbiAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWUuX19zbG90ID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUgPT09ICd0dicpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybVZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1WYWx1ZVtpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWVbaV0uX19zbG90ID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwbGFjZWhvbGRlclRleHR1cmUuX19zbG90ID0gLTE7XHJcblxyXG4gICAgICAgIC8vIFNldCB1bmlmb3Jtc1xyXG4gICAgICAgIGZvciAodmFyIHUgPSAwOyB1IDwgZW5hYmxlZFVuaWZvcm1zLmxlbmd0aDsgdSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBzeW1ib2wgPSBlbmFibGVkVW5pZm9ybXNbdV07XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtID0gbWF0ZXJpYWwudW5pZm9ybXNbc3ltYm9sXTtcclxuICAgICAgICAgICAgdmFyIHVuaWZvcm1WYWx1ZSA9IGdldFVuaWZvcm1WYWx1ZShyZW5kZXJhYmxlLCBtYXRlcmlhbCwgc3ltYm9sKTtcclxuICAgICAgICAgICAgdmFyIHVuaWZvcm1UeXBlID0gdW5pZm9ybS50eXBlO1xyXG4gICAgICAgICAgICB2YXIgaXNUZXh0dXJlID0gdW5pZm9ybVR5cGUgPT09ICd0JztcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1RleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdW5pZm9ybVZhbHVlIHx8ICF1bmlmb3JtVmFsdWUuaXNSZW5kZXJhYmxlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWUgPSBwbGFjZWhvbGRlclRleHR1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgICAgICAvLyBXaGVuIGJpbmRpbmcgdHdvIG1hdGVyaWFscyB3aXRoIHRoZSBzYW1lIHNoYWRlclxyXG4gICAgICAgICAgICAvLyBNYW55IHVuaWZvcm1zIHdpbGwgYmUgYmUgc2V0IHR3aWNlIGV2ZW4gaWYgdGhleSBoYXZlIHRoZSBzYW1lIHZhbHVlXHJcbiAgICAgICAgICAgIC8vIFNvIGFkZCBhIGV2YWx1YXRpb24gdG8gc2VlIGlmIHRoZSB1bmlmb3JtIGlzIHJlYWxseSBuZWVkZWQgdG8gYmUgc2V0XHJcbiAgICAgICAgICAgIGlmIChwcmV2TWF0ZXJpYWwgJiYgc2FtZVByb2dyYW0pIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcmV2VW5pZm9ybVZhbHVlID0gZ2V0VW5pZm9ybVZhbHVlKHByZXZSZW5kZXJhYmxlLCBwcmV2TWF0ZXJpYWwsIHN5bWJvbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2VW5pZm9ybVZhbHVlIHx8ICFwcmV2VW5pZm9ybVZhbHVlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZVbmlmb3JtVmFsdWUgPSBwbGFjZWhvbGRlclRleHR1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChwcmV2VW5pZm9ybVZhbHVlID09PSB1bmlmb3JtVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0aWxsIHRha2UgdGhlIHNsb3QgdG8gbWFrZSBzdXJlIHNhbWUgdGV4dHVyZSBpbiBkaWZmZXJlbnQgbWF0ZXJpYWxzIGhhdmUgc2FtZSBzbG90LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnRha2VDdXJyZW50VGV4dHVyZVNsb3QodGhpcywgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVuaWZvcm1UeXBlID09PSAndHYnICYmIHVuaWZvcm1WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1WYWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS50YWtlQ3VycmVudFRleHR1cmVTbG90KHRoaXMsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodW5pZm9ybVZhbHVlID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzVGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1WYWx1ZS5fX3Nsb3QgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNsb3QgPSBwcm9ncmFtLmN1cnJlbnRUZXh0dXJlU2xvdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCAnMWknLCBzeW1ib2wsIHNsb3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHsgLy8gVGV4dHVyZSB1bmlmb3JtIGlzIGVuYWJsZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS50YWtlQ3VycmVudFRleHR1cmVTbG90KHRoaXMsIHVuaWZvcm1WYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1WYWx1ZS5fX3Nsb3QgPSBzbG90O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIHVuaWZvcm0gdXNlIHNhbWUgdGV4dHVyZS4uXHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCAnMWknLCBzeW1ib2wsIHVuaWZvcm1WYWx1ZS5fX3Nsb3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodW5pZm9ybVZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1WYWx1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIFRleHR1cmUgQXJyYXlcclxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVHlwZSA9PT0gJ3R2Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvZ3JhbS5oYXNVbmlmb3JtKHN5bWJvbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgYXJyID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmlmb3JtVmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB1bmlmb3JtVmFsdWVbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS5fX3Nsb3QgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2xvdCA9IHByb2dyYW0uY3VycmVudFRleHR1cmVTbG90KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChzbG90KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdCh0aGlzLCB0ZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuX19zbG90ID0gc2xvdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKHRleHR1cmUuX19zbG90KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFpdicsIHN5bWJvbCwgYXJyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShfZ2wsIHVuaWZvcm0udHlwZSwgc3ltYm9sLCB1bmlmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCB1bmlmb3JtLnR5cGUsIHN5bWJvbCwgdW5pZm9ybVZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbmV3U2xvdCA9IHByb2dyYW0uY3VycmVudFRleHR1cmVTbG90KCk7XHJcbiAgICAgICAgLy8gVGV4dHVyZSBzbG90IG1heWJlIHVzZWQgb3V0IG9mIG1hdGVyaWFsLlxyXG4gICAgICAgIHByb2dyYW0ucmVzZXRUZXh0dXJlU2xvdChjdXJyZW50VGV4dHVyZVNsb3QpO1xyXG4gICAgICAgIHJldHVybiBuZXdTbG90O1xyXG4gICAgfSxcclxuXHJcbiAgICBfYmluZFZBTzogZnVuY3Rpb24gKHZhb0V4dCwgc2hhZGVyLCBnZW9tZXRyeSwgcHJvZ3JhbSkge1xyXG4gICAgICAgIHZhciBpc1N0YXRpYyA9ICFnZW9tZXRyeS5keW5hbWljO1xyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG5cclxuICAgICAgICB2YXIgdmFvSWQgPSB0aGlzLl9fdWlkX18gKyAnLScgKyBwcm9ncmFtLl9fdWlkX187XHJcbiAgICAgICAgdmFyIHZhbyA9IGdlb21ldHJ5Ll9fdmFvQ2FjaGVbdmFvSWRdO1xyXG4gICAgICAgIGlmICghdmFvKSB7XHJcbiAgICAgICAgICAgIHZhciBjaHVua3MgPSBnZW9tZXRyeS5nZXRCdWZmZXJDaHVua3ModGhpcyk7XHJcbiAgICAgICAgICAgIGlmICghY2h1bmtzIHx8ICFjaHVua3MubGVuZ3RoKSB7ICAvLyBFbXB0eSBtZXNoXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNodW5rID0gY2h1bmtzWzBdO1xyXG4gICAgICAgICAgICB2YXIgYXR0cmlidXRlQnVmZmVycyA9IGNodW5rLmF0dHJpYnV0ZUJ1ZmZlcnM7XHJcbiAgICAgICAgICAgIHZhciBpbmRpY2VzQnVmZmVyID0gY2h1bmsuaW5kaWNlc0J1ZmZlcjtcclxuXHJcbiAgICAgICAgICAgIHZhciBhdmFpbGFibGVBdHRyaWJ1dGVzID0gW107XHJcbiAgICAgICAgICAgIHZhciBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUJ1ZmZlckluZm8gPSBhdHRyaWJ1dGVCdWZmZXJzW2FdO1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWMgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLnNlbWFudGljO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN5bWJvbDtcclxuICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpY0luZm8gPSBzaGFkZXIuYXR0cmlidXRlU2VtYW50aWNzW3NlbWFudGljXTtcclxuICAgICAgICAgICAgICAgICAgICBzeW1ib2wgPSBzZW1hbnRpY0luZm8gJiYgc2VtYW50aWNJbmZvLnN5bWJvbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbCA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc3ltYm9sICYmIHByb2dyYW0uYXR0cmlidXRlc1tzeW1ib2xdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlQXR0cmlidXRlcy5wdXNoKGF0dHJpYnV0ZUJ1ZmZlckluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMucHVzaChzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YW8gPSBuZXcgVmVydGV4QXJyYXlPYmplY3QoXHJcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVBdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlQXR0cmlidXRlU3ltYm9scyxcclxuICAgICAgICAgICAgICAgIGluZGljZXNCdWZmZXJcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1N0YXRpYykge1xyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkuX192YW9DYWNoZVt2YW9JZF0gPSB2YW87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBuZWVkc0JpbmRBdHRyaWJ1dGVzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIHZlcnRleCBvYmplY3QgYXJyYXkgY29zdCBhIGxvdFxyXG4gICAgICAgIC8vIFNvIHdlIGRvbid0IHVzZSBpdCBvbiB0aGUgZHluYW1pYyBvYmplY3RcclxuICAgICAgICBpZiAodmFvRXh0ICYmIGlzU3RhdGljKSB7XHJcbiAgICAgICAgICAgIC8vIFVzZSB2ZXJ0ZXggYXJyYXkgb2JqZWN0XHJcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9ibG9nLnRvamljb2RlLmNvbS8yMDEyLzEwL29lc3ZlcnRleGFycmF5b2JqZWN0LWV4dGVuc2lvbi5odG1sXHJcbiAgICAgICAgICAgIGlmICh2YW8udmFvID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHZhby52YW8gPSB2YW9FeHQuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5lZWRzQmluZEF0dHJpYnV0ZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YW9FeHQuYmluZFZlcnRleEFycmF5T0VTKHZhby52YW8pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGF2YWlsYWJsZUF0dHJpYnV0ZXMgPSB2YW8uYXZhaWxhYmxlQXR0cmlidXRlcztcclxuICAgICAgICB2YXIgaW5kaWNlc0J1ZmZlciA9IHZhby5pbmRpY2VzQnVmZmVyO1xyXG5cclxuICAgICAgICBpZiAobmVlZHNCaW5kQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICB2YXIgbG9jYXRpb25MaXN0ID0gcHJvZ3JhbS5lbmFibGVBdHRyaWJ1dGVzKHRoaXMsIHZhby5hdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzLCAodmFvRXh0ICYmIGlzU3RhdGljICYmIHZhbykpO1xyXG4gICAgICAgICAgICAvLyBTZXR0aW5nIGF0dHJpYnV0ZXM7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXZhaWxhYmxlQXR0cmlidXRlcy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gbG9jYXRpb25MaXN0W2FdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUJ1ZmZlckluZm8gPSBhdmFpbGFibGVBdHRyaWJ1dGVzW2FdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGF0dHJpYnV0ZUJ1ZmZlckluZm8uYnVmZmVyO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNpemUgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLnNpemU7XHJcbiAgICAgICAgICAgICAgICB2YXIgZ2xUeXBlID0gYXR0cmlidXRlQnVmZmVyVHlwZU1hcFthdHRyaWJ1dGVCdWZmZXJJbmZvLnR5cGVdIHx8IF9nbC5GTE9BVDtcclxuXHJcbiAgICAgICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlcihfZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgX2dsLnZlcnRleEF0dHJpYlBvaW50ZXIobG9jYXRpb24sIHNpemUsIGdsVHlwZSwgZmFsc2UsIDAsIDApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZ2VvbWV0cnkuaXNVc2VJbmRpY2VzKCkpIHtcclxuICAgICAgICAgICAgICAgIF9nbC5iaW5kQnVmZmVyKF9nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgaW5kaWNlc0J1ZmZlci5idWZmZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdmFvO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW5kZXJQcmVaOiBmdW5jdGlvbiAobGlzdCwgc2NlbmUsIGNhbWVyYSkge1xyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBwcmVaUGFzc01hdGVyaWFsID0gdGhpcy5fcHJlek1hdGVyaWFsIHx8IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LnByZXoudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucHJlei5mcmFnbWVudCcpKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX3ByZXpNYXRlcmlhbCA9IHByZVpQYXNzTWF0ZXJpYWw7XHJcblxyXG4gICAgICAgIF9nbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgIF9nbC5kZXB0aE1hc2sodHJ1ZSk7XHJcblxyXG4gICAgICAgIC8vIFN0YXR1c1xyXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyhsaXN0LCBjYW1lcmEsIHtcclxuICAgICAgICAgICAgaWZSZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIXJlbmRlcmFibGUuaWdub3JlUHJlWjtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBwcmV2UmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdEEgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdEIgPSBwcmV2UmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtYXRBLmdldCgnZGlmZnVzZU1hcCcpICE9PSBtYXRCLmdldCgnZGlmZnVzZU1hcCcpXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgKG1hdEEuZ2V0KCdhbHBoYUN1dG9mZicpIHx8IDApICE9PSAobWF0Qi5nZXQoJ2FscGhhQ3V0b2ZmJykgfHwgMCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGdldFVuaWZvcm06IGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBkZXB0aE1hdGVyaWFsLCBzeW1ib2wpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzeW1ib2wgPT09ICdhbHBoYU1hcCcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ2RpZmZ1c2VNYXAnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ2FscGhhQ3V0b2ZmJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLm1hdGVyaWFsLmlzRGVmaW5lZCgnZnJhZ21lbnQnLCAnQUxQSEFfVEVTVCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdkaWZmdXNlTWFwJylcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFscGhhQ3V0b2ZmID0gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ2FscGhhQ3V0b2ZmJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbHBoYUN1dG9mZiB8fCAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3V2UmVwZWF0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgndXZSZXBlYXQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3V2T2Zmc2V0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgndXZPZmZzZXQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXB0aE1hdGVyaWFsLmdldChzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZVpQYXNzTWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNvcnQ6IHRoaXMub3BhcXVlU29ydENvbXBhcmVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgX2dsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgZ2l2ZW4gc2NlbmUsIGluY2x1ZGluZyBhbGwgZ2VvbWV0cmlzLCB0ZXh0dXJlcyBhbmQgc2hhZGVycyBpbiB0aGUgc2NlbmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZVNjZW5lOiBmdW5jdGlvbihzY2VuZSkge1xyXG4gICAgICAgIHRoaXMuZGlzcG9zZU5vZGUoc2NlbmUsIHRydWUsIHRydWUpO1xyXG4gICAgICAgIHNjZW5lLmRpc3Bvc2UoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdpdmVuIG5vZGUsIGluY2x1ZGluZyBhbGwgZ2VvbWV0cmllcywgdGV4dHVyZXMgYW5kIHNoYWRlcnMgYXR0YWNoZWQgb24gaXQgb3IgaXRzIGRlc2NlbmRhbnRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBub2RlXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkaXNwb3NlR2VvbWV0cnk9ZmFsc2VdIElmIGRpc3Bvc2UgdGhlIGdlb21ldHJpZXMgdXNlZCBpbiB0aGUgZGVzY2VuZGFudCBtZXNoXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkaXNwb3NlVGV4dHVyZT1mYWxzZV0gSWYgZGlzcG9zZSB0aGUgdGV4dHVyZXMgdXNlZCBpbiB0aGUgZGVzY2VuZGFudCBtZXNoXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VOb2RlOiBmdW5jdGlvbihyb290LCBkaXNwb3NlR2VvbWV0cnksIGRpc3Bvc2VUZXh0dXJlKSB7XHJcbiAgICAgICAgLy8gRGV0dGFjaGVkIGZyb20gcGFyZW50XHJcbiAgICAgICAgaWYgKHJvb3QuZ2V0UGFyZW50KCkpIHtcclxuICAgICAgICAgICAgcm9vdC5nZXRQYXJlbnQoKS5yZW1vdmUocm9vdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBkaXNwb3NlZE1hcCA9IHt9O1xyXG4gICAgICAgIHJvb3QudHJhdmVyc2UoZnVuY3Rpb24obm9kZSkge1xyXG4gICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBub2RlLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICBpZiAobm9kZS5nZW9tZXRyeSAmJiBkaXNwb3NlR2VvbWV0cnkpIHtcclxuICAgICAgICAgICAgICAgIG5vZGUuZ2VvbWV0cnkuZGlzcG9zZSh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGlzcG9zZVRleHR1cmUgJiYgbWF0ZXJpYWwgJiYgIWRpc3Bvc2VkTWFwW21hdGVyaWFsLl9fdWlkX19dKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZVVuaWZvcm1zID0gbWF0ZXJpYWwuZ2V0VGV4dHVyZVVuaWZvcm1zKCk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IHRleHR1cmVVbmlmb3Jtcy5sZW5ndGg7IHUrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtTmFtZSA9IHRleHR1cmVVbmlmb3Jtc1t1XTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gbWF0ZXJpYWwudW5pZm9ybXNbdW5pZm9ybU5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtVHlwZSA9IG1hdGVyaWFsLnVuaWZvcm1zW3VuaWZvcm1OYW1lXS50eXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodW5pZm9ybVR5cGUgPT09ICd0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWwuZGlzcG9zZSAmJiB2YWwuZGlzcG9zZSh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUgPT09ICd0dicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB2YWwubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxba10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxba10uZGlzcG9zZSAmJiB2YWxba10uZGlzcG9zZSh0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRpc3Bvc2VkTWFwW21hdGVyaWFsLl9fdWlkX19dID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBQYXJ0aWNsZSBzeXN0ZW0gYW5kIEFtYmllbnRDdWJlbWFwIGxpZ2h0IG5lZWQgdG8gZGlzcG9zZVxyXG4gICAgICAgICAgICBpZiAobm9kZS5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLmRpc3Bvc2UodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdpdmVuIGdlb21ldHJ5XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuR2VvbWV0cnl9IGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VHZW9tZXRyeTogZnVuY3Rpb24oZ2VvbWV0cnkpIHtcclxuICAgICAgICBnZW9tZXRyeS5kaXNwb3NlKHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgZ2l2ZW4gdGV4dHVyZVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlRleHR1cmV9IHRleHR1cmVcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZVRleHR1cmU6IGZ1bmN0aW9uKHRleHR1cmUpIHtcclxuICAgICAgICB0ZXh0dXJlLmRpc3Bvc2UodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBnaXZlbiBmcmFtZSBidWZmZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5GcmFtZUJ1ZmZlcn0gZnJhbWVCdWZmZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZUZyYW1lQnVmZmVyOiBmdW5jdGlvbihmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgIGZyYW1lQnVmZmVyLmRpc3Bvc2UodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAoKSB7fSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnQgc2NyZWVuIGNvb3JkcyB0byBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcyhOREMpXHJcbiAgICAgKiBTY3JlZW4gY29vcmRzIGNhbiBnZXQgZnJvbSBtb3VzZSBldmVudCwgaXQgaXMgcG9zaXRpb25lZCByZWxhdGl2ZSB0byBjYW52YXMgZWxlbWVudFxyXG4gICAgICogTkRDIGNhbiBiZSB1c2VkIGluIHJheSBjYXN0aW5nIHdpdGggQ2FtZXJhLnByb3RvdHlwZS5jYXN0UmF5IG1ldGhvZHNcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgICAgIHhcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gICAgICAgeVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBbb3V0XVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzY3JlZW5Ub05EQzogZnVuY3Rpb24oeCwgeSwgb3V0KSB7XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSW52ZXJ0IHk7XHJcbiAgICAgICAgeSA9IHRoaXMuX2hlaWdodCAtIHk7XHJcblxyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7XHJcbiAgICAgICAgdmFyIGFyciA9IG91dC5hcnJheTtcclxuICAgICAgICBhcnJbMF0gPSAoeCAtIHZpZXdwb3J0LngpIC8gdmlld3BvcnQud2lkdGg7XHJcbiAgICAgICAgYXJyWzBdID0gYXJyWzBdICogMiAtIDE7XHJcbiAgICAgICAgYXJyWzFdID0gKHkgLSB2aWV3cG9ydC55KSAvIHZpZXdwb3J0LmhlaWdodDtcclxuICAgICAgICBhcnJbMV0gPSBhcnJbMV0gKiAyIC0gMTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH1cclxufSk7XHJcblxyXG4vKipcclxuICogT3BhcXVlIHJlbmRlcmFibGVzIGNvbXBhcmUgZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5SZW5kZXJhYmxlfSB4XHJcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyYWJsZX0geVxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKiBAc3RhdGljXHJcbiAqL1xyXG5SZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZSA9IFJlbmRlcmVyLnByb3RvdHlwZS5vcGFxdWVTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uKHgsIHkpIHtcclxuICAgIC8vIFByaW9yaXR5IHJlbmRlck9yZGVyIC0+IHByb2dyYW0gLT4gbWF0ZXJpYWwgLT4gZ2VvbWV0cnlcclxuICAgIGlmICh4LnJlbmRlck9yZGVyID09PSB5LnJlbmRlck9yZGVyKSB7XHJcbiAgICAgICAgaWYgKHguX19wcm9ncmFtID09PSB5Ll9fcHJvZ3JhbSkge1xyXG4gICAgICAgICAgICBpZiAoeC5tYXRlcmlhbCA9PT0geS5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHguZ2VvbWV0cnkuX191aWRfXyAtIHkuZ2VvbWV0cnkuX191aWRfXztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geC5tYXRlcmlhbC5fX3VpZF9fIC0geS5tYXRlcmlhbC5fX3VpZF9fO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoeC5fX3Byb2dyYW0gJiYgeS5fX3Byb2dyYW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHguX19wcm9ncmFtLl9fdWlkX18gLSB5Ll9fcHJvZ3JhbS5fX3VpZF9fO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHJldHVybiB4LnJlbmRlck9yZGVyIC0geS5yZW5kZXJPcmRlcjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc3BhcmVudCByZW5kZXJhYmxlcyBjb21wYXJlIGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyYWJsZX0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmFibGV9IGJcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICogQHN0YXRpY1xyXG4gKi9cclxuUmVuZGVyZXIudHJhbnNwYXJlbnRTb3J0Q29tcGFyZSA9IFJlbmRlcmVyLnByb3RvdHlwZS50cmFuc3BhcmVudFNvcnRDb21wYXJlID0gZnVuY3Rpb24oeCwgeSkge1xyXG4gICAgLy8gUHJpb3JpdHkgcmVuZGVyT3JkZXIgLT4gZGVwdGggLT4gcHJvZ3JhbSAtPiBtYXRlcmlhbCAtPiBnZW9tZXRyeVxyXG5cclxuICAgIGlmICh4LnJlbmRlck9yZGVyID09PSB5LnJlbmRlck9yZGVyKSB7XHJcbiAgICAgICAgaWYgKHguX19kZXB0aCA9PT0geS5fX2RlcHRoKSB7XHJcbiAgICAgICAgICAgIGlmICh4Ll9fcHJvZ3JhbSA9PT0geS5fX3Byb2dyYW0pIHtcclxuICAgICAgICAgICAgICAgIGlmICh4Lm1hdGVyaWFsID09PSB5Lm1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguZ2VvbWV0cnkuX191aWRfXyAtIHkuZ2VvbWV0cnkuX191aWRfXztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB4Lm1hdGVyaWFsLl9fdWlkX18gLSB5Lm1hdGVyaWFsLl9fdWlkX187XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHguX19wcm9ncmFtICAmJiB5Ll9fcHJvZ3JhbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHguX19wcm9ncmFtLl9fdWlkX18gLSB5Ll9fcHJvZ3JhbS5fX3VpZF9fO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBEZXB0aCBpcyBuZWdhdGl2ZVxyXG4gICAgICAgIC8vIFNvIGZhcnRoZXIgb2JqZWN0IGhhcyBzbWFsbGVyIGRlcHRoIHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHguX19kZXB0aCAtIHkuX19kZXB0aDtcclxuICAgIH1cclxuICAgIHJldHVybiB4LnJlbmRlck9yZGVyIC0geS5yZW5kZXJPcmRlcjtcclxufTtcclxuXHJcbi8vIFRlbXBvcmFyeSB2YXJpYWJsZXNcclxudmFyIG1hdHJpY2VzID0ge1xyXG4gICAgSURFTlRJVFk6IG1hdDRDcmVhdGUoKSxcclxuXHJcbiAgICBXT1JMRDogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFVzogbWF0NENyZWF0ZSgpLFxyXG4gICAgUFJPSkVDVElPTjogbWF0NENyZWF0ZSgpLFxyXG4gICAgV09STERWSUVXOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBWSUVXUFJPSkVDVElPTjogbWF0NENyZWF0ZSgpLFxyXG4gICAgV09STERWSUVXUFJPSkVDVElPTjogbWF0NENyZWF0ZSgpLFxyXG5cclxuICAgIFdPUkxESU5WRVJTRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV0lOVkVSU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFBST0pFQ1RJT05JTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdJTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBWSUVXUFJPSkVDVElPTklOVkVSU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXHJcblxyXG4gICAgV09STERUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFZJRVdUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFBST0pFQ1RJT05UUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFV1RSQU5TUE9TRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV1BST0pFQ1RJT05UUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFV1BST0pFQ1RJT05UUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxESU5WRVJTRVRSQU5TUE9TRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV0lOVkVSU0VUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFBST0pFQ1RJT05JTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdJTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBWSUVXUFJPSkVDVElPTklOVkVSU0VUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKClcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LlJlbmRlcmVyLkNPTE9SX0JVRkZFUl9CSVRcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmVyLkNPTE9SX0JVRkZFUl9CSVQgPSBnbGVudW0uQ09MT1JfQlVGRkVSX0JJVDtcclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuUmVuZGVyZXIuREVQVEhfQlVGRkVSX0JJVFxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyZXIuREVQVEhfQlVGRkVSX0JJVCA9IGdsZW51bS5ERVBUSF9CVUZGRVJfQklUO1xyXG4vKipcclxuICogQG5hbWUgY2xheS5SZW5kZXJlci5TVEVOQ0lMX0JVRkZFUl9CSVRcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmVyLlNURU5DSUxfQlVGRkVSX0JJVCA9IGdsZW51bS5TVEVOQ0lMX0JVRkZFUl9CSVQ7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBSZW5kZXJlcjtcclxuIiwiaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlZlY3RvcjNcclxuICogQHBhcmFtIHtudW1iZXJ9IHhcclxuICogQHBhcmFtIHtudW1iZXJ9IHlcclxuICogQHBhcmFtIHtudW1iZXJ9IHpcclxuICovXHJcbnZhciBWZWN0b3IzID0gZnVuY3Rpb24oeCwgeSwgeikge1xyXG5cclxuICAgIHggPSB4IHx8IDA7XHJcbiAgICB5ID0geSB8fCAwO1xyXG4gICAgeiA9IHogfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JhZ2Ugb2YgVmVjdG9yMywgcmVhZCBhbmQgd3JpdGUgb2YgeCwgeSwgeiB3aWxsIGNoYW5nZSB0aGUgdmFsdWVzIGluIGFycmF5XHJcbiAgICAgKiBBbGwgbWV0aG9kcyBhbHNvIG9wZXJhdGUgb24gdGhlIGFycmF5IGluc3RlYWQgb2YgeCwgeSwgeiBjb21wb25lbnRzXHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjMjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSB2ZWMzLmZyb21WYWx1ZXMoeCwgeSwgeik7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXJ0eSBmbGFnIGlzIHVzZWQgYnkgdGhlIE5vZGUgdG8gZGV0ZXJtaW5lXHJcbiAgICAgKiBpZiB0aGUgbWF0cml4IGlzIHVwZGF0ZWQgdG8gbGF0ZXN0XHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yMyNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuVmVjdG9yMy5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IFZlY3RvcjMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYiB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCwgeSBhbmQgeiBjb21wb25lbnRzXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB6XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24gKHgsIHksIHopIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0geDtcclxuICAgICAgICB0aGlzLmFycmF5WzFdID0geTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gejtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSBhcnJbMF07XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IGFyclsxXTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gYXJyWzJdO1xyXG5cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgVmVjdG9yM1xyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yMyh0aGlzLngsIHRoaXMueSwgdGhpcy56KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGZyb20gYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcm9zcyBwcm9kdWN0IG9mIHNlbGYgYW5kIGIsIHdyaXR0ZW4gdG8gYSBWZWN0b3IzIG91dFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgY3Jvc3M6IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgdmVjMy5jcm9zcyh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIGRpc3RhbmNlXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGlzdDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5kaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLmRpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBkaXZpZGVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBkaXY6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5kaXYodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpdmlkZSBzZWxmIGJ5IGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBkaXZpZGU6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5kaXZpZGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMuZG90KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIG9mIGxlbmd0aFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBsZW46IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5sZW4odGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVuZ3RoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMubGVuZ3RoKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogTGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBhIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgdFxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBsZXJwOiBmdW5jdGlvbiAoYSwgYiwgdCkge1xyXG4gICAgICAgIHZlYzMubGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWluaW11bSBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgbWluOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMubWluKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXhpbXVtIG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBtYXg6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5tYXgodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICB2ZWMzLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXV0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5tdWx0aXBseSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTmVnYXRlIHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgbmVnYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmVjMy5uZWdhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbGl6ZSBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZlYzMubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSByYW5kb20geCwgeSwgeiBjb21wb25lbnRzIHdpdGggYSBnaXZlbiBzY2FsZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICByYW5kb206IGZ1bmN0aW9uIChzY2FsZSkge1xyXG4gICAgICAgIHZlYzMucmFuZG9tKHRoaXMuYXJyYXksIHNjYWxlKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgc2VsZlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgc2NhbGU6IGZ1bmN0aW9uIChzKSB7XHJcbiAgICAgICAgdmVjMy5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgYiBhbmQgYWRkIHRvIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgc2NhbGVBbmRBZGQ6IGZ1bmN0aW9uIChiLCBzKSB7XHJcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckRpc3Q6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMuc3FyRGlzdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxdWFyZWREaXN0YW5jZTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5zcXVhcmVkRGlzdGFuY2UodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWRMZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3FyTGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMuc3FyTGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLnNxdWFyZWRMZW5ndGgodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHN1YnRyYWN0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgc3ViOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuc3ViKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdWJ0cmFjdCBiIGZyb20gc2VsZlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHN1YnRyYWN0OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuc3VidHJhY3QodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgzIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQzOiBmdW5jdGlvbiAobSkge1xyXG4gICAgICAgIHZlYzMudHJhbnNmb3JtTWF0Myh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNmb3JtIHNlbGYgd2l0aCBhIE1hdHJpeDQgbVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRyYW5zZm9ybU1hdDQ6IGZ1bmN0aW9uIChtKSB7XHJcbiAgICAgICAgdmVjMy50cmFuc2Zvcm1NYXQ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBRdWF0ZXJuaW9uIHFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1RdWF0OiBmdW5jdGlvbiAocSkge1xyXG4gICAgICAgIHZlYzMudHJhbnNmb3JtUXVhdCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBxLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhc25mb3JtIHNlbGYgaW50byBwcm9qZWN0aW9uIHNwYWNlIHdpdGggbVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGFwcGx5UHJvamVjdGlvbjogZnVuY3Rpb24gKG0pIHtcclxuICAgICAgICB2YXIgdiA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgbSA9IG0uYXJyYXk7XHJcblxyXG4gICAgICAgIC8vIFBlcnNwZWN0aXZlIHByb2plY3Rpb25cclxuICAgICAgICBpZiAobVsxNV0gPT09IDApIHtcclxuICAgICAgICAgICAgdmFyIHcgPSAtMSAvIHZbMl07XHJcbiAgICAgICAgICAgIHZbMF0gPSBtWzBdICogdlswXSAqIHc7XHJcbiAgICAgICAgICAgIHZbMV0gPSBtWzVdICogdlsxXSAqIHc7XHJcbiAgICAgICAgICAgIHZbMl0gPSAobVsxMF0gKiB2WzJdICsgbVsxNF0pICogdztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZbMF0gPSBtWzBdICogdlswXSArIG1bMTJdO1xyXG4gICAgICAgICAgICB2WzFdID0gbVs1XSAqIHZbMV0gKyBtWzEzXTtcclxuICAgICAgICAgICAgdlsyXSA9IG1bMTBdICogdlsyXSArIG1bMTRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICBldWxlckZyb21RdWF0OiBmdW5jdGlvbihxLCBvcmRlcikge1xyXG4gICAgICAgIFZlY3RvcjMuZXVsZXJGcm9tUXVhdCh0aGlzLCBxLCBvcmRlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIGV1bGVyRnJvbU1hdDM6IGZ1bmN0aW9uIChtLCBvcmRlcikge1xyXG4gICAgICAgIFZlY3RvcjMuZXVsZXJGcm9tTWF0Myh0aGlzLCBtLCBvcmRlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xyXG4vLyBHZXR0ZXIgYW5kIFNldHRlclxyXG5pZiAoZGVmaW5lUHJvcGVydHkpIHtcclxuXHJcbiAgICB2YXIgcHJvdG8gPSBWZWN0b3IzLnByb3RvdHlwZTtcclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgeFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzBdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVswXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneScsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMV07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzFdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHpcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd6Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVsyXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMl0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5cclxuLy8gU3VwcGx5IG1ldGhvZHMgdGhhdCBhcmUgbm90IGluIHBsYWNlXHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLmFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5hZGQob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB4XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHlcclxuICogQHBhcmFtICB7bnVtYmVyfSAgelxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnNldCA9IGZ1bmN0aW9uKG91dCwgeCwgeSwgeikge1xyXG4gICAgdmVjMy5zZXQob3V0LmFycmF5LCB4LCB5LCB6KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLmNvcHkgPSBmdW5jdGlvbihvdXQsIGIpIHtcclxuICAgIHZlYzMuY29weShvdXQuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5jcm9zcyA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5jcm9zcyhvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5kaXN0ID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgcmV0dXJuIHZlYzMuZGlzdGFuY2UoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5kaXN0YW5jZSA9IFZlY3RvcjMuZGlzdDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMuZGl2ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMzLmRpdmlkZShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMuZGl2aWRlID0gVmVjdG9yMy5kaXY7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IzLmRvdCA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHJldHVybiB2ZWMzLmRvdChhLmFycmF5LCBiLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5sZW4gPSBmdW5jdGlvbihiKSB7XHJcbiAgICByZXR1cm4gdmVjMy5sZW5ndGgoYi5hcnJheSk7XHJcbn07XHJcblxyXG4vLyBWZWN0b3IzLmxlbmd0aCA9IFZlY3RvcjMubGVuO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgdFxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLmxlcnAgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHQpIHtcclxuICAgIHZlYzMubGVycChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5taW4ob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMzLm1heChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5tdWx0aXBseShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5tdWx0aXBseSA9IFZlY3RvcjMubXVsO1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMubmVnYXRlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2ZWMzLm5lZ2F0ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2ZWMzLm5vcm1hbGl6ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5yYW5kb20gPSBmdW5jdGlvbihvdXQsIHNjYWxlKSB7XHJcbiAgICB2ZWMzLnJhbmRvbShvdXQuYXJyYXksIHNjYWxlKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBzY2FsZSkge1xyXG4gICAgdmVjMy5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHNjYWxlKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjMuc3FyRGlzdCA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHJldHVybiB2ZWMzLnNxckRpc3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IzLnNxdWFyZWREaXN0YW5jZSA9IFZlY3RvcjMuc3FyRGlzdDtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IzLnNxckxlbiA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHJldHVybiB2ZWMzLnNxckxlbihhLmFycmF5KTtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5zcXVhcmVkTGVuZ3RoID0gVmVjdG9yMy5zcXJMZW47XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnN1YiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5zdWJ0cmFjdChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5zdWJ0cmFjdCA9IFZlY3RvcjMuc3ViO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtNYXRyaXgzfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMudHJhbnNmb3JtTWF0MyA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMy50cmFuc2Zvcm1NYXQzKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnRyYW5zZm9ybU1hdDQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZlYzMudHJhbnNmb3JtTWF0NChvdXQuYXJyYXksIGEuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnRyYW5zZm9ybVF1YXQgPSBmdW5jdGlvbihvdXQsIGEsIHEpIHtcclxuICAgIHZlYzMudHJhbnNmb3JtUXVhdChvdXQuYXJyYXksIGEuYXJyYXksIHEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gY2xhbXAodmFsLCBtaW4sIG1heCkge1xyXG4gICAgcmV0dXJuIHZhbCA8IG1pbiA/IG1pbiA6ICh2YWwgPiBtYXggPyBtYXggOiB2YWwpO1xyXG59XHJcbnZhciBhdGFuMiA9IE1hdGguYXRhbjI7XHJcbnZhciBhc2luID0gTWF0aC5hc2luO1xyXG52YXIgYWJzID0gTWF0aC5hYnM7XHJcbi8qKlxyXG4gKiBDb252ZXJ0IHF1YXRlcm5pb24gdG8gZXVsZXIgYW5nbGVcclxuICogUXVhdGVybmlvbiBtdXN0IGJlIG5vcm1hbGl6ZWRcclxuICogRnJvbSB0aHJlZS5qc1xyXG4gKi9cclxuVmVjdG9yMy5ldWxlckZyb21RdWF0ID0gZnVuY3Rpb24gKG91dCwgcSwgb3JkZXIpIHtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcSA9IHEuYXJyYXk7XHJcblxyXG4gICAgdmFyIHRhcmdldCA9IG91dC5hcnJheTtcclxuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXTtcclxuICAgIHZhciB4MiA9IHggKiB4O1xyXG4gICAgdmFyIHkyID0geSAqIHk7XHJcbiAgICB2YXIgejIgPSB6ICogejtcclxuICAgIHZhciB3MiA9IHcgKiB3O1xyXG5cclxuICAgIHZhciBvcmRlciA9IChvcmRlciB8fCAnWFlaJykudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICBzd2l0Y2ggKG9yZGVyKSB7XHJcbiAgICAgICAgY2FzZSAnWFlaJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoMiAqICh4ICogdyAtIHkgKiB6KSwgKHcyIC0geDIgLSB5MiArIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGFzaW4oY2xhbXAoMiAqICh4ICogeiArIHkgKiB3KSwgLSAxLCAxKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKDIgKiAoeiAqIHcgLSB4ICogeSksICh3MiArIHgyIC0geTIgLSB6MikpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWFonOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhc2luKGNsYW1wKDIgKiAoeCAqIHcgLSB5ICogeiksIC0gMSwgMSkpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMigyICogKHggKiB6ICsgeSAqIHcpLCAodzIgLSB4MiAtIHkyICsgejIpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIoMiAqICh4ICogeSArIHogKiB3KSwgKHcyIC0geDIgKyB5MiAtIHoyKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1pYWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGFzaW4oY2xhbXAoMiAqICh4ICogdyArIHkgKiB6KSwgLSAxLCAxKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKDIgKiAoeSAqIHcgLSB6ICogeCksICh3MiAtIHgyIC0geTIgKyB6MikpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigyICogKHogKiB3IC0geCAqIHkpLCAodzIgLSB4MiArIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWllYJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoMiAqICh4ICogdyArIHogKiB5KSwgKHcyIC0geDIgLSB5MiArIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGFzaW4oY2xhbXAoMiAqICh5ICogdyAtIHggKiB6KSwgLSAxLCAxKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKDIgKiAoeCAqIHkgKyB6ICogdyksICh3MiArIHgyIC0geTIgLSB6MikpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWlgnOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMigyICogKHggKiB3IC0geiAqIHkpLCAodzIgLSB4MiArIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoMiAqICh5ICogdyAtIHggKiB6KSwgKHcyICsgeDIgLSB5MiAtIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGFzaW4oY2xhbXAoMiAqICh4ICogeSArIHogKiB3KSwgLSAxLCAxKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1haWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKDIgKiAoeCAqIHcgKyB5ICogeiksICh3MiAtIHgyICsgeTIgLSB6MikpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMigyICogKHggKiB6ICsgeSAqIHcpLCAodzIgKyB4MiAtIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXNpbihjbGFtcCgyICogKHogKiB3IC0geCAqIHkpLCAtIDEsIDEpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmtvd24gb3JkZXI6ICcgKyBvcmRlcik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgcm90YXRpb24gbWF0cml4IHRvIGV1bGVyIGFuZ2xlXHJcbiAqIGZyb20gdGhyZWUuanNcclxuICovXHJcblZlY3RvcjMuZXVsZXJGcm9tTWF0MyA9IGZ1bmN0aW9uIChvdXQsIG0sIG9yZGVyKSB7XHJcbiAgICAvLyBhc3N1bWVzIHRoZSB1cHBlciAzeDMgb2YgbSBpcyBhIHB1cmUgcm90YXRpb24gbWF0cml4IChpLmUsIHVuc2NhbGVkKVxyXG4gICAgdmFyIHRlID0gbS5hcnJheTtcclxuICAgIHZhciBtMTEgPSB0ZVswXSwgbTEyID0gdGVbM10sIG0xMyA9IHRlWzZdO1xyXG4gICAgdmFyIG0yMSA9IHRlWzFdLCBtMjIgPSB0ZVs0XSwgbTIzID0gdGVbN107XHJcbiAgICB2YXIgbTMxID0gdGVbMl0sIG0zMiA9IHRlWzVdLCBtMzMgPSB0ZVs4XTtcclxuICAgIHZhciB0YXJnZXQgPSBvdXQuYXJyYXk7XHJcblxyXG4gICAgdmFyIG9yZGVyID0gKG9yZGVyIHx8ICdYWVonKS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgIHN3aXRjaCAob3JkZXIpIHtcclxuICAgICAgICBjYXNlICdYWVonOlxyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhc2luKGNsYW1wKG0xMywgLTEsIDEpKTtcclxuICAgICAgICAgICAgaWYgKGFicyhtMTMpIDwgMC45OTk5OSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoLW0yMywgbTMzKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKC1tMTIsIG0xMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMihtMzIsIG0yMik7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1lYWic6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGFzaW4oLWNsYW1wKG0yMywgLTEsIDEpKTtcclxuICAgICAgICAgICAgaWYgKGFicyhtMjMpIDwgMC45OTk5OSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIobTEzLCBtMzMpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIobTIxLCBtMjIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoLW0zMSwgbTExKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWlhZJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXNpbihjbGFtcChtMzIsIC0xLCAxKSk7XHJcbiAgICAgICAgICAgIGlmIChhYnMobTMyKSA8IDAuOTk5OTkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKC1tMzEsIG0zMyk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigtbTEyLCBtMjIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKG0yMSwgbTExKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdaWVgnOlxyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhc2luKC1jbGFtcChtMzEsIC0xLCAxKSk7XHJcbiAgICAgICAgICAgIGlmIChhYnMobTMxKSA8IDAuOTk5OTkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKG0zMiwgbTMzKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKG0yMSwgbTExKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigtbTEyLCBtMjIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1laWCc6XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGFzaW4oY2xhbXAobTIxLCAtMSwgMSkpO1xyXG4gICAgICAgICAgICBpZiAoYWJzKG0yMSkgPCAwLjk5OTk5KSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMigtbTIzLCBtMjIpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoLW0zMSwgbTExKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMihtMTMsIG0zMyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWFpZJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXNpbigtY2xhbXAobTEyLCAtMSwgMSkpO1xyXG4gICAgICAgICAgICBpZiAoYWJzKG0xMikgPCAwLjk5OTk5KSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMihtMzIsIG0yMik7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMihtMTMsIG0xMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMigtbTIzLCBtMzMpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua293biBvcmRlcjogJyArIG9yZGVyKTtcclxuICAgIH1cclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhWZWN0b3IzLCB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqL1xyXG4gICAgUE9TSVRJVkVfWDoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMSwgMCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICovXHJcbiAgICBORUdBVElWRV9YOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygtMSwgMCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICovXHJcbiAgICBQT1NJVElWRV9ZOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLCAxLCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKi9cclxuICAgIE5FR0FUSVZFX1k6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKDAsIC0xLCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKi9cclxuICAgIFBPU0lUSVZFX1o6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKDAsIDAsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgTkVHQVRJVkVfWjoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMCwgMCwgLTEpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqL1xyXG4gICAgVVA6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKDAsIDEsIDApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqL1xyXG4gICAgWkVSTzoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yMztcclxuIiwiaW1wb3J0IHF1YXQgZnJvbSAnLi4vZ2xtYXRyaXgvcXVhdCc7XHJcbmltcG9ydCBtYXQzIGZyb20gJy4uL2dsbWF0cml4L21hdDMnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5RdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB6XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XHJcbiAqL1xyXG52YXIgUXVhdGVybmlvbiA9IGZ1bmN0aW9uICh4LCB5LCB6LCB3KSB7XHJcblxyXG4gICAgeCA9IHggfHwgMDtcclxuICAgIHkgPSB5IHx8IDA7XHJcbiAgICB6ID0geiB8fCAwO1xyXG4gICAgdyA9IHcgPT09IHVuZGVmaW5lZCA/IDEgOiB3O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcmFnZSBvZiBRdWF0ZXJuaW9uLCByZWFkIGFuZCB3cml0ZSBvZiB4LCB5LCB6LCB3IHdpbGwgY2hhbmdlIHRoZSB2YWx1ZXMgaW4gYXJyYXlcclxuICAgICAqIEFsbCBtZXRob2RzIGFsc28gb3BlcmF0ZSBvbiB0aGUgYXJyYXkgaW5zdGVhZCBvZiB4LCB5LCB6LCB3IGNvbXBvbmVudHNcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuUXVhdGVybmlvbiNcclxuICAgICAqL1xyXG4gICAgdGhpcy5hcnJheSA9IHF1YXQuZnJvbVZhbHVlcyh4LCB5LCB6LCB3KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpcnR5IGZsYWcgaXMgdXNlZCBieSB0aGUgTm9kZSB0byBkZXRlcm1pbmVcclxuICAgICAqIGlmIHRoZSBtYXRyaXggaXMgdXBkYXRlZCB0byBsYXRlc3RcclxuICAgICAqIEBuYW1lIF9kaXJ0eVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5RdWF0ZXJuaW9uI1xyXG4gICAgICovXHJcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbn07XHJcblxyXG5RdWF0ZXJuaW9uLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogUXVhdGVybmlvbixcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBiIHRvIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcXVhdC5hZGQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgdyBjb21wb25lbnQgZnJvbSB4LCB5LCB6IGNvbXBvbmVudFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBjYWxjdWxhdGVXOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcXVhdC5jYWxjdWxhdGVXKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCwgeSBhbmQgeiBjb21wb25lbnRzXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB6XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB3XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24gKHgsIHksIHosIHcpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0geDtcclxuICAgICAgICB0aGlzLmFycmF5WzFdID0geTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gejtcclxuICAgICAgICB0aGlzLmFycmF5WzNdID0gdztcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHksIHogYW5kIHcgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSBhcnJbMF07XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IGFyclsxXTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gYXJyWzJdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbM10gPSBhcnJbM107XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBRdWF0ZXJuaW9uXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBRdWF0ZXJuaW9uKHRoaXMueCwgdGhpcy55LCB0aGlzLnosIHRoaXMudyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgY29uanVnYXRlIG9mIHNlbGYgSWYgdGhlIHF1YXRlcm5pb24gaXMgbm9ybWFsaXplZCxcclxuICAgICAqIHRoaXMgZnVuY3Rpb24gaXMgZmFzdGVyIHRoYW4gaW52ZXJ0IGFuZCBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBjb25qdWdhdGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBxdWF0LmNvbmp1Z2F0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHF1YXQuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRG90IHByb2R1Y3Qgb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRvdDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICByZXR1cm4gcXVhdC5kb3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gdGhlIGdpdmVuIDN4MyByb3RhdGlvbiBtYXRyaXhcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBmcm9tTWF0MzogZnVuY3Rpb24gKG0pIHtcclxuICAgICAgICBxdWF0LmZyb21NYXQzKHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZnJvbSB0aGUgZ2l2ZW4gNHg0IHJvdGF0aW9uIG1hdHJpeFxyXG4gICAgICogVGhlIDR0aCBjb2x1bW4gYW5kIDR0aCByb3cgd2lsbCBiZSBkcm9wZWRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBmcm9tTWF0NDogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbTMgPSBtYXQzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobSkge1xyXG4gICAgICAgICAgICBtYXQzLmZyb21NYXQ0KG0zLCBtLmFycmF5KTtcclxuICAgICAgICAgICAgLy8gVE9ETyBOb3QgbGlrZSBtYXQ0LCBtYXQzIGluIGdsbWF0cml4IHNlZW1zIHRvIGJlIHJvdy1iYXNlZFxyXG4gICAgICAgICAgICBtYXQzLnRyYW5zcG9zZShtMywgbTMpO1xyXG4gICAgICAgICAgICBxdWF0LmZyb21NYXQzKHRoaXMuYXJyYXksIG0zKTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0byBpZGVudGl0eSBxdWF0ZXJuaW9uXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIGlkZW50aXR5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcXVhdC5pZGVudGl0eSh0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnZlcnQgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBpbnZlcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBxdWF0LmludmVydCh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBvZiBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHF1YXQubGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBxdWF0Lmxlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGEgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB0XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIGxlcnA6IGZ1bmN0aW9uIChhLCBiLCB0KSB7XHJcbiAgICAgICAgcXVhdC5sZXJwKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBtdWw6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcXVhdC5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseUxlZnRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBtdWxMZWZ0OiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIHF1YXQubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11dGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHF1YXQubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11dGlwbHkgYSBhbmQgc2VsZlxyXG4gICAgICogUXVhdGVybmlvbiBtdXRpcGx5IGlzIG5vdCBjb21tdXRhdGl2ZSwgc28gdGhlIHJlc3VsdCBvZiBtdXRpcGx5TGVmdCBpcyBkaWZmZXJlbnQgd2l0aCBtdWx0aXBseS5cclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uIChhKSB7XHJcbiAgICAgICAgcXVhdC5tdWx0aXBseSh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTm9ybWFsaXplIHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcXVhdC5ub3JtYWxpemUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBheGlzXHJcbiAgICAgKiBAcGFyYW0gcmFkXHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZUF4aXM6ZnVuY3Rpb24gKGF4aXMscmFkKSB7XHJcblxyXG4gICAgICAgIHZhciBxdWF0MiA9IG5ldyBRdWF0ZXJuaW9uKCkuYXJyYXk7XHJcblxyXG4gICAgICAgIHF1YXQucm90YXRlQXhpcyh0aGlzLmFycmF5LHF1YXQyLGF4aXMscmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWCBheGlzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVg6IGZ1bmN0aW9uIChyYWQpIHtcclxuXHJcbiAgICAgICAgcXVhdC5yb3RhdGVYKHRoaXMuYXJyYXksIHJhZCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuIGFib3V0IFkgYXhpc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICByb3RhdGVZOiBmdW5jdGlvbiAocmFkKSB7XHJcblxyXG4gICAgICAgIHF1YXQucm90YXRlWSh0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBaIGF4aXNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgcm90YXRlWjogZnVuY3Rpb24gKHJhZCkge1xyXG4gICAgICAgIHF1YXQucm90YXRlWih0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHNlbGYgdG8gcmVwcmVzZW50IHRoZSBzaG9ydGVzdCByb3RhdGlvbiBmcm9tIFZlY3RvcjMgYSB0byBWZWN0b3IzIGIuXHJcbiAgICAgKiBhIGFuZCBiIG5lZWRzIHRvIGJlIG5vcm1hbGl6ZWRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHJvdGF0aW9uVG86IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgcXVhdC5yb3RhdGlvblRvKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgc2VsZiB3aXRoIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBheGVzXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gdmlld1xyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHJpZ2h0XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gdXBcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgc2V0QXhlczogZnVuY3Rpb24gKHZpZXcsIHJpZ2h0LCB1cCkge1xyXG4gICAgICAgIHF1YXQuc2V0QXhlcyh0aGlzLmFycmF5LCB2aWV3LmFycmF5LCByaWdodC5hcnJheSwgdXAuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHNlbGYgd2l0aCBhIHJvdGF0aW9uIGF4aXMgYW5kIHJvdGF0aW9uIGFuZ2xlXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gYXhpc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBzZXRBeGlzQW5nbGU6IGZ1bmN0aW9uIChheGlzLCByYWQpIHtcclxuICAgICAgICBxdWF0LnNldEF4aXNBbmdsZSh0aGlzLmFycmF5LCBheGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm0gc3BoZXJpY2FsIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gdFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBzbGVycDogZnVuY3Rpb24gKGEsIGIsIHQpIHtcclxuICAgICAgICBxdWF0LnNsZXJwKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3Igc3F1YXJlZExlbmd0aFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXJMZW46IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gcXVhdC5zcXJMZW4odGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3F1YXJlZCBsZW5ndGggb2Ygc2VsZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXVhcmVkTGVuZ3RoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHF1YXQuc3F1YXJlZExlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZnJvbSBldWxlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHZcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcmRlclxyXG4gICAgICovXHJcbiAgICBmcm9tRXVsZXI6IGZ1bmN0aW9uICh2LCBvcmRlcikge1xyXG4gICAgICAgIHJldHVybiBRdWF0ZXJuaW9uLmZyb21FdWxlcih0aGlzLCB2LCBvcmRlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuICdbJyArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwodGhpcy5hcnJheSwgJywnKSArICddJztcclxuICAgIH0sXHJcblxyXG4gICAgdG9BcnJheTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcclxuLy8gR2V0dGVyIGFuZCBTZXR0ZXJcclxuaWYgKGRlZmluZVByb3BlcnR5KSB7XHJcblxyXG4gICAgdmFyIHByb3RvID0gUXVhdGVybmlvbi5wcm90b3R5cGU7XHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5RdWF0ZXJuaW9uXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd4Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVswXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgeVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlF1YXRlcm5pb25cclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB6XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuUXVhdGVybmlvblxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneicsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMl07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzJdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHdcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5RdWF0ZXJuaW9uXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd3Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVszXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbM10gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG4vLyBTdXBwbHkgbWV0aG9kcyB0aGF0IGFyZSBub3QgaW4gcGxhY2VcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uYWRkID0gZnVuY3Rpb24gKG91dCwgYSwgYikge1xyXG4gICAgcXVhdC5hZGQob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICB4XHJcbiAqIEBwYXJhbSAge251bWJlcn0gICAgIHlcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgelxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICB3XHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uc2V0ID0gZnVuY3Rpb24gKG91dCwgeCwgeSwgeiwgdykge1xyXG4gICAgcXVhdC5zZXQob3V0LmFycmF5LCB4LCB5LCB6LCB3KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmNvcHkgPSBmdW5jdGlvbiAob3V0LCBiKSB7XHJcbiAgICBxdWF0LmNvcHkob3V0LmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5jYWxjdWxhdGVXID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgcXVhdC5jYWxjdWxhdGVXKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uY29uanVnYXRlID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgcXVhdC5jb25qdWdhdGUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmlkZW50aXR5ID0gZnVuY3Rpb24gKG91dCkge1xyXG4gICAgcXVhdC5pZGVudGl0eShvdXQuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmludmVydCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIHF1YXQuaW52ZXJ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmRvdCA9IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICByZXR1cm4gcXVhdC5kb3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblF1YXRlcm5pb24ubGVuID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybiBxdWF0Lmxlbmd0aChhLmFycmF5KTtcclxufTtcclxuXHJcbi8vIFF1YXRlcm5pb24ubGVuZ3RoID0gUXVhdGVybmlvbi5sZW47XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICB0XHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ubGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcclxuICAgIHF1YXQubGVycChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgdFxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnNsZXJwID0gZnVuY3Rpb24gKG91dCwgYSwgYiwgdCkge1xyXG4gICAgcXVhdC5zbGVycChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5tdWwgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICBxdWF0Lm11bHRpcGx5KG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5tdWx0aXBseSA9IFF1YXRlcm5pb24ubXVsO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICByYWRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5yb3RhdGVYID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICBxdWF0LnJvdGF0ZVgob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICByYWRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5yb3RhdGVZID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICBxdWF0LnJvdGF0ZVkob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICByYWRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5yb3RhdGVaID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICBxdWF0LnJvdGF0ZVoob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gICAgYXhpc1xyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICByYWRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5zZXRBeGlzQW5nbGUgPSBmdW5jdGlvbiAob3V0LCBheGlzLCByYWQpIHtcclxuICAgIHF1YXQuc2V0QXhpc0FuZ2xlKG91dC5hcnJheSwgYXhpcy5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5ub3JtYWxpemUgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBxdWF0Lm5vcm1hbGl6ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnNxckxlbiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4gcXVhdC5zcXJMZW4oYS5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnNxdWFyZWRMZW5ndGggPSBRdWF0ZXJuaW9uLnNxckxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9ICAgIG1cclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5mcm9tTWF0MyA9IGZ1bmN0aW9uIChvdXQsIG0pIHtcclxuICAgIHF1YXQuZnJvbU1hdDMob3V0LmFycmF5LCBtLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICAgIHZpZXdcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICByaWdodFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICAgIHVwXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uc2V0QXhlcyA9IGZ1bmN0aW9uIChvdXQsIHZpZXcsIHJpZ2h0LCB1cCkge1xyXG4gICAgcXVhdC5zZXRBeGVzKG91dC5hcnJheSwgdmlldy5hcnJheSwgcmlnaHQuYXJyYXksIHVwLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICAgIGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICBiXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ucm90YXRpb25UbyA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIHF1YXQucm90YXRpb25UbyhvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBxdWF0ZXJuaW9uIGZyb20gZXVsZXJcclxuICogQHBhcmFtIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gdlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gb3JkZXJcclxuICovXHJcblF1YXRlcm5pb24uZnJvbUV1bGVyID0gZnVuY3Rpb24gKG91dCwgdiwgb3JkZXIpIHtcclxuXHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICB2ID0gdi5hcnJheTtcclxuICAgIHZhciB0YXJnZXQgPSBvdXQuYXJyYXk7XHJcbiAgICB2YXIgYzEgPSBNYXRoLmNvcyh2WzBdIC8gMik7XHJcbiAgICB2YXIgYzIgPSBNYXRoLmNvcyh2WzFdIC8gMik7XHJcbiAgICB2YXIgYzMgPSBNYXRoLmNvcyh2WzJdIC8gMik7XHJcbiAgICB2YXIgczEgPSBNYXRoLnNpbih2WzBdIC8gMik7XHJcbiAgICB2YXIgczIgPSBNYXRoLnNpbih2WzFdIC8gMik7XHJcbiAgICB2YXIgczMgPSBNYXRoLnNpbih2WzJdIC8gMik7XHJcblxyXG4gICAgdmFyIG9yZGVyID0gKG9yZGVyIHx8ICdYWVonKS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgIC8vIGh0dHA6Ly93d3cubWF0aHdvcmtzLmNvbS9tYXRsYWJjZW50cmFsL2ZpbGVleGNoYW5nZS9cclxuICAgIC8vICAyMDY5Ni1mdW5jdGlvbi10by1jb252ZXJ0LWJldHdlZW4tZGNtLWV1bGVyLWFuZ2xlcy1xdWF0ZXJuaW9ucy1hbmQtZXVsZXItdmVjdG9ycy9cclxuICAgIC8vICBjb250ZW50L1NwaW5DYWxjLm1cclxuXHJcbiAgICBzd2l0Y2ggKG9yZGVyKSB7XHJcbiAgICAgICAgY2FzZSAnWFlaJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gczEgKiBjMiAqIGMzICsgYzEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBjMSAqIHMyICogYzMgLSBzMSAqIGMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGMxICogYzIgKiBzMyArIHMxICogczIgKiBjMztcclxuICAgICAgICAgICAgdGFyZ2V0WzNdID0gYzEgKiBjMiAqIGMzIC0gczEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWFonOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBzMSAqIGMyICogYzMgKyBjMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGMxICogczIgKiBjMyAtIHMxICogYzIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYzEgKiBjMiAqIHMzIC0gczEgKiBzMiAqIGMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbM10gPSBjMSAqIGMyICogYzMgKyBzMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1pYWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IHMxICogYzIgKiBjMyAtIGMxICogczIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYzEgKiBzMiAqIGMzICsgczEgKiBjMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBjMSAqIGMyICogczMgKyBzMSAqIHMyICogYzM7XHJcbiAgICAgICAgICAgIHRhcmdldFszXSA9IGMxICogYzIgKiBjMyAtIHMxICogczIgKiBzMztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWllYJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gczEgKiBjMiAqIGMzIC0gYzEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBjMSAqIHMyICogYzMgKyBzMSAqIGMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGMxICogYzIgKiBzMyAtIHMxICogczIgKiBjMztcclxuICAgICAgICAgICAgdGFyZ2V0WzNdID0gYzEgKiBjMiAqIGMzICsgczEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWlgnOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBzMSAqIGMyICogYzMgKyBjMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGMxICogczIgKiBjMyArIHMxICogYzIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYzEgKiBjMiAqIHMzIC0gczEgKiBzMiAqIGMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbM10gPSBjMSAqIGMyICogYzMgLSBzMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1haWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IHMxICogYzIgKiBjMyAtIGMxICogczIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYzEgKiBzMiAqIGMzIC0gczEgKiBjMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBjMSAqIGMyICogczMgKyBzMSAqIHMyICogYzM7XHJcbiAgICAgICAgICAgIHRhcmdldFszXSA9IGMxICogYzIgKiBjMyArIHMxICogczIgKiBzMztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBRdWF0ZXJuaW9uO1xyXG4iLCJpbXBvcnQgbWF0NCBmcm9tICcuLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcbmltcG9ydCBxdWF0IGZyb20gJy4uL2dsbWF0cml4L3F1YXQnO1xyXG5pbXBvcnQgbWF0MyBmcm9tICcuLi9nbG1hdHJpeC9tYXQzJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9WZWN0b3IzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuTWF0cml4NFxyXG4gKi9cclxudmFyIE1hdHJpeDQgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICB0aGlzLl9heGlzWCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICB0aGlzLl9heGlzWSA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICB0aGlzLl9heGlzWiA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIE1hdHJpeDRcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4NCNcclxuICAgICAqL1xyXG4gICAgdGhpcy5hcnJheSA9IG1hdDQuY3JlYXRlKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4NCNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuTWF0cml4NC5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IE1hdHJpeDQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gYXJyW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGFkanVnYXRlIG9mIHNlbGYsIGluLXBsYWNlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGFkam9pbnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDQuYWRqb2ludCh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgTWF0cml4NFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgTWF0cml4NCgpKS5jb3B5KHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgZnJvbSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24oYSkge1xyXG4gICAgICAgIG1hdDQuY29weSh0aGlzLmFycmF5LCBhLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIG1hdHJpeCBkZXRlcm1pbmFudFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkZXRlcm1pbmFudDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdDQuZGV0ZXJtaW5hbnQodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHVwcGVyIDN4MyBwYXJ0IGZyb20gcXVhdGVybmlvblxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGZyb21RdWF0OiBmdW5jdGlvbihxKSB7XHJcbiAgICAgICAgbWF0NC5mcm9tUXVhdCh0aGlzLmFycmF5LCBxLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gYSBxdWF0ZXJuaW9uIHJvdGF0aW9uIGFuZCBhIHZlY3RvciB0cmFuc2xhdGlvblxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgZnJvbVJvdGF0aW9uVHJhbnNsYXRpb246IGZ1bmN0aW9uKHEsIHYpIHtcclxuICAgICAgICBtYXQ0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKHRoaXMuYXJyYXksIHEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZnJvbSBNYXRyaXgyZCwgaXQgaXMgdXNlZCB3aGVuIGNvbnZlcnRpbmcgYSAyZCBzaGFwZSB0byAzZCBzcGFjZS5cclxuICAgICAqIEluIDNkIHNwYWNlIGl0IGlzIGVxdWl2YWxlbnQgdG8gcmFuc2xhdGUgb24geHkgcGxhbmUgYW5kIHJvdGF0ZSBhYm91dCB6IGF4aXNcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG0yZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBmcm9tTWF0MmQ6IGZ1bmN0aW9uKG0yZCkge1xyXG4gICAgICAgIE1hdHJpeDQuZnJvbU1hdDJkKHRoaXMsIG0yZCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gZnJ1c3R1bSBib3VuZHNcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gbGVmdFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSByaWdodFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBib3R0b21cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gdG9wXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IG5lYXJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gZmFyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGZydXN0dW06IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xyXG4gICAgICAgIG1hdDQuZnJ1c3R1bSh0aGlzLmFycmF5LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcik7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0byBhIGlkZW50aXR5IG1hdHJpeFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBpZGVudGl0eTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0NC5pZGVudGl0eSh0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0IHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgaW52ZXJ0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQ0LmludmVydCh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGFzIGEgbWF0cml4IHdpdGggdGhlIGdpdmVuIGV5ZSBwb3NpdGlvbiwgZm9jYWwgcG9pbnQsIGFuZCB1cCBheGlzXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGV5ZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBjZW50ZXJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gdXBcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgbG9va0F0OiBmdW5jdGlvbihleWUsIGNlbnRlciwgdXApIHtcclxuICAgICAgICBtYXQ0Lmxvb2tBdCh0aGlzLmFycmF5LCBleWUuYXJyYXksIGNlbnRlci5hcnJheSwgdXAuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXV0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDQubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgbXVsTGVmdDogZnVuY3Rpb24oYSkge1xyXG4gICAgICAgIG1hdDQubXVsKHRoaXMuYXJyYXksIGEuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQ0Lm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBhIGFuZCBzZWxmLCBhIGlzIG9uIHRoZSBsZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbihhKSB7XHJcbiAgICAgICAgbWF0NC5tdWx0aXBseSh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGFzIGEgb3J0aG9ncmFwaGljIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGxlZnRcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gcmlnaHRcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gYm90dG9tXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRvcFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBuZWFyXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGZhclxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBvcnRobzogZnVuY3Rpb24obGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcclxuICAgICAgICBtYXQ0Lm9ydGhvKHRoaXMuYXJyYXksIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYXMgYSBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBmb3Z5XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGFzcGVjdFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBuZWFyXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGZhclxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBwZXJzcGVjdGl2ZTogZnVuY3Rpb24oZm92eSwgYXNwZWN0LCBuZWFyLCBmYXIpIHtcclxuICAgICAgICBtYXQ0LnBlcnNwZWN0aXZlKHRoaXMuYXJyYXksIGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgcmFkIGFib3V0IGF4aXMuXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHJvdGFpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgcmFkXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGF4aXNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgcm90YXRlOiBmdW5jdGlvbihyYWQsIGF4aXMpIHtcclxuICAgICAgICBtYXQ0LnJvdGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQsIGF4aXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBYIGF4aXMuXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHJvdGFpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVg6IGZ1bmN0aW9uKHJhZCkge1xyXG4gICAgICAgIG1hdDQucm90YXRlWCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBZIGF4aXMuXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHJvdGFpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVk6IGZ1bmN0aW9uKHJhZCkge1xyXG4gICAgICAgIG1hdDQucm90YXRlWSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBaIGF4aXMuXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHJvdGFpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVo6IGZ1bmN0aW9uKHJhZCkge1xyXG4gICAgICAgIG1hdDQucm90YXRlWih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBzZWxmIGJ5IHNcclxuICAgICAqIEVxdWFsIHRvIHJpZ2h0LW11bHRpcGx5IGEgc2NhbGUgbWF0cml4XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICBzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbih2KSB7XHJcbiAgICAgICAgbWF0NC5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNsYXRlIHNlbGYgYnkgdi5cclxuICAgICAqIEVxdWFsIHRvIHJpZ2h0LW11bHRpcGx5IGEgdHJhbnNsYXRlIG1hdHJpeFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgdlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uKHYpIHtcclxuICAgICAgICBtYXQ0LnRyYW5zbGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNwb3NlIHNlbGYsIGluLXBsYWNlLlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc3Bvc2U6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDQudHJhbnNwb3NlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNvbXBvc2UgYSBtYXRyaXggdG8gU1JUXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW3NjYWxlXVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlF1YXRlcm5pb259IHJvdGF0aW9uXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yfSBwb3NpdGlvblxyXG4gICAgICogQHNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbWljcm9zb2Z0LnhuYS5mcmFtZXdvcmsubWF0cml4LmRlY29tcG9zZS5hc3B4XHJcbiAgICAgKi9cclxuICAgIGRlY29tcG9zZU1hdHJpeDogKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgeCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHkgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB6ID0gdmVjMy5jcmVhdGUoKTtcclxuXHJcbiAgICAgICAgdmFyIG0zID0gbWF0My5jcmVhdGUoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNjYWxlLCByb3RhdGlvbiwgcG9zaXRpb24pIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgICAgIHZlYzMuc2V0KHgsIGVsWzBdLCBlbFsxXSwgZWxbMl0pO1xyXG4gICAgICAgICAgICB2ZWMzLnNldCh5LCBlbFs0XSwgZWxbNV0sIGVsWzZdKTtcclxuICAgICAgICAgICAgdmVjMy5zZXQoeiwgZWxbOF0sIGVsWzldLCBlbFsxMF0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHN4ID0gdmVjMy5sZW5ndGgoeCk7XHJcbiAgICAgICAgICAgIHZhciBzeSA9IHZlYzMubGVuZ3RoKHkpO1xyXG4gICAgICAgICAgICB2YXIgc3ogPSB2ZWMzLmxlbmd0aCh6KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGlmIGRldGVybWluZSBpcyBuZWdhdGl2ZSwgd2UgbmVlZCB0byBpbnZlcnQgb25lIHNjYWxlXHJcbiAgICAgICAgICAgIHZhciBkZXQgPSB0aGlzLmRldGVybWluYW50KCk7XHJcbiAgICAgICAgICAgIGlmIChkZXQgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBzeCA9IC1zeDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNjYWxlKSB7XHJcbiAgICAgICAgICAgICAgICBzY2FsZS5zZXQoc3gsIHN5LCBzeik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNldChlbFsxMl0sIGVsWzEzXSwgZWxbMTRdKTtcclxuXHJcbiAgICAgICAgICAgIG1hdDMuZnJvbU1hdDQobTMsIGVsKTtcclxuICAgICAgICAgICAgLy8gTm90IGxpa2UgbWF0NCwgbWF0MyBpbiBnbG1hdHJpeCBzZWVtcyB0byBiZSByb3ctYmFzZWRcclxuICAgICAgICAgICAgLy8gU2VlbXMgZml4ZWQgaW4gZ2wtbWF0cml4IDIuMi4yXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90b2ppL2dsLW1hdHJpeC9pc3N1ZXMvMTE0XHJcbiAgICAgICAgICAgIC8vIG1hdDMudHJhbnNwb3NlKG0zLCBtMyk7XHJcblxyXG4gICAgICAgICAgICBtM1swXSAvPSBzeDtcclxuICAgICAgICAgICAgbTNbMV0gLz0gc3g7XHJcbiAgICAgICAgICAgIG0zWzJdIC89IHN4O1xyXG5cclxuICAgICAgICAgICAgbTNbM10gLz0gc3k7XHJcbiAgICAgICAgICAgIG0zWzRdIC89IHN5O1xyXG4gICAgICAgICAgICBtM1s1XSAvPSBzeTtcclxuXHJcbiAgICAgICAgICAgIG0zWzZdIC89IHN6O1xyXG4gICAgICAgICAgICBtM1s3XSAvPSBzejtcclxuICAgICAgICAgICAgbTNbOF0gLz0gc3o7XHJcblxyXG4gICAgICAgICAgICBxdWF0LmZyb21NYXQzKHJvdGF0aW9uLmFycmF5LCBtMyk7XHJcbiAgICAgICAgICAgIHF1YXQubm9ybWFsaXplKHJvdGF0aW9uLmFycmF5LCByb3RhdGlvbi5hcnJheSk7XHJcblxyXG4gICAgICAgICAgICByb3RhdGlvbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICBwb3NpdGlvbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xyXG5cclxuaWYgKGRlZmluZVByb3BlcnR5KSB7XHJcbiAgICB2YXIgcHJvdG8gPSBNYXRyaXg0LnByb3RvdHlwZTtcclxuICAgIC8qKlxyXG4gICAgICogWiBBeGlzIG9mIGxvY2FsIHRyYW5zZm9ybVxyXG4gICAgICogQG5hbWUgelxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3onLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgICAgIHRoaXMuX2F4aXNaLnNldChlbFs4XSwgZWxbOV0sIGVsWzEwXSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9heGlzWjtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBIZXJlIGhhcyBhIHByb2JsZW1cclxuICAgICAgICAgICAgLy8gSWYgb25seSBzZXQgYW4gaXRlbSBvZiB2ZWN0b3Igd2lsbCBub3Qgd29ya1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB2ID0gdi5hcnJheTtcclxuICAgICAgICAgICAgZWxbOF0gPSB2WzBdO1xyXG4gICAgICAgICAgICBlbFs5XSA9IHZbMV07XHJcbiAgICAgICAgICAgIGVsWzEwXSA9IHZbMl07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBZIEF4aXMgb2YgbG9jYWwgdHJhbnNmb3JtXHJcbiAgICAgKiBAbmFtZSB5XHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4NFxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneScsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5hcnJheTtcclxuICAgICAgICAgICAgdGhpcy5fYXhpc1kuc2V0KGVsWzRdLCBlbFs1XSwgZWxbNl0pO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXhpc1k7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgICAgIHYgPSB2LmFycmF5O1xyXG4gICAgICAgICAgICBlbFs0XSA9IHZbMF07XHJcbiAgICAgICAgICAgIGVsWzVdID0gdlsxXTtcclxuICAgICAgICAgICAgZWxbNl0gPSB2WzJdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogWCBBeGlzIG9mIGxvY2FsIHRyYW5zZm9ybVxyXG4gICAgICogQG5hbWUgeFxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgICAgIHRoaXMuX2F4aXNYLnNldChlbFswXSwgZWxbMV0sIGVsWzJdKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F4aXNYO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB2ID0gdi5hcnJheTtcclxuICAgICAgICAgICAgZWxbMF0gPSB2WzBdO1xyXG4gICAgICAgICAgICBlbFsxXSA9IHZbMV07XHJcbiAgICAgICAgICAgIGVsWzJdID0gdlsyXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG59XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuYWRqb2ludCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0NC5hZGpvaW50KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0NC5jb3B5KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbk1hdHJpeDQuZGV0ZXJtaW5hbnQgPSBmdW5jdGlvbihhKSB7XHJcbiAgICByZXR1cm4gbWF0NC5kZXRlcm1pbmFudChhLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICBtYXQ0LmlkZW50aXR5KG91dC5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgbGVmdFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICByaWdodFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBib3R0b21cclxuICogQHBhcmFtICB7bnVtYmVyfSAgdG9wXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIG5lYXJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgZmFyXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQub3J0aG8gPSBmdW5jdGlvbihvdXQsIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XHJcbiAgICBtYXQ0Lm9ydGhvKG91dC5hcnJheSwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIGZvdnlcclxuICogQHBhcmFtICB7bnVtYmVyfSAgYXNwZWN0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIG5lYXJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgZmFyXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQucGVyc3BlY3RpdmUgPSBmdW5jdGlvbihvdXQsIGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKSB7XHJcbiAgICBtYXQ0LnBlcnNwZWN0aXZlKG91dC5hcnJheSwgZm92eSwgYXNwZWN0LCBuZWFyLCBmYXIpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gZXllXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gY2VudGVyXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gdXBcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5sb29rQXQgPSBmdW5jdGlvbihvdXQsIGV5ZSwgY2VudGVyLCB1cCkge1xyXG4gICAgbWF0NC5sb29rQXQob3V0LmFycmF5LCBleWUuYXJyYXksIGNlbnRlci5hcnJheSwgdXAuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0NC5pbnZlcnQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQubXVsID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBtYXQ0Lm11bChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQubXVsdGlwbHkgPSBNYXRyaXg0Lm11bDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9ICAgIG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5mcm9tUXVhdCA9IGZ1bmN0aW9uKG91dCwgcSkge1xyXG4gICAgbWF0NC5mcm9tUXVhdChvdXQuYXJyYXksIHEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gICAgb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICAgIHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbiA9IGZ1bmN0aW9uKG91dCwgcSwgdikge1xyXG4gICAgbWF0NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihvdXQuYXJyYXksIHEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbTRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gbTJkXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuZnJvbU1hdDJkID0gZnVuY3Rpb24obTQsIG0yZCkge1xyXG4gICAgbTQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHZhciBtMmQgPSBtMmQuYXJyYXk7XHJcbiAgICB2YXIgbTQgPSBtNC5hcnJheTtcclxuXHJcbiAgICBtNFswXSA9IG0yZFswXTtcclxuICAgIG00WzRdID0gbTJkWzJdO1xyXG4gICAgbTRbMTJdID0gbTJkWzRdO1xyXG5cclxuICAgIG00WzFdID0gbTJkWzFdO1xyXG4gICAgbTRbNV0gPSBtMmRbM107XHJcbiAgICBtNFsxM10gPSBtMmRbNV07XHJcblxyXG4gICAgcmV0dXJuIG00O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICByYWRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBheGlzXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQucm90YXRlID0gZnVuY3Rpb24ob3V0LCBhLCByYWQsIGF4aXMpIHtcclxuICAgIG1hdDQucm90YXRlKG91dC5hcnJheSwgYS5hcnJheSwgcmFkLCBheGlzLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQucm90YXRlWCA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XHJcbiAgICBtYXQ0LnJvdGF0ZVgob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICByYWRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5yb3RhdGVZID0gZnVuY3Rpb24ob3V0LCBhLCByYWQpIHtcclxuICAgIG1hdDQucm90YXRlWShvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHJhZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnJvdGF0ZVogPSBmdW5jdGlvbihvdXQsIGEsIHJhZCkge1xyXG4gICAgbWF0NC5yb3RhdGVaKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSB2XHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIG1hdDQuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC50cmFuc3Bvc2UgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDQudHJhbnNwb3NlKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgbWF0NC50cmFuc2xhdGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1hdHJpeDQ7XHJcbiIsImltcG9ydCBWZWN0b3IzIGZyb20gJy4vVmVjdG9yMyc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxudmFyIHZlYzNTZXQgPSB2ZWMzLnNldDtcclxudmFyIHZlYzNDb3B5ID0gdmVjMy5jb3B5O1xyXG5cclxuLyoqXHJcbiAqIEF4aXMgYWxpZ25lZCBib3VuZGluZyBib3hcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LkJvdW5kaW5nQm94XHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBbbWluXVxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW21heF1cclxuICovXHJcbnZhciBCb3VuZGluZ0JveCA9IGZ1bmN0aW9uIChtaW4sIG1heCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWluaW11bSBjb29yZHMgb2YgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLm1pbiA9IG1pbiB8fCBuZXcgVmVjdG9yMyhJbmZpbml0eSwgSW5maW5pdHksIEluZmluaXR5KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1heGltdW0gY29vcmRzIG9mIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5tYXggPSBtYXggfHwgbmV3IFZlY3RvcjMoLUluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eSk7XHJcblxyXG4gICAgdGhpcy52ZXJ0aWNlcyA9IG51bGw7XHJcbn07XHJcblxyXG5Cb3VuZGluZ0JveC5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IEJvdW5kaW5nQm94LFxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgbWluIGFuZCBtYXggY29vcmRzIGZyb20gYSB2ZXJ0aWNlcyBhcnJheVxyXG4gICAgICogQHBhcmFtICB7YXJyYXl9IHZlcnRpY2VzXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUZyb21WZXJ0aWNlczogZnVuY3Rpb24gKHZlcnRpY2VzKSB7XHJcbiAgICAgICAgaWYgKHZlcnRpY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluO1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHZhciBtaW5BcnIgPSBtaW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXhBcnIgPSBtYXguYXJyYXk7XHJcbiAgICAgICAgICAgIHZlYzNDb3B5KG1pbkFyciwgdmVydGljZXNbMF0pO1xyXG4gICAgICAgICAgICB2ZWMzQ29weShtYXhBcnIsIHZlcnRpY2VzWzBdKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZlcnRleCA9IHZlcnRpY2VzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhbMF0gPCBtaW5BcnJbMF0pIHsgbWluQXJyWzBdID0gdmVydGV4WzBdOyB9XHJcbiAgICAgICAgICAgICAgICBpZiAodmVydGV4WzFdIDwgbWluQXJyWzFdKSB7IG1pbkFyclsxXSA9IHZlcnRleFsxXTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleFsyXSA8IG1pbkFyclsyXSkgeyBtaW5BcnJbMl0gPSB2ZXJ0ZXhbMl07IH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodmVydGV4WzBdID4gbWF4QXJyWzBdKSB7IG1heEFyclswXSA9IHZlcnRleFswXTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleFsxXSA+IG1heEFyclsxXSkgeyBtYXhBcnJbMV0gPSB2ZXJ0ZXhbMV07IH1cclxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhbMl0gPiBtYXhBcnJbMl0pIHsgbWF4QXJyWzJdID0gdmVydGV4WzJdOyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWluLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIG1heC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVbmlvbiBvcGVyYXRpb24gd2l0aCBhbm90aGVyIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5Cb3VuZGluZ0JveH0gYmJveFxyXG4gICAgICovXHJcbiAgICB1bmlvbjogZnVuY3Rpb24gKGJib3gpIHtcclxuICAgICAgICB2YXIgbWluID0gdGhpcy5taW47XHJcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xyXG4gICAgICAgIHZlYzMubWluKG1pbi5hcnJheSwgbWluLmFycmF5LCBiYm94Lm1pbi5hcnJheSk7XHJcbiAgICAgICAgdmVjMy5tYXgobWF4LmFycmF5LCBtYXguYXJyYXksIGJib3gubWF4LmFycmF5KTtcclxuICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICBtYXguX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcnNlY3Rpb24gb3BlcmF0aW9uIHdpdGggYW5vdGhlciBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQm91bmRpbmdCb3h9IGJib3hcclxuICAgICAqL1xyXG4gICAgaW50ZXJzZWN0aW9uOiBmdW5jdGlvbiAoYmJveCkge1xyXG4gICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbjtcclxuICAgICAgICB2YXIgbWF4ID0gdGhpcy5tYXg7XHJcbiAgICAgICAgdmVjMy5tYXgobWluLmFycmF5LCBtaW4uYXJyYXksIGJib3gubWluLmFycmF5KTtcclxuICAgICAgICB2ZWMzLm1pbihtYXguYXJyYXksIG1heC5hcnJheSwgYmJveC5tYXguYXJyYXkpO1xyXG4gICAgICAgIG1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIG1heC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGludGVyc2VjdCB3aXRoIGFub3RoZXIgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkJvdW5kaW5nQm94fSBiYm94XHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RCb3VuZGluZ0JveDogZnVuY3Rpb24gKGJib3gpIHtcclxuICAgICAgICB2YXIgX21pbiA9IHRoaXMubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBfbWF4ID0gdGhpcy5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgIHZhciBfbWluMiA9IGJib3gubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBfbWF4MiA9IGJib3gubWF4LmFycmF5O1xyXG5cclxuICAgICAgICByZXR1cm4gISAoX21pblswXSA+IF9tYXgyWzBdIHx8IF9taW5bMV0gPiBfbWF4MlsxXSB8fCBfbWluWzJdID4gX21heDJbMl1cclxuICAgICAgICAgICAgfHwgX21heFswXSA8IF9taW4yWzBdIHx8IF9tYXhbMV0gPCBfbWluMlsxXSB8fCBfbWF4WzJdIDwgX21pbjJbMl0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGNvbnRhaW4gYW5vdGhlciBib3VuZGluZyBib3ggZW50aXJlbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQm91bmRpbmdCb3h9IGJib3hcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGNvbnRhaW5Cb3VuZGluZ0JveDogZnVuY3Rpb24gKGJib3gpIHtcclxuXHJcbiAgICAgICAgdmFyIF9taW4gPSB0aGlzLm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heCA9IHRoaXMubWF4LmFycmF5O1xyXG5cclxuICAgICAgICB2YXIgX21pbjIgPSBiYm94Lm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heDIgPSBiYm94Lm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgcmV0dXJuIF9taW5bMF0gPD0gX21pbjJbMF0gJiYgX21pblsxXSA8PSBfbWluMlsxXSAmJiBfbWluWzJdIDw9IF9taW4yWzJdXHJcbiAgICAgICAgICAgICYmIF9tYXhbMF0gPj0gX21heDJbMF0gJiYgX21heFsxXSA+PSBfbWF4MlsxXSAmJiBfbWF4WzJdID49IF9tYXgyWzJdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGNvbnRhaW4gcG9pbnQgZW50aXJlbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gcG9pbnRcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGNvbnRhaW5Qb2ludDogZnVuY3Rpb24gKHApIHtcclxuICAgICAgICB2YXIgX21pbiA9IHRoaXMubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBfbWF4ID0gdGhpcy5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgIHZhciBfcCA9IHAuYXJyYXk7XHJcblxyXG4gICAgICAgIHJldHVybiBfbWluWzBdIDw9IF9wWzBdICYmIF9taW5bMV0gPD0gX3BbMV0gJiYgX21pblsyXSA8PSBfcFsyXVxyXG4gICAgICAgICAgICAmJiBfbWF4WzBdID49IF9wWzBdICYmIF9tYXhbMV0gPj0gX3BbMV0gJiYgX21heFsyXSA+PSBfcFsyXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBib3VuZGluZyBib3ggaXMgZmluaXRlXHJcbiAgICAgKi9cclxuICAgIGlzRmluaXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIF9taW4gPSB0aGlzLm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heCA9IHRoaXMubWF4LmFycmF5O1xyXG4gICAgICAgIHJldHVybiBpc0Zpbml0ZShfbWluWzBdKSAmJiBpc0Zpbml0ZShfbWluWzFdKSAmJiBpc0Zpbml0ZShfbWluWzJdKVxyXG4gICAgICAgICAgICAmJiBpc0Zpbml0ZShfbWF4WzBdKSAmJiBpc0Zpbml0ZShfbWF4WzFdKSAmJiBpc0Zpbml0ZShfbWF4WzJdKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhbiBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCB0byB0aGUgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBhcHBseVRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG4gICAgICAgIHRoaXMudHJhbnNmb3JtRnJvbSh0aGlzLCBtYXRyaXgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBmcm9tIGFub3RoZXIgYm91bmRpbmcgYm94IGFuZCBhbiBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeC5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5Cb3VuZGluZ0JveH0gc291cmNlXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gbWF0cml4XHJcbiAgICAgKi9cclxuICAgIHRyYW5zZm9ybUZyb206IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gaHR0cDovL2Rldi50aGVvbWFkZXIuY29tL3RyYW5zZm9ybS1ib3VuZGluZy1ib3hlcy9cclxuICAgICAgICB2YXIgeGEgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB4YiA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHlhID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgeWIgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB6YSA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHpiID0gdmVjMy5jcmVhdGUoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UsIG1hdHJpeCkge1xyXG4gICAgICAgICAgICB2YXIgbWluID0gc291cmNlLm1pbi5hcnJheTtcclxuICAgICAgICAgICAgdmFyIG1heCA9IHNvdXJjZS5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgICAgICB2YXIgbSA9IG1hdHJpeC5hcnJheTtcclxuXHJcbiAgICAgICAgICAgIHhhWzBdID0gbVswXSAqIG1pblswXTsgeGFbMV0gPSBtWzFdICogbWluWzBdOyB4YVsyXSA9IG1bMl0gKiBtaW5bMF07XHJcbiAgICAgICAgICAgIHhiWzBdID0gbVswXSAqIG1heFswXTsgeGJbMV0gPSBtWzFdICogbWF4WzBdOyB4YlsyXSA9IG1bMl0gKiBtYXhbMF07XHJcblxyXG4gICAgICAgICAgICB5YVswXSA9IG1bNF0gKiBtaW5bMV07IHlhWzFdID0gbVs1XSAqIG1pblsxXTsgeWFbMl0gPSBtWzZdICogbWluWzFdO1xyXG4gICAgICAgICAgICB5YlswXSA9IG1bNF0gKiBtYXhbMV07IHliWzFdID0gbVs1XSAqIG1heFsxXTsgeWJbMl0gPSBtWzZdICogbWF4WzFdO1xyXG5cclxuICAgICAgICAgICAgemFbMF0gPSBtWzhdICogbWluWzJdOyB6YVsxXSA9IG1bOV0gKiBtaW5bMl07IHphWzJdID0gbVsxMF0gKiBtaW5bMl07XHJcbiAgICAgICAgICAgIHpiWzBdID0gbVs4XSAqIG1heFsyXTsgemJbMV0gPSBtWzldICogbWF4WzJdOyB6YlsyXSA9IG1bMTBdICogbWF4WzJdO1xyXG5cclxuICAgICAgICAgICAgbWluID0gdGhpcy5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgIG1heCA9IHRoaXMubWF4LmFycmF5O1xyXG4gICAgICAgICAgICBtaW5bMF0gPSBNYXRoLm1pbih4YVswXSwgeGJbMF0pICsgTWF0aC5taW4oeWFbMF0sIHliWzBdKSArIE1hdGgubWluKHphWzBdLCB6YlswXSkgKyBtWzEyXTtcclxuICAgICAgICAgICAgbWluWzFdID0gTWF0aC5taW4oeGFbMV0sIHhiWzFdKSArIE1hdGgubWluKHlhWzFdLCB5YlsxXSkgKyBNYXRoLm1pbih6YVsxXSwgemJbMV0pICsgbVsxM107XHJcbiAgICAgICAgICAgIG1pblsyXSA9IE1hdGgubWluKHhhWzJdLCB4YlsyXSkgKyBNYXRoLm1pbih5YVsyXSwgeWJbMl0pICsgTWF0aC5taW4oemFbMl0sIHpiWzJdKSArIG1bMTRdO1xyXG5cclxuICAgICAgICAgICAgbWF4WzBdID0gTWF0aC5tYXgoeGFbMF0sIHhiWzBdKSArIE1hdGgubWF4KHlhWzBdLCB5YlswXSkgKyBNYXRoLm1heCh6YVswXSwgemJbMF0pICsgbVsxMl07XHJcbiAgICAgICAgICAgIG1heFsxXSA9IE1hdGgubWF4KHhhWzFdLCB4YlsxXSkgKyBNYXRoLm1heCh5YVsxXSwgeWJbMV0pICsgTWF0aC5tYXgoemFbMV0sIHpiWzFdKSArIG1bMTNdO1xyXG4gICAgICAgICAgICBtYXhbMl0gPSBNYXRoLm1heCh4YVsyXSwgeGJbMl0pICsgTWF0aC5tYXgoeWFbMl0sIHliWzJdKSArIE1hdGgubWF4KHphWzJdLCB6YlsyXSkgKyBtWzE0XTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubWluLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubWF4Ll9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IGEgcHJvamVjdGlvbiBtYXRyaXggdG8gdGhlIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtYXRyaXhcclxuICAgICAqL1xyXG4gICAgYXBwbHlQcm9qZWN0aW9uOiBmdW5jdGlvbiAobWF0cml4KSB7XHJcbiAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBtYXggPSB0aGlzLm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgdmFyIG0gPSBtYXRyaXguYXJyYXk7XHJcbiAgICAgICAgLy8gbWluIGluIG1pbiB6XHJcbiAgICAgICAgdmFyIHYxMCA9IG1pblswXTtcclxuICAgICAgICB2YXIgdjExID0gbWluWzFdO1xyXG4gICAgICAgIHZhciB2MTIgPSBtaW5bMl07XHJcbiAgICAgICAgLy8gbWF4IGluIG1pbiB6XHJcbiAgICAgICAgdmFyIHYyMCA9IG1heFswXTtcclxuICAgICAgICB2YXIgdjIxID0gbWF4WzFdO1xyXG4gICAgICAgIHZhciB2MjIgPSBtaW5bMl07XHJcbiAgICAgICAgLy8gbWF4IGluIG1heCB6XHJcbiAgICAgICAgdmFyIHYzMCA9IG1heFswXTtcclxuICAgICAgICB2YXIgdjMxID0gbWF4WzFdO1xyXG4gICAgICAgIHZhciB2MzIgPSBtYXhbMl07XHJcblxyXG4gICAgICAgIGlmIChtWzE1XSA9PT0gMSkgeyAgLy8gT3J0aG9ncmFwaGljIHByb2plY3Rpb25cclxuICAgICAgICAgICAgbWluWzBdID0gbVswXSAqIHYxMCArIG1bMTJdO1xyXG4gICAgICAgICAgICBtaW5bMV0gPSBtWzVdICogdjExICsgbVsxM107XHJcbiAgICAgICAgICAgIG1heFsyXSA9IG1bMTBdICogdjEyICsgbVsxNF07XHJcblxyXG4gICAgICAgICAgICBtYXhbMF0gPSBtWzBdICogdjMwICsgbVsxMl07XHJcbiAgICAgICAgICAgIG1heFsxXSA9IG1bNV0gKiB2MzEgKyBtWzEzXTtcclxuICAgICAgICAgICAgbWluWzJdID0gbVsxMF0gKiB2MzIgKyBtWzE0XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciB3ID0gLTEgLyB2MTI7XHJcbiAgICAgICAgICAgIG1pblswXSA9IG1bMF0gKiB2MTAgKiB3O1xyXG4gICAgICAgICAgICBtaW5bMV0gPSBtWzVdICogdjExICogdztcclxuICAgICAgICAgICAgbWF4WzJdID0gKG1bMTBdICogdjEyICsgbVsxNF0pICogdztcclxuXHJcbiAgICAgICAgICAgIHcgPSAtMSAvIHYyMjtcclxuICAgICAgICAgICAgbWF4WzBdID0gbVswXSAqIHYyMCAqIHc7XHJcbiAgICAgICAgICAgIG1heFsxXSA9IG1bNV0gKiB2MjEgKiB3O1xyXG5cclxuICAgICAgICAgICAgdyA9IC0xIC8gdjMyO1xyXG4gICAgICAgICAgICBtaW5bMl0gPSAobVsxMF0gKiB2MzIgKyBtWzE0XSkgKiB3O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubWF4Ll9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVWZXJ0aWNlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XHJcbiAgICAgICAgaWYgKCF2ZXJ0aWNlcykge1xyXG4gICAgICAgICAgICAvLyBDdWJlIHZlcnRpY2VzXHJcbiAgICAgICAgICAgIHZlcnRpY2VzID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNlc1tpXSA9IHZlYzMuZnJvbVZhbHVlcygwLCAwLCAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIEVpZ2h0IGNvb3JkcyBvZiBib3VuZGluZyBib3hcclxuICAgICAgICAgICAgICogQHR5cGUge0Zsb2F0MzJBcnJheVtdfVxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgdGhpcy52ZXJ0aWNlcyA9IHZlcnRpY2VzO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbWluID0gdGhpcy5taW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4LmFycmF5O1xyXG4gICAgICAgIC8vLS0tIG1pbiB6XHJcbiAgICAgICAgLy8gbWluIHhcclxuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzBdLCBtaW5bMF0sIG1pblsxXSwgbWluWzJdKTtcclxuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzFdLCBtaW5bMF0sIG1heFsxXSwgbWluWzJdKTtcclxuICAgICAgICAvLyBtYXggeFxyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbMl0sIG1heFswXSwgbWluWzFdLCBtaW5bMl0pO1xyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbM10sIG1heFswXSwgbWF4WzFdLCBtaW5bMl0pO1xyXG5cclxuICAgICAgICAvLy0tIG1heCB6XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s0XSwgbWluWzBdLCBtaW5bMV0sIG1heFsyXSk7XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s1XSwgbWluWzBdLCBtYXhbMV0sIG1heFsyXSk7XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s2XSwgbWF4WzBdLCBtaW5bMV0sIG1heFsyXSk7XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s3XSwgbWF4WzBdLCBtYXhbMV0sIG1heFsyXSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ29weSB2YWx1ZXMgZnJvbSBhbm90aGVyIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5Cb3VuZGluZ0JveH0gYmJveFxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbiAoYmJveCkge1xyXG4gICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbjtcclxuICAgICAgICB2YXIgbWF4ID0gdGhpcy5tYXg7XHJcbiAgICAgICAgdmVjM0NvcHkobWluLmFycmF5LCBiYm94Lm1pbi5hcnJheSk7XHJcbiAgICAgICAgdmVjM0NvcHkobWF4LmFycmF5LCBiYm94Lm1heC5hcnJheSk7XHJcbiAgICAgICAgbWluLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LkJvdW5kaW5nQm94fVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIGJvdW5kaW5nQm94LmNvcHkodGhpcyk7XHJcbiAgICAgICAgcmV0dXJuIGJvdW5kaW5nQm94O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQm91bmRpbmdCb3g7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgUXVhdGVybmlvbiBmcm9tICcuL21hdGgvUXVhdGVybmlvbic7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4vbWF0aC9NYXRyaXg0JztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcblxyXG52YXIgbmFtZUlkID0gMDtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5Ob2RlXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgTm9kZSA9IEJhc2UuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5Ob2RlIyAqL3tcclxuICAgIC8qKlxyXG4gICAgICogU2NlbmUgbm9kZSBuYW1lXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICBuYW1lOiAnJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBvc2l0aW9uIHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgbm9kZS4gYWthIHRyYW5zbGF0aW9uLlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgcG9zaXRpb246IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGlvbiByZWxhdGl2ZSB0byBpdHMgcGFyZW50IG5vZGUuIFJlcHJlc2VudGVkIGJ5IGEgcXVhdGVybmlvblxyXG4gICAgICogQHR5cGUge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgcm90YXRpb246IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSByZWxhdGl2ZSB0byBpdHMgcGFyZW50IG5vZGVcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggcmVsYXRpdmUgdG8gaXRzIHJvb3Qgc2NlbmUuXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICB3b3JsZFRyYW5zZm9ybTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFmZmluZSB0cmFuc2Zvcm0gbWF0cml4IHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgbm9kZS5cclxuICAgICAqIENvbXBvc2l0ZWQgd2l0aCBwb3NpdGlvbiwgcm90YXRpb24gYW5kIHNjYWxlLlxyXG4gICAgICogQHR5cGUge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgbG9jYWxUcmFuc2Zvcm06IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgbG9jYWwgdHJhbnNmb3JtIGlzIHVwZGF0ZSBmcm9tIFNSVChzY2FsZSwgcm90YXRpb24sIHRyYW5zbGF0aW9uLCB3aGljaCBpcyBwb3NpdGlvbiBoZXJlKSBlYWNoIGZyYW1lXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgYXV0b1VwZGF0ZUxvY2FsVHJhbnNmb3JtOiB0cnVlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFyZW50IG9mIGN1cnJlbnQgc2NlbmUgbm9kZVxyXG4gICAgICogQHR5cGUgez9jbGF5Lk5vZGV9XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfcGFyZW50OiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcm9vdCBzY2VuZSBtb3VudGVkLiBOdWxsIGlmIGl0IGlzIGEgaXNvbGF0ZWQgbm9kZVxyXG4gICAgICogQHR5cGUgez9jbGF5LlNjZW5lfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX3NjZW5lOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9uZWVkc1VwZGF0ZVdvcmxkVHJhbnNmb3JtOiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9pbkl0ZXJhdGluZzogZmFsc2UsXHJcblxyXG4gICAgLy8gRGVwdGggZm9yIHRyYW5zcGFyZW50IGxpc3Qgc29ydGluZ1xyXG4gICAgX19kZXB0aDogMFxyXG5cclxufSwgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gKHRoaXMudHlwZSB8fCAnTk9ERScpICsgJ18nICsgKG5hbWVJZCsrKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMucG9zaXRpb24pIHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5yb3RhdGlvbikge1xyXG4gICAgICAgIHRoaXMucm90YXRpb24gPSBuZXcgUXVhdGVybmlvbigpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnNjYWxlKSB7XHJcbiAgICAgICAgdGhpcy5zY2FsZSA9IG5ldyBWZWN0b3IzKDEsIDEsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMud29ybGRUcmFuc2Zvcm0gPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgdGhpcy5sb2NhbFRyYW5zZm9ybSA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4gICAgdGhpcy5fY2hpbGRyZW4gPSBbXTtcclxuXHJcbn0sXHJcbi8qKkBsZW5kcyBjbGF5Lk5vZGUucHJvdG90eXBlLiAqL1xyXG57XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmVjdG9yM31cclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICB0YXJnZXQ6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIElmIG5vZGUgYW5kIGl0cyBjaGlscmVuIGludmlzaWJsZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgaW52aXNpYmxlOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIE5vZGUgaXMgYSBza2lubmVkIG1lc2hcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzU2tpbm5lZE1lc2g6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhIHJlbmRlcmFibGUgc2NlbmUgbm9kZSwgbGlrZSBNZXNoIGFuZCBQYXJ0aWNsZVN5c3RlbVxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNSZW5kZXJhYmxlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgbmFtZSBvZiB0aGUgc2NlbmUgbm9kZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqL1xyXG4gICAgc2V0TmFtZTogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLl9zY2VuZTtcclxuICAgICAgICBpZiAoc2NlbmUpIHtcclxuICAgICAgICAgICAgdmFyIG5vZGVSZXBvc2l0b3J5ID0gc2NlbmUuX25vZGVSZXBvc2l0b3J5O1xyXG4gICAgICAgICAgICBkZWxldGUgbm9kZVJlcG9zaXRvcnlbdGhpcy5uYW1lXTtcclxuICAgICAgICAgICAgbm9kZVJlcG9zaXRvcnlbbmFtZV0gPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBhIGNoaWxkIG5vZGVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBub2RlXHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICB2YXIgb3JpZ2luYWxQYXJlbnQgPSBub2RlLl9wYXJlbnQ7XHJcbiAgICAgICAgaWYgKG9yaWdpbmFsUGFyZW50ID09PSB0aGlzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9yaWdpbmFsUGFyZW50KSB7XHJcbiAgICAgICAgICAgIG9yaWdpbmFsUGFyZW50LnJlbW92ZShub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbm9kZS5fcGFyZW50ID0gdGhpcztcclxuICAgICAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKG5vZGUpO1xyXG5cclxuICAgICAgICB2YXIgc2NlbmUgPSB0aGlzLl9zY2VuZTtcclxuICAgICAgICBpZiAoc2NlbmUgJiYgc2NlbmUgIT09IG5vZGUuc2NlbmUpIHtcclxuICAgICAgICAgICAgbm9kZS50cmF2ZXJzZSh0aGlzLl9hZGRTZWxmVG9TY2VuZSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1hcmsgY2hpbGRyZW4gbmVlZHMgdXBkYXRlIHRyYW5zZm9ybVxyXG4gICAgICAgIC8vIEluIGNhc2UgY2hpbGQgYXJlIHJlbW92ZSBhbmQgYWRkZWQgYWdhaW4gYWZ0ZXIgcGFyZW50IG1vdmVkXHJcbiAgICAgICAgbm9kZS5fbmVlZHNVcGRhdGVXb3JsZFRyYW5zZm9ybSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIHRoZSBnaXZlbiBjaGlsZCBzY2VuZSBub2RlXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxyXG4gICAgICovXHJcbiAgICByZW1vdmU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcbiAgICAgICAgdmFyIGlkeCA9IGNoaWxkcmVuLmluZGV4T2Yobm9kZSk7XHJcbiAgICAgICAgaWYgKGlkeCA8IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgbm9kZS5fcGFyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3NjZW5lKSB7XHJcbiAgICAgICAgICAgIG5vZGUudHJhdmVyc2UodGhpcy5fcmVtb3ZlU2VsZkZyb21TY2VuZSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhbGwgY2hpbGRyZW5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcblxyXG4gICAgICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGNoaWxkcmVuLmxlbmd0aDsgaWR4KyspIHtcclxuICAgICAgICAgICAgY2hpbGRyZW5baWR4XS5fcGFyZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zY2VuZSkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5baWR4XS50cmF2ZXJzZSh0aGlzLl9yZW1vdmVTZWxmRnJvbVNjZW5lLCB0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fY2hpbGRyZW4gPSBbXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIHNjZW5lIG1vdW50ZWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuU2NlbmV9XHJcbiAgICAgKi9cclxuICAgIGdldFNjZW5lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NjZW5lO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBwYXJlbnQgbm9kZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5TY2VuZX1cclxuICAgICAqL1xyXG4gICAgZ2V0UGFyZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcclxuICAgIH0sXHJcblxyXG4gICAgX3JlbW92ZVNlbGZGcm9tU2NlbmU6IGZ1bmN0aW9uIChkZXNjZW5kYW50KSB7XHJcbiAgICAgICAgZGVzY2VuZGFudC5fc2NlbmUucmVtb3ZlRnJvbVNjZW5lKGRlc2NlbmRhbnQpO1xyXG4gICAgICAgIGRlc2NlbmRhbnQuX3NjZW5lID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgX2FkZFNlbGZUb1NjZW5lOiBmdW5jdGlvbiAoZGVzY2VuZGFudCkge1xyXG4gICAgICAgIHRoaXMuX3NjZW5lLmFkZFRvU2NlbmUoZGVzY2VuZGFudCk7XHJcbiAgICAgICAgZGVzY2VuZGFudC5fc2NlbmUgPSB0aGlzLl9zY2VuZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBpdCBpcyBhbmNlc3RvciBvZiB0aGUgZ2l2ZW4gc2NlbmUgbm9kZVxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk5vZGV9IG5vZGVcclxuICAgICAqL1xyXG4gICAgaXNBbmNlc3RvcjogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICB2YXIgcGFyZW50ID0gbm9kZS5fcGFyZW50O1xyXG4gICAgICAgIHdoaWxlKHBhcmVudCkge1xyXG4gICAgICAgICAgICBpZiAocGFyZW50ID09PSB0aGlzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQuX3BhcmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhIG5ldyBjcmVhdGVkIGFycmF5IG9mIGFsbCBjaGlsZHJlbiBub2Rlc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlW119XHJcbiAgICAgKi9cclxuICAgIGNoaWxkcmVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuLnNsaWNlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGNoaWxkIHNjZW5lIG5vZGUgYXQgZ2l2ZW4gaW5kZXguXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XHJcbiAgICAgKi9cclxuICAgIGNoaWxkQXQ6IGZ1bmN0aW9uIChpZHgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW5baWR4XTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZmlyc3QgY2hpbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2hpbGRCeU5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0ubmFtZSA9PT0gbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBmaXJzdCBkZXNjZW5kYW50IGhhdmUgdGhlIGdpdmVuIG5hbWVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XHJcbiAgICAgKi9cclxuICAgIGdldERlc2NlbmRhbnRCeU5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkLm5hbWUgPT09IG5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXMgPSBjaGlsZC5nZXREZXNjZW5kYW50QnlOYW1lKG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUXVlcnkgZGVzY2VuZGFudCBub2RlIGJ5IHBhdGhcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogIG5vZGUucXVlcnlOb2RlKCdyb290L3BhcmVudC9jaGlsZCcpO1xyXG4gICAgICovXHJcbiAgICBxdWVyeU5vZGU6IGZ1bmN0aW9uIChwYXRoKSB7XHJcbiAgICAgICAgaWYgKCFwYXRoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETyBOYW1lIGhhdmUgc2xhc2ggP1xyXG4gICAgICAgIHZhciBwYXRoQXJyID0gcGF0aC5zcGxpdCgnLycpO1xyXG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhBcnIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSBwYXRoQXJyW2ldO1xyXG4gICAgICAgICAgICAvLyBTa2lwIGVtcHR5XHJcbiAgICAgICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IGN1cnJlbnQuX2NoaWxkcmVuO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltqXTtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5uYW1lID09PSBuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBFYXJseSByZXR1cm4gaWYgbm90IGZvdW5kXHJcbiAgICAgICAgICAgIGlmICghZm91bmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHF1ZXJ5IHBhdGgsIHJlbGF0aXZlIHRvIHJvb3ROb2RlKGRlZmF1bHQgaXMgc2NlbmUpXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3Jvb3ROb2RlXVxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICBnZXRQYXRoOiBmdW5jdGlvbiAocm9vdE5vZGUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJy8nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLl9wYXJlbnQ7XHJcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLm5hbWU7XHJcbiAgICAgICAgd2hpbGUgKGN1cnJlbnQuX3BhcmVudCkge1xyXG4gICAgICAgICAgICBwYXRoID0gY3VycmVudC5uYW1lICsgJy8nICsgcGF0aDtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnQuX3BhcmVudCA9PSByb290Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuX3BhcmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFjdXJyZW50Ll9wYXJlbnQgJiYgcm9vdE5vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlcHRoIGZpcnN0IHRyYXZlcnNlIGFsbCBpdHMgZGVzY2VuZGFudCBzY2VuZSBub2Rlcy5cclxuICAgICAqXHJcbiAgICAgKiAqKldBUk4qKiBEb24ndCBkbyBgYWRkYCwgYHJlbW92ZWAgb3BlcmF0aW9uIGluIHRoZSBjYWxsYmFjayBkdXJpbmcgdHJhdmVyc2UuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAgICogQHBhcmFtIHtOb2RlfSBbY29udGV4dF1cclxuICAgICAqL1xyXG4gICAgdHJhdmVyc2U6IGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4dCkge1xyXG4gICAgICAgIGNhbGxiYWNrLmNhbGwoY29udGV4dCwgdGhpcyk7XHJcbiAgICAgICAgdmFyIF9jaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IF9jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBfY2hpbGRyZW5baV0udHJhdmVyc2UoY2FsbGJhY2ssIGNvbnRleHQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmF2ZXJzZSBhbGwgY2hpbGRyZW4gbm9kZXMuXHJcbiAgICAgKlxyXG4gICAgICogKipXQVJOKiogRE9OJ1QgZG8gYGFkZGAsIGByZW1vdmVgIG9wZXJhdGlvbiBpbiB0aGUgY2FsbGJhY2sgZHVyaW5nIGl0ZXJhdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAgICogQHBhcmFtIHtOb2RlfSBbY29udGV4dF1cclxuICAgICAqL1xyXG4gICAgZWFjaENoaWxkOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNvbnRleHQpIHtcclxuICAgICAgICB2YXIgX2NoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcbiAgICAgICAgZm9yKHZhciBpID0gMCwgbGVuID0gX2NoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IF9jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgY2FsbGJhY2suY2FsbChjb250ZXh0LCBjaGlsZCwgaSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgbG9jYWwgdHJhbnNmb3JtIGFuZCBkZWNvbXBvc2UgdG8gU1JUXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gbWF0cml4XHJcbiAgICAgKi9cclxuICAgIHNldExvY2FsVHJhbnNmb3JtOiBmdW5jdGlvbiAobWF0cml4KSB7XHJcbiAgICAgICAgbWF0NC5jb3B5KHRoaXMubG9jYWxUcmFuc2Zvcm0uYXJyYXksIG1hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5kZWNvbXBvc2VMb2NhbFRyYW5zZm9ybSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlY29tcG9zZSB0aGUgbG9jYWwgdHJhbnNmb3JtIHRvIFNSVFxyXG4gICAgICovXHJcbiAgICBkZWNvbXBvc2VMb2NhbFRyYW5zZm9ybTogZnVuY3Rpb24gKGtlZXBTY2FsZSkge1xyXG4gICAgICAgIHZhciBzY2FsZSA9ICFrZWVwU2NhbGUgPyB0aGlzLnNjYWxlOiBudWxsO1xyXG4gICAgICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0uZGVjb21wb3NlTWF0cml4KHNjYWxlLCB0aGlzLnJvdGF0aW9uLCB0aGlzLnBvc2l0aW9uKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHdvcmxkIHRyYW5zZm9ybSBhbmQgZGVjb21wb3NlIHRvIFNSVFxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBzZXRXb3JsZFRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG4gICAgICAgIG1hdDQuY29weSh0aGlzLndvcmxkVHJhbnNmb3JtLmFycmF5LCBtYXRyaXguYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuZGVjb21wb3NlV29ybGRUcmFuc2Zvcm0oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNvbXBvc2UgdGhlIHdvcmxkIHRyYW5zZm9ybSB0byBTUlRcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICovXHJcbiAgICBkZWNvbXBvc2VXb3JsZFRyYW5zZm9ybTogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIHRtcCA9IG1hdDQuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoa2VlcFNjYWxlKSB7XHJcbiAgICAgICAgICAgIHZhciBsb2NhbFRyYW5zZm9ybSA9IHRoaXMubG9jYWxUcmFuc2Zvcm07XHJcbiAgICAgICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm07XHJcbiAgICAgICAgICAgIC8vIEFzc3VtZSB3b3JsZCB0cmFuc2Zvcm0gaXMgdXBkYXRlZFxyXG4gICAgICAgICAgICBpZiAodGhpcy5fcGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBtYXQ0LmludmVydCh0bXAsIHRoaXMuX3BhcmVudC53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KGxvY2FsVHJhbnNmb3JtLmFycmF5LCB0bXAsIHdvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1hdDQuY29weShsb2NhbFRyYW5zZm9ybS5hcnJheSwgd29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBzY2FsZSA9ICFrZWVwU2NhbGUgPyB0aGlzLnNjYWxlOiBudWxsO1xyXG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5kZWNvbXBvc2VNYXRyaXgoc2NhbGUsIHRoaXMucm90YXRpb24sIHRoaXMucG9zaXRpb24pO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIHRyYW5zZm9ybU5lZWRzVXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24uX2RpcnR5XHJcbiAgICAgICAgICAgIHx8IHRoaXMucm90YXRpb24uX2RpcnR5XHJcbiAgICAgICAgICAgIHx8IHRoaXMuc2NhbGUuX2RpcnR5O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBsb2NhbCB0cmFuc2Zvcm0gZnJvbSBTUlRcclxuICAgICAqIE5vdGljZSB0aGF0IGxvY2FsIHRyYW5zZm9ybSB3aWxsIG5vdCBiZSB1cGRhdGVkIGlmIF9kaXJ0eSBtYXJrIG9mIHBvc2l0aW9uLCByb3RhdGlvbiwgc2NhbGUgaXMgYWxsIGZhbHNlXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUxvY2FsVHJhbnNmb3JtOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgcm90YXRpb24gPSB0aGlzLnJvdGF0aW9uO1xyXG4gICAgICAgIHZhciBzY2FsZSA9IHRoaXMuc2NhbGU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybU5lZWRzVXBkYXRlKCkpIHtcclxuICAgICAgICAgICAgdmFyIG0gPSB0aGlzLmxvY2FsVHJhbnNmb3JtLmFycmF5O1xyXG5cclxuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIG9yZGVyLCBzY2FsZS0+cm90YXRpb24tPnBvc2l0aW9uXHJcbiAgICAgICAgICAgIG1hdDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24obSwgcm90YXRpb24uYXJyYXksIHBvc2l0aW9uLmFycmF5KTtcclxuXHJcbiAgICAgICAgICAgIG1hdDQuc2NhbGUobSwgbSwgc2NhbGUuYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgcm90YXRpb24uX2RpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNjYWxlLl9kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBwb3NpdGlvbi5fZGlydHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgd29ybGQgdHJhbnNmb3JtLCBhc3N1bWUgaXRzIHBhcmVudCB3b3JsZCB0cmFuc2Zvcm0gaGF2ZSBiZWVuIHVwZGF0ZWRcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF91cGRhdGVXb3JsZFRyYW5zZm9ybVRvcERvd246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbG9jYWxUcmFuc2Zvcm0gPSB0aGlzLmxvY2FsVHJhbnNmb3JtLmFycmF5O1xyXG4gICAgICAgIHZhciB3b3JsZFRyYW5zZm9ybSA9IHRoaXMud29ybGRUcmFuc2Zvcm0uYXJyYXk7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5QWZmaW5lKFxyXG4gICAgICAgICAgICAgICAgd29ybGRUcmFuc2Zvcm0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnQud29ybGRUcmFuc2Zvcm0uYXJyYXksXHJcbiAgICAgICAgICAgICAgICBsb2NhbFRyYW5zZm9ybVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWF0NC5jb3B5KHdvcmxkVHJhbnNmb3JtLCBsb2NhbFRyYW5zZm9ybSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB3b3JsZCB0cmFuc2Zvcm0gYmVmb3JlIHdob2xlIHNjZW5lIGlzIHVwZGF0ZWQuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVdvcmxkVHJhbnNmb3JtOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gRmluZCB0aGUgcm9vdCBub2RlIHdoaWNoIHRyYW5zZm9ybSBuZWVkcyB1cGRhdGU7XHJcbiAgICAgICAgdmFyIHJvb3ROb2RlSXNEaXJ0eSA9IHRoaXM7XHJcbiAgICAgICAgd2hpbGUgKHJvb3ROb2RlSXNEaXJ0eSAmJiByb290Tm9kZUlzRGlydHkuZ2V0UGFyZW50KClcclxuICAgICAgICAgICAgJiYgcm9vdE5vZGVJc0RpcnR5LmdldFBhcmVudCgpLnRyYW5zZm9ybU5lZWRzVXBkYXRlKClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcm9vdE5vZGVJc0RpcnR5ID0gcm9vdE5vZGVJc0RpcnR5LmdldFBhcmVudCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb290Tm9kZUlzRGlydHkudXBkYXRlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIGxvY2FsIHRyYW5zZm9ybSBhbmQgd29ybGQgdHJhbnNmb3JtIHJlY3Vyc2l2ZWx5XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlVXBkYXRlV29ybGRcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZm9yY2VVcGRhdGVXb3JsZCkge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9VcGRhdGVMb2NhbFRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gaXMgbWFudWFsbHkgc2V0dGVkXHJcbiAgICAgICAgICAgIGZvcmNlVXBkYXRlV29ybGQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZvcmNlVXBkYXRlV29ybGQgfHwgdGhpcy5fbmVlZHNVcGRhdGVXb3JsZFRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVXb3JsZFRyYW5zZm9ybVRvcERvd24oKTtcclxuICAgICAgICAgICAgZm9yY2VVcGRhdGVXb3JsZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0gPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2ldLnVwZGF0ZShmb3JjZVVwZGF0ZVdvcmxkKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGJvdW5kaW5nIGJveCBvZiBub2RlXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW2ZpbHRlcl1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuQm91bmRpbmdCb3h9IFtvdXRdXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LkJvdW5kaW5nQm94fVxyXG4gICAgICovXHJcbiAgICAvLyBUT0RPIFNraW5uaW5nXHJcbiAgICBnZXRCb3VuZGluZ0JveDogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmdW5jdGlvbiBkZWZhdWx0RmlsdGVyIChlbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIWVsLmludmlzaWJsZSAmJiBlbC5nZW9tZXRyeTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHRtcEJCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB2YXIgdG1wTWF0NCA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgdmFyIGludldvcmxkVHJhbnNmb3JtID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZpbHRlciwgb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG91dCB8fCBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICAgICAgZmlsdGVyID0gZmlsdGVyIHx8IGRlZmF1bHRGaWx0ZXI7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fcGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBNYXRyaXg0LmludmVydChpbnZXb3JsZFRyYW5zZm9ybSwgdGhpcy5fcGFyZW50LndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIE1hdHJpeDQuaWRlbnRpdHkoaW52V29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRyYXZlcnNlKGZ1bmN0aW9uIChtZXNoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWVzaC5nZW9tZXRyeSAmJiBtZXNoLmdlb21ldHJ5LmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG1wQkJveC5jb3B5KG1lc2guZ2VvbWV0cnkuYm91bmRpbmdCb3gpO1xyXG4gICAgICAgICAgICAgICAgICAgIE1hdHJpeDQubXVsdGlwbHkodG1wTWF0NCwgaW52V29ybGRUcmFuc2Zvcm0sIG1lc2gud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcEJCb3guYXBwbHlUcmFuc2Zvcm0odG1wTWF0NCk7XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0LnVuaW9uKHRtcEJCb3gpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCB0aGlzLCBkZWZhdWx0RmlsdGVyKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgd29ybGQgcG9zaXRpb24sIGV4dHJhY3RlZCBmcm9tIHdvcmxkIHRyYW5zZm9ybVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBbb3V0XVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBnZXRXb3JsZFBvc2l0aW9uOiBmdW5jdGlvbiAob3V0KSB7XHJcbiAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybU5lZWRzVXBkYXRlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbSA9IHRoaXMud29ybGRUcmFuc2Zvcm0uYXJyYXk7XHJcbiAgICAgICAgaWYgKG91dCkge1xyXG4gICAgICAgICAgICB2YXIgYXJyID0gb3V0LmFycmF5O1xyXG4gICAgICAgICAgICBhcnJbMF0gPSBtWzEyXTtcclxuICAgICAgICAgICAgYXJyWzFdID0gbVsxM107XHJcbiAgICAgICAgICAgIGFyclsyXSA9IG1bMTRdO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKG1bMTJdLCBtWzEzXSwgbVsxNF0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBub2RlXHJcbiAgICAgKiBAcmV0dXJuIHtOb2RlfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBub2RlID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKTtcclxuXHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5fY2hpbGRyZW47XHJcblxyXG4gICAgICAgIG5vZGUuc2V0TmFtZSh0aGlzLm5hbWUpO1xyXG4gICAgICAgIG5vZGUucG9zaXRpb24uY29weSh0aGlzLnBvc2l0aW9uKTtcclxuICAgICAgICBub2RlLnJvdGF0aW9uLmNvcHkodGhpcy5yb3RhdGlvbik7XHJcbiAgICAgICAgbm9kZS5zY2FsZS5jb3B5KHRoaXMuc2NhbGUpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG5vZGUuYWRkKGNoaWxkcmVuW2ldLmNsb25lKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHRoZSBub2RlIGFyb3VuZCBhIGF4aXMgYnkgYW5nbGUgZGVncmVlcywgYXhpcyBwYXNzZXMgdGhyb3VnaCBwb2ludFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHBvaW50IENlbnRlciBwb2ludFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IGF4aXMgIENlbnRlciBheGlzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gICAgICAgYW5nbGUgUm90YXRpb24gYW5nbGVcclxuICAgICAqIEBzZWUgaHR0cDovL2RvY3MudW5pdHkzZC5jb20vRG9jdW1lbnRhdGlvbi9TY3JpcHRSZWZlcmVuY2UvVHJhbnNmb3JtLlJvdGF0ZUFyb3VuZC5odG1sXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqL1xyXG4gICAgcm90YXRlQXJvdW5kOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB2YXIgUlRNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuICAgICAgICAvLyBUT0RPIGltcHJvdmUgcGVyZm9ybWFuY2VcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHBvaW50LCBheGlzLCBhbmdsZSkge1xyXG5cclxuICAgICAgICAgICAgdi5jb3B5KHRoaXMucG9zaXRpb24pLnN1YnRyYWN0KHBvaW50KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBsb2NhbFRyYW5zZm9ybSA9IHRoaXMubG9jYWxUcmFuc2Zvcm07XHJcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLmlkZW50aXR5KCk7XHJcbiAgICAgICAgICAgIC8vIHBhcmVudCBub2RlXHJcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZShwb2ludCk7XHJcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLnJvdGF0ZShhbmdsZSwgYXhpcyk7XHJcblxyXG4gICAgICAgICAgICBSVE1hdHJpeC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbih0aGlzLnJvdGF0aW9uLCB2KTtcclxuICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm0ubXVsdGlwbHkoUlRNYXRyaXgpO1xyXG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5zY2FsZSh0aGlzLnNjYWxlKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGVjb21wb3NlTG9jYWxUcmFuc2Zvcm0oKTtcclxuICAgICAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGVXb3JsZFRyYW5zZm9ybSA9IHRydWU7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW3VwXVxyXG4gICAgICogQHNlZSBodHRwOi8vd3d3Lm9wZW5nbC5vcmcvc2RrL2RvY3MvbWFuMi94aHRtbC9nbHVMb29rQXQueG1sXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqL1xyXG4gICAgbG9va0F0OiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdXApIHtcclxuICAgICAgICAgICAgbS5sb29rQXQodGhpcy5wb3NpdGlvbiwgdGFyZ2V0LCB1cCB8fCB0aGlzLmxvY2FsVHJhbnNmb3JtLnkpLmludmVydCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNldExvY2FsVHJhbnNmb3JtKG0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKClcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBOb2RlO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcInZlYzMgY2FsY0FtYmllbnRTSExpZ2h0KGludCBpZHgsIHZlYzMgTikge1xcbiBpbnQgb2Zmc2V0ID0gOSAqIGlkeDtcXG4gcmV0dXJuIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzBdXFxuICsgYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbMV0gKiBOLnhcXG4gKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1syXSAqIE4ueVxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzNdICogTi56XFxuICsgYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbNF0gKiBOLnggKiBOLnpcXG4gKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1s1XSAqIE4ueiAqIE4ueVxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzZdICogTi55ICogTi54XFxuICsgYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbN10gKiAoMy4wICogTi56ICogTi56IC0gMS4wKVxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzhdICogKE4ueCAqIE4ueCAtIE4ueSAqIE4ueSk7XFxufVwiO1xyXG4iLCJpbXBvcnQgY2FsY0FtYmllbnRTSExpZ2h0RXNzbCBmcm9tICcuL2NhbGNBbWJpZW50U0hMaWdodC5nbHNsLmpzJztcclxuXHJcbnZhciB1bmlmb3JtVmVjM1ByZWZpeCA9ICd1bmlmb3JtIHZlYzMgJztcclxudmFyIHVuaWZvcm1GbG9hdFByZWZpeCA9ICd1bmlmb3JtIGZsb2F0ICc7XHJcbnZhciBleHBvcnRIZWFkZXJQcmVmaXggPSAnQGV4cG9ydCBjbGF5LmhlYWRlci4nO1xyXG52YXIgZXhwb3J0RW5kID0gJ0BlbmQnO1xyXG52YXIgdW5jb25maWd1cmFibGUgPSAnOnVuY29uZmlndXJhYmxlOyc7XHJcbmV4cG9ydCBkZWZhdWx0IFtcclxuICAgIGV4cG9ydEhlYWRlclByZWZpeCArICdkaXJlY3Rpb25hbF9saWdodCcsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdkaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9uW0RJUkVDVElPTkFMX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ2RpcmVjdGlvbmFsTGlnaHRDb2xvcltESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICBleHBvcnRFbmQsXHJcblxyXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ2FtYmllbnRfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnYW1iaWVudExpZ2h0Q29sb3JbQU1CSUVOVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICBleHBvcnRFbmQsXHJcblxyXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ2FtYmllbnRfc2hfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnYW1iaWVudFNITGlnaHRDb2xvcltBTUJJRU5UX1NIX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ2FtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzW0FNQklFTlRfU0hfTElHSFRfQ09VTlQgKiA5XScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIGNhbGNBbWJpZW50U0hMaWdodEVzc2wsXHJcbiAgICBleHBvcnRFbmQsXHJcblxyXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ2FtYmllbnRfY3ViZW1hcF9saWdodCcsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdhbWJpZW50Q3ViZW1hcExpZ2h0Q29sb3JbQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgICd1bmlmb3JtIHNhbXBsZXJDdWJlIGFtYmllbnRDdWJlbWFwTGlnaHRDdWJlbWFwW0FNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICAndW5pZm9ybSBzYW1wbGVyMkQgYW1iaWVudEN1YmVtYXBMaWdodEJSREZMb29rdXBbQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIGV4cG9ydEVuZCxcclxuXHJcbiAgICBleHBvcnRIZWFkZXJQcmVmaXggKyAncG9pbnRfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAncG9pbnRMaWdodFBvc2l0aW9uW1BPSU5UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1GbG9hdFByZWZpeCArICdwb2ludExpZ2h0UmFuZ2VbUE9JTlRfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAncG9pbnRMaWdodENvbG9yW1BPSU5UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIGV4cG9ydEVuZCxcclxuXHJcbiAgICBleHBvcnRIZWFkZXJQcmVmaXggKyAnc3BvdF9saWdodCcsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdzcG90TGlnaHRQb3NpdGlvbltTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ3Nwb3RMaWdodERpcmVjdGlvbltTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1GbG9hdFByZWZpeCArICdzcG90TGlnaHRSYW5nZVtTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1GbG9hdFByZWZpeCArICdzcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lW1NQT1RfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgdW5pZm9ybUZsb2F0UHJlZml4ICsgJ3Nwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmVbU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAnc3BvdExpZ2h0RmFsbG9mZkZhY3RvcltTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ3Nwb3RMaWdodENvbG9yW1NQT1RfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgZXhwb3J0RW5kXHJcbl0uam9pbignXFxuJyk7XHJcbiIsImltcG9ydCBOb2RlIGZyb20gJy4vTm9kZSc7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi9TaGFkZXInO1xyXG5cclxuaW1wb3J0IGxpZ2h0U2hhZGVyIGZyb20gJy4vc2hhZGVyL3NvdXJjZS9oZWFkZXIvbGlnaHQnO1xyXG5TaGFkZXJbJ2ltcG9ydCddKGxpZ2h0U2hhZGVyKTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5MaWdodFxyXG4gKiBAZXh0ZW5kcyBjbGF5Lk5vZGVcclxuICovXHJcbnZhciBMaWdodCA9IE5vZGUuZXh0ZW5kKGZ1bmN0aW9uKCl7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LkxpZ2h0IyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTGlnaHQgUkdCIGNvbG9yXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcltdfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbG9yOiBbMSwgMSwgMV0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIExpZ2h0IGludGVuc2l0eVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW50ZW5zaXR5OiAxLjAsXHJcblxyXG4gICAgICAgIC8vIENvbmZpZyBmb3Igc2hhZG93IG1hcFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGxpZ2h0IGNhc3Qgc2hhZG93XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2FzdFNoYWRvdzogdHJ1ZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2hhZG93IG1hcCBzaXplXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzaGFkb3dSZXNvbHV0aW9uOiA1MTIsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIExpZ2h0IGdyb3VwLCBzaGFkZXIgd2l0aCBzYW1lIGBsaWdodEdyb3VwYCB3aWxsIGJlIGFmZmVjdGVkXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBPbmx5IHVzZWZ1bCBpbiBmb3J3YXJkIHJlbmRlcmluZ1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ3JvdXA6IDBcclxuICAgIH07XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5MaWdodC5wcm90b3R5cGUuICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogTGlnaHQgdHlwZVxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LkxpZ2h0I1xyXG4gICAgICovXHJcbiAgICB0eXBlOiAnJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTGlnaHR9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5MaWdodC5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBsaWdodCA9IE5vZGUucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICAgICAgbGlnaHQuY29sb3IgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmNvbG9yKTtcclxuICAgICAgICBsaWdodC5pbnRlbnNpdHkgPSB0aGlzLmludGVuc2l0eTtcclxuICAgICAgICBsaWdodC5jYXN0U2hhZG93ID0gdGhpcy5jYXN0U2hhZG93O1xyXG4gICAgICAgIGxpZ2h0LnNoYWRvd1Jlc29sdXRpb24gPSB0aGlzLnNoYWRvd1Jlc29sdXRpb247XHJcblxyXG4gICAgICAgIHJldHVybiBsaWdodDtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaWdodDtcclxuIiwiaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9WZWN0b3IzJztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0NCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5pbXBvcnQgdmVjNCBmcm9tICcuLi9nbG1hdHJpeC92ZWM0JztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuUGxhbmVcclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFtub3JtYWxdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZGlzdGFuY2VdXHJcbiAqL1xyXG52YXIgUGxhbmUgPSBmdW5jdGlvbihub3JtYWwsIGRpc3RhbmNlKSB7XHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbCBvZiB0aGUgcGxhbmVcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubm9ybWFsID0gbm9ybWFsIHx8IG5ldyBWZWN0b3IzKDAsIDEsIDApO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29uc3RhbnQgb2YgdGhlIHBsYW5lIGVxdWF0aW9uLCB1c2VkIGFzIGRpc3RhbmNlIHRvIHRoZSBvcmlnaW5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZGlzdGFuY2UgPSBkaXN0YW5jZSB8fCAwO1xyXG59O1xyXG5cclxuUGxhbmUucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBQbGFuZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGZyb20gYSBnaXZlbiBwb2ludCB0byB0aGUgcGxhbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gcG9pbnRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGlzdGFuY2VUb1BvaW50OiBmdW5jdGlvbihwb2ludCkge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLmRvdChwb2ludC5hcnJheSwgdGhpcy5ub3JtYWwuYXJyYXkpIC0gdGhpcy5kaXN0YW5jZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIHByb2plY3Rpb24gcG9pbnQgb24gdGhlIHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHBvaW50XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBwcm9qZWN0UG9pbnQ6IGZ1bmN0aW9uKHBvaW50LCBvdXQpIHtcclxuICAgICAgICBpZiAoIW91dCkge1xyXG4gICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZCA9IHRoaXMuZGlzdGFuY2VUb1BvaW50KHBvaW50KTtcclxuICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgcG9pbnQuYXJyYXksIHRoaXMubm9ybWFsLmFycmF5LCAtZCk7XHJcbiAgICAgICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWxpemUgdGhlIHBsYW5lJ3Mgbm9ybWFsIGFuZCBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGludkxlbiA9IDEgLyB2ZWMzLmxlbih0aGlzLm5vcm1hbC5hcnJheSk7XHJcbiAgICAgICAgdmVjMy5zY2FsZSh0aGlzLm5vcm1hbC5hcnJheSwgaW52TGVuKTtcclxuICAgICAgICB0aGlzLmRpc3RhbmNlICo9IGludkxlbjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgcGxhbmUgaW50ZXJzZWN0IGEgZnJ1c3R1bVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5GcnVzdHVtfSBGcnVzdHVtXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RGcnVzdHVtOiBmdW5jdGlvbihmcnVzdHVtKSB7XHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgYWxsIGNvb3JkcyBvZiBmcnVzdHVtIGlzIG9uIHBsYW5lIGFsbCB1bmRlciBwbGFuZVxyXG4gICAgICAgIHZhciBjb29yZHMgPSBmcnVzdHVtLnZlcnRpY2VzO1xyXG4gICAgICAgIHZhciBub3JtYWwgPSB0aGlzLm5vcm1hbC5hcnJheTtcclxuICAgICAgICB2YXIgb25QbGFuZSA9IHZlYzMuZG90KGNvb3Jkc1swXS5hcnJheSwgbm9ybWFsKSA+IHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCh2ZWMzLmRvdChjb29yZHNbaV0uYXJyYXksIG5vcm1hbCkgPiB0aGlzLmRpc3RhbmNlKSAhPSBvblBsYW5lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIHBsYW5lIGFuZCBhIGdpdmVuIGxpbmVcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHN0YXJ0IHN0YXJ0IHBvaW50IG9mIGxpbmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBlbmQgZW5kIHBvaW50IG9mIGxpbmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBbb3V0XVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RMaW5lOiAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHJkID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCwgb3V0KSB7XHJcbiAgICAgICAgICAgIHZhciBkMCA9IHRoaXMuZGlzdGFuY2VUb1BvaW50KHN0YXJ0KTtcclxuICAgICAgICAgICAgdmFyIGQxID0gdGhpcy5kaXN0YW5jZVRvUG9pbnQoZW5kKTtcclxuICAgICAgICAgICAgaWYgKChkMCA+IDAgJiYgZDEgPiAwKSB8fCAoZDAgPCAwICYmIGQxIDwgMCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFJheSBpbnRlcnNlY3Rpb25cclxuICAgICAgICAgICAgdmFyIHBuID0gdGhpcy5ub3JtYWwuYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBkID0gdGhpcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdmFyIHJvID0gc3RhcnQuYXJyYXk7XHJcbiAgICAgICAgICAgIC8vIGRpcmVjdGlvblxyXG4gICAgICAgICAgICB2ZWMzLnN1YihyZCwgZW5kLmFycmF5LCBzdGFydC5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHJkLCByZCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZGl2aWRlciA9IHZlYzMuZG90KHBuLCByZCk7XHJcbiAgICAgICAgICAgIC8vIHJheSBpcyBwYXJhbGxlbCB0byB0aGUgcGxhbmVcclxuICAgICAgICAgICAgaWYgKGRpdmlkZXIgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB0ID0gKHZlYzMuZG90KHBuLCBybykgLSBkKSAvIGRpdmlkZXI7XHJcbiAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBybywgcmQsIC10KTtcclxuICAgICAgICAgICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhbiBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCB0byBwbGFuZVxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGFwcGx5VHJhbnNmb3JtOiAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGludmVyc2VUcmFuc3Bvc2UgPSBtYXQ0LmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciBub3JtYWx2NCA9IHZlYzQuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHBvaW50djQgPSB2ZWM0LmNyZWF0ZSgpO1xyXG4gICAgICAgIHBvaW50djRbM10gPSAxO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihtNCkge1xyXG4gICAgICAgICAgICBtNCA9IG00LmFycmF5O1xyXG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gcG9pbnQgb24gcGxhbmVcclxuICAgICAgICAgICAgdmVjMy5zY2FsZShwb2ludHY0LCB0aGlzLm5vcm1hbC5hcnJheSwgdGhpcy5kaXN0YW5jZSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChwb2ludHY0LCBwb2ludHY0LCBtNCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzdGFuY2UgPSB2ZWMzLmRvdChwb2ludHY0LCB0aGlzLm5vcm1hbC5hcnJheSk7XHJcbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSBwbGFuZSBub3JtYWxcclxuICAgICAgICAgICAgbWF0NC5pbnZlcnQoaW52ZXJzZVRyYW5zcG9zZSwgbTQpO1xyXG4gICAgICAgICAgICBtYXQ0LnRyYW5zcG9zZShpbnZlcnNlVHJhbnNwb3NlLCBpbnZlcnNlVHJhbnNwb3NlKTtcclxuICAgICAgICAgICAgbm9ybWFsdjRbM10gPSAwO1xyXG4gICAgICAgICAgICB2ZWMzLmNvcHkobm9ybWFsdjQsIHRoaXMubm9ybWFsLmFycmF5KTtcclxuICAgICAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KG5vcm1hbHY0LCBub3JtYWx2NCwgaW52ZXJzZVRyYW5zcG9zZSk7XHJcbiAgICAgICAgICAgIHZlYzMuY29weSh0aGlzLm5vcm1hbC5hcnJheSwgbm9ybWFsdjQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGFub3RoZXIgcGxhbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gcGxhbmVcclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24ocGxhbmUpIHtcclxuICAgICAgICB2ZWMzLmNvcHkodGhpcy5ub3JtYWwuYXJyYXksIHBsYW5lLm5vcm1hbC5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5ub3JtYWwuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpc3RhbmNlID0gcGxhbmUuZGlzdGFuY2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgcGxhbmVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUGxhbmV9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgcGxhbmUgPSBuZXcgUGxhbmUoKTtcclxuICAgICAgICBwbGFuZS5jb3B5KHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBwbGFuZTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBsYW5lO1xyXG4iLCJpbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCBQbGFuZSBmcm9tICcuL1BsYW5lJztcclxuXHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxudmFyIHZlYzNTZXQgPSB2ZWMzLnNldDtcclxudmFyIHZlYzNDb3B5ID0gdmVjMy5jb3B5O1xyXG52YXIgdmVjM1RyYW5mb3JtTWF0NCA9IHZlYzMudHJhbnNmb3JtTWF0NDtcclxudmFyIG1hdGhNaW4gPSBNYXRoLm1pbjtcclxudmFyIG1hdGhNYXggPSBNYXRoLm1heDtcclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5GcnVzdHVtXHJcbiAqL1xyXG52YXIgRnJ1c3R1bSA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWlnaHQgcGxhbmVzIHRvIGVuY2xvc2UgdGhlIGZydXN0dW1cclxuICAgICAqIEB0eXBlIHtjbGF5LlBsYW5lW119XHJcbiAgICAgKi9cclxuICAgIHRoaXMucGxhbmVzID0gW107XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICB0aGlzLnBsYW5lcy5wdXNoKG5ldyBQbGFuZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEJvdW5kaW5nIGJveCBvZiBmcnVzdHVtXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAqL1xyXG4gICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWlnaHQgdmVydGljZXMgb2YgZnJ1c3R1bVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheVtdfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZlcnRpY2VzID0gW107XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xyXG4gICAgICAgIHRoaXMudmVydGljZXNbaV0gPSB2ZWMzLmZyb21WYWx1ZXMoMCwgMCwgMCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5GcnVzdHVtLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICAvLyBodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDEyMDUzMTIzMTAwNS9odHRwOi8vY3Jhenlqb2tlLmZyZWUuZnIvZG9jLzNEL3BsYW5lJTIwZXh0cmFjdGlvbi5wZGZcclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZydXN0dW0gZnJvbSBhIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gcHJvamVjdGlvbk1hdHJpeFxyXG4gICAgICovXHJcbiAgICBzZXRGcm9tUHJvamVjdGlvbjogZnVuY3Rpb24ocHJvamVjdGlvbk1hdHJpeCkge1xyXG5cclxuICAgICAgICB2YXIgcGxhbmVzID0gdGhpcy5wbGFuZXM7XHJcbiAgICAgICAgdmFyIG0gPSBwcm9qZWN0aW9uTWF0cml4LmFycmF5O1xyXG4gICAgICAgIHZhciBtMCA9IG1bMF0sIG0xID0gbVsxXSwgbTIgPSBtWzJdLCBtMyA9IG1bM107XHJcbiAgICAgICAgdmFyIG00ID0gbVs0XSwgbTUgPSBtWzVdLCBtNiA9IG1bNl0sIG03ID0gbVs3XTtcclxuICAgICAgICB2YXIgbTggPSBtWzhdLCBtOSA9IG1bOV0sIG0xMCA9IG1bMTBdLCBtMTEgPSBtWzExXTtcclxuICAgICAgICB2YXIgbTEyID0gbVsxMl0sIG0xMyA9IG1bMTNdLCBtMTQgPSBtWzE0XSwgbTE1ID0gbVsxNV07XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSBwbGFuZXNcclxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1swXS5ub3JtYWwuYXJyYXksIG0zIC0gbTAsIG03IC0gbTQsIG0xMSAtIG04KTtcclxuICAgICAgICBwbGFuZXNbMF0uZGlzdGFuY2UgPSAtKG0xNSAtIG0xMik7XHJcbiAgICAgICAgcGxhbmVzWzBdLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1sxXS5ub3JtYWwuYXJyYXksIG0zICsgbTAsIG03ICsgbTQsIG0xMSArIG04KTtcclxuICAgICAgICBwbGFuZXNbMV0uZGlzdGFuY2UgPSAtKG0xNSArIG0xMik7XHJcbiAgICAgICAgcGxhbmVzWzFdLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1syXS5ub3JtYWwuYXJyYXksIG0zICsgbTEsIG03ICsgbTUsIG0xMSArIG05KTtcclxuICAgICAgICBwbGFuZXNbMl0uZGlzdGFuY2UgPSAtKG0xNSArIG0xMyk7XHJcbiAgICAgICAgcGxhbmVzWzJdLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1szXS5ub3JtYWwuYXJyYXksIG0zIC0gbTEsIG03IC0gbTUsIG0xMSAtIG05KTtcclxuICAgICAgICBwbGFuZXNbM10uZGlzdGFuY2UgPSAtKG0xNSAtIG0xMyk7XHJcbiAgICAgICAgcGxhbmVzWzNdLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2ZWMzU2V0KHBsYW5lc1s0XS5ub3JtYWwuYXJyYXksIG0zIC0gbTIsIG03IC0gbTYsIG0xMSAtIG0xMCk7XHJcbiAgICAgICAgcGxhbmVzWzRdLmRpc3RhbmNlID0gLShtMTUgLSBtMTQpO1xyXG4gICAgICAgIHBsYW5lc1s0XS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbNV0ubm9ybWFsLmFycmF5LCBtMyArIG0yLCBtNyArIG02LCBtMTEgKyBtMTApO1xyXG4gICAgICAgIHBsYW5lc1s1XS5kaXN0YW5jZSA9IC0obTE1ICsgbTE0KTtcclxuICAgICAgICBwbGFuZXNbNV0ubm9ybWFsaXplKCk7XHJcblxyXG4gICAgICAgIC8vIFBlcnNwZWN0aXZlIHByb2plY3Rpb25cclxuICAgICAgICB2YXIgYm91bmRpbmdCb3ggPSB0aGlzLmJvdW5kaW5nQm94O1xyXG4gICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XHJcbiAgICAgICAgaWYgKG0xNSA9PT0gMCkgIHtcclxuICAgICAgICAgICAgdmFyIGFzcGVjdCA9IG01IC8gbTA7XHJcbiAgICAgICAgICAgIHZhciB6TmVhciA9IC1tMTQgLyAobTEwIC0gMSk7XHJcbiAgICAgICAgICAgIHZhciB6RmFyID0gLW0xNCAvIChtMTAgKyAxKTtcclxuICAgICAgICAgICAgdmFyIGZhclkgPSAtekZhciAvIG01O1xyXG4gICAgICAgICAgICB2YXIgbmVhclkgPSAtek5lYXIgLyBtNTtcclxuICAgICAgICAgICAgLy8gVXBkYXRlIGJvdW5kaW5nIGJveFxyXG4gICAgICAgICAgICBib3VuZGluZ0JveC5taW4uc2V0KC1mYXJZICogYXNwZWN0LCAtZmFyWSwgekZhcik7XHJcbiAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1heC5zZXQoZmFyWSAqIGFzcGVjdCwgZmFyWSwgek5lYXIpO1xyXG4gICAgICAgICAgICAvLyB1cGRhdGUgdmVydGljZXNcclxuICAgICAgICAgICAgLy8tLS0gbWluIHpcclxuICAgICAgICAgICAgLy8gbWluIHhcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1swXSwgLWZhclkgKiBhc3BlY3QsIC1mYXJZLCB6RmFyKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1sxXSwgLWZhclkgKiBhc3BlY3QsIGZhclksIHpGYXIpO1xyXG4gICAgICAgICAgICAvLyBtYXggeFxyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzJdLCBmYXJZICogYXNwZWN0LCAtZmFyWSwgekZhcik7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbM10sIGZhclkgKiBhc3BlY3QsIGZhclksIHpGYXIpO1xyXG4gICAgICAgICAgICAvLy0tIG1heCB6XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNF0sIC1uZWFyWSAqIGFzcGVjdCwgLW5lYXJZLCB6TmVhcik7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNV0sIC1uZWFyWSAqIGFzcGVjdCwgbmVhclksIHpOZWFyKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s2XSwgbmVhclkgKiBhc3BlY3QsIC1uZWFyWSwgek5lYXIpO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzddLCBuZWFyWSAqIGFzcGVjdCwgbmVhclksIHpOZWFyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7IC8vIE9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uXHJcbiAgICAgICAgICAgIHZhciBsZWZ0ID0gKC0xIC0gbTEyKSAvIG0wO1xyXG4gICAgICAgICAgICB2YXIgcmlnaHQgPSAoMSAtIG0xMikgLyBtMDtcclxuICAgICAgICAgICAgdmFyIHRvcCA9ICgxIC0gbTEzKSAvIG01O1xyXG4gICAgICAgICAgICB2YXIgYm90dG9tID0gKC0xIC0gbTEzKSAvIG01O1xyXG4gICAgICAgICAgICB2YXIgbmVhciA9ICgtMSAtIG0xNCkgLyBtMTA7XHJcbiAgICAgICAgICAgIHZhciBmYXIgPSAoMSAtIG0xNCkgLyBtMTA7XHJcblxyXG5cclxuICAgICAgICAgICAgYm91bmRpbmdCb3gubWluLnNldChNYXRoLm1pbihsZWZ0LCByaWdodCksIE1hdGgubWluKGJvdHRvbSwgdG9wKSwgTWF0aC5taW4oZmFyLCBuZWFyKSk7XHJcbiAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1heC5zZXQoTWF0aC5tYXgocmlnaHQsIGxlZnQpLCBNYXRoLm1heCh0b3AsIGJvdHRvbSksIE1hdGgubWF4KG5lYXIsIGZhcikpO1xyXG5cclxuICAgICAgICAgICAgdmFyIG1pbiA9IGJvdW5kaW5nQm94Lm1pbi5hcnJheTtcclxuICAgICAgICAgICAgdmFyIG1heCA9IGJvdW5kaW5nQm94Lm1heC5hcnJheTtcclxuICAgICAgICAgICAgLy8tLS0gbWluIHpcclxuICAgICAgICAgICAgLy8gbWluIHhcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1swXSwgbWluWzBdLCBtaW5bMV0sIG1pblsyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbMV0sIG1pblswXSwgbWF4WzFdLCBtaW5bMl0pO1xyXG4gICAgICAgICAgICAvLyBtYXggeFxyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzJdLCBtYXhbMF0sIG1pblsxXSwgbWluWzJdKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1szXSwgbWF4WzBdLCBtYXhbMV0sIG1pblsyXSk7XHJcbiAgICAgICAgICAgIC8vLS0gbWF4IHpcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s0XSwgbWluWzBdLCBtaW5bMV0sIG1heFsyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNV0sIG1pblswXSwgbWF4WzFdLCBtYXhbMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzZdLCBtYXhbMF0sIG1pblsxXSwgbWF4WzJdKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s3XSwgbWF4WzBdLCBtYXhbMV0sIG1heFsyXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IGEgYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggYW5kIHNldCB0byB0aGUgZ2l2ZW4gYm91bmRpbmcgYm94XHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBwYXJhbSB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAqIEBwYXJhbSB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAqL1xyXG4gICAgZ2V0VHJhbnNmb3JtZWRCb3VuZGluZ0JveDogKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgdG1wVmVjMyA9IHZlYzMuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihiYm94LCBtYXRyaXgpIHtcclxuICAgICAgICAgICAgdmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcztcclxuXHJcbiAgICAgICAgICAgIHZhciBtNCA9IG1hdHJpeC5hcnJheTtcclxuICAgICAgICAgICAgdmFyIG1pbiA9IGJib3gubWluO1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gYmJveC5tYXg7XHJcbiAgICAgICAgICAgIHZhciBtaW5BcnIgPSBtaW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXhBcnIgPSBtYXguYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciB2ID0gdmVydGljZXNbMF07XHJcbiAgICAgICAgICAgIHZlYzNUcmFuZm9ybU1hdDQodG1wVmVjMywgdiwgbTQpO1xyXG4gICAgICAgICAgICB2ZWMzQ29weShtaW5BcnIsIHRtcFZlYzMpO1xyXG4gICAgICAgICAgICB2ZWMzQ29weShtYXhBcnIsIHRtcFZlYzMpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHYgPSB2ZXJ0aWNlc1tpXTtcclxuICAgICAgICAgICAgICAgIHZlYzNUcmFuZm9ybU1hdDQodG1wVmVjMywgdiwgbTQpO1xyXG5cclxuICAgICAgICAgICAgICAgIG1pbkFyclswXSA9IG1hdGhNaW4odG1wVmVjM1swXSwgbWluQXJyWzBdKTtcclxuICAgICAgICAgICAgICAgIG1pbkFyclsxXSA9IG1hdGhNaW4odG1wVmVjM1sxXSwgbWluQXJyWzFdKTtcclxuICAgICAgICAgICAgICAgIG1pbkFyclsyXSA9IG1hdGhNaW4odG1wVmVjM1syXSwgbWluQXJyWzJdKTtcclxuXHJcbiAgICAgICAgICAgICAgICBtYXhBcnJbMF0gPSBtYXRoTWF4KHRtcFZlYzNbMF0sIG1heEFyclswXSk7XHJcbiAgICAgICAgICAgICAgICBtYXhBcnJbMV0gPSBtYXRoTWF4KHRtcFZlYzNbMV0sIG1heEFyclsxXSk7XHJcbiAgICAgICAgICAgICAgICBtYXhBcnJbMl0gPSBtYXRoTWF4KHRtcFZlYzNbMl0sIG1heEFyclsyXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICBtYXguX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBiYm94O1xyXG4gICAgICAgIH07XHJcbiAgICB9KSAoKVxyXG59O1xyXG5leHBvcnQgZGVmYXVsdCBGcnVzdHVtO1xyXG4iLCJpbXBvcnQgVmVjdG9yMyBmcm9tICcuL1ZlY3RvcjMnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcbnZhciBFUFNJTE9OID0gMWUtNTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuUmF5XHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBbb3JpZ2luXVxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW2RpcmVjdGlvbl1cclxuICovXHJcbnZhciBSYXkgPSBmdW5jdGlvbiAob3JpZ2luLCBkaXJlY3Rpb24pIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW4gfHwgbmV3IFZlY3RvcjMoKTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5kaXJlY3Rpb24gPSBkaXJlY3Rpb24gfHwgbmV3IFZlY3RvcjMoKTtcclxufTtcclxuXHJcblJheS5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IFJheSxcclxuXHJcbiAgICAvLyBodHRwOi8vd3d3LnNpZ2dyYXBoLm9yZy9lZHVjYXRpb24vbWF0ZXJpYWxzL0h5cGVyR3JhcGgvcmF5dHJhY2UvcmF5cGxhbmVfaW50ZXJzZWN0aW9uLmh0bVxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgaW50ZXJzZWN0aW9uIHBvaW50IGJldHdlZW4gcmF5IGFuZCBhIGdpdmUgcGxhbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUGxhbmV9IHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IFtvdXRdXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdFBsYW5lOiBmdW5jdGlvbiAocGxhbmUsIG91dCkge1xyXG4gICAgICAgIHZhciBwbiA9IHBsYW5lLm5vcm1hbC5hcnJheTtcclxuICAgICAgICB2YXIgZCA9IHBsYW5lLmRpc3RhbmNlO1xyXG4gICAgICAgIHZhciBybyA9IHRoaXMub3JpZ2luLmFycmF5O1xyXG4gICAgICAgIHZhciByZCA9IHRoaXMuZGlyZWN0aW9uLmFycmF5O1xyXG5cclxuICAgICAgICB2YXIgZGl2aWRlciA9IHZlYzMuZG90KHBuLCByZCk7XHJcbiAgICAgICAgLy8gcmF5IGlzIHBhcmFsbGVsIHRvIHRoZSBwbGFuZVxyXG4gICAgICAgIGlmIChkaXZpZGVyID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW91dCkge1xyXG4gICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdCA9ICh2ZWMzLmRvdChwbiwgcm8pIC0gZCkgLyBkaXZpZGVyO1xyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBybywgcmQsIC10KTtcclxuICAgICAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1pcnJvciB0aGUgcmF5IGFnYWluc3QgcGxhbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUGxhbmV9IHBsYW5lXHJcbiAgICAgKi9cclxuICAgIG1pcnJvckFnYWluc3RQbGFuZTogZnVuY3Rpb24gKHBsYW5lKSB7XHJcbiAgICAgICAgLy8gRGlzdGFuY2UgdG8gcGxhbmVcclxuICAgICAgICB2YXIgZCA9IHZlYzMuZG90KHBsYW5lLm5vcm1hbC5hcnJheSwgdGhpcy5kaXJlY3Rpb24uYXJyYXkpO1xyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQodGhpcy5kaXJlY3Rpb24uYXJyYXksIHRoaXMuZGlyZWN0aW9uLmFycmF5LCBwbGFuZS5ub3JtYWwuYXJyYXksIC1kICogMik7XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZGlzdGFuY2VUb1BvaW50OiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2ID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYsIHBvaW50LCB0aGlzLm9yaWdpbi5hcnJheSk7XHJcbiAgICAgICAgICAgIC8vIERpc3RhbmNlIGZyb20gcHJvamVjdGlvbiBwb2ludCB0byBvcmlnaW5cclxuICAgICAgICAgICAgdmFyIGIgPSB2ZWMzLmRvdCh2LCB0aGlzLmRpcmVjdGlvbi5hcnJheSk7XHJcbiAgICAgICAgICAgIGlmIChiIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzMuZGlzdGFuY2UodGhpcy5vcmlnaW4uYXJyYXksIHBvaW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBTcXVhcmVkIGRpc3RhbmNlIGZyb20gY2VudGVyIHRvIG9yaWdpblxyXG4gICAgICAgICAgICB2YXIgYzIgPSB2ZWMzLmxlblNxdWFyZWQodik7XHJcbiAgICAgICAgICAgIC8vIFNxdWFyZWQgZGlzdGFuY2UgZnJvbSBjZW50ZXIgdG8gcHJvamVjdGlvbiBwb2ludFxyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KGMyIC0gYiAqIGIpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIHJheSBhbmQgc3BoZXJlXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGNlbnRlclxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSByYWRpdXNcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdFNwaGVyZTogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdiA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjZW50ZXIsIHJhZGl1cywgb3V0KSB7XHJcbiAgICAgICAgICAgIHZhciBvcmlnaW4gPSB0aGlzLm9yaWdpbi5hcnJheTtcclxuICAgICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uLmFycmF5O1xyXG4gICAgICAgICAgICBjZW50ZXIgPSBjZW50ZXIuYXJyYXk7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYsIGNlbnRlciwgb3JpZ2luKTtcclxuICAgICAgICAgICAgLy8gRGlzdGFuY2UgZnJvbSBwcm9qZWN0aW9uIHBvaW50IHRvIG9yaWdpblxyXG4gICAgICAgICAgICB2YXIgYiA9IHZlYzMuZG90KHYsIGRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgIC8vIFNxdWFyZWQgZGlzdGFuY2UgZnJvbSBjZW50ZXIgdG8gb3JpZ2luXHJcbiAgICAgICAgICAgIHZhciBjMiA9IHZlYzMuc3F1YXJlZExlbmd0aCh2KTtcclxuICAgICAgICAgICAgLy8gU3F1YXJlZCBkaXN0YW5jZSBmcm9tIGNlbnRlciB0byBwcm9qZWN0aW9uIHBvaW50XHJcbiAgICAgICAgICAgIHZhciBkMiA9IGMyIC0gYiAqIGI7XHJcblxyXG4gICAgICAgICAgICB2YXIgcjIgPSByYWRpdXMgKiByYWRpdXM7XHJcbiAgICAgICAgICAgIC8vIE5vIGludGVyc2VjdGlvblxyXG4gICAgICAgICAgICBpZiAoZDIgPiByMikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgYSA9IE1hdGguc3FydChyMiAtIGQyKTtcclxuICAgICAgICAgICAgLy8gRmlyc3QgaW50ZXJzZWN0IHBvaW50XHJcbiAgICAgICAgICAgIHZhciB0MCA9IGIgLSBhO1xyXG4gICAgICAgICAgICAvLyBTZWNvbmQgaW50ZXJzZWN0IHBvaW50XHJcbiAgICAgICAgICAgIHZhciB0MSA9IGIgKyBhO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHQwIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHQxIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIG9yaWdpbiwgZGlyZWN0aW9uLCB0MSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBvcmlnaW4sIGRpcmVjdGlvbiwgdDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8vIGh0dHA6Ly93d3cuc2NyYXRjaGFwaXhlbC5jb20vbGVzc29ucy8zZC1iYXNpYy1sZXNzb25zL2xlc3Nvbi03LWludGVyc2VjdGluZy1zaW1wbGUtc2hhcGVzL3JheS1ib3gtaW50ZXJzZWN0aW9uL1xyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgaW50ZXJzZWN0aW9uIHBvaW50IGJldHdlZW4gcmF5IGFuZCBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Cb3VuZGluZ0JveH0gYmJveFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdEJvdW5kaW5nQm94OiBmdW5jdGlvbiAoYmJveCwgb3V0KSB7XHJcbiAgICAgICAgdmFyIGRpciA9IHRoaXMuZGlyZWN0aW9uLmFycmF5O1xyXG4gICAgICAgIHZhciBvcmlnaW4gPSB0aGlzLm9yaWdpbi5hcnJheTtcclxuICAgICAgICB2YXIgbWluID0gYmJveC5taW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIG1heCA9IGJib3gubWF4LmFycmF5O1xyXG5cclxuICAgICAgICB2YXIgaW52ZGlyeCA9IDEgLyBkaXJbMF07XHJcbiAgICAgICAgdmFyIGludmRpcnkgPSAxIC8gZGlyWzFdO1xyXG4gICAgICAgIHZhciBpbnZkaXJ6ID0gMSAvIGRpclsyXTtcclxuXHJcbiAgICAgICAgdmFyIHRtaW4sIHRtYXgsIHR5bWluLCB0eW1heCwgdHptaW4sIHR6bWF4O1xyXG4gICAgICAgIGlmIChpbnZkaXJ4ID49IDApIHtcclxuICAgICAgICAgICAgdG1pbiA9IChtaW5bMF0gLSBvcmlnaW5bMF0pICogaW52ZGlyeDtcclxuICAgICAgICAgICAgdG1heCA9IChtYXhbMF0gLSBvcmlnaW5bMF0pICogaW52ZGlyeDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRtYXggPSAobWluWzBdIC0gb3JpZ2luWzBdKSAqIGludmRpcng7XHJcbiAgICAgICAgICAgIHRtaW4gPSAobWF4WzBdIC0gb3JpZ2luWzBdKSAqIGludmRpcng7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbnZkaXJ5ID49IDApIHtcclxuICAgICAgICAgICAgdHltaW4gPSAobWluWzFdIC0gb3JpZ2luWzFdKSAqIGludmRpcnk7XHJcbiAgICAgICAgICAgIHR5bWF4ID0gKG1heFsxXSAtIG9yaWdpblsxXSkgKiBpbnZkaXJ5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdHltYXggPSAobWluWzFdIC0gb3JpZ2luWzFdKSAqIGludmRpcnk7XHJcbiAgICAgICAgICAgIHR5bWluID0gKG1heFsxXSAtIG9yaWdpblsxXSkgKiBpbnZkaXJ5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCh0bWluID4gdHltYXgpIHx8ICh0eW1pbiA+IHRtYXgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5bWluID4gdG1pbiB8fCB0bWluICE9PSB0bWluKSB7XHJcbiAgICAgICAgICAgIHRtaW4gPSB0eW1pbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5bWF4IDwgdG1heCB8fCB0bWF4ICE9PSB0bWF4KSB7XHJcbiAgICAgICAgICAgIHRtYXggPSB0eW1heDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpbnZkaXJ6ID49IDApIHtcclxuICAgICAgICAgICAgdHptaW4gPSAobWluWzJdIC0gb3JpZ2luWzJdKSAqIGludmRpcno7XHJcbiAgICAgICAgICAgIHR6bWF4ID0gKG1heFsyXSAtIG9yaWdpblsyXSkgKiBpbnZkaXJ6O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdHptYXggPSAobWluWzJdIC0gb3JpZ2luWzJdKSAqIGludmRpcno7XHJcbiAgICAgICAgICAgIHR6bWluID0gKG1heFsyXSAtIG9yaWdpblsyXSkgKiBpbnZkaXJ6O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCh0bWluID4gdHptYXgpIHx8ICh0em1pbiA+IHRtYXgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR6bWluID4gdG1pbiB8fCB0bWluICE9PSB0bWluKSB7XHJcbiAgICAgICAgICAgIHRtaW4gPSB0em1pbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR6bWF4IDwgdG1heCB8fCB0bWF4ICE9PSB0bWF4KSB7XHJcbiAgICAgICAgICAgIHRtYXggPSB0em1heDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRtYXggPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHQgPSB0bWluID49IDAgPyB0bWluIDogdG1heDtcclxuXHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIG9yaWdpbiwgZGlyLCB0KTtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL00lQzMlQjZsbGVyJUUyJTgwJTkzVHJ1bWJvcmVfaW50ZXJzZWN0aW9uX2FsZ29yaXRobVxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgaW50ZXJzZWN0aW9uIHBvaW50IGJldHdlZW4gcmF5IGFuZCB0aHJlZSB0cmlhbmdsZSB2ZXJ0aWNlc1xyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IGFcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gY1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgc2luZ2xlU2lkZWQsIENXIHRyaWFuZ2xlIHdpbGwgYmUgaWdub3JlZFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFtvdXRdXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW2JhcnljZW50ZXJpY10gYmFyeWNlbnRyaWMgY29vcmRzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdFRyaWFuZ2xlOiAoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2YXIgZUJBID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgZUNBID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgQU8gPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB2Q3Jvc3MgPSB2ZWMzLmNyZWF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMsIHNpbmdsZVNpZGVkLCBvdXQsIGJhcnljZW50ZXJpYykge1xyXG4gICAgICAgICAgICB2YXIgZGlyID0gdGhpcy5kaXJlY3Rpb24uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBvcmlnaW4gPSB0aGlzLm9yaWdpbi5hcnJheTtcclxuICAgICAgICAgICAgYSA9IGEuYXJyYXk7XHJcbiAgICAgICAgICAgIGIgPSBiLmFycmF5O1xyXG4gICAgICAgICAgICBjID0gYy5hcnJheTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMuc3ViKGVCQSwgYiwgYSk7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKGVDQSwgYywgYSk7XHJcblxyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKHZDcm9zcywgZUNBLCBkaXIpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRldCA9IHZlYzMuZG90KGVCQSwgdkNyb3NzKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzaW5nbGVTaWRlZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRldCA+IC1FUFNJTE9OKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGV0ID4gLUVQU0lMT04gJiYgZGV0IDwgRVBTSUxPTikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2ZWMzLnN1YihBTywgb3JpZ2luLCBhKTtcclxuICAgICAgICAgICAgdmFyIHUgPSB2ZWMzLmRvdCh2Q3Jvc3MsIEFPKSAvIGRldDtcclxuICAgICAgICAgICAgaWYgKHUgPCAwIHx8IHUgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVjMy5jcm9zcyh2Q3Jvc3MsIGVCQSwgQU8pO1xyXG4gICAgICAgICAgICB2YXIgdiA9IHZlYzMuZG90KGRpciwgdkNyb3NzKSAvIGRldDtcclxuXHJcbiAgICAgICAgICAgIGlmICh2IDwgMCB8fCB2ID4gMSB8fCAodSArIHYgPiAxKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlYzMuY3Jvc3ModkNyb3NzLCBlQkEsIGVDQSk7XHJcbiAgICAgICAgICAgIHZhciB0ID0gLXZlYzMuZG90KEFPLCB2Q3Jvc3MpIC8gZGV0O1xyXG5cclxuICAgICAgICAgICAgaWYgKHQgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGJhcnljZW50ZXJpYykge1xyXG4gICAgICAgICAgICAgICAgVmVjdG9yMy5zZXQoYmFyeWNlbnRlcmljLCAoMSAtIHUgLSB2KSwgdSwgdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIG9yaWdpbiwgZGlyLCB0KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhbiBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCB0byB0aGUgcmF5XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBhcHBseVRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG4gICAgICAgIFZlY3RvcjMuYWRkKHRoaXMuZGlyZWN0aW9uLCB0aGlzLmRpcmVjdGlvbiwgdGhpcy5vcmlnaW4pO1xyXG4gICAgICAgIFZlY3RvcjMudHJhbnNmb3JtTWF0NCh0aGlzLm9yaWdpbiwgdGhpcy5vcmlnaW4sIG1hdHJpeCk7XHJcbiAgICAgICAgVmVjdG9yMy50cmFuc2Zvcm1NYXQ0KHRoaXMuZGlyZWN0aW9uLCB0aGlzLmRpcmVjdGlvbiwgbWF0cml4KTtcclxuXHJcbiAgICAgICAgVmVjdG9yMy5zdWIodGhpcy5kaXJlY3Rpb24sIHRoaXMuZGlyZWN0aW9uLCB0aGlzLm9yaWdpbik7XHJcbiAgICAgICAgVmVjdG9yMy5ub3JtYWxpemUodGhpcy5kaXJlY3Rpb24sIHRoaXMuZGlyZWN0aW9uKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IHZhbHVlcyBmcm9tIGFub3RoZXIgcmF5XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuUmF5fSByYXlcclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24gKHJheSkge1xyXG4gICAgICAgIFZlY3RvcjMuY29weSh0aGlzLm9yaWdpbiwgcmF5Lm9yaWdpbik7XHJcbiAgICAgICAgVmVjdG9yMy5jb3B5KHRoaXMuZGlyZWN0aW9uLCByYXkuZGlyZWN0aW9uKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyByYXlcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUmF5fVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciByYXkgPSBuZXcgUmF5KCk7XHJcbiAgICAgICAgcmF5LmNvcHkodGhpcyk7XHJcbiAgICAgICAgcmV0dXJuIHJheTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJheTtcclxuIiwiaW1wb3J0IE5vZGUgZnJvbSAnLi9Ob2RlJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgRnJ1c3R1bSBmcm9tICcuL21hdGgvRnJ1c3R1bSc7XHJcbmltcG9ydCBSYXkgZnJvbSAnLi9tYXRoL1JheSc7XHJcblxyXG5pbXBvcnQgdmVjNCBmcm9tICcuL2dsbWF0cml4L3ZlYzQnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5DYW1lcmFcclxuICogQGV4dGVuZHMgY2xheS5Ob2RlXHJcbiAqL1xyXG52YXIgQ2FtZXJhID0gTm9kZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5DYW1lcmEjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW1lcmEgcHJvamVjdGlvbiBtYXRyaXhcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6IG5ldyBNYXRyaXg0KCksXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludmVyc2Ugb2YgY2FtZXJhIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTWF0cml4NH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBpbnZQcm9qZWN0aW9uTWF0cml4OiBuZXcgTWF0cml4NCgpLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBWaWV3IG1hdHJpeCwgZXF1YWwgdG8gaW52ZXJzZSBvZiBjYW1lcmEncyB3b3JsZCBtYXRyaXhcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZpZXdNYXRyaXg6IG5ldyBNYXRyaXg0KCksXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbWVyYSBmcnVzdHVtIGluIHZpZXcgc3BhY2VcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5GcnVzdHVtfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZydXN0dW06IG5ldyBGcnVzdHVtKClcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMudXBkYXRlKHRydWUpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuQ2FtZXJhLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZm9yY2UpIHtcclxuICAgICAgICBOb2RlLnByb3RvdHlwZS51cGRhdGUuY2FsbCh0aGlzLCBmb3JjZSk7XHJcbiAgICAgICAgTWF0cml4NC5pbnZlcnQodGhpcy52aWV3TWF0cml4LCB0aGlzLndvcmxkVHJhbnNmb3JtKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgTWF0cml4NC5pbnZlcnQodGhpcy5pbnZQcm9qZWN0aW9uTWF0cml4LCB0aGlzLnByb2plY3Rpb25NYXRyaXgpO1xyXG5cclxuICAgICAgICB0aGlzLmZydXN0dW0uc2V0RnJvbVByb2plY3Rpb24odGhpcy5wcm9qZWN0aW9uTWF0cml4KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY2FtZXJhIHZpZXcgbWF0cml4XHJcbiAgICAgKi9cclxuICAgIHNldFZpZXdNYXRyaXg6IGZ1bmN0aW9uICh2aWV3TWF0cml4KSB7XHJcbiAgICAgICAgTWF0cml4NC5jb3B5KHRoaXMudmlld01hdHJpeCwgdmlld01hdHJpeCk7XHJcbiAgICAgICAgTWF0cml4NC5pbnZlcnQodGhpcy53b3JsZFRyYW5zZm9ybSwgdmlld01hdHJpeCk7XHJcbiAgICAgICAgdGhpcy5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlY29tcG9zZSBjYW1lcmEgcHJvamVjdGlvbiBtYXRyaXhcclxuICAgICAqL1xyXG4gICAgZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY2FtZXJhIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gcHJvamVjdGlvbk1hdHJpeFxyXG4gICAgICovXHJcbiAgICBzZXRQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAocHJvamVjdGlvbk1hdHJpeCkge1xyXG4gICAgICAgIE1hdHJpeDQuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgsIHByb2plY3Rpb25NYXRyaXgpO1xyXG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeCwgcHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgdGhpcy5kZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgcHJvamVjdGlvbiBtYXRyaXgsIGNhbGxlZCBhZnRlciB1cGRhdGVcclxuICAgICAqL1xyXG4gICAgdXBkYXRlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYXN0IGEgcGlja2luZyByYXkgZnJvbSBjYW1lcmEgbmVhciBwbGFuZSB0byBmYXIgcGxhbmVcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjJ9IG5kY1xyXG4gICAgICogQHBhcmFtIHtjbGF5LlJheX0gW291dF1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuUmF5fVxyXG4gICAgICovXHJcbiAgICBjYXN0UmF5OiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB2NCA9IHZlYzQuY3JlYXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChuZGMsIG91dCkge1xyXG4gICAgICAgICAgICB2YXIgcmF5ID0gb3V0ICE9PSB1bmRlZmluZWQgPyBvdXQgOiBuZXcgUmF5KCk7XHJcbiAgICAgICAgICAgIHZhciB4ID0gbmRjLmFycmF5WzBdO1xyXG4gICAgICAgICAgICB2YXIgeSA9IG5kYy5hcnJheVsxXTtcclxuICAgICAgICAgICAgdmVjNC5zZXQodjQsIHgsIHksIC0xLCAxKTtcclxuICAgICAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KHY0LCB2NCwgdGhpcy5pbnZQcm9qZWN0aW9uTWF0cml4LmFycmF5KTtcclxuICAgICAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KHY0LCB2NCwgdGhpcy53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzMuc2NhbGUocmF5Lm9yaWdpbi5hcnJheSwgdjQsIDEgLyB2NFszXSk7XHJcblxyXG4gICAgICAgICAgICB2ZWM0LnNldCh2NCwgeCwgeSwgMSwgMSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2NCwgdjQsIHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2NCwgdjQsIHRoaXMud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlKHY0LCB2NCwgMSAvIHY0WzNdKTtcclxuICAgICAgICAgICAgdmVjMy5zdWIocmF5LmRpcmVjdGlvbi5hcnJheSwgdjQsIHJheS5vcmlnaW4uYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUocmF5LmRpcmVjdGlvbi5hcnJheSwgcmF5LmRpcmVjdGlvbi5hcnJheSk7XHJcbiAgICAgICAgICAgIHJheS5kaXJlY3Rpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmF5Lm9yaWdpbi5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJheTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQG5hbWUgY2xvbmVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuQ2FtZXJhfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuQ2FtZXJhLnByb3RvdHlwZVxyXG4gICAgICovXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ2FtZXJhO1xyXG4iLCJpbXBvcnQgTm9kZSBmcm9tICcuL05vZGUnO1xyXG5pbXBvcnQgTGlnaHQgZnJvbSAnLi9MaWdodCc7XHJcbmltcG9ydCBDYW1lcmEgZnJvbSAnLi9DYW1lcmEnO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi9tYXRoL0JvdW5kaW5nQm94JztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgbWF0NCBmcm9tICcuL2dsbWF0cml4L21hdDQnO1xyXG5pbXBvcnQgTFJVQ2FjaGUgZnJvbSAnLi9jb3JlL0xSVSc7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4vbWF0aC9NYXRyaXg0JztcclxuXHJcbnZhciBJREVOVElUWSA9IG1hdDQuY3JlYXRlKCk7XHJcbnZhciBXT1JMRFZJRVcgPSBtYXQ0LmNyZWF0ZSgpO1xyXG5cclxudmFyIHByb2dyYW1LZXlDYWNoZSA9IHt9O1xyXG5cclxuZnVuY3Rpb24gZ2V0UHJvZ3JhbUtleShsaWdodE51bWJlcnMpIHtcclxuICAgIHZhciBkZWZpbmVTdHIgPSBbXTtcclxuICAgIHZhciBsaWdodFR5cGVzID0gT2JqZWN0LmtleXMobGlnaHROdW1iZXJzKTtcclxuICAgIGxpZ2h0VHlwZXMuc29ydCgpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaWdodFR5cGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0VHlwZSA9IGxpZ2h0VHlwZXNbaV07XHJcbiAgICAgICAgZGVmaW5lU3RyLnB1c2gobGlnaHRUeXBlICsgJyAnICsgbGlnaHROdW1iZXJzW2xpZ2h0VHlwZV0pO1xyXG4gICAgfVxyXG4gICAgdmFyIGtleSA9IGRlZmluZVN0ci5qb2luKCdcXG4nKTtcclxuXHJcbiAgICBpZiAocHJvZ3JhbUtleUNhY2hlW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gcHJvZ3JhbUtleUNhY2hlW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGlkID0gdXRpbC5nZW5HVUlEKCk7XHJcbiAgICBwcm9ncmFtS2V5Q2FjaGVba2V5XSA9IGlkO1xyXG4gICAgcmV0dXJuIGlkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBSZW5kZXJMaXN0KCkge1xyXG5cclxuICAgIHRoaXMub3BhcXVlID0gW107XHJcbiAgICB0aGlzLnRyYW5zcGFyZW50ID0gW107XHJcblxyXG4gICAgdGhpcy5fb3BhcXVlQ291bnQgPSAwO1xyXG4gICAgdGhpcy5fdHJhbnNwYXJlbnRDb3VudCA9IDA7XHJcbn1cclxuXHJcblJlbmRlckxpc3QucHJvdG90eXBlLnN0YXJ0Q291bnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9vcGFxdWVDb3VudCA9IDA7XHJcbiAgICB0aGlzLl90cmFuc3BhcmVudENvdW50ID0gMDtcclxufTtcclxuXHJcblJlbmRlckxpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChvYmplY3QsIGlzVHJhbnNwYXJlbnQpIHtcclxuICAgIGlmIChpc1RyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgdGhpcy50cmFuc3BhcmVudFt0aGlzLl90cmFuc3BhcmVudENvdW50KytdID0gb2JqZWN0O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vcGFxdWVbdGhpcy5fb3BhcXVlQ291bnQrK10gPSBvYmplY3Q7XHJcbiAgICB9XHJcbn07XHJcblxyXG5SZW5kZXJMaXN0LnByb3RvdHlwZS5lbmRDb3VudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMudHJhbnNwYXJlbnQubGVuZ3RoID0gdGhpcy5fdHJhbnNwYXJlbnRDb3VudDtcclxuICAgIHRoaXMub3BhcXVlLmxlbmd0aCA9IHRoaXMuX29wYXF1ZUNvdW50O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IGNsYXkuU2NlbmUuUmVuZGVyTGlzdFxyXG4gKiBAcHJvcGVydHkge0FycmF5LjxjbGF5LlJlbmRlcmFibGU+fSBvcGFxdWVcclxuICogQHByb3BlcnR5IHtBcnJheS48Y2xheS5SZW5kZXJhYmxlPn0gdHJhbnNwYXJlbnRcclxuICovXHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuU2NlbmVcclxuICogQGV4dGVuZHMgY2xheS5Ob2RlXHJcbiAqL1xyXG52YXIgU2NlbmUgPSBOb2RlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlNjZW5lIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogR2xvYmFsIG1hdGVyaWFsIG9mIHNjZW5lXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTWF0ZXJpYWx9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWF0ZXJpYWw6IG51bGwsXHJcblxyXG4gICAgICAgIGxpZ2h0czogW10sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNjZW5lIGJvdW5kaW5nIGJveCBpbiB2aWV3IHNwYWNlLlxyXG4gICAgICAgICAqIFVzZWQgd2hlbiBjYW1lcmEgbmVlZHMgdG8gYWR1anN0IHRoZSBuZWFyIGFuZCBmYXIgcGxhbmUgYXV0b21hdGljYWxseVxyXG4gICAgICAgICAqIHNvIHRoYXQgdGhlIHZpZXcgZnJ1c3R1bSBjb250YWlucyB0aGUgdmlzaWJsZSBvYmplY3RzIGFzIHRpZ2h0bHkgYXMgcG9zc2libGUuXHJcbiAgICAgICAgICogTm90aWNlOlxyXG4gICAgICAgICAqICBJdCBpcyB1cGRhdGVkIGFmdGVyIHJlbmRlcmluZyAoaW4gdGhlIHN0ZXAgb2YgZnJ1c3R1bSBjdWxsaW5nIHBhc3NpbmdseSkuIFNvIG1heSBiZSBub3Qgc28gYWNjdXJhdGUsIGJ1dCBzYXZlcyBhIGxvdCBvZiBjYWxjdWxhdGlvblxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdmlld0JvdW5kaW5nQm94TGFzdEZyYW1lOiBuZXcgQm91bmRpbmdCb3goKSxcclxuXHJcbiAgICAgICAgLy8gVW5pZm9ybXMgZm9yIHNoYWRvdyBtYXAuXHJcbiAgICAgICAgc2hhZG93VW5pZm9ybXM6IHt9LFxyXG5cclxuICAgICAgICBfY2FtZXJhTGlzdDogW10sXHJcblxyXG4gICAgICAgIC8vIFByb3BlcnRpZXMgdG8gc2F2ZSB0aGUgbGlnaHQgaW5mb3JtYXRpb24gaW4gdGhlIHNjZW5lXHJcbiAgICAgICAgLy8gV2lsbCBiZSBzZXQgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxyXG4gICAgICAgIF9saWdodFVuaWZvcm1zOiB7fSxcclxuXHJcbiAgICAgICAgX3ByZXZpb3VzTGlnaHROdW1iZXI6IHt9LFxyXG5cclxuICAgICAgICBfbGlnaHROdW1iZXI6IHtcclxuICAgICAgICAgICAgLy8gZ3JvdXBJZDoge1xyXG4gICAgICAgICAgICAgICAgLy8gUE9JTlRfTElHSFQ6IDAsXHJcbiAgICAgICAgICAgICAgICAvLyBESVJFQ1RJT05BTF9MSUdIVDogMCxcclxuICAgICAgICAgICAgICAgIC8vIFNQT1RfTElHSFQ6IDAsXHJcbiAgICAgICAgICAgICAgICAvLyBBTUJJRU5UX0xJR0hUOiAwLFxyXG4gICAgICAgICAgICAgICAgLy8gQU1CSUVOVF9TSF9MSUdIVDogMFxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2xpZ2h0UHJvZ3JhbUtleXM6IHt9LFxyXG5cclxuICAgICAgICBfbm9kZVJlcG9zaXRvcnk6IHt9LFxyXG5cclxuICAgICAgICBfcmVuZGVyTGlzdHM6IG5ldyBMUlVDYWNoZSgyMClcclxuXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9zY2VuZSA9IHRoaXM7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5TY2VuZS5wcm90b3R5cGUuICovXHJcbntcclxuXHJcbiAgICAvLyBBZGQgbm9kZSB0byBzY2VuZVxyXG4gICAgYWRkVG9TY2VuZTogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbWVyYSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fY2FtZXJhTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0ZvdW5kIG11bHRpcGxlIGNhbWVyYSBpbiBvbmUgc2NlbmUuIFVzZSB0aGUgZmlzdCBvbmUuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fY2FtZXJhTGlzdC5wdXNoKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgTGlnaHQpIHtcclxuICAgICAgICAgICAgdGhpcy5saWdodHMucHVzaChub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5vZGUubmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub2RlUmVwb3NpdG9yeVtub2RlLm5hbWVdID0gbm9kZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFJlbW92ZSBub2RlIGZyb20gc2NlbmVcclxuICAgIHJlbW92ZUZyb21TY2VuZTogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICB2YXIgaWR4O1xyXG4gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgQ2FtZXJhKSB7XHJcbiAgICAgICAgICAgIGlkeCA9IHRoaXMuX2NhbWVyYUxpc3QuaW5kZXhPZihub2RlKTtcclxuICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYW1lcmFMaXN0LnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG5vZGUgaW5zdGFuY2VvZiBMaWdodCkge1xyXG4gICAgICAgICAgICBpZHggPSB0aGlzLmxpZ2h0cy5pbmRleE9mKG5vZGUpO1xyXG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlnaHRzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlLm5hbWUpIHtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX25vZGVSZXBvc2l0b3J5W25vZGUubmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBub2RlIGJ5IG5hbWVcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7Tm9kZX1cclxuICAgICAqIEBERVBSRUNBVEVEXHJcbiAgICAgKi9cclxuICAgIGdldE5vZGU6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVSZXBvc2l0b3J5W25hbWVdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBtYWluIGNhbWVyYSBvZiB0aGUgc2NlbmUuXHJcbiAgICAgKiBAcGFyYW0ge2NsYXlnbC5DYW1lcmF9IGNhbWVyYVxyXG4gICAgICovXHJcbiAgICBzZXRNYWluQ2FtZXJhOiBmdW5jdGlvbiAoY2FtZXJhKSB7XHJcbiAgICAgICAgdmFyIGlkeCA9IHRoaXMuX2NhbWVyYUxpc3QuaW5kZXhPZihjYW1lcmEpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jYW1lcmFMaXN0LnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jYW1lcmFMaXN0LnVuc2hpZnQoY2FtZXJhKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBtYWluIGNhbWVyYSBvZiB0aGUgc2NlbmUuXHJcbiAgICAgKi9cclxuICAgIGdldE1haW5DYW1lcmE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2FtZXJhTGlzdFswXTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TGlnaHRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGlnaHRzO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVMaWdodHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbGlnaHRzID0gdGhpcy5saWdodHM7XHJcbiAgICAgICAgdGhpcy5fcHJldmlvdXNMaWdodE51bWJlciA9IHRoaXMuX2xpZ2h0TnVtYmVyO1xyXG5cclxuICAgICAgICB2YXIgbGlnaHROdW1iZXIgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbGlnaHQgPSBsaWdodHNbaV07XHJcbiAgICAgICAgICAgIGlmIChsaWdodC5pbnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBncm91cCA9IGxpZ2h0Lmdyb3VwO1xyXG4gICAgICAgICAgICBpZiAoIWxpZ2h0TnVtYmVyW2dyb3VwXSkge1xyXG4gICAgICAgICAgICAgICAgbGlnaHROdW1iZXJbZ3JvdXBdID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gVXNlciBjYW4gdXNlIGFueSB0eXBlIG9mIGxpZ2h0XHJcbiAgICAgICAgICAgIGxpZ2h0TnVtYmVyW2dyb3VwXVtsaWdodC50eXBlXSA9IGxpZ2h0TnVtYmVyW2dyb3VwXVtsaWdodC50eXBlXSB8fCAwO1xyXG4gICAgICAgICAgICBsaWdodE51bWJlcltncm91cF1bbGlnaHQudHlwZV0rKztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fbGlnaHROdW1iZXIgPSBsaWdodE51bWJlcjtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgZ3JvdXBJZCBpbiBsaWdodE51bWJlcikge1xyXG4gICAgICAgICAgICB0aGlzLl9saWdodFByb2dyYW1LZXlzW2dyb3VwSWRdID0gZ2V0UHJvZ3JhbUtleShsaWdodE51bWJlcltncm91cElkXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl91cGRhdGVMaWdodFVuaWZvcm1zKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBub2RlIGFuZCBpdCdzIGNoaWxkcmVuLCBpbmNsdWRpbmcgbWVzaCwgY2FtZXJhLCBsaWdodCwgZXRjLlxyXG4gICAgICogVW5saWtlIHVzaW5nIGBOb2RlI2Nsb25lYC4gSXQgd2lsbCBjbG9uZSBza2VsZXRvbiBhbmQgcmVtYXAgdGhlIGpvaW50cy4gTWF0ZXJpYWwgd2lsbCBhbHNvIGJlIGNsb25lZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICBjbG9uZU5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgdmFyIG5ld05vZGUgPSBub2RlLmNsb25lKCk7XHJcbiAgICAgICAgdmFyIGNsb25lZE5vZGVzTWFwID0ge307XHJcbiAgICAgICAgZnVuY3Rpb24gYnVpbGROb2Rlc01hcChzTm9kZSwgdE5vZGUpIHtcclxuICAgICAgICAgICAgY2xvbmVkTm9kZXNNYXBbc05vZGUuX191aWRfX10gPSB0Tm9kZTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc05vZGUuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc0NoaWxkID0gc05vZGUuX2NoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRDaGlsZCA9IHROb2RlLl9jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgIGJ1aWxkTm9kZXNNYXAoc0NoaWxkLCB0Q2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJ1aWxkTm9kZXNNYXAobm9kZSwgbmV3Tm9kZSk7XHJcblxyXG4gICAgICAgIG5ld05vZGUudHJhdmVyc2UoZnVuY3Rpb24gKG5ld0NoaWxkKSB7XHJcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5za2VsZXRvbikge1xyXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQuc2tlbGV0b24gPSBuZXdDaGlsZC5za2VsZXRvbi5jbG9uZShjbG9uZWROb2Rlc01hcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdDaGlsZC5tYXRlcmlhbCA9IG5ld0NoaWxkLm1hdGVyaWFsLmNsb25lKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ld05vZGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhdmVyc2UgdGhlIHNjZW5lIGFuZCBhZGQgdGhlIHJlbmRlcmFibGUgb2JqZWN0IHRvIHRoZSByZW5kZXIgbGlzdC5cclxuICAgICAqIEl0IG5lZWRzIGNhbWVyYSBmb3IgdGhlIGZydXN0dW0gY3VsbGluZy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdXBkYXRlU2NlbmVCb3VuZGluZ0JveFxyXG4gICAgICogQHJldHVybiB7Y2xheS5TY2VuZS5SZW5kZXJMaXN0fVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVSZW5kZXJMaXN0OiBmdW5jdGlvbiAoY2FtZXJhLCB1cGRhdGVTY2VuZUJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgdmFyIGlkID0gY2FtZXJhLl9fdWlkX187XHJcbiAgICAgICAgdmFyIHJlbmRlckxpc3QgPSB0aGlzLl9yZW5kZXJMaXN0cy5nZXQoaWQpO1xyXG4gICAgICAgIGlmICghcmVuZGVyTGlzdCkge1xyXG4gICAgICAgICAgICByZW5kZXJMaXN0ID0gbmV3IFJlbmRlckxpc3QoKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyTGlzdHMucHV0KGlkLCByZW5kZXJMaXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyTGlzdC5zdGFydENvdW50KCk7XHJcblxyXG4gICAgICAgIGlmICh1cGRhdGVTY2VuZUJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lLm1pbi5zZXQoSW5maW5pdHksIEluZmluaXR5LCBJbmZpbml0eSk7XHJcbiAgICAgICAgICAgIHRoaXMudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lLm1heC5zZXQoLUluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc2NlbmVNYXRlcmlhbFRyYW5zcGFyZW50ID0gdGhpcy5tYXRlcmlhbCAmJiB0aGlzLm1hdGVyaWFsLnRyYW5zcGFyZW50IHx8IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2RvVXBkYXRlUmVuZGVyTGlzdCh0aGlzLCBjYW1lcmEsIHNjZW5lTWF0ZXJpYWxUcmFuc3BhcmVudCwgcmVuZGVyTGlzdCwgdXBkYXRlU2NlbmVCb3VuZGluZ0JveCk7XHJcblxyXG4gICAgICAgIHJlbmRlckxpc3QuZW5kQ291bnQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlbmRlckxpc3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHJlbmRlciBsaXN0LiBVc2VkIGFmdGVyIHtAbGluayBjbGF5LlNjZW5lI3VwZGF0ZVJlbmRlckxpc3R9XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuU2NlbmUuUmVuZGVyTGlzdH1cclxuICAgICAqL1xyXG4gICAgZ2V0UmVuZGVyTGlzdDogZnVuY3Rpb24gKGNhbWVyYSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJMaXN0cy5nZXQoY2FtZXJhLl9fdWlkX18pO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZG9VcGRhdGVSZW5kZXJMaXN0OiBmdW5jdGlvbiAocGFyZW50LCBjYW1lcmEsIHNjZW5lTWF0ZXJpYWxUcmFuc3BhcmVudCwgcmVuZGVyTGlzdCwgdXBkYXRlU2NlbmVCb3VuZGluZ0JveCkge1xyXG4gICAgICAgIGlmIChwYXJlbnQuaW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETyBPcHRpbWl6ZVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50Ll9jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBwYXJlbnQuX2NoaWxkcmVuW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoaWxkLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBGcnVzdHVtIGN1bGxpbmdcclxuICAgICAgICAgICAgICAgIHZhciB3b3JsZE0gPSBjaGlsZC5pc1NraW5uZWRNZXNoKCkgPyBJREVOVElUWSA6IGNoaWxkLndvcmxkVHJhbnNmb3JtLmFycmF5O1xyXG4gICAgICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gY2hpbGQuZ2VvbWV0cnk7XHJcblxyXG4gICAgICAgICAgICAgICAgbWF0NC5tdWx0aXBseUFmZmluZShXT1JMRFZJRVcsIGNhbWVyYS52aWV3TWF0cml4LmFycmF5LCB3b3JsZE0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZVNjZW5lQm91bmRpbmdCb3ggJiYgIWdlb21ldHJ5LmJvdW5kaW5nQm94IHx8ICF0aGlzLmlzRnJ1c3R1bUN1bGxlZChjaGlsZCwgY2FtZXJhLCBXT1JMRFZJRVcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGlzdC5hZGQoY2hpbGQsIGNoaWxkLm1hdGVyaWFsLnRyYW5zcGFyZW50IHx8IHNjZW5lTWF0ZXJpYWxUcmFuc3BhcmVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNoaWxkLl9jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kb1VwZGF0ZVJlbmRlckxpc3QoY2hpbGQsIGNhbWVyYSwgc2NlbmVNYXRlcmlhbFRyYW5zcGFyZW50LCByZW5kZXJMaXN0LCB1cGRhdGVTY2VuZUJvdW5kaW5nQm94KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBhbiBzY2VuZSBvYmplY3QgaXMgY3VsbGVkIGJ5IGNhbWVyYSBmcnVzdHVtXHJcbiAgICAgKlxyXG4gICAgICogT2JqZWN0IGNhbiBiZSBhIHJlbmRlcmFibGUgb3IgYSBsaWdodFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBvYmplY3RcclxuICAgICAqIEBwYXJhbSB7Y2xheS5DYW1lcmF9IGNhbWVyYVxyXG4gICAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gd29ybGRWaWV3TWF0IHJlcHJlc2VudGVkIHdpdGggYXJyYXlcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHByb2plY3Rpb25NYXQgcmVwcmVzZW50ZWQgd2l0aCBhcnJheVxyXG4gICAgICovXHJcbiAgICBpc0ZydXN0dW1DdWxsZWQ6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gRnJ1c3R1bSBjdWxsaW5nXHJcbiAgICAgICAgLy8gaHR0cDovL3d3dy5jc2UuY2hhbG1lcnMuc2UvfnVmZmUvdmZjX2Jib3gucGRmXHJcbiAgICAgICAgdmFyIGN1bGxpbmdCb3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHZhciBjdWxsaW5nTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBjYW1lcmEsIHdvcmxkVmlld01hdCkge1xyXG4gICAgICAgICAgICAvLyBCb3VuZGluZyBib3ggY2FuIGJlIGEgcHJvcGVydHkgb2Ygb2JqZWN0KGxpa2UgbGlnaHQpIG9yIHJlbmRlcmFibGUuZ2VvbWV0cnlcclxuICAgICAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgICAgICB2YXIgZ2VvQkJveCA9IG9iamVjdC5ib3VuZGluZ0JveDtcclxuICAgICAgICAgICAgaWYgKCFnZW9CQm94KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnNrZWxldG9uICYmIG9iamVjdC5za2VsZXRvbi5ib3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdlb0JCb3ggPSBvYmplY3Quc2tlbGV0b24uYm91bmRpbmdCb3g7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBnZW9CQm94ID0gb2JqZWN0Lmdlb21ldHJ5LmJvdW5kaW5nQm94O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWdlb0JCb3gpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY3VsbGluZ01hdHJpeC5hcnJheSA9IHdvcmxkVmlld01hdDtcclxuICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94LnRyYW5zZm9ybUZyb20oZ2VvQkJveCwgY3VsbGluZ01hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICAvLyBQYXNzaW5nbHkgdXBkYXRlIHRoZSBzY2VuZSBib3VuZGluZyBib3hcclxuICAgICAgICAgICAgLy8gRklYTUUgZXhjbHVkZSB2ZXJ5IGxhcmdlIG1lc2ggbGlrZSBncm91bmQgcGxhbmUgb3IgdGVycmFpbiA/XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIE9ubHkgcmVuZGVyZXJhYmxlIHdoaWNoIGNhc3Qgc2hhZG93ID9cclxuXHJcbiAgICAgICAgICAgIC8vIEZJWE1FIGJvdW5kaW5nQm94IGJlY29tZXMgbXVjaCBsYXJnZXIgYWZ0ZXIgdHJhbnNmb3JtZC5cclxuICAgICAgICAgICAgaWYgKG9iamVjdC5jYXN0U2hhZG93KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS51bmlvbihjdWxsaW5nQm91bmRpbmdCb3gpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIElnbm9yZSBmcnVzdHVtIGN1bGxpbmcgaWYgb2JqZWN0IGlzIHNraW5uZWQgbWVzaC5cclxuICAgICAgICAgICAgaWYgKG9iamVjdC5mcnVzdHVtQ3VsbGluZykgIHtcclxuICAgICAgICAgICAgICAgIGlmICghY3VsbGluZ0JvdW5kaW5nQm94LmludGVyc2VjdEJvdW5kaW5nQm94KGNhbWVyYS5mcnVzdHVtLmJvdW5kaW5nQm94KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGN1bGxpbmdNYXRyaXguYXJyYXkgPSBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5hcnJheTtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBjdWxsaW5nQm91bmRpbmdCb3gubWF4LmFycmF5WzJdID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGN1bGxpbmdCb3VuZGluZ0JveC5taW4uYXJyYXlbMl0gPCAwXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBDbGlwIGluIHRoZSBuZWFyIHBsYW5lXHJcbiAgICAgICAgICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94Lm1heC5hcnJheVsyXSA9IC0xZS0yMDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjdWxsaW5nQm91bmRpbmdCb3guYXBwbHlQcm9qZWN0aW9uKGN1bGxpbmdNYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBtaW4gPSBjdWxsaW5nQm91bmRpbmdCb3gubWluLmFycmF5O1xyXG4gICAgICAgICAgICAgICAgdmFyIG1heCA9IGN1bGxpbmdCb3VuZGluZ0JveC5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIG1heFswXSA8IC0xIHx8IG1pblswXSA+IDFcclxuICAgICAgICAgICAgICAgICAgICB8fCBtYXhbMV0gPCAtMSB8fCBtaW5bMV0gPiAxXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgbWF4WzJdIDwgLTEgfHwgbWluWzJdID4gMVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICBfdXBkYXRlTGlnaHRVbmlmb3JtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsaWdodHMgPSB0aGlzLmxpZ2h0cztcclxuICAgICAgICAvLyBQdXQgdGhlIGxpZ2h0IGNhc3Qgc2hhZG93IGJlZm9yZSB0aGUgbGlnaHQgbm90IGNhc3Qgc2hhZG93XHJcbiAgICAgICAgbGlnaHRzLnNvcnQobGlnaHRTb3J0RnVuYyk7XHJcblxyXG4gICAgICAgIHZhciBsaWdodFVuaWZvcm1zID0gdGhpcy5fbGlnaHRVbmlmb3JtcztcclxuICAgICAgICBmb3IgKHZhciBncm91cCBpbiBsaWdodFVuaWZvcm1zKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiBsaWdodFVuaWZvcm1zW2dyb3VwXSkge1xyXG4gICAgICAgICAgICAgICAgbGlnaHRVbmlmb3Jtc1tncm91cF1bc3ltYm9sXS52YWx1ZS5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgbGlnaHQgPSBsaWdodHNbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAobGlnaHQuaW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGdyb3VwID0gbGlnaHQuZ3JvdXA7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gbGlnaHQudW5pZm9ybVRlbXBsYXRlcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHVuaWZvcm1UcGwgPSBsaWdodC51bmlmb3JtVGVtcGxhdGVzW3N5bWJvbF07XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB1bmlmb3JtVHBsLnZhbHVlKGxpZ2h0KTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWxpZ2h0VW5pZm9ybXNbZ3JvdXBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGlnaHRVbmlmb3Jtc1tncm91cF0gPSB7fTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghbGlnaHRVbmlmb3Jtc1tncm91cF1bc3ltYm9sXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0VW5pZm9ybXNbZ3JvdXBdW3N5bWJvbF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogW11cclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIGx1ID0gbGlnaHRVbmlmb3Jtc1tncm91cF1bc3ltYm9sXTtcclxuICAgICAgICAgICAgICAgIGx1LnR5cGUgPSB1bmlmb3JtVHBsLnR5cGUgKyAndic7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHVuaWZvcm1UcGwudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzFpJzpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICcxZic6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGx1LnZhbHVlLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICcyZic6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnM2YnOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzRmJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWx1ZS5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbHUudmFsdWUucHVzaCh2YWx1ZVtqXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVW5rb3duIGxpZ2h0IHVuaWZvcm0gdHlwZSAnICsgdW5pZm9ybVRwbC50eXBlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TGlnaHRHcm91cHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbGlnaHRHcm91cHMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBncm91cElkIGluIHRoaXMuX2xpZ2h0TnVtYmVyKSB7XHJcbiAgICAgICAgICAgIGxpZ2h0R3JvdXBzLnB1c2goZ3JvdXBJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaWdodEdyb3VwcztcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TnVtYmVyQ2hhbmdlZExpZ2h0R3JvdXBzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0R3JvdXBzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgZ3JvdXBJZCBpbiB0aGlzLl9saWdodE51bWJlcikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0xpZ2h0TnVtYmVyQ2hhbmdlZChncm91cElkKSkge1xyXG4gICAgICAgICAgICAgICAgbGlnaHRHcm91cHMucHVzaChncm91cElkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbGlnaHRHcm91cHM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIERldGVybWluZSBpZiBsaWdodCBncm91cCBpcyBkaWZmZXJlbnQgd2l0aCBzaW5jZSBsYXN0IGZyYW1lXHJcbiAgICAvLyBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHVwZGF0ZSBzaGFkZXIgYW5kIHNjZW5lJ3MgdW5pZm9ybXMgaW4gUmVuZGVyZXIucmVuZGVyXHJcbiAgICBpc0xpZ2h0TnVtYmVyQ2hhbmdlZDogZnVuY3Rpb24gKGxpZ2h0R3JvdXApIHtcclxuICAgICAgICB2YXIgcHJldkxpZ2h0TnVtYmVyID0gdGhpcy5fcHJldmlvdXNMaWdodE51bWJlcjtcclxuICAgICAgICB2YXIgY3VycmVudExpZ2h0TnVtYmVyID0gdGhpcy5fbGlnaHROdW1iZXI7XHJcbiAgICAgICAgLy8gUEVORElORyBQZXJmb3JtYW5jZVxyXG4gICAgICAgIGZvciAodmFyIHR5cGUgaW4gY3VycmVudExpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdKSB7XHJcbiAgICAgICAgICAgIGlmICghcHJldkxpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY3VycmVudExpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdW3R5cGVdICE9PSBwcmV2TGlnaHROdW1iZXJbbGlnaHRHcm91cF1bdHlwZV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIHR5cGUgaW4gcHJldkxpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdKSB7XHJcbiAgICAgICAgICAgIGlmICghY3VycmVudExpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY3VycmVudExpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdW3R5cGVdICE9PSBwcmV2TGlnaHROdW1iZXJbbGlnaHRHcm91cF1bdHlwZV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TGlnaHRzTnVtYmVyczogZnVuY3Rpb24gKGxpZ2h0R3JvdXApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGlnaHROdW1iZXJbbGlnaHRHcm91cF07XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFByb2dyYW1LZXk6IGZ1bmN0aW9uIChsaWdodEdyb3VwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0UHJvZ3JhbUtleXNbbGlnaHRHcm91cF07XHJcbiAgICB9LFxyXG5cclxuICAgIHNldExpZ2h0VW5pZm9ybXM6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gc2V0VW5pZm9ybXModW5pZm9ybXMsIHByb2dyYW0sIHJlbmRlcmVyKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiB1bmlmb3Jtcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGx1ID0gdW5pZm9ybXNbc3ltYm9sXTtcclxuICAgICAgICAgICAgICAgIGlmIChsdS50eXBlID09PSAndHYnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9ncmFtLmhhc1VuaWZvcm0oc3ltYm9sKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRleFNsb3RzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsdS52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IGx1LnZhbHVlW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2xvdCA9IHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdChyZW5kZXJlciwgdGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleFNsb3RzLnB1c2goc2xvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShyZW5kZXJlci5nbCwgJzFpdicsIHN5bWJvbCwgdGV4U2xvdHMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKHJlbmRlcmVyLmdsLCBsdS50eXBlLCBzeW1ib2wsIGx1LnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChwcm9ncmFtLCBsaWdodEdyb3VwLCByZW5kZXJlcikge1xyXG4gICAgICAgICAgICBzZXRVbmlmb3Jtcyh0aGlzLl9saWdodFVuaWZvcm1zW2xpZ2h0R3JvdXBdLCBwcm9ncmFtLCByZW5kZXJlcik7XHJcbiAgICAgICAgICAgIC8vIFNldCBzaGFkb3dzXHJcbiAgICAgICAgICAgIHNldFVuaWZvcm1zKHRoaXMuc2hhZG93VW5pZm9ybXMsIHByb2dyYW0sIHJlbmRlcmVyKTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2Ugc2VsZiwgY2xlYXIgYWxsIHRoZSBzY2VuZSBvYmplY3RzXHJcbiAgICAgKiBCdXQgcmVzb3VyY2VzIG9mIGdsIGxpa2UgdGV4dXR1cmUsIHNoYWRlciB3aWxsIG5vdCBiZSBkaXNwb3NlZC5cclxuICAgICAqIE1vc3RseSB5b3Ugc2hvdWxkIHVzZSBkaXNwb3NlU2NlbmUgbWV0aG9kIGluIFJlbmRlcmVyIHRvIGRvIGRpc3Bvc2UuXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9vcGFxdWVMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5fdHJhbnNwYXJlbnRMaXN0ID0gW107XHJcblxyXG4gICAgICAgIHRoaXMubGlnaHRzID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuX2xpZ2h0VW5pZm9ybXMgPSB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGlnaHROdW1iZXIgPSB7fTtcclxuICAgICAgICB0aGlzLl9ub2RlUmVwb3NpdG9yeSA9IHt9O1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmZ1bmN0aW9uIGxpZ2h0U29ydEZ1bmMoYSwgYikge1xyXG4gICAgaWYgKGIuY2FzdFNoYWRvdyAmJiAhYS5jYXN0U2hhZG93KSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNjZW5lO1xyXG4iLCJ2YXIgRElSVFlfUFJFRklYID0gJ19fZHRfXyc7XHJcblxyXG52YXIgQ2FjaGUgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdGhpcy5fY29udGV4dElkID0gMDtcclxuXHJcbiAgICB0aGlzLl9jYWNoZXMgPSBbXTtcclxuXHJcbiAgICB0aGlzLl9jb250ZXh0ID0ge307XHJcbn07XHJcblxyXG5DYWNoZS5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgdXNlOiBmdW5jdGlvbiAoY29udGV4dElkLCBkb2N1bWVudFNjaGVtYSkge1xyXG4gICAgICAgIHZhciBjYWNoZXMgPSB0aGlzLl9jYWNoZXM7XHJcbiAgICAgICAgaWYgKCFjYWNoZXNbY29udGV4dElkXSkge1xyXG4gICAgICAgICAgICBjYWNoZXNbY29udGV4dElkXSA9IHt9O1xyXG5cclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50U2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZXNbY29udGV4dElkXSA9IGRvY3VtZW50U2NoZW1hKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY29udGV4dElkID0gY29udGV4dElkO1xyXG5cclxuICAgICAgICB0aGlzLl9jb250ZXh0ID0gY2FjaGVzW2NvbnRleHRJZF07XHJcbiAgICB9LFxyXG5cclxuICAgIHB1dDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9jb250ZXh0W2tleV0gPSB2YWx1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHRba2V5XTtcclxuICAgIH0sXHJcblxyXG4gICAgZGlydHk6IGZ1bmN0aW9uIChmaWVsZCkge1xyXG4gICAgICAgIGZpZWxkID0gZmllbGQgfHwgJyc7XHJcbiAgICAgICAgdmFyIGtleSA9IERJUlRZX1BSRUZJWCArIGZpZWxkO1xyXG4gICAgICAgIHRoaXMucHV0KGtleSwgdHJ1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGRpcnR5QWxsOiBmdW5jdGlvbiAoZmllbGQpIHtcclxuICAgICAgICBmaWVsZCA9IGZpZWxkIHx8ICcnO1xyXG4gICAgICAgIHZhciBrZXkgPSBESVJUWV9QUkVGSVggKyBmaWVsZDtcclxuICAgICAgICB2YXIgY2FjaGVzID0gdGhpcy5fY2FjaGVzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FjaGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChjYWNoZXNbaV0pIHtcclxuICAgICAgICAgICAgICAgIGNhY2hlc1tpXVtrZXldID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZnJlc2g6IGZ1bmN0aW9uIChmaWVsZCkge1xyXG4gICAgICAgIGZpZWxkID0gZmllbGQgfHwgJyc7XHJcbiAgICAgICAgdmFyIGtleSA9IERJUlRZX1BSRUZJWCArIGZpZWxkO1xyXG4gICAgICAgIHRoaXMucHV0KGtleSwgZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbiAgICBmcmVzaEFsbDogZnVuY3Rpb24gKGZpZWxkKSB7XHJcbiAgICAgICAgZmllbGQgPSBmaWVsZCB8fCAnJztcclxuICAgICAgICB2YXIga2V5ID0gRElSVFlfUFJFRklYICsgZmllbGQ7XHJcbiAgICAgICAgdmFyIGNhY2hlcyA9IHRoaXMuX2NhY2hlcztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhY2hlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoY2FjaGVzW2ldKSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZXNbaV1ba2V5XSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBpc0RpcnR5OiBmdW5jdGlvbiAoZmllbGQpIHtcclxuICAgICAgICBmaWVsZCA9IGZpZWxkIHx8ICcnO1xyXG4gICAgICAgIHZhciBrZXkgPSBESVJUWV9QUkVGSVggKyBmaWVsZDtcclxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuX2NvbnRleHQ7XHJcbiAgICAgICAgcmV0dXJuICAhY29udGV4dC5oYXNPd25Qcm9wZXJ0eShrZXkpXHJcbiAgICAgICAgICAgIHx8IGNvbnRleHRba2V5XSA9PT0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZGVsZXRlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHRJZCkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9jYWNoZXNbY29udGV4dElkXTtcclxuICAgICAgICB0aGlzLl9jb250ZXh0ID0ge307XHJcbiAgICB9LFxyXG5cclxuICAgIGRlbGV0ZTogZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9jb250ZXh0W2tleV07XHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyQWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fY2FjaGVzID0ge307XHJcbiAgICB9LFxyXG5cclxuICAgIGdldENvbnRleHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dDtcclxuICAgIH0sXHJcblxyXG4gICAgZWFjaENvbnRleHQgOiBmdW5jdGlvbiAoY2IsIGNvbnRleHQpIHtcclxuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuX2NhY2hlcyk7XHJcbiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgY2IgJiYgY2IuY2FsbChjb250ZXh0LCBrZXkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBtaXNzOiBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuICEgdGhpcy5fY29udGV4dC5oYXNPd25Qcm9wZXJ0eShrZXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuQ2FjaGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2FjaGU7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDYWNoZTtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgQ2FjaGUgZnJvbSAnLi9jb3JlL0NhY2hlJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxuXHJcbmZ1bmN0aW9uIGdldEFycmF5Q3RvckJ5VHlwZSAodHlwZSkge1xyXG4gICAgcmV0dXJuICh7XHJcbiAgICAgICAgJ2J5dGUnOiB2ZW5kb3IuSW50OEFycmF5LFxyXG4gICAgICAgICd1Ynl0ZSc6IHZlbmRvci5VaW50OEFycmF5LFxyXG4gICAgICAgICdzaG9ydCc6IHZlbmRvci5JbnQxNkFycmF5LFxyXG4gICAgICAgICd1c2hvcnQnOiB2ZW5kb3IuVWludDE2QXJyYXlcclxuICAgIH0pW3R5cGVdIHx8IHZlbmRvci5GbG9hdDMyQXJyYXk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1ha2VBdHRyS2V5KGF0dHJOYW1lKSB7XHJcbiAgICByZXR1cm4gJ2F0dHJfJyArIGF0dHJOYW1lO1xyXG59XHJcbi8qKlxyXG4gKiBHZW9tZXRyeUJhc2UgYXR0cmlidXRlXHJcbiAqIEBhbGlhcyBjbGF5Lkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGVcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqL1xyXG5mdW5jdGlvbiBBdHRyaWJ1dGUobmFtZSwgdHlwZSwgc2l6ZSwgc2VtYW50aWMpIHtcclxuICAgIC8qKlxyXG4gICAgICogQXR0cmlidXRlIG5hbWVcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAvKipcclxuICAgICAqIEF0dHJpYnV0ZSB0eXBlXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyBgJ2J5dGUnYFxyXG4gICAgICogICsgYCd1Ynl0ZSdgXHJcbiAgICAgKiAgKyBgJ3Nob3J0J2BcclxuICAgICAqICArIGAndXNob3J0J2BcclxuICAgICAqICArIGAnZmxvYXQnYCBNb3N0IGNvbW1vbmx5IHVzZWQuXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBTaXplIG9mIGF0dHJpYnV0ZSBjb21wb25lbnQuIDEgLSA0LlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5zaXplID0gc2l6ZTtcclxuICAgIC8qKlxyXG4gICAgICogU2VtYW50aWMgb2YgdGhpcyBhdHRyaWJ1dGUuXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyBgJ1BPU0lUSU9OJ2BcclxuICAgICAqICArIGAnTk9STUFMJ2BcclxuICAgICAqICArIGAnQklOT1JNQUwnYFxyXG4gICAgICogICsgYCdUQU5HRU5UJ2BcclxuICAgICAqICArIGAnVEVYQ09PUkQnYFxyXG4gICAgICogICsgYCdURVhDT09SRF8wJ2BcclxuICAgICAqICArIGAnVEVYQ09PUkRfMSdgXHJcbiAgICAgKiAgKyBgJ0NPTE9SJ2BcclxuICAgICAqICArIGAnSk9JTlQnYFxyXG4gICAgICogICsgYCdXRUlHSFQnYFxyXG4gICAgICpcclxuICAgICAqIEluIHNoYWRlciwgYXR0cmlidXRlIHdpdGggc2FtZSBzZW1hbnRpYyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgbWFwcGVkLiBGb3IgZXhhbXBsZTpcclxuICAgICAqIGBgYGdsc2xcclxuICAgICAqIGF0dHJpYnV0ZSB2ZWMzIHBvczogUE9TSVRJT05cclxuICAgICAqIGBgYFxyXG4gICAgICogd2lsbCB1c2UgdGhlIGF0dHJpYnV0ZSB2YWx1ZSB3aXRoIHNlbWFudGljIFBPU0lUSU9OIGluIGdlb21ldHJ5LCBubyBtYXR0ZXIgd2hhdCBuYW1lIGl0IHVzZWQuXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnNlbWFudGljID0gc2VtYW50aWMgfHwgJyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWx1ZSBvZiB0aGUgYXR0cmlidXRlLlxyXG4gICAgICogQHR5cGUge1R5cGVkQXJyYXl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG5cclxuICAgIC8vIEluaXQgZ2V0dGVyIHNldHRlclxyXG4gICAgc3dpdGNoIChzaXplKSB7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICB0aGlzLmdldCA9IGZ1bmN0aW9uIChpZHgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlW2lkeF07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gZnVuY3Rpb24gKGlkeCwgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbaWR4XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvLyBDb3B5IGZyb20gc291cmNlIHRvIHRhcmdldFxyXG4gICAgICAgICAgICB0aGlzLmNvcHkgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVbdGFyZ2V0XSA9IHRoaXMudmFsdWVbdGFyZ2V0XTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICB0aGlzLmdldCA9IGZ1bmN0aW9uIChpZHgsIG91dCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBvdXRbMF0gPSBhcnJbaWR4ICogMl07XHJcbiAgICAgICAgICAgICAgICBvdXRbMV0gPSBhcnJbaWR4ICogMiArIDFdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZXQgPSBmdW5jdGlvbiAoaWR4LCB2YWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeCAqIDJdID0gdmFsWzBdO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeCAqIDIgKyAxXSA9IHZhbFsxXTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5jb3B5ID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIHNvdXJjZSAqPSAyO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ICo9IDI7XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0XSA9IGFycltzb3VyY2VdO1xyXG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldCArIDFdID0gYXJyW3NvdXJjZSArIDFdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24gKGlkeCwgb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4MyA9IGlkeCAqIDM7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIG91dFswXSA9IGFycltpZHgzXTtcclxuICAgICAgICAgICAgICAgIG91dFsxXSA9IGFycltpZHgzICsgMV07XHJcbiAgICAgICAgICAgICAgICBvdXRbMl0gPSBhcnJbaWR4MyArIDJdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZXQgPSBmdW5jdGlvbiAoaWR4LCB2YWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpZHgzID0gaWR4ICogMztcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeDNdID0gdmFsWzBdO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeDMgKyAxXSA9IHZhbFsxXTtcclxuICAgICAgICAgICAgICAgIGFycltpZHgzICsgMl0gPSB2YWxbMl07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuY29weSA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2UgKj0gMztcclxuICAgICAgICAgICAgICAgIHRhcmdldCAqPSAzO1xyXG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldF0gPSBhcnJbc291cmNlXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAxXSA9IGFycltzb3VyY2UgKyAxXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAyXSA9IGFycltzb3VyY2UgKyAyXTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICB0aGlzLmdldCA9IGZ1bmN0aW9uIChpZHgsIG91dCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4NCA9IGlkeCAqIDQ7XHJcbiAgICAgICAgICAgICAgICBvdXRbMF0gPSBhcnJbaWR4NF07XHJcbiAgICAgICAgICAgICAgICBvdXRbMV0gPSBhcnJbaWR4NCArIDFdO1xyXG4gICAgICAgICAgICAgICAgb3V0WzJdID0gYXJyW2lkeDQgKyAyXTtcclxuICAgICAgICAgICAgICAgIG91dFszXSA9IGFycltpZHg0ICsgM107XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNldCA9IGZ1bmN0aW9uIChpZHgsIHZhbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4NCA9IGlkeCAqIDQ7XHJcbiAgICAgICAgICAgICAgICBhcnJbaWR4NF0gPSB2YWxbMF07XHJcbiAgICAgICAgICAgICAgICBhcnJbaWR4NCArIDFdID0gdmFsWzFdO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeDQgKyAyXSA9IHZhbFsyXTtcclxuICAgICAgICAgICAgICAgIGFycltpZHg0ICsgM10gPSB2YWxbM107XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuY29weSA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2UgKj0gNDtcclxuICAgICAgICAgICAgICAgIHRhcmdldCAqPSA0O1xyXG4gICAgICAgICAgICAgICAgLy8gY29weVdpdGhpbiBpcyBleHRyZW1lbHkgc2xvd1xyXG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldF0gPSBhcnJbc291cmNlXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAxXSA9IGFycltzb3VyY2UgKyAxXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAyXSA9IGFycltzb3VyY2UgKyAyXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAzXSA9IGFycltzb3VyY2UgKyAzXTtcclxuICAgICAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFNldCBpdGVtIHZhbHVlIGF0IGdpdmUgaW5kZXguIFNlY29uZCBwYXJhbWV0ZXIgdmFsIGlzIG51bWJlciBpZiBzaXplIGlzIDFcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBuYW1lIGNsYXkuR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZSNzZXRcclxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gKiBAcGFyYW0ge251bWJlcltdfG51bWJlcn0gdmFsXHJcbiAqIEBleGFtcGxlXHJcbiAqIGdlb21ldHJ5LmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKS5zZXQoMCwgWzEsIDEsIDFdKTtcclxuICovXHJcblxyXG4vKipcclxuICogR2V0IGl0ZW0gdmFsdWUgYXQgZ2l2ZSBpbmRleC4gU2Vjb25kIHBhcmFtZXRlciBvdXQgaXMgbm8gbmVlZCBpZiBzaXplIGlzIDFcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBuYW1lIGNsYXkuR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZSNzZXRcclxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gKiBAcGFyYW0ge251bWJlcltdfSBbb3V0XVxyXG4gKiBAZXhhbXBsZVxyXG4gKiBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJykuZ2V0KDAsIG91dCk7XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEluaXRpYWxpemUgYXR0cmlidXRlIHdpdGggZ2l2ZW4gdmVydGV4IGNvdW50XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBuVmVydGV4XHJcbiAqL1xyXG5BdHRyaWJ1dGUucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoblZlcnRleCkge1xyXG4gICAgaWYgKCF0aGlzLnZhbHVlIHx8IHRoaXMudmFsdWUubGVuZ3RoICE9IG5WZXJ0ZXggKiB0aGlzLnNpemUpIHtcclxuICAgICAgICB2YXIgQXJyYXlDb25zdHJ1Y3RvciA9IGdldEFycmF5Q3RvckJ5VHlwZSh0aGlzLnR5cGUpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihuVmVydGV4ICogdGhpcy5zaXplKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbml0aWFsaXplIGF0dHJpYnV0ZSB3aXRoIGdpdmVuIGFycmF5LiBXaGljaCBjYW4gYmUgMSBkaW1lbnNpb25hbCBvciAyIGRpbWVuc2lvbmFsXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XHJcbiAqIEBleGFtcGxlXHJcbiAqICBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJykuZnJvbUFycmF5KFxyXG4gKiAgICAgIFstMSwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMF1cclxuICogICk7XHJcbiAqICBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJykuZnJvbUFycmF5KFxyXG4gKiAgICAgIFsgWy0xLCAwLCAwXSwgWzEsIDAsIDBdLCBbMCwgMSwgMF0gXVxyXG4gKiAgKTtcclxuICovXHJcbkF0dHJpYnV0ZS5wcm90b3R5cGUuZnJvbUFycmF5ID0gZnVuY3Rpb24gKGFycmF5KSB7XHJcbiAgICB2YXIgQXJyYXlDb25zdHJ1Y3RvciA9IGdldEFycmF5Q3RvckJ5VHlwZSh0aGlzLnR5cGUpO1xyXG4gICAgdmFyIHZhbHVlO1xyXG4gICAgLy8gQ29udmVydCAyZCBhcnJheSB0byBmbGF0XHJcbiAgICBpZiAoYXJyYXlbMF0gJiYgKGFycmF5WzBdLmxlbmd0aCkpIHtcclxuICAgICAgICB2YXIgbiA9IDA7XHJcbiAgICAgICAgdmFyIHNpemUgPSB0aGlzLnNpemU7XHJcbiAgICAgICAgdmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihhcnJheS5sZW5ndGggKiBzaXplKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZVtuKytdID0gYXJyYXlbaV1bal07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YWx1ZSA9IG5ldyBBcnJheUNvbnN0cnVjdG9yKGFycmF5KTtcclxuICAgIH1cclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxufTtcclxuXHJcbkF0dHJpYnV0ZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbihjb3B5VmFsdWUpIHtcclxuICAgIHZhciByZXQgPSBuZXcgQXR0cmlidXRlKHRoaXMubmFtZSwgdGhpcy50eXBlLCB0aGlzLnNpemUsIHRoaXMuc2VtYW50aWMpO1xyXG4gICAgLy8gRklYTUVcclxuICAgIGlmIChjb3B5VmFsdWUpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ3RvZG8nKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXQ7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBBdHRyaWJ1dGVCdWZmZXIobmFtZSwgdHlwZSwgYnVmZmVyLCBzaXplLCBzZW1hbnRpYykge1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIHRoaXMudHlwZSA9IHR5cGU7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcclxuICAgIHRoaXMuc2l6ZSA9IHNpemU7XHJcbiAgICB0aGlzLnNlbWFudGljID0gc2VtYW50aWM7XHJcblxyXG4gICAgLy8gVG8gYmUgc2V0IGluIG1lc2hcclxuICAgIC8vIHN5bWJvbCBpbiB0aGUgc2hhZGVyXHJcbiAgICB0aGlzLnN5bWJvbCA9ICcnO1xyXG5cclxuICAgIC8vIE5lZWRzIHJlbW92ZSBmbGFnXHJcbiAgICB0aGlzLm5lZWRzUmVtb3ZlID0gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEluZGljZXNCdWZmZXIoYnVmZmVyKSB7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcclxuICAgIHRoaXMuY291bnQgPSAwO1xyXG59XHJcblxyXG4vKipcclxuICogQmFzZSBvZiBhbGwgZ2VvbWV0cnkuIFVzZSB7QGxpbmsgY2xheS5HZW9tZXRyeX0gZm9yIGNvbW1vbiAzRCB1c2FnZS5cclxuICogQGNvbnN0cnVjdG9yIGNsYXkuR2VvbWV0cnlCYXNlXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgR2VvbWV0cnlCYXNlID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5HZW9tZXRyeUJhc2UjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBdHRyaWJ1dGVzIG9mIGdlb21ldHJ5LlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3QuPHN0cmluZywgY2xheS5HZW9tZXRyeUJhc2UuQXR0cmlidXRlPn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhdHRyaWJ1dGVzOiB7fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW5kaWNlcyBvZiBnZW9tZXRyeS5cclxuICAgICAgICAgKiBAdHlwZSB7VWludDE2QXJyYXl8VWludDMyQXJyYXl9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5kaWNlczogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSXMgdmVydGljZXMgZGF0YSBkeW5hbWljYWxseSB1cGRhdGVkLlxyXG4gICAgICAgICAqIEF0dHJpYnV0ZXMgdmFsdWUgY2FuJ3QgYmUgY2hhbmdlZCBhZnRlciBmaXJzdCByZW5kZXIgaWYgZHlhbm1pYyBpcyBmYWxzZS5cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkeW5hbWljOiB0cnVlLFxyXG5cclxuICAgICAgICBfZW5hYmxlZEF0dHJpYnV0ZXM6IG51bGwsXHJcblxyXG4gICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAvLyBJbml0IGl0IGhlcmUgdG8gYXZvaWQgZGVvcHRpbWl6YXRpb24gd2hlbiBpdCdzIGFzc2lnbmVkIGluIGFwcGxpY2F0aW9uIGR5bmFtaWNhbGx5XHJcbiAgICAgICAgX191c2VkOiAwXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbigpIHtcclxuICAgIC8vIFVzZSBjYWNoZVxyXG4gICAgdGhpcy5fY2FjaGUgPSBuZXcgQ2FjaGUoKTtcclxuXHJcbiAgICB0aGlzLl9hdHRyaWJ1dGVMaXN0ID0gT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKTtcclxuXHJcbiAgICB0aGlzLl9fdmFvQ2FjaGUgPSB7fTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5Lkdlb21ldHJ5QmFzZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBNYWluIGF0dHJpYnV0ZSB3aWxsIGJlIHVzZWQgdG8gY291bnQgdmVydGV4IG51bWJlclxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgbWFpbkF0dHJpYnV0ZTogJycsXHJcbiAgICAvKipcclxuICAgICAqIFVzZXIgZGVmaW5lZCBwaWNraW5nIGFsZ29yaXRobSBpbnN0ZWFkIG9mIGRlZmF1bHRcclxuICAgICAqIHRyaWFuZ2xlIHJheSBpbnRlcnNlY3Rpb25cclxuICAgICAqIHgsIHkgYXJlIE5EQy5cclxuICAgICAqIGBgYHR5cGVzY3JpcHRcclxuICAgICAqICh4LCB5LCByZW5kZXJlciwgY2FtZXJhLCByZW5kZXJhYmxlLCBvdXQpID0+IGJvb2xlYW5cclxuICAgICAqIGBgYFxyXG4gICAgICogQHR5cGUgez9GdW5jdGlvbn1cclxuICAgICAqL1xyXG4gICAgcGljazogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZXIgZGVmaW5lZCByYXkgcGlja2luZyBhbGdvcml0aG0gaW5zdGVhZCBvZiBkZWZhdWx0XHJcbiAgICAgKiB0cmlhbmdsZSByYXkgaW50ZXJzZWN0aW9uXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAocmF5OiBjbGF5LlJheSwgcmVuZGVyYWJsZTogY2xheS5SZW5kZXJhYmxlLCBvdXQ6IEFycmF5KSA9PiBib29sZWFuXHJcbiAgICAgKiBgYGBcclxuICAgICAqIEB0eXBlIHs/RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIHBpY2tCeVJheTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmsgYXR0cmlidXRlcyBhbmQgaW5kaWNlcyBpbiBnZW9tZXRyeSBuZWVkcyB0byB1cGRhdGUuXHJcbiAgICAgKiBVc3VhbGx5IGNhbGxlZCBhZnRlciB5b3UgY2hhbmdlIHRoZSBkYXRhIGluIGF0dHJpYnV0ZXMuXHJcbiAgICAgKi9cclxuICAgIGRpcnR5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGVuYWJsZWRBdHRyaWJ1dGVzID0gdGhpcy5nZXRFbmFibGVkQXR0cmlidXRlcygpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5hYmxlZEF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5kaXJ0eUF0dHJpYnV0ZShlbmFibGVkQXR0cmlidXRlc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlydHlJbmRpY2VzKCk7XHJcbiAgICAgICAgdGhpcy5fZW5hYmxlZEF0dHJpYnV0ZXMgPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLl9jYWNoZS5kaXJ0eSgnYW55Jyk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIHRoZSBpbmRpY2VzIG5lZWRzIHRvIHVwZGF0ZS5cclxuICAgICAqL1xyXG4gICAgZGlydHlJbmRpY2VzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fY2FjaGUuZGlydHlBbGwoJ2luZGljZXMnKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIE1hcmsgdGhlIGF0dHJpYnV0ZXMgbmVlZHMgdG8gdXBkYXRlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFthdHRyTmFtZV1cclxuICAgICAqL1xyXG4gICAgZGlydHlBdHRyaWJ1dGU6IGZ1bmN0aW9uIChhdHRyTmFtZSkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlLmRpcnR5QWxsKG1ha2VBdHRyS2V5KGF0dHJOYW1lKSk7XHJcbiAgICAgICAgdGhpcy5fY2FjaGUuZGlydHlBbGwoJ2F0dHJpYnV0ZXMnKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBpbmRpY2VzIG9mIHRyaWFuZ2xlIGF0IGdpdmVuIGluZGV4LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gICAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gb3V0XHJcbiAgICAgKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgZ2V0VHJpYW5nbGVJbmRpY2VzOiBmdW5jdGlvbiAoaWR4LCBvdXQpIHtcclxuICAgICAgICBpZiAoaWR4IDwgdGhpcy50cmlhbmdsZUNvdW50ICYmIGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgICAgICBvdXQgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICAgICAgb3V0WzBdID0gaW5kaWNlc1tpZHggKiAzXTtcclxuICAgICAgICAgICAgb3V0WzFdID0gaW5kaWNlc1tpZHggKiAzICsgMV07XHJcbiAgICAgICAgICAgIG91dFsyXSA9IGluZGljZXNbaWR4ICogMyArIDJdO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgaW5kaWNlcyBvZiB0cmlhbmdsZSBhdCBnaXZlbiBpbmRleC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGFyclxyXG4gICAgICovXHJcbiAgICBzZXRUcmlhbmdsZUluZGljZXM6IGZ1bmN0aW9uIChpZHgsIGFycikge1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG4gICAgICAgIGluZGljZXNbaWR4ICogM10gPSBhcnJbMF07XHJcbiAgICAgICAgaW5kaWNlc1tpZHggKiAzICsgMV0gPSBhcnJbMV07XHJcbiAgICAgICAgaW5kaWNlc1tpZHggKiAzICsgMl0gPSBhcnJbMl07XHJcbiAgICB9LFxyXG5cclxuICAgIGlzVXNlSW5kaWNlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuaW5kaWNlcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplIGluZGljZXMgZnJvbSBhbiBhcnJheS5cclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XHJcbiAgICAgKi9cclxuICAgIGluaXRJbmRpY2VzRnJvbUFycmF5OiBmdW5jdGlvbiAoYXJyYXkpIHtcclxuICAgICAgICB2YXIgdmFsdWU7XHJcbiAgICAgICAgdmFyIEFycmF5Q29uc3RydWN0b3IgPSB0aGlzLnZlcnRleENvdW50ID4gMHhmZmZmXHJcbiAgICAgICAgICAgID8gdmVuZG9yLlVpbnQzMkFycmF5IDogdmVuZG9yLlVpbnQxNkFycmF5O1xyXG4gICAgICAgIC8vIENvbnZlcnQgMmQgYXJyYXkgdG8gZmxhdFxyXG4gICAgICAgIGlmIChhcnJheVswXSAmJiAoYXJyYXlbMF0ubGVuZ3RoKSkge1xyXG4gICAgICAgICAgICB2YXIgbiA9IDA7XHJcbiAgICAgICAgICAgIHZhciBzaXplID0gMztcclxuXHJcbiAgICAgICAgICAgIHZhbHVlID0gbmV3IEFycmF5Q29uc3RydWN0b3IoYXJyYXkubGVuZ3RoICogc2l6ZSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVbbisrXSA9IGFycmF5W2ldW2pdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IG5ldyBBcnJheUNvbnN0cnVjdG9yKGFycmF5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW5kaWNlcyA9IHZhbHVlO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgbmV3IGF0dHJpYnV0ZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZW1hbnRpY11cclxuICAgICAqL1xyXG4gICAgY3JlYXRlQXR0cmlidXRlOiBmdW5jdGlvbiAobmFtZSwgdHlwZSwgc2l6ZSwgc2VtYW50aWMpIHtcclxuICAgICAgICB2YXIgYXR0cmliID0gbmV3IEF0dHJpYnV0ZShuYW1lLCB0eXBlLCBzaXplLCBzZW1hbnRpYyk7XHJcbiAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlc1tuYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW25hbWVdID0gYXR0cmliO1xyXG4gICAgICAgIHRoaXMuX2F0dHJpYnV0ZUxpc3QucHVzaChuYW1lKTtcclxuICAgICAgICByZXR1cm4gYXR0cmliO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGF0dHJpYnV0ZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQXR0cmlidXRlOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVMaXN0ID0gdGhpcy5fYXR0cmlidXRlTGlzdDtcclxuICAgICAgICB2YXIgaWR4ID0gYXR0cmlidXRlTGlzdC5pbmRleE9mKG5hbWUpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICBhdHRyaWJ1dGVMaXN0LnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhdHRyaWJ1dGVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGV9XHJcbiAgICAgKi9cclxuICAgIGdldEF0dHJpYnV0ZTogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBlbmFibGVkIGF0dHJpYnV0ZXMgbmFtZSBsaXN0XHJcbiAgICAgKiBBdHRyaWJ1dGUgd2hpY2ggaGFzIHRoZSBzYW1lIHZlcnRleCBudW1iZXIgd2l0aCBwb3NpdGlvbiBpcyB0cmVhdGVkIGFzIGEgZW5hYmxlZCBhdHRyaWJ1dGVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfVxyXG4gICAgICovXHJcbiAgICBnZXRFbmFibGVkQXR0cmlidXRlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBlbmFibGVkQXR0cmlidXRlcyA9IHRoaXMuX2VuYWJsZWRBdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVMaXN0ID0gdGhpcy5fYXR0cmlidXRlTGlzdDtcclxuICAgICAgICAvLyBDYWNoZVxyXG4gICAgICAgIGlmIChlbmFibGVkQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gZW5hYmxlZEF0dHJpYnV0ZXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcmVzdWx0ID0gW107XHJcbiAgICAgICAgdmFyIG5WZXJ0ZXggPSB0aGlzLnZlcnRleENvdW50O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZUxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVMaXN0W2ldO1xyXG4gICAgICAgICAgICB2YXIgYXR0cmliID0gdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoYXR0cmliLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXR0cmliLnZhbHVlLmxlbmd0aCA9PT0gblZlcnRleCAqIGF0dHJpYi5zaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2VuYWJsZWRBdHRyaWJ1dGVzID0gcmVzdWx0O1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRCdWZmZXJDaHVua3M6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcclxuICAgICAgICB2YXIgaXNBdHRyaWJ1dGVzRGlydHkgPSBjYWNoZS5pc0RpcnR5KCdhdHRyaWJ1dGVzJyk7XHJcbiAgICAgICAgdmFyIGlzSW5kaWNlc0RpcnR5ID0gY2FjaGUuaXNEaXJ0eSgnaW5kaWNlcycpO1xyXG4gICAgICAgIGlmIChpc0F0dHJpYnV0ZXNEaXJ0eSB8fCBpc0luZGljZXNEaXJ0eSkge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVCdWZmZXIocmVuZGVyZXIuZ2wsIGlzQXR0cmlidXRlc0RpcnR5LCBpc0luZGljZXNEaXJ0eSk7XHJcbiAgICAgICAgICAgIHZhciBlbmFibGVkQXR0cmlidXRlcyA9IHRoaXMuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkQXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY2FjaGUuZnJlc2gobWFrZUF0dHJLZXkoZW5hYmxlZEF0dHJpYnV0ZXNbaV0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYWNoZS5mcmVzaCgnYXR0cmlidXRlcycpO1xyXG4gICAgICAgICAgICBjYWNoZS5mcmVzaCgnaW5kaWNlcycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYWNoZS5mcmVzaCgnYW55Jyk7XHJcbiAgICAgICAgcmV0dXJuIGNhY2hlLmdldCgnY2h1bmtzJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVCdWZmZXI6IGZ1bmN0aW9uIChfZ2wsIGlzQXR0cmlidXRlc0RpcnR5LCBpc0luZGljZXNEaXJ0eSkge1xyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG4gICAgICAgIHZhciBjaHVua3MgPSBjYWNoZS5nZXQoJ2NodW5rcycpO1xyXG4gICAgICAgIHZhciBmaXJzdFVwZGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghY2h1bmtzKSB7XHJcbiAgICAgICAgICAgIGNodW5rcyA9IFtdO1xyXG4gICAgICAgICAgICAvLyBJbnRpYWxpemVcclxuICAgICAgICAgICAgY2h1bmtzWzBdID0ge1xyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlQnVmZmVyczogW10sXHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzQnVmZmVyOiBudWxsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNhY2hlLnB1dCgnY2h1bmtzJywgY2h1bmtzKTtcclxuICAgICAgICAgICAgZmlyc3RVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNodW5rID0gY2h1bmtzWzBdO1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVCdWZmZXJzID0gY2h1bmsuYXR0cmlidXRlQnVmZmVycztcclxuICAgICAgICB2YXIgaW5kaWNlc0J1ZmZlciA9IGNodW5rLmluZGljZXNCdWZmZXI7XHJcblxyXG4gICAgICAgIGlmIChpc0F0dHJpYnV0ZXNEaXJ0eSB8fCBmaXJzdFVwZGF0ZSkge1xyXG4gICAgICAgICAgICB2YXIgYXR0cmlidXRlTGlzdCA9IHRoaXMuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVCdWZmZXJNYXAgPSB7fTtcclxuICAgICAgICAgICAgaWYgKCFmaXJzdFVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlQnVmZmVyTWFwW2F0dHJpYnV0ZUJ1ZmZlcnNbaV0ubmFtZV0gPSBhdHRyaWJ1dGVCdWZmZXJzW2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIElmIHNvbWUgYXR0cmlidXRlcyByZW1vdmVkXHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYXR0cmlidXRlTGlzdC5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVMaXN0W2tdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgYnVmZmVySW5mbztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWZpcnN0VXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVySW5mbyA9IGF0dHJpYnV0ZUJ1ZmZlck1hcFtuYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBidWZmZXI7XHJcbiAgICAgICAgICAgICAgICBpZiAoYnVmZmVySW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlckluZm8uYnVmZmVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gX2dsLmNyZWF0ZUJ1ZmZlcigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNhY2hlLmlzRGlydHkobWFrZUF0dHJLZXkobmFtZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSB1cGRhdGUgd2hlbiB0aGV5IGFyZSBkaXJ0eS5cclxuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBVc2UgQnVmZmVyU3ViRGF0YT9cclxuICAgICAgICAgICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlcihfZ2wuQVJSQVlfQlVGRkVSLCBidWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9nbC5idWZmZXJEYXRhKF9nbC5BUlJBWV9CVUZGRVIsIGF0dHJpYnV0ZS52YWx1ZSwgdGhpcy5keW5hbWljID8gZ2xlbnVtLkRZTkFNSUNfRFJBVyA6IGdsZW51bS5TVEFUSUNfRFJBVyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlQnVmZmVyc1trXSA9IG5ldyBBdHRyaWJ1dGVCdWZmZXIobmFtZSwgYXR0cmlidXRlLnR5cGUsIGJ1ZmZlciwgYXR0cmlidXRlLnNpemUsIGF0dHJpYnV0ZS5zZW1hbnRpYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUmVtb3ZlIHVudXNlZCBhdHRyaWJ1dGVzIGJ1ZmZlcnMuXHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGs7IGkgPCBhdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZGVsZXRlQnVmZmVyKGF0dHJpYnV0ZUJ1ZmZlcnNbaV0uYnVmZmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aCA9IGs7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNVc2VJbmRpY2VzKCkgJiYgKGlzSW5kaWNlc0RpcnR5IHx8IGZpcnN0VXBkYXRlKSkge1xyXG4gICAgICAgICAgICBpZiAoIWluZGljZXNCdWZmZXIpIHtcclxuICAgICAgICAgICAgICAgIGluZGljZXNCdWZmZXIgPSBuZXcgSW5kaWNlc0J1ZmZlcihfZ2wuY3JlYXRlQnVmZmVyKCkpO1xyXG4gICAgICAgICAgICAgICAgY2h1bmsuaW5kaWNlc0J1ZmZlciA9IGluZGljZXNCdWZmZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW5kaWNlc0J1ZmZlci5jb3VudCA9IHRoaXMuaW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIF9nbC5iaW5kQnVmZmVyKF9nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgaW5kaWNlc0J1ZmZlci5idWZmZXIpO1xyXG4gICAgICAgICAgICBfZ2wuYnVmZmVyRGF0YShfZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHRoaXMuaW5kaWNlcywgdGhpcy5keW5hbWljID8gZ2xlbnVtLkRZTkFNSUNfRFJBVyA6IGdsZW51bS5TVEFUSUNfRFJBVyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgZ2VvbWV0cnkgZGF0YSBpbiBHTCBjb250ZXh0LlxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuXHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcblxyXG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcclxuICAgICAgICB2YXIgY2h1bmtzID0gY2FjaGUuZ2V0KCdjaHVua3MnKTtcclxuICAgICAgICBpZiAoY2h1bmtzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY2h1bmtzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBjaHVua3NbY107XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBjaHVuay5hdHRyaWJ1dGVCdWZmZXJzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnMgPSBjaHVuay5hdHRyaWJ1dGVCdWZmZXJzW2tdO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLmdsLmRlbGV0ZUJ1ZmZlcihhdHRyaWJzLmJ1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNodW5rLmluZGljZXNCdWZmZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5nbC5kZWxldGVCdWZmZXIoY2h1bmsuaW5kaWNlc0J1ZmZlci5idWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9fdmFvQ2FjaGUpIHtcclxuICAgICAgICAgICAgdmFyIHZhb0V4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdPRVNfdmVydGV4X2FycmF5X29iamVjdCcpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9fdmFvQ2FjaGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YW8gPSB0aGlzLl9fdmFvQ2FjaGVbaWRdLnZhbztcclxuICAgICAgICAgICAgICAgIGlmICh2YW8pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YW9FeHQuZGVsZXRlVmVydGV4QXJyYXlPRVModmFvKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9fdmFvQ2FjaGUgPSB7fTtcclxuICAgICAgICBjYWNoZS5kZWxldGVDb250ZXh0KHJlbmRlcmVyLl9fdWlkX18pO1xyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIGNsYXkuR2VvbWV0cnlCYXNlI3ZlcnRleENvdW50XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHZW9tZXRyeUJhc2UucHJvdG90eXBlLCAndmVydGV4Q291bnQnLCB7XHJcblxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBtYWluQXR0cmlidXRlID0gdGhpcy5hdHRyaWJ1dGVzW3RoaXMubWFpbkF0dHJpYnV0ZV07XHJcblxyXG4gICAgICAgICAgICBpZiAoIW1haW5BdHRyaWJ1dGUpIHtcclxuICAgICAgICAgICAgICAgIG1haW5BdHRyaWJ1dGUgPSB0aGlzLmF0dHJpYnV0ZXNbdGhpcy5fYXR0cmlidXRlTGlzdFswXV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghbWFpbkF0dHJpYnV0ZSB8fCAhbWFpbkF0dHJpYnV0ZS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG1haW5BdHRyaWJ1dGUudmFsdWUubGVuZ3RoIC8gbWFpbkF0dHJpYnV0ZS5zaXplO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBjbGF5Lkdlb21ldHJ5QmFzZSN0cmlhbmdsZUNvdW50XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHZW9tZXRyeUJhc2UucHJvdG90eXBlLCAndHJpYW5nbGVDb3VudCcsIHtcclxuXHJcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcblxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICAgICAgaWYgKCFpbmRpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbmRpY2VzLmxlbmd0aCAvIDM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuR2VvbWV0cnlCYXNlLlNUQVRJQ19EUkFXID0gZ2xlbnVtLlNUQVRJQ19EUkFXO1xyXG5HZW9tZXRyeUJhc2UuRFlOQU1JQ19EUkFXID0gZ2xlbnVtLkRZTkFNSUNfRFJBVztcclxuR2VvbWV0cnlCYXNlLlNUUkVBTV9EUkFXID0gZ2xlbnVtLlNUUkVBTV9EUkFXO1xyXG5cclxuR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZUJ1ZmZlciA9IEF0dHJpYnV0ZUJ1ZmZlcjtcclxuR2VvbWV0cnlCYXNlLkluZGljZXNCdWZmZXIgPSBJbmRpY2VzQnVmZmVyO1xyXG5cclxuR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdlb21ldHJ5QmFzZTtcclxuIiwiaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi9nbG1hdHJpeC92ZWMzJztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCBHZW9tZXRyeUJhc2UgZnJvbSAnLi9HZW9tZXRyeUJhc2UnO1xyXG5cclxudmFyIHZlYzNDcmVhdGUgPSB2ZWMzLmNyZWF0ZTtcclxudmFyIHZlYzNBZGQgPSB2ZWMzLmFkZDtcclxudmFyIHZlYzNTZXQgPSB2ZWMzLnNldDtcclxuXHJcbnZhciBBdHRyaWJ1dGUgPSBHZW9tZXRyeUJhc2UuQXR0cmlidXRlO1xyXG5cclxuLyoqXHJcbiAqIEdlb21ldHJ5IGluIENsYXlHTCBjb250YWlucyB2ZXJ0ZXggYXR0cmlidXRlcyBvZiBtZXNoLiBUaGVzZSB2ZXJ0ZXggYXR0cmlidXRlcyB3aWxsIGJlIGZpbmFsbHkgcHJvdmlkZWQgdG8gdGhlIHtAbGluayBjbGF5LlNoYWRlcn0uXHJcbiAqIERpZmZlcmVudCB7QGxpbmsgY2xheS5TaGFkZXJ9IG5lZWRzIGRpZmZlcmVudCBhdHRyaWJ1dGVzLiBIZXJlIGlzIGEgbGlzdCBvZiBhdHRyaWJ1dGVzIHVzZWQgaW4gdGhlIGJ1aWx0aW4gc2hhZGVycy5cclxuICpcclxuICogKyBwb3NpdGlvbjogYGNsYXkuYmFzaWNgLCBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgdGV4Y29vcmQwOiBgY2xheS5iYXNpY2AsIGBjbGF5LmxhbWJlcnRgLCBgY2xheS5zdGFuZGFyZGBcclxuICogKyBjb2xvcjogYGNsYXkuYmFzaWNgLCBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgd2VpZ2h0OiBgY2xheS5iYXNpY2AsIGBjbGF5LmxhbWJlcnRgLCBgY2xheS5zdGFuZGFyZGBcclxuICogKyBqb2ludDogYGNsYXkuYmFzaWNgLCBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgbm9ybWFsOiBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgdGFuZ2VudDogYGNsYXkuc3RhbmRhcmRgXHJcbiAqXHJcbiAqICMjIyMgQ3JlYXRlIGEgcHJvY2VkdXJhbCBnZW9tZXRyeVxyXG4gKlxyXG4gKiBDbGF5R0wgcHJvdmlkZXMgYSBjb3VwbGUgb2YgYnVpbHRpbiBwcm9jZWR1cmFsIGdlb21ldHJpZXMuIElubGN1ZGluZzpcclxuICpcclxuICogICsge0BsaW5rIGNsYXkuZ2VvbWV0cnkuQ3ViZX1cclxuICogICsge0BsaW5rIGNsYXkuZ2VvbWV0cnkuU3BoZXJlfVxyXG4gKiAgKyB7QGxpbmsgY2xheS5nZW9tZXRyeS5QbGFuZX1cclxuICogICsge0BsaW5rIGNsYXkuZ2VvbWV0cnkuQ3lsaW5kZXJ9XHJcbiAqICArIHtAbGluayBjbGF5Lmdlb21ldHJ5LkNvbmV9XHJcbiAqICArIHtAbGluayBjbGF5Lmdlb21ldHJ5LlBhcmFtZXRyaWNTdXJmYWNlfVxyXG4gKlxyXG4gKiBJdCdzIHNpbXBsZSB0byBjcmVhdGUgYSBiYXNpYyBnZW9tZXRyeSB3aXRoIHRoZXNlIGNsYXNzZXMuXHJcbiAqXHJcbmBgYGpzXHJcbnZhciBzcGhlcmUgPSBuZXcgY2xheS5nZW9tZXRyeS5TcGhlcmUoe1xyXG4gICAgcmFkaXVzOiAyXHJcbn0pO1xyXG5gYGBcclxuICpcclxuICogIyMjIyBDcmVhdGUgdGhlIGdlb21ldHJ5IGRhdGEgYnkgeW91cnNlbGZcclxuICpcclxuICogVXN1YWxseSB0aGUgdmVydGV4IGF0dHJpYnV0ZXMgZGF0YSBhcmUgY3JlYXRlZCBieSB0aGUge0BsaW5rIGNsYXkubG9hZGVyLkdMVEZ9IG9yIHByb2NlZHVyYWwgZ2VvbWV0cmllcyBsaWtlIHtAbGluayBjbGF5Lmdlb21ldHJ5LlNwaGVyZX0uXHJcbiAqIEJlc2lkZXMgdGhlc2UsIHlvdSBjYW4gY3JlYXRlIHRoZSBkYXRhIG1hbnVhbGx5LiBIZXJlIGlzIGEgc2ltcGxlIGV4YW1wbGUgdG8gY3JlYXRlIGEgdHJpYW5nbGUuXHJcbmBgYGpzXHJcbnZhciBUUklBTkdMRV9QT1NJVElPTlMgPSBbXHJcbiAgICBbLTAuNSwgLTAuNSwgMF0sXHJcbiAgICBbMC41LCAtMC41LCAwXSxcclxuICAgIFswLCAwLjUsIDBdXHJcbl07XHJcbnZhciBnZW9tZXRyeSA9IG5ldyBjbGF5LlN0YXRpY0dlb21ldHJ5QmFzZSgpO1xyXG4vLyBBZGQgdHJpYW5nbGUgdmVydGljZXMgdG8gcG9zaXRpb24gYXR0cmlidXRlLlxyXG5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmZyb21BcnJheShUUklBTkdMRV9QT1NJVElPTlMpO1xyXG5gYGBcclxuICogVGhlbiB5b3UgY2FuIHVzZSB0aGUgdXRpbGl0eSBtZXRob2RzIGxpa2UgYGdlbmVyYXRlVmVydGV4Tm9ybWFsc2AsIGBnZW5lcmF0ZVRhbmdlbnRzYCB0byBjcmVhdGUgdGhlIHJlbWFpbmluZyBuZWNlc3NhcnkgYXR0cmlidXRlcy5cclxuICpcclxuICpcclxuICogIyMjIyBVc2Ugd2l0aCBjdXN0b20gc2hhZGVyc1xyXG4gKlxyXG4gKiBJZiB5b3Ugd2FuJ3QgdG8gd3JpdGUgY3VzdG9tIHNoYWRlcnMuIERvbid0IGZvcmdldCB0byBhZGQgU0VNQU5USUNTIHRvIHRoZXNlIGF0dHJpYnV0ZXMuIEZvciBleGFtcGxlXHJcbiAqXHJcbiBgYGBnbHNsXHJcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcclxudW5pZm9ybSBtYXQ0IHdvcmxkSW52ZXJzZVRyYW5zcG9zZSA6IFdPUkxESU5WRVJTRVRSQU5TUE9TRTtcclxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XHJcblxyXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xyXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZCA6IFRFWENPT1JEXzA7XHJcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbCA6IE5PUk1BTDtcclxuYGBgXHJcbiAqIFRoZXNlIGBQT1NJVElPTmAsIGBURVhDT09SRF8wYCwgYE5PUk1BTGAgYXJlIFNFTUFOVElDUyB3aGljaCB3aWxsIG1hcCB0aGUgYXR0cmlidXRlcyBpbiBzaGFkZXIgdG8gdGhlIGF0dHJpYnV0ZXMgaW4gdGhlIEdlb21ldHJ5QmFzZVxyXG4gKlxyXG4gKiBBdmFpbGFibGUgYXR0cmlidXRlcyBTRU1BTlRJQ1MgaW5jbHVkZXMgYFBPU0lUSU9OYCwgYFRFWENPT1JEXzBgLCBgVEVYQ09PUkRfMWAgYE5PUk1BTGAsIGBUQU5HRU5UYCwgYENPTE9SYCwgYFdFSUdIVGAsIGBKT0lOVGAuXHJcbiAqXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlCYXNlXHJcbiAqL1xyXG52YXIgR2VvbWV0cnkgPSBHZW9tZXRyeUJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuR2VvbWV0cnkjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBdHRyaWJ1dGVzIG9mIGdlb21ldHJ5LiBJbmNsdWRpbmc6XHJcbiAgICAgICAgICogICsgYHBvc2l0aW9uYFxyXG4gICAgICAgICAqICArIGB0ZXhjb29yZDBgXHJcbiAgICAgICAgICogICsgYHRleGNvb3JkMWBcclxuICAgICAgICAgKiAgKyBgbm9ybWFsYFxyXG4gICAgICAgICAqICArIGB0YW5nZW50YFxyXG4gICAgICAgICAqICArIGBjb2xvcmBcclxuICAgICAgICAgKiAgKyBgd2VpZ2h0YFxyXG4gICAgICAgICAqICArIGBqb2ludGBcclxuICAgICAgICAgKiAgKyBgYmFyeWNlbnRyaWNgXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIGNsYXkuR2VvbWV0cnkuQXR0cmlidXRlPn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiBuZXcgQXR0cmlidXRlKCdwb3NpdGlvbicsICdmbG9hdCcsIDMsICdQT1NJVElPTicpLFxyXG4gICAgICAgICAgICB0ZXhjb29yZDA6IG5ldyBBdHRyaWJ1dGUoJ3RleGNvb3JkMCcsICdmbG9hdCcsIDIsICdURVhDT09SRF8wJyksXHJcbiAgICAgICAgICAgIHRleGNvb3JkMTogbmV3IEF0dHJpYnV0ZSgndGV4Y29vcmQxJywgJ2Zsb2F0JywgMiwgJ1RFWENPT1JEXzEnKSxcclxuICAgICAgICAgICAgbm9ybWFsOiBuZXcgQXR0cmlidXRlKCdub3JtYWwnLCAnZmxvYXQnLCAzLCAnTk9STUFMJyksXHJcbiAgICAgICAgICAgIHRhbmdlbnQ6IG5ldyBBdHRyaWJ1dGUoJ3RhbmdlbnQnLCAnZmxvYXQnLCA0LCAnVEFOR0VOVCcpLFxyXG4gICAgICAgICAgICBjb2xvcjogbmV3IEF0dHJpYnV0ZSgnY29sb3InLCAnZmxvYXQnLCA0LCAnQ09MT1InKSxcclxuICAgICAgICAgICAgLy8gU2tpbm5pbmcgYXR0cmlidXRlc1xyXG4gICAgICAgICAgICAvLyBFYWNoIHZlcnRleCBjYW4gYmUgYmluZCB0byA0IGJvbmVzLCBiZWNhdXNlIHRoZVxyXG4gICAgICAgICAgICAvLyBzdW0gb2Ygd2VpZ2h0cyBpcyAxLCBzbyB0aGUgd2VpZ2h0cyBpcyBzdG9yZWQgaW4gdmVjMyBhbmQgdGhlIGxhc3RcclxuICAgICAgICAgICAgLy8gY2FuIGJlIGNhbGN1bGF0ZWQgYnkgMS13Lngtdy55LXcuelxyXG4gICAgICAgICAgICB3ZWlnaHQ6IG5ldyBBdHRyaWJ1dGUoJ3dlaWdodCcsICdmbG9hdCcsIDMsICdXRUlHSFQnKSxcclxuICAgICAgICAgICAgam9pbnQ6IG5ldyBBdHRyaWJ1dGUoJ2pvaW50JywgJ2Zsb2F0JywgNCwgJ0pPSU5UJyksXHJcbiAgICAgICAgICAgIC8vIEZvciB3aXJlZnJhbWUgZGlzcGxheVxyXG4gICAgICAgICAgICAvLyBodHRwOi8vY29kZWZsb3cub3JnL2VudHJpZXMvMjAxMi9hdWcvMDIvZWFzeS13aXJlZnJhbWUtZGlzcGxheS13aXRoLWJhcnljZW50cmljLWNvb3JkaW5hdGVzL1xyXG4gICAgICAgICAgICBiYXJ5Y2VudHJpYzogbmV3IEF0dHJpYnV0ZSgnYmFyeWNlbnRyaWMnLCAnZmxvYXQnLCAzLCBudWxsKSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbGN1bGF0ZWQgYm91bmRpbmcgYm94IG9mIGdlb21ldHJ5LlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LkJvdW5kaW5nQm94fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGJvdW5kaW5nQm94OiBudWxsXHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuR2VvbWV0cnkucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICBtYWluQXR0cmlidXRlOiAncG9zaXRpb24nLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIGJvdW5kaW5nQm94IG9mIEdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZUJvdW5kaW5nQm94OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGJib3ggPSB0aGlzLmJvdW5kaW5nQm94O1xyXG4gICAgICAgIGlmICghYmJveCkge1xyXG4gICAgICAgICAgICBiYm94ID0gdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcG9zQXJyID0gdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIGlmIChwb3NBcnIgJiYgcG9zQXJyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YXIgbWluID0gYmJveC5taW47XHJcbiAgICAgICAgICAgIHZhciBtYXggPSBiYm94Lm1heDtcclxuICAgICAgICAgICAgdmFyIG1pbkFyciA9IG1pbi5hcnJheTtcclxuICAgICAgICAgICAgdmFyIG1heEFyciA9IG1heC5hcnJheTtcclxuICAgICAgICAgICAgdmVjMy5zZXQobWluQXJyLCBwb3NBcnJbMF0sIHBvc0FyclsxXSwgcG9zQXJyWzJdKTtcclxuICAgICAgICAgICAgdmVjMy5zZXQobWF4QXJyLCBwb3NBcnJbMF0sIHBvc0FyclsxXSwgcG9zQXJyWzJdKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDM7IGkgPCBwb3NBcnIubGVuZ3RoOykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHggPSBwb3NBcnJbaSsrXTtcclxuICAgICAgICAgICAgICAgIHZhciB5ID0gcG9zQXJyW2krK107XHJcbiAgICAgICAgICAgICAgICB2YXIgeiA9IHBvc0FycltpKytdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHggPCBtaW5BcnJbMF0pIHsgbWluQXJyWzBdID0geDsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHkgPCBtaW5BcnJbMV0pIHsgbWluQXJyWzFdID0geTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHogPCBtaW5BcnJbMl0pIHsgbWluQXJyWzJdID0gejsgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh4ID4gbWF4QXJyWzBdKSB7IG1heEFyclswXSA9IHg7IH1cclxuICAgICAgICAgICAgICAgIGlmICh5ID4gbWF4QXJyWzFdKSB7IG1heEFyclsxXSA9IHk7IH1cclxuICAgICAgICAgICAgICAgIGlmICh6ID4gbWF4QXJyWzJdKSB7IG1heEFyclsyXSA9IHo7IH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIG5vcm1hbHMgcGVyIHZlcnRleC5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVWZXJ0ZXhOb3JtYWxzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZlcnRleENvdW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIHZhciBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICghbm9ybWFscyB8fCBub3JtYWxzLmxlbmd0aCAhPT0gcG9zaXRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWUgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheShwb3NpdGlvbnMubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFJlc2V0XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9ybWFscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsc1tpXSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwMSA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgcDIgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHAzID0gdmVjM0NyZWF0ZSgpO1xyXG5cclxuICAgICAgICB2YXIgdjIxID0gdmVjM0NyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB2MzIgPSB2ZWMzQ3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHZhciBuID0gdmVjM0NyZWF0ZSgpO1xyXG5cclxuICAgICAgICB2YXIgbGVuID0gaW5kaWNlcyA/IGluZGljZXMubGVuZ3RoIDogdGhpcy52ZXJ0ZXhDb3VudDtcclxuICAgICAgICB2YXIgaTEsIGkyLCBpMztcclxuICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGxlbjspIHtcclxuICAgICAgICAgICAgaWYgKGluZGljZXMpIHtcclxuICAgICAgICAgICAgICAgIGkxID0gaW5kaWNlc1tmKytdO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBpbmRpY2VzW2YrK107XHJcbiAgICAgICAgICAgICAgICBpMyA9IGluZGljZXNbZisrXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGkxID0gZisrO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBmKys7XHJcbiAgICAgICAgICAgICAgICBpMyA9IGYrKztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVjM1NldChwMSwgcG9zaXRpb25zW2kxKjNdLCBwb3NpdGlvbnNbaTEqMysxXSwgcG9zaXRpb25zW2kxKjMrMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHAyLCBwb3NpdGlvbnNbaTIqM10sIHBvc2l0aW9uc1tpMiozKzFdLCBwb3NpdGlvbnNbaTIqMysyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQocDMsIHBvc2l0aW9uc1tpMyozXSwgcG9zaXRpb25zW2kzKjMrMV0sIHBvc2l0aW9uc1tpMyozKzJdKTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYyMSwgcDEsIHAyKTtcclxuICAgICAgICAgICAgdmVjMy5zdWIodjMyLCBwMiwgcDMpO1xyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKG4sIHYyMSwgdjMyKTtcclxuICAgICAgICAgICAgLy8gQWxyZWFkeSBiZSB3ZWlnaHRlZCBieSB0aGUgdHJpYW5nbGUgYXJlYVxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsc1tpMSozK2ldID0gbm9ybWFsc1tpMSozK2ldICsgbltpXTtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTIqMytpXSA9IG5vcm1hbHNbaTIqMytpXSArIG5baV07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kzKjMraV0gPSBub3JtYWxzW2kzKjMraV0gKyBuW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vcm1hbHMubGVuZ3RoOykge1xyXG4gICAgICAgICAgICB2ZWMzU2V0KG4sIG5vcm1hbHNbaV0sIG5vcm1hbHNbaSsxXSwgbm9ybWFsc1tpKzJdKTtcclxuICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUobiwgbik7XHJcbiAgICAgICAgICAgIG5vcm1hbHNbaSsrXSA9IG5bMF07XHJcbiAgICAgICAgICAgIG5vcm1hbHNbaSsrXSA9IG5bMV07XHJcbiAgICAgICAgICAgIG5vcm1hbHNbaSsrXSA9IG5bMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlydHkoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBub3JtYWxzIHBlciBmYWNlLlxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZUZhY2VOb3JtYWxzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZlcnRleENvdW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc1VuaXF1ZVZlcnRleCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVVbmlxdWVWZXJ0ZXgoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIHZhciBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcblxyXG4gICAgICAgIHZhciBwMSA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgcDIgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHAzID0gdmVjM0NyZWF0ZSgpO1xyXG5cclxuICAgICAgICB2YXIgdjIxID0gdmVjM0NyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB2MzIgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIG4gPSB2ZWMzQ3JlYXRlKCk7XHJcblxyXG4gICAgICAgIGlmICghbm9ybWFscykge1xyXG4gICAgICAgICAgICBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KHBvc2l0aW9ucy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbGVuID0gaW5kaWNlcyA/IGluZGljZXMubGVuZ3RoIDogdGhpcy52ZXJ0ZXhDb3VudDtcclxuICAgICAgICB2YXIgaTEsIGkyLCBpMztcclxuICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGxlbjspIHtcclxuICAgICAgICAgICAgaWYgKGluZGljZXMpIHtcclxuICAgICAgICAgICAgICAgIGkxID0gaW5kaWNlc1tmKytdO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBpbmRpY2VzW2YrK107XHJcbiAgICAgICAgICAgICAgICBpMyA9IGluZGljZXNbZisrXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGkxID0gZisrO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBmKys7XHJcbiAgICAgICAgICAgICAgICBpMyA9IGYrKztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVjM1NldChwMSwgcG9zaXRpb25zW2kxKjNdLCBwb3NpdGlvbnNbaTEqMysxXSwgcG9zaXRpb25zW2kxKjMrMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHAyLCBwb3NpdGlvbnNbaTIqM10sIHBvc2l0aW9uc1tpMiozKzFdLCBwb3NpdGlvbnNbaTIqMysyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQocDMsIHBvc2l0aW9uc1tpMyozXSwgcG9zaXRpb25zW2kzKjMrMV0sIHBvc2l0aW9uc1tpMyozKzJdKTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYyMSwgcDEsIHAyKTtcclxuICAgICAgICAgICAgdmVjMy5zdWIodjMyLCBwMiwgcDMpO1xyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKG4sIHYyMSwgdjMyKTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKG4sIG4pO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTEqMyArIGldID0gbltpXTtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTIqMyArIGldID0gbltpXTtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTMqMyArIGldID0gbltpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgdGFuZ2VudHMgYXR0cmlidXRlcy5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVUYW5nZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgblZlcnRleCA9IHRoaXMudmVydGV4Q291bnQ7XHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgaWYgKCFhdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWUpIHtcclxuICAgICAgICAgICAgYXR0cmlidXRlcy50YW5nZW50LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShuVmVydGV4ICogNCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0ZXhjb29yZHMgPSBhdHRyaWJ1dGVzLnRleGNvb3JkMC52YWx1ZTtcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICB2YXIgdGFuZ2VudHMgPSBhdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWU7XHJcbiAgICAgICAgdmFyIG5vcm1hbHMgPSBhdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKCF0ZXhjb29yZHMpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdHZW9tZXRyeSB3aXRob3V0IHRleGNvb3JkcyBjYW5cXCd0IGdlbmVyYXRlIHRhbmdlbnRzLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGFuMSA9IFtdO1xyXG4gICAgICAgIHZhciB0YW4yID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVmVydGV4OyBpKyspIHtcclxuICAgICAgICAgICAgdGFuMVtpXSA9IFswLjAsIDAuMCwgMC4wXTtcclxuICAgICAgICAgICAgdGFuMltpXSA9IFswLjAsIDAuMCwgMC4wXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzZGlyID0gWzAuMCwgMC4wLCAwLjBdO1xyXG4gICAgICAgIHZhciB0ZGlyID0gWzAuMCwgMC4wLCAwLjBdO1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG5cclxuICAgICAgICB2YXIgbGVuID0gaW5kaWNlcyA/IGluZGljZXMubGVuZ3RoIDogdGhpcy52ZXJ0ZXhDb3VudDtcclxuICAgICAgICB2YXIgaTEsIGkyLCBpMztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjspIHtcclxuICAgICAgICAgICAgaWYgKGluZGljZXMpIHtcclxuICAgICAgICAgICAgICAgIGkxID0gaW5kaWNlc1tpKytdO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBpbmRpY2VzW2krK107XHJcbiAgICAgICAgICAgICAgICBpMyA9IGluZGljZXNbaSsrXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGkxID0gaSsrO1xyXG4gICAgICAgICAgICAgICAgaTIgPSBpKys7XHJcbiAgICAgICAgICAgICAgICBpMyA9IGkrKztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHN0MXMgPSB0ZXhjb29yZHNbaTEgKiAyXSxcclxuICAgICAgICAgICAgICAgIHN0MnMgPSB0ZXhjb29yZHNbaTIgKiAyXSxcclxuICAgICAgICAgICAgICAgIHN0M3MgPSB0ZXhjb29yZHNbaTMgKiAyXSxcclxuICAgICAgICAgICAgICAgIHN0MXQgPSB0ZXhjb29yZHNbaTEgKiAyICsgMV0sXHJcbiAgICAgICAgICAgICAgICBzdDJ0ID0gdGV4Y29vcmRzW2kyICogMiArIDFdLFxyXG4gICAgICAgICAgICAgICAgc3QzdCA9IHRleGNvb3Jkc1tpMyAqIDIgKyAxXSxcclxuXHJcbiAgICAgICAgICAgICAgICBwMXggPSBwb3NpdGlvbnNbaTEgKiAzXSxcclxuICAgICAgICAgICAgICAgIHAyeCA9IHBvc2l0aW9uc1tpMiAqIDNdLFxyXG4gICAgICAgICAgICAgICAgcDN4ID0gcG9zaXRpb25zW2kzICogM10sXHJcbiAgICAgICAgICAgICAgICBwMXkgPSBwb3NpdGlvbnNbaTEgKiAzICsgMV0sXHJcbiAgICAgICAgICAgICAgICBwMnkgPSBwb3NpdGlvbnNbaTIgKiAzICsgMV0sXHJcbiAgICAgICAgICAgICAgICBwM3kgPSBwb3NpdGlvbnNbaTMgKiAzICsgMV0sXHJcbiAgICAgICAgICAgICAgICBwMXogPSBwb3NpdGlvbnNbaTEgKiAzICsgMl0sXHJcbiAgICAgICAgICAgICAgICBwMnogPSBwb3NpdGlvbnNbaTIgKiAzICsgMl0sXHJcbiAgICAgICAgICAgICAgICBwM3ogPSBwb3NpdGlvbnNbaTMgKiAzICsgMl07XHJcblxyXG4gICAgICAgICAgICB2YXIgeDEgPSBwMnggLSBwMXgsXHJcbiAgICAgICAgICAgICAgICB4MiA9IHAzeCAtIHAxeCxcclxuICAgICAgICAgICAgICAgIHkxID0gcDJ5IC0gcDF5LFxyXG4gICAgICAgICAgICAgICAgeTIgPSBwM3kgLSBwMXksXHJcbiAgICAgICAgICAgICAgICB6MSA9IHAyeiAtIHAxeixcclxuICAgICAgICAgICAgICAgIHoyID0gcDN6IC0gcDF6O1xyXG5cclxuICAgICAgICAgICAgdmFyIHMxID0gc3QycyAtIHN0MXMsXHJcbiAgICAgICAgICAgICAgICBzMiA9IHN0M3MgLSBzdDFzLFxyXG4gICAgICAgICAgICAgICAgdDEgPSBzdDJ0IC0gc3QxdCxcclxuICAgICAgICAgICAgICAgIHQyID0gc3QzdCAtIHN0MXQ7XHJcblxyXG4gICAgICAgICAgICB2YXIgciA9IDEuMCAvIChzMSAqIHQyIC0gdDEgKiBzMik7XHJcbiAgICAgICAgICAgIHNkaXJbMF0gPSAodDIgKiB4MSAtIHQxICogeDIpICogcjtcclxuICAgICAgICAgICAgc2RpclsxXSA9ICh0MiAqIHkxIC0gdDEgKiB5MikgKiByO1xyXG4gICAgICAgICAgICBzZGlyWzJdID0gKHQyICogejEgLSB0MSAqIHoyKSAqIHI7XHJcblxyXG4gICAgICAgICAgICB0ZGlyWzBdID0gKHMxICogeDIgLSBzMiAqIHgxKSAqIHI7XHJcbiAgICAgICAgICAgIHRkaXJbMV0gPSAoczEgKiB5MiAtIHMyICogeTEpICogcjtcclxuICAgICAgICAgICAgdGRpclsyXSA9IChzMSAqIHoyIC0gczIgKiB6MSkgKiByO1xyXG5cclxuICAgICAgICAgICAgdmVjM0FkZCh0YW4xW2kxXSwgdGFuMVtpMV0sIHNkaXIpO1xyXG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjFbaTJdLCB0YW4xW2kyXSwgc2Rpcik7XHJcbiAgICAgICAgICAgIHZlYzNBZGQodGFuMVtpM10sIHRhbjFbaTNdLCBzZGlyKTtcclxuICAgICAgICAgICAgdmVjM0FkZCh0YW4yW2kxXSwgdGFuMltpMV0sIHRkaXIpO1xyXG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjJbaTJdLCB0YW4yW2kyXSwgdGRpcik7XHJcbiAgICAgICAgICAgIHZlYzNBZGQodGFuMltpM10sIHRhbjJbaTNdLCB0ZGlyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHRtcCA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgbkNyb3NzVCA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgbiA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5WZXJ0ZXg7IGkrKykge1xyXG4gICAgICAgICAgICBuWzBdID0gbm9ybWFsc1tpICogM107XHJcbiAgICAgICAgICAgIG5bMV0gPSBub3JtYWxzW2kgKiAzICsgMV07XHJcbiAgICAgICAgICAgIG5bMl0gPSBub3JtYWxzW2kgKiAzICsgMl07XHJcbiAgICAgICAgICAgIHZhciB0ID0gdGFuMVtpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIEdyYW0tU2NobWlkdCBvcnRob2dvbmFsaXplXHJcbiAgICAgICAgICAgIHZlYzMuc2NhbGUodG1wLCBuLCB2ZWMzLmRvdChuLCB0KSk7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHRtcCwgdCwgdG1wKTtcclxuICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUodG1wLCB0bXApO1xyXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgaGFuZGVkbmVzcy5cclxuICAgICAgICAgICAgdmVjMy5jcm9zcyhuQ3Jvc3NULCBuLCB0KTtcclxuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDRdID0gdG1wWzBdO1xyXG4gICAgICAgICAgICB0YW5nZW50c1tpICogNCArIDFdID0gdG1wWzFdO1xyXG4gICAgICAgICAgICB0YW5nZW50c1tpICogNCArIDJdID0gdG1wWzJdO1xyXG4gICAgICAgICAgICAvLyBQRU5ESU5HIGNhbiBjb25maWcgP1xyXG4gICAgICAgICAgICB0YW5nZW50c1tpICogNCArIDNdID0gdmVjMy5kb3QobkNyb3NzVCwgdGFuMltpXSkgPCAwLjAgPyAtMS4wIDogMS4wO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdmVydGljZXMgYXJlIG5vdCBzaGFyZWQgYnkgZGlmZmVyZW50IGluZGljZXMuXHJcbiAgICAgKi9cclxuICAgIGlzVW5pcXVlVmVydGV4OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNVc2VJbmRpY2VzKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmVydGV4Q291bnQgPT09IHRoaXMuaW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYSB1bmlxdWUgdmVydGV4IGZvciBlYWNoIGluZGV4LlxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZVVuaXF1ZVZlcnRleDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCB8fCAhdGhpcy5pbmRpY2VzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmluZGljZXMubGVuZ3RoID4gMHhmZmZmKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5kaWNlcyA9IG5ldyB2ZW5kb3IuVWludDMyQXJyYXkodGhpcy5pbmRpY2VzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlTmFtZUxpc3QgPSB0aGlzLmdldEVuYWJsZWRBdHRyaWJ1dGVzKCk7XHJcblxyXG4gICAgICAgIHZhciBvbGRBdHRyVmFsdWVzID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBhdHRyaWJ1dGVOYW1lTGlzdC5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVMaXN0W2FdO1xyXG4gICAgICAgICAgICBvbGRBdHRyVmFsdWVzW25hbWVdID0gYXR0cmlidXRlc1tuYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgYXR0cmlidXRlc1tuYW1lXS5pbml0KHRoaXMuaW5kaWNlcy5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGN1cnNvciA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpaSA9IGluZGljZXNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmlidXRlTmFtZUxpc3QubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZUxpc3RbYV07XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBhdHRyaWJ1dGVzW25hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNpemUgPSBhdHRyaWJ1dGVzW25hbWVdLnNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzaXplOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtjdXJzb3IgKiBzaXplICsga10gPSBvbGRBdHRyVmFsdWVzW25hbWVdW2lpICogc2l6ZSArIGtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGluZGljZXNbaV0gPSBjdXJzb3I7XHJcbiAgICAgICAgICAgIGN1cnNvcisrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIGJhcnljZW50cmljIGNvb3JkaW5hdGVzIGZvciB3aXJlZnJhbWUgZHJhdy5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVCYXJ5Y2VudHJpYzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNVbmlxdWVWZXJ0ZXgoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlVW5pcXVlVmVydGV4KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgYXJyYXkgPSBhdHRyaWJ1dGVzLmJhcnljZW50cmljLnZhbHVlO1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzO1xyXG4gICAgICAgIC8vIEFscmVhZHkgZXhpc3RlZDtcclxuICAgICAgICBpZiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoID09PSBpbmRpY2VzLmxlbmd0aCAqIDMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhcnJheSA9IGF0dHJpYnV0ZXMuYmFyeWNlbnRyaWMudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KGluZGljZXMubGVuZ3RoICogMyk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHRoaXMudmVydGV4Q291bnQgLyAzKTspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAzOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBpaSA9IGluZGljZXMgPyBpbmRpY2VzW2krK10gOiAoaSAqIDMgKyBqKTtcclxuICAgICAgICAgICAgICAgIGFycmF5W2lpICogMyArIGpdID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgdHJhbnNmb3JtIHRvIGdlb21ldHJ5IGF0dHJpYnV0ZXMuXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gbWF0cml4XHJcbiAgICAgKi9cclxuICAgIGFwcGx5VHJhbnNmb3JtOiBmdW5jdGlvbiAobWF0cml4KSB7XHJcblxyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIHZhciBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcbiAgICAgICAgdmFyIHRhbmdlbnRzID0gYXR0cmlidXRlcy50YW5nZW50LnZhbHVlO1xyXG5cclxuICAgICAgICBtYXRyaXggPSBtYXRyaXguYXJyYXk7XHJcbiAgICAgICAgLy8gTm9ybWFsIE1hdHJpeFxyXG4gICAgICAgIHZhciBpbnZlcnNlVHJhbnNwb3NlTWF0cml4ID0gbWF0NC5jcmVhdGUoKTtcclxuICAgICAgICBtYXQ0LmludmVydChpbnZlcnNlVHJhbnNwb3NlTWF0cml4LCBtYXRyaXgpO1xyXG4gICAgICAgIG1hdDQudHJhbnNwb3NlKGludmVyc2VUcmFuc3Bvc2VNYXRyaXgsIGludmVyc2VUcmFuc3Bvc2VNYXRyaXgpO1xyXG5cclxuICAgICAgICB2YXIgdmVjM1RyYW5zZm9ybU1hdDQgPSB2ZWMzLnRyYW5zZm9ybU1hdDQ7XHJcbiAgICAgICAgdmFyIHZlYzNGb3JFYWNoID0gdmVjMy5mb3JFYWNoO1xyXG4gICAgICAgIHZlYzNGb3JFYWNoKHBvc2l0aW9ucywgMywgMCwgbnVsbCwgdmVjM1RyYW5zZm9ybU1hdDQsIG1hdHJpeCk7XHJcbiAgICAgICAgaWYgKG5vcm1hbHMpIHtcclxuICAgICAgICAgICAgdmVjM0ZvckVhY2gobm9ybWFscywgMywgMCwgbnVsbCwgdmVjM1RyYW5zZm9ybU1hdDQsIGludmVyc2VUcmFuc3Bvc2VNYXRyaXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGFuZ2VudHMpIHtcclxuICAgICAgICAgICAgdmVjM0ZvckVhY2godGFuZ2VudHMsIDQsIDAsIG51bGwsIHZlYzNUcmFuc2Zvcm1NYXQ0LCBpbnZlcnNlVHJhbnNwb3NlTWF0cml4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdlb21ldHJ5IGRhdGEgaW4gR0wgY29udGV4dC5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcblxyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG5cclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICAgICAgdmFyIGNodW5rcyA9IGNhY2hlLmdldCgnY2h1bmtzJyk7XHJcbiAgICAgICAgaWYgKGNodW5rcykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNodW5rcy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNodW5rID0gY2h1bmtzW2NdO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgY2h1bmsuYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJzID0gY2h1bmsuYXR0cmlidXRlQnVmZmVyc1trXTtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5nbC5kZWxldGVCdWZmZXIoYXR0cmlicy5idWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjaHVuay5pbmRpY2VzQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKGNodW5rLmluZGljZXNCdWZmZXIuYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fX3Zhb0NhY2hlKSB7XHJcbiAgICAgICAgICAgIHZhciB2YW9FeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fX3Zhb0NhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFvID0gdGhpcy5fX3Zhb0NhY2hlW2lkXS52YW87XHJcbiAgICAgICAgICAgICAgICBpZiAodmFvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFvRXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHZhbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fX3Zhb0NhY2hlID0ge307XHJcbiAgICAgICAgY2FjaGUuZGVsZXRlQ29udGV4dChyZW5kZXJlci5fX3VpZF9fKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuR2VvbWV0cnkuU1RBVElDX0RSQVcgPSBHZW9tZXRyeUJhc2UuU1RBVElDX0RSQVc7XHJcbkdlb21ldHJ5LkRZTkFNSUNfRFJBVyA9IEdlb21ldHJ5QmFzZS5EWU5BTUlDX0RSQVc7XHJcbkdlb21ldHJ5LlNUUkVBTV9EUkFXID0gR2VvbWV0cnlCYXNlLlNUUkVBTV9EUkFXO1xyXG5cclxuR2VvbWV0cnkuQXR0cmlidXRlQnVmZmVyID0gR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZUJ1ZmZlcjtcclxuR2VvbWV0cnkuSW5kaWNlc0J1ZmZlciA9IEdlb21ldHJ5QmFzZS5JbmRpY2VzQnVmZmVyO1xyXG5cclxuR2VvbWV0cnkuQXR0cmlidXRlID0gQXR0cmlidXRlO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgR2VvbWV0cnk7XHJcbiIsImltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5nZW9tZXRyeS5QbGFuZVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC53aWR0aFNlZ21lbnRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5oZWlnaHRTZWdtZW50c11cclxuICovXHJcbnZhciBQbGFuZSA9IEdlb21ldHJ5LmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5Lmdlb21ldHJ5LlBsYW5lIyAqL1xyXG57XHJcbiAgICBkeW5hbWljOiBmYWxzZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd2lkdGhTZWdtZW50czogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaGVpZ2h0U2VnbWVudHM6IDFcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5QbGFuZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCBwbGFuZSBnZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICBidWlsZDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGhlaWdodFNlZ21lbnRzID0gdGhpcy5oZWlnaHRTZWdtZW50cztcclxuICAgICAgICB2YXIgd2lkdGhTZWdtZW50cyA9IHRoaXMud2lkdGhTZWdtZW50cztcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gW107XHJcbiAgICAgICAgdmFyIHRleGNvb3JkcyA9IFtdO1xyXG4gICAgICAgIHZhciBub3JtYWxzID0gW107XHJcbiAgICAgICAgdmFyIGZhY2VzID0gW107XHJcblxyXG4gICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDw9IGhlaWdodFNlZ21lbnRzOyB5KyspIHtcclxuICAgICAgICAgICAgdmFyIHQgPSB5IC8gaGVpZ2h0U2VnbWVudHM7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDw9IHdpZHRoU2VnbWVudHM7IHgrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHMgPSB4IC8gd2lkdGhTZWdtZW50cztcclxuXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChbMiAqIHMgLSAxLCAyICogdCAtIDEsIDBdKTtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXhjb29yZHMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXhjb29yZHMucHVzaChbcywgdF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBub3JtYWxzLnB1c2goWzAsIDAsIDFdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh4IDwgd2lkdGhTZWdtZW50cyAmJiB5IDwgaGVpZ2h0U2VnbWVudHMpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHggKyB5ICogKHdpZHRoU2VnbWVudHMgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKFtpLCBpICsgMSwgaSArIHdpZHRoU2VnbWVudHMgKyAxXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFjZXMucHVzaChbaSArIHdpZHRoU2VnbWVudHMgKyAxLCBpICsgMSwgaSArIHdpZHRoU2VnbWVudHMgKyAyXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF0dHJpYnV0ZXMucG9zaXRpb24uZnJvbUFycmF5KHBvc2l0aW9ucyk7XHJcbiAgICAgICAgYXR0cmlidXRlcy50ZXhjb29yZDAuZnJvbUFycmF5KHRleGNvb3Jkcyk7XHJcbiAgICAgICAgYXR0cmlidXRlcy5ub3JtYWwuZnJvbUFycmF5KG5vcm1hbHMpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRJbmRpY2VzRnJvbUFycmF5KGZhY2VzKTtcclxuXHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldCgtMSwgLTEsIDApO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWF4LnNldCgxLCAxLCAwKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQbGFuZTtcclxuIiwiaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IFBsYW5lIGZyb20gJy4vUGxhbmUnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5cclxudmFyIHBsYW5lTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5nZW9tZXRyeS5DdWJlXHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LndpZHRoU2VnbWVudHNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmhlaWdodFNlZ21lbnRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5kZXB0aFNlZ21lbnRzXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHQuaW5zaWRlXVxyXG4gKi9cclxudmFyIEN1YmUgPSBHZW9tZXRyeS5leHRlbmQoXHJcbi8qKkBsZW5kcyBjbGF5Lmdlb21ldHJ5LkN1YmUjICovXHJcbntcclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB3aWR0aFNlZ21lbnRzOiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBoZWlnaHRTZWdtZW50czogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGVwdGhTZWdtZW50czogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGluc2lkZTogZmFsc2VcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5DdWJlLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGN1YmUgZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgcGxhbmVzID0ge1xyXG4gICAgICAgICAgICAncHgnOiBjcmVhdGVQbGFuZSgncHgnLCB0aGlzLmRlcHRoU2VnbWVudHMsIHRoaXMuaGVpZ2h0U2VnbWVudHMpLFxyXG4gICAgICAgICAgICAnbngnOiBjcmVhdGVQbGFuZSgnbngnLCB0aGlzLmRlcHRoU2VnbWVudHMsIHRoaXMuaGVpZ2h0U2VnbWVudHMpLFxyXG4gICAgICAgICAgICAncHknOiBjcmVhdGVQbGFuZSgncHknLCB0aGlzLndpZHRoU2VnbWVudHMsIHRoaXMuZGVwdGhTZWdtZW50cyksXHJcbiAgICAgICAgICAgICdueSc6IGNyZWF0ZVBsYW5lKCdueScsIHRoaXMud2lkdGhTZWdtZW50cywgdGhpcy5kZXB0aFNlZ21lbnRzKSxcclxuICAgICAgICAgICAgJ3B6JzogY3JlYXRlUGxhbmUoJ3B6JywgdGhpcy53aWR0aFNlZ21lbnRzLCB0aGlzLmhlaWdodFNlZ21lbnRzKSxcclxuICAgICAgICAgICAgJ256JzogY3JlYXRlUGxhbmUoJ256JywgdGhpcy53aWR0aFNlZ21lbnRzLCB0aGlzLmhlaWdodFNlZ21lbnRzKSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgYXR0ckxpc3QgPSBbJ3Bvc2l0aW9uJywgJ3RleGNvb3JkMCcsICdub3JtYWwnXTtcclxuICAgICAgICB2YXIgdmVydGV4TnVtYmVyID0gMDtcclxuICAgICAgICB2YXIgZmFjZU51bWJlciA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgcG9zIGluIHBsYW5lcykge1xyXG4gICAgICAgICAgICB2ZXJ0ZXhOdW1iZXIgKz0gcGxhbmVzW3Bvc10udmVydGV4Q291bnQ7XHJcbiAgICAgICAgICAgIGZhY2VOdW1iZXIgKz0gcGxhbmVzW3Bvc10uaW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYXR0ckxpc3QubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2F0dHJMaXN0W2tdXS5pbml0KHZlcnRleE51bWJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW5kaWNlcyA9IG5ldyB2ZW5kb3IuVWludDE2QXJyYXkoZmFjZU51bWJlcik7XHJcbiAgICAgICAgdmFyIGZhY2VPZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciB2ZXJ0ZXhPZmZzZXQgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIHBvcyBpbiBwbGFuZXMpIHtcclxuICAgICAgICAgICAgdmFyIHBsYW5lID0gcGxhbmVzW3Bvc107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYXR0ckxpc3QubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyTmFtZSA9IGF0dHJMaXN0W2tdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJBcnJheSA9IHBsYW5lLmF0dHJpYnV0ZXNbYXR0ck5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJTaXplID0gcGxhbmUuYXR0cmlidXRlc1thdHRyTmFtZV0uc2l6ZTtcclxuICAgICAgICAgICAgICAgIHZhciBpc05vcm1hbCA9IGF0dHJOYW1lID09PSAnbm9ybWFsJztcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0ckFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gYXR0ckFycmF5W2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluc2lkZSAmJiBpc05vcm1hbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IC12YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzW2F0dHJOYW1lXS52YWx1ZVtpICsgYXR0clNpemUgKiB2ZXJ0ZXhPZmZzZXRdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGxlbiA9IHBsYW5lLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYW5lLmluZGljZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5kaWNlc1tpICsgZmFjZU9mZnNldF0gPSB2ZXJ0ZXhPZmZzZXQgKyBwbGFuZS5pbmRpY2VzW3RoaXMuaW5zaWRlID8gKGxlbiAtIGkgLSAxKSA6IGldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZhY2VPZmZzZXQgKz0gcGxhbmUuaW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIHZlcnRleE9mZnNldCArPSBwbGFuZS52ZXJ0ZXhDb3VudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1heC5zZXQoMSwgMSwgMSk7XHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5taW4uc2V0KC0xLCAtMSwgLTEpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVBsYW5lKHBvcywgd2lkdGhTZWdtZW50cywgaGVpZ2h0U2VnbWVudHMpIHtcclxuXHJcbiAgICBwbGFuZU1hdHJpeC5pZGVudGl0eSgpO1xyXG5cclxuICAgIHZhciBwbGFuZSA9IG5ldyBQbGFuZSh7XHJcbiAgICAgICAgd2lkdGhTZWdtZW50czogd2lkdGhTZWdtZW50cyxcclxuICAgICAgICBoZWlnaHRTZWdtZW50czogaGVpZ2h0U2VnbWVudHNcclxuICAgIH0pO1xyXG5cclxuICAgIHN3aXRjaChwb3MpIHtcclxuICAgICAgICBjYXNlICdweCc6XHJcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5QT1NJVElWRV9YKTtcclxuICAgICAgICAgICAgTWF0cml4NC5yb3RhdGVZKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgTWF0aC5QSSAvIDIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdueCc6XHJcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5ORUdBVElWRV9YKTtcclxuICAgICAgICAgICAgTWF0cml4NC5yb3RhdGVZKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgLU1hdGguUEkgLyAyKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAncHknOlxyXG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuUE9TSVRJVkVfWSk7XHJcbiAgICAgICAgICAgIE1hdHJpeDQucm90YXRlWChwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIC1NYXRoLlBJIC8gMik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ255JzpcclxuICAgICAgICAgICAgTWF0cml4NC50cmFuc2xhdGUocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgICAgICAgICBNYXRyaXg0LnJvdGF0ZVgocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBNYXRoLlBJIC8gMik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3B6JzpcclxuICAgICAgICAgICAgTWF0cml4NC50cmFuc2xhdGUocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBWZWN0b3IzLlBPU0lUSVZFX1opO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdueic6XHJcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5ORUdBVElWRV9aKTtcclxuICAgICAgICAgICAgTWF0cml4NC5yb3RhdGVZKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgTWF0aC5QSSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcGxhbmUuYXBwbHlUcmFuc2Zvcm0ocGxhbmVNYXRyaXgpO1xyXG4gICAgcmV0dXJuIHBsYW5lO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDdWJlO1xyXG4iLCJpbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuU3BoZXJlXHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtoZWlnaHRTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwaGlTdGFydF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwaGlMZW5ndGhdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbdGhldGFTdGFydF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFt0aGV0YUxlbmd0aF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtyYWRpdXNdXHJcbiAqL1xyXG52YXIgU3BoZXJlID0gR2VvbWV0cnkuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5TcGhlcmUjICovIHtcclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB3aWR0aFNlZ21lbnRzOiA0MCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaGVpZ2h0U2VnbWVudHM6IDIwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcGhpU3RhcnQ6IDAsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHBoaUxlbmd0aDogTWF0aC5QSSAqIDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGV0YVN0YXJ0OiAwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGV0YUxlbmd0aDogTWF0aC5QSSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJhZGl1czogMVxyXG5cclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5TcGhlcmUucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgc3BoZXJlIGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGJ1aWxkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgaGVpZ2h0U2VnbWVudHMgPSB0aGlzLmhlaWdodFNlZ21lbnRzO1xyXG4gICAgICAgIHZhciB3aWR0aFNlZ21lbnRzID0gdGhpcy53aWR0aFNlZ21lbnRzO1xyXG5cclxuICAgICAgICB2YXIgcG9zaXRpb25BdHRyID0gdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciB0ZXhjb29yZEF0dHIgPSB0aGlzLmF0dHJpYnV0ZXMudGV4Y29vcmQwO1xyXG4gICAgICAgIHZhciBub3JtYWxBdHRyID0gdGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtcclxuXHJcbiAgICAgICAgdmFyIHZlcnRleENvdW50ID0gKHdpZHRoU2VnbWVudHMgKyAxKSAqIChoZWlnaHRTZWdtZW50cyArIDEpO1xyXG4gICAgICAgIHBvc2l0aW9uQXR0ci5pbml0KHZlcnRleENvdW50KTtcclxuICAgICAgICB0ZXhjb29yZEF0dHIuaW5pdCh2ZXJ0ZXhDb3VudCk7XHJcbiAgICAgICAgbm9ybWFsQXR0ci5pbml0KHZlcnRleENvdW50KTtcclxuXHJcbiAgICAgICAgdmFyIEluZGljZXNDdG9yID0gdmVydGV4Q291bnQgPiAweGZmZmYgPyBVaW50MzJBcnJheSA6IFVpbnQxNkFycmF5O1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzID0gbmV3IEluZGljZXNDdG9yKHdpZHRoU2VnbWVudHMgKiBoZWlnaHRTZWdtZW50cyAqIDYpO1xyXG5cclxuICAgICAgICB2YXIgeCwgeSwgeixcclxuICAgICAgICAgICAgdSwgdixcclxuICAgICAgICAgICAgaSwgajtcclxuXHJcbiAgICAgICAgdmFyIHJhZGl1cyA9IHRoaXMucmFkaXVzO1xyXG4gICAgICAgIHZhciBwaGlTdGFydCA9IHRoaXMucGhpU3RhcnQ7XHJcbiAgICAgICAgdmFyIHBoaUxlbmd0aCA9IHRoaXMucGhpTGVuZ3RoO1xyXG4gICAgICAgIHZhciB0aGV0YVN0YXJ0ID0gdGhpcy50aGV0YVN0YXJ0O1xyXG4gICAgICAgIHZhciB0aGV0YUxlbmd0aCA9IHRoaXMudGhldGFMZW5ndGg7XHJcbiAgICAgICAgdmFyIHJhZGl1cyA9IHRoaXMucmFkaXVzO1xyXG5cclxuICAgICAgICB2YXIgcG9zID0gW107XHJcbiAgICAgICAgdmFyIHV2ID0gW107XHJcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XHJcbiAgICAgICAgdmFyIGRpdmlkZXIgPSAxIC8gcmFkaXVzO1xyXG4gICAgICAgIGZvciAoaiA9IDA7IGogPD0gaGVpZ2h0U2VnbWVudHM7IGogKyspIHtcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8PSB3aWR0aFNlZ21lbnRzOyBpICsrKSB7XHJcbiAgICAgICAgICAgICAgICB1ID0gaSAvIHdpZHRoU2VnbWVudHM7XHJcbiAgICAgICAgICAgICAgICB2ID0gaiAvIGhlaWdodFNlZ21lbnRzO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFggYXhpcyBpcyBpbnZlcnRlZCBzbyB0ZXh0dXJlIGNhbiBiZSBtYXBwZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0XHJcbiAgICAgICAgICAgICAgICB4ID0gLXJhZGl1cyAqIE1hdGguY29zKHBoaVN0YXJ0ICsgdSAqIHBoaUxlbmd0aCkgKiBNYXRoLnNpbih0aGV0YVN0YXJ0ICsgdiAqIHRoZXRhTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHkgPSByYWRpdXMgKiBNYXRoLmNvcyh0aGV0YVN0YXJ0ICsgdiAqIHRoZXRhTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHogPSByYWRpdXMgKiBNYXRoLnNpbihwaGlTdGFydCArIHUgKiBwaGlMZW5ndGgpICogTWF0aC5zaW4odGhldGFTdGFydCArIHYgKiB0aGV0YUxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcG9zWzBdID0geDsgcG9zWzFdID0geTsgcG9zWzJdID0gejtcclxuICAgICAgICAgICAgICAgIHV2WzBdID0gdTsgdXZbMV0gPSB2O1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25BdHRyLnNldChvZmZzZXQsIHBvcyk7XHJcbiAgICAgICAgICAgICAgICB0ZXhjb29yZEF0dHIuc2V0KG9mZnNldCwgdXYpO1xyXG4gICAgICAgICAgICAgICAgcG9zWzBdICo9IGRpdmlkZXI7XHJcbiAgICAgICAgICAgICAgICBwb3NbMV0gKj0gZGl2aWRlcjtcclxuICAgICAgICAgICAgICAgIHBvc1syXSAqPSBkaXZpZGVyO1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsQXR0ci5zZXQob2Zmc2V0LCBwb3MpO1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0Kys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpMSwgaTIsIGkzLCBpNDtcclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IHdpZHRoU2VnbWVudHMgKyAxO1xyXG5cclxuICAgICAgICB2YXIgbiA9IDA7XHJcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGhlaWdodFNlZ21lbnRzOyBqICsrKSB7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB3aWR0aFNlZ21lbnRzOyBpICsrKSB7XHJcbiAgICAgICAgICAgICAgICBpMiA9IGogKiBsZW4gKyBpO1xyXG4gICAgICAgICAgICAgICAgaTEgPSAoaiAqIGxlbiArIGkgKyAxKTtcclxuICAgICAgICAgICAgICAgIGk0ID0gKGogKyAxKSAqIGxlbiArIGkgKyAxO1xyXG4gICAgICAgICAgICAgICAgaTMgPSAoaiArIDEpICogbGVuICsgaTtcclxuXHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMTtcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGkyO1xyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTQ7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTI7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMztcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGk0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5tYXguc2V0KHJhZGl1cywgcmFkaXVzLCByYWRpdXMpO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldCgtcmFkaXVzLCAtcmFkaXVzLCAtcmFkaXVzKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTcGhlcmU7XHJcbiIsImltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuUGFyYW1ldHJpY1N1cmZhY2VcclxuICogQGV4dGVuZHMgY2xheS5HZW9tZXRyeVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdF1cclxuICogQHBhcmFtIHtPYmplY3R9IFtnZW5lcmF0b3JdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdlbmVyYXRvci54XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdlbmVyYXRvci55XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdlbmVyYXRvci56XHJcbiAqIEBwYXJhbSB7QXJyYXl9IFtnZW5lcmF0b3IudT1bMCwgMSwgMC4wNV1dXHJcbiAqIEBwYXJhbSB7QXJyYXl9IFtnZW5lcmF0b3Iudj1bMCwgMSwgMC4wNV1dXHJcbiAqL1xyXG52YXIgUGFyYW1ldHJpY1N1cmZhY2UgPSBHZW9tZXRyeS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5QYXJhbWV0cmljU3VyZmFjZSMgKi9cclxue1xyXG4gICAgZHluYW1pYzogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRvcjogbnVsbFxyXG5cclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5QYXJhbWV0cmljU3VyZmFjZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCBwYXJhbWV0cmljIHN1cmZhY2UgZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgYnVpbGQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZ2VuZXJhdG9yID0gdGhpcy5nZW5lcmF0b3I7XHJcblxyXG4gICAgICAgIGlmICghZ2VuZXJhdG9yIHx8ICFnZW5lcmF0b3IueCB8fCAhZ2VuZXJhdG9yLnkgfHwgIWdlbmVyYXRvci56KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBnZW5lcmF0b3InKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHhGdW5jID0gZ2VuZXJhdG9yLng7XHJcbiAgICAgICAgdmFyIHlGdW5jID0gZ2VuZXJhdG9yLnk7XHJcbiAgICAgICAgdmFyIHpGdW5jID0gZ2VuZXJhdG9yLno7XHJcbiAgICAgICAgdmFyIHVSYW5nZSA9IGdlbmVyYXRvci51IHx8IFswLCAxLCAwLjA1XTtcclxuICAgICAgICB2YXIgdlJhbmdlID0gZ2VuZXJhdG9yLnYgfHwgWzAsIDEsIDAuMDVdO1xyXG5cclxuICAgICAgICB2YXIgdU51bSA9IE1hdGguZmxvb3IoKHVSYW5nZVsxXSAtIHVSYW5nZVswXSArIHVSYW5nZVsyXSkgLyB1UmFuZ2VbMl0pO1xyXG4gICAgICAgIHZhciB2TnVtID0gTWF0aC5mbG9vcigodlJhbmdlWzFdIC0gdlJhbmdlWzBdICsgdlJhbmdlWzJdKSAvIHZSYW5nZVsyXSk7XHJcblxyXG4gICAgICAgIGlmICghaXNGaW5pdGUodU51bSkgfHwgIWlzRmluaXRlKHZOdW0pKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5maW5pdGUgZ2VuZXJhdG9yJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdmVydGV4TnVtID0gdU51bSAqIHZOdW07XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLmluaXQodmVydGV4TnVtKTtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMudGV4Y29vcmQwLmluaXQodmVydGV4TnVtKTtcclxuXHJcbiAgICAgICAgdmFyIHBvcyA9IFtdO1xyXG4gICAgICAgIHZhciB0ZXhjb29yZCA9IFtdO1xyXG4gICAgICAgIHZhciBuVmVydGV4ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZOdW07IGorKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVOdW07IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHUgPSBpICogdVJhbmdlWzJdICsgdVJhbmdlWzBdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHYgPSBqICogdlJhbmdlWzJdICsgdlJhbmdlWzBdO1xyXG4gICAgICAgICAgICAgICAgcG9zWzBdID0geEZ1bmModSwgdik7XHJcbiAgICAgICAgICAgICAgICBwb3NbMV0gPSB5RnVuYyh1LCB2KTtcclxuICAgICAgICAgICAgICAgIHBvc1syXSA9IHpGdW5jKHUsIHYpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRleGNvb3JkWzBdID0gaSAvICh1TnVtIC0gMSk7XHJcbiAgICAgICAgICAgICAgICB0ZXhjb29yZFsxXSA9IGogLyAodk51bSAtIDEpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbi5zZXQoblZlcnRleCwgcG9zKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy50ZXhjb29yZDAuc2V0KG5WZXJ0ZXgsIHRleGNvb3JkKTtcclxuICAgICAgICAgICAgICAgIG5WZXJ0ZXgrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIEluZGljZXNDdG9yID0gdmVydGV4TnVtID4gMHhmZmZmID8gVWludDMyQXJyYXkgOiBVaW50MTZBcnJheTtcclxuICAgICAgICB2YXIgbkluZGljZXMgPSAodU51bSAtIDEpICogKHZOdW0gLSAxKSAqIDY7XHJcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXMgPSBuZXcgSW5kaWNlc0N0b3IobkluZGljZXMpO1xyXG5cclxuICAgICAgICB2YXIgbiA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2TnVtIC0gMTsgaisrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdU51bSAtIDE7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGkyID0gaiAqIHVOdW0gKyBpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGkxID0gKGogKiB1TnVtICsgaSArIDEpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGk0ID0gKGogKyAxKSAqIHVOdW0gKyBpICsgMTtcclxuICAgICAgICAgICAgICAgIHZhciBpMyA9IChqICsgMSkgKiB1TnVtICsgaTtcclxuXHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMTtcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGkyO1xyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTQ7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTI7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMztcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGk0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdlbmVyYXRlVmVydGV4Tm9ybWFscygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQm91bmRpbmdCb3goKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQYXJhbWV0cmljU3VyZmFjZTtcclxuIiwiLyoqXHJcbiAqIEJhc2UgY2xhc3MgZm9yIGFsbCB0ZXh0dXJlcyBsaWtlIGNvbXByZXNzZWQgdGV4dHVyZSwgdGV4dHVyZTJkLCB0ZXh0dXJlY3ViZVxyXG4gKiBUT0RPIG1hcHBpbmdcclxuICovXHJcbmltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IENhY2hlIGZyb20gJy4vY29yZS9DYWNoZSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlRleHR1cmVcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBUZXh0dXJlID0gQmFzZS5leHRlbmQoIC8qKiBAbGVuZHMgY2xheS5UZXh0dXJlIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIFRleHR1cmUgd2lkdGgsIHJlYWRvbmx5IHdoZW4gdGhlIHRleHR1cmUgc291cmNlIGlzIGltYWdlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB3aWR0aDogNTEyLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0dXJlIGhlaWdodCwgcmVhZG9ubHkgd2hlbiB0aGUgdGV4dHVyZSBzb3VyY2UgaXMgaW1hZ2VcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodDogNTEyLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXhlbCBkYXRhIHR5cGUuXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlVOU0lHTkVEX0JZVEV9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkhBTEZfRkxPQVR9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkZMT0FUfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuVU5TSUdORURfSU5UfVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdHlwZTogZ2xlbnVtLlVOU0lHTkVEX0JZVEUsXHJcbiAgICAvKipcclxuICAgICAqIEZvcm1hdCBvZiB0ZXhlbCBkYXRhXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlJHQkF9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkRFUFRIX0NPTVBPTkVOVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuREVQVEhfU1RFTkNJTH1cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGZvcm1hdDogZ2xlbnVtLlJHQkEsXHJcbiAgICAvKipcclxuICAgICAqIFRleHR1cmUgd3JhcC4gRGVmYXVsdCB0byBiZSBSRVBFQVQuXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkNMQU1QX1RPX0VER0V9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlJFUEVBVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTUlSUk9SRURfUkVQRUFUfVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd3JhcFM6IGdsZW51bS5SRVBFQVQsXHJcbiAgICAvKipcclxuICAgICAqIFRleHR1cmUgd3JhcC4gRGVmYXVsdCB0byBiZSBSRVBFQVQuXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkNMQU1QX1RPX0VER0V9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlJFUEVBVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTUlSUk9SRURfUkVQRUFUfVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd3JhcFQ6IGdsZW51bS5SRVBFQVQsXHJcbiAgICAvKipcclxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTkVBUkVTVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTElORUFSfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5MSU5FQVJfTUlQTUFQX05FQVJFU1R9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLk5FQVJFU1RfTUlQTUFQX0xJTkVBUn1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTElORUFSX01JUE1BUF9MSU5FQVJ9XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBtaW5GaWx0ZXI6IGdsZW51bS5MSU5FQVJfTUlQTUFQX0xJTkVBUixcclxuICAgIC8qKlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ORUFSRVNUfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5MSU5FQVJ9XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBtYWdGaWx0ZXI6IGdsZW51bS5MSU5FQVIsXHJcbiAgICAvKipcclxuICAgICAqIElmIGVuYWJsZSBtaW1hcC5cclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICB1c2VNaXBtYXA6IHRydWUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbmlzb3Ryb3BpYyBmaWx0ZXJpbmcsIGVuYWJsZWQgaWYgdmFsdWUgaXMgbGFyZ2VyIHRoYW4gMVxyXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBhbmlzb3Ryb3BpYzogMSxcclxuICAgIC8vIHBpeGVsU3RvcmVpIHBhcmFtZXRlcnMsIG5vdCBhdmFpbGFibGUgd2hlbiB0ZXh0dXJlIGlzIHVzZWQgYXMgcmVuZGVyIHRhcmdldFxyXG4gICAgLy8gaHR0cDovL3d3dy5raHJvbm9zLm9yZy9vcGVuZ2xlcy9zZGsvZG9jcy9tYW4veGh0bWwvZ2xQaXhlbFN0b3JlaS54bWxcclxuICAgIC8qKlxyXG4gICAgICogSWYgZmxpcCBpbiB5IGF4aXMgZm9yIGdpdmVuIGltYWdlIHNvdXJjZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICAgKi9cclxuICAgIGZsaXBZOiB0cnVlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBmbGFnIHRvIGluZGljYXRlIGlmIHRleHR1cmUgc291cmNlIGlzIHNSR0JcclxuICAgICAqL1xyXG4gICAgc1JHQjogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBkZWZhdWx0IDRcclxuICAgICAqL1xyXG4gICAgdW5wYWNrQWxpZ25tZW50OiA0LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgKi9cclxuICAgIHByZW11bHRpcGx5QWxwaGE6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHluYW1pYyBvcHRpb24gZm9yIHRleHR1cmUgbGlrZSB2aWRlb1xyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG5cclxuICAgIE5QT1Q6IGZhbHNlLFxyXG5cclxuICAgIC8vIFBFTkRJTkdcclxuICAgIC8vIEluaXQgaXQgaGVyZSB0byBhdm9pZCBkZW9wdGltaXphdGlvbiB3aGVuIGl0J3MgYXNzaWduZWQgaW4gYXBwbGljYXRpb24gZHluYW1pY2FsbHlcclxuICAgIF9fdXNlZDogMFxyXG5cclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fY2FjaGUgPSBuZXcgQ2FjaGUoKTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LlRleHR1cmUucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICBnZXRXZWJHTFRleHR1cmU6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcblxyXG4gICAgICAgIGlmIChjYWNoZS5taXNzKCd3ZWJnbF90ZXh0dXJlJykpIHtcclxuICAgICAgICAgICAgLy8gSW4gYSBuZXcgZ2wgY29udGV4dCwgY3JlYXRlIG5ldyB0ZXh0dXJlIGFuZCBzZXQgZGlydHkgdHJ1ZVxyXG4gICAgICAgICAgICBjYWNoZS5wdXQoJ3dlYmdsX3RleHR1cmUnLCBfZ2wuY3JlYXRlVGV4dHVyZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZHluYW1pYykge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZShyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNhY2hlLmlzRGlydHkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZShyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIGNhY2hlLmZyZXNoKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGJpbmQ6IGZ1bmN0aW9uICgpIHt9LFxyXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAoKSB7fSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmsgdGV4dHVyZSBpcyBkaXJ0eSBhbmQgdXBkYXRlIGluIHRoZSBuZXh0IGZyYW1lXHJcbiAgICAgKi9cclxuICAgIGRpcnR5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NhY2hlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlLmRpcnR5QWxsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChyZW5kZXJlcikge30sXHJcblxyXG4gICAgLy8gVXBkYXRlIHRoZSBjb21tb24gcGFyYW1ldGVycyBvZiB0ZXh0dXJlXHJcbiAgICB1cGRhdGVDb21tb246IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19GTElQX1lfV0VCR0wsIHRoaXMuZmxpcFkpO1xyXG4gICAgICAgIF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0aGlzLnByZW11bHRpcGx5QWxwaGEpO1xyXG4gICAgICAgIF9nbC5waXhlbFN0b3JlaShfZ2wuVU5QQUNLX0FMSUdOTUVOVCwgdGhpcy51bnBhY2tBbGlnbm1lbnQpO1xyXG5cclxuICAgICAgICAvLyBVc2Ugb2Ygbm9uZS1wb3dlciBvZiB0d28gdGV4dHVyZVxyXG4gICAgICAgIC8vIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvd2ViZ2wvd2lraS9XZWJHTF9hbmRfT3BlbkdMX0RpZmZlcmVuY2VzXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ID09PSBnbGVudW0uREVQVEhfQ09NUE9ORU5UKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlTWlwbWFwID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc1JHQkV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfc1JHQicpO1xyXG4gICAgICAgIC8vIEZhbGxiYWNrXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ID09PSBUZXh0dXJlLlNSR0IgJiYgIXNSR0JFeHQpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSBUZXh0dXJlLlJHQjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ID09PSBUZXh0dXJlLlNSR0JfQUxQSEEgJiYgIXNSR0JFeHQpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSBUZXh0dXJlLlJHQkE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLk5QT1QgPSAhdGhpcy5pc1Bvd2VyT2ZUd28oKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0QXZhaWxhYmxlV3JhcFM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5OUE9UKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBnbGVudW0uQ0xBTVBfVE9fRURHRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud3JhcFM7XHJcbiAgICB9LFxyXG4gICAgZ2V0QXZhaWxhYmxlV3JhcFQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5OUE9UKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBnbGVudW0uQ0xBTVBfVE9fRURHRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud3JhcFQ7XHJcbiAgICB9LFxyXG4gICAgZ2V0QXZhaWxhYmxlTWluRmlsdGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG1pbkZpbHRlciA9IHRoaXMubWluRmlsdGVyO1xyXG4gICAgICAgIGlmICh0aGlzLk5QT1QgfHwgIXRoaXMudXNlTWlwbWFwKSB7XHJcbiAgICAgICAgICAgIGlmIChtaW5GaWx0ZXIgPT09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUIHx8XHJcbiAgICAgICAgICAgICAgICBtaW5GaWx0ZXIgPT09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9MSU5FQVJcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2xlbnVtLk5FQVJFU1Q7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobWluRmlsdGVyID09PSBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVIgfHxcclxuICAgICAgICAgICAgICAgIG1pbkZpbHRlciA9PT0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTkVBUkVTVFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBnbGVudW0uTElORUFSO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1pbkZpbHRlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1pbkZpbHRlcjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgZ2V0QXZhaWxhYmxlTWFnRmlsdGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFnRmlsdGVyO1xyXG4gICAgfSxcclxuXHJcbiAgICBuZXh0SGlnaGVzdFBvd2VyT2ZUd286IGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgLS14O1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgMzI7IGkgPDw9IDEpIHtcclxuICAgICAgICAgICAgeCA9IHggfCB4ID4+IGk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB4ICsgMTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG5cclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuXHJcbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG5cclxuICAgICAgICB2YXIgd2ViZ2xUZXh0dXJlID0gY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJyk7XHJcbiAgICAgICAgaWYgKHdlYmdsVGV4dHVyZSl7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLmdsLmRlbGV0ZVRleHR1cmUod2ViZ2xUZXh0dXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FjaGUuZGVsZXRlQ29udGV4dChyZW5kZXJlci5fX3VpZF9fKTtcclxuXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXN0IGlmIGltYWdlIG9mIHRleHR1cmUgaXMgdmFsaWQgYW5kIGxvYWRlZC5cclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzUmVuZGVyYWJsZTogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXN0IGlmIHRleHR1cmUgc2l6ZSBpcyBwb3dlciBvZiB0d29cclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzUG93ZXJPZlR3bzogZnVuY3Rpb24gKCkge31cclxufSk7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZS5wcm90b3R5cGUsICd3aWR0aCcsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XHJcbiAgICB9XHJcbn0pO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZS5wcm90b3R5cGUsICdoZWlnaHQnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyogRGF0YVR5cGUgKi9cclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5CWVRFID0gZ2xlbnVtLkJZVEU7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5VTlNJR05FRF9CWVRFID0gZ2xlbnVtLlVOU0lHTkVEX0JZVEU7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5TSE9SVCA9IGdsZW51bS5TSE9SVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlVOU0lHTkVEX1NIT1JUID0gZ2xlbnVtLlVOU0lHTkVEX1NIT1JUO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuSU5UID0gZ2xlbnVtLklOVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlVOU0lHTkVEX0lOVCA9IGdsZW51bS5VTlNJR05FRF9JTlQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5GTE9BVCA9IGdsZW51bS5GTE9BVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkhBTEZfRkxPQVQgPSAweDhENjE7XHJcblxyXG4vKipcclxuICogVU5TSUdORURfSU5UXzI0XzhfV0VCR0wgZm9yIFdFQkdMX2RlcHRoX3RleHR1cmUgZXh0ZW5zaW9uXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMID0gMzQwNDI7XHJcblxyXG4vKiBQaXhlbEZvcm1hdCAqL1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuREVQVEhfQ09NUE9ORU5UID0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkRFUFRIX1NURU5DSUwgPSBnbGVudW0uREVQVEhfU1RFTkNJTDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkFMUEhBID0gZ2xlbnVtLkFMUEhBO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuUkdCID0gZ2xlbnVtLlJHQjtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlJHQkEgPSBnbGVudW0uUkdCQTtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkxVTUlOQU5DRSA9IGdsZW51bS5MVU1JTkFOQ0U7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5MVU1JTkFOQ0VfQUxQSEEgPSBnbGVudW0uTFVNSU5BTkNFX0FMUEhBO1xyXG5cclxuLyoqXHJcbiAqIEBzZWUgaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvZXh0ZW5zaW9ucy9FWFRfc1JHQi9cclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuU1JHQiA9IDB4OEM0MDtcclxuLyoqXHJcbiAqIEBzZWUgaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvZXh0ZW5zaW9ucy9FWFRfc1JHQi9cclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuU1JHQl9BTFBIQSA9IDB4OEM0MjtcclxuXHJcbi8qIENvbXByZXNzZWQgVGV4dHVyZSAqL1xyXG5UZXh0dXJlLkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQgPSAweDgzRjA7XHJcblRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQgPSAweDgzRjE7XHJcblRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQgPSAweDgzRjI7XHJcblRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQgPSAweDgzRjM7XHJcblxyXG4vKiBUZXh0dXJlTWFnRmlsdGVyICovXHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5ORUFSRVNUID0gZ2xlbnVtLk5FQVJFU1Q7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5MSU5FQVIgPSBnbGVudW0uTElORUFSO1xyXG5cclxuLyogVGV4dHVyZU1pbkZpbHRlciAqL1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCA9IGdsZW51bS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTElORUFSX01JUE1BUF9ORUFSRVNUID0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTkVBUkVTVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLk5FQVJFU1RfTUlQTUFQX0xJTkVBUiA9IGdsZW51bS5ORUFSRVNUX01JUE1BUF9MSU5FQVI7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5MSU5FQVJfTUlQTUFQX0xJTkVBUiA9IGdsZW51bS5MSU5FQVJfTUlQTUFQX0xJTkVBUjtcclxuXHJcbi8qIFRleHR1cmVXcmFwTW9kZSAqL1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuUkVQRUFUID0gZ2xlbnVtLlJFUEVBVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkNMQU1QX1RPX0VER0UgPSBnbGVudW0uQ0xBTVBfVE9fRURHRTtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLk1JUlJPUkVEX1JFUEVBVCA9IGdsZW51bS5NSVJST1JFRF9SRVBFQVQ7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZTtcclxuIiwidmFyIG1hdGhVdGlsID0ge307XHJcblxyXG5tYXRoVXRpbC5pc1Bvd2VyT2ZUd28gPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHJldHVybiAodmFsdWUgJiAodmFsdWUgLSAxKSkgPT09IDA7XHJcbn07XHJcblxyXG5tYXRoVXRpbC5uZXh0UG93ZXJPZlR3byA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgdmFsdWUgLS07XHJcbiAgICB2YWx1ZSB8PSB2YWx1ZSA+PiAxO1xyXG4gICAgdmFsdWUgfD0gdmFsdWUgPj4gMjtcclxuICAgIHZhbHVlIHw9IHZhbHVlID4+IDQ7XHJcbiAgICB2YWx1ZSB8PSB2YWx1ZSA+PiA4O1xyXG4gICAgdmFsdWUgfD0gdmFsdWUgPj4gMTY7XHJcbiAgICB2YWx1ZSArKztcclxuXHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn07XHJcblxyXG5tYXRoVXRpbC5uZWFyZXN0UG93ZXJPZlR3byA9IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIE1hdGgucG93KCAyLCBNYXRoLnJvdW5kKCBNYXRoLmxvZyggdmFsdWUgKSAvIE1hdGguTE4yICkgKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG1hdGhVdGlsO1xyXG4iLCJpbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgbWF0aFV0aWwgZnJvbSAnLi9tYXRoL3V0aWwnO1xyXG52YXIgaXNQb3dlck9mVHdvID0gbWF0aFV0aWwuaXNQb3dlck9mVHdvO1xyXG5cclxuZnVuY3Rpb24gbmVhcmVzdFBvd2VyT2ZUd28odmFsKSB7XHJcbiAgICByZXR1cm4gTWF0aC5wb3coMiwgTWF0aC5yb3VuZChNYXRoLmxvZyh2YWwpIC8gTWF0aC5MTjIpKTtcclxufVxyXG5mdW5jdGlvbiBjb252ZXJ0VGV4dHVyZVRvUG93ZXJPZlR3byh0ZXh0dXJlLCBjYW52YXMpIHtcclxuICAgIC8vIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciB3aWR0aCA9IG5lYXJlc3RQb3dlck9mVHdvKHRleHR1cmUud2lkdGgpO1xyXG4gICAgdmFyIGhlaWdodCA9IG5lYXJlc3RQb3dlck9mVHdvKHRleHR1cmUuaGVpZ2h0KTtcclxuICAgIGNhbnZhcyA9IGNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcclxuICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGN0eC5kcmF3SW1hZ2UodGV4dHVyZS5pbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgcmV0dXJuIGNhbnZhcztcclxufVxyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlRleHR1cmUyRFxyXG4gKiBAZXh0ZW5kcyBjbGF5LlRleHR1cmVcclxuICpcclxuICogQGV4YW1wbGVcclxuICogICAgIC4uLlxyXG4gKiAgICAgdmFyIG1hdCA9IG5ldyBjbGF5Lk1hdGVyaWFsKHtcclxuICogICAgICAgICBzaGFkZXI6IGNsYXkuc2hhZGVyLmxpYnJhcnkuZ2V0KCdjbGF5LnBob25nJywgJ2RpZmZ1c2VNYXAnKVxyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgZGlmZnVzZU1hcCA9IG5ldyBjbGF5LlRleHR1cmUyRCgpO1xyXG4gKiAgICAgZGlmZnVzZU1hcC5sb2FkKCdhc3NldHMvdGV4dHVyZXMvZGlmZnVzZS5qcGcnKTtcclxuICogICAgIG1hdC5zZXQoJ2RpZmZ1c2VNYXAnLCBkaWZmdXNlTWFwKTtcclxuICogICAgIC4uLlxyXG4gKiAgICAgZGlmZnVzZU1hcC5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICogICAgICAgICAvLyBXYWl0IGZvciB0aGUgZGlmZnVzZSB0ZXh0dXJlIGxvYWRlZFxyXG4gKiAgICAgICAgIGFuaW1hdGlvbi5vbignZnJhbWUnLCBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcbiAqICAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTtcclxuICogICAgICAgICB9KTtcclxuICogICAgIH0pO1xyXG4gKi9cclxudmFyIFRleHR1cmUyRCA9IFRleHR1cmUuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuVGV4dHVyZTJEIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUgez9IVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtbmV0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIC8vIFRPRE8gbWFyayBkaXJ0eSB3aGVuIGFzc2lnbmVkLlxyXG4gICAgICAgIGltYWdlOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFBpeGVscyBkYXRhLiBXaWxsIGJlIGlnbm9yZWQgaWYgaW1hZ2UgaXMgc2V0LlxyXG4gICAgICAgICAqIEB0eXBlIHs/VWludDhBcnJheXxGbG9hdDMyQXJyYXl9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcGl4ZWxzOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48T2JqZWN0Pn1cclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqICAgICBbe1xyXG4gICAgICAgICAqICAgICAgICAgaW1hZ2U6IG1pcG1hcDAsXHJcbiAgICAgICAgICogICAgICAgICBwaXhlbHM6IG51bGxcclxuICAgICAgICAgKiAgICAgfSwge1xyXG4gICAgICAgICAqICAgICAgICAgaW1hZ2U6IG1pcG1hcDEsXHJcbiAgICAgICAgICogICAgICAgICBwaXhlbHM6IG51bGxcclxuICAgICAgICAgKiAgICAgfSwgLi4uLl1cclxuICAgICAgICAgKi9cclxuICAgICAgICBtaXBtYXBzOiBbXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgY29udmVydCB0ZXh0dXJlIHRvIHBvd2VyLW9mLXR3b1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnZlcnRUb1BPVDogZmFsc2VcclxuICAgIH07XHJcbn0sIHtcclxuXHJcbiAgICB0ZXh0dXJlVHlwZTogJ3RleHR1cmUyRCcsXHJcblxyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV8yRCwgdGhpcy5fY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJykpO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUNvbW1vbihyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHZhciBnbEZvcm1hdCA9IHRoaXMuZm9ybWF0O1xyXG4gICAgICAgIHZhciBnbFR5cGUgPSB0aGlzLnR5cGU7XHJcblxyXG4gICAgICAgIC8vIENvbnZlcnQgdG8gcG90IGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gdXNpbmcgaW1hZ2UvY2FudmFzL3ZpZGVvIGVsZW1lbnQuXHJcbiAgICAgICAgdmFyIGNvbnZlcnRUb1BPVCA9ICEhKHRoaXMuY29udmVydFRvUE9UXHJcbiAgICAgICAgICAgICYmICF0aGlzLm1pcG1hcHMubGVuZ3RoICYmIHRoaXMuaW1hZ2VcclxuICAgICAgICAgICAgJiYgKHRoaXMud3JhcFMgPT09IFRleHR1cmUuUkVQRUFUIHx8IHRoaXMud3JhcFQgPT09IFRleHR1cmUuUkVQRUFUKVxyXG4gICAgICAgICAgICAmJiB0aGlzLk5QT1RcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV8yRCwgX2dsLlRFWFRVUkVfV1JBUF9TLCBjb252ZXJ0VG9QT1QgPyB0aGlzLndyYXBTIDogdGhpcy5nZXRBdmFpbGFibGVXcmFwUygpKTtcclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV8yRCwgX2dsLlRFWFRVUkVfV1JBUF9ULCBjb252ZXJ0VG9QT1QgPyB0aGlzLndyYXBUIDogdGhpcy5nZXRBdmFpbGFibGVXcmFwVCgpKTtcclxuXHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfMkQsIF9nbC5URVhUVVJFX01BR19GSUxURVIsIGNvbnZlcnRUb1BPVCA/IHRoaXMubWFnRmlsdGVyIDogdGhpcy5nZXRBdmFpbGFibGVNYWdGaWx0ZXIoKSk7XHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfMkQsIF9nbC5URVhUVVJFX01JTl9GSUxURVIsIGNvbnZlcnRUb1BPVCA/IHRoaXMubWluRmlsdGVyIDogdGhpcy5nZXRBdmFpbGFibGVNaW5GaWx0ZXIoKSk7XHJcblxyXG4gICAgICAgIHZhciBhbmlzb3Ryb3BpY0V4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKTtcclxuICAgICAgICBpZiAoYW5pc290cm9waWNFeHQgJiYgdGhpcy5hbmlzb3Ryb3BpYyA+IDEpIHtcclxuICAgICAgICAgICAgX2dsLnRleFBhcmFtZXRlcmYoX2dsLlRFWFRVUkVfMkQsIGFuaXNvdHJvcGljRXh0LlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULCB0aGlzLmFuaXNvdHJvcGljKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIGZsb2F0IHR5cGUgaWYgYnJvd3NlciBkb24ndCBoYXZlIGhhbGYgZmxvYXQgZXh0ZW5zaW9uXHJcbiAgICAgICAgaWYgKGdsVHlwZSA9PT0gMzYxOTMpIHtcclxuICAgICAgICAgICAgdmFyIGhhbGZGbG9hdEV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Jyk7XHJcbiAgICAgICAgICAgIGlmICghaGFsZkZsb2F0RXh0KSB7XHJcbiAgICAgICAgICAgICAgICBnbFR5cGUgPSBnbGVudW0uRkxPQVQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1pcG1hcHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1pcG1hcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBtaXBtYXAgPSB0aGlzLm1pcG1hcHNbaV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVUZXh0dXJlRGF0YShfZ2wsIG1pcG1hcCwgaSwgd2lkdGgsIGhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgd2lkdGggLz0gMjtcclxuICAgICAgICAgICAgICAgIGhlaWdodCAvPSAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVUZXh0dXJlRGF0YShfZ2wsIHRoaXMsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlLCBjb252ZXJ0VG9QT1QpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMudXNlTWlwbWFwICYmICghdGhpcy5OUE9UIHx8IGNvbnZlcnRUb1BPVCkpIHtcclxuICAgICAgICAgICAgICAgIF9nbC5nZW5lcmF0ZU1pcG1hcChfZ2wuVEVYVFVSRV8yRCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV8yRCwgbnVsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVUZXh0dXJlRGF0YTogZnVuY3Rpb24gKF9nbCwgZGF0YSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIGNvbnZlcnRUb1BPVCkge1xyXG4gICAgICAgIGlmIChkYXRhLmltYWdlKSB7XHJcbiAgICAgICAgICAgIHZhciBpbWdEYXRhID0gZGF0YS5pbWFnZTtcclxuICAgICAgICAgICAgaWYgKGNvbnZlcnRUb1BPVCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcG90Q2FudmFzID0gY29udmVydFRleHR1cmVUb1Bvd2VyT2ZUd28odGhpcywgdGhpcy5fcG90Q2FudmFzKTtcclxuICAgICAgICAgICAgICAgIGltZ0RhdGEgPSB0aGlzLl9wb3RDYW52YXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgX2dsLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfMkQsIGxldmVsLCBnbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1nRGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBDYW4gYmUgdXNlZCBhcyBhIGJsYW5rIHRleHR1cmUgd2hlbiB3cml0aW5nIHJlbmRlciB0byB0ZXh0dXJlKFJUVClcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgZ2xGb3JtYXQgPD0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVFxyXG4gICAgICAgICAgICAgICAgJiYgZ2xGb3JtYXQgPj0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgX2dsLmNvbXByZXNzZWRUZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgZ2xGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGRhdGEucGl4ZWxzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIElzIGEgcmVuZGVyIHRhcmdldCBpZiBwaXhlbHMgaXMgbnVsbFxyXG4gICAgICAgICAgICAgICAgX2dsLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfMkQsIGxldmVsLCBnbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgZGF0YS5waXhlbHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5UZXh0dXJlMkQucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlTWlwbWFwOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlTWlwbWFwICYmICF0aGlzLk5QT1QpIHtcclxuICAgICAgICAgICAgX2dsLmJpbmRUZXh0dXJlKF9nbC5URVhUVVJFXzJELCB0aGlzLl9jYWNoZS5nZXQoJ3dlYmdsX3RleHR1cmUnKSk7XHJcbiAgICAgICAgICAgIF9nbC5nZW5lcmF0ZU1pcG1hcChfZ2wuVEVYVFVSRV8yRCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gaXNQb3dlck9mVHdvKHRoaXMud2lkdGgpICYmIGlzUG93ZXJPZlR3byh0aGlzLmhlaWdodCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGlzUmVuZGVyYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlLndpZHRoID4gMCAmJiB0aGlzLmltYWdlLmhlaWdodCA+IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gISEodGhpcy53aWR0aCAmJiB0aGlzLmhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBiaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICByZW5kZXJlci5nbC5iaW5kVGV4dHVyZShyZW5kZXJlci5nbC5URVhUVVJFXzJELCB0aGlzLmdldFdlYkdMVGV4dHVyZShyZW5kZXJlcikpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1bmJpbmQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHJlbmRlcmVyLmdsLmJpbmRUZXh0dXJlKHJlbmRlcmVyLmdsLlRFWFRVUkVfMkQsIG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICBsb2FkOiBmdW5jdGlvbiAoc3JjLCBjcm9zc09yaWdpbikge1xyXG4gICAgICAgIHZhciBpbWFnZSA9IHZlbmRvci5jcmVhdGVJbWFnZSgpO1xyXG4gICAgICAgIGlmIChjcm9zc09yaWdpbikge1xyXG4gICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9IGNyb3NzT3JpZ2luO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLmRpcnR5KCk7XHJcbiAgICAgICAgICAgIHNlbGYudHJpZ2dlcignc3VjY2VzcycsIHNlbGYpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaW1hZ2Uub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdlcnJvcicsIHNlbGYpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGltYWdlLnNyYyA9IHNyYztcclxuICAgICAgICB0aGlzLmltYWdlID0gaW1hZ2U7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZXh0dXJlMkQucHJvdG90eXBlLCAnd2lkdGgnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZS53aWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUZXh0dXJlIGZyb20gaW1hZ2UgY2FuXFwndCBzZXQgd2lkdGgnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl93aWR0aCAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZXh0dXJlMkQucHJvdG90eXBlLCAnaGVpZ2h0Jywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2UuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUZXh0dXJlIGZyb20gaW1hZ2UgY2FuXFwndCBzZXQgaGVpZ2h0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faGVpZ2h0ICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlMkQ7XHJcbiIsImltcG9ydCBUZXh0dXJlIGZyb20gJy4vVGV4dHVyZSc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4vY29yZS91dGlsJztcclxuaW1wb3J0IG1hdGhVdGlsIGZyb20gJy4vbWF0aC91dGlsJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxudmFyIGlzUG93ZXJPZlR3byA9IG1hdGhVdGlsLmlzUG93ZXJPZlR3bztcclxuXHJcbnZhciB0YXJnZXRMaXN0ID0gWydweCcsICdueCcsICdweScsICdueScsICdweicsICdueiddO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlRleHR1cmVDdWJlXHJcbiAqIEBleHRlbmRzIGNsYXkuVGV4dHVyZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgLi4uXHJcbiAqICAgICB2YXIgbWF0ID0gbmV3IGNsYXkuTWF0ZXJpYWwoe1xyXG4gKiAgICAgICAgIHNoYWRlcjogY2xheS5zaGFkZXIubGlicmFyeS5nZXQoJ2NsYXkucGhvbmcnLCAnZW52aXJvbm1lbnRNYXAnKVxyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgZW52TWFwID0gbmV3IGNsYXkuVGV4dHVyZUN1YmUoKTtcclxuICogICAgIGVudk1hcC5sb2FkKHtcclxuICogICAgICAgICAncHgnOiAnYXNzZXRzL3RleHR1cmVzL3NreS9weC5qcGcnLFxyXG4gKiAgICAgICAgICdueCc6ICdhc3NldHMvdGV4dHVyZXMvc2t5L254LmpwZydcclxuICogICAgICAgICAncHknOiAnYXNzZXRzL3RleHR1cmVzL3NreS9weS5qcGcnXHJcbiAqICAgICAgICAgJ255JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvbnkuanBnJ1xyXG4gKiAgICAgICAgICdweic6ICdhc3NldHMvdGV4dHVyZXMvc2t5L3B6LmpwZydcclxuICogICAgICAgICAnbnonOiAnYXNzZXRzL3RleHR1cmVzL3NreS9uei5qcGcnXHJcbiAqICAgICB9KTtcclxuICogICAgIG1hdC5zZXQoJ2Vudmlyb25tZW50TWFwJywgZW52TWFwKTtcclxuICogICAgIC4uLlxyXG4gKiAgICAgZW52TWFwLnN1Y2Nlc3MoZnVuY3Rpb24gKCkge1xyXG4gKiAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBza3kgdGV4dHVyZSBsb2FkZWRcclxuICogICAgICAgICBhbmltYXRpb24ub24oJ2ZyYW1lJywgZnVuY3Rpb24gKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAqICAgICAgICAgfSk7XHJcbiAqICAgICB9KTtcclxuICovXHJcbnZhciBUZXh0dXJlQ3ViZSA9IFRleHR1cmUuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuVGV4dHVyZUN1YmUjICove1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIC8vIFBFTkRJTkcgY3ViZW1hcCBzaG91bGQgbm90IGZsaXBZIGluIGRlZmF1bHQuXHJcbiAgICAgICAgLy8gZmxpcFk6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1uZXR9IHB4XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gbnhcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9IVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtbmV0fSBweVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1uZXR9IG55XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gcHpcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9IVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtbmV0fSBuelxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGltYWdlOiB7XHJcbiAgICAgICAgICAgIHB4OiBudWxsLFxyXG4gICAgICAgICAgICBueDogbnVsbCxcclxuICAgICAgICAgICAgcHk6IG51bGwsXHJcbiAgICAgICAgICAgIG55OiBudWxsLFxyXG4gICAgICAgICAgICBwejogbnVsbCxcclxuICAgICAgICAgICAgbno6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFBpeGVscyBkYXRhIG9mIGVhY2ggc2lkZS4gV2lsbCBiZSBpZ25vcmVkIGlmIGltYWdlcyBhcmUgc2V0LlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/VWludDhBcnJheX0gcHhcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBueFxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P1VpbnQ4QXJyYXl9IHB5XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/VWludDhBcnJheX0gbnlcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBwelxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P1VpbnQ4QXJyYXl9IG56XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcGl4ZWxzOiB7XHJcbiAgICAgICAgICAgIHB4OiBudWxsLFxyXG4gICAgICAgICAgICBueDogbnVsbCxcclxuICAgICAgICAgICAgcHk6IG51bGwsXHJcbiAgICAgICAgICAgIG55OiBudWxsLFxyXG4gICAgICAgICAgICBwejogbnVsbCxcclxuICAgICAgICAgICAgbno6IG51bGxcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPE9iamVjdD59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWlwbWFwczogW11cclxuICAgIH07XHJcbn0sIHtcclxuXHJcbiAgICB0ZXh0dXJlVHlwZTogJ3RleHR1cmVDdWJlJyxcclxuXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIHRoaXMuX2NhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVDb21tb24ocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB2YXIgZ2xGb3JtYXQgPSB0aGlzLmZvcm1hdDtcclxuICAgICAgICB2YXIgZ2xUeXBlID0gdGhpcy50eXBlO1xyXG5cclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgX2dsLlRFWFRVUkVfV1JBUF9TLCB0aGlzLmdldEF2YWlsYWJsZVdyYXBTKCkpO1xyXG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFX0NVQkVfTUFQLCBfZ2wuVEVYVFVSRV9XUkFQX1QsIHRoaXMuZ2V0QXZhaWxhYmxlV3JhcFQoKSk7XHJcblxyXG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFX0NVQkVfTUFQLCBfZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCB0aGlzLmdldEF2YWlsYWJsZU1hZ0ZpbHRlcigpKTtcclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgX2dsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgdGhpcy5nZXRBdmFpbGFibGVNaW5GaWx0ZXIoKSk7XHJcblxyXG4gICAgICAgIHZhciBhbmlzb3Ryb3BpY0V4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKTtcclxuICAgICAgICBpZiAoYW5pc290cm9waWNFeHQgJiYgdGhpcy5hbmlzb3Ryb3BpYyA+IDEpIHtcclxuICAgICAgICAgICAgX2dsLnRleFBhcmFtZXRlcmYoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIGFuaXNvdHJvcGljRXh0LlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULCB0aGlzLmFuaXNvdHJvcGljKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIGZsb2F0IHR5cGUgaWYgYnJvd3NlciBkb24ndCBoYXZlIGhhbGYgZmxvYXQgZXh0ZW5zaW9uXHJcbiAgICAgICAgaWYgKGdsVHlwZSA9PT0gMzYxOTMpIHtcclxuICAgICAgICAgICAgdmFyIGhhbGZGbG9hdEV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Jyk7XHJcbiAgICAgICAgICAgIGlmICghaGFsZkZsb2F0RXh0KSB7XHJcbiAgICAgICAgICAgICAgICBnbFR5cGUgPSBnbGVudW0uRkxPQVQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1pcG1hcHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1pcG1hcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBtaXBtYXAgPSB0aGlzLm1pcG1hcHNbaV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVUZXh0dXJlRGF0YShfZ2wsIG1pcG1hcCwgaSwgd2lkdGgsIGhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSk7XHJcbiAgICAgICAgICAgICAgICB3aWR0aCAvPSAyO1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0IC89IDI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVRleHR1cmVEYXRhKF9nbCwgdGhpcywgMCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLk5QT1QgJiYgdGhpcy51c2VNaXBtYXApIHtcclxuICAgICAgICAgICAgICAgIF9nbC5nZW5lcmF0ZU1pcG1hcChfZ2wuVEVYVFVSRV9DVUJFX01BUCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgbnVsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVUZXh0dXJlRGF0YTogZnVuY3Rpb24gKF9nbCwgZGF0YSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGFyZ2V0TGlzdFtpXTtcclxuICAgICAgICAgICAgdmFyIGltZyA9IGRhdGEuaW1hZ2UgJiYgZGF0YS5pbWFnZVt0YXJnZXRdO1xyXG4gICAgICAgICAgICBpZiAoaW1nKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wudGV4SW1hZ2UyRChfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSwgbGV2ZWwsIGdsRm9ybWF0LCBnbEZvcm1hdCwgZ2xUeXBlLCBpbWcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgX2dsLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIGxldmVsLCBnbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgZGF0YS5waXhlbHMgJiYgZGF0YS5waXhlbHNbdGFyZ2V0XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlRleHR1cmVDdWJlLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZU1pcG1hcDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIGlmICh0aGlzLnVzZU1pcG1hcCAmJiAhdGhpcy5OUE9UKSB7XHJcbiAgICAgICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGhpcy5fY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJykpO1xyXG4gICAgICAgICAgICBfZ2wuZ2VuZXJhdGVNaXBtYXAoX2dsLlRFWFRVUkVfQ1VCRV9NQVApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuZ2wuYmluZFRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRV9DVUJFX01BUCwgdGhpcy5nZXRXZWJHTFRleHR1cmUocmVuZGVyZXIpKTtcclxuICAgIH0sXHJcblxyXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICByZW5kZXJlci5nbC5iaW5kVGV4dHVyZShyZW5kZXJlci5nbC5URVhUVVJFX0NVQkVfTUFQLCBudWxsKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gT3ZlcndyaXRlIHRoZSBpc1Bvd2VyT2ZUd28gbWV0aG9kXHJcbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXNQb3dlck9mVHdvKHRoaXMuaW1hZ2UucHgud2lkdGgpXHJcbiAgICAgICAgICAgICAgICAmJiBpc1Bvd2VyT2ZUd28odGhpcy5pbWFnZS5weC5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzUG93ZXJPZlR3byh0aGlzLndpZHRoKVxyXG4gICAgICAgICAgICAgICAgJiYgaXNQb3dlck9mVHdvKHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGlzUmVuZGVyYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlLnB4KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpc0ltYWdlUmVuZGVyYWJsZSh0aGlzLmltYWdlLnB4KVxyXG4gICAgICAgICAgICAgICAgJiYgaXNJbWFnZVJlbmRlcmFibGUodGhpcy5pbWFnZS5ueClcclxuICAgICAgICAgICAgICAgICYmIGlzSW1hZ2VSZW5kZXJhYmxlKHRoaXMuaW1hZ2UucHkpXHJcbiAgICAgICAgICAgICAgICAmJiBpc0ltYWdlUmVuZGVyYWJsZSh0aGlzLmltYWdlLm55KVxyXG4gICAgICAgICAgICAgICAgJiYgaXNJbWFnZVJlbmRlcmFibGUodGhpcy5pbWFnZS5weilcclxuICAgICAgICAgICAgICAgICYmIGlzSW1hZ2VSZW5kZXJhYmxlKHRoaXMuaW1hZ2UubnopO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICEhKHRoaXMud2lkdGggJiYgdGhpcy5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgbG9hZDogZnVuY3Rpb24gKGltYWdlTGlzdCwgY3Jvc3NPcmlnaW4pIHtcclxuICAgICAgICB2YXIgbG9hZGluZyA9IDA7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHV0aWwuZWFjaChpbWFnZUxpc3QsIGZ1bmN0aW9uIChzcmMsIHRhcmdldCl7XHJcbiAgICAgICAgICAgIHZhciBpbWFnZSA9IHZlbmRvci5jcmVhdGVJbWFnZSgpO1xyXG4gICAgICAgICAgICBpZiAoY3Jvc3NPcmlnaW4pIHtcclxuICAgICAgICAgICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgbG9hZGluZyAtLTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2FkaW5nID09PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmRpcnR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdzdWNjZXNzJywgc2VsZik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGltYWdlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nIC0tO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgbG9hZGluZysrO1xyXG4gICAgICAgICAgICBpbWFnZS5zcmMgPSBzcmM7XHJcbiAgICAgICAgICAgIHNlbGYuaW1hZ2VbdGFyZ2V0XSA9IGltYWdlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxufSk7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZUN1YmUucHJvdG90eXBlLCAnd2lkdGgnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZSAmJiB0aGlzLmltYWdlLnB4KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlLnB4LndpZHRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XHJcbiAgICB9LFxyXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZSAmJiB0aGlzLmltYWdlLnB4KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGV4dHVyZSBmcm9tIGltYWdlIGNhblxcJ3Qgc2V0IHdpZHRoJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fd2lkdGggIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZUN1YmUucHJvdG90eXBlLCAnaGVpZ2h0Jywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UgJiYgdGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZS5weC5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XHJcbiAgICB9LFxyXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZSAmJiB0aGlzLmltYWdlLnB4KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGV4dHVyZSBmcm9tIGltYWdlIGNhblxcJ3Qgc2V0IGhlaWdodCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2hlaWdodCAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5mdW5jdGlvbiBpc0ltYWdlUmVuZGVyYWJsZShpbWFnZSkge1xyXG4gICAgcmV0dXJuIGltYWdlLndpZHRoID4gMCAmJiBpbWFnZS5oZWlnaHQgPiAwO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlQ3ViZTtcclxuIiwiaW1wb3J0IE5vZGUgZnJvbSAnLi9Ob2RlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuUmVuZGVyYWJsZVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lk5vZGVcclxuICovXHJcbnZhciBSZW5kZXJhYmxlID0gTm9kZS5leHRlbmQoLyoqIEBsZW5kcyBjbGF5LlJlbmRlcmFibGUjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuTWF0ZXJpYWx9XHJcbiAgICAgKi9cclxuICAgIG1hdGVyaWFsOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuR2VvbWV0cnl9XHJcbiAgICAgKi9cclxuICAgIGdlb21ldHJ5OiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbW9kZTogZ2xlbnVtLlRSSUFOR0xFUyxcclxuXHJcbiAgICBfcmVuZGVySW5mbzogbnVsbFxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuUmVuZGVyYWJsZS5wcm90b3R5cGUgKi9cclxue1xyXG5cclxuICAgIF9fcHJvZ3JhbTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdyb3VwIG9mIHJlY2VpdmVkIGxpZ2h0LlxyXG4gICAgICovXHJcbiAgICBsaWdodEdyb3VwOiAwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW5kZXIgb3JkZXIsIE5vZGVzIHdpdGggc21hbGxlciB2YWx1ZSByZW5kZXJzIGJlZm9yZSBub2RlcyB3aXRoIGxhcmdlciB2YWx1ZXMuXHJcbiAgICAgKiBAdHlwZSB7TnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByZW5kZXJPcmRlcjogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZWQgd2hlbiBtb2RlIGlzIExJTkVTLCBMSU5FX1NUUklQIG9yIExJTkVfTE9PUFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgLy8gbGluZVdpZHRoOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgZW5hYmxlIGN1bGxpbmdcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBjdWxsaW5nOiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGVjaWZ5IHdoaWNoIHNpZGUgb2YgcG9seWdvbiB3aWxsIGJlIGN1bGxlZC5cclxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcclxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuQkFDS31cclxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuRlJPTlR9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5SZW5kZXJhYmxlLkZST05UX0FORF9CQUNLfVxyXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViR0xSZW5kZXJpbmdDb250ZXh0L2N1bGxGYWNlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjdWxsRmFjZTogZ2xlbnVtLkJBQ0ssXHJcbiAgICAvKipcclxuICAgICAqIFNwZWNpZnkgd2hpY2ggc2lkZSBpcyBmcm9udCBmYWNlLlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuUmVuZGVyYWJsZS5DV31cclxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuQ0NXfVxyXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViR0xSZW5kZXJpbmdDb250ZXh0L2Zyb250RmFjZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZnJvbnRGYWNlOiBnbGVudW0uQ0NXLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgZW5hYmxlIHNvZnR3YXJlIGZydXN0dW0gY3VsbGluZ1xyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGZydXN0dW1DdWxsaW5nOiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgcmVjZWl2ZVNoYWRvdzogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGNhc3RTaGFkb3c6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpZ25vcmVQaWNraW5nOiBmYWxzZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlnbm9yZVByZVo6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlnbm9yZUdCdWZmZXI6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaXNSZW5kZXJhYmxlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAvLyBUT0RPIFNoYWRlciA/XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VvbWV0cnkgJiYgdGhpcy5tYXRlcmlhbCAmJiB0aGlzLm1hdGVyaWFsLnNoYWRlciAmJiAhdGhpcy5pbnZpc2libGVcclxuICAgICAgICAgICAgJiYgdGhpcy5nZW9tZXRyeS52ZXJ0ZXhDb3VudCA+IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmVmb3JlIHJlbmRlciBob29rXHJcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIGJlZm9yZVJlbmRlcjogZnVuY3Rpb24gKF9nbCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCZWZvcmUgcmVuZGVyIGhvb2tcclxuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cclxuICAgICAqL1xyXG4gICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uIChfZ2wsIHJlbmRlclN0YXQpIHt9LFxyXG5cclxuICAgIGdldEJvdW5kaW5nQm94OiBmdW5jdGlvbiAoZmlsdGVyLCBvdXQpIHtcclxuICAgICAgICBvdXQgPSBOb2RlLnByb3RvdHlwZS5nZXRCb3VuZGluZ0JveC5jYWxsKHRoaXMsIGZpbHRlciwgb3V0KTtcclxuICAgICAgICBpZiAodGhpcy5nZW9tZXRyeSAmJiB0aGlzLmdlb21ldHJ5LmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIG91dC51bmlvbih0aGlzLmdlb21ldHJ5LmJvdW5kaW5nQm94KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgcmVuZGVyYWJsZVxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlJlbmRlcmFibGV9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXHJcbiAgICAgICAgICAgICdjYXN0U2hhZG93JywgJ3JlY2VpdmVTaGFkb3cnLFxyXG4gICAgICAgICAgICAnbW9kZScsICdjdWxsaW5nJywgJ2N1bGxGYWNlJywgJ2Zyb250RmFjZScsXHJcbiAgICAgICAgICAgICdmcnVzdHVtQ3VsbGluZycsXHJcbiAgICAgICAgICAgICdyZW5kZXJPcmRlcicsICdsaW5lV2lkdGgnLFxyXG4gICAgICAgICAgICAnaWdub3JlUGlja2luZycsICdpZ25vcmVQcmVaJywgJ2lnbm9yZUdCdWZmZXInXHJcbiAgICAgICAgXTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJhYmxlID0gTm9kZS5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIHJlbmRlcmFibGUuZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xyXG4gICAgICAgICAgICByZW5kZXJhYmxlLm1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbDtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBwcm9wZXJ0aWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgLy8gVHJ5IG5vdCB0byBvdmVyd3JpdGUgdGhlIHByb3RvdHlwZSBwcm9wZXJ0eVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlbmRlcmFibGVbbmFtZV0gIT09IHRoaXNbbmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlW25hbWVdID0gdGhpc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGU7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKClcclxufSk7XHJcblxyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuUE9JTlRTID0gZ2xlbnVtLlBPSU5UUztcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLkxJTkVTID0gZ2xlbnVtLkxJTkVTO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuTElORV9MT09QID0gZ2xlbnVtLkxJTkVfTE9PUDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLkxJTkVfU1RSSVAgPSBnbGVudW0uTElORV9TVFJJUDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLlRSSUFOR0xFUyA9IGdsZW51bS5UUklBTkdMRVM7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5UUklBTkdMRV9TVFJJUCA9IGdsZW51bS5UUklBTkdMRV9TVFJJUDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLlRSSUFOR0xFX0ZBTiA9IGdsZW51bS5UUklBTkdMRV9GQU47XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5CQUNLID0gZ2xlbnVtLkJBQ0s7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5GUk9OVCA9IGdsZW51bS5GUk9OVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLkZST05UX0FORF9CQUNLID0gZ2xlbnVtLkZST05UX0FORF9CQUNLO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuQ1cgPSBnbGVudW0uQ1c7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5DQ1cgPSBnbGVudW0uQ0NXO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUmVuZGVyYWJsZTtcclxuIiwiaW1wb3J0IFJlbmRlcmFibGUgZnJvbSAnLi9SZW5kZXJhYmxlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5NZXNoXHJcbiAqIEBleHRlbmRzIGNsYXkuUmVuZGVyYWJsZVxyXG4gKi9cclxudmFyIE1lc2ggPSBSZW5kZXJhYmxlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkuTWVzaCMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VkIHdoZW4gaXQgaXMgYSBza2lubmVkIG1lc2hcclxuICAgICAqIEB0eXBlIHtjbGF5LlNrZWxldG9ufVxyXG4gICAgICovXHJcbiAgICBza2VsZXRvbjogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogSm9pbnRzIGluZGljZXMgTWVzaGVzIGNhbiBzaGFyZSB0aGUgb25lIHNrZWxldG9uIGluc3RhbmNlIGFuZCBlYWNoIG1lc2ggY2FuIHVzZSBvbmUgcGFydCBvZiBqb2ludHMuIEpvaW50cyBpbmRpY2VzIGluZGljYXRlIHRoZSBpbmRleCBvZiBqb2ludCBpbiB0aGUgc2tlbGV0b24gaW5zdGFuY2VcclxuICAgICAqIEB0eXBlIHtudW1iZXJbXX1cclxuICAgICAqL1xyXG4gICAgam9pbnRzOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgc3RvcmUgdGhlIHNraW4gbWF0cmljZXMgaW4gdmVydGV4IHRleHR1cmVcclxuICAgICAqIEB0eXBlIHtib29sfVxyXG4gICAgICovXHJcbiAgICB1c2VTa2luTWF0cmljZXNUZXh0dXJlOiBmYWxzZVxyXG5cclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCF0aGlzLmpvaW50cykge1xyXG4gICAgICAgIHRoaXMuam9pbnRzID0gW107XHJcbiAgICB9XHJcbn0sIHtcclxuXHJcbiAgICBpc1NraW5uZWRNZXNoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuc2tlbGV0b24gJiYgdGhpcy5qb2ludHMgJiYgdGhpcy5qb2ludHMubGVuZ3RoID4gMCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG1lc2ggPSBSZW5kZXJhYmxlLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIG1lc2guc2tlbGV0b24gPSB0aGlzLnNrZWxldG9uO1xyXG4gICAgICAgIGlmICh0aGlzLmpvaW50cykge1xyXG4gICAgICAgICAgICBtZXNoLmpvaW50cyA9IHRoaXMuam9pbnRzLnNsaWNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtZXNoO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbi8vIEVudW1zXHJcbk1lc2guUE9JTlRTID0gZ2xlbnVtLlBPSU5UUztcclxuTWVzaC5MSU5FUyA9IGdsZW51bS5MSU5FUztcclxuTWVzaC5MSU5FX0xPT1AgPSBnbGVudW0uTElORV9MT09QO1xyXG5NZXNoLkxJTkVfU1RSSVAgPSBnbGVudW0uTElORV9TVFJJUDtcclxuTWVzaC5UUklBTkdMRVMgPSBnbGVudW0uVFJJQU5HTEVTO1xyXG5NZXNoLlRSSUFOR0xFX1NUUklQID0gZ2xlbnVtLlRSSUFOR0xFX1NUUklQO1xyXG5NZXNoLlRSSUFOR0xFX0ZBTiA9IGdsZW51bS5UUklBTkdMRV9GQU47XHJcblxyXG5NZXNoLkJBQ0sgPSBnbGVudW0uQkFDSztcclxuTWVzaC5GUk9OVCA9IGdsZW51bS5GUk9OVDtcclxuTWVzaC5GUk9OVF9BTkRfQkFDSyA9IGdsZW51bS5GUk9OVF9BTkRfQkFDSztcclxuTWVzaC5DVyA9IGdsZW51bS5DVztcclxuTWVzaC5DQ1cgPSBnbGVudW0uQ0NXO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWVzaDtcclxuIiwiaW1wb3J0IENhbWVyYSBmcm9tICcuLi9DYW1lcmEnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNhbWVyYS5QZXJzcGVjdGl2ZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LkNhbWVyYVxyXG4gKi9cclxudmFyIFBlcnNwZWN0aXZlID0gQ2FtZXJhLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkuY2FtZXJhLlBlcnNwZWN0aXZlIyAqL3tcclxuICAgIC8qKlxyXG4gICAgICogVmVydGljYWwgZmllbGQgb2YgdmlldyBpbiBkZWdyZWVzXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBmb3Y6IDUwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBBc3BlY3QgcmF0aW8sIHR5cGljYWxseSB2aWV3cG9ydCB3aWR0aCAvIGhlaWdodFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYXNwZWN0OiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBuZWFyOiAwLjEsXHJcbiAgICAvKipcclxuICAgICAqIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZmFyOiAyMDAwXHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jYW1lcmEuUGVyc3BlY3RpdmUucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICB1cGRhdGVQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgcmFkID0gdGhpcy5mb3YgLyAxODAgKiBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMucHJvamVjdGlvbk1hdHJpeC5wZXJzcGVjdGl2ZShyYWQsIHRoaXMuYXNwZWN0LCB0aGlzLm5lYXIsIHRoaXMuZmFyKTtcclxuICAgIH0sXHJcbiAgICBkZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG0gPSB0aGlzLnByb2plY3Rpb25NYXRyaXguYXJyYXk7XHJcbiAgICAgICAgdmFyIHJhZCA9IE1hdGguYXRhbigxIC8gbVs1XSkgKiAyO1xyXG4gICAgICAgIHRoaXMuZm92ID0gcmFkIC8gTWF0aC5QSSAqIDE4MDtcclxuICAgICAgICB0aGlzLmFzcGVjdCA9IG1bNV0gLyBtWzBdO1xyXG4gICAgICAgIHRoaXMubmVhciA9IG1bMTRdIC8gKG1bMTBdIC0gMSk7XHJcbiAgICAgICAgdGhpcy5mYXIgPSBtWzE0XSAvIChtWzEwXSArIDEpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybiB7Y2xheS5jYW1lcmEuUGVyc3BlY3RpdmV9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgY2FtZXJhID0gQ2FtZXJhLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGNhbWVyYS5mb3YgPSB0aGlzLmZvdjtcclxuICAgICAgICBjYW1lcmEuYXNwZWN0ID0gdGhpcy5hc3BlY3Q7XHJcbiAgICAgICAgY2FtZXJhLm5lYXIgPSB0aGlzLm5lYXI7XHJcbiAgICAgICAgY2FtZXJhLmZhciA9IHRoaXMuZmFyO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FtZXJhO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBlcnNwZWN0aXZlO1xyXG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gJy4uL0NhbWVyYSc7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jYW1lcmEuT3J0aG9ncmFwaGljXHJcbiAqIEBleHRlbmRzIGNsYXkuQ2FtZXJhXHJcbiAqL1xyXG52YXIgT3J0aG9ncmFwaGljID0gQ2FtZXJhLmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5LmNhbWVyYS5PcnRob2dyYXBoaWMjICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVmdDogLTEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJpZ2h0OiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBuZWFyOiAtMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZmFyOiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0b3A6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJvdHRvbTogLTFcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LmNhbWVyYS5PcnRob2dyYXBoaWMucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICB1cGRhdGVQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbigpIHtcclxuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXgub3J0aG8odGhpcy5sZWZ0LCB0aGlzLnJpZ2h0LCB0aGlzLmJvdHRvbSwgdGhpcy50b3AsIHRoaXMubmVhciwgdGhpcy5mYXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBkZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG0gPSB0aGlzLnByb2plY3Rpb25NYXRyaXguYXJyYXk7XHJcbiAgICAgICAgdGhpcy5sZWZ0ID0gKC0xIC0gbVsxMl0pIC8gbVswXTtcclxuICAgICAgICB0aGlzLnJpZ2h0ID0gKDEgLSBtWzEyXSkgLyBtWzBdO1xyXG4gICAgICAgIHRoaXMudG9wID0gKDEgLSBtWzEzXSkgLyBtWzVdO1xyXG4gICAgICAgIHRoaXMuYm90dG9tID0gKC0xIC0gbVsxM10pIC8gbVs1XTtcclxuICAgICAgICB0aGlzLm5lYXIgPSAtKC0xIC0gbVsxNF0pIC8gbVsxMF07XHJcbiAgICAgICAgdGhpcy5mYXIgPSAtKDEgLSBtWzE0XSkgLyBtWzEwXTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuY2FtZXJhLk9ydGhvZ3JhcGhpY31cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBjYW1lcmEgPSBDYW1lcmEucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICAgICAgY2FtZXJhLmxlZnQgPSB0aGlzLmxlZnQ7XHJcbiAgICAgICAgY2FtZXJhLnJpZ2h0ID0gdGhpcy5yaWdodDtcclxuICAgICAgICBjYW1lcmEubmVhciA9IHRoaXMubmVhcjtcclxuICAgICAgICBjYW1lcmEuZmFyID0gdGhpcy5mYXI7XHJcbiAgICAgICAgY2FtZXJhLnRvcCA9IHRoaXMudG9wO1xyXG4gICAgICAgIGNhbWVyYS5ib3R0b20gPSB0aGlzLmJvdHRvbTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNhbWVyYTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBPcnRob2dyYXBoaWM7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LnN0YW5kYXJkLmNodW5rLnZhcnlpbmdcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Ob3JtYWw7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG4jaWYgZGVmaW5lZChQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEKSB8fCBkZWZpbmVkKE5PUk1BTE1BUF9FTkFCTEVEKVxcbnZhcnlpbmcgdmVjMyB2X1RhbmdlbnQ7XFxudmFyeWluZyB2ZWMzIHZfQml0YW5nZW50O1xcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKEFPTUFQX0VOQUJMRUQpXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQyO1xcbiNlbmRpZlxcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnN0YW5kYXJkLmNodW5rLmxpZ2h0X2hlYWRlclxcbiNpZmRlZiBBTUJJRU5UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5hbWJpZW50X2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfU0hfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLmFtYmllbnRfc2hfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5hbWJpZW50X2N1YmVtYXBfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgUE9JTlRfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLnBvaW50X2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIERJUkVDVElPTkFMX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5kaXJlY3Rpb25hbF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBTUE9UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5zcG90X2xpZ2h0XFxuI2VuZGlmXFxuQGVuZFxcbkBleHBvcnQgY2xheS5zdGFuZGFyZC52ZXJ0ZXhcXG4jZGVmaW5lIFNIQURFUl9OQU1FIHN0YW5kYXJkXFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gbWF0NCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgOiBXT1JMRElOVkVSU0VUUkFOU1BPU0U7XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxudW5pZm9ybSB2ZWMyIHV2UmVwZWF0ID0gdmVjMigxLjAsIDEuMCk7XFxudW5pZm9ybSB2ZWMyIHV2T2Zmc2V0ID0gdmVjMigwLjAsIDAuMCk7XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZCA6IFRFWENPT1JEXzA7XFxuI2lmIGRlZmluZWQoQU9NQVBfRU5BQkxFRClcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZDIgOiBURVhDT09SRF8xO1xcbiNlbmRpZlxcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbCA6IE5PUk1BTDtcXG5hdHRyaWJ1dGUgdmVjNCB0YW5nZW50IDogVEFOR0VOVDtcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuYXR0cmlidXRlIHZlYzQgYV9Db2xvciA6IENPTE9SO1xcbiNlbmRpZlxcbmF0dHJpYnV0ZSB2ZWMzIGJhcnljZW50cmljO1xcbkBpbXBvcnQgY2xheS5zdGFuZGFyZC5jaHVuay52YXJ5aW5nXFxuQGltcG9ydCBjbGF5LmNodW5rLnNraW5uaW5nX2hlYWRlclxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiB2ZWMzIHNraW5uZWROb3JtYWwgPSBub3JtYWw7XFxuIHZlYzMgc2tpbm5lZFRhbmdlbnQgPSB0YW5nZW50Lnh5ejtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuIHNraW5uZWROb3JtYWwgPSAoc2tpbk1hdHJpeFdTICogdmVjNChub3JtYWwsIDAuMCkpLnh5ejtcXG4gc2tpbm5lZFRhbmdlbnQgPSAoc2tpbk1hdHJpeFdTICogdmVjNCh0YW5nZW50Lnh5eiwgMC4wKSkueHl6O1xcbiNlbmRpZlxcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkICogdXZSZXBlYXQgKyB1dk9mZnNldDtcXG4gdl9Xb3JsZFBvc2l0aW9uID0gKHdvcmxkICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gdl9CYXJ5Y2VudHJpYyA9IGJhcnljZW50cmljO1xcbiB2X05vcm1hbCA9IG5vcm1hbGl6ZSgod29ybGRJbnZlcnNlVHJhbnNwb3NlICogdmVjNChza2lubmVkTm9ybWFsLCAwLjApKS54eXopO1xcbiNpZiBkZWZpbmVkKFBBUkFMTEFYT0NDTFVTSU9OTUFQX0VOQUJMRUQpIHx8IGRlZmluZWQoTk9STUFMTUFQX0VOQUJMRUQpXFxuIHZfVGFuZ2VudCA9IG5vcm1hbGl6ZSgod29ybGRJbnZlcnNlVHJhbnNwb3NlICogdmVjNChza2lubmVkVGFuZ2VudCwgMC4wKSkueHl6KTtcXG4gdl9CaXRhbmdlbnQgPSBub3JtYWxpemUoY3Jvc3Modl9Ob3JtYWwsIHZfVGFuZ2VudCkgKiB0YW5nZW50LncpO1xcbiNlbmRpZlxcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gdl9Db2xvciA9IGFfQ29sb3I7XFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoQU9NQVBfRU5BQkxFRClcXG4gdl9UZXhjb29yZDIgPSB0ZXhjb29yZDI7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc3RhbmRhcmQuZnJhZ21lbnRcXG4jZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzlcXG4jZGVmaW5lIEdMT1NTSU5FU1NfQ0hBTk5FTCAwXFxuI2RlZmluZSBST1VHSE5FU1NfQ0hBTk5FTCAwXFxuI2RlZmluZSBNRVRBTE5FU1NfQ0hBTk5FTCAxXFxuI2RlZmluZSBESUZGVVNFTUFQX0FMUEhBX0FMUEhBXFxuQGltcG9ydCBjbGF5LnN0YW5kYXJkLmNodW5rLnZhcnlpbmdcXG51bmlmb3JtIG1hdDQgdmlld0ludmVyc2UgOiBWSUVXSU5WRVJTRTtcXG4jaWZkZWYgTk9STUFMTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7XFxuI2VuZGlmXFxudW5pZm9ybSBmbG9hdCBub3JtYWxTY2FsZTogMS4wO1xcbiNpZmRlZiBESUZGVVNFTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBTUEVDVUxBUk1BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJNYXA7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9ST1VHSE5FU1NcXG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcyA6IDAuNTtcXG4gI2lmZGVmIFJPVUdITkVTU01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgcm91Z2huZXNzTWFwO1xcbiAjZW5kaWZcXG4jZWxzZVxcbnVuaWZvcm0gZmxvYXQgZ2xvc3NpbmVzczogMC41O1xcbiAjaWZkZWYgR0xPU1NJTkVTU01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgZ2xvc3NpbmVzc01hcDtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIE1FVEFMTkVTU01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBPQ0NMVVNJT05NQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIG9jY2x1c2lvbk1hcDtcXG4jZW5kaWZcXG4jaWZkZWYgRU5WSVJPTk1FTlRNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlckN1YmUgZW52aXJvbm1lbnRNYXA7XFxuICNpZmRlZiBQQVJBTExBWF9DT1JSRUNURURcXG51bmlmb3JtIHZlYzMgZW52aXJvbm1lbnRCb3hNaW47XFxudW5pZm9ybSB2ZWMzIGVudmlyb25tZW50Qm94TWF4O1xcbiAjZW5kaWZcXG4jZW5kaWZcXG4jaWZkZWYgQlJERkxPT0tVUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgYnJkZkxvb2t1cDtcXG4jZW5kaWZcXG4jaWZkZWYgRU1JU1NJVkVNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBTU0FPTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBzc2FvTWFwO1xcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydCA6IFZJRVdQT1JUO1xcbiNlbmRpZlxcbiNpZmRlZiBBT01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgYW9NYXA7XFxudW5pZm9ybSBmbG9hdCBhb0ludGVuc2l0eTtcXG4jZW5kaWZcXG51bmlmb3JtIHZlYzMgY29sb3IgOiBbMS4wLCAxLjAsIDEuMF07XFxudW5pZm9ybSBmbG9hdCBhbHBoYSA6IDEuMDtcXG4jaWZkZWYgQUxQSEFfVEVTVFxcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuOTtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX01FVEFMTkVTU1xcbnVuaWZvcm0gZmxvYXQgbWV0YWxuZXNzIDogMC4wO1xcbiNlbHNlXFxudW5pZm9ybSB2ZWMzIHNwZWN1bGFyQ29sb3IgOiBbMC4xLCAwLjEsIDAuMV07XFxuI2VuZGlmXFxudW5pZm9ybSB2ZWMzIGVtaXNzaW9uIDogWzAuMCwgMC4wLCAwLjBdO1xcbnVuaWZvcm0gZmxvYXQgZW1pc3Npb25JbnRlbnNpdHk6IDE7XFxudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGggOiAwLjA7XFxudW5pZm9ybSB2ZWM0IGxpbmVDb2xvciA6IFswLjAsIDAuMCwgMC4wLCAwLjZdO1xcbiNpZmRlZiBFTlZJUk9OTUVOVE1BUF9QUkVGSUxURVJcXG51bmlmb3JtIGZsb2F0IG1heE1pcG1hcExldmVsOiA1O1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5zdGFuZGFyZC5jaHVuay5saWdodF9oZWFkZXJcXG5AaW1wb3J0IGNsYXkudXRpbC5jYWxjdWxhdGVfYXR0ZW51YXRpb25cXG5AaW1wb3J0IGNsYXkudXRpbC5lZGdlX2ZhY3RvclxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkudXRpbC5zcmdiXFxuQGltcG9ydCBjbGF5LnBsdWdpbi5jb21wdXRlX3NoYWRvd19tYXBcXG5AaW1wb3J0IGNsYXkudXRpbC5wYXJhbGxheF9jb3JyZWN0XFxuQGltcG9ydCBjbGF5LnV0aWwuQUNFU1xcbmZsb2F0IEdfU21pdGgoZmxvYXQgZywgZmxvYXQgbmR2LCBmbG9hdCBuZGwpXFxue1xcbiBmbG9hdCByb3VnaG5lc3MgPSAxLjAgLSBnO1xcbiBmbG9hdCBrID0gcm91Z2huZXNzICogcm91Z2huZXNzIC8gMi4wO1xcbiBmbG9hdCBHMVYgPSBuZHYgLyAobmR2ICogKDEuMCAtIGspICsgayk7XFxuIGZsb2F0IEcxTCA9IG5kbCAvIChuZGwgKiAoMS4wIC0gaykgKyBrKTtcXG4gcmV0dXJuIEcxTCAqIEcxVjtcXG59XFxudmVjMyBGX1NjaGxpY2soZmxvYXQgbmR2LCB2ZWMzIHNwZWMpIHtcXG4gcmV0dXJuIHNwZWMgKyAoMS4wIC0gc3BlYykgKiBwb3coMS4wIC0gbmR2LCA1LjApO1xcbn1cXG5mbG9hdCBEX1Bob25nKGZsb2F0IGcsIGZsb2F0IG5kaCkge1xcbiBmbG9hdCBhID0gcG93KDgxOTIuMCwgZyk7XFxuIHJldHVybiAoYSArIDIuMCkgLyA4LjAgKiBwb3cobmRoLCBhKTtcXG59XFxuZmxvYXQgRF9HR1goZmxvYXQgZywgZmxvYXQgbmRoKSB7XFxuIGZsb2F0IHIgPSAxLjAgLSBnO1xcbiBmbG9hdCBhID0gciAqIHI7XFxuIGZsb2F0IHRtcCA9IG5kaCAqIG5kaCAqIChhIC0gMS4wKSArIDEuMDtcXG4gcmV0dXJuIGEgLyAoUEkgKiB0bXAgKiB0bXApO1xcbn1cXG4jaWZkZWYgUEFSQUxMQVhPQ0NMVVNJT05NQVBfRU5BQkxFRFxcbnVuaWZvcm0gZmxvYXQgcGFyYWxsYXhPY2NsdXNpb25TY2FsZSA6IDAuMDI7XFxudW5pZm9ybSBmbG9hdCBwYXJhbGxheE1heExheWVycyA6IDIwO1xcbnVuaWZvcm0gZmxvYXQgcGFyYWxsYXhNaW5MYXllcnMgOiA1O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHBhcmFsbGF4T2NjbHVzaW9uTWFwO1xcbm1hdDMgdHJhbnNwb3NlKGluIG1hdDMgaW5NYXQpXFxue1xcbiB2ZWMzIGkwID0gaW5NYXRbMF07XFxuIHZlYzMgaTEgPSBpbk1hdFsxXTtcXG4gdmVjMyBpMiA9IGluTWF0WzJdO1xcbiByZXR1cm4gbWF0MyhcXG4gdmVjMyhpMC54LCBpMS54LCBpMi54KSxcXG4gdmVjMyhpMC55LCBpMS55LCBpMi55KSxcXG4gdmVjMyhpMC56LCBpMS56LCBpMi56KVxcbiApO1xcbn1cXG52ZWMyIHBhcmFsbGF4VXYodmVjMiB1diwgdmVjMyB2aWV3RGlyKVxcbntcXG4gZmxvYXQgbnVtTGF5ZXJzID0gbWl4KHBhcmFsbGF4TWF4TGF5ZXJzLCBwYXJhbGxheE1pbkxheWVycywgYWJzKGRvdCh2ZWMzKDAuMCwgMC4wLCAxLjApLCB2aWV3RGlyKSkpO1xcbiBmbG9hdCBsYXllckhlaWdodCA9IDEuMCAvIG51bUxheWVycztcXG4gZmxvYXQgY3VyTGF5ZXJIZWlnaHQgPSAwLjA7XFxuIHZlYzIgZGVsdGFVdiA9IHZpZXdEaXIueHkgKiBwYXJhbGxheE9jY2x1c2lvblNjYWxlIC8gKHZpZXdEaXIueiAqIG51bUxheWVycyk7XFxuIHZlYzIgY3VyVXYgPSB1djtcXG4gZmxvYXQgaGVpZ2h0ID0gMS4wIC0gdGV4dHVyZTJEKHBhcmFsbGF4T2NjbHVzaW9uTWFwLCBjdXJVdikucjtcXG4gZm9yIChpbnQgaSA9IDA7IGkgPCAzMDsgaSsrKSB7XFxuIGN1ckxheWVySGVpZ2h0ICs9IGxheWVySGVpZ2h0O1xcbiBjdXJVdiAtPSBkZWx0YVV2O1xcbiBoZWlnaHQgPSAxLjAgLSB0ZXh0dXJlMkQocGFyYWxsYXhPY2NsdXNpb25NYXAsIGN1clV2KS5yO1xcbiBpZiAoaGVpZ2h0IDwgY3VyTGF5ZXJIZWlnaHQpIHtcXG4gYnJlYWs7XFxuIH1cXG4gfVxcbiB2ZWMyIHByZXZVdiA9IGN1clV2ICsgZGVsdGFVdjtcXG4gZmxvYXQgbmV4dCA9IGhlaWdodCAtIGN1ckxheWVySGVpZ2h0O1xcbiBmbG9hdCBwcmV2ID0gMS4wIC0gdGV4dHVyZTJEKHBhcmFsbGF4T2NjbHVzaW9uTWFwLCBwcmV2VXYpLnIgLSBjdXJMYXllckhlaWdodCArIGxheWVySGVpZ2h0O1xcbiByZXR1cm4gbWl4KGN1clV2LCBwcmV2VXYsIG5leHQgLyAobmV4dCAtIHByZXYpKTtcXG59XFxuI2VuZGlmXFxudm9pZCBtYWluKCkge1xcbiB2ZWM0IGFsYmVkb0NvbG9yID0gdmVjNChjb2xvciwgYWxwaGEpO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gYWxiZWRvQ29sb3IgKj0gdl9Db2xvcjtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9ERUNPREVcXG4gYWxiZWRvQ29sb3IgPSBzUkdCVG9MaW5lYXIoYWxiZWRvQ29sb3IpO1xcbiNlbmRpZlxcbiB2ZWMzIGV5ZVBvcyA9IHZpZXdJbnZlcnNlWzNdLnh5ejtcXG4gdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvcyAtIHZfV29ybGRQb3NpdGlvbik7XFxuIHZlYzIgdXYgPSB2X1RleGNvb3JkO1xcbiNpZiBkZWZpbmVkKFBBUkFMTEFYT0NDTFVTSU9OTUFQX0VOQUJMRUQpIHx8IGRlZmluZWQoTk9STUFMTUFQX0VOQUJMRUQpXFxuIG1hdDMgdGJuID0gbWF0Myh2X1RhbmdlbnQsIHZfQml0YW5nZW50LCB2X05vcm1hbCk7XFxuI2VuZGlmXFxuI2lmZGVmIFBBUkFMTEFYT0NDTFVTSU9OTUFQX0VOQUJMRURcXG4gdXYgPSBwYXJhbGxheFV2KHZfVGV4Y29vcmQsIG5vcm1hbGl6ZSh0cmFuc3Bvc2UodGJuKSAqIC1WKSk7XFxuI2VuZGlmXFxuI2lmZGVmIERJRkZVU0VNQVBfRU5BQkxFRFxcbiB2ZWM0IHRleGVsID0gdGV4dHVyZTJEKGRpZmZ1c2VNYXAsIHV2KTtcXG4gI2lmZGVmIFNSR0JfREVDT0RFXFxuIHRleGVsID0gc1JHQlRvTGluZWFyKHRleGVsKTtcXG4gI2VuZGlmXFxuIGFsYmVkb0NvbG9yLnJnYiAqPSB0ZXhlbC5yZ2I7XFxuICNpZmRlZiBESUZGVVNFTUFQX0FMUEhBX0FMUEhBXFxuIGFsYmVkb0NvbG9yLmEgKj0gdGV4ZWwuYTtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9NRVRBTE5FU1NcXG4gZmxvYXQgbSA9IG1ldGFsbmVzcztcXG4gI2lmZGVmIE1FVEFMTkVTU01BUF9FTkFCTEVEXFxuIGZsb2F0IG0yID0gdGV4dHVyZTJEKG1ldGFsbmVzc01hcCwgdXYpW01FVEFMTkVTU19DSEFOTkVMXTtcXG4gbSA9IGNsYW1wKG0yICsgKG0gLSAwLjUpICogMi4wLCAwLjAsIDEuMCk7XFxuICNlbmRpZlxcbiB2ZWMzIGJhc2VDb2xvciA9IGFsYmVkb0NvbG9yLnJnYjtcXG4gYWxiZWRvQ29sb3IucmdiID0gYmFzZUNvbG9yICogKDEuMCAtIG0pO1xcbiB2ZWMzIHNwZWMgPSBtaXgodmVjMygwLjA0KSwgYmFzZUNvbG9yLCBtKTtcXG4jZWxzZVxcbiB2ZWMzIHNwZWMgPSBzcGVjdWxhckNvbG9yO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfUk9VR0hORVNTXFxuIGZsb2F0IGcgPSBjbGFtcCgxLjAgLSByb3VnaG5lc3MsIDAuMCwgMS4wKTtcXG4gI2lmZGVmIFJPVUdITkVTU01BUF9FTkFCTEVEXFxuIGZsb2F0IGcyID0gMS4wIC0gdGV4dHVyZTJEKHJvdWdobmVzc01hcCwgdXYpW1JPVUdITkVTU19DSEFOTkVMXTtcXG4gZyA9IGNsYW1wKGcyICsgKGcgLSAwLjUpICogMi4wLCAwLjAsIDEuMCk7XFxuICNlbmRpZlxcbiNlbHNlXFxuIGZsb2F0IGcgPSBnbG9zc2luZXNzO1xcbiAjaWZkZWYgR0xPU1NJTkVTU01BUF9FTkFCTEVEXFxuIGZsb2F0IGcyID0gdGV4dHVyZTJEKGdsb3NzaW5lc3NNYXAsIHV2KVtHTE9TU0lORVNTX0NIQU5ORUxdO1xcbiBnID0gY2xhbXAoZzIgKyAoZyAtIDAuNSkgKiAyLjAsIDAuMCwgMS4wKTtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIFNQRUNVTEFSTUFQX0VOQUJMRURcXG4gc3BlYyAqPSBzUkdCVG9MaW5lYXIodGV4dHVyZTJEKHNwZWN1bGFyTWFwLCB1dikpLnJnYjtcXG4jZW5kaWZcXG4gdmVjMyBOID0gdl9Ob3JtYWw7XFxuI2lmZGVmIERPVUJMRV9TSURFRFxcbiBpZiAoZG90KE4sIFYpIDwgMC4wKSB7XFxuIE4gPSAtTjtcXG4gfVxcbiNlbmRpZlxcbiNpZmRlZiBOT1JNQUxNQVBfRU5BQkxFRFxcbiBpZiAoZG90KHZfVGFuZ2VudCwgdl9UYW5nZW50KSA+IDAuMCkge1xcbiB2ZWMzIG5vcm1hbFRleGVsID0gdGV4dHVyZTJEKG5vcm1hbE1hcCwgdXYpLnh5ejtcXG4gaWYgKGRvdChub3JtYWxUZXhlbCwgbm9ybWFsVGV4ZWwpID4gMC4wKSB7IE4gPSAobm9ybWFsVGV4ZWwgKiAyLjAgLSAxLjApO1xcbiBOID0gbm9ybWFsaXplKE4gKiB2ZWMzKG5vcm1hbFNjYWxlLCBub3JtYWxTY2FsZSwgMS4wKSk7XFxuIHRiblsxXSA9IC10Ym5bMV07XFxuIE4gPSBub3JtYWxpemUodGJuICogTik7XFxuIH1cXG4gfVxcbiNlbmRpZlxcbiB2ZWMzIGRpZmZ1c2VUZXJtID0gdmVjMygwLjAsIDAuMCwgMC4wKTtcXG4gdmVjMyBzcGVjdWxhclRlcm0gPSB2ZWMzKDAuMCwgMC4wLCAwLjApO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gdmVjMyBmcmVzbmVsVGVybSA9IEZfU2NobGljayhuZHYsIHNwZWMpO1xcbiNpZmRlZiBBTUJJRU5UX0xJR0hUX0NPVU5UXFxuIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IEFNQklFTlRfTElHSFRfQ09VTlQ7IF9pZHhfKyspXFxuIHt7XFxuIGRpZmZ1c2VUZXJtICs9IGFtYmllbnRMaWdodENvbG9yW19pZHhfXTtcXG4gfX1cXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVFxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX1NIX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7e1xcbiBkaWZmdXNlVGVybSArPSBjYWxjQW1iaWVudFNITGlnaHQoX2lkeF8sIE4pICogYW1iaWVudFNITGlnaHRDb2xvcltfaWR4X107XFxuIH19XFxuI2VuZGlmXFxuI2lmZGVmIFBPSU5UX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBmbG9hdCBzaGFkb3dDb250cmlic1BvaW50W1BPSU5UX0xJR0hUX0NPVU5UXTtcXG4gaWYoc2hhZG93RW5hYmxlZClcXG4ge1xcbiBjb21wdXRlU2hhZG93T2ZQb2ludExpZ2h0cyh2X1dvcmxkUG9zaXRpb24sIHNoYWRvd0NvbnRyaWJzUG9pbnQpO1xcbiB9XFxuI2VuZGlmXFxuIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IFBPSU5UX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7e1xcbiB2ZWMzIGxpZ2h0UG9zaXRpb24gPSBwb2ludExpZ2h0UG9zaXRpb25bX2lkeF9dO1xcbiB2ZWMzIGxjID0gcG9pbnRMaWdodENvbG9yW19pZHhfXTtcXG4gZmxvYXQgcmFuZ2UgPSBwb2ludExpZ2h0UmFuZ2VbX2lkeF9dO1xcbiB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgcmFuZ2UpO1xcbiBMIC89IGRpc3Q7XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kbCA9IGNsYW1wKGRvdChOLCBMKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgc2hhZG93Q29udHJpYiA9IDEuMDtcXG4jaWYgZGVmaW5lZChQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGlmKHNoYWRvd0VuYWJsZWQpXFxuIHtcXG4gc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzUG9pbnRbX2lkeF9dO1xcbiB9XFxuI2VuZGlmXFxuIHZlYzMgbGkgPSBsYyAqIG5kbCAqIGF0dGVudWF0aW9uICogc2hhZG93Q29udHJpYjtcXG4gZGlmZnVzZVRlcm0gKz0gbGk7XFxuIHNwZWN1bGFyVGVybSArPSBsaSAqIGZyZXNuZWxUZXJtICogRF9QaG9uZyhnLCBuZGgpO1xcbiB9fVxcbiNlbmRpZlxcbiNpZmRlZiBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVFxcbiNpZiBkZWZpbmVkKERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gZmxvYXQgc2hhZG93Q29udHJpYnNEaXJbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdO1xcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIGNvbXB1dGVTaGFkb3dPZkRpcmVjdGlvbmFsTGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNEaXIpO1xcbiB9XFxuI2VuZGlmXFxuIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IERJUkVDVElPTkFMX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7e1xcbiB2ZWMzIEwgPSAtbm9ybWFsaXplKGRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb25bX2lkeF9dKTtcXG4gdmVjMyBsYyA9IGRpcmVjdGlvbmFsTGlnaHRDb2xvcltfaWR4X107XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kbCA9IGNsYW1wKGRvdChOLCBMKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgc2hhZG93Q29udHJpYiA9IDEuMDtcXG4jaWYgZGVmaW5lZChESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGlmKHNoYWRvd0VuYWJsZWQpXFxuIHtcXG4gc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzRGlyW19pZHhfXTtcXG4gfVxcbiNlbmRpZlxcbiB2ZWMzIGxpID0gbGMgKiBuZGwgKiBzaGFkb3dDb250cmliO1xcbiBkaWZmdXNlVGVybSArPSBsaTtcXG4gc3BlY3VsYXJUZXJtICs9IGxpICogZnJlc25lbFRlcm0gKiBEX1Bob25nKGcsIG5kaCk7XFxuIH19XFxuI2VuZGlmXFxuI2lmZGVmIFNQT1RfTElHSFRfQ09VTlRcXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gZmxvYXQgc2hhZG93Q29udHJpYnNTcG90W1NQT1RfTElHSFRfQ09VTlRdO1xcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIGNvbXB1dGVTaGFkb3dPZlNwb3RMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic1Nwb3QpO1xcbiB9XFxuI2VuZGlmXFxuIGZvcihpbnQgaSA9IDA7IGkgPCBTUE9UX0xJR0hUX0NPVU5UOyBpKyspXFxuIHtcXG4gdmVjMyBsaWdodFBvc2l0aW9uID0gc3BvdExpZ2h0UG9zaXRpb25baV07XFxuIHZlYzMgc3BvdExpZ2h0RGlyZWN0aW9uID0gLW5vcm1hbGl6ZShzcG90TGlnaHREaXJlY3Rpb25baV0pO1xcbiB2ZWMzIGxjID0gc3BvdExpZ2h0Q29sb3JbaV07XFxuIGZsb2F0IHJhbmdlID0gc3BvdExpZ2h0UmFuZ2VbaV07XFxuIGZsb2F0IGEgPSBzcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lW2ldO1xcbiBmbG9hdCBiID0gc3BvdExpZ2h0UGVudW1icmFBbmdsZUNvc2luZVtpXTtcXG4gZmxvYXQgZmFsbG9mZkZhY3RvciA9IHNwb3RMaWdodEZhbGxvZmZGYWN0b3JbaV07XFxuIHZlYzMgTCA9IGxpZ2h0UG9zaXRpb24gLSB2X1dvcmxkUG9zaXRpb247XFxuIGZsb2F0IGRpc3QgPSBsZW5ndGgoTCk7XFxuIGZsb2F0IGF0dGVudWF0aW9uID0gbGlnaHRBdHRlbnVhdGlvbihkaXN0LCByYW5nZSk7XFxuIEwgLz0gZGlzdDtcXG4gZmxvYXQgYyA9IGRvdChzcG90TGlnaHREaXJlY3Rpb24sIEwpO1xcbiBmbG9hdCBmYWxsb2ZmO1xcbiBmYWxsb2ZmID0gY2xhbXAoKGMgLSBhKSAvKGIgLSBhKSwgMC4wLCAxLjApO1xcbiBmYWxsb2ZmID0gcG93KGZhbGxvZmYsIGZhbGxvZmZGYWN0b3IpO1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGlmIChzaGFkb3dFbmFibGVkKVxcbiB7XFxuIHNoYWRvd0NvbnRyaWIgPSBzaGFkb3dDb250cmlic1Nwb3RbaV07XFxuIH1cXG4jZW5kaWZcXG4gdmVjMyBsaSA9IGxjICogYXR0ZW51YXRpb24gKiAoMS4wIC0gZmFsbG9mZikgKiBzaGFkb3dDb250cmliICogbmRsO1xcbiBkaWZmdXNlVGVybSArPSBsaTtcXG4gc3BlY3VsYXJUZXJtICs9IGxpICogZnJlc25lbFRlcm0gKiBEX1Bob25nKGcsIG5kaCk7XFxuIH1cXG4jZW5kaWZcXG4gdmVjNCBvdXRDb2xvciA9IGFsYmVkb0NvbG9yO1xcbiBvdXRDb2xvci5yZ2IgKj0gbWF4KGRpZmZ1c2VUZXJtLCB2ZWMzKDAuMCkpO1xcbiBvdXRDb2xvci5yZ2IgKz0gbWF4KHNwZWN1bGFyVGVybSwgdmVjMygwLjApKTtcXG4jaWZkZWYgQU1CSUVOVF9DVUJFTUFQX0xJR0hUX0NPVU5UXFxuIHZlYzMgTCA9IHJlZmxlY3QoLVYsIE4pO1xcbiBmbG9hdCByb3VnaDIgPSBjbGFtcCgxLjAgLSBnLCAwLjAsIDEuMCk7XFxuIGZsb2F0IGJpYXMyID0gcm91Z2gyICogNS4wO1xcbiB2ZWMyIGJyZGZQYXJhbTIgPSB0ZXh0dXJlMkQoYW1iaWVudEN1YmVtYXBMaWdodEJSREZMb29rdXBbMF0sIHZlYzIocm91Z2gyLCBuZHYpKS54eTtcXG4gdmVjMyBlbnZXZWlnaHQyID0gc3BlYyAqIGJyZGZQYXJhbTIueCArIGJyZGZQYXJhbTIueTtcXG4gdmVjMyBlbnZUZXhlbDI7XFxuIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IEFNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge3tcXG4gI2lmZGVmIFNVUFBPUlRfVEVYVFVSRV9MT0RcXG4gZW52VGV4ZWwyID0gUkdCTURlY29kZSh0ZXh0dXJlQ3ViZUxvZEVYVChhbWJpZW50Q3ViZW1hcExpZ2h0Q3ViZW1hcFtfaWR4X10sIEwsIGJpYXMyKSwgOC4xMik7XFxuICNlbHNlXFxuIGVudlRleGVsMiA9IFJHQk1EZWNvZGUodGV4dHVyZUN1YmUoYW1iaWVudEN1YmVtYXBMaWdodEN1YmVtYXBbX2lkeF9dLCBMKSwgOC4xMik7XFxuICNlbmRpZlxcbiBvdXRDb2xvci5yZ2IgKz0gYW1iaWVudEN1YmVtYXBMaWdodENvbG9yW19pZHhfXSAqIGVudlRleGVsMiAqIGVudldlaWdodDI7XFxuIH19XFxuI2VuZGlmXFxuI2lmZGVmIEVOVklST05NRU5UTUFQX0VOQUJMRURcXG4gdmVjMyBlbnZXZWlnaHQgPSBnICogZnJlc25lbFRlcm07XFxuIHZlYzMgTCA9IHJlZmxlY3QoLVYsIE4pO1xcbiAjaWZkZWYgUEFSQUxMQVhfQ09SUkVDVEVEXFxuIEwgPSBwYXJhbGxheENvcnJlY3QoTCwgdl9Xb3JsZFBvc2l0aW9uLCBlbnZpcm9ubWVudEJveE1pbiwgZW52aXJvbm1lbnRCb3hNYXgpO1xcbiNlbmRpZlxcbiAjaWZkZWYgRU5WSVJPTk1FTlRNQVBfUFJFRklMVEVSXFxuIGZsb2F0IHJvdWdoID0gY2xhbXAoMS4wIC0gZywgMC4wLCAxLjApO1xcbiBmbG9hdCBiaWFzID0gcm91Z2ggKiBtYXhNaXBtYXBMZXZlbDtcXG4gI2lmZGVmIFNVUFBPUlRfVEVYVFVSRV9MT0RcXG4gdmVjMyBlbnZUZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZUxvZEVYVChlbnZpcm9ubWVudE1hcCwgTCwgYmlhcykpLnJnYjtcXG4gI2Vsc2VcXG4gdmVjMyBlbnZUZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZShlbnZpcm9ubWVudE1hcCwgTCkpLnJnYjtcXG4gI2VuZGlmXFxuICNpZmRlZiBCUkRGTE9PS1VQX0VOQUJMRURcXG4gdmVjMiBicmRmUGFyYW0gPSB0ZXh0dXJlMkQoYnJkZkxvb2t1cCwgdmVjMihyb3VnaCwgbmR2KSkueHk7XFxuIGVudldlaWdodCA9IHNwZWMgKiBicmRmUGFyYW0ueCArIGJyZGZQYXJhbS55O1xcbiAjZW5kaWZcXG4gI2Vsc2VcXG4gdmVjMyBlbnZUZXhlbCA9IHRleHR1cmVDdWJlKGVudmlyb25tZW50TWFwLCBMKS54eXo7XFxuICNlbmRpZlxcbiBvdXRDb2xvci5yZ2IgKz0gZW52VGV4ZWwgKiBlbnZXZWlnaHQ7XFxuI2VuZGlmXFxuIGZsb2F0IGFvRmFjdG9yID0gMS4wO1xcbiNpZmRlZiBTU0FPTUFQX0VOQUJMRURcXG4gYW9GYWN0b3IgPSBtaW4odGV4dHVyZTJEKHNzYW9NYXAsIChnbF9GcmFnQ29vcmQueHkgLSB2aWV3cG9ydC54eSkgLyB2aWV3cG9ydC56dykuciwgYW9GYWN0b3IpO1xcbiNlbmRpZlxcbiNpZmRlZiBBT01BUF9FTkFCTEVEXFxuIGFvRmFjdG9yID0gbWluKDEuMCAtIGNsYW1wKCgxLjAgLSB0ZXh0dXJlMkQoYW9NYXAsIHZfVGV4Y29vcmQyKS5yKSAqIGFvSW50ZW5zaXR5LCAwLjAsIDEuMCksIGFvRmFjdG9yKTtcXG4jZW5kaWZcXG4jaWZkZWYgT0NDTFVTSU9OTUFQX0VOQUJMRURcXG4gYW9GYWN0b3IgPSBtaW4oMS4wIC0gY2xhbXAoKDEuMCAtIHRleHR1cmUyRChvY2NsdXNpb25NYXAsIHZfVGV4Y29vcmQpLnIpLCAwLjAsIDEuMCksIGFvRmFjdG9yKTtcXG4jZW5kaWZcXG4gb3V0Q29sb3IucmdiICo9IGFvRmFjdG9yO1xcbiB2ZWMzIGxFbWlzc2lvbiA9IGVtaXNzaW9uO1xcbiNpZmRlZiBFTUlTU0lWRU1BUF9FTkFCTEVEXFxuIGxFbWlzc2lvbiAqPSB0ZXh0dXJlMkQoZW1pc3NpdmVNYXAsIHV2KS5yZ2I7XFxuI2VuZGlmXFxuIG91dENvbG9yLnJnYiArPSBsRW1pc3Npb24gKiBlbWlzc2lvbkludGVuc2l0eTtcXG4gaWYobGluZVdpZHRoID4gMC4pXFxuIHtcXG4gb3V0Q29sb3IucmdiID0gbWl4KG91dENvbG9yLnJnYiwgbGluZUNvbG9yLnJnYiwgKDEuMCAtIGVkZ2VGYWN0b3IobGluZVdpZHRoKSkgKiBsaW5lQ29sb3IuYSk7XFxuIH1cXG4jaWZkZWYgQUxQSEFfVEVTVFxcbiBpZiAob3V0Q29sb3IuYSA8IGFscGhhQ3V0b2ZmKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4jZW5kaWZcXG4jaWZkZWYgVE9ORU1BUFBJTkdcXG4gb3V0Q29sb3IucmdiID0gQUNFU1RvbmVNYXBwaW5nKG91dENvbG9yLnJnYik7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfRU5DT0RFXFxuIG91dENvbG9yID0gbGluZWFyVG9zUkdCKG91dENvbG9yKTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKG91dENvbG9yKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zdGFuZGFyZE1SLnZlcnRleFxcbkBpbXBvcnQgY2xheS5zdGFuZGFyZC52ZXJ0ZXhcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnN0YW5kYXJkTVIuZnJhZ21lbnRcXG4jZGVmaW5lIFVTRV9NRVRBTE5FU1NcXG4jZGVmaW5lIFVTRV9ST1VHSE5FU1NcXG5AaW1wb3J0IGNsYXkuc3RhbmRhcmQuZnJhZ21lbnRcXG5AZW5kXCI7XHJcbiIsImltcG9ydCBNYXRlcmlhbCBmcm9tICcuL01hdGVyaWFsJztcclxuXHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi9TaGFkZXInO1xyXG5pbXBvcnQgc3RhbmRhcmRFc3NsIGZyb20gJy4vc2hhZGVyL3NvdXJjZS9zdGFuZGFyZC5nbHNsLmpzJztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5cclxuLy8gSW1wb3J0IHN0YW5kYXJkIHNoYWRlclxyXG5TaGFkZXJbJ2ltcG9ydCddKHN0YW5kYXJkRXNzbCk7XHJcblxyXG52YXIgVEVYVFVSRV9QUk9QRVJUSUVTID0gWydkaWZmdXNlTWFwJywgJ25vcm1hbE1hcCcsICdyb3VnaG5lc3NNYXAnLCAnbWV0YWxuZXNzTWFwJywgJ2VtaXNzaXZlTWFwJywgJ2Vudmlyb25tZW50TWFwJywgJ2JyZGZMb29rdXAnLCAnc3Nhb01hcCcsICdhb01hcCddO1xyXG52YXIgU0lNUExFX1BST1BFUlRJRVMgPSBbJ2NvbG9yJywgJ2VtaXNzaW9uJywgJ2VtaXNzaW9uSW50ZW5zaXR5JywgJ2FscGhhJywgJ3JvdWdobmVzcycsICdtZXRhbG5lc3MnLCAndXZSZXBlYXQnLCAndXZPZmZzZXQnLCAnYW9JbnRlbnNpdHknLCAnYWxwaGFDdXRvZmYnLCAnbm9ybWFsU2NhbGUnXTtcclxudmFyIFBST1BFUlRJRVNfQ0hBTkdFX1NIQURFUiA9IFsnbGluZWFyJywgJ2VuY29kZVJHQk0nLCAnZGVjb2RlUkdCTScsICdkb3VibGVTaWRlZCcsICdhbHBoYVRlc3QnLCAncm91Z2huZXNzQ2hhbm5lbCcsICdtZXRhbG5lc3NDaGFubmVsJywgJ2Vudmlyb25tZW50TWFwUHJlZmlsdGVyZWQnXTtcclxuXHJcbnZhciBOVU1fREVGSU5FX01BUCA9IHtcclxuICAgICdyb3VnaG5lc3NDaGFubmVsJzogJ1JPVUdITkVTU19DSEFOTkVMJyxcclxuICAgICdtZXRhbG5lc3NDaGFubmVsJzogJ01FVEFMTkVTU19DSEFOTkVMJ1xyXG59O1xyXG52YXIgQk9PTF9ERUZJTkVfTUFQID0ge1xyXG4gICAgJ2xpbmVhcic6ICdTUkdCX0RFQ09ERScsXHJcbiAgICAnZW5jb2RlUkdCTSc6ICdSR0JNX0VOQ09ERScsXHJcbiAgICAnZGVjb2RlUkdCTSc6ICdSR0JNX0RFQ09ERScsXHJcbiAgICAnZG91YmxlU2lkZWQnOiAnRE9VQkxFX1NJREVEJyxcclxuICAgICdhbHBoYVRlc3QnOiAnQUxQSEFfVEVTVCcsXHJcbiAgICAnZW52aXJvbm1lbnRNYXBQcmVmaWx0ZXJlZCc6ICdFTlZJUk9OTUVOVE1BUF9QUkVGSUxURVInXHJcbn07XHJcblxyXG5cclxudmFyIHN0YW5kYXJkU2hhZGVyO1xyXG4vKipcclxuICogU3RhbmRhcmQgbWF0ZXJpYWwgd2l0aG91dCBjdXN0b20gc2hhZGVyLlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5TdGFuZGFyZE1hdGVyaWFsXHJcbiAqIEBleHRlbmRzIGNsYXkuQmFzZVxyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgbWF0ID0gbmV3IGNsYXkuU3RhbmRhcmRNYXRlcmlhbCh7XHJcbiAqICAgICBjb2xvcjogWzEsIDEsIDFdLFxyXG4gKiAgICAgZGlmZnVzZU1hcDogZGlmZnVzZVRleHR1cmVcclxuICogfSk7XHJcbiAqIG1hdC5yb3VnaG5lc3MgPSAxO1xyXG4gKi9cclxudmFyIFN0YW5kYXJkTWF0ZXJpYWwgPSBNYXRlcmlhbC5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKCFzdGFuZGFyZFNoYWRlcikge1xyXG4gICAgICAgIHN0YW5kYXJkU2hhZGVyID0gbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkTVIudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmRNUi5mcmFnbWVudCcpKTtcclxuICAgIH1cclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuU3RhbmRhcmRNYXRlcmlhbCMgKi8ge1xyXG4gICAgICAgIHNoYWRlcjogc3RhbmRhcmRTaGFkZXJcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uIChvcHRpb24pIHtcclxuICAgIC8vIFBFTkRJTkdcclxuICAgIHV0aWwuZXh0ZW5kKHRoaXMsIG9wdGlvbik7XHJcbiAgICAvLyBFeHRlbmQgYWZ0ZXIgc2hhZGVyIGlzIGNyZWF0ZWQuXHJcbiAgICB1dGlsLmRlZmF1bHRzKHRoaXMsIC8qKiBAbGVuZHMgY2xheS5TdGFuZGFyZE1hdGVyaWFsIyAqLyAge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBbMSwgMSwgMV1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb2xvcjogWzEsIDEsIDFdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgICAgICogQGRlZmF1bHQgWzAsIDAsIDBdXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW1pc3Npb246IFswLCAwLCAwXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW1pc3Npb25JbnRlbnNpdHk6IDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMC41XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcm91Z2huZXNzOiAwLjUsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1ldGFsbmVzczogMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYWxwaGE6IDEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFscGhhVGVzdDogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEN1dG9mZiB0aHJlc2hvbGQgZm9yIGFscGhhIHRlc3RcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFscGhhQ3V0b2ZmOiAwLjksXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNjYWxhciBtdWx0aXBsaWVyIGFwcGxpZWQgdG8gZWFjaCBub3JtYWwgdmVjdG9yIG9mIG5vcm1hbCB0ZXh0dXJlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFhYWCBUaGlzIHZhbHVlIGlzIGNvbnNpZGVyZWQgb25seSBpZiBhIG5vcm1hbCB0ZXh0dXJlIGlzIHNwZWNpZmllZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBub3JtYWxTY2FsZTogMS4wLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBUT0RPIE11c3QgZGlzYWJsZSBjdWxsaW5nLlxyXG4gICAgICAgIGRvdWJsZVNpZGVkOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRpZmZ1c2VNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBub3JtYWxNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICByb3VnaG5lc3NNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBtZXRhbG5lc3NNYXA6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVtaXNzaXZlTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlQ3ViZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbnZpcm9ubWVudE1hcDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW52aXJvbm1lbnRCb3g6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQlJERiBMb29rdXAgaXMgZ2VuZXJhdGVkIGJ5IGNsYXkudXRpbC5jdWJlbWFwLmludGVncmF0ZUJyZGZcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYnJkZkxvb2t1cDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNzYW9NYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhb01hcDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFsxLCAxXVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHV2UmVwZWF0OiBbMSwgMV0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBbMCwgMF1cclxuICAgICAgICAgKi9cclxuICAgICAgICB1dk9mZnNldDogWzAsIDBdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAgICAgKi9cclxuICAgICAgICBhb0ludGVuc2l0eTogMSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXBQcmVmaWx0ZXJlZDogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGxpbmVhcjogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVuY29kZVJHQk06IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkZWNvZGVSR0JNOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge051bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICByb3VnaG5lc3NDaGFubmVsOiAwLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtOdW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWV0YWxuZXNzQ2hhbm5lbDogMVxyXG4gICAgfSk7XHJcbn0sIHtcclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG1hdGVyaWFsID0gbmV3IFN0YW5kYXJkTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBURVhUVVJFX1BST1BFUlRJRVMuZm9yRWFjaChmdW5jdGlvbiAocHJvcE5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXNbcHJvcE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbFtwcm9wTmFtZV0gPSB0aGlzW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgICAgIFNJTVBMRV9QUk9QRVJUSUVTLmNvbmNhdChQUk9QRVJUSUVTX0NIQU5HRV9TSEFERVIpLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsW3Byb3BOYW1lXSA9IHRoaXNbcHJvcE5hbWVdO1xyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcclxuICAgIH1cclxufSk7XHJcblxyXG5TSU1QTEVfUFJPUEVSVElFUy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wTmFtZSkge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCBwcm9wTmFtZSwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQocHJvcE5hbWUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKHByb3BOYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxuVEVYVFVSRV9QUk9QRVJUSUVTLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsIHByb3BOYW1lLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldChwcm9wTmFtZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFVuaWZvcm0ocHJvcE5hbWUsIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufSk7XHJcblxyXG5QUk9QRVJUSUVTX0NIQU5HRV9TSEFERVIuZm9yRWFjaChmdW5jdGlvbiAocHJvcE5hbWUpIHtcclxuICAgIHZhciBwcml2YXRlS2V5ID0gJ18nICsgcHJvcE5hbWU7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsIHByb3BOYW1lLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3ByaXZhdGVLZXldO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpc1twcml2YXRlS2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAocHJvcE5hbWUgaW4gTlVNX0RFRklORV9NQVApIHtcclxuICAgICAgICAgICAgICAgIHZhciBkZWZpbmVOYW1lID0gTlVNX0RFRklORV9NQVBbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWZpbmUoJ2ZyYWdtZW50JywgZGVmaW5lTmFtZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZU5hbWUgPSBCT09MX0RFRklORV9NQVBbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPyB0aGlzLmRlZmluZSgnZnJhZ21lbnQnLCBkZWZpbmVOYW1lKSA6IHRoaXMudW5kZWZpbmUoJ2ZyYWdtZW50JywgZGVmaW5lTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufSk7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU3RhbmRhcmRNYXRlcmlhbC5wcm90b3R5cGUsICdlbnZpcm9ubWVudEJveCcsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBlbnZCb3ggPSB0aGlzLl9lbnZpcm9ubWVudEJveDtcclxuICAgICAgICBpZiAoZW52Qm94KSB7XHJcbiAgICAgICAgICAgIGVudkJveC5taW4uc2V0QXJyYXkodGhpcy5nZXQoJ2Vudmlyb25tZW50Qm94TWluJykpO1xyXG4gICAgICAgICAgICBlbnZCb3gubWF4LnNldEFycmF5KHRoaXMuZ2V0KCdlbnZpcm9ubWVudEJveE1heCcpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVudkJveDtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9lbnZpcm9ubWVudEJveCA9IHZhbHVlO1xyXG5cclxuICAgICAgICB2YXIgdW5pZm9ybXMgPSB0aGlzLnVuaWZvcm1zID0gdGhpcy51bmlmb3JtcyB8fCB7fTtcclxuICAgICAgICB1bmlmb3Jtc1snZW52aXJvbm1lbnRCb3hNaW4nXSA9IHVuaWZvcm1zWydlbnZpcm9ubWVudEJveE1pbiddIHx8IHtcclxuICAgICAgICAgICAgdmFsdWU6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHVuaWZvcm1zWydlbnZpcm9ubWVudEJveE1heCddID0gdW5pZm9ybXNbJ2Vudmlyb25tZW50Qm94TWF4J10gfHwge1xyXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIFRPRE8gQ2FuJ3QgZGV0ZWN0IG9wZXJhdGlvbiBsaWtlIGJveC5taW4gPSBuZXcgVmVjdG9yKClcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKCdlbnZpcm9ubWVudEJveE1pbicsIHZhbHVlLm1pbi5hcnJheSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybSgnZW52aXJvbm1lbnRCb3hNYXgnLCB2YWx1ZS5tYXguYXJyYXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVmaW5lKCdmcmFnbWVudCcsICdQQVJBTExBWF9DT1JSRUNURUQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1BBUkFMTEFYX0NPUlJFQ1RFRCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTdGFuZGFyZE1hdGVyaWFsO1xyXG4iLCJpbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcblxyXG52YXIgX2xpYnJhcnkgPSB7fTtcclxuXHJcbmZ1bmN0aW9uIFNoYWRlckxpYnJhcnkgKCkge1xyXG4gICAgdGhpcy5fcG9vbCA9IHt9O1xyXG59XHJcblxyXG5TaGFkZXJMaWJyYXJ5LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICB2YXIga2V5ID0gbmFtZTtcclxuXHJcbiAgICBpZiAodGhpcy5fcG9vbFtrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvb2xba2V5XTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBzb3VyY2UgPSBfbGlicmFyeVtuYW1lXTtcclxuICAgICAgICBpZiAoIXNvdXJjZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTaGFkZXIgXCInICsgbmFtZSArICdcIicgKyAnIGlzIG5vdCBpbiB0aGUgbGlicmFyeScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKHNvdXJjZS52ZXJ0ZXgsIHNvdXJjZS5mcmFnbWVudCk7XHJcbiAgICAgICAgdGhpcy5fcG9vbFtrZXldID0gc2hhZGVyO1xyXG4gICAgICAgIHJldHVybiBzaGFkZXI7XHJcbiAgICB9XHJcbn07XHJcblxyXG5TaGFkZXJMaWJyYXJ5LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5fcG9vbCA9IHt9O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gdGVtcGxhdGUobmFtZSwgdmVydGV4LCBmcmFnbWVudCkge1xyXG4gICAgX2xpYnJhcnlbbmFtZV0gPSB7XHJcbiAgICAgICAgdmVydGV4OiB2ZXJ0ZXgsXHJcbiAgICAgICAgZnJhZ21lbnQ6IGZyYWdtZW50XHJcbiAgICB9O1xyXG59XHJcblxyXG52YXIgZGVmYXVsdExpYnJhcnkgPSBuZXcgU2hhZGVyTGlicmFyeSgpO1xyXG5cclxuLyoqXHJcbiAqICMjIyBCdWlsaW4gc2hhZGVyc1xyXG4gKiArIGNsYXkuc3RhbmRhcmRcclxuICogKyBjbGF5LmJhc2ljXHJcbiAqICsgY2xheS5sYW1iZXJ0XHJcbiAqICsgY2xheS53aXJlZnJhbWVcclxuICpcclxuICogQG5hbWVzcGFjZSBjbGF5LnNoYWRlci5saWJyYXJ5XHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIG5ldyBzaGFkZXIgbGlicmFyeS5cclxuICAgICAqL1xyXG4gICAgY3JlYXRlTGlicmFyeTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgU2hhZGVyTGlicmFyeSgpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogR2V0IHNoYWRlciBmcm9tIGRlZmF1bHQgbGlicmFyeS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlNoYWRlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnNoYWRlci5saWJyYXJ5XHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogICAgIGNsYXkuc2hhZGVyLmxpYnJhcnkuZ2V0KCdjbGF5LnN0YW5kYXJkJylcclxuICAgICAqL1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRMaWJyYXJ5LmdldC5hcHBseShkZWZhdWx0TGlicmFyeSwgYXJndW1lbnRzKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnNoYWRlci5saWJyYXJ5XHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gdmVydGV4IC0gVmVydGV4IHNoYWRlciBjb2RlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGZyYWdtZW50IC0gRnJhZ21lbnQgc2hhZGVyIGNvZGVcclxuICAgICAqL1xyXG4gICAgdGVtcGxhdGU6IHRlbXBsYXRlLFxyXG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gZGVmYXVsdExpYnJhcnkuY2xlYXIoKTtcclxuICAgIH1cclxufTtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LkpvaW50XHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgSm9pbnQgPSBCYXNlLmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5LkpvaW50IyAqL1xyXG57XHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvaXNzdWVzLzE5MyNpc3N1ZWNvbW1lbnQtMjkyMTY1NzZcclxuICAgIC8qKlxyXG4gICAgICogSm9pbnQgbmFtZVxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgbmFtZTogJycsXHJcbiAgICAvKipcclxuICAgICAqIEluZGV4IG9mIGpvaW50IGluIHRoZSBza2VsZXRvblxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaW5kZXg6IC0xLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NlbmUgbm9kZSBhdHRhY2hlZCB0b1xyXG4gICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgbm9kZTogbnVsbFxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEpvaW50O1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBKb2ludCBmcm9tICcuL0pvaW50JztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vVGV4dHVyZSc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuL21hdGgvTWF0cml4NCc7XHJcblxyXG5pbXBvcnQgbWF0NCBmcm9tICcuL2dsbWF0cml4L21hdDQnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuL2dsbWF0cml4L3ZlYzMnO1xyXG5pbXBvcnQgcXVhdCBmcm9tICcuL2dsbWF0cml4L3F1YXQnO1xyXG5cclxuXHJcbnZhciB0bXBCb3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG52YXIgdG1wTWF0NCA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuU2tlbGV0b25cclxuICovXHJcbnZhciBTa2VsZXRvbiA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuU2tlbGV0b24jICove1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZWxhdGl2ZSByb290IG5vZGUgdGhhdCBub3QgYWZmZWN0IHRyYW5zZm9ybSBvZiBqb2ludC5cclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlbGF0aXZlUm9vdE5vZGU6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBuYW1lOiAnJyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogam9pbnRzXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxjbGF5LkpvaW50Pn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBqb2ludHM6IFtdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBib3VuZGluZyBib3ggd2l0aCBib3VuZCBnZW9tZXRyeS5cclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBib3VuZGluZ0JveDogbnVsbCxcclxuXHJcbiAgICAgICAgX2NsaXBzOiBbXSxcclxuXHJcbiAgICAgICAgLy8gTWF0cml4IHRvIGpvaW50IHNwYWNlIChyZWxhdGl2ZSB0byByb290IGpvaW50KVxyXG4gICAgICAgIF9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXk6IG51bGwsXHJcblxyXG4gICAgICAgIC8vIFVzZSBzdWJhcnJheSBpbnN0ZWFkIG9mIGNvcHkgYmFjayBlYWNoIHRpbWUgY29tcHV0aW5nIG1hdHJpeFxyXG4gICAgICAgIC8vIGh0dHA6Ly9qc3BlcmYuY29tL3N1YmFycmF5LXZzLWNvcHktZm9yLWFycmF5LXRyYW5zZm9ybS81XHJcbiAgICAgICAgX2pvaW50TWF0cmljZXNTdWJBcnJheXM6IFtdLFxyXG5cclxuICAgICAgICAvLyBqb2ludE1hdHJpeCAqIGN1cnJlbnRQb3NlTWF0cml4XHJcbiAgICAgICAgLy8gd29ybGRUcmFuc2Zvcm0gaXMgcmVsYXRpdmUgdG8gdGhlIHJvb3QgYm9uZVxyXG4gICAgICAgIC8vIHN0aWxsIGluIG1vZGVsIHNwYWNlIG5vdCB3b3JsZCBzcGFjZVxyXG4gICAgICAgIF9za2luTWF0cmljZXNBcnJheTogbnVsbCxcclxuXHJcbiAgICAgICAgX3NraW5NYXRyaWNlc1N1YkFycmF5czogW10sXHJcblxyXG4gICAgICAgIF9zdWJTa2luTWF0cmljZXNBcnJheToge31cclxuICAgIH07XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5Ta2VsZXRvbi5wcm90b3R5cGUgKi9cclxue1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGEgc2tpbm5pbmcgY2xpcCBhbmQgY3JlYXRlIGEgbWFwIGJldHdlZW4gY2xpcCBhbmQgc2tlbGV0b25cclxuICAgICAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uU2tpbm5pbmdDbGlwfSBjbGlwXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW21hcFJ1bGVdIE1hcCBiZXR3ZWVuIGpvaW50IG5hbWUgaW4gc2tlbGV0b24gYW5kIGpvaW50IG5hbWUgaW4gY2xpcFxyXG4gICAgICovXHJcbiAgICBhZGRDbGlwOiBmdW5jdGlvbiAoY2xpcCwgbWFwUnVsZSkge1xyXG4gICAgICAgIC8vIENsaXAgaGF2ZSBiZWVuIGV4aXN0cyBpblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fY2xpcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NsaXBzW2ldLmNsaXAgPT09IGNsaXApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBNYXAgdGhlIGpvaW50IGluZGV4IGluIHNrZWxldG9uIHRvIGpvaW50IHBvc2UgaW5kZXggaW4gY2xpcFxyXG4gICAgICAgIHZhciBtYXBzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBtYXBzW2ldID0gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIENyZWF0ZSBhdmF0YXJcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsaXAudHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2pdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRyYWNrID0gY2xpcC50cmFja3NbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgam9pbnROYW1lID0gam9pbnQubmFtZTtcclxuICAgICAgICAgICAgICAgIGlmIChtYXBSdWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgam9pbnROYW1lID0gbWFwUnVsZVtqb2ludE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRyYWNrLm5hbWUgPT09IGpvaW50TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcHNbal0gPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9jbGlwcy5wdXNoKHtcclxuICAgICAgICAgICAgbWFwczogbWFwcyxcclxuICAgICAgICAgICAgY2xpcDogY2xpcFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpcHMubGVuZ3RoIC0gMTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLlNraW5uaW5nQ2xpcH0gY2xpcFxyXG4gICAgICovXHJcbiAgICByZW1vdmVDbGlwOiBmdW5jdGlvbiAoY2xpcCkge1xyXG4gICAgICAgIHZhciBpZHggPSAtMTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NsaXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9jbGlwc1tpXS5jbGlwID09PSBjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICBpZHggPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkeCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2xpcHMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGFsbCBjbGlwc1xyXG4gICAgICovXHJcbiAgICByZW1vdmVDbGlwc0FsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NsaXBzID0gW107XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGNsaXAgYnkgaW5kZXhcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gaW5kZXhcclxuICAgICAqL1xyXG4gICAgZ2V0Q2xpcDogZnVuY3Rpb24gKGluZGV4KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NsaXBzW2luZGV4XSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xpcHNbaW5kZXhdLmNsaXA7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2xpcE51bWJlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGlwcy5sZW5ndGg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIGpvaW50IG1hdHJpY2VzIGZyb20gbm9kZSB0cmFuc2Zvcm1cclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICovXHJcbiAgICB1cGRhdGVKb2ludE1hdHJpY2VzOiAoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2YXIgbTQgPSBtYXQ0LmNyZWF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuam9pbnRzLmxlbmd0aCAqIDE2KTtcclxuICAgICAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuam9pbnRzLmxlbmd0aCAqIDE2KTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgbWF0NC5jb3B5KG00LCBqb2ludC5ub2RlLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgICAgIG1hdDQuaW52ZXJ0KG00LCBtNCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IGkgKiAxNjtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheVtvZmZzZXQgKyBqXSA9IG00W2pdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1hdHJpY2VzU3ViQXJyYXlzKCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgYm91bmRpbmdCb3ggb2YgZWFjaCBqb2ludCBib3VuZCB0byBnZW9tZXRyeS5cclxuICAgICAqIEFTU1VNRSBza2VsZXRvbiBhbmQgZ2VvbWV0cnkgam9pbnRzIGFyZSBtYXRjaGVkLlxyXG4gICAgICogQHBhcmFtIHtjbGF5Lkdlb21ldHJ5fSBnZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVKb2ludHNCb3VuZGluZ0JveGVzOiBmdW5jdGlvbiAoZ2VvbWV0cnkpIHtcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IGF0dHJpYnV0ZXMucG9zaXRpb247XHJcbiAgICAgICAgdmFyIGpvaW50QXR0ciA9IGF0dHJpYnV0ZXMuam9pbnQ7XHJcbiAgICAgICAgdmFyIHdlaWdodEF0dHIgPSBhdHRyaWJ1dGVzLndlaWdodDtcclxuXHJcbiAgICAgICAgdmFyIGpvaW50c0JvdW5kaW5nQm94ZXMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGpvaW50c0JvdW5kaW5nQm94ZXNbaV0gPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICAgICAgam9pbnRzQm91bmRpbmdCb3hlc1tpXS5fX3VwZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2dHhKb2ludCA9IFtdO1xyXG4gICAgICAgIHZhciB2dHhQb3MgPSBbXTtcclxuICAgICAgICB2YXIgdnR4V2VpZ2h0ID0gW107XHJcbiAgICAgICAgdmFyIG1heEpvaW50SWR4ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb21ldHJ5LnZlcnRleENvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgam9pbnRBdHRyLmdldChpLCB2dHhKb2ludCk7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uQXR0ci5nZXQoaSwgdnR4UG9zKTtcclxuICAgICAgICAgICAgd2VpZ2h0QXR0ci5nZXQoaSwgdnR4V2VpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgNDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodnR4V2VpZ2h0W2tdID4gMC4wMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBqb2ludElkeCA9IHZ0eEpvaW50W2tdO1xyXG4gICAgICAgICAgICAgICAgICAgIG1heEpvaW50SWR4ID0gTWF0aC5tYXgobWF4Sm9pbnRJZHgsIGpvaW50SWR4KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1pbiA9IGpvaW50c0JvdW5kaW5nQm94ZXNbam9pbnRJZHhdLm1pbi5hcnJheTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWF4ID0gam9pbnRzQm91bmRpbmdCb3hlc1tqb2ludElkeF0ubWF4LmFycmF5O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBqb2ludHNCb3VuZGluZ0JveGVzW2pvaW50SWR4XS5fX3VwZGF0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBtaW4gPSB2ZWMzLm1pbihtaW4sIG1pbiwgdnR4UG9zKTtcclxuICAgICAgICAgICAgICAgICAgICBtYXggPSB2ZWMzLm1heChtYXgsIG1heCwgdnR4UG9zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fam9pbnRzQm91bmRpbmdCb3hlcyA9IGpvaW50c0JvdW5kaW5nQm94ZXM7XHJcblxyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuXHJcbiAgICAgICAgaWYgKG1heEpvaW50SWR4IDwgdGhpcy5qb2ludHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0dlb21ldHJ5IGpvaW50cyBhbmQgc2tlbGV0b24gam9pbnRzIGRvblxcJ3QgbWF0Y2gnKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHNldEpvaW50TWF0cmljZXNBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheSA9IGFycjtcclxuICAgICAgICB0aGlzLl9za2luTWF0cmljZXNBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYXJyLmxlbmd0aCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVNYXRyaWNlc1N1YkFycmF5cygpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVNYXRyaWNlc1N1YkFycmF5czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fam9pbnRNYXRyaWNlc1N1YkFycmF5c1tpXSA9IHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheS5zdWJhcnJheShpICogMTYsIChpKzEpICogMTYpO1xyXG4gICAgICAgICAgICB0aGlzLl9za2luTWF0cmljZXNTdWJBcnJheXNbaV0gPSB0aGlzLl9za2luTWF0cmljZXNBcnJheS5zdWJhcnJheShpICogMTYsIChpKzEpICogMTYpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgc2tpbm5pbmcgbWF0cmljZXNcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuX3NldFBvc2UoKTtcclxuXHJcbiAgICAgICAgdmFyIGpvaW50c0JvdW5kaW5nQm94ZXMgPSB0aGlzLl9qb2ludHNCb3VuZGluZ0JveGVzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2ldO1xyXG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzU3ViQXJyYXlzW2ldLFxyXG4gICAgICAgICAgICAgICAgam9pbnQubm9kZS53b3JsZFRyYW5zZm9ybS5hcnJheSxcclxuICAgICAgICAgICAgICAgIHRoaXMuX2pvaW50TWF0cmljZXNTdWJBcnJheXNbaV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5taW4uc2V0KEluZmluaXR5LCBJbmZpbml0eSwgSW5maW5pdHkpO1xyXG4gICAgICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1heC5zZXQoLUluZmluaXR5LCAtSW5maW5pdHksIC1JbmZpbml0eSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJib3ggPSBqb2ludHNCb3VuZGluZ0JveGVzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJib3guX191cGRhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG1wQm91bmRpbmdCb3guY29weShiYm94KTtcclxuICAgICAgICAgICAgICAgICAgICB0bXBNYXQ0LmFycmF5ID0gdGhpcy5fc2tpbk1hdHJpY2VzU3ViQXJyYXlzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcEJvdW5kaW5nQm94LmFwcGx5VHJhbnNmb3JtKHRtcE1hdDQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvdW5kaW5nQm94LnVuaW9uKHRtcEJvdW5kaW5nQm94KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0U3ViU2tpbk1hdHJpY2VzOiBmdW5jdGlvbiAobWVzaElkLCBqb2ludHMpIHtcclxuICAgICAgICB2YXIgc3ViQXJyYXkgPSB0aGlzLl9zdWJTa2luTWF0cmljZXNBcnJheVttZXNoSWRdO1xyXG4gICAgICAgIGlmICghc3ViQXJyYXkpIHtcclxuICAgICAgICAgICAgc3ViQXJyYXlcclxuICAgICAgICAgICAgICAgID0gdGhpcy5fc3ViU2tpbk1hdHJpY2VzQXJyYXlbbWVzaElkXVxyXG4gICAgICAgICAgICAgICAgPSBuZXcgRmxvYXQzMkFycmF5KGpvaW50cy5sZW5ndGggKiAxNik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpZHggPSBqb2ludHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7IGorKykge1xyXG4gICAgICAgICAgICAgICAgc3ViQXJyYXlbY3Vyc29yKytdID0gdGhpcy5fc2tpbk1hdHJpY2VzQXJyYXlbaWR4ICogMTYgKyBqXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3ViQXJyYXk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFN1YlNraW5NYXRyaWNlc1RleHR1cmU6IGZ1bmN0aW9uIChtZXNoSWQsIGpvaW50cykge1xyXG4gICAgICAgIHZhciBza2luTWF0cmljZXMgPSB0aGlzLmdldFN1YlNraW5NYXRyaWNlcyhtZXNoSWQsIGpvaW50cyk7XHJcbiAgICAgICAgdmFyIHNpemU7XHJcbiAgICAgICAgdmFyIG51bUpvaW50cyA9IHRoaXMuam9pbnRzLmxlbmd0aDtcclxuICAgICAgICBpZiAobnVtSm9pbnRzID4gMjU2KSB7XHJcbiAgICAgICAgICAgIHNpemUgPSA2NDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobnVtSm9pbnRzID4gNjQpIHtcclxuICAgICAgICAgICAgc2l6ZSA9IDMyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChudW1Kb2ludHMgPiAxNikge1xyXG4gICAgICAgICAgICBzaXplID0gMTY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzaXplID0gODtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fc2tpbk1hdHJpY2VzVGV4dHVyZSA9IHRoaXMuX3NraW5NYXRyaWNlc1RleHR1cmUgfHwgbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIHR5cGU6IFRleHR1cmUuRkxPQVQsXHJcbiAgICAgICAgICAgIG1pbkZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxyXG4gICAgICAgICAgICBtYWdGaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICAgICAgdXNlTWlwbWFwOiBmYWxzZSxcclxuICAgICAgICAgICAgZmxpcFk6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGV4dHVyZS53aWR0aCA9IHNpemU7XHJcbiAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSBzaXplO1xyXG5cclxuICAgICAgICBpZiAoIXRleHR1cmUucGl4ZWxzIHx8IHRleHR1cmUucGl4ZWxzLmxlbmd0aCAhPT0gc2l6ZSAqIHNpemUgKiA0KSB7XHJcbiAgICAgICAgICAgIHRleHR1cmUucGl4ZWxzID0gbmV3IEZsb2F0MzJBcnJheShzaXplICogc2l6ZSAqIDQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZXh0dXJlLnBpeGVscy5zZXQoc2tpbk1hdHJpY2VzKTtcclxuICAgICAgICB0ZXh0dXJlLmRpcnR5KCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRTa2luTWF0cmljZXNUZXh0dXJlOiBmdW5jdGlvbiAoKSB7XHJcblxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fc2tpbk1hdHJpY2VzVGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldFBvc2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5fY2xpcHNbMF0pIHtcclxuICAgICAgICAgICAgdmFyIGNsaXAgPSB0aGlzLl9jbGlwc1swXS5jbGlwO1xyXG4gICAgICAgICAgICB2YXIgbWFwcyA9IHRoaXMuX2NsaXBzWzBdLm1hcHM7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChtYXBzW2ldID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHBvc2UgPSBjbGlwLnRyYWNrc1ttYXBzW2ldXTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBOb3QgdXBkYXRlIGlmIHRoZXJlIGlzIG5vIGRhdGEuXHJcbiAgICAgICAgICAgICAgICAvLyBQRU5ESU5HIElmIHN5bmMgcG9zZS5wb3NpdGlvbiwgcG9zZS5yb3RhdGlvbiwgcG9zZS5zY2FsZVxyXG4gICAgICAgICAgICAgICAgaWYgKHBvc2UuY2hhbm5lbHMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZWMzLmNvcHkoam9pbnQubm9kZS5wb3NpdGlvbi5hcnJheSwgcG9zZS5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocG9zZS5jaGFubmVscy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHF1YXQuY29weShqb2ludC5ub2RlLnJvdGF0aW9uLmFycmF5LCBwb3NlLnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwb3NlLmNoYW5uZWxzLnNjYWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5jb3B5KGpvaW50Lm5vZGUuc2NhbGUuYXJyYXksIHBvc2Uuc2NhbGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGpvaW50Lm5vZGUucG9zaXRpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGpvaW50Lm5vZGUucm90YXRpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGpvaW50Lm5vZGUuc2NhbGUuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uIChjbG9uZWROb2Rlc01hcCkge1xyXG4gICAgICAgIHZhciBza2VsZXRvbiA9IG5ldyBTa2VsZXRvbigpO1xyXG4gICAgICAgIHNrZWxldG9uLm5hbWUgPSB0aGlzLm5hbWU7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5ld0pvaW50ID0gbmV3IEpvaW50KCk7XHJcbiAgICAgICAgICAgIHZhciBqb2ludCA9IHRoaXMuam9pbnRzW2ldO1xyXG4gICAgICAgICAgICBuZXdKb2ludC5uYW1lID0gam9pbnQubmFtZTtcclxuICAgICAgICAgICAgbmV3Sm9pbnQuaW5kZXggPSBqb2ludC5pbmRleDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjbG9uZWROb2Rlc01hcCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5ld05vZGUgPSBjbG9uZWROb2Rlc01hcFtqb2ludC5ub2RlLl9fdWlkX19dO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghbmV3Tm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NhblxcJ3QgZmluZCBub2RlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbmV3Sm9pbnQubm9kZSA9IG5ld05vZGUgfHwgam9pbnQubm9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5ld0pvaW50Lm5vZGUgPSBqb2ludC5ub2RlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBza2VsZXRvbi5qb2ludHMucHVzaChuZXdKb2ludCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5KSB7XHJcbiAgICAgICAgICAgIHZhciBsZW4gPSB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkubGVuZ3RoO1xyXG4gICAgICAgICAgICBza2VsZXRvbi5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheShsZW4pO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbi5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5W2ldID0gdGhpcy5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5W2ldO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBza2VsZXRvbi5fc2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGxlbik7XHJcblxyXG4gICAgICAgICAgICBza2VsZXRvbi51cGRhdGVNYXRyaWNlc1N1YkFycmF5cygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2tlbGV0b24uX2pvaW50c0JvdW5kaW5nQm94ZSA9ICh0aGlzLl9qb2ludHNCb3VuZGluZ0JveGVzIHx8IFtdKS5tYXAoZnVuY3Rpb24gKGJib3gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGJib3guY2xvbmUoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2tlbGV0b24udXBkYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBza2VsZXRvbjtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTa2VsZXRvbjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJcXG5AZXhwb3J0IGNsYXkudXRpbC5yYW5kXFxuaGlnaHAgZmxvYXQgcmFuZCh2ZWMyIHV2KSB7XFxuIGNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1MztcXG4gaGlnaHAgZmxvYXQgZHQgPSBkb3QodXYueHksIHZlYzIoYSxiKSksIHNuID0gbW9kKGR0LCAzLjE0MTU5MjY1MzU4OTc5Myk7XFxuIHJldHVybiBmcmFjdChzaW4oc24pICogYyk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5jYWxjdWxhdGVfYXR0ZW51YXRpb25cXG51bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uRmFjdG9yIDogNS4wO1xcbmZsb2F0IGxpZ2h0QXR0ZW51YXRpb24oZmxvYXQgZGlzdCwgZmxvYXQgcmFuZ2UpXFxue1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IDEuMDtcXG4gYXR0ZW51YXRpb24gPSBkaXN0KmRpc3QvKHJhbmdlKnJhbmdlKzEuMCk7XFxuIGZsb2F0IGF0dF9zID0gYXR0ZW51YXRpb25GYWN0b3I7XFxuIGF0dGVudWF0aW9uID0gMS4wLyhhdHRlbnVhdGlvbiphdHRfcysxLjApO1xcbiBhdHRfcyA9IDEuMC8oYXR0X3MrMS4wKTtcXG4gYXR0ZW51YXRpb24gPSBhdHRlbnVhdGlvbiAtIGF0dF9zO1xcbiBhdHRlbnVhdGlvbiAvPSAxLjAgLSBhdHRfcztcXG4gcmV0dXJuIGNsYW1wKGF0dGVudWF0aW9uLCAwLjAsIDEuMCk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5lZGdlX2ZhY3RvclxcbiNpZmRlZiBTVVBQT1JUX1NUQU5EQVJEX0RFUklWQVRJVkVTXFxuZmxvYXQgZWRnZUZhY3RvcihmbG9hdCB3aWR0aClcXG57XFxuIHZlYzMgZCA9IGZ3aWR0aCh2X0JhcnljZW50cmljKTtcXG4gdmVjMyBhMyA9IHNtb290aHN0ZXAodmVjMygwLjApLCBkICogd2lkdGgsIHZfQmFyeWNlbnRyaWMpO1xcbiByZXR1cm4gbWluKG1pbihhMy54LCBhMy55KSwgYTMueik7XFxufVxcbiNlbHNlXFxuZmxvYXQgZWRnZUZhY3RvcihmbG9hdCB3aWR0aClcXG57XFxuIHJldHVybiAxLjA7XFxufVxcbiNlbmRpZlxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5lbmNvZGVfZmxvYXRcXG52ZWM0IGVuY29kZUZsb2F0KGNvbnN0IGluIGZsb2F0IGRlcHRoKVxcbntcXG4gY29uc3QgdmVjNCBiaXRTaGlmdHMgPSB2ZWM0KDI1Ni4wKjI1Ni4wKjI1Ni4wLCAyNTYuMCoyNTYuMCwgMjU2LjAsIDEuMCk7XFxuIGNvbnN0IHZlYzQgYml0X21hc2sgPSB2ZWM0KDAuMCwgMS4wLzI1Ni4wLCAxLjAvMjU2LjAsIDEuMC8yNTYuMCk7XFxuIHZlYzQgcmVzID0gZnJhY3QoZGVwdGggKiBiaXRTaGlmdHMpO1xcbiByZXMgLT0gcmVzLnh4eXogKiBiaXRfbWFzaztcXG4gcmV0dXJuIHJlcztcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbmZsb2F0IGRlY29kZUZsb2F0KGNvbnN0IGluIHZlYzQgY29sb3IpXFxue1xcbiBjb25zdCB2ZWM0IGJpdFNoaWZ0cyA9IHZlYzQoMS4wLygyNTYuMCoyNTYuMCoyNTYuMCksIDEuMC8oMjU2LjAqMjU2LjApLCAxLjAvMjU2LjAsIDEuMCk7XFxuIHJldHVybiBkb3QoY29sb3IsIGJpdFNoaWZ0cyk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5mbG9hdFxcbkBpbXBvcnQgY2xheS51dGlsLmVuY29kZV9mbG9hdFxcbkBpbXBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5yZ2JtX2RlY29kZVxcbnZlYzMgUkdCTURlY29kZSh2ZWM0IHJnYm0sIGZsb2F0IHJhbmdlKSB7XFxuIHJldHVybiByYW5nZSAqIHJnYm0ucmdiICogcmdibS5hO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucmdibV9lbmNvZGVcXG52ZWM0IFJHQk1FbmNvZGUodmVjMyBjb2xvciwgZmxvYXQgcmFuZ2UpIHtcXG4gaWYgKGRvdChjb2xvciwgY29sb3IpID09IDAuMCkge1xcbiByZXR1cm4gdmVjNCgwLjApO1xcbiB9XFxuIHZlYzQgcmdibTtcXG4gY29sb3IgLz0gcmFuZ2U7XFxuIHJnYm0uYSA9IGNsYW1wKG1heChtYXgoY29sb3IuciwgY29sb3IuZyksIG1heChjb2xvci5iLCAxZS02KSksIDAuMCwgMS4wKTtcXG4gcmdibS5hID0gY2VpbChyZ2JtLmEgKiAyNTUuMCkgLyAyNTUuMDtcXG4gcmdibS5yZ2IgPSBjb2xvciAvIHJnYm0uYTtcXG4gcmV0dXJuIHJnYm07XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibV9kZWNvZGVcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtX2VuY29kZVxcbnZlYzQgZGVjb2RlSERSKHZlYzQgY29sb3IpXFxue1xcbiNpZiBkZWZpbmVkKFJHQk1fREVDT0RFKSB8fCBkZWZpbmVkKFJHQk0pXFxuIHJldHVybiB2ZWM0KFJHQk1EZWNvZGUoY29sb3IsIDguMTIpLCAxLjApO1xcbiNlbHNlXFxuIHJldHVybiBjb2xvcjtcXG4jZW5kaWZcXG59XFxudmVjNCBlbmNvZGVIRFIodmVjNCBjb2xvcilcXG57XFxuI2lmIGRlZmluZWQoUkdCTV9FTkNPREUpIHx8IGRlZmluZWQoUkdCTSlcXG4gcmV0dXJuIFJHQk1FbmNvZGUoY29sb3IueHl6LCA4LjEyKTtcXG4jZWxzZVxcbiByZXR1cm4gY29sb3I7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5zcmdiXFxudmVjNCBzUkdCVG9MaW5lYXIoaW4gdmVjNCB2YWx1ZSkge1xcbiByZXR1cm4gdmVjNChtaXgocG93KHZhbHVlLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoMC4wNTIxMzI3MDE0KSwgdmVjMygyLjQpKSwgdmFsdWUucmdiICogMC4wNzczOTkzODA4LCB2ZWMzKGxlc3NUaGFuRXF1YWwodmFsdWUucmdiLCB2ZWMzKDAuMDQwNDUpKSkpLCB2YWx1ZS53KTtcXG59XFxudmVjNCBsaW5lYXJUb3NSR0IoaW4gdmVjNCB2YWx1ZSkge1xcbiByZXR1cm4gdmVjNChtaXgocG93KHZhbHVlLnJnYiwgdmVjMygwLjQxNjY2KSkgKiAxLjA1NSAtIHZlYzMoMC4wNTUpLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMyhsZXNzVGhhbkVxdWFsKHZhbHVlLnJnYiwgdmVjMygwLjAwMzEzMDgpKSkpLCB2YWx1ZS53KTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG4jaWZkZWYgU0tJTk5JTkdcXG5hdHRyaWJ1dGUgdmVjMyB3ZWlnaHQgOiBXRUlHSFQ7XFxuYXR0cmlidXRlIHZlYzQgam9pbnQgOiBKT0lOVDtcXG4jaWZkZWYgVVNFX1NLSU5fTUFUUklDRVNfVEVYVFVSRVxcbnVuaWZvcm0gc2FtcGxlcjJEIHNraW5NYXRyaWNlc1RleHR1cmUgOiBpZ25vcmU7XFxudW5pZm9ybSBmbG9hdCBza2luTWF0cmljZXNUZXh0dXJlU2l6ZTogaWdub3JlO1xcbm1hdDQgZ2V0U2tpbk1hdHJpeChzYW1wbGVyMkQgdGV4LCBmbG9hdCBpZHgpIHtcXG4gZmxvYXQgaiA9IGlkeCAqIDQuMDtcXG4gZmxvYXQgeCA9IG1vZChqLCBza2luTWF0cmljZXNUZXh0dXJlU2l6ZSk7XFxuIGZsb2F0IHkgPSBmbG9vcihqIC8gc2tpbk1hdHJpY2VzVGV4dHVyZVNpemUpICsgMC41O1xcbiB2ZWMyIHNjYWxlID0gdmVjMihza2luTWF0cmljZXNUZXh0dXJlU2l6ZSk7XFxuIHJldHVybiBtYXQ0KFxcbiB0ZXh0dXJlMkQodGV4LCB2ZWMyKHggKyAwLjUsIHkpIC8gc2NhbGUpLFxcbiB0ZXh0dXJlMkQodGV4LCB2ZWMyKHggKyAxLjUsIHkpIC8gc2NhbGUpLFxcbiB0ZXh0dXJlMkQodGV4LCB2ZWMyKHggKyAyLjUsIHkpIC8gc2NhbGUpLFxcbiB0ZXh0dXJlMkQodGV4LCB2ZWMyKHggKyAzLjUsIHkpIC8gc2NhbGUpXFxuICk7XFxufVxcbm1hdDQgZ2V0U2tpbk1hdHJpeChmbG9hdCBpZHgpIHtcXG4gcmV0dXJuIGdldFNraW5NYXRyaXgoc2tpbk1hdHJpY2VzVGV4dHVyZSwgaWR4KTtcXG59XFxuI2Vsc2VcXG51bmlmb3JtIG1hdDQgc2tpbk1hdHJpeFtKT0lOVF9DT1VOVF0gOiBTS0lOX01BVFJJWDtcXG5tYXQ0IGdldFNraW5NYXRyaXgoZmxvYXQgaWR4KSB7XFxuIHJldHVybiBza2luTWF0cml4W2ludChpZHgpXTtcXG59XFxuI2VuZGlmXFxuI2VuZGlmXFxuQGVuZFxcbkBleHBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbm1hdDQgc2tpbk1hdHJpeFdTID0gZ2V0U2tpbk1hdHJpeChqb2ludC54KSAqIHdlaWdodC54O1xcbmlmICh3ZWlnaHQueSA+IDFlLTQpXFxue1xcbiBza2luTWF0cml4V1MgKz0gZ2V0U2tpbk1hdHJpeChqb2ludC55KSAqIHdlaWdodC55O1xcbn1cXG5pZiAod2VpZ2h0LnogPiAxZS00KVxcbntcXG4gc2tpbk1hdHJpeFdTICs9IGdldFNraW5NYXRyaXgoam9pbnQueikgKiB3ZWlnaHQuejtcXG59XFxuZmxvYXQgd2VpZ2h0VyA9IDEuMC13ZWlnaHQueC13ZWlnaHQueS13ZWlnaHQuejtcXG5pZiAod2VpZ2h0VyA+IDFlLTQpXFxue1xcbiBza2luTWF0cml4V1MgKz0gZ2V0U2tpbk1hdHJpeChqb2ludC53KSAqIHdlaWdodFc7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5wYXJhbGxheF9jb3JyZWN0XFxudmVjMyBwYXJhbGxheENvcnJlY3QoaW4gdmVjMyBkaXIsIGluIHZlYzMgcG9zLCBpbiB2ZWMzIGJveE1pbiwgaW4gdmVjMyBib3hNYXgpIHtcXG4gdmVjMyBmaXJzdCA9IChib3hNYXggLSBwb3MpIC8gZGlyO1xcbiB2ZWMzIHNlY29uZCA9IChib3hNaW4gLSBwb3MpIC8gZGlyO1xcbiB2ZWMzIGZ1cnRoZXIgPSBtYXgoZmlyc3QsIHNlY29uZCk7XFxuIGZsb2F0IGRpc3QgPSBtaW4oZnVydGhlci54LCBtaW4oZnVydGhlci55LCBmdXJ0aGVyLnopKTtcXG4gdmVjMyBmaXhlZFBvcyA9IHBvcyArIGRpciAqIGRpc3Q7XFxuIHZlYzMgYm94Q2VudGVyID0gKGJveE1heCArIGJveE1pbikgKiAwLjU7XFxuIHJldHVybiBub3JtYWxpemUoZml4ZWRQb3MgLSBib3hDZW50ZXIpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuY2xhbXBfc2FtcGxlXFxudmVjNCBjbGFtcFNhbXBsZShjb25zdCBpbiBzYW1wbGVyMkQgdGV4dHVyZSwgY29uc3QgaW4gdmVjMiBjb29yZClcXG57XFxuI2lmZGVmIFNURVJFT1xcbiBmbG9hdCBleWUgPSBzdGVwKDAuNSwgY29vcmQueCkgKiAwLjU7XFxuIHZlYzIgY29vcmRDbGFtcGVkID0gY2xhbXAoY29vcmQsIHZlYzIoZXllLCAwLjApLCB2ZWMyKDAuNSArIGV5ZSwgMS4wKSk7XFxuI2Vsc2VcXG4gdmVjMiBjb29yZENsYW1wZWQgPSBjbGFtcChjb29yZCwgdmVjMigwLjApLCB2ZWMyKDEuMCkpO1xcbiNlbmRpZlxcbiByZXR1cm4gdGV4dHVyZTJEKHRleHR1cmUsIGNvb3JkQ2xhbXBlZCk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5BQ0VTXFxudmVjMyBBQ0VTVG9uZU1hcHBpbmcodmVjMyBjb2xvcilcXG57XFxuIGNvbnN0IGZsb2F0IEEgPSAyLjUxO1xcbiBjb25zdCBmbG9hdCBCID0gMC4wMztcXG4gY29uc3QgZmxvYXQgQyA9IDIuNDM7XFxuIGNvbnN0IGZsb2F0IEQgPSAwLjU5O1xcbiBjb25zdCBmbG9hdCBFID0gMC4xNDtcXG4gcmV0dXJuIChjb2xvciAqIChBICogY29sb3IgKyBCKSkgLyAoY29sb3IgKiAoQyAqIGNvbG9yICsgRCkgKyBFKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5iYXNpYy52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxudW5pZm9ybSB2ZWMyIHV2UmVwZWF0IDogWzEuMCwgMS4wXTtcXG51bmlmb3JtIHZlYzIgdXZPZmZzZXQgOiBbMC4wLCAwLjBdO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkIDogVEVYQ09PUkRfMDtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIGJhcnljZW50cmljO1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuYXR0cmlidXRlIHZlYzQgYV9Db2xvciA6IENPTE9SO1xcbnZhcnlpbmcgdmVjNCB2X0NvbG9yO1xcbiNlbmRpZlxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkICogdXZSZXBlYXQgKyB1dk9mZnNldDtcXG4gdl9CYXJ5Y2VudHJpYyA9IGJhcnljZW50cmljO1xcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuIHZfQ29sb3IgPSBhX0NvbG9yO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmJhc2ljLmZyYWdtZW50XFxuI2RlZmluZSBESUZGVVNFTUFQX0FMUEhBX0FMUEhBXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZU1hcDtcXG51bmlmb3JtIHZlYzMgY29sb3IgOiBbMS4wLCAxLjAsIDEuMF07XFxudW5pZm9ybSB2ZWMzIGVtaXNzaW9uIDogWzAuMCwgMC4wLCAwLjBdO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGEgOiAxLjA7XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG51bmlmb3JtIGZsb2F0IGFscGhhQ3V0b2ZmOiAwLjk7XFxuI2VuZGlmXFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbnZhcnlpbmcgdmVjNCB2X0NvbG9yO1xcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoIDogMC4wO1xcbnVuaWZvcm0gdmVjNCBsaW5lQ29sb3IgOiBbMC4wLCAwLjAsIDAuMCwgMC42XTtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG5AaW1wb3J0IGNsYXkudXRpbC5lZGdlX2ZhY3RvclxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkudXRpbC5zcmdiXFxuQGltcG9ydCBjbGF5LnV0aWwuQUNFU1xcbnZvaWQgbWFpbigpXFxue1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCBhbHBoYSk7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbiBnbF9GcmFnQ29sb3IgKj0gdl9Db2xvcjtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9ERUNPREVcXG4gZ2xfRnJhZ0NvbG9yID0gc1JHQlRvTGluZWFyKGdsX0ZyYWdDb2xvcik7XFxuI2VuZGlmXFxuI2lmZGVmIERJRkZVU0VNQVBfRU5BQkxFRFxcbiB2ZWM0IHRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRChkaWZmdXNlTWFwLCB2X1RleGNvb3JkKSk7XFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIHRleGVsID0gc1JHQlRvTGluZWFyKHRleGVsKTtcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChESUZGVVNFTUFQX0FMUEhBX0FMUEhBKVxcbiBnbF9GcmFnQ29sb3IuYSA9IHRleGVsLmE7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gdGV4ZWwucmdiO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IucmdiICs9IGVtaXNzaW9uO1xcbiBpZiggbGluZVdpZHRoID4gMC4pXFxuIHtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peChnbF9GcmFnQ29sb3IucmdiLCBsaW5lQ29sb3IucmdiLCAoMS4wIC0gZWRnZUZhY3RvcihsaW5lV2lkdGgpKSAqIGxpbmVDb2xvci5hKTtcXG4gfVxcbiNpZmRlZiBBTFBIQV9URVNUXFxuIGlmIChnbF9GcmFnQ29sb3IuYSA8IGFscGhhQ3V0b2ZmKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4jZW5kaWZcXG4jaWZkZWYgVE9ORU1BUFBJTkdcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IEFDRVNUb25lTWFwcGluZyhnbF9GcmFnQ29sb3IucmdiKTtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9FTkNPREVcXG4gZ2xfRnJhZ0NvbG9yID0gbGluZWFyVG9zUkdCKGdsX0ZyYWdDb2xvcik7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihnbF9GcmFnQ29sb3IpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LmxhbWJlcnQudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gbWF0NCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgOiBXT1JMRElOVkVSU0VUUkFOU1BPU0U7XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxudW5pZm9ybSB2ZWMyIHV2UmVwZWF0IDogWzEuMCwgMS4wXTtcXG51bmlmb3JtIHZlYzIgdXZPZmZzZXQgOiBbMC4wLCAwLjBdO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbCA6IE5PUk1BTDtcXG5hdHRyaWJ1dGUgdmVjMyBiYXJ5Y2VudHJpYztcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuYXR0cmlidXRlIHZlYzQgYV9Db2xvciA6IENPTE9SO1xcbnZhcnlpbmcgdmVjNCB2X0NvbG9yO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Ob3JtYWw7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4gdmVjMyBza2lubmVkTm9ybWFsID0gbm9ybWFsO1xcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gc2tpbm5lZE5vcm1hbCA9IChza2luTWF0cml4V1MgKiB2ZWM0KG5vcm1hbCwgMC4wKSkueHl6O1xcbiNlbmRpZlxcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KCBza2lubmVkUG9zaXRpb24sIDEuMCApO1xcbiB2X1RleGNvb3JkID0gdGV4Y29vcmQgKiB1dlJlcGVhdCArIHV2T2Zmc2V0O1xcbiB2X05vcm1hbCA9IG5vcm1hbGl6ZSggKCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgKiB2ZWM0KHNraW5uZWROb3JtYWwsIDAuMCkgKS54eXogKTtcXG4gdl9Xb3JsZFBvc2l0aW9uID0gKCB3b3JsZCAqIHZlYzQoIHNraW5uZWRQb3NpdGlvbiwgMS4wKSApLnh5ejtcXG4gdl9CYXJ5Y2VudHJpYyA9IGJhcnljZW50cmljO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gdl9Db2xvciA9IGFfQ29sb3I7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkubGFtYmVydC5mcmFnbWVudFxcbiNkZWZpbmUgRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZhcnlpbmcgdmVjMyB2X05vcm1hbDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGRpZmZ1c2VNYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzEuMCwgMS4wLCAxLjBdO1xcbnVuaWZvcm0gdmVjMyBlbWlzc2lvbiA6IFswLjAsIDAuMCwgMC4wXTtcXG51bmlmb3JtIGZsb2F0IGFscGhhIDogMS4wO1xcbiNpZmRlZiBBTFBIQV9URVNUXFxudW5pZm9ybSBmbG9hdCBhbHBoYUN1dG9mZjogMC45O1xcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoIDogMC4wO1xcbnVuaWZvcm0gdmVjNCBsaW5lQ29sb3IgOiBbMC4wLCAwLjAsIDAuMCwgMC42XTtcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxudmFyeWluZyB2ZWM0IHZfQ29sb3I7XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLmFtYmllbnRfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuYW1iaWVudF9zaF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBQT0lOVF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIucG9pbnRfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgRElSRUNUSU9OQUxfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLmRpcmVjdGlvbmFsX2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIFNQT1RfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLnNwb3RfbGlnaHRcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkudXRpbC5jYWxjdWxhdGVfYXR0ZW51YXRpb25cXG5AaW1wb3J0IGNsYXkudXRpbC5lZGdlX2ZhY3RvclxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkucGx1Z2luLmNvbXB1dGVfc2hhZG93X21hcFxcbkBpbXBvcnQgY2xheS51dGlsLkFDRVNcXG52b2lkIG1haW4oKVxcbntcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgYWxwaGEpO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gZ2xfRnJhZ0NvbG9yICo9IHZfQ29sb3I7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIGdsX0ZyYWdDb2xvciA9IHNSR0JUb0xpbmVhcihnbF9GcmFnQ29sb3IpO1xcbiNlbmRpZlxcbiNpZmRlZiBESUZGVVNFTUFQX0VOQUJMRURcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQoIGRpZmZ1c2VNYXAsIHZfVGV4Y29vcmQgKTtcXG4jaWZkZWYgU1JHQl9ERUNPREVcXG4gdGV4LnJnYiA9IHBvdyh0ZXgucmdiLCB2ZWMzKDIuMikpO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IucmdiICo9IHRleC5yZ2I7XFxuI2lmZGVmIERJRkZVU0VNQVBfQUxQSEFfQUxQSEFcXG4gZ2xfRnJhZ0NvbG9yLmEgKj0gdGV4LmE7XFxuI2VuZGlmXFxuI2VuZGlmXFxuIHZlYzMgZGlmZnVzZUNvbG9yID0gdmVjMygwLjAsIDAuMCwgMC4wKTtcXG4jaWZkZWYgQU1CSUVOVF9MSUdIVF9DT1VOVFxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7XFxuIGRpZmZ1c2VDb2xvciArPSBhbWJpZW50TGlnaHRDb2xvcltfaWR4X107XFxuIH1cXG4jZW5kaWZcXG4jaWZkZWYgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVFxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX1NIX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7e1xcbiBkaWZmdXNlQ29sb3IgKz0gY2FsY0FtYmllbnRTSExpZ2h0KF9pZHhfLCB2X05vcm1hbCkgKiBhbWJpZW50U0hMaWdodENvbG9yW19pZHhfXTtcXG4gfX1cXG4jZW5kaWZcXG4jaWZkZWYgUE9JTlRfTElHSFRfQ09VTlRcXG4jaWYgZGVmaW5lZChQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWJzUG9pbnRbUE9JTlRfTElHSFRfQ09VTlRdO1xcbiBpZiggc2hhZG93RW5hYmxlZCApXFxuIHtcXG4gY29tcHV0ZVNoYWRvd09mUG9pbnRMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic1BvaW50KTtcXG4gfVxcbiNlbmRpZlxcbiBmb3IoaW50IGkgPSAwOyBpIDwgUE9JTlRfTElHSFRfQ09VTlQ7IGkrKylcXG4ge1xcbiB2ZWMzIGxpZ2h0UG9zaXRpb24gPSBwb2ludExpZ2h0UG9zaXRpb25baV07XFxuIHZlYzMgbGlnaHRDb2xvciA9IHBvaW50TGlnaHRDb2xvcltpXTtcXG4gZmxvYXQgcmFuZ2UgPSBwb2ludExpZ2h0UmFuZ2VbaV07XFxuIHZlYzMgbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKGxpZ2h0RGlyZWN0aW9uKTtcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIHJhbmdlKTtcXG4gbGlnaHREaXJlY3Rpb24gLz0gZGlzdDtcXG4gZmxvYXQgbmRsID0gZG90KCB2X05vcm1hbCwgbGlnaHREaXJlY3Rpb24gKTtcXG4gZmxvYXQgc2hhZG93Q29udHJpYiA9IDEuMDtcXG4jaWYgZGVmaW5lZChQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGlmKCBzaGFkb3dFbmFibGVkIClcXG4ge1xcbiBzaGFkb3dDb250cmliID0gc2hhZG93Q29udHJpYnNQb2ludFtpXTtcXG4gfVxcbiNlbmRpZlxcbiBkaWZmdXNlQ29sb3IgKz0gbGlnaHRDb2xvciAqIGNsYW1wKG5kbCwgMC4wLCAxLjApICogYXR0ZW51YXRpb24gKiBzaGFkb3dDb250cmliO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIERJUkVDVElPTkFMX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBmbG9hdCBzaGFkb3dDb250cmlic0RpcltESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF07XFxuIGlmKHNoYWRvd0VuYWJsZWQpXFxuIHtcXG4gY29tcHV0ZVNoYWRvd09mRGlyZWN0aW9uYWxMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic0Rpcik7XFxuIH1cXG4jZW5kaWZcXG4gZm9yKGludCBpID0gMDsgaSA8IERJUkVDVElPTkFMX0xJR0hUX0NPVU5UOyBpKyspXFxuIHtcXG4gdmVjMyBsaWdodERpcmVjdGlvbiA9IC1kaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9uW2ldO1xcbiB2ZWMzIGxpZ2h0Q29sb3IgPSBkaXJlY3Rpb25hbExpZ2h0Q29sb3JbaV07XFxuIGZsb2F0IG5kbCA9IGRvdCh2X05vcm1hbCwgbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uKSk7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZiggc2hhZG93RW5hYmxlZCApXFxuIHtcXG4gc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzRGlyW2ldO1xcbiB9XFxuI2VuZGlmXFxuIGRpZmZ1c2VDb2xvciArPSBsaWdodENvbG9yICogY2xhbXAobmRsLCAwLjAsIDEuMCkgKiBzaGFkb3dDb250cmliO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIFNQT1RfTElHSFRfQ09VTlRcXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gZmxvYXQgc2hhZG93Q29udHJpYnNTcG90W1NQT1RfTElHSFRfQ09VTlRdO1xcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIGNvbXB1dGVTaGFkb3dPZlNwb3RMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic1Nwb3QpO1xcbiB9XFxuI2VuZGlmXFxuIGZvcihpbnQgaSA9IDA7IGkgPCBTUE9UX0xJR0hUX0NPVU5UOyBpKyspXFxuIHtcXG4gdmVjMyBsaWdodFBvc2l0aW9uID0gLXNwb3RMaWdodFBvc2l0aW9uW2ldO1xcbiB2ZWMzIHNwb3RMaWdodERpcmVjdGlvbiA9IC1ub3JtYWxpemUoIHNwb3RMaWdodERpcmVjdGlvbltpXSApO1xcbiB2ZWMzIGxpZ2h0Q29sb3IgPSBzcG90TGlnaHRDb2xvcltpXTtcXG4gZmxvYXQgcmFuZ2UgPSBzcG90TGlnaHRSYW5nZVtpXTtcXG4gZmxvYXQgYSA9IHNwb3RMaWdodFVtYnJhQW5nbGVDb3NpbmVbaV07XFxuIGZsb2F0IGIgPSBzcG90TGlnaHRQZW51bWJyYUFuZ2xlQ29zaW5lW2ldO1xcbiBmbG9hdCBmYWxsb2ZmRmFjdG9yID0gc3BvdExpZ2h0RmFsbG9mZkZhY3RvcltpXTtcXG4gdmVjMyBsaWdodERpcmVjdGlvbiA9IGxpZ2h0UG9zaXRpb24gLSB2X1dvcmxkUG9zaXRpb247XFxuIGZsb2F0IGRpc3QgPSBsZW5ndGgobGlnaHREaXJlY3Rpb24pO1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgcmFuZ2UpO1xcbiBsaWdodERpcmVjdGlvbiAvPSBkaXN0O1xcbiBmbG9hdCBjID0gZG90KHNwb3RMaWdodERpcmVjdGlvbiwgbGlnaHREaXJlY3Rpb24pO1xcbiBmbG9hdCBmYWxsb2ZmO1xcbiBmYWxsb2ZmID0gY2xhbXAoKGMgLSBhKSAvKCBiIC0gYSksIDAuMCwgMS4wKTtcXG4gZmFsbG9mZiA9IHBvdyhmYWxsb2ZmLCBmYWxsb2ZmRmFjdG9yKTtcXG4gZmxvYXQgbmRsID0gZG90KHZfTm9ybWFsLCBsaWdodERpcmVjdGlvbik7XFxuIG5kbCA9IGNsYW1wKG5kbCwgMC4wLCAxLjApO1xcbiBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiNpZiBkZWZpbmVkKFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZiggc2hhZG93RW5hYmxlZCApXFxuIHtcXG4gc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzU3BvdFtpXTtcXG4gfVxcbiNlbmRpZlxcbiBkaWZmdXNlQ29sb3IgKz0gbGlnaHRDb2xvciAqIG5kbCAqIGF0dGVudWF0aW9uICogKDEuMC1mYWxsb2ZmKSAqIHNoYWRvd0NvbnRyaWI7XFxuIH1cXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yLnJnYiAqPSBkaWZmdXNlQ29sb3I7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgKz0gZW1pc3Npb247XFxuIGlmKGxpbmVXaWR0aCA+IDAuKVxcbiB7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoZ2xfRnJhZ0NvbG9yLnJnYiwgbGluZUNvbG9yLnJnYiwgKDEuMCAtIGVkZ2VGYWN0b3IobGluZVdpZHRoKSkgKiBsaW5lQ29sb3IuYSk7XFxuIH1cXG4jaWZkZWYgQUxQSEFfVEVTVFxcbiBpZiAoZ2xfRnJhZ0NvbG9yLmEgPCBhbHBoYUN1dG9mZikge1xcbiBkaXNjYXJkO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIFRPTkVNQVBQSU5HXFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBBQ0VTVG9uZU1hcHBpbmcoZ2xfRnJhZ0NvbG9yLnJnYik7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfRU5DT0RFXFxuIGdsX0ZyYWdDb2xvciA9IGxpbmVhclRvc1JHQihnbF9GcmFnQ29sb3IpO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoZ2xfRnJhZ0NvbG9yKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS53aXJlZnJhbWUudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzMgYmFyeWNlbnRyaWM7XFxuQGltcG9ydCBjbGF5LmNodW5rLnNraW5uaW5nX2hlYWRlclxcbnZhcnlpbmcgdmVjMyB2X0JhcnljZW50cmljO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCApO1xcbiB2X0JhcnljZW50cmljID0gYmFyeWNlbnRyaWM7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkud2lyZWZyYW1lLmZyYWdtZW50XFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzAuMCwgMC4wLCAwLjBdO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGEgOiAxLjA7XFxudW5pZm9ybSBmbG9hdCBsaW5lV2lkdGggOiAxLjA7XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuQGltcG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG52b2lkIG1haW4oKVxcbntcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGNvbG9yO1xcbiBnbF9GcmFnQ29sb3IuYSA9ICgxLjAtZWRnZUZhY3RvcihsaW5lV2lkdGgpKSAqIGFscGhhO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LnNreWJveC52ZXJ0ZXhcXG4jZGVmaW5lIFNIQURFUl9OQU1FIHNreWJveFxcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudm9pZCBtYWluKClcXG57XFxuIHZfV29ybGRQb3NpdGlvbiA9ICh3b3JsZCAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5za3lib3guZnJhZ21lbnRcXG4jZGVmaW5lIFBJIDMuMTQxNTkyNlxcbnVuaWZvcm0gbWF0NCB2aWV3SW52ZXJzZSA6IFZJRVdJTlZFUlNFO1xcbiNpZmRlZiBFUVVJUkVDVEFOR1VMQVJcXG51bmlmb3JtIHNhbXBsZXIyRCBlbnZpcm9ubWVudE1hcDtcXG4jZWxzZVxcbnVuaWZvcm0gc2FtcGxlckN1YmUgZW52aXJvbm1lbnRNYXA7XFxuI2VuZGlmXFxudW5pZm9ybSBmbG9hdCBsb2Q6IDAuMDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkudXRpbC5zcmdiXFxuQGltcG9ydCBjbGF5LnV0aWwuQUNFU1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIGV5ZVBvcyA9IHZpZXdJbnZlcnNlWzNdLnh5ejtcXG4gdmVjMyBWID0gbm9ybWFsaXplKHZfV29ybGRQb3NpdGlvbiAtIGV5ZVBvcyk7XFxuI2lmZGVmIEVRVUlSRUNUQU5HVUxBUlxcbiBmbG9hdCBwaGkgPSBhY29zKFYueSk7XFxuIGZsb2F0IHRoZXRhID0gYXRhbigtVi54LCBWLnopICsgUEkgKiAwLjU7XFxuIHZlYzIgdXYgPSB2ZWMyKHRoZXRhIC8gMi4wIC8gUEksIHBoaSAvIFBJKTtcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlMkQoZW52aXJvbm1lbnRNYXAsIGZyYWN0KHV2KSkpO1xcbiNlbHNlXFxuICNpZiBkZWZpbmVkKExPRCkgfHwgZGVmaW5lZChTVVBQT1JUX1RFWFRVUkVfTE9EKVxcbiB2ZWM0IHRleGVsID0gZGVjb2RlSERSKHRleHR1cmVDdWJlTG9kRVhUKGVudmlyb25tZW50TWFwLCBWLCBsb2QpKTtcXG4gI2Vsc2VcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZShlbnZpcm9ubWVudE1hcCwgVikpO1xcbiAjZW5kaWZcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9ERUNPREVcXG4gdGV4ZWwgPSBzUkdCVG9MaW5lYXIodGV4ZWwpO1xcbiNlbmRpZlxcbiNpZmRlZiBUT05FTUFQUElOR1xcbiB0ZXhlbC5yZ2IgPSBBQ0VTVG9uZU1hcHBpbmcodGV4ZWwucmdiKTtcXG4jZW5kaWZcXG4jaWZkZWYgU1JHQl9FTkNPREVcXG4gdGV4ZWwgPSBsaW5lYXJUb3NSR0IodGV4ZWwpO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNCh0ZXhlbC5yZ2IsIDEuMCkpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBsaWdodEVzc2wgZnJvbSAnLi9zb3VyY2UvaGVhZGVyL2xpZ2h0JztcclxuaW1wb3J0IHV0aWxFc3NsIGZyb20gJy4vc291cmNlL3V0aWwuZ2xzbC5qcyc7XHJcblxyXG5pbXBvcnQgYmFzaWNFc3NsIGZyb20gJy4vc291cmNlL2Jhc2ljLmdsc2wuanMnO1xyXG5pbXBvcnQgbGFtYmVydEVzc2wgZnJvbSAnLi9zb3VyY2UvbGFtYmVydC5nbHNsLmpzJztcclxuaW1wb3J0IHN0YW5kYXJkRXNzbCBmcm9tICcuL3NvdXJjZS9zdGFuZGFyZC5nbHNsLmpzJztcclxuaW1wb3J0IHdpcmVmcmFtZUVzc2wgZnJvbSAnLi9zb3VyY2Uvd2lyZWZyYW1lLmdsc2wuanMnO1xyXG5pbXBvcnQgc2t5Ym94RXNzbCBmcm9tICcuL3NvdXJjZS9za3lib3guZ2xzbC5qcyc7XHJcbmltcG9ydCBwcmV6RXNzbCBmcm9tICcuL3NvdXJjZS9wcmV6Lmdsc2wuanMnO1xyXG5cclxuaW1wb3J0IGxpYnJhcnkgZnJvbSAnLi9saWJyYXJ5JztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5cclxuXHJcblNoYWRlclsnaW1wb3J0J10obGlnaHRFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXSh1dGlsRXNzbCk7XHJcblxyXG4vLyBTb21lIGJ1aWxkIGluIHNoYWRlcnNcclxuU2hhZGVyWydpbXBvcnQnXShiYXNpY0Vzc2wpO1xyXG5TaGFkZXJbJ2ltcG9ydCddKGxhbWJlcnRFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXShzdGFuZGFyZEVzc2wpO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHdpcmVmcmFtZUVzc2wpO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHNreWJveEVzc2wpO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHByZXpFc3NsKTtcclxuXHJcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuYmFzaWMnLCBTaGFkZXIuc291cmNlKCdjbGF5LmJhc2ljLnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LmJhc2ljLmZyYWdtZW50JykpO1xyXG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LmxhbWJlcnQnLCBTaGFkZXIuc291cmNlKCdjbGF5LmxhbWJlcnQudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkubGFtYmVydC5mcmFnbWVudCcpKTtcclxubGlicmFyeS50ZW1wbGF0ZSgnY2xheS53aXJlZnJhbWUnLCBTaGFkZXIuc291cmNlKCdjbGF5LndpcmVmcmFtZS52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS53aXJlZnJhbWUuZnJhZ21lbnQnKSk7XHJcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuc2t5Ym94JywgU2hhZGVyLnNvdXJjZSgnY2xheS5za3lib3gudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkuc2t5Ym94LmZyYWdtZW50JykpO1xyXG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LnByZXonLCBTaGFkZXIuc291cmNlKCdjbGF5LnByZXoudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucHJlei5mcmFnbWVudCcpKTtcclxubGlicmFyeS50ZW1wbGF0ZSgnY2xheS5zdGFuZGFyZCcsIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmQudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmQuZnJhZ21lbnQnKSk7XHJcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuc3RhbmRhcmRNUicsIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmRNUi52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZE1SLmZyYWdtZW50JykpO1xyXG5cclxuLy8gVE9ETyBNdXN0IGV4cG9ydCBhIG1vZHVsZSBhbmQgYmUgdXNlZCBpbiB0aGUgb3RoZXIgbW9kdWxlcy4gT3IgaXQgd2lsbCBiZSB0cmVlIHNoYWtlZFxyXG5leHBvcnQgZGVmYXVsdCBsaWJyYXJ5OyIsIi8qKlxyXG4gKiBnbFRGIExvYWRlclxyXG4gKiBTcGVjaWZpY2F0aW9uIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi9ibG9iL21hc3Rlci9zcGVjaWZpY2F0aW9uL1JFQURNRS5tZFxyXG4gKlxyXG4gKiBUT0RPIE1vcnBoIHRhcmdldHNcclxuICovXHJcbmltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4uL2NvcmUvdXRpbCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5cclxuaW1wb3J0IFNjZW5lIGZyb20gJy4uL1NjZW5lJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IFN0YW5kYXJkTWF0ZXJpYWwgZnJvbSAnLi4vU3RhbmRhcmRNYXRlcmlhbCc7XHJcbmltcG9ydCBNZXNoIGZyb20gJy4uL01lc2gnO1xyXG5pbXBvcnQgTm9kZSBmcm9tICcuLi9Ob2RlJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcclxuaW1wb3J0IHNoYWRlckxpYnJhcnkgZnJvbSAnLi4vc2hhZGVyL2xpYnJhcnknO1xyXG5pbXBvcnQgU2tlbGV0b24gZnJvbSAnLi4vU2tlbGV0b24nO1xyXG5pbXBvcnQgSm9pbnQgZnJvbSAnLi4vSm9pbnQnO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IE9ydGhvZ3JhcGhpY0NhbWVyYSBmcm9tICcuLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcblxyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcblxyXG5pbXBvcnQgVHJhY2tDbGlwIGZyb20gJy4uL2FuaW1hdGlvbi9UcmFja0NsaXAnO1xyXG5pbXBvcnQgU2FtcGxlclRyYWNrIGZyb20gJy4uL2FuaW1hdGlvbi9TYW1wbGVyVHJhY2snO1xyXG5cclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuXHJcbi8vIEltcG9ydCBidWlsdGluIHNoYWRlclxyXG5pbXBvcnQgJy4uL3NoYWRlci9idWlsdGluJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5cclxudmFyIHNlbWFudGljQXR0cmlidXRlTWFwID0ge1xyXG4gICAgJ05PUk1BTCc6ICdub3JtYWwnLFxyXG4gICAgJ1BPU0lUSU9OJzogJ3Bvc2l0aW9uJyxcclxuICAgICdURVhDT09SRF8wJzogJ3RleGNvb3JkMCcsXHJcbiAgICAnVEVYQ09PUkRfMSc6ICd0ZXhjb29yZDEnLFxyXG4gICAgJ1dFSUdIVFNfMCc6ICd3ZWlnaHQnLFxyXG4gICAgJ0pPSU5UU18wJzogJ2pvaW50JyxcclxuICAgICdDT0xPUl8wJzogJ2NvbG9yJ1xyXG59O1xyXG5cclxudmFyIEFSUkFZX0NUT1JfTUFQID0ge1xyXG4gICAgNTEyMDogdmVuZG9yLkludDhBcnJheSxcclxuICAgIDUxMjE6IHZlbmRvci5VaW50OEFycmF5LFxyXG4gICAgNTEyMjogdmVuZG9yLkludDE2QXJyYXksXHJcbiAgICA1MTIzOiB2ZW5kb3IuVWludDE2QXJyYXksXHJcbiAgICA1MTI1OiB2ZW5kb3IuVWludDMyQXJyYXksXHJcbiAgICA1MTI2OiB2ZW5kb3IuRmxvYXQzMkFycmF5XHJcbn07XHJcbnZhciBTSVpFX01BUCA9IHtcclxuICAgIFNDQUxBUjogMSxcclxuICAgIFZFQzI6IDIsXHJcbiAgICBWRUMzOiAzLFxyXG4gICAgVkVDNDogNCxcclxuICAgIE1BVDI6IDQsXHJcbiAgICBNQVQzOiA5LFxyXG4gICAgTUFUNDogMTZcclxufTtcclxuXHJcbmZ1bmN0aW9uIGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIGFjY2Vzc29ySWR4LCBpc0luZGljZXMpIHtcclxuICAgIHZhciBhY2Nlc3NvckluZm8gPSBqc29uLmFjY2Vzc29yc1thY2Nlc3NvcklkeF07XHJcblxyXG4gICAgdmFyIGJ1ZmZlciA9IGxpYi5idWZmZXJWaWV3c1thY2Nlc3NvckluZm8uYnVmZmVyVmlld107XHJcbiAgICB2YXIgYnl0ZU9mZnNldCA9IGFjY2Vzc29ySW5mby5ieXRlT2Zmc2V0IHx8IDA7XHJcbiAgICB2YXIgQXJyYXlDdG9yID0gQVJSQVlfQ1RPUl9NQVBbYWNjZXNzb3JJbmZvLmNvbXBvbmVudFR5cGVdIHx8IHZlbmRvci5GbG9hdDMyQXJyYXk7XHJcblxyXG4gICAgdmFyIHNpemUgPSBTSVpFX01BUFthY2Nlc3NvckluZm8udHlwZV07XHJcbiAgICBpZiAoc2l6ZSA9PSBudWxsICYmIGlzSW5kaWNlcykge1xyXG4gICAgICAgIHNpemUgPSAxO1xyXG4gICAgfVxyXG4gICAgdmFyIGFyciA9IG5ldyBBcnJheUN0b3IoYnVmZmVyLCBieXRlT2Zmc2V0LCBzaXplICogYWNjZXNzb3JJbmZvLmNvdW50KTtcclxuXHJcbiAgICB2YXIgcXVhbnRpemVFeHRlbnNpb24gPSBhY2Nlc3NvckluZm8uZXh0ZW5zaW9ucyAmJiBhY2Nlc3NvckluZm8uZXh0ZW5zaW9uc1snV0VCM0RfcXVhbnRpemVkX2F0dHJpYnV0ZXMnXTtcclxuICAgIGlmIChxdWFudGl6ZUV4dGVuc2lvbikge1xyXG4gICAgICAgIHZhciBkZWNvZGVkQXJyID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoc2l6ZSAqIGFjY2Vzc29ySW5mby5jb3VudCk7XHJcbiAgICAgICAgdmFyIGRlY29kZU1hdHJpeCA9IHF1YW50aXplRXh0ZW5zaW9uLmRlY29kZU1hdHJpeDtcclxuICAgICAgICB2YXIgZGVjb2RlT2Zmc2V0O1xyXG4gICAgICAgIHZhciBkZWNvZGVTY2FsZTtcclxuICAgICAgICB2YXIgZGVjb2RlT2Zmc2V0ID0gbmV3IEFycmF5KHNpemUpO1xyXG4gICAgICAgIHZhciBkZWNvZGVTY2FsZSA9IG5ldyBBcnJheShzaXplKTtcclxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHNpemU7IGsrKykge1xyXG4gICAgICAgICAgICBkZWNvZGVPZmZzZXRba10gPSBkZWNvZGVNYXRyaXhbc2l6ZSAqIChzaXplICsgMSkgKyBrXTtcclxuICAgICAgICAgICAgZGVjb2RlU2NhbGVba10gPSBkZWNvZGVNYXRyaXhbayAqIChzaXplICsgMSkgKyBrXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY2Nlc3NvckluZm8uY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHNpemU7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgZGVjb2RlZEFycltpICogc2l6ZSArIGtdID0gYXJyW2kgKiBzaXplICsga10gKiBkZWNvZGVTY2FsZVtrXSArIGRlY29kZU9mZnNldFtrXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXJyID0gZGVjb2RlZEFycjtcclxuICAgIH1cclxuICAgIHJldHVybiBhcnI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJhc2U2NFRvQmluYXJ5KGlucHV0LCBjaGFyU3RhcnQpIHtcclxuICAgIHZhciBjaGFycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcclxuICAgIHZhciBsb29rdXAgPSBuZXcgVWludDhBcnJheSgxMzApO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxvb2t1cFtjaGFycy5jaGFyQ29kZUF0KGkpXSA9IGk7XHJcbiAgICB9XHJcbiAgICAvLyBJZ25vcmVcclxuICAgIHZhciBsZW4gPSBpbnB1dC5sZW5ndGggLSBjaGFyU3RhcnQ7XHJcbiAgICBpZiAoaW5wdXQuY2hhckF0KGxlbiAtIDEpID09PSAnPScpIHsgbGVuLS07IH1cclxuICAgIGlmIChpbnB1dC5jaGFyQXQobGVuIC0gMSkgPT09ICc9JykgeyBsZW4tLTsgfVxyXG5cclxuICAgIHZhciB1YXJyYXkgPSBuZXcgVWludDhBcnJheSgobGVuIC8gNCkgKiAzKTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IGNoYXJTdGFydDsgaSA8IHVhcnJheS5sZW5ndGg7KSB7XHJcbiAgICAgICAgdmFyIGMxID0gbG9va3VwW2lucHV0LmNoYXJDb2RlQXQoaisrKV07XHJcbiAgICAgICAgdmFyIGMyID0gbG9va3VwW2lucHV0LmNoYXJDb2RlQXQoaisrKV07XHJcbiAgICAgICAgdmFyIGMzID0gbG9va3VwW2lucHV0LmNoYXJDb2RlQXQoaisrKV07XHJcbiAgICAgICAgdmFyIGM0ID0gbG9va3VwW2lucHV0LmNoYXJDb2RlQXQoaisrKV07XHJcblxyXG4gICAgICAgIHVhcnJheVtpKytdID0gKGMxIDw8IDIpIHwgKGMyID4+IDQpO1xyXG4gICAgICAgIHVhcnJheVtpKytdID0gKChjMiAmIDE1KSA8PCA0KSB8IChjMyA+PiAyKTtcclxuICAgICAgICB1YXJyYXlbaSsrXSA9ICgoYzMgJiAzKSA8PCA2KSB8IGM0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1YXJyYXkuYnVmZmVyO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IGNsYXkubG9hZGVyLkdMVEYuUmVzdWx0XHJcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBqc29uXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICogQHByb3BlcnR5IHtjbGF5Lk5vZGV9IHJvb3ROb2RlXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5DYW1lcmFbXX0gY2FtZXJhc1xyXG4gKiBAcHJvcGVydHkge2NsYXkuVGV4dHVyZVtdfSB0ZXh0dXJlc1xyXG4gKiBAcHJvcGVydHkge2NsYXkuTWF0ZXJpYWxbXX0gbWF0ZXJpYWxzXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5Ta2VsZXRvbltdfSBza2VsZXRvbnNcclxuICogQHByb3BlcnR5IHtjbGF5Lk1lc2hbXX0gbWVzaGVzXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwW119IGNsaXBzXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5Ob2RlW119IG5vZGVzXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxvYWRlci5HTFRGXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgR0xURkxvYWRlciA9IEJhc2UuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5sb2FkZXIuR0xURiMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgcm9vdE5vZGU6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFJvb3QgcGF0aCBmb3IgdXJpIHBhcnNpbmcuXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICByb290UGF0aDogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvb3QgcGF0aCBmb3IgdGV4dHVyZSB1cmkgcGFyc2luZy4gRGVmYXVsdGx5IHVzZSB0aGUgcm9vdFBhdGhcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHRleHR1cmVSb290UGF0aDogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvb3QgcGF0aCBmb3IgYnVmZmVyIHVyaSBwYXJzaW5nLiBEZWZhdWx0bHkgdXNlIHRoZSByb290UGF0aFxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgYnVmZmVyUm9vdFBhdGg6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaGFkZXIgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSBtYXRlcmlhbHMuXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfGNsYXkuU2hhZGVyfVxyXG4gICAgICogQGRlZmF1bHQgJ2NsYXkuc3RhbmRhcmQnXHJcbiAgICAgKi9cclxuICAgIHNoYWRlcjogJ2NsYXkuc3RhbmRhcmQnLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdXNlIHtAbGluayBjbGF5LlN0YW5kYXJkTWF0ZXJpYWx9XHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB1c2VTdGFuZGFyZE1hdGVyaWFsOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGxvYWRpbmcgdGhlIGNhbWVyYXMuXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaW5jbHVkZUNhbWVyYTogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGxvYWRpbmcgdGhlIGFuaW1hdGlvbnMuXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaW5jbHVkZUFuaW1hdGlvbjogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogSWYgbG9hZGluZyB0aGUgbWVzaGVzXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaW5jbHVkZU1lc2g6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIElmIGxvYWRpbmcgdGhlIHRleHR1cmVzLlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGluY2x1ZGVUZXh0dXJlOiB0cnVlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgY3Jvc3NPcmlnaW46ICcnLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL2lzc3Vlcy82NzRcclxuICAgICAqL1xyXG4gICAgdGV4dHVyZUZsaXBZOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGNvbnZlcnQgdGV4dHVyZSB0byBwb3dlci1vZi10d29cclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICB0ZXh0dXJlQ29udmVydFRvUE9UOiBmYWxzZSxcclxuXHJcbiAgICBzaGFkZXJMaWJyYXJ5OiBudWxsXHJcbn0sXHJcbmZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghdGhpcy5zaGFkZXJMaWJyYXJ5KSB7XHJcbiAgICAgICAgdGhpcy5zaGFkZXJMaWJyYXJ5ID0gc2hhZGVyTGlicmFyeS5jcmVhdGVMaWJyYXJ5KCk7XHJcbiAgICB9XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5sb2FkZXIuR0xURi5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXHJcbiAgICAgKi9cclxuICAgIGxvYWQ6IGZ1bmN0aW9uICh1cmwpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGlzQmluYXJ5ID0gdXJsLmVuZHNXaXRoKCcuZ2xiJyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJvb3RQYXRoID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5yb290UGF0aCA9IHVybC5zbGljZSgwLCB1cmwubGFzdEluZGV4T2YoJy8nKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZW5kb3IucmVxdWVzdC5nZXQoe1xyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgb25wcm9ncmVzczogZnVuY3Rpb24gKHBlcmNlbnQsIGxvYWRlZCwgdG90YWwpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcigncHJvZ3Jlc3MnLCBwZXJjZW50LCBsb2FkZWQsIHRvdGFsKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25lcnJvcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignZXJyb3InLCBlKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBpc0JpbmFyeSA/ICdhcnJheWJ1ZmZlcicgOiAndGV4dCcsXHJcbiAgICAgICAgICAgIG9ubG9hZDogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0JpbmFyeSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VCaW5hcnkoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFyc2UgZ2xURiBiaW5hcnlcclxuICAgICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGJ1ZmZlclxyXG4gICAgICogQHJldHVybiB7Y2xheS5sb2FkZXIuR0xURi5SZXN1bHR9XHJcbiAgICAgKi9cclxuICAgIHBhcnNlQmluYXJ5OiBmdW5jdGlvbiAoYnVmZmVyKSB7XHJcbiAgICAgICAgdmFyIGhlYWRlciA9IG5ldyBVaW50MzJBcnJheShidWZmZXIsIDAsIDQpO1xyXG4gICAgICAgIGlmIChoZWFkZXJbMF0gIT09IDB4NDY1NDZDNjcpIHtcclxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsICdJbnZhbGlkIGdsVEYgYmluYXJ5IGZvcm1hdDogSW52YWxpZCBoZWFkZXInKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaGVhZGVyWzBdIDwgMikge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2Vycm9yJywgJ09ubHkgZ2xURjIuMCBpcyBzdXBwb3J0ZWQuJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIsIDEyKTtcclxuXHJcbiAgICAgICAgdmFyIGpzb247XHJcbiAgICAgICAgdmFyIGJ1ZmZlcnMgPSBbXTtcclxuICAgICAgICAvLyBSZWFkIGNodW5rc1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YVZpZXcuYnl0ZUxlbmd0aDspIHtcclxuICAgICAgICAgICAgdmFyIGNodW5rTGVuZ3RoID0gZGF0YVZpZXcuZ2V0VWludDMyKGksIHRydWUpO1xyXG4gICAgICAgICAgICBpICs9IDQ7XHJcbiAgICAgICAgICAgIHZhciBjaHVua1R5cGUgPSBkYXRhVmlldy5nZXRVaW50MzIoaSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGkgKz0gNDtcclxuXHJcbiAgICAgICAgICAgIC8vIGpzb25cclxuICAgICAgICAgICAgaWYgKGNodW5rVHlwZSA9PT0gMHg0RTRGNTM0QSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlciwgaSArIDEyLCBjaHVua0xlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPLCBmb3IgdGhlIGJyb3dzZXIgbm90IHN1cHBvcnQgVGV4dERlY29kZXIuXHJcbiAgICAgICAgICAgICAgICB2YXIgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0ciA9IGRlY29kZXIuZGVjb2RlKGFycik7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKHN0cik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCAnSlNPTiBQYXJzZSBlcnJvcjonICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY2h1bmtUeXBlID09PSAweDAwNEU0OTQyKSB7XHJcbiAgICAgICAgICAgICAgICBidWZmZXJzLnB1c2goYnVmZmVyLnNsaWNlKGkgKyAxMiwgaSArIDEyICsgY2h1bmtMZW5ndGgpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaSArPSBjaHVua0xlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFqc29uKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCAnSW52YWxpZCBnbFRGIGJpbmFyeSBmb3JtYXQ6IENhblxcJ3QgZmluZCBKU09OLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZShqc29uLCBidWZmZXJzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0ganNvblxyXG4gICAgICogQHBhcmFtIHtBcnJheUJ1ZmZlcltdfSBbYnVmZmVyXVxyXG4gICAgICogQHJldHVybiB7Y2xheS5sb2FkZXIuR0xURi5SZXN1bHR9XHJcbiAgICAgKi9cclxuICAgIHBhcnNlOiBmdW5jdGlvbiAoanNvbiwgYnVmZmVycykge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgdmFyIGxpYiA9IHtcclxuICAgICAgICAgICAganNvbjoganNvbixcclxuICAgICAgICAgICAgYnVmZmVyczogW10sXHJcbiAgICAgICAgICAgIGJ1ZmZlclZpZXdzOiBbXSxcclxuICAgICAgICAgICAgbWF0ZXJpYWxzOiBbXSxcclxuICAgICAgICAgICAgdGV4dHVyZXM6IFtdLFxyXG4gICAgICAgICAgICBtZXNoZXM6IFtdLFxyXG4gICAgICAgICAgICBqb2ludHM6IFtdLFxyXG4gICAgICAgICAgICBza2VsZXRvbnM6IFtdLFxyXG4gICAgICAgICAgICBjYW1lcmFzOiBbXSxcclxuICAgICAgICAgICAgbm9kZXM6IFtdLFxyXG4gICAgICAgICAgICBjbGlwczogW11cclxuICAgICAgICB9O1xyXG4gICAgICAgIC8vIE1vdW50IG9uIHRoZSByb290IG5vZGUgaWYgZ2l2ZW5cclxuICAgICAgICB2YXIgcm9vdE5vZGUgPSB0aGlzLnJvb3ROb2RlIHx8IG5ldyBTY2VuZSgpO1xyXG5cclxuICAgICAgICB2YXIgbG9hZGluZyA9IDA7XHJcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tMb2FkKCkge1xyXG4gICAgICAgICAgICBsb2FkaW5nLS07XHJcbiAgICAgICAgICAgIGlmIChsb2FkaW5nID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBhZnRlckxvYWRCdWZmZXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBhbHJlYWR5IGxvYWQgYnVmZmVyc1xyXG4gICAgICAgIGlmIChidWZmZXJzKSB7XHJcbiAgICAgICAgICAgIGxpYi5idWZmZXJzID0gYnVmZmVycy5zbGljZSgpO1xyXG4gICAgICAgICAgICBhZnRlckxvYWRCdWZmZXIodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBMb2FkIGJ1ZmZlcnNcclxuICAgICAgICAgICAgdXRpbC5lYWNoKGpzb24uYnVmZmVycywgZnVuY3Rpb24gKGJ1ZmZlckluZm8sIGlkeCkge1xyXG4gICAgICAgICAgICAgICAgbG9hZGluZysrO1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhdGggPSBidWZmZXJJbmZvLnVyaTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZWxmLl9sb2FkQnVmZmVycyhwYXRoLCBmdW5jdGlvbiAoYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGliLmJ1ZmZlcnNbaWR4XSA9IGJ1ZmZlcjtcclxuICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWQoKTtcclxuICAgICAgICAgICAgICAgIH0sIGNoZWNrTG9hZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZ2V0UmVzdWx0KCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAganNvbjoganNvbixcclxuICAgICAgICAgICAgICAgIHNjZW5lOiBzZWxmLnJvb3ROb2RlID8gbnVsbCA6IHJvb3ROb2RlLFxyXG4gICAgICAgICAgICAgICAgcm9vdE5vZGU6IHNlbGYucm9vdE5vZGUgPyByb290Tm9kZSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBjYW1lcmFzOiBsaWIuY2FtZXJhcyxcclxuICAgICAgICAgICAgICAgIHRleHR1cmVzOiBsaWIudGV4dHVyZXMsXHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbHM6IGxpYi5tYXRlcmlhbHMsXHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbnM6IGxpYi5za2VsZXRvbnMsXHJcbiAgICAgICAgICAgICAgICBtZXNoZXM6IGxpYi5pbnN0YW5jZWRNZXNoZXMsXHJcbiAgICAgICAgICAgICAgICBjbGlwczogbGliLmNsaXBzLFxyXG4gICAgICAgICAgICAgICAgbm9kZXM6IGxpYi5ub2Rlc1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gYWZ0ZXJMb2FkQnVmZmVyKGltbWVkaWF0ZWx5KSB7XHJcbiAgICAgICAgICAgIC8vIEJ1ZmZlciBub3QgbG9hZCBjb21wbGV0ZS5cclxuICAgICAgICAgICAgaWYgKGxpYi5idWZmZXJzLmxlbmd0aCAhPT0ganNvbi5idWZmZXJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdlcnJvcicsICdCdWZmZXIgbm90IGxvYWQgY29tcGxldGUuJyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAganNvbi5idWZmZXJWaWV3cy5mb3JFYWNoKGZ1bmN0aW9uIChidWZmZXJWaWV3SW5mbywgaWR4KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBQRU5ESU5HIFBlcmZvcm1hbmNlXHJcbiAgICAgICAgICAgICAgICBsaWIuYnVmZmVyVmlld3NbaWR4XSA9IGxpYi5idWZmZXJzW2J1ZmZlclZpZXdJbmZvLmJ1ZmZlcl1cclxuICAgICAgICAgICAgICAgICAgICAuc2xpY2UoYnVmZmVyVmlld0luZm8uYnl0ZU9mZnNldCB8fCAwLCAoYnVmZmVyVmlld0luZm8uYnl0ZU9mZnNldCB8fCAwKSArIChidWZmZXJWaWV3SW5mby5ieXRlTGVuZ3RoIHx8IDApKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxpYi5idWZmZXJzID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHNlbGYuaW5jbHVkZU1lc2gpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmluY2x1ZGVUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VUZXh0dXJlcyhqc29uLCBsaWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VNYXRlcmlhbHMoanNvbiwgbGliKTtcclxuICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlTWVzaGVzKGpzb24sIGxpYik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2VsZi5fcGFyc2VOb2Rlcyhqc29uLCBsaWIpO1xyXG5cclxuICAgICAgICAgICAgLy8gT25seSBzdXBwb3J0IG9uZSBzY2VuZS5cclxuICAgICAgICAgICAgaWYgKGpzb24uc2NlbmVzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2NlbmVJbmZvID0ganNvbi5zY2VuZXNbanNvbi5zY2VuZSB8fCAwXTsgLy8gRGVmYXVsdCB1c2UgdGhlIGZpcnN0IHNjZW5lLlxyXG4gICAgICAgICAgICAgICAgaWYgKHNjZW5lSW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NlbmVJbmZvLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gbGliLm5vZGVzW3NjZW5lSW5mby5ub2Rlc1tpXV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3ROb2RlLmFkZChub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxmLmluY2x1ZGVNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZVNraW5zKGpzb24sIGxpYik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxmLmluY2x1ZGVBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlQW5pbWF0aW9ucyhqc29uLCBsaWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpbW1lZGlhdGVseSkge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdzdWNjZXNzJywgZ2V0UmVzdWx0KCkpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3N1Y2Nlc3MnLCBnZXRSZXN1bHQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBnZXRSZXN1bHQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCaW5hcnkgZmlsZSBwYXRoIHJlc29sdmVyLiBVc2VyIGNhbiBvdmVycmlkZSBpdFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcclxuICAgICAqL1xyXG4gICAgcmVzb2x2ZUJ1ZmZlclBhdGg6IGZ1bmN0aW9uIChwYXRoKSB7XHJcbiAgICAgICAgaWYgKHBhdGggJiYgcGF0aC5tYXRjaCgvXmRhdGE6KC4qPyliYXNlNjQsLykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhdGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcm9vdFBhdGggPSB0aGlzLmJ1ZmZlclJvb3RQYXRoO1xyXG4gICAgICAgIGlmIChyb290UGF0aCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJvb3RQYXRoID0gdGhpcy5yb290UGF0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHV0aWwucmVsYXRpdmUyYWJzb2x1dGUocGF0aCwgcm9vdFBhdGgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRleHR1cmUgZmlsZSBwYXRoIHJlc29sdmVyLiBVc2VyIGNhbiBvdmVycmlkZSBpdFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcclxuICAgICAqL1xyXG4gICAgcmVzb2x2ZVRleHR1cmVQYXRoOiBmdW5jdGlvbiAocGF0aCkge1xyXG4gICAgICAgIGlmIChwYXRoICYmIHBhdGgubWF0Y2goL15kYXRhOiguKj8pYmFzZTY0LC8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJvb3RQYXRoID0gdGhpcy50ZXh0dXJlUm9vdFBhdGg7XHJcbiAgICAgICAgaWYgKHJvb3RQYXRoID09IG51bGwpIHtcclxuICAgICAgICAgICAgcm9vdFBhdGggPSB0aGlzLnJvb3RQYXRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdXRpbC5yZWxhdGl2ZTJhYnNvbHV0ZShwYXRoLCByb290UGF0aCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnVmZmVyIGxvYWRlclxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9XHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbnN1Y2Nlc3NcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9uZXJyb3JcclxuICAgICAqL1xyXG4gICAgbG9hZEJ1ZmZlcjogZnVuY3Rpb24gKHBhdGgsIG9uc3VjY2Vzcywgb25lcnJvcikge1xyXG4gICAgICAgIHZlbmRvci5yZXF1ZXN0LmdldCh7XHJcbiAgICAgICAgICAgIHVybDogcGF0aCxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxyXG4gICAgICAgICAgICBvbmxvYWQ6IGZ1bmN0aW9uIChidWZmZXIpIHtcclxuICAgICAgICAgICAgICAgIG9uc3VjY2VzcyAmJiBvbnN1Y2Nlc3MoYnVmZmVyKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25lcnJvcjogZnVuY3Rpb24gKGJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgb25lcnJvciAmJiBvbmVycm9yKGJ1ZmZlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgX2dldFNoYWRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zaGFkZXIgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNoYWRlckxpYnJhcnkuZ2V0KHRoaXMuc2hhZGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5zaGFkZXIgaW5zdGFuY2VvZiBTaGFkZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hhZGVyO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2xvYWRCdWZmZXJzOiBmdW5jdGlvbiAocGF0aCwgb25zdWNjZXNzLCBvbmVycm9yKSB7XHJcbiAgICAgICAgdmFyIGJhc2U2NFByZWZpeCA9ICdkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsJztcclxuICAgICAgICB2YXIgc3RyU3RhcnQgPSBwYXRoLnN1YnN0cigwLCBiYXNlNjRQcmVmaXgubGVuZ3RoKTtcclxuICAgICAgICBpZiAoc3RyU3RhcnQgPT09IGJhc2U2NFByZWZpeCkge1xyXG4gICAgICAgICAgICBvbnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICBiYXNlNjRUb0JpbmFyeShwYXRoLCBiYXNlNjRQcmVmaXgubGVuZ3RoKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkQnVmZmVyKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlQnVmZmVyUGF0aChwYXRoKSxcclxuICAgICAgICAgICAgICAgIG9uc3VjY2VzcyxcclxuICAgICAgICAgICAgICAgIG9uZXJyb3JcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi9pc3N1ZXMvMTAwXHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvaXNzdWVzLzE5M1xyXG4gICAgX3BhcnNlU2tpbnM6IGZ1bmN0aW9uIChqc29uLCBsaWIpIHtcclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIHNrZWxldG9ucyBhbmQgam9pbnRzXHJcbiAgICAgICAgdmFyIGhhdmVJbnZCaW5kTWF0cmljZXMgPSBmYWxzZTtcclxuICAgICAgICB1dGlsLmVhY2goanNvbi5za2lucywgZnVuY3Rpb24gKHNraW5JbmZvLCBpZHgpIHtcclxuICAgICAgICAgICAgdmFyIHNrZWxldG9uID0gbmV3IFNrZWxldG9uKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHNraW5JbmZvLm5hbWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2tpbkluZm8uam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9kZUlkeCA9IHNraW5JbmZvLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBub2RlID0gbGliLm5vZGVzW25vZGVJZHhdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50ID0gbmV3IEpvaW50KHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBub2RlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBpbmRleDogc2tlbGV0b24uam9pbnRzLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbi5qb2ludHMucHVzaChqb2ludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2tlbGV0b24ucmVsYXRpdmVSb290Tm9kZSA9IGxpYi5ub2Rlc1tza2luSW5mby5za2VsZXRvbl0gfHwgdGhpcy5yb290Tm9kZTtcclxuICAgICAgICAgICAgaWYgKHNraW5JbmZvLmludmVyc2VCaW5kTWF0cmljZXMpIHtcclxuICAgICAgICAgICAgICAgIGhhdmVJbnZCaW5kTWF0cmljZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIElCTUluZm8gPSBqc29uLmFjY2Vzc29yc1tza2luSW5mby5pbnZlcnNlQmluZE1hdHJpY2VzXTtcclxuICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBsaWIuYnVmZmVyVmlld3NbSUJNSW5mby5idWZmZXJWaWV3XTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gSUJNSW5mby5ieXRlT2Zmc2V0IHx8IDA7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IElCTUluZm8uY291bnQgKiAxNjtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgc2l6ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2tlbGV0b24uc2V0Sm9pbnRNYXRyaWNlc0FycmF5KGFycmF5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNrZWxldG9uLnVwZGF0ZUpvaW50TWF0cmljZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsaWIuc2tlbGV0b25zW2lkeF0gPSBza2VsZXRvbjtcclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZW5hYmxlU2tpbm5pbmdGb3JNZXNoKG1lc2gsIHNrZWxldG9uLCBqb2ludEluZGljZXMpIHtcclxuICAgICAgICAgICAgbWVzaC5za2VsZXRvbiA9IHNrZWxldG9uO1xyXG4gICAgICAgICAgICBtZXNoLmpvaW50cyA9IGpvaW50SW5kaWNlcztcclxuXHJcbiAgICAgICAgICAgIGlmICghc2tlbGV0b24uYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgICAgIHNrZWxldG9uLnVwZGF0ZUpvaW50c0JvdW5kaW5nQm94ZXMobWVzaC5nZW9tZXRyeSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGdldEpvaW50SW5kZXgoam9pbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGpvaW50LmluZGV4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24ubm9kZXMsIGZ1bmN0aW9uIChub2RlSW5mbywgbm9kZUlkeCkge1xyXG4gICAgICAgICAgICBpZiAobm9kZUluZm8uc2tpbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2tpbklkeCA9IG5vZGVJbmZvLnNraW47XHJcbiAgICAgICAgICAgICAgICB2YXIgc2tlbGV0b24gPSBsaWIuc2tlbGV0b25zW3NraW5JZHhdO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBub2RlID0gbGliLm5vZGVzW25vZGVJZHhdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50SW5kaWNlcyA9IHNrZWxldG9uLmpvaW50cy5tYXAoZ2V0Sm9pbnRJbmRleCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIE1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVTa2lubmluZ0Zvck1lc2gobm9kZSwgc2tlbGV0b24sIGpvaW50SW5kaWNlcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBNZXNoIGhhdmUgbXVsdGlwbGUgcHJpbWl0aXZlc1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4oKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZVNraW5uaW5nRm9yTWVzaChjaGlsZHJlbltpXSwgc2tlbGV0b24sIGpvaW50SW5kaWNlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZVRleHR1cmVzOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24udGV4dHVyZXMsIGZ1bmN0aW9uICh0ZXh0dXJlSW5mbywgaWR4KXtcclxuICAgICAgICAgICAgLy8gc2FtcGxlcnMgaXMgb3B0aW9uYWxcclxuICAgICAgICAgICAgdmFyIHNhbXBsZXJJbmZvID0gKGpzb24uc2FtcGxlcnMgJiYganNvbi5zYW1wbGVyc1t0ZXh0dXJlSW5mby5zYW1wbGVyXSkgfHwge307XHJcbiAgICAgICAgICAgIHZhciBwYXJhbWV0ZXJzID0ge307XHJcbiAgICAgICAgICAgIFsnd3JhcFMnLCAnd3JhcFQnLCAnbWFnRmlsdGVyJywgJ21pbkZpbHRlciddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHNhbXBsZXJJbmZvW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW25hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB1dGlsLmRlZmF1bHRzKHBhcmFtZXRlcnMsIHtcclxuICAgICAgICAgICAgICAgIHdyYXBTOiBUZXh0dXJlLlJFUEVBVCxcclxuICAgICAgICAgICAgICAgIHdyYXBUOiBUZXh0dXJlLlJFUEVBVCxcclxuICAgICAgICAgICAgICAgIGZsaXBZOiB0aGlzLnRleHR1cmVGbGlwWSxcclxuICAgICAgICAgICAgICAgIGNvbnZlcnRUb1BPVDogdGhpcy50ZXh0dXJlQ29udmVydFRvUE9UXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRleHR1cmVJbmZvLnRhcmdldCB8fCBnbGVudW0uVEVYVFVSRV8yRDtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdCA9IHRleHR1cmVJbmZvLmZvcm1hdDtcclxuICAgICAgICAgICAgaWYgKGZvcm1hdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmZvcm1hdCA9IGZvcm1hdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gZ2xlbnVtLlRFWFRVUkVfMkQpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRChwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHZhciBpbWFnZUluZm8gPSBqc29uLmltYWdlc1t0ZXh0dXJlSW5mby5zb3VyY2VdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHVyaTtcclxuICAgICAgICAgICAgICAgIGlmIChpbWFnZUluZm8udXJpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJpID0gdGhpcy5yZXNvbHZlVGV4dHVyZVBhdGgoaW1hZ2VJbmZvLnVyaSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpbWFnZUluZm8uYnVmZmVyVmlldyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJpID0gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbbGliLmJ1ZmZlclZpZXdzW2ltYWdlSW5mby5idWZmZXJWaWV3XV0sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogaW1hZ2VJbmZvLm1pbWVUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHVyaSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHR1cmUubG9hZCh1cmksIHRoaXMuY3Jvc3NPcmlnaW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIGxpYi50ZXh0dXJlc1tpZHhdID0gdGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfS0hSQ29tbW9uTWF0ZXJpYWxUb1N0YW5kYXJkOiBmdW5jdGlvbiAobWF0ZXJpYWxJbmZvLCBsaWIpIHtcclxuICAgICAgICB2YXIgdW5pZm9ybXMgPSB7fTtcclxuICAgICAgICB2YXIgY29tbW9uTWF0ZXJpYWxJbmZvID0gbWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnNbJ0tIUl9tYXRlcmlhbHNfY29tbW9uJ107XHJcbiAgICAgICAgdW5pZm9ybXMgPSBjb21tb25NYXRlcmlhbEluZm8udmFsdWVzIHx8IHt9O1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHVuaWZvcm1zLmRpZmZ1c2UgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIHVuaWZvcm1zLmRpZmZ1c2UgPSBsaWIudGV4dHVyZXNbdW5pZm9ybXMuZGlmZnVzZV0gfHwgbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiB1bmlmb3Jtcy5lbWlzc2lvbiA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgdW5pZm9ybXMuZW1pc3Npb24gPSBsaWIudGV4dHVyZXNbdW5pZm9ybXMuZW1pc3Npb25dIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZW5hYmxlZFRleHR1cmVzID0gW107XHJcbiAgICAgICAgaWYgKHVuaWZvcm1zWydkaWZmdXNlJ10gaW5zdGFuY2VvZiBUZXh0dXJlMkQpIHtcclxuICAgICAgICAgICAgZW5hYmxlZFRleHR1cmVzLnB1c2goJ2RpZmZ1c2VNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdub3JtYWxNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHVuaWZvcm1zWydlbWlzc2lvbiddIGluc3RhbmNlb2YgVGV4dHVyZTJEKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdlbWlzc2l2ZU1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIGlzU3RhbmRhcmRNYXRlcmlhbCA9IHRoaXMudXNlU3RhbmRhcmRNYXRlcmlhbDtcclxuICAgICAgICBpZiAoaXNTdGFuZGFyZE1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsID0gbmV3IFN0YW5kYXJkTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbWF0ZXJpYWxJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBkb3VibGVTaWRlZDogbWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbWF0ZXJpYWxJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBzaGFkZXI6IHRoaXMuX2dldFNoYWRlcigpXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfUk9VR0hORVNTJyk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX01FVEFMTkVTUycpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZCkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHVuaWZvcm1zLnRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlcHRoTWFzayA9IGZhbHNlO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZXB0aFRlc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC50cmFuc3BhcmVudCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGlmZnVzZVByb3AgPSB1bmlmb3Jtc1snZGlmZnVzZSddO1xyXG4gICAgICAgIGlmIChkaWZmdXNlUHJvcCkge1xyXG4gICAgICAgICAgICAvLyBDb2xvclxyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkaWZmdXNlUHJvcCkpIHtcclxuICAgICAgICAgICAgICAgIGRpZmZ1c2VQcm9wID0gZGlmZnVzZVByb3Auc2xpY2UoMCwgMyk7XHJcbiAgICAgICAgICAgICAgICBpc1N0YW5kYXJkTWF0ZXJpYWwgPyAobWF0ZXJpYWwuY29sb3IgPSBkaWZmdXNlUHJvcClcclxuICAgICAgICAgICAgICAgICAgICA6IG1hdGVyaWFsLnNldCgnY29sb3InLCBkaWZmdXNlUHJvcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7IC8vIFRleHR1cmVcclxuICAgICAgICAgICAgICAgIGlzU3RhbmRhcmRNYXRlcmlhbCA/IChtYXRlcmlhbC5kaWZmdXNlTWFwID0gZGlmZnVzZVByb3ApXHJcbiAgICAgICAgICAgICAgICAgICAgOiBtYXRlcmlhbC5zZXQoJ2RpZmZ1c2VNYXAnLCBkaWZmdXNlUHJvcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGVtaXNzaW9uUHJvcCA9IHVuaWZvcm1zWydlbWlzc2lvbiddO1xyXG4gICAgICAgIGlmIChlbWlzc2lvblByb3AgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBDb2xvclxyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbWlzc2lvblByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBlbWlzc2lvblByb3AgPSBlbWlzc2lvblByb3Auc2xpY2UoMCwgMyk7XHJcbiAgICAgICAgICAgICAgICBpc1N0YW5kYXJkTWF0ZXJpYWwgPyAobWF0ZXJpYWwuZW1pc3Npb24gPSBlbWlzc2lvblByb3ApXHJcbiAgICAgICAgICAgICAgICAgICAgOiBtYXRlcmlhbC5zZXQoJ2VtaXNzaW9uJywgZW1pc3Npb25Qcm9wKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHsgLy8gVGV4dHVyZVxyXG4gICAgICAgICAgICAgICAgaXNTdGFuZGFyZE1hdGVyaWFsID8gKG1hdGVyaWFsLmVtaXNzaXZlTWFwID0gZW1pc3Npb25Qcm9wKVxyXG4gICAgICAgICAgICAgICAgICAgIDogbWF0ZXJpYWwuc2V0KCdlbWlzc2l2ZU1hcCcsIGVtaXNzaW9uUHJvcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyB0ZXhDb29yZFxyXG4gICAgICAgICAgICB2YXIgbm9ybWFsVGV4dHVyZUluZGV4ID0gbWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUuaW5kZXg7XHJcbiAgICAgICAgICAgIGlmIChpc1N0YW5kYXJkTWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLm5vcm1hbE1hcCA9IGxpYi50ZXh0dXJlc1tub3JtYWxUZXh0dXJlSW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ25vcm1hbE1hcCcsIGxpYi50ZXh0dXJlc1tub3JtYWxUZXh0dXJlSW5kZXhdIHx8IG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1bmlmb3Jtc1snc2hpbmluZXNzJ10gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB2YXIgZ2xvc3NpbmVzcyA9IE1hdGgubG9nKHVuaWZvcm1zWydzaGluaW5lc3MnXSkgLyBNYXRoLmxvZyg4MTkyKTtcclxuICAgICAgICAgICAgLy8gVW5pZm9ybSBnbG9zc2luZXNzXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnZ2xvc3NpbmVzcycsIGdsb3NzaW5lc3MpO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ3JvdWdobmVzcycsIDEgLSBnbG9zc2luZXNzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnZ2xvc3NpbmVzcycsIDAuMyk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgncm91Z2huZXNzJywgMC4zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHVuaWZvcm1zWydzcGVjdWxhciddICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdzcGVjdWxhckNvbG9yJywgdW5pZm9ybXNbJ3NwZWN1bGFyJ10uc2xpY2UoMCwgMykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodW5pZm9ybXNbJ3RyYW5zcGFyZW5jeSddICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdhbHBoYScsIHVuaWZvcm1zWyd0cmFuc3BhcmVuY3knXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWw7XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYnJNZXRhbGxpY1JvdWdobmVzc1RvU3RhbmRhcmQ6IGZ1bmN0aW9uIChtYXRlcmlhbEluZm8sIG1ldGFsbGljUm91Z2huZXNzTWF0SW5mbywgbGliKSB7XHJcbiAgICAgICAgdmFyIGFscGhhVGVzdCA9IG1hdGVyaWFsSW5mby5hbHBoYU1vZGUgPT09ICdNQVNLJztcclxuXHJcbiAgICAgICAgdmFyIGlzU3RhbmRhcmRNYXRlcmlhbCA9IHRoaXMudXNlU3RhbmRhcmRNYXRlcmlhbDtcclxuICAgICAgICB2YXIgbWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIGRpZmZ1c2VNYXAsIHJvdWdobmVzc01hcCwgbWV0YWxuZXNzTWFwLCBub3JtYWxNYXAsIGVtaXNzaXZlTWFwLCBvY2NsdXNpb25NYXA7XHJcbiAgICAgICAgdmFyIGVuYWJsZWRUZXh0dXJlcyA9IFtdO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGUgc2NhbGFyIG11bHRpcGxpZXIgYXBwbGllZCB0byBlYWNoIG5vcm1hbCB2ZWN0b3Igb2YgdGhlIG5vcm1hbCB0ZXh0dXJlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIFhYWCBUaGlzIHZhbHVlIGlzIGlnbm9yZWQgaWYgYG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlYCBpcyBub3Qgc3BlY2lmaWVkLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZhciBub3JtYWxTY2FsZSA9IDEuMDtcclxuXHJcbiAgICAgICAgLy8gVE9ETyB0ZXhDb29yZFxyXG4gICAgICAgIGlmIChtZXRhbGxpY1JvdWdobmVzc01hdEluZm8uYmFzZUNvbG9yVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwID0gbGliLnRleHR1cmVzW21ldGFsbGljUm91Z2huZXNzTWF0SW5mby5iYXNlQ29sb3JUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdkaWZmdXNlTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtZXRhbGxpY1JvdWdobmVzc01hdEluZm8ubWV0YWxsaWNSb3VnaG5lc3NUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIHJvdWdobmVzc01hcCA9IG1ldGFsbmVzc01hcCA9IGxpYi50ZXh0dXJlc1ttZXRhbGxpY1JvdWdobmVzc01hdEluZm8ubWV0YWxsaWNSb3VnaG5lc3NUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICByb3VnaG5lc3NNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ21ldGFsbmVzc01hcCcsICdyb3VnaG5lc3NNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlKSB7XHJcblxyXG4gICAgICAgICAgICBub3JtYWxNYXAgPSBsaWIudGV4dHVyZXNbbWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIG5vcm1hbE1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnbm9ybWFsTWFwJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlLnNjYWxlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsU2NhbGUgPSBtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZS5zY2FsZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5lbWlzc2l2ZVRleHR1cmUpIHtcclxuICAgICAgICAgICAgZW1pc3NpdmVNYXAgPSBsaWIudGV4dHVyZXNbbWF0ZXJpYWxJbmZvLmVtaXNzaXZlVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgZW1pc3NpdmVNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ2VtaXNzaXZlTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ub2NjbHVzaW9uVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBvY2NsdXNpb25NYXAgPSBsaWIudGV4dHVyZXNbbWF0ZXJpYWxJbmZvLm9jY2x1c2lvblRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIG9jY2x1c2lvbk1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnb2NjbHVzaW9uTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBiYXNlQ29sb3IgPSBtZXRhbGxpY1JvdWdobmVzc01hdEluZm8uYmFzZUNvbG9yRmFjdG9yIHx8IFsxLCAxLCAxLCAxXTtcclxuXHJcbiAgICAgICAgdmFyIGNvbW1vblByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICAgIGRpZmZ1c2VNYXA6IGRpZmZ1c2VNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgcm91Z2huZXNzTWFwOiByb3VnaG5lc3NNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgbWV0YWxuZXNzTWFwOiBtZXRhbG5lc3NNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgbm9ybWFsTWFwOiBub3JtYWxNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgb2NjbHVzaW9uTWFwOiBvY2NsdXNpb25NYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgZW1pc3NpdmVNYXA6IGVtaXNzaXZlTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGNvbG9yOiBiYXNlQ29sb3Iuc2xpY2UoMCwgMyksXHJcbiAgICAgICAgICAgIGFscGhhOiBiYXNlQ29sb3JbM10sXHJcbiAgICAgICAgICAgIG1ldGFsbmVzczogbWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLm1ldGFsbGljRmFjdG9yIHx8IDAsXHJcbiAgICAgICAgICAgIHJvdWdobmVzczogbWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLnJvdWdobmVzc0ZhY3RvciB8fCAwLFxyXG4gICAgICAgICAgICBlbWlzc2lvbjogbWF0ZXJpYWxJbmZvLmVtaXNzaXZlRmFjdG9yIHx8IFswLCAwLCAwXSxcclxuICAgICAgICAgICAgZW1pc3Npb25JbnRlbnNpdHk6IDEsXHJcbiAgICAgICAgICAgIGFscGhhQ3V0b2ZmOiBtYXRlcmlhbEluZm8uYWxwaGFDdXRvZmYgfHwgMCxcclxuICAgICAgICAgICAgbm9ybWFsU2NhbGU6IG5vcm1hbFNjYWxlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoY29tbW9uUHJvcGVydGllcy5yb3VnaG5lc3NNYXApIHtcclxuICAgICAgICAgICAgLy8gSW4gZ2xURiBtZXRhbGxpY0ZhY3RvciB3aWxsIGRvIG11bHRpcGx5LCB3aGljaCBpcyBkaWZmZXJlbnQgZnJvbSBTdGFuZGFyZE1hdGVyaWFsLlxyXG4gICAgICAgICAgICAvLyBTbyBzaW1wbHkgaWdub3JlIGl0XHJcbiAgICAgICAgICAgIGNvbW1vblByb3BlcnRpZXMubWV0YWxuZXNzID0gMC41O1xyXG4gICAgICAgICAgICBjb21tb25Qcm9wZXJ0aWVzLnJvdWdobmVzcyA9IDAuNTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzU3RhbmRhcmRNYXRlcmlhbCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBTdGFuZGFyZE1hdGVyaWFsKHV0aWwuZXh0ZW5kKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgYWxwaGFUZXN0OiBhbHBoYVRlc3QsXHJcbiAgICAgICAgICAgICAgICBkb3VibGVTaWRlZDogbWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkLFxyXG4gICAgICAgICAgICAgICAgLy8gRyBjaGFubmVsXHJcbiAgICAgICAgICAgICAgICByb3VnaG5lc3NDaGFubmVsOiAxLFxyXG4gICAgICAgICAgICAgICAgLy8gQiBDaGFubmVsXHJcbiAgICAgICAgICAgICAgICBtZXRhbG5lc3NDaGFubmVsOiAyXHJcbiAgICAgICAgICAgIH0sIGNvbW1vblByb3BlcnRpZXMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBtYXRlcmlhbEluZm8ubmFtZSxcclxuICAgICAgICAgICAgICAgIHNoYWRlcjogdGhpcy5fZ2V0U2hhZGVyKClcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9ST1VHSE5FU1MnKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfTUVUQUxORVNTJyk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUk9VR0hORVNTX0NIQU5ORUwnLCAxKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdNRVRBTE5FU1NfQ0hBTk5FTCcsIDIpO1xyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdESUZGVVNFTUFQX0FMUEhBX0FMUEhBJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYWxwaGFUZXN0KSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ0RPVUJMRV9TSURFRCcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoY29tbW9uUHJvcGVydGllcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmFscGhhTW9kZSA9PT0gJ0JMRU5EJykge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZXB0aE1hc2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGJyU3BlY3VsYXJHbG9zc2luZXNzVG9TdGFuZGFyZDogZnVuY3Rpb24gKG1hdGVyaWFsSW5mbywgc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mbywgbGliKSB7XHJcbiAgICAgICAgdmFyIGFscGhhVGVzdCA9IG1hdGVyaWFsSW5mby5hbHBoYU1vZGUgPT09ICdNQVNLJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXNlU3RhbmRhcmRNYXRlcmlhbCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTdGFuZGFyZE1hdGVyaWFsIGRvZXNuXFwndCBzdXBwb3J0IHNwZWN1bGFyIGdsb3NzaW5lc3Mgd29ya2Zsb3cgeWV0Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIGRpZmZ1c2VNYXAsIGdsb3NzaW5lc3NNYXAsIHNwZWN1bGFyTWFwLCBub3JtYWxNYXAsIGVtaXNzaXZlTWFwLCBvY2NsdXNpb25NYXA7XHJcbiAgICAgICAgdmFyIGVuYWJsZWRUZXh0dXJlcyA9IFtdO1xyXG4gICAgICAgIC8vIFRPRE8gdGV4Q29vcmRcclxuICAgICAgICBpZiAoc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mby5kaWZmdXNlVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwID0gbGliLnRleHR1cmVzW3NwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uZGlmZnVzZVRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIGRpZmZ1c2VNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ2RpZmZ1c2VNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uc3BlY3VsYXJHbG9zc2luZXNzVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBnbG9zc2luZXNzTWFwID0gc3BlY3VsYXJNYXAgPSBsaWIudGV4dHVyZXNbc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mby5zcGVjdWxhckdsb3NzaW5lc3NUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBnbG9zc2luZXNzTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdzcGVjdWxhck1hcCcsICdnbG9zc2luZXNzTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBub3JtYWxNYXAgPSBsaWIudGV4dHVyZXNbbWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIG5vcm1hbE1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnbm9ybWFsTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8uZW1pc3NpdmVUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5lbWlzc2l2ZVRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdlbWlzc2l2ZU1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLm9jY2x1c2lvblRleHR1cmUpIHtcclxuICAgICAgICAgICAgb2NjbHVzaW9uTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5vY2NsdXNpb25UZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBvY2NsdXNpb25NYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ29jY2x1c2lvbk1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGlmZnVzZUNvbG9yID0gc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mby5kaWZmdXNlRmFjdG9yIHx8IFsxLCAxLCAxLCAxXTtcclxuXHJcbiAgICAgICAgdmFyIGNvbW1vblByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICAgIGRpZmZ1c2VNYXA6IGRpZmZ1c2VNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgZ2xvc3NpbmVzc01hcDogZ2xvc3NpbmVzc01hcCB8fCBudWxsLFxyXG4gICAgICAgICAgICBzcGVjdWxhck1hcDogc3BlY3VsYXJNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgbm9ybWFsTWFwOiBub3JtYWxNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgZW1pc3NpdmVNYXA6IGVtaXNzaXZlTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG9jY2x1c2lvbk1hcDogb2NjbHVzaW9uTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGNvbG9yOiBkaWZmdXNlQ29sb3Iuc2xpY2UoMCwgMyksXHJcbiAgICAgICAgICAgIGFscGhhOiBkaWZmdXNlQ29sb3JbM10sXHJcbiAgICAgICAgICAgIHNwZWN1bGFyQ29sb3I6IHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uc3BlY3VsYXJGYWN0b3IgfHwgWzEsIDEsIDFdLFxyXG4gICAgICAgICAgICBnbG9zc2luZXNzOiBzcGVjdWxhckdsb3NzaW5lc3NNYXRJbmZvLmdsb3NzaW5lc3NGYWN0b3IgfHwgMCxcclxuICAgICAgICAgICAgZW1pc3Npb246IG1hdGVyaWFsSW5mby5lbWlzc2l2ZUZhY3RvciB8fCBbMCwgMCwgMF0sXHJcbiAgICAgICAgICAgIGVtaXNzaW9uSW50ZW5zaXR5OiAxLFxyXG4gICAgICAgICAgICBhbHBoYUN1dG9mZjogbWF0ZXJpYWxJbmZvLmFscGhhQ3V0b2ZmID09IG51bGwgPyAwLjkgOiBtYXRlcmlhbEluZm8uYWxwaGFDdXRvZmZcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChjb21tb25Qcm9wZXJ0aWVzLmdsb3NzaW5lc3NNYXApIHtcclxuICAgICAgICAgICAgLy8gSWdub3JlIHNwZWN1bGFyRmFjdG9yXHJcbiAgICAgICAgICAgIGNvbW1vblByb3BlcnRpZXMuZ2xvc3NpbmVzcyA9IDAuNTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbW1vblByb3BlcnRpZXMuc3BlY3VsYXJNYXApIHtcclxuICAgICAgICAgICAgLy8gSWdub3JlIHNwZWN1bGFyRmFjdG9yXHJcbiAgICAgICAgICAgIGNvbW1vblByb3BlcnRpZXMuc3BlY3VsYXJDb2xvciA9IFsxLCAxLCAxXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgbmFtZTogbWF0ZXJpYWxJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgIHNoYWRlcjogdGhpcy5fZ2V0U2hhZGVyKClcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdHTE9TU0lORVNTX0NIQU5ORUwnLCAzKTtcclxuICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ0RJRkZVU0VNQVBfQUxQSEFfQUxQSEEnKTtcclxuXHJcbiAgICAgICAgaWYgKGFscGhhVGVzdCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ0RPVUJMRV9TSURFRCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWF0ZXJpYWwuc2V0KGNvbW1vblByb3BlcnRpZXMpO1xyXG5cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmFscGhhTW9kZSA9PT0gJ0JMRU5EJykge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZXB0aE1hc2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGFyc2VNYXRlcmlhbHM6IGZ1bmN0aW9uIChqc29uLCBsaWIpIHtcclxuICAgICAgICB1dGlsLmVhY2goanNvbi5tYXRlcmlhbHMsIGZ1bmN0aW9uIChtYXRlcmlhbEluZm8sIGlkeCkge1xyXG4gICAgICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnMgJiYgbWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnNbJ0tIUl9tYXRlcmlhbHNfY29tbW9uJ10pIHtcclxuICAgICAgICAgICAgICAgIGxpYi5tYXRlcmlhbHNbaWR4XSA9IHRoaXMuX0tIUkNvbW1vbk1hdGVyaWFsVG9TdGFuZGFyZChtYXRlcmlhbEluZm8sIGxpYik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnMgJiYgbWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnNbJ0tIUl9tYXRlcmlhbHNfcGJyU3BlY3VsYXJHbG9zc2luZXNzJ10pIHtcclxuICAgICAgICAgICAgICAgIGxpYi5tYXRlcmlhbHNbaWR4XSA9IHRoaXMuX3BiclNwZWN1bGFyR2xvc3NpbmVzc1RvU3RhbmRhcmQobWF0ZXJpYWxJbmZvLCBtYXRlcmlhbEluZm8uZXh0ZW5zaW9uc1snS0hSX21hdGVyaWFsc19wYnJTcGVjdWxhckdsb3NzaW5lc3MnXSwgbGliKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxpYi5tYXRlcmlhbHNbaWR4XSA9IHRoaXMuX3Bick1ldGFsbGljUm91Z2huZXNzVG9TdGFuZGFyZChtYXRlcmlhbEluZm8sIG1hdGVyaWFsSW5mby5wYnJNZXRhbGxpY1JvdWdobmVzcyB8fCB7fSwgbGliKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGFyc2VNZXNoZXM6IGZ1bmN0aW9uIChqc29uLCBsaWIpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIHV0aWwuZWFjaChqc29uLm1lc2hlcywgZnVuY3Rpb24gKG1lc2hJbmZvLCBpZHgpIHtcclxuICAgICAgICAgICAgbGliLm1lc2hlc1tpZHhdID0gW107XHJcbiAgICAgICAgICAgIC8vIEdlb21ldHJ5XHJcbiAgICAgICAgICAgIGZvciAodmFyIHBwID0gMDsgcHAgPCBtZXNoSW5mby5wcmltaXRpdmVzLmxlbmd0aDsgcHArKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHByaW1pdGl2ZUluZm8gPSBtZXNoSW5mby5wcmltaXRpdmVzW3BwXTtcclxuICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IG5ldyBHZW9tZXRyeSh7XHJcbiAgICAgICAgICAgICAgICAgICAgZHluYW1pYzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUEVORElHTlxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG1lc2hJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgYm91bmRpbmdCb3g6IG5ldyBCb3VuZGluZ0JveCgpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIC8vIFBhcnNlIGF0dHJpYnV0ZXNcclxuICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpY3MgPSBPYmplY3Qua2V5cyhwcmltaXRpdmVJbmZvLmF0dHJpYnV0ZXMpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgc3MgPSAwOyBzcyA8IHNlbWFudGljcy5sZW5ndGg7IHNzKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWMgPSBzZW1hbnRpY3Nbc3NdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhY2Nlc3NvcklkeCA9IHByaW1pdGl2ZUluZm8uYXR0cmlidXRlc1tzZW1hbnRpY107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUluZm8gPSBqc29uLmFjY2Vzc29yc1thY2Nlc3NvcklkeF07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBzZW1hbnRpY0F0dHJpYnV0ZU1hcFtzZW1hbnRpY107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGVOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IFNJWkVfTUFQW2F0dHJpYnV0ZUluZm8udHlwZV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUFycmF5ID0gZ2V0QWNjZXNzb3JEYXRhKGpzb24sIGxpYiwgYWNjZXNzb3JJZHgpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFdlYkdMIGF0dHJpYnV0ZSBidWZmZXIgbm90IHN1cHBvcnQgdWludDMyLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIERpcmVjdCB1c2UgRmxvYXQzMkFycmF5IG1heSBhbHNvIGhhdmUgaXNzdWUuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZUFycmF5IGluc3RhbmNlb2YgdmVuZG9yLlVpbnQzMkFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShhdHRyaWJ1dGVBcnJheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpYyA9PT0gJ1dFSUdIVFNfMCcgJiYgc2l6ZSA9PT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZWlnaHQgZGF0YSBpbiBRVEVLIGhhcyBvbmx5IDMgY29tcG9uZW50LCB0aGUgbGFzdCBjb21wb25lbnQgY2FuIGJlIGV2YWx1YXRlZCBzaW5jZSBpdCBpcyBub3JtYWxpemVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3ZWlnaHRBcnJheSA9IG5ldyBhdHRyaWJ1dGVBcnJheS5jb25zdHJ1Y3RvcihhdHRyaWJ1dGVJbmZvLmNvdW50ICogMyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlSW5mby5jb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTQgPSBpICogNCwgaTMgPSBpICogMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3MSA9IGF0dHJpYnV0ZUFycmF5W2k0XSwgdzIgPSBhdHRyaWJ1dGVBcnJheVtpNCArIDFdLCB3MyA9IGF0dHJpYnV0ZUFycmF5W2k0ICsgMl0sIHc0ID0gYXR0cmlidXRlQXJyYXlbaTQgKyAzXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3U3VtID0gdzEgKyB3MiArIHczICsgdzQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRBcnJheVtpM10gPSB3MSAvIHdTdW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHRBcnJheVtpMyArIDFdID0gdzIgLyB3U3VtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0QXJyYXlbaTMgKyAyXSA9IHczIC8gd1N1bTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdLnZhbHVlID0gd2VpZ2h0QXJyYXk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbWFudGljID09PSAnQ09MT1JfMCcgJiYgc2l6ZSA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JBcnJheSA9IG5ldyBhdHRyaWJ1dGVBcnJheS5jb25zdHJ1Y3RvcihhdHRyaWJ1dGVJbmZvLmNvdW50ICogNCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlSW5mby5jb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTQgPSBpICogNCwgaTMgPSBpICogMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yQXJyYXlbaTRdID0gYXR0cmlidXRlQXJyYXlbaTNdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JBcnJheVtpNCArIDFdID0gYXR0cmlidXRlQXJyYXlbaTMgKyAxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yQXJyYXlbaTQgKyAyXSA9IGF0dHJpYnV0ZUFycmF5W2kzICsgMl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckFycmF5W2k0ICsgM10gPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0udmFsdWUgPSBjb2xvckFycmF5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXS52YWx1ZSA9IGF0dHJpYnV0ZUFycmF5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZVR5cGUgPSAnZmxvYXQnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVBcnJheSBpbnN0YW5jZW9mIHZlbmRvci5VaW50MTZBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVUeXBlID0gJ3VzaG9ydCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZUFycmF5IGluc3RhbmNlb2YgdmVuZG9yLkludDE2QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9ICdzaG9ydCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZUFycmF5IGluc3RhbmNlb2YgdmVuZG9yLlVpbnQ4QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9ICd1Ynl0ZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZUFycmF5IGluc3RhbmNlb2YgdmVuZG9yLkludDhBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVUeXBlID0gJ2J5dGUnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdLnR5cGUgPSBhdHRyaWJ1dGVUeXBlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMgPT09ICdQT1NJVElPTicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQm91bmRpbmcgQm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaW4gPSBhdHRyaWJ1dGVJbmZvLm1pbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heCA9IGF0dHJpYnV0ZUluZm8ubWF4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5ib3VuZGluZ0JveC5taW4uc2V0KG1pblswXSwgbWluWzFdLCBtaW5bMl0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmJvdW5kaW5nQm94Lm1heC5zZXQobWF4WzBdLCBtYXhbMV0sIG1heFsyXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gUGFyc2UgaW5kaWNlc1xyXG4gICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZUluZm8uaW5kaWNlcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlcyA9IGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIHByaW1pdGl2ZUluZm8uaW5kaWNlcywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdlb21ldHJ5LnZlcnRleENvdW50IDw9IDB4ZmZmZiAmJiBnZW9tZXRyeS5pbmRpY2VzIGluc3RhbmNlb2YgdmVuZG9yLlVpbnQzMkFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgdmVuZG9yLlVpbnQxNkFycmF5KGdlb21ldHJ5LmluZGljZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZihnZW9tZXRyeS5pbmRpY2VzIGluc3RhbmNlb2YgdmVuZG9yLlVpbnQ4QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlcyA9IG5ldyB2ZW5kb3IuVWludDE2QXJyYXkoZ2VvbWV0cnkuaW5kaWNlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IGxpYi5tYXRlcmlhbHNbcHJpbWl0aXZlSW5mby5tYXRlcmlhbF07XHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWxJbmZvID0gKGpzb24ubWF0ZXJpYWxzIHx8IFtdKVtwcmltaXRpdmVJbmZvLm1hdGVyaWFsXTtcclxuICAgICAgICAgICAgICAgIC8vIFVzZSBkZWZhdWx0IG1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXI6IHNlbGYuX2dldFNoYWRlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgbWVzaCA9IG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogZ2VvbWV0cnksXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IFtNZXNoLlBPSU5UUywgTWVzaC5MSU5FUywgTWVzaC5MSU5FX0xPT1AsIE1lc2guTElORV9TVFJJUCwgTWVzaC5UUklBTkdMRVMsIE1lc2guVFJJQU5HTEVfU1RSSVAsIE1lc2guVFJJQU5HTEVfRkFOXVtwcmltaXRpdmVJbmZvLm1vZGVdIHx8IE1lc2guVFJJQU5HTEVTLFxyXG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZUdCdWZmZXI6IG1hdGVyaWFsLnRyYW5zcGFyZW50XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbEluZm8gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc2guY3VsbGluZyA9ICFtYXRlcmlhbEluZm8uZG91YmxlU2lkZWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1lc2guZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNoLmdlb21ldHJ5LmdlbmVyYXRlVmVydGV4Tm9ybWFscygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCgobWF0ZXJpYWwgaW5zdGFuY2VvZiBTdGFuZGFyZE1hdGVyaWFsKSAmJiBtYXRlcmlhbC5ub3JtYWxNYXApXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgKG1hdGVyaWFsLmlzVGV4dHVyZUVuYWJsZWQoJ25vcm1hbE1hcCcpKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMudGFuZ2VudC52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNoLmdlb21ldHJ5LmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobWVzaC5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC5kZWZpbmUoJ1ZFUlRFWF9DT0xPUicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG1lc2gubmFtZSA9IEdMVEZMb2FkZXIuZ2VuZXJhdGVNZXNoTmFtZShqc29uLm1lc2hlcywgaWR4LCBwcCk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGliLm1lc2hlc1tpZHhdLnB1c2gobWVzaCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2luc3RhbmNlQ2FtZXJhOiBmdW5jdGlvbiAoanNvbiwgbm9kZUluZm8pIHtcclxuICAgICAgICB2YXIgY2FtZXJhSW5mbyA9IGpzb24uY2FtZXJhc1tub2RlSW5mby5jYW1lcmFdO1xyXG5cclxuICAgICAgICBpZiAoY2FtZXJhSW5mby50eXBlID09PSAncGVyc3BlY3RpdmUnKSB7XHJcbiAgICAgICAgICAgIHZhciBwZXJzcGVjdGl2ZUluZm8gPSBjYW1lcmFJbmZvLnBlcnNwZWN0aXZlIHx8IHt9O1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG5vZGVJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBhc3BlY3Q6IHBlcnNwZWN0aXZlSW5mby5hc3BlY3RSYXRpbyxcclxuICAgICAgICAgICAgICAgIGZvdjogcGVyc3BlY3RpdmVJbmZvLnlmb3YgLyBNYXRoLlBJICogMTgwLFxyXG4gICAgICAgICAgICAgICAgZmFyOiBwZXJzcGVjdGl2ZUluZm8uemZhcixcclxuICAgICAgICAgICAgICAgIG5lYXI6IHBlcnNwZWN0aXZlSW5mby56bmVhclxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBvcnRob2dyYXBoaWNJbmZvID0gY2FtZXJhSW5mby5vcnRob2dyYXBoaWMgfHwge307XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3J0aG9ncmFwaGljQ2FtZXJhKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG5vZGVJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB0b3A6IG9ydGhvZ3JhcGhpY0luZm8ueW1hZyxcclxuICAgICAgICAgICAgICAgIHJpZ2h0OiBvcnRob2dyYXBoaWNJbmZvLnhtYWcsXHJcbiAgICAgICAgICAgICAgICBsZWZ0OiAtb3J0aG9ncmFwaGljSW5mby54bWFnLFxyXG4gICAgICAgICAgICAgICAgYm90dG9tOiAtb3J0aG9ncmFwaGljSW5mby55bWFnLFxyXG4gICAgICAgICAgICAgICAgbmVhcjogb3J0aG9ncmFwaGljSW5mby56bmVhcixcclxuICAgICAgICAgICAgICAgIGZhcjogb3J0aG9ncmFwaGljSW5mby56ZmFyXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3BhcnNlTm9kZXM6IGZ1bmN0aW9uIChqc29uLCBsaWIpIHtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gaW5zdGFuY2VNZXNoKG1lc2gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG1lc2gubmFtZSxcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBtZXNoLmdlb21ldHJ5LFxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWw6IG1lc2gubWF0ZXJpYWwsXHJcbiAgICAgICAgICAgICAgICBjdWxsaW5nOiBtZXNoLmN1bGxpbmcsXHJcbiAgICAgICAgICAgICAgICBtb2RlOiBtZXNoLm1vZGVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsaWIuaW5zdGFuY2VkTWVzaGVzID0gW107XHJcblxyXG4gICAgICAgIHV0aWwuZWFjaChqc29uLm5vZGVzLCBmdW5jdGlvbiAobm9kZUluZm8sIGlkeCkge1xyXG4gICAgICAgICAgICB2YXIgbm9kZTtcclxuICAgICAgICAgICAgaWYgKG5vZGVJbmZvLmNhbWVyYSAhPSBudWxsICYmIHRoaXMuaW5jbHVkZUNhbWVyYSkge1xyXG4gICAgICAgICAgICAgICAgbm9kZSA9IHRoaXMuX2luc3RhbmNlQ2FtZXJhKGpzb24sIG5vZGVJbmZvKTtcclxuICAgICAgICAgICAgICAgIGxpYi5jYW1lcmFzLnB1c2gobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobm9kZUluZm8ubWVzaCAhPSBudWxsICYmIHRoaXMuaW5jbHVkZU1lc2gpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcmltaXRpdmVzID0gbGliLm1lc2hlc1tub2RlSW5mby5tZXNoXTtcclxuICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIG5vZGUgd2l0aCBtZXNoIGRpcmVjdGx5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBpbnN0YW5jZU1lc2gocHJpbWl0aXZlc1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0TmFtZShub2RlSW5mby5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGliLmluc3RhbmNlZE1lc2hlcy5wdXNoKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5ldyBOb2RlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0TmFtZShub2RlSW5mby5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwcmltaXRpdmVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3TWVzaCA9IGluc3RhbmNlTWVzaChwcmltaXRpdmVzW2pdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkKG5ld01lc2gpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliLmluc3RhbmNlZE1lc2hlcy5wdXNoKG5ld01lc2gpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbm9kZSA9IG5ldyBOb2RlKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBQRU5ESU5HIER1bHBsaWNhdGUgbmFtZS5cclxuICAgICAgICAgICAgICAgIG5vZGUuc2V0TmFtZShub2RlSW5mby5uYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobm9kZUluZm8ubWF0cml4KSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLmxvY2FsVHJhbnNmb3JtLnNldEFycmF5KG5vZGVJbmZvLm1hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICBub2RlLmRlY29tcG9zZUxvY2FsVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZUluZm8udHJhbnNsYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnBvc2l0aW9uLnNldEFycmF5KG5vZGVJbmZvLnRyYW5zbGF0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChub2RlSW5mby5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUucm90YXRpb24uc2V0QXJyYXkobm9kZUluZm8ucm90YXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGVJbmZvLnNjYWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zY2FsZS5zZXRBcnJheShub2RlSW5mby5zY2FsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxpYi5ub2Rlc1tpZHhdID0gbm9kZTtcclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgLy8gQnVpbGQgaGllcmFyY2h5XHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24ubm9kZXMsIGZ1bmN0aW9uIChub2RlSW5mbywgaWR4KSB7XHJcbiAgICAgICAgICAgIHZhciBub2RlID0gbGliLm5vZGVzW2lkeF07XHJcbiAgICAgICAgICAgIGlmIChub2RlSW5mby5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlSW5mby5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZElkeCA9IG5vZGVJbmZvLmNoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IGxpYi5ub2Rlc1tjaGlsZElkeF07XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hZGQoY2hpbGQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICBfcGFyc2VBbmltYXRpb25zOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tDaGFubmVsUGF0aChjaGFubmVsSW5mbykge1xyXG4gICAgICAgICAgICBpZiAoY2hhbm5lbEluZm8ucGF0aCA9PT0gJ3dlaWdodHMnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0dMVEZMb2FkZXIgbm90IHN1cHBvcnQgbW9ycGggdGFyZ2V0cyB5ZXQuJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBnZXRDaGFubmVsSGFzaChjaGFubmVsSW5mbywgYW5pbWF0aW9uSW5mbykge1xyXG4gICAgICAgICAgICByZXR1cm4gY2hhbm5lbEluZm8udGFyZ2V0Lm5vZGUgKyAnXycgKyBhbmltYXRpb25JbmZvLnNhbXBsZXJzW2NoYW5uZWxJbmZvLnNhbXBsZXJdLmlucHV0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRpbWVBY2Nlc3Nvck11bHRpcGxpZWQgPSB7fTtcclxuICAgICAgICB1dGlsLmVhY2goanNvbi5hbmltYXRpb25zLCBmdW5jdGlvbiAoYW5pbWF0aW9uSW5mbywgaWR4KSB7XHJcbiAgICAgICAgICAgIHZhciBjaGFubmVscyA9IGFuaW1hdGlvbkluZm8uY2hhbm5lbHMuZmlsdGVyKGNoZWNrQ2hhbm5lbFBhdGgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjaGFubmVscy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdHJhY2tzID0ge307XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbm5lbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjaGFubmVsSW5mbyA9IGNoYW5uZWxzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNoYW5uZWxIYXNoID0gZ2V0Q2hhbm5lbEhhc2goY2hhbm5lbEluZm8sIGFuaW1hdGlvbkluZm8pO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciB0YXJnZXROb2RlID0gbGliLm5vZGVzW2NoYW5uZWxJbmZvLnRhcmdldC5ub2RlXTtcclxuICAgICAgICAgICAgICAgIHZhciB0cmFjayA9IHRyYWNrc1tjaGFubmVsSGFzaF07XHJcbiAgICAgICAgICAgICAgICB2YXIgc2FtcGxlckluZm8gPSBhbmltYXRpb25JbmZvLnNhbXBsZXJzW2NoYW5uZWxJbmZvLnNhbXBsZXJdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghdHJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICB0cmFjayA9IHRyYWNrc1tjaGFubmVsSGFzaF0gPSBuZXcgU2FtcGxlclRyYWNrKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGFyZ2V0Tm9kZSA/IHRhcmdldE5vZGUubmFtZSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldE5vZGVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFjay50YXJnZXROb2RlSW5kZXggPSBjaGFubmVsSW5mby50YXJnZXQubm9kZTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFjay5jaGFubmVscy50aW1lID0gZ2V0QWNjZXNzb3JEYXRhKGpzb24sIGxpYiwgc2FtcGxlckluZm8uaW5wdXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBmcmFtZUxlbiA9IHRyYWNrLmNoYW5uZWxzLnRpbWUubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGltZUFjY2Vzc29yTXVsdGlwbGllZFtzYW1wbGVySW5mby5pbnB1dF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBmcmFtZUxlbjsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjay5jaGFubmVscy50aW1lW2tdICo9IDEwMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZUFjY2Vzc29yTXVsdGlwbGllZFtzYW1wbGVySW5mby5pbnB1dF0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZXJwb2xhdGlvbiA9IHNhbXBsZXJJbmZvLmludGVycG9sYXRpb24gfHwgJ0xJTkVBUic7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbiAhPT0gJ0xJTkVBUicpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0dMVEZMb2FkZXIgb25seSBzdXBwb3J0IExJTkVBUiBpbnRlcnBvbGF0aW9uLicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBwYXRoID0gY2hhbm5lbEluZm8udGFyZ2V0LnBhdGg7XHJcbiAgICAgICAgICAgICAgICBpZiAocGF0aCA9PT0gJ3RyYW5zbGF0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGggPSAncG9zaXRpb24nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRyYWNrLmNoYW5uZWxzW3BhdGhdID0gZ2V0QWNjZXNzb3JEYXRhKGpzb24sIGxpYiwgc2FtcGxlckluZm8ub3V0cHV0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdHJhY2tzTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBoYXNoIGluIHRyYWNrcykge1xyXG4gICAgICAgICAgICAgICAgdHJhY2tzTGlzdC5wdXNoKHRyYWNrc1toYXNoXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNsaXAgPSBuZXcgVHJhY2tDbGlwKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGFuaW1hdGlvbkluZm8ubmFtZSxcclxuICAgICAgICAgICAgICAgIGxvb3A6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB0cmFja3M6IHRyYWNrc0xpc3RcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxpYi5jbGlwcy5wdXNoKGNsaXApO1xyXG4gICAgICAgIH0sIHRoaXMpO1xyXG5cclxuXHJcbiAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgIHZhciBtYXhMaWZlID0gbGliLmNsaXBzLnJlZHVjZShmdW5jdGlvbiAobWF4VGltZSwgY2xpcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgobWF4VGltZSwgY2xpcC5saWZlKTtcclxuICAgICAgICB9LCAwKTtcclxuICAgICAgICBsaWIuY2xpcHMuZm9yRWFjaChmdW5jdGlvbiAoY2xpcCkge1xyXG4gICAgICAgICAgICBjbGlwLmxpZmUgPSBtYXhMaWZlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gbGliLmNsaXBzO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbkdMVEZMb2FkZXIuZ2VuZXJhdGVNZXNoTmFtZSA9IGZ1bmN0aW9uIChtZXNoZXMsIGlkeCwgcHJpbWl0aXZlSWR4KSB7XHJcbiAgICB2YXIgbWVzaEluZm8gPSBtZXNoZXNbaWR4XTtcclxuICAgIHZhciBtZXNoTmFtZSA9IG1lc2hJbmZvLm5hbWUgfHwgKCdtZXNoXycgKyBpZHgpO1xyXG4gICAgcmV0dXJuIHByaW1pdGl2ZUlkeCA9PT0gMCA/IG1lc2hOYW1lIDogKG1lc2hOYW1lICsgJyQnICsgcHJpbWl0aXZlSWR4KTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdMVEZMb2FkZXI7XHJcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuRGlyZWN0aW9uYWxcclxuICogQGV4dGVuZHMgY2xheS5MaWdodFxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgdmFyIGxpZ2h0ID0gbmV3IGNsYXkubGlnaHQuRGlyZWN0aW9uYWwoe1xyXG4gKiAgICAgICAgIGludGVuc2l0eTogMC41LFxyXG4gKiAgICAgICAgIGNvbG9yOiBbMS4wLCAwLjAsIDAuMF1cclxuICogICAgIH0pO1xyXG4gKiAgICAgbGlnaHQucG9zaXRpb24uc2V0KDEwLCAxMCwgMTApO1xyXG4gKiAgICAgbGlnaHQubG9va0F0KGNsYXkuVmVjdG9yMy5aRVJPKTtcclxuICogICAgIHNjZW5lLmFkZChsaWdodCk7XHJcbiAqL1xyXG52YXIgRGlyZWN0aW9uYWxMaWdodCA9IExpZ2h0LmV4dGVuZCgvKiogQGxlbmRzIGNsYXkubGlnaHQuRGlyZWN0aW9uYWwjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2hhZG93QmlhczogMC4wMDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNoYWRvd1Nsb3BlU2NhbGU6IDIuMCxcclxuICAgIC8qKlxyXG4gICAgICogU2hhZG93IGNhc2NhZGUuXHJcbiAgICAgKiBVc2UgUFNTTSB0ZWNobmlxdWUgd2hlbiBpdCBpcyBsYXJnZXIgdGhhbiAxIGFuZCBoYXZlIGEgdW5pcXVlIGRpcmVjdGlvbmFsIGxpZ2h0IGluIHNjZW5lLlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2hhZG93Q2FzY2FkZTogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEF2YWlsYWJsZSB3aGVuIHNoYWRvd0Nhc2NhZGUgaXMgbGFyZ2VyIHRoYW4gMSBhbmQgaGF2ZSBhIHVuaXF1ZSBkaXJlY3Rpb25hbCBsaWdodCBpbiBzY2VuZS5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNhc2NhZGVTcGxpdExvZ0ZhY3RvcjogMC4yXHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnRElSRUNUSU9OQUxfTElHSFQnLFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBkaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9uOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLl9fZGlyID0gaW5zdGFuY2UuX19kaXIgfHwgbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICAgICAgICAgIC8vIERpcmVjdGlvbiBpcyB0YXJnZXQgdG8gZXllXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuX19kaXIuY29weShpbnN0YW5jZS53b3JsZFRyYW5zZm9ybS56KS5ub3JtYWxpemUoKS5uZWdhdGUoKS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGlyZWN0aW9uYWxMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0gKiBpbnRlbnNpdHksIGNvbG9yWzFdICogaW50ZW5zaXR5LCBjb2xvclsyXSAqIGludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuRGlyZWN0aW9uYWwucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0ID0gTGlnaHQucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICAgICAgbGlnaHQuc2hhZG93QmlhcyA9IHRoaXMuc2hhZG93QmlhcztcclxuICAgICAgICBsaWdodC5zaGFkb3dTbG9wZVNjYWxlID0gdGhpcy5zaGFkb3dTbG9wZVNjYWxlO1xyXG4gICAgICAgIHJldHVybiBsaWdodDtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEaXJlY3Rpb25hbExpZ2h0O1xyXG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LlBvaW50XHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICovXHJcbnZhciBQb2ludExpZ2h0ID0gTGlnaHQuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5saWdodC5Qb2ludCMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYW5nZTogMTAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY2FzdFNoYWRvdzogZmFsc2VcclxufSwge1xyXG5cclxuICAgIHR5cGU6ICdQT0lOVF9MSUdIVCcsXHJcblxyXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xyXG4gICAgICAgIHBvaW50TGlnaHRQb3NpdGlvbjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvaW50TGlnaHRSYW5nZToge1xyXG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5yYW5nZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcG9pbnRMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSAqIGludGVuc2l0eSwgY29sb3JbMV0gKiBpbnRlbnNpdHksIGNvbG9yWzJdICogaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkubGlnaHQuUG9pbnR9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5Qb2ludC5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBsaWdodCA9IExpZ2h0LnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGxpZ2h0LnJhbmdlID0gdGhpcy5yYW5nZTtcclxuICAgICAgICByZXR1cm4gbGlnaHQ7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUG9pbnRMaWdodDtcclxuIiwiaW1wb3J0IExpZ2h0IGZyb20gJy4uL0xpZ2h0JztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5saWdodC5TcG90XHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICovXHJcbnZhciBTcG90TGlnaHQgPSBMaWdodC5leHRlbmQoLyoqQGxlbmRzIGNsYXkubGlnaHQuU3BvdCAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJhbmdlOiAyMCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdW1icmFBbmdsZTogMzAsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHBlbnVtYnJhQW5nbGU6IDQ1LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBmYWxsb2ZmRmFjdG9yOiAyLjAsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNoYWRvd0JpYXM6IDAuMDAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzaGFkb3dTbG9wZVNjYWxlOiAyLjBcclxufSwge1xyXG5cclxuICAgIHR5cGU6ICdTUE9UX0xJR0hUJyxcclxuXHJcbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XHJcbiAgICAgICAgc3BvdExpZ2h0UG9zaXRpb246IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BvdExpZ2h0UmFuZ2U6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJhbmdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmNvcyhpbnN0YW5jZS51bWJyYUFuZ2xlICogTWF0aC5QSSAvIDE4MCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmU6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguY29zKGluc3RhbmNlLnBlbnVtYnJhQW5nbGUgKiBNYXRoLlBJIC8gMTgwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BvdExpZ2h0RmFsbG9mZkZhY3Rvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZmFsbG9mZkZhY3RvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BvdExpZ2h0RGlyZWN0aW9uOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLl9fZGlyID0gaW5zdGFuY2UuX19kaXIgfHwgbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICAgICAgICAgIC8vIERpcmVjdGlvbiBpcyB0YXJnZXQgdG8gZXllXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuX19kaXIuY29weShpbnN0YW5jZS53b3JsZFRyYW5zZm9ybS56KS5uZWdhdGUoKS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BvdExpZ2h0Q29sb3I6IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSAqIGludGVuc2l0eSwgY29sb3JbMV0gKiBpbnRlbnNpdHksIGNvbG9yWzJdICogaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkubGlnaHQuU3BvdH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LlNwb3QucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0ID0gTGlnaHQucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICAgICAgbGlnaHQucmFuZ2UgPSB0aGlzLnJhbmdlO1xyXG4gICAgICAgIGxpZ2h0LnVtYnJhQW5nbGUgPSB0aGlzLnVtYnJhQW5nbGU7XHJcbiAgICAgICAgbGlnaHQucGVudW1icmFBbmdsZSA9IHRoaXMucGVudW1icmFBbmdsZTtcclxuICAgICAgICBsaWdodC5mYWxsb2ZmRmFjdG9yID0gdGhpcy5mYWxsb2ZmRmFjdG9yO1xyXG4gICAgICAgIGxpZ2h0LnNoYWRvd0JpYXMgPSB0aGlzLnNoYWRvd0JpYXM7XHJcbiAgICAgICAgbGlnaHQuc2hhZG93U2xvcGVTY2FsZSA9IHRoaXMuc2hhZG93U2xvcGVTY2FsZTtcclxuICAgICAgICByZXR1cm4gbGlnaHQ7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BvdExpZ2h0O1xyXG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkFtYmllbnRcclxuICogQGV4dGVuZHMgY2xheS5MaWdodFxyXG4gKi9cclxudmFyIEFtYmllbnRMaWdodCA9IExpZ2h0LmV4dGVuZCh7XHJcblxyXG4gICAgY2FzdFNoYWRvdzogZmFsc2VcclxuXHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnQU1CSUVOVF9MSUdIVCcsXHJcblxyXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xyXG4gICAgICAgIGFtYmllbnRMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSppbnRlbnNpdHksIGNvbG9yWzFdKmludGVuc2l0eSwgY29sb3JbMl0qaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAbmFtZSBjbG9uZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5BbWJpZW50fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuQW1iaWVudC5wcm90b3R5cGVcclxuICAgICAqL1xyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFtYmllbnRMaWdodDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi9UZXh0dXJlQ3ViZSc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCBDYWNoZSBmcm9tICcuL2NvcmUvQ2FjaGUnO1xyXG5cclxudmFyIEtFWV9GUkFNRUJVRkZFUiA9ICdmcmFtZWJ1ZmZlcic7XHJcbnZhciBLRVlfUkVOREVSQlVGRkVSID0gJ3JlbmRlcmJ1ZmZlcic7XHJcbnZhciBLRVlfUkVOREVSQlVGRkVSX1dJRFRIID0gS0VZX1JFTkRFUkJVRkZFUiArICdfd2lkdGgnO1xyXG52YXIgS0VZX1JFTkRFUkJVRkZFUl9IRUlHSFQgPSBLRVlfUkVOREVSQlVGRkVSICsgJ19oZWlnaHQnO1xyXG52YXIgS0VZX1JFTkRFUkJVRkZFUl9BVFRBQ0hFRCA9IEtFWV9SRU5ERVJCVUZGRVIgKyAnX2F0dGFjaGVkJztcclxudmFyIEtFWV9ERVBUSFRFWFRVUkVfQVRUQUNIRUQgPSAnZGVwdGh0ZXh0dXJlX2F0dGFjaGVkJztcclxuXHJcbnZhciBHTF9GUkFNRUJVRkZFUiA9IGdsZW51bS5GUkFNRUJVRkZFUjtcclxudmFyIEdMX1JFTkRFUkJVRkZFUiA9IGdsZW51bS5SRU5ERVJCVUZGRVI7XHJcbnZhciBHTF9ERVBUSF9BVFRBQ0hNRU5UID0gZ2xlbnVtLkRFUFRIX0FUVEFDSE1FTlQ7XHJcbnZhciBHTF9DT0xPUl9BVFRBQ0hNRU5UMCA9IGdsZW51bS5DT0xPUl9BVFRBQ0hNRU5UMDtcclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LkZyYW1lQnVmZmVyXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgRnJhbWVCdWZmZXIgPSBCYXNlLmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5LkZyYW1lQnVmZmVyIyAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIElmIHVzZSBkZXB0aCBidWZmZXJcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBkZXB0aEJ1ZmZlcjogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgKi9cclxuICAgIHZpZXdwb3J0OiBudWxsLFxyXG5cclxuICAgIF93aWR0aDogMCxcclxuICAgIF9oZWlnaHQ6IDAsXHJcblxyXG4gICAgX3RleHR1cmVzOiBudWxsLFxyXG5cclxuICAgIF9ib3VuZFJlbmRlcmVyOiBudWxsLFxyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBVc2UgY2FjaGVcclxuICAgIHRoaXMuX2NhY2hlID0gbmV3IENhY2hlKCk7XHJcblxyXG4gICAgdGhpcy5fdGV4dHVyZXMgPSB7fTtcclxufSxcclxuXHJcbi8qKkBsZW5kcyBjbGF5LkZyYW1lQnVmZmVyLnByb3RvdHlwZS4gKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYXR0YWNoZWQgdGV4dHVyZSB3aWR0aFxyXG4gICAgICoge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgLy8gRklYTUUgQ2FuJ3QgdXNlIGJlZm9yZSAjYmluZFxyXG4gICAgZ2V0VGV4dHVyZVdpZHRoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhdHRhY2hlZCB0ZXh0dXJlIGhlaWdodFxyXG4gICAgICoge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0VGV4dHVyZUhlaWdodDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmluZCB0aGUgZnJhbWVidWZmZXIgdG8gZ2l2ZW4gcmVuZGVyZXIgYmVmb3JlIHJlbmRlcmluZ1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcblxyXG4gICAgICAgIGlmIChyZW5kZXJlci5fX2N1cnJlbnRGcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgICAgICAvLyBBbHJlYWR5IGJvdW5kXHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJlci5fX2N1cnJlbnRGcmFtZUJ1ZmZlciA9PT0gdGhpcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JlbmRlcmVyIGFscmVhZHkgYm91bmQgd2l0aCBhbm90aGVyIGZyYW1lYnVmZmVyLiBVbmJpbmQgaXQgZmlyc3QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyZXIuX19jdXJyZW50RnJhbWVCdWZmZXIgPSB0aGlzO1xyXG5cclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIF9nbC5iaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIHRoaXMuX2dldEZyYW1lQnVmZmVyR0wocmVuZGVyZXIpKTtcclxuICAgICAgICB0aGlzLl9ib3VuZFJlbmRlcmVyID0gcmVuZGVyZXI7XHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcblxyXG4gICAgICAgIGNhY2hlLnB1dCgndmlld3BvcnQnLCByZW5kZXJlci52aWV3cG9ydCk7XHJcblxyXG4gICAgICAgIHZhciBoYXNUZXh0dXJlQXR0YWNoZWQgPSBmYWxzZTtcclxuICAgICAgICB2YXIgd2lkdGg7XHJcbiAgICAgICAgdmFyIGhlaWdodDtcclxuICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMuX3RleHR1cmVzKSB7XHJcbiAgICAgICAgICAgIGhhc1RleHR1cmVBdHRhY2hlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XTtcclxuICAgICAgICAgICAgaWYgKG9iaikge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBEbyB3aWR0aCwgaGVpZ2h0IGNoZWNraW5nLCBtYWtlIHN1cmUgc2l6ZSBhcmUgc2FtZVxyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBvYmoudGV4dHVyZS53aWR0aDtcclxuICAgICAgICAgICAgICAgIGhlaWdodCA9IG9iai50ZXh0dXJlLmhlaWdodDtcclxuICAgICAgICAgICAgICAgIC8vIEF0dGFjaCB0ZXh0dXJlc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZG9BdHRhY2gocmVuZGVyZXIsIG9iai50ZXh0dXJlLCBhdHRhY2htZW50LCBvYmoudGFyZ2V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fd2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmICghaGFzVGV4dHVyZUF0dGFjaGVkICYmIHRoaXMuZGVwdGhCdWZmZXIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignTXVzdCBhdHRhY2ggdGV4dHVyZSBiZWZvcmUgYmluZCwgb3IgcmVuZGVyYnVmZmVyIG1heSBoYXZlIGluY29ycmVjdCB3aWR0aCBhbmQgaGVpZ2h0LicpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy52aWV3cG9ydCkge1xyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCh0aGlzLnZpZXdwb3J0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KDAsIDAsIHdpZHRoLCBoZWlnaHQsIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXMgPSBjYWNoZS5nZXQoJ2F0dGFjaGVkX3RleHR1cmVzJyk7XHJcbiAgICAgICAgaWYgKGF0dGFjaGVkVGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiBhdHRhY2hlZFRleHR1cmVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG9EZXRhY2goX2dsLCBhdHRhY2htZW50LCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY2FjaGUuZ2V0KEtFWV9ERVBUSFRFWFRVUkVfQVRUQUNIRUQpICYmIHRoaXMuZGVwdGhCdWZmZXIpIHtcclxuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHJlbmRlciBidWZmZXJcclxuICAgICAgICAgICAgaWYgKGNhY2hlLm1pc3MoS0VZX1JFTkRFUkJVRkZFUikpIHtcclxuICAgICAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSLCBfZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciByZW5kZXJidWZmZXIgPSBjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUik7XHJcblxyXG4gICAgICAgICAgICBpZiAod2lkdGggIT09IGNhY2hlLmdldChLRVlfUkVOREVSQlVGRkVSX1dJRFRIKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IGhlaWdodCAhPT0gY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVJfSEVJR0hUKSkge1xyXG4gICAgICAgICAgICAgICAgX2dsLmJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgX2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xfUkVOREVSQlVGRkVSLCBfZ2wuREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgY2FjaGUucHV0KEtFWV9SRU5ERVJCVUZGRVJfV0lEVEgsIHdpZHRoKTtcclxuICAgICAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSX0hFSUdIVCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgIF9nbC5iaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUl9BVFRBQ0hFRCkpIHtcclxuICAgICAgICAgICAgICAgIF9nbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgY2FjaGUucHV0KEtFWV9SRU5ERVJCVUZGRVJfQVRUQUNIRUQsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVuYmluZCB0aGUgZnJhbWUgYnVmZmVyIGFmdGVyIHJlbmRlcmluZ1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICAvLyBSZW1vdmUgc3RhdHVzIHJlY29yZCBvbiByZW5kZXJlclxyXG4gICAgICAgIHJlbmRlcmVyLl9fY3VycmVudEZyYW1lQnVmZmVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICBfZ2wuYmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBudWxsKTtcclxuICAgICAgICB0aGlzLl9ib3VuZFJlbmRlcmVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5fY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IHRoaXMuX2NhY2hlLmdldCgndmlld3BvcnQnKTtcclxuICAgICAgICAvLyBSZXNldCB2aWV3cG9ydDtcclxuICAgICAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodmlld3BvcnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVNaXBtYXAocmVuZGVyZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBCZWNhdXNlIHRoZSBkYXRhIG9mIHRleHR1cmUgaXMgY2hhbmdlZCBvdmVyIHRpbWUsXHJcbiAgICAvLyBIZXJlIHVwZGF0ZSB0aGUgbWlwbWFwcyBvZiB0ZXh0dXJlIGVhY2ggdGltZSBhZnRlciByZW5kZXJlZDtcclxuICAgIHVwZGF0ZU1pcG1hcDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gdGhpcy5fdGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgdmFyIG9iaiA9IHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgICAgICBpZiAob2JqKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IG9iai50ZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgLy8gRklYTUUgc29tZSB0ZXh0dXJlIGZvcm1hdCBjYW4ndCBnZW5lcmF0ZSBtaXBtYXBcclxuICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS5OUE9UICYmIHRleHR1cmUudXNlTWlwbWFwXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgdGV4dHVyZS5taW5GaWx0ZXIgPT09IFRleHR1cmUuTElORUFSX01JUE1BUF9MSU5FQVIpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGV4dHVyZS50ZXh0dXJlVHlwZSA9PT0gJ3RleHR1cmVDdWJlJyA/IGdsZW51bS5URVhUVVJFX0NVQkVfTUFQIDogZ2xlbnVtLlRFWFRVUkVfMkQ7XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZS5nZXRXZWJHTFRleHR1cmUocmVuZGVyZXIpKTtcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuZ2VuZXJhdGVNaXBtYXAodGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuYmluZFRleHR1cmUodGFyZ2V0LCBudWxsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG5cclxuICAgIC8vIDB4OENENSwgMzYwNTMsIEZSQU1FQlVGRkVSX0NPTVBMRVRFXHJcbiAgICAvLyAweDhDRDYsIDM2MDU0LCBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlRcclxuICAgIC8vIDB4OENENywgMzYwNTUsIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UXHJcbiAgICAvLyAweDhDRDksIDM2MDU3LCBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlNcclxuICAgIC8vIDB4OENERCwgMzYwNjEsIEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEXHJcbiAgICBjaGVja1N0YXR1czogZnVuY3Rpb24gKF9nbCkge1xyXG4gICAgICAgIHJldHVybiBfZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTF9GUkFNRUJVRkZFUik7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXRGcmFtZUJ1ZmZlckdMOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcblxyXG4gICAgICAgIGlmIChjYWNoZS5taXNzKEtFWV9GUkFNRUJVRkZFUikpIHtcclxuICAgICAgICAgICAgY2FjaGUucHV0KEtFWV9GUkFNRUJVRkZFUiwgcmVuZGVyZXIuZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KEtFWV9GUkFNRUJVRkZFUik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXR0YWNoIGEgdGV4dHVyZShSVFQpIHRvIHRoZSBmcmFtZWJ1ZmZlclxyXG4gICAgICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSB0ZXh0dXJlXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFthdHRhY2htZW50PWdsLkNPTE9SX0FUVEFDSE1FTlQwXVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbdGFyZ2V0PWdsLlRFWFRVUkVfMkRdXHJcbiAgICAgKi9cclxuICAgIGF0dGFjaDogZnVuY3Rpb24gKHRleHR1cmUsIGF0dGFjaG1lbnQsIHRhcmdldCkge1xyXG5cclxuICAgICAgICBpZiAoIXRleHR1cmUud2lkdGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdGV4dHVyZSBhdHRhY2hlZCB0byBjb2xvciBidWZmZXIgaXMgbm90IGEgdmFsaWQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE8gd2lkdGggYW5kIGhlaWdodCBjaGVja1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgZGVwdGhfdGV4dHVyZSBleHRlbnNpb24gaXMgZW5hYmxlZCwgZGV2ZWxvcGVyc1xyXG4gICAgICAgIC8vIENhbiBhdHRhY2ggYSBkZXB0aCB0ZXh0dXJlIHRvIHRoZSBkZXB0aCBidWZmZXJcclxuICAgICAgICAvLyBodHRwOi8vYmxvZy50b2ppY29kZS5jb20vMjAxMi8wNy91c2luZy13ZWJnbGRlcHRodGV4dHVyZS5odG1sXHJcbiAgICAgICAgYXR0YWNobWVudCA9IGF0dGFjaG1lbnQgfHwgR0xfQ09MT1JfQVRUQUNITUVOVDA7XHJcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0IHx8IGdsZW51bS5URVhUVVJFXzJEO1xyXG5cclxuICAgICAgICB2YXIgYm91bmRSZW5kZXJlciA9IHRoaXMuX2JvdW5kUmVuZGVyZXI7XHJcbiAgICAgICAgdmFyIF9nbCA9IGJvdW5kUmVuZGVyZXIgJiYgYm91bmRSZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgYXR0YWNoZWRUZXh0dXJlcztcclxuXHJcbiAgICAgICAgaWYgKF9nbCkge1xyXG4gICAgICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICAgICAgY2FjaGUudXNlKGJvdW5kUmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICAgICAgICAgIGF0dGFjaGVkVGV4dHVyZXMgPSBjYWNoZS5nZXQoJ2F0dGFjaGVkX3RleHR1cmVzJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDaGVjayBpZiB0ZXh0dXJlIGF0dGFjaGVkXHJcbiAgICAgICAgdmFyIHByZXZpb3VzID0gdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF07XHJcbiAgICAgICAgaWYgKHByZXZpb3VzICYmIHByZXZpb3VzLnRhcmdldCA9PT0gdGFyZ2V0XHJcbiAgICAgICAgICAgICYmIHByZXZpb3VzLnRleHR1cmUgPT09IHRleHR1cmVcclxuICAgICAgICAgICAgJiYgKGF0dGFjaGVkVGV4dHVyZXMgJiYgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSAhPSBudWxsKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2FuQXR0YWNoID0gdHJ1ZTtcclxuICAgICAgICBpZiAoYm91bmRSZW5kZXJlcikge1xyXG4gICAgICAgICAgICBjYW5BdHRhY2ggPSB0aGlzLl9kb0F0dGFjaChib3VuZFJlbmRlcmVyLCB0ZXh0dXJlLCBhdHRhY2htZW50LCB0YXJnZXQpO1xyXG4gICAgICAgICAgICAvLyBTZXQgdmlld3BvcnQgYWdhaW4gaW5jYXNlIGF0dGFjaGVkIHRvIGRpZmZlcmVudCBzaXplIHRleHR1cmVzLlxyXG4gICAgICAgICAgICBpZiAoIXRoaXMudmlld3BvcnQpIHtcclxuICAgICAgICAgICAgICAgIGJvdW5kUmVuZGVyZXIuc2V0Vmlld3BvcnQoMCwgMCwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2FuQXR0YWNoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdID0gdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF0gfHwge307XHJcbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdLnRleHR1cmUgPSB0ZXh0dXJlO1xyXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XS50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfZG9BdHRhY2g6IGZ1bmN0aW9uIChyZW5kZXJlciwgdGV4dHVyZSwgYXR0YWNobWVudCwgdGFyZ2V0KSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0ZXh0dXJlIGlzIGFsd2F5cyB1cGRhdGVkXHJcbiAgICAgICAgLy8gQmVjYXVzZSB0ZXh0dXJlIHdpZHRoIG9yIGhlaWdodCBtYXkgYmUgY2hhbmdlZCBhbmQgaW4gdGhpcyB3ZSBjYW4ndCBiZSBub3RpZmllZFxyXG4gICAgICAgIC8vIEZJWE1FIGF3a3dhcmQ7XHJcbiAgICAgICAgdmFyIHdlYmdsVGV4dHVyZSA9IHRleHR1cmUuZ2V0V2ViR0xUZXh0dXJlKHJlbmRlcmVyKTtcclxuICAgICAgICAvLyBBc3N1bWUgY2FjaGUgaGFzIGJlZW4gdXNlZC5cclxuICAgICAgICB2YXIgYXR0YWNoZWRUZXh0dXJlcyA9IHRoaXMuX2NhY2hlLmdldCgnYXR0YWNoZWRfdGV4dHVyZXMnKTtcclxuICAgICAgICBpZiAoYXR0YWNoZWRUZXh0dXJlcyAmJiBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdKSB7XHJcbiAgICAgICAgICAgIHZhciBvYmogPSBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0ZXh0dXJlIGFuZCB0YXJnZXQgbm90IGNoYW5nZWRcclxuICAgICAgICAgICAgaWYgKG9iai50ZXh0dXJlID09PSB0ZXh0dXJlICYmIG9iai50YXJnZXQgPT09IHRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF0dGFjaG1lbnQgPSArYXR0YWNobWVudDtcclxuXHJcbiAgICAgICAgdmFyIGNhbkF0dGFjaCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGF0dGFjaG1lbnQgPT09IEdMX0RFUFRIX0FUVEFDSE1FTlQgfHwgYXR0YWNobWVudCA9PT0gZ2xlbnVtLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkge1xyXG4gICAgICAgICAgICB2YXIgZXh0ZW5zaW9uID0gcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oJ1dFQkdMX2RlcHRoX3RleHR1cmUnKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghZXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdEZXB0aCB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXInKTtcclxuICAgICAgICAgICAgICAgIGNhbkF0dGFjaCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlLmZvcm1hdCAhPT0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVFxyXG4gICAgICAgICAgICAgICAgJiYgdGV4dHVyZS5mb3JtYXQgIT09IGdsZW51bS5ERVBUSF9TVEVOQ0lMXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVGhlIHRleHR1cmUgYXR0YWNoZWQgdG8gZGVwdGggYnVmZmVyIGlzIG5vdCBhIHZhbGlkLicpO1xyXG4gICAgICAgICAgICAgICAgY2FuQXR0YWNoID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIERpc3Bvc2UgcmVuZGVyIGJ1ZmZlciBjcmVhdGVkIHByZXZpb3VzXHJcbiAgICAgICAgICAgIGlmIChjYW5BdHRhY2gpIHtcclxuICAgICAgICAgICAgICAgIHZhciByZW5kZXJidWZmZXIgPSB0aGlzLl9jYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUik7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9ERVBUSF9BVFRBQ0hNRU5ULCBHTF9SRU5ERVJCVUZGRVIsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9nbC5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUiwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSX0FUVEFDSEVELCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5wdXQoS0VZX0RFUFRIVEVYVFVSRV9BVFRBQ0hFRCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1pcG1hcCBsZXZlbCBjYW4gb25seSBiZSAwXHJcbiAgICAgICAgX2dsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBhdHRhY2htZW50LCB0YXJnZXQsIHdlYmdsVGV4dHVyZSwgMCk7XHJcblxyXG4gICAgICAgIGlmICghYXR0YWNoZWRUZXh0dXJlcykge1xyXG4gICAgICAgICAgICBhdHRhY2hlZFRleHR1cmVzID0ge307XHJcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlLnB1dCgnYXR0YWNoZWRfdGV4dHVyZXMnLCBhdHRhY2hlZFRleHR1cmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSA9IGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0gfHwge307XHJcbiAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XS50ZXh0dXJlID0gdGV4dHVyZTtcclxuICAgICAgICBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdLnRhcmdldCA9IHRhcmdldDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNhbkF0dGFjaDtcclxuICAgIH0sXHJcblxyXG4gICAgX2RvRGV0YWNoOiBmdW5jdGlvbiAoX2dsLCBhdHRhY2htZW50LCB0YXJnZXQpIHtcclxuICAgICAgICAvLyBEZXRhY2ggYSB0ZXh0dXJlIGZyb20gZnJhbWVidWZmZXJcclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL1dlYkdML2Jsb2IvbWFzdGVyL2NvbmZvcm1hbmNlLXN1aXRlcy8xLjAuMC9jb25mb3JtYW5jZS9mcmFtZWJ1ZmZlci10ZXN0Lmh0bWwjTDE0NVxyXG4gICAgICAgIF9nbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgYXR0YWNobWVudCwgdGFyZ2V0LCBudWxsLCAwKTtcclxuXHJcbiAgICAgICAgLy8gQXNzdW1lIGNhY2hlIGhhcyBiZWVuIHVzZWQuXHJcbiAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXMgPSB0aGlzLl9jYWNoZS5nZXQoJ2F0dGFjaGVkX3RleHR1cmVzJyk7XHJcbiAgICAgICAgaWYgKGF0dGFjaGVkVGV4dHVyZXMgJiYgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSkge1xyXG4gICAgICAgICAgICBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhdHRhY2htZW50ID09PSBHTF9ERVBUSF9BVFRBQ0hNRU5UIHx8IGF0dGFjaG1lbnQgPT09IGdsZW51bS5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FjaGUucHV0KEtFWV9ERVBUSFRFWFRVUkVfQVRUQUNIRUQsIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0YWNoIGEgdGV4dHVyZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbYXR0YWNobWVudD1nbC5DT0xPUl9BVFRBQ0hNRU5UMF1cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW3RhcmdldD1nbC5URVhUVVJFXzJEXVxyXG4gICAgICovXHJcbiAgICBkZXRhY2g6IGZ1bmN0aW9uIChhdHRhY2htZW50LCB0YXJnZXQpIHtcclxuICAgICAgICAvLyBUT0RPIGRlcHRoIGV4dGVuc2lvbiBjaGVjayA/XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF0gPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLl9ib3VuZFJlbmRlcmVyKSB7XHJcbiAgICAgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG4gICAgICAgICAgICBjYWNoZS51c2UodGhpcy5fYm91bmRSZW5kZXJlci5fX3VpZF9fKTtcclxuICAgICAgICAgICAgdGhpcy5fZG9EZXRhY2godGhpcy5fYm91bmRSZW5kZXJlci5nbCwgYXR0YWNobWVudCwgdGFyZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlXHJcbiAgICAgKiBAcGFyYW0gIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IF9nbFxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG5cclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJCdWZmZXIgPSBjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUik7XHJcbiAgICAgICAgaWYgKHJlbmRlckJ1ZmZlcikge1xyXG4gICAgICAgICAgICBfZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlckJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBmcmFtZUJ1ZmZlciA9IGNhY2hlLmdldChLRVlfRlJBTUVCVUZGRVIpO1xyXG4gICAgICAgIGlmIChmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgICAgICBfZ2wuZGVsZXRlRnJhbWVidWZmZXIoZnJhbWVCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYWNoZS5kZWxldGVDb250ZXh0KHJlbmRlcmVyLl9fdWlkX18pO1xyXG5cclxuICAgICAgICAvLyBDbGVhciBjYWNoZSBmb3IgcmV1c2luZ1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmVzID0ge307XHJcblxyXG4gICAgfVxyXG59KTtcclxuXHJcbkZyYW1lQnVmZmVyLkRFUFRIX0FUVEFDSE1FTlQgPSBHTF9ERVBUSF9BVFRBQ0hNRU5UO1xyXG5GcmFtZUJ1ZmZlci5DT0xPUl9BVFRBQ0hNRU5UMCA9IEdMX0NPTE9SX0FUVEFDSE1FTlQwO1xyXG5GcmFtZUJ1ZmZlci5TVEVOQ0lMX0FUVEFDSE1FTlQgPSBnbGVudW0uU1RFTkNJTF9BVFRBQ0hNRU5UO1xyXG5GcmFtZUJ1ZmZlci5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgPSBnbGVudW0uREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRnJhbWVCdWZmZXI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2X1RleGNvb3JkID0gdGV4Y29vcmQ7XFxuIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxufVxcbkBlbmRcIjtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IE9ydGhvQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9PcnRob2dyYXBoaWMnO1xyXG5pbXBvcnQgUGxhbmUgZnJvbSAnLi4vZ2VvbWV0cnkvUGxhbmUnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBNZXNoIGZyb20gJy4uL01lc2gnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IHZlcnRleEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3ZlcnRleC5nbHNsLmpzJztcclxuXHJcblNoYWRlclsnaW1wb3J0J10odmVydGV4R2xzbCk7XHJcblxyXG52YXIgcGxhbmVHZW8gPSBuZXcgUGxhbmUoKTtcclxudmFyIG1lc2ggPSBuZXcgTWVzaCh7XHJcbiAgICBnZW9tZXRyeTogcGxhbmVHZW8sXHJcbiAgICBmcnVzdHVtQ3VsbGluZzogZmFsc2VcclxufSk7XHJcbnZhciBjYW1lcmEgPSBuZXcgT3J0aG9DYW1lcmEoKTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLlBhc3NcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBQYXNzID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLlBhc3MjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGcmFnbWVudCBzaGFkZXIgc3RyaW5nXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBQRU5ESU5HIHNoYWRlciBvciBmcmFnbWVudCA/XHJcbiAgICAgICAgZnJhZ21lbnQ6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG91dHB1dHM6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lk1hdGVyaWFsfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1hdGVyaWFsOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBibGVuZFdpdGhQcmV2aW91czogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtCb29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNsZWFyQ29sb3I6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGVhckRlcHRoOiB0cnVlXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICB2YXIgc2hhZGVyID0gbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IudmVydGV4JyksIHRoaXMuZnJhZ21lbnQpO1xyXG4gICAgdmFyIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICBzaGFkZXI6IHNoYWRlclxyXG4gICAgfSk7XHJcbiAgICBtYXRlcmlhbC5lbmFibGVUZXh0dXJlc0FsbCgpO1xyXG5cclxuICAgIHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbDtcclxuXHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLlBhc3MucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSB7fSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBzZXRVbmlmb3JtOiBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwuc2V0VW5pZm9ybShuYW1lLCB2YWx1ZSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge31cclxuICAgICAqL1xyXG4gICAgZ2V0VW5pZm9ybTogZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICAgIHZhciB1bmlmb3JtID0gdGhpcy5tYXRlcmlhbC51bmlmb3Jtc1tuYW1lXTtcclxuICAgICAgICBpZiAodW5pZm9ybSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5pZm9ybS52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmV9IHRleHR1cmVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gYXR0YWNobWVudFxyXG4gICAgICovXHJcbiAgICBhdHRhY2hPdXRwdXQ6IGZ1bmN0aW9uKHRleHR1cmUsIGF0dGFjaG1lbnQpIHtcclxuICAgICAgICBpZiAoIXRoaXMub3V0cHV0cykge1xyXG4gICAgICAgICAgICB0aGlzLm91dHB1dHMgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXR0YWNobWVudCA9IGF0dGFjaG1lbnQgfHwgZ2xlbnVtLkNPTE9SX0FUVEFDSE1FTlQwO1xyXG4gICAgICAgIHRoaXMub3V0cHV0c1thdHRhY2htZW50XSA9IHRleHR1cmU7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmV9IHRleHR1cmVcclxuICAgICAqL1xyXG4gICAgZGV0YWNoT3V0cHV0OiBmdW5jdGlvbih0ZXh0dXJlKSB7XHJcbiAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0c1thdHRhY2htZW50XSA9PT0gdGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRzW2F0dGFjaG1lbnRdID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYmluZDogZnVuY3Rpb24ocmVuZGVyZXIsIGZyYW1lQnVmZmVyKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5vdXRwdXRzW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBmcmFtZUJ1ZmZlci5hdHRhY2godGV4dHVyZSwgYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHVuYmluZDogZnVuY3Rpb24ocmVuZGVyZXIsIGZyYW1lQnVmZmVyKSB7XHJcbiAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkZyYW1lQnVmZmVyfSBbZnJhbWVCdWZmZXJdXHJcbiAgICAgKi9cclxuICAgIHJlbmRlcjogZnVuY3Rpb24ocmVuZGVyZXIsIGZyYW1lQnVmZmVyKSB7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgaWYgKGZyYW1lQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmluZChyZW5kZXJlciwgZnJhbWVCdWZmZXIpO1xyXG4gICAgICAgICAgICAvLyBNUlQgU3VwcG9ydCBpbiBjaHJvbWVcclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc2RrL3Rlc3RzL2NvbmZvcm1hbmNlL2V4dGVuc2lvbnMvZXh0LWRyYXctYnVmZmVycy5odG1sXHJcbiAgICAgICAgICAgIHZhciBleHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX2RyYXdfYnVmZmVycycpO1xyXG4gICAgICAgICAgICBpZiAoZXh0ICYmIHRoaXMub3V0cHV0cykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ1ZnMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9ICthdHRhY2htZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50ID49IF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCAmJiBhdHRhY2htZW50IDw9IF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCArIDgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnVmcy5wdXNoKGF0dGFjaG1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGV4dC5kcmF3QnVmZmVyc0VYVChidWZzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXInLCB0aGlzLCByZW5kZXJlcik7XHJcblxyXG4gICAgICAgIC8vIEZJWE1FIERvbid0IGNsZWFyIGluIGVhY2ggcGFzcyBpbiBkZWZhdWx0LCBsZXQgdGhlIGNvbG9yIG92ZXJ3cml0ZSB0aGUgYnVmZmVyXHJcbiAgICAgICAgLy8gRklYTUUgcGl4ZWxzIG1heSBiZSBkaXNjYXJkXHJcbiAgICAgICAgdmFyIGNsZWFyQml0ID0gdGhpcy5jbGVhckRlcHRoID8gX2dsLkRFUFRIX0JVRkZFUl9CSVQgOiAwO1xyXG4gICAgICAgIF9nbC5kZXB0aE1hc2sodHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJDb2xvcikge1xyXG4gICAgICAgICAgICBjbGVhckJpdCA9IGNsZWFyQml0IHwgX2dsLkNPTE9SX0JVRkZFUl9CSVQ7XHJcbiAgICAgICAgICAgIF9nbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHZhciBjYyA9IHRoaXMuY2xlYXJDb2xvcjtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2MpKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuY2xlYXJDb2xvcihjY1swXSwgY2NbMV0sIGNjWzJdLCBjY1szXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgX2dsLmNsZWFyKGNsZWFyQml0KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYmxlbmRXaXRoUHJldmlvdXMpIHtcclxuICAgICAgICAgICAgLy8gQmxlbmQgd2l0aCBwcmV2aW91cyByZW5kZXJlZCBzY2VuZSBpbiB0aGUgZmluYWwgb3V0cHV0XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIENvbmZpZ3VyZSBibGVuZC5cclxuICAgICAgICAgICAgLy8gRklYTUUgSXQgd2lsbCBjYXVzZSBzY3JlZW4gYmxpbmvvvJ9cclxuICAgICAgICAgICAgX2dsLmVuYWJsZShfZ2wuQkxFTkQpO1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIF9nbC5kaXNhYmxlKF9nbC5CTEVORCk7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudHJhbnNwYXJlbnQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyUXVhZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJyZW5kZXInLCB0aGlzLCByZW5kZXJlcik7XHJcblxyXG4gICAgICAgIGlmIChmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgICAgICB0aGlzLnVuYmluZChyZW5kZXJlciwgZnJhbWVCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaW1wbHkgZG8gcXVhZCByZW5kZXJpbmdcclxuICAgICAqL1xyXG4gICAgcmVuZGVyUXVhZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgbWVzaC5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XHJcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhbbWVzaF0sIGNhbWVyYSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7fVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBhc3M7XHJcbiIsIi8vIFRPRE8gU2hvdWxkIG5vdCBkZXJpdmVkIGZyb20gbWVzaD9cclxuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XHJcbmltcG9ydCBDdWJlR2VvbWV0cnkgZnJvbSAnLi4vZ2VvbWV0cnkvQ3ViZSc7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XHJcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tICcuLi9jYW1lcmEvUGVyc3BlY3RpdmUnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5cclxuaW1wb3J0IHNreWJveEVzc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9za3lib3guZ2xzbC5qcyc7XHJcblNoYWRlci5pbXBvcnQoc2t5Ym94RXNzbCk7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wbHVnaW4uU2t5Ym94XHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICB2YXIgc2t5VGV4ID0gbmV3IGNsYXkuVGV4dHVyZUN1YmUoKTtcclxuICogICAgIHNreVRleC5sb2FkKHtcclxuICogICAgICAgICAncHgnOiAnYXNzZXRzL3RleHR1cmVzL3NreS9weC5qcGcnLFxyXG4gKiAgICAgICAgICdueCc6ICdhc3NldHMvdGV4dHVyZXMvc2t5L254LmpwZydcclxuICogICAgICAgICAncHknOiAnYXNzZXRzL3RleHR1cmVzL3NreS9weS5qcGcnXHJcbiAqICAgICAgICAgJ255JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvbnkuanBnJ1xyXG4gKiAgICAgICAgICdweic6ICdhc3NldHMvdGV4dHVyZXMvc2t5L3B6LmpwZydcclxuICogICAgICAgICAnbnonOiAnYXNzZXRzL3RleHR1cmVzL3NreS9uei5qcGcnXHJcbiAqICAgICB9KTtcclxuICogICAgIHZhciBza3lib3ggPSBuZXcgY2xheS5wbHVnaW4uU2t5Ym94KHtcclxuICogICAgICAgICBzY2VuZTogc2NlbmVcclxuICogICAgIH0pO1xyXG4gKiAgICAgc2t5Ym94Lm1hdGVyaWFsLnNldCgnZW52aXJvbm1lbnRNYXAnLCBza3lUZXgpO1xyXG4gKi9cclxudmFyIFNreWJveCA9IE1lc2guZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgc2t5Ym94U2hhZGVyID0gbmV3IFNoYWRlcih7XHJcbiAgICAgICAgdmVydGV4OiBTaGFkZXIuc291cmNlKCdjbGF5LnNreWJveC52ZXJ0ZXgnKSxcclxuICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5za3lib3guZnJhZ21lbnQnKVxyXG4gICAgfSk7XHJcbiAgICB2YXIgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgIHNoYWRlcjogc2t5Ym94U2hhZGVyLFxyXG4gICAgICAgIGRlcHRoTWFzazogZmFsc2VcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuU2NlbmV9XHJcbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucGx1Z2luLlNreWJveC5wcm90b3R5cGVcclxuICAgICAgICAgKi9cclxuICAgICAgICBzY2VuZTogbnVsbCxcclxuXHJcbiAgICAgICAgZ2VvbWV0cnk6IG5ldyBDdWJlR2VvbWV0cnkoKSxcclxuXHJcbiAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxyXG5cclxuICAgICAgICBlbnZpcm9ubWVudE1hcDogbnVsbCxcclxuXHJcbiAgICAgICAgY3VsbGluZzogZmFsc2UsXHJcblxyXG4gICAgICAgIF9kdW1teUNhbWVyYTogbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKClcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7XHJcbiAgICBpZiAoc2NlbmUpIHtcclxuICAgICAgICB0aGlzLmF0dGFjaFNjZW5lKHNjZW5lKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmVudmlyb25tZW50TWFwKSB7XHJcbiAgICAgICAgdGhpcy5zZXRFbnZpcm9ubWVudE1hcCh0aGlzLmVudmlyb25tZW50TWFwKTtcclxuICAgIH1cclxufSwgLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5Ta3lib3gjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogQXR0YWNoIHRoZSBza3lib3ggdG8gdGhlIHNjZW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlNjZW5lfSBzY2VuZVxyXG4gICAgICovXHJcbiAgICBhdHRhY2hTY2VuZTogZnVuY3Rpb24gKHNjZW5lKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5kZXRhY2hTY2VuZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY2VuZS5za3lib3ggPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7XHJcbiAgICAgICAgc2NlbmUub24oJ2JlZm9yZXJlbmRlcicsIHRoaXMuX2JlZm9yZVJlbmRlclNjZW5lLCB0aGlzKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERldGFjaCBmcm9tIHNjZW5lXHJcbiAgICAgKi9cclxuICAgIGRldGFjaFNjZW5lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5vZmYoJ2JlZm9yZXJlbmRlcicsIHRoaXMuX2JlZm9yZVJlbmRlclNjZW5lKTtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5za3lib3ggPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNjZW5lID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIHNreWJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5kZXRhY2hTY2VuZSgpO1xyXG4gICAgICAgIHRoaXMuZ2VvbWV0cnkuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZW52aXJvbm1lbnQgbWFwXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVGV4dHVyZUN1YmV9IGVudk1hcFxyXG4gICAgICovXHJcbiAgICBzZXRFbnZpcm9ubWVudE1hcDogZnVuY3Rpb24gKGVudk1hcCkge1xyXG4gICAgICAgIGlmIChlbnZNYXAudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlMkQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwuZGVmaW5lKCdFUVVJUkVDVEFOR1VMQVInKTtcclxuICAgICAgICAgICAgLy8gTElORUFSIGZpbHRlciBjYW4gcmVtb3ZlIHRoZSBhcnRpZmFjdHMgaW4gcG9sZVxyXG4gICAgICAgICAgICBlbnZNYXAubWluRmlsdGVyID0gVGV4dHVyZS5MSU5FQVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnVuZGVmaW5lKCdFUVVJUkVDVEFOR1VMQVInKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbC5zZXQoJ2Vudmlyb25tZW50TWFwJywgZW52TWFwKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBlbnZpcm9ubWVudCBtYXBcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZUN1YmV9XHJcbiAgICAgKi9cclxuICAgIGdldEVudmlyb25tZW50TWFwOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0ZXJpYWwuZ2V0KCdlbnZpcm9ubWVudE1hcCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfYmVmb3JlUmVuZGVyU2NlbmU6IGZ1bmN0aW9uKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJTa3lib3gocmVuZGVyZXIsIGNhbWVyYSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbmRlclNreWJveDogZnVuY3Rpb24gKHJlbmRlcmVyLCBjYW1lcmEpIHtcclxuICAgICAgICB2YXIgZHVtbXlDYW1lcmEgPSB0aGlzLl9kdW1teUNhbWVyYTtcclxuICAgICAgICBkdW1teUNhbWVyYS5hc3BlY3QgPSByZW5kZXJlci5nZXRWaWV3cG9ydEFzcGVjdCgpO1xyXG4gICAgICAgIGR1bW15Q2FtZXJhLmZvdiA9IGNhbWVyYS5mb3YgfHwgNTA7XHJcbiAgICAgICAgZHVtbXlDYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KGR1bW15Q2FtZXJhLmludlByb2plY3Rpb25NYXRyaXgsIGR1bW15Q2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xyXG4gICAgICAgIGR1bW15Q2FtZXJhLndvcmxkVHJhbnNmb3JtLmNvcHkoY2FtZXJhLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICBkdW1teUNhbWVyYS52aWV3TWF0cml4LmNvcHkoY2FtZXJhLnZpZXdNYXRyaXgpO1xyXG5cclxuICAgICAgICB0aGlzLnBvc2l0aW9uLmNvcHkoY2FtZXJhLmdldFdvcmxkUG9zaXRpb24oKSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgLy8gRG9uJ3QgcmVtZW1iZXIgdG8gZGlzYWJsZSBibGVuZFxyXG4gICAgICAgIHJlbmRlcmVyLmdsLmRpc2FibGUocmVuZGVyZXIuZ2wuQkxFTkQpO1xyXG4gICAgICAgIGlmICh0aGlzLm1hdGVyaWFsLmdldCgnbG9kJykgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdMT0QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ0xPRCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKFt0aGlzXSwgZHVtbXlDYW1lcmEpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNreWJveDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcblxyXG52YXIgdGFyZ2V0cyA9IFsncHgnLCAnbngnLCAncHknLCAnbnknLCAncHonLCAnbnonXTtcclxuXHJcbi8qKlxyXG4gKiBQYXNzIHJlbmRlcmluZyBzY2VuZSB0byBhIGVudmlyb25tZW50IGN1YmUgbWFwXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXBcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICogQGV4YW1wbGVcclxuICogICAgIC8vIEV4YW1wbGUgb2YgY2FyIHJlZmxlY3Rpb25cclxuICogICAgIHZhciBlbnZNYXAgPSBuZXcgY2xheS5UZXh0dXJlQ3ViZSh7XHJcbiAqICAgICAgICAgd2lkdGg6IDI1NixcclxuICogICAgICAgICBoZWlnaHQ6IDI1NlxyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgZW52UGFzcyA9IG5ldyBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAoe1xyXG4gKiAgICAgICAgIHBvc2l0aW9uOiBjYXIucG9zaXRpb24sXHJcbiAqICAgICAgICAgdGV4dHVyZTogZW52TWFwXHJcbiAqICAgICB9KTtcclxuICogICAgIHZhciBjYXJCb2R5ID0gY2FyLmdldENoaWxkQnlOYW1lKCdib2R5Jyk7XHJcbiAqICAgICBjYXJCb2R5Lm1hdGVyaWFsLmVuYWJsZVRleHR1cmUoJ2Vudmlyb25tZW50TWFwJyk7XHJcbiAqICAgICBjYXJCb2R5Lm1hdGVyaWFsLnNldCgnZW52aXJvbm1lbnRNYXAnLCBlbnZNYXApO1xyXG4gKiAgICAgLi4uXHJcbiAqICAgICBhbmltYXRpb24ub24oJ2ZyYW1lJywgZnVuY3Rpb24oZnJhbWVUaW1lKSB7XHJcbiAqICAgICAgICAgZW52UGFzcy5yZW5kZXIocmVuZGVyZXIsIHNjZW5lKTtcclxuICogICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAqICAgICB9KTtcclxuICovXHJcbnZhciBFbnZpcm9ubWVudE1hcFBhc3MgPSBCYXNlLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHZhciByZXQgPSAvKiogQGxlbmRzIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbWVyYSBwb3NpdGlvblxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCNcclxuICAgICAgICAgKi9cclxuICAgICAgICBwb3NpdGlvbjogbmV3IFZlY3RvcjMoKSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW1lcmEgZmFyIHBsYW5lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAbWVtYmVyT2YgY2xheS5wcmVQYXNzLkVudmlyb25tZW50TWFwI1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZhcjogMTAwMCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW1lcmEgbmVhciBwbGFuZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCNcclxuICAgICAgICAgKi9cclxuICAgICAgICBuZWFyOiAwLjEsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRW52aXJvbm1lbnQgY3ViZSBtYXBcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlQ3ViZX1cclxuICAgICAgICAgKiBAbWVtYmVyT2YgY2xheS5wcmVQYXNzLkVudmlyb25tZW50TWFwI1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRleHR1cmU6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFVzZWQgaWYgeW91IHdhbid0IGhhdmUgc2hhZG93IGluIGVudmlyb25tZW50IG1hcFxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LnByZVBhc3MuU2hhZG93TWFwfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNoYWRvd01hcFBhc3M6IG51bGwsXHJcbiAgICB9O1xyXG4gICAgdmFyIGNhbWVyYXMgPSByZXQuX2NhbWVyYXMgPSB7XHJcbiAgICAgICAgcHg6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXHJcbiAgICAgICAgbng6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXHJcbiAgICAgICAgcHk6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXHJcbiAgICAgICAgbnk6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXHJcbiAgICAgICAgcHo6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSksXHJcbiAgICAgICAgbno6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7IGZvdjogOTAgfSlcclxuICAgIH07XHJcbiAgICBjYW1lcmFzLnB4Lmxvb2tBdChWZWN0b3IzLlBPU0lUSVZFX1gsIFZlY3RvcjMuTkVHQVRJVkVfWSk7XHJcbiAgICBjYW1lcmFzLm54Lmxvb2tBdChWZWN0b3IzLk5FR0FUSVZFX1gsIFZlY3RvcjMuTkVHQVRJVkVfWSk7XHJcbiAgICBjYW1lcmFzLnB5Lmxvb2tBdChWZWN0b3IzLlBPU0lUSVZFX1ksIFZlY3RvcjMuUE9TSVRJVkVfWik7XHJcbiAgICBjYW1lcmFzLm55Lmxvb2tBdChWZWN0b3IzLk5FR0FUSVZFX1ksIFZlY3RvcjMuTkVHQVRJVkVfWik7XHJcbiAgICBjYW1lcmFzLnB6Lmxvb2tBdChWZWN0b3IzLlBPU0lUSVZFX1osIFZlY3RvcjMuTkVHQVRJVkVfWSk7XHJcbiAgICBjYW1lcmFzLm56Lmxvb2tBdChWZWN0b3IzLk5FR0FUSVZFX1osIFZlY3RvcjMuTkVHQVRJVkVfWSk7XHJcblxyXG4gICAgLy8gRklYTUUgSW4gd2luZG93cywgdXNlIG9uZSBmcmFtZWJ1ZmZlciBvbmx5IHJlbmRlcnMgb25lIHNpZGUgb2YgY3ViZW1hcFxyXG4gICAgcmV0Ll9mcmFtZUJ1ZmZlciA9IG5ldyBGcmFtZUJ1ZmZlcigpO1xyXG5cclxuICAgIHJldHVybiByZXQ7XHJcbn0sICAvKiogQGxlbmRzIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHRhcmdldFxyXG4gICAgICogQHJldHVybiAge2NsYXkuQ2FtZXJhfVxyXG4gICAgICovXHJcbiAgICBnZXRDYW1lcmE6IGZ1bmN0aW9uICh0YXJnZXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2FtZXJhc1t0YXJnZXRdO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuU2NlbmV9IHNjZW5lXHJcbiAgICAgKiBAcGFyYW0gIHtib29sZWFufSBbbm90VXBkYXRlU2NlbmU9ZmFsc2VdXHJcbiAgICAgKi9cclxuICAgIHJlbmRlcjogZnVuY3Rpb24ocmVuZGVyZXIsIHNjZW5lLCBub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBpZiAoIW5vdFVwZGF0ZVNjZW5lKSB7XHJcbiAgICAgICAgICAgIHNjZW5lLnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUd2VhayBmb3ZcclxuICAgICAgICAvLyBodHRwOi8vdGhlLXdpdG5lc3MubmV0L25ld3MvMjAxMi8wMi9zZWFtbGVzcy1jdWJlLW1hcC1maWx0ZXJpbmcvXHJcbiAgICAgICAgdmFyIG4gPSB0aGlzLnRleHR1cmUud2lkdGg7XHJcbiAgICAgICAgdmFyIGZvdiA9IDIgKiBNYXRoLmF0YW4obiAvIChuIC0gMC41KSkgLyBNYXRoLlBJICogMTgwO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGFyZ2V0c1tpXTtcclxuICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuX2NhbWVyYXNbdGFyZ2V0XTtcclxuICAgICAgICAgICAgVmVjdG9yMy5jb3B5KGNhbWVyYS5wb3NpdGlvbiwgdGhpcy5wb3NpdGlvbik7XHJcblxyXG4gICAgICAgICAgICBjYW1lcmEuZmFyID0gdGhpcy5mYXI7XHJcbiAgICAgICAgICAgIGNhbWVyYS5uZWFyID0gdGhpcy5uZWFyO1xyXG4gICAgICAgICAgICBjYW1lcmEuZm92ID0gZm92O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hhZG93TWFwUGFzcykge1xyXG4gICAgICAgICAgICAgICAgY2FtZXJhLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBib3VuZGluZ0JveExhc3RGcmFtZVxyXG4gICAgICAgICAgICAgICAgdmFyIGJib3ggPSBzY2VuZS5nZXRCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgICAgICAgICAgYmJveC5hcHBseVRyYW5zZm9ybShjYW1lcmEudmlld01hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICBzY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUuY29weShiYm94KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYWRvd01hcFBhc3MucmVuZGVyKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5hdHRhY2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRleHR1cmUsIF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCxcclxuICAgICAgICAgICAgICAgIF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBFbnZpcm9ubWVudE1hcFBhc3M7XHJcbiIsImltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XHJcblxyXG4vLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2JiOTQzOTkxKHY9dnMuODUpLmFzcHhcclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3Rvamkvd2ViZ2wtdGV4dHVyZS11dGlscy9ibG9iL21hc3Rlci90ZXh0dXJlLXV0aWwvZGRzLmpzXHJcbnZhciBERFNfTUFHSUMgPSAweDIwNTM0NDQ0O1xyXG5cclxudmFyIEREU0RfQ0FQUyA9IDB4MTtcclxudmFyIEREU0RfSEVJR0hUID0gMHgyO1xyXG52YXIgRERTRF9XSURUSCA9IDB4NDtcclxudmFyIEREU0RfUElUQ0ggPSAweDg7XHJcbnZhciBERFNEX1BJWEVMRk9STUFUID0gMHgxMDAwO1xyXG52YXIgRERTRF9NSVBNQVBDT1VOVCA9IDB4MjAwMDA7XHJcbnZhciBERFNEX0xJTkVBUlNJWkUgPSAweDgwMDAwO1xyXG52YXIgRERTRF9ERVBUSCA9IDB4ODAwMDAwO1xyXG5cclxudmFyIEREU0NBUFNfQ09NUExFWCA9IDB4ODtcclxudmFyIEREU0NBUFNfTUlQTUFQID0gMHg0MDAwMDA7XHJcbnZhciBERFNDQVBTX1RFWFRVUkUgPSAweDEwMDA7XHJcblxyXG52YXIgRERTQ0FQUzJfQ1VCRU1BUCA9IDB4MjAwO1xyXG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9QT1NJVElWRVggPSAweDQwMDtcclxudmFyIEREU0NBUFMyX0NVQkVNQVBfTkVHQVRJVkVYID0gMHg4MDA7XHJcbnZhciBERFNDQVBTMl9DVUJFTUFQX1BPU0lUSVZFWSA9IDB4MTAwMDtcclxudmFyIEREU0NBUFMyX0NVQkVNQVBfTkVHQVRJVkVZID0gMHgyMDAwO1xyXG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9QT1NJVElWRVogPSAweDQwMDA7XHJcbnZhciBERFNDQVBTMl9DVUJFTUFQX05FR0FUSVZFWiA9IDB4ODAwMDtcclxudmFyIEREU0NBUFMyX1ZPTFVNRSA9IDB4MjAwMDAwO1xyXG5cclxudmFyIEREUEZfQUxQSEFQSVhFTFMgPSAweDE7XHJcbnZhciBERFBGX0FMUEhBID0gMHgyO1xyXG52YXIgRERQRl9GT1VSQ0MgPSAweDQ7XHJcbnZhciBERFBGX1JHQiA9IDB4NDA7XHJcbnZhciBERFBGX1lVViA9IDB4MjAwO1xyXG52YXIgRERQRl9MVU1JTkFOQ0UgPSAweDIwMDAwO1xyXG5cclxuZnVuY3Rpb24gZm91ckNDVG9JbnQzMih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlLmNoYXJDb2RlQXQoMCkgK1xyXG4gICAgICAgICh2YWx1ZS5jaGFyQ29kZUF0KDEpIDw8IDgpICtcclxuICAgICAgICAodmFsdWUuY2hhckNvZGVBdCgyKSA8PCAxNikgK1xyXG4gICAgICAgICh2YWx1ZS5jaGFyQ29kZUF0KDMpIDw8IDI0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW50MzJUb0ZvdXJDQyh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoXHJcbiAgICAgICAgdmFsdWUgJiAweGZmLFxyXG4gICAgICAgICh2YWx1ZSA+PiA4KSAmIDB4ZmYsXHJcbiAgICAgICAgKHZhbHVlID4+IDE2KSAmIDB4ZmYsXHJcbiAgICAgICAgKHZhbHVlID4+IDI0KSAmIDB4ZmZcclxuICAgICk7XHJcbn1cclxuXHJcbnZhciBoZWFkZXJMZW5ndGhJbnQgPSAzMTsgLy8gVGhlIGhlYWRlciBsZW5ndGggaW4gMzIgYml0IGludHNcclxuXHJcbnZhciBGT1VSQ0NfRFhUMSA9IGZvdXJDQ1RvSW50MzIoJ0RYVDEnKTtcclxudmFyIEZPVVJDQ19EWFQzID0gZm91ckNDVG9JbnQzMignRFhUMycpO1xyXG52YXIgRk9VUkNDX0RYVDUgPSBmb3VyQ0NUb0ludDMyKCdEWFQ1Jyk7XHJcbi8vIE9mZnNldHMgaW50byB0aGUgaGVhZGVyIGFycmF5XHJcbnZhciBvZmZfbWFnaWMgPSAwO1xyXG5cclxudmFyIG9mZl9zaXplID0gMTtcclxudmFyIG9mZl9mbGFncyA9IDI7XHJcbnZhciBvZmZfaGVpZ2h0ID0gMztcclxudmFyIG9mZl93aWR0aCA9IDQ7XHJcblxyXG52YXIgb2ZmX21pcG1hcENvdW50ID0gNztcclxuXHJcbnZhciBvZmZfcGZGbGFncyA9IDIwO1xyXG52YXIgb2ZmX3BmRm91ckNDID0gMjE7XHJcblxyXG52YXIgb2ZmX2NhcHMgPSAyNztcclxudmFyIG9mZl9jYXBzMiA9IDI4O1xyXG52YXIgb2ZmX2NhcHMzID0gMjk7XHJcbnZhciBvZmZfY2FwczQgPSAzMDtcclxuXHJcbnZhciByZXQgPSB7XHJcbiAgICBwYXJzZTogZnVuY3Rpb24oYXJyYXlCdWZmZXIsIG91dCkge1xyXG4gICAgICAgIHZhciBoZWFkZXIgPSBuZXcgSW50MzJBcnJheShhcnJheUJ1ZmZlciwgMCwgaGVhZGVyTGVuZ3RoSW50KTtcclxuICAgICAgICBpZiAoaGVhZGVyW29mZl9tYWdpY10gIT09IEREU19NQUdJQykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFoZWFkZXIob2ZmX3BmRmxhZ3MpICYgRERQRl9GT1VSQ0MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZm91ckNDID0gaGVhZGVyKG9mZl9wZkZvdXJDQyk7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gaGVhZGVyW29mZl93aWR0aF07XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IGhlYWRlcltvZmZfaGVpZ2h0XTtcclxuICAgICAgICB2YXIgaXNDdWJlTWFwID0gaGVhZGVyW29mZl9jYXBzMl0gJiBERFNDQVBTMl9DVUJFTUFQO1xyXG4gICAgICAgIHZhciBoYXNNaXBtYXAgPSBoZWFkZXJbb2ZmX2ZsYWdzXSAmIEREU0RfTUlQTUFQQ09VTlQ7XHJcbiAgICAgICAgdmFyIGJsb2NrQnl0ZXMsIGludGVybmFsRm9ybWF0O1xyXG4gICAgICAgIHN3aXRjaChmb3VyQ0MpIHtcclxuICAgICAgICAgICAgY2FzZSBGT1VSQ0NfRFhUMTpcclxuICAgICAgICAgICAgICAgIGJsb2NrQnl0ZXMgPSA4O1xyXG4gICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSBUZXh0dXJlLkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBGT1VSQ0NfRFhUMzpcclxuICAgICAgICAgICAgICAgIGJsb2NrQnl0ZXMgPSAxNjtcclxuICAgICAgICAgICAgICAgIGludGVybmFsRm9ybWF0ID0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEZPVVJDQ19EWFQ1OlxyXG4gICAgICAgICAgICAgICAgYmxvY2tCeXRlcyA9IDE2O1xyXG4gICAgICAgICAgICAgICAgaW50ZXJuYWxGb3JtYXQgPSBUZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRhdGFPZmZzZXQgPSBoZWFkZXJbb2ZmX3NpemVdICsgNDtcclxuICAgICAgICAvLyBUT0RPOiBTdXBwb3NlIGFsbCBmYWNlIGFyZSBleGlzdGVkXHJcbiAgICAgICAgdmFyIGZhY2VOdW1iZXIgPSBpc0N1YmVNYXAgPyA2IDogMTtcclxuICAgICAgICB2YXIgbWlwbWFwQ291bnQgPSAxO1xyXG4gICAgICAgIGlmIChoYXNNaXBtYXApIHtcclxuICAgICAgICAgICAgbWlwbWFwQ291bnQgPSBNYXRoLm1heCgxLCBoZWFkZXJbb2ZmX21pcG1hcENvdW50XSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZXMgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGZhY2VOdW1iZXI7IGYrKykge1xyXG4gICAgICAgICAgICB2YXIgX3dpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgICAgIHZhciBfaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgICAgICB0ZXh0dXJlc1tmXSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IF93aWR0aCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogX2hlaWdodCxcclxuICAgICAgICAgICAgICAgIGZvcm1hdDogaW50ZXJuYWxGb3JtYXRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHZhciBtaXBtYXBzID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWlwbWFwQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRhdGFMZW5ndGggPSBNYXRoLm1heCg0LCBfd2lkdGgpIC8gNCAqIE1hdGgubWF4KDQsIF9oZWlnaHQpIC8gNCAqIGJsb2NrQnl0ZXM7XHJcbiAgICAgICAgICAgICAgICB2YXIgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIsIGRhdGFPZmZzZXQsIGRhdGFMZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRhdGFPZmZzZXQgKz0gZGF0YUxlbmd0aDtcclxuICAgICAgICAgICAgICAgIF93aWR0aCAqPSAwLjU7XHJcbiAgICAgICAgICAgICAgICBfaGVpZ2h0ICo9IDAuNTtcclxuICAgICAgICAgICAgICAgIG1pcG1hcHNbaV0gPSBieXRlQXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGV4dHVyZXNbZl0ucGl4ZWxzID0gbWlwbWFwc1swXTtcclxuICAgICAgICAgICAgaWYgKGhhc01pcG1hcCkge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZXNbZl0ubWlwbWFwcyA9IG1pcG1hcHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIC8vIHJldHVybiBpc0N1YmVNYXAgPyB0ZXh0dXJlcyA6IHRleHR1cmVzWzBdO1xyXG4gICAgICAgIGlmIChvdXQpIHtcclxuICAgICAgICAgICAgb3V0LndpZHRoID0gdGV4dHVyZXNbMF0ud2lkdGg7XHJcbiAgICAgICAgICAgIG91dC5oZWlnaHQgPSB0ZXh0dXJlc1swXS5oZWlnaHQ7XHJcbiAgICAgICAgICAgIG91dC5mb3JtYXQgPSB0ZXh0dXJlc1swXS5mb3JtYXQ7XHJcbiAgICAgICAgICAgIG91dC5waXhlbHMgPSB0ZXh0dXJlc1swXS5waXhlbHM7XHJcbiAgICAgICAgICAgIG91dC5taXBtYXBzID0gdGV4dHVyZXNbMF0ubWlwbWFwcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlc1swXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCByZXQ7XHJcbiIsImltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbnZhciB0b0NoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xyXG5cclxudmFyIE1JTkVMRU4gPSA4O1xyXG52YXIgTUFYRUxFTiA9IDB4N2ZmZjtcclxuZnVuY3Rpb24gcmdiZTJmbG9hdChyZ2JlLCBidWZmZXIsIG9mZnNldCwgZXhwb3N1cmUpIHtcclxuICAgIGlmIChyZ2JlWzNdID4gMCkge1xyXG4gICAgICAgIHZhciBmID0gTWF0aC5wb3coMi4wLCByZ2JlWzNdIC0gMTI4IC0gOCArIGV4cG9zdXJlKTtcclxuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMF0gPSByZ2JlWzBdICogZjtcclxuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMV0gPSByZ2JlWzFdICogZjtcclxuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMl0gPSByZ2JlWzJdICogZjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGJ1ZmZlcltvZmZzZXQgKyAwXSA9IDA7XHJcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDFdID0gMDtcclxuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMl0gPSAwO1xyXG4gICAgfVxyXG4gICAgYnVmZmVyW29mZnNldCArIDNdID0gMS4wO1xyXG4gICAgcmV0dXJuIGJ1ZmZlcjtcclxufVxyXG5cclxuZnVuY3Rpb24gdWludDgyc3RyaW5nKGFycmF5LCBvZmZzZXQsIHNpemUpIHtcclxuICAgIHZhciBzdHIgPSAnJztcclxuICAgIGZvciAodmFyIGkgPSBvZmZzZXQ7IGkgPCBzaXplOyBpKyspIHtcclxuICAgICAgICBzdHIgKz0gdG9DaGFyKGFycmF5W2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvcHlyZ2JlKHMsIHQpIHtcclxuICAgIHRbMF0gPSBzWzBdO1xyXG4gICAgdFsxXSA9IHNbMV07XHJcbiAgICB0WzJdID0gc1syXTtcclxuICAgIHRbM10gPSBzWzNdO1xyXG59XHJcblxyXG4vLyBUT0RPIDogY2hlY2tcclxuZnVuY3Rpb24gb2xkUmVhZENvbG9ycyhzY2FuLCBidWZmZXIsIG9mZnNldCwgeG1heCkge1xyXG4gICAgdmFyIHJzaGlmdCA9IDAsIHggPSAwLCBsZW4gPSB4bWF4O1xyXG4gICAgd2hpbGUgKGxlbiA+IDApIHtcclxuICAgICAgICBzY2FuW3hdWzBdID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgICAgICBzY2FuW3hdWzFdID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgICAgICBzY2FuW3hdWzJdID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgICAgICBzY2FuW3hdWzNdID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgICAgICBpZiAoc2Nhblt4XVswXSA9PT0gMSAmJiBzY2FuW3hdWzFdID09PSAxICYmIHNjYW5beF1bMl0gPT09IDEpIHtcclxuICAgICAgICAgICAgLy8gZXhwIGlzIGNvdW50IG9mIHJlcGVhdGVkIHBpeGVsc1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gKHNjYW5beF1bM10gPDwgcnNoaWZ0KSA+Pj4gMDsgaSA+IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgY29weXJnYmUoc2Nhblt4LTFdLCBzY2FuW3hdKTtcclxuICAgICAgICAgICAgICAgIHgrKztcclxuICAgICAgICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJzaGlmdCArPSA4O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHgrKztcclxuICAgICAgICAgICAgbGVuLS07XHJcbiAgICAgICAgICAgIHJzaGlmdCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9mZnNldDtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVhZENvbG9ycyhzY2FuLCBidWZmZXIsIG9mZnNldCwgeG1heCkge1xyXG4gICAgaWYgKCh4bWF4IDwgTUlORUxFTikgfCAoeG1heCA+IE1BWEVMRU4pKSB7XHJcbiAgICAgICAgcmV0dXJuIG9sZFJlYWRDb2xvcnMoc2NhbiwgYnVmZmVyLCBvZmZzZXQsIHhtYXgpO1xyXG4gICAgfVxyXG4gICAgdmFyIGkgPSBidWZmZXJbb2Zmc2V0KytdO1xyXG4gICAgaWYgKGkgIT0gMikge1xyXG4gICAgICAgIHJldHVybiBvbGRSZWFkQ29sb3JzKHNjYW4sIGJ1ZmZlciwgb2Zmc2V0IC0gMSwgeG1heCk7XHJcbiAgICB9XHJcbiAgICBzY2FuWzBdWzFdID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgIHNjYW5bMF1bMl0gPSBidWZmZXJbb2Zmc2V0KytdO1xyXG5cclxuICAgIGkgPSBidWZmZXJbb2Zmc2V0KytdO1xyXG4gICAgaWYgKCgoKHNjYW5bMF1bMl0gPDwgOCkgPj4+IDApIHwgaSkgPj4+IDAgIT09IHhtYXgpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XHJcbiAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB4bWF4Oykge1xyXG4gICAgICAgICAgICB2YXIgY29kZSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgICAgIGlmIChjb2RlID4gMTI4KSB7XHJcbiAgICAgICAgICAgICAgICBjb2RlID0gKGNvZGUgJiAxMjcpID4+PiAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoY29kZS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Nhblt4KytdW2ldID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvZGUtLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjYW5beCsrXVtpXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2Zmc2V0O1xyXG59XHJcblxyXG5cclxudmFyIHJldCA9IHtcclxuICAgIC8vIGh0dHA6Ly93d3cuZ3JhcGhpY3MuY29ybmVsbC5lZHUvfmJqdy9yZ2JlLmh0bWxcclxuICAgIC8vIEJsZW5kZXIgc291cmNlXHJcbiAgICAvLyBodHRwOi8vcmFkc2l0ZS5sYmwuZ292L3JhZGlhbmNlL3JlZmVyL05vdGVzL3BpY3R1cmVfZm9ybWF0Lmh0bWxcclxuICAgIHBhcnNlUkdCRTogZnVuY3Rpb24oYXJyYXlCdWZmZXIsIHRleHR1cmUsIGV4cG9zdXJlKSB7XHJcbiAgICAgICAgaWYgKGV4cG9zdXJlID09IG51bGwpIHtcclxuICAgICAgICAgICAgZXhwb3N1cmUgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGF0YSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKTtcclxuICAgICAgICB2YXIgc2l6ZSA9IGRhdGEubGVuZ3RoO1xyXG4gICAgICAgIGlmICh1aW50ODJzdHJpbmcoZGF0YSwgMCwgMikgIT09ICcjPycpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBmaW5kIGVtcHR5IGxpbmUsIG5leHQgbGluZSBpcyByZXNvbHV0aW9uIGluZm9cclxuICAgICAgICBmb3IgKHZhciBpID0gMjsgaSA8IHNpemU7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodG9DaGFyKGRhdGFbaV0pID09PSAnXFxuJyAmJiB0b0NoYXIoZGF0YVtpKzFdKSA9PT0gJ1xcbicpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpID49IHNpemUpIHsgLy8gbm90IGZvdW5kXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZmluZCByZXNvbHV0aW9uIGluZm8gbGluZVxyXG4gICAgICAgIGkgKz0gMjtcclxuICAgICAgICB2YXIgc3RyID0gJyc7XHJcbiAgICAgICAgZm9yICg7IGkgPCBzaXplOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIF9jaGFyID0gdG9DaGFyKGRhdGFbaV0pO1xyXG4gICAgICAgICAgICBpZiAoX2NoYXIgPT09ICdcXG4nKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdHIgKz0gX2NoYXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIC1ZIE0gK1ggTlxyXG4gICAgICAgIHZhciB0bXAgPSBzdHIuc3BsaXQoJyAnKTtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gcGFyc2VJbnQodG1wWzFdKTtcclxuICAgICAgICB2YXIgd2lkdGggPSBwYXJzZUludCh0bXBbM10pO1xyXG4gICAgICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZWFkIGFuZCBkZWNvZGUgYWN0dWFsIGRhdGFcclxuICAgICAgICB2YXIgb2Zmc2V0ID0gaSsxO1xyXG4gICAgICAgIHZhciBzY2FubGluZSA9IFtdO1xyXG4gICAgICAgIC8vIG1lbXplcm9cclxuICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcclxuICAgICAgICAgICAgc2NhbmxpbmVbeF0gPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHNjYW5saW5lW3hdW2pdID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcGl4ZWxzID0gbmV3IEZsb2F0MzJBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpO1xyXG4gICAgICAgIHZhciBvZmZzZXQyID0gMDtcclxuICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkQ29sb3JzKHNjYW5saW5lLCBkYXRhLCBvZmZzZXQsIHdpZHRoKTtcclxuICAgICAgICAgICAgaWYgKCFvZmZzZXQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xyXG4gICAgICAgICAgICAgICAgcmdiZTJmbG9hdChzY2FubGluZVt4XSwgcGl4ZWxzLCBvZmZzZXQyLCBleHBvc3VyZSk7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQyICs9IDQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGV4dHVyZSkge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZXh0dXJlLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgdGV4dHVyZS5waXhlbHMgPSBwaXhlbHM7XHJcbiAgICAgICAgLy8gSEFMRl9GTE9BVCBjYW4ndCB1c2UgRmxvYXQzMkFycmF5XHJcbiAgICAgICAgdGV4dHVyZS50eXBlID0gVGV4dHVyZS5GTE9BVDtcclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgcGFyc2VSR0JFRnJvbVBORzogZnVuY3Rpb24ocG5nKSB7XHJcblxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgcmV0O1xyXG4iLCJpbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgRW52aXJvbm1lbnRNYXBQYXNzIGZyb20gJy4uL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAnO1xyXG5pbXBvcnQgU2t5ZG9tZSBmcm9tICcuLi9wbHVnaW4vU2t5ZG9tZSc7XHJcbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XHJcblxyXG5pbXBvcnQgZGRzIGZyb20gJy4vZGRzJztcclxuaW1wb3J0IGhkciBmcm9tICcuL2hkcic7XHJcblxyXG4vKipcclxuICogQGFsaWFzIGNsYXkudXRpbC50ZXh0dXJlXHJcbiAqL1xyXG52YXIgdGV4dHVyZVV0aWwgPSB7XHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ3xvYmplY3R9IHBhdGhcclxuICAgICAqIEBwYXJhbSAge29iamVjdH0gW29wdGlvbl1cclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb25zdWNjZXNzXVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvbmVycm9yXVxyXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlfVxyXG4gICAgICovXHJcbiAgICBsb2FkVGV4dHVyZTogZnVuY3Rpb24gKHBhdGgsIG9wdGlvbiwgb25zdWNjZXNzLCBvbmVycm9yKSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmU7XHJcbiAgICAgICAgaWYgKHR5cGVvZihvcHRpb24pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIG9uc3VjY2VzcyA9IG9wdGlvbjtcclxuICAgICAgICAgICAgb25lcnJvciA9IG9uc3VjY2VzcztcclxuICAgICAgICAgICAgb3B0aW9uID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvcHRpb24gPSBvcHRpb24gfHwge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YocGF0aCkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXRoLm1hdGNoKC8uaGRyJC8pIHx8IG9wdGlvbi5maWxlVHlwZSA9PT0gJ2hkcicpIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgc1JHQjogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZVV0aWwuX2ZldGNoVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhkci5wYXJzZVJHQkUoZGF0YSwgdGV4dHVyZSwgb3B0aW9uLmV4cG9zdXJlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5kaXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbnN1Y2Nlc3MgJiYgb25zdWNjZXNzKHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgb25lcnJvclxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHBhdGgubWF0Y2goLy5kZHMkLykgfHwgb3B0aW9uLmZpbGVUeXBlID09PSAnZGRzJykge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlVXRpbC5fZmV0Y2hUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGRzLnBhcnNlKGRhdGEsIHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLmRpcnR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uc3VjY2VzcyAmJiBvbnN1Y2Nlc3ModGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBvbmVycm9yXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoKTtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUubG9hZChwYXRoKTtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUuc3VjY2VzcyhvbnN1Y2Nlc3MpO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5lcnJvcihvbmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgcGF0aCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mKHBhdGgucHgpICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmVDdWJlKCk7XHJcbiAgICAgICAgICAgIHRleHR1cmUubG9hZChwYXRoKTtcclxuICAgICAgICAgICAgdGV4dHVyZS5zdWNjZXNzKG9uc3VjY2Vzcyk7XHJcbiAgICAgICAgICAgIHRleHR1cmUuZXJyb3Iob25lcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIExvYWQgYSBwYW5vcmFtYSB0ZXh0dXJlIGFuZCByZW5kZXIgaXQgdG8gYSBjdWJlIG1hcFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gcGF0aFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5UZXh0dXJlQ3ViZX0gY3ViZU1hcFxyXG4gICAgICogQHBhcmFtICB7b2JqZWN0fSBbb3B0aW9uXVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW29wdGlvbi5lbmNvZGVSR0JNXVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbb3B0aW9uLmV4cG9zdXJlXVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvbnN1Y2Nlc3NdXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW29uZXJyb3JdXHJcbiAgICAgKi9cclxuICAgIGxvYWRQYW5vcmFtYTogZnVuY3Rpb24gKHJlbmRlcmVyLCBwYXRoLCBjdWJlTWFwLCBvcHRpb24sIG9uc3VjY2Vzcywgb25lcnJvcikge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZihvcHRpb24pID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIG9uc3VjY2VzcyA9IG9wdGlvbjtcclxuICAgICAgICAgICAgb25lcnJvciA9IG9uc3VjY2VzcztcclxuICAgICAgICAgICAgb3B0aW9uID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvcHRpb24gPSBvcHRpb24gfHwge307XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0ZXh0dXJlVXRpbC5sb2FkVGV4dHVyZShwYXRoLCBvcHRpb24sIGZ1bmN0aW9uICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgdGV4dHVyZS5mbGlwWSA9IG9wdGlvbi5mbGlwWSB8fCBmYWxzZTtcclxuICAgICAgICAgICAgc2VsZi5wYW5vcmFtYVRvQ3ViZU1hcChyZW5kZXJlciwgdGV4dHVyZSwgY3ViZU1hcCwgb3B0aW9uKTtcclxuICAgICAgICAgICAgdGV4dHVyZS5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgb25zdWNjZXNzICYmIG9uc3VjY2VzcyhjdWJlTWFwKTtcclxuICAgICAgICB9LCBvbmVycm9yKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW5kZXIgYSBwYW5vcmFtYSB0ZXh0dXJlIHRvIGEgY3ViZSBtYXBcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmUyRH0gcGFub3JhbWFNYXBcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZUN1YmV9IGN1YmVNYXBcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtib29sZWFufSBbb3B0aW9uLmVuY29kZVJHQk1dXHJcbiAgICAgKi9cclxuICAgIHBhbm9yYW1hVG9DdWJlTWFwOiBmdW5jdGlvbiAocmVuZGVyZXIsIHBhbm9yYW1hTWFwLCBjdWJlTWFwLCBvcHRpb24pIHtcclxuICAgICAgICB2YXIgZW52aXJvbm1lbnRNYXBQYXNzID0gbmV3IEVudmlyb25tZW50TWFwUGFzcygpO1xyXG4gICAgICAgIHZhciBza3lkb21lID0gbmV3IFNreWRvbWUoe1xyXG4gICAgICAgICAgICBzY2VuZTogbmV3IFNjZW5lKClcclxuICAgICAgICB9KTtcclxuICAgICAgICBza3lkb21lLnNldEVudmlyb25tZW50TWFwKHBhbm9yYW1hTWFwKTtcclxuXHJcbiAgICAgICAgb3B0aW9uID0gb3B0aW9uIHx8IHt9O1xyXG4gICAgICAgIGlmIChvcHRpb24uZW5jb2RlUkdCTSkge1xyXG4gICAgICAgICAgICBza3lkb21lLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUkdCTV9FTkNPREUnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNoYXJlIHNSR0JcclxuICAgICAgICBjdWJlTWFwLnNSR0IgPSBwYW5vcmFtYU1hcC5zUkdCO1xyXG5cclxuICAgICAgICBlbnZpcm9ubWVudE1hcFBhc3MudGV4dHVyZSA9IGN1YmVNYXA7XHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXBQYXNzLnJlbmRlcihyZW5kZXJlciwgc2t5ZG9tZS5zY2VuZSk7XHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXBQYXNzLnRleHR1cmUgPSBudWxsO1xyXG4gICAgICAgIGVudmlyb25tZW50TWFwUGFzcy5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICByZXR1cm4gY3ViZU1hcDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGhlaWdodCBtYXAgdG8gbm9ybWFsIG1hcFxyXG4gICAgICogQHBhcmFtIHtIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fSBpbWFnZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tCdW1wPWZhbHNlXVxyXG4gICAgICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodFRvTm9ybWFsOiBmdW5jdGlvbiAoaW1hZ2UsIGNoZWNrQnVtcCkge1xyXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICB2YXIgd2lkdGggPSBjYW52YXMud2lkdGggPSBpbWFnZS53aWR0aDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gY2FudmFzLmhlaWdodCA9IGltYWdlLmhlaWdodDtcclxuICAgICAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgY2hlY2tCdW1wID0gY2hlY2tCdW1wIHx8IGZhbHNlO1xyXG4gICAgICAgIHZhciBzcmNEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICB2YXIgZHN0RGF0YSA9IGN0eC5jcmVhdGVJbWFnZURhdGEod2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcmNEYXRhLmRhdGEubGVuZ3RoOyBpICs9IDQpIHtcclxuICAgICAgICAgICAgaWYgKGNoZWNrQnVtcCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHIgPSBzcmNEYXRhLmRhdGFbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgZyA9IHNyY0RhdGEuZGF0YVtpICsgMV07XHJcbiAgICAgICAgICAgICAgICB2YXIgYiA9IHNyY0RhdGEuZGF0YVtpICsgMl07XHJcbiAgICAgICAgICAgICAgICB2YXIgZGlmZiA9IE1hdGguYWJzKHIgLSBnKSArIE1hdGguYWJzKGcgLSBiKTtcclxuICAgICAgICAgICAgICAgIGlmIChkaWZmID4gMjApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0dpdmVuIGltYWdlIGlzIG5vdCBhIGhlaWdodCBtYXAnKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gTW9kaWZpZWQgZnJvbSBodHRwOi8vbXJkb29iLmNvbS9sYWIvamF2YXNjcmlwdC9oZWlnaHQybm9ybWFsL1xyXG4gICAgICAgICAgICB2YXIgeDEsIHkxLCB4MiwgeTI7XHJcbiAgICAgICAgICAgIGlmIChpICUgKHdpZHRoICogNCkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIGxlZnQgZWRnZVxyXG4gICAgICAgICAgICAgICAgeDEgPSBzcmNEYXRhLmRhdGFbaV07XHJcbiAgICAgICAgICAgICAgICB4MiA9IHNyY0RhdGEuZGF0YVtpICsgNF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaSAlICh3aWR0aCAqIDQpID09PSAod2lkdGggLSAxKSAqIDQpIHtcclxuICAgICAgICAgICAgICAgIC8vIHJpZ2h0IGVkZ2VcclxuICAgICAgICAgICAgICAgIHgxID0gc3JjRGF0YS5kYXRhW2kgLSA0XTtcclxuICAgICAgICAgICAgICAgIHgyID0gc3JjRGF0YS5kYXRhW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgeDEgPSBzcmNEYXRhLmRhdGFbaSAtIDRdO1xyXG4gICAgICAgICAgICAgICAgeDIgPSBzcmNEYXRhLmRhdGFbaSArIDRdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaSA8IHdpZHRoICogNCkge1xyXG4gICAgICAgICAgICAgICAgLy8gdG9wIGVkZ2VcclxuICAgICAgICAgICAgICAgIHkxID0gc3JjRGF0YS5kYXRhW2ldO1xyXG4gICAgICAgICAgICAgICAgeTIgPSBzcmNEYXRhLmRhdGFbaSArIHdpZHRoICogNF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaSA+IHdpZHRoICogKGhlaWdodCAtIDEpICogNCkge1xyXG4gICAgICAgICAgICAgICAgLy8gYm90dG9tIGVkZ2VcclxuICAgICAgICAgICAgICAgIHkxID0gc3JjRGF0YS5kYXRhW2kgLSB3aWR0aCAqIDRdO1xyXG4gICAgICAgICAgICAgICAgeTIgPSBzcmNEYXRhLmRhdGFbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB5MSA9IHNyY0RhdGEuZGF0YVtpIC0gd2lkdGggKiA0XTtcclxuICAgICAgICAgICAgICAgIHkyID0gc3JjRGF0YS5kYXRhW2kgKyB3aWR0aCAqIDRdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkc3REYXRhLmRhdGFbaV0gPSAoeDEgLSB4MikgKyAxMjc7XHJcbiAgICAgICAgICAgIGRzdERhdGEuZGF0YVtpICsgMV0gPSAoeTEgLSB5MikgKyAxMjc7XHJcbiAgICAgICAgICAgIGRzdERhdGEuZGF0YVtpICsgMl0gPSAyNTU7XHJcbiAgICAgICAgICAgIGRzdERhdGEuZGF0YVtpICsgM10gPSAyNTU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN0eC5wdXRJbWFnZURhdGEoZHN0RGF0YSwgMCwgMCk7XHJcbiAgICAgICAgcmV0dXJuIGNhbnZhcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGhlaWdodCBtYXAgdG8gbm9ybWFsIG1hcFxyXG4gICAgICogQHBhcmFtIHtIVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtZW50fSBpbWFnZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY2hlY2tCdW1wPWZhbHNlXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt0aHJlc2hvbGQ9MjBdXHJcbiAgICAgKiBAcmV0dXJuIHtIVE1MQ2FudmFzRWxlbWVudH1cclxuICAgICAqL1xyXG4gICAgaXNIZWlnaHRJbWFnZTogZnVuY3Rpb24gKGltZywgZG93blNjYWxlU2l6ZSwgdGhyZXNob2xkKSB7XHJcbiAgICAgICAgaWYgKCFpbWcgfHwgIWltZy53aWR0aCB8fCAhaW1nLmhlaWdodCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIHZhciBzaXplID0gZG93blNjYWxlU2l6ZSB8fCAzMjtcclxuICAgICAgICB0aHJlc2hvbGQgPSB0aHJlc2hvbGQgfHwgMjA7XHJcbiAgICAgICAgY2FudmFzLndpZHRoID0gY2FudmFzLmhlaWdodCA9IHNpemU7XHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIHNpemUsIHNpemUpO1xyXG4gICAgICAgIHZhciBzcmNEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCBzaXplLCBzaXplKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNyY0RhdGEuZGF0YS5sZW5ndGg7IGkgKz0gNCkge1xyXG4gICAgICAgICAgICB2YXIgciA9IHNyY0RhdGEuZGF0YVtpXTtcclxuICAgICAgICAgICAgdmFyIGcgPSBzcmNEYXRhLmRhdGFbaSArIDFdO1xyXG4gICAgICAgICAgICB2YXIgYiA9IHNyY0RhdGEuZGF0YVtpICsgMl07XHJcbiAgICAgICAgICAgIHZhciBkaWZmID0gTWF0aC5hYnMociAtIGcpICsgTWF0aC5hYnMoZyAtIGIpO1xyXG4gICAgICAgICAgICBpZiAoZGlmZiA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZmV0Y2hUZXh0dXJlOiBmdW5jdGlvbiAocGF0aCwgb25zdWNjZXNzLCBvbmVycm9yKSB7XHJcbiAgICAgICAgdmVuZG9yLnJlcXVlc3QuZ2V0KHtcclxuICAgICAgICAgICAgdXJsOiBwYXRoLFxyXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicsXHJcbiAgICAgICAgICAgIG9ubG9hZDogb25zdWNjZXNzLFxyXG4gICAgICAgICAgICBvbmVycm9yOiBvbmVycm9yXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgY2hlc3Nib2FyZCB0ZXh0dXJlXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFtzaXplXVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbdW5pdFNpemVdXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IFtjb2xvcjFdXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IFtjb2xvcjJdXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAqL1xyXG4gICAgY3JlYXRlQ2hlc3Nib2FyZDogZnVuY3Rpb24gKHNpemUsIHVuaXRTaXplLCBjb2xvcjEsIGNvbG9yMikge1xyXG4gICAgICAgIHNpemUgPSBzaXplIHx8IDUxMjtcclxuICAgICAgICB1bml0U2l6ZSA9IHVuaXRTaXplIHx8IDY0O1xyXG4gICAgICAgIGNvbG9yMSA9IGNvbG9yMSB8fCAnYmxhY2snO1xyXG4gICAgICAgIGNvbG9yMiA9IGNvbG9yMiB8fCAnd2hpdGUnO1xyXG5cclxuICAgICAgICB2YXIgcmVwZWF0ID0gTWF0aC5jZWlsKHNpemUgLyB1bml0U2l6ZSk7XHJcblxyXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBjYW52YXMud2lkdGggPSBzaXplO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBzaXplO1xyXG4gICAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBjdHguZmlsbFN0eWxlID0gY29sb3IyO1xyXG4gICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBzaXplLCBzaXplKTtcclxuXHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGNvbG9yMTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcGVhdDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmVwZWF0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBpc0ZpbGwgPSBqICUgMiA/IChpICUgMikgOiAoaSAlIDIgLSAxKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc0ZpbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoaSAqIHVuaXRTaXplLCBqICogdW5pdFNpemUsIHVuaXRTaXplLCB1bml0U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjYW52YXMsXHJcbiAgICAgICAgICAgIGFuaXNvdHJvcGljOiA4XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIGJsYW5rIHB1cmUgY29sb3IgMXgxIHRleHR1cmVcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gY29sb3JcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICovXHJcbiAgICBjcmVhdGVCbGFuazogZnVuY3Rpb24gKGNvbG9yKSB7XHJcbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IDE7XHJcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IDE7XHJcbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvcjtcclxuICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgMSwgMSk7XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjYW52YXNcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCB0ZXh0dXJlVXRpbDtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCIjZGVmaW5lIFNBTVBMRV9OVU1CRVIgMTAyNFxcbiNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OVxcbnVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbERpc3RyaWJ1dGlvbjtcXG51bmlmb3JtIHZlYzIgdmlld3BvcnRTaXplIDogWzUxMiwgMjU2XTtcXG5jb25zdCB2ZWMzIE4gPSB2ZWMzKDAuMCwgMC4wLCAxLjApO1xcbmNvbnN0IGZsb2F0IGZTYW1wbGVOdW1iZXIgPSBmbG9hdChTQU1QTEVfTlVNQkVSKTtcXG52ZWMzIGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQgaSwgZmxvYXQgcm91Z2huZXNzLCB2ZWMzIE4pIHtcXG4gdmVjMyBIID0gdGV4dHVyZTJEKG5vcm1hbERpc3RyaWJ1dGlvbiwgdmVjMihyb3VnaG5lc3MsIGkpKS5yZ2I7XFxuIHZlYzMgdXBWZWN0b3IgPSBhYnMoTi55KSA+IDAuOTk5ID8gdmVjMygxLjAsIDAuMCwgMC4wKSA6IHZlYzMoMC4wLCAxLjAsIDAuMCk7XFxuIHZlYzMgdGFuZ2VudFggPSBub3JtYWxpemUoY3Jvc3MoTiwgdXBWZWN0b3IpKTtcXG4gdmVjMyB0YW5nZW50WiA9IGNyb3NzKE4sIHRhbmdlbnRYKTtcXG4gcmV0dXJuIG5vcm1hbGl6ZSh0YW5nZW50WCAqIEgueCArIE4gKiBILnkgKyB0YW5nZW50WiAqIEgueik7XFxufVxcbmZsb2F0IEdfU21pdGgoZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBOb1YsIGZsb2F0IE5vTCkge1xcbiBmbG9hdCBrID0gcm91Z2huZXNzICogcm91Z2huZXNzIC8gMi4wO1xcbiBmbG9hdCBHMVYgPSBOb1YgLyAoTm9WICogKDEuMCAtIGspICsgayk7XFxuIGZsb2F0IEcxTCA9IE5vTCAvIChOb0wgKiAoMS4wIC0gaykgKyBrKTtcXG4gcmV0dXJuIEcxTCAqIEcxVjtcXG59XFxudm9pZCBtYWluKCkge1xcbiB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC8gdmlld3BvcnRTaXplO1xcbiBmbG9hdCBOb1YgPSB1di54O1xcbiBmbG9hdCByb3VnaG5lc3MgPSB1di55O1xcbiB2ZWMzIFY7XFxuIFYueCA9IHNxcnQoMS4wIC0gTm9WICogTm9WKTtcXG4gVi55ID0gMC4wO1xcbiBWLnogPSBOb1Y7XFxuIGZsb2F0IEEgPSAwLjA7XFxuIGZsb2F0IEIgPSAwLjA7XFxuIGZvciAoaW50IGkgPSAwOyBpIDwgU0FNUExFX05VTUJFUjsgaSsrKSB7XFxuIHZlYzMgSCA9IGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQoaSkgLyBmU2FtcGxlTnVtYmVyLCByb3VnaG5lc3MsIE4pO1xcbiB2ZWMzIEwgPSByZWZsZWN0KC1WLCBIKTtcXG4gZmxvYXQgTm9MID0gY2xhbXAoTC56LCAwLjAsIDEuMCk7XFxuIGZsb2F0IE5vSCA9IGNsYW1wKEgueiwgMC4wLCAxLjApO1xcbiBmbG9hdCBWb0ggPSBjbGFtcChkb3QoViwgSCksIDAuMCwgMS4wKTtcXG4gaWYgKE5vTCA+IDAuMCkge1xcbiBmbG9hdCBHID0gR19TbWl0aChyb3VnaG5lc3MsIE5vViwgTm9MKTtcXG4gZmxvYXQgR19WaXMgPSBHICogVm9IIC8gKE5vSCAqIE5vVik7XFxuIGZsb2F0IEZjID0gcG93KDEuMCAtIFZvSCwgNS4wKTtcXG4gQSArPSAoMS4wIC0gRmMpICogR19WaXM7XFxuIEIgKz0gRmMgKiBHX1ZpcztcXG4gfVxcbiB9XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMihBLCBCKSAvIGZTYW1wbGVOdW1iZXIsIDAuMCwgMS4wKTtcXG59XFxuXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiI2RlZmluZSBTSEFERVJfTkFNRSBwcmVmaWx0ZXJcXG4jZGVmaW5lIFNBTVBMRV9OVU1CRVIgMTAyNFxcbiNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OVxcbnVuaWZvcm0gbWF0NCB2aWV3SW52ZXJzZSA6IFZJRVdJTlZFUlNFO1xcbnVuaWZvcm0gc2FtcGxlckN1YmUgZW52aXJvbm1lbnRNYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsRGlzdHJpYnV0aW9uO1xcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzIDogMC41O1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZlYzMgaW1wb3J0YW5jZVNhbXBsZU5vcm1hbChmbG9hdCBpLCBmbG9hdCByb3VnaG5lc3MsIHZlYzMgTikge1xcbiB2ZWMzIEggPSB0ZXh0dXJlMkQobm9ybWFsRGlzdHJpYnV0aW9uLCB2ZWMyKHJvdWdobmVzcywgaSkpLnJnYjtcXG4gdmVjMyB1cFZlY3RvciA9IGFicyhOLnkpID4gMC45OTkgPyB2ZWMzKDEuMCwgMC4wLCAwLjApIDogdmVjMygwLjAsIDEuMCwgMC4wKTtcXG4gdmVjMyB0YW5nZW50WCA9IG5vcm1hbGl6ZShjcm9zcyhOLCB1cFZlY3RvcikpO1xcbiB2ZWMzIHRhbmdlbnRaID0gY3Jvc3MoTiwgdGFuZ2VudFgpO1xcbiByZXR1cm4gbm9ybWFsaXplKHRhbmdlbnRYICogSC54ICsgTiAqIEgueSArIHRhbmdlbnRaICogSC56KTtcXG59XFxudm9pZCBtYWluKCkge1xcbiB2ZWMzIGV5ZVBvcyA9IHZpZXdJbnZlcnNlWzNdLnh5ejtcXG4gdmVjMyBWID0gbm9ybWFsaXplKHZfV29ybGRQb3NpdGlvbiAtIGV5ZVBvcyk7XFxuIHZlYzMgTiA9IFY7XFxuIHZlYzMgcHJlZmlsdGVyZWRDb2xvciA9IHZlYzMoMC4wKTtcXG4gZmxvYXQgdG90YWxXZWlnaHQgPSAwLjA7XFxuIGZsb2F0IGZNYXhTYW1wbGVOdW1iZXIgPSBmbG9hdChTQU1QTEVfTlVNQkVSKTtcXG4gZm9yIChpbnQgaSA9IDA7IGkgPCBTQU1QTEVfTlVNQkVSOyBpKyspIHtcXG4gdmVjMyBIID0gaW1wb3J0YW5jZVNhbXBsZU5vcm1hbChmbG9hdChpKSAvIGZNYXhTYW1wbGVOdW1iZXIsIHJvdWdobmVzcywgTik7XFxuIHZlYzMgTCA9IHJlZmxlY3QoLVYsIEgpO1xcbiBmbG9hdCBOb0wgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gaWYgKE5vTCA+IDAuMCkge1xcbiBwcmVmaWx0ZXJlZENvbG9yICs9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZShlbnZpcm9ubWVudE1hcCwgTCkpLnJnYiAqIE5vTDtcXG4gdG90YWxXZWlnaHQgKz0gTm9MO1xcbiB9XFxuIH1cXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHZlYzQocHJlZmlsdGVyZWRDb2xvciAvIHRvdGFsV2VpZ2h0LCAxLjApKTtcXG59XFxuXCI7XHJcbiIsIi8vIEN1YmVtYXAgcHJlZmlsdGVyIHV0aWxpdHlcclxuLy8gaHR0cDovL3d3dy51bnJlYWxlbmdpbmUuY29tL2ZpbGVzL2Rvd25sb2Fkcy8yMDEzU2lnZ3JhcGhQcmVzZW50YXRpb25zTm90ZXMucGRmXHJcbi8vIGh0dHA6Ly9odHRwLmRldmVsb3Blci5udmlkaWEuY29tL0dQVUdlbXMzL2dwdWdlbXMzX2NoMjAuaHRtbFxyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgUGFzcyBmcm9tICcuLi9jb21wb3NpdG9yL1Bhc3MnO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcbmltcG9ydCBTa3lib3ggZnJvbSAnLi4vcGx1Z2luL1NreWJveCc7XHJcbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XHJcbmltcG9ydCBFbnZpcm9ubWVudE1hcFBhc3MgZnJvbSAnLi4vcHJlUGFzcy9FbnZpcm9ubWVudE1hcCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgdGV4dHVyZVV0aWwgZnJvbSAnLi90ZXh0dXJlJztcclxuXHJcbmltcG9ydCBpbnRlZ3JhdGVCUkRGU2hhZGVyQ29kZSBmcm9tICcuL3NoYWRlci9pbnRlZ3JhdGVCUkRGLmdsc2wuanMnO1xyXG5pbXBvcnQgcHJlZmlsdGVyRnJhZ0NvZGUgZnJvbSAnLi9zaGFkZXIvcHJlZmlsdGVyLmdsc2wuanMnO1xyXG5cclxudmFyIGN1YmVtYXBVdGlsID0ge307XHJcblxyXG52YXIgdGFyZ2V0cyA9IFsncHgnLCAnbngnLCAncHknLCAnbnknLCAncHonLCAnbnonXTtcclxuXHJcbi8vIFRPRE8gRG93bnNhbXBsZVxyXG4vKipcclxuICogQG5hbWUgY2xheS51dGlsLmN1YmVtYXAucHJlZmlsdGVyRW52aXJvbm1lbnRNYXBcclxuICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSBlbnZNYXBcclxuICogQHBhcmFtICB7T2JqZWN0fSBbdGV4dHVyZU9wdHNdXHJcbiAqIEBwYXJhbSAge251bWJlcn0gW3RleHR1cmVPcHRzLndpZHRoPTY0XVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFt0ZXh0dXJlT3B0cy5oZWlnaHQ9NjRdXHJcbiAqIEBwYXJhbSAge251bWJlcn0gW3RleHR1cmVPcHRzLnR5cGVdXHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFt0ZXh0dXJlT3B0cy5lbmNvZGVSR0JNPWZhbHNlXVxyXG4gKiBAcGFyYW0gIHtib29sZWFufSBbdGV4dHVyZU9wdHMuZGVjb2RlUkdCTT1mYWxzZV1cclxuICogQHBhcmFtICB7Y2xheS5UZXh0dXJlMkR9IFtub3JtYWxEaXN0cmlidXRpb25dXHJcbiAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZTJEfSBbYnJkZkxvb2t1cF1cclxuICovXHJcbmN1YmVtYXBVdGlsLnByZWZpbHRlckVudmlyb25tZW50TWFwID0gZnVuY3Rpb24gKFxyXG4gICAgcmVuZGVyZXIsIGVudk1hcCwgdGV4dHVyZU9wdHMsIG5vcm1hbERpc3RyaWJ1dGlvbiwgYnJkZkxvb2t1cFxyXG4pIHtcclxuICAgIC8vIE5vdCBjcmVhdGUgb3RoZXIgcmVuZGVyZXIsIGl0IGlzIGVhc3kgaGF2aW5nIGlzc3VlIG9mIGNyb3NzIHJlZmVyZW5jZSBvZiByZXNvdXJjZXMgbGlrZSBmcmFtZWJ1ZmZlclxyXG4gICAgLy8gUEVORElORyBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI/XHJcbiAgICBpZiAoIWJyZGZMb29rdXAgfHwgIW5vcm1hbERpc3RyaWJ1dGlvbikge1xyXG4gICAgICAgIG5vcm1hbERpc3RyaWJ1dGlvbiA9IGN1YmVtYXBVdGlsLmdlbmVyYXRlTm9ybWFsRGlzdHJpYnV0aW9uKCk7XHJcbiAgICAgICAgYnJkZkxvb2t1cCA9IGN1YmVtYXBVdGlsLmludGVncmF0ZUJSREYocmVuZGVyZXIsIG5vcm1hbERpc3RyaWJ1dGlvbik7XHJcbiAgICB9XHJcbiAgICB0ZXh0dXJlT3B0cyA9IHRleHR1cmVPcHRzIHx8IHt9O1xyXG5cclxuICAgIHZhciB3aWR0aCA9IHRleHR1cmVPcHRzLndpZHRoIHx8IDY0O1xyXG4gICAgdmFyIGhlaWdodCA9IHRleHR1cmVPcHRzLmhlaWdodCB8fCA2NDtcclxuXHJcbiAgICB2YXIgdGV4dHVyZVR5cGUgPSB0ZXh0dXJlT3B0cy50eXBlIHx8IGVudk1hcC50eXBlO1xyXG5cclxuICAgIC8vIFVzZSBzYW1lIHR5cGUgd2l0aCBnaXZlbiBlbnZNYXBcclxuICAgIHZhciBwcmVmaWx0ZXJlZEN1YmVNYXAgPSBuZXcgVGV4dHVyZUN1YmUoe1xyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICB0eXBlOiB0ZXh0dXJlVHlwZSxcclxuICAgICAgICBmbGlwWTogZmFsc2UsXHJcbiAgICAgICAgbWlwbWFwczogW11cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghcHJlZmlsdGVyZWRDdWJlTWFwLmlzUG93ZXJPZlR3bygpKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdXaWR0aCBhbmQgaGVpZ2h0IG11c3QgYmUgcG93ZXIgb2YgdHdvIHRvIGVuYWJsZSBtaXBtYXAuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHNpemUgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KTtcclxuICAgIHZhciBtaXBtYXBOdW0gPSBNYXRoLmxvZyhzaXplKSAvIE1hdGgubG9nKDIpICsgMTtcclxuXHJcbiAgICB2YXIgcHJlZmlsdGVyTWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcih7XHJcbiAgICAgICAgICAgIHZlcnRleDogU2hhZGVyLnNvdXJjZSgnY2xheS5za3lib3gudmVydGV4JyksXHJcbiAgICAgICAgICAgIGZyYWdtZW50OiBwcmVmaWx0ZXJGcmFnQ29kZVxyXG4gICAgICAgIH0pXHJcbiAgICB9KTtcclxuICAgIHByZWZpbHRlck1hdGVyaWFsLnNldCgnbm9ybWFsRGlzdHJpYnV0aW9uJywgbm9ybWFsRGlzdHJpYnV0aW9uKTtcclxuXHJcbiAgICB0ZXh0dXJlT3B0cy5lbmNvZGVSR0JNICYmIHByZWZpbHRlck1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUkdCTV9FTkNPREUnKTtcclxuICAgIHRleHR1cmVPcHRzLmRlY29kZVJHQk0gJiYgcHJlZmlsdGVyTWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdSR0JNX0RFQ09ERScpO1xyXG5cclxuICAgIHZhciBkdW1teVNjZW5lID0gbmV3IFNjZW5lKCk7XHJcbiAgICB2YXIgc2t5RW52O1xyXG5cclxuICAgIGlmIChlbnZNYXAudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlMkQnKSB7XHJcbiAgICAgICAgLy8gQ29udmVydCBwYW5vcmFtYSB0byBjdWJlbWFwXHJcbiAgICAgICAgdmFyIGVudkN1YmVtYXAgPSBuZXcgVGV4dHVyZUN1YmUoe1xyXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICAgICAgICAvLyBGSVhNRSBGTE9BVCB0eXBlIHdpbGwgY2F1c2UgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UIGVycm9yIG9uIGlPU1xyXG4gICAgICAgICAgICB0eXBlOiB0ZXh0dXJlVHlwZSA9PT0gVGV4dHVyZS5GTE9BVCA/XHJcbiAgICAgICAgICAgICAgICBUZXh0dXJlLkhBTEZfRkxPQVQgOiB0ZXh0dXJlVHlwZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRleHR1cmVVdGlsLnBhbm9yYW1hVG9DdWJlTWFwKHJlbmRlcmVyLCBlbnZNYXAsIGVudkN1YmVtYXAsIHtcclxuICAgICAgICAgICAgLy8gUEVORElORyBlbmNvZGVSR0JNIHNvIGl0IGNhbiBiZSBkZWNvZGVkIGFzIFJHQk1cclxuICAgICAgICAgICAgZW5jb2RlUkdCTTogdGV4dHVyZU9wdHMuZGVjb2RlUkdCTVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGVudk1hcCA9IGVudkN1YmVtYXA7XHJcbiAgICB9XHJcbiAgICBza3lFbnYgPSBuZXcgU2t5Ym94KHtcclxuICAgICAgICBzY2VuZTogZHVtbXlTY2VuZSxcclxuICAgICAgICBtYXRlcmlhbDogcHJlZmlsdGVyTWF0ZXJpYWxcclxuICAgIH0pO1xyXG4gICAgc2t5RW52Lm1hdGVyaWFsLnNldCgnZW52aXJvbm1lbnRNYXAnLCBlbnZNYXApO1xyXG5cclxuICAgIHZhciBlbnZNYXBQYXNzID0gbmV3IEVudmlyb25tZW50TWFwUGFzcyh7XHJcbiAgICAgICAgdGV4dHVyZTogcHJlZmlsdGVyZWRDdWJlTWFwXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBGb3JjZSB0byBiZSBVTlNJR05FRF9CWVRFXHJcbiAgICBpZiAodGV4dHVyZU9wdHMuZW5jb2RlUkdCTSkge1xyXG4gICAgICAgIHRleHR1cmVUeXBlID0gcHJlZmlsdGVyZWRDdWJlTWFwLnR5cGUgPSBUZXh0dXJlLlVOU0lHTkVEX0JZVEU7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJlbmRlclRhcmdldFRtcCA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICB0eXBlOiB0ZXh0dXJlVHlwZVxyXG4gICAgfSk7XHJcbiAgICB2YXIgZnJhbWVCdWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoe1xyXG4gICAgICAgIGRlcHRoQnVmZmVyOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgICB2YXIgQXJyYXlDdG9yID0gdmVuZG9yW3RleHR1cmVUeXBlID09PSBUZXh0dXJlLlVOU0lHTkVEX0JZVEUgPyAnVWludDhBcnJheScgOiAnRmxvYXQzMkFycmF5J107XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pcG1hcE51bTsgaSsrKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS50aW1lKCdwcmVmaWx0ZXInKTtcclxuICAgICAgICBwcmVmaWx0ZXJlZEN1YmVNYXAubWlwbWFwc1tpXSA9IHtcclxuICAgICAgICAgICAgcGl4ZWxzOiB7fVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgc2t5RW52Lm1hdGVyaWFsLnNldCgncm91Z2huZXNzJywgaSAvIChtaXBtYXBOdW0gLSAxKSk7XHJcblxyXG4gICAgICAgIC8vIFR3ZWFrIGZvdlxyXG4gICAgICAgIC8vIGh0dHA6Ly90aGUtd2l0bmVzcy5uZXQvbmV3cy8yMDEyLzAyL3NlYW1sZXNzLWN1YmUtbWFwLWZpbHRlcmluZy9cclxuICAgICAgICB2YXIgbiA9IHJlbmRlclRhcmdldFRtcC53aWR0aDtcclxuICAgICAgICB2YXIgZm92ID0gMiAqIE1hdGguYXRhbihuIC8gKG4gLSAwLjUpKSAvIE1hdGguUEkgKiAxODA7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGFyZ2V0cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICB2YXIgcGl4ZWxzID0gbmV3IEFycmF5Q3RvcihyZW5kZXJUYXJnZXRUbXAud2lkdGggKiByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0ICogNCk7XHJcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChyZW5kZXJUYXJnZXRUbXApO1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBjYW1lcmEgPSBlbnZNYXBQYXNzLmdldENhbWVyYSh0YXJnZXRzW2pdKTtcclxuICAgICAgICAgICAgY2FtZXJhLmZvdiA9IGZvdjtcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyKGR1bW15U2NlbmUsIGNhbWVyYSk7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLmdsLnJlYWRQaXhlbHMoXHJcbiAgICAgICAgICAgICAgICAwLCAwLCByZW5kZXJUYXJnZXRUbXAud2lkdGgsIHJlbmRlclRhcmdldFRtcC5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBUZXh0dXJlLlJHQkEsIHRleHR1cmVUeXBlLCBwaXhlbHNcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgICAgLy8gdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgICAgICAvLyBjYW52YXMud2lkdGggPSByZW5kZXJUYXJnZXRUbXAud2lkdGg7XHJcbiAgICAgICAgICAgIC8vIGNhbnZhcy5oZWlnaHQgPSByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0O1xyXG4gICAgICAgICAgICAvLyB2YXIgaW1hZ2VEYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YShyZW5kZXJUYXJnZXRUbXAud2lkdGgsIHJlbmRlclRhcmdldFRtcC5oZWlnaHQpO1xyXG4gICAgICAgICAgICAvLyBmb3IgKHZhciBrID0gMDsgayA8IHBpeGVscy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAvLyAgICAgaW1hZ2VEYXRhLmRhdGFba10gPSBwaXhlbHNba107XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgLy8gY3R4LnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xyXG4gICAgICAgICAgICAvLyBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNhbnZhcyk7XHJcblxyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICBwcmVmaWx0ZXJlZEN1YmVNYXAubWlwbWFwc1tpXS5waXhlbHNbdGFyZ2V0c1tqXV0gPSBwaXhlbHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXJUYXJnZXRUbXAud2lkdGggLz0gMjtcclxuICAgICAgICByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0IC89IDI7XHJcbiAgICAgICAgcmVuZGVyVGFyZ2V0VG1wLmRpcnR5KCk7XHJcbiAgICAgICAgLy8gY29uc29sZS50aW1lRW5kKCdwcmVmaWx0ZXInKTtcclxuICAgIH1cclxuXHJcbiAgICBmcmFtZUJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIHJlbmRlclRhcmdldFRtcC5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIHNreUVudi5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIC8vIFJlbW92ZSBncHUgcmVzb3VyY2UgYWxsdWNhdGVkIGluIHJlbmRlcmVyXHJcbiAgICBub3JtYWxEaXN0cmlidXRpb24uZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgLy8gcmVuZGVyZXIuZGlzcG9zZSgpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXA6IHByZWZpbHRlcmVkQ3ViZU1hcCxcclxuICAgICAgICBicmRmTG9va3VwOiBicmRmTG9va3VwLFxyXG4gICAgICAgIG5vcm1hbERpc3RyaWJ1dGlvbjogbm9ybWFsRGlzdHJpYnV0aW9uLFxyXG4gICAgICAgIG1heE1pcG1hcExldmVsOiBtaXBtYXBOdW1cclxuICAgIH07XHJcbn07XHJcblxyXG5jdWJlbWFwVXRpbC5pbnRlZ3JhdGVCUkRGID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBub3JtYWxEaXN0cmlidXRpb24pIHtcclxuICAgIG5vcm1hbERpc3RyaWJ1dGlvbiA9IG5vcm1hbERpc3RyaWJ1dGlvbiB8fCBjdWJlbWFwVXRpbC5nZW5lcmF0ZU5vcm1hbERpc3RyaWJ1dGlvbigpO1xyXG4gICAgdmFyIGZyYW1lYnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKHtcclxuICAgICAgICBkZXB0aEJ1ZmZlcjogZmFsc2VcclxuICAgIH0pO1xyXG4gICAgdmFyIHBhc3MgPSBuZXcgUGFzcyh7XHJcbiAgICAgICAgZnJhZ21lbnQ6IGludGVncmF0ZUJSREZTaGFkZXJDb2RlXHJcbiAgICB9KTtcclxuXHJcbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgIHdpZHRoOiA1MTIsXHJcbiAgICAgICAgaGVpZ2h0OiAyNTYsXHJcbiAgICAgICAgdHlwZTogVGV4dHVyZS5IQUxGX0ZMT0FULFxyXG4gICAgICAgIHdyYXBTOiBUZXh0dXJlLkNMQU1QX1RPX0VER0UsXHJcbiAgICAgICAgd3JhcFQ6IFRleHR1cmUuQ0xBTVBfVE9fRURHRSxcclxuICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICBtYWdGaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICB1c2VNaXBtYXA6IGZhbHNlXHJcbiAgICB9KTtcclxuICAgIHBhc3Muc2V0VW5pZm9ybSgnbm9ybWFsRGlzdHJpYnV0aW9uJywgbm9ybWFsRGlzdHJpYnV0aW9uKTtcclxuICAgIHBhc3Muc2V0VW5pZm9ybSgndmlld3BvcnRTaXplJywgWzUxMiwgMjU2XSk7XHJcbiAgICBwYXNzLmF0dGFjaE91dHB1dCh0ZXh0dXJlKTtcclxuICAgIHBhc3MucmVuZGVyKHJlbmRlcmVyLCBmcmFtZWJ1ZmZlcik7XHJcblxyXG4gICAgLy8gRklYTUUgT25seSBjaHJvbWUgYW5kIGZpcmVmb3ggY2FuIHJlYWRQaXhlbHMgd2l0aCBmbG9hdCB0eXBlLlxyXG4gICAgLy8gZnJhbWVidWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAvLyB2YXIgcGl4ZWxzID0gbmV3IEZsb2F0MzJBcnJheSg1MTIgKiAyNTYgKiA0KTtcclxuICAgIC8vIHJlbmRlcmVyLmdsLnJlYWRQaXhlbHMoXHJcbiAgICAvLyAgICAgMCwgMCwgdGV4dHVyZS53aWR0aCwgdGV4dHVyZS5oZWlnaHQsXHJcbiAgICAvLyAgICAgVGV4dHVyZS5SR0JBLCBUZXh0dXJlLkZMT0FULCBwaXhlbHNcclxuICAgIC8vICk7XHJcbiAgICAvLyB0ZXh0dXJlLnBpeGVscyA9IHBpeGVscztcclxuICAgIC8vIHRleHR1cmUuZmxpcFkgPSBmYWxzZTtcclxuICAgIC8vIHRleHR1cmUuZGlydHkoKTtcclxuICAgIC8vIGZyYW1lYnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgZnJhbWVidWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgcmV0dXJuIHRleHR1cmU7XHJcbn07XHJcblxyXG5jdWJlbWFwVXRpbC5nZW5lcmF0ZU5vcm1hbERpc3RyaWJ1dGlvbiA9IGZ1bmN0aW9uIChyb3VnaG5lc3NMZXZlbHMsIHNhbXBsZVNpemUpIHtcclxuXHJcbiAgICAvLyBodHRwOi8vaG9sZ2VyLmRhbW1lcnR6Lm9yZy9zdHVmZi9ub3Rlc19IYW1tZXJzbGV5T25IZW1pc3BoZXJlLmh0bWxcclxuICAgIC8vIEdMU0wgbm90IHN1cHBvcnQgYml0IG9wZXJhdGlvbiwgdXNlIGxvb2t1cCBpbnN0ZWFkXHJcbiAgICAvLyBWIC0+IGkgLyBOLCBVIC0+IHJvdWdobmVzc1xyXG4gICAgdmFyIHJvdWdobmVzc0xldmVscyA9IHJvdWdobmVzc0xldmVscyB8fCAyNTY7XHJcbiAgICB2YXIgc2FtcGxlU2l6ZSA9IHNhbXBsZVNpemUgfHwgMTAyNDtcclxuXHJcbiAgICB2YXIgbm9ybWFsRGlzdHJpYnV0aW9uID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgd2lkdGg6IHJvdWdobmVzc0xldmVscyxcclxuICAgICAgICBoZWlnaHQ6IHNhbXBsZVNpemUsXHJcbiAgICAgICAgdHlwZTogVGV4dHVyZS5GTE9BVCxcclxuICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICBtYWdGaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICB3cmFwUzogVGV4dHVyZS5DTEFNUF9UT19FREdFLFxyXG4gICAgICAgIHdyYXBUOiBUZXh0dXJlLkNMQU1QX1RPX0VER0UsXHJcbiAgICAgICAgdXNlTWlwbWFwOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgICB2YXIgcGl4ZWxzID0gbmV3IEZsb2F0MzJBcnJheShzYW1wbGVTaXplICogcm91Z2huZXNzTGV2ZWxzICogNCk7XHJcbiAgICB2YXIgdG1wID0gW107XHJcblxyXG4gICAgLy8gZnVuY3Rpb24gc29ydEZ1bmMoYSwgYikge1xyXG4gICAgLy8gICAgIHJldHVybiBNYXRoLmFicyhiKSAtIE1hdGguYWJzKGEpO1xyXG4gICAgLy8gfVxyXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCByb3VnaG5lc3NMZXZlbHM7IGorKykge1xyXG4gICAgICAgIHZhciByb3VnaG5lc3MgPSBqIC8gcm91Z2huZXNzTGV2ZWxzO1xyXG4gICAgICAgIHZhciBhID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNhbXBsZVNpemU7IGkrKykge1xyXG4gICAgICAgICAgICAvLyBodHRwOi8vaG9sZ2VyLmRhbW1lcnR6Lm9yZy9zdHVmZi9ub3Rlc19IYW1tZXJzbGV5T25IZW1pc3BoZXJlLmh0bWxcclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT3BlcmF0b3JzL0JpdHdpc2VfT3BlcmF0b3JzXHJcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTkwODQ5Mi91bnNpZ25lZC1pbnRlZ2VyLWluLWphdmFzY3JpcHRcclxuICAgICAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xODIyMzUwL3doYXQtaXMtdGhlLWphdmFzY3JpcHQtb3BlcmF0b3ItYW5kLWhvdy1kby15b3UtdXNlLWl0XHJcbiAgICAgICAgICAgIHZhciB5ID0gKGkgPDwgMTYgfCBpID4+PiAxNikgPj4+IDA7XHJcbiAgICAgICAgICAgIHkgPSAoKHkgJiAxNDMxNjU1NzY1KSA8PCAxIHwgKHkgJiAyODYzMzExNTMwKSA+Pj4gMSkgPj4+IDA7XHJcbiAgICAgICAgICAgIHkgPSAoKHkgJiA4NTg5OTM0NTkpIDw8IDIgfCAoeSAmIDM0MzU5NzM4MzYpID4+PiAyKSA+Pj4gMDtcclxuICAgICAgICAgICAgeSA9ICgoeSAmIDI1MjY0NTEzNSkgPDwgNCB8ICh5ICYgNDA0MjMyMjE2MCkgPj4+IDQpID4+PiAwO1xyXG4gICAgICAgICAgICB5ID0gKCgoeSAmIDE2NzExOTM1KSA8PCA4IHwgKHkgJiA0Mjc4MjU1MzYwKSA+Pj4gOCkgPj4+IDApIC8gNDI5NDk2NzI5NjtcclxuXHJcbiAgICAgICAgICAgIC8vIENERlxyXG4gICAgICAgICAgICB2YXIgY29zVGhldGEgPSBNYXRoLnNxcnQoKDEgLSB5KSAvICgxICsgKGEgKiBhIC0gMS4wKSAqIHkpKTtcclxuICAgICAgICAgICAgdG1wW2ldID0gY29zVGhldGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNhbXBsZVNpemU7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gKGkgKiByb3VnaG5lc3NMZXZlbHMgKyBqKSAqIDQ7XHJcbiAgICAgICAgICAgIHZhciBjb3NUaGV0YSA9IHRtcFtpXTtcclxuICAgICAgICAgICAgdmFyIHNpblRoZXRhID0gTWF0aC5zcXJ0KDEuMCAtIGNvc1RoZXRhICogY29zVGhldGEpO1xyXG4gICAgICAgICAgICB2YXIgeCA9IGkgLyBzYW1wbGVTaXplO1xyXG4gICAgICAgICAgICB2YXIgcGhpID0gMi4wICogTWF0aC5QSSAqIHg7XHJcbiAgICAgICAgICAgIHBpeGVsc1tvZmZzZXRdID0gc2luVGhldGEgKiBNYXRoLmNvcyhwaGkpO1xyXG4gICAgICAgICAgICBwaXhlbHNbb2Zmc2V0ICsgMV0gPSBjb3NUaGV0YTtcclxuICAgICAgICAgICAgcGl4ZWxzW29mZnNldCArIDJdID0gc2luVGhldGEgKiBNYXRoLnNpbihwaGkpO1xyXG4gICAgICAgICAgICBwaXhlbHNbb2Zmc2V0ICsgM10gPSAxLjA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbm9ybWFsRGlzdHJpYnV0aW9uLnBpeGVscyA9IHBpeGVscztcclxuXHJcbiAgICByZXR1cm4gbm9ybWFsRGlzdHJpYnV0aW9uO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY3ViZW1hcFV0aWw7XHJcbiIsIi8vIGh0dHBzOi8vZG9jcy51bnJlYWxlbmdpbmUuY29tL2xhdGVzdC9JTlQvRW5naW5lL1JlbmRlcmluZy9MaWdodGluZ0FuZFNoYWRvd3MvQW1iaWVudEN1YmVtYXAvXHJcbmltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcbmltcG9ydCBjdWJlbWFwVXRpbCBmcm9tICcuLi91dGlsL2N1YmVtYXAnO1xyXG5cclxuLyoqXHJcbiAqIEFtYmllbnQgY3ViZW1hcCBsaWdodCBwcm92aWRlcyBzcGVjdWxhciBwYXJ0cyBvZiBJbWFnZSBCYXNlZCBMaWdodGluZy5cclxuICogV2hpY2ggaXMgYSBiYXNpYyByZXF1aXJlbWVudCBmb3IgUGh5c2ljYWxseSBCYXNlZCBSZW5kZXJpbmdcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuQW1iaWVudEN1YmVtYXBcclxuICogQGV4dGVuZHMgY2xheS5MaWdodFxyXG4gKi9cclxudmFyIEFtYmllbnRDdWJlbWFwTGlnaHQgPSBMaWdodC5leHRlbmQoe1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVGV4dHVyZUN1YmV9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5BbWJpZW50Q3ViZW1hcCNcclxuICAgICAqL1xyXG4gICAgY3ViZW1hcDogbnVsbCxcclxuXHJcbiAgICAvLyBUT0RPXHJcbiAgICAvLyByYW5nZTogMTAwLFxyXG5cclxuICAgIGNhc3RTaGFkb3c6IGZhbHNlLFxyXG5cclxuICAgIF9ub3JtYWxEaXN0cmlidXRpb246IG51bGwsXHJcbiAgICBfYnJkZkxvb2t1cDogbnVsbFxyXG5cclxufSwgLyoqIEBsZW5kcyBjbGF5LmxpZ2h0LkFtYmllbnRDdWJlbWFwIyAqLyB7XHJcblxyXG4gICAgdHlwZTogJ0FNQklFTlRfQ1VCRU1BUF9MSUdIVCcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEbyBwcmVmaXRlcmluZyB0aGUgY3ViZW1hcFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTMyXVxyXG4gICAgICovXHJcbiAgICBwcmVmaWx0ZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2l6ZSkge1xyXG4gICAgICAgIGlmICghcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oJ0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QnKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RldmljZSBub3Qgc3VwcG9ydCB0ZXh0dXJlQ3ViZUxvZEVYVCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5fYnJkZkxvb2t1cCkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3JtYWxEaXN0cmlidXRpb24gPSBjdWJlbWFwVXRpbC5nZW5lcmF0ZU5vcm1hbERpc3RyaWJ1dGlvbigpO1xyXG4gICAgICAgICAgICB0aGlzLl9icmRmTG9va3VwID0gY3ViZW1hcFV0aWwuaW50ZWdyYXRlQlJERihyZW5kZXJlciwgdGhpcy5fbm9ybWFsRGlzdHJpYnV0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGN1YmVtYXAgPSB0aGlzLmN1YmVtYXA7XHJcbiAgICAgICAgaWYgKGN1YmVtYXAuX19wcmVmaWx0ZXJlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcmVzdWx0ID0gY3ViZW1hcFV0aWwucHJlZmlsdGVyRW52aXJvbm1lbnRNYXAoXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLCBjdWJlbWFwLCB7XHJcbiAgICAgICAgICAgICAgICBlbmNvZGVSR0JNOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHNpemUsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHNpemVcclxuICAgICAgICAgICAgfSwgdGhpcy5fbm9ybWFsRGlzdHJpYnV0aW9uLCB0aGlzLl9icmRmTG9va3VwXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmN1YmVtYXAgPSByZXN1bHQuZW52aXJvbm1lbnRNYXA7XHJcbiAgICAgICAgdGhpcy5jdWJlbWFwLl9fcHJlZmlsdGVyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBjdWJlbWFwLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRCUkRGTG9va3VwOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JyZGZMb29rdXA7XHJcbiAgICB9LFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBhbWJpZW50Q3ViZW1hcExpZ2h0Q29sb3I6IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSppbnRlbnNpdHksIGNvbG9yWzFdKmludGVuc2l0eSwgY29sb3JbMl0qaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGFtYmllbnRDdWJlbWFwTGlnaHRDdWJlbWFwOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICd0JyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmN1YmVtYXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBhbWJpZW50Q3ViZW1hcExpZ2h0QlJERkxvb2t1cDoge1xyXG4gICAgICAgICAgICB0eXBlOiAndCcsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5fYnJkZkxvb2t1cDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAbmFtZSBjbG9uZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5BbWJpZW50Q3ViZW1hcH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LkFtYmllbnRDdWJlbWFwLnByb3RvdHlwZVxyXG4gICAgICovXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW1iaWVudEN1YmVtYXBMaWdodDtcclxuIiwiaW1wb3J0IExpZ2h0IGZyb20gJy4uL0xpZ2h0JztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XHJcblxyXG4vKipcclxuICogU3BoZXJpY2FsIEhhcm1vbmljIEFtYmllbnQgTGlnaHRcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuQW1iaWVudFNIXHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICovXHJcbnZhciBBbWJpZW50U0hMaWdodCA9IExpZ2h0LmV4dGVuZCh7XHJcblxyXG4gICAgY2FzdFNoYWRvdzogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGhlcmljYWwgSGFybW9uaWMgQ29lZmZpY2llbnRzXHJcbiAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5BbWJpZW50U0gjXHJcbiAgICAgKi9cclxuICAgIGNvZWZmaWNpZW50czogW10sXHJcblxyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9jb2VmZmljaWVudHNUbXBBcnIgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSg5ICogMyk7XHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnQU1CSUVOVF9TSF9MSUdIVCcsXHJcblxyXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xyXG4gICAgICAgIGFtYmllbnRTSExpZ2h0Q29sb3I6IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSAqIGludGVuc2l0eSwgY29sb3JbMV0gKiBpbnRlbnNpdHksIGNvbG9yWzJdICogaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2VmZmljaWVudHNUbXBBcnIgPSBpbnN0YW5jZS5fY29lZmZpY2llbnRzVG1wQXJyO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnN0YW5jZS5jb2VmZmljaWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2VmZmljaWVudHNUbXBBcnJbaV0gPSBpbnN0YW5jZS5jb2VmZmljaWVudHNbaV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29lZmZpY2llbnRzVG1wQXJyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBuYW1lIGNsb25lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmxpZ2h0LkFtYmllbnR9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5BbWJpZW50LnByb3RvdHlwZVxyXG4gICAgICovXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW1iaWVudFNITGlnaHQ7XHJcbiIsImltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4uL2NvcmUvdXRpbCc7XHJcblxyXG52YXIgVGV4dHVyZVBvb2wgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdGhpcy5fcG9vbCA9IHt9O1xyXG5cclxuICAgIHRoaXMuX2FsbG9jYXRlZFRleHR1cmVzID0gW107XHJcbn07XHJcblxyXG5UZXh0dXJlUG9vbC5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IFRleHR1cmVQb29sLFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24gKHBhcmFtZXRlcnMpIHtcclxuICAgICAgICB2YXIga2V5ID0gZ2VuZXJhdGVLZXkocGFyYW1ldGVycyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wb29sLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcG9vbFtrZXldID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsaXN0ID0gdGhpcy5fcG9vbFtrZXldO1xyXG4gICAgICAgIGlmICghbGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICB0aGlzLl9hbGxvY2F0ZWRUZXh0dXJlcy5wdXNoKHRleHR1cmUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxpc3QucG9wKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIHB1dDogZnVuY3Rpb24gKHRleHR1cmUpIHtcclxuICAgICAgICB2YXIga2V5ID0gZ2VuZXJhdGVLZXkodGV4dHVyZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wb29sLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcG9vbFtrZXldID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsaXN0ID0gdGhpcy5fcG9vbFtrZXldO1xyXG4gICAgICAgIGxpc3QucHVzaCh0ZXh0dXJlKTtcclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXI6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXNbaV0uZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3Bvb2wgPSB7fTtcclxuICAgICAgICB0aGlzLl9hbGxvY2F0ZWRUZXh0dXJlcyA9IFtdO1xyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIGRlZmF1bHRQYXJhbXMgPSB7XHJcbiAgICB3aWR0aDogNTEyLFxyXG4gICAgaGVpZ2h0OiA1MTIsXHJcbiAgICB0eXBlOiBnbGVudW0uVU5TSUdORURfQllURSxcclxuICAgIGZvcm1hdDogZ2xlbnVtLlJHQkEsXHJcbiAgICB3cmFwUzogZ2xlbnVtLkNMQU1QX1RPX0VER0UsXHJcbiAgICB3cmFwVDogZ2xlbnVtLkNMQU1QX1RPX0VER0UsXHJcbiAgICBtaW5GaWx0ZXI6IGdsZW51bS5MSU5FQVJfTUlQTUFQX0xJTkVBUixcclxuICAgIG1hZ0ZpbHRlcjogZ2xlbnVtLkxJTkVBUixcclxuICAgIHVzZU1pcG1hcDogdHJ1ZSxcclxuICAgIGFuaXNvdHJvcGljOiAxLFxyXG4gICAgZmxpcFk6IHRydWUsXHJcbiAgICB1bnBhY2tBbGlnbm1lbnQ6IDQsXHJcbiAgICBwcmVtdWx0aXBseUFscGhhOiBmYWxzZVxyXG59O1xyXG5cclxudmFyIGRlZmF1bHRQYXJhbVByb3BMaXN0ID0gT2JqZWN0LmtleXMoZGVmYXVsdFBhcmFtcyk7XHJcblxyXG5mdW5jdGlvbiBnZW5lcmF0ZUtleShwYXJhbWV0ZXJzKSB7XHJcbiAgICB1dGlsLmRlZmF1bHRzV2l0aFByb3BMaXN0KHBhcmFtZXRlcnMsIGRlZmF1bHRQYXJhbXMsIGRlZmF1bHRQYXJhbVByb3BMaXN0KTtcclxuICAgIGZhbGxCYWNrKHBhcmFtZXRlcnMpO1xyXG5cclxuICAgIHZhciBrZXkgPSAnJztcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVmYXVsdFBhcmFtUHJvcExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgbmFtZSA9IGRlZmF1bHRQYXJhbVByb3BMaXN0W2ldO1xyXG4gICAgICAgIHZhciBjaHVuayA9IHBhcmFtZXRlcnNbbmFtZV0udG9TdHJpbmcoKTtcclxuICAgICAgICBrZXkgKz0gY2h1bms7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ga2V5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBmYWxsQmFjayh0YXJnZXQpIHtcclxuXHJcbiAgICB2YXIgSVBPVCA9IGlzUG93ZXJPZlR3byh0YXJnZXQud2lkdGgsIHRhcmdldC5oZWlnaHQpO1xyXG5cclxuICAgIGlmICh0YXJnZXQuZm9ybWF0ID09PSBnbGVudW0uREVQVEhfQ09NUE9ORU5UKSB7XHJcbiAgICAgICAgdGFyZ2V0LnVzZU1pcG1hcCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghSVBPVCB8fCAhdGFyZ2V0LnVzZU1pcG1hcCkge1xyXG4gICAgICAgIGlmICh0YXJnZXQubWluRmlsdGVyID09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9ORUFSRVNUIHx8XHJcbiAgICAgICAgICAgIHRhcmdldC5taW5GaWx0ZXIgPT0gZ2xlbnVtLk5FQVJFU1RfTUlQTUFQX0xJTkVBUikge1xyXG4gICAgICAgICAgICB0YXJnZXQubWluRmlsdGVyID0gZ2xlbnVtLk5FQVJFU1Q7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgdGFyZ2V0Lm1pbkZpbHRlciA9PSBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVIgfHxcclxuICAgICAgICAgICAgdGFyZ2V0Lm1pbkZpbHRlciA9PSBnbGVudW0uTElORUFSX01JUE1BUF9ORUFSRVNUXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRhcmdldC5taW5GaWx0ZXIgPSBnbGVudW0uTElORUFSO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghSVBPVCkge1xyXG4gICAgICAgIHRhcmdldC53cmFwUyA9IGdsZW51bS5DTEFNUF9UT19FREdFO1xyXG4gICAgICAgIHRhcmdldC53cmFwVCA9IGdsZW51bS5DTEFNUF9UT19FREdFO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1Bvd2VyT2ZUd28od2lkdGgsIGhlaWdodCkge1xyXG4gICAgcmV0dXJuICh3aWR0aCAmICh3aWR0aC0xKSkgPT09IDAgJiZcclxuICAgICAgICAgICAgKGhlaWdodCAmIChoZWlnaHQtMSkpID09PSAwO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlUG9vbDtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuc20uZGVwdGgudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA9IHZlYzIoMS4wLCAxLjApO1xcbnVuaWZvcm0gdmVjMiB1dk9mZnNldCA9IHZlYzIoMC4wLCAwLjApO1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52YXJ5aW5nIHZlYzQgdl9WaWV3UG9zaXRpb247XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudm9pZCBtYWluKCl7XFxuIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiNlbmRpZlxcbiB2X1ZpZXdQb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG4gZ2xfUG9zaXRpb24gPSB2X1ZpZXdQb3NpdGlvbjtcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkICogdXZSZXBlYXQgKyB1dk9mZnNldDtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zbS5kZXB0aC5mcmFnbWVudFxcbnZhcnlpbmcgdmVjNCB2X1ZpZXdQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIGZsb2F0IGJpYXMgOiAwLjAwMTtcXG51bmlmb3JtIGZsb2F0IHNsb3BlU2NhbGUgOiAxLjA7XFxudW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XFxudW5pZm9ybSBmbG9hdCBhbHBoYUN1dG9mZjogMC4wO1xcbkBpbXBvcnQgY2xheS51dGlsLmVuY29kZV9mbG9hdFxcbnZvaWQgbWFpbigpe1xcbiBmbG9hdCBkZXB0aCA9IHZfVmlld1Bvc2l0aW9uLnogLyB2X1ZpZXdQb3NpdGlvbi53O1xcbiBpZiAoYWxwaGFDdXRvZmYgPiAwLjApIHtcXG4gaWYgKHRleHR1cmUyRChhbHBoYU1hcCwgdl9UZXhjb29yZCkuYSA8PSBhbHBoYUN1dG9mZikge1xcbiBkaXNjYXJkO1xcbiB9XFxuIH1cXG4jaWZkZWYgVVNFX1ZTTVxcbiBkZXB0aCA9IGRlcHRoICogMC41ICsgMC41O1xcbiBmbG9hdCBtb21lbnQxID0gZGVwdGg7XFxuIGZsb2F0IG1vbWVudDIgPSBkZXB0aCAqIGRlcHRoO1xcbiAjaWZkZWYgU1VQUE9SVF9TVEFOREFSRF9ERVJJVkFUSVZFU1xcbiBmbG9hdCBkeCA9IGRGZHgoZGVwdGgpO1xcbiBmbG9hdCBkeSA9IGRGZHkoZGVwdGgpO1xcbiBtb21lbnQyICs9IDAuMjUqKGR4KmR4K2R5KmR5KTtcXG4gI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQobW9tZW50MSwgbW9tZW50MiwgMC4wLCAxLjApO1xcbiNlbHNlXFxuICNpZmRlZiBTVVBQT1JUX1NUQU5EQVJEX0RFUklWQVRJVkVTXFxuIGZsb2F0IGR4ID0gZEZkeChkZXB0aCk7XFxuIGZsb2F0IGR5ID0gZEZkeShkZXB0aCk7XFxuIGRlcHRoICs9IHNxcnQoZHgqZHggKyBkeSpkeSkgKiBzbG9wZVNjYWxlICsgYmlhcztcXG4gI2Vsc2VcXG4gZGVwdGggKz0gYmlhcztcXG4gI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUZsb2F0KGRlcHRoICogMC41ICsgMC41KTtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zbS5kZWJ1Z19kZXB0aFxcbnVuaWZvcm0gc2FtcGxlcjJEIGRlcHRoTWFwO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbnZvaWQgbWFpbigpIHtcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQoZGVwdGhNYXAsIHZfVGV4Y29vcmQpO1xcbiNpZmRlZiBVU0VfVlNNXFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQodGV4LnJnYiwgMS4wKTtcXG4jZWxzZVxcbiBmbG9hdCBkZXB0aCA9IGRlY29kZUZsb2F0KHRleCk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoZGVwdGgsIGRlcHRoLCBkZXB0aCwgMS4wKTtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zbS5kaXN0YW5jZS52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG52b2lkIG1haW4gKCl7XFxuIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiNlbmRpZlxcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiAsIDEuMCk7XFxuIHZfV29ybGRQb3NpdGlvbiA9ICh3b3JsZCAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApKS54eXo7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc20uZGlzdGFuY2UuZnJhZ21lbnRcXG51bmlmb3JtIHZlYzMgbGlnaHRQb3NpdGlvbjtcXG51bmlmb3JtIGZsb2F0IHJhbmdlIDogMTAwO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxuQGltcG9ydCBjbGF5LnV0aWwuZW5jb2RlX2Zsb2F0XFxudm9pZCBtYWluKCl7XFxuIGZsb2F0IGRpc3QgPSBkaXN0YW5jZShsaWdodFBvc2l0aW9uLCB2X1dvcmxkUG9zaXRpb24pO1xcbiNpZmRlZiBVU0VfVlNNXFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoZGlzdCwgZGlzdCAqIGRpc3QsIDAuMCwgMC4wKTtcXG4jZWxzZVxcbiBkaXN0ID0gZGlzdCAvIHJhbmdlO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVGbG9hdChkaXN0KTtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG5AaW1wb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG5mbG9hdCB0YXBTaGFkb3dNYXAoc2FtcGxlcjJEIG1hcCwgdmVjMiB1diwgZmxvYXQgeil7XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKG1hcCwgdXYpO1xcbiByZXR1cm4gc3RlcCh6LCBkZWNvZGVGbG9hdCh0ZXgpICogMi4wIC0gMS4wKTtcXG59XFxuZmxvYXQgcGNmKHNhbXBsZXIyRCBtYXAsIHZlYzIgdXYsIGZsb2F0IHosIGZsb2F0IHRleHR1cmVTaXplLCB2ZWMyIHNjYWxlKSB7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSB0YXBTaGFkb3dNYXAobWFwLCB1diwgeik7XFxuIHZlYzIgb2Zmc2V0ID0gdmVjMigxLjAgLyB0ZXh0dXJlU2l6ZSkgKiBzY2FsZTtcXG4jaWZkZWYgUENGX0tFUk5FTF9TSVpFXFxuIGZvciAoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBQQ0ZfS0VSTkVMX1NJWkU7IF9pZHhfKyspIHt7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYgKyBvZmZzZXQgKiBwY2ZLZXJuZWxbX2lkeF9dLCB6KTtcXG4gfX1cXG4gcmV0dXJuIHNoYWRvd0NvbnRyaWIgLyBmbG9hdChQQ0ZfS0VSTkVMX1NJWkUgKyAxKTtcXG4jZWxzZVxcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIob2Zmc2V0LngsIDAuMCksIHopO1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIob2Zmc2V0LngsIG9mZnNldC55KSwgeik7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigtb2Zmc2V0LngsIG9mZnNldC55KSwgeik7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigwLjAsIG9mZnNldC55KSwgeik7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigtb2Zmc2V0LngsIDAuMCksIHopO1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIoLW9mZnNldC54LCAtb2Zmc2V0LnkpLCB6KTtcXG4gc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKG9mZnNldC54LCAtb2Zmc2V0LnkpLCB6KTtcXG4gc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKDAuMCwgLW9mZnNldC55KSwgeik7XFxuIHJldHVybiBzaGFkb3dDb250cmliIC8gOS4wO1xcbiNlbmRpZlxcbn1cXG5mbG9hdCBwY2Yoc2FtcGxlcjJEIG1hcCwgdmVjMiB1diwgZmxvYXQgeiwgZmxvYXQgdGV4dHVyZVNpemUpIHtcXG4gcmV0dXJuIHBjZihtYXAsIHV2LCB6LCB0ZXh0dXJlU2l6ZSwgdmVjMigxLjApKTtcXG59XFxuZmxvYXQgY2hlYnlzaGV2VXBwZXJCb3VuZCh2ZWMyIG1vbWVudHMsIGZsb2F0IHope1xcbiBmbG9hdCBwID0gMC4wO1xcbiB6ID0geiAqIDAuNSArIDAuNTtcXG4gaWYgKHogPD0gbW9tZW50cy54KSB7XFxuIHAgPSAxLjA7XFxuIH1cXG4gZmxvYXQgdmFyaWFuY2UgPSBtb21lbnRzLnkgLSBtb21lbnRzLnggKiBtb21lbnRzLng7XFxuIHZhcmlhbmNlID0gbWF4KHZhcmlhbmNlLCAwLjAwMDAwMDEpO1xcbiBmbG9hdCBtRCA9IG1vbWVudHMueCAtIHo7XFxuIGZsb2F0IHBNYXggPSB2YXJpYW5jZSAvICh2YXJpYW5jZSArIG1EICogbUQpO1xcbiBwTWF4ID0gY2xhbXAoKHBNYXgtMC40KS8oMS4wLTAuNCksIDAuMCwgMS4wKTtcXG4gcmV0dXJuIG1heChwLCBwTWF4KTtcXG59XFxuZmxvYXQgY29tcHV0ZVNoYWRvd0NvbnRyaWIoXFxuIHNhbXBsZXIyRCBtYXAsIG1hdDQgbGlnaHRWUE0sIHZlYzMgcG9zaXRpb24sIGZsb2F0IHRleHR1cmVTaXplLCB2ZWMyIHNjYWxlLCB2ZWMyIG9mZnNldFxcbikge1xcbiB2ZWM0IHBvc0luTGlnaHRTcGFjZSA9IGxpZ2h0VlBNICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gcG9zSW5MaWdodFNwYWNlLnh5eiAvPSBwb3NJbkxpZ2h0U3BhY2UudztcXG4gZmxvYXQgeiA9IHBvc0luTGlnaHRTcGFjZS56O1xcbiBpZihhbGwoZ3JlYXRlclRoYW4ocG9zSW5MaWdodFNwYWNlLnh5eiwgdmVjMygtMC45OSwgLTAuOTksIC0xLjApKSkgJiZcXG4gYWxsKGxlc3NUaGFuKHBvc0luTGlnaHRTcGFjZS54eXosIHZlYzMoMC45OSwgMC45OSwgMS4wKSkpKXtcXG4gdmVjMiB1diA9IChwb3NJbkxpZ2h0U3BhY2UueHkrMS4wKSAvIDIuMDtcXG4gI2lmZGVmIFVTRV9WU01cXG4gdmVjMiBtb21lbnRzID0gdGV4dHVyZTJEKG1hcCwgdXYgKiBzY2FsZSArIG9mZnNldCkueHk7XFxuIHJldHVybiBjaGVieXNoZXZVcHBlckJvdW5kKG1vbWVudHMsIHopO1xcbiAjZWxzZVxcbiByZXR1cm4gcGNmKG1hcCwgdXYgKiBzY2FsZSArIG9mZnNldCwgeiwgdGV4dHVyZVNpemUsIHNjYWxlKTtcXG4gI2VuZGlmXFxuIH1cXG4gcmV0dXJuIDEuMDtcXG59XFxuZmxvYXQgY29tcHV0ZVNoYWRvd0NvbnRyaWIoc2FtcGxlcjJEIG1hcCwgbWF0NCBsaWdodFZQTSwgdmVjMyBwb3NpdGlvbiwgZmxvYXQgdGV4dHVyZVNpemUpIHtcXG4gcmV0dXJuIGNvbXB1dGVTaGFkb3dDb250cmliKG1hcCwgbGlnaHRWUE0sIHBvc2l0aW9uLCB0ZXh0dXJlU2l6ZSwgdmVjMigxLjApLCB2ZWMyKDAuMCkpO1xcbn1cXG5mbG9hdCBjb21wdXRlU2hhZG93Q29udHJpYk9tbmkoc2FtcGxlckN1YmUgbWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgcmFuZ2UpXFxue1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKGRpcmVjdGlvbik7XFxuIHZlYzQgc2hhZG93VGV4ID0gdGV4dHVyZUN1YmUobWFwLCBkaXJlY3Rpb24pO1xcbiNpZmRlZiBVU0VfVlNNXFxuIHZlYzIgbW9tZW50cyA9IHNoYWRvd1RleC54eTtcXG4gZmxvYXQgdmFyaWFuY2UgPSBtb21lbnRzLnkgLSBtb21lbnRzLnggKiBtb21lbnRzLng7XFxuIGZsb2F0IG1EID0gbW9tZW50cy54IC0gZGlzdDtcXG4gZmxvYXQgcCA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgbUQgKiBtRCk7XFxuIGlmKG1vbWVudHMueCArIDAuMDAxIDwgZGlzdCl7XFxuIHJldHVybiBjbGFtcChwLCAwLjAsIDEuMCk7XFxuIH1lbHNle1xcbiByZXR1cm4gMS4wO1xcbiB9XFxuI2Vsc2VcXG4gcmV0dXJuIHN0ZXAoZGlzdCwgKGRlY29kZUZsb2F0KHNoYWRvd1RleCkgKyAwLjAwMDIpICogcmFuZ2UpO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnBsdWdpbi5jb21wdXRlX3NoYWRvd19tYXBcXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVCkgfHwgZGVmaW5lZChESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpIHx8IGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiNpZmRlZiBTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVFxcbnVuaWZvcm0gc2FtcGxlcjJEIHNwb3RMaWdodFNoYWRvd01hcHNbU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gbWF0NCBzcG90TGlnaHRNYXRyaWNlc1tTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBmbG9hdCBzcG90TGlnaHRTaGFkb3dNYXBTaXplc1tTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxuI2VuZGlmXFxuI2lmZGVmIERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVFxcbiNpZiBkZWZpbmVkKFNIQURPV19DQVNDQURFKVxcbnVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzWzFdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXNbU0hBRE9XX0NBU0NBREVdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gZmxvYXQgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzWzFdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gZmxvYXQgc2hhZG93Q2FzY2FkZUNsaXBzTmVhcltTSEFET1dfQ0FTQ0FERV06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBmbG9hdCBzaGFkb3dDYXNjYWRlQ2xpcHNGYXJbU0hBRE9XX0NBU0NBREVdOnVuY29uZmlndXJhYmxlO1xcbiNlbHNlXFxudW5pZm9ybSBzYW1wbGVyMkQgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHNbRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIG1hdDQgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzW0RJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBmbG9hdCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXNbRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG4jZW5kaWZcXG4jZW5kaWZcXG4jaWZkZWYgUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UXFxudW5pZm9ybSBzYW1wbGVyQ3ViZSBwb2ludExpZ2h0U2hhZG93TWFwc1tQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbiNlbmRpZlxcbnVuaWZvcm0gYm9vbCBzaGFkb3dFbmFibGVkIDogdHJ1ZTtcXG4jaWZkZWYgUENGX0tFUk5FTF9TSVpFXFxudW5pZm9ybSB2ZWMyIHBjZktlcm5lbFtQQ0ZfS0VSTkVMX1NJWkVdO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG52b2lkIGNvbXB1dGVTaGFkb3dPZlNwb3RMaWdodHModmVjMyBwb3NpdGlvbiwgaW5vdXQgZmxvYXQgc2hhZG93Q29udHJpYnNbU1BPVF9MSUdIVF9DT1VOVF0gKSB7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWI7XFxuIGZvcihpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmliID0gY29tcHV0ZVNoYWRvd0NvbnRyaWIoXFxuIHNwb3RMaWdodFNoYWRvd01hcHNbX2lkeF9dLCBzcG90TGlnaHRNYXRyaWNlc1tfaWR4X10sIHBvc2l0aW9uLFxcbiBzcG90TGlnaHRTaGFkb3dNYXBTaXplc1tfaWR4X11cXG4gKTtcXG4gc2hhZG93Q29udHJpYnNbX2lkeF9dID0gc2hhZG93Q29udHJpYjtcXG4gfX1cXG4gZm9yKGludCBfaWR4XyA9IFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XyA8IFNQT1RfTElHSFRfQ09VTlQ7IF9pZHhfKyspe3tcXG4gc2hhZG93Q29udHJpYnNbX2lkeF9dID0gMS4wO1xcbiB9fVxcbn1cXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuI2lmZGVmIFNIQURPV19DQVNDQURFXFxudm9pZCBjb21wdXRlU2hhZG93T2ZEaXJlY3Rpb25hbExpZ2h0cyh2ZWMzIHBvc2l0aW9uLCBpbm91dCBmbG9hdCBzaGFkb3dDb250cmlic1tESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF0pe1xcbiBmbG9hdCBkZXB0aCA9ICgyLjAgKiBnbF9GcmFnQ29vcmQueiAtIGdsX0RlcHRoUmFuZ2UubmVhciAtIGdsX0RlcHRoUmFuZ2UuZmFyKVxcbiAvIChnbF9EZXB0aFJhbmdlLmZhciAtIGdsX0RlcHRoUmFuZ2UubmVhcik7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWI7XFxuIHNoYWRvd0NvbnRyaWJzWzBdID0gMS4wO1xcbiBmb3IgKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgU0hBRE9XX0NBU0NBREU7IF9pZHhfKyspIHt7XFxuIGlmIChcXG4gZGVwdGggPj0gc2hhZG93Q2FzY2FkZUNsaXBzTmVhcltfaWR4X10gJiZcXG4gZGVwdGggPD0gc2hhZG93Q2FzY2FkZUNsaXBzRmFyW19pZHhfXVxcbiApIHtcXG4gc2hhZG93Q29udHJpYiA9IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwc1swXSwgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzW19pZHhfXSwgcG9zaXRpb24sXFxuIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBTaXplc1swXSxcXG4gdmVjMigxLjAgLyBmbG9hdChTSEFET1dfQ0FTQ0FERSksIDEuMCksXFxuIHZlYzIoZmxvYXQoX2lkeF8pIC8gZmxvYXQoU0hBRE9XX0NBU0NBREUpLCAwLjApXFxuICk7XFxuIHNoYWRvd0NvbnRyaWJzWzBdID0gc2hhZG93Q29udHJpYjtcXG4gfVxcbiB9fVxcbiBmb3IoaW50IF9pZHhfID0gRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XyA8IERJUkVDVElPTkFMX0xJR0hUX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmlic1tfaWR4X10gPSAxLjA7XFxuIH19XFxufVxcbiNlbHNlXFxudm9pZCBjb21wdXRlU2hhZG93T2ZEaXJlY3Rpb25hbExpZ2h0cyh2ZWMzIHBvc2l0aW9uLCBpbm91dCBmbG9hdCBzaGFkb3dDb250cmlic1tESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF0pe1xcbiBmbG9hdCBzaGFkb3dDb250cmliO1xcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQ7IF9pZHhfKyspIHt7XFxuIHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYihcXG4gZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHNbX2lkeF9dLCBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXNbX2lkeF9dLCBwb3NpdGlvbixcXG4gZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzW19pZHhfXVxcbiApO1xcbiBzaGFkb3dDb250cmlic1tfaWR4X10gPSBzaGFkb3dDb250cmliO1xcbiB9fVxcbiBmb3IoaW50IF9pZHhfID0gRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XyA8IERJUkVDVElPTkFMX0xJR0hUX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmlic1tfaWR4X10gPSAxLjA7XFxuIH19XFxufVxcbiNlbmRpZlxcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG52b2lkIGNvbXB1dGVTaGFkb3dPZlBvaW50TGlnaHRzKHZlYzMgcG9zaXRpb24sIGlub3V0IGZsb2F0IHNoYWRvd0NvbnRyaWJzW1BPSU5UX0xJR0hUX0NPVU5UXSApe1xcbiB2ZWMzIGxpZ2h0UG9zaXRpb247XFxuIHZlYzMgZGlyZWN0aW9uO1xcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQ7IF9pZHhfKyspIHt7XFxuIGxpZ2h0UG9zaXRpb24gPSBwb2ludExpZ2h0UG9zaXRpb25bX2lkeF9dO1xcbiBkaXJlY3Rpb24gPSBwb3NpdGlvbiAtIGxpZ2h0UG9zaXRpb247XFxuIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IGNvbXB1dGVTaGFkb3dDb250cmliT21uaShwb2ludExpZ2h0U2hhZG93TWFwc1tfaWR4X10sIGRpcmVjdGlvbiwgcG9pbnRMaWdodFJhbmdlW19pZHhfXSk7XFxuIH19XFxuIGZvcihpbnQgX2lkeF8gPSBQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQ7IF9pZHhfIDwgUE9JTlRfTElHSFRfQ09VTlQ7IF9pZHhfKyspIHt7XFxuIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IDEuMDtcXG4gfX1cXG59XFxuI2VuZGlmXFxuI2VuZGlmXFxuQGVuZFwiO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgRnJ1c3R1bSBmcm9tICcuLi9tYXRoL0ZydXN0dW0nO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgUmVuZGVyZXIgZnJvbSAnLi4vUmVuZGVyZXInO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuLi9UZXh0dXJlQ3ViZSc7XHJcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tICcuLi9jYW1lcmEvUGVyc3BlY3RpdmUnO1xyXG5pbXBvcnQgT3J0aG9DYW1lcmEgZnJvbSAnLi4vY2FtZXJhL09ydGhvZ3JhcGhpYyc7XHJcblxyXG5pbXBvcnQgUGFzcyBmcm9tICcuLi9jb21wb3NpdG9yL1Bhc3MnO1xyXG5pbXBvcnQgVGV4dHVyZVBvb2wgZnJvbSAnLi4vY29tcG9zaXRvci9UZXh0dXJlUG9vbCc7XHJcblxyXG5pbXBvcnQgbWF0NCBmcm9tICcuLi9nbG1hdHJpeC9tYXQ0JztcclxuXHJcbnZhciB0YXJnZXRzID0gWydweCcsICdueCcsICdweScsICdueScsICdweicsICdueiddO1xyXG5cclxuaW1wb3J0IHNoYWRvd21hcEVzc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9zaGFkb3dtYXAuZ2xzbC5qcyc7XHJcblNoYWRlclsnaW1wb3J0J10oc2hhZG93bWFwRXNzbCk7XHJcblxyXG5mdW5jdGlvbiBnZXREZXB0aE1hdGVyaWFsVW5pZm9ybShyZW5kZXJhYmxlLCBkZXB0aE1hdGVyaWFsLCBzeW1ib2wpIHtcclxuICAgIGlmIChzeW1ib2wgPT09ICdhbHBoYU1hcCcpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ2RpZmZ1c2VNYXAnKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ2FscGhhQ3V0b2ZmJykge1xyXG4gICAgICAgIGlmIChyZW5kZXJhYmxlLm1hdGVyaWFsLmlzRGVmaW5lZCgnZnJhZ21lbnQnLCAnQUxQSEFfVEVTVCcpXHJcbiAgICAgICAgICAgICYmIHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdkaWZmdXNlTWFwJylcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdmFyIGFscGhhQ3V0b2ZmID0gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ2FscGhhQ3V0b2ZmJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBhbHBoYUN1dG9mZiB8fCAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3V2UmVwZWF0Jykge1xyXG4gICAgICAgIHJldHVybiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgndXZSZXBlYXQnKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3V2T2Zmc2V0Jykge1xyXG4gICAgICAgIHJldHVybiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgndXZPZmZzZXQnKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBkZXB0aE1hdGVyaWFsLmdldChzeW1ib2wpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0RlcHRoTWF0ZXJpYWxDaGFuZ2VkKHJlbmRlcmFibGUsIHByZXZSZW5kZXJhYmxlKSB7XHJcbiAgICB2YXIgbWF0QSA9IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICB2YXIgbWF0QiA9IHByZXZSZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgcmV0dXJuIG1hdEEuZ2V0KCdkaWZmdXNlTWFwJykgIT09IG1hdEIuZ2V0KCdkaWZmdXNlTWFwJylcclxuICAgICAgICB8fCAobWF0QS5nZXQoJ2FscGhhQ3V0b2ZmJykgfHwgMCkgIT09IChtYXRCLmdldCgnYWxwaGFDdXRvZmYnKSB8fCAwKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFBhc3MgcmVuZGVyaW5nIHNoYWRvdyBtYXAuXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnByZVBhc3MuU2hhZG93TWFwXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICB2YXIgc2hhZG93TWFwUGFzcyA9IG5ldyBjbGF5LnByZVBhc3MuU2hhZG93TWFwKHtcclxuICogICAgICAgICBzb2Z0U2hhZG93OiBjbGF5LnByZVBhc3MuU2hhZG93TWFwLlZTTVxyXG4gKiAgICAgfSk7XHJcbiAqICAgICAuLi5cclxuICogICAgIGFuaW1hdGlvbi5vbignZnJhbWUnLCBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcbiAqICAgICAgICAgc2hhZG93TWFwUGFzcy5yZW5kZXIocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpO1xyXG4gKiAgICAgICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTtcclxuICogICAgIH0pO1xyXG4gKi9cclxudmFyIFNoYWRvd01hcFBhc3MgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LnByZVBhc3MuU2hhZG93TWFwIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU29mdCBzaGFkb3cgdGVjaG5pcXVlLlxyXG4gICAgICAgICAqIENhbiBiZSB7QGxpbmsgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5QQ0Z9IG9yIHtAbGluayBjbGF5LnByZVBhc3MuU2hhZG93TWFwLlZTTX1cclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNvZnRTaGFkb3c6IFNoYWRvd01hcFBhc3MuUENGLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTb2Z0IHNoYWRvdyBibHVyIHNpemVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNoYWRvd0JsdXI6IDEuMCxcclxuXHJcbiAgICAgICAgbGlnaHRGcnVzdHVtQmlhczogJ2F1dG8nLFxyXG5cclxuICAgICAgICBrZXJuZWxQQ0Y6IG5ldyBGbG9hdDMyQXJyYXkoW1xyXG4gICAgICAgICAgICAxLCAwLFxyXG4gICAgICAgICAgICAxLCAxLFxyXG4gICAgICAgICAgICAtMSwgMSxcclxuICAgICAgICAgICAgMCwgMSxcclxuICAgICAgICAgICAgLTEsIDAsXHJcbiAgICAgICAgICAgIC0xLCAtMSxcclxuICAgICAgICAgICAgMSwgLTEsXHJcbiAgICAgICAgICAgIDAsIC0xXHJcbiAgICAgICAgXSksXHJcblxyXG4gICAgICAgIHByZWNpc2lvbjogJ2hpZ2hwJyxcclxuXHJcbiAgICAgICAgX2xhc3RSZW5kZXJOb3RDYXN0U2hhZG93OiBmYWxzZSxcclxuXHJcbiAgICAgICAgX2ZyYW1lQnVmZmVyOiBuZXcgRnJhbWVCdWZmZXIoKSxcclxuXHJcbiAgICAgICAgX3RleHR1cmVzOiB7fSxcclxuICAgICAgICBfc2hhZG93TWFwTnVtYmVyOiB7XHJcbiAgICAgICAgICAgICdQT0lOVF9MSUdIVCc6IDAsXHJcbiAgICAgICAgICAgICdESVJFQ1RJT05BTF9MSUdIVCc6IDAsXHJcbiAgICAgICAgICAgICdTUE9UX0xJR0hUJzogMFxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9kZXB0aE1hdGVyaWFsczoge30sXHJcbiAgICAgICAgX2Rpc3RhbmNlTWF0ZXJpYWxzOiB7fSxcclxuXHJcbiAgICAgICAgX3JlY2VpdmVyczogW10sXHJcbiAgICAgICAgX2xpZ2h0c0Nhc3RTaGFkb3c6IFtdLFxyXG5cclxuICAgICAgICBfbGlnaHRDYW1lcmFzOiB7fSxcclxuICAgICAgICBfbGlnaHRNYXRlcmlhbHM6IHt9LFxyXG5cclxuICAgICAgICBfdGV4dHVyZVBvb2w6IG5ldyBUZXh0dXJlUG9vbCgpXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBHYXVzc2lhbiBmaWx0ZXIgcGFzcyBmb3IgVlNNXHJcbiAgICB0aGlzLl9nYXVzc2lhblBhc3NIID0gbmV3IFBhc3Moe1xyXG4gICAgICAgIGZyYWdtZW50OiBTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IuZ2F1c3NpYW5fYmx1cicpXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2dhdXNzaWFuUGFzc1YgPSBuZXcgUGFzcyh7XHJcbiAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkuY29tcG9zaXRvci5nYXVzc2lhbl9ibHVyJylcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzSC5zZXRVbmlmb3JtKCdibHVyU2l6ZScsIHRoaXMuc2hhZG93Qmx1cik7XHJcbiAgICB0aGlzLl9nYXVzc2lhblBhc3NILnNldFVuaWZvcm0oJ2JsdXJEaXInLCAwLjApO1xyXG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzVi5zZXRVbmlmb3JtKCdibHVyU2l6ZScsIHRoaXMuc2hhZG93Qmx1cik7XHJcbiAgICB0aGlzLl9nYXVzc2lhblBhc3NWLnNldFVuaWZvcm0oJ2JsdXJEaXInLCAxLjApO1xyXG5cclxuICAgIHRoaXMuX291dHB1dERlcHRoUGFzcyA9IG5ldyBQYXNzKHtcclxuICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5zbS5kZWJ1Z19kZXB0aCcpXHJcbiAgICB9KTtcclxufSwge1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZW5kZXIgc2NlbmUgdG8gc2hhZG93IHRleHR1cmVzXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtICB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQ2FtZXJhfSBzY2VuZUNhbWVyYVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW25vdFVwZGF0ZVNjZW5lPWZhbHNlXVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIHJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgc2NlbmVDYW1lcmEsIG5vdFVwZGF0ZVNjZW5lKSB7XHJcbiAgICAgICAgaWYgKCFzY2VuZUNhbWVyYSkge1xyXG4gICAgICAgICAgICBzY2VuZUNhbWVyYSA9IHNjZW5lLmdldE1haW5DYW1lcmEoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXInLCB0aGlzLCByZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhKTtcclxuICAgICAgICB0aGlzLl9yZW5kZXJTaGFkb3dQYXNzKHJlbmRlcmVyLCBzY2VuZSwgc2NlbmVDYW1lcmEsIG5vdFVwZGF0ZVNjZW5lKTtcclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2FmdGVycmVuZGVyJywgdGhpcywgcmVuZGVyZXIsIHNjZW5lLCBzY2VuZUNhbWVyYSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVidWcgcmVuZGVyaW5nIG9mIHNoYWRvdyB0ZXh0dXJlc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gc2l6ZVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIHJlbmRlckRlYnVnOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNpemUpIHtcclxuICAgICAgICByZW5kZXJlci5zYXZlQ2xlYXIoKTtcclxuICAgICAgICB2YXIgdmlld3BvcnQgPSByZW5kZXJlci52aWV3cG9ydDtcclxuICAgICAgICB2YXIgeCA9IDAsIHkgPSAwO1xyXG4gICAgICAgIHZhciB3aWR0aCA9IHNpemUgfHwgdmlld3BvcnQud2lkdGggLyA0O1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSB3aWR0aDtcclxuICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXREZXB0aFBhc3MubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfVlNNJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXREZXB0aFBhc3MubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9WU00nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl90ZXh0dXJlcykge1xyXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW25hbWVdO1xyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCh4LCB5LCB3aWR0aCAqIHRleHR1cmUud2lkdGggLyB0ZXh0dXJlLmhlaWdodCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0RGVwdGhQYXNzLnNldFVuaWZvcm0oJ2RlcHRoTWFwJywgdGV4dHVyZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dERlcHRoUGFzcy5yZW5kZXIocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB4ICs9IHdpZHRoICogdGV4dHVyZS53aWR0aCAvIHRleHR1cmUuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCh2aWV3cG9ydCk7XHJcbiAgICAgICAgcmVuZGVyZXIucmVzdG9yZUNsZWFyKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVSZWNlaXZlcnM6IGZ1bmN0aW9uIChyZW5kZXJlciwgbWVzaCkge1xyXG4gICAgICAgIGlmIChtZXNoLnJlY2VpdmVTaGFkb3cpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVjZWl2ZXJzLnB1c2gobWVzaCk7XHJcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuc2V0KCdzaGFkb3dFbmFibGVkJywgMSk7XHJcblxyXG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLnNldCgncGNmS2VybmVsJywgdGhpcy5rZXJuZWxQQ0YpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC5zZXQoJ3NoYWRvd0VuYWJsZWQnLCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XHJcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfVlNNJyk7XHJcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1BDRl9LRVJORUxfU0laRScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xyXG4gICAgICAgICAgICB2YXIga2VybmVsUENGID0gdGhpcy5rZXJuZWxQQ0Y7XHJcbiAgICAgICAgICAgIGlmIChrZXJuZWxQQ0YgJiYga2VybmVsUENGLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1BDRl9LRVJORUxfU0laRScsIGtlcm5lbFBDRi5sZW5ndGggLyAyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1BDRl9LRVJORUxfU0laRScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNjZW5lLnRyYXZlcnNlKGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl91cGRhdGVSZWNlaXZlcnMocmVuZGVyZXIsIHJlbmRlcmFibGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBsaWdodCA9IHNjZW5lLmxpZ2h0c1tpXTtcclxuICAgICAgICAgICAgaWYgKGxpZ2h0LmNhc3RTaGFkb3cgJiYgIWxpZ2h0LmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRzQ2FzdFNoYWRvdy5wdXNoKGxpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3JlbmRlclNoYWRvd1Bhc3M6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhLCBub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgIC8vIHJlc2V0XHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl9zaGFkb3dNYXBOdW1iZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2hhZG93TWFwTnVtYmVyW25hbWVdID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fbGlnaHRzQ2FzdFNoYWRvdy5sZW5ndGggPSAwO1xyXG4gICAgICAgIHRoaXMuX3JlY2VpdmVycy5sZW5ndGggPSAwO1xyXG5cclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIGlmICghbm90VXBkYXRlU2NlbmUpIHtcclxuICAgICAgICAgICAgc2NlbmUudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2VuZUNhbWVyYSkge1xyXG4gICAgICAgICAgICBzY2VuZUNhbWVyYS51cGRhdGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNjZW5lLnVwZGF0ZUxpZ2h0cygpO1xyXG4gICAgICAgIHRoaXMuX3VwZGF0ZShyZW5kZXJlciwgc2NlbmUpO1xyXG5cclxuICAgICAgICAvLyBOZWVkcyB0byB1cGRhdGUgdGhlIHJlY2VpdmVycyBhZ2FpbiBpZiBzaGFkb3dzIGNvbWUgZnJvbSAxIHRvIDAuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9saWdodHNDYXN0U2hhZG93Lmxlbmd0aCAmJiB0aGlzLl9sYXN0UmVuZGVyTm90Q2FzdFNoYWRvdykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9sYXN0UmVuZGVyTm90Q2FzdFNoYWRvdyA9IHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cgPT09IDA7XHJcblxyXG4gICAgICAgIF9nbC5lbmFibGUoX2dsLkRFUFRIX1RFU1QpO1xyXG4gICAgICAgIF9nbC5kZXB0aE1hc2sodHJ1ZSk7XHJcbiAgICAgICAgX2dsLmRpc2FibGUoX2dsLkJMRU5EKTtcclxuXHJcbiAgICAgICAgLy8gQ2xlYXIgd2l0aCBoaWdoLXosIHNvIHRoZSBwYXJ0IG5vdCByZW5kZXJlZCB3aWxsIG5vdCBiZWVuIHNoYWRvd2VkXHJcbiAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIC8vIFRPRE8gcmVzdG9yZVxyXG4gICAgICAgIF9nbC5jbGVhckNvbG9yKDEuMCwgMS4wLCAxLjAsIDEuMCk7XHJcblxyXG4gICAgICAgIC8vIFNoYWRvdyB1bmlmb3Jtc1xyXG4gICAgICAgIHZhciBzcG90TGlnaHRTaGFkb3dNYXBzID0gW107XHJcbiAgICAgICAgdmFyIHNwb3RMaWdodE1hdHJpY2VzID0gW107XHJcbiAgICAgICAgdmFyIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzID0gW107XHJcbiAgICAgICAgdmFyIGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlcyA9IFtdO1xyXG4gICAgICAgIHZhciBzaGFkb3dDYXNjYWRlQ2xpcHMgPSBbXTtcclxuICAgICAgICB2YXIgcG9pbnRMaWdodFNoYWRvd01hcHMgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIGRpckxpZ2h0SGFzQ2FzY2FkZTtcclxuICAgICAgICAvLyBDcmVhdGUgdGV4dHVyZXMgZm9yIHNoYWRvdyBtYXBcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGxpZ2h0ID0gdGhpcy5fbGlnaHRzQ2FzdFNoYWRvd1tpXTtcclxuICAgICAgICAgICAgaWYgKGxpZ2h0LnR5cGUgPT09ICdESVJFQ1RJT05BTF9MSUdIVCcpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGlyTGlnaHRIYXNDYXNjYWRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdPbmx5IG9uZSBkaXJlZWN0aW9uYWwgbGlnaHQgc3VwcG9ydGVkIHdpdGggc2hhZG93IGNhc2NhZGUnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChsaWdodC5zaGFkb3dDYXNjYWRlID4gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignU3VwcG9ydCBhdCBtb3N0IDQgY2FzY2FkZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGxpZ2h0LnNoYWRvd0Nhc2NhZGUgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlyTGlnaHRIYXNDYXNjYWRlID0gbGlnaHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJEaXJlY3Rpb25hbExpZ2h0U2hhZG93KFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lQ2FtZXJhLFxyXG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwcyxcclxuICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAobGlnaHQudHlwZSA9PT0gJ1NQT1RfTElHSFQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclNwb3RMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlcixcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZSxcclxuICAgICAgICAgICAgICAgICAgICBsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBzcG90TGlnaHRNYXRyaWNlcyxcclxuICAgICAgICAgICAgICAgICAgICBzcG90TGlnaHRTaGFkb3dNYXBzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxpZ2h0LnR5cGUgPT09ICdQT0lOVF9MSUdIVCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyUG9pbnRMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlcixcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZSxcclxuICAgICAgICAgICAgICAgICAgICBsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBwb2ludExpZ2h0U2hhZG93TWFwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fc2hhZG93TWFwTnVtYmVyW2xpZ2h0LnR5cGVdKys7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBsaWdodFR5cGUgaW4gdGhpcy5fc2hhZG93TWFwTnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHZhciBudW1iZXIgPSB0aGlzLl9zaGFkb3dNYXBOdW1iZXJbbGlnaHRUeXBlXTtcclxuICAgICAgICAgICAgdmFyIGtleSA9IGxpZ2h0VHlwZSArICdfU0hBRE9XTUFQX0NPVU5UJztcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9yZWNlaXZlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fcmVjZWl2ZXJzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5mcmFnbWVudERlZmluZXNba2V5XSAhPT0gbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlciA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsIGtleSwgbnVtYmVyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsIGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50Jywga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9yZWNlaXZlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG1lc2ggPSB0aGlzLl9yZWNlaXZlcnNbaV07XHJcbiAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IG1lc2gubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIGlmIChkaXJMaWdodEhhc0Nhc2NhZGUpIHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnU0hBRE9XX0NBU0NBREUnLCBkaXJMaWdodEhhc0Nhc2NhZGUuc2hhZG93Q2FzY2FkZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnU0hBRE9XX0NBU0NBREUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNoYWRvd1VuaWZvcm1zID0gc2NlbmUuc2hhZG93VW5pZm9ybXM7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGdldFNpemUodGV4dHVyZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZS5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXMgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcy5tYXAoZ2V0U2l6ZSk7XHJcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzID0geyB2YWx1ZTogZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMsIHR5cGU6ICd0dicgfTtcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzID0geyB2YWx1ZTogZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzLCB0eXBlOiAnbTR2JyB9O1xyXG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5kaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXMgPSB7IHZhbHVlOiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXMsIHR5cGU6ICcxZnYnIH07XHJcbiAgICAgICAgICAgIGlmIChkaXJMaWdodEhhc0Nhc2NhZGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyID0gc2hhZG93Q2FzY2FkZUNsaXBzLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93Q2FzY2FkZUNsaXBzRmFyID0gc2hhZG93Q2FzY2FkZUNsaXBzLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgc2hhZG93Q2FzY2FkZUNsaXBzRmFyLnNoaWZ0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSBmcm9tIGZhciB0byBuZWFyXHJcbiAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyLnJldmVyc2UoKTtcclxuICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwc0Zhci5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcy5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc2hhZG93Q2FzY2FkZUNsaXBzTmVhciA9IHsgdmFsdWU6IHNoYWRvd0Nhc2NhZGVDbGlwc05lYXIsIHR5cGU6ICcxZnYnIH07XHJcbiAgICAgICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zaGFkb3dDYXNjYWRlQ2xpcHNGYXIgPSB7IHZhbHVlOiBzaGFkb3dDYXNjYWRlQ2xpcHNGYXIsIHR5cGU6ICcxZnYnIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzcG90TGlnaHRTaGFkb3dNYXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIHNwb3RMaWdodFNoYWRvd01hcFNpemVzID0gc3BvdExpZ2h0U2hhZG93TWFwcy5tYXAoZ2V0U2l6ZSk7XHJcbiAgICAgICAgICAgIHZhciBzaGFkb3dVbmlmb3JtcyA9IHNjZW5lLnNoYWRvd1VuaWZvcm1zO1xyXG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zcG90TGlnaHRTaGFkb3dNYXBzID0geyB2YWx1ZTogc3BvdExpZ2h0U2hhZG93TWFwcywgdHlwZTogJ3R2JyB9O1xyXG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zcG90TGlnaHRNYXRyaWNlcyA9IHsgdmFsdWU6IHNwb3RMaWdodE1hdHJpY2VzLCB0eXBlOiAnbTR2JyB9O1xyXG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5zcG90TGlnaHRTaGFkb3dNYXBTaXplcyA9IHsgdmFsdWU6IHNwb3RMaWdodFNoYWRvd01hcFNpemVzLCB0eXBlOiAnMWZ2JyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBvaW50TGlnaHRTaGFkb3dNYXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMucG9pbnRMaWdodFNoYWRvd01hcHMgPSB7IHZhbHVlOiBwb2ludExpZ2h0U2hhZG93TWFwcywgdHlwZTogJ3R2JyB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcmVuZGVyRGlyZWN0aW9uYWxMaWdodFNoYWRvdzogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIHNwbGl0RnJ1c3R1bSA9IG5ldyBGcnVzdHVtKCk7XHJcbiAgICAgICAgdmFyIHNwbGl0UHJvak1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgdmFyIGNyb3BCQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdmFyIGNyb3BNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBsaWdodFZpZXdNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBsaWdodFZpZXdQcm9qTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICB2YXIgbGlnaHRQcm9qTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhLCBsaWdodCwgc2hhZG93Q2FzY2FkZUNsaXBzLCBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgZGVmYXVsdFNoYWRvd01hdGVyaWFsID0gdGhpcy5fZ2V0RGVwdGhNYXRlcmlhbChsaWdodCk7XHJcbiAgICAgICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGUuc2hhZG93RGVwdGhNYXRlcmlhbCB8fCBkZWZhdWx0U2hhZG93TWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGlzRGVwdGhNYXRlcmlhbENoYW5nZWQsXHJcbiAgICAgICAgICAgICAgICBnZXRVbmlmb3JtOiBnZXREZXB0aE1hdGVyaWFsVW5pZm9ybSxcclxuICAgICAgICAgICAgICAgIGlmUmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLmNhc3RTaGFkb3c7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc29ydENvbXBhcmU6IFJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAvLyBGaXJzdCBmcmFtZVxyXG4gICAgICAgICAgICBpZiAoIXNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5pc0Zpbml0ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYm91bmRpbmdCb3ggPSBzY2VuZS5nZXRCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgICAgICAgICAgc2NlbmUudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgLmNvcHkoYm91bmRpbmdCb3gpLmFwcGx5VHJhbnNmb3JtKHNjZW5lQ2FtZXJhLnZpZXdNYXRyaXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIENvbnNpZGVyaW5nIG1vdmluZyBzcGVlZCBzaW5jZSB0aGUgYm91bmRpbmcgYm94IGlzIGZyb20gbGFzdCBmcmFtZVxyXG4gICAgICAgICAgICAvLyBUT0RPOiBhZGQgYSBiaWFzXHJcbiAgICAgICAgICAgIHZhciBjbGlwcGVkRmFyID0gTWF0aC5taW4oLXNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5taW4ueiwgc2NlbmVDYW1lcmEuZmFyKTtcclxuICAgICAgICAgICAgdmFyIGNsaXBwZWROZWFyID0gTWF0aC5tYXgoLXNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5tYXgueiwgc2NlbmVDYW1lcmEubmVhcik7XHJcblxyXG4gICAgICAgICAgICB2YXIgbGlnaHRDYW1lcmEgPSB0aGlzLl9nZXREaXJlY3Rpb25hbExpZ2h0Q2FtZXJhKGxpZ2h0LCBzY2VuZSwgc2NlbmVDYW1lcmEpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGx2cE1hdDRBcnIgPSBsaWdodFZpZXdQcm9qTWF0cml4LmFycmF5O1xyXG4gICAgICAgICAgICBsaWdodFByb2pNYXRyaXguY29weShsaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICAgICAgbWF0NC5pbnZlcnQobGlnaHRWaWV3TWF0cml4LmFycmF5LCBsaWdodENhbWVyYS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgIG1hdDQubXVsdGlwbHkobGlnaHRWaWV3TWF0cml4LmFycmF5LCBsaWdodFZpZXdNYXRyaXguYXJyYXksIHNjZW5lQ2FtZXJhLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgbWF0NC5tdWx0aXBseShsdnBNYXQ0QXJyLCBsaWdodFByb2pNYXRyaXguYXJyYXksIGxpZ2h0Vmlld01hdHJpeC5hcnJheSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgY2xpcFBsYW5lcyA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgaXNQZXJzcGVjdGl2ZSA9IHNjZW5lQ2FtZXJhIGluc3RhbmNlb2YgUGVyc3BlY3RpdmVDYW1lcmE7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2NhbGVaID0gKHNjZW5lQ2FtZXJhLm5lYXIgKyBzY2VuZUNhbWVyYS5mYXIpIC8gKHNjZW5lQ2FtZXJhLm5lYXIgLSBzY2VuZUNhbWVyYS5mYXIpO1xyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0WiA9IDIgKiBzY2VuZUNhbWVyYS5uZWFyICogc2NlbmVDYW1lcmEuZmFyIC8gKHNjZW5lQ2FtZXJhLm5lYXIgLSBzY2VuZUNhbWVyYS5mYXIpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBsaWdodC5zaGFkb3dDYXNjYWRlOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjbG9nID0gY2xpcHBlZE5lYXIgKiBNYXRoLnBvdyhjbGlwcGVkRmFyIC8gY2xpcHBlZE5lYXIsIGkgLyBsaWdodC5zaGFkb3dDYXNjYWRlKTtcclxuICAgICAgICAgICAgICAgIHZhciBjdW5pID0gY2xpcHBlZE5lYXIgKyAoY2xpcHBlZEZhciAtIGNsaXBwZWROZWFyKSAqIGkgLyBsaWdodC5zaGFkb3dDYXNjYWRlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGMgPSBjbG9nICogbGlnaHQuY2FzY2FkZVNwbGl0TG9nRmFjdG9yICsgY3VuaSAqICgxIC0gbGlnaHQuY2FzY2FkZVNwbGl0TG9nRmFjdG9yKTtcclxuICAgICAgICAgICAgICAgIGNsaXBQbGFuZXMucHVzaChjKTtcclxuICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwcy5wdXNoKC0oLWMgKiBzY2FsZVogKyBvZmZzZXRaKSAvIC1jKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX2dldFRleHR1cmUobGlnaHQsIGxpZ2h0LnNoYWRvd0Nhc2NhZGUpO1xyXG4gICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcy5wdXNoKHRleHR1cmUpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHZpZXdwb3J0ID0gcmVuZGVyZXIudmlld3BvcnQ7XHJcblxyXG4gICAgICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmF0dGFjaCh0ZXh0dXJlKTtcclxuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIF9nbC5jbGVhcihfZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IF9nbC5ERVBUSF9CVUZGRVJfQklUKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlnaHQuc2hhZG93Q2FzY2FkZTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHNwbGl0dGVkIGZydXN0dW1cclxuICAgICAgICAgICAgICAgIHZhciBuZWFyUGxhbmUgPSBjbGlwUGxhbmVzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGZhclBsYW5lID0gY2xpcFBsYW5lc1tpICsgMV07XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNQZXJzcGVjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdDQucGVyc3BlY3RpdmUoc3BsaXRQcm9qTWF0cml4LmFycmF5LCBzY2VuZUNhbWVyYS5mb3YgLyAxODAgKiBNYXRoLlBJLCBzY2VuZUNhbWVyYS5hc3BlY3QsIG5lYXJQbGFuZSwgZmFyUGxhbmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0NC5vcnRobyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRQcm9qTWF0cml4LmFycmF5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2VuZUNhbWVyYS5sZWZ0LCBzY2VuZUNhbWVyYS5yaWdodCwgc2NlbmVDYW1lcmEuYm90dG9tLCBzY2VuZUNhbWVyYS50b3AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lYXJQbGFuZSwgZmFyUGxhbmVcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc3BsaXRGcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uKHNwbGl0UHJvak1hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICBzcGxpdEZydXN0dW0uZ2V0VHJhbnNmb3JtZWRCb3VuZGluZ0JveChjcm9wQkJveCwgbGlnaHRWaWV3TWF0cml4KTtcclxuICAgICAgICAgICAgICAgIGNyb3BCQm94LmFwcGx5UHJvamVjdGlvbihsaWdodFByb2pNYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIF9taW4gPSBjcm9wQkJveC5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgICAgICB2YXIgX21heCA9IGNyb3BCQm94Lm1heC5hcnJheTtcclxuICAgICAgICAgICAgICAgIF9taW5bMF0gPSBNYXRoLm1heChfbWluWzBdLCAtMSk7XHJcbiAgICAgICAgICAgICAgICBfbWluWzFdID0gTWF0aC5tYXgoX21pblsxXSwgLTEpO1xyXG4gICAgICAgICAgICAgICAgX21heFswXSA9IE1hdGgubWluKF9tYXhbMF0sIDEpO1xyXG4gICAgICAgICAgICAgICAgX21heFsxXSA9IE1hdGgubWluKF9tYXhbMV0sIDEpO1xyXG4gICAgICAgICAgICAgICAgY3JvcE1hdHJpeC5vcnRobyhfbWluWzBdLCBfbWF4WzBdLCBfbWluWzFdLCBfbWF4WzFdLCAxLCAtMSk7XHJcbiAgICAgICAgICAgICAgICBsaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4Lm11bHRpcGx5TGVmdChjcm9wTWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93U2l6ZSA9IGxpZ2h0LnNoYWRvd1Jlc29sdXRpb24gfHwgNTEyO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFJldmVyc2VkLCBsZWZ0IHRvIHJpZ2h0ID0+IGZhciB0byBuZWFyXHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCgobGlnaHQuc2hhZG93Q2FzY2FkZSAtIGkgLSAxKSAqIHNoYWRvd1NpemUsIDAsIHNoYWRvd1NpemUsIHNoYWRvd1NpemUsIDEpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciByZW5kZXJMaXN0ID0gc2NlbmUudXBkYXRlUmVuZGVyTGlzdChsaWdodENhbWVyYSk7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKHJlbmRlckxpc3Qub3BhcXVlLCBsaWdodENhbWVyYSwgcGFzc0NvbmZpZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gRmlsdGVyIGZvciBWU01cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2F1c3NpYW5GaWx0ZXIocmVuZGVyZXIsIHRleHR1cmUsIHRleHR1cmUud2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgICAgICAgICAgbWF0cml4LmNvcHkobGlnaHRDYW1lcmEudmlld01hdHJpeClcclxuICAgICAgICAgICAgICAgICAgICAubXVsdGlwbHlMZWZ0KGxpZ2h0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlcy5wdXNoKG1hdHJpeC5hcnJheSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5jb3B5KGxpZ2h0UHJvak1hdHJpeCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCh2aWV3cG9ydCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgcmVuZGVyU3BvdExpZ2h0U2hhZG93OiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBsaWdodCwgc3BvdExpZ2h0TWF0cmljZXMsIHNwb3RMaWdodFNoYWRvd01hcHMpIHtcclxuXHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9nZXRUZXh0dXJlKGxpZ2h0KTtcclxuICAgICAgICB2YXIgbGlnaHRDYW1lcmEgPSB0aGlzLl9nZXRTcG90TGlnaHRDYW1lcmEobGlnaHQpO1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUpO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICBfZ2wuY2xlYXIoX2dsLkNPTE9SX0JVRkZFUl9CSVQgfCBfZ2wuREVQVEhfQlVGRkVSX0JJVCk7XHJcblxyXG4gICAgICAgIHZhciBkZWZhdWx0U2hhZG93TWF0ZXJpYWwgPSB0aGlzLl9nZXREZXB0aE1hdGVyaWFsKGxpZ2h0KTtcclxuICAgICAgICB2YXIgcGFzc0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5zaGFkb3dEZXB0aE1hdGVyaWFsIHx8IGRlZmF1bHRTaGFkb3dNYXRlcmlhbDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGlzRGVwdGhNYXRlcmlhbENoYW5nZWQsXHJcbiAgICAgICAgICAgIGdldFVuaWZvcm06IGdldERlcHRoTWF0ZXJpYWxVbmlmb3JtLFxyXG4gICAgICAgICAgICBpZlJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLmNhc3RTaGFkb3c7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNvcnRDb21wYXJlOiBSZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJMaXN0ID0gc2NlbmUudXBkYXRlUmVuZGVyTGlzdChsaWdodENhbWVyYSk7XHJcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhyZW5kZXJMaXN0Lm9wYXF1ZSwgbGlnaHRDYW1lcmEsIHBhc3NDb25maWcpO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAvLyBGaWx0ZXIgZm9yIFZTTVxyXG4gICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2dhdXNzaWFuRmlsdGVyKHJlbmRlcmVyLCB0ZXh0dXJlLCB0ZXh0dXJlLndpZHRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBtYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIG1hdHJpeC5jb3B5KGxpZ2h0Q2FtZXJhLndvcmxkVHJhbnNmb3JtKVxyXG4gICAgICAgICAgICAuaW52ZXJ0KClcclxuICAgICAgICAgICAgLm11bHRpcGx5TGVmdChsaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgc3BvdExpZ2h0U2hhZG93TWFwcy5wdXNoKHRleHR1cmUpO1xyXG4gICAgICAgIHNwb3RMaWdodE1hdHJpY2VzLnB1c2gobWF0cml4LmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVuZGVyUG9pbnRMaWdodFNoYWRvdzogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgbGlnaHQsIHBvaW50TGlnaHRTaGFkb3dNYXBzKSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9nZXRUZXh0dXJlKGxpZ2h0KTtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgcG9pbnRMaWdodFNoYWRvd01hcHMucHVzaCh0ZXh0dXJlKTtcclxuXHJcbiAgICAgICAgdmFyIGRlZmF1bHRTaGFkb3dNYXRlcmlhbCA9IHRoaXMuX2dldERlcHRoTWF0ZXJpYWwobGlnaHQpO1xyXG4gICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLnNoYWRvd0RlcHRoTWF0ZXJpYWwgfHwgZGVmYXVsdFNoYWRvd01hdGVyaWFsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnZXRVbmlmb3JtOiBnZXREZXB0aE1hdGVyaWFsVW5pZm9ybSxcclxuICAgICAgICAgICAgc29ydENvbXBhcmU6IFJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIHJlbmRlckxpc3RFYWNoU2lkZSA9IHtcclxuICAgICAgICAgICAgcHg6IFtdLCBweTogW10sIHB6OiBbXSwgbng6IFtdLCBueTogW10sIG56OiBbXVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIGJib3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB2YXIgbGlnaHRXb3JsZFBvc2l0aW9uID0gbGlnaHQuZ2V0V29ybGRQb3NpdGlvbigpLmFycmF5O1xyXG4gICAgICAgIHZhciBsaWdodEJCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB2YXIgcmFuZ2UgPSBsaWdodC5yYW5nZTtcclxuICAgICAgICBsaWdodEJCb3gubWluLnNldEFycmF5KGxpZ2h0V29ybGRQb3NpdGlvbik7XHJcbiAgICAgICAgbGlnaHRCQm94Lm1heC5zZXRBcnJheShsaWdodFdvcmxkUG9zaXRpb24pO1xyXG4gICAgICAgIHZhciBleHRlbnQgPSBuZXcgVmVjdG9yMyhyYW5nZSwgcmFuZ2UsIHJhbmdlKTtcclxuICAgICAgICBsaWdodEJCb3gubWF4LmFkZChleHRlbnQpO1xyXG4gICAgICAgIGxpZ2h0QkJveC5taW4uc3ViKGV4dGVudCk7XHJcblxyXG4gICAgICAgIHZhciB0YXJnZXRzTmVlZFJlbmRlciA9IHsgcHg6IGZhbHNlLCBweTogZmFsc2UsIHB6OiBmYWxzZSwgbng6IGZhbHNlLCBueTogZmFsc2UsIG56OiBmYWxzZSB9O1xyXG4gICAgICAgIHNjZW5lLnRyYXZlcnNlKGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLmlzUmVuZGVyYWJsZSgpICYmIHJlbmRlcmFibGUuY2FzdFNoYWRvdykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gcmVuZGVyYWJsZS5nZW9tZXRyeTtcclxuICAgICAgICAgICAgICAgIGlmICghZ2VvbWV0cnkuYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGlzdEVhY2hTaWRlW3RhcmdldHNbaV1dLnB1c2gocmVuZGVyYWJsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJib3gudHJhbnNmb3JtRnJvbShnZW9tZXRyeS5ib3VuZGluZ0JveCwgcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWJib3guaW50ZXJzZWN0Qm91bmRpbmdCb3gobGlnaHRCQm94KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBiYm94LnVwZGF0ZVZlcnRpY2VzKCk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRzTmVlZFJlbmRlclt0YXJnZXRzW2ldXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdnR4ID0gYmJveC52ZXJ0aWNlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IHZ0eFswXSAtIGxpZ2h0V29ybGRQb3NpdGlvblswXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IHZ0eFsxXSAtIGxpZ2h0V29ybGRQb3NpdGlvblsxXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeiA9IHZ0eFsyXSAtIGxpZ2h0V29ybGRQb3NpdGlvblsyXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYWJzeCA9IE1hdGguYWJzKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhYnN5ID0gTWF0aC5hYnMoeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFic3ogPSBNYXRoLmFicyh6KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWJzeCA+IGFic3kpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFic3ggPiBhYnN6KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzTmVlZFJlbmRlclt4ID4gMCA/ICdweCcgOiAnbngnXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzTmVlZFJlbmRlclt6ID4gMCA/ICdweicgOiAnbnonXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYnN5ID4gYWJzeikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c05lZWRSZW5kZXJbeSA+IDAgPyAncHknIDogJ255J10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c05lZWRSZW5kZXJbeiA+IDAgPyAncHonIDogJ256J10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YXJnZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldHNOZWVkUmVuZGVyW3RhcmdldHNbaV1dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxpc3RFYWNoU2lkZVt0YXJnZXRzW2ldXS5wdXNoKHJlbmRlcmFibGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGFyZ2V0c1tpXTtcclxuICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuX2dldFBvaW50TGlnaHRDYW1lcmEobGlnaHQsIHRhcmdldCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5hdHRhY2godGV4dHVyZSwgX2dsLkNPTE9SX0FUVEFDSE1FTlQwLCBfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICBfZ2wuY2xlYXIoX2dsLkNPTE9SX0JVRkZFUl9CSVQgfCBfZ2wuREVQVEhfQlVGRkVSX0JJVCk7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKHJlbmRlckxpc3RFYWNoU2lkZVt0YXJnZXRdLCBjYW1lcmEsIHBhc3NDb25maWcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2dldERlcHRoTWF0ZXJpYWw6IGZ1bmN0aW9uIChsaWdodCkge1xyXG4gICAgICAgIHZhciBzaGFkb3dNYXRlcmlhbCA9IHRoaXMuX2xpZ2h0TWF0ZXJpYWxzW2xpZ2h0Ll9fdWlkX19dO1xyXG4gICAgICAgIHZhciBpc1BvaW50TGlnaHQgPSBsaWdodC50eXBlID09PSAnUE9JTlRfTElHSFQnO1xyXG4gICAgICAgIGlmICghc2hhZG93TWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgdmFyIHNoYWRlclByZWZpeCA9IGlzUG9pbnRMaWdodCA/ICdjbGF5LnNtLmRpc3RhbmNlLicgOiAnY2xheS5zbS5kZXB0aC4nO1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IHRoaXMucHJlY2lzaW9uLFxyXG4gICAgICAgICAgICAgICAgc2hhZGVyOiBuZXcgU2hhZGVyKFNoYWRlci5zb3VyY2Uoc2hhZGVyUHJlZml4ICsgJ3ZlcnRleCcpLCBTaGFkZXIuc291cmNlKHNoYWRlclByZWZpeCArICdmcmFnbWVudCcpKVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2xpZ2h0TWF0ZXJpYWxzW2xpZ2h0Ll9fdWlkX19dID0gc2hhZG93TWF0ZXJpYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsaWdodC5zaGFkb3dTbG9wZVNjYWxlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwuc2V0VW5pZm9ybSgnc2xvcGVTY2FsZScsIGxpZ2h0LnNoYWRvd1Nsb3BlU2NhbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGlnaHQuc2hhZG93QmlhcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHNoYWRvd01hdGVyaWFsLnNldFVuaWZvcm0oJ2JpYXMnLCBsaWdodC5zaGFkb3dCaWFzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc29mdFNoYWRvdyA9PT0gU2hhZG93TWFwUGFzcy5WU00pIHtcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfVlNNJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzUG9pbnRMaWdodCkge1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbC5zZXQoJ2xpZ2h0UG9zaXRpb24nLCBsaWdodC5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXkpO1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbC5zZXQoJ3JhbmdlJywgbGlnaHQucmFuZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHNoYWRvd01hdGVyaWFsO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZ2F1c3NpYW5GaWx0ZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgdGV4dHVyZSwgc2l6ZSkge1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXIgPSB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBzaXplLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IHNpemUsXHJcbiAgICAgICAgICAgIHR5cGU6IFRleHR1cmUuRkxPQVRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciB0bXBUZXh0dXJlID0gdGhpcy5fdGV4dHVyZVBvb2wuZ2V0KHBhcmFtZXRlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmF0dGFjaCh0bXBUZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NILnNldFVuaWZvcm0oJ3RleHR1cmUnLCB0ZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NILnNldFVuaWZvcm0oJ3RleHR1cmVXaWR0aCcsIHNpemUpO1xyXG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc0gucmVuZGVyKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUpO1xyXG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc1Yuc2V0VW5pZm9ybSgndGV4dHVyZScsIHRtcFRleHR1cmUpO1xyXG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc1Yuc2V0VW5pZm9ybSgndGV4dHVyZUhlaWdodCcsIHNpemUpO1xyXG4gICAgICAgIHRoaXMuX2dhdXNzaWFuUGFzc1YucmVuZGVyKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl90ZXh0dXJlUG9vbC5wdXQodG1wVGV4dHVyZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXRUZXh0dXJlOiBmdW5jdGlvbiAobGlnaHQsIGNhc2NhZGUpIHtcclxuICAgICAgICB2YXIga2V5ID0gbGlnaHQuX191aWRfXztcclxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzW2tleV07XHJcbiAgICAgICAgdmFyIHJlc29sdXRpb24gPSBsaWdodC5zaGFkb3dSZXNvbHV0aW9uIHx8IDUxMjtcclxuICAgICAgICBjYXNjYWRlID0gY2FzY2FkZSB8fCAxO1xyXG4gICAgICAgIGlmICghdGV4dHVyZSkge1xyXG4gICAgICAgICAgICBpZiAobGlnaHQudHlwZSA9PT0gJ1BPSU5UX0xJR0hUJykge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlQ3ViZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBBdCBtb3N0IDQgY2FzY2FkZVxyXG4gICAgICAgICAgICAvLyBUT0RPIHNoYXJlIHdpdGggaGVpZ2h0ID9cclxuICAgICAgICAgICAgdGV4dHVyZS53aWR0aCA9IHJlc29sdXRpb24gKiBjYXNjYWRlO1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmhlaWdodCA9IHJlc29sdXRpb247XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnR5cGUgPSBUZXh0dXJlLkZMT0FUO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5hbmlzb3Ryb3BpYyA9IDQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLm1pbkZpbHRlciA9IGdsZW51bS5ORUFSRVNUO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5tYWdGaWx0ZXIgPSBnbGVudW0uTkVBUkVTVDtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUudXNlTWlwbWFwID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXNba2V5XSA9IHRleHR1cmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgX2dldFBvaW50TGlnaHRDYW1lcmE6IGZ1bmN0aW9uIChsaWdodCwgdGFyZ2V0KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9saWdodENhbWVyYXMucG9pbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5fbGlnaHRDYW1lcmFzLnBvaW50ID0ge1xyXG4gICAgICAgICAgICAgICAgcHg6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxyXG4gICAgICAgICAgICAgICAgbng6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxyXG4gICAgICAgICAgICAgICAgcHk6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxyXG4gICAgICAgICAgICAgICAgbnk6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxyXG4gICAgICAgICAgICAgICAgcHo6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpLFxyXG4gICAgICAgICAgICAgICAgbno6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLl9saWdodENhbWVyYXMucG9pbnRbdGFyZ2V0XTtcclxuXHJcbiAgICAgICAgY2FtZXJhLmZhciA9IGxpZ2h0LnJhbmdlO1xyXG4gICAgICAgIGNhbWVyYS5mb3YgPSA5MDtcclxuICAgICAgICBjYW1lcmEucG9zaXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgICAgIHN3aXRjaCAodGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3B4JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9YLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ254JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9YLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3B5JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9ZLCBWZWN0b3IzLlBPU0lUSVZFX1opO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ255JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9ZLCBWZWN0b3IzLk5FR0FUSVZFX1opO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ3B6JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9aLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ256JzpcclxuICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9aLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpZ2h0LmdldFdvcmxkUG9zaXRpb24oY2FtZXJhLnBvc2l0aW9uKTtcclxuICAgICAgICBjYW1lcmEudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBjYW1lcmE7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXREaXJlY3Rpb25hbExpZ2h0Q2FtZXJhOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsaWdodFZpZXdNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBzY2VuZVZpZXdCb3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHZhciBsaWdodFZpZXdCQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgLy8gQ2FtZXJhIG9mIGRpcmVjdGlvbmFsIGxpZ2h0IHdpbGwgYmUgYWRqdXN0ZWRcclxuICAgICAgICAvLyB0byBjb250YWluIHRoZSB2aWV3IGZydXN0dW0gYW5kIHNjZW5lIGJvdW5kaW5nIGJveCBhcyB0aWdodGx5IGFzIHBvc3NpYmxlXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChsaWdodCwgc2NlbmUsIHNjZW5lQ2FtZXJhKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fbGlnaHRDYW1lcmFzLmRpcmVjdGlvbmFsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9saWdodENhbWVyYXMuZGlyZWN0aW9uYWwgPSBuZXcgT3J0aG9DYW1lcmEoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fbGlnaHRDYW1lcmFzLmRpcmVjdGlvbmFsO1xyXG5cclxuICAgICAgICAgICAgc2NlbmVWaWV3Qm91bmRpbmdCb3guY29weShzY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUpO1xyXG4gICAgICAgICAgICBzY2VuZVZpZXdCb3VuZGluZ0JveC5pbnRlcnNlY3Rpb24oc2NlbmVDYW1lcmEuZnJ1c3R1bS5ib3VuZGluZ0JveCk7XHJcbiAgICAgICAgICAgIC8vIE1vdmUgdG8gdGhlIGNlbnRlciBvZiBmcnVzdHVtKGluIHdvcmxkIHNwYWNlKVxyXG4gICAgICAgICAgICBjYW1lcmEucG9zaXRpb25cclxuICAgICAgICAgICAgICAgIC5jb3B5KHNjZW5lVmlld0JvdW5kaW5nQm94Lm1pbilcclxuICAgICAgICAgICAgICAgIC5hZGQoc2NlbmVWaWV3Qm91bmRpbmdCb3gubWF4KVxyXG4gICAgICAgICAgICAgICAgLnNjYWxlKDAuNSlcclxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm1NYXQ0KHNjZW5lQ2FtZXJhLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgY2FtZXJhLnJvdGF0aW9uLmNvcHkobGlnaHQucm90YXRpb24pO1xyXG4gICAgICAgICAgICBjYW1lcmEuc2NhbGUuY29weShsaWdodC5zY2FsZSk7XHJcbiAgICAgICAgICAgIGNhbWVyYS51cGRhdGVXb3JsZFRyYW5zZm9ybSgpO1xyXG5cclxuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHRvIGxpZ2h0IHZpZXcgc3BhY2VcclxuICAgICAgICAgICAgTWF0cml4NC5pbnZlcnQobGlnaHRWaWV3TWF0cml4LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KGxpZ2h0Vmlld01hdHJpeCwgbGlnaHRWaWV3TWF0cml4LCBzY2VuZUNhbWVyYS53b3JsZFRyYW5zZm9ybSk7XHJcblxyXG4gICAgICAgICAgICBsaWdodFZpZXdCQm94LmNvcHkoc2NlbmVWaWV3Qm91bmRpbmdCb3gpLmFwcGx5VHJhbnNmb3JtKGxpZ2h0Vmlld01hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgbWluID0gbGlnaHRWaWV3QkJveC5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXggPSBsaWdodFZpZXdCQm94Lm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgICAgIC8vIE1vdmUgY2FtZXJhIHRvIGFkanVzdCB0aGUgbmVhciB0byAwXHJcbiAgICAgICAgICAgIGNhbWVyYS5wb3NpdGlvbi5zZXQoKG1pblswXSArIG1heFswXSkgLyAyLCAobWluWzFdICsgbWF4WzFdKSAvIDIsIG1heFsyXSlcclxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm1NYXQ0KGNhbWVyYS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIGNhbWVyYS5uZWFyID0gMDtcclxuICAgICAgICAgICAgY2FtZXJhLmZhciA9IC1taW5bMl0gKyBtYXhbMl07XHJcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSByZWNlaXZlcnMgbm90IGluIHRoZSBmcnVzdHVtIHdpbGwgc3RpbCByZWNlaXZlIHRoZSBzaGFkb3cuXHJcbiAgICAgICAgICAgIGlmIChpc05hTih0aGlzLmxpZ2h0RnJ1c3R1bUJpYXMpKSB7XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEuZmFyICo9IDQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEuZmFyICs9IHRoaXMubGlnaHRGcnVzdHVtQmlhcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYW1lcmEubGVmdCA9IG1pblswXTtcclxuICAgICAgICAgICAgY2FtZXJhLnJpZ2h0ID0gbWF4WzBdO1xyXG4gICAgICAgICAgICBjYW1lcmEudG9wID0gbWF4WzFdO1xyXG4gICAgICAgICAgICBjYW1lcmEuYm90dG9tID0gbWluWzFdO1xyXG4gICAgICAgICAgICBjYW1lcmEudXBkYXRlKHRydWUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGNhbWVyYTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICBfZ2V0U3BvdExpZ2h0Q2FtZXJhOiBmdW5jdGlvbiAobGlnaHQpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2xpZ2h0Q2FtZXJhcy5zcG90KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpZ2h0Q2FtZXJhcy5zcG90ID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLl9saWdodENhbWVyYXMuc3BvdDtcclxuICAgICAgICAvLyBVcGRhdGUgcHJvcGVydGllc1xyXG4gICAgICAgIGNhbWVyYS5mb3YgPSBsaWdodC5wZW51bWJyYUFuZ2xlICogMjtcclxuICAgICAgICBjYW1lcmEuZmFyID0gbGlnaHQucmFuZ2U7XHJcbiAgICAgICAgY2FtZXJhLndvcmxkVHJhbnNmb3JtLmNvcHkobGlnaHQud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgIGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgbWF0NC5pbnZlcnQoY2FtZXJhLnZpZXdNYXRyaXguYXJyYXksIGNhbWVyYS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjYW1lcmE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcnxXZWJHTFJlbmRlcmluZ0NvbnRleHR9IFtyZW5kZXJlcl1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuU2hhZG93TWFwLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICAvLyBQRU5ESU5HIFJlbmRlcmVyIG9yIFdlYkdMUmVuZGVyaW5nQ29udGV4dFxyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsIHx8IHJlbmRlcmVyO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuZGlzcG9zZShfZ2wpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLl90ZXh0dXJlcykge1xyXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlc1tuYW1lXS5kaXNwb3NlKF9nbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90ZXh0dXJlUG9vbC5jbGVhcihyZW5kZXJlci5nbCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2RlcHRoTWF0ZXJpYWxzID0ge307XHJcbiAgICAgICAgdGhpcy5fZGlzdGFuY2VNYXRlcmlhbHMgPSB7fTtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0Q2FtZXJhcyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX3NoYWRvd01hcE51bWJlciA9IHtcclxuICAgICAgICAgICAgJ1BPSU5UX0xJR0hUJzogMCxcclxuICAgICAgICAgICAgJ0RJUkVDVElPTkFMX0xJR0hUJzogMCxcclxuICAgICAgICAgICAgJ1NQT1RfTElHSFQnOiAwXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLl9tZXNoTWF0ZXJpYWxzID0ge307XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcmVjZWl2ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fcmVjZWl2ZXJzW2ldO1xyXG4gICAgICAgICAgICAvLyBNZXNoIG1heSBiZSBkaXNwb3NlZFxyXG4gICAgICAgICAgICBpZiAobWVzaC5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdQT0lOVF9MSUdIVF9TSEFET1dfQ09VTlQnKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dfQ09VTlQnKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdBTUJJRU5UX0xJR0hUX1NIQURPV19DT1VOVCcpO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdzaGFkb3dFbmFibGVkJywgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3JlY2VpdmVycyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cgPSBbXTtcclxuICAgIH1cclxufSk7XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5WU01cclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblNoYWRvd01hcFBhc3MuVlNNID0gMTtcclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LnByZVBhc3MuU2hhZG93TWFwLlBDRlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuU2hhZG93TWFwUGFzcy5QQ0YgPSAyO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2hhZG93TWFwUGFzcztcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFJheSBmcm9tICcuLi9tYXRoL1JheSc7XHJcbmltcG9ydCBWZWN0b3IyIGZyb20gJy4uL21hdGgvVmVjdG9yMic7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4uL21hdGgvTWF0cml4NCc7XHJcbmltcG9ydCBSZW5kZXJhYmxlIGZyb20gJy4uL1JlbmRlcmFibGUnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGlja2luZy5SYXlQaWNraW5nXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgUmF5UGlja2luZyA9IEJhc2UuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5waWNraW5nLlJheVBpY2tpbmcjICove1xyXG4gICAgLyoqXHJcbiAgICAgKiBUYXJnZXQgc2NlbmVcclxuICAgICAqIEB0eXBlIHtjbGF5LlNjZW5lfVxyXG4gICAgICovXHJcbiAgICBzY2VuZTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogVGFyZ2V0IGNhbWVyYVxyXG4gICAgICogQHR5cGUge2NsYXkuQ2FtZXJhfVxyXG4gICAgICovXHJcbiAgICBjYW1lcmE6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFRhcmdldCByZW5kZXJlclxyXG4gICAgICogQHR5cGUge2NsYXkuUmVuZGVyZXJ9XHJcbiAgICAgKi9cclxuICAgIHJlbmRlcmVyOiBudWxsXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX3JheSA9IG5ldyBSYXkoKTtcclxuICAgIHRoaXMuX25kYyA9IG5ldyBWZWN0b3IyKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5waWNraW5nLlJheVBpY2tpbmcucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpY2sgdGhlIG5lYXJlc3QgaW50ZXJzZWN0aW9uIG9iamVjdCBpbiB0aGUgc2NlbmVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0geCBNb3VzZSBwb3NpdGlvbiB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHkgTW91c2UgcG9zaXRpb24geVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW2ZvcmNlUGlja0FsbD1mYWxzZV0gaWdub3JlIGlnbm9yZVBpY2tpbmdcclxuICAgICAqIEByZXR1cm4ge2NsYXkucGlja2luZy5SYXlQaWNraW5nfkludGVyc2VjdGlvbn1cclxuICAgICAqL1xyXG4gICAgcGljazogZnVuY3Rpb24gKHgsIHksIGZvcmNlUGlja0FsbCkge1xyXG4gICAgICAgIHZhciBvdXQgPSB0aGlzLnBpY2tBbGwoeCwgeSwgW10sIGZvcmNlUGlja0FsbCk7XHJcbiAgICAgICAgcmV0dXJuIG91dFswXSB8fCBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBpY2sgYWxsIGludGVyc2VjdGlvbiBvYmplY3RzLCB3aWNoIHdpbGwgYmUgc29ydGVkIGZyb20gbmVhciB0byBmYXJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0geCBNb3VzZSBwb3NpdGlvbiB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHkgTW91c2UgcG9zaXRpb24geVxyXG4gICAgICogQHBhcmFtICB7QXJyYXl9IFtvdXRwdXRdXHJcbiAgICAgKiBAcGFyYW0gIHtib29sZWFufSBbZm9yY2VQaWNrQWxsPWZhbHNlXSBpZ25vcmUgaWdub3JlUGlja2luZ1xyXG4gICAgICogQHJldHVybiB7QXJyYXkuPGNsYXkucGlja2luZy5SYXlQaWNraW5nfkludGVyc2VjdGlvbj59XHJcbiAgICAgKi9cclxuICAgIHBpY2tBbGw6IGZ1bmN0aW9uICh4LCB5LCBvdXRwdXQsIGZvcmNlUGlja0FsbCkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2NyZWVuVG9OREMoeCwgeSwgdGhpcy5fbmRjKTtcclxuICAgICAgICB0aGlzLmNhbWVyYS5jYXN0UmF5KHRoaXMuX25kYywgdGhpcy5fcmF5KTtcclxuXHJcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0IHx8IFtdO1xyXG5cclxuICAgICAgICB0aGlzLl9pbnRlcnNlY3ROb2RlKHRoaXMuc2NlbmUsIG91dHB1dCwgZm9yY2VQaWNrQWxsIHx8IGZhbHNlKTtcclxuXHJcbiAgICAgICAgb3V0cHV0LnNvcnQodGhpcy5faW50ZXJzZWN0aW9uQ29tcGFyZUZ1bmMpO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfSxcclxuXHJcbiAgICBfaW50ZXJzZWN0Tm9kZTogZnVuY3Rpb24gKG5vZGUsIG91dCwgZm9yY2VQaWNrQWxsKSB7XHJcbiAgICAgICAgaWYgKChub2RlIGluc3RhbmNlb2YgUmVuZGVyYWJsZSkgJiYgbm9kZS5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICBpZiAoKCFub2RlLmlnbm9yZVBpY2tpbmcgfHwgZm9yY2VQaWNrQWxsKVxyXG4gICAgICAgICAgICAgICAgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdHJpYW5nbGUgbWVzaCBzdXBwb3J0IHJheSBwaWNraW5nXHJcbiAgICAgICAgICAgICAgICAgICAgKG5vZGUubW9kZSA9PT0gZ2xlbnVtLlRSSUFOR0xFUyAmJiBub2RlLmdlb21ldHJ5LmlzVXNlSW5kaWNlcygpKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9yIGlmIGdlb21ldHJ5IGhhcyBpdCdzIG93biBwaWNrQnlSYXksIHBpY2ssIGltcGxlbWVudGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgbm9kZS5nZW9tZXRyeS5waWNrQnlSYXlcclxuICAgICAgICAgICAgICAgICAgICB8fCBub2RlLmdlb21ldHJ5LnBpY2tcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcnNlY3RSZW5kZXJhYmxlKG5vZGUsIG91dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLl9jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9pbnRlcnNlY3ROb2RlKG5vZGUuX2NoaWxkcmVuW2ldLCBvdXQsIGZvcmNlUGlja0FsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfaW50ZXJzZWN0UmVuZGVyYWJsZTogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIHYxID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB2YXIgdjIgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIHZhciB2MyA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgdmFyIHJheSA9IG5ldyBSYXkoKTtcclxuICAgICAgICB2YXIgd29ybGRJbnZlcnNlID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBvdXQpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBpc1NraW5uZWRNZXNoID0gcmVuZGVyYWJsZS5pc1NraW5uZWRNZXNoKCk7XHJcbiAgICAgICAgICAgIHJheS5jb3B5KHRoaXMuX3JheSk7XHJcbiAgICAgICAgICAgIE1hdHJpeDQuaW52ZXJ0KHdvcmxkSW52ZXJzZSwgcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybSk7XHJcblxyXG4gICAgICAgICAgICAvLyBTa2lubmVkIG1lc2ggd2lsbCBpZ25vcmUgdGhlIHdvcmxkIHRyYW5zZm9ybS5cclxuICAgICAgICAgICAgaWYgKCFpc1NraW5uZWRNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICByYXkuYXBwbHlUcmFuc2Zvcm0od29ybGRJbnZlcnNlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gcmVuZGVyYWJsZS5nZW9tZXRyeTtcclxuXHJcbiAgICAgICAgICAgIHZhciBiYm94ID0gaXNTa2lubmVkTWVzaCA/IHJlbmRlcmFibGUuc2tlbGV0b24uYm91bmRpbmdCb3ggOiBnZW9tZXRyeS5ib3VuZGluZ0JveDtcclxuXHJcbiAgICAgICAgICAgIGlmIChiYm94ICYmICFyYXkuaW50ZXJzZWN0Qm91bmRpbmdCb3goYmJveCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBVc2UgdXNlciBkZWZpbmVkIHBpY2tpbmcgYWxnb3JpdGhtXHJcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeS5waWNrKSB7XHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5waWNrKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25kYy54LCB0aGlzLl9uZGMueSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGUsIG91dFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBVc2UgdXNlciBkZWZpbmVkIHJheSBwaWNraW5nIGFsZ29yaXRobVxyXG4gICAgICAgICAgICBlbHNlIGlmIChnZW9tZXRyeS5waWNrQnlSYXkpIHtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LnBpY2tCeVJheShyYXksIHJlbmRlcmFibGUsIG91dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBjdWxsQmFjayA9IChyZW5kZXJhYmxlLmN1bGxGYWNlID09PSBnbGVudW0uQkFDSyAmJiByZW5kZXJhYmxlLmZyb250RmFjZSA9PT0gZ2xlbnVtLkNDVylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHJlbmRlcmFibGUuY3VsbEZhY2UgPT09IGdsZW51bS5GUk9OVCAmJiByZW5kZXJhYmxlLmZyb250RmFjZSA9PT0gZ2xlbnVtLkNXKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwb2ludDtcclxuICAgICAgICAgICAgdmFyIGluZGljZXMgPSBnZW9tZXRyeS5pbmRpY2VzO1xyXG4gICAgICAgICAgICB2YXIgcG9zaXRpb25BdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcclxuICAgICAgICAgICAgdmFyIHdlaWdodEF0dHIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLndlaWdodDtcclxuICAgICAgICAgICAgdmFyIGpvaW50QXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMuam9pbnQ7XHJcbiAgICAgICAgICAgIHZhciBza2luTWF0cmljZXNBcnJheTtcclxuICAgICAgICAgICAgdmFyIHNraW5NYXRyaWNlcyA9IFtdO1xyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB2YWxpZC5cclxuICAgICAgICAgICAgaWYgKCFwb3NpdGlvbkF0dHIgfHwgIXBvc2l0aW9uQXR0ci52YWx1ZSB8fCAhaW5kaWNlcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc1NraW5uZWRNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICBza2luTWF0cmljZXNBcnJheSA9IHJlbmRlcmFibGUuc2tlbGV0b24uZ2V0U3ViU2tpbk1hdHJpY2VzKHJlbmRlcmFibGUuX191aWRfXywgcmVuZGVyYWJsZS5qb2ludHMpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZW5kZXJhYmxlLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNraW5NYXRyaWNlc1tpXSA9IHNraW5NYXRyaWNlc1tpXSB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDE2OyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpbk1hdHJpY2VzW2ldW2tdID0gc2tpbk1hdHJpY2VzQXJyYXlbaSAqIDE2ICsga107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHBvcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHdlaWdodCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50ID0gW107XHJcbiAgICAgICAgICAgICAgICB2YXIgc2tpbm5lZFBvcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRtcCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNraW5uZWRQb3NpdGlvbkF0dHIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5uZWRQb3NpdGlvbjtcclxuICAgICAgICAgICAgICAgIGlmICghc2tpbm5lZFBvc2l0aW9uQXR0ciB8fCAhc2tpbm5lZFBvc2l0aW9uQXR0ci52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmNyZWF0ZUF0dHJpYnV0ZSgnc2tpbm5lZFBvc2l0aW9uJywgJ2YnLCAzKTtcclxuICAgICAgICAgICAgICAgICAgICBza2lubmVkUG9zaXRpb25BdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5za2lubmVkUG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgc2tpbm5lZFBvc2l0aW9uQXR0ci5pbml0KGdlb21ldHJ5LnZlcnRleENvdW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvbWV0cnkudmVydGV4Q291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uQXR0ci5nZXQoaSwgcG9zKTtcclxuICAgICAgICAgICAgICAgICAgICB3ZWlnaHRBdHRyLmdldChpLCB3ZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGpvaW50QXR0ci5nZXQoaSwgam9pbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdlaWdodFszXSA9IDEgLSB3ZWlnaHRbMF0gLSB3ZWlnaHRbMV0gLSB3ZWlnaHRbMl07XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5zZXQoc2tpbm5lZFBvcywgMCwgMCwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCA0OyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpvaW50W2tdID49IDAgJiYgd2VpZ2h0W2tdID4gMWUtNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjMy50cmFuc2Zvcm1NYXQ0KHRtcCwgcG9zLCBza2luTWF0cmljZXNbam9pbnRba11dKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQoc2tpbm5lZFBvcywgc2tpbm5lZFBvcywgdG1wLCB3ZWlnaHRba10pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNraW5uZWRQb3NpdGlvbkF0dHIuc2V0KGksIHNraW5uZWRQb3MpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpICs9IDMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpMSA9IGluZGljZXNbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgaTIgPSBpbmRpY2VzW2kgKyAxXTtcclxuICAgICAgICAgICAgICAgIHZhciBpMyA9IGluZGljZXNbaSArIDJdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGZpbmFsUG9zQXR0ciA9IGlzU2tpbm5lZE1lc2hcclxuICAgICAgICAgICAgICAgICAgICA/IGdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbm5lZFBvc2l0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgOiBwb3NpdGlvbkF0dHI7XHJcbiAgICAgICAgICAgICAgICBmaW5hbFBvc0F0dHIuZ2V0KGkxLCB2MS5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICBmaW5hbFBvc0F0dHIuZ2V0KGkyLCB2Mi5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICBmaW5hbFBvc0F0dHIuZ2V0KGkzLCB2My5hcnJheSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGN1bGxCYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnQgPSByYXkuaW50ZXJzZWN0VHJpYW5nbGUodjEsIHYyLCB2MywgcmVuZGVyYWJsZS5jdWxsaW5nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50ID0gcmF5LmludGVyc2VjdFRyaWFuZ2xlKHYxLCB2MywgdjIsIHJlbmRlcmFibGUuY3VsbGluZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9pbnRXID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yMy50cmFuc2Zvcm1NYXQ0KHBvaW50VywgcG9pbnQsIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBwb2ludCBtYXliZSBub3QgcmlnaHQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjMuY29weShwb2ludFcsIHBvaW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0LnB1c2gobmV3IFJheVBpY2tpbmcuSW50ZXJzZWN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludCwgcG9pbnRXLCByZW5kZXJhYmxlLCBbaTEsIGkyLCBpM10sIGkgLyAzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3IzLmRpc3QocG9pbnRXLCB0aGlzLl9yYXkub3JpZ2luKVxyXG4gICAgICAgICAgICAgICAgICAgICkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgX2ludGVyc2VjdGlvbkNvbXBhcmVGdW5jOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgIHJldHVybiBhLmRpc3RhbmNlIC0gYi5kaXN0YW5jZTtcclxuICAgIH1cclxufSk7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGlja2luZy5SYXlQaWNraW5nfkludGVyc2VjdGlvblxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gcG9pbnRcclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHBvaW50V29ybGRcclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IHRhcmdldFxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSB0cmlhbmdsZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gdHJpYW5nbGVJbmRleFxyXG4gKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2VcclxuICovXHJcblJheVBpY2tpbmcuSW50ZXJzZWN0aW9uID0gZnVuY3Rpb24gKHBvaW50LCBwb2ludFdvcmxkLCB0YXJnZXQsIHRyaWFuZ2xlLCB0cmlhbmdsZUluZGV4LCBkaXN0YW5jZSkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcnNlY3Rpb24gcG9pbnQgaW4gbG9jYWwgdHJhbnNmb3JtIGNvb3JkaW5hdGVzXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnBvaW50ID0gcG9pbnQ7XHJcbiAgICAvKipcclxuICAgICAqIEludGVyc2VjdGlvbiBwb2ludCBpbiB3b3JsZCB0cmFuc2Zvcm0gY29vcmRpbmF0ZXNcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucG9pbnRXb3JsZCA9IHBvaW50V29ybGQ7XHJcbiAgICAvKipcclxuICAgICAqIEludGVyc2VjdGlvbiBzY2VuZSBub2RlXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJzZWN0aW9uIHRyaWFuZ2xlLCB3aGljaCBpcyBhbiBhcnJheSBvZiB2ZXJ0ZXggaW5kZXhcclxuICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgdGhpcy50cmlhbmdsZSA9IHRyaWFuZ2xlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRleCBvZiBpbnRlcnNlY3Rpb24gdHJpYW5nbGUuXHJcbiAgICAgKi9cclxuICAgIHRoaXMudHJpYW5nbGVJbmRleCA9IHRyaWFuZ2xlSW5kZXg7XHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGZyb20gaW50ZXJzZWN0aW9uIHBvaW50IHRvIHJheSBvcmlnaW5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZGlzdGFuY2UgPSBkaXN0YW5jZTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJheVBpY2tpbmc7XHJcbiIsIi8vIFNwaGVyaWNhbCBIYXJtb25pYyBIZWxwZXJzXHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBQYXNzIGZyb20gJy4uL2NvbXBvc2l0b3IvUGFzcyc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgU2t5Ym94IGZyb20gJy4uL3BsdWdpbi9Ta3lib3gnO1xyXG5pbXBvcnQgU2t5ZG9tZSBmcm9tICcuLi9wbHVnaW4vU2t5ZG9tZSc7XHJcbmltcG9ydCBFbnZpcm9ubWVudE1hcFBhc3MgZnJvbSAnLi4vcHJlUGFzcy9FbnZpcm9ubWVudE1hcCc7XHJcbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG52YXIgc2ggPSB7fTtcclxuXHJcbmltcG9ydCBwcm9qZWN0RW52TWFwU2hhZGVyQ29kZSBmcm9tICcuL3NoYWRlci9wcm9qZWN0RW52TWFwLmdsc2wuanMnO1xyXG5cclxudmFyIHRhcmdldHMgPSBbJ3B4JywgJ254JywgJ3B5JywgJ255JywgJ3B6JywgJ256J107XHJcblxyXG4vLyBQcm9qZWN0IG9uIGdwdSwgYnV0IG5lZWRzIGJyb3dzZXIgdG8gc3VwcG9ydCByZWFkUGl4ZWxzIGFzIEZsb2F0MzJBcnJheS5cclxuZnVuY3Rpb24gcHJvamVjdEVudmlyb25tZW50TWFwR1BVKHJlbmRlcmVyLCBlbnZNYXApIHtcclxuICAgIHZhciBzaFRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICB3aWR0aDogOSxcclxuICAgICAgICBoZWlnaHQ6IDEsXHJcbiAgICAgICAgdHlwZTogVGV4dHVyZS5GTE9BVFxyXG4gICAgfSk7XHJcbiAgICB2YXIgcGFzcyA9IG5ldyBQYXNzKHtcclxuICAgICAgICBmcmFnbWVudDogcHJvamVjdEVudk1hcFNoYWRlckNvZGVcclxuICAgIH0pO1xyXG4gICAgcGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1RFWFRVUkVfU0laRScsIGVudk1hcC53aWR0aCk7XHJcbiAgICBwYXNzLnNldFVuaWZvcm0oJ2Vudmlyb25tZW50TWFwJywgZW52TWFwKTtcclxuXHJcbiAgICB2YXIgZnJhbWVidWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcclxuICAgIGZyYW1lYnVmZmVyLmF0dGFjaChzaFRleHR1cmUpO1xyXG4gICAgcGFzcy5yZW5kZXIocmVuZGVyZXIsIGZyYW1lYnVmZmVyKTtcclxuXHJcbiAgICBmcmFtZWJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgIC8vIFRPRE8gT25seSBjaHJvbWUgYW5kIGZpcmVmb3ggc3VwcG9ydCBGbG9hdDMyQXJyYXlcclxuICAgIHZhciBwaXhlbHMgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSg5ICogNCk7XHJcbiAgICByZW5kZXJlci5nbC5yZWFkUGl4ZWxzKDAsIDAsIDksIDEsIFRleHR1cmUuUkdCQSwgVGV4dHVyZS5GTE9BVCwgcGl4ZWxzKTtcclxuXHJcbiAgICB2YXIgY29lZmYgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSg5ICogMyk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDk7IGkrKykge1xyXG4gICAgICAgIGNvZWZmW2kgKiAzXSA9IHBpeGVsc1tpICogNF07XHJcbiAgICAgICAgY29lZmZbaSAqIDMgKyAxXSA9IHBpeGVsc1tpICogNCArIDFdO1xyXG4gICAgICAgIGNvZWZmW2kgKiAzICsgMl0gPSBwaXhlbHNbaSAqIDQgKyAyXTtcclxuICAgIH1cclxuICAgIGZyYW1lYnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgZnJhbWVidWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICBwYXNzLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgcmV0dXJuIGNvZWZmO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYXJtb25pY3Mobm9ybWFsLCBpbmRleCl7XHJcbiAgICB2YXIgeCA9IG5vcm1hbFswXTtcclxuICAgIHZhciB5ID0gbm9ybWFsWzFdO1xyXG4gICAgdmFyIHogPSBub3JtYWxbMl07XHJcblxyXG4gICAgaWYgKGluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIDEuMDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGluZGV4ID09PSAxKSB7XHJcbiAgICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmRleCA9PT0gMikge1xyXG4gICAgICAgIHJldHVybiB5O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaW5kZXggPT09IDMpIHtcclxuICAgICAgICByZXR1cm4gejtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGluZGV4ID09PSA0KSB7XHJcbiAgICAgICAgcmV0dXJuIHggKiB6O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaW5kZXggPT09IDUpIHtcclxuICAgICAgICByZXR1cm4geSAqIHo7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmRleCA9PT0gNikge1xyXG4gICAgICAgIHJldHVybiB4ICogeTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGluZGV4ID09PSA3KSB7XHJcbiAgICAgICAgcmV0dXJuIDMuMCAqIHogKiB6IC0gMS4wO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHggKiB4IC0geSAqIHk7XHJcbiAgICB9XHJcbn1cclxuXHJcbnZhciBub3JtYWxUcmFuc2Zvcm0gPSB7XHJcbiAgICBweDogWzIsIDEsIDAsIC0xLCAtMSwgMV0sXHJcbiAgICBueDogWzIsIDEsIDAsIDEsIC0xLCAtMV0sXHJcbiAgICBweTogWzAsIDIsIDEsIDEsIC0xLCAtMV0sXHJcbiAgICBueTogWzAsIDIsIDEsIDEsIDEsIDFdLFxyXG4gICAgcHo6IFswLCAxLCAyLCAtMSwgLTEsIC0xXSxcclxuICAgIG56OiBbMCwgMSwgMiwgMSwgLTEsIDFdXHJcbn07XHJcblxyXG4vLyBQcm9qZWN0IG9uIGNwdS5cclxuZnVuY3Rpb24gcHJvamVjdEVudmlyb25tZW50TWFwQ1BVKHJlbmRlcmVyLCBjdWJlUGl4ZWxzLCB3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICB2YXIgY29lZmYgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSg5ICogMyk7XHJcbiAgICB2YXIgbm9ybWFsID0gdmVjMy5jcmVhdGUoKTtcclxuICAgIHZhciB0ZXhlbCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICB2YXIgZmV0Y2hOb3JtYWwgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgZm9yICh2YXIgbSA9IDA7IG0gPCA5OyBtKyspIHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRhcmdldHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgdmFyIHBpeGVscyA9IGN1YmVQaXhlbHNbdGFyZ2V0c1trXV07XHJcblxyXG4gICAgICAgICAgICB2YXIgc2lkZVJlc3VsdCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIHZhciBkaXZpZGVyID0gMDtcclxuICAgICAgICAgICAgdmFyIGkgPSAwO1xyXG4gICAgICAgICAgICB2YXIgdHJhbnNmb3JtID0gbm9ybWFsVHJhbnNmb3JtW3RhcmdldHNba11dO1xyXG4gICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsWzBdID0geCAvICh3aWR0aCAtIDEuMCkgKiAyLjAgLSAxLjA7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBGbGlwIHk/XHJcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsWzFdID0geSAvIChoZWlnaHQgLSAxLjApICogMi4wIC0gMS4wO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbFsyXSA9IC0xLjA7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5ub3JtYWxpemUobm9ybWFsLCBub3JtYWwpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBmZXRjaE5vcm1hbFswXSA9IG5vcm1hbFt0cmFuc2Zvcm1bMF1dICogdHJhbnNmb3JtWzNdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZldGNoTm9ybWFsWzFdID0gbm9ybWFsW3RyYW5zZm9ybVsxXV0gKiB0cmFuc2Zvcm1bNF07XHJcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2hOb3JtYWxbMl0gPSBub3JtYWxbdHJhbnNmb3JtWzJdXSAqIHRyYW5zZm9ybVs1XTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMF0gPSBwaXhlbHNbaSsrXSAvIDI1NTtcclxuICAgICAgICAgICAgICAgICAgICB0ZXhlbFsxXSA9IHBpeGVsc1tpKytdIC8gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzJdID0gcGl4ZWxzW2krK10gLyAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUkdCTSBEZWNvZGVcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSBwaXhlbHNbaSsrXSAvIDI1NSAqIDguMTI7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMF0gKj0gc2NhbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMV0gKj0gc2NhbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMl0gKj0gc2NhbGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQoc2lkZVJlc3VsdCwgc2lkZVJlc3VsdCwgdGV4ZWwsIGhhcm1vbmljcyhmZXRjaE5vcm1hbCwgbSkgKiAtbm9ybWFsWzJdKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyAtbm9ybWFsLnogZXF1YWxzIGNvcyh0aGV0YSkgb2YgTGFtYmVydGlhblxyXG4gICAgICAgICAgICAgICAgICAgIGRpdmlkZXIgKz0gLW5vcm1hbFsyXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHJlc3VsdCwgcmVzdWx0LCBzaWRlUmVzdWx0LCAxIC8gZGl2aWRlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb2VmZlttICogM10gPSByZXN1bHRbMF0gLyA2LjA7XHJcbiAgICAgICAgY29lZmZbbSAqIDMgKyAxXSA9IHJlc3VsdFsxXSAvIDYuMDtcclxuICAgICAgICBjb2VmZlttICogMyArIDJdID0gcmVzdWx0WzJdIC8gNi4wO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvZWZmO1xyXG59XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSBlbnZNYXBcclxuICogQHBhcmFtICB7T2JqZWN0fSBbdGV4dHVyZU9wdHNdXHJcbiAqIEBwYXJhbSAge09iamVjdH0gW3RleHR1cmVPcHRzLmxvZF1cclxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3RleHR1cmVPcHRzLmRlY29kZVJHQk1dXHJcbiAqL1xyXG5zaC5wcm9qZWN0RW52aXJvbm1lbnRNYXAgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGVudk1hcCwgb3B0cykge1xyXG5cclxuICAgIC8vIFRPRE8gc1JHQlxyXG5cclxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG4gICAgb3B0cy5sb2QgPSBvcHRzLmxvZCB8fCAwO1xyXG5cclxuICAgIHZhciBza3lib3g7XHJcbiAgICB2YXIgZHVtbXlTY2VuZSA9IG5ldyBTY2VuZSgpO1xyXG4gICAgdmFyIHNpemUgPSA2NDtcclxuICAgIGlmIChlbnZNYXAudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlMkQnKSB7XHJcbiAgICAgICAgc2t5Ym94ID0gbmV3IFNreWRvbWUoe1xyXG4gICAgICAgICAgICBzY2VuZTogZHVtbXlTY2VuZSxcclxuICAgICAgICAgICAgZW52aXJvbm1lbnRNYXA6IGVudk1hcFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgc2l6ZSA9IChlbnZNYXAuaW1hZ2UgJiYgZW52TWFwLmltYWdlLnB4KSA/IGVudk1hcC5pbWFnZS5weC53aWR0aCA6IGVudk1hcC53aWR0aDtcclxuICAgICAgICBza3lib3ggPSBuZXcgU2t5Ym94KHtcclxuICAgICAgICAgICAgc2NlbmU6IGR1bW15U2NlbmUsXHJcbiAgICAgICAgICAgIGVudmlyb25tZW50TWFwOiBlbnZNYXBcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIENvbnZlcnQgdG8gcmdibVxyXG4gICAgdmFyIHdpZHRoID0gTWF0aC5jZWlsKHNpemUgLyBNYXRoLnBvdygyLCBvcHRzLmxvZCkpO1xyXG4gICAgdmFyIGhlaWdodCA9IE1hdGguY2VpbChzaXplIC8gTWF0aC5wb3coMiwgb3B0cy5sb2QpKTtcclxuICAgIHZhciByZ2JtVGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGhlaWdodFxyXG4gICAgfSk7XHJcbiAgICB2YXIgZnJhbWVidWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcclxuICAgIHNreWJveC5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fRU5DT0RFJyk7XHJcbiAgICBpZiAob3B0cy5kZWNvZGVSR0JNKSB7XHJcbiAgICAgICAgc2t5Ym94Lm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUkdCTV9ERUNPREUnKTtcclxuICAgIH1cclxuICAgIHNreWJveC5tYXRlcmlhbC5zZXQoJ2xvZCcsIG9wdHMubG9kKTtcclxuICAgIHZhciBlbnZNYXBQYXNzID0gbmV3IEVudmlyb25tZW50TWFwUGFzcyh7XHJcbiAgICAgICAgdGV4dHVyZTogcmdibVRleHR1cmVcclxuICAgIH0pO1xyXG4gICAgdmFyIGN1YmVQaXhlbHMgPSB7fTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFyZ2V0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGN1YmVQaXhlbHNbdGFyZ2V0c1tpXV0gPSBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpO1xyXG4gICAgICAgIHZhciBjYW1lcmEgPSBlbnZNYXBQYXNzLmdldENhbWVyYSh0YXJnZXRzW2ldKTtcclxuICAgICAgICBjYW1lcmEuZm92ID0gOTA7XHJcbiAgICAgICAgZnJhbWVidWZmZXIuYXR0YWNoKHJnYm1UZXh0dXJlKTtcclxuICAgICAgICBmcmFtZWJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICByZW5kZXJlci5yZW5kZXIoZHVtbXlTY2VuZSwgY2FtZXJhKTtcclxuICAgICAgICByZW5kZXJlci5nbC5yZWFkUGl4ZWxzKFxyXG4gICAgICAgICAgICAwLCAwLCB3aWR0aCwgaGVpZ2h0LFxyXG4gICAgICAgICAgICBUZXh0dXJlLlJHQkEsIFRleHR1cmUuVU5TSUdORURfQllURSwgY3ViZVBpeGVsc1t0YXJnZXRzW2ldXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZnJhbWVidWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBza3lib3guZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICBmcmFtZWJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIHJnYm1UZXh0dXJlLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG5cclxuICAgIHJldHVybiBwcm9qZWN0RW52aXJvbm1lbnRNYXBDUFUocmVuZGVyZXIsIGN1YmVQaXhlbHMsIHdpZHRoLCBoZWlnaHQpO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgc2g7XHJcbiIsIlxyXG4vKipcclxuICogSGVscGVycyBmb3IgY3JlYXRpbmcgYSBjb21tb24gM2QgYXBwbGljYXRpb24uXHJcbiAqIEBuYW1lc3BhY2UgY2xheS5hcHBsaWNhdGlvblxyXG4gKi9cclxuXHJcbiAvLyBUT0RPIGNyZWF0ZUNvbXBvc2l0b3JcclxuIC8vIFRPRE8gRGlzcG9zZSB0ZXN0LiBnZW9DYWNoZSB0ZXN0LlxyXG4gLy8gVE9ETyBUb25lbWFwcGluZyBleHBvc3VyZVxyXG4gLy8gVE9ETyBmaXRNb2RlbC5cclxuIC8vIFRPRE8gUGFydGljbGUgP1xyXG5pbXBvcnQgUmVuZGVyZXIgZnJvbSAnLi9SZW5kZXJlcic7XHJcbmltcG9ydCBTY2VuZSBmcm9tICcuL1NjZW5lJztcclxuaW1wb3J0IFRpbWVsaW5lIGZyb20gJy4vVGltZWxpbmUnO1xyXG5pbXBvcnQgQ3ViZUdlbyBmcm9tICcuL2dlb21ldHJ5L0N1YmUnO1xyXG5pbXBvcnQgU3BoZXJlR2VvIGZyb20gJy4vZ2VvbWV0cnkvU3BoZXJlJztcclxuaW1wb3J0IFBsYW5lR2VvIGZyb20gJy4vZ2VvbWV0cnkvUGxhbmUnO1xyXG5pbXBvcnQgUGFyYW1ldHJpY1N1cmZhY2VHZW8gZnJvbSAnLi9nZW9tZXRyeS9QYXJhbWV0cmljU3VyZmFjZSc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi9UZXh0dXJlQ3ViZSc7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vVGV4dHVyZSc7XHJcbmltcG9ydCBNZXNoIGZyb20gJy4vTWVzaCc7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuL01hdGVyaWFsJztcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IE9ydGhvZ3JhcGhpY0NhbWVyYSBmcm9tICcuL2NhbWVyYS9PcnRob2dyYXBoaWMnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBHTFRGTG9hZGVyIGZyb20gJy4vbG9hZGVyL0dMVEYnO1xyXG5pbXBvcnQgTm9kZSBmcm9tICcuL05vZGUnO1xyXG5pbXBvcnQgRGlyZWN0aW9uYWxMaWdodCBmcm9tICcuL2xpZ2h0L0RpcmVjdGlvbmFsJztcclxuaW1wb3J0IFBvaW50TGlnaHQgZnJvbSAnLi9saWdodC9Qb2ludCc7XHJcbmltcG9ydCBTcG90TGlnaHQgZnJvbSAnLi9saWdodC9TcG90JztcclxuaW1wb3J0IEFtYmllbnRMaWdodCBmcm9tICcuL2xpZ2h0L0FtYmllbnQnO1xyXG5pbXBvcnQgQW1iaWVudEN1YmVtYXBMaWdodCBmcm9tICcuL2xpZ2h0L0FtYmllbnRDdWJlbWFwJztcclxuaW1wb3J0IEFtYmllbnRTSExpZ2h0IGZyb20gJy4vbGlnaHQvQW1iaWVudFNIJztcclxuaW1wb3J0IFNoYWRvd01hcFBhc3MgZnJvbSAnLi9wcmVQYXNzL1NoYWRvd01hcCc7XHJcbmltcG9ydCBSYXlQaWNraW5nIGZyb20gJy4vcGlja2luZy9SYXlQaWNraW5nJztcclxuaW1wb3J0IExSVUNhY2hlIGZyb20gJy4vY29yZS9MUlUnO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCBzaFV0aWwgZnJvbSAnLi91dGlsL3NoJztcclxuaW1wb3J0IHRleHR1cmVVdGlsIGZyb20gJy4vdXRpbC90ZXh0dXJlJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxuXHJcbmltcG9ydCBjb2xvclV0aWwgZnJvbSAnLi9jb3JlL2NvbG9yJztcclxudmFyIHBhcnNlQ29sb3IgPSBjb2xvclV0aWwucGFyc2VUb0Zsb2F0O1xyXG5cclxuaW1wb3J0IHNoYWRlckxpYnJhcnkgZnJvbSAnLi9zaGFkZXIvYnVpbHRpbic7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi9TaGFkZXInO1xyXG5cclxuXHJcbnZhciBFVkVfTkFNRVMgPSBbJ2NsaWNrJywgJ2RibGNsaWNrJywgJ21vdXNlb3ZlcicsICdtb3VzZW91dCcsICdtb3VzZW1vdmUnLFxyXG4gICAgJ3RvdWNoc3RhcnQnLCAndG91Y2hlbmQnLCAndG91Y2htb3ZlJyxcclxuICAgICdtb3VzZXdoZWVsJywgJ0RPTU1vdXNlU2Nyb2xsJ1xyXG5dO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtzdHJpbmd8SFRNTENhbnZhc0VsZW1lbnR8SFRNTEltYWdlRWxlbWVudHxIVE1MVmlkZW9FbGVtZW50fSBJbWFnZUxpa2VcclxuICovXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7c3RyaW5nfEhUTUxDYW52YXNFbGVtZW50fEhUTUxJbWFnZUVsZW1lbnR8SFRNTFZpZGVvRWxlbWVudHxjbGF5LlRleHR1cmUyRH0gVGV4dHVyZUxpa2VcclxuICovXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7c3RyaW5nfEFycmF5LjxudW1iZXI+fSBDb2xvclxyXG4gKi9cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtIVE1MRWxlbWVudHxzdHJpbmd9IERvbVF1ZXJ5XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFwcDNETmFtZXNwYWNlXHJcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGluaXQgSW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIGluaXRpbmcgYXBwLlxyXG4gKiAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHJldHVybiBhIHByb21pc2UgaW4gaW5pdCB0byBzdGFydCB0aGUgbG9vcCBhc3luY2hyb25vdXNseSB3aGVuIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkLlxyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBsb29wIExvb3AgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCBlYWNoIGZyYW1lLlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFthdXRvUmVuZGVyPXRydWVdIElmIHJlbmRlciBhdXRvbWF0aWNhbGx5IGVhY2ggZnJhbWUuXHJcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IFtiZWZvcmVSZW5kZXJdXHJcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IFthZnRlclJlbmRlcl1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFt3aWR0aF0gQ29udGFpbmVyIHdpZHRoLlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2hlaWdodF0gQ29udGFpbmVyIGhlaWdodC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtkZXZpY2VQaXhlbFJhdGlvXVxyXG4gKiBAcHJvcGVydHkge09iamVjdC48c3RyaW5nLCBGdW5jdGlvbj59IFttZXRob2RzXSBNZXRob2RzIHRoYXQgd2lsbCBiZSBpbmplY3RlZCB0byBBcHAzRCNtZXRob2RzLlxyXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2dyYXBoaWNdIEdyYXBoaWMgY29uZmlndXJhdGlvbiBpbmNsdWRpbmcgc2hhZG93LCBjb2xvciBzcGFjZS5cclxuICogQHByb3BlcnR5IHtib29sZWFufSBbZ3JhcGhpYy5zaGFkb3c9ZmFsc2VdIElmIGVuYWJsZSBzaGFkb3dcclxuICogQHByb3BlcnR5IHtib29sZWFufSBbZ3JhcGhpYy5saW5lYXI9ZmFsc2VdIElmIHVzZSBsaW5lYXIgY29sb3Igc3BhY2VcclxuICogQHByb3BlcnR5IHtib29sZWFufSBbZ3JhcGhpYy50b25lbWFwcGluZz1mYWxzZV0gSWYgZW5hYmxlIEFDRVMgdG9uZSBtYXBwaW5nLlxyXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtldmVudD1mYWxzZV0gSWYgZW5hYmxlIG1vdXNlL3RvdWNoIGV2ZW50LiBJdCB3aWxsIHNsb3cgZG93biB0aGUgc3lzdGVtIGlmIGdlb21ldHJpZXMgYXJlIGNvbXBsZXguXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0YW5kYXJkTWF0ZXJpYWxNUkNvbmZpZ1xyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdXHJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2hhZGVyPSdzdGFuZGFyZE1SJ11cclxuICogQHByb3BlcnR5IHtDb2xvcn0gW2NvbG9yXVxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2FscGhhXVxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21ldGFsbmVzc11cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtyb3VnaG5lc3NdXHJcbiAqIEBwcm9wZXJ0eSB7Q29sb3J9IFtlbWlzc2lvbl1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtlbWlzc2lvbkludGVuc2l0eV1cclxuICogQHByb3BlcnR5IHtib29sZWFufSBbdHJhbnNwYXJlbnRdXHJcbiAqIEBwcm9wZXJ0eSB7VGV4dHVyZUxpa2V9IFtkaWZmdXNlTWFwXVxyXG4gKiBAcHJvcGVydHkge1RleHR1cmVMaWtlfSBbbm9ybWFsTWFwXVxyXG4gKiBAcHJvcGVydHkge1RleHR1cmVMaWtlfSBbcm91Z2huZXNzTWFwXVxyXG4gKiBAcHJvcGVydHkge1RleHR1cmVMaWtlfSBbbWV0YWxuZXNzTWFwXVxyXG4gKiBAcHJvcGVydHkge1RleHR1cmVMaWtlfSBbZW1pc3NpdmVNYXBdXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFVzaW5nIEFwcDNEIGlzIGEgbXVjaCBtb3JlIGNvbnZlbmllbnQgd2F5IHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHlvdXIgM0QgYXBwbGljYXRpb24uXHJcbiAqXHJcbiAqIEl0IHByb3ZpZGVzIHRoZSBhYmlsaXRpZXMgdG86XHJcbiAqXHJcbiAqICsgTWFuYWdlIGFwcGxpY2F0aW9uIGxvb3AgYW5kIHJlbmRlcmluZy5cclxuICogKyBDb2xsZWN0IEdQVSByZXNvdXJjZSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbWVtb3J5IGxlYWsgY29uY2Vybi5cclxuICogKyBNb3VzZSBldmVudCBtYW5hZ2VtZW50LlxyXG4gKiArIENyZWF0ZSBzY2VuZSBvYmplY3RzLCBtYXRlcmlhbHMsIHRleHR1cmVzIHdpdGggc2ltcGxlciBjb2RlLlxyXG4gKiArIExvYWQgbW9kZWxzIHdpdGggb25lIGxpbmUgb2YgY29kZS5cclxuICogKyBQcm9taXNlZCBpbnRlcmZhY2VzLlxyXG4gKlxyXG4gKiBIZXJlIGlzIGEgYmFzaWMgZXhhbXBsZSB0byBjcmVhdGUgYSByb3RhdGluZyBjdWJlLlxyXG4gKlxyXG5gYGBqc1xyXG52YXIgYXBwID0gY2xheS5hcHBsaWNhdGlvbi5jcmVhdGUoJyN2aWV3cG9ydCcsIHtcclxuICAgIGluaXQ6IGZ1bmN0aW9uIChhcHApIHtcclxuICAgICAgICAvLyBDcmVhdGUgYSBwZXJzcGVjdGl2ZSBjYW1lcmEuXHJcbiAgICAgICAgLy8gRmlyc3QgcGFyYW1ldGVyIGlzIHRoZSBjYW1lcmEgcG9zaXRpb24uIFdoaWNoIGlzIGluIGZyb250IG9mIHRoZSBjdWJlLlxyXG4gICAgICAgIC8vIFNlY29uZCBwYXJhbWV0ZXIgaXMgdGhlIGNhbWVyYSBsb29rQXQgdGFyZ2V0LiBXaGljaCBpcyB0aGUgb3JpZ2luIG9mIHRoZSB3b3JsZCwgYW5kIHdoZXJlIHRoZSBjdWJlIHB1dHMuXHJcbiAgICAgICAgdGhpcy5fY2FtZXJhID0gYXBwLmNyZWF0ZUNhbWVyYShbMCwgMiwgNV0sIFswLCAwLCAwXSk7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgc2FtcGxlIGN1YmVcclxuICAgICAgICB0aGlzLl9jdWJlID0gYXBwLmNyZWF0ZUN1YmUoKTtcclxuICAgICAgICAvLyBDcmVhdGUgYSBkaXJlY3Rpb25hbCBsaWdodC4gVGhlIGRpcmVjdGlvbiBpcyBmcm9tIHRvcCByaWdodCB0byBsZWZ0IGJvdHRvbSwgYXdheSBmcm9tIGNhbWVyYS5cclxuICAgICAgICB0aGlzLl9tYWluTGlnaHQgPSBhcHAuY3JlYXRlRGlyZWN0aW9uYWxMaWdodChbLTEsIC0xLCAtMV0pO1xyXG4gICAgfSxcclxuICAgIGxvb3A6IGZ1bmN0aW9uIChhcHApIHtcclxuICAgICAgICAvLyBTaW1wbHkgcm90YXRpbmcgdGhlIGN1YmUgZXZlcnkgZnJhbWUuXHJcbiAgICAgICAgdGhpcy5fY3ViZS5yb3RhdGlvbi5yb3RhdGVZKGFwcC5mcmFtZVRpbWUgLyAxMDAwKTtcclxuICAgIH1cclxufSk7XHJcbmBgYFxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuYXBwbGljYXRpb24uQXBwM0RcclxuICogQHBhcmFtIHtEb21RdWVyeX0gZG9tIENvbnRhaW5lciBkb20gZWxlbWVudCBvciBhIHNlbGVjdG9yIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGluIGBxdWVyeVNlbGVjdG9yYFxyXG4gKiBAcGFyYW0ge0FwcDNETmFtZXNwYWNlfSBhcHBOUyBPcHRpb25zIGFuZCBuYW1lc3BhY2UgdXNlZCBpbiBjcmVhdGluZyBhcHAzRFxyXG4gKi9cclxuZnVuY3Rpb24gQXBwM0QoZG9tLCBhcHBOUykge1xyXG5cclxuICAgIGFwcE5TID0gYXBwTlMgfHwge307XHJcbiAgICBhcHBOUy5ncmFwaGljID0gYXBwTlMuZ3JhcGhpYyB8fCB7fTtcclxuXHJcbiAgICBpZiAoYXBwTlMuYXV0b1JlbmRlciA9PSBudWxsKSB7XHJcbiAgICAgICAgYXBwTlMuYXV0b1JlbmRlciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBkb20gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgZG9tID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihkb20pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZG9tKSB7IHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkb20nKTsgfVxyXG5cclxuICAgIHZhciBpc0RvbUNhbnZhcyA9ICFkb20ubm9kZU5hbWUgIC8vIE5vdCBpbiBkb20gZW52aXJvbm1lbnRcclxuICAgICAgICB8fCBkb20ubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0NBTlZBUyc7XHJcblxyXG4gICAgdmFyIHJlbmRlcmVyT3B0cyA9IHt9O1xyXG4gICAgaXNEb21DYW52YXMgJiYgKHJlbmRlcmVyT3B0cy5jYW52YXMgPSBkb20pO1xyXG4gICAgYXBwTlMuZGV2aWNlUGl4ZWxSYXRpbyAmJiAocmVuZGVyZXJPcHRzLmRldmljZVBpeGVsUmF0aW8gPSBhcHBOUy5kZXZpY2VQaXhlbFJhdGlvKTtcclxuXHJcbiAgICB2YXIgZ1JlbmRlcmVyID0gbmV3IFJlbmRlcmVyKHJlbmRlcmVyT3B0cyk7XHJcbiAgICB2YXIgZ1dpZHRoID0gYXBwTlMud2lkdGggfHwgZG9tLmNsaWVudFdpZHRoO1xyXG4gICAgdmFyIGdIZWlnaHQgPSBhcHBOUy5oZWlnaHQgfHwgZG9tLmNsaWVudEhlaWdodDtcclxuXHJcbiAgICB2YXIgZ1NjZW5lID0gbmV3IFNjZW5lKCk7XHJcbiAgICB2YXIgZ1RpbWVsaW5lID0gbmV3IFRpbWVsaW5lKCk7XHJcbiAgICB2YXIgZ1NoYWRvd1Bhc3MgPSBhcHBOUy5ncmFwaGljLnNoYWRvdyAmJiBuZXcgU2hhZG93TWFwUGFzcygpO1xyXG4gICAgdmFyIGdSYXlQaWNraW5nID0gYXBwTlMuZXZlbnQgJiYgbmV3IFJheVBpY2tpbmcoe1xyXG4gICAgICAgIHNjZW5lOiBnU2NlbmUsXHJcbiAgICAgICAgcmVuZGVyZXI6IGdSZW5kZXJlclxyXG4gICAgfSk7XHJcblxyXG4gICAgIWlzRG9tQ2FudmFzICYmIGRvbS5hcHBlbmRDaGlsZChnUmVuZGVyZXIuY2FudmFzKTtcclxuXHJcbiAgICBnUmVuZGVyZXIucmVzaXplKGdXaWR0aCwgZ0hlaWdodCk7XHJcblxyXG4gICAgdmFyIGdGcmFtZVRpbWUgPSAwO1xyXG4gICAgdmFyIGdFbGFwc2VkVGltZSA9IDA7XHJcblxyXG4gICAgZ1RpbWVsaW5lLnN0YXJ0KCk7XHJcblxyXG4gICAgdmFyIHVzZXJNZXRob2RzID0ge307XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gYXBwTlMubWV0aG9kcykge1xyXG4gICAgICAgIHVzZXJNZXRob2RzW2tleV0gPSBhcHBOUy5tZXRob2RzW2tleV0uYmluZChhcHBOUywgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENvbnRhaW5lciBkb20gZWxlbWVudFxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjY29udGFpbmVyXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnRhaW5lcjogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvbTsgfSB9LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjcmVuZGVyZXJcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5SZW5kZXJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICByZW5kZXJlcjogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdSZW5kZXJlcjsgfX0sXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5BcHAzRCNzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlJlbmRlcmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNjZW5lOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1NjZW5lOyB9fSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI3RpbWVsaW5lXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuUmVuZGVyZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGltZWxpbmU6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnVGltZWxpbmU7IH19LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRpbWUgZWxhcHNlZCBzaW5jZSBsYXN0IGZyYW1lLiBDYW4gYmUgdXNlZCBpbiBsb29wIHRvIGNhbGN1bGF0ZSB0aGUgbW92ZW1lbnQuXHJcbiAgICAgICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5BcHAzRCNmcmFtZVRpbWVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZyYW1lVGltZTogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdGcmFtZVRpbWU7IH19LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRpbWUgZWxhcHNlZCBzaW5jZSBhcHBsaWNhdGlvbiBjcmVhdGVkLlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjZWxhcHNlZFRpbWVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVsYXBzZWRUaW1lOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ0VsYXBzZWRUaW1lOyB9fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2lkdGggb2Ygdmlld3BvcnQuXHJcbiAgICAgICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5BcHAzRCN3aWR0aFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgd2lkdGg6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnUmVuZGVyZXIuZ2V0V2lkdGgoKTsgfX0sXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSGVpZ2h0IG9mIHZpZXdwb3J0LlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjaGVpZ2h0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBoZWlnaHQ6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnUmVuZGVyZXIuZ2V0SGVpZ2h0KCk7IH19LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNZXRob2RzIGZyb20ge0BsaW5rIGNsYXkuYXBwbGljYXRpb24uY3JlYXRlfVxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjbWV0aG9kc1xyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWV0aG9kczogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVzZXJNZXRob2RzOyB9IH0sXHJcblxyXG4gICAgICAgIF9zaGFkb3dQYXNzOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1NoYWRvd1Bhc3M7IH0gfSxcclxuXHJcbiAgICAgICAgX2FwcE5TOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYXBwTlM7IH0gfSxcclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzaXplIHRoZSBhcHBsaWNhdGlvbi4gV2lsbCB1c2UgdGhlIGNvbnRhaW5lciBjbGllbnRXaWR0aC9jbGllbnRIZWlnaHQgaWYgd2lkdGgvaGVpZ2h0IGluIHBhcmFtZXRlcnMgYXJlIG5vdCBnaXZlbi5cclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQG1lbWJlck9mIHtjbGF5LmFwcGxpY2F0aW9uLkFwcDNEfVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3aWR0aF1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0XVxyXG4gICAgICovXHJcbiAgICB0aGlzLnJlc2l6ZSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICAgICAgZ1dpZHRoID0gd2lkdGggfHwgYXBwTlMud2lkdGggfHwgZG9tLmNsaWVudFdpZHRoO1xyXG4gICAgICAgIGdIZWlnaHQgPSBoZWlnaHQgfHwgZG9tLmhlaWdodCB8fCBkb20uY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgIGdSZW5kZXJlci5yZXNpemUoZ1dpZHRoLCBnSGVpZ2h0KTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIHRoZSBhcHBsaWNhdGlvblxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKi9cclxuICAgIHRoaXMuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmIChhcHBOUy5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgIGFwcE5TLmRpc3Bvc2UodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdUaW1lbGluZS5zdG9wKCk7XHJcbiAgICAgICAgZ1JlbmRlcmVyLmRpc3Bvc2VTY2VuZShnU2NlbmUpO1xyXG4gICAgICAgIGdTaGFkb3dQYXNzICYmIGdTaGFkb3dQYXNzLmRpc3Bvc2UoZ1JlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgZG9tLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgIEVWRV9OQU1FUy5mb3JFYWNoKGZ1bmN0aW9uIChldmVUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXNbbWFrZUhhbmRsZXJOYW1lKGV2ZVR5cGUpXSAmJiB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sIG1ha2VIYW5kbGVyTmFtZShldmVUeXBlKSk7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9O1xyXG5cclxuICAgIGdSYXlQaWNraW5nICYmIHRoaXMuX2luaXRNb3VzZUV2ZW50cyhnUmF5UGlja2luZyk7XHJcblxyXG4gICAgdGhpcy5fZ2VvQ2FjaGUgPSBuZXcgTFJVQ2FjaGUoMjApO1xyXG4gICAgdGhpcy5fdGV4Q2FjaGUgPSBuZXcgTFJVQ2FjaGUoMjApO1xyXG5cclxuICAgIC8vIEdQVSBSZXNvdXJjZXMuXHJcbiAgICB0aGlzLl90ZXh0dXJlc0xpc3QgPSB7fTtcclxuICAgIHRoaXMuX2dlb21ldHJpZXNMaXN0ID0ge307XHJcblxyXG4gICAgLy8gRG8gaW5pdCB0aGUgYXBwbGljYXRpb24uXHJcbiAgICB2YXIgaW5pdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoYXBwTlMuaW5pdCAmJiBhcHBOUy5pbml0KHRoaXMpKTtcclxuICAgIC8vIFVzZSB0aGUgaW5pdGVkIGNhbWVyYS5cclxuICAgIGdSYXlQaWNraW5nICYmIChnUmF5UGlja2luZy5jYW1lcmEgPSBnU2NlbmUuZ2V0TWFpbkNhbWVyYSgpKTtcclxuXHJcbiAgICBpZiAoIWFwcE5TLmxvb3ApIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ01pc3MgbG9vcCBtZXRob2QuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgaW5pdFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZ1RpbWVsaW5lLm9uKCdmcmFtZScsIGZ1bmN0aW9uIChmcmFtZVRpbWUpIHtcclxuICAgICAgICAgICAgZ0ZyYW1lVGltZSA9IGZyYW1lVGltZTtcclxuICAgICAgICAgICAgZ0VsYXBzZWRUaW1lICs9IGZyYW1lVGltZTtcclxuXHJcbiAgICAgICAgICAgIHZhciBjYW1lcmEgPSBnU2NlbmUuZ2V0TWFpbkNhbWVyYSgpO1xyXG4gICAgICAgICAgICBpZiAoY2FtZXJhKSB7XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEuYXNwZWN0ID0gZ1JlbmRlcmVyLmdldFZpZXdwb3J0QXNwZWN0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ1JheVBpY2tpbmcgJiYgKGdSYXlQaWNraW5nLmNhbWVyYSA9IGNhbWVyYSk7XHJcblxyXG4gICAgICAgICAgICBhcHBOUy5sb29wICYmIGFwcE5TLmxvb3Aoc2VsZik7XHJcblxyXG4gICAgICAgICAgICBpZiAoYXBwTlMuYXV0b1JlbmRlcikge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yZW5kZXIoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2VsZi5jb2xsZWN0UmVzb3VyY2VzKCk7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBnU2NlbmUub24oJ2JlZm9yZXJlbmRlcicsIGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgcmVuZGVyTGlzdCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pblJlbmRlcikge1xyXG4gICAgICAgICAgICAvLyBPbmx5IHVwZGF0ZSBncmFwaGljIG9wdGlvbnMgd2hlbiB1c2luZyAjcmVuZGVyIGZ1bmN0aW9uLlxyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVHcmFwaGljT3B0aW9ucyhhcHBOUy5ncmFwaGljLCByZW5kZXJMaXN0Lm9wYXF1ZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVHcmFwaGljT3B0aW9ucyhhcHBOUy5ncmFwaGljLCByZW5kZXJMaXN0LnRyYW5zcGFyZW50LCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgdGhpcyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSW1hZ2VMaWtlRWxlbWVudCh2YWwpIHtcclxuICAgIHJldHVybiAodHlwZW9mIEltYWdlICE9PSAndW5kZWZpbmVkJyAmJiB2YWwgaW5zdGFuY2VvZiBJbWFnZSlcclxuICAgICAgICB8fCAodHlwZW9mIEhUTUxDYW52YXNFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB2YWwgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudClcclxuICAgICAgICB8fCAodHlwZW9mIEhUTUxWaWRlb0VsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHZhbCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRLZXlGcm9tSW1hZ2VMaWtlKHZhbCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgPyB2YWwgOiAodmFsLl9fa2V5X18gfHwgKHZhbC5fX2tleV9fID0gdXRpbC5nZW5HVUlEKCkpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbWFrZUhhbmRsZXJOYW1lKGV2ZVR5cGUpIHtcclxuICAgIHJldHVybiAnXycgKyBldmVUeXBlICsgJ0hhbmRsZXInO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYWNrYWdlRXZlbnQoZXZlbnRUeXBlLCBwaWNrUmVzdWx0LCBvZmZzZXRYLCBvZmZzZXRZLCB3aGVlbERlbHRhKSB7XHJcbiAgICB2YXIgZXZlbnQgPSB1dGlsLmNsb25lKHBpY2tSZXN1bHQpO1xyXG4gICAgZXZlbnQudHlwZSA9IGV2ZW50VHlwZTtcclxuICAgIGV2ZW50Lm9mZnNldFggPSBvZmZzZXRYO1xyXG4gICAgZXZlbnQub2Zmc2V0WSA9IG9mZnNldFk7XHJcbiAgICBpZiAod2hlZWxEZWx0YSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGV2ZW50LndoZWVsRGVsdGEgPSB3aGVlbERlbHRhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGV2ZW50O1xyXG59XHJcblxyXG5mdW5jdGlvbiBidWJibGluZ0V2ZW50KHRhcmdldCwgZXZlbnQpIHtcclxuICAgIHdoaWxlICh0YXJnZXQgJiYgIWV2ZW50LmNhbmNlbEJ1YmJsZSkge1xyXG4gICAgICAgIHRhcmdldC50cmlnZ2VyKGV2ZW50LnR5cGUsIGV2ZW50KTtcclxuICAgICAgICB0YXJnZXQgPSB0YXJnZXQuZ2V0UGFyZW50KCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbkFwcDNELnByb3RvdHlwZS5faW5pdE1vdXNlRXZlbnRzID0gZnVuY3Rpb24gKHJheVBpY2tpbmcpIHtcclxuICAgIHZhciBkb20gPSB0aGlzLmNvbnRhaW5lcjtcclxuXHJcbiAgICB2YXIgb2xkVGFyZ2V0ID0gbnVsbDtcclxuICAgIEVWRV9OQU1FUy5mb3JFYWNoKGZ1bmN0aW9uIChfZXZlVHlwZSkge1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgX2V2ZVR5cGUsIHRoaXNbbWFrZUhhbmRsZXJOYW1lKF9ldmVUeXBlKV0gPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICBpZiAoIXJheVBpY2tpbmcuY2FtZXJhKSB7IC8vIE5vdCBoYXZlIGNhbWVyYSB5ZXQuXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCAmJiBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYm94ID0gZG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0WCwgb2Zmc2V0WTtcclxuICAgICAgICAgICAgdmFyIGV2ZVR5cGUgPSBfZXZlVHlwZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChldmVUeXBlLmluZGV4T2YoJ3RvdWNoJykgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRvdWNoID0gZXZlVHlwZSAhPT0gJ3RvdWNoZW5kJ1xyXG4gICAgICAgICAgICAgICAgICAgID8gZS50YXJnZXRUb3VjaGVzWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgOiBlLmNoYW5nZWRUb3VjaGVzWzBdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZVR5cGUgPT09ICd0b3VjaHN0YXJ0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZVR5cGUgPSAnbW91c2Vkb3duJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZVR5cGUgPT09ICd0b3VjaGVuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVUeXBlID0gJ21vdXNldXAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXZlVHlwZSA9PT0gJ3RvdWNobW92ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVUeXBlID0gJ21vdXNlbW92ZSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBvZmZzZXRYID0gdG91Y2guY2xpZW50WCAtIGJveC5sZWZ0O1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0WSA9IHRvdWNoLmNsaWVudFkgLSBib3gudG9wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0WCA9IGUuY2xpZW50WCAtIGJveC5sZWZ0O1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0WSA9IGUuY2xpZW50WSAtIGJveC50b3A7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBwaWNrUmVzdWx0ID0gcmF5UGlja2luZy5waWNrKG9mZnNldFgsIG9mZnNldFkpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRlbHRhO1xyXG4gICAgICAgICAgICBpZiAoZXZlVHlwZSA9PT0gJ0RPTU1vdXNlU2Nyb2xsJyB8fCBldmVUeXBlID09PSAnbW91c2V3aGVlbCcpIHtcclxuICAgICAgICAgICAgICAgIGRlbHRhID0gKGUud2hlZWxEZWx0YSkgPyBlLndoZWVsRGVsdGEgLyAxMjAgOiAtKGUuZGV0YWlsIHx8IDApIC8gMztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHBpY2tSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIC8vIEp1c3QgaWdub3JlIHNpbGVudCBlbGVtZW50LlxyXG4gICAgICAgICAgICAgICAgaWYgKHBpY2tSZXN1bHQudGFyZ2V0LnNpbGVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlVHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBQRU5ESU5HIHRvdWNoZG93biBzaG91bGQgdHJpZ2dlciBtb3VzZW92ZXIgZXZlbnQgP1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXRDaGFuZ2VkID0gcGlja1Jlc3VsdC50YXJnZXQgIT09IG9sZFRhcmdldDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbGRUYXJnZXQgJiYgYnViYmxpbmdFdmVudChvbGRUYXJnZXQsIHBhY2thZ2VFdmVudCgnbW91c2VvdXQnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG9sZFRhcmdldFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvZmZzZXRYLCBvZmZzZXRZKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJ1YmJsaW5nRXZlbnQocGlja1Jlc3VsdC50YXJnZXQsIHBhY2thZ2VFdmVudCgnbW91c2Vtb3ZlJywgcGlja1Jlc3VsdCwgb2Zmc2V0WCwgb2Zmc2V0WSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1YmJsaW5nRXZlbnQocGlja1Jlc3VsdC50YXJnZXQsIHBhY2thZ2VFdmVudCgnbW91c2VvdmVyJywgcGlja1Jlc3VsdCwgb2Zmc2V0WCwgb2Zmc2V0WSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1YmJsaW5nRXZlbnQocGlja1Jlc3VsdC50YXJnZXQsIHBhY2thZ2VFdmVudChldmVUeXBlLCBwaWNrUmVzdWx0LCBvZmZzZXRYLCBvZmZzZXRZLCBkZWx0YSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb2xkVGFyZ2V0ID0gcGlja1Jlc3VsdC50YXJnZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAob2xkVGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KG9sZFRhcmdldCwgcGFja2FnZUV2ZW50KCdtb3VzZW91dCcsIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG9sZFRhcmdldFxyXG4gICAgICAgICAgICAgICAgfSwgb2Zmc2V0WCwgb2Zmc2V0WSkpO1xyXG4gICAgICAgICAgICAgICAgb2xkVGFyZ2V0ID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgdGhpcyk7XHJcbn07XHJcblxyXG5BcHAzRC5wcm90b3R5cGUuX3VwZGF0ZUdyYXBoaWNPcHRpb25zID0gZnVuY3Rpb24gKGdyYXBoaWNPcHRzLCBsaXN0LCBpc1NreWJveCkge1xyXG4gICAgdmFyIGVuYWJsZVRvbmVtYXBwaW5nID0gISFncmFwaGljT3B0cy50b25lbWFwcGluZztcclxuICAgIHZhciBpc0xpbmVhclNwYWNlID0gISFncmFwaGljT3B0cy5saW5lYXI7XHJcblxyXG4gICAgdmFyIHByZXZNYXRlcmlhbDtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgbWF0ID0gbGlzdFtpXS5tYXRlcmlhbDtcclxuICAgICAgICBpZiAobWF0ID09PSBwcmV2TWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbmFibGVUb25lbWFwcGluZyA/IG1hdC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1RPTkVNQVBQSU5HJykgOiBtYXQudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1RPTkVNQVBQSU5HJyk7XHJcbiAgICAgICAgaWYgKGlzTGluZWFyU3BhY2UpIHtcclxuICAgICAgICAgICAgdmFyIGRlY29kZVNSR0IgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoaXNTa3lib3ggJiYgbWF0LmdldCgnZW52aXJvbm1lbnRNYXAnKSAmJiAhbWF0LmdldCgnZW52aXJvbm1lbnRNYXAnKS5zUkdCKSB7XHJcbiAgICAgICAgICAgICAgICBkZWNvZGVTUkdCID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVjb2RlU1JHQiAmJiBtYXQuZGVmaW5lKCdmcmFnbWVudCcsICdTUkdCX0RFQ09ERScpO1xyXG4gICAgICAgICAgICBtYXQuZGVmaW5lKCdmcmFnbWVudCcsICdTUkdCX0VOQ09ERScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbWF0LnVuZGVmaW5lKCdmcmFnbWVudCcsICdTUkdCX0RFQ09ERScpO1xyXG4gICAgICAgICAgICBtYXQudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NSR0JfRU5DT0RFJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcmV2TWF0ZXJpYWwgPSBtYXQ7XHJcbiAgICB9XHJcbn07XHJcblxyXG5BcHAzRC5wcm90b3R5cGUuX2RvUmVuZGVyID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSkge1xyXG4gICAgdmFyIGNhbWVyYSA9IHNjZW5lLmdldE1haW5DYW1lcmEoKTtcclxuICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhLCB0cnVlKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBEbyByZW5kZXJcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9pblJlbmRlciA9IHRydWU7XHJcbiAgICB2YXIgYXBwTlMgPSB0aGlzLl9hcHBOUztcclxuICAgIGFwcE5TLmJlZm9yZVJlbmRlciAmJiBhcHBOUy5iZWZvcmVSZW5kZXIoc2VsZik7XHJcblxyXG4gICAgdmFyIHNjZW5lID0gdGhpcy5zY2VuZTtcclxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcbiAgICB2YXIgc2hhZG93UGFzcyA9IHRoaXMuX3NoYWRvd1Bhc3M7XHJcblxyXG4gICAgc2NlbmUudXBkYXRlKCk7XHJcbiAgICB2YXIgc2t5Ym94TGlzdCA9IFtdO1xyXG4gICAgc2NlbmUuc2t5Ym94ICYmIHNreWJveExpc3QucHVzaChzY2VuZS5za3lib3gpO1xyXG4gICAgc2NlbmUuc2t5ZG9tZSAmJiBza3lib3hMaXN0LnB1c2goc2NlbmUuc2t5ZG9tZSk7XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlR3JhcGhpY09wdGlvbnMoYXBwTlMuZ3JhcGhpYywgc2t5Ym94TGlzdCwgdHJ1ZSk7XHJcbiAgICAvLyBSZW5kZXIgc2hhZG93IHBhc3NcclxuICAgIHNoYWRvd1Bhc3MgJiYgc2hhZG93UGFzcy5yZW5kZXIocmVuZGVyZXIsIHNjZW5lLCBudWxsLCB0cnVlKTtcclxuXHJcbiAgICB0aGlzLl9kb1JlbmRlcihyZW5kZXJlciwgc2NlbmUsIHRydWUpO1xyXG5cclxuICAgIGFwcE5TLmFmdGVyUmVuZGVyICYmIGFwcE5TLmFmdGVyUmVuZGVyKHNlbGYpO1xyXG4gICAgdGhpcy5faW5SZW5kZXIgPSBmYWxzZTtcclxufTtcclxuXHJcbkFwcDNELnByb3RvdHlwZS5jb2xsZWN0UmVzb3VyY2VzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcclxuICAgIHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7XHJcbiAgICB2YXIgdGV4dHVyZXNMaXN0ID0gdGhpcy5fdGV4dHVyZXNMaXN0O1xyXG4gICAgdmFyIGdlb21ldHJpZXNMaXN0ID0gdGhpcy5fZ2VvbWV0cmllc0xpc3Q7XHJcbiAgICAvLyBNYXJrIGFsbCByZXNvdXJjZXMgdW51c2VkO1xyXG4gICAgbWFya1VudXNlZCh0ZXh0dXJlc0xpc3QpO1xyXG4gICAgbWFya1VudXNlZChnZW9tZXRyaWVzTGlzdCk7XHJcblxyXG4gICAgLy8gQ29sbGVjdCByZXNvdXJjZXMgdXNlZCBpbiB0aGlzIGZyYW1lLlxyXG4gICAgdmFyIG5ld1RleHR1cmVzTGlzdCA9IFtdO1xyXG4gICAgdmFyIG5ld0dlb21ldHJpZXNMaXN0ID0gW107XHJcbiAgICBjb2xsZWN0UmVzb3VyY2VzKHNjZW5lLCBuZXdUZXh0dXJlc0xpc3QsIG5ld0dlb21ldHJpZXNMaXN0KTtcclxuXHJcbiAgICAvLyBEaXNwb3NlIHRob3NlIHVuc2VkIHJlc291cmNlcy5cclxuICAgIGNoZWNrQW5kRGlzcG9zZShyZW5kZXJlciwgdGV4dHVyZXNMaXN0KTtcclxuICAgIGNoZWNrQW5kRGlzcG9zZShyZW5kZXJlciwgZ2VvbWV0cmllc0xpc3QpO1xyXG5cclxuICAgIHRoaXMuX3RleHR1cmVzTGlzdCA9IG5ld1RleHR1cmVzTGlzdDtcclxuICAgIHRoaXMuX2dlb21ldHJpZXNMaXN0ID0gbmV3R2VvbWV0cmllc0xpc3Q7XHJcbn07XHJcblxyXG5cclxuZnVuY3Rpb24gbWFya1VudXNlZChyZXNvdXJjZUxpc3QpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzb3VyY2VMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcmVzb3VyY2VMaXN0W2ldLl9fdXNlZCA9IDA7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNoZWNrQW5kRGlzcG9zZShyZW5kZXJlciwgcmVzb3VyY2VMaXN0KSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc291cmNlTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICghcmVzb3VyY2VMaXN0W2ldLl9fdXNlZCkge1xyXG4gICAgICAgICAgICByZXNvdXJjZUxpc3RbaV0uZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVVc2VkKHJlc291cmNlLCBsaXN0KSB7XHJcbiAgICByZXNvdXJjZS5fX3VzZWQgPSByZXNvdXJjZS5fX3VzZWQgfHwgMDtcclxuICAgIHJlc291cmNlLl9fdXNlZCsrO1xyXG4gICAgaWYgKHJlc291cmNlLl9fdXNlZCA9PT0gMSkge1xyXG4gICAgICAgIC8vIERvbid0IHB1c2ggdG8gdGhlIGxpc3QgdHdpY2UuXHJcbiAgICAgICAgbGlzdC5wdXNoKHJlc291cmNlKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjb2xsZWN0UmVzb3VyY2VzKHNjZW5lLCB0ZXh0dXJlUmVzb3VyY2VMaXN0LCBnZW9tZXRyeVJlc291cmNlTGlzdCkge1xyXG4gICAgdmFyIHByZXZNYXRlcmlhbDtcclxuICAgIHZhciBwcmV2R2VvbWV0cnk7XHJcbiAgICBzY2VuZS50cmF2ZXJzZShmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgIGlmIChyZW5kZXJhYmxlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IHJlbmRlcmFibGUuZ2VvbWV0cnk7XHJcbiAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcblxyXG4gICAgICAgICAgICAvLyBUT0RPIG9wdGltaXplISFcclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsICE9PSBwcmV2TWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlVW5pZm9ybXMgPSBtYXRlcmlhbC5nZXRUZXh0dXJlVW5pZm9ybXMoKTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHUgPSAwOyB1IDwgdGV4dHVyZVVuaWZvcm1zLmxlbmd0aDsgdSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWZvcm1OYW1lID0gdGV4dHVyZVVuaWZvcm1zW3VdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBtYXRlcmlhbC51bmlmb3Jtc1t1bmlmb3JtTmFtZV0udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWZvcm1UeXBlID0gbWF0ZXJpYWwudW5pZm9ybXNbdW5pZm9ybU5hbWVdLnR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVHlwZSA9PT0gJ3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVVzZWQodmFsLCB0ZXh0dXJlUmVzb3VyY2VMaXN0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUgPT09ICd0dicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB2YWwubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxba10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVVc2VkKHZhbFtrXSwgdGV4dHVyZVJlc291cmNlTGlzdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGdlb21ldHJ5ICE9PSBwcmV2R2VvbWV0cnkpIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZWQoZ2VvbWV0cnksIGdlb21ldHJ5UmVzb3VyY2VMaXN0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcHJldk1hdGVyaWFsID0gbWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIHByZXZHZW9tZXRyeSA9IGdlb21ldHJ5O1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgLy8gVHJhY2sgQW1iaWVudEN1YmVtYXBcclxuICAgICAgICBpZiAoc2NlbmUubGlnaHRzW2tdLmN1YmVtYXApIHtcclxuICAgICAgICAgICAgdXBkYXRlVXNlZChzY2VuZS5saWdodHNba10uY3ViZW1hcCwgdGV4dHVyZVJlc291cmNlTGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbi8qKlxyXG4gKiBMb2FkIGEgdGV4dHVyZSBmcm9tIGltYWdlIG9yIHN0cmluZy5cclxuICogQHBhcmFtIHtJbWFnZUxpa2V9IGltZ1xyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIFRleHR1cmUgb3B0aW9ucy5cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbGlwWT10cnVlXSBJZiBmbGlwWS4gU2VlIHtAbGluayBjbGF5LlRleHR1cmUuZmxpcFl9XHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuY29udmVydFRvUE9UPWZhbHNlXSBGb3JjZSBjb252ZXJ0IE5vbmUgUG93ZXIgb2YgVHdvIHRleHR1cmUgdG8gUG93ZXIgb2YgdHdvIHNvIGl0IGNhbiBiZSB0aWxlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmFuaXNvdHJvcGljXSBBbmlzb3Ryb3BpYyBmaWx0ZXJpbmcuIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLmFuaXNvdHJvcGljfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMud3JhcFM9Y2xheS5UZXh0dXJlLlJFUEVBVF0gU2VlIHtAbGluayBjbGF5LlRleHR1cmUud3JhcFN9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy53cmFwVD1jbGF5LlRleHR1cmUuUkVQRUFUXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS53cmFwVH1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLm1pbkZpbHRlcj1jbGF5LlRleHR1cmUuTElORUFSX01JUE1BUF9MSU5FQVJdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLm1pbkZpbHRlcn1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLm1hZ0ZpbHRlcj1jbGF5LlRleHR1cmUuTElORUFSXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5tYWdGaWx0ZXJ9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5leHBvc3VyZV0gT25seSBiZSB1c2VkIHdoZW4gc291cmNlIGlzIGEgSERSIGltYWdlLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt1c2VDYWNoZV0gSWYgdXNlIGNhY2hlLlxyXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgYXBwLmxvYWRUZXh0dXJlKCdkaWZmdXNlTWFwLmpwZycpXHJcbiAqICAgICAgLnRoZW4oZnVuY3Rpb24gKHRleHR1cmUpIHtcclxuICogICAgICAgICAgbWF0ZXJpYWwuc2V0KCdkaWZmdXNlTWFwJywgdGV4dHVyZSk7XHJcbiAqICAgICAgfSk7XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUubG9hZFRleHR1cmUgPSBmdW5jdGlvbiAodXJsT3JJbWcsIG9wdHMsIHVzZUNhY2hlKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICB2YXIga2V5ID0gZ2V0S2V5RnJvbUltYWdlTGlrZSh1cmxPckltZyk7XHJcbiAgICBpZiAodXNlQ2FjaGUpIHtcclxuICAgICAgICBpZiAodGhpcy5fdGV4Q2FjaGUuZ2V0KGtleSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RleENhY2hlLmdldChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIFRPRE8gUHJvbWlzZSA/XHJcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZSA9IHNlbGYubG9hZFRleHR1cmVTeW5jKHVybE9ySW1nLCBvcHRzKTtcclxuICAgICAgICBpZiAoIXRleHR1cmUuaXNSZW5kZXJhYmxlKCkpIHtcclxuICAgICAgICAgICAgdGV4dHVyZS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLl9kaXNwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc29sdmUodGV4dHVyZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmVycm9yKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLl9kaXNwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUodGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAodXNlQ2FjaGUpIHtcclxuICAgICAgICB0aGlzLl90ZXhDYWNoZS5wdXQoa2V5LCBwcm9taXNlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcm9taXNlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHRleHR1cmUgZnJvbSBpbWFnZSBvciBzdHJpbmcgc3luY2hyb25vdXNseS4gVGV4dHVyZSBjYW4gYmUgdXNlIGRpcmVjdGx5IGFuZCBkb24ndCBoYXZlIHRvIHdhaXQgZm9yIGl0J3MgbG9hZGVkLlxyXG4gKiBAcGFyYW0ge0ltYWdlTGlrZX0gaW1nXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gVGV4dHVyZSBvcHRpb25zLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmZsaXBZPXRydWVdIElmIGZsaXBZLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5mbGlwWX1cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5jb252ZXJ0VG9QT1Q9ZmFsc2VdIEZvcmNlIGNvbnZlcnQgTm9uZSBQb3dlciBvZiBUd28gdGV4dHVyZSB0byBQb3dlciBvZiB0d28gc28gaXQgY2FuIGJlIHRpbGVkLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuYW5pc290cm9waWNdIEFuaXNvdHJvcGljIGZpbHRlcmluZy4gU2VlIHtAbGluayBjbGF5LlRleHR1cmUuYW5pc290cm9waWN9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy53cmFwUz1jbGF5LlRleHR1cmUuUkVQRUFUXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS53cmFwU31cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLndyYXBUPWNsYXkuVGV4dHVyZS5SRVBFQVRdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLndyYXBUfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMubWluRmlsdGVyPWNsYXkuVGV4dHVyZS5MSU5FQVJfTUlQTUFQX0xJTkVBUl0gU2VlIHtAbGluayBjbGF5LlRleHR1cmUubWluRmlsdGVyfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMubWFnRmlsdGVyPWNsYXkuVGV4dHVyZS5MSU5FQVJdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLm1hZ0ZpbHRlcn1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmV4cG9zdXJlXSBPbmx5IGJlIHVzZWQgd2hlbiBzb3VyY2UgaXMgYSBIRFIgaW1hZ2UuXHJcbiAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgdmFyIHRleHR1cmUgPSBhcHAubG9hZFRleHR1cmUoJ2RpZmZ1c2VNYXAuanBnJywge1xyXG4gKiAgICAgIGFuaXNvdHJvcGljOiA4LFxyXG4gKiAgICAgIGZsaXBZOiBmYWxzZVxyXG4gKiAgfSk7XHJcbiAqICBtYXRlcmlhbC5zZXQoJ2RpZmZ1c2VNYXAnLCB0ZXh0dXJlKTtcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5sb2FkVGV4dHVyZVN5bmMgPSBmdW5jdGlvbiAodXJsT3JJbWcsIG9wdHMpIHtcclxuICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRChvcHRzKTtcclxuICAgIGlmICh0eXBlb2YgdXJsT3JJbWcgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgaWYgKHVybE9ySW1nLm1hdGNoKC8uaGRyJHxeZGF0YTphcHBsaWNhdGlvblxcL29jdGV0LXN0cmVhbS8pKSB7XHJcbiAgICAgICAgICAgIHRleHR1cmUgPSB0ZXh0dXJlVXRpbC5sb2FkVGV4dHVyZSh1cmxPckltZywge1xyXG4gICAgICAgICAgICAgICAgZXhwb3N1cmU6IG9wdHMgJiYgb3B0cy5leHBvc3VyZSxcclxuICAgICAgICAgICAgICAgIGZpbGVUeXBlOiAnaGRyJ1xyXG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmRpcnR5KCk7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnRyaWdnZXIoJ3N1Y2Nlc3MnKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRzKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlW2tleV0gPSBvcHRzW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRleHR1cmUubG9hZCh1cmxPckltZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXNJbWFnZUxpa2VFbGVtZW50KHVybE9ySW1nKSkge1xyXG4gICAgICAgIHRleHR1cmUuaW1hZ2UgPSB1cmxPckltZztcclxuICAgICAgICB0ZXh0dXJlLmR5bmFtaWMgPSB1cmxPckltZyBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGV4dHVyZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSB0ZXh0dXJlIGZyb20gaW1hZ2Ugb3Igc3RyaW5nIHN5bmNocm9ub3VzbHkuIFRleHR1cmUgY2FuIGJlIHVzZSBkaXJlY3RseSBhbmQgZG9uJ3QgaGF2ZSB0byB3YWl0IGZvciBpdCdzIGxvYWRlZC5cclxuICogQHBhcmFtIHtJbWFnZUxpa2V9IGltZ1xyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIFRleHR1cmUgb3B0aW9ucy5cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbGlwWT1mYWxzZV0gSWYgZmxpcFkuIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLmZsaXBZfVxyXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgYXBwLmxvYWRUZXh0dXJlQ3ViZSh7XHJcbiAqICAgICAgcHg6ICdza3lib3gvcHguanBnJywgcHk6ICdza3lib3gvcHkuanBnJywgcHo6ICdza3lib3gvcHouanBnJyxcclxuICogICAgICBueDogJ3NreWJveC9ueC5qcGcnLCBueTogJ3NreWJveC9ueS5qcGcnLCBuejogJ3NreWJveC9uei5qcGcnXHJcbiAqICB9KS50aGVuKGZ1bmN0aW9uICh0ZXh0dXJlKSB7XHJcbiAqICAgICAgc2t5Ym94LnNldEVudmlyb25tZW50TWFwKHRleHR1cmUpO1xyXG4gKiAgfSlcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5sb2FkVGV4dHVyZUN1YmUgPSBmdW5jdGlvbiAoaW1nTGlzdCwgb3B0cykge1xyXG4gICAgdmFyIHRleHR1cmVDdWJlID0gdGhpcy5sb2FkVGV4dHVyZUN1YmVTeW5jKGltZ0xpc3QsIG9wdHMpO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBpZiAodGV4dHVyZUN1YmUuaXNSZW5kZXJhYmxlKCkpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0ZXh0dXJlQ3ViZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0ZXh0dXJlQ3ViZS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodGV4dHVyZUN1YmUpO1xyXG4gICAgICAgICAgICB9KS5lcnJvcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgdGV4dHVyZSBmcm9tIGltYWdlIG9yIHN0cmluZyBzeW5jaHJvbm91c2x5LiBUZXh0dXJlIGNhbiBiZSB1c2UgZGlyZWN0bHkgYW5kIGRvbid0IGhhdmUgdG8gd2FpdCBmb3IgaXQncyBsb2FkZWQuXHJcbiAqIEBwYXJhbSB7SW1hZ2VMaWtlfSBpbWdcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSBUZXh0dXJlIG9wdGlvbnMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZmxpcFk9ZmFsc2VdIElmIGZsaXBZLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5mbGlwWX1cclxuICogQHJldHVybiB7Y2xheS5UZXh0dXJlQ3ViZX1cclxuICogQGV4YW1wbGVcclxuICogIHZhciB0ZXh0dXJlID0gYXBwLmxvYWRUZXh0dXJlQ3ViZVN5bmMoe1xyXG4gKiAgICAgIHB4OiAnc2t5Ym94L3B4LmpwZycsIHB5OiAnc2t5Ym94L3B5LmpwZycsIHB6OiAnc2t5Ym94L3B6LmpwZycsXHJcbiAqICAgICAgbng6ICdza3lib3gvbnguanBnJywgbnk6ICdza3lib3gvbnkuanBnJywgbno6ICdza3lib3gvbnouanBnJ1xyXG4gKiAgfSk7XHJcbiAqICBza3lib3guc2V0RW52aXJvbm1lbnRNYXAodGV4dHVyZSk7XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUubG9hZFRleHR1cmVDdWJlU3luYyA9IGZ1bmN0aW9uIChpbWdMaXN0LCBvcHRzKSB7XHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuICAgIG9wdHMuZmxpcFkgPSBvcHRzLmZsaXBZIHx8IGZhbHNlO1xyXG4gICAgdmFyIHRleHR1cmVDdWJlID0gbmV3IFRleHR1cmVDdWJlKG9wdHMpO1xyXG4gICAgaWYgKCFpbWdMaXN0IHx8ICFpbWdMaXN0LnB4IHx8ICFpbWdMaXN0Lm54IHx8ICFpbWdMaXN0LnB5IHx8ICFpbWdMaXN0Lm55IHx8ICFpbWdMaXN0LnB6IHx8ICFpbWdMaXN0Lm56KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGN1YmVtYXAgZm9ybWF0LiBTaG91bGQgYmUgYW4gb2JqZWN0IGluY2x1ZGluZyBweCxueCxweSxueSxweixueicpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBpbWdMaXN0LnB4ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRleHR1cmVDdWJlLmxvYWQoaW1nTGlzdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0ZXh0dXJlQ3ViZS5pbWFnZSA9IHV0aWwuY2xvbmUoaW1nTGlzdCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGV4dHVyZUN1YmU7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgbWF0ZXJpYWwuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fFN0YW5kYXJkTWF0ZXJpYWxNUkNvbmZpZ30gbWF0ZXJpYWxDb25maWcuIG1hdGVyaWFsQ29uZmlnIGNvbnRhaW5zIGBzaGFkZXJgLCBgdHJhbnNwYXJlbnRgIGFuZCB1bmlmb3JtcyB0aGF0IHVzZWQgaW4gY29ycmVzcG9uZGluZyB1bmlmb3Jtcy5cclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmlmb3JtcyBjYW4gYmUgYGNvbG9yYCwgYGFscGhhYCBgZGlmZnVzZU1hcGAgZXRjLlxyXG4gKiBAcGFyYW0ge3N0cmluZ3xjbGF5LlNoYWRlcn0gW3NoYWRlcj0nY2xheS5zdGFuZGFyZE1SJ10gRGVmYXVsdCB0byBiZSBzdGFuZGFyZCBzaGFkZXIgd2l0aCBtZXRhbG5lc3MgYW5kIHJvdWdobmVzcyB3b3JrZmxvdy5cclxuICogQHBhcmFtIHtib29sZWFufSBbdHJhbnNwYXJlbnQ9ZmFsc2VdIElmIG1hdGVyaWFsIGlzIHRyYW5zcGFyZW50LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt0ZXh0dXJlQ29udmVydFRvUE9UPWZhbHNlXSBGb3JjZSBjb252ZXJ0IE5vbmUgUG93ZXIgb2YgVHdvIHRleHR1cmUgdG8gUG93ZXIgb2YgdHdvIHNvIGl0IGNhbiBiZSB0aWxlZC5cclxuICogQHBhcmFtIHtib29sZWFufSBbdGV4dHVyZUZsaXBZPXRydWVdIElmIGZsaXAgeSBvZiB0ZXh0dXJlLlxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbdGV4dHVyZUxvYWRlZF0gQ2FsbGJhY2sgd2hlbiBzaW5nbGUgdGV4dHVyZSBsb2FkZWQuXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFt0ZXh0dXJlc1JlYWR5XSBDYWxsYmFjayB3aGVuIGFsbCB0ZXh0dXJlIGxvYWRlZC5cclxuICogQHJldHVybiB7Y2xheS5NYXRlcmlhbH1cclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVNYXRlcmlhbCA9IGZ1bmN0aW9uIChtYXRDb25maWcpIHtcclxuICAgIG1hdENvbmZpZyA9IG1hdENvbmZpZyB8fCB7fTtcclxuICAgIG1hdENvbmZpZy5zaGFkZXIgPSBtYXRDb25maWcuc2hhZGVyIHx8ICdjbGF5LnN0YW5kYXJkTVInO1xyXG4gICAgdmFyIHNoYWRlciA9IG1hdENvbmZpZy5zaGFkZXIgaW5zdGFuY2VvZiBTaGFkZXIgPyBtYXRDb25maWcuc2hhZGVyIDogc2hhZGVyTGlicmFyeS5nZXQobWF0Q29uZmlnLnNoYWRlcik7XHJcbiAgICB2YXIgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgIHNoYWRlcjogc2hhZGVyXHJcbiAgICB9KTtcclxuICAgIGlmIChtYXRDb25maWcubmFtZSkge1xyXG4gICAgICAgIG1hdGVyaWFsLm5hbWUgPSBtYXRDb25maWcubmFtZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdGV4dHVyZXNMb2FkaW5nID0gW107XHJcbiAgICBmdW5jdGlvbiBtYWtlVGV4dHVyZVNldHRlcihrZXkpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRleHR1cmUpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybShrZXksIHRleHR1cmUpO1xyXG4gICAgICAgICAgICBtYXRDb25maWcudGV4dHVyZUxvYWRlZCAmJiBtYXRDb25maWcudGV4dHVyZUxvYWRlZChrZXksIHRleHR1cmUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgZm9yICh2YXIga2V5IGluIG1hdENvbmZpZykge1xyXG4gICAgICAgIGlmIChtYXRlcmlhbC51bmlmb3Jtc1trZXldKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWwgPSBtYXRDb25maWdba2V5XTtcclxuICAgICAgICAgICAgaWYgKChtYXRlcmlhbC51bmlmb3Jtc1trZXldLnR5cGUgPT09ICd0JyB8fCBpc0ltYWdlTGlrZUVsZW1lbnQodmFsKSlcclxuICAgICAgICAgICAgICAgICYmICEodmFsIGluc3RhbmNlb2YgVGV4dHVyZSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUcnkgdG8gbG9hZCBhIHRleHR1cmUuXHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlc0xvYWRpbmcucHVzaCh0aGlzLmxvYWRUZXh0dXJlKHZhbCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1BPVDogbWF0Q29uZmlnLnRleHR1cmVDb252ZXJ0VG9QT1QgfHwgZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZmxpcFk6IG1hdENvbmZpZy50ZXh0dXJlRmxpcFkgPT0gbnVsbCA/IHRydWUgOiBtYXRDb25maWcudGV4dHVyZUZsaXBZXHJcbiAgICAgICAgICAgICAgICB9KS50aGVuKG1ha2VUZXh0dXJlU2V0dGVyKGtleSkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oa2V5LCB2YWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChtYXRDb25maWcudHJhbnNwYXJlbnQpIHtcclxuICAgICAgICBtYXRDb25maWcuZGVwdGhNYXNrID0gZmFsc2U7XHJcbiAgICAgICAgbWF0Q29uZmlnLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKG1hdENvbmZpZy50ZXh0dXJlc1JlYWR5KSB7XHJcbiAgICAgICAgUHJvbWlzZS5hbGwodGV4dHVyZXNMb2FkaW5nKS50aGVuKGZ1bmN0aW9uICh0ZXh0dXJlcykge1xyXG4gICAgICAgICAgICBtYXRDb25maWcudGV4dHVyZXNSZWFkeSh0ZXh0dXJlcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1hdGVyaWFsO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGN1YmUgbWVzaCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZSBvciB0aGUgZ2l2ZW4gcGFyZW50IG5vZGUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge09iamVjdHxjbGF5Lk1hdGVyaWFsfSBbbWF0ZXJpYWxdXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fG51bWJlcn0gW3N1YmRpdmlzaW9uPTFdIFN1YmRpdmlzaW9uIG9mIGN1YmUuXHJcbiAqICAgICAgICAgIENhbiBiZSBhIG51bWJlciB0byByZXByZXNlbnQgYm90aCB3aWR0aCwgaGVpZ2h0IGFuZCBkZXB0aCBkaW1lbnNpb25zLiBPciBhbiBhcnJheSB0byByZXByZXNlbnQgdGhlbSByZXNwZWN0aXZlbHkuXHJcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICogQGV4YW1wbGVcclxuICogIC8vIENyZWF0ZSBhIHdoaXRlIGN1YmUuXHJcbiAqICBhcHAuY3JlYXRlQ3ViZSgpXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQ3ViZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCwgcGFyZW50Tm9kZSwgc3ViZGl2KSB7XHJcbiAgICBpZiAoc3ViZGl2ID09IG51bGwpIHtcclxuICAgICAgICBzdWJkaXYgPSAxO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBzdWJkaXYgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gW3N1YmRpdiwgc3ViZGl2LCBzdWJkaXZdO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBnZW9LZXkgPSAnY3ViZS0nICsgc3ViZGl2LmpvaW4oJy0nKTtcclxuICAgIHZhciBjdWJlID0gdGhpcy5fZ2VvQ2FjaGUuZ2V0KGdlb0tleSk7XHJcbiAgICBpZiAoIWN1YmUpIHtcclxuICAgICAgICBjdWJlID0gbmV3IEN1YmVHZW8oe1xyXG4gICAgICAgICAgICB3aWR0aFNlZ21lbnRzOiBzdWJkaXZbMF0sXHJcbiAgICAgICAgICAgIGhlaWdodFNlZ21lbnRzOiBzdWJkaXZbMV0sXHJcbiAgICAgICAgICAgIGRlcHRoU2VnbWVudHM6IHN1YmRpdlsyXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGN1YmUuZ2VuZXJhdGVUYW5nZW50cygpO1xyXG4gICAgICAgIHRoaXMuX2dlb0NhY2hlLnB1dChnZW9LZXksIGN1YmUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVzaChjdWJlLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgY3ViZSBtZXNoIHRoYXQgY2FtZXJhIGlzIGluc2lkZSB0aGUgY3ViZS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7T2JqZWN0fGNsYXkuTWF0ZXJpYWx9IFttYXRlcmlhbF1cclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtwYXJlbnROb2RlXSBQYXJlbnQgbm9kZSB0byBhcHBlbmQuIERlZmF1bHQgdG8gYmUgc2NlbmUuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58bnVtYmVyfSBbc3ViZGl2aXNpb249MV0gU3ViZGl2aXNpb24gb2YgY3ViZS5cclxuICogICAgICAgICAgQ2FuIGJlIGEgbnVtYmVyIHRvIHJlcHJlc2VudCBib3RoIHdpZHRoLCBoZWlnaHQgYW5kIGRlcHRoIGRpbWVuc2lvbnMuIE9yIGFuIGFycmF5IHRvIHJlcHJlc2VudCB0aGVtIHJlc3BlY3RpdmVseS5cclxuICogQHJldHVybiB7Y2xheS5NZXNofVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgLy8gQ3JlYXRlIGEgd2hpdGUgY3ViZSBpbnNpZGUuXHJcbiAqICBhcHAuY3JlYXRlQ3ViZUluc2lkZSgpXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQ3ViZUluc2lkZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCwgcGFyZW50Tm9kZSwgc3ViZGl2KSB7XHJcbiAgICBpZiAoc3ViZGl2ID09IG51bGwpIHtcclxuICAgICAgICBzdWJkaXYgPSAxO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBzdWJkaXYgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gW3N1YmRpdiwgc3ViZGl2LCBzdWJkaXZdO1xyXG4gICAgfVxyXG4gICAgdmFyIGdlb0tleSA9ICdjdWJlSW5zaWRlLScgKyBzdWJkaXYuam9pbignLScpO1xyXG4gICAgdmFyIGN1YmUgPSB0aGlzLl9nZW9DYWNoZS5nZXQoZ2VvS2V5KTtcclxuICAgIGlmICghY3ViZSkge1xyXG4gICAgICAgIGN1YmUgPSBuZXcgQ3ViZUdlbyh7XHJcbiAgICAgICAgICAgIGluc2lkZTogdHJ1ZSxcclxuICAgICAgICAgICAgd2lkdGhTZWdtZW50czogc3ViZGl2WzBdLFxyXG4gICAgICAgICAgICBoZWlnaHRTZWdtZW50czogc3ViZGl2WzFdLFxyXG4gICAgICAgICAgICBkZXB0aFNlZ21lbnRzOiBzdWJkaXZbMl1cclxuICAgICAgICB9KTtcclxuICAgICAgICBjdWJlLmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgICAgICB0aGlzLl9nZW9DYWNoZS5wdXQoZ2VvS2V5LCBjdWJlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVNZXNoKGN1YmUsIG1hdGVyaWFsLCBwYXJlbnROb2RlKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBzcGhlcmUgbWVzaCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZSBvciB0aGUgZ2l2ZW4gcGFyZW50IG5vZGUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge09iamVjdHxjbGF5Lk1hdGVyaWFsfSBbbWF0ZXJpYWxdXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3N1YmRpdmlzaW9uPTIwXSBTdWJkaXZpc2lvbiBvZiBzcGhlcmUuXHJcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICogQGV4YW1wbGVcclxuICogIC8vIENyZWF0ZSBhIHNlbWktdHJhbnNwYXJlbnQgc3BoZXJlLlxyXG4gKiAgYXBwLmNyZWF0ZVNwaGVyZSh7XHJcbiAqICAgICAgY29sb3I6IFswLCAwLCAxXSxcclxuICogICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICogICAgICBhbHBoYTogMC41XHJcbiAqICB9KVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZVNwaGVyZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCwgcGFyZW50Tm9kZSwgc3ViZGl2aXNpb24pIHtcclxuICAgIGlmIChzdWJkaXZpc2lvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgc3ViZGl2aXNpb24gPSAyMDtcclxuICAgIH1cclxuICAgIHZhciBnZW9LZXkgPSAnc3BoZXJlLScgKyBzdWJkaXZpc2lvbjtcclxuICAgIHZhciBzcGhlcmUgPSB0aGlzLl9nZW9DYWNoZS5nZXQoZ2VvS2V5KTtcclxuICAgIGlmICghc3BoZXJlKSB7XHJcbiAgICAgICAgc3BoZXJlID0gbmV3IFNwaGVyZUdlbyh7XHJcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IHN1YmRpdmlzaW9uICogMixcclxuICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IHN1YmRpdmlzaW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc3BoZXJlLmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgICAgICB0aGlzLl9nZW9DYWNoZS5wdXQoZ2VvS2V5LCBzcGhlcmUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVzaChzcGhlcmUsIG1hdGVyaWFsLCBwYXJlbnROb2RlKTtcclxufTtcclxuXHJcbi8vIFRPRE8gbWF5IGJlIG1vZGlmaWVkP1xyXG4vKipcclxuICogQ3JlYXRlIGEgcGxhbmUgbWVzaCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZSBvciB0aGUgZ2l2ZW4gcGFyZW50IG5vZGUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge09iamVjdHxjbGF5Lk1hdGVyaWFsfSBbbWF0ZXJpYWxdXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fG51bWJlcn0gW3N1YmRpdmlzaW9uPTFdIFN1YmRpdmlzaW9uIG9mIHBsYW5lLlxyXG4gKiAgICAgICAgICBDYW4gYmUgYSBudW1iZXIgdG8gcmVwcmVzZW50IGJvdGggd2lkdGggYW5kIGhlaWdodCBkaW1lbnNpb25zLiBPciBhbiBhcnJheSB0byByZXByZXNlbnQgdGhlbSByZXNwZWN0aXZlbHkuXHJcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICogQGV4YW1wbGVcclxuICogIC8vIENyZWF0ZSBhIHJlZCBjb2xvciBwbGFuZS5cclxuICogIGFwcC5jcmVhdGVQbGFuZSh7XHJcbiAqICAgICAgY29sb3I6IFsxLCAwLCAwXVxyXG4gKiAgfSlcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVQbGFuZSA9IGZ1bmN0aW9uIChtYXRlcmlhbCwgcGFyZW50Tm9kZSwgc3ViZGl2KSB7XHJcbiAgICBpZiAoc3ViZGl2ID09IG51bGwpIHtcclxuICAgICAgICBzdWJkaXYgPSAxO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBzdWJkaXYgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gW3N1YmRpdiwgc3ViZGl2XTtcclxuICAgIH1cclxuICAgIHZhciBnZW9LZXkgPSAncGxhbmUtJyArIHN1YmRpdi5qb2luKCctJyk7XHJcbiAgICB2YXIgcGxhbmVHZW8gPSB0aGlzLl9nZW9DYWNoZS5nZXQoZ2VvS2V5KTtcclxuICAgIGlmICghcGxhbmVHZW8pIHtcclxuICAgICAgICBwbGFuZUdlbyA9IG5ldyBQbGFuZUdlbyh7XHJcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IHN1YmRpdlswXSxcclxuICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IHN1YmRpdlsxXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHBsYW5lR2VvLmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgICAgICB0aGlzLl9nZW9DYWNoZS5wdXQoZ2VvS2V5LCBwbGFuZUdlbyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVNZXNoKHBsYW5lR2VvLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIG1lc2ggd2l0aCBwYXJhbWV0cmljIHN1cmZhY2UgZnVuY3Rpb25cclxuICogQHBhcmFtIHtPYmplY3R8Y2xheS5NYXRlcmlhbH0gW21hdGVyaWFsXVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRvIGFwcGVuZC4gRGVmYXVsdCB0byBiZSBzY2VuZS5cclxuICogQHBhcmFtIHtPYmplY3R9IGdlbmVyYXRvclxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IueFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IueVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IuelxyXG4gKiBAcGFyYW0ge0FycmF5fSBbZ2VuZXJhdG9yLnU9WzAsIDEsIDAuMDVdXVxyXG4gKiBAcGFyYW0ge0FycmF5fSBbZ2VuZXJhdG9yLnY9WzAsIDEsIDAuMDVdXVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlUGFyYW1ldHJpY1N1cmZhY2UgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIHBhcmVudE5vZGUsIGdlbmVyYXRvcikge1xyXG4gICAgdmFyIGdlbyA9IG5ldyBQYXJhbWV0cmljU3VyZmFjZUdlbyh7XHJcbiAgICAgICAgZ2VuZXJhdG9yOiBnZW5lcmF0b3JcclxuICAgIH0pO1xyXG4gICAgZ2VvLmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZU1lc2goZ2VvLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGdlbmVyYWwgbWVzaCB3aXRoIGdpdmVuIGdlb21ldHJ5IGluc3RhbmNlIGFuZCBtYXRlcmlhbCBjb25maWcuXHJcbiAqIEBwYXJhbSB7Y2xheS5HZW9tZXRyeX0gZ2VvbWV0cnlcclxuICogQHJldHVybiB7Y2xheS5NZXNofVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZU1lc2ggPSBmdW5jdGlvbiAoZ2VvbWV0cnksIG1hdCwgcGFyZW50Tm9kZSkge1xyXG4gICAgdmFyIG1lc2ggPSBuZXcgTWVzaCh7XHJcbiAgICAgICAgZ2VvbWV0cnk6IGdlb21ldHJ5LFxyXG4gICAgICAgIG1hdGVyaWFsOiBtYXQgaW5zdGFuY2VvZiBNYXRlcmlhbCA/IG1hdCA6IHRoaXMuY3JlYXRlTWF0ZXJpYWwobWF0KVxyXG4gICAgfSk7XHJcbiAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZSB8fCB0aGlzLnNjZW5lO1xyXG4gICAgcGFyZW50Tm9kZS5hZGQobWVzaCk7XHJcbiAgICByZXR1cm4gbWVzaDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYW4gZW1wdHkgbm9kZVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gcGFyZW50Tm9kZVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlTm9kZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlKSB7XHJcbiAgICB2YXIgbm9kZSA9IG5ldyBOb2RlKCk7XHJcbiAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZSB8fCB0aGlzLnNjZW5lO1xyXG4gICAgcGFyZW50Tm9kZS5hZGQobm9kZSk7XHJcbiAgICByZXR1cm4gbm9kZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBwZXJzcGVjdGl2ZSBvciBvcnRob2dyYXBoaWMgY2FtZXJhIGFuZCBhZGQgaXQgdG8gdGhlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gcG9zaXRpb25cclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5LlZlY3RvcjN9IHRhcmdldFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3R5cGU9XCJwZXJzcGVjdGl2ZVwiXSBDYW4gYmUgJ3BlcnNwZWN0aXZlJyBvciAnb3J0aG9ncmFwaGljJyhpbiBzaG9ydCAnb3J0aG8nKVxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gW2V4dGVudF0gRXh0ZW50IGlzIGF2YWlsYWJsZSBvbmx5IGlmIHR5cGUgaXMgb3J0aG9ncmFwaGljLlxyXG4gKiBAcmV0dXJuIHtjbGF5LmNhbWVyYS5QZXJzcGVjdGl2ZXxjbGF5LmNhbWVyYS5PcnRob2dyYXBoaWN9XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQ2FtZXJhID0gZnVuY3Rpb24gKHBvc2l0aW9uLCB0YXJnZXQsIHR5cGUsIGV4dGVudCkge1xyXG4gICAgdmFyIENhbWVyYUN0b3I7XHJcbiAgICB2YXIgaXNPcnRobyA9IGZhbHNlO1xyXG4gICAgaWYgKHR5cGUgPT09ICdvcnRobycgfHwgdHlwZSA9PT0gJ29ydGhvZ3JhcGhpYycpIHtcclxuICAgICAgICBpc09ydGhvID0gdHJ1ZTtcclxuICAgICAgICBDYW1lcmFDdG9yID0gT3J0aG9ncmFwaGljQ2FtZXJhO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHR5cGUgJiYgdHlwZSAhPT0gJ3BlcnNwZWN0aXZlJykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmtvd24gY2FtZXJhIHR5cGUgJyArIHR5cGUgKyAnLiBVc2UgZGVmYXVsdCBwZXJzcGVjdGl2ZSBjYW1lcmEnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgQ2FtZXJhQ3RvciA9IFBlcnNwZWN0aXZlQ2FtZXJhO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBjYW1lcmEgPSBuZXcgQ2FtZXJhQ3RvcigpO1xyXG4gICAgaWYgKHBvc2l0aW9uIGluc3RhbmNlb2YgVmVjdG9yMykge1xyXG4gICAgICAgIGNhbWVyYS5wb3NpdGlvbi5jb3B5KHBvc2l0aW9uKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHBvc2l0aW9uIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICBjYW1lcmEucG9zaXRpb24uc2V0QXJyYXkocG9zaXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKHRhcmdldFswXSwgdGFyZ2V0WzFdLCB0YXJnZXRbMl0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcclxuICAgICAgICBjYW1lcmEubG9va0F0KHRhcmdldCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4dGVudCAmJiBpc09ydGhvKSB7XHJcbiAgICAgICAgZXh0ZW50ID0gZXh0ZW50LmFycmF5IHx8IGV4dGVudDtcclxuICAgICAgICBjYW1lcmEubGVmdCA9IC1leHRlbnRbMF0gLyAyO1xyXG4gICAgICAgIGNhbWVyYS5yaWdodCA9IGV4dGVudFswXSAvIDI7XHJcbiAgICAgICAgY2FtZXJhLnRvcCA9IGV4dGVudFsxXSAvIDI7XHJcbiAgICAgICAgY2FtZXJhLmJvdHRvbSA9IC1leHRlbnRbMV0gLyAyO1xyXG4gICAgICAgIGNhbWVyYS5uZWFyID0gMDtcclxuICAgICAgICBjYW1lcmEuZmFyID0gZXh0ZW50WzJdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgY2FtZXJhLmFzcGVjdCA9IHRoaXMucmVuZGVyZXIuZ2V0Vmlld3BvcnRBc3BlY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChjYW1lcmEpO1xyXG5cclxuICAgIHJldHVybiBjYW1lcmE7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgZGlyZWN0aW9uYWwgbGlnaHQgYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58Y2xheS5WZWN0b3IzfSBkaXIgQSBWZWN0b3IzIG9yIGFycmF5IHRvIHJlcHJlc2VudCB0aGUgZGlyZWN0aW9uLlxyXG4gKiBAcGFyYW0ge0NvbG9yfSBbY29sb3I9JyNmZmYnXSBDb2xvciBvZiBkaXJlY3Rpb25hbCBsaWdodCwgZGVmYXVsdCB0byBiZSB3aGl0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtpbnRlbnNpdHldIEludGVuc2l0eSBvZiBkaXJlY3Rpb25hbCBsaWdodCwgZGVmYXVsdCB0byBiZSAxLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgYXBwLmNyZWF0ZURpcmVjdGlvbmFsTGlnaHQoWy0xLCAtMSwgLTFdLCAnI2ZmZicsIDIpO1xyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZURpcmVjdGlvbmFsTGlnaHQgPSBmdW5jdGlvbiAoZGlyLCBjb2xvciwgaW50ZW5zaXR5KSB7XHJcbiAgICB2YXIgbGlnaHQgPSBuZXcgRGlyZWN0aW9uYWxMaWdodCgpO1xyXG4gICAgaWYgKGRpciBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcclxuICAgICAgICBkaXIgPSBkaXIuYXJyYXk7XHJcbiAgICB9XHJcbiAgICBsaWdodC5wb3NpdGlvbi5zZXRBcnJheShkaXIpLm5lZ2F0ZSgpO1xyXG4gICAgbGlnaHQubG9va0F0KFZlY3RvcjMuWkVSTyk7XHJcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbG9yID0gcGFyc2VDb2xvcihjb2xvcik7XHJcbiAgICB9XHJcbiAgICBjb2xvciAhPSBudWxsICYmIChsaWdodC5jb2xvciA9IGNvbG9yKTtcclxuICAgIGludGVuc2l0eSAhPSBudWxsICYmIChsaWdodC5pbnRlbnNpdHkgPSBpbnRlbnNpdHkpO1xyXG5cclxuICAgIHRoaXMuc2NlbmUuYWRkKGxpZ2h0KTtcclxuICAgIHJldHVybiBsaWdodDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBzcG90IGxpZ2h0IGFuZCBhZGQgaXQgdG8gdGhlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gcG9zaXRpb24gUG9zaXRpb24gb2YgdGhlIHNwb3QgbGlnaHQuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58Y2xheS5WZWN0b3IzfSBbdGFyZ2V0XSBUYXJnZXQgcG9zaXRpb24gd2hlcmUgc3BvdCBsaWdodCBwb2ludHMgdG8uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcmFuZ2U9MjBdIEZhbGxvZmYgcmFuZ2Ugb2Ygc3BvdCBsaWdodC4gRGVmYXVsdCB0byBiZSAyMC5cclxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2Ygc3BvdCBsaWdodCwgZGVmYXVsdCB0byBiZSB3aGl0ZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtpbnRlbnNpdHk9MV0gSW50ZW5zaXR5IG9mIHNwb3QgbGlnaHQsIGRlZmF1bHQgdG8gYmUgMS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFt1bWJyYUFuZ2xlPTMwXSBVbWJyYSBhbmdsZSBvZiBzcG90IGxpZ2h0LiBEZWZhdWx0IHRvIGJlIDMwIGRlZ3JlZSBmcm9tIHRoZSBtaWRkbGUgbGluZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwZW51bWJyYUFuZ2xlPTQ1XSBQZW51bWJyYSBhbmdsZSBvZiBzcG90IGxpZ2h0LiBEZWZhdWx0IHRvIGJlIDQ1IGRlZ3JlZSBmcm9tIHRoZSBtaWRkbGUgbGluZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogIGFwcC5jcmVhdGVTcG90TGlnaHQoWzUsIDUsIDVdLCBbMCwgMCwgMF0sIDIwLCAjOTAwKTtcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVTcG90TGlnaHQgPSBmdW5jdGlvbiAocG9zaXRpb24sIHRhcmdldCwgcmFuZ2UsIGNvbG9yLCBpbnRlbnNpdHksIHVtYnJhQW5nbGUsIHBlbnVtYnJhQW5nbGUpIHtcclxuICAgIHZhciBsaWdodCA9IG5ldyBTcG90TGlnaHQoKTtcclxuICAgIGxpZ2h0LnBvc2l0aW9uLnNldEFycmF5KHBvc2l0aW9uIGluc3RhbmNlb2YgVmVjdG9yMyA/IHBvc2l0aW9uLmFycmF5IDogcG9zaXRpb24pO1xyXG5cclxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgIHRhcmdldCA9IG5ldyBWZWN0b3IzKHRhcmdldFswXSwgdGFyZ2V0WzFdLCB0YXJnZXRbMl0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcclxuICAgICAgICBsaWdodC5sb29rQXQodGFyZ2V0KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbG9yID0gcGFyc2VDb2xvcihjb2xvcik7XHJcbiAgICB9XHJcbiAgICByYW5nZSAhPSBudWxsICYmIChsaWdodC5yYW5nZSA9IHJhbmdlKTtcclxuICAgIGNvbG9yICE9IG51bGwgJiYgKGxpZ2h0LmNvbG9yID0gY29sb3IpO1xyXG4gICAgaW50ZW5zaXR5ICE9IG51bGwgJiYgKGxpZ2h0LmludGVuc2l0eSA9IGludGVuc2l0eSk7XHJcbiAgICB1bWJyYUFuZ2xlICE9IG51bGwgJiYgKGxpZ2h0LnVtYnJhQW5nbGUgPSB1bWJyYUFuZ2xlKTtcclxuICAgIHBlbnVtYnJhQW5nbGUgIT0gbnVsbCAmJiAobGlnaHQucGVudW1icmFBbmdsZSA9IHBlbnVtYnJhQW5nbGUpO1xyXG5cclxuICAgIHRoaXMuc2NlbmUuYWRkKGxpZ2h0KTtcclxuXHJcbiAgICByZXR1cm4gbGlnaHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgcG9pbnQgbGlnaHQuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58Y2xheS5WZWN0b3IzfSBwb3NpdGlvbiBQb3NpdGlvbiBvZiBwb2ludCBsaWdodC4uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcmFuZ2U9MTAwXSBGYWxsb2ZmIHJhbmdlIG9mIHBvaW50IGxpZ2h0LlxyXG4gKiBAcGFyYW0ge0NvbG9yfSBbY29sb3I9JyNmZmYnXSBDb2xvciBvZiBwb2ludCBsaWdodC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtpbnRlbnNpdHk9MV0gSW50ZW5zaXR5IG9mIHBvaW50IGxpZ2h0LlxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZVBvaW50TGlnaHQgPSBmdW5jdGlvbiAocG9zaXRpb24sIHJhbmdlLCBjb2xvciwgaW50ZW5zaXR5KSB7XHJcbiAgICB2YXIgbGlnaHQgPSBuZXcgUG9pbnRMaWdodCgpO1xyXG4gICAgbGlnaHQucG9zaXRpb24uc2V0QXJyYXkocG9zaXRpb24gaW5zdGFuY2VvZiBWZWN0b3IzID8gcG9zaXRpb24uYXJyYXkgOiBwb3NpdGlvbik7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb2xvciA9IHBhcnNlQ29sb3IoY29sb3IpO1xyXG4gICAgfVxyXG4gICAgcmFuZ2UgIT0gbnVsbCAmJiAobGlnaHQucmFuZ2UgPSByYW5nZSk7XHJcbiAgICBjb2xvciAhPSBudWxsICYmIChsaWdodC5jb2xvciA9IGNvbG9yKTtcclxuICAgIGludGVuc2l0eSAhPSBudWxsICYmIChsaWdodC5pbnRlbnNpdHkgPSBpbnRlbnNpdHkpO1xyXG5cclxuICAgIHRoaXMuc2NlbmUuYWRkKGxpZ2h0KTtcclxuXHJcbiAgICByZXR1cm4gbGlnaHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgYW1iaWVudCBsaWdodC5cclxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2YgYW1iaWVudCBsaWdodC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtpbnRlbnNpdHk9MV0gSW50ZW5zaXR5IG9mIGFtYmllbnQgbGlnaHQuXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlQW1iaWVudExpZ2h0ID0gZnVuY3Rpb24gKGNvbG9yLCBpbnRlbnNpdHkpIHtcclxuICAgIHZhciBsaWdodCA9IG5ldyBBbWJpZW50TGlnaHQoKTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGNvbG9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNvbG9yID0gcGFyc2VDb2xvcihjb2xvcik7XHJcbiAgICB9XHJcbiAgICBjb2xvciAhPSBudWxsICYmIChsaWdodC5jb2xvciA9IGNvbG9yKTtcclxuICAgIGludGVuc2l0eSAhPSBudWxsICYmIChsaWdodC5pbnRlbnNpdHkgPSBpbnRlbnNpdHkpO1xyXG5cclxuICAgIHRoaXMuc2NlbmUuYWRkKGxpZ2h0KTtcclxuXHJcbiAgICByZXR1cm4gbGlnaHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFuIGN1YmVtYXAgYW1iaWVudCBsaWdodCBhbmQgYW4gc3BoZXJpY2FsIGhhcm1vbmljIGFtYmllbnQgbGlnaHRcclxuICogZm9yIHNwZWN1bGFyIGFuZCBkaWZmdXNlIGxpZ2h0aW5nIGluIFBCUiByZW5kZXJpbmdcclxuICogQHBhcmFtIHtJbWFnZUxpa2V8VGV4dHVyZUN1YmV9IFtlbnZJbWFnZV0gUGFub3JhbWEgZW52aXJvbm1lbnQgaW1hZ2UsIEhEUiBmb3JtYXQgaXMgYmV0dGVyLiBPciBhIHByZSBsb2FkZWQgdGV4dHVyZSBjdWJlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3BlY3VsYXJJbnRlbnN0aXR5PTAuN10gSW50ZW5zaXR5IG9mIHNwZWN1bGFyIGxpZ2h0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2RpZmZ1c2VJbnRlbnN0aXR5PTAuN10gSW50ZW5zaXR5IG9mIGRpZmZ1c2UgbGlnaHQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZXhwb3N1cmU9MV0gRXhwb3N1cmUgb2YgSERSIGltYWdlLiBPbmx5IGlmIGltYWdlIGluIGZpcnN0IHBhcmFtdGVyIGlzIEhEUi5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVmaWx0ZXJlZEN1YmVtYXBTaXplPTMyXSBUaGUgc2l6ZSBvZiBwcmVmaWxlcnRlZCBjdWJlbWFwLiBMYXJnZXIgdmFsdWUgd2lsbCB0YWtlIG1vcmUgdGltZSB0byBkbyBleHBlbnNpdmUgcHJlZmlsdGVyaW5nLlxyXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZUFtYmllbnRDdWJlbWFwTGlnaHQgPSBmdW5jdGlvbiAoZW52SW1hZ2UsIHNwZWNJbnRlbnNpdHksIGRpZmZJbnRlbnNpdHksIGV4cG9zdXJlLCBwcmVmaWx0ZXJlZEN1YmVtYXBTaXplKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICBpZiAoZXhwb3N1cmUgPT0gbnVsbCkge1xyXG4gICAgICAgIGV4cG9zdXJlID0gMDtcclxuICAgIH1cclxuICAgIGlmIChwcmVmaWx0ZXJlZEN1YmVtYXBTaXplID09IG51bGwpIHtcclxuICAgICAgICBwcmVmaWx0ZXJlZEN1YmVtYXBTaXplID0gMzI7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHNjZW5lID0gdGhpcy5zY2VuZTtcclxuXHJcbiAgICB2YXIgbG9hZFByb21pc2U7XHJcbiAgICBpZiAoZW52SW1hZ2UudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlQ3ViZScpIHtcclxuICAgICAgICBsb2FkUHJvbWlzZSA9IGVudkltYWdlLmlzUmVuZGVyYWJsZSgpXHJcbiAgICAgICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKGVudkltYWdlKVxyXG4gICAgICAgICAgICA6IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgICAgIGVudkltYWdlLnN1Y2Nlc3MoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZW52SW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgbG9hZFByb21pc2UgPSB0aGlzLmxvYWRUZXh0dXJlKGVudkltYWdlLCB7XHJcbiAgICAgICAgICAgIGV4cG9zdXJlOiBleHBvc3VyZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsb2FkUHJvbWlzZS50aGVuKGZ1bmN0aW9uIChlbnZUZXh0dXJlKSB7XHJcbiAgICAgICAgdmFyIHNwZWNMaWdodCA9IG5ldyBBbWJpZW50Q3ViZW1hcExpZ2h0KHtcclxuICAgICAgICAgICAgaW50ZW5zaXR5OiBzcGVjSW50ZW5zaXR5ICE9IG51bGwgPyBzcGVjSW50ZW5zaXR5IDogMC43XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc3BlY0xpZ2h0LmN1YmVtYXAgPSBlbnZUZXh0dXJlO1xyXG4gICAgICAgIGVudlRleHR1cmUuZmxpcFkgPSBmYWxzZTtcclxuICAgICAgICAvLyBUT0RPIENhY2hlIHByZWZpbHRlciA/XHJcbiAgICAgICAgc3BlY0xpZ2h0LnByZWZpbHRlcihzZWxmLnJlbmRlcmVyLCAzMik7XHJcblxyXG4gICAgICAgIHZhciBkaWZmTGlnaHQgPSBuZXcgQW1iaWVudFNITGlnaHQoe1xyXG4gICAgICAgICAgICBpbnRlbnNpdHk6IGRpZmZJbnRlbnNpdHkgIT0gbnVsbCA/IGRpZmZJbnRlbnNpdHkgOiAwLjcsXHJcbiAgICAgICAgICAgIGNvZWZmaWNpZW50czogc2hVdGlsLnByb2plY3RFbnZpcm9ubWVudE1hcChcclxuICAgICAgICAgICAgICAgIHNlbGYucmVuZGVyZXIsIHNwZWNMaWdodC5jdWJlbWFwLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9kOiAxXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9KTtcclxuICAgICAgICBzY2VuZS5hZGQoc3BlY0xpZ2h0KTtcclxuICAgICAgICBzY2VuZS5hZGQoZGlmZkxpZ2h0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc3BlY3VsYXI6IHNwZWNMaWdodCxcclxuICAgICAgICAgICAgZGlmZnVzZTogZGlmZkxpZ2h0LFxyXG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBlbnZpcm9ubWVudCBtYXBcclxuICAgICAgICAgICAgZW52aXJvbm1lbnRNYXA6IGVudlRleHR1cmVcclxuICAgICAgICB9O1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogTG9hZCBhIFtnbFRGXShodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYpIGZvcm1hdCBtb2RlbC5cclxuICogWW91IGNhbiBjb252ZXJ0IEZCWC9EQUUvT0JKIGZvcm1hdCBtb2RlbHMgdG8gW2dsVEZdKGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURikgd2l0aCBbZmJ4MmdsdGZdKGh0dHBzOi8vZ2l0aHViLmNvbS9waXNzYW5nL2NsYXlnbCNmYngtdG8tZ2x0ZjIwLWNvbnZlcnRlcikgcHl0aG9uIHNjcmlwdCxcclxuICogb3Igc2ltcGx5IHVzaW5nIHRoZSBbQ2xheSBWaWV3ZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9waXNzYW5nL2NsYXktdmlld2VyKSBjbGllbnQgYXBwbGljYXRpb24uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcclxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcclxuICogQHBhcmFtIHtzdHJpbmd8Y2xheS5TaGFkZXJ9IFtvcHRzLnNoYWRlcj0nY2xheS5zdGFuZGFyZCddICdiYXNpYyd8J2xhbWJlcnQnfCdzdGFuZGFyZCcuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMud2FpdFRleHR1cmVMb2FkZWQ9ZmFsc2VdIElmIGFkZCB0byBzY2VuZSB1dGlsIHRleHR1cmVzIGFyZSBhbGwgbG9hZGVkLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmF1dG9QbGF5QW5pbWF0aW9uPXRydWVdIElmIGF1dG9wbGF5IHRoZSBhbmltYXRpb24gb2YgbW9kZWwuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMudXBBeGlzPSd5J10gQ2hhbmdlIG1vZGVsIHRvIHkgdXAgaWYgdXBBeGlzIGlzICd6J1xyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnRleHR1cmVGbGlwWT1mYWxzZV1cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy50ZXh0dXJlQ29udmVydFRvUE9UPWZhbHNlXSBJZiBjb252ZXJ0IHRleHR1cmUgdG8gcG93ZXItb2YtdHdvXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy50ZXh0dXJlUm9vdFBhdGhdIFJvb3QgcGF0aCBvZiB0ZXh0dXJlLiBEZWZhdWx0IHRvIGJlIHJlbGF0aXZlIHdpdGggZ2xURiBmaWxlLlxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRoYXQgbW9kZWwgd2lsbCBiZSBtb3VudGVkLiBEZWZhdWx0IHRvIGJlIHNjZW5lXHJcbiAqIEByZXR1cm4ge1Byb21pc2V9XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUubG9hZE1vZGVsID0gZnVuY3Rpb24gKHVybCwgb3B0cywgcGFyZW50Tm9kZSkge1xyXG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFVSTC4nKTtcclxuICAgIH1cclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuICAgIGlmIChvcHRzLmF1dG9QbGF5QW5pbWF0aW9uID09IG51bGwpIHtcclxuICAgICAgICBvcHRzLmF1dG9QbGF5QW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBzaGFkZXIgPSBvcHRzLnNoYWRlciB8fCAnY2xheS5zdGFuZGFyZCc7XHJcblxyXG4gICAgdmFyIGxvYWRlck9wdHMgPSB7XHJcbiAgICAgICAgcm9vdE5vZGU6IG5ldyBOb2RlKCksXHJcbiAgICAgICAgc2hhZGVyOiBzaGFkZXIsXHJcbiAgICAgICAgdGV4dHVyZVJvb3RQYXRoOiBvcHRzLnRleHR1cmVSb290UGF0aCxcclxuICAgICAgICBjcm9zc09yaWdpbjogJ0Fub255bW91cycsXHJcbiAgICAgICAgdGV4dHVyZUZsaXBZOiBvcHRzLnRleHR1cmVGbGlwWSxcclxuICAgICAgICB0ZXh0dXJlQ29udmVydFRvUE9UOiBvcHRzLnRleHR1cmVDb252ZXJ0VG9QT1RcclxuICAgIH07XHJcbiAgICBpZiAob3B0cy51cEF4aXMgJiYgb3B0cy51cEF4aXMudG9Mb3dlckNhc2UoKSA9PT0gJ3onKSB7XHJcbiAgICAgICAgbG9hZGVyT3B0cy5yb290Tm9kZS5yb3RhdGlvbi5pZGVudGl0eSgpLnJvdGF0ZVgoLU1hdGguUEkgLyAyKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbG9hZGVyID0gbmV3IEdMVEZMb2FkZXIobG9hZGVyT3B0cyk7XHJcblxyXG4gICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgdGhpcy5zY2VuZTtcclxuICAgIHZhciB0aW1lbGluZSA9IHRoaXMudGltZWxpbmU7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBhZnRlckxvYWQocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLl9kaXNwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwYXJlbnROb2RlLmFkZChyZXN1bHQucm9vdE5vZGUpO1xyXG4gICAgICAgICAgICBpZiAob3B0cy5hdXRvUGxheUFuaW1hdGlvbikge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LmNsaXBzLmZvckVhY2goZnVuY3Rpb24gKGNsaXApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aW1lbGluZS5hZGRDbGlwKGNsaXApO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsb2FkZXIuc3VjY2VzcyhmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLl9kaXNwb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIW9wdHMud2FpdFRleHR1cmVMb2FkZWQpIHtcclxuICAgICAgICAgICAgICAgIGFmdGVyTG9hZChyZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwocmVzdWx0LnRleHR1cmVzLm1hcChmdW5jdGlvbiAodGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLnN1Y2Nlc3MocmVzb2x2ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZXJyb3IocmVzb2x2ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSkudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJMb2FkKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJMb2FkKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxvYWRlci5lcnJvcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxvYWRlci5sb2FkKHVybCk7XHJcbiAgICB9KTtcclxufTtcclxuXHJcblxyXG4vLyBUT0RPIGNsb25lTW9kZWxcclxuXHJcbi8qKlxyXG4gKiBTaW1pbGFyIHRvIGBhcHAuc2NlbmUuY2xvbmVOb2RlYCwgZXhjZXB0IGl0IHdpbGwgbW91bnQgdGhlIGNsb25lZCBub2RlIHRvIHRoZSBzY2VuZSBhdXRvbWF0aWNhbGx5LlxyXG4gKiBTZWUgbW9yZSBpbiB7QGxpbmsgY2xheS5TY2VuZSNjbG9uZU5vZGV9XHJcbiAqXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBub2RlXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdGhhdCBuZXcgY2xvbmVkIG5vZGUgd2lsbCBiZSBtb3VudGVkLlxyXG4gKiAgICAgICAgICBEZWZhdWx0IHRvIGhhdmUgc2FtZSBwYXJlbnQgd2l0aCBzb3VyY2Ugbm9kZS5cclxuICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNsb25lTm9kZSA9IGZ1bmN0aW9uIChub2RlLCBwYXJlbnROb2RlKSB7XHJcbiAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZSB8fCBub2RlLmdldFBhcmVudCgpO1xyXG5cclxuICAgIHZhciBuZXdOb2RlID0gdGhpcy5zY2VuZS5jbG9uZU5vZGUobm9kZSwgcGFyZW50Tm9kZSk7XHJcbiAgICBpZiAocGFyZW50Tm9kZSkge1xyXG4gICAgICAgIHBhcmVudE5vZGUuYWRkKG5ld05vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXdOb2RlO1xyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIEFwcDNEOiBBcHAzRCxcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgM0QgYXBwbGljYXRpb24gdGhhdCB3aWxsIG1hbmFnZSB0aGUgYXBwIGluaXRpYWxpemF0aW9uIGFuZCBsb29wLlxyXG4gICAgICpcclxuICAgICAqIFNlZSBtb3JlIGRldGFpbHMgYXQge0BsaW5rIGNsYXkuYXBwbGljYXRpb24uQXBwM0R9XHJcbiAgICAgKlxyXG4gICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5jcmVhdGVcclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8c3RyaW5nfSBkb20gQ29udGFpbmVyIGRvbSBlbGVtZW50IG9yIGEgc2VsZWN0b3Igc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgaW4gYHF1ZXJ5U2VsZWN0b3JgXHJcbiAgICAgKiBAcGFyYW0ge0FwcDNETmFtZXNwYWNlfSBhcHBOUyBPcHRpb25zIGFuZCBuYW1lc3BhY2UgdXNlZCBpbiBjcmVhdGluZyBhcHAzRFxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2NsYXkuYXBwbGljYXRpb24uQXBwM0R9XHJcbiAgICAgKlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqICBjbGF5LmFwcGxpY2F0aW9uLmNyZWF0ZSgnI2FwcCcsIHtcclxuICAgICAqICAgICAgaW5pdDogZnVuY3Rpb24gKGFwcCkge1xyXG4gICAgICogICAgICAgICAgYXBwLmNyZWF0ZUN1YmUoKTtcclxuICAgICAqICAgICAgICAgIHZhciBjYW1lcmEgPSBhcHAuY3JlYXRlQ2FtZXJhKCk7XHJcbiAgICAgKiAgICAgICAgICBjYW1lcmEucG9zaXRpb24uc2V0KDAsIDAsIDIpO1xyXG4gICAgICogICAgICB9LFxyXG4gICAgICogICAgICBsb29wOiBmdW5jdGlvbiAoKSB7IC8vIG5vb3AgfVxyXG4gICAgICogIH0pXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZTogZnVuY3Rpb24gKGRvbSwgYXBwTlMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IEFwcDNEKGRvbSwgYXBwTlMpO1xyXG4gICAgfVxyXG59OyIsImltcG9ydCBub3RpZmllciBmcm9tICcuLi9jb3JlL21peGluL25vdGlmaWVyJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCB1dGlsICBmcm9tICcuLi9jb3JlL3V0aWwnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hc3luYy5UYXNrXHJcbiAqIEBtaXhlcyBjbGF5LmNvcmUubWl4aW4ubm90aWZpZXJcclxuICovXHJcbmZ1bmN0aW9uIFRhc2soKSB7XHJcbiAgICB0aGlzLl9mdWxsZmlsbGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLl9yZWplY3RlZCA9IGZhbHNlO1xyXG59O1xyXG4vKipcclxuICogVGFzayBzdWNjZXNzZWRcclxuICogQHBhcmFtIHt9IGRhdGFcclxuICovXHJcblRhc2sucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICB0aGlzLl9mdWxsZmlsbGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuX3JlamVjdGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnRyaWdnZXIoJ3N1Y2Nlc3MnLCBkYXRhKTtcclxufTtcclxuLyoqXHJcbiAqIFRhc2sgZmFpbGVkXHJcbiAqIEBwYXJhbSB7fSBlcnJcclxuICovXHJcblRhc2sucHJvdG90eXBlLnJlamVjdCA9IGZ1bmN0aW9uKGVycikge1xyXG4gICAgdGhpcy5fcmVqZWN0ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5fZnVsbGZpbGxlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsIGVycik7XHJcbn07XHJcbi8qKlxyXG4gKiBJZiB0YXNrIHN1Y2Nlc3NlZFxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKi9cclxuVGFzay5wcm90b3R5cGUuaXNGdWxsZmlsbGVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZnVsbGZpbGxlZDtcclxufTtcclxuLyoqXHJcbiAqIElmIHRhc2sgZmFpbGVkXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAqL1xyXG5UYXNrLnByb3RvdHlwZS5pc1JlamVjdGVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVqZWN0ZWQ7XHJcbn07XHJcbi8qKlxyXG4gKiBJZiB0YXNrIGZpbmlzaGVkLCBlaXRoZXIgc3VjY2Vzc2VkIG9yIGZhaWxlZFxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKi9cclxuVGFzay5wcm90b3R5cGUuaXNTZXR0bGVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZnVsbGZpbGxlZCB8fCB0aGlzLl9yZWplY3RlZDtcclxufTtcclxuXHJcbnV0aWwuZXh0ZW5kKFRhc2sucHJvdG90eXBlLCBub3RpZmllcik7XHJcblxyXG5mdW5jdGlvbiBtYWtlUmVxdWVzdFRhc2sodXJsLCByZXNwb25zZVR5cGUpIHtcclxuICAgIHZhciB0YXNrID0gbmV3IFRhc2soKTtcclxuICAgIHZlbmRvci5yZXF1ZXN0LmdldCh7XHJcbiAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgcmVzcG9uc2VUeXBlOiByZXNwb25zZVR5cGUsXHJcbiAgICAgICAgb25sb2FkOiBmdW5jdGlvbihyZXMpIHtcclxuICAgICAgICAgICAgdGFzay5yZXNvbHZlKHJlcyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvbmVycm9yOiBmdW5jdGlvbihlcnJvcikge1xyXG4gICAgICAgICAgICB0YXNrLnJlamVjdChlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGFzaztcclxufVxyXG4vKipcclxuICogTWFrZSBhIHZlbmRvci5yZXF1ZXN0IHRhc2tcclxuICogQHBhcmFtICB7c3RyaW5nfG9iamVjdHxvYmplY3RbXXxzdHJpbmdbXX0gdXJsXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gW3Jlc3BvbnNlVHlwZV1cclxuICogQGV4YW1wbGVcclxuICogICAgIHZhciB0YXNrID0gVGFzay5tYWtlUmVxdWVzdFRhc2soJy4vYS5qc29uJyk7XHJcbiAqICAgICB2YXIgdGFzayA9IFRhc2subWFrZVJlcXVlc3RUYXNrKHtcclxuICogICAgICAgICB1cmw6ICdiLmJpbicsXHJcbiAqICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXHJcbiAqICAgICB9KTtcclxuICogICAgIHZhciB0YXNrcyA9IFRhc2subWFrZVJlcXVlc3RUYXNrKFsnLi9hLmpzb24nLCAnLi9iLmpzb24nXSk7XHJcbiAqICAgICB2YXIgdGFza3MgPSBUYXNrLm1ha2VSZXF1ZXN0VGFzayhbXHJcbiAqICAgICAgICAge3VybDogJ2EuanNvbid9LFxyXG4gKiAgICAgICAgIHt1cmw6ICdiLmJpbicsIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ31cclxuICogICAgIF0pO1xyXG4gKiBAcmV0dXJuIHtjbGF5LmFzeW5jLlRhc2t8Y2xheS5hc3luYy5UYXNrW119XHJcbiAqL1xyXG5UYXNrLm1ha2VSZXF1ZXN0VGFzayA9IGZ1bmN0aW9uKHVybCwgcmVzcG9uc2VUeXBlKSB7XHJcbiAgICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gbWFrZVJlcXVlc3RUYXNrKHVybCwgcmVzcG9uc2VUeXBlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHVybC51cmwpIHsgICAvLyAgQ29uZmlndXJlIG9iamVjdFxyXG4gICAgICAgIHZhciBvYmogPSB1cmw7XHJcbiAgICAgICAgcmV0dXJuIG1ha2VSZXF1ZXN0VGFzayhvYmoudXJsLCBvYmoucmVzcG9uc2VUeXBlKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodXJsKSkgeyAgLy8gVXJsIGxpc3RcclxuICAgICAgICB2YXIgdXJsTGlzdCA9IHVybDtcclxuICAgICAgICB2YXIgdGFza3MgPSBbXTtcclxuICAgICAgICB1cmxMaXN0LmZvckVhY2goZnVuY3Rpb24ob2JqKSB7XHJcbiAgICAgICAgICAgIHZhciB1cmwsIHJlc3BvbnNlVHlwZTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICB1cmwgPSBvYmo7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoT2JqZWN0KG9iaikgPT09IG9iaikge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gb2JqLnVybDtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZSA9IG9iai5yZXNwb25zZVR5cGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGFza3MucHVzaChtYWtlUmVxdWVzdFRhc2sodXJsLCByZXNwb25zZVR5cGUpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGFza3M7XHJcbiAgICB9XHJcbn07XHJcbi8qKlxyXG4gKiBAcmV0dXJuIHtjbGF5LmFzeW5jLlRhc2t9XHJcbiAqL1xyXG5UYXNrLm1ha2VUYXNrID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gbmV3IFRhc2soKTtcclxufTtcclxuXHJcbnV0aWwuZXh0ZW5kKFRhc2sucHJvdG90eXBlLCBub3RpZmllcik7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUYXNrO1xyXG4iLCJpbXBvcnQgdXRpbCBmcm9tICcuLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgVGFzayBmcm9tICcuL1Rhc2snO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hc3luYy5UYXNrR3JvdXBcclxuICogQGV4dGVuZHMgY2xheS5hc3luYy5UYXNrXHJcbiAqL1xyXG52YXIgVGFza0dyb3VwID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIFRhc2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuXHJcbiAgICB0aGlzLl90YXNrcyA9IFtdO1xyXG5cclxuICAgIHRoaXMuX2Z1bGZpbGxlZE51bWJlciA9IDA7XHJcblxyXG4gICAgdGhpcy5fcmVqZWN0ZWROdW1iZXIgPSAwO1xyXG59O1xyXG5cclxudmFyIEN0b3IgPSBmdW5jdGlvbiAoKXt9O1xyXG5DdG9yLnByb3RvdHlwZSA9IFRhc2sucHJvdG90eXBlO1xyXG5UYXNrR3JvdXAucHJvdG90eXBlID0gbmV3IEN0b3IoKTtcclxuXHJcblRhc2tHcm91cC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUYXNrR3JvdXA7XHJcblxyXG4vKipcclxuICogV2FpdCBmb3IgYWxsIGdpdmVuIHRhc2tzIHN1Y2Nlc3NlZCwgdGFzayBjYW4gYWxzbyBiZSBhbnkgbm90aWZpZXIgb2JqZWN0IHdoaWNoIHdpbGwgdHJpZ2dlciBzdWNjZXNzIGFuZCBlcnJvciBldmVudHMuIExpa2Uge0BsaW5rIGNsYXkuVGV4dHVyZTJEfSwge0BsaW5rIGNsYXkuVGV4dHVyZUN1YmV9LCB7QGxpbmsgY2xheS5sb2FkZXIuR0xURn0uXHJcbiAqIEBwYXJhbSAge0FycmF5LjxjbGF5LmFzeW5jLlRhc2s+fSB0YXNrc1xyXG4gKiBAY2hhaW5hYmxlXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICAvLyBMb2FkIHRleHR1cmUgbGlzdFxyXG4gKiAgICAgdmFyIGxpc3QgPSBbJ2EuanBnJywgJ2IuanBnJywgJ2MuanBnJ11cclxuICogICAgIHZhciB0ZXh0dXJlcyA9IGxpc3QubWFwKGZ1bmN0aW9uIChzcmMpIHtcclxuICogICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBjbGF5LlRleHR1cmUyRCgpO1xyXG4gKiAgICAgICAgIHRleHR1cmUubG9hZChzcmMpO1xyXG4gKiAgICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgdGFza0dyb3VwID0gbmV3IGNsYXkuYXN5bmMuVGFza0dyb3VwKCk7XHJcbiAqICAgICB0YXNrR3JvdXAuYWxsKHRleHR1cmVzKS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICogICAgICAgICAvLyBEbyBzb21lIHRoaW5nIGFmdGVyIGFsbCB0ZXh0dXJlcyBsb2FkZWRcclxuICogICAgIH0pO1xyXG4gKi9cclxuVGFza0dyb3VwLnByb3RvdHlwZS5hbGwgPSBmdW5jdGlvbiAodGFza3MpIHtcclxuICAgIHZhciBjb3VudCA9IDA7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICB2YXIgZGF0YSA9IFtdO1xyXG4gICAgdGhpcy5fdGFza3MgPSB0YXNrcztcclxuICAgIHRoaXMuX2Z1bGZpbGxlZE51bWJlciA9IDA7XHJcbiAgICB0aGlzLl9yZWplY3RlZE51bWJlciA9IDA7XHJcblxyXG4gICAgdXRpbC5lYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaywgaWR4KSB7XHJcbiAgICAgICAgaWYgKCF0YXNrIHx8ICF0YXNrLm9uY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgIHRhc2sub25jZSgnc3VjY2VzcycsIGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgY291bnQtLTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuX2Z1bGZpbGxlZE51bWJlcisrO1xyXG4gICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICAgIC8vIFNvbWUgdGFza3MgbGlrZSB0ZXh0dXJlLCBsb2FkZXIgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSB0YXNrXHJcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBzdGF0ZXMgaGVyZVxyXG4gICAgICAgICAgICB0YXNrLl9mdWxmaWxsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0YXNrLl9yZWplY3RlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgZGF0YVtpZHhdID0gcmVzO1xyXG4gICAgICAgICAgICBpZiAoY291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRhc2sub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICBzZWxmLl9yZWplY3RlZE51bWJlciArKztcclxuXHJcbiAgICAgICAgICAgIHRhc2suX2Z1bGZpbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0YXNrLl9yZWplY3RlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBzZWxmLnJlamVjdCh0YXNrKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgaWYgKGNvdW50ID09PSAwKSB7XHJcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHNlbGYucmVzb2x2ZShkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG4vKipcclxuICogV2FpdCBmb3IgYWxsIGdpdmVuIHRhc2tzIGZpbmlzaGVkLCBlaXRoZXIgc3VjY2Vzc2VkIG9yIGZhaWxlZFxyXG4gKiBAcGFyYW0gIHtBcnJheS48Y2xheS5hc3luYy5UYXNrPn0gdGFza3NcclxuICogQHJldHVybiB7Y2xheS5hc3luYy5UYXNrR3JvdXB9XHJcbiAqL1xyXG5UYXNrR3JvdXAucHJvdG90eXBlLmFsbFNldHRsZWQgPSBmdW5jdGlvbiAodGFza3MpIHtcclxuICAgIHZhciBjb3VudCA9IDA7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICB2YXIgZGF0YSA9IFtdO1xyXG4gICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3N1Y2Nlc3MnLCBkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHRoaXMuX3Rhc2tzID0gdGFza3M7XHJcblxyXG4gICAgdXRpbC5lYWNoKHRhc2tzLCBmdW5jdGlvbiAodGFzaywgaWR4KSB7XHJcbiAgICAgICAgaWYgKCF0YXNrIHx8ICF0YXNrLm9uY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgIHRhc2sub25jZSgnc3VjY2VzcycsIGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgY291bnQtLTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuX2Z1bGZpbGxlZE51bWJlcisrO1xyXG5cclxuICAgICAgICAgICAgdGFzay5fZnVsZmlsbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGRhdGFbaWR4XSA9IHJlcztcclxuICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0YXNrLm9uY2UoJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICBjb3VudC0tO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5fcmVqZWN0ZWROdW1iZXIrKztcclxuXHJcbiAgICAgICAgICAgIHRhc2suX2Z1bGZpbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0YXNrLl9yZWplY3RlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICAgIGRhdGFbaWR4XSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG4vKipcclxuICogR2V0IHN1Y2Nlc3NlZCBzdWIgdGFza3MgbnVtYmVyLCByZWN1cnNpdmUgY2FuIGJlIHRydWUgaWYgc3ViIHRhc2sgaXMgYWxzbyBhIFRhc2tHcm91cC5cclxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3JlY3Vyc2l2ZV1cclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVGFza0dyb3VwLnByb3RvdHlwZS5nZXRGdWxmaWxsZWROdW1iZXIgPSBmdW5jdGlvbiAocmVjdXJzaXZlKSB7XHJcbiAgICBpZiAocmVjdXJzaXZlKSB7XHJcbiAgICAgICAgdmFyIG5GdWxmaWxsZWQgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGFza3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRhc2sgaW5zdGFuY2VvZiBUYXNrR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIG5GdWxmaWxsZWQgKz0gdGFzay5nZXRGdWxmaWxsZWROdW1iZXIocmVjdXJzaXZlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKHRhc2suX2Z1bGZpbGxlZCkge1xyXG4gICAgICAgICAgICAgICAgbkZ1bGZpbGxlZCArPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuRnVsZmlsbGVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZnVsZmlsbGVkTnVtYmVyO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBmYWlsZWQgc3ViIHRhc2tzIG51bWJlciwgcmVjdXJzaXZlIGNhbiBiZSB0cnVlIGlmIHN1YiB0YXNrIGlzIGFsc28gYSBUYXNrR3JvdXAuXHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFtyZWN1cnNpdmVdXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblRhc2tHcm91cC5wcm90b3R5cGUuZ2V0UmVqZWN0ZWROdW1iZXIgPSBmdW5jdGlvbiAocmVjdXJzaXZlKSB7XHJcbiAgICBpZiAocmVjdXJzaXZlKSB7XHJcbiAgICAgICAgdmFyIG5SZWplY3RlZCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFzayA9IHRoaXMuX3Rhc2tzW2ldO1xyXG4gICAgICAgICAgICBpZiAodGFzayBpbnN0YW5jZW9mIFRhc2tHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgblJlamVjdGVkICs9IHRhc2suZ2V0UmVqZWN0ZWROdW1iZXIocmVjdXJzaXZlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmKHRhc2suX3JlamVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICBuUmVqZWN0ZWQgKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gblJlamVjdGVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVqZWN0ZWROdW1iZXI7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IGZpbmlzaGVkIHN1YiB0YXNrcyBudW1iZXIsIHJlY3Vyc2l2ZSBjYW4gYmUgdHJ1ZSBpZiBzdWIgdGFzayBpcyBhbHNvIGEgVGFza0dyb3VwLlxyXG4gKiBAcGFyYW0gIHtib29sZWFufSBbcmVjdXJzaXZlXVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5UYXNrR3JvdXAucHJvdG90eXBlLmdldFNldHRsZWROdW1iZXIgPSBmdW5jdGlvbiAocmVjdXJzaXZlKSB7XHJcblxyXG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xyXG4gICAgICAgIHZhciBuU2V0dGxlZCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFzayA9IHRoaXMuX3Rhc2tzW2ldO1xyXG4gICAgICAgICAgICBpZiAodGFzayBpbnN0YW5jZW9mIFRhc2tHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgblNldHRsZWQgKz0gdGFzay5nZXRTZXR0bGVkTnVtYmVyKHJlY3Vyc2l2ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZih0YXNrLl9yZWplY3RlZCB8fCB0YXNrLl9mdWxmaWxsZWQpIHtcclxuICAgICAgICAgICAgICAgIG5TZXR0bGVkICs9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5TZXR0bGVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZnVsZmlsbGVkTnVtYmVyICsgdGhpcy5fcmVqZWN0ZWROdW1iZXI7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0IGFsbCBzdWIgdGFza3MgbnVtYmVyLCByZWN1cnNpdmUgY2FuIGJlIHRydWUgaWYgc3ViIHRhc2sgaXMgYWxzbyBhIFRhc2tHcm91cC5cclxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3JlY3Vyc2l2ZV1cclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVGFza0dyb3VwLnByb3RvdHlwZS5nZXRUYXNrTnVtYmVyID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xyXG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xyXG4gICAgICAgIHZhciBuVGFzayA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90YXNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGFzayA9IHRoaXMuX3Rhc2tzW2ldO1xyXG4gICAgICAgICAgICBpZiAodGFzayBpbnN0YW5jZW9mIFRhc2tHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgblRhc2sgKz0gdGFzay5nZXRUYXNrTnVtYmVyKHJlY3Vyc2l2ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuVGFzayArPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuVGFzaztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rhc2tzLmxlbmd0aDtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRhc2tHcm91cDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuXHJcbi8vIFBFTkRJTkdcclxuLy8gVXNlIHRvcG9sb2dpY2FsIHNvcnQgP1xyXG5cclxuLyoqXHJcbiAqIE5vZGUgb2YgZ3JhcGggYmFzZWQgcG9zdCBwcm9jZXNzaW5nLlxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqXHJcbiAqL1xyXG52YXIgQ29tcG9zaXRvck5vZGUgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvck5vZGUjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG5hbWU6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnB1dCBsaW5rcywgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBncmFwaFxyXG4gICAgICAgICAqIEBleGFtcGxlOlxyXG4gICAgICAgICAqICAgICBpbnB1dE5hbWU6IHtcclxuICAgICAgICAgKiAgICAgICAgIG5vZGU6IHNvbWVOb2RlLFxyXG4gICAgICAgICAqICAgICAgICAgcGluOiAneHh4eCdcclxuICAgICAgICAgKiAgICAgfVxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5wdXRMaW5rczoge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE91dHB1dCBsaW5rcywgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBncmFwaFxyXG4gICAgICAgICAqIEBleGFtcGxlOlxyXG4gICAgICAgICAqICAgICBvdXRwdXROYW1lOiB7XHJcbiAgICAgICAgICogICAgICAgICBub2RlOiBzb21lTm9kZSxcclxuICAgICAgICAgKiAgICAgICAgIHBpbjogJ3h4eHgnXHJcbiAgICAgICAgICogICAgIH1cclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG91dHB1dExpbmtzOiB7fSxcclxuXHJcbiAgICAgICAgLy8gU2F2ZSB0aGUgb3V0cHV0IHRleHR1cmUgb2YgcHJldmlvdXMgZnJhbWVcclxuICAgICAgICAvLyBXaWxsIGJlIHVzZWQgd2hlbiB0aGVyZSBleGlzdCBhIGNpcmN1bGFyIHJlZmVyZW5jZVxyXG4gICAgICAgIF9wcmV2T3V0cHV0VGV4dHVyZXM6IHt9LFxyXG4gICAgICAgIF9vdXRwdXRUZXh0dXJlczoge30sXHJcblxyXG4gICAgICAgIC8vIEV4YW1wbGU6IHsgbmFtZTogMiB9XHJcbiAgICAgICAgX291dHB1dFJlZmVyZW5jZXM6IHt9LFxyXG5cclxuICAgICAgICBfcmVuZGVyaW5nOiBmYWxzZSxcclxuICAgICAgICAvLyBJZiByZW5kZXJlZCBpbiB0aGlzIGZyYW1lXHJcbiAgICAgICAgX3JlbmRlcmVkOiBmYWxzZSxcclxuXHJcbiAgICAgICAgX2NvbXBvc2l0b3I6IG51bGxcclxuICAgIH07XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgLy8gVE9ETyBSZW1vdmUgcGFyYW1ldGVyIGZ1bmN0aW9uIGNhbGxiYWNrXHJcbiAgICB1cGRhdGVQYXJhbWV0ZXI6IGZ1bmN0aW9uIChvdXRwdXROYW1lLCByZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW291dHB1dE5hbWVdO1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzID0gb3V0cHV0SW5mby5wYXJhbWV0ZXJzO1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzQ29weSA9IG91dHB1dEluZm8uX3BhcmFtZXRlcnNDb3B5O1xyXG4gICAgICAgIGlmICghcGFyYW1ldGVyc0NvcHkpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHkgPSBvdXRwdXRJbmZvLl9wYXJhbWV0ZXJzQ29weSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3dpZHRoJyAmJiBrZXkgIT09ICdoZWlnaHQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHlba2V5XSA9IHBhcmFtZXRlcnNba2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgd2lkdGgsIGhlaWdodDtcclxuICAgICAgICBpZiAocGFyYW1ldGVycy53aWR0aCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gcGFyYW1ldGVycy53aWR0aC5jYWxsKHRoaXMsIHJlbmRlcmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gcGFyYW1ldGVycy53aWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMuaGVpZ2h0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gcGFyYW1ldGVycy5oZWlnaHQuY2FsbCh0aGlzLCByZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBwYXJhbWV0ZXJzLmhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBwYXJhbWV0ZXJzQ29weS53aWR0aCAhPT0gd2lkdGhcclxuICAgICAgICAgICAgfHwgcGFyYW1ldGVyc0NvcHkuaGVpZ2h0ICE9PSBoZWlnaHRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX291dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXS5kaXNwb3NlKHJlbmRlcmVyLmdsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwYXJhbWV0ZXJzQ29weS53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHBhcmFtZXRlcnNDb3B5LmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnNDb3B5O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBwYXJhbWV0ZXJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge30gdmFsdWVcclxuICAgICAqL1xyXG4gICAgc2V0UGFyYW1ldGVyOiBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHt9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcGFyYW1ldGVyIHZhbHVlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge31cclxuICAgICAqL1xyXG4gICAgZ2V0UGFyYW1ldGVyOiBmdW5jdGlvbiAobmFtZSkge30sXHJcbiAgICAvKipcclxuICAgICAqIFNldCBwYXJhbWV0ZXJzXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqXHJcbiAgICAgKi9cclxuICAgIHNldFBhcmFtZXRlcnM6IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9iaikge1xyXG4gICAgICAgICAgICB0aGlzLnNldFBhcmFtZXRlcihuYW1lLCBvYmpbbmFtZV0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7fSxcclxuXHJcbiAgICBnZXRPdXRwdXQ6IGZ1bmN0aW9uIChyZW5kZXJlciAvKm9wdGlvbmFsKi8sIG5hbWUpIHtcclxuICAgICAgICBpZiAobmFtZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIFJldHVybiB0aGUgb3V0cHV0IHRleHR1cmUgd2l0aG91dCByZW5kZXJpbmdcclxuICAgICAgICAgICAgbmFtZSA9IHJlbmRlcmVyO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW25hbWVdO1xyXG4gICAgICAgIGlmICghb3V0cHV0SW5mbykge1xyXG4gICAgICAgICAgICByZXR1cm4gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQWxyZWFkeSBiZWVuIHJlbmRlcmVkIGluIHRoaXMgZnJhbWVcclxuICAgICAgICBpZiAodGhpcy5fcmVuZGVyZWQpIHtcclxuICAgICAgICAgICAgLy8gRm9yY2UgcmV0dXJuIHRleHR1cmUgaW4gbGFzdCBmcmFtZVxyXG4gICAgICAgICAgICBpZiAob3V0cHV0SW5mby5vdXRwdXRMYXN0RnJhbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIC8vIFRPRE9cclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyaW5nICAgLy8gU29sdmUgQ2lyY3VsYXIgUmVmZXJlbmNlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBibGFuayB0ZXh0dXJlIGF0IGZpcnN0IHBhc3NcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tuYW1lXSA9IHRoaXMuX2NvbXBvc2l0b3IuYWxsb2NhdGVUZXh0dXJlKG91dHB1dEluZm8ucGFyYW1ldGVycyB8fCB7fSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tuYW1lXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW1vdmVSZWZlcmVuY2U6IGZ1bmN0aW9uIChvdXRwdXROYW1lKSB7XHJcbiAgICAgICAgdGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXS0tO1xyXG4gICAgICAgIGlmICh0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW291dHB1dE5hbWVdID09PSAwKSB7XHJcbiAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW291dHB1dE5hbWVdO1xyXG4gICAgICAgICAgICBpZiAob3V0cHV0SW5mby5rZWVwTGFzdEZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdID0gdGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBPdXRwdXQgb2YgdGhpcyBub2RlIGhhdmUgYWxyZWF5IGJlZW4gdXNlZCBieSBhbGwgb3RoZXIgbm9kZXNcclxuICAgICAgICAgICAgICAgIC8vIFB1dCB0aGUgdGV4dHVyZSBiYWNrIHRvIHRoZSBwb29sLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGxpbms6IGZ1bmN0aW9uIChpbnB1dFBpbk5hbWUsIGZyb21Ob2RlLCBmcm9tUGluTmFtZSkge1xyXG5cclxuICAgICAgICAvLyBUaGUgcmVsYXRpb25zaGlwIGZyb20gb3V0cHV0IHBpbiB0byBpbnB1dCBwaW4gaXMgb25lLW9uLW11bHRpcGxlXHJcbiAgICAgICAgdGhpcy5pbnB1dExpbmtzW2lucHV0UGluTmFtZV0gPSB7XHJcbiAgICAgICAgICAgIG5vZGU6IGZyb21Ob2RlLFxyXG4gICAgICAgICAgICBwaW46IGZyb21QaW5OYW1lXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoIWZyb21Ob2RlLm91dHB1dExpbmtzW2Zyb21QaW5OYW1lXSkge1xyXG4gICAgICAgICAgICBmcm9tTm9kZS5vdXRwdXRMaW5rc1tmcm9tUGluTmFtZV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnJvbU5vZGUub3V0cHV0TGlua3NbZnJvbVBpbk5hbWVdLnB1c2goe1xyXG4gICAgICAgICAgICBub2RlOiB0aGlzLFxyXG4gICAgICAgICAgICBwaW46IGlucHV0UGluTmFtZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBFbmFibGVkIHRoZSBwaW4gdGV4dHVyZSBpbiBzaGFkZXJcclxuICAgICAgICB0aGlzLnBhc3MubWF0ZXJpYWwuZW5hYmxlVGV4dHVyZShpbnB1dFBpbk5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRMaW5rcyA9IHt9O1xyXG4gICAgICAgIHRoaXMub3V0cHV0TGlua3MgPSB7fTtcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlUmVmZXJlbmNlOiBmdW5jdGlvbiAob3V0cHV0TmFtZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5fcmVuZGVyaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGlucHV0TmFtZSBpbiB0aGlzLmlucHV0TGlua3MpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsaW5rID0gdGhpcy5pbnB1dExpbmtzW2lucHV0TmFtZV07XHJcbiAgICAgICAgICAgICAgICBsaW5rLm5vZGUudXBkYXRlUmVmZXJlbmNlKGxpbmsucGluKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG91dHB1dE5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXSArKztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGJlZm9yZUZyYW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm91dHB1dExpbmtzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dFJlZmVyZW5jZXNbbmFtZV0gPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYWZ0ZXJGcmFtZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIFB1dCBiYWNrIGFsbCB0aGUgdGV4dHVyZXMgdG8gcG9vbFxyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5vdXRwdXRMaW5rcykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tuYW1lXSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ua2VlcExhc3RGcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV0gPSB0aGlzLl9vdXRwdXRUZXh0dXJlc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbXBvc2l0b3JOb2RlO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgR3JhcGhOb2RlIGZyb20gJy4vQ29tcG9zaXRvck5vZGUnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNvbXBvc2l0b3IuR3JhcGhcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBHcmFwaCA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5HcmFwaCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48Y2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlPn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBub2RlczogW11cclxuICAgIH07XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkdyYXBoLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIHRvIHVwZGF0ZVxyXG4gICAgICovXHJcbiAgICBkaXJ0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7Y2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlfSBub2RlXHJcbiAgICAgKi9cclxuICAgIGFkZE5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm5vZGVzLmluZGV4T2Yobm9kZSkgPj0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm5vZGVzLnB1c2gobm9kZSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZXxzdHJpbmd9IG5vZGVcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlTm9kZTogZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIG5vZGUgPSB0aGlzLmdldE5vZGVCeU5hbWUobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpZHggPSB0aGlzLm5vZGVzLmluZGV4T2Yobm9kZSk7XHJcbiAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZXMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlfVxyXG4gICAgICovXHJcbiAgICBnZXROb2RlQnlOYW1lOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ub2Rlc1tpXS5uYW1lID09PSBuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ub2Rlc1tpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBsaW5rcyBvZiBncmFwaFxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5ub2Rlc1tpXS5jbGVhcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUcmF2ZXJzZSBhbGwgdGhlIG5vZGVzIGFuZCBidWlsZCB0aGUgZ3JhcGhcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLm5vZGVzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFub2RlLmlucHV0cykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yICh2YXIgaW5wdXROYW1lIGluIG5vZGUuaW5wdXRzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGUuaW5wdXRzW2lucHV0TmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChub2RlLnBhc3MgJiYgIW5vZGUucGFzcy5tYXRlcmlhbC5pc1VuaWZvcm1FbmFibGVkKGlucHV0TmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpbiAnICArIG5vZGUubmFtZSArICcuJyArIGlucHV0TmFtZSArICcgbm90IHVzZWQuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgZnJvbVBpbkluZm8gPSBub2RlLmlucHV0c1tpbnB1dE5hbWVdO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBmcm9tUGluID0gdGhpcy5maW5kUGluKGZyb21QaW5JbmZvKTtcclxuICAgICAgICAgICAgICAgIGlmIChmcm9tUGluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5saW5rKGlucHV0TmFtZSwgZnJvbVBpbi5ub2RlLCBmcm9tUGluLnBpbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZyb21QaW5JbmZvID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ05vZGUgJyArIGZyb21QaW5JbmZvICsgJyBub3QgZXhpc3QnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUGluIG9mICcgKyBmcm9tUGluSW5mby5ub2RlICsgJy4nICsgZnJvbVBpbkluZm8ucGluICsgJyBub3QgZXhpc3QnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGZpbmRQaW46IGZ1bmN0aW9uIChpbnB1dCkge1xyXG4gICAgICAgIHZhciBub2RlO1xyXG4gICAgICAgIC8vIFRyeSB0byB0YWtlIGlucHV0IGFzIGEgZGlyZWN0bHkgYSBub2RlXHJcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgfHwgaW5wdXQgaW5zdGFuY2VvZiBHcmFwaE5vZGUpIHtcclxuICAgICAgICAgICAgaW5wdXQgPSB7XHJcbiAgICAgICAgICAgICAgICBub2RlOiBpbnB1dFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dC5ub2RlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB0bXAgPSB0aGlzLm5vZGVzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRtcC5uYW1lID09PSBpbnB1dC5ub2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHRtcDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbm9kZSA9IGlucHV0Lm5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlKSB7XHJcbiAgICAgICAgICAgIHZhciBpbnB1dFBpbiA9IGlucHV0LnBpbjtcclxuICAgICAgICAgICAgaWYgKCFpbnB1dFBpbikge1xyXG4gICAgICAgICAgICAgICAgLy8gVXNlIGZpcnN0IHBpbiBkZWZhdWx0bHlcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFBpbiA9IE9iamVjdC5rZXlzKG5vZGUub3V0cHV0cylbMF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5vZGUub3V0cHV0c1tpbnB1dFBpbl0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBwaW46IGlucHV0UGluXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdyYXBoO1xyXG4iLCJpbXBvcnQgR3JhcGggZnJvbSAnLi9HcmFwaCc7XHJcbmltcG9ydCBUZXh0dXJlUG9vbCBmcm9tICcuL1RleHR1cmVQb29sJztcclxuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcclxuXHJcbi8qKlxyXG4gKiBDb21wb3NpdG9yIHByb3ZpZGUgZ3JhcGggYmFzZWQgcG9zdCBwcm9jZXNzaW5nXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvbXBvc2l0b3IuR3JhcGhcclxuICpcclxuICovXHJcbnZhciBDb21wb3NpdG9yID0gR3JhcGguZXh0ZW5kKGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAvLyBPdXRwdXQgbm9kZVxyXG4gICAgICAgIF9vdXRwdXRzOiBbXSxcclxuXHJcbiAgICAgICAgX3RleHR1cmVQb29sOiBuZXcgVGV4dHVyZVBvb2woKSxcclxuXHJcbiAgICAgICAgX2ZyYW1lQnVmZmVyOiBuZXcgRnJhbWVCdWZmZXIoe1xyXG4gICAgICAgICAgICBkZXB0aEJ1ZmZlcjogZmFsc2VcclxuICAgICAgICB9KVxyXG4gICAgfTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvci5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgYWRkTm9kZTogZnVuY3Rpb24obm9kZSkge1xyXG4gICAgICAgIEdyYXBoLnByb3RvdHlwZS5hZGROb2RlLmNhbGwodGhpcywgbm9kZSk7XHJcbiAgICAgICAgbm9kZS5fY29tcG9zaXRvciA9IHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgIGlmICh0aGlzLl9kaXJ0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0cy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5ub2Rlc1tpXS5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0cy5wdXNoKHRoaXMubm9kZXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSByZWZlcmVuY2UgbnVtYmVyIG9mIGVhY2ggb3V0cHV0IHRleHR1cmVcclxuICAgICAgICAgICAgdGhpcy5ub2Rlc1tpXS5iZWZvcmVGcmFtZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vdXRwdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHNbaV0udXBkYXRlUmVmZXJlbmNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX291dHB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0c1tpXS5yZW5kZXIocmVuZGVyZXIsIGZyYW1lQnVmZmVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAvLyBDbGVhciB1cFxyXG4gICAgICAgICAgICB0aGlzLm5vZGVzW2ldLmFmdGVyRnJhbWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFsbG9jYXRlVGV4dHVyZTogZnVuY3Rpb24gKHBhcmFtZXRlcnMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGV4dHVyZVBvb2wuZ2V0KHBhcmFtZXRlcnMpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZWxlYXNlVGV4dHVyZTogZnVuY3Rpb24gKHBhcmFtZXRlcnMpIHtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlUG9vbC5wdXQocGFyYW1ldGVycyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEZyYW1lQnVmZmVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lQnVmZmVyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgY29tcG9zaXRvclxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlUG9vbC5jbGVhcihyZW5kZXJlcik7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ29tcG9zaXRvcjtcclxuIiwiaW1wb3J0IENvbXBvc2l0b3JOb2RlIGZyb20gJy4vQ29tcG9zaXRvck5vZGUnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4uL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLlNjZW5lTm9kZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvck5vZGVcclxuICovXHJcbnZhciBTY2VuZU5vZGUgPSBDb21wb3NpdG9yTm9kZS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLlNjZW5lTm9kZSMgKi9cclxue1xyXG4gICAgbmFtZTogJ3NjZW5lJyxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuU2NlbmV9XHJcbiAgICAgKi9cclxuICAgIHNjZW5lOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5DYW1lcmF9XHJcbiAgICAgKi9cclxuICAgIGNhbWVyYTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGF1dG9VcGRhdGVTY2VuZTogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIHByZVo6IGZhbHNlXHJcblxyXG59LCBmdW5jdGlvbigpIHtcclxuICAgIHRoaXMuZnJhbWVCdWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcclxufSwge1xyXG4gICAgcmVuZGVyOiBmdW5jdGlvbihyZW5kZXJlcikge1xyXG5cclxuICAgICAgICB0aGlzLl9yZW5kZXJpbmcgPSB0cnVlO1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXInKTtcclxuXHJcbiAgICAgICAgdmFyIHJlbmRlckluZm87XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5vdXRwdXRzKSB7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJJbmZvID0gcmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsIHRoaXMuY2FtZXJhLCAhdGhpcy5hdXRvVXBkYXRlU2NlbmUsIHRoaXMucHJlWik7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBmcmFtZUJ1ZmZlciA9IHRoaXMuZnJhbWVCdWZmZXI7XHJcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHRoaXMudXBkYXRlUGFyYW1ldGVyKG5hbWUsIHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9jb21wb3NpdG9yLmFsbG9jYXRlVGV4dHVyZShwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdID0gdGV4dHVyZTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0YWNobWVudCA9IG91dHB1dEluZm8uYXR0YWNobWVudCB8fCBfZ2wuQ09MT1JfQVRUQUNITUVOVDA7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKGF0dGFjaG1lbnQpID09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9IF9nbFthdHRhY2htZW50XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaCh0ZXh0dXJlLCBhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIC8vIE1SVCBTdXBwb3J0IGluIGNocm9tZVxyXG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9zZGsvdGVzdHMvY29uZm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZHJhdy1idWZmZXJzLmh0bWxcclxuICAgICAgICAgICAgdmFyIGV4dCA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfZHJhd19idWZmZXJzJyk7XHJcbiAgICAgICAgICAgIGlmIChleHQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBidWZzID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMub3V0cHV0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQgPSBwYXJzZUludChhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBfZ2wuQ09MT1JfQVRUQUNITUVOVDAgJiYgYXR0YWNobWVudCA8PSBfZ2wuQ09MT1JfQVRUQUNITUVOVDAgKyA4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZnMucHVzaChhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBleHQuZHJhd0J1ZmZlcnNFWFQoYnVmcyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEFsd2F5cyBjbGVhclxyXG4gICAgICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNhdmVDbGVhcigpO1xyXG4gICAgICAgICAgICByZW5kZXJlci5jbGVhckJpdCA9IGdsZW51bS5ERVBUSF9CVUZGRVJfQklUIHwgZ2xlbnVtLkNPTE9SX0JVRkZFUl9CSVQ7XHJcbiAgICAgICAgICAgIHJlbmRlckluZm8gPSByZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSwgdGhpcy5jYW1lcmEsICF0aGlzLmF1dG9VcGRhdGVTY2VuZSwgdGhpcy5wcmVaKTtcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVzdG9yZUNsZWFyKCk7XHJcblxyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdhZnRlcnJlbmRlcicsIHJlbmRlckluZm8pO1xyXG5cclxuICAgICAgICB0aGlzLl9yZW5kZXJpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9yZW5kZXJlZCA9IHRydWU7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2NlbmVOb2RlO1xyXG4iLCJpbXBvcnQgQ29tcG9zaXRvck5vZGUgZnJvbSAnLi9Db21wb3NpdG9yTm9kZSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5UZXh0dXJlTm9kZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvck5vZGVcclxuICovXHJcbnZhciBUZXh0dXJlTm9kZSA9IENvbXBvc2l0b3JOb2RlLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5UZXh0dXJlTm9kZSMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0ZXh0dXJlOiBudWxsLFxyXG5cclxuICAgICAgICAvLyBUZXh0dXJlIG5vZGUgbXVzdCBoYXZlIG91dHB1dCB3aXRob3V0IHBhcmFtZXRlcnNcclxuICAgICAgICBvdXRwdXRzOiB7XHJcbiAgICAgICAgICAgIGNvbG9yOiB7fVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxufSwge1xyXG5cclxuICAgIGdldE91dHB1dDogZnVuY3Rpb24gKHJlbmRlcmVyLCBuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gRG8gbm90aGluZ1xyXG4gICAgYmVmb3JlRnJhbWU6IGZ1bmN0aW9uICgpIHt9LFxyXG4gICAgYWZ0ZXJGcmFtZTogZnVuY3Rpb24gKCkge31cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUZXh0dXJlTm9kZTtcclxuIiwiLy8gVE9ETyBTaGFkZXIgbGlicmFyeVxyXG5pbXBvcnQgUGFzcyBmcm9tICcuL1Bhc3MnO1xyXG5pbXBvcnQgQ29tcG9zaXRvck5vZGUgZnJvbSAnLi9Db21wb3NpdG9yTm9kZSc7XHJcblxyXG4vLyBUT0RPIGN1cmxub2lzZSBkZW1vIHdyb25nXHJcblxyXG4vLyBQRU5ESU5HXHJcbi8vIFVzZSB0b3BvbG9naWNhbCBzb3J0ID9cclxuXHJcbi8qKlxyXG4gKiBGaWx0ZXIgbm9kZVxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLkZpbHRlck5vZGVcclxuICogQGV4dGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAgICB2YXIgbm9kZSA9IG5ldyBjbGF5LmNvbXBvc2l0b3IuRmlsdGVyTm9kZSh7XHJcbiAgICAgICAgbmFtZTogJ2Z4YWEnLFxyXG4gICAgICAgIHNoYWRlcjogY2xheS5TaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IuZnhhYScpLFxyXG4gICAgICAgIGlucHV0czoge1xyXG4gICAgICAgICAgICB0ZXh0dXJlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogJ3NjZW5lJyxcclxuICAgICAgICAgICAgICAgICAgICBwaW46ICdjb2xvcidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gTXVsdGlwbGUgb3V0cHV0cyBpcyBwcmVzZXJ2ZWQgZm9yIE1SVCBzdXBwb3J0IGluIFdlYkdMMi4wXHJcbiAgICAgICAgb3V0cHV0czoge1xyXG4gICAgICAgICAgICBjb2xvcjoge1xyXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudDogY2xheS5GcmFtZUJ1ZmZlci5DT0xPUl9BVFRBQ0hNRU5UMFxyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogY2xheS5UZXh0dXJlLlJHQkEsXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDUxMixcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDUxMlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8vIE5vZGUgd2lsbCBrZWVwIHRoZSBSVFQgcmVuZGVyZWQgaW4gbGFzdCBmcmFtZVxyXG4gICAgICAgICAgICAgICAga2VlcExhc3RGcmFtZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBub2RlIG91dHB1dCB0aGUgUlRUIHJlbmRlcmVkIGluIGxhc3QgZnJhbWVcclxuICAgICAgICAgICAgICAgIG91dHB1dExhc3RGcmFtZTogdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAqXHJcbiAgICAqL1xyXG52YXIgRmlsdGVyTm9kZSA9IENvbXBvc2l0b3JOb2RlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuRmlsdGVyTm9kZSMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbmFtZTogJycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5wdXRzOiB7fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvdXRwdXRzOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNoYWRlcjogJycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElucHV0IGxpbmtzLCB3aWxsIGJlIHVwZGF0ZWQgYnkgdGhlIGdyYXBoXHJcbiAgICAgICAgICogQGV4YW1wbGU6XHJcbiAgICAgICAgICogICAgIGlucHV0TmFtZToge1xyXG4gICAgICAgICAqICAgICAgICAgbm9kZTogc29tZU5vZGUsXHJcbiAgICAgICAgICogICAgICAgICBwaW46ICd4eHh4J1xyXG4gICAgICAgICAqICAgICB9XHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBpbnB1dExpbmtzOiB7fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogT3V0cHV0IGxpbmtzLCB3aWxsIGJlIHVwZGF0ZWQgYnkgdGhlIGdyYXBoXHJcbiAgICAgICAgICogQGV4YW1wbGU6XHJcbiAgICAgICAgICogICAgIG91dHB1dE5hbWU6IHtcclxuICAgICAgICAgKiAgICAgICAgIG5vZGU6IHNvbWVOb2RlLFxyXG4gICAgICAgICAqICAgICAgICAgcGluOiAneHh4eCdcclxuICAgICAgICAgKiAgICAgfVxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb3V0cHV0TGlua3M6IHt9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5jb21wb3NpdG9yLlBhc3N9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcGFzczogbnVsbCxcclxuXHJcbiAgICAgICAgLy8gU2F2ZSB0aGUgb3V0cHV0IHRleHR1cmUgb2YgcHJldmlvdXMgZnJhbWVcclxuICAgICAgICAvLyBXaWxsIGJlIHVzZWQgd2hlbiB0aGVyZSBleGlzdCBhIGNpcmN1bGFyIHJlZmVyZW5jZVxyXG4gICAgICAgIF9wcmV2T3V0cHV0VGV4dHVyZXM6IHt9LFxyXG4gICAgICAgIF9vdXRwdXRUZXh0dXJlczoge30sXHJcblxyXG4gICAgICAgIC8vIEV4YW1wbGU6IHsgbmFtZTogMiB9XHJcbiAgICAgICAgX291dHB1dFJlZmVyZW5jZXM6IHt9LFxyXG5cclxuICAgICAgICBfcmVuZGVyaW5nOiBmYWxzZSxcclxuICAgICAgICAvLyBJZiByZW5kZXJlZCBpbiB0aGlzIGZyYW1lXHJcbiAgICAgICAgX3JlbmRlcmVkOiBmYWxzZSxcclxuXHJcbiAgICAgICAgX2NvbXBvc2l0b3I6IG51bGxcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgcGFzcyA9IG5ldyBQYXNzKHtcclxuICAgICAgICBmcmFnbWVudDogdGhpcy5zaGFkZXJcclxuICAgIH0pO1xyXG4gICAgdGhpcy5wYXNzID0gcGFzcztcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuRmlsdGVyTm9kZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZXJlbmRlcicsIHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpbnB1dE5hbWUgaW4gdGhpcy5pbnB1dExpbmtzKSB7XHJcbiAgICAgICAgICAgIHZhciBsaW5rID0gdGhpcy5pbnB1dExpbmtzW2lucHV0TmFtZV07XHJcbiAgICAgICAgICAgIHZhciBpbnB1dFRleHR1cmUgPSBsaW5rLm5vZGUuZ2V0T3V0cHV0KHJlbmRlcmVyLCBsaW5rLnBpbik7XHJcbiAgICAgICAgICAgIHRoaXMucGFzcy5zZXRVbmlmb3JtKGlucHV0TmFtZSwgaW5wdXRUZXh0dXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gT3V0cHV0XHJcbiAgICAgICAgaWYgKCF0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXNzLm91dHB1dHMgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5nZXRGcmFtZUJ1ZmZlcigpLnVuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBhc3MucmVuZGVyKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBhc3Mub3V0cHV0cyA9IHt9O1xyXG5cclxuICAgICAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXMgPSB7fTtcclxuICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJhbWV0ZXJzID0gdGhpcy51cGRhdGVQYXJhbWV0ZXIobmFtZSwgcmVuZGVyZXIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKHBhcmFtZXRlcnMud2lkdGgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQYXJhbWV0ZXIobmFtZSwgcmVuZGVyZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIG91dHB1dEluZm8gPSB0aGlzLm91dHB1dHNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX2NvbXBvc2l0b3IuYWxsb2NhdGVUZXh0dXJlKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV0gPSB0ZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dGFjaG1lbnQgPSBvdXRwdXRJbmZvLmF0dGFjaG1lbnQgfHwgX2dsLkNPTE9SX0FUVEFDSE1FTlQwO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihhdHRhY2htZW50KSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50ID0gX2dsW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSA9IHRleHR1cmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5nZXRGcmFtZUJ1ZmZlcigpLmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiBhdHRhY2hlZFRleHR1cmVzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBGSVhNRSBhdHRhY2htZW50IGNoYW5nZXMgaW4gZGlmZmVyZW50IG5vZGVzXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb21wb3NpdG9yLmdldEZyYW1lQnVmZmVyKCkuYXR0YWNoKFxyXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0sIGF0dGFjaG1lbnRcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucGFzcy5yZW5kZXIocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgZGF0YSBvZiB0ZXh0dXJlIGlzIGNoYW5nZWQgb3ZlciB0aW1lLFxyXG4gICAgICAgICAgICAvLyBIZXJlIHVwZGF0ZSB0aGUgbWlwbWFwcyBvZiB0ZXh0dXJlIGVhY2ggdGltZSBhZnRlciByZW5kZXJlZDtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5nZXRGcmFtZUJ1ZmZlcigpLnVwZGF0ZU1pcG1hcChyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpbnB1dE5hbWUgaW4gdGhpcy5pbnB1dExpbmtzKSB7XHJcbiAgICAgICAgICAgIHZhciBsaW5rID0gdGhpcy5pbnB1dExpbmtzW2lucHV0TmFtZV07XHJcbiAgICAgICAgICAgIGxpbmsubm9kZS5yZW1vdmVSZWZlcmVuY2UobGluay5waW4pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2FmdGVycmVuZGVyJywgcmVuZGVyZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBUT0RPIFJlbW92ZSBwYXJhbWV0ZXIgZnVuY3Rpb24gY2FsbGJhY2tcclxuICAgIHVwZGF0ZVBhcmFtZXRlcjogZnVuY3Rpb24gKG91dHB1dE5hbWUsIHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIG91dHB1dEluZm8gPSB0aGlzLm91dHB1dHNbb3V0cHV0TmFtZV07XHJcbiAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSBvdXRwdXRJbmZvLnBhcmFtZXRlcnM7XHJcbiAgICAgICAgdmFyIHBhcmFtZXRlcnNDb3B5ID0gb3V0cHV0SW5mby5fcGFyYW1ldGVyc0NvcHk7XHJcbiAgICAgICAgaWYgKCFwYXJhbWV0ZXJzQ29weSkge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJzQ29weSA9IG91dHB1dEluZm8uX3BhcmFtZXRlcnNDb3B5ID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9PSAnd2lkdGgnICYmIGtleSAhPT0gJ2hlaWdodCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzQ29weVtrZXldID0gcGFyYW1ldGVyc1trZXldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB3aWR0aCwgaGVpZ2h0O1xyXG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVycy53aWR0aCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHBhcmFtZXRlcnMud2lkdGguY2FsbCh0aGlzLCByZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHBhcmFtZXRlcnMud2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVycy5oZWlnaHQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gcGFyYW1ldGVycy5oZWlnaHQuY2FsbCh0aGlzLCByZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBwYXJhbWV0ZXJzLmhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2lkdGggPSBNYXRoLmNlaWwod2lkdGgpO1xyXG4gICAgICAgIGhlaWdodCA9IE1hdGguY2VpbChoZWlnaHQpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHkud2lkdGggIT09IHdpZHRoXHJcbiAgICAgICAgICAgIHx8IHBhcmFtZXRlcnNDb3B5LmhlaWdodCAhPT0gaGVpZ2h0XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0uZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcGFyYW1ldGVyc0NvcHkud2lkdGggPSB3aWR0aDtcclxuICAgICAgICBwYXJhbWV0ZXJzQ29weS5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJhbWV0ZXJzQ29weTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcGFyYW1ldGVyXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHBhcmFtIHt9IHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHNldFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5wYXNzLnNldFVuaWZvcm0obmFtZSwgdmFsdWUpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogR2V0IHBhcmFtZXRlciB2YWx1ZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHt9XHJcbiAgICAgKi9cclxuICAgIGdldFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXNzLmdldFVuaWZvcm0obmFtZSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcGFyYW1ldGVyc1xyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9ialxyXG4gICAgICovXHJcbiAgICBzZXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBvYmopIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXIobmFtZSwgb2JqW25hbWVdKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLy8gLyoqXHJcbiAgICAvLyAgKiBTZXQgc2hhZGVyIGNvZGVcclxuICAgIC8vICAqIEBwYXJhbSB7c3RyaW5nfSBzaGFkZXJTdHJcclxuICAgIC8vICAqL1xyXG4gICAgLy8gc2V0U2hhZGVyOiBmdW5jdGlvbiAoc2hhZGVyU3RyKSB7XHJcbiAgICAvLyAgICAgdmFyIG1hdGVyaWFsID0gdGhpcy5wYXNzLm1hdGVyaWFsO1xyXG4gICAgLy8gICAgIG1hdGVyaWFsLnNoYWRlci5zZXRGcmFnbWVudChzaGFkZXJTdHIpO1xyXG4gICAgLy8gICAgIG1hdGVyaWFsLmF0dGFjaFNoYWRlcihtYXRlcmlhbC5zaGFkZXIsIHRydWUpO1xyXG4gICAgLy8gfSxcclxuICAgIC8qKlxyXG4gICAgICogUHJveHkgb2YgcGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgeHh4KTtcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFt2YWxdXHJcbiAgICAgKi9cclxuICAgIGRlZmluZTogZnVuY3Rpb24gKHN5bWJvbCwgdmFsKSB7XHJcbiAgICAgICAgdGhpcy5wYXNzLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCBzeW1ib2wsIHZhbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJveHkgb2YgcGFzcy5tYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCB4eHgpXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICovXHJcbiAgICB1bmRlZmluZTogZnVuY3Rpb24gKHN5bWJvbCkge1xyXG4gICAgICAgIHRoaXMucGFzcy5tYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCBzeW1ib2wpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW1vdmVSZWZlcmVuY2U6IGZ1bmN0aW9uIChvdXRwdXROYW1lKSB7XHJcbiAgICAgICAgdGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXS0tO1xyXG4gICAgICAgIGlmICh0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW291dHB1dE5hbWVdID09PSAwKSB7XHJcbiAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW291dHB1dE5hbWVdO1xyXG4gICAgICAgICAgICBpZiAob3V0cHV0SW5mby5rZWVwTGFzdEZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdID0gdGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBPdXRwdXQgb2YgdGhpcyBub2RlIGhhdmUgYWxyZWF5IGJlZW4gdXNlZCBieSBhbGwgb3RoZXIgbm9kZXNcclxuICAgICAgICAgICAgICAgIC8vIFB1dCB0aGUgdGV4dHVyZSBiYWNrIHRvIHRoZSBwb29sLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5yZWxlYXNlVGV4dHVyZSh0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgQ29tcG9zaXRvck5vZGUucHJvdG90eXBlLmNsZWFyLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgIC8vIERlZmF1bHQgZGlzYWJsZSBhbGwgdGV4dHVyZVxyXG4gICAgICAgIHRoaXMucGFzcy5tYXRlcmlhbC5kaXNhYmxlVGV4dHVyZXNBbGwoKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGaWx0ZXJOb2RlO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmNvbG9yYWRqdXN0XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGJyaWdodG5lc3MgOiAwLjA7XFxudW5pZm9ybSBmbG9hdCBjb250cmFzdCA6IDEuMDtcXG51bmlmb3JtIGZsb2F0IGV4cG9zdXJlIDogMC4wO1xcbnVuaWZvcm0gZmxvYXQgZ2FtbWEgOiAxLjA7XFxudW5pZm9ybSBmbG9hdCBzYXR1cmF0aW9uIDogMS4wO1xcbmNvbnN0IHZlYzMgdyA9IHZlYzMoMC4yMTI1LCAwLjcxNTQsIDAuMDcyMSk7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9IGNsYW1wKHRleC5yZ2IgKyB2ZWMzKGJyaWdodG5lc3MpLCAwLjAsIDEuMCk7XFxuIGNvbG9yID0gY2xhbXAoIChjb2xvci12ZWMzKDAuNSkpKmNvbnRyYXN0K3ZlYzMoMC41KSwgMC4wLCAxLjApO1xcbiBjb2xvciA9IGNsYW1wKCBjb2xvciAqIHBvdygyLjAsIGV4cG9zdXJlKSwgMC4wLCAxLjApO1xcbiBjb2xvciA9IGNsYW1wKCBwb3coY29sb3IsIHZlYzMoZ2FtbWEpKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBsdW1pbmFuY2UgPSBkb3QoIGNvbG9yLCB3ICk7XFxuIGNvbG9yID0gbWl4KHZlYzMobHVtaW5hbmNlKSwgY29sb3IsIHNhdHVyYXRpb24pO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5icmlnaHRuZXNzXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGJyaWdodG5lc3MgOiAwLjA7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9IHRleC5yZ2IgKyB2ZWMzKGJyaWdodG5lc3MpO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5jb250cmFzdFxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBjb250cmFzdCA6IDEuMDtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQoIHRleHR1cmUsIHZfVGV4Y29vcmQpO1xcbiB2ZWMzIGNvbG9yID0gKHRleC5yZ2ItdmVjMygwLjUpKSpjb250cmFzdCt2ZWMzKDAuNSk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIHRleC5hKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmV4cG9zdXJlXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGV4cG9zdXJlIDogMC4wO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9IHRleC5yZ2IgKiBwb3coMi4wLCBleHBvc3VyZSk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIHRleC5hKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmdhbW1hXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGdhbW1hIDogMS4wO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9IHBvdyh0ZXgucmdiLCB2ZWMzKGdhbW1hKSk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIHRleC5hKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLnNhdHVyYXRpb25cXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gZmxvYXQgc2F0dXJhdGlvbiA6IDEuMDtcXG5jb25zdCB2ZWMzIHcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9IHRleC5yZ2I7XFxuIGZsb2F0IGx1bWluYW5jZSA9IGRvdChjb2xvciwgdyk7XFxuIGNvbG9yID0gbWl4KHZlYzMobHVtaW5hbmNlKSwgY29sb3IsIHNhdHVyYXRpb24pO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5rZXJuZWwuZ2F1c3NpYW5fOVxcbmZsb2F0IGdhdXNzaWFuS2VybmVsWzldO1xcbmdhdXNzaWFuS2VybmVsWzBdID0gMC4wNztcXG5nYXVzc2lhbktlcm5lbFsxXSA9IDAuMDk7XFxuZ2F1c3NpYW5LZXJuZWxbMl0gPSAwLjEyO1xcbmdhdXNzaWFuS2VybmVsWzNdID0gMC4xNDtcXG5nYXVzc2lhbktlcm5lbFs0XSA9IDAuMTY7XFxuZ2F1c3NpYW5LZXJuZWxbNV0gPSAwLjE0O1xcbmdhdXNzaWFuS2VybmVsWzZdID0gMC4xMjtcXG5nYXVzc2lhbktlcm5lbFs3XSA9IDAuMDk7XFxuZ2F1c3NpYW5LZXJuZWxbOF0gPSAwLjA3O1xcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5rZXJuZWwuZ2F1c3NpYW5fMTNcXG5mbG9hdCBnYXVzc2lhbktlcm5lbFsxM107XFxuZ2F1c3NpYW5LZXJuZWxbMF0gPSAwLjAyO1xcbmdhdXNzaWFuS2VybmVsWzFdID0gMC4wMztcXG5nYXVzc2lhbktlcm5lbFsyXSA9IDAuMDY7XFxuZ2F1c3NpYW5LZXJuZWxbM10gPSAwLjA4O1xcbmdhdXNzaWFuS2VybmVsWzRdID0gMC4xMTtcXG5nYXVzc2lhbktlcm5lbFs1XSA9IDAuMTM7XFxuZ2F1c3NpYW5LZXJuZWxbNl0gPSAwLjE0O1xcbmdhdXNzaWFuS2VybmVsWzddID0gMC4xMztcXG5nYXVzc2lhbktlcm5lbFs4XSA9IDAuMTE7XFxuZ2F1c3NpYW5LZXJuZWxbOV0gPSAwLjA4O1xcbmdhdXNzaWFuS2VybmVsWzEwXSA9IDAuMDY7XFxuZ2F1c3NpYW5LZXJuZWxbMTFdID0gMC4wMztcXG5nYXVzc2lhbktlcm5lbFsxMl0gPSAwLjAyO1xcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5nYXVzc2lhbl9ibHVyXFxuI2RlZmluZSBTSEFERVJfTkFNRSBnYXVzc2lhbl9ibHVyXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTt2YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIGZsb2F0IGJsdXJTaXplIDogMi4wO1xcbnVuaWZvcm0gdmVjMiB0ZXh0dXJlU2l6ZSA6IFs1MTIuMCwgNTEyLjBdO1xcbnVuaWZvcm0gZmxvYXQgYmx1ckRpciA6IDAuMDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwuY2xhbXBfc2FtcGxlXFxudm9pZCBtYWluICh2b2lkKVxcbntcXG4gQGltcG9ydCBjbGF5LmNvbXBvc2l0b3Iua2VybmVsLmdhdXNzaWFuXzlcXG4gdmVjMiBvZmYgPSBibHVyU2l6ZSAvIHRleHR1cmVTaXplO1xcbiBvZmYgKj0gdmVjMigxLjAgLSBibHVyRGlyLCBibHVyRGlyKTtcXG4gdmVjNCBzdW0gPSB2ZWM0KDAuMCk7XFxuIGZsb2F0IHdlaWdodEFsbCA9IDAuMDtcXG4gZm9yIChpbnQgaSA9IDA7IGkgPCA5OyBpKyspIHtcXG4gZmxvYXQgdyA9IGdhdXNzaWFuS2VybmVsW2ldO1xcbiB2ZWM0IHRleGVsID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBmbG9hdChpIC0gNCkgKiBvZmYpKTtcXG4gc3VtICs9IHRleGVsICogdztcXG4gd2VpZ2h0QWxsICs9IHc7XFxuIH1cXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHN1bSAvIG1heCh3ZWlnaHRBbGwsIDAuMDEpKTtcXG59XFxuQGVuZFxcblwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmhkci5sb2dfbHVtXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG5jb25zdCB2ZWMzIHcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQpKTtcXG4gZmxvYXQgbHVtaW5hbmNlID0gZG90KHRleC5yZ2IsIHcpO1xcbiBsdW1pbmFuY2UgPSBsb2cobHVtaW5hbmNlICsgMC4wMDEpO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNCh2ZWMzKGx1bWluYW5jZSksIDEuMCkpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuaGRyLmx1bV9hZGFwdGlvblxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGFkYXB0ZWRMdW07XFxudW5pZm9ybSBzYW1wbGVyMkQgY3VycmVudEx1bTtcXG51bmlmb3JtIGZsb2F0IGZyYW1lVGltZSA6IDAuMDI7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiBmbG9hdCBmQWRhcHRlZEx1bSA9IGRlY29kZUhEUih0ZXh0dXJlMkQoYWRhcHRlZEx1bSwgdmVjMigwLjUsIDAuNSkpKS5yO1xcbiBmbG9hdCBmQ3VycmVudEx1bSA9IGV4cChlbmNvZGVIRFIodGV4dHVyZTJEKGN1cnJlbnRMdW0sIHZlYzIoMC41LCAwLjUpKSkucik7XFxuIGZBZGFwdGVkTHVtICs9IChmQ3VycmVudEx1bSAtIGZBZGFwdGVkTHVtKSAqICgxLjAgLSBwb3coMC45OCwgMzAuMCAqIGZyYW1lVGltZSkpO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNCh2ZWMzKGZBZGFwdGVkTHVtKSwgMS4wKSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5sdW1cXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbmNvbnN0IHZlYzMgdyA9IHZlYzMoMC4yMTI1LCAwLjcxNTQsIDAuMDcyMSk7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkICk7XFxuIGZsb2F0IGx1bWluYW5jZSA9IGRvdCh0ZXgucmdiLCB3KTtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGx1bWluYW5jZSksIDEuMCk7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5sdXRcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGxvb2t1cDtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIGZsb2F0IGJsdWVDb2xvciA9IHRleC5iICogNjMuMDtcXG4gdmVjMiBxdWFkMTtcXG4gcXVhZDEueSA9IGZsb29yKGZsb29yKGJsdWVDb2xvcikgLyA4LjApO1xcbiBxdWFkMS54ID0gZmxvb3IoYmx1ZUNvbG9yKSAtIChxdWFkMS55ICogOC4wKTtcXG4gdmVjMiBxdWFkMjtcXG4gcXVhZDIueSA9IGZsb29yKGNlaWwoYmx1ZUNvbG9yKSAvIDguMCk7XFxuIHF1YWQyLnggPSBjZWlsKGJsdWVDb2xvcikgLSAocXVhZDIueSAqIDguMCk7XFxuIHZlYzIgdGV4UG9zMTtcXG4gdGV4UG9zMS54ID0gKHF1YWQxLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIHRleC5yKTtcXG4gdGV4UG9zMS55ID0gKHF1YWQxLnkgKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIHRleC5nKTtcXG4gdmVjMiB0ZXhQb3MyO1xcbiB0ZXhQb3MyLnggPSAocXVhZDIueCAqIDAuMTI1KSArIDAuNS81MTIuMCArICgoMC4xMjUgLSAxLjAvNTEyLjApICogdGV4LnIpO1xcbiB0ZXhQb3MyLnkgPSAocXVhZDIueSAqIDAuMTI1KSArIDAuNS81MTIuMCArICgoMC4xMjUgLSAxLjAvNTEyLjApICogdGV4LmcpO1xcbiB2ZWM0IG5ld0NvbG9yMSA9IHRleHR1cmUyRChsb29rdXAsIHRleFBvczEpO1xcbiB2ZWM0IG5ld0NvbG9yMiA9IHRleHR1cmUyRChsb29rdXAsIHRleFBvczIpO1xcbiB2ZWM0IG5ld0NvbG9yID0gbWl4KG5ld0NvbG9yMSwgbmV3Q29sb3IyLCBmcmFjdChibHVlQ29sb3IpKTtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChuZXdDb2xvci5yZ2IsIHRleC53KTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLnZpZ25ldHRlXFxuI2RlZmluZSBPVVRQVVRfQUxQSEFcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gZmxvYXQgZGFya25lc3M6IDE7XFxudW5pZm9ybSBmbG9hdCBvZmZzZXQ6IDE7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSB0ZXhlbC5yZ2I7XFxuIHZlYzIgdXYgPSAodl9UZXhjb29yZCAtIHZlYzIoMC41KSkgKiB2ZWMyKG9mZnNldCk7XFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUih2ZWM0KG1peCh0ZXhlbC5yZ2IsIHZlYzMoMS4wIC0gZGFya25lc3MpLCBkb3QodXYsIHV2KSksIHRleGVsLmEpKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLm91dHB1dFxcbiNkZWZpbmUgT1VUUFVUX0FMUEhBXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSB0ZXgucmdiO1xcbiNpZmRlZiBPVVRQVVRfQUxQSEFcXG4gZ2xfRnJhZ0NvbG9yLmEgPSB0ZXguYTtcXG4jZWxzZVxcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGdsX0ZyYWdDb2xvcik7XFxuI2lmZGVmIFBSRU1VTFRJUExZX0FMUEhBXFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7XFxuI2VuZGlmXFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5icmlnaHRcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gZmxvYXQgdGhyZXNob2xkIDogMTtcXG51bmlmb3JtIGZsb2F0IHNjYWxlIDogMS4wO1xcbnVuaWZvcm0gdmVjMiB0ZXh0dXJlU2l6ZTogWzUxMiwgNTEyXTtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5jb25zdCB2ZWMzIGx1bVdlaWdodCA9IHZlYzMoMC4yMTI1LCAwLjcxNTQsIDAuMDcyMSk7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZlYzQgbWVkaWFuKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IGMpXFxue1xcbiByZXR1cm4gYSArIGIgKyBjIC0gbWluKG1pbihhLCBiKSwgYykgLSBtYXgobWF4KGEsIGIpLCBjKTtcXG59XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQpKTtcXG4jaWZkZWYgQU5USV9GTElDS0VSXFxuIHZlYzMgZCA9IDEuMCAvIHRleHR1cmVTaXplLnh5eCAqIHZlYzMoMS4wLCAxLjAsIDAuMCk7XFxuIHZlYzQgczEgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQgLSBkLnh6KSk7XFxuIHZlYzQgczIgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh6KSk7XFxuIHZlYzQgczMgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQgLSBkLnp5KSk7XFxuIHZlYzQgczQgPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp5KSk7XFxuIHRleGVsID0gbWVkaWFuKG1lZGlhbih0ZXhlbCwgczEsIHMyKSwgczMsIHM0KTtcXG4jZW5kaWZcXG4gZmxvYXQgbHVtID0gZG90KHRleGVsLnJnYiAsIGx1bVdlaWdodCk7XFxuIHZlYzQgY29sb3I7XFxuIGlmIChsdW0gPiB0aHJlc2hvbGQgJiYgdGV4ZWwuYSA+IDAuMClcXG4ge1xcbiBjb2xvciA9IHZlYzQodGV4ZWwucmdiICogc2NhbGUsIHRleGVsLmEgKiBzY2FsZSk7XFxuIH1cXG4gZWxzZVxcbiB7XFxuIGNvbG9yID0gdmVjNCgwLjApO1xcbiB9XFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihjb2xvcik7XFxufVxcbkBlbmRcXG5cIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5kb3duc2FtcGxlXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemUgOiBbNTEyLCA1MTJdO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5mbG9hdCBicmlnaHRuZXNzKHZlYzMgYylcXG57XFxuIHJldHVybiBtYXgobWF4KGMuciwgYy5nKSwgYy5iKTtcXG59XFxuQGltcG9ydCBjbGF5LnV0aWwuY2xhbXBfc2FtcGxlXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgZCA9IHZlYzQoLTEuMCwgLTEuMCwgMS4wLCAxLjApIC8gdGV4dHVyZVNpemUueHl4eTtcXG4jaWZkZWYgQU5USV9GTElDS0VSXFxuIHZlYzMgczEgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHkpKS5yZ2I7XFxuIHZlYzMgczIgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuenkpKS5yZ2I7XFxuIHZlYzMgczMgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHcpKS5yZ2I7XFxuIHZlYzMgczQgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuencpKS5yZ2I7XFxuIGZsb2F0IHMxdyA9IDEuMCAvIChicmlnaHRuZXNzKHMxKSArIDEuMCk7XFxuIGZsb2F0IHMydyA9IDEuMCAvIChicmlnaHRuZXNzKHMyKSArIDEuMCk7XFxuIGZsb2F0IHMzdyA9IDEuMCAvIChicmlnaHRuZXNzKHMzKSArIDEuMCk7XFxuIGZsb2F0IHM0dyA9IDEuMCAvIChicmlnaHRuZXNzKHM0KSArIDEuMCk7XFxuIGZsb2F0IG9uZURpdmlkZVN1bSA9IDEuMCAvIChzMXcgKyBzMncgKyBzM3cgKyBzNHcpO1xcbiB2ZWM0IGNvbG9yID0gdmVjNChcXG4gKHMxICogczF3ICsgczIgKiBzMncgKyBzMyAqIHMzdyArIHM0ICogczR3KSAqIG9uZURpdmlkZVN1bSxcXG4gMS4wXFxuICk7XFxuI2Vsc2VcXG4gdmVjNCBjb2xvciA9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eSkpO1xcbiBjb2xvciArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuenkpKTtcXG4gY29sb3IgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh3KSk7XFxuIGNvbG9yICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56dykpO1xcbiBjb2xvciAqPSAwLjI1O1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoY29sb3IpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IudXBzYW1wbGVcXG4jZGVmaW5lIEhJR0hfUVVBTElUWVxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMiwgNTEyXTtcXG51bmlmb3JtIGZsb2F0IHNhbXBsZVNjYWxlOiAwLjU7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZvaWQgbWFpbigpXFxue1xcbiNpZmRlZiBISUdIX1FVQUxJVFlcXG4gdmVjNCBkID0gdmVjNCgxLjAsIDEuMCwgLTEuMCwgMC4wKSAvIHRleHR1cmVTaXplLnh5eHkgKiBzYW1wbGVTY2FsZTtcXG4gdmVjNCBzO1xcbiBzID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgLSBkLnh5KSk7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgLSBkLnd5KSkgKiAyLjA7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgLSBkLnp5KSk7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp3KSkgKiAyLjA7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKSkgKiA0LjA7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh3KSkgKiAyLjA7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp5KSk7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnd5KSkgKiAyLjA7XFxuIHMgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh5KSk7XFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihzIC8gMTYuMCk7XFxuI2Vsc2VcXG4gdmVjNCBkID0gdmVjNCgtMS4wLCAtMS4wLCArMS4wLCArMS4wKSAvIHRleHR1cmVTaXplLnh5eHk7XFxuIHZlYzQgcztcXG4gcyA9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eSkpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56eSkpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54dykpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56dykpO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIocyAvIDQuMCk7XFxuI2VuZGlmXFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5oZHIuY29tcG9zaXRlXFxuI2RlZmluZSBUT05FTUFQUElOR1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxuI2lmZGVmIEJMT09NX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBibG9vbTtcXG4jZW5kaWZcXG4jaWZkZWYgTEVOU0ZMQVJFX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBsZW5zZmxhcmU7XFxudW5pZm9ybSBzYW1wbGVyMkQgbGVuc2RpcnQ7XFxuI2VuZGlmXFxuI2lmZGVmIExVTV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbHVtO1xcbiNlbmRpZlxcbiNpZmRlZiBMVVRfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGx1dDtcXG4jZW5kaWZcXG4jaWZkZWYgQ09MT1JfQ09SUkVDVElPTlxcbnVuaWZvcm0gZmxvYXQgYnJpZ2h0bmVzcyA6IDAuMDtcXG51bmlmb3JtIGZsb2F0IGNvbnRyYXN0IDogMS4wO1xcbnVuaWZvcm0gZmxvYXQgc2F0dXJhdGlvbiA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVklHTkVUVEVcXG51bmlmb3JtIGZsb2F0IHZpZ25ldHRlRGFya25lc3M6IDEuMDtcXG51bmlmb3JtIGZsb2F0IHZpZ25ldHRlT2Zmc2V0OiAxLjA7XFxuI2VuZGlmXFxudW5pZm9ybSBmbG9hdCBleHBvc3VyZSA6IDEuMDtcXG51bmlmb3JtIGZsb2F0IGJsb29tSW50ZW5zaXR5IDogMC4yNTtcXG51bmlmb3JtIGZsb2F0IGxlbnNmbGFyZUludGVuc2l0eSA6IDE7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwuc3JnYlxcbnZlYzMgQUNFU1RvbmVNYXBwaW5nKHZlYzMgY29sb3IpXFxue1xcbiBjb25zdCBmbG9hdCBBID0gMi41MTtcXG4gY29uc3QgZmxvYXQgQiA9IDAuMDM7XFxuIGNvbnN0IGZsb2F0IEMgPSAyLjQzO1xcbiBjb25zdCBmbG9hdCBEID0gMC41OTtcXG4gY29uc3QgZmxvYXQgRSA9IDAuMTQ7XFxuIHJldHVybiAoY29sb3IgKiAoQSAqIGNvbG9yICsgQikpIC8gKGNvbG9yICogKEMgKiBjb2xvciArIEQpICsgRSk7XFxufVxcbmZsb2F0IGV5ZUFkYXB0aW9uKGZsb2F0IGZMdW0pXFxue1xcbiByZXR1cm4gbWl4KDAuMiwgZkx1bSwgMC41KTtcXG59XFxuI2lmZGVmIExVVF9FTkFCTEVEXFxudmVjMyBsdXRUcmFuc2Zvcm0odmVjMyBjb2xvcikge1xcbiBmbG9hdCBibHVlQ29sb3IgPSBjb2xvci5iICogNjMuMDtcXG4gdmVjMiBxdWFkMTtcXG4gcXVhZDEueSA9IGZsb29yKGZsb29yKGJsdWVDb2xvcikgLyA4LjApO1xcbiBxdWFkMS54ID0gZmxvb3IoYmx1ZUNvbG9yKSAtIChxdWFkMS55ICogOC4wKTtcXG4gdmVjMiBxdWFkMjtcXG4gcXVhZDIueSA9IGZsb29yKGNlaWwoYmx1ZUNvbG9yKSAvIDguMCk7XFxuIHF1YWQyLnggPSBjZWlsKGJsdWVDb2xvcikgLSAocXVhZDIueSAqIDguMCk7XFxuIHZlYzIgdGV4UG9zMTtcXG4gdGV4UG9zMS54ID0gKHF1YWQxLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIGNvbG9yLnIpO1xcbiB0ZXhQb3MxLnkgPSAocXVhZDEueSAqIDAuMTI1KSArIDAuNS81MTIuMCArICgoMC4xMjUgLSAxLjAvNTEyLjApICogY29sb3IuZyk7XFxuIHZlYzIgdGV4UG9zMjtcXG4gdGV4UG9zMi54ID0gKHF1YWQyLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIGNvbG9yLnIpO1xcbiB0ZXhQb3MyLnkgPSAocXVhZDIueSAqIDAuMTI1KSArIDAuNS81MTIuMCArICgoMC4xMjUgLSAxLjAvNTEyLjApICogY29sb3IuZyk7XFxuIHZlYzQgbmV3Q29sb3IxID0gdGV4dHVyZTJEKGx1dCwgdGV4UG9zMSk7XFxuIHZlYzQgbmV3Q29sb3IyID0gdGV4dHVyZTJEKGx1dCwgdGV4UG9zMik7XFxuIHZlYzQgbmV3Q29sb3IgPSBtaXgobmV3Q29sb3IxLCBuZXdDb2xvcjIsIGZyYWN0KGJsdWVDb2xvcikpO1xcbiByZXR1cm4gbmV3Q29sb3IucmdiO1xcbn1cXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ZWwgPSB2ZWM0KDAuMCk7XFxuIHZlYzQgb3JpZ2luYWxUZXhlbCA9IHZlYzQoMC4wKTtcXG4jaWZkZWYgVEVYVFVSRV9FTkFCTEVEXFxuIHRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuIG9yaWdpbmFsVGV4ZWwgPSB0ZXhlbDtcXG4jZW5kaWZcXG4jaWZkZWYgQkxPT01fRU5BQkxFRFxcbiB2ZWM0IGJsb29tVGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZTJEKGJsb29tLCB2X1RleGNvb3JkKSk7XFxuIHRleGVsLnJnYiArPSBibG9vbVRleGVsLnJnYiAqIGJsb29tSW50ZW5zaXR5O1xcbiB0ZXhlbC5hICs9IGJsb29tVGV4ZWwuYSAqIGJsb29tSW50ZW5zaXR5O1xcbiNlbmRpZlxcbiNpZmRlZiBMRU5TRkxBUkVfRU5BQkxFRFxcbiB0ZXhlbCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKGxlbnNmbGFyZSwgdl9UZXhjb29yZCkpICogdGV4dHVyZTJEKGxlbnNkaXJ0LCB2X1RleGNvb3JkKSAqIGxlbnNmbGFyZUludGVuc2l0eTtcXG4jZW5kaWZcXG4gdGV4ZWwuYSA9IG1pbih0ZXhlbC5hLCAxLjApO1xcbiNpZmRlZiBMVU1fRU5BQkxFRFxcbiBmbG9hdCBmTHVtID0gdGV4dHVyZTJEKGx1bSwgdmVjMigwLjUsIDAuNSkpLnI7XFxuIGZsb2F0IGFkYXB0ZWRMdW1EZXN0ID0gMy4wIC8gKG1heCgwLjEsIDEuMCArIDEwLjAqZXllQWRhcHRpb24oZkx1bSkpKTtcXG4gZmxvYXQgZXhwb3N1cmVCaWFzID0gYWRhcHRlZEx1bURlc3QgKiBleHBvc3VyZTtcXG4jZWxzZVxcbiBmbG9hdCBleHBvc3VyZUJpYXMgPSBleHBvc3VyZTtcXG4jZW5kaWZcXG4jaWZkZWYgVE9ORU1BUFBJTkdcXG4gdGV4ZWwucmdiICo9IGV4cG9zdXJlQmlhcztcXG4gdGV4ZWwucmdiID0gQUNFU1RvbmVNYXBwaW5nKHRleGVsLnJnYik7XFxuI2VuZGlmXFxuIHRleGVsID0gbGluZWFyVG9zUkdCKHRleGVsKTtcXG4jaWZkZWYgTFVUX0VOQUJMRURcXG4gdGV4ZWwucmdiID0gbHV0VHJhbnNmb3JtKGNsYW1wKHRleGVsLnJnYix2ZWMzKDAuMCksdmVjMygxLjApKSk7XFxuI2VuZGlmXFxuI2lmZGVmIENPTE9SX0NPUlJFQ1RJT05cXG4gdGV4ZWwucmdiID0gY2xhbXAodGV4ZWwucmdiICsgdmVjMyhicmlnaHRuZXNzKSwgMC4wLCAxLjApO1xcbiB0ZXhlbC5yZ2IgPSBjbGFtcCgodGV4ZWwucmdiIC0gdmVjMygwLjUpKSpjb250cmFzdCt2ZWMzKDAuNSksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbHVtID0gZG90KHRleGVsLnJnYiwgdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKSk7XFxuIHRleGVsLnJnYiA9IG1peCh2ZWMzKGx1bSksIHRleGVsLnJnYiwgc2F0dXJhdGlvbik7XFxuI2VuZGlmXFxuI2lmZGVmIFZJR05FVFRFXFxuIHZlYzIgdXYgPSAodl9UZXhjb29yZCAtIHZlYzIoMC41KSkgKiB2ZWMyKHZpZ25ldHRlT2Zmc2V0KTtcXG4gdGV4ZWwucmdiID0gbWl4KHRleGVsLnJnYiwgdmVjMygxLjAgLSB2aWduZXR0ZURhcmtuZXNzKSwgZG90KHV2LCB1dikpO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodGV4ZWwpO1xcbiNpZmRlZiBERUJVR1xcbiAjaWYgREVCVUcgPT0gMVxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSkpO1xcbiAjZWxpZiBERUJVRyA9PSAyXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihkZWNvZGVIRFIodGV4dHVyZTJEKGJsb29tLCB2X1RleGNvb3JkKSkgKiBibG9vbUludGVuc2l0eSk7XFxuICNlbGlmIERFQlVHID09IDNcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGRlY29kZUhEUih0ZXh0dXJlMkQobGVuc2ZsYXJlLCB2X1RleGNvb3JkKSAqIGxlbnNmbGFyZUludGVuc2l0eSkpO1xcbiAjZW5kaWZcXG4jZW5kaWZcXG4gaWYgKG9yaWdpbmFsVGV4ZWwuYSA8PSAwLjAxICYmIGdsX0ZyYWdDb2xvci5hID4gMWUtNSkge1xcbiBnbF9GcmFnQ29sb3IuYSA9IGRvdChnbF9GcmFnQ29sb3IucmdiLCB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpKTtcXG4gfVxcbiNpZmRlZiBQUkVNVUxUSVBMWV9BTFBIQVxcbiBnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hO1xcbiNlbmRpZlxcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IubGVuc2ZsYXJlXFxuI2RlZmluZSBTQU1QTEVfTlVNQkVSIDhcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGxlbnNjb2xvcjtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemUgOiBbNTEyLCA1MTJdO1xcbnVuaWZvcm0gZmxvYXQgZGlzcGVyc2FsIDogMC4zO1xcbnVuaWZvcm0gZmxvYXQgaGFsb1dpZHRoIDogMC40O1xcbnVuaWZvcm0gZmxvYXQgZGlzdG9ydGlvbiA6IDEuMDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudmVjNCB0ZXh0dXJlRGlzdG9ydGVkKFxcbiBpbiB2ZWMyIHRleGNvb3JkLFxcbiBpbiB2ZWMyIGRpcmVjdGlvbixcXG4gaW4gdmVjMyBkaXN0b3J0aW9uXFxuKSB7XFxuIHJldHVybiB2ZWM0KFxcbiBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHRleGNvb3JkICsgZGlyZWN0aW9uICogZGlzdG9ydGlvbi5yKSkucixcXG4gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB0ZXhjb29yZCArIGRpcmVjdGlvbiAqIGRpc3RvcnRpb24uZykpLmcsXFxuIGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdGV4Y29vcmQgKyBkaXJlY3Rpb24gKiBkaXN0b3J0aW9uLmIpKS5iLFxcbiAxLjBcXG4gKTtcXG59XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzIgdGV4Y29vcmQgPSAtdl9UZXhjb29yZCArIHZlYzIoMS4wKTsgdmVjMiB0ZXh0dXJlT2Zmc2V0ID0gMS4wIC8gdGV4dHVyZVNpemU7XFxuIHZlYzIgZ2hvc3RWZWMgPSAodmVjMigwLjUpIC0gdGV4Y29vcmQpICogZGlzcGVyc2FsO1xcbiB2ZWMyIGhhbG9WZWMgPSBub3JtYWxpemUoZ2hvc3RWZWMpICogaGFsb1dpZHRoO1xcbiB2ZWMzIGRpc3RvcnRpb24gPSB2ZWMzKC10ZXh0dXJlT2Zmc2V0LnggKiBkaXN0b3J0aW9uLCAwLjAsIHRleHR1cmVPZmZzZXQueCAqIGRpc3RvcnRpb24pO1xcbiB2ZWM0IHJlc3VsdCA9IHZlYzQoMC4wKTtcXG4gZm9yIChpbnQgaSA9IDA7IGkgPCBTQU1QTEVfTlVNQkVSOyBpKyspXFxuIHtcXG4gdmVjMiBvZmZzZXQgPSBmcmFjdCh0ZXhjb29yZCArIGdob3N0VmVjICogZmxvYXQoaSkpO1xcbiBmbG9hdCB3ZWlnaHQgPSBsZW5ndGgodmVjMigwLjUpIC0gb2Zmc2V0KSAvIGxlbmd0aCh2ZWMyKDAuNSkpO1xcbiB3ZWlnaHQgPSBwb3coMS4wIC0gd2VpZ2h0LCAxMC4wKTtcXG4gcmVzdWx0ICs9IHRleHR1cmVEaXN0b3J0ZWQob2Zmc2V0LCBub3JtYWxpemUoZ2hvc3RWZWMpLCBkaXN0b3J0aW9uKSAqIHdlaWdodDtcXG4gfVxcbiByZXN1bHQgKj0gdGV4dHVyZTJEKGxlbnNjb2xvciwgdmVjMihsZW5ndGgodmVjMigwLjUpIC0gdGV4Y29vcmQpKSAvIGxlbmd0aCh2ZWMyKDAuNSkpKTtcXG4gZmxvYXQgd2VpZ2h0ID0gbGVuZ3RoKHZlYzIoMC41KSAtIGZyYWN0KHRleGNvb3JkICsgaGFsb1ZlYykpIC8gbGVuZ3RoKHZlYzIoMC41KSk7XFxuIHdlaWdodCA9IHBvdygxLjAgLSB3ZWlnaHQsIDEwLjApO1xcbiB2ZWMyIG9mZnNldCA9IGZyYWN0KHRleGNvb3JkICsgaGFsb1ZlYyk7XFxuIHJlc3VsdCArPSB0ZXh0dXJlRGlzdG9ydGVkKG9mZnNldCwgbm9ybWFsaXplKGdob3N0VmVjKSwgZGlzdG9ydGlvbikgKiB3ZWlnaHQ7XFxuIGdsX0ZyYWdDb2xvciA9IHJlc3VsdDtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmJsZW5kXFxuI2RlZmluZSBTSEFERVJfTkFNRSBibGVuZFxcbiNpZmRlZiBURVhUVVJFMV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTE7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQxIDogMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFMl9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTI7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQyIDogMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFM19FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTM7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQzIDogMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTQ7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQ0IDogMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTU7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQ1IDogMS4wO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNl9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTY7XFxudW5pZm9ybSBmbG9hdCB3ZWlnaHQ2IDogMS4wO1xcbiNlbmRpZlxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB2ZWM0KDAuMCk7XFxuI2lmZGVmIFRFWFRVUkUxX0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTEsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDE7XFxuI2VuZGlmXFxuI2lmZGVmIFRFWFRVUkUyX0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTIsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDI7XFxuI2VuZGlmXFxuI2lmZGVmIFRFWFRVUkUzX0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTMsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDM7XFxuI2VuZGlmXFxuI2lmZGVmIFRFWFRVUkU0X0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTQsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDQ7XFxuI2VuZGlmXFxuI2lmZGVmIFRFWFRVUkU1X0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTUsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDU7XFxuI2VuZGlmXFxuI2lmZGVmIFRFWFRVUkU2X0VOQUJMRURcXG4gdGV4ICs9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZTYsIHZfVGV4Y29vcmQpKSAqIHdlaWdodDY7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUih0ZXgpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZnhhYVxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSB2ZWM0IHZpZXdwb3J0IDogVklFV1BPUlQ7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuI2RlZmluZSBGWEFBX1JFRFVDRV9NSU4gKDEuMC8xMjguMClcXG4jZGVmaW5lIEZYQUFfUkVEVUNFX01VTCAoMS4wLzguMClcXG4jZGVmaW5lIEZYQUFfU1BBTl9NQVggOC4wXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMyIHJlc29sdXRpb24gPSAxLjAgLyB2aWV3cG9ydC56dztcXG4gdmVjMyByZ2JOVyA9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIC0xLjAsIC0xLjAgKSApICogcmVzb2x1dGlvbiApICkueHl6O1xcbiB2ZWMzIHJnYk5FID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMS4wLCAtMS4wICkgKSAqIHJlc29sdXRpb24gKSApLnh5ejtcXG4gdmVjMyByZ2JTVyA9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIC0xLjAsIDEuMCApICkgKiByZXNvbHV0aW9uICkgKS54eXo7XFxuIHZlYzMgcmdiU0UgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAxLjAsIDEuMCApICkgKiByZXNvbHV0aW9uICkgKS54eXo7XFxuIHZlYzQgcmdiYU0gPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgZ2xfRnJhZ0Nvb3JkLnh5ICogcmVzb2x1dGlvbiApICk7XFxuIHZlYzMgcmdiTSA9IHJnYmFNLnh5ejtcXG4gZmxvYXQgb3BhY2l0eSA9IHJnYmFNLnc7XFxuIHZlYzMgbHVtYSA9IHZlYzMoIDAuMjk5LCAwLjU4NywgMC4xMTQgKTtcXG4gZmxvYXQgbHVtYU5XID0gZG90KCByZ2JOVywgbHVtYSApO1xcbiBmbG9hdCBsdW1hTkUgPSBkb3QoIHJnYk5FLCBsdW1hICk7XFxuIGZsb2F0IGx1bWFTVyA9IGRvdCggcmdiU1csIGx1bWEgKTtcXG4gZmxvYXQgbHVtYVNFID0gZG90KCByZ2JTRSwgbHVtYSApO1xcbiBmbG9hdCBsdW1hTSA9IGRvdCggcmdiTSwgbHVtYSApO1xcbiBmbG9hdCBsdW1hTWluID0gbWluKCBsdW1hTSwgbWluKCBtaW4oIGx1bWFOVywgbHVtYU5FICksIG1pbiggbHVtYVNXLCBsdW1hU0UgKSApICk7XFxuIGZsb2F0IGx1bWFNYXggPSBtYXgoIGx1bWFNLCBtYXgoIG1heCggbHVtYU5XLCBsdW1hTkUpICwgbWF4KCBsdW1hU1csIGx1bWFTRSApICkgKTtcXG4gdmVjMiBkaXI7XFxuIGRpci54ID0gLSgobHVtYU5XICsgbHVtYU5FKSAtIChsdW1hU1cgKyBsdW1hU0UpKTtcXG4gZGlyLnkgPSAoKGx1bWFOVyArIGx1bWFTVykgLSAobHVtYU5FICsgbHVtYVNFKSk7XFxuIGZsb2F0IGRpclJlZHVjZSA9IG1heCggKCBsdW1hTlcgKyBsdW1hTkUgKyBsdW1hU1cgKyBsdW1hU0UgKSAqICggMC4yNSAqIEZYQUFfUkVEVUNFX01VTCApLCBGWEFBX1JFRFVDRV9NSU4gKTtcXG4gZmxvYXQgcmNwRGlyTWluID0gMS4wIC8gKCBtaW4oIGFicyggZGlyLnggKSwgYWJzKCBkaXIueSApICkgKyBkaXJSZWR1Y2UgKTtcXG4gZGlyID0gbWluKCB2ZWMyKCBGWEFBX1NQQU5fTUFYLCBGWEFBX1NQQU5fTUFYKSxcXG4gbWF4KCB2ZWMyKC1GWEFBX1NQQU5fTUFYLCAtRlhBQV9TUEFOX01BWCksXFxuIGRpciAqIHJjcERpck1pbikpICogcmVzb2x1dGlvbjtcXG4gdmVjMyByZ2JBID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAqIHJlc29sdXRpb24gKyBkaXIgKiAoIDEuMCAvIDMuMCAtIDAuNSApICkgKS54eXo7XFxuIHJnYkEgKz0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAqIHJlc29sdXRpb24gKyBkaXIgKiAoIDIuMCAvIDMuMCAtIDAuNSApICkgKS54eXo7XFxuIHJnYkEgKj0gMC41O1xcbiB2ZWMzIHJnYkIgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgZ2xfRnJhZ0Nvb3JkLnh5ICogcmVzb2x1dGlvbiArIGRpciAqIC0wLjUgKSApLnh5ejtcXG4gcmdiQiArPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgZ2xfRnJhZ0Nvb3JkLnh5ICogcmVzb2x1dGlvbiArIGRpciAqIDAuNSApICkueHl6O1xcbiByZ2JCICo9IDAuMjU7XFxuIHJnYkIgKz0gcmdiQSAqIDAuNTtcXG4gZmxvYXQgbHVtYUIgPSBkb3QoIHJnYkIsIGx1bWEgKTtcXG4gaWYgKCAoIGx1bWFCIDwgbHVtYU1pbiApIHx8ICggbHVtYUIgPiBsdW1hTWF4ICkgKVxcbiB7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoIHJnYkEsIG9wYWNpdHkgKTtcXG4gfVxcbiBlbHNlIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCggcmdiQiwgb3BhY2l0eSApO1xcbiB9XFxufVxcbkBlbmRcIjtcclxuIiwiaW1wb3J0IGNvbG9yYWRqdXN0RXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2NvbG9yYWRqdXN0Lmdsc2wuanMnO1xyXG5pbXBvcnQgYmx1ckVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9ibHVyLmdsc2wuanMnO1xyXG5pbXBvcnQgbHVtRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2x1bS5nbHNsLmpzJztcclxuaW1wb3J0IGx1dEVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9sdXQuZ2xzbC5qcyc7XHJcbmltcG9ydCB2aWdlbnR0ZUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci92aWduZXR0ZS5nbHNsLmpzJztcclxuaW1wb3J0IG91dHB1dEVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9vdXRwdXQuZ2xzbC5qcyc7XHJcbmltcG9ydCBicmlnaHRFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvYnJpZ2h0Lmdsc2wuanMnO1xyXG5pbXBvcnQgZG93bnNhbXBsZUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9kb3duc2FtcGxlLmdsc2wuanMnO1xyXG5pbXBvcnQgdXBzYW1wbGVFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvdXBzYW1wbGUuZ2xzbC5qcyc7XHJcbmltcG9ydCBoZHJFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvaGRyLmdsc2wuanMnO1xyXG5pbXBvcnQgbGVuc2ZsYXJlRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2xlbnNmbGFyZS5nbHNsLmpzJztcclxuaW1wb3J0IGJsZW5kRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2JsZW5kLmdsc2wuanMnO1xyXG5pbXBvcnQgZnhhYUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9meGFhLmdsc2wuanMnO1xyXG4vLyBpbXBvcnQgZnhhYTNFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvZnhhYTMuZ2xzbC5qcyc7XHJcblxyXG4vLyBUT0RPIE11c3QgZXhwb3J0IGEgbW9kdWxlIGFuZCBiZSB1c2VkIGluIHRoZSBvdGhlciBtb2R1bGVzLiBPciBpdCB3aWxsIGJlIHRyZWUgc2hha2VkXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKFNoYWRlcikge1xyXG4gICAgLy8gU29tZSBidWlsZCBpbiBzaGFkZXJzXHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGNvbG9yYWRqdXN0RXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGJsdXJFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10obHVtRXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGx1dEVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXSh2aWdlbnR0ZUVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShvdXRwdXRFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10oYnJpZ2h0RXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGRvd25zYW1wbGVFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10odXBzYW1wbGVFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10oaGRyRXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGxlbnNmbGFyZUVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShibGVuZEVzc2wpO1xyXG5cclxuICAgIFNoYWRlclsnaW1wb3J0J10oZnhhYUVzc2wpO1xyXG5cclxufSIsImltcG9ydCB1dGlsIGZyb20gJy4vY29yZS91dGlsJztcclxuaW1wb3J0IENvbXBvc2l0b3IgZnJvbSAnLi9jb21wb3NpdG9yL0NvbXBvc2l0b3InO1xyXG5pbXBvcnQgQ29tcG9TY2VuZU5vZGUgZnJvbSAnLi9jb21wb3NpdG9yL1NjZW5lTm9kZSc7XHJcbmltcG9ydCBDb21wb1RleHR1cmVOb2RlIGZyb20gJy4vY29tcG9zaXRvci9UZXh0dXJlTm9kZSc7XHJcbmltcG9ydCBDb21wb0ZpbHRlck5vZGUgZnJvbSAnLi9jb21wb3NpdG9yL0ZpbHRlck5vZGUnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4vU2hhZGVyJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuL1RleHR1cmUyRCc7XHJcbmltcG9ydCBUZXh0dXJlQ3ViZSBmcm9tICcuL1RleHR1cmVDdWJlJztcclxuXHJcbmltcG9ydCByZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yIGZyb20gJy4vc2hhZGVyL3JlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3InO1xyXG5cclxucmVnaXN0ZXJCdWlsdGluQ29tcG9zaXRvcihTaGFkZXIpO1xyXG5cclxudmFyIHNoYWRlclNvdXJjZVJlZyA9IC9eI3NvdXJjZVxcKCguKj8pXFwpLztcclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LmNyZWF0ZUNvbXBvc2l0b3JcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBqc29uXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHJldHVybiB7Y2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3J9XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVDb21wb3NpdG9yKGpzb24sIG9wdHMpIHtcclxuICAgIHZhciBjb21wb3NpdG9yID0gbmV3IENvbXBvc2l0b3IoKTtcclxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG5cclxuICAgIHZhciBsaWIgPSB7XHJcbiAgICAgICAgdGV4dHVyZXM6IHt9LFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IHt9XHJcbiAgICB9O1xyXG4gICAgdmFyIGFmdGVyTG9hZCA9IGZ1bmN0aW9uKHNoYWRlckxpYiwgdGV4dHVyZUxpYikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwganNvbi5ub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbm9kZUluZm8gPSBqc29uLm5vZGVzW2ldO1xyXG4gICAgICAgICAgICB2YXIgbm9kZSA9IGNyZWF0ZU5vZGUobm9kZUluZm8sIGxpYiwgb3B0cyk7XHJcbiAgICAgICAgICAgIGlmIChub2RlKSB7XHJcbiAgICAgICAgICAgICAgICBjb21wb3NpdG9yLmFkZE5vZGUobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGZvciAodmFyIG5hbWUgaW4ganNvbi5wYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgdmFyIHBhcmFtSW5mbyA9IGpzb24ucGFyYW1ldGVyc1tuYW1lXTtcclxuICAgICAgICBsaWIucGFyYW1ldGVyc1tuYW1lXSA9IGNvbnZlcnRQYXJhbWV0ZXIocGFyYW1JbmZvKTtcclxuICAgIH1cclxuICAgIC8vIFRPRE8gbG9hZCB0ZXh0dXJlIGFzeW5jaHJvbm91c1xyXG4gICAgbG9hZFRleHR1cmVzKGpzb24sIGxpYiwgb3B0cywgZnVuY3Rpb24odGV4dHVyZUxpYikge1xyXG4gICAgICAgIGxpYi50ZXh0dXJlcyA9IHRleHR1cmVMaWI7XHJcbiAgICAgICAgYWZ0ZXJMb2FkKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gY29tcG9zaXRvcjtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlTm9kZShub2RlSW5mbywgbGliLCBvcHRzKSB7XHJcbiAgICB2YXIgdHlwZSA9IG5vZGVJbmZvLnR5cGUgfHwgJ2ZpbHRlcic7XHJcbiAgICB2YXIgc2hhZGVyU291cmNlO1xyXG4gICAgdmFyIGlucHV0cztcclxuICAgIHZhciBvdXRwdXRzO1xyXG5cclxuICAgIGlmICh0eXBlID09PSAnZmlsdGVyJykge1xyXG4gICAgICAgIHZhciBzaGFkZXJFeHAgPSBub2RlSW5mby5zaGFkZXIudHJpbSgpO1xyXG4gICAgICAgIHZhciByZXMgPSBzaGFkZXJTb3VyY2VSZWcuZXhlYyhzaGFkZXJFeHApO1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgc2hhZGVyU291cmNlID0gU2hhZGVyLnNvdXJjZShyZXNbMV0udHJpbSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2hhZGVyRXhwLmNoYXJBdCgwKSA9PT0gJyMnKSB7XHJcbiAgICAgICAgICAgIHNoYWRlclNvdXJjZSA9IGxpYi5zaGFkZXJzW3NoYWRlckV4cC5zdWJzdHIoMSldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXNoYWRlclNvdXJjZSkge1xyXG4gICAgICAgICAgICBzaGFkZXJTb3VyY2UgPSBzaGFkZXJFeHA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghc2hhZGVyU291cmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5vZGVJbmZvLmlucHV0cykge1xyXG4gICAgICAgIGlucHV0cyA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gbm9kZUluZm8uaW5wdXRzKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZUluZm8uaW5wdXRzW25hbWVdID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgaW5wdXRzW25hbWVdID0gbm9kZUluZm8uaW5wdXRzW25hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaW5wdXRzW25hbWVdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGVJbmZvLmlucHV0c1tuYW1lXS5ub2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIHBpbjogbm9kZUluZm8uaW5wdXRzW25hbWVdLnBpblxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChub2RlSW5mby5vdXRwdXRzKSB7XHJcbiAgICAgICAgb3V0cHV0cyA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gbm9kZUluZm8ub3V0cHV0cykge1xyXG4gICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IG5vZGVJbmZvLm91dHB1dHNbbmFtZV07XHJcbiAgICAgICAgICAgIG91dHB1dHNbbmFtZV0gPSB7fTtcclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8uYXR0YWNobWVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRzW25hbWVdLmF0dGFjaG1lbnQgPSBvdXRwdXRJbmZvLmF0dGFjaG1lbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ua2VlcExhc3RGcmFtZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRzW25hbWVdLmtlZXBMYXN0RnJhbWUgPSBvdXRwdXRJbmZvLmtlZXBMYXN0RnJhbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ub3V0cHV0TGFzdEZyYW1lICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dHNbbmFtZV0ub3V0cHV0TGFzdEZyYW1lID0gb3V0cHV0SW5mby5vdXRwdXRMYXN0RnJhbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ucGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0c1tuYW1lXS5wYXJhbWV0ZXJzID0gY29udmVydFBhcmFtZXRlcihvdXRwdXRJbmZvLnBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIG5vZGU7XHJcbiAgICBpZiAodHlwZSA9PT0gJ3NjZW5lJykge1xyXG4gICAgICAgIG5vZGUgPSBuZXcgQ29tcG9TY2VuZU5vZGUoe1xyXG4gICAgICAgICAgICBuYW1lOiBub2RlSW5mby5uYW1lLFxyXG4gICAgICAgICAgICBzY2VuZTogb3B0cy5zY2VuZSxcclxuICAgICAgICAgICAgY2FtZXJhOiBvcHRzLmNhbWVyYSxcclxuICAgICAgICAgICAgb3V0cHV0czogb3V0cHV0c1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZSA9PT0gJ3RleHR1cmUnKSB7XHJcbiAgICAgICAgbm9kZSA9IG5ldyBDb21wb1RleHR1cmVOb2RlKHtcclxuICAgICAgICAgICAgbmFtZTogbm9kZUluZm8ubmFtZSxcclxuICAgICAgICAgICAgb3V0cHV0czogb3V0cHV0c1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8gRGVmYXVsdCBpcyBmaWx0ZXJcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIG5vZGUgPSBuZXcgQ29tcG9GaWx0ZXJOb2RlKHtcclxuICAgICAgICAgICAgbmFtZTogbm9kZUluZm8ubmFtZSxcclxuICAgICAgICAgICAgc2hhZGVyOiBzaGFkZXJTb3VyY2UsXHJcbiAgICAgICAgICAgIGlucHV0czogaW5wdXRzLFxyXG4gICAgICAgICAgICBvdXRwdXRzOiBvdXRwdXRzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAobm9kZSkge1xyXG4gICAgICAgIGlmIChub2RlSW5mby5wYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gbm9kZUluZm8ucGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IG5vZGVJbmZvLnBhcmFtZXRlcnNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWwuY2hhckF0KDApID09PSAnIycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gbGliLnRleHR1cmVzW3ZhbC5zdWJzdHIoMSldO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5vbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZWZvcmVyZW5kZXInLCBjcmVhdGVTaXplU2V0SGFuZGxlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCB0cnlDb252ZXJ0RXhwcih2YWwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUub24oJ2JlZm9yZXJlbmRlcicsIHZhbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBub2RlLnNldFBhcmFtZXRlcihuYW1lLCB2YWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlSW5mby5kZWZpbmVzICYmIG5vZGUucGFzcykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIG5vZGVJbmZvLmRlZmluZXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBub2RlSW5mby5kZWZpbmVzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgbm9kZS5wYXNzLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCBuYW1lLCB2YWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vZGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRXaWR0aEZ1bmMod2lkdGgsIGhlaWdodCkge1xyXG4gICAgcmV0dXJuIHdpZHRoO1xyXG59XHJcbmZ1bmN0aW9uIGRlZmF1bHRIZWlnaHRGdW5jKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHJldHVybiBoZWlnaHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbnZlcnRQYXJhbWV0ZXIocGFyYW1JbmZvKSB7XHJcbiAgICB2YXIgcGFyYW0gPSB7fTtcclxuICAgIGlmICghcGFyYW1JbmZvKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcmFtO1xyXG4gICAgfVxyXG4gICAgWyd0eXBlJywgJ21pbkZpbHRlcicsICdtYWdGaWx0ZXInLCAnd3JhcFMnLCAnd3JhcFQnLCAnZmxpcFknLCAndXNlTWlwbWFwJ11cclxuICAgICAgICAuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWwgPSBwYXJhbUluZm9bbmFtZV07XHJcbiAgICAgICAgICAgIGlmICh2YWwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgLy8gQ29udmVydCBzdHJpbmcgdG8gZW51bVxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gVGV4dHVyZVt2YWxdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcGFyYW1bbmFtZV0gPSB2YWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB2YXIgc2l6ZVNjYWxlID0gcGFyYW1JbmZvLnNjYWxlIHx8IDE7XHJcbiAgICBbJ3dpZHRoJywgJ2hlaWdodCddXHJcbiAgICAgICAgLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICAgICAgICBpZiAocGFyYW1JbmZvW25hbWVdICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBwYXJhbUluZm9bbmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtW25hbWVdID0gY3JlYXRlU2l6ZVBhcnNlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgdHJ5Q29udmVydEV4cHIodmFsKSwgc2l6ZVNjYWxlXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtW25hbWVdID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICBpZiAoIXBhcmFtLndpZHRoKSB7XHJcbiAgICAgICAgcGFyYW0ud2lkdGggPSBkZWZhdWx0V2lkdGhGdW5jO1xyXG4gICAgfVxyXG4gICAgaWYgKCFwYXJhbS5oZWlnaHQpIHtcclxuICAgICAgICBwYXJhbS5oZWlnaHQgPSBkZWZhdWx0SGVpZ2h0RnVuYztcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyYW1JbmZvLnVzZU1pcG1hcCAhPSBudWxsKSB7XHJcbiAgICAgICAgcGFyYW0udXNlTWlwbWFwID0gcGFyYW1JbmZvLnVzZU1pcG1hcDtcclxuICAgIH1cclxuICAgIHJldHVybiBwYXJhbTtcclxufVxyXG5cclxuZnVuY3Rpb24gbG9hZFRleHR1cmVzKGpzb24sIGxpYiwgb3B0cywgY2FsbGJhY2spIHtcclxuICAgIGlmICghanNvbi50ZXh0dXJlcykge1xyXG4gICAgICAgIGNhbGxiYWNrKHt9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgdGV4dHVyZXMgPSB7fTtcclxuICAgIHZhciBsb2FkaW5nID0gMDtcclxuXHJcbiAgICB2YXIgY2JkID0gZmFsc2U7XHJcbiAgICB2YXIgdGV4dHVyZVJvb3RQYXRoID0gb3B0cy50ZXh0dXJlUm9vdFBhdGg7XHJcbiAgICB1dGlsLmVhY2goanNvbi50ZXh0dXJlcywgZnVuY3Rpb24odGV4dHVyZUluZm8sIG5hbWUpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZTtcclxuICAgICAgICB2YXIgcGF0aCA9IHRleHR1cmVJbmZvLnBhdGg7XHJcbiAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSBjb252ZXJ0UGFyYW1ldGVyKHRleHR1cmVJbmZvLnBhcmFtZXRlcnMpO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGgpICYmIHBhdGgubGVuZ3RoID09PSA2KSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlUm9vdFBhdGgpIHtcclxuICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoLm1hcChmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHV0aWwucmVsYXRpdmUyYWJzb2x1dGUoaXRlbSwgdGV4dHVyZVJvb3RQYXRoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZUN1YmUocGFyYW1ldGVycyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlUm9vdFBhdGgpIHtcclxuICAgICAgICAgICAgICAgIHBhdGggPSB1dGlsLnJlbGF0aXZlMmFic29sdXRlKHBhdGgsIHRleHR1cmVSb290UGF0aCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQocGFyYW1ldGVycyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0ZXh0dXJlLmxvYWQocGF0aCk7XHJcbiAgICAgICAgbG9hZGluZysrO1xyXG4gICAgICAgIHRleHR1cmUub25jZSgnc3VjY2VzcycsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB0ZXh0dXJlc1tuYW1lXSA9IHRleHR1cmU7XHJcbiAgICAgICAgICAgIGxvYWRpbmctLTtcclxuICAgICAgICAgICAgaWYgKGxvYWRpbmcgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHRleHR1cmVzKTtcclxuICAgICAgICAgICAgICAgIGNiZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChsb2FkaW5nID09PSAwICYmICFjYmQpIHtcclxuICAgICAgICBjYWxsYmFjayh0ZXh0dXJlcyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVNpemVTZXRIYW5kbGVyKG5hbWUsIGV4cHJGdW5jKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgLy8gUEVORElORyB2aWV3cG9ydCBzaXplIG9yIHdpbmRvdyBzaXplXHJcbiAgICAgICAgdmFyIGRwciA9IHJlbmRlcmVyLmdldERldmljZVBpeGVsUmF0aW8oKTtcclxuICAgICAgICAvLyBQRU5ESU5HIElmIG11bHRpcGx5IGRwciA/XHJcbiAgICAgICAgdmFyIHdpZHRoID0gcmVuZGVyZXIuZ2V0V2lkdGgoKTtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gcmVuZGVyZXIuZ2V0SGVpZ2h0KCk7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGV4cHJGdW5jKHdpZHRoLCBoZWlnaHQsIGRwcik7XHJcbiAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXIobmFtZSwgcmVzdWx0KTtcclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVNpemVQYXJzZXIobmFtZSwgZXhwckZ1bmMsIHNjYWxlKSB7XHJcbiAgICBzY2FsZSA9IHNjYWxlIHx8IDE7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIGRwciA9IHJlbmRlcmVyLmdldERldmljZVBpeGVsUmF0aW8oKTtcclxuICAgICAgICB2YXIgd2lkdGggPSByZW5kZXJlci5nZXRXaWR0aCgpICogc2NhbGU7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IHJlbmRlcmVyLmdldEhlaWdodCgpICogc2NhbGU7XHJcbiAgICAgICAgcmV0dXJuIGV4cHJGdW5jKHdpZHRoLCBoZWlnaHQsIGRwcik7XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiB0cnlDb252ZXJ0RXhwcihzdHJpbmcpIHtcclxuICAgIC8vIFBFTkRJTkdcclxuICAgIHZhciBleHByUmVzID0gL15leHByXFwoKC4qKVxcKSQvLmV4ZWMoc3RyaW5nKTtcclxuICAgIGlmIChleHByUmVzKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIGZ1bmMgPSBuZXcgRnVuY3Rpb24oJ3dpZHRoJywgJ2hlaWdodCcsICdkcHInLCAncmV0dXJuICcgKyBleHByUmVzWzFdKTtcclxuICAgICAgICAgICAgLy8gVHJ5IHJ1biB0XHJcbiAgICAgICAgICAgIGZ1bmMoMSwgMSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZnVuYztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGV4cHJlc3Npb24uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVDb21wb3NpdG9yO1xyXG4iLCIvLyBERVBSRUNBVEVEXHJcbmltcG9ydCBjcmVhdGVDb21wb3NpdG9yIGZyb20gJy4uL2NyZWF0ZUNvbXBvc2l0b3InO1xyXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVDb21wb3NpdG9yOyIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuI2lmIGRlZmluZWQoU0VDT05EX1BBU1MpIHx8IGRlZmluZWQoRklSU1RfUEFTUylcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZCA6IFRFWENPT1JEXzA7XFxudW5pZm9ybSB2ZWMyIHV2UmVwZWF0O1xcbnVuaWZvcm0gdmVjMiB1dk9mZnNldDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG4jZW5kaWZcXG4jaWZkZWYgRklSU1RfUEFTU1xcbnVuaWZvcm0gbWF0NCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgOiBXT1JMRElOVkVSU0VUUkFOU1BPU0U7XFxudW5pZm9ybSBtYXQ0IHdvcmxkIDogV09STEQ7XFxudmFyeWluZyB2ZWMzIHZfTm9ybWFsO1xcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbCA6IE5PUk1BTDtcXG5hdHRyaWJ1dGUgdmVjNCB0YW5nZW50IDogVEFOR0VOVDtcXG52YXJ5aW5nIHZlYzMgdl9UYW5nZW50O1xcbnZhcnlpbmcgdmVjMyB2X0JpdGFuZ2VudDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG4jaWZkZWYgVEhJUkRfUEFTU1xcbnVuaWZvcm0gbWF0NCBwcmV2V29ybGRWaWV3UHJvamVjdGlvbjtcXG52YXJ5aW5nIHZlYzQgdl9WaWV3UG9zaXRpb247XFxudmFyeWluZyB2ZWM0IHZfUHJldlZpZXdQb3NpdGlvbjtcXG4jaWZkZWYgU0tJTk5JTkdcXG4jaWZkZWYgVVNFX1NLSU5fTUFUUklDRVNfVEVYVFVSRVxcbnVuaWZvcm0gc2FtcGxlcjJEIHByZXZTa2luTWF0cmljZXNUZXh0dXJlO1xcbm1hdDQgZ2V0UHJldlNraW5NYXRyaXgoZmxvYXQgaWR4KSB7XFxuIHJldHVybiBnZXRTa2luTWF0cml4KHByZXZTa2luTWF0cmljZXNUZXh0dXJlLCBpZHgpO1xcbn1cXG4jZWxzZVxcbnVuaWZvcm0gbWF0NCBwcmV2U2tpbk1hdHJpeFtKT0lOVF9DT1VOVF07XFxubWF0NCBnZXRQcmV2U2tpbk1hdHJpeChmbG9hdCBpZHgpIHtcXG4gcmV0dXJuIHByZXZTa2luTWF0cml4W2ludChpZHgpXTtcXG59XFxuI2VuZGlmXFxuI2VuZGlmXFxuI2VuZGlmXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuIHZlYzMgcHJldlNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiNpZmRlZiBGSVJTVF9QQVNTXFxuIHZlYzMgc2tpbm5lZE5vcm1hbCA9IG5vcm1hbDtcXG4gdmVjMyBza2lubmVkVGFuZ2VudCA9IHRhbmdlbnQueHl6O1xcbiBib29sIGhhc1RhbmdlbnQgPSBkb3QodGFuZ2VudCwgdGFuZ2VudCkgPiAwLjA7XFxuI2VuZGlmXFxuI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiAjaWZkZWYgRklSU1RfUEFTU1xcbiBza2lubmVkTm9ybWFsID0gKHNraW5NYXRyaXhXUyAqIHZlYzQobm9ybWFsLCAwLjApKS54eXo7XFxuIGlmIChoYXNUYW5nZW50KSB7XFxuIHNraW5uZWRUYW5nZW50ID0gKHNraW5NYXRyaXhXUyAqIHZlYzQodGFuZ2VudC54eXosIDAuMCkpLnh5ejtcXG4gfVxcbiAjZW5kaWZcXG4gI2lmZGVmIFRISVJEX1BBU1NcXG4ge1xcbiBtYXQ0IHByZXZTa2luTWF0cml4V1MgPSBnZXRQcmV2U2tpbk1hdHJpeChqb2ludC54KSAqIHdlaWdodC54O1xcbiBpZiAod2VpZ2h0LnkgPiAxZS00KSB7IHByZXZTa2luTWF0cml4V1MgKz0gZ2V0UHJldlNraW5NYXRyaXgoam9pbnQueSkgKiB3ZWlnaHQueTsgfVxcbiBpZiAod2VpZ2h0LnogPiAxZS00KSB7IHByZXZTa2luTWF0cml4V1MgKz0gZ2V0UHJldlNraW5NYXRyaXgoam9pbnQueikgKiB3ZWlnaHQuejsgfVxcbiBmbG9hdCB3ZWlnaHRXID0gMS4wLXdlaWdodC54LXdlaWdodC55LXdlaWdodC56O1xcbiBpZiAod2VpZ2h0VyA+IDFlLTQpIHsgcHJldlNraW5NYXRyaXhXUyArPSBnZXRQcmV2U2tpbk1hdHJpeChqb2ludC53KSAqIHdlaWdodFc7IH1cXG4gcHJldlNraW5uZWRQb3NpdGlvbiA9IChwcmV2U2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiB9XFxuICNlbmRpZlxcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKFNFQ09ORF9QQVNTKSB8fCBkZWZpbmVkKEZJUlNUX1BBU1MpXFxuIHZfVGV4Y29vcmQgPSB0ZXhjb29yZCAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxuI2VuZGlmXFxuI2lmZGVmIEZJUlNUX1BBU1NcXG4gdl9Ob3JtYWwgPSBub3JtYWxpemUoKHdvcmxkSW52ZXJzZVRyYW5zcG9zZSAqIHZlYzQoc2tpbm5lZE5vcm1hbCwgMC4wKSkueHl6KTtcXG4gaWYgKGhhc1RhbmdlbnQpIHtcXG4gdl9UYW5nZW50ID0gbm9ybWFsaXplKCh3b3JsZEludmVyc2VUcmFuc3Bvc2UgKiB2ZWM0KHNraW5uZWRUYW5nZW50LCAwLjApKS54eXopO1xcbiB2X0JpdGFuZ2VudCA9IG5vcm1hbGl6ZShjcm9zcyh2X05vcm1hbCwgdl9UYW5nZW50KSAqIHRhbmdlbnQudyk7XFxuIH1cXG4gdl9Xb3JsZFBvc2l0aW9uID0gKHdvcmxkICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4jaWZkZWYgVEhJUkRfUEFTU1xcbiB2X1ZpZXdQb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG4gdl9QcmV2Vmlld1Bvc2l0aW9uID0gcHJldldvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHByZXZTa2lubmVkUG9zaXRpb24sIDEuMCk7XFxuI2VuZGlmXFxuIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIxLmZyYWdtZW50XFxudW5pZm9ybSBtYXQ0IHZpZXdJbnZlcnNlIDogVklFV0lOVkVSU0U7XFxudW5pZm9ybSBmbG9hdCBnbG9zc2luZXNzO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZhcnlpbmcgdmVjMyB2X05vcm1hbDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcXG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlTWFwO1xcbnZhcnlpbmcgdmVjMyB2X1RhbmdlbnQ7XFxudmFyeWluZyB2ZWMzIHZfQml0YW5nZW50O1xcbnVuaWZvcm0gc2FtcGxlcjJEIHJvdWdoR2xvc3NNYXA7XFxudW5pZm9ybSBib29sIHVzZVJvdWdoR2xvc3NNYXA7XFxudW5pZm9ybSBib29sIHVzZVJvdWdobmVzcztcXG51bmlmb3JtIGJvb2wgZG91YmxlU2lkZWQ7XFxudW5pZm9ybSBmbG9hdCBhbHBoYUN1dG9mZjogMC4wO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE6IDEuMDtcXG51bmlmb3JtIGludCByb3VnaEdsb3NzQ2hhbm5lbDogMDtcXG5mbG9hdCBpbmRleGluZ1RleGVsKGluIHZlYzQgdGV4ZWwsIGluIGludCBpZHgpIHtcXG4gaWYgKGlkeCA9PSAzKSByZXR1cm4gdGV4ZWwuYTtcXG4gZWxzZSBpZiAoaWR4ID09IDEpIHJldHVybiB0ZXhlbC5nO1xcbiBlbHNlIGlmIChpZHggPT0gMikgcmV0dXJuIHRleGVsLmI7XFxuIGVsc2UgcmV0dXJuIHRleGVsLnI7XFxufVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIE4gPSB2X05vcm1hbDtcXG4gaWYgKGRvdWJsZVNpZGVkKSB7XFxuIHZlYzMgZXllUG9zID0gdmlld0ludmVyc2VbM10ueHl6O1xcbiB2ZWMzIFYgPSBleWVQb3MgLSB2X1dvcmxkUG9zaXRpb247XFxuIGlmIChkb3QoTiwgVikgPCAwLjApIHtcXG4gTiA9IC1OO1xcbiB9XFxuIH1cXG4gaWYgKGFscGhhQ3V0b2ZmID4gMC4wKSB7XFxuIGZsb2F0IGEgPSB0ZXh0dXJlMkQoZGlmZnVzZU1hcCwgdl9UZXhjb29yZCkuYSAqIGFscGhhO1xcbiBpZiAoYSA8IGFscGhhQ3V0b2ZmKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4gfVxcbiBpZiAoZG90KHZfVGFuZ2VudCwgdl9UYW5nZW50KSA+IDAuMCkge1xcbiB2ZWMzIG5vcm1hbFRleGVsID0gdGV4dHVyZTJEKG5vcm1hbE1hcCwgdl9UZXhjb29yZCkueHl6O1xcbiBpZiAoZG90KG5vcm1hbFRleGVsLCBub3JtYWxUZXhlbCkgPiAwLjApIHsgTiA9IG5vcm1hbFRleGVsICogMi4wIC0gMS4wO1xcbiBtYXQzIHRibiA9IG1hdDModl9UYW5nZW50LCB2X0JpdGFuZ2VudCwgdl9Ob3JtYWwpO1xcbiBOID0gbm9ybWFsaXplKHRibiAqIE4pO1xcbiB9XFxuIH1cXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IChOICsgMS4wKSAqIDAuNTtcXG4gZmxvYXQgZyA9IGdsb3NzaW5lc3M7XFxuIGlmICh1c2VSb3VnaEdsb3NzTWFwKSB7XFxuIGZsb2F0IGcyID0gaW5kZXhpbmdUZXhlbCh0ZXh0dXJlMkQocm91Z2hHbG9zc01hcCwgdl9UZXhjb29yZCksIHJvdWdoR2xvc3NDaGFubmVsKTtcXG4gaWYgKHVzZVJvdWdobmVzcykge1xcbiBnMiA9IDEuMCAtIGcyO1xcbiB9XFxuIGcgPSBjbGFtcChnMiArIChnIC0gMC41KSAqIDIuMCwgMC4wLCAxLjApO1xcbiB9XFxuIGdsX0ZyYWdDb2xvci5hID0gZyArIDAuMDA1O1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIyLmZyYWdtZW50XFxudW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZU1hcDtcXG51bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7XFxudW5pZm9ybSB2ZWMzIGNvbG9yO1xcbnVuaWZvcm0gZmxvYXQgbWV0YWxuZXNzO1xcbnVuaWZvcm0gYm9vbCB1c2VNZXRhbG5lc3NNYXA7XFxudW5pZm9ybSBib29sIGxpbmVhcjtcXG51bmlmb3JtIGZsb2F0IGFscGhhQ3V0b2ZmOiAwLjA7XFxudW5pZm9ybSBmbG9hdCBhbHBoYTogMS4wO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnNyZ2JcXG52b2lkIG1haW4oKVxcbntcXG4gZmxvYXQgbSA9IG1ldGFsbmVzcztcXG4gaWYgKHVzZU1ldGFsbmVzc01hcCkge1xcbiB2ZWM0IG1ldGFsbmVzc1RleGVsID0gdGV4dHVyZTJEKG1ldGFsbmVzc01hcCwgdl9UZXhjb29yZCk7XFxuIG0gPSBjbGFtcChtZXRhbG5lc3NUZXhlbC5yICsgKG0gKiAyLjAgLSAxLjApLCAwLjAsIDEuMCk7XFxuIH1cXG4gdmVjNCB0ZXhlbCA9IHRleHR1cmUyRChkaWZmdXNlTWFwLCB2X1RleGNvb3JkKTtcXG4gaWYgKGxpbmVhcikge1xcbiB0ZXhlbCA9IHNSR0JUb0xpbmVhcih0ZXhlbCk7XFxuIH1cXG4gaWYgKGFscGhhQ3V0b2ZmID4gMC4wKSB7XFxuIGZsb2F0IGEgPSB0ZXhlbC5hICogYWxwaGE7XFxuIGlmIChhIDwgYWxwaGFDdXRvZmYpIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiB9XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSB0ZXhlbC5yZ2IgKiBjb2xvcjtcXG4gZ2xfRnJhZ0NvbG9yLmEgPSBtICsgMC4wMDU7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuZGVmZXJyZWQuZ2J1ZmZlcjMuZnJhZ21lbnRcXG51bmlmb3JtIGJvb2wgZmlyc3RSZW5kZXI7XFxudmFyeWluZyB2ZWM0IHZfVmlld1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCB2X1ByZXZWaWV3UG9zaXRpb247XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzIgYSA9IHZfVmlld1Bvc2l0aW9uLnh5IC8gdl9WaWV3UG9zaXRpb24udztcXG4gdmVjMiBiID0gdl9QcmV2Vmlld1Bvc2l0aW9uLnh5IC8gdl9QcmV2Vmlld1Bvc2l0aW9uLnc7XFxuIGlmIChmaXJzdFJlbmRlcikge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7XFxuIH1cXG4gZWxzZSB7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoKGEgLSBiKSAqIDAuNSArIDAuNSwgMC4wLCAxLjApO1xcbiB9XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuZGVmZXJyZWQuZ2J1ZmZlci5kZWJ1Z1xcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmU0O1xcbnVuaWZvcm0gaW50IGRlYnVnOiAwO1xcbnZvaWQgbWFpbiAoKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiBpZiAoZGVidWcgPT0gMCkge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KE4sIDEuMCk7XFxuIH1cXG4gZWxzZSBpZiAoZGVidWcgPT0gMSkge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzMoeiksIDEuMCk7XFxuIH1cXG4gZWxzZSBpZiAoZGVidWcgPT0gMikge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbiB9XFxuIGVsc2UgaWYgKGRlYnVnID09IDMpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKGdsb3NzaW5lc3MpLCAxLjApO1xcbiB9XFxuIGVsc2UgaWYgKGRlYnVnID09IDQpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKG1ldGFsbmVzcyksIDEuMCk7XFxuIH1cXG4gZWxzZSBpZiAoZGVidWcgPT0gNSkge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGFsYmVkbywgMS4wKTtcXG4gfVxcbiBlbHNlIHtcXG4gdmVjNCBjb2xvciA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTQsIHV2KTtcXG4gY29sb3IucmcgLT0gMC41O1xcbiBjb2xvci5yZyAqPSAyLjA7XFxuIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbiB9XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMTtcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTI7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUzO1xcbnVuaWZvcm0gdmVjMiB3aW5kb3dTaXplOiBXSU5ET1dfU0laRTtcXG51bmlmb3JtIHZlYzQgdmlld3BvcnQ6IFZJRVdQT1JUO1xcbnVuaWZvcm0gbWF0NCB2aWV3UHJvamVjdGlvbkludjtcXG4jaWZkZWYgREVQVEhfRU5DT0RFRFxcbkBpbXBvcnQgY2xheS51dGlsLmRlY29kZV9mbG9hdFxcbiNlbmRpZlxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHkgLyB3aW5kb3dTaXplO1xcbiB2ZWMyIHV2MiA9IChnbF9GcmFnQ29vcmQueHkgLSB2aWV3cG9ydC54eSkgLyB2aWV3cG9ydC56dztcXG4gdmVjNCB0ZXhlbDEgPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUxLCB1dik7XFxuIHZlYzQgdGV4ZWwzID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMywgdXYpO1xcbiBpZiAoZG90KHRleGVsMS5yZ2IsIHZlYzMoMS4wKSkgPT0gMC4wKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4gZmxvYXQgZ2xvc3NpbmVzcyA9IHRleGVsMS5hO1xcbiBmbG9hdCBtZXRhbG5lc3MgPSB0ZXhlbDMuYTtcXG4gdmVjMyBOID0gdGV4ZWwxLnJnYiAqIDIuMCAtIDEuMDtcXG4gZmxvYXQgeiA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTIsIHV2KS5yICogMi4wIC0gMS4wO1xcbiB2ZWMyIHh5ID0gdXYyICogMi4wIC0gMS4wO1xcbiB2ZWM0IHByb2plY3RlZFBvcyA9IHZlYzQoeHksIHosIDEuMCk7XFxuIHZlYzQgcDQgPSB2aWV3UHJvamVjdGlvbkludiAqIHByb2plY3RlZFBvcztcXG4gdmVjMyBwb3NpdGlvbiA9IHA0Lnh5eiAvIHA0Lnc7XFxuIHZlYzMgYWxiZWRvID0gdGV4ZWwzLnJnYjtcXG4gdmVjMyBkaWZmdXNlQ29sb3IgPSBhbGJlZG8gKiAoMS4wIC0gbWV0YWxuZXNzKTtcXG4gdmVjMyBzcGVjdWxhckNvbG9yID0gbWl4KHZlYzMoMC4wNCksIGFsYmVkbywgbWV0YWxuZXNzKTtcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxuZmxvYXQgRF9QaG9uZyhpbiBmbG9hdCBnLCBpbiBmbG9hdCBuZGgpIHtcXG4gZmxvYXQgYSA9IHBvdyg4MTkyLjAsIGcpO1xcbiByZXR1cm4gKGEgKyAyLjApIC8gOC4wICogcG93KG5kaCwgYSk7XFxufVxcbmZsb2F0IERfR0dYKGluIGZsb2F0IGcsIGluIGZsb2F0IG5kaCkge1xcbiBmbG9hdCByID0gMS4wIC0gZztcXG4gZmxvYXQgYSA9IHIgKiByO1xcbiBmbG9hdCB0bXAgPSBuZGggKiBuZGggKiAoYSAtIDEuMCkgKyAxLjA7XFxuIHJldHVybiBhIC8gKDMuMTQxNTkyNiAqIHRtcCAqIHRtcCk7XFxufVxcbnZlYzMgRl9TY2hsaWNrKGluIGZsb2F0IG5kdiwgdmVjMyBzcGVjKSB7XFxuIHJldHVybiBzcGVjICsgKDEuMCAtIHNwZWMpICogcG93KDEuMCAtIG5kdiwgNS4wKTtcXG59XFxudmVjMyBsaWdodEVxdWF0aW9uKFxcbiBpbiB2ZWMzIGxpZ2h0Q29sb3IsIGluIHZlYzMgZGlmZnVzZUNvbG9yLCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsXFxuIGluIGZsb2F0IG5kbCwgaW4gZmxvYXQgbmRoLCBpbiBmbG9hdCBuZHYsIGluIGZsb2F0IGdcXG4pXFxue1xcbiByZXR1cm4gbmRsICogbGlnaHRDb2xvclxcbiAqIChkaWZmdXNlQ29sb3IgKyBEX1Bob25nKGcsIG5kaCkgKiBGX1NjaGxpY2sobmR2LCBzcGVjdWxhckNvbG9yKSk7XFxufVxcbkBlbmRcIjtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgUGFzcyBmcm9tICcuLi9jb21wb3NpdG9yL1Bhc3MnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgbWF0NCBmcm9tICcuLi9nbG1hdHJpeC9tYXQ0JztcclxuXHJcbmltcG9ydCBnYnVmZmVyRXNzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL2didWZmZXIuZ2xzbC5qcyc7XHJcbmltcG9ydCBjaHVua0Vzc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9jaHVuay5nbHNsLmpzJztcclxuXHJcblNoYWRlci5pbXBvcnQoZ2J1ZmZlckVzc2wpO1xyXG5TaGFkZXIuaW1wb3J0KGNodW5rRXNzbCk7XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVGaWxsQ2FudmFzKGNvbG9yKSB7XHJcbiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBjYW52YXMud2lkdGggPSBjYW52YXMuaGVpZ2h0ID0gMTtcclxuICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvciB8fCAnIzAwMCc7XHJcbiAgICBjdHguZmlsbFJlY3QoMCwgMCwgMSwgMSk7XHJcblxyXG4gICAgcmV0dXJuIGNhbnZhcztcclxufVxyXG5cclxuLy8gVE9ETyBzcGVjdWxhckNvbG9yXHJcbi8vIFRPRE8gUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRcclxuZnVuY3Rpb24gZ2V0R2V0VW5pZm9ybUhvb2sxKGRlZmF1bHROb3JtYWxNYXAsIGRlZmF1bHRSb3VnaG5lc3NNYXAsIGRlZmF1bHREaWZmdXNlTWFwKSB7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBnQnVmZmVyTWF0LCBzeW1ib2wpIHtcclxuICAgICAgICB2YXIgc3RhbmRhcmRNYXRlcmlhbCA9IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgaWYgKHN5bWJvbCA9PT0gJ2RvdWJsZVNpZGVkJykge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0RPVUJMRV9TSURFRCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd1dlJlcGVhdCcgfHwgc3ltYm9sID09PSAndXZPZmZzZXQnIHx8IHN5bWJvbCA9PT0gJ2FscGhhJykge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5nZXQoc3ltYm9sKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAnbm9ybWFsTWFwJykge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5nZXQoc3ltYm9sKSB8fCBkZWZhdWx0Tm9ybWFsTWFwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdkaWZmdXNlTWFwJykge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5nZXQoc3ltYm9sKSB8fCBkZWZhdWx0RGlmZnVzZU1hcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAnYWxwaGFDdXRvZmYnKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxyXG4gICAgICAgICAgICBpZiAoc3RhbmRhcmRNYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFscGhhQ3V0b2ZmID0gc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ2FscGhhQ3V0b2ZmJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWxwaGFDdXRvZmYgfHwgMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciB1c2VSb3VnaG5lc3NXb3JrZmxvdyA9IHN0YW5kYXJkTWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsICdVU0VfUk9VR0hORVNTJyk7XHJcbiAgICAgICAgICAgIHZhciByb3VnaEdsb3NzTWFwID0gdXNlUm91Z2huZXNzV29ya2Zsb3cgPyBzdGFuZGFyZE1hdGVyaWFsLmdldCgncm91Z2huZXNzTWFwJykgOiBzdGFuZGFyZE1hdGVyaWFsLmdldCgnZ2xvc3NpbmVzc01hcCcpO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnZ2xvc3NpbmVzcyc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZVJvdWdobmVzc1dvcmtmbG93ID8gKDEuMCAtIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdyb3VnaG5lc3MnKSkgOiBzdGFuZGFyZE1hdGVyaWFsLmdldCgnZ2xvc3NpbmVzcycpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncm91Z2hHbG9zc01hcCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvdWdoR2xvc3NNYXA7XHJcbiAgICAgICAgICAgICAgICBjYXNlICd1c2VSb3VnaEdsb3NzTWFwJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFyb3VnaEdsb3NzTWFwO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAndXNlUm91Z2huZXNzJzpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNlUm91Z2huZXNzV29ya2Zsb3c7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdyb3VnaEdsb3NzQ2hhbm5lbCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZVJvdWdobmVzc1dvcmtmbG93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc3RhbmRhcmRNYXRlcmlhbC5nZXREZWZpbmUoJ2ZyYWdtZW50JywgJ1JPVUdITkVTU19DSEFOTkVMJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGFuZGFyZE1hdGVyaWFsLmdldERlZmluZSgnZnJhZ21lbnQnLCAnR0xPU1NJTkVTU19DSEFOTkVMJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRHZXRVbmlmb3JtSG9vazIoZGVmYXVsdERpZmZ1c2VNYXAsIGRlZmF1bHRNZXRhbG5lc3NNYXApIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgZ0J1ZmZlck1hdCwgc3ltYm9sKSB7XHJcbiAgICAgICAgdmFyIHN0YW5kYXJkTWF0ZXJpYWwgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgICAgIHN3aXRjaCAoc3ltYm9sKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2NvbG9yJzpcclxuICAgICAgICAgICAgY2FzZSAndXZSZXBlYXQnOlxyXG4gICAgICAgICAgICBjYXNlICd1dk9mZnNldCc6XHJcbiAgICAgICAgICAgIGNhc2UgJ2FscGhhJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1hdGVyaWFsLmdldChzeW1ib2wpO1xyXG4gICAgICAgICAgICBjYXNlICdtZXRhbG5lc3MnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdtZXRhbG5lc3MnKSB8fCAwO1xyXG4gICAgICAgICAgICBjYXNlICdkaWZmdXNlTWFwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1hdGVyaWFsLmdldChzeW1ib2wpIHx8IGRlZmF1bHREaWZmdXNlTWFwO1xyXG4gICAgICAgICAgICBjYXNlICdtZXRhbG5lc3NNYXAnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KHN5bWJvbCkgfHwgZGVmYXVsdE1ldGFsbmVzc01hcDtcclxuICAgICAgICAgICAgY2FzZSAndXNlTWV0YWxuZXNzTWFwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAhIXN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdtZXRhbG5lc3NNYXAnKTtcclxuICAgICAgICAgICAgY2FzZSAnbGluZWFyJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1hdGVyaWFsLmlzRGVmaW5lZCgnU1JHQl9ERUNPREUnKTtcclxuICAgICAgICAgICAgY2FzZSAnYWxwaGFDdXRvZmYnOlxyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBESUZGVVNFTUFQX0FMUEhBX0FMUEhBXHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhbmRhcmRNYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhbHBoYUN1dG9mZiA9IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdhbHBoYUN1dG9mZicpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhbHBoYUN1dG9mZiB8fCAwLjA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMC4wO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHQnVmZmVyIGlzIHByb3ZpZGVkIGZvciBkZWZlcnJlZCByZW5kZXJpbmcgYW5kIFNTQU8sIFNTUiBwYXNzLlxyXG4gKiBJdCB3aWxsIGRvIHRocmVlIHBhc3NlcyByZW5kZXJpbmcgdG8gZm91ciB0YXJnZXQgdGV4dHVyZXMuIFNlZVxyXG4gKiArIHtAbGluayBjbGF5LmRlZmVycmVkLkdCdWZmZXIjZ2V0VGFyZ2V0VGV4dHVyZTF9XHJcbiAqICsge0BsaW5rIGNsYXkuZGVmZXJyZWQuR0J1ZmZlciNnZXRUYXJnZXRUZXh0dXJlMn1cclxuICogKyB7QGxpbmsgY2xheS5kZWZlcnJlZC5HQnVmZmVyI2dldFRhcmdldFRleHR1cmUzfVxyXG4gKiArIHtAbGluayBjbGF5LmRlZmVycmVkLkdCdWZmZXIjZ2V0VGFyZ2V0VGV4dHVyZTR9XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5kZWZlcnJlZC5HQnVmZmVyXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgR0J1ZmZlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgY29tbW9uVGV4dHVyZU9wdHMgPSB7XHJcbiAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgd3JhcFM6IFRleHR1cmUuQ0xBTVBfVE9fRURHRSxcclxuICAgICAgICB3cmFwVDogVGV4dHVyZS5DTEFNUF9UT19FREdFLFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmRlZmVycmVkLkdCdWZmZXIjICovIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIGdidWZmZXIgdGV4dHVyZSAxLlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVuYWJsZVRhcmdldFRleHR1cmUxOiB0cnVlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgZ2J1ZmZlciB0ZXh0dXJlIDIuXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW5hYmxlVGFyZ2V0VGV4dHVyZTI6IHRydWUsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBnYnVmZmVyIHRleHR1cmUgMy5cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbmFibGVUYXJnZXRUZXh0dXJlMzogdHJ1ZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIGdidWZmZXIgdGV4dHVyZSA0LlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVuYWJsZVRhcmdldFRleHR1cmU0OiBmYWxzZSxcclxuXHJcbiAgICAgICAgcmVuZGVyVHJhbnNwYXJlbnQ6IGZhbHNlLFxyXG5cclxuICAgICAgICBfZ0J1ZmZlclJlbmRlckxpc3Q6IFtdLFxyXG4gICAgICAgIC8vIC0gUjogbm9ybWFsLnhcclxuICAgICAgICAvLyAtIEc6IG5vcm1hbC55XHJcbiAgICAgICAgLy8gLSBCOiBub3JtYWwuelxyXG4gICAgICAgIC8vIC0gQTogZ2xvc3NpbmVzc1xyXG4gICAgICAgIF9nQnVmZmVyVGV4MTogbmV3IFRleHR1cmUyRChPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkhBTEZfRkxPQVRcclxuICAgICAgICB9LCBjb21tb25UZXh0dXJlT3B0cykpLFxyXG5cclxuICAgICAgICAvLyAtIFI6IGRlcHRoXHJcbiAgICAgICAgX2dCdWZmZXJUZXgyOiBuZXcgVGV4dHVyZTJEKE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICAvLyBmb3JtYXQ6IFRleHR1cmUuREVQVEhfQ09NUE9ORU5ULFxyXG4gICAgICAgICAgICAvLyB0eXBlOiBUZXh0dXJlLlVOU0lHTkVEX0lOVFxyXG5cclxuICAgICAgICAgICAgZm9ybWF0OiBUZXh0dXJlLkRFUFRIX1NURU5DSUwsXHJcbiAgICAgICAgICAgIHR5cGU6IFRleHR1cmUuVU5TSUdORURfSU5UXzI0XzhfV0VCR0xcclxuICAgICAgICB9LCBjb21tb25UZXh0dXJlT3B0cykpLFxyXG5cclxuICAgICAgICAvLyAtIFI6IGFsYmVkby5yXHJcbiAgICAgICAgLy8gLSBHOiBhbGJlZG8uZ1xyXG4gICAgICAgIC8vIC0gQjogYWxiZWRvLmJcclxuICAgICAgICAvLyAtIEE6IG1ldGFsbmVzc1xyXG4gICAgICAgIF9nQnVmZmVyVGV4MzogbmV3IFRleHR1cmUyRChjb21tb25UZXh0dXJlT3B0cyksXHJcblxyXG4gICAgICAgIF9nQnVmZmVyVGV4NDogbmV3IFRleHR1cmUyRChPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgLy8gRkxPQVQgVGV4dHVyZSBoYXMgYnVnIG9uIGlPUy4gaXMgSEFMRl9GTE9BVCBlbm91Z2g/XHJcbiAgICAgICAgICAgIHR5cGU6IFRleHR1cmUuSEFMRl9GTE9BVFxyXG4gICAgICAgIH0sIGNvbW1vblRleHR1cmVPcHRzKSksXHJcblxyXG4gICAgICAgIF9kZWZhdWx0Tm9ybWFsTWFwOiBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgaW1hZ2U6IGNyZWF0ZUZpbGxDYW52YXMoJyMwMDAnKVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIF9kZWZhdWx0Um91Z2huZXNzTWFwOiBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgaW1hZ2U6IGNyZWF0ZUZpbGxDYW52YXMoJyNmZmYnKVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIF9kZWZhdWx0TWV0YWxuZXNzTWFwOiBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgaW1hZ2U6IGNyZWF0ZUZpbGxDYW52YXMoJyNmZmYnKVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIF9kZWZhdWx0RGlmZnVzZU1hcDogbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjZmZmJylcclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgX2ZyYW1lQnVmZmVyOiBuZXcgRnJhbWVCdWZmZXIoKSxcclxuXHJcbiAgICAgICAgX2dCdWZmZXJNYXRlcmlhbDE6IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlci52ZXJ0ZXgnKSxcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlcjEuZnJhZ21lbnQnKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB2ZXJ0ZXhEZWZpbmVzOiB7XHJcbiAgICAgICAgICAgICAgICBGSVJTVF9QQVNTOiBudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZyYWdtZW50RGVmaW5lczoge1xyXG4gICAgICAgICAgICAgICAgRklSU1RfUEFTUzogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgX2dCdWZmZXJNYXRlcmlhbDI6IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlci52ZXJ0ZXgnKSxcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlcjIuZnJhZ21lbnQnKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB2ZXJ0ZXhEZWZpbmVzOiB7XHJcbiAgICAgICAgICAgICAgICBTRUNPTkRfUEFTUzogbnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmcmFnbWVudERlZmluZXM6IHtcclxuICAgICAgICAgICAgICAgIFNFQ09ORF9QQVNTOiBudWxsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBfZ0J1ZmZlck1hdGVyaWFsMzogbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgc2hhZGVyOiBuZXcgU2hhZGVyKFxyXG4gICAgICAgICAgICAgICAgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5nYnVmZmVyLnZlcnRleCcpLFxyXG4gICAgICAgICAgICAgICAgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5nYnVmZmVyMy5mcmFnbWVudCcpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHZlcnRleERlZmluZXM6IHtcclxuICAgICAgICAgICAgICAgIFRISVJEX1BBU1M6IG51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZnJhZ21lbnREZWZpbmVzOiB7XHJcbiAgICAgICAgICAgICAgICBUSElSRF9QQVNTOiBudWxsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgX2RlYnVnUGFzczogbmV3IFBhc3Moe1xyXG4gICAgICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5nYnVmZmVyLmRlYnVnJylcclxuICAgICAgICB9KVxyXG4gICAgfTtcclxufSwgLyoqIEBsZW5kcyBjbGF5LmRlZmVycmVkLkdCdWZmZXIjICove1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IEcgQnVmZmVyIHNpemUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcclxuICAgICAqL1xyXG4gICAgcmVzaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9nQnVmZmVyVGV4MS53aWR0aCA9PT0gd2lkdGhcclxuICAgICAgICAgICAgJiYgdGhpcy5fZ0J1ZmZlclRleDEuaGVpZ2h0ID09PSBoZWlnaHRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4MS53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXgxLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDIud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4Mi5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXgzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4NC53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXg0LmhlaWdodCA9IGhlaWdodDtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVE9ETyBpcyBkcHIgbmVlZGVkP1xyXG4gICAgc2V0Vmlld3BvcnQ6IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkcHIpIHtcclxuICAgICAgICB2YXIgdmlld3BvcnQ7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICB2aWV3cG9ydCA9IHg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2aWV3cG9ydCA9IHtcclxuICAgICAgICAgICAgICAgIHg6IHgsIHk6IHksXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgZGV2aWNlUGl4ZWxSYXRpbzogZHByIHx8IDFcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudmlld3BvcnQgPSB2aWV3cG9ydDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0Vmlld3BvcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5fZnJhbWVCdWZmZXIudmlld3BvcnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1lQnVmZmVyLnZpZXdwb3J0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHg6IDAsIHk6IDAsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5fZ0J1ZmZlclRleDEud2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMuX2dCdWZmZXJUZXgxLmhlaWdodCxcclxuICAgICAgICAgICAgICAgIGRldmljZVBpeGVsUmF0aW86IDFcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIEdCdWZmZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5DYW1lcmF9IGNhbWVyYVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIG9wdHMpIHtcclxuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIHZhciBmcmFtZUJ1ZmZlciA9IHRoaXMuX2ZyYW1lQnVmZmVyO1xyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IGZyYW1lQnVmZmVyLnZpZXdwb3J0O1xyXG5cclxuICAgICAgICB2YXIgcmVuZGVyTGlzdCA9IHNjZW5lLnVwZGF0ZVJlbmRlckxpc3QoY2FtZXJhLCB0cnVlKTtcclxuXHJcbiAgICAgICAgdmFyIG9wYXF1ZUxpc3QgPSByZW5kZXJMaXN0Lm9wYXF1ZTtcclxuICAgICAgICB2YXIgdHJhbnNwYXJlbnRMaXN0ID0gcmVuZGVyTGlzdC50cmFuc3BhcmVudDtcclxuXHJcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XHJcbiAgICAgICAgdmFyIGdCdWZmZXJSZW5kZXJMaXN0ID0gdGhpcy5fZ0J1ZmZlclJlbmRlckxpc3Q7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcGFxdWVMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghb3BhcXVlTGlzdFtpXS5pZ25vcmVHQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICBnQnVmZmVyUmVuZGVyTGlzdFtvZmZzZXQrK10gPSBvcGFxdWVMaXN0W2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnJlbmRlclRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhbnNwYXJlbnRMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRyYW5zcGFyZW50TGlzdFtpXS5pZ25vcmVHQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ0J1ZmZlclJlbmRlckxpc3Rbb2Zmc2V0KytdID0gdHJhbnNwYXJlbnRMaXN0W2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdCdWZmZXJSZW5kZXJMaXN0Lmxlbmd0aCA9IG9mZnNldDtcclxuXHJcbiAgICAgICAgZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTtcclxuICAgICAgICBnbC5kZXB0aE1hc2sodHJ1ZSk7XHJcbiAgICAgICAgZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xyXG4gICAgICAgIGdsLmRpc2FibGUoZ2wuQkxFTkQpO1xyXG5cclxuICAgICAgICB2YXIgZW5hYmxlVGFyZ2V0VGV4dHVyZTEgPSB0aGlzLmVuYWJsZVRhcmdldFRleHR1cmUxO1xyXG4gICAgICAgIHZhciBlbmFibGVUYXJnZXRUZXh0dXJlMiA9IHRoaXMuZW5hYmxlVGFyZ2V0VGV4dHVyZTI7XHJcbiAgICAgICAgdmFyIGVuYWJsZVRhcmdldFRleHR1cmUzID0gdGhpcy5lbmFibGVUYXJnZXRUZXh0dXJlMztcclxuICAgICAgICB2YXIgZW5hYmxlVGFyZ2V0VGV4dHVyZTQgPSB0aGlzLmVuYWJsZVRhcmdldFRleHR1cmU0O1xyXG4gICAgICAgIGlmICghZW5hYmxlVGFyZ2V0VGV4dHVyZTEgJiYgIWVuYWJsZVRhcmdldFRleHR1cmUzICYmICFlbmFibGVUYXJnZXRUZXh0dXJlNCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NhblxcJ3QgZGlzYWJsZSB0YXJnZXRUZXh0dXJlMSwgdGFyZ2V0VGV4dHVyZTMsIHRhcmdldFRleHR1cmU0IGJvdGgnKTtcclxuICAgICAgICAgICAgZW5hYmxlVGFyZ2V0VGV4dHVyZTEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVuYWJsZVRhcmdldFRleHR1cmUyKSB7XHJcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChvcHRzLnRhcmdldFRleHR1cmUyIHx8IHRoaXMuX2dCdWZmZXJUZXgyLCByZW5kZXJlci5nbC5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gY2xlYXJWaWV3cG9ydCgpIHtcclxuICAgICAgICAgICAgaWYgKHZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZHByID0gdmlld3BvcnQuZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICAgICAgICAgIC8vIHVzZSBzY2lzc29yIHRvIG1ha2Ugc3VyZSBvbmx5IGNsZWFyIHRoZSB2aWV3cG9ydFxyXG4gICAgICAgICAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XHJcbiAgICAgICAgICAgICAgICBnbC5zY2lzc29yKHZpZXdwb3J0LnggKiBkcHIsIHZpZXdwb3J0LnkgKiBkcHIsIHZpZXdwb3J0LndpZHRoICogZHByLCB2aWV3cG9ydC5oZWlnaHQgKiBkcHIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJfQklUKTtcclxuICAgICAgICAgICAgaWYgKHZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgICAgICBnbC5kaXNhYmxlKGdsLlNDSVNTT1JfVEVTVCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGlzTWF0ZXJpYWxDaGFuZ2VkKHJlbmRlcmFibGUsIHByZXZSZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLm1hdGVyaWFsICE9PSBwcmV2UmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFBFTkRJTkcsIHNjZW5lLmJvdW5kaW5nQm94TGFzdEZyYW1lIG5lZWRzIGJlIHVwZGF0ZWQgaWYgaGF2ZSBzaGFkb3dcclxuICAgICAgICByZW5kZXJlci5iaW5kU2NlbmVSZW5kZXJpbmcoc2NlbmUpO1xyXG4gICAgICAgIGlmIChlbmFibGVUYXJnZXRUZXh0dXJlMSkge1xyXG4gICAgICAgICAgICAvLyBQYXNzIDFcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYXR0YWNoKG9wdHMudGFyZ2V0VGV4dHVyZTEgfHwgdGhpcy5fZ0J1ZmZlclRleDEpO1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIGNsZWFyVmlld3BvcnQoKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBnQnVmZmVyTWF0ZXJpYWwxID0gdGhpcy5fZ0J1ZmZlck1hdGVyaWFsMTtcclxuICAgICAgICAgICAgdmFyIHBhc3NDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnQnVmZmVyTWF0ZXJpYWwxO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGdldFVuaWZvcm06IGdldEdldFVuaWZvcm1Ib29rMSh0aGlzLl9kZWZhdWx0Tm9ybWFsTWFwLCB0aGlzLl9kZWZhdWx0Um91Z2huZXNzTWFwLCB0aGlzLl9kZWZhdWx0RGlmZnVzZU1hcCksXHJcbiAgICAgICAgICAgICAgICBpc01hdGVyaWFsQ2hhbmdlZDogaXNNYXRlcmlhbENoYW5nZWQsXHJcbiAgICAgICAgICAgICAgICBzb3J0Q29tcGFyZTogcmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy8gRklYTUUgVXNlIE1SVCBpZiBwb3NzaWJsZVxyXG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKGdCdWZmZXJSZW5kZXJMaXN0LCBjYW1lcmEsIHBhc3NDb25maWcpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVuYWJsZVRhcmdldFRleHR1cmUzKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBQYXNzIDJcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYXR0YWNoKG9wdHMudGFyZ2V0VGV4dHVyZTMgfHwgdGhpcy5fZ0J1ZmZlclRleDMpO1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIGNsZWFyVmlld3BvcnQoKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBnQnVmZmVyTWF0ZXJpYWwyID0gdGhpcy5fZ0J1ZmZlck1hdGVyaWFsMjtcclxuICAgICAgICAgICAgdmFyIHBhc3NDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICBnZXRNYXRlcmlhbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnQnVmZmVyTWF0ZXJpYWwyO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGdldFVuaWZvcm06IGdldEdldFVuaWZvcm1Ib29rMih0aGlzLl9kZWZhdWx0RGlmZnVzZU1hcCwgdGhpcy5fZGVmYXVsdE1ldGFsbmVzc01hcCksXHJcbiAgICAgICAgICAgICAgICBpc01hdGVyaWFsQ2hhbmdlZDogaXNNYXRlcmlhbENoYW5nZWQsXHJcbiAgICAgICAgICAgICAgICBzb3J0Q29tcGFyZTogcmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhnQnVmZmVyUmVuZGVyTGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbmFibGVUYXJnZXRUZXh0dXJlNCkge1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYXR0YWNoKG9wdHMudGFyZ2V0VGV4dHVyZTQgfHwgdGhpcy5fZ0J1ZmZlclRleDQpO1xyXG5cclxuICAgICAgICAgICAgY2xlYXJWaWV3cG9ydCgpO1xyXG5cclxuICAgICAgICAgICAgLy8gUmVtb3ZlIGppdHRlcmluZyBpbiB0ZW1wb3JhbCBhYS5cclxuICAgICAgICAgICAgLy8gUEVORElORy4gQmV0dGVyIHNvbHV0aW9uP1xyXG4gICAgICAgICAgICBjYW1lcmEudXBkYXRlKCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZ0J1ZmZlck1hdGVyaWFsMyA9IHRoaXMuX2dCdWZmZXJNYXRlcmlhbDM7XHJcbiAgICAgICAgICAgIHZhciBjYW1lcmFWaWV3UHJvaiA9IG1hdDQuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgIG1hdDQubXVsdGlwbHkoY2FtZXJhVmlld1Byb2osIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmFycmF5LCBjYW1lcmEudmlld01hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ0J1ZmZlck1hdGVyaWFsMztcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCByZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzU2tpbm5lZE1lc2ggPSByZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2goKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTa2lubmVkTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2tlbGV0b24gPSByZW5kZXJhYmxlLnNrZWxldG9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgam9pbnRzID0gcmVuZGVyYWJsZS5qb2ludHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqb2ludHMubGVuZ3RoID4gcmVuZGVyZXIuZ2V0TWF4Sm9pbnROdW1iZXIoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNraW5NYXRyaWNlc1RleHR1cmUgPSBza2VsZXRvbi5nZXRTdWJTa2luTWF0cmljZXNUZXh0dXJlKHJlbmRlcmFibGUuX191aWRfXywgam9pbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZSA9IHJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzVGV4dHVyZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJldlNraW5NYXRyaWNlc1RleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZSA9IHJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzVGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkZMT0FULFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZU1pcG1hcDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsaXBZOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHMubGVuZ3RoICE9PSBza2luTWF0cmljZXNUZXh0dXJlLnBpeGVscy5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZTa2luTWF0cmljZXNUZXh0dXJlLnBpeGVscyA9IG5ldyBGbG9hdDMyQXJyYXkoc2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBza2luTWF0cmljZXNUZXh0dXJlLnBpeGVscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHNbaV0gPSBza2luTWF0cmljZXNUZXh0dXJlLnBpeGVsc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS53aWR0aCA9IHNraW5NYXRyaWNlc1RleHR1cmUud2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS5oZWlnaHQgPSBza2luTWF0cmljZXNUZXh0dXJlLmhlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBza2luTWF0cmljZXNBcnJheSA9IHNrZWxldG9uLmdldFN1YlNraW5NYXRyaWNlcyhyZW5kZXJhYmxlLl9fdWlkX18sIGpvaW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzQXJyYXkgfHwgcmVuZGVyYWJsZS5fX3ByZXZTa2luTWF0cmljZXNBcnJheS5sZW5ndGggIT09IHNraW5NYXRyaWNlc0FycmF5Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHNraW5NYXRyaWNlc0FycmF5Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc0FycmF5LnNldChza2luTWF0cmljZXNBcnJheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyYWJsZS5fX3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uID0gcmVuZGVyYWJsZS5fX3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uIHx8IG1hdDQuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIHdvcmxkIHRyYW5zZm9ybSBvZiBza2lubmVkIG1lc2guXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdDQuY29weShyZW5kZXJhYmxlLl9fcHJldldvcmxkVmlld1Byb2plY3Rpb24sIGNhbWVyYVZpZXdQcm9qKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdDQubXVsdGlwbHkocmVuZGVyYWJsZS5fX3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uLCBjYW1lcmFWaWV3UHJvaiwgcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGdldFVuaWZvcm06IGZ1bmN0aW9uIChyZW5kZXJhYmxlLCBnQnVmZmVyTWF0LCBzeW1ib2wpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sID09PSAncHJldldvcmxkVmlld1Byb2plY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLl9fcHJldldvcmxkVmlld1Byb2plY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3ByZXZTa2luTWF0cml4Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5fX3ByZXZTa2luTWF0cmljZXNBcnJheTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAncHJldlNraW5NYXRyaWNlc1RleHR1cmUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc1RleHR1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ2ZpcnN0UmVuZGVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXJlbmRlcmFibGUuX19wcmV2V29ybGRWaWV3UHJvamVjdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnQnVmZmVyTWF0LmdldChzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBpc01hdGVyaWFsQ2hhbmdlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyB1cGRhdGUgcHJldldvcmxkVmlld1Byb2plY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzb3J0Q29tcGFyZTogcmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmVcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoZ0J1ZmZlclJlbmRlckxpc3QsIGNhbWVyYSwgcGFzc0NvbmZpZyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXJlci5iaW5kU2NlbmVSZW5kZXJpbmcobnVsbCk7XHJcbiAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWJ1ZyBvdXRwdXQgb2YgZ0J1ZmZlci4gVXNlIGB0eXBlYCBwYXJhbWV0ZXIgdG8gY2hvb3MgdGhlIGRlYnVnIG91dHB1dCB0eXBlLCB3aGljaCBjYW4gYmU6XHJcbiAgICAgKlxyXG4gICAgICogKyAnbm9ybWFsJ1xyXG4gICAgICogKyAnZGVwdGgnXHJcbiAgICAgKiArICdwb3NpdGlvbidcclxuICAgICAqICsgJ2dsb3NzaW5lc3MnXHJcbiAgICAgKiArICdtZXRhbG5lc3MnXHJcbiAgICAgKiArICdhbGJlZG8nXHJcbiAgICAgKiArICd2ZWxvY2l0eSdcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdHlwZT0nbm9ybWFsJ11cclxuICAgICAqL1xyXG4gICAgcmVuZGVyRGVidWc6IGZ1bmN0aW9uIChyZW5kZXJlciwgY2FtZXJhLCB0eXBlLCB2aWV3cG9ydCkge1xyXG4gICAgICAgIHZhciBkZWJ1Z1R5cGVzID0ge1xyXG4gICAgICAgICAgICBub3JtYWw6IDAsXHJcbiAgICAgICAgICAgIGRlcHRoOiAxLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogMixcclxuICAgICAgICAgICAgZ2xvc3NpbmVzczogMyxcclxuICAgICAgICAgICAgbWV0YWxuZXNzOiA0LFxyXG4gICAgICAgICAgICBhbGJlZG86IDUsXHJcbiAgICAgICAgICAgIHZlbG9jaXR5OiA2XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoZGVidWdUeXBlc1t0eXBlXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5rb3duIHR5cGUgXCInICsgdHlwZSArICdcIicpO1xyXG4gICAgICAgICAgICAvLyBEZWZhdWx0IHVzZSBub3JtYWxcclxuICAgICAgICAgICAgdHlwZSA9ICdub3JtYWwnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyZXIuc2F2ZUNsZWFyKCk7XHJcbiAgICAgICAgcmVuZGVyZXIuc2F2ZVZpZXdwb3J0KCk7XHJcbiAgICAgICAgcmVuZGVyZXIuY2xlYXJCaXQgPSByZW5kZXJlci5nbC5ERVBUSF9CVUZGRVJfQklUO1xyXG5cclxuICAgICAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodmlld3BvcnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdmlld1Byb2plY3Rpb25JbnYgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIE1hdHJpeDQubXVsdGlwbHkodmlld1Byb2plY3Rpb25JbnYsIGNhbWVyYS53b3JsZFRyYW5zZm9ybSwgY2FtZXJhLmludlByb2plY3Rpb25NYXRyaXgpO1xyXG5cclxuICAgICAgICB2YXIgZGVidWdQYXNzID0gdGhpcy5fZGVidWdQYXNzO1xyXG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCd2aWV3cG9ydFNpemUnLCBbcmVuZGVyZXIuZ2V0V2lkdGgoKSwgcmVuZGVyZXIuZ2V0SGVpZ2h0KCldKTtcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUxJywgdGhpcy5fZ0J1ZmZlclRleDEpO1xyXG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTInLCB0aGlzLl9nQnVmZmVyVGV4Mik7XHJcbiAgICAgICAgZGVidWdQYXNzLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMycsIHRoaXMuX2dCdWZmZXJUZXgzKTtcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmU0JywgdGhpcy5fZ0J1ZmZlclRleDQpO1xyXG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCdkZWJ1ZycsIGRlYnVnVHlwZXNbdHlwZV0pO1xyXG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCd2aWV3UHJvamVjdGlvbkludicsIHZpZXdQcm9qZWN0aW9uSW52LmFycmF5KTtcclxuICAgICAgICBkZWJ1Z1Bhc3MucmVuZGVyKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgcmVuZGVyZXIucmVzdG9yZVZpZXdwb3J0KCk7XHJcbiAgICAgICAgcmVuZGVyZXIucmVzdG9yZUNsZWFyKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGZpcnN0IHRhcmdldCB0ZXh0dXJlLlxyXG4gICAgICogQ2hhbm5lbCBzdG9yYWdlOlxyXG4gICAgICogKyBSOiBub3JtYWwueCAqIDAuNSArIDAuNVxyXG4gICAgICogKyBHOiBub3JtYWwueSAqIDAuNSArIDAuNVxyXG4gICAgICogKyBCOiBub3JtYWwueiAqIDAuNSArIDAuNVxyXG4gICAgICogKyBBOiBnbG9zc2luZXNzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAqL1xyXG4gICAgZ2V0VGFyZ2V0VGV4dHVyZTE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ0J1ZmZlclRleDE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHNlY29uZCB0YXJnZXQgdGV4dHVyZS5cclxuICAgICAqIENoYW5uZWwgc3RvcmFnZTpcclxuICAgICAqICsgUjogZGVwdGhcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICovXHJcbiAgICBnZXRUYXJnZXRUZXh0dXJlMjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nQnVmZmVyVGV4MjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhpcmQgdGFyZ2V0IHRleHR1cmUuXHJcbiAgICAgKiBDaGFubmVsIHN0b3JhZ2U6XHJcbiAgICAgKiArIFI6IGFsYmVkby5yXHJcbiAgICAgKiArIEc6IGFsYmVkby5nXHJcbiAgICAgKiArIEI6IGFsYmVkby5iXHJcbiAgICAgKiArIEE6IG1ldGFsbmVzc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgKi9cclxuICAgIGdldFRhcmdldFRleHR1cmUzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dCdWZmZXJUZXgzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBmb3VydGggdGFyZ2V0IHRleHR1cmUuXHJcbiAgICAgKiBDaGFubmVsIHN0b3JhZ2U6XHJcbiAgICAgKiArIFI6IHZlbG9jaXR5LnJcclxuICAgICAqICsgRzogdmVsb2NpdHkuZ1xyXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgKi9cclxuICAgIGdldFRhcmdldFRleHR1cmU0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dCdWZmZXJUZXg0O1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4MS5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4Mi5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4My5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdE5vcm1hbE1hcC5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9kZWZhdWx0Um91Z2huZXNzTWFwLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRNZXRhbG5lc3NNYXAuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdERpZmZ1c2VNYXAuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgR0J1ZmZlcjsiLCJpbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5pbXBvcnQgdmVjMiBmcm9tICcuLi9nbG1hdHJpeC92ZWMyJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5nZW9tZXRyeS5Db25lXHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LnRvcFJhZGl1c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuYm90dG9tUmFkaXVzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5oZWlnaHRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmNhcFNlZ21lbnRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5oZWlnaHRTZWdtZW50c11cclxuICovXHJcbnZhciBDb25lID0gR2VvbWV0cnkuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5Db25lIyAqLyB7XHJcbiAgICBkeW5hbWljOiBmYWxzZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdG9wUmFkaXVzOiAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYm90dG9tUmFkaXVzOiAxLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaGVpZ2h0OiAyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY2FwU2VnbWVudHM6IDIwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaGVpZ2h0U2VnbWVudHM6IDFcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmJ1aWxkKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5Db25lLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGNvbmUgZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBbXTtcclxuICAgICAgICB2YXIgdGV4Y29vcmRzID0gW107XHJcbiAgICAgICAgdmFyIGZhY2VzID0gW107XHJcbiAgICAgICAgcG9zaXRpb25zLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGV4Y29vcmRzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgZmFjZXMubGVuZ3RoID0gMDtcclxuICAgICAgICAvLyBUb3AgY2FwXHJcbiAgICAgICAgdmFyIGNhcFNlZ1JhZGlhbCA9IE1hdGguUEkgKiAyIC8gdGhpcy5jYXBTZWdtZW50cztcclxuXHJcbiAgICAgICAgdmFyIHRvcENhcCA9IFtdO1xyXG4gICAgICAgIHZhciBib3R0b21DYXAgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIHIxID0gdGhpcy50b3BSYWRpdXM7XHJcbiAgICAgICAgdmFyIHIyID0gdGhpcy5ib3R0b21SYWRpdXM7XHJcbiAgICAgICAgdmFyIHkgPSB0aGlzLmhlaWdodCAvIDI7XHJcblxyXG4gICAgICAgIHZhciBjMSA9IHZlYzMuZnJvbVZhbHVlcygwLCB5LCAwKTtcclxuICAgICAgICB2YXIgYzIgPSB2ZWMzLmZyb21WYWx1ZXMoMCwgLXksIDApO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jYXBTZWdtZW50czsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB0aGV0YSA9IGkgKiBjYXBTZWdSYWRpYWw7XHJcbiAgICAgICAgICAgIHZhciB4ID0gcjEgKiBNYXRoLnNpbih0aGV0YSk7XHJcbiAgICAgICAgICAgIHZhciB6ID0gcjEgKiBNYXRoLmNvcyh0aGV0YSk7XHJcbiAgICAgICAgICAgIHRvcENhcC5wdXNoKHZlYzMuZnJvbVZhbHVlcyh4LCB5LCB6KSk7XHJcblxyXG4gICAgICAgICAgICB4ID0gcjIgKiBNYXRoLnNpbih0aGV0YSk7XHJcbiAgICAgICAgICAgIHogPSByMiAqIE1hdGguY29zKHRoZXRhKTtcclxuICAgICAgICAgICAgYm90dG9tQ2FwLnB1c2godmVjMy5mcm9tVmFsdWVzKHgsIC15LCB6KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBCdWlsZCB0b3AgY2FwXHJcbiAgICAgICAgcG9zaXRpb25zLnB1c2goYzEpO1xyXG4gICAgICAgIC8vIEZJWE1FXHJcbiAgICAgICAgdGV4Y29vcmRzLnB1c2godmVjMi5mcm9tVmFsdWVzKDAsIDEpKTtcclxuICAgICAgICB2YXIgbiA9IHRoaXMuY2FwU2VnbWVudHM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcG9zaXRpb25zLnB1c2godG9wQ2FwW2ldKTtcclxuICAgICAgICAgICAgLy8gRklYTUVcclxuICAgICAgICAgICAgdGV4Y29vcmRzLnB1c2godmVjMi5mcm9tVmFsdWVzKGkgLyBuLCAwKSk7XHJcbiAgICAgICAgICAgIGZhY2VzLnB1c2goWzAsIGkrMSwgKGkrMSkgJSBuICsgMV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQnVpbGQgYm90dG9tIGNhcFxyXG4gICAgICAgIHZhciBvZmZzZXQgPSBwb3NpdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIHBvc2l0aW9ucy5wdXNoKGMyKTtcclxuICAgICAgICB0ZXhjb29yZHMucHVzaCh2ZWMyLmZyb21WYWx1ZXMoMCwgMSkpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKGJvdHRvbUNhcFtpXSk7XHJcbiAgICAgICAgICAgIC8vIEZJWE1FXHJcbiAgICAgICAgICAgIHRleGNvb3Jkcy5wdXNoKHZlYzIuZnJvbVZhbHVlcyhpIC8gbiwgMCkpO1xyXG4gICAgICAgICAgICBmYWNlcy5wdXNoKFtvZmZzZXQsIG9mZnNldCsoKGkrMSkgJSBuICsgMSksIG9mZnNldCtpKzFdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEJ1aWxkIHNpZGVcclxuICAgICAgICBvZmZzZXQgPSBwb3NpdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgIHZhciBuMiA9IHRoaXMuaGVpZ2h0U2VnbWVudHM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuMisxOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB2ID0gaiAvIG4yO1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2godmVjMy5sZXJwKHZlYzMuY3JlYXRlKCksIHRvcENhcFtpXSwgYm90dG9tQ2FwW2ldLCB2KSk7XHJcbiAgICAgICAgICAgICAgICB0ZXhjb29yZHMucHVzaCh2ZWMyLmZyb21WYWx1ZXMoaSAvIG4sIHYpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG4yOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBpMSA9IGkgKiAobjIgKyAxKSArIGo7XHJcbiAgICAgICAgICAgICAgICB2YXIgaTIgPSAoKGkgKyAxKSAlIG4pICogKG4yICsgMSkgKyBqO1xyXG4gICAgICAgICAgICAgICAgdmFyIGkzID0gKChpICsgMSkgJSBuKSAqIChuMiArIDEpICsgaiArIDE7XHJcbiAgICAgICAgICAgICAgICB2YXIgaTQgPSBpICogKG4yICsgMSkgKyBqICsgMTtcclxuICAgICAgICAgICAgICAgIGZhY2VzLnB1c2goW29mZnNldCtpMiwgb2Zmc2V0K2kxLCBvZmZzZXQraTRdKTtcclxuICAgICAgICAgICAgICAgIGZhY2VzLnB1c2goW29mZnNldCtpNCwgb2Zmc2V0K2kzLCBvZmZzZXQraTJdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLmZyb21BcnJheShwb3NpdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy50ZXhjb29yZDAuZnJvbUFycmF5KHRleGNvb3Jkcyk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdEluZGljZXNGcm9tQXJyYXkoZmFjZXMpO1xyXG5cclxuICAgICAgICB0aGlzLmdlbmVyYXRlVmVydGV4Tm9ybWFscygpO1xyXG5cclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdmFyIHIgPSBNYXRoLm1heCh0aGlzLnRvcFJhZGl1cywgdGhpcy5ib3R0b21SYWRpdXMpO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldCgtciwgLXRoaXMuaGVpZ2h0LzIsIC1yKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1heC5zZXQociwgdGhpcy5oZWlnaHQvMiwgcik7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ29uZTtcclxuIiwiaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IENvbmVHZW9tZXRyeSBmcm9tICcuL0NvbmUnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lmdlb21ldHJ5LkN5bGluZGVyXHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LnJhZGl1c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5jYXBTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0U2VnbWVudHNdXHJcbiAqL1xyXG52YXIgQ3lsaW5kZXIgPSBHZW9tZXRyeS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5DeWxpbmRlciMgKi9cclxue1xyXG4gICAgZHluYW1pYzogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJhZGl1czogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodDogMixcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNhcFNlZ21lbnRzOiA1MCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodFNlZ21lbnRzOiAxXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ3lsaW5kZXIucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgY3lsaW5kZXIgZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBjb25lID0gbmV3IENvbmVHZW9tZXRyeSh7XHJcbiAgICAgICAgICAgIHRvcFJhZGl1czogdGhpcy5yYWRpdXMsXHJcbiAgICAgICAgICAgIGJvdHRvbVJhZGl1czogdGhpcy5yYWRpdXMsXHJcbiAgICAgICAgICAgIGNhcFNlZ21lbnRzOiB0aGlzLmNhcFNlZ21lbnRzLFxyXG4gICAgICAgICAgICBoZWlnaHRTZWdtZW50czogdGhpcy5oZWlnaHRTZWdtZW50cyxcclxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWUgPSBjb25lLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWU7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZSA9IGNvbmUuYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnRleGNvb3JkMC52YWx1ZSA9IGNvbmUuYXR0cmlidXRlcy50ZXhjb29yZDAudmFsdWU7XHJcbiAgICAgICAgdGhpcy5pbmRpY2VzID0gY29uZS5pbmRpY2VzO1xyXG5cclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gY29uZS5ib3VuZGluZ0JveDtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDeWxpbmRlcjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQubGlnaHRfdm9sdW1lLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbnZhcnlpbmcgdmVjMyB2X1Bvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbiB2X1Bvc2l0aW9uID0gcG9zaXRpb247XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuc3BvdF9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0RGlyZWN0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gZmxvYXQgdW1icmFBbmdsZUNvc2luZTtcXG51bmlmb3JtIGZsb2F0IHBlbnVtYnJhQW5nbGVDb3NpbmU7XFxudW5pZm9ybSBmbG9hdCBsaWdodFJhbmdlO1xcbnVuaWZvcm0gZmxvYXQgZmFsbG9mZkZhY3RvcjtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRTaGFkb3dNYXA7XFxudW5pZm9ybSBtYXQ0IGxpZ2h0TWF0cml4O1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRTaGFkb3dNYXBTaXplO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG52b2lkIG1haW4oKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gcG9zaXRpb247XFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gTCAvPSBkaXN0O1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgbGlnaHRSYW5nZSk7XFxuIGZsb2F0IGMgPSBkb3QoLW5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiksIEwpO1xcbiBmbG9hdCBmYWxsb2ZmID0gY2xhbXAoKGMgLSB1bWJyYUFuZ2xlQ29zaW5lKSAvIChwZW51bWJyYUFuZ2xlQ29zaW5lIC0gdW1icmFBbmdsZUNvc2luZSksIDAuMCwgMS4wKTtcXG4gZmFsbG9mZiA9IHBvdyhmYWxsb2ZmLCBmYWxsb2ZmRmFjdG9yKTtcXG4gdmVjMyBIID0gbm9ybWFsaXplKEwgKyBWKTtcXG4gZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9ICgxLjAgLSBmYWxsb2ZmKSAqIGF0dGVudWF0aW9uICogbGlnaHRFcXVhdGlvbihcXG4gbGlnaHRDb2xvciwgZGlmZnVzZUNvbG9yLCBzcGVjdWxhckNvbG9yLCBuZGwsIG5kaCwgbmR2LCBnbG9zc2luZXNzXFxuICk7XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYihcXG4gbGlnaHRTaGFkb3dNYXAsIGxpZ2h0TWF0cml4LCBwb3NpdGlvbiwgbGlnaHRTaGFkb3dNYXBTaXplXFxuICk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gc2hhZG93Q29udHJpYjtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcXG5cIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuZGlyZWN0aW9uYWxfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodERpcmVjdGlvbjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRTaGFkb3dNYXA7XFxudW5pZm9ybSBmbG9hdCBsaWdodFNoYWRvd01hcFNpemU7XFxudW5pZm9ybSBtYXQ0IGxpZ2h0TWF0cmljZXNbU0hBRE9XX0NBU0NBREVdO1xcbnVuaWZvcm0gZmxvYXQgc2hhZG93Q2FzY2FkZUNsaXBzTmVhcltTSEFET1dfQ0FTQ0FERV07XFxudW5pZm9ybSBmbG9hdCBzaGFkb3dDYXNjYWRlQ2xpcHNGYXJbU0hBRE9XX0NBU0NBREVdO1xcbiNlbmRpZlxcbkBpbXBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG52b2lkIG1haW4oKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMzIEwgPSAtbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uKTtcXG4gdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvc2l0aW9uIC0gcG9zaXRpb24pO1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kdiA9IGNsYW1wKGRvdChOLCBWKSwgMC4wLCAxLjApO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRFcXVhdGlvbihcXG4gbGlnaHRDb2xvciwgZGlmZnVzZUNvbG9yLCBzcGVjdWxhckNvbG9yLCBuZGwsIG5kaCwgbmR2LCBnbG9zc2luZXNzXFxuICk7XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuIGZvciAoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBTSEFET1dfQ0FTQ0FERTsgX2lkeF8rKykge3tcXG4gaWYgKFxcbiB6ID49IHNoYWRvd0Nhc2NhZGVDbGlwc05lYXJbX2lkeF9dICYmXFxuIHogPD0gc2hhZG93Q2FzY2FkZUNsaXBzRmFyW19pZHhfXVxcbiApIHtcXG4gc2hhZG93Q29udHJpYiA9IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiBsaWdodFNoYWRvd01hcCwgbGlnaHRNYXRyaWNlc1tfaWR4X10sIHBvc2l0aW9uLCBsaWdodFNoYWRvd01hcFNpemUsXFxuIHZlYzIoMS4wIC8gZmxvYXQoU0hBRE9XX0NBU0NBREUpLCAxLjApLFxcbiB2ZWMyKGZsb2F0KF9pZHhfKSAvIGZsb2F0KFNIQURPV19DQVNDQURFKSwgMC4wKVxcbiApO1xcbiB9XFxuIH19XFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gc2hhZG93Q29udHJpYjtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcXG5cIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuYW1iaWVudF9saWdodFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMTtcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTM7XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSB2ZWMyIHdpbmRvd1NpemU6IFdJTkRPV19TSVpFO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC8gd2luZG93U2l6ZTtcXG4gdmVjNCB0ZXhlbDEgPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUxLCB1dik7XFxuIGlmIChkb3QodGV4ZWwxLnJnYiwgdmVjMygxLjApKSA9PSAwLjApIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiB2ZWMzIGFsYmVkbyA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTMsIHV2KS5yZ2I7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBsaWdodENvbG9yICogYWxiZWRvO1xcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5hbWJpZW50X3NoX2xpZ2h0XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUxO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMztcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2VmZmljaWVudHNbOV07XFxudW5pZm9ybSB2ZWMyIHdpbmRvd1NpemU6IFdJTkRPV19TSVpFO1xcbnZlYzMgY2FsY0FtYmllbnRTSExpZ2h0KHZlYzMgTikge1xcbiByZXR1cm4gbGlnaHRDb2VmZmljaWVudHNbMF1cXG4gKyBsaWdodENvZWZmaWNpZW50c1sxXSAqIE4ueFxcbiArIGxpZ2h0Q29lZmZpY2llbnRzWzJdICogTi55XFxuICsgbGlnaHRDb2VmZmljaWVudHNbM10gKiBOLnpcXG4gKyBsaWdodENvZWZmaWNpZW50c1s0XSAqIE4ueCAqIE4uelxcbiArIGxpZ2h0Q29lZmZpY2llbnRzWzVdICogTi56ICogTi55XFxuICsgbGlnaHRDb2VmZmljaWVudHNbNl0gKiBOLnkgKiBOLnhcXG4gKyBsaWdodENvZWZmaWNpZW50c1s3XSAqICgzLjAgKiBOLnogKiBOLnogLSAxLjApXFxuICsgbGlnaHRDb2VmZmljaWVudHNbOF0gKiAoTi54ICogTi54IC0gTi55ICogTi55KTtcXG59XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzIgdXYgPSBnbF9GcmFnQ29vcmQueHkgLyB3aW5kb3dTaXplO1xcbiB2ZWM0IHRleGVsMSA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTEsIHV2KTtcXG4gaWYgKGRvdCh0ZXhlbDEucmdiLCB2ZWMzKDEuMCkpID09IDAuMCkge1xcbiBkaXNjYXJkO1xcbiB9XFxuIHZlYzMgTiA9IHRleGVsMS5yZ2IgKiAyLjAgLSAxLjA7XFxuIHZlYzMgYWxiZWRvID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMywgdXYpLnJnYjtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGxpZ2h0Q29sb3IgKiBhbGJlZG8gKiBjYWxjQW1iaWVudFNITGlnaHQoTik7XFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmFtYmllbnRfY3ViZW1hcF9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSBzYW1wbGVyQ3ViZSBsaWdodEN1YmVtYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgYnJkZkxvb2t1cDtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiBAaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gdmVjMyBMID0gcmVmbGVjdCgtViwgTik7XFxuIGZsb2F0IG5kdiA9IGNsYW1wKGRvdChOLCBWKSwgMC4wLCAxLjApO1xcbiBmbG9hdCByb3VnaCA9IGNsYW1wKDEuMCAtIGdsb3NzaW5lc3MsIDAuMCwgMS4wKTtcXG4gZmxvYXQgYmlhcyA9IHJvdWdoICogNS4wO1xcbiB2ZWMyIGJyZGZQYXJhbSA9IHRleHR1cmUyRChicmRmTG9va3VwLCB2ZWMyKHJvdWdoLCBuZHYpKS54eTtcXG4gdmVjMyBlbnZXZWlnaHQgPSBzcGVjdWxhckNvbG9yICogYnJkZlBhcmFtLnggKyBicmRmUGFyYW0ueTtcXG4gdmVjMyBlbnZUZXhlbCA9IFJHQk1EZWNvZGUodGV4dHVyZUN1YmVMb2RFWFQobGlnaHRDdWJlbWFwLCBMLCBiaWFzKSwgOC4xMik7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBsaWdodENvbG9yICogZW52VGV4ZWwgKiBlbnZXZWlnaHQ7XFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLnBvaW50X2xpZ2h0XFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2hlYWRcXG5AaW1wb3J0IGNsYXkudXRpbC5jYWxjdWxhdGVfYXR0ZW51YXRpb25cXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfZXF1YXRpb25cXG51bmlmb3JtIHZlYzMgbGlnaHRQb3NpdGlvbjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIGZsb2F0IGxpZ2h0UmFuZ2U7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlckN1YmUgbGlnaHRTaGFkb3dNYXA7XFxudW5pZm9ybSBmbG9hdCBsaWdodFNoYWRvd01hcFNpemU7XFxuI2VuZGlmXFxudmFyeWluZyB2ZWMzIHZfUG9zaXRpb247XFxuQGltcG9ydCBjbGF5LnBsdWdpbi5zaGFkb3dfbWFwX2NvbW1vblxcbnZvaWQgbWFpbigpXFxue1xcbiBAaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuIHZlYzMgTCA9IGxpZ2h0UG9zaXRpb24gLSBwb3NpdGlvbjtcXG4gdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvc2l0aW9uIC0gcG9zaXRpb24pO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiBMIC89IGRpc3Q7XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kbCA9IGNsYW1wKGRvdChOLCBMKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IGF0dGVudWF0aW9uID0gbGlnaHRBdHRlbnVhdGlvbihkaXN0LCBsaWdodFJhbmdlKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGF0dGVudWF0aW9uICogbGlnaHRFcXVhdGlvbihcXG4gbGlnaHRDb2xvciwgZGlmZnVzZUNvbG9yLCBzcGVjdWxhckNvbG9yLCBuZGwsIG5kaCwgbmR2LCBnbG9zc2luZXNzXFxuICk7XFxuI2lmZGVmIFNIQURPV01BUF9FTkFCTEVEXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYk9tbmkoXFxuIGxpZ2h0U2hhZG93TWFwLCAtTCAqIGRpc3QsIGxpZ2h0UmFuZ2VcXG4gKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiAqPSBjbGFtcChzaGFkb3dDb250cmliLCAwLjAsIDEuMCk7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLnNwaGVyZV9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSBmbG9hdCBsaWdodFJhbmdlO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRSYWRpdXM7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMyB2X1Bvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiBAaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuIHZlYzMgTCA9IGxpZ2h0UG9zaXRpb24gLSBwb3NpdGlvbjtcXG4gdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvc2l0aW9uIC0gcG9zaXRpb24pO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiB2ZWMzIFIgPSByZWZsZWN0KFYsIE4pO1xcbiBmbG9hdCB0bXAgPSBkb3QoTCwgUik7XFxuIHZlYzMgY1RvUiA9IHRtcCAqIFIgLSBMO1xcbiBmbG9hdCBkID0gbGVuZ3RoKGNUb1IpO1xcbiBMID0gTCArIGNUb1IgKiBjbGFtcChsaWdodFJhZGl1cyAvIGQsIDAuMCwgMS4wKTtcXG4gTCA9IG5vcm1hbGl6ZShMKTtcXG4gdmVjMyBIID0gbm9ybWFsaXplKEwgKyBWKTtcXG4gZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIGxpZ2h0UmFuZ2UpO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRDb2xvciAqIG5kbCAqIGF0dGVudWF0aW9uO1xcbiBnbG9zc2luZXNzID0gY2xhbXAoZ2xvc3NpbmVzcyAtIGxpZ2h0UmFkaXVzIC8gMi4wIC8gZGlzdCwgMC4wLCAxLjApO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gYXR0ZW51YXRpb24gKiBsaWdodEVxdWF0aW9uKFxcbiBsaWdodENvbG9yLCBkaWZmdXNlQ29sb3IsIHNwZWN1bGFyQ29sb3IsIG5kbCwgbmRoLCBuZHYsIGdsb3NzaW5lc3NcXG4gKTtcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQudHViZV9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSBmbG9hdCBsaWdodFJhbmdlO1xcbnVuaWZvcm0gdmVjMyBsaWdodEV4dGVuZDtcXG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZfUG9zaXRpb247XFxudm9pZCBtYWluKClcXG57XFxuIEBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5nYnVmZmVyX3JlYWRcXG4gdmVjMyBMID0gbGlnaHRQb3NpdGlvbiAtIHBvc2l0aW9uO1xcbiB2ZWMzIFYgPSBub3JtYWxpemUoZXllUG9zaXRpb24gLSBwb3NpdGlvbik7XFxuIHZlYzMgUiA9IHJlZmxlY3QoViwgTik7XFxuIHZlYzMgTDAgPSBsaWdodFBvc2l0aW9uIC0gbGlnaHRFeHRlbmQgLSBwb3NpdGlvbjtcXG4gdmVjMyBMMSA9IGxpZ2h0UG9zaXRpb24gKyBsaWdodEV4dGVuZCAtIHBvc2l0aW9uO1xcbiB2ZWMzIExEID0gTDEgLSBMMDtcXG4gZmxvYXQgbGVuMCA9IGxlbmd0aChMMCk7XFxuIGZsb2F0IGxlbjEgPSBsZW5ndGgoTDEpO1xcbiBmbG9hdCBpcnJhID0gMi4wICogY2xhbXAoZG90KE4sIEwwKSAvICgyLjAgKiBsZW4wKSArIGRvdChOLCBMMSkgLyAoMi4wICogbGVuMSksIDAuMCwgMS4wKTtcXG4gZmxvYXQgTEREb3RSID0gZG90KFIsIExEKTtcXG4gZmxvYXQgdCA9IChMRERvdFIgKiBkb3QoUiwgTDApIC0gZG90KEwwLCBMRCkpIC8gKGRvdChMRCwgTEQpIC0gTEREb3RSICogTEREb3RSKTtcXG4gdCA9IGNsYW1wKHQsIDAuMCwgMS4wKTtcXG4gTCA9IEwwICsgdCAqIExEO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiBMIC89IGRpc3Q7XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gZ2xvc3NpbmVzcyA9IGNsYW1wKGdsb3NzaW5lc3MgLSAwLjAgLyAyLjAgLyBkaXN0LCAwLjAsIDEuMCk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBsaWdodENvbG9yICogaXJyYSAqIGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgbGlnaHRSYW5nZSlcXG4gKiAoZGlmZnVzZUNvbG9yICsgRF9QaG9uZyhnbG9zc2luZXNzLCBuZGgpICogRl9TY2hsaWNrKG5kdiwgc3BlY3VsYXJDb2xvcikpO1xcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xyXG4iLCIvLyBMaWdodC1wcmUgcGFzcyBkZWZlcnJlZCByZW5kZXJpbmdcclxuLy8gaHR0cDovL3d3dy5yZWFsdGltZXJlbmRlcmluZy5jb20vYmxvZy9kZWZlcnJlZC1saWdodGluZy1hcHByb2FjaGVzL1xyXG5pbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcbmltcG9ydCBGdWxsUXVhZFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XHJcbmltcG9ydCBTcGhlcmVHZW8gZnJvbSAnLi4vZ2VvbWV0cnkvU3BoZXJlJztcclxuaW1wb3J0IENvbmVHZW8gZnJvbSAnLi4vZ2VvbWV0cnkvQ29uZSc7XHJcbmltcG9ydCBDeWxpbmRlckdlbyBmcm9tICcuLi9nZW9tZXRyeS9DeWxpbmRlcic7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4uL21hdGgvTWF0cml4NCc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBHQnVmZmVyIGZyb20gJy4vR0J1ZmZlcic7XHJcblxyXG5pbXBvcnQgcHJlekdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9wcmV6Lmdsc2wuanMnO1xyXG5pbXBvcnQgdXRpbEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS91dGlsLmdsc2wuanMnO1xyXG5cclxuaW1wb3J0IGxpZ2h0dm9sdW1lR2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL2xpZ2h0dm9sdW1lLmdsc2wuanMnO1xyXG4vLyBMaWdodCBzaGFkZXJzXHJcbmltcG9ydCBzcG90R2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL3Nwb3QuZ2xzbC5qcyc7XHJcbmltcG9ydCBkaXJlY3Rpb25hbEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9kaXJlY3Rpb25hbC5nbHNsLmpzJztcclxuaW1wb3J0IGFtYmllbnRHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudC5nbHNsLmpzJztcclxuaW1wb3J0IGFtYmllbnRzaEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9hbWJpZW50c2guZ2xzbC5qcyc7XHJcbmltcG9ydCBhbWJpZW50Y3ViZW1hcEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9hbWJpZW50Y3ViZW1hcC5nbHNsLmpzJztcclxuaW1wb3J0IHBvaW50R2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL3BvaW50Lmdsc2wuanMnO1xyXG5pbXBvcnQgc3BoZXJlR2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL3NwaGVyZS5nbHNsLmpzJztcclxuaW1wb3J0IHR1YmVHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvdHViZS5nbHNsLmpzJztcclxuXHJcblNoYWRlci5pbXBvcnQocHJlekdsc2wpO1xyXG5TaGFkZXIuaW1wb3J0KHV0aWxHbHNsKTtcclxuU2hhZGVyLmltcG9ydChsaWdodHZvbHVtZUdsc2wpO1xyXG5cclxuLy8gTGlnaHQgc2hhZGVyc1xyXG5TaGFkZXIuaW1wb3J0KHNwb3RHbHNsKTtcclxuU2hhZGVyLmltcG9ydChkaXJlY3Rpb25hbEdsc2wpO1xyXG5TaGFkZXIuaW1wb3J0KGFtYmllbnRHbHNsKTtcclxuU2hhZGVyLmltcG9ydChhbWJpZW50c2hHbHNsKTtcclxuU2hhZGVyLmltcG9ydChhbWJpZW50Y3ViZW1hcEdsc2wpO1xyXG5TaGFkZXIuaW1wb3J0KHBvaW50R2xzbCk7XHJcblNoYWRlci5pbXBvcnQoc3BoZXJlR2xzbCk7XHJcblNoYWRlci5pbXBvcnQodHViZUdsc2wpO1xyXG5cclxuU2hhZGVyLmltcG9ydChwcmV6R2xzbCk7XHJcblxyXG4vKipcclxuICogRGVmZXJyZWQgcmVuZGVyZXJcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmRlZmVycmVkLlJlbmRlcmVyXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgRGVmZXJyZWRSZW5kZXJlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB2YXIgZnVsbFF1YWRWZXJ0ZXggPSBTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IudmVydGV4Jyk7XHJcbiAgICB2YXIgbGlnaHRWb2x1bWVWZXJ0ZXggPSBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmxpZ2h0X3ZvbHVtZS52ZXJ0ZXgnKTtcclxuXHJcbiAgICB2YXIgZGlyZWN0aW9uYWxMaWdodFNoYWRlciA9IG5ldyBTaGFkZXIoZnVsbFF1YWRWZXJ0ZXgsIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZGlyZWN0aW9uYWxfbGlnaHQnKSk7XHJcblxyXG4gICAgdmFyIGxpZ2h0QWNjdW11bGF0ZUJsZW5kRnVuYyA9IGZ1bmN0aW9uIChnbCkge1xyXG4gICAgICAgIGdsLmJsZW5kRXF1YXRpb24oZ2wuRlVOQ19BREQpO1xyXG4gICAgICAgIGdsLmJsZW5kRnVuY1NlcGFyYXRlKGdsLk9ORSwgZ2wuT05FLCBnbC5PTkUsIGdsLk9ORSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBjcmVhdGVMaWdodFBhc3NNYXQgPSBmdW5jdGlvbiAoc2hhZGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogc2hhZGVyLFxyXG4gICAgICAgICAgICBibGVuZDogbGlnaHRBY2N1bXVsYXRlQmxlbmRGdW5jLFxyXG4gICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgICAgICAgZGVwdGhNYXNrOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgY3JlYXRlVm9sdW1lU2hhZGVyID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFNoYWRlcihsaWdodFZvbHVtZVZlcnRleCwgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC4nICsgbmFtZSkpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBSb3RhdGUgYW5kIHBvc2l0aW9uaW5nIHRvIGZpdCB0aGUgc3BvdCBsaWdodFxyXG4gICAgLy8gV2hpY2ggdGhlIGN1c3Agb2YgY29uZSBwb2ludGluZyB0byB0aGUgcG9zaXRpdmUgelxyXG4gICAgLy8gYW5kIHBvc2l0aW9uZWQgb24gdGhlIG9yaWdpblxyXG4gICAgdmFyIGNvbmVHZW8gPSBuZXcgQ29uZUdlbyh7XHJcbiAgICAgICAgY2FwU2VnbWVudHM6IDEwXHJcbiAgICB9KTtcclxuICAgIHZhciBtYXQgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgbWF0LnJvdGF0ZVgoTWF0aC5QSSAvIDIpXHJcbiAgICAgICAgLnRyYW5zbGF0ZShuZXcgVmVjdG9yMygwLCAtMSwgMCkpO1xyXG5cclxuICAgIGNvbmVHZW8uYXBwbHlUcmFuc2Zvcm0obWF0KTtcclxuXHJcbiAgICB2YXIgY3lsaW5kZXJHZW8gPSBuZXcgQ3lsaW5kZXJHZW8oe1xyXG4gICAgICAgIGNhcFNlZ21lbnRzOiAxMFxyXG4gICAgfSk7XHJcbiAgICAvLyBBbGlnbiB3aXRoIHggYXhpc1xyXG4gICAgbWF0LmlkZW50aXR5KCkucm90YXRlWihNYXRoLlBJIC8gMik7XHJcbiAgICBjeWxpbmRlckdlby5hcHBseVRyYW5zZm9ybShtYXQpO1xyXG5cclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuZGVmZXJyZWQuUmVuZGVyZXIjICovIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUHJvdmlkZSBTaGFkb3dNYXBQYXNzIGZvciBzaGFkb3cgcmVuZGVyaW5nLlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LnByZVBhc3MuU2hhZG93TWFwfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNoYWRvd01hcFBhc3M6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIGF1dG8gcmVzaXppbmcgZnJvbSBnaXZlbiBkZWZ1YWx0IHJlbmRlcmVyIHNpemUuXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXV0b1Jlc2l6ZTogdHJ1ZSxcclxuXHJcbiAgICAgICAgX2NyZWF0ZUxpZ2h0UGFzc01hdDogY3JlYXRlTGlnaHRQYXNzTWF0LFxyXG5cclxuICAgICAgICBfZ0J1ZmZlcjogbmV3IEdCdWZmZXIoKSxcclxuXHJcbiAgICAgICAgX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlcjogbmV3IEZyYW1lQnVmZmVyKCksXHJcblxyXG4gICAgICAgIF9saWdodEFjY3VtVGV4OiBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgLy8gRklYTUUgRGV2aWNlIG5vdCBzdXBwb3J0IGZsb2F0IHRleHR1cmVcclxuICAgICAgICAgICAgdHlwZTogVGV4dHVyZS5IQUxGX0ZMT0FULFxyXG4gICAgICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1RcclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgX2Z1bGxRdWFkUGFzczogbmV3IEZ1bGxRdWFkUGFzcyh7XHJcbiAgICAgICAgICAgIGJsZW5kV2l0aFByZXZpb3VzOiB0cnVlXHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIF9kaXJlY3Rpb25hbExpZ2h0TWF0OiBjcmVhdGVMaWdodFBhc3NNYXQoZGlyZWN0aW9uYWxMaWdodFNoYWRlciksXHJcblxyXG4gICAgICAgIF9hbWJpZW50TWF0OiBjcmVhdGVMaWdodFBhc3NNYXQobmV3IFNoYWRlcihcclxuICAgICAgICAgICAgZnVsbFF1YWRWZXJ0ZXgsIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuYW1iaWVudF9saWdodCcpXHJcbiAgICAgICAgKSksXHJcbiAgICAgICAgX2FtYmllbnRTSE1hdDogY3JlYXRlTGlnaHRQYXNzTWF0KG5ldyBTaGFkZXIoXHJcbiAgICAgICAgICAgIGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmFtYmllbnRfc2hfbGlnaHQnKVxyXG4gICAgICAgICkpLFxyXG4gICAgICAgIF9hbWJpZW50Q3ViZW1hcE1hdDogY3JlYXRlTGlnaHRQYXNzTWF0KG5ldyBTaGFkZXIoXHJcbiAgICAgICAgICAgIGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmFtYmllbnRfY3ViZW1hcF9saWdodCcpXHJcbiAgICAgICAgKSksXHJcblxyXG4gICAgICAgIF9zcG90TGlnaHRTaGFkZXI6IGNyZWF0ZVZvbHVtZVNoYWRlcignc3BvdF9saWdodCcpLFxyXG4gICAgICAgIF9wb2ludExpZ2h0U2hhZGVyOiBjcmVhdGVWb2x1bWVTaGFkZXIoJ3BvaW50X2xpZ2h0JyksXHJcblxyXG4gICAgICAgIF9zcGhlcmVMaWdodFNoYWRlcjogY3JlYXRlVm9sdW1lU2hhZGVyKCdzcGhlcmVfbGlnaHQnKSxcclxuICAgICAgICBfdHViZUxpZ2h0U2hhZGVyOiBjcmVhdGVWb2x1bWVTaGFkZXIoJ3R1YmVfbGlnaHQnKSxcclxuXHJcbiAgICAgICAgX2xpZ2h0U3BoZXJlR2VvOiBuZXcgU3BoZXJlR2VvKHtcclxuICAgICAgICAgICAgd2lkdGhTZWdtZW50czogMTAsXHJcbiAgICAgICAgICAgIGhlaWdodFNlZ2VtZW50czogMTBcclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgX2xpZ2h0Q29uZUdlbzogY29uZUdlbyxcclxuXHJcbiAgICAgICAgX2xpZ2h0Q3lsaW5kZXJHZW86IGN5bGluZGVyR2VvLFxyXG5cclxuICAgICAgICBfb3V0cHV0UGFzczogbmV3IEZ1bGxRdWFkUGFzcyh7XHJcbiAgICAgICAgICAgIGZyYWdtZW50OiBTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3Iub3V0cHV0JylcclxuICAgICAgICB9KVxyXG4gICAgfTtcclxufSwgLyoqIEBsZW5kcyBjbGF5LmRlZmVycmVkLlJlbmRlcmVyIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIERvIHJlbmRlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LlNjZW5lfSBzY2VuZVxyXG4gICAgICogQHBhcmFtIHtjbGF5LkNhbWVyYX0gY2FtZXJhXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnJlbmRlclRvVGFyZ2V0ID0gZmFsc2VdIElmIG5vdCBvdXB1dCBhbmQgcmVuZGVyIHRvIHRoZSB0YXJnZXQgdGV4dHVyZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5ub3RVcGRhdGVTaGFkb3cgPSB0cnVlXSBJZiBub3QgdXBkYXRlIHRoZSBzaGFkb3cuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLm5vdFVwZGF0ZVNjZW5lID0gdHJ1ZV0gSWYgbm90IHVwZGF0ZSB0aGUgc2NlbmUuXHJcbiAgICAgKi9cclxuICAgIHJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBvcHRzKSB7XHJcblxyXG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG4gICAgICAgIG9wdHMucmVuZGVyVG9UYXJnZXQgPSBvcHRzLnJlbmRlclRvVGFyZ2V0IHx8IGZhbHNlO1xyXG4gICAgICAgIG9wdHMubm90VXBkYXRlU2hhZG93ID0gb3B0cy5ub3RVcGRhdGVTaGFkb3cgfHwgZmFsc2U7XHJcbiAgICAgICAgb3B0cy5ub3RVcGRhdGVTY2VuZSA9IG9wdHMubm90VXBkYXRlU2NlbmUgfHwgZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICghb3B0cy5ub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgICAgICBzY2VuZS51cGRhdGUoZmFsc2UsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY2VuZS51cGRhdGVMaWdodHMoKTtcclxuICAgICAgICAvLyBSZW5kZXIgbGlzdCB3aWxsIGJlIHVwZGF0ZWQgaW4gZ2J1ZmZlci5cclxuXHJcbiAgICAgICAgY2FtZXJhLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgICAgLy8gUEVORElORyBGb3Igc3RlcmVvIHJlbmRlcmluZ1xyXG4gICAgICAgIHZhciBkcHIgPSByZW5kZXJlci5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZVxyXG4gICAgICAgICAgICAmJiAocmVuZGVyZXIuZ2V0V2lkdGgoKSAqIGRwciAhPT0gdGhpcy5fbGlnaHRBY2N1bVRleC53aWR0aFxyXG4gICAgICAgICAgICB8fCByZW5kZXJlci5nZXRIZWlnaHQoKSAqIGRwciAhPT0gdGhpcy5fbGlnaHRBY2N1bVRleC5oZWlnaHQpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzaXplKHJlbmRlcmVyLmdldFdpZHRoKCkgKiBkcHIsIHJlbmRlcmVyLmdldEhlaWdodCgpICogZHByKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2dCdWZmZXIudXBkYXRlKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKTtcclxuXHJcbiAgICAgICAgLy8gQWNjdW11bGF0ZSBsaWdodCBidWZmZXJcclxuICAgICAgICB0aGlzLl9hY2N1bXVsYXRlTGlnaHRCdWZmZXIocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsICFvcHRzLm5vdFVwZGF0ZVNoYWRvdyk7XHJcblxyXG4gICAgICAgIGlmICghb3B0cy5yZW5kZXJUb1RhcmdldCkge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRQYXNzLnNldFVuaWZvcm0oJ3RleHR1cmUnLCB0aGlzLl9saWdodEFjY3VtVGV4KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dFBhc3MucmVuZGVyKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5fZ0J1ZmZlci5yZW5kZXJEZWJ1ZyhyZW5kZXJlciwgY2FtZXJhLCAnbm9ybWFsJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICovXHJcbiAgICBnZXRUYXJnZXRUZXh0dXJlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0QWNjdW1UZXg7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybiB7Y2xheS5GcmFtZUJ1ZmZlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0VGFyZ2V0RnJhbWVCdWZmZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGlnaHRBY2N1bUZyYW1lQnVmZmVyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuZGVmZXJyZWQuR0J1ZmZlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0R0J1ZmZlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nQnVmZmVyO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBUT0RPIGlzIGRwciBuZWVkZWQ/XHJcbiAgICBzZXRWaWV3cG9ydDogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIGRwcikge1xyXG4gICAgICAgIHRoaXMuX2dCdWZmZXIuc2V0Vmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZHByKTtcclxuICAgICAgICB0aGlzLl9saWdodEFjY3VtRnJhbWVCdWZmZXIudmlld3BvcnQgPSB0aGlzLl9nQnVmZmVyLmdldFZpZXdwb3J0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIGdldEZ1bGxRdWFkTGlnaHRQYXNzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuX2Z1bGxRdWFkUGFzcztcclxuICAgIC8vIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcmVuZGVyZXIgc2l6ZS5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxyXG4gICAgICovXHJcbiAgICByZXNpemU6IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICAgICAgdGhpcy5fbGlnaHRBY2N1bVRleC53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0QWNjdW1UZXguaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICAvLyBQRU5ESU5HIHZpZXdwb3J0ID9cclxuICAgICAgICB0aGlzLl9nQnVmZmVyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuICAgIH0sXHJcblxyXG4gICAgX2FjY3VtdWxhdGVMaWdodEJ1ZmZlcjogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCB1cGRhdGVTaGFkb3cpIHtcclxuICAgICAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgbGlnaHRBY2N1bVRleCA9IHRoaXMuX2xpZ2h0QWNjdW1UZXg7XHJcbiAgICAgICAgdmFyIGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlciA9IHRoaXMuX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlcjtcclxuXHJcbiAgICAgICAgdmFyIGV5ZVBvc2l0aW9uID0gY2FtZXJhLmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHZvbHVtZSBtZXNoZXNcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIXNjZW5lLmxpZ2h0c1tpXS5pbnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUxpZ2h0UHJveHkoc2NlbmUubGlnaHRzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNoYWRvd01hcFBhc3MgPSB0aGlzLnNoYWRvd01hcFBhc3M7XHJcbiAgICAgICAgaWYgKHNoYWRvd01hcFBhc3MgJiYgdXBkYXRlU2hhZG93KSB7XHJcbiAgICAgICAgICAgIGdsLmNsZWFyQ29sb3IoMSwgMSwgMSwgMSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVMaWdodFNoYWRvdyhyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2JlZm9yZWxpZ2h0YWNjdW11bGF0ZScsIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCB1cGRhdGVTaGFkb3cpO1xyXG5cclxuICAgICAgICBsaWdodEFjY3VtRnJhbWVCdWZmZXIuYXR0YWNoKGxpZ2h0QWNjdW1UZXgpO1xyXG4gICAgICAgIGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB2YXIgY2xlYXJDb2xvciA9IHJlbmRlcmVyLmNsZWFyQ29sb3I7XHJcblxyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlci52aWV3cG9ydDtcclxuICAgICAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgICAgICAgdmFyIGRwciA9IHZpZXdwb3J0LmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgICAgIC8vIHVzZSBzY2lzc29yIHRvIG1ha2Ugc3VyZSBvbmx5IGNsZWFyIHRoZSB2aWV3cG9ydFxyXG4gICAgICAgICAgICBnbC5lbmFibGUoZ2wuU0NJU1NPUl9URVNUKTtcclxuICAgICAgICAgICAgZ2wuc2Npc3Nvcih2aWV3cG9ydC54ICogZHByLCB2aWV3cG9ydC55ICogZHByLCB2aWV3cG9ydC53aWR0aCAqIGRwciwgdmlld3BvcnQuaGVpZ2h0ICogZHByKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ2wuY2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTtcclxuICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUKTtcclxuICAgICAgICBnbC5lbmFibGUoZ2wuQkxFTkQpO1xyXG4gICAgICAgIGlmICh2aWV3cG9ydCkge1xyXG4gICAgICAgICAgICBnbC5kaXNhYmxlKGdsLlNDSVNTT1JfVEVTVCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ3N0YXJ0bGlnaHRhY2N1bXVsYXRlJywgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpO1xyXG5cclxuICAgICAgICB2YXIgdmlld1Byb2plY3Rpb25JbnYgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIE1hdHJpeDQubXVsdGlwbHkodmlld1Byb2plY3Rpb25JbnYsIGNhbWVyYS53b3JsZFRyYW5zZm9ybSwgY2FtZXJhLmludlByb2plY3Rpb25NYXRyaXgpO1xyXG5cclxuICAgICAgICB2YXIgdm9sdW1lTWVzaExpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY2VuZS5saWdodHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGxpZ2h0ID0gc2NlbmUubGlnaHRzW2ldO1xyXG4gICAgICAgICAgICBpZiAobGlnaHQuaW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHVUcGwgPSBsaWdodC51bmlmb3JtVGVtcGxhdGVzO1xyXG5cclxuICAgICAgICAgICAgdmFyIHZvbHVtZU1lc2ggPSBsaWdodC52b2x1bWVNZXNoIHx8IGxpZ2h0Ll9fdm9sdW1lTWVzaDtcclxuXHJcbiAgICAgICAgICAgIGlmICh2b2x1bWVNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSB2b2x1bWVNZXNoLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgLy8gVm9sdW1lIG1lc2ggd2lsbCBhZmZlY3QgdGhlIHNjZW5lIGJvdW5kaW5nIGJveCB3aGVuIHJlbmRlcmluZ1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgY2FzdFNoYWRvdyBpcyB0cnVlXHJcbiAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLmNhc3RTaGFkb3cgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdW5rbm93bkxpZ2h0VHlwZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChsaWdodC50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnUE9JTlRfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvbG9yJywgdVRwbC5wb2ludExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYW5nZScsIHVUcGwucG9pbnRMaWdodFJhbmdlLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UG9zaXRpb24nLCB1VHBsLnBvaW50TGlnaHRQb3NpdGlvbi52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdTUE9UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRQb3NpdGlvbicsIHVUcGwuc3BvdExpZ2h0UG9zaXRpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuc3BvdExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYW5nZScsIHVUcGwuc3BvdExpZ2h0UmFuZ2UudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHREaXJlY3Rpb24nLCB1VHBsLnNwb3RMaWdodERpcmVjdGlvbi52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCd1bWJyYUFuZ2xlQ29zaW5lJywgdVRwbC5zcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ3BlbnVtYnJhQW5nbGVDb3NpbmUnLCB1VHBsLnNwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmUudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnZmFsbG9mZkZhY3RvcicsIHVUcGwuc3BvdExpZ2h0RmFsbG9mZkZhY3Rvci52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdTUEhFUkVfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvbG9yJywgdVRwbC5zcGhlcmVMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UmFuZ2UnLCB1VHBsLnNwaGVyZUxpZ2h0UmFuZ2UudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRSYWRpdXMnLCB1VHBsLnNwaGVyZUxpZ2h0UmFkaXVzLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UG9zaXRpb24nLCB1VHBsLnNwaGVyZUxpZ2h0UG9zaXRpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnVFVCRV9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLnR1YmVMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UmFuZ2UnLCB1VHBsLnR1YmVMaWdodFJhbmdlLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0RXh0ZW5kJywgdVRwbC50dWJlTGlnaHRFeHRlbmQudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRQb3NpdGlvbicsIHVUcGwudHViZUxpZ2h0UG9zaXRpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93bkxpZ2h0VHlwZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHVua25vd25MaWdodFR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdleWVQb3NpdGlvbicsIGV5ZVBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ3ZpZXdQcm9qZWN0aW9uSW52Jywgdmlld1Byb2plY3Rpb25JbnYuYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUxJywgdGhpcy5fZ0J1ZmZlci5nZXRUYXJnZXRUZXh0dXJlMSgpKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMicsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTIoKSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTMnLCB0aGlzLl9nQnVmZmVyLmdldFRhcmdldFRleHR1cmUzKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZvbHVtZU1lc2hMaXN0LnB1c2godm9sdW1lTWVzaCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhc3MgPSB0aGlzLl9mdWxsUXVhZFBhc3M7XHJcbiAgICAgICAgICAgICAgICB2YXIgdW5rbm93bkxpZ2h0VHlwZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gRnVsbCBxdWFkIGxpZ2h0XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGxpZ2h0LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdBTUJJRU5UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbCA9IHRoaXMuX2FtYmllbnRNYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuYW1iaWVudExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQU1CSUVOVF9TSF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwgPSB0aGlzLl9hbWJpZW50U0hNYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuYW1iaWVudFNITGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29lZmZpY2llbnRzJywgdVRwbC5hbWJpZW50U0hMaWdodENvZWZmaWNpZW50cy52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdBTUJJRU5UX0NVQkVNQVBfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsID0gdGhpcy5fYW1iaWVudEN1YmVtYXBNYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuYW1iaWVudEN1YmVtYXBMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDdWJlbWFwJywgdVRwbC5hbWJpZW50Q3ViZW1hcExpZ2h0Q3ViZW1hcC52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2JyZGZMb29rdXAnLCB1VHBsLmFtYmllbnRDdWJlbWFwTGlnaHRCUkRGTG9va3VwLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RJUkVDVElPTkFMX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc1NoYWRvdyA9IHNoYWRvd01hcFBhc3MgJiYgbGlnaHQuY2FzdFNoYWRvdztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbCA9IHRoaXMuX2RpcmVjdGlvbmFsTGlnaHRNYXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWxbaGFzU2hhZG93ID8gJ2RlZmluZScgOiAndW5kZWZpbmUnXSgnZnJhZ21lbnQnLCAnU0hBRE9XTUFQX0VOQUJMRUQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NoYWRvdykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NIQURPV19DQVNDQURFJywgbGlnaHQuc2hhZG93Q2FzY2FkZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvbG9yJywgdVRwbC5kaXJlY3Rpb25hbExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodERpcmVjdGlvbicsIHVUcGwuZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbi52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmtvbncgbGlnaHQgdHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duTGlnaHRUeXBlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh1bmtub3duTGlnaHRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHBhc3NNYXRlcmlhbCA9IHBhc3MubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnZXllUG9zaXRpb24nLCBleWVQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgndmlld1Byb2plY3Rpb25JbnYnLCB2aWV3UHJvamVjdGlvbkludi5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUxJywgdGhpcy5fZ0J1ZmZlci5nZXRUYXJnZXRUZXh0dXJlMSgpKTtcclxuICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTInLCB0aGlzLl9nQnVmZmVyLmdldFRhcmdldFRleHR1cmUyKCkpO1xyXG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMycsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTMoKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRvd01hcFBhc3MgJiYgbGlnaHQuY2FzdFNoYWRvdykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcCcsIGxpZ2h0Ll9fc2hhZG93TWFwKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRNYXRyaWNlcycsIGxpZ2h0Ll9fbGlnaHRNYXRyaWNlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ3NoYWRvd0Nhc2NhZGVDbGlwc05lYXInLCBsaWdodC5fX2Nhc2NhZGVDbGlwc05lYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdzaGFkb3dDYXNjYWRlQ2xpcHNGYXInLCBsaWdodC5fX2Nhc2NhZGVDbGlwc0Zhcik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcFNpemUnLCBsaWdodC5zaGFkb3dSZXNvbHV0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBwYXNzLnJlbmRlclF1YWQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9yZW5kZXJWb2x1bWVNZXNoTGlzdChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdm9sdW1lTWVzaExpc3QpO1xyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2xpZ2h0YWNjdW11bGF0ZScsIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKTtcclxuXHJcbiAgICAgICAgbGlnaHRBY2N1bUZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJsaWdodGFjY3VtdWxhdGUnLCByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBfcHJlcGFyZUxpZ2h0U2hhZG93OiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB3b3JsZFZpZXcgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpIHtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGlnaHQgPSBzY2VuZS5saWdodHNbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgdm9sdW1lTWVzaCA9IGxpZ2h0LnZvbHVtZU1lc2ggfHwgbGlnaHQuX192b2x1bWVNZXNoO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFsaWdodC5jYXN0U2hhZG93IHx8IGxpZ2h0LmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCAobGlnaHQudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BPSU5UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdTUE9UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRnJ1c3R1bSBjdWxsaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdHJpeDQubXVsdGlwbHkod29ybGRWaWV3LCBjYW1lcmEudmlld01hdHJpeCwgdm9sdW1lTWVzaC53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2VuZS5pc0ZydXN0dW1DdWxsZWQodm9sdW1lTWVzaCwgY2FtZXJhLCB3b3JsZFZpZXcuYXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVNpbmdsZUxpZ2h0U2hhZG93KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIGxpZ2h0LCB2b2x1bWVNZXNoLm1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RJUkVDVElPTkFMX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVNpbmdsZUxpZ2h0U2hhZG93KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIGxpZ2h0LCBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICBfcHJlcGFyZVNpbmdsZUxpZ2h0U2hhZG93OiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIGxpZ2h0LCBtYXRlcmlhbCkge1xyXG4gICAgICAgIHN3aXRjaCAobGlnaHQudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICdQT0lOVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93TWFwcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFkb3dNYXBQYXNzLnJlbmRlclBvaW50TGlnaHRTaGFkb3coXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBsaWdodCwgc2hhZG93TWFwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0U2hhZG93TWFwJywgc2hhZG93TWFwc1swXSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcFNpemUnLCBsaWdodC5zaGFkb3dSZXNvbHV0aW9uKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdTUE9UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgIHZhciBzaGFkb3dNYXBzID0gW107XHJcbiAgICAgICAgICAgICAgICB2YXIgbGlnaHRNYXRyaWNlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFkb3dNYXBQYXNzLnJlbmRlclNwb3RMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlciwgc2NlbmUsIGxpZ2h0LCBsaWdodE1hdHJpY2VzLCBzaGFkb3dNYXBzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXAnLCBzaGFkb3dNYXBzWzBdKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0TWF0cml4JywgbGlnaHRNYXRyaWNlc1swXSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcFNpemUnLCBsaWdodC5zaGFkb3dSZXNvbHV0aW9uKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdESVJFQ1RJT05BTF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93TWFwcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpZ2h0TWF0cmljZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciBjYXNjYWRlQ2xpcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhZG93TWFwUGFzcy5yZW5kZXJEaXJlY3Rpb25hbExpZ2h0U2hhZG93KFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBsaWdodCwgY2FzY2FkZUNsaXBzLCBsaWdodE1hdHJpY2VzLCBzaGFkb3dNYXBzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNhc2NhZGVDbGlwc05lYXIgPSBjYXNjYWRlQ2xpcHMuc2xpY2UoKTtcclxuICAgICAgICAgICAgICAgIHZhciBjYXNjYWRlQ2xpcHNGYXIgPSBjYXNjYWRlQ2xpcHMuc2xpY2UoKTtcclxuICAgICAgICAgICAgICAgIGNhc2NhZGVDbGlwc05lYXIucG9wKCk7XHJcbiAgICAgICAgICAgICAgICBjYXNjYWRlQ2xpcHNGYXIuc2hpZnQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBJdGVyYXRlIGZyb20gZmFyIHRvIG5lYXJcclxuICAgICAgICAgICAgICAgIGNhc2NhZGVDbGlwc05lYXIucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgY2FzY2FkZUNsaXBzRmFyLnJldmVyc2UoKTtcclxuICAgICAgICAgICAgICAgIGxpZ2h0TWF0cmljZXMucmV2ZXJzZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxpZ2h0Ll9fY2FzY2FkZUNsaXBzTmVhciA9IGNhc2NhZGVDbGlwc05lYXI7XHJcbiAgICAgICAgICAgICAgICBsaWdodC5fX2Nhc2NhZGVDbGlwc0ZhciA9IGNhc2NhZGVDbGlwc0ZhcjtcclxuICAgICAgICAgICAgICAgIGxpZ2h0Ll9fc2hhZG93TWFwID0gc2hhZG93TWFwc1swXTtcclxuICAgICAgICAgICAgICAgIGxpZ2h0Ll9fbGlnaHRNYXRyaWNlcyA9IGxpZ2h0TWF0cmljZXM7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFVwZGF0ZSBsaWdodCB2b2x1bWUgbWVzaFxyXG4gICAgLy8gTGlnaHQgdm9sdW1lIG1lc2ggaXMgcmVuZGVyZWQgaW4gbGlnaHQgYWNjdW11bGF0ZSBwYXNzIGluc3RlYWQgb2YgZnVsbCBxdWFkLlxyXG4gICAgLy8gSXQgd2lsbCByZWR1Y2UgcGl4ZWxzIHNpZ25pZmljYW50bHkgd2hlbiBsb2NhbCBsaWdodCBpcyByZWxhdGl2ZWx5IHNtYWxsLlxyXG4gICAgLy8gQW5kIHdlIGNhbiB1c2UgY3VzdG9tIHZvbHVtZSBtZXNoIHRvIHNoYXBlIHRoZSBsaWdodC5cclxuICAgIC8vXHJcbiAgICAvLyBTZWUgXCJEZWZlcnJlZCBTaGFkaW5nIE9wdGltaXphdGlvbnNcIiBpbiBHREMyMDExXHJcbiAgICBfdXBkYXRlTGlnaHRQcm94eTogZnVuY3Rpb24gKGxpZ2h0KSB7XHJcbiAgICAgICAgdmFyIHZvbHVtZU1lc2g7XHJcbiAgICAgICAgaWYgKGxpZ2h0LnZvbHVtZU1lc2gpIHtcclxuICAgICAgICAgICAgdm9sdW1lTWVzaCA9IGxpZ2h0LnZvbHVtZU1lc2g7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGxpZ2h0LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIE9ubHkgbG9jYWwgbGlnaHQgKHBvaW50IGFuZCBzcG90KSBuZWVkcyB2b2x1bWUgbWVzaC5cclxuICAgICAgICAgICAgICAgIC8vIERpcmVjdGlvbmFsIGFuZCBhbWJpZW50IGxpZ2h0IHJlbmRlcnMgaW4gZnVsbCBxdWFkXHJcbiAgICAgICAgICAgICAgICBjYXNlICdQT0lOVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICBjYXNlICdTUEhFUkVfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzaGFkZXIgPSBsaWdodC50eXBlID09PSAnU1BIRVJFX0xJR0hUJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX3NwaGVyZUxpZ2h0U2hhZGVyIDogdGhpcy5fcG9pbnRMaWdodFNoYWRlcjtcclxuICAgICAgICAgICAgICAgICAgICAvLyBWb2x1bWUgbWVzaCBjcmVhdGVkIGF1dG9tYXRpY2FsbHlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWxpZ2h0Ll9fdm9sdW1lTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaWdodC5fX3ZvbHVtZU1lc2ggPSBuZXcgTWVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbDogdGhpcy5fY3JlYXRlTGlnaHRQYXNzTWF0KHNoYWRlciksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogdGhpcy5fbGlnaHRTcGhlcmVHZW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEaXNhYmxlIGN1bGxpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGxpZ2h0IHZvbHVtZSBtZXNoIGludGVyc2VjdCBjYW1lcmEgbmVhciBwbGFuZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCBtZXNoIGluc2lkZSBjYW4gc3RpbGwgYmUgcmVuZGVyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1bGxpbmc6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByID0gbGlnaHQucmFuZ2UgKyAobGlnaHQucmFkaXVzIHx8IDApO1xyXG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2guc2NhbGUuc2V0KHIsIHIsIHIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnU1BPVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQuX192b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoIHx8IG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWw6IHRoaXMuX2NyZWF0ZUxpZ2h0UGFzc01hdCh0aGlzLl9zcG90TGlnaHRTaGFkZXIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogdGhpcy5fbGlnaHRDb25lR2VvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdWxsaW5nOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2ggPSBsaWdodC5fX3ZvbHVtZU1lc2g7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFzcGVjdCA9IE1hdGgudGFuKGxpZ2h0LnBlbnVtYnJhQW5nbGUgKiBNYXRoLlBJIC8gMTgwKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBsaWdodC5yYW5nZTtcclxuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLnNjYWxlLnNldChhc3BlY3QgKiByYW5nZSwgYXNwZWN0ICogcmFuZ2UsIHJhbmdlIC8gMik7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdUVUJFX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICBsaWdodC5fX3ZvbHVtZU1lc2ggPSBsaWdodC5fX3ZvbHVtZU1lc2ggfHwgbmV3IE1lc2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbDogdGhpcy5fY3JlYXRlTGlnaHRQYXNzTWF0KHRoaXMuX3R1YmVMaWdodFNoYWRlciksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5OiB0aGlzLl9saWdodEN5bGluZGVyR2VvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdWxsaW5nOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2ggPSBsaWdodC5fX3ZvbHVtZU1lc2g7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gbGlnaHQucmFuZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5zY2FsZS5zZXQobGlnaHQubGVuZ3RoIC8gMiArIHJhbmdlLCByYW5nZSwgcmFuZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2b2x1bWVNZXNoKSB7XHJcbiAgICAgICAgICAgIHZvbHVtZU1lc2gudXBkYXRlKCk7XHJcbiAgICAgICAgICAgIC8vIEFwcGx5IGxpZ2h0IHRyYW5zZm9ybVxyXG4gICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHZvbHVtZU1lc2gud29ybGRUcmFuc2Zvcm0sIGxpZ2h0LndvcmxkVHJhbnNmb3JtLCB2b2x1bWVNZXNoLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgdmFyIGhhc1NoYWRvdyA9IHRoaXMuc2hhZG93TWFwUGFzcyAmJiBsaWdodC5jYXN0U2hhZG93O1xyXG4gICAgICAgICAgICB2b2x1bWVNZXNoLm1hdGVyaWFsW2hhc1NoYWRvdyA/ICdkZWZpbmUnIDogJ3VuZGVmaW5lJ10oJ2ZyYWdtZW50JywgJ1NIQURPV01BUF9FTkFCTEVEJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfcmVuZGVyVm9sdW1lTWVzaExpc3Q6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHdvcmxkVmlldyA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgdmFyIHByZVpNYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LnByZXoudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucHJlei5mcmFnbWVudCcpKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGZ1bmN0aW9uIGdldFByZVpNYXRlcmlhbCgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHByZVpNYXRlcmlhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdm9sdW1lTWVzaExpc3QpIHtcclxuICAgICAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgICAgICBnbC5kZXB0aEZ1bmMoZ2wuTEVRVUFMKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm9sdW1lTWVzaExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB2b2x1bWVNZXNoID0gdm9sdW1lTWVzaExpc3RbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gRnJ1c3R1bSBjdWxsaW5nXHJcbiAgICAgICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHdvcmxkVmlldywgY2FtZXJhLnZpZXdNYXRyaXgsIHZvbHVtZU1lc2gud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNjZW5lLmlzRnJ1c3R1bUN1bGxlZCh2b2x1bWVNZXNoLCBjYW1lcmEsIHdvcmxkVmlldy5hcnJheSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBVc2UgcHJleiB0byBhdm9pZCBvbmUgcGl4ZWwgcmVuZGVyZWQgdHdpY2VcclxuICAgICAgICAgICAgICAgIGdsLmNvbG9yTWFzayhmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBnbC5kZXB0aE1hc2sodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBkZXB0aE1hc2sgbXVzdCBiZSBlbmFibGVkIGJlZm9yZSBjbGVhciBERVBUSF9CVUZGRVJcclxuICAgICAgICAgICAgICAgIGdsLmNsZWFyKGdsLkRFUFRIX0JVRkZFUl9CSVQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoW3ZvbHVtZU1lc2hdLCBjYW1lcmEsIHtcclxuICAgICAgICAgICAgICAgICAgICBnZXRNYXRlcmlhbDogZ2V0UHJlWk1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBSZW5kZXIgbGlnaHRcclxuICAgICAgICAgICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLm1hdGVyaWFsLmRlcHRoTWFzayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKFt2b2x1bWVNZXNoXSwgY2FtZXJhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZ2wuZGVwdGhGdW5jKGdsLkxFU1MpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGlnaHRBY2N1bUZyYW1lQnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0QWNjdW1UZXguZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2xpZ2h0Q29uZUdlby5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9saWdodEN5bGluZGVyR2VvLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0U3BoZXJlR2VvLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9mdWxsUXVhZFBhc3MuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fb3V0cHV0UGFzcy5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlyZWN0aW9uYWxMaWdodE1hdC5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5zaGFkb3dNYXBQYXNzLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IERlZmVycmVkUmVuZGVyZXI7XHJcbiIsIlxyXG5cclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgMngyIE1hdHJpeFxyXG4gKiBAbmFtZSBtYXQyXHJcbiAqL1xyXG5cclxudmFyIG1hdDIgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDJcclxuICpcclxuICogQHJldHVybnMge21hdDJ9IGEgbmV3IDJ4MiBtYXRyaXhcclxuICovXHJcbm1hdDIuY3JlYXRlID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoNCk7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDIgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gYSBuZXcgMngyIG1hdHJpeFxyXG4gKi9cclxubWF0Mi5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIG91dFszXSA9IGFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQyIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2V0IGEgbWF0MiB0byB0aGUgaWRlbnRpdHkgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcclxuICAgIG91dFswXSA9IDE7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zcG9zZSB0aGUgdmFsdWVzIG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cclxubWF0Mi50cmFuc3Bvc2UgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIC8vIElmIHdlIGFyZSB0cmFuc3Bvc2luZyBvdXJzZWx2ZXMgd2UgY2FuIHNraXAgYSBmZXcgc3RlcHMgYnV0IGhhdmUgdG8gY2FjaGUgc29tZSB2YWx1ZXNcclxuICAgIGlmIChvdXQgPT09IGEpIHtcclxuICAgICAgICB2YXIgYTEgPSBhWzFdO1xyXG4gICAgICAgIG91dFsxXSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzJdID0gYTE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG91dFswXSA9IGFbMF07XHJcbiAgICAgICAgb3V0WzFdID0gYVsyXTtcclxuICAgICAgICBvdXRbMl0gPSBhWzFdO1xyXG4gICAgICAgIG91dFszXSA9IGFbM107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnZlcnRzIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cclxubWF0Mi5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sXHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcclxuICAgICAgICBkZXQgPSBhMCAqIGEzIC0gYTIgKiBhMTtcclxuXHJcbiAgICBpZiAoIWRldCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuICAgIG91dFswXSA9ICBhMyAqIGRldDtcclxuICAgIG91dFsxXSA9IC1hMSAqIGRldDtcclxuICAgIG91dFsyXSA9IC1hMiAqIGRldDtcclxuICAgIG91dFszXSA9ICBhMCAqIGRldDtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGFkanVnYXRlIG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cclxubWF0Mi5hZGpvaW50ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICAvLyBDYWNoaW5nIHRoaXMgdmFsdWUgaXMgbmVzc2VjYXJ5IGlmIG91dCA9PSBhXHJcbiAgICB2YXIgYTAgPSBhWzBdO1xyXG4gICAgb3V0WzBdID0gIGFbM107XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIG91dFsyXSA9IC1hWzJdO1xyXG4gICAgb3V0WzNdID0gIGEwO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkZXRlcm1pbmFudCBvZiBhXHJcbiAqL1xyXG5tYXQyLmRldGVybWluYW50ID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybiBhWzBdICogYVszXSAtIGFbMl0gKiBhWzFdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xyXG5tYXQyLm11bHRpcGx5ID0gZnVuY3Rpb24gKG91dCwgYSwgYikge1xyXG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXTtcclxuICAgIHZhciBiMCA9IGJbMF0sIGIxID0gYlsxXSwgYjIgPSBiWzJdLCBiMyA9IGJbM107XHJcbiAgICBvdXRbMF0gPSBhMCAqIGIwICsgYTIgKiBiMTtcclxuICAgIG91dFsxXSA9IGExICogYjAgKyBhMyAqIGIxO1xyXG4gICAgb3V0WzJdID0gYTAgKiBiMiArIGEyICogYjM7XHJcbiAgICBvdXRbM10gPSBhMSAqIGIyICsgYTMgKiBiMztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQyLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbm1hdDIubXVsID0gbWF0Mi5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0MiBieSB0aGUgZ2l2ZW4gYW5nbGVcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLFxyXG4gICAgICAgIHMgPSBNYXRoLnNpbihyYWQpLFxyXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpO1xyXG4gICAgb3V0WzBdID0gYTAgKiAgYyArIGEyICogcztcclxuICAgIG91dFsxXSA9IGExICogIGMgKyBhMyAqIHM7XHJcbiAgICBvdXRbMl0gPSBhMCAqIC1zICsgYTIgKiBjO1xyXG4gICAgb3V0WzNdID0gYTEgKiAtcyArIGEzICogYztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2NhbGVzIHRoZSBtYXQyIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgdGhlIHZlYzIgdG8gc2NhbGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqKi9cclxubWF0Mi5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXSxcclxuICAgICAgICB2MCA9IHZbMF0sIHYxID0gdlsxXTtcclxuICAgIG91dFswXSA9IGEwICogdjA7XHJcbiAgICBvdXRbMV0gPSBhMSAqIHYwO1xyXG4gICAgb3V0WzJdID0gYTIgKiB2MTtcclxuICAgIG91dFszXSA9IGEzICogdjE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cclxubWF0Mi5mcm9iID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybihNYXRoLnNxcnQoTWF0aC5wb3coYVswXSwgMikgKyBNYXRoLnBvdyhhWzFdLCAyKSArIE1hdGgucG93KGFbMl0sIDIpICsgTWF0aC5wb3coYVszXSwgMikpKVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgTCwgRCBhbmQgVSBtYXRyaWNlcyAoTG93ZXIgdHJpYW5ndWxhciwgRGlhZ29uYWwgYW5kIFVwcGVyIHRyaWFuZ3VsYXIpIGJ5IGZhY3Rvcml6aW5nIHRoZSBpbnB1dCBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBMIHRoZSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IEQgdGhlIGRpYWdvbmFsIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IFUgdGhlIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgaW5wdXQgbWF0cml4IHRvIGZhY3Rvcml6ZVxyXG4gKi9cclxuXHJcbm1hdDIuTERVID0gZnVuY3Rpb24gKEwsIEQsIFUsIGEpIHtcclxuICAgIExbMl0gPSBhWzJdL2FbMF07XHJcbiAgICBVWzBdID0gYVswXTtcclxuICAgIFVbMV0gPSBhWzFdO1xyXG4gICAgVVszXSA9IGFbM10gLSBMWzJdICogVVsxXTtcclxuICAgIHJldHVybiBbTCwgRCwgVV07XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbWF0MjsiLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgMngzIE1hdHJpeFxyXG4gKiBAbmFtZSBtYXQyZFxyXG4gKlxyXG4gKiBAZGVzY3JpcHRpb25cclxuICogQSBtYXQyZCBjb250YWlucyBzaXggZWxlbWVudHMgZGVmaW5lZCBhczpcclxuICogPHByZT5cclxuICogW2EsIGMsIHR4LFxyXG4gKiAgYiwgZCwgdHldXHJcbiAqIDwvcHJlPlxyXG4gKiBUaGlzIGlzIGEgc2hvcnQgZm9ybSBmb3IgdGhlIDN4MyBtYXRyaXg6XHJcbiAqIDxwcmU+XHJcbiAqIFthLCBjLCB0eCxcclxuICogIGIsIGQsIHR5LFxyXG4gKiAgMCwgMCwgMV1cclxuICogPC9wcmU+XHJcbiAqIFRoZSBsYXN0IHJvdyBpcyBpZ25vcmVkIHNvIHRoZSBhcnJheSBpcyBzaG9ydGVyIGFuZCBvcGVyYXRpb25zIGFyZSBmYXN0ZXIuXHJcbiAqL1xyXG5cclxudmFyIG1hdDJkID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBtYXQyZFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IGEgbmV3IDJ4MyBtYXRyaXhcclxuICovXHJcbm1hdDJkLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDYpO1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMTtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSAwO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDJkIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgbWF0cml4IHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gYSBuZXcgMngzIG1hdHJpeFxyXG4gKi9cclxubWF0MmQuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoNik7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQyZCB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xyXG5tYXQyZC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBhIG1hdDJkIHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xyXG5tYXQyZC5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMTtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSAwO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBJbnZlcnRzIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXHJcbm1hdDJkLmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmFyIGFhID0gYVswXSwgYWIgPSBhWzFdLCBhYyA9IGFbMl0sIGFkID0gYVszXSxcclxuICAgICAgICBhdHggPSBhWzRdLCBhdHkgPSBhWzVdO1xyXG5cclxuICAgIHZhciBkZXQgPSBhYSAqIGFkIC0gYWIgKiBhYztcclxuICAgIGlmKCFkZXQpe1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuICAgIG91dFswXSA9IGFkICogZGV0O1xyXG4gICAgb3V0WzFdID0gLWFiICogZGV0O1xyXG4gICAgb3V0WzJdID0gLWFjICogZGV0O1xyXG4gICAgb3V0WzNdID0gYWEgKiBkZXQ7XHJcbiAgICBvdXRbNF0gPSAoYWMgKiBhdHkgLSBhZCAqIGF0eCkgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoYWIgKiBhdHggLSBhYSAqIGF0eSkgKiBkZXQ7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkZXRlcm1pbmFudCBvZiBhXHJcbiAqL1xyXG5tYXQyZC5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4gYVswXSAqIGFbM10gLSBhWzFdICogYVsyXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQyZCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xyXG5tYXQyZC5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sIGE0ID0gYVs0XSwgYTUgPSBhWzVdLFxyXG4gICAgICAgIGIwID0gYlswXSwgYjEgPSBiWzFdLCBiMiA9IGJbMl0sIGIzID0gYlszXSwgYjQgPSBiWzRdLCBiNSA9IGJbNV07XHJcbiAgICBvdXRbMF0gPSBhMCAqIGIwICsgYTIgKiBiMTtcclxuICAgIG91dFsxXSA9IGExICogYjAgKyBhMyAqIGIxO1xyXG4gICAgb3V0WzJdID0gYTAgKiBiMiArIGEyICogYjM7XHJcbiAgICBvdXRbM10gPSBhMSAqIGIyICsgYTMgKiBiMztcclxuICAgIG91dFs0XSA9IGEwICogYjQgKyBhMiAqIGI1ICsgYTQ7XHJcbiAgICBvdXRbNV0gPSBhMSAqIGI0ICsgYTMgKiBiNSArIGE1O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDJkLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbm1hdDJkLm11bCA9IG1hdDJkLm11bHRpcGx5O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0MmQgYnkgdGhlIGdpdmVuIGFuZ2xlXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xyXG5tYXQyZC5yb3RhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sIGE0ID0gYVs0XSwgYTUgPSBhWzVdLFxyXG4gICAgICAgIHMgPSBNYXRoLnNpbihyYWQpLFxyXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpO1xyXG4gICAgb3V0WzBdID0gYTAgKiAgYyArIGEyICogcztcclxuICAgIG91dFsxXSA9IGExICogIGMgKyBhMyAqIHM7XHJcbiAgICBvdXRbMl0gPSBhMCAqIC1zICsgYTIgKiBjO1xyXG4gICAgb3V0WzNdID0gYTEgKiAtcyArIGEzICogYztcclxuICAgIG91dFs0XSA9IGE0O1xyXG4gICAgb3V0WzVdID0gYTU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MmQgYnkgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGdpdmVuIHZlYzJcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICoqL1xyXG5tYXQyZC5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXSwgYTQgPSBhWzRdLCBhNSA9IGFbNV0sXHJcbiAgICAgICAgdjAgPSB2WzBdLCB2MSA9IHZbMV07XHJcbiAgICBvdXRbMF0gPSBhMCAqIHYwO1xyXG4gICAgb3V0WzFdID0gYTEgKiB2MDtcclxuICAgIG91dFsyXSA9IGEyICogdjE7XHJcbiAgICBvdXRbM10gPSBhMyAqIHYxO1xyXG4gICAgb3V0WzRdID0gYTQ7XHJcbiAgICBvdXRbNV0gPSBhNTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNsYXRlcyB0aGUgbWF0MmQgYnkgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGdpdmVuIHZlYzJcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHRyYW5zbGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqKi9cclxubWF0MmQudHJhbnNsYXRlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLCBhNCA9IGFbNF0sIGE1ID0gYVs1XSxcclxuICAgICAgICB2MCA9IHZbMF0sIHYxID0gdlsxXTtcclxuICAgIG91dFswXSA9IGEwO1xyXG4gICAgb3V0WzFdID0gYTE7XHJcbiAgICBvdXRbMl0gPSBhMjtcclxuICAgIG91dFszXSA9IGEzO1xyXG4gICAgb3V0WzRdID0gYTAgKiB2MCArIGEyICogdjEgKyBhNDtcclxuICAgIG91dFs1XSA9IGExICogdjAgKyBhMyAqIHYxICsgYTU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQyZFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gY2FsY3VsYXRlIEZyb2Jlbml1cyBub3JtIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IEZyb2Jlbml1cyBub3JtXHJcbiAqL1xyXG5tYXQyZC5mcm9iID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybihNYXRoLnNxcnQoTWF0aC5wb3coYVswXSwgMikgKyBNYXRoLnBvdyhhWzFdLCAyKSArIE1hdGgucG93KGFbMl0sIDIpICsgTWF0aC5wb3coYVszXSwgMikgKyBNYXRoLnBvdyhhWzRdLCAyKSArIE1hdGgucG93KGFbNV0sIDIpICsgMSkpXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbWF0MmQ7IiwiLyoqXHJcbiAqIEBmaWxlb3ZlcnZpZXcgZ2wtbWF0cml4IC0gSGlnaCBwZXJmb3JtYW5jZSBtYXRyaXggYW5kIHZlY3RvciBvcGVyYXRpb25zXHJcbiAqIEBhdXRob3IgQnJhbmRvbiBKb25lc1xyXG4gKiBAYXV0aG9yIENvbGluIE1hY0tlbnppZSBJVlxyXG4gKiBAdmVyc2lvbiAyLjIuMlxyXG4gKi9cclxuXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB2ZWMyIGZyb20gJy4vdmVjMic7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vdmVjMyc7XHJcbmltcG9ydCB2ZWM0IGZyb20gJy4vdmVjNCc7XHJcbmltcG9ydCBtYXQyIGZyb20gJy4vbWF0Mic7XHJcbmltcG9ydCBtYXQyZCBmcm9tICcuL21hdDJkJztcclxuaW1wb3J0IG1hdDMgZnJvbSAnLi9tYXQzJztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9tYXQ0JztcclxuaW1wb3J0IHF1YXQgZnJvbSAnLi9xdWF0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIHZlYzI6IHZlYzIsXHJcbiAgICB2ZWMzOiB2ZWMzLFxyXG4gICAgdmVjNDogdmVjNCxcclxuICAgIG1hdDI6IG1hdDIsXHJcbiAgICBtYXQyZDogbWF0MmQsXHJcbiAgICBtYXQzOiBtYXQzLFxyXG4gICAgbWF0NDogbWF0NCxcclxuICAgIHF1YXQ6IHF1YXRcclxufTtcclxuIiwiLy8gREVQUkVDQVRFRFxyXG5pbXBvcnQgZ2xtYXRyaXggZnJvbSAnLi4vZ2xtYXRyaXgnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZ2xtYXRyaXg7XHJcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuU3BoZXJlXHJcbiAqIEBleHRlbmRzIHtjbGF5LkxpZ2h0fVxyXG4gKi9cclxudmFyIFNwaGVyZUxpZ2h0ID0gTGlnaHQuZXh0ZW5kKFxyXG4vKiogQGxlbmRzIGNsYXkubGlnaHQuU3BoZXJlIyAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJhbmdlOiAxMDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYWRpdXM6IDVcclxufSwge1xyXG5cclxuICAgIHR5cGU6ICdTUEhFUkVfTElHSFQnLFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBzcGhlcmVMaWdodFBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BoZXJlTGlnaHRSYW5nZToge1xyXG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5yYW5nZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BoZXJlTGlnaHRSYWRpdXM6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmFkaXVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzcGhlcmVMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW5zdGFuY2UuY29sb3I7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZW5zaXR5ID0gaW5zdGFuY2UuaW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtjb2xvclswXSppbnRlbnNpdHksIGNvbG9yWzFdKmludGVuc2l0eSwgY29sb3JbMl0qaW50ZW5zaXR5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTcGhlcmVMaWdodDtcclxuIiwiaW1wb3J0IExpZ2h0IGZyb20gJy4uL0xpZ2h0JztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5saWdodC5UdWJlXHJcbiAqIEBleHRlbmRzIHtjbGF5LkxpZ2h0fVxyXG4gKi9cclxudmFyIFR1YmVMaWdodCA9IExpZ2h0LmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5LmxpZ2h0LlR1YmUjICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcmFuZ2U6IDEwMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogMTBcclxufSwge1xyXG5cclxuICAgIHR5cGU6ICdUVUJFX0xJR0hUJyxcclxuXHJcbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XHJcbiAgICAgICAgdHViZUxpZ2h0UG9zaXRpb246IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0V29ybGRQb3NpdGlvbigpLmFycmF5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdHViZUxpZ2h0RXh0ZW5kOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBFeHRlbmQgaW4geCBheGlzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguY29weShpbnN0YW5jZS53b3JsZFRyYW5zZm9ybS54KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubm9ybWFsaXplKCkuc2NhbGUoaW5zdGFuY2UubGVuZ3RoIC8gMikuYXJyYXk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KSgpXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdHViZUxpZ2h0UmFuZ2U6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmFuZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICB0dWJlTGlnaHRDb2xvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0qaW50ZW5zaXR5LCBjb2xvclsxXSppbnRlbnNpdHksIGNvbG9yWzJdKmludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVHViZUxpZ2h0O1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IGNyZWF0ZUNvbXBvc2l0b3IgZnJvbSAnLi4vY3JlYXRlQ29tcG9zaXRvcic7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubG9hZGVyLkZYXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgRlhMb2FkZXIgPSBCYXNlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkubG9hZGVyLkZYIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHJvb3RQYXRoOiAnJyxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGV4dHVyZVJvb3RQYXRoOiAnJyxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgc2hhZGVyUm9vdFBhdGg6ICcnLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuU2NlbmV9XHJcbiAgICAgKi9cclxuICAgIHNjZW5lOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuQ2FtZXJhfVxyXG4gICAgICovXHJcbiAgICBjYW1lcmE6IG51bGxcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LmxvYWRlci5GWC5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHVybFxyXG4gICAgICovXHJcbiAgICBsb2FkOiBmdW5jdGlvbih1cmwpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5yb290UGF0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnJvb3RQYXRoID0gdXJsLnNsaWNlKDAsIHVybC5sYXN0SW5kZXhPZignLycpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZlbmRvci5yZXF1ZXN0LmdldCh7XHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICBvbnByb2dyZXNzOiBmdW5jdGlvbihwZXJjZW50LCBsb2FkZWQsIHRvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3Byb2dyZXNzJywgcGVyY2VudCwgbG9hZGVkLCB0b3RhbCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uZXJyb3I6IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignZXJyb3InLCBlKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgIG9ubG9hZDogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGNyZWF0ZUNvbXBvc2l0b3IoSlNPTi5wYXJzZShkYXRhKSwge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHR1cmVSb290UGF0aDogdGhpcy50ZXh0dXJlUm9vdFBhdGggfHwgdGhpcy5yb290UGF0aCxcclxuICAgICAgICAgICAgICAgICAgICBjYW1lcmE6IHRoaXMuY2FtZXJhLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjZW5lOiB0aGlzLnNjZW5lXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZYTG9hZGVyO1xyXG4iLCJpbXBvcnQgbWF0MiBmcm9tICcuLi9nbG1hdHJpeC9tYXQyJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuTWF0cml4MlxyXG4gKi9cclxudmFyIE1hdHJpeDIgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JhZ2Ugb2YgTWF0cml4MlxyXG4gICAgICogQG5hbWUgYXJyYXlcclxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5NYXRyaXgyI1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFycmF5ID0gbWF0Mi5jcmVhdGUoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIF9kaXJ0eVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5NYXRyaXgyI1xyXG4gICAgICovXHJcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbn07XHJcblxyXG5NYXRyaXgyLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogTWF0cml4MixcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBjb21wb25lbnRzIGZyb20gYXJyYXlcclxuICAgICAqIEBwYXJhbSAge0Zsb2F0MzJBcnJheXxudW1iZXJbXX0gYXJyXHJcbiAgICAgKi9cclxuICAgIHNldEFycmF5OiBmdW5jdGlvbiAoYXJyKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbaV0gPSBhcnJbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IE1hdHJpeDJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAobmV3IE1hdHJpeDIoKSkuY29weSh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGZyb20gYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQyLmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgYWRqdWdhdGUgb2Ygc2VsZiwgaW4tcGxhY2VcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgYWRqb2ludDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0Mi5hZGpvaW50KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgbWF0cml4IGRldGVybWluYW50XHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRldGVybWluYW50OiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbWF0Mi5kZXRlcm1pbmFudCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdG8gYSBpZGVudGl0eSBtYXRyaXhcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgaWRlbnRpdHk6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDIuaWRlbnRpdHkodGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydCBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIGludmVydDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0Mi5pbnZlcnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdXRpcGx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgbXVsOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0Mi5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseUxlZnRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBtdWxMZWZ0OiBmdW5jdGlvbihhKSB7XHJcbiAgICAgICAgbWF0Mi5tdWwodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDIubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IGEgYW5kIHNlbGYsIGEgaXMgb24gdGhlIGxlZnRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uKGEpIHtcclxuICAgICAgICBtYXQyLm11bHRpcGx5KHRoaXMuYXJyYXksIGEuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhblxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgIHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICByb3RhdGU6IGZ1bmN0aW9uKHJhZCkge1xyXG4gICAgICAgIG1hdDIucm90YXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHJhZCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHNlbGYgYnkgc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24odikge1xyXG4gICAgICAgIG1hdDIuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgdi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNwb3NlIHNlbGYsIGluLXBsYWNlLlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc3Bvc2U6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDIudHJhbnNwb3NlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7TWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge01hdHJpeDJ9IGFcclxuICogQHJldHVybiB7TWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIuYWRqb2ludCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0Mi5hZGpvaW50KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0Mi5jb3B5KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbk1hdHJpeDIuZGV0ZXJtaW5hbnQgPSBmdW5jdGlvbihhKSB7XHJcbiAgICByZXR1cm4gbWF0Mi5kZXRlcm1pbmFudChhLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IG91dFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICBtYXQyLmlkZW50aXR5KG91dC5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBtYXQyLmludmVydChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gKi9cclxuTWF0cml4Mi5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG1hdDIubXVsKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gKi9cclxuTWF0cml4Mi5tdWx0aXBseSA9IE1hdHJpeDIubXVsO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIucm90YXRlID0gZnVuY3Rpb24ob3V0LCBhLCByYWQpIHtcclxuICAgIG1hdDIucm90YXRlKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICBtYXQyLnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtNYXRyaXgyfSBvdXRcclxuICogQHBhcmFtICB7TWF0cml4Mn0gYVxyXG4gKiBAcmV0dXJuIHtNYXRyaXgyfVxyXG4gKi9cclxuTWF0cml4Mi50cmFuc3Bvc2UgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDIudHJhbnNwb3NlKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRyaXgyO1xyXG4iLCJpbXBvcnQgbWF0MmQgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0MmQnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5NYXRyaXgyZFxyXG4gKi9cclxudmFyIE1hdHJpeDJkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAvKipcclxuICAgICAqIFN0b3JhZ2Ugb2YgTWF0cml4MmRcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MmQjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSBtYXQyZC5jcmVhdGUoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIF9kaXJ0eVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5NYXRyaXgyZCNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuTWF0cml4MmQucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBNYXRyaXgyZCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBjb21wb25lbnRzIGZyb20gYXJyYXlcclxuICAgICAqIEBwYXJhbSAge0Zsb2F0MzJBcnJheXxudW1iZXJbXX0gYXJyXHJcbiAgICAgKi9cclxuICAgIHNldEFycmF5OiBmdW5jdGlvbiAoYXJyKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbaV0gPSBhcnJbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IE1hdHJpeDJkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgTWF0cml4MmQoKSkuY29weSh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGZyb20gYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDJkLmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBtYXRyaXggZGV0ZXJtaW5hbnRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGV0ZXJtaW5hbnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBtYXQyZC5kZXRlcm1pbmFudCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdG8gYSBpZGVudGl0eSBtYXRyaXhcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIGlkZW50aXR5OiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQyZC5pZGVudGl0eSh0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0IHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIGludmVydDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0MmQuaW52ZXJ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXV0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgbXVsOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0MmQubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBtdWxMZWZ0OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0MmQubXVsKHRoaXMuYXJyYXksIGIuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDJkLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBhIGFuZCBzZWxmLCBhIGlzIG9uIHRoZSBsZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQyZC5tdWx0aXBseSh0aGlzLmFycmF5LCBiLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW5cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gICByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZTogZnVuY3Rpb24ocmFkKSB7XHJcbiAgICAgICAgbWF0MmQucm90YXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHJhZCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHNlbGYgYnkgc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgc2NhbGU6IGZ1bmN0aW9uKHMpIHtcclxuICAgICAgICBtYXQyZC5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNsYXRlIHNlbGYgYnkgdlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgdlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgdHJhbnNsYXRlOiBmdW5jdGlvbih2KSB7XHJcbiAgICAgICAgbWF0MmQudHJhbnNsYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDJkLmNvcHkob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcbk1hdHJpeDJkLmRldGVybWluYW50ID0gZnVuY3Rpb24oYSkge1xyXG4gICAgcmV0dXJuIG1hdDJkLmRldGVybWluYW50KGEuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcclxuICAgIG1hdDJkLmlkZW50aXR5KG91dC5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0MmQuaW52ZXJ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQubXVsID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBtYXQyZC5tdWwob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQubXVsdGlwbHkgPSBNYXRyaXgyZC5tdWw7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgIHJhZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQucm90YXRlID0gZnVuY3Rpb24ob3V0LCBhLCByYWQpIHtcclxuICAgIG1hdDJkLnJvdGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIG1hdDJkLnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gKi9cclxuTWF0cml4MmQudHJhbnNsYXRlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICBtYXQyZC50cmFuc2xhdGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1hdHJpeDJkO1xyXG4iLCJpbXBvcnQgbWF0MyBmcm9tICcuLi9nbG1hdHJpeC9tYXQzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuTWF0cml4M1xyXG4gKi9cclxudmFyIE1hdHJpeDMgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIE1hdHJpeDNcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MyNcclxuICAgICAqL1xyXG4gICAgdGhpcy5hcnJheSA9IG1hdDMuY3JlYXRlKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MyNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuTWF0cml4My5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IE1hdHJpeDMsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gYXJyW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGFkanVnYXRlIG9mIHNlbGYsIGluLXBsYWNlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGFkam9pbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBtYXQzLmFkam9pbnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IE1hdHJpeDNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gKG5ldyBNYXRyaXgzKCkpLmNvcHkodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIG1hdDMuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIG1hdHJpeCBkZXRlcm1pbmFudFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkZXRlcm1pbmFudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBtYXQzLmRldGVybWluYW50KHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIE1hdHJpeDJkIGFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDJkOiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIG1hdDMuZnJvbU1hdDJkKHRoaXMuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3BpZXMgdGhlIHVwcGVyLWxlZnQgM3gzIHZhbHVlcyBvZiBNYXRyaXg0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDQ6IGZ1bmN0aW9uIChhKSB7XHJcbiAgICAgICAgbWF0My5mcm9tTWF0NCh0aGlzLmFycmF5LCBhLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyBhIHJvdGF0aW9uIG1hdHJpeCBmcm9tIHRoZSBnaXZlbiBxdWF0ZXJuaW9uXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgZnJvbVF1YXQ6IGZ1bmN0aW9uIChxKSB7XHJcbiAgICAgICAgbWF0My5mcm9tUXVhdCh0aGlzLmFycmF5LCBxLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRvIGEgaWRlbnRpdHkgbWF0cml4XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGlkZW50aXR5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbWF0My5pZGVudGl0eSh0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0IHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgaW52ZXJ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbWF0My5pbnZlcnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdXRpcGx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgbXVsOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIG1hdDMubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgbXVsTGVmdDogZnVuY3Rpb24gKGEpIHtcclxuICAgICAgICBtYXQzLm11bCh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIG1hdDMubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IGEgYW5kIHNlbGYsIGEgaXMgb24gdGhlIGxlZnRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseUxlZnQ6IGZ1bmN0aW9uIChhKSB7XHJcbiAgICAgICAgbWF0My5tdWx0aXBseSh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW5cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gICByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgcm90YXRlOiBmdW5jdGlvbiAocmFkKSB7XHJcbiAgICAgICAgbWF0My5yb3RhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgc2VsZiBieSBzXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9ICBzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbiAodikge1xyXG4gICAgICAgIG1hdDMuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgdi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zbGF0ZSBzZWxmIGJ5IHZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAodikge1xyXG4gICAgICAgIG1hdDMudHJhbnNsYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgYSAzeDMgbm9ybWFsIG1hdHJpeCAodHJhbnNwb3NlIGludmVyc2UpIGZyb20gdGhlIDR4NCBtYXRyaXhcclxuICAgICAqIEBwYXJhbSB7Y2xheS5NYXRyaXg0fSBhXHJcbiAgICAgKi9cclxuICAgIG5vcm1hbEZyb21NYXQ0OiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIG1hdDMubm9ybWFsRnJvbU1hdDQodGhpcy5hcnJheSwgYS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zcG9zZSBzZWxmLCBpbi1wbGFjZS5cclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgdHJhbnNwb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbWF0My50cmFuc3Bvc2UodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSk7XHJcbiAgICB9XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5hZGpvaW50ID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgbWF0My5hZGpvaW50KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuY29weSA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMuY29weShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5NYXRyaXgzLmRldGVybWluYW50ID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHJldHVybiBtYXQzLmRldGVybWluYW50KGEuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuaWRlbnRpdHkgPSBmdW5jdGlvbiAob3V0KSB7XHJcbiAgICBtYXQzLmlkZW50aXR5KG91dC5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuaW52ZXJ0ID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgbWF0My5pbnZlcnQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLm11bCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIG1hdDMubXVsKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5tdWx0aXBseSA9IE1hdHJpeDMubXVsO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gIG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuZnJvbU1hdDJkID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgbWF0My5mcm9tTWF0MmQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5mcm9tTWF0NCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMuZnJvbU1hdDQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9ICAgIG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5mcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEpIHtcclxuICAgIG1hdDMuZnJvbVF1YXQob3V0LmFycmF5LCBxLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5ub3JtYWxGcm9tTWF0NCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMubm9ybWFsRnJvbU1hdDQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICBtYXQzLnJvdGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLnNjYWxlID0gZnVuY3Rpb24gKG91dCwgYSwgdikge1xyXG4gICAgbWF0My5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLnRyYW5zcG9zZSA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMudHJhbnNwb3NlKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHYpIHtcclxuICAgIG1hdDMudHJhbnNsYXRlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRyaXgzO1xyXG4iLCJpbXBvcnQgVmVjdG9yMyBmcm9tICcuL1ZlY3RvcjMnO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tICcuL1ZlY3RvcjInO1xyXG5cclxuLyoqXHJcbiAqIFJhbmRvbSBvciBjb25zdGFudCAxZCwgMmQsIDNkIHZlY3RvciBnZW5lcmF0b3JcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlZhbHVlXHJcbiAqL1xyXG52YXIgVmFsdWUgPSBmdW5jdGlvbigpIHt9O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcnxjbGF5LlZlY3RvcjJ8Y2xheS5WZWN0b3IzfSBbb3V0XVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ8Y2xheS5WZWN0b3IyfGNsYXkuVmVjdG9yM31cclxuICovXHJcblZhbHVlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihvdXQpIHt9O1xyXG5cclxuLy8gQ29uc3RhbnRcclxudmFyIENvbnN0YW50VmFsdWUgPSBmdW5jdGlvbih2YWwpIHtcclxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgIH07XHJcbn07XHJcbkNvbnN0YW50VmFsdWUucHJvdG90eXBlID0gbmV3IFZhbHVlKCk7XHJcbkNvbnN0YW50VmFsdWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29uc3RhbnRWYWx1ZTtcclxuXHJcbi8vIFZlY3RvclxyXG52YXIgVmVjdG9yVmFsdWUgPSBmdW5jdGlvbih2YWwpIHtcclxuICAgIHZhciBDb25zdHJ1Y3RvciA9IHZhbC5jb25zdHJ1Y3RvcjtcclxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IENvbnN0cnVjdG9yKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG91dC5jb3B5KHZhbCk7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH07XHJcbn07XHJcblZlY3RvclZhbHVlLnByb3RvdHlwZSA9IG5ldyBWYWx1ZSgpO1xyXG5WZWN0b3JWYWx1ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWZWN0b3JWYWx1ZTtcclxuLy9SYW5kb20gMURcclxudmFyIFJhbmRvbTFEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIHZhciByYW5nZSA9IG1heCAtIG1pbjtcclxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiByYW5nZSArIG1pbjtcclxuICAgIH07XHJcbn07XHJcblJhbmRvbTFELnByb3RvdHlwZSA9IG5ldyBWYWx1ZSgpO1xyXG5SYW5kb20xRC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSYW5kb20xRDtcclxuXHJcbi8vIFJhbmRvbTJEXHJcbnZhciBSYW5kb20yRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XHJcbiAgICB2YXIgcmFuZ2VYID0gbWF4LnggLSBtaW4ueDtcclxuICAgIHZhciByYW5nZVkgPSBtYXgueSAtIG1pbi55O1xyXG5cclxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgVmVjdG9yMi5zZXQoXHJcbiAgICAgICAgICAgIG91dCxcclxuICAgICAgICAgICAgcmFuZ2VYICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVswXSxcclxuICAgICAgICAgICAgcmFuZ2VZICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVsxXVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9O1xyXG59O1xyXG5SYW5kb20yRC5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcclxuUmFuZG9tMkQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZG9tMkQ7XHJcblxyXG52YXIgUmFuZG9tM0QgPSBmdW5jdGlvbihtaW4sIG1heCkge1xyXG4gICAgdmFyIHJhbmdlWCA9IG1heC54IC0gbWluLng7XHJcbiAgICB2YXIgcmFuZ2VZID0gbWF4LnkgLSBtaW4ueTtcclxuICAgIHZhciByYW5nZVogPSBtYXgueiAtIG1pbi56O1xyXG5cclxuICAgIHRoaXMuZ2V0ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgVmVjdG9yMy5zZXQoXHJcbiAgICAgICAgICAgIG91dCxcclxuICAgICAgICAgICAgcmFuZ2VYICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVswXSxcclxuICAgICAgICAgICAgcmFuZ2VZICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVsxXSxcclxuICAgICAgICAgICAgcmFuZ2VaICogTWF0aC5yYW5kb20oKSArIG1pbi5hcnJheVsyXVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9O1xyXG59O1xyXG5SYW5kb20zRC5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcclxuUmFuZG9tM0QucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZG9tM0Q7XHJcblxyXG4vLyBGYWN0b3J5IG1ldGhvZHNcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBjb25zdGFudCAxZCB2YWx1ZSBnZW5lcmF0b3JcclxuICogQHBhcmFtICB7bnVtYmVyfSBjb25zdGFudFxyXG4gKiBAcmV0dXJuIHtjbGF5LlZhbHVlfVxyXG4gKi9cclxuVmFsdWUuY29uc3RhbnQgPSBmdW5jdGlvbihjb25zdGFudCkge1xyXG4gICAgcmV0dXJuIG5ldyBDb25zdGFudFZhbHVlKGNvbnN0YW50KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBjb25zdGFudCB2ZWN0b3IgdmFsdWUoMmQgb3IgM2QpIGdlbmVyYXRvclxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ8Y2xheS5WZWN0b3IzfSB2ZWN0b3JcclxuICogQHJldHVybiB7Y2xheS5WYWx1ZX1cclxuICovXHJcblZhbHVlLnZlY3RvciA9IGZ1bmN0aW9uKHZlY3Rvcikge1xyXG4gICAgcmV0dXJuIG5ldyBWZWN0b3JWYWx1ZSh2ZWN0b3IpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHJhbmRvbSAxZCB2YWx1ZSBnZW5lcmF0b3JcclxuICogQHBhcmFtICB7bnVtYmVyfSBtaW5cclxuICogQHBhcmFtICB7bnVtYmVyfSBtYXhcclxuICogQHJldHVybiB7Y2xheS5WYWx1ZX1cclxuICovXHJcblZhbHVlLnJhbmRvbTFEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIHJldHVybiBuZXcgUmFuZG9tMUQobWluLCBtYXgpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHJhbmRvbSAyZCB2YWx1ZSBnZW5lcmF0b3JcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBtaW5cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBtYXhcclxuICogQHJldHVybiB7Y2xheS5WYWx1ZX1cclxuICovXHJcblZhbHVlLnJhbmRvbTJEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIHJldHVybiBuZXcgUmFuZG9tMkQobWluLCBtYXgpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHJhbmRvbSAzZCB2YWx1ZSBnZW5lcmF0b3JcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBtaW5cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBtYXhcclxuICogQHJldHVybiB7Y2xheS5WYWx1ZX1cclxuICovXHJcblZhbHVlLnJhbmRvbTNEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIHJldHVybiBuZXcgUmFuZG9tM0QobWluLCBtYXgpO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVmFsdWU7XHJcbiIsImltcG9ydCB2ZWM0IGZyb20gJy4uL2dsbWF0cml4L3ZlYzQnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5WZWN0b3I0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB6XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3XHJcbiAqL1xyXG52YXIgVmVjdG9yNCA9IGZ1bmN0aW9uKHgsIHksIHosIHcpIHtcclxuXHJcbiAgICB4ID0geCB8fCAwO1xyXG4gICAgeSA9IHkgfHwgMDtcclxuICAgIHogPSB6IHx8IDA7XHJcbiAgICB3ID0gdyB8fCAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcmFnZSBvZiBWZWN0b3I0LCByZWFkIGFuZCB3cml0ZSBvZiB4LCB5LCB6LCB3IHdpbGwgY2hhbmdlIHRoZSB2YWx1ZXMgaW4gYXJyYXlcclxuICAgICAqIEFsbCBtZXRob2RzIGFsc28gb3BlcmF0ZSBvbiB0aGUgYXJyYXkgaW5zdGVhZCBvZiB4LCB5LCB6LCB3IGNvbXBvbmVudHNcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yNCNcclxuICAgICAqL1xyXG4gICAgdGhpcy5hcnJheSA9IHZlYzQuZnJvbVZhbHVlcyh4LCB5LCB6LCB3KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpcnR5IGZsYWcgaXMgdXNlZCBieSB0aGUgTm9kZSB0byBkZXRlcm1pbmVcclxuICAgICAqIGlmIHRoZSBtYXRyaXggaXMgdXBkYXRlZCB0byBsYXRlc3RcclxuICAgICAqIEBuYW1lIF9kaXJ0eVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3I0I1xyXG4gICAgICovXHJcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbn07XHJcblxyXG5WZWN0b3I0LnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogVmVjdG9yNCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBiIHRvIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0LmFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50c1xyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgelxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgd1xyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKHgsIHksIHosIHcpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0geDtcclxuICAgICAgICB0aGlzLmFycmF5WzFdID0geTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gejtcclxuICAgICAgICB0aGlzLmFycmF5WzNdID0gdztcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHksIHogYW5kIHcgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24oYXJyKSB7XHJcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IGFyclswXTtcclxuICAgICAgICB0aGlzLmFycmF5WzFdID0gYXJyWzFdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMl0gPSBhcnJbMl07XHJcbiAgICAgICAgdGhpcy5hcnJheVszXSA9IGFyclszXTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IFZlY3RvcjRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yNCh0aGlzLngsIHRoaXMueSwgdGhpcy56LCB0aGlzLncpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgZnJvbSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIGRpc3RhbmNlXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGlzdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHJldHVybiB2ZWM0LmRpc3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzdGFuY2UgYmV0d2VlbiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGlzdGFuY2U6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5kaXN0YW5jZSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgZGl2aWRlXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgZGl2OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5kaXYodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpdmlkZSBzZWxmIGJ5IGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBkaXZpZGU6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0LmRpdmlkZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRG90IHByb2R1Y3Qgb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRvdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHJldHVybiB2ZWM0LmRvdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBvZiBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVuOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5sZW4odGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVuZ3RoOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5sZW5ndGgodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBMaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGEgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB0XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIGxlcnA6IGZ1bmN0aW9uKGEsIGIsIHQpIHtcclxuICAgICAgICB2ZWM0LmxlcnAodGhpcy5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgdCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1pbmltdW0gb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIG1pbjogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQubWluKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXhpbXVtIG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBtYXg6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0Lm1heCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgbXVsOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11dGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5tdWx0aXBseSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTmVnYXRlIHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgbmVnYXRlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2ZWM0Lm5lZ2F0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTm9ybWFsaXplIHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2ZWM0Lm5vcm1hbGl6ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgcmFuZG9tIHgsIHksIHosIHcgY29tcG9uZW50cyB3aXRoIGEgZ2l2ZW4gc2NhbGVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gc2NhbGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgcmFuZG9tOiBmdW5jdGlvbihzY2FsZSkge1xyXG4gICAgICAgIHZlYzQucmFuZG9tKHRoaXMuYXJyYXksIHNjYWxlKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgc2VsZlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgc2NhbGU6IGZ1bmN0aW9uKHMpIHtcclxuICAgICAgICB2ZWM0LnNjYWxlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHMpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIGIgYW5kIGFkZCB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlQW5kQWRkOiBmdW5jdGlvbihiLCBzKSB7XHJcbiAgICAgICAgdmVjNC5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5zcXJEaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZERpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQuc3F1YXJlZERpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkTGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQuc3FyTGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQuc3F1YXJlZExlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3Igc3VidHJhY3RcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBzdWI6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0LnN1Yih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgYiBmcm9tIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBzdWJ0cmFjdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQuc3VidHJhY3QodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXg0IG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQ0OiBmdW5jdGlvbihtKSB7XHJcbiAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgUXVhdGVybmlvbiBxXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtUXVhdDogZnVuY3Rpb24ocSkge1xyXG4gICAgICAgIHZlYzQudHJhbnNmb3JtUXVhdCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBxLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xyXG4vLyBHZXR0ZXIgYW5kIFNldHRlclxyXG5pZiAoZGVmaW5lUHJvcGVydHkpIHtcclxuXHJcbiAgICB2YXIgcHJvdG8gPSBWZWN0b3I0LnByb3RvdHlwZTtcclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgeFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzBdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVswXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yNFxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneScsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMV07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzFdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHpcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3I0XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd6Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVsyXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMl0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgd1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3cnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzNdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVszXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8vIFN1cHBseSBtZXRob2RzIHRoYXQgYXJlIG5vdCBpbiBwbGFjZVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5hZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzQuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHpcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHosIHcpIHtcclxuICAgIHZlYzQuc2V0KG91dC5hcnJheSwgeCwgeSwgeiwgdyk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBiKSB7XHJcbiAgICB2ZWM0LmNvcHkob3V0LmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQuZGlzdCA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHJldHVybiB2ZWM0LmRpc3RhbmNlKGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQuZGlzdGFuY2UgPSBWZWN0b3I0LmRpc3Q7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LmRpdiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjNC5kaXZpZGUob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LmRpdmlkZSA9IFZlY3RvcjQuZGl2O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yNC5kb3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjNC5kb3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQubGVuID0gZnVuY3Rpb24oYikge1xyXG4gICAgcmV0dXJuIHZlYzQubGVuZ3RoKGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLy8gVmVjdG9yNC5sZW5ndGggPSBWZWN0b3I0LmxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5sZXJwID0gZnVuY3Rpb24ob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2ZWM0LmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWM0Lm1pbihvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5tYXggPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzQubWF4KG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0Lm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjNC5tdWx0aXBseShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubXVsdGlwbHkgPSBWZWN0b3I0Lm11bDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5uZWdhdGUgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZlYzQubmVnYXRlKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2ZWM0Lm5vcm1hbGl6ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQucmFuZG9tID0gZnVuY3Rpb24ob3V0LCBzY2FsZSkge1xyXG4gICAgdmVjNC5yYW5kb20ob3V0LmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHNjYWxlKSB7XHJcbiAgICB2ZWM0LnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIHZlYzQuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LnNxckRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjNC5zcXJEaXN0KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQuc3F1YXJlZERpc3RhbmNlID0gVmVjdG9yNC5zcXJEaXN0O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LnNxckxlbiA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHJldHVybiB2ZWM0LnNxckxlbihhLmFycmF5KTtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yNC5zcXVhcmVkTGVuZ3RoID0gVmVjdG9yNC5zcXJMZW47XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LnN1YiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjNC5zdWJ0cmFjdChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5zdWJ0cmFjdCA9IFZlY3RvcjQuc3ViO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC50cmFuc2Zvcm1NYXQ0ID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2ZWM0LnRyYW5zZm9ybU1hdDQob3V0LmFycmF5LCBhLmFycmF5LCBtLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQudHJhbnNmb3JtUXVhdCA9IGZ1bmN0aW9uKG91dCwgYSwgcSkge1xyXG4gICAgdmVjNC50cmFuc2Zvcm1RdWF0KG91dC5hcnJheSwgYS5hcnJheSwgcS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBWZWN0b3I0O1xyXG4iLCJpbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkucGFydGljbGUuUGFydGljbGVcclxuICovXHJcbnZhciBQYXJ0aWNsZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZSBldWxlciBhbmdsZSB0byByZXByZXNlbnQgcGFydGljbGUgcm90YXRpb25cclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucm90YXRpb24gPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUgez9jbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMudmVsb2NpdHkgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUgez9jbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuYW5ndWxhclZlbG9jaXR5ID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubGlmZSA9IDE7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmFnZSA9IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnNwcml0ZVNpemUgPSAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy53ZWlnaHQgPSAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkucGFydGljbGUuRW1pdHRlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5lbWl0dGVyID0gbnVsbDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBVcGRhdGUgcGFydGljbGUgcG9zaXRpb25cclxuICogQHBhcmFtICB7bnVtYmVyfSBkZWx0YVRpbWVcclxuICovXHJcblBhcnRpY2xlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbihkZWx0YVRpbWUpIHtcclxuICAgIGlmICh0aGlzLnZlbG9jaXR5KSB7XHJcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZCh0aGlzLnBvc2l0aW9uLmFycmF5LCB0aGlzLnBvc2l0aW9uLmFycmF5LCB0aGlzLnZlbG9jaXR5LmFycmF5LCBkZWx0YVRpbWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYW5ndWxhclZlbG9jaXR5KSB7XHJcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZCh0aGlzLnJvdGF0aW9uLmFycmF5LCB0aGlzLnJvdGF0aW9uLmFycmF5LCB0aGlzLmFuZ3VsYXJWZWxvY2l0eS5hcnJheSwgZGVsdGFUaW1lKTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBhcnRpY2xlO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgUGFydGljbGUgZnJvbSAnLi9QYXJ0aWNsZSc7XHJcbmltcG9ydCBWYWx1ZSBmcm9tICcuLi9tYXRoL1ZhbHVlJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wYXJ0aWNsZS5FbWl0dGVyXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgRW1pdHRlciA9IEJhc2UuZXh0ZW5kKCAvKiogQGxlbmRzIGNsYXkucGFydGljbGUuRW1pdHRlciMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBNYXhpbXVtIG51bWJlciBvZiBwYXJ0aWNsZXMgY3JlYXRlZCBieSB0aGlzIGVtaXR0ZXJcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIG1heDogMTAwMCxcclxuICAgIC8qKlxyXG4gICAgICogTnVtYmVyIG9mIHBhcnRpY2xlcyBjcmVhdGVkIGJ5IHRoaXMgZW1pdHRlciBlYWNoIHNob3RcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGFtb3VudDogMjAsXHJcblxyXG4gICAgLy8gSW5pdCBzdGF0dXMgZm9yIGVhY2ggcGFydGljbGVcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgbGlmZSBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgbGlmZTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgcG9zaXRpb24gZ2VuZXJhdG9yXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmFsdWUuPGNsYXkuVmVjdG9yMz59XHJcbiAgICAgKi9cclxuICAgIHBvc2l0aW9uOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJ0aWNsZSByb3RhdGlvbiBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48Y2xheS5WZWN0b3IzPn1cclxuICAgICAqL1xyXG4gICAgcm90YXRpb246IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRpY2xlIHZlbG9jaXR5IGdlbmVyYXRvclxyXG4gICAgICogQHR5cGUgez9jbGF5LlZhbHVlLjxjbGF5LlZlY3RvcjM+fVxyXG4gICAgICovXHJcbiAgICB2ZWxvY2l0eTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgYW5ndWxhciB2ZWxvY2l0eSBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48Y2xheS5WZWN0b3IzPn1cclxuICAgICAqL1xyXG4gICAgYW5ndWxhclZlbG9jaXR5OiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJ0aWNsZSBzcHJpdGUgc2l6ZSBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgc3ByaXRlU2l6ZTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgd2VpZ2h0IGdlbmVyYXRvclxyXG4gICAgICogQHR5cGUgez9jbGF5LlZhbHVlLjxudW1iZXI+fVxyXG4gICAgICovXHJcbiAgICB3ZWlnaHQ6IG51bGwsXHJcblxyXG4gICAgX3BhcnRpY2xlUG9vbDogbnVsbFxyXG5cclxufSwgZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgdGhpcy5fcGFydGljbGVQb29sID0gW107XHJcblxyXG4gICAgLy8gVE9ETyBSZWR1Y2UgaGVhcCBtZW1vcnlcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXg7IGkrKykge1xyXG4gICAgICAgIHZhciBwYXJ0aWNsZSA9IG5ldyBQYXJ0aWNsZSgpO1xyXG4gICAgICAgIHBhcnRpY2xlLmVtaXR0ZXIgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuX3BhcnRpY2xlUG9vbC5wdXNoKHBhcnRpY2xlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmVsb2NpdHkpIHtcclxuICAgICAgICAgICAgcGFydGljbGUudmVsb2NpdHkgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5hbmd1bGFyVmVsb2NpdHkpIHtcclxuICAgICAgICAgICAgcGFydGljbGUuYW5ndWxhclZlbG9jaXR5ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEVtaXR0ZXIgbnVtYmVyIG9mIHBhcnRpY2xlcyBhbmQgcHVzaCB0aGVtIHRvIGEgZ2l2ZW4gcGFydGljbGUgbGlzdC4gRW1taXQgbnVtYmVyIGlzIGRlZmluZWQgYnkgYW1vdW50IHByb3BlcnR5XHJcbiAgICAgKiBAcGFyYW0gIHtBcnJheS48Y2xheS5wYXJ0aWNsZS5QYXJ0aWNsZT59IG91dFxyXG4gICAgICovXHJcbiAgICBlbWl0OiBmdW5jdGlvbihvdXQpIHtcclxuICAgICAgICB2YXIgYW1vdW50ID0gTWF0aC5taW4odGhpcy5fcGFydGljbGVQb29sLmxlbmd0aCwgdGhpcy5hbW91bnQpO1xyXG5cclxuICAgICAgICB2YXIgcGFydGljbGU7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBwYXJ0aWNsZSA9IHRoaXMuX3BhcnRpY2xlUG9vbC5wb3AoKTtcclxuICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBwYXJ0aWNsZSBzdGF0dXNcclxuICAgICAgICAgICAgaWYgKHRoaXMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24uZ2V0KHBhcnRpY2xlLnBvc2l0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGlvbi5nZXQocGFydGljbGUucm90YXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZlbG9jaXR5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZlbG9jaXR5LmdldChwYXJ0aWNsZS52ZWxvY2l0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuYW5ndWxhclZlbG9jaXR5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuZ3VsYXJWZWxvY2l0eS5nZXQocGFydGljbGUuYW5ndWxhclZlbG9jaXR5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5saWZlKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZS5saWZlID0gdGhpcy5saWZlLmdldCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNwcml0ZVNpemUpIHtcclxuICAgICAgICAgICAgICAgIHBhcnRpY2xlLnNwcml0ZVNpemUgPSB0aGlzLnNwcml0ZVNpemUuZ2V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMud2VpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZS53ZWlnaHQgPSB0aGlzLndlaWdodC5nZXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYXJ0aWNsZS5hZ2UgPSAwO1xyXG5cclxuICAgICAgICAgICAgb3V0LnB1c2gocGFydGljbGUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEtpbGwgYSBkZWFkIHBhcnRpY2xlIGFuZCBwdXQgaXQgYmFjayBpbiB0aGUgcG9vbFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5wYXJ0aWNsZS5QYXJ0aWNsZX0gcGFydGljbGVcclxuICAgICAqL1xyXG4gICAga2lsbDogZnVuY3Rpb24ocGFydGljbGUpIHtcclxuICAgICAgICB0aGlzLl9wYXJ0aWNsZVBvb2wucHVzaChwYXJ0aWNsZSk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGNvbnN0YW50IDFkIHZhbHVlIGdlbmVyYXRvci4gQWxpYXMgZm9yIHtAbGluayBjbGF5LlZhbHVlLmNvbnN0YW50fVxyXG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLmNvbnN0YW50XHJcbiAqL1xyXG5FbWl0dGVyLmNvbnN0YW50ID0gVmFsdWUuY29uc3RhbnQ7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgY29uc3RhbnQgdmVjdG9yIHZhbHVlKDJkIG9yIDNkKSBnZW5lcmF0b3IuIEFsaWFzIGZvciB7QGxpbmsgY2xheS5WYWx1ZS52ZWN0b3J9XHJcbiAqIEBmdW5jdGlvbiBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIudmVjdG9yXHJcbiAqL1xyXG5FbWl0dGVyLnZlY3RvciA9IFZhbHVlLnZlY3RvcjtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gMWQgdmFsdWUgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkuVmFsdWUucmFuZG9tMUR9XHJcbiAqIEBmdW5jdGlvbiBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIucmFuZG9tMURcclxuICovXHJcbkVtaXR0ZXIucmFuZG9tMUQgPSBWYWx1ZS5yYW5kb20xRDtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gMmQgdmFsdWUgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkuVmFsdWUucmFuZG9tMkR9XHJcbiAqIEBmdW5jdGlvbiBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIucmFuZG9tMkRcclxuICovXHJcbkVtaXR0ZXIucmFuZG9tMkQgPSBWYWx1ZS5yYW5kb20yRDtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gM2QgdmFsdWUgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkuVmFsdWUucmFuZG9tM0R9XHJcbiAqIEBmdW5jdGlvbiBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIucmFuZG9tM0RcclxuICovXHJcbkVtaXR0ZXIucmFuZG9tM0QgPSBWYWx1ZS5yYW5kb20zRDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEVtaXR0ZXI7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wYXJ0aWNsZS5GaWVsZFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEZpZWxkID0gQmFzZS5leHRlbmQoe30sIHtcclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgYSBmaWVsZCB0byB0aGUgcGFydGljbGUgYW5kIHVwZGF0ZSB0aGUgcGFydGljbGUgdmVsb2NpdHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gdmVsb2NpdHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gcG9zaXRpb25cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gd2VpZ2h0XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGRlbHRhVGltZVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkucGFydGljbGUuRmllbGQucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGFwcGx5VG86IGZ1bmN0aW9uKHZlbG9jaXR5LCBwb3NpdGlvbiwgd2VpZ2h0LCBkZWx0YVRpbWUpIHt9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRmllbGQ7XHJcbiIsImltcG9ydCBGaWVsZCBmcm9tICcuL0ZpZWxkJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGFydGljbGUuRm9yY2VGaWVsZFxyXG4gKiBAZXh0ZW5kcyBjbGF5LnBhcnRpY2xlLkZpZWxkXHJcbiAqL1xyXG52YXIgRm9yY2VGaWVsZCA9IEZpZWxkLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZm9yY2U6IG5ldyBWZWN0b3IzKClcclxuICAgIH07XHJcbn0sIHtcclxuICAgIGFwcGx5VG86IGZ1bmN0aW9uKHZlbG9jaXR5LCBwb3NpdGlvbiwgd2VpZ2h0LCBkZWx0YVRpbWUpIHtcclxuICAgICAgICBpZiAod2VpZ2h0ID4gMCkge1xyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHZlbG9jaXR5LmFycmF5LCB2ZWxvY2l0eS5hcnJheSwgdGhpcy5mb3JjZS5hcnJheSwgZGVsdGFUaW1lIC8gd2VpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRm9yY2VGaWVsZDtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkucGFydGljbGUudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlldyA6IFdPUkxEVklFVztcXG51bmlmb3JtIG1hdDQgcHJvamVjdGlvbiA6IFBST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XFxuI2lmZGVmIFVWX0FOSU1BVElPTlxcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkMCA6IFRFWENPT1JEXzA7XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQxIDogVEVYQ09PUkRfMTtcXG52YXJ5aW5nIHZlYzIgdl9VdjA7XFxudmFyeWluZyB2ZWMyIHZfVXYxO1xcbiNlbmRpZlxcbnZhcnlpbmcgZmxvYXQgdl9BZ2U7XFxudm9pZCBtYWluKCkge1xcbiB2X0FnZSA9IG5vcm1hbC54O1xcbiBmbG9hdCByb3RhdGlvbiA9IG5vcm1hbC55O1xcbiB2ZWM0IHdvcmxkVmlld1Bvc2l0aW9uID0gd29ybGRWaWV3ICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogd29ybGRWaWV3UG9zaXRpb247XFxuIGZsb2F0IHcgPSBnbF9Qb3NpdGlvbi53O1xcbiBnbF9Qb2ludFNpemUgPSBub3JtYWwueiAqIHByb2plY3Rpb25bMF0ueCAvIHc7XFxuICNpZmRlZiBVVl9BTklNQVRJT05cXG4gdl9VdjAgPSB0ZXhjb29yZDA7XFxuIHZfVXYxID0gdGV4Y29vcmQxO1xcbiAjZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5wYXJ0aWNsZS5mcmFnbWVudFxcbnVuaWZvcm0gc2FtcGxlcjJEIHNwcml0ZTtcXG51bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudDtcXG51bmlmb3JtIHZlYzMgY29sb3IgOiBbMS4wLCAxLjAsIDEuMF07XFxudW5pZm9ybSBmbG9hdCBhbHBoYSA6IDEuMDtcXG52YXJ5aW5nIGZsb2F0IHZfQWdlO1xcbiNpZmRlZiBVVl9BTklNQVRJT05cXG52YXJ5aW5nIHZlYzIgdl9VdjA7XFxudmFyeWluZyB2ZWMyIHZfVXYxO1xcbiNlbmRpZlxcbnZvaWQgbWFpbigpIHtcXG4gdmVjNCBjb2xvciA9IHZlYzQoY29sb3IsIGFscGhhKTtcXG4gI2lmZGVmIFNQUklURV9FTkFCTEVEXFxuICNpZmRlZiBVVl9BTklNQVRJT05cXG4gY29sb3IgKj0gdGV4dHVyZTJEKHNwcml0ZSwgbWl4KHZfVXYwLCB2X1V2MSwgZ2xfUG9pbnRDb29yZCkpO1xcbiAjZWxzZVxcbiBjb2xvciAqPSB0ZXh0dXJlMkQoc3ByaXRlLCBnbF9Qb2ludENvb3JkKTtcXG4gI2VuZGlmXFxuICNlbmRpZlxcbiAjaWZkZWYgR1JBRElFTlRfRU5BQkxFRFxcbiBjb2xvciAqPSB0ZXh0dXJlMkQoZ3JhZGllbnQsIHZlYzIodl9BZ2UsIDAuNSkpO1xcbiAjZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gY29sb3I7XFxufVxcbkBlbmRcIjtcclxuIiwiaW1wb3J0IFJlbmRlcmFibGUgZnJvbSAnLi4vUmVuZGVyYWJsZSc7XHJcblxyXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcblxyXG5pbXBvcnQgcGFydGljbGVFc3NsIGZyb20gJy4vcGFydGljbGUuZ2xzbC5qcyc7XHJcblNoYWRlclsnaW1wb3J0J10ocGFydGljbGVFc3NsKTtcclxuXHJcbnZhciBwYXJ0aWNsZVNoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5wYXJ0aWNsZS52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5wYXJ0aWNsZS5mcmFnbWVudCcpKTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wYXJ0aWNsZS5QYXJ0aWNsZVJlbmRlcmFibGVcclxuICogQGV4dGVuZHMgY2xheS5SZW5kZXJhYmxlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICB2YXIgcGFydGljbGVSZW5kZXJhYmxlID0gbmV3IGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlKHtcclxuICogICAgICAgICBzcHJpdGVBbmltYXRpb25UaWxlWDogNCxcclxuICogICAgICAgICBzcHJpdGVBbmltYXRpb25UaWxlWTogNCxcclxuICogICAgICAgICBzcHJpdGVBbmltYXRpb25SZXBlYXQ6IDFcclxuICogICAgIH0pO1xyXG4gKiAgICAgc2NlbmUuYWRkKHBhcnRpY2xlUmVuZGVyYWJsZSk7XHJcbiAqICAgICAvLyBFbmFibGUgdXYgYW5pbWF0aW9uIGluIHRoZSBzaGFkZXJcclxuICogICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5tYXRlcmlhbC5kZWZpbmUoJ2JvdGgnLCAnVVZfQU5JTUFUSU9OJyk7XHJcbiAqICAgICB2YXIgRW1pdHRlciA9IGNsYXkucGFydGljbGUuRW1pdHRlcjtcclxuICogICAgIHZhciBWZWN0b3IzID0gY2xheS5WZWN0b3IzO1xyXG4gKiAgICAgdmFyIGVtaXR0ZXIgPSBuZXcgRW1pdHRlcih7XHJcbiAqICAgICAgICAgbWF4OiAyMDAwLFxyXG4gKiAgICAgICAgIGFtb3VudDogMTAwLFxyXG4gKiAgICAgICAgIGxpZmU6IEVtaXR0ZXIucmFuZG9tMUQoMTAsIDIwKSxcclxuICogICAgICAgICBwb3NpdGlvbjogRW1pdHRlci52ZWN0b3IobmV3IFZlY3RvcjMoKSksXHJcbiAqICAgICAgICAgdmVsb2NpdHk6IEVtaXR0ZXIucmFuZG9tM0QobmV3IFZlY3RvcjMoLTEwLCAwLCAtMTApLCBuZXcgVmVjdG9yMygxMCwgMCwgMTApKTtcclxuICogICAgIH0pO1xyXG4gKiAgICAgcGFydGljbGVSZW5kZXJhYmxlLmFkZEVtaXR0ZXIoZW1pdHRlcik7XHJcbiAqICAgICB2YXIgZ3Jhdml0eUZpZWxkID0gbmV3IGNsYXkucGFydGljbGUuRm9yY2VGaWVsZCgpO1xyXG4gKiAgICAgZ3Jhdml0eUZpZWxkLmZvcmNlLnkgPSAtMTA7XHJcbiAqICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuYWRkRmllbGQoZ3Jhdml0eUZpZWxkKTtcclxuICogICAgIC4uLlxyXG4gKiAgICAgYW5pbWF0aW9uLm9uKCdmcmFtZScsIGZ1bmN0aW9uKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS51cGRhdGVQYXJ0aWNsZXMoZnJhbWVUaW1lKTtcclxuICogICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAqICAgICB9KTtcclxuICovXHJcbnZhciBQYXJ0aWNsZVJlbmRlcmFibGUgPSBSZW5kZXJhYmxlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBsb29wOiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgb25lc2hvdDogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIER1cmF0aW9uIG9mIHBhcnRpY2xlIHN5c3RlbSBpbiBtaWxsaXNlY29uZHNcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGR1cmF0aW9uOiAxLFxyXG5cclxuICAgIC8vIFVWIEFuaW1hdGlvblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcHJpdGVBbmltYXRpb25UaWxlWDogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3ByaXRlQW5pbWF0aW9uVGlsZVk6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNwcml0ZUFuaW1hdGlvblJlcGVhdDogMCxcclxuXHJcbiAgICBtb2RlOiBSZW5kZXJhYmxlLlBPSU5UUyxcclxuXHJcbiAgICBpZ25vcmVQaWNraW5nOiB0cnVlLFxyXG5cclxuICAgIF9lbGFwc2VkVGltZTogMCxcclxuXHJcbiAgICBfZW1pdHRpbmc6IHRydWVcclxuXHJcbn0sIGZ1bmN0aW9uKCl7XHJcblxyXG4gICAgdGhpcy5nZW9tZXRyeSA9IG5ldyBHZW9tZXRyeSh7XHJcbiAgICAgICAgZHluYW1pYzogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLm1hdGVyaWFsKSB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogcGFydGljbGVTaGFkZXIsXHJcbiAgICAgICAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAgICAgICAgICBkZXB0aE1hc2s6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwuZW5hYmxlVGV4dHVyZSgnc3ByaXRlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcGFydGljbGVzID0gW107XHJcbiAgICB0aGlzLl9maWVsZHMgPSBbXTtcclxuICAgIHRoaXMuX2VtaXR0ZXJzID0gW107XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5wYXJ0aWNsZS5QYXJ0aWNsZVJlbmRlcmFibGUucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICBjdWxsaW5nOiBmYWxzZSxcclxuXHJcbiAgICBmcnVzdHVtQ3VsbGluZzogZmFsc2UsXHJcblxyXG4gICAgY2FzdFNoYWRvdzogZmFsc2UsXHJcbiAgICByZWNlaXZlU2hhZG93OiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBlbWl0dGVyXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkucGFydGljbGUuRW1pdHRlcn0gZW1pdHRlclxyXG4gICAgICovXHJcbiAgICBhZGRFbWl0dGVyOiBmdW5jdGlvbihlbWl0dGVyKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdHRlcnMucHVzaChlbWl0dGVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgZW1pdHRlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LnBhcnRpY2xlLkVtaXR0ZXJ9IGVtaXR0ZXJcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlRW1pdHRlcjogZnVuY3Rpb24oZW1pdHRlcikge1xyXG4gICAgICAgIHRoaXMuX2VtaXR0ZXJzLnNwbGljZSh0aGlzLl9lbWl0dGVycy5pbmRleE9mKGVtaXR0ZXIpLCAxKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgZmllbGRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5wYXJ0aWNsZS5GaWVsZH0gZmllbGRcclxuICAgICAqL1xyXG4gICAgYWRkRmllbGQ6IGZ1bmN0aW9uKGZpZWxkKSB7XHJcbiAgICAgICAgdGhpcy5fZmllbGRzLnB1c2goZmllbGQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBmaWVsZFxyXG4gICAgICogQHBhcmFtIHtjbGF5LnBhcnRpY2xlLkZpZWxkfSBmaWVsZFxyXG4gICAgICovXHJcbiAgICByZW1vdmVGaWVsZDogZnVuY3Rpb24oZmllbGQpIHtcclxuICAgICAgICB0aGlzLl9maWVsZHMuc3BsaWNlKHRoaXMuX2ZpZWxkcy5pbmRleE9mKGZpZWxkKSwgMSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXQgdGhlIHBhcnRpY2xlIHN5c3RlbS5cclxuICAgICAqL1xyXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vIFB1dCBhbGwgdGhlIHBhcnRpY2xlcyBiYWNrXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHAgPSB0aGlzLl9wYXJ0aWNsZXNbaV07XHJcbiAgICAgICAgICAgIHAuZW1pdHRlci5raWxsKHApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XHJcbiAgICAgICAgdGhpcy5fZW1pdHRpbmcgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gZGVsdGFUaW1lXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVBhcnRpY2xlczogZnVuY3Rpb24oZGVsdGFUaW1lKSB7XHJcblxyXG4gICAgICAgIC8vIE1TID0+IFNlY29uZHNcclxuICAgICAgICBkZWx0YVRpbWUgLz0gMTAwMDtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSArPSBkZWx0YVRpbWU7XHJcblxyXG4gICAgICAgIHZhciBwYXJ0aWNsZXMgPSB0aGlzLl9wYXJ0aWNsZXM7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9lbWl0dGluZykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2VtaXR0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0dGVyc1tpXS5lbWl0KHBhcnRpY2xlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMub25lc2hvdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQWdpbmdcclxuICAgICAgICB2YXIgbGVuID0gcGFydGljbGVzLmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjspIHtcclxuICAgICAgICAgICAgdmFyIHAgPSBwYXJ0aWNsZXNbaV07XHJcbiAgICAgICAgICAgIHAuYWdlICs9IGRlbHRhVGltZTtcclxuICAgICAgICAgICAgaWYgKHAuYWdlID49IHAubGlmZSkge1xyXG4gICAgICAgICAgICAgICAgcC5lbWl0dGVyLmtpbGwocCk7XHJcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZXNbaV0gPSBwYXJ0aWNsZXNbbGVuLTFdO1xyXG4gICAgICAgICAgICAgICAgcGFydGljbGVzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgbGVuLS07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gVXBkYXRlXHJcbiAgICAgICAgICAgIHZhciBwID0gcGFydGljbGVzW2ldO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fZmllbGRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmllbGRzW2pdLmFwcGx5VG8ocC52ZWxvY2l0eSwgcC5wb3NpdGlvbiwgcC53ZWlnaHQsIGRlbHRhVGltZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcC51cGRhdGUoZGVsdGFUaW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVZlcnRpY2VzKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVWZXJ0aWNlczogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcclxuICAgICAgICAvLyBJZiBoYXMgdXYgYW5pbWF0aW9uXHJcbiAgICAgICAgdmFyIGFuaW1UaWxlWCA9IHRoaXMuc3ByaXRlQW5pbWF0aW9uVGlsZVg7XHJcbiAgICAgICAgdmFyIGFuaW1UaWxlWSA9IHRoaXMuc3ByaXRlQW5pbWF0aW9uVGlsZVk7XHJcbiAgICAgICAgdmFyIGFuaW1SZXBlYXQgPSB0aGlzLnNwcml0ZUFuaW1hdGlvblJlcGVhdDtcclxuICAgICAgICB2YXIgblV2QW5pbUZyYW1lID0gYW5pbVRpbGVZICogYW5pbVRpbGVYICogYW5pbVJlcGVhdDtcclxuICAgICAgICB2YXIgaGFzVXZBbmltYXRpb24gPSBuVXZBbmltRnJhbWUgPiAxO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbnMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIC8vIFB1dCBwYXJ0aWNsZSBzdGF0dXMgaW4gbm9ybWFsXHJcbiAgICAgICAgdmFyIG5vcm1hbHMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZTtcclxuICAgICAgICB2YXIgdXZzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDAudmFsdWU7XHJcbiAgICAgICAgdmFyIHV2czIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMS52YWx1ZTtcclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IHRoaXMuX3BhcnRpY2xlcy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKCFwb3NpdGlvbnMgfHwgcG9zaXRpb25zLmxlbmd0aCAhPT0gbGVuICogMykge1xyXG4gICAgICAgICAgICAvLyBUT0RPIE9wdGltaXplXHJcbiAgICAgICAgICAgIHBvc2l0aW9ucyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KGxlbiAqIDMpO1xyXG4gICAgICAgICAgICBub3JtYWxzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KGxlbiAqIDMpO1xyXG4gICAgICAgICAgICBpZiAoaGFzVXZBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHV2cyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMudGV4Y29vcmQwLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShsZW4gKiAyKTtcclxuICAgICAgICAgICAgICAgIHV2czIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMS52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkobGVuICogMik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpbnZBbmltVGlsZVggPSAxIC8gYW5pbVRpbGVYO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHBhcnRpY2xlID0gdGhpcy5fcGFydGljbGVzW2ldO1xyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gaSAqIDM7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMzsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnNbb2Zmc2V0ICsgal0gPSBwYXJ0aWNsZS5wb3NpdGlvbi5hcnJheVtqXTtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbb2Zmc2V0XSA9IHBhcnRpY2xlLmFnZSAvIHBhcnRpY2xlLmxpZmU7XHJcbiAgICAgICAgICAgICAgICAvLyBub3JtYWxzW29mZnNldCArIDFdID0gcGFydGljbGUucm90YXRpb247XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW29mZnNldCArIDFdID0gMDtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbb2Zmc2V0ICsgMl0gPSBwYXJ0aWNsZS5zcHJpdGVTaXplO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBvZmZzZXQyID0gaSAqIDI7XHJcbiAgICAgICAgICAgIGlmIChoYXNVdkFuaW1hdGlvbikge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICAgICAgdmFyIHAgPSBwYXJ0aWNsZS5hZ2UgLyBwYXJ0aWNsZS5saWZlO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN0YWdlID0gTWF0aC5yb3VuZChwICogKG5VdkFuaW1GcmFtZSAtIDEpKSAqIGFuaW1SZXBlYXQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgdiA9IE1hdGguZmxvb3Ioc3RhZ2UgKiBpbnZBbmltVGlsZVgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHUgPSBzdGFnZSAtIHYgKiBhbmltVGlsZVg7XHJcbiAgICAgICAgICAgICAgICB1dnNbb2Zmc2V0Ml0gPSB1IC8gYW5pbVRpbGVYO1xyXG4gICAgICAgICAgICAgICAgdXZzW29mZnNldDIgKyAxXSA9IDEgLSB2IC8gYW5pbVRpbGVZO1xyXG4gICAgICAgICAgICAgICAgdXZzMltvZmZzZXQyXSA9ICh1ICsgMSkgLyBhbmltVGlsZVg7XHJcbiAgICAgICAgICAgICAgICB1dnMyW29mZnNldDIgKyAxXSA9IDEgLSAodiArIDEpIC8gYW5pbVRpbGVZO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZW9tZXRyeS5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzRmluaXNoZWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9lbGFwc2VkVGltZSA+IHRoaXMuZHVyYXRpb24gJiYgIXRoaXMubG9vcDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbihyZW5kZXJlcikge1xyXG4gICAgICAgIC8vIFB1dCBhbGwgdGhlIHBhcnRpY2xlcyBiYWNrXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHAgPSB0aGlzLl9wYXJ0aWNsZXNbaV07XHJcbiAgICAgICAgICAgIHAuZW1pdHRlci5raWxsKHApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdlb21ldHJ5LmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIC8vIFRPRE8gRGlzcG9zZSB0ZXh0dXJlID9cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LnBhcnRpY2xlLlBhcnRpY2xlUmVuZGVyYWJsZX1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBwYXJ0aWNsZVJlbmRlcmFibGUgPSBuZXcgUGFydGljbGVSZW5kZXJhYmxlKHtcclxuICAgICAgICAgICAgbWF0ZXJpYWw6IHRoaXMubWF0ZXJpYWxcclxuICAgICAgICB9KTtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUubG9vcCA9IHRoaXMubG9vcDtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuZHVyYXRpb24gPSB0aGlzLmR1cmF0aW9uO1xyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5vbmVzaG90ID0gdGhpcy5vbmVzaG90O1xyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5zcHJpdGVBbmltYXRpb25SZXBlYXQgPSB0aGlzLnNwcml0ZUFuaW1hdGlvblJlcGVhdDtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuc3ByaXRlQW5pbWF0aW9uVGlsZVkgPSB0aGlzLnNwcml0ZUFuaW1hdGlvblRpbGVZO1xyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5zcHJpdGVBbmltYXRpb25UaWxlWCA9IHRoaXMuc3ByaXRlQW5pbWF0aW9uVGlsZVg7XHJcblxyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5wb3NpdGlvbi5jb3B5KHRoaXMucG9zaXRpb24pO1xyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5yb3RhdGlvbi5jb3B5KHRoaXMucm90YXRpb24pO1xyXG4gICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5zY2FsZS5jb3B5KHRoaXMuc2NhbGUpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5hZGQodGhpcy5fY2hpbGRyZW5baV0uY2xvbmUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXJ0aWNsZVJlbmRlcmFibGU7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGFydGljbGVSZW5kZXJhYmxlO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5waWNraW5nLmNvbG9yLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52b2lkIG1haW4oKXtcXG4gdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4gI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiAjZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxufVxcbkBlbmRcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnBpY2tpbmcuY29sb3IuZnJhZ21lbnRcXG51bmlmb3JtIHZlYzQgY29sb3IgOiBbMS4wLCAxLjAsIDEuMCwgMS4wXTtcXG52b2lkIG1haW4oKSB7XFxuIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5cclxuaW1wb3J0IGNvbG9yRXNzbCBmcm9tICcuL2NvbG9yLmdsc2wuanMnO1xyXG5TaGFkZXIuaW1wb3J0KGNvbG9yRXNzbCk7XHJcblxyXG4vKipcclxuICogUGl4ZWwgcGlja2luZyBpcyBncHUgYmFzZWQgcGlja2luZywgd2hpY2ggaXMgZmFzdCBhbmQgYWNjdXJhdGUuXHJcbiAqIEJ1dCBub3QgbGlrZSByYXkgcGlja2luZywgaXQgY2FuJ3QgZ2V0IHRoZSBpbnRlcnNlY3Rpb24gcG9pbnQgYW5kIHRyaWFuZ2xlLlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5waWNraW5nLlBpeGVsUGlja2luZ1xyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIFBpeGVsUGlja2luZyA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5waWNraW5nLlBpeGVsUGlja2luZyMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRhcmdldCByZW5kZXJlclxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlJlbmRlcmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJlbmRlcmVyOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERvd25zYW1wbGUgcmF0aW8gb2YgaGlkZGVuIGZyYW1lIGJ1ZmZlclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZG93blNhbXBsZVJhdGlvOiAxLFxyXG5cclxuICAgICAgICB3aWR0aDogMTAwLFxyXG4gICAgICAgIGhlaWdodDogMTAwLFxyXG5cclxuICAgICAgICBsb29rdXBPZmZzZXQ6IDEsXHJcblxyXG4gICAgICAgIF9mcmFtZUJ1ZmZlcjogbnVsbCxcclxuICAgICAgICBfdGV4dHVyZTogbnVsbCxcclxuICAgICAgICBfc2hhZGVyOiBudWxsLFxyXG5cclxuICAgICAgICBfaWRNYXRlcmlhbHM6IFtdLFxyXG4gICAgICAgIF9sb29rdXBUYWJsZTogW10sXHJcblxyXG4gICAgICAgIF9tZXNoTWF0ZXJpYWxzOiBbXSxcclxuXHJcbiAgICAgICAgX2lkT2Zmc2V0OiAwXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMucmVuZGVyZXIuZ2V0V2lkdGgoKTtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMucmVuZGVyZXIuZ2V0SGVpZ2h0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9pbml0KCk7XHJcbn0sIC8qKiBAbGVuZHMgY2xheS5waWNraW5nLlBpeGVsUGlja2luZy5wcm90b3R5cGUgKi8ge1xyXG4gICAgX2luaXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGggKiB0aGlzLmRvd25TYW1wbGVSYXRpbyxcclxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCAqIHRoaXMuZG93blNhbXBsZVJhdGlvXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2hhZGVyID0gbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKCdjbGF5LnBpY2tpbmcuY29sb3IudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucGlja2luZy5jb2xvci5mcmFnbWVudCcpKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFNldCBwaWNraW5nIHByZXNpc2lvblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhdGlvXHJcbiAgICAgKi9cclxuICAgIHNldFByZWNpc2lvbjogZnVuY3Rpb24ocmF0aW8pIHtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlLndpZHRoID0gdGhpcy53aWR0aCAqIHJhdGlvO1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgKiByYXRpbztcclxuICAgICAgICB0aGlzLmRvd25TYW1wbGVSYXRpbyA9IHJhdGlvO1xyXG4gICAgfSxcclxuICAgIHJlc2l6ZTogZnVuY3Rpb24od2lkdGgsIGhlaWdodCkge1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmUud2lkdGggPSB3aWR0aCAqIHRoaXMuZG93blNhbXBsZVJhdGlvO1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5kb3duU2FtcGxlUmF0aW87XHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmUuZGlydHkoKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0aGUgcGlja2luZyBmcmFtZWJ1ZmZlclxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhdGlvXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24oc2NlbmUsIGNhbWVyYSkge1xyXG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcbiAgICAgICAgaWYgKHJlbmRlcmVyLmdldFdpZHRoKCkgIT09IHRoaXMud2lkdGggfHwgcmVuZGVyZXIuZ2V0SGVpZ2h0KCkgIT09IHRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzaXplKHJlbmRlcmVyLndpZHRoLCByZW5kZXJlci5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRoaXMuX3RleHR1cmUpO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2lkT2Zmc2V0ID0gdGhpcy5sb29rdXBPZmZzZXQ7XHJcbiAgICAgICAgdGhpcy5fc2V0TWF0ZXJpYWwoc2NlbmUpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTtcclxuICAgICAgICB0aGlzLl9yZXN0b3JlTWF0ZXJpYWwoKTtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfc2V0TWF0ZXJpYWw6IGZ1bmN0aW9uKHJvb3QpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0wOyBpIDwgcm9vdC5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkID0gcm9vdC5fY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5nZW9tZXRyeSAmJiBjaGlsZC5tYXRlcmlhbCAmJiBjaGlsZC5tYXRlcmlhbC5zaGFkZXIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpZCA9IHRoaXMuX2lkT2Zmc2V0Kys7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gaWQgLSB0aGlzLmxvb2t1cE9mZnNldDtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IHRoaXMuX2lkTWF0ZXJpYWxzW2lkeF07XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXI6IHRoaXMuX3NoYWRlclxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IHBhY2tJRChpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3JbMF0gLz0gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yWzFdIC89IDI1NTtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvclsyXSAvPSAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3JbM10gPSAxLjA7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdjb2xvcicsIGNvbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pZE1hdGVyaWFsc1tpZHhdID0gbWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXNoTWF0ZXJpYWxzW2lkeF0gPSBjaGlsZC5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvb2t1cFRhYmxlW2lkeF0gPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgIGNoaWxkLm1hdGVyaWFsID0gbWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNoaWxkLl9jaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldE1hdGVyaWFsKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaWNrIHRoZSBvYmplY3RcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0geCBNb3VzZSBwb3NpdGlvbiB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHkgTW91c2UgcG9zaXRpb24geVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICBwaWNrOiBmdW5jdGlvbih4LCB5KSB7XHJcbiAgICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcclxuXHJcbiAgICAgICAgdmFyIHJhdGlvID0gdGhpcy5kb3duU2FtcGxlUmF0aW87XHJcbiAgICAgICAgeCA9IE1hdGguY2VpbChyYXRpbyAqIHgpO1xyXG4gICAgICAgIHkgPSBNYXRoLmNlaWwocmF0aW8gKiAodGhpcy5oZWlnaHQgLSB5KSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgIHZhciBwaXhlbCA9IG5ldyBVaW50OEFycmF5KDQpO1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICAvLyBUT0RPIG91dCBvZiBib3VuZHMgP1xyXG4gICAgICAgIC8vIHByZXNlcnZlRHJhd2luZ0J1ZmZlciA/XHJcbiAgICAgICAgX2dsLnJlYWRQaXhlbHMoeCwgeSwgMSwgMSwgX2dsLlJHQkEsIF9nbC5VTlNJR05FRF9CWVRFLCBwaXhlbCk7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAvLyBTa2lwIGludGVycG9sYXRlZCBwaXhlbCBiZWNhdXNlIG9mIGFudGkgYWxpYXNcclxuICAgICAgICBpZiAocGl4ZWxbM10gPT09IDI1NSkge1xyXG4gICAgICAgICAgICB2YXIgaWQgPSB1bnBhY2tJRChwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdKTtcclxuICAgICAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZWwgPSB0aGlzLl9sb29rdXBUYWJsZVtpZCAtIHRoaXMubG9va3VwT2Zmc2V0XTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3Jlc3RvcmVNYXRlcmlhbDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9sb29rdXBUYWJsZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9sb29rdXBUYWJsZVtpXS5tYXRlcmlhbCA9IHRoaXMuX21lc2hNYXRlcmlhbHNbaV07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbihyZW5kZXJlcikge1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmZ1bmN0aW9uIHBhY2tJRChpZCl7XHJcbiAgICB2YXIgciA9IGlkID4+IDE2O1xyXG4gICAgdmFyIGcgPSAoaWQgLSAociA8PCA4KSkgPj4gODtcclxuICAgIHZhciBiID0gaWQgLSAociA8PCAxNikgLSAoZzw8OCk7XHJcbiAgICByZXR1cm4gW3IsIGcsIGJdO1xyXG59XHJcblxyXG5mdW5jdGlvbiB1bnBhY2tJRChyLCBnLCBiKXtcclxuICAgIHJldHVybiAociA8PCAxNikgKyAoZzw8OCkgKyBiO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQaXhlbFBpY2tpbmc7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5cclxudmFyIGRvYyA9IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgPyB7fSA6IGRvY3VtZW50O1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBsdWdpbi5GcmVlQ29udHJvbFxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgdmFyIGNvbnRyb2wgPSBuZXcgY2xheS5wbHVnaW4uRnJlZUNvbnRyb2woe1xyXG4gKiAgICAgICAgIHRhcmdldDogY2FtZXJhLFxyXG4gKiAgICAgICAgIGRvbUVsZW1lbnQ6IHJlbmRlcmVyLmNhbnZhc1xyXG4gKiAgICAgfSk7XHJcbiAqICAgICAuLi5cclxuICogICAgIHRpbWVsaW5lLm9uKCdmcmFtZScsIGZ1bmN0aW9uKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgIGNvbnRyb2wudXBkYXRlKGZyYW1lVGltZSk7XHJcbiAqICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xyXG4gKiAgICAgfSk7XHJcbiAqL1xyXG52YXIgRnJlZUNvbnRyb2wgPSBCYXNlLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkucGx1Z2luLkZyZWVDb250cm9sIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2NlbmUgbm9kZSB0byBjb250cm9sLCBtb3N0bHkgaXQgaXMgYSBjYW1lcmFcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRhcmdldDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGFyZ2V0IGRvbSB0byBiaW5kIHdpdGggbW91c2UgZXZlbnRzXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRvbUVsZW1lbnQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1vdXNlIG1vdmUgc2Vuc2l0aXZpdHlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNlbnNpdGl2aXR5OiAxLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUYXJnZXQgbW92ZSBzcGVlZFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc3BlZWQ6IDAuNCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVXAgYXhpc1xyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdXA6IG5ldyBWZWN0b3IzKDAsIDEsIDApLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBsb2NrIHZlcnRpY2FsIG1vdmVtZW50XHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdmVydGljYWxNb3ZlTG9jazogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRpbWVsaW5lfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRpbWVsaW5lOiBudWxsLFxyXG5cclxuICAgICAgICBfbW92ZUZvcndhcmQ6IGZhbHNlLFxyXG4gICAgICAgIF9tb3ZlQmFja3dhcmQ6IGZhbHNlLFxyXG4gICAgICAgIF9tb3ZlTGVmdDogZmFsc2UsXHJcbiAgICAgICAgX21vdmVSaWdodDogZmFsc2UsXHJcblxyXG4gICAgICAgIF9vZmZzZXRQaXRjaDogMCxcclxuICAgICAgICBfb2Zmc2V0Um9sbDogMFxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLl9sb2NrQ2hhbmdlID0gdGhpcy5fbG9ja0NoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fa2V5RG93biA9IHRoaXMuX2tleURvd24uYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX2tleVVwID0gdGhpcy5fa2V5VXAuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX21vdXNlTW92ZSA9IHRoaXMuX21vdXNlTW92ZS5iaW5kKHRoaXMpO1xyXG5cclxuICAgIGlmICh0aGlzLmRvbUVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5GcmVlQ29udHJvbC5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBpbml0IGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgaW5pdDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gVXNlIHBvaW50ZXIgbG9ja1xyXG4gICAgICAgIC8vIGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL3BvaW50ZXJsb2NrL2ludHJvL1xyXG4gICAgICAgIHZhciBlbCA9IHRoaXMuZG9tRWxlbWVudDtcclxuXHJcbiAgICAgICAgLy9NdXN0IHJlcXVlc3QgcG9pbnRlciBsb2NrIGFmdGVyIGNsaWNrIGV2ZW50LCBjYW4ndCBub3QgZG8gaXQgZGlyZWN0bHlcclxuICAgICAgICAvL1doeSA/ID9cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihlbCwgJ2NsaWNrJywgdGhpcy5fcmVxdWVzdFBvaW50ZXJMb2NrKTtcclxuXHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9jLCAncG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLl9sb2NrQ2hhbmdlKTtcclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb2MsICdtb3pwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvYywgJ3dlYmtpdHBvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5fbG9ja0NoYW5nZSk7XHJcblxyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvYywgJ2tleWRvd24nLCB0aGlzLl9rZXlEb3duKTtcclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb2MsICdrZXl1cCcsIHRoaXMuX2tleVVwKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGltZWxpbmUpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lbGluZS5vbignZnJhbWUnLCB0aGlzLl9kZXRlY3RNb3ZlbWVudENoYW5nZSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgY29udHJvbFxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIGVsID0gdGhpcy5kb21FbGVtZW50O1xyXG5cclxuICAgICAgICBlbC5leGl0UG9pbnRlckxvY2sgPSBlbC5leGl0UG9pbnRlckxvY2tcclxuICAgICAgICAgICAgfHwgZWwubW96RXhpdFBvaW50ZXJMb2NrXHJcbiAgICAgICAgICAgIHx8IGVsLndlYmtpdEV4aXRQb2ludGVyTG9jaztcclxuXHJcbiAgICAgICAgaWYgKGVsLmV4aXRQb2ludGVyTG9jaykge1xyXG4gICAgICAgICAgICBlbC5leGl0UG9pbnRlckxvY2soKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGVsLCAnY2xpY2snLCB0aGlzLl9yZXF1ZXN0UG9pbnRlckxvY2spO1xyXG5cclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2MsICdwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvYywgJ21venBvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5fbG9ja0NoYW5nZSk7XHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9jLCAnd2Via2l0cG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLl9sb2NrQ2hhbmdlKTtcclxuXHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9jLCAna2V5ZG93bicsIHRoaXMuX2tleURvd24pO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvYywgJ2tleXVwJywgdGhpcy5fa2V5VXApO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aW1lbGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lLm9mZignZnJhbWUnLCB0aGlzLl9kZXRlY3RNb3ZlbWVudENoYW5nZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfcmVxdWVzdFBvaW50ZXJMb2NrOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgZWwgPSB0aGlzO1xyXG4gICAgICAgIGVsLnJlcXVlc3RQb2ludGVyTG9jayA9IGVsLnJlcXVlc3RQb2ludGVyTG9ja1xyXG4gICAgICAgICAgICB8fCBlbC5tb3pSZXF1ZXN0UG9pbnRlckxvY2tcclxuICAgICAgICAgICAgfHwgZWwud2Via2l0UmVxdWVzdFBvaW50ZXJMb2NrO1xyXG5cclxuICAgICAgICBlbC5yZXF1ZXN0UG9pbnRlckxvY2soKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250cm9sIHVwZGF0ZS4gU2hvdWxkIGJlIGludm9rZWQgZXZlcnkgZnJhbWVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcmFtZVRpbWUgRnJhbWUgdGltZVxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChmcmFtZVRpbWUpIHtcclxuICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XHJcblxyXG4gICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMudGFyZ2V0LnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS54Lm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgIHZhciB6QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS56Lm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy52ZXJ0aWNhbE1vdmVMb2NrKSB7XHJcbiAgICAgICAgICAgIHpBeGlzLnkgPSAwO1xyXG4gICAgICAgICAgICB6QXhpcy5ub3JtYWxpemUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzcGVlZCA9IHRoaXMuc3BlZWQgKiBmcmFtZVRpbWUgLyAyMDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX21vdmVGb3J3YXJkKSB7XHJcbiAgICAgICAgICAgIC8vIE9wcG9zaXRlIGRpcmVjdGlvbiBvZiB6XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHpBeGlzLCAtc3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZUJhY2t3YXJkKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHpBeGlzLCBzcGVlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlTGVmdCkge1xyXG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh4QXhpcywgLXNwZWVkIC8gMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlUmlnaHQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoeEF4aXMsIHNwZWVkIC8gMik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0YXJnZXQucm90YXRlQXJvdW5kKHRhcmdldC5wb3NpdGlvbiwgdGhpcy51cCwgLXRoaXMuX29mZnNldFBpdGNoICogZnJhbWVUaW1lICogTWF0aC5QSSAvIDM2MCk7XHJcbiAgICAgICAgdmFyIHhBeGlzID0gdGFyZ2V0LmxvY2FsVHJhbnNmb3JtLng7XHJcbiAgICAgICAgdGFyZ2V0LnJvdGF0ZUFyb3VuZCh0YXJnZXQucG9zaXRpb24sIHhBeGlzLCAtdGhpcy5fb2Zmc2V0Um9sbCAqIGZyYW1lVGltZSAqIE1hdGguUEkgLyAzNjApO1xyXG5cclxuICAgICAgICB0aGlzLl9vZmZzZXRSb2xsID0gdGhpcy5fb2Zmc2V0UGl0Y2ggPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICBfbG9ja0NoYW5nZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBkb2MucG9pbnRlckxvY2tFbGVtZW50ID09PSB0aGlzLmRvbUVsZW1lbnRcclxuICAgICAgICAgICAgfHwgZG9jLm1velBvaW50ZXJMb2NrRWxlbWVudCA9PT0gdGhpcy5kb21FbGVtZW50XHJcbiAgICAgICAgICAgIHx8IGRvYy53ZWJraXRQb2ludGVyTG9ja0VsZW1lbnQgPT09IHRoaXMuZG9tRWxlbWVudFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb2MsICdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmUsIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvYywgJ21vdXNlbW92ZScsIHRoaXMuX21vdXNlTW92ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfbW91c2VNb3ZlOiBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgdmFyIGR4ID0gZS5tb3ZlbWVudFggfHwgZS5tb3pNb3ZlbWVudFggfHwgZS53ZWJraXRNb3ZlbWVudFggfHwgMDtcclxuICAgICAgICB2YXIgZHkgPSBlLm1vdmVtZW50WSB8fCBlLm1vek1vdmVtZW50WSB8fCBlLndlYmtpdE1vdmVtZW50WSB8fCAwO1xyXG5cclxuICAgICAgICB0aGlzLl9vZmZzZXRQaXRjaCArPSBkeCAqIHRoaXMuc2Vuc2l0aXZpdHkgLyAyMDA7XHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0Um9sbCArPSBkeSAqIHRoaXMuc2Vuc2l0aXZpdHkgLyAyMDA7XHJcblxyXG4gICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGV2ZW50IHRvIHJlbWluZCByZW5kZXJlciBkbyByZW5kZXJcclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2NoYW5nZScpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZGV0ZWN0TW92ZW1lbnRDaGFuZ2U6IGZ1bmN0aW9uIChmcmFtZVRpbWUpIHtcclxuICAgICAgICBpZiAodGhpcy5fbW92ZUZvcndhcmQgfHwgdGhpcy5fbW92ZUJhY2t3YXJkIHx8IHRoaXMuX21vdmVMZWZ0IHx8IHRoaXMuX21vdmVSaWdodCkge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2NoYW5nZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0ZShmcmFtZVRpbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfa2V5RG93bjogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIHN3aXRjaChlLmtleUNvZGUpIHtcclxuICAgICAgICAgICAgY2FzZSA4NzogLy93XHJcbiAgICAgICAgICAgIGNhc2UgMzc6IC8vdXAgYXJyb3dcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVGb3J3YXJkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDgzOiAvL3NcclxuICAgICAgICAgICAgY2FzZSA0MDogLy9kb3duIGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlQmFja3dhcmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNjU6IC8vYVxyXG4gICAgICAgICAgICBjYXNlIDM3OiAvL2xlZnQgYXJyb3dcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVMZWZ0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDY4OiAvL2RcclxuICAgICAgICAgICAgY2FzZSAzOTogLy9yaWdodCBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZVJpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBldmVudCB0byByZW1pbmQgcmVuZGVyZXIgZG8gcmVuZGVyXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2UnKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2tleVVwOiBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgc3dpdGNoKGUua2V5Q29kZSkge1xyXG4gICAgICAgICAgICBjYXNlIDg3OiAvL3dcclxuICAgICAgICAgICAgY2FzZSAzNzogLy91cCBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUZvcndhcmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDgzOiAvL3NcclxuICAgICAgICAgICAgY2FzZSA0MDogLy9kb3duIGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlQmFja3dhcmQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDY1OiAvL2FcclxuICAgICAgICAgICAgY2FzZSAzNzogLy9sZWZ0IGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlTGVmdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNjg6IC8vZFxyXG4gICAgICAgICAgICBjYXNlIDM5OiAvL3JpZ2h0IGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlUmlnaHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGcmVlQ29udHJvbDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XHJcblxyXG4vKipcclxuICogR2FtZXBhZCBDb250cm9sIHBsdWdpbi5cclxuICpcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGx1Z2luLkdhbWVwYWRDb250cm9sXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgaW5pdDogZnVuY3Rpb24oYXBwKSB7XHJcbiAqICAgICB0aGlzLl9nYW1lcGFkQ29udHJvbCA9IG5ldyBjbGF5LnBsdWdpbi5HYW1lcGFkQ29udHJvbCh7XHJcbiAqICAgICAgICAgdGFyZ2V0OiBjYW1lcmEsXHJcbiAqICAgICAgICAgb25TdGFuZGFyZEdhbWVwYWRSZWFkeTogY3VzdG9tQ2FsbGJhY2tcclxuICogICAgIH0pO1xyXG4gKiAgIH0sXHJcbiAqXHJcbiAqICAgbG9vcDogZnVuY3Rpb24oYXBwKSB7XHJcbiAqICAgICB0aGlzLl9nYW1lcGFkQ29udHJvbC51cGRhdGUoYXBwLmZyYW1lVGltZSk7XHJcbiAqICAgfVxyXG4gKi9cclxudmFyIEdhbWVwYWRDb250cm9sID0gQmFzZS5leHRlbmQoZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5wbHVnaW4uR2FtZXBhZENvbnRyb2wjICovIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2NlbmUgbm9kZSB0byBjb250cm9sLCBtb3N0bHkgaXQgaXMgYSBjYW1lcmEuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Ob2RlfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRhcmdldDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTW92ZSBzcGVlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbW92ZVNwZWVkOiAwLjEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIExvb2sgYXJvdW5kIHNwZWVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBsb29rQXJvdW5kU3BlZWQ6IDAuMSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVXAgYXhpcy5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdXA6IG5ldyBWZWN0b3IzKDAsIDEsIDApLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lbGluZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRpbWVsaW5lfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRpbWVsaW5lOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhIHN0YW5kYXJkIGdhbWVwYWQgaXMgcmVhZHkgdG8gdXNlLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uU3RhbmRhcmRHYW1lcGFkUmVhZHk6IGZ1bmN0aW9uKGdhbWVwYWQpe30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGEgZ2FtZXBhZCBpcyBkaXNjb25uZWN0ZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb25HYW1lcGFkRGlzY29ubmVjdGVkOiBmdW5jdGlvbihnYW1lcGFkKXt9LFxyXG5cclxuICAgICAgICAvLyBQcml2YXRlIHByb3BlcnRpZXM6XHJcblxyXG4gICAgICAgIF9tb3ZlRm9yd2FyZDogZmFsc2UsXHJcbiAgICAgICAgX21vdmVCYWNrd2FyZDogZmFsc2UsXHJcbiAgICAgICAgX21vdmVMZWZ0OiBmYWxzZSxcclxuICAgICAgICBfbW92ZVJpZ2h0OiBmYWxzZSxcclxuXHJcbiAgICAgICAgX29mZnNldFBpdGNoOiAwLFxyXG4gICAgICAgIF9vZmZzZXRSb2xsOiAwLFxyXG5cclxuICAgICAgICBfY29ubmVjdGVkR2FtZXBhZEluZGV4OiAwLFxyXG4gICAgICAgIF9zdGFuZGFyZEdhbWVwYWRBdmFpbGFibGU6IGZhbHNlLFxyXG4gICAgICAgIF9nYW1lcGFkQXhpc1RocmVzaG9sZDogMC4zXHJcblxyXG4gICAgfTtcclxuXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIHRoaXMuX2NoZWNrR2FtZXBhZENvbXBhdGliaWxpdHkgPSB0aGlzLl9jaGVja0dhbWVwYWRDb21wYXRpYmlsaXR5LmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9kaXNjb25uZWN0R2FtZXBhZCA9IHRoaXMuX2Rpc2Nvbm5lY3RHYW1lcGFkLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9nZXRTdGFuZGFyZEdhbWVwYWQgPSB0aGlzLl9nZXRTdGFuZGFyZEdhbWVwYWQuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX3NjYW5QcmVzc2VkR2FtZXBhZEJ1dHRvbnMgPSB0aGlzLl9zY2FuUHJlc3NlZEdhbWVwYWRCdXR0b25zLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9zY2FuSW5jbGluZWRHYW1lcGFkQXhlcyA9IHRoaXMuX3NjYW5JbmNsaW5lZEdhbWVwYWRBeGVzLmJpbmQodGhpcyk7XHJcblxyXG4gICAgdGhpcy51cGRhdGUgPSB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpO1xyXG5cclxuICAgIC8vIElmIGJyb3dzZXIgc3VwcG9ydHMgR2FtZXBhZCBBUEk6XHJcbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvci5nZXRHYW1lcGFkcyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5HYW1lcGFkQ29udHJvbC5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0LiBjb250cm9sLlxyXG4gICAgICovXHJcbiAgICBpbml0OiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2hlbiB1c2VyIGJlZ2lucyB0byBpbnRlcmFjdCB3aXRoIGNvbm5lY3RlZCBnYW1lcGFkOlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vZ2FtZXBhZC8jZG9tLWdhbWVwYWRldmVudFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKHdpbmRvdywgJ2dhbWVwYWRjb25uZWN0ZWQnLCB0aGlzLl9jaGVja0dhbWVwYWRDb21wYXRpYmlsaXR5KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGltZWxpbmUpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lbGluZS5vbignZnJhbWUnLCB0aGlzLnVwZGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csICdnYW1lcGFkZGlzY29ubmVjdGVkJywgdGhpcy5fZGlzY29ubmVjdEdhbWVwYWQpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGNvbnRyb2wuXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3csICdnYW1lcGFkY29ubmVjdGVkJywgdGhpcy5fY2hlY2tHYW1lcGFkQ29tcGF0aWJpbGl0eSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZWxpbmUub2ZmKCdmcmFtZScsIHRoaXMudXBkYXRlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKHdpbmRvdywgJ2dhbWVwYWRkaXNjb25uZWN0ZWQnLCB0aGlzLl9kaXNjb25uZWN0R2FtZXBhZCk7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnRyb2wncyB1cGRhdGUuIFNob3VsZCBiZSBpbnZva2VkIGV2ZXJ5IGZyYW1lLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcmFtZVRpbWUgRnJhbWUgdGltZS5cclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fc3RhbmRhcmRHYW1lcGFkQXZhaWxhYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NjYW5QcmVzc2VkR2FtZXBhZEJ1dHRvbnMoKTtcclxuICAgICAgICB0aGlzLl9zY2FuSW5jbGluZWRHYW1lcGFkQXhlcygpO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGFyZ2V0IGRlcGVuZGluZyBvbiB1c2VyIGlucHV0LlxyXG5cclxuICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XHJcblxyXG4gICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMudGFyZ2V0LnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS54Lm5vcm1hbGl6ZSgpO1xyXG4gICAgICAgIHZhciB6QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS56Lm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICB2YXIgbW92ZVNwZWVkID0gdGhpcy5tb3ZlU3BlZWQgKiBmcmFtZVRpbWUgLyAyMDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX21vdmVGb3J3YXJkKSB7XHJcbiAgICAgICAgICAgIC8vIE9wcG9zaXRlIGRpcmVjdGlvbiBvZiB6LlxyXG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh6QXhpcywgLW1vdmVTcGVlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlQmFja3dhcmQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoekF4aXMsIG1vdmVTcGVlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlTGVmdCkge1xyXG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh4QXhpcywgLW1vdmVTcGVlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlUmlnaHQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoeEF4aXMsIG1vdmVTcGVlZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0YXJnZXQucm90YXRlQXJvdW5kKHRhcmdldC5wb3NpdGlvbiwgdGhpcy51cCwgLXRoaXMuX29mZnNldFBpdGNoICogZnJhbWVUaW1lICogTWF0aC5QSSAvIDM2MCk7XHJcbiAgICAgICAgdmFyIHhBeGlzID0gdGFyZ2V0LmxvY2FsVHJhbnNmb3JtLng7XHJcbiAgICAgICAgdGFyZ2V0LnJvdGF0ZUFyb3VuZCh0YXJnZXQucG9zaXRpb24sIHhBeGlzLCAtdGhpcy5fb2Zmc2V0Um9sbCAqIGZyYW1lVGltZSAqIE1hdGguUEkgLyAzNjApO1xyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIElmIG5lY2Vzc2FyeTogdHJpZ2dlciBgdXBkYXRlYCBldmVudC5cclxuICAgICAgICAgKiBYWFggVGhpcyBjYW4gZWNvbm9taXplIHJlbmRlcmluZyBPUHMuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYgKHRoaXMuX21vdmVGb3J3YXJkID09PSB0cnVlIHx8IHRoaXMuX21vdmVCYWNrd2FyZCA9PT0gdHJ1ZSB8fCB0aGlzLl9tb3ZlTGVmdCA9PT0gdHJ1ZVxyXG4gICAgICAgICAgICB8fCB0aGlzLl9tb3ZlUmlnaHQgPT09IHRydWUgfHwgdGhpcy5fb2Zmc2V0UGl0Y2ggIT09IDAgfHwgdGhpcy5fb2Zmc2V0Um9sbCAhPT0gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcigndXBkYXRlJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZXNldCB2YWx1ZXMgdG8gYXZvaWQgbG9zdCBvZiBjb250cm9sLlxyXG5cclxuICAgICAgICB0aGlzLl9tb3ZlRm9yd2FyZCA9IHRoaXMuX21vdmVCYWNrd2FyZCA9IHRoaXMuX21vdmVMZWZ0ID0gdGhpcy5fbW92ZVJpZ2h0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0UGl0Y2ggPSB0aGlzLl9vZmZzZXRSb2xsID0gMDtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFByaXZhdGUgbWV0aG9kczpcclxuXHJcbiAgICBfY2hlY2tHYW1lcGFkQ29tcGF0aWJpbGl0eTogZnVuY3Rpb24oZXZlbnQpIHtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgY29ubmVjdGVkIGdhbWVwYWQgaGFzIGEgKipzdGFuZGFyZCoqIGxheW91dDpcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2dhbWVwYWQvI3JlbWFwcGluZyBhYm91dCBzdGFuZGFyZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAoZXZlbnQuZ2FtZXBhZC5tYXBwaW5nID09PSAnc3RhbmRhcmQnKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9zdGFuZGFyZEdhbWVwYWRJbmRleCA9IGV2ZW50LmdhbWVwYWQuaW5kZXg7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YW5kYXJkR2FtZXBhZEF2YWlsYWJsZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm9uU3RhbmRhcmRHYW1lcGFkUmVhZHkoZXZlbnQuZ2FtZXBhZCk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIF9kaXNjb25uZWN0R2FtZXBhZDogZnVuY3Rpb24oZXZlbnQpIHtcclxuXHJcbiAgICAgICAgdGhpcy5fc3RhbmRhcmRHYW1lcGFkQXZhaWxhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMub25HYW1lcGFkRGlzY29ubmVjdGVkKGV2ZW50LmdhbWVwYWQpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgX2dldFN0YW5kYXJkR2FtZXBhZDogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBuYXZpZ2F0b3IuZ2V0R2FtZXBhZHMoKVt0aGlzLl9zdGFuZGFyZEdhbWVwYWRJbmRleF07XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBfc2NhblByZXNzZWRHYW1lcGFkQnV0dG9uczogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBnYW1lcGFkQnV0dG9ucyA9IHRoaXMuX2dldFN0YW5kYXJkR2FtZXBhZCgpLmJ1dHRvbnM7XHJcblxyXG4gICAgICAgIC8vIEZvciBlYWNoIGdhbWVwYWQgYnV0dG9uOlxyXG4gICAgICAgIGZvciAodmFyIGdhbWVwYWRCdXR0b25JZCA9IDA7IGdhbWVwYWRCdXR0b25JZCA8IGdhbWVwYWRCdXR0b25zLmxlbmd0aDsgZ2FtZXBhZEJ1dHRvbklkKyspIHtcclxuXHJcbiAgICAgICAgICAgIC8vIEdldCB1c2VyIGlucHV0LlxyXG4gICAgICAgICAgICB2YXIgZ2FtZXBhZEJ1dHRvbiA9IGdhbWVwYWRCdXR0b25zW2dhbWVwYWRCdXR0b25JZF07XHJcblxyXG4gICAgICAgICAgICBpZiAoZ2FtZXBhZEJ1dHRvbi5wcmVzc2VkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChnYW1lcGFkQnV0dG9uSWQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRC1wYWQgVXBcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlRm9yd2FyZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBELXBhZCBEb3duXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUJhY2t3YXJkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEQtcGFkIExlZnRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlTGVmdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBELXBhZCBSaWdodFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVSaWdodCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcblxyXG4gICAgX3NjYW5JbmNsaW5lZEdhbWVwYWRBeGVzOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIGdhbWVwYWRBeGVzID0gdGhpcy5fZ2V0U3RhbmRhcmRHYW1lcGFkKCkuYXhlcztcclxuXHJcbiAgICAgICAgLy8gRm9yIGVhY2ggZ2FtZXBhZCBheGlzOlxyXG4gICAgICAgIGZvciAodmFyIGdhbWVwYWRBeGlzSWQgPSAwOyBnYW1lcGFkQXhpc0lkIDwgZ2FtZXBhZEF4ZXMubGVuZ3RoOyBnYW1lcGFkQXhpc0lkKyspIHtcclxuXHJcbiAgICAgICAgICAgIC8vIEdldCB1c2VyIGlucHV0LlxyXG4gICAgICAgICAgICB2YXIgZ2FtZXBhZEF4aXMgPSBnYW1lcGFkQXhlc1tnYW1lcGFkQXhpc0lkXTtcclxuXHJcbiAgICAgICAgICAgIC8vIFhYWCBXZSB1c2UgYSB0aHJlc2hvbGQgYmVjYXVzZSBheGVzIGFyZSBuZXZlciBuZXV0cmFsLlxyXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMoZ2FtZXBhZEF4aXMpID4gdGhpcy5fZ2FtZXBhZEF4aXNUaHJlc2hvbGQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGdhbWVwYWRBeGlzSWQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTGVmdCBzdGljayBYwrFcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVMZWZ0ID0gZ2FtZXBhZEF4aXMgPCAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlUmlnaHQgPSBnYW1lcGFkQXhpcyA+IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBMZWZ0IHN0aWNrIFnCsVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUZvcndhcmQgPSBnYW1lcGFkQXhpcyA8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVCYWNrd2FyZCA9IGdhbWVwYWRBeGlzID4gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFJpZ2h0IHN0aWNrIFjCsVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2Zmc2V0UGl0Y2ggKz0gZ2FtZXBhZEF4aXMgKiB0aGlzLmxvb2tBcm91bmRTcGVlZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFJpZ2h0IHN0aWNrIFnCsVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2Zmc2V0Um9sbCArPSBnYW1lcGFkQXhpcyAqIHRoaXMubG9va0Fyb3VuZFNwZWVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdhbWVwYWRDb250cm9sO1xyXG4iLCJ2YXIgR2VzdHVyZU1nciA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB0aGlzLl90cmFjayA9IFtdO1xyXG59O1xyXG5cclxuR2VzdHVyZU1nci5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IEdlc3R1cmVNZ3IsXHJcblxyXG4gICAgcmVjb2duaXplOiBmdW5jdGlvbiAoZXZlbnQsIHRhcmdldCwgcm9vdCkge1xyXG4gICAgICAgIHRoaXMuX2RvVHJhY2soZXZlbnQsIHRhcmdldCwgcm9vdCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlY29nbml6ZShldmVudCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2subGVuZ3RoID0gMDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgX2RvVHJhY2s6IGZ1bmN0aW9uIChldmVudCwgdGFyZ2V0LCByb290KSB7XHJcbiAgICAgICAgdmFyIHRvdWNoZXMgPSBldmVudC50YXJnZXRUb3VjaGVzO1xyXG5cclxuICAgICAgICBpZiAoIXRvdWNoZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRyYWNrSXRlbSA9IHtcclxuICAgICAgICAgICAgcG9pbnRzOiBbXSxcclxuICAgICAgICAgICAgdG91Y2hlczogW10sXHJcbiAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxyXG4gICAgICAgICAgICBldmVudDogZXZlbnRcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdG91Y2hlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdG91Y2ggPSB0b3VjaGVzW2ldO1xyXG4gICAgICAgICAgICB0cmFja0l0ZW0ucG9pbnRzLnB1c2goW3RvdWNoLmNsaWVudFgsIHRvdWNoLmNsaWVudFldKTtcclxuICAgICAgICAgICAgdHJhY2tJdGVtLnRvdWNoZXMucHVzaCh0b3VjaCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90cmFjay5wdXNoKHRyYWNrSXRlbSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZWNvZ25pemU6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiByZWNvZ25pemVycykge1xyXG4gICAgICAgICAgICBpZiAocmVjb2duaXplcnMuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGdlc3R1cmVJbmZvID0gcmVjb2duaXplcnNbZXZlbnROYW1lXSh0aGlzLl90cmFjaywgZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGdlc3R1cmVJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdlc3R1cmVJbmZvO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZnVuY3Rpb24gZGlzdChwb2ludFBhaXIpIHtcclxuICAgIHZhciBkeCA9IHBvaW50UGFpclsxXVswXSAtIHBvaW50UGFpclswXVswXTtcclxuICAgIHZhciBkeSA9IHBvaW50UGFpclsxXVsxXSAtIHBvaW50UGFpclswXVsxXTtcclxuXHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2VudGVyKHBvaW50UGFpcikge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICAocG9pbnRQYWlyWzBdWzBdICsgcG9pbnRQYWlyWzFdWzBdKSAvIDIsXHJcbiAgICAgICAgKHBvaW50UGFpclswXVsxXSArIHBvaW50UGFpclsxXVsxXSkgLyAyXHJcbiAgICBdO1xyXG59XHJcblxyXG52YXIgcmVjb2duaXplcnMgPSB7XHJcblxyXG4gICAgcGluY2g6IGZ1bmN0aW9uICh0cmFjaywgZXZlbnQpIHtcclxuICAgICAgICB2YXIgdHJhY2tMZW4gPSB0cmFjay5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmICghdHJhY2tMZW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHBpbmNoRW5kID0gKHRyYWNrW3RyYWNrTGVuIC0gMV0gfHwge30pLnBvaW50cztcclxuICAgICAgICB2YXIgcGluY2hQcmUgPSAodHJhY2tbdHJhY2tMZW4gLSAyXSB8fCB7fSkucG9pbnRzIHx8IHBpbmNoRW5kO1xyXG5cclxuICAgICAgICBpZiAocGluY2hQcmVcclxuICAgICAgICAgICAgJiYgcGluY2hQcmUubGVuZ3RoID4gMVxyXG4gICAgICAgICAgICAmJiBwaW5jaEVuZFxyXG4gICAgICAgICAgICAmJiBwaW5jaEVuZC5sZW5ndGggPiAxXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHZhciBwaW5jaFNjYWxlID0gZGlzdChwaW5jaEVuZCkgLyBkaXN0KHBpbmNoUHJlKTtcclxuICAgICAgICAgICAgIWlzRmluaXRlKHBpbmNoU2NhbGUpICYmIChwaW5jaFNjYWxlID0gMSk7XHJcblxyXG4gICAgICAgICAgICBldmVudC5waW5jaFNjYWxlID0gcGluY2hTY2FsZTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwaW5jaENlbnRlciA9IGNlbnRlcihwaW5jaEVuZCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnBpbmNoWCA9IHBpbmNoQ2VudGVyWzBdO1xyXG4gICAgICAgICAgICBldmVudC5waW5jaFkgPSBwaW5jaENlbnRlclsxXTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAncGluY2gnLFxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB0cmFja1swXS50YXJnZXQsXHJcbiAgICAgICAgICAgICAgICBldmVudDogZXZlbnRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHZXN0dXJlTWdyO1xyXG4iLCJpbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IFBsYW5lIGZyb20gJy4uL21hdGgvUGxhbmUnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgUmF5IGZyb20gJy4uL21hdGgvUmF5JztcclxuXHJcbnZhciB1dnMgPSBbWzAsIDBdLCBbMCwgMV0sIFsxLCAxXSwgWzEsIDBdXTtcclxudmFyIHRyaXMgPSBbMCwgMSwgMiwgMiwgMywgMF07XHJcblxyXG52YXIgSW5maW5pdGVQbGFuZSA9IE1lc2guZXh0ZW5kKHtcclxuXHJcbiAgICBjYW1lcmE6IG51bGwsXHJcblxyXG4gICAgcGxhbmU6IG51bGwsXHJcblxyXG4gICAgbWF4R3JpZDogMCxcclxuXHJcbiAgICAvLyBUT0RPXHJcbiAgICBmcnVzdHVtQ3VsbGluZzogZmFsc2VcclxuXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe1xyXG4gICAgICAgIGR5bmFtaWM6IHRydWVcclxuICAgIH0pO1xyXG4gICAgZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5pbml0KDYpO1xyXG4gICAgZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwuaW5pdCg2KTtcclxuICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXMudGV4Y29vcmQwLmluaXQoNik7XHJcbiAgICBnZW9tZXRyeS5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KDYpO1xyXG5cclxuICAgIHRoaXMucGxhbmUgPSBuZXcgUGxhbmUoKTtcclxufSwge1xyXG5cclxuICAgIHVwZGF0ZUdlb21ldHJ5OiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciBjb29yZHMgPSB0aGlzLl91blByb2plY3RHcmlkKCk7XHJcbiAgICAgICAgaWYgKCFjb29yZHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcG9zaXRpb25BdHRyID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciBub3JtYWxBdHRyID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLm5vcm1hbDtcclxuICAgICAgICB2YXIgdGV4Y29vcmRzID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMDtcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuZ2VvbWV0cnkuaW5kaWNlcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGlkeCA9IHRyaXNbaV07XHJcbiAgICAgICAgICAgIHBvc2l0aW9uQXR0ci5zZXQoaSwgY29vcmRzW2lkeF0uYXJyYXkpO1xyXG4gICAgICAgICAgICBub3JtYWxBdHRyLnNldChpLCB0aGlzLnBsYW5lLm5vcm1hbC5hcnJheSk7XHJcbiAgICAgICAgICAgIHRleGNvb3Jkcy5zZXQoaSwgdXZzW2lkeF0pO1xyXG4gICAgICAgICAgICBpbmRpY2VzW2ldID0gaTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZW9tZXRyeS5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBodHRwOi8vZmlsZWFkbWluLmNzLmx0aC5zZS9ncmFwaGljcy90aGVzZXMvcHJvamVjdHMvcHJvamdyaWQvXHJcbiAgICBfdW5Qcm9qZWN0R3JpZDogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIHBsYW5lVmlld1NwYWNlID0gbmV3IFBsYW5lKCk7XHJcbiAgICAgICAgdmFyIGxpbmVzID0gW1xyXG4gICAgICAgICAgICAwLCAxLCAwLCAyLCAxLCAzLCAyLCAzLFxyXG4gICAgICAgICAgICA0LCA1LCA0LCA2LCA1LCA3LCA2LCA3LFxyXG4gICAgICAgICAgICAwLCA0LCAxLCA1LCAyLCA2LCAzLCA3XHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgdmFyIHN0YXJ0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB2YXIgZW5kID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbiAgICAgICAgdmFyIHBvaW50cyA9IFtdO1xyXG5cclxuICAgICAgICAvLyAxLS0tLTJcclxuICAgICAgICAvLyB8ICAgIHxcclxuICAgICAgICAvLyAwLS0tLTNcclxuICAgICAgICB2YXIgY29vcmRzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcclxuICAgICAgICAgICAgY29vcmRzW2ldID0gbmV3IFZlY3RvcjMoMCwgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcmF5ID0gbmV3IFJheSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBwbGFuZVZpZXdTcGFjZS5jb3B5KHRoaXMucGxhbmUpO1xyXG4gICAgICAgICAgICBwbGFuZVZpZXdTcGFjZS5hcHBseVRyYW5zZm9ybSh0aGlzLmNhbWVyYS52aWV3TWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBmcnVzdHVtVmVydGljZXMgPSB0aGlzLmNhbWVyYS5mcnVzdHVtLnZlcnRpY2VzO1xyXG5cclxuICAgICAgICAgICAgdmFyIG5Qb2ludHMgPSAwO1xyXG4gICAgICAgICAgICAvLyBJbnRlcnNlY3Qgd2l0aCBsaW5lcyBvZiBmcnVzdHVtXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTI7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQuYXJyYXkgPSBmcnVzdHVtVmVydGljZXNbbGluZXNbaSAqIDJdXTtcclxuICAgICAgICAgICAgICAgIGVuZC5hcnJheSA9IGZydXN0dW1WZXJ0aWNlc1tsaW5lc1tpICogMiArIDFdXTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcG9pbnQgPSBwbGFuZVZpZXdTcGFjZS5pbnRlcnNlY3RMaW5lKHN0YXJ0LCBlbmQsIHBvaW50c1tuUG9pbnRzXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXBvaW50c1tuUG9pbnRzXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbblBvaW50c10gPSBwb2ludDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgblBvaW50cysrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChuUG9pbnRzID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuUG9pbnRzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHBvaW50c1tpXS5hcHBseVByb2plY3Rpb24odGhpcy5jYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIG1pblggPSBwb2ludHNbMF0uYXJyYXlbMF07XHJcbiAgICAgICAgICAgIHZhciBtaW5ZID0gcG9pbnRzWzBdLmFycmF5WzFdO1xyXG4gICAgICAgICAgICB2YXIgbWF4WCA9IHBvaW50c1swXS5hcnJheVswXTtcclxuICAgICAgICAgICAgdmFyIG1heFkgPSBwb2ludHNbMF0uYXJyYXlbMV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgblBvaW50czsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcG9pbnRzW2ldLmFycmF5WzBdKTtcclxuICAgICAgICAgICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBwb2ludHNbaV0uYXJyYXlbMV0pO1xyXG4gICAgICAgICAgICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIHBvaW50c1tpXS5hcnJheVswXSk7XHJcbiAgICAgICAgICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcG9pbnRzW2ldLmFycmF5WzFdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWluWCA9PSBtYXhYIHx8IG1pblkgPT0gbWF4WSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvb3Jkc1swXS5hcnJheVswXSA9IG1pblg7XHJcbiAgICAgICAgICAgIGNvb3Jkc1swXS5hcnJheVsxXSA9IG1pblk7XHJcbiAgICAgICAgICAgIGNvb3Jkc1sxXS5hcnJheVswXSA9IG1pblg7XHJcbiAgICAgICAgICAgIGNvb3Jkc1sxXS5hcnJheVsxXSA9IG1heFk7XHJcbiAgICAgICAgICAgIGNvb3Jkc1syXS5hcnJheVswXSA9IG1heFg7XHJcbiAgICAgICAgICAgIGNvb3Jkc1syXS5hcnJheVsxXSA9IG1heFk7XHJcbiAgICAgICAgICAgIGNvb3Jkc1szXS5hcnJheVswXSA9IG1heFg7XHJcbiAgICAgICAgICAgIGNvb3Jkc1szXS5hcnJheVsxXSA9IG1pblk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW1lcmEuY2FzdFJheShjb29yZHNbaV0sIHJheSk7XHJcbiAgICAgICAgICAgICAgICByYXkuaW50ZXJzZWN0UGxhbmUodGhpcy5wbGFuZSwgY29vcmRzW2ldKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGNvb3JkcztcclxuICAgICAgICB9O1xyXG4gICAgfSkoKVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEluZmluaXRlUGxhbmU7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBWZWN0b3IyIGZyb20gJy4uL21hdGgvVmVjdG9yMic7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBHZXN0dXJlTWdyIGZyb20gJy4vR2VzdHVyZU1ncic7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuXHJcbnZhciBNT1VTRV9CVVRUT05fS0VZX01BUCA9IHtcclxuICAgIGxlZnQ6IDAsXHJcbiAgICBtaWRkbGU6IDEsXHJcbiAgICByaWdodDogMlxyXG59O1xyXG5cclxuZnVuY3Rpb24gZmlyc3ROb3ROdWxsKCkge1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGlmIChhcmd1bWVudHNbaV0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY29udmVydFRvQXJyYXkodmFsKSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkge1xyXG4gICAgICAgIHZhbCA9IFt2YWwsIHZhbF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG59XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LnBsdWdpbi5PcmJpdENvbnRyb2xcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBPcmJpdENvbnRyb2wgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5wbHVnaW4uT3JiaXRDb250cm9sIyAqLyB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRpbWVsaW5lfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRpbWVsaW5lOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZG9tRWxlbWVudDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0YXJnZXQ6IG51bGwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAgICAgKi9cclxuICAgICAgICBfY2VudGVyOiBuZXcgVmVjdG9yMygpLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNaW5pbXVtIGRpc3RhbmNlIHRvIHRoZSBjZW50ZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDAuNVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1pbkRpc3RhbmNlOiAwLjEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1heGltdW0gZGlzdGFuY2UgdG8gdGhlIGNlbnRlclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1heERpc3RhbmNlOiAxMDAwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBPbmx5IGF2YWlsYWJsZSB3aGVuIGNhbWVyYSBpcyBvcnRob2dyYXBoaWNcclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXhPcnRob2dyYXBoaWNTaXplOiAzMDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE9ubHkgYXZhaWxhYmxlIHdoZW4gY2FtZXJhIGlzIG9ydGhvZ3JhcGhpY1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1pbk9ydGhvZ3JhcGhpY1NpemU6IDMwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBc3BlY3Qgb2Ygb3J0aG9ncmFwaGljIGNhbWVyYVxyXG4gICAgICAgICAqIE9ubHkgYXZhaWxhYmxlIHdoZW4gY2FtZXJhIGlzIG9ydGhvZ3JhcGhpY1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9ydGhvZ3JhcGhpY0FzcGVjdDogMSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWluaW11bSBhbHBoYSByb3RhdGlvblxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1pbkFscGhhOiAtOTAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1heGltdW0gYWxwaGEgcm90YXRpb25cclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXhBbHBoYTogOTAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1pbmltdW0gYmV0YSByb3RhdGlvblxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1pbkJldGE6IC1JbmZpbml0eSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNYXhpbXVtIGJldGEgcm90YXRpb25cclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXhCZXRhOiBJbmZpbml0eSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU3RhcnQgYXV0byByb3RhdGluZyBhZnRlciBzdGlsbCBmb3IgdGhlIGdpdmVuIHRpbWVcclxuICAgICAgICAgKi9cclxuICAgICAgICBhdXRvUm90YXRlQWZ0ZXJTdGlsbDogMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRGlyZWN0aW9uIG9mIGF1dG9Sb3RhdGUuIGN3IG9yIGNjdyB3aGVuIGxvb2tpbmcgdG9wIGRvd24uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXV0b1JvdGF0ZURpcmVjdGlvbjogJ2N3JyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRGVncmVlIHBlciBzZWNvbmRcclxuICAgICAgICAgKi9cclxuICAgICAgICBhdXRvUm90YXRlU3BlZWQ6IDYwLFxyXG5cclxuICAgICAgICBwYW5Nb3VzZUJ1dHRvbjogJ21pZGRsZScsXHJcbiAgICAgICAgcm90YXRlTW91c2VCdXR0b246ICdsZWZ0JyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUGFuIG9yIHJvdGF0ZVxyXG4gICAgICAgICAqIEB0eXBlIHtTdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX21vZGU6ICdyb3RhdGUnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkYW1waW5nOiAwLjgsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJvdGF0ZVNlbnNpdGl2aXR5OiAxLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB6b29tU2Vuc2l0aXZpdHk6IDEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHBhblNlbnNpdGl2aXR5OiAxLFxyXG5cclxuICAgICAgICBfbmVlZHNVcGRhdGU6IGZhbHNlLFxyXG5cclxuICAgICAgICBfcm90YXRpbmc6IGZhbHNlLFxyXG5cclxuICAgICAgICAvLyBSb3RhdGlvbiBhcm91bmQgeUF4aXNcclxuICAgICAgICBfcGhpOiAwLFxyXG4gICAgICAgIC8vIFJvdGF0aW9uIGFyb3VuZCB4QXhpc1xyXG4gICAgICAgIF90aGV0YTogMCxcclxuXHJcbiAgICAgICAgX21vdXNlWDogMCxcclxuICAgICAgICBfbW91c2VZOiAwLFxyXG5cclxuICAgICAgICBfcm90YXRlVmVsb2NpdHk6IG5ldyBWZWN0b3IyKCksXHJcblxyXG4gICAgICAgIF9wYW5WZWxvY2l0eTogbmV3IFZlY3RvcjIoKSxcclxuXHJcbiAgICAgICAgX2Rpc3RhbmNlOiAyMCxcclxuXHJcbiAgICAgICAgX3pvb21TcGVlZDogMCxcclxuXHJcbiAgICAgICAgX3N0aWxsVGltZW91dDogMCxcclxuXHJcbiAgICAgICAgX2FuaW1hdG9yczogW10sXHJcblxyXG4gICAgICAgIF9nZXN0dXJlTWdyOiBuZXcgR2VzdHVyZU1ncigpXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAvLyBFYWNoIE9yYml0Q29udHJvbCBoYXMgaXQncyBvd24gaGFuZGxlclxyXG4gICAgdGhpcy5fbW91c2VEb3duSGFuZGxlciA9IHRoaXMuX21vdXNlRG93bkhhbmRsZXIuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX21vdXNlV2hlZWxIYW5kbGVyID0gdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIgPSB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9tb3VzZVVwSGFuZGxlciA9IHRoaXMuX21vdXNlVXBIYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9waW5jaEhhbmRsZXIgPSB0aGlzLl9waW5jaEhhbmRsZXIuYmluZCh0aGlzKTtcclxuXHJcbiAgICB0aGlzLmluaXQoKTtcclxufSwgLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5PcmJpdENvbnRyb2wjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZS5cclxuICAgICAqIE1vdXNlIGV2ZW50IGJpbmRpbmdcclxuICAgICAqL1xyXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBkb20gPSB0aGlzLmRvbUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNoc3RhcnQnLCB0aGlzLl9tb3VzZURvd25IYW5kbGVyKTtcclxuXHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2Vkb3duJywgdGhpcy5fbW91c2VEb3duSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9tLCAnd2hlZWwnLCB0aGlzLl9tb3VzZVdoZWVsSGFuZGxlcik7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZWxpbmUub24oJ2ZyYW1lJywgdGhpcy51cGRhdGUsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy50YXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWNvbXBvc2VUcmFuc2Zvcm0oKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZS5cclxuICAgICAqIE1vdXNlIGV2ZW50IHVuYmluZGluZ1xyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGRvbSA9IHRoaXMuZG9tRWxlbWVudDtcclxuXHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCAndG91Y2hzdGFydCcsIHRoaXMuX21vdXNlRG93bkhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNobW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNoZW5kJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG5cclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZWRvd24nLCB0aGlzLl9tb3VzZURvd25IYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZXVwJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3doZWVsJywgdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlb3V0JywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aW1lbGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lLm9mZignZnJhbWUnLCB0aGlzLnVwZGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RvcEFsbEFuaW1hdGlvbigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBkaXN0YW5jZVxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXREaXN0YW5jZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXN0YW5jZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZGlzdGFuY2VcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZVxyXG4gICAgICovXHJcbiAgICBzZXREaXN0YW5jZTogZnVuY3Rpb24gKGRpc3RhbmNlKSB7XHJcbiAgICAgICAgdGhpcy5fZGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHNpemUgb2Ygb3J0aG9ncmFwaGljIHZpZXdpbmcgdm9sdW1lXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldE9ydGhvZ3JhcGhpY1NpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fb3J0aG9TaXplO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBzaXplIG9mIG9ydGhvZ3JhcGhpYyB2aWV3aW5nIHZvbHVtZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemVcclxuICAgICAqL1xyXG4gICAgc2V0T3J0aG9ncmFwaGljU2l6ZTogZnVuY3Rpb24gKHNpemUpIHtcclxuICAgICAgICB0aGlzLl9vcnRob1NpemUgPSBzaXplO1xyXG4gICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYWxwaGEgcm90YXRpb25cclxuICAgICAqIEFscGhhIGFuZ2xlIGZvciB0b3AtZG93biByb3RhdGlvbi4gUG9zaXRpdmUgdG8gcm90YXRlIHRvIHRvcC5cclxuICAgICAqXHJcbiAgICAgKiBXaGljaCBtZWFucyBjYW1lcmEgcm90YXRpb24gYXJvdW5kIHggYXhpcy5cclxuICAgICAqL1xyXG4gICAgZ2V0QWxwaGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGhldGEgLyBNYXRoLlBJICogMTgwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBiZXRhIHJvdGF0aW9uXHJcbiAgICAgKiBCZXRhIGFuZ2xlIGZvciBsZWZ0LXJpZ2h0IHJvdGF0aW9uLiBQb3NpdGl2ZSB0byByb3RhdGUgdG8gcmlnaHQuXHJcbiAgICAgKlxyXG4gICAgICogV2hpY2ggbWVhbnMgY2FtZXJhIHJvdGF0aW9uIGFyb3VuZCB5IGF4aXMuXHJcbiAgICAgKi9cclxuICAgIGdldEJldGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gLXRoaXMuX3BoaSAvIE1hdGguUEkgKiAxODA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGNvbnRyb2wgY2VudGVyXHJcbiAgICAgKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2VudGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NlbnRlci50b0FycmF5KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGFscGhhIHJvdGF0aW9uIGFuZ2xlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYWxwaGFcclxuICAgICAqL1xyXG4gICAgc2V0QWxwaGE6IGZ1bmN0aW9uIChhbHBoYSkge1xyXG4gICAgICAgIGFscGhhID0gTWF0aC5tYXgoTWF0aC5taW4odGhpcy5tYXhBbHBoYSwgYWxwaGEpLCB0aGlzLm1pbkFscGhhKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdGhldGEgPSBhbHBoYSAvIDE4MCAqIE1hdGguUEk7XHJcbiAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBiZXRhIHJvdGF0aW9uIGFuZ2xlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYmV0YVxyXG4gICAgICovXHJcbiAgICBzZXRCZXRhOiBmdW5jdGlvbiAoYmV0YSkge1xyXG4gICAgICAgIGJldGEgPSBNYXRoLm1heChNYXRoLm1pbih0aGlzLm1heEJldGEsIGJldGEpLCB0aGlzLm1pbkJldGEpO1xyXG5cclxuICAgICAgICB0aGlzLl9waGkgPSAtYmV0YSAvIDE4MCAqIE1hdGguUEk7XHJcbiAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBjb250cm9sIGNlbnRlclxyXG4gICAgICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gY2VudGVyXHJcbiAgICAgKi9cclxuICAgIHNldENlbnRlcjogZnVuY3Rpb24gKGNlbnRlckFycikge1xyXG4gICAgICAgIHRoaXMuX2NlbnRlci5zZXRBcnJheShjZW50ZXJBcnIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRPcHRpb246IGZ1bmN0aW9uIChvcHRzKSB7XHJcbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XHJcblxyXG4gICAgICAgIFsnYXV0b1JvdGF0ZScsICdhdXRvUm90YXRlQWZ0ZXJTdGlsbCcsXHJcbiAgICAgICAgICAgICdhdXRvUm90YXRlRGlyZWN0aW9uJywgJ2F1dG9Sb3RhdGVTcGVlZCcsXHJcbiAgICAgICAgICAgICdkYW1waW5nJyxcclxuICAgICAgICAgICAgJ21pbkRpc3RhbmNlJywgJ21heERpc3RhbmNlJyxcclxuICAgICAgICAgICAgJ21pbk9ydGhvZ3JhcGhpY1NpemUnLCAnbWF4T3J0aG9ncmFwaGljU2l6ZScsICdvcnRob2dyYXBoaWNBc3BlY3QnLFxyXG4gICAgICAgICAgICAnbWluQWxwaGEnLCAnbWF4QWxwaGEnLCAnbWluQmV0YScsICdtYXhCZXRhJyxcclxuICAgICAgICAgICAgJ3JvdGF0ZVNlbnNpdGl2aXR5JywgJ3pvb21TZW5zaXRpdml0eScsICdwYW5TZW5zaXRpdml0eSdcclxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICBpZiAob3B0c1trZXldICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IG9wdHNba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG5cclxuICAgICAgICBpZiAob3B0cy5kaXN0YW5jZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGlzdGFuY2Uob3B0cy5kaXN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRzLm9ydGhvZ3JhcGhpY1NpemUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldE9ydGhvZ3JhcGhpY1NpemUob3B0cy5vcnRob2dyYXBoaWNTaXplKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcHRzLmFscGhhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRBbHBoYShvcHRzLmFscGhhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuYmV0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0QmV0YShvcHRzLmJldGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wdHMuY2VudGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2VudGVyKG9wdHMuY2VudGVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRhcmdldCkge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVUcmFuc2Zvcm0oKTtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXQudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0cy5kaXN0YW5jZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdHMub3J0aG9ncmFwaGljU2l6ZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdHMuYWxwaGFcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLmJldGFcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IG9wdHMuY2VudGVyXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZHVyYXRpb249MTAwMF1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5lYXNpbmc9J2xpbmVhciddXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZG9uZV1cclxuICAgICAqL1xyXG4gICAgYW5pbWF0ZVRvOiBmdW5jdGlvbiAob3B0cykge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgdmFyIG9iaiA9IHt9O1xyXG4gICAgICAgIHZhciB0YXJnZXQgPSB7fTtcclxuICAgICAgICB2YXIgdGltZWxpbmUgPSB0aGlzLnRpbWVsaW5lO1xyXG4gICAgICAgIGlmICghdGltZWxpbmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0cy5kaXN0YW5jZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG9iai5kaXN0YW5jZSA9IHRoaXMuZ2V0RGlzdGFuY2UoKTtcclxuICAgICAgICAgICAgdGFyZ2V0LmRpc3RhbmNlID0gb3B0cy5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMub3J0aG9ncmFwaGljU2l6ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG9iai5vcnRob2dyYXBoaWNTaXplID0gdGhpcy5nZXRPcnRob2dyYXBoaWNTaXplKCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5vcnRob2dyYXBoaWNTaXplID0gb3B0cy5vcnRob2dyYXBoaWNTaXplO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0cy5hbHBoYSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG9iai5hbHBoYSA9IHRoaXMuZ2V0QWxwaGEoKTtcclxuICAgICAgICAgICAgdGFyZ2V0LmFscGhhID0gb3B0cy5hbHBoYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuYmV0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG9iai5iZXRhID0gdGhpcy5nZXRCZXRhKCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5iZXRhID0gb3B0cy5iZXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0cy5jZW50ZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvYmouY2VudGVyID0gdGhpcy5nZXRDZW50ZXIoKTtcclxuICAgICAgICAgICAgdGFyZ2V0LmNlbnRlciA9IG9wdHMuY2VudGVyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZEFuaW1hdG9yKFxyXG4gICAgICAgICAgICB0aW1lbGluZS5hbmltYXRlKG9iailcclxuICAgICAgICAgICAgICAgIC53aGVuKG9wdHMuZHVyYXRpb24gfHwgMTAwMCwgdGFyZ2V0KVxyXG4gICAgICAgICAgICAgICAgLmR1cmluZyhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5hbHBoYSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0QWxwaGEob2JqLmFscGhhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5iZXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRCZXRhKG9iai5iZXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5kaXN0YW5jZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0RGlzdGFuY2Uob2JqLmRpc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5vcnRob2dyYXBoaWNTaXplICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRPcnRob2dyYXBoaWNTaXplKG9iai5vcnRob2dyYXBoaWNTaXplKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5jZW50ZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldENlbnRlcihvYmouY2VudGVyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5kb25lKG9wdHMuZG9uZSlcclxuICAgICAgICApLnN0YXJ0KG9wdHMuZWFzaW5nIHx8ICdsaW5lYXInKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wIGFsbCBhbmltYXRpb25zXHJcbiAgICAgKi9cclxuICAgIHN0b3BBbGxBbmltYXRpb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2FuaW1hdG9ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9hbmltYXRvcnNbaV0uc3RvcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9hbmltYXRvcnMubGVuZ3RoID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgX2lzQW5pbWF0aW5nOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FuaW1hdG9ycy5sZW5ndGggPiAwO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ2FsbCB1cGRhdGUgZWFjaCBmcmFtZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBkZWx0YVRpbWUgRnJhbWUgdGltZVxyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChkZWx0YVRpbWUpIHtcclxuXHJcbiAgICAgICAgZGVsdGFUaW1lID0gZGVsdGFUaW1lIHx8IDE2O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fcm90YXRpbmcpIHtcclxuICAgICAgICAgICAgdmFyIHJhZGlhbiA9ICh0aGlzLmF1dG9Sb3RhdGVEaXJlY3Rpb24gPT09ICdjdycgPyAxIDogLTEpXHJcbiAgICAgICAgICAgICAgICAqIHRoaXMuYXV0b1JvdGF0ZVNwZWVkIC8gMTgwICogTWF0aC5QSTtcclxuICAgICAgICAgICAgdGhpcy5fcGhpIC09IHJhZGlhbiAqIGRlbHRhVGltZSAvIDEwMDA7XHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fcm90YXRlVmVsb2NpdHkubGVuKCkgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLl96b29tU3BlZWQpID4gMC4wMSB8fCB0aGlzLl9wYW5WZWxvY2l0eS5sZW4oKSA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9uZWVkc1VwZGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGaXhlZCBkZWx0YVRpbWVcclxuICAgICAgICB0aGlzLl91cGRhdGVEaXN0YW5jZU9yU2l6ZShNYXRoLm1pbihkZWx0YVRpbWUsIDUwKSk7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlUGFuKE1hdGgubWluKGRlbHRhVGltZSwgNTApKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlUm90YXRlKE1hdGgubWluKGRlbHRhVGltZSwgNTApKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlVHJhbnNmb3JtKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGFyZ2V0LnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ3VwZGF0ZScpO1xyXG5cclxuICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IGZhbHNlO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlUm90YXRlOiBmdW5jdGlvbiAoZGVsdGFUaW1lKSB7XHJcbiAgICAgICAgdmFyIHZlbG9jaXR5ID0gdGhpcy5fcm90YXRlVmVsb2NpdHk7XHJcbiAgICAgICAgdGhpcy5fcGhpID0gdmVsb2NpdHkueSAqIGRlbHRhVGltZSAvIDIwICsgdGhpcy5fcGhpO1xyXG4gICAgICAgIHRoaXMuX3RoZXRhID0gdmVsb2NpdHkueCAqIGRlbHRhVGltZSAvIDIwICsgdGhpcy5fdGhldGE7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0QWxwaGEodGhpcy5nZXRBbHBoYSgpKTtcclxuICAgICAgICB0aGlzLnNldEJldGEodGhpcy5nZXRCZXRhKCkpO1xyXG5cclxuICAgICAgICB0aGlzLl92ZWN0b3JEYW1waW5nKHZlbG9jaXR5LCB0aGlzLmRhbXBpbmcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlRGlzdGFuY2VPclNpemU6IGZ1bmN0aW9uIChkZWx0YVRpbWUpIHtcclxuICAgICAgICB0aGlzLl9zZXREaXN0YW5jZSh0aGlzLl9kaXN0YW5jZSArIHRoaXMuX3pvb21TcGVlZCAqIGRlbHRhVGltZSAvIDIwKTtcclxuICAgICAgICBpZiAoISh0aGlzLnRhcmdldCBpbnN0YW5jZW9mIFBlcnNwZWN0aXZlQ2FtZXJhKSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRPcnRob1NpemUodGhpcy5fb3J0aG9TaXplICsgdGhpcy5fem9vbVNwZWVkICogZGVsdGFUaW1lIC8gMjApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fem9vbVNwZWVkICo9IE1hdGgucG93KHRoaXMuZGFtcGluZywgZGVsdGFUaW1lIC8gMTYpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfc2V0RGlzdGFuY2U6IGZ1bmN0aW9uIChkaXN0YW5jZSkge1xyXG4gICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gTWF0aC5tYXgoTWF0aC5taW4oZGlzdGFuY2UsIHRoaXMubWF4RGlzdGFuY2UpLCB0aGlzLm1pbkRpc3RhbmNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldE9ydGhvU2l6ZTogZnVuY3Rpb24gKHNpemUpIHtcclxuICAgICAgICB0aGlzLl9vcnRob1NpemUgPSBNYXRoLm1heChNYXRoLm1pbihzaXplLCB0aGlzLm1heE9ydGhvZ3JhcGhpY1NpemUpLCB0aGlzLm1pbk9ydGhvZ3JhcGhpY1NpemUpO1xyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLnRhcmdldDtcclxuICAgICAgICB2YXIgY2FtZXJhSGVpZ2h0ID0gdGhpcy5fb3J0aG9TaXplO1xyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICB2YXIgY2FtZXJhV2lkdGggPSBjYW1lcmFIZWlnaHQgKiB0aGlzLm9ydGhvZ3JhcGhpY0FzcGVjdDtcclxuICAgICAgICBjYW1lcmEubGVmdCA9IC1jYW1lcmFXaWR0aCAvIDI7XHJcbiAgICAgICAgY2FtZXJhLnJpZ2h0ID0gY2FtZXJhV2lkdGggLyAyO1xyXG4gICAgICAgIGNhbWVyYS50b3AgPSBjYW1lcmFIZWlnaHQgLyAyO1xyXG4gICAgICAgIGNhbWVyYS5ib3R0b20gPSAtY2FtZXJhSGVpZ2h0IC8gMjtcclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZVBhbjogZnVuY3Rpb24gKGRlbHRhVGltZSkge1xyXG4gICAgICAgIHZhciB2ZWxvY2l0eSA9IHRoaXMuX3BhblZlbG9jaXR5O1xyXG4gICAgICAgIHZhciBsZW4gPSB0aGlzLl9kaXN0YW5jZTtcclxuXHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG4gICAgICAgIHZhciB5QXhpcyA9IHRhcmdldC53b3JsZFRyYW5zZm9ybS55O1xyXG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC53b3JsZFRyYW5zZm9ybS54O1xyXG5cclxuICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgdGhpcy5fY2VudGVyXHJcbiAgICAgICAgICAgIC5zY2FsZUFuZEFkZCh4QXhpcywgLXZlbG9jaXR5LnggKiBsZW4gLyAyMDApXHJcbiAgICAgICAgICAgIC5zY2FsZUFuZEFkZCh5QXhpcywgLXZlbG9jaXR5LnkgKiBsZW4gLyAyMDApO1xyXG5cclxuICAgICAgICB0aGlzLl92ZWN0b3JEYW1waW5nKHZlbG9jaXR5LCAwKTtcclxuXHJcbiAgICAgICAgdmVsb2NpdHkueCA9IHZlbG9jaXR5LnkgPSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlVHJhbnNmb3JtOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICB2YXIgZGlyID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB2YXIgdGhldGEgPSB0aGlzLl90aGV0YSArIE1hdGguUEkgLyAyO1xyXG4gICAgICAgIHZhciBwaGkgPSB0aGlzLl9waGkgKyBNYXRoLlBJIC8gMjtcclxuICAgICAgICB2YXIgciA9IE1hdGguc2luKHRoZXRhKTtcclxuXHJcbiAgICAgICAgZGlyLnggPSByICogTWF0aC5jb3MocGhpKTtcclxuICAgICAgICBkaXIueSA9IC1NYXRoLmNvcyh0aGV0YSk7XHJcbiAgICAgICAgZGlyLnogPSByICogTWF0aC5zaW4ocGhpKTtcclxuXHJcbiAgICAgICAgY2FtZXJhLnBvc2l0aW9uLmNvcHkodGhpcy5fY2VudGVyKS5zY2FsZUFuZEFkZChkaXIsIHRoaXMuX2Rpc3RhbmNlKTtcclxuICAgICAgICBjYW1lcmEucm90YXRpb24uaWRlbnRpdHkoKVxyXG4gICAgICAgICAgICAvLyBGaXJzdCBhcm91bmQgeSwgdGhlbiBhcm91bmQgeFxyXG4gICAgICAgICAgICAucm90YXRlWSgtdGhpcy5fcGhpKVxyXG4gICAgICAgICAgICAucm90YXRlWCgtdGhpcy5fdGhldGEpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfc3RhcnRDb3VudGluZ1N0aWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3N0aWxsVGltZW91dCk7XHJcblxyXG4gICAgICAgIHZhciB0aW1lID0gdGhpcy5hdXRvUm90YXRlQWZ0ZXJTdGlsbDtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKCFpc05hTih0aW1lKSAmJiB0aW1lID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zdGlsbFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuX3JvdGF0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSwgdGltZSAqIDEwMDApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3ZlY3RvckRhbXBpbmc6IGZ1bmN0aW9uICh2LCBkYW1waW5nKSB7XHJcbiAgICAgICAgdmFyIHNwZWVkID0gdi5sZW4oKTtcclxuICAgICAgICBzcGVlZCA9IHNwZWVkICogZGFtcGluZztcclxuICAgICAgICBpZiAoc3BlZWQgPCAxZS00KSB7XHJcbiAgICAgICAgICAgIHNwZWVkID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdi5ub3JtYWxpemUoKS5zY2FsZShzcGVlZCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlY29tcG9zZVRyYW5zZm9ybTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy50YXJnZXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50YXJnZXQudXBkYXRlV29ybGRUcmFuc2Zvcm0oKTtcclxuXHJcbiAgICAgICAgdmFyIGZvcndhcmQgPSB0aGlzLnRhcmdldC53b3JsZFRyYW5zZm9ybS56O1xyXG4gICAgICAgIHZhciBhbHBoYSA9IE1hdGguYXNpbihmb3J3YXJkLnkpO1xyXG4gICAgICAgIHZhciBiZXRhID0gTWF0aC5hdGFuMihmb3J3YXJkLngsIGZvcndhcmQueik7XHJcblxyXG4gICAgICAgIHRoaXMuX3RoZXRhID0gYWxwaGE7XHJcbiAgICAgICAgdGhpcy5fcGhpID0gLWJldGE7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0QmV0YSh0aGlzLmdldEJldGEoKSk7XHJcbiAgICAgICAgdGhpcy5zZXRBbHBoYSh0aGlzLmdldEFscGhhKCkpO1xyXG5cclxuICAgICAgICB0aGlzLl9zZXREaXN0YW5jZSh0aGlzLnRhcmdldC5wb3NpdGlvbi5kaXN0KHRoaXMuX2NlbnRlcikpO1xyXG4gICAgICAgIGlmICghKHRoaXMudGFyZ2V0IGluc3RhbmNlb2YgUGVyc3BlY3RpdmVDYW1lcmEpKXtcclxuICAgICAgICAgICAgdGhpcy5fc2V0T3J0aG9TaXplKHRoaXMudGFyZ2V0LnRvcCAtIHRoaXMudGFyZ2V0LmJvdHRvbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfbW91c2VEb3duSGFuZGxlcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBbmltYXRpbmcoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHZhciB5ID0gZS5jbGllbnRZO1xyXG4gICAgICAgIC8vIFRvdWNoXHJcbiAgICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlcykge1xyXG4gICAgICAgICAgICB2YXIgdG91Y2ggPSBlLnRhcmdldFRvdWNoZXNbMF07XHJcbiAgICAgICAgICAgIHggPSB0b3VjaC5jbGllbnRYO1xyXG4gICAgICAgICAgICB5ID0gdG91Y2guY2xpZW50WTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX21vZGUgPSAncm90YXRlJztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NHZXN0dXJlKGUsICdzdGFydCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGUuYnV0dG9uID09PSBNT1VTRV9CVVRUT05fS0VZX01BUFt0aGlzLnJvdGF0ZU1vdXNlQnV0dG9uXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZSA9ICdyb3RhdGUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGUuYnV0dG9uID09PSBNT1VTRV9CVVRUT05fS0VZX01BUFt0aGlzLnBhbk1vdXNlQnV0dG9uXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZSA9ICdwYW4nO1xyXG5cclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogVmVuZG9ycyBsaWtlIE1vemlsbGEgcHJvdmlkZSBhIG1vdXNlLWRyaXZlbiBwYW5uaW5nIGZlYXR1cmVcclxuICAgICAgICAgICAgICAgICAqIHRoYXQgaXMgYWN0aXZhdGVkIHdoZW4gdGhlIG1pZGRsZSBtb3VzZSBidXR0b24gaXMgcHJlc3NlZC5cclxuICAgICAgICAgICAgICAgICAqXHJcbiAgICAgICAgICAgICAgICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby91aWV2ZW50cy8jZXZlbnQtdHlwZS1tb3VzZWRvd25cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkb20gPSB0aGlzLmRvbUVsZW1lbnQ7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9tLCAndG91Y2htb3ZlJywgdGhpcy5fbW91c2VNb3ZlSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9tLCAndG91Y2hlbmQnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XHJcblxyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlbW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNldXAnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2VvdXQnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IHJvdGF0ZSB2ZWxvY2l0eVxyXG4gICAgICAgIHRoaXMuX3JvdGF0ZVZlbG9jaXR5LnNldCgwLCAwKTtcclxuICAgICAgICB0aGlzLl9yb3RhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9Sb3RhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRDb3VudGluZ1N0aWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9tb3VzZVggPSB4O1xyXG4gICAgICAgIHRoaXMuX21vdXNlWSA9IHk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9tb3VzZU1vdmVIYW5kbGVyOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0FuaW1hdGluZygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgdmFyIHkgPSBlLmNsaWVudFk7XHJcblxyXG4gICAgICAgIHZhciBoYXZlR2VzdHVyZTtcclxuICAgICAgICAvLyBUb3VjaFxyXG4gICAgICAgIGlmIChlLnRhcmdldFRvdWNoZXMpIHtcclxuICAgICAgICAgICAgdmFyIHRvdWNoID0gZS50YXJnZXRUb3VjaGVzWzBdO1xyXG4gICAgICAgICAgICB4ID0gdG91Y2guY2xpZW50WDtcclxuICAgICAgICAgICAgeSA9IHRvdWNoLmNsaWVudFk7XHJcblxyXG4gICAgICAgICAgICBoYXZlR2VzdHVyZSA9IHRoaXMuX3Byb2Nlc3NHZXN0dXJlKGUsICdjaGFuZ2UnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwYW5TZW5zaXRpdml0eSA9IGNvbnZlcnRUb0FycmF5KHRoaXMucGFuU2Vuc2l0aXZpdHkpO1xyXG4gICAgICAgIHZhciByb3RhdGVTZW5zaXRpdml0eSA9IGNvbnZlcnRUb0FycmF5KHRoaXMucm90YXRlU2Vuc2l0aXZpdHkpO1xyXG5cclxuICAgICAgICBpZiAoIWhhdmVHZXN0dXJlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9tb2RlID09PSAncm90YXRlJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlVmVsb2NpdHkueSArPSAoeCAtIHRoaXMuX21vdXNlWCkgLyB0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGggKiAyICogcm90YXRlU2Vuc2l0aXZpdHlbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yb3RhdGVWZWxvY2l0eS54ICs9ICh5IC0gdGhpcy5fbW91c2VZKSAvIHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQgKiAyICogcm90YXRlU2Vuc2l0aXZpdHlbMV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fbW9kZSA9PT0gJ3BhbicpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BhblZlbG9jaXR5LnggKz0gKHggLSB0aGlzLl9tb3VzZVgpIC8gdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoICogcGFuU2Vuc2l0aXZpdHlbMF0gKiA0MDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wYW5WZWxvY2l0eS55ICs9ICgteSArIHRoaXMuX21vdXNlWSkgLyB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0ICogcGFuU2Vuc2l0aXZpdHlbMV0gKiA0MDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX21vdXNlWCA9IHg7XHJcbiAgICAgICAgdGhpcy5fbW91c2VZID0geTtcclxuXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCAmJiBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9tb3VzZVdoZWVsSGFuZGxlcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBbmltYXRpbmcoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBkZWx0YSA9IGUuZGVsdGFZO1xyXG4gICAgICAgIGlmIChkZWx0YSA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3pvb21IYW5kbGVyKGUsIGRlbHRhID4gMCA/IDEgOiAtMSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9waW5jaEhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzQW5pbWF0aW5nKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl96b29tSGFuZGxlcihlLCBlLnBpbmNoU2NhbGUgPiAxID8gLTAuNCA6IDAuNCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF96b29tSGFuZGxlcjogZnVuY3Rpb24gKGUsIGRlbHRhKSB7XHJcblxyXG4gICAgICAgIHZhciBzcGVlZDtcclxuICAgICAgICBpZiAodGhpcy50YXJnZXQgaW5zdGFuY2VvZiBQZXJzcGVjdGl2ZUNhbWVyYSkge1xyXG4gICAgICAgICAgICBzcGVlZCA9IE1hdGgubWF4KE1hdGgubWF4KE1hdGgubWluKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGlzdGFuY2UgLSB0aGlzLm1pbkRpc3RhbmNlLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXhEaXN0YW5jZSAtIHRoaXMuX2Rpc3RhbmNlXHJcbiAgICAgICAgICAgICkpIC8gMjAsIDAuNSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBzcGVlZCA9IE1hdGgubWF4KE1hdGgubWF4KE1hdGgubWluKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3J0aG9TaXplIC0gdGhpcy5taW5PcnRob2dyYXBoaWNTaXplLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXhPcnRob2dyYXBoaWNTaXplIC0gdGhpcy5fb3J0aG9TaXplXHJcbiAgICAgICAgICAgICkpIC8gMjAsIDAuNSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl96b29tU3BlZWQgPSAoZGVsdGEgPiAwID8gLTEgOiAxKSAqIHNwZWVkICogdGhpcy56b29tU2Vuc2l0aXZpdHk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JvdGF0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmF1dG9Sb3RhdGUgJiYgdGhpcy5fbW9kZSA9PT0gJ3JvdGF0ZScpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRDb3VudGluZ1N0aWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0ICYmIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgX21vdXNlVXBIYW5kbGVyOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICB2YXIgZG9tID0gdGhpcy5kb21FbGVtZW50O1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNobW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNoZW5kJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlbW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNldXAnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2VvdXQnLCB0aGlzLl9tb3VzZVVwSGFuZGxlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb2Nlc3NHZXN0dXJlKGV2ZW50LCAnZW5kJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9hZGRBbmltYXRvcjogZnVuY3Rpb24gKGFuaW1hdG9yKSB7XHJcbiAgICAgICAgdmFyIGFuaW1hdG9ycyA9IHRoaXMuX2FuaW1hdG9ycztcclxuICAgICAgICBhbmltYXRvcnMucHVzaChhbmltYXRvcik7XHJcbiAgICAgICAgYW5pbWF0b3IuZG9uZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBpZHggPSBhbmltYXRvcnMuaW5kZXhPZihhbmltYXRvcik7XHJcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgYW5pbWF0b3JzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFuaW1hdG9yO1xyXG4gICAgfSxcclxuXHJcblxyXG4gICAgX3Byb2Nlc3NHZXN0dXJlOiBmdW5jdGlvbiAoZXZlbnQsIHN0YWdlKSB7XHJcbiAgICAgICAgdmFyIGdlc3R1cmVNZ3IgPSB0aGlzLl9nZXN0dXJlTWdyO1xyXG5cclxuICAgICAgICBzdGFnZSA9PT0gJ3N0YXJ0JyAmJiBnZXN0dXJlTWdyLmNsZWFyKCk7XHJcblxyXG4gICAgICAgIHZhciBnZXN0dXJlSW5mbyA9IGdlc3R1cmVNZ3IucmVjb2duaXplKFxyXG4gICAgICAgICAgICBldmVudCxcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgc3RhZ2UgPT09ICdlbmQnICYmIGdlc3R1cmVNZ3IuY2xlYXIoKTtcclxuXHJcbiAgICAgICAgLy8gRG8gbm90IGRvIGFueSBwcmV2ZW50RGVmYXVsdCBoZXJlLiBVcHBlciBhcHBsaWNhdGlvbiBkbyB0aGF0IGlmIG5lY2Vzc2FyeS5cclxuICAgICAgICBpZiAoZ2VzdHVyZUluZm8pIHtcclxuICAgICAgICAgICAgdmFyIHR5cGUgPSBnZXN0dXJlSW5mby50eXBlO1xyXG4gICAgICAgICAgICBldmVudC5nZXN0dXJlRXZlbnQgPSB0eXBlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fcGluY2hIYW5kbGVyKGdlc3R1cmVJbmZvLmV2ZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBnZXN0dXJlSW5mbztcclxuICAgIH1cclxufSk7XHJcblxyXG4vKipcclxuICogSWYgYXV0byByb3RhdGUgdGhlIHRhcmdldFxyXG4gKiBAdHlwZSB7Ym9vbGVhbn1cclxuICogQGRlZmF1bHQgZmFsc2VcclxuICovXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShPcmJpdENvbnRyb2wucHJvdG90eXBlLCAnYXV0b1JvdGF0ZScsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvUm90YXRlO1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xyXG4gICAgICAgIHRoaXMuX2F1dG9Sb3RhdGUgPSB2YWw7XHJcbiAgICAgICAgdGhpcy5fcm90YXRpbmcgPSB2YWw7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE9yYml0Q29udHJvbC5wcm90b3R5cGUsICd0YXJnZXQnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdGFyZ2V0O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xyXG4gICAgICAgIGlmICh2YWwgJiYgdmFsLnRhcmdldCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldENlbnRlcih2YWwudGFyZ2V0LnRvQXJyYXkoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3RhcmdldCA9IHZhbDtcclxuICAgICAgICB0aGlzLmRlY29tcG9zZVRyYW5zZm9ybSgpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBPcmJpdENvbnRyb2w7XHJcbiIsIi8qKlxyXG4gKiBTdGF0aWNHZW9tZXRyeSBjYW4gbm90IGJlIGNoYW5nZWQgb25jZSB0aGV5J3ZlIGJlZW4gc2V0dXBcclxuICovXHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuL0dlb21ldHJ5JztcclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlN0YXRpY0dlb21ldHJ5XHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICovXHJcbnZhciBTdGF0aWNHZW9tZXRyeSA9IEdlb21ldHJ5LmV4dGVuZCh7XHJcbiAgICBkeW5hbWljOiBmYWxzZVxyXG59KTtcclxuZXhwb3J0IGRlZmF1bHQgU3RhdGljR2VvbWV0cnk7XHJcbiIsIi8vIFRPRE8gdGVzdFxyXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5pbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcclxuaW1wb3J0IE5vZGUgZnJvbSAnLi4vTm9kZSc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4uL2dsbWF0cml4L21hdDQnO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lc3BhY2UgY2xheS51dGlsLm1lc2hcclxuICovXHJcbnZhciBtZXNoVXRpbCA9IHtcclxuICAgIC8qKlxyXG4gICAgICogTWVyZ2UgbXVsdGlwbGUgbWVzaGVzIHRvIG9uZS5cclxuICAgICAqIE5vdGUgdGhhdCB0aGVzZSBtZXNoZXMgbXVzdCBoYXZlIHRoZSBzYW1lIG1hdGVyaWFsXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtBcnJheS48Y2xheS5NZXNoPn0gbWVzaGVzXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGFwcGx5V29ybGRUcmFuc2Zvcm1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnV0aWwubWVzaFxyXG4gICAgICovXHJcbiAgICBtZXJnZTogZnVuY3Rpb24gKG1lc2hlcywgYXBwbHlXb3JsZFRyYW5zZm9ybSkge1xyXG5cclxuICAgICAgICBpZiAoISBtZXNoZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ZW1wbGF0ZU1lc2ggPSBtZXNoZXNbMF07XHJcbiAgICAgICAgdmFyIHRlbXBsYXRlR2VvID0gdGVtcGxhdGVNZXNoLmdlb21ldHJ5O1xyXG4gICAgICAgIHZhciBtYXRlcmlhbCA9IHRlbXBsYXRlTWVzaC5tYXRlcmlhbDtcclxuXHJcbiAgICAgICAgdmFyIGdlb21ldHJ5ID0gbmV3IEdlb21ldHJ5KHtcclxuICAgICAgICAgICAgZHluYW1pYzogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgICAgICBnZW9tZXRyeS5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlTmFtZXMgPSB0ZW1wbGF0ZUdlby5nZXRFbmFibGVkQXR0cmlidXRlcygpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZU5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZXNbaV07XHJcbiAgICAgICAgICAgIHZhciBhdHRyID0gdGVtcGxhdGVHZW8uYXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICAgICAgLy8gRXh0ZW5kIGN1c3RvbSBhdHRyaWJ1dGVzXHJcbiAgICAgICAgICAgIGlmICghZ2VvbWV0cnkuYXR0cmlidXRlc1tuYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlc1tuYW1lXSA9IGF0dHIuY2xvbmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCA9IG1hdDQuY3JlYXRlKCk7XHJcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgYXJyYXkgZGF0YSBhbmQgbWVyZ2UgYm91bmRpbmcgYm94XHJcbiAgICAgICAgdmFyIG5WZXJ0ZXggPSAwO1xyXG4gICAgICAgIHZhciBuRmFjZSA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBtZXNoZXMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRHZW8gPSBtZXNoZXNba10uZ2VvbWV0cnk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50R2VvLmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50R2VvLmJvdW5kaW5nQm94LmFwcGx5VHJhbnNmb3JtKGFwcGx5V29ybGRUcmFuc2Zvcm0gPyBtZXNoZXNba10ud29ybGRUcmFuc2Zvcm0gOiBtZXNoZXNba10ubG9jYWxUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkuYm91bmRpbmdCb3gudW5pb24oY3VycmVudEdlby5ib3VuZGluZ0JveCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgblZlcnRleCArPSBjdXJyZW50R2VvLnZlcnRleENvdW50O1xyXG4gICAgICAgICAgICBuRmFjZSArPSBjdXJyZW50R2VvLnRyaWFuZ2xlQ291bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgYXR0cmlidXRlTmFtZXMubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lc1tuXTtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYiA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV07XHJcbiAgICAgICAgICAgIGF0dHJpYi5pbml0KG5WZXJ0ZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoblZlcnRleCA+PSAweGZmZmYpIHtcclxuICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlcyA9IG5ldyBVaW50MzJBcnJheShuRmFjZSAqIDMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheShuRmFjZSAqIDMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZlcnRleE9mZnNldCA9IDA7XHJcbiAgICAgICAgdmFyIGluZGljZXNPZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciB1c2VJbmRpY2VzID0gdGVtcGxhdGVHZW8uaXNVc2VJbmRpY2VzKCk7XHJcblxyXG4gICAgICAgIGZvciAodmFyIG1tID0gMDsgbW0gPCBtZXNoZXMubGVuZ3RoOyBtbSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXNoID0gbWVzaGVzW21tXTtcclxuICAgICAgICAgICAgdmFyIGN1cnJlbnRHZW8gPSBtZXNoLmdlb21ldHJ5O1xyXG5cclxuICAgICAgICAgICAgdmFyIG5WZXJ0ZXggPSBjdXJyZW50R2VvLnZlcnRleENvdW50O1xyXG5cclxuICAgICAgICAgICAgdmFyIG1hdHJpeCA9IGFwcGx5V29ybGRUcmFuc2Zvcm0gPyBtZXNoLndvcmxkVHJhbnNmb3JtLmFycmF5IDogbWVzaC5sb2NhbFRyYW5zZm9ybS5hcnJheTtcclxuICAgICAgICAgICAgbWF0NC5pbnZlcnQoaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCwgbWF0cml4KTtcclxuICAgICAgICAgICAgbWF0NC50cmFuc3Bvc2UoaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCwgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBubiA9IDA7IG5uIDwgYXR0cmlidXRlTmFtZXMubGVuZ3RoOyBubisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVzW25uXTtcclxuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50QXR0ciA9IGN1cnJlbnRHZW8uYXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIHZhciB0YXJnZXRBdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIC8vIFNraXAgdGhlIHVudXNlZCBhdHRyaWJ1dGVzO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50QXR0ci52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBsZW4gPSBjdXJyZW50QXR0ci52YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IGN1cnJlbnRBdHRyLnNpemU7XHJcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmVydGV4T2Zmc2V0ICogc2l6ZTtcclxuICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IGxlbiAvIHNpemU7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QXR0ci52YWx1ZVtvZmZzZXQgKyBpXSA9IGN1cnJlbnRBdHRyLnZhbHVlW2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHBvc2l0aW9uLCBub3JtYWwgYW5kIHRhbmdlbnRcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAncG9zaXRpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5mb3JFYWNoKHRhcmdldEF0dHIudmFsdWUsIHNpemUsIG9mZnNldCwgY291bnQsIHZlYzMudHJhbnNmb3JtTWF0NCwgbWF0cml4KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT09ICdub3JtYWwnIHx8IG5hbWUgPT09ICd0YW5nZW50Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuZm9yRWFjaCh0YXJnZXRBdHRyLnZhbHVlLCBzaXplLCBvZmZzZXQsIGNvdW50LCB2ZWMzLnRyYW5zZm9ybU1hdDQsIGludmVyc2VUcmFuc3Bvc2VNYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodXNlSW5kaWNlcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxlbiA9IGN1cnJlbnRHZW8uaW5kaWNlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuaW5kaWNlc1tpICsgaW5kaWNlc09mZnNldF0gPSBjdXJyZW50R2VvLmluZGljZXNbaV0gKyB2ZXJ0ZXhPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzT2Zmc2V0ICs9IGxlbjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVydGV4T2Zmc2V0ICs9IG5WZXJ0ZXg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmV3IE1lc2goe1xyXG4gICAgICAgICAgICBtYXRlcmlhbDogbWF0ZXJpYWwsXHJcbiAgICAgICAgICAgIGdlb21ldHJ5OiBnZW9tZXRyeVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNwbGl0IG1lc2ggaW50byBzdWIgbWVzaGVzLCBlYWNoIG1lc2ggd2lsbCBoYXZlIG1heEpvaW50TnVtYmVyIGpvaW50cy5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5NZXNofSBtZXNoXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWF4Sm9pbnROdW1iZXJcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5QbGFjZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICpcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnV0aWwubWVzaFxyXG4gICAgICovXHJcblxyXG4gICAgLy8gRklYTUUsIEhhdmUgaXNzdWVzIG9uIHNvbWUgbW9kZWxzXHJcbiAgICBzcGxpdEJ5Sm9pbnRzOiBmdW5jdGlvbiAobWVzaCwgbWF4Sm9pbnROdW1iZXIsIGluUGxhY2UpIHtcclxuICAgICAgICB2YXIgZ2VvbWV0cnkgPSBtZXNoLmdlb21ldHJ5O1xyXG4gICAgICAgIHZhciBza2VsZXRvbiA9IG1lc2guc2tlbGV0b247XHJcbiAgICAgICAgdmFyIG1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbDtcclxuICAgICAgICB2YXIgam9pbnRzID0gbWVzaC5qb2ludHM7XHJcbiAgICAgICAgaWYgKCFnZW9tZXRyeSB8fCAhc2tlbGV0b24gfHwgIWpvaW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoam9pbnRzLmxlbmd0aCA8IG1heEpvaW50TnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtZXNoO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIHZhciBpbmRpY2VzID0gZ2VvbWV0cnkuaW5kaWNlcztcclxuXHJcbiAgICAgICAgdmFyIGZhY2VMZW4gPSBnZW9tZXRyeS50cmlhbmdsZUNvdW50O1xyXG4gICAgICAgIHZhciByZXN0ID0gZmFjZUxlbjtcclxuICAgICAgICB2YXIgaXNGYWNlQWRkZWQgPSBbXTtcclxuICAgICAgICB2YXIgam9pbnRWYWx1ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLmpvaW50LnZhbHVlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmFjZUxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlzRmFjZUFkZGVkW2ldID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBhZGRlZEpvaW50SWR4UGVyRmFjZSA9IFtdO1xyXG5cclxuICAgICAgICB2YXIgYnVja2V0cyA9IFtdO1xyXG5cclxuICAgICAgICB2YXIgZ2V0Sm9pbnRCeUluZGV4ID0gZnVuY3Rpb24gKGlkeCkge1xyXG4gICAgICAgICAgICByZXR1cm4gam9pbnRzW2lkeF07XHJcbiAgICAgICAgfTtcclxuICAgICAgICB3aGlsZSAocmVzdCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIGJ1Y2tldFRyaWFuZ2xlcyA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgYnVja2V0Sm9pbnRSZXZlcnNlTWFwID0gW107XHJcbiAgICAgICAgICAgIHZhciBidWNrZXRKb2ludHMgPSBbXTtcclxuICAgICAgICAgICAgdmFyIHN1YkpvaW50TnVtYmVyID0gMDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBqb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50UmV2ZXJzZU1hcFtpXSA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIGYgPSAwOyBmIDwgZmFjZUxlbjsgZisrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGYWNlQWRkZWRbZl0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBjYW5BZGRUb0J1Y2tldCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgYWRkZWROdW1iZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkeCA9IGluZGljZXNbZiAqIDMgKyBpXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpvaW50SWR4ID0gam9pbnRWYWx1ZXNbaWR4ICogNCArIGpdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpvaW50SWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWNrZXRKb2ludFJldmVyc2VNYXBbam9pbnRJZHhdID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJKb2ludE51bWJlciA8IG1heEpvaW50TnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50UmV2ZXJzZU1hcFtqb2ludElkeF0gPSBzdWJKb2ludE51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0Sm9pbnRzW3N1YkpvaW50TnVtYmVyKytdID0gam9pbnRJZHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkSm9pbnRJZHhQZXJGYWNlW2FkZGVkTnVtYmVyKytdID0gam9pbnRJZHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5BZGRUb0J1Y2tldCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghY2FuQWRkVG9CdWNrZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBSZXZlcnNlIG9wZXJhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWRkZWROdW1iZXI7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRKb2ludFJldmVyc2VNYXBbYWRkZWRKb2ludElkeFBlckZhY2VbaV1dID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50cy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViSm9pbnROdW1iZXItLTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBidWNrZXRUcmlhbmdsZXMucHVzaChpbmRpY2VzLnN1YmFycmF5KGYgKiAzLCAoZiArIDEpICogMykpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpc0ZhY2VBZGRlZFtmXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdC0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJ1Y2tldHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0cmlhbmdsZXM6IGJ1Y2tldFRyaWFuZ2xlcyxcclxuICAgICAgICAgICAgICAgIGpvaW50czogYnVja2V0Sm9pbnRzLm1hcChnZXRKb2ludEJ5SW5kZXgpLFxyXG4gICAgICAgICAgICAgICAgam9pbnRSZXZlcnNlTWFwOiBidWNrZXRKb2ludFJldmVyc2VNYXBcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcm9vdCA9IG5ldyBOb2RlKHtcclxuICAgICAgICAgICAgbmFtZTogbWVzaC5uYW1lXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdmFyIGF0dHJpYk5hbWVzID0gZ2VvbWV0cnkuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcclxuXHJcbiAgICAgICAgYXR0cmliTmFtZXMuc3BsaWNlKGF0dHJpYk5hbWVzLmluZGV4T2YoJ2pvaW50JyksIDEpO1xyXG4gICAgICAgIC8vIE1hcCBmcm9tIG9sZCB2ZXJ0ZXggaW5kZXggdG8gbmV3IHZlcnRleCBpbmRleFxyXG4gICAgICAgIHZhciBuZXdJbmRpY2VzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgYiA9IDA7IGIgPCBidWNrZXRzLmxlbmd0aDsgYisrKSB7XHJcbiAgICAgICAgICAgIHZhciBidWNrZXQgPSBidWNrZXRzW2JdO1xyXG4gICAgICAgICAgICB2YXIgam9pbnRSZXZlcnNlTWFwID0gYnVja2V0LmpvaW50UmV2ZXJzZU1hcDtcclxuICAgICAgICAgICAgdmFyIHN1YkpvaW50TnVtYmVyID0gYnVja2V0LmpvaW50cy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICB2YXIgc3ViR2VvID0gbmV3IEdlb21ldHJ5KCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgc3ViTWVzaCA9IG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFttZXNoLm5hbWUsIGldLmpvaW4oJy0nKSxcclxuICAgICAgICAgICAgICAgIC8vIERPTidUIGNsb25lIG1hdGVyaWFsLlxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnk6IHN1YkdlbyxcclxuICAgICAgICAgICAgICAgIHNrZWxldG9uOiBza2VsZXRvbixcclxuICAgICAgICAgICAgICAgIGpvaW50czogYnVja2V0LmpvaW50cy5zbGljZSgpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgblZlcnRleCA9IDA7XHJcbiAgICAgICAgICAgIHZhciBuVmVydGV4MiA9IGdlb21ldHJ5LnZlcnRleENvdW50O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5WZXJ0ZXgyOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG5ld0luZGljZXNbaV0gPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBDb3VudCBzdWIgZ2VvIG51bWJlclxyXG4gICAgICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGJ1Y2tldC50cmlhbmdsZXMubGVuZ3RoOyBmKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBmYWNlID0gYnVja2V0LnRyaWFuZ2xlc1tmXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkeCA9IGZhY2VbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0luZGljZXNbaWR4XSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5kaWNlc1tpZHhdID0gblZlcnRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgblZlcnRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGF0dHJpYk5hbWVzLmxlbmd0aDsgYSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0cmliTmFtZSA9IGF0dHJpYk5hbWVzW2FdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHN1YkF0dHJpYiA9IHN1Ykdlby5hdHRyaWJ1dGVzW2F0dHJpYk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgc3ViQXR0cmliLmluaXQoblZlcnRleCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3ViR2VvLmF0dHJpYnV0ZXMuam9pbnQudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KG5WZXJ0ZXggKiA0KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChuVmVydGV4ID4gMHhmZmZmKSB7XHJcbiAgICAgICAgICAgICAgICBzdWJHZW8uaW5kaWNlcyA9IG5ldyBVaW50MzJBcnJheShidWNrZXQudHJpYW5nbGVzLmxlbmd0aCAqIDMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3ViR2VvLmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoYnVja2V0LnRyaWFuZ2xlcy5sZW5ndGggKiAzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGluZGljZXNPZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICBuVmVydGV4ID0gMDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVmVydGV4MjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdJbmRpY2VzW2ldID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGYgPSAwOyBmIDwgYnVja2V0LnRyaWFuZ2xlcy5sZW5ndGg7IGYrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRyaWFuZ2xlID0gYnVja2V0LnRyaWFuZ2xlc1tmXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpZHggPSB0cmlhbmdsZVtpXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0luZGljZXNbaWR4XSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5kaWNlc1tpZHhdID0gblZlcnRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBhdHRyaWJOYW1lcy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYk5hbWUgPSBhdHRyaWJOYW1lc1thXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YkF0dHJpYiA9IHN1Ykdlby5hdHRyaWJ1dGVzW2F0dHJpYk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBhdHRyaWIuc2l6ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNpemU7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YkF0dHJpYi52YWx1ZVtuVmVydGV4ICogc2l6ZSArIGpdID0gYXR0cmliLnZhbHVlW2lkeCAqIHNpemUgKyBqXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDQ7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpvaW50SWR4ID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5qb2ludC52YWx1ZVtpZHggKiA0ICsgal07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gblZlcnRleCAqIDQgKyBqO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpvaW50SWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJHZW8uYXR0cmlidXRlcy5qb2ludC52YWx1ZVtvZmZzZXRdID0gam9pbnRSZXZlcnNlTWFwW2pvaW50SWR4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ykdlby5hdHRyaWJ1dGVzLmpvaW50LnZhbHVlW29mZnNldF0gPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuVmVydGV4Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHN1Ykdlby5pbmRpY2VzW2luZGljZXNPZmZzZXQrK10gPSBuZXdJbmRpY2VzW2lkeF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3ViR2VvLnVwZGF0ZUJvdW5kaW5nQm94KCk7XHJcblxyXG4gICAgICAgICAgICByb290LmFkZChzdWJNZXNoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gbWVzaC5jaGlsZHJlbigpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcm9vdC5hZGQoY2hpbGRyZW5baV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb290LnBvc2l0aW9uLmNvcHkobWVzaC5wb3NpdGlvbik7XHJcbiAgICAgICAgcm9vdC5yb3RhdGlvbi5jb3B5KG1lc2gucm90YXRpb24pO1xyXG4gICAgICAgIHJvb3Quc2NhbGUuY29weShtZXNoLnNjYWxlKTtcclxuXHJcbiAgICAgICAgaWYgKGluUGxhY2UpIHtcclxuICAgICAgICAgICAgaWYgKG1lc2guZ2V0UGFyZW50KCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBtZXNoLmdldFBhcmVudCgpO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50LnJlbW92ZShtZXNoKTtcclxuICAgICAgICAgICAgICAgIHBhcmVudC5hZGQocm9vdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJvb3Q7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBtZXNoVXRpbDtcclxuIiwiaW1wb3J0IHV0aWwgZnJvbSAnLi4vY29yZS91dGlsJztcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5cclxudmFyIE1FVEEgPSB7XHJcbiAgICB2ZXJzaW9uOiAxLjAsXHJcbiAgICB0eXBlOiAnR2VvbWV0cnknLFxyXG4gICAgZ2VuZXJhdG9yOiAndXRpbC50cmFuc2ZlcmFibGUudG9PYmplY3QnXHJcbn07XHJcblxyXG4vKipcclxuICogQGFsaWFzIGNsYXkudXRpbC50cmFuc2ZlcmFibGVcclxuICovXHJcbnZhciB0cmFuc2ZlcmFibGVVdGlsID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGdlb21ldHJ5IHRvIGEgb2JqZWN0IGNvbnRhaW5pbmcgdHJhbnNmZXJhYmxlIGRhdGFcclxuICAgICAqIEBwYXJhbSB7R2VvbWV0cnl9IGdlb21ldHJ5IGdlb21ldHJ5XHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHNoYWxsb3cgd2hldGhlciBzaGFsbG93IGNvcHlcclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IHsgZGF0YSA6IGRhdGEsIGJ1ZmZlcnMgOiBidWZmZXJzIH0sIGJ1ZmZlcnMgaXMgdGhlIHRyYW5zZmVyYWJsZSBsaXN0XHJcbiAgICAgKi9cclxuICAgIHRvT2JqZWN0IDogZnVuY3Rpb24gKGdlb21ldHJ5LCBzaGFsbG93KSB7XHJcbiAgICAgICAgaWYgKCFnZW9tZXRyeSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRhdGEgPSB7XHJcbiAgICAgICAgICAgIG1ldGFkYXRhIDogdXRpbC5leHRlbmQoe30sIE1FVEEpXHJcbiAgICAgICAgfTtcclxuICAgICAgICAvL3RyYW5zZmVyYWJsZSBidWZmZXJzXHJcbiAgICAgICAgdmFyIGJ1ZmZlcnMgPSBbXTtcclxuXHJcbiAgICAgICAgLy9keW5hbWljXHJcbiAgICAgICAgZGF0YS5keW5hbWljID0gZ2VvbWV0cnkuZHluYW1pYztcclxuXHJcbiAgICAgICAgLy9ib3VuZGluZyBib3hcclxuICAgICAgICBpZiAoZ2VvbWV0cnkuYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgZGF0YS5ib3VuZGluZ0JveCA9IHtcclxuICAgICAgICAgICAgICAgIG1pbiA6IGdlb21ldHJ5LmJvdW5kaW5nQm94Lm1pbi50b0FycmF5KCksXHJcbiAgICAgICAgICAgICAgICBtYXggOiBnZW9tZXRyeS5ib3VuZGluZ0JveC5tYXgudG9BcnJheSgpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2luZGljZXNcclxuICAgICAgICBpZiAoZ2VvbWV0cnkuaW5kaWNlcyAmJiBnZW9tZXRyeS5pbmRpY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZGF0YS5pbmRpY2VzID0gY29weUlmTmVjZXNzYXJ5KGdlb21ldHJ5LmluZGljZXMsIHNoYWxsb3cpO1xyXG4gICAgICAgICAgICBidWZmZXJzLnB1c2goZGF0YS5pbmRpY2VzLmJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2F0dHJpYnV0ZXNcclxuICAgICAgICBkYXRhLmF0dHJpYnV0ZXMgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIGdlb21ldHJ5LmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgaWYgKGdlb21ldHJ5LmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkocCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlc1twXTtcclxuICAgICAgICAgICAgICAgIC8vaWdub3JlIGVtcHR5IGF0dHJpYnV0ZXNcclxuICAgICAgICAgICAgICAgIGlmIChhdHRyICYmIGF0dHIudmFsdWUgJiYgYXR0ci52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0ciA9IGRhdGEuYXR0cmlidXRlc1twXSA9IGNvcHlBdHRyaWJ1dGUoYXR0ciwgc2hhbGxvdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVycy5wdXNoKGF0dHIudmFsdWUuYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZGF0YSA6IGRhdGEsXHJcbiAgICAgICAgICAgIGJ1ZmZlcnMgOiBidWZmZXJzXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXByb2R1Y2UgYSBnZW9tZXRyeSBmcm9tIG9iamVjdCBnZW5lcmF0ZWQgYnkgdG9PYmplY3RcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb2JqZWN0IGdlbmVyYXRlZCBieSB0b09iamVjdFxyXG4gICAgICogQHJldHVybnMge0dlb21ldHJ5fSBnZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICB0b0dlb21ldHJ5IDogZnVuY3Rpb24gKG9iamVjdCkge1xyXG4gICAgICAgIGlmICghb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2JqZWN0LmRhdGEgJiYgb2JqZWN0LmJ1ZmZlcnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zZmVyYWJsZVV0aWwudG9HZW9tZXRyeShvYmplY3QuZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghb2JqZWN0Lm1ldGFkYXRhIHx8IG9iamVjdC5tZXRhZGF0YS5nZW5lcmF0b3IgIT09IE1FVEEuZ2VuZXJhdG9yKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignW3V0aWwudHJhbnNmZXJhYmxlLnRvR2VvbWV0cnldIHRoZSBvYmplY3QgaXMgbm90IGdlbmVyYXRlZCBieSB1dGlsLnRyYW5zZmVyYWJsZS4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vYmFzaWMgb3B0aW9uc1xyXG4gICAgICAgIHZhciBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICBkeW5hbWljIDogb2JqZWN0LmR5bmFtaWMsXHJcbiAgICAgICAgICAgIGluZGljZXMgOiBvYmplY3QuaW5kaWNlc1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChvYmplY3QuYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgdmFyIG1pbiA9IG5ldyBWZWN0b3IzKCkuc2V0QXJyYXkob2JqZWN0LmJvdW5kaW5nQm94Lm1pbik7XHJcbiAgICAgICAgICAgIHZhciBtYXggPSBuZXcgVmVjdG9yMygpLnNldEFycmF5KG9iamVjdC5ib3VuZGluZ0JveC5tYXgpO1xyXG4gICAgICAgICAgICBvcHRpb25zLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KG1pbiwgbWF4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBnZW9tZXRyeSA9IG5ldyBHZW9tZXRyeShvcHRpb25zKTtcclxuXHJcbiAgICAgICAgLy9hdHRyaWJ1dGVzXHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBvYmplY3QuYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICBpZiAob2JqZWN0LmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkocCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyID0gb2JqZWN0LmF0dHJpYnV0ZXNbcF07XHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW3BdID0gbmV3IEdlb21ldHJ5LkF0dHJpYnV0ZShhdHRyLm5hbWUsIGF0dHIudHlwZSwgYXR0ci5zaXplLCBhdHRyLnNlbWFudGljKTtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbcF0udmFsdWUgPSBhdHRyLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZ2VvbWV0cnk7XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiBjb3B5QXR0cmlidXRlKGF0dHIsIHNoYWxsb3cpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmFtZSA6IGF0dHIubmFtZSxcclxuICAgICAgICB0eXBlIDogYXR0ci50eXBlLFxyXG4gICAgICAgIHNpemUgOiBhdHRyLnNpemUsXHJcbiAgICAgICAgc2VtYW50aWMgOiBhdHRyLnNlbWFudGljLFxyXG4gICAgICAgIHZhbHVlIDogY29weUlmTmVjZXNzYXJ5KGF0dHIudmFsdWUsIHNoYWxsb3cpXHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb3B5SWZOZWNlc3NhcnkoYXJyLCBzaGFsbG93KSB7XHJcbiAgICBpZiAoIXNoYWxsb3cpIHtcclxuICAgICAgICByZXR1cm4gbmV3IGFyci5jb25zdHJ1Y3RvcihhcnIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB0cmFuc2ZlcmFibGVVdGlsO1xyXG4iLCIvKipcclxuICogQG5hbWUgY2xheS52ZXJzaW9uXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCAnMS4yLjMnO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS52ci5kaXNvcnRlci5vdXRwdXQudmVydGV4XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQ6IFRFWENPT1JEXzA7XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb246IFBPU0lUSU9OO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2X1RleGNvb3JkID0gdGV4Y29vcmQ7XFxuIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbi54eSwgMC41LCAxLjApO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnZyLmRpc29ydGVyLm91dHB1dC5mcmFnbWVudFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudm9pZCBtYWluKClcXG57XFxuIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG59XFxuQGVuZFwiO1xyXG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xldnIvd2VidnItcG9seWZpbGwvYmxvYi9tYXN0ZXIvc3JjL2NhcmRib2FyZC1kaXN0b3J0ZXIuanNcclxuXHJcbi8vIFVzZSB3ZWJ2ciBtYXkgaGF2ZSBzY2FsZSBwcm9ibGVtLlxyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xldnIvd2VidnItcG9seWZpbGwvaXNzdWVzLzE0MFxyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xldnIvd2VidnItcG9seWZpbGwvc2VhcmNoP3E9U0NBTEUmdHlwZT1Jc3N1ZXMmdXRmOD0lRTIlOUMlOTNcclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZXZyL3dlYnZyLXBvbHlmaWxsL2lzc3Vlcy8xNDdcclxuXHJcblxyXG5pbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuXHJcbmltcG9ydCBvdXRwdXRFc3NsIGZyb20gJy4vb3V0cHV0Lmdsc2wuanMnO1xyXG5cclxuU2hhZGVyLmltcG9ydChvdXRwdXRFc3NsKTtcclxuXHJcbmZ1bmN0aW9uIGxlcnAgKGEsIGIsIHQpIHtcclxuICAgIHJldHVybiBhICogKDEgLSB0KSArIGIgKiB0O1xyXG59XHJcblxyXG52YXIgQ2FyZGJvYXJkRGlzdG9ydGVyID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuXHJcbiAgICAgICAgY2xlYXJDb2xvcjogWzAsIDAsIDAsIDFdLFxyXG5cclxuICAgICAgICBfbWVzaDogbmV3IE1lc2goe1xyXG4gICAgICAgICAgICBnZW9tZXRyeTogbmV3IEdlb21ldHJ5KHtcclxuICAgICAgICAgICAgICAgIGR5bmFtaWM6IHRydWVcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIGN1bGxpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICBtYXRlcmlhbDogbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgIC8vIEZJWE1FIFdoeSBkaXNhYmxlIGRlcHRoTWFzayB3aWxsIGJlIHdyb25nXHJcbiAgICAgICAgICAgICAgICAvLyBkZXB0aE1hc2s6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgZGVwdGhUZXN0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVydGV4OiBTaGFkZXIuc291cmNlKCdjbGF5LnZyLmRpc29ydGVyLm91dHB1dC52ZXJ0ZXgnKSxcclxuICAgICAgICAgICAgICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS52ci5kaXNvcnRlci5vdXRwdXQuZnJhZ21lbnQnKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KSxcclxuICAgICAgICBfZmFrZUNhbWVyYTogbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKClcclxuICAgIH07XHJcbn0sIHtcclxuXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc291cmNlVGV4dHVyZSkge1xyXG4gICAgICAgIHZhciBjbGVhckNvbG9yID0gdGhpcy5jbGVhckNvbG9yO1xyXG4gICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIGdsLmNsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7XHJcbiAgICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XHJcblxyXG4gICAgICAgIGdsLmRpc2FibGUoZ2wuQkxFTkQpO1xyXG5cclxuICAgICAgICB0aGlzLl9tZXNoLm1hdGVyaWFsLnNldCgndGV4dHVyZScsIHNvdXJjZVRleHR1cmUpO1xyXG5cclxuICAgICAgICAvLyBGdWxsIHNpemU/XHJcbiAgICAgICAgcmVuZGVyZXIuc2F2ZVZpZXdwb3J0KCk7XHJcbiAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQoMCwgMCwgcmVuZGVyZXIuZ2V0V2lkdGgoKSwgcmVuZGVyZXIuZ2V0SGVpZ2h0KCkpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoW3RoaXMuX21lc2hdLCB0aGlzLl9mYWtlQ2FtZXJhKTtcclxuICAgICAgICByZW5kZXJlci5yZXN0b3JlVmlld3BvcnQoKTtcclxuICAgICAgICAvLyB0aGlzLl9tZXNoLm1hdGVyaWFsLnNoYWRlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAvLyB0aGlzLl9tZXNoLm1hdGVyaWFsLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgIC8vIHRoaXMuX21lc2gucmVuZGVyKHJlbmRlcmVyLmdsKTtcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlRnJvbVZSRGlzcGxheTogZnVuY3Rpb24gKHZyRGlzcGxheSkge1xyXG5cclxuICAgICAgICAvLyBGSVhNRVxyXG4gICAgICAgIGlmICh2ckRpc3BsYXkuZGV2aWNlSW5mb18pIHtcclxuICAgICAgICAgICAgLy8gSGFyZGNvZGVkIG1lc2ggc2l6ZVxyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVNZXNoKDIwLCAyMCwgdnJEaXNwbGF5LmRldmljZUluZm9fKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignQ2FudCBnZXQgdnJEaXNwbGF5LmRldmljZUluZm9fLCBzZWVtcyBjb2RlIGNoYW5nZWQnKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVNZXNoOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCwgZGV2aWNlSW5mbykge1xyXG5cclxuICAgICAgICB2YXIgcG9zaXRpb25BdHRyID0gdGhpcy5fbWVzaC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciB0ZXhjb29yZEF0dHIgPSB0aGlzLl9tZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMudGV4Y29vcmQwO1xyXG4gICAgICAgIHBvc2l0aW9uQXR0ci5pbml0KDIgKiB3aWR0aCAqIGhlaWdodCk7XHJcbiAgICAgICAgdGV4Y29vcmRBdHRyLmluaXQoMiAqIHdpZHRoICogaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgdmFyIGxlbnNGcnVzdHVtID0gZGV2aWNlSW5mby5nZXRMZWZ0RXllVmlzaWJsZVRhbkFuZ2xlcygpO1xyXG4gICAgICAgIHZhciBub0xlbnNGcnVzdHVtID0gZGV2aWNlSW5mby5nZXRMZWZ0RXllTm9MZW5zVGFuQW5nbGVzKCk7XHJcbiAgICAgICAgdmFyIHZpZXdwb3J0ID0gZGV2aWNlSW5mby5nZXRMZWZ0RXllVmlzaWJsZVNjcmVlblJlY3Qobm9MZW5zRnJ1c3R1bSk7XHJcbiAgICAgICAgdmFyIHZpZHggPSAwO1xyXG5cclxuICAgICAgICB2YXIgcG9zID0gW107XHJcbiAgICAgICAgdmFyIHV2ID0gW107XHJcblxyXG4gICAgICAgIC8vIFZlcnRpY2VzXHJcbiAgICAgICAgZm9yICh2YXIgZSA9IDA7IGUgPCAyOyBlKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBoZWlnaHQ7IGorKykge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3aWR0aDsgaSsrLCB2aWR4KyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdSA9IGkgLyAod2lkdGggLSAxKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IGogLyAoaGVpZ2h0IC0gMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEdyaWQgcG9pbnRzIHJlZ3VsYXJseSBzcGFjZWQgaW4gU3RyZW9TY3JlZW4sIGFuZCBiYXJyZWwgZGlzdG9ydGVkIGluXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG1lc2guXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSB1O1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IGxlcnAobGVuc0ZydXN0dW1bMF0sIGxlbnNGcnVzdHVtWzJdLCB1KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IGxlcnAobGVuc0ZydXN0dW1bM10sIGxlbnNGcnVzdHVtWzFdLCB2KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgciA9IGRldmljZUluZm8uZGlzdG9ydGlvbi5kaXN0b3J0SW52ZXJzZShkKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IHggKiByIC8gZDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcSA9IHkgKiByIC8gZDtcclxuICAgICAgICAgICAgICAgICAgICB1ID0gKHAgLSBub0xlbnNGcnVzdHVtWzBdKSAvIChub0xlbnNGcnVzdHVtWzJdIC0gbm9MZW5zRnJ1c3R1bVswXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9IChxIC0gbm9MZW5zRnJ1c3R1bVszXSkgLyAobm9MZW5zRnJ1c3R1bVsxXSAtIG5vTGVuc0ZydXN0dW1bM10pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHUsdiB0byBtZXNoIHNjcmVlbiBjb29yZGluYXRlcy5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgYXNwZWN0ID0gZGV2aWNlSW5mby5kZXZpY2Uud2lkdGhNZXRlcnMgLyBkZXZpY2VJbmZvLmRldmljZS5oZWlnaHRNZXRlcnM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgb3JpZ2luYWwgVW5pdHkgcGx1Z2luIG11bHRpcGxpZWQgVSBieSB0aGUgYXNwZWN0IHJhdGlvXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGRpZG4ndCBtdWx0aXBseSBlaXRoZXIgdmFsdWUgYnkgMiwgYnV0IHRoYXQgc2VlbXMgdG8gZ2V0IGl0XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVhbGx5IGNsb3NlIHRvIGNvcnJlY3QgbG9va2luZyBmb3IgbWUuIEkgaGF0ZSB0aGlzIGtpbmQgb2YgXCJEb24ndFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGtub3cgd2h5IGl0IHdvcmtzXCIgY29kZSB0aG91Z2gsIGFuZCB3b2xkIGxvdmUgYSBtb3JlIGxvZ2ljYWxcclxuICAgICAgICAgICAgICAgICAgICAvLyBleHBsYW5hdGlvbiBvZiB3aGF0IG5lZWRzIHRvIGhhcHBlbiBoZXJlLlxyXG4gICAgICAgICAgICAgICAgICAgIHUgPSAodmlld3BvcnQueCArIHUgKiB2aWV3cG9ydC53aWR0aCAtIDAuNSkgKiAyLjA7IC8vKiBhc3BlY3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9ICh2aWV3cG9ydC55ICsgdiAqIHZpZXdwb3J0LmhlaWdodCAtIDAuNSkgKiAyLjA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHBvc1swXSA9IHU7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zWzFdID0gdjtcclxuICAgICAgICAgICAgICAgICAgICBwb3NbMl0gPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB1dlswXSA9IHMgKiAwLjUgKyBlICogMC41O1xyXG4gICAgICAgICAgICAgICAgICAgIHV2WzFdID0gdDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25BdHRyLnNldCh2aWR4LCBwb3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGNvb3JkQXR0ci5zZXQodmlkeCwgdXYpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgdyA9IGxlbnNGcnVzdHVtWzJdIC0gbGVuc0ZydXN0dW1bMF07XHJcbiAgICAgICAgICAgIGxlbnNGcnVzdHVtWzBdID0gLSh3ICsgbGVuc0ZydXN0dW1bMF0pO1xyXG4gICAgICAgICAgICBsZW5zRnJ1c3R1bVsyXSA9IHcgLSBsZW5zRnJ1c3R1bVsyXTtcclxuICAgICAgICAgICAgdyA9IG5vTGVuc0ZydXN0dW1bMl0gLSBub0xlbnNGcnVzdHVtWzBdO1xyXG4gICAgICAgICAgICBub0xlbnNGcnVzdHVtWzBdID0gLSh3ICsgbm9MZW5zRnJ1c3R1bVswXSk7XHJcbiAgICAgICAgICAgIG5vTGVuc0ZydXN0dW1bMl0gPSB3IC0gbm9MZW5zRnJ1c3R1bVsyXTtcclxuICAgICAgICAgICAgdmlld3BvcnQueCA9IDEgLSAodmlld3BvcnQueCArIHZpZXdwb3J0LndpZHRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEluZGljZXNcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSgyICogKHdpZHRoIC0gMSkgKiAoaGVpZ2h0IC0gMSkgKiA2KTtcclxuICAgICAgICB2YXIgaGFsZndpZHRoID0gd2lkdGggLyAyO1xyXG4gICAgICAgIHZhciBoYWxmaGVpZ2h0ID0gaGVpZ2h0IC8gMjtcclxuICAgICAgICB2YXIgdmlkeCA9IDA7XHJcbiAgICAgICAgdmFyIGlpZHggPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgMjsgZSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaGVpZ2h0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd2lkdGg7IGkrKywgdmlkeCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgaiA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQnVpbGQgYSBxdWFkLiAgTG93ZXIgcmlnaHQgYW5kIHVwcGVyIGxlZnQgcXVhZHJhbnRzIGhhdmUgcXVhZHMgd2l0aFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0cmlhbmdsZSBkaWFnb25hbCBmbGlwcGVkIHRvIGdldCB0aGUgdmlnbmV0dGUgdG8gaW50ZXJwb2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb3JyZWN0bHkuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChpIDw9IGhhbGZ3aWR0aCkgPT0gKGogPD0gaGFsZmhlaWdodCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVhZCBkaWFnb25hbCBsb3dlciBsZWZ0IHRvIHVwcGVyIHJpZ2h0LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSB3aWR0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVhZCBkaWFnb25hbCB1cHBlciBsZWZ0IHRvIGxvd2VyIHJpZ2h0LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fbWVzaC5nZW9tZXRyeS5pbmRpY2VzID0gaW5kaWNlcztcclxuXHJcbiAgICAgICAgdGhpcy5fbWVzaC5nZW9tZXRyeS5kaXJ0eSgpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENhcmRib2FyZERpc3RvcnRlcjtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vTm9kZSc7XHJcbmltcG9ydCBDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcclxuXHJcbnZhciB0bXBQcm9qZWN0aW9uTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbnZhciBTdGVyZW9DYW1lcmEgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG5cclxuICAgICAgICBhc3BlY3Q6IDAuNSxcclxuXHJcbiAgICAgICAgX2xlZnRDYW1lcmE6IG5ldyBDYW1lcmEoKSxcclxuXHJcbiAgICAgICAgX3JpZ2h0Q2FtZXJhOiBuZXcgQ2FtZXJhKCksXHJcblxyXG4gICAgICAgIF9leWVMZWZ0OiBuZXcgTWF0cml4NCgpLFxyXG4gICAgICAgIF9leWVSaWdodDogbmV3IE1hdHJpeDQoKSxcclxuXHJcbiAgICAgICAgX2ZyYW1lRGF0YTogbnVsbFxyXG4gICAgfTtcclxufSwge1xyXG5cclxuICAgIHVwZGF0ZUZyb21DYW1lcmE6IGZ1bmN0aW9uIChjYW1lcmEsIGZvY3VzLCB6b29tLCBleWVTZXApIHtcclxuICAgICAgICBpZiAoY2FtZXJhLnRyYW5zZm9ybU5lZWRzVXBkYXRlKCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdOb2RlIHRyYW5zZm9ybSBpcyBub3QgdXBkYXRlZCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9jdXMgPSBmb2N1cyA9PSBudWxsID8gMTAgOiBmb2N1cztcclxuICAgICAgICB6b29tID0gem9vbSA9PSBudWxsID8gMSA6IHpvb207XHJcbiAgICAgICAgZXllU2VwID0gZXllU2VwID09IG51bGwgPyAwLjA2NCA6IGV5ZVNlcDtcclxuXHJcbiAgICAgICAgdmFyIGZvdiA9IGNhbWVyYS5mb3Y7XHJcbiAgICAgICAgdmFyIGFzcGVjdCA9IGNhbWVyYS5hc3BlY3QgKiB0aGlzLmFzcGVjdDtcclxuICAgICAgICB2YXIgbmVhciA9IGNhbWVyYS5uZWFyO1xyXG5cclxuICAgICAgICAvLyBPZmYtYXhpcyBzdGVyZW9zY29waWMgZWZmZWN0IGJhc2VkIG9uXHJcbiAgICAgICAgLy8gaHR0cDovL3BhdWxib3Vya2UubmV0L3N0ZXJlb2dyYXBoaWNzL3N0ZXJlb3JlbmRlci9cclxuXHJcbiAgICAgICAgdG1wUHJvamVjdGlvbk1hdHJpeC5jb3B5KGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICB2YXIgZXllU2VwID0gZXllU2VwIC8gMjtcclxuICAgICAgICB2YXIgZXllU2VwT25Qcm9qZWN0aW9uID0gZXllU2VwICogbmVhciAvIGZvY3VzO1xyXG4gICAgICAgIHZhciB5bWF4ID0gKG5lYXIgKiBNYXRoLnRhbihNYXRoLlBJIC8gMTgwICogZm92ICogMC41ICkgKSAvIHpvb207XHJcbiAgICAgICAgdmFyIHhtaW4sIHhtYXg7XHJcblxyXG4gICAgICAgIC8vIHRyYW5zbGF0ZSB4T2Zmc2V0XHJcbiAgICAgICAgdGhpcy5fZXllTGVmdC5hcnJheVsxMl0gPSAtIGV5ZVNlcDtcclxuICAgICAgICB0aGlzLl9leWVSaWdodC5hcnJheVsxMl0gPSBleWVTZXA7XHJcblxyXG4gICAgICAgIC8vIGZvciBsZWZ0IGV5ZVxyXG4gICAgICAgIHhtaW4gPSAtIHltYXggKiBhc3BlY3QgKyBleWVTZXBPblByb2plY3Rpb247XHJcbiAgICAgICAgeG1heCA9IHltYXggKiBhc3BlY3QgKyBleWVTZXBPblByb2plY3Rpb247XHJcblxyXG4gICAgICAgIHRtcFByb2plY3Rpb25NYXRyaXguYXJyYXlbMF0gPSAyICogbmVhciAvICh4bWF4IC0geG1pbik7XHJcbiAgICAgICAgdG1wUHJvamVjdGlvbk1hdHJpeC5hcnJheVs4XSA9ICh4bWF4ICsgeG1pbiApIC8gKHhtYXggLSB4bWluKTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGVmdENhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmNvcHkodG1wUHJvamVjdGlvbk1hdHJpeCk7XHJcblxyXG4gICAgICAgIC8vIGZvciByaWdodCBleWVcclxuICAgICAgICB4bWluID0gLSB5bWF4ICogYXNwZWN0IC0gZXllU2VwT25Qcm9qZWN0aW9uO1xyXG4gICAgICAgIHhtYXggPSB5bWF4ICogYXNwZWN0IC0gZXllU2VwT25Qcm9qZWN0aW9uO1xyXG5cclxuICAgICAgICB0bXBQcm9qZWN0aW9uTWF0cml4LmFycmF5WzBdID0gMiAqIG5lYXIgLyAoeG1heCAtIHhtaW4pO1xyXG4gICAgICAgIHRtcFByb2plY3Rpb25NYXRyaXguYXJyYXlbOF0gPSAoeG1heCArIHhtaW4gKSAvICh4bWF4IC0geG1pbik7XHJcblxyXG4gICAgICAgIHRoaXMuX3JpZ2h0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXguY29weSh0bXBQcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGVmdENhbWVyYS53b3JsZFRyYW5zZm9ybVxyXG4gICAgICAgICAgICAuY29weShjYW1lcmEud29ybGRUcmFuc2Zvcm0pXHJcbiAgICAgICAgICAgIC5tdWx0aXBseSh0aGlzLl9leWVMZWZ0KTtcclxuXHJcbiAgICAgICAgdGhpcy5fcmlnaHRDYW1lcmEud29ybGRUcmFuc2Zvcm1cclxuICAgICAgICAgICAgLmNvcHkoY2FtZXJhLndvcmxkVHJhbnNmb3JtKVxyXG4gICAgICAgICAgICAubXVsdGlwbHkodGhpcy5fZXllUmlnaHQpO1xyXG5cclxuICAgICAgICB0aGlzLl9sZWZ0Q2FtZXJhLmRlY29tcG9zZVdvcmxkVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgdGhpcy5fbGVmdENhbWVyYS5kZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JpZ2h0Q2FtZXJhLmRlY29tcG9zZVdvcmxkVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgdGhpcy5fcmlnaHRDYW1lcmEuZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVGcm9tVlJEaXNwbGF5OiBmdW5jdGlvbiAodnJEaXNwbGF5LCBwYXJlbnROb2RlKSB7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgVlJGcmFtZURhdGEgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBmcmFtZURhdGEgPSB0aGlzLl9mcmFtZURhdGEgfHwgKHRoaXMuX2ZyYW1lRGF0YSA9IG5ldyBWUkZyYW1lRGF0YSgpKTtcclxuICAgICAgICB2ckRpc3BsYXkuZ2V0RnJhbWVEYXRhKGZyYW1lRGF0YSk7XHJcbiAgICAgICAgdmFyIGxlZnRDYW1lcmEgPSB0aGlzLl9sZWZ0Q2FtZXJhO1xyXG4gICAgICAgIHZhciByaWdodENhbWVyYSA9IHRoaXMuX3JpZ2h0Q2FtZXJhO1xyXG5cclxuICAgICAgICBsZWZ0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXguc2V0QXJyYXkoZnJhbWVEYXRhLmxlZnRQcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICBsZWZ0Q2FtZXJhLmRlY29tcG9zZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICAgICAgICBsZWZ0Q2FtZXJhLnZpZXdNYXRyaXguc2V0QXJyYXkoZnJhbWVEYXRhLmxlZnRWaWV3TWF0cml4KTtcclxuICAgICAgICBsZWZ0Q2FtZXJhLnNldFZpZXdNYXRyaXgobGVmdENhbWVyYS52aWV3TWF0cml4KTtcclxuXHJcbiAgICAgICAgcmlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5zZXRBcnJheShmcmFtZURhdGEucmlnaHRQcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICByaWdodENhbWVyYS5kZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgcmlnaHRDYW1lcmEudmlld01hdHJpeC5zZXRBcnJheShmcmFtZURhdGEucmlnaHRWaWV3TWF0cml4KTtcclxuICAgICAgICByaWdodENhbWVyYS5zZXRWaWV3TWF0cml4KHJpZ2h0Q2FtZXJhLnZpZXdNYXRyaXgpO1xyXG5cclxuICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLndvcmxkVHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlLnRyYW5zZm9ybU5lZWRzVXBkYXRlKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTm9kZSB0cmFuc2Zvcm0gaXMgbm90IHVwZGF0ZWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZWZ0Q2FtZXJhLndvcmxkVHJhbnNmb3JtLm11bHRpcGx5TGVmdChwYXJlbnROb2RlLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgbGVmdENhbWVyYS5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgICAgICAgICByaWdodENhbWVyYS53b3JsZFRyYW5zZm9ybS5tdWx0aXBseUxlZnQocGFyZW50Tm9kZS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIHJpZ2h0Q2FtZXJhLmRlY29tcG9zZVdvcmxkVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBnZXRMZWZ0Q2FtZXJhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlZnRDYW1lcmE7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFJpZ2h0Q2FtZXJhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JpZ2h0Q2FtZXJhO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFN0ZXJlb0NhbWVyYTtcclxuIiwiLyoqIEBuYW1lc3BhY2UgY2xheSAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5Lm1hdGggKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5hbmltYXRpb24gKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5hc3luYyAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LmNhbWVyYSAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LmNvbXBvc2l0b3IgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5jb3JlICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkuZ2VvbWV0cnkgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5oZWxwZXIgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5saWdodCAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LmxvYWRlciAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LnBhcnRpY2xlICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkucGx1Z2luICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkucHJlUGFzcyAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LnNoYWRlciAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LnRleHR1cmUgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS51dGlsICovXHJcblxyXG5pbXBvcnQgQW5pbWF0b3IkMCBmcm9tICcuL2FuaW1hdGlvbi9BbmltYXRvcic7XHJcbmltcG9ydCBCbGVuZDFEQ2xpcCQxIGZyb20gJy4vYW5pbWF0aW9uL0JsZW5kMURDbGlwJztcclxuaW1wb3J0IEJsZW5kMkRDbGlwJDIgZnJvbSAnLi9hbmltYXRpb24vQmxlbmQyRENsaXAnO1xyXG5pbXBvcnQgQ2xpcCQzIGZyb20gJy4vYW5pbWF0aW9uL0NsaXAnO1xyXG5pbXBvcnQgZWFzaW5nJDQgZnJvbSAnLi9hbmltYXRpb24vZWFzaW5nJztcclxuaW1wb3J0IFNhbXBsZXJUcmFjayQ1IGZyb20gJy4vYW5pbWF0aW9uL1NhbXBsZXJUcmFjayc7XHJcbmltcG9ydCBUaW1lbGluZSQ2IGZyb20gJy4vYW5pbWF0aW9uL1RpbWVsaW5lJztcclxuaW1wb3J0IFRyYWNrQ2xpcCQ3IGZyb20gJy4vYW5pbWF0aW9uL1RyYWNrQ2xpcCc7XHJcbmltcG9ydCBhcHBsaWNhdGlvbiQ4IGZyb20gJy4vYXBwbGljYXRpb24nO1xyXG5pbXBvcnQgVGFzayQ5IGZyb20gJy4vYXN5bmMvVGFzayc7XHJcbmltcG9ydCBUYXNrR3JvdXAkMTAgZnJvbSAnLi9hc3luYy9UYXNrR3JvdXAnO1xyXG5pbXBvcnQgQ2FtZXJhJDExIGZyb20gJy4vQ2FtZXJhJztcclxuaW1wb3J0IE9ydGhvZ3JhcGhpYyQxMiBmcm9tICcuL2NhbWVyYS9PcnRob2dyYXBoaWMnO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmUkMTMgZnJvbSAnLi9jYW1lcmEvUGVyc3BlY3RpdmUnO1xyXG5pbXBvcnQgQ29tcG9zaXRvciQxNCBmcm9tICcuL2NvbXBvc2l0b3IvQ29tcG9zaXRvcic7XHJcbmltcG9ydCBDb21wb3NpdG9yTm9kZSQxNSBmcm9tICcuL2NvbXBvc2l0b3IvQ29tcG9zaXRvck5vZGUnO1xyXG5pbXBvcnQgY3JlYXRlQ29tcG9zaXRvciQxNiBmcm9tICcuL2NvbXBvc2l0b3IvY3JlYXRlQ29tcG9zaXRvcic7XHJcbmltcG9ydCBGaWx0ZXJOb2RlJDE3IGZyb20gJy4vY29tcG9zaXRvci9GaWx0ZXJOb2RlJztcclxuaW1wb3J0IEdyYXBoJDE4IGZyb20gJy4vY29tcG9zaXRvci9HcmFwaCc7XHJcbmltcG9ydCBQYXNzJDE5IGZyb20gJy4vY29tcG9zaXRvci9QYXNzJztcclxuaW1wb3J0IFNjZW5lTm9kZSQyMCBmcm9tICcuL2NvbXBvc2l0b3IvU2NlbmVOb2RlJztcclxuaW1wb3J0IFRleHR1cmVOb2RlJDIxIGZyb20gJy4vY29tcG9zaXRvci9UZXh0dXJlTm9kZSc7XHJcbmltcG9ydCBUZXh0dXJlUG9vbCQyMiBmcm9tICcuL2NvbXBvc2l0b3IvVGV4dHVyZVBvb2wnO1xyXG5pbXBvcnQgQmFzZSQyMyBmcm9tICcuL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBDYWNoZSQyNCBmcm9tICcuL2NvcmUvQ2FjaGUnO1xyXG5pbXBvcnQgY29sb3IkMjUgZnJvbSAnLi9jb3JlL2NvbG9yJztcclxuaW1wb3J0IGdsZW51bSQyNiBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IEdMSW5mbyQyNyBmcm9tICcuL2NvcmUvR0xJbmZvJztcclxuaW1wb3J0IExpbmtlZExpc3QkMjggZnJvbSAnLi9jb3JlL0xpbmtlZExpc3QnO1xyXG5pbXBvcnQgTFJVJDI5IGZyb20gJy4vY29yZS9MUlUnO1xyXG5pbXBvcnQgZXh0ZW5kJDMwIGZyb20gJy4vY29yZS9taXhpbi9leHRlbmQnO1xyXG5pbXBvcnQgbm90aWZpZXIkMzEgZnJvbSAnLi9jb3JlL21peGluL25vdGlmaWVyJztcclxuaW1wb3J0IHJlcXVlc3QkMzIgZnJvbSAnLi9jb3JlL3JlcXVlc3QnO1xyXG5pbXBvcnQgdXRpbCQzMyBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCB2ZW5kb3IkMzQgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCBjcmVhdGVDb21wb3NpdG9yJDM1IGZyb20gJy4vY3JlYXRlQ29tcG9zaXRvcic7XHJcbmltcG9ydCBHQnVmZmVyJDM2IGZyb20gJy4vZGVmZXJyZWQvR0J1ZmZlcic7XHJcbmltcG9ydCBSZW5kZXJlciQzNyBmcm9tICcuL2RlZmVycmVkL1JlbmRlcmVyJztcclxuaW1wb3J0IGdsbWF0cml4JDM4IGZyb20gJy4vZGVwL2dsbWF0cml4JztcclxuaW1wb3J0IEZyYW1lQnVmZmVyJDM5IGZyb20gJy4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgR2VvbWV0cnkkNDAgZnJvbSAnLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBDb25lJDQxIGZyb20gJy4vZ2VvbWV0cnkvQ29uZSc7XHJcbmltcG9ydCBDdWJlJDQyIGZyb20gJy4vZ2VvbWV0cnkvQ3ViZSc7XHJcbmltcG9ydCBDeWxpbmRlciQ0MyBmcm9tICcuL2dlb21ldHJ5L0N5bGluZGVyJztcclxuaW1wb3J0IFBhcmFtZXRyaWNTdXJmYWNlJDQ0IGZyb20gJy4vZ2VvbWV0cnkvUGFyYW1ldHJpY1N1cmZhY2UnO1xyXG5pbXBvcnQgUGxhbmUkNDUgZnJvbSAnLi9nZW9tZXRyeS9QbGFuZSc7XHJcbmltcG9ydCBTcGhlcmUkNDYgZnJvbSAnLi9nZW9tZXRyeS9TcGhlcmUnO1xyXG5pbXBvcnQgR2VvbWV0cnlCYXNlJDQ3IGZyb20gJy4vR2VvbWV0cnlCYXNlJztcclxuaW1wb3J0IEpvaW50JDQ4IGZyb20gJy4vSm9pbnQnO1xyXG5pbXBvcnQgTGlnaHQkNDkgZnJvbSAnLi9MaWdodCc7XHJcbmltcG9ydCBBbWJpZW50JDUwIGZyb20gJy4vbGlnaHQvQW1iaWVudCc7XHJcbmltcG9ydCBBbWJpZW50Q3ViZW1hcCQ1MSBmcm9tICcuL2xpZ2h0L0FtYmllbnRDdWJlbWFwJztcclxuaW1wb3J0IEFtYmllbnRTSCQ1MiBmcm9tICcuL2xpZ2h0L0FtYmllbnRTSCc7XHJcbmltcG9ydCBEaXJlY3Rpb25hbCQ1MyBmcm9tICcuL2xpZ2h0L0RpcmVjdGlvbmFsJztcclxuaW1wb3J0IFBvaW50JDU0IGZyb20gJy4vbGlnaHQvUG9pbnQnO1xyXG5pbXBvcnQgU3BoZXJlJDU1IGZyb20gJy4vbGlnaHQvU3BoZXJlJztcclxuaW1wb3J0IFNwb3QkNTYgZnJvbSAnLi9saWdodC9TcG90JztcclxuaW1wb3J0IFR1YmUkNTcgZnJvbSAnLi9saWdodC9UdWJlJztcclxuaW1wb3J0IEZYJDU4IGZyb20gJy4vbG9hZGVyL0ZYJztcclxuaW1wb3J0IEdMVEYkNTkgZnJvbSAnLi9sb2FkZXIvR0xURic7XHJcbmltcG9ydCBNYXRlcmlhbCQ2MCBmcm9tICcuL01hdGVyaWFsJztcclxuaW1wb3J0IEJvdW5kaW5nQm94JDYxIGZyb20gJy4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCBGcnVzdHVtJDYyIGZyb20gJy4vbWF0aC9GcnVzdHVtJztcclxuaW1wb3J0IE1hdHJpeDIkNjMgZnJvbSAnLi9tYXRoL01hdHJpeDInO1xyXG5pbXBvcnQgTWF0cml4MmQkNjQgZnJvbSAnLi9tYXRoL01hdHJpeDJkJztcclxuaW1wb3J0IE1hdHJpeDMkNjUgZnJvbSAnLi9tYXRoL01hdHJpeDMnO1xyXG5pbXBvcnQgTWF0cml4NCQ2NiBmcm9tICcuL21hdGgvTWF0cml4NCc7XHJcbmltcG9ydCBQbGFuZSQ2NyBmcm9tICcuL21hdGgvUGxhbmUnO1xyXG5pbXBvcnQgUXVhdGVybmlvbiQ2OCBmcm9tICcuL21hdGgvUXVhdGVybmlvbic7XHJcbmltcG9ydCBSYXkkNjkgZnJvbSAnLi9tYXRoL1JheSc7XHJcbmltcG9ydCB1dGlsJDcwIGZyb20gJy4vbWF0aC91dGlsJztcclxuaW1wb3J0IFZhbHVlJDcxIGZyb20gJy4vbWF0aC9WYWx1ZSc7XHJcbmltcG9ydCBWZWN0b3IyJDcyIGZyb20gJy4vbWF0aC9WZWN0b3IyJztcclxuaW1wb3J0IFZlY3RvcjMkNzMgZnJvbSAnLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgVmVjdG9yNCQ3NCBmcm9tICcuL21hdGgvVmVjdG9yNCc7XHJcbmltcG9ydCBNZXNoJDc1IGZyb20gJy4vTWVzaCc7XHJcbmltcG9ydCBOb2RlJDc2IGZyb20gJy4vTm9kZSc7XHJcbmltcG9ydCBFbWl0dGVyJDc3IGZyb20gJy4vcGFydGljbGUvRW1pdHRlcic7XHJcbmltcG9ydCBGaWVsZCQ3OCBmcm9tICcuL3BhcnRpY2xlL0ZpZWxkJztcclxuaW1wb3J0IEZvcmNlRmllbGQkNzkgZnJvbSAnLi9wYXJ0aWNsZS9Gb3JjZUZpZWxkJztcclxuaW1wb3J0IFBhcnRpY2xlJDgwIGZyb20gJy4vcGFydGljbGUvUGFydGljbGUnO1xyXG5pbXBvcnQgUGFydGljbGVSZW5kZXJhYmxlJDgxIGZyb20gJy4vcGFydGljbGUvUGFydGljbGVSZW5kZXJhYmxlJztcclxuaW1wb3J0IFBpeGVsUGlja2luZyQ4MiBmcm9tICcuL3BpY2tpbmcvUGl4ZWxQaWNraW5nJztcclxuaW1wb3J0IFJheVBpY2tpbmckODMgZnJvbSAnLi9waWNraW5nL1JheVBpY2tpbmcnO1xyXG5pbXBvcnQgRnJlZUNvbnRyb2wkODQgZnJvbSAnLi9wbHVnaW4vRnJlZUNvbnRyb2wnO1xyXG5pbXBvcnQgR2FtZXBhZENvbnRyb2wkODUgZnJvbSAnLi9wbHVnaW4vR2FtZXBhZENvbnRyb2wnO1xyXG5pbXBvcnQgR2VzdHVyZU1nciQ4NiBmcm9tICcuL3BsdWdpbi9HZXN0dXJlTWdyJztcclxuaW1wb3J0IEluZmluaXRlUGxhbmUkODcgZnJvbSAnLi9wbHVnaW4vSW5maW5pdGVQbGFuZSc7XHJcbmltcG9ydCBPcmJpdENvbnRyb2wkODggZnJvbSAnLi9wbHVnaW4vT3JiaXRDb250cm9sJztcclxuaW1wb3J0IFNreWJveCQ4OSBmcm9tICcuL3BsdWdpbi9Ta3lib3gnO1xyXG5pbXBvcnQgU2t5ZG9tZSQ5MCBmcm9tICcuL3BsdWdpbi9Ta3lkb21lJztcclxuaW1wb3J0IEVudmlyb25tZW50TWFwJDkxIGZyb20gJy4vcHJlUGFzcy9FbnZpcm9ubWVudE1hcCc7XHJcbmltcG9ydCBTaGFkb3dNYXAkOTIgZnJvbSAnLi9wcmVQYXNzL1NoYWRvd01hcCc7XHJcbmltcG9ydCBSZW5kZXJhYmxlJDkzIGZyb20gJy4vUmVuZGVyYWJsZSc7XHJcbmltcG9ydCBSZW5kZXJlciQ5NCBmcm9tICcuL1JlbmRlcmVyJztcclxuaW1wb3J0IFNjZW5lJDk1IGZyb20gJy4vU2NlbmUnO1xyXG5pbXBvcnQgU2hhZGVyJDk2IGZyb20gJy4vU2hhZGVyJztcclxuaW1wb3J0IGxpYnJhcnkkOTcgZnJvbSAnLi9zaGFkZXIvbGlicmFyeSc7XHJcbmltcG9ydCByZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yJDk4IGZyb20gJy4vc2hhZGVyL3JlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3InO1xyXG5pbXBvcnQgbGlnaHQkOTkgZnJvbSAnLi9zaGFkZXIvc291cmNlL2hlYWRlci9saWdodCc7XHJcbmltcG9ydCBTa2VsZXRvbiQxMDAgZnJvbSAnLi9Ta2VsZXRvbic7XHJcbmltcG9ydCBTdGFuZGFyZE1hdGVyaWFsJDEwMSBmcm9tICcuL1N0YW5kYXJkTWF0ZXJpYWwnO1xyXG5pbXBvcnQgU3RhdGljR2VvbWV0cnkkMTAyIGZyb20gJy4vU3RhdGljR2VvbWV0cnknO1xyXG5pbXBvcnQgVGV4dHVyZSQxMDMgZnJvbSAnLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmUyRCQxMDQgZnJvbSAnLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUkMTA1IGZyb20gJy4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgVGltZWxpbmUkMTA2IGZyb20gJy4vVGltZWxpbmUnO1xyXG5pbXBvcnQgY3ViZW1hcCQxMDcgZnJvbSAnLi91dGlsL2N1YmVtYXAnO1xyXG5pbXBvcnQgZGRzJDEwOCBmcm9tICcuL3V0aWwvZGRzJztcclxuaW1wb3J0IGRlbGF1bmF5JDEwOSBmcm9tICcuL3V0aWwvZGVsYXVuYXknO1xyXG5pbXBvcnQgaGRyJDExMCBmcm9tICcuL3V0aWwvaGRyJztcclxuaW1wb3J0IG1lc2gkMTExIGZyb20gJy4vdXRpbC9tZXNoJztcclxuaW1wb3J0IHNoJDExMiBmcm9tICcuL3V0aWwvc2gnO1xyXG5pbXBvcnQgdGV4dHVyZSQxMTMgZnJvbSAnLi91dGlsL3RleHR1cmUnO1xyXG5pbXBvcnQgdHJhbnNmZXJhYmxlJDExNCBmcm9tICcuL3V0aWwvdHJhbnNmZXJhYmxlJztcclxuaW1wb3J0IHZlcnNpb24kMTE1IGZyb20gJy4vdmVyc2lvbic7XHJcbmltcG9ydCBDYXJkYm9hcmREaXN0b3J0ZXIkMTE2IGZyb20gJy4vdnIvQ2FyZGJvYXJkRGlzdG9ydGVyJztcclxuaW1wb3J0IFN0ZXJlb0NhbWVyYSQxMTcgZnJvbSAnLi92ci9TdGVyZW9DYW1lcmEnO1xyXG5cclxuXHJcbnZhciBhbmltYXRpb24gPSB7XHJcbiAgICBBbmltYXRvciA6IEFuaW1hdG9yJDAsXHJcbiAgICBCbGVuZDFEQ2xpcCA6IEJsZW5kMURDbGlwJDEsXHJcbiAgICBCbGVuZDJEQ2xpcCA6IEJsZW5kMkRDbGlwJDIsXHJcbiAgICBDbGlwIDogQ2xpcCQzLFxyXG4gICAgZWFzaW5nIDogZWFzaW5nJDQsXHJcbiAgICBTYW1wbGVyVHJhY2sgOiBTYW1wbGVyVHJhY2skNSxcclxuICAgIFRpbWVsaW5lIDogVGltZWxpbmUkNixcclxuICAgIFRyYWNrQ2xpcCA6IFRyYWNrQ2xpcCQ3XHJcbn07XHJcbmV4cG9ydCB7IGFuaW1hdGlvbiB9O1xyXG5cclxuZXhwb3J0IHsgYXBwbGljYXRpb24kOCBhcyBhcHBsaWNhdGlvbiB9O1xyXG5cclxudmFyIGFzeW5jID0ge1xyXG4gICAgVGFzayA6IFRhc2skOSxcclxuICAgIFRhc2tHcm91cCA6IFRhc2tHcm91cCQxMFxyXG59O1xyXG5leHBvcnQgeyBhc3luYyB9O1xyXG5cclxuZXhwb3J0IHsgQ2FtZXJhJDExIGFzIENhbWVyYSB9O1xyXG5cclxudmFyIGNhbWVyYSA9IHtcclxuICAgIE9ydGhvZ3JhcGhpYyA6IE9ydGhvZ3JhcGhpYyQxMixcclxuICAgIFBlcnNwZWN0aXZlIDogUGVyc3BlY3RpdmUkMTNcclxufTtcclxuZXhwb3J0IHsgY2FtZXJhIH07XHJcblxyXG5cclxudmFyIGNvbXBvc2l0b3IgPSB7XHJcbiAgICBDb21wb3NpdG9yIDogQ29tcG9zaXRvciQxNCxcclxuICAgIENvbXBvc2l0b3JOb2RlIDogQ29tcG9zaXRvck5vZGUkMTUsXHJcbiAgICBjcmVhdGVDb21wb3NpdG9yIDogY3JlYXRlQ29tcG9zaXRvciQxNixcclxuICAgIEZpbHRlck5vZGUgOiBGaWx0ZXJOb2RlJDE3LFxyXG4gICAgR3JhcGggOiBHcmFwaCQxOCxcclxuICAgIFBhc3MgOiBQYXNzJDE5LFxyXG4gICAgU2NlbmVOb2RlIDogU2NlbmVOb2RlJDIwLFxyXG4gICAgVGV4dHVyZU5vZGUgOiBUZXh0dXJlTm9kZSQyMSxcclxuICAgIFRleHR1cmVQb29sIDogVGV4dHVyZVBvb2wkMjJcclxufTtcclxuZXhwb3J0IHsgY29tcG9zaXRvciB9O1xyXG5cclxuXHJcbnZhciBjb3JlID0ge1xyXG4gICAgQmFzZSA6IEJhc2UkMjMsXHJcbiAgICBDYWNoZSA6IENhY2hlJDI0LFxyXG4gICAgY29sb3IgOiBjb2xvciQyNSxcclxuICAgIGdsZW51bSA6IGdsZW51bSQyNixcclxuICAgIEdMSW5mbyA6IEdMSW5mbyQyNyxcclxuICAgIExpbmtlZExpc3QgOiBMaW5rZWRMaXN0JDI4LFxyXG4gICAgTFJVIDogTFJVJDI5LFxyXG4gICAgbWl4aW4gOiB7XHJcbiAgICAgICAgZXh0ZW5kIDogZXh0ZW5kJDMwLFxyXG4gICAgICAgIG5vdGlmaWVyIDogbm90aWZpZXIkMzFcclxuICAgIH0sXHJcbiAgICByZXF1ZXN0IDogcmVxdWVzdCQzMixcclxuICAgIHV0aWwgOiB1dGlsJDMzLFxyXG4gICAgdmVuZG9yIDogdmVuZG9yJDM0XHJcbn07XHJcbmV4cG9ydCB7IGNvcmUgfTtcclxuXHJcbmV4cG9ydCB7IGNyZWF0ZUNvbXBvc2l0b3IkMzUgYXMgY3JlYXRlQ29tcG9zaXRvciB9O1xyXG5cclxudmFyIGRlZmVycmVkID0ge1xyXG4gICAgR0J1ZmZlciA6IEdCdWZmZXIkMzYsXHJcbiAgICBSZW5kZXJlciA6IFJlbmRlcmVyJDM3XHJcbn07XHJcbmV4cG9ydCB7IGRlZmVycmVkIH07XHJcblxyXG5cclxudmFyIGRlcCA9IHtcclxuICAgIGdsbWF0cml4IDogZ2xtYXRyaXgkMzhcclxufTtcclxuZXhwb3J0IHsgZGVwIH07XHJcblxyXG5leHBvcnQgeyBGcmFtZUJ1ZmZlciQzOSBhcyBGcmFtZUJ1ZmZlciB9O1xyXG5leHBvcnQgeyBHZW9tZXRyeSQ0MCBhcyBHZW9tZXRyeSB9O1xyXG5cclxudmFyIGdlb21ldHJ5ID0ge1xyXG4gICAgQ29uZSA6IENvbmUkNDEsXHJcbiAgICBDdWJlIDogQ3ViZSQ0MixcclxuICAgIEN5bGluZGVyIDogQ3lsaW5kZXIkNDMsXHJcbiAgICBQYXJhbWV0cmljU3VyZmFjZSA6IFBhcmFtZXRyaWNTdXJmYWNlJDQ0LFxyXG4gICAgUGxhbmUgOiBQbGFuZSQ0NSxcclxuICAgIFNwaGVyZSA6IFNwaGVyZSQ0NlxyXG59O1xyXG5leHBvcnQgeyBnZW9tZXRyeSB9O1xyXG5cclxuZXhwb3J0IHsgR2VvbWV0cnlCYXNlJDQ3IGFzIEdlb21ldHJ5QmFzZSB9O1xyXG5leHBvcnQgeyBKb2ludCQ0OCBhcyBKb2ludCB9O1xyXG5leHBvcnQgeyBMaWdodCQ0OSBhcyBMaWdodCB9O1xyXG5cclxudmFyIGxpZ2h0ID0ge1xyXG4gICAgQW1iaWVudCA6IEFtYmllbnQkNTAsXHJcbiAgICBBbWJpZW50Q3ViZW1hcCA6IEFtYmllbnRDdWJlbWFwJDUxLFxyXG4gICAgQW1iaWVudFNIIDogQW1iaWVudFNIJDUyLFxyXG4gICAgRGlyZWN0aW9uYWwgOiBEaXJlY3Rpb25hbCQ1MyxcclxuICAgIFBvaW50IDogUG9pbnQkNTQsXHJcbiAgICBTcGhlcmUgOiBTcGhlcmUkNTUsXHJcbiAgICBTcG90IDogU3BvdCQ1NixcclxuICAgIFR1YmUgOiBUdWJlJDU3XHJcbn07XHJcbmV4cG9ydCB7IGxpZ2h0IH07XHJcblxyXG5cclxudmFyIGxvYWRlciA9IHtcclxuICAgIEZYIDogRlgkNTgsXHJcbiAgICBHTFRGIDogR0xURiQ1OVxyXG59O1xyXG5leHBvcnQgeyBsb2FkZXIgfTtcclxuXHJcbmV4cG9ydCB7IE1hdGVyaWFsJDYwIGFzIE1hdGVyaWFsIH07XHJcblxyXG52YXIgbWF0aCA9IHtcclxuICAgIEJvdW5kaW5nQm94IDogQm91bmRpbmdCb3gkNjEsXHJcbiAgICBGcnVzdHVtIDogRnJ1c3R1bSQ2MixcclxuICAgIE1hdHJpeDIgOiBNYXRyaXgyJDYzLFxyXG4gICAgTWF0cml4MmQgOiBNYXRyaXgyZCQ2NCxcclxuICAgIE1hdHJpeDMgOiBNYXRyaXgzJDY1LFxyXG4gICAgTWF0cml4NCA6IE1hdHJpeDQkNjYsXHJcbiAgICBQbGFuZSA6IFBsYW5lJDY3LFxyXG4gICAgUXVhdGVybmlvbiA6IFF1YXRlcm5pb24kNjgsXHJcbiAgICBSYXkgOiBSYXkkNjksXHJcbiAgICB1dGlsIDogdXRpbCQ3MCxcclxuICAgIFZhbHVlIDogVmFsdWUkNzEsXHJcbiAgICBWZWN0b3IyIDogVmVjdG9yMiQ3MixcclxuICAgIFZlY3RvcjMgOiBWZWN0b3IzJDczLFxyXG4gICAgVmVjdG9yNCA6IFZlY3RvcjQkNzRcclxufTtcclxuZXhwb3J0IHsgbWF0aCB9O1xyXG5leHBvcnQgeyBCb3VuZGluZ0JveCQ2MSBhcyBCb3VuZGluZ0JveCB9O1xyXG5leHBvcnQgeyBGcnVzdHVtJDYyIGFzIEZydXN0dW0gfTtcclxuZXhwb3J0IHsgTWF0cml4MiQ2MyBhcyBNYXRyaXgyIH07XHJcbmV4cG9ydCB7IE1hdHJpeDJkJDY0IGFzIE1hdHJpeDJkIH07XHJcbmV4cG9ydCB7IE1hdHJpeDMkNjUgYXMgTWF0cml4MyB9O1xyXG5leHBvcnQgeyBNYXRyaXg0JDY2IGFzIE1hdHJpeDQgfTtcclxuZXhwb3J0IHsgUGxhbmUkNjcgYXMgUGxhbmUgfTtcclxuZXhwb3J0IHsgUXVhdGVybmlvbiQ2OCBhcyBRdWF0ZXJuaW9uIH07XHJcbmV4cG9ydCB7IFJheSQ2OSBhcyBSYXkgfTtcclxuZXhwb3J0IHsgVmFsdWUkNzEgYXMgVmFsdWUgfTtcclxuZXhwb3J0IHsgVmVjdG9yMiQ3MiBhcyBWZWN0b3IyIH07XHJcbmV4cG9ydCB7IFZlY3RvcjMkNzMgYXMgVmVjdG9yMyB9O1xyXG5leHBvcnQgeyBWZWN0b3I0JDc0IGFzIFZlY3RvcjQgfTtcclxuXHJcbmV4cG9ydCB7IE1lc2gkNzUgYXMgTWVzaCB9O1xyXG5leHBvcnQgeyBOb2RlJDc2IGFzIE5vZGUgfTtcclxuXHJcbnZhciBwYXJ0aWNsZSA9IHtcclxuICAgIEVtaXR0ZXIgOiBFbWl0dGVyJDc3LFxyXG4gICAgRmllbGQgOiBGaWVsZCQ3OCxcclxuICAgIEZvcmNlRmllbGQgOiBGb3JjZUZpZWxkJDc5LFxyXG4gICAgUGFydGljbGUgOiBQYXJ0aWNsZSQ4MCxcclxuICAgIFBhcnRpY2xlUmVuZGVyYWJsZSA6IFBhcnRpY2xlUmVuZGVyYWJsZSQ4MVxyXG59O1xyXG5leHBvcnQgeyBwYXJ0aWNsZSB9O1xyXG5cclxuXHJcbnZhciBwaWNraW5nID0ge1xyXG4gICAgUGl4ZWxQaWNraW5nIDogUGl4ZWxQaWNraW5nJDgyLFxyXG4gICAgUmF5UGlja2luZyA6IFJheVBpY2tpbmckODNcclxufTtcclxuZXhwb3J0IHsgcGlja2luZyB9O1xyXG5cclxuXHJcbnZhciBwbHVnaW4gPSB7XHJcbiAgICBGcmVlQ29udHJvbCA6IEZyZWVDb250cm9sJDg0LFxyXG4gICAgR2FtZXBhZENvbnRyb2wgOiBHYW1lcGFkQ29udHJvbCQ4NSxcclxuICAgIEdlc3R1cmVNZ3IgOiBHZXN0dXJlTWdyJDg2LFxyXG4gICAgSW5maW5pdGVQbGFuZSA6IEluZmluaXRlUGxhbmUkODcsXHJcbiAgICBPcmJpdENvbnRyb2wgOiBPcmJpdENvbnRyb2wkODgsXHJcbiAgICBTa3lib3ggOiBTa3lib3gkODksXHJcbiAgICBTa3lkb21lIDogU2t5ZG9tZSQ5MFxyXG59O1xyXG5leHBvcnQgeyBwbHVnaW4gfTtcclxuXHJcblxyXG52YXIgcHJlUGFzcyA9IHtcclxuICAgIEVudmlyb25tZW50TWFwIDogRW52aXJvbm1lbnRNYXAkOTEsXHJcbiAgICBTaGFkb3dNYXAgOiBTaGFkb3dNYXAkOTJcclxufTtcclxuZXhwb3J0IHsgcHJlUGFzcyB9O1xyXG5cclxuZXhwb3J0IHsgUmVuZGVyYWJsZSQ5MyBhcyBSZW5kZXJhYmxlIH07XHJcbmV4cG9ydCB7IFJlbmRlcmVyJDk0IGFzIFJlbmRlcmVyIH07XHJcbmV4cG9ydCB7IFNjZW5lJDk1IGFzIFNjZW5lIH07XHJcbmV4cG9ydCB7IFNoYWRlciQ5NiBhcyBTaGFkZXIgfTtcclxuXHJcbnZhciBzaGFkZXIgPSB7XHJcbiAgICBsaWJyYXJ5IDogbGlicmFyeSQ5NyxcclxuICAgIHJlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3IgOiByZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yJDk4LFxyXG4gICAgc291cmNlIDoge1xyXG4gICAgaGVhZGVyIDoge1xyXG4gICAgICAgIGxpZ2h0IDogbGlnaHQkOTlcclxuICAgIH1cclxuICAgIH1cclxufTtcclxuZXhwb3J0IHsgc2hhZGVyIH07XHJcblxyXG5leHBvcnQgeyBTa2VsZXRvbiQxMDAgYXMgU2tlbGV0b24gfTtcclxuZXhwb3J0IHsgU3RhbmRhcmRNYXRlcmlhbCQxMDEgYXMgU3RhbmRhcmRNYXRlcmlhbCB9O1xyXG5leHBvcnQgeyBTdGF0aWNHZW9tZXRyeSQxMDIgYXMgU3RhdGljR2VvbWV0cnkgfTtcclxuZXhwb3J0IHsgVGV4dHVyZSQxMDMgYXMgVGV4dHVyZSB9O1xyXG5leHBvcnQgeyBUZXh0dXJlMkQkMTA0IGFzIFRleHR1cmUyRCB9O1xyXG5leHBvcnQgeyBUZXh0dXJlQ3ViZSQxMDUgYXMgVGV4dHVyZUN1YmUgfTtcclxuZXhwb3J0IHsgVGltZWxpbmUkMTA2IGFzIFRpbWVsaW5lIH07XHJcblxyXG52YXIgdXRpbCA9IHtcclxuICAgIGN1YmVtYXAgOiBjdWJlbWFwJDEwNyxcclxuICAgIGRkcyA6IGRkcyQxMDgsXHJcbiAgICBkZWxhdW5heSA6IGRlbGF1bmF5JDEwOSxcclxuICAgIGhkciA6IGhkciQxMTAsXHJcbiAgICBtZXNoIDogbWVzaCQxMTEsXHJcbiAgICBzaCA6IHNoJDExMixcclxuICAgIHRleHR1cmUgOiB0ZXh0dXJlJDExMyxcclxuICAgIHRyYW5zZmVyYWJsZSA6IHRyYW5zZmVyYWJsZSQxMTRcclxufTtcclxuZXhwb3J0IHsgdXRpbCB9O1xyXG5cclxuZXhwb3J0IHsgdmVyc2lvbiQxMTUgYXMgdmVyc2lvbiB9O1xyXG5cclxudmFyIHZyID0ge1xyXG4gICAgQ2FyZGJvYXJkRGlzdG9ydGVyIDogQ2FyZGJvYXJkRGlzdG9ydGVyJDExNixcclxuICAgIFN0ZXJlb0NhbWVyYSA6IFN0ZXJlb0NhbWVyYSQxMTdcclxufTtcclxuZXhwb3J0IHsgdnIgfTtcclxuO1xyXG4iXSwibmFtZXMiOlsiZWFzaW5nIiwiRWFzaW5nIiwiZWFzaW5nRnVuY3MiLCJHTE1BVF9SQU5ET00iLCJ1dGlsIiwibm90aWZpZXJNaXhpbiIsIkxSVSIsInBhcnNlQ29sb3IiLCJnZXREZWZpbmVDb2RlIiwicHJlekVzc2wiLCJub29wIiwicHJvdG8iLCJkZWZpbmVQcm9wZXJ0eSIsImxpZ2h0U2hhZGVyIiwiUGxhbmUiLCJ2ZWMzU2V0IiwidmVjM0NvcHkiLCJFUFNJTE9OIiwicHJvZ3JhbUtleUNhY2hlIiwiZ2V0UHJvZ3JhbUtleSIsIkxSVUNhY2hlIiwiQXR0cmlidXRlIiwiQ3ViZSIsIlNwaGVyZSIsIlBhcmFtZXRyaWNTdXJmYWNlIiwiaXNQb3dlck9mVHdvIiwiUGVyc3BlY3RpdmUiLCJPcnRob2dyYXBoaWMiLCJ1dGlsRXNzbCIsInNoYWRlckxpYnJhcnkiLCJQZXJzcGVjdGl2ZUNhbWVyYSIsIk9ydGhvZ3JhcGhpY0NhbWVyYSIsImNhbWVyYSIsIk9ydGhvQ2FtZXJhIiwiU2t5Ym94IiwiQ3ViZUdlb21ldHJ5IiwidGFyZ2V0cyIsInJldCIsImhkciIsImRkcyIsIlNreWRvbWUiLCJDdWJlR2VvIiwiU3BoZXJlR2VvIiwiUGxhbmVHZW8iLCJQYXJhbWV0cmljU3VyZmFjZUdlbyIsInNoVXRpbCIsIkdyYXBoTm9kZSIsIlNjZW5lTm9kZSIsIlRleHR1cmVOb2RlIiwiRmlsdGVyTm9kZSIsInJlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3IiLCJDb21wb1NjZW5lTm9kZSIsIkNvbXBvVGV4dHVyZU5vZGUiLCJDb21wb0ZpbHRlck5vZGUiLCJDb25lIiwiQ3lsaW5kZXIiLCJDb25lR2VvbWV0cnkiLCJDb25lR2VvIiwiQ3lsaW5kZXJHZW8iLCJGdWxsUXVhZFBhc3MiLCJvdXRwdXRFc3NsIiwiQmFzZSIsIkNhbWVyYSIsIkFuaW1hdG9yJDAiLCJCbGVuZDFEQ2xpcCQxIiwiQmxlbmQyRENsaXAkMiIsIkNsaXAkMyIsImVhc2luZyQ0IiwiU2FtcGxlclRyYWNrJDUiLCJUaW1lbGluZSQ2IiwiVHJhY2tDbGlwJDciLCJUYXNrJDkiLCJUYXNrR3JvdXAkMTAiLCJPcnRob2dyYXBoaWMkMTIiLCJQZXJzcGVjdGl2ZSQxMyIsIkNvbXBvc2l0b3IkMTQiLCJDb21wb3NpdG9yTm9kZSQxNSIsImNyZWF0ZUNvbXBvc2l0b3IkMTYiLCJGaWx0ZXJOb2RlJDE3IiwiR3JhcGgkMTgiLCJQYXNzJDE5IiwiU2NlbmVOb2RlJDIwIiwiVGV4dHVyZU5vZGUkMjEiLCJUZXh0dXJlUG9vbCQyMiIsIkJhc2UkMjMiLCJDYWNoZSQyNCIsImNvbG9yJDI1IiwiZ2xlbnVtJDI2IiwiR0xJbmZvJDI3IiwiTGlua2VkTGlzdCQyOCIsIkxSVSQyOSIsImV4dGVuZCQzMCIsIm5vdGlmaWVyJDMxIiwicmVxdWVzdCQzMiIsInV0aWwkMzMiLCJ2ZW5kb3IkMzQiLCJHQnVmZmVyJDM2IiwiUmVuZGVyZXIkMzciLCJnbG1hdHJpeCQzOCIsIkNvbmUkNDEiLCJDdWJlJDQyIiwiQ3lsaW5kZXIkNDMiLCJQYXJhbWV0cmljU3VyZmFjZSQ0NCIsIlBsYW5lJDQ1IiwiU3BoZXJlJDQ2IiwiQW1iaWVudCQ1MCIsIkFtYmllbnRDdWJlbWFwJDUxIiwiQW1iaWVudFNIJDUyIiwiRGlyZWN0aW9uYWwkNTMiLCJQb2ludCQ1NCIsIlNwaGVyZSQ1NSIsIlNwb3QkNTYiLCJUdWJlJDU3IiwiRlgkNTgiLCJHTFRGJDU5IiwiQm91bmRpbmdCb3gkNjEiLCJGcnVzdHVtJDYyIiwiTWF0cml4MiQ2MyIsIk1hdHJpeDJkJDY0IiwiTWF0cml4MyQ2NSIsIk1hdHJpeDQkNjYiLCJQbGFuZSQ2NyIsIlF1YXRlcm5pb24kNjgiLCJSYXkkNjkiLCJ1dGlsJDcwIiwiVmFsdWUkNzEiLCJWZWN0b3IyJDcyIiwiVmVjdG9yMyQ3MyIsIlZlY3RvcjQkNzQiLCJFbWl0dGVyJDc3IiwiRmllbGQkNzgiLCJGb3JjZUZpZWxkJDc5IiwiUGFydGljbGUkODAiLCJQYXJ0aWNsZVJlbmRlcmFibGUkODEiLCJQaXhlbFBpY2tpbmckODIiLCJSYXlQaWNraW5nJDgzIiwiRnJlZUNvbnRyb2wkODQiLCJHYW1lcGFkQ29udHJvbCQ4NSIsIkdlc3R1cmVNZ3IkODYiLCJJbmZpbml0ZVBsYW5lJDg3IiwiT3JiaXRDb250cm9sJDg4IiwiU2t5Ym94JDg5IiwiU2t5ZG9tZSQ5MCIsIkVudmlyb25tZW50TWFwJDkxIiwiU2hhZG93TWFwJDkyIiwibGlicmFyeSQ5NyIsInJlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3IkOTgiLCJsaWdodCQ5OSIsImN1YmVtYXAkMTA3IiwiZGRzJDEwOCIsImRlbGF1bmF5JDEwOSIsImhkciQxMTAiLCJtZXNoJDExMSIsInNoJDExMiIsInRleHR1cmUkMTEzIiwidHJhbnNmZXJhYmxlJDExNCIsIkNhcmRib2FyZERpc3RvcnRlciQxMTYiLCJTdGVyZW9DYW1lcmEkMTE3Il0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7Ozs7QUFLQSxJQUFJLE1BQU0sR0FBRzs7Ozs7O0lBTVQsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2hCLE9BQU8sQ0FBQyxDQUFDO0tBQ1o7Ozs7OztJQU1ELFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDaEI7Ozs7OztJQU1ELFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDdEI7Ozs7OztJQU1ELGNBQWMsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN4QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZCxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3RCO1FBQ0QsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDdEM7Ozs7OztJQU1ELE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3BCOzs7Ozs7SUFNRCxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDbEIsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUMxQjs7Ozs7O0lBTUQsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3BCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNkLE9BQU8sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzFCO1FBQ0QsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDdkM7Ozs7OztJQU1ELFNBQVMsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN4Qjs7Ozs7O0lBTUQsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3BCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDaEM7Ozs7OztJQU1ELFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN0QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZCxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDOUI7UUFDRCxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUM3Qzs7Ozs7O0lBTUQsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUM1Qjs7Ozs7O0lBTUQsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3BCLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNsQzs7Ozs7O0lBTUQsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3RCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNkLE9BQU8sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbEM7UUFDRCxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQy9DOzs7Ozs7SUFNRCxZQUFZLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUN4Qzs7Ozs7O0lBTUQsYUFBYSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUNwQzs7Ozs7O0lBTUQsZUFBZSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3pCLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1Qzs7Ozs7O0lBTUQsYUFBYSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3ZCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQzlDOzs7Ozs7SUFNRCxjQUFjLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDeEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDbEQ7Ozs7OztJQU1ELGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNULE9BQU8sQ0FBQyxDQUFDO1NBQ1o7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDVCxPQUFPLENBQUMsQ0FBQztTQUNaO1FBQ0QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2QsT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3RDO1FBQ0QsT0FBTyxHQUFHLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUNwRDs7Ozs7O0lBTUQsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3BCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUNuQzs7Ozs7O0lBTUQsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNuQzs7Ozs7O0lBTUQsYUFBYSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3ZCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNkLE9BQU8sRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ2xEOzs7Ozs7SUFNRCxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDbkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNULE9BQU8sQ0FBQyxDQUFDO1NBQ1o7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDVCxPQUFPLENBQUMsQ0FBQztTQUNaO1FBQ0QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3BCLElBQUk7WUFDRCxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN0RDs7Ozs7O0lBTUQsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3BCLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDVCxPQUFPLENBQUMsQ0FBQztTQUNaO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1QsT0FBTyxDQUFDLENBQUM7U0FDWjtRQUNELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNiLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNwQjtZQUNHO1lBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtLQUN0RDs7Ozs7O0lBTUQsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ3RCLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDVCxPQUFPLENBQUMsQ0FBQztTQUNaO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1QsT0FBTyxDQUFDLENBQUM7U0FDWjtRQUNELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNiLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNwQjtZQUNHO1lBQ0EsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2QsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztrQkFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2tCQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7O0tBRTdEOzs7Ozs7SUFNRCxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDaEIsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3BDOzs7Ozs7SUFNRCxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDakIsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzFDOzs7Ozs7SUFNRCxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDbkIsSUFBSSxDQUFDLEdBQUcsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZCxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM1QztRQUNELE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUN2RDs7Ozs7O0lBTUQsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3RDOzs7Ozs7SUFNRCxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFO1lBQ2hCLE9BQU8sTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekI7YUFDSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUU7WUFDckIsT0FBTyxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDbEQsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUU7WUFDekIsT0FBTyxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7U0FDckQsTUFBTTtZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDO1NBQ3hEO0tBQ0o7Ozs7OztJQU1ELFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNyQixJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUU7WUFDVCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUN2QztRQUNELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7S0FDbEQ7Q0FDSjs7QUNwVkQsU0FBUyxJQUFJLElBQUksRUFBRTs7Ozs7Ozs7Ozs7Ozs7OztBQWdCbkIsSUFBSSxJQUFJLEdBQUcsVUFBVSxJQUFJLEVBQUU7O0lBRXZCLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDOzs7OztJQUtsQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDOzs7OztJQUs1QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7O0lBSzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7Ozs7O0lBSzlCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7Ozs7O0lBSzdCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7Ozs7O0lBS3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUM7OztJQUczQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQzs7SUFFMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7O0lBRXRCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7O0lBRXpCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUU7UUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDL0I7Ozs7O0lBS0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQzs7Ozs7SUFLcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQzs7Ozs7SUFLdEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQzs7SUFFeEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Q0FDeEIsQ0FBQzs7QUFFRixJQUFJLENBQUMsU0FBUyxHQUFHOztJQUViLEdBQUcsRUFBRSxDQUFDOztJQUVOLElBQUksRUFBRSxDQUFDOztJQUVQLEtBQUssRUFBRSxDQUFDOzs7OztJQUtSLE9BQU8sRUFBRSxVQUFVLElBQUksRUFBRTtRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLElBQUksRUFBRTtZQUNOLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzthQUM3QjtpQkFDSTtnQkFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQzthQUNqQztTQUNKO0tBQ0o7Ozs7O0lBS0QsU0FBUyxFQUFFLFVBQVVBLFNBQU0sRUFBRTtRQUN6QixJQUFJLE9BQU9BLFNBQU0sQ0FBQyxLQUFLLFFBQVEsRUFBRTtZQUM3QkEsU0FBTSxHQUFHQyxNQUFNLENBQUNELFNBQU0sQ0FBQyxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBR0EsU0FBTSxDQUFDO0tBQ3hCOzs7Ozs7SUFNRCxJQUFJLEVBQUUsVUFBVSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRTtRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksRUFBRTtZQUMzQixTQUFTLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDeEM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQzs7UUFFekIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsT0FBTyxRQUFRLENBQUM7U0FDbkI7O1FBRUQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN4QixPQUFPO1NBQ1Y7OztRQUdELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDOztRQUU5QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzs7UUFFekQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFO1lBQ2IsT0FBTztTQUNWOztRQUVELElBQUksUUFBUSxDQUFDO1FBQ2IsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2IsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkM7YUFDSTtZQUNELFFBQVEsR0FBRyxPQUFPLENBQUM7U0FDdEI7O1FBRUQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ2hDOztRQUVELElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtZQUNmLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQixPQUFPLFNBQVMsQ0FBQzthQUNwQjtpQkFDSTs7O2dCQUdELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDOztnQkFFekIsT0FBTyxRQUFRLENBQUM7YUFDbkI7U0FDSjthQUNJO1lBQ0QsT0FBTyxJQUFJLENBQUM7U0FDZjtLQUNKOzs7Ozs7SUFNRCxPQUFPLEVBQUUsVUFBVSxJQUFJLEVBQUU7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDNUM7O0lBRUQsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFOzs7OztRQUtyQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7O1FBRWxCLElBQUksSUFBSSxFQUFFO1lBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQixTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7O1FBRTFCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDOztRQUV0QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztLQUN4Qjs7SUFFRCxjQUFjLEVBQUUsWUFBWTtRQUN4QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7S0FDNUI7O0lBRUQsY0FBYyxFQUFFLFVBQVUsSUFBSSxFQUFFO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7S0FDekI7O0lBRUQsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLFNBQVMsRUFBRTtRQUNoQyxJQUFJLENBQUMsWUFBWSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0tBQ3REOztJQUVELElBQUksRUFBRSxVQUFVLFNBQVMsRUFBRSxHQUFHLEVBQUU7UUFDNUIsSUFBSSxTQUFTLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNyQztLQUNKOztJQUVELEtBQUssRUFBRSxZQUFZO1FBQ2YsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7O1FBRXhDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDOztRQUV4QixPQUFPLElBQUksQ0FBQztLQUNmOzs7O0lBSUQsS0FBSyxFQUFFLFlBQVk7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztLQUN2Qjs7Ozs7SUFLRCxNQUFNLEVBQUUsWUFBWTtRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztLQUN4QjtDQUNKLENBQUM7QUFDRixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7O0FDeFBsQyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQzs7QUFFdkMsU0FBUyxhQUFhLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtJQUNoQyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QjtBQUNELFNBQVMsYUFBYSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO0lBQ3ZDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7Q0FDdkI7O0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRTtJQUN4QyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0NBQ25DOztBQUVELFNBQVMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtJQUNwRCxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ3BCLElBQUksTUFBTSxJQUFJLENBQUMsRUFBRTtRQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDckQ7S0FDSjtTQUNJO1FBQ0QsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUI7b0JBQ3pCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTztpQkFDOUIsQ0FBQzthQUNMO1NBQ0o7S0FDSjtDQUNKOztBQUVELFNBQVMsV0FBVyxDQUFDLElBQUksRUFBRTtJQUN2QixJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksV0FBVyxFQUFFO1FBQzdCLE9BQU8sS0FBSyxDQUFDO0tBQ2hCLE1BQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLFFBQVEsRUFBRTtRQUNqQyxPQUFPLEtBQUssQ0FBQztLQUNoQixNQUFNO1FBQ0gsT0FBTyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUM7S0FDMUM7Q0FDSjs7QUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUFLLEVBQUU7SUFDdkIsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDcEIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUN2QixJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN2QixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDYixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMxQixHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2QztZQUNELE9BQU8sR0FBRyxDQUFDO1NBQ2QsTUFBTTtZQUNILE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNqQztLQUNKLE1BQU07UUFDSCxPQUFPLEtBQUssQ0FBQztLQUNoQjtDQUNKOztBQUVELFNBQVMsMEJBQTBCO0lBQy9CLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTTtFQUN4QztJQUNFLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDcEIsSUFBSSxNQUFNLElBQUksQ0FBQyxFQUFFO1FBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcscUJBQXFCO2dCQUMxQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO2FBQ3hDLENBQUM7U0FDTDtLQUNKLE1BQU07UUFDSCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHFCQUFxQjtvQkFDN0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO2lCQUNaLENBQUM7YUFDTDtTQUNKO0tBQ0o7Q0FDSjs7QUFFRCxTQUFTLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUN0RCxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO0lBQ3pCLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDekIsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO2NBQzNCLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7Y0FDcEMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7Q0FDekI7Ozs7QUFJRCxTQUFTLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtJQUNqQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQzFCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDMUIsSUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFOztRQUVyQixJQUFJLGdCQUFnQixHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDekMsSUFBSSxnQkFBZ0IsRUFBRTs7WUFFbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7U0FDekI7YUFDSTs7WUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNwQyxJQUFJLENBQUMsSUFBSTtvQkFDTCxNQUFNLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDcEQsQ0FBQzthQUNMO1NBQ0o7S0FDSjs7SUFFRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNsQyxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDZCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyQjtTQUNKO2FBQ0k7WUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMzQixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDM0I7YUFDSjtTQUNKO0tBQ0o7Q0FDSjs7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtJQUNyQyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7UUFDZixPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN0QixJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ3JCLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBQ0QsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JCLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1NBQ0o7S0FDSjtTQUNJO1FBQ0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDM0IsT0FBTyxLQUFLLENBQUM7aUJBQ2hCO2FBQ0o7U0FDSjtLQUNKO0lBQ0QsT0FBTyxJQUFJLENBQUM7Q0FDZjs7QUFFRCxTQUFTLGVBQWUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUU7SUFDdkcsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUM5QixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBQzlCLElBQUksU0FBUyxHQUFHLFlBQVksS0FBSyxRQUFRLENBQUM7O0lBRTFDLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDaEMsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNYLE9BQU87S0FDVjs7SUFFRCxJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ2xDLElBQUksWUFBWSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7O0lBR3pDLElBQUksTUFBTSxHQUFHO1lBQ0wsWUFBWTtlQUNULFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7O1VBRTdCLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRVosU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDMUIsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7S0FDMUIsQ0FBQyxDQUFDOzs7SUFHSCxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7O0lBRXBCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQzs7SUFFbEIsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDOztJQUVuQixJQUFJLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ25DLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQztJQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQy9CLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQzs7O1FBRzdDLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7OztRQUcvQixJQUFJLEVBQUUsQ0FBQyxZQUFZLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDO2dCQUNwRCxDQUFDLFlBQVksSUFBSSxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsRUFBRTtZQUM1QyxlQUFlLEdBQUcsS0FBSyxDQUFDO1NBQzNCO1FBQ0QsU0FBUyxHQUFHLEtBQUssQ0FBQzs7UUFFbEIsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN2QztJQUNELElBQUksZUFBZSxFQUFFO1FBQ2pCLE9BQU87S0FDVjs7SUFFRCxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDOztJQUV2QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNuQyxJQUFJLFlBQVksRUFBRTtZQUNkLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzNDO2FBQ0k7WUFDRCxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDekMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQzthQUMzQjtTQUNKO0tBQ0o7SUFDRCxZQUFZLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQzs7OztJQUkvRSxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDakIsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLElBQUksS0FBSyxDQUFDO0lBQ1YsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7O0lBRW5CLElBQUksT0FBTyxHQUFHLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRTs7OztRQUlwQyxJQUFJLE9BQU8sR0FBRyxZQUFZLEVBQUU7O1lBRXhCLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzdDLEtBQUssQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN6QixJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUU7b0JBQzFCLE1BQU07aUJBQ1Q7YUFDSjtZQUNELENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDakM7YUFDSTtZQUNELEtBQUssQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNsQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUU7b0JBQ3pCLE1BQU07aUJBQ1Q7YUFDSjtZQUNELENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNiLFlBQVksR0FBRyxPQUFPLENBQUM7O1FBRXZCLElBQUksS0FBSyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO1lBQ2IsT0FBTztTQUNWO2FBQ0k7WUFDRCxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQzs7WUFFdEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbkM7UUFDRCxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFeEIsSUFBSSxTQUFTLEVBQUU7WUFDWCxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ25DLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkQsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN2RCxJQUFJLFlBQVksRUFBRTtnQkFDZCxNQUFNO29CQUNGLE1BQU07b0JBQ04sUUFBUTtvQkFDUixZQUFZO3dCQUNSLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDO3dCQUN4QixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztxQkFDcEI7aUJBQ0osQ0FBQzthQUNMO2lCQUNJLElBQUksWUFBWSxFQUFFO2dCQUNuQiwwQkFBMEI7b0JBQ3RCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzdCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDO29CQUN4QixNQUFNO2lCQUNULENBQUM7YUFDTDtpQkFDSTtnQkFDRCxNQUFNO29CQUNGLE1BQU07b0JBQ04sUUFBUTtvQkFDUixxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZELENBQUM7YUFDTDtTQUNKO2FBQ0k7WUFDRCxJQUFJLFlBQVksRUFBRTtnQkFDZCxNQUFNO29CQUNGLE1BQU07b0JBQ04sUUFBUTtvQkFDUixZQUFZO3dCQUNSLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDO3dCQUN4QixRQUFRLENBQUMsQ0FBQyxDQUFDO3dCQUNYLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNmLENBQUM7cUJBQ0o7aUJBQ0osQ0FBQzthQUNMOztpQkFFSSxJQUFJLFlBQVksRUFBRTtnQkFDbkIsZ0JBQWdCO29CQUNaLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzdCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDO29CQUN4QixNQUFNO2lCQUNULENBQUM7YUFDTDtpQkFDSTtnQkFDRCxNQUFNO29CQUNGLE1BQU07b0JBQ04sUUFBUTtvQkFDUixpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ25ELENBQUM7YUFDTDtTQUNKO0tBQ0osQ0FBQzs7SUFFRixJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQztRQUNoQixNQUFNLEVBQUUsUUFBUSxDQUFDLE9BQU87UUFDeEIsSUFBSSxFQUFFLE9BQU87UUFDYixJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUs7UUFDcEIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxNQUFNO1FBQ3RCLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLFFBQVEsRUFBRSxZQUFZO0tBQ3pCLENBQUMsQ0FBQzs7SUFFSCxJQUFJLFlBQVksSUFBSSxZQUFZLEtBQUssUUFBUSxFQUFFO1FBQzNDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDaEM7O0lBRUQsT0FBTyxJQUFJLENBQUM7Q0FDZjs7Ozs7Ozs7Ozs7Ozs7O0FBZUQsU0FBUyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRTtJQUMxRCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQzs7SUFFdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxDQUFDOztJQUUzQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sSUFBSSxhQUFhLENBQUM7SUFDdkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUksYUFBYSxDQUFDOztJQUV2QyxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksSUFBSSxJQUFJLENBQUM7O0lBRTFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOztJQUVoQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQzs7SUFFcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7O0lBRXZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDOztJQUVwQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQzs7SUFFbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7Q0FDeEI7O0FBRUQsU0FBUyxVQUFVLENBQUMsQ0FBQyxFQUFFO0lBQ25CLE9BQU8sQ0FBQyxDQUFDO0NBQ1o7O0FBRUQsUUFBUSxDQUFDLFNBQVMsR0FBRzs7SUFFakIsV0FBVyxFQUFFLFFBQVE7Ozs7Ozs7OztJQVNyQixJQUFJLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxFQUFFQSxTQUFNLEVBQUU7O1FBRWpDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztRQUU5Q0EsU0FBTSxHQUFHLENBQUMsT0FBT0EsU0FBTSxLQUFLLFVBQVUsR0FBR0EsU0FBTSxHQUFHRSxNQUFXLENBQUNGLFNBQU0sQ0FBQyxLQUFLLFVBQVUsQ0FBQztRQUNyRixLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssRUFBRTtZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7Ozs7O2dCQUs1QixJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7b0JBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUM7d0JBQ3hCLElBQUksRUFBRSxDQUFDO3dCQUNQLEtBQUssRUFBRSxVQUFVOzRCQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7eUJBQ3ZDO3dCQUNELE1BQU0sRUFBRUEsU0FBTTtxQkFDakIsQ0FBQyxDQUFDO2lCQUNOO2FBQ0o7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDeEIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BCLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDO2dCQUN0QixNQUFNLEVBQUVBLFNBQU07YUFDakIsQ0FBQyxDQUFDO1NBQ047UUFDRCxPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELElBQUksRUFBRSxVQUFVLFVBQVUsRUFBRSxLQUFLLEVBQUVBLFNBQU0sRUFBRTtRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRUEsU0FBTSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFdBQVcsSUFBSSxVQUFVLENBQUM7UUFDL0IsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELE1BQU0sRUFBRSxVQUFVLFFBQVEsRUFBRTtRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELGFBQWEsRUFBRSxZQUFZOztRQUV2QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzs7UUFFbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOztRQUUxQixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzlCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzFCO0tBQ0o7Ozs7Ozs7SUFPRCxLQUFLLEVBQUUsVUFBVSxZQUFZLEVBQUU7O1FBRTNCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7O1FBRWxCLElBQUksWUFBWSxHQUFHLFdBQVc7WUFDMUIsU0FBUyxFQUFFLENBQUM7WUFDWixJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUN4QjtTQUNKLENBQUM7O1FBRUYsSUFBSSxRQUFRLENBQUM7UUFDYixBQUNBLEtBQUssSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUMvQixJQUFJLElBQUksR0FBRyxlQUFlO2dCQUN0QixJQUFJLEVBQUUsWUFBWSxFQUFFLFlBQVk7Z0JBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDdEUsQ0FBQztZQUNGLElBQUksSUFBSSxFQUFFO2dCQUNOLEFBQ0EsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFCLFNBQVMsRUFBRSxDQUFDOzs7Z0JBR1osSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDaEM7O2dCQUVELFFBQVEsR0FBRyxJQUFJLENBQUM7YUFDbkI7U0FDSjs7O1FBR0QsSUFBSSxRQUFRLEVBQUU7WUFDVixJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ2xDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsVUFBVSxNQUFNLEVBQUUsT0FBTyxFQUFFO2dCQUMxQyxVQUFVLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDOztnQkFFNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztpQkFDekM7YUFDSixDQUFDO1NBQ0w7O1FBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNaLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN4QjtRQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7OztJQU1ELElBQUksRUFBRSxZQUFZO1FBQ2QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztLQUN2Qjs7Ozs7OztJQU9ELEtBQUssRUFBRSxVQUFVLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsSUFBSSxFQUFFLFVBQVUsSUFBSSxFQUFFO1FBQ2xCLElBQUksSUFBSSxFQUFFO1lBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDN0I7UUFDRCxPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7SUFNRCxRQUFRLEVBQUUsWUFBWTtRQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7S0FDekI7Q0FDSixDQUFDOztBQ25qQkY7OztBQUdBLEFBRUEsSUFBSSxZQUFZLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQy9CLE9BQU8sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0NBQ2xDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0NGLElBQUksV0FBVyxHQUFHLFVBQVUsSUFBSSxFQUFFOztJQUU5QixJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQzs7SUFFbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7Ozs7O0lBS3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7Ozs7SUFJbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQzs7OztJQUloQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQzs7SUFFbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDbkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLFFBQVEsQ0FBQzs7SUFFaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Q0FDbEMsQ0FBQzs7QUFFRixXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFDbkMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDOzs7Ozs7OztBQVFoRCxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxVQUFVLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFO0lBQ3BFLElBQUksR0FBRyxHQUFHO1FBQ04sUUFBUSxFQUFFLFFBQVE7UUFDbEIsSUFBSSxFQUFFLFNBQVM7UUFDZixNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7S0FDdEIsQ0FBQztJQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7SUFFaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1FBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLE9BQU8sR0FBRyxDQUFDO0tBQ2Q7SUFDRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM3QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLFFBQVEsRUFBRTtRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUM1QixNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsRUFBRTtRQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN6QixNQUFNO1FBQ0gsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDaEM7O0lBRUQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOztBQUVGLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLFVBQVUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7O0lBRXhELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O0lBRS9DLElBQUksR0FBRyxLQUFLLFFBQVEsRUFBRTtRQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZDOzs7SUFHRCxJQUFJLENBQUMsTUFBTSxJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUU7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUN0QjtJQUNELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7QUFFRixXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxVQUFVLElBQUksRUFBRTtJQUM1QyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzdCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDekIsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN4QixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQzdCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDOztJQUVqQyxJQUFJLFFBQVEsSUFBSSxHQUFHLElBQUksUUFBUSxJQUFJLEdBQUcsRUFBRTtRQUNwQyxJQUFJLEdBQUcsR0FBRyxRQUFRLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDcEIsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7OztRQUcxQyxJQUFJLElBQUksQ0FBQyxNQUFNLFlBQVksSUFBSSxFQUFFO1lBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNqQyxNQUFNO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDMUI7S0FDSixNQUFNO1FBQ0gsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQyxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxQixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ3JCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7O1FBRXJCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzs7UUFFaEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEtBQUssR0FBRyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7O1FBRXZFLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLFlBQVksSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQzdELElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLFlBQVksSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQzdELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDbEM7Q0FDSixDQUFDOzs7Ozs7O0FBT0YsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsVUFBVSxXQUFXLEVBQUU7SUFDakQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNsQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDekMsSUFBSSxTQUFTLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNwRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzVFO0lBQ0QsT0FBTyxJQUFJLENBQUM7Q0FDZixDQUFDOzs7QUFHRixXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxVQUFVLFFBQVEsRUFBRTtJQUNqRCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNiLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDekIsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN4QixJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxFQUFFO1FBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQkFDbkUsR0FBRyxHQUFHLENBQUMsQ0FBQzthQUNYO1NBQ0o7S0FDSixNQUFNO1FBQ0gsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pCLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO2dCQUNuRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO2FBQ1g7U0FDSjtLQUNKO0lBQ0QsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFO1FBQ1YsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFDckIsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7S0FDbEM7O0lBRUQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOztBQzlMRjs7QUFFQSxJQUFJLE9BQU8sR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDOztBQUU5QixTQUFTLGFBQWEsQ0FBQyxRQUFRLEVBQUU7SUFDN0IsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDO0lBQ3BDLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztJQUNwQyxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7SUFDcEMsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDO0lBQ3BDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7O0lBRWhDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUk7UUFDN0IsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3JELElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNyRCxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDckQsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0tBQ3hEOztJQUVELEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4QixJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDdkIsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDOztJQUV2QixPQUFPO1FBQ0gsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLFFBQVEsSUFBSSxDQUFDO1FBQ3BDLENBQUMsSUFBSSxjQUFjLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxRQUFRLElBQUksQ0FBQztLQUN2QyxDQUFDO0NBQ0w7O0FBRUQsU0FBUyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JDLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDZixFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQzVCLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDNUIsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDOzs7SUFHbkQsSUFBSSxRQUFRLEdBQUcsT0FBTyxJQUFJLFFBQVEsR0FBRyxPQUFPLEVBQUU7UUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0tBQzlDOztJQUVELElBQUksUUFBUSxHQUFHLE9BQU8sRUFBRTtRQUNwQixFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQy9COztTQUVJLElBQUksUUFBUSxHQUFHLE9BQU8sRUFBRTtRQUN6QixFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQy9COztTQUVJO1FBQ0QsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvQixHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUN0QixFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDcEQsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVE7WUFDdEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMs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QUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFVdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0lBQzFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQy9CLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7QUFTMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQixDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7Ozs7Ozs7O0FBUXBDLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7OztBQVF2QixJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDcEIsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDOzs7Ozs7Ozs7QUFTakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsT0FBTyxH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LEdBQUcsS0FBSyxDQUFDO0lBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUM3QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFD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LENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUMxQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckMsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7QUFTMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFCLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFRcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRTtJQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDckMsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7OztBQVF2QixJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzFCLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7Ozs7Ozs7O0FBU2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7RUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEIsT0FBTyxHQUFHLENBQUM7Q0FDWixDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFOztRQUVULEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztR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LENBQUMsQ0FBQztJQUN0RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFOzs7SUFHckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7OztRQUcxQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDN0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUM3QixFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzs7O0lBR25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2xELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7R0FDbEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7O01BRWQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7OztNQUdqQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ1osQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzNDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O01BRzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDOztJQUVqQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0lBR25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDLENBQUMs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QUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7O0FBVXZCLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7OztBQVdGLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7SUFDMUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0MsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7QUFTMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxT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Q0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O1FBRzFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDN0IsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUM3QixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxF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LENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2YsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDckIsSUFBSSxHQUFHLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7O0lBRTlCLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtRQUNYLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2hCLE1BQU07UUFDSCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakI7O0lBRUQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVsQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzVCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHOzs7UUFHM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUU1QyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ04sT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3ZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN2QyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzVCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDNUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QyxPQUFPLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDekcsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRTNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7O0FBVXpCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDOztJQUViLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7SUFFYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDakMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFbEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUV0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7SUFFM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7O0lBRTNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRWxCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRVgsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDVixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDVixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7O1FBRVYsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7SUFFakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUVqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7O0lBRXJCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3BDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEQsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7O1FBRWxELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHOzs7UUFHM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoRixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ04sT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQzs7SUFFbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7O0lBRW5ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDOztJQUVuRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsRUFBRTtJQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN2TSxDQUFDOztBQ3pkRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQSxBQU1BOzs7OztBQUtBLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQzs7Ozs7OztBQU9kLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVztJQUNyQixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFhRixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsV0FBVztJQUMxQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDNUIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFdkMsT0FBTyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3ZCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLElBQUksR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUTtnQkFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekMsT0FBTyxHQUFHLENBQUM7U0FDZCxNQUFNLElBQUksR0FBRyxHQUFHLFFBQVEsRUFBRTtZQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1gsT0FBTyxHQUFHLENBQUM7U0FDZCxNQUFNO1lBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDbkM7S0FDSixDQUFDO0NBQ0wsR0FBRyxDQUFDOzs7Ozs7Ozs7Ozs7QUFZTCxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsV0FBVztJQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7O0lBRXpCLE9BQU8sU0FBUyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7UUFDbEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRW5CLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVoQixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFbkIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ3hELENBQUM7Q0FDTCxHQUFHLENBQUM7Ozs7Ozs7OztBQVNMLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQzs7Ozs7Ozs7Ozs7O0FBWXhCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzs7Ozs7Ozs7OztBQVVsQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFhdEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDOzs7Ozs7OztBQVFwQixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQ3pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2hCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTs7SUFFNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7RUFFaEM7Ozs7Ozs7Ozs7O0FBV0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDOzs7Ozs7Ozs7O0FBVXBCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRS9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7OztBQVd6QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Ozs7Ozs7Ozs7QUFVeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUU7O0lBRTlCLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVuQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVwQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBRTs7SUFFOUIsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRW5CLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRXBDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxHQUFHLENBQUMsR0FBRyxFQUFFO0lBQzlCLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVuQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVwQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWXBCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQzs7Ozs7Ozs7Ozs7QUFXdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTs7OztJQUlqQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRS9DLFdBQVcsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQzs7O0lBRy9DLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUU5QyxLQUFLLEtBQUssR0FB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Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7O0FBTTFCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7Ozs7O0FBU3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7Ozs7O0FBTXhDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7Ozs7Ozs7OztBQVVqQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFhaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7OztJQUc3QixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxJQUFJLEtBQUssQ0FBQzs7SUFFVixLQUFLLE1BQU0sR0FBRyxHQUFHLEdBQUc7O1FBRWhCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUNyQixLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztLQUM5QixNQUFNOztRQUVILElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDZCxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ2xCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDUixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1FBRWhCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0tBQzFDOztJQUVELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7QUNoaEJGOzs7QUFHQSxBQUdBO0FBQ0EsU0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDcEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7O0lBRW5DLE9BQU8sR0FBRyxDQUFDO0NBQ2Q7O0FBRUQsU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7Ozs7SUFJckMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDOUQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7O0lBRW5FLElBQUksS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQzs7O0lBR3hDLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUU5QyxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUU7UUFDYixLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDZixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDVixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7S0FDYjs7SUFFRCxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssSUFBSSxRQUFRLEVBQUU7O1FBRTFCLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDN0MsTUFBTSxHQUFHLElBQUks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Q0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxRSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO1FBQ0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQzlELE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUM3RTs7SUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxD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QUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O1FBRWxCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztRQUVoRixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7OztRQUlwRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN6QzthQUNJO1lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDNUM7S0FDSixDQUFDO0NBQ0wsR0FBRyxDQUFDOzs7Ozs7O0FBT0wsWUFBWSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ3JELElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENB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RyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BELGdCQUFnQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVELFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RCxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0QsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdELFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RCxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRCxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xELFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLHNCQUFzQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9ELGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLGdCQUFnQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0Msa0JBQWtCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9ELGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRSxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9ELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRCxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEQsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRCxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekQsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMs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Q0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQyxJQUFJLEVBQUUsR0FBRyxLQUFLLEdBQUcsU0FBUyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25FLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs7SUFFcEUsT0FBTyxHQUFHLENBQUM7RUFDZDs7QUFFRCxTQUFTLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7OztBQVM5QyxTQUFTLENBQUMsSUFBSSxHQUFHLFVBQVUsZUFBZSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUU7SUFDNUQsSUFBSSxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDO1dBQ3ZCLEVBQUUsZUFBZSxJQUFJLENBQUMsSUFBSSxlQUFlLElBQUksQ0FBQyxDQUFDO01BQ3BEO1FBQ0UsT0FBTztLQUNWOztJQUVELElBQUksS0FBSyxHQUFHLGVBQWUsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxJQUFJLFNBQVMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ25ELElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDckQsSUFBSSxFQUFFLEdBQUcsS0FBSyxHQUFHLFNBQVMsQ0FBQzs7SUFFM0IsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLFNBQVM7UUFDM0I7WUFDSSxZQUFZLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDekQsWUFBWSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELFlBQVksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RCxhQUFhLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDN0Q7UUFDRCxNQUFNO0tBQ1QsQ0FBQzs7SUFFRixPQUFPLFVBQVU7VUFDWDtZQUNFLEtBQUssRUFBRSxLQUFLO1lBQ1osU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLFVBQVU7WUFDdEIsS0FBSyxFQUFFLEtBQUs7U0FDZjtVQUNDLEtBQUssQ0FBQztFQUNmOzs7OztBQUtELFNBQVMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQzs7Ozs7Ozs7OztBQVV0QyxTQUFTLENBQUMsU0FBUyxHQUFHLFVBQVUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzVDLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDOztJQUUvQixJQUFJLEtBQUssRUFBRTtRQUNQLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsQ0FBQyxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRTNDLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDeEQ7RUFDSjs7Ozs7OztBQU9ELFNBQVMsQ0FBQyxXQUFXLEdBQUcsVUFBVSxLQUFLLEVBQUUsS0FBSyxFQUFFO0lBQzVDLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDOztJQUUvQixJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1FBQ3hCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztLQUM3QztFQUNKOzs7Ozs7O0FBT0QsU0FBUyxDQUFDLFNBQVMsR0FBRyxVQUFVLFFBQVEsRUFBRSxJQUFJLEVBQUU7SUFDNUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7UUFDL0IsT0FBTztLQUNWO0lBQ0QsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRSxJQUFJLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO1FBQ3ZELFFBQVEsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pDO0lBQ0QsT0FBTyxJQUFJLEdBQUcsR0FBRyxHQUFHLFFBQVEsR0FBRyxHQUFHLENBQUM7Q0FDdEMsQ0FBQzs7QUMxaEJGLElBQUlDLFlBQVUsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDOztBQUV4QyxJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7O0FBRXpCLFNBQVMsYUFBYSxDQUFDLE9BQU8sRUFBRTtJQUM1QixJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNsQixJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7O0lBRW5CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hDLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ2hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdkI7WUFDRztZQUNBLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUNoRDtLQUNKO0lBQ0QsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQy9COztBQUVELFNBQVMsYUFBYSxDQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFO0lBQ3BFLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QixJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0MsSUFBSSxNQUFNLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDMUI7SUFDRCxJQUFJLEdBQUcsR0FBRyxhQUFhLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSTtVQUN2QyxhQUFhLENBQUMsZUFBZSxDQUFDLEdBQUcsSUFBSTtVQUNyQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOztJQUUzQixJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0QixPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUMvQjs7SUFFRCxJQUFJLEVBQUUsR0FBR0gsTUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDMUIsT0FBTyxFQUFFLENBQUM7Q0FDYjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtJQUNuQyxvQ0FBb0M7Ozs7UUFJaEMsSUFBSSxFQUFFLEVBQUU7Ozs7Ozs7Ozs7Ozs7OztRQWVSLFNBQVMsRUFBRSxJQUFJOzs7OztRQUtmLFNBQVMsRUFBRSxJQUFJOzs7OztRQUtmLFdBQVcsRUFBRSxLQUFLOzs7Ozs7Ozs7Ozs7Ozs7UUFlbEIsS0FBSyxFQUFFLElBQUk7Ozs7O1FBS1gsdUJBQXVCLEVBQUUsSUFBSTs7UUFFN0IsUUFBUSxFQUFFLEVBQUU7UUFDWixhQUFhLEVBQUUsRUFBRTtRQUNqQixlQUFlLEVBQUUsRUFBRTtRQUNuQixjQUFjLEVBQUUsRUFBRTs7Ozs7UUFLbEIsZ0JBQWdCLEVBQUUsSUFBSTtLQUN6QixDQUFDO0NBQ0wsRUFBRSxZQUFZO0lBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDWixJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0tBQzFDOztJQUVELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTs7UUFFYixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDeEM7Q0FDSjs7QUFFRDtJQUNJLFNBQVMsRUFBRSxPQUFPOzs7Ozs7Ozs7SUFTbEIsVUFBVSxFQUFFLFVBQVUsTUFBTSxFQUFFLEtBQUssRUFBRTtRQUNqQyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztTQUMvRDtRQUNELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsSUFBSSxPQUFPLEVBQUU7O1lBRVQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7O2dCQUUzQixLQUFLLEdBQUdHLFlBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7YUFDdEM7O1lBRUQsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7O1lBRXRCLElBQUksSUFBSSxDQUFDLHVCQUF1QixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFO2dCQUN0RCxJQUFJLEtBQUssRUFBRTtvQkFDUCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUM5QjtxQkFDSTtvQkFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUMvQjthQUNKO1NBQ0o7S0FDSjs7Ozs7SUFLRCxXQUFXLEVBQUUsU0FBUyxHQUFHLEVBQUU7UUFDdkIsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUU7WUFDakIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzdCO0tBQ0o7Ozs7OztJQU1ELGdCQUFnQixFQUFFLFVBQVUsTUFBTSxFQUFFO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDckQ7O0lBRUQsa0JBQWtCLEVBQUUsWUFBWTtRQUM1QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztLQUNoQztJQUNELGtCQUFrQixFQUFFLFlBQVk7UUFDNUIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7S0FDaEM7Ozs7Ozs7SUFPRCxHQUFHLEVBQUUsVUFBVSxNQUFNLEVBQUUsS0FBSyxFQUFFO1FBQzFCLElBQUksT0FBTyxNQUFNLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDN0IsS0FBSyxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUU7Z0JBQ3BCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDN0I7U0FDSjthQUNJO1lBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDbEM7S0FDSjs7Ozs7O0lBTUQsR0FBRyxFQUFFLFVBQVUsTUFBTSxFQUFFO1FBQ25CLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsSUFBSSxPQUFPLEVBQUU7WUFDVCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7U0FDeEI7S0FDSjs7Ozs7O0lBTUQsWUFBWSxFQUFFLFNBQVMsTUFBTSxFQUFFLFVBQVUsRUFBRTtRQUN2QyxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7OztRQUdyQyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7UUFFckIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM3QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzs7UUFFOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFVBQVUsV0FBVyxFQUFFO1lBQ3hFLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzNDLE9BQU8sSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDO1NBQ3hDLEVBQUUsSUFBSSxDQUFDLENBQUM7O1FBRVQsSUFBSSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQy9DLElBQUksdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQzs7UUFFbkQsSUFBSSxDQUFDLGFBQWEsR0FBR0gsTUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLGVBQWUsR0FBR0EsTUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7O1FBRTFELElBQUksVUFBVSxFQUFFO1lBQ1osS0FBSyxJQUFJLE1BQU0sSUFBSSxnQkFBZ0IsRUFBRTtnQkFDakMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ2xCLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDO2lCQUMzRDthQUNKOztZQUVEQSxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUscUJBQXFCLENBQUMsQ0FBQztZQUN6REEsTUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLENBQUM7U0FDaEU7O1FBRUQsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUM3QixhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUc7Z0JBQ2pCLFVBQVUsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVU7Z0JBQzNDLElBQUksRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUk7Z0JBQy9CLE9BQU8sRUFBRSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUs7YUFDL0YsQ0FBQztTQUNMOztRQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDOztRQUVwQyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztLQUN6Qjs7Ozs7O0lBTUQsS0FBSyxFQUFFLFlBQVk7UUFDZixJQUFJLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDaEMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3RCLENBQUMsQ0FBQztRQUNILEtBQUssSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUM5QixRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUNqRTtRQUNELFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNwQyxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDcEMsUUFBUSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3hDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQzs7UUFFNUIsUUFBUSxDQUFDLGFBQWEsR0FBR0EsTUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEQsUUFBUSxDQUFDLGVBQWUsR0FBR0EsTUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDNUQsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQzs7UUFFcEMsT0FBTyxRQUFRLENBQUM7S0FDbkI7Ozs7Ozs7O0lBUUQsTUFBTSxFQUFFLFVBQVUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUU7UUFDdkMsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN2QyxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzNDLElBQUksVUFBVSxLQUFLLFFBQVEsSUFBSSxVQUFVLEtBQUssVUFBVSxJQUFJLFVBQVUsS0FBSyxNQUFNO2VBQzFFLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztVQUN6Qjs7WUFFRSxHQUFHLEdBQUcsTUFBTSxDQUFDO1lBQ2IsTUFBTSxHQUFHLFVBQVUsQ0FBQztZQUNwQixVQUFVLEdBQUcsTUFBTSxDQUFDO1NBQ3ZCO1FBQ0QsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLFVBQVUsS0FBSyxRQUFRLElBQUksVUFBVSxLQUFLLE1BQU0sRUFBRTtZQUNsRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEVBQUU7Z0JBQy9CLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7O2dCQUU1QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQzthQUN6QjtTQUNKO1FBQ0QsSUFBSSxVQUFVLEtBQUssVUFBVSxJQUFJLFVBQVUsS0FBSyxNQUFNLEVBQUU7WUFDcEQsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxFQUFFO2dCQUNqQyxlQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUM5QixJQUFJLFVBQVUsS0FBSyxNQUFNLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO2lCQUN6QjthQUNKO1NBQ0o7S0FDSjs7Ozs7OztJQU9ELFFBQVEsRUFBRSxVQUFVLFVBQVUsRUFBRSxNQUFNLEVBQUU7UUFDcEMsSUFBSSxVQUFVLEtBQUssUUFBUSxJQUFJLFVBQVUsS0FBSyxVQUFVLElBQUksVUFBVSxLQUFLLE1BQU07ZUFDMUUsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDO1VBQ3pCOztZQUVFLE1BQU0sR0FBRyxVQUFVLENBQUM7WUFDcEIsVUFBVSxHQUFHLE1BQU0sQ0FBQztTQUN2QjtRQUNELElBQUksVUFBVSxLQUFLLFFBQVEsSUFBSSxVQUFVLEtBQUssTUFBTSxFQUFFO1lBQ2xELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7Z0JBQ2xDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7Z0JBRWxDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO2FBQ3pCO1NBQ0o7UUFDRCxJQUFJLFVBQVUsS0FBSyxVQUFVLElBQUksVUFBVSxLQUFLLE1BQU0sRUFBRTtZQUNwRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUFFO2dCQUNwQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3BDLElBQUksVUFBVSxLQUFLLE1BQU0sRUFBRTtvQkFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7aUJBQ3pCO2FBQ0o7U0FDSjtLQUNKOzs7Ozs7O0lBT0QsU0FBUyxFQUFFLFVBQVUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7UUFFckMsUUFBUSxVQUFVO1lBQ2QsS0FBSyxRQUFRO2dCQUNULE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxTQUFTLENBQUM7WUFDcEQsS0FBSyxVQUFVO2dCQUNYLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxTQUFTLENBQUM7U0FDekQ7S0FDSjs7Ozs7O0lBTUQsU0FBUyxFQUFFLFVBQVUsVUFBVSxFQUFFLE1BQU0sRUFBRTtRQUNyQyxPQUFPLFVBQVU7WUFDYixLQUFLLFFBQVE7Z0JBQ1QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RDLEtBQUssVUFBVTtnQkFDWCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDM0M7S0FDSjs7Ozs7O0lBTUQsYUFBYSxFQUFFLFVBQVUsTUFBTSxFQUFFO1FBQzdCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNqQztZQUNELE9BQU87U0FDVjs7UUFFRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLElBQUksTUFBTSxFQUFFO1lBQ1IsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUMvQixJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNaLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQzthQUN6QjtTQUNKO0tBQ0o7Ozs7SUFJRCxpQkFBaUIsRUFBRSxZQUFZO1FBQzNCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDeEMsS0FBSyxJQUFJLE1BQU0sSUFBSSxhQUFhLEVBQUU7WUFDOUIsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7U0FDeEM7O1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7S0FDekI7Ozs7O0lBS0QsY0FBYyxFQUFFLFVBQVUsTUFBTSxFQUFFO1FBQzlCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNsQztZQUNELE9BQU87U0FDVjs7UUFFRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLElBQUksTUFBTSxFQUFFO1lBQ1IsSUFBSSxVQUFVLEdBQUcsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2IsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO2FBQ3pCO1NBQ0o7S0FDSjs7OztJQUlELGtCQUFrQixFQUFFLFlBQVk7UUFDNUIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUN4QyxLQUFLLElBQUksTUFBTSxJQUFJLGFBQWEsRUFBRTtZQUM5QixhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztTQUN6Qzs7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztLQUN6Qjs7Ozs7O0lBTUQsZ0JBQWdCLEVBQUUsVUFBVSxNQUFNLEVBQUU7UUFDaEMsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUN4QyxPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO2VBQ3ZCLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUM7S0FDeEM7Ozs7OztJQU1ELGtCQUFrQixFQUFFLFlBQVk7UUFDNUIsSUFBSSxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDeEMsS0FBSyxJQUFJLE1BQU0sSUFBSSxhQUFhLEVBQUU7WUFDOUIsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFO2dCQUMvQixlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2hDO1NBQ0o7UUFDRCxPQUFPLGVBQWUsQ0FBQztLQUMxQjs7Ozs7SUFLRCxZQUFZLEVBQUUsWUFBWTtRQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztLQUN6Qjs7SUFFRCxhQUFhLEVBQUUsWUFBWTtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLGFBQWE7Z0JBQzVCLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7YUFDdEUsQ0FBQztTQUNMO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0tBQzNCO0NBQ0osQ0FBQzs7QUM3ZUYsSUFBSSxzQkFBc0IsR0FBRyxDQUFDLENBQUM7QUFDL0IsSUFBSSx3QkFBd0IsR0FBRyxDQUFDLENBQUM7QUFDakMsSUFBSSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7Ozs7O0FBSzdCLElBQUksb0JBQW9CLEdBQUcsRUFBRSxDQUFDOzs7QUFHOUIsU0FBUyxjQUFjLENBQUMsTUFBTSxFQUFFO0lBQzVCLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRTs7O1FBRzlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMxQztJQUNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM1Qjs7O0FBR0QsU0FBUyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRTtJQUNwRCxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUU7UUFDckQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDbEY7Q0FDSjs7QUFFRCxJQUFJLGlCQUFpQixHQUFHLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQzs7QUFFcEQsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7SUFFeEIsZ0JBQWdCLEVBQUUsRUFBRTtJQUNwQixVQUFVLEVBQUUsRUFBRTs7Q0FFakIsRUFBRSxZQUFZO0lBQ1gsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7O0lBRXJCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDOztJQUV0QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztDQUN4QixFQUFFOztJQUVDLElBQUksRUFBRSxVQUFVLFFBQVEsRUFBRTtRQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUN0QixRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDekM7O0lBRUQsVUFBVSxFQUFFLFVBQVUsTUFBTSxFQUFFO1FBQzFCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMsT0FBTyxRQUFRLEtBQUssSUFBSSxJQUFJLFFBQVEsS0FBSyxTQUFTLENBQUM7S0FDdEQ7O0lBRUQsY0FBYyxFQUFFLFVBQVUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7UUFDL0MsSUFBSSxPQUFPLEVBQUU7WUFDVCxRQUFRLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQzs7WUFFdkQsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDMUI7aUJBQ0k7O2dCQUVELE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDNUI7U0FDSjtLQUNKOztJQUVELGtCQUFrQixFQUFFLFlBQVk7UUFDNUIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0tBQzVCOztJQUVELGdCQUFnQixFQUFFLFVBQVUsSUFBSSxFQUFFO1FBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztLQUNqQzs7SUFFRCxzQkFBc0IsRUFBRSxVQUFVLFFBQVEsRUFBRSxPQUFPLEVBQUU7UUFDakQsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQzs7UUFFcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDOztRQUVwRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7O1FBRXBCLE9BQU8sV0FBVyxDQUFDO0tBQ3RCOztJQUVELFVBQVUsRUFBRSxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtRQUM1QyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2xDLElBQUksUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7UUFFbkMsSUFBSSxRQUFRLEtBQUssSUFBSSxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUU7WUFDN0MsT0FBTyxLQUFLLENBQUM7U0FDaEI7O1FBRUQsUUFBUSxJQUFJO1lBQ1IsS0FBSyxJQUFJO2dCQUNMLElBQUksRUFBRSxLQUFLLFlBQVksWUFBWSxDQUFDLEVBQUU7O29CQUVsQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDbkMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNuQztvQkFDRCxLQUFLLEdBQUcsaUJBQWlCLENBQUM7aUJBQzdCO2dCQUNELEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM3QyxNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUMsTUFBTTtZQUNWLEtBQUssSUFBSTtnQkFDTCxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEQsTUFBTTtZQUNWLEtBQUssSUFBSTtnQkFDTCxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0RCxNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixNQUFNO1lBQ1YsS0FBSyxLQUFLO2dCQUNOLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNoQyxNQUFNO1lBQ1YsS0FBSyxLQUFLO2dCQUNOLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFF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QkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUU7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7O0lBRTlCLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtRQUNYLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7UUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNqQixNQUFNO1FBQ0gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNuQjs7SUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEQsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7O1FBRWxELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHOzs7UUFHM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoRixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ04sT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7O0lBRXBELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDNUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztJQUV2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDNUIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7UUFFbEQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7O0lBR2hDLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDaEYsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hELEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7OztJQUd2RCxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7O0lBRTNDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7O0lBRTNDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7O0lBRTVDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDNUMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3ZDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7OztJQUcxQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDOzs7SUFHbEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDOzs7SUFHbEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDbEMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDOzs7SUFHbkMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDekMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUN6QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUV6QyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBTXpCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQzs7Ozs7Ozs7O0FBU3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDOztJQUV2QixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7UUFDWCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3JELE1BQU07UUFDSCxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7UUFFakQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3ZELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7O1FBRXpELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDakQ7O0lBRUQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRWpDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7OztBQVdGLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7SUFDdkMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ1AsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2IsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2IsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7O0lBRWxCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFOztJQUVuRCxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNkLENBQUMsSUFBSSxHQUFHLENBQUM7SUFDVCxDQUFDLElBQUksR0FBRyxDQUFDO0lBQ1QsQ0FBQyxJQUFJLEdBQUcsQ0FBQzs7SUFFVCxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7O0lBR2pELEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzs7SUFHdEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUM1QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRTVDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtRQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbkI7SUFDRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7SUFFaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbkI7OztJQUdELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDNUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUM1QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7SUFFaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbkI7OztJQUdELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDNUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUM1QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDbEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1YsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFZixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7UUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ25COzs7SUFHRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMz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LENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ1YsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ1YsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDOztRQUVWLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNYLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDOztJQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDdEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVaLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFjRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQy9ELElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUN2QixFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUM3QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUM1QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDYixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7Ozs7QUFZRixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtJQUN2RCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQzVCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ2hDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBY0YsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtJQUM3RCxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQztRQUN2QixFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDdkIsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQzVCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtJQUMxQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUc7UUFD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QUcsQ0FBQztRQUNWLEVBQUUsSUFBSSxHQUFHLENBQUM7S0FDYjs7SUFFRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDL0MsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMvQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVaLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFD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LEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7OztJQVNELEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxRQUFRLEVBQUUsVUFBVSxHQUFHLEVBQUU7UUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRXZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7OztJQU1ELEtBQUssRUFBRSxZQUFZO1FBQ2YsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzlDOzs7Ozs7O0lBT0QsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMs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O0lBQzlCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7OztBQU9GLE9BQU8sQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzFCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMxQyxDQUFDOzs7Ozs7OztBQVFGLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQzs7Ozs7Ozs7QUFRaEMsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQzs7Ozs7OztBQU83QixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUN6QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7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QUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNO1FBQ1Y7WUFDSSxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDO0tBQzlDO0lBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixPQUFPLENBQUMsYUFBYSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7O0lBRTdDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDakIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQzs7SUFFdkIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDOztJQUUzQyxRQUFRLEtBQUs7UUFDVCxLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUU7Z0JBQ3BCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDaEM7aUJBQ0k7Z0JBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDakI7WUFDRCxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxH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RTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQzs7Ozs7Ozs7SUFRSEMsZ0JBQWMsQ0FBQ0QsT0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQzs7Ozs7Ozs7SUFRSEMsZ0JBQWMsQ0FBQ0QsT0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQztDQUNOOzs7Ozs7Ozs7O0FBVUQsVUFBVSxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENB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R0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs7SUFFNUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDOzs7Ozs7SUFNM0MsUUFBUSxLQUFLO1FBQ1QsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxH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QUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2VBQ2pFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDMUU7Ozs7Ozs7SUFPRCxrQkFBa0IsRUFBRSxVQUFVLElBQUksRUFBRTs7UUFFaEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7O1FBRTFCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQzNCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOztRQUUzQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztlQUNqRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1RTs7Ozs7OztJQU9ELFlBQVksRUFBRSxVQUFVLENBQUMsRUFBRTtRQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7UUFFMUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQzs7UUFFakIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7ZUFDeEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkU7Ozs7O0lBS0QsUUFBUSxFQUFFLFlBQVk7UUFDbEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7ZUFDM0QsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdEU7Ozs7OztJQU1ELGNBQWMsRUFBRSxVQUFVLE1BQU0sRUFBRTtRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNwQzs7Ozs7OztJQU9ELGFBQWEsRUFBRSxDQUFDLFlBQVk7O1FBRXhCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOztRQUV2QixPQUFPLFVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRTtZQUM3QixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUMzQixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7WUFFM0IsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzs7WUFFckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFcEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFcEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFckUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3JCLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7WUFFMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFD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Q0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUU3QyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7UUFHN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUU3QyxPQUFPLElBQUksQ0FBQztLQUNmOzs7OztJQUtE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QyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7OztRQUd2REMsU0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7O1FBRXRCQSxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7UUFFdEJBLFNBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOztRQUV0QkEsU0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7O1FBRXRCQSxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUM3RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7UUFFdEJBLFNBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOzs7UUFHdEIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNuQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRztZQUNaLElBQUksTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDOztZQUV4QixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakQsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Ozs7WUFJaERBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xEQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O1lBRWpEQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakRBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O1lBRWhEQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNyREEsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BEQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcERBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDdEQ7YUFDSTtZQUNELElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUMzQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDO1lBQzNCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDekIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDO1lBQzdCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztZQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDOzs7WUFHMUIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN2RixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDOztZQUV2RixJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNoQyxJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7O1lBR2hDQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0NBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFN0NBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUU3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMs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RSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHO2dCQUNoQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwQixJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDckMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFOztnQkFFckMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENB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QztZQUNsQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7O1lBRWxDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxHQUFHLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDdkIsSUFBSSxPQUFPLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM5QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O1lBR2hCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzs7WUFFekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzFCLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRTdCLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7U0FDdkU7UUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7S0FDaEI7Ozs7O0lBS0QsY0FBYyxFQUFFLFlBQVk7UUFDeEIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDckIsT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQ25EO2FBQ0k7WUFDRCxPQUFPLElBQUksQ0FBQztTQUNmO0tBQ0o7Ozs7SUFJRCxvQkFBb0IsRUFBRSxZQUFZO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNwQyxPQUFPO1NBQ1Y7O1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLEVBQUU7WUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3ZEOztRQUVELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDakMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzs7UUFFM0IsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzs7UUFFcEQsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0MsSUFBSSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDN0MsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzlDOztRQUVELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMvQyxJQUFJLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDbkMsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQzs7Z0JBRWpDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzNCLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUNqRTthQUNKO1lBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUNwQixNQUFNLEVBQUUsQ0FBQztTQUNaOztRQUVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztLQUNoQjs7Ozs7SUFLRCxtQkFBbUIsRUFBRSxZQUFZO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ25CLE9BQU87U0FDVjs7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQy9COztRQUVELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDakMsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFDekMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzs7UUFFM0IsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5QyxPQUFPO1NBQ1Y7UUFDRCxLQUFLLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQzs7UUFFNUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUc7WUFDcEUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDeEIsSUFBSSxFQUFFLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzlDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN6QjtTQUNKO1FBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0tBQ2hCOzs7Ozs7SUFNRCxjQUFjLEVBQUUsVUFBVSxNQUFNLEVBQUU7O1FBRTlCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDakMsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDMUMsSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDdEMsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7O1FBRXhDLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDOztRQUV0QixJQUFJLHNCQUFzQixHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQzs7UUFFL0QsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQzNDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDL0IsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM5RCxJQUFJLE9BQU8sRUFBRTtZQUNULFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztTQUMvRTtRQUNELElBQUksUUFBUSxFQUFFO1lBQ1YsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1NBQ2hGOztRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUM1QjtLQUNKOzs7OztJQUtELE9BQU8sRUFBRSxVQUFVLFFBQVEsRUFBRTs7UUFFekIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7UUFFeEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxJQUFJLE1BQU0sRUFBRTtZQUNSLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNwQyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7O2dCQUV0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDcEQsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN4QyxRQUFRLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQzVDOztnQkFFRCxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7b0JBQ3JCLFFBQVEsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3hEO2FBQ0o7U0FDSjtRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFDaEUsS0FBSyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUM1QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDbEMsSUFBSSxHQUFHLEVBQUU7b0JBQ0wsTUFBTSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNwQzthQUNKO1NBQ0o7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUN6Qzs7Q0FFSixDQUFDLENBQUM7O0FBRUgsUUFBUSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDO0FBQ2hELFFBQVEsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQztBQUNsRCxRQUFRLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUM7O0FBRWhELFFBQVEsQ0FBQyxlQUFlLEdBQUcsWUFBWSxDQUFDLGVBQWUsQ0FBQztBQUN4RCxRQUFRLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUM7O0FBRXBELFFBQVEsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDOztBQ3RqQi9COzs7Ozs7O0FBT0EsSUFBSUQsT0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNOztBQUUzQjtJQUNJLE9BQU8sRUFBRSxLQUFLOzs7O0lBSWQsYUFBYSxFQUFFLENBQUM7Ozs7SUFJaEIsY0FBYyxFQUFFLENBQUM7Q0FDcEIsRUFBRSxXQUFXO0lBQ1YsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQ2hCOztBQUVEOzs7O0lBSUksS0FBSyxFQUFFLFdBQVc7UUFDZCxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3pDLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDdkMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNqQyxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7O1FBRWYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDO1lBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUM7O2dCQUUxQixTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxTQUFTLEVBQUU7b0JBQ1gsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMxQjtnQkFDRCxJQUFJLE9BQU8sRUFBRTtvQkFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMzQjtnQkFDRCxJQUFJLENBQUMsR0FBRyxhQUFhLElBQUksQ0FBQyxHQUFHLGNBQWMsRUFBRTtvQkFDekMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDckU7YUFDSjtTQUNKOztRQUVELFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLFVBQVUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDOztRQUVyQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7O1FBRWpDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDckM7Q0FDSixDQUFDOztBQzlERixJQUFJLFdBQVcsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDOzs7Ozs7Ozs7OztBQVdoQyxJQUFJUSxNQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU07O0FBRTFCO0lBQ0ksT0FBTyxFQUFFLEtBQUs7Ozs7SUFJZCxhQUFhLEVBQUUsQ0FBQzs7OztJQUloQixjQUFjLEVBQUUsQ0FBQzs7OztJQUlqQixhQUFhLEVBQUUsQ0FBQzs7OztJQUloQixNQUFNLEVBQUUsS0FBSztDQUNoQixFQUFFLFdBQVc7SUFDVixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDaEI7O0FBRUQ7Ozs7SUFJSSxLQUFLLEVBQUUsV0FBVzs7UUFFZCxJQUFJLE1BQU0sR0FBRztZQUNULElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUNoRSxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDaEUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQy9ELElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUMvRCxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDaEUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQ25FLENBQUM7O1FBRUYsSUFBSSxRQUFRLEdBQUcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNyQixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDbkIsS0FBSyxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUU7WUFDcEIsWUFBWSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFDeEMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQzVDO1FBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDbkQ7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRCxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDbkIsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLEtBQUssSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFO1lBQ3BCLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDdEMsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDakQsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQy9DLElBQUksUUFBUSxHQUFHLFFBQVEsS0FBSyxRQUFRLENBQUM7Z0JBQ3JDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUN2QyxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxRQUFRLEVBQUU7d0JBQ3pCLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQztxQkFDbEI7b0JBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxZQUFZLENBQUMsR0FBRyxLQUFLLENBQUM7aUJBQ3hFO2FBQ0o7WUFDRCxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDaEc7WUFDRCxVQUFVLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDbkMsWUFBWSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUM7U0FDckM7O1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3hDO0NBQ0osQ0FBQyxDQUFDOztBQUVILFNBQVMsV0FBVyxDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFOztJQUVyRCxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7O0lBRXZCLElBQUksS0FBSyxHQUFHLElBQUlSLE9BQUssQ0FBQztRQUNsQixhQUFhLEVBQUUsYUFBYTtRQUM1QixjQUFjLEVBQUUsY0FBYztLQUNqQyxDQUFDLENBQUM7O0lBRUgsT0FBTyxHQUFHO1FBQ04sS0FBSyxJQUFJO1lBQ0wsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNoRSxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN2RCxNQUFNO1FBQ1YsS0FBSyxJQUFJO1lBQ0wsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNoRSxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hELE1BQU07UUFDVixLQUFLLElBQUk7WUFDTCxPQUFPLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDeEQsTUFBTTtRQUNWLEtBQUssSUFBSTtZQUNMLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDaEUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkQsTUFBTTtRQUNWLEtBQUssSUFBSTtZQUNMLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDaEUsTUFBTTtRQUNWLEtBQUssSUFBSTtZQUNMLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDaEUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuRCxNQUFNO0tBQ2I7SUFDRCxLQUFLLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sS0FBSyxDQUFDO0NBQ2hCOztBQ3BJRDs7Ozs7Ozs7Ozs7O0FBWUEsSUFBSVMsUUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLHFDQUFxQztJQUM3RCxPQUFPLEVBQUUsS0FBSzs7OztJQUlkLGFBQWEsRUFBRSxFQUFFOzs7O0lBSWpCLGNBQWMsRUFBRSxFQUFFOzs7OztJQUtsQixRQUFRLEVBQUUsQ0FBQzs7OztJQUlYLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUM7Ozs7O0lBS3RCLFVBQVUsRUFBRSxDQUFDOzs7O0lBSWIsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFFOzs7OztJQUtwQixNQUFNLEVBQUUsQ0FBQzs7Q0FFWixFQUFFLFdBQVc7SUFDVixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDaEI7O0FBRUQ7Ozs7SUFJSSxLQUFLLEVBQUUsV0FBVztRQUNkLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDekMsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7UUFFdkMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDNUMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFDN0MsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7O1FBRXhDLElBQUksV0FBVyxHQUFHLENBQUMsYUFBYSxHQUFHLENBQUMsS0FBSyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0QsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvQixZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9CLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7O1FBRTdCLElBQUksV0FBVyxHQUFHLFdBQVcsR0FBRyxNQUFNLEdBQUcsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUNuRSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLGFBQWEsR0FBRyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7O1FBRWpGLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ1AsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQyxDQUFDOztRQUVULElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDekIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM3QixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQy9CLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDakMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNuQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOztRQUV6QixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDWixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksY0FBYyxFQUFFLENBQUMsR0FBRyxFQUFFO1lBQ25DLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFO2dCQUNsQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQztnQkFDdEIsQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUM7OztnQkFHdkIsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUM7Z0JBQzFGLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO2dCQUNwRCxDQUFDLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUM7O2dCQUV6RixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQixZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDOUIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUM7Z0JBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUM7Z0JBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUM7Z0JBQ2xCLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixNQUFNLEVBQUUsQ0FBQzthQUNaO1NBQ0o7O1FBRUQsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7O1FBRW5CLElBQUksR0FBRyxHQUFHLGFBQWEsR0FBRyxDQUFDLENBQUM7O1FBRTVCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsY0FBYyxFQUFFLENBQUMsR0FBRyxFQUFFO1lBQ2xDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFO2dCQUNqQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDOztnQkFFdkIsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNsQixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7Z0JBRWxCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNsQixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDckI7U0FDSjs7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDdkQ7Q0FDSixDQUFDOztBQ3RJRjs7Ozs7Ozs7Ozs7QUFXQSxJQUFJQyxtQkFBaUIsR0FBRyxRQUFRLENBQUMsTUFBTTs7QUFFdkM7SUFDSSxPQUFPLEVBQUUsS0FBSzs7OztJQUlkLFNBQVMsRUFBRSxJQUFJOztDQUVsQixFQUFFLFdBQVc7SUFDVixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Q0FDaEI7O0FBRUQ7Ozs7SUFJSSxLQUFLLEVBQUUsWUFBWTtRQUNmLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7O1FBRS9CLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUU7WUFDNUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDeEIsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7O1FBRXpDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRXZFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ3pDOztRQUVELElBQUksU0FBUyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzs7UUFFMUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNoQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7Z0JBRXJCLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQzs7Z0JBRTdCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ2pELE9BQU8sRUFBRSxDQUFDO2FBQ2I7U0FDSjs7UUFFRCxJQUFJLFdBQVcsR0FBRyxTQUFTLEdBQUcsTUFBTSxHQUFHLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDakUsSUFBSSxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0MsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7UUFFdkQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9CLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QixJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQzs7Z0JBRTVCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNsQixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7O2dCQUVsQixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ3JCO1NBQ0o7O1FBRUQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7S0FDNUI7Q0FDSixDQUFDOztBQ2xHRjs7OztBQUlBLEFBSUE7Ozs7O0FBS0EsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sOEJBQThCOzs7OztJQUtuRCxLQUFLLEVBQUUsR0FBRzs7Ozs7SUFLVixNQUFNLEVBQUUsR0FBRzs7Ozs7Ozs7Ozs7SUFXWCxJQUFJLEVBQUUsTUFBTSxDQUFDLGFBQWE7Ozs7Ozs7OztJQVMxQixNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUk7Ozs7Ozs7OztJQVNuQixLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU07Ozs7Ozs7OztJQVNwQixLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU07Ozs7Ozs7Ozs7O0lBV3BCLFNBQVMsRUFBRSxNQUFNLENBQUMsb0JBQW9COzs7Ozs7O0lBT3RDLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTTs7Ozs7SUFLeEIsU0FBUyxFQUFFLElBQUk7Ozs7Ozs7SUFPZixXQUFXLEVBQUUsQ0FBQzs7Ozs7Ozs7SUFRZCxLQUFLLEVBQUUsSUFBSTs7Ozs7SUFLWCxJQUFJLEVBQUUsSUFBSTs7Ozs7SUFLVixlQUFlLEVBQUUsQ0FBQzs7Ozs7SUFLbEIsZ0JBQWdCLEVBQUUsS0FBSzs7Ozs7O0lBTXZCLE9BQU8sRUFBRSxLQUFLOztJQUVkLElBQUksRUFBRSxLQUFLOzs7O0lBSVgsTUFBTSxFQUFFLENBQUM7O0NBRVosRUFBRSxZQUFZO0lBQ1gsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0NBQzdCOztBQUVEOztJQUVJLGVBQWUsRUFBRSxVQUFVLFFBQVEsRUFBRTtRQUNqQyxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3RCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDeEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7O1FBRTVCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRTs7WUFFN0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7U0FDbkQ7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3pCO2FBQ0ksSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0QixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDakI7O1FBRUQsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQ3JDOztJQUVELElBQUksRUFBRSxZQUFZLEVBQUU7SUFDcEIsTUFBTSxFQUFFLFlBQVksRUFBRTs7Ozs7SUFLdEIsS0FBSyxFQUFFLFlBQVk7UUFDZixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQzFCO0tBQ0o7O0lBRUQsTUFBTSxFQUFFLFVBQVUsUUFBUSxFQUFFLEVBQUU7OztJQUc5QixZQUFZLEVBQUUsVUFBVSxRQUFRLEVBQUU7UUFDOUIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN0QixHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0UsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDOzs7O1FBSTVELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsZUFBZSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1NBQzFCOztRQUVELElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7O1FBRWxELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztTQUM3QjtRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsVUFBVSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hELElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztTQUM5Qjs7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0tBQ3BDOztJQUVELGlCQUFpQixFQUFFLFlBQVk7UUFDM0IsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1gsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDO1NBQy9CO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0tBQ3JCO0lBQ0QsaUJBQWlCLEVBQUUsWUFBWTtRQUMzQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDWCxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUM7U0FDL0I7UUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDckI7SUFDRCxxQkFBcUIsRUFBRSxZQUFZO1FBQy9CLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUM5QixJQUFJLFNBQVMsS0FBSyxNQUFNLENBQUMsc0JBQXNCO2dCQUMzQyxTQUFTLEtBQUssTUFBTSxDQUFDLHFCQUFxQjtjQUM1QztnQkFDRSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDekI7aUJBQ0ksSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLG9CQUFvQjtnQkFDOUMsU0FBUyxLQUFLLE1BQU0sQ0FBQyxxQkFBcUI7Y0FDNUM7Z0JBQ0UsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO2FBQ3hCO2lCQUNJO2dCQUNELE9BQU8sU0FBUyxDQUFDO2FBQ3BCO1NBQ0o7YUFDSTtZQUNELE9BQU8sU0FBUyxDQUFDO1NBQ3BCO0tBQ0o7SUFDRCxxQkFBcUIsRUFBRSxZQUFZO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztLQUN6Qjs7SUFFRCxxQkFBcUIsRUFBRSxVQUFVLENBQUMsRUFBRTtRQUNoQyxFQUFFLENBQUMsQ0FBQztRQUNKLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbEI7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDaEI7Ozs7SUFJRCxPQUFPLEVBQUUsVUFBVSxRQUFRLEVBQUU7O1FBRXpCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7O1FBRXhCLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztRQUU1QixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzlDLElBQUksWUFBWSxDQUFDO1lBQ2IsUUFBUSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDM0M7UUFDRCxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7S0FFekM7Ozs7O0lBS0QsWUFBWSxFQUFFLFlBQVksRUFBRTs7Ozs7O0lBTTVCLFlBQVksRUFBRSxZQUFZLEVBQUU7Q0FDL0IsQ0FBQyxDQUFDOztBQUVILE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUU7SUFDOUMsR0FBRyxFQUFFLFlBQVk7UUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDdEI7SUFDRCxHQUFHLEVBQUUsVUFBVSxLQUFLLEVBQUU7UUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7S0FDdkI7Q0FDSixDQUFDLENBQUM7QUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFO0lBQy9DLEdBQUcsRUFBRSxZQUFZO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0tBQ3ZCO0lBQ0QsR0FBRyxFQUFFLFVBQVUsS0FBSyxFQUFFO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0tBQ3hCO0NBQ0osQ0FBQyxDQUFDOzs7Ozs7O0FBT0gsT0FBTyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDOzs7O0FBSTNCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQzs7OztBQUk3QyxPQUFPLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7Ozs7QUFJN0IsT0FBTyxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDOzs7O0FBSS9DLE9BQU8sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQzs7OztBQUl6QixPQUFPLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7Ozs7QUFJM0MsT0FBTyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDOzs7O0FBSTdCLE9BQU8sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDOzs7Ozs7QUFNNUIsT0FBTyxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQzs7Ozs7O0FBTXhDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQzs7OztBQUlqRCxPQUFPLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7Ozs7QUFJN0MsT0FBTyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDOzs7O0FBSTdCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQzs7OztBQUl6QixPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7Ozs7QUFJM0IsT0FBTyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDOzs7O0FBSXJDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQzs7Ozs7O0FBTWpELE9BQU8sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDOzs7OztBQUt0QixPQUFPLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQzs7O0FBRzVCLE9BQU8sQ0FBQyw0QkFBNEIsR0FBRyxNQUFNLENBQUM7QUFDOUMsT0FBTyxDQUFDLDZCQUE2QixHQUFHLE1BQU0sQ0FBQztBQUMvQyxPQUFPLENBQUMsNkJBQTZCLEdBQUcsTUFBTSxDQUFDO0FBQy9DLE9BQU8sQ0FBQyw2QkFBNkIsR0FBRyxNQUFNLENBQUM7Ozs7OztBQU0vQyxPQUFPLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7Ozs7QUFJakMsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDOzs7Ozs7QUFNL0IsT0FBTyxDQUFDLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQzs7OztBQUkvRCxPQUFPLENBQUMscUJBQXFCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDOzs7O0FBSTdELE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7Ozs7QUFJN0QsT0FBTyxDQUFDLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQzs7Ozs7O0FBTTNELE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQzs7OztBQUkvQixPQUFPLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7Ozs7QUFJN0MsT0FBTyxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDOztBQzNaakQsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDOztBQUVsQixRQUFRLENBQUMsWUFBWSxHQUFHLFVBQVUsS0FBSyxFQUFFO0lBQ3JDLE9BQU8sQ0FBQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUN0QyxDQUFDOztBQUVGLFFBQVEsQ0FBQyxjQUFjLEdBQUcsVUFBVSxLQUFLLEVBQUU7SUFDdkMsS0FBSyxHQUFHLENBQUM7SUFDVCxLQUFLLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNwQixLQUFLLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNwQixLQUFLLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNwQixLQUFLLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNwQixLQUFLLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUNyQixLQUFLLEdBQUcsQ0FBQzs7SUFFVCxPQUFPLEtBQUssQ0FBQztDQUNoQixDQUFDOztBQUVGLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLEtBQUssRUFBRTtJQUMxQyxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztDQUNwRSxDQUFDOztBQ2hCRixJQUFJLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDOztBQUV6QyxTQUFTLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtJQUM1QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUM1RDtBQUNELFNBQVMsMEJBQTBCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRTs7SUFFakQsSUFBSSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLElBQUksTUFBTSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQyxNQUFNLEdBQUcsTUFBTSxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEQsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7O0lBRWxELE9BQU8sTUFBTSxDQUFDO0NBQ2pCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JELElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWTtJQUN2QyxxQ0FBcUM7Ozs7O1FBS2pDLEtBQUssRUFBRSxJQUFJOzs7OztRQUtYLE1BQU0sRUFBRSxJQUFJOzs7Ozs7Ozs7Ozs7UUFZWixPQUFPLEVBQUUsRUFBRTs7Ozs7O1FBTVgsWUFBWSxFQUFFLEtBQUs7S0FDdEIsQ0FBQztDQUNMLEVBQUU7O0lBRUMsV0FBVyxFQUFFLFdBQVc7O0lBRXhCLE1BQU0sRUFBRSxVQUFVLFFBQVEsRUFBRTs7UUFFeEIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN0QixHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQzs7UUFFbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQzs7UUFFNUIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDOzs7UUFHdkIsSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxZQUFZO2VBQ2hDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUs7Z0JBQ2pDLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxNQUFNLENBQUM7ZUFDaEUsSUFBSSxDQUFDLElBQUk7U0FDZixDQUFDOztRQUVGLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsY0FBYyxFQUFFLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDNUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxjQUFjLEVBQUUsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQzs7UUFFNUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBQ3hILEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsa0JBQWtCLEVBQUUsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQzs7UUFFeEgsSUFBSSxjQUFjLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQy9FLElBQUksY0FBYyxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFO1lBQ3hDLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2xHOzs7UUFHRCxJQUFJLE1BQU0sS0FBSyxLQUFLLEVBQUU7WUFDbEIsSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ2YsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDekI7U0FDSjs7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ3JCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDdkIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzFDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hGLEtBQUssSUFBSSxDQUFDLENBQUM7Z0JBQ1gsTUFBTSxJQUFJLENBQUMsQ0FBQzthQUNmO1NBQ0o7YUFDSTtZQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQzs7WUFFL0YsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxZQUFZLENBQUMsRUFBRTtnQkFDaEQsR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDdEM7U0FDSjs7UUFFRCxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDekM7O0lBRUQsa0JBQWtCLEVBQUUsVUFBVSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFO1FBQzNGLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNaLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDekIsSUFBSSxZQUFZLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFVBQVUsR0FBRywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNwRSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzthQUM3QjtZQUNELEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDOUU7YUFDSTs7WUFFRDtnQkFDSSxRQUFRLElBQUksT0FBTyxDQUFDLDZCQUE2QjttQkFDOUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyw0QkFBNEI7Y0FDckQ7Z0JBQ0UsR0FBRyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDNUY7aUJBQ0k7O2dCQUVELEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3BHO1NBQ0o7S0FDSjs7Ozs7O0lBTUQsY0FBYyxFQUFFLFVBQVUsUUFBUSxFQUFFO1FBQ2hDLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUM5QixHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztZQUNsRSxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN0QztLQUNKOztJQUVELFlBQVksRUFBRSxZQUFZO1FBQ3RCLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ2hFOztJQUVELFlBQVksRUFBRSxZQUFZO1FBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztTQUN4RDthQUNJO1lBQ0QsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDeEM7S0FDSjs7SUFFRCxJQUFJLEVBQUUsVUFBVSxRQUFRLEVBQUU7UUFDdEIsUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0tBQ25GOztJQUVELE1BQU0sRUFBRSxVQUFVLFFBQVEsRUFBRTtRQUN4QixRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUN6RDs7SUFFRCxJQUFJLEVBQUUsVUFBVSxHQUFHLEVBQUUsV0FBVyxFQUFFO1FBQzlCLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQyxJQUFJLFdBQVcsRUFBRTtZQUNiLEtBQUssQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1NBQ25DO1FBQ0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLEtBQUssQ0FBQyxNQUFNLEdBQUcsWUFBWTtZQUN2QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNqQyxDQUFDO1FBQ0YsS0FBSyxDQUFDLE9BQU8sR0FBRyxZQUFZO1lBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQy9CLENBQUM7O1FBRUYsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7O1FBRW5CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Q0FDSixDQUFDLENBQUM7O0FBRUgsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRTtJQUNoRCxHQUFHLEVBQUUsWUFBWTtRQUNiLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7U0FDM0I7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDdEI7SUFDRCxHQUFHLEVBQUUsVUFBVSxLQUFLLEVBQUU7UUFDbEIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1NBQ3ZEO2FBQ0k7WUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxFQUFFO2dCQUN2QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDaEI7WUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztTQUN2QjtLQUNKO0NBQ0osQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRTtJQUNqRCxHQUFHLEVBQUUsWUFBWTtRQUNiLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7U0FDNUI7UUFDRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7S0FDdkI7SUFDRCxHQUFHLEVBQUUsVUFBVSxLQUFLLEVBQUU7UUFDbEIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1NBQ3hEO2FBQ0k7WUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFO2dCQUN4QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDaEI7WUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztTQUN4QjtLQUNKO0NBQ0osQ0FBQyxDQUFDOztBQ3BQSCxJQUFJQyxjQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQzs7QUFFekMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZCdEQsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZO0lBQ3pDLHNDQUFzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBa0JsQyxLQUFLLEVBQUU7WUFDSCxFQUFFLEVBQUUsSUFBSTtZQUNSLEVBQUUsRUFBRSxJQUFJO1lBQ1IsRUFBRSxFQUFFLElBQUk7WUFDUixFQUFFLEVBQUUsSUFBSTtZQUNSLEVBQUUsRUFBRSxJQUFJO1lBQ1IsRUFBRSxFQUFFLElBQUk7U0FDWDs7Ozs7Ozs7Ozs7UUFXRCxNQUFNLEVBQUU7WUFDSixFQUFFLEVBQUUsSUFBSTtZQUNSLEVBQUUsRUFBRSxJQUFJO1lBQ1IsRUFBRSxFQUFFLElBQUk7WUFDUixFQUFFLEVBQUUsSUFBSTtZQUNSLEVBQUUsRUFBRSxJQUFJO1lBQ1IsRUFBRSxFQUFFLElBQUk7U0FDWDs7Ozs7UUFLRCxPQUFPLEVBQUUsRUFBRTtLQUNkLENBQUM7Q0FDTCxFQUFFOztJQUVDLFdBQVcsRUFBRSxhQUFhOztJQUUxQixNQUFNLEVBQUUsVUFBVSxRQUFRLEVBQUU7UUFDeEIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN0QixHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDOztRQUV4RSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztRQUU1QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7O1FBRXZCLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUN0RixHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7O1FBRXRGLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDOztRQUU5RixJQUFJLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDL0UsSUFBSSxjQUFjLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUU7WUFDeEMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN4Rzs7O1FBR0QsSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFO1lBQ2xCLElBQUksWUFBWSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNmLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQ3pCO1NBQ0o7O1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNyQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3ZCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMxQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3pFLEtBQUssSUFBSSxDQUFDLENBQUM7Z0JBQ1gsTUFBTSxJQUFJLENBQUMsQ0FBQzthQUNmO1NBQ0o7YUFDSTtZQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDOztZQUVqRixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUM5QixHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2FBQzVDO1NBQ0o7O1FBRUQsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDL0M7O0lBRUQsa0JBQWtCLEVBQUUsVUFBVSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7UUFDN0UsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNDLElBQUksR0FBRyxFQUFFO2dCQUNMLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLDJCQUEyQixHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDL0Y7aUJBQ0k7Z0JBQ0QsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzthQUNoSjtTQUNKO0tBQ0o7Ozs7OztJQU1ELGNBQWMsRUFBRSxVQUFVLFFBQVEsRUFBRTtRQUNoQyxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDOUIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztZQUN4RSxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQzVDO0tBQ0o7O0lBRUQsSUFBSSxFQUFFLFVBQVUsUUFBUSxFQUFFO1FBQ3RCLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0tBQ3pGOztJQUVELE1BQU0sRUFBRSxVQUFVLFFBQVEsRUFBRTtRQUN4QixRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO0tBQy9EOzs7SUFHRCxZQUFZLEVBQUUsWUFBWTtRQUN0QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ2YsT0FBT0EsY0FBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQzttQkFDakNBLGNBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM3QzthQUNJO1lBQ0QsT0FBT0EsY0FBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7bUJBQ3hCQSxjQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3BDO0tBQ0o7O0lBRUQsWUFBWSxFQUFFLFlBQVk7UUFDdEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUNmLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7bUJBQ2hDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO21CQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzttQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7bUJBQ2hDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO21CQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzNDO2FBQ0k7WUFDRCxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN4QztLQUNKOztJQUVELElBQUksRUFBRSxVQUFVLFNBQVMsRUFBRSxXQUFXLEVBQUU7UUFDcEMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQnJCLE1BQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsR0FBRyxFQUFFLE1BQU0sQ0FBQztZQUN2QyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakMsSUFBSSxXQUFXLEVBQUU7Z0JBQ2IsS0FBSyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7YUFDbkM7WUFDRCxLQUFLLENBQUMsTUFBTSxHQUFHLFlBQVk7Z0JBQ3ZCLE9BQU8sR0FBRyxDQUFDO2dCQUNYLElBQUksT0FBTyxLQUFLLENBQUMsQ0FBQztvQkFDZCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQ2pDO2FBQ0osQ0FBQztZQUNGLEtBQUssQ0FBQyxPQUFPLEdBQUcsWUFBWTtnQkFDeEIsT0FBTyxHQUFHLENBQUM7YUFDZCxDQUFDOztZQUVGLE9BQU8sRUFBRSxDQUFDO1lBQ1YsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7WUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDOUIsQ0FBQyxDQUFDOztRQUVILE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Q0FDSixDQUFDLENBQUM7O0FBRUgsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRTtJQUNsRCxHQUFHLEVBQUUsWUFBWTtRQUNiLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUM3QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztTQUM5QjtRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUN0QjtJQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtRQUNsQixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1NBQ3ZEO2FBQ0k7WUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxFQUFFO2dCQUN2QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDaEI7WUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztTQUN2QjtLQUNKO0NBQ0osQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRTtJQUNuRCxHQUFHLEVBQUUsWUFBWTtRQUNiLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUM3QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQztTQUMvQjtRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztLQUN2QjtJQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtRQUNsQixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1NBQ3hEO2FBQ0k7WUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFO2dCQUN4QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDaEI7WUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztTQUN4QjtLQUNKO0NBQ0osQ0FBQyxDQUFDO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUU7SUFDOUIsT0FBTyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztDQUM5Qzs7QUN4UUQ7Ozs7O0FBS0EsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sZ0NBQWdDOzs7O0lBSXhELFFBQVEsRUFBRSxJQUFJOzs7OztJQUtkLFFBQVEsRUFBRSxJQUFJOzs7OztJQUtkLElBQUksRUFBRSxNQUFNLENBQUMsU0FBUzs7SUFFdEIsV0FBVyxFQUFFLElBQUk7Q0FDcEI7O0FBRUQ7O0lBRUksU0FBUyxFQUFFLElBQUk7Ozs7O0lBS2YsVUFBVSxFQUFFLENBQUM7Ozs7O0lBS2IsV0FBVyxFQUFFLENBQUM7Ozs7Ozs7Ozs7OztJQVlkLE9BQU8sRUFBRSxJQUFJOzs7Ozs7Ozs7O0lBVWIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJOzs7Ozs7Ozs7SUFTckIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxHQUFHOzs7Ozs7SUFNckIsY0FBYyxFQUFFLElBQUk7Ozs7SUFJcEIsYUFBYSxFQUFFLElBQUk7Ozs7SUFJbkIsVUFBVSxFQUFFLElBQUk7Ozs7SUFJaEIsYUFBYSxFQUFFLEtBQUs7Ozs7SUFJcEIsVUFBVSxFQUFFLEtBQUs7Ozs7O0lBS2pCLGFBQWEsRUFBRSxLQUFLOzs7OztJQUtwQixZQUFZLEVBQUUsV0FBVzs7UUFFckIsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztlQUN6RSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7S0FDeEM7Ozs7OztJQU1ELFlBQVksRUFBRSxVQUFVLEdBQUcsRUFBRSxFQUFFOzs7Ozs7SUFNL0IsV0FBVyxFQUFFLFVBQVUsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFOztJQUUxQyxjQUFjLEVBQUUsVUFBVSxNQUFNLEVBQUUsR0FBRyxFQUFFO1FBQ25DLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1RCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUU7WUFDNUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3hDOztRQUVELE9BQU8sR0FBRyxDQUFDO0tBQ2Q7Ozs7Ozs7SUFPRCxLQUFLLEVBQUUsQ0FBQyxXQUFXO1FBQ2YsSUFBSSxVQUFVLEdBQUc7WUFDYixZQUFZLEVBQUUsZUFBZTtZQUM3QixNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXO1lBQzFDLGdCQUFnQjtZQUNoQixhQUFhLEVBQUUsV0FBVztZQUMxQixlQUFlLEVBQUUsWUFBWSxFQUFFLGVBQWU7U0FDakQsQ0FBQztRQUNGLE9BQU8sV0FBVztZQUNkLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7WUFFakQsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3BDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7WUFFcEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hDLElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Z0JBRXpCLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDakMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDakM7YUFDSjs7WUFFRCxPQUFPLFVBQVUsQ0FBQztTQUNyQixDQUFDO0tBQ0wsR0FBRztDQUNQLENBQUMsQ0FBQzs7Ozs7QUFLSCxVQUFVLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7Ozs7QUFJbEMsVUFBVSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDOzs7O0FBSWhDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQzs7OztBQUl4QyxVQUFVLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7Ozs7QUFJMUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDOzs7O0FBSXhDLFVBQVUsQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQzs7OztBQUlsRCxVQUFVLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7Ozs7QUFJOUMsVUFBVSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDOzs7O0FBSTlCLFVBQVUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzs7OztBQUloQyxVQUFVLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7Ozs7QUFJbEQsVUFBVSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDOzs7O0FBSTFCLFVBQVUsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQzs7QUM3TTVCOzs7O0FBSUEsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sMEJBQTBCOzs7OztJQUtsRCxRQUFRLEVBQUUsSUFBSTs7Ozs7SUFLZCxNQUFNLEVBQUUsSUFBSTs7Ozs7O0lBTVosc0JBQXNCLEVBQUUsS0FBSzs7Q0FFaEMsRUFBRSxZQUFZO0lBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDZCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjtDQUNKLEVBQUU7O0lBRUMsYUFBYSxFQUFFLFlBQVk7UUFDdkIsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3JFOztJQUVELEtBQUssRUFBRSxZQUFZO1FBQ2YsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM5QixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDckM7UUFDRCxPQUFPLElBQUksQ0FBQztLQUNmO0NBQ0osQ0FBQyxDQUFDOzs7QUFHSCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztBQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7QUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztBQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7O0FBRXhDLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztBQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDMUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO0FBQzVDLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUNwQixJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7O0FDeER0Qjs7OztBQUlBLElBQUlzQixhQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sdUNBQXVDOzs7OztJQUtsRSxHQUFHLEVBQUUsRUFBRTs7Ozs7SUFLUCxNQUFNLEVBQUUsQ0FBQzs7Ozs7SUFLVCxJQUFJLEVBQUUsR0FBRzs7Ozs7SUFLVCxHQUFHLEVBQUUsSUFBSTtDQUNaOztBQUVEOztJQUVJLHNCQUFzQixFQUFFLFdBQVc7UUFDL0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzVFO0lBQ0QseUJBQXlCLEVBQUUsWUFBWTtRQUNuQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1FBQ3BDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUNsQzs7OztJQUlELEtBQUssRUFBRSxXQUFXO1FBQ2QsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUN0QixNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDNUIsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQzs7UUFFdEIsT0FBTyxNQUFNLENBQUM7S0FDakI7Q0FDSixDQUFDOztBQ3RERjs7OztBQUlBLElBQUlDLGNBQVksR0FBRyxNQUFNLENBQUMsTUFBTTs7QUFFaEM7Ozs7SUFJSSxJQUFJLEVBQUUsQ0FBQyxDQUFDOzs7O0lBSVIsS0FBSyxFQUFFLENBQUM7Ozs7SUFJUixJQUFJLEVBQUUsQ0FBQyxDQUFDOzs7O0lBSVIsR0FBRyxFQUFFLENBQUM7Ozs7SUFJTixHQUFHLEVBQUUsQ0FBQzs7OztJQUlOLE1BQU0sRUFBRSxDQUFDLENBQUM7Q0FDYjs7QUFFRDs7SUFFSSxzQkFBc0IsRUFBRSxXQUFXO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNsRzs7SUFFRCx5QkFBeUIsRUFBRSxZQUFZO1FBQ25DLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ25DOzs7O0lBSUQsS0FBSyxFQUFFLFdBQVc7UUFDZCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMxQixNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDeEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUN0QixNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7O1FBRTVCLE9BQU8sTUFBTSxDQUFDO0tBQ2pCO0NBQ0osQ0FBQzs7QUMvREYsbUJBQWUsbzljQUFvOWMsQ0FBQzs7QUNNcCtjO0FBQ0EsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDOztBQUUvQixJQUFJLGtCQUFrQixHQUFHLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3hKLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUMzSyxJQUFJLHdCQUF3QixHQUFHLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDOztBQUV2SyxJQUFJLGNBQWMsR0FBRztJQUNqQixrQkFBa0IsRUFBRSxtQkFBbUI7SUFDdkMsa0JBQWtCLEVBQUUsbUJBQW1CO0NBQzFDLENBQUM7QUFDRixJQUFJLGVBQWUsR0FBRztJQUNsQixRQUFRLEVBQUUsYUFBYTtJQUN2QixZQUFZLEVBQUUsYUFBYTtJQUMzQixZQUFZLEVBQUUsYUFBYTtJQUMzQixhQUFhLEVBQUUsY0FBYztJQUM3QixXQUFXLEVBQUUsWUFBWTtJQUN6QiwyQkFBMkIsRUFBRSwwQkFBMEI7Q0FDMUQsQ0FBQzs7O0FBR0YsSUFBSSxjQUFjLENBQUM7Ozs7Ozs7Ozs7OztBQVluQixJQUFJLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWTtJQUMvQyxJQUFJLENBQUMsY0FBYyxFQUFFO1FBQ2pCLGNBQWMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7S0FDbkg7SUFDRCw0Q0FBNEM7UUFDeEMsTUFBTSxFQUFFLGNBQWM7S0FDekIsQ0FBQztDQUNMLEVBQUUsVUFBVSxNQUFNLEVBQUU7O0lBRWpCdkIsTUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7O0lBRTFCQSxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksd0NBQXdDOzs7OztRQUt0RCxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7Ozs7O1FBTWhCLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzs7Ozs7UUFNbkIsaUJBQWlCLEVBQUUsQ0FBQzs7Ozs7O1FBTXBCLFNBQVMsRUFBRSxHQUFHOzs7Ozs7UUFNZCxTQUFTLEVBQUUsQ0FBQzs7Ozs7O1FBTVosS0FBSyxFQUFFLENBQUM7Ozs7O1FBS1IsU0FBUyxFQUFFLEtBQUs7Ozs7OztRQU1oQixXQUFXLEVBQUUsR0FBRzs7Ozs7Ozs7O1FBU2hCLFdBQVcsRUFBRSxHQUFHOzs7Ozs7UUFNaEIsV0FBVyxFQUFFLEtBQUs7Ozs7O1FBS2xCLFVBQVUsRUFBRSxJQUFJOzs7OztRQUtoQixTQUFTLEVBQUUsSUFBSTs7Ozs7UUFLZixZQUFZLEVBQUUsSUFBSTs7Ozs7UUFLbEIsWUFBWSxFQUFFLElBQUk7Ozs7UUFJbEIsV0FBVyxFQUFFLElBQUk7Ozs7O1FBS2pCLGNBQWMsRUFBRSxJQUFJOzs7OztRQUtwQixjQUFjLEVBQUUsSUFBSTs7Ozs7UUFLcEIsVUFBVSxFQUFFLElBQUk7Ozs7O1FBS2hCLE9BQU8sRUFBRSxJQUFJOzs7OztRQUtiLEtBQUssRUFBRSxJQUFJOzs7Ozs7UUFNWCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOzs7Ozs7UUFNaEIsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7Ozs7O1FBTWhCLFdBQVcsRUFBRSxDQUFDOzs7OztRQUtkLHlCQUF5QixFQUFFLEtBQUs7Ozs7O1FBS2hDLE1BQU0sRUFBRSxLQUFLOzs7OztRQUtiLFVBQVUsRUFBRSxLQUFLOzs7OztRQUtqQixVQUFVLEVBQUUsS0FBSzs7Ozs7UUFLakIsZ0JBQWdCLEVBQUUsQ0FBQzs7OztRQUluQixnQkFBZ0IsRUFBRSxDQUFDO0tBQ3RCLENBQUMsQ0FBQztDQUNOLEVBQUU7SUFDQyxLQUFLLEVBQUUsWUFBWTtRQUNmLElBQUksUUFBUSxHQUFHLElBQUksZ0JBQWdCLENBQUM7WUFDaEMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ2xCLENBQUMsQ0FBQztRQUNILGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxVQUFVLFFBQVEsRUFBRTtZQUMzQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDaEIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUN2QztTQUNKLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDVCxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxRQUFRLEVBQUU7WUFDM0UsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN2QyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ1QsT0FBTyxRQUFRLENBQUM7S0FDbkI7Q0FDSixDQUFDLENBQUM7O0FBRUgsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFVBQVUsUUFBUSxFQUFFO0lBQzFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRTtRQUN4RCxHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM3QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNwQztLQUNKLENBQUMsQ0FBQztDQUNOLENBQUMsQ0FBQzs7QUFFSCxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsVUFBVSxRQUFRLEVBQUU7SUFDM0MsTUFBTSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFO1FBQ3hELEdBQUcsRUFBRSxZQUFZO1lBQ2IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzdCO1FBQ0QsR0FBRyxFQUFFLFVBQVUsS0FBSyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3BDO0tBQ0osQ0FBQyxDQUFDO0NBQ04sQ0FBQyxDQUFDOztBQUVILHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxVQUFVLFFBQVEsRUFBRTtJQUNqRCxJQUFJLFVBQVUsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO0lBQ2hDLE1BQU0sQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRTtRQUN4RCxHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzNCO1FBQ0QsR0FBRyxFQUFFLFVBQVUsS0FBSyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxRQUFRLElBQUksY0FBYyxFQUFFO2dCQUM1QixJQUFJLFVBQVUsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUM5QztpQkFDSTtnQkFDRCxJQUFJLFVBQVUsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzNDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQzthQUN2RjtTQUNKO0tBQ0osQ0FBQyxDQUFDO0NBQ04sQ0FBQyxDQUFDOztBQUVILE1BQU0sQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFFO0lBQ2hFLEdBQUcsRUFBRSxZQUFZO1FBQ2IsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUNsQyxJQUFJLE1BQU0sRUFBRTtZQUNSLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsT0FBTyxNQUFNLENBQUM7S0FDakI7O0lBRUQsR0FBRyxFQUFFLFVBQVUsS0FBSyxFQUFFO1FBQ2xCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDOztRQUU3QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ25ELFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJO1lBQzdELEtBQUssRUFBRSxJQUFJO1NBQ2QsQ0FBQztRQUNGLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJO1lBQzdELEtBQUssRUFBRSxJQUFJO1NBQ2QsQ0FBQzs7O1FBR0YsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pEOztRQUVELElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztTQUNqRDthQUNJO1lBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztTQUNuRDtLQUNKO0NBQ0osQ0FBQyxDQUFDOztBQzVTSCxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7O0FBRWxCLFNBQVMsYUFBYSxJQUFJO0lBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0NBQ25COztBQUVELGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLFNBQVMsSUFBSSxFQUFFO0lBQ3pDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQzs7SUFFZixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDakIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzFCO1NBQ0k7UUFDRCxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsd0JBQXdCLENBQUMsQ0FBQztZQUNsRSxPQUFPO1NBQ1Y7UUFDRCxJQUFJLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUN6QixPQUFPLE1BQU0sQ0FBQztLQUNqQjtDQUNKLENBQUM7O0FBRUYsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsV0FBVztJQUN2QyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztDQUNuQixDQUFDOztBQUVGLFNBQVMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0lBQ3RDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRztRQUNiLE1BQU0sRUFBRSxNQUFNO1FBQ2QsUUFBUSxFQUFFLFFBQVE7S0FDckIsQ0FBQztDQUNMOztBQUVELElBQUksY0FBYyxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7Ozs7Ozs7Ozs7O0FBV3pDLGNBQWU7Ozs7SUFJWCxhQUFhLEVBQUUsWUFBWTtRQUN2QixPQUFPLElBQUksYUFBYSxFQUFFLENBQUM7S0FDOUI7Ozs7Ozs7OztJQVNELEdBQUcsRUFBRSxZQUFZO1FBQ2IsT0FBTyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDOUQ7Ozs7Ozs7SUFPRCxRQUFRLEVBQUUsUUFBUTtJQUNsQixLQUFLLEVBQUUsWUFBWTtRQUNmLE9BQU8sY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO0tBQ2pDO0NBQ0osQ0FBQzs7QUMxRUY7Ozs7QUFJQSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTTs7QUFFdkI7Ozs7OztJQU1JLElBQUksRUFBRSxFQUFFOzs7OztJQUtSLEtBQUssRUFBRSxDQUFDLENBQUM7Ozs7OztJQU1ULElBQUksRUFBRSxJQUFJO0NBQ2IsQ0FBQzs7QUNkRixJQUFJLGNBQWMsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ3ZDLElBQUksT0FBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7Ozs7O0FBSzVCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtJQUNuQyxtQ0FBbUM7Ozs7OztRQU0vQixnQkFBZ0IsRUFBRSxJQUFJOzs7O1FBSXRCLElBQUksRUFBRSxFQUFFOzs7Ozs7UUFNUixNQUFNLEVBQUUsRUFBRTs7Ozs7O1FBTVYsV0FBVyxFQUFFLElBQUk7O1FBRWpCLE1BQU0sRUFBRSxFQUFFOzs7UUFHVix5QkFBeUIsRUFBRSxJQUFJOzs7O1FBSS9CLHVCQUF1QixFQUFFLEVBQUU7Ozs7O1FBSzNCLGtCQUFrQixFQUFFLElBQUk7O1FBRXhCLHNCQUFzQixFQUFFLEVBQUU7O1FBRTFCLHFCQUFxQixFQUFFLEVBQUU7S0FDNUIsQ0FBQztDQUNMOztBQUVEOzs7Ozs7O0lBT0ksT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLE9BQU8sRUFBRTs7UUFFOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO2dCQUM5QixPQUFPO2FBQ1Y7U0FDSjs7UUFFRCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2hCOztRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQzNCLElBQUksT0FBTyxFQUFFO29CQUNULFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ2xDO2dCQUNELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ1osTUFBTTtpQkFDVDthQUNKO1NBQ0o7O1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDYixJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJO1NBQ2IsQ0FBQyxDQUFDOztRQUVILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQ2pDOzs7OztJQUtELFVBQVUsRUFBRSxVQUFVLElBQUksRUFBRTtRQUN4QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtnQkFDOUIsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDUixNQUFNO2FBQ1Q7U0FDSjtRQUNELElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtZQUNULElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM5QjtLQUNKOzs7O0lBSUQsY0FBYyxFQUFFLFlBQVk7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7S0FDcEI7Ozs7OztJQU1ELE9BQU8sRUFBRSxVQUFVLEtBQUssRUFBRTtRQUN0QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDcEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQztTQUNsQztLQUNKOzs7OztJQUtELGFBQWEsRUFBRSxZQUFZO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7S0FDN0I7Ozs7OztJQU1ELG1CQUFtQixFQUFFLENBQUMsWUFBWTs7UUFFOUIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOztRQUV2QixPQUFPLFlBQVk7WUFDZixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDM0UsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDOztZQUVwRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQzs7Z0JBRXBCLElBQUksTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3pCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN0RDthQUNKOztZQUVELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1NBQ2xDLENBQUM7S0FDTCxHQUFHOzs7Ozs7O0lBT0oseUJBQXlCLEVBQUUsVUFBVSxRQUFRLEVBQUU7UUFDM0MsSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUNyQyxJQUFJLFlBQVksR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLElBQUksU0FBUyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDakMsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQzs7UUFFbkMsSUFBSSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7WUFDM0MsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUM1Qzs7UUFFRCxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0MsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDM0IsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDNUIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7O1lBRTdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRTtvQkFDckIsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMzQixXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7O29CQUU5QyxJQUFJLEdBQUcsR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO29CQUNsRCxJQUFJLEdBQUcsR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOztvQkFFbEQsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzs7b0JBRS9DLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ2pDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7aUJBQ3BDO2FBQ0o7U0FDSjs7UUFFRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsbUJBQW1CLENBQUM7O1FBRWhELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQzs7UUFFckMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0RBQWtELENBQUMsQ0FBQztTQUNwRTtLQUNKOztJQUVELHFCQUFxQixFQUFFLFVBQVUsR0FBRyxFQUFFO1FBQ2xDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLENBQUM7UUFDckMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztLQUNsQzs7SUFFRCx1QkFBdUIsRUFBRSxZQUFZO1FBQ2pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN6RjtLQUNKOzs7OztJQUtELE1BQU0sRUFBRSxZQUFZOztRQUVoQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7O1FBRWhCLElBQUksbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDOztRQUVwRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsUUFBUTtnQkFDVCxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLO2dCQUMvQixJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO2FBQ2xDLENBQUM7U0FDTDtRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLElBQUksSUFBSSxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ2hCLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzFCLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMvQyxjQUFjLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDOztvQkFFdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQzFDO2FBQ0o7U0FDSjtLQUNKOztJQUVELGtCQUFrQixFQUFFLFVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRTtRQUMxQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNYLFFBQVE7a0JBQ0YsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztrQkFDbEMsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztTQUM5QztRQUNELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BDLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN6QixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUM5RDtTQUNKO1FBQ0QsT0FBTyxRQUFRLENBQUM7S0FDbkI7O0lBRUQseUJBQXlCLEVBQUUsVUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFO1FBQ2pELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0QsSUFBSSxJQUFJLENBQUM7UUFDVCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNuQyxJQUFJLFNBQVMsR0FBRyxHQUFHLEVBQUU7WUFDakIsSUFBSSxHQUFHLEVBQUUsQ0FBQztTQUNiO2FBQ0ksSUFBSSxTQUFTLEdBQUcsRUFBRSxFQUFFO1lBQ3JCLElBQUksR0FBRyxFQUFFLENBQUM7U0FDYjthQUNJLElBQUksU0FBUyxHQUFHLEVBQUUsRUFBRTtZQUNyQixJQUFJLEdBQUcsRUFBRSxDQUFDO1NBQ2I7YUFDSTtZQUNELElBQUksR0FBRyxDQUFDLENBQUM7U0FDWjs7UUFFRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksU0FBUyxDQUFDO1lBQ2pGLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSztZQUNuQixTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDMUIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQzFCLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLEtBQUssRUFBRSxLQUFLO1NBQ2YsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDckIsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7O1FBRXRCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFO1lBQzlELE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN0RDtRQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7UUFFaEIsT0FBTyxPQUFPLENBQUM7S0FDbEI7O0lBRUQsc0JBQXNCLEVBQUUsWUFBWTs7O1FBR2hDLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0tBQ3BDOztJQUVELFFBQVEsRUFBRSxZQUFZO1FBQ2xCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNoQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMvQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzs7WUFFL0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN6QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDaEIsU0FBUztpQkFDWjtnQkFDRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7O2dCQUloQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO29CQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ3ZEO2dCQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUU7b0JBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDdkQ7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRTtvQkFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNqRDs7Z0JBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDbEMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDbEMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzthQUNsQztTQUNKO0tBQ0o7O0lBRUQsS0FBSyxFQUFFLFVBQVUsY0FBYyxFQUFFO1FBQzdCLElBQUksUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDOUIsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDOztRQUUxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBSSxRQUFRLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUMzQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztZQUMzQixRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7O1lBRTdCLElBQUksY0FBYyxFQUFFO2dCQUNoQixJQUFJLE9BQU8sR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzs7Z0JBRWpELElBQUksQ0FBQyxPQUFPLEVBQUU7O29CQUVWLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztpQkFDcEM7O2dCQUVELFFBQVEsQ0FBQyxJQUFJLEdBQUcsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUM7YUFDekM7aUJBQ0k7Z0JBQ0QsUUFBUSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO2FBQzlCOztZQUVELFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2xDOztRQUVELElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFO1lBQ2hDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUM7WUFDaEQsUUFBUSxDQUFDLHlCQUF5QixHQUFHLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzFCLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0U7O1lBRUQsUUFBUSxDQUFDLGtCQUFrQixHQUFHLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztZQUVwRCxRQUFRLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztTQUN0Qzs7UUFFRCxRQUFRLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxVQUFVLElBQUksRUFBRTtZQUNqRixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN2QixDQUFDLENBQUM7O1FBRUgsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDOztRQUVsQixPQUFPLFFBQVEsQ0FBQztLQUNuQjtDQUNKLENBQUM7O0FDdlpGLGVBQWUsc2lLQUFzaUssQ0FBQzs7QUNBdGpLLGdCQUFlLHF0RUFBcXRFLENBQUM7O0FDQXJ1RSxrQkFBZSx5dU1BQXl1TSxDQUFDOztBQ0F6dk0sb0JBQWUsMnpCQUEyekIsQ0FBQzs7QUNBMzBCLGlCQUFlLGk2Q0FBaTZDLENBQUM7O0FDY2o3QyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDd0IsUUFBUSxDQUFDLENBQUM7OztBQUczQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUMvQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDaEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzdCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQ25CLFFBQVEsQ0FBQyxDQUFDOztBQUUzQixPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7QUFDekcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0FBQy9HLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDO0FBQ3JILE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztBQUM1RyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDdEcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO0FBQ2xILE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDOztBQy9CeEg7Ozs7OztBQU1BLEFBeUJBO0FBQ0EsQUFHQSxJQUFJLG9CQUFvQixHQUFHO0lBQ3ZCLFFBQVEsRUFBRSxRQUFRO0lBQ2xCLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLFlBQVksRUFBRSxXQUFXO0lBQ3pCLFlBQVksRUFBRSxXQUFXO0lBQ3pCLFdBQVcsRUFBRSxRQUFRO0lBQ3JCLFVBQVUsRUFBRSxPQUFPO0lBQ25CLFNBQVMsRUFBRSxPQUFPO0NBQ3JCLENBQUM7O0FBRUYsSUFBSSxjQUFjLEdBQUc7SUFDakIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxTQUFTO0lBQ3RCLElBQUksRUFBRSxNQUFNLENBQUMsVUFBVTtJQUN2QixJQUFJLEVBQUUsTUFBTSxDQUFDLFVBQVU7SUFDdkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxXQUFXO0lBQ3hCLElBQUksRUFBRSxNQUFNLENBQUMsV0FBVztJQUN4QixJQUFJLEVBQUUsTUFBTSxDQUFDLFlBQVk7Q0FDNUIsQ0FBQztBQUNGLElBQUksUUFBUSxHQUFHO0lBQ1gsTUFBTSxFQUFFLENBQUM7SUFDVCxJQUFJLEVBQUUsQ0FBQztJQUNQLElBQUksRUFBRSxDQUFDO0lBQ1AsSUFBSSxFQUFFLENBQUM7SUFDUCxJQUFJLEVBQUUsQ0FBQztJQUNQLElBQUksRUFBRSxDQUFDO0lBQ1AsSUFBSSxFQUFFLEVBQUU7Q0FDWCxDQUFDOztBQUVGLFNBQVMsZUFBZSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRTtJQUN4RCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDOztJQUUvQyxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0RCxJQUFJLFVBQVUsR0FBRyxZQUFZLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQztJQUM5QyxJQUFJLFNBQVMsR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUM7O0lBRWxGLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLFNBQVMsRUFBRTtRQUMzQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBQ1o7SUFDRCxJQUFJLEdBQUcsR0FBRyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7O0lBRXZFLElBQUksaUJBQWlCLEdBQUcsWUFBWSxDQUFDLFVBQVUsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDekcsSUFBSSxpQkFBaUIsRUFBRTtRQUNuQixJQUFJLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRSxJQUFJLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxZQUFZLENBQUM7UUFDbEQsSUFBSSxZQUFZLENBQUM7UUFDakIsSUFBSSxXQUFXLENBQUM7UUFDaEIsSUFBSSxZQUFZLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxXQUFXLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzQixZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdEQsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3JEO1FBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDM0IsVUFBVSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNuRjtTQUNKOztRQUVELEdBQUcsR0FBRyxVQUFVLENBQUM7S0FDcEI7SUFDRCxPQUFPLEdBQUcsQ0FBQztDQUNkOztBQUVELFNBQVMsY0FBYyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUU7SUFDdEMsSUFBSSxLQUFLLEdBQUcsa0VBQWtFLENBQUM7SUFDL0UsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbkMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDbkM7O0lBRUQsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDbkMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzdDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTs7SUFFN0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOztJQUUzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHO1FBQy9DLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksRUFBRSxHQUFHLE1B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QUMsRUFBRSxFQUFFO1FBQ3RDLElBQUksU0FBUyxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUM7UUFDcEMsSUFBSSxDQUFDLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQzs7UUFFOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTs7Ozs7WUFLakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ25DLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxRCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFELENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUM7OztZQUd4RSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7U0FDckI7O1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNqQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7WUFDdkIsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUM5QixNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1NBQzVCO0tBQ0o7SUFDRCxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztJQUVuQyxPQUFPLGtCQUFrQixDQUFDO0NBQzdCLENBQUM7O0FDNVJGO0FBQ0EsQUFHQTs7Ozs7O0FBTUEsSUFBSSxtQkFBbUIsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDOzs7Ozs7SUFNbkMsT0FBTyxFQUFFLElBQUk7Ozs7O0lBS2IsVUFBVSxFQUFFLEtBQUs7O0lBRWpCLG1CQUFtQixFQUFFLElBQUk7SUFDekIsV0FBVyxFQUFFLElBQUk7O0NBRXBCLDJDQUEyQzs7SUFFeEMsSUFBSSxFQUFFLHVCQUF1Qjs7Ozs7OztJQU83QixTQUFTLEVBQUUsVUFBVSxRQUFRLEVBQUUsSUFBSSxFQUFFO1FBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLHdCQUF3QixDQUFDLEVBQUU7WUFDcEQsT0FBTyxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1lBQ3JELE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ25CLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUNwRSxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ3BGO1FBQ0QsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUMzQixJQUFJLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDdkIsT0FBTztTQUNWOztRQUVELElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQyx1QkFBdUI7WUFDNUMsUUFBUSxFQUFFLE9BQU8sRUFBRTtnQkFDZixVQUFVLEVBQUUsSUFBSTtnQkFDaEIsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsTUFBTSxFQUFFLElBQUk7YUFDZixFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsV0FBVztTQUNoRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzs7UUFFbEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUM3Qjs7SUFFRCxhQUFhLEVBQUUsWUFBWTtRQUN2QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7S0FDM0I7O0lBRUQsZ0JBQWdCLEVBQUU7UUFDZCx3QkFBd0IsRUFBRTtZQUN0QixJQUFJLEVBQUUsSUFBSTtZQUNWLEtBQUssRUFBRSxVQUFVLFFBQVEsRUFBRTtnQkFDdkIsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFDM0IsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztnQkFDbkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDdkU7U0FDSjs7UUFFRCwwQkFBMEIsRUFBRTtZQUN4QixJQUFJLEVBQUUsR0FBRztZQUNULEtBQUssRUFBRSxVQUFVLFFBQVEsRUFBRTtnQkFDdkIsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDO2FBQzNCO1NBQ0o7O1FBRUQsNkJBQTZCLEVBQUU7WUFDM0IsSUFBSSxFQUFFLEdBQUc7WUFDVCxLQUFLLEVBQUUsVUFBVSxRQUFRLEVBQUU7Z0JBQ3ZCLE9BQU8sUUFBUSxDQUFDLFdBQVcsQ0FBQzthQUMvQjtTQUNKO0tBQ0o7Ozs7Ozs7Q0FPSixDQUFDOztBQzdGRjs7Ozs7QUFLQSxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDOztJQUU5QixVQUFVLEVBQUUsS0FBSzs7Ozs7OztJQU9qQixZQUFZLEVBQUUsRUFBRTs7Q0FFbkIsRUFBRSxZQUFZO0lBQ1gsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDN0QsRUFBRTs7SUFFQyxJQUFJLEVBQUUsa0JBQWtCOztJQUV4QixnQkFBZ0IsRUFBRTtRQUNkLG1CQUFtQixFQUFFO1lBQ2pCLElBQUksRUFBRSxJQUFJO1lBQ1YsS0FBSyxFQUFFLFVBQVUsUUFBUSxFQUFFO2dCQUN2QixJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUMzQixJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUNuQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQzthQUM3RTtTQUNKOztRQUVELDBCQUEwQixFQUFFO1lBQ3hCLElBQUksRUFBRSxJQUFJO1lBQ1YsS0FBSyxFQUFFLFVBQVUsUUFBUSxFQUFFO2dCQUN2QixJQUFJLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDdEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNuRCxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNwRDtnQkFDRCxPQUFPLGtCQUFrQixDQUFDO2FBQzdCO1NBQ0o7S0FDSjs7Ozs7OztDQU9KLENBQUM7O0FDaERGLElBQUksV0FBVyxHQUFHLFlBQVk7O0lBRTFCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDOztJQUVoQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0NBQ2hDLENBQUM7O0FBRUYsV0FBVyxDQUFDLFNBQVMsR0FBRzs7SUFFcEIsV0FBVyxFQUFFLFdBQVc7O0lBRXhCLEdBQUcsRUFBRSxVQUFVLFVBQVUsRUFBRTtRQUN2QixJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNkLElBQUksT0FBTyxHQUFHLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEMsT0FBTyxPQUFPLENBQUM7U0FDbEI7UUFDRCxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUNyQjs7SUFFRCxHQUFHLEVBQUUsVUFBVSxPQUFPLEVBQUU7UUFDcEIsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUN4QjtRQUNELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUN0Qjs7SUFFRCxLQUFLLEVBQUUsVUFBVSxRQUFRLEVBQUU7UUFDdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNoRDtRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7S0FDaEM7Q0FDSixDQUFDOztBQUVGLElBQUksYUFBYSxHQUFHO0lBQ2hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsTUFBTSxFQUFFLEdBQUc7SUFDWCxJQUFJLEVBQUUsTUFBTSxDQUFDLGFBQWE7SUFDMUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJO0lBQ25CLEtBQUssRUFBRSxNQUFNLENBQUMsYUFBYTtJQUMzQixLQUFLLEVBQUUsTUFBTSxDQUFDLGFBQWE7SUFDM0IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7SUFDdEMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNO0lBQ3hCLFNBQVMsRUFBRSxJQUFJO0lBQ2YsV0FBVyxFQUFFLENBQUM7SUFDZCxLQUFLLEVBQUUsSUFBSTtJQUNYLGVBQWUsRUFBRSxDQUFDO0lBQ2xCLGdCQUFnQixFQUFFLEtBQUs7Q0FDMUIsQ0FBQzs7QUFFRixJQUFJLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7O0FBRXRELFNBQVMsV0FBVyxDQUFDLFVBQVUsRUFBRTtJQUM3QjlCLE1BQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDM0UsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDOztJQUVyQixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDYixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2xELElBQUksSUFBSSxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QyxHQUFHLElBQUksS0FBSyxDQUFDO0tBQ2hCO0lBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDZDs7QUFFRCxTQUFTLFFBQVEsQ0FBQyxNQUFNLEVBQUU7O0lBRXRCLElBQUksSUFBSSxHQUFHcUIsY0FBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztJQUVyRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLGVBQWUsRUFBRTtRQUMxQyxNQUFNLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztLQUM1Qjs7SUFFRCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtRQUM1QixJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLHNCQUFzQjtZQUNqRCxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRTtZQUNsRCxNQUFNLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7U0FDckMsTUFBTTtZQUNILE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLG9CQUFvQjtZQUMvQyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxxQkFBcUI7VUFDbEQ7WUFDRSxNQUFNLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDcEM7S0FDSjtJQUNELElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDUCxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFDcEMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO0tBQ3ZDO0NBQ0o7O0FBRUQsU0FBU0EsY0FBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7SUFDakMsT0FBTyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN4QixDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0NBQ3ZDOztBQzFHRCxvQkFBZSxpeVRBQWl5VCxDQUFDOztBQ3FCanpULElBQUlXLFNBQU8sR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRW5ELEFBQ0EsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDOztBQUVoQyxTQUFTLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFO0lBQ2hFLElBQUksTUFBTSxLQUFLLFVBQVUsRUFBRTtRQUN2QixPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBQ2hEO1NBQ0ksSUFBSSxNQUFNLEtBQUssYUFBYSxFQUFFO1FBQy9CLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQztlQUNwRCxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7VUFDMUM7WUFDRSxJQUFJLFdBQVcsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN6RCxPQUFPLFdBQVcsSUFBSSxDQUFDLENBQUM7U0FDM0I7UUFDRCxPQUFPLENBQUMsQ0FBQztLQUNaO1NBQ0ksSUFBSSxNQUFNLEtBQUssVUFBVSxFQUFFO1FBQzVCLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDOUM7U0FDSSxJQUFJLE1BQU0sS0FBSyxVQUFVLEVBQUU7UUFDNUIsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUM5QztTQUNJO1FBQ0QsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ3BDO0NBQ0o7O0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFO0lBQ3hELElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7SUFDL0IsSUFBSSxJQUFJLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQztJQUNuQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7V0FDakQsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQzVFOzs7Ozs7Ozs7Ozs7Ozs7OztBQWlCRCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7SUFDeEMsNkNBQTZDOzs7Ozs7UUFNekMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxHQUFHOzs7Ozs7UUFNN0IsVUFBVSxFQUFFLEdBQUc7O1FBRWYsZ0JBQWdCLEVBQUUsTUFBTTs7UUFFeEIsU0FBUyxFQUFFLElBQUksWUFBWSxDQUFDO1lBQ3hCLENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ0wsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ0wsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ04sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNMLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDUixDQUFDOztRQUVGLFNBQVMsRUFBRSxPQUFPOztRQUVsQix3QkFBd0IsRUFBRSxLQUFLOztRQUUvQixZQUFZLEVBQUUsSUFBSSxXQUFXLEVBQUU7O1FBRS9CLFNBQVMsRUFBRSxFQUFFO1FBQ2IsZ0JBQWdCLEVBQUU7WUFDZCxhQUFhLEVBQUUsQ0FBQztZQUNoQixtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLFlBQVksRUFBRSxDQUFDO1NBQ2xCOztRQUVELGVBQWUsRUFBRSxFQUFFO1FBQ25CLGtCQUFrQixFQUFFLEVBQUU7O1FBRXRCLFVBQVUsRUFBRSxFQUFFO1FBQ2QsaUJBQWlCLEVBQUUsRUFBRTs7UUFFckIsYUFBYSxFQUFFLEVBQUU7UUFDakIsZUFBZSxFQUFFLEVBQUU7O1FBRW5CLFlBQVksRUFBRSxJQUFJLFdBQVcsRUFBRTtLQUNsQyxDQUFDO0NBQ0wsRUFBRSxZQUFZOztJQUVYLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxJQUFJLENBQUM7UUFDM0IsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsK0JBQStCLENBQUM7S0FDM0QsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLElBQUksQ0FBQztRQUMzQixRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQztLQUMzRCxDQUFDLENBQUM7SUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMvQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQzs7SUFFL0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksSUFBSSxDQUFDO1FBQzdCLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDO0tBQ2pELENBQUMsQ0FBQztDQUNOLEVBQUU7Ozs7Ozs7OztJQVNDLE1BQU0sRUFBRSxVQUFVLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRTtRQUM1RCxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2QsV0FBVyxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN2QztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztLQUNuRTs7Ozs7Ozs7SUFRRCxXQUFXLEVBQUUsVUFBVSxRQUFRLEVBQUUsSUFBSSxFQUFFO1FBQ25DLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQixJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUN2QyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGFBQWEsQ0FBQyxHQUFHLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ2hFO2FBQ0k7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDbEU7UUFDRCxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDN0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMzRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQy9DO1FBQ0QsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQixRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7S0FDM0I7O0lBRUQsZ0JBQWdCLEVBQUUsVUFBVSxRQUFRLEVBQUUsSUFBSSxFQUFFO1FBQ3hDLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7O1lBRXRDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbEQ7YUFDSTtZQUNELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN6Qzs7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssYUFBYSxDQUFDLEdBQUcsRUFBRTtZQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLENBQUM7U0FDekQ7YUFDSTtZQUNELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM5QyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQy9CLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzdFO2lCQUNJO2dCQUNELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2FBQ3pEO1NBQ0o7S0FDSjs7SUFFRCxPQUFPLEVBQUUsVUFBVSxRQUFRLEVBQUUsS0FBSyxFQUFFO1FBQ2hDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsVUFBVSxFQUFFO1lBQ2pDLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRSxFQUFFO2dCQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQy9DO1NBQ0osQ0FBQyxDQUFDOztRQUVILEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdEM7U0FDSjtLQUNKOztJQUVELGlCQUFpQixFQUFFLFVBQVUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFOztRQUV2RSxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ25DO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOztRQUUzQixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDOztRQUV0QixJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ2pCLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNsQjtRQUNELElBQUksV0FBVyxFQUFFO1lBQ2IsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3hCOztRQUVELEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQzs7O1FBRzlCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUNqRSxPQUFPO1NBQ1Y7O1FBRUQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLENBQUM7O1FBRTdELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Ozs7O1FBS3ZCLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7OztRQUduQyxJQUFJLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLDBCQUEwQixHQUFHLEVBQUUsQ0FBQztRQUNwQyxJQUFJLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztRQUNsQyxJQUFJLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLG9CQUFvQixHQUFHLEVBQUUsQ0FBQzs7UUFFOUIsSUFBSSxrQkFBa0IsQ0FBQzs7UUFFdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxtQkFBbUIsRUFBRTs7Z0JBRXBDLElBQUksa0JBQWtCLEVBQUU7b0JBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkRBQTJELENBQUMsQ0FBQztvQkFDMUUsU0FBUztpQkFDWjtnQkFDRCxJQUFJLEtBQUssQ0FBQyxhQUFhLEdBQUcsQ0FBQyxFQUFFO29CQUN6QixPQUFPLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7b0JBQzFDLFNBQVM7aUJBQ1o7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsYUFBYSxHQUFHLENBQUMsRUFBRTtvQkFDekIsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO2lCQUM5Qjs7Z0JBRUQsSUFBSSxDQUFDLDRCQUE0QjtvQkFDN0IsUUFBUTtvQkFDUixLQUFLO29CQUNMLFdBQVc7b0JBQ1gsS0FBSztvQkFDTCxrQkFBa0I7b0JBQ2xCLHdCQUF3QjtvQkFDeEIsMEJBQTBCO2lCQUM3QixDQUFDO2FBQ0w7aUJBQ0ksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRTtnQkFDbEMsSUFBSSxDQUFDLHFCQUFxQjtvQkFDdEIsUUFBUTtvQkFDUixLQUFLO29CQUNMLEtBQUs7b0JBQ0wsaUJBQWlCO29CQUNqQixtQkFBbUI7aUJBQ3RCLENBQUM7YUFDTDtpQkFDSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFO2dCQUNuQyxJQUFJLENBQUMsc0JBQXNCO29CQUN2QixRQUFRO29CQUNSLEtBQUs7b0JBQ0wsS0FBSztvQkFDTCxvQkFBb0I7aUJBQ3ZCLENBQUM7YUFDTDs7WUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDdkM7O1FBRUQsS0FBSyxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlDLElBQUksR0FBRyxHQUFHLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQztZQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQzdCLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxNQUFNLEVBQUU7b0JBQzFDLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDWixRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7cUJBQzVDO3lCQUNJLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUU7d0JBQzFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO3FCQUN0QztpQkFDSjthQUNKO1NBQ0o7UUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzdCLElBQUksa0JBQWtCLEVBQUU7Z0JBQ3BCLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25GO2lCQUNJO2dCQUNELFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7YUFDbkQ7U0FDSjs7UUFFRCxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDOztRQUUxQyxTQUFTLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDdEIsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSwwQkFBMEIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksOEJBQThCLEdBQUcsMEJBQTBCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdFLGNBQWMsQ0FBQywwQkFBMEIsR0FBRyxFQUFFLEtBQUssRUFBRSwwQkFBMEIsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDOUYsY0FBYyxDQUFDLHdCQUF3QixHQUFHLEVBQUUsS0FBSyxFQUFFLHdCQUF3QixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMzRixjQUFjLENBQUMsOEJBQThCLEdBQUcsRUFBRSxLQUFLLEVBQUUsOEJBQThCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3ZHLElBQUksa0JBQWtCLEVBQUU7Z0JBQ3BCLElBQUksc0JBQXNCLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3hELElBQUkscUJBQXFCLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3ZELHNCQUFzQixDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM3QixxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7O2dCQUc5QixzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDakMscUJBQXFCLENBQUMsT0FBTyxFQUFFLENBQUM7O2dCQUVoQyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbkMsY0FBYyxDQUFDLHNCQUFzQixHQUFHLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztnQkFDdkYsY0FBYyxDQUFDLHFCQUFxQixHQUFHLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUN4RjtTQUNKOztRQUVELElBQUksbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNoQyxJQUFJLHVCQUF1QixHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvRCxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQzFDLGNBQWMsQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDaEYsY0FBYyxDQUFDLGlCQUFpQixHQUFHLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUM3RSxjQUFjLENBQUMsdUJBQXVCLEdBQUcsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1NBQzVGOztRQUVELElBQUksb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqQyxjQUFjLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ3JGO0tBQ0o7O0lBRUQsNEJBQTRCLEVBQUUsQ0FBQyxZQUFZOztRQUV2QyxJQUFJLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLElBQUksZUFBZSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDcEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNqQyxJQUFJLFVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQy9CLElBQUksZUFBZSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDcEMsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3hDLElBQUksZUFBZSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7O1FBRXBDLE9BQU8sVUFBVSxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsd0JBQXdCLEVBQUUsMEJBQTBCLEVBQUU7O1lBRTVILElBQUkscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFELElBQUksVUFBVSxHQUFHO2dCQUNiLFdBQVcsRUFBRSxVQUFVLFVBQVUsRUFBRTtvQkFDL0IsT0FBTyxVQUFVLENBQUMsbUJBQW1CLElBQUkscUJBQXFCLENBQUM7aUJBQ2xFO2dCQUNELGlCQUFpQixFQUFFLHNCQUFzQjtnQkFDekMsVUFBVSxFQUFFLHVCQUF1QjtnQkFDbkMsUUFBUSxFQUFFLFVBQVUsVUFBVSxFQUFFO29CQUM1QixPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUM7aUJBQ2hDO2dCQUNELFdBQVcsRUFBRSxRQUFRLENBQUMsaUJBQWlCO2FBQzFDLENBQUM7OztZQUdGLElBQUksQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQzVDLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDekMsS0FBSyxDQUFDLHdCQUF3QjtxQkFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDakU7OztZQUdELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEYsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7WUFFcEYsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7O1lBRTdFLElBQUksVUFBVSxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQztZQUMzQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7O1lBRXhFLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLGFBQWEsR0FBRyxXQUFXLFlBQVlOLGFBQWlCLENBQUM7O1lBRTdELElBQUksTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsR0FBRyxLQUFLLFdBQVcsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pGLElBQUksT0FBTyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNDLElBQUksSUFBSSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxXQUFXLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDckYsSUFBSSxJQUFJLEdBQUcsV0FBVyxHQUFHLENBQUMsVUFBVSxHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztnQkFDOUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUN0RixVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxRDtZQUNELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMzRCwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7O1lBRXpDLElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7O1lBRWpDLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7O1lBRXZELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFOztnQkFFMUMsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLGFBQWEsRUFBRTtvQkFDZixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztpQkFDckg7cUJBQ0k7b0JBQ0QsSUFBSSxDQUFDLEtBQUs7d0JBQ04sZUFBZSxDQUFDLEtBQUs7d0JBQ3JCLFdBQVcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxHQUFHO3dCQUN4RSxTQUFTLEVBQUUsUUFBUTtxQkFDdEIsQ0FBQztpQkFDTDtnQkFDRCxZQUFZLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ2hELFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7Z0JBQ2xFLFFBQVEsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQzFDLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO2dCQUM5QixJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDOUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDL0IsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVELFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7O2dCQUV0RCxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLElBQUksR0FBRyxDQUFDOzs7Z0JBRy9DLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDOztnQkFFL0YsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNyRCxRQUFRLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDOzs7Z0JBR2hFLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxhQUFhLENBQUMsR0FBRyxFQUFFO29CQUN2QyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUMxRDs7Z0JBRUQsSUFBSSxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO3FCQUM5QixZQUFZLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7O2dCQUVoRCx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDOztnQkFFNUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUN0RDs7WUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7WUFFbkMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNsQyxDQUFDO0tBQ0wsR0FBRzs7SUFFSixxQkFBcUIsRUFBRSxVQUFVLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFOztRQUU3RixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDOztRQUV0QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzs7UUFFakMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7O1FBRXZELElBQUkscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFELElBQUksVUFBVSxHQUFHO1lBQ2IsV0FBVyxFQUFFLFVBQVUsVUFBVSxFQUFFO2dCQUMvQixPQUFPLFVBQVUsQ0FBQyxtQkFBbUIsSUFBSSxxQkFBcUIsQ0FBQzthQUNsRTtZQUNELGlCQUFpQixFQUFFLHNCQUFzQjtZQUN6QyxVQUFVLEVBQUUsdUJBQXVCO1lBQ25DLFFBQVEsRUFBRSxVQUFVLFVBQVUsRUFBRTtnQkFDNUIsT0FBTyxVQUFVLENBQUMsVUFBVSxDQUFDO2FBQ2hDO1lBQ0QsV0FBVyxFQUFFLFFBQVEsQ0FBQyxpQkFBaUI7U0FDMUMsQ0FBQzs7UUFFRixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckQsUUFBUSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQzs7UUFFaEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7OztRQUduQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssYUFBYSxDQUFDLEdBQUcsRUFBRTtZQUN2QyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzFEOztRQUVELElBQUksTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO2FBQ2xDLE1BQU0sRUFBRTthQUNSLFlBQVksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzs7UUFFaEQsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDeEM7O0lBRUQsc0JBQXNCLEVBQUUsVUFBVSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRTtRQUM1RSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDdEIsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztRQUVuQyxJQUFJLHFCQUFxQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRCxJQUFJLFVBQVUsR0FBRztZQUNiLFdBQVcsRUFBRSxVQUFVLFVBQVUsRUFBRTtnQkFDL0IsT0FBTyxVQUFVLENBQUMsbUJBQW1CLElBQUkscUJBQXFCLENBQUM7YUFDbEU7WUFDRCxVQUFVLEVBQUUsdUJBQXVCO1lBQ25DLFdBQVcsRUFBRSxRQUFRLENBQUMsaUJBQWlCO1NBQzFDLENBQUM7O1FBRUYsSUFBSSxrQkFBa0IsR0FBRztZQUNyQixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7U0FDakQsQ0FBQztRQUNGLElBQUksSUFBSSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDN0IsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDeEQsSUFBSSxTQUFTLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNsQyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3hCLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDM0MsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMzQyxJQUFJLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDOztRQUUxQixJQUFJLGlCQUFpQixHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUM3RixLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsVUFBVSxFQUFFO1lBQ2pDLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BELElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFO29CQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUdNLFNBQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ3JDLGtCQUFrQixDQUFDQSxTQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7cUJBQ25EO29CQUNELE9BQU87aUJBQ1Y7Z0JBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDdkMsT0FBTztpQkFDVjs7Z0JBRUQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUdBLFNBQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3JDLGlCQUFpQixDQUFDQSxTQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7aUJBQ3pDO2dCQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3hCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzNCLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdkMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN2QyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZCLElBQUksSUFBSSxHQUFHLElBQUksRUFBRTt3QkFDYixJQUFJLElBQUksR0FBRyxJQUFJLEVBQUU7NEJBQ2IsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO3lCQUNqRDs2QkFDSTs0QkFDRCxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7eUJBQ2pEO3FCQUNKO3lCQUNJO3dCQUNELElBQUksSUFBSSxHQUFHLElBQUksRUFBRTs0QkFDYixpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7eUJBQ2pEOzZCQUNJOzRCQUNELGlCQUFpQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQzt5QkFDakQ7cUJBQ0o7aUJBQ0o7Z0JBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxTQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNyQyxJQUFJLGlCQUFpQixDQUFDQSxTQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDL0Isa0JBQWtCLENBQUNBLFNBQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDbkQ7aUJBQ0o7YUFDSjtTQUNKLENBQUMsQ0FBQzs7UUFFSCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hCLElBQUksTUFBTSxHQUFHQSxTQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQzs7WUFFdEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDOUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7O1lBRXZELFFBQVEsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQ3ZFOztRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3RDOztJQUVELGlCQUFpQixFQUFFLFVBQVUsS0FBSyxFQUFFO1FBQ2hDLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pELElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDO1FBQ2hELElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDakIsSUFBSSxZQUFZLEdBQUcsWUFBWSxHQUFHLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDO1lBQ3pFLGNBQWMsR0FBRyxJQUFJLFFBQVEsQ0FBQztnQkFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixNQUFNLEVBQUUsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLENBQUM7YUFDdkcsQ0FBQyxDQUFDOztZQUVILElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLGNBQWMsQ0FBQztTQUN4RDtRQUNELElBQUksS0FBSyxDQUFDLGdCQUFnQixJQUFJLElBQUksRUFBRTtZQUNoQyxjQUFjLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUNuRTtRQUNELElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUU7WUFDMUIsY0FBYyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGFBQWEsQ0FBQyxHQUFHLEVBQUU7WUFDdkMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDaEQ7YUFDSTtZQUNELGNBQWMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ2xEOztRQUVELElBQUksWUFBWSxFQUFFO1lBQ2QsY0FBYyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVDOztRQUVELE9BQU8sY0FBYyxDQUFDO0tBQ3pCOztJQUVELGVBQWUsRUFBRSxVQUFVLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFO1FBQ2hELElBQUksU0FBUyxHQUFHO1lBQ1osS0FBSyxFQUFFLElBQUk7WUFDWCxNQUFNLEVBQUUsSUFBSTtZQUNaLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSztTQUN0QixDQUFDO1FBQ0YsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7O1FBRWxELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7O1FBRXJDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7O1FBRW5DLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3JDOztJQUVELFdBQVcsRUFBRSxVQUFVLEtBQUssRUFBRSxPQUFPLEVBQUU7UUFDbkMsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUN4QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxHQUFHLENBQUM7UUFDL0MsT0FBTyxHQUFHLE9BQU8sSUFBSSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNWLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxhQUFhLEVBQUU7Z0JBQzlCLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO2FBQy9CO2lCQUNJO2dCQUNELE9BQU8sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO2FBQzdCOzs7WUFHRCxPQUFPLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxPQUFPLENBQUM7WUFDckMsT0FBTyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7WUFDNUIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGFBQWEsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3ZDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDN0IsT0FBTyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7YUFDM0I7aUJBQ0k7Z0JBQ0QsT0FBTyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO2dCQUNuQyxPQUFPLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7Z0JBQ25DLE9BQU8sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2FBQzdCO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUM7U0FDakM7O1FBRUQsT0FBTyxPQUFPLENBQUM7S0FDbEI7O0lBRUQsb0JBQW9CLEVBQUUsVUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRTtZQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRztnQkFDdkIsRUFBRSxFQUFFLElBQUlOLGFBQWlCLEVBQUU7Z0JBQzNCLEVBQUUsRUFBRSxJQUFJQSxhQUFpQixFQUFFO2dCQUMzQixFQUFFLEVBQUUsSUFBSUEsYUFBaUIsRUFBRTtnQkFDM0IsRUFBRSxFQUFFLElBQUlBLGFBQWlCLEVBQUU7Z0JBQzNCLEVBQUUsRUFBRSxJQUFJQSxhQUFpQixFQUFFO2dCQUMzQixFQUFFLEVBQUUsSUFBSUEsYUFBaUIsRUFBRTthQUM5QixDQUFDO1NBQ0w7UUFDRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzs7UUFFOUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0IsUUFBUSxNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3RELE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdEQsTUFBTTtZQUNWLEtBQUssSUFBSTtnQkFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN0RCxNQUFNO1lBQ1YsS0FBSyxJQUFJO2dCQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3RELE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdEQsTUFBTTtZQUNWLEtBQUssSUFBSTtnQkFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN0RCxNQUFNO1NBQ2I7UUFDRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQzs7UUFFaEIsT0FBTyxNQUFNLENBQUM7S0FDakI7O0lBRUQsMEJBQTBCLEVBQUUsQ0FBQyxZQUFZO1FBQ3JDLElBQUksZUFBZSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDcEMsSUFBSSxvQkFBb0IsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzdDLElBQUksYUFBYSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7OztRQUd0QyxPQUFPLFVBQVUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7WUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJRyxjQUFXLEVBQUUsQ0FBQzthQUN0RDtZQUNELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDOztZQUU1QyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDMUQsb0JBQW9CLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7O1lBRW5FLE1BQU0sQ0FBQyxRQUFRO2lCQUNWLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUM7aUJBQzlCLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUM7aUJBQzdCLEtBQUssQ0FBQyxHQUFHLENBQUM7aUJBQ1YsYUFBYSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMvQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDOzs7WUFHOUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3ZELE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7O1lBRS9FLGFBQWEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUM7O1lBRXpFLElBQUksR0FBRyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ2xDLElBQUksR0FBRyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOzs7WUFHbEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDcEUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMxQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNoQixNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFOUIsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7Z0JBQzlCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO2FBQ25CO2lCQUNJO2dCQUNELE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDO2FBQ3ZDO1lBQ0QsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckIsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7WUFFcEIsT0FBTyxNQUFNLENBQUM7U0FDakIsQ0FBQztLQUNMLEdBQUc7O0lBRUosbUJBQW1CLEVBQUUsVUFBVSxLQUFLLEVBQUU7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFO1lBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLElBQUlILGFBQWlCLEVBQUUsQ0FBQztTQUNyRDtRQUNELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDOztRQUVyQyxNQUFNLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakQsTUFBTSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDOztRQUVsRSxPQUFPLE1BQU0sQ0FBQztLQUNqQjs7Ozs7OztJQU9ELE9BQU8sRUFBRSxVQUFVLFFBQVEsRUFBRTtRQUN6QixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQzs7UUFFbEMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xDOztRQUVELEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNyQzs7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7O1FBRXJDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHO1lBQ3BCLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLG1CQUFtQixFQUFFLENBQUM7WUFDdEIsWUFBWSxFQUFFLENBQUM7U0FDbEIsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDOztRQUV6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNmLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQzdCLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLDBCQUEwQixDQUFDLENBQUM7Z0JBQzFELFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLGdDQUFnQyxDQUFDLENBQUM7Z0JBQ2hFLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLDRCQUE0QixDQUFDLENBQUM7Z0JBQzVELFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3BDO1NBQ0o7O1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztLQUMvQjtDQUNKLENBQUMsQ0FBQzs7Ozs7O0FBTUgsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7Ozs7OztBQU10QixhQUFhLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQzs7QUMzM0J0Qjs7OztBQUlBLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLHVDQUF1Qzs7Ozs7SUFLL0QsS0FBSyxFQUFFLElBQUk7Ozs7O0lBS1gsTUFBTSxFQUFFLElBQUk7Ozs7O0lBS1osUUFBUSxFQUFFLElBQUk7Q0FDakIsRUFBRSxZQUFZO0lBQ1gsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztDQUM3Qjs7QUFFRDs7Ozs7Ozs7O0lBU0ksSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUU7UUFDaEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMvQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7S0FDekI7Ozs7Ozs7Ozs7SUFVRCxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUU7UUFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7O1FBRTFDLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDOztRQUV0QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksSUFBSSxLQUFLLENBQUMsQ0FBQzs7UUFFL0QsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQzs7UUFFM0MsT0FBTyxNQUFNLENBQUM7S0FDakI7O0lBRUQsY0FBYyxFQUFFLFVBQVUsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUU7UUFDL0MsSUFBSSxDQUFDLElBQUksWUFBWSxVQUFVLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ3JELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksWUFBWTs7O29CQUdoQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRTs7dUJBRTVELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUzt1QkFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJO2lCQUN4QjtjQUNIO2dCQUNFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDeEM7U0FDSjtRQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQzdEO0tBQ0o7O0lBRUQsb0JBQW9CLEVBQUUsQ0FBQyxZQUFZOztRQUUvQixJQUFJLEVBQUUsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLElBQUksRUFBRSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN2QixJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksWUFBWSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7O1FBRWpDLE9BQU8sVUFBVSxVQUFVLEVBQUUsR0FBRyxFQUFFOztZQUU5QixJQUFJLGFBQWEsR0FBRyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDL0MsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDOzs7WUFHeEQsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDaEIsR0FBRyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNwQzs7WUFFRCxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDOztZQUVuQyxJQUFJLElBQUksR0FBRyxhQUFhLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQzs7WUFFbEYsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3pDLE9BQU87YUFDVjs7WUFFRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2YsUUFBUSxDQUFDLElBQUk7b0JBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN4QixJQUFJLENBQUMsUUFBUTtvQkFDYixJQUFJLENBQUMsTUFBTTtvQkFDWCxVQUFVLEVBQUUsR0FBRztpQkFDbEIsQ0FBQztnQkFDRixPQUFPO2FBQ1Y7O2lCQUVJLElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRTtnQkFDekIsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QyxPQUFPO2FBQ1Y7O1lBRUQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsR0FBRzs0QkFDMUUsVUFBVSxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDOztZQUU1RixJQUFJLEtBQUssQ0FBQztZQUNWLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFDL0IsSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDaEQsSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDNUMsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDMUMsSUFBSSxpQkFBaUIsQ0FBQztZQUN0QixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7O1lBRXRCLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNsRCxPQUFPO2FBQ1Y7WUFDRCxJQUFJLGFBQWEsRUFBRTtnQkFDZixpQkFBaUIsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQy9DLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUN4QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUN6QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztxQkFDdEQ7aUJBQ0o7Z0JBQ0QsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNmLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksbUJBQW1CLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUM7Z0JBQzlELElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRTtvQkFDcEQsUUFBUSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3BELG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDO29CQUMxRCxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUNsRDtnQkFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDM0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3pCLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUMxQixTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDeEIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUU7NEJBQ25DLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDckQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDNUQ7cUJBQ0o7b0JBQ0QsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztpQkFDMUM7YUFDSjs7WUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN4QyxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksWUFBWSxHQUFHLGFBQWE7c0JBQzFCLFFBQVEsQ0FBQyxVQUFVLENBQUMsZUFBZTtzQkFDbkMsWUFBWSxDQUFDO2dCQUNuQixZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0IsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDOztnQkFFL0IsSUFBSSxRQUFRLEVBQUU7b0JBQ1YsS0FBSyxHQUFHLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ2pFO3FCQUNJO29CQUNELEtBQUssR0FBRyxHQUFHLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUNqRTtnQkFDRCxJQUFJLEtBQUssRUFBRTtvQkFDUCxJQUFJLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsYUFBYSxFQUFFO3dCQUNoQixPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO3FCQUNuRTt5QkFDSTs7d0JBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7cUJBQy9CO29CQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsWUFBWTt3QkFDaEMsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO3dCQUM5QyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztxQkFDekMsQ0FBQyxDQUFDO2lCQUNOO2FBQ0o7U0FDSixDQUFDO0tBQ0wsR0FBRzs7SUFFSix3QkFBd0IsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDdEMsT0FBTyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7S0FDbEM7Q0FDSixDQUFDLENBQUM7Ozs7Ozs7Ozs7O0FBV0gsVUFBVSxDQUFDLFlBQVksR0FBRyxVQUFVLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFOzs7OztJQUs5RixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzs7Ozs7SUFLbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7Ozs7O0lBSzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOzs7OztJQUtyQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQzs7OztJQUl6QixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQzs7Ozs7SUFLbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7Q0FDNUIsQ0FBQzs7QUNsUUY7QUFDQSxBQVVBLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQzs7QUFFWixBQUVBLElBQUlNLFNBQU8sR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRW5ELEFBbUNBLFNBQVMsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7SUFDN0IsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRWxCLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtRQUNiLE9BQU8sR0FBRyxDQUFDO0tBQ2Q7U0FDSSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7UUFDbEIsT0FBTyxDQUFDLENBQUM7S0FDWjtTQUNJLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtRQUNsQixPQUFPLENBQUMsQ0FBQztLQUNaO1NBQ0ksSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sQ0FBQyxDQUFDO0tBQ1o7U0FDSSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7UUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2hCO1NBQ0ksSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNoQjtTQUNJLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtRQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDaEI7U0FDSSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7UUFDbEIsT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDNUI7U0FDSTtRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3hCO0NBQ0o7O0FBRUQsSUFBSSxlQUFlLEdBQUc7SUFDbEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUMxQixDQUFDOzs7QUFHRixTQUFTLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtJQUNuRSxJQUFJLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMzQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDMUIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBR0EsU0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUNBLFNBQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUVwQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0IsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNWLElBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQ0EsU0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTs7b0JBRTVCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O29CQUUxQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO29CQUMzQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDOztvQkFFL0IsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3JELFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNyRCxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7b0JBRXJELEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7b0JBQzdCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7b0JBQzdCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7O29CQUU3QixJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO29CQUNyQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO29CQUNsQixLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO29CQUNsQixLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDOztvQkFFbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O29CQUV4RixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3pCO2FBQ0o7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztTQUM3RDs7UUFFRCxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDL0IsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNuQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ3RDO0lBQ0QsT0FBTyxLQUFLLENBQUM7Q0FDaEI7Ozs7Ozs7OztBQVNELEVBQUUsQ0FBQyxxQkFBcUIsR0FBRyxVQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzs7O0lBSXpELElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ2xCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7O0lBRXpCLElBQUksTUFBTSxDQUFDO0lBQ1gsSUFBSSxVQUFVLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUM3QixJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7SUFDZCxJQUFJLE1BQU0sQ0FBQyxXQUFXLEtBQUssV0FBVyxFQUFFO1FBQ3BDLE1BQU0sR0FBRyxJQUFJSSxRQUFPLENBQUM7WUFDakIsS0FBSyxFQUFFLFVBQVU7WUFDakIsY0FBYyxFQUFFLE1BQU07U0FDekIsQ0FBQyxDQUFDO0tBQ047U0FDSTtRQUNELElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDaEYsTUFBTSxHQUFHLElBQUlOLFFBQU0sQ0FBQztZQUNoQixLQUFLLEVBQUUsVUFBVTtZQUNqQixjQUFjLEVBQUUsTUFBTTtTQUN6QixDQUFDLENBQUM7S0FDTjs7SUFFRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRCxJQUFJLFdBQVcsR0FBRyxJQUFJLFNBQVMsQ0FBQztRQUM1QixLQUFLLEVBQUUsS0FBSztRQUNaLE1BQU0sRUFBRSxNQUFNO0tBQ2pCLENBQUMsQ0FBQztJQUNILElBQUksV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDcEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ2xELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtRQUNqQixNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7S0FDckQ7SUFDRCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLElBQUksVUFBVSxHQUFHLElBQUksa0JBQWtCLENBQUM7UUFDcEMsT0FBTyxFQUFFLFdBQVc7S0FDdkIsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBR0UsU0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNyQyxVQUFVLENBQUNBLFNBQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLEtBQUssR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQ0EsU0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDaEIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVTtZQUNsQixDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNO1lBQ25CLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUNBLFNBQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5RCxDQUFDO1FBQ0YsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNoQzs7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pCLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7SUFFOUIsT0FBTyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztDQUN4RSxDQUFDOztBQ3BORjs7Ozs7Ozs7OztBQVVBLEFBZ0NBLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUM7O0FBRXhDLEFBSUEsSUFBSSxTQUFTLEdBQUcsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVztJQUN0RSxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVc7SUFDckMsWUFBWSxFQUFFLGdCQUFnQjtDQUNqQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlGRixTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFOztJQUV2QixLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUNwQixLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDOztJQUVwQyxJQUFJLEtBQUssQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFO1FBQzFCLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0tBQzNCOztJQUVELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO1FBQ3pCLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3JDOztJQUVELElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUU7O0lBRTdDLElBQUksV0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVE7V0FDeEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxRQUFRLENBQUM7O0lBRS9DLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN0QixXQUFXLEtBQUssWUFBWSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQyxLQUFLLENBQUMsZ0JBQWdCLEtBQUssWUFBWSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDOztJQUVuRixJQUFJLFNBQVMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzQyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUM7SUFDNUMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDOztJQUUvQyxJQUFJLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ3pCLElBQUksU0FBUyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7SUFDL0IsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUM5RCxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksVUFBVSxDQUFDO1FBQzVDLEtBQUssRUFBRSxNQUFNO1FBQ2IsUUFBUSxFQUFFLFNBQVM7S0FDdEIsQ0FBQyxDQUFDOztJQUVILENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDOztJQUVsRCxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQzs7SUFFbEMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQzs7SUFFckIsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDOztJQUVsQixJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDckIsS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1FBQzNCLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDM0Q7O0lBRUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRTs7Ozs7O1FBTTFCLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxFQUFFOzs7OztRQUsvQyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBQzs7Ozs7UUFLbkQsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLE1BQU0sQ0FBQyxFQUFFLENBQUM7Ozs7O1FBSzdDLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxTQUFTLENBQUMsRUFBRSxDQUFDOzs7Ozs7UUFNbkQsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLFVBQVUsQ0FBQyxFQUFFLENBQUM7Ozs7OztRQU1yRCxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sWUFBWSxDQUFDLEVBQUUsQ0FBQzs7Ozs7OztRQU96RCxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQzs7Ozs7O1FBTTNELE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDOzs7Ozs7O1FBTzdELE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxXQUFXLENBQUMsRUFBRSxFQUFFOztRQUVyRCxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sV0FBVyxDQUFDLEVBQUUsRUFBRTs7UUFFekQsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLEtBQUssQ0FBQyxFQUFFLEVBQUU7S0FDakQsQ0FBQyxDQUFDOzs7Ozs7Ozs7SUFTSCxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRTtRQUNuQyxNQUFNLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUNqRCxPQUFPLEdBQUcsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQztRQUNuRCxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNyQyxDQUFDOzs7Ozs7SUFNRixJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVk7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7O1FBRXRCLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUNmLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdkI7UUFDRCxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakIsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixXQUFXLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQzs7UUFFOUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDbkIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRTtZQUNqQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUMvRixFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ1osQ0FBQzs7SUFFRixXQUFXLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDOztJQUVsRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUloQixLQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJQSxLQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7OztJQUdsQyxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUN4QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQzs7O0lBRzFCLElBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7O0lBRWxFLFdBQVcsS0FBSyxXQUFXLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDOztJQUU3RCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtRQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztLQUNyQzs7SUFFRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7SUFDaEIsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZO1FBQ3pCLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQVUsU0FBUyxFQUFFO1lBQ3ZDLFVBQVUsR0FBRyxTQUFTLENBQUM7WUFDdkIsWUFBWSxJQUFJLFNBQVMsQ0FBQzs7WUFFMUIsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3BDLElBQUksTUFBTSxFQUFFO2dCQUNSLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUM7YUFDakQ7WUFDRCxXQUFXLEtBQUssV0FBVyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQzs7WUFFN0MsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOztZQUUvQixJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNqQjs7WUFFRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUMzQixFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ1osQ0FBQyxDQUFDOztJQUVILE1BQU0sQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLFVBQVUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFO1FBQ3JFLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTs7WUFFaEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzVFO0tBQ0osRUFBRSxJQUFJLENBQUMsQ0FBQztDQUNaOztBQUVELFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFO0lBQzdCLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxXQUFXLElBQUksR0FBRyxZQUFZLEtBQUs7WUFDcEQsT0FBTyxpQkFBaUIsS0FBSyxXQUFXLElBQUksR0FBRyxZQUFZLGlCQUFpQixDQUFDO1lBQzdFLE9BQU8sZ0JBQWdCLEtBQUssV0FBVyxJQUFJLEdBQUcsWUFBWSxnQkFBZ0IsQ0FBQyxDQUFDO0NBQ3ZGOztBQUVELFNBQVMsbUJBQW1CLENBQUMsR0FBRyxFQUFFO0lBQzlCLE9BQU8sT0FBTyxHQUFHLEtBQUssUUFBUTtVQUN4QixHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sS0FBSyxHQUFHLENBQUMsT0FBTyxHQUFHaEIsTUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztDQUMvRDs7QUFFRCxTQUFTLGVBQWUsQ0FBQyxPQUFPLEVBQUU7SUFDOUIsT0FBTyxHQUFHLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FBQztDQUNwQzs7QUFFRCxTQUFTLFlBQVksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFO0lBQ3ZFLElBQUksS0FBSyxHQUFHQSxNQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25DLEtBQUssQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0lBQ3ZCLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3hCLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3hCLElBQUksVUFBVSxLQUFLLElBQUksRUFBRTtRQUNyQixLQUFLLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztLQUNqQztJQUNELE9BQU8sS0FBSyxDQUFDO0NBQ2hCOztBQUVELFNBQVMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUU7SUFDbEMsT0FBTyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFO1FBQ2xDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0tBQy9CO0NBQ0o7O0FBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLFVBQVUsRUFBRTtJQUNyRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDOztJQUV6QixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDckIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLFFBQVEsRUFBRTtRQUNsQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLEVBQUU7WUFDbEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3BCLE9BQU87YUFDVjtZQUNELENBQUMsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDOztZQUV2QyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUN0QyxJQUFJLE9BQU8sRUFBRSxPQUFPLENBQUM7WUFDckIsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDOztZQUV2QixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMvQixJQUFJLEtBQUssR0FBRyxPQUFPLEtBQUssVUFBVTtzQkFDNUIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7c0JBQ2xCLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLElBQUksT0FBTyxLQUFLLFlBQVksRUFBRTtvQkFDMUIsT0FBTyxHQUFHLFdBQVcsQ0FBQztpQkFDekI7cUJBQ0ksSUFBSSxPQUFPLEtBQUssVUFBVSxFQUFFO29CQUM3QixPQUFPLEdBQUcsU0FBUyxDQUFDO2lCQUN2QjtxQkFDSSxJQUFJLE9BQU8sS0FBSyxXQUFXLEVBQUU7b0JBQzlCLE9BQU8sR0FBRyxXQUFXLENBQUM7aUJBQ3pCO2dCQUNELE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ25DLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7YUFDckM7aUJBQ0k7Z0JBQ0QsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDL0IsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQzthQUNqQzs7WUFFRCxJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQzs7WUFFbkQsSUFBSSxLQUFLLENBQUM7WUFDVixJQUFJLE9BQU8sS0FBSyxnQkFBZ0IsSUFBSSxPQUFPLEtBQUssWUFBWSxFQUFFO2dCQUMxRCxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdEU7O1lBRUQsSUFBSSxVQUFVLEVBQUU7O2dCQUVaLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7b0JBQzFCLE9BQU87aUJBQ1Y7O2dCQUVELElBQUksT0FBTyxLQUFLLFdBQVcsRUFBRTs7b0JBRXpCLElBQUksYUFBYSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDO29CQUNwRCxJQUFJLGFBQWEsRUFBRTt3QkFDZixTQUFTLElBQUksYUFBYSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFOzRCQUMzRCxNQUFNLEVBQUUsU0FBUzt5QkFDcEIsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztxQkFDekI7b0JBQ0QsYUFBYSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQzFGLElBQUksYUFBYSxFQUFFO3dCQUNmLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO3FCQUM3RjtpQkFDSjtxQkFDSTtvQkFDRCxhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQ2hHO2dCQUNELFNBQVMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2pDO2lCQUNJLElBQUksU0FBUyxFQUFFO2dCQUNoQixhQUFhLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUU7b0JBQzlDLE1BQU0sRUFBRSxTQUFTO2lCQUNwQixFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixTQUFTLEdBQUcsSUFBSSxDQUFDO2FBQ3BCO1NBQ0osQ0FBQyxDQUFDO0tBQ04sRUFBRSxJQUFJLENBQUMsQ0FBQztDQUNaLENBQUM7O0FBRUYsS0FBSyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsR0FBRyxVQUFVLFdBQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQzNFLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7SUFDbEQsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7O0lBRXpDLElBQUksWUFBWSxDQUFDOztJQUVqQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNsQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQzNCLElBQUksR0FBRyxLQUFLLFlBQVksRUFBRTtZQUN0QixTQUFTO1NBQ1o7O1FBRUQsaUJBQWlCLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDcEcsSUFBSSxhQUFhLEVBQUU7WUFDZixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxRQUFRLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksRUFBRTtnQkFDMUUsVUFBVSxHQUFHLEtBQUssQ0FBQzthQUN0QjtZQUNELFVBQVUsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNwRCxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztTQUN6QzthQUNJO1lBQ0QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDeEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDM0M7O1FBRUQsWUFBWSxHQUFHLEdBQUcsQ0FBQztLQUN0QjtDQUNKLENBQUM7O0FBRUYsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsVUFBVSxRQUFRLEVBQUUsS0FBSyxFQUFFO0lBQ25ELElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNuQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDeEMsQ0FBQzs7Ozs7QUFLRixLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxZQUFZO0lBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDeEIsS0FBSyxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDOztJQUUvQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3ZCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDN0IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQzs7SUFFbEMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2YsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLEtBQUssQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzs7SUFFaEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDOztJQUU1RCxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs7SUFFN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDOztJQUV0QyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Q0FDMUIsQ0FBQzs7QUFFRixLQUFLLENBQUMsU0FBUyxDQUFDLGdCQUFnQixHQUFHLFlBQVk7SUFDM0MsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUM3QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3ZCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDdEMsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQzs7SUFFMUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3pCLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQzs7O0lBRzNCLElBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUN6QixJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztJQUMzQixnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixDQUFDLENBQUM7OztJQUc1RCxlQUFlLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7O0lBRTFDLElBQUksQ0FBQyxhQUFhLEdBQUcsZUFBZSxDQUFDO0lBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsaUJBQWlCLENBQUM7Q0FDNUMsQ0FBQzs7O0FBR0YsU0FBUyxVQUFVLENBQUMsWUFBWSxFQUFFO0lBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQzlCO0NBQ0o7O0FBRUQsU0FBUyxlQUFlLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRTtJQUM3QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUN6QixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3JDO0tBQ0o7Q0FDSjs7QUFFRCxTQUFTLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFO0lBQ2hDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDdkMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2xCLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O1FBRXZCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDdkI7Q0FDSjtBQUNELFNBQVMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFO0lBQ3hFLElBQUksWUFBWSxDQUFDO0lBQ2pCLElBQUksWUFBWSxDQUFDO0lBQ2pCLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxVQUFVLEVBQUU7UUFDakMsSUFBSSxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDM0IsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNuQyxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDOzs7WUFHbkMsSUFBSSxRQUFRLEtBQUssWUFBWSxFQUFFO2dCQUMzQixJQUFJLGVBQWUsR0FBRyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDcEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzdDLElBQUksV0FBVyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBQy9DLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUN0RCxJQUFJLENBQUMsR0FBRyxFQUFFO3dCQUNOLFNBQVM7cUJBQ1o7b0JBQ0QsSUFBSSxXQUFXLEtBQUssR0FBRyxFQUFFO3dCQUNyQixVQUFVLENBQUMsR0FBRyxFQUFFLG1CQUFtQixDQUFDLENBQUM7cUJBQ3hDO3lCQUNJLElBQUksV0FBVyxLQUFLLElBQUksRUFBRTt3QkFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7NEJBQ2pDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dDQUNSLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsQ0FBQzs2QkFDM0M7eUJBQ0o7cUJBQ0o7aUJBQ0o7YUFDSjtZQUNELElBQUksUUFBUSxLQUFLLFlBQVksRUFBRTtnQkFDM0IsVUFBVSxDQUFDLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO2FBQzlDOztZQUVELFlBQVksR0FBRyxRQUFRLENBQUM7WUFDeEIsWUFBWSxHQUFHLFFBQVEsQ0FBQztTQUMzQjtLQUNKLENBQUMsQ0FBQzs7SUFFSCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O1FBRTFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7WUFDekIsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLG1CQUFtQixDQUFDLENBQUM7U0FDNUQ7S0FDSjtDQUNKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQkQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsVUFBVSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUM5RCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7SUFDaEIsSUFBSSxHQUFHLEdBQUcsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsSUFBSSxRQUFRLEVBQUU7UUFDVixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbEM7S0FDSjs7SUFFRCxJQUFJLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7UUFDakQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUN6QixPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVk7Z0JBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtvQkFDaEIsT0FBTztpQkFDVjtnQkFDRCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDcEIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZO2dCQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ2hCLE9BQU87aUJBQ1Y7Z0JBQ0QsTUFBTSxFQUFFLENBQUM7YUFDWixDQUFDLENBQUM7U0FDTjthQUNJO1lBQ0QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3BCO0tBQ0osQ0FBQyxDQUFDO0lBQ0gsSUFBSSxRQUFRLEVBQUU7UUFDVixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDcEM7SUFDRCxPQUFPLE9BQU8sQ0FBQztDQUNsQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JGLEtBQUssQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLFVBQVUsUUFBUSxFQUFFLElBQUksRUFBRTtJQUN4RCxJQUFJLE9BQU8sR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRTtRQUM5QixJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsdUNBQXVDLENBQUMsRUFBRTtZQUN6RCxPQUFPLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3hDLFFBQVEsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVE7Z0JBQy9CLFFBQVEsRUFBRSxLQUFLO2FBQ2xCLEVBQUUsWUFBWTtnQkFDWCxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDOUIsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7Z0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDNUI7U0FDSjthQUNJO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMxQjtLQUNKO1NBQ0ksSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNuQyxPQUFPLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztRQUN6QixPQUFPLENBQUMsT0FBTyxHQUFHLFFBQVEsWUFBWSxnQkFBZ0IsQ0FBQztLQUMxRDtJQUNELE9BQU8sT0FBTyxDQUFDO0NBQ2xCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkYsS0FBSyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEdBQUcsVUFBVSxPQUFPLEVBQUUsSUFBSSxFQUFFO0lBQ3ZELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7UUFDMUMsSUFBSSxXQUFXLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDNUIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3hCO2FBQ0k7WUFDRCxXQUFXLENBQUMsT0FBTyxDQUFDLFlBQVk7Z0JBQzVCLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUN4QixDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVk7Z0JBQ2pCLE1BQU0sRUFBRSxDQUFDO2FBQ1osQ0FBQyxDQUFDO1NBQ047S0FDSixDQUFDLENBQUM7Q0FDTixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFlRixLQUFLLENBQUMsU0FBUyxDQUFDLG1CQUFtQixHQUFHLFVBQVUsT0FBTyxFQUFFLElBQUksRUFBRTtJQUMzRCxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0lBQ2pDLElBQUksV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUU7UUFDcEcsTUFBTSxJQUFJLEtBQUssQ0FBQyx5RUFBeUUsQ0FBQyxDQUFDO0tBQzlGO0lBQ0QsSUFBSSxPQUFPLE9BQU8sQ0FBQyxFQUFFLEtBQUssUUFBUSxFQUFFO1FBQ2hDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDN0I7U0FDSTtRQUNELFdBQVcsQ0FBQyxLQUFLLEdBQUdBLE1BQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDM0M7SUFDRCxPQUFPLFdBQVcsQ0FBQztDQUN0QixDQUFDOzs7Ozs7Ozs7Ozs7OztBQWNGLEtBQUssQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLFVBQVUsU0FBUyxFQUFFO0lBQ2xELFNBQVMsR0FBRyxTQUFTLElBQUksRUFBRSxDQUFDO0lBQzVCLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQztJQUN6RCxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxZQUFZLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHeUIsT0FBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekcsSUFBSSxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUM7UUFDeEIsTUFBTSxFQUFFLE1BQU07S0FDakIsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFO1FBQ2hCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztLQUNsQzs7SUFFRCxJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDekIsU0FBUyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7UUFDNUIsT0FBTyxVQUFVLE9BQU8sRUFBRTtZQUN0QixRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNsQyxTQUFTLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sT0FBTyxDQUFDO1NBQ2xCLENBQUM7S0FDTDtJQUNELEtBQUssSUFBSSxHQUFHLElBQUksU0FBUyxFQUFFO1FBQ3ZCLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN4QixJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLENBQUM7bUJBQzVELEVBQUUsR0FBRyxZQUFZLE9BQU8sQ0FBQztjQUM5Qjs7Z0JBRUUsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtvQkFDdkMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxtQkFBbUIsSUFBSSxLQUFLO29CQUNwRCxLQUFLLEVBQUUsU0FBUyxDQUFDLFlBQVksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQyxZQUFZO2lCQUN4RSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNwQztpQkFDSTtnQkFDRCxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNqQztTQUNKO0tBQ0o7O0lBRUQsSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFO1FBQ3ZCLFNBQVMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzVCLFNBQVMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0tBQ2hDOzs7SUFHRCxJQUFJLFNBQVMsQ0FBQyxhQUFhLEVBQUU7UUFDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxRQUFRLEVBQUU7WUFDbEQsU0FBUyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNyQyxDQUFDLENBQUM7S0FDTjs7SUFFRCxPQUFPLFFBQVEsQ0FBQztDQUNuQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQWNGLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLFVBQVUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7SUFDakUsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO1FBQ2hCLE1BQU0sR0FBRyxDQUFDLENBQUM7S0FDZDtJQUNELElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1FBQzVCLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDckM7O0lBRUQsSUFBSSxNQUFNLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsSUFBSSxDQUFDLElBQUksRUFBRTtRQUNQLElBQUksR0FBRyxJQUFJWSxNQUFPLENBQUM7WUFDZixhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN4QixjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN6QixhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUMzQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDcEM7SUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUN0RCxDQUFDOzs7Ozs7Ozs7Ozs7OztBQWNGLEtBQUssQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTtJQUN2RSxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7UUFDaEIsTUFBTSxHQUFHLENBQUMsQ0FBQztLQUNkO0lBQ0QsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7UUFDNUIsTUFBTSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNyQztJQUNELElBQUksTUFBTSxHQUFHLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDUCxJQUFJLEdBQUcsSUFBSUEsTUFBTyxDQUFDO1lBQ2YsTUFBTSxFQUFFLElBQUk7WUFDWixhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN4QixjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN6QixhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUMzQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDcEM7O0lBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7Q0FDdEQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQkYsS0FBSyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsVUFBVSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRTtJQUN4RSxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUU7UUFDckIsV0FBVyxHQUFHLEVBQUUsQ0FBQztLQUNwQjtJQUNELElBQUksTUFBTSxHQUFHLFNBQVMsR0FBRyxXQUFXLENBQUM7SUFDckMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUNULE1BQU0sR0FBRyxJQUFJQyxRQUFTLENBQUM7WUFDbkIsYUFBYSxFQUFFLFdBQVcsR0FBRyxDQUFDO1lBQzlCLGNBQWMsRUFBRSxXQUFXO1NBQzlCLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztLQUN0QztJQUNELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0NBQ3hELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJGLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLFVBQVUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7SUFDbEUsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO1FBQ2hCLE1BQU0sR0FBRyxDQUFDLENBQUM7S0FDZDtJQUNELElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1FBQzVCLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztLQUM3QjtJQUNELElBQUksTUFBTSxHQUFHLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDWCxRQUFRLEdBQUcsSUFBSUMsT0FBUSxDQUFDO1lBQ3BCLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQzVCLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztLQUN4QztJQUNELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0NBQzFELENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBY0YsS0FBSyxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsR0FBRyxVQUFVLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFO0lBQ2pGLElBQUksR0FBRyxHQUFHLElBQUlDLG1CQUFvQixDQUFDO1FBQy9CLFNBQVMsRUFBRSxTQUFTO0tBQ3ZCLENBQUMsQ0FBQztJQUNILEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3ZCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0NBQ3JELENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsVUFBVSxRQUFRLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRTtJQUM5RCxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQztRQUNoQixRQUFRLEVBQUUsUUFBUTtRQUNsQixRQUFRLEVBQUUsR0FBRyxZQUFZLFFBQVEsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7S0FDckUsQ0FBQyxDQUFDO0lBQ0gsVUFBVSxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckIsT0FBTyxJQUFJLENBQUM7Q0FDZixDQUFDOzs7Ozs7O0FBT0YsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsVUFBVSxVQUFVLEVBQUU7SUFDL0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUN0QixVQUFVLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQixPQUFPLElBQUksQ0FBQztDQUNmLENBQUM7Ozs7Ozs7Ozs7QUFVRixLQUFLLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRyxVQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtJQUNyRSxJQUFJLFVBQVUsQ0FBQztJQUNmLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNwQixJQUFJLElBQUksS0FBSyxPQUFPLElBQUksSUFBSSxLQUFLLGNBQWMsRUFBRTtRQUM3QyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsVUFBVSxHQUFHYixjQUFrQixDQUFDO0tBQ25DO1NBQ0k7UUFDRCxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssYUFBYSxFQUFFO1lBQ2hDLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLEdBQUcsSUFBSSxHQUFHLGtDQUFrQyxDQUFDLENBQUM7U0FDcEY7UUFDRCxVQUFVLEdBQUdELGFBQWlCLENBQUM7S0FDbEM7O0lBRUQsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUM5QixJQUFJLFFBQVEsWUFBWSxPQUFPLEVBQUU7UUFDN0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDbEM7U0FDSSxJQUFJLFFBQVEsWUFBWSxLQUFLLEVBQUU7UUFDaEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDdEM7O0lBRUQsSUFBSSxNQUFNLFlBQVksS0FBSyxFQUFFO1FBQ3pCLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pEO0lBQ0QsSUFBSSxNQUFNLFlBQVksT0FBTyxFQUFFO1FBQzNCLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDekI7O0lBRUQsSUFBSSxNQUFNLElBQUksT0FBTyxFQUFFO1FBQ25CLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztRQUNoQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzFCO1NBQ0k7UUFDRCxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztLQUNyRDs7SUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7SUFFdkIsT0FBTyxNQUFNLENBQUM7Q0FDakIsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixLQUFLLENBQUMsU0FBUyxDQUFDLHNCQUFzQixHQUFHLFVBQVUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7SUFDdEUsSUFBSSxLQUFLLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0lBQ25DLElBQUksR0FBRyxZQUFZLE9BQU8sRUFBRTtRQUN4QixHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztLQUNuQjtJQUNELEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3RDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzNCLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDN0I7SUFDRCxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDdkMsU0FBUyxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDOztJQUVuRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QixPQUFPLEtBQUssQ0FBQztDQUNoQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFlRixLQUFLLENBQUMsU0FBUyxDQUFDLGVBQWUsR0FBRyxVQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRTtJQUM5RyxJQUFJLEtBQUssR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0lBQzVCLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsWUFBWSxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQzs7SUFFakYsSUFBSSxNQUFNLFlBQVksS0FBSyxFQUFFO1FBQ3pCLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pEO0lBQ0QsSUFBSSxNQUFNLFlBQVksT0FBTyxFQUFFO1FBQzNCLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDeEI7O0lBRUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDM0IsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM3QjtJQUNELEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztJQUN2QyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDdkMsU0FBUyxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELFVBQVUsSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQztJQUN0RCxhQUFhLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDLENBQUM7O0lBRS9ELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDOztJQUV0QixPQUFPLEtBQUssQ0FBQztDQUNoQixDQUFDOzs7Ozs7Ozs7QUFTRixLQUFLLENBQUMsU0FBUyxDQUFDLGdCQUFnQixHQUFHLFVBQVUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0lBQzVFLElBQUksS0FBSyxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7SUFDN0IsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxZQUFZLE9BQU8sR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDOztJQUVqRixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUMzQixLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzdCO0lBQ0QsS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztJQUN2QyxTQUFTLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUM7O0lBRW5ELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDOztJQUV0QixPQUFPLEtBQUssQ0FBQztDQUNoQixDQUFDOzs7Ozs7O0FBT0YsS0FBSyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLEtBQUssRUFBRSxTQUFTLEVBQUU7SUFDN0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQzs7SUFFL0IsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDM0IsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM3QjtJQUNELEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztJQUN2QyxTQUFTLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUM7O0lBRW5ELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDOztJQUV0QixPQUFPLEtBQUssQ0FBQztDQUNoQixDQUFDOzs7Ozs7Ozs7Ozs7QUFZRixLQUFLLENBQUMsU0FBUyxDQUFDLHlCQUF5QixHQUFHLFVBQVUsUUFBUSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixFQUFFO0lBQzVILElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztJQUNoQixJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7UUFDbEIsUUFBUSxHQUFHLENBQUMsQ0FBQztLQUNoQjtJQUNELElBQUksc0JBQXNCLElBQUksSUFBSSxFQUFFO1FBQ2hDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztLQUMvQjs7SUFFRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDOztJQUV2QixJQUFJLFdBQVcsQ0FBQztJQUNoQixJQUFJLFFBQVEsQ0FBQyxXQUFXLEtBQUssYUFBYSxFQUFFO1FBQ3hDLFdBQVcsR0FBRyxRQUFRLENBQUMsWUFBWSxFQUFFO2NBQy9CLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO2NBQ3pCLElBQUksT0FBTyxDQUFDLFVBQVUsT0FBTyxFQUFFLE1BQU0sRUFBRTtnQkFDckMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZO29CQUN6QixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ3JCLENBQUMsQ0FBQzthQUNOLENBQUMsQ0FBQztLQUNWO1NBQ0k7UUFDRCxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7WUFDckMsUUFBUSxFQUFFLFFBQVE7U0FDckIsQ0FBQyxDQUFDO0tBQ047O0lBRUQsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsVUFBVSxFQUFFO1FBQzFDLElBQUksU0FBUyxHQUFHLElBQUksbUJBQW1CLENBQUM7WUFDcEMsU0FBUyxFQUFFLGFBQWEsSUFBSSxJQUFJLEdBQUcsYUFBYSxHQUFHLEdBQUc7U0FDekQsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7UUFDL0IsVUFBVSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7O1FBRXpCLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQzs7UUFFdkMsSUFBSSxTQUFTLEdBQUcsSUFBSSxjQUFjLENBQUM7WUFDL0IsU0FBUyxFQUFFLGFBQWEsSUFBSSxJQUFJLEdBQUcsYUFBYSxHQUFHLEdBQUc7WUFDdEQsWUFBWSxFQUFFZSxFQUFNLENBQUMscUJBQXFCO2dCQUN0QyxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUU7b0JBQzlCLEdBQUcsRUFBRSxDQUFDO2lCQUNUO2FBQ0o7U0FDSixDQUFDLENBQUM7UUFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JCLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7O1FBRXJCLE9BQU87WUFDSCxRQUFRLEVBQUUsU0FBUztZQUNuQixPQUFPLEVBQUUsU0FBUzs7WUFFbEIsY0FBYyxFQUFFLFVBQVU7U0FDN0IsQ0FBQztLQUNMLENBQUMsQ0FBQztDQUNOLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCRixLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0lBQ3pELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7S0FDbkM7O0lBRUQsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDbEIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxFQUFFO1FBQ2hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7S0FDakM7SUFDRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLGVBQWUsQ0FBQzs7SUFFNUMsSUFBSSxVQUFVLEdBQUc7UUFDYixRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUU7UUFDcEIsTUFBTSxFQUFFLE1BQU07UUFDZCxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7UUFDckMsV0FBVyxFQUFFLFdBQVc7UUFDeEIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1FBQy9CLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7S0FDaEQsQ0FBQztJQUNGLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLEdBQUcsRUFBRTtRQUNsRCxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ2pFOztJQUVELElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDOztJQUV4QyxVQUFVLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUM3QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7O0lBRWhCLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFO1FBQzFDLFNBQVMsU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUN2QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hCLE9BQU87YUFDVjs7WUFFRCxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDeEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUU7b0JBQ2pDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzFCLENBQUMsQ0FBQzthQUNOO1lBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ25CO1FBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sRUFBRTtZQUM3QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hCLE9BQU87YUFDVjs7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUN6QixTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDckI7aUJBQ0k7Z0JBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLE9BQU8sRUFBRTtvQkFDL0MsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUU7d0JBQ3hCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztxQkFDbkM7b0JBQ0QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRTt3QkFDbEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztxQkFDMUIsQ0FBQyxDQUFDO2lCQUNOLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZO29CQUNqQixTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3JCLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWTtvQkFDakIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNyQixDQUFDLENBQUM7YUFDTjtTQUNKLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWTtZQUNyQixNQUFNLEVBQUUsQ0FBQztTQUNaLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDcEIsQ0FBQyxDQUFDO0NBQ04sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFjRixLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxVQUFVLElBQUksRUFBRSxVQUFVLEVBQUU7SUFDcEQsVUFBVSxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7O0lBRTVDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNyRCxJQUFJLFVBQVUsRUFBRTtRQUNaLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDM0I7O0lBRUQsT0FBTyxPQUFPLENBQUM7Q0FDbEIsQ0FBQzs7O0FBR0Ysa0JBQWU7SUFDWCxLQUFLLEVBQUUsS0FBSzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUF1QlosTUFBTSxFQUFFLFVBQVUsR0FBRyxFQUFFLEtBQUssRUFBRTtRQUMxQixPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNoQztDQUNKOztFQUFDLEZDdDFDRjs7Ozs7QUFLQSxTQUFTLElBQUksR0FBRztJQUNaLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0NBQzFCLEFBQUM7Ozs7O0FBS0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsU0FBUyxJQUFJLEVBQUU7SUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7Q0FDakMsQ0FBQzs7Ozs7QUFLRixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRTtJQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM5QixDQUFDOzs7OztBQUtGLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLFdBQVc7SUFDckMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0NBQzNCLENBQUM7Ozs7O0FBS0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsV0FBVztJQUNuQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7Q0FDekIsQ0FBQzs7Ozs7QUFLRixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxXQUFXO0lBQ2xDLE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO0NBQzdDLENBQUM7O0FBRUZ6QyxNQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7O0FBRXRDLFNBQVMsZUFBZSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUU7SUFDeEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUNmLEdBQUcsRUFBRSxHQUFHO1FBQ1IsWUFBWSxFQUFFLFlBQVk7UUFDMUIsTUFBTSxFQUFFLFNBQVMsR0FBRyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDckI7UUFDRCxPQUFPLEVBQUUsU0FBUyxLQUFLLEVBQUU7WUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQztJQUNILE9BQU8sSUFBSSxDQUFDO0NBQ2Y7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCRCxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsR0FBRyxFQUFFLFlBQVksRUFBRTtJQUMvQyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtRQUN6QixPQUFPLGVBQWUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7S0FDN0M7U0FDSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDZCxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZCxPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUNyRDtTQUNJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN6QixJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDbEIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsRUFBRTtZQUMxQixJQUFJLEdBQUcsRUFBRSxZQUFZLENBQUM7WUFDdEIsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7Z0JBQ3pCLEdBQUcsR0FBRyxHQUFHLENBQUM7YUFDYjtpQkFDSSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUU7Z0JBQzFCLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO2dCQUNkLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO2FBQ25DO1lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7U0FDbEQsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxLQUFLLENBQUM7S0FDaEI7Q0FDSixDQUFDOzs7O0FBSUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXO0lBQ3ZCLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztDQUNyQixDQUFDOztBQUVGQSxNQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7O0FDbkh0Qzs7Ozs7QUFLQSxJQUFJLFNBQVMsR0FBRyxZQUFZOztJQUV4QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQzs7SUFFNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7O0lBRWpCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7O0lBRTFCLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO0NBQzVCLENBQUM7O0FBRUYsSUFBSSxJQUFJLEdBQUcsV0FBVyxFQUFFLENBQUM7QUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ2hDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQzs7QUFFakMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUI1QyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxVQUFVLEtBQUssRUFBRTtJQUN2QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDZCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7SUFDaEIsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDcEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQzs7SUFFekJBLE1BQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVUsSUFBSSxFQUFFLEdBQUcsRUFBRTtRQUNsQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNyQixPQUFPO1NBQ1Y7UUFDRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsR0FBRyxFQUFFO1lBQ2hDLEtBQUssRUFBRSxDQUFDOztZQUVSLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDOzs7O1lBSXhCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDOztZQUV2QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ2hCLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtnQkFDYixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3RCO1NBQ0osQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWTs7WUFFM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDOztZQUV4QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzs7WUFFdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyQixDQUFDLENBQUM7S0FDTixDQUFDLENBQUM7SUFDSCxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7UUFDYixVQUFVLENBQUMsWUFBWTtZQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxPQUFPLElBQUksQ0FBQztDQUNmLENBQUM7Ozs7OztBQU1GLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLFVBQVUsS0FBSyxFQUFFO0lBQzlDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNkLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztJQUNoQixJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7SUFDZCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3BCLFVBQVUsQ0FBQyxZQUFZO1lBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2pDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzs7SUFFcEJBLE1BQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVUsSUFBSSxFQUFFLEdBQUcsRUFBRTtRQUNsQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNyQixPQUFPO1NBQ1Y7UUFDRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsR0FBRyxFQUFFO1lBQ2hDLEtBQUssRUFBRSxDQUFDOztZQUVSLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDOztZQUV4QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzs7WUFFdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUNoQixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN0QjtTQUNKLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsR0FBRyxFQUFFO1lBQzlCLEtBQUssRUFBRSxDQUFDOztZQUVSLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzs7WUFFdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7OztZQUd0QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtnQkFDYixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3RCO1NBQ0osQ0FBQyxDQUFDO0tBQ04sQ0FBQyxDQUFDO0lBQ0gsT0FBTyxJQUFJLENBQUM7Q0FDZixDQUFDOzs7Ozs7QUFNRixTQUFTLENBQUMsU0FBUyxDQUFDLGtCQUFrQixHQUFHLFVBQVUsU0FBUyxFQUFFO0lBQzFELElBQUksU0FBUyxFQUFFO1FBQ1gsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUksSUFBSSxZQUFZLFNBQVMsRUFBRTtnQkFDM0IsVUFBVSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNwRCxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDdkIsVUFBVSxJQUFJLENBQUMsQ0FBQzthQUNuQjtTQUNKO1FBQ0QsT0FBTyxVQUFVLENBQUM7S0FDckIsTUFBTTtRQUNILE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0tBQ2hDO0NBQ0osQ0FBQzs7Ozs7OztBQU9GLFNBQVMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxTQUFTLEVBQUU7SUFDekQsSUFBSSxTQUFTLEVBQUU7UUFDWCxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxJQUFJLFlBQVksU0FBUyxFQUFFO2dCQUMzQixTQUFTLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ2xELE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUN0QixTQUFTLElBQUksQ0FBQyxDQUFDO2FBQ2xCO1NBQ0o7UUFDRCxPQUFPLFNBQVMsQ0FBQztLQUNwQixNQUFNO1FBQ0gsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0tBQy9CO0NBQ0osQ0FBQzs7Ozs7OztBQU9GLFNBQVMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxTQUFTLEVBQUU7O0lBRXhELElBQUksU0FBUyxFQUFFO1FBQ1gsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUksSUFBSSxZQUFZLFNBQVMsRUFBRTtnQkFDM0IsUUFBUSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNoRCxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUN6QyxRQUFRLElBQUksQ0FBQyxDQUFDO2FBQ2pCO1NBQ0o7UUFDRCxPQUFPLFFBQVEsQ0FBQztLQUNuQixNQUFNO1FBQ0gsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztLQUN2RDtDQUNKLENBQUM7Ozs7Ozs7QUFPRixTQUFTLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxVQUFVLFNBQVMsRUFBRTtJQUNyRCxJQUFJLFNBQVMsRUFBRTtRQUNYLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUksSUFBSSxZQUFZLFNBQVMsRUFBRTtnQkFDM0IsS0FBSyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDMUMsTUFBTTtnQkFDSCxLQUFLLElBQUksQ0FBQyxDQUFDO2FBQ2Q7U0FDSjtRQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2hCLE1BQU07UUFDSCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0tBQzdCO0NBQ0osQ0FBQzs7QUNqT0Y7Ozs7Ozs7Ozs7QUFVQSxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7SUFDekMscURBQXFEOzs7O1FBSWpELElBQUksRUFBRSxFQUFFOzs7Ozs7Ozs7OztRQVdSLFVBQVUsRUFBRSxFQUFFOzs7Ozs7Ozs7OztRQVdkLFdBQVcsRUFBRSxFQUFFOzs7O1FBSWYsbUJBQW1CLEVBQUUsRUFBRTtRQUN2QixlQUFlLEVBQUUsRUFBRTs7O1FBR25CLGlCQUFpQixFQUFFLEVBQUU7O1FBRXJCLFVBQVUsRUFBRSxLQUFLOztRQUVqQixTQUFTLEVBQUUsS0FBSzs7UUFFaEIsV0FBVyxFQUFFLElBQUk7S0FDcEIsQ0FBQztDQUNMOztBQUVEOzs7SUFHSSxlQUFlLEVBQUUsVUFBVSxVQUFVLEVBQUUsUUFBUSxFQUFFO1FBQzdDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUMsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUN2QyxJQUFJLGNBQWMsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDO1FBQ2hELElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDakIsY0FBYyxHQUFHLFVBQVUsQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1NBQ3BEO1FBQ0QsSUFBSSxVQUFVLEVBQUU7WUFDWixLQUFLLElBQUksR0FBRyxJQUFJLFVBQVUsRUFBRTtnQkFDeEIsSUFBSSxHQUFHLEtBQUssT0FBTyxJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUU7b0JBQ3JDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3pDO2FBQ0o7U0FDSjtRQUNELElBQUksS0FBSyxFQUFFLE1BQU0sQ0FBQztRQUNsQixJQUFJLFVBQVUsQ0FBQyxLQUFLLFlBQVksUUFBUSxFQUFFO1lBQ3RDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDakQ7YUFDSTtZQUNELEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxVQUFVLENBQUMsTUFBTSxZQUFZLFFBQVEsRUFBRTtZQUN2QyxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ25EO2FBQ0k7WUFDRCxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztTQUM5QjtRQUNEO1lBQ0ksY0FBYyxDQUFDLEtBQUssS0FBSyxLQUFLO2VBQzNCLGNBQWMsQ0FBQyxNQUFNLEtBQUssTUFBTTtVQUNyQztZQUNFLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3pEO1NBQ0o7UUFDRCxjQUFjLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUM3QixjQUFjLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7UUFFL0IsT0FBTyxjQUFjLENBQUM7S0FDekI7Ozs7Ozs7SUFPRCxZQUFZLEVBQUUsVUFBVSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7Ozs7OztJQU12QyxZQUFZLEVBQUUsVUFBVSxJQUFJLEVBQUUsRUFBRTs7Ozs7SUFLaEMsYUFBYSxFQUFFLFVBQVUsR0FBRyxFQUFFO1FBQzFCLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3RDO0tBQ0o7O0lBRUQsTUFBTSxFQUFFLFlBQVksRUFBRTs7SUFFdEIsU0FBUyxFQUFFLFVBQVUsUUFBUSxlQUFlLElBQUksRUFBRTtRQUM5QyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7O1lBRWQsSUFBSSxHQUFHLFFBQVEsQ0FBQztZQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDckM7UUFDRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDYixRQUFRO1NBQ1g7OztRQUdELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTs7WUFFaEIsSUFBSSxVQUFVLENBQUMsZUFBZSxFQUFFO2dCQUM1QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN6QztpQkFDSTtnQkFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckM7U0FDSjthQUNJOztZQUVELElBQUksQ0FBQyxVQUFVO1VBQ2pCO1lBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRTs7Z0JBRWpDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQ2xHO1lBQ0QsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekM7O1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7UUFFdEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JDOztJQUVELGVBQWUsRUFBRSxVQUFVLFVBQVUsRUFBRTtRQUNuQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNyQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxQyxJQUFJLFVBQVUsQ0FBQyxhQUFhLEVBQUU7Z0JBQzFCLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztpQkFDekU7Z0JBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDM0U7aUJBQ0k7OztnQkFHRCxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7YUFDckU7U0FDSjtLQUNKOztJQUVELElBQUksRUFBRSxVQUFVLFlBQVksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFOzs7UUFHakQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBRztZQUM1QixJQUFJLEVBQUUsUUFBUTtZQUNkLEdBQUcsRUFBRSxXQUFXO1NBQ25CLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNwQyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUMxQztRQUNELFFBQVEsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25DLElBQUksRUFBRSxJQUFJO1lBQ1YsR0FBRyxFQUFFLFlBQVk7U0FDcEIsQ0FBQyxDQUFDOzs7UUFHSCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDbEQ7O0lBRUQsS0FBSyxFQUFFLFlBQVk7UUFDZixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztLQUN6Qjs7SUFFRCxlQUFlLEVBQUUsVUFBVSxVQUFVLEVBQUU7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsS0FBSyxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNuQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdkM7WUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztTQUMzQjtRQUNELElBQUksVUFBVSxFQUFFO1lBQ1osSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7U0FDekM7S0FDSjs7SUFFRCxXQUFXLEVBQUUsWUFBWTtRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzs7UUFFdkIsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEM7S0FDSjs7SUFFRCxVQUFVLEVBQUUsWUFBWTs7UUFFcEIsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQy9CLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDbEMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxVQUFVLENBQUMsYUFBYSxFQUFFO29CQUMxQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7cUJBQ25FO29CQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMvRDtxQkFDSTtvQkFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQy9EO2FBQ0o7U0FDSjtLQUNKO0NBQ0osQ0FBQzs7QUNoUEY7Ozs7QUFJQSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7SUFDaEMsNENBQTRDOzs7O1FBSXhDLEtBQUssRUFBRSxFQUFFO0tBQ1osQ0FBQztDQUNMOztBQUVEOzs7OztJQUtJLEtBQUssRUFBRSxZQUFZO1FBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7S0FDdEI7Ozs7SUFJRCxPQUFPLEVBQUUsVUFBVSxJQUFJLEVBQUU7O1FBRXJCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9CLE9BQU87U0FDVjs7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7UUFFdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7S0FDdEI7Ozs7SUFJRCxVQUFVLEVBQUUsVUFBVSxJQUFJLEVBQUU7UUFDeEIsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDMUIsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkM7UUFDRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDdEI7S0FDSjs7Ozs7SUFLRCxhQUFhLEVBQUUsVUFBVSxJQUFJLEVBQUU7UUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO2dCQUM3QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDeEI7U0FDSjtLQUNKOzs7O0lBSUQsTUFBTSxFQUFFLFlBQVk7UUFDaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDekI7O1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRXpCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNkLFNBQVM7YUFDWjtZQUNELEtBQUssSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQ3pCLFNBQVM7aUJBQ1o7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQzlELE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLFNBQVMsR0FBRyxZQUFZLENBQUMsQ0FBQztvQkFDbkUsU0FBUztpQkFDWjtnQkFDRCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDOztnQkFFekMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxPQUFPLEVBQUU7b0JBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ25EO3FCQUNJO29CQUNELElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFO3dCQUNqQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLEdBQUcsWUFBWSxDQUFDLENBQUM7cUJBQ3REO3lCQUNJO3dCQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLENBQUM7cUJBQ3JGO2lCQUNKO2FBQ0o7U0FDSjtLQUNKOztJQUVELE9BQU8sRUFBRSxVQUFVLEtBQUssRUFBRTtRQUN0QixJQUFJLElBQUksQ0FBQzs7UUFFVCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLFlBQVkwQyxjQUFTLEVBQUU7WUFDekQsS0FBSyxHQUFHO2dCQUNKLElBQUksRUFBRSxLQUFLO2FBQ2QsQ0FBQztTQUNMOztRQUVELElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUNoQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFO29CQUN6QixJQUFJLEdBQUcsR0FBRyxDQUFDO2lCQUNkO2FBQ0o7U0FDSjthQUNJO1lBQ0QsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDckI7UUFDRCxJQUFJLElBQUksRUFBRTtZQUNOLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFDekIsSUFBSSxDQUFDLFFBQVEsRUFBRTs7Z0JBRVgsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNkLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDM0M7YUFDSjtZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDeEIsT0FBTztvQkFDSCxJQUFJLEVBQUUsSUFBSTtvQkFDVixHQUFHLEVBQUUsUUFBUTtpQkFDaEIsQ0FBQzthQUNMO1NBQ0o7S0FDSjtDQUNKLENBQUM7O0FDcklGOzs7Ozs7O0FBT0EsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXO0lBQ3JDLE9BQU87O1FBRUgsUUFBUSxFQUFFLEVBQUU7O1FBRVosWUFBWSxFQUFFLElBQUksV0FBVyxFQUFFOztRQUUvQixZQUFZLEVBQUUsSUFBSSxXQUFXLENBQUM7WUFDMUIsV0FBVyxFQUFFLEtBQUs7U0FDckIsQ0FBQztLQUNMLENBQUM7Q0FDTDs7QUFFRDtJQUNJLE9BQU8sRUFBRSxTQUFTLElBQUksRUFBRTtRQUNwQixLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0tBQzNCOzs7O0lBSUQsTUFBTSxFQUFFLFNBQVMsUUFBUSxFQUFFLFdBQVcsRUFBRTtRQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzs7WUFFcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO29CQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3JDO2FBQ0o7U0FDSjs7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O1lBRXhDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDL0I7O1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDdEM7O1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUNsRDs7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O1lBRXhDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDOUI7S0FDSjs7SUFFRCxlQUFlLEVBQUUsVUFBVSxVQUFVLEVBQUU7UUFDbkMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUM1Qzs7SUFFRCxjQUFjLEVBQUUsVUFBVSxVQUFVLEVBQUU7UUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDckM7O0lBRUQsY0FBYyxFQUFFLFlBQVk7UUFDeEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0tBQzVCOzs7Ozs7SUFNRCxPQUFPLEVBQUUsVUFBVSxRQUFRLEVBQUU7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDckM7Q0FDSixDQUFDOztBQy9FRjs7OztBQUlBLElBQUlDLFdBQVMsR0FBRyxjQUFjLENBQUMsTUFBTTs7QUFFckM7SUFDSSxJQUFJLEVBQUUsT0FBTzs7OztJQUliLEtBQUssRUFBRSxJQUFJOzs7O0lBSVgsTUFBTSxFQUFFLElBQUk7Ozs7SUFJWixlQUFlLEVBQUUsSUFBSTs7OztJQUlyQixJQUFJLEVBQUUsS0FBSzs7Q0FFZCxFQUFFLFdBQVc7SUFDVixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7Q0FDeEMsRUFBRTtJQUNDLE1BQU0sRUFBRSxTQUFTLFFBQVEsRUFBRTs7UUFFdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQzs7UUFFdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQzs7UUFFN0IsSUFBSSxVQUFVLENBQUM7O1FBRWYsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7O1lBRWYsVUFBVSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7O1NBRTNGO2FBQ0k7O1lBRUQsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNuQyxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQzNCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7O2dCQUVyQyxJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDaEUsSUFBSSxPQUFPLFVBQVUsQ0FBQyxJQUFJLFFBQVEsRUFBRTtvQkFDaEMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDaEM7Z0JBQ0QsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7YUFDM0M7WUFDRCxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzs7O1lBSTNCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUN0RCxJQUFJLEdBQUcsRUFBRTtnQkFDTCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ2QsS0FBSyxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNqQyxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNsQyxJQUFJLFVBQVUsSUFBSSxHQUFHLENBQUMsaUJBQWlCLElBQUksVUFBVSxJQUFJLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLEVBQUU7d0JBQ2hGLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7cUJBQ3pCO2lCQUNKO2dCQUNELEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDNUI7Ozs7WUFJRCxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckIsUUFBUSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1lBQ3RFLFVBQVUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hGLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQzs7WUFFeEIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNoQzs7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQzs7UUFFeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7S0FDekI7Q0FDSixDQUFDOztBQzFGRjs7OztBQUlBLElBQUlDLGFBQVcsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLFdBQVc7SUFDL0Msa0RBQWtEOzs7O1FBSTlDLE9BQU8sRUFBRSxJQUFJOzs7UUFHYixPQUFPLEVBQUU7WUFDTCxLQUFLLEVBQUUsRUFBRTtTQUNaO0tBQ0osQ0FBQztDQUNMLEVBQUUsWUFBWTtDQUNkLEVBQUU7O0lBRUMsU0FBUyxFQUFFLFVBQVUsUUFBUSxFQUFFLElBQUksRUFBRTtRQUNqQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7S0FDdkI7OztJQUdELFdBQVcsRUFBRSxZQUFZLEVBQUU7SUFDM0IsVUFBVSxFQUFFLFlBQVksRUFBRTtDQUM3QixDQUFDOztBQzVCRjtBQUNBLEFBR0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVDQSxJQUFJQyxZQUFVLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxZQUFZO0lBQy9DLGlEQUFpRDs7OztRQUk3QyxJQUFJLEVBQUUsRUFBRTs7Ozs7UUFLUixNQUFNLEVBQUUsRUFBRTs7Ozs7UUFLVixPQUFPLEVBQUUsSUFBSTs7Ozs7UUFLYixNQUFNLEVBQUUsRUFBRTs7Ozs7Ozs7Ozs7UUFXVixVQUFVLEVBQUUsRUFBRTs7Ozs7Ozs7Ozs7UUFXZCxXQUFXLEVBQUUsRUFBRTs7Ozs7UUFLZixJQUFJLEVBQUUsSUFBSTs7OztRQUlWLG1CQUFtQixFQUFFLEVBQUU7UUFDdkIsZUFBZSxFQUFFLEVBQUU7OztRQUduQixpQkFBaUIsRUFBRSxFQUFFOztRQUVyQixVQUFVLEVBQUUsS0FBSzs7UUFFakIsU0FBUyxFQUFFLEtBQUs7O1FBRWhCLFdBQVcsRUFBRSxJQUFJO0tBQ3BCLENBQUM7Q0FDTCxFQUFFLFlBQVk7O0lBRVgsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUM7UUFDaEIsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNO0tBQ3hCLENBQUMsQ0FBQztJQUNILElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3BCOztBQUVEOzs7O0lBSUksTUFBTSxFQUFFLFVBQVUsUUFBUSxFQUFFLFdBQVcsRUFBRTtRQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQzs7UUFFdkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7O1FBRXZCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7O1FBRXRCLEtBQUssSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQ2pEOztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDOztZQUV6QixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7WUFFbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQzNDO2FBQ0k7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7O1lBRXZCLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1lBQzFCLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDM0IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3RELElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7aUJBQ3hDO2dCQUNELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztnQkFDckMsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsaUJBQWlCLENBQUM7Z0JBQ2hFLElBQUksT0FBTyxVQUFVLENBQUMsS0FBSyxRQUFRLEVBQUU7b0JBQ2pDLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ2hDO2dCQUNELGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxHQUFHLE9BQU8sQ0FBQzthQUMxQztZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztZQUVqRCxLQUFLLElBQUksVUFBVSxJQUFJLGdCQUFnQixFQUFFOztnQkFFckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxNQUFNO29CQUNwQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxVQUFVO2lCQUMzQyxDQUFDO2FBQ0w7O1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7Ozs7WUFJM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDNUQ7O1FBRUQsS0FBSyxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25DLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZDOztRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDOztRQUV0QixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztLQUN6Qzs7O0lBR0QsZUFBZSxFQUFFLFVBQVUsVUFBVSxFQUFFLFFBQVEsRUFBRTtRQUM3QyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFDLElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFDdkMsSUFBSSxjQUFjLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQztRQUNoRCxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ2pCLGNBQWMsR0FBRyxVQUFVLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztTQUNwRDtRQUNELElBQUksVUFBVSxFQUFFO1lBQ1osS0FBSyxJQUFJLEdBQUcsSUFBSSxVQUFVLEVBQUU7Z0JBQ3hCLElBQUksR0FBRyxLQUFLLE9BQU8sSUFBSSxHQUFHLEtBQUssUUFBUSxFQUFFO29CQUNyQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUN6QzthQUNKO1NBQ0o7UUFDRCxJQUFJLEtBQUssRUFBRSxNQUFNLENBQUM7UUFDbEIsSUFBSSxPQUFPLFVBQVUsQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFO1lBQ3hDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDakQ7YUFDSTtZQUNELEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxPQUFPLFVBQVUsQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFO1lBQ3pDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDbkQ7YUFDSTtZQUNELE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1NBQzlCO1FBQ0QsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0I7WUFDSSxjQUFjLENBQUMsS0FBSyxLQUFLLEtBQUs7ZUFDM0IsY0FBYyxDQUFDLE1BQU0sS0FBSyxNQUFNO1VBQ3JDO1lBQ0UsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUN0RDtTQUNKO1FBQ0QsY0FBYyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDN0IsY0FBYyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7O1FBRS9CLE9BQU8sY0FBYyxDQUFDO0tBQ3pCOzs7Ozs7O0lBT0QsWUFBWSxFQUFFLFVBQVUsSUFBSSxFQUFFLEtBQUssRUFBRTtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDckM7Ozs7OztJQU1ELFlBQVksRUFBRSxVQUFVLElBQUksRUFBRTtRQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JDOzs7OztJQUtELGFBQWEsRUFBRSxVQUFVLEdBQUcsRUFBRTtRQUMxQixLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtZQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN0QztLQUNKOzs7Ozs7Ozs7Ozs7Ozs7SUFlRCxNQUFNLEVBQUUsVUFBVSxNQUFNLEVBQUUsR0FBRyxFQUFFO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ3REOzs7Ozs7SUFNRCxRQUFRLEVBQUUsVUFBVSxNQUFNLEVBQUU7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNuRDs7SUFFRCxlQUFlLEVBQUUsVUFBVSxVQUFVLEVBQUU7UUFDbkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUMsSUFBSSxVQUFVLENBQUMsYUFBYSxFQUFFO2dCQUMxQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7aUJBQ3pFO2dCQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzNFO2lCQUNJOzs7Z0JBR0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2FBQ3JFO1NBQ0o7S0FDSjs7SUFFRCxLQUFLLEVBQUUsWUFBWTtRQUNmLGNBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7O1FBRzFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLENBQUM7S0FDM0M7Q0FDSixDQUFDOztBQzlTRixzQkFBZSx1cEVBQXVwRSxDQUFDOztBQ0F2cUUsZUFBZSx1OENBQXU4QyxDQUFDOztBQ0F2OUMsY0FBZSwyb0NBQTJvQyxDQUFDOztBQ0EzcEMsY0FBZSxxOEJBQXE4QixDQUFDOztBQ0FyOUIsbUJBQWUsa2NBQWtjLENBQUM7O0FDQWxkLGlCQUFlLDJiQUEyYixDQUFDOztBQ0EzYyxpQkFBZSxraUNBQWtpQyxDQUFDOztBQ0FsakMscUJBQWUsMnZDQUEydkMsQ0FBQzs7QUNBM3dDLG1CQUFlLHF5Q0FBcXlDLENBQUM7O0FDQXJ6QyxjQUFlLDAwSEFBMDBILENBQUM7O0FDQTExSCxvQkFBZSxnbERBQWdsRCxDQUFDOztBQ0FobUQsZ0JBQWUsc3lDQUFzeUMsQ0FBQzs7QUNBdHpDLGVBQWUseXlFQUF5eUUsQ0FBQzs7QUNhenpFOzs7QUFHQSxBQUFlLFNBQVMsUUFBUSxDQUFDLE1BQU0sRUFBRTs7SUFFckMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMvQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDL0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNoQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7O0lBRTVCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7OztDQUU5QixEQ3JCREMsUUFBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7QUFFbEMsSUFBSSxlQUFlLEdBQUcsbUJBQW1CLENBQUM7Ozs7Ozs7OztBQVMxQyxTQUFTLGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7SUFDbEMsSUFBSSxVQUFVLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUNsQyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQzs7SUFFbEIsSUFBSSxHQUFHLEdBQUc7UUFDTixRQUFRLEVBQUUsRUFBRTtRQUNaLFVBQVUsRUFBRSxFQUFFO0tBQ2pCLENBQUM7SUFDRixJQUFJLFNBQVMsR0FBRyxTQUFTLFNBQVMsRUFBRSxVQUFVLEVBQUU7UUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDM0MsSUFBSSxJQUFJLEVBQUU7Z0JBQ04sVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM1QjtTQUNKO0tBQ0osQ0FBQzs7SUFFRixLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDOUIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3REOztJQUVELFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLFVBQVUsRUFBRTtRQUMvQyxHQUFHLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUMxQixTQUFTLEVBQUUsQ0FBQztLQUNmLENBQUMsQ0FBQzs7SUFFSCxPQUFPLFVBQVUsQ0FBQztDQUNyQjs7QUFFRCxTQUFTLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtJQUNyQyxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQztJQUNyQyxJQUFJLFlBQVksQ0FBQztJQUNqQixJQUFJLE1BQU0sQ0FBQztJQUNYLElBQUksT0FBTyxDQUFDOztJQUVaLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUNuQixJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZDLElBQUksR0FBRyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsSUFBSSxHQUFHLEVBQUU7WUFDTCxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUMvQzthQUNJLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7WUFDbEMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNmLFlBQVksR0FBRyxTQUFTLENBQUM7U0FDNUI7UUFDRCxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2YsT0FBTztTQUNWO0tBQ0o7O0lBRUQsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFO1FBQ2pCLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDWixLQUFLLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDOUIsSUFBSSxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxFQUFFO2dCQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN4QztpQkFDSTtnQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUc7b0JBQ1gsSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSTtvQkFDaEMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRztpQkFDakMsQ0FBQzthQUNMO1NBQ0o7S0FDSjtJQUNELElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRTtRQUNsQixPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsS0FBSyxJQUFJLElBQUksSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO1lBQy9CLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNuQixJQUFJLFVBQVUsQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFO2dCQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7YUFDcEQ7WUFDRCxJQUFJLFVBQVUsQ0FBQyxhQUFhLElBQUksSUFBSSxFQUFFO2dCQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7YUFDMUQ7WUFDRCxJQUFJLFVBQVUsQ0FBQyxlQUFlLElBQUksSUFBSSxFQUFFO2dCQUNwQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUM7YUFDOUQ7WUFDRCxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3RFO1NBQ0o7S0FDSjtJQUNELElBQUksSUFBSSxDQUFDO0lBQ1QsSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO1FBQ2xCLElBQUksR0FBRyxJQUFJQyxXQUFjLENBQUM7WUFDdEIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO1lBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsT0FBTyxFQUFFLE9BQU87U0FDbkIsQ0FBQyxDQUFDO0tBQ047U0FDSSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDekIsSUFBSSxHQUFHLElBQUlDLGFBQWdCLENBQUM7WUFDeEIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO1lBQ25CLE9BQU8sRUFBRSxPQUFPO1NBQ25CLENBQUMsQ0FBQztLQUNOOztTQUVJO1FBQ0QsSUFBSSxHQUFHLElBQUlDLFlBQWUsQ0FBQztZQUN2QixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7WUFDbkIsTUFBTSxFQUFFLFlBQVk7WUFDcEIsTUFBTSxFQUFFLE1BQU07WUFDZCxPQUFPLEVBQUUsT0FBTztTQUNuQixDQUFDLENBQUM7S0FDTjtJQUNELElBQUksSUFBSSxFQUFFO1FBQ04sSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFO1lBQ3JCLEtBQUssSUFBSSxJQUFJLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRTtnQkFDbEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7b0JBQ3pCLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2pCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7d0JBQ3ZCLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDckM7eUJBQ0k7d0JBQ0QsSUFBSSxDQUFDLEVBQUU7NEJBQ0gsY0FBYyxFQUFFLG9CQUFvQjtnQ0FDaEMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUM7NkJBQzVCO3lCQUNKLENBQUM7cUJBQ0w7aUJBQ0o7cUJBQ0ksSUFBSSxPQUFPLEdBQUcsS0FBSyxVQUFVLEVBQUU7b0JBQ2hDLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUNoQztnQkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNoQztTQUNKO1FBQ0QsSUFBSSxRQUFRLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDL0IsS0FBSyxJQUFJLElBQUksSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO2dCQUMvQixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNwRDtTQUNKO0tBQ0o7SUFDRCxPQUFPLElBQUksQ0FBQztDQUNmOztBQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtJQUNyQyxPQUFPLEtBQUssQ0FBQztDQUNoQjtBQUNELFNBQVMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtJQUN0QyxPQUFPLE1BQU0sQ0FBQztDQUNqQjs7QUFFRCxTQUFTLGdCQUFnQixDQUFDLFNBQVMsRUFBRTtJQUNqQyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDZixJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ1osT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFDRCxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQztTQUNyRSxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUU7WUFDcEIsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFCLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTs7Z0JBRWIsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7b0JBQ3pCLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3RCO2dCQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7YUFDckI7U0FDSixDQUFDLENBQUM7O0lBRVAsSUFBSSxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO1NBQ2QsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFO1lBQ3BCLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtnQkFDekIsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMxQixJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtvQkFDekIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLGdCQUFnQjt3QkFDMUIsSUFBSSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTO3FCQUN2QyxDQUFDO2lCQUNMO3FCQUNJO29CQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7aUJBQ3JCO2FBQ0o7U0FDSixDQUFDLENBQUM7SUFDUCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtRQUNkLEtBQUssQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7S0FDbEM7SUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUNmLEtBQUssQ0FBQyxNQUFNLEdBQUcsaUJBQWlCLENBQUM7S0FDcEM7O0lBRUQsSUFBSSxTQUFTLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRTtRQUM3QixLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7S0FDekM7SUFDRCxPQUFPLEtBQUssQ0FBQztDQUNoQjs7QUFFRCxTQUFTLFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7SUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDaEIsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2IsT0FBTztLQUNWO0lBQ0QsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQzs7SUFFaEIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDM0NqRCxNQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxXQUFXLEVBQUUsSUFBSSxFQUFFO1FBQ2pELElBQUksT0FBTyxDQUFDO1FBQ1osSUFBSSxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFJLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzFDLElBQUksZUFBZSxFQUFFO2dCQUNqQixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLElBQUksRUFBRTtvQkFDM0IsT0FBT0EsTUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztpQkFDeEQsQ0FBQyxDQUFDO2FBQ047WUFDRCxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDekM7YUFDSSxHQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUM5QixJQUFJLGVBQWUsRUFBRTtnQkFDakIsSUFBSSxHQUFHQSxNQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2FBQ3hEO1lBQ0QsT0FBTyxHQUFHLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3ZDO2FBQ0k7WUFDRCxPQUFPO1NBQ1Y7O1FBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixPQUFPLEVBQUUsQ0FBQztRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFdBQVc7WUFDL0IsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztZQUN6QixPQUFPLEVBQUUsQ0FBQztZQUNWLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtnQkFDZixRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ25CLEdBQUcsR0FBRyxJQUFJLENBQUM7YUFDZDtTQUNKLENBQUMsQ0FBQztLQUNOLENBQUMsQ0FBQzs7SUFFSCxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDdkIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3RCO0NBQ0o7O0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQzFDLE9BQU8sVUFBVSxRQUFRLEVBQUU7O1FBRXZCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDOztRQUV6QyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEMsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ25DLENBQUM7Q0FDTDs7QUFFRCxTQUFTLGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO0lBQzdDLEtBQUssR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ25CLE9BQU8sVUFBVSxRQUFRLEVBQUU7UUFDdkIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDekMsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUN4QyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQzFDLE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDdkMsQ0FBQztDQUNMOztBQUVELFNBQVMsY0FBYyxDQUFDLE1BQU0sRUFBRTs7SUFFNUIsSUFBSSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLElBQUksT0FBTyxFQUFFO1FBQ1QsSUFBSTtZQUNBLElBQUksSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFMUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7WUFFWCxPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxDQUFDLEVBQUU7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDMUM7S0FDSjtDQUNKOztBQ2xURCxhQUFhOztBQ0FiLGtCQUFlLGtuTUFBa25NLENBQUM7O0FDQWxvTSxnQkFBZSw0c0RBQTRzRCxDQUFDOztBQ2E1dEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMzQixNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDOztBQUV6QixTQUFTLGdCQUFnQixDQUFDLEtBQUssRUFBRTtJQUM3QixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDakMsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxHQUFHLENBQUMsU0FBUyxHQUFHLEtBQUssSUFBSSxNQUFNLENBQUM7SUFDaEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7SUFFekIsT0FBTyxNQUFNLENBQUM7Q0FDakI7Ozs7QUFJRCxTQUFTLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFOztJQUVsRixPQUFPLFVBQVUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7UUFDN0MsSUFBSSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQzNDLElBQUksTUFBTSxLQUFLLGFBQWEsRUFBRTtZQUMxQixPQUFPLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDakU7YUFDSSxJQUFJLE1BQU0sS0FBSyxVQUFVLElBQUksTUFBTSxLQUFLLFVBQVUsSUFBSSxNQUFNLEtBQUssT0FBTyxFQUFFO1lBQzNFLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZDO2FBQ0ksSUFBSSxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQzdCLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGdCQUFnQixDQUFDO1NBQzNEO2FBQ0ksSUFBSSxNQUFNLEtBQUssWUFBWSxFQUFFO1lBQzlCLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGlCQUFpQixDQUFDO1NBQzVEO2FBQ0ksSUFBSSxNQUFNLEtBQUssYUFBYSxFQUFFOztZQUUvQixJQUFJLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLEVBQUU7Z0JBQ3RELElBQUksV0FBVyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDdEQsT0FBTyxXQUFXLElBQUksQ0FBQyxDQUFDO2FBQzNCO1lBQ0QsT0FBTyxDQUFDLENBQUM7U0FDWjthQUNJO1lBQ0QsSUFBSSxvQkFBb0IsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ25GLElBQUksYUFBYSxHQUFHLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDeEgsUUFBUSxNQUFNO2dCQUNWLEtBQUssWUFBWTtvQkFDYixPQUFPLG9CQUFvQixJQUFJLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNqSCxLQUFLLGVBQWU7b0JBQ2hCLE9BQU8sYUFBYSxDQUFDO2dCQUN6QixLQUFLLGtCQUFrQjtvQkFDbkIsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDO2dCQUMzQixLQUFLLGNBQWM7b0JBQ2YsT0FBTyxvQkFBb0IsQ0FBQztnQkFDaEMsS0FBSyxtQkFBbUI7b0JBQ3BCLE9BQU8sb0JBQW9COzBCQUNyQixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLG1CQUFtQixDQUFDOzBCQUMzRCxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLG9CQUFvQixDQUFDLENBQUM7YUFDMUU7U0FDSjtLQUNKLENBQUM7Q0FDTDs7QUFFRCxTQUFTLGtCQUFrQixDQUFDLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFO0lBQ2hFLE9BQU8sVUFBVSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTtRQUM3QyxJQUFJLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDM0MsUUFBUSxNQUFNO1lBQ1YsS0FBSyxPQUFPLENBQUM7WUFDYixLQUFLLFVBQVUsQ0FBQztZQUNoQixLQUFLLFVBQVUsQ0FBQztZQUNoQixLQUFLLE9BQU87Z0JBQ1IsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEMsS0FBSyxXQUFXO2dCQUNaLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRCxLQUFLLFlBQVk7Z0JBQ2IsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksaUJBQWlCLENBQUM7WUFDN0QsS0FBSyxjQUFjO2dCQUNmLE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLG1CQUFtQixDQUFDO1lBQy9ELEtBQUssaUJBQWlCO2dCQUNsQixPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbEQsS0FBSyxRQUFRO2dCQUNULE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JELEtBQUssYUFBYTs7Z0JBRWQsSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxFQUFFO29CQUN0RCxJQUFJLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ3RELE9BQU8sV0FBVyxJQUFJLEdBQUcsQ0FBQztpQkFDN0I7Z0JBQ0QsT0FBTyxHQUFHLENBQUM7U0FDbEI7S0FDSixDQUFDO0NBQ0w7Ozs7Ozs7Ozs7Ozs7QUFhRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7O0lBRWxDLElBQUksaUJBQWlCLEdBQUc7UUFDcEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1FBQzFCLFNBQVMsRUFBRSxPQUFPLENBQUMsT0FBTztRQUMxQixLQUFLLEVBQUUsT0FBTyxDQUFDLGFBQWE7UUFDNUIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxhQUFhO0tBQy9CLENBQUM7O0lBRUYsNENBQTRDOzs7Ozs7UUFNeEMsb0JBQW9CLEVBQUUsSUFBSTs7Ozs7O1FBTTFCLG9CQUFvQixFQUFFLElBQUk7Ozs7OztRQU0xQixvQkFBb0IsRUFBRSxJQUFJOzs7Ozs7UUFNMUIsb0JBQW9CLEVBQUUsS0FBSzs7UUFFM0IsaUJBQWlCLEVBQUUsS0FBSzs7UUFFeEIsa0JBQWtCLEVBQUUsRUFBRTs7Ozs7UUFLdEIsWUFBWSxFQUFFLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7O1lBRXRDLElBQUksRUFBRSxPQUFPLENBQUMsVUFBVTtTQUMzQixFQUFFLGlCQUFpQixDQUFDLENBQUM7OztRQUd0QixZQUFZLEVBQUUsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzs7OztZQUl0QyxNQUFNLEVBQUUsT0FBTyxDQUFDLGFBQWE7WUFDN0IsSUFBSSxFQUFFLE9BQU8sQ0FBQyx1QkFBdUI7U0FDeEMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDOzs7Ozs7UUFNdEIsWUFBWSxFQUFFLElBQUksU0FBUyxDQUFDLGlCQUFpQixDQUFDOztRQUU5QyxZQUFZLEVBQUUsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzs7WUFFdEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1NBQzNCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQzs7UUFFdEIsaUJBQWlCLEVBQUUsSUFBSSxTQUFTLENBQUM7WUFDN0IsS0FBSyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztTQUNsQyxDQUFDO1FBQ0Ysb0JBQW9CLEVBQUUsSUFBSSxTQUFTLENBQUM7WUFDaEMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztTQUNsQyxDQUFDO1FBQ0Ysb0JBQW9CLEVBQUUsSUFBSSxTQUFTLENBQUM7WUFDaEMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztTQUNsQyxDQUFDO1FBQ0Ysa0JBQWtCLEVBQUUsSUFBSSxTQUFTLENBQUM7WUFDOUIsS0FBSyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztTQUNsQyxDQUFDOztRQUVGLFlBQVksRUFBRSxJQUFJLFdBQVcsRUFBRTs7UUFFL0IsaUJBQWlCLEVBQUUsSUFBSSxRQUFRLENBQUM7WUFDNUIsTUFBTSxFQUFFLElBQUksTUFBTTtnQkFDZCxNQUFNLENBQUMsTUFBTSxDQUFDLDhCQUE4QixDQUFDO2dCQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDO2FBQ25EO1lBQ0QsYUFBYSxFQUFFO2dCQUNYLFVBQVUsRUFBRSxJQUFJO2FBQ25CO1lBQ0QsZUFBZSxFQUFFO2dCQUNiLFVBQVUsRUFBRSxJQUFJO2FBQ25CO1NBQ0osQ0FBQztRQUNGLGlCQUFpQixFQUFFLElBQUksUUFBUSxDQUFDO1lBQzVCLE1BQU0sRUFBRSxJQUFJLE1BQU07Z0JBQ2QsTUFBTSxDQUFDLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQztnQkFDN0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQzthQUNuRDtZQUNELGFBQWEsRUFBRTtnQkFDWCxXQUFXLEVBQUUsSUFBSTthQUNwQjtZQUNELGVBQWUsRUFBRTtnQkFDYixXQUFXLEVBQUUsSUFBSTthQUNwQjtTQUNKLENBQUM7UUFDRixpQkFBaUIsRUFBRSxJQUFJLFFBQVEsQ0FBQztZQUM1QixNQUFNLEVBQUUsSUFBSSxNQUFNO2dCQUNkLE1BQU0sQ0FBQyxNQUFNLENBQUMsOEJBQThCLENBQUM7Z0JBQzdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsaUNBQWlDLENBQUM7YUFDbkQ7WUFDRCxhQUFhLEVBQUU7Z0JBQ1gsVUFBVSxFQUFFLElBQUk7YUFDbkI7WUFDRCxlQUFlLEVBQUU7Z0JBQ2IsVUFBVSxFQUFFLElBQUk7YUFDbkI7U0FDSixDQUFDOztRQUVGLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQztZQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQztTQUN6RCxDQUFDO0tBQ0wsQ0FBQztDQUNMLHNDQUFzQzs7Ozs7OztJQU9uQyxNQUFNLEVBQUUsVUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFO1FBQzdCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEtBQUssS0FBSztlQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxNQUFNO1VBQ3hDO1lBQ0UsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7UUFFbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7UUFFbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7UUFFbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztLQUNyQzs7O0lBR0QsV0FBVyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtRQUM3QyxJQUFJLFFBQVEsQ0FBQztRQUNiLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ3ZCLFFBQVEsR0FBRyxDQUFDLENBQUM7U0FDaEI7YUFDSTtZQUNELFFBQVEsR0FBRztnQkFDUCxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNWLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU07Z0JBQzVCLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDO2FBQzdCLENBQUM7U0FDTDtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztLQUN6Qzs7SUFFRCxXQUFXLEVBQUUsWUFBWTtRQUNyQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFO1lBQzVCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7U0FDckM7YUFDSTtZQUNELE9BQU87Z0JBQ0gsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDVixLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUM5QixNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO2dCQUNoQyxnQkFBZ0IsRUFBRSxDQUFDO2FBQ3RCLENBQUM7U0FDTDtLQUNKOzs7Ozs7Ozs7SUFTRCxNQUFNLEVBQUUsVUFBVSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7UUFDN0MsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7O1FBRWxCLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7O1FBRXJCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDcEMsSUFBSSxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQzs7UUFFcEMsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzs7UUFFdEQsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUNuQyxJQUFJLGVBQWUsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDOztRQUU3QyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUNoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRTtnQkFDOUIsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0M7U0FDSjtRQUNELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRTtvQkFDbkMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3BEO2FBQ0o7U0FDSjtRQUNELGlCQUFpQixDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7O1FBRWxDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDOztRQUVyQixJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztRQUNyRCxJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztRQUNyRCxJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztRQUNyRCxJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztRQUNyRCxJQUFJLENBQUMsb0JBQW9CLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQ3pFLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLENBQUMsQ0FBQztZQUNuRixvQkFBb0IsR0FBRyxJQUFJLENBQUM7U0FDL0I7O1FBRUQsSUFBSSxvQkFBb0IsRUFBRTtZQUN0QixXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUM7U0FDdEc7O1FBRUQsU0FBUyxhQUFhLEdBQUc7WUFDckIsSUFBSSxRQUFRLEVBQUU7Z0JBQ1YsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDOztnQkFFcEMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzNCLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsUUFBUSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQzthQUMvRjtZQUNELEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3BELElBQUksUUFBUSxFQUFFO2dCQUNWLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQy9CO1NBQ0o7O1FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFO1lBQ25ELE9BQU8sVUFBVSxDQUFDLFFBQVEsS0FBSyxjQUFjLENBQUMsUUFBUSxDQUFDO1NBQzFEOzs7UUFHRCxRQUFRLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsSUFBSSxvQkFBb0IsRUFBRTs7WUFFdEIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM3RCxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztZQUUzQixhQUFhLEVBQUUsQ0FBQzs7WUFFaEIsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDOUMsSUFBSSxVQUFVLEdBQUc7Z0JBQ2IsV0FBVyxFQUFFLFlBQVk7b0JBQ3JCLE9BQU8sZ0JBQWdCLENBQUM7aUJBQzNCO2dCQUNELFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztnQkFDMUcsaUJBQWlCLEVBQUUsaUJBQWlCO2dCQUNwQyxXQUFXLEVBQUUsUUFBUSxDQUFDLGlCQUFpQjthQUMxQyxDQUFDOztZQUVGLFFBQVEsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDOztTQUU5RDtRQUNELElBQUksb0JBQW9CLEVBQUU7OztZQUd0QixXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdELFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7O1lBRTNCLGFBQWEsRUFBRSxDQUFDOztZQUVoQixJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUM5QyxJQUFJLFVBQVUsR0FBRztnQkFDYixXQUFXLEVBQUUsWUFBWTtvQkFDckIsT0FBTyxnQkFBZ0IsQ0FBQztpQkFDM0I7Z0JBQ0QsVUFBVSxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUM7Z0JBQ2xGLGlCQUFpQixFQUFFLGlCQUFpQjtnQkFDcEMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxpQkFBaUI7YUFDMUMsQ0FBQztZQUNGLFFBQVEsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQzlEOztRQUVELElBQUksb0JBQW9CLEVBQUU7WUFDdEIsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQixXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDOztZQUU3RCxhQUFhLEVBQUUsQ0FBQzs7OztZQUloQixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7O1lBRWhCLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQzlDLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEYsSUFBSSxVQUFVLEdBQUc7Z0JBQ2IsV0FBVyxFQUFFLFlBQVk7b0JBQ3JCLE9BQU8sZ0JBQWdCLENBQUM7aUJBQzNCO2dCQUNELFdBQVcsRUFBRSxVQUFVLFFBQVEsRUFBRSxVQUFVLEVBQUU7b0JBQ3pDLElBQUksYUFBYSxHQUFHLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDL0MsSUFBSSxhQUFhLEVBQUU7d0JBQ2YsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQzt3QkFDbkMsSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQzt3QkFDL0IsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFOzRCQUM5QyxJQUFJLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDOzRCQUN6RixJQUFJLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQzs0QkFDbkUsSUFBSSxDQUFDLHVCQUF1QixFQUFFO2dDQUMxQix1QkFBdUIsR0FBRyxVQUFVLENBQUMseUJBQXlCLEdBQUcsSUFBSSxTQUFTLENBQUM7b0NBQzNFLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSztvQ0FDbkIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPO29DQUMxQixTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU87b0NBQzFCLFNBQVMsRUFBRSxLQUFLO29DQUNoQixLQUFLLEVBQUUsS0FBSztpQ0FDZixDQUFDLENBQUM7NkJBQ047NEJBQ0QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU07bUNBQzVCLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssbUJBQW1CLENBQUMsTUFBTSxDQUFDLE1BQU07OEJBQ2hGO2dDQUNFLHVCQUF1QixDQUFDLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQzs2QkFDakY7aUNBQ0k7Z0NBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0NBQ3hELHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7aUNBQ3JFOzZCQUNKOzRCQUNELHVCQUF1QixDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7NEJBQzFELHVCQUF1QixDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7eUJBQy9EOzZCQUNJOzRCQUNELElBQUksaUJBQWlCLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7NEJBQ2hGLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLElBQUksVUFBVSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sS0FBSyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUU7Z0NBQy9HLFVBQVUsQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQzs2QkFDbkY7NEJBQ0QsVUFBVSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO3lCQUM3RDtxQkFDSjtvQkFDRCxVQUFVLENBQUMseUJBQXlCLEdBQUcsVUFBVSxDQUFDLHlCQUF5QixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDN0YsSUFBSSxhQUFhLEVBQUU7O3dCQUVmLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLHlCQUF5QixFQUFFLGNBQWMsQ0FBQyxDQUFDO3FCQUNuRTt5QkFDSTt3QkFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsRUFBRSxjQUFjLEVBQUUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDeEc7aUJBQ0o7Z0JBQ0QsVUFBVSxFQUFFLFVBQVUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7b0JBQ2xELElBQUksTUFBTSxLQUFLLHlCQUF5QixFQUFFO3dCQUN0QyxPQUFPLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQztxQkFDL0M7eUJBQ0ksSUFBSSxNQUFNLEtBQUssZ0JBQWdCLEVBQUU7d0JBQ2xDLE9BQU8sVUFBVSxDQUFDLHVCQUF1QixDQUFDO3FCQUM3Qzt5QkFDSSxJQUFJLE1BQU0sS0FBSyx5QkFBeUIsRUFBRTt3QkFDM0MsT0FBTyxVQUFVLENBQUMseUJBQXlCLENBQUM7cUJBQy9DO3lCQUNJLElBQUksTUFBTSxLQUFLLGFBQWEsRUFBRTt3QkFDL0IsT0FBTyxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQztxQkFDaEQ7eUJBQ0k7d0JBQ0QsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUNqQztpQkFDSjtnQkFDRCxpQkFBaUIsRUFBRSxZQUFZOztvQkFFM0IsT0FBTyxJQUFJLENBQUM7aUJBQ2Y7Z0JBQ0QsV0FBVyxFQUFFLFFBQVEsQ0FBQyxpQkFBaUI7YUFDMUMsQ0FBQzs7WUFFRixRQUFRLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztTQUM5RDs7UUFFRCxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFpQkQsV0FBVyxFQUFFLFVBQVUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1FBQ3JELElBQUksVUFBVSxHQUFHO1lBQ2IsTUFBTSxFQUFFLENBQUM7WUFDVCxLQUFLLEVBQUUsQ0FBQztZQUNSLFFBQVEsRUFBRSxDQUFDO1lBQ1gsVUFBVSxFQUFFLENBQUM7WUFDYixTQUFTLEVBQUUsQ0FBQztZQUNaLE1BQU0sRUFBRSxDQUFDO1lBQ1QsUUFBUSxFQUFFLENBQUM7U0FDZCxDQUFDO1FBQ0YsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO1lBQzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQzs7WUFFM0MsSUFBSSxHQUFHLFFBQVEsQ0FBQztTQUNuQjs7UUFFRCxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckIsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hCLFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQzs7UUFFakQsSUFBSSxRQUFRLEVBQUU7WUFDVixRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQzs7UUFFdkYsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNoQyxTQUFTLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLFNBQVMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELFNBQVMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELFNBQVMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELFNBQVMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hELFNBQVMsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7UUFFM0IsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzNCLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQUMzQjs7Ozs7Ozs7Ozs7SUFXRCxpQkFBaUIsRUFBRSxZQUFZO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztLQUM1Qjs7Ozs7Ozs7SUFRRCxpQkFBaUIsRUFBRSxZQUFZO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztLQUM1Qjs7Ozs7Ozs7Ozs7SUFXRCxpQkFBaUIsRUFBRSxZQUFZO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztLQUM1Qjs7Ozs7Ozs7O0lBU0QsaUJBQWlCLEVBQUUsWUFBWTtRQUMzQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7S0FDNUI7Ozs7OztJQU1ELE9BQU8sRUFBRSxVQUFVLFFBQVEsRUFBRTtRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzs7UUFFcEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUN2QztDQUNKLENBQUM7O0FDcm1CRjs7Ozs7Ozs7OztBQVVBLElBQUlrRCxNQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sbUNBQW1DO0lBQ3pELE9BQU8sRUFBRSxLQUFLOzs7O0lBSWQsU0FBUyxFQUFFLENBQUM7Ozs7O0lBS1osWUFBWSxFQUFFLENBQUM7Ozs7O0lBS2YsTUFBTSxFQUFFLENBQUM7Ozs7O0lBS1QsV0FBVyxFQUFFLEVBQUU7Ozs7O0lBS2YsY0FBYyxFQUFFLENBQUM7Q0FDcEIsRUFBRSxXQUFXO0lBQ1YsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0NBQ2hCOztBQUVEOzs7O0lBSUksS0FBSyxFQUFFLFdBQVc7UUFDZCxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOztRQUVqQixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDOztRQUVsRCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDOztRQUVuQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3hCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7O1FBRXhCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2QyxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDO1lBQzdCLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRXRDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QixDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekIsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdDOzs7UUFHRCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDOztRQUVuQixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRTFCLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2Qzs7O1FBR0QsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUM5QixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25CLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRTdCLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUQ7OztRQUdELE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQzFCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDZixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckUsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM3QztTQUNKO1FBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4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QUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7O0lBRWIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDNUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDcEMsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0lBQ2pDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQ2pCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsRUFBRTtJQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNuRyxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNwQixDQUFDOztBQzVQRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQSxBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJBLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQzs7Ozs7OztBQU9mLEtBQUssQ0FBQyxNQUFNLEdBQUcsV0FBVztJQUN0QixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3RCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzVCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUUzQixJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDNUIsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNKLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNyQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQyxDQUFDOzs7Ozs7Ozs7O0FBVUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7O0FBVzNCLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFB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QU8sQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNk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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xheWdsLmpzIiwic291cmNlcyI6WyIuLi9zcmMvYW5pbWF0aW9uL2Vhc2luZy5qcyIsIi4uL3NyYy9hbmltYXRpb24vQ2xpcC5qcyIsIi4uL3NyYy9hbmltYXRpb24vQW5pbWF0b3IuanMiLCIuLi9zcmMvYW5pbWF0aW9uL0JsZW5kMURDbGlwLmpzIiwiLi4vc3JjL3V0aWwvZGVsYXVuYXkuanMiLCIuLi9zcmMvZ2xtYXRyaXgvY29tbW9uLmpzIiwiLi4vc3JjL2dsbWF0cml4L3ZlYzIuanMiLCIuLi9zcmMvbWF0aC9WZWN0b3IyLmpzIiwiLi4vc3JjL2FuaW1hdGlvbi9CbGVuZDJEQ2xpcC5qcyIsIi4uL3NyYy9nbG1hdHJpeC92ZWMzLmpzIiwiLi4vc3JjL2dsbWF0cml4L3ZlYzQuanMiLCIuLi9zcmMvZ2xtYXRyaXgvbWF0My5qcyIsIi4uL3NyYy9nbG1hdHJpeC9xdWF0LmpzIiwiLi4vc3JjL2FuaW1hdGlvbi9TYW1wbGVyVHJhY2suanMiLCIuLi9zcmMvY29yZS9taXhpbi9leHRlbmQuanMiLCIuLi9zcmMvY29yZS9taXhpbi9ub3RpZmllci5qcyIsIi4uL3NyYy9jb3JlL3V0aWwuanMiLCIuLi9zcmMvY29yZS9CYXNlLmpzIiwiLi4vc3JjL2NvcmUvcmVxdWVzdC5qcyIsIi4uL3NyYy9jb3JlL3ZlbmRvci5qcyIsIi4uL3NyYy9UaW1lbGluZS5qcyIsIi4uL3NyYy9hbmltYXRpb24vVGltZWxpbmUuanMiLCIuLi9zcmMvYW5pbWF0aW9uL1RyYWNrQ2xpcC5qcyIsIi4uL3NyYy9jb3JlL0dMSW5mby5qcyIsIi4uL3NyYy9jb3JlL2dsZW51bS5qcyIsIi4uL3NyYy9jb3JlL0xpbmtlZExpc3QuanMiLCIuLi9zcmMvY29yZS9MUlUuanMiLCIuLi9zcmMvY29yZS9jb2xvci5qcyIsIi4uL3NyYy9NYXRlcmlhbC5qcyIsIi4uL3NyYy9ncHUvR0xQcm9ncmFtLmpzIiwiLi4vc3JjL2dwdS9Qcm9ncmFtTWFuYWdlci5qcyIsIi4uL3NyYy9TaGFkZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9wcmV6Lmdsc2wuanMiLCIuLi9zcmMvZ2xtYXRyaXgvbWF0NC5qcyIsIi4uL3NyYy9SZW5kZXJlci5qcyIsIi4uL3NyYy9tYXRoL1ZlY3RvcjMuanMiLCIuLi9zcmMvbWF0aC9RdWF0ZXJuaW9uLmpzIiwiLi4vc3JjL21hdGgvTWF0cml4NC5qcyIsIi4uL3NyYy9tYXRoL0JvdW5kaW5nQm94LmpzIiwiLi4vc3JjL05vZGUuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9oZWFkZXIvY2FsY0FtYmllbnRTSExpZ2h0Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9oZWFkZXIvbGlnaHQuanMiLCIuLi9zcmMvTGlnaHQuanMiLCIuLi9zcmMvbWF0aC9QbGFuZS5qcyIsIi4uL3NyYy9tYXRoL0ZydXN0dW0uanMiLCIuLi9zcmMvbWF0aC9SYXkuanMiLCIuLi9zcmMvQ2FtZXJhLmpzIiwiLi4vc3JjL1NjZW5lLmpzIiwiLi4vc3JjL2NvcmUvQ2FjaGUuanMiLCIuLi9zcmMvR2VvbWV0cnlCYXNlLmpzIiwiLi4vc3JjL0dlb21ldHJ5LmpzIiwiLi4vc3JjL2dlb21ldHJ5L1BsYW5lLmpzIiwiLi4vc3JjL2dlb21ldHJ5L0N1YmUuanMiLCIuLi9zcmMvZ2VvbWV0cnkvU3BoZXJlLmpzIiwiLi4vc3JjL2dlb21ldHJ5L1BhcmFtZXRyaWNTdXJmYWNlLmpzIiwiLi4vc3JjL1RleHR1cmUuanMiLCIuLi9zcmMvbWF0aC91dGlsLmpzIiwiLi4vc3JjL1RleHR1cmUyRC5qcyIsIi4uL3NyYy9UZXh0dXJlQ3ViZS5qcyIsIi4uL3NyYy9SZW5kZXJhYmxlLmpzIiwiLi4vc3JjL01lc2guanMiLCIuLi9zcmMvY2FtZXJhL1BlcnNwZWN0aXZlLmpzIiwiLi4vc3JjL2NhbWVyYS9PcnRob2dyYXBoaWMuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9zdGFuZGFyZC5nbHNsLmpzIiwiLi4vc3JjL1N0YW5kYXJkTWF0ZXJpYWwuanMiLCIuLi9zcmMvc2hhZGVyL2xpYnJhcnkuanMiLCIuLi9zcmMvSm9pbnQuanMiLCIuLi9zcmMvU2tlbGV0b24uanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS91dGlsLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9iYXNpYy5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvbGFtYmVydC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2Uvd2lyZWZyYW1lLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9za3lib3guZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvYnVpbHRpbi5qcyIsIi4uL3NyYy9sb2FkZXIvR0xURi5qcyIsIi4uL3NyYy9saWdodC9EaXJlY3Rpb25hbC5qcyIsIi4uL3NyYy9saWdodC9Qb2ludC5qcyIsIi4uL3NyYy9saWdodC9TcG90LmpzIiwiLi4vc3JjL2xpZ2h0L0FtYmllbnQuanMiLCIuLi9zcmMvRnJhbWVCdWZmZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3ZlcnRleC5nbHNsLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvUGFzcy5qcyIsIi4uL3NyYy9wbHVnaW4vU2t5Ym94LmpzIiwiLi4vc3JjL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAuanMiLCIuLi9zcmMvdXRpbC9kZHMuanMiLCIuLi9zcmMvdXRpbC9oZHIuanMiLCIuLi9zcmMvdXRpbC90ZXh0dXJlLmpzIiwiLi4vc3JjL3V0aWwvc2hhZGVyL2ludGVncmF0ZUJSREYuZ2xzbC5qcyIsIi4uL3NyYy91dGlsL3NoYWRlci9wcmVmaWx0ZXIuZ2xzbC5qcyIsIi4uL3NyYy91dGlsL2N1YmVtYXAuanMiLCIuLi9zcmMvbGlnaHQvQW1iaWVudEN1YmVtYXAuanMiLCIuLi9zcmMvbGlnaHQvQW1iaWVudFNILmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvVGV4dHVyZVBvb2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9zaGFkb3dtYXAuZ2xzbC5qcyIsIi4uL3NyYy9wcmVQYXNzL1NoYWRvd01hcC5qcyIsIi4uL3NyYy9waWNraW5nL1JheVBpY2tpbmcuanMiLCIuLi9zcmMvdXRpbC9zaC5qcyIsIi4uL3NyYy9hcHBsaWNhdGlvbi5qcyIsIi4uL3NyYy9hc3luYy9UYXNrLmpzIiwiLi4vc3JjL2FzeW5jL1Rhc2tHcm91cC5qcyIsIi4uL3NyYy9jb21wb3NpdG9yL0NvbXBvc2l0b3JOb2RlLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvR3JhcGguanMiLCIuLi9zcmMvY29tcG9zaXRvci9Db21wb3NpdG9yLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvU2NlbmVOb2RlLmpzIiwiLi4vc3JjL2NvbXBvc2l0b3IvVGV4dHVyZU5vZGUuanMiLCIuLi9zcmMvY29tcG9zaXRvci9GaWx0ZXJOb2RlLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9jb2xvcmFkanVzdC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9ibHVyLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2x1bS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9sdXQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvdmlnbmV0dGUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3Ivb3V0cHV0Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2JyaWdodC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9kb3duc2FtcGxlLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL3Vwc2FtcGxlLmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9jb21wb3NpdG9yL2hkci5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci9sZW5zZmxhcmUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvYmxlbmQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2NvbXBvc2l0b3IvZnhhYS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9yZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yLmpzIiwiLi4vc3JjL2NyZWF0ZUNvbXBvc2l0b3IuanMiLCIuLi9zcmMvY29tcG9zaXRvci9jcmVhdGVDb21wb3NpdG9yLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZ2J1ZmZlci5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvY2h1bmsuZ2xzbC5qcyIsIi4uL3NyYy9kZWZlcnJlZC9HQnVmZmVyLmpzIiwiLi4vc3JjL2dlb21ldHJ5L0NvbmUuanMiLCIuLi9zcmMvZ2VvbWV0cnkvQ3lsaW5kZXIuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9saWdodHZvbHVtZS5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvc3BvdC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZGlyZWN0aW9uYWwuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnQuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnRzaC5nbHNsLmpzIiwiLi4vc3JjL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudGN1YmVtYXAuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL3BvaW50Lmdsc2wuanMiLCIuLi9zcmMvc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcGhlcmUuZ2xzbC5qcyIsIi4uL3NyYy9zaGFkZXIvc291cmNlL2RlZmVycmVkL3R1YmUuZ2xzbC5qcyIsIi4uL3NyYy9kZWZlcnJlZC9SZW5kZXJlci5qcyIsIi4uL3NyYy9nbG1hdHJpeC9tYXQyLmpzIiwiLi4vc3JjL2dsbWF0cml4L21hdDJkLmpzIiwiLi4vc3JjL2dsbWF0cml4L2luZGV4LmpzIiwiLi4vc3JjL2RlcC9nbG1hdHJpeC5qcyIsIi4uL3NyYy9saWdodC9TcGhlcmUuanMiLCIuLi9zcmMvbGlnaHQvVHViZS5qcyIsIi4uL3NyYy9sb2FkZXIvRlguanMiLCIuLi9zcmMvbWF0aC9NYXRyaXgyLmpzIiwiLi4vc3JjL21hdGgvTWF0cml4MmQuanMiLCIuLi9zcmMvbWF0aC9NYXRyaXgzLmpzIiwiLi4vc3JjL21hdGgvVmFsdWUuanMiLCIuLi9zcmMvbWF0aC9WZWN0b3I0LmpzIiwiLi4vc3JjL3BhcnRpY2xlL1BhcnRpY2xlLmpzIiwiLi4vc3JjL3BhcnRpY2xlL0VtaXR0ZXIuanMiLCIuLi9zcmMvcGFydGljbGUvRmllbGQuanMiLCIuLi9zcmMvcGFydGljbGUvRm9yY2VGaWVsZC5qcyIsIi4uL3NyYy9wYXJ0aWNsZS9wYXJ0aWNsZS5nbHNsLmpzIiwiLi4vc3JjL3BhcnRpY2xlL1BhcnRpY2xlUmVuZGVyYWJsZS5qcyIsIi4uL3NyYy9waWNraW5nL2NvbG9yLmdsc2wuanMiLCIuLi9zcmMvcGlja2luZy9QaXhlbFBpY2tpbmcuanMiLCIuLi9zcmMvcGx1Z2luL0ZyZWVDb250cm9sLmpzIiwiLi4vc3JjL3BsdWdpbi9HYW1lcGFkQ29udHJvbC5qcyIsIi4uL3NyYy9wbHVnaW4vR2VzdHVyZU1nci5qcyIsIi4uL3NyYy9wbHVnaW4vSW5maW5pdGVQbGFuZS5qcyIsIi4uL3NyYy9wbHVnaW4vT3JiaXRDb250cm9sLmpzIiwiLi4vc3JjL1N0YXRpY0dlb21ldHJ5LmpzIiwiLi4vc3JjL3V0aWwvbWVzaC5qcyIsIi4uL3NyYy91dGlsL3RyYW5zZmVyYWJsZS5qcyIsIi4uL3NyYy92ZXJzaW9uLmpzIiwiLi4vc3JjL3ZyL291dHB1dC5nbHNsLmpzIiwiLi4vc3JjL3ZyL0NhcmRib2FyZERpc3RvcnRlci5qcyIsIi4uL3NyYy92ci9TdGVyZW9DYW1lcmEuanMiLCIuLi9zcmMvY2xheWdsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIOe8k+WKqOWHveaVsOadpeiHqiBodHRwczovL2dpdGh1Yi5jb20vc29sZS90d2Vlbi5qcy9ibG9iL21hc3Rlci9zcmMvVHdlZW4uanNcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkuYW5pbWF0aW9uLmVhc2luZ1xyXG4gKi9cclxudmFyIGVhc2luZyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5saW5lYXJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxpbmVhcjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFkcmF0aWNJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1YWRyYXRpY091dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIGsgKiAoMiAtIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFkcmF0aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVhZHJhdGljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC0gMC41ICogKC0tayAqIChrIC0gMikgLSAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuY3ViaWNJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY3ViaWNJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrICogayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmN1YmljT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjdWJpY091dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiAtLWsgKiBrICogayArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmN1YmljSW5PdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGN1YmljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwLjUgKiAoKGsgLT0gMikgKiBrICogayArIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFydGljSW5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHF1YXJ0aWNJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrICogayAqIGsgKiBrO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5xdWFydGljT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWFydGljT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSAoLS1rICogayAqIGsgKiBrKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcucXVhcnRpY0luT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWFydGljSW5PdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICBpZiAoKGsgKj0gMikgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwLjUgKiBrICogayAqIGsgKiBrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLSAwLjUgKiAoKGsgLT0gMikgKiBrICogayAqIGsgLSAyKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcucXVpbnRpY0luXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBxdWludGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gayAqIGsgKiBrICogayAqIGs7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1aW50aWNPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHF1aW50aWNPdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gLS1rICogayAqIGsgKiBrICogayArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnF1aW50aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcXVpbnRpY0luT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMC41ICogayAqIGsgKiBrICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwLjUgKiAoKGsgLT0gMikgKiBrICogayAqIGsgKiBrICsgMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnNpbnVzb2lkYWxJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2ludXNvaWRhbEluOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSBNYXRoLmNvcyhrICogTWF0aC5QSSAvIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5zaW51c29pZGFsT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzaW51c29pZGFsT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguc2luKGsgKiBNYXRoLlBJIC8gMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLnNpbnVzb2lkYWxJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2ludXNvaWRhbEluT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqICgxIC0gTWF0aC5jb3MoTWF0aC5QSSAqIGspKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZXhwb25lbnRpYWxJbjogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHJldHVybiBrID09PSAwID8gMCA6IE1hdGgucG93KDEwMjQsIGsgLSAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGV4cG9uZW50aWFsT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgcmV0dXJuIGsgPT09IDEgPyAxIDogMSAtIE1hdGgucG93KDIsIC0gMTAgKiBrKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZXhwb25lbnRpYWxJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZXhwb25lbnRpYWxJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMC41ICogTWF0aC5wb3coMTAyNCwgayAtIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMC41ICogKC0gTWF0aC5wb3coMiwgLSAxMCAqIChrIC0gMSkpICsgMik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmNpcmN1bGFySW5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNpcmN1bGFySW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gMSAtIE1hdGguc3FydCgxIC0gayAqIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jaXJjdWxhck91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY2lyY3VsYXJPdXQ6IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KDEgLSAoLS1rICogaykpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5jaXJjdWxhckluT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjaXJjdWxhckluT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLSAwLjUgKiAoTWF0aC5zcXJ0KDEgLSBrICogaykgLSAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqIChNYXRoLnNxcnQoMSAtIChrIC09IDIpICogaykgKyAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZWxhc3RpY0luXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBlbGFzdGljSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICB2YXIgcywgYSA9IDAuMSwgcCA9IDAuNDtcclxuICAgICAgICBpZiAoayA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGsgPT09IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYSB8fCBhIDwgMSkge1xyXG4gICAgICAgICAgICBhID0gMTsgcyA9IHAgLyA0O1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBzID0gcCAqIE1hdGguYXNpbigxIC8gYSkgLyAoMiAqIE1hdGguUEkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLSAoYSAqIE1hdGgucG93KDIsIDEwICogKGsgLT0gMSkpICpcclxuICAgICAgICAgICAgICAgICAgICBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5lYXNpbmcuZWxhc3RpY091dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZWxhc3RpY091dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHZhciBzLCBhID0gMC4xLCBwID0gMC40O1xyXG4gICAgICAgIGlmIChrID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoayA9PT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhIHx8IGEgPCAxKSB7XHJcbiAgICAgICAgICAgIGEgPSAxOyBzID0gcCAvIDQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHMgPSBwICogTWF0aC5hc2luKDEgLyBhKSAvICgyICogTWF0aC5QSSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoYSAqIE1hdGgucG93KDIsIC0gMTAgKiBrKSAqXHJcbiAgICAgICAgICAgICAgICBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICsgMSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmVsYXN0aWNJbk91dFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZWxhc3RpY0luT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMsIGEgPSAwLjEsIHAgPSAwLjQ7XHJcbiAgICAgICAgaWYgKGsgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWEgfHwgYSA8IDEpIHtcclxuICAgICAgICAgICAgYSA9IDE7IHMgPSBwIC8gNDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgcyA9IHAgKiBNYXRoLmFzaW4oMSAvIGEpIC8gKDIgKiBNYXRoLlBJKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChrICo9IDIpIDwgMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLSAwLjUgKiAoYSAqIE1hdGgucG93KDIsIDEwICogKGsgLT0gMSkpXHJcbiAgICAgICAgICAgICAgICAqIE1hdGguc2luKChrIC0gcykgKiAoMiAqIE1hdGguUEkpIC8gcCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYSAqIE1hdGgucG93KDIsIC0xMCAqIChrIC09IDEpKVxyXG4gICAgICAgICAgICAgICAgKiBNYXRoLnNpbigoayAtIHMpICogKDIgKiBNYXRoLlBJKSAvIHApICogMC41ICsgMTtcclxuXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmJhY2tJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYmFja0luOiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMgPSAxLjcwMTU4O1xyXG4gICAgICAgIHJldHVybiBrICogayAqICgocyArIDEpICogayAtIHMpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5iYWNrT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBiYWNrT3V0OiBmdW5jdGlvbihrKSB7XHJcbiAgICAgICAgdmFyIHMgPSAxLjcwMTU4O1xyXG4gICAgICAgIHJldHVybiAtLWsgKiBrICogKChzICsgMSkgKiBrICsgcykgKyAxO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5iYWNrSW5PdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJhY2tJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIHZhciBzID0gMS43MDE1OCAqIDEuNTI1O1xyXG4gICAgICAgIGlmICgoayAqPSAyKSA8IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDAuNSAqIChrICogayAqICgocyArIDEpICogayAtIHMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDAuNSAqICgoayAtPSAyKSAqIGsgKiAoKHMgKyAxKSAqIGsgKyBzKSArIDIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5ib3VuY2VJblxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGtcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYm91bmNlSW46IGZ1bmN0aW9uKGspIHtcclxuICAgICAgICByZXR1cm4gMSAtIGVhc2luZy5ib3VuY2VPdXQoMSAtIGspO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLmVhc2luZy5ib3VuY2VPdXRcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBrXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJvdW5jZU91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrIDwgKDEgLyAyLjc1KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gNy41NjI1ICogayAqIGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGsgPCAoMiAvIDIuNzUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA3LjU2MjUgKiAoayAtPSAoMS41IC8gMi43NSkpICogayArIDAuNzU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChrIDwgKDIuNSAvIDIuNzUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiA3LjU2MjUgKiAoayAtPSAoMi4yNSAvIDIuNzUpKSAqIGsgKyAwLjkzNzU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDcuNTYyNSAqIChrIC09ICgyLjYyNSAvIDIuNzUpKSAqIGsgKyAwLjk4NDM3NTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAYWxpYXMgY2xheS5hbmltYXRpb24uZWFzaW5nLmJvdW5jZUluT3V0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0ga1xyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBib3VuY2VJbk91dDogZnVuY3Rpb24oaykge1xyXG4gICAgICAgIGlmIChrIDwgMC41KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlYXNpbmcuYm91bmNlSW4oayAqIDIpICogMC41O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZWFzaW5nLmJvdW5jZU91dChrICogMiAtIDEpICogMC41ICsgMC41O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZWFzaW5nO1xyXG4iLCJpbXBvcnQgRWFzaW5nIGZyb20gJy4vZWFzaW5nJztcclxuXHJcbmZ1bmN0aW9uIG5vb3AgKCkge31cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hbmltYXRpb24uQ2xpcFxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGVdXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbnxudW1iZXJ9IFtvcHRzLmxvb3BdIElmIGxvb3AgaXMgYSBudW1iZXIsIGl0IGluZGljYXRlIHRoZSBsb29wIGNvdW50IG9mIGFuaW1hdGlvblxyXG4gKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW29wdHMuZWFzaW5nXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZyYW1lXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5vbmZpbmlzaF1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25yZXN0YXJ0XVxyXG4gKi9cclxudmFyIENsaXAgPSBmdW5jdGlvbiAob3B0cykge1xyXG5cclxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGhpcy5uYW1lID0gb3B0cy5uYW1lIHx8ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAqL1xyXG4gICAgdGhpcy50YXJnZXQgPSBvcHRzLnRhcmdldDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubGlmZSA9IG9wdHMubGlmZSB8fCAxMDAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5kZWxheSA9IG9wdHMuZGVsYXkgfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZ2FwID0gb3B0cy5nYXAgfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucGxheWJhY2tSYXRlID0gb3B0cy5wbGF5YmFja1JhdGUgfHwgMTtcclxuXHJcblxyXG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XHJcblxyXG4gICAgdGhpcy5fbG9vcCA9IG9wdHMubG9vcCA9PSBudWxsID8gZmFsc2UgOiBvcHRzLmxvb3A7XHJcbiAgICB0aGlzLnNldExvb3AodGhpcy5fbG9vcCk7XHJcblxyXG4gICAgaWYgKG9wdHMuZWFzaW5nICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLnNldEVhc2luZyhvcHRzLmVhc2luZyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIHRoaXMub25mcmFtZSA9IG9wdHMub25mcmFtZSB8fCBub29wO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICB0aGlzLm9uZmluaXNoID0gb3B0cy5vbmZpbmlzaCB8fCBub29wO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICB0aGlzLm9ucmVzdGFydCA9IG9wdHMub25yZXN0YXJ0IHx8IG5vb3A7XHJcblxyXG4gICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbn07XHJcblxyXG5DbGlwLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBnYXA6IDAsXHJcblxyXG4gICAgbGlmZTogMCxcclxuXHJcbiAgICBkZWxheTogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfGJvb2xlYW59IGxvb3BcclxuICAgICAqL1xyXG4gICAgc2V0TG9vcDogZnVuY3Rpb24gKGxvb3ApIHtcclxuICAgICAgICB0aGlzLl9sb29wID0gbG9vcDtcclxuICAgICAgICBpZiAobG9vcCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGxvb3AgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb29wUmVtYWluZWQgPSBsb29wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9vcFJlbWFpbmVkID0gSW5maW5pdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IGVhc2luZ1xyXG4gICAgICovXHJcbiAgICBzZXRFYXNpbmc6IGZ1bmN0aW9uIChlYXNpbmcpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGVhc2luZykgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGVhc2luZyA9IEVhc2luZ1tlYXNpbmddO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVhc2luZyA9IGVhc2luZztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRpbWVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgc3RlcDogZnVuY3Rpb24gKHRpbWUsIGRlbHRhVGltZSwgc2lsZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSB0aW1lICsgdGhpcy5kZWxheTtcclxuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFRpbWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWx0YVRpbWUgPSB0aW1lIC0gdGhpcy5fY3VycmVudFRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRUaW1lID0gdGltZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3BhdXNlZCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZSA8IHRoaXMuX3N0YXJ0VGltZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQRU5ESUdOIFN5bmMgP1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZSh0aW1lLCBkZWx0YVRpbWUpO1xyXG5cclxuICAgICAgICB2YXIgcGVyY2VudCA9IE1hdGgubWluKHRoaXMuX2VsYXBzZWRUaW1lIC8gdGhpcy5saWZlLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKHBlcmNlbnQgPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzY2hlZHVsZTtcclxuICAgICAgICBpZiAodGhpcy5lYXNpbmcpIHtcclxuICAgICAgICAgICAgc2NoZWR1bGUgPSB0aGlzLmVhc2luZyhwZXJjZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHNjaGVkdWxlID0gcGVyY2VudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2lsZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZSgnZnJhbWUnLCBzY2hlZHVsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGVyY2VudCA9PT0gMSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fbG9vcCAmJiB0aGlzLl9sb29wUmVtYWluZWQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXN0YXJ0SW5Mb29wKHRpbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9vcFJlbWFpbmVkLS07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Jlc3RhcnQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gTWFyayB0aGlzIGNsaXAgdG8gYmUgZGVsZXRlZFxyXG4gICAgICAgICAgICAgICAgLy8gSW4gdGhlIGFuaW1hdGlvbi51cGRhdGVcclxuICAgICAgICAgICAgICAgIHRoaXMuX25lZWRzUmVtb3ZlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2ZpbmlzaCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRpbWVcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgc2V0VGltZTogZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGVwKHRpbWUgKyB0aGlzLl9zdGFydFRpbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZXN0YXJ0OiBmdW5jdGlvbiAodGltZSkge1xyXG4gICAgICAgIC8vIElmIHVzZXIgbGVhdmUgdGhlIHBhZ2UgZm9yIGEgd2hpbGUsIHdoZW4gaGUgZ2V0cyBiYWNrXHJcbiAgICAgICAgLy8gQWxsIGNsaXBzIG1heSBiZSBleHBpcmVkIGFuZCBhbGwgc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nIHZhbHVlKHBvc2l0aW9uKVxyXG4gICAgICAgIC8vIEl0IGlzIGNsZWFybHkgd3JvbmcsIHNvIHdlIHVzZSByZW1haW5kZXIgdG8gYWRkIGEgb2Zmc2V0XHJcblxyXG4gICAgICAgIHZhciByZW1haW5kZXIgPSAwO1xyXG4gICAgICAgIC8vIFJlbWFpbmRlciBpZ25vcmVkIGlmIHJlc3RhcnQgaXMgaW52b2tlZCBtYW51YWxseVxyXG4gICAgICAgIGlmICh0aW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2VsYXBzZSh0aW1lKTtcclxuICAgICAgICAgICAgcmVtYWluZGVyID0gdGhpcy5fZWxhcHNlZFRpbWUgJSB0aGlzLmxpZmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRpbWUgPSB0aW1lIHx8IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWUgLSByZW1haW5kZXIgKyB0aGlzLmRlbGF5O1xyXG4gICAgICAgIHRoaXMuX2VsYXBzZWRUaW1lID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5fbmVlZHNSZW1vdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0RWxhcHNlZFRpbWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZWxhcHNlZFRpbWU7XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZXN0YXJ0SW5Mb29wOiBmdW5jdGlvbiAodGltZSkge1xyXG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IHRpbWUgKyB0aGlzLmdhcDtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSA9IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIF9lbGFwc2U6IGZ1bmN0aW9uICh0aW1lLCBkZWx0YVRpbWUpIHtcclxuICAgICAgICB0aGlzLl9lbGFwc2VkVGltZSArPSBkZWx0YVRpbWUgKiB0aGlzLnBsYXliYWNrUmF0ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZmlyZTogZnVuY3Rpb24gKGV2ZW50VHlwZSwgYXJnKSB7XHJcbiAgICAgICAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudFR5cGU7XHJcbiAgICAgICAgaWYgKHRoaXNbZXZlbnROYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzW2V2ZW50TmFtZV0odGhpcy50YXJnZXQsIGFyZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjbGlwID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKTtcclxuICAgICAgICBjbGlwLm5hbWUgPSB0aGlzLm5hbWU7XHJcbiAgICAgICAgY2xpcC5fbG9vcCA9IHRoaXMuX2xvb3A7XHJcbiAgICAgICAgY2xpcC5fbG9vcFJlbWFpbmVkID0gdGhpcy5fbG9vcFJlbWFpbmVkO1xyXG5cclxuICAgICAgICBjbGlwLmxpZmUgPSB0aGlzLmxpZmU7XHJcbiAgICAgICAgY2xpcC5nYXAgPSB0aGlzLmdhcDtcclxuICAgICAgICBjbGlwLmRlbGF5ID0gdGhpcy5kZWxheTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNsaXA7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXVzZSB0aGUgY2xpcC5cclxuICAgICAqL1xyXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9wYXVzZWQgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3VtZSB0aGUgY2xpcC5cclxuICAgICAqL1xyXG4gICAgcmVzdW1lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICB9XHJcbn07XHJcbkNsaXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ2xpcDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENsaXA7XHJcbiIsImltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcbmltcG9ydCBlYXNpbmdGdW5jcyBmcm9tICcuL2Vhc2luZyc7XHJcblxyXG52YXIgYXJyYXlTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRHZXR0ZXIodGFyZ2V0LCBrZXkpIHtcclxuICAgIHJldHVybiB0YXJnZXRba2V5XTtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0U2V0dGVyKHRhcmdldCwga2V5LCB2YWx1ZSkge1xyXG4gICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW50ZXJwb2xhdGVOdW1iZXIocDAsIHAxLCBwZXJjZW50KSB7XHJcbiAgICByZXR1cm4gKHAxIC0gcDApICogcGVyY2VudCArIHAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUFycmF5KHAwLCBwMSwgcGVyY2VudCwgb3V0LCBhcnJEaW0pIHtcclxuICAgIHZhciBsZW4gPSBwMC5sZW5ndGg7XHJcbiAgICBpZiAoYXJyRGltID09IDEpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIG91dFtpXSA9IGludGVycG9sYXRlTnVtYmVyKHAwW2ldLCBwMVtpXSwgcGVyY2VudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFyIGxlbjIgPSBwMFswXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgb3V0W2ldW2pdID0gaW50ZXJwb2xhdGVOdW1iZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgcDBbaV1bal0sIHAxW2ldW2pdLCBwZXJjZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FycmF5TGlrZShkYXRhKSB7XHJcbiAgICBpZiAodHlwZW9mKGRhdGEpID09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YoZGF0YSkgPT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YoZGF0YS5sZW5ndGgpID09ICdudW1iZXInO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9uZVZhbHVlKHZhbHVlKSB7XHJcbiAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpKSB7XHJcbiAgICAgICAgdmFyIGxlbiA9IHZhbHVlLmxlbmd0aDtcclxuICAgICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWVbMF0pKSB7XHJcbiAgICAgICAgICAgIHZhciByZXQgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmV0LnB1c2goYXJyYXlTbGljZS5jYWxsKHZhbHVlW2ldKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2F0bXVsbFJvbUludGVycG9sYXRlQXJyYXkoXHJcbiAgICBwMCwgcDEsIHAyLCBwMywgdCwgdDIsIHQzLCBvdXQsIGFyckRpbVxyXG4pIHtcclxuICAgIHZhciBsZW4gPSBwMC5sZW5ndGg7XHJcbiAgICBpZiAoYXJyRGltID09IDEpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIG91dFtpXSA9IGNhdG11bGxSb21JbnRlcnBvbGF0ZShcclxuICAgICAgICAgICAgICAgIHAwW2ldLCBwMVtpXSwgcDJbaV0sIHAzW2ldLCB0LCB0MiwgdDNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciBsZW4yID0gcDBbMF0ubGVuZ3RoO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZW4yOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIG91dFtpXVtqXSA9IGNhdG11bGxSb21JbnRlcnBvbGF0ZShcclxuICAgICAgICAgICAgICAgICAgICBwMFtpXVtqXSwgcDFbaV1bal0sIHAyW2ldW2pdLCBwM1tpXVtqXSxcclxuICAgICAgICAgICAgICAgICAgICB0LCB0MiwgdDNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhdG11bGxSb21JbnRlcnBvbGF0ZShwMCwgcDEsIHAyLCBwMywgdCwgdDIsIHQzKSB7XHJcbiAgICB2YXIgdjAgPSAocDIgLSBwMCkgKiAwLjU7XHJcbiAgICB2YXIgdjEgPSAocDMgLSBwMSkgKiAwLjU7XHJcbiAgICByZXR1cm4gKDIgKiAocDEgLSBwMikgKyB2MCArIHYxKSAqIHQzXHJcbiAgICAgICAgICAgICsgKC0gMyAqIChwMSAtIHAyKSAtIDIgKiB2MCAtIHYxKSAqIHQyXHJcbiAgICAgICAgICAgICsgdjAgKiB0ICsgcDE7XHJcbn1cclxuXHJcbi8vIGFycjAgaXMgc291cmNlIGFycmF5LCBhcnIxIGlzIHRhcmdldCBhcnJheS5cclxuLy8gRG8gc29tZSBwcmVwcm9jZXNzIHRvIGF2b2lkIGVycm9yIGhhcHBlbmVkIHdoZW4gaW50ZXJwb2xhdGluZyBmcm9tIGFycjAgdG8gYXJyMVxyXG5mdW5jdGlvbiBmaWxsQXJyKGFycjAsIGFycjEsIGFyckRpbSkge1xyXG4gICAgdmFyIGFycjBMZW4gPSBhcnIwLmxlbmd0aDtcclxuICAgIHZhciBhcnIxTGVuID0gYXJyMS5sZW5ndGg7XHJcbiAgICBpZiAoYXJyMExlbiAhPT0gYXJyMUxlbikge1xyXG4gICAgICAgIC8vIEZJWE1FIE5vdCB3b3JrIGZvciBUeXBlZEFycmF5XHJcbiAgICAgICAgdmFyIGlzUHJldmlvdXNMYXJnZXIgPSBhcnIwTGVuID4gYXJyMUxlbjtcclxuICAgICAgICBpZiAoaXNQcmV2aW91c0xhcmdlcikge1xyXG4gICAgICAgICAgICAvLyBDdXQgdGhlIHByZXZpb3VzXHJcbiAgICAgICAgICAgIGFycjAubGVuZ3RoID0gYXJyMUxlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIEZpbGwgdGhlIHByZXZpb3VzXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBhcnIwTGVuOyBpIDwgYXJyMUxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhcnIwLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgYXJyRGltID09PSAxID8gYXJyMVtpXSA6IGFycmF5U2xpY2UuY2FsbChhcnIxW2ldKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEhhbmRsaW5nIE5hTiB2YWx1ZVxyXG4gICAgdmFyIGxlbjIgPSBhcnIwWzBdICYmIGFycjBbMF0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyckRpbSA9PT0gMSkge1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4oYXJyMFtpXSkpIHtcclxuICAgICAgICAgICAgICAgIGFycjBbaV0gPSBhcnIxW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKGFycjBbaV1bal0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyMFtpXVtqXSA9IGFycjFbaV1bal07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQXJyYXlTYW1lKGFycjAsIGFycjEsIGFyckRpbSkge1xyXG4gICAgaWYgKGFycjAgPT09IGFycjEpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBsZW4gPSBhcnIwLmxlbmd0aDtcclxuICAgIGlmIChsZW4gIT09IGFycjEubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGFyckRpbSA9PT0gMSkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGFycjBbaV0gIT09IGFycjFbaV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBsZW4yID0gYXJyMFswXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjI7IGorKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFycjBbaV1bal0gIT09IGFycjFbaV1bal0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlVHJhY2tDbGlwKGFuaW1hdG9yLCBnbG9iYWxFYXNpbmcsIG9uZVRyYWNrRG9uZSwga2V5ZnJhbWVzLCBwcm9wTmFtZSwgaW50ZXJwb2xhdGVyLCBtYXhUaW1lKSB7XHJcbiAgICB2YXIgZ2V0dGVyID0gYW5pbWF0b3IuX2dldHRlcjtcclxuICAgIHZhciBzZXR0ZXIgPSBhbmltYXRvci5fc2V0dGVyO1xyXG4gICAgdmFyIHVzZVNwbGluZSA9IGdsb2JhbEVhc2luZyA9PT0gJ3NwbGluZSc7XHJcblxyXG4gICAgdmFyIHRyYWNrTGVuID0ga2V5ZnJhbWVzLmxlbmd0aDtcclxuICAgIGlmICghdHJhY2tMZW4pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBHdWVzcyBkYXRhIHR5cGVcclxuICAgIHZhciBmaXJzdFZhbCA9IGtleWZyYW1lc1swXS52YWx1ZTtcclxuICAgIHZhciBpc1ZhbHVlQXJyYXkgPSBpc0FycmF5TGlrZShmaXJzdFZhbCk7XHJcblxyXG4gICAgLy8gRm9yIHZlcnRpY2VzIG1vcnBoaW5nXHJcbiAgICB2YXIgYXJyRGltID0gKFxyXG4gICAgICAgICAgICBpc1ZhbHVlQXJyYXlcclxuICAgICAgICAgICAgJiYgaXNBcnJheUxpa2UoZmlyc3RWYWxbMF0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgID8gMiA6IDE7XHJcbiAgICAvLyBTb3J0IGtleWZyYW1lIGFzIGFzY2VuZGluZ1xyXG4gICAga2V5ZnJhbWVzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xyXG4gICAgICAgIHJldHVybiBhLnRpbWUgLSBiLnRpbWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQZXJjZW50cyBvZiBlYWNoIGtleWZyYW1lXHJcbiAgICB2YXIga2ZQZXJjZW50cyA9IFtdO1xyXG4gICAgLy8gVmFsdWUgb2YgZWFjaCBrZXlmcmFtZVxyXG4gICAgdmFyIGtmVmFsdWVzID0gW107XHJcbiAgICAvLyBFYXNpbmcgZnVuY3Mgb2YgZWFjaCBrZXlmcmFtZS5cclxuICAgIHZhciBrZkVhc2luZ3MgPSBbXTtcclxuXHJcbiAgICB2YXIgcHJldlZhbHVlID0ga2V5ZnJhbWVzWzBdLnZhbHVlO1xyXG4gICAgdmFyIGlzQWxsVmFsdWVFcXVhbCA9IHRydWU7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYWNrTGVuOyBpKyspIHtcclxuICAgICAgICBrZlBlcmNlbnRzLnB1c2goa2V5ZnJhbWVzW2ldLnRpbWUgLyBtYXhUaW1lKTtcclxuXHJcbiAgICAgICAgLy8gQXNzdW1lIHZhbHVlIGlzIGEgY29sb3Igd2hlbiBpdCBpcyBhIHN0cmluZ1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGtleWZyYW1lc1tpXS52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdmFsdWUgaXMgZXF1YWwsIGRlZXAgY2hlY2sgaWYgdmFsdWUgaXMgYXJyYXlcclxuICAgICAgICBpZiAoISgoaXNWYWx1ZUFycmF5ICYmIGlzQXJyYXlTYW1lKHZhbHVlLCBwcmV2VmFsdWUsIGFyckRpbSkpXHJcbiAgICAgICAgICAgIHx8ICghaXNWYWx1ZUFycmF5ICYmIHZhbHVlID09PSBwcmV2VmFsdWUpKSkge1xyXG4gICAgICAgICAgICBpc0FsbFZhbHVlRXF1YWwgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJldlZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGtmVmFsdWVzLnB1c2godmFsdWUpO1xyXG4gICAgICAgIGtmRWFzaW5ncy5wdXNoKGtleWZyYW1lc1tpXS5lYXNpbmcpO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzQWxsVmFsdWVFcXVhbCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbGFzdFZhbHVlID0ga2ZWYWx1ZXNbdHJhY2tMZW4gLSAxXTtcclxuICAgIC8vIFBvbHlmaWxsIGFycmF5IGFuZCBOYU4gdmFsdWVcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJhY2tMZW4gLSAxOyBpKyspIHtcclxuICAgICAgICBpZiAoaXNWYWx1ZUFycmF5KSB7XHJcbiAgICAgICAgICAgIGZpbGxBcnIoa2ZWYWx1ZXNbaV0sIGxhc3RWYWx1ZSwgYXJyRGltKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihrZlZhbHVlc1tpXSkgJiYgIWlzTmFOKGxhc3RWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGtmVmFsdWVzW2ldID0gbGFzdFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaXNWYWx1ZUFycmF5ICYmIGZpbGxBcnIoZ2V0dGVyKGFuaW1hdG9yLl90YXJnZXQsIHByb3BOYW1lKSwgbGFzdFZhbHVlLCBhcnJEaW0pO1xyXG5cclxuICAgIC8vIENhY2hlIHRoZSBrZXkgb2YgbGFzdCBmcmFtZSB0byBzcGVlZCB1cCB3aGVuXHJcbiAgICAvLyBhbmltYXRpb24gcGxheWJhY2sgaXMgc2VxdWVuY3lcclxuICAgIHZhciBjYWNoZUtleSA9IDA7XHJcbiAgICB2YXIgY2FjaGVQZXJjZW50ID0gMDtcclxuICAgIHZhciBzdGFydDtcclxuICAgIHZhciBpLCB3O1xyXG4gICAgdmFyIHAwLCBwMSwgcDIsIHAzO1xyXG5cclxuICAgIHZhciBvbmZyYW1lID0gZnVuY3Rpb24odGFyZ2V0LCBwZXJjZW50KSB7XHJcbiAgICAgICAgLy8gRmluZCB0aGUgcmFuZ2Uga2V5ZnJhbWVzXHJcbiAgICAgICAgLy8ga2YxLS0tLS1rZjItLS0tLS0tLS1jdXJyZW50LS0tLS0tLS1rZjNcclxuICAgICAgICAvLyBmaW5kIGtmMihpKSBhbmQga2YzKGkgKyAxKSBhbmQgZG8gaW50ZXJwb2xhdGlvblxyXG4gICAgICAgIGlmIChwZXJjZW50IDwgY2FjaGVQZXJjZW50KSB7XHJcbiAgICAgICAgICAgIC8vIFN0YXJ0IGZyb20gbmV4dCBrZXlcclxuICAgICAgICAgICAgc3RhcnQgPSBNYXRoLm1pbihjYWNoZUtleSArIDEsIHRyYWNrTGVuIC0gMSk7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtmUGVyY2VudHNbaV0gPD0gcGVyY2VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkgPSBNYXRoLm1pbihpLCB0cmFja0xlbiAtIDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChpID0gY2FjaGVLZXk7IGkgPCB0cmFja0xlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2ZQZXJjZW50c1tpXSA+IHBlcmNlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpID0gTWF0aC5taW4oaSAtIDEsIHRyYWNrTGVuIC0gMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhY2hlS2V5ID0gaTtcclxuICAgICAgICBjYWNoZVBlcmNlbnQgPSBwZXJjZW50O1xyXG5cclxuICAgICAgICB2YXIgcmFuZ2UgPSAoa2ZQZXJjZW50c1tpICsgMV0gLSBrZlBlcmNlbnRzW2ldKTtcclxuICAgICAgICBpZiAocmFuZ2UgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdyA9IChwZXJjZW50IC0ga2ZQZXJjZW50c1tpXSkgLyByYW5nZTtcclxuICAgICAgICAgICAgLy8gQ2xhbXAgMCAtIDFcclxuICAgICAgICAgICAgdyA9IE1hdGgubWF4KE1hdGgubWluKDEsIHcpLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdyA9IGtmRWFzaW5nc1tpICsgMV0odyk7XHJcblxyXG4gICAgICAgIGlmICh1c2VTcGxpbmUpIHtcclxuICAgICAgICAgICAgcDEgPSBrZlZhbHVlc1tpXTtcclxuICAgICAgICAgICAgcDAgPSBrZlZhbHVlc1tpID09PSAwID8gaSA6IGkgLSAxXTtcclxuICAgICAgICAgICAgcDIgPSBrZlZhbHVlc1tpID4gdHJhY2tMZW4gLSAyID8gdHJhY2tMZW4gLSAxIDogaSArIDFdO1xyXG4gICAgICAgICAgICBwMyA9IGtmVmFsdWVzW2kgPiB0cmFja0xlbiAtIDMgPyB0cmFja0xlbiAtIDEgOiBpICsgMl07XHJcbiAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXIodGFyZ2V0LCBwcm9wTmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAwLCBwMSwgcDIsIHAzLCB3XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1ZhbHVlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGNhdG11bGxSb21JbnRlcnBvbGF0ZUFycmF5KFxyXG4gICAgICAgICAgICAgICAgICAgIHAwLCBwMSwgcDIsIHAzLCB3LCB3KncsIHcqdyp3LFxyXG4gICAgICAgICAgICAgICAgICAgIGdldHRlcih0YXJnZXQsIHByb3BOYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICBhcnJEaW1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhdG11bGxSb21JbnRlcnBvbGF0ZShwMCwgcDEsIHAyLCBwMywgdywgdyp3LCB3KncqdylcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpbnRlcnBvbGF0ZXIpIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXIodGFyZ2V0LCBwcm9wTmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtmVmFsdWVzW2ldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZlZhbHVlc1tpICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1ZhbHVlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGludGVycG9sYXRlQXJyYXkoXHJcbiAgICAgICAgICAgICAgICAgICAga2ZWYWx1ZXNbaV0sIGtmVmFsdWVzW2krMV0sIHcsXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0dGVyKHRhcmdldCwgcHJvcE5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyckRpbVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNldHRlcihcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGVOdW1iZXIoa2ZWYWx1ZXNbaV0sIGtmVmFsdWVzW2krMV0sIHcpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgY2xpcCA9IG5ldyBDbGlwKHtcclxuICAgICAgICB0YXJnZXQ6IGFuaW1hdG9yLl90YXJnZXQsXHJcbiAgICAgICAgbGlmZTogbWF4VGltZSxcclxuICAgICAgICBsb29wOiBhbmltYXRvci5fbG9vcCxcclxuICAgICAgICBkZWxheTogYW5pbWF0b3IuX2RlbGF5LFxyXG4gICAgICAgIG9uZnJhbWU6IG9uZnJhbWUsXHJcbiAgICAgICAgb25maW5pc2g6IG9uZVRyYWNrRG9uZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGdsb2JhbEVhc2luZyAmJiBnbG9iYWxFYXNpbmcgIT09ICdzcGxpbmUnKSB7XHJcbiAgICAgICAgY2xpcC5zZXRFYXNpbmcoZ2xvYmFsRWFzaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2xpcDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBBbmltYXRvciBvYmplY3QgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSBBbmltYXRpb24ucHJvdG90eXBlLmFuaW1hdGUgbWV0aG9kLlxyXG4gKiBBZnRlciBjcmVhdGVkLCB3ZSBjYW4gdXNlIHtAbGluayBjbGF5LmFuaW1hdGlvbi5BbmltYXRvciN3aGVufSB0byBhZGQgYWxsIGtleWZyYW1lcyBhbmQge0BsaW5rIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yI3N0YXJ0fSBpdC5cclxuICogQ2xpcHMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYW5kIGFkZGVkIHRvIHRoZSBhbmltYXRpb24gaW5zdGFuY2Ugd2hpY2ggY3JlYXRlZCB0aGlzIGRlZmVycmVkIG9iamVjdC5cclxuICpcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcclxuICogQHBhcmFtIHtib29sZWFufSBsb29wXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdldHRlclxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXJcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gaW50ZXJwb2xhdGVyXHJcbiAqL1xyXG5mdW5jdGlvbiBBbmltYXRvcih0YXJnZXQsIGxvb3AsIGdldHRlciwgc2V0dGVyLCBpbnRlcnBvbGF0ZXIpIHtcclxuICAgIHRoaXMuX3RyYWNrcyA9IHt9O1xyXG4gICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0O1xyXG5cclxuICAgIHRoaXMuX2xvb3AgPSBsb29wIHx8IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuX2dldHRlciA9IGdldHRlciB8fCBkZWZhdWx0R2V0dGVyO1xyXG4gICAgdGhpcy5fc2V0dGVyID0gc2V0dGVyIHx8IGRlZmF1bHRTZXR0ZXI7XHJcblxyXG4gICAgdGhpcy5faW50ZXJwb2xhdGVyID0gaW50ZXJwb2xhdGVyIHx8IG51bGw7XHJcblxyXG4gICAgdGhpcy5fZGVsYXkgPSAwO1xyXG5cclxuICAgIHRoaXMuX2RvbmVMaXN0ID0gW107XHJcblxyXG4gICAgdGhpcy5fb25mcmFtZUxpc3QgPSBbXTtcclxuXHJcbiAgICB0aGlzLl9jbGlwTGlzdCA9IFtdO1xyXG5cclxuICAgIHRoaXMuX21heFRpbWUgPSAwO1xyXG5cclxuICAgIHRoaXMuX2xhc3RLRlRpbWUgPSAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub29wRWFzaW5nKHcpIHtcclxuICAgIHJldHVybiB3O1xyXG59XHJcblxyXG5BbmltYXRvci5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IEFuaW1hdG9yLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgS2V5ZnJhbWUgdGltZSB1c2luZyBtaWxsaXNlY29uZFxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEga2V5LXZhbHVlIG9iamVjdC4gVmFsdWUgY2FuIGJlIG51bWJlciwgMWQgYW5kIDJkIGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW2Vhc2luZ11cclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICB3aGVuOiBmdW5jdGlvbiAodGltZSwgcHJvcHMsIGVhc2luZykge1xyXG5cclxuICAgICAgICB0aGlzLl9tYXhUaW1lID0gTWF0aC5tYXgodGltZSwgdGhpcy5fbWF4VGltZSk7XHJcblxyXG4gICAgICAgIGVhc2luZyA9ICh0eXBlb2YgZWFzaW5nID09PSAnZnVuY3Rpb24nID8gZWFzaW5nIDogZWFzaW5nRnVuY3NbZWFzaW5nXSkgfHwgbm9vcEVhc2luZztcclxuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBwcm9wcykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RyYWNrc1twcm9wTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWNrc1twcm9wTmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgIC8vIElmIHRpbWUgaXMgMFxyXG4gICAgICAgICAgICAgICAgLy8gIFRoZW4gcHJvcHMgaXMgZ2l2ZW4gaW5pdGlhbGl6ZSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgLy8gRWxzZVxyXG4gICAgICAgICAgICAgICAgLy8gIEluaXRpYWxpemUgdmFsdWUgZnJvbSBjdXJyZW50IHByb3AgdmFsdWVcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhY2tzW3Byb3BOYW1lXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNsb25lVmFsdWUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZXR0ZXIodGhpcy5fdGFyZ2V0LCBwcm9wTmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWFzaW5nOiBlYXNpbmdcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl90cmFja3NbcHJvcE5hbWVdLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGltZTogcGFyc2VJbnQodGltZSksXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogcHJvcHNbcHJvcE5hbWVdLFxyXG4gICAgICAgICAgICAgICAgZWFzaW5nOiBlYXNpbmdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgRHVyaW5nIHRpbWUgc2luY2UgbGFzdCBrZXlmcmFtZVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BzIEEga2V5LXZhbHVlIG9iamVjdC4gVmFsdWUgY2FuIGJlIG51bWJlciwgMWQgYW5kIDJkIGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xGdW5jdGlvbn0gW2Vhc2luZ11cclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICB0aGVuOiBmdW5jdGlvbiAoZHVyaW5nVGltZSwgcHJvcHMsIGVhc2luZykge1xyXG4gICAgICAgIHRoaXMud2hlbihkdXJpbmdUaW1lICsgdGhpcy5fbGFzdEtGVGltZSwgcHJvcHMsIGVhc2luZyk7XHJcbiAgICAgICAgdGhpcy5fbGFzdEtGVGltZSArPSBkdXJpbmdUaW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogY2FsbGJhY2sgd2hlbiBydW5uaW5nIGFuaW1hdGlvblxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrIGNhbGxiYWNrIGhhdmUgdHdvIGFyZ3MsIGFuaW1hdGluZyB0YXJnZXQgYW5kIGN1cnJlbnQgcGVyY2VudFxyXG4gICAgICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQW5pbWF0b3J9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGR1cmluZzogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5fb25mcmFtZUxpc3QucHVzaChjYWxsYmFjayk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9kb25lQ2FsbGJhY2s6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBDbGVhciBhbGwgdHJhY2tzXHJcbiAgICAgICAgdGhpcy5fdHJhY2tzID0ge307XHJcbiAgICAgICAgLy8gQ2xlYXIgYWxsIGNsaXBzXHJcbiAgICAgICAgdGhpcy5fY2xpcExpc3QubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgdmFyIGRvbmVMaXN0ID0gdGhpcy5fZG9uZUxpc3Q7XHJcbiAgICAgICAgdmFyIGxlbiA9IGRvbmVMaXN0Lmxlbmd0aDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGRvbmVMaXN0W2ldLmNhbGwodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU3RhcnQgdGhlIGFuaW1hdGlvblxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfEZ1bmN0aW9ufSBlYXNpbmdcclxuICAgICAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkFuaW1hdG9yfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuYW5pbWF0aW9uLkFuaW1hdG9yLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBzdGFydDogZnVuY3Rpb24gKGdsb2JhbEVhc2luZykge1xyXG5cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIGNsaXBDb3VudCA9IDA7XHJcblxyXG4gICAgICAgIHZhciBvbmVUcmFja0RvbmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY2xpcENvdW50LS07XHJcbiAgICAgICAgICAgIGlmIChjbGlwQ291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuX2RvbmVDYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIGxhc3RDbGlwO1xyXG4gICAgICAgIHZhciBjbGlwTWF4VGltZSA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gdGhpcy5fdHJhY2tzKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gY3JlYXRlVHJhY2tDbGlwKFxyXG4gICAgICAgICAgICAgICAgdGhpcywgZ2xvYmFsRWFzaW5nLCBvbmVUcmFja0RvbmUsXHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFja3NbcHJvcE5hbWVdLCBwcm9wTmFtZSwgc2VsZi5faW50ZXJwb2xhdGVyLCBzZWxmLl9tYXhUaW1lXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICBjbGlwTWF4VGltZSA9IE1hdGgubWF4KGNsaXBNYXhUaW1lLCBjbGlwLmxpZmUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpcExpc3QucHVzaChjbGlwKTtcclxuICAgICAgICAgICAgICAgIGNsaXBDb3VudCsrO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIElmIHN0YXJ0IGFmdGVyIGFkZGVkIHRvIGFuaW1hdGlvblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRpb24uYWRkQ2xpcChjbGlwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsYXN0Q2xpcCA9IGNsaXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFkZCBkdXJpbmcgY2FsbGJhY2sgb24gdGhlIGxhc3QgY2xpcFxyXG4gICAgICAgIGlmIChsYXN0Q2xpcCkge1xyXG4gICAgICAgICAgICB2YXIgb2xkT25GcmFtZSA9IGxhc3RDbGlwLm9uZnJhbWU7XHJcbiAgICAgICAgICAgIGxhc3RDbGlwLm9uZnJhbWUgPSBmdW5jdGlvbiAodGFyZ2V0LCBwZXJjZW50KSB7XHJcbiAgICAgICAgICAgICAgICBvbGRPbkZyYW1lKHRhcmdldCwgcGVyY2VudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLl9vbmZyYW1lTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX29uZnJhbWVMaXN0W2ldKHRhcmdldCwgcGVyY2VudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNsaXBDb3VudCkge1xyXG4gICAgICAgICAgICB0aGlzLl9kb25lQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcCB0aGUgYW5pbWF0aW9uXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NsaXBMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gdGhpcy5fY2xpcExpc3RbaV07XHJcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uLnJlbW92ZUNsaXAoY2xpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NsaXBMaXN0ID0gW107XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxheSBnaXZlbiBtaWxsaXNlY29uZHNcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gdGltZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQW5pbWF0b3J9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGRlbGF5OiBmdW5jdGlvbiAodGltZSl7XHJcbiAgICAgICAgdGhpcy5fZGVsYXkgPSB0aW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgYWZ0ZXIgYW5pbWF0aW9uIGZpbmlzaGVkXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5BbmltYXRvcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmFuaW1hdGlvbi5BbmltYXRvci5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgZG9uZTogZnVuY3Rpb24gKGZ1bmMpIHtcclxuICAgICAgICBpZiAoZnVuYykge1xyXG4gICAgICAgICAgICB0aGlzLl9kb25lTGlzdC5wdXNoKGZ1bmMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhbGwgY2xpcHMgY3JlYXRlZCBpbiBzdGFydCBtZXRob2QuXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5DbGlwW119XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5hbmltYXRpb24uQW5pbWF0b3IucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGdldENsaXBzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBMaXN0O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQW5pbWF0b3I7XHJcbiIsIi8vIDFEIEJsZW5kIGNsaXAgb2YgYmxlbmQgdHJlZVxyXG4vLyBodHRwOi8vZG9jcy51bml0eTNkLmNvbS9Eb2N1bWVudGF0aW9uL01hbnVhbC8xREJsZW5kaW5nLmh0bWxcclxuXHJcbmltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcblxyXG52YXIgY2xpcFNvcnRGdW5jID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhLnBvc2l0aW9uIDwgYi5wb3NpdGlvbjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcC5JQ2xpcElucHV0XHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwb3NpdGlvblxyXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiAxZCBibGVuZGluZyBub2RlIGluIGFuaW1hdGlvbiBibGVuZCB0cmVlLlxyXG4gKiBvdXRwdXQgY2xpcCBtdXN0IGhhdmUgYmxlbmQxRCBhbmQgY29weSBtZXRob2RcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5CbGVuZDFEQ2xpcFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGlvXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cclxuICogQHBhcmFtIHtvYmplY3RbXX0gW29wdHMuaW5wdXRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMucG9zaXRpb25dXHJcbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gW29wdHMub3V0cHV0XVxyXG4gKi9cclxudmFyIEJsZW5kMURDbGlwID0gZnVuY3Rpb24gKG9wdHMpIHtcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XHJcbiAgICAvKipcclxuICAgICAqIE91dHB1dCBjbGlwIG11c3QgaGF2ZSBibGVuZDFEIGFuZCBjb3B5IG1ldGhvZFxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkNsaXB9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3V0cHV0ID0gb3B0cy5vdXRwdXQgfHwgbnVsbDtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwLklDbGlwSW5wdXRbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5pbnB1dHMgPSBvcHRzLmlucHV0cyB8fCBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IDA7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVLZXkgPSAwO1xyXG4gICAgdGhpcy5fY2FjaGVQb3NpdGlvbiA9IC1JbmZpbml0eTtcclxuXHJcbiAgICB0aGlzLmlucHV0cy5zb3J0KGNsaXBTb3J0RnVuYyk7XHJcbn07XHJcblxyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUgPSBuZXcgQ2xpcCgpO1xyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZDFEQ2xpcDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb25cclxuICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5DbGlwfSBpbnB1dENsaXBcclxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXRdXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwLklDbGlwSW5wdXR9XHJcbiAqL1xyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuYWRkSW5wdXQgPSBmdW5jdGlvbiAocG9zaXRpb24sIGlucHV0Q2xpcCwgb2Zmc2V0KSB7XHJcbiAgICB2YXIgb2JqID0ge1xyXG4gICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcclxuICAgICAgICBjbGlwOiBpbnB1dENsaXAsXHJcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQgfHwgMFxyXG4gICAgfTtcclxuICAgIHRoaXMubGlmZSA9IE1hdGgubWF4KGlucHV0Q2xpcC5saWZlLCB0aGlzLmxpZmUpO1xyXG5cclxuICAgIGlmICghdGhpcy5pbnB1dHMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbiAgICB2YXIgbGVuID0gdGhpcy5pbnB1dHMubGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMuaW5wdXRzWzBdLnBvc2l0aW9uID4gcG9zaXRpb24pIHtcclxuICAgICAgICB0aGlzLmlucHV0cy51bnNoaWZ0KG9iaik7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5wdXRzW2xlbiAtIDFdLnBvc2l0aW9uIDw9IHBvc2l0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIga2V5ID0gdGhpcy5fZmluZEtleShwb3NpdGlvbik7XHJcbiAgICAgICAgdGhpcy5pbnB1dHMuc3BsaWNlKGtleSwgb2JqKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG59O1xyXG5cclxuQmxlbmQxRENsaXAucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAodGltZSwgZFRpbWUsIHNpbGVudCkge1xyXG5cclxuICAgIHZhciByZXQgPSBDbGlwLnByb3RvdHlwZS5zdGVwLmNhbGwodGhpcywgdGltZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcclxuICAgICAgICB0aGlzLnNldFRpbWUodGhpcy5nZXRFbGFwc2VkVGltZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXHJcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufTtcclxuXHJcbkJsZW5kMURDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIHZhciBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb247XHJcbiAgICB2YXIgaW5wdXRzID0gdGhpcy5pbnB1dHM7XHJcbiAgICB2YXIgbGVuID0gaW5wdXRzLmxlbmd0aDtcclxuICAgIHZhciBtaW4gPSBpbnB1dHNbMF0ucG9zaXRpb247XHJcbiAgICB2YXIgbWF4ID0gaW5wdXRzW2xlbi0xXS5wb3NpdGlvbjtcclxuXHJcbiAgICBpZiAocG9zaXRpb24gPD0gbWluIHx8IHBvc2l0aW9uID49IG1heCkge1xyXG4gICAgICAgIHZhciBpbjAgPSBwb3NpdGlvbiA8PSBtaW4gPyBpbnB1dHNbMF0gOiBpbnB1dHNbbGVuLTFdO1xyXG4gICAgICAgIHZhciBjbGlwID0gaW4wLmNsaXA7XHJcbiAgICAgICAgdmFyIG9mZnNldCA9IGluMC5vZmZzZXQ7XHJcbiAgICAgICAgY2xpcC5zZXRUaW1lKCh0aW1lICsgb2Zmc2V0KSAlIGNsaXAubGlmZSk7XHJcbiAgICAgICAgLy8gSW5wdXQgY2xpcCBpcyBhIGJsZW5kIGNsaXBcclxuICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgaWYgKGNsaXAub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCkge1xyXG4gICAgICAgICAgICB0aGlzLm91dHB1dC5jb3B5KGNsaXAub3V0cHV0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm91dHB1dC5jb3B5KGNsaXApO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFyIGtleSA9IHRoaXMuX2ZpbmRLZXkocG9zaXRpb24pO1xyXG4gICAgICAgIHZhciBpbjEgPSBpbnB1dHNba2V5XTtcclxuICAgICAgICB2YXIgaW4yID0gaW5wdXRzW2tleSArIDFdO1xyXG4gICAgICAgIHZhciBjbGlwMSA9IGluMS5jbGlwO1xyXG4gICAgICAgIHZhciBjbGlwMiA9IGluMi5jbGlwO1xyXG4gICAgICAgIC8vIFNldCB0aW1lIG9uIGlucHV0IGNsaXBzXHJcbiAgICAgICAgY2xpcDEuc2V0VGltZSgodGltZSArIGluMS5vZmZzZXQpICUgY2xpcDEubGlmZSk7XHJcbiAgICAgICAgY2xpcDIuc2V0VGltZSgodGltZSArIGluMi5vZmZzZXQpICUgY2xpcDIubGlmZSk7XHJcblxyXG4gICAgICAgIHZhciB3ID0gKHRoaXMucG9zaXRpb24gLSBpbjEucG9zaXRpb24pIC8gKGluMi5wb3NpdGlvbiAtIGluMS5wb3NpdGlvbik7XHJcblxyXG4gICAgICAgIHZhciBjMSA9IGNsaXAxLm91dHB1dCBpbnN0YW5jZW9mIENsaXAgPyBjbGlwMS5vdXRwdXQgOiBjbGlwMTtcclxuICAgICAgICB2YXIgYzIgPSBjbGlwMi5vdXRwdXQgaW5zdGFuY2VvZiBDbGlwID8gY2xpcDIub3V0cHV0IDogY2xpcDI7XHJcbiAgICAgICAgdGhpcy5vdXRwdXQuYmxlbmQxRChjMSwgYzIsIHcpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsb25lIGEgbmV3IEJsZW5kMUQgY2xpcFxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNsb25lSW5wdXRzIFRydWUgaWYgY2xvbmUgdGhlIGlucHV0IGNsaXBzXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLkJsZW5kMURDbGlwfVxyXG4gKi9cclxuQmxlbmQxRENsaXAucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKGNsb25lSW5wdXRzKSB7XHJcbiAgICB2YXIgY2xpcCA9IENsaXAucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICBjbGlwLm91dHB1dCA9IHRoaXMub3V0cHV0LmNsb25lKCk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGlucHV0Q2xpcCA9IGNsb25lSW5wdXRzID8gdGhpcy5pbnB1dHNbaV0uY2xpcC5jbG9uZSh0cnVlKSA6IHRoaXMuaW5wdXRzW2ldLmNsaXA7XHJcbiAgICAgICAgY2xpcC5hZGRJbnB1dCh0aGlzLmlucHV0c1tpXS5wb3NpdGlvbiwgaW5wdXRDbGlwLCB0aGlzLmlucHV0c1tpXS5vZmZzZXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsaXA7XHJcbn07XHJcblxyXG4vLyBGaW5kIHRoZSBrZXkgd2hlcmUgcG9zaXRpb24gaW4gcmFuZ2UgW2lucHV0c1trZXldLnBvc2l0aW9uLCBpbnB1dHNba2V5KzFdLnBvc2l0aW9uKVxyXG5CbGVuZDFEQ2xpcC5wcm90b3R5cGUuX2ZpbmRLZXkgPSBmdW5jdGlvbiAocG9zaXRpb24pIHtcclxuICAgIHZhciBrZXkgPSAtMTtcclxuICAgIHZhciBpbnB1dHMgPSB0aGlzLmlucHV0cztcclxuICAgIHZhciBsZW4gPSBpbnB1dHMubGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMuX2NhY2hlUG9zaXRpb24gPCBwb3NpdGlvbikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLl9jYWNoZUtleTsgaSA8IGxlbi0xOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHBvc2l0aW9uID49IGlucHV0c1tpXS5wb3NpdGlvbiAmJiBwb3NpdGlvbiA8IGlucHV0c1tpKzFdLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBrZXkgPSBpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgcyA9IE1hdGgubWluKGxlbi0yLCB0aGlzLl9jYWNoZUtleSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IHM7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSBpbnB1dHNbaV0ucG9zaXRpb24gJiYgcG9zaXRpb24gPCBpbnB1dHNbaSsxXS5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAga2V5ID0gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChrZXkgPj0gMCkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlS2V5ID0ga2V5O1xyXG4gICAgICAgIHRoaXMuX2NhY2hlUG9zaXRpb24gPSBwb3NpdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ga2V5O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmxlbmQxRENsaXA7IiwiLy8gRGVsYXVuYXkgVHJpYW5ndWxhdGlvblxyXG4vLyBNb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9pcm9ud2FsbGFieS9kZWxhdW5heVxyXG52YXIgRVBTSUxPTiA9IDEuMCAvIDEwNDg1NzYuMDtcclxuXHJcbmZ1bmN0aW9uIHN1cGVydHJpYW5nbGUodmVydGljZXMpIHtcclxuICAgIHZhciB4bWluID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xyXG4gICAgdmFyIHltaW4gPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XHJcbiAgICB2YXIgeG1heCA9IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcclxuICAgIHZhciB5bWF4ID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xyXG4gICAgdmFyIGksIGR4LCBkeSwgZG1heCwgeG1pZCwgeW1pZDtcclxuXHJcbiAgICBmb3IgKGkgPSB2ZXJ0aWNlcy5sZW5ndGg7IGktLTsgKSB7XHJcbiAgICAgICAgaWYgKHZlcnRpY2VzW2ldWzBdIDwgeG1pbikgeyB4bWluID0gdmVydGljZXNbaV1bMF07IH1cclxuICAgICAgICBpZiAodmVydGljZXNbaV1bMF0gPiB4bWF4KSB7IHhtYXggPSB2ZXJ0aWNlc1tpXVswXTsgfVxyXG4gICAgICAgIGlmICh2ZXJ0aWNlc1tpXVsxXSA8IHltaW4pIHsgeW1pbiA9IHZlcnRpY2VzW2ldWzFdOyB9XHJcbiAgICAgICAgaWYgKHZlcnRpY2VzW2ldWzFdID4geW1heCkgeyB5bWF4ID0gdmVydGljZXNbaV1bMV07IH1cclxuICAgIH1cclxuXHJcbiAgICBkeCA9IHhtYXggLSB4bWluO1xyXG4gICAgZHkgPSB5bWF4IC0geW1pbjtcclxuICAgIGRtYXggPSBNYXRoLm1heChkeCwgZHkpO1xyXG4gICAgeG1pZCA9IHhtaW4gKyBkeCAqIDAuNTtcclxuICAgIHltaWQgPSB5bWluICsgZHkgKiAwLjU7XHJcblxyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICBbeG1pZCAtIDIwICogZG1heCwgeW1pZCAtICAgICAgZG1heF0sXHJcbiAgICAgICAgW3htaWQgICAgICAgICAgICAsIHltaWQgKyAyMCAqIGRtYXhdLFxyXG4gICAgICAgIFt4bWlkICsgMjAgKiBkbWF4LCB5bWlkIC0gICAgICBkbWF4XVxyXG4gICAgXTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2lyY3VtY2lyY2xlKHZlcnRpY2VzLCBpLCBqLCBrKSB7XHJcbiAgICB2YXIgeDEgPSB2ZXJ0aWNlc1tpXVswXSxcclxuICAgICAgICAgICAgeTEgPSB2ZXJ0aWNlc1tpXVsxXSxcclxuICAgICAgICAgICAgeDIgPSB2ZXJ0aWNlc1tqXVswXSxcclxuICAgICAgICAgICAgeTIgPSB2ZXJ0aWNlc1tqXVsxXSxcclxuICAgICAgICAgICAgeDMgPSB2ZXJ0aWNlc1trXVswXSxcclxuICAgICAgICAgICAgeTMgPSB2ZXJ0aWNlc1trXVsxXSxcclxuICAgICAgICAgICAgZmFic3kxeTIgPSBNYXRoLmFicyh5MSAtIHkyKSxcclxuICAgICAgICAgICAgZmFic3kyeTMgPSBNYXRoLmFicyh5MiAtIHkzKSxcclxuICAgICAgICAgICAgeGMsIHljLCBtMSwgbTIsIG14MSwgbXgyLCBteTEsIG15MiwgZHgsIGR5O1xyXG5cclxuICAgIC8qIENoZWNrIGZvciBjb2luY2lkZW50IHBvaW50cyAqL1xyXG4gICAgaWYgKGZhYnN5MXkyIDwgRVBTSUxPTiAmJiBmYWJzeTJ5MyA8IEVQU0lMT04pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VlayEgQ29pbmNpZGVudCBwb2ludHMhJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZhYnN5MXkyIDwgRVBTSUxPTikge1xyXG4gICAgICAgIG0yICA9IC0oKHgzIC0geDIpIC8gKHkzIC0geTIpKTtcclxuICAgICAgICBteDIgPSAoeDIgKyB4MykgLyAyLjA7XHJcbiAgICAgICAgbXkyID0gKHkyICsgeTMpIC8gMi4wO1xyXG4gICAgICAgIHhjICA9ICh4MiArIHgxKSAvIDIuMDtcclxuICAgICAgICB5YyAgPSBtMiAqICh4YyAtIG14MikgKyBteTI7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoZmFic3kyeTMgPCBFUFNJTE9OKSB7XHJcbiAgICAgICAgbTEgID0gLSgoeDIgLSB4MSkgLyAoeTIgLSB5MSkpO1xyXG4gICAgICAgIG14MSA9ICh4MSArIHgyKSAvIDIuMDtcclxuICAgICAgICBteTEgPSAoeTEgKyB5MikgLyAyLjA7XHJcbiAgICAgICAgeGMgID0gKHgzICsgeDIpIC8gMi4wO1xyXG4gICAgICAgIHljICA9IG0xICogKHhjIC0gbXgxKSArIG15MTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBtMSAgPSAtKCh4MiAtIHgxKSAvICh5MiAtIHkxKSk7XHJcbiAgICAgICAgbTIgID0gLSgoeDMgLSB4MikgLyAoeTMgLSB5MikpO1xyXG4gICAgICAgIG14MSA9ICh4MSArIHgyKSAvIDIuMDtcclxuICAgICAgICBteDIgPSAoeDIgKyB4MykgLyAyLjA7XHJcbiAgICAgICAgbXkxID0gKHkxICsgeTIpIC8gMi4wO1xyXG4gICAgICAgIG15MiA9ICh5MiArIHkzKSAvIDIuMDtcclxuICAgICAgICB4YyAgPSAobTEgKiBteDEgLSBtMiAqIG14MiArIG15MiAtIG15MSkgLyAobTEgLSBtMik7XHJcbiAgICAgICAgeWMgID0gKGZhYnN5MXkyID4gZmFic3kyeTMpID9cclxuICAgICAgICAgICAgbTEgKiAoeGMgLSBteDEpICsgbXkxIDpcclxuICAgICAgICAgICAgbTIgKiAoeGMgLSBteDIpICsgbXkyO1xyXG4gICAgfVxyXG5cclxuICAgIGR4ID0geDIgLSB4YztcclxuICAgIGR5ID0geTIgLSB5YztcclxuICAgIHJldHVybiB7aTogaSwgajogaiwgazogaywgeDogeGMsIHk6IHljLCByOiBkeCAqIGR4ICsgZHkgKiBkeX07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZHVwKGVkZ2VzKSB7XHJcbiAgICB2YXIgaSwgaiwgYSwgYiwgbSwgbjtcclxuXHJcbiAgICBmb3IgKGogPSBlZGdlcy5sZW5ndGg7IGo7ICkge1xyXG4gICAgICAgIGIgPSBlZGdlc1stLWpdO1xyXG4gICAgICAgIGEgPSBlZGdlc1stLWpdO1xyXG5cclxuICAgICAgICBmb3IgKGkgPSBqOyBpOyApIHtcclxuICAgICAgICAgICAgbiA9IGVkZ2VzWy0taV07XHJcbiAgICAgICAgICAgIG0gPSBlZGdlc1stLWldO1xyXG5cclxuICAgICAgICAgICAgaWYgKChhID09PSBtICYmIGIgPT09IG4pIHx8IChhID09PSBuICYmIGIgPT09IG0pKSB7XHJcbiAgICAgICAgICAgICAgICBlZGdlcy5zcGxpY2UoaiwgMik7XHJcbiAgICAgICAgICAgICAgICBlZGdlcy5zcGxpY2UoaSwgMik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxudmFyIGRlbGF1bmF5ID0ge1xyXG4gICAgdHJpYW5ndWxhdGU6IGZ1bmN0aW9uKHZlcnRpY2VzLCBrZXkpIHtcclxuICAgICAgICB2YXIgbiA9IHZlcnRpY2VzLmxlbmd0aDtcclxuICAgICAgICB2YXIgaSwgaiwgaW5kaWNlcywgc3QsIG9wZW4sIGNsb3NlZCwgZWRnZXMsIGR4LCBkeSwgYSwgYiwgYztcclxuXHJcbiAgICAgICAgLyogQmFpbCBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIHZlcnRpY2VzIHRvIGZvcm0gYW55IHRyaWFuZ2xlcy4gKi9cclxuICAgICAgICBpZiAobiA8IDMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogU2xpY2Ugb3V0IHRoZSBhY3R1YWwgdmVydGljZXMgZnJvbSB0aGUgcGFzc2VkIG9iamVjdHMuIChEdXBsaWNhdGUgdGhlXHJcbiAgICAgICAgICAgICogYXJyYXkgZXZlbiBpZiB3ZSBkb24ndCwgdGhvdWdoLCBzaW5jZSB3ZSBuZWVkIHRvIG1ha2UgYSBzdXBlcnRyaWFuZ2xlXHJcbiAgICAgICAgICAgICogbGF0ZXIgb24hKSAqL1xyXG4gICAgICAgIHZlcnRpY2VzID0gdmVydGljZXMuc2xpY2UoMCk7XHJcblxyXG4gICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgICAgZm9yIChpID0gbjsgaS0tOyApIHtcclxuICAgICAgICAgICAgICAgIHZlcnRpY2VzW2ldID0gdmVydGljZXNbaV1ba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogTWFrZSBhbiBhcnJheSBvZiBpbmRpY2VzIGludG8gdGhlIHZlcnRleCBhcnJheSwgc29ydGVkIGJ5IHRoZVxyXG4gICAgICAgICAgICAqIHZlcnRpY2VzJyB4LXBvc2l0aW9uLiBGb3JjZSBzdGFibGUgc29ydGluZyBieSBjb21wYXJpbmcgaW5kaWNlcyBpZlxyXG4gICAgICAgICAgICAqIHRoZSB4LXBvc2l0aW9ucyBhcmUgZXF1YWwuICovXHJcbiAgICAgICAgaW5kaWNlcyA9IG5ldyBBcnJheShuKTtcclxuXHJcbiAgICAgICAgZm9yIChpID0gbjsgaS0tOyApIHtcclxuICAgICAgICAgICAgaW5kaWNlc1tpXSA9IGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpbmRpY2VzLnNvcnQoZnVuY3Rpb24oaSwgaikge1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IHZlcnRpY2VzW2pdWzBdIC0gdmVydGljZXNbaV1bMF07XHJcbiAgICAgICAgICAgIHJldHVybiBkaWZmICE9PSAwID8gZGlmZiA6IGkgLSBqO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvKiBOZXh0LCBmaW5kIHRoZSB2ZXJ0aWNlcyBvZiB0aGUgc3VwZXJ0cmlhbmdsZSAod2hpY2ggY29udGFpbnMgYWxsIG90aGVyXHJcbiAgICAgICAgICAgICogdHJpYW5nbGVzKSwgYW5kIGFwcGVuZCB0aGVtIG9udG8gdGhlIGVuZCBvZiBhIChjb3B5IG9mKSB0aGUgdmVydGV4XHJcbiAgICAgICAgICAgICogYXJyYXkuICovXHJcbiAgICAgICAgc3QgPSBzdXBlcnRyaWFuZ2xlKHZlcnRpY2VzKTtcclxuICAgICAgICB2ZXJ0aWNlcy5wdXNoKHN0WzBdLCBzdFsxXSwgc3RbMl0pO1xyXG5cclxuICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBvcGVuIGxpc3QgKGNvbnRhaW5pbmcgdGhlIHN1cGVydHJpYW5nbGUgYW5kIG5vdGhpbmdcclxuICAgICAgICAgICAgKiBlbHNlKSBhbmQgdGhlIGNsb3NlZCBsaXN0ICh3aGljaCBpcyBlbXB0eSBzaW5jZSB3ZSBoYXZuJ3QgcHJvY2Vzc2VkXHJcbiAgICAgICAgICAgICogYW55IHRyaWFuZ2xlcyB5ZXQpLiAqL1xyXG4gICAgICAgIG9wZW4gICA9IFtjaXJjdW1jaXJjbGUodmVydGljZXMsIG4gKyAwLCBuICsgMSwgbiArIDIpXTtcclxuICAgICAgICBjbG9zZWQgPSBbXTtcclxuICAgICAgICBlZGdlcyAgPSBbXTtcclxuXHJcbiAgICAgICAgLyogSW5jcmVtZW50YWxseSBhZGQgZWFjaCB2ZXJ0ZXggdG8gdGhlIG1lc2guICovXHJcbiAgICAgICAgZm9yIChpID0gaW5kaWNlcy5sZW5ndGg7IGktLTsgZWRnZXMubGVuZ3RoID0gMCkge1xyXG4gICAgICAgICAgICBjID0gaW5kaWNlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8qIEZvciBlYWNoIG9wZW4gdHJpYW5nbGUsIGNoZWNrIHRvIHNlZSBpZiB0aGUgY3VycmVudCBwb2ludCBpc1xyXG4gICAgICAgICAgICAgICAgKiBpbnNpZGUgaXQncyBjaXJjdW1jaXJjbGUuIElmIGl0IGlzLCByZW1vdmUgdGhlIHRyaWFuZ2xlIGFuZCBhZGRcclxuICAgICAgICAgICAgICAgICogaXQncyBlZGdlcyB0byBhbiBlZGdlIGxpc3QuICovXHJcbiAgICAgICAgICAgIGZvciAoaiA9IG9wZW4ubGVuZ3RoOyBqLS07ICkge1xyXG4gICAgICAgICAgICAgICAgLyogSWYgdGhpcyBwb2ludCBpcyB0byB0aGUgcmlnaHQgb2YgdGhpcyB0cmlhbmdsZSdzIGNpcmN1bWNpcmNsZSxcclxuICAgICAgICAgICAgICAgICAgICAqIHRoZW4gdGhpcyB0cmlhbmdsZSBzaG91bGQgbmV2ZXIgZ2V0IGNoZWNrZWQgYWdhaW4uIFJlbW92ZSBpdFxyXG4gICAgICAgICAgICAgICAgICAgICogZnJvbSB0aGUgb3BlbiBsaXN0LCBhZGQgaXQgdG8gdGhlIGNsb3NlZCBsaXN0LCBhbmQgc2tpcC4gKi9cclxuICAgICAgICAgICAgICAgIGR4ID0gdmVydGljZXNbY11bMF0gLSBvcGVuW2pdLng7XHJcbiAgICAgICAgICAgICAgICBpZiAoZHggPiAwLjAgJiYgZHggKiBkeCA+IG9wZW5bal0ucikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlZC5wdXNoKG9wZW5bal0pO1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZW4uc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8qIElmIHdlJ3JlIG91dHNpZGUgdGhlIGNpcmN1bWNpcmNsZSwgc2tpcCB0aGlzIHRyaWFuZ2xlLiAqL1xyXG4gICAgICAgICAgICAgICAgZHkgPSB2ZXJ0aWNlc1tjXVsxXSAtIG9wZW5bal0ueTtcclxuICAgICAgICAgICAgICAgIGlmIChkeCAqIGR4ICsgZHkgKiBkeSAtIG9wZW5bal0uciA+IEVQU0lMT04pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvKiBSZW1vdmUgdGhlIHRyaWFuZ2xlIGFuZCBhZGQgaXQncyBlZGdlcyB0byB0aGUgZWRnZSBsaXN0LiAqL1xyXG4gICAgICAgICAgICAgICAgZWRnZXMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmksIG9wZW5bal0uaixcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmosIG9wZW5bal0uayxcclxuICAgICAgICAgICAgICAgICAgICBvcGVuW2pdLmssIG9wZW5bal0uaVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIG9wZW4uc3BsaWNlKGosIDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKiBSZW1vdmUgYW55IGRvdWJsZWQgZWRnZXMuICovXHJcbiAgICAgICAgICAgIGRlZHVwKGVkZ2VzKTtcclxuXHJcbiAgICAgICAgICAgIC8qIEFkZCBhIG5ldyB0cmlhbmdsZSBmb3IgZWFjaCBlZGdlLiAqL1xyXG4gICAgICAgICAgICBmb3IgKGogPSBlZGdlcy5sZW5ndGg7IGo7ICkge1xyXG4gICAgICAgICAgICAgICAgYiA9IGVkZ2VzWy0tal07XHJcbiAgICAgICAgICAgICAgICBhID0gZWRnZXNbLS1qXTtcclxuICAgICAgICAgICAgICAgIG9wZW4ucHVzaChjaXJjdW1jaXJjbGUodmVydGljZXMsIGEsIGIsIGMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogQ29weSBhbnkgcmVtYWluaW5nIG9wZW4gdHJpYW5nbGVzIHRvIHRoZSBjbG9zZWQgbGlzdCwgYW5kIHRoZW5cclxuICAgICAgICAgICAgKiByZW1vdmUgYW55IHRyaWFuZ2xlcyB0aGF0IHNoYXJlIGEgdmVydGV4IHdpdGggdGhlIHN1cGVydHJpYW5nbGUsXHJcbiAgICAgICAgICAgICogYnVpbGRpbmcgYSBsaXN0IG9mIHRyaXBsZXRzIHRoYXQgcmVwcmVzZW50IHRyaWFuZ2xlcy4gKi9cclxuICAgICAgICBmb3IgKGkgPSBvcGVuLmxlbmd0aDsgaS0tOyApIHtcclxuICAgICAgICAgICAgY2xvc2VkLnB1c2gob3BlbltpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9wZW4ubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChpID0gY2xvc2VkLmxlbmd0aDsgaS0tOyApIHtcclxuICAgICAgICAgICAgaWYgKGNsb3NlZFtpXS5pIDwgbiAmJiBjbG9zZWRbaV0uaiA8IG4gJiYgY2xvc2VkW2ldLmsgPCBuKSB7XHJcbiAgICAgICAgICAgICAgICBvcGVuLnB1c2goY2xvc2VkW2ldLmksIGNsb3NlZFtpXS5qLCBjbG9zZWRbaV0uayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIFlheSwgd2UncmUgZG9uZSEgKi9cclxuICAgICAgICByZXR1cm4gb3BlbjtcclxuICAgIH0sXHJcbiAgICBjb250YWluczogZnVuY3Rpb24odHJpLCBwKSB7XHJcbiAgICAgICAgLyogQm91bmRpbmcgYm94IHRlc3QgZmlyc3QsIGZvciBxdWljayByZWplY3Rpb25zLiAqL1xyXG4gICAgICAgIGlmICgocFswXSA8IHRyaVswXVswXSAmJiBwWzBdIDwgdHJpWzFdWzBdICYmIHBbMF0gPCB0cmlbMl1bMF0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFswXSA+IHRyaVswXVswXSAmJiBwWzBdID4gdHJpWzFdWzBdICYmIHBbMF0gPiB0cmlbMl1bMF0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFsxXSA8IHRyaVswXVsxXSAmJiBwWzFdIDwgdHJpWzFdWzFdICYmIHBbMV0gPCB0cmlbMl1bMV0pIHx8XHJcbiAgICAgICAgICAgICAgICAocFsxXSA+IHRyaVswXVsxXSAmJiBwWzFdID4gdHJpWzFdWzFdICYmIHBbMV0gPiB0cmlbMl1bMV0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGEgPSB0cmlbMV1bMF0gLSB0cmlbMF1bMF07XHJcbiAgICAgICAgdmFyIGIgPSB0cmlbMl1bMF0gLSB0cmlbMF1bMF07XHJcbiAgICAgICAgdmFyIGMgPSB0cmlbMV1bMV0gLSB0cmlbMF1bMV07XHJcbiAgICAgICAgdmFyIGQgPSB0cmlbMl1bMV0gLSB0cmlbMF1bMV07XHJcbiAgICAgICAgdmFyIGkgPSBhICogZCAtIGIgKiBjO1xyXG5cclxuICAgICAgICAvKiBEZWdlbmVyYXRlIHRyaS4gKi9cclxuICAgICAgICBpZiAoaSA9PT0gMC4wKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHUgPSAoZCAqIChwWzBdIC0gdHJpWzBdWzBdKSAtIGIgKiAocFsxXSAtIHRyaVswXVsxXSkpIC8gaSxcclxuICAgICAgICAgICAgICAgIHYgPSAoYSAqIChwWzFdIC0gdHJpWzBdWzFdKSAtIGMgKiAocFswXSAtIHRyaVswXVswXSkpIC8gaTtcclxuXHJcbiAgICAgICAgLyogSWYgd2UncmUgb3V0c2lkZSB0aGUgdHJpLCBmYWlsLiAqL1xyXG4gICAgICAgIGlmICh1IDwgMC4wIHx8IHYgPCAwLjAgfHwgKHUgKyB2KSA+IDEuMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBbdSwgdl07XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBkZWxhdW5heTtcclxuIiwiXHJcbmV4cG9ydCB2YXIgR0xNQVRfRVBTSUxPTiA9IDAuMDAwMDAxO1xyXG5cclxuLy8gVXNlIEFycmF5IGluc3RlYWQgb2YgRmxvYXQzMkFycmF5LiBJdCBzZWVtcyB0byBiZSBtdWNoIGZhc3RlciBhbmQgaGlnaGVyIHByZWNpc2lvbi5cclxuZXhwb3J0IHZhciBHTE1BVF9BUlJBWV9UWVBFID0gQXJyYXk7XHJcbi8vIGlmKCFHTE1BVF9BUlJBWV9UWVBFKSB7XHJcbi8vICAgICBHTE1BVF9BUlJBWV9UWVBFID0gKHR5cGVvZiBGbG9hdDMyQXJyYXkgIT09ICd1bmRlZmluZWQnKSA/IEZsb2F0MzJBcnJheSA6IEFycmF5O1xyXG4vLyB9XHJcblxyXG5leHBvcnQgdmFyIEdMTUFUX1JBTkRPTSA9IE1hdGgucmFuZG9tO1xyXG4iLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgMiBEaW1lbnNpb25hbCBWZWN0b3JcclxuICogQG5hbWUgdmVjMlxyXG4gKi9cclxuXHJcbnZhciB2ZWMyID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjMlxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjMn0gYSBuZXcgMkQgdmVjdG9yXHJcbiAqL1xyXG52ZWMyLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDIpO1xyXG4gICAgb3V0WzBdID0gMDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMiBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBhIG5ldyAyRCB2ZWN0b3JcclxuICovXHJcbnZlYzIuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMik7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMyIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gYSBuZXcgMkQgdmVjdG9yXHJcbiAqL1xyXG52ZWMyLmZyb21WYWx1ZXMgPSBmdW5jdGlvbih4LCB5KSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMik7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzIgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMiB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5KSB7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTdWJ0cmFjdHMgdmVjdG9yIGIgZnJvbSB2ZWN0b3IgYVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnN1YnRyYWN0ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMi5zdWIgPSB2ZWMyLnN1YnRyYWN0O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm11bHRpcGx5ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMi5tdWwgPSB2ZWMyLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLmRpdmlkZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAvIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpdmlkZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLmRpdiA9IHZlYzIuZGl2aWRlO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1pbmltdW0gb2YgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gTWF0aC5taW4oYVswXSwgYlswXSk7XHJcbiAgICBvdXRbMV0gPSBNYXRoLm1pbihhWzFdLCBiWzFdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMyIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYjtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWMyJ3MgYWZ0ZXIgc2NhbGluZyB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWVcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYiBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgKGJbMF0gKiBzY2FsZSk7XHJcbiAgICBvdXRbMV0gPSBhWzFdICsgKGJbMV0gKiBzY2FsZSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMyLmRpc3RhbmNlID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgdmFyIHggPSBiWzBdIC0gYVswXSxcclxuICAgICAgICB5ID0gYlsxXSAtIGFbMV07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuZGlzdCA9IHZlYzIuZGlzdGFuY2U7XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMyLnNxdWFyZWREaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXHJcbiAgICAgICAgeSA9IGJbMV0gLSBhWzFdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuc3FyRGlzdCA9IHZlYzIuc3F1YXJlZERpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWMyLmxlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLmxlbiA9IHZlYzIubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWMyLnNxdWFyZWRMZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMyLnNxckxlbiA9IHZlYzIuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gLWFbMF07XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5pbnZlcnNlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcclxuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xyXG4gIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogTm9ybWFsaXplIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgdmFyIGxlbiA9IHgqeCArIHkqeTtcclxuICAgIGlmIChsZW4gPiAwKSB7XHJcbiAgICAgICAgLy9UT0RPOiBldmFsdWF0ZSB1c2Ugb2YgZ2xtX2ludnNxcnQgaGVyZT9cclxuICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgICAgb3V0WzBdID0gYVswXSAqIGxlbjtcclxuICAgICAgICBvdXRbMV0gPSBhWzFdICogbGVuO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXHJcbnZlYzIuZG90ID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbXB1dGVzIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHR3byB2ZWMyJ3NcclxuICogTm90ZSB0aGF0IHRoZSBjcm9zcyBwcm9kdWN0IG11c3QgYnkgZGVmaW5pdGlvbiBwcm9kdWNlIGEgM0QgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzIuY3Jvc3MgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZhciB6ID0gYVswXSAqIGJbMV0gLSBhWzFdICogYlswXTtcclxuICAgIG91dFswXSA9IG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSB6O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIubGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcclxuICAgIHZhciBheCA9IGFbMF0sXHJcbiAgICAgICAgYXkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XHJcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHZlY3RvciB3aXRoIHRoZSBnaXZlbiBzY2FsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3NjYWxlXSBMZW5ndGggb2YgdGhlIHJlc3VsdGluZyB2ZWN0b3IuIElmIG9tbWl0dGVkLCBhIHVuaXQgdmVjdG9yIHdpbGwgYmUgcmV0dXJuZWRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cclxudmVjMi5yYW5kb20gPSBmdW5jdGlvbiAob3V0LCBzY2FsZSkge1xyXG4gICAgc2NhbGUgPSBzY2FsZSB8fCAxLjA7XHJcbiAgICB2YXIgciA9IEdMTUFUX1JBTkRPTSgpICogMi4wICogTWF0aC5QSTtcclxuICAgIG91dFswXSA9IE1hdGguY29zKHIpICogc2NhbGU7XHJcbiAgICBvdXRbMV0gPSBNYXRoLnNpbihyKSAqIHNjYWxlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDJ9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIudHJhbnNmb3JtTWF0MiA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzJdICogeTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDJkfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnRyYW5zZm9ybU1hdDJkID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV07XHJcbiAgICBvdXRbMF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHkgKyBtWzVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQzXHJcbiAqIDNyZCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDN9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXHJcbnZlYzIudHJhbnNmb3JtTWF0MyA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzNdICogeSArIG1bNl07XHJcbiAgICBvdXRbMV0gPSBtWzFdICogeCArIG1bNF0gKiB5ICsgbVs3XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMiB3aXRoIGEgbWF0NFxyXG4gKiAzcmQgdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcwJ1xyXG4gKiA0dGggdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQ0fSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xyXG52ZWMyLnRyYW5zZm9ybU1hdDQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZhciB4ID0gYVswXSxcclxuICAgICAgICB5ID0gYVsxXTtcclxuICAgIG91dFswXSA9IG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzEyXTtcclxuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzEzXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybSBzb21lIG9wZXJhdGlvbiBvdmVyIGFuIGFycmF5IG9mIHZlYzJzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3ZlclxyXG4gKiBAcGFyYW0ge051bWJlcn0gc3RyaWRlIE51bWJlciBvZiBlbGVtZW50cyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHZlYzIuIElmIDAgYXNzdW1lcyB0aWdodGx5IHBhY2tlZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IE51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjMnMgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggdmVjdG9yIGluIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW2FyZ10gYWRkaXRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGZuXHJcbiAqIEByZXR1cm5zIHtBcnJheX0gYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzIuZm9yRWFjaCA9IChmdW5jdGlvbigpIHtcclxuICAgIHZhciB2ZWMgPSB2ZWMyLmNyZWF0ZSgpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbihhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcclxuICAgICAgICB2YXIgaSwgbDtcclxuICAgICAgICBpZighc3RyaWRlKSB7XHJcbiAgICAgICAgICAgIHN0cmlkZSA9IDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZighb2Zmc2V0KSB7XHJcbiAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihjb3VudCkge1xyXG4gICAgICAgICAgICBsID0gTWF0aC5taW4oKGNvdW50ICogc3RyaWRlKSArIG9mZnNldCwgYS5sZW5ndGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGwgPSBhLmxlbmd0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihpID0gb2Zmc2V0OyBpIDwgbDsgaSArPSBzdHJpZGUpIHtcclxuICAgICAgICAgICAgdmVjWzBdID0gYVtpXTsgdmVjWzFdID0gYVtpKzFdO1xyXG4gICAgICAgICAgICBmbih2ZWMsIHZlYywgYXJnKTtcclxuICAgICAgICAgICAgYVtpXSA9IHZlY1swXTsgYVtpKzFdID0gdmVjWzFdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjMjsiLCJpbXBvcnQgdmVjMiBmcm9tICcuLi9nbG1hdHJpeC92ZWMyJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuVmVjdG9yMlxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKi9cclxudmFyIFZlY3RvcjIgPSBmdW5jdGlvbih4LCB5KSB7XHJcblxyXG4gICAgeCA9IHggfHwgMDtcclxuICAgIHkgPSB5IHx8IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIFZlY3RvcjIsIHJlYWQgYW5kIHdyaXRlIG9mIHgsIHkgd2lsbCBjaGFuZ2UgdGhlIHZhbHVlcyBpbiBhcnJheVxyXG4gICAgICogQWxsIG1ldGhvZHMgYWxzbyBvcGVyYXRlIG9uIHRoZSBhcnJheSBpbnN0ZWFkIG9mIHgsIHkgY29tcG9uZW50c1xyXG4gICAgICogQG5hbWUgYXJyYXlcclxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IyI1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFycmF5ID0gdmVjMi5mcm9tVmFsdWVzKHgsIHkpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlydHkgZmxhZyBpcyB1c2VkIGJ5IHRoZSBOb2RlIHRvIGRldGVybWluZVxyXG4gICAgICogaWYgdGhlIG1hdHJpeCBpcyB1cGRhdGVkIHRvIGxhdGVzdFxyXG4gICAgICogQG5hbWUgX2RpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjIjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcblZlY3RvcjIucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBWZWN0b3IyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGIgdG8gc2VsZlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCBhbmQgeSBjb21wb25lbnRzXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24oeCwgeSkge1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSB4O1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSB5O1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgeCBhbmQgeSBjb21wb25lbnRzIGZyb20gYXJyYXlcclxuICAgICAqIEBwYXJhbSAge0Zsb2F0MzJBcnJheXxudW1iZXJbXX0gYXJyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNldEFycmF5OiBmdW5jdGlvbihhcnIpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0gYXJyWzBdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSBhcnJbMV07XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBWZWN0b3IyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIodGhpcy54LCB0aGlzLnkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgeCwgeSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcm9zcyBwcm9kdWN0IG9mIHNlbGYgYW5kIGIsIHdyaXR0ZW4gdG8gYSBWZWN0b3IzIG91dFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBjcm9zczogZnVuY3Rpb24ob3V0LCBiKSB7XHJcbiAgICAgICAgdmVjMi5jcm9zcyhvdXQuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBkaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5kaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuZGlzdGFuY2UodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIGRpdmlkZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIGRpdjogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuZGl2KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXZpZGUgc2VsZiBieSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgZGl2aWRlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5kaXZpZGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5kb3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2YgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIubGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIubGVuZ3RoKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIExpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbGVycDogZnVuY3Rpb24oYSwgYiwgdCkge1xyXG4gICAgICAgIHZlYzIubGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWluaW11bSBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbWluOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjMi5taW4odGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1heGltdW0gb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIG1heDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIubWF4KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBtdWw6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXV0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOZWdhdGUgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBuZWdhdGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZlYzIubmVnYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWxpemUgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZlYzIubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSByYW5kb20geCwgeSBjb21wb25lbnRzIHdpdGggYSBnaXZlbiBzY2FsZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICByYW5kb206IGZ1bmN0aW9uKHNjYWxlKSB7XHJcbiAgICAgICAgdmVjMi5yYW5kb20odGhpcy5hcnJheSwgc2NhbGUpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24ocykge1xyXG4gICAgICAgIHZlYzIuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIGIgYW5kIGFkZCB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlQW5kQWRkOiBmdW5jdGlvbihiLCBzKSB7XHJcbiAgICAgICAgdmVjMi5zY2FsZUFuZEFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWREaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMi5zcXJEaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZERpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3F1YXJlZERpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkTGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3FyTGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzIuc3F1YXJlZExlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3Igc3VidHJhY3RcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzdWI6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWMyLnN1Yih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgYiBmcm9tIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICBzdWJ0cmFjdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzIuc3VidHJhY3QodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgyIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQyOiBmdW5jdGlvbihtKSB7XHJcbiAgICAgICAgdmVjMi50cmFuc2Zvcm1NYXQyKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4MmQgbVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQyZDogZnVuY3Rpb24obSkge1xyXG4gICAgICAgIHZlYzIudHJhbnNmb3JtTWF0MmQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgbS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXgzIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQzOiBmdW5jdGlvbihtKSB7XHJcbiAgICAgICAgdmVjMi50cmFuc2Zvcm1NYXQzKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4NCBtXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtTWF0NDogZnVuY3Rpb24obSkge1xyXG4gICAgICAgIHZlYzIudHJhbnNmb3JtTWF0NCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLy8gR2V0dGVyIGFuZCBTZXR0ZXJcclxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xyXG5cclxuICAgIHZhciBwcm90byA9IFZlY3RvcjIucHJvdG90eXBlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yMlxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ3gnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzBdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVswXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB5XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yMlxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8vIFN1cHBseSBtZXRob2RzIHRoYXQgYXJlIG5vdCBpbiBwbGFjZVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5hZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5KSB7XHJcbiAgICB2ZWMyLnNldChvdXQuYXJyYXksIHgsIHkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGIpIHtcclxuICAgIHZlYzIuY29weShvdXQuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5jcm9zcyA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMi5jcm9zcyhvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLmRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5kaXN0YW5jZShhLmFycmF5LCBiLmFycmF5KTtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIuZGlzdGFuY2UgPSBWZWN0b3IyLmRpc3Q7XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuZGl2ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMyLmRpdmlkZShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5kaXZpZGUgPSBWZWN0b3IyLmRpdjtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMi5kb3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5kb3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIubGVuID0gZnVuY3Rpb24oYikge1xyXG4gICAgcmV0dXJuIHZlYzIubGVuZ3RoKGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLy8gVmVjdG9yMi5sZW5ndGggPSBWZWN0b3IyLmxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5sZXJwID0gZnVuY3Rpb24ob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2ZWMyLmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5taW4gPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIubWluKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMi5tYXgob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzIubXVsdGlwbHkob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIubXVsdGlwbHkgPSBWZWN0b3IyLm11bDtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMi5uZWdhdGUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMi5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIucmFuZG9tID0gZnVuY3Rpb24ob3V0LCBzY2FsZSkge1xyXG4gICAgdmVjMi5yYW5kb20ob3V0LmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IyfVxyXG4gKi9cclxuVmVjdG9yMi5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgc2NhbGUpIHtcclxuICAgIHZlYzIuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICB2ZWMyLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLnNxckRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMi5zcXJEaXN0KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMi5zcXVhcmVkRGlzdGFuY2UgPSBWZWN0b3IyLnNxckRpc3Q7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjIuc3FyTGVuID0gZnVuY3Rpb24oYSkge1xyXG4gICAgcmV0dXJuIHZlYzIuc3FyTGVuKGEuYXJyYXkpO1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IyLnNxdWFyZWRMZW5ndGggPSBWZWN0b3IyLnNxckxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIuc3ViID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWMyLnN1YnRyYWN0KG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjJ9XHJcbiAqL1xyXG5WZWN0b3IyLnN1YnRyYWN0ID0gVmVjdG9yMi5zdWI7XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MiA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQyKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9ICBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MmQgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZlYzIudHJhbnNmb3JtTWF0MmQob3V0LmFycmF5LCBhLmFycmF5LCBtLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gYVxyXG4gKiBAcGFyYW0gIHtNYXRyaXgzfSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0MyA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQzKG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICovXHJcblZlY3RvcjIudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjMi50cmFuc2Zvcm1NYXQ0KG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBWZWN0b3IyO1xyXG4iLCIvLyAyRCBCbGVuZCBjbGlwIG9mIGJsZW5kIHRyZWVcclxuLy8gaHR0cDovL2RvY3MudW5pdHkzZC5jb20vRG9jdW1lbnRhdGlvbi9NYW51YWwvMkRCbGVuZGluZy5odG1sXHJcbmltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcbmltcG9ydCBkZWxhdW5heSBmcm9tICcuLi91dGlsL2RlbGF1bmF5JztcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi4vbWF0aC9WZWN0b3IyJztcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmFuaW1hdGlvbi5CbGVuZDJEQ2xpcC5JQ2xpcElucHV0XHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5WZWN0b3IyfSBwb3NpdGlvblxyXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9mZnNldFxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiAyZCBibGVuZGluZyBub2RlIGluIGFuaW1hdGlvbiBibGVuZCB0cmVlLlxyXG4gKiBvdXRwdXQgY2xpcCBtdXN0IGhhdmUgYmxlbmQyRCBtZXRob2RcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFuaW1hdGlvbi5CbGVuZDJEQ2xpcFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGlvXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cclxuICogQHBhcmFtIHtvYmplY3RbXX0gW29wdHMuaW5wdXRzXVxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yMn0gW29wdHMucG9zaXRpb25dXHJcbiAqIEBwYXJhbSB7Y2xheS5hbmltYXRpb24uQ2xpcH0gW29wdHMub3V0cHV0XVxyXG4gKi9cclxudmFyIEJsZW5kMkRDbGlwID0gZnVuY3Rpb24gKG9wdHMpIHtcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICBDbGlwLmNhbGwodGhpcywgb3B0cyk7XHJcbiAgICAvKipcclxuICAgICAqIE91dHB1dCBjbGlwIG11c3QgaGF2ZSBibGVuZDJEIG1ldGhvZFxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkNsaXB9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3V0cHV0ID0gb3B0cy5vdXRwdXQgfHwgbnVsbDtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuYW5pbWF0aW9uLkJsZW5kMkRDbGlwLklDbGlwSW5wdXRbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5pbnB1dHMgPSBvcHRzLmlucHV0cyB8fCBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVUcmlhbmdsZSA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5fdHJpYW5nbGVzID0gW107XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlVHJpYW5nbGVzKCk7XHJcbn07XHJcblxyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUgPSBuZXcgQ2xpcCgpO1xyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbGVuZDJEQ2xpcDtcclxuLyoqXHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IyfSBwb3NpdGlvblxyXG4gKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGlucHV0Q2xpcFxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29mZnNldF1cclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQmxlbmQyRENsaXAuSUNsaXBJbnB1dH1cclxuICovXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5hZGRJbnB1dCA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgaW5wdXRDbGlwLCBvZmZzZXQpIHtcclxuICAgIHZhciBvYmogPSB7XHJcbiAgICAgICAgcG9zaXRpb24gOiBwb3NpdGlvbixcclxuICAgICAgICBjbGlwIDogaW5wdXRDbGlwLFxyXG4gICAgICAgIG9mZnNldCA6IG9mZnNldCB8fCAwXHJcbiAgICB9O1xyXG4gICAgdGhpcy5pbnB1dHMucHVzaChvYmopO1xyXG4gICAgdGhpcy5saWZlID0gTWF0aC5tYXgoaW5wdXRDbGlwLmxpZmUsIHRoaXMubGlmZSk7XHJcbiAgICAvLyBUT0RPIENoYW5nZSB0byBpbmNyZW1lbnRhbGx5IGFkZGluZ1xyXG4gICAgdGhpcy5fdXBkYXRlVHJpYW5nbGVzKCk7XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxufTtcclxuXHJcbi8vIERlbGF1bmF5IHRyaWFuZ3VsYXRlXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5fdXBkYXRlVHJpYW5nbGVzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGlucHV0cyA9IHRoaXMuaW5wdXRzLm1hcChmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIHJldHVybiBhLnBvc2l0aW9uO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl90cmlhbmdsZXMgPSBkZWxhdW5heS50cmlhbmd1bGF0ZShpbnB1dHMsICdhcnJheScpO1xyXG59O1xyXG5cclxuQmxlbmQyRENsaXAucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbiAodGltZSwgZFRpbWUsIHNpbGVudCkge1xyXG5cclxuICAgIHZhciByZXQgPSBDbGlwLnByb3RvdHlwZS5zdGVwLmNhbGwodGhpcywgdGltZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcclxuICAgICAgICB0aGlzLnNldFRpbWUodGhpcy5nZXRFbGFwc2VkVGltZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXHJcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldDtcclxufTtcclxuXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5zZXRUaW1lID0gZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgIHZhciByZXMgPSB0aGlzLl9maW5kVHJpYW5nbGUodGhpcy5wb3NpdGlvbik7XHJcbiAgICBpZiAoIXJlcykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIEluIEJhcnljZW50cmljXHJcbiAgICB2YXIgYSA9IHJlc1sxXTsgLy8gUGVyY2VudCBvZiBjbGlwMlxyXG4gICAgdmFyIGIgPSByZXNbMl07IC8vIFBlcmNlbnQgb2YgY2xpcDNcclxuXHJcbiAgICB2YXIgdHJpID0gcmVzWzBdO1xyXG5cclxuICAgIHZhciBpbjEgPSB0aGlzLmlucHV0c1t0cmkuaW5kaWNlc1swXV07XHJcbiAgICB2YXIgaW4yID0gdGhpcy5pbnB1dHNbdHJpLmluZGljZXNbMV1dO1xyXG4gICAgdmFyIGluMyA9IHRoaXMuaW5wdXRzW3RyaS5pbmRpY2VzWzJdXTtcclxuICAgIHZhciBjbGlwMSA9IGluMS5jbGlwO1xyXG4gICAgdmFyIGNsaXAyID0gaW4yLmNsaXA7XHJcbiAgICB2YXIgY2xpcDMgPSBpbjMuY2xpcDtcclxuXHJcbiAgICBjbGlwMS5zZXRUaW1lKCh0aW1lICsgaW4xLm9mZnNldCkgJSBjbGlwMS5saWZlKTtcclxuICAgIGNsaXAyLnNldFRpbWUoKHRpbWUgKyBpbjIub2Zmc2V0KSAlIGNsaXAyLmxpZmUpO1xyXG4gICAgY2xpcDMuc2V0VGltZSgodGltZSArIGluMy5vZmZzZXQpICUgY2xpcDMubGlmZSk7XHJcblxyXG4gICAgdmFyIGMxID0gY2xpcDEub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAxLm91dHB1dCA6IGNsaXAxO1xyXG4gICAgdmFyIGMyID0gY2xpcDIub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAyLm91dHB1dCA6IGNsaXAyO1xyXG4gICAgdmFyIGMzID0gY2xpcDMub3V0cHV0IGluc3RhbmNlb2YgQ2xpcCA/IGNsaXAzLm91dHB1dCA6IGNsaXAzO1xyXG5cclxuICAgIHRoaXMub3V0cHV0LmJsZW5kMkQoYzEsIGMyLCBjMywgYSwgYik7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xvbmUgYSBuZXcgQmxlbmQyRCBjbGlwXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2xvbmVJbnB1dHMgVHJ1ZSBpZiBjbG9uZSB0aGUgaW5wdXQgY2xpcHNcclxuICogQHJldHVybiB7Y2xheS5hbmltYXRpb24uQmxlbmQyRENsaXB9XHJcbiAqL1xyXG5CbGVuZDJEQ2xpcC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoY2xvbmVJbnB1dHMpIHtcclxuICAgIHZhciBjbGlwID0gQ2xpcC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgIGNsaXAub3V0cHV0ID0gdGhpcy5vdXRwdXQuY2xvbmUoKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgaW5wdXRDbGlwID0gY2xvbmVJbnB1dHMgPyB0aGlzLmlucHV0c1tpXS5jbGlwLmNsb25lKHRydWUpIDogdGhpcy5pbnB1dHNbaV0uY2xpcDtcclxuICAgICAgICBjbGlwLmFkZElucHV0KHRoaXMuaW5wdXRzW2ldLnBvc2l0aW9uLCBpbnB1dENsaXAsIHRoaXMuaW5wdXRzW2ldLm9mZnNldCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xpcDtcclxufTtcclxuXHJcbkJsZW5kMkRDbGlwLnByb3RvdHlwZS5fZmluZFRyaWFuZ2xlID0gZnVuY3Rpb24gKHBvc2l0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fY2FjaGVUcmlhbmdsZSkge1xyXG4gICAgICAgIHZhciByZXMgPSBkZWxhdW5heS5jb250YWlucyh0aGlzLl9jYWNoZVRyaWFuZ2xlLnZlcnRpY2VzLCBwb3NpdGlvbi5hcnJheSk7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuX2NhY2hlVHJpYW5nbGUsIHJlc1swXSwgcmVzWzFdXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RyaWFuZ2xlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciB0cmkgPSB0aGlzLl90cmlhbmdsZXNbaV07XHJcbiAgICAgICAgdmFyIHJlcyA9IGRlbGF1bmF5LmNvbnRhaW5zKHRyaS52ZXJ0aWNlcywgdGhpcy5wb3NpdGlvbi5hcnJheSk7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWNoZVRyaWFuZ2xlID0gdHJpO1xyXG4gICAgICAgICAgICByZXR1cm4gW3RyaSwgcmVzWzBdLCByZXNbMV1dO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJsZW5kMkRDbGlwOyIsIlxyXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTMsIEJyYW5kb24gSm9uZXMsIENvbGluIE1hY0tlbnppZSBJVi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuXHJcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXHJcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcclxuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcclxuICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxyXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxyXG4gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxyXG4gICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXHJcblxyXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcclxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcclxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxyXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxyXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcclxuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xyXG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cclxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcclxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcclxuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovXHJcblxyXG5pbXBvcnQgeyBHTE1BVF9SQU5ET00sIEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcblxyXG4vKipcclxuICogQGNsYXNzIDMgRGltZW5zaW9uYWwgVmVjdG9yXHJcbiAqIEBuYW1lIHZlYzNcclxuICovXHJcblxyXG52YXIgdmVjMyA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5IHZlYzNcclxuICpcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cclxudmVjMy5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgzKTtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cclxudmVjMy5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSgzKTtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjM30gYSBuZXcgM0QgdmVjdG9yXHJcbiAqL1xyXG52ZWMzLmZyb21WYWx1ZXMgPSBmdW5jdGlvbih4LCB5LCB6KSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMyk7XHJcbiAgICBvdXRbMF0gPSB4O1xyXG4gICAgb3V0WzFdID0geTtcclxuICAgIG91dFsyXSA9IHo7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWMzIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBzb3VyY2UgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzIHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHopIHtcclxuICAgIG91dFswXSA9IHg7XHJcbiAgICBvdXRbMV0gPSB5O1xyXG4gICAgb3V0WzJdID0gejtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXSArIGJbMl07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMuc3VidHJhY3QgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuc3ViID0gdmVjMy5zdWJ0cmFjdDtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5tdWx0aXBseSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAqIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdICogYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gKiBiWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5tdWwgPSB2ZWMzLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmRpdmlkZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAvIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gLyBiWzJdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuZGl2ID0gdmVjMy5kaXZpZGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1heGltdW0gb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gTWF0aC5tYXgoYVswXSwgYlswXSk7XHJcbiAgICBvdXRbMV0gPSBNYXRoLm1heChhWzFdLCBiWzFdKTtcclxuICAgIG91dFsyXSA9IE1hdGgubWF4KGFbMl0sIGJbMl0pO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMzIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYjtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiO1xyXG4gICAgb3V0WzJdID0gYVsyXSAqIGI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzMncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIG91dFswXSA9IGFbMF0gKyAoYlswXSAqIHNjYWxlKTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyAoYlsxXSAqIHNjYWxlKTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyAoYlsyXSAqIHNjYWxlKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXHJcbnZlYzMuZGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl07XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSArIHoqeik7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzMuZGlzdCA9IHZlYzMuZGlzdGFuY2U7XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xyXG52ZWMzLnNxdWFyZWREaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHZhciB4ID0gYlswXSAtIGFbMF0sXHJcbiAgICAgICAgeSA9IGJbMV0gLSBhWzFdLFxyXG4gICAgICAgIHogPSBiWzJdIC0gYVsyXTtcclxuICAgIHJldHVybiB4KnggKyB5KnkgKyB6Kno7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWREaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWMzLnNxckRpc3QgPSB2ZWMzLnNxdWFyZWREaXN0YW5jZTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKi9cclxudmVjMy5sZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdLFxyXG4gICAgICAgIHogPSBhWzJdO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCh4KnggKyB5KnkgKyB6KnopO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5sZW4gPSB2ZWMzLmxlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKi9cclxudmVjMy5zcXVhcmVkTGVuZ3RoID0gZnVuY3Rpb24gKGEpIHtcclxuICAgIHZhciB4ID0gYVswXSxcclxuICAgICAgICB5ID0gYVsxXSxcclxuICAgICAgICB6ID0gYVsyXTtcclxuICAgIHJldHVybiB4KnggKyB5KnkgKyB6Kno7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5zcXJMZW4gPSB2ZWMzLnNxdWFyZWRMZW5ndGg7XHJcblxyXG4vKipcclxuICogTmVnYXRlcyB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBuZWdhdGVcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5uZWdhdGUgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IC1hWzBdO1xyXG4gICAgb3V0WzFdID0gLWFbMV07XHJcbiAgICBvdXRbMl0gPSAtYVsyXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5pbnZlcnNlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcclxuICBvdXRbMV0gPSAxLjAgLyBhWzFdO1xyXG4gIG91dFsyXSA9IDEuMCAvIGFbMl07XHJcbiAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl07XHJcbiAgICB2YXIgbGVuID0geCp4ICsgeSp5ICsgeip6O1xyXG4gICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgICAvL1RPRE86IGV2YWx1YXRlIHVzZSBvZiBnbG1faW52c3FydCBoZXJlP1xyXG4gICAgICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcclxuICAgICAgICBvdXRbMF0gPSBhWzBdICogbGVuO1xyXG4gICAgICAgIG91dFsxXSA9IGFbMV0gKiBsZW47XHJcbiAgICAgICAgb3V0WzJdID0gYVsyXSAqIGxlbjtcclxuICAgIH1lbHNle1xyXG4gICAgICAgIG91dFswXSA9IDA7XHJcbiAgICAgICAgb3V0WzFdID0gMDtcclxuICAgICAgICBvdXRbMl0gPSAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXHJcbnZlYzMuZG90ID0gZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdICsgYVsyXSAqIGJbMl07XHJcbn07XHJcblxyXG4vKipcclxuICogQ29tcHV0ZXMgdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmNyb3NzID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLCBheSA9IGFbMV0sIGF6ID0gYVsyXSxcclxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdO1xyXG5cclxuICAgIG91dFswXSA9IGF5ICogYnogLSBheiAqIGJ5O1xyXG4gICAgb3V0WzFdID0gYXogKiBieCAtIGF4ICogYno7XHJcbiAgICBvdXRbMl0gPSBheCAqIGJ5IC0gYXkgKiBieDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLmxlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLFxyXG4gICAgICAgIGF5ID0gYVsxXSxcclxuICAgICAgICBheiA9IGFbMl07XHJcbiAgICBvdXRbMF0gPSBheCArIHQgKiAoYlswXSAtIGF4KTtcclxuICAgIG91dFsxXSA9IGF5ICsgdCAqIChiWzFdIC0gYXkpO1xyXG4gICAgb3V0WzJdID0gYXogKyB0ICogKGJbMl0gLSBheik7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMucmFuZG9tID0gZnVuY3Rpb24gKG91dCwgc2NhbGUpIHtcclxuICAgIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xyXG5cclxuICAgIHZhciByID0gR0xNQVRfUkFORE9NKCkgKiAyLjAgKiBNYXRoLlBJO1xyXG4gICAgdmFyIHogPSAoR0xNQVRfUkFORE9NKCkgKiAyLjApIC0gMS4wO1xyXG4gICAgdmFyIHpTY2FsZSA9IE1hdGguc3FydCgxLjAteip6KSAqIHNjYWxlO1xyXG5cclxuICAgIG91dFswXSA9IE1hdGguY29zKHIpICogelNjYWxlO1xyXG4gICAgb3V0WzFdID0gTWF0aC5zaW4ocikgKiB6U2NhbGU7XHJcbiAgICBvdXRbMl0gPSB6ICogc2NhbGU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDQuXHJcbiAqIDR0aCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XTtcclxuICAgIHcgPSB3IHx8IDEuMDtcclxuICAgIG91dFswXSA9IChtWzBdICogeCArIG1bNF0gKiB5ICsgbVs4XSAqIHogKyBtWzEyXSkgLyB3O1xyXG4gICAgb3V0WzFdID0gKG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzldICogeiArIG1bMTNdKSAvIHc7XHJcbiAgICBvdXRbMl0gPSAobVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdKSAvIHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gdGhlIDN4MyBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy50cmFuc2Zvcm1NYXQzID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sIHkgPSBhWzFdLCB6ID0gYVsyXTtcclxuICAgIG91dFswXSA9IHggKiBtWzBdICsgeSAqIG1bM10gKyB6ICogbVs2XTtcclxuICAgIG91dFsxXSA9IHggKiBtWzFdICsgeSAqIG1bNF0gKyB6ICogbVs3XTtcclxuICAgIG91dFsyXSA9IHggKiBtWzJdICsgeSAqIG1bNV0gKyB6ICogbVs4XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMyB3aXRoIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy50cmFuc2Zvcm1RdWF0ID0gZnVuY3Rpb24ob3V0LCBhLCBxKSB7XHJcbiAgICAvLyBiZW5jaG1hcmtzOiBodHRwOi8vanNwZXJmLmNvbS9xdWF0ZXJuaW9uLXRyYW5zZm9ybS12ZWMzLWltcGxlbWVudGF0aW9uc1xyXG5cclxuICAgIHZhciB4ID0gYVswXSwgeSA9IGFbMV0sIHogPSBhWzJdLFxyXG4gICAgICAgIHF4ID0gcVswXSwgcXkgPSBxWzFdLCBxeiA9IHFbMl0sIHF3ID0gcVszXSxcclxuXHJcbiAgICAgICAgLy8gY2FsY3VsYXRlIHF1YXQgKiB2ZWNcclxuICAgICAgICBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeSxcclxuICAgICAgICBpeSA9IHF3ICogeSArIHF6ICogeCAtIHF4ICogeixcclxuICAgICAgICBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeCxcclxuICAgICAgICBpdyA9IC1xeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7XHJcblxyXG4gICAgLy8gY2FsY3VsYXRlIHJlc3VsdCAqIGludmVyc2UgcXVhdFxyXG4gICAgb3V0WzBdID0gaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeTtcclxuICAgIG91dFsxXSA9IGl5ICogcXcgKyBpdyAqIC1xeSArIGl6ICogLXF4IC0gaXggKiAtcXo7XHJcbiAgICBvdXRbMl0gPSBpeiAqIHF3ICsgaXcgKiAtcXogKyBpeCAqIC1xeSAtIGl5ICogLXF4O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGUgYSAzRCB2ZWN0b3IgYXJvdW5kIHRoZSB4LWF4aXNcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgdmVjMyBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjIFRoZSBhbmdsZSBvZiByb3RhdGlvblxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xyXG52ZWMzLnJvdGF0ZVggPSBmdW5jdGlvbihvdXQsIGEsIGIsIGMpe1xyXG4gICB2YXIgcCA9IFtdLCByPVtdO1xyXG4gICAgICAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXHJcbiAgICAgIHBbMF0gPSBhWzBdIC0gYlswXTtcclxuICAgICAgcFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcFsyXSA9IGFbMl0gLSBiWzJdO1xyXG5cclxuICAgICAgLy9wZXJmb3JtIHJvdGF0aW9uXHJcbiAgICAgIHJbMF0gPSBwWzBdO1xyXG4gICAgICByWzFdID0gcFsxXSpNYXRoLmNvcyhjKSAtIHBbMl0qTWF0aC5zaW4oYyk7XHJcbiAgICAgIHJbMl0gPSBwWzFdKk1hdGguc2luKGMpICsgcFsyXSpNYXRoLmNvcyhjKTtcclxuXHJcbiAgICAgIC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cclxuICAgICAgb3V0WzBdID0gclswXSArIGJbMF07XHJcbiAgICAgIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xyXG4gICAgICBvdXRbMl0gPSByWzJdICsgYlsyXTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHktYXhpc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCBUaGUgcmVjZWl2aW5nIHZlYzNcclxuICogQHBhcmFtIHt2ZWMzfSBhIFRoZSB2ZWMzIHBvaW50IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IGMgVGhlIGFuZ2xlIG9mIHJvdGF0aW9uXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXHJcbnZlYzMucm90YXRlWSA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgYyl7XHJcbiAgICB2YXIgcCA9IFtdLCByPVtdO1xyXG4gICAgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxyXG4gICAgcFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgcFsxXSA9IGFbMV0gLSBiWzFdO1xyXG4gICAgcFsyXSA9IGFbMl0gLSBiWzJdO1xyXG5cclxuICAgIC8vcGVyZm9ybSByb3RhdGlvblxyXG4gICAgclswXSA9IHBbMl0qTWF0aC5zaW4oYykgKyBwWzBdKk1hdGguY29zKGMpO1xyXG4gICAgclsxXSA9IHBbMV07XHJcbiAgICByWzJdID0gcFsyXSpNYXRoLmNvcyhjKSAtIHBbMF0qTWF0aC5zaW4oYyk7XHJcblxyXG4gICAgLy90cmFuc2xhdGUgdG8gY29ycmVjdCBwb3NpdGlvblxyXG4gICAgb3V0WzBdID0gclswXSArIGJbMF07XHJcbiAgICBvdXRbMV0gPSByWzFdICsgYlsxXTtcclxuICAgIG91dFsyXSA9IHJbMl0gKyBiWzJdO1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlIGEgM0QgdmVjdG9yIGFyb3VuZCB0aGUgei1heGlzXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IFRoZSByZWNlaXZpbmcgdmVjM1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7dmVjM30gYiBUaGUgb3JpZ2luIG9mIHRoZSByb3RhdGlvblxyXG4gKiBAcGFyYW0ge051bWJlcn0gYyBUaGUgYW5nbGUgb2Ygcm90YXRpb25cclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cclxudmVjMy5yb3RhdGVaID0gZnVuY3Rpb24ob3V0LCBhLCBiLCBjKXtcclxuICAgIHZhciBwID0gW10sIHI9W107XHJcbiAgICAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXHJcbiAgICBwWzBdID0gYVswXSAtIGJbMF07XHJcbiAgICBwWzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBwWzJdID0gYVsyXSAtIGJbMl07XHJcblxyXG4gICAgLy9wZXJmb3JtIHJvdGF0aW9uXHJcbiAgICByWzBdID0gcFswXSpNYXRoLmNvcyhjKSAtIHBbMV0qTWF0aC5zaW4oYyk7XHJcbiAgICByWzFdID0gcFswXSpNYXRoLnNpbihjKSArIHBbMV0qTWF0aC5jb3MoYyk7XHJcbiAgICByWzJdID0gcFsyXTtcclxuXHJcbiAgICAvL3RyYW5zbGF0ZSB0byBjb3JyZWN0IHBvc2l0aW9uXHJcbiAgICBvdXRbMF0gPSByWzBdICsgYlswXTtcclxuICAgIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xyXG4gICAgb3V0WzJdID0gclsyXSArIGJbMl07XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBQZXJmb3JtIHNvbWUgb3BlcmF0aW9uIG92ZXIgYW4gYXJyYXkgb2YgdmVjM3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGEgdGhlIGFycmF5IG9mIHZlY3RvcnMgdG8gaXRlcmF0ZSBvdmVyXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdHJpZGUgTnVtYmVyIG9mIGVsZW1lbnRzIGJldHdlZW4gdGhlIHN0YXJ0IG9mIGVhY2ggdmVjMy4gSWYgMCBhc3N1bWVzIHRpZ2h0bHkgcGFja2VkXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNraXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50IE51bWJlciBvZiB2ZWMzcyB0byBpdGVyYXRlIG92ZXIuIElmIDAgaXRlcmF0ZXMgb3ZlciBlbnRpcmUgYXJyYXlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gRnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCB2ZWN0b3IgaW4gdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXJnXSBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gZm5cclxuICogQHJldHVybnMge0FycmF5fSBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjMy5mb3JFYWNoID0gKGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIHZlYyA9IHZlYzMuY3JlYXRlKCk7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGEsIHN0cmlkZSwgb2Zmc2V0LCBjb3VudCwgZm4sIGFyZykge1xyXG4gICAgICAgIHZhciBpLCBsO1xyXG4gICAgICAgIGlmKCFzdHJpZGUpIHtcclxuICAgICAgICAgICAgc3RyaWRlID0gMztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCFvZmZzZXQpIHtcclxuICAgICAgICAgICAgb2Zmc2V0ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGNvdW50KSB7XHJcbiAgICAgICAgICAgIGwgPSBNYXRoLm1pbigoY291bnQgKiBzdHJpZGUpICsgb2Zmc2V0LCBhLmxlbmd0aCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbCA9IGEubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yKGkgPSBvZmZzZXQ7IGkgPCBsOyBpICs9IHN0cmlkZSkge1xyXG4gICAgICAgICAgICB2ZWNbMF0gPSBhW2ldOyB2ZWNbMV0gPSBhW2krMV07IHZlY1syXSA9IGFbaSsyXTtcclxuICAgICAgICAgICAgZm4odmVjLCB2ZWMsIGFyZyk7XHJcbiAgICAgICAgICAgIGFbaV0gPSB2ZWNbMF07IGFbaSsxXSA9IHZlY1sxXTsgYVtpKzJdID0gdmVjWzJdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgYW5nbGUgYmV0d2VlbiB0d28gM0QgdmVjdG9yc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYW5nbGUgaW4gcmFkaWFuc1xyXG4gKi9cclxudmVjMy5hbmdsZSA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuXHJcbiAgICB2YXIgdGVtcEEgPSB2ZWMzLmZyb21WYWx1ZXMoYVswXSwgYVsxXSwgYVsyXSk7XHJcbiAgICB2YXIgdGVtcEIgPSB2ZWMzLmZyb21WYWx1ZXMoYlswXSwgYlsxXSwgYlsyXSk7XHJcblxyXG4gICAgdmVjMy5ub3JtYWxpemUodGVtcEEsIHRlbXBBKTtcclxuICAgIHZlYzMubm9ybWFsaXplKHRlbXBCLCB0ZW1wQik7XHJcblxyXG4gICAgdmFyIGNvc2luZSA9IHZlYzMuZG90KHRlbXBBLCB0ZW1wQik7XHJcblxyXG4gICAgaWYoY29zaW5lID4gMS4wKXtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguYWNvcyhjb3NpbmUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjMzsiLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfUkFORE9NLCBHTE1BVF9BUlJBWV9UWVBFIH0gZnJvbSAnLi9jb21tb24nO1xyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyA0IERpbWVuc2lvbmFsIFZlY3RvclxyXG4gKiBAbmFtZSB2ZWM0XHJcbiAqL1xyXG5cclxuZXhwb3J0IHZhciB2ZWM0ID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjNFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjNH0gYSBuZXcgNEQgdmVjdG9yXHJcbiAqL1xyXG52ZWM0LmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xyXG4gICAgb3V0WzBdID0gMDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWM0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cclxudmVjNC5jbG9uZSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIG91dFszXSA9IGFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjNCBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cclxudmVjNC5mcm9tVmFsdWVzID0gZnVuY3Rpb24oeCwgeSwgeiwgdykge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xyXG4gICAgb3V0WzBdID0geDtcclxuICAgIG91dFsxXSA9IHk7XHJcbiAgICBvdXRbMl0gPSB6O1xyXG4gICAgb3V0WzNdID0gdztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHosIHcpIHtcclxuICAgIG91dFswXSA9IHg7XHJcbiAgICBvdXRbMV0gPSB5O1xyXG4gICAgb3V0WzJdID0gejtcclxuICAgIG91dFszXSA9IHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0LmFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSArIGJbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXSArIGJbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQuc3VidHJhY3QgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLSBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAtIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcclxuICAgIG91dFszXSA9IGFbM10gLSBiWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxudmVjNC5zdWIgPSB2ZWM0LnN1YnRyYWN0O1xyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0Lm11bHRpcGx5ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdICogYlswXTtcclxuICAgIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXSAqIGJbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdICogYlszXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQubXVsID0gdmVjNC5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBEaXZpZGVzIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5kaXZpZGUgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIG91dFswXSA9IGFbMF0gLyBiWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXSAvIGJbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdIC8gYlsyXTtcclxuICAgIG91dFszXSA9IGFbM10gLyBiWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQuZGl2ID0gdmVjNC5kaXZpZGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubWluID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XHJcbiAgICBvdXRbM10gPSBNYXRoLm1pbihhWzNdLCBiWzNdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcclxuICAgIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xyXG4gICAgb3V0WzJdID0gTWF0aC5tYXgoYVsyXSwgYlsyXSk7XHJcbiAgICBvdXRbM10gPSBNYXRoLm1heChhWzNdLCBiWzNdKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogU2NhbGVzIGEgdmVjNCBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgb3V0WzBdID0gYVswXSAqIGI7XHJcbiAgICBvdXRbMV0gPSBhWzFdICogYjtcclxuICAgIG91dFsyXSA9IGFbMl0gKiBiO1xyXG4gICAgb3V0WzNdID0gYVszXSAqIGI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cclxudmVjNC5zY2FsZUFuZEFkZCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgc2NhbGUpIHtcclxuICAgIG91dFswXSA9IGFbMF0gKyAoYlswXSAqIHNjYWxlKTtcclxuICAgIG91dFsxXSA9IGFbMV0gKyAoYlsxXSAqIHNjYWxlKTtcclxuICAgIG91dFsyXSA9IGFbMl0gKyAoYlsyXSAqIHNjYWxlKTtcclxuICAgIG91dFszXSA9IGFbM10gKyAoYlszXSAqIHNjYWxlKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXHJcbnZlYzQuZGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl0sXHJcbiAgICAgICAgdyA9IGJbM10gLSBhWzNdO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCh4KnggKyB5KnkgKyB6KnogKyB3KncpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5kaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmRpc3QgPSB2ZWM0LmRpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cclxudmVjNC5zcXVhcmVkRGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICB2YXIgeCA9IGJbMF0gLSBhWzBdLFxyXG4gICAgICAgIHkgPSBiWzFdIC0gYVsxXSxcclxuICAgICAgICB6ID0gYlsyXSAtIGFbMl0sXHJcbiAgICAgICAgdyA9IGJbM10gLSBhWzNdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeSArIHoqeiArIHcqdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnZlYzQuc3FyRGlzdCA9IHZlYzQuc3F1YXJlZERpc3RhbmNlO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWM0Lmxlbmd0aCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IGFbM107XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSArIHoqeiArIHcqdyk7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0Lmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmxlbiA9IHZlYzQubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xyXG52ZWM0LnNxdWFyZWRMZW5ndGggPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIHggPSBhWzBdLFxyXG4gICAgICAgIHkgPSBhWzFdLFxyXG4gICAgICAgIHogPSBhWzJdLFxyXG4gICAgICAgIHcgPSBhWzNdO1xyXG4gICAgcmV0dXJuIHgqeCArIHkqeSArIHoqeiArIHcqdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LnNxckxlbiA9IHZlYzQuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0Lm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gLWFbMF07XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIG91dFsyXSA9IC1hWzJdO1xyXG4gICAgb3V0WzNdID0gLWFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGludmVyc2Ugb2YgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gaW52ZXJ0XHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQuaW52ZXJzZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gIG91dFswXSA9IDEuMCAvIGFbMF07XHJcbiAgb3V0WzFdID0gMS4wIC8gYVsxXTtcclxuICBvdXRbMl0gPSAxLjAgLyBhWzJdO1xyXG4gIG91dFszXSA9IDEuMCAvIGFbM107XHJcbiAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQubm9ybWFsaXplID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgeCA9IGFbMF0sXHJcbiAgICAgICAgeSA9IGFbMV0sXHJcbiAgICAgICAgeiA9IGFbMl0sXHJcbiAgICAgICAgdyA9IGFbM107XHJcbiAgICB2YXIgbGVuID0geCp4ICsgeSp5ICsgeip6ICsgdyp3O1xyXG4gICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgICAgb3V0WzBdID0gYVswXSAqIGxlbjtcclxuICAgICAgICBvdXRbMV0gPSBhWzFdICogbGVuO1xyXG4gICAgICAgIG91dFsyXSA9IGFbMl0gKiBsZW47XHJcbiAgICAgICAgb3V0WzNdID0gYVszXSAqIGxlbjtcclxuICAgIH1cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqL1xyXG52ZWM0LmRvdCA9IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICByZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdICsgYVszXSAqIGJbM107XHJcbn07XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xyXG52ZWM0LmxlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2YXIgYXggPSBhWzBdLFxyXG4gICAgICAgIGF5ID0gYVsxXSxcclxuICAgICAgICBheiA9IGFbMl0sXHJcbiAgICAgICAgYXcgPSBhWzNdO1xyXG4gICAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XHJcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYlsxXSAtIGF5KTtcclxuICAgIG91dFsyXSA9IGF6ICsgdCAqIChiWzJdIC0gYXopO1xyXG4gICAgb3V0WzNdID0gYXcgKyB0ICogKGJbM10gLSBhdyk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQucmFuZG9tID0gZnVuY3Rpb24gKG91dCwgc2NhbGUpIHtcclxuICAgIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xyXG5cclxuICAgIC8vVE9ETzogVGhpcyBpcyBhIHByZXR0eSBhd2Z1bCB3YXkgb2YgZG9pbmcgdGhpcy4gRmluZCBzb21ldGhpbmcgYmV0dGVyLlxyXG4gICAgb3V0WzBdID0gR0xNQVRfUkFORE9NKCk7XHJcbiAgICBvdXRbMV0gPSBHTE1BVF9SQU5ET00oKTtcclxuICAgIG91dFsyXSA9IEdMTUFUX1JBTkRPTSgpO1xyXG4gICAgb3V0WzNdID0gR0xNQVRfUkFORE9NKCk7XHJcbiAgICB2ZWM0Lm5vcm1hbGl6ZShvdXQsIG91dCk7XHJcbiAgICB2ZWM0LnNjYWxlKG91dCwgb3V0LCBzY2FsZSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIG1hdDQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sIHcgPSBhWzNdO1xyXG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzRdICogeSArIG1bOF0gKiB6ICsgbVsxMl0gKiB3O1xyXG4gICAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzVdICogeSArIG1bOV0gKiB6ICsgbVsxM10gKiB3O1xyXG4gICAgb3V0WzJdID0gbVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdICogdztcclxuICAgIG91dFszXSA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XSAqIHc7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBxdWF0ZXJuaW9uIHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXHJcbnZlYzQudHJhbnNmb3JtUXVhdCA9IGZ1bmN0aW9uKG91dCwgYSwgcSkge1xyXG4gICAgdmFyIHggPSBhWzBdLCB5ID0gYVsxXSwgeiA9IGFbMl0sXHJcbiAgICAgICAgcXggPSBxWzBdLCBxeSA9IHFbMV0sIHF6ID0gcVsyXSwgcXcgPSBxWzNdLFxyXG5cclxuICAgICAgICAvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY1xyXG4gICAgICAgIGl4ID0gcXcgKiB4ICsgcXkgKiB6IC0gcXogKiB5LFxyXG4gICAgICAgIGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6LFxyXG4gICAgICAgIGl6ID0gcXcgKiB6ICsgcXggKiB5IC0gcXkgKiB4LFxyXG4gICAgICAgIGl3ID0gLXF4ICogeCAtIHF5ICogeSAtIHF6ICogejtcclxuXHJcbiAgICAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XHJcbiAgICBvdXRbMF0gPSBpeCAqIHF3ICsgaXcgKiAtcXggKyBpeSAqIC1xeiAtIGl6ICogLXF5O1xyXG4gICAgb3V0WzFdID0gaXkgKiBxdyArIGl3ICogLXF5ICsgaXogKiAtcXggLSBpeCAqIC1xejtcclxuICAgIG91dFsyXSA9IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXg7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWM0cy5cclxuICpcclxuICogQHBhcmFtIHtBcnJheX0gYSB0aGUgYXJyYXkgb2YgdmVjdG9ycyB0byBpdGVyYXRlIG92ZXJcclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWM0LiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcclxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnQgTnVtYmVyIG9mIHZlYzRzIHRvIGl0ZXJhdGUgb3Zlci4gSWYgMCBpdGVyYXRlcyBvdmVyIGVudGlyZSBhcnJheVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxyXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG52ZWM0LmZvckVhY2ggPSAoZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgdmVjID0gdmVjNC5jcmVhdGUoKTtcclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24oYSwgc3RyaWRlLCBvZmZzZXQsIGNvdW50LCBmbiwgYXJnKSB7XHJcbiAgICAgICAgdmFyIGksIGw7XHJcbiAgICAgICAgaWYoIXN0cmlkZSkge1xyXG4gICAgICAgICAgICBzdHJpZGUgPSA0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIW9mZnNldCkge1xyXG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoY291bnQpIHtcclxuICAgICAgICAgICAgbCA9IE1hdGgubWluKChjb3VudCAqIHN0cmlkZSkgKyBvZmZzZXQsIGEubGVuZ3RoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsID0gYS5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7XHJcbiAgICAgICAgICAgIHZlY1swXSA9IGFbaV07IHZlY1sxXSA9IGFbaSsxXTsgdmVjWzJdID0gYVtpKzJdOyB2ZWNbM10gPSBhW2krM107XHJcbiAgICAgICAgICAgIGZuKHZlYywgdmVjLCBhcmcpO1xyXG4gICAgICAgICAgICBhW2ldID0gdmVjWzBdOyBhW2krMV0gPSB2ZWNbMV07IGFbaSsyXSA9IHZlY1syXTsgYVtpKzNdID0gdmVjWzNdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdmVjNDsiLCJcclxuLyogQ29weXJpZ2h0IChjKSAyMDEzLCBCcmFuZG9uIEpvbmVzLCBDb2xpbiBNYWNLZW56aWUgSVYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcblxyXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxyXG5hcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XHJcblxyXG4gICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXHJcbiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcclxuICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cclxuICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxyXG5cclxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EXHJcbkFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcclxuRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1JcclxuQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXHJcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcclxuTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OXHJcbkFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXHJcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXHJcblNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqL1xyXG5cclxuaW1wb3J0IHsgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgM3gzIE1hdHJpeFxyXG4gKiBAbmFtZSBtYXQzXHJcbiAqL1xyXG5cclxudmFyIG1hdDMgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDNcclxuICpcclxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcclxuICovXHJcbm1hdDMuY3JlYXRlID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoOSk7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMTtcclxuICAgIG91dFs1XSA9IDA7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcGllcyB0aGUgdXBwZXItbGVmdCAzeDMgdmFsdWVzIGludG8gdGhlIGdpdmVuIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgM3gzIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgICB0aGUgc291cmNlIDR4NCBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5mcm9tTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVs0XTtcclxuICAgIG91dFs0XSA9IGFbNV07XHJcbiAgICBvdXRbNV0gPSBhWzZdO1xyXG4gICAgb3V0WzZdID0gYVs4XTtcclxuICAgIG91dFs3XSA9IGFbOV07XHJcbiAgICBvdXRbOF0gPSBhWzEwXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcclxuICovXHJcbm1hdDMuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoOSk7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQzIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICBvdXRbNV0gPSBhWzVdO1xyXG4gICAgb3V0WzZdID0gYVs2XTtcclxuICAgIG91dFs3XSA9IGFbN107XHJcbiAgICBvdXRbOF0gPSBhWzhdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgYSBtYXQzIHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDE7XHJcbiAgICBvdXRbNV0gPSAwO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXHJcbiAgICBpZiAob3V0ID09PSBhKSB7XHJcbiAgICAgICAgdmFyIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGExMiA9IGFbNV07XHJcbiAgICAgICAgb3V0WzFdID0gYVszXTtcclxuICAgICAgICBvdXRbMl0gPSBhWzZdO1xyXG4gICAgICAgIG91dFszXSA9IGEwMTtcclxuICAgICAgICBvdXRbNV0gPSBhWzddO1xyXG4gICAgICAgIG91dFs2XSA9IGEwMjtcclxuICAgICAgICBvdXRbN10gPSBhMTI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG91dFswXSA9IGFbMF07XHJcbiAgICAgICAgb3V0WzFdID0gYVszXTtcclxuICAgICAgICBvdXRbMl0gPSBhWzZdO1xyXG4gICAgICAgIG91dFszXSA9IGFbMV07XHJcbiAgICAgICAgb3V0WzRdID0gYVs0XTtcclxuICAgICAgICBvdXRbNV0gPSBhWzddO1xyXG4gICAgICAgIG91dFs2XSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzddID0gYVs1XTtcclxuICAgICAgICBvdXRbOF0gPSBhWzhdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF0sXHJcblxyXG4gICAgICAgIGIwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMSxcclxuICAgICAgICBiMTEgPSAtYTIyICogYTEwICsgYTEyICogYTIwLFxyXG4gICAgICAgIGIyMSA9IGEyMSAqIGExMCAtIGExMSAqIGEyMCxcclxuXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxyXG4gICAgICAgIGRldCA9IGEwMCAqIGIwMSArIGEwMSAqIGIxMSArIGEwMiAqIGIyMTtcclxuXHJcbiAgICBpZiAoIWRldCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuICAgIG91dFswXSA9IGIwMSAqIGRldDtcclxuICAgIG91dFsxXSA9ICgtYTIyICogYTAxICsgYTAyICogYTIxKSAqIGRldDtcclxuICAgIG91dFsyXSA9IChhMTIgKiBhMDEgLSBhMDIgKiBhMTEpICogZGV0O1xyXG4gICAgb3V0WzNdID0gYjExICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGEyMiAqIGEwMCAtIGEwMiAqIGEyMCkgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoLWExMiAqIGEwMCArIGEwMiAqIGExMCkgKiBkZXQ7XHJcbiAgICBvdXRbNl0gPSBiMjEgKiBkZXQ7XHJcbiAgICBvdXRbN10gPSAoLWEyMSAqIGEwMCArIGEwMSAqIGEyMCkgKiBkZXQ7XHJcbiAgICBvdXRbOF0gPSAoYTExICogYTAwIC0gYTAxICogYTEwKSAqIGRldDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYWRqdWdhdGUgb2YgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xyXG5tYXQzLmFkam9pbnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XTtcclxuXHJcbiAgICBvdXRbMF0gPSAoYTExICogYTIyIC0gYTEyICogYTIxKTtcclxuICAgIG91dFsxXSA9IChhMDIgKiBhMjEgLSBhMDEgKiBhMjIpO1xyXG4gICAgb3V0WzJdID0gKGEwMSAqIGExMiAtIGEwMiAqIGExMSk7XHJcbiAgICBvdXRbM10gPSAoYTEyICogYTIwIC0gYTEwICogYTIyKTtcclxuICAgIG91dFs0XSA9IChhMDAgKiBhMjIgLSBhMDIgKiBhMjApO1xyXG4gICAgb3V0WzVdID0gKGEwMiAqIGExMCAtIGEwMCAqIGExMik7XHJcbiAgICBvdXRbNl0gPSAoYTEwICogYTIxIC0gYTExICogYTIwKTtcclxuICAgIG91dFs3XSA9IChhMDEgKiBhMjAgLSBhMDAgKiBhMjEpO1xyXG4gICAgb3V0WzhdID0gKGEwMCAqIGExMSAtIGEwMSAqIGExMCk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cclxubWF0My5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF07XHJcblxyXG4gICAgcmV0dXJuIGEwMCAqIChhMjIgKiBhMTEgLSBhMTIgKiBhMjEpICsgYTAxICogKC1hMjIgKiBhMTAgKyBhMTIgKiBhMjApICsgYTAyICogKGEyMSAqIGExMCAtIGExMSAqIGEyMCk7XHJcbn07XHJcblxyXG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0MydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXHJcbm1hdDMubXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSxcclxuICAgICAgICBhMTAgPSBhWzNdLCBhMTEgPSBhWzRdLCBhMTIgPSBhWzVdLFxyXG4gICAgICAgIGEyMCA9IGFbNl0sIGEyMSA9IGFbN10sIGEyMiA9IGFbOF0sXHJcblxyXG4gICAgICAgIGIwMCA9IGJbMF0sIGIwMSA9IGJbMV0sIGIwMiA9IGJbMl0sXHJcbiAgICAgICAgYjEwID0gYlszXSwgYjExID0gYls0XSwgYjEyID0gYls1XSxcclxuICAgICAgICBiMjAgPSBiWzZdLCBiMjEgPSBiWzddLCBiMjIgPSBiWzhdO1xyXG5cclxuICAgIG91dFswXSA9IGIwMCAqIGEwMCArIGIwMSAqIGExMCArIGIwMiAqIGEyMDtcclxuICAgIG91dFsxXSA9IGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMTtcclxuICAgIG91dFsyXSA9IGIwMCAqIGEwMiArIGIwMSAqIGExMiArIGIwMiAqIGEyMjtcclxuXHJcbiAgICBvdXRbM10gPSBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjA7XHJcbiAgICBvdXRbNF0gPSBiMTAgKiBhMDEgKyBiMTEgKiBhMTEgKyBiMTIgKiBhMjE7XHJcbiAgICBvdXRbNV0gPSBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjI7XHJcblxyXG4gICAgb3V0WzZdID0gYjIwICogYTAwICsgYjIxICogYTEwICsgYjIyICogYTIwO1xyXG4gICAgb3V0WzddID0gYjIwICogYTAxICsgYjIxICogYTExICsgYjIyICogYTIxO1xyXG4gICAgb3V0WzhdID0gYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDMubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxubWF0My5tdWwgPSBtYXQzLm11bHRpcGx5O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zbGF0ZSBhIG1hdDMgYnkgdGhlIGdpdmVuIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My50cmFuc2xhdGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcclxuICAgICAgICB4ID0gdlswXSwgeSA9IHZbMV07XHJcblxyXG4gICAgb3V0WzBdID0gYTAwO1xyXG4gICAgb3V0WzFdID0gYTAxO1xyXG4gICAgb3V0WzJdID0gYTAyO1xyXG5cclxuICAgIG91dFszXSA9IGExMDtcclxuICAgIG91dFs0XSA9IGExMTtcclxuICAgIG91dFs1XSA9IGExMjtcclxuXHJcbiAgICBvdXRbNl0gPSB4ICogYTAwICsgeSAqIGExMCArIGEyMDtcclxuICAgIG91dFs3XSA9IHggKiBhMDEgKyB5ICogYTExICsgYTIxO1xyXG4gICAgb3V0WzhdID0geCAqIGEwMiArIHkgKiBhMTIgKyBhMjI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXQzIGJ5IHRoZSBnaXZlbiBhbmdsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cclxubWF0My5yb3RhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcclxuICAgIHZhciBhMDAgPSBhWzBdLCBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGExMCA9IGFbM10sIGExMSA9IGFbNF0sIGExMiA9IGFbNV0sXHJcbiAgICAgICAgYTIwID0gYVs2XSwgYTIxID0gYVs3XSwgYTIyID0gYVs4XSxcclxuXHJcbiAgICAgICAgcyA9IE1hdGguc2luKHJhZCksXHJcbiAgICAgICAgYyA9IE1hdGguY29zKHJhZCk7XHJcblxyXG4gICAgb3V0WzBdID0gYyAqIGEwMCArIHMgKiBhMTA7XHJcbiAgICBvdXRbMV0gPSBjICogYTAxICsgcyAqIGExMTtcclxuICAgIG91dFsyXSA9IGMgKiBhMDIgKyBzICogYTEyO1xyXG5cclxuICAgIG91dFszXSA9IGMgKiBhMTAgLSBzICogYTAwO1xyXG4gICAgb3V0WzRdID0gYyAqIGExMSAtIHMgKiBhMDE7XHJcbiAgICBvdXRbNV0gPSBjICogYTEyIC0gcyAqIGEwMjtcclxuXHJcbiAgICBvdXRbNl0gPSBhMjA7XHJcbiAgICBvdXRbN10gPSBhMjE7XHJcbiAgICBvdXRbOF0gPSBhMjI7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MyBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKiovXHJcbm1hdDMuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciB4ID0gdlswXSwgeSA9IHZbMV07XHJcblxyXG4gICAgb3V0WzBdID0geCAqIGFbMF07XHJcbiAgICBvdXRbMV0gPSB4ICogYVsxXTtcclxuICAgIG91dFsyXSA9IHggKiBhWzJdO1xyXG5cclxuICAgIG91dFszXSA9IHkgKiBhWzNdO1xyXG4gICAgb3V0WzRdID0geSAqIGFbNF07XHJcbiAgICBvdXRbNV0gPSB5ICogYVs1XTtcclxuXHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvcGllcyB0aGUgdmFsdWVzIGZyb20gYSBtYXQyZCBpbnRvIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gY29weVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqKi9cclxubWF0My5mcm9tTWF0MmQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gMDtcclxuXHJcbiAgICBvdXRbM10gPSBhWzJdO1xyXG4gICAgb3V0WzRdID0gYVszXTtcclxuICAgIG91dFs1XSA9IDA7XHJcblxyXG4gICAgb3V0WzZdID0gYVs0XTtcclxuICAgIG91dFs3XSA9IGFbNV07XHJcbiAgICBvdXRbOF0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4qIENhbGN1bGF0ZXMgYSAzeDMgbWF0cml4IGZyb20gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuKlxyXG4qIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuKiBAcGFyYW0ge3F1YXR9IHEgUXVhdGVybmlvbiB0byBjcmVhdGUgbWF0cml4IGZyb21cclxuKlxyXG4qIEByZXR1cm5zIHttYXQzfSBvdXRcclxuKi9cclxubWF0My5mcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEpIHtcclxuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXSxcclxuICAgICAgICB4MiA9IHggKyB4LFxyXG4gICAgICAgIHkyID0geSArIHksXHJcbiAgICAgICAgejIgPSB6ICsgeixcclxuXHJcbiAgICAgICAgeHggPSB4ICogeDIsXHJcbiAgICAgICAgeXggPSB5ICogeDIsXHJcbiAgICAgICAgeXkgPSB5ICogeTIsXHJcbiAgICAgICAgenggPSB6ICogeDIsXHJcbiAgICAgICAgenkgPSB6ICogeTIsXHJcbiAgICAgICAgenogPSB6ICogejIsXHJcbiAgICAgICAgd3ggPSB3ICogeDIsXHJcbiAgICAgICAgd3kgPSB3ICogeTIsXHJcbiAgICAgICAgd3ogPSB3ICogejI7XHJcblxyXG4gICAgb3V0WzBdID0gMSAtIHl5IC0geno7XHJcbiAgICBvdXRbM10gPSB5eCAtIHd6O1xyXG4gICAgb3V0WzZdID0genggKyB3eTtcclxuXHJcbiAgICBvdXRbMV0gPSB5eCArIHd6O1xyXG4gICAgb3V0WzRdID0gMSAtIHh4IC0geno7XHJcbiAgICBvdXRbN10gPSB6eSAtIHd4O1xyXG5cclxuICAgIG91dFsyXSA9IHp4IC0gd3k7XHJcbiAgICBvdXRbNV0gPSB6eSArIHd4O1xyXG4gICAgb3V0WzhdID0gMSAtIHh4IC0geXk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4qIENhbGN1bGF0ZXMgYSAzeDMgbm9ybWFsIG1hdHJpeCAodHJhbnNwb3NlIGludmVyc2UpIGZyb20gdGhlIDR4NCBtYXRyaXhcclxuKlxyXG4qIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuKiBAcGFyYW0ge21hdDR9IGEgTWF0NCB0byBkZXJpdmUgdGhlIG5vcm1hbCBtYXRyaXggZnJvbVxyXG4qXHJcbiogQHJldHVybnMge21hdDN9IG91dFxyXG4qL1xyXG5tYXQzLm5vcm1hbEZyb21NYXQ0ID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM10sXHJcbiAgICAgICAgYTEwID0gYVs0XSwgYTExID0gYVs1XSwgYTEyID0gYVs2XSwgYTEzID0gYVs3XSxcclxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSwgYTIzID0gYVsxMV0sXHJcbiAgICAgICAgYTMwID0gYVsxMl0sIGEzMSA9IGFbMTNdLCBhMzIgPSBhWzE0XSwgYTMzID0gYVsxNV0sXHJcblxyXG4gICAgICAgIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMCxcclxuICAgICAgICBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTAsXHJcbiAgICAgICAgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwLFxyXG4gICAgICAgIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMSxcclxuICAgICAgICBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTEsXHJcbiAgICAgICAgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyLFxyXG4gICAgICAgIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMCxcclxuICAgICAgICBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzAsXHJcbiAgICAgICAgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwLFxyXG4gICAgICAgIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMSxcclxuICAgICAgICBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzEsXHJcbiAgICAgICAgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyLFxyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XHJcbiAgICAgICAgZGV0ID0gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xyXG5cclxuICAgIGlmICghZGV0KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBkZXQgPSAxLjAgLyBkZXQ7XHJcblxyXG4gICAgb3V0WzBdID0gKGExMSAqIGIxMSAtIGExMiAqIGIxMCArIGExMyAqIGIwOSkgKiBkZXQ7XHJcbiAgICBvdXRbMV0gPSAoYTEyICogYjA4IC0gYTEwICogYjExIC0gYTEzICogYjA3KSAqIGRldDtcclxuICAgIG91dFsyXSA9IChhMTAgKiBiMTAgLSBhMTEgKiBiMDggKyBhMTMgKiBiMDYpICogZGV0O1xyXG5cclxuICAgIG91dFszXSA9IChhMDIgKiBiMTAgLSBhMDEgKiBiMTEgLSBhMDMgKiBiMDkpICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGEwMCAqIGIxMSAtIGEwMiAqIGIwOCArIGEwMyAqIGIwNykgKiBkZXQ7XHJcbiAgICBvdXRbNV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcclxuXHJcbiAgICBvdXRbNl0gPSAoYTMxICogYjA1IC0gYTMyICogYjA0ICsgYTMzICogYjAzKSAqIGRldDtcclxuICAgIG91dFs3XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xyXG4gICAgb3V0WzhdID0gKGEzMCAqIGIwNCAtIGEzMSAqIGIwMiArIGEzMyAqIGIwMCkgKiBkZXQ7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXHJcbm1hdDMuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpICsgTWF0aC5wb3coYVs0XSwgMikgKyBNYXRoLnBvdyhhWzVdLCAyKSArIE1hdGgucG93KGFbNl0sIDIpICsgTWF0aC5wb3coYVs3XSwgMikgKyBNYXRoLnBvdyhhWzhdLCAyKSkpXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbWF0MzsiLCJcclxuXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB7IEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vdmVjMyc7XHJcbmltcG9ydCB2ZWM0IGZyb20gJy4vdmVjNCc7XHJcbmltcG9ydCBtYXQzIGZyb20gJy4vbWF0Myc7XHJcblxyXG5cclxuLyoqXHJcbiAqIEBjbGFzcyBRdWF0ZXJuaW9uXHJcbiAqIEBuYW1lIHF1YXRcclxuICovXHJcblxyXG52YXIgcXVhdCA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgcXVhdFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gYSBuZXcgcXVhdGVybmlvblxyXG4gKi9cclxucXVhdC5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg0KTtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldHMgYSBxdWF0ZXJuaW9uIHRvIHJlcHJlc2VudCB0aGUgc2hvcnRlc3Qgcm90YXRpb24gZnJvbSBvbmVcclxuICogdmVjdG9yIHRvIGFub3RoZXIuXHJcbiAqXHJcbiAqIEJvdGggdmVjdG9ycyBhcmUgYXNzdW1lZCB0byBiZSB1bml0IGxlbmd0aC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uLlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGluaXRpYWwgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgZGVzdGluYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQucm90YXRpb25UbyA9IChmdW5jdGlvbigpIHtcclxuICAgIHZhciB0bXB2ZWMzID0gdmVjMy5jcmVhdGUoKTtcclxuICAgIHZhciB4VW5pdFZlYzMgPSB2ZWMzLmZyb21WYWx1ZXMoMSwwLDApO1xyXG4gICAgdmFyIHlVbml0VmVjMyA9IHZlYzMuZnJvbVZhbHVlcygwLDEsMCk7XHJcblxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgICAgIHZhciBkb3QgPSB2ZWMzLmRvdChhLCBiKTtcclxuICAgICAgICBpZiAoZG90IDwgLTAuOTk5OTk5KSB7XHJcbiAgICAgICAgICAgIHZlYzMuY3Jvc3ModG1wdmVjMywgeFVuaXRWZWMzLCBhKTtcclxuICAgICAgICAgICAgaWYgKHZlYzMubGVuZ3RoKHRtcHZlYzMpIDwgMC4wMDAwMDEpXHJcbiAgICAgICAgICAgICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIHlVbml0VmVjMywgYSk7XHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHRtcHZlYzMsIHRtcHZlYzMpO1xyXG4gICAgICAgICAgICBxdWF0LnNldEF4aXNBbmdsZShvdXQsIHRtcHZlYzMsIE1hdGguUEkpO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZG90ID4gMC45OTk5OTkpIHtcclxuICAgICAgICAgICAgb3V0WzBdID0gMDtcclxuICAgICAgICAgICAgb3V0WzFdID0gMDtcclxuICAgICAgICAgICAgb3V0WzJdID0gMDtcclxuICAgICAgICAgICAgb3V0WzNdID0gMTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIGEsIGIpO1xyXG4gICAgICAgICAgICBvdXRbMF0gPSB0bXB2ZWMzWzBdO1xyXG4gICAgICAgICAgICBvdXRbMV0gPSB0bXB2ZWMzWzFdO1xyXG4gICAgICAgICAgICBvdXRbMl0gPSB0bXB2ZWMzWzJdO1xyXG4gICAgICAgICAgICBvdXRbM10gPSAxICsgZG90O1xyXG4gICAgICAgICAgICByZXR1cm4gcXVhdC5ub3JtYWxpemUob3V0LCBvdXQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pKCk7XHJcblxyXG4vKipcclxuICogU2V0cyB0aGUgc3BlY2lmaWVkIHF1YXRlcm5pb24gd2l0aCB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW5cclxuICogYXhlcy4gRWFjaCBheGlzIGlzIGEgdmVjMyBhbmQgaXMgZXhwZWN0ZWQgdG8gYmUgdW5pdCBsZW5ndGggYW5kXHJcbiAqIHBlcnBlbmRpY3VsYXIgdG8gYWxsIG90aGVyIHNwZWNpZmllZCBheGVzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IHZpZXcgIHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSB2aWV3aW5nIGRpcmVjdGlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHJpZ2h0IHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBsb2NhbCBcInJpZ2h0XCIgZGlyZWN0aW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gdXAgICAgdGhlIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGxvY2FsIFwidXBcIiBkaXJlY3Rpb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5zZXRBeGVzID0gKGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG1hdHIgPSBtYXQzLmNyZWF0ZSgpO1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbihvdXQsIHZpZXcsIHJpZ2h0LCB1cCkge1xyXG4gICAgICAgIG1hdHJbMF0gPSByaWdodFswXTtcclxuICAgICAgICBtYXRyWzNdID0gcmlnaHRbMV07XHJcbiAgICAgICAgbWF0cls2XSA9IHJpZ2h0WzJdO1xyXG5cclxuICAgICAgICBtYXRyWzFdID0gdXBbMF07XHJcbiAgICAgICAgbWF0cls0XSA9IHVwWzFdO1xyXG4gICAgICAgIG1hdHJbN10gPSB1cFsyXTtcclxuXHJcbiAgICAgICAgbWF0clsyXSA9IC12aWV3WzBdO1xyXG4gICAgICAgIG1hdHJbNV0gPSAtdmlld1sxXTtcclxuICAgICAgICBtYXRyWzhdID0gLXZpZXdbMl07XHJcblxyXG4gICAgICAgIHJldHVybiBxdWF0Lm5vcm1hbGl6ZShvdXQsIHF1YXQuZnJvbU1hdDMob3V0LCBtYXRyKSk7XHJcbiAgICB9O1xyXG59KSgpO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgcXVhdCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXRlcm5pb24gdG8gY2xvbmVcclxuICogQHJldHVybnMge3F1YXR9IGEgbmV3IHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmNsb25lID0gdmVjNC5jbG9uZTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHF1YXQgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBhIG5ldyBxdWF0ZXJuaW9uXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5mcm9tVmFsdWVzID0gdmVjNC5mcm9tVmFsdWVzO1xyXG5cclxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBxdWF0IHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgc291cmNlIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuY29weSA9IHZlYzQuY29weTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBxdWF0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LnNldCA9IHZlYzQuc2V0O1xyXG5cclxuLyoqXHJcbiAqIFNldCBhIHF1YXQgdG8gdGhlIGlkZW50aXR5IHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcclxuICAgIG91dFswXSA9IDA7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldHMgYSBxdWF0IGZyb20gdGhlIGdpdmVuIGFuZ2xlIGFuZCByb3RhdGlvbiBheGlzLFxyXG4gKiB0aGVuIHJldHVybnMgaXQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IGF4aXMgdGhlIGF4aXMgYXJvdW5kIHdoaWNoIHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSBpbiByYWRpYW5zXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICoqL1xyXG5xdWF0LnNldEF4aXNBbmdsZSA9IGZ1bmN0aW9uKG91dCwgYXhpcywgcmFkKSB7XHJcbiAgICByYWQgPSByYWQgKiAwLjU7XHJcbiAgICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XHJcbiAgICBvdXRbMF0gPSBzICogYXhpc1swXTtcclxuICAgIG91dFsxXSA9IHMgKiBheGlzWzFdO1xyXG4gICAgb3V0WzJdID0gcyAqIGF4aXNbMl07XHJcbiAgICBvdXRbM10gPSBNYXRoLmNvcyhyYWQpO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiB6aCA6IOe7leWNleS9jeWQkemHj+iHqui9rFxyXG4gKiBAcGFyYW0gb3V0ICB7cXVhdH1cclxuICogQHBhcmFtIHF1YXQyICB7cXVhdH1cclxuICogQHBhcmFtIGF4aXMgICB7dmVjM31cclxuICogQHBhcmFtIHJhZCAgICB7TnVtYmVyfVxyXG4gKi9cclxuXHJcbnF1YXQucm90YXRlQXhpcyA9IGZ1bmN0aW9uIChvdXQscXVhdDIsYXhpcyxyYWQpIHtcclxuICAgIHZlYzMubm9ybWFsaXplKGF4aXMsYXhpcyk7XHJcbiAgICBxdWF0LnNldEF4aXNBbmdsZShxdWF0MixheGlzLHJhZCk7XHJcbiAgICBxdWF0Lm11bHRpcGx5KG91dCxvdXQscXVhdDIpO1xyXG59XHJcblxyXG4vKipcclxuICogQWRkcyB0d28gcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5hZGQgPSB2ZWM0LmFkZDtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQubXVsdGlwbHkgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZhciBheCA9IGFbMF0sIGF5ID0gYVsxXSwgYXogPSBhWzJdLCBhdyA9IGFbM10sXHJcbiAgICAgICAgYnggPSBiWzBdLCBieSA9IGJbMV0sIGJ6ID0gYlsyXSwgYncgPSBiWzNdO1xyXG5cclxuICAgIG91dFswXSA9IGF4ICogYncgKyBhdyAqIGJ4ICsgYXkgKiBieiAtIGF6ICogYnk7XHJcbiAgICBvdXRbMV0gPSBheSAqIGJ3ICsgYXcgKiBieSArIGF6ICogYnggLSBheCAqIGJ6O1xyXG4gICAgb3V0WzJdID0gYXogKiBidyArIGF3ICogYnogKyBheCAqIGJ5IC0gYXkgKiBieDtcclxuICAgIG91dFszXSA9IGF3ICogYncgLSBheCAqIGJ4IC0gYXkgKiBieSAtIGF6ICogYno7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0Lm11bCA9IHF1YXQubXVsdGlwbHk7XHJcblxyXG4vKipcclxuICogU2NhbGVzIGEgcXVhdCBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuc2NhbGUgPSB2ZWM0LnNjYWxlO1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBxdWF0ZXJuaW9uIGJ5IHRoZSBnaXZlbiBhbmdsZSBhYm91dCB0aGUgWCBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHF1YXQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgYW5nbGUgKGluIHJhZGlhbnMpIHRvIHJvdGF0ZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xyXG5xdWF0LnJvdGF0ZVggPSBmdW5jdGlvbiAob3V0LHJhZCkge1xyXG4gICAgdmFyIHF1YXQyID1bMCwwLDAsMV07XHJcbiAgICB2YXIgYXhpcyA9IFsxLDAsMF07XHJcbiAgICBxdWF0LnJvdGF0ZUF4aXMob3V0LHF1YXQyLGF4aXMscmFkKTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIHF1YXRlcm5pb24gYnkgdGhlIGdpdmVuIGFuZ2xlIGFib3V0IHRoZSBZIGF4aXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgcXVhdCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byByb3RhdGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBhbmdsZSAoaW4gcmFkaWFucykgdG8gcm90YXRlXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQucm90YXRlWSA9IGZ1bmN0aW9uIChvdXQscmFkKSB7XHJcbiAgICB2YXIgcXVhdDIgPVswLDAsMCwxXTtcclxuICAgIHZhciBheGlzID0gWzAsMSwwXTtcclxuICAgIHF1YXQucm90YXRlQXhpcyhvdXQscXVhdDIsYXhpcyxyYWQpO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgcXVhdGVybmlvbiBieSB0aGUgZ2l2ZW4gYW5nbGUgYWJvdXQgdGhlIFogYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCBxdWF0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGFuZ2xlIChpbiByYWRpYW5zKSB0byByb3RhdGVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cclxucXVhdC5yb3RhdGVaID0gZnVuY3Rpb24gKG91dCxyYWQpIHtcclxuICAgIHZhciBxdWF0MiA9WzAsMCwwLDFdO1xyXG4gICAgdmFyIGF4aXMgPSBbMCwwLDFdO1xyXG4gICAgcXVhdC5yb3RhdGVBeGlzKG91dCxxdWF0MixheGlzLHJhZCk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIFcgY29tcG9uZW50IG9mIGEgcXVhdCBmcm9tIHRoZSBYLCBZLCBhbmQgWiBjb21wb25lbnRzLlxyXG4gKiBBc3N1bWVzIHRoYXQgcXVhdGVybmlvbiBpcyAxIHVuaXQgaW4gbGVuZ3RoLlxyXG4gKiBBbnkgZXhpc3RpbmcgVyBjb21wb25lbnQgd2lsbCBiZSBpZ25vcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gY2FsY3VsYXRlIFcgY29tcG9uZW50IG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuY2FsY3VsYXRlVyA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIHZhciB4ID0gYVswXSwgeSA9IGFbMV0sIHogPSBhWzJdO1xyXG4gICAgb3V0WzBdID0geDtcclxuICAgIG91dFsxXSA9IHk7XHJcbiAgICBvdXRbMl0gPSB6O1xyXG4gICAgb3V0WzNdID0gTWF0aC5zcXJ0KE1hdGguYWJzKDEuMCAtIHggKiB4IC0geSAqIHkgLSB6ICogeikpO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmRvdCA9IHZlYzQuZG90O1xyXG5cclxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LmxlcnAgPSB2ZWM0LmxlcnA7XHJcblxyXG4vKipcclxuICogUGVyZm9ybXMgYSBzcGhlcmljYWwgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xyXG5xdWF0LnNsZXJwID0gZnVuY3Rpb24gKG91dCwgYSwgYiwgdCkge1xyXG4gICAgLy8gYmVuY2htYXJrczpcclxuICAgIC8vICAgIGh0dHA6Ly9qc3BlcmYuY29tL3F1YXRlcm5pb24tc2xlcnAtaW1wbGVtZW50YXRpb25zXHJcblxyXG4gICAgdmFyIGF4ID0gYVswXSwgYXkgPSBhWzFdLCBheiA9IGFbMl0sIGF3ID0gYVszXSxcclxuICAgICAgICBieCA9IGJbMF0sIGJ5ID0gYlsxXSwgYnogPSBiWzJdLCBidyA9IGJbM107XHJcblxyXG4gICAgdmFyICAgICAgICBvbWVnYSwgY29zb20sIHNpbm9tLCBzY2FsZTAsIHNjYWxlMTtcclxuXHJcbiAgICAvLyBjYWxjIGNvc2luZVxyXG4gICAgY29zb20gPSBheCAqIGJ4ICsgYXkgKiBieSArIGF6ICogYnogKyBhdyAqIGJ3O1xyXG4gICAgLy8gYWRqdXN0IHNpZ25zIChpZiBuZWNlc3NhcnkpXHJcbiAgICBpZiAoIGNvc29tIDwgMC4wICkge1xyXG4gICAgICAgIGNvc29tID0gLWNvc29tO1xyXG4gICAgICAgIGJ4ID0gLSBieDtcclxuICAgICAgICBieSA9IC0gYnk7XHJcbiAgICAgICAgYnogPSAtIGJ6O1xyXG4gICAgICAgIGJ3ID0gLSBidztcclxuICAgIH1cclxuICAgIC8vIGNhbGN1bGF0ZSBjb2VmZmljaWVudHNcclxuICAgIGlmICggKDEuMCAtIGNvc29tKSA+IDAuMDAwMDAxICkge1xyXG4gICAgICAgIC8vIHN0YW5kYXJkIGNhc2UgKHNsZXJwKVxyXG4gICAgICAgIG9tZWdhICA9IE1hdGguYWNvcyhjb3NvbSk7XHJcbiAgICAgICAgc2lub20gID0gTWF0aC5zaW4ob21lZ2EpO1xyXG4gICAgICAgIHNjYWxlMCA9IE1hdGguc2luKCgxLjAgLSB0KSAqIG9tZWdhKSAvIHNpbm9tO1xyXG4gICAgICAgIHNjYWxlMSA9IE1hdGguc2luKHQgKiBvbWVnYSkgLyBzaW5vbTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gXCJmcm9tXCIgYW5kIFwidG9cIiBxdWF0ZXJuaW9ucyBhcmUgdmVyeSBjbG9zZVxyXG4gICAgICAgIC8vICAuLi4gc28gd2UgY2FuIGRvIGEgbGluZWFyIGludGVycG9sYXRpb25cclxuICAgICAgICBzY2FsZTAgPSAxLjAgLSB0O1xyXG4gICAgICAgIHNjYWxlMSA9IHQ7XHJcbiAgICB9XHJcbiAgICAvLyBjYWxjdWxhdGUgZmluYWwgdmFsdWVzXHJcbiAgICBvdXRbMF0gPSBzY2FsZTAgKiBheCArIHNjYWxlMSAqIGJ4O1xyXG4gICAgb3V0WzFdID0gc2NhbGUwICogYXkgKyBzY2FsZTEgKiBieTtcclxuICAgIG91dFsyXSA9IHNjYWxlMCAqIGF6ICsgc2NhbGUxICogYno7XHJcbiAgICBvdXRbM10gPSBzY2FsZTAgKiBhdyArIHNjYWxlMSAqIGJ3O1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgaW52ZXJzZSBvZiBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBpbnZlcnNlIG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLFxyXG4gICAgICAgIGRvdCA9IGEwKmEwICsgYTEqYTEgKyBhMiphMiArIGEzKmEzLFxyXG4gICAgICAgIGludkRvdCA9IGRvdCA/IDEuMC9kb3QgOiAwO1xyXG5cclxuICAgIC8vIFRPRE86IFdvdWxkIGJlIGZhc3RlciB0byByZXR1cm4gWzAsMCwwLDBdIGltbWVkaWF0ZWx5IGlmIGRvdCA9PSAwXHJcblxyXG4gICAgb3V0WzBdID0gLWEwKmludkRvdDtcclxuICAgIG91dFsxXSA9IC1hMSppbnZEb3Q7XHJcbiAgICBvdXRbMl0gPSAtYTIqaW52RG90O1xyXG4gICAgb3V0WzNdID0gYTMqaW52RG90O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBjb25qdWdhdGUgb2YgYSBxdWF0XHJcbiAqIElmIHRoZSBxdWF0ZXJuaW9uIGlzIG5vcm1hbGl6ZWQsIHRoaXMgZnVuY3Rpb24gaXMgZmFzdGVyIHRoYW4gcXVhdC5pbnZlcnNlIGFuZCBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byBjYWxjdWxhdGUgY29uanVnYXRlIG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXHJcbnF1YXQuY29uanVnYXRlID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gLWFbMF07XHJcbiAgICBvdXRbMV0gPSAtYVsxXTtcclxuICAgIG91dFsyXSA9IC1hWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgbGVuZ3RoIG9mIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gbGVuZ3RoIG9mIGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0Lmxlbmd0aCA9IHZlYzQubGVuZ3RoO1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5sZW4gPSBxdWF0Lmxlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQuc3F1YXJlZExlbmd0aCA9IHZlYzQuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHF1YXQuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5xdWF0LnNxckxlbiA9IHF1YXQuc3F1YXJlZExlbmd0aDtcclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdGVybmlvbiB0byBub3JtYWxpemVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbnF1YXQubm9ybWFsaXplID0gdmVjNC5ub3JtYWxpemU7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIHF1YXRlcm5pb24gZnJvbSB0aGUgZ2l2ZW4gM3gzIHJvdGF0aW9uIG1hdHJpeC5cclxuICpcclxuICogTk9URTogVGhlIHJlc3VsdGFudCBxdWF0ZXJuaW9uIGlzIG5vdCBub3JtYWxpemVkLCBzbyB5b3Ugc2hvdWxkIGJlIHN1cmVcclxuICogdG8gcmVub3JtYWxpemUgdGhlIHF1YXRlcm5pb24geW91cnNlbGYgd2hlcmUgbmVjZXNzYXJ5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHttYXQzfSBtIHJvdGF0aW9uIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxucXVhdC5mcm9tTWF0MyA9IGZ1bmN0aW9uKG91dCwgbSkge1xyXG4gICAgLy8gQWxnb3JpdGhtIGluIEtlbiBTaG9lbWFrZSdzIGFydGljbGUgaW4gMTk4NyBTSUdHUkFQSCBjb3Vyc2Ugbm90ZXNcclxuICAgIC8vIGFydGljbGUgXCJRdWF0ZXJuaW9uIENhbGN1bHVzIGFuZCBGYXN0IEFuaW1hdGlvblwiLlxyXG4gICAgdmFyIGZUcmFjZSA9IG1bMF0gKyBtWzRdICsgbVs4XTtcclxuICAgIHZhciBmUm9vdDtcclxuXHJcbiAgICBpZiAoIGZUcmFjZSA+IDAuMCApIHtcclxuICAgICAgICAvLyB8d3wgPiAxLzIsIG1heSBhcyB3ZWxsIGNob29zZSB3ID4gMS8yXHJcbiAgICAgICAgZlJvb3QgPSBNYXRoLnNxcnQoZlRyYWNlICsgMS4wKTsgIC8vIDJ3XHJcbiAgICAgICAgb3V0WzNdID0gMC41ICogZlJvb3Q7XHJcbiAgICAgICAgZlJvb3QgPSAwLjUvZlJvb3Q7ICAvLyAxLyg0dylcclxuICAgICAgICBvdXRbMF0gPSAobVs1XS1tWzddKSpmUm9vdDtcclxuICAgICAgICBvdXRbMV0gPSAobVs2XS1tWzJdKSpmUm9vdDtcclxuICAgICAgICBvdXRbMl0gPSAobVsxXS1tWzNdKSpmUm9vdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gfHd8IDw9IDEvMlxyXG4gICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICBpZiAoIG1bNF0gPiBtWzBdIClcclxuICAgICAgICAgIGkgPSAxO1xyXG4gICAgICAgIGlmICggbVs4XSA+IG1baSozK2ldIClcclxuICAgICAgICAgIGkgPSAyO1xyXG4gICAgICAgIHZhciBqID0gKGkrMSklMztcclxuICAgICAgICB2YXIgayA9IChpKzIpJTM7XHJcblxyXG4gICAgICAgIGZSb290ID0gTWF0aC5zcXJ0KG1baSozK2ldLW1baiozK2pdLW1bayozK2tdICsgMS4wKTtcclxuICAgICAgICBvdXRbaV0gPSAwLjUgKiBmUm9vdDtcclxuICAgICAgICBmUm9vdCA9IDAuNSAvIGZSb290O1xyXG4gICAgICAgIG91dFszXSA9IChtW2oqMytrXSAtIG1bayozK2pdKSAqIGZSb290O1xyXG4gICAgICAgIG91dFtqXSA9IChtW2oqMytpXSArIG1baSozK2pdKSAqIGZSb290O1xyXG4gICAgICAgIG91dFtrXSA9IChtW2sqMytpXSArIG1baSozK2tdKSAqIGZSb290O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBxdWF0OyIsIi8vIFNhbXBsZXIgY2xpcCBpcyBlc3BlY2lhbGx5IGZvciB0aGUgYW5pbWF0aW9uIHNhbXBsZXIgaW4gZ2xURlxyXG4vLyBVc2UgVHlwZWQgQXJyYXkgY2FuIHJlZHVjZSBhIGxvdCBvZiBoZWFwIG1lbW9yeVxyXG5cclxuaW1wb3J0IHF1YXQgZnJvbSAnLi4vZ2xtYXRyaXgvcXVhdCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxuLy8gbGVycCBmdW5jdGlvbiB3aXRoIG9mZnNldCBpbiBsYXJnZSBhcnJheVxyXG5mdW5jdGlvbiB2ZWMzbGVycChvdXQsIGEsIGIsIHQsIG9hLCBvYikge1xyXG4gICAgdmFyIGF4ID0gYVtvYV07XHJcbiAgICB2YXIgYXkgPSBhW29hICsgMV07XHJcbiAgICB2YXIgYXogPSBhW29hICsgMl07XHJcbiAgICBvdXRbMF0gPSBheCArIHQgKiAoYltvYl0gLSBheCk7XHJcbiAgICBvdXRbMV0gPSBheSArIHQgKiAoYltvYiArIDFdIC0gYXkpO1xyXG4gICAgb3V0WzJdID0gYXogKyB0ICogKGJbb2IgKyAyXSAtIGF6KTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBxdWF0U2xlcnAob3V0LCBhLCBiLCB0LCBvYSwgb2IpIHtcclxuICAgIC8vIGJlbmNobWFya3M6XHJcbiAgICAvLyAgICBodHRwOi8vanNwZXJmLmNvbS9xdWF0ZXJuaW9uLXNsZXJwLWltcGxlbWVudGF0aW9uc1xyXG5cclxuICAgIHZhciBheCA9IGFbMCArIG9hXSwgYXkgPSBhWzEgKyBvYV0sIGF6ID0gYVsyICsgb2FdLCBhdyA9IGFbMyArIG9hXSxcclxuICAgICAgICBieCA9IGJbMCArIG9iXSwgYnkgPSBiWzEgKyBvYl0sIGJ6ID0gYlsyICsgb2JdLCBidyA9IGJbMyArIG9iXTtcclxuXHJcbiAgICB2YXIgb21lZ2EsIGNvc29tLCBzaW5vbSwgc2NhbGUwLCBzY2FsZTE7XHJcblxyXG4gICAgLy8gY2FsYyBjb3NpbmVcclxuICAgIGNvc29tID0gYXggKiBieCArIGF5ICogYnkgKyBheiAqIGJ6ICsgYXcgKiBidztcclxuICAgIC8vIGFkanVzdCBzaWducyAoaWYgbmVjZXNzYXJ5KVxyXG4gICAgaWYgKGNvc29tIDwgMC4wKSB7XHJcbiAgICAgICAgY29zb20gPSAtY29zb207XHJcbiAgICAgICAgYnggPSAtIGJ4O1xyXG4gICAgICAgIGJ5ID0gLSBieTtcclxuICAgICAgICBieiA9IC0gYno7XHJcbiAgICAgICAgYncgPSAtIGJ3O1xyXG4gICAgfVxyXG4gICAgLy8gY2FsY3VsYXRlIGNvZWZmaWNpZW50c1xyXG4gICAgaWYgKCgxLjAgLSBjb3NvbSkgPiAwLjAwMDAwMSkge1xyXG4gICAgICAgIC8vIHN0YW5kYXJkIGNhc2UgKHNsZXJwKVxyXG4gICAgICAgIG9tZWdhICA9IE1hdGguYWNvcyhjb3NvbSk7XHJcbiAgICAgICAgc2lub20gID0gTWF0aC5zaW4ob21lZ2EpO1xyXG4gICAgICAgIHNjYWxlMCA9IE1hdGguc2luKCgxLjAgLSB0KSAqIG9tZWdhKSAvIHNpbm9tO1xyXG4gICAgICAgIHNjYWxlMSA9IE1hdGguc2luKHQgKiBvbWVnYSkgLyBzaW5vbTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vICdmcm9tJyBhbmQgJ3RvJyBxdWF0ZXJuaW9ucyBhcmUgdmVyeSBjbG9zZVxyXG4gICAgICAgIC8vICAuLi4gc28gd2UgY2FuIGRvIGEgbGluZWFyIGludGVycG9sYXRpb25cclxuICAgICAgICBzY2FsZTAgPSAxLjAgLSB0O1xyXG4gICAgICAgIHNjYWxlMSA9IHQ7XHJcbiAgICB9XHJcbiAgICAvLyBjYWxjdWxhdGUgZmluYWwgdmFsdWVzXHJcbiAgICBvdXRbMF0gPSBzY2FsZTAgKiBheCArIHNjYWxlMSAqIGJ4O1xyXG4gICAgb3V0WzFdID0gc2NhbGUwICogYXkgKyBzY2FsZTEgKiBieTtcclxuICAgIG91dFsyXSA9IHNjYWxlMCAqIGF6ICsgc2NhbGUxICogYno7XHJcbiAgICBvdXRbM10gPSBzY2FsZTAgKiBhdyArIHNjYWxlMSAqIGJ3O1xyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTYW1wbGVyVHJhY2sgbWFuYWdlcyBgcG9zaXRpb25gLCBgcm90YXRpb25gLCBgc2NhbGVgIHRyYWNrcyBpbiBhbmltYXRpb24gb2Ygc2luZ2xlIHNjZW5lIG5vZGUuXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdIFRyYWNrIG5hbWVcclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtvcHRzLnRhcmdldF0gVGFyZ2V0IG5vZGUncyB0cmFuc2Zvcm0gd2lsbCB1cGRhdGVkIGF1dG9tYXRpY2FsbHlcclxuICovXHJcbnZhciBTYW1wbGVyVHJhY2sgPSBmdW5jdGlvbiAob3B0cykge1xyXG4gICAgb3B0cyA9IG9wdHMgfHwge307XHJcblxyXG4gICAgdGhpcy5uYW1lID0gb3B0cy5uYW1lIHx8ICcnO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgdGhpcy50YXJnZXQgPSBvcHRzLnRhcmdldCB8fCBudWxsO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7QXJyYXl9XHJcbiAgICAgKi9cclxuICAgIHRoaXMucG9zaXRpb24gPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGlvbiBpcyByZXByZXNlbnRlZCBieSBhIHF1YXRlcm5pb25cclxuICAgICAqIEB0eXBlIHtBcnJheX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5yb3RhdGlvbiA9IHF1YXQuY3JlYXRlKCk7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtBcnJheX1cclxuICAgICAqL1xyXG4gICAgdGhpcy5zY2FsZSA9IHZlYzMuZnJvbVZhbHVlcygxLCAxLCAxKTtcclxuXHJcbiAgICB0aGlzLmNoYW5uZWxzID0ge1xyXG4gICAgICAgIHRpbWU6IG51bGwsXHJcbiAgICAgICAgcG9zaXRpb246IG51bGwsXHJcbiAgICAgICAgcm90YXRpb246IG51bGwsXHJcbiAgICAgICAgc2NhbGU6IG51bGxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5fY2FjaGVLZXkgPSAwO1xyXG4gICAgdGhpcy5fY2FjaGVUaW1lID0gMDtcclxufTtcclxuXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuc2V0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hhbm5lbHMudGltZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBjaGFubmVscyA9IHRoaXMuY2hhbm5lbHM7XHJcbiAgICB2YXIgbGVuID0gY2hhbm5lbHMudGltZS5sZW5ndGg7XHJcbiAgICB2YXIga2V5ID0gLTE7XHJcbiAgICAvLyBPbmx5IG9uZSBmcmFtZVxyXG4gICAgaWYgKGxlbiA9PT0gMSkge1xyXG4gICAgICAgIGlmIChjaGFubmVscy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICBxdWF0LmNvcHkodGhpcy5yb3RhdGlvbiwgY2hhbm5lbHMucm90YXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbm5lbHMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgdmVjMy5jb3B5KHRoaXMucG9zaXRpb24sIGNoYW5uZWxzLnBvc2l0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnNjYWxlKSB7XHJcbiAgICAgICAgICAgIHZlYzMuY29weSh0aGlzLnNjYWxlLCBjaGFubmVscy5zY2FsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIENsYW1wXHJcbiAgICBlbHNlIGlmICh0aW1lIDw9IGNoYW5uZWxzLnRpbWVbMF0pIHtcclxuICAgICAgICB0aW1lID0gY2hhbm5lbHMudGltZVswXTtcclxuICAgICAgICBrZXkgPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGltZSA+PSBjaGFubmVscy50aW1lW2xlbiAtIDFdKSB7XHJcbiAgICAgICAgdGltZSA9IGNoYW5uZWxzLnRpbWVbbGVuIC0gMV07XHJcbiAgICAgICAga2V5ID0gbGVuIC0gMjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aW1lIDwgdGhpcy5fY2FjaGVUaW1lKSB7XHJcbiAgICAgICAgICAgIHZhciBzID0gTWF0aC5taW4obGVuIC0gMSwgdGhpcy5fY2FjaGVLZXkgKyAxKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHM7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hhbm5lbHMudGltZVtpIC0gMV0gPD0gdGltZSAmJiBjaGFubmVscy50aW1lW2ldID4gdGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9IGkgLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5fY2FjaGVLZXk7IGkgPCBsZW4gLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChjaGFubmVscy50aW1lW2ldIDw9IHRpbWUgJiYgY2hhbm5lbHMudGltZVtpICsgMV0gPiB0aW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gaTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChrZXkgPiAtMSkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlS2V5ID0ga2V5O1xyXG4gICAgICAgIHRoaXMuX2NhY2hlVGltZSA9IHRpbWU7XHJcbiAgICAgICAgdmFyIHN0YXJ0ID0ga2V5O1xyXG4gICAgICAgIHZhciBlbmQgPSBrZXkgKyAxO1xyXG4gICAgICAgIHZhciBzdGFydFRpbWUgPSBjaGFubmVscy50aW1lW3N0YXJ0XTtcclxuICAgICAgICB2YXIgZW5kVGltZSA9IGNoYW5uZWxzLnRpbWVbZW5kXTtcclxuICAgICAgICB2YXIgcmFuZ2UgPSBlbmRUaW1lIC0gc3RhcnRUaW1lO1xyXG4gICAgICAgIHZhciBwZXJjZW50ID0gcmFuZ2UgPT09IDAgPyAwIDogKHRpbWUgLSBzdGFydFRpbWUpIC8gcmFuZ2U7XHJcblxyXG4gICAgICAgIGlmIChjaGFubmVscy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICBxdWF0U2xlcnAodGhpcy5yb3RhdGlvbiwgY2hhbm5lbHMucm90YXRpb24sIGNoYW5uZWxzLnJvdGF0aW9uLCBwZXJjZW50LCBzdGFydCAqIDQsIGVuZCAqIDQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbm5lbHMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgdmVjM2xlcnAodGhpcy5wb3NpdGlvbiwgY2hhbm5lbHMucG9zaXRpb24sIGNoYW5uZWxzLnBvc2l0aW9uLCBwZXJjZW50LCBzdGFydCAqIDMsIGVuZCAqIDMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2hhbm5lbHMuc2NhbGUpIHtcclxuICAgICAgICAgICAgdmVjM2xlcnAodGhpcy5zY2FsZSwgY2hhbm5lbHMuc2NhbGUsIGNoYW5uZWxzLnNjYWxlLCBwZXJjZW50LCBzdGFydCAqIDMsIGVuZCAqIDMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIExvb3AgaGFuZGxpbmdcclxuICAgIGlmIChrZXkgPT09IGxlbiAtIDIpIHtcclxuICAgICAgICB0aGlzLl9jYWNoZUtleSA9IDA7XHJcbiAgICAgICAgdGhpcy5fY2FjaGVUaW1lID0gMDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwZGF0ZVRhcmdldCgpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFVwZGF0ZSB0cmFuc2Zvcm0gb2YgdGFyZ2V0IG5vZGUgbWFudWFsbHlcclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUudXBkYXRlVGFyZ2V0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGNoYW5uZWxzID0gdGhpcy5jaGFubmVscztcclxuICAgIGlmICh0aGlzLnRhcmdldCkge1xyXG4gICAgICAgIC8vIE9ubHkgdXBkYXRlIHRhcmdldCBwcm9wIGlmIGhhdmUgZGF0YS5cclxuICAgICAgICBpZiAoY2hhbm5lbHMucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXQucG9zaXRpb24uc2V0QXJyYXkodGhpcy5wb3NpdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGFubmVscy5yb3RhdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldC5yb3RhdGlvbi5zZXRBcnJheSh0aGlzLnJvdGF0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoYW5uZWxzLnNjYWxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnNjYWxlLnNldEFycmF5KHRoaXMuc2NhbGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5TYW1wbGVyVHJhY2sucHJvdG90eXBlLmdldE1heFRpbWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGFubmVscy50aW1lW3RoaXMuY2hhbm5lbHMudGltZS5sZW5ndGggLSAxXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnRUaW1lXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRUaW1lXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja31cclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuZ2V0U3ViVHJhY2sgPSBmdW5jdGlvbiAoc3RhcnRUaW1lLCBlbmRUaW1lKSB7XHJcblxyXG4gICAgdmFyIHN1YkNsaXAgPSBuZXcgU2FtcGxlclRyYWNrKHtcclxuICAgICAgICBuYW1lOiB0aGlzLm5hbWVcclxuICAgIH0pO1xyXG4gICAgdmFyIG1pblRpbWUgPSB0aGlzLmNoYW5uZWxzLnRpbWVbMF07XHJcbiAgICBzdGFydFRpbWUgPSBNYXRoLm1pbihNYXRoLm1heChzdGFydFRpbWUsIG1pblRpbWUpLCB0aGlzLmxpZmUpO1xyXG4gICAgZW5kVGltZSA9IE1hdGgubWluKE1hdGgubWF4KGVuZFRpbWUsIG1pblRpbWUpLCB0aGlzLmxpZmUpO1xyXG5cclxuICAgIHZhciByYW5nZVN0YXJ0ID0gdGhpcy5fZmluZFJhbmdlKHN0YXJ0VGltZSk7XHJcbiAgICB2YXIgcmFuZ2VFbmQgPSB0aGlzLl9maW5kUmFuZ2UoZW5kVGltZSk7XHJcblxyXG4gICAgdmFyIGNvdW50ID0gcmFuZ2VFbmRbMF0gLSByYW5nZVN0YXJ0WzBdICsgMTtcclxuICAgIGlmIChyYW5nZVN0YXJ0WzFdID09PSAwICYmIHJhbmdlRW5kWzFdID09PSAwKSB7XHJcbiAgICAgICAgY291bnQgLT0gMTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYW5uZWxzLnJvdGF0aW9uKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvbiA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQgKiA0KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYW5uZWxzLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5wb3NpdGlvbiA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQgKiAzKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYW5uZWxzLnNjYWxlKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5zY2FsZSA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQgKiAzKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYW5uZWxzLnRpbWUpIHtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnRpbWUgPSBuZXcgRmxvYXQzMkFycmF5KGNvdW50KTtcclxuICAgIH1cclxuICAgIC8vIENsaXAgYXQgdGhlIHN0YXJ0XHJcbiAgICB0aGlzLnNldFRpbWUoc3RhcnRUaW1lKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvbltpXSA9IHRoaXMucm90YXRpb25baV07XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5wb3NpdGlvbltpXSA9IHRoaXMucG9zaXRpb25baV07XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5zY2FsZVtpXSA9IHRoaXMuc2NhbGVbaV07XHJcbiAgICB9XHJcbiAgICBzdWJDbGlwLmNoYW5uZWxzLnRpbWVbMF0gPSAwO1xyXG4gICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvblszXSA9IHRoaXMucm90YXRpb25bM107XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBjb3VudC0xOyBpKyspIHtcclxuICAgICAgICB2YXIgaTI7XHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAzOyBqKyspIHtcclxuICAgICAgICAgICAgaTIgPSByYW5nZVN0YXJ0WzBdICsgaTtcclxuICAgICAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5yb3RhdGlvbltpICogNCArIGpdID0gdGhpcy5jaGFubmVscy5yb3RhdGlvbltpMiAqIDQgKyBqXTtcclxuICAgICAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5wb3NpdGlvbltpICogMyArIGpdID0gdGhpcy5jaGFubmVscy5wb3NpdGlvbltpMiAqIDMgKyBqXTtcclxuICAgICAgICAgICAgc3ViQ2xpcC5jaGFubmVscy5zY2FsZVtpICogMyArIGpdID0gdGhpcy5jaGFubmVscy5zY2FsZVtpMiAqIDMgKyBqXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3ViQ2xpcC5jaGFubmVscy50aW1lW2ldID0gdGhpcy5jaGFubmVscy50aW1lW2kyXSAtIHN0YXJ0VGltZTtcclxuICAgICAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uW2kgKiA0ICsgM10gPSB0aGlzLmNoYW5uZWxzLnJvdGF0aW9uW2kyICogNCArIDNdO1xyXG4gICAgfVxyXG4gICAgLy8gQ2xpcCBhdCB0aGUgZW5kXHJcbiAgICB0aGlzLnNldFRpbWUoZW5kVGltZSk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMucm90YXRpb25bKGNvdW50IC0gMSkgKiA0ICsgaV0gPSB0aGlzLnJvdGF0aW9uW2ldO1xyXG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMucG9zaXRpb25bKGNvdW50IC0gMSkgKiAzICsgaV0gPSB0aGlzLnBvc2l0aW9uW2ldO1xyXG4gICAgICAgIHN1YkNsaXAuY2hhbm5lbHMuc2NhbGVbKGNvdW50IC0gMSkgKiAzICsgaV0gPSB0aGlzLnNjYWxlW2ldO1xyXG4gICAgfVxyXG4gICAgc3ViQ2xpcC5jaGFubmVscy50aW1lWyhjb3VudCAtIDEpXSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XHJcbiAgICBzdWJDbGlwLmNoYW5uZWxzLnJvdGF0aW9uWyhjb3VudCAtIDEpICogNCArIDNdID0gdGhpcy5yb3RhdGlvblszXTtcclxuXHJcbiAgICAvLyBUT0RPIHNldCBiYWNrID9cclxuICAgIHN1YkNsaXAubGlmZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XHJcbiAgICByZXR1cm4gc3ViQ2xpcDtcclxufTtcclxuXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuX2ZpbmRSYW5nZSA9IGZ1bmN0aW9uICh0aW1lKSB7XHJcbiAgICB2YXIgY2hhbm5lbHMgPSB0aGlzLmNoYW5uZWxzO1xyXG4gICAgdmFyIGxlbiA9IGNoYW5uZWxzLnRpbWUubGVuZ3RoO1xyXG4gICAgdmFyIHN0YXJ0ID0gLTE7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykge1xyXG4gICAgICAgIGlmIChjaGFubmVscy50aW1lW2ldIDw9IHRpbWUgJiYgY2hhbm5lbHMudGltZVtpKzFdID4gdGltZSkge1xyXG4gICAgICAgICAgICBzdGFydCA9IGk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIHBlcmNlbnQgPSAwO1xyXG4gICAgaWYgKHN0YXJ0ID49IDApIHtcclxuICAgICAgICB2YXIgc3RhcnRUaW1lID0gY2hhbm5lbHMudGltZVtzdGFydF07XHJcbiAgICAgICAgdmFyIGVuZFRpbWUgPSBjaGFubmVscy50aW1lW3N0YXJ0KzFdO1xyXG4gICAgICAgIHZhciBwZXJjZW50ID0gKHRpbWUtc3RhcnRUaW1lKSAvIChlbmRUaW1lLXN0YXJ0VGltZSk7XHJcbiAgICB9XHJcbiAgICAvLyBQZXJjZW50IFswLCAxKVxyXG4gICAgcmV0dXJuIFtzdGFydCwgcGVyY2VudF07XHJcbn07XHJcblxyXG4vKipcclxuICogMUQgYmxlbmRpbmcgYmV0d2VlbiB0d28gY2xpcHNcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzFcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMlxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHdcclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuYmxlbmQxRCA9IGZ1bmN0aW9uICh0MSwgdDIsIHcpIHtcclxuICAgIHZlYzMubGVycCh0aGlzLnBvc2l0aW9uLCB0MS5wb3NpdGlvbiwgdDIucG9zaXRpb24sIHcpO1xyXG4gICAgdmVjMy5sZXJwKHRoaXMuc2NhbGUsIHQxLnNjYWxlLCB0Mi5zY2FsZSwgdyk7XHJcbiAgICBxdWF0LnNsZXJwKHRoaXMucm90YXRpb24sIHQxLnJvdGF0aW9uLCB0Mi5yb3RhdGlvbiwgdyk7XHJcbn07XHJcbi8qKlxyXG4gKiAyRCBibGVuZGluZyBiZXR3ZWVuIHRocmVlIGNsaXBzXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzJcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjM1xyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IGZcclxuICogQHBhcmFtICB7bnVtYmVyfSBnXHJcbiAqL1xyXG5TYW1wbGVyVHJhY2sucHJvdG90eXBlLmJsZW5kMkQgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHExID0gcXVhdC5jcmVhdGUoKTtcclxuICAgIHZhciBxMiA9IHF1YXQuY3JlYXRlKCk7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHQxLCB0MiwgdDMsIGYsIGcpIHtcclxuICAgICAgICB2YXIgYSA9IDEgLSBmIC0gZztcclxuXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvblswXSA9IHQxLnBvc2l0aW9uWzBdICogYSArIHQyLnBvc2l0aW9uWzBdICogZiArIHQzLnBvc2l0aW9uWzBdICogZztcclxuICAgICAgICB0aGlzLnBvc2l0aW9uWzFdID0gdDEucG9zaXRpb25bMV0gKiBhICsgdDIucG9zaXRpb25bMV0gKiBmICsgdDMucG9zaXRpb25bMV0gKiBnO1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25bMl0gPSB0MS5wb3NpdGlvblsyXSAqIGEgKyB0Mi5wb3NpdGlvblsyXSAqIGYgKyB0My5wb3NpdGlvblsyXSAqIGc7XHJcblxyXG4gICAgICAgIHRoaXMuc2NhbGVbMF0gPSB0MS5zY2FsZVswXSAqIGEgKyB0Mi5zY2FsZVswXSAqIGYgKyB0My5zY2FsZVswXSAqIGc7XHJcbiAgICAgICAgdGhpcy5zY2FsZVsxXSA9IHQxLnNjYWxlWzFdICogYSArIHQyLnNjYWxlWzFdICogZiArIHQzLnNjYWxlWzFdICogZztcclxuICAgICAgICB0aGlzLnNjYWxlWzJdID0gdDEuc2NhbGVbMl0gKiBhICsgdDIuc2NhbGVbMl0gKiBmICsgdDMuc2NhbGVbMl0gKiBnO1xyXG5cclxuICAgICAgICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2JiMjA1NDAzKHY9dnMuODUpLmFzcHhcclxuICAgICAgICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21pY3Jvc29mdC5kaXJlY3R4X3Nkay5xdWF0ZXJuaW9uLnhtcXVhdGVybmlvbmJhcnljZW50cmljKHY9dnMuODUpLmFzcHhcclxuICAgICAgICB2YXIgcyA9IGYgKyBnO1xyXG4gICAgICAgIGlmIChzID09PSAwKSB7XHJcbiAgICAgICAgICAgIHF1YXQuY29weSh0aGlzLnJvdGF0aW9uLCB0MS5yb3RhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxdWF0LnNsZXJwKHExLCB0MS5yb3RhdGlvbiwgdDIucm90YXRpb24sIHMpO1xyXG4gICAgICAgICAgICBxdWF0LnNsZXJwKHEyLCB0MS5yb3RhdGlvbiwgdDMucm90YXRpb24sIHMpO1xyXG4gICAgICAgICAgICBxdWF0LnNsZXJwKHRoaXMucm90YXRpb24sIHExLCBxMiwgZyAvIHMpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn0pKCk7XHJcbi8qKlxyXG4gKiBBZGRpdGl2ZSBibGVuZGluZyBiZXR3ZWVuIHR3byBjbGlwc1xyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfGNsYXkuYW5pbWF0aW9uLlRyYW5zZm9ybVRyYWNrfSBjMVxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMyXHJcbiAqL1xyXG5TYW1wbGVyVHJhY2sucHJvdG90eXBlLmFkZGl0aXZlQmxlbmQgPSBmdW5jdGlvbiAodDEsIHQyKSB7XHJcbiAgICB2ZWMzLmFkZCh0aGlzLnBvc2l0aW9uLCB0MS5wb3NpdGlvbiwgdDIucG9zaXRpb24pO1xyXG4gICAgdmVjMy5hZGQodGhpcy5zY2FsZSwgdDEuc2NhbGUsIHQyLnNjYWxlKTtcclxuICAgIHF1YXQubXVsdGlwbHkodGhpcy5yb3RhdGlvbiwgdDIucm90YXRpb24sIHQxLnJvdGF0aW9uKTtcclxufTtcclxuLyoqXHJcbiAqIFN1YnRyYWN0aXZlIGJsZW5kaW5nIGJldHdlZW4gdHdvIGNsaXBzXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t8Y2xheS5hbmltYXRpb24uVHJhbnNmb3JtVHJhY2t9IGMxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja3xjbGF5LmFuaW1hdGlvbi5UcmFuc2Zvcm1UcmFja30gYzJcclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuc3VidHJhY3RpdmVCbGVuZCA9IGZ1bmN0aW9uICh0MSwgdDIpIHtcclxuICAgIHZlYzMuc3ViKHRoaXMucG9zaXRpb24sIHQxLnBvc2l0aW9uLCB0Mi5wb3NpdGlvbik7XHJcbiAgICB2ZWMzLnN1Yih0aGlzLnNjYWxlLCB0MS5zY2FsZSwgdDIuc2NhbGUpO1xyXG4gICAgcXVhdC5pbnZlcnQodGhpcy5yb3RhdGlvbiwgdDIucm90YXRpb24pO1xyXG4gICAgcXVhdC5tdWx0aXBseSh0aGlzLnJvdGF0aW9uLCB0aGlzLnJvdGF0aW9uLCB0MS5yb3RhdGlvbik7XHJcbn07XHJcblxyXG4vKipcclxuICogQ2xvbmUgYSBuZXcgU2FtcGxlclRyYWNrXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLlNhbXBsZXJUcmFja31cclxuICovXHJcblNhbXBsZXJUcmFjay5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgdHJhY2sgPSBTYW1wbGVyVHJhY2sucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcbiAgICB0cmFjay5jaGFubmVscyA9IHtcclxuICAgICAgICB0aW1lOiB0aGlzLmNoYW5uZWxzLnRpbWUgfHwgbnVsbCxcclxuICAgICAgICBwb3NpdGlvbjogdGhpcy5jaGFubmVscy5wb3NpdGlvbiB8fCBudWxsLFxyXG4gICAgICAgIHJvdGF0aW9uOiB0aGlzLmNoYW5uZWxzLnJvdGF0aW9uIHx8IG51bGwsXHJcbiAgICAgICAgc2NhbGU6IHRoaXMuY2hhbm5lbHMuc2NhbGUgfHwgbnVsbFxyXG4gICAgfTtcclxuICAgIHZlYzMuY29weSh0cmFjay5wb3NpdGlvbiwgdGhpcy5wb3NpdGlvbik7XHJcbiAgICBxdWF0LmNvcHkodHJhY2sucm90YXRpb24sIHRoaXMucm90YXRpb24pO1xyXG4gICAgdmVjMy5jb3B5KHRyYWNrLnNjYWxlLCB0aGlzLnNjYWxlKTtcclxuXHJcbiAgICB0cmFjay50YXJnZXQgPSB0aGlzLnRhcmdldDtcclxuICAgIHRyYWNrLnVwZGF0ZVRhcmdldCgpO1xyXG5cclxuICAgIHJldHVybiB0cmFjaztcclxuXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTYW1wbGVyVHJhY2s7XHJcbiIsIi8qKlxyXG4gKiBFeHRlbmQgYSBzdWIgY2xhc3MgZnJvbSBiYXNlIGNsYXNzXHJcbiAqIEBwYXJhbSB7b2JqZWN0fEZ1bmN0aW9ufSBtYWtlRGVmYXVsdE9wdCBkZWZhdWx0IG9wdGlvbiBvZiB0aGlzIHN1YiBjbGFzcywgbWV0aG9kIG9mIHRoZSBzdWIgY2FuIHVzZSB0aGlzLnh4eCB0byBhY2Nlc3MgdGhpcyBvcHRpb25cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2luaXRpYWxpemVdIEluaXRpYWxpemUgYWZ0ZXIgdGhlIHN1YiBjbGFzcyBpcyBpbnN0YW50aWF0ZWRcclxuICogQHBhcmFtIHtPYmplY3R9IFtwcm90b10gUHJvdG90eXBlIG1ldGhvZHMvcHJvcGVydGllcyBvZiB0aGUgc3ViIGNsYXNzXHJcbiAqIEBtZW1iZXJPZiBjbGF5LmNvcmUubWl4aW4uZXh0ZW5kXHJcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxyXG4gKi9cclxuZnVuY3Rpb24gZGVyaXZlKG1ha2VEZWZhdWx0T3B0LCBpbml0aWFsaXplLypvcHRpb25hbCovLCBwcm90by8qb3B0aW9uYWwqLykge1xyXG5cclxuICAgIGlmICh0eXBlb2YgaW5pdGlhbGl6ZSA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHByb3RvID0gaW5pdGlhbGl6ZTtcclxuICAgICAgICBpbml0aWFsaXplID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgX3N1cGVyID0gdGhpcztcclxuXHJcbiAgICB2YXIgcHJvcExpc3Q7XHJcbiAgICBpZiAoIShtYWtlRGVmYXVsdE9wdCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkge1xyXG4gICAgICAgIC8vIE9wdGltaXplIHRoZSBwcm9wZXJ0eSBpdGVyYXRlIGlmIGl0IGhhdmUgYmVlbiBmaXhlZFxyXG4gICAgICAgIHByb3BMaXN0ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gbWFrZURlZmF1bHRPcHQpIHtcclxuICAgICAgICAgICAgaWYgKG1ha2VEZWZhdWx0T3B0Lmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgcHJvcExpc3QucHVzaChwcm9wTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHN1YiA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuXHJcbiAgICAgICAgLy8gY2FsbCBzdXBlciBjb25zdHJ1Y3RvclxyXG4gICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG5cclxuICAgICAgICBpZiAobWFrZURlZmF1bHRPcHQgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICAgICAgICAvLyBJbnZva2UgbWFrZURlZmF1bHRPcHQgZWFjaCB0aW1lIGlmIGl0IGlzIGEgZnVuY3Rpb24sIFNvIHdlIGNhbiBtYWtlIHN1cmUgZWFjaFxyXG4gICAgICAgICAgICAvLyBwcm9wZXJ0eSBpbiB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIHNoYXJlZCBieSBtdXRpcGxlIGluc3RhbmNlc1xyXG4gICAgICAgICAgICBleHRlbmQodGhpcywgbWFrZURlZmF1bHRPcHQuY2FsbCh0aGlzLCBvcHRpb25zKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBleHRlbmRXaXRoUHJvcExpc3QodGhpcywgbWFrZURlZmF1bHRPcHQsIHByb3BMaXN0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBzdWIpIHtcclxuICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0aGUgb3JkZXIgb2YgaW5oZXJpdFxyXG4gICAgICAgICAgICB2YXIgaW5pdGlhbGl6ZXJzID0gc3ViLl9faW5pdGlhbGl6ZXJzX187XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpbml0aWFsaXplcnNbaV0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvLyBzYXZlIHN1cGVyIGNvbnN0cnVjdG9yXHJcbiAgICBzdWIuX19zdXBlcl9fID0gX3N1cGVyO1xyXG4gICAgLy8gSW5pdGlhbGl6ZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBhbGwgdGhlIHN1cGVyIGNvbnN0cnVjdG9yIGlzIGNhbGxlZFxyXG4gICAgaWYgKCFfc3VwZXIuX19pbml0aWFsaXplcnNfXykge1xyXG4gICAgICAgIHN1Yi5fX2luaXRpYWxpemVyc19fID0gW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHN1Yi5fX2luaXRpYWxpemVyc19fID0gX3N1cGVyLl9faW5pdGlhbGl6ZXJzX18uc2xpY2UoKTtcclxuICAgIH1cclxuICAgIGlmIChpbml0aWFsaXplKSB7XHJcbiAgICAgICAgc3ViLl9faW5pdGlhbGl6ZXJzX18ucHVzaChpbml0aWFsaXplKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgQ3RvciA9IGZ1bmN0aW9uKCkge307XHJcbiAgICBDdG9yLnByb3RvdHlwZSA9IF9zdXBlci5wcm90b3R5cGU7XHJcbiAgICBzdWIucHJvdG90eXBlID0gbmV3IEN0b3IoKTtcclxuICAgIHN1Yi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWI7XHJcbiAgICBleHRlbmQoc3ViLnByb3RvdHlwZSwgcHJvdG8pO1xyXG5cclxuICAgIC8vIGV4dGVuZCB0aGUgZGVyaXZlIG1ldGhvZCBhcyBhIHN0YXRpYyBtZXRob2Q7XHJcbiAgICBzdWIuZXh0ZW5kID0gX3N1cGVyLmV4dGVuZDtcclxuXHJcbiAgICAvLyBERVBDUkFURURcclxuICAgIHN1Yi5kZXJpdmUgPSBfc3VwZXIuZXh0ZW5kO1xyXG5cclxuICAgIHJldHVybiBzdWI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGV4dGVuZCh0YXJnZXQsIHNvdXJjZSkge1xyXG4gICAgaWYgKCFzb3VyY2UpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBuYW1lIGluIHNvdXJjZSkge1xyXG4gICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gc291cmNlW25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZXh0ZW5kV2l0aFByb3BMaXN0KHRhcmdldCwgc291cmNlLCBwcm9wTGlzdCkge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBwcm9wTmFtZSA9IHByb3BMaXN0W2ldO1xyXG4gICAgICAgIHRhcmdldFtwcm9wTmFtZV0gPSBzb3VyY2VbcHJvcE5hbWVdO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQGFsaWFzIGNsYXkuY29yZS5taXhpbi5leHRlbmRcclxuICogQG1peGluXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCB7XHJcblxyXG4gICAgZXh0ZW5kOiBkZXJpdmUsXHJcblxyXG4gICAgLy8gREVQQ1JBVEVEXHJcbiAgICBkZXJpdmU6IGRlcml2ZVxyXG59O1xyXG4iLCJmdW5jdGlvbiBIYW5kbGVyKGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247XHJcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG59XHJcbi8qKlxyXG4gKiBAbWl4aW5cclxuICogQGFsaWFzIGNsYXkuY29yZS5taXhpbi5ub3RpZmllclxyXG4gKi9cclxudmFyIG5vdGlmaWVyID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUcmlnZ2VyIGV2ZW50XHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqL1xyXG4gICAgdHJpZ2dlcjogZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNPd25Qcm9wZXJ0eSgnX19oYW5kbGVyc19fJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuX19oYW5kbGVyc19fLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBoZGxzID0gdGhpcy5fX2hhbmRsZXJzX19bbmFtZV07XHJcbiAgICAgICAgdmFyIGwgPSBoZGxzLmxlbmd0aCwgaSA9IC0xLCBhcmdzID0gYXJndW1lbnRzO1xyXG4gICAgICAgIC8vIE9wdGltaXplIGFkdmlzZSBmcm9tIGJhY2tib25lXHJcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhkbHNbaV0uYWN0aW9uLmNhbGwoaGRsc1tpXS5jb250ZXh0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKCsraSA8IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCwgYXJnc1sxXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgIHdoaWxlICgrK2kgPCBsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGRsc1tpXS5hY3Rpb24uY2FsbChoZGxzW2ldLmNvbnRleHQsIGFyZ3NbMV0sIGFyZ3NbMl0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhkbHNbaV0uYWN0aW9uLmNhbGwoaGRsc1tpXS5jb250ZXh0LCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKCsraSA8IGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZGxzW2ldLmFjdGlvbi5jYWxsKGhkbHNbaV0uY29udGV4dCwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGhkbHNbaV0uYWN0aW9uLmFwcGx5KGhkbHNbaV0uY29udGV4dCwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncywgMSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVyIGV2ZW50IGhhbmRsZXJcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGFjdGlvblxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgb246IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGhhbmRsZXJzID0gdGhpcy5fX2hhbmRsZXJzX18gfHwgKHRoaXMuX19oYW5kbGVyc19fPXt9KTtcclxuICAgICAgICBpZiAoIWhhbmRsZXJzW25hbWVdKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZXJzW25hbWVdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5oYXMobmFtZSwgYWN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBoYW5kbGVyID0gbmV3IEhhbmRsZXIoYWN0aW9uLCBjb250ZXh0IHx8IHRoaXMpO1xyXG4gICAgICAgIGhhbmRsZXJzW25hbWVdLnB1c2goaGFuZGxlcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVyIGV2ZW50LCBldmVudCB3aWxsIG9ubHkgYmUgdHJpZ2dlcmVkIG9uY2UgYW5kIHRoZW4gcmVtb3ZlZFxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBvbmNlOiBmdW5jdGlvbihuYW1lLCBhY3Rpb24sIGNvbnRleHQpIHtcclxuICAgICAgICBpZiAoIW5hbWUgfHwgIWFjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBmdW5jdGlvbiB3cmFwcGVyKCkge1xyXG4gICAgICAgICAgICBzZWxmLm9mZihuYW1lLCB3cmFwcGVyKTtcclxuICAgICAgICAgICAgYWN0aW9uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLm9uKG5hbWUsIHdyYXBwZXIsIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIG9mIG9uY2UoJ2JlZm9yZScgKyBuYW1lKVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBiZWZvcmU6IGZ1bmN0aW9uKG5hbWUsIGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIGlmICghbmFtZSB8fCAhYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmFtZSA9ICdiZWZvcmUnICsgbmFtZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5vbihuYW1lLCBhY3Rpb24sIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIG9mIG9uY2UoJ2FmdGVyJyArIG5hbWUpXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIGFmdGVyOiBmdW5jdGlvbihuYW1lLCBhY3Rpb24sIGNvbnRleHQpIHtcclxuICAgICAgICBpZiAoIW5hbWUgfHwgIWFjdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5hbWUgPSAnYWZ0ZXInICsgbmFtZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5vbihuYW1lLCBhY3Rpb24sIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIG9mIG9uKCdzdWNjZXNzJylcclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBhY3Rpb25cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAY2hhaW5hYmxlXHJcbiAgICAgKi9cclxuICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGFjdGlvbiwgY29udGV4dCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9uY2UoJ3N1Y2Nlc3MnLCBhY3Rpb24sIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIG9mIG9uKCdlcnJvcicpXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IFtjb250ZXh0XVxyXG4gICAgICogQGNoYWluYWJsZVxyXG4gICAgICovXHJcbiAgICBlcnJvcjogZnVuY3Rpb24oYWN0aW9uLCBjb250ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub25jZSgnZXJyb3InLCBhY3Rpb24sIGNvbnRleHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBldmVudCBsaXN0ZW5lclxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IGFjdGlvblxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbY29udGV4dF1cclxuICAgICAqIEBjaGFpbmFibGVcclxuICAgICAqL1xyXG4gICAgb2ZmOiBmdW5jdGlvbihuYW1lLCBhY3Rpb24pIHtcclxuXHJcbiAgICAgICAgdmFyIGhhbmRsZXJzID0gdGhpcy5fX2hhbmRsZXJzX18gfHwgKHRoaXMuX19oYW5kbGVyc19fPXt9KTtcclxuXHJcbiAgICAgICAgaWYgKCFhY3Rpb24pIHtcclxuICAgICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaGFuZGxlcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgdmFyIGhkbHMgPSBoYW5kbGVyc1tuYW1lXTtcclxuICAgICAgICAgICAgdmFyIHJldGFpbnMgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uICYmIGhkbHNbaV0uYWN0aW9uICE9PSBhY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXRhaW5zLnB1c2goaGRsc1tpXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSByZXRhaW5zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgcmVnaXN0ZXJlZCB0aGUgZXZlbnQgaGFuZGxlclxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSAgbmFtZVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259ICBhY3Rpb25cclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGhhczogZnVuY3Rpb24obmFtZSwgYWN0aW9uKSB7XHJcbiAgICAgICAgdmFyIGhhbmRsZXJzID0gdGhpcy5fX2hhbmRsZXJzX187XHJcblxyXG4gICAgICAgIGlmICghIGhhbmRsZXJzIHx8XHJcbiAgICAgICAgICAgICEgaGFuZGxlcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaGRscyA9IGhhbmRsZXJzW25hbWVdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGRscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaGRsc1tpXS5hY3Rpb24gPT09IGFjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBub3RpZmllcjsiLCJ2YXIgZ3VpZCA9IDA7XHJcblxyXG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcclxudmFyIG5hdGl2ZUZvckVhY2ggPSBBcnJheVByb3RvLmZvckVhY2g7XHJcblxyXG4vKipcclxuICogVXRpbCBmdW5jdGlvbnNcclxuICogQG5hbWVzcGFjZSBjbGF5LmNvcmUudXRpbFxyXG4gKi9cclxudmFyIHV0aWwgPSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBHVUlEXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgZ2VuR1VJRDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiArK2d1aWQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWxhdGl2ZSBwYXRoIHRvIGFic29sdXRlIHBhdGhcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gcGF0aFxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBiYXNlUGF0aFxyXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIHJlbGF0aXZlMmFic29sdXRlOiBmdW5jdGlvbiAocGF0aCwgYmFzZVBhdGgpIHtcclxuICAgICAgICBpZiAoIWJhc2VQYXRoIHx8IHBhdGgubWF0Y2goL15cXC8vKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBhdGhQYXJ0cyA9IHBhdGguc3BsaXQoJy8nKTtcclxuICAgICAgICB2YXIgYmFzZVBhdGhQYXJ0cyA9IGJhc2VQYXRoLnNwbGl0KCcvJyk7XHJcblxyXG4gICAgICAgIHZhciBpdGVtID0gcGF0aFBhcnRzWzBdO1xyXG4gICAgICAgIHdoaWxlKGl0ZW0gPT09ICcuJyB8fCBpdGVtID09PSAnLi4nKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtID09PSAnLi4nKSB7XHJcbiAgICAgICAgICAgICAgICBiYXNlUGF0aFBhcnRzLnBvcCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhdGhQYXJ0cy5zaGlmdCgpO1xyXG4gICAgICAgICAgICBpdGVtID0gcGF0aFBhcnRzWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYmFzZVBhdGhQYXJ0cy5qb2luKCcvJykgKyAnLycgKyBwYXRoUGFydHMuam9pbignLycpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4dGVuZCB0YXJnZXQgd2l0aCBzb3VyY2VcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHNvdXJjZVxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIGV4dGVuZDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtuYW1lXSA9IHNvdXJjZVtuYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4dGVuZCBwcm9wZXJ0aWVzIHRvIHRhcmdldCBpZiBub3QgZXhpc3QuXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBzb3VyY2VcclxuICAgICAqIEByZXR1cm4ge09iamVjdH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBkZWZhdWx0czogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcE5hbWVdID0gc291cmNlW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRXh0ZW5kIHByb3BlcnRpZXMgd2l0aCBhIGdpdmVuIHByb3BlcnR5IGxpc3QgdG8gYXZvaWQgZm9yLi5pbi4uIGl0ZXJhdGlvbi5cclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gdGFyZ2V0XHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHNvdXJjZVxyXG4gICAgICogQHBhcmFtICB7QXJyYXkuPHN0cmluZz59IHByb3BMaXN0XHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgZXh0ZW5kV2l0aFByb3BMaXN0OiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIHByb3BMaXN0KSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJvcE5hbWUgPSBwcm9wTGlzdFtpXTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wTmFtZV0gPSBzb3VyY2VbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBFeHRlbmQgcHJvcGVydGllcyB0byB0YXJnZXQgaWYgbm90IGV4aXN0LiBXaXRoIGEgZ2l2ZW4gcHJvcGVydHkgbGlzdCBhdm9pZCBmb3IuLmluLi4gaXRlcmF0aW9uLlxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gc291cmNlXHJcbiAgICAgKiBAcGFyYW0gIHtBcnJheS48c3RyaW5nPn0gcHJvcExpc3RcclxuICAgICAqIEByZXR1cm4ge09iamVjdH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBkZWZhdWx0c1dpdGhQcm9wTGlzdDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBwcm9wTGlzdCkge1xyXG4gICAgICAgIGlmIChzb3VyY2UpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHByb3BOYW1lID0gcHJvcExpc3RbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0W3Byb3BOYW1lXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BOYW1lXSA9IHNvdXJjZVtwcm9wTmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge09iamVjdHxBcnJheX0gb2JqXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gaXRlcmF0b3JcclxuICAgICAqIEBwYXJhbSAge09iamVjdH0gW2NvbnRleHRdXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgZWFjaDogZnVuY3Rpb24gKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIHtcclxuICAgICAgICBpZiAoIShvYmogJiYgaXRlcmF0b3IpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iai5mb3JFYWNoICYmIG9iai5mb3JFYWNoID09PSBuYXRpdmVGb3JFYWNoKSB7XHJcbiAgICAgICAgICAgIG9iai5mb3JFYWNoKGl0ZXJhdG9yLCBjb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob2JqLmxlbmd0aCA9PT0gKyBvYmoubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBvYmoubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqW2ldLCBpLCBvYmopO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtrZXldLCBrZXksIG9iaik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXMgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0gIHt9ICBvYmpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgaXNPYmplY3Q6IGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gb2JqID09PSBPYmplY3Qob2JqKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJcyBhcnJheSA/XHJcbiAgICAgKiBAcGFyYW0gIHt9ICBvYmpcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5jb3JlLnV0aWxcclxuICAgICAqL1xyXG4gICAgaXNBcnJheTogZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KG9iaik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXMgYXJyYXkgbGlrZSwgd2hpY2ggaGF2ZSBhIGxlbmd0aCBwcm9wZXJ0eVxyXG4gICAgICogQHBhcmFtICB7fSAgb2JqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuY29yZS51dGlsXHJcbiAgICAgKi9cclxuICAgIGlzQXJyYXlMaWtlOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgaWYgKCFvYmopIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9iai5sZW5ndGggPT09ICsgb2JqLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7fSBvYmpcclxuICAgICAqIEByZXR1cm4ge31cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmNvcmUudXRpbFxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIGlmICghdXRpbC5pc09iamVjdChvYmopKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHV0aWwuaXNBcnJheShvYmopKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmouc2xpY2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodXRpbC5pc0FycmF5TGlrZShvYmopKSB7IC8vIGlzIHR5cGVkIGFycmF5XHJcbiAgICAgICAgICAgIHZhciByZXQgPSBuZXcgb2JqLmNvbnN0cnVjdG9yKG9iai5sZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgcmV0W2ldID0gb2JqW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdXRpbC5leHRlbmQoe30sIG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdXRpbDtcclxuIiwiaW1wb3J0IGV4dGVuZE1peGluIGZyb20gJy4vbWl4aW4vZXh0ZW5kJztcclxuaW1wb3J0IG5vdGlmaWVyTWl4aW4gZnJvbSAnLi9taXhpbi9ub3RpZmllcic7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4vdXRpbCc7XHJcblxyXG4vKipcclxuICogQmFzZSBjbGFzcyBvZiBhbGwgb2JqZWN0c1xyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuY29yZS5CYXNlXHJcbiAqIEBtaXhlcyBjbGF5LmNvcmUubWl4aW4ubm90aWZpZXJcclxuICovXHJcbnZhciBCYXNlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLl9fdWlkX18gPSB1dGlsLmdlbkdVSUQoKTtcclxufTtcclxuXHJcbkJhc2UuX19pbml0aWFsaXplcnNfXyA9IFtcclxuICAgIGZ1bmN0aW9uIChvcHRzKSB7XHJcbiAgICAgICAgdXRpbC5leHRlbmQodGhpcywgb3B0cyk7XHJcbiAgICB9XHJcbl07XHJcblxyXG51dGlsLmV4dGVuZChCYXNlLCBleHRlbmRNaXhpbik7XHJcbnV0aWwuZXh0ZW5kKEJhc2UucHJvdG90eXBlLCBub3RpZmllck1peGluKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJhc2U7XHJcbiIsImZ1bmN0aW9uIGdldChvcHRpb25zKSB7XHJcblxyXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG5cclxuICAgIHhoci5vcGVuKCdnZXQnLCBvcHRpb25zLnVybCk7XHJcbiAgICAvLyBXaXRoIHJlc3BvbnNlIHR5cGUgc2V0IGJyb3dzZXIgY2FuIGdldCBhbmQgcHV0IGJpbmFyeSBkYXRhXHJcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0RPTS9YTUxIdHRwUmVxdWVzdC9TZW5kaW5nX2FuZF9SZWNlaXZpbmdfQmluYXJ5X0RhdGFcclxuICAgIC8vIERlZmF1bHQgaXMgdGV4dCwgYW5kIGl0IGNhbiBiZSBzZXRcclxuICAgIC8vIGFycmF5YnVmZmVyLCBibG9iLCBkb2N1bWVudCwganNvbiwgdGV4dFxyXG4gICAgeGhyLnJlc3BvbnNlVHlwZSA9IG9wdGlvbnMucmVzcG9uc2VUeXBlIHx8ICd0ZXh0JztcclxuXHJcbiAgICBpZiAob3B0aW9ucy5vbnByb2dyZXNzKSB7XHJcbiAgICAgICAgLy9odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0RPTS9YTUxIdHRwUmVxdWVzdC9Vc2luZ19YTUxIdHRwUmVxdWVzdFxyXG4gICAgICAgIHhoci5vbnByb2dyZXNzID0gZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICBpZiAoZS5sZW5ndGhDb21wdXRhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGVyY2VudCA9IGUubG9hZGVkIC8gZS50b3RhbDtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMub25wcm9ncmVzcyhwZXJjZW50LCBlLmxvYWRlZCwgZS50b3RhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9ucHJvZ3Jlc3MobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICBpZiAoeGhyLnN0YXR1cyA+PSA0MDApIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5vbmVycm9yICYmIG9wdGlvbnMub25lcnJvcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5vbmxvYWQgJiYgb3B0aW9ucy5vbmxvYWQoeGhyLnJlc3BvbnNlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgaWYgKG9wdGlvbnMub25lcnJvcikge1xyXG4gICAgICAgIHhoci5vbmVycm9yID0gb3B0aW9ucy5vbmVycm9yO1xyXG4gICAgfVxyXG4gICAgeGhyLnNlbmQobnVsbCk7XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIGdldDogZ2V0XHJcbn07XHJcbiIsImltcG9ydCByZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XHJcblxyXG52YXIgc3VwcG9ydFdlYkdMO1xyXG5cclxudmFyIHZlbmRvciA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIElmIHN1cHBvcnQgV2ViR0xcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICovXHJcbnZlbmRvci5zdXBwb3J0V2ViR0wgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoc3VwcG9ydFdlYkdMID09IG51bGwpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgIHZhciBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnKTtcclxuICAgICAgICAgICAgaWYgKCFnbCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgc3VwcG9ydFdlYkdMID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIHJldHVybiBzdXBwb3J0V2ViR0w7XHJcbn07XHJcblxyXG52ZW5kb3IuSW50OEFycmF5ID0gdHlwZW9mIEludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEludDhBcnJheTtcclxuXHJcbnZlbmRvci5VaW50OEFycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBVaW50OEFycmF5O1xyXG5cclxudmVuZG9yLlVpbnQxNkFycmF5ID0gdHlwZW9mIFVpbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IEFycmF5IDogVWludDE2QXJyYXk7XHJcblxyXG52ZW5kb3IuVWludDMyQXJyYXkgPSB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBVaW50MzJBcnJheTtcclxuXHJcbnZlbmRvci5JbnQxNkFycmF5ID0gdHlwZW9mIEludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBJbnQxNkFycmF5O1xyXG5cclxudmVuZG9yLkZsb2F0MzJBcnJheSA9IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gQXJyYXkgOiBGbG9hdDMyQXJyYXk7XHJcblxyXG52ZW5kb3IuRmxvYXQ2NEFycmF5ID0gdHlwZW9mIEZsb2F0NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyBBcnJheSA6IEZsb2F0NjRBcnJheTtcclxuXHJcbnZhciBnID0ge307XHJcbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgZyA9IHdpbmRvdztcclxufVxyXG5lbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgZyA9IGdsb2JhbDtcclxufVxyXG5cclxuXHJcbnZlbmRvci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnLnJlcXVlc3RBbmltYXRpb25GcmFtZVxyXG4gICAgfHwgZy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZVxyXG4gICAgfHwgZy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcclxuICAgIHx8IGcud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lXHJcbiAgICB8fCBmdW5jdGlvbiAoZnVuYyl7IHNldFRpbWVvdXQoZnVuYywgMTYpOyB9O1xyXG5cclxudmVuZG9yLmNyZWF0ZUNhbnZhcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxufTtcclxuXHJcbnZlbmRvci5jcmVhdGVJbWFnZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBuZXcgZy5JbWFnZSgpO1xyXG59O1xyXG5cclxudmVuZG9yLnJlcXVlc3QgPSB7XHJcbiAgICBnZXQ6IHJlcXVlc3QuZ2V0XHJcbn07XHJcblxyXG52ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChkb20sIHR5cGUsIGZ1bmMsIHVzZUNhcHR1cmUpIHtcclxuICAgIGRvbS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmMsIHVzZUNhcHR1cmUpO1xyXG59O1xyXG5cclxudmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAoZG9tLCB0eXBlLCBmdW5jKSB7XHJcbiAgICBkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBmdW5jKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHZlbmRvcjtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgQW5pbWF0b3IgZnJvbSAnLi9hbmltYXRpb24vQW5pbWF0b3InO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBBbmltYXRpb24gaXMgZ2xvYmFsIHRpbWVsaW5lIHRoYXQgc2NoZWR1bGUgYWxsIGNsaXBzLiBlYWNoIGZyYW1lIGFuaW1hdGlvbiB3aWxsIHNldCB0aGUgdGltZSBvZiBjbGlwcyB0byBjdXJyZW50IGFuZCB1cGRhdGUgdGhlIHN0YXRlcyBvZiBjbGlwc1xyXG4gKiBAY29uc3RydWN0b3IgY2xheS5UaW1lbGluZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgYW5pbWF0aW9uID0gbmV3IGNsYXkuVGltZWxpbmUoKTtcclxuICogdmFyIG5vZGUgPSBuZXcgY2xheS5Ob2RlKCk7XHJcbiAqIGFuaW1hdGlvbi5hbmltYXRlKG5vZGUucG9zaXRpb24pXHJcbiAqICAgICAud2hlbigxMDAwLCB7XHJcbiAqICAgICAgICAgeDogNTAwLFxyXG4gKiAgICAgICAgIHk6IDUwMFxyXG4gKiAgICAgfSlcclxuICogICAgIC53aGVuKDIwMDAsIHtcclxuICogICAgICAgICB4OiAxMDAsXHJcbiAqICAgICAgICAgeTogMTAwXHJcbiAqICAgICB9KVxyXG4gKiAgICAgLndoZW4oMzAwMCwge1xyXG4gKiAgICAgICAgIHo6IDEwXHJcbiAqICAgICB9KVxyXG4gKiAgICAgLnN0YXJ0KCdzcGxpbmUnKTtcclxuICovXHJcbnZhciBUaW1lbGluZSA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuVGltZWxpbmUjICove1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIHN0YWdlIGlzIGFuIG9iamVjdCB3aXRoIHJlbmRlciBtZXRob2QsIGVhY2ggZnJhbWUgaWYgdGhlcmUgZXhpc3RzIGFueSBhbmltYXRpbmcgY2xpcHMsIHN0YWdlLnJlbmRlciB3aWxsIGJlIGNhbGxlZFxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc3RhZ2U6IG51bGwsXHJcblxyXG4gICAgICAgIF9jbGlwczogW10sXHJcblxyXG4gICAgICAgIF9ydW5uaW5nOiBmYWxzZSxcclxuXHJcbiAgICAgICAgX3RpbWU6IDAsXHJcblxyXG4gICAgICAgIF9wYXVzZWQ6IGZhbHNlLFxyXG5cclxuICAgICAgICBfcGF1c2VkVGltZTogMFxyXG4gICAgfTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LlRpbWVsaW5lLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYW5pbWF0b3JcclxuICAgICAqIEBwYXJhbSB7Y2xheS5hbmltYXRlLkFuaW1hdG9yfSBhbmltYXRvclxyXG4gICAgICovXHJcbiAgICBhZGRBbmltYXRvcjogZnVuY3Rpb24gKGFuaW1hdG9yKSB7XHJcbiAgICAgICAgYW5pbWF0b3IuYW5pbWF0aW9uID0gdGhpcztcclxuICAgICAgICB2YXIgY2xpcHMgPSBhbmltYXRvci5nZXRDbGlwcygpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xpcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRDbGlwKGNsaXBzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5DbGlwfSBjbGlwXHJcbiAgICAgKi9cclxuICAgIGFkZENsaXA6IGZ1bmN0aW9uIChjbGlwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NsaXBzLmluZGV4T2YoY2xpcCkgPCAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NsaXBzLnB1c2goY2xpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLkNsaXB9IGNsaXBcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2xpcDogZnVuY3Rpb24gKGNsaXApIHtcclxuICAgICAgICB2YXIgaWR4ID0gdGhpcy5fY2xpcHMuaW5kZXhPZihjbGlwKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2xpcHMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhbmltYXRvclxyXG4gICAgICogQHBhcmFtIHtjbGF5LmFuaW1hdGUuQW5pbWF0b3J9IGFuaW1hdG9yXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUFuaW1hdG9yOiBmdW5jdGlvbiAoYW5pbWF0b3IpIHtcclxuICAgICAgICB2YXIgY2xpcHMgPSBhbmltYXRvci5nZXRDbGlwcygpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xpcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVDbGlwKGNsaXBzW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYW5pbWF0b3IuYW5pbWF0aW9uID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2YXIgdGltZSA9IERhdGUubm93KCkgLSB0aGlzLl9wYXVzZWRUaW1lO1xyXG4gICAgICAgIHZhciBkZWx0YSA9IHRpbWUgLSB0aGlzLl90aW1lO1xyXG4gICAgICAgIHZhciBjbGlwcyA9IHRoaXMuX2NsaXBzO1xyXG4gICAgICAgIHZhciBsZW4gPSBjbGlwcy5sZW5ndGg7XHJcblxyXG4gICAgICAgIHZhciBkZWZlcnJlZEV2ZW50cyA9IFtdO1xyXG4gICAgICAgIHZhciBkZWZlcnJlZENsaXBzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2xpcCA9IGNsaXBzW2ldO1xyXG4gICAgICAgICAgICB2YXIgZSA9IGNsaXAuc3RlcCh0aW1lLCBkZWx0YSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAvLyBUaHJvdyBvdXQgdGhlIGV2ZW50cyBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlclxyXG4gICAgICAgICAgICAvLyBzdGFnZS5yZW5kZXIsIGxpa2UgZmluaXNoXHJcbiAgICAgICAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgICAgICAgICBkZWZlcnJlZEV2ZW50cy5wdXNoKGUpO1xyXG4gICAgICAgICAgICAgICAgZGVmZXJyZWRDbGlwcy5wdXNoKGNsaXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZW1vdmUgdGhlIGZpbmlzaGVkIGNsaXBcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjspIHtcclxuICAgICAgICAgICAgaWYgKGNsaXBzW2ldLl9uZWVkc1JlbW92ZSkge1xyXG4gICAgICAgICAgICAgICAgY2xpcHNbaV0gPSBjbGlwc1tsZW4tMV07XHJcbiAgICAgICAgICAgICAgICBjbGlwcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZW4gPSBkZWZlcnJlZEV2ZW50cy5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBkZWZlcnJlZENsaXBzW2ldLmZpcmUoZGVmZXJyZWRFdmVudHNbaV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdGltZSA9IHRpbWU7XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignZnJhbWUnLCBkZWx0YSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN0YWdlICYmIHRoaXMuc3RhZ2UucmVuZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhZ2UucmVuZGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU3RhcnQgcnVubmluZyBhbmltYXRpb25cclxuICAgICAqL1xyXG4gICAgc3RhcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIHRoaXMuX3J1bm5pbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX3RpbWUgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgICAgICB0aGlzLl9wYXVzZWRUaW1lID0gMDtcclxuXHJcbiAgICAgICAgdmFyIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHZlbmRvci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAoKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLl9ydW5uaW5nKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghc2VsZi5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fdXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcclxuXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9wIHJ1bm5pbmcgYW5pbWF0aW9uXHJcbiAgICAgKi9cclxuICAgIHN0b3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9ydW5uaW5nID0gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGF1c2VcclxuICAgICAqL1xyXG4gICAgcGF1c2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wYXVzZVN0YXJ0ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzdW1lXHJcbiAgICAgKi9cclxuICAgIHJlc3VtZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9wYXVzZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkVGltZSArPSBEYXRlLm5vdygpIC0gdGhpcy5fcGF1c2VTdGFydDtcclxuICAgICAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhbGwgY2xpcHNcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2xpcHNBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9jbGlwcyA9IFtdO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGFuIGFuaW1hdG9yXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxyXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBbb3B0aW9uc11cclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtvcHRpb25zLmxvb3BdXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW29wdGlvbnMuZ2V0dGVyXVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvcHRpb25zLnNldHRlcl1cclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb3B0aW9ucy5pbnRlcnBvbGF0ZXJdXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFuaW1hdGlvbi5BbmltYXRvcn1cclxuICAgICAqL1xyXG4gICAgYW5pbWF0ZTogZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucykge1xyXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgICAgIHZhciBhbmltYXRvciA9IG5ldyBBbmltYXRvcihcclxuICAgICAgICAgICAgdGFyZ2V0LFxyXG4gICAgICAgICAgICBvcHRpb25zLmxvb3AsXHJcbiAgICAgICAgICAgIG9wdGlvbnMuZ2V0dGVyLFxyXG4gICAgICAgICAgICBvcHRpb25zLnNldHRlcixcclxuICAgICAgICAgICAgb3B0aW9ucy5pbnRlcnBvbGF0ZXJcclxuICAgICAgICApO1xyXG4gICAgICAgIGFuaW1hdG9yLmFuaW1hdGlvbiA9IHRoaXM7XHJcbiAgICAgICAgcmV0dXJuIGFuaW1hdG9yO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRpbWVsaW5lO1xyXG4iLCIvLyBERVBSRUNBVEVEXHJcbmltcG9ydCBUaW1lbGluZSBmcm9tICcuLi9UaW1lbGluZSc7XHJcbmV4cG9ydCBkZWZhdWx0IFRpbWVsaW5lOyIsImltcG9ydCBDbGlwIGZyb20gJy4vQ2xpcCc7XHJcblxyXG5pbXBvcnQgcXVhdCBmcm9tICcuLi9nbG1hdHJpeC9xdWF0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG5cclxuLyoqXHJcbiAqXHJcbiAqIEFuaW1hdGlvbiBjbGlwIHRoYXQgbWFuYWdlIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgY2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrfVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcFxyXG4gKlxyXG4gKiBAZXh0ZW5kcyBjbGF5LmFuaW1hdGlvbi5DbGlwXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c11cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5hbWVdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy50YXJnZXRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5saWZlXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZGVsYXldXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5nYXBdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5wbGF5YmFja1JhdGlvXVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW58bnVtYmVyfSBbb3B0cy5sb29wXSBJZiBsb29wIGlzIGEgbnVtYmVyLCBpdCBpbmRpY2F0ZSB0aGUgbG9vcCBjb3VudCBvZiBhbmltYXRpb25cclxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IFtvcHRzLmVhc2luZ11cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25mcmFtZV1cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMub25maW5pc2hdXHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLm9ucmVzdGFydF1cclxuICogQHBhcmFtIHtBcnJheS48Y2xheS5hbmltYXRpb24uU2FtcGxlclRyYWNrPn0gW29wdHMudHJhY2tzXVxyXG4gKi9cclxudmFyIFRyYWNrQ2xpcCA9IGZ1bmN0aW9uIChvcHRzKSB7XHJcblxyXG4gICAgb3B0cyA9IG9wdHMgfHwge307XHJcblxyXG4gICAgQ2xpcC5jYWxsKHRoaXMsIG9wdHMpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2tbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy50cmFja3MgPSBvcHRzLnRyYWNrcyB8fCBbXTtcclxuXHJcbiAgICB0aGlzLmNhbGNMaWZlRnJvbVRyYWNrcygpO1xyXG59O1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ2xpcC5wcm90b3R5cGUpO1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRyYWNrQ2xpcDtcclxuXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uICh0aW1lLCBkVGltZSwgc2lsZW50KSB7XHJcblxyXG4gICAgdmFyIHJldCA9IENsaXAucHJvdG90eXBlLnN0ZXAuY2FsbCh0aGlzLCB0aW1lLCBkVGltZSwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKHJldCAhPT0gJ2ZpbmlzaCcpIHtcclxuICAgICAgICB2YXIgdGltZSA9IHRoaXMuZ2V0RWxhcHNlZFRpbWUoKTtcclxuICAgICAgICAvLyBUT0RPIGxpZmUgbWF5IGJlIGNoYW5nZWQuXHJcbiAgICAgICAgaWYgKHRoaXMuX3JhbmdlKSB7XHJcbiAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9yYW5nZVswXSArIHRpbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VGltZSh0aW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQRU5ESU5HIFNjaGVkdWxlXHJcbiAgICBpZiAoIXNpbGVudCAmJiByZXQgIT09ICdwYXVzZWQnKSB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdmcmFtZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcmFuZ2VcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuc2V0UmFuZ2UgPSBmdW5jdGlvbiAocmFuZ2UpIHtcclxuICAgIHRoaXMuY2FsY0xpZmVGcm9tVHJhY2tzKCk7XHJcbiAgICB0aGlzLl9yYW5nZSA9IHJhbmdlO1xyXG4gICAgaWYgKHJhbmdlKSB7XHJcbiAgICAgICAgcmFuZ2VbMV0gPSBNYXRoLm1pbihyYW5nZVsxXSwgdGhpcy5saWZlKTtcclxuICAgICAgICByYW5nZVswXSA9IE1hdGgubWluKHJhbmdlWzBdLCB0aGlzLmxpZmUpO1xyXG4gICAgICAgIHRoaXMubGlmZSA9IChyYW5nZVsxXSAtIHJhbmdlWzBdKTtcclxuICAgIH1cclxufTtcclxuXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuc2V0VGltZSA9IGZ1bmN0aW9uICh0aW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy50cmFja3NbaV0uc2V0VGltZSh0aW1lKTtcclxuICAgIH1cclxufTtcclxuXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuY2FsY0xpZmVGcm9tVHJhY2tzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5saWZlID0gMDtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLmxpZmUgPSBNYXRoLm1heCh0aGlzLmxpZmUsIHRoaXMudHJhY2tzW2ldLmdldE1heFRpbWUoKSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t9IHRyYWNrXHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLmFkZFRyYWNrID0gZnVuY3Rpb24gKHRyYWNrKSB7XHJcbiAgICB0aGlzLnRyYWNrcy5wdXNoKHRyYWNrKTtcclxuICAgIHRoaXMuY2FsY0xpZmVGcm9tVHJhY2tzKCk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5TYW1wbGVyVHJhY2t9IHRyYWNrXHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLnJlbW92ZVRhcmNrID0gZnVuY3Rpb24gKHRyYWNrKSB7XHJcbiAgICB2YXIgaWR4ID0gdGhpcy50cmFja3MuaW5kZXhPZih0cmFjayk7XHJcbiAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICB0aGlzLnRyYWNrcy5zcGxpY2UoaWR4LCAxKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnRUaW1lXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRUaW1lXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNMb29wXHJcbiAqIEByZXR1cm4ge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH1cclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuZ2V0U3ViQ2xpcCA9IGZ1bmN0aW9uIChzdGFydFRpbWUsIGVuZFRpbWUsIGlzTG9vcCkge1xyXG4gICAgdmFyIHN1YkNsaXAgPSBuZXcgVHJhY2tDbGlwKHtcclxuICAgICAgICBuYW1lOiB0aGlzLm5hbWVcclxuICAgIH0pO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgc3ViVHJhY2sgPSB0aGlzLnRyYWNrc1tpXS5nZXRTdWJUcmFjayhzdGFydFRpbWUsIGVuZFRpbWUpO1xyXG4gICAgICAgIHN1YkNsaXAuYWRkVHJhY2soc3ViVHJhY2spO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0xvb3AgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHN1YkNsaXAuc2V0TG9vcChpc0xvb3ApO1xyXG4gICAgfVxyXG5cclxuICAgIHN1YkNsaXAubGlmZSA9IGVuZFRpbWUgLSBzdGFydFRpbWU7XHJcblxyXG4gICAgcmV0dXJuIHN1YkNsaXA7XHJcbn07XHJcblxyXG4vKipcclxuICogMWQgYmxlbmRpbmcgZnJvbSB0d28gc2tpbm5pbmcgY2xpcHNcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMVxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAyXHJcbiAqIEBwYXJhbSAge251bWJlcn0gd1xyXG4gKi9cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5ibGVuZDFEID0gZnVuY3Rpb24gKGNsaXAxLCBjbGlwMiwgdykge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBjMSA9IGNsaXAxLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgYzIgPSBjbGlwMi50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIHRDbGlwID0gdGhpcy50cmFja3NbaV07XHJcblxyXG4gICAgICAgIHRDbGlwLmJsZW5kMUQoYzEsIGMyLCB3KTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBBZGRpdGl2ZSBibGVuZGluZyBmcm9tIHR3byBza2lubmluZyBjbGlwc1xyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAxXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDJcclxuICovXHJcblRyYWNrQ2xpcC5wcm90b3R5cGUuYWRkaXRpdmVCbGVuZCA9IGZ1bmN0aW9uIChjbGlwMSwgY2xpcDIpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYzEgPSBjbGlwMS50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIGMyID0gY2xpcDIudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciB0Q2xpcCA9IHRoaXMudHJhY2tzW2ldO1xyXG5cclxuICAgICAgICB0Q2xpcC5hZGRpdGl2ZUJsZW5kKGMxLCBjMik7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogU3VidHJhY3RpdmUgYmxlbmRpbmcgZnJvbSB0d28gc2tpbm5pbmcgY2xpcHNcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMVxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAyXHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLnN1YnRyYWN0aXZlQmxlbmQgPSBmdW5jdGlvbiAoY2xpcDEsIGNsaXAyKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGMxID0gY2xpcDEudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciBjMiA9IGNsaXAyLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgdENsaXAgPSB0aGlzLnRyYWNrc1tpXTtcclxuXHJcbiAgICAgICAgdENsaXAuc3VidHJhY3RpdmVCbGVuZChjMSwgYzIpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIDJEIGJsZW5kaW5nIGZyb20gdGhyZWUgc2tpbm5pbmcgY2xpcHNcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwMVxyXG4gKiBAcGFyYW0gIHtjbGF5LmFuaW1hdGlvbi5UcmFja0NsaXB9IGNsaXAyXHJcbiAqIEBwYXJhbSAge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcH0gY2xpcDNcclxuICogQHBhcmFtICB7bnVtYmVyfSBmXHJcbiAqIEBwYXJhbSAge251bWJlcn0gZ1xyXG4gKi9cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5ibGVuZDJEID0gZnVuY3Rpb24gKGNsaXAxLCBjbGlwMiwgY2xpcDMsIGYsIGcpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYzEgPSBjbGlwMS50cmFja3NbaV07XHJcbiAgICAgICAgdmFyIGMyID0gY2xpcDIudHJhY2tzW2ldO1xyXG4gICAgICAgIHZhciBjMyA9IGNsaXAzLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgdENsaXAgPSB0aGlzLnRyYWNrc1tpXTtcclxuXHJcbiAgICAgICAgdENsaXAuYmxlbmQyRChjMSwgYzIsIGMzLCBmLCBnKTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb3B5IFNSVCBvZiBhbGwgam9pbnRzIGNsaXBzIGZyb20gYW5vdGhlciBUcmFja0NsaXBcclxuICogQHBhcmFtICB7Y2xheS5hbmltYXRpb24uVHJhY2tDbGlwfSBjbGlwXHJcbiAqL1xyXG5UcmFja0NsaXAucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoY2xpcCkge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBzVHJhY2sgPSBjbGlwLnRyYWNrc1tpXTtcclxuICAgICAgICB2YXIgdFRyYWNrID0gdGhpcy50cmFja3NbaV07XHJcblxyXG4gICAgICAgIHZlYzMuY29weSh0VHJhY2sucG9zaXRpb24sIHNUcmFjay5wb3NpdGlvbik7XHJcbiAgICAgICAgdmVjMy5jb3B5KHRUcmFjay5zY2FsZSwgc1RyYWNrLnNjYWxlKTtcclxuICAgICAgICBxdWF0LmNvcHkodFRyYWNrLnJvdGF0aW9uLCBzVHJhY2sucm90YXRpb24pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuVHJhY2tDbGlwLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBjbGlwID0gQ2xpcC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy50cmFja3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjbGlwLmFkZFRyYWNrKHRoaXMudHJhY2tzW2ldLmNsb25lKCkpO1xyXG4gICAgfVxyXG4gICAgY2xpcC5saWZlID0gdGhpcy5saWZlO1xyXG4gICAgcmV0dXJuIGNsaXA7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUcmFja0NsaXA7XHJcbiIsInZhciBFWFRFTlNJT05fTElTVCA9IFtcclxuICAgICdPRVNfdGV4dHVyZV9mbG9hdCcsXHJcbiAgICAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcsXHJcbiAgICAnT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyJyxcclxuICAgICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhcicsXHJcbiAgICAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyxcclxuICAgICdPRVNfdmVydGV4X2FycmF5X29iamVjdCcsXHJcbiAgICAnT0VTX2VsZW1lbnRfaW5kZXhfdWludCcsXHJcbiAgICAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnLFxyXG4gICAgJ1dFQkdMX2RlcHRoX3RleHR1cmUnLFxyXG4gICAgJ0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycsXHJcbiAgICAnRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCcsXHJcbiAgICAnV0VCR0xfZHJhd19idWZmZXJzJyxcclxuICAgICdFWFRfZnJhZ19kZXB0aCcsXHJcbiAgICAnRVhUX3NSR0InXHJcbl07XHJcblxyXG52YXIgUEFSQU1FVEVSX05BTUVTID0gW1xyXG4gICAgJ01BWF9URVhUVVJFX1NJWkUnLFxyXG4gICAgJ01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUnXHJcbl07XHJcblxyXG5mdW5jdGlvbiBHTEluZm8oX2dsKSB7XHJcbiAgICB2YXIgZXh0ZW5zaW9ucyA9IHt9O1xyXG4gICAgdmFyIHBhcmFtZXRlcnMgPSB7fTtcclxuXHJcbiAgICAvLyBHZXQgd2ViZ2wgZXh0ZW5zaW9uXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEVYVEVOU0lPTl9MSVNULmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGV4dE5hbWUgPSBFWFRFTlNJT05fTElTVFtpXTtcclxuICAgICAgICBjcmVhdGVFeHRlbnNpb24oZXh0TmFtZSk7XHJcbiAgICB9XHJcbiAgICAvLyBHZXQgcGFyYW1ldGVyc1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBQQVJBTUVURVJfTkFNRVMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgbmFtZSA9IFBBUkFNRVRFUl9OQU1FU1tpXTtcclxuICAgICAgICBwYXJhbWV0ZXJzW25hbWVdID0gX2dsLmdldFBhcmFtZXRlcihfZ2xbbmFtZV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2V0RXh0ZW5zaW9uID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICBpZiAoIShuYW1lIGluIGV4dGVuc2lvbnMpKSB7XHJcbiAgICAgICAgICAgIGNyZWF0ZUV4dGVuc2lvbihuYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGV4dGVuc2lvbnNbbmFtZV07XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuZ2V0UGFyYW1ldGVyID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gcGFyYW1ldGVyc1tuYW1lXTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5nZXRNYXhKb2ludE51bWJlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gMTU7XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUV4dGVuc2lvbihuYW1lKSB7XHJcbiAgICAgICAgaWYgKF9nbC5nZXRFeHRlbnNpb24pIHtcclxuICAgICAgICAgICAgdmFyIGV4dCA9IF9nbC5nZXRFeHRlbnNpb24obmFtZSk7XHJcbiAgICAgICAgICAgIGlmICghZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBleHQgPSBfZ2wuZ2V0RXh0ZW5zaW9uKCdNT1pfJyArIG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBleHQgPSBfZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfJyArIG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGV4dGVuc2lvbnNbbmFtZV0gPSBleHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHTEluZm87XHJcbiIsIi8qKlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkuY29yZS5nbGVudW1cclxuICogQHNlZSBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3NwZWNzL2xhdGVzdC8xLjAvIzUuMTRcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIC8qIENsZWFyQnVmZmVyTWFzayAqL1xyXG4gICAgREVQVEhfQlVGRkVSX0JJVCAgICAgICAgICAgICAgIDogMHgwMDAwMDEwMCxcclxuICAgIFNURU5DSUxfQlVGRkVSX0JJVCAgICAgICAgICAgICA6IDB4MDAwMDA0MDAsXHJcbiAgICBDT0xPUl9CVUZGRVJfQklUICAgICAgICAgICAgICAgOiAweDAwMDA0MDAwLFxyXG5cclxuICAgIC8qIEJlZ2luTW9kZSAqL1xyXG4gICAgUE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMDAwLFxyXG4gICAgTElORVMgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgwMDAxLFxyXG4gICAgTElORV9MT09QICAgICAgICAgICAgICAgICAgICAgIDogMHgwMDAyLFxyXG4gICAgTElORV9TVFJJUCAgICAgICAgICAgICAgICAgICAgIDogMHgwMDAzLFxyXG4gICAgVFJJQU5HTEVTICAgICAgICAgICAgICAgICAgICAgIDogMHgwMDA0LFxyXG4gICAgVFJJQU5HTEVfU1RSSVAgICAgICAgICAgICAgICAgIDogMHgwMDA1LFxyXG4gICAgVFJJQU5HTEVfRkFOICAgICAgICAgICAgICAgICAgIDogMHgwMDA2LFxyXG5cclxuICAgIC8qIEFscGhhRnVuY3Rpb24gKG5vdCBzdXBwb3J0ZWQgaW4gRVMyMCkgKi9cclxuICAgIC8qICAgICAgTkVWRVIgKi9cclxuICAgIC8qICAgICAgTEVTUyAqL1xyXG4gICAgLyogICAgICBFUVVBTCAqL1xyXG4gICAgLyogICAgICBMRVFVQUwgKi9cclxuICAgIC8qICAgICAgR1JFQVRFUiAqL1xyXG4gICAgLyogICAgICBOT1RFUVVBTCAqL1xyXG4gICAgLyogICAgICBHRVFVQUwgKi9cclxuICAgIC8qICAgICAgQUxXQVlTICovXHJcblxyXG4gICAgLyogQmxlbmRpbmdGYWN0b3JEZXN0ICovXHJcbiAgICBaRVJPICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwLFxyXG4gICAgT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMSxcclxuICAgIFNSQ19DT0xPUiAgICAgICAgICAgICAgICAgICAgICA6IDB4MDMwMCxcclxuICAgIE9ORV9NSU5VU19TUkNfQ09MT1IgICAgICAgICAgICA6IDB4MDMwMSxcclxuICAgIFNSQ19BTFBIQSAgICAgICAgICAgICAgICAgICAgICA6IDB4MDMwMixcclxuICAgIE9ORV9NSU5VU19TUkNfQUxQSEEgICAgICAgICAgICA6IDB4MDMwMyxcclxuICAgIERTVF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICA6IDB4MDMwNCxcclxuICAgIE9ORV9NSU5VU19EU1RfQUxQSEEgICAgICAgICAgICA6IDB4MDMwNSxcclxuXHJcbiAgICAvKiBCbGVuZGluZ0ZhY3RvclNyYyAqL1xyXG4gICAgLyogICAgICBaRVJPICovXHJcbiAgICAvKiAgICAgIE9ORSAqL1xyXG4gICAgRFNUX0NPTE9SICAgICAgICAgICAgICAgICAgICAgIDogMHgwMzA2LFxyXG4gICAgT05FX01JTlVTX0RTVF9DT0xPUiAgICAgICAgICAgIDogMHgwMzA3LFxyXG4gICAgU1JDX0FMUEhBX1NBVFVSQVRFICAgICAgICAgICAgIDogMHgwMzA4LFxyXG4gICAgLyogICAgICBTUkNfQUxQSEEgKi9cclxuICAgIC8qICAgICAgT05FX01JTlVTX1NSQ19BTFBIQSAqL1xyXG4gICAgLyogICAgICBEU1RfQUxQSEEgKi9cclxuICAgIC8qICAgICAgT05FX01JTlVTX0RTVF9BTFBIQSAqL1xyXG5cclxuICAgIC8qIEJsZW5kRXF1YXRpb25TZXBhcmF0ZSAqL1xyXG4gICAgRlVOQ19BREQgICAgICAgICAgICAgICAgICAgICAgIDogMHg4MDA2LFxyXG4gICAgQkxFTkRfRVFVQVRJT04gICAgICAgICAgICAgICAgIDogMHg4MDA5LFxyXG4gICAgQkxFTkRfRVFVQVRJT05fUkdCICAgICAgICAgICAgIDogMHg4MDA5LCAvKiBzYW1lIGFzIEJMRU5EX0VRVUFUSU9OICovXHJcbiAgICBCTEVORF9FUVVBVElPTl9BTFBIQSAgICAgICAgICAgOiAweDg4M0QsXHJcblxyXG4gICAgLyogQmxlbmRTdWJ0cmFjdCAqL1xyXG4gICAgRlVOQ19TVUJUUkFDVCAgICAgICAgICAgICAgICAgIDogMHg4MDBBLFxyXG4gICAgRlVOQ19SRVZFUlNFX1NVQlRSQUNUICAgICAgICAgIDogMHg4MDBCLFxyXG5cclxuICAgIC8qIFNlcGFyYXRlIEJsZW5kIEZ1bmN0aW9ucyAqL1xyXG4gICAgQkxFTkRfRFNUX1JHQiAgICAgICAgICAgICAgICAgIDogMHg4MEM4LFxyXG4gICAgQkxFTkRfU1JDX1JHQiAgICAgICAgICAgICAgICAgIDogMHg4MEM5LFxyXG4gICAgQkxFTkRfRFNUX0FMUEhBICAgICAgICAgICAgICAgIDogMHg4MENBLFxyXG4gICAgQkxFTkRfU1JDX0FMUEhBICAgICAgICAgICAgICAgIDogMHg4MENCLFxyXG4gICAgQ09OU1RBTlRfQ09MT1IgICAgICAgICAgICAgICAgIDogMHg4MDAxLFxyXG4gICAgT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SICAgICAgIDogMHg4MDAyLFxyXG4gICAgQ09OU1RBTlRfQUxQSEEgICAgICAgICAgICAgICAgIDogMHg4MDAzLFxyXG4gICAgT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBICAgICAgIDogMHg4MDA0LFxyXG4gICAgQkxFTkRfQ09MT1IgICAgICAgICAgICAgICAgICAgIDogMHg4MDA1LFxyXG5cclxuICAgIC8qIEJ1ZmZlciBPYmplY3RzICovXHJcbiAgICBBUlJBWV9CVUZGRVIgICAgICAgICAgICAgICAgICAgOiAweDg4OTIsXHJcbiAgICBFTEVNRU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAgOiAweDg4OTMsXHJcbiAgICBBUlJBWV9CVUZGRVJfQklORElORyAgICAgICAgICAgOiAweDg4OTQsXHJcbiAgICBFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgOiAweDg4OTUsXHJcblxyXG4gICAgU1RSRUFNX0RSQVcgICAgICAgICAgICAgICAgICAgIDogMHg4OEUwLFxyXG4gICAgU1RBVElDX0RSQVcgICAgICAgICAgICAgICAgICAgIDogMHg4OEU0LFxyXG4gICAgRFlOQU1JQ19EUkFXICAgICAgICAgICAgICAgICAgIDogMHg4OEU4LFxyXG5cclxuICAgIEJVRkZFUl9TSVpFICAgICAgICAgICAgICAgICAgICA6IDB4ODc2NCxcclxuICAgIEJVRkZFUl9VU0FHRSAgICAgICAgICAgICAgICAgICA6IDB4ODc2NSxcclxuXHJcbiAgICBDVVJSRU5UX1ZFUlRFWF9BVFRSSUIgICAgICAgICAgOiAweDg2MjYsXHJcblxyXG4gICAgLyogQ3VsbEZhY2VNb2RlICovXHJcbiAgICBGUk9OVCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDA0MDQsXHJcbiAgICBCQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDA0MDUsXHJcbiAgICBGUk9OVF9BTkRfQkFDSyAgICAgICAgICAgICAgICAgOiAweDA0MDgsXHJcblxyXG4gICAgLyogRGVwdGhGdW5jdGlvbiAqL1xyXG4gICAgLyogICAgICBORVZFUiAqL1xyXG4gICAgLyogICAgICBMRVNTICovXHJcbiAgICAvKiAgICAgIEVRVUFMICovXHJcbiAgICAvKiAgICAgIExFUVVBTCAqL1xyXG4gICAgLyogICAgICBHUkVBVEVSICovXHJcbiAgICAvKiAgICAgIE5PVEVRVUFMICovXHJcbiAgICAvKiAgICAgIEdFUVVBTCAqL1xyXG4gICAgLyogICAgICBBTFdBWVMgKi9cclxuXHJcbiAgICAvKiBFbmFibGVDYXAgKi9cclxuICAgIC8qIFRFWFRVUkVfMkQgKi9cclxuICAgIENVTExfRkFDRSAgICAgICAgICAgICAgICAgICAgICA6IDB4MEI0NCxcclxuICAgIEJMRU5EICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MEJFMixcclxuICAgIERJVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MEJEMCxcclxuICAgIFNURU5DSUxfVEVTVCAgICAgICAgICAgICAgICAgICA6IDB4MEI5MCxcclxuICAgIERFUFRIX1RFU1QgICAgICAgICAgICAgICAgICAgICA6IDB4MEI3MSxcclxuICAgIFNDSVNTT1JfVEVTVCAgICAgICAgICAgICAgICAgICA6IDB4MEMxMSxcclxuICAgIFBPTFlHT05fT0ZGU0VUX0ZJTEwgICAgICAgICAgICA6IDB4ODAzNyxcclxuICAgIFNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSAgICAgICA6IDB4ODA5RSxcclxuICAgIFNBTVBMRV9DT1ZFUkFHRSAgICAgICAgICAgICAgICA6IDB4ODBBMCxcclxuXHJcbiAgICAvKiBFcnJvckNvZGUgKi9cclxuICAgIE5PX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICA6IDAsXHJcbiAgICBJTlZBTElEX0VOVU0gICAgICAgICAgICAgICAgICAgOiAweDA1MDAsXHJcbiAgICBJTlZBTElEX1ZBTFVFICAgICAgICAgICAgICAgICAgOiAweDA1MDEsXHJcbiAgICBJTlZBTElEX09QRVJBVElPTiAgICAgICAgICAgICAgOiAweDA1MDIsXHJcbiAgICBPVVRfT0ZfTUVNT1JZICAgICAgICAgICAgICAgICAgOiAweDA1MDUsXHJcblxyXG4gICAgLyogRnJvbnRGYWNlRGlyZWN0aW9uICovXHJcbiAgICBDVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDA5MDAsXHJcbiAgICBDQ1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDA5MDEsXHJcblxyXG4gICAgLyogR2V0UE5hbWUgKi9cclxuICAgIExJTkVfV0lEVEggICAgICAgICAgICAgICAgICAgICA6IDB4MEIyMSxcclxuICAgIEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRSAgICAgICA6IDB4ODQ2RCxcclxuICAgIEFMSUFTRURfTElORV9XSURUSF9SQU5HRSAgICAgICA6IDB4ODQ2RSxcclxuICAgIENVTExfRkFDRV9NT0RFICAgICAgICAgICAgICAgICA6IDB4MEI0NSxcclxuICAgIEZST05UX0ZBQ0UgICAgICAgICAgICAgICAgICAgICA6IDB4MEI0NixcclxuICAgIERFUFRIX1JBTkdFICAgICAgICAgICAgICAgICAgICA6IDB4MEI3MCxcclxuICAgIERFUFRIX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA6IDB4MEI3MixcclxuICAgIERFUFRIX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICA6IDB4MEI3MyxcclxuICAgIERFUFRIX0ZVTkMgICAgICAgICAgICAgICAgICAgICA6IDB4MEI3NCxcclxuICAgIFNURU5DSUxfQ0xFQVJfVkFMVUUgICAgICAgICAgICA6IDB4MEI5MSxcclxuICAgIFNURU5DSUxfRlVOQyAgICAgICAgICAgICAgICAgICA6IDB4MEI5MixcclxuICAgIFNURU5DSUxfRkFJTCAgICAgICAgICAgICAgICAgICA6IDB4MEI5NCxcclxuICAgIFNURU5DSUxfUEFTU19ERVBUSF9GQUlMICAgICAgICA6IDB4MEI5NSxcclxuICAgIFNURU5DSUxfUEFTU19ERVBUSF9QQVNTICAgICAgICA6IDB4MEI5NixcclxuICAgIFNURU5DSUxfUkVGICAgICAgICAgICAgICAgICAgICA6IDB4MEI5NyxcclxuICAgIFNURU5DSUxfVkFMVUVfTUFTSyAgICAgICAgICAgICA6IDB4MEI5MyxcclxuICAgIFNURU5DSUxfV1JJVEVNQVNLICAgICAgICAgICAgICA6IDB4MEI5OCxcclxuICAgIFNURU5DSUxfQkFDS19GVU5DICAgICAgICAgICAgICA6IDB4ODgwMCxcclxuICAgIFNURU5DSUxfQkFDS19GQUlMICAgICAgICAgICAgICA6IDB4ODgwMSxcclxuICAgIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwgICA6IDB4ODgwMixcclxuICAgIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgICA6IDB4ODgwMyxcclxuICAgIFNURU5DSUxfQkFDS19SRUYgICAgICAgICAgICAgICA6IDB4OENBMyxcclxuICAgIFNURU5DSUxfQkFDS19WQUxVRV9NQVNLICAgICAgICA6IDB4OENBNCxcclxuICAgIFNURU5DSUxfQkFDS19XUklURU1BU0sgICAgICAgICA6IDB4OENBNSxcclxuICAgIFZJRVdQT1JUICAgICAgICAgICAgICAgICAgICAgICA6IDB4MEJBMixcclxuICAgIFNDSVNTT1JfQk9YICAgICAgICAgICAgICAgICAgICA6IDB4MEMxMCxcclxuICAgIC8qICAgICAgU0NJU1NPUl9URVNUICovXHJcbiAgICBDT0xPUl9DTEVBUl9WQUxVRSAgICAgICAgICAgICAgOiAweDBDMjIsXHJcbiAgICBDT0xPUl9XUklURU1BU0sgICAgICAgICAgICAgICAgOiAweDBDMjMsXHJcbiAgICBVTlBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgOiAweDBDRjUsXHJcbiAgICBQQUNLX0FMSUdOTUVOVCAgICAgICAgICAgICAgICAgOiAweDBEMDUsXHJcbiAgICBNQVhfVEVYVFVSRV9TSVpFICAgICAgICAgICAgICAgOiAweDBEMzMsXHJcbiAgICBNQVhfVklFV1BPUlRfRElNUyAgICAgICAgICAgICAgOiAweDBEM0EsXHJcbiAgICBTVUJQSVhFTF9CSVRTICAgICAgICAgICAgICAgICAgOiAweDBENTAsXHJcbiAgICBSRURfQklUUyAgICAgICAgICAgICAgICAgICAgICAgOiAweDBENTIsXHJcbiAgICBHUkVFTl9CSVRTICAgICAgICAgICAgICAgICAgICAgOiAweDBENTMsXHJcbiAgICBCTFVFX0JJVFMgICAgICAgICAgICAgICAgICAgICAgOiAweDBENTQsXHJcbiAgICBBTFBIQV9CSVRTICAgICAgICAgICAgICAgICAgICAgOiAweDBENTUsXHJcbiAgICBERVBUSF9CSVRTICAgICAgICAgICAgICAgICAgICAgOiAweDBENTYsXHJcbiAgICBTVEVOQ0lMX0JJVFMgICAgICAgICAgICAgICAgICAgOiAweDBENTcsXHJcbiAgICBQT0xZR09OX09GRlNFVF9VTklUUyAgICAgICAgICAgOiAweDJBMDAsXHJcbiAgICAvKiAgICAgIFBPTFlHT05fT0ZGU0VUX0ZJTEwgKi9cclxuICAgIFBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICA6IDB4ODAzOCxcclxuICAgIFRFWFRVUkVfQklORElOR18yRCAgICAgICAgICAgICA6IDB4ODA2OSxcclxuICAgIFNBTVBMRV9CVUZGRVJTICAgICAgICAgICAgICAgICA6IDB4ODBBOCxcclxuICAgIFNBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgICA6IDB4ODBBOSxcclxuICAgIFNBTVBMRV9DT1ZFUkFHRV9WQUxVRSAgICAgICAgICA6IDB4ODBBQSxcclxuICAgIFNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQgICAgICAgICA6IDB4ODBBQixcclxuXHJcbiAgICAvKiBHZXRUZXh0dXJlUGFyYW1ldGVyICovXHJcbiAgICAvKiAgICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiAqL1xyXG4gICAgLyogICAgICBURVhUVVJFX01JTl9GSUxURVIgKi9cclxuICAgIC8qICAgICAgVEVYVFVSRV9XUkFQX1MgKi9cclxuICAgIC8qICAgICAgVEVYVFVSRV9XUkFQX1QgKi9cclxuXHJcbiAgICBDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyAgICAgOiAweDg2QTMsXHJcblxyXG4gICAgLyogSGludE1vZGUgKi9cclxuICAgIERPTlRfQ0FSRSAgICAgICAgICAgICAgICAgICAgICA6IDB4MTEwMCxcclxuICAgIEZBU1RFU1QgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTEwMSxcclxuICAgIE5JQ0VTVCAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTEwMixcclxuXHJcbiAgICAvKiBIaW50VGFyZ2V0ICovXHJcbiAgICBHRU5FUkFURV9NSVBNQVBfSElOVCAgICAgICAgICAgIDogMHg4MTkyLFxyXG5cclxuICAgIC8qIERhdGFUeXBlICovXHJcbiAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE0MDAsXHJcbiAgICBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAgOiAweDE0MDEsXHJcbiAgICBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE0MDIsXHJcbiAgICBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAgOiAweDE0MDMsXHJcbiAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE0MDQsXHJcbiAgICBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAgOiAweDE0MDUsXHJcbiAgICBGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDE0MDYsXHJcblxyXG4gICAgLyogUGl4ZWxGb3JtYXQgKi9cclxuICAgIERFUFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICA6IDB4MTkwMixcclxuICAgIEFMUEhBICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTkwNixcclxuICAgIFJHQiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTkwNyxcclxuICAgIFJHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MTkwOCxcclxuICAgIExVTUlOQU5DRSAgICAgICAgICAgICAgICAgICAgICA6IDB4MTkwOSxcclxuICAgIExVTUlOQU5DRV9BTFBIQSAgICAgICAgICAgICAgICA6IDB4MTkwQSxcclxuXHJcbiAgICAvKiBQaXhlbFR5cGUgKi9cclxuICAgIC8qICAgICAgVU5TSUdORURfQllURSAqL1xyXG4gICAgVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgIDogMHg4MDMzLFxyXG4gICAgVU5TSUdORURfU0hPUlRfNV81XzVfMSAgICAgICAgIDogMHg4MDM0LFxyXG4gICAgVU5TSUdORURfU0hPUlRfNV82XzUgICAgICAgICAgIDogMHg4MzYzLFxyXG5cclxuICAgIC8qIFNoYWRlcnMgKi9cclxuICAgIEZSQUdNRU5UX1NIQURFUiAgICAgICAgICAgICAgICAgIDogMHg4QjMwLFxyXG4gICAgVkVSVEVYX1NIQURFUiAgICAgICAgICAgICAgICAgICAgOiAweDhCMzEsXHJcbiAgICBNQVhfVkVSVEVYX0FUVFJJQlMgICAgICAgICAgICAgICA6IDB4ODg2OSxcclxuICAgIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTICAgICAgIDogMHg4REZCLFxyXG4gICAgTUFYX1ZBUllJTkdfVkVDVE9SUyAgICAgICAgICAgICAgOiAweDhERkMsXHJcbiAgICBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA6IDB4OEI0RCxcclxuICAgIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgIDogMHg4QjRDLFxyXG4gICAgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgICAgICAgICAgOiAweDg4NzIsXHJcbiAgICBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTICAgICA6IDB4OERGRCxcclxuICAgIFNIQURFUl9UWVBFICAgICAgICAgICAgICAgICAgICAgIDogMHg4QjRGLFxyXG4gICAgREVMRVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgOiAweDhCODAsXHJcbiAgICBMSU5LX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI4MixcclxuICAgIFZBTElEQVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgIDogMHg4QjgzLFxyXG4gICAgQVRUQUNIRURfU0hBREVSUyAgICAgICAgICAgICAgICAgOiAweDhCODUsXHJcbiAgICBBQ1RJVkVfVU5JRk9STVMgICAgICAgICAgICAgICAgICA6IDB4OEI4NixcclxuICAgIEFDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICAgICAgIDogMHg4Qjg5LFxyXG4gICAgU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OICAgICAgICAgOiAweDhCOEMsXHJcbiAgICBDVVJSRU5UX1BST0dSQU0gICAgICAgICAgICAgICAgICA6IDB4OEI4RCxcclxuXHJcbiAgICAvKiBTdGVuY2lsRnVuY3Rpb24gKi9cclxuICAgIE5FVkVSICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwMCxcclxuICAgIExFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwMSxcclxuICAgIEVRVUFMICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwMixcclxuICAgIExFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwMyxcclxuICAgIEdSRUFURVIgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwNCxcclxuICAgIE5PVEVRVUFMICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwNSxcclxuICAgIEdFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwNixcclxuICAgIEFMV0FZUyAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MDIwNyxcclxuXHJcbiAgICAvKiBTdGVuY2lsT3AgKi9cclxuICAgIC8qICAgICAgWkVSTyAqL1xyXG4gICAgS0VFUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRTAwLFxyXG4gICAgUkVQTEFDRSAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRTAxLFxyXG4gICAgSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRTAyLFxyXG4gICAgREVDUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxRTAzLFxyXG4gICAgSU5WRVJUICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxNTBBLFxyXG4gICAgSU5DUl9XUkFQICAgICAgICAgICAgICAgICAgICAgIDogMHg4NTA3LFxyXG4gICAgREVDUl9XUkFQICAgICAgICAgICAgICAgICAgICAgIDogMHg4NTA4LFxyXG5cclxuICAgIC8qIFN0cmluZ05hbWUgKi9cclxuICAgIFZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4MUYwMCxcclxuICAgIFJFTkRFUkVSICAgICAgICAgICAgICAgICAgICAgICA6IDB4MUYwMSxcclxuICAgIFZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICA6IDB4MUYwMixcclxuXHJcbiAgICAvKiBUZXh0dXJlTWFnRmlsdGVyICovXHJcbiAgICBORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAgOiAweDI2MDAsXHJcbiAgICBMSU5FQVIgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDI2MDEsXHJcblxyXG4gICAgLyogVGV4dHVyZU1pbkZpbHRlciAqL1xyXG4gICAgLyogICAgICBORUFSRVNUICovXHJcbiAgICAvKiAgICAgIExJTkVBUiAqL1xyXG4gICAgTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCAgICAgICAgIDogMHgyNzAwLFxyXG4gICAgTElORUFSX01JUE1BUF9ORUFSRVNUICAgICAgICAgIDogMHgyNzAxLFxyXG4gICAgTkVBUkVTVF9NSVBNQVBfTElORUFSICAgICAgICAgIDogMHgyNzAyLFxyXG4gICAgTElORUFSX01JUE1BUF9MSU5FQVIgICAgICAgICAgIDogMHgyNzAzLFxyXG5cclxuICAgIC8qIFRleHR1cmVQYXJhbWV0ZXJOYW1lICovXHJcbiAgICBURVhUVVJFX01BR19GSUxURVIgICAgICAgICAgICAgOiAweDI4MDAsXHJcbiAgICBURVhUVVJFX01JTl9GSUxURVIgICAgICAgICAgICAgOiAweDI4MDEsXHJcbiAgICBURVhUVVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgOiAweDI4MDIsXHJcbiAgICBURVhUVVJFX1dSQVBfVCAgICAgICAgICAgICAgICAgOiAweDI4MDMsXHJcblxyXG4gICAgLyogVGV4dHVyZVRhcmdldCAqL1xyXG4gICAgVEVYVFVSRV8yRCAgICAgICAgICAgICAgICAgICAgIDogMHgwREUxLFxyXG4gICAgVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgIDogMHgxNzAyLFxyXG5cclxuICAgIFRFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAgICA6IDB4ODUxMyxcclxuICAgIFRFWFRVUkVfQklORElOR19DVUJFX01BUCAgICAgICA6IDB4ODUxNCxcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCAgICA6IDB4ODUxNSxcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICA6IDB4ODUxNixcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAgICA6IDB4ODUxNyxcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSAgICA6IDB4ODUxOCxcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAgICA6IDB4ODUxOSxcclxuICAgIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAgICA6IDB4ODUxQSxcclxuICAgIE1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgICAgICA6IDB4ODUxQyxcclxuXHJcbiAgICAvKiBUZXh0dXJlVW5pdCAqL1xyXG4gICAgVEVYVFVSRTAgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEMwLFxyXG4gICAgVEVYVFVSRTEgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEMxLFxyXG4gICAgVEVYVFVSRTIgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEMyLFxyXG4gICAgVEVYVFVSRTMgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEMzLFxyXG4gICAgVEVYVFVSRTQgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM0LFxyXG4gICAgVEVYVFVSRTUgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM1LFxyXG4gICAgVEVYVFVSRTYgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM2LFxyXG4gICAgVEVYVFVSRTcgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM3LFxyXG4gICAgVEVYVFVSRTggICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM4LFxyXG4gICAgVEVYVFVSRTkgICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEM5LFxyXG4gICAgVEVYVFVSRTEwICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENBLFxyXG4gICAgVEVYVFVSRTExICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENCLFxyXG4gICAgVEVYVFVSRTEyICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENDLFxyXG4gICAgVEVYVFVSRTEzICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENELFxyXG4gICAgVEVYVFVSRTE0ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENFLFxyXG4gICAgVEVYVFVSRTE1ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NENGLFxyXG4gICAgVEVYVFVSRTE2ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQwLFxyXG4gICAgVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQxLFxyXG4gICAgVEVYVFVSRTE4ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQyLFxyXG4gICAgVEVYVFVSRTE5ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQzLFxyXG4gICAgVEVYVFVSRTIwICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ0LFxyXG4gICAgVEVYVFVSRTIxICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ1LFxyXG4gICAgVEVYVFVSRTIyICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ2LFxyXG4gICAgVEVYVFVSRTIzICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ3LFxyXG4gICAgVEVYVFVSRTI0ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ4LFxyXG4gICAgVEVYVFVSRTI1ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NEQ5LFxyXG4gICAgVEVYVFVSRTI2ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERBLFxyXG4gICAgVEVYVFVSRTI3ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERCLFxyXG4gICAgVEVYVFVSRTI4ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERDLFxyXG4gICAgVEVYVFVSRTI5ICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERELFxyXG4gICAgVEVYVFVSRTMwICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERFLFxyXG4gICAgVEVYVFVSRTMxICAgICAgICAgICAgICAgICAgICAgIDogMHg4NERGLFxyXG4gICAgQUNUSVZFX1RFWFRVUkUgICAgICAgICAgICAgICAgIDogMHg4NEUwLFxyXG5cclxuICAgIC8qIFRleHR1cmVXcmFwTW9kZSAqL1xyXG4gICAgUkVQRUFUICAgICAgICAgICAgICAgICAgICAgICAgIDogMHgyOTAxLFxyXG4gICAgQ0xBTVBfVE9fRURHRSAgICAgICAgICAgICAgICAgIDogMHg4MTJGLFxyXG4gICAgTUlSUk9SRURfUkVQRUFUICAgICAgICAgICAgICAgIDogMHg4MzcwLFxyXG5cclxuICAgIC8qIFVuaWZvcm0gVHlwZXMgKi9cclxuICAgIEZMT0FUX1ZFQzIgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1MCxcclxuICAgIEZMT0FUX1ZFQzMgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1MSxcclxuICAgIEZMT0FUX1ZFQzQgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1MixcclxuICAgIElOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1MyxcclxuICAgIElOVF9WRUMzICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1NCxcclxuICAgIElOVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1NSxcclxuICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1NixcclxuICAgIEJPT0xfVkVDMiAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1NyxcclxuICAgIEJPT0xfVkVDMyAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1OCxcclxuICAgIEJPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1OSxcclxuICAgIEZMT0FUX01BVDIgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1QSxcclxuICAgIEZMT0FUX01BVDMgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1QixcclxuICAgIEZMT0FUX01BVDQgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1QyxcclxuICAgIFNBTVBMRVJfMkQgICAgICAgICAgICAgICAgICAgICA6IDB4OEI1RSxcclxuICAgIFNBTVBMRVJfQ1VCRSAgICAgICAgICAgICAgICAgICA6IDB4OEI2MCxcclxuXHJcbiAgICAvKiBWZXJ0ZXggQXJyYXlzICovXHJcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQgICAgICAgIDogMHg4NjIyLFxyXG4gICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFICAgICAgICAgICA6IDB4ODYyMyxcclxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFICAgICAgICAgOiAweDg2MjQsXHJcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUgICAgICAgICAgIDogMHg4NjI1LFxyXG4gICAgVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEICAgICA6IDB4ODg2QSxcclxuICAgIFZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUiAgICAgICAgOiAweDg2NDUsXHJcbiAgICBWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HIDogMHg4ODlGLFxyXG5cclxuICAgIC8qIFNoYWRlciBTb3VyY2UgKi9cclxuICAgIENPTVBJTEVfU1RBVFVTICAgICAgICAgICAgICAgICA6IDB4OEI4MSxcclxuXHJcbiAgICAvKiBTaGFkZXIgUHJlY2lzaW9uLVNwZWNpZmllZCBUeXBlcyAqL1xyXG4gICAgTE9XX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgIDogMHg4REYwLFxyXG4gICAgTUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgIDogMHg4REYxLFxyXG4gICAgSElHSF9GTE9BVCAgICAgICAgICAgICAgICAgICAgIDogMHg4REYyLFxyXG4gICAgTE9XX0lOVCAgICAgICAgICAgICAgICAgICAgICAgIDogMHg4REYzLFxyXG4gICAgTUVESVVNX0lOVCAgICAgICAgICAgICAgICAgICAgIDogMHg4REY0LFxyXG4gICAgSElHSF9JTlQgICAgICAgICAgICAgICAgICAgICAgIDogMHg4REY1LFxyXG5cclxuICAgIC8qIEZyYW1lYnVmZmVyIE9iamVjdC4gKi9cclxuICAgIEZSQU1FQlVGRkVSICAgICAgICAgICAgICAgICAgICA6IDB4OEQ0MCxcclxuICAgIFJFTkRFUkJVRkZFUiAgICAgICAgICAgICAgICAgICA6IDB4OEQ0MSxcclxuXHJcbiAgICBSR0JBNCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDgwNTYsXHJcbiAgICBSR0I1X0ExICAgICAgICAgICAgICAgICAgICAgICAgOiAweDgwNTcsXHJcbiAgICBSR0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgOiAweDhENjIsXHJcbiAgICBERVBUSF9DT01QT05FTlQxNiAgICAgICAgICAgICAgOiAweDgxQTUsXHJcbiAgICBTVEVOQ0lMX0lOREVYICAgICAgICAgICAgICAgICAgOiAweDE5MDEsXHJcbiAgICBTVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgOiAweDhENDgsXHJcbiAgICBERVBUSF9TVEVOQ0lMICAgICAgICAgICAgICAgICAgOiAweDg0RjksXHJcblxyXG4gICAgUkVOREVSQlVGRkVSX1dJRFRIICAgICAgICAgICAgIDogMHg4RDQyLFxyXG4gICAgUkVOREVSQlVGRkVSX0hFSUdIVCAgICAgICAgICAgIDogMHg4RDQzLFxyXG4gICAgUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCAgIDogMHg4RDQ0LFxyXG4gICAgUkVOREVSQlVGRkVSX1JFRF9TSVpFICAgICAgICAgIDogMHg4RDUwLFxyXG4gICAgUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUgICAgICAgIDogMHg4RDUxLFxyXG4gICAgUkVOREVSQlVGRkVSX0JMVUVfU0laRSAgICAgICAgIDogMHg4RDUyLFxyXG4gICAgUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUgICAgICAgIDogMHg4RDUzLFxyXG4gICAgUkVOREVSQlVGRkVSX0RFUFRIX1NJWkUgICAgICAgIDogMHg4RDU0LFxyXG4gICAgUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSAgICAgIDogMHg4RDU1LFxyXG5cclxuICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUgICAgICAgICAgIDogMHg4Q0QwLFxyXG4gICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSAgICAgICAgICAgOiAweDhDRDEsXHJcbiAgICBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUwgICAgICAgICA6IDB4OENEMixcclxuICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFIDogMHg4Q0QzLFxyXG5cclxuICAgIENPTE9SX0FUVEFDSE1FTlQwICAgICAgICAgICAgICA6IDB4OENFMCxcclxuICAgIERFUFRIX0FUVEFDSE1FTlQgICAgICAgICAgICAgICA6IDB4OEQwMCxcclxuICAgIFNURU5DSUxfQVRUQUNITUVOVCAgICAgICAgICAgICA6IDB4OEQyMCxcclxuICAgIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCAgICAgICA6IDB4ODIxQSxcclxuXHJcbiAgICBOT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwLFxyXG5cclxuICAgIEZSQU1FQlVGRkVSX0NPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgIDogMHg4Q0Q1LFxyXG4gICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UICAgICAgICAgOiAweDhDRDYsXHJcbiAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCA6IDB4OENENyxcclxuICAgIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyAgICAgICAgIDogMHg4Q0Q5LFxyXG4gICAgRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgOiAweDhDREQsXHJcblxyXG4gICAgRlJBTUVCVUZGRVJfQklORElORyAgICAgICAgICAgIDogMHg4Q0E2LFxyXG4gICAgUkVOREVSQlVGRkVSX0JJTkRJTkcgICAgICAgICAgIDogMHg4Q0E3LFxyXG4gICAgTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgIDogMHg4NEU4LFxyXG5cclxuICAgIElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICA6IDB4MDUwNixcclxuXHJcbiAgICAvKiBXZWJHTC1zcGVjaWZpYyBlbnVtcyAqL1xyXG4gICAgVU5QQUNLX0ZMSVBfWV9XRUJHTCAgICAgICAgICAgIDogMHg5MjQwLFxyXG4gICAgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIDogMHg5MjQxLFxyXG4gICAgQ09OVEVYVF9MT1NUX1dFQkdMICAgICAgICAgICAgIDogMHg5MjQyLFxyXG4gICAgVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCA6IDB4OTI0MyxcclxuICAgIEJST1dTRVJfREVGQVVMVF9XRUJHTCAgICAgICAgICA6IDB4OTI0NCxcclxufTtcclxuIiwiLyoqXHJcbiAqIFNpbXBsZSBkb3VibGUgbGlua2VkIGxpc3QuIENvbXBhcmVkIHdpdGggYXJyYXksIGl0IGhhcyBPKDEpIHJlbW92ZSBvcGVyYXRpb24uXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5jb3JlLkxpbmtlZExpc3RcclxuICovXHJcbnZhciBMaW5rZWRMaXN0ID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLmhlYWQgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRhaWwgPSBudWxsO1xyXG5cclxuICAgIHRoaXMuX2xlbmd0aCA9IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogSW5zZXJ0IGEgbmV3IHZhbHVlIGF0IHRoZSB0YWlsXHJcbiAqIEBwYXJhbSAge30gdmFsXHJcbiAqIEByZXR1cm4ge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24gKHZhbCkge1xyXG4gICAgdmFyIGVudHJ5ID0gbmV3IExpbmtlZExpc3QuRW50cnkodmFsKTtcclxuICAgIHRoaXMuaW5zZXJ0RW50cnkoZW50cnkpO1xyXG4gICAgcmV0dXJuIGVudHJ5O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEluc2VydCBhIG5ldyB2YWx1ZSBhdCBpZHhcclxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gKiBAcGFyYW0gIHt9IHZhbFxyXG4gKiBAcmV0dXJuIHtjbGF5LmNvcmUuTGlua2VkTGlzdC5FbnRyeX1cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmluc2VydEF0ID0gZnVuY3Rpb24gKGlkeCwgdmFsKSB7XHJcbiAgICBpZiAoaWR4IDwgMCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBuZXh0ID0gdGhpcy5oZWFkO1xyXG4gICAgdmFyIGN1cnNvciA9IDA7XHJcbiAgICB3aGlsZSAobmV4dCAmJiBjdXJzb3IgIT0gaWR4KSB7XHJcbiAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcclxuICAgICAgICBjdXJzb3IrKztcclxuICAgIH1cclxuICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gbmV3IExpbmtlZExpc3QuRW50cnkodmFsKTtcclxuICAgICAgICB2YXIgcHJldiA9IG5leHQucHJldjtcclxuICAgICAgICBpZiAoIXByZXYpIHsgLy9uZXh0IGlzIGhlYWRcclxuICAgICAgICAgICAgdGhpcy5oZWFkID0gZW50cnk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBwcmV2Lm5leHQgPSBlbnRyeTtcclxuICAgICAgICAgICAgZW50cnkucHJldiA9IHByZXY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVudHJ5Lm5leHQgPSBuZXh0O1xyXG4gICAgICAgIG5leHQucHJldiA9IGVudHJ5O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pbnNlcnQodmFsKTtcclxuICAgIH1cclxufTtcclxuXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmluc2VydEJlZm9yZUVudHJ5ID0gZnVuY3Rpb24gKHZhbCwgbmV4dCkge1xyXG4gICAgdmFyIGVudHJ5ID0gbmV3IExpbmtlZExpc3QuRW50cnkodmFsKTtcclxuICAgIHZhciBwcmV2ID0gbmV4dC5wcmV2O1xyXG4gICAgaWYgKCFwcmV2KSB7IC8vbmV4dCBpcyBoZWFkXHJcbiAgICAgICAgdGhpcy5oZWFkID0gZW50cnk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBwcmV2Lm5leHQgPSBlbnRyeTtcclxuICAgICAgICBlbnRyeS5wcmV2ID0gcHJldjtcclxuICAgIH1cclxuICAgIGVudHJ5Lm5leHQgPSBuZXh0O1xyXG4gICAgbmV4dC5wcmV2ID0gZW50cnk7XHJcblxyXG4gICAgdGhpcy5fbGVuZ3RoKys7XHJcbn07XHJcblxyXG4vKipcclxuICogSW5zZXJ0IGFuIGVudHJ5IGF0IHRoZSB0YWlsXHJcbiAqIEBwYXJhbSAge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fSBlbnRyeVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUuaW5zZXJ0RW50cnkgPSBmdW5jdGlvbiAoZW50cnkpIHtcclxuICAgIGlmICghdGhpcy5oZWFkKSB7XHJcbiAgICAgICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gZW50cnk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnRhaWwubmV4dCA9IGVudHJ5O1xyXG4gICAgICAgIGVudHJ5LnByZXYgPSB0aGlzLnRhaWw7XHJcbiAgICAgICAgdGhpcy50YWlsID0gZW50cnk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9sZW5ndGgrKztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZW1vdmUgZW50cnkuXHJcbiAqIEBwYXJhbSAge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fSBlbnRyeVxyXG4gKi9cclxuTGlua2VkTGlzdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGVudHJ5KSB7XHJcbiAgICB2YXIgcHJldiA9IGVudHJ5LnByZXY7XHJcbiAgICB2YXIgbmV4dCA9IGVudHJ5Lm5leHQ7XHJcbiAgICBpZiAocHJldikge1xyXG4gICAgICAgIHByZXYubmV4dCA9IG5leHQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvLyBJcyBoZWFkXHJcbiAgICAgICAgdGhpcy5oZWFkID0gbmV4dDtcclxuICAgIH1cclxuICAgIGlmIChuZXh0KSB7XHJcbiAgICAgICAgbmV4dC5wcmV2ID0gcHJldjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIElzIHRhaWxcclxuICAgICAgICB0aGlzLnRhaWwgPSBwcmV2O1xyXG4gICAgfVxyXG4gICAgZW50cnkubmV4dCA9IGVudHJ5LnByZXYgPSBudWxsO1xyXG4gICAgdGhpcy5fbGVuZ3RoLS07XHJcbn07XHJcblxyXG4vKipcclxuICogUmVtb3ZlIGVudHJ5IGF0IGluZGV4LlxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IGlkeFxyXG4gKiBAcmV0dXJuIHt9XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5yZW1vdmVBdCA9IGZ1bmN0aW9uIChpZHgpIHtcclxuICAgIGlmIChpZHggPCAwKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGN1cnIgPSB0aGlzLmhlYWQ7XHJcbiAgICB2YXIgY3Vyc29yID0gMDtcclxuICAgIHdoaWxlIChjdXJyICYmIGN1cnNvciAhPSBpZHgpIHtcclxuICAgICAgICBjdXJyID0gY3Vyci5uZXh0O1xyXG4gICAgICAgIGN1cnNvcisrO1xyXG4gICAgfVxyXG4gICAgaWYgKGN1cnIpIHtcclxuICAgICAgICB0aGlzLnJlbW92ZShjdXJyKTtcclxuICAgICAgICByZXR1cm4gY3Vyci52YWx1ZTtcclxuICAgIH1cclxufTtcclxuLyoqXHJcbiAqIEdldCBoZWFkIHZhbHVlXHJcbiAqIEByZXR1cm4ge31cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmdldEhlYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodGhpcy5oZWFkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVhZC52YWx1ZTtcclxuICAgIH1cclxufTtcclxuLyoqXHJcbiAqIEdldCB0YWlsIHZhbHVlXHJcbiAqIEByZXR1cm4ge31cclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmdldFRhaWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodGhpcy50YWlsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGFpbC52YWx1ZTtcclxuICAgIH1cclxufTtcclxuLyoqXHJcbiAqIEdldCB2YWx1ZSBhdCBpZHhcclxuICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gKiBAcmV0dXJuIHt9XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5nZXRBdCA9IGZ1bmN0aW9uIChpZHgpIHtcclxuICAgIGlmIChpZHggPCAwKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGN1cnIgPSB0aGlzLmhlYWQ7XHJcbiAgICB2YXIgY3Vyc29yID0gMDtcclxuICAgIHdoaWxlIChjdXJyICYmIGN1cnNvciAhPSBpZHgpIHtcclxuICAgICAgICBjdXJyID0gY3Vyci5uZXh0O1xyXG4gICAgICAgIGN1cnNvcisrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN1cnIudmFsdWU7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7fSB2YWx1ZVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICB2YXIgY3VyciA9IHRoaXMuaGVhZDtcclxuICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgd2hpbGUgKGN1cnIpIHtcclxuICAgICAgICBpZiAoY3Vyci52YWx1ZSA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGN1cnNvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY3VyciA9IGN1cnIubmV4dDtcclxuICAgICAgICBjdXJzb3IrKztcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIElmIGxpc3QgaXMgZW1wdHlcclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGVuZ3RoID09PSAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYlxyXG4gKiBAcGFyYW0gIHt9IGNvbnRleHRcclxuICovXHJcbkxpbmtlZExpc3QucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2IsIGNvbnRleHQpIHtcclxuICAgIHZhciBjdXJyID0gdGhpcy5oZWFkO1xyXG4gICAgdmFyIGlkeCA9IDA7XHJcbiAgICB2YXIgaGF2ZUNvbnRleHQgPSB0eXBlb2YoY29udGV4dCkgIT0gJ3VuZGVmaW5lZCc7XHJcbiAgICB3aGlsZSAoY3Vycikge1xyXG4gICAgICAgIGlmIChoYXZlQ29udGV4dCkge1xyXG4gICAgICAgICAgICBjYi5jYWxsKGNvbnRleHQsIGN1cnIudmFsdWUsIGlkeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjYihjdXJyLnZhbHVlLCBpZHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyID0gY3Vyci5uZXh0O1xyXG4gICAgICAgIGlkeCsrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsZWFyIHRoZSBsaXN0XHJcbiAqL1xyXG5MaW5rZWRMaXN0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMudGFpbCA9IHRoaXMuaGVhZCA9IG51bGw7XHJcbiAgICB0aGlzLl9sZW5ndGggPSAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAcGFyYW0ge30gdmFsXHJcbiAqL1xyXG5MaW5rZWRMaXN0LkVudHJ5ID0gZnVuY3Rpb24gKHZhbCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZhbHVlID0gdmFsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLm5leHQgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuY29yZS5MaW5rZWRMaXN0LkVudHJ5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnByZXYgPSBudWxsO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlua2VkTGlzdDtcclxuIiwiaW1wb3J0IExpbmtlZExpc3QgZnJvbSAnLi9MaW5rZWRMaXN0JztcclxuXHJcbi8qKlxyXG4gKiBMUlUgQ2FjaGVcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmNvcmUuTFJVXHJcbiAqL1xyXG52YXIgTFJVID0gZnVuY3Rpb24gKG1heFNpemUpIHtcclxuXHJcbiAgICB0aGlzLl9saXN0ID0gbmV3IExpbmtlZExpc3QoKTtcclxuXHJcbiAgICB0aGlzLl9tYXAgPSB7fTtcclxuXHJcbiAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZSB8fCAxMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgY2FjaGUgbWF4IHNpemVcclxuICogQHBhcmFtIHtudW1iZXJ9IHNpemVcclxuICovXHJcbkxSVS5wcm90b3R5cGUuc2V0TWF4U2l6ZSA9IGZ1bmN0aW9uIChzaXplKSB7XHJcbiAgICB0aGlzLl9tYXhTaXplID0gc2l6ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGtleVxyXG4gKiBAcGFyYW0gIHt9IHZhbHVlXHJcbiAqL1xyXG5MUlUucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICBpZiAoIXRoaXMuX21hcC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgdmFyIGxlbiA9IHRoaXMuX2xpc3QubGVuZ3RoKCk7XHJcbiAgICAgICAgaWYgKGxlbiA+PSB0aGlzLl9tYXhTaXplICYmIGxlbiA+IDApIHtcclxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkXHJcbiAgICAgICAgICAgIHZhciBsZWFzdFVzZWRFbnRyeSA9IHRoaXMuX2xpc3QuaGVhZDtcclxuICAgICAgICAgICAgdGhpcy5fbGlzdC5yZW1vdmUobGVhc3RVc2VkRW50cnkpO1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fbWFwW2xlYXN0VXNlZEVudHJ5LmtleV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLl9saXN0Lmluc2VydCh2YWx1ZSk7XHJcbiAgICAgICAgZW50cnkua2V5ID0ga2V5O1xyXG4gICAgICAgIHRoaXMuX21hcFtrZXldID0gZW50cnk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7c3RyaW5nfSBrZXlcclxuICogQHJldHVybiB7fVxyXG4gKi9cclxuTFJVLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICB2YXIgZW50cnkgPSB0aGlzLl9tYXBba2V5XTtcclxuICAgIGlmICh0aGlzLl9tYXAuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIC8vIFB1dCB0aGUgbGF0ZXN0IHVzZWQgZW50cnkgaW4gdGhlIHRhaWxcclxuICAgICAgICBpZiAoZW50cnkgIT09IHRoaXMuX2xpc3QudGFpbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9saXN0LnJlbW92ZShlbnRyeSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpc3QuaW5zZXJ0RW50cnkoZW50cnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcclxuICovXHJcbkxSVS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgdmFyIGVudHJ5ID0gdGhpcy5fbWFwW2tleV07XHJcbiAgICBpZiAodHlwZW9mKGVudHJ5KSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5fbWFwW2tleV07XHJcbiAgICAgICAgdGhpcy5fbGlzdC5yZW1vdmUoZW50cnkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENsZWFyIHRoZSBjYWNoZVxyXG4gKi9cclxuTFJVLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX2xpc3QuY2xlYXIoKTtcclxuICAgIHRoaXMuX21hcCA9IHt9O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTFJVO1xyXG4iLCIvKipcclxuICogQG5hbWVzcGFjZSBjbGF5LmNvcmUuY29sb3JcclxuICovXHJcbmltcG9ydCBMUlUgZnJvbSAnLi4vY29yZS9MUlUnO1xyXG5cclxudmFyIGNvbG9yVXRpbCA9IHt9O1xyXG5cclxudmFyIGtDU1NDb2xvclRhYmxlID0ge1xyXG4gICAgJ3RyYW5zcGFyZW50JzogWzAsMCwwLDBdLCAnYWxpY2VibHVlJzogWzI0MCwyNDgsMjU1LDFdLFxyXG4gICAgJ2FudGlxdWV3aGl0ZSc6IFsyNTAsMjM1LDIxNSwxXSwgJ2FxdWEnOiBbMCwyNTUsMjU1LDFdLFxyXG4gICAgJ2FxdWFtYXJpbmUnOiBbMTI3LDI1NSwyMTIsMV0sICdhenVyZSc6IFsyNDAsMjU1LDI1NSwxXSxcclxuICAgICdiZWlnZSc6IFsyNDUsMjQ1LDIyMCwxXSwgJ2Jpc3F1ZSc6IFsyNTUsMjI4LDE5NiwxXSxcclxuICAgICdibGFjayc6IFswLDAsMCwxXSwgJ2JsYW5jaGVkYWxtb25kJzogWzI1NSwyMzUsMjA1LDFdLFxyXG4gICAgJ2JsdWUnOiBbMCwwLDI1NSwxXSwgJ2JsdWV2aW9sZXQnOiBbMTM4LDQzLDIyNiwxXSxcclxuICAgICdicm93bic6IFsxNjUsNDIsNDIsMV0sICdidXJseXdvb2QnOiBbMjIyLDE4NCwxMzUsMV0sXHJcbiAgICAnY2FkZXRibHVlJzogWzk1LDE1OCwxNjAsMV0sICdjaGFydHJldXNlJzogWzEyNywyNTUsMCwxXSxcclxuICAgICdjaG9jb2xhdGUnOiBbMjEwLDEwNSwzMCwxXSwgJ2NvcmFsJzogWzI1NSwxMjcsODAsMV0sXHJcbiAgICAnY29ybmZsb3dlcmJsdWUnOiBbMTAwLDE0OSwyMzcsMV0sICdjb3Juc2lsayc6IFsyNTUsMjQ4LDIyMCwxXSxcclxuICAgICdjcmltc29uJzogWzIyMCwyMCw2MCwxXSwgJ2N5YW4nOiBbMCwyNTUsMjU1LDFdLFxyXG4gICAgJ2RhcmtibHVlJzogWzAsMCwxMzksMV0sICdkYXJrY3lhbic6IFswLDEzOSwxMzksMV0sXHJcbiAgICAnZGFya2dvbGRlbnJvZCc6IFsxODQsMTM0LDExLDFdLCAnZGFya2dyYXknOiBbMTY5LDE2OSwxNjksMV0sXHJcbiAgICAnZGFya2dyZWVuJzogWzAsMTAwLDAsMV0sICdkYXJrZ3JleSc6IFsxNjksMTY5LDE2OSwxXSxcclxuICAgICdkYXJra2hha2knOiBbMTg5LDE4MywxMDcsMV0sICdkYXJrbWFnZW50YSc6IFsxMzksMCwxMzksMV0sXHJcbiAgICAnZGFya29saXZlZ3JlZW4nOiBbODUsMTA3LDQ3LDFdLCAnZGFya29yYW5nZSc6IFsyNTUsMTQwLDAsMV0sXHJcbiAgICAnZGFya29yY2hpZCc6IFsxNTMsNTAsMjA0LDFdLCAnZGFya3JlZCc6IFsxMzksMCwwLDFdLFxyXG4gICAgJ2RhcmtzYWxtb24nOiBbMjMzLDE1MCwxMjIsMV0sICdkYXJrc2VhZ3JlZW4nOiBbMTQzLDE4OCwxNDMsMV0sXHJcbiAgICAnZGFya3NsYXRlYmx1ZSc6IFs3Miw2MSwxMzksMV0sICdkYXJrc2xhdGVncmF5JzogWzQ3LDc5LDc5LDFdLFxyXG4gICAgJ2RhcmtzbGF0ZWdyZXknOiBbNDcsNzksNzksMV0sICdkYXJrdHVycXVvaXNlJzogWzAsMjA2LDIwOSwxXSxcclxuICAgICdkYXJrdmlvbGV0JzogWzE0OCwwLDIxMSwxXSwgJ2RlZXBwaW5rJzogWzI1NSwyMCwxNDcsMV0sXHJcbiAgICAnZGVlcHNreWJsdWUnOiBbMCwxOTEsMjU1LDFdLCAnZGltZ3JheSc6IFsxMDUsMTA1LDEwNSwxXSxcclxuICAgICdkaW1ncmV5JzogWzEwNSwxMDUsMTA1LDFdLCAnZG9kZ2VyYmx1ZSc6IFszMCwxNDQsMjU1LDFdLFxyXG4gICAgJ2ZpcmVicmljayc6IFsxNzgsMzQsMzQsMV0sICdmbG9yYWx3aGl0ZSc6IFsyNTUsMjUwLDI0MCwxXSxcclxuICAgICdmb3Jlc3RncmVlbic6IFszNCwxMzksMzQsMV0sICdmdWNoc2lhJzogWzI1NSwwLDI1NSwxXSxcclxuICAgICdnYWluc2Jvcm8nOiBbMjIwLDIyMCwyMjAsMV0sICdnaG9zdHdoaXRlJzogWzI0OCwyNDgsMjU1LDFdLFxyXG4gICAgJ2dvbGQnOiBbMjU1LDIxNSwwLDFdLCAnZ29sZGVucm9kJzogWzIxOCwxNjUsMzIsMV0sXHJcbiAgICAnZ3JheSc6IFsxMjgsMTI4LDEyOCwxXSwgJ2dyZWVuJzogWzAsMTI4LDAsMV0sXHJcbiAgICAnZ3JlZW55ZWxsb3cnOiBbMTczLDI1NSw0NywxXSwgJ2dyZXknOiBbMTI4LDEyOCwxMjgsMV0sXHJcbiAgICAnaG9uZXlkZXcnOiBbMjQwLDI1NSwyNDAsMV0sICdob3RwaW5rJzogWzI1NSwxMDUsMTgwLDFdLFxyXG4gICAgJ2luZGlhbnJlZCc6IFsyMDUsOTIsOTIsMV0sICdpbmRpZ28nOiBbNzUsMCwxMzAsMV0sXHJcbiAgICAnaXZvcnknOiBbMjU1LDI1NSwyNDAsMV0sICdraGFraSc6IFsyNDAsMjMwLDE0MCwxXSxcclxuICAgICdsYXZlbmRlcic6IFsyMzAsMjMwLDI1MCwxXSwgJ2xhdmVuZGVyYmx1c2gnOiBbMjU1LDI0MCwyNDUsMV0sXHJcbiAgICAnbGF3bmdyZWVuJzogWzEyNCwyNTIsMCwxXSwgJ2xlbW9uY2hpZmZvbic6IFsyNTUsMjUwLDIwNSwxXSxcclxuICAgICdsaWdodGJsdWUnOiBbMTczLDIxNiwyMzAsMV0sICdsaWdodGNvcmFsJzogWzI0MCwxMjgsMTI4LDFdLFxyXG4gICAgJ2xpZ2h0Y3lhbic6IFsyMjQsMjU1LDI1NSwxXSwgJ2xpZ2h0Z29sZGVucm9keWVsbG93JzogWzI1MCwyNTAsMjEwLDFdLFxyXG4gICAgJ2xpZ2h0Z3JheSc6IFsyMTEsMjExLDIxMSwxXSwgJ2xpZ2h0Z3JlZW4nOiBbMTQ0LDIzOCwxNDQsMV0sXHJcbiAgICAnbGlnaHRncmV5JzogWzIxMSwyMTEsMjExLDFdLCAnbGlnaHRwaW5rJzogWzI1NSwxODIsMTkzLDFdLFxyXG4gICAgJ2xpZ2h0c2FsbW9uJzogWzI1NSwxNjAsMTIyLDFdLCAnbGlnaHRzZWFncmVlbic6IFszMiwxNzgsMTcwLDFdLFxyXG4gICAgJ2xpZ2h0c2t5Ymx1ZSc6IFsxMzUsMjA2LDI1MCwxXSwgJ2xpZ2h0c2xhdGVncmF5JzogWzExOSwxMzYsMTUzLDFdLFxyXG4gICAgJ2xpZ2h0c2xhdGVncmV5JzogWzExOSwxMzYsMTUzLDFdLCAnbGlnaHRzdGVlbGJsdWUnOiBbMTc2LDE5NiwyMjIsMV0sXHJcbiAgICAnbGlnaHR5ZWxsb3cnOiBbMjU1LDI1NSwyMjQsMV0sICdsaW1lJzogWzAsMjU1LDAsMV0sXHJcbiAgICAnbGltZWdyZWVuJzogWzUwLDIwNSw1MCwxXSwgJ2xpbmVuJzogWzI1MCwyNDAsMjMwLDFdLFxyXG4gICAgJ21hZ2VudGEnOiBbMjU1LDAsMjU1LDFdLCAnbWFyb29uJzogWzEyOCwwLDAsMV0sXHJcbiAgICAnbWVkaXVtYXF1YW1hcmluZSc6IFsxMDIsMjA1LDE3MCwxXSwgJ21lZGl1bWJsdWUnOiBbMCwwLDIwNSwxXSxcclxuICAgICdtZWRpdW1vcmNoaWQnOiBbMTg2LDg1LDIxMSwxXSwgJ21lZGl1bXB1cnBsZSc6IFsxNDcsMTEyLDIxOSwxXSxcclxuICAgICdtZWRpdW1zZWFncmVlbic6IFs2MCwxNzksMTEzLDFdLCAnbWVkaXVtc2xhdGVibHVlJzogWzEyMywxMDQsMjM4LDFdLFxyXG4gICAgJ21lZGl1bXNwcmluZ2dyZWVuJzogWzAsMjUwLDE1NCwxXSwgJ21lZGl1bXR1cnF1b2lzZSc6IFs3MiwyMDksMjA0LDFdLFxyXG4gICAgJ21lZGl1bXZpb2xldHJlZCc6IFsxOTksMjEsMTMzLDFdLCAnbWlkbmlnaHRibHVlJzogWzI1LDI1LDExMiwxXSxcclxuICAgICdtaW50Y3JlYW0nOiBbMjQ1LDI1NSwyNTAsMV0sICdtaXN0eXJvc2UnOiBbMjU1LDIyOCwyMjUsMV0sXHJcbiAgICAnbW9jY2FzaW4nOiBbMjU1LDIyOCwxODEsMV0sICduYXZham93aGl0ZSc6IFsyNTUsMjIyLDE3MywxXSxcclxuICAgICduYXZ5JzogWzAsMCwxMjgsMV0sICdvbGRsYWNlJzogWzI1MywyNDUsMjMwLDFdLFxyXG4gICAgJ29saXZlJzogWzEyOCwxMjgsMCwxXSwgJ29saXZlZHJhYic6IFsxMDcsMTQyLDM1LDFdLFxyXG4gICAgJ29yYW5nZSc6IFsyNTUsMTY1LDAsMV0sICdvcmFuZ2VyZWQnOiBbMjU1LDY5LDAsMV0sXHJcbiAgICAnb3JjaGlkJzogWzIxOCwxMTIsMjE0LDFdLCAncGFsZWdvbGRlbnJvZCc6IFsyMzgsMjMyLDE3MCwxXSxcclxuICAgICdwYWxlZ3JlZW4nOiBbMTUyLDI1MSwxNTIsMV0sICdwYWxldHVycXVvaXNlJzogWzE3NSwyMzgsMjM4LDFdLFxyXG4gICAgJ3BhbGV2aW9sZXRyZWQnOiBbMjE5LDExMiwxNDcsMV0sICdwYXBheWF3aGlwJzogWzI1NSwyMzksMjEzLDFdLFxyXG4gICAgJ3BlYWNocHVmZic6IFsyNTUsMjE4LDE4NSwxXSwgJ3BlcnUnOiBbMjA1LDEzMyw2MywxXSxcclxuICAgICdwaW5rJzogWzI1NSwxOTIsMjAzLDFdLCAncGx1bSc6IFsyMjEsMTYwLDIyMSwxXSxcclxuICAgICdwb3dkZXJibHVlJzogWzE3NiwyMjQsMjMwLDFdLCAncHVycGxlJzogWzEyOCwwLDEyOCwxXSxcclxuICAgICdyZWQnOiBbMjU1LDAsMCwxXSwgJ3Jvc3licm93bic6IFsxODgsMTQzLDE0MywxXSxcclxuICAgICdyb3lhbGJsdWUnOiBbNjUsMTA1LDIyNSwxXSwgJ3NhZGRsZWJyb3duJzogWzEzOSw2OSwxOSwxXSxcclxuICAgICdzYWxtb24nOiBbMjUwLDEyOCwxMTQsMV0sICdzYW5keWJyb3duJzogWzI0NCwxNjQsOTYsMV0sXHJcbiAgICAnc2VhZ3JlZW4nOiBbNDYsMTM5LDg3LDFdLCAnc2Vhc2hlbGwnOiBbMjU1LDI0NSwyMzgsMV0sXHJcbiAgICAnc2llbm5hJzogWzE2MCw4Miw0NSwxXSwgJ3NpbHZlcic6IFsxOTIsMTkyLDE5MiwxXSxcclxuICAgICdza3libHVlJzogWzEzNSwyMDYsMjM1LDFdLCAnc2xhdGVibHVlJzogWzEwNiw5MCwyMDUsMV0sXHJcbiAgICAnc2xhdGVncmF5JzogWzExMiwxMjgsMTQ0LDFdLCAnc2xhdGVncmV5JzogWzExMiwxMjgsMTQ0LDFdLFxyXG4gICAgJ3Nub3cnOiBbMjU1LDI1MCwyNTAsMV0sICdzcHJpbmdncmVlbic6IFswLDI1NSwxMjcsMV0sXHJcbiAgICAnc3RlZWxibHVlJzogWzcwLDEzMCwxODAsMV0sICd0YW4nOiBbMjEwLDE4MCwxNDAsMV0sXHJcbiAgICAndGVhbCc6IFswLDEyOCwxMjgsMV0sICd0aGlzdGxlJzogWzIxNiwxOTEsMjE2LDFdLFxyXG4gICAgJ3RvbWF0byc6IFsyNTUsOTksNzEsMV0sICd0dXJxdW9pc2UnOiBbNjQsMjI0LDIwOCwxXSxcclxuICAgICd2aW9sZXQnOiBbMjM4LDEzMCwyMzgsMV0sICd3aGVhdCc6IFsyNDUsMjIyLDE3OSwxXSxcclxuICAgICd3aGl0ZSc6IFsyNTUsMjU1LDI1NSwxXSwgJ3doaXRlc21va2UnOiBbMjQ1LDI0NSwyNDUsMV0sXHJcbiAgICAneWVsbG93JzogWzI1NSwyNTUsMCwxXSwgJ3llbGxvd2dyZWVuJzogWzE1NCwyMDUsNTAsMV1cclxufTtcclxuXHJcbmZ1bmN0aW9uIGNsYW1wQ3NzQnl0ZShpKSB7ICAvLyBDbGFtcCB0byBpbnRlZ2VyIDAgLi4gMjU1LlxyXG4gICAgaSA9IE1hdGgucm91bmQoaSk7ICAvLyBTZWVtcyB0byBiZSB3aGF0IENocm9tZSBkb2VzICh2cyB0cnVuY2F0aW9uKS5cclxuICAgIHJldHVybiBpIDwgMCA/IDAgOiBpID4gMjU1ID8gMjU1IDogaTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xhbXBDc3NBbmdsZShpKSB7ICAvLyBDbGFtcCB0byBpbnRlZ2VyIDAgLi4gMzYwLlxyXG4gICAgaSA9IE1hdGgucm91bmQoaSk7ICAvLyBTZWVtcyB0byBiZSB3aGF0IENocm9tZSBkb2VzICh2cyB0cnVuY2F0aW9uKS5cclxuICAgIHJldHVybiBpIDwgMCA/IDAgOiBpID4gMzYwID8gMzYwIDogaTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xhbXBDc3NGbG9hdChmKSB7ICAvLyBDbGFtcCB0byBmbG9hdCAwLjAgLi4gMS4wLlxyXG4gICAgcmV0dXJuIGYgPCAwID8gMCA6IGYgPiAxID8gMSA6IGY7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ3NzSW50KHN0cikgeyAgLy8gaW50IG9yIHBlcmNlbnRhZ2UuXHJcbiAgICBpZiAoc3RyLmxlbmd0aCAmJiBzdHIuY2hhckF0KHN0ci5sZW5ndGggLSAxKSA9PT0gJyUnKSB7XHJcbiAgICAgICAgcmV0dXJuIGNsYW1wQ3NzQnl0ZShwYXJzZUZsb2F0KHN0cikgLyAxMDAgKiAyNTUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsYW1wQ3NzQnl0ZShwYXJzZUludChzdHIsIDEwKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ3NzRmxvYXQoc3RyKSB7ICAvLyBmbG9hdCBvciBwZXJjZW50YWdlLlxyXG4gICAgaWYgKHN0ci5sZW5ndGggJiYgc3RyLmNoYXJBdChzdHIubGVuZ3RoIC0gMSkgPT09ICclJykge1xyXG4gICAgICAgIHJldHVybiBjbGFtcENzc0Zsb2F0KHBhcnNlRmxvYXQoc3RyKSAvIDEwMCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xhbXBDc3NGbG9hdChwYXJzZUZsb2F0KHN0cikpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjc3NIdWVUb1JnYihtMSwgbTIsIGgpIHtcclxuICAgIGlmIChoIDwgMCkge1xyXG4gICAgICAgIGggKz0gMTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGggPiAxKSB7XHJcbiAgICAgICAgaCAtPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoICogNiA8IDEpIHtcclxuICAgICAgICByZXR1cm4gbTEgKyAobTIgLSBtMSkgKiBoICogNjtcclxuICAgIH1cclxuICAgIGlmIChoICogMiA8IDEpIHtcclxuICAgICAgICByZXR1cm4gbTI7XHJcbiAgICB9XHJcbiAgICBpZiAoaCAqIDMgPCAyKSB7XHJcbiAgICAgICAgcmV0dXJuIG0xICsgKG0yIC0gbTEpICogKDIvMyAtIGgpICogNjtcclxuICAgIH1cclxuICAgIHJldHVybiBtMTtcclxufVxyXG5cclxuZnVuY3Rpb24gbGVycE51bWJlcihhLCBiLCBwKSB7XHJcbiAgICByZXR1cm4gYSArIChiIC0gYSkgKiBwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRSZ2JhKG91dCwgciwgZywgYiwgYSkge1xyXG4gICAgb3V0WzBdID0gcjsgb3V0WzFdID0gZzsgb3V0WzJdID0gYjsgb3V0WzNdID0gYTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn1cclxuZnVuY3Rpb24gY29weVJnYmEob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdOyBvdXRbMV0gPSBhWzFdOyBvdXRbMl0gPSBhWzJdOyBvdXRbM10gPSBhWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufVxyXG5cclxudmFyIGNvbG9yQ2FjaGUgPSBuZXcgTFJVKDIwKTtcclxudmFyIGxhc3RSZW1vdmVkQXJyID0gbnVsbDtcclxuXHJcbmZ1bmN0aW9uIHB1dFRvQ2FjaGUoY29sb3JTdHIsIHJnYmFBcnIpIHtcclxuICAgIC8vIFJldXNlIHJlbW92ZWQgYXJyYXlcclxuICAgIGlmIChsYXN0UmVtb3ZlZEFycikge1xyXG4gICAgICAgIGNvcHlSZ2JhKGxhc3RSZW1vdmVkQXJyLCByZ2JhQXJyKTtcclxuICAgIH1cclxuICAgIGxhc3RSZW1vdmVkQXJyID0gY29sb3JDYWNoZS5wdXQoY29sb3JTdHIsIGxhc3RSZW1vdmVkQXJyIHx8IChyZ2JhQXJyLnNsaWNlKCkpKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvci5wYXJzZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JTdHJcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gb3V0XHJcbiAqIEByZXR1cm4ge0FycmF5LjxudW1iZXI+fVxyXG4gKi9cclxuY29sb3JVdGlsLnBhcnNlID0gZnVuY3Rpb24gKGNvbG9yU3RyLCByZ2JhQXJyKSB7XHJcbiAgICBpZiAoIWNvbG9yU3RyKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmdiYUFyciA9IHJnYmFBcnIgfHwgW107XHJcblxyXG4gICAgdmFyIGNhY2hlZCA9IGNvbG9yQ2FjaGUuZ2V0KGNvbG9yU3RyKTtcclxuICAgIGlmIChjYWNoZWQpIHtcclxuICAgICAgICByZXR1cm4gY29weVJnYmEocmdiYUFyciwgY2FjaGVkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb2xvclN0ciBtYXkgYmUgbm90IHN0cmluZ1xyXG4gICAgY29sb3JTdHIgPSBjb2xvclN0ciArICcnO1xyXG4gICAgLy8gUmVtb3ZlIGFsbCB3aGl0ZXNwYWNlLCBub3QgY29tcGxpYW50LCBidXQgc2hvdWxkIGp1c3QgYmUgbW9yZSBhY2NlcHRpbmcuXHJcbiAgICB2YXIgc3RyID0gY29sb3JTdHIucmVwbGFjZSgvIC9nLCAnJykudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAvLyBDb2xvciBrZXl3b3JkcyAoYW5kIHRyYW5zcGFyZW50KSBsb29rdXAuXHJcbiAgICBpZiAoc3RyIGluIGtDU1NDb2xvclRhYmxlKSB7XHJcbiAgICAgICAgY29weVJnYmEocmdiYUFyciwga0NTU0NvbG9yVGFibGVbc3RyXSk7XHJcbiAgICAgICAgcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycik7XHJcbiAgICAgICAgcmV0dXJuIHJnYmFBcnI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gI2FiYyBhbmQgI2FiYzEyMyBzeW50YXguXHJcbiAgICBpZiAoc3RyLmNoYXJBdCgwKSA9PT0gJyMnKSB7XHJcbiAgICAgICAgaWYgKHN0ci5sZW5ndGggPT09IDQpIHtcclxuICAgICAgICAgICAgdmFyIGl2ID0gcGFyc2VJbnQoc3RyLnN1YnN0cigxKSwgMTYpOyAgLy8gVE9ETyhkZWFubSk6IFN0cmljdGVyIHBhcnNpbmcuXHJcbiAgICAgICAgICAgIGlmICghKGl2ID49IDAgJiYgaXYgPD0gMHhmZmYpKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuOyAgLy8gQ292ZXJzIE5hTi5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsXHJcbiAgICAgICAgICAgICAgICAoKGl2ICYgMHhmMDApID4+IDQpIHwgKChpdiAmIDB4ZjAwKSA+PiA4KSxcclxuICAgICAgICAgICAgICAgIChpdiAmIDB4ZjApIHwgKChpdiAmIDB4ZjApID4+IDQpLFxyXG4gICAgICAgICAgICAgICAgKGl2ICYgMHhmKSB8ICgoaXYgJiAweGYpIDw8IDQpLFxyXG4gICAgICAgICAgICAgICAgMVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJnYmFBcnI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHN0ci5sZW5ndGggPT09IDcpIHtcclxuICAgICAgICAgICAgdmFyIGl2ID0gcGFyc2VJbnQoc3RyLnN1YnN0cigxKSwgMTYpOyAgLy8gVE9ETyhkZWFubSk6IFN0cmljdGVyIHBhcnNpbmcuXHJcbiAgICAgICAgICAgIGlmICghKGl2ID49IDAgJiYgaXYgPD0gMHhmZmZmZmYpKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuOyAgLy8gQ292ZXJzIE5hTi5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsXHJcbiAgICAgICAgICAgICAgICAoaXYgJiAweGZmMDAwMCkgPj4gMTYsXHJcbiAgICAgICAgICAgICAgICAoaXYgJiAweGZmMDApID4+IDgsXHJcbiAgICAgICAgICAgICAgICBpdiAmIDB4ZmYsXHJcbiAgICAgICAgICAgICAgICAxXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHB1dFRvQ2FjaGUoY29sb3JTdHIsIHJnYmFBcnIpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmdiYUFycjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBvcCA9IHN0ci5pbmRleE9mKCcoJyksIGVwID0gc3RyLmluZGV4T2YoJyknKTtcclxuICAgIGlmIChvcCAhPT0gLTEgJiYgZXAgKyAxID09PSBzdHIubGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIGZuYW1lID0gc3RyLnN1YnN0cigwLCBvcCk7XHJcbiAgICAgICAgdmFyIHBhcmFtcyA9IHN0ci5zdWJzdHIob3AgKyAxLCBlcCAtIChvcCArIDEpKS5zcGxpdCgnLCcpO1xyXG4gICAgICAgIHZhciBhbHBoYSA9IDE7ICAvLyBUbyBhbGxvdyBjYXNlIGZhbGx0aHJvdWdoLlxyXG4gICAgICAgIHN3aXRjaCAoZm5hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSAncmdiYSc6XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYWxwaGEgPSBwYXJzZUNzc0Zsb2F0KHBhcmFtcy5wb3AoKSk7IC8vIGpzaGludCBpZ25vcmU6bGluZVxyXG4gICAgICAgICAgICAvLyBGYWxsIHRocm91Z2guXHJcbiAgICAgICAgICAgIGNhc2UgJ3JnYic6XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2V0UmdiYShyZ2JhQXJyLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlQ3NzSW50KHBhcmFtc1swXSksXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VDc3NJbnQocGFyYW1zWzFdKSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJzZUNzc0ludChwYXJhbXNbMl0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGFscGhhXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmdiYUFycjtcclxuICAgICAgICAgICAgY2FzZSAnaHNsYSc6XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gNCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFJnYmEocmdiYUFyciwgMCwgMCwgMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcGFyYW1zWzNdID0gcGFyc2VDc3NGbG9hdChwYXJhbXNbM10pO1xyXG4gICAgICAgICAgICAgICAgaHNsYTJyZ2JhKHBhcmFtcywgcmdiYUFycik7XHJcbiAgICAgICAgICAgICAgICBwdXRUb0NhY2hlKGNvbG9yU3RyLCByZ2JhQXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZ2JhQXJyO1xyXG4gICAgICAgICAgICBjYXNlICdoc2wnOlxyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRSZ2JhKHJnYmFBcnIsIDAsIDAsIDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGhzbGEycmdiYShwYXJhbXMsIHJnYmFBcnIpO1xyXG4gICAgICAgICAgICAgICAgcHV0VG9DYWNoZShjb2xvclN0ciwgcmdiYUFycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmdiYUFycjtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UmdiYShyZ2JhQXJyLCAwLCAwLCAwLCAxKTtcclxuICAgIHJldHVybjtcclxufTtcclxuXHJcbmNvbG9yVXRpbC5wYXJzZVRvRmxvYXQgPSBmdW5jdGlvbiAoY29sb3JTdHIsIHJnYmFBcnIpIHtcclxuICAgIHJnYmFBcnIgPSBjb2xvclV0aWwucGFyc2UoY29sb3JTdHIsIHJnYmFBcnIpO1xyXG4gICAgaWYgKCFyZ2JhQXJyKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmdiYUFyclswXSAvPSAyNTU7XHJcbiAgICByZ2JhQXJyWzFdIC89IDI1NTtcclxuICAgIHJnYmFBcnJbMl0gLz0gMjU1O1xyXG4gICAgcmV0dXJuIHJnYmFBcnI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3IuaHNsYTJyZ2JhXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGhzbGFcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gcmdiYVxyXG4gKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn0gcmdiYVxyXG4gKi9cclxuZnVuY3Rpb24gaHNsYTJyZ2JhKGhzbGEsIHJnYmEpIHtcclxuICAgIHZhciBoID0gKCgocGFyc2VGbG9hdChoc2xhWzBdKSAlIDM2MCkgKyAzNjApICUgMzYwKSAvIDM2MDsgIC8vIDAgLi4gMVxyXG4gICAgLy8gTk9URShkZWFubSk6IEFjY29yZGluZyB0byB0aGUgQ1NTIHNwZWMgcy9sIHNob3VsZCBvbmx5IGJlXHJcbiAgICAvLyBwZXJjZW50YWdlcywgYnV0IHdlIGRvbid0IGJvdGhlciBhbmQgbGV0IGZsb2F0IG9yIHBlcmNlbnRhZ2UuXHJcbiAgICB2YXIgcyA9IHBhcnNlQ3NzRmxvYXQoaHNsYVsxXSk7XHJcbiAgICB2YXIgbCA9IHBhcnNlQ3NzRmxvYXQoaHNsYVsyXSk7XHJcbiAgICB2YXIgbTIgPSBsIDw9IDAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSBsICogcztcclxuICAgIHZhciBtMSA9IGwgKiAyIC0gbTI7XHJcblxyXG4gICAgcmdiYSA9IHJnYmEgfHwgW107XHJcbiAgICBzZXRSZ2JhKHJnYmEsXHJcbiAgICAgICAgY2xhbXBDc3NCeXRlKGNzc0h1ZVRvUmdiKG0xLCBtMiwgaCArIDEgLyAzKSAqIDI1NSksXHJcbiAgICAgICAgY2xhbXBDc3NCeXRlKGNzc0h1ZVRvUmdiKG0xLCBtMiwgaCkgKiAyNTUpLFxyXG4gICAgICAgIGNsYW1wQ3NzQnl0ZShjc3NIdWVUb1JnYihtMSwgbTIsIGggLSAxIC8gMykgKiAyNTUpLFxyXG4gICAgICAgIDFcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGhzbGEubGVuZ3RoID09PSA0KSB7XHJcbiAgICAgICAgcmdiYVszXSA9IGhzbGFbM107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJnYmE7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3IucmdiYTJoc2xhXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHJnYmFcclxuICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59IGhzbGFcclxuICovXHJcbmZ1bmN0aW9uIHJnYmEyaHNsYShyZ2JhKSB7XHJcbiAgICBpZiAoIXJnYmEpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUkdCIGZyb20gMCB0byAyNTVcclxuICAgIHZhciBSID0gcmdiYVswXSAvIDI1NTtcclxuICAgIHZhciBHID0gcmdiYVsxXSAvIDI1NTtcclxuICAgIHZhciBCID0gcmdiYVsyXSAvIDI1NTtcclxuXHJcbiAgICB2YXIgdk1pbiA9IE1hdGgubWluKFIsIEcsIEIpOyAvLyBNaW4uIHZhbHVlIG9mIFJHQlxyXG4gICAgdmFyIHZNYXggPSBNYXRoLm1heChSLCBHLCBCKTsgLy8gTWF4LiB2YWx1ZSBvZiBSR0JcclxuICAgIHZhciBkZWx0YSA9IHZNYXggLSB2TWluOyAvLyBEZWx0YSBSR0IgdmFsdWVcclxuXHJcbiAgICB2YXIgTCA9ICh2TWF4ICsgdk1pbikgLyAyO1xyXG4gICAgdmFyIEg7XHJcbiAgICB2YXIgUztcclxuICAgIC8vIEhTTCByZXN1bHRzIGZyb20gMCB0byAxXHJcbiAgICBpZiAoZGVsdGEgPT09IDApIHtcclxuICAgICAgICBIID0gMDtcclxuICAgICAgICBTID0gMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChMIDwgMC41KSB7XHJcbiAgICAgICAgICAgIFMgPSBkZWx0YSAvICh2TWF4ICsgdk1pbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBTID0gZGVsdGEgLyAoMiAtIHZNYXggLSB2TWluKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkZWx0YVIgPSAoKCh2TWF4IC0gUikgLyA2KSArIChkZWx0YSAvIDIpKSAvIGRlbHRhO1xyXG4gICAgICAgIHZhciBkZWx0YUcgPSAoKCh2TWF4IC0gRykgLyA2KSArIChkZWx0YSAvIDIpKSAvIGRlbHRhO1xyXG4gICAgICAgIHZhciBkZWx0YUIgPSAoKCh2TWF4IC0gQikgLyA2KSArIChkZWx0YSAvIDIpKSAvIGRlbHRhO1xyXG5cclxuICAgICAgICBpZiAoUiA9PT0gdk1heCkge1xyXG4gICAgICAgICAgICBIID0gZGVsdGFCIC0gZGVsdGFHO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChHID09PSB2TWF4KSB7XHJcbiAgICAgICAgICAgIEggPSAoMSAvIDMpICsgZGVsdGFSIC0gZGVsdGFCO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChCID09PSB2TWF4KSB7XHJcbiAgICAgICAgICAgIEggPSAoMiAvIDMpICsgZGVsdGFHIC0gZGVsdGFSO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEggPCAwKSB7XHJcbiAgICAgICAgICAgIEggKz0gMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChIID4gMSkge1xyXG4gICAgICAgICAgICBIIC09IDE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBoc2xhID0gW0ggKiAzNjAsIFMsIExdO1xyXG5cclxuICAgIGlmIChyZ2JhWzNdICE9IG51bGwpIHtcclxuICAgICAgICBoc2xhLnB1c2gocmdiYVszXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhzbGE7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3IubGlmdFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcclxuICogQHBhcmFtIHtudW1iZXJ9IGxldmVsXHJcbiAqIEByZXR1cm4ge3N0cmluZ31cclxuICovXHJcbmNvbG9yVXRpbC5saWZ0ID0gZnVuY3Rpb24gKGNvbG9yLCBsZXZlbCkge1xyXG4gICAgdmFyIGNvbG9yQXJyID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yKTtcclxuICAgIGlmIChjb2xvckFycikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChsZXZlbCA8IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yQXJyW2ldID0gY29sb3JBcnJbaV0gKiAoMSAtIGxldmVsKSB8IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb2xvckFycltpXSA9ICgoMjU1IC0gY29sb3JBcnJbaV0pICogbGV2ZWwgKyBjb2xvckFycltpXSkgfCAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb2xvclV0aWwuc3RyaW5naWZ5KGNvbG9yQXJyLCBjb2xvckFyci5sZW5ndGggPT09IDQgPyAncmdiYScgOiAncmdiJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3IudG9IZXhcclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXHJcbiAqIEByZXR1cm4ge3N0cmluZ31cclxuICovXHJcbmNvbG9yVXRpbC50b0hleCA9IGZ1bmN0aW9uIChjb2xvcikge1xyXG4gICAgdmFyIGNvbG9yQXJyID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yKTtcclxuICAgIGlmIChjb2xvckFycikge1xyXG4gICAgICAgIHJldHVybiAoKDEgPDwgMjQpICsgKGNvbG9yQXJyWzBdIDw8IDE2KSArIChjb2xvckFyclsxXSA8PCA4KSArICgrY29sb3JBcnJbMl0pKS50b1N0cmluZygxNikuc2xpY2UoMSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogTWFwIHZhbHVlIHRvIGNvbG9yLiBGYXN0ZXIgdGhhbiBsZXJwIG1ldGhvZHMgYmVjYXVzZSBjb2xvciBpcyByZXByZXNlbnRlZCBieSByZ2JhIGFycmF5LlxyXG4gKiBAbmFtZSBjbGF5LmNvcmUuY29sb3JcclxuICogQHBhcmFtIHtudW1iZXJ9IG5vcm1hbGl6ZWRWYWx1ZSBBIGZsb2F0IGJldHdlZW4gMCBhbmQgMS5cclxuICogQHBhcmFtIHtBcnJheS48QXJyYXkuPG51bWJlcj4+fSBjb2xvcnMgTGlzdCBvZiByZ2JhIGNvbG9yIGFycmF5XHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IFtvdXRdIE1hcHBlZCBnYmEgY29sb3IgYXJyYXlcclxuICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59IHdpbGwgYmUgbnVsbC91bmRlZmluZWQgaWYgaW5wdXQgaWxsZWdhbC5cclxuICovXHJcbmNvbG9yVXRpbC5mYXN0TGVycCA9IGZ1bmN0aW9uIChub3JtYWxpemVkVmFsdWUsIGNvbG9ycywgb3V0KSB7XHJcbiAgICBpZiAoIShjb2xvcnMgJiYgY29sb3JzLmxlbmd0aClcclxuICAgICAgICB8fCAhKG5vcm1hbGl6ZWRWYWx1ZSA+PSAwICYmIG5vcm1hbGl6ZWRWYWx1ZSA8PSAxKVxyXG4gICAgKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIG91dCA9IG91dCB8fCBbXTtcclxuXHJcbiAgICB2YXIgdmFsdWUgPSBub3JtYWxpemVkVmFsdWUgKiAoY29sb3JzLmxlbmd0aCAtIDEpO1xyXG4gICAgdmFyIGxlZnRJbmRleCA9IE1hdGguZmxvb3IodmFsdWUpO1xyXG4gICAgdmFyIHJpZ2h0SW5kZXggPSBNYXRoLmNlaWwodmFsdWUpO1xyXG4gICAgdmFyIGxlZnRDb2xvciA9IGNvbG9yc1tsZWZ0SW5kZXhdO1xyXG4gICAgdmFyIHJpZ2h0Q29sb3IgPSBjb2xvcnNbcmlnaHRJbmRleF07XHJcbiAgICB2YXIgZHYgPSB2YWx1ZSAtIGxlZnRJbmRleDtcclxuICAgIG91dFswXSA9IGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclswXSwgcmlnaHRDb2xvclswXSwgZHYpKTtcclxuICAgIG91dFsxXSA9IGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclsxXSwgcmlnaHRDb2xvclsxXSwgZHYpKTtcclxuICAgIG91dFsyXSA9IGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclsyXSwgcmlnaHRDb2xvclsyXSwgZHYpKTtcclxuICAgIG91dFszXSA9IGNsYW1wQ3NzRmxvYXQobGVycE51bWJlcihsZWZ0Q29sb3JbM10sIHJpZ2h0Q29sb3JbM10sIGR2KSk7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufVxyXG5cclxuY29sb3JVdGlsLmZhc3RNYXBUb0NvbG9yID0gY29sb3JVdGlsLmZhc3RMZXJwO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBub3JtYWxpemVkVmFsdWUgQSBmbG9hdCBiZXR3ZWVuIDAgYW5kIDEuXHJcbiAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGNvbG9ycyBDb2xvciBsaXN0LlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBmdWxsT3V0cHV0IERlZmF1bHQgZmFsc2UuXHJcbiAqIEByZXR1cm4geyhzdHJpbmd8T2JqZWN0KX0gUmVzdWx0IGNvbG9yLiBJZiBmdWxsT3V0cHV0LFxyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Y29sb3I6IC4uLiwgbGVmdEluZGV4OiAuLi4sIHJpZ2h0SW5kZXg6IC4uLiwgdmFsdWU6IC4uLn0sXHJcbiAqL1xyXG5jb2xvclV0aWwubGVycCA9IGZ1bmN0aW9uIChub3JtYWxpemVkVmFsdWUsIGNvbG9ycywgZnVsbE91dHB1dCkge1xyXG4gICAgaWYgKCEoY29sb3JzICYmIGNvbG9ycy5sZW5ndGgpXHJcbiAgICAgICAgfHwgIShub3JtYWxpemVkVmFsdWUgPj0gMCAmJiBub3JtYWxpemVkVmFsdWUgPD0gMSlcclxuICAgICkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdmFsdWUgPSBub3JtYWxpemVkVmFsdWUgKiAoY29sb3JzLmxlbmd0aCAtIDEpO1xyXG4gICAgdmFyIGxlZnRJbmRleCA9IE1hdGguZmxvb3IodmFsdWUpO1xyXG4gICAgdmFyIHJpZ2h0SW5kZXggPSBNYXRoLmNlaWwodmFsdWUpO1xyXG4gICAgdmFyIGxlZnRDb2xvciA9IGNvbG9yVXRpbC5wYXJzZShjb2xvcnNbbGVmdEluZGV4XSk7XHJcbiAgICB2YXIgcmlnaHRDb2xvciA9IGNvbG9yVXRpbC5wYXJzZShjb2xvcnNbcmlnaHRJbmRleF0pO1xyXG4gICAgdmFyIGR2ID0gdmFsdWUgLSBsZWZ0SW5kZXg7XHJcblxyXG4gICAgdmFyIGNvbG9yID0gY29sb3JVdGlsLnN0cmluZ2lmeShcclxuICAgICAgICBbXHJcbiAgICAgICAgICAgIGNsYW1wQ3NzQnl0ZShsZXJwTnVtYmVyKGxlZnRDb2xvclswXSwgcmlnaHRDb2xvclswXSwgZHYpKSxcclxuICAgICAgICAgICAgY2xhbXBDc3NCeXRlKGxlcnBOdW1iZXIobGVmdENvbG9yWzFdLCByaWdodENvbG9yWzFdLCBkdikpLFxyXG4gICAgICAgICAgICBjbGFtcENzc0J5dGUobGVycE51bWJlcihsZWZ0Q29sb3JbMl0sIHJpZ2h0Q29sb3JbMl0sIGR2KSksXHJcbiAgICAgICAgICAgIGNsYW1wQ3NzRmxvYXQobGVycE51bWJlcihsZWZ0Q29sb3JbM10sIHJpZ2h0Q29sb3JbM10sIGR2KSlcclxuICAgICAgICBdLFxyXG4gICAgICAgICdyZ2JhJ1xyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gZnVsbE91dHB1dFxyXG4gICAgICAgID8ge1xyXG4gICAgICAgICAgICBjb2xvcjogY29sb3IsXHJcbiAgICAgICAgICAgIGxlZnRJbmRleDogbGVmdEluZGV4LFxyXG4gICAgICAgICAgICByaWdodEluZGV4OiByaWdodEluZGV4LFxyXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgOiBjb2xvcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBkZXByZWNhdGVkXHJcbiAqL1xyXG5jb2xvclV0aWwubWFwVG9Db2xvciA9IGNvbG9yVXRpbC5sZXJwO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuY29yZS5jb2xvclxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcclxuICogQHBhcmFtIHtudW1iZXI9fSBoIDAgfiAzNjAsIGlnbm9yZSB3aGVuIG51bGwuXHJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gcyAwIH4gMSwgaWdub3JlIHdoZW4gbnVsbC5cclxuICogQHBhcmFtIHtudW1iZXI9fSBsIDAgfiAxLCBpZ25vcmUgd2hlbiBudWxsLlxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IENvbG9yIHN0cmluZyBpbiByZ2JhIGZvcm1hdC5cclxuICovXHJcbmNvbG9yVXRpbC5tb2RpZnlIU0wgPSBmdW5jdGlvbiAoY29sb3IsIGgsIHMsIGwpIHtcclxuICAgIGNvbG9yID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yKTtcclxuXHJcbiAgICBpZiAoY29sb3IpIHtcclxuICAgICAgICBjb2xvciA9IHJnYmEyaHNsYShjb2xvcik7XHJcbiAgICAgICAgaCAhPSBudWxsICYmIChjb2xvclswXSA9IGNsYW1wQ3NzQW5nbGUoaCkpO1xyXG4gICAgICAgIHMgIT0gbnVsbCAmJiAoY29sb3JbMV0gPSBwYXJzZUNzc0Zsb2F0KHMpKTtcclxuICAgICAgICBsICE9IG51bGwgJiYgKGNvbG9yWzJdID0gcGFyc2VDc3NGbG9hdChsKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjb2xvclV0aWwuc3RyaW5naWZ5KGhzbGEycmdiYShjb2xvciksICdyZ2JhJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcclxuICogQHBhcmFtIHtudW1iZXI9fSBhbHBoYSAwIH4gMVxyXG4gKiBAcmV0dXJuIHtzdHJpbmd9IENvbG9yIHN0cmluZyBpbiByZ2JhIGZvcm1hdC5cclxuICovXHJcbmNvbG9yVXRpbC5tb2RpZnlBbHBoYSA9IGZ1bmN0aW9uIChjb2xvciwgYWxwaGEpIHtcclxuICAgIGNvbG9yID0gY29sb3JVdGlsLnBhcnNlKGNvbG9yKTtcclxuXHJcbiAgICBpZiAoY29sb3IgJiYgYWxwaGEgIT0gbnVsbCkge1xyXG4gICAgICAgIGNvbG9yWzNdID0gY2xhbXBDc3NGbG9hdChhbHBoYSk7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yVXRpbC5zdHJpbmdpZnkoY29sb3IsICdyZ2JhJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJDb2xvciBsaWtlIFsxMiwzMyw0NCwwLjRdXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlICdyZ2JhJywgJ2hzdmEnLCAuLi5cclxuICogQHJldHVybiB7c3RyaW5nfSBSZXN1bHQgY29sb3IuIChJZiBpbnB1dCBpbGxlZ2FsLCByZXR1cm4gdW5kZWZpbmVkKS5cclxuICovXHJcbmNvbG9yVXRpbC5zdHJpbmdpZnkgPSBmdW5jdGlvbiAoYXJyQ29sb3IsIHR5cGUpIHtcclxuICAgIGlmICghYXJyQ29sb3IgfHwgIWFyckNvbG9yLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHZhciBjb2xvclN0ciA9IGFyckNvbG9yWzBdICsgJywnICsgYXJyQ29sb3JbMV0gKyAnLCcgKyBhcnJDb2xvclsyXTtcclxuICAgIGlmICh0eXBlID09PSAncmdiYScgfHwgdHlwZSA9PT0gJ2hzdmEnIHx8IHR5cGUgPT09ICdoc2xhJykge1xyXG4gICAgICAgIGNvbG9yU3RyICs9ICcsJyArIGFyckNvbG9yWzNdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHR5cGUgKyAnKCcgKyBjb2xvclN0ciArICcpJztcclxufTtcclxuXHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY29sb3JVdGlsOyIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgY29sb3JVdGlsIGZyb20gJy4vY29yZS9jb2xvcic7XHJcbnZhciBwYXJzZUNvbG9yID0gY29sb3JVdGlsLnBhcnNlVG9GbG9hdDtcclxuXHJcbnZhciBwcm9ncmFtS2V5Q2FjaGUgPSB7fTtcclxuXHJcbmZ1bmN0aW9uIGdldERlZmluZUNvZGUoZGVmaW5lcykge1xyXG4gICAgdmFyIGRlZmluZUtleXMgPSBPYmplY3Qua2V5cyhkZWZpbmVzKTtcclxuICAgIGRlZmluZUtleXMuc29ydCgpO1xyXG4gICAgdmFyIGRlZmluZVN0ciA9IFtdO1xyXG4gICAgLy8gQ3VzdG9tIERlZmluZXNcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVmaW5lS2V5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBrZXkgPSBkZWZpbmVLZXlzW2ldO1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGRlZmluZXNba2V5XTtcclxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgZGVmaW5lU3RyLnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgZGVmaW5lU3RyLnB1c2goa2V5ICsgJyAnICsgdmFsdWUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlZmluZVN0ci5qb2luKCdcXG4nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UHJvZ3JhbUtleSh2ZXJ0ZXhEZWZpbmVzLCBmcmFnbWVudERlZmluZXMsIGVuYWJsZWRUZXh0dXJlcykge1xyXG4gICAgZW5hYmxlZFRleHR1cmVzLnNvcnQoKTtcclxuICAgIHZhciBkZWZpbmVTdHIgPSBbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5hYmxlZFRleHR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHN5bWJvbCA9IGVuYWJsZWRUZXh0dXJlc1tpXTtcclxuICAgICAgICBkZWZpbmVTdHIucHVzaChzeW1ib2wpO1xyXG4gICAgfVxyXG4gICAgdmFyIGtleSA9IGdldERlZmluZUNvZGUodmVydGV4RGVmaW5lcykgKyAnXFxuJ1xyXG4gICAgICAgICsgZ2V0RGVmaW5lQ29kZShmcmFnbWVudERlZmluZXMpICsgJ1xcbidcclxuICAgICAgICArIGRlZmluZVN0ci5qb2luKCdcXG4nKTtcclxuXHJcbiAgICBpZiAocHJvZ3JhbUtleUNhY2hlW2tleV0pIHtcclxuICAgICAgICByZXR1cm4gcHJvZ3JhbUtleUNhY2hlW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGlkID0gdXRpbC5nZW5HVUlEKCk7XHJcbiAgICBwcm9ncmFtS2V5Q2FjaGVba2V5XSA9IGlkO1xyXG4gICAgcmV0dXJuIGlkO1xyXG59XHJcblxyXG4vKipcclxuICogTWF0ZXJpYWwgZGVmaW5lcyB0aGUgYXBwZWFyYW5jZSBvZiBtZXNoIHN1cmZhY2UsIGxpa2UgYGNvbG9yYCwgYHJvdWdobmVzc2AsIGBtZXRhbG5lc3NgLCBldGMuXHJcbiAqIEl0IGNvbnRhaW5zIGEge0BsaW5rIGNsYXkuU2hhZGVyfSBhbmQgY29ycmVzcG9uZGluZyB1bmlmb3Jtcy5cclxuICpcclxuICogSGVyZSBpcyBhIGJhc2ljIGV4YW1wbGUgdG8gY3JlYXRlIGEgc3RhbmRhcmQgbWF0ZXJpYWxcclxuYGBganNcclxudmFyIG1hdGVyaWFsID0gbmV3IGNsYXkuTWF0ZXJpYWwoe1xyXG4gICAgc2hhZGVyOiBuZXcgY2xheS5TaGFkZXIoXHJcbiAgICAgICAgY2xheS5TaGFkZXIuc291cmNlKCdjbGF5LnZlcnRleCcpLFxyXG4gICAgICAgIGNsYXkuU2hhZGVyLnNvdXJjZSgnY2xheS5mcmFnbWVudCcpXHJcbiAgICApXHJcbn0pO1xyXG5gYGBcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuTWF0ZXJpYWxcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBNYXRlcmlhbCA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuTWF0ZXJpYWwjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG5hbWU6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIC8vIHVuaWZvcm1zOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5TaGFkZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgLy8gc2hhZGVyOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkZXB0aFRlc3Q6IHRydWUsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRlcHRoTWFzazogdHJ1ZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdHJhbnNwYXJlbnQ6IGZhbHNlLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEJsZW5kIGZ1bmMgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIHRoZSBtYXRlcmlhbFxyXG4gICAgICAgICAqIGhhdmUgY3VzdG9tIGJsZW5kaW5nXHJcbiAgICAgICAgICogVGhlIGdsIGNvbnRleHQgd2lsbCBiZSB0aGUgb25seSBhcmd1bWVudCBwYXNzZWQgaW4gdGhvIHRoZVxyXG4gICAgICAgICAqIGJsZW5kIGZ1bmN0aW9uXHJcbiAgICAgICAgICogRGV0YWlsIG9mIGJsZW5kIGZ1bmN0aW9uIGluIFdlYkdMOlxyXG4gICAgICAgICAqIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvZ2xlcy9zcGVjcy8yLjAvZXNfZnVsbF9zcGVjXzIuMC4yNS5wZGZcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEV4YW1wbGUgOlxyXG4gICAgICAgICAqIGZ1bmN0aW9uKF9nbCkge1xyXG4gICAgICAgICAqICBfZ2wuYmxlbmRFcXVhdGlvbihfZ2wuRlVOQ19BREQpO1xyXG4gICAgICAgICAqICBfZ2wuYmxlbmRGdW5jKF9nbC5TUkNfQUxQSEEsIF9nbC5PTkVfTUlOVVNfU1JDX0FMUEhBKTtcclxuICAgICAgICAgKiB9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYmxlbmQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIHVwZGF0ZSB0ZXh0dXJlIHN0YXR1cyBhdXRvbWF0aWNhbGx5LlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGF1dG9VcGRhdGVUZXh0dXJlU3RhdHVzOiB0cnVlLFxyXG5cclxuICAgICAgICB1bmlmb3Jtczoge30sXHJcbiAgICAgICAgdmVydGV4RGVmaW5lczoge30sXHJcbiAgICAgICAgZnJhZ21lbnREZWZpbmVzOiB7fSxcclxuICAgICAgICBfdGV4dHVyZVN0YXR1czoge30sXHJcblxyXG4gICAgICAgIC8vIHNoYWRvd1RyYW5zcGFyZW50TWFwIDogbnVsbFxyXG5cclxuICAgICAgICAvLyBQRU5ESU5HIGVuYWJsZSB0aGUgdW5pZm9ybSB0aGF0IG9ubHkgdXNlZCBpbiBzaGFkZXIuXHJcbiAgICAgICAgX2VuYWJsZWRVbmlmb3JtczogbnVsbCxcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gJ01BVEVSSUFMXycgKyB0aGlzLl9fdWlkX187XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2hhZGVyKSB7XHJcbiAgICAgICAgLy8gS2VlcCBzdGF0dXMsIG1haW5seSBwcmVzZXQgdW5pZm9ybXMsIHZlcnRleERlZmluZXMgYW5kIGZyYWdtZW50RGVmaW5lc1xyXG4gICAgICAgIHRoaXMuYXR0YWNoU2hhZGVyKHRoaXMuc2hhZGVyLCB0cnVlKTtcclxuICAgIH1cclxufSxcclxuLyoqIEBsZW5kcyBjbGF5Lk1hdGVyaWFsLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICBwcmVjaXNpb246ICdoaWdocCcsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgbWF0ZXJpYWwgdW5pZm9ybVxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqICBtYXQuc2V0VW5pZm9ybSgnY29sb3InLCBbMSwgMSwgMSwgMV0pO1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ8YXJyYXl8Y2xheS5UZXh0dXJlfEFycmF5QnVmZmVyVmlld30gdmFsdWVcclxuICAgICAqL1xyXG4gICAgc2V0VW5pZm9ybTogZnVuY3Rpb24gKHN5bWJvbCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1VuaWZvcm0gdmFsdWUgXCInICsgc3ltYm9sICsgJ1wiIGlzIHVuZGVmaW5lZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdW5pZm9ybSA9IHRoaXMudW5pZm9ybXNbc3ltYm9sXTtcclxuICAgICAgICBpZiAodW5pZm9ybSkge1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBwYXJzZSBhcyBhIGNvbG9yLiBJbnZhbGlkIGNvbG9yIHN0cmluZyB3aWxsIHJldHVybiBudWxsLlxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUNvbG9yKHZhbHVlKSB8fCB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdW5pZm9ybS52YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1VwZGF0ZVRleHR1cmVTdGF0dXMgJiYgdW5pZm9ybS50eXBlID09PSAndCcpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlVGV4dHVyZShzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlVGV4dHVyZShzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcclxuICAgICAqL1xyXG4gICAgc2V0VW5pZm9ybXM6IGZ1bmN0aW9uKG9iaikge1xyXG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgdmFyIHZhbCA9IG9ialtrZXldO1xyXG4gICAgICAgICAgICB0aGlzLnNldFVuaWZvcm0oa2V5LCB2YWwpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9ICBzeW1ib2xcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzVW5pZm9ybUVuYWJsZWQ6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZFVuaWZvcm1zLmluZGV4T2Yoc3ltYm9sKSA+PSAwO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRFbmFibGVkVW5pZm9ybXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZFVuaWZvcm1zO1xyXG4gICAgfSxcclxuICAgIGdldFRleHR1cmVVbmlmb3JtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90ZXh0dXJlVW5pZm9ybXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2Ygc2V0VW5pZm9ybSBhbmQgc2V0VW5pZm9ybXNcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fHN0cmluZ30gc3ltYm9sXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcnxhcnJheXxjbGF5LlRleHR1cmV8QXJyYXlCdWZmZXJWaWV3fSBbdmFsdWVdXHJcbiAgICAgKi9cclxuICAgIHNldDogZnVuY3Rpb24gKHN5bWJvbCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHN5bWJvbCkgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBzeW1ib2wpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBzeW1ib2xba2V5XTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShrZXksIHZhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShzeW1ib2wsIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdW5pZm9ybSB2YWx1ZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcclxuICAgICAqIEByZXR1cm4ge251bWJlcnxhcnJheXxjbGF5LlRleHR1cmV8QXJyYXlCdWZmZXJWaWV3fVxyXG4gICAgICovXHJcbiAgICBnZXQ6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICB2YXIgdW5pZm9ybSA9IHRoaXMudW5pZm9ybXNbc3ltYm9sXTtcclxuICAgICAgICBpZiAodW5pZm9ybSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5pZm9ybS52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRhY2ggYSBzaGFkZXIgaW5zdGFuY2VcclxuICAgICAqIEBwYXJhbSAge2NsYXkuU2hhZGVyfSBzaGFkZXJcclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IGtlZXBTdGF0dXMgSWYgdHJ5IHRvIGtlZXAgdW5pZm9ybSBhbmQgdGV4dHVyZVxyXG4gICAgICovXHJcbiAgICBhdHRhY2hTaGFkZXI6IGZ1bmN0aW9uKHNoYWRlciwga2VlcFN0YXR1cykge1xyXG4gICAgICAgIHZhciBvcmlnaW5hbFVuaWZvcm1zID0gdGhpcy51bmlmb3JtcztcclxuXHJcbiAgICAgICAgLy8gSWdub3JlIGlmIHVuaWZvcm0gY2FuIHVzZSBpbiBzaGFkZXIuXHJcbiAgICAgICAgdGhpcy51bmlmb3JtcyA9IHNoYWRlci5jcmVhdGVVbmlmb3JtcygpO1xyXG4gICAgICAgIHRoaXMuc2hhZGVyID0gc2hhZGVyO1xyXG5cclxuICAgICAgICB2YXIgdW5pZm9ybXMgPSB0aGlzLnVuaWZvcm1zO1xyXG4gICAgICAgIHRoaXMuX2VuYWJsZWRVbmlmb3JtcyA9IE9iamVjdC5rZXlzKHVuaWZvcm1zKTtcclxuICAgICAgICAvLyBNYWtlIHN1cmUgdW5pZm9ybXMgYXJlIHNldCBpbiBzYW1lIG9yZGVyIHRvIGF2b2lkIHRleHR1cmUgc2xvdCB3cm9uZ1xyXG4gICAgICAgIHRoaXMuX2VuYWJsZWRVbmlmb3Jtcy5zb3J0KCk7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVVuaWZvcm1zID0gdGhpcy5fZW5hYmxlZFVuaWZvcm1zLmZpbHRlcihmdW5jdGlvbiAodW5pZm9ybU5hbWUpIHtcclxuICAgICAgICAgICAgdmFyIHR5cGUgPSB0aGlzLnVuaWZvcm1zW3VuaWZvcm1OYW1lXS50eXBlO1xyXG4gICAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ3QnIHx8IHR5cGUgPT09ICd0dic7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcblxyXG4gICAgICAgIHZhciBvcmlnaW5hbFZlcnRleERlZmluZXMgPSB0aGlzLnZlcnRleERlZmluZXM7XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsRnJhZ21lbnREZWZpbmVzID0gdGhpcy5mcmFnbWVudERlZmluZXM7XHJcblxyXG4gICAgICAgIHRoaXMudmVydGV4RGVmaW5lcyA9IHV0aWwuY2xvbmUoc2hhZGVyLnZlcnRleERlZmluZXMpO1xyXG4gICAgICAgIHRoaXMuZnJhZ21lbnREZWZpbmVzID0gdXRpbC5jbG9uZShzaGFkZXIuZnJhZ21lbnREZWZpbmVzKTtcclxuXHJcbiAgICAgICAgaWYgKGtlZXBTdGF0dXMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIG9yaWdpbmFsVW5pZm9ybXMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3Jtc1tzeW1ib2xdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXNbc3ltYm9sXS52YWx1ZSA9IG9yaWdpbmFsVW5pZm9ybXNbc3ltYm9sXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdXRpbC5kZWZhdWx0cyh0aGlzLnZlcnRleERlZmluZXMsIG9yaWdpbmFsVmVydGV4RGVmaW5lcyk7XHJcbiAgICAgICAgICAgIHV0aWwuZGVmYXVsdHModGhpcy5mcmFnbWVudERlZmluZXMsIG9yaWdpbmFsRnJhZ21lbnREZWZpbmVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlU3RhdHVzID0ge307XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNoYWRlci50ZXh0dXJlcykge1xyXG4gICAgICAgICAgICB0ZXh0dXJlU3RhdHVzW2tleV0gPSB7XHJcbiAgICAgICAgICAgICAgICBzaGFkZXJUeXBlOiBzaGFkZXIudGV4dHVyZXNba2V5XS5zaGFkZXJUeXBlLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogc2hhZGVyLnRleHR1cmVzW2tleV0udHlwZSxcclxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IChrZWVwU3RhdHVzICYmIHRoaXMuX3RleHR1cmVTdGF0dXNba2V5XSkgPyB0aGlzLl90ZXh0dXJlU3RhdHVzW2tleV0uZW5hYmxlZCA6IGZhbHNlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl90ZXh0dXJlU3RhdHVzID0gdGV4dHVyZVN0YXR1cztcclxuXHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IG1hdGVyaWFsIGFuZCBrZWVwIHVuaWZvcm1zLCBzaGFkZXIgd2lsbCBub3QgYmUgY2xvbmVkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdGVyaWFsfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtYXRlcmlhbCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICBzaGFkZXI6IHRoaXMuc2hhZGVyXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRoaXMudW5pZm9ybXMpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudW5pZm9ybXNbc3ltYm9sXS52YWx1ZSA9IHRoaXMudW5pZm9ybXNbc3ltYm9sXS52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID0gdGhpcy5kZXB0aFRlc3Q7XHJcbiAgICAgICAgbWF0ZXJpYWwuZGVwdGhNYXNrID0gdGhpcy5kZXB0aE1hc2s7XHJcbiAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0aGlzLnRyYW5zcGFyZW50O1xyXG4gICAgICAgIG1hdGVyaWFsLmJsZW5kID0gdGhpcy5ibGVuZDtcclxuXHJcbiAgICAgICAgbWF0ZXJpYWwudmVydGV4RGVmaW5lcyA9IHV0aWwuY2xvbmUodGhpcy52ZXJ0ZXhEZWZpbmVzKTtcclxuICAgICAgICBtYXRlcmlhbC5mcmFnbWVudERlZmluZXMgPSB1dGlsLmNsb25lKHRoaXMuZnJhZ21lbnREZWZpbmVzKTtcclxuICAgICAgICBtYXRlcmlhbC5lbmFibGVUZXh0dXJlKHRoaXMuZ2V0RW5hYmxlZFRleHR1cmVzKCkpO1xyXG4gICAgICAgIG1hdGVyaWFsLnByZWNpc2lvbiA9IHRoaXMucHJlY2lzaW9uO1xyXG5cclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGEgI2RlZmluZSBtYWNybyBpbiBzaGFkZXIgY29kZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJUeXBlIENhbiBiZSB2ZXJ0ZXgsIGZyYWdtZW50IG9yIGJvdGhcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFt2YWxdXHJcbiAgICAgKi9cclxuICAgIGRlZmluZTogZnVuY3Rpb24gKHNoYWRlclR5cGUsIHN5bWJvbCwgdmFsKSB7XHJcbiAgICAgICAgdmFyIHZlcnRleERlZmluZXMgPSB0aGlzLnZlcnRleERlZmluZXM7XHJcbiAgICAgICAgdmFyIGZyYWdtZW50RGVmaW5lcyA9IHRoaXMuZnJhZ21lbnREZWZpbmVzO1xyXG4gICAgICAgIGlmIChzaGFkZXJUeXBlICE9PSAndmVydGV4JyAmJiBzaGFkZXJUeXBlICE9PSAnZnJhZ21lbnQnICYmIHNoYWRlclR5cGUgIT09ICdib3RoJ1xyXG4gICAgICAgICAgICAmJiBhcmd1bWVudHMubGVuZ3RoIDwgM1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICAvLyBzaGFkZXJUeXBlIGRlZmF1bHQgdG8gYmUgJ2JvdGgnXHJcbiAgICAgICAgICAgIHZhbCA9IHN5bWJvbDtcclxuICAgICAgICAgICAgc3ltYm9sID0gc2hhZGVyVHlwZTtcclxuICAgICAgICAgICAgc2hhZGVyVHlwZSA9ICdib3RoJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFsID0gdmFsICE9IG51bGwgPyB2YWwgOiBudWxsO1xyXG4gICAgICAgIGlmIChzaGFkZXJUeXBlID09PSAndmVydGV4JyB8fCBzaGFkZXJUeXBlID09PSAnYm90aCcpIHtcclxuICAgICAgICAgICAgaWYgKHZlcnRleERlZmluZXNbc3ltYm9sXSAhPT0gdmFsKSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0ZXhEZWZpbmVzW3N5bWJvbF0gPSB2YWw7XHJcbiAgICAgICAgICAgICAgICAvLyBNYXJrIGFzIGRpcnR5XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgPT09ICdmcmFnbWVudCcgfHwgc2hhZGVyVHlwZSA9PT0gJ2JvdGgnKSB7XHJcbiAgICAgICAgICAgIGlmIChmcmFnbWVudERlZmluZXNbc3ltYm9sXSAhPT0gdmFsKSB7XHJcbiAgICAgICAgICAgICAgICBmcmFnbWVudERlZmluZXNbc3ltYm9sXSA9IHZhbDtcclxuICAgICAgICAgICAgICAgIGlmIChzaGFkZXJUeXBlICE9PSAnYm90aCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmFtS2V5ID0gJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGEgI2RlZmluZSBtYWNybyBpbiBzaGFkZXIgY29kZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzaGFkZXJUeXBlIENhbiBiZSB2ZXJ0ZXgsIGZyYWdtZW50IG9yIGJvdGhcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKi9cclxuICAgIHVuZGVmaW5lOiBmdW5jdGlvbiAoc2hhZGVyVHlwZSwgc3ltYm9sKSB7XHJcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgIT09ICd2ZXJ0ZXgnICYmIHNoYWRlclR5cGUgIT09ICdmcmFnbWVudCcgJiYgc2hhZGVyVHlwZSAhPT0gJ2JvdGgnXHJcbiAgICAgICAgICAgICYmIGFyZ3VtZW50cy5sZW5ndGggPCAyXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIHNoYWRlclR5cGUgZGVmYXVsdCB0byBiZSAnYm90aCdcclxuICAgICAgICAgICAgc3ltYm9sID0gc2hhZGVyVHlwZTtcclxuICAgICAgICAgICAgc2hhZGVyVHlwZSA9ICdib3RoJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNoYWRlclR5cGUgPT09ICd2ZXJ0ZXgnIHx8IHNoYWRlclR5cGUgPT09ICdib3RoJykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0RlZmluZWQoJ3ZlcnRleCcsIHN5bWJvbCkpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZlcnRleERlZmluZXNbc3ltYm9sXTtcclxuICAgICAgICAgICAgICAgIC8vIE1hcmsgYXMgZGlydHlcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2hhZGVyVHlwZSA9PT0gJ2ZyYWdtZW50JyB8fCBzaGFkZXJUeXBlID09PSAnYm90aCcpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEZWZpbmVkKCdmcmFnbWVudCcsIHN5bWJvbCkpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmZyYWdtZW50RGVmaW5lc1tzeW1ib2xdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRlclR5cGUgIT09ICdib3RoJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBtYWNybyBpcyBkZWZpbmVkIGluIHNoYWRlci5cclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc2hhZGVyVHlwZSBDYW4gYmUgdmVydGV4LCBmcmFnbWVudCBvciBib3RoXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICovXHJcbiAgICBpc0RlZmluZWQ6IGZ1bmN0aW9uIChzaGFkZXJUeXBlLCBzeW1ib2wpIHtcclxuICAgICAgICAvLyBQRU5ESU5HIGhhc093blByb3BlcnR5ID9cclxuICAgICAgICBzd2l0Y2ggKHNoYWRlclR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAndmVydGV4JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZlcnRleERlZmluZXNbc3ltYm9sXSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBjYXNlICdmcmFnbWVudCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mcmFnbWVudERlZmluZXNbc3ltYm9sXSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBtYWNybyB2YWx1ZSBkZWZpbmVkIGluIHNoYWRlci5cclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc2hhZGVyVHlwZSBDYW4gYmUgdmVydGV4LCBmcmFnbWVudCBvciBib3RoXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICovXHJcbiAgICBnZXREZWZpbmU6IGZ1bmN0aW9uIChzaGFkZXJUeXBlLCBzeW1ib2wpIHtcclxuICAgICAgICBzd2l0Y2goc2hhZGVyVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlICd2ZXJ0ZXgnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmVydGV4RGVmaW5lc1tzeW1ib2xdO1xyXG4gICAgICAgICAgICBjYXNlICdmcmFnbWVudCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mcmFnbWVudERlZmluZXNbc3ltYm9sXTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmFibGUgYSB0ZXh0dXJlLCBhY3R1YWxseSBpdCB3aWxsIGFkZCBhICNkZWZpbmUgbWFjcm8gaW4gdGhlIHNoYWRlciBjb2RlXHJcbiAgICAgKiBGb3IgZXhhbXBsZSwgaWYgdGV4dHVyZSBzeW1ib2wgaXMgZGlmZnVzZU1hcCwgaXQgd2lsbCBhZGQgYSBsaW5lIGAjZGVmaW5lIERJRkZVU0VNQVBfRU5BQkxFRGAgaW4gdGhlIHNoYWRlciBjb2RlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICovXHJcbiAgICBlbmFibGVUZXh0dXJlOiBmdW5jdGlvbiAoc3ltYm9sKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3ltYm9sKSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVUZXh0dXJlKHN5bWJvbFtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXNbc3ltYm9sXTtcclxuICAgICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHZhciBpc0VuYWJsZWQgPSBzdGF0dXMuZW5hYmxlZDtcclxuICAgICAgICAgICAgaWYgKCFpc0VuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHN0YXR1cy5lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZSBhbGwgdGV4dHVyZXMgdXNlZCBpbiB0aGUgc2hhZGVyXHJcbiAgICAgKi9cclxuICAgIGVuYWJsZVRleHR1cmVzQWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB0aGlzLl90ZXh0dXJlU3RhdHVzO1xyXG4gICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiB0ZXh0dXJlU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHRleHR1cmVTdGF0dXNbc3ltYm9sXS5lbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERpc2FibGUgYSB0ZXh0dXJlLCBpdCByZW1vdmUgYSAjZGVmaW5lIG1hY3JvIGluIHRoZSBzaGFkZXJcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gc3ltYm9sXHJcbiAgICAgKi9cclxuICAgIGRpc2FibGVUZXh0dXJlOiBmdW5jdGlvbiAoc3ltYm9sKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3ltYm9sKSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlVGV4dHVyZShzeW1ib2xbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzdGF0dXMgPSB0aGlzLl90ZXh0dXJlU3RhdHVzW3N5bWJvbF07XHJcbiAgICAgICAgaWYgKHN0YXR1cykge1xyXG4gICAgICAgICAgICB2YXIgaXNEaXNhYmxlZCA9ICEgc3RhdHVzLmVuYWJsZWQ7XHJcbiAgICAgICAgICAgIGlmICghaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzLmVuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIERpc2FibGUgYWxsIHRleHR1cmVzIHVzZWQgaW4gdGhlIHNoYWRlclxyXG4gICAgICovXHJcbiAgICBkaXNhYmxlVGV4dHVyZXNBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZVN0YXR1cyA9IHRoaXMuX3RleHR1cmVTdGF0dXM7XHJcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRleHR1cmVTdGF0dXMpIHtcclxuICAgICAgICAgICAgdGV4dHVyZVN0YXR1c1tzeW1ib2xdLmVuYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSAnJztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIElmIHRleHR1cmUgb2YgZ2l2ZW4gdHlwZSBpcyBlbmFibGVkLlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSAgc3ltYm9sXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc1RleHR1cmVFbmFibGVkOiBmdW5jdGlvbiAoc3ltYm9sKSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB0aGlzLl90ZXh0dXJlU3RhdHVzO1xyXG4gICAgICAgIHJldHVybiAhIXRleHR1cmVTdGF0dXNbc3ltYm9sXVxyXG4gICAgICAgICAgICAmJiB0ZXh0dXJlU3RhdHVzW3N5bWJvbF0uZW5hYmxlZDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYWxsIGVuYWJsZWQgdGV4dHVyZXNcclxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfVxyXG4gICAgICovXHJcbiAgICBnZXRFbmFibGVkVGV4dHVyZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZW5hYmxlZFRleHR1cmVzID0gW107XHJcbiAgICAgICAgdmFyIHRleHR1cmVTdGF0dXMgPSB0aGlzLl90ZXh0dXJlU3RhdHVzO1xyXG4gICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiB0ZXh0dXJlU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlU3RhdHVzW3N5bWJvbF0uZW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZFRleHR1cmVzLnB1c2goc3ltYm9sKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZW5hYmxlZFRleHR1cmVzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmsgZGVmaW5lcyBhcmUgdXBkYXRlZC5cclxuICAgICAqL1xyXG4gICAgZGlydHlEZWZpbmVzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvZ3JhbUtleSA9ICcnO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRQcm9ncmFtS2V5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wcm9ncmFtS2V5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2dyYW1LZXkgPSBnZXRQcm9ncmFtS2V5KFxyXG4gICAgICAgICAgICAgICAgdGhpcy52ZXJ0ZXhEZWZpbmVzLCB0aGlzLmZyYWdtZW50RGVmaW5lcywgdGhpcy5nZXRFbmFibGVkVGV4dHVyZXMoKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3JhbUtleTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRlcmlhbDtcclxuIiwiaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcblxyXG52YXIgU0hBREVSX1NUQVRFX1RPX0VOQUJMRSA9IDE7XHJcbnZhciBTSEFERVJfU1RBVEVfS0VFUF9FTkFCTEUgPSAyO1xyXG52YXIgU0hBREVSX1NUQVRFX1BFTkRJTkcgPSAzO1xyXG5cclxuLy8gRW5hYmxlIGF0dHJpYnV0ZSBvcGVyYXRpb24gaXMgZ2xvYmFsIHRvIGFsbCBwcm9ncmFtc1xyXG4vLyBIZXJlIHNhdmVkIHRoZSBsaXN0IG9mIGFsbCBlbmFibGVkIGF0dHJpYnV0ZSBpbmRleFxyXG4vLyBodHRwOi8vd3d3Lm1qYnNoYXcuY29tLzIwMTMvMDMvd2ViZ2wtZml4aW5nLWludmFsaWRvcGVyYXRpb24uaHRtbFxyXG52YXIgZW5hYmxlZEF0dHJpYnV0ZUxpc3QgPSB7fTtcclxuXHJcbi8vIHNvbWUgdXRpbCBmdW5jdGlvbnNcclxuZnVuY3Rpb24gYWRkTGluZU51bWJlcnMoc3RyaW5nKSB7XHJcbiAgICB2YXIgY2h1bmtzID0gc3RyaW5nLnNwbGl0KCdcXG4nKTtcclxuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGNodW5rcy5sZW5ndGg7IGkgPCBpbDsgaSArKykge1xyXG4gICAgICAgIC8vIENocm9tZSByZXBvcnRzIHNoYWRlciBlcnJvcnMgb24gbGluZXNcclxuICAgICAgICAvLyBzdGFydGluZyBjb3VudGluZyBmcm9tIDFcclxuICAgICAgICBjaHVua3NbaV0gPSAoaSArIDEpICsgJzogJyArIGNodW5rc1tpXTtcclxuICAgIH1cclxuICAgIHJldHVybiBjaHVua3Muam9pbignXFxuJyk7XHJcbn1cclxuXHJcbi8vIFJldHVybiB0cnVlIG9yIGVycm9yIG1zZyBpZiBlcnJvciBoYXBwZW5lZFxyXG5mdW5jdGlvbiBjaGVja1NoYWRlckVycm9yTXNnKF9nbCwgc2hhZGVyLCBzaGFkZXJTdHJpbmcpIHtcclxuICAgIGlmICghX2dsLmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIF9nbC5DT01QSUxFX1NUQVRVUykpIHtcclxuICAgICAgICByZXR1cm4gW19nbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlciksIGFkZExpbmVOdW1iZXJzKHNoYWRlclN0cmluZyldLmpvaW4oJ1xcbicpO1xyXG4gICAgfVxyXG59XHJcblxyXG52YXIgdG1wRmxvYXQzMkFycmF5MTYgPSBuZXcgdmVuZG9yLkZsb2F0MzJBcnJheSgxNik7XHJcblxyXG52YXIgR0xQcm9ncmFtID0gQmFzZS5leHRlbmQoe1xyXG5cclxuICAgIHVuaWZvcm1TZW1hbnRpY3M6IHt9LFxyXG4gICAgYXR0cmlidXRlczoge31cclxuXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX2xvY2F0aW9ucyA9IHt9O1xyXG5cclxuICAgIHRoaXMuX3RleHR1cmVTbG90ID0gMDtcclxuXHJcbiAgICB0aGlzLl9wcm9ncmFtID0gbnVsbDtcclxufSwge1xyXG5cclxuICAgIGJpbmQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmVTbG90ID0gMDtcclxuICAgICAgICByZW5kZXJlci5nbC51c2VQcm9ncmFtKHRoaXMuX3Byb2dyYW0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBoYXNVbmlmb3JtOiBmdW5jdGlvbiAoc3ltYm9sKSB7XHJcbiAgICAgICAgdmFyIGxvY2F0aW9uID0gdGhpcy5fbG9jYXRpb25zW3N5bWJvbF07XHJcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uICE9PSBudWxsICYmIGxvY2F0aW9uICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9LFxyXG5cclxuICAgIHVzZVRleHR1cmVTbG90OiBmdW5jdGlvbiAocmVuZGVyZXIsIHRleHR1cmUsIHNsb3QpIHtcclxuICAgICAgICBpZiAodGV4dHVyZSkge1xyXG4gICAgICAgICAgICByZW5kZXJlci5nbC5hY3RpdmVUZXh0dXJlKHJlbmRlcmVyLmdsLlRFWFRVUkUwICsgc2xvdCk7XHJcbiAgICAgICAgICAgIC8vIE1heWJlIHRleHR1cmUgaXMgbm90IGxvYWRlZCB5ZXQ7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0dXJlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gQmluZCB0ZXh0dXJlIHRvIG51bGxcclxuICAgICAgICAgICAgICAgIHRleHR1cmUudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgY3VycmVudFRleHR1cmVTbG90OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVTbG90O1xyXG4gICAgfSxcclxuXHJcbiAgICByZXNldFRleHR1cmVTbG90OiBmdW5jdGlvbiAoc2xvdCkge1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmVTbG90ID0gc2xvdCB8fCAwO1xyXG4gICAgfSxcclxuXHJcbiAgICB0YWtlQ3VycmVudFRleHR1cmVTbG90OiBmdW5jdGlvbiAocmVuZGVyZXIsIHRleHR1cmUpIHtcclxuICAgICAgICB2YXIgdGV4dHVyZVNsb3QgPSB0aGlzLl90ZXh0dXJlU2xvdDtcclxuXHJcbiAgICAgICAgdGhpcy51c2VUZXh0dXJlU2xvdChyZW5kZXJlciwgdGV4dHVyZSwgdGV4dHVyZVNsb3QpO1xyXG5cclxuICAgICAgICB0aGlzLl90ZXh0dXJlU2xvdCsrO1xyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZVNsb3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldFVuaWZvcm06IGZ1bmN0aW9uIChfZ2wsIHR5cGUsIHN5bWJvbCwgdmFsdWUpIHtcclxuICAgICAgICB2YXIgbG9jYXRpb25NYXAgPSB0aGlzLl9sb2NhdGlvbnM7XHJcbiAgICAgICAgdmFyIGxvY2F0aW9uID0gbG9jYXRpb25NYXBbc3ltYm9sXTtcclxuICAgICAgICAvLyBVbmlmb3JtIGlzIG5vdCBleGlzdGVkIGluIHRoZSBzaGFkZXJcclxuICAgICAgICBpZiAobG9jYXRpb24gPT09IG51bGwgfHwgbG9jYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnbTQnOlxyXG4gICAgICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIEZsb2F0MzJBcnJheSBpcyBtdWNoIGZhc3RlciB0aGFuIGFycmF5IHdoZW4gdW5pZm9ybU1hdHJpeDRmdi5cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcEZsb2F0MzJBcnJheTE2W2ldID0gdmFsdWVbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdG1wRmxvYXQzMkFycmF5MTY7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICcyaSc6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTJpKGxvY2F0aW9uLCB2YWx1ZVswXSwgdmFsdWVbMV0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzJmJzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtMmYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnM2knOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm0zaShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnM2YnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm0zZihsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnNGknOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm00aShsb2NhdGlvbiwgdmFsdWVbMF0sIHZhbHVlWzFdLCB2YWx1ZVsyXSwgdmFsdWVbM10pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzRmJzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtNGYobG9jYXRpb24sIHZhbHVlWzBdLCB2YWx1ZVsxXSwgdmFsdWVbMl0sIHZhbHVlWzNdKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICcxaSc6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTFpKGxvY2F0aW9uLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnMWYnOlxyXG4gICAgICAgICAgICAgICAgX2dsLnVuaWZvcm0xZihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzFmdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTFmdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzFpdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTFpdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzJpdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTJpdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzJmdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTJmdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzNpdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTNpdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzNmdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTNmdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzRpdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTRpdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJzRmdic6XHJcbiAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybTRmdihsb2NhdGlvbiwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ20yJzpcclxuICAgICAgICAgICAgY2FzZSAnbTJ2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ20zJzpcclxuICAgICAgICAgICAgY2FzZSAnbTN2JzpcclxuICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ200dic6XHJcbiAgICAgICAgICAgICAgICAvLyBSYXcgdmFsdWVcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBBcnJheS5pc0FycmF5KHZhbHVlWzBdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IG5ldyB2ZW5kb3IuRmxvYXQzMkFycmF5KHZhbHVlLmxlbmd0aCAqIDE2KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc29yID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdmFsdWVbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbY3Vyc29yKytdID0gaXRlbVtqXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBfZ2wudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgZmFsc2UsIGFycmF5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyAgIC8vIEFycmF5QnVmZmVyVmlld1xyXG4gICAgICAgICAgICAgICAgICAgIF9nbC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBmYWxzZSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRVbmlmb3JtT2ZTZW1hbnRpYzogZnVuY3Rpb24gKF9nbCwgc2VtYW50aWMsIHZhbCkge1xyXG4gICAgICAgIHZhciBzZW1hbnRpY0luZm8gPSB0aGlzLnVuaWZvcm1TZW1hbnRpY3Nbc2VtYW50aWNdO1xyXG4gICAgICAgIGlmIChzZW1hbnRpY0luZm8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0VW5pZm9ybShfZ2wsIHNlbWFudGljSW5mby50eXBlLCBzZW1hbnRpY0luZm8uc3ltYm9sLCB2YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFVzZWQgZm9yIGNyZWF0aW5nIFZBT1xyXG4gICAgLy8gRW5hYmxlIHRoZSBhdHRyaWJ1dGVzIHBhc3NlZCBpbiBhbmQgZGlzYWJsZSB0aGUgcmVzdFxyXG4gICAgLy8gRXhhbXBsZSBVc2FnZTpcclxuICAgIC8vIGVuYWJsZUF0dHJpYnV0ZXMocmVuZGVyZXIsIFtcInBvc2l0aW9uXCIsIFwidGV4Y29vcmRzXCJdKVxyXG4gICAgZW5hYmxlQXR0cmlidXRlczogZnVuY3Rpb24gKHJlbmRlcmVyLCBhdHRyaWJMaXN0LCB2YW8pIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgdmFyIHByb2dyYW0gPSB0aGlzLl9wcm9ncmFtO1xyXG5cclxuICAgICAgICB2YXIgbG9jYXRpb25NYXAgPSB0aGlzLl9sb2NhdGlvbnM7XHJcblxyXG4gICAgICAgIHZhciBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dDtcclxuICAgICAgICBpZiAodmFvKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0ID0gdmFvLl9fZW5hYmxlZEF0dHJpYnV0ZUxpc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dCA9IGVuYWJsZWRBdHRyaWJ1dGVMaXN0W3JlbmRlcmVyLl9fdWlkX19dO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0KSB7XHJcbiAgICAgICAgICAgIC8vIEluIHZlcnRleCBhcnJheSBvYmplY3QgY29udGV4dFxyXG4gICAgICAgICAgICAvLyBQRU5ESU5HIEVhY2ggdmFvIG9iamVjdCBuZWVkcyB0byBlbmFibGUgYXR0cmlidXRlcyBhZ2Fpbj9cclxuICAgICAgICAgICAgaWYgKHZhbykge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRcclxuICAgICAgICAgICAgICAgICAgICA9IHZhby5fX2VuYWJsZWRBdHRyaWJ1dGVMaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgPSBlbmFibGVkQXR0cmlidXRlTGlzdFtyZW5kZXJlci5fX3VpZF9fXVxyXG4gICAgICAgICAgICAgICAgICAgID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGxvY2F0aW9uTGlzdCA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmliTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgc3ltYm9sID0gYXR0cmliTGlzdFtpXTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmF0dHJpYnV0ZXNbc3ltYm9sXSkge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb25MaXN0W2ldID0gLTE7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgbG9jYXRpb24gPSBsb2NhdGlvbk1hcFtzeW1ib2xdO1xyXG4gICAgICAgICAgICBpZiAobG9jYXRpb24gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb24gPSBfZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgc3ltYm9sKTtcclxuICAgICAgICAgICAgICAgIC8vIEF0dHJpYiBsb2NhdGlvbiBpcyBhIG51bWJlciBmcm9tIDAgdG8gLi4uXHJcbiAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24gPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25MaXN0W2ldID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbk1hcFtzeW1ib2xdID0gbG9jYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbG9jYXRpb25MaXN0W2ldID0gbG9jYXRpb247XHJcblxyXG4gICAgICAgICAgICBpZiAoIWVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0W2xvY2F0aW9uXSkge1xyXG4gICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbbG9jYXRpb25dID0gU0hBREVSX1NUQVRFX1RPX0VOQUJMRTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVuYWJsZWRBdHRyaWJ1dGVMaXN0SW5Db250ZXh0W2xvY2F0aW9uXSA9IFNIQURFUl9TVEFURV9LRUVQX0VOQUJMRTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBzd2l0Y2goZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbaV0pe1xyXG4gICAgICAgICAgICAgICAgY2FzZSBTSEFERVJfU1RBVEVfVE9fRU5BQkxFOlxyXG4gICAgICAgICAgICAgICAgICAgIF9nbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtpXSA9IFNIQURFUl9TVEFURV9QRU5ESU5HO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBTSEFERVJfU1RBVEVfS0VFUF9FTkFCTEU6XHJcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZEF0dHJpYnV0ZUxpc3RJbkNvbnRleHRbaV0gPSBTSEFERVJfU1RBVEVfUEVORElORztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIC8vIEV4cGlyZWRcclxuICAgICAgICAgICAgICAgIGNhc2UgU0hBREVSX1NUQVRFX1BFTkRJTkc6XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKTtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkQXR0cmlidXRlTGlzdEluQ29udGV4dFtpXSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBsb2NhdGlvbkxpc3Q7XHJcbiAgICB9LFxyXG5cclxuICAgIGJ1aWxkUHJvZ3JhbTogZnVuY3Rpb24gKF9nbCwgc2hhZGVyLCB2ZXJ0ZXhTaGFkZXJDb2RlLCBmcmFnbWVudFNoYWRlckNvZGUpIHtcclxuICAgICAgICB2YXIgdmVydGV4U2hhZGVyID0gX2dsLmNyZWF0ZVNoYWRlcihfZ2wuVkVSVEVYX1NIQURFUik7XHJcbiAgICAgICAgdmFyIHByb2dyYW0gPSBfZ2wuY3JlYXRlUHJvZ3JhbSgpO1xyXG5cclxuICAgICAgICBfZ2wuc2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyQ29kZSk7XHJcbiAgICAgICAgX2dsLmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTtcclxuXHJcbiAgICAgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gX2dsLmNyZWF0ZVNoYWRlcihfZ2wuRlJBR01FTlRfU0hBREVSKTtcclxuICAgICAgICBfZ2wuc2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlckNvZGUpO1xyXG4gICAgICAgIF9nbC5jb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTtcclxuXHJcbiAgICAgICAgdmFyIG1zZyA9IGNoZWNrU2hhZGVyRXJyb3JNc2coX2dsLCB2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNoYWRlckNvZGUpO1xyXG4gICAgICAgIGlmIChtc2cpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1zZztcclxuICAgICAgICB9XHJcbiAgICAgICAgbXNnID0gY2hlY2tTaGFkZXJFcnJvck1zZyhfZ2wsIGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlckNvZGUpO1xyXG4gICAgICAgIGlmIChtc2cpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1zZztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9nbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgdmVydGV4U2hhZGVyKTtcclxuICAgICAgICBfZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTtcclxuICAgICAgICAvLyBGb3JjZSB0aGUgcG9zaXRpb24gYmluZCB0byBsb2NhdGlvbiAwO1xyXG4gICAgICAgIGlmIChzaGFkZXIuYXR0cmlidXRlU2VtYW50aWNzWydQT1NJVElPTiddKSB7XHJcbiAgICAgICAgICAgIF9nbC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgMCwgc2hhZGVyLmF0dHJpYnV0ZVNlbWFudGljc1snUE9TSVRJT04nXS5zeW1ib2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gRWxzZSBjaG9vc2UgYW4gYXR0cmlidXRlIGFuZCBiaW5kIHRvIGxvY2F0aW9uIDA7XHJcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGhpcy5hdHRyaWJ1dGVzKTtcclxuICAgICAgICAgICAgX2dsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAwLCBrZXlzWzBdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9nbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcclxuXHJcbiAgICAgICAgX2dsLmRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpO1xyXG4gICAgICAgIF9nbC5kZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9wcm9ncmFtID0gcHJvZ3JhbTtcclxuXHJcbiAgICAgICAgLy8gU2F2ZSBjb2RlLlxyXG4gICAgICAgIHRoaXMudmVydGV4Q29kZSA9IHZlcnRleFNoYWRlckNvZGU7XHJcbiAgICAgICAgdGhpcy5mcmFnbWVudENvZGUgPSBmcmFnbWVudFNoYWRlckNvZGU7XHJcblxyXG4gICAgICAgIGlmICghX2dsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgX2dsLkxJTktfU1RBVFVTKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ0NvdWxkIG5vdCBsaW5rIHByb2dyYW1cXG4nICsgX2dsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ2FjaGUgdW5pZm9ybSBsb2NhdGlvbnNcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNoYWRlci51bmlmb3Jtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybVN5bWJvbCA9IHNoYWRlci51bmlmb3Jtc1tpXTtcclxuICAgICAgICAgICAgdGhpcy5fbG9jYXRpb25zW3VuaWZvcm1TeW1ib2xdID0gX2dsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1bmlmb3JtU3ltYm9sKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdMUHJvZ3JhbTsiLCJpbXBvcnQgR0xQcm9ncmFtIGZyb20gJy4vR0xQcm9ncmFtJztcclxuXHJcbnZhciBsb29wUmVnZXggPSAvZm9yXFxzKj9cXChpbnRcXHMqP19pZHhfXFxzKlxcPVxccyooW1xcdy1dKylcXDtcXHMqX2lkeF9cXHMqPFxccyooW1xcdy1dKyk7XFxzKl9pZHhfXFxzKlxcK1xcK1xccypcXClcXHMqXFx7XFx7KFtcXHNcXFNdKz8pKD89XFx9XFx9KVxcfVxcfS9nO1xyXG5cclxuZnVuY3Rpb24gdW5yb2xsTG9vcChzaGFkZXJTdHIsIGRlZmluZXMsIGxpZ2h0c051bWJlcnMpIHtcclxuICAgIC8vIExvb3AgdW5yb2xsIGZyb20gdGhyZWUuanMsIGh0dHBzOi8vZ2l0aHViLmNvbS9tcmRvb2IvdGhyZWUuanMvYmxvYi9tYXN0ZXIvc3JjL3JlbmRlcmVycy93ZWJnbC9XZWJHTFByb2dyYW0uanMjTDE3NVxyXG4gICAgLy8gSW4gc29tZSBjYXNlIGxpa2Ugc2hhZG93TWFwIGluIGxvb3AgdXNlICdpJyB0byBpbmRleCB2YWx1ZSBtdWNoIHNsb3dlci5cclxuXHJcbiAgICAvLyBMb29wIHVzZSBfaWR4XyBhbmQgaW5jcmVhc2VkIHdpdGggX2lkeF8rKyB3aWxsIGJlIHVucm9sbGVkXHJcbiAgICAvLyBVc2Uge3sgfX0gdG8gbWF0Y2ggdGhlIHBhaXIgc28gdGhlIGlmIHN0YXRlbWVudCB3aWxsIG5vdCBiZSBhZmZlY3RlZFxyXG4gICAgLy8gV3JpdGUgbGlrZSBmb2xsb3dpbmdcclxuICAgIC8vIGZvciAoaW50IF9pZHhfID0gMDsgX2lkeF8gPCA0OyBfaWR4XysrKSB7e1xyXG4gICAgLy8gICAgIHZlYzMgY29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZXNbX2lkeF9dLCB1dikucmdiO1xyXG4gICAgLy8gfX1cclxuICAgIGZ1bmN0aW9uIHJlcGxhY2UobWF0Y2gsIHN0YXJ0LCBlbmQsIHNuaXBwZXQpIHtcclxuICAgICAgICB2YXIgdW5yb2xsID0gJyc7XHJcbiAgICAgICAgLy8gVHJ5IHRvIHRyZWF0IGFzIGRlZmluZVxyXG4gICAgICAgIGlmIChpc05hTihzdGFydCkpIHtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0IGluIGRlZmluZXMpIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gZGVmaW5lc1tzdGFydF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydCA9IGxpZ2h0TnVtYmVyRGVmaW5lc1tzdGFydF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzTmFOKGVuZCkpIHtcclxuICAgICAgICAgICAgaWYgKGVuZCBpbiBkZWZpbmVzKSB7XHJcbiAgICAgICAgICAgICAgICBlbmQgPSBkZWZpbmVzW2VuZF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbmQgPSBsaWdodE51bWJlckRlZmluZXNbZW5kXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPIEVycm9yIGNoZWNraW5nXHJcblxyXG4gICAgICAgIGZvciAodmFyIGlkeCA9IHBhcnNlSW50KHN0YXJ0KTsgaWR4IDwgcGFyc2VJbnQoZW5kKTsgaWR4KyspIHtcclxuICAgICAgICAgICAgLy8gUEVORElORyBBZGQgc2NvcGU/XHJcbiAgICAgICAgICAgIHVucm9sbCArPSAneydcclxuICAgICAgICAgICAgICAgICsgc25pcHBldFxyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9mbG9hdFxccypcXChcXHMqX2lkeF9cXHMqXFwpL2csIGlkeC50b0ZpeGVkKDEpKVxyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9faWR4Xy9nLCBpZHgpXHJcbiAgICAgICAgICAgICsgJ30nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHVucm9sbDtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbGlnaHROdW1iZXJEZWZpbmVzID0ge307XHJcbiAgICBmb3IgKHZhciBsaWdodFR5cGUgaW4gbGlnaHRzTnVtYmVycykge1xyXG4gICAgICAgIGxpZ2h0TnVtYmVyRGVmaW5lc1tsaWdodFR5cGUgKyAnX0NPVU5UJ10gPSBsaWdodHNOdW1iZXJzW2xpZ2h0VHlwZV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2hhZGVyU3RyLnJlcGxhY2UobG9vcFJlZ2V4LCByZXBsYWNlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0RGVmaW5lQ29kZShkZWZpbmVzLCBsaWdodHNOdW1iZXJzLCBlbmFibGVkVGV4dHVyZXMpIHtcclxuICAgIHZhciBkZWZpbmVTdHIgPSBbXTtcclxuICAgIGlmIChsaWdodHNOdW1iZXJzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgbGlnaHRUeXBlIGluIGxpZ2h0c051bWJlcnMpIHtcclxuICAgICAgICAgICAgdmFyIGNvdW50ID0gbGlnaHRzTnVtYmVyc1tsaWdodFR5cGVdO1xyXG4gICAgICAgICAgICBpZiAoY291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBkZWZpbmVTdHIucHVzaCgnI2RlZmluZSAnICsgbGlnaHRUeXBlLnRvVXBwZXJDYXNlKCkgKyAnX0NPVU5UICcgKyBjb3VudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZW5hYmxlZFRleHR1cmVzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmFibGVkVGV4dHVyZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHN5bWJvbCA9IGVuYWJsZWRUZXh0dXJlc1tpXTtcclxuICAgICAgICAgICAgZGVmaW5lU3RyLnB1c2goJyNkZWZpbmUgJyArIHN5bWJvbC50b1VwcGVyQ2FzZSgpICsgJ19FTkFCTEVEJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gQ3VzdG9tIERlZmluZXNcclxuICAgIGZvciAodmFyIHN5bWJvbCBpbiBkZWZpbmVzKSB7XHJcbiAgICAgICAgdmFyIHZhbHVlID0gZGVmaW5lc1tzeW1ib2xdO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkZWZpbmVTdHIucHVzaCgnI2RlZmluZSAnICsgc3ltYm9sKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgZGVmaW5lU3RyLnB1c2goJyNkZWZpbmUgJyArIHN5bWJvbCArICcgJyArIHZhbHVlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkZWZpbmVTdHIuam9pbignXFxuJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEV4dGVuc2lvbkNvZGUoZXh0cykge1xyXG4gICAgLy8gRXh0ZW5zaW9uIGRlY2xhcmF0aW9uIG11c3QgYmVmb3JlIGFsbCBub24tcHJlcHJvY2Vzc29yIGNvZGVzXHJcbiAgICAvLyBUT0RPIHZlcnRleCA/IGV4dGVuc2lvbiBlbnVtID9cclxuICAgIHZhciBleHRlbnNpb25TdHIgPSBbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGV4dGVuc2lvblN0ci5wdXNoKCcjZXh0ZW5zaW9uIEdMXycgKyBleHRzW2ldICsgJyA6IGVuYWJsZScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGV4dGVuc2lvblN0ci5qb2luKCdcXG4nKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UHJlY2lzaW9uQ29kZShwcmVjaXNpb24pIHtcclxuICAgIHJldHVybiBbJ3ByZWNpc2lvbicsIHByZWNpc2lvbiwgJ2Zsb2F0J10uam9pbignICcpICsgJztcXG4nXHJcbiAgICAgICAgKyBbJ3ByZWNpc2lvbicsIHByZWNpc2lvbiwgJ2ludCddLmpvaW4oJyAnKSArICc7XFxuJ1xyXG4gICAgICAgIC8vIGRlcHRoIHRleHR1cmUgbWF5IGhhdmUgcHJlY2lzaW9uIHByb2JsZW0gb24gaU9TIGRldmljZS5cclxuICAgICAgICArIFsncHJlY2lzaW9uJywgcHJlY2lzaW9uLCAnc2FtcGxlcjJEJ10uam9pbignICcpICsgJztcXG4nO1xyXG59XHJcblxyXG5mdW5jdGlvbiBQcm9ncmFtTWFuYWdlcihyZW5kZXJlcikge1xyXG4gICAgdGhpcy5fcmVuZGVyZXIgPSByZW5kZXJlcjtcclxuICAgIHRoaXMuX2NhY2hlID0ge307XHJcbn1cclxuXHJcblByb2dyYW1NYW5hZ2VyLnByb3RvdHlwZS5nZXRQcm9ncmFtID0gZnVuY3Rpb24gKHJlbmRlcmFibGUsIG1hdGVyaWFsLCBzY2VuZSkge1xyXG4gICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcblxyXG4gICAgdmFyIGlzU2tpbm5lZE1lc2ggPSByZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2ggJiYgcmVuZGVyYWJsZS5pc1NraW5uZWRNZXNoKCk7XHJcbiAgICB2YXIga2V5ID0gJ3MnICsgbWF0ZXJpYWwuc2hhZGVyLnNoYWRlcklEICsgJ20nICsgbWF0ZXJpYWwuZ2V0UHJvZ3JhbUtleSgpO1xyXG4gICAgaWYgKHNjZW5lKSB7XHJcbiAgICAgICAga2V5ICs9ICdzZScgKyBzY2VuZS5nZXRQcm9ncmFtS2V5KHJlbmRlcmFibGUubGlnaHRHcm91cCk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNTa2lubmVkTWVzaCkge1xyXG4gICAgICAgIGtleSArPSAnLCcgKyByZW5kZXJhYmxlLmpvaW50cy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICB2YXIgcHJvZ3JhbSA9IGNhY2hlW2tleV07XHJcblxyXG4gICAgaWYgKHByb2dyYW0pIHtcclxuICAgICAgICByZXR1cm4gcHJvZ3JhbTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbGlnaHRzTnVtYmVycyA9IHNjZW5lID8gc2NlbmUuZ2V0TGlnaHRzTnVtYmVycyhyZW5kZXJhYmxlLmxpZ2h0R3JvdXApIDoge307XHJcbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLl9yZW5kZXJlcjtcclxuICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgIHZhciBlbmFibGVkVGV4dHVyZXMgPSBtYXRlcmlhbC5nZXRFbmFibGVkVGV4dHVyZXMoKTtcclxuICAgIHZhciBza2luRGVmaW5lQ29kZSA9ICcnO1xyXG4gICAgaWYgKGlzU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICB2YXIgc2tpbkRlZmluZXMgPSB7XHJcbiAgICAgICAgICAgIFNLSU5OSU5HOiBudWxsLFxyXG4gICAgICAgICAgICBKT0lOVF9DT1VOVDogcmVuZGVyYWJsZS5qb2ludHMubGVuZ3RoXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAocmVuZGVyYWJsZS5qb2ludHMubGVuZ3RoID4gcmVuZGVyZXIuZ2V0TWF4Sm9pbnROdW1iZXIoKSkge1xyXG4gICAgICAgICAgICBza2luRGVmaW5lcy5VU0VfU0tJTl9NQVRSSUNFU19URVhUVVJFID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETyBBZGQgc2tpbm5pbmcgY29kZT9cclxuICAgICAgICBza2luRGVmaW5lQ29kZSA9ICdcXG4nICsgZ2V0RGVmaW5lQ29kZShza2luRGVmaW5lcykgKyAnXFxuJztcclxuICAgIH1cclxuICAgIC8vIFRPRE8gT3B0aW1pemUga2V5IGdlbmVyYXRpb25cclxuICAgIC8vIFZFUlRFWFxyXG4gICAgdmFyIHZlcnRleERlZmluZVN0ciA9IHNraW5EZWZpbmVDb2RlICsgZ2V0RGVmaW5lQ29kZShtYXRlcmlhbC52ZXJ0ZXhEZWZpbmVzLCBsaWdodHNOdW1iZXJzLCBlbmFibGVkVGV4dHVyZXMpO1xyXG4gICAgLy8gRlJBR01FTlRcclxuICAgIHZhciBmcmFnbWVudERlZmluZVN0ciA9IHNraW5EZWZpbmVDb2RlICsgZ2V0RGVmaW5lQ29kZShtYXRlcmlhbC5mcmFnbWVudERlZmluZXMsIGxpZ2h0c051bWJlcnMsIGVuYWJsZWRUZXh0dXJlcyk7XHJcblxyXG4gICAgdmFyIHZlcnRleENvZGUgPSB2ZXJ0ZXhEZWZpbmVTdHIgKyAnXFxuJyArIG1hdGVyaWFsLnNoYWRlci52ZXJ0ZXg7XHJcblxyXG4gICAgdmFyIGV4dGVuc2lvbnMgPSBbXHJcbiAgICAgICAgJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycsXHJcbiAgICAgICAgJ0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QnXHJcbiAgICBdLmZpbHRlcihmdW5jdGlvbiAoZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKGV4dCkgIT0gbnVsbDtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChleHRlbnNpb25zLmluZGV4T2YoJ0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QnKSA+PSAwKSB7XHJcbiAgICAgICAgZnJhZ21lbnREZWZpbmVTdHIgKz0gJ1xcbiNkZWZpbmUgU1VQUE9SVF9URVhUVVJFX0xPRCc7XHJcbiAgICB9XHJcbiAgICBpZiAoZXh0ZW5zaW9ucy5pbmRleE9mKCdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMnKSA+PSAwKSB7XHJcbiAgICAgICAgZnJhZ21lbnREZWZpbmVTdHIgKz0gJ1xcbiNkZWZpbmUgU1VQUE9SVF9TVEFOREFSRF9ERVJJVkFUSVZFUyc7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGZyYWdtZW50Q29kZSA9IGdldEV4dGVuc2lvbkNvZGUoZXh0ZW5zaW9ucykgKyAnXFxuJ1xyXG4gICAgICAgICsgZ2V0UHJlY2lzaW9uQ29kZShtYXRlcmlhbC5wcmVjaXNpb24pICsgJ1xcbidcclxuICAgICAgICArIGZyYWdtZW50RGVmaW5lU3RyICsgJ1xcbidcclxuICAgICAgICArIG1hdGVyaWFsLnNoYWRlci5mcmFnbWVudDtcclxuXHJcbiAgICB2YXIgZmluYWxWZXJ0ZXhDb2RlID0gdW5yb2xsTG9vcCh2ZXJ0ZXhDb2RlLCBtYXRlcmlhbC52ZXJ0ZXhEZWZpbmVzLCBsaWdodHNOdW1iZXJzKTtcclxuICAgIHZhciBmaW5hbEZyYWdtZW50Q29kZSA9IHVucm9sbExvb3AoZnJhZ21lbnRDb2RlLCBtYXRlcmlhbC5mcmFnbWVudERlZmluZXMsIGxpZ2h0c051bWJlcnMpO1xyXG5cclxuICAgIHZhciBwcm9ncmFtID0gbmV3IEdMUHJvZ3JhbSgpO1xyXG4gICAgcHJvZ3JhbS51bmlmb3JtU2VtYW50aWNzID0gbWF0ZXJpYWwuc2hhZGVyLnVuaWZvcm1TZW1hbnRpY3M7XHJcbiAgICBwcm9ncmFtLmF0dHJpYnV0ZXMgPSBtYXRlcmlhbC5zaGFkZXIuYXR0cmlidXRlcztcclxuICAgIHZhciBlcnJvck1zZyA9IHByb2dyYW0uYnVpbGRQcm9ncmFtKF9nbCwgbWF0ZXJpYWwuc2hhZGVyLCBmaW5hbFZlcnRleENvZGUsIGZpbmFsRnJhZ21lbnRDb2RlKTtcclxuICAgIHByb2dyYW0uX19lcnJvciA9IGVycm9yTXNnO1xyXG5cclxuICAgIGNhY2hlW2tleV0gPSBwcm9ncmFtO1xyXG5cclxuICAgIHJldHVybiBwcm9ncmFtO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUHJvZ3JhbU1hbmFnZXI7IiwiLyoqXHJcbiAqIE1haW5seSBkbyB0aGUgcGFyc2UgYW5kIGNvbXBpbGUgb2Ygc2hhZGVyIHN0cmluZ1xyXG4gKiBTdXBwb3J0IHNoYWRlciBjb2RlIGNodW5rIGltcG9ydCBhbmQgZXhwb3J0XHJcbiAqIFN1cHBvcnQgc2hhZGVyIHNlbWFudGljc1xyXG4gKiBodHRwOi8vd3d3Lm52aWRpYS5jb20vb2JqZWN0L3VzaW5nX3Nhcy5odG1sXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvY29sbGFkYTJqc29uL2lzc3Vlcy80NVxyXG4gKi9cclxuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4vY29yZS92ZW5kb3InO1xyXG5cclxudmFyIHVuaWZvcm1SZWdleCA9IC91bmlmb3JtXFxzKyhib29sfGZsb2F0fGludHx2ZWMyfHZlYzN8dmVjNHxpdmVjMnxpdmVjM3xpdmVjNHxtYXQyfG1hdDN8bWF0NHxzYW1wbGVyMkR8c2FtcGxlckN1YmUpXFxzKyhbXFxzXFxTXSo/KTsvZztcclxudmFyIGF0dHJpYnV0ZVJlZ2V4ID0gL2F0dHJpYnV0ZVxccysoZmxvYXR8aW50fHZlYzJ8dmVjM3x2ZWM0KVxccysoW1xcc1xcU10qPyk7L2c7XHJcbi8vIE9ubHkgcGFyc2UgbnVtYmVyIGRlZmluZS5cclxudmFyIGRlZmluZVJlZ2V4ID0gLyNkZWZpbmVcXHMrKFxcdyspPyhcXHMrW1xcZC0uXSspP1xccyo7P1xccypcXG4vZztcclxuXHJcbnZhciB1bmlmb3JtVHlwZU1hcCA9IHtcclxuICAgICdib29sJzogJzFpJyxcclxuICAgICdpbnQnOiAnMWknLFxyXG4gICAgJ3NhbXBsZXIyRCc6ICd0JyxcclxuICAgICdzYW1wbGVyQ3ViZSc6ICd0JyxcclxuICAgICdmbG9hdCc6ICcxZicsXHJcbiAgICAndmVjMic6ICcyZicsXHJcbiAgICAndmVjMyc6ICczZicsXHJcbiAgICAndmVjNCc6ICc0ZicsXHJcbiAgICAnaXZlYzInOiAnMmknLFxyXG4gICAgJ2l2ZWMzJzogJzNpJyxcclxuICAgICdpdmVjNCc6ICc0aScsXHJcbiAgICAnbWF0Mic6ICdtMicsXHJcbiAgICAnbWF0Myc6ICdtMycsXHJcbiAgICAnbWF0NCc6ICdtNCdcclxufTtcclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVplcm9BcnJheShsZW4pIHtcclxuICAgIHZhciBhcnIgPSBbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBhcnJbaV0gPSAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFycjtcclxufVxyXG5cclxudmFyIHVuaWZvcm1WYWx1ZUNvbnN0cnVjdG9yID0ge1xyXG4gICAgJ2Jvb2wnOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9LFxyXG4gICAgJ2ludCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDA7IH0sXHJcbiAgICAnZmxvYXQnOiBmdW5jdGlvbiAoKSB7IHJldHVybiAwOyB9LFxyXG4gICAgJ3NhbXBsZXIyRCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG51bGw7IH0sXHJcbiAgICAnc2FtcGxlckN1YmUnOiBmdW5jdGlvbiAoKSB7IHJldHVybiBudWxsOyB9LFxyXG5cclxuICAgICd2ZWMyJzogZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlWmVyb0FycmF5KDIpOyB9LFxyXG4gICAgJ3ZlYzMnOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoMyk7IH0sXHJcbiAgICAndmVjNCc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSg0KTsgfSxcclxuXHJcbiAgICAnaXZlYzInOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoMik7IH0sXHJcbiAgICAnaXZlYzMnOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoMyk7IH0sXHJcbiAgICAnaXZlYzQnOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoNCk7IH0sXHJcblxyXG4gICAgJ21hdDInOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVaZXJvQXJyYXkoNCk7IH0sXHJcbiAgICAnbWF0Myc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNyZWF0ZVplcm9BcnJheSg5KTsgfSxcclxuICAgICdtYXQ0JzogZnVuY3Rpb24gKCkgeyByZXR1cm4gY3JlYXRlWmVyb0FycmF5KDE2KTsgfSxcclxuXHJcbiAgICAnYXJyYXknOiBmdW5jdGlvbiAoKSB7IHJldHVybiBbXTsgfVxyXG59O1xyXG5cclxudmFyIGF0dHJpYnV0ZVNlbWFudGljcyA9IFtcclxuICAgICdQT1NJVElPTicsXHJcbiAgICAnTk9STUFMJyxcclxuICAgICdCSU5PUk1BTCcsXHJcbiAgICAnVEFOR0VOVCcsXHJcbiAgICAnVEVYQ09PUkQnLFxyXG4gICAgJ1RFWENPT1JEXzAnLFxyXG4gICAgJ1RFWENPT1JEXzEnLFxyXG4gICAgJ0NPTE9SJyxcclxuICAgIC8vIFNraW5uaW5nXHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvYmxvYi9tYXN0ZXIvc3BlY2lmaWNhdGlvbi9SRUFETUUubWQjc2VtYW50aWNzXHJcbiAgICAnSk9JTlQnLFxyXG4gICAgJ1dFSUdIVCdcclxuXTtcclxudmFyIHVuaWZvcm1TZW1hbnRpY3MgPSBbXHJcbiAgICAnU0tJTl9NQVRSSVgnLFxyXG4gICAgLy8gSW5mb3JtYXRpb24gYWJvdXQgdmlld3BvcnRcclxuICAgICdWSUVXUE9SVF9TSVpFJyxcclxuICAgICdWSUVXUE9SVCcsXHJcbiAgICAnREVWSUNFUElYRUxSQVRJTycsXHJcbiAgICAvLyBXaW5kb3cgc2l6ZSBmb3Igd2luZG93IHJlbGF0aXZlIGNvb3JkaW5hdGVcclxuICAgIC8vIGh0dHBzOi8vd3d3Lm9wZW5nbC5vcmcvc2RrL2RvY3MvbWFuL2h0bWwvZ2xfRnJhZ0Nvb3JkLnhodG1sXHJcbiAgICAnV0lORE9XX1NJWkUnLFxyXG4gICAgLy8gSW5mb21hdGlvbiBhYm91dCBjYW1lcmFcclxuICAgICdORUFSJyxcclxuICAgICdGQVInLFxyXG4gICAgLy8gVGltZVxyXG4gICAgJ1RJTUUnXHJcbl07XHJcbnZhciBtYXRyaXhTZW1hbnRpY3MgPSBbXHJcbiAgICAnV09STEQnLFxyXG4gICAgJ1ZJRVcnLFxyXG4gICAgJ1BST0pFQ1RJT04nLFxyXG4gICAgJ1dPUkxEVklFVycsXHJcbiAgICAnVklFV1BST0pFQ1RJT04nLFxyXG4gICAgJ1dPUkxEVklFV1BST0pFQ1RJT04nLFxyXG4gICAgJ1dPUkxESU5WRVJTRScsXHJcbiAgICAnVklFV0lOVkVSU0UnLFxyXG4gICAgJ1BST0pFQ1RJT05JTlZFUlNFJyxcclxuICAgICdXT1JMRFZJRVdJTlZFUlNFJyxcclxuICAgICdWSUVXUFJPSkVDVElPTklOVkVSU0UnLFxyXG4gICAgJ1dPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFJyxcclxuICAgICdXT1JMRFRSQU5TUE9TRScsXHJcbiAgICAnVklFV1RSQU5TUE9TRScsXHJcbiAgICAnUFJPSkVDVElPTlRSQU5TUE9TRScsXHJcbiAgICAnV09STERWSUVXVFJBTlNQT1NFJyxcclxuICAgICdWSUVXUFJPSkVDVElPTlRSQU5TUE9TRScsXHJcbiAgICAnV09STERWSUVXUFJPSkVDVElPTlRSQU5TUE9TRScsXHJcbiAgICAnV09STERJTlZFUlNFVFJBTlNQT1NFJyxcclxuICAgICdWSUVXSU5WRVJTRVRSQU5TUE9TRScsXHJcbiAgICAnUFJPSkVDVElPTklOVkVSU0VUUkFOU1BPU0UnLFxyXG4gICAgJ1dPUkxEVklFV0lOVkVSU0VUUkFOU1BPU0UnLFxyXG4gICAgJ1ZJRVdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRScsXHJcbiAgICAnV09STERWSUVXUFJPSkVDVElPTklOVkVSU0VUUkFOU1BPU0UnXHJcbl07XHJcblxyXG52YXIgYXR0cmlidXRlU2l6ZU1hcCA9IHtcclxuICAgIC8vIFdlYkdMIGRvZXMgbm90IHN1cHBvcnQgaW50ZWdlciBhdHRyaWJ1dGVzXHJcbiAgICAndmVjNCc6IDQsXHJcbiAgICAndmVjMyc6IDMsXHJcbiAgICAndmVjMic6IDIsXHJcbiAgICAnZmxvYXQnOiAxXHJcbn07XHJcblxyXG5cclxudmFyIHNoYWRlcklEQ2FjaGUgPSB7fTtcclxudmFyIHNoYWRlckNvZGVDYWNoZSA9IHt9O1xyXG5cclxuZnVuY3Rpb24gZ2V0U2hhZGVySUQodmVydGV4LCBmcmFnbWVudCkge1xyXG4gICAgdmFyIGtleSA9ICd2ZXJ0ZXg6JyArIHZlcnRleCArICdmcmFnbWVudDonICsgZnJhZ21lbnQ7XHJcbiAgICBpZiAoc2hhZGVySURDYWNoZVtrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIHNoYWRlcklEQ2FjaGVba2V5XTtcclxuICAgIH1cclxuICAgIHZhciBpZCA9IHV0aWwuZ2VuR1VJRCgpO1xyXG4gICAgc2hhZGVySURDYWNoZVtrZXldID0gaWQ7XHJcblxyXG4gICAgc2hhZGVyQ29kZUNhY2hlW2lkXSA9IHtcclxuICAgICAgICB2ZXJ0ZXg6IHZlcnRleCxcclxuICAgICAgICBmcmFnbWVudDogZnJhZ21lbnRcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGlkO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVDb21tZW50KGNvZGUpIHtcclxuICAgIHJldHVybiBjb2RlLnJlcGxhY2UoL1sgXFx0XSpcXC9cXC8uKlxcbi9nLCAnJyApICAgLy8gcmVtb3ZlIC8vXHJcbiAgICAgICAgLnJlcGxhY2UoL1sgXFx0XSpcXC9cXCpbXFxzXFxTXSo/XFwqXFwvL2csICcnICk7IC8vIHJlbW92ZSAvKiAqL1xyXG59XHJcblxyXG5mdW5jdGlvbiBsb2dTeW50YXhFcnJvcigpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoJ1dyb25nIHVuaWZvcm0vYXR0cmlidXRlcyBzeW50YXgnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VEZWNsYXJhdGlvbnModHlwZSwgbGluZSkge1xyXG4gICAgdmFyIHNwZXJhdG9yc1JlZ2V4cCA9IC9bLD1cXChcXCk6XS87XHJcbiAgICB2YXIgdG9rZW5zID0gbGluZVxyXG4gICAgICAgIC8vIENvbnZlcnQgYHN5bWJvbDogWzEsMiwzXWAgdG8gYHN5bWJvbDogdmVjMygxLDIsMylgXHJcbiAgICAgICAgLnJlcGxhY2UoLzpcXHMqXFxbXFxzKiguKilcXHMqXFxdL2csICc9JyArIHR5cGUgKyAnKCQxKScpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xccysvZywgJycpXHJcbiAgICAgICAgLnNwbGl0KC8oPz1bLD1cXChcXCk6XSkvZyk7XHJcblxyXG4gICAgdmFyIG5ld1Rva2VucyA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAodG9rZW5zW2ldLm1hdGNoKHNwZXJhdG9yc1JlZ2V4cCkpIHtcclxuICAgICAgICAgICAgbmV3VG9rZW5zLnB1c2goXHJcbiAgICAgICAgICAgICAgICB0b2tlbnNbaV0uY2hhckF0KDApLFxyXG4gICAgICAgICAgICAgICAgdG9rZW5zW2ldLnNsaWNlKDEpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBuZXdUb2tlbnMucHVzaCh0b2tlbnNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRva2VucyA9IG5ld1Rva2VucztcclxuXHJcbiAgICB2YXIgVFlQRV9TWU1CT0wgPSAwO1xyXG4gICAgdmFyIFRZUEVfQVNTSUdOID0gMTtcclxuICAgIHZhciBUWVBFX1ZFQyA9IDI7XHJcbiAgICB2YXIgVFlQRV9BUlIgPSAzO1xyXG4gICAgdmFyIFRZUEVfU0VNQU5USUMgPSA0O1xyXG4gICAgdmFyIFRZUEVfTk9STUFMID0gNTtcclxuXHJcbiAgICB2YXIgb3BUeXBlID0gVFlQRV9TWU1CT0w7XHJcbiAgICB2YXIgZGVjbGFyYXRpb25zID0ge307XHJcbiAgICB2YXIgZGVjbGFyYXRpb25WYWx1ZSA9IG51bGw7XHJcbiAgICB2YXIgY3VycmVudERlY2xhcmF0aW9uO1xyXG5cclxuICAgIGFkZFN5bWJvbCh0b2tlbnNbMF0pO1xyXG5cclxuICAgIGZ1bmN0aW9uIGFkZFN5bWJvbChzeW1ib2wpIHtcclxuICAgICAgICBpZiAoIXN5bWJvbCkge1xyXG4gICAgICAgICAgICBsb2dTeW50YXhFcnJvcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYXJyUmVzdWx0ID0gc3ltYm9sLm1hdGNoKC9cXFsoLio/KVxcXS8pO1xyXG4gICAgICAgIGN1cnJlbnREZWNsYXJhdGlvbiA9IHN5bWJvbC5yZXBsYWNlKC9cXFsoLio/KVxcXS8sICcnKTtcclxuICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXSA9IHt9O1xyXG4gICAgICAgIGlmIChhcnJSZXN1bHQpIHtcclxuICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0uaXNBcnJheSA9IHRydWU7XHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dLmFycmF5U2l6ZSA9IGFyclJlc3VsdFsxXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07XHJcbiAgICAgICAgaWYgKCF0b2tlbikgeyAgIC8vIEVtcHR5IHRva2VuO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRva2VuID09PSAnPScpIHtcclxuICAgICAgICAgICAgaWYgKG9wVHlwZSAhPT0gVFlQRV9TWU1CT0xcclxuICAgICAgICAgICAgJiYgb3BUeXBlICE9PSBUWVBFX0FSUikge1xyXG4gICAgICAgICAgICAgICAgbG9nU3ludGF4RXJyb3IoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wVHlwZSA9IFRZUEVfQVNTSUdOO1xyXG5cclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRva2VuID09PSAnOicpIHtcclxuICAgICAgICAgICAgb3BUeXBlID0gVFlQRV9TRU1BTlRJQztcclxuXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0b2tlbiA9PT0gJywnKSB7XHJcbiAgICAgICAgICAgIGlmIChvcFR5cGUgPT09IFRZUEVfVkVDKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIShkZWNsYXJhdGlvblZhbHVlIGluc3RhbmNlb2YgQXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nU3ludGF4RXJyb3IoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uVmFsdWUucHVzaCgrdG9rZW5zWysraV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb3BUeXBlID0gVFlQRV9OT1JNQUw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0b2tlbiA9PT0gJyknKSB7XHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dLnZhbHVlID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoZGVjbGFyYXRpb25WYWx1ZSk7XHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICBvcFR5cGUgPSBUWVBFX05PUk1BTDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRva2VuID09PSAnKCcpIHtcclxuICAgICAgICAgICAgaWYgKG9wVHlwZSAhPT0gVFlQRV9WRUMpIHtcclxuICAgICAgICAgICAgICAgIGxvZ1N5bnRheEVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIShkZWNsYXJhdGlvblZhbHVlIGluc3RhbmNlb2YgQXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICBsb2dTeW50YXhFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVjbGFyYXRpb25WYWx1ZS5wdXNoKCt0b2tlbnNbKytpXSk7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0b2tlbi5pbmRleE9mKCd2ZWMnKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChvcFR5cGUgIT09IFRZUEVfQVNTSUdOXHJcbiAgICAgICAgICAgIC8vIENvbXBhdGl0YWJsZSB3aXRoIG9sZCBzeW50YXggYHN5bWJvbDogWzEsMiwzXWBcclxuICAgICAgICAgICAgJiYgb3BUeXBlICE9PSBUWVBFX1NFTUFOVElDKSB7XHJcbiAgICAgICAgICAgICAgICBsb2dTeW50YXhFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3BUeXBlID0gVFlQRV9WRUM7XHJcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uVmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG9wVHlwZSA9PT0gVFlQRV9BU1NJR04pIHtcclxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdib29sJykge1xyXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0udmFsdWUgPSB0b2tlbiA9PT0gJ3RydWUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0udmFsdWUgPSBwYXJzZUZsb2F0KHRva2VuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWNsYXJhdGlvblZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG9wVHlwZSA9PT0gVFlQRV9TRU1BTlRJQykge1xyXG4gICAgICAgICAgICB2YXIgc2VtYW50aWMgPSB0b2tlbjtcclxuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZVNlbWFudGljcy5pbmRleE9mKHNlbWFudGljKSA+PSAwXHJcbiAgICAgICAgICAgICAgICB8fCB1bmlmb3JtU2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDBcclxuICAgICAgICAgICAgICAgIHx8IG1hdHJpeFNlbWFudGljcy5pbmRleE9mKHNlbWFudGljKSA+PSAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zW2N1cnJlbnREZWNsYXJhdGlvbl0uc2VtYW50aWMgPSBzZW1hbnRpYztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChzZW1hbnRpYyA9PT0gJ2lnbm9yZScgfHwgc2VtYW50aWMgPT09ICd1bmNvbmZpZ3VyYWJsZScpIHtcclxuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uc1tjdXJyZW50RGVjbGFyYXRpb25dLmlnbm9yZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUcnkgdG8gcGFyc2UgYXMgYSBkZWZhdWx0IHR2YWx1ZS5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnYm9vbCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS52YWx1ZSA9IHNlbWFudGljID09PSAndHJ1ZSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnNbY3VycmVudERlY2xhcmF0aW9uXS52YWx1ZSA9IHBhcnNlRmxvYXQoc2VtYW50aWMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdHJlYXQgYXMgc3ltYm9sLlxyXG4gICAgICAgIGFkZFN5bWJvbCh0b2tlbik7XHJcbiAgICAgICAgb3BUeXBlID0gVFlQRV9TWU1CT0w7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRlY2xhcmF0aW9ucztcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICogQGFsaWFzIGNsYXkuU2hhZGVyXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJ0ZXhcclxuICogQHBhcmFtIHtzdHJpbmd9IGZyYWdtZW50XHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIENyZWF0ZSBhIHBob25nIHNoYWRlclxyXG4gKiB2YXIgc2hhZGVyID0gbmV3IGNsYXkuU2hhZGVyKFxyXG4gKiAgICAgIGNsYXkuU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZC52ZXJ0ZXgnKSxcclxuICogICAgICBjbGF5LlNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmQuZnJhZ21lbnQnKVxyXG4gKiApO1xyXG4gKi9cclxuZnVuY3Rpb24gU2hhZGVyKHZlcnRleCwgZnJhZ21lbnQpIHtcclxuICAgIC8vIEZpcnN0IGFyZ3VtZW50IGNhbiBiZSB7IHZlcnRleCwgZnJhZ21lbnQgfVxyXG4gICAgaWYgKHR5cGVvZiB2ZXJ0ZXggPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgZnJhZ21lbnQgPSB2ZXJ0ZXguZnJhZ21lbnQ7XHJcbiAgICAgICAgdmVydGV4ID0gdmVydGV4LnZlcnRleDtcclxuICAgIH1cclxuXHJcbiAgICB2ZXJ0ZXggPSByZW1vdmVDb21tZW50KHZlcnRleCk7XHJcbiAgICBmcmFnbWVudCA9IHJlbW92ZUNvbW1lbnQoZnJhZ21lbnQpO1xyXG5cclxuICAgIHRoaXMuX3NoYWRlcklEID0gZ2V0U2hhZGVySUQodmVydGV4LCBmcmFnbWVudCk7XHJcblxyXG4gICAgdGhpcy5fdmVydGV4Q29kZSA9IFNoYWRlci5wYXJzZUltcG9ydCh2ZXJ0ZXgpO1xyXG4gICAgdGhpcy5fZnJhZ21lbnRDb2RlID0gU2hhZGVyLnBhcnNlSW1wb3J0KGZyYWdtZW50KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlbWFudGljcyA9IHt9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy5tYXRyaXhTZW1hbnRpY3MgPSB7fTtcclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMudW5pZm9ybVNlbWFudGljcyA9IHt9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy5tYXRyaXhTZW1hbnRpY0tleXMgPSBbXTtcclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMudW5pZm9ybVRlbXBsYXRlcyA9IHt9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqL1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVzID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLnRleHR1cmVzID0ge307XHJcbiAgICAvKipcclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZlcnRleERlZmluZXMgPSB7fTtcclxuICAgIC8qKlxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZnJhZ21lbnREZWZpbmVzID0ge307XHJcblxyXG4gICAgdGhpcy5fcGFyc2VBdHRyaWJ1dGVzKCk7XHJcbiAgICB0aGlzLl9wYXJzZVVuaWZvcm1zKCk7XHJcbiAgICB0aGlzLl9wYXJzZURlZmluZXMoKTtcclxufVxyXG5cclxuU2hhZGVyLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogU2hhZGVyLFxyXG5cclxuICAgIC8vIENyZWF0ZSBhIG5ldyB1bmlmb3JtIGluc3RhbmNlIGZvciBtYXRlcmlhbFxyXG4gICAgY3JlYXRlVW5pZm9ybXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdW5pZm9ybXMgPSB7fTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIHRoaXMudW5pZm9ybVRlbXBsYXRlcyl7XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtVHBsID0gdGhpcy51bmlmb3JtVGVtcGxhdGVzW3N5bWJvbF07XHJcbiAgICAgICAgICAgIHVuaWZvcm1zW3N5bWJvbF0gPSB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiB1bmlmb3JtVHBsLnR5cGUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdW5pZm9ybVRwbC52YWx1ZSgpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdW5pZm9ybXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZUltcG9ydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3ZlcnRleENvZGUgPSBTaGFkZXIucGFyc2VJbXBvcnQodGhpcy52ZXJ0ZXgpO1xyXG4gICAgICAgIHRoaXMuX2ZyYWdtZW50Q29kZSA9IFNoYWRlci5wYXJzZUltcG9ydCh0aGlzLmZyYWdtZW50KTtcclxuICAgIH0sXHJcblxyXG4gICAgX2FkZFNlbWFudGljVW5pZm9ybTogZnVuY3Rpb24gKHN5bWJvbCwgdW5pZm9ybVR5cGUsIHNlbWFudGljKSB7XHJcbiAgICAgICAgLy8gVGhpcyBjYXNlIGlzIG9ubHkgZm9yIFNLSU5fTUFUUklYXHJcbiAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgIGlmIChhdHRyaWJ1dGVTZW1hbnRpY3MuaW5kZXhPZihzZW1hbnRpYykgPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZVNlbWFudGljc1tzZW1hbnRpY10gPSB7XHJcbiAgICAgICAgICAgICAgICBzeW1ib2w6IHN5bWJvbCxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHVuaWZvcm1UeXBlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG1hdHJpeFNlbWFudGljcy5pbmRleE9mKHNlbWFudGljKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHZhciBpc1RyYW5zcG9zZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB2YXIgc2VtYW50aWNOb1RyYW5zcG9zZSA9IHNlbWFudGljO1xyXG4gICAgICAgICAgICBpZiAoc2VtYW50aWMubWF0Y2goL1RSQU5TUE9TRSQvKSkge1xyXG4gICAgICAgICAgICAgICAgaXNUcmFuc3Bvc2UgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgc2VtYW50aWNOb1RyYW5zcG9zZSA9IHNlbWFudGljLnNsaWNlKDAsIC05KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm1hdHJpeFNlbWFudGljc1tzZW1hbnRpY10gPSB7XHJcbiAgICAgICAgICAgICAgICBzeW1ib2w6IHN5bWJvbCxcclxuICAgICAgICAgICAgICAgIHR5cGU6IHVuaWZvcm1UeXBlLFxyXG4gICAgICAgICAgICAgICAgaXNUcmFuc3Bvc2U6IGlzVHJhbnNwb3NlLFxyXG4gICAgICAgICAgICAgICAgc2VtYW50aWNOb1RyYW5zcG9zZTogc2VtYW50aWNOb1RyYW5zcG9zZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh1bmlmb3JtU2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy51bmlmb3JtU2VtYW50aWNzW3NlbWFudGljXSA9IHtcclxuICAgICAgICAgICAgICAgIHN5bWJvbDogc3ltYm9sLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogdW5pZm9ybVR5cGVcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9hZGRNYXRlcmlhbFVuaWZvcm06IGZ1bmN0aW9uIChzeW1ib2wsIHR5cGUsIHVuaWZvcm1UeXBlLCBkZWZhdWx0VmFsdWVGdW5jLCBpc0FycmF5LCBtYXRlcmlhbFVuaWZvcm1zKSB7XHJcbiAgICAgICAgbWF0ZXJpYWxVbmlmb3Jtc1tzeW1ib2xdID0ge1xyXG4gICAgICAgICAgICB0eXBlOiB1bmlmb3JtVHlwZSxcclxuICAgICAgICAgICAgdmFsdWU6IGlzQXJyYXkgPyB1bmlmb3JtVmFsdWVDb25zdHJ1Y3RvclsnYXJyYXknXSA6IChkZWZhdWx0VmFsdWVGdW5jIHx8IHVuaWZvcm1WYWx1ZUNvbnN0cnVjdG9yW3R5cGVdKSxcclxuICAgICAgICAgICAgc2VtYW50aWM6IG51bGxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGFyc2VVbmlmb3JtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB1bmlmb3JtcyA9IHt9O1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB2YXIgc2hhZGVyVHlwZSA9ICd2ZXJ0ZXgnO1xyXG4gICAgICAgIHRoaXMuX3VuaWZvcm1MaXN0ID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuX3ZlcnRleENvZGUgPSB0aGlzLl92ZXJ0ZXhDb2RlLnJlcGxhY2UodW5pZm9ybVJlZ2V4LCBfdW5pZm9ybVBhcnNlcik7XHJcbiAgICAgICAgc2hhZGVyVHlwZSA9ICdmcmFnbWVudCc7XHJcbiAgICAgICAgdGhpcy5fZnJhZ21lbnRDb2RlID0gdGhpcy5fZnJhZ21lbnRDb2RlLnJlcGxhY2UodW5pZm9ybVJlZ2V4LCBfdW5pZm9ybVBhcnNlcik7XHJcblxyXG4gICAgICAgIHNlbGYubWF0cml4U2VtYW50aWNLZXlzID0gT2JqZWN0LmtleXModGhpcy5tYXRyaXhTZW1hbnRpY3MpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBtYWtlRGVmYXVsdFZhbHVlRnVuYyh2YWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9IDogbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIF91bmlmb3JtUGFyc2VyKHN0ciwgdHlwZSwgY29udGVudCkge1xyXG4gICAgICAgICAgICB2YXIgZGVjbGFyZWRVbmlmb3JtcyA9IHBhcnNlRGVjbGFyYXRpb25zKHR5cGUsIGNvbnRlbnQpO1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybU1haW5TdHIgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIGRlY2xhcmVkVW5pZm9ybXMpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdW5pZm9ybUluZm8gPSBkZWNsYXJlZFVuaWZvcm1zW3N5bWJvbF07XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWMgPSB1bmlmb3JtSW5mby5zZW1hbnRpYztcclxuICAgICAgICAgICAgICAgIHZhciB0bXBTdHIgPSBzeW1ib2w7XHJcbiAgICAgICAgICAgICAgICB2YXIgdW5pZm9ybVR5cGUgPSB1bmlmb3JtVHlwZU1hcFt0eXBlXTtcclxuICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0VmFsdWVGdW5jID0gbWFrZURlZmF1bHRWYWx1ZUZ1bmMoZGVjbGFyZWRVbmlmb3Jtc1tzeW1ib2xdLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChkZWNsYXJlZFVuaWZvcm1zW3N5bWJvbF0uaXNBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcFN0ciArPSAnWycgKyBkZWNsYXJlZFVuaWZvcm1zW3N5bWJvbF0uYXJyYXlTaXplICsgJ10nO1xyXG4gICAgICAgICAgICAgICAgICAgIHVuaWZvcm1UeXBlICs9ICd2JztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB1bmlmb3JtTWFpblN0ci5wdXNoKHRtcFN0cik7XHJcblxyXG4gICAgICAgICAgICAgICAgc2VsZi5fdW5pZm9ybUxpc3QucHVzaChzeW1ib2wpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghdW5pZm9ybUluZm8uaWdub3JlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdzYW1wbGVyMkQnIHx8IHR5cGUgPT09ICdzYW1wbGVyQ3ViZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGV4dHVyZSBpcyBkZWZhdWx0IGRpc2FibGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dHVyZXNbc3ltYm9sXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRlclR5cGU6IHNoYWRlclR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBTaG91bGQgbm90IGRlY2xhcmUgbXVsdGlwbGUgc3ltYm9scyBpZiBoYXZlIHNlbWFudGljLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRTZW1hbnRpY1VuaWZvcm0oc3ltYm9sLCB1bmlmb3JtVHlwZSwgc2VtYW50aWMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkTWF0ZXJpYWxVbmlmb3JtKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sLCB0eXBlLCB1bmlmb3JtVHlwZSwgZGVmYXVsdFZhbHVlRnVuYyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xhcmVkVW5pZm9ybXNbc3ltYm9sXS5pc0FycmF5LCB1bmlmb3Jtc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdW5pZm9ybU1haW5TdHIubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgPyAndW5pZm9ybSAnICsgdHlwZSArICcgJyArIHVuaWZvcm1NYWluU3RyLmpvaW4oJywnKSArICc7XFxuJyA6ICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51bmlmb3JtVGVtcGxhdGVzID0gdW5pZm9ybXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZUF0dHJpYnV0ZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHt9O1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB0aGlzLl92ZXJ0ZXhDb2RlID0gdGhpcy5fdmVydGV4Q29kZS5yZXBsYWNlKGF0dHJpYnV0ZVJlZ2V4LCBfYXR0cmlidXRlUGFyc2VyKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gX2F0dHJpYnV0ZVBhcnNlcihzdHIsIHR5cGUsIGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgdmFyIGRlY2xhcmVkQXR0cmlidXRlcyA9IHBhcnNlRGVjbGFyYXRpb25zKHR5cGUsIGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNpemUgPSBhdHRyaWJ1dGVTaXplTWFwW3R5cGVdIHx8IDE7XHJcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVNYWluU3RyID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIHN5bWJvbCBpbiBkZWNsYXJlZEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpYyA9IGRlY2xhcmVkQXR0cmlidXRlc1tzeW1ib2xdLnNlbWFudGljO1xyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1tzeW1ib2xdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gQ2FuIG9ubHkgYmUgZmxvYXRcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZmxvYXQnLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IHNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgc2VtYW50aWM6IHNlbWFudGljIHx8IG51bGxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPIFNob3VsZCBub3QgZGVjbGFyZSBtdWx0aXBsZSBzeW1ib2xzIGlmIGhhdmUgc2VtYW50aWMuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlU2VtYW50aWNzLmluZGV4T2Yoc2VtYW50aWMpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua293biBzZW1hbnRpYyBcIicgKyBzZW1hbnRpYyArICdcIicpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hdHRyaWJ1dGVTZW1hbnRpY3Nbc2VtYW50aWNdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sOiBzeW1ib2wsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlTWFpblN0ci5wdXNoKHN5bWJvbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiAnYXR0cmlidXRlICcgKyB0eXBlICsgJyAnICsgYXR0cmlidXRlTWFpblN0ci5qb2luKCcsJykgKyAnO1xcbic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGFyc2VEZWZpbmVzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHZhciBzaGFkZXJUeXBlID0gJ3ZlcnRleCc7XHJcbiAgICAgICAgdGhpcy5fdmVydGV4Q29kZSA9IHRoaXMuX3ZlcnRleENvZGUucmVwbGFjZShkZWZpbmVSZWdleCwgX2RlZmluZVBhcnNlcik7XHJcbiAgICAgICAgc2hhZGVyVHlwZSA9ICdmcmFnbWVudCc7XHJcbiAgICAgICAgdGhpcy5fZnJhZ21lbnRDb2RlID0gdGhpcy5fZnJhZ21lbnRDb2RlLnJlcGxhY2UoZGVmaW5lUmVnZXgsIF9kZWZpbmVQYXJzZXIpO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBfZGVmaW5lUGFyc2VyKHN0ciwgc3ltYm9sLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YXIgZGVmaW5lcyA9IHNoYWRlclR5cGUgPT09ICd2ZXJ0ZXgnID8gc2VsZi52ZXJ0ZXhEZWZpbmVzIDogc2VsZi5mcmFnbWVudERlZmluZXM7XHJcbiAgICAgICAgICAgIGlmICghZGVmaW5lc1tzeW1ib2xdKSB7IC8vIEhhdmVuJ3QgYmVlbiBkZWZpbmVkIGJ5IHVzZXJcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmluZXNbc3ltYm9sXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmluZXNbc3ltYm9sXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWZpbmVzW3N5bWJvbF0gPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBjYW4gcGFyc2UgdG8gZmxvYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAoaXNOYU4ocGFyc2VGbG9hdCh2YWx1ZSkpID8gdmFsdWUudHJpbSgpIDogcGFyc2VGbG9hdCh2YWx1ZSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IHNoYWRlclxyXG4gICAgICogQHJldHVybiB7Y2xheS5TaGFkZXJ9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGNvZGUgPSBzaGFkZXJDb2RlQ2FjaGVbdGhpcy5fc2hhZGVySURdO1xyXG4gICAgICAgIHZhciBzaGFkZXIgPSBuZXcgU2hhZGVyKGNvZGUudmVydGV4LCBjb2RlLmZyYWdtZW50KTtcclxuICAgICAgICByZXR1cm4gc2hhZGVyO1xyXG4gICAgfVxyXG59O1xyXG5cclxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlci5wcm90b3R5cGUsICdzaGFkZXJJRCcsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NoYWRlcklEO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlci5wcm90b3R5cGUsICd2ZXJ0ZXgnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92ZXJ0ZXhDb2RlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFNoYWRlci5wcm90b3R5cGUsICdmcmFnbWVudCcsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYWdtZW50Q29kZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaGFkZXIucHJvdG90eXBlLCAndW5pZm9ybXMnLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91bmlmb3JtTGlzdDtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxudmFyIGltcG9ydFJlZ2V4ID0gLyhAaW1wb3J0KVxccyooWzAtOWEtekEtWl9cXC1cXC5dKikvZztcclxuU2hhZGVyLnBhcnNlSW1wb3J0ID0gZnVuY3Rpb24gKHNoYWRlclN0cikge1xyXG4gICAgc2hhZGVyU3RyID0gc2hhZGVyU3RyLnJlcGxhY2UoaW1wb3J0UmVnZXgsIGZ1bmN0aW9uIChzdHIsIGltcG9ydFN5bWJvbCwgaW1wb3J0TmFtZSkge1xyXG4gICAgICAgIHZhciBzdHIgPSBTaGFkZXIuc291cmNlKGltcG9ydE5hbWUpO1xyXG4gICAgICAgIGlmIChzdHIpIHtcclxuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcGFyc2VcclxuICAgICAgICAgICAgcmV0dXJuIFNoYWRlci5wYXJzZUltcG9ydChzdHIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU2hhZGVyIGNodW5rIFwiJyArIGltcG9ydE5hbWUgKyAnXCIgbm90IGV4aXN0ZWQgaW4gbGlicmFyeScpO1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc2hhZGVyU3RyO1xyXG59O1xyXG5cclxudmFyIGV4cG9ydFJlZ2V4ID0gLyhAZXhwb3J0KVxccyooWzAtOWEtekEtWl9cXC1cXC5dKilcXHMqXFxuKFtcXHNcXFNdKj8pQGVuZC9nO1xyXG5cclxuLyoqXHJcbiAqIEltcG9ydCBzaGFkZXIgc291cmNlXHJcbiAqIEBwYXJhbSAge3N0cmluZ30gc2hhZGVyU3RyXHJcbiAqIEBtZW1iZXJPZiBjbGF5LlNoYWRlclxyXG4gKi9cclxuU2hhZGVyWydpbXBvcnQnXSA9IGZ1bmN0aW9uIChzaGFkZXJTdHIpIHtcclxuICAgIHNoYWRlclN0ci5yZXBsYWNlKGV4cG9ydFJlZ2V4LCBmdW5jdGlvbiAoc3RyLCBleHBvcnRTeW1ib2wsIGV4cG9ydE5hbWUsIGNvZGUpIHtcclxuICAgICAgICB2YXIgY29kZSA9IGNvZGUucmVwbGFjZSgvKF5bXFxzXFx0XFx4YTBcXHUzMDAwXSspfChbXFx1MzAwMFxceGEwXFxzXFx0XStcXHgyNCkvZywgJycpO1xyXG4gICAgICAgIGlmIChjb2RlKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IGV4cG9ydE5hbWUuc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgdmFyIG9iaiA9IFNoYWRlci5jb2RlcztcclxuICAgICAgICAgICAgdmFyIGkgPSAwO1xyXG4gICAgICAgICAgICB2YXIga2V5O1xyXG4gICAgICAgICAgICB3aGlsZSAoaSA8IHBhcnRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIGtleSA9IHBhcnRzW2krK107XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9ialtrZXldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSB7fTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9iaiA9IG9ialtrZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGtleSA9IHBhcnRzW2ldO1xyXG4gICAgICAgICAgICBvYmpba2V5XSA9IGNvZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb2RlO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogTGlicmFyeSB0byBzdG9yZSBhbGwgdGhlIGxvYWRlZCBzaGFkZXIgY29kZXNcclxuICogQHR5cGUge09iamVjdH1cclxuICogQHJlYWRPbmx5XHJcbiAqIEBtZW1iZXJPZiBjbGF5LlNoYWRlclxyXG4gKi9cclxuU2hhZGVyLmNvZGVzID0ge307XHJcblxyXG4vKipcclxuICogR2V0IHNoYWRlciBzb3VyY2VcclxuICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAqIEByZXR1cm4ge3N0cmluZ31cclxuICovXHJcblNoYWRlci5zb3VyY2UgPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgnLicpO1xyXG4gICAgdmFyIG9iaiA9IFNoYWRlci5jb2RlcztcclxuICAgIHZhciBpID0gMDtcclxuICAgIHdoaWxlIChvYmogJiYgaSA8IHBhcnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHZhciBrZXkgPSBwYXJ0c1tpKytdO1xyXG4gICAgICAgIG9iaiA9IG9ialtrZXldO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgLy8gRklYTUUgVXNlIGRlZmF1bHQgaW5zdGVhZFxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NoYWRlciBcIicgKyBuYW1lICsgJ1wiIG5vdCBleGlzdGVkIGluIGxpYnJhcnknKTtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2hhZGVyO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5wcmV6LnZlcnRleFxcbnVuaWZvcm0gbWF0NCBXVlAgOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvcyA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMyIHV2IDogVEVYQ09PUkRfMDtcXG51bmlmb3JtIHZlYzIgdXZSZXBlYXQgOiBbMS4wLCAxLjBdO1xcbnVuaWZvcm0gdmVjMiB1dk9mZnNldCA6IFswLjAsIDAuMF07XFxuQGltcG9ydCBjbGF5LmNodW5rLnNraW5uaW5nX2hlYWRlclxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIFAgPSBwb3M7XFxuI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBQID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zLCAxLjApKS54eXo7XFxuI2VuZGlmXFxuIGdsX1Bvc2l0aW9uID0gV1ZQICogdmVjNChQLCAxLjApO1xcbiB2X1RleGNvb3JkID0gdXYgKiB1dlJlcGVhdCArIHV2T2Zmc2V0O1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnByZXouZnJhZ21lbnRcXG51bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDtcXG51bmlmb3JtIGZsb2F0IGFscGhhQ3V0b2ZmOiAwLjA7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudm9pZCBtYWluKClcXG57XFxuIGlmIChhbHBoYUN1dG9mZiA+IDAuMCkge1xcbiBpZiAodGV4dHVyZTJEKGFscGhhTWFwLCB2X1RleGNvb3JkKS5hIDw9IGFscGhhQ3V0b2ZmKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4gfVxcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwwLjAsMC4wLDEuMCk7XFxufVxcbkBlbmRcIjtcclxuIiwiXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB7R0xNQVRfRVBTSUxPTiwgR0xNQVRfQVJSQVlfVFlQRSB9IGZyb20gJy4vY29tbW9uJztcclxuXHJcbi8qKlxyXG4gKiBAY2xhc3MgNHg0IE1hdHJpeFxyXG4gKiBAbmFtZSBtYXQ0XHJcbiAqL1xyXG5cclxudmFyIG1hdDQgPSB7fTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDRcclxuICpcclxuICogQHJldHVybnMge21hdDR9IGEgbmV3IDR4NCBtYXRyaXhcclxuICovXHJcbm1hdDQuY3JlYXRlID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMTYpO1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSAxO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAwO1xyXG4gICAgb3V0WzldID0gMDtcclxuICAgIG91dFsxMF0gPSAxO1xyXG4gICAgb3V0WzExXSA9IDA7XHJcbiAgICBvdXRbMTJdID0gMDtcclxuICAgIG91dFsxM10gPSAwO1xyXG4gICAgb3V0WzE0XSA9IDA7XHJcbiAgICBvdXRbMTVdID0gMTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQ0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDR9IGEgbmV3IDR4NCBtYXRyaXhcclxuICovXHJcbm1hdDQuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoMTYpO1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICBvdXRbNV0gPSBhWzVdO1xyXG4gICAgb3V0WzZdID0gYVs2XTtcclxuICAgIG91dFs3XSA9IGFbN107XHJcbiAgICBvdXRbOF0gPSBhWzhdO1xyXG4gICAgb3V0WzldID0gYVs5XTtcclxuICAgIG91dFsxMF0gPSBhWzEwXTtcclxuICAgIG91dFsxMV0gPSBhWzExXTtcclxuICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgIG91dFsxM10gPSBhWzEzXTtcclxuICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgIG91dFsxNV0gPSBhWzE1XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIG1hdDQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgb3V0WzRdID0gYVs0XTtcclxuICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICBvdXRbNl0gPSBhWzZdO1xyXG4gICAgb3V0WzddID0gYVs3XTtcclxuICAgIG91dFs4XSA9IGFbOF07XHJcbiAgICBvdXRbOV0gPSBhWzldO1xyXG4gICAgb3V0WzEwXSA9IGFbMTBdO1xyXG4gICAgb3V0WzExXSA9IGFbMTFdO1xyXG4gICAgb3V0WzEyXSA9IGFbMTJdO1xyXG4gICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgb3V0WzE0XSA9IGFbMTRdO1xyXG4gICAgb3V0WzE1XSA9IGFbMTVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgYSBtYXQ0IHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSAxO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAwO1xyXG4gICAgb3V0WzldID0gMDtcclxuICAgIG91dFsxMF0gPSAxO1xyXG4gICAgb3V0WzExXSA9IDA7XHJcbiAgICBvdXRbMTJdID0gMDtcclxuICAgIG91dFsxM10gPSAwO1xyXG4gICAgb3V0WzE0XSA9IDA7XHJcbiAgICBvdXRbMTVdID0gMTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNwb3NlIHRoZSB2YWx1ZXMgb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LnRyYW5zcG9zZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgLy8gSWYgd2UgYXJlIHRyYW5zcG9zaW5nIG91cnNlbHZlcyB3ZSBjYW4gc2tpcCBhIGZldyBzdGVwcyBidXQgaGF2ZSB0byBjYWNoZSBzb21lIHZhbHVlc1xyXG4gICAgaWYgKG91dCA9PT0gYSkge1xyXG4gICAgICAgIHZhciBhMDEgPSBhWzFdLCBhMDIgPSBhWzJdLCBhMDMgPSBhWzNdLFxyXG4gICAgICAgICAgICBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxyXG4gICAgICAgICAgICBhMjMgPSBhWzExXTtcclxuXHJcbiAgICAgICAgb3V0WzFdID0gYVs0XTtcclxuICAgICAgICBvdXRbMl0gPSBhWzhdO1xyXG4gICAgICAgIG91dFszXSA9IGFbMTJdO1xyXG4gICAgICAgIG91dFs0XSA9IGEwMTtcclxuICAgICAgICBvdXRbNl0gPSBhWzldO1xyXG4gICAgICAgIG91dFs3XSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFs4XSA9IGEwMjtcclxuICAgICAgICBvdXRbOV0gPSBhMTI7XHJcbiAgICAgICAgb3V0WzExXSA9IGFbMTRdO1xyXG4gICAgICAgIG91dFsxMl0gPSBhMDM7XHJcbiAgICAgICAgb3V0WzEzXSA9IGExMztcclxuICAgICAgICBvdXRbMTRdID0gYTIzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgICAgIG91dFsxXSA9IGFbNF07XHJcbiAgICAgICAgb3V0WzJdID0gYVs4XTtcclxuICAgICAgICBvdXRbM10gPSBhWzEyXTtcclxuICAgICAgICBvdXRbNF0gPSBhWzFdO1xyXG4gICAgICAgIG91dFs1XSA9IGFbNV07XHJcbiAgICAgICAgb3V0WzZdID0gYVs5XTtcclxuICAgICAgICBvdXRbN10gPSBhWzEzXTtcclxuICAgICAgICBvdXRbOF0gPSBhWzJdO1xyXG4gICAgICAgIG91dFs5XSA9IGFbNl07XHJcbiAgICAgICAgb3V0WzEwXSA9IGFbMTBdO1xyXG4gICAgICAgIG91dFsxMV0gPSBhWzE0XTtcclxuICAgICAgICBvdXRbMTJdID0gYVszXTtcclxuICAgICAgICBvdXRbMTNdID0gYVs3XTtcclxuICAgICAgICBvdXRbMTRdID0gYVsxMV07XHJcbiAgICAgICAgb3V0WzE1XSA9IGFbMTVdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSwgYTAzID0gYVszXSxcclxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXSxcclxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdLCBhMzMgPSBhWzE1XSxcclxuXHJcbiAgICAgICAgYjAwID0gYTAwICogYTExIC0gYTAxICogYTEwLFxyXG4gICAgICAgIGIwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMCxcclxuICAgICAgICBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTAsXHJcbiAgICAgICAgYjAzID0gYTAxICogYTEyIC0gYTAyICogYTExLFxyXG4gICAgICAgIGIwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMSxcclxuICAgICAgICBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTIsXHJcbiAgICAgICAgYjA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwLFxyXG4gICAgICAgIGIwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMCxcclxuICAgICAgICBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzAsXHJcbiAgICAgICAgYjA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxLFxyXG4gICAgICAgIGIxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMSxcclxuICAgICAgICBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzIsXHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcclxuICAgICAgICBkZXQgPSBiMDAgKiBiMTEgLSBiMDEgKiBiMTAgKyBiMDIgKiBiMDkgKyBiMDMgKiBiMDggLSBiMDQgKiBiMDcgKyBiMDUgKiBiMDY7XHJcblxyXG4gICAgaWYgKCFkZXQpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGRldCA9IDEuMCAvIGRldDtcclxuXHJcbiAgICBvdXRbMF0gPSAoYTExICogYjExIC0gYTEyICogYjEwICsgYTEzICogYjA5KSAqIGRldDtcclxuICAgIG91dFsxXSA9IChhMDIgKiBiMTAgLSBhMDEgKiBiMTEgLSBhMDMgKiBiMDkpICogZGV0O1xyXG4gICAgb3V0WzJdID0gKGEzMSAqIGIwNSAtIGEzMiAqIGIwNCArIGEzMyAqIGIwMykgKiBkZXQ7XHJcbiAgICBvdXRbM10gPSAoYTIyICogYjA0IC0gYTIxICogYjA1IC0gYTIzICogYjAzKSAqIGRldDtcclxuICAgIG91dFs0XSA9IChhMTIgKiBiMDggLSBhMTAgKiBiMTEgLSBhMTMgKiBiMDcpICogZGV0O1xyXG4gICAgb3V0WzVdID0gKGEwMCAqIGIxMSAtIGEwMiAqIGIwOCArIGEwMyAqIGIwNykgKiBkZXQ7XHJcbiAgICBvdXRbNl0gPSAoYTMyICogYjAyIC0gYTMwICogYjA1IC0gYTMzICogYjAxKSAqIGRldDtcclxuICAgIG91dFs3XSA9IChhMjAgKiBiMDUgLSBhMjIgKiBiMDIgKyBhMjMgKiBiMDEpICogZGV0O1xyXG4gICAgb3V0WzhdID0gKGExMCAqIGIxMCAtIGExMSAqIGIwOCArIGExMyAqIGIwNikgKiBkZXQ7XHJcbiAgICBvdXRbOV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcclxuICAgIG91dFsxMF0gPSAoYTMwICogYjA0IC0gYTMxICogYjAyICsgYTMzICogYjAwKSAqIGRldDtcclxuICAgIG91dFsxMV0gPSAoYTIxICogYjAyIC0gYTIwICogYjA0IC0gYTIzICogYjAwKSAqIGRldDtcclxuICAgIG91dFsxMl0gPSAoYTExICogYjA3IC0gYTEwICogYjA5IC0gYTEyICogYjA2KSAqIGRldDtcclxuICAgIG91dFsxM10gPSAoYTAwICogYjA5IC0gYTAxICogYjA3ICsgYTAyICogYjA2KSAqIGRldDtcclxuICAgIG91dFsxNF0gPSAoYTMxICogYjAxIC0gYTMwICogYjAzIC0gYTMyICogYjAwKSAqIGRldDtcclxuICAgIG91dFsxNV0gPSAoYTIwICogYjAzIC0gYTIxICogYjAxICsgYTIyICogYjAwKSAqIGRldDtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGFkanVnYXRlIG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5hZGpvaW50ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSwgYTAzID0gYVszXSxcclxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXSxcclxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdLCBhMzMgPSBhWzE1XTtcclxuXHJcbiAgICBvdXRbMF0gID0gIChhMTEgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMSAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpICsgYTMxICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikpO1xyXG4gICAgb3V0WzFdICA9IC0oYTAxICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjEgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMSAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpKTtcclxuICAgIG91dFsyXSAgPSAgKGEwMSAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpIC0gYTExICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzEgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XHJcbiAgICBvdXRbM10gID0gLShhMDEgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSAtIGExMSAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpICsgYTIxICogKGEwMiAqIGExMyAtIGEwMyAqIGExMikpO1xyXG4gICAgb3V0WzRdICA9IC0oYTEwICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjAgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSArIGEzMCAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpKTtcclxuICAgIG91dFs1XSAgPSAgKGEwMCAqIChhMjIgKiBhMzMgLSBhMjMgKiBhMzIpIC0gYTIwICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzAgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSk7XHJcbiAgICBvdXRbNl0gID0gLShhMDAgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSAtIGExMCAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMwICogKGEwMiAqIGExMyAtIGEwMyAqIGExMikpO1xyXG4gICAgb3V0WzddICA9ICAoYTAwICogKGExMiAqIGEyMyAtIGExMyAqIGEyMikgLSBhMTAgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSArIGEyMCAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpKTtcclxuICAgIG91dFs4XSAgPSAgKGExMCAqIChhMjEgKiBhMzMgLSBhMjMgKiBhMzEpIC0gYTIwICogKGExMSAqIGEzMyAtIGExMyAqIGEzMSkgKyBhMzAgKiAoYTExICogYTIzIC0gYTEzICogYTIxKSk7XHJcbiAgICBvdXRbOV0gID0gLShhMDAgKiAoYTIxICogYTMzIC0gYTIzICogYTMxKSAtIGEyMCAqIChhMDEgKiBhMzMgLSBhMDMgKiBhMzEpICsgYTMwICogKGEwMSAqIGEyMyAtIGEwMyAqIGEyMSkpO1xyXG4gICAgb3V0WzEwXSA9ICAoYTAwICogKGExMSAqIGEzMyAtIGExMyAqIGEzMSkgLSBhMTAgKiAoYTAxICogYTMzIC0gYTAzICogYTMxKSArIGEzMCAqIChhMDEgKiBhMTMgLSBhMDMgKiBhMTEpKTtcclxuICAgIG91dFsxMV0gPSAtKGEwMCAqIChhMTEgKiBhMjMgLSBhMTMgKiBhMjEpIC0gYTEwICogKGEwMSAqIGEyMyAtIGEwMyAqIGEyMSkgKyBhMjAgKiAoYTAxICogYTEzIC0gYTAzICogYTExKSk7XHJcbiAgICBvdXRbMTJdID0gLShhMTAgKiAoYTIxICogYTMyIC0gYTIyICogYTMxKSAtIGEyMCAqIChhMTEgKiBhMzIgLSBhMTIgKiBhMzEpICsgYTMwICogKGExMSAqIGEyMiAtIGExMiAqIGEyMSkpO1xyXG4gICAgb3V0WzEzXSA9ICAoYTAwICogKGEyMSAqIGEzMiAtIGEyMiAqIGEzMSkgLSBhMjAgKiAoYTAxICogYTMyIC0gYTAyICogYTMxKSArIGEzMCAqIChhMDEgKiBhMjIgLSBhMDIgKiBhMjEpKTtcclxuICAgIG91dFsxNF0gPSAtKGEwMCAqIChhMTEgKiBhMzIgLSBhMTIgKiBhMzEpIC0gYTEwICogKGEwMSAqIGEzMiAtIGEwMiAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTEyIC0gYTAyICogYTExKSk7XHJcbiAgICBvdXRbMTVdID0gIChhMDAgKiAoYTExICogYTIyIC0gYTEyICogYTIxKSAtIGExMCAqIChhMDEgKiBhMjIgLSBhMDIgKiBhMjEpICsgYTIwICogKGEwMSAqIGExMiAtIGEwMiAqIGExMSkpO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRldGVybWluYW50IG9mIGFcclxuICovXHJcbm1hdDQuZGV0ZXJtaW5hbnQgPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sIGEwMyA9IGFbM10sXHJcbiAgICAgICAgYTEwID0gYVs0XSwgYTExID0gYVs1XSwgYTEyID0gYVs2XSwgYTEzID0gYVs3XSxcclxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSwgYTIzID0gYVsxMV0sXHJcbiAgICAgICAgYTMwID0gYVsxMl0sIGEzMSA9IGFbMTNdLCBhMzIgPSBhWzE0XSwgYTMzID0gYVsxNV0sXHJcblxyXG4gICAgICAgIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMCxcclxuICAgICAgICBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTAsXHJcbiAgICAgICAgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwLFxyXG4gICAgICAgIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMSxcclxuICAgICAgICBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTEsXHJcbiAgICAgICAgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyLFxyXG4gICAgICAgIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMCxcclxuICAgICAgICBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzAsXHJcbiAgICAgICAgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwLFxyXG4gICAgICAgIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMSxcclxuICAgICAgICBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzEsXHJcbiAgICAgICAgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyO1xyXG5cclxuICAgIC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcclxuICAgIHJldHVybiBiMDAgKiBiMTEgLSBiMDEgKiBiMTAgKyBiMDIgKiBiMDkgKyBiMDMgKiBiMDggLSBiMDQgKiBiMDcgKyBiMDUgKiBiMDY7XHJcbn07XHJcblxyXG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0NCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQubXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYTAwID0gYVswXSwgYTAxID0gYVsxXSwgYTAyID0gYVsyXSwgYTAzID0gYVszXSxcclxuICAgICAgICBhMTAgPSBhWzRdLCBhMTEgPSBhWzVdLCBhMTIgPSBhWzZdLCBhMTMgPSBhWzddLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sIGEyMSA9IGFbOV0sIGEyMiA9IGFbMTBdLCBhMjMgPSBhWzExXSxcclxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdLCBhMzMgPSBhWzE1XTtcclxuXHJcbiAgICAvLyBDYWNoZSBvbmx5IHRoZSBjdXJyZW50IGxpbmUgb2YgdGhlIHNlY29uZCBtYXRyaXhcclxuICAgIHZhciBiMCAgPSBiWzBdLCBiMSA9IGJbMV0sIGIyID0gYlsyXSwgYjMgPSBiWzNdO1xyXG4gICAgb3V0WzBdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xyXG4gICAgb3V0WzFdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxICsgYjMqYTMxO1xyXG4gICAgb3V0WzJdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYjMqYTMyO1xyXG4gICAgb3V0WzNdID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xyXG5cclxuICAgIGIwID0gYls0XTsgYjEgPSBiWzVdOyBiMiA9IGJbNl07IGIzID0gYls3XTtcclxuICAgIG91dFs0XSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMCArIGIzKmEzMDtcclxuICAgIG91dFs1XSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcclxuICAgIG91dFs2XSA9IGIwKmEwMiArIGIxKmExMiArIGIyKmEyMiArIGIzKmEzMjtcclxuICAgIG91dFs3XSA9IGIwKmEwMyArIGIxKmExMyArIGIyKmEyMyArIGIzKmEzMztcclxuXHJcbiAgICBiMCA9IGJbOF07IGIxID0gYls5XTsgYjIgPSBiWzEwXTsgYjMgPSBiWzExXTtcclxuICAgIG91dFs4XSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMCArIGIzKmEzMDtcclxuICAgIG91dFs5XSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcclxuICAgIG91dFsxMF0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjIgKyBiMyphMzI7XHJcbiAgICBvdXRbMTFdID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xyXG5cclxuICAgIGIwID0gYlsxMl07IGIxID0gYlsxM107IGIyID0gYlsxNF07IGIzID0gYlsxNV07XHJcbiAgICBvdXRbMTJdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwICsgYjMqYTMwO1xyXG4gICAgb3V0WzEzXSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMSArIGIzKmEzMTtcclxuICAgIG91dFsxNF0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjIgKyBiMyphMzI7XHJcbiAgICBvdXRbMTVdID0gYjAqYTAzICsgYjEqYTEzICsgYjIqYTIzICsgYjMqYTMzO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBhZmZpbmUgbWF0NCdzXHJcbiAqIEFkZCBieSBodHRwczovL2dpdGh1Yi5jb20vcGlzc2FuZ1xyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQ0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0Lm11bHRpcGx5QWZmaW5lID0gZnVuY3Rpb24gKG91dCwgYSwgYikge1xyXG4gICAgdmFyIGEwMCA9IGFbMF0sIGEwMSA9IGFbMV0sIGEwMiA9IGFbMl0sXHJcbiAgICAgICAgYTEwID0gYVs0XSwgYTExID0gYVs1XSwgYTEyID0gYVs2XSxcclxuICAgICAgICBhMjAgPSBhWzhdLCBhMjEgPSBhWzldLCBhMjIgPSBhWzEwXSxcclxuICAgICAgICBhMzAgPSBhWzEyXSwgYTMxID0gYVsxM10sIGEzMiA9IGFbMTRdO1xyXG5cclxuICAgIC8vIENhY2hlIG9ubHkgdGhlIGN1cnJlbnQgbGluZSBvZiB0aGUgc2Vjb25kIG1hdHJpeFxyXG4gICAgdmFyIGIwICA9IGJbMF0sIGIxID0gYlsxXSwgYjIgPSBiWzJdO1xyXG4gICAgb3V0WzBdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwO1xyXG4gICAgb3V0WzFdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxO1xyXG4gICAgb3V0WzJdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyO1xyXG4gICAgLy8gb3V0WzNdID0gMDtcclxuXHJcbiAgICBiMCA9IGJbNF07IGIxID0gYls1XTsgYjIgPSBiWzZdO1xyXG4gICAgb3V0WzRdID0gYjAqYTAwICsgYjEqYTEwICsgYjIqYTIwO1xyXG4gICAgb3V0WzVdID0gYjAqYTAxICsgYjEqYTExICsgYjIqYTIxO1xyXG4gICAgb3V0WzZdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyO1xyXG4gICAgLy8gb3V0WzddID0gMDtcclxuXHJcbiAgICBiMCA9IGJbOF07IGIxID0gYls5XTsgYjIgPSBiWzEwXTtcclxuICAgIG91dFs4XSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMDtcclxuICAgIG91dFs5XSA9IGIwKmEwMSArIGIxKmExMSArIGIyKmEyMTtcclxuICAgIG91dFsxMF0gPSBiMCphMDIgKyBiMSphMTIgKyBiMiphMjI7XHJcbiAgICAvLyBvdXRbMTFdID0gMDtcclxuXHJcbiAgICBiMCA9IGJbMTJdOyBiMSA9IGJbMTNdOyBiMiA9IGJbMTRdO1xyXG4gICAgb3V0WzEyXSA9IGIwKmEwMCArIGIxKmExMCArIGIyKmEyMCArIGEzMDtcclxuICAgIG91dFsxM10gPSBiMCphMDEgKyBiMSphMTEgKyBiMiphMjEgKyBhMzE7XHJcbiAgICBvdXRbMTRdID0gYjAqYTAyICsgYjEqYTEyICsgYjIqYTIyICsgYTMyO1xyXG4gICAgLy8gb3V0WzE1XSA9IDE7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0NC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5tYXQ0Lm11bCA9IG1hdDQubXVsdGlwbHk7XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQ0Lm11bHRpcGx5QWZmaW5lfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXHJcbm1hdDQubXVsQWZmaW5lID0gbWF0NC5tdWx0aXBseUFmZmluZTtcclxuLyoqXHJcbiAqIFRyYW5zbGF0ZSBhIG1hdDQgYnkgdGhlIGdpdmVuIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMzfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC50cmFuc2xhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCB2KSB7XHJcbiAgICB2YXIgeCA9IHZbMF0sIHkgPSB2WzFdLCB6ID0gdlsyXSxcclxuICAgICAgICBhMDAsIGEwMSwgYTAyLCBhMDMsXHJcbiAgICAgICAgYTEwLCBhMTEsIGExMiwgYTEzLFxyXG4gICAgICAgIGEyMCwgYTIxLCBhMjIsIGEyMztcclxuXHJcbiAgICBpZiAoYSA9PT0gb3V0KSB7XHJcbiAgICAgICAgb3V0WzEyXSA9IGFbMF0gKiB4ICsgYVs0XSAqIHkgKyBhWzhdICogeiArIGFbMTJdO1xyXG4gICAgICAgIG91dFsxM10gPSBhWzFdICogeCArIGFbNV0gKiB5ICsgYVs5XSAqIHogKyBhWzEzXTtcclxuICAgICAgICBvdXRbMTRdID0gYVsyXSAqIHggKyBhWzZdICogeSArIGFbMTBdICogeiArIGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhWzNdICogeCArIGFbN10gKiB5ICsgYVsxMV0gKiB6ICsgYVsxNV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGEwMCA9IGFbMF07IGEwMSA9IGFbMV07IGEwMiA9IGFbMl07IGEwMyA9IGFbM107XHJcbiAgICAgICAgYTEwID0gYVs0XTsgYTExID0gYVs1XTsgYTEyID0gYVs2XTsgYTEzID0gYVs3XTtcclxuICAgICAgICBhMjAgPSBhWzhdOyBhMjEgPSBhWzldOyBhMjIgPSBhWzEwXTsgYTIzID0gYVsxMV07XHJcblxyXG4gICAgICAgIG91dFswXSA9IGEwMDsgb3V0WzFdID0gYTAxOyBvdXRbMl0gPSBhMDI7IG91dFszXSA9IGEwMztcclxuICAgICAgICBvdXRbNF0gPSBhMTA7IG91dFs1XSA9IGExMTsgb3V0WzZdID0gYTEyOyBvdXRbN10gPSBhMTM7XHJcbiAgICAgICAgb3V0WzhdID0gYTIwOyBvdXRbOV0gPSBhMjE7IG91dFsxMF0gPSBhMjI7IG91dFsxMV0gPSBhMjM7XHJcblxyXG4gICAgICAgIG91dFsxMl0gPSBhMDAgKiB4ICsgYTEwICogeSArIGEyMCAqIHogKyBhWzEyXTtcclxuICAgICAgICBvdXRbMTNdID0gYTAxICogeCArIGExMSAqIHkgKyBhMjEgKiB6ICsgYVsxM107XHJcbiAgICAgICAgb3V0WzE0XSA9IGEwMiAqIHggKyBhMTIgKiB5ICsgYTIyICogeiArIGFbMTRdO1xyXG4gICAgICAgIG91dFsxNV0gPSBhMDMgKiB4ICsgYTEzICogeSArIGEyMyAqIHogKyBhWzE1XTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0NCBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgdGhlIHZlYzMgdG8gc2NhbGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqKi9cclxubWF0NC5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgdmFyIHggPSB2WzBdLCB5ID0gdlsxXSwgeiA9IHZbMl07XHJcblxyXG4gICAgb3V0WzBdID0gYVswXSAqIHg7XHJcbiAgICBvdXRbMV0gPSBhWzFdICogeDtcclxuICAgIG91dFsyXSA9IGFbMl0gKiB4O1xyXG4gICAgb3V0WzNdID0gYVszXSAqIHg7XHJcbiAgICBvdXRbNF0gPSBhWzRdICogeTtcclxuICAgIG91dFs1XSA9IGFbNV0gKiB5O1xyXG4gICAgb3V0WzZdID0gYVs2XSAqIHk7XHJcbiAgICBvdXRbN10gPSBhWzddICogeTtcclxuICAgIG91dFs4XSA9IGFbOF0gKiB6O1xyXG4gICAgb3V0WzldID0gYVs5XSAqIHo7XHJcbiAgICBvdXRbMTBdID0gYVsxMF0gKiB6O1xyXG4gICAgb3V0WzExXSA9IGFbMTFdICogejtcclxuICAgIG91dFsxMl0gPSBhWzEyXTtcclxuICAgIG91dFsxM10gPSBhWzEzXTtcclxuICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgIG91dFsxNV0gPSBhWzE1XTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIG1hdDQgYnkgdGhlIGdpdmVuIGFuZ2xlXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGF4aXMgdGhlIGF4aXMgdG8gcm90YXRlIGFyb3VuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LnJvdGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCwgYXhpcykge1xyXG4gICAgdmFyIHggPSBheGlzWzBdLCB5ID0gYXhpc1sxXSwgeiA9IGF4aXNbMl0sXHJcbiAgICAgICAgbGVuID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeiksXHJcbiAgICAgICAgcywgYywgdCxcclxuICAgICAgICBhMDAsIGEwMSwgYTAyLCBhMDMsXHJcbiAgICAgICAgYTEwLCBhMTEsIGExMiwgYTEzLFxyXG4gICAgICAgIGEyMCwgYTIxLCBhMjIsIGEyMyxcclxuICAgICAgICBiMDAsIGIwMSwgYjAyLFxyXG4gICAgICAgIGIxMCwgYjExLCBiMTIsXHJcbiAgICAgICAgYjIwLCBiMjEsIGIyMjtcclxuXHJcbiAgICBpZiAoTWF0aC5hYnMobGVuKSA8IEdMTUFUX0VQU0lMT04pIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICBsZW4gPSAxIC8gbGVuO1xyXG4gICAgeCAqPSBsZW47XHJcbiAgICB5ICo9IGxlbjtcclxuICAgIHogKj0gbGVuO1xyXG5cclxuICAgIHMgPSBNYXRoLnNpbihyYWQpO1xyXG4gICAgYyA9IE1hdGguY29zKHJhZCk7XHJcbiAgICB0ID0gMSAtIGM7XHJcblxyXG4gICAgYTAwID0gYVswXTsgYTAxID0gYVsxXTsgYTAyID0gYVsyXTsgYTAzID0gYVszXTtcclxuICAgIGExMCA9IGFbNF07IGExMSA9IGFbNV07IGExMiA9IGFbNl07IGExMyA9IGFbN107XHJcbiAgICBhMjAgPSBhWzhdOyBhMjEgPSBhWzldOyBhMjIgPSBhWzEwXTsgYTIzID0gYVsxMV07XHJcblxyXG4gICAgLy8gQ29uc3RydWN0IHRoZSBlbGVtZW50cyBvZiB0aGUgcm90YXRpb24gbWF0cml4XHJcbiAgICBiMDAgPSB4ICogeCAqIHQgKyBjOyBiMDEgPSB5ICogeCAqIHQgKyB6ICogczsgYjAyID0geiAqIHggKiB0IC0geSAqIHM7XHJcbiAgICBiMTAgPSB4ICogeSAqIHQgLSB6ICogczsgYjExID0geSAqIHkgKiB0ICsgYzsgYjEyID0geiAqIHkgKiB0ICsgeCAqIHM7XHJcbiAgICBiMjAgPSB4ICogeiAqIHQgKyB5ICogczsgYjIxID0geSAqIHogKiB0IC0geCAqIHM7IGIyMiA9IHogKiB6ICogdCArIGM7XHJcblxyXG4gICAgLy8gUGVyZm9ybSByb3RhdGlvbi1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cclxuICAgIG91dFswXSA9IGEwMCAqIGIwMCArIGExMCAqIGIwMSArIGEyMCAqIGIwMjtcclxuICAgIG91dFsxXSA9IGEwMSAqIGIwMCArIGExMSAqIGIwMSArIGEyMSAqIGIwMjtcclxuICAgIG91dFsyXSA9IGEwMiAqIGIwMCArIGExMiAqIGIwMSArIGEyMiAqIGIwMjtcclxuICAgIG91dFszXSA9IGEwMyAqIGIwMCArIGExMyAqIGIwMSArIGEyMyAqIGIwMjtcclxuICAgIG91dFs0XSA9IGEwMCAqIGIxMCArIGExMCAqIGIxMSArIGEyMCAqIGIxMjtcclxuICAgIG91dFs1XSA9IGEwMSAqIGIxMCArIGExMSAqIGIxMSArIGEyMSAqIGIxMjtcclxuICAgIG91dFs2XSA9IGEwMiAqIGIxMCArIGExMiAqIGIxMSArIGEyMiAqIGIxMjtcclxuICAgIG91dFs3XSA9IGEwMyAqIGIxMCArIGExMyAqIGIxMSArIGEyMyAqIGIxMjtcclxuICAgIG91dFs4XSA9IGEwMCAqIGIyMCArIGExMCAqIGIyMSArIGEyMCAqIGIyMjtcclxuICAgIG91dFs5XSA9IGEwMSAqIGIyMCArIGExMSAqIGIyMSArIGEyMSAqIGIyMjtcclxuICAgIG91dFsxMF0gPSBhMDIgKiBiMjAgKyBhMTIgKiBiMjEgKyBhMjIgKiBiMjI7XHJcbiAgICBvdXRbMTFdID0gYTAzICogYjIwICsgYTEzICogYjIxICsgYTIzICogYjIyO1xyXG5cclxuICAgIGlmIChhICE9PSBvdXQpIHsgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgbGFzdCByb3dcclxuICAgICAgICBvdXRbMTJdID0gYVsxMl07XHJcbiAgICAgICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgICAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXRyaXggYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWCBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0LnJvdGF0ZVggPSBmdW5jdGlvbiAob3V0LCBhLCByYWQpIHtcclxuICAgIHZhciBzID0gTWF0aC5zaW4ocmFkKSxcclxuICAgICAgICBjID0gTWF0aC5jb3MocmFkKSxcclxuICAgICAgICBhMTAgPSBhWzRdLFxyXG4gICAgICAgIGExMSA9IGFbNV0sXHJcbiAgICAgICAgYTEyID0gYVs2XSxcclxuICAgICAgICBhMTMgPSBhWzddLFxyXG4gICAgICAgIGEyMCA9IGFbOF0sXHJcbiAgICAgICAgYTIxID0gYVs5XSxcclxuICAgICAgICBhMjIgPSBhWzEwXSxcclxuICAgICAgICBhMjMgPSBhWzExXTtcclxuXHJcbiAgICBpZiAoYSAhPT0gb3V0KSB7IC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIHJvd3NcclxuICAgICAgICBvdXRbMF0gID0gYVswXTtcclxuICAgICAgICBvdXRbMV0gID0gYVsxXTtcclxuICAgICAgICBvdXRbMl0gID0gYVsyXTtcclxuICAgICAgICBvdXRbM10gID0gYVszXTtcclxuICAgICAgICBvdXRbMTJdID0gYVsxMl07XHJcbiAgICAgICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgICAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxyXG4gICAgb3V0WzRdID0gYTEwICogYyArIGEyMCAqIHM7XHJcbiAgICBvdXRbNV0gPSBhMTEgKiBjICsgYTIxICogcztcclxuICAgIG91dFs2XSA9IGExMiAqIGMgKyBhMjIgKiBzO1xyXG4gICAgb3V0WzddID0gYTEzICogYyArIGEyMyAqIHM7XHJcbiAgICBvdXRbOF0gPSBhMjAgKiBjIC0gYTEwICogcztcclxuICAgIG91dFs5XSA9IGEyMSAqIGMgLSBhMTEgKiBzO1xyXG4gICAgb3V0WzEwXSA9IGEyMiAqIGMgLSBhMTIgKiBzO1xyXG4gICAgb3V0WzExXSA9IGEyMyAqIGMgLSBhMTMgKiBzO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0cml4IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFkgYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5yb3RhdGVZID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICB2YXIgcyA9IE1hdGguc2luKHJhZCksXHJcbiAgICAgICAgYyA9IE1hdGguY29zKHJhZCksXHJcbiAgICAgICAgYTAwID0gYVswXSxcclxuICAgICAgICBhMDEgPSBhWzFdLFxyXG4gICAgICAgIGEwMiA9IGFbMl0sXHJcbiAgICAgICAgYTAzID0gYVszXSxcclxuICAgICAgICBhMjAgPSBhWzhdLFxyXG4gICAgICAgIGEyMSA9IGFbOV0sXHJcbiAgICAgICAgYTIyID0gYVsxMF0sXHJcbiAgICAgICAgYTIzID0gYVsxMV07XHJcblxyXG4gICAgaWYgKGEgIT09IG91dCkgeyAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCByb3dzXHJcbiAgICAgICAgb3V0WzRdICA9IGFbNF07XHJcbiAgICAgICAgb3V0WzVdICA9IGFbNV07XHJcbiAgICAgICAgb3V0WzZdICA9IGFbNl07XHJcbiAgICAgICAgb3V0WzddICA9IGFbN107XHJcbiAgICAgICAgb3V0WzEyXSA9IGFbMTJdO1xyXG4gICAgICAgIG91dFsxM10gPSBhWzEzXTtcclxuICAgICAgICBvdXRbMTRdID0gYVsxNF07XHJcbiAgICAgICAgb3V0WzE1XSA9IGFbMTVdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cclxuICAgIG91dFswXSA9IGEwMCAqIGMgLSBhMjAgKiBzO1xyXG4gICAgb3V0WzFdID0gYTAxICogYyAtIGEyMSAqIHM7XHJcbiAgICBvdXRbMl0gPSBhMDIgKiBjIC0gYTIyICogcztcclxuICAgIG91dFszXSA9IGEwMyAqIGMgLSBhMjMgKiBzO1xyXG4gICAgb3V0WzhdID0gYTAwICogcyArIGEyMCAqIGM7XHJcbiAgICBvdXRbOV0gPSBhMDEgKiBzICsgYTIxICogYztcclxuICAgIG91dFsxMF0gPSBhMDIgKiBzICsgYTIyICogYztcclxuICAgIG91dFsxMV0gPSBhMDMgKiBzICsgYTIzICogYztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIG1hdHJpeCBieSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBaIGF4aXNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQucm90YXRlWiA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgdmFyIHMgPSBNYXRoLnNpbihyYWQpLFxyXG4gICAgICAgIGMgPSBNYXRoLmNvcyhyYWQpLFxyXG4gICAgICAgIGEwMCA9IGFbMF0sXHJcbiAgICAgICAgYTAxID0gYVsxXSxcclxuICAgICAgICBhMDIgPSBhWzJdLFxyXG4gICAgICAgIGEwMyA9IGFbM10sXHJcbiAgICAgICAgYTEwID0gYVs0XSxcclxuICAgICAgICBhMTEgPSBhWzVdLFxyXG4gICAgICAgIGExMiA9IGFbNl0sXHJcbiAgICAgICAgYTEzID0gYVs3XTtcclxuXHJcbiAgICBpZiAoYSAhPT0gb3V0KSB7IC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIGxhc3Qgcm93XHJcbiAgICAgICAgb3V0WzhdICA9IGFbOF07XHJcbiAgICAgICAgb3V0WzldICA9IGFbOV07XHJcbiAgICAgICAgb3V0WzEwXSA9IGFbMTBdO1xyXG4gICAgICAgIG91dFsxMV0gPSBhWzExXTtcclxuICAgICAgICBvdXRbMTJdID0gYVsxMl07XHJcbiAgICAgICAgb3V0WzEzXSA9IGFbMTNdO1xyXG4gICAgICAgIG91dFsxNF0gPSBhWzE0XTtcclxuICAgICAgICBvdXRbMTVdID0gYVsxNV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxyXG4gICAgb3V0WzBdID0gYTAwICogYyArIGExMCAqIHM7XHJcbiAgICBvdXRbMV0gPSBhMDEgKiBjICsgYTExICogcztcclxuICAgIG91dFsyXSA9IGEwMiAqIGMgKyBhMTIgKiBzO1xyXG4gICAgb3V0WzNdID0gYTAzICogYyArIGExMyAqIHM7XHJcbiAgICBvdXRbNF0gPSBhMTAgKiBjIC0gYTAwICogcztcclxuICAgIG91dFs1XSA9IGExMSAqIGMgLSBhMDEgKiBzO1xyXG4gICAgb3V0WzZdID0gYTEyICogYyAtIGEwMiAqIHM7XHJcbiAgICBvdXRbN10gPSBhMTMgKiBjIC0gYTAzICogcztcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgcXVhdGVybmlvbiByb3RhdGlvbiBhbmQgdmVjdG9yIHRyYW5zbGF0aW9uXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIHZlYyk7XHJcbiAqICAgICB2YXIgcXVhdE1hdCA9IG1hdDQuY3JlYXRlKCk7XHJcbiAqICAgICBxdWF0NC50b01hdDQocXVhdCwgcXVhdE1hdCk7XHJcbiAqICAgICBtYXQ0Lm11bHRpcGx5KGRlc3QsIHF1YXRNYXQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdDR9IHEgUm90YXRpb24gcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgVHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24gPSBmdW5jdGlvbiAob3V0LCBxLCB2KSB7XHJcbiAgICAvLyBRdWF0ZXJuaW9uIG1hdGhcclxuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXSxcclxuICAgICAgICB4MiA9IHggKyB4LFxyXG4gICAgICAgIHkyID0geSArIHksXHJcbiAgICAgICAgejIgPSB6ICsgeixcclxuXHJcbiAgICAgICAgeHggPSB4ICogeDIsXHJcbiAgICAgICAgeHkgPSB4ICogeTIsXHJcbiAgICAgICAgeHogPSB4ICogejIsXHJcbiAgICAgICAgeXkgPSB5ICogeTIsXHJcbiAgICAgICAgeXogPSB5ICogejIsXHJcbiAgICAgICAgenogPSB6ICogejIsXHJcbiAgICAgICAgd3ggPSB3ICogeDIsXHJcbiAgICAgICAgd3kgPSB3ICogeTIsXHJcbiAgICAgICAgd3ogPSB3ICogejI7XHJcblxyXG4gICAgb3V0WzBdID0gMSAtICh5eSArIHp6KTtcclxuICAgIG91dFsxXSA9IHh5ICsgd3o7XHJcbiAgICBvdXRbMl0gPSB4eiAtIHd5O1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IHh5IC0gd3o7XHJcbiAgICBvdXRbNV0gPSAxIC0gKHh4ICsgenopO1xyXG4gICAgb3V0WzZdID0geXogKyB3eDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSB4eiArIHd5O1xyXG4gICAgb3V0WzldID0geXogLSB3eDtcclxuICAgIG91dFsxMF0gPSAxIC0gKHh4ICsgeXkpO1xyXG4gICAgb3V0WzExXSA9IDA7XHJcbiAgICBvdXRbMTJdID0gdlswXTtcclxuICAgIG91dFsxM10gPSB2WzFdO1xyXG4gICAgb3V0WzE0XSA9IHZbMl07XHJcbiAgICBvdXRbMTVdID0gMTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxubWF0NC5mcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEpIHtcclxuICAgIHZhciB4ID0gcVswXSwgeSA9IHFbMV0sIHogPSBxWzJdLCB3ID0gcVszXSxcclxuICAgICAgICB4MiA9IHggKyB4LFxyXG4gICAgICAgIHkyID0geSArIHksXHJcbiAgICAgICAgejIgPSB6ICsgeixcclxuXHJcbiAgICAgICAgeHggPSB4ICogeDIsXHJcbiAgICAgICAgeXggPSB5ICogeDIsXHJcbiAgICAgICAgeXkgPSB5ICogeTIsXHJcbiAgICAgICAgenggPSB6ICogeDIsXHJcbiAgICAgICAgenkgPSB6ICogeTIsXHJcbiAgICAgICAgenogPSB6ICogejIsXHJcbiAgICAgICAgd3ggPSB3ICogeDIsXHJcbiAgICAgICAgd3kgPSB3ICogeTIsXHJcbiAgICAgICAgd3ogPSB3ICogejI7XHJcblxyXG4gICAgb3V0WzBdID0gMSAtIHl5IC0geno7XHJcbiAgICBvdXRbMV0gPSB5eCArIHd6O1xyXG4gICAgb3V0WzJdID0genggLSB3eTtcclxuICAgIG91dFszXSA9IDA7XHJcblxyXG4gICAgb3V0WzRdID0geXggLSB3ejtcclxuICAgIG91dFs1XSA9IDEgLSB4eCAtIHp6O1xyXG4gICAgb3V0WzZdID0genkgKyB3eDtcclxuICAgIG91dFs3XSA9IDA7XHJcblxyXG4gICAgb3V0WzhdID0genggKyB3eTtcclxuICAgIG91dFs5XSA9IHp5IC0gd3g7XHJcbiAgICBvdXRbMTBdID0gMSAtIHh4IC0geXk7XHJcbiAgICBvdXRbMTFdID0gMDtcclxuXHJcbiAgICBvdXRbMTJdID0gMDtcclxuICAgIG91dFsxM10gPSAwO1xyXG4gICAgb3V0WzE0XSA9IDA7XHJcbiAgICBvdXRbMTVdID0gMTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIGZydXN0dW0gbWF0cml4IHdpdGggdGhlIGdpdmVuIGJvdW5kc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBsZWZ0IExlZnQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IHJpZ2h0IFJpZ2h0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBib3R0b20gQm90dG9tIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0b3AgVG9wIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBuZWFyIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cclxubWF0NC5mcnVzdHVtID0gZnVuY3Rpb24gKG91dCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcclxuICAgIHZhciBybCA9IDEgLyAocmlnaHQgLSBsZWZ0KSxcclxuICAgICAgICB0YiA9IDEgLyAodG9wIC0gYm90dG9tKSxcclxuICAgICAgICBuZiA9IDEgLyAobmVhciAtIGZhcik7XHJcbiAgICBvdXRbMF0gPSAobmVhciAqIDIpICogcmw7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDA7XHJcbiAgICBvdXRbNF0gPSAwO1xyXG4gICAgb3V0WzVdID0gKG5lYXIgKiAyKSAqIHRiO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAocmlnaHQgKyBsZWZ0KSAqIHJsO1xyXG4gICAgb3V0WzldID0gKHRvcCArIGJvdHRvbSkgKiB0YjtcclxuICAgIG91dFsxMF0gPSAoZmFyICsgbmVhcikgKiBuZjtcclxuICAgIG91dFsxMV0gPSAtMTtcclxuICAgIG91dFsxMl0gPSAwO1xyXG4gICAgb3V0WzEzXSA9IDA7XHJcbiAgICBvdXRbMTRdID0gKGZhciAqIG5lYXIgKiAyKSAqIG5mO1xyXG4gICAgb3V0WzE1XSA9IDA7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHBlcnNwZWN0aXZlIHByb2plY3Rpb24gbWF0cml4IHdpdGggdGhlIGdpdmVuIGJvdW5kc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3Z5IFZlcnRpY2FsIGZpZWxkIG9mIHZpZXcgaW4gcmFkaWFuc1xyXG4gKiBAcGFyYW0ge251bWJlcn0gYXNwZWN0IEFzcGVjdCByYXRpby4gdHlwaWNhbGx5IHZpZXdwb3J0IHdpZHRoL2hlaWdodFxyXG4gKiBAcGFyYW0ge251bWJlcn0gbmVhciBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBmYXIgRmFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXHJcbm1hdDQucGVyc3BlY3RpdmUgPSBmdW5jdGlvbiAob3V0LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcikge1xyXG4gICAgdmFyIGYgPSAxLjAgLyBNYXRoLnRhbihmb3Z5IC8gMiksXHJcbiAgICAgICAgbmYgPSAxIC8gKG5lYXIgLSBmYXIpO1xyXG4gICAgb3V0WzBdID0gZiAvIGFzcGVjdDtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMDtcclxuICAgIG91dFs0XSA9IDA7XHJcbiAgICBvdXRbNV0gPSBmO1xyXG4gICAgb3V0WzZdID0gMDtcclxuICAgIG91dFs3XSA9IDA7XHJcbiAgICBvdXRbOF0gPSAwO1xyXG4gICAgb3V0WzldID0gMDtcclxuICAgIG91dFsxMF0gPSAoZmFyICsgbmVhcikgKiBuZjtcclxuICAgIG91dFsxMV0gPSAtMTtcclxuICAgIG91dFsxMl0gPSAwO1xyXG4gICAgb3V0WzEzXSA9IDA7XHJcbiAgICBvdXRbMTRdID0gKDIgKiBmYXIgKiBuZWFyKSAqIG5mO1xyXG4gICAgb3V0WzE1XSA9IDA7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIG9ydGhvZ29uYWwgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtudW1iZXJ9IGxlZnQgTGVmdCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmlnaHQgUmlnaHQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IGJvdHRvbSBCb3R0b20gYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IHRvcCBUb3AgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0Lm9ydGhvID0gZnVuY3Rpb24gKG91dCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcclxuICAgIHZhciBsciA9IDEgLyAobGVmdCAtIHJpZ2h0KSxcclxuICAgICAgICBidCA9IDEgLyAoYm90dG9tIC0gdG9wKSxcclxuICAgICAgICBuZiA9IDEgLyAobmVhciAtIGZhcik7XHJcbiAgICBvdXRbMF0gPSAtMiAqIGxyO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAwO1xyXG4gICAgb3V0WzRdID0gMDtcclxuICAgIG91dFs1XSA9IC0yICogYnQ7XHJcbiAgICBvdXRbNl0gPSAwO1xyXG4gICAgb3V0WzddID0gMDtcclxuICAgIG91dFs4XSA9IDA7XHJcbiAgICBvdXRbOV0gPSAwO1xyXG4gICAgb3V0WzEwXSA9IDIgKiBuZjtcclxuICAgIG91dFsxMV0gPSAwO1xyXG4gICAgb3V0WzEyXSA9IChsZWZ0ICsgcmlnaHQpICogbHI7XHJcbiAgICBvdXRbMTNdID0gKHRvcCArIGJvdHRvbSkgKiBidDtcclxuICAgIG91dFsxNF0gPSAoZmFyICsgbmVhcikgKiBuZjtcclxuICAgIG91dFsxNV0gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBsb29rLWF0IG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBleWUgcG9zaXRpb24sIGZvY2FsIHBvaW50LCBhbmQgdXAgYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7dmVjM30gZXllIFBvc2l0aW9uIG9mIHRoZSB2aWV3ZXJcclxuICogQHBhcmFtIHt2ZWMzfSBjZW50ZXIgUG9pbnQgdGhlIHZpZXdlciBpcyBsb29raW5nIGF0XHJcbiAqIEBwYXJhbSB7dmVjM30gdXAgdmVjMyBwb2ludGluZyB1cFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xyXG5tYXQ0Lmxvb2tBdCA9IGZ1bmN0aW9uIChvdXQsIGV5ZSwgY2VudGVyLCB1cCkge1xyXG4gICAgdmFyIHgwLCB4MSwgeDIsIHkwLCB5MSwgeTIsIHowLCB6MSwgejIsIGxlbixcclxuICAgICAgICBleWV4ID0gZXllWzBdLFxyXG4gICAgICAgIGV5ZXkgPSBleWVbMV0sXHJcbiAgICAgICAgZXlleiA9IGV5ZVsyXSxcclxuICAgICAgICB1cHggPSB1cFswXSxcclxuICAgICAgICB1cHkgPSB1cFsxXSxcclxuICAgICAgICB1cHogPSB1cFsyXSxcclxuICAgICAgICBjZW50ZXJ4ID0gY2VudGVyWzBdLFxyXG4gICAgICAgIGNlbnRlcnkgPSBjZW50ZXJbMV0sXHJcbiAgICAgICAgY2VudGVyeiA9IGNlbnRlclsyXTtcclxuXHJcbiAgICBpZiAoTWF0aC5hYnMoZXlleCAtIGNlbnRlcngpIDwgR0xNQVRfRVBTSUxPTiAmJlxyXG4gICAgICAgIE1hdGguYWJzKGV5ZXkgLSBjZW50ZXJ5KSA8IEdMTUFUX0VQU0lMT04gJiZcclxuICAgICAgICBNYXRoLmFicyhleWV6IC0gY2VudGVyeikgPCBHTE1BVF9FUFNJTE9OKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdDQuaWRlbnRpdHkob3V0KTtcclxuICAgIH1cclxuXHJcbiAgICB6MCA9IGV5ZXggLSBjZW50ZXJ4O1xyXG4gICAgejEgPSBleWV5IC0gY2VudGVyeTtcclxuICAgIHoyID0gZXlleiAtIGNlbnRlcno7XHJcblxyXG4gICAgbGVuID0gMSAvIE1hdGguc3FydCh6MCAqIHowICsgejEgKiB6MSArIHoyICogejIpO1xyXG4gICAgejAgKj0gbGVuO1xyXG4gICAgejEgKj0gbGVuO1xyXG4gICAgejIgKj0gbGVuO1xyXG5cclxuICAgIHgwID0gdXB5ICogejIgLSB1cHogKiB6MTtcclxuICAgIHgxID0gdXB6ICogejAgLSB1cHggKiB6MjtcclxuICAgIHgyID0gdXB4ICogejEgLSB1cHkgKiB6MDtcclxuICAgIGxlbiA9IE1hdGguc3FydCh4MCAqIHgwICsgeDEgKiB4MSArIHgyICogeDIpO1xyXG4gICAgaWYgKCFsZW4pIHtcclxuICAgICAgICB4MCA9IDA7XHJcbiAgICAgICAgeDEgPSAwO1xyXG4gICAgICAgIHgyID0gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGVuID0gMSAvIGxlbjtcclxuICAgICAgICB4MCAqPSBsZW47XHJcbiAgICAgICAgeDEgKj0gbGVuO1xyXG4gICAgICAgIHgyICo9IGxlbjtcclxuICAgIH1cclxuXHJcbiAgICB5MCA9IHoxICogeDIgLSB6MiAqIHgxO1xyXG4gICAgeTEgPSB6MiAqIHgwIC0gejAgKiB4MjtcclxuICAgIHkyID0gejAgKiB4MSAtIHoxICogeDA7XHJcblxyXG4gICAgbGVuID0gTWF0aC5zcXJ0KHkwICogeTAgKyB5MSAqIHkxICsgeTIgKiB5Mik7XHJcbiAgICBpZiAoIWxlbikge1xyXG4gICAgICAgIHkwID0gMDtcclxuICAgICAgICB5MSA9IDA7XHJcbiAgICAgICAgeTIgPSAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZW4gPSAxIC8gbGVuO1xyXG4gICAgICAgIHkwICo9IGxlbjtcclxuICAgICAgICB5MSAqPSBsZW47XHJcbiAgICAgICAgeTIgKj0gbGVuO1xyXG4gICAgfVxyXG5cclxuICAgIG91dFswXSA9IHgwO1xyXG4gICAgb3V0WzFdID0geTA7XHJcbiAgICBvdXRbMl0gPSB6MDtcclxuICAgIG91dFszXSA9IDA7XHJcbiAgICBvdXRbNF0gPSB4MTtcclxuICAgIG91dFs1XSA9IHkxO1xyXG4gICAgb3V0WzZdID0gejE7XHJcbiAgICBvdXRbN10gPSAwO1xyXG4gICAgb3V0WzhdID0geDI7XHJcbiAgICBvdXRbOV0gPSB5MjtcclxuICAgIG91dFsxMF0gPSB6MjtcclxuICAgIG91dFsxMV0gPSAwO1xyXG4gICAgb3V0WzEyXSA9IC0oeDAgKiBleWV4ICsgeDEgKiBleWV5ICsgeDIgKiBleWV6KTtcclxuICAgIG91dFsxM10gPSAtKHkwICogZXlleCArIHkxICogZXlleSArIHkyICogZXlleik7XHJcbiAgICBvdXRbMTRdID0gLSh6MCAqIGV5ZXggKyB6MSAqIGV5ZXkgKyB6MiAqIGV5ZXopO1xyXG4gICAgb3V0WzE1XSA9IDE7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXHJcbm1hdDQuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpICsgTWF0aC5wb3coYVs0XSwgMikgKyBNYXRoLnBvdyhhWzVdLCAyKSArIE1hdGgucG93KGFbNl0sIDIpICsgTWF0aC5wb3coYVs3XSwgMikgKyBNYXRoLnBvdyhhWzhdLCAyKSArIE1hdGgucG93KGFbOV0sIDIpICsgTWF0aC5wb3coYVsxMF0sIDIpICsgTWF0aC5wb3coYVsxMV0sIDIpICsgTWF0aC5wb3coYVsxMl0sIDIpICsgTWF0aC5wb3coYVsxM10sIDIpICsgTWF0aC5wb3coYVsxNF0sIDIpICsgTWF0aC5wb3coYVsxNV0sIDIpICkpXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBtYXQ0OyIsIi8vIFRPRE8gUmVzb3VyY2VzIGxpa2Ugc2hhZGVyLCB0ZXh0dXJlLCBnZW9tZXRyeSByZWZlcmVuY2UgbWFuYWdlbWVudFxyXG4vLyBUcmFjZSBhbmQgZmluZCBvdXQgd2hpY2ggc2hhZGVyLCB0ZXh0dXJlLCBnZW9tZXRyeSBjYW4gYmUgZGVzdHJveWVkXHJcbmltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IEdMSW5mbyBmcm9tICcuL2NvcmUvR0xJbmZvJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxuXHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuL01hdGVyaWFsJztcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi9tYXRoL1ZlY3RvcjInO1xyXG5pbXBvcnQgUHJvZ3JhbU1hbmFnZXIgZnJvbSAnLi9ncHUvUHJvZ3JhbU1hbmFnZXInO1xyXG5cclxuLy8gTGlnaHQgaGVhZGVyXHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi9TaGFkZXInO1xyXG5cclxuaW1wb3J0IHByZXpFc3NsIGZyb20gJy4vc2hhZGVyL3NvdXJjZS9wcmV6Lmdsc2wuanMnO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHByZXpFc3NsKTtcclxuXHJcbmltcG9ydCBtYXQ0IGZyb20gJy4vZ2xtYXRyaXgvbWF0NCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG52YXIgbWF0NENyZWF0ZSA9IG1hdDQuY3JlYXRlO1xyXG5cclxudmFyIGVycm9yU2hhZGVyID0ge307XHJcblxyXG5mdW5jdGlvbiBkZWZhdWx0R2V0TWF0ZXJpYWwocmVuZGVyYWJsZSkge1xyXG4gICAgcmV0dXJuIHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbn1cclxuZnVuY3Rpb24gZGVmYXVsdEdldFVuaWZvcm0ocmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHN5bWJvbCkge1xyXG4gICAgcmV0dXJuIG1hdGVyaWFsLnVuaWZvcm1zW3N5bWJvbF0udmFsdWU7XHJcbn1cclxuZnVuY3Rpb24gZGVmYXVsdElzTWF0ZXJpYWxDaGFuZ2VkKHJlbmRlcmFibGVkLCBwcmV2UmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHByZXZNYXRlcmlhbCkge1xyXG4gICAgcmV0dXJuIG1hdGVyaWFsICE9PSBwcmV2TWF0ZXJpYWw7XHJcbn1cclxuZnVuY3Rpb24gZGVmYXVsdElmUmVuZGVyKHJlbmRlcmFibGUpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub29wKCkge31cclxuXHJcbnZhciBhdHRyaWJ1dGVCdWZmZXJUeXBlTWFwID0ge1xyXG4gICAgZmxvYXQ6IGdsZW51bS5GTE9BVCxcclxuICAgIGJ5dGU6IGdsZW51bS5CWVRFLFxyXG4gICAgdWJ5dGU6IGdsZW51bS5VTlNJR05FRF9CWVRFLFxyXG4gICAgc2hvcnQ6IGdsZW51bS5TSE9SVCxcclxuICAgIHVzaG9ydDogZ2xlbnVtLlVOU0lHTkVEX1NIT1JUXHJcbn07XHJcblxyXG5mdW5jdGlvbiBWZXJ0ZXhBcnJheU9iamVjdChhdmFpbGFibGVBdHRyaWJ1dGVzLCBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzLCBpbmRpY2VzQnVmZmVyKSB7XHJcbiAgICB0aGlzLmF2YWlsYWJsZUF0dHJpYnV0ZXMgPSBhdmFpbGFibGVBdHRyaWJ1dGVzO1xyXG4gICAgdGhpcy5hdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzID0gYXZhaWxhYmxlQXR0cmlidXRlU3ltYm9scztcclxuICAgIHRoaXMuaW5kaWNlc0J1ZmZlciA9IGluZGljZXNCdWZmZXI7XHJcblxyXG4gICAgdGhpcy52YW8gPSBudWxsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBQbGFjZUhvbGRlclRleHR1cmUocmVuZGVyZXIpIHtcclxuICAgIHZhciBibGFua0NhbnZhcztcclxuICAgIHZhciB3ZWJnbFRleHR1cmU7XHJcbiAgICB0aGlzLmJpbmQgPSBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICBpZiAoIWJsYW5rQ2FudmFzKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gRW52aXJvbm1lbnQgbm90IHN1cHBvcnQgY3JlYXRlQ2FudmFzLlxyXG4gICAgICAgICAgICBibGFua0NhbnZhcyA9IHZlbmRvci5jcmVhdGVDYW52YXMoKTtcclxuICAgICAgICAgICAgYmxhbmtDYW52YXMud2lkdGggPSBibGFua0NhbnZhcy5oZWlnaHQgPSAxO1xyXG4gICAgICAgICAgICBibGFua0NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgdmFyIGZpcnN0QmluZCA9ICF3ZWJnbFRleHR1cmU7XHJcbiAgICAgICAgaWYgKGZpcnN0QmluZCkge1xyXG4gICAgICAgICAgICB3ZWJnbFRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHdlYmdsVGV4dHVyZSk7XHJcbiAgICAgICAgaWYgKGZpcnN0QmluZCkge1xyXG4gICAgICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJsYW5rQ2FudmFzKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy51bmJpbmQgPSBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICByZW5kZXJlci5nbC5iaW5kVGV4dHVyZShyZW5kZXJlci5nbC5URVhUVVJFXzJELCBudWxsKTtcclxuICAgIH07XHJcbiAgICB0aGlzLmlzUmVuZGVyYWJsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbn1cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlJlbmRlcmVyXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgUmVuZGVyZXIgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlJlbmRlcmVyIyAqLyB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MQ2FudmFzRWxlbWVudH1cclxuICAgICAgICAgKiBAcmVhZG9ubHlcclxuICAgICAgICAgKi9cclxuICAgICAgICBjYW52YXM6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbnZhcyB3aWR0aCwgc2V0IGJ5IHJlc2l6ZSBtZXRob2RcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX3dpZHRoOiAxMDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENhbnZhcyB3aWR0aCwgc2V0IGJ5IHJlc2l6ZSBtZXRob2RcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2hlaWdodDogMTAwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEZXZpY2UgcGl4ZWwgcmF0aW8sIHNldCBieSBzZXREZXZpY2VQaXhlbFJhdGlvIG1ldGhvZFxyXG4gICAgICAgICAqIFNwZWNpYWxseSBmb3IgaGlnaCBkZWZpbmF0aW9uIGRpc3BsYXlcclxuICAgICAgICAgKiBAc2VlIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvd2ViZ2wvd2lraS9IYW5kbGluZ0hpZ2hEUElcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBwcml2YXRlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGV2aWNlUGl4ZWxSYXRpbzogKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSB8fCAxLjAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENsZWFyIGNvbG9yXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcltdfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNsZWFyQ29sb3I6IFswLjAsIDAuMCwgMC4wLCAwLjBdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEZWZhdWx0OlxyXG4gICAgICAgICAqICAgICBfZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IF9nbC5ERVBUSF9CVUZGRVJfQklUIHwgX2dsLlNURU5DSUxfQlVGRkVSX0JJVFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xlYXJCaXQ6IDE3NjY0LFxyXG5cclxuICAgICAgICAvLyBTZXR0aW5ncyB3aGVuIGdldHRpbmcgY29udGV4dFxyXG4gICAgICAgIC8vIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc3BlY3MvbGF0ZXN0LyMyLjRcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIGFscGhhLCBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhbHBoYTogdHJ1ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgZGVwdGggYnVmZmVyLCBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkZXB0aDogdHJ1ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgc3RlbmNpbCBidWZmZXIsIGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzdGVuY2lsOiBmYWxzZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgYW50aWFsaWFzLCBkZWZhdWx0IHRydWVcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhbnRpYWxpYXM6IHRydWUsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIHByZW11bHRpcGxpZWQgYWxwaGEsIGRlZmF1bHQgdHJ1ZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHByZW11bHRpcGxpZWRBbHBoYTogdHJ1ZSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBwcmVzZXJ2ZSBkcmF3aW5nIGJ1ZmZlciwgZGVmYXVsdCBmYWxzZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogZmFsc2UsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgdGhyb3cgY29udGV4dCBlcnJvciwgdXN1YWxseSB0dXJuZWQgb24gaW4gZGVidWcgbW9kZVxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRocm93RXJyb3I6IHRydWUsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogV2ViR0wgQ29udGV4dCBjcmVhdGVkIGZyb20gZ2l2ZW4gY2FudmFzXHJcbiAgICAgICAgICogQHR5cGUge1dlYkdMUmVuZGVyaW5nQ29udGV4dH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBnbDogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBSZW5kZXJlciB2aWV3cG9ydCwgcmVhZC1vbmx5LCBjYW4gYmUgc2V0IGJ5IHNldFZpZXdwb3J0IG1ldGhvZFxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdmlld3BvcnQ6IHt9LFxyXG5cclxuICAgICAgICAvLyBTZXQgYnkgRnJhbWVCdWZmZXIjYmluZFxyXG4gICAgICAgIF9fY3VycmVudEZyYW1lQnVmZmVyOiBudWxsLFxyXG5cclxuICAgICAgICBfdmlld3BvcnRTdGFjazogW10sXHJcbiAgICAgICAgX2NsZWFyU3RhY2s6IFtdLFxyXG5cclxuICAgICAgICBfc2NlbmVSZW5kZXJpbmc6IG51bGxcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICBpZiAoIXRoaXMuY2FudmFzKSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMgPSB2ZW5kb3IuY3JlYXRlQ2FudmFzKCk7XHJcbiAgICB9XHJcbiAgICB2YXIgY2FudmFzID0gdGhpcy5jYW52YXM7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHZhciBvcHRzID0ge1xyXG4gICAgICAgICAgICBhbHBoYTogdGhpcy5hbHBoYSxcclxuICAgICAgICAgICAgZGVwdGg6IHRoaXMuZGVwdGgsXHJcbiAgICAgICAgICAgIHN0ZW5jaWw6IHRoaXMuc3RlbmNpbCxcclxuICAgICAgICAgICAgYW50aWFsaWFzOiB0aGlzLmFudGlhbGlhcyxcclxuICAgICAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiB0aGlzLnByZW11bHRpcGxpZWRBbHBoYSxcclxuICAgICAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0aGlzLnByZXNlcnZlRHJhd2luZ0J1ZmZlclxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBvcHRzKVxyXG4gICAgICAgICAgICB8fCBjYW52YXMuZ2V0Q29udGV4dCgnZXhwZXJpbWVudGFsLXdlYmdsJywgb3B0cyk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5nbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2dsaW5mbyA9IG5ldyBHTEluZm8odGhpcy5nbCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdsLnRhcmdldFJlbmRlcmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FscmVhZHkgY3JlYXRlZCBhIHJlbmRlcmVyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2wudGFyZ2V0UmVuZGVyZXIgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICB0aHJvdyAnRXJyb3IgY3JlYXRpbmcgV2ViR0wgQ29udGV4dCAnICsgZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJbml0IG1hbmFnZXJzXHJcbiAgICB0aGlzLl9wcm9ncmFtTWdyID0gbmV3IFByb2dyYW1NYW5hZ2VyKHRoaXMpO1xyXG5cclxuICAgIHRoaXMuX3BsYWNlaG9sZGVyVGV4dHVyZSA9IG5ldyBQbGFjZUhvbGRlclRleHR1cmUodGhpcyk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5SZW5kZXJlci5wcm90b3R5cGUuICoqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIFJlc2l6ZSB0aGUgY2FudmFzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcclxuICAgICAqL1xyXG4gICAgcmVzaXplOiBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICAgICAgdmFyIGNhbnZhcyA9IHRoaXMuY2FudmFzO1xyXG4gICAgICAgIC8vIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvd2ViZ2wvd2lraS9IYW5kbGluZ0hpZ2hEUElcclxuICAgICAgICAvLyBzZXQgdGhlIGRpc3BsYXkgc2l6ZSBvZiB0aGUgY2FudmFzLlxyXG4gICAgICAgIHZhciBkcHIgPSB0aGlzLmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgaWYgKHdpZHRoICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGNhbnZhcy5zdHlsZSkge1xyXG4gICAgICAgICAgICAgICAgY2FudmFzLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2V0IHRoZSBzaXplIG9mIHRoZSBkcmF3aW5nQnVmZmVyXHJcbiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoICogZHByO1xyXG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0ICogZHByO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB3aWR0aDtcclxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSBjYW52YXMud2lkdGggLyBkcHI7XHJcbiAgICAgICAgICAgIHRoaXMuX2hlaWdodCA9IGNhbnZhcy5oZWlnaHQgLyBkcHI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFZpZXdwb3J0KDAsIDAsIHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCByZW5kZXJlciB3aWR0aFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXRXaWR0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcmVuZGVyZXIgaGVpZ2h0XHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldEhlaWdodDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHZpZXdwb3J0IGFzcGVjdCxcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0Vmlld3BvcnRBc3BlY3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xyXG4gICAgICAgIHJldHVybiB2aWV3cG9ydC53aWR0aCAvIHZpZXdwb3J0LmhlaWdodDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgZGV2aWNlUGl4ZWxSYXRpb1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRldmljZVBpeGVsUmF0aW9cclxuICAgICAqL1xyXG4gICAgc2V0RGV2aWNlUGl4ZWxSYXRpbzogZnVuY3Rpb24oZGV2aWNlUGl4ZWxSYXRpbykge1xyXG4gICAgICAgIHRoaXMuZGV2aWNlUGl4ZWxSYXRpbyA9IGRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgdGhpcy5yZXNpemUodGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGRldmljZVBpeGVsUmF0aW9cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZXZpY2VQaXhlbFJhdGlvXHJcbiAgICAgKi9cclxuICAgIGdldERldmljZVBpeGVsUmF0aW86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZXZpY2VQaXhlbFJhdGlvO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBXZWJHTCBleHRlbnNpb25cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9XHJcbiAgICAgKi9cclxuICAgIGdldEdMRXh0ZW5zaW9uOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nbGluZm8uZ2V0RXh0ZW5zaW9uKG5hbWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBXZWJHTCBwYXJhbWV0ZXJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHsqfVxyXG4gICAgICovXHJcbiAgICBnZXRHTFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2xpbmZvLmdldFBhcmFtZXRlcihuYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcmVuZGVyaW5nIHZpZXdwb3J0XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcnxPYmplY3R9IHhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbeV1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhdXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGV2aWNlUGl4ZWxSYXRpb11cclxuICAgICAqICAgICAgICBEZWZhdWx0bHkgdXNlIHRoZSByZW5kZXJlcmUgZGV2aWNlUGl4ZWxSYXRpb1xyXG4gICAgICogICAgICAgIEl0IG5lZWRzIHRvIGJlIDEgd2hlbiBzZXRWaWV3cG9ydCBpcyBjYWxsZWQgYnkgZnJhbWVCdWZmZXJcclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogIHNldFZpZXdwb3J0KDAsMCx3aWR0aCxoZWlnaHQsMSlcclxuICAgICAqICBzZXRWaWV3cG9ydCh7XHJcbiAgICAgKiAgICAgIHg6IDAsXHJcbiAgICAgKiAgICAgIHk6IDAsXHJcbiAgICAgKiAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAqICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgKiAgICAgIGRldmljZVBpeGVsUmF0aW86IDFcclxuICAgICAqICB9KVxyXG4gICAgICovXHJcbiAgICBzZXRWaWV3cG9ydDogZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQsIGRwcikge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHggPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHZhciBvYmogPSB4O1xyXG5cclxuICAgICAgICAgICAgeCA9IG9iai54O1xyXG4gICAgICAgICAgICB5ID0gb2JqLnk7XHJcbiAgICAgICAgICAgIHdpZHRoID0gb2JqLndpZHRoO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBvYmouaGVpZ2h0O1xyXG4gICAgICAgICAgICBkcHIgPSBvYmouZGV2aWNlUGl4ZWxSYXRpbztcclxuICAgICAgICB9XHJcbiAgICAgICAgZHByID0gZHByIHx8IHRoaXMuZGV2aWNlUGl4ZWxSYXRpbztcclxuXHJcbiAgICAgICAgdGhpcy5nbC52aWV3cG9ydChcclxuICAgICAgICAgICAgeCAqIGRwciwgeSAqIGRwciwgd2lkdGggKiBkcHIsIGhlaWdodCAqIGRwclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gVXNlIGEgZnJlc2ggbmV3IG9iamVjdCwgbm90IHdyaXRlIHByb3BlcnR5LlxyXG4gICAgICAgIHRoaXMudmlld3BvcnQgPSB7XHJcbiAgICAgICAgICAgIHg6IHgsXHJcbiAgICAgICAgICAgIHk6IHksXHJcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgICAgIGRldmljZVBpeGVsUmF0aW86IGRwclxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHVzaCBjdXJyZW50IHZpZXdwb3J0IGludG8gYSBzdGFja1xyXG4gICAgICovXHJcbiAgICBzYXZlVmlld3BvcnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl92aWV3cG9ydFN0YWNrLnB1c2godGhpcy52aWV3cG9ydCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUG9wIHZpZXdwb3J0IGZyb20gc3RhY2ssIHJlc3RvcmUgaW4gdGhlIHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIHJlc3RvcmVWaWV3cG9ydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl92aWV3cG9ydFN0YWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRWaWV3cG9ydCh0aGlzLl92aWV3cG9ydFN0YWNrLnBvcCgpKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHVzaCBjdXJyZW50IGNsZWFyIGludG8gYSBzdGFja1xyXG4gICAgICovXHJcbiAgICBzYXZlQ2xlYXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9jbGVhclN0YWNrLnB1c2goe1xyXG4gICAgICAgICAgICBjbGVhckJpdDogdGhpcy5jbGVhckJpdCxcclxuICAgICAgICAgICAgY2xlYXJDb2xvcjogdGhpcy5jbGVhckNvbG9yXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUG9wIGNsZWFyIGZyb20gc3RhY2ssIHJlc3RvcmUgaW4gdGhlIHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIHJlc3RvcmVDbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jbGVhclN0YWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIG9wdCA9IHRoaXMuX2NsZWFyU3RhY2sucG9wKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJDb2xvciA9IG9wdC5jbGVhckNvbG9yO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyQml0ID0gb3B0LmNsZWFyQml0O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYmluZFNjZW5lUmVuZGVyaW5nOiBmdW5jdGlvbiAoc2NlbmUpIHtcclxuICAgICAgICB0aGlzLl9zY2VuZVJlbmRlcmluZyA9IHNjZW5lO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbmRlciB0aGUgc2NlbmUgaW4gY2FtZXJhIHRvIHRoZSBzY3JlZW4gb3IgYmluZGVkIG9mZmxpbmUgZnJhbWVidWZmZXJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuU2NlbmV9ICAgICAgIHNjZW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkNhbWVyYX0gICAgICBjYW1lcmFcclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICBbbm90VXBkYXRlU2NlbmVdIElmIG5vdCBjYWxsIHRoZSBzY2VuZS51cGRhdGUgbWV0aG9kcyBpbiB0aGUgcmVuZGVyaW5nLCBkZWZhdWx0IHRydWVcclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59ICAgICBbcHJlWl0gICAgICAgICAgIElmIHVzZSBwcmVaIG9wdGltaXphdGlvbiwgZGVmYXVsdCBmYWxzZVxyXG4gICAgICogQHJldHVybiB7SVJlbmRlckluZm99XHJcbiAgICAgKi9cclxuICAgIHJlbmRlcjogZnVuY3Rpb24oc2NlbmUsIGNhbWVyYSwgbm90VXBkYXRlU2NlbmUsIHByZVopIHtcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuXHJcbiAgICAgICAgdmFyIGNsZWFyQ29sb3IgPSB0aGlzLmNsZWFyQ29sb3I7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNsZWFyQml0KSB7XHJcblxyXG4gICAgICAgICAgICAvLyBNdXN0IHNldCBkZXB0aCBhbmQgY29sb3IgbWFzayB0cnVlIGJlZm9yZSBjbGVhclxyXG4gICAgICAgICAgICBfZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xyXG4gICAgICAgICAgICB2YXIgbmVlZHNTY2lzc29yID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciB2aWV3cG9ydERwciA9IHZpZXdwb3J0LmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgICAgIGlmICh2aWV3cG9ydC53aWR0aCAhPT0gdGhpcy5fd2lkdGggfHwgdmlld3BvcnQuaGVpZ2h0ICE9PSB0aGlzLl9oZWlnaHRcclxuICAgICAgICAgICAgICAgIHx8ICh2aWV3cG9ydERwciAmJiB2aWV3cG9ydERwciAhPT0gdGhpcy5kZXZpY2VQaXhlbFJhdGlvKVxyXG4gICAgICAgICAgICAgICAgfHwgdmlld3BvcnQueCB8fCB2aWV3cG9ydC55XHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgbmVlZHNTY2lzc29yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE1NDQ2MDgvaG93LXRvLWNsZWFyLWEtcmVjdGFuZ2xlLWFyZWEtaW4td2ViZ2xcclxuICAgICAgICAgICAgICAgIC8vIE9ubHkgY2xlYXIgdGhlIHZpZXdwb3J0XHJcbiAgICAgICAgICAgICAgICBfZ2wuZW5hYmxlKF9nbC5TQ0lTU09SX1RFU1QpO1xyXG4gICAgICAgICAgICAgICAgX2dsLnNjaXNzb3Iodmlld3BvcnQueCAqIHZpZXdwb3J0RHByLCB2aWV3cG9ydC55ICogdmlld3BvcnREcHIsIHZpZXdwb3J0LndpZHRoICogdmlld3BvcnREcHIsIHZpZXdwb3J0LmhlaWdodCAqIHZpZXdwb3J0RHByKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBfZ2wuY2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTtcclxuICAgICAgICAgICAgX2dsLmNsZWFyKHRoaXMuY2xlYXJCaXQpO1xyXG4gICAgICAgICAgICBpZiAobmVlZHNTY2lzc29yKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZGlzYWJsZShfZ2wuU0NJU1NPUl9URVNUKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIHNjZW5lIGhhdmUgYmVlbiB1cGRhdGVkIGluIHRoZSBwcmVwYXNzIGxpa2Ugc2hhZG93IG1hcFxyXG4gICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gdXBkYXRlIGl0IGFnYWluXHJcbiAgICAgICAgaWYgKCFub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgICAgICBzY2VuZS51cGRhdGUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY2VuZS51cGRhdGVMaWdodHMoKTtcclxuXHJcbiAgICAgICAgY2FtZXJhID0gY2FtZXJhIHx8IHNjZW5lLmdldE1haW5DYW1lcmEoKTtcclxuICAgICAgICBpZiAoIWNhbWVyYSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5cXCd0IGZpbmQgY2FtZXJhIGluIHRoZSBzY2VuZS4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYW1lcmEudXBkYXRlKCk7XHJcbiAgICAgICAgdmFyIHJlbmRlckxpc3QgPSBzY2VuZS51cGRhdGVSZW5kZXJMaXN0KGNhbWVyYSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3NjZW5lUmVuZGVyaW5nID0gc2NlbmU7XHJcblxyXG4gICAgICAgIHZhciBvcGFxdWVMaXN0ID0gcmVuZGVyTGlzdC5vcGFxdWU7XHJcbiAgICAgICAgdmFyIHRyYW5zcGFyZW50TGlzdCA9IHJlbmRlckxpc3QudHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgdmFyIHNjZW5lTWF0ZXJpYWwgPSBzY2VuZS5tYXRlcmlhbDtcclxuXHJcbiAgICAgICAgc2NlbmUudHJpZ2dlcignYmVmb3JlcmVuZGVyJywgdGhpcywgc2NlbmUsIGNhbWVyYSwgcmVuZGVyTGlzdCk7XHJcblxyXG4gICAgICAgIC8vIFJlbmRlciBwcmUgelxyXG4gICAgICAgIGlmIChwcmVaKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyUHJlWihvcGFxdWVMaXN0LCBzY2VuZSwgY2FtZXJhKTtcclxuICAgICAgICAgICAgX2dsLmRlcHRoRnVuYyhfZ2wuTEVRVUFMKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIF9nbC5kZXB0aEZ1bmMoX2dsLkxFU1MpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBkZXB0aCBvZiB0cmFuc3BhcmVudCBsaXN0LlxyXG4gICAgICAgIHZhciB3b3JsZFZpZXdNYXQgPSBtYXQ0Q3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHBvc1ZpZXdTcGFjZSA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFuc3BhcmVudExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHJlbmRlcmFibGUgPSB0cmFuc3BhcmVudExpc3RbaV07XHJcbiAgICAgICAgICAgIG1hdDQubXVsdGlwbHlBZmZpbmUod29ybGRWaWV3TWF0LCBjYW1lcmEudmlld01hdHJpeC5hcnJheSwgcmVuZGVyYWJsZS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzMudHJhbnNmb3JtTWF0NChwb3NWaWV3U3BhY2UsIHJlbmRlcmFibGUucG9zaXRpb24uYXJyYXksIHdvcmxkVmlld01hdCk7XHJcbiAgICAgICAgICAgIHJlbmRlcmFibGUuX19kZXB0aCA9IHBvc1ZpZXdTcGFjZVsyXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbmRlciBvcGFxdWUgbGlzdFxyXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyhvcGFxdWVMaXN0LCBjYW1lcmEsIHtcclxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NlbmVNYXRlcmlhbCB8fCByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzb3J0Q29tcGFyZTogdGhpcy5vcGFxdWVTb3J0Q29tcGFyZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnJlbmRlclBhc3ModHJhbnNwYXJlbnRMaXN0LCBjYW1lcmEsIHtcclxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NlbmVNYXRlcmlhbCB8fCByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzb3J0Q29tcGFyZTogdGhpcy50cmFuc3BhcmVudFNvcnRDb21wYXJlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNjZW5lLnRyaWdnZXIoJ2FmdGVycmVuZGVyJywgdGhpcywgc2NlbmUsIGNhbWVyYSwgcmVuZGVyTGlzdCk7XHJcblxyXG4gICAgICAgIC8vIENsZWFudXBcclxuICAgICAgICB0aGlzLl9zY2VuZVJlbmRlcmluZyA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFByb2dyYW06IGZ1bmN0aW9uIChyZW5kZXJhYmxlLCByZW5kZXJNYXRlcmlhbCwgc2NlbmUpIHtcclxuICAgICAgICByZW5kZXJNYXRlcmlhbCA9IHJlbmRlck1hdGVyaWFsIHx8IHJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2dyYW1NZ3IuZ2V0UHJvZ3JhbShyZW5kZXJhYmxlLCByZW5kZXJNYXRlcmlhbCwgc2NlbmUpO1xyXG4gICAgfSxcclxuXHJcbiAgICB2YWxpZGF0ZVByb2dyYW06IGZ1bmN0aW9uIChwcm9ncmFtKSB7XHJcbiAgICAgICAgaWYgKHByb2dyYW0uX19lcnJvcikge1xyXG4gICAgICAgICAgICB2YXIgZXJyb3JNc2cgPSBwcm9ncmFtLl9fZXJyb3I7XHJcbiAgICAgICAgICAgIGlmIChlcnJvclNoYWRlcltwcm9ncmFtLl9fdWlkX19dKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZXJyb3JTaGFkZXJbcHJvZ3JhbS5fX3VpZF9fXSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy50aHJvd0Vycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2cpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsIGVycm9yTXNnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVQcm9ncmFtczogZnVuY3Rpb24gKGxpc3QsIHNjZW5lLCBwYXNzQ29uZmlnKSB7XHJcbiAgICAgICAgdmFyIGdldE1hdGVyaWFsID0gKHBhc3NDb25maWcgJiYgcGFzc0NvbmZpZy5nZXRNYXRlcmlhbCkgfHwgZGVmYXVsdEdldE1hdGVyaWFsO1xyXG4gICAgICAgIHNjZW5lID0gc2NlbmUgfHwgbnVsbDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHJlbmRlcmFibGUgPSBsaXN0W2ldO1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyTWF0ZXJpYWwgPSBnZXRNYXRlcmlhbC5jYWxsKHRoaXMsIHJlbmRlcmFibGUpO1xyXG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcmV2UmVuZGVyYWJsZSA9IGxpc3RbaSAtIDFdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHByZXZKb2ludHNMZW4gPSBwcmV2UmVuZGVyYWJsZS5qb2ludHMgPyBwcmV2UmVuZGVyYWJsZS5qb2ludHMubGVuZ3RoIDogMDtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludHNMZW4gPSByZW5kZXJhYmxlLmpvaW50cyA/IHJlbmRlcmFibGUuam9pbnRzLmxlbmd0aCA6IDA7XHJcbiAgICAgICAgICAgICAgICAvLyBLZWVwIHByb2dyYW0gbm90IGNoYW5nZSBpZiBqb2ludHMsIG1hdGVyaWFsLCBsaWdodEdyb3VwIGFyZSBzYW1lIG9mIHR3byByZW5kZXJhYmxlcy5cclxuICAgICAgICAgICAgICAgIGlmIChqb2ludHNMZW4gPT09IHByZXZKb2ludHNMZW5cclxuICAgICAgICAgICAgICAgICAgICAmJiByZW5kZXJhYmxlLm1hdGVyaWFsID09PSBwcmV2UmVuZGVyYWJsZS5tYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgICAgICYmIHJlbmRlcmFibGUubGlnaHRHcm91cCA9PT0gcHJldlJlbmRlcmFibGUubGlnaHRHcm91cFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyYWJsZS5fX3Byb2dyYW0gPSBwcmV2UmVuZGVyYWJsZS5fX3Byb2dyYW07XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBwcm9ncmFtID0gdGhpcy5fcHJvZ3JhbU1nci5nZXRQcm9ncmFtKHJlbmRlcmFibGUsIHJlbmRlck1hdGVyaWFsLCBzY2VuZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTtcclxuXHJcbiAgICAgICAgICAgIHJlbmRlcmFibGUuX19wcm9ncmFtID0gcHJvZ3JhbTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIGEgc2luZ2xlIHJlbmRlcmFibGUgbGlzdCBpbiBjYW1lcmEgaW4gc2VxdWVuY2VcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJhYmxlW119IGxpc3QgTGlzdCBvZiBhbGwgcmVuZGVyYWJsZXMuXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBbY2FtZXJhXSBDYW1lcmEgcHJvdmlkZSB2aWV3IG1hdHJpeCBhbmQgcG9yamVjdGlvbiBtYXRyaXguIEl0IGNhbiBiZSBudWxsLlxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtwYXNzQ29uZmlnXVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuZ2V0TWF0ZXJpYWxdIEdldCByZW5kZXJhYmxlIG1hdGVyaWFsLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuZ2V0VW5pZm9ybV0gR2V0IG1hdGVyaWFsIHVuaWZvcm0gdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5pc01hdGVyaWFsQ2hhbmdlZF0gSWYgbWF0ZXJpYWwgY2hhbmdlZC5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXNzQ29uZmlnLmJlZm9yZVJlbmRlcl0gQmVmb3JlIHJlbmRlciBlYWNoIHJlbmRlcmFibGUuXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFzc0NvbmZpZy5hZnRlclJlbmRlcl0gQWZ0ZXIgcmVuZGVyIGVhY2ggcmVuZGVyYWJsZVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Bhc3NDb25maWcuaWZSZW5kZXJdIElmIHJlbmRlciB0aGUgcmVuZGVyYWJsZS5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwYXNzQ29uZmlnLnNvcnRDb21wYXJlXSBTb3J0IGNvbXBhcmUgZnVuY3Rpb24uXHJcbiAgICAgKiBAcmV0dXJuIHtJUmVuZGVySW5mb31cclxuICAgICAqL1xyXG4gICAgcmVuZGVyUGFzczogZnVuY3Rpb24obGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKSB7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXJwYXNzJywgdGhpcywgbGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuXHJcbiAgICAgICAgcGFzc0NvbmZpZyA9IHBhc3NDb25maWcgfHwge307XHJcbiAgICAgICAgcGFzc0NvbmZpZy5nZXRNYXRlcmlhbCA9IHBhc3NDb25maWcuZ2V0TWF0ZXJpYWwgfHwgZGVmYXVsdEdldE1hdGVyaWFsO1xyXG4gICAgICAgIHBhc3NDb25maWcuZ2V0VW5pZm9ybSA9IHBhc3NDb25maWcuZ2V0VW5pZm9ybSB8fCBkZWZhdWx0R2V0VW5pZm9ybTtcclxuICAgICAgICAvLyBQRU5ESU5HIEJldHRlciBzb2x1dGlvbj9cclxuICAgICAgICBwYXNzQ29uZmlnLmlzTWF0ZXJpYWxDaGFuZ2VkID0gcGFzc0NvbmZpZy5pc01hdGVyaWFsQ2hhbmdlZCB8fCBkZWZhdWx0SXNNYXRlcmlhbENoYW5nZWQ7XHJcbiAgICAgICAgcGFzc0NvbmZpZy5iZWZvcmVSZW5kZXIgPSBwYXNzQ29uZmlnLmJlZm9yZVJlbmRlciB8fCBub29wO1xyXG4gICAgICAgIHBhc3NDb25maWcuYWZ0ZXJSZW5kZXIgPSBwYXNzQ29uZmlnLmFmdGVyUmVuZGVyIHx8IG5vb3A7XHJcblxyXG4gICAgICAgIHZhciBpZlJlbmRlck9iamVjdCA9IHBhc3NDb25maWcuaWZSZW5kZXIgfHwgZGVmYXVsdElmUmVuZGVyO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVByb2dyYW1zKGxpc3QsIHRoaXMuX3NjZW5lUmVuZGVyaW5nLCBwYXNzQ29uZmlnKTtcclxuICAgICAgICBpZiAocGFzc0NvbmZpZy5zb3J0Q29tcGFyZSkge1xyXG4gICAgICAgICAgICBsaXN0LnNvcnQocGFzc0NvbmZpZy5zb3J0Q29tcGFyZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTb21lIGNvbW1vbiBidWlsdGluIHVuaWZvcm1zXHJcbiAgICAgICAgdmFyIHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydDtcclxuICAgICAgICB2YXIgdkRwciA9IHZpZXdwb3J0LmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgdmFyIHZpZXdwb3J0VW5pZm9ybSA9IFtcclxuICAgICAgICAgICAgdmlld3BvcnQueCAqIHZEcHIsIHZpZXdwb3J0LnkgKiB2RHByLFxyXG4gICAgICAgICAgICB2aWV3cG9ydC53aWR0aCAqIHZEcHIsIHZpZXdwb3J0LmhlaWdodCAqIHZEcHJcclxuICAgICAgICBdO1xyXG4gICAgICAgIHZhciB3aW5kb3dEcHIgPSB0aGlzLmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgdmFyIHdpbmRvd1NpemVVbmlmb3JtID0gdGhpcy5fX2N1cnJlbnRGcmFtZUJ1ZmZlclxyXG4gICAgICAgICAgICA/IFt0aGlzLl9fY3VycmVudEZyYW1lQnVmZmVyLmdldFRleHR1cmVXaWR0aCgpLCB0aGlzLl9fY3VycmVudEZyYW1lQnVmZmVyLmdldFRleHR1cmVIZWlnaHQoKV1cclxuICAgICAgICAgICAgOiBbdGhpcy5fd2lkdGggKiB3aW5kb3dEcHIsIHRoaXMuX2hlaWdodCAqIHdpbmRvd0Rwcl07XHJcbiAgICAgICAgLy8gREVQUkVDQVRFRFxyXG4gICAgICAgIHZhciB2aWV3cG9ydFNpemVVbmlmb3JtID0gW1xyXG4gICAgICAgICAgICB2aWV3cG9ydFVuaWZvcm1bMl0sIHZpZXdwb3J0VW5pZm9ybVszXVxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdmFyIHRpbWUgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgdmlldyBhbmQgcHJvamVjdGlvbiBtYXRyaXhcclxuICAgICAgICBpZiAoY2FtZXJhKSB7XHJcbiAgICAgICAgICAgIG1hdDQuY29weShtYXRyaWNlcy5WSUVXLCBjYW1lcmEudmlld01hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgICAgIG1hdDQuY29weShtYXRyaWNlcy5QUk9KRUNUSU9OLCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgICAgIG1hdDQuY29weShtYXRyaWNlcy5WSUVXSU5WRVJTRSwgY2FtZXJhLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdDQuaWRlbnRpdHkobWF0cmljZXMuVklFVyk7XHJcbiAgICAgICAgICAgIG1hdDQuaWRlbnRpdHkobWF0cmljZXMuUFJPSkVDVElPTik7XHJcbiAgICAgICAgICAgIG1hdDQuaWRlbnRpdHkobWF0cmljZXMuVklFV0lOVkVSU0UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtYXQ0Lm11bHRpcGx5KG1hdHJpY2VzLlZJRVdQUk9KRUNUSU9OLCBtYXRyaWNlcy5QUk9KRUNUSU9OLCBtYXRyaWNlcy5WSUVXKTtcclxuICAgICAgICBtYXQ0LmludmVydChtYXRyaWNlcy5QUk9KRUNUSU9OSU5WRVJTRSwgbWF0cmljZXMuUFJPSkVDVElPTik7XHJcbiAgICAgICAgbWF0NC5pbnZlcnQobWF0cmljZXMuVklFV1BST0pFQ1RJT05JTlZFUlNFLCBtYXRyaWNlcy5WSUVXUFJPSkVDVElPTik7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSB0aGlzLmdsO1xyXG4gICAgICAgIHZhciBzY2VuZSA9IHRoaXMuX3NjZW5lUmVuZGVyaW5nO1xyXG5cclxuICAgICAgICB2YXIgcHJldk1hdGVyaWFsO1xyXG4gICAgICAgIHZhciBwcmV2UHJvZ3JhbTtcclxuICAgICAgICB2YXIgcHJldlJlbmRlcmFibGU7XHJcblxyXG4gICAgICAgIC8vIFN0YXR1c1xyXG4gICAgICAgIHZhciBkZXB0aFRlc3QsIGRlcHRoTWFzaztcclxuICAgICAgICB2YXIgY3VsbGluZywgY3VsbEZhY2UsIGZyb250RmFjZTtcclxuICAgICAgICB2YXIgdHJhbnNwYXJlbnQ7XHJcbiAgICAgICAgdmFyIGRyYXdJRDtcclxuICAgICAgICB2YXIgY3VycmVudFZBTztcclxuICAgICAgICB2YXIgbWF0ZXJpYWxUYWtlc1RleHR1cmVTbG90O1xyXG5cclxuICAgICAgICAvLyB2YXIgdmFvRXh0ID0gdGhpcy5nZXRHTEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKTtcclxuICAgICAgICAvLyBub3QgdXNlIHZhb0V4dCwgc29tZSBwbGF0Zm9ybXMgbWF5IG1lc3MgaXQgdXAuXHJcbiAgICAgICAgdmFyIHZhb0V4dCA9IG51bGw7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyYWJsZSA9IGxpc3RbaV07XHJcbiAgICAgICAgICAgIHZhciBpc1NjZW5lTm9kZSA9IHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0gIT0gbnVsbDtcclxuICAgICAgICAgICAgdmFyIHdvcmxkTTtcclxuXHJcbiAgICAgICAgICAgIGlmICghaWZSZW5kZXJPYmplY3QocmVuZGVyYWJsZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBTa2lubmVkIG1lc2ggd2lsbCB0cmFuc2Zvcm1lZCB0byBqb2ludCBzcGFjZS4gSWdub3JlIHRoZSBtZXNoIHRyYW5zZm9ybVxyXG4gICAgICAgICAgICBpZiAoaXNTY2VuZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHdvcmxkTSA9IChyZW5kZXJhYmxlLmlzU2tpbm5lZE1lc2ggJiYgcmVuZGVyYWJsZS5pc1NraW5uZWRNZXNoKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgPyBtYXRyaWNlcy5JREVOVElUWSA6IHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0uYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGdlb21ldHJ5ID0gcmVuZGVyYWJsZS5nZW9tZXRyeTtcclxuICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gcGFzc0NvbmZpZy5nZXRNYXRlcmlhbC5jYWxsKHRoaXMsIHJlbmRlcmFibGUpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHByb2dyYW0gPSByZW5kZXJhYmxlLl9fcHJvZ3JhbTtcclxuICAgICAgICAgICAgdmFyIHNoYWRlciA9IG1hdGVyaWFsLnNoYWRlcjtcclxuXHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50RHJhd0lEID0gZ2VvbWV0cnkuX191aWRfXyArICctJyArIHByb2dyYW0uX191aWRfXztcclxuICAgICAgICAgICAgdmFyIGRyYXdJRENoYW5nZWQgPSBjdXJyZW50RHJhd0lEICE9PSBkcmF3SUQ7XHJcbiAgICAgICAgICAgIGRyYXdJRCA9IGN1cnJlbnREcmF3SUQ7XHJcbiAgICAgICAgICAgIGlmIChkcmF3SURDaGFuZ2VkICYmIHZhb0V4dCkge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBTZWVtcyBuZWVkIHRvIGJlIGJvdW5kIHRvIG51bGwgaW1tZWRpYXRlbHkgKG9yIGJlZm9yZSBiaW5kIGFub3RoZXIgcHJvZ3JhbT8pIGlmIHZhbyBpcyBjaGFuZ2VkXHJcbiAgICAgICAgICAgICAgICB2YW9FeHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc1NjZW5lTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgbWF0NC5jb3B5KG1hdHJpY2VzLldPUkxELCB3b3JsZE0pO1xyXG4gICAgICAgICAgICAgICAgbWF0NC5tdWx0aXBseShtYXRyaWNlcy5XT1JMRFZJRVdQUk9KRUNUSU9OLCBtYXRyaWNlcy5WSUVXUFJPSkVDVElPTiwgd29ybGRNKTtcclxuICAgICAgICAgICAgICAgIG1hdDQubXVsdGlwbHlBZmZpbmUobWF0cmljZXMuV09STERWSUVXLCBtYXRyaWNlcy5WSUVXLCB3b3JsZE0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNoYWRlci5tYXRyaXhTZW1hbnRpY3MuV09STERJTlZFUlNFIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRElOVkVSU0VUUkFOU1BPU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXQ0LmludmVydChtYXRyaWNlcy5XT1JMRElOVkVSU0UsIHdvcmxkTSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRFZJRVdJTlZFUlNFIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRFZJRVdJTlZFUlNFVFJBTlNQT1NFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0NC5pbnZlcnQobWF0cmljZXMuV09STERWSUVXSU5WRVJTRSwgbWF0cmljZXMuV09STERWSUVXKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzaGFkZXIubWF0cml4U2VtYW50aWNzLldPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZGVyLm1hdHJpeFNlbWFudGljcy5XT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdDQuaW52ZXJ0KG1hdHJpY2VzLldPUkxEVklFV1BST0pFQ1RJT05JTlZFUlNFLCBtYXRyaWNlcy5XT1JMRFZJRVdQUk9KRUNUSU9OKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gQmVmb3JlIHJlbmRlciBob29rXHJcbiAgICAgICAgICAgIHJlbmRlcmFibGUuYmVmb3JlUmVuZGVyICYmIHJlbmRlcmFibGUuYmVmb3JlUmVuZGVyKHRoaXMpO1xyXG4gICAgICAgICAgICBwYXNzQ29uZmlnLmJlZm9yZVJlbmRlci5jYWxsKHRoaXMsIHJlbmRlcmFibGUsIG1hdGVyaWFsLCBwcmV2TWF0ZXJpYWwpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHByb2dyYW1DaGFuZ2VkID0gcHJvZ3JhbSAhPT0gcHJldlByb2dyYW07XHJcbiAgICAgICAgICAgIGlmIChwcm9ncmFtQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gU2V0IGxpZ2h0cyBudW1iZXJcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vIFNldCBzb21lIGNvbW1vbiB1bmlmb3Jtc1xyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdWSUVXUE9SVCcsIHZpZXdwb3J0VW5pZm9ybSk7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKF9nbCwgJ1dJTkRPV19TSVpFJywgd2luZG93U2l6ZVVuaWZvcm0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbWVyYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnTkVBUicsIGNhbWVyYS5uZWFyKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKF9nbCwgJ0ZBUicsIGNhbWVyYS5mYXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtT2ZTZW1hbnRpYyhfZ2wsICdERVZJQ0VQSVhFTFJBVElPJywgdkRwcik7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm1PZlNlbWFudGljKF9nbCwgJ1RJTUUnLCB0aW1lKTtcclxuICAgICAgICAgICAgICAgIC8vIERFUFJFQ0FURURcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnVklFV1BPUlRfU0laRScsIHZpZXdwb3J0U2l6ZVVuaWZvcm0pO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNldCBsaWdodHMgdW5pZm9ybXNcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gbmVlZHMgb3B0aW1pemVkXHJcbiAgICAgICAgICAgICAgICBpZiAoc2NlbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZS5zZXRMaWdodFVuaWZvcm1zKHByb2dyYW0sIHJlbmRlcmFibGUubGlnaHRHcm91cCwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtID0gcHJldlByb2dyYW07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFByb2dyYW0gY2hhbmdlcyBhbHNvIG5lZWRzIHJlc2V0IHRoZSBtYXRlcmlhbHMuXHJcbiAgICAgICAgICAgIGlmIChwcm9ncmFtQ2hhbmdlZCB8fCBwYXNzQ29uZmlnLmlzTWF0ZXJpYWxDaGFuZ2VkKFxyXG4gICAgICAgICAgICAgICAgcmVuZGVyYWJsZSwgcHJldlJlbmRlcmFibGUsIG1hdGVyaWFsLCBwcmV2TWF0ZXJpYWxcclxuICAgICAgICAgICAgKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmRlcHRoVGVzdCAhPT0gZGVwdGhUZXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID8gX2dsLmVuYWJsZShfZ2wuREVQVEhfVEVTVCkgOiBfZ2wuZGlzYWJsZShfZ2wuREVQVEhfVEVTVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVwdGhUZXN0ID0gbWF0ZXJpYWwuZGVwdGhUZXN0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG1hdGVyaWFsLmRlcHRoTWFzayAhPT0gZGVwdGhNYXNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmRlcHRoTWFzayhtYXRlcmlhbC5kZXB0aE1hc2spO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlcHRoTWFzayA9IG1hdGVyaWFsLmRlcHRoTWFzaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC50cmFuc3BhcmVudCAhPT0gdHJhbnNwYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC50cmFuc3BhcmVudCA/IF9nbC5lbmFibGUoX2dsLkJMRU5EKSA6IF9nbC5kaXNhYmxlKF9nbC5CTEVORCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNwYXJlbnQgPSBtYXRlcmlhbC50cmFuc3BhcmVudDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gY2FjaGUgYmxlbmRpbmdcclxuICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC50cmFuc3BhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRlcmlhbC5ibGVuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5ibGVuZChfZ2wpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCBibGVuZCBmdW5jdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfZ2wuYmxlbmRFcXVhdGlvblNlcGFyYXRlKF9nbC5GVU5DX0FERCwgX2dsLkZVTkNfQUREKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2dsLmJsZW5kRnVuY1NlcGFyYXRlKF9nbC5TUkNfQUxQSEEsIF9nbC5PTkVfTUlOVVNfU1JDX0FMUEhBLCBfZ2wuT05FLCBfZ2wuT05FX01JTlVTX1NSQ19BTFBIQSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsVGFrZXNUZXh0dXJlU2xvdCA9IHRoaXMuX2JpbmRNYXRlcmlhbChcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLCBtYXRlcmlhbCwgcHJvZ3JhbSxcclxuICAgICAgICAgICAgICAgICAgICBwcmV2UmVuZGVyYWJsZSB8fCBudWxsLCBwcmV2TWF0ZXJpYWwgfHwgbnVsbCwgcHJldlByb2dyYW0gfHwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBwYXNzQ29uZmlnLmdldFVuaWZvcm1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBwcmV2TWF0ZXJpYWwgPSBtYXRlcmlhbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIG1hdHJpeFNlbWFudGljS2V5cyA9IHNoYWRlci5tYXRyaXhTZW1hbnRpY0tleXM7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNTY2VuZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbWF0cml4U2VtYW50aWNLZXlzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbWFudGljID0gbWF0cml4U2VtYW50aWNLZXlzW2tdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZW1hbnRpY0luZm8gPSBzaGFkZXIubWF0cml4U2VtYW50aWNzW3NlbWFudGljXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gbWF0cmljZXNbc2VtYW50aWNdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZW1hbnRpY0luZm8uaXNUcmFuc3Bvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdHJpeE5vVHJhbnNwb3NlID0gbWF0cmljZXNbc2VtYW50aWNJbmZvLnNlbWFudGljTm9UcmFuc3Bvc2VdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQ0LnRyYW5zcG9zZShtYXRyaXgsIG1hdHJpeE5vVHJhbnNwb3NlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgc2VtYW50aWNJbmZvLnR5cGUsIHNlbWFudGljSW5mby5zeW1ib2wsIG1hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlLmN1bGxGYWNlICE9PSBjdWxsRmFjZSkge1xyXG4gICAgICAgICAgICAgICAgY3VsbEZhY2UgPSByZW5kZXJhYmxlLmN1bGxGYWNlO1xyXG4gICAgICAgICAgICAgICAgX2dsLmN1bGxGYWNlKGN1bGxGYWNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5mcm9udEZhY2UgIT09IGZyb250RmFjZSkge1xyXG4gICAgICAgICAgICAgICAgZnJvbnRGYWNlID0gcmVuZGVyYWJsZS5mcm9udEZhY2U7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZnJvbnRGYWNlKGZyb250RmFjZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlbmRlcmFibGUuY3VsbGluZyAhPT0gY3VsbGluZykge1xyXG4gICAgICAgICAgICAgICAgY3VsbGluZyA9IHJlbmRlcmFibGUuY3VsbGluZztcclxuICAgICAgICAgICAgICAgIGN1bGxpbmcgPyBfZ2wuZW5hYmxlKF9nbC5DVUxMX0ZBQ0UpIDogX2dsLmRpc2FibGUoX2dsLkNVTExfRkFDRSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gVE9ETyBOb3QgdXBkYXRlIHNrZWxldG9uIGluIGVhY2ggcmVuZGVyYWJsZS5cclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlU2tlbGV0b24ocmVuZGVyYWJsZSwgcHJvZ3JhbSwgbWF0ZXJpYWxUYWtlc1RleHR1cmVTbG90KTtcclxuICAgICAgICAgICAgaWYgKGRyYXdJRENoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRWQU8gPSB0aGlzLl9iaW5kVkFPKHZhb0V4dCwgc2hhZGVyLCBnZW9tZXRyeSwgcHJvZ3JhbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyT2JqZWN0KHJlbmRlcmFibGUsIGN1cnJlbnRWQU8pO1xyXG5cclxuICAgICAgICAgICAgLy8gQWZ0ZXIgcmVuZGVyIGhvb2tcclxuICAgICAgICAgICAgcGFzc0NvbmZpZy5hZnRlclJlbmRlcih0aGlzLCByZW5kZXJhYmxlKTtcclxuICAgICAgICAgICAgcmVuZGVyYWJsZS5hZnRlclJlbmRlciAmJiByZW5kZXJhYmxlLmFmdGVyUmVuZGVyKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgcHJldlByb2dyYW0gPSBwcm9ncmFtO1xyXG4gICAgICAgICAgICBwcmV2UmVuZGVyYWJsZSA9IHJlbmRlcmFibGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUT0RPIFNlZW1zIG5lZWQgdG8gYmUgYm91bmQgdG8gbnVsbCBpbW1lZGlhdGVseSBpZiB2YW8gaXMgY2hhbmdlZD9cclxuICAgICAgICBpZiAodmFvRXh0KSB7XHJcbiAgICAgICAgICAgIHZhb0V4dC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2FmdGVycmVuZGVycGFzcycsIHRoaXMsIGxpc3QsIGNhbWVyYSwgcGFzc0NvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldE1heEpvaW50TnVtYmVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dsaW5mby5nZXRNYXhKb2ludE51bWJlcigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlU2tlbGV0b246IGZ1bmN0aW9uIChvYmplY3QsIHByb2dyYW0sIHNsb3QpIHtcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuICAgICAgICB2YXIgc2tlbGV0b24gPSBvYmplY3Quc2tlbGV0b247XHJcbiAgICAgICAgLy8gU2V0IHBvc2UgbWF0cmljZXMgb2Ygc2tpbm5lZCBtZXNoXHJcbiAgICAgICAgaWYgKHNrZWxldG9uKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gVXBkYXRlIGJlZm9yZSBjdWxsaW5nLlxyXG4gICAgICAgICAgICBza2VsZXRvbi51cGRhdGUoKTtcclxuICAgICAgICAgICAgaWYgKG9iamVjdC5qb2ludHMubGVuZ3RoID4gdGhpcy5fZ2xpbmZvLmdldE1heEpvaW50TnVtYmVyKCkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBza2luTWF0cmljZXNUZXh0dXJlID0gc2tlbGV0b24uZ2V0U3ViU2tpbk1hdHJpY2VzVGV4dHVyZShvYmplY3QuX191aWRfXywgb2JqZWN0LmpvaW50cyk7XHJcbiAgICAgICAgICAgICAgICBwcm9ncmFtLnVzZVRleHR1cmVTbG90KHRoaXMsIHNraW5NYXRyaWNlc1RleHR1cmUsIHNsb3QpO1xyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFpJywgJ3NraW5NYXRyaWNlc1RleHR1cmUnLCBzbG90KTtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShfZ2wsICcxZicsICdza2luTWF0cmljZXNUZXh0dXJlU2l6ZScsIHNraW5NYXRyaWNlc1RleHR1cmUud2lkdGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNraW5NYXRyaWNlc0FycmF5ID0gc2tlbGV0b24uZ2V0U3ViU2tpbk1hdHJpY2VzKG9iamVjdC5fX3VpZF9fLCBvYmplY3Quam9pbnRzKTtcclxuICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybU9mU2VtYW50aWMoX2dsLCAnU0tJTl9NQVRSSVgnLCBza2luTWF0cmljZXNBcnJheSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZW5kZXJPYmplY3Q6IGZ1bmN0aW9uIChyZW5kZXJhYmxlLCB2YW8pIHtcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuICAgICAgICB2YXIgZ2VvbWV0cnkgPSByZW5kZXJhYmxlLmdlb21ldHJ5O1xyXG5cclxuICAgICAgICB2YXIgZ2xEcmF3TW9kZSA9IHJlbmRlcmFibGUubW9kZTtcclxuICAgICAgICBpZiAoZ2xEcmF3TW9kZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGdsRHJhd01vZGUgPSAweDAwMDQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpZiAoZ2xEcmF3TW9kZSA9PT0gZ2xlbnVtLkxJTkVTIHx8IGdsRHJhd01vZGUgPT09IGdsZW51bS5MSU5FX1NUUklQIHx8IGdsRHJhd01vZGUgPT09IGdsZW51bS5MSU5FX0xPT1ApIHtcclxuICAgICAgICAvLyAgICAgX2dsLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aCk7XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICBpZiAodmFvLmluZGljZXNCdWZmZXIpIHtcclxuICAgICAgICAgICAgdmFyIHVpbnRFeHQgPSB0aGlzLmdldEdMRXh0ZW5zaW9uKCdPRVNfZWxlbWVudF9pbmRleF91aW50Jyk7XHJcbiAgICAgICAgICAgIHZhciB1c2VVaW50RXh0ID0gdWludEV4dCAmJiAoZ2VvbWV0cnkuaW5kaWNlcyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KTtcclxuICAgICAgICAgICAgdmFyIGluZGljZXNUeXBlID0gdXNlVWludEV4dCA/IF9nbC5VTlNJR05FRF9JTlQgOiBfZ2wuVU5TSUdORURfU0hPUlQ7XHJcblxyXG4gICAgICAgICAgICBfZ2wuZHJhd0VsZW1lbnRzKGdsRHJhd01vZGUsIHZhby5pbmRpY2VzQnVmZmVyLmNvdW50LCBpbmRpY2VzVHlwZSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBGSVhNRSBVc2UgdmVydGV4IG51bWJlciBpbiBidWZmZXJcclxuICAgICAgICAgICAgLy8gdmVydGV4Q291bnQgbWF5IGdldCB0aGUgd3JvbmcgdmFsdWUgd2hlbiBnZW9tZXRyeSBmb3JnZXQgdG8gbWFyayBkaXJ0eSBhZnRlciB1cGRhdGVcclxuICAgICAgICAgICAgX2dsLmRyYXdBcnJheXMoZ2xEcmF3TW9kZSwgMCwgZ2VvbWV0cnkudmVydGV4Q291bnQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2JpbmRNYXRlcmlhbDogZnVuY3Rpb24gKHJlbmRlcmFibGUsIG1hdGVyaWFsLCBwcm9ncmFtLCBwcmV2UmVuZGVyYWJsZSwgcHJldk1hdGVyaWFsLCBwcmV2UHJvZ3JhbSwgZ2V0VW5pZm9ybVZhbHVlKSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHRoaXMuZ2w7XHJcbiAgICAgICAgLy8gUEVORElORyBTYW1lIHRleHR1cmUgaW4gZGlmZmVyZW50IG1hdGVyaWFsIHRha2UgZGlmZmVyZW50IHNsb3Q/XHJcblxyXG4gICAgICAgIC8vIE1heSB1c2Ugc2hhZGVyIG9mIG90aGVyIG1hdGVyaWFsIGlmIHNoYWRlciBjb2RlIGFyZSBzYW1lXHJcbiAgICAgICAgdmFyIHNhbWVQcm9ncmFtID0gcHJldlByb2dyYW0gPT09IHByb2dyYW07XHJcblxyXG4gICAgICAgIHZhciBjdXJyZW50VGV4dHVyZVNsb3QgPSBwcm9ncmFtLmN1cnJlbnRUZXh0dXJlU2xvdCgpO1xyXG4gICAgICAgIHZhciBlbmFibGVkVW5pZm9ybXMgPSBtYXRlcmlhbC5nZXRFbmFibGVkVW5pZm9ybXMoKTtcclxuICAgICAgICB2YXIgdGV4dHVyZVVuaWZvcm1zID0gbWF0ZXJpYWwuZ2V0VGV4dHVyZVVuaWZvcm1zKCk7XHJcbiAgICAgICAgdmFyIHBsYWNlaG9sZGVyVGV4dHVyZSA9IHRoaXMuX3BsYWNlaG9sZGVyVGV4dHVyZTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPCB0ZXh0dXJlVW5pZm9ybXMubGVuZ3RoOyB1KyspIHtcclxuICAgICAgICAgICAgdmFyIHN5bWJvbCA9IHRleHR1cmVVbmlmb3Jtc1t1XTtcclxuICAgICAgICAgICAgdmFyIHVuaWZvcm1WYWx1ZSA9IGdldFVuaWZvcm1WYWx1ZShyZW5kZXJhYmxlLCBtYXRlcmlhbCwgc3ltYm9sKTtcclxuICAgICAgICAgICAgdmFyIHVuaWZvcm1UeXBlID0gbWF0ZXJpYWwudW5pZm9ybXNbc3ltYm9sXS50eXBlO1xyXG4gICAgICAgICAgICAvLyBOb3QgdXNlIGBpbnN0YW5jZW9mYCB0byBkZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB0ZXh0dXJlIGluIE1hdGVyaWFsI2JpbmQuXHJcbiAgICAgICAgICAgIC8vIFVzZSB0eXBlIGluc3RlYWQsIGluIHNvbWUgY2FzZSB0ZXh0dXJlIG1heSBiZSBpbiBkaWZmZXJlbnQgbmFtZXNwYWNlcy5cclxuICAgICAgICAgICAgLy8gVE9ETyBEdWNrIHR5cGUgdmFsaWRhdGUuXHJcbiAgICAgICAgICAgIGlmICh1bmlmb3JtVHlwZSA9PT0gJ3QnICYmIHVuaWZvcm1WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gUmVzZXQgc2xvdFxyXG4gICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlLl9fc2xvdCA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHVuaWZvcm1UeXBlID09PSAndHYnKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaWZvcm1WYWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVmFsdWVbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlW2ldLl9fc2xvdCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcGxhY2Vob2xkZXJUZXh0dXJlLl9fc2xvdCA9IC0xO1xyXG5cclxuICAgICAgICAvLyBTZXQgdW5pZm9ybXNcclxuICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IGVuYWJsZWRVbmlmb3Jtcy5sZW5ndGg7IHUrKykge1xyXG4gICAgICAgICAgICB2YXIgc3ltYm9sID0gZW5hYmxlZFVuaWZvcm1zW3VdO1xyXG4gICAgICAgICAgICB2YXIgdW5pZm9ybSA9IG1hdGVyaWFsLnVuaWZvcm1zW3N5bWJvbF07XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtVmFsdWUgPSBnZXRVbmlmb3JtVmFsdWUocmVuZGVyYWJsZSwgbWF0ZXJpYWwsIHN5bWJvbCk7XHJcbiAgICAgICAgICAgIHZhciB1bmlmb3JtVHlwZSA9IHVuaWZvcm0udHlwZTtcclxuICAgICAgICAgICAgdmFyIGlzVGV4dHVyZSA9IHVuaWZvcm1UeXBlID09PSAndCc7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXVuaWZvcm1WYWx1ZSB8fCAhdW5pZm9ybVZhbHVlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlID0gcGxhY2Vob2xkZXJUZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgLy8gV2hlbiBiaW5kaW5nIHR3byBtYXRlcmlhbHMgd2l0aCB0aGUgc2FtZSBzaGFkZXJcclxuICAgICAgICAgICAgLy8gTWFueSB1bmlmb3JtcyB3aWxsIGJlIGJlIHNldCB0d2ljZSBldmVuIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSB2YWx1ZVxyXG4gICAgICAgICAgICAvLyBTbyBhZGQgYSBldmFsdWF0aW9uIHRvIHNlZSBpZiB0aGUgdW5pZm9ybSBpcyByZWFsbHkgbmVlZGVkIHRvIGJlIHNldFxyXG4gICAgICAgICAgICBpZiAocHJldk1hdGVyaWFsICYmIHNhbWVQcm9ncmFtKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJldlVuaWZvcm1WYWx1ZSA9IGdldFVuaWZvcm1WYWx1ZShwcmV2UmVuZGVyYWJsZSwgcHJldk1hdGVyaWFsLCBzeW1ib2wpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzVGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJldlVuaWZvcm1WYWx1ZSB8fCAhcHJldlVuaWZvcm1WYWx1ZS5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2VW5pZm9ybVZhbHVlID0gcGxhY2Vob2xkZXJUZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocHJldlVuaWZvcm1WYWx1ZSA9PT0gdW5pZm9ybVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGlsbCB0YWtlIHRoZSBzbG90IHRvIG1ha2Ugc3VyZSBzYW1lIHRleHR1cmUgaW4gZGlmZmVyZW50IG1hdGVyaWFscyBoYXZlIHNhbWUgc2xvdC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS50YWtlQ3VycmVudFRleHR1cmVTbG90KHRoaXMsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh1bmlmb3JtVHlwZSA9PT0gJ3R2JyAmJiB1bmlmb3JtVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmlmb3JtVmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdCh0aGlzLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHVuaWZvcm1WYWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChpc1RleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVmFsdWUuX19zbG90IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzbG90ID0gcHJvZ3JhbS5jdXJyZW50VGV4dHVyZVNsb3QoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzID0gcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFpJywgc3ltYm9sLCBzbG90KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7IC8vIFRleHR1cmUgdW5pZm9ybSBpcyBlbmFibGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0udGFrZUN1cnJlbnRUZXh0dXJlU2xvdCh0aGlzLCB1bmlmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWUuX19zbG90ID0gc2xvdDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBNdWx0aXBsZSB1bmlmb3JtIHVzZSBzYW1lIHRleHR1cmUuLlxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgJzFpJywgc3ltYm9sLCB1bmlmb3JtVmFsdWUuX19zbG90KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHVuaWZvcm1WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmlmb3JtVmFsdWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBUZXh0dXJlIEFycmF5XHJcbiAgICAgICAgICAgICAgICBpZiAodW5pZm9ybVR5cGUgPT09ICd0dicpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2dyYW0uaGFzVW5pZm9ybShzeW1ib2wpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pZm9ybVZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdW5pZm9ybVZhbHVlW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmUuX19zbG90IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNsb3QgPSBwcm9ncmFtLmN1cnJlbnRUZXh0dXJlU2xvdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goc2xvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnRha2VDdXJyZW50VGV4dHVyZVNsb3QodGhpcywgdGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLl9fc2xvdCA9IHNsb3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaCh0ZXh0dXJlLl9fc2xvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShfZ2wsICcxaXYnLCBzeW1ib2wsIGFycik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0oX2dsLCB1bmlmb3JtLnR5cGUsIHN5bWJvbCwgdW5pZm9ybVZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgcHJvZ3JhbS5zZXRVbmlmb3JtKF9nbCwgdW5pZm9ybS50eXBlLCBzeW1ib2wsIHVuaWZvcm1WYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG5ld1Nsb3QgPSBwcm9ncmFtLmN1cnJlbnRUZXh0dXJlU2xvdCgpO1xyXG4gICAgICAgIC8vIFRleHR1cmUgc2xvdCBtYXliZSB1c2VkIG91dCBvZiBtYXRlcmlhbC5cclxuICAgICAgICBwcm9ncmFtLnJlc2V0VGV4dHVyZVNsb3QoY3VycmVudFRleHR1cmVTbG90KTtcclxuICAgICAgICByZXR1cm4gbmV3U2xvdDtcclxuICAgIH0sXHJcblxyXG4gICAgX2JpbmRWQU86IGZ1bmN0aW9uICh2YW9FeHQsIHNoYWRlciwgZ2VvbWV0cnksIHByb2dyYW0pIHtcclxuICAgICAgICB2YXIgaXNTdGF0aWMgPSAhZ2VvbWV0cnkuZHluYW1pYztcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuXHJcbiAgICAgICAgdmFyIHZhb0lkID0gdGhpcy5fX3VpZF9fICsgJy0nICsgcHJvZ3JhbS5fX3VpZF9fO1xyXG4gICAgICAgIHZhciB2YW8gPSBnZW9tZXRyeS5fX3Zhb0NhY2hlW3Zhb0lkXTtcclxuICAgICAgICBpZiAoIXZhbykge1xyXG4gICAgICAgICAgICB2YXIgY2h1bmtzID0gZ2VvbWV0cnkuZ2V0QnVmZmVyQ2h1bmtzKHRoaXMpO1xyXG4gICAgICAgICAgICBpZiAoIWNodW5rcyB8fCAhY2h1bmtzLmxlbmd0aCkgeyAgLy8gRW1wdHkgbWVzaFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjaHVuayA9IGNodW5rc1swXTtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUJ1ZmZlcnMgPSBjaHVuay5hdHRyaWJ1dGVCdWZmZXJzO1xyXG4gICAgICAgICAgICB2YXIgaW5kaWNlc0J1ZmZlciA9IGNodW5rLmluZGljZXNCdWZmZXI7XHJcblxyXG4gICAgICAgICAgICB2YXIgYXZhaWxhYmxlQXR0cmlidXRlcyA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgYXZhaWxhYmxlQXR0cmlidXRlU3ltYm9scyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGF0dHJpYnV0ZUJ1ZmZlcnMubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVCdWZmZXJJbmZvID0gYXR0cmlidXRlQnVmZmVyc1thXTtcclxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlQnVmZmVySW5mby5uYW1lO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlbWFudGljID0gYXR0cmlidXRlQnVmZmVySW5mby5zZW1hbnRpYztcclxuICAgICAgICAgICAgICAgIHZhciBzeW1ib2w7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWNJbmZvID0gc2hhZGVyLmF0dHJpYnV0ZVNlbWFudGljc1tzZW1hbnRpY107XHJcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sID0gc2VtYW50aWNJbmZvICYmIHNlbWFudGljSW5mby5zeW1ib2w7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzeW1ib2wgPSBuYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHN5bWJvbCAmJiBwcm9ncmFtLmF0dHJpYnV0ZXNbc3ltYm9sXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUF0dHJpYnV0ZXMucHVzaChhdHRyaWJ1dGVCdWZmZXJJbmZvKTtcclxuICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVBdHRyaWJ1dGVTeW1ib2xzLnB1c2goc3ltYm9sKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFvID0gbmV3IFZlcnRleEFycmF5T2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlQXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgIGF2YWlsYWJsZUF0dHJpYnV0ZVN5bWJvbHMsXHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzQnVmZmVyXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNTdGF0aWMpIHtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5Ll9fdmFvQ2FjaGVbdmFvSWRdID0gdmFvO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbmVlZHNCaW5kQXR0cmlidXRlcyA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSB2ZXJ0ZXggb2JqZWN0IGFycmF5IGNvc3QgYSBsb3RcclxuICAgICAgICAvLyBTbyB3ZSBkb24ndCB1c2UgaXQgb24gdGhlIGR5bmFtaWMgb2JqZWN0XHJcbiAgICAgICAgaWYgKHZhb0V4dCAmJiBpc1N0YXRpYykge1xyXG4gICAgICAgICAgICAvLyBVc2UgdmVydGV4IGFycmF5IG9iamVjdFxyXG4gICAgICAgICAgICAvLyBodHRwOi8vYmxvZy50b2ppY29kZS5jb20vMjAxMi8xMC9vZXN2ZXJ0ZXhhcnJheW9iamVjdC1leHRlbnNpb24uaHRtbFxyXG4gICAgICAgICAgICBpZiAodmFvLnZhbyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YW8udmFvID0gdmFvRXh0LmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuZWVkc0JpbmRBdHRyaWJ1dGVzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFvRXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh2YW8udmFvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBhdmFpbGFibGVBdHRyaWJ1dGVzID0gdmFvLmF2YWlsYWJsZUF0dHJpYnV0ZXM7XHJcbiAgICAgICAgdmFyIGluZGljZXNCdWZmZXIgPSB2YW8uaW5kaWNlc0J1ZmZlcjtcclxuXHJcbiAgICAgICAgaWYgKG5lZWRzQmluZEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgdmFyIGxvY2F0aW9uTGlzdCA9IHByb2dyYW0uZW5hYmxlQXR0cmlidXRlcyh0aGlzLCB2YW8uYXZhaWxhYmxlQXR0cmlidXRlU3ltYm9scywgKHZhb0V4dCAmJiBpc1N0YXRpYyAmJiB2YW8pKTtcclxuICAgICAgICAgICAgLy8gU2V0dGluZyBhdHRyaWJ1dGVzO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGF2YWlsYWJsZUF0dHJpYnV0ZXMubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGxvY2F0aW9uTGlzdFthXTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVCdWZmZXJJbmZvID0gYXZhaWxhYmxlQXR0cmlidXRlc1thXTtcclxuICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBhdHRyaWJ1dGVCdWZmZXJJbmZvLmJ1ZmZlcjtcclxuICAgICAgICAgICAgICAgIHZhciBzaXplID0gYXR0cmlidXRlQnVmZmVySW5mby5zaXplO1xyXG4gICAgICAgICAgICAgICAgdmFyIGdsVHlwZSA9IGF0dHJpYnV0ZUJ1ZmZlclR5cGVNYXBbYXR0cmlidXRlQnVmZmVySW5mby50eXBlXSB8fCBfZ2wuRkxPQVQ7XHJcblxyXG4gICAgICAgICAgICAgICAgX2dsLmJpbmRCdWZmZXIoX2dsLkFSUkFZX0JVRkZFUiwgYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIF9nbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGxvY2F0aW9uLCBzaXplLCBnbFR5cGUsIGZhbHNlLCAwLCAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGdlb21ldHJ5LmlzVXNlSW5kaWNlcygpKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlcihfZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGluZGljZXNCdWZmZXIuYnVmZmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZhbztcclxuICAgIH0sXHJcblxyXG4gICAgcmVuZGVyUHJlWjogZnVuY3Rpb24gKGxpc3QsIHNjZW5lLCBjYW1lcmEpIHtcclxuICAgICAgICB2YXIgX2dsID0gdGhpcy5nbDtcclxuICAgICAgICB2YXIgcHJlWlBhc3NNYXRlcmlhbCA9IHRoaXMuX3ByZXpNYXRlcmlhbCB8fCBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5wcmV6LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnByZXouZnJhZ21lbnQnKSlcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9wcmV6TWF0ZXJpYWwgPSBwcmVaUGFzc01hdGVyaWFsO1xyXG5cclxuICAgICAgICBfZ2wuY29sb3JNYXNrKGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG5cclxuICAgICAgICAvLyBTdGF0dXNcclxuICAgICAgICB0aGlzLnJlbmRlclBhc3MobGlzdCwgY2FtZXJhLCB7XHJcbiAgICAgICAgICAgIGlmUmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICFyZW5kZXJhYmxlLmlnbm9yZVByZVo7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGlzTWF0ZXJpYWxDaGFuZ2VkOiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgcHJldlJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRBID0gcmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRCID0gcHJldlJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWF0QS5nZXQoJ2RpZmZ1c2VNYXAnKSAhPT0gbWF0Qi5nZXQoJ2RpZmZ1c2VNYXAnKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IChtYXRBLmdldCgnYWxwaGFDdXRvZmYnKSB8fCAwKSAhPT0gKG1hdEIuZ2V0KCdhbHBoYUN1dG9mZicpIHx8IDApO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnZXRVbmlmb3JtOiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgZGVwdGhNYXRlcmlhbCwgc3ltYm9sKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3ltYm9sID09PSAnYWxwaGFNYXAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdkaWZmdXNlTWFwJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdhbHBoYUN1dG9mZicpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5tYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgnZGlmZnVzZU1hcCcpXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbHBoYUN1dG9mZiA9IHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdhbHBoYUN1dG9mZicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxwaGFDdXRvZmYgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd1dlJlcGVhdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ3V2UmVwZWF0Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd1dk9mZnNldCcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ3V2T2Zmc2V0Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVwdGhNYXRlcmlhbC5nZXQoc3ltYm9sKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcmVaUGFzc01hdGVyaWFsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzb3J0OiB0aGlzLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIF9nbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgX2dsLmRlcHRoTWFzayh0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdpdmVuIHNjZW5lLCBpbmNsdWRpbmcgYWxsIGdlb21ldHJpcywgdGV4dHVyZXMgYW5kIHNoYWRlcnMgaW4gdGhlIHNjZW5lXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuU2NlbmV9IHNjZW5lXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VTY2VuZTogZnVuY3Rpb24oc2NlbmUpIHtcclxuICAgICAgICB0aGlzLmRpc3Bvc2VOb2RlKHNjZW5lLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICBzY2VuZS5kaXNwb3NlKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBnaXZlbiBub2RlLCBpbmNsdWRpbmcgYWxsIGdlb21ldHJpZXMsIHRleHR1cmVzIGFuZCBzaGFkZXJzIGF0dGFjaGVkIG9uIGl0IG9yIGl0cyBkZXNjZW5kYW50XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZGlzcG9zZUdlb21ldHJ5PWZhbHNlXSBJZiBkaXNwb3NlIHRoZSBnZW9tZXRyaWVzIHVzZWQgaW4gdGhlIGRlc2NlbmRhbnQgbWVzaFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZGlzcG9zZVRleHR1cmU9ZmFsc2VdIElmIGRpc3Bvc2UgdGhlIHRleHR1cmVzIHVzZWQgaW4gdGhlIGRlc2NlbmRhbnQgbWVzaFxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlTm9kZTogZnVuY3Rpb24ocm9vdCwgZGlzcG9zZUdlb21ldHJ5LCBkaXNwb3NlVGV4dHVyZSkge1xyXG4gICAgICAgIC8vIERldHRhY2hlZCBmcm9tIHBhcmVudFxyXG4gICAgICAgIGlmIChyb290LmdldFBhcmVudCgpKSB7XHJcbiAgICAgICAgICAgIHJvb3QuZ2V0UGFyZW50KCkucmVtb3ZlKHJvb3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGlzcG9zZWRNYXAgPSB7fTtcclxuICAgICAgICByb290LnRyYXZlcnNlKGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gbm9kZS5tYXRlcmlhbDtcclxuICAgICAgICAgICAgaWYgKG5vZGUuZ2VvbWV0cnkgJiYgZGlzcG9zZUdlb21ldHJ5KSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLmdlb21ldHJ5LmRpc3Bvc2UodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRpc3Bvc2VUZXh0dXJlICYmIG1hdGVyaWFsICYmICFkaXNwb3NlZE1hcFttYXRlcmlhbC5fX3VpZF9fXSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRleHR1cmVVbmlmb3JtcyA9IG1hdGVyaWFsLmdldFRleHR1cmVVbmlmb3JtcygpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPCB0ZXh0dXJlVW5pZm9ybXMubGVuZ3RoOyB1KyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdW5pZm9ybU5hbWUgPSB0ZXh0dXJlVW5pZm9ybXNbdV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IG1hdGVyaWFsLnVuaWZvcm1zW3VuaWZvcm1OYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdW5pZm9ybVR5cGUgPSBtYXRlcmlhbC51bmlmb3Jtc1t1bmlmb3JtTmFtZV0udHlwZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWZvcm1UeXBlID09PSAndCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsLmRpc3Bvc2UgJiYgdmFsLmRpc3Bvc2UodGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVuaWZvcm1UeXBlID09PSAndHYnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdmFsLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsW2tdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsW2tdLmRpc3Bvc2UgJiYgdmFsW2tdLmRpc3Bvc2UodGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkaXNwb3NlZE1hcFttYXRlcmlhbC5fX3VpZF9fXSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUGFydGljbGUgc3lzdGVtIGFuZCBBbWJpZW50Q3ViZW1hcCBsaWdodCBuZWVkIHRvIGRpc3Bvc2VcclxuICAgICAgICAgICAgaWYgKG5vZGUuZGlzcG9zZSkge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5kaXNwb3NlKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBnaXZlbiBnZW9tZXRyeVxyXG4gICAgICogQHBhcmFtIHtjbGF5Lkdlb21ldHJ5fSBnZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlR2VvbWV0cnk6IGZ1bmN0aW9uKGdlb21ldHJ5KSB7XHJcbiAgICAgICAgZ2VvbWV0cnkuZGlzcG9zZSh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdpdmVuIHRleHR1cmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5UZXh0dXJlfSB0ZXh0dXJlXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VUZXh0dXJlOiBmdW5jdGlvbih0ZXh0dXJlKSB7XHJcbiAgICAgICAgdGV4dHVyZS5kaXNwb3NlKHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgZ2l2ZW4gZnJhbWUgYnVmZmVyXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuRnJhbWVCdWZmZXJ9IGZyYW1lQnVmZmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2VGcmFtZUJ1ZmZlcjogZnVuY3Rpb24oZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICBmcmFtZUJ1ZmZlci5kaXNwb3NlKHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UgcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IHNjcmVlbiBjb29yZHMgdG8gbm9ybWFsaXplZCBkZXZpY2UgY29vcmRpbmF0ZXMoTkRDKVxyXG4gICAgICogU2NyZWVuIGNvb3JkcyBjYW4gZ2V0IGZyb20gbW91c2UgZXZlbnQsIGl0IGlzIHBvc2l0aW9uZWQgcmVsYXRpdmUgdG8gY2FudmFzIGVsZW1lbnRcclxuICAgICAqIE5EQyBjYW4gYmUgdXNlZCBpbiByYXkgY2FzdGluZyB3aXRoIENhbWVyYS5wcm90b3R5cGUuY2FzdFJheSBtZXRob2RzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgICAgICB4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgICAgIHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gW291dF1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yMn1cclxuICAgICAqL1xyXG4gICAgc2NyZWVuVG9OREM6IGZ1bmN0aW9uKHgsIHksIG91dCkge1xyXG4gICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEludmVydCB5O1xyXG4gICAgICAgIHkgPSB0aGlzLl9oZWlnaHQgLSB5O1xyXG5cclxuICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0O1xyXG4gICAgICAgIHZhciBhcnIgPSBvdXQuYXJyYXk7XHJcbiAgICAgICAgYXJyWzBdID0gKHggLSB2aWV3cG9ydC54KSAvIHZpZXdwb3J0LndpZHRoO1xyXG4gICAgICAgIGFyclswXSA9IGFyclswXSAqIDIgLSAxO1xyXG4gICAgICAgIGFyclsxXSA9ICh5IC0gdmlld3BvcnQueSkgLyB2aWV3cG9ydC5oZWlnaHQ7XHJcbiAgICAgICAgYXJyWzFdID0gYXJyWzFdICogMiAtIDE7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIE9wYXF1ZSByZW5kZXJhYmxlcyBjb21wYXJlIGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyYWJsZX0geFxyXG4gKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmFibGV9IHlcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICogQHN0YXRpY1xyXG4gKi9cclxuUmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmUgPSBSZW5kZXJlci5wcm90b3R5cGUub3BhcXVlU29ydENvbXBhcmUgPSBmdW5jdGlvbih4LCB5KSB7XHJcbiAgICAvLyBQcmlvcml0eSByZW5kZXJPcmRlciAtPiBwcm9ncmFtIC0+IG1hdGVyaWFsIC0+IGdlb21ldHJ5XHJcbiAgICBpZiAoeC5yZW5kZXJPcmRlciA9PT0geS5yZW5kZXJPcmRlcikge1xyXG4gICAgICAgIGlmICh4Ll9fcHJvZ3JhbSA9PT0geS5fX3Byb2dyYW0pIHtcclxuICAgICAgICAgICAgaWYgKHgubWF0ZXJpYWwgPT09IHkubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB4Lmdlb21ldHJ5Ll9fdWlkX18gLSB5Lmdlb21ldHJ5Ll9fdWlkX187XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHgubWF0ZXJpYWwuX191aWRfXyAtIHkubWF0ZXJpYWwuX191aWRfXztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHguX19wcm9ncmFtICYmIHkuX19wcm9ncmFtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4Ll9fcHJvZ3JhbS5fX3VpZF9fIC0geS5fX3Byb2dyYW0uX191aWRfXztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geC5yZW5kZXJPcmRlciAtIHkucmVuZGVyT3JkZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogVHJhbnNwYXJlbnQgcmVuZGVyYWJsZXMgY29tcGFyZSBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmFibGV9IGFcclxuICogQHBhcmFtICB7Y2xheS5SZW5kZXJhYmxlfSBiXHJcbiAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAqIEBzdGF0aWNcclxuICovXHJcblJlbmRlcmVyLnRyYW5zcGFyZW50U29ydENvbXBhcmUgPSBSZW5kZXJlci5wcm90b3R5cGUudHJhbnNwYXJlbnRTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uKHgsIHkpIHtcclxuICAgIC8vIFByaW9yaXR5IHJlbmRlck9yZGVyIC0+IGRlcHRoIC0+IHByb2dyYW0gLT4gbWF0ZXJpYWwgLT4gZ2VvbWV0cnlcclxuXHJcbiAgICBpZiAoeC5yZW5kZXJPcmRlciA9PT0geS5yZW5kZXJPcmRlcikge1xyXG4gICAgICAgIGlmICh4Ll9fZGVwdGggPT09IHkuX19kZXB0aCkge1xyXG4gICAgICAgICAgICBpZiAoeC5fX3Byb2dyYW0gPT09IHkuX19wcm9ncmFtKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeC5tYXRlcmlhbCA9PT0geS5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4Lmdlb21ldHJ5Ll9fdWlkX18gLSB5Lmdlb21ldHJ5Ll9fdWlkX187XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geC5tYXRlcmlhbC5fX3VpZF9fIC0geS5tYXRlcmlhbC5fX3VpZF9fO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh4Ll9fcHJvZ3JhbSAgJiYgeS5fX3Byb2dyYW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB4Ll9fcHJvZ3JhbS5fX3VpZF9fIC0geS5fX3Byb2dyYW0uX191aWRfXztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRGVwdGggaXMgbmVnYXRpdmVcclxuICAgICAgICAvLyBTbyBmYXJ0aGVyIG9iamVjdCBoYXMgc21hbGxlciBkZXB0aCB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB4Ll9fZGVwdGggLSB5Ll9fZGVwdGg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geC5yZW5kZXJPcmRlciAtIHkucmVuZGVyT3JkZXI7XHJcbn07XHJcblxyXG4vLyBUZW1wb3JhcnkgdmFyaWFibGVzXHJcbnZhciBtYXRyaWNlcyA9IHtcclxuICAgIElERU5USVRZOiBtYXQ0Q3JlYXRlKCksXHJcblxyXG4gICAgV09STEQ6IG1hdDRDcmVhdGUoKSxcclxuICAgIFZJRVc6IG1hdDRDcmVhdGUoKSxcclxuICAgIFBST0pFQ1RJT046IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFVzogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV1BST0pFQ1RJT046IG1hdDRDcmVhdGUoKSxcclxuICAgIFdPUkxEVklFV1BST0pFQ1RJT046IG1hdDRDcmVhdGUoKSxcclxuXHJcbiAgICBXT1JMRElOVkVSU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFZJRVdJTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBQUk9KRUNUSU9OSU5WRVJTRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgV09STERWSUVXSU5WRVJTRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV1BST0pFQ1RJT05JTlZFUlNFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRTogbWF0NENyZWF0ZSgpLFxyXG5cclxuICAgIFdPUkxEVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBWSUVXVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBQUk9KRUNUSU9OVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFZJRVdQUk9KRUNUSU9OVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdQUk9KRUNUSU9OVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRElOVkVSU0VUUkFOU1BPU0U6IG1hdDRDcmVhdGUoKSxcclxuICAgIFZJRVdJTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgV09STERWSUVXSU5WRVJTRVRSQU5TUE9TRTogbWF0NENyZWF0ZSgpLFxyXG4gICAgVklFV1BST0pFQ1RJT05JTlZFUlNFVFJBTlNQT1NFOiBtYXQ0Q3JlYXRlKCksXHJcbiAgICBXT1JMRFZJRVdQUk9KRUNUSU9OSU5WRVJTRVRSQU5TUE9TRTogbWF0NENyZWF0ZSgpXHJcbn07XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5SZW5kZXJlci5DT0xPUl9CVUZGRVJfQklUXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJlci5DT0xPUl9CVUZGRVJfQklUID0gZ2xlbnVtLkNPTE9SX0JVRkZFUl9CSVQ7XHJcbi8qKlxyXG4gKiBAbmFtZSBjbGF5LlJlbmRlcmVyLkRFUFRIX0JVRkZFUl9CSVRcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmVyLkRFUFRIX0JVRkZFUl9CSVQgPSBnbGVudW0uREVQVEhfQlVGRkVSX0JJVDtcclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkuUmVuZGVyZXIuU1RFTkNJTF9CVUZGRVJfQklUXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJlci5TVEVOQ0lMX0JVRkZFUl9CSVQgPSBnbGVudW0uU1RFTkNJTF9CVUZGRVJfQklUO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUmVuZGVyZXI7XHJcbiIsImltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5WZWN0b3IzXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB6XHJcbiAqL1xyXG52YXIgVmVjdG9yMyA9IGZ1bmN0aW9uKHgsIHksIHopIHtcclxuXHJcbiAgICB4ID0geCB8fCAwO1xyXG4gICAgeSA9IHkgfHwgMDtcclxuICAgIHogPSB6IHx8IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIFZlY3RvcjMsIHJlYWQgYW5kIHdyaXRlIG9mIHgsIHksIHogd2lsbCBjaGFuZ2UgdGhlIHZhbHVlcyBpbiBhcnJheVxyXG4gICAgICogQWxsIG1ldGhvZHMgYWxzbyBvcGVyYXRlIG9uIHRoZSBhcnJheSBpbnN0ZWFkIG9mIHgsIHksIHogY29tcG9uZW50c1xyXG4gICAgICogQG5hbWUgYXJyYXlcclxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXl9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzI1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFycmF5ID0gdmVjMy5mcm9tVmFsdWVzKHgsIHksIHopO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlydHkgZmxhZyBpcyB1c2VkIGJ5IHRoZSBOb2RlIHRvIGRldGVybWluZVxyXG4gICAgICogaWYgdGhlIG1hdHJpeCBpcyB1cGRhdGVkIHRvIGxhdGVzdFxyXG4gICAgICogQG5hbWUgX2RpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjMjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcblZlY3RvcjMucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBWZWN0b3IzLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGIgdG8gc2VsZlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGFkZDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICB2ZWMzLmFkZCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50c1xyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgelxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh4LCB5LCB6KSB7XHJcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IHg7XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IHk7XHJcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IHo7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB4LCB5IGFuZCB6IGNvbXBvbmVudHMgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0gYXJyWzBdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSBhcnJbMV07XHJcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IGFyclsyXTtcclxuXHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IFZlY3RvcjNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjModGhpcy54LCB0aGlzLnksIHRoaXMueik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuY29weSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3Jvc3MgcHJvZHVjdCBvZiBzZWxmIGFuZCBiLCB3cml0dGVuIHRvIGEgVmVjdG9yMyBvdXRcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIGNyb3NzOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgIHZlYzMuY3Jvc3ModGhpcy5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBkaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3Q6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMuZGlzdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXN0YW5jZSBiZXR3ZWVuIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkaXN0YW5jZTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5kaXN0YW5jZSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgZGl2aWRlXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgZGl2OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuZGl2KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXZpZGUgc2VsZiBieSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgZGl2aWRlOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMuZGl2aWRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEb3QgcHJvZHVjdCBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZG90OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLmRvdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBvZiBsZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMubGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLmxlbmd0aCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIExpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gYSBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgbGVycDogZnVuY3Rpb24gKGEsIGIsIHQpIHtcclxuICAgICAgICB2ZWMzLmxlcnAodGhpcy5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgdCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1pbmltdW0gb2Ygc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIG1pbjogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICB2ZWMzLm1pbih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWF4aW11bSBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgbWF4OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMubWF4KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBtdWw6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgdmVjMy5tdWwodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11dGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHZlYzMubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5lZ2F0ZSBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIG5lZ2F0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZlYzMubmVnYXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWxpemUgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2ZWMzLm5vcm1hbGl6ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgcmFuZG9tIHgsIHksIHogY29tcG9uZW50cyB3aXRoIGEgZ2l2ZW4gc2NhbGVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gc2NhbGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgcmFuZG9tOiBmdW5jdGlvbiAoc2NhbGUpIHtcclxuICAgICAgICB2ZWMzLnJhbmRvbSh0aGlzLmFycmF5LCBzY2FsZSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHNlbGZcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbiAocykge1xyXG4gICAgICAgIHZlYzMuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIGIgYW5kIGFkZCB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlQW5kQWRkOiBmdW5jdGlvbiAoYiwgcykge1xyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSwgcyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkRGlzdGFuY2VcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXJEaXN0OiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLnNxckRpc3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXVhcmVkRGlzdGFuY2U6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzMuc3F1YXJlZERpc3RhbmNlKHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkTGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxckxlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB2ZWMzLnNxckxlbih0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcXVhcmVkIGxlbmd0aCBvZiBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxdWFyZWRMZW5ndGg6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5zcXVhcmVkTGVuZ3RoKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzdWJ0cmFjdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHN1YjogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICB2ZWMzLnN1Yih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VidHJhY3QgYiBmcm9tIHNlbGZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBzdWJ0cmFjdDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICB2ZWMzLnN1YnRyYWN0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4MyBtXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtTWF0MzogZnVuY3Rpb24gKG0pIHtcclxuICAgICAgICB2ZWMzLnRyYW5zZm9ybU1hdDModGhpcy5hcnJheSwgdGhpcy5hcnJheSwgbS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zZm9ybSBzZWxmIHdpdGggYSBNYXRyaXg0IG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1NYXQ0OiBmdW5jdGlvbiAobSkge1xyXG4gICAgICAgIHZlYzMudHJhbnNmb3JtTWF0NCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgUXVhdGVybmlvbiBxXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtUXVhdDogZnVuY3Rpb24gKHEpIHtcclxuICAgICAgICB2ZWMzLnRyYW5zZm9ybVF1YXQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYXNuZm9ybSBzZWxmIGludG8gcHJvamVjdGlvbiBzcGFjZSB3aXRoIG1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBhcHBseVByb2plY3Rpb246IGZ1bmN0aW9uIChtKSB7XHJcbiAgICAgICAgdmFyIHYgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgIG0gPSBtLmFycmF5O1xyXG5cclxuICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9uXHJcbiAgICAgICAgaWYgKG1bMTVdID09PSAwKSB7XHJcbiAgICAgICAgICAgIHZhciB3ID0gLTEgLyB2WzJdO1xyXG4gICAgICAgICAgICB2WzBdID0gbVswXSAqIHZbMF0gKiB3O1xyXG4gICAgICAgICAgICB2WzFdID0gbVs1XSAqIHZbMV0gKiB3O1xyXG4gICAgICAgICAgICB2WzJdID0gKG1bMTBdICogdlsyXSArIG1bMTRdKSAqIHc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2WzBdID0gbVswXSAqIHZbMF0gKyBtWzEyXTtcclxuICAgICAgICAgICAgdlsxXSA9IG1bNV0gKiB2WzFdICsgbVsxM107XHJcbiAgICAgICAgICAgIHZbMl0gPSBtWzEwXSAqIHZbMl0gKyBtWzE0XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgZXVsZXJGcm9tUXVhdDogZnVuY3Rpb24ocSwgb3JkZXIpIHtcclxuICAgICAgICBWZWN0b3IzLmV1bGVyRnJvbVF1YXQodGhpcywgcSwgb3JkZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBldWxlckZyb21NYXQzOiBmdW5jdGlvbiAobSwgb3JkZXIpIHtcclxuICAgICAgICBWZWN0b3IzLmV1bGVyRnJvbU1hdDModGhpcywgbSwgb3JkZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuICdbJyArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwodGhpcy5hcnJheSwgJywnKSArICddJztcclxuICAgIH0sXHJcblxyXG4gICAgdG9BcnJheTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcclxuLy8gR2V0dGVyIGFuZCBTZXR0ZXJcclxuaWYgKGRlZmluZVByb3BlcnR5KSB7XHJcblxyXG4gICAgdmFyIHByb3RvID0gVmVjdG9yMy5wcm90b3R5cGU7XHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd4Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVswXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgeVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB6XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneicsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMl07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzJdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuXHJcbi8vIFN1cHBseSBtZXRob2RzIHRoYXQgYXJlIG5vdCBpbiBwbGFjZVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5hZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzMuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB5XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHpcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5zZXQgPSBmdW5jdGlvbihvdXQsIHgsIHksIHopIHtcclxuICAgIHZlYzMuc2V0KG91dC5hcnJheSwgeCwgeSwgeik7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5jb3B5ID0gZnVuY3Rpb24ob3V0LCBiKSB7XHJcbiAgICB2ZWMzLmNvcHkob3V0LmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMuY3Jvc3MgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzMuY3Jvc3Mob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjMuZGlzdCA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIHJldHVybiB2ZWMzLmRpc3RhbmNlKGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjMuZGlzdGFuY2UgPSBWZWN0b3IzLmRpc3Q7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLmRpdiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5kaXZpZGUob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLmRpdmlkZSA9IFZlY3RvcjMuZGl2O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5kb3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMy5kb3QoYS5hcnJheSwgYi5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjMubGVuID0gZnVuY3Rpb24oYikge1xyXG4gICAgcmV0dXJuIHZlYzMubGVuZ3RoKGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLy8gVmVjdG9yMy5sZW5ndGggPSBWZWN0b3IzLmxlbjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5sZXJwID0gZnVuY3Rpb24ob3V0LCBhLCBiLCB0KSB7XHJcbiAgICB2ZWMzLmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5taW4gPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzMubWluKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLm1heCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjMy5tYXgob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzMubXVsdGlwbHkob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMubXVsdGlwbHkgPSBWZWN0b3IzLm11bDtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLm5lZ2F0ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMy5uZWdhdGUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjMy5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMucmFuZG9tID0gZnVuY3Rpb24ob3V0LCBzY2FsZSkge1xyXG4gICAgdmVjMy5yYW5kb20ob3V0LmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgc2NhbGVcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgc2NhbGUpIHtcclxuICAgIHZlYzMuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCBzY2FsZSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3IzLnNxckRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjMy5zcXJEaXN0KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5zcXVhcmVkRGlzdGFuY2UgPSBWZWN0b3IzLnNxckRpc3Q7XHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yMy5zcXJMZW4gPSBmdW5jdGlvbihhKSB7XHJcbiAgICByZXR1cm4gdmVjMy5zcXJMZW4oYS5hcnJheSk7XHJcbn07XHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjMuc3F1YXJlZExlbmd0aCA9IFZlY3RvcjMuc3FyTGVuO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy5zdWIgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzMuc3VidHJhY3Qob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICovXHJcblZlY3RvcjMuc3VidHJhY3QgPSBWZWN0b3IzLnN1YjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICogQHBhcmFtICB7TWF0cml4M30gbVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WZWN0b3IzLnRyYW5zZm9ybU1hdDMgPSBmdW5jdGlvbihvdXQsIGEsIG0pIHtcclxuICAgIHZlYzMudHJhbnNmb3JtTWF0MyhvdXQuYXJyYXksIGEuYXJyYXksIG0uYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy50cmFuc2Zvcm1NYXQ0ID0gZnVuY3Rpb24ob3V0LCBhLCBtKSB7XHJcbiAgICB2ZWMzLnRyYW5zZm9ybU1hdDQob3V0LmFycmF5LCBhLmFycmF5LCBtLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gKi9cclxuVmVjdG9yMy50cmFuc2Zvcm1RdWF0ID0gZnVuY3Rpb24ob3V0LCBhLCBxKSB7XHJcbiAgICB2ZWMzLnRyYW5zZm9ybVF1YXQob3V0LmFycmF5LCBhLmFycmF5LCBxLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGNsYW1wKHZhbCwgbWluLCBtYXgpIHtcclxuICAgIHJldHVybiB2YWwgPCBtaW4gPyBtaW4gOiAodmFsID4gbWF4ID8gbWF4IDogdmFsKTtcclxufVxyXG52YXIgYXRhbjIgPSBNYXRoLmF0YW4yO1xyXG52YXIgYXNpbiA9IE1hdGguYXNpbjtcclxudmFyIGFicyA9IE1hdGguYWJzO1xyXG4vKipcclxuICogQ29udmVydCBxdWF0ZXJuaW9uIHRvIGV1bGVyIGFuZ2xlXHJcbiAqIFF1YXRlcm5pb24gbXVzdCBiZSBub3JtYWxpemVkXHJcbiAqIEZyb20gdGhyZWUuanNcclxuICovXHJcblZlY3RvcjMuZXVsZXJGcm9tUXVhdCA9IGZ1bmN0aW9uIChvdXQsIHEsIG9yZGVyKSB7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHEgPSBxLmFycmF5O1xyXG5cclxuICAgIHZhciB0YXJnZXQgPSBvdXQuYXJyYXk7XHJcbiAgICB2YXIgeCA9IHFbMF0sIHkgPSBxWzFdLCB6ID0gcVsyXSwgdyA9IHFbM107XHJcbiAgICB2YXIgeDIgPSB4ICogeDtcclxuICAgIHZhciB5MiA9IHkgKiB5O1xyXG4gICAgdmFyIHoyID0geiAqIHo7XHJcbiAgICB2YXIgdzIgPSB3ICogdztcclxuXHJcbiAgICB2YXIgb3JkZXIgPSAob3JkZXIgfHwgJ1hZWicpLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgc3dpdGNoIChvcmRlcikge1xyXG4gICAgICAgIGNhc2UgJ1hZWic6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKDIgKiAoeCAqIHcgLSB5ICogeiksICh3MiAtIHgyIC0geTIgKyB6MikpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhc2luKGNsYW1wKDIgKiAoeCAqIHogKyB5ICogdyksIC0gMSwgMSkpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigyICogKHogKiB3IC0geCAqIHkpLCAodzIgKyB4MiAtIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWVhaJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXNpbihjbGFtcCgyICogKHggKiB3IC0geSAqIHopLCAtIDEsIDEpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoMiAqICh4ICogeiArIHkgKiB3KSwgKHcyIC0geDIgLSB5MiArIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKDIgKiAoeCAqIHkgKyB6ICogdyksICh3MiAtIHgyICsgeTIgLSB6MikpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdaWFknOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhc2luKGNsYW1wKDIgKiAoeCAqIHcgKyB5ICogeiksIC0gMSwgMSkpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMigyICogKHkgKiB3IC0geiAqIHgpLCAodzIgLSB4MiAtIHkyICsgejIpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIoMiAqICh6ICogdyAtIHggKiB5KSwgKHcyIC0geDIgKyB5MiAtIHoyKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1pZWCc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKDIgKiAoeCAqIHcgKyB6ICogeSksICh3MiAtIHgyIC0geTIgKyB6MikpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBhc2luKGNsYW1wKDIgKiAoeSAqIHcgLSB4ICogeiksIC0gMSwgMSkpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigyICogKHggKiB5ICsgeiAqIHcpLCAodzIgKyB4MiAtIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWVpYJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoMiAqICh4ICogdyAtIHogKiB5KSwgKHcyIC0geDIgKyB5MiAtIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKDIgKiAoeSAqIHcgLSB4ICogeiksICh3MiArIHgyIC0geTIgLSB6MikpO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhc2luKGNsYW1wKDIgKiAoeCAqIHkgKyB6ICogdyksIC0gMSwgMSkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdYWlknOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMigyICogKHggKiB3ICsgeSAqIHopLCAodzIgLSB4MiArIHkyIC0gejIpKTtcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIoMiAqICh4ICogeiArIHkgKiB3KSwgKHcyICsgeDIgLSB5MiAtIHoyKSk7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGFzaW4oY2xhbXAoMiAqICh6ICogdyAtIHggKiB5KSwgLSAxLCAxKSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5rb3duIG9yZGVyOiAnICsgb3JkZXIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IHJvdGF0aW9uIG1hdHJpeCB0byBldWxlciBhbmdsZVxyXG4gKiBmcm9tIHRocmVlLmpzXHJcbiAqL1xyXG5WZWN0b3IzLmV1bGVyRnJvbU1hdDMgPSBmdW5jdGlvbiAob3V0LCBtLCBvcmRlcikge1xyXG4gICAgLy8gYXNzdW1lcyB0aGUgdXBwZXIgM3gzIG9mIG0gaXMgYSBwdXJlIHJvdGF0aW9uIG1hdHJpeCAoaS5lLCB1bnNjYWxlZClcclxuICAgIHZhciB0ZSA9IG0uYXJyYXk7XHJcbiAgICB2YXIgbTExID0gdGVbMF0sIG0xMiA9IHRlWzNdLCBtMTMgPSB0ZVs2XTtcclxuICAgIHZhciBtMjEgPSB0ZVsxXSwgbTIyID0gdGVbNF0sIG0yMyA9IHRlWzddO1xyXG4gICAgdmFyIG0zMSA9IHRlWzJdLCBtMzIgPSB0ZVs1XSwgbTMzID0gdGVbOF07XHJcbiAgICB2YXIgdGFyZ2V0ID0gb3V0LmFycmF5O1xyXG5cclxuICAgIHZhciBvcmRlciA9IChvcmRlciB8fCAnWFlaJykudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICBzd2l0Y2ggKG9yZGVyKSB7XHJcbiAgICAgICAgY2FzZSAnWFlaJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXNpbihjbGFtcChtMTMsIC0xLCAxKSk7XHJcbiAgICAgICAgICAgIGlmIChhYnMobTEzKSA8IDAuOTk5OTkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFswXSA9IGF0YW4yKC1tMjMsIG0zMyk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMigtbTEyLCBtMTEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIobTMyLCBtMjIpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWFonOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBhc2luKC1jbGFtcChtMjMsIC0xLCAxKSk7XHJcbiAgICAgICAgICAgIGlmIChhYnMobTIzKSA8IDAuOTk5OTkpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKG0xMywgbTMzKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsyXSA9IGF0YW4yKG0yMSwgbTIyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKC1tMzEsIG0xMSk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1pYWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IGFzaW4oY2xhbXAobTMyLCAtMSwgMSkpO1xyXG4gICAgICAgICAgICBpZiAoYWJzKG0zMikgPCAwLjk5OTk5KSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMV0gPSBhdGFuMigtbTMxLCBtMzMpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIoLW0xMiwgbTIyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMihtMjEsIG0xMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWllYJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXNpbigtY2xhbXAobTMxLCAtMSwgMSkpO1xyXG4gICAgICAgICAgICBpZiAoYWJzKG0zMSkgPCAwLjk5OTk5KSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSBhdGFuMihtMzIsIG0zMyk7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMl0gPSBhdGFuMihtMjEsIG0xMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSAwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzJdID0gYXRhbjIoLW0xMiwgbTIyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdZWlgnOlxyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBhc2luKGNsYW1wKG0yMSwgLTEsIDEpKTtcclxuICAgICAgICAgICAgaWYgKGFicyhtMjEpIDwgMC45OTk5OSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoLW0yMywgbTIyKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IGF0YW4yKC1tMzEsIG0xMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbMF0gPSAwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIobTEzLCBtMzMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1haWSc6XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGFzaW4oLWNsYW1wKG0xMiwgLTEsIDEpKTtcclxuICAgICAgICAgICAgaWYgKGFicyhtMTIpIDwgMC45OTk5OSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIobTMyLCBtMjIpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzFdID0gYXRhbjIobTEzLCBtMTEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0WzBdID0gYXRhbjIoLW0yMywgbTMzKTtcclxuICAgICAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmtvd24gb3JkZXI6ICcgKyBvcmRlcik7XHJcbiAgICB9XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVmVjdG9yMywge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKi9cclxuICAgIFBPU0lUSVZFX1g6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKDEsIDAsIDApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqL1xyXG4gICAgTkVHQVRJVkVfWDoge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoLTEsIDAsIDApO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAcmVhZE9ubHlcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjNcclxuICAgICAqL1xyXG4gICAgUE9TSVRJVkVfWToge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICovXHJcbiAgICBORUdBVElWRV9ZOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLCAtMSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yM1xyXG4gICAgICovXHJcbiAgICBQT1NJVElWRV9aOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLCAwLCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKi9cclxuICAgIE5FR0FUSVZFX1o6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKDAsIDAsIC0xKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKi9cclxuICAgIFVQOiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMygwLCAxLCAwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJlYWRPbmx5XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3IzXHJcbiAgICAgKi9cclxuICAgIFpFUk86IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFZlY3RvcjM7XHJcbiIsImltcG9ydCBxdWF0IGZyb20gJy4uL2dsbWF0cml4L3F1YXQnO1xyXG5pbXBvcnQgbWF0MyBmcm9tICcuLi9nbG1hdHJpeC9tYXQzJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuUXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKiBAcGFyYW0ge251bWJlcn0gelxyXG4gKiBAcGFyYW0ge251bWJlcn0gd1xyXG4gKi9cclxudmFyIFF1YXRlcm5pb24gPSBmdW5jdGlvbiAoeCwgeSwgeiwgdykge1xyXG5cclxuICAgIHggPSB4IHx8IDA7XHJcbiAgICB5ID0geSB8fCAwO1xyXG4gICAgeiA9IHogfHwgMDtcclxuICAgIHcgPSB3ID09PSB1bmRlZmluZWQgPyAxIDogdztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JhZ2Ugb2YgUXVhdGVybmlvbiwgcmVhZCBhbmQgd3JpdGUgb2YgeCwgeSwgeiwgdyB3aWxsIGNoYW5nZSB0aGUgdmFsdWVzIGluIGFycmF5XHJcbiAgICAgKiBBbGwgbWV0aG9kcyBhbHNvIG9wZXJhdGUgb24gdGhlIGFycmF5IGluc3RlYWQgb2YgeCwgeSwgeiwgdyBjb21wb25lbnRzXHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlF1YXRlcm5pb24jXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSBxdWF0LmZyb21WYWx1ZXMoeCwgeSwgeiwgdyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXJ0eSBmbGFnIGlzIHVzZWQgYnkgdGhlIE5vZGUgdG8gZGV0ZXJtaW5lXHJcbiAgICAgKiBpZiB0aGUgbWF0cml4IGlzIHVwZGF0ZWQgdG8gbGF0ZXN0XHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuUXVhdGVybmlvbiNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuUXVhdGVybmlvbi5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IFF1YXRlcm5pb24sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYiB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHF1YXQuYWRkKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIHcgY29tcG9uZW50IGZyb20geCwgeSwgeiBjb21wb25lbnRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgY2FsY3VsYXRlVzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHF1YXQuY2FsY3VsYXRlVyh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHgsIHkgYW5kIHogY29tcG9uZW50c1xyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgeVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgelxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgd1xyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh4LCB5LCB6LCB3KSB7XHJcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IHg7XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IHk7XHJcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IHo7XHJcbiAgICAgICAgdGhpcy5hcnJheVszXSA9IHc7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB4LCB5LCB6IGFuZCB3IGNvbXBvbmVudHMgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICB0aGlzLmFycmF5WzBdID0gYXJyWzBdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMV0gPSBhcnJbMV07XHJcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IGFyclsyXTtcclxuICAgICAgICB0aGlzLmFycmF5WzNdID0gYXJyWzNdO1xyXG5cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgUXVhdGVybmlvblxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUXVhdGVybmlvbih0aGlzLngsIHRoaXMueSwgdGhpcy56LCB0aGlzLncpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGNvbmp1Z2F0ZSBvZiBzZWxmIElmIHRoZSBxdWF0ZXJuaW9uIGlzIG5vcm1hbGl6ZWQsXHJcbiAgICAgKiB0aGlzIGZ1bmN0aW9uIGlzIGZhc3RlciB0aGFuIGludmVydCBhbmQgcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgY29uanVnYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcXVhdC5jb25qdWdhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgZnJvbSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICBxdWF0LmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uIChiKSB7XHJcbiAgICAgICAgcmV0dXJuIHF1YXQuZG90KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBmcm9tIHRoZSBnaXZlbiAzeDMgcm90YXRpb24gbWF0cml4XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDM6IGZ1bmN0aW9uIChtKSB7XHJcbiAgICAgICAgcXVhdC5mcm9tTWF0Myh0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gdGhlIGdpdmVuIDR4NCByb3RhdGlvbiBtYXRyaXhcclxuICAgICAqIFRoZSA0dGggY29sdW1uIGFuZCA0dGggcm93IHdpbGwgYmUgZHJvcGVkXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDQ6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG0zID0gbWF0My5jcmVhdGUoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG0pIHtcclxuICAgICAgICAgICAgbWF0My5mcm9tTWF0NChtMywgbS5hcnJheSk7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gTm90IGxpa2UgbWF0NCwgbWF0MyBpbiBnbG1hdHJpeCBzZWVtcyB0byBiZSByb3ctYmFzZWRcclxuICAgICAgICAgICAgbWF0My50cmFuc3Bvc2UobTMsIG0zKTtcclxuICAgICAgICAgICAgcXVhdC5mcm9tTWF0Myh0aGlzLmFycmF5LCBtMyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdG8gaWRlbnRpdHkgcXVhdGVybmlvblxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBpZGVudGl0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHF1YXQuaWRlbnRpdHkodGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogSW52ZXJ0IHNlbGZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgaW52ZXJ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcXVhdC5pbnZlcnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2YgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBxdWF0Lmxlbih0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGxlbmd0aFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBsZW5ndGg6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gcXVhdC5sZW5ndGgodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBhIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgdFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBsZXJwOiBmdW5jdGlvbiAoYSwgYiwgdCkge1xyXG4gICAgICAgIHF1YXQubGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgbXVsOiBmdW5jdGlvbiAoYikge1xyXG4gICAgICAgIHF1YXQubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgbXVsTGVmdDogZnVuY3Rpb24gKGEpIHtcclxuICAgICAgICBxdWF0Lm11bHRpcGx5KHRoaXMuYXJyYXksIGEuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdXRpcGx5IHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICBxdWF0Lm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdXRpcGx5IGEgYW5kIHNlbGZcclxuICAgICAqIFF1YXRlcm5pb24gbXV0aXBseSBpcyBub3QgY29tbXV0YXRpdmUsIHNvIHRoZSByZXN1bHQgb2YgbXV0aXBseUxlZnQgaXMgZGlmZmVyZW50IHdpdGggbXVsdGlwbHkuXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIHF1YXQubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbGl6ZSBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHF1YXQubm9ybWFsaXplKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gYXhpc1xyXG4gICAgICogQHBhcmFtIHJhZFxyXG4gICAgICovXHJcbiAgICByb3RhdGVBeGlzOmZ1bmN0aW9uIChheGlzLHJhZCkge1xyXG5cclxuICAgICAgICB2YXIgcXVhdDIgPSBuZXcgUXVhdGVybmlvbigpLmFycmF5O1xyXG5cclxuICAgICAgICBxdWF0LnJvdGF0ZUF4aXModGhpcy5hcnJheSxxdWF0MixheGlzLHJhZCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuIGFib3V0IFggYXhpc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICByb3RhdGVYOiBmdW5jdGlvbiAocmFkKSB7XHJcblxyXG4gICAgICAgIHF1YXQucm90YXRlWCh0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb3RhdGUgc2VsZiBieSBhIGdpdmVuIHJhZGlhbiBhYm91dCBZIGF4aXNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgcm90YXRlWTogZnVuY3Rpb24gKHJhZCkge1xyXG5cclxuICAgICAgICBxdWF0LnJvdGF0ZVkodGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWiBheGlzXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZVo6IGZ1bmN0aW9uIChyYWQpIHtcclxuICAgICAgICBxdWF0LnJvdGF0ZVoodGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBzZWxmIHRvIHJlcHJlc2VudCB0aGUgc2hvcnRlc3Qgcm90YXRpb24gZnJvbSBWZWN0b3IzIGEgdG8gVmVjdG9yMyBiLlxyXG4gICAgICogYSBhbmQgYiBuZWVkcyB0byBiZSBub3JtYWxpemVkXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gICAgICovXHJcbiAgICByb3RhdGlvblRvOiBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgIHF1YXQucm90YXRpb25Ubyh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHNlbGYgd2l0aCB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gYXhlc1xyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHZpZXdcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSByaWdodFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHVwXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHNldEF4ZXM6IGZ1bmN0aW9uICh2aWV3LCByaWdodCwgdXApIHtcclxuICAgICAgICBxdWF0LnNldEF4ZXModGhpcy5hcnJheSwgdmlldy5hcnJheSwgcmlnaHQuYXJyYXksIHVwLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBzZWxmIHdpdGggYSByb3RhdGlvbiBheGlzIGFuZCByb3RhdGlvbiBhbmdsZVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IGF4aXNcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgc2V0QXhpc0FuZ2xlOiBmdW5jdGlvbiAoYXhpcywgcmFkKSB7XHJcbiAgICAgICAgcXVhdC5zZXRBeGlzQW5nbGUodGhpcy5hcnJheSwgYXhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtIHNwaGVyaWNhbCBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGEgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICAgICAqL1xyXG4gICAgc2xlcnA6IGZ1bmN0aW9uIChhLCBiLCB0KSB7XHJcbiAgICAgICAgcXVhdC5zbGVycCh0aGlzLmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHNxdWFyZWRMZW5ndGhcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3FyTGVuOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHF1YXQuc3FyTGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNxdWFyZWQgbGVuZ3RoIG9mIHNlbGZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3F1YXJlZExlbmd0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBxdWF0LnNxdWFyZWRMZW5ndGgodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gZXVsZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSB2XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gb3JkZXJcclxuICAgICAqL1xyXG4gICAgZnJvbUV1bGVyOiBmdW5jdGlvbiAodiwgb3JkZXIpIHtcclxuICAgICAgICByZXR1cm4gUXVhdGVybmlvbi5mcm9tRXVsZXIodGhpcywgdiwgb3JkZXIpO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAnWycgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHRoaXMuYXJyYXksICcsJykgKyAnXSc7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XHJcbi8vIEdldHRlciBhbmQgU2V0dGVyXHJcbmlmIChkZWZpbmVQcm9wZXJ0eSkge1xyXG5cclxuICAgIHZhciBwcm90byA9IFF1YXRlcm5pb24ucHJvdG90eXBlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB4XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuUXVhdGVybmlvblxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneCcsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMF07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzBdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHlcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5RdWF0ZXJuaW9uXHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd5Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVsxXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgelxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlF1YXRlcm5pb25cclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3onLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzJdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsyXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB3XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuUXVhdGVybmlvblxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAndycsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbM107XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzNdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuLy8gU3VwcGx5IG1ldGhvZHMgdGhhdCBhcmUgbm90IGluIHBsYWNlXHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmFkZCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIHF1YXQuYWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgeFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICAgICB5XHJcbiAqIEBwYXJhbSAge251bWJlcn0gICAgIHpcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgd1xyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnNldCA9IGZ1bmN0aW9uIChvdXQsIHgsIHksIHosIHcpIHtcclxuICAgIHF1YXQuc2V0KG91dC5hcnJheSwgeCwgeSwgeiwgdyk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5jb3B5ID0gZnVuY3Rpb24gKG91dCwgYikge1xyXG4gICAgcXVhdC5jb3B5KG91dC5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uY2FsY3VsYXRlVyA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIHF1YXQuY2FsY3VsYXRlVyhvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmNvbmp1Z2F0ZSA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIHF1YXQuY29uanVnYXRlKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5pZGVudGl0eSA9IGZ1bmN0aW9uIChvdXQpIHtcclxuICAgIHF1YXQuaWRlbnRpdHkob3V0LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5pbnZlcnQgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBxdWF0LmludmVydChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuUXVhdGVybmlvbi5kb3QgPSBmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgcmV0dXJuIHF1YXQuZG90KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmxlbiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4gcXVhdC5sZW5ndGgoYS5hcnJheSk7XHJcbn07XHJcblxyXG4vLyBRdWF0ZXJuaW9uLmxlbmd0aCA9IFF1YXRlcm5pb24ubGVuO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGJcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgdFxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmxlcnAgPSBmdW5jdGlvbiAob3V0LCBhLCBiLCB0KSB7XHJcbiAgICBxdWF0LmxlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gICAgIHRcclxuICogQHJldHVybiB7Y2xheS5RdWF0ZXJuaW9ufVxyXG4gKi9cclxuUXVhdGVybmlvbi5zbGVycCA9IGZ1bmN0aW9uIChvdXQsIGEsIGIsIHQpIHtcclxuICAgIHF1YXQuc2xlcnAob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5LCB0KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ubXVsID0gZnVuY3Rpb24gKG91dCwgYSwgYikge1xyXG4gICAgcXVhdC5tdWx0aXBseShvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ubXVsdGlwbHkgPSBRdWF0ZXJuaW9uLm11bDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ucm90YXRlWCA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgcXVhdC5yb3RhdGVYKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ucm90YXRlWSA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgcXVhdC5yb3RhdGVZKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ucm90YXRlWiA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgcXVhdC5yb3RhdGVaKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9ICAgIGF4aXNcclxuICogQHBhcmFtICB7bnVtYmVyfSAgICAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uc2V0QXhpc0FuZ2xlID0gZnVuY3Rpb24gKG91dCwgYXhpcywgcmFkKSB7XHJcbiAgICBxdWF0LnNldEF4aXNBbmdsZShvdXQuYXJyYXksIGF4aXMuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24ubm9ybWFsaXplID0gZnVuY3Rpb24gKG91dCwgYSkge1xyXG4gICAgcXVhdC5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuUXVhdGVybmlvbi5zcXJMZW4gPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgcmV0dXJuIHF1YXQuc3FyTGVuKGEuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuUXVhdGVybmlvbi5zcXVhcmVkTGVuZ3RoID0gUXVhdGVybmlvbi5zcXJMZW47XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSAgICBtXHJcbiAqIEByZXR1cm4ge2NsYXkuUXVhdGVybmlvbn1cclxuICovXHJcblF1YXRlcm5pb24uZnJvbU1hdDMgPSBmdW5jdGlvbiAob3V0LCBtKSB7XHJcbiAgICBxdWF0LmZyb21NYXQzKG91dC5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICB2aWV3XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gICAgcmlnaHRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICB1cFxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnNldEF4ZXMgPSBmdW5jdGlvbiAob3V0LCB2aWV3LCByaWdodCwgdXApIHtcclxuICAgIHF1YXQuc2V0QXhlcyhvdXQuYXJyYXksIHZpZXcuYXJyYXksIHJpZ2h0LmFycmF5LCB1cC5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gICAgYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlF1YXRlcm5pb259XHJcbiAqL1xyXG5RdWF0ZXJuaW9uLnJvdGF0aW9uVG8gPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICBxdWF0LnJvdGF0aW9uVG8ob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgcXVhdGVybmlvbiBmcm9tIGV1bGVyXHJcbiAqIEBwYXJhbSB7Y2xheS5RdWF0ZXJuaW9ufSBvdXRcclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHZcclxuICogQHBhcmFtIHtTdHJpbmd9IG9yZGVyXHJcbiAqL1xyXG5RdWF0ZXJuaW9uLmZyb21FdWxlciA9IGZ1bmN0aW9uIChvdXQsIHYsIG9yZGVyKSB7XHJcblxyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgdiA9IHYuYXJyYXk7XHJcbiAgICB2YXIgdGFyZ2V0ID0gb3V0LmFycmF5O1xyXG4gICAgdmFyIGMxID0gTWF0aC5jb3ModlswXSAvIDIpO1xyXG4gICAgdmFyIGMyID0gTWF0aC5jb3ModlsxXSAvIDIpO1xyXG4gICAgdmFyIGMzID0gTWF0aC5jb3ModlsyXSAvIDIpO1xyXG4gICAgdmFyIHMxID0gTWF0aC5zaW4odlswXSAvIDIpO1xyXG4gICAgdmFyIHMyID0gTWF0aC5zaW4odlsxXSAvIDIpO1xyXG4gICAgdmFyIHMzID0gTWF0aC5zaW4odlsyXSAvIDIpO1xyXG5cclxuICAgIHZhciBvcmRlciA9IChvcmRlciB8fCAnWFlaJykudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAvLyBodHRwOi8vd3d3Lm1hdGh3b3Jrcy5jb20vbWF0bGFiY2VudHJhbC9maWxlZXhjaGFuZ2UvXHJcbiAgICAvLyAgMjA2OTYtZnVuY3Rpb24tdG8tY29udmVydC1iZXR3ZWVuLWRjbS1ldWxlci1hbmdsZXMtcXVhdGVybmlvbnMtYW5kLWV1bGVyLXZlY3RvcnMvXHJcbiAgICAvLyAgY29udGVudC9TcGluQ2FsYy5tXHJcblxyXG4gICAgc3dpdGNoIChvcmRlcikge1xyXG4gICAgICAgIGNhc2UgJ1hZWic6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IHMxICogYzIgKiBjMyArIGMxICogczIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYzEgKiBzMiAqIGMzIC0gczEgKiBjMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBjMSAqIGMyICogczMgKyBzMSAqIHMyICogYzM7XHJcbiAgICAgICAgICAgIHRhcmdldFszXSA9IGMxICogYzIgKiBjMyAtIHMxICogczIgKiBzMztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWVhaJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gczEgKiBjMiAqIGMzICsgYzEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBjMSAqIHMyICogYzMgLSBzMSAqIGMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGMxICogYzIgKiBzMyAtIHMxICogczIgKiBjMztcclxuICAgICAgICAgICAgdGFyZ2V0WzNdID0gYzEgKiBjMiAqIGMzICsgczEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdaWFknOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBzMSAqIGMyICogYzMgLSBjMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGMxICogczIgKiBjMyArIHMxICogYzIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYzEgKiBjMiAqIHMzICsgczEgKiBzMiAqIGMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbM10gPSBjMSAqIGMyICogYzMgLSBzMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1pZWCc6XHJcbiAgICAgICAgICAgIHRhcmdldFswXSA9IHMxICogYzIgKiBjMyAtIGMxICogczIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzFdID0gYzEgKiBzMiAqIGMzICsgczEgKiBjMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMl0gPSBjMSAqIGMyICogczMgLSBzMSAqIHMyICogYzM7XHJcbiAgICAgICAgICAgIHRhcmdldFszXSA9IGMxICogYzIgKiBjMyArIHMxICogczIgKiBzMztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnWVpYJzpcclxuICAgICAgICAgICAgdGFyZ2V0WzBdID0gczEgKiBjMiAqIGMzICsgYzEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbMV0gPSBjMSAqIHMyICogYzMgKyBzMSAqIGMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsyXSA9IGMxICogYzIgKiBzMyAtIHMxICogczIgKiBjMztcclxuICAgICAgICAgICAgdGFyZ2V0WzNdID0gYzEgKiBjMiAqIGMzIC0gczEgKiBzMiAqIHMzO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdYWlknOlxyXG4gICAgICAgICAgICB0YXJnZXRbMF0gPSBzMSAqIGMyICogYzMgLSBjMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIHRhcmdldFsxXSA9IGMxICogczIgKiBjMyAtIHMxICogYzIgKiBzMztcclxuICAgICAgICAgICAgdGFyZ2V0WzJdID0gYzEgKiBjMiAqIHMzICsgczEgKiBzMiAqIGMzO1xyXG4gICAgICAgICAgICB0YXJnZXRbM10gPSBjMSAqIGMyICogYzMgKyBzMSAqIHMyICogczM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUXVhdGVybmlvbjtcclxuIiwiaW1wb3J0IG1hdDQgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0NCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5pbXBvcnQgcXVhdCBmcm9tICcuLi9nbG1hdHJpeC9xdWF0JztcclxuaW1wb3J0IG1hdDMgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0Myc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4vVmVjdG9yMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5Lk1hdHJpeDRcclxuICovXHJcbnZhciBNYXRyaXg0ID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgdGhpcy5fYXhpc1ggPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgdGhpcy5fYXhpc1kgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgdGhpcy5fYXhpc1ogPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcmFnZSBvZiBNYXRyaXg0XHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDQjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSBtYXQ0LmNyZWF0ZSgpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgX2RpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDQjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbk1hdHJpeDQucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBNYXRyaXg0LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGNvbXBvbmVudHMgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcclxuICAgICAqL1xyXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVtpXSA9IGFycltpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBhZGp1Z2F0ZSBvZiBzZWxmLCBpbi1wbGFjZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBhZGpvaW50OiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQ0LmFkam9pbnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IE1hdHJpeDRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAobmV3IE1hdHJpeDQoKSkuY29weSh0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGZyb20gYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uKGEpIHtcclxuICAgICAgICBtYXQ0LmNvcHkodGhpcy5hcnJheSwgYS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBtYXRyaXggZGV0ZXJtaW5hbnRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGV0ZXJtaW5hbnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBtYXQ0LmRldGVybWluYW50KHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB1cHBlciAzeDMgcGFydCBmcm9tIHF1YXRlcm5pb25cclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBmcm9tUXVhdDogZnVuY3Rpb24ocSkge1xyXG4gICAgICAgIG1hdDQuZnJvbVF1YXQodGhpcy5hcnJheSwgcS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBmcm9tIGEgcXVhdGVybmlvbiByb3RhdGlvbiBhbmQgYSB2ZWN0b3IgdHJhbnNsYXRpb25cclxuICAgICAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSB2XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uOiBmdW5jdGlvbihxLCB2KSB7XHJcbiAgICAgICAgbWF0NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbih0aGlzLmFycmF5LCBxLmFycmF5LCB2LmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGZyb20gTWF0cml4MmQsIGl0IGlzIHVzZWQgd2hlbiBjb252ZXJ0aW5nIGEgMmQgc2hhcGUgdG8gM2Qgc3BhY2UuXHJcbiAgICAgKiBJbiAzZCBzcGFjZSBpdCBpcyBlcXVpdmFsZW50IHRvIHJhbnNsYXRlIG9uIHh5IHBsYW5lIGFuZCByb3RhdGUgYWJvdXQgeiBheGlzXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBtMmRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgZnJvbU1hdDJkOiBmdW5jdGlvbihtMmQpIHtcclxuICAgICAgICBNYXRyaXg0LmZyb21NYXQyZCh0aGlzLCBtMmQpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBmcm9tIGZydXN0dW0gYm91bmRzXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGxlZnRcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gcmlnaHRcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gYm90dG9tXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHRvcFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBuZWFyXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGZhclxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBmcnVzdHVtOiBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcclxuICAgICAgICBtYXQ0LmZydXN0dW0odGhpcy5hcnJheSwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdG8gYSBpZGVudGl0eSBtYXRyaXhcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgaWRlbnRpdHk6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDQuaWRlbnRpdHkodGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydCBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGludmVydDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0NC5pbnZlcnQodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhcyBhIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBleWUgcG9zaXRpb24sIGZvY2FsIHBvaW50LCBhbmQgdXAgYXhpc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBleWVcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gY2VudGVyXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHVwXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGxvb2tBdDogZnVuY3Rpb24oZXllLCBjZW50ZXIsIHVwKSB7XHJcbiAgICAgICAgbWF0NC5sb29rQXQodGhpcy5hcnJheSwgZXllLmFycmF5LCBjZW50ZXIuYXJyYXksIHVwLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11dGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBtdWw6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQ0Lm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5TGVmdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIG11bExlZnQ6IGZ1bmN0aW9uKGEpIHtcclxuICAgICAgICBtYXQ0Lm11bCh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0NC5tdWx0aXBseSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgYSBhbmQgc2VsZiwgYSBpcyBvbiB0aGUgbGVmdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIG11bHRpcGx5TGVmdDogZnVuY3Rpb24oYSkge1xyXG4gICAgICAgIG1hdDQubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhcyBhIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBsZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHJpZ2h0XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGJvdHRvbVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB0b3BcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gbmVhclxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBmYXJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgb3J0aG86IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XHJcbiAgICAgICAgbWF0NC5vcnRobyh0aGlzLmFycmF5LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcik7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU2V0IGFzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXhcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gZm92eVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBhc3BlY3RcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gbmVhclxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBmYXJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgcGVyc3BlY3RpdmU6IGZ1bmN0aW9uKGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKSB7XHJcbiAgICAgICAgbWF0NC5wZXJzcGVjdGl2ZSh0aGlzLmFycmF5LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcik7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IHJhZCBhYm91dCBheGlzLlxyXG4gICAgICogRXF1YWwgdG8gcmlnaHQtbXVsdGlwbHkgYSByb3RhaW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgIHJhZFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBheGlzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZTogZnVuY3Rpb24ocmFkLCBheGlzKSB7XHJcbiAgICAgICAgbWF0NC5yb3RhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkLCBheGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWCBheGlzLlxyXG4gICAgICogRXF1YWwgdG8gcmlnaHQtbXVsdGlwbHkgYSByb3RhaW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICByb3RhdGVYOiBmdW5jdGlvbihyYWQpIHtcclxuICAgICAgICBtYXQ0LnJvdGF0ZVgodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWSBheGlzLlxyXG4gICAgICogRXF1YWwgdG8gcmlnaHQtbXVsdGlwbHkgYSByb3RhaW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICByb3RhdGVZOiBmdW5jdGlvbihyYWQpIHtcclxuICAgICAgICBtYXQ0LnJvdGF0ZVkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW4gYWJvdXQgWiBheGlzLlxyXG4gICAgICogRXF1YWwgdG8gcmlnaHQtbXVsdGlwbHkgYSByb3RhaW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJhZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICByb3RhdGVaOiBmdW5jdGlvbihyYWQpIHtcclxuICAgICAgICBtYXQ0LnJvdGF0ZVoodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcmFkKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgc2VsZiBieSBzXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHNjYWxlIG1hdHJpeFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24odikge1xyXG4gICAgICAgIG1hdDQuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgdi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zbGF0ZSBzZWxmIGJ5IHYuXHJcbiAgICAgKiBFcXVhbCB0byByaWdodC1tdWx0aXBseSBhIHRyYW5zbGF0ZSBtYXRyaXhcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gIHZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgdHJhbnNsYXRlOiBmdW5jdGlvbih2KSB7XHJcbiAgICAgICAgbWF0NC50cmFuc2xhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgdi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zcG9zZSBzZWxmLCBpbi1wbGFjZS5cclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgdHJhbnNwb3NlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQ0LnRyYW5zcG9zZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVjb21wb3NlIGEgbWF0cml4IHRvIFNSVFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFtzY2FsZV1cclxuICAgICAqIEBwYXJhbSB7Y2xheS5RdWF0ZXJuaW9ufSByb3RhdGlvblxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3Rvcn0gcG9zaXRpb25cclxuICAgICAqIEBzZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21pY3Jvc29mdC54bmEuZnJhbWV3b3JrLm1hdHJpeC5kZWNvbXBvc2UuYXNweFxyXG4gICAgICovXHJcbiAgICBkZWNvbXBvc2VNYXRyaXg6IChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIHggPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB5ID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgeiA9IHZlYzMuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHZhciBtMyA9IG1hdDMuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihzY2FsZSwgcm90YXRpb24sIHBvc2l0aW9uKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB2ZWMzLnNldCh4LCBlbFswXSwgZWxbMV0sIGVsWzJdKTtcclxuICAgICAgICAgICAgdmVjMy5zZXQoeSwgZWxbNF0sIGVsWzVdLCBlbFs2XSk7XHJcbiAgICAgICAgICAgIHZlYzMuc2V0KHosIGVsWzhdLCBlbFs5XSwgZWxbMTBdKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzeCA9IHZlYzMubGVuZ3RoKHgpO1xyXG4gICAgICAgICAgICB2YXIgc3kgPSB2ZWMzLmxlbmd0aCh5KTtcclxuICAgICAgICAgICAgdmFyIHN6ID0gdmVjMy5sZW5ndGgoeik7XHJcblxyXG4gICAgICAgICAgICAvLyBpZiBkZXRlcm1pbmUgaXMgbmVnYXRpdmUsIHdlIG5lZWQgdG8gaW52ZXJ0IG9uZSBzY2FsZVxyXG4gICAgICAgICAgICB2YXIgZGV0ID0gdGhpcy5kZXRlcm1pbmFudCgpO1xyXG4gICAgICAgICAgICBpZiAoZGV0IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgc3ggPSAtc3g7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgc2NhbGUuc2V0KHN4LCBzeSwgc3opO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwb3NpdGlvbi5zZXQoZWxbMTJdLCBlbFsxM10sIGVsWzE0XSk7XHJcblxyXG4gICAgICAgICAgICBtYXQzLmZyb21NYXQ0KG0zLCBlbCk7XHJcbiAgICAgICAgICAgIC8vIE5vdCBsaWtlIG1hdDQsIG1hdDMgaW4gZ2xtYXRyaXggc2VlbXMgdG8gYmUgcm93LWJhc2VkXHJcbiAgICAgICAgICAgIC8vIFNlZW1zIGZpeGVkIGluIGdsLW1hdHJpeCAyLjIuMlxyXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdG9qaS9nbC1tYXRyaXgvaXNzdWVzLzExNFxyXG4gICAgICAgICAgICAvLyBtYXQzLnRyYW5zcG9zZShtMywgbTMpO1xyXG5cclxuICAgICAgICAgICAgbTNbMF0gLz0gc3g7XHJcbiAgICAgICAgICAgIG0zWzFdIC89IHN4O1xyXG4gICAgICAgICAgICBtM1syXSAvPSBzeDtcclxuXHJcbiAgICAgICAgICAgIG0zWzNdIC89IHN5O1xyXG4gICAgICAgICAgICBtM1s0XSAvPSBzeTtcclxuICAgICAgICAgICAgbTNbNV0gLz0gc3k7XHJcblxyXG4gICAgICAgICAgICBtM1s2XSAvPSBzejtcclxuICAgICAgICAgICAgbTNbN10gLz0gc3o7XHJcbiAgICAgICAgICAgIG0zWzhdIC89IHN6O1xyXG5cclxuICAgICAgICAgICAgcXVhdC5mcm9tTWF0Myhyb3RhdGlvbi5hcnJheSwgbTMpO1xyXG4gICAgICAgICAgICBxdWF0Lm5vcm1hbGl6ZShyb3RhdGlvbi5hcnJheSwgcm90YXRpb24uYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgcm90YXRpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcG9zaXRpb24uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuICdbJyArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwodGhpcy5hcnJheSwgJywnKSArICddJztcclxuICAgIH0sXHJcblxyXG4gICAgdG9BcnJheTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcclxuXHJcbmlmIChkZWZpbmVQcm9wZXJ0eSkge1xyXG4gICAgdmFyIHByb3RvID0gTWF0cml4NC5wcm90b3R5cGU7XHJcbiAgICAvKipcclxuICAgICAqIFogQXhpcyBvZiBsb2NhbCB0cmFuc2Zvcm1cclxuICAgICAqIEBuYW1lIHpcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5NYXRyaXg0XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd6Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB0aGlzLl9heGlzWi5zZXQoZWxbOF0sIGVsWzldLCBlbFsxMF0pO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXhpc1o7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gSGVyZSBoYXMgYSBwcm9ibGVtXHJcbiAgICAgICAgICAgIC8vIElmIG9ubHkgc2V0IGFuIGl0ZW0gb2YgdmVjdG9yIHdpbGwgbm90IHdvcmtcclxuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5hcnJheTtcclxuICAgICAgICAgICAgdiA9IHYuYXJyYXk7XHJcbiAgICAgICAgICAgIGVsWzhdID0gdlswXTtcclxuICAgICAgICAgICAgZWxbOV0gPSB2WzFdO1xyXG4gICAgICAgICAgICBlbFsxMF0gPSB2WzJdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogWSBBeGlzIG9mIGxvY2FsIHRyYW5zZm9ybVxyXG4gICAgICogQG5hbWUgeVxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuYXJyYXk7XHJcbiAgICAgICAgICAgIHRoaXMuX2F4aXNZLnNldChlbFs0XSwgZWxbNV0sIGVsWzZdKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F4aXNZO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB2ID0gdi5hcnJheTtcclxuICAgICAgICAgICAgZWxbNF0gPSB2WzBdO1xyXG4gICAgICAgICAgICBlbFs1XSA9IHZbMV07XHJcbiAgICAgICAgICAgIGVsWzZdID0gdlsyXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFggQXhpcyBvZiBsb2NhbCB0cmFuc2Zvcm1cclxuICAgICAqIEBuYW1lIHhcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5NYXRyaXg0XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd4Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSB0aGlzLmFycmF5O1xyXG4gICAgICAgICAgICB0aGlzLl9heGlzWC5zZXQoZWxbMF0sIGVsWzFdLCBlbFsyXSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9heGlzWDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5hcnJheTtcclxuICAgICAgICAgICAgdiA9IHYuYXJyYXk7XHJcbiAgICAgICAgICAgIGVsWzBdID0gdlswXTtcclxuICAgICAgICAgICAgZWxbMV0gPSB2WzFdO1xyXG4gICAgICAgICAgICBlbFsyXSA9IHZbMl07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LmFkam9pbnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDQuYWRqb2ludChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDQuY29weShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5NYXRyaXg0LmRldGVybWluYW50ID0gZnVuY3Rpb24oYSkge1xyXG4gICAgcmV0dXJuIG1hdDQuZGV0ZXJtaW5hbnQoYS5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgbWF0NC5pZGVudGl0eShvdXQuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIGxlZnRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgcmlnaHRcclxuICogQHBhcmFtICB7bnVtYmVyfSAgYm90dG9tXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHRvcFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBuZWFyXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIGZhclxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0Lm9ydGhvID0gZnVuY3Rpb24ob3V0LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xyXG4gICAgbWF0NC5vcnRobyhvdXQuYXJyYXksIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBmb3Z5XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIGFzcGVjdFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBuZWFyXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIGZhclxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnBlcnNwZWN0aXZlID0gZnVuY3Rpb24ob3V0LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcikge1xyXG4gICAgbWF0NC5wZXJzcGVjdGl2ZShvdXQuYXJyYXksIGZvdnksIGFzcGVjdCwgbmVhciwgZmFyKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGV5ZVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IGNlbnRlclxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHVwXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQubG9va0F0ID0gZnVuY3Rpb24ob3V0LCBleWUsIGNlbnRlciwgdXApIHtcclxuICAgIG1hdDQubG9va0F0KG91dC5hcnJheSwgZXllLmFycmF5LCBjZW50ZXIuYXJyYXksIHVwLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDQuaW52ZXJ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0Lm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgbWF0NC5tdWwob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0Lm11bHRpcGx5ID0gTWF0cml4NC5tdWw7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSAgICBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuZnJvbVF1YXQgPSBmdW5jdGlvbihvdXQsIHEpIHtcclxuICAgIG1hdDQuZnJvbVF1YXQob3V0LmFycmF5LCBxLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9ICAgIG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlF1YXRlcm5pb259IHFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSAgICB2XHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24gPSBmdW5jdGlvbihvdXQsIHEsIHYpIHtcclxuICAgIG1hdDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24ob3V0LmFycmF5LCBxLmFycmF5LCB2LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG00XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG0yZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LmZyb21NYXQyZCA9IGZ1bmN0aW9uKG00LCBtMmQpIHtcclxuICAgIG00Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICB2YXIgbTJkID0gbTJkLmFycmF5O1xyXG4gICAgdmFyIG00ID0gbTQuYXJyYXk7XHJcblxyXG4gICAgbTRbMF0gPSBtMmRbMF07XHJcbiAgICBtNFs0XSA9IG0yZFsyXTtcclxuICAgIG00WzEyXSA9IG0yZFs0XTtcclxuXHJcbiAgICBtNFsxXSA9IG0yZFsxXTtcclxuICAgIG00WzVdID0gbTJkWzNdO1xyXG4gICAgbTRbMTNdID0gbTJkWzVdO1xyXG5cclxuICAgIHJldHVybiBtNDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgcmFkXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gYXhpc1xyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnJvdGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkLCBheGlzKSB7XHJcbiAgICBtYXQ0LnJvdGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHJhZCwgYXhpcy5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHJhZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnJvdGF0ZVggPSBmdW5jdGlvbihvdXQsIGEsIHJhZCkge1xyXG4gICAgbWF0NC5yb3RhdGVYKG91dC5hcnJheSwgYS5hcnJheSwgcmFkKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgcmFkXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQucm90YXRlWSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XHJcbiAgICBtYXQ0LnJvdGF0ZVkob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICByYWRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC5yb3RhdGVaID0gZnVuY3Rpb24ob3V0LCBhLCByYWQpIHtcclxuICAgIG1hdDQucm90YXRlWihvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gdlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDR9XHJcbiAqL1xyXG5NYXRyaXg0LnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICBtYXQ0LnNjYWxlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4NH1cclxuICovXHJcbk1hdHJpeDQudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBtYXQ0LnRyYW5zcG9zZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gKi9cclxuTWF0cml4NC50cmFuc2xhdGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIG1hdDQudHJhbnNsYXRlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRyaXg0O1xyXG4iLCJpbXBvcnQgVmVjdG9yMyBmcm9tICcuL1ZlY3RvcjMnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcbnZhciB2ZWMzU2V0ID0gdmVjMy5zZXQ7XHJcbnZhciB2ZWMzQ29weSA9IHZlYzMuY29weTtcclxuXHJcbi8qKlxyXG4gKiBBeGlzIGFsaWduZWQgYm91bmRpbmcgYm94XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5Cb3VuZGluZ0JveFxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW21pbl1cclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFttYXhdXHJcbiAqL1xyXG52YXIgQm91bmRpbmdCb3ggPSBmdW5jdGlvbiAobWluLCBtYXgpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1pbmltdW0gY29vcmRzIG9mIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5taW4gPSBtaW4gfHwgbmV3IFZlY3RvcjMoSW5maW5pdHksIEluZmluaXR5LCBJbmZpbml0eSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXhpbXVtIGNvb3JkcyBvZiBib3VuZGluZyBib3hcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubWF4ID0gbWF4IHx8IG5ldyBWZWN0b3IzKC1JbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHkpO1xyXG5cclxuICAgIHRoaXMudmVydGljZXMgPSBudWxsO1xyXG59O1xyXG5cclxuQm91bmRpbmdCb3gucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBCb3VuZGluZ0JveCxcclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIG1pbiBhbmQgbWF4IGNvb3JkcyBmcm9tIGEgdmVydGljZXMgYXJyYXlcclxuICAgICAqIEBwYXJhbSAge2FycmF5fSB2ZXJ0aWNlc1xyXG4gICAgICovXHJcbiAgICB1cGRhdGVGcm9tVmVydGljZXM6IGZ1bmN0aW9uICh2ZXJ0aWNlcykge1xyXG4gICAgICAgIGlmICh2ZXJ0aWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbjtcclxuICAgICAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB2YXIgbWluQXJyID0gbWluLmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgbWF4QXJyID0gbWF4LmFycmF5O1xyXG4gICAgICAgICAgICB2ZWMzQ29weShtaW5BcnIsIHZlcnRpY2VzWzBdKTtcclxuICAgICAgICAgICAgdmVjM0NvcHkobWF4QXJyLCB2ZXJ0aWNlc1swXSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdmVydGljZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB2ZXJ0ZXggPSB2ZXJ0aWNlc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodmVydGV4WzBdIDwgbWluQXJyWzBdKSB7IG1pbkFyclswXSA9IHZlcnRleFswXTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleFsxXSA8IG1pbkFyclsxXSkgeyBtaW5BcnJbMV0gPSB2ZXJ0ZXhbMV07IH1cclxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhbMl0gPCBtaW5BcnJbMl0pIHsgbWluQXJyWzJdID0gdmVydGV4WzJdOyB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHZlcnRleFswXSA+IG1heEFyclswXSkgeyBtYXhBcnJbMF0gPSB2ZXJ0ZXhbMF07IH1cclxuICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhbMV0gPiBtYXhBcnJbMV0pIHsgbWF4QXJyWzFdID0gdmVydGV4WzFdOyB9XHJcbiAgICAgICAgICAgICAgICBpZiAodmVydGV4WzJdID4gbWF4QXJyWzJdKSB7IG1heEFyclsyXSA9IHZlcnRleFsyXTsgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICBtYXguX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVW5pb24gb3BlcmF0aW9uIHdpdGggYW5vdGhlciBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQm91bmRpbmdCb3h9IGJib3hcclxuICAgICAqL1xyXG4gICAgdW5pb246IGZ1bmN0aW9uIChiYm94KSB7XHJcbiAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluO1xyXG4gICAgICAgIHZhciBtYXggPSB0aGlzLm1heDtcclxuICAgICAgICB2ZWMzLm1pbihtaW4uYXJyYXksIG1pbi5hcnJheSwgYmJveC5taW4uYXJyYXkpO1xyXG4gICAgICAgIHZlYzMubWF4KG1heC5hcnJheSwgbWF4LmFycmF5LCBiYm94Lm1heC5hcnJheSk7XHJcbiAgICAgICAgbWluLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJzZWN0aW9uIG9wZXJhdGlvbiB3aXRoIGFub3RoZXIgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkJvdW5kaW5nQm94fSBiYm94XHJcbiAgICAgKi9cclxuICAgIGludGVyc2VjdGlvbjogZnVuY3Rpb24gKGJib3gpIHtcclxuICAgICAgICB2YXIgbWluID0gdGhpcy5taW47XHJcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xyXG4gICAgICAgIHZlYzMubWF4KG1pbi5hcnJheSwgbWluLmFycmF5LCBiYm94Lm1pbi5hcnJheSk7XHJcbiAgICAgICAgdmVjMy5taW4obWF4LmFycmF5LCBtYXguYXJyYXksIGJib3gubWF4LmFycmF5KTtcclxuICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICBtYXguX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBpbnRlcnNlY3Qgd2l0aCBhbm90aGVyIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5Cb3VuZGluZ0JveH0gYmJveFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaW50ZXJzZWN0Qm91bmRpbmdCb3g6IGZ1bmN0aW9uIChiYm94KSB7XHJcbiAgICAgICAgdmFyIF9taW4gPSB0aGlzLm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heCA9IHRoaXMubWF4LmFycmF5O1xyXG5cclxuICAgICAgICB2YXIgX21pbjIgPSBiYm94Lm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heDIgPSBiYm94Lm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgcmV0dXJuICEgKF9taW5bMF0gPiBfbWF4MlswXSB8fCBfbWluWzFdID4gX21heDJbMV0gfHwgX21pblsyXSA+IF9tYXgyWzJdXHJcbiAgICAgICAgICAgIHx8IF9tYXhbMF0gPCBfbWluMlswXSB8fCBfbWF4WzFdIDwgX21pbjJbMV0gfHwgX21heFsyXSA8IF9taW4yWzJdKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBjb250YWluIGFub3RoZXIgYm91bmRpbmcgYm94IGVudGlyZWx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkJvdW5kaW5nQm94fSBiYm94XHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBjb250YWluQm91bmRpbmdCb3g6IGZ1bmN0aW9uIChiYm94KSB7XHJcblxyXG4gICAgICAgIHZhciBfbWluID0gdGhpcy5taW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIF9tYXggPSB0aGlzLm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgdmFyIF9taW4yID0gYmJveC5taW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIF9tYXgyID0gYmJveC5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgIHJldHVybiBfbWluWzBdIDw9IF9taW4yWzBdICYmIF9taW5bMV0gPD0gX21pbjJbMV0gJiYgX21pblsyXSA8PSBfbWluMlsyXVxyXG4gICAgICAgICAgICAmJiBfbWF4WzBdID49IF9tYXgyWzBdICYmIF9tYXhbMV0gPj0gX21heDJbMV0gJiYgX21heFsyXSA+PSBfbWF4MlsyXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBjb250YWluIHBvaW50IGVudGlyZWx5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHBvaW50XHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBjb250YWluUG9pbnQ6IGZ1bmN0aW9uIChwKSB7XHJcbiAgICAgICAgdmFyIF9taW4gPSB0aGlzLm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgX21heCA9IHRoaXMubWF4LmFycmF5O1xyXG5cclxuICAgICAgICB2YXIgX3AgPSBwLmFycmF5O1xyXG5cclxuICAgICAgICByZXR1cm4gX21pblswXSA8PSBfcFswXSAmJiBfbWluWzFdIDw9IF9wWzFdICYmIF9taW5bMl0gPD0gX3BbMl1cclxuICAgICAgICAgICAgJiYgX21heFswXSA+PSBfcFswXSAmJiBfbWF4WzFdID49IF9wWzFdICYmIF9tYXhbMl0gPj0gX3BbMl07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgYm91bmRpbmcgYm94IGlzIGZpbml0ZVxyXG4gICAgICovXHJcbiAgICBpc0Zpbml0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfbWluID0gdGhpcy5taW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIF9tYXggPSB0aGlzLm1heC5hcnJheTtcclxuICAgICAgICByZXR1cm4gaXNGaW5pdGUoX21pblswXSkgJiYgaXNGaW5pdGUoX21pblsxXSkgJiYgaXNGaW5pdGUoX21pblsyXSlcclxuICAgICAgICAgICAgJiYgaXNGaW5pdGUoX21heFswXSkgJiYgaXNGaW5pdGUoX21heFsxXSkgJiYgaXNGaW5pdGUoX21heFsyXSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgYW4gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggdG8gdGhlIGJvdW5kaW5nIGJveFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtYXRyaXhcclxuICAgICAqL1xyXG4gICAgYXBwbHlUcmFuc2Zvcm06IGZ1bmN0aW9uIChtYXRyaXgpIHtcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybUZyb20odGhpcywgbWF0cml4KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZnJvbSBhbm90aGVyIGJvdW5kaW5nIGJveCBhbmQgYW4gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXguXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQm91bmRpbmdCb3h9IHNvdXJjZVxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICB0cmFuc2Zvcm1Gcm9tOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIGh0dHA6Ly9kZXYudGhlb21hZGVyLmNvbS90cmFuc2Zvcm0tYm91bmRpbmctYm94ZXMvXHJcbiAgICAgICAgdmFyIHhhID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgeGIgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB5YSA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHliID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgemEgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciB6YiA9IHZlYzMuY3JlYXRlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlLCBtYXRyaXgpIHtcclxuICAgICAgICAgICAgdmFyIG1pbiA9IHNvdXJjZS5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXggPSBzb3VyY2UubWF4LmFycmF5O1xyXG5cclxuICAgICAgICAgICAgdmFyIG0gPSBtYXRyaXguYXJyYXk7XHJcblxyXG4gICAgICAgICAgICB4YVswXSA9IG1bMF0gKiBtaW5bMF07IHhhWzFdID0gbVsxXSAqIG1pblswXTsgeGFbMl0gPSBtWzJdICogbWluWzBdO1xyXG4gICAgICAgICAgICB4YlswXSA9IG1bMF0gKiBtYXhbMF07IHhiWzFdID0gbVsxXSAqIG1heFswXTsgeGJbMl0gPSBtWzJdICogbWF4WzBdO1xyXG5cclxuICAgICAgICAgICAgeWFbMF0gPSBtWzRdICogbWluWzFdOyB5YVsxXSA9IG1bNV0gKiBtaW5bMV07IHlhWzJdID0gbVs2XSAqIG1pblsxXTtcclxuICAgICAgICAgICAgeWJbMF0gPSBtWzRdICogbWF4WzFdOyB5YlsxXSA9IG1bNV0gKiBtYXhbMV07IHliWzJdID0gbVs2XSAqIG1heFsxXTtcclxuXHJcbiAgICAgICAgICAgIHphWzBdID0gbVs4XSAqIG1pblsyXTsgemFbMV0gPSBtWzldICogbWluWzJdOyB6YVsyXSA9IG1bMTBdICogbWluWzJdO1xyXG4gICAgICAgICAgICB6YlswXSA9IG1bOF0gKiBtYXhbMl07IHpiWzFdID0gbVs5XSAqIG1heFsyXTsgemJbMl0gPSBtWzEwXSAqIG1heFsyXTtcclxuXHJcbiAgICAgICAgICAgIG1pbiA9IHRoaXMubWluLmFycmF5O1xyXG4gICAgICAgICAgICBtYXggPSB0aGlzLm1heC5hcnJheTtcclxuICAgICAgICAgICAgbWluWzBdID0gTWF0aC5taW4oeGFbMF0sIHhiWzBdKSArIE1hdGgubWluKHlhWzBdLCB5YlswXSkgKyBNYXRoLm1pbih6YVswXSwgemJbMF0pICsgbVsxMl07XHJcbiAgICAgICAgICAgIG1pblsxXSA9IE1hdGgubWluKHhhWzFdLCB4YlsxXSkgKyBNYXRoLm1pbih5YVsxXSwgeWJbMV0pICsgTWF0aC5taW4oemFbMV0sIHpiWzFdKSArIG1bMTNdO1xyXG4gICAgICAgICAgICBtaW5bMl0gPSBNYXRoLm1pbih4YVsyXSwgeGJbMl0pICsgTWF0aC5taW4oeWFbMl0sIHliWzJdKSArIE1hdGgubWluKHphWzJdLCB6YlsyXSkgKyBtWzE0XTtcclxuXHJcbiAgICAgICAgICAgIG1heFswXSA9IE1hdGgubWF4KHhhWzBdLCB4YlswXSkgKyBNYXRoLm1heCh5YVswXSwgeWJbMF0pICsgTWF0aC5tYXgoemFbMF0sIHpiWzBdKSArIG1bMTJdO1xyXG4gICAgICAgICAgICBtYXhbMV0gPSBNYXRoLm1heCh4YVsxXSwgeGJbMV0pICsgTWF0aC5tYXgoeWFbMV0sIHliWzFdKSArIE1hdGgubWF4KHphWzFdLCB6YlsxXSkgKyBtWzEzXTtcclxuICAgICAgICAgICAgbWF4WzJdID0gTWF0aC5tYXgoeGFbMl0sIHhiWzJdKSArIE1hdGgubWF4KHlhWzJdLCB5YlsyXSkgKyBNYXRoLm1heCh6YVsyXSwgemJbMl0pICsgbVsxNF07XHJcblxyXG4gICAgICAgICAgICB0aGlzLm1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm1heC5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhIHByb2plY3Rpb24gbWF0cml4IHRvIHRoZSBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4NH0gbWF0cml4XHJcbiAgICAgKi9cclxuICAgIGFwcGx5UHJvamVjdGlvbjogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG4gICAgICAgIHZhciBtaW4gPSB0aGlzLm1pbi5hcnJheTtcclxuICAgICAgICB2YXIgbWF4ID0gdGhpcy5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgIHZhciBtID0gbWF0cml4LmFycmF5O1xyXG4gICAgICAgIC8vIG1pbiBpbiBtaW4gelxyXG4gICAgICAgIHZhciB2MTAgPSBtaW5bMF07XHJcbiAgICAgICAgdmFyIHYxMSA9IG1pblsxXTtcclxuICAgICAgICB2YXIgdjEyID0gbWluWzJdO1xyXG4gICAgICAgIC8vIG1heCBpbiBtaW4gelxyXG4gICAgICAgIHZhciB2MjAgPSBtYXhbMF07XHJcbiAgICAgICAgdmFyIHYyMSA9IG1heFsxXTtcclxuICAgICAgICB2YXIgdjIyID0gbWluWzJdO1xyXG4gICAgICAgIC8vIG1heCBpbiBtYXggelxyXG4gICAgICAgIHZhciB2MzAgPSBtYXhbMF07XHJcbiAgICAgICAgdmFyIHYzMSA9IG1heFsxXTtcclxuICAgICAgICB2YXIgdjMyID0gbWF4WzJdO1xyXG5cclxuICAgICAgICBpZiAobVsxNV0gPT09IDEpIHsgIC8vIE9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uXHJcbiAgICAgICAgICAgIG1pblswXSA9IG1bMF0gKiB2MTAgKyBtWzEyXTtcclxuICAgICAgICAgICAgbWluWzFdID0gbVs1XSAqIHYxMSArIG1bMTNdO1xyXG4gICAgICAgICAgICBtYXhbMl0gPSBtWzEwXSAqIHYxMiArIG1bMTRdO1xyXG5cclxuICAgICAgICAgICAgbWF4WzBdID0gbVswXSAqIHYzMCArIG1bMTJdO1xyXG4gICAgICAgICAgICBtYXhbMV0gPSBtWzVdICogdjMxICsgbVsxM107XHJcbiAgICAgICAgICAgIG1pblsyXSA9IG1bMTBdICogdjMyICsgbVsxNF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgdyA9IC0xIC8gdjEyO1xyXG4gICAgICAgICAgICBtaW5bMF0gPSBtWzBdICogdjEwICogdztcclxuICAgICAgICAgICAgbWluWzFdID0gbVs1XSAqIHYxMSAqIHc7XHJcbiAgICAgICAgICAgIG1heFsyXSA9IChtWzEwXSAqIHYxMiArIG1bMTRdKSAqIHc7XHJcblxyXG4gICAgICAgICAgICB3ID0gLTEgLyB2MjI7XHJcbiAgICAgICAgICAgIG1heFswXSA9IG1bMF0gKiB2MjAgKiB3O1xyXG4gICAgICAgICAgICBtYXhbMV0gPSBtWzVdICogdjIxICogdztcclxuXHJcbiAgICAgICAgICAgIHcgPSAtMSAvIHYzMjtcclxuICAgICAgICAgICAgbWluWzJdID0gKG1bMTBdICogdjMyICsgbVsxNF0pICogdztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5taW4uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1heC5fZGlydHkgPSB0cnVlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlVmVydGljZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xyXG4gICAgICAgIGlmICghdmVydGljZXMpIHtcclxuICAgICAgICAgICAgLy8gQ3ViZSB2ZXJ0aWNlc1xyXG4gICAgICAgICAgICB2ZXJ0aWNlcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmVydGljZXNbaV0gPSB2ZWMzLmZyb21WYWx1ZXMoMCwgMCwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBFaWdodCBjb29yZHMgb2YgYm91bmRpbmcgYm94XHJcbiAgICAgICAgICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXlbXX1cclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG1pbiA9IHRoaXMubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBtYXggPSB0aGlzLm1heC5hcnJheTtcclxuICAgICAgICAvLy0tLSBtaW4gelxyXG4gICAgICAgIC8vIG1pbiB4XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1swXSwgbWluWzBdLCBtaW5bMV0sIG1pblsyXSk7XHJcbiAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1sxXSwgbWluWzBdLCBtYXhbMV0sIG1pblsyXSk7XHJcbiAgICAgICAgLy8gbWF4IHhcclxuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzJdLCBtYXhbMF0sIG1pblsxXSwgbWluWzJdKTtcclxuICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzNdLCBtYXhbMF0sIG1heFsxXSwgbWluWzJdKTtcclxuXHJcbiAgICAgICAgLy8tLSBtYXggelxyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbNF0sIG1pblswXSwgbWluWzFdLCBtYXhbMl0pO1xyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbNV0sIG1pblswXSwgbWF4WzFdLCBtYXhbMl0pO1xyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbNl0sIG1heFswXSwgbWluWzFdLCBtYXhbMl0pO1xyXG4gICAgICAgIHZlYzNTZXQodmVydGljZXNbN10sIG1heFswXSwgbWF4WzFdLCBtYXhbMl0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgdmFsdWVzIGZyb20gYW5vdGhlciBib3VuZGluZyBib3hcclxuICAgICAqIEBwYXJhbSAge2NsYXkuQm91bmRpbmdCb3h9IGJib3hcclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24gKGJib3gpIHtcclxuICAgICAgICB2YXIgbWluID0gdGhpcy5taW47XHJcbiAgICAgICAgdmFyIG1heCA9IHRoaXMubWF4O1xyXG4gICAgICAgIHZlYzNDb3B5KG1pbi5hcnJheSwgYmJveC5taW4uYXJyYXkpO1xyXG4gICAgICAgIHZlYzNDb3B5KG1heC5hcnJheSwgYmJveC5tYXguYXJyYXkpO1xyXG4gICAgICAgIG1pbi5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIG1heC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IGJvdW5kaW5nIGJveFxyXG4gICAgICogQHJldHVybiB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICBib3VuZGluZ0JveC5jb3B5KHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBib3VuZGluZ0JveDtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJvdW5kaW5nQm94O1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IFF1YXRlcm5pb24gZnJvbSAnLi9tYXRoL1F1YXRlcm5pb24nO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuL21hdGgvTWF0cml4NCc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4vZ2xtYXRyaXgvbWF0NCc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xyXG5cclxudmFyIG5hbWVJZCA9IDA7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuTm9kZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIE5vZGUgPSBCYXNlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkuTm9kZSMgKi97XHJcbiAgICAvKipcclxuICAgICAqIFNjZW5lIG5vZGUgbmFtZVxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgbmFtZTogJycsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3NpdGlvbiByZWxhdGl2ZSB0byBpdHMgcGFyZW50IG5vZGUuIGFrYSB0cmFuc2xhdGlvbi5cclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHBvc2l0aW9uOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRpb24gcmVsYXRpdmUgdG8gaXRzIHBhcmVudCBub2RlLiBSZXByZXNlbnRlZCBieSBhIHF1YXRlcm5pb25cclxuICAgICAqIEB0eXBlIHtjbGF5LlF1YXRlcm5pb259XHJcbiAgICAgKi9cclxuICAgIHJvdGF0aW9uOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2NhbGUgcmVsYXRpdmUgdG8gaXRzIHBhcmVudCBub2RlXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFmZmluZSB0cmFuc2Zvcm0gbWF0cml4IHJlbGF0aXZlIHRvIGl0cyByb290IHNjZW5lLlxyXG4gICAgICogQHR5cGUge2NsYXkuTWF0cml4NH1cclxuICAgICAqL1xyXG4gICAgd29ybGRUcmFuc2Zvcm06IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCByZWxhdGl2ZSB0byBpdHMgcGFyZW50IG5vZGUuXHJcbiAgICAgKiBDb21wb3NpdGVkIHdpdGggcG9zaXRpb24sIHJvdGF0aW9uIGFuZCBzY2FsZS5cclxuICAgICAqIEB0eXBlIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgKi9cclxuICAgIGxvY2FsVHJhbnNmb3JtOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhlIGxvY2FsIHRyYW5zZm9ybSBpcyB1cGRhdGUgZnJvbSBTUlQoc2NhbGUsIHJvdGF0aW9uLCB0cmFuc2xhdGlvbiwgd2hpY2ggaXMgcG9zaXRpb24gaGVyZSkgZWFjaCBmcmFtZVxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGF1dG9VcGRhdGVMb2NhbFRyYW5zZm9ybTogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcmVudCBvZiBjdXJyZW50IHNjZW5lIG5vZGVcclxuICAgICAqIEB0eXBlIHs/Y2xheS5Ob2RlfVxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgX3BhcmVudDogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJvb3Qgc2NlbmUgbW91bnRlZC4gTnVsbCBpZiBpdCBpcyBhIGlzb2xhdGVkIG5vZGVcclxuICAgICAqIEB0eXBlIHs/Y2xheS5TY2VuZX1cclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIF9zY2VuZTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfbmVlZHNVcGRhdGVXb3JsZFRyYW5zZm9ybTogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfaW5JdGVyYXRpbmc6IGZhbHNlLFxyXG5cclxuICAgIC8vIERlcHRoIGZvciB0cmFuc3BhcmVudCBsaXN0IHNvcnRpbmdcclxuICAgIF9fZGVwdGg6IDBcclxuXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICBpZiAoIXRoaXMubmFtZSkge1xyXG4gICAgICAgIHRoaXMubmFtZSA9ICh0aGlzLnR5cGUgfHwgJ05PREUnKSArICdfJyArIChuYW1lSWQrKyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucm90YXRpb24pIHtcclxuICAgICAgICB0aGlzLnJvdGF0aW9uID0gbmV3IFF1YXRlcm5pb24oKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zY2FsZSkge1xyXG4gICAgICAgIHRoaXMuc2NhbGUgPSBuZXcgVmVjdG9yMygxLCAxLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLndvcmxkVHJhbnNmb3JtID0gbmV3IE1hdHJpeDQoKTtcclxuICAgIHRoaXMubG9jYWxUcmFuc2Zvcm0gPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuICAgIHRoaXMuX2NoaWxkcmVuID0gW107XHJcblxyXG59LFxyXG4vKipAbGVuZHMgY2xheS5Ob2RlLnByb3RvdHlwZS4gKi9cclxue1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUgez9jbGF5LlZlY3RvcjN9XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgdGFyZ2V0OiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBub2RlIGFuZCBpdHMgY2hpbHJlbiBpbnZpc2libGVcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGludmlzaWJsZTogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBOb2RlIGlzIGEgc2tpbm5lZCBtZXNoXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc1NraW5uZWRNZXNoOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgaXQgaXMgYSByZW5kZXJhYmxlIHNjZW5lIG5vZGUsIGxpa2UgTWVzaCBhbmQgUGFydGljbGVTeXN0ZW1cclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzUmVuZGVyYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIG5hbWUgb2YgdGhlIHNjZW5lIG5vZGVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKi9cclxuICAgIHNldE5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5fc2NlbmU7XHJcbiAgICAgICAgaWYgKHNjZW5lKSB7XHJcbiAgICAgICAgICAgIHZhciBub2RlUmVwb3NpdG9yeSA9IHNjZW5lLl9ub2RlUmVwb3NpdG9yeTtcclxuICAgICAgICAgICAgZGVsZXRlIG5vZGVSZXBvc2l0b3J5W3RoaXMubmFtZV07XHJcbiAgICAgICAgICAgIG5vZGVSZXBvc2l0b3J5W25hbWVdID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYSBjaGlsZCBub2RlXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxyXG4gICAgICovXHJcbiAgICBhZGQ6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgdmFyIG9yaWdpbmFsUGFyZW50ID0gbm9kZS5fcGFyZW50O1xyXG4gICAgICAgIGlmIChvcmlnaW5hbFBhcmVudCA9PT0gdGhpcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcmlnaW5hbFBhcmVudCkge1xyXG4gICAgICAgICAgICBvcmlnaW5hbFBhcmVudC5yZW1vdmUobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5vZGUuX3BhcmVudCA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRyZW4ucHVzaChub2RlKTtcclxuXHJcbiAgICAgICAgdmFyIHNjZW5lID0gdGhpcy5fc2NlbmU7XHJcbiAgICAgICAgaWYgKHNjZW5lICYmIHNjZW5lICE9PSBub2RlLnNjZW5lKSB7XHJcbiAgICAgICAgICAgIG5vZGUudHJhdmVyc2UodGhpcy5fYWRkU2VsZlRvU2NlbmUsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBNYXJrIGNoaWxkcmVuIG5lZWRzIHVwZGF0ZSB0cmFuc2Zvcm1cclxuICAgICAgICAvLyBJbiBjYXNlIGNoaWxkIGFyZSByZW1vdmUgYW5kIGFkZGVkIGFnYWluIGFmdGVyIHBhcmVudCBtb3ZlZFxyXG4gICAgICAgIG5vZGUuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0gPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSB0aGUgZ2l2ZW4gY2hpbGQgc2NlbmUgbm9kZVxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk5vZGV9IG5vZGVcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIHZhciBpZHggPSBjaGlsZHJlbi5pbmRleE9mKG5vZGUpO1xyXG4gICAgICAgIGlmIChpZHggPCAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNoaWxkcmVuLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIG5vZGUuX3BhcmVudCA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9zY2VuZSkge1xyXG4gICAgICAgICAgICBub2RlLnRyYXZlcnNlKHRoaXMuX3JlbW92ZVNlbGZGcm9tU2NlbmUsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgYWxsIGNoaWxkcmVuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUFsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBjaGlsZHJlbi5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2lkeF0uX3BhcmVudCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fc2NlbmUpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuW2lkeF0udHJhdmVyc2UodGhpcy5fcmVtb3ZlU2VsZkZyb21TY2VuZSwgdGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2NoaWxkcmVuID0gW107XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHRoZSBzY2VuZSBtb3VudGVkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlNjZW5lfVxyXG4gICAgICovXHJcbiAgICBnZXRTY2VuZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zY2VuZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcGFyZW50IG5vZGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuU2NlbmV9XHJcbiAgICAgKi9cclxuICAgIGdldFBhcmVudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZW1vdmVTZWxmRnJvbVNjZW5lOiBmdW5jdGlvbiAoZGVzY2VuZGFudCkge1xyXG4gICAgICAgIGRlc2NlbmRhbnQuX3NjZW5lLnJlbW92ZUZyb21TY2VuZShkZXNjZW5kYW50KTtcclxuICAgICAgICBkZXNjZW5kYW50Ll9zY2VuZSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIF9hZGRTZWxmVG9TY2VuZTogZnVuY3Rpb24gKGRlc2NlbmRhbnQpIHtcclxuICAgICAgICB0aGlzLl9zY2VuZS5hZGRUb1NjZW5lKGRlc2NlbmRhbnQpO1xyXG4gICAgICAgIGRlc2NlbmRhbnQuX3NjZW5lID0gdGhpcy5fc2NlbmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgaXQgaXMgYW5jZXN0b3Igb2YgdGhlIGdpdmVuIHNjZW5lIG5vZGVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBub2RlXHJcbiAgICAgKi9cclxuICAgIGlzQW5jZXN0b3I6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUuX3BhcmVudDtcclxuICAgICAgICB3aGlsZShwYXJlbnQpIHtcclxuICAgICAgICAgICAgaWYgKHBhcmVudCA9PT0gdGhpcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50Ll9wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYSBuZXcgY3JlYXRlZCBhcnJheSBvZiBhbGwgY2hpbGRyZW4gbm9kZXNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZVtdfVxyXG4gICAgICovXHJcbiAgICBjaGlsZHJlbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbi5zbGljZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBjaGlsZCBzY2VuZSBub2RlIGF0IGdpdmVuIGluZGV4LlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGlkeFxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICBjaGlsZEF0OiBmdW5jdGlvbiAoaWR4KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuW2lkeF07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGZpcnN0IGNoaWxkIHdpdGggdGhlIGdpdmVuIG5hbWVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk5vZGV9XHJcbiAgICAgKi9cclxuICAgIGdldENoaWxkQnlOYW1lOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLm5hbWUgPT09IG5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZmlyc3QgZGVzY2VuZGFudCBoYXZlIHRoZSBnaXZlbiBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICovXHJcbiAgICBnZXREZXNjZW5kYW50QnlOYW1lOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5uYW1lID09PSBuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzID0gY2hpbGQuZ2V0RGVzY2VuZGFudEJ5TmFtZShuYW1lKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFF1ZXJ5IGRlc2NlbmRhbnQgbm9kZSBieSBwYXRoXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxyXG4gICAgICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqICBub2RlLnF1ZXJ5Tm9kZSgncm9vdC9wYXJlbnQvY2hpbGQnKTtcclxuICAgICAqL1xyXG4gICAgcXVlcnlOb2RlOiBmdW5jdGlvbiAocGF0aCkge1xyXG4gICAgICAgIGlmICghcGF0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE8gTmFtZSBoYXZlIHNsYXNoID9cclxuICAgICAgICB2YXIgcGF0aEFyciA9IHBhdGguc3BsaXQoJy8nKTtcclxuICAgICAgICB2YXIgY3VycmVudCA9IHRoaXM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoQXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gcGF0aEFycltpXTtcclxuICAgICAgICAgICAgLy8gU2tpcCBlbXB0eVxyXG4gICAgICAgICAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBjdXJyZW50Ll9jaGlsZHJlbjtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjaGlsZHJlbi5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5bal07XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQubmFtZSA9PT0gbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gRWFybHkgcmV0dXJuIGlmIG5vdCBmb3VuZFxyXG4gICAgICAgICAgICBpZiAoIWZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBxdWVyeSBwYXRoLCByZWxhdGl2ZSB0byByb290Tm9kZShkZWZhdWx0IGlzIHNjZW5lKVxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtyb290Tm9kZV1cclxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgZ2V0UGF0aDogZnVuY3Rpb24gKHJvb3ROb2RlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcvJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5fcGFyZW50O1xyXG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5uYW1lO1xyXG4gICAgICAgIHdoaWxlIChjdXJyZW50Ll9wYXJlbnQpIHtcclxuICAgICAgICAgICAgcGF0aCA9IGN1cnJlbnQubmFtZSArICcvJyArIHBhdGg7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50Ll9wYXJlbnQgPT0gcm9vdE5vZGUpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Ll9wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudC5fcGFyZW50ICYmIHJvb3ROb2RlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXB0aCBmaXJzdCB0cmF2ZXJzZSBhbGwgaXRzIGRlc2NlbmRhbnQgc2NlbmUgbm9kZXMuXHJcbiAgICAgKlxyXG4gICAgICogKipXQVJOKiogRG9uJ3QgZG8gYGFkZGAsIGByZW1vdmVgIG9wZXJhdGlvbiBpbiB0aGUgY2FsbGJhY2sgZHVyaW5nIHRyYXZlcnNlLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gW2NvbnRleHRdXHJcbiAgICAgKi9cclxuICAgIHRyYXZlcnNlOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNvbnRleHQpIHtcclxuICAgICAgICBjYWxsYmFjay5jYWxsKGNvbnRleHQsIHRoaXMpO1xyXG4gICAgICAgIHZhciBfY2hpbGRyZW4gPSB0aGlzLl9jaGlsZHJlbjtcclxuICAgICAgICBmb3IodmFyIGkgPSAwLCBsZW4gPSBfY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgX2NoaWxkcmVuW2ldLnRyYXZlcnNlKGNhbGxiYWNrLCBjb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhdmVyc2UgYWxsIGNoaWxkcmVuIG5vZGVzLlxyXG4gICAgICpcclxuICAgICAqICoqV0FSTioqIERPTidUIGRvIGBhZGRgLCBgcmVtb3ZlYCBvcGVyYXRpb24gaW4gdGhlIGNhbGxiYWNrIGR1cmluZyBpdGVyYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gW2NvbnRleHRdXHJcbiAgICAgKi9cclxuICAgIGVhY2hDaGlsZDogZnVuY3Rpb24gKGNhbGxiYWNrLCBjb250ZXh0KSB7XHJcbiAgICAgICAgdmFyIF9jaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG4gICAgICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IF9jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBfY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoY29udGV4dCwgY2hpbGQsIGkpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIGxvY2FsIHRyYW5zZm9ybSBhbmQgZGVjb21wb3NlIHRvIFNSVFxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBzZXRMb2NhbFRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG4gICAgICAgIG1hdDQuY29weSh0aGlzLmxvY2FsVHJhbnNmb3JtLmFycmF5LCBtYXRyaXguYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuZGVjb21wb3NlTG9jYWxUcmFuc2Zvcm0oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNvbXBvc2UgdGhlIGxvY2FsIHRyYW5zZm9ybSB0byBTUlRcclxuICAgICAqL1xyXG4gICAgZGVjb21wb3NlTG9jYWxUcmFuc2Zvcm06IGZ1bmN0aW9uIChrZWVwU2NhbGUpIHtcclxuICAgICAgICB2YXIgc2NhbGUgPSAha2VlcFNjYWxlID8gdGhpcy5zY2FsZTogbnVsbDtcclxuICAgICAgICB0aGlzLmxvY2FsVHJhbnNmb3JtLmRlY29tcG9zZU1hdHJpeChzY2FsZSwgdGhpcy5yb3RhdGlvbiwgdGhpcy5wb3NpdGlvbik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRoZSB3b3JsZCB0cmFuc2Zvcm0gYW5kIGRlY29tcG9zZSB0byBTUlRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5NYXRyaXg0fSBtYXRyaXhcclxuICAgICAqL1xyXG4gICAgc2V0V29ybGRUcmFuc2Zvcm06IGZ1bmN0aW9uIChtYXRyaXgpIHtcclxuICAgICAgICBtYXQ0LmNvcHkodGhpcy53b3JsZFRyYW5zZm9ybS5hcnJheSwgbWF0cml4LmFycmF5KTtcclxuICAgICAgICB0aGlzLmRlY29tcG9zZVdvcmxkVHJhbnNmb3JtKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVjb21wb3NlIHRoZSB3b3JsZCB0cmFuc2Zvcm0gdG8gU1JUXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqL1xyXG4gICAgZGVjb21wb3NlV29ybGRUcmFuc2Zvcm06IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciB0bXAgPSBtYXQ0LmNyZWF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGtlZXBTY2FsZSkge1xyXG4gICAgICAgICAgICB2YXIgbG9jYWxUcmFuc2Zvcm0gPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xyXG4gICAgICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtO1xyXG4gICAgICAgICAgICAvLyBBc3N1bWUgd29ybGQgdHJhbnNmb3JtIGlzIHVwZGF0ZWRcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgbWF0NC5pbnZlcnQodG1wLCB0aGlzLl9wYXJlbnQud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgbWF0NC5tdWx0aXBseShsb2NhbFRyYW5zZm9ybS5hcnJheSwgdG1wLCB3b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXQ0LmNvcHkobG9jYWxUcmFuc2Zvcm0uYXJyYXksIHdvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgc2NhbGUgPSAha2VlcFNjYWxlID8gdGhpcy5zY2FsZTogbnVsbDtcclxuICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm0uZGVjb21wb3NlTWF0cml4KHNjYWxlLCB0aGlzLnJvdGF0aW9uLCB0aGlzLnBvc2l0aW9uKTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICB0cmFuc2Zvcm1OZWVkc1VwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLl9kaXJ0eVxyXG4gICAgICAgICAgICB8fCB0aGlzLnJvdGF0aW9uLl9kaXJ0eVxyXG4gICAgICAgICAgICB8fCB0aGlzLnNjYWxlLl9kaXJ0eTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgbG9jYWwgdHJhbnNmb3JtIGZyb20gU1JUXHJcbiAgICAgKiBOb3RpY2UgdGhhdCBsb2NhbCB0cmFuc2Zvcm0gd2lsbCBub3QgYmUgdXBkYXRlZCBpZiBfZGlydHkgbWFyayBvZiBwb3NpdGlvbiwgcm90YXRpb24sIHNjYWxlIGlzIGFsbCBmYWxzZVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVMb2NhbFRyYW5zZm9ybTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb247XHJcbiAgICAgICAgdmFyIHJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbjtcclxuICAgICAgICB2YXIgc2NhbGUgPSB0aGlzLnNjYWxlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpKSB7XHJcbiAgICAgICAgICAgIHZhciBtID0gdGhpcy5sb2NhbFRyYW5zZm9ybS5hcnJheTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSBvcmRlciwgc2NhbGUtPnJvdGF0aW9uLT5wb3NpdGlvblxyXG4gICAgICAgICAgICBtYXQ0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG0sIHJvdGF0aW9uLmFycmF5LCBwb3NpdGlvbi5hcnJheSk7XHJcblxyXG4gICAgICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIHNjYWxlLmFycmF5KTtcclxuXHJcbiAgICAgICAgICAgIHJvdGF0aW9uLl9kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzY2FsZS5fZGlydHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgcG9zaXRpb24uX2RpcnR5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZVdvcmxkVHJhbnNmb3JtID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHdvcmxkIHRyYW5zZm9ybSwgYXNzdW1lIGl0cyBwYXJlbnQgd29ybGQgdHJhbnNmb3JtIGhhdmUgYmVlbiB1cGRhdGVkXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBfdXBkYXRlV29ybGRUcmFuc2Zvcm1Ub3BEb3duOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxvY2FsVHJhbnNmb3JtID0gdGhpcy5sb2NhbFRyYW5zZm9ybS5hcnJheTtcclxuICAgICAgICB2YXIgd29ybGRUcmFuc2Zvcm0gPSB0aGlzLndvcmxkVHJhbnNmb3JtLmFycmF5O1xyXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgICAgICAgbWF0NC5tdWx0aXBseUFmZmluZShcclxuICAgICAgICAgICAgICAgIHdvcmxkVHJhbnNmb3JtLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50LndvcmxkVHJhbnNmb3JtLmFycmF5LFxyXG4gICAgICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdDQuY29weSh3b3JsZFRyYW5zZm9ybSwgbG9jYWxUcmFuc2Zvcm0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgd29ybGQgdHJhbnNmb3JtIGJlZm9yZSB3aG9sZSBzY2VuZSBpcyB1cGRhdGVkLlxyXG4gICAgICovXHJcbiAgICB1cGRhdGVXb3JsZFRyYW5zZm9ybTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIEZpbmQgdGhlIHJvb3Qgbm9kZSB3aGljaCB0cmFuc2Zvcm0gbmVlZHMgdXBkYXRlO1xyXG4gICAgICAgIHZhciByb290Tm9kZUlzRGlydHkgPSB0aGlzO1xyXG4gICAgICAgIHdoaWxlIChyb290Tm9kZUlzRGlydHkgJiYgcm9vdE5vZGVJc0RpcnR5LmdldFBhcmVudCgpXHJcbiAgICAgICAgICAgICYmIHJvb3ROb2RlSXNEaXJ0eS5nZXRQYXJlbnQoKS50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJvb3ROb2RlSXNEaXJ0eSA9IHJvb3ROb2RlSXNEaXJ0eS5nZXRQYXJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcm9vdE5vZGVJc0RpcnR5LnVwZGF0ZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBsb2NhbCB0cmFuc2Zvcm0gYW5kIHdvcmxkIHRyYW5zZm9ybSByZWN1cnNpdmVseVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmb3JjZVVwZGF0ZVdvcmxkXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGZvcmNlVXBkYXRlV29ybGQpIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRvVXBkYXRlTG9jYWxUcmFuc2Zvcm0pIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVMb2NhbFRyYW5zZm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIGlzIG1hbnVhbGx5IHNldHRlZFxyXG4gICAgICAgICAgICBmb3JjZVVwZGF0ZVdvcmxkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JjZVVwZGF0ZVdvcmxkIHx8IHRoaXMuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0pIHtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlV29ybGRUcmFuc2Zvcm1Ub3BEb3duKCk7XHJcbiAgICAgICAgICAgIGZvcmNlVXBkYXRlV29ybGQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZVdvcmxkVHJhbnNmb3JtID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLl9jaGlsZHJlbjtcclxuICAgICAgICBmb3IodmFyIGkgPSAwLCBsZW4gPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjaGlsZHJlbltpXS51cGRhdGUoZm9yY2VVcGRhdGVXb3JsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBib3VuZGluZyBib3ggb2Ygbm9kZVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtmaWx0ZXJdXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkJvdW5kaW5nQm94fSBbb3V0XVxyXG4gICAgICogQHJldHVybiB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAqL1xyXG4gICAgLy8gVE9ETyBTa2lubmluZ1xyXG4gICAgZ2V0Qm91bmRpbmdCb3g6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZGVmYXVsdEZpbHRlciAoZWwpIHtcclxuICAgICAgICAgICAgcmV0dXJuICFlbC5pbnZpc2libGUgJiYgZWwuZ2VvbWV0cnk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0bXBCQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdmFyIHRtcE1hdDQgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBpbnZXb3JsZFRyYW5zZm9ybSA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmaWx0ZXIsIG91dCkge1xyXG4gICAgICAgICAgICBvdXQgPSBvdXQgfHwgbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgICAgIGZpbHRlciA9IGZpbHRlciB8fCBkZWZhdWx0RmlsdGVyO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgTWF0cml4NC5pbnZlcnQoaW52V29ybGRUcmFuc2Zvcm0sIHRoaXMuX3BhcmVudC53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBNYXRyaXg0LmlkZW50aXR5KGludldvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy50cmF2ZXJzZShmdW5jdGlvbiAobWVzaCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1lc2guZ2VvbWV0cnkgJiYgbWVzaC5nZW9tZXRyeS5ib3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcEJCb3guY29weShtZXNoLmdlb21ldHJ5LmJvdW5kaW5nQm94KTtcclxuICAgICAgICAgICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHRtcE1hdDQsIGludldvcmxkVHJhbnNmb3JtLCBtZXNoLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgICAgICAgICB0bXBCQm94LmFwcGx5VHJhbnNmb3JtKHRtcE1hdDQpO1xyXG4gICAgICAgICAgICAgICAgICAgIG91dC51bmlvbih0bXBCQm94KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgdGhpcywgZGVmYXVsdEZpbHRlcik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHdvcmxkIHBvc2l0aW9uLCBleHRyYWN0ZWQgZnJvbSB3b3JsZCB0cmFuc2Zvcm1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gW291dF1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgZ2V0V29ybGRQb3NpdGlvbjogZnVuY3Rpb24gKG91dCkge1xyXG4gICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICBpZiAodGhpcy50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlV29ybGRUcmFuc2Zvcm0oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG0gPSB0aGlzLndvcmxkVHJhbnNmb3JtLmFycmF5O1xyXG4gICAgICAgIGlmIChvdXQpIHtcclxuICAgICAgICAgICAgdmFyIGFyciA9IG91dC5hcnJheTtcclxuICAgICAgICAgICAgYXJyWzBdID0gbVsxMl07XHJcbiAgICAgICAgICAgIGFyclsxXSA9IG1bMTNdO1xyXG4gICAgICAgICAgICBhcnJbMl0gPSBtWzE0XTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmVjdG9yMyhtWzEyXSwgbVsxM10sIG1bMTRdKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgbm9kZVxyXG4gICAgICogQHJldHVybiB7Tm9kZX1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbm9kZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKCk7XHJcblxyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX2NoaWxkcmVuO1xyXG5cclxuICAgICAgICBub2RlLnNldE5hbWUodGhpcy5uYW1lKTtcclxuICAgICAgICBub2RlLnBvc2l0aW9uLmNvcHkodGhpcy5wb3NpdGlvbik7XHJcbiAgICAgICAgbm9kZS5yb3RhdGlvbi5jb3B5KHRoaXMucm90YXRpb24pO1xyXG4gICAgICAgIG5vZGUuc2NhbGUuY29weSh0aGlzLnNjYWxlKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBub2RlLmFkZChjaGlsZHJlbltpXS5jbG9uZSgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSB0aGUgbm9kZSBhcm91bmQgYSBheGlzIGJ5IGFuZ2xlIGRlZ3JlZXMsIGF4aXMgcGFzc2VzIHRocm91Z2ggcG9pbnRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBwb2ludCBDZW50ZXIgcG9pbnRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBheGlzICBDZW50ZXIgYXhpc1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9ICAgICAgIGFuZ2xlIFJvdGF0aW9uIGFuZ2xlXHJcbiAgICAgKiBAc2VlIGh0dHA6Ly9kb2NzLnVuaXR5M2QuY29tL0RvY3VtZW50YXRpb24vU2NyaXB0UmVmZXJlbmNlL1RyYW5zZm9ybS5Sb3RhdGVBcm91bmQuaHRtbFxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZUFyb3VuZDogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdiA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgdmFyIFJUTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETyBpbXByb3ZlIHBlcmZvcm1hbmNlXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChwb2ludCwgYXhpcywgYW5nbGUpIHtcclxuXHJcbiAgICAgICAgICAgIHYuY29weSh0aGlzLnBvc2l0aW9uKS5zdWJ0cmFjdChwb2ludCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgbG9jYWxUcmFuc2Zvcm0gPSB0aGlzLmxvY2FsVHJhbnNmb3JtO1xyXG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5pZGVudGl0eSgpO1xyXG4gICAgICAgICAgICAvLyBwYXJlbnQgbm9kZVxyXG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS50cmFuc2xhdGUocG9pbnQpO1xyXG4gICAgICAgICAgICBsb2NhbFRyYW5zZm9ybS5yb3RhdGUoYW5nbGUsIGF4aXMpO1xyXG5cclxuICAgICAgICAgICAgUlRNYXRyaXguZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24odGhpcy5yb3RhdGlvbiwgdik7XHJcbiAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtLm11bHRpcGx5KFJUTWF0cml4KTtcclxuICAgICAgICAgICAgbG9jYWxUcmFuc2Zvcm0uc2NhbGUodGhpcy5zY2FsZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRlY29tcG9zZUxvY2FsVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlV29ybGRUcmFuc2Zvcm0gPSB0cnVlO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHRhcmdldFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFt1cF1cclxuICAgICAqIEBzZWUgaHR0cDovL3d3dy5vcGVuZ2wub3JnL3Nkay9kb2NzL21hbjIveGh0bWwvZ2x1TG9va0F0LnhtbFxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKi9cclxuICAgIGxvb2tBdDogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbSA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHVwKSB7XHJcbiAgICAgICAgICAgIG0ubG9va0F0KHRoaXMucG9zaXRpb24sIHRhcmdldCwgdXAgfHwgdGhpcy5sb2NhbFRyYW5zZm9ybS55KS5pbnZlcnQoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRMb2NhbFRyYW5zZm9ybShtKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpXHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTm9kZTtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJ2ZWMzIGNhbGNBbWJpZW50U0hMaWdodChpbnQgaWR4LCB2ZWMzIE4pIHtcXG4gaW50IG9mZnNldCA9IDkgKiBpZHg7XFxuIHJldHVybiBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1swXVxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzFdICogTi54XFxuICsgYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbMl0gKiBOLnlcXG4gKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1szXSAqIE4uelxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzRdICogTi54ICogTi56XFxuICsgYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHNbNV0gKiBOLnogKiBOLnlcXG4gKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1s2XSAqIE4ueSAqIE4ueFxcbiArIGFtYmllbnRTSExpZ2h0Q29lZmZpY2llbnRzWzddICogKDMuMCAqIE4ueiAqIE4ueiAtIDEuMClcXG4gKyBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1s4XSAqIChOLnggKiBOLnggLSBOLnkgKiBOLnkpO1xcbn1cIjtcclxuIiwiaW1wb3J0IGNhbGNBbWJpZW50U0hMaWdodEVzc2wgZnJvbSAnLi9jYWxjQW1iaWVudFNITGlnaHQuZ2xzbC5qcyc7XHJcblxyXG52YXIgdW5pZm9ybVZlYzNQcmVmaXggPSAndW5pZm9ybSB2ZWMzICc7XHJcbnZhciB1bmlmb3JtRmxvYXRQcmVmaXggPSAndW5pZm9ybSBmbG9hdCAnO1xyXG52YXIgZXhwb3J0SGVhZGVyUHJlZml4ID0gJ0BleHBvcnQgY2xheS5oZWFkZXIuJztcclxudmFyIGV4cG9ydEVuZCA9ICdAZW5kJztcclxudmFyIHVuY29uZmlndXJhYmxlID0gJzp1bmNvbmZpZ3VyYWJsZTsnO1xyXG5leHBvcnQgZGVmYXVsdCBbXHJcbiAgICBleHBvcnRIZWFkZXJQcmVmaXggKyAnZGlyZWN0aW9uYWxfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbltESVJFQ1RJT05BTF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdkaXJlY3Rpb25hbExpZ2h0Q29sb3JbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgZXhwb3J0RW5kLFxyXG5cclxuICAgIGV4cG9ydEhlYWRlclByZWZpeCArICdhbWJpZW50X2xpZ2h0JyxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ2FtYmllbnRMaWdodENvbG9yW0FNQklFTlRfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgZXhwb3J0RW5kLFxyXG5cclxuICAgIGV4cG9ydEhlYWRlclByZWZpeCArICdhbWJpZW50X3NoX2xpZ2h0JyxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ2FtYmllbnRTSExpZ2h0Q29sb3JbQU1CSUVOVF9TSF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdhbWJpZW50U0hMaWdodENvZWZmaWNpZW50c1tBTUJJRU5UX1NIX0xJR0hUX0NPVU5UICogOV0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICBjYWxjQW1iaWVudFNITGlnaHRFc3NsLFxyXG4gICAgZXhwb3J0RW5kLFxyXG5cclxuICAgIGV4cG9ydEhlYWRlclByZWZpeCArICdhbWJpZW50X2N1YmVtYXBfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnYW1iaWVudEN1YmVtYXBMaWdodENvbG9yW0FNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICAndW5pZm9ybSBzYW1wbGVyQ3ViZSBhbWJpZW50Q3ViZW1hcExpZ2h0Q3ViZW1hcFtBTUJJRU5UX0NVQkVNQVBfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgJ3VuaWZvcm0gc2FtcGxlcjJEIGFtYmllbnRDdWJlbWFwTGlnaHRCUkRGTG9va3VwW0FNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICBleHBvcnRFbmQsXHJcblxyXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ3BvaW50X2xpZ2h0JyxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ3BvaW50TGlnaHRQb3NpdGlvbltQT0lOVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAncG9pbnRMaWdodFJhbmdlW1BPSU5UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1WZWMzUHJlZml4ICsgJ3BvaW50TGlnaHRDb2xvcltQT0lOVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICBleHBvcnRFbmQsXHJcblxyXG4gICAgZXhwb3J0SGVhZGVyUHJlZml4ICsgJ3Nwb3RfbGlnaHQnLFxyXG4gICAgdW5pZm9ybVZlYzNQcmVmaXggKyAnc3BvdExpZ2h0UG9zaXRpb25bU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdzcG90TGlnaHREaXJlY3Rpb25bU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAnc3BvdExpZ2h0UmFuZ2VbU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtRmxvYXRQcmVmaXggKyAnc3BvdExpZ2h0VW1icmFBbmdsZUNvc2luZVtTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIHVuaWZvcm1GbG9hdFByZWZpeCArICdzcG90TGlnaHRQZW51bWJyYUFuZ2xlQ29zaW5lW1NQT1RfTElHSFRfQ09VTlRdJyArIHVuY29uZmlndXJhYmxlLFxyXG4gICAgdW5pZm9ybUZsb2F0UHJlZml4ICsgJ3Nwb3RMaWdodEZhbGxvZmZGYWN0b3JbU1BPVF9MSUdIVF9DT1VOVF0nICsgdW5jb25maWd1cmFibGUsXHJcbiAgICB1bmlmb3JtVmVjM1ByZWZpeCArICdzcG90TGlnaHRDb2xvcltTUE9UX0xJR0hUX0NPVU5UXScgKyB1bmNvbmZpZ3VyYWJsZSxcclxuICAgIGV4cG9ydEVuZFxyXG5dLmpvaW4oJ1xcbicpO1xyXG4iLCJpbXBvcnQgTm9kZSBmcm9tICcuL05vZGUnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4vU2hhZGVyJztcclxuXHJcbmltcG9ydCBsaWdodFNoYWRlciBmcm9tICcuL3NoYWRlci9zb3VyY2UvaGVhZGVyL2xpZ2h0JztcclxuU2hhZGVyWydpbXBvcnQnXShsaWdodFNoYWRlcik7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuTGlnaHRcclxuICogQGV4dGVuZHMgY2xheS5Ob2RlXHJcbiAqL1xyXG52YXIgTGlnaHQgPSBOb2RlLmV4dGVuZChmdW5jdGlvbigpe1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5MaWdodCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIExpZ2h0IFJHQiBjb2xvclxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJbXX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb2xvcjogWzEsIDEsIDFdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBMaWdodCBpbnRlbnNpdHlcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGludGVuc2l0eTogMS4wLFxyXG5cclxuICAgICAgICAvLyBDb25maWcgZm9yIHNoYWRvdyBtYXBcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBsaWdodCBjYXN0IHNoYWRvd1xyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNhc3RTaGFkb3c6IHRydWUsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNoYWRvdyBtYXAgc2l6ZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2hhZG93UmVzb2x1dGlvbjogNTEyLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBMaWdodCBncm91cCwgc2hhZGVyIHdpdGggc2FtZSBgbGlnaHRHcm91cGAgd2lsbCBiZSBhZmZlY3RlZFxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogT25seSB1c2VmdWwgaW4gZm9yd2FyZCByZW5kZXJpbmdcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdyb3VwOiAwXHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuTGlnaHQucHJvdG90eXBlLiAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIExpZ2h0IHR5cGVcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5MaWdodCNcclxuICAgICAqL1xyXG4gICAgdHlwZTogJycsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LkxpZ2h0fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTGlnaHQucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgbGlnaHQgPSBOb2RlLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGxpZ2h0LmNvbG9yID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5jb2xvcik7XHJcbiAgICAgICAgbGlnaHQuaW50ZW5zaXR5ID0gdGhpcy5pbnRlbnNpdHk7XHJcbiAgICAgICAgbGlnaHQuY2FzdFNoYWRvdyA9IHRoaXMuY2FzdFNoYWRvdztcclxuICAgICAgICBsaWdodC5zaGFkb3dSZXNvbHV0aW9uID0gdGhpcy5zaGFkb3dSZXNvbHV0aW9uO1xyXG5cclxuICAgICAgICByZXR1cm4gbGlnaHQ7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlnaHQ7XHJcbiIsImltcG9ydCBWZWN0b3IzIGZyb20gJy4vVmVjdG9yMyc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4uL2dsbWF0cml4L21hdDQnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuaW1wb3J0IHZlYzQgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjNCc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlBsYW5lXHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBbbm9ybWFsXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2Rpc3RhbmNlXVxyXG4gKi9cclxudmFyIFBsYW5lID0gZnVuY3Rpb24obm9ybWFsLCBkaXN0YW5jZSkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBOb3JtYWwgb2YgdGhlIHBsYW5lXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLm5vcm1hbCA9IG5vcm1hbCB8fCBuZXcgVmVjdG9yMygwLCAxLCAwKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnN0YW50IG9mIHRoZSBwbGFuZSBlcXVhdGlvbiwgdXNlZCBhcyBkaXN0YW5jZSB0byB0aGUgb3JpZ2luXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmRpc3RhbmNlID0gZGlzdGFuY2UgfHwgMDtcclxufTtcclxuXHJcblBsYW5lLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogUGxhbmUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXN0YW5jZSBmcm9tIGEgZ2l2ZW4gcG9pbnQgdG8gdGhlIHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHBvaW50XHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlVG9Qb2ludDogZnVuY3Rpb24ocG9pbnQpIHtcclxuICAgICAgICByZXR1cm4gdmVjMy5kb3QocG9pbnQuYXJyYXksIHRoaXMubm9ybWFsLmFycmF5KSAtIHRoaXMuZGlzdGFuY2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBwcm9qZWN0aW9uIHBvaW50IG9uIHRoZSBwbGFuZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBwb2ludFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBvdXRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgcHJvamVjdFBvaW50OiBmdW5jdGlvbihwb2ludCwgb3V0KSB7XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGQgPSB0aGlzLmRpc3RhbmNlVG9Qb2ludChwb2ludCk7XHJcbiAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChvdXQuYXJyYXksIHBvaW50LmFycmF5LCB0aGlzLm5vcm1hbC5hcnJheSwgLWQpO1xyXG4gICAgICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTm9ybWFsaXplIHRoZSBwbGFuZSdzIG5vcm1hbCBhbmQgY2FsY3VsYXRlIHRoZSBkaXN0YW5jZVxyXG4gICAgICovXHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBpbnZMZW4gPSAxIC8gdmVjMy5sZW4odGhpcy5ub3JtYWwuYXJyYXkpO1xyXG4gICAgICAgIHZlYzMuc2NhbGUodGhpcy5ub3JtYWwuYXJyYXksIGludkxlbik7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSAqPSBpbnZMZW47XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhlIHBsYW5lIGludGVyc2VjdCBhIGZydXN0dW1cclxuICAgICAqIEBwYXJhbSAge2NsYXkuRnJ1c3R1bX0gRnJ1c3R1bVxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaW50ZXJzZWN0RnJ1c3R1bTogZnVuY3Rpb24oZnJ1c3R1bSkge1xyXG4gICAgICAgIC8vIENoZWNrIGlmIGFsbCBjb29yZHMgb2YgZnJ1c3R1bSBpcyBvbiBwbGFuZSBhbGwgdW5kZXIgcGxhbmVcclxuICAgICAgICB2YXIgY29vcmRzID0gZnJ1c3R1bS52ZXJ0aWNlcztcclxuICAgICAgICB2YXIgbm9ybWFsID0gdGhpcy5ub3JtYWwuYXJyYXk7XHJcbiAgICAgICAgdmFyIG9uUGxhbmUgPSB2ZWMzLmRvdChjb29yZHNbMF0uYXJyYXksIG5vcm1hbCkgPiB0aGlzLmRpc3RhbmNlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICgodmVjMy5kb3QoY29vcmRzW2ldLmFycmF5LCBub3JtYWwpID4gdGhpcy5kaXN0YW5jZSkgIT0gb25QbGFuZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBpbnRlcnNlY3Rpb24gcG9pbnQgYmV0d2VlbiBwbGFuZSBhbmQgYSBnaXZlbiBsaW5lXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBzdGFydCBzdGFydCBwb2ludCBvZiBsaW5lXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gZW5kIGVuZCBwb2ludCBvZiBsaW5lXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW291dF1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgaW50ZXJzZWN0TGluZTogKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciByZCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0YXJ0LCBlbmQsIG91dCkge1xyXG4gICAgICAgICAgICB2YXIgZDAgPSB0aGlzLmRpc3RhbmNlVG9Qb2ludChzdGFydCk7XHJcbiAgICAgICAgICAgIHZhciBkMSA9IHRoaXMuZGlzdGFuY2VUb1BvaW50KGVuZCk7XHJcbiAgICAgICAgICAgIGlmICgoZDAgPiAwICYmIGQxID4gMCkgfHwgKGQwIDwgMCAmJiBkMSA8IDApKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBSYXkgaW50ZXJzZWN0aW9uXHJcbiAgICAgICAgICAgIHZhciBwbiA9IHRoaXMubm9ybWFsLmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgZCA9IHRoaXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHZhciBybyA9IHN0YXJ0LmFycmF5O1xyXG4gICAgICAgICAgICAvLyBkaXJlY3Rpb25cclxuICAgICAgICAgICAgdmVjMy5zdWIocmQsIGVuZC5hcnJheSwgc3RhcnQuYXJyYXkpO1xyXG4gICAgICAgICAgICB2ZWMzLm5vcm1hbGl6ZShyZCwgcmQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRpdmlkZXIgPSB2ZWMzLmRvdChwbiwgcmQpO1xyXG4gICAgICAgICAgICAvLyByYXkgaXMgcGFyYWxsZWwgdG8gdGhlIHBsYW5lXHJcbiAgICAgICAgICAgIGlmIChkaXZpZGVyID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIW91dCkge1xyXG4gICAgICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdCA9ICh2ZWMzLmRvdChwbiwgcm8pIC0gZCkgLyBkaXZpZGVyO1xyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgcm8sIHJkLCAtdCk7XHJcbiAgICAgICAgICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgYW4gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggdG8gcGxhbmVcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fVxyXG4gICAgICovXHJcbiAgICBhcHBseVRyYW5zZm9ybTogKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBpbnZlcnNlVHJhbnNwb3NlID0gbWF0NC5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgbm9ybWFsdjQgPSB2ZWM0LmNyZWF0ZSgpO1xyXG4gICAgICAgIHZhciBwb2ludHY0ID0gdmVjNC5jcmVhdGUoKTtcclxuICAgICAgICBwb2ludHY0WzNdID0gMTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24obTQpIHtcclxuICAgICAgICAgICAgbTQgPSBtNC5hcnJheTtcclxuICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHBvaW50IG9uIHBsYW5lXHJcbiAgICAgICAgICAgIHZlYzMuc2NhbGUocG9pbnR2NCwgdGhpcy5ub3JtYWwuYXJyYXksIHRoaXMuZGlzdGFuY2UpO1xyXG4gICAgICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQocG9pbnR2NCwgcG9pbnR2NCwgbTQpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3RhbmNlID0gdmVjMy5kb3QocG9pbnR2NCwgdGhpcy5ub3JtYWwuYXJyYXkpO1xyXG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gcGxhbmUgbm9ybWFsXHJcbiAgICAgICAgICAgIG1hdDQuaW52ZXJ0KGludmVyc2VUcmFuc3Bvc2UsIG00KTtcclxuICAgICAgICAgICAgbWF0NC50cmFuc3Bvc2UoaW52ZXJzZVRyYW5zcG9zZSwgaW52ZXJzZVRyYW5zcG9zZSk7XHJcbiAgICAgICAgICAgIG5vcm1hbHY0WzNdID0gMDtcclxuICAgICAgICAgICAgdmVjMy5jb3B5KG5vcm1hbHY0LCB0aGlzLm5vcm1hbC5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChub3JtYWx2NCwgbm9ybWFsdjQsIGludmVyc2VUcmFuc3Bvc2UpO1xyXG4gICAgICAgICAgICB2ZWMzLmNvcHkodGhpcy5ub3JtYWwuYXJyYXksIG5vcm1hbHY0KTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgZnJvbSBhbm90aGVyIHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHBsYW5lXHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uKHBsYW5lKSB7XHJcbiAgICAgICAgdmVjMy5jb3B5KHRoaXMubm9ybWFsLmFycmF5LCBwbGFuZS5ub3JtYWwuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMubm9ybWFsLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9IHBsYW5lLmRpc3RhbmNlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IHBsYW5lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlBsYW5lfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHBsYW5lID0gbmV3IFBsYW5lKCk7XHJcbiAgICAgICAgcGxhbmUuY29weSh0aGlzKTtcclxuICAgICAgICByZXR1cm4gcGxhbmU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQbGFuZTtcclxuIiwiaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4vQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgUGxhbmUgZnJvbSAnLi9QbGFuZSc7XHJcblxyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcbnZhciB2ZWMzU2V0ID0gdmVjMy5zZXQ7XHJcbnZhciB2ZWMzQ29weSA9IHZlYzMuY29weTtcclxudmFyIHZlYzNUcmFuZm9ybU1hdDQgPSB2ZWMzLnRyYW5zZm9ybU1hdDQ7XHJcbnZhciBtYXRoTWluID0gTWF0aC5taW47XHJcbnZhciBtYXRoTWF4ID0gTWF0aC5tYXg7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuRnJ1c3R1bVxyXG4gKi9cclxudmFyIEZydXN0dW0gPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVpZ2h0IHBsYW5lcyB0byBlbmNsb3NlIHRoZSBmcnVzdHVtXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5QbGFuZVtdfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnBsYW5lcyA9IFtdO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5wbGFuZXMucHVzaChuZXcgUGxhbmUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCb3VuZGluZyBib3ggb2YgZnJ1c3R1bVxyXG4gICAgICogQHR5cGUge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVpZ2h0IHZlcnRpY2VzIG9mIGZydXN0dW1cclxuICAgICAqIEB0eXBlIHtGbG9hdDMyQXJyYXlbXX1cclxuICAgICAqL1xyXG4gICAgdGhpcy52ZXJ0aWNlcyA9IFtdO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICB0aGlzLnZlcnRpY2VzW2ldID0gdmVjMy5mcm9tVmFsdWVzKDAsIDAsIDApO1xyXG4gICAgfVxyXG59O1xyXG5cclxuRnJ1c3R1bS5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgLy8gaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMjA1MzEyMzEwMDUvaHR0cDovL2NyYXp5am9rZS5mcmVlLmZyL2RvYy8zRC9wbGFuZSUyMGV4dHJhY3Rpb24ucGRmXHJcbiAgICAvKipcclxuICAgICAqIFNldCBmcnVzdHVtIGZyb20gYSBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IHByb2plY3Rpb25NYXRyaXhcclxuICAgICAqL1xyXG4gICAgc2V0RnJvbVByb2plY3Rpb246IGZ1bmN0aW9uKHByb2plY3Rpb25NYXRyaXgpIHtcclxuXHJcbiAgICAgICAgdmFyIHBsYW5lcyA9IHRoaXMucGxhbmVzO1xyXG4gICAgICAgIHZhciBtID0gcHJvamVjdGlvbk1hdHJpeC5hcnJheTtcclxuICAgICAgICB2YXIgbTAgPSBtWzBdLCBtMSA9IG1bMV0sIG0yID0gbVsyXSwgbTMgPSBtWzNdO1xyXG4gICAgICAgIHZhciBtNCA9IG1bNF0sIG01ID0gbVs1XSwgbTYgPSBtWzZdLCBtNyA9IG1bN107XHJcbiAgICAgICAgdmFyIG04ID0gbVs4XSwgbTkgPSBtWzldLCBtMTAgPSBtWzEwXSwgbTExID0gbVsxMV07XHJcbiAgICAgICAgdmFyIG0xMiA9IG1bMTJdLCBtMTMgPSBtWzEzXSwgbTE0ID0gbVsxNF0sIG0xNSA9IG1bMTVdO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgcGxhbmVzXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbMF0ubm9ybWFsLmFycmF5LCBtMyAtIG0wLCBtNyAtIG00LCBtMTEgLSBtOCk7XHJcbiAgICAgICAgcGxhbmVzWzBdLmRpc3RhbmNlID0gLShtMTUgLSBtMTIpO1xyXG4gICAgICAgIHBsYW5lc1swXS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbMV0ubm9ybWFsLmFycmF5LCBtMyArIG0wLCBtNyArIG00LCBtMTEgKyBtOCk7XHJcbiAgICAgICAgcGxhbmVzWzFdLmRpc3RhbmNlID0gLShtMTUgKyBtMTIpO1xyXG4gICAgICAgIHBsYW5lc1sxXS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbMl0ubm9ybWFsLmFycmF5LCBtMyArIG0xLCBtNyArIG01LCBtMTEgKyBtOSk7XHJcbiAgICAgICAgcGxhbmVzWzJdLmRpc3RhbmNlID0gLShtMTUgKyBtMTMpO1xyXG4gICAgICAgIHBsYW5lc1syXS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbM10ubm9ybWFsLmFycmF5LCBtMyAtIG0xLCBtNyAtIG01LCBtMTEgLSBtOSk7XHJcbiAgICAgICAgcGxhbmVzWzNdLmRpc3RhbmNlID0gLShtMTUgLSBtMTMpO1xyXG4gICAgICAgIHBsYW5lc1szXS5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmVjM1NldChwbGFuZXNbNF0ubm9ybWFsLmFycmF5LCBtMyAtIG0yLCBtNyAtIG02LCBtMTEgLSBtMTApO1xyXG4gICAgICAgIHBsYW5lc1s0XS5kaXN0YW5jZSA9IC0obTE1IC0gbTE0KTtcclxuICAgICAgICBwbGFuZXNbNF0ubm9ybWFsaXplKCk7XHJcblxyXG4gICAgICAgIHZlYzNTZXQocGxhbmVzWzVdLm5vcm1hbC5hcnJheSwgbTMgKyBtMiwgbTcgKyBtNiwgbTExICsgbTEwKTtcclxuICAgICAgICBwbGFuZXNbNV0uZGlzdGFuY2UgPSAtKG0xNSArIG0xNCk7XHJcbiAgICAgICAgcGxhbmVzWzVdLm5vcm1hbGl6ZSgpO1xyXG5cclxuICAgICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9uXHJcbiAgICAgICAgdmFyIGJvdW5kaW5nQm94ID0gdGhpcy5ib3VuZGluZ0JveDtcclxuICAgICAgICB2YXIgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xyXG4gICAgICAgIGlmIChtMTUgPT09IDApICB7XHJcbiAgICAgICAgICAgIHZhciBhc3BlY3QgPSBtNSAvIG0wO1xyXG4gICAgICAgICAgICB2YXIgek5lYXIgPSAtbTE0IC8gKG0xMCAtIDEpO1xyXG4gICAgICAgICAgICB2YXIgekZhciA9IC1tMTQgLyAobTEwICsgMSk7XHJcbiAgICAgICAgICAgIHZhciBmYXJZID0gLXpGYXIgLyBtNTtcclxuICAgICAgICAgICAgdmFyIG5lYXJZID0gLXpOZWFyIC8gbTU7XHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBib3VuZGluZyBib3hcclxuICAgICAgICAgICAgYm91bmRpbmdCb3gubWluLnNldCgtZmFyWSAqIGFzcGVjdCwgLWZhclksIHpGYXIpO1xyXG4gICAgICAgICAgICBib3VuZGluZ0JveC5tYXguc2V0KGZhclkgKiBhc3BlY3QsIGZhclksIHpOZWFyKTtcclxuICAgICAgICAgICAgLy8gdXBkYXRlIHZlcnRpY2VzXHJcbiAgICAgICAgICAgIC8vLS0tIG1pbiB6XHJcbiAgICAgICAgICAgIC8vIG1pbiB4XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbMF0sIC1mYXJZICogYXNwZWN0LCAtZmFyWSwgekZhcik7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbMV0sIC1mYXJZICogYXNwZWN0LCBmYXJZLCB6RmFyKTtcclxuICAgICAgICAgICAgLy8gbWF4IHhcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1syXSwgZmFyWSAqIGFzcGVjdCwgLWZhclksIHpGYXIpO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzNdLCBmYXJZICogYXNwZWN0LCBmYXJZLCB6RmFyKTtcclxuICAgICAgICAgICAgLy8tLSBtYXggelxyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzRdLCAtbmVhclkgKiBhc3BlY3QsIC1uZWFyWSwgek5lYXIpO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzVdLCAtbmVhclkgKiBhc3BlY3QsIG5lYXJZLCB6TmVhcik7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNl0sIG5lYXJZICogYXNwZWN0LCAtbmVhclksIHpOZWFyKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s3XSwgbmVhclkgKiBhc3BlY3QsIG5lYXJZLCB6TmVhcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgeyAvLyBPcnRob2dyYXBoaWMgcHJvamVjdGlvblxyXG4gICAgICAgICAgICB2YXIgbGVmdCA9ICgtMSAtIG0xMikgLyBtMDtcclxuICAgICAgICAgICAgdmFyIHJpZ2h0ID0gKDEgLSBtMTIpIC8gbTA7XHJcbiAgICAgICAgICAgIHZhciB0b3AgPSAoMSAtIG0xMykgLyBtNTtcclxuICAgICAgICAgICAgdmFyIGJvdHRvbSA9ICgtMSAtIG0xMykgLyBtNTtcclxuICAgICAgICAgICAgdmFyIG5lYXIgPSAoLTEgLSBtMTQpIC8gbTEwO1xyXG4gICAgICAgICAgICB2YXIgZmFyID0gKDEgLSBtMTQpIC8gbTEwO1xyXG5cclxuXHJcbiAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1pbi5zZXQoTWF0aC5taW4obGVmdCwgcmlnaHQpLCBNYXRoLm1pbihib3R0b20sIHRvcCksIE1hdGgubWluKGZhciwgbmVhcikpO1xyXG4gICAgICAgICAgICBib3VuZGluZ0JveC5tYXguc2V0KE1hdGgubWF4KHJpZ2h0LCBsZWZ0KSwgTWF0aC5tYXgodG9wLCBib3R0b20pLCBNYXRoLm1heChuZWFyLCBmYXIpKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBtaW4gPSBib3VuZGluZ0JveC5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXggPSBib3VuZGluZ0JveC5tYXguYXJyYXk7XHJcbiAgICAgICAgICAgIC8vLS0tIG1pbiB6XHJcbiAgICAgICAgICAgIC8vIG1pbiB4XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbMF0sIG1pblswXSwgbWluWzFdLCBtaW5bMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzFdLCBtaW5bMF0sIG1heFsxXSwgbWluWzJdKTtcclxuICAgICAgICAgICAgLy8gbWF4IHhcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1syXSwgbWF4WzBdLCBtaW5bMV0sIG1pblsyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbM10sIG1heFswXSwgbWF4WzFdLCBtaW5bMl0pO1xyXG4gICAgICAgICAgICAvLy0tIG1heCB6XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbNF0sIG1pblswXSwgbWluWzFdLCBtYXhbMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHZlcnRpY2VzWzVdLCBtaW5bMF0sIG1heFsxXSwgbWF4WzJdKTtcclxuICAgICAgICAgICAgdmVjM1NldCh2ZXJ0aWNlc1s2XSwgbWF4WzBdLCBtaW5bMV0sIG1heFsyXSk7XHJcbiAgICAgICAgICAgIHZlYzNTZXQodmVydGljZXNbN10sIG1heFswXSwgbWF4WzFdLCBtYXhbMl0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhIGFmZmluZSB0cmFuc2Zvcm0gbWF0cml4IGFuZCBzZXQgdG8gdGhlIGdpdmVuIGJvdW5kaW5nIGJveFxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgKi9cclxuICAgIGdldFRyYW5zZm9ybWVkQm91bmRpbmdCb3g6IChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIHRtcFZlYzMgPSB2ZWMzLmNyZWF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oYmJveCwgbWF0cml4KSB7XHJcbiAgICAgICAgICAgIHZhciB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXM7XHJcblxyXG4gICAgICAgICAgICB2YXIgbTQgPSBtYXRyaXguYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtaW4gPSBiYm94Lm1pbjtcclxuICAgICAgICAgICAgdmFyIG1heCA9IGJib3gubWF4O1xyXG4gICAgICAgICAgICB2YXIgbWluQXJyID0gbWluLmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgbWF4QXJyID0gbWF4LmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgdiA9IHZlcnRpY2VzWzBdO1xyXG4gICAgICAgICAgICB2ZWMzVHJhbmZvcm1NYXQ0KHRtcFZlYzMsIHYsIG00KTtcclxuICAgICAgICAgICAgdmVjM0NvcHkobWluQXJyLCB0bXBWZWMzKTtcclxuICAgICAgICAgICAgdmVjM0NvcHkobWF4QXJyLCB0bXBWZWMzKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gdmVydGljZXNbaV07XHJcbiAgICAgICAgICAgICAgICB2ZWMzVHJhbmZvcm1NYXQ0KHRtcFZlYzMsIHYsIG00KTtcclxuXHJcbiAgICAgICAgICAgICAgICBtaW5BcnJbMF0gPSBtYXRoTWluKHRtcFZlYzNbMF0sIG1pbkFyclswXSk7XHJcbiAgICAgICAgICAgICAgICBtaW5BcnJbMV0gPSBtYXRoTWluKHRtcFZlYzNbMV0sIG1pbkFyclsxXSk7XHJcbiAgICAgICAgICAgICAgICBtaW5BcnJbMl0gPSBtYXRoTWluKHRtcFZlYzNbMl0sIG1pbkFyclsyXSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbWF4QXJyWzBdID0gbWF0aE1heCh0bXBWZWMzWzBdLCBtYXhBcnJbMF0pO1xyXG4gICAgICAgICAgICAgICAgbWF4QXJyWzFdID0gbWF0aE1heCh0bXBWZWMzWzFdLCBtYXhBcnJbMV0pO1xyXG4gICAgICAgICAgICAgICAgbWF4QXJyWzJdID0gbWF0aE1heCh0bXBWZWMzWzJdLCBtYXhBcnJbMl0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtaW4uX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF4Ll9kaXJ0eSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gYmJveDtcclxuICAgICAgICB9O1xyXG4gICAgfSkgKClcclxufTtcclxuZXhwb3J0IGRlZmF1bHQgRnJ1c3R1bTtcclxuIiwiaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9WZWN0b3IzJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG52YXIgRVBTSUxPTiA9IDFlLTU7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlJheVxyXG4gKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gW29yaWdpbl1cclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFtkaXJlY3Rpb25dXHJcbiAqL1xyXG52YXIgUmF5ID0gZnVuY3Rpb24gKG9yaWdpbiwgZGlyZWN0aW9uKSB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMub3JpZ2luID0gb3JpZ2luIHx8IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZGlyZWN0aW9uID0gZGlyZWN0aW9uIHx8IG5ldyBWZWN0b3IzKCk7XHJcbn07XHJcblxyXG5SYXkucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBSYXksXHJcblxyXG4gICAgLy8gaHR0cDovL3d3dy5zaWdncmFwaC5vcmcvZWR1Y2F0aW9uL21hdGVyaWFscy9IeXBlckdyYXBoL3JheXRyYWNlL3JheXBsYW5lX2ludGVyc2VjdGlvbi5odG1cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIHJheSBhbmQgYSBnaXZlIHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlBsYW5lfSBwbGFuZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBbb3V0XVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RQbGFuZTogZnVuY3Rpb24gKHBsYW5lLCBvdXQpIHtcclxuICAgICAgICB2YXIgcG4gPSBwbGFuZS5ub3JtYWwuYXJyYXk7XHJcbiAgICAgICAgdmFyIGQgPSBwbGFuZS5kaXN0YW5jZTtcclxuICAgICAgICB2YXIgcm8gPSB0aGlzLm9yaWdpbi5hcnJheTtcclxuICAgICAgICB2YXIgcmQgPSB0aGlzLmRpcmVjdGlvbi5hcnJheTtcclxuXHJcbiAgICAgICAgdmFyIGRpdmlkZXIgPSB2ZWMzLmRvdChwbiwgcmQpO1xyXG4gICAgICAgIC8vIHJheSBpcyBwYXJhbGxlbCB0byB0aGUgcGxhbmVcclxuICAgICAgICBpZiAoZGl2aWRlciA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFvdXQpIHtcclxuICAgICAgICAgICAgb3V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHQgPSAodmVjMy5kb3QocG4sIHJvKSAtIGQpIC8gZGl2aWRlcjtcclxuICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgcm8sIHJkLCAtdCk7XHJcbiAgICAgICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNaXJyb3IgdGhlIHJheSBhZ2FpbnN0IHBsYW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlBsYW5lfSBwbGFuZVxyXG4gICAgICovXHJcbiAgICBtaXJyb3JBZ2FpbnN0UGxhbmU6IGZ1bmN0aW9uIChwbGFuZSkge1xyXG4gICAgICAgIC8vIERpc3RhbmNlIHRvIHBsYW5lXHJcbiAgICAgICAgdmFyIGQgPSB2ZWMzLmRvdChwbGFuZS5ub3JtYWwuYXJyYXksIHRoaXMuZGlyZWN0aW9uLmFycmF5KTtcclxuICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHRoaXMuZGlyZWN0aW9uLmFycmF5LCB0aGlzLmRpcmVjdGlvbi5hcnJheSwgcGxhbmUubm9ybWFsLmFycmF5LCAtZCAqIDIpO1xyXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uLl9kaXJ0eSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGRpc3RhbmNlVG9Qb2ludDogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdiA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChwb2ludCkge1xyXG4gICAgICAgICAgICB2ZWMzLnN1Yih2LCBwb2ludCwgdGhpcy5vcmlnaW4uYXJyYXkpO1xyXG4gICAgICAgICAgICAvLyBEaXN0YW5jZSBmcm9tIHByb2plY3Rpb24gcG9pbnQgdG8gb3JpZ2luXHJcbiAgICAgICAgICAgIHZhciBiID0gdmVjMy5kb3QodiwgdGhpcy5kaXJlY3Rpb24uYXJyYXkpO1xyXG4gICAgICAgICAgICBpZiAoYiA8IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2ZWMzLmRpc3RhbmNlKHRoaXMub3JpZ2luLmFycmF5LCBwb2ludCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gU3F1YXJlZCBkaXN0YW5jZSBmcm9tIGNlbnRlciB0byBvcmlnaW5cclxuICAgICAgICAgICAgdmFyIGMyID0gdmVjMy5sZW5TcXVhcmVkKHYpO1xyXG4gICAgICAgICAgICAvLyBTcXVhcmVkIGRpc3RhbmNlIGZyb20gY2VudGVyIHRvIHByb2plY3Rpb24gcG9pbnRcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGguc3FydChjMiAtIGIgKiBiKTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBpbnRlcnNlY3Rpb24gcG9pbnQgYmV0d2VlbiByYXkgYW5kIHNwaGVyZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IzfSBjZW50ZXJcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gcmFkaXVzXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IG91dFxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RTcGhlcmU6IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHYgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoY2VudGVyLCByYWRpdXMsIG91dCkge1xyXG4gICAgICAgICAgICB2YXIgb3JpZ2luID0gdGhpcy5vcmlnaW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLmRpcmVjdGlvbi5hcnJheTtcclxuICAgICAgICAgICAgY2VudGVyID0gY2VudGVyLmFycmF5O1xyXG4gICAgICAgICAgICB2ZWMzLnN1Yih2LCBjZW50ZXIsIG9yaWdpbik7XHJcbiAgICAgICAgICAgIC8vIERpc3RhbmNlIGZyb20gcHJvamVjdGlvbiBwb2ludCB0byBvcmlnaW5cclxuICAgICAgICAgICAgdmFyIGIgPSB2ZWMzLmRvdCh2LCBkaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICAvLyBTcXVhcmVkIGRpc3RhbmNlIGZyb20gY2VudGVyIHRvIG9yaWdpblxyXG4gICAgICAgICAgICB2YXIgYzIgPSB2ZWMzLnNxdWFyZWRMZW5ndGgodik7XHJcbiAgICAgICAgICAgIC8vIFNxdWFyZWQgZGlzdGFuY2UgZnJvbSBjZW50ZXIgdG8gcHJvamVjdGlvbiBwb2ludFxyXG4gICAgICAgICAgICB2YXIgZDIgPSBjMiAtIGIgKiBiO1xyXG5cclxuICAgICAgICAgICAgdmFyIHIyID0gcmFkaXVzICogcmFkaXVzO1xyXG4gICAgICAgICAgICAvLyBObyBpbnRlcnNlY3Rpb25cclxuICAgICAgICAgICAgaWYgKGQyID4gcjIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGEgPSBNYXRoLnNxcnQocjIgLSBkMik7XHJcbiAgICAgICAgICAgIC8vIEZpcnN0IGludGVyc2VjdCBwb2ludFxyXG4gICAgICAgICAgICB2YXIgdDAgPSBiIC0gYTtcclxuICAgICAgICAgICAgLy8gU2Vjb25kIGludGVyc2VjdCBwb2ludFxyXG4gICAgICAgICAgICB2YXIgdDEgPSBiICsgYTtcclxuXHJcbiAgICAgICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0MCA8IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh0MSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBvcmlnaW4sIGRpcmVjdGlvbiwgdDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKG91dC5hcnJheSwgb3JpZ2luLCBkaXJlY3Rpb24sIHQwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvLyBodHRwOi8vd3d3LnNjcmF0Y2hhcGl4ZWwuY29tL2xlc3NvbnMvM2QtYmFzaWMtbGVzc29ucy9sZXNzb24tNy1pbnRlcnNlY3Rpbmctc2ltcGxlLXNoYXBlcy9yYXktYm94LWludGVyc2VjdGlvbi9cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIHJheSBhbmQgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQm91bmRpbmdCb3h9IGJib3hcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RCb3VuZGluZ0JveDogZnVuY3Rpb24gKGJib3gsIG91dCkge1xyXG4gICAgICAgIHZhciBkaXIgPSB0aGlzLmRpcmVjdGlvbi5hcnJheTtcclxuICAgICAgICB2YXIgb3JpZ2luID0gdGhpcy5vcmlnaW4uYXJyYXk7XHJcbiAgICAgICAgdmFyIG1pbiA9IGJib3gubWluLmFycmF5O1xyXG4gICAgICAgIHZhciBtYXggPSBiYm94Lm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgdmFyIGludmRpcnggPSAxIC8gZGlyWzBdO1xyXG4gICAgICAgIHZhciBpbnZkaXJ5ID0gMSAvIGRpclsxXTtcclxuICAgICAgICB2YXIgaW52ZGlyeiA9IDEgLyBkaXJbMl07XHJcblxyXG4gICAgICAgIHZhciB0bWluLCB0bWF4LCB0eW1pbiwgdHltYXgsIHR6bWluLCB0em1heDtcclxuICAgICAgICBpZiAoaW52ZGlyeCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRtaW4gPSAobWluWzBdIC0gb3JpZ2luWzBdKSAqIGludmRpcng7XHJcbiAgICAgICAgICAgIHRtYXggPSAobWF4WzBdIC0gb3JpZ2luWzBdKSAqIGludmRpcng7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0bWF4ID0gKG1pblswXSAtIG9yaWdpblswXSkgKiBpbnZkaXJ4O1xyXG4gICAgICAgICAgICB0bWluID0gKG1heFswXSAtIG9yaWdpblswXSkgKiBpbnZkaXJ4O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW52ZGlyeSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHR5bWluID0gKG1pblsxXSAtIG9yaWdpblsxXSkgKiBpbnZkaXJ5O1xyXG4gICAgICAgICAgICB0eW1heCA9IChtYXhbMV0gLSBvcmlnaW5bMV0pICogaW52ZGlyeTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHR5bWF4ID0gKG1pblsxXSAtIG9yaWdpblsxXSkgKiBpbnZkaXJ5O1xyXG4gICAgICAgICAgICB0eW1pbiA9IChtYXhbMV0gLSBvcmlnaW5bMV0pICogaW52ZGlyeTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgodG1pbiA+IHR5bWF4KSB8fCAodHltaW4gPiB0bWF4KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eW1pbiA+IHRtaW4gfHwgdG1pbiAhPT0gdG1pbikge1xyXG4gICAgICAgICAgICB0bWluID0gdHltaW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eW1heCA8IHRtYXggfHwgdG1heCAhPT0gdG1heCkge1xyXG4gICAgICAgICAgICB0bWF4ID0gdHltYXg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaW52ZGlyeiA+PSAwKSB7XHJcbiAgICAgICAgICAgIHR6bWluID0gKG1pblsyXSAtIG9yaWdpblsyXSkgKiBpbnZkaXJ6O1xyXG4gICAgICAgICAgICB0em1heCA9IChtYXhbMl0gLSBvcmlnaW5bMl0pICogaW52ZGlyejtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHR6bWF4ID0gKG1pblsyXSAtIG9yaWdpblsyXSkgKiBpbnZkaXJ6O1xyXG4gICAgICAgICAgICB0em1pbiA9IChtYXhbMl0gLSBvcmlnaW5bMl0pICogaW52ZGlyejtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgodG1pbiA+IHR6bWF4KSB8fCAodHptaW4gPiB0bWF4KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0em1pbiA+IHRtaW4gfHwgdG1pbiAhPT0gdG1pbikge1xyXG4gICAgICAgICAgICB0bWluID0gdHptaW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0em1heCA8IHRtYXggfHwgdG1heCAhPT0gdG1heCkge1xyXG4gICAgICAgICAgICB0bWF4ID0gdHptYXg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0bWF4IDwgMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0ID0gdG1pbiA+PSAwID8gdG1pbiA6IHRtYXg7XHJcblxyXG4gICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBvcmlnaW4sIGRpciwgdCk7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NJUMzJUI2bGxlciVFMiU4MCU5M1RydW1ib3JlX2ludGVyc2VjdGlvbl9hbGdvcml0aG1cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIGludGVyc2VjdGlvbiBwb2ludCBiZXR3ZWVuIHJheSBhbmQgdGhyZWUgdHJpYW5nbGUgdmVydGljZXNcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBhXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuVmVjdG9yM30gYlxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IGNcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgIHNpbmdsZVNpZGVkLCBDVyB0cmlhbmdsZSB3aWxsIGJlIGlnbm9yZWRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBbb3V0XVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IFtiYXJ5Y2VudGVyaWNdIGJhcnljZW50cmljIGNvb3Jkc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICBpbnRlcnNlY3RUcmlhbmdsZTogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIGVCQSA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIGVDQSA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIEFPID0gdmVjMy5jcmVhdGUoKTtcclxuICAgICAgICB2YXIgdkNyb3NzID0gdmVjMy5jcmVhdGUoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjLCBzaW5nbGVTaWRlZCwgb3V0LCBiYXJ5Y2VudGVyaWMpIHtcclxuICAgICAgICAgICAgdmFyIGRpciA9IHRoaXMuZGlyZWN0aW9uLmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgb3JpZ2luID0gdGhpcy5vcmlnaW4uYXJyYXk7XHJcbiAgICAgICAgICAgIGEgPSBhLmFycmF5O1xyXG4gICAgICAgICAgICBiID0gYi5hcnJheTtcclxuICAgICAgICAgICAgYyA9IGMuYXJyYXk7XHJcblxyXG4gICAgICAgICAgICB2ZWMzLnN1YihlQkEsIGIsIGEpO1xyXG4gICAgICAgICAgICB2ZWMzLnN1YihlQ0EsIGMsIGEpO1xyXG5cclxuICAgICAgICAgICAgdmVjMy5jcm9zcyh2Q3Jvc3MsIGVDQSwgZGlyKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBkZXQgPSB2ZWMzLmRvdChlQkEsIHZDcm9zcyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2luZ2xlU2lkZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkZXQgPiAtRVBTSUxPTikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRldCA+IC1FUFNJTE9OICYmIGRldCA8IEVQU0lMT04pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmVjMy5zdWIoQU8sIG9yaWdpbiwgYSk7XHJcbiAgICAgICAgICAgIHZhciB1ID0gdmVjMy5kb3QodkNyb3NzLCBBTykgLyBkZXQ7XHJcbiAgICAgICAgICAgIGlmICh1IDwgMCB8fCB1ID4gMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlYzMuY3Jvc3ModkNyb3NzLCBlQkEsIEFPKTtcclxuICAgICAgICAgICAgdmFyIHYgPSB2ZWMzLmRvdChkaXIsIHZDcm9zcykgLyBkZXQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodiA8IDAgfHwgdiA+IDEgfHwgKHUgKyB2ID4gMSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2ZWMzLmNyb3NzKHZDcm9zcywgZUJBLCBlQ0EpO1xyXG4gICAgICAgICAgICB2YXIgdCA9IC12ZWMzLmRvdChBTywgdkNyb3NzKSAvIGRldDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgICAgICBvdXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChiYXJ5Y2VudGVyaWMpIHtcclxuICAgICAgICAgICAgICAgIFZlY3RvcjMuc2V0KGJhcnljZW50ZXJpYywgKDEgLSB1IC0gdiksIHUsIHYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZlYzMuc2NhbGVBbmRBZGQob3V0LmFycmF5LCBvcmlnaW4sIGRpciwgdCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwbHkgYW4gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggdG8gdGhlIHJheVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXg0fSBtYXRyaXhcclxuICAgICAqL1xyXG4gICAgYXBwbHlUcmFuc2Zvcm06IGZ1bmN0aW9uIChtYXRyaXgpIHtcclxuICAgICAgICBWZWN0b3IzLmFkZCh0aGlzLmRpcmVjdGlvbiwgdGhpcy5kaXJlY3Rpb24sIHRoaXMub3JpZ2luKTtcclxuICAgICAgICBWZWN0b3IzLnRyYW5zZm9ybU1hdDQodGhpcy5vcmlnaW4sIHRoaXMub3JpZ2luLCBtYXRyaXgpO1xyXG4gICAgICAgIFZlY3RvcjMudHJhbnNmb3JtTWF0NCh0aGlzLmRpcmVjdGlvbiwgdGhpcy5kaXJlY3Rpb24sIG1hdHJpeCk7XHJcblxyXG4gICAgICAgIFZlY3RvcjMuc3ViKHRoaXMuZGlyZWN0aW9uLCB0aGlzLmRpcmVjdGlvbiwgdGhpcy5vcmlnaW4pO1xyXG4gICAgICAgIFZlY3RvcjMubm9ybWFsaXplKHRoaXMuZGlyZWN0aW9uLCB0aGlzLmRpcmVjdGlvbik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSB2YWx1ZXMgZnJvbSBhbm90aGVyIHJheVxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJheX0gcmF5XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uIChyYXkpIHtcclxuICAgICAgICBWZWN0b3IzLmNvcHkodGhpcy5vcmlnaW4sIHJheS5vcmlnaW4pO1xyXG4gICAgICAgIFZlY3RvcjMuY29weSh0aGlzLmRpcmVjdGlvbiwgcmF5LmRpcmVjdGlvbik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvbmUgYSBuZXcgcmF5XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlJheX1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgcmF5ID0gbmV3IFJheSgpO1xyXG4gICAgICAgIHJheS5jb3B5KHRoaXMpO1xyXG4gICAgICAgIHJldHVybiByYXk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBSYXk7XHJcbiIsImltcG9ydCBOb2RlIGZyb20gJy4vTm9kZSc7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4vbWF0aC9NYXRyaXg0JztcclxuaW1wb3J0IEZydXN0dW0gZnJvbSAnLi9tYXRoL0ZydXN0dW0nO1xyXG5pbXBvcnQgUmF5IGZyb20gJy4vbWF0aC9SYXknO1xyXG5cclxuaW1wb3J0IHZlYzQgZnJvbSAnLi9nbG1hdHJpeC92ZWM0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi9nbG1hdHJpeC92ZWMzJztcclxuXHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuQ2FtZXJhXHJcbiAqIEBleHRlbmRzIGNsYXkuTm9kZVxyXG4gKi9cclxudmFyIENhbWVyYSA9IE5vZGUuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuQ2FtZXJhIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FtZXJhIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTWF0cml4NH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiBuZXcgTWF0cml4NCgpLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnZlcnNlIG9mIGNhbWVyYSBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lk1hdHJpeDR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW52UHJvamVjdGlvbk1hdHJpeDogbmV3IE1hdHJpeDQoKSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVmlldyBtYXRyaXgsIGVxdWFsIHRvIGludmVyc2Ugb2YgY2FtZXJhJ3Mgd29ybGQgbWF0cml4XHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTWF0cml4NH1cclxuICAgICAgICAgKi9cclxuICAgICAgICB2aWV3TWF0cml4OiBuZXcgTWF0cml4NCgpLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW1lcmEgZnJ1c3R1bSBpbiB2aWV3IHNwYWNlXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuRnJ1c3R1bX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBmcnVzdHVtOiBuZXcgRnJ1c3R1bSgpXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZSh0cnVlKTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LkNhbWVyYS5wcm90b3R5cGUgKi9cclxue1xyXG5cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGZvcmNlKSB7XHJcbiAgICAgICAgTm9kZS5wcm90b3R5cGUudXBkYXRlLmNhbGwodGhpcywgZm9yY2UpO1xyXG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KHRoaXMudmlld01hdHJpeCwgdGhpcy53b3JsZFRyYW5zZm9ybSk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeCwgdGhpcy5wcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgdGhpcy5mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uKHRoaXMucHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGNhbWVyYSB2aWV3IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBzZXRWaWV3TWF0cml4OiBmdW5jdGlvbiAodmlld01hdHJpeCkge1xyXG4gICAgICAgIE1hdHJpeDQuY29weSh0aGlzLnZpZXdNYXRyaXgsIHZpZXdNYXRyaXgpO1xyXG4gICAgICAgIE1hdHJpeDQuaW52ZXJ0KHRoaXMud29ybGRUcmFuc2Zvcm0sIHZpZXdNYXRyaXgpO1xyXG4gICAgICAgIHRoaXMuZGVjb21wb3NlV29ybGRUcmFuc2Zvcm0oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNvbXBvc2UgY2FtZXJhIHByb2plY3Rpb24gbWF0cml4XHJcbiAgICAgKi9cclxuICAgIGRlY29tcG9zZVByb2plY3Rpb25NYXRyaXg6IGZ1bmN0aW9uICgpIHt9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGNhbWVyYSBwcm9qZWN0aW9uIG1hdHJpeFxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IHByb2plY3Rpb25NYXRyaXhcclxuICAgICAqL1xyXG4gICAgc2V0UHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKHByb2plY3Rpb25NYXRyaXgpIHtcclxuICAgICAgICBNYXRyaXg0LmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4LCBwcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICBNYXRyaXg0LmludmVydCh0aGlzLmludlByb2plY3Rpb25NYXRyaXgsIHByb2plY3Rpb25NYXRyaXgpO1xyXG4gICAgICAgIHRoaXMuZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHByb2plY3Rpb24gbWF0cml4LCBjYWxsZWQgYWZ0ZXIgdXBkYXRlXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVByb2plY3Rpb25NYXRyaXg6IGZ1bmN0aW9uICgpIHt9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FzdCBhIHBpY2tpbmcgcmF5IGZyb20gY2FtZXJhIG5lYXIgcGxhbmUgdG8gZmFyIHBsYW5lXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBwYXJhbSB7Y2xheS5WZWN0b3IyfSBuZGNcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SYXl9IFtvdXRdXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlJheX1cclxuICAgICAqL1xyXG4gICAgY2FzdFJheTogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdjQgPSB2ZWM0LmNyZWF0ZSgpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobmRjLCBvdXQpIHtcclxuICAgICAgICAgICAgdmFyIHJheSA9IG91dCAhPT0gdW5kZWZpbmVkID8gb3V0IDogbmV3IFJheSgpO1xyXG4gICAgICAgICAgICB2YXIgeCA9IG5kYy5hcnJheVswXTtcclxuICAgICAgICAgICAgdmFyIHkgPSBuZGMuYXJyYXlbMV07XHJcbiAgICAgICAgICAgIHZlYzQuc2V0KHY0LCB4LCB5LCAtMSwgMSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2NCwgdjQsIHRoaXMuaW52UHJvamVjdGlvbk1hdHJpeC5hcnJheSk7XHJcbiAgICAgICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2NCwgdjQsIHRoaXMud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlKHJheS5vcmlnaW4uYXJyYXksIHY0LCAxIC8gdjRbM10pO1xyXG5cclxuICAgICAgICAgICAgdmVjNC5zZXQodjQsIHgsIHksIDEsIDEpO1xyXG4gICAgICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQodjQsIHY0LCB0aGlzLmludlByb2plY3Rpb25NYXRyaXguYXJyYXkpO1xyXG4gICAgICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQodjQsIHY0LCB0aGlzLndvcmxkVHJhbnNmb3JtLmFycmF5KTtcclxuICAgICAgICAgICAgdmVjMy5zY2FsZSh2NCwgdjQsIDEgLyB2NFszXSk7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHJheS5kaXJlY3Rpb24uYXJyYXksIHY0LCByYXkub3JpZ2luLmFycmF5KTtcclxuXHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHJheS5kaXJlY3Rpb24uYXJyYXksIHJheS5kaXJlY3Rpb24uYXJyYXkpO1xyXG4gICAgICAgICAgICByYXkuZGlyZWN0aW9uLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJheS5vcmlnaW4uX2RpcnR5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiByYXk7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBuYW1lIGNsb25lXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LkNhbWVyYX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LkNhbWVyYS5wcm90b3R5cGVcclxuICAgICAqL1xyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENhbWVyYTtcclxuIiwiaW1wb3J0IE5vZGUgZnJvbSAnLi9Ob2RlJztcclxuaW1wb3J0IExpZ2h0IGZyb20gJy4vTGlnaHQnO1xyXG5pbXBvcnQgQ2FtZXJhIGZyb20gJy4vQ2FtZXJhJztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4vY29yZS91dGlsJztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IExSVUNhY2hlIGZyb20gJy4vY29yZS9MUlUnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuL21hdGgvTWF0cml4NCc7XHJcblxyXG52YXIgSURFTlRJVFkgPSBtYXQ0LmNyZWF0ZSgpO1xyXG52YXIgV09STERWSUVXID0gbWF0NC5jcmVhdGUoKTtcclxuXHJcbnZhciBwcm9ncmFtS2V5Q2FjaGUgPSB7fTtcclxuXHJcbmZ1bmN0aW9uIGdldFByb2dyYW1LZXkobGlnaHROdW1iZXJzKSB7XHJcbiAgICB2YXIgZGVmaW5lU3RyID0gW107XHJcbiAgICB2YXIgbGlnaHRUeXBlcyA9IE9iamVjdC5rZXlzKGxpZ2h0TnVtYmVycyk7XHJcbiAgICBsaWdodFR5cGVzLnNvcnQoKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlnaHRUeXBlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBsaWdodFR5cGUgPSBsaWdodFR5cGVzW2ldO1xyXG4gICAgICAgIGRlZmluZVN0ci5wdXNoKGxpZ2h0VHlwZSArICcgJyArIGxpZ2h0TnVtYmVyc1tsaWdodFR5cGVdKTtcclxuICAgIH1cclxuICAgIHZhciBrZXkgPSBkZWZpbmVTdHIuam9pbignXFxuJyk7XHJcblxyXG4gICAgaWYgKHByb2dyYW1LZXlDYWNoZVtrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIHByb2dyYW1LZXlDYWNoZVtrZXldO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBpZCA9IHV0aWwuZ2VuR1VJRCgpO1xyXG4gICAgcHJvZ3JhbUtleUNhY2hlW2tleV0gPSBpZDtcclxuICAgIHJldHVybiBpZDtcclxufVxyXG5cclxuZnVuY3Rpb24gUmVuZGVyTGlzdCgpIHtcclxuXHJcbiAgICB0aGlzLm9wYXF1ZSA9IFtdO1xyXG4gICAgdGhpcy50cmFuc3BhcmVudCA9IFtdO1xyXG5cclxuICAgIHRoaXMuX29wYXF1ZUNvdW50ID0gMDtcclxuICAgIHRoaXMuX3RyYW5zcGFyZW50Q291bnQgPSAwO1xyXG59XHJcblxyXG5SZW5kZXJMaXN0LnByb3RvdHlwZS5zdGFydENvdW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fb3BhcXVlQ291bnQgPSAwO1xyXG4gICAgdGhpcy5fdHJhbnNwYXJlbnRDb3VudCA9IDA7XHJcbn07XHJcblxyXG5SZW5kZXJMaXN0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAob2JqZWN0LCBpc1RyYW5zcGFyZW50KSB7XHJcbiAgICBpZiAoaXNUcmFuc3BhcmVudCkge1xyXG4gICAgICAgIHRoaXMudHJhbnNwYXJlbnRbdGhpcy5fdHJhbnNwYXJlbnRDb3VudCsrXSA9IG9iamVjdDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMub3BhcXVlW3RoaXMuX29wYXF1ZUNvdW50KytdID0gb2JqZWN0O1xyXG4gICAgfVxyXG59O1xyXG5cclxuUmVuZGVyTGlzdC5wcm90b3R5cGUuZW5kQ291bnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLnRyYW5zcGFyZW50Lmxlbmd0aCA9IHRoaXMuX3RyYW5zcGFyZW50Q291bnQ7XHJcbiAgICB0aGlzLm9wYXF1ZS5sZW5ndGggPSB0aGlzLl9vcGFxdWVDb3VudDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LlNjZW5lLlJlbmRlckxpc3RcclxuICogQHByb3BlcnR5IHtBcnJheS48Y2xheS5SZW5kZXJhYmxlPn0gb3BhcXVlXHJcbiAqIEBwcm9wZXJ0eSB7QXJyYXkuPGNsYXkuUmVuZGVyYWJsZT59IHRyYW5zcGFyZW50XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlNjZW5lXHJcbiAqIEBleHRlbmRzIGNsYXkuTm9kZVxyXG4gKi9cclxudmFyIFNjZW5lID0gTm9kZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5TY2VuZSMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEdsb2JhbCBtYXRlcmlhbCBvZiBzY2VuZVxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lk1hdGVyaWFsfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1hdGVyaWFsOiBudWxsLFxyXG5cclxuICAgICAgICBsaWdodHM6IFtdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTY2VuZSBib3VuZGluZyBib3ggaW4gdmlldyBzcGFjZS5cclxuICAgICAgICAgKiBVc2VkIHdoZW4gY2FtZXJhIG5lZWRzIHRvIGFkdWpzdCB0aGUgbmVhciBhbmQgZmFyIHBsYW5lIGF1dG9tYXRpY2FsbHlcclxuICAgICAgICAgKiBzbyB0aGF0IHRoZSB2aWV3IGZydXN0dW0gY29udGFpbnMgdGhlIHZpc2libGUgb2JqZWN0cyBhcyB0aWdodGx5IGFzIHBvc3NpYmxlLlxyXG4gICAgICAgICAqIE5vdGljZTpcclxuICAgICAgICAgKiAgSXQgaXMgdXBkYXRlZCBhZnRlciByZW5kZXJpbmcgKGluIHRoZSBzdGVwIG9mIGZydXN0dW0gY3VsbGluZyBwYXNzaW5nbHkpLiBTbyBtYXkgYmUgbm90IHNvIGFjY3VyYXRlLCBidXQgc2F2ZXMgYSBsb3Qgb2YgY2FsY3VsYXRpb25cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LkJvdW5kaW5nQm94fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZpZXdCb3VuZGluZ0JveExhc3RGcmFtZTogbmV3IEJvdW5kaW5nQm94KCksXHJcblxyXG4gICAgICAgIC8vIFVuaWZvcm1zIGZvciBzaGFkb3cgbWFwLlxyXG4gICAgICAgIHNoYWRvd1VuaWZvcm1zOiB7fSxcclxuXHJcbiAgICAgICAgX2NhbWVyYUxpc3Q6IFtdLFxyXG5cclxuICAgICAgICAvLyBQcm9wZXJ0aWVzIHRvIHNhdmUgdGhlIGxpZ2h0IGluZm9ybWF0aW9uIGluIHRoZSBzY2VuZVxyXG4gICAgICAgIC8vIFdpbGwgYmUgc2V0IGluIHRoZSByZW5kZXIgZnVuY3Rpb25cclxuICAgICAgICBfbGlnaHRVbmlmb3Jtczoge30sXHJcblxyXG4gICAgICAgIF9wcmV2aW91c0xpZ2h0TnVtYmVyOiB7fSxcclxuXHJcbiAgICAgICAgX2xpZ2h0TnVtYmVyOiB7XHJcbiAgICAgICAgICAgIC8vIGdyb3VwSWQ6IHtcclxuICAgICAgICAgICAgICAgIC8vIFBPSU5UX0xJR0hUOiAwLFxyXG4gICAgICAgICAgICAgICAgLy8gRElSRUNUSU9OQUxfTElHSFQ6IDAsXHJcbiAgICAgICAgICAgICAgICAvLyBTUE9UX0xJR0hUOiAwLFxyXG4gICAgICAgICAgICAgICAgLy8gQU1CSUVOVF9MSUdIVDogMCxcclxuICAgICAgICAgICAgICAgIC8vIEFNQklFTlRfU0hfTElHSFQ6IDBcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIF9saWdodFByb2dyYW1LZXlzOiB7fSxcclxuXHJcbiAgICAgICAgX25vZGVSZXBvc2l0b3J5OiB7fSxcclxuXHJcbiAgICAgICAgX3JlbmRlckxpc3RzOiBuZXcgTFJVQ2FjaGUoMjApXHJcblxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fc2NlbmUgPSB0aGlzO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuU2NlbmUucHJvdG90eXBlLiAqL1xyXG57XHJcblxyXG4gICAgLy8gQWRkIG5vZGUgdG8gc2NlbmVcclxuICAgIGFkZFRvU2NlbmU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDYW1lcmEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NhbWVyYUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdGb3VuZCBtdWx0aXBsZSBjYW1lcmEgaW4gb25lIHNjZW5lLiBVc2UgdGhlIGZpc3Qgb25lLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbWVyYUxpc3QucHVzaChub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIExpZ2h0KSB7XHJcbiAgICAgICAgICAgIHRoaXMubGlnaHRzLnB1c2gobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlLm5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fbm9kZVJlcG9zaXRvcnlbbm9kZS5uYW1lXSA9IG5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBSZW1vdmUgbm9kZSBmcm9tIHNjZW5lXHJcbiAgICByZW1vdmVGcm9tU2NlbmU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgdmFyIGlkeDtcclxuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENhbWVyYSkge1xyXG4gICAgICAgICAgICBpZHggPSB0aGlzLl9jYW1lcmFMaXN0LmluZGV4T2Yobm9kZSk7XHJcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FtZXJhTGlzdC5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgTGlnaHQpIHtcclxuICAgICAgICAgICAgaWR4ID0gdGhpcy5saWdodHMuaW5kZXhPZihub2RlKTtcclxuICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpZ2h0cy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9kZS5uYW1lKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9ub2RlUmVwb3NpdG9yeVtub2RlLm5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgbm9kZSBieSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge05vZGV9XHJcbiAgICAgKiBAREVQUkVDQVRFRFxyXG4gICAgICovXHJcbiAgICBnZXROb2RlOiBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub2RlUmVwb3NpdG9yeVtuYW1lXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgbWFpbiBjYW1lcmEgb2YgdGhlIHNjZW5lLlxyXG4gICAgICogQHBhcmFtIHtjbGF5Z2wuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqL1xyXG4gICAgc2V0TWFpbkNhbWVyYTogZnVuY3Rpb24gKGNhbWVyYSkge1xyXG4gICAgICAgIHZhciBpZHggPSB0aGlzLl9jYW1lcmFMaXN0LmluZGV4T2YoY2FtZXJhKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FtZXJhTGlzdC5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY2FtZXJhTGlzdC51bnNoaWZ0KGNhbWVyYSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgbWFpbiBjYW1lcmEgb2YgdGhlIHNjZW5lLlxyXG4gICAgICovXHJcbiAgICBnZXRNYWluQ2FtZXJhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbWVyYUxpc3RbMF07XHJcbiAgICB9LFxyXG5cclxuICAgIGdldExpZ2h0czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxpZ2h0cztcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlTGlnaHRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0cyA9IHRoaXMubGlnaHRzO1xyXG4gICAgICAgIHRoaXMuX3ByZXZpb3VzTGlnaHROdW1iZXIgPSB0aGlzLl9saWdodE51bWJlcjtcclxuXHJcbiAgICAgICAgdmFyIGxpZ2h0TnVtYmVyID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaWdodHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGxpZ2h0ID0gbGlnaHRzW2ldO1xyXG4gICAgICAgICAgICBpZiAobGlnaHQuaW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZ3JvdXAgPSBsaWdodC5ncm91cDtcclxuICAgICAgICAgICAgaWYgKCFsaWdodE51bWJlcltncm91cF0pIHtcclxuICAgICAgICAgICAgICAgIGxpZ2h0TnVtYmVyW2dyb3VwXSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFVzZXIgY2FuIHVzZSBhbnkgdHlwZSBvZiBsaWdodFxyXG4gICAgICAgICAgICBsaWdodE51bWJlcltncm91cF1bbGlnaHQudHlwZV0gPSBsaWdodE51bWJlcltncm91cF1bbGlnaHQudHlwZV0gfHwgMDtcclxuICAgICAgICAgICAgbGlnaHROdW1iZXJbZ3JvdXBdW2xpZ2h0LnR5cGVdKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2xpZ2h0TnVtYmVyID0gbGlnaHROdW1iZXI7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGdyb3VwSWQgaW4gbGlnaHROdW1iZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fbGlnaHRQcm9ncmFtS2V5c1tncm91cElkXSA9IGdldFByb2dyYW1LZXkobGlnaHROdW1iZXJbZ3JvdXBJZF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlTGlnaHRVbmlmb3JtcygpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbm9kZSBhbmQgaXQncyBjaGlsZHJlbiwgaW5jbHVkaW5nIG1lc2gsIGNhbWVyYSwgbGlnaHQsIGV0Yy5cclxuICAgICAqIFVubGlrZSB1c2luZyBgTm9kZSNjbG9uZWAuIEl0IHdpbGwgY2xvbmUgc2tlbGV0b24gYW5kIHJlbWFwIHRoZSBqb2ludHMuIE1hdGVyaWFsIHdpbGwgYWxzbyBiZSBjbG9uZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk5vZGV9IG5vZGVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgY2xvbmVOb2RlOiBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgICAgIHZhciBuZXdOb2RlID0gbm9kZS5jbG9uZSgpO1xyXG4gICAgICAgIHZhciBjbG9uZWROb2Rlc01hcCA9IHt9O1xyXG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkTm9kZXNNYXAoc05vZGUsIHROb2RlKSB7XHJcbiAgICAgICAgICAgIGNsb25lZE5vZGVzTWFwW3NOb2RlLl9fdWlkX19dID0gdE5vZGU7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNOb2RlLl9jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNDaGlsZCA9IHNOb2RlLl9jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgIHZhciB0Q2hpbGQgPSB0Tm9kZS5fY2hpbGRyZW5baV07XHJcbiAgICAgICAgICAgICAgICBidWlsZE5vZGVzTWFwKHNDaGlsZCwgdENoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBidWlsZE5vZGVzTWFwKG5vZGUsIG5ld05vZGUpO1xyXG5cclxuICAgICAgICBuZXdOb2RlLnRyYXZlcnNlKGZ1bmN0aW9uIChuZXdDaGlsZCkge1xyXG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQuc2tlbGV0b24pIHtcclxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLnNrZWxldG9uID0gbmV3Q2hpbGQuc2tlbGV0b24uY2xvbmUoY2xvbmVkTm9kZXNNYXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5tYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQubWF0ZXJpYWwgPSBuZXdDaGlsZC5tYXRlcmlhbC5jbG9uZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXdOb2RlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYXZlcnNlIHRoZSBzY2VuZSBhbmQgYWRkIHRoZSByZW5kZXJhYmxlIG9iamVjdCB0byB0aGUgcmVuZGVyIGxpc3QuXHJcbiAgICAgKiBJdCBuZWVkcyBjYW1lcmEgZm9yIHRoZSBmcnVzdHVtIGN1bGxpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LkNhbWVyYX0gY2FtZXJhXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHVwZGF0ZVNjZW5lQm91bmRpbmdCb3hcclxuICAgICAqIEByZXR1cm4ge2NsYXkuU2NlbmUuUmVuZGVyTGlzdH1cclxuICAgICAqL1xyXG4gICAgdXBkYXRlUmVuZGVyTGlzdDogZnVuY3Rpb24gKGNhbWVyYSwgdXBkYXRlU2NlbmVCb3VuZGluZ0JveCkge1xyXG4gICAgICAgIHZhciBpZCA9IGNhbWVyYS5fX3VpZF9fO1xyXG4gICAgICAgIHZhciByZW5kZXJMaXN0ID0gdGhpcy5fcmVuZGVyTGlzdHMuZ2V0KGlkKTtcclxuICAgICAgICBpZiAoIXJlbmRlckxpc3QpIHtcclxuICAgICAgICAgICAgcmVuZGVyTGlzdCA9IG5ldyBSZW5kZXJMaXN0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlckxpc3RzLnB1dChpZCwgcmVuZGVyTGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlbmRlckxpc3Quc3RhcnRDb3VudCgpO1xyXG5cclxuICAgICAgICBpZiAodXBkYXRlU2NlbmVCb3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5taW4uc2V0KEluZmluaXR5LCBJbmZpbml0eSwgSW5maW5pdHkpO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZS5tYXguc2V0KC1JbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNjZW5lTWF0ZXJpYWxUcmFuc3BhcmVudCA9IHRoaXMubWF0ZXJpYWwgJiYgdGhpcy5tYXRlcmlhbC50cmFuc3BhcmVudCB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLl9kb1VwZGF0ZVJlbmRlckxpc3QodGhpcywgY2FtZXJhLCBzY2VuZU1hdGVyaWFsVHJhbnNwYXJlbnQsIHJlbmRlckxpc3QsIHVwZGF0ZVNjZW5lQm91bmRpbmdCb3gpO1xyXG5cclxuICAgICAgICByZW5kZXJMaXN0LmVuZENvdW50KCk7XHJcblxyXG4gICAgICAgIHJldHVybiByZW5kZXJMaXN0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCByZW5kZXIgbGlzdC4gVXNlZCBhZnRlciB7QGxpbmsgY2xheS5TY2VuZSN1cGRhdGVSZW5kZXJMaXN0fVxyXG4gICAgICogQHBhcmFtIHtjbGF5LkNhbWVyYX0gY2FtZXJhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlNjZW5lLlJlbmRlckxpc3R9XHJcbiAgICAgKi9cclxuICAgIGdldFJlbmRlckxpc3Q6IGZ1bmN0aW9uIChjYW1lcmEpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyTGlzdHMuZ2V0KGNhbWVyYS5fX3VpZF9fKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2RvVXBkYXRlUmVuZGVyTGlzdDogZnVuY3Rpb24gKHBhcmVudCwgY2FtZXJhLCBzY2VuZU1hdGVyaWFsVHJhbnNwYXJlbnQsIHJlbmRlckxpc3QsIHVwZGF0ZVNjZW5lQm91bmRpbmdCb3gpIHtcclxuICAgICAgICBpZiAocGFyZW50LmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE8gT3B0aW1pemVcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudC5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGNoaWxkID0gcGFyZW50Ll9jaGlsZHJlbltpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gRnJ1c3R1bSBjdWxsaW5nXHJcbiAgICAgICAgICAgICAgICB2YXIgd29ybGRNID0gY2hpbGQuaXNTa2lubmVkTWVzaCgpID8gSURFTlRJVFkgOiBjaGlsZC53b3JsZFRyYW5zZm9ybS5hcnJheTtcclxuICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IGNoaWxkLmdlb21ldHJ5O1xyXG5cclxuICAgICAgICAgICAgICAgIG1hdDQubXVsdGlwbHlBZmZpbmUoV09STERWSUVXLCBjYW1lcmEudmlld01hdHJpeC5hcnJheSwgd29ybGRNKTtcclxuICAgICAgICAgICAgICAgIGlmICh1cGRhdGVTY2VuZUJvdW5kaW5nQm94ICYmICFnZW9tZXRyeS5ib3VuZGluZ0JveCB8fCAhdGhpcy5pc0ZydXN0dW1DdWxsZWQoY2hpbGQsIGNhbWVyYSwgV09STERWSUVXKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckxpc3QuYWRkKGNoaWxkLCBjaGlsZC5tYXRlcmlhbC50cmFuc3BhcmVudCB8fCBzY2VuZU1hdGVyaWFsVHJhbnNwYXJlbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5fY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZG9VcGRhdGVSZW5kZXJMaXN0KGNoaWxkLCBjYW1lcmEsIHNjZW5lTWF0ZXJpYWxUcmFuc3BhcmVudCwgcmVuZGVyTGlzdCwgdXBkYXRlU2NlbmVCb3VuZGluZ0JveCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSWYgYW4gc2NlbmUgb2JqZWN0IGlzIGN1bGxlZCBieSBjYW1lcmEgZnJ1c3R1bVxyXG4gICAgICpcclxuICAgICAqIE9iamVjdCBjYW4gYmUgYSByZW5kZXJhYmxlIG9yIGEgbGlnaHRcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTm9kZX0gb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHdvcmxkVmlld01hdCByZXByZXNlbnRlZCB3aXRoIGFycmF5XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBwcm9qZWN0aW9uTWF0IHJlcHJlc2VudGVkIHdpdGggYXJyYXlcclxuICAgICAqL1xyXG4gICAgaXNGcnVzdHVtQ3VsbGVkOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vIEZydXN0dW0gY3VsbGluZ1xyXG4gICAgICAgIC8vIGh0dHA6Ly93d3cuY3NlLmNoYWxtZXJzLnNlL351ZmZlL3ZmY19iYm94LnBkZlxyXG4gICAgICAgIHZhciBjdWxsaW5nQm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB2YXIgY3VsbGluZ01hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgY2FtZXJhLCB3b3JsZFZpZXdNYXQpIHtcclxuICAgICAgICAgICAgLy8gQm91bmRpbmcgYm94IGNhbiBiZSBhIHByb3BlcnR5IG9mIG9iamVjdChsaWtlIGxpZ2h0KSBvciByZW5kZXJhYmxlLmdlb21ldHJ5XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgdmFyIGdlb0JCb3ggPSBvYmplY3QuYm91bmRpbmdCb3g7XHJcbiAgICAgICAgICAgIGlmICghZ2VvQkJveCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9iamVjdC5za2VsZXRvbiAmJiBvYmplY3Quc2tlbGV0b24uYm91bmRpbmdCb3gpIHtcclxuICAgICAgICAgICAgICAgICAgICBnZW9CQm94ID0gb2JqZWN0LnNrZWxldG9uLmJvdW5kaW5nQm94O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvQkJveCA9IG9iamVjdC5nZW9tZXRyeS5ib3VuZGluZ0JveDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFnZW9CQm94KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGN1bGxpbmdNYXRyaXguYXJyYXkgPSB3b3JsZFZpZXdNYXQ7XHJcbiAgICAgICAgICAgIGN1bGxpbmdCb3VuZGluZ0JveC50cmFuc2Zvcm1Gcm9tKGdlb0JCb3gsIGN1bGxpbmdNYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgLy8gUGFzc2luZ2x5IHVwZGF0ZSB0aGUgc2NlbmUgYm91bmRpbmcgYm94XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIGV4Y2x1ZGUgdmVyeSBsYXJnZSBtZXNoIGxpa2UgZ3JvdW5kIHBsYW5lIG9yIHRlcnJhaW4gP1xyXG4gICAgICAgICAgICAvLyBGSVhNRSBPbmx5IHJlbmRlcmVyYWJsZSB3aGljaCBjYXN0IHNoYWRvdyA/XHJcblxyXG4gICAgICAgICAgICAvLyBGSVhNRSBib3VuZGluZ0JveCBiZWNvbWVzIG11Y2ggbGFyZ2VyIGFmdGVyIHRyYW5zZm9ybWQuXHJcbiAgICAgICAgICAgIGlmIChvYmplY3QuY2FzdFNoYWRvdykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUudW5pb24oY3VsbGluZ0JvdW5kaW5nQm94KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBJZ25vcmUgZnJ1c3R1bSBjdWxsaW5nIGlmIG9iamVjdCBpcyBza2lubmVkIG1lc2guXHJcbiAgICAgICAgICAgIGlmIChvYmplY3QuZnJ1c3R1bUN1bGxpbmcpICB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWN1bGxpbmdCb3VuZGluZ0JveC5pbnRlcnNlY3RCb3VuZGluZ0JveChjYW1lcmEuZnJ1c3R1bS5ib3VuZGluZ0JveCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjdWxsaW5nTWF0cml4LmFycmF5ID0gY2FtZXJhLnByb2plY3Rpb25NYXRyaXguYXJyYXk7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94Lm1heC5hcnJheVsyXSA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICBjdWxsaW5nQm91bmRpbmdCb3gubWluLmFycmF5WzJdIDwgMFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xpcCBpbiB0aGUgbmVhciBwbGFuZVxyXG4gICAgICAgICAgICAgICAgICAgIGN1bGxpbmdCb3VuZGluZ0JveC5tYXguYXJyYXlbMl0gPSAtMWUtMjA7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY3VsbGluZ0JvdW5kaW5nQm94LmFwcGx5UHJvamVjdGlvbihjdWxsaW5nTWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbWluID0gY3VsbGluZ0JvdW5kaW5nQm94Lm1pbi5hcnJheTtcclxuICAgICAgICAgICAgICAgIHZhciBtYXggPSBjdWxsaW5nQm91bmRpbmdCb3gubWF4LmFycmF5O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBtYXhbMF0gPCAtMSB8fCBtaW5bMF0gPiAxXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgbWF4WzFdIDwgLTEgfHwgbWluWzFdID4gMVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IG1heFsyXSA8IC0xIHx8IG1pblsyXSA+IDFcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgX3VwZGF0ZUxpZ2h0VW5pZm9ybXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbGlnaHRzID0gdGhpcy5saWdodHM7XHJcbiAgICAgICAgLy8gUHV0IHRoZSBsaWdodCBjYXN0IHNoYWRvdyBiZWZvcmUgdGhlIGxpZ2h0IG5vdCBjYXN0IHNoYWRvd1xyXG4gICAgICAgIGxpZ2h0cy5zb3J0KGxpZ2h0U29ydEZ1bmMpO1xyXG5cclxuICAgICAgICB2YXIgbGlnaHRVbmlmb3JtcyA9IHRoaXMuX2xpZ2h0VW5pZm9ybXM7XHJcbiAgICAgICAgZm9yICh2YXIgZ3JvdXAgaW4gbGlnaHRVbmlmb3Jtcykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gbGlnaHRVbmlmb3Jtc1tncm91cF0pIHtcclxuICAgICAgICAgICAgICAgIGxpZ2h0VW5pZm9ybXNbZ3JvdXBdW3N5bWJvbF0udmFsdWUubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG5cclxuICAgICAgICAgICAgdmFyIGxpZ2h0ID0gbGlnaHRzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGxpZ2h0LmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBncm91cCA9IGxpZ2h0Lmdyb3VwO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgc3ltYm9sIGluIGxpZ2h0LnVuaWZvcm1UZW1wbGF0ZXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtVHBsID0gbGlnaHQudW5pZm9ybVRlbXBsYXRlc1tzeW1ib2xdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdW5pZm9ybVRwbC52YWx1ZShsaWdodCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFsaWdodFVuaWZvcm1zW2dyb3VwXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0VW5pZm9ybXNbZ3JvdXBdID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWxpZ2h0VW5pZm9ybXNbZ3JvdXBdW3N5bWJvbF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBsaWdodFVuaWZvcm1zW2dyb3VwXVtzeW1ib2xdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBsdSA9IGxpZ2h0VW5pZm9ybXNbZ3JvdXBdW3N5bWJvbF07XHJcbiAgICAgICAgICAgICAgICBsdS50eXBlID0gdW5pZm9ybVRwbC50eXBlICsgJ3YnO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoICh1bmlmb3JtVHBsLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICcxaSc6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMWYnOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsdS52YWx1ZS5wdXNoKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMmYnOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzNmJzpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICc0Zic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsdWUubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx1LnZhbHVlLnB1c2godmFsdWVbal0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Vua293biBsaWdodCB1bmlmb3JtIHR5cGUgJyArIHVuaWZvcm1UcGwudHlwZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldExpZ2h0R3JvdXBzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGxpZ2h0R3JvdXBzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgZ3JvdXBJZCBpbiB0aGlzLl9saWdodE51bWJlcikge1xyXG4gICAgICAgICAgICBsaWdodEdyb3Vwcy5wdXNoKGdyb3VwSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbGlnaHRHcm91cHM7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldE51bWJlckNoYW5nZWRMaWdodEdyb3VwczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsaWdodEdyb3VwcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGdyb3VwSWQgaW4gdGhpcy5fbGlnaHROdW1iZXIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNMaWdodE51bWJlckNoYW5nZWQoZ3JvdXBJZCkpIHtcclxuICAgICAgICAgICAgICAgIGxpZ2h0R3JvdXBzLnB1c2goZ3JvdXBJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxpZ2h0R3JvdXBzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgaWYgbGlnaHQgZ3JvdXAgaXMgZGlmZmVyZW50IHdpdGggc2luY2UgbGFzdCBmcmFtZVxyXG4gICAgLy8gVXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0byB1cGRhdGUgc2hhZGVyIGFuZCBzY2VuZSdzIHVuaWZvcm1zIGluIFJlbmRlcmVyLnJlbmRlclxyXG4gICAgaXNMaWdodE51bWJlckNoYW5nZWQ6IGZ1bmN0aW9uIChsaWdodEdyb3VwKSB7XHJcbiAgICAgICAgdmFyIHByZXZMaWdodE51bWJlciA9IHRoaXMuX3ByZXZpb3VzTGlnaHROdW1iZXI7XHJcbiAgICAgICAgdmFyIGN1cnJlbnRMaWdodE51bWJlciA9IHRoaXMuX2xpZ2h0TnVtYmVyO1xyXG4gICAgICAgIC8vIFBFTkRJTkcgUGVyZm9ybWFuY2VcclxuICAgICAgICBmb3IgKHZhciB0eXBlIGluIGN1cnJlbnRMaWdodE51bWJlcltsaWdodEdyb3VwXSkge1xyXG4gICAgICAgICAgICBpZiAoIXByZXZMaWdodE51bWJlcltsaWdodEdyb3VwXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMaWdodE51bWJlcltsaWdodEdyb3VwXVt0eXBlXSAhPT0gcHJldkxpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdW3R5cGVdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciB0eXBlIGluIHByZXZMaWdodE51bWJlcltsaWdodEdyb3VwXSkge1xyXG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRMaWdodE51bWJlcltsaWdodEdyb3VwXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMaWdodE51bWJlcltsaWdodEdyb3VwXVt0eXBlXSAhPT0gcHJldkxpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdW3R5cGVdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldExpZ2h0c051bWJlcnM6IGZ1bmN0aW9uIChsaWdodEdyb3VwKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0TnVtYmVyW2xpZ2h0R3JvdXBdO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRQcm9ncmFtS2V5OiBmdW5jdGlvbiAobGlnaHRHcm91cCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9saWdodFByb2dyYW1LZXlzW2xpZ2h0R3JvdXBdO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRMaWdodFVuaWZvcm1zOiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIHNldFVuaWZvcm1zKHVuaWZvcm1zLCBwcm9ncmFtLCByZW5kZXJlcikge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBzeW1ib2wgaW4gdW5pZm9ybXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsdSA9IHVuaWZvcm1zW3N5bWJvbF07XHJcbiAgICAgICAgICAgICAgICBpZiAobHUudHlwZSA9PT0gJ3R2Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvZ3JhbS5oYXNVbmlmb3JtKHN5bWJvbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZXhTbG90cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbHUudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBsdS52YWx1ZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNsb3QgPSBwcm9ncmFtLnRha2VDdXJyZW50VGV4dHVyZVNsb3QocmVuZGVyZXIsIHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXhTbG90cy5wdXNoKHNsb3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnNldFVuaWZvcm0ocmVuZGVyZXIuZ2wsICcxaXYnLCBzeW1ib2wsIHRleFNsb3RzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyYW0uc2V0VW5pZm9ybShyZW5kZXJlci5nbCwgbHUudHlwZSwgc3ltYm9sLCBsdS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocHJvZ3JhbSwgbGlnaHRHcm91cCwgcmVuZGVyZXIpIHtcclxuICAgICAgICAgICAgc2V0VW5pZm9ybXModGhpcy5fbGlnaHRVbmlmb3Jtc1tsaWdodEdyb3VwXSwgcHJvZ3JhbSwgcmVuZGVyZXIpO1xyXG4gICAgICAgICAgICAvLyBTZXQgc2hhZG93c1xyXG4gICAgICAgICAgICBzZXRVbmlmb3Jtcyh0aGlzLnNoYWRvd1VuaWZvcm1zLCBwcm9ncmFtLCByZW5kZXJlcik7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIHNlbGYsIGNsZWFyIGFsbCB0aGUgc2NlbmUgb2JqZWN0c1xyXG4gICAgICogQnV0IHJlc291cmNlcyBvZiBnbCBsaWtlIHRleHV0dXJlLCBzaGFkZXIgd2lsbCBub3QgYmUgZGlzcG9zZWQuXHJcbiAgICAgKiBNb3N0bHkgeW91IHNob3VsZCB1c2UgZGlzcG9zZVNjZW5lIG1ldGhvZCBpbiBSZW5kZXJlciB0byBkbyBkaXNwb3NlLlxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fb3BhcXVlTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuX3RyYW5zcGFyZW50TGlzdCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLmxpZ2h0cyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLl9saWdodFVuaWZvcm1zID0ge307XHJcblxyXG4gICAgICAgIHRoaXMuX2xpZ2h0TnVtYmVyID0ge307XHJcbiAgICAgICAgdGhpcy5fbm9kZVJlcG9zaXRvcnkgPSB7fTtcclxuICAgIH1cclxufSk7XHJcblxyXG5mdW5jdGlvbiBsaWdodFNvcnRGdW5jKGEsIGIpIHtcclxuICAgIGlmIChiLmNhc3RTaGFkb3cgJiYgIWEuY2FzdFNoYWRvdykge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTY2VuZTtcclxuIiwidmFyIERJUlRZX1BSRUZJWCA9ICdfX2R0X18nO1xyXG5cclxudmFyIENhY2hlID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIHRoaXMuX2NvbnRleHRJZCA9IDA7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVzID0gW107XHJcblxyXG4gICAgdGhpcy5fY29udGV4dCA9IHt9O1xyXG59O1xyXG5cclxuQ2FjaGUucHJvdG90eXBlID0ge1xyXG5cclxuICAgIHVzZTogZnVuY3Rpb24gKGNvbnRleHRJZCwgZG9jdW1lbnRTY2hlbWEpIHtcclxuICAgICAgICB2YXIgY2FjaGVzID0gdGhpcy5fY2FjaGVzO1xyXG4gICAgICAgIGlmICghY2FjaGVzW2NvbnRleHRJZF0pIHtcclxuICAgICAgICAgICAgY2FjaGVzW2NvbnRleHRJZF0gPSB7fTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgY2FjaGVzW2NvbnRleHRJZF0gPSBkb2N1bWVudFNjaGVtYSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NvbnRleHRJZCA9IGNvbnRleHRJZDtcclxuXHJcbiAgICAgICAgdGhpcy5fY29udGV4dCA9IGNhY2hlc1tjb250ZXh0SWRdO1xyXG4gICAgfSxcclxuXHJcbiAgICBwdXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dFtrZXldID0gdmFsdWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldDogZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0W2tleV07XHJcbiAgICB9LFxyXG5cclxuICAgIGRpcnR5OiBmdW5jdGlvbiAoZmllbGQpIHtcclxuICAgICAgICBmaWVsZCA9IGZpZWxkIHx8ICcnO1xyXG4gICAgICAgIHZhciBrZXkgPSBESVJUWV9QUkVGSVggKyBmaWVsZDtcclxuICAgICAgICB0aGlzLnB1dChrZXksIHRydWUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBkaXJ0eUFsbDogZnVuY3Rpb24gKGZpZWxkKSB7XHJcbiAgICAgICAgZmllbGQgPSBmaWVsZCB8fCAnJztcclxuICAgICAgICB2YXIga2V5ID0gRElSVFlfUFJFRklYICsgZmllbGQ7XHJcbiAgICAgICAgdmFyIGNhY2hlcyA9IHRoaXMuX2NhY2hlcztcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhY2hlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoY2FjaGVzW2ldKSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZXNbaV1ba2V5XSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGZyZXNoOiBmdW5jdGlvbiAoZmllbGQpIHtcclxuICAgICAgICBmaWVsZCA9IGZpZWxkIHx8ICcnO1xyXG4gICAgICAgIHZhciBrZXkgPSBESVJUWV9QUkVGSVggKyBmaWVsZDtcclxuICAgICAgICB0aGlzLnB1dChrZXksIGZhbHNlKTtcclxuICAgIH0sXHJcblxyXG4gICAgZnJlc2hBbGw6IGZ1bmN0aW9uIChmaWVsZCkge1xyXG4gICAgICAgIGZpZWxkID0gZmllbGQgfHwgJyc7XHJcbiAgICAgICAgdmFyIGtleSA9IERJUlRZX1BSRUZJWCArIGZpZWxkO1xyXG4gICAgICAgIHZhciBjYWNoZXMgPSB0aGlzLl9jYWNoZXM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWNoZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGNhY2hlc1tpXSkge1xyXG4gICAgICAgICAgICAgICAgY2FjaGVzW2ldW2tleV0gPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgaXNEaXJ0eTogZnVuY3Rpb24gKGZpZWxkKSB7XHJcbiAgICAgICAgZmllbGQgPSBmaWVsZCB8fCAnJztcclxuICAgICAgICB2YXIga2V5ID0gRElSVFlfUFJFRklYICsgZmllbGQ7XHJcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLl9jb250ZXh0O1xyXG4gICAgICAgIHJldHVybiAgIWNvbnRleHQuaGFzT3duUHJvcGVydHkoa2V5KVxyXG4gICAgICAgICAgICB8fCBjb250ZXh0W2tleV0gPT09IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlbGV0ZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0SWQpIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5fY2FjaGVzW2NvbnRleHRJZF07XHJcbiAgICAgICAgdGhpcy5fY29udGV4dCA9IHt9O1xyXG4gICAgfSxcclxuXHJcbiAgICBkZWxldGU6IGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5fY29udGV4dFtrZXldO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhckFsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlcyA9IHt9O1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRDb250ZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRleHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIGVhY2hDb250ZXh0IDogZnVuY3Rpb24gKGNiLCBjb250ZXh0KSB7XHJcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLl9jYWNoZXMpO1xyXG4gICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgIGNiICYmIGNiLmNhbGwoY29udGV4dCwga2V5KTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgbWlzczogZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgIHJldHVybiAhIHRoaXMuX2NvbnRleHQuaGFzT3duUHJvcGVydHkoa2V5KTtcclxuICAgIH1cclxufTtcclxuXHJcbkNhY2hlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENhY2hlO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ2FjaGU7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IENhY2hlIGZyb20gJy4vY29yZS9DYWNoZSc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcblxyXG5mdW5jdGlvbiBnZXRBcnJheUN0b3JCeVR5cGUgKHR5cGUpIHtcclxuICAgIHJldHVybiAoe1xyXG4gICAgICAgICdieXRlJzogdmVuZG9yLkludDhBcnJheSxcclxuICAgICAgICAndWJ5dGUnOiB2ZW5kb3IuVWludDhBcnJheSxcclxuICAgICAgICAnc2hvcnQnOiB2ZW5kb3IuSW50MTZBcnJheSxcclxuICAgICAgICAndXNob3J0JzogdmVuZG9yLlVpbnQxNkFycmF5XHJcbiAgICB9KVt0eXBlXSB8fCB2ZW5kb3IuRmxvYXQzMkFycmF5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYWtlQXR0cktleShhdHRyTmFtZSkge1xyXG4gICAgcmV0dXJuICdhdHRyXycgKyBhdHRyTmFtZTtcclxufVxyXG4vKipcclxuICogR2VvbWV0cnlCYXNlIGF0dHJpYnV0ZVxyXG4gKiBAYWxpYXMgY2xheS5HZW9tZXRyeUJhc2UuQXR0cmlidXRlXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKi9cclxuZnVuY3Rpb24gQXR0cmlidXRlKG5hbWUsIHR5cGUsIHNpemUsIHNlbWFudGljKSB7XHJcbiAgICAvKipcclxuICAgICAqIEF0dHJpYnV0ZSBuYW1lXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRyaWJ1dGUgdHlwZVxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsgYCdieXRlJ2BcclxuICAgICAqICArIGAndWJ5dGUnYFxyXG4gICAgICogICsgYCdzaG9ydCdgXHJcbiAgICAgKiAgKyBgJ3VzaG9ydCdgXHJcbiAgICAgKiAgKyBgJ2Zsb2F0J2AgTW9zdCBjb21tb25seSB1c2VkLlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGhpcy50eXBlID0gdHlwZTtcclxuICAgIC8qKlxyXG4gICAgICogU2l6ZSBvZiBhdHRyaWJ1dGUgY29tcG9uZW50LiAxIC0gNC5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuc2l6ZSA9IHNpemU7XHJcbiAgICAvKipcclxuICAgICAqIFNlbWFudGljIG9mIHRoaXMgYXR0cmlidXRlLlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsgYCdQT1NJVElPTidgXHJcbiAgICAgKiAgKyBgJ05PUk1BTCdgXHJcbiAgICAgKiAgKyBgJ0JJTk9STUFMJ2BcclxuICAgICAqICArIGAnVEFOR0VOVCdgXHJcbiAgICAgKiAgKyBgJ1RFWENPT1JEJ2BcclxuICAgICAqICArIGAnVEVYQ09PUkRfMCdgXHJcbiAgICAgKiAgKyBgJ1RFWENPT1JEXzEnYFxyXG4gICAgICogICsgYCdDT0xPUidgXHJcbiAgICAgKiAgKyBgJ0pPSU5UJ2BcclxuICAgICAqICArIGAnV0VJR0hUJ2BcclxuICAgICAqXHJcbiAgICAgKiBJbiBzaGFkZXIsIGF0dHJpYnV0ZSB3aXRoIHNhbWUgc2VtYW50aWMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IG1hcHBlZC4gRm9yIGV4YW1wbGU6XHJcbiAgICAgKiBgYGBnbHNsXHJcbiAgICAgKiBhdHRyaWJ1dGUgdmVjMyBwb3M6IFBPU0lUSU9OXHJcbiAgICAgKiBgYGBcclxuICAgICAqIHdpbGwgdXNlIHRoZSBhdHRyaWJ1dGUgdmFsdWUgd2l0aCBzZW1hbnRpYyBQT1NJVElPTiBpbiBnZW9tZXRyeSwgbm8gbWF0dGVyIHdoYXQgbmFtZSBpdCB1c2VkLlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdGhpcy5zZW1hbnRpYyA9IHNlbWFudGljIHx8ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS5cclxuICAgICAqIEB0eXBlIHtUeXBlZEFycmF5fVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuXHJcbiAgICAvLyBJbml0IGdldHRlciBzZXR0ZXJcclxuICAgIHN3aXRjaCAoc2l6ZSkge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgdGhpcy5nZXQgPSBmdW5jdGlvbiAoaWR4KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVtpZHhdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNldCA9IGZ1bmN0aW9uIChpZHgsIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW2lkeF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy8gQ29weSBmcm9tIHNvdXJjZSB0byB0YXJnZXRcclxuICAgICAgICAgICAgdGhpcy5jb3B5ID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlW3RhcmdldF0gPSB0aGlzLnZhbHVlW3RhcmdldF07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgdGhpcy5nZXQgPSBmdW5jdGlvbiAoaWR4LCBvdXQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgb3V0WzBdID0gYXJyW2lkeCAqIDJdO1xyXG4gICAgICAgICAgICAgICAgb3V0WzFdID0gYXJyW2lkeCAqIDIgKyAxXTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gZnVuY3Rpb24gKGlkeCwgdmFsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGFycltpZHggKiAyXSA9IHZhbFswXTtcclxuICAgICAgICAgICAgICAgIGFycltpZHggKiAyICsgMV0gPSB2YWxbMV07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuY29weSA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2UgKj0gMjtcclxuICAgICAgICAgICAgICAgIHRhcmdldCAqPSAyO1xyXG4gICAgICAgICAgICAgICAgYXJyW3RhcmdldF0gPSBhcnJbc291cmNlXTtcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXQgKyAxXSA9IGFycltzb3VyY2UgKyAxXTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICB0aGlzLmdldCA9IGZ1bmN0aW9uIChpZHgsIG91dCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkeDMgPSBpZHggKiAzO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFyciA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBvdXRbMF0gPSBhcnJbaWR4M107XHJcbiAgICAgICAgICAgICAgICBvdXRbMV0gPSBhcnJbaWR4MyArIDFdO1xyXG4gICAgICAgICAgICAgICAgb3V0WzJdID0gYXJyW2lkeDMgKyAyXTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2V0ID0gZnVuY3Rpb24gKGlkeCwgdmFsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4MyA9IGlkeCAqIDM7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGFycltpZHgzXSA9IHZhbFswXTtcclxuICAgICAgICAgICAgICAgIGFycltpZHgzICsgMV0gPSB2YWxbMV07XHJcbiAgICAgICAgICAgICAgICBhcnJbaWR4MyArIDJdID0gdmFsWzJdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmNvcHkgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgc291cmNlICo9IDM7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgKj0gMztcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXRdID0gYXJyW3NvdXJjZV07XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgMV0gPSBhcnJbc291cmNlICsgMV07XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgMl0gPSBhcnJbc291cmNlICsgMl07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgdGhpcy5nZXQgPSBmdW5jdGlvbiAoaWR4LCBvdXQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkeDQgPSBpZHggKiA0O1xyXG4gICAgICAgICAgICAgICAgb3V0WzBdID0gYXJyW2lkeDRdO1xyXG4gICAgICAgICAgICAgICAgb3V0WzFdID0gYXJyW2lkeDQgKyAxXTtcclxuICAgICAgICAgICAgICAgIG91dFsyXSA9IGFycltpZHg0ICsgMl07XHJcbiAgICAgICAgICAgICAgICBvdXRbM10gPSBhcnJbaWR4NCArIDNdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZXQgPSBmdW5jdGlvbiAoaWR4LCB2YWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkeDQgPSBpZHggKiA0O1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeDRdID0gdmFsWzBdO1xyXG4gICAgICAgICAgICAgICAgYXJyW2lkeDQgKyAxXSA9IHZhbFsxXTtcclxuICAgICAgICAgICAgICAgIGFycltpZHg0ICsgMl0gPSB2YWxbMl07XHJcbiAgICAgICAgICAgICAgICBhcnJbaWR4NCArIDNdID0gdmFsWzNdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmNvcHkgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgc291cmNlICo9IDQ7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgKj0gNDtcclxuICAgICAgICAgICAgICAgIC8vIGNvcHlXaXRoaW4gaXMgZXh0cmVtZWx5IHNsb3dcclxuICAgICAgICAgICAgICAgIGFyclt0YXJnZXRdID0gYXJyW3NvdXJjZV07XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgMV0gPSBhcnJbc291cmNlICsgMV07XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgMl0gPSBhcnJbc291cmNlICsgMl07XHJcbiAgICAgICAgICAgICAgICBhcnJbdGFyZ2V0ICsgM10gPSBhcnJbc291cmNlICsgM107XHJcbiAgICAgICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXQgaXRlbSB2YWx1ZSBhdCBnaXZlIGluZGV4LiBTZWNvbmQgcGFyYW1ldGVyIHZhbCBpcyBudW1iZXIgaWYgc2l6ZSBpcyAxXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAbmFtZSBjbGF5Lkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGUjc2V0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICogQHBhcmFtIHtudW1iZXJbXXxudW1iZXJ9IHZhbFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBnZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJykuc2V0KDAsIFsxLCAxLCAxXSk7XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEdldCBpdGVtIHZhbHVlIGF0IGdpdmUgaW5kZXguIFNlY29uZCBwYXJhbWV0ZXIgb3V0IGlzIG5vIG5lZWQgaWYgc2l6ZSBpcyAxXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAbmFtZSBjbGF5Lkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGUjc2V0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICogQHBhcmFtIHtudW1iZXJbXX0gW291dF1cclxuICogQGV4YW1wbGVcclxuICogZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpLmdldCgwLCBvdXQpO1xyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBJbml0aWFsaXplIGF0dHJpYnV0ZSB3aXRoIGdpdmVuIHZlcnRleCBjb3VudFxyXG4gKiBAcGFyYW0ge251bWJlcn0gblZlcnRleFxyXG4gKi9cclxuQXR0cmlidXRlLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKG5WZXJ0ZXgpIHtcclxuICAgIGlmICghdGhpcy52YWx1ZSB8fCB0aGlzLnZhbHVlLmxlbmd0aCAhPSBuVmVydGV4ICogdGhpcy5zaXplKSB7XHJcbiAgICAgICAgdmFyIEFycmF5Q29uc3RydWN0b3IgPSBnZXRBcnJheUN0b3JCeVR5cGUodGhpcy50eXBlKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IEFycmF5Q29uc3RydWN0b3IoblZlcnRleCAqIHRoaXMuc2l6ZSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogSW5pdGlhbGl6ZSBhdHRyaWJ1dGUgd2l0aCBnaXZlbiBhcnJheS4gV2hpY2ggY2FuIGJlIDEgZGltZW5zaW9uYWwgb3IgMiBkaW1lbnNpb25hbFxyXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpLmZyb21BcnJheShcclxuICogICAgICBbLTEsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDBdXHJcbiAqICApO1xyXG4gKiAgZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpLmZyb21BcnJheShcclxuICogICAgICBbIFstMSwgMCwgMF0sIFsxLCAwLCAwXSwgWzAsIDEsIDBdIF1cclxuICogICk7XHJcbiAqL1xyXG5BdHRyaWJ1dGUucHJvdG90eXBlLmZyb21BcnJheSA9IGZ1bmN0aW9uIChhcnJheSkge1xyXG4gICAgdmFyIEFycmF5Q29uc3RydWN0b3IgPSBnZXRBcnJheUN0b3JCeVR5cGUodGhpcy50eXBlKTtcclxuICAgIHZhciB2YWx1ZTtcclxuICAgIC8vIENvbnZlcnQgMmQgYXJyYXkgdG8gZmxhdFxyXG4gICAgaWYgKGFycmF5WzBdICYmIChhcnJheVswXS5sZW5ndGgpKSB7XHJcbiAgICAgICAgdmFyIG4gPSAwO1xyXG4gICAgICAgIHZhciBzaXplID0gdGhpcy5zaXplO1xyXG4gICAgICAgIHZhbHVlID0gbmV3IEFycmF5Q29uc3RydWN0b3IoYXJyYXkubGVuZ3RoICogc2l6ZSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNpemU7IGorKykge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVbbisrXSA9IGFycmF5W2ldW2pdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihhcnJheSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbn07XHJcblxyXG5BdHRyaWJ1dGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oY29weVZhbHVlKSB7XHJcbiAgICB2YXIgcmV0ID0gbmV3IEF0dHJpYnV0ZSh0aGlzLm5hbWUsIHRoaXMudHlwZSwgdGhpcy5zaXplLCB0aGlzLnNlbWFudGljKTtcclxuICAgIC8vIEZJWE1FXHJcbiAgICBpZiAoY29weVZhbHVlKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCd0b2RvJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0O1xyXG59O1xyXG5cclxuZnVuY3Rpb24gQXR0cmlidXRlQnVmZmVyKG5hbWUsIHR5cGUsIGJ1ZmZlciwgc2l6ZSwgc2VtYW50aWMpIHtcclxuICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XHJcbiAgICB0aGlzLnNpemUgPSBzaXplO1xyXG4gICAgdGhpcy5zZW1hbnRpYyA9IHNlbWFudGljO1xyXG5cclxuICAgIC8vIFRvIGJlIHNldCBpbiBtZXNoXHJcbiAgICAvLyBzeW1ib2wgaW4gdGhlIHNoYWRlclxyXG4gICAgdGhpcy5zeW1ib2wgPSAnJztcclxuXHJcbiAgICAvLyBOZWVkcyByZW1vdmUgZmxhZ1xyXG4gICAgdGhpcy5uZWVkc1JlbW92ZSA9IGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBJbmRpY2VzQnVmZmVyKGJ1ZmZlcikge1xyXG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XHJcbiAgICB0aGlzLmNvdW50ID0gMDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEJhc2Ugb2YgYWxsIGdlb21ldHJ5LiBVc2Uge0BsaW5rIGNsYXkuR2VvbWV0cnl9IGZvciBjb21tb24gM0QgdXNhZ2UuXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lkdlb21ldHJ5QmFzZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEdlb21ldHJ5QmFzZSA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuR2VvbWV0cnlCYXNlIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXR0cmlidXRlcyBvZiBnZW9tZXRyeS5cclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIGNsYXkuR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZT59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXR0cmlidXRlczoge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEluZGljZXMgb2YgZ2VvbWV0cnkuXHJcbiAgICAgICAgICogQHR5cGUge1VpbnQxNkFycmF5fFVpbnQzMkFycmF5fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGluZGljZXM6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElzIHZlcnRpY2VzIGRhdGEgZHluYW1pY2FsbHkgdXBkYXRlZC5cclxuICAgICAgICAgKiBBdHRyaWJ1dGVzIHZhbHVlIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXIgZmlyc3QgcmVuZGVyIGlmIGR5YW5taWMgaXMgZmFsc2UuXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZHluYW1pYzogdHJ1ZSxcclxuXHJcbiAgICAgICAgX2VuYWJsZWRBdHRyaWJ1dGVzOiBudWxsLFxyXG5cclxuICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgLy8gSW5pdCBpdCBoZXJlIHRvIGF2b2lkIGRlb3B0aW1pemF0aW9uIHdoZW4gaXQncyBhc3NpZ25lZCBpbiBhcHBsaWNhdGlvbiBkeW5hbWljYWxseVxyXG4gICAgICAgIF9fdXNlZDogMFxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICAvLyBVc2UgY2FjaGVcclxuICAgIHRoaXMuX2NhY2hlID0gbmV3IENhY2hlKCk7XHJcblxyXG4gICAgdGhpcy5fYXR0cmlidXRlTGlzdCA9IE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcyk7XHJcblxyXG4gICAgdGhpcy5fX3Zhb0NhY2hlID0ge307XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5HZW9tZXRyeUJhc2UucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogTWFpbiBhdHRyaWJ1dGUgd2lsbCBiZSB1c2VkIHRvIGNvdW50IHZlcnRleCBudW1iZXJcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIG1haW5BdHRyaWJ1dGU6ICcnLFxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VyIGRlZmluZWQgcGlja2luZyBhbGdvcml0aG0gaW5zdGVhZCBvZiBkZWZhdWx0XHJcbiAgICAgKiB0cmlhbmdsZSByYXkgaW50ZXJzZWN0aW9uXHJcbiAgICAgKiB4LCB5IGFyZSBOREMuXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAoeCwgeSwgcmVuZGVyZXIsIGNhbWVyYSwgcmVuZGVyYWJsZSwgb3V0KSA9PiBib29sZWFuXHJcbiAgICAgKiBgYGBcclxuICAgICAqIEB0eXBlIHs/RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIHBpY2s6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VyIGRlZmluZWQgcmF5IHBpY2tpbmcgYWxnb3JpdGhtIGluc3RlYWQgb2YgZGVmYXVsdFxyXG4gICAgICogdHJpYW5nbGUgcmF5IGludGVyc2VjdGlvblxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogKHJheTogY2xheS5SYXksIHJlbmRlcmFibGU6IGNsYXkuUmVuZGVyYWJsZSwgb3V0OiBBcnJheSkgPT4gYm9vbGVhblxyXG4gICAgICogYGBgXHJcbiAgICAgKiBAdHlwZSB7P0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICBwaWNrQnlSYXk6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIGF0dHJpYnV0ZXMgYW5kIGluZGljZXMgaW4gZ2VvbWV0cnkgbmVlZHMgdG8gdXBkYXRlLlxyXG4gICAgICogVXN1YWxseSBjYWxsZWQgYWZ0ZXIgeW91IGNoYW5nZSB0aGUgZGF0YSBpbiBhdHRyaWJ1dGVzLlxyXG4gICAgICovXHJcbiAgICBkaXJ0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBlbmFibGVkQXR0cmlidXRlcyA9IHRoaXMuZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVuYWJsZWRBdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlydHlBdHRyaWJ1dGUoZW5hYmxlZEF0dHJpYnV0ZXNbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5SW5kaWNlcygpO1xyXG4gICAgICAgIHRoaXMuX2VuYWJsZWRBdHRyaWJ1dGVzID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5fY2FjaGUuZGlydHkoJ2FueScpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogTWFyayB0aGUgaW5kaWNlcyBuZWVkcyB0byB1cGRhdGUuXHJcbiAgICAgKi9cclxuICAgIGRpcnR5SW5kaWNlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX2NhY2hlLmRpcnR5QWxsKCdpbmRpY2VzJyk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIHRoZSBhdHRyaWJ1dGVzIG5lZWRzIHRvIHVwZGF0ZS5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbYXR0ck5hbWVdXHJcbiAgICAgKi9cclxuICAgIGRpcnR5QXR0cmlidXRlOiBmdW5jdGlvbiAoYXR0ck5hbWUpIHtcclxuICAgICAgICB0aGlzLl9jYWNoZS5kaXJ0eUFsbChtYWtlQXR0cktleShhdHRyTmFtZSkpO1xyXG4gICAgICAgIHRoaXMuX2NhY2hlLmRpcnR5QWxsKCdhdHRyaWJ1dGVzJyk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgaW5kaWNlcyBvZiB0cmlhbmdsZSBhdCBnaXZlbiBpbmRleC5cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IG91dFxyXG4gICAgICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgKi9cclxuICAgIGdldFRyaWFuZ2xlSW5kaWNlczogZnVuY3Rpb24gKGlkeCwgb3V0KSB7XHJcbiAgICAgICAgaWYgKGlkeCA8IHRoaXMudHJpYW5nbGVDb3VudCAmJiBpZHggPj0gMCkge1xyXG4gICAgICAgICAgICBpZiAoIW91dCkge1xyXG4gICAgICAgICAgICAgICAgb3V0ID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XHJcbiAgICAgICAgICAgIG91dFswXSA9IGluZGljZXNbaWR4ICogM107XHJcbiAgICAgICAgICAgIG91dFsxXSA9IGluZGljZXNbaWR4ICogMyArIDFdO1xyXG4gICAgICAgICAgICBvdXRbMl0gPSBpbmRpY2VzW2lkeCAqIDMgKyAyXTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGluZGljZXMgb2YgdHJpYW5nbGUgYXQgZ2l2ZW4gaW5kZXguXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBhcnJcclxuICAgICAqL1xyXG4gICAgc2V0VHJpYW5nbGVJbmRpY2VzOiBmdW5jdGlvbiAoaWR4LCBhcnIpIHtcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICBpbmRpY2VzW2lkeCAqIDNdID0gYXJyWzBdO1xyXG4gICAgICAgIGluZGljZXNbaWR4ICogMyArIDFdID0gYXJyWzFdO1xyXG4gICAgICAgIGluZGljZXNbaWR4ICogMyArIDJdID0gYXJyWzJdO1xyXG4gICAgfSxcclxuXHJcbiAgICBpc1VzZUluZGljZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLmluZGljZXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZSBpbmRpY2VzIGZyb20gYW4gYXJyYXkuXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxyXG4gICAgICovXHJcbiAgICBpbml0SW5kaWNlc0Zyb21BcnJheTogZnVuY3Rpb24gKGFycmF5KSB7XHJcbiAgICAgICAgdmFyIHZhbHVlO1xyXG4gICAgICAgIHZhciBBcnJheUNvbnN0cnVjdG9yID0gdGhpcy52ZXJ0ZXhDb3VudCA+IDB4ZmZmZlxyXG4gICAgICAgICAgICA/IHZlbmRvci5VaW50MzJBcnJheSA6IHZlbmRvci5VaW50MTZBcnJheTtcclxuICAgICAgICAvLyBDb252ZXJ0IDJkIGFycmF5IHRvIGZsYXRcclxuICAgICAgICBpZiAoYXJyYXlbMF0gJiYgKGFycmF5WzBdLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgdmFyIG4gPSAwO1xyXG4gICAgICAgICAgICB2YXIgc2l6ZSA9IDM7XHJcblxyXG4gICAgICAgICAgICB2YWx1ZSA9IG5ldyBBcnJheUNvbnN0cnVjdG9yKGFycmF5Lmxlbmd0aCAqIHNpemUpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNpemU7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlW24rK10gPSBhcnJheVtpXVtqXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBuZXcgQXJyYXlDb25zdHJ1Y3RvcihhcnJheSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmluZGljZXMgPSB2YWx1ZTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIG5ldyBhdHRyaWJ1dGVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VtYW50aWNdXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUF0dHJpYnV0ZTogZnVuY3Rpb24gKG5hbWUsIHR5cGUsIHNpemUsIHNlbWFudGljKSB7XHJcbiAgICAgICAgdmFyIGF0dHJpYiA9IG5ldyBBdHRyaWJ1dGUobmFtZSwgdHlwZSwgc2l6ZSwgc2VtYW50aWMpO1xyXG4gICAgICAgIGlmICh0aGlzLmF0dHJpYnV0ZXNbbmFtZV0pIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlc1tuYW1lXSA9IGF0dHJpYjtcclxuICAgICAgICB0aGlzLl9hdHRyaWJ1dGVMaXN0LnB1c2gobmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIGF0dHJpYjtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhdHRyaWJ1dGVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUF0dHJpYnV0ZTogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICB2YXIgYXR0cmlidXRlTGlzdCA9IHRoaXMuX2F0dHJpYnV0ZUxpc3Q7XHJcbiAgICAgICAgdmFyIGlkeCA9IGF0dHJpYnV0ZUxpc3QuaW5kZXhPZihuYW1lKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgYXR0cmlidXRlTGlzdC5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYXR0cmlidXRlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5HZW9tZXRyeUJhc2UuQXR0cmlidXRlfVxyXG4gICAgICovXHJcbiAgICBnZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZW5hYmxlZCBhdHRyaWJ1dGVzIG5hbWUgbGlzdFxyXG4gICAgICogQXR0cmlidXRlIHdoaWNoIGhhcyB0aGUgc2FtZSB2ZXJ0ZXggbnVtYmVyIHdpdGggcG9zaXRpb24gaXMgdHJlYXRlZCBhcyBhIGVuYWJsZWQgYXR0cmlidXRlXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX1cclxuICAgICAqL1xyXG4gICAgZ2V0RW5hYmxlZEF0dHJpYnV0ZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZW5hYmxlZEF0dHJpYnV0ZXMgPSB0aGlzLl9lbmFibGVkQXR0cmlidXRlcztcclxuICAgICAgICB2YXIgYXR0cmlidXRlTGlzdCA9IHRoaXMuX2F0dHJpYnV0ZUxpc3Q7XHJcbiAgICAgICAgLy8gQ2FjaGVcclxuICAgICAgICBpZiAoZW5hYmxlZEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVuYWJsZWRBdHRyaWJ1dGVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIHZhciBuVmVydGV4ID0gdGhpcy52ZXJ0ZXhDb3VudDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTGlzdFtpXTtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYiA9IHRoaXMuYXR0cmlidXRlc1tuYW1lXTtcclxuICAgICAgICAgICAgaWYgKGF0dHJpYi52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGF0dHJpYi52YWx1ZS5sZW5ndGggPT09IG5WZXJ0ZXggKiBhdHRyaWIuc2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9lbmFibGVkQXR0cmlidXRlcyA9IHJlc3VsdDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0QnVmZmVyQ2h1bmtzOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICAgICAgdmFyIGlzQXR0cmlidXRlc0RpcnR5ID0gY2FjaGUuaXNEaXJ0eSgnYXR0cmlidXRlcycpO1xyXG4gICAgICAgIHZhciBpc0luZGljZXNEaXJ0eSA9IGNhY2hlLmlzRGlydHkoJ2luZGljZXMnKTtcclxuICAgICAgICBpZiAoaXNBdHRyaWJ1dGVzRGlydHkgfHwgaXNJbmRpY2VzRGlydHkpIHtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQnVmZmVyKHJlbmRlcmVyLmdsLCBpc0F0dHJpYnV0ZXNEaXJ0eSwgaXNJbmRpY2VzRGlydHkpO1xyXG4gICAgICAgICAgICB2YXIgZW5hYmxlZEF0dHJpYnV0ZXMgPSB0aGlzLmdldEVuYWJsZWRBdHRyaWJ1dGVzKCk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5hYmxlZEF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNhY2hlLmZyZXNoKG1ha2VBdHRyS2V5KGVuYWJsZWRBdHRyaWJ1dGVzW2ldKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FjaGUuZnJlc2goJ2F0dHJpYnV0ZXMnKTtcclxuICAgICAgICAgICAgY2FjaGUuZnJlc2goJ2luZGljZXMnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FjaGUuZnJlc2goJ2FueScpO1xyXG4gICAgICAgIHJldHVybiBjYWNoZS5nZXQoJ2NodW5rcycpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlQnVmZmVyOiBmdW5jdGlvbiAoX2dsLCBpc0F0dHJpYnV0ZXNEaXJ0eSwgaXNJbmRpY2VzRGlydHkpIHtcclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICB2YXIgY2h1bmtzID0gY2FjaGUuZ2V0KCdjaHVua3MnKTtcclxuICAgICAgICB2YXIgZmlyc3RVcGRhdGUgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIWNodW5rcykge1xyXG4gICAgICAgICAgICBjaHVua3MgPSBbXTtcclxuICAgICAgICAgICAgLy8gSW50aWFsaXplXHJcbiAgICAgICAgICAgIGNodW5rc1swXSA9IHtcclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUJ1ZmZlcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc0J1ZmZlcjogbnVsbFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjYWNoZS5wdXQoJ2NodW5rcycsIGNodW5rcyk7XHJcbiAgICAgICAgICAgIGZpcnN0VXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjaHVuayA9IGNodW5rc1swXTtcclxuICAgICAgICB2YXIgYXR0cmlidXRlQnVmZmVycyA9IGNodW5rLmF0dHJpYnV0ZUJ1ZmZlcnM7XHJcbiAgICAgICAgdmFyIGluZGljZXNCdWZmZXIgPSBjaHVuay5pbmRpY2VzQnVmZmVyO1xyXG5cclxuICAgICAgICBpZiAoaXNBdHRyaWJ1dGVzRGlydHkgfHwgZmlyc3RVcGRhdGUpIHtcclxuICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZUxpc3QgPSB0aGlzLmdldEVuYWJsZWRBdHRyaWJ1dGVzKCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYXR0cmlidXRlQnVmZmVyTWFwID0ge307XHJcbiAgICAgICAgICAgIGlmICghZmlyc3RVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUJ1ZmZlck1hcFthdHRyaWJ1dGVCdWZmZXJzW2ldLm5hbWVdID0gYXR0cmlidXRlQnVmZmVyc1tpXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBGSVhNRSBJZiBzb21lIGF0dHJpYnV0ZXMgcmVtb3ZlZFxyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGF0dHJpYnV0ZUxpc3QubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTGlzdFtrXTtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGUgPSB0aGlzLmF0dHJpYnV0ZXNbbmFtZV07XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckluZm87XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFmaXJzdFVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlckluZm8gPSBhdHRyaWJ1dGVCdWZmZXJNYXBbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgYnVmZmVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlckluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBidWZmZXJJbmZvLmJ1ZmZlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IF9nbC5jcmVhdGVCdWZmZXIoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjYWNoZS5pc0RpcnR5KG1ha2VBdHRyS2V5KG5hbWUpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIHdoZW4gdGhleSBhcmUgZGlydHkuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogVXNlIEJ1ZmZlclN1YkRhdGE/XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRCdWZmZXIoX2dsLkFSUkFZX0JVRkZFUiwgYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuYnVmZmVyRGF0YShfZ2wuQVJSQVlfQlVGRkVSLCBhdHRyaWJ1dGUudmFsdWUsIHRoaXMuZHluYW1pYyA/IGdsZW51bS5EWU5BTUlDX0RSQVcgOiBnbGVudW0uU1RBVElDX0RSQVcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZUJ1ZmZlcnNba10gPSBuZXcgQXR0cmlidXRlQnVmZmVyKG5hbWUsIGF0dHJpYnV0ZS50eXBlLCBidWZmZXIsIGF0dHJpYnV0ZS5zaXplLCBhdHRyaWJ1dGUuc2VtYW50aWMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFJlbW92ZSB1bnVzZWQgYXR0cmlidXRlcyBidWZmZXJzLlxyXG4gICAgICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBrOyBpIDwgYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgX2dsLmRlbGV0ZUJ1ZmZlcihhdHRyaWJ1dGVCdWZmZXJzW2ldLmJ1ZmZlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXR0cmlidXRlQnVmZmVycy5sZW5ndGggPSBrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzVXNlSW5kaWNlcygpICYmIChpc0luZGljZXNEaXJ0eSB8fCBmaXJzdFVwZGF0ZSkpIHtcclxuICAgICAgICAgICAgaWYgKCFpbmRpY2VzQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzQnVmZmVyID0gbmV3IEluZGljZXNCdWZmZXIoX2dsLmNyZWF0ZUJ1ZmZlcigpKTtcclxuICAgICAgICAgICAgICAgIGNodW5rLmluZGljZXNCdWZmZXIgPSBpbmRpY2VzQnVmZmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGluZGljZXNCdWZmZXIuY291bnQgPSB0aGlzLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBfZ2wuYmluZEJ1ZmZlcihfZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIsIGluZGljZXNCdWZmZXIuYnVmZmVyKTtcclxuICAgICAgICAgICAgX2dsLmJ1ZmZlckRhdGEoX2dsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCB0aGlzLmluZGljZXMsIHRoaXMuZHluYW1pYyA/IGdsZW51bS5EWU5BTUlDX0RSQVcgOiBnbGVudW0uU1RBVElDX0RSQVcpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGdlb21ldHJ5IGRhdGEgaW4gR0wgY29udGV4dC5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcblxyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG5cclxuICAgICAgICBjYWNoZS51c2UocmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICAgICAgdmFyIGNodW5rcyA9IGNhY2hlLmdldCgnY2h1bmtzJyk7XHJcbiAgICAgICAgaWYgKGNodW5rcykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNodW5rcy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNodW5rID0gY2h1bmtzW2NdO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgY2h1bmsuYXR0cmlidXRlQnVmZmVycy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJzID0gY2h1bmsuYXR0cmlidXRlQnVmZmVyc1trXTtcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5nbC5kZWxldGVCdWZmZXIoYXR0cmlicy5idWZmZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjaHVuay5pbmRpY2VzQnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKGNodW5rLmluZGljZXNCdWZmZXIuYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fX3Zhb0NhY2hlKSB7XHJcbiAgICAgICAgICAgIHZhciB2YW9FeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignT0VTX3ZlcnRleF9hcnJheV9vYmplY3QnKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fX3Zhb0NhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFvID0gdGhpcy5fX3Zhb0NhY2hlW2lkXS52YW87XHJcbiAgICAgICAgICAgICAgICBpZiAodmFvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFvRXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHZhbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fX3Zhb0NhY2hlID0ge307XHJcbiAgICAgICAgY2FjaGUuZGVsZXRlQ29udGV4dChyZW5kZXJlci5fX3VpZF9fKTtcclxuICAgIH1cclxuXHJcbn0pO1xyXG5cclxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBjbGF5Lkdlb21ldHJ5QmFzZSN2ZXJ0ZXhDb3VudFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoR2VvbWV0cnlCYXNlLnByb3RvdHlwZSwgJ3ZlcnRleENvdW50Jywge1xyXG5cclxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuXHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgbWFpbkF0dHJpYnV0ZSA9IHRoaXMuYXR0cmlidXRlc1t0aGlzLm1haW5BdHRyaWJ1dGVdO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFtYWluQXR0cmlidXRlKSB7XHJcbiAgICAgICAgICAgICAgICBtYWluQXR0cmlidXRlID0gdGhpcy5hdHRyaWJ1dGVzW3RoaXMuX2F0dHJpYnV0ZUxpc3RbMF1dO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIW1haW5BdHRyaWJ1dGUgfHwgIW1haW5BdHRyaWJ1dGUudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBtYWluQXR0cmlidXRlLnZhbHVlLmxlbmd0aCAvIG1haW5BdHRyaWJ1dGUuc2l6ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgY2xheS5HZW9tZXRyeUJhc2UjdHJpYW5nbGVDb3VudFxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEByZWFkT25seVxyXG4gICAgICovXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoR2VvbWV0cnlCYXNlLnByb3RvdHlwZSwgJ3RyaWFuZ2xlQ291bnQnLCB7XHJcblxyXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG5cclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmluZGljZXM7XHJcbiAgICAgICAgICAgIGlmICghaW5kaWNlcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kaWNlcy5sZW5ndGggLyAzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbkdlb21ldHJ5QmFzZS5TVEFUSUNfRFJBVyA9IGdsZW51bS5TVEFUSUNfRFJBVztcclxuR2VvbWV0cnlCYXNlLkRZTkFNSUNfRFJBVyA9IGdsZW51bS5EWU5BTUlDX0RSQVc7XHJcbkdlb21ldHJ5QmFzZS5TVFJFQU1fRFJBVyA9IGdsZW51bS5TVFJFQU1fRFJBVztcclxuXHJcbkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGVCdWZmZXIgPSBBdHRyaWJ1dGVCdWZmZXI7XHJcbkdlb21ldHJ5QmFzZS5JbmRpY2VzQnVmZmVyID0gSW5kaWNlc0J1ZmZlcjtcclxuXHJcbkdlb21ldHJ5QmFzZS5BdHRyaWJ1dGUgPSBBdHRyaWJ1dGU7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHZW9tZXRyeUJhc2U7XHJcbiIsImltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4vZ2xtYXRyaXgvdmVjMyc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4vZ2xtYXRyaXgvbWF0NCc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgR2VvbWV0cnlCYXNlIGZyb20gJy4vR2VvbWV0cnlCYXNlJztcclxuXHJcbnZhciB2ZWMzQ3JlYXRlID0gdmVjMy5jcmVhdGU7XHJcbnZhciB2ZWMzQWRkID0gdmVjMy5hZGQ7XHJcbnZhciB2ZWMzU2V0ID0gdmVjMy5zZXQ7XHJcblxyXG52YXIgQXR0cmlidXRlID0gR2VvbWV0cnlCYXNlLkF0dHJpYnV0ZTtcclxuXHJcbi8qKlxyXG4gKiBHZW9tZXRyeSBpbiBDbGF5R0wgY29udGFpbnMgdmVydGV4IGF0dHJpYnV0ZXMgb2YgbWVzaC4gVGhlc2UgdmVydGV4IGF0dHJpYnV0ZXMgd2lsbCBiZSBmaW5hbGx5IHByb3ZpZGVkIHRvIHRoZSB7QGxpbmsgY2xheS5TaGFkZXJ9LlxyXG4gKiBEaWZmZXJlbnQge0BsaW5rIGNsYXkuU2hhZGVyfSBuZWVkcyBkaWZmZXJlbnQgYXR0cmlidXRlcy4gSGVyZSBpcyBhIGxpc3Qgb2YgYXR0cmlidXRlcyB1c2VkIGluIHRoZSBidWlsdGluIHNoYWRlcnMuXHJcbiAqXHJcbiAqICsgcG9zaXRpb246IGBjbGF5LmJhc2ljYCwgYGNsYXkubGFtYmVydGAsIGBjbGF5LnN0YW5kYXJkYFxyXG4gKiArIHRleGNvb3JkMDogYGNsYXkuYmFzaWNgLCBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgY29sb3I6IGBjbGF5LmJhc2ljYCwgYGNsYXkubGFtYmVydGAsIGBjbGF5LnN0YW5kYXJkYFxyXG4gKiArIHdlaWdodDogYGNsYXkuYmFzaWNgLCBgY2xheS5sYW1iZXJ0YCwgYGNsYXkuc3RhbmRhcmRgXHJcbiAqICsgam9pbnQ6IGBjbGF5LmJhc2ljYCwgYGNsYXkubGFtYmVydGAsIGBjbGF5LnN0YW5kYXJkYFxyXG4gKiArIG5vcm1hbDogYGNsYXkubGFtYmVydGAsIGBjbGF5LnN0YW5kYXJkYFxyXG4gKiArIHRhbmdlbnQ6IGBjbGF5LnN0YW5kYXJkYFxyXG4gKlxyXG4gKiAjIyMjIENyZWF0ZSBhIHByb2NlZHVyYWwgZ2VvbWV0cnlcclxuICpcclxuICogQ2xheUdMIHByb3ZpZGVzIGEgY291cGxlIG9mIGJ1aWx0aW4gcHJvY2VkdXJhbCBnZW9tZXRyaWVzLiBJbmxjdWRpbmc6XHJcbiAqXHJcbiAqICArIHtAbGluayBjbGF5Lmdlb21ldHJ5LkN1YmV9XHJcbiAqICArIHtAbGluayBjbGF5Lmdlb21ldHJ5LlNwaGVyZX1cclxuICogICsge0BsaW5rIGNsYXkuZ2VvbWV0cnkuUGxhbmV9XHJcbiAqICArIHtAbGluayBjbGF5Lmdlb21ldHJ5LkN5bGluZGVyfVxyXG4gKiAgKyB7QGxpbmsgY2xheS5nZW9tZXRyeS5Db25lfVxyXG4gKiAgKyB7QGxpbmsgY2xheS5nZW9tZXRyeS5QYXJhbWV0cmljU3VyZmFjZX1cclxuICpcclxuICogSXQncyBzaW1wbGUgdG8gY3JlYXRlIGEgYmFzaWMgZ2VvbWV0cnkgd2l0aCB0aGVzZSBjbGFzc2VzLlxyXG4gKlxyXG5gYGBqc1xyXG52YXIgc3BoZXJlID0gbmV3IGNsYXkuZ2VvbWV0cnkuU3BoZXJlKHtcclxuICAgIHJhZGl1czogMlxyXG59KTtcclxuYGBgXHJcbiAqXHJcbiAqICMjIyMgQ3JlYXRlIHRoZSBnZW9tZXRyeSBkYXRhIGJ5IHlvdXJzZWxmXHJcbiAqXHJcbiAqIFVzdWFsbHkgdGhlIHZlcnRleCBhdHRyaWJ1dGVzIGRhdGEgYXJlIGNyZWF0ZWQgYnkgdGhlIHtAbGluayBjbGF5LmxvYWRlci5HTFRGfSBvciBwcm9jZWR1cmFsIGdlb21ldHJpZXMgbGlrZSB7QGxpbmsgY2xheS5nZW9tZXRyeS5TcGhlcmV9LlxyXG4gKiBCZXNpZGVzIHRoZXNlLCB5b3UgY2FuIGNyZWF0ZSB0aGUgZGF0YSBtYW51YWxseS4gSGVyZSBpcyBhIHNpbXBsZSBleGFtcGxlIHRvIGNyZWF0ZSBhIHRyaWFuZ2xlLlxyXG5gYGBqc1xyXG52YXIgVFJJQU5HTEVfUE9TSVRJT05TID0gW1xyXG4gICAgWy0wLjUsIC0wLjUsIDBdLFxyXG4gICAgWzAuNSwgLTAuNSwgMF0sXHJcbiAgICBbMCwgMC41LCAwXVxyXG5dO1xyXG52YXIgZ2VvbWV0cnkgPSBuZXcgY2xheS5TdGF0aWNHZW9tZXRyeUJhc2UoKTtcclxuLy8gQWRkIHRyaWFuZ2xlIHZlcnRpY2VzIHRvIHBvc2l0aW9uIGF0dHJpYnV0ZS5cclxuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5mcm9tQXJyYXkoVFJJQU5HTEVfUE9TSVRJT05TKTtcclxuYGBgXHJcbiAqIFRoZW4geW91IGNhbiB1c2UgdGhlIHV0aWxpdHkgbWV0aG9kcyBsaWtlIGBnZW5lcmF0ZVZlcnRleE5vcm1hbHNgLCBgZ2VuZXJhdGVUYW5nZW50c2AgdG8gY3JlYXRlIHRoZSByZW1haW5pbmcgbmVjZXNzYXJ5IGF0dHJpYnV0ZXMuXHJcbiAqXHJcbiAqXHJcbiAqICMjIyMgVXNlIHdpdGggY3VzdG9tIHNoYWRlcnNcclxuICpcclxuICogSWYgeW91IHdhbid0IHRvIHdyaXRlIGN1c3RvbSBzaGFkZXJzLiBEb24ndCBmb3JnZXQgdG8gYWRkIFNFTUFOVElDUyB0byB0aGVzZSBhdHRyaWJ1dGVzLiBGb3IgZXhhbXBsZVxyXG4gKlxyXG4gYGBgZ2xzbFxyXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XHJcbnVuaWZvcm0gbWF0NCB3b3JsZEludmVyc2VUcmFuc3Bvc2UgOiBXT1JMRElOVkVSU0VUUkFOU1BPU0U7XHJcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xyXG5cclxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcclxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xyXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XHJcbmBgYFxyXG4gKiBUaGVzZSBgUE9TSVRJT05gLCBgVEVYQ09PUkRfMGAsIGBOT1JNQUxgIGFyZSBTRU1BTlRJQ1Mgd2hpY2ggd2lsbCBtYXAgdGhlIGF0dHJpYnV0ZXMgaW4gc2hhZGVyIHRvIHRoZSBhdHRyaWJ1dGVzIGluIHRoZSBHZW9tZXRyeUJhc2VcclxuICpcclxuICogQXZhaWxhYmxlIGF0dHJpYnV0ZXMgU0VNQU5USUNTIGluY2x1ZGVzIGBQT1NJVElPTmAsIGBURVhDT09SRF8wYCwgYFRFWENPT1JEXzFgIGBOT1JNQUxgLCBgVEFOR0VOVGAsIGBDT0xPUmAsIGBXRUlHSFRgLCBgSk9JTlRgLlxyXG4gKlxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5HZW9tZXRyeVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5QmFzZVxyXG4gKi9cclxudmFyIEdlb21ldHJ5ID0gR2VvbWV0cnlCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5Lkdlb21ldHJ5IyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXR0cmlidXRlcyBvZiBnZW9tZXRyeS4gSW5jbHVkaW5nOlxyXG4gICAgICAgICAqICArIGBwb3NpdGlvbmBcclxuICAgICAgICAgKiAgKyBgdGV4Y29vcmQwYFxyXG4gICAgICAgICAqICArIGB0ZXhjb29yZDFgXHJcbiAgICAgICAgICogICsgYG5vcm1hbGBcclxuICAgICAgICAgKiAgKyBgdGFuZ2VudGBcclxuICAgICAgICAgKiAgKyBgY29sb3JgXHJcbiAgICAgICAgICogICsgYHdlaWdodGBcclxuICAgICAgICAgKiAgKyBgam9pbnRgXHJcbiAgICAgICAgICogICsgYGJhcnljZW50cmljYFxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdC48c3RyaW5nLCBjbGF5Lkdlb21ldHJ5LkF0dHJpYnV0ZT59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXR0cmlidXRlczoge1xyXG4gICAgICAgICAgICBwb3NpdGlvbjogbmV3IEF0dHJpYnV0ZSgncG9zaXRpb24nLCAnZmxvYXQnLCAzLCAnUE9TSVRJT04nKSxcclxuICAgICAgICAgICAgdGV4Y29vcmQwOiBuZXcgQXR0cmlidXRlKCd0ZXhjb29yZDAnLCAnZmxvYXQnLCAyLCAnVEVYQ09PUkRfMCcpLFxyXG4gICAgICAgICAgICB0ZXhjb29yZDE6IG5ldyBBdHRyaWJ1dGUoJ3RleGNvb3JkMScsICdmbG9hdCcsIDIsICdURVhDT09SRF8xJyksXHJcbiAgICAgICAgICAgIG5vcm1hbDogbmV3IEF0dHJpYnV0ZSgnbm9ybWFsJywgJ2Zsb2F0JywgMywgJ05PUk1BTCcpLFxyXG4gICAgICAgICAgICB0YW5nZW50OiBuZXcgQXR0cmlidXRlKCd0YW5nZW50JywgJ2Zsb2F0JywgNCwgJ1RBTkdFTlQnKSxcclxuICAgICAgICAgICAgY29sb3I6IG5ldyBBdHRyaWJ1dGUoJ2NvbG9yJywgJ2Zsb2F0JywgNCwgJ0NPTE9SJyksXHJcbiAgICAgICAgICAgIC8vIFNraW5uaW5nIGF0dHJpYnV0ZXNcclxuICAgICAgICAgICAgLy8gRWFjaCB2ZXJ0ZXggY2FuIGJlIGJpbmQgdG8gNCBib25lcywgYmVjYXVzZSB0aGVcclxuICAgICAgICAgICAgLy8gc3VtIG9mIHdlaWdodHMgaXMgMSwgc28gdGhlIHdlaWdodHMgaXMgc3RvcmVkIGluIHZlYzMgYW5kIHRoZSBsYXN0XHJcbiAgICAgICAgICAgIC8vIGNhbiBiZSBjYWxjdWxhdGVkIGJ5IDEtdy54LXcueS13LnpcclxuICAgICAgICAgICAgd2VpZ2h0OiBuZXcgQXR0cmlidXRlKCd3ZWlnaHQnLCAnZmxvYXQnLCAzLCAnV0VJR0hUJyksXHJcbiAgICAgICAgICAgIGpvaW50OiBuZXcgQXR0cmlidXRlKCdqb2ludCcsICdmbG9hdCcsIDQsICdKT0lOVCcpLFxyXG4gICAgICAgICAgICAvLyBGb3Igd2lyZWZyYW1lIGRpc3BsYXlcclxuICAgICAgICAgICAgLy8gaHR0cDovL2NvZGVmbG93Lm9yZy9lbnRyaWVzLzIwMTIvYXVnLzAyL2Vhc3ktd2lyZWZyYW1lLWRpc3BsYXktd2l0aC1iYXJ5Y2VudHJpYy1jb29yZGluYXRlcy9cclxuICAgICAgICAgICAgYmFyeWNlbnRyaWM6IG5ldyBBdHRyaWJ1dGUoJ2JhcnljZW50cmljJywgJ2Zsb2F0JywgMywgbnVsbCksXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYWxjdWxhdGVkIGJvdW5kaW5nIGJveCBvZiBnZW9tZXRyeS5cclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5Cb3VuZGluZ0JveH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBib3VuZGluZ0JveDogbnVsbFxyXG4gICAgfTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5Lkdlb21ldHJ5LnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgbWFpbkF0dHJpYnV0ZTogJ3Bvc2l0aW9uJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBib3VuZGluZ0JveCBvZiBHZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVCb3VuZGluZ0JveDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBiYm94ID0gdGhpcy5ib3VuZGluZ0JveDtcclxuICAgICAgICBpZiAoIWJib3gpIHtcclxuICAgICAgICAgICAgYmJveCA9IHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBvc0FyciA9IHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICBpZiAocG9zQXJyICYmIHBvc0Fyci5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFyIG1pbiA9IGJib3gubWluO1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gYmJveC5tYXg7XHJcbiAgICAgICAgICAgIHZhciBtaW5BcnIgPSBtaW4uYXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBtYXhBcnIgPSBtYXguYXJyYXk7XHJcbiAgICAgICAgICAgIHZlYzMuc2V0KG1pbkFyciwgcG9zQXJyWzBdLCBwb3NBcnJbMV0sIHBvc0FyclsyXSk7XHJcbiAgICAgICAgICAgIHZlYzMuc2V0KG1heEFyciwgcG9zQXJyWzBdLCBwb3NBcnJbMV0sIHBvc0FyclsyXSk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAzOyBpIDwgcG9zQXJyLmxlbmd0aDspIHtcclxuICAgICAgICAgICAgICAgIHZhciB4ID0gcG9zQXJyW2krK107XHJcbiAgICAgICAgICAgICAgICB2YXIgeSA9IHBvc0FycltpKytdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHogPSBwb3NBcnJbaSsrXTtcclxuICAgICAgICAgICAgICAgIGlmICh4IDwgbWluQXJyWzBdKSB7IG1pbkFyclswXSA9IHg7IH1cclxuICAgICAgICAgICAgICAgIGlmICh5IDwgbWluQXJyWzFdKSB7IG1pbkFyclsxXSA9IHk7IH1cclxuICAgICAgICAgICAgICAgIGlmICh6IDwgbWluQXJyWzJdKSB7IG1pbkFyclsyXSA9IHo7IH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoeCA+IG1heEFyclswXSkgeyBtYXhBcnJbMF0gPSB4OyB9XHJcbiAgICAgICAgICAgICAgICBpZiAoeSA+IG1heEFyclsxXSkgeyBtYXhBcnJbMV0gPSB5OyB9XHJcbiAgICAgICAgICAgICAgICBpZiAoeiA+IG1heEFyclsyXSkgeyBtYXhBcnJbMl0gPSB6OyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWluLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIG1heC5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBub3JtYWxzIHBlciB2ZXJ0ZXguXHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlVmVydGV4Tm9ybWFsczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICB2YXIgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xyXG5cclxuICAgICAgICBpZiAoIW5vcm1hbHMgfHwgbm9ybWFscy5sZW5ndGggIT09IHBvc2l0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkocG9zaXRpb25zLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBSZXNldFxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vcm1hbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaV0gPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcDEgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHAyID0gdmVjM0NyZWF0ZSgpO1xyXG4gICAgICAgIHZhciBwMyA9IHZlYzNDcmVhdGUoKTtcclxuXHJcbiAgICAgICAgdmFyIHYyMSA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgdjMyID0gdmVjM0NyZWF0ZSgpO1xyXG5cclxuICAgICAgICB2YXIgbiA9IHZlYzNDcmVhdGUoKTtcclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHRoaXMudmVydGV4Q291bnQ7XHJcbiAgICAgICAgdmFyIGkxLCBpMiwgaTM7XHJcbiAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBsZW47KSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGluZGljZXNbZisrXTtcclxuICAgICAgICAgICAgICAgIGkyID0gaW5kaWNlc1tmKytdO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBpbmRpY2VzW2YrK107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGYrKztcclxuICAgICAgICAgICAgICAgIGkyID0gZisrO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBmKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlYzNTZXQocDEsIHBvc2l0aW9uc1tpMSozXSwgcG9zaXRpb25zW2kxKjMrMV0sIHBvc2l0aW9uc1tpMSozKzJdKTtcclxuICAgICAgICAgICAgdmVjM1NldChwMiwgcG9zaXRpb25zW2kyKjNdLCBwb3NpdGlvbnNbaTIqMysxXSwgcG9zaXRpb25zW2kyKjMrMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHAzLCBwb3NpdGlvbnNbaTMqM10sIHBvc2l0aW9uc1tpMyozKzFdLCBwb3NpdGlvbnNbaTMqMysyXSk7XHJcblxyXG4gICAgICAgICAgICB2ZWMzLnN1Yih2MjEsIHAxLCBwMik7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYzMiwgcDIsIHAzKTtcclxuICAgICAgICAgICAgdmVjMy5jcm9zcyhuLCB2MjEsIHYzMik7XHJcbiAgICAgICAgICAgIC8vIEFscmVhZHkgYmUgd2VpZ2h0ZWQgYnkgdGhlIHRyaWFuZ2xlIGFyZWFcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG5vcm1hbHNbaTEqMytpXSA9IG5vcm1hbHNbaTEqMytpXSArIG5baV07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kyKjMraV0gPSBub3JtYWxzW2kyKjMraV0gKyBuW2ldO1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsc1tpMyozK2ldID0gbm9ybWFsc1tpMyozK2ldICsgbltpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub3JtYWxzLmxlbmd0aDspIHtcclxuICAgICAgICAgICAgdmVjM1NldChuLCBub3JtYWxzW2ldLCBub3JtYWxzW2krMV0sIG5vcm1hbHNbaSsyXSk7XHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKG4sIG4pO1xyXG4gICAgICAgICAgICBub3JtYWxzW2krK10gPSBuWzBdO1xyXG4gICAgICAgICAgICBub3JtYWxzW2krK10gPSBuWzFdO1xyXG4gICAgICAgICAgICBub3JtYWxzW2krK10gPSBuWzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGUgbm9ybWFscyBwZXIgZmFjZS5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVGYWNlTm9ybWFsczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghdGhpcy52ZXJ0ZXhDb3VudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNVbmlxdWVWZXJ0ZXgoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlVW5pcXVlVmVydGV4KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICB2YXIgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xyXG5cclxuICAgICAgICB2YXIgcDEgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIHAyID0gdmVjM0NyZWF0ZSgpO1xyXG4gICAgICAgIHZhciBwMyA9IHZlYzNDcmVhdGUoKTtcclxuXHJcbiAgICAgICAgdmFyIHYyMSA9IHZlYzNDcmVhdGUoKTtcclxuICAgICAgICB2YXIgdjMyID0gdmVjM0NyZWF0ZSgpO1xyXG4gICAgICAgIHZhciBuID0gdmVjM0NyZWF0ZSgpO1xyXG5cclxuICAgICAgICBpZiAoIW5vcm1hbHMpIHtcclxuICAgICAgICAgICAgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShwb3NpdGlvbnMubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGxlbiA9IGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHRoaXMudmVydGV4Q291bnQ7XHJcbiAgICAgICAgdmFyIGkxLCBpMiwgaTM7XHJcbiAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBsZW47KSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGluZGljZXNbZisrXTtcclxuICAgICAgICAgICAgICAgIGkyID0gaW5kaWNlc1tmKytdO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBpbmRpY2VzW2YrK107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGYrKztcclxuICAgICAgICAgICAgICAgIGkyID0gZisrO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBmKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlYzNTZXQocDEsIHBvc2l0aW9uc1tpMSozXSwgcG9zaXRpb25zW2kxKjMrMV0sIHBvc2l0aW9uc1tpMSozKzJdKTtcclxuICAgICAgICAgICAgdmVjM1NldChwMiwgcG9zaXRpb25zW2kyKjNdLCBwb3NpdGlvbnNbaTIqMysxXSwgcG9zaXRpb25zW2kyKjMrMl0pO1xyXG4gICAgICAgICAgICB2ZWMzU2V0KHAzLCBwb3NpdGlvbnNbaTMqM10sIHBvc2l0aW9uc1tpMyozKzFdLCBwb3NpdGlvbnNbaTMqMysyXSk7XHJcblxyXG4gICAgICAgICAgICB2ZWMzLnN1Yih2MjEsIHAxLCBwMik7XHJcbiAgICAgICAgICAgIHZlYzMuc3ViKHYzMiwgcDIsIHAzKTtcclxuICAgICAgICAgICAgdmVjMy5jcm9zcyhuLCB2MjEsIHYzMik7XHJcblxyXG4gICAgICAgICAgICB2ZWMzLm5vcm1hbGl6ZShuLCBuKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kxKjMgKyBpXSA9IG5baV07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kyKjMgKyBpXSA9IG5baV07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW2kzKjMgKyBpXSA9IG5baV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIHRhbmdlbnRzIGF0dHJpYnV0ZXMuXHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlVGFuZ2VudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudmVydGV4Q291bnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG5WZXJ0ZXggPSB0aGlzLnZlcnRleENvdW50O1xyXG4gICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIGlmICghYXR0cmlidXRlcy50YW5nZW50LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMudGFuZ2VudC52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkoblZlcnRleCAqIDQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdGV4Y29vcmRzID0gYXR0cmlidXRlcy50ZXhjb29yZDAudmFsdWU7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9ucyA9IGF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWU7XHJcbiAgICAgICAgdmFyIHRhbmdlbnRzID0gYXR0cmlidXRlcy50YW5nZW50LnZhbHVlO1xyXG4gICAgICAgIHZhciBub3JtYWxzID0gYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICghdGV4Y29vcmRzKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignR2VvbWV0cnkgd2l0aG91dCB0ZXhjb29yZHMgY2FuXFwndCBnZW5lcmF0ZSB0YW5nZW50cy4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRhbjEgPSBbXTtcclxuICAgICAgICB2YXIgdGFuMiA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblZlcnRleDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRhbjFbaV0gPSBbMC4wLCAwLjAsIDAuMF07XHJcbiAgICAgICAgICAgIHRhbjJbaV0gPSBbMC4wLCAwLjAsIDAuMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc2RpciA9IFswLjAsIDAuMCwgMC4wXTtcclxuICAgICAgICB2YXIgdGRpciA9IFswLjAsIDAuMCwgMC4wXTtcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuXHJcbiAgICAgICAgdmFyIGxlbiA9IGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHRoaXMudmVydGV4Q291bnQ7XHJcbiAgICAgICAgdmFyIGkxLCBpMiwgaTM7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47KSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGluZGljZXNbaSsrXTtcclxuICAgICAgICAgICAgICAgIGkyID0gaW5kaWNlc1tpKytdO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBpbmRpY2VzW2krK107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpMSA9IGkrKztcclxuICAgICAgICAgICAgICAgIGkyID0gaSsrO1xyXG4gICAgICAgICAgICAgICAgaTMgPSBpKys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBzdDFzID0gdGV4Y29vcmRzW2kxICogMl0sXHJcbiAgICAgICAgICAgICAgICBzdDJzID0gdGV4Y29vcmRzW2kyICogMl0sXHJcbiAgICAgICAgICAgICAgICBzdDNzID0gdGV4Y29vcmRzW2kzICogMl0sXHJcbiAgICAgICAgICAgICAgICBzdDF0ID0gdGV4Y29vcmRzW2kxICogMiArIDFdLFxyXG4gICAgICAgICAgICAgICAgc3QydCA9IHRleGNvb3Jkc1tpMiAqIDIgKyAxXSxcclxuICAgICAgICAgICAgICAgIHN0M3QgPSB0ZXhjb29yZHNbaTMgKiAyICsgMV0sXHJcblxyXG4gICAgICAgICAgICAgICAgcDF4ID0gcG9zaXRpb25zW2kxICogM10sXHJcbiAgICAgICAgICAgICAgICBwMnggPSBwb3NpdGlvbnNbaTIgKiAzXSxcclxuICAgICAgICAgICAgICAgIHAzeCA9IHBvc2l0aW9uc1tpMyAqIDNdLFxyXG4gICAgICAgICAgICAgICAgcDF5ID0gcG9zaXRpb25zW2kxICogMyArIDFdLFxyXG4gICAgICAgICAgICAgICAgcDJ5ID0gcG9zaXRpb25zW2kyICogMyArIDFdLFxyXG4gICAgICAgICAgICAgICAgcDN5ID0gcG9zaXRpb25zW2kzICogMyArIDFdLFxyXG4gICAgICAgICAgICAgICAgcDF6ID0gcG9zaXRpb25zW2kxICogMyArIDJdLFxyXG4gICAgICAgICAgICAgICAgcDJ6ID0gcG9zaXRpb25zW2kyICogMyArIDJdLFxyXG4gICAgICAgICAgICAgICAgcDN6ID0gcG9zaXRpb25zW2kzICogMyArIDJdO1xyXG5cclxuICAgICAgICAgICAgdmFyIHgxID0gcDJ4IC0gcDF4LFxyXG4gICAgICAgICAgICAgICAgeDIgPSBwM3ggLSBwMXgsXHJcbiAgICAgICAgICAgICAgICB5MSA9IHAyeSAtIHAxeSxcclxuICAgICAgICAgICAgICAgIHkyID0gcDN5IC0gcDF5LFxyXG4gICAgICAgICAgICAgICAgejEgPSBwMnogLSBwMXosXHJcbiAgICAgICAgICAgICAgICB6MiA9IHAzeiAtIHAxejtcclxuXHJcbiAgICAgICAgICAgIHZhciBzMSA9IHN0MnMgLSBzdDFzLFxyXG4gICAgICAgICAgICAgICAgczIgPSBzdDNzIC0gc3QxcyxcclxuICAgICAgICAgICAgICAgIHQxID0gc3QydCAtIHN0MXQsXHJcbiAgICAgICAgICAgICAgICB0MiA9IHN0M3QgLSBzdDF0O1xyXG5cclxuICAgICAgICAgICAgdmFyIHIgPSAxLjAgLyAoczEgKiB0MiAtIHQxICogczIpO1xyXG4gICAgICAgICAgICBzZGlyWzBdID0gKHQyICogeDEgLSB0MSAqIHgyKSAqIHI7XHJcbiAgICAgICAgICAgIHNkaXJbMV0gPSAodDIgKiB5MSAtIHQxICogeTIpICogcjtcclxuICAgICAgICAgICAgc2RpclsyXSA9ICh0MiAqIHoxIC0gdDEgKiB6MikgKiByO1xyXG5cclxuICAgICAgICAgICAgdGRpclswXSA9IChzMSAqIHgyIC0gczIgKiB4MSkgKiByO1xyXG4gICAgICAgICAgICB0ZGlyWzFdID0gKHMxICogeTIgLSBzMiAqIHkxKSAqIHI7XHJcbiAgICAgICAgICAgIHRkaXJbMl0gPSAoczEgKiB6MiAtIHMyICogejEpICogcjtcclxuXHJcbiAgICAgICAgICAgIHZlYzNBZGQodGFuMVtpMV0sIHRhbjFbaTFdLCBzZGlyKTtcclxuICAgICAgICAgICAgdmVjM0FkZCh0YW4xW2kyXSwgdGFuMVtpMl0sIHNkaXIpO1xyXG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjFbaTNdLCB0YW4xW2kzXSwgc2Rpcik7XHJcbiAgICAgICAgICAgIHZlYzNBZGQodGFuMltpMV0sIHRhbjJbaTFdLCB0ZGlyKTtcclxuICAgICAgICAgICAgdmVjM0FkZCh0YW4yW2kyXSwgdGFuMltpMl0sIHRkaXIpO1xyXG4gICAgICAgICAgICB2ZWMzQWRkKHRhbjJbaTNdLCB0YW4yW2kzXSwgdGRpcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0bXAgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIG5Dcm9zc1QgPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgdmFyIG4gPSB2ZWMzQ3JlYXRlKCk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVmVydGV4OyBpKyspIHtcclxuICAgICAgICAgICAgblswXSA9IG5vcm1hbHNbaSAqIDNdO1xyXG4gICAgICAgICAgICBuWzFdID0gbm9ybWFsc1tpICogMyArIDFdO1xyXG4gICAgICAgICAgICBuWzJdID0gbm9ybWFsc1tpICogMyArIDJdO1xyXG4gICAgICAgICAgICB2YXIgdCA9IHRhbjFbaV07XHJcblxyXG4gICAgICAgICAgICAvLyBHcmFtLVNjaG1pZHQgb3J0aG9nb25hbGl6ZVxyXG4gICAgICAgICAgICB2ZWMzLnNjYWxlKHRtcCwgbiwgdmVjMy5kb3QobiwgdCkpO1xyXG4gICAgICAgICAgICB2ZWMzLnN1Yih0bXAsIHQsIHRtcCk7XHJcbiAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKHRtcCwgdG1wKTtcclxuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGhhbmRlZG5lc3MuXHJcbiAgICAgICAgICAgIHZlYzMuY3Jvc3MobkNyb3NzVCwgbiwgdCk7XHJcbiAgICAgICAgICAgIHRhbmdlbnRzW2kgKiA0XSA9IHRtcFswXTtcclxuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDQgKyAxXSA9IHRtcFsxXTtcclxuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDQgKyAyXSA9IHRtcFsyXTtcclxuICAgICAgICAgICAgLy8gUEVORElORyBjYW4gY29uZmlnID9cclxuICAgICAgICAgICAgdGFuZ2VudHNbaSAqIDQgKyAzXSA9IHZlYzMuZG90KG5Dcm9zc1QsIHRhbjJbaV0pIDwgMC4wID8gLTEuMCA6IDEuMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHZlcnRpY2VzIGFyZSBub3Qgc2hhcmVkIGJ5IGRpZmZlcmVudCBpbmRpY2VzLlxyXG4gICAgICovXHJcbiAgICBpc1VuaXF1ZVZlcnRleDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzVXNlSW5kaWNlcygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZlcnRleENvdW50ID09PSB0aGlzLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgdW5pcXVlIHZlcnRleCBmb3IgZWFjaCBpbmRleC5cclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVVbmlxdWVWZXJ0ZXg6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudmVydGV4Q291bnQgfHwgIXRoaXMuaW5kaWNlcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pbmRpY2VzLmxlbmd0aCA+IDB4ZmZmZikge1xyXG4gICAgICAgICAgICB0aGlzLmluZGljZXMgPSBuZXcgdmVuZG9yLlVpbnQzMkFycmF5KHRoaXMuaW5kaWNlcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuXHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWVMaXN0ID0gdGhpcy5nZXRFbmFibGVkQXR0cmlidXRlcygpO1xyXG5cclxuICAgICAgICB2YXIgb2xkQXR0clZhbHVlcyA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmlidXRlTmFtZUxpc3QubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lTGlzdFthXTtcclxuICAgICAgICAgICAgb2xkQXR0clZhbHVlc1tuYW1lXSA9IGF0dHJpYnV0ZXNbbmFtZV0udmFsdWU7XHJcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbbmFtZV0uaW5pdCh0aGlzLmluZGljZXMubGVuZ3RoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjdXJzb3IgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgaWkgPSBpbmRpY2VzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGF0dHJpYnV0ZU5hbWVMaXN0Lmxlbmd0aDsgYSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVMaXN0W2FdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gYXR0cmlidXRlc1tuYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIHZhciBzaXplID0gYXR0cmlidXRlc1tuYW1lXS5zaXplO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbY3Vyc29yICogc2l6ZSArIGtdID0gb2xkQXR0clZhbHVlc1tuYW1lXVtpaSAqIHNpemUgKyBrXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbmRpY2VzW2ldID0gY3Vyc29yO1xyXG4gICAgICAgICAgICBjdXJzb3IrKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGlydHkoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZSBiYXJ5Y2VudHJpYyBjb29yZGluYXRlcyBmb3Igd2lyZWZyYW1lIGRyYXcuXHJcbiAgICAgKi9cclxuICAgIGdlbmVyYXRlQmFyeWNlbnRyaWM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudmVydGV4Q291bnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzVW5pcXVlVmVydGV4KCkpIHtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVVuaXF1ZVZlcnRleCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgdmFyIGFycmF5ID0gYXR0cmlidXRlcy5iYXJ5Y2VudHJpYy52YWx1ZTtcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcztcclxuICAgICAgICAvLyBBbHJlYWR5IGV4aXN0ZWQ7XHJcbiAgICAgICAgaWYgKGFycmF5ICYmIGFycmF5Lmxlbmd0aCA9PT0gaW5kaWNlcy5sZW5ndGggKiAzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXJyYXkgPSBhdHRyaWJ1dGVzLmJhcnljZW50cmljLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShpbmRpY2VzLmxlbmd0aCAqIDMpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IChpbmRpY2VzID8gaW5kaWNlcy5sZW5ndGggOiB0aGlzLnZlcnRleENvdW50IC8gMyk7KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMzsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWkgPSBpbmRpY2VzID8gaW5kaWNlc1tpKytdIDogKGkgKiAzICsgaik7XHJcbiAgICAgICAgICAgICAgICBhcnJheVtpaSAqIDMgKyBqXSA9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IHRyYW5zZm9ybSB0byBnZW9tZXRyeSBhdHRyaWJ1dGVzLlxyXG4gICAgICogQHBhcmFtIHtjbGF5Lk1hdHJpeDR9IG1hdHJpeFxyXG4gICAgICovXHJcbiAgICBhcHBseVRyYW5zZm9ybTogZnVuY3Rpb24gKG1hdHJpeCkge1xyXG5cclxuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHRoaXMuYXR0cmlidXRlcztcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICB2YXIgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xyXG4gICAgICAgIHZhciB0YW5nZW50cyA9IGF0dHJpYnV0ZXMudGFuZ2VudC52YWx1ZTtcclxuXHJcbiAgICAgICAgbWF0cml4ID0gbWF0cml4LmFycmF5O1xyXG4gICAgICAgIC8vIE5vcm1hbCBNYXRyaXhcclxuICAgICAgICB2YXIgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCA9IG1hdDQuY3JlYXRlKCk7XHJcbiAgICAgICAgbWF0NC5pbnZlcnQoaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCwgbWF0cml4KTtcclxuICAgICAgICBtYXQ0LnRyYW5zcG9zZShpbnZlcnNlVHJhbnNwb3NlTWF0cml4LCBpbnZlcnNlVHJhbnNwb3NlTWF0cml4KTtcclxuXHJcbiAgICAgICAgdmFyIHZlYzNUcmFuc2Zvcm1NYXQ0ID0gdmVjMy50cmFuc2Zvcm1NYXQ0O1xyXG4gICAgICAgIHZhciB2ZWMzRm9yRWFjaCA9IHZlYzMuZm9yRWFjaDtcclxuICAgICAgICB2ZWMzRm9yRWFjaChwb3NpdGlvbnMsIDMsIDAsIG51bGwsIHZlYzNUcmFuc2Zvcm1NYXQ0LCBtYXRyaXgpO1xyXG4gICAgICAgIGlmIChub3JtYWxzKSB7XHJcbiAgICAgICAgICAgIHZlYzNGb3JFYWNoKG5vcm1hbHMsIDMsIDAsIG51bGwsIHZlYzNUcmFuc2Zvcm1NYXQ0LCBpbnZlcnNlVHJhbnNwb3NlTWF0cml4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRhbmdlbnRzKSB7XHJcbiAgICAgICAgICAgIHZlYzNGb3JFYWNoKHRhbmdlbnRzLCA0LCAwLCBudWxsLCB2ZWMzVHJhbnNmb3JtTWF0NCwgaW52ZXJzZVRyYW5zcG9zZU1hdHJpeCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5ib3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBnZW9tZXRyeSBkYXRhIGluIEdMIGNvbnRleHQuXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG5cclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuXHJcbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG4gICAgICAgIHZhciBjaHVua3MgPSBjYWNoZS5nZXQoJ2NodW5rcycpO1xyXG4gICAgICAgIGlmIChjaHVua3MpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBjaHVua3MubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjaHVuayA9IGNodW5rc1tjXTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGNodW5rLmF0dHJpYnV0ZUJ1ZmZlcnMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cmlicyA9IGNodW5rLmF0dHJpYnV0ZUJ1ZmZlcnNba107XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuZ2wuZGVsZXRlQnVmZmVyKGF0dHJpYnMuYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2h1bmsuaW5kaWNlc0J1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLmdsLmRlbGV0ZUJ1ZmZlcihjaHVuay5pbmRpY2VzQnVmZmVyLmJ1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX192YW9DYWNoZSkge1xyXG4gICAgICAgICAgICB2YXIgdmFvRXh0ID0gcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Jyk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMuX192YW9DYWNoZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhbyA9IHRoaXMuX192YW9DYWNoZVtpZF0udmFvO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhb0V4dC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh2YW8pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX192YW9DYWNoZSA9IHt9O1xyXG4gICAgICAgIGNhY2hlLmRlbGV0ZUNvbnRleHQocmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICB9XHJcblxyXG59KTtcclxuXHJcbkdlb21ldHJ5LlNUQVRJQ19EUkFXID0gR2VvbWV0cnlCYXNlLlNUQVRJQ19EUkFXO1xyXG5HZW9tZXRyeS5EWU5BTUlDX0RSQVcgPSBHZW9tZXRyeUJhc2UuRFlOQU1JQ19EUkFXO1xyXG5HZW9tZXRyeS5TVFJFQU1fRFJBVyA9IEdlb21ldHJ5QmFzZS5TVFJFQU1fRFJBVztcclxuXHJcbkdlb21ldHJ5LkF0dHJpYnV0ZUJ1ZmZlciA9IEdlb21ldHJ5QmFzZS5BdHRyaWJ1dGVCdWZmZXI7XHJcbkdlb21ldHJ5LkluZGljZXNCdWZmZXIgPSBHZW9tZXRyeUJhc2UuSW5kaWNlc0J1ZmZlcjtcclxuXHJcbkdlb21ldHJ5LkF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdlb21ldHJ5O1xyXG4iLCJpbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuUGxhbmVcclxuICogQGV4dGVuZHMgY2xheS5HZW9tZXRyeVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQud2lkdGhTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0U2VnbWVudHNdXHJcbiAqL1xyXG52YXIgUGxhbmUgPSBHZW9tZXRyeS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5nZW9tZXRyeS5QbGFuZSMgKi9cclxue1xyXG4gICAgZHluYW1pYzogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHdpZHRoU2VnbWVudHM6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodFNlZ21lbnRzOiAxXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuUGxhbmUucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgcGxhbmUgZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgYnVpbGQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBoZWlnaHRTZWdtZW50cyA9IHRoaXMuaGVpZ2h0U2VnbWVudHM7XHJcbiAgICAgICAgdmFyIHdpZHRoU2VnbWVudHMgPSB0aGlzLndpZHRoU2VnbWVudHM7XHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgdmFyIHBvc2l0aW9ucyA9IFtdO1xyXG4gICAgICAgIHZhciB0ZXhjb29yZHMgPSBbXTtcclxuICAgICAgICB2YXIgbm9ybWFscyA9IFtdO1xyXG4gICAgICAgIHZhciBmYWNlcyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8PSBoZWlnaHRTZWdtZW50czsgeSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB0ID0geSAvIGhlaWdodFNlZ21lbnRzO1xyXG4gICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8PSB3aWR0aFNlZ21lbnRzOyB4KyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBzID0geCAvIHdpZHRoU2VnbWVudHM7XHJcblxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25zLnB1c2goWzIgKiBzIC0gMSwgMiAqIHQgLSAxLCAwXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGV4Y29vcmRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4Y29vcmRzLnB1c2goW3MsIHRdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChub3JtYWxzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFscy5wdXNoKFswLCAwLCAxXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoeCA8IHdpZHRoU2VnbWVudHMgJiYgeSA8IGhlaWdodFNlZ21lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSB4ICsgeSAqICh3aWR0aFNlZ21lbnRzICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFjZXMucHVzaChbaSwgaSArIDEsIGkgKyB3aWR0aFNlZ21lbnRzICsgMV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY2VzLnB1c2goW2kgKyB3aWR0aFNlZ21lbnRzICsgMSwgaSArIDEsIGkgKyB3aWR0aFNlZ21lbnRzICsgMl0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhdHRyaWJ1dGVzLnBvc2l0aW9uLmZyb21BcnJheShwb3NpdGlvbnMpO1xyXG4gICAgICAgIGF0dHJpYnV0ZXMudGV4Y29vcmQwLmZyb21BcnJheSh0ZXhjb29yZHMpO1xyXG4gICAgICAgIGF0dHJpYnV0ZXMubm9ybWFsLmZyb21BcnJheShub3JtYWxzKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0SW5kaWNlc0Zyb21BcnJheShmYWNlcyk7XHJcblxyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1pbi5zZXQoLTEsIC0xLCAwKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1heC5zZXQoMSwgMSwgMCk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGxhbmU7XHJcbiIsImltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBQbGFuZSBmcm9tICcuL1BsYW5lJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuXHJcbnZhciBwbGFuZU1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuQ3ViZVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC53aWR0aFNlZ21lbnRzXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5oZWlnaHRTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuZGVwdGhTZWdtZW50c11cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0Lmluc2lkZV1cclxuICovXHJcbnZhciBDdWJlID0gR2VvbWV0cnkuZXh0ZW5kKFxyXG4vKipAbGVuZHMgY2xheS5nZW9tZXRyeS5DdWJlIyAqL1xyXG57XHJcbiAgICBkeW5hbWljOiBmYWxzZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd2lkdGhTZWdtZW50czogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgaGVpZ2h0U2VnbWVudHM6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRlcHRoU2VnbWVudHM6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpbnNpZGU6IGZhbHNlXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ3ViZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCBjdWJlIGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGJ1aWxkOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIHBsYW5lcyA9IHtcclxuICAgICAgICAgICAgJ3B4JzogY3JlYXRlUGxhbmUoJ3B4JywgdGhpcy5kZXB0aFNlZ21lbnRzLCB0aGlzLmhlaWdodFNlZ21lbnRzKSxcclxuICAgICAgICAgICAgJ254JzogY3JlYXRlUGxhbmUoJ254JywgdGhpcy5kZXB0aFNlZ21lbnRzLCB0aGlzLmhlaWdodFNlZ21lbnRzKSxcclxuICAgICAgICAgICAgJ3B5JzogY3JlYXRlUGxhbmUoJ3B5JywgdGhpcy53aWR0aFNlZ21lbnRzLCB0aGlzLmRlcHRoU2VnbWVudHMpLFxyXG4gICAgICAgICAgICAnbnknOiBjcmVhdGVQbGFuZSgnbnknLCB0aGlzLndpZHRoU2VnbWVudHMsIHRoaXMuZGVwdGhTZWdtZW50cyksXHJcbiAgICAgICAgICAgICdweic6IGNyZWF0ZVBsYW5lKCdweicsIHRoaXMud2lkdGhTZWdtZW50cywgdGhpcy5oZWlnaHRTZWdtZW50cyksXHJcbiAgICAgICAgICAgICdueic6IGNyZWF0ZVBsYW5lKCdueicsIHRoaXMud2lkdGhTZWdtZW50cywgdGhpcy5oZWlnaHRTZWdtZW50cyksXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmFyIGF0dHJMaXN0ID0gWydwb3NpdGlvbicsICd0ZXhjb29yZDAnLCAnbm9ybWFsJ107XHJcbiAgICAgICAgdmFyIHZlcnRleE51bWJlciA9IDA7XHJcbiAgICAgICAgdmFyIGZhY2VOdW1iZXIgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIHBvcyBpbiBwbGFuZXMpIHtcclxuICAgICAgICAgICAgdmVydGV4TnVtYmVyICs9IHBsYW5lc1twb3NdLnZlcnRleENvdW50O1xyXG4gICAgICAgICAgICBmYWNlTnVtYmVyICs9IHBsYW5lc1twb3NdLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGF0dHJMaXN0Lmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1thdHRyTGlzdFtrXV0uaW5pdCh2ZXJ0ZXhOdW1iZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluZGljZXMgPSBuZXcgdmVuZG9yLlVpbnQxNkFycmF5KGZhY2VOdW1iZXIpO1xyXG4gICAgICAgIHZhciBmYWNlT2Zmc2V0ID0gMDtcclxuICAgICAgICB2YXIgdmVydGV4T2Zmc2V0ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBwb3MgaW4gcGxhbmVzKSB7XHJcbiAgICAgICAgICAgIHZhciBwbGFuZSA9IHBsYW5lc1twb3NdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGF0dHJMaXN0Lmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0ck5hbWUgPSBhdHRyTGlzdFtrXTtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyQXJyYXkgPSBwbGFuZS5hdHRyaWJ1dGVzW2F0dHJOYW1lXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRyU2l6ZSA9IHBsYW5lLmF0dHJpYnV0ZXNbYXR0ck5hbWVdLnNpemU7XHJcbiAgICAgICAgICAgICAgICB2YXIgaXNOb3JtYWwgPSBhdHRyTmFtZSA9PT0gJ25vcm1hbCc7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGF0dHJBcnJheVtpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnNpZGUgJiYgaXNOb3JtYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAtdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1thdHRyTmFtZV0udmFsdWVbaSArIGF0dHJTaXplICogdmVydGV4T2Zmc2V0XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBsZW4gPSBwbGFuZS5pbmRpY2VzLmxlbmd0aDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbGFuZS5pbmRpY2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluZGljZXNbaSArIGZhY2VPZmZzZXRdID0gdmVydGV4T2Zmc2V0ICsgcGxhbmUuaW5kaWNlc1t0aGlzLmluc2lkZSA/IChsZW4gLSBpIC0gMSkgOiBpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmYWNlT2Zmc2V0ICs9IHBsYW5lLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICB2ZXJ0ZXhPZmZzZXQgKz0gcGxhbmUudmVydGV4Q291bnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5tYXguc2V0KDEsIDEsIDEpO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldCgtMSwgLTEsIC0xKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVQbGFuZShwb3MsIHdpZHRoU2VnbWVudHMsIGhlaWdodFNlZ21lbnRzKSB7XHJcblxyXG4gICAgcGxhbmVNYXRyaXguaWRlbnRpdHkoKTtcclxuXHJcbiAgICB2YXIgcGxhbmUgPSBuZXcgUGxhbmUoe1xyXG4gICAgICAgIHdpZHRoU2VnbWVudHM6IHdpZHRoU2VnbWVudHMsXHJcbiAgICAgICAgaGVpZ2h0U2VnbWVudHM6IGhlaWdodFNlZ21lbnRzXHJcbiAgICB9KTtcclxuXHJcbiAgICBzd2l0Y2gocG9zKSB7XHJcbiAgICAgICAgY2FzZSAncHgnOlxyXG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuUE9TSVRJVkVfWCk7XHJcbiAgICAgICAgICAgIE1hdHJpeDQucm90YXRlWShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIE1hdGguUEkgLyAyKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnbngnOlxyXG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuTkVHQVRJVkVfWCk7XHJcbiAgICAgICAgICAgIE1hdHJpeDQucm90YXRlWShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIC1NYXRoLlBJIC8gMik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3B5JzpcclxuICAgICAgICAgICAgTWF0cml4NC50cmFuc2xhdGUocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCBWZWN0b3IzLlBPU0lUSVZFX1kpO1xyXG4gICAgICAgICAgICBNYXRyaXg0LnJvdGF0ZVgocGxhbmVNYXRyaXgsIHBsYW5lTWF0cml4LCAtTWF0aC5QSSAvIDIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdueSc6XHJcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcclxuICAgICAgICAgICAgTWF0cml4NC5yb3RhdGVYKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgTWF0aC5QSSAvIDIpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdweic6XHJcbiAgICAgICAgICAgIE1hdHJpeDQudHJhbnNsYXRlKHBsYW5lTWF0cml4LCBwbGFuZU1hdHJpeCwgVmVjdG9yMy5QT1NJVElWRV9aKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnbnonOlxyXG4gICAgICAgICAgICBNYXRyaXg0LnRyYW5zbGF0ZShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIFZlY3RvcjMuTkVHQVRJVkVfWik7XHJcbiAgICAgICAgICAgIE1hdHJpeDQucm90YXRlWShwbGFuZU1hdHJpeCwgcGxhbmVNYXRyaXgsIE1hdGguUEkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHBsYW5lLmFwcGx5VHJhbnNmb3JtKHBsYW5lTWF0cml4KTtcclxuICAgIHJldHVybiBwbGFuZTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ3ViZTtcclxuIiwiaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lmdlb21ldHJ5LlNwaGVyZVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3dpZHRoU2VnbWVudHNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaGVpZ2h0U2VnbWVudHNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGhpU3RhcnRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGhpTGVuZ3RoXVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3RoZXRhU3RhcnRdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbdGhldGFMZW5ndGhdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcmFkaXVzXVxyXG4gKi9cclxudmFyIFNwaGVyZSA9IEdlb21ldHJ5LmV4dGVuZCgvKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuU3BoZXJlIyAqLyB7XHJcbiAgICBkeW5hbWljOiBmYWxzZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd2lkdGhTZWdtZW50czogNDAsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodFNlZ21lbnRzOiAyMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHBoaVN0YXJ0OiAwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBwaGlMZW5ndGg6IE1hdGguUEkgKiAyLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhldGFTdGFydDogMCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhldGFMZW5ndGg6IE1hdGguUEksXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYWRpdXM6IDFcclxuXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuU3BoZXJlLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIHNwaGVyZSBnZW9tZXRyeVxyXG4gICAgICovXHJcbiAgICBidWlsZDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGhlaWdodFNlZ21lbnRzID0gdGhpcy5oZWlnaHRTZWdtZW50cztcclxuICAgICAgICB2YXIgd2lkdGhTZWdtZW50cyA9IHRoaXMud2lkdGhTZWdtZW50cztcclxuXHJcbiAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgdGV4Y29vcmRBdHRyID0gdGhpcy5hdHRyaWJ1dGVzLnRleGNvb3JkMDtcclxuICAgICAgICB2YXIgbm9ybWFsQXR0ciA9IHRoaXMuYXR0cmlidXRlcy5ub3JtYWw7XHJcblxyXG4gICAgICAgIHZhciB2ZXJ0ZXhDb3VudCA9ICh3aWR0aFNlZ21lbnRzICsgMSkgKiAoaGVpZ2h0U2VnbWVudHMgKyAxKTtcclxuICAgICAgICBwb3NpdGlvbkF0dHIuaW5pdCh2ZXJ0ZXhDb3VudCk7XHJcbiAgICAgICAgdGV4Y29vcmRBdHRyLmluaXQodmVydGV4Q291bnQpO1xyXG4gICAgICAgIG5vcm1hbEF0dHIuaW5pdCh2ZXJ0ZXhDb3VudCk7XHJcblxyXG4gICAgICAgIHZhciBJbmRpY2VzQ3RvciA9IHZlcnRleENvdW50ID4gMHhmZmZmID8gVWludDMyQXJyYXkgOiBVaW50MTZBcnJheTtcclxuICAgICAgICB2YXIgaW5kaWNlcyA9IHRoaXMuaW5kaWNlcyA9IG5ldyBJbmRpY2VzQ3Rvcih3aWR0aFNlZ21lbnRzICogaGVpZ2h0U2VnbWVudHMgKiA2KTtcclxuXHJcbiAgICAgICAgdmFyIHgsIHksIHosXHJcbiAgICAgICAgICAgIHUsIHYsXHJcbiAgICAgICAgICAgIGksIGo7XHJcblxyXG4gICAgICAgIHZhciByYWRpdXMgPSB0aGlzLnJhZGl1cztcclxuICAgICAgICB2YXIgcGhpU3RhcnQgPSB0aGlzLnBoaVN0YXJ0O1xyXG4gICAgICAgIHZhciBwaGlMZW5ndGggPSB0aGlzLnBoaUxlbmd0aDtcclxuICAgICAgICB2YXIgdGhldGFTdGFydCA9IHRoaXMudGhldGFTdGFydDtcclxuICAgICAgICB2YXIgdGhldGFMZW5ndGggPSB0aGlzLnRoZXRhTGVuZ3RoO1xyXG4gICAgICAgIHZhciByYWRpdXMgPSB0aGlzLnJhZGl1cztcclxuXHJcbiAgICAgICAgdmFyIHBvcyA9IFtdO1xyXG4gICAgICAgIHZhciB1diA9IFtdO1xyXG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciBkaXZpZGVyID0gMSAvIHJhZGl1cztcclxuICAgICAgICBmb3IgKGogPSAwOyBqIDw9IGhlaWdodFNlZ21lbnRzOyBqICsrKSB7XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gd2lkdGhTZWdtZW50czsgaSArKykge1xyXG4gICAgICAgICAgICAgICAgdSA9IGkgLyB3aWR0aFNlZ21lbnRzO1xyXG4gICAgICAgICAgICAgICAgdiA9IGogLyBoZWlnaHRTZWdtZW50cztcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBYIGF4aXMgaXMgaW52ZXJ0ZWQgc28gdGV4dHVyZSBjYW4gYmUgbWFwcGVkIGZyb20gbGVmdCB0byByaWdodFxyXG4gICAgICAgICAgICAgICAgeCA9IC1yYWRpdXMgKiBNYXRoLmNvcyhwaGlTdGFydCArIHUgKiBwaGlMZW5ndGgpICogTWF0aC5zaW4odGhldGFTdGFydCArIHYgKiB0aGV0YUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB5ID0gcmFkaXVzICogTWF0aC5jb3ModGhldGFTdGFydCArIHYgKiB0aGV0YUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB6ID0gcmFkaXVzICogTWF0aC5zaW4ocGhpU3RhcnQgKyB1ICogcGhpTGVuZ3RoKSAqIE1hdGguc2luKHRoZXRhU3RhcnQgKyB2ICogdGhldGFMZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHBvc1swXSA9IHg7IHBvc1sxXSA9IHk7IHBvc1syXSA9IHo7XHJcbiAgICAgICAgICAgICAgICB1dlswXSA9IHU7IHV2WzFdID0gdjtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uQXR0ci5zZXQob2Zmc2V0LCBwb3MpO1xyXG4gICAgICAgICAgICAgICAgdGV4Y29vcmRBdHRyLnNldChvZmZzZXQsIHV2KTtcclxuICAgICAgICAgICAgICAgIHBvc1swXSAqPSBkaXZpZGVyO1xyXG4gICAgICAgICAgICAgICAgcG9zWzFdICo9IGRpdmlkZXI7XHJcbiAgICAgICAgICAgICAgICBwb3NbMl0gKj0gZGl2aWRlcjtcclxuICAgICAgICAgICAgICAgIG5vcm1hbEF0dHIuc2V0KG9mZnNldCwgcG9zKTtcclxuICAgICAgICAgICAgICAgIG9mZnNldCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaTEsIGkyLCBpMywgaTQ7XHJcblxyXG4gICAgICAgIHZhciBsZW4gPSB3aWR0aFNlZ21lbnRzICsgMTtcclxuXHJcbiAgICAgICAgdmFyIG4gPSAwO1xyXG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBoZWlnaHRTZWdtZW50czsgaiArKykge1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2lkdGhTZWdtZW50czsgaSArKykge1xyXG4gICAgICAgICAgICAgICAgaTIgPSBqICogbGVuICsgaTtcclxuICAgICAgICAgICAgICAgIGkxID0gKGogKiBsZW4gKyBpICsgMSk7XHJcbiAgICAgICAgICAgICAgICBpNCA9IChqICsgMSkgKiBsZW4gKyBpICsgMTtcclxuICAgICAgICAgICAgICAgIGkzID0gKGogKyAxKSAqIGxlbiArIGk7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTE7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMjtcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGk0O1xyXG5cclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGkyO1xyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTM7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpNDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWF4LnNldChyYWRpdXMsIHJhZGl1cywgcmFkaXVzKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1pbi5zZXQoLXJhZGl1cywgLXJhZGl1cywgLXJhZGl1cyk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BoZXJlO1xyXG4iLCJpbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi4vR2VvbWV0cnknO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5Lmdlb21ldHJ5LlBhcmFtZXRyaWNTdXJmYWNlXHJcbiAqIEBleHRlbmRzIGNsYXkuR2VvbWV0cnlcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRdXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZ2VuZXJhdG9yXVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IueFxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IueVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZW5lcmF0b3IuelxyXG4gKiBAcGFyYW0ge0FycmF5fSBbZ2VuZXJhdG9yLnU9WzAsIDEsIDAuMDVdXVxyXG4gKiBAcGFyYW0ge0FycmF5fSBbZ2VuZXJhdG9yLnY9WzAsIDEsIDAuMDVdXVxyXG4gKi9cclxudmFyIFBhcmFtZXRyaWNTdXJmYWNlID0gR2VvbWV0cnkuZXh0ZW5kKFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuUGFyYW1ldHJpY1N1cmZhY2UjICovXHJcbntcclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0b3I6IG51bGxcclxuXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuUGFyYW1ldHJpY1N1cmZhY2UucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQnVpbGQgcGFyYW1ldHJpYyBzdXJmYWNlIGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGJ1aWxkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIGdlbmVyYXRvciA9IHRoaXMuZ2VuZXJhdG9yO1xyXG5cclxuICAgICAgICBpZiAoIWdlbmVyYXRvciB8fCAhZ2VuZXJhdG9yLnggfHwgIWdlbmVyYXRvci55IHx8ICFnZW5lcmF0b3Iueikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZ2VuZXJhdG9yJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB4RnVuYyA9IGdlbmVyYXRvci54O1xyXG4gICAgICAgIHZhciB5RnVuYyA9IGdlbmVyYXRvci55O1xyXG4gICAgICAgIHZhciB6RnVuYyA9IGdlbmVyYXRvci56O1xyXG4gICAgICAgIHZhciB1UmFuZ2UgPSBnZW5lcmF0b3IudSB8fCBbMCwgMSwgMC4wNV07XHJcbiAgICAgICAgdmFyIHZSYW5nZSA9IGdlbmVyYXRvci52IHx8IFswLCAxLCAwLjA1XTtcclxuXHJcbiAgICAgICAgdmFyIHVOdW0gPSBNYXRoLmZsb29yKCh1UmFuZ2VbMV0gLSB1UmFuZ2VbMF0gKyB1UmFuZ2VbMl0pIC8gdVJhbmdlWzJdKTtcclxuICAgICAgICB2YXIgdk51bSA9IE1hdGguZmxvb3IoKHZSYW5nZVsxXSAtIHZSYW5nZVswXSArIHZSYW5nZVsyXSkgLyB2UmFuZ2VbMl0pO1xyXG5cclxuICAgICAgICBpZiAoIWlzRmluaXRlKHVOdW0pIHx8ICFpc0Zpbml0ZSh2TnVtKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luZmluaXRlIGdlbmVyYXRvcicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHZlcnRleE51bSA9IHVOdW0gKiB2TnVtO1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbi5pbml0KHZlcnRleE51bSk7XHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnRleGNvb3JkMC5pbml0KHZlcnRleE51bSk7XHJcblxyXG4gICAgICAgIHZhciBwb3MgPSBbXTtcclxuICAgICAgICB2YXIgdGV4Y29vcmQgPSBbXTtcclxuICAgICAgICB2YXIgblZlcnRleCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2TnVtOyBqKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1TnVtOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB1ID0gaSAqIHVSYW5nZVsyXSArIHVSYW5nZVswXTtcclxuICAgICAgICAgICAgICAgIHZhciB2ID0gaiAqIHZSYW5nZVsyXSArIHZSYW5nZVswXTtcclxuICAgICAgICAgICAgICAgIHBvc1swXSA9IHhGdW5jKHUsIHYpO1xyXG4gICAgICAgICAgICAgICAgcG9zWzFdID0geUZ1bmModSwgdik7XHJcbiAgICAgICAgICAgICAgICBwb3NbMl0gPSB6RnVuYyh1LCB2KTtcclxuXHJcbiAgICAgICAgICAgICAgICB0ZXhjb29yZFswXSA9IGkgLyAodU51bSAtIDEpO1xyXG4gICAgICAgICAgICAgICAgdGV4Y29vcmRbMV0gPSBqIC8gKHZOdW0gLSAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24uc2V0KG5WZXJ0ZXgsIHBvcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMudGV4Y29vcmQwLnNldChuVmVydGV4LCB0ZXhjb29yZCk7XHJcbiAgICAgICAgICAgICAgICBuVmVydGV4Kys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBJbmRpY2VzQ3RvciA9IHZlcnRleE51bSA+IDB4ZmZmZiA/IFVpbnQzMkFycmF5IDogVWludDE2QXJyYXk7XHJcbiAgICAgICAgdmFyIG5JbmRpY2VzID0gKHVOdW0gLSAxKSAqICh2TnVtIC0gMSkgKiA2O1xyXG4gICAgICAgIHZhciBpbmRpY2VzID0gdGhpcy5pbmRpY2VzID0gbmV3IEluZGljZXNDdG9yKG5JbmRpY2VzKTtcclxuXHJcbiAgICAgICAgdmFyIG4gPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdk51bSAtIDE7IGorKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVOdW0gLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBpMiA9IGogKiB1TnVtICsgaTtcclxuICAgICAgICAgICAgICAgIHZhciBpMSA9IChqICogdU51bSArIGkgKyAxKTtcclxuICAgICAgICAgICAgICAgIHZhciBpNCA9IChqICsgMSkgKiB1TnVtICsgaSArIDE7XHJcbiAgICAgICAgICAgICAgICB2YXIgaTMgPSAoaiArIDEpICogdU51bSArIGk7XHJcblxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTE7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpMjtcclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGk0O1xyXG5cclxuICAgICAgICAgICAgICAgIGluZGljZXNbbisrXSA9IGkyO1xyXG4gICAgICAgICAgICAgICAgaW5kaWNlc1tuKytdID0gaTM7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2VzW24rK10gPSBpNDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVZlcnRleE5vcm1hbHMoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUJvdW5kaW5nQm94KCk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGFyYW1ldHJpY1N1cmZhY2U7XHJcbiIsIi8qKlxyXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgdGV4dHVyZXMgbGlrZSBjb21wcmVzc2VkIHRleHR1cmUsIHRleHR1cmUyZCwgdGV4dHVyZWN1YmVcclxuICogVE9ETyBtYXBwaW5nXHJcbiAqL1xyXG5pbXBvcnQgQmFzZSBmcm9tICcuL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCBDYWNoZSBmcm9tICcuL2NvcmUvQ2FjaGUnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5UZXh0dXJlXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgVGV4dHVyZSA9IEJhc2UuZXh0ZW5kKCAvKiogQGxlbmRzIGNsYXkuVGV4dHVyZSMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0dXJlIHdpZHRoLCByZWFkb25seSB3aGVuIHRoZSB0ZXh0dXJlIHNvdXJjZSBpcyBpbWFnZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgd2lkdGg6IDUxMixcclxuICAgIC8qKlxyXG4gICAgICogVGV4dHVyZSBoZWlnaHQsIHJlYWRvbmx5IHdoZW4gdGhlIHRleHR1cmUgc291cmNlIGlzIGltYWdlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBoZWlnaHQ6IDUxMixcclxuICAgIC8qKlxyXG4gICAgICogVGV4ZWwgZGF0YSB0eXBlLlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5VTlNJR05FRF9CWVRFfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5IQUxGX0ZMT0FUfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5GTE9BVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuVU5TSUdORURfSU5UXzI0XzhfV0VCR0x9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLlVOU0lHTkVEX0lOVH1cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHR5cGU6IGdsZW51bS5VTlNJR05FRF9CWVRFLFxyXG4gICAgLyoqXHJcbiAgICAgKiBGb3JtYXQgb2YgdGV4ZWwgZGF0YVxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5SR0JBfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ERVBUSF9DT01QT05FTlR9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkRFUFRIX1NURU5DSUx9XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBmb3JtYXQ6IGdsZW51bS5SR0JBLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0dXJlIHdyYXAuIERlZmF1bHQgdG8gYmUgUkVQRUFULlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5DTEFNUF9UT19FREdFfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5SRVBFQVR9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLk1JUlJPUkVEX1JFUEVBVH1cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHdyYXBTOiBnbGVudW0uUkVQRUFULFxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0dXJlIHdyYXAuIERlZmF1bHQgdG8gYmUgUkVQRUFULlxyXG4gICAgICogUG9zc2libGUgdmFsdWVzOlxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5DTEFNUF9UT19FREdFfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5SRVBFQVR9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLk1JUlJPUkVEX1JFUEVBVH1cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHdyYXBUOiBnbGVudW0uUkVQRUFULFxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLk5FQVJFU1R9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkxJTkVBUn1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTkVBUkVTVF9NSVBNQVBfTkVBUkVTVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTElORUFSX01JUE1BUF9ORUFSRVNUfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuVGV4dHVyZS5ORUFSRVNUX01JUE1BUF9MSU5FQVJ9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTElORUFSfVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbWluRmlsdGVyOiBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVIsXHJcbiAgICAvKipcclxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTkVBUkVTVH1cclxuICAgICAqICArIHtAbGluayBjbGF5LlRleHR1cmUuTElORUFSfVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbWFnRmlsdGVyOiBnbGVudW0uTElORUFSLFxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBlbmFibGUgbWltYXAuXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgdXNlTWlwbWFwOiB0cnVlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW5pc290cm9waWMgZmlsdGVyaW5nLCBlbmFibGVkIGlmIHZhbHVlIGlzIGxhcmdlciB0aGFuIDFcclxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpY1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgYW5pc290cm9waWM6IDEsXHJcbiAgICAvLyBwaXhlbFN0b3JlaSBwYXJhbWV0ZXJzLCBub3QgYXZhaWxhYmxlIHdoZW4gdGV4dHVyZSBpcyB1c2VkIGFzIHJlbmRlciB0YXJnZXRcclxuICAgIC8vIGh0dHA6Ly93d3cua2hyb25vcy5vcmcvb3BlbmdsZXMvc2RrL2RvY3MvbWFuL3hodG1sL2dsUGl4ZWxTdG9yZWkueG1sXHJcbiAgICAvKipcclxuICAgICAqIElmIGZsaXAgaW4geSBheGlzIGZvciBnaXZlbiBpbWFnZSBzb3VyY2VcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAgICovXHJcbiAgICBmbGlwWTogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgZmxhZyB0byBpbmRpY2F0ZSBpZiB0ZXh0dXJlIHNvdXJjZSBpcyBzUkdCXHJcbiAgICAgKi9cclxuICAgIHNSR0I6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAZGVmYXVsdCA0XHJcbiAgICAgKi9cclxuICAgIHVucGFja0FsaWdubWVudDogNCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICovXHJcbiAgICBwcmVtdWx0aXBseUFscGhhOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIER5bmFtaWMgb3B0aW9uIGZvciB0ZXh0dXJlIGxpa2UgdmlkZW9cclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBkeW5hbWljOiBmYWxzZSxcclxuXHJcbiAgICBOUE9UOiBmYWxzZSxcclxuXHJcbiAgICAvLyBQRU5ESU5HXHJcbiAgICAvLyBJbml0IGl0IGhlcmUgdG8gYXZvaWQgZGVvcHRpbWl6YXRpb24gd2hlbiBpdCdzIGFzc2lnbmVkIGluIGFwcGxpY2F0aW9uIGR5bmFtaWNhbGx5XHJcbiAgICBfX3VzZWQ6IDBcclxuXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX2NhY2hlID0gbmV3IENhY2hlKCk7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5UZXh0dXJlLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgZ2V0V2ViR0xUZXh0dXJlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG5cclxuICAgICAgICBpZiAoY2FjaGUubWlzcygnd2ViZ2xfdGV4dHVyZScpKSB7XHJcbiAgICAgICAgICAgIC8vIEluIGEgbmV3IGdsIGNvbnRleHQsIGNyZWF0ZSBuZXcgdGV4dHVyZSBhbmQgc2V0IGRpcnR5IHRydWVcclxuICAgICAgICAgICAgY2FjaGUucHV0KCd3ZWJnbF90ZXh0dXJlJywgX2dsLmNyZWF0ZVRleHR1cmUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmR5bmFtaWMpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjYWNoZS5pc0RpcnR5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICBjYWNoZS5mcmVzaCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpO1xyXG4gICAgfSxcclxuXHJcbiAgICBiaW5kOiBmdW5jdGlvbiAoKSB7fSxcclxuICAgIHVuYmluZDogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrIHRleHR1cmUgaXMgZGlydHkgYW5kIHVwZGF0ZSBpbiB0aGUgbmV4dCBmcmFtZVxyXG4gICAgICovXHJcbiAgICBkaXJ0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jYWNoZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWNoZS5kaXJ0eUFsbCgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHt9LFxyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgY29tbW9uIHBhcmFtZXRlcnMgb2YgdGV4dHVyZVxyXG4gICAgdXBkYXRlQ29tbW9uOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgX2dsLnBpeGVsU3RvcmVpKF9nbC5VTlBBQ0tfRkxJUF9ZX1dFQkdMLCB0aGlzLmZsaXBZKTtcclxuICAgICAgICBfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwgdGhpcy5wcmVtdWx0aXBseUFscGhhKTtcclxuICAgICAgICBfZ2wucGl4ZWxTdG9yZWkoX2dsLlVOUEFDS19BTElHTk1FTlQsIHRoaXMudW5wYWNrQWxpZ25tZW50KTtcclxuXHJcbiAgICAgICAgLy8gVXNlIG9mIG5vbmUtcG93ZXIgb2YgdHdvIHRleHR1cmVcclxuICAgICAgICAvLyBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3dlYmdsL3dpa2kvV2ViR0xfYW5kX09wZW5HTF9EaWZmZXJlbmNlc1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdCA9PT0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVCkge1xyXG4gICAgICAgICAgICB0aGlzLnVzZU1pcG1hcCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNSR0JFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX3NSR0InKTtcclxuICAgICAgICAvLyBGYWxsYmFja1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdCA9PT0gVGV4dHVyZS5TUkdCICYmICFzUkdCRXh0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gVGV4dHVyZS5SR0I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdCA9PT0gVGV4dHVyZS5TUkdCX0FMUEhBICYmICFzUkdCRXh0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gVGV4dHVyZS5SR0JBO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5OUE9UID0gIXRoaXMuaXNQb3dlck9mVHdvKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEF2YWlsYWJsZVdyYXBTOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuTlBPVCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2xlbnVtLkNMQU1QX1RPX0VER0U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBTO1xyXG4gICAgfSxcclxuICAgIGdldEF2YWlsYWJsZVdyYXBUOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuTlBPVCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2xlbnVtLkNMQU1QX1RPX0VER0U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBUO1xyXG4gICAgfSxcclxuICAgIGdldEF2YWlsYWJsZU1pbkZpbHRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtaW5GaWx0ZXIgPSB0aGlzLm1pbkZpbHRlcjtcclxuICAgICAgICBpZiAodGhpcy5OUE9UIHx8ICF0aGlzLnVzZU1pcG1hcCkge1xyXG4gICAgICAgICAgICBpZiAobWluRmlsdGVyID09PSBnbGVudW0uTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCB8fFxyXG4gICAgICAgICAgICAgICAgbWluRmlsdGVyID09PSBnbGVudW0uTkVBUkVTVF9NSVBNQVBfTElORUFSXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdsZW51bS5ORUFSRVNUO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1pbkZpbHRlciA9PT0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTElORUFSIHx8XHJcbiAgICAgICAgICAgICAgICBtaW5GaWx0ZXIgPT09IGdsZW51bS5MSU5FQVJfTUlQTUFQX05FQVJFU1RcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2xlbnVtLkxJTkVBUjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtaW5GaWx0ZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtaW5GaWx0ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGdldEF2YWlsYWJsZU1hZ0ZpbHRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hZ0ZpbHRlcjtcclxuICAgIH0sXHJcblxyXG4gICAgbmV4dEhpZ2hlc3RQb3dlck9mVHdvOiBmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgIC0teDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IDMyOyBpIDw8PSAxKSB7XHJcbiAgICAgICAgICAgIHggPSB4IHwgeCA+PiBpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geCArIDE7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuXHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcblxyXG4gICAgICAgIGNhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcclxuXHJcbiAgICAgICAgdmFyIHdlYmdsVGV4dHVyZSA9IGNhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpO1xyXG4gICAgICAgIGlmICh3ZWJnbFRleHR1cmUpe1xyXG4gICAgICAgICAgICByZW5kZXJlci5nbC5kZWxldGVUZXh0dXJlKHdlYmdsVGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhY2hlLmRlbGV0ZUNvbnRleHQocmVuZGVyZXIuX191aWRfXyk7XHJcblxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogVGVzdCBpZiBpbWFnZSBvZiB0ZXh0dXJlIGlzIHZhbGlkIGFuZCBsb2FkZWQuXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc1JlbmRlcmFibGU6IGZ1bmN0aW9uICgpIHt9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVzdCBpZiB0ZXh0dXJlIHNpemUgaXMgcG93ZXIgb2YgdHdvXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc1Bvd2VyT2ZUd286IGZ1bmN0aW9uICgpIHt9XHJcbn0pO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmUucHJvdG90eXBlLCAnd2lkdGgnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XHJcbiAgICB9LFxyXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl93aWR0aCA9IHZhbHVlO1xyXG4gICAgfVxyXG59KTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmUucHJvdG90eXBlLCAnaGVpZ2h0Jywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbi8qIERhdGFUeXBlICovXHJcblxyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuQllURSA9IGdsZW51bS5CWVRFO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuVU5TSUdORURfQllURSA9IGdsZW51bS5VTlNJR05FRF9CWVRFO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuU0hPUlQgPSBnbGVudW0uU0hPUlQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5VTlNJR05FRF9TSE9SVCA9IGdsZW51bS5VTlNJR05FRF9TSE9SVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLklOVCA9IGdsZW51bS5JTlQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5VTlNJR05FRF9JTlQgPSBnbGVudW0uVU5TSUdORURfSU5UO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuRkxPQVQgPSBnbGVudW0uRkxPQVQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5IQUxGX0ZMT0FUID0gMHg4RDYxO1xyXG5cclxuLyoqXHJcbiAqIFVOU0lHTkVEX0lOVF8yNF84X1dFQkdMIGZvciBXRUJHTF9kZXB0aF90ZXh0dXJlIGV4dGVuc2lvblxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTCA9IDM0MDQyO1xyXG5cclxuLyogUGl4ZWxGb3JtYXQgKi9cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkRFUFRIX0NPTVBPTkVOVCA9IGdsZW51bS5ERVBUSF9DT01QT05FTlQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5ERVBUSF9TVEVOQ0lMID0gZ2xlbnVtLkRFUFRIX1NURU5DSUw7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5BTFBIQSA9IGdsZW51bS5BTFBIQTtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlJHQiA9IGdsZW51bS5SR0I7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5SR0JBID0gZ2xlbnVtLlJHQkE7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5MVU1JTkFOQ0UgPSBnbGVudW0uTFVNSU5BTkNFO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTFVNSU5BTkNFX0FMUEhBID0gZ2xlbnVtLkxVTUlOQU5DRV9BTFBIQTtcclxuXHJcbi8qKlxyXG4gKiBAc2VlIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL2V4dGVuc2lvbnMvRVhUX3NSR0IvXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlNSR0IgPSAweDhDNDA7XHJcbi8qKlxyXG4gKiBAc2VlIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL2V4dGVuc2lvbnMvRVhUX3NSR0IvXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlNSR0JfQUxQSEEgPSAweDhDNDI7XHJcblxyXG4vKiBDb21wcmVzc2VkIFRleHR1cmUgKi9cclxuVGV4dHVyZS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUID0gMHg4M0YwO1xyXG5UZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUID0gMHg4M0YxO1xyXG5UZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUID0gMHg4M0YyO1xyXG5UZXh0dXJlLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUID0gMHg4M0YzO1xyXG5cclxuLyogVGV4dHVyZU1hZ0ZpbHRlciAqL1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTkVBUkVTVCA9IGdsZW51bS5ORUFSRVNUO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTElORUFSID0gZ2xlbnVtLkxJTkVBUjtcclxuXHJcbi8qIFRleHR1cmVNaW5GaWx0ZXIgKi9cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLk5FQVJFU1RfTUlQTUFQX05FQVJFU1QgPSBnbGVudW0uTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDtcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCA9IGdsZW51bS5MSU5FQVJfTUlQTUFQX05FQVJFU1Q7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5ORUFSRVNUX01JUE1BUF9MSU5FQVIgPSBnbGVudW0uTkVBUkVTVF9NSVBNQVBfTElORUFSO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblRleHR1cmUuTElORUFSX01JUE1BUF9MSU5FQVIgPSBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVI7XHJcblxyXG4vKiBUZXh0dXJlV3JhcE1vZGUgKi9cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5UZXh0dXJlLlJFUEVBVCA9IGdsZW51bS5SRVBFQVQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5DTEFNUF9UT19FREdFID0gZ2xlbnVtLkNMQU1QX1RPX0VER0U7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuVGV4dHVyZS5NSVJST1JFRF9SRVBFQVQgPSBnbGVudW0uTUlSUk9SRURfUkVQRUFUO1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRleHR1cmU7XHJcbiIsInZhciBtYXRoVXRpbCA9IHt9O1xyXG5cclxubWF0aFV0aWwuaXNQb3dlck9mVHdvID0gZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gKHZhbHVlICYgKHZhbHVlIC0gMSkpID09PSAwO1xyXG59O1xyXG5cclxubWF0aFV0aWwubmV4dFBvd2VyT2ZUd28gPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHZhbHVlIC0tO1xyXG4gICAgdmFsdWUgfD0gdmFsdWUgPj4gMTtcclxuICAgIHZhbHVlIHw9IHZhbHVlID4+IDI7XHJcbiAgICB2YWx1ZSB8PSB2YWx1ZSA+PiA0O1xyXG4gICAgdmFsdWUgfD0gdmFsdWUgPj4gODtcclxuICAgIHZhbHVlIHw9IHZhbHVlID4+IDE2O1xyXG4gICAgdmFsdWUgKys7XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59O1xyXG5cclxubWF0aFV0aWwubmVhcmVzdFBvd2VyT2ZUd28gPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHJldHVybiBNYXRoLnBvdyggMiwgTWF0aC5yb3VuZCggTWF0aC5sb2coIHZhbHVlICkgLyBNYXRoLkxOMiApICk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBtYXRoVXRpbDtcclxuIiwiaW1wb3J0IFRleHR1cmUgZnJvbSAnLi9UZXh0dXJlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuL2NvcmUvZ2xlbnVtJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IG1hdGhVdGlsIGZyb20gJy4vbWF0aC91dGlsJztcclxudmFyIGlzUG93ZXJPZlR3byA9IG1hdGhVdGlsLmlzUG93ZXJPZlR3bztcclxuXHJcbmZ1bmN0aW9uIG5lYXJlc3RQb3dlck9mVHdvKHZhbCkge1xyXG4gICAgcmV0dXJuIE1hdGgucG93KDIsIE1hdGgucm91bmQoTWF0aC5sb2codmFsKSAvIE1hdGguTE4yKSk7XHJcbn1cclxuZnVuY3Rpb24gY29udmVydFRleHR1cmVUb1Bvd2VyT2ZUd28odGV4dHVyZSwgY2FudmFzKSB7XHJcbiAgICAvLyB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICB2YXIgd2lkdGggPSBuZWFyZXN0UG93ZXJPZlR3byh0ZXh0dXJlLndpZHRoKTtcclxuICAgIHZhciBoZWlnaHQgPSBuZWFyZXN0UG93ZXJPZlR3byh0ZXh0dXJlLmhlaWdodCk7XHJcbiAgICBjYW52YXMgPSBjYW52YXMgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcclxuICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBjdHguZHJhd0ltYWdlKHRleHR1cmUuaW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgIHJldHVybiBjYW52YXM7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5UZXh0dXJlMkRcclxuICogQGV4dGVuZHMgY2xheS5UZXh0dXJlXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICAuLi5cclxuICogICAgIHZhciBtYXQgPSBuZXcgY2xheS5NYXRlcmlhbCh7XHJcbiAqICAgICAgICAgc2hhZGVyOiBjbGF5LnNoYWRlci5saWJyYXJ5LmdldCgnY2xheS5waG9uZycsICdkaWZmdXNlTWFwJylcclxuICogICAgIH0pO1xyXG4gKiAgICAgdmFyIGRpZmZ1c2VNYXAgPSBuZXcgY2xheS5UZXh0dXJlMkQoKTtcclxuICogICAgIGRpZmZ1c2VNYXAubG9hZCgnYXNzZXRzL3RleHR1cmVzL2RpZmZ1c2UuanBnJyk7XHJcbiAqICAgICBtYXQuc2V0KCdkaWZmdXNlTWFwJywgZGlmZnVzZU1hcCk7XHJcbiAqICAgICAuLi5cclxuICogICAgIGRpZmZ1c2VNYXAuc3VjY2VzcyhmdW5jdGlvbiAoKSB7XHJcbiAqICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGRpZmZ1c2UgdGV4dHVyZSBsb2FkZWRcclxuICogICAgICAgICBhbmltYXRpb24ub24oJ2ZyYW1lJywgZnVuY3Rpb24gKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAqICAgICAgICAgfSk7XHJcbiAqICAgICB9KTtcclxuICovXHJcbnZhciBUZXh0dXJlMkQgPSBUZXh0dXJlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlRleHR1cmUyRCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH1cclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBUT0RPIG1hcmsgZGlydHkgd2hlbiBhc3NpZ25lZC5cclxuICAgICAgICBpbWFnZTogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQaXhlbHMgZGF0YS4gV2lsbCBiZSBpZ25vcmVkIGlmIGltYWdlIGlzIHNldC5cclxuICAgICAgICAgKiBAdHlwZSB7P1VpbnQ4QXJyYXl8RmxvYXQzMkFycmF5fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHBpeGVsczogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPE9iamVjdD59XHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiAgICAgW3tcclxuICAgICAgICAgKiAgICAgICAgIGltYWdlOiBtaXBtYXAwLFxyXG4gICAgICAgICAqICAgICAgICAgcGl4ZWxzOiBudWxsXHJcbiAgICAgICAgICogICAgIH0sIHtcclxuICAgICAgICAgKiAgICAgICAgIGltYWdlOiBtaXBtYXAxLFxyXG4gICAgICAgICAqICAgICAgICAgcGl4ZWxzOiBudWxsXHJcbiAgICAgICAgICogICAgIH0sIC4uLi5dXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWlwbWFwczogW10sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGNvbnZlcnQgdGV4dHVyZSB0byBwb3dlci1vZi10d29cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb252ZXJ0VG9QT1Q6IGZhbHNlXHJcbiAgICB9O1xyXG59LCB7XHJcblxyXG4gICAgdGV4dHVyZVR5cGU6ICd0ZXh0dXJlMkQnLFxyXG5cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfMkQsIHRoaXMuX2NhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVDb21tb24ocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB2YXIgZ2xGb3JtYXQgPSB0aGlzLmZvcm1hdDtcclxuICAgICAgICB2YXIgZ2xUeXBlID0gdGhpcy50eXBlO1xyXG5cclxuICAgICAgICAvLyBDb252ZXJ0IHRvIHBvdCBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIHVzaW5nIGltYWdlL2NhbnZhcy92aWRlbyBlbGVtZW50LlxyXG4gICAgICAgIHZhciBjb252ZXJ0VG9QT1QgPSAhISh0aGlzLmNvbnZlcnRUb1BPVFxyXG4gICAgICAgICAgICAmJiAhdGhpcy5taXBtYXBzLmxlbmd0aCAmJiB0aGlzLmltYWdlXHJcbiAgICAgICAgICAgICYmICh0aGlzLndyYXBTID09PSBUZXh0dXJlLlJFUEVBVCB8fCB0aGlzLndyYXBUID09PSBUZXh0dXJlLlJFUEVBVClcclxuICAgICAgICAgICAgJiYgdGhpcy5OUE9UXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfMkQsIF9nbC5URVhUVVJFX1dSQVBfUywgY29udmVydFRvUE9UID8gdGhpcy53cmFwUyA6IHRoaXMuZ2V0QXZhaWxhYmxlV3JhcFMoKSk7XHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfMkQsIF9nbC5URVhUVVJFX1dSQVBfVCwgY29udmVydFRvUE9UID8gdGhpcy53cmFwVCA6IHRoaXMuZ2V0QXZhaWxhYmxlV3JhcFQoKSk7XHJcblxyXG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFXzJELCBfZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBjb252ZXJ0VG9QT1QgPyB0aGlzLm1hZ0ZpbHRlciA6IHRoaXMuZ2V0QXZhaWxhYmxlTWFnRmlsdGVyKCkpO1xyXG4gICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJpKF9nbC5URVhUVVJFXzJELCBfZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBjb252ZXJ0VG9QT1QgPyB0aGlzLm1pbkZpbHRlciA6IHRoaXMuZ2V0QXZhaWxhYmxlTWluRmlsdGVyKCkpO1xyXG5cclxuICAgICAgICB2YXIgYW5pc290cm9waWNFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyk7XHJcbiAgICAgICAgaWYgKGFuaXNvdHJvcGljRXh0ICYmIHRoaXMuYW5pc290cm9waWMgPiAxKSB7XHJcbiAgICAgICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJmKF9nbC5URVhUVVJFXzJELCBhbmlzb3Ryb3BpY0V4dC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCwgdGhpcy5hbmlzb3Ryb3BpYyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGYWxsYmFjayB0byBmbG9hdCB0eXBlIGlmIGJyb3dzZXIgZG9uJ3QgaGF2ZSBoYWxmIGZsb2F0IGV4dGVuc2lvblxyXG4gICAgICAgIGlmIChnbFR5cGUgPT09IDM2MTkzKSB7XHJcbiAgICAgICAgICAgIHZhciBoYWxmRmxvYXRFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcpO1xyXG4gICAgICAgICAgICBpZiAoIWhhbGZGbG9hdEV4dCkge1xyXG4gICAgICAgICAgICAgICAgZ2xUeXBlID0gZ2xlbnVtLkZMT0FUO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5taXBtYXBzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5taXBtYXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWlwbWFwID0gdGhpcy5taXBtYXBzW2ldO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGV4dHVyZURhdGEoX2dsLCBtaXBtYXAsIGksIHdpZHRoLCBoZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHdpZHRoIC89IDI7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgLz0gMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGV4dHVyZURhdGEoX2dsLCB0aGlzLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgZ2xGb3JtYXQsIGdsVHlwZSwgY29udmVydFRvUE9UKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZU1pcG1hcCAmJiAoIXRoaXMuTlBPVCB8fCBjb252ZXJ0VG9QT1QpKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZ2VuZXJhdGVNaXBtYXAoX2dsLlRFWFRVUkVfMkQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfMkQsIG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlVGV4dHVyZURhdGE6IGZ1bmN0aW9uIChfZ2wsIGRhdGEsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlLCBjb252ZXJ0VG9QT1QpIHtcclxuICAgICAgICBpZiAoZGF0YS5pbWFnZSkge1xyXG4gICAgICAgICAgICB2YXIgaW1nRGF0YSA9IGRhdGEuaW1hZ2U7XHJcbiAgICAgICAgICAgIGlmIChjb252ZXJ0VG9QT1QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvdENhbnZhcyA9IGNvbnZlcnRUZXh0dXJlVG9Qb3dlck9mVHdvKHRoaXMsIHRoaXMuX3BvdENhbnZhcyk7XHJcbiAgICAgICAgICAgICAgICBpbWdEYXRhID0gdGhpcy5fcG90Q2FudmFzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF9nbC50ZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgZ2xGb3JtYXQsIGdsRm9ybWF0LCBnbFR5cGUsIGltZ0RhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gQ2FuIGJlIHVzZWQgYXMgYSBibGFuayB0ZXh0dXJlIHdoZW4gd3JpdGluZyByZW5kZXIgdG8gdGV4dHVyZShSVFQpXHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGdsRm9ybWF0IDw9IFRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFRcclxuICAgICAgICAgICAgICAgICYmIGdsRm9ybWF0ID49IFRleHR1cmUuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIF9nbC5jb21wcmVzc2VkVGV4SW1hZ2UyRChfZ2wuVEVYVFVSRV8yRCwgbGV2ZWwsIGdsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBkYXRhLnBpeGVscyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJcyBhIHJlbmRlciB0YXJnZXQgaWYgcGl4ZWxzIGlzIG51bGxcclxuICAgICAgICAgICAgICAgIF9nbC50ZXhJbWFnZTJEKF9nbC5URVhUVVJFXzJELCBsZXZlbCwgZ2xGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIGRhdGEucGl4ZWxzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVGV4dHVyZTJELnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBnZW5lcmF0ZU1pcG1hcDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIGlmICh0aGlzLnVzZU1pcG1hcCAmJiAhdGhpcy5OUE9UKSB7XHJcbiAgICAgICAgICAgIF9nbC5iaW5kVGV4dHVyZShfZ2wuVEVYVFVSRV8yRCwgdGhpcy5fY2FjaGUuZ2V0KCd3ZWJnbF90ZXh0dXJlJykpO1xyXG4gICAgICAgICAgICBfZ2wuZ2VuZXJhdGVNaXBtYXAoX2dsLlRFWFRVUkVfMkQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzUG93ZXJPZlR3byh0aGlzLndpZHRoKSAmJiBpc1Bvd2VyT2ZUd28odGhpcy5oZWlnaHQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBpc1JlbmRlcmFibGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZS53aWR0aCA+IDAgJiYgdGhpcy5pbWFnZS5oZWlnaHQgPiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICEhKHRoaXMud2lkdGggJiYgdGhpcy5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuZ2wuYmluZFRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRV8yRCwgdGhpcy5nZXRXZWJHTFRleHR1cmUocmVuZGVyZXIpKTtcclxuICAgIH0sXHJcblxyXG4gICAgdW5iaW5kOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICByZW5kZXJlci5nbC5iaW5kVGV4dHVyZShyZW5kZXJlci5nbC5URVhUVVJFXzJELCBudWxsKTtcclxuICAgIH0sXHJcblxyXG4gICAgbG9hZDogZnVuY3Rpb24gKHNyYywgY3Jvc3NPcmlnaW4pIHtcclxuICAgICAgICB2YXIgaW1hZ2UgPSB2ZW5kb3IuY3JlYXRlSW1hZ2UoKTtcclxuICAgICAgICBpZiAoY3Jvc3NPcmlnaW4pIHtcclxuICAgICAgICAgICAgaW1hZ2UuY3Jvc3NPcmlnaW4gPSBjcm9zc09yaWdpbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2VsZi5kaXJ0eSgpO1xyXG4gICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3N1Y2Nlc3MnLCBzZWxmKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGltYWdlLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHNlbGYudHJpZ2dlcignZXJyb3InLCBzZWxmKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpbWFnZS5zcmMgPSBzcmM7XHJcbiAgICAgICAgdGhpcy5pbWFnZSA9IGltYWdlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxufSk7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZTJELnByb3RvdHlwZSwgJ3dpZHRoJywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2Uud2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGV4dHVyZSBmcm9tIGltYWdlIGNhblxcJ3Qgc2V0IHdpZHRoJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fd2lkdGggIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVGV4dHVyZTJELnByb3RvdHlwZSwgJ2hlaWdodCcsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlLmhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGV4dHVyZSBmcm9tIGltYWdlIGNhblxcJ3Qgc2V0IGhlaWdodCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2hlaWdodCAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlydHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZTJEO1xyXG4iLCJpbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCBtYXRoVXRpbCBmcm9tICcuL21hdGgvdXRpbCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcbnZhciBpc1Bvd2VyT2ZUd28gPSBtYXRoVXRpbC5pc1Bvd2VyT2ZUd287XHJcblxyXG52YXIgdGFyZ2V0TGlzdCA9IFsncHgnLCAnbngnLCAncHknLCAnbnknLCAncHonLCAnbnonXTtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5UZXh0dXJlQ3ViZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LlRleHR1cmVcclxuICpcclxuICogQGV4YW1wbGVcclxuICogICAgIC4uLlxyXG4gKiAgICAgdmFyIG1hdCA9IG5ldyBjbGF5Lk1hdGVyaWFsKHtcclxuICogICAgICAgICBzaGFkZXI6IGNsYXkuc2hhZGVyLmxpYnJhcnkuZ2V0KCdjbGF5LnBob25nJywgJ2Vudmlyb25tZW50TWFwJylcclxuICogICAgIH0pO1xyXG4gKiAgICAgdmFyIGVudk1hcCA9IG5ldyBjbGF5LlRleHR1cmVDdWJlKCk7XHJcbiAqICAgICBlbnZNYXAubG9hZCh7XHJcbiAqICAgICAgICAgJ3B4JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHguanBnJyxcclxuICogICAgICAgICAnbngnOiAnYXNzZXRzL3RleHR1cmVzL3NreS9ueC5qcGcnXHJcbiAqICAgICAgICAgJ3B5JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHkuanBnJ1xyXG4gKiAgICAgICAgICdueSc6ICdhc3NldHMvdGV4dHVyZXMvc2t5L255LmpwZydcclxuICogICAgICAgICAncHonOiAnYXNzZXRzL3RleHR1cmVzL3NreS9wei5qcGcnXHJcbiAqICAgICAgICAgJ256JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvbnouanBnJ1xyXG4gKiAgICAgfSk7XHJcbiAqICAgICBtYXQuc2V0KCdlbnZpcm9ubWVudE1hcCcsIGVudk1hcCk7XHJcbiAqICAgICAuLi5cclxuICogICAgIGVudk1hcC5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICogICAgICAgICAvLyBXYWl0IGZvciB0aGUgc2t5IHRleHR1cmUgbG9hZGVkXHJcbiAqICAgICAgICAgYW5pbWF0aW9uLm9uKCdmcmFtZScsIGZ1bmN0aW9uIChmcmFtZVRpbWUpIHtcclxuICogICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xyXG4gKiAgICAgICAgIH0pO1xyXG4gKiAgICAgfSk7XHJcbiAqL1xyXG52YXIgVGV4dHVyZUN1YmUgPSBUZXh0dXJlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlRleHR1cmVDdWJlIyAqL3tcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAgICAgKi9cclxuICAgICAgICAvLyBQRU5ESU5HIGN1YmVtYXAgc2hvdWxkIG5vdCBmbGlwWSBpbiBkZWZhdWx0LlxyXG4gICAgICAgIC8vIGZsaXBZOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKiBAcHJvcGVydHkgez9IVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtbmV0fSBweFxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1uZXR9IG54XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gcHlcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9IVE1MSW1hZ2VFbGVtZW50fEhUTUxDYW52YXNFbGVtbmV0fSBueVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P0hUTUxJbWFnZUVsZW1lbnR8SFRNTENhbnZhc0VsZW1uZXR9IHB6XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbW5ldH0gbnpcclxuICAgICAgICAgKi9cclxuICAgICAgICBpbWFnZToge1xyXG4gICAgICAgICAgICBweDogbnVsbCxcclxuICAgICAgICAgICAgbng6IG51bGwsXHJcbiAgICAgICAgICAgIHB5OiBudWxsLFxyXG4gICAgICAgICAgICBueTogbnVsbCxcclxuICAgICAgICAgICAgcHo6IG51bGwsXHJcbiAgICAgICAgICAgIG56OiBudWxsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBQaXhlbHMgZGF0YSBvZiBlYWNoIHNpZGUuIFdpbGwgYmUgaWdub3JlZCBpZiBpbWFnZXMgYXJlIHNldC5cclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P1VpbnQ4QXJyYXl9IHB4XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/VWludDhBcnJheX0gbnhcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBweVxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7P1VpbnQ4QXJyYXl9IG55XHJcbiAgICAgICAgICogQHByb3BlcnR5IHs/VWludDhBcnJheX0gcHpcclxuICAgICAgICAgKiBAcHJvcGVydHkgez9VaW50OEFycmF5fSBuelxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHBpeGVsczoge1xyXG4gICAgICAgICAgICBweDogbnVsbCxcclxuICAgICAgICAgICAgbng6IG51bGwsXHJcbiAgICAgICAgICAgIHB5OiBudWxsLFxyXG4gICAgICAgICAgICBueTogbnVsbCxcclxuICAgICAgICAgICAgcHo6IG51bGwsXHJcbiAgICAgICAgICAgIG56OiBudWxsXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxPYmplY3Q+fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1pcG1hcHM6IFtdXHJcbiAgICB9O1xyXG59LCB7XHJcblxyXG4gICAgdGV4dHVyZVR5cGU6ICd0ZXh0dXJlQ3ViZScsXHJcblxyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgX2dsLmJpbmRUZXh0dXJlKF9nbC5URVhUVVJFX0NVQkVfTUFQLCB0aGlzLl9jYWNoZS5nZXQoJ3dlYmdsX3RleHR1cmUnKSk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ29tbW9uKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdmFyIGdsRm9ybWF0ID0gdGhpcy5mb3JtYXQ7XHJcbiAgICAgICAgdmFyIGdsVHlwZSA9IHRoaXMudHlwZTtcclxuXHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIF9nbC5URVhUVVJFX1dSQVBfUywgdGhpcy5nZXRBdmFpbGFibGVXcmFwUygpKTtcclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgX2dsLlRFWFRVUkVfV1JBUF9ULCB0aGlzLmdldEF2YWlsYWJsZVdyYXBUKCkpO1xyXG5cclxuICAgICAgICBfZ2wudGV4UGFyYW1ldGVyaShfZ2wuVEVYVFVSRV9DVUJFX01BUCwgX2dsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgdGhpcy5nZXRBdmFpbGFibGVNYWdGaWx0ZXIoKSk7XHJcbiAgICAgICAgX2dsLnRleFBhcmFtZXRlcmkoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIF9nbC5URVhUVVJFX01JTl9GSUxURVIsIHRoaXMuZ2V0QXZhaWxhYmxlTWluRmlsdGVyKCkpO1xyXG5cclxuICAgICAgICB2YXIgYW5pc290cm9waWNFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJyk7XHJcbiAgICAgICAgaWYgKGFuaXNvdHJvcGljRXh0ICYmIHRoaXMuYW5pc290cm9waWMgPiAxKSB7XHJcbiAgICAgICAgICAgIF9nbC50ZXhQYXJhbWV0ZXJmKF9nbC5URVhUVVJFX0NVQkVfTUFQLCBhbmlzb3Ryb3BpY0V4dC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCwgdGhpcy5hbmlzb3Ryb3BpYyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGYWxsYmFjayB0byBmbG9hdCB0eXBlIGlmIGJyb3dzZXIgZG9uJ3QgaGF2ZSBoYWxmIGZsb2F0IGV4dGVuc2lvblxyXG4gICAgICAgIGlmIChnbFR5cGUgPT09IDM2MTkzKSB7XHJcbiAgICAgICAgICAgIHZhciBoYWxmRmxvYXRFeHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcpO1xyXG4gICAgICAgICAgICBpZiAoIWhhbGZGbG9hdEV4dCkge1xyXG4gICAgICAgICAgICAgICAgZ2xUeXBlID0gZ2xlbnVtLkZMT0FUO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5taXBtYXBzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5taXBtYXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWlwbWFwID0gdGhpcy5taXBtYXBzW2ldO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGV4dHVyZURhdGEoX2dsLCBtaXBtYXAsIGksIHdpZHRoLCBoZWlnaHQsIGdsRm9ybWF0LCBnbFR5cGUpO1xyXG4gICAgICAgICAgICAgICAgd2lkdGggLz0gMjtcclxuICAgICAgICAgICAgICAgIGhlaWdodCAvPSAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVUZXh0dXJlRGF0YShfZ2wsIHRoaXMsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5OUE9UICYmIHRoaXMudXNlTWlwbWFwKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZ2VuZXJhdGVNaXBtYXAoX2dsLlRFWFRVUkVfQ1VCRV9NQVApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIG51bGwpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlVGV4dHVyZURhdGE6IGZ1bmN0aW9uIChfZ2wsIGRhdGEsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBnbEZvcm1hdCwgZ2xUeXBlKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRhcmdldExpc3RbaV07XHJcbiAgICAgICAgICAgIHZhciBpbWcgPSBkYXRhLmltYWdlICYmIGRhdGEuaW1hZ2VbdGFyZ2V0XTtcclxuICAgICAgICAgICAgaWYgKGltZykge1xyXG4gICAgICAgICAgICAgICAgX2dsLnRleEltYWdlMkQoX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGksIGxldmVsLCBnbEZvcm1hdCwgZ2xGb3JtYXQsIGdsVHlwZSwgaW1nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF9nbC50ZXhJbWFnZTJEKF9nbC5URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBpLCBsZXZlbCwgZ2xGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGdsRm9ybWF0LCBnbFR5cGUsIGRhdGEucGl4ZWxzICYmIGRhdGEucGl4ZWxzW3RhcmdldF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5UZXh0dXJlQ3ViZS5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgZ2VuZXJhdGVNaXBtYXA6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBpZiAodGhpcy51c2VNaXBtYXAgJiYgIXRoaXMuTlBPVCkge1xyXG4gICAgICAgICAgICBfZ2wuYmluZFRleHR1cmUoX2dsLlRFWFRVUkVfQ1VCRV9NQVAsIHRoaXMuX2NhY2hlLmdldCgnd2ViZ2xfdGV4dHVyZScpKTtcclxuICAgICAgICAgICAgX2dsLmdlbmVyYXRlTWlwbWFwKF9nbC5URVhUVVJFX0NVQkVfTUFQKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGJpbmQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHJlbmRlcmVyLmdsLmJpbmRUZXh0dXJlKHJlbmRlcmVyLmdsLlRFWFRVUkVfQ1VCRV9NQVAsIHRoaXMuZ2V0V2ViR0xUZXh0dXJlKHJlbmRlcmVyKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHVuYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuZ2wuYmluZFRleHR1cmUocmVuZGVyZXIuZ2wuVEVYVFVSRV9DVUJFX01BUCwgbnVsbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIE92ZXJ3cml0ZSB0aGUgaXNQb3dlck9mVHdvIG1ldGhvZFxyXG4gICAgaXNQb3dlck9mVHdvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UucHgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzUG93ZXJPZlR3byh0aGlzLmltYWdlLnB4LndpZHRoKVxyXG4gICAgICAgICAgICAgICAgJiYgaXNQb3dlck9mVHdvKHRoaXMuaW1hZ2UucHguaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpc1Bvd2VyT2ZUd28odGhpcy53aWR0aClcclxuICAgICAgICAgICAgICAgICYmIGlzUG93ZXJPZlR3byh0aGlzLmhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBpc1JlbmRlcmFibGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXNJbWFnZVJlbmRlcmFibGUodGhpcy5pbWFnZS5weClcclxuICAgICAgICAgICAgICAgICYmIGlzSW1hZ2VSZW5kZXJhYmxlKHRoaXMuaW1hZ2UubngpXHJcbiAgICAgICAgICAgICAgICAmJiBpc0ltYWdlUmVuZGVyYWJsZSh0aGlzLmltYWdlLnB5KVxyXG4gICAgICAgICAgICAgICAgJiYgaXNJbWFnZVJlbmRlcmFibGUodGhpcy5pbWFnZS5ueSlcclxuICAgICAgICAgICAgICAgICYmIGlzSW1hZ2VSZW5kZXJhYmxlKHRoaXMuaW1hZ2UucHopXHJcbiAgICAgICAgICAgICAgICAmJiBpc0ltYWdlUmVuZGVyYWJsZSh0aGlzLmltYWdlLm56KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhISh0aGlzLndpZHRoICYmIHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGxvYWQ6IGZ1bmN0aW9uIChpbWFnZUxpc3QsIGNyb3NzT3JpZ2luKSB7XHJcbiAgICAgICAgdmFyIGxvYWRpbmcgPSAwO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB1dGlsLmVhY2goaW1hZ2VMaXN0LCBmdW5jdGlvbiAoc3JjLCB0YXJnZXQpe1xyXG4gICAgICAgICAgICB2YXIgaW1hZ2UgPSB2ZW5kb3IuY3JlYXRlSW1hZ2UoKTtcclxuICAgICAgICAgICAgaWYgKGNyb3NzT3JpZ2luKSB7XHJcbiAgICAgICAgICAgICAgICBpbWFnZS5jcm9zc09yaWdpbiA9IGNyb3NzT3JpZ2luO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGxvYWRpbmcgLS07XHJcbiAgICAgICAgICAgICAgICBpZiAobG9hZGluZyA9PT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignc3VjY2VzcycsIHNlbGYpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpbWFnZS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgbG9hZGluZyAtLTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGxvYWRpbmcrKztcclxuICAgICAgICAgICAgaW1hZ2Uuc3JjID0gc3JjO1xyXG4gICAgICAgICAgICBzZWxmLmltYWdlW3RhcmdldF0gPSBpbWFnZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmVDdWJlLnByb3RvdHlwZSwgJ3dpZHRoJywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UgJiYgdGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZS5weC53aWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UgJiYgdGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RleHR1cmUgZnJvbSBpbWFnZSBjYW5cXCd0IHNldCB3aWR0aCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3dpZHRoICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXJ0eSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFRleHR1cmVDdWJlLnByb3RvdHlwZSwgJ2hlaWdodCcsIHtcclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlICYmIHRoaXMuaW1hZ2UucHgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2UucHguaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2UgJiYgdGhpcy5pbWFnZS5weCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RleHR1cmUgZnJvbSBpbWFnZSBjYW5cXCd0IHNldCBoZWlnaHQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9oZWlnaHQgIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpcnR5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuZnVuY3Rpb24gaXNJbWFnZVJlbmRlcmFibGUoaW1hZ2UpIHtcclxuICAgIHJldHVybiBpbWFnZS53aWR0aCA+IDAgJiYgaW1hZ2UuaGVpZ2h0ID4gMDtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZUN1YmU7XHJcbiIsImltcG9ydCBOb2RlIGZyb20gJy4vTm9kZSc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LlJlbmRlcmFibGVcclxuICogQGV4dGVuZHMgY2xheS5Ob2RlXHJcbiAqL1xyXG52YXIgUmVuZGVyYWJsZSA9IE5vZGUuZXh0ZW5kKC8qKiBAbGVuZHMgY2xheS5SZW5kZXJhYmxlIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5Lk1hdGVyaWFsfVxyXG4gICAgICovXHJcbiAgICBtYXRlcmlhbDogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5Lkdlb21ldHJ5fVxyXG4gICAgICovXHJcbiAgICBnZW9tZXRyeTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIG1vZGU6IGdsZW51bS5UUklBTkdMRVMsXHJcblxyXG4gICAgX3JlbmRlckluZm86IG51bGxcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5LlJlbmRlcmFibGUucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICBfX3Byb2dyYW06IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHcm91cCBvZiByZWNlaXZlZCBsaWdodC5cclxuICAgICAqL1xyXG4gICAgbGlnaHRHcm91cDogMCxcclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIG9yZGVyLCBOb2RlcyB3aXRoIHNtYWxsZXIgdmFsdWUgcmVuZGVycyBiZWZvcmUgbm9kZXMgd2l0aCBsYXJnZXIgdmFsdWVzLlxyXG4gICAgICogQHR5cGUge051bWJlcn1cclxuICAgICAqL1xyXG4gICAgcmVuZGVyT3JkZXI6IDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VkIHdoZW4gbW9kZSBpcyBMSU5FUywgTElORV9TVFJJUCBvciBMSU5FX0xPT1BcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIC8vIGxpbmVXaWR0aDogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGVuYWJsZSBjdWxsaW5nXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgY3VsbGluZzogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogU3BlY2lmeSB3aGljaCBzaWRlIG9mIHBvbHlnb24gd2lsbCBiZSBjdWxsZWQuXHJcbiAgICAgKiBQb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5SZW5kZXJhYmxlLkJBQ0t9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5SZW5kZXJhYmxlLkZST05UfVxyXG4gICAgICogICsge0BsaW5rIGNsYXkuUmVuZGVyYWJsZS5GUk9OVF9BTkRfQkFDS31cclxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dlYkdMUmVuZGVyaW5nQ29udGV4dC9jdWxsRmFjZVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgY3VsbEZhY2U6IGdsZW51bS5CQUNLLFxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGVjaWZ5IHdoaWNoIHNpZGUgaXMgZnJvbnQgZmFjZS5cclxuICAgICAqIFBvc3NpYmxlIHZhbHVlczpcclxuICAgICAqICArIHtAbGluayBjbGF5LlJlbmRlcmFibGUuQ1d9XHJcbiAgICAgKiAgKyB7QGxpbmsgY2xheS5SZW5kZXJhYmxlLkNDV31cclxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dlYkdMUmVuZGVyaW5nQ29udGV4dC9mcm9udEZhY2VcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGZyb250RmFjZTogZ2xlbnVtLkNDVyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIGVuYWJsZSBzb2Z0d2FyZSBmcnVzdHVtIGN1bGxpbmdcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBmcnVzdHVtQ3VsbGluZzogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIHJlY2VpdmVTaGFkb3c6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBjYXN0U2hhZG93OiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgaWdub3JlUGlja2luZzogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpZ25vcmVQcmVaOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpZ25vcmVHQnVmZmVyOiBmYWxzZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGlzUmVuZGVyYWJsZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gVE9ETyBTaGFkZXIgP1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdlb21ldHJ5ICYmIHRoaXMubWF0ZXJpYWwgJiYgdGhpcy5tYXRlcmlhbC5zaGFkZXIgJiYgIXRoaXMuaW52aXNpYmxlXHJcbiAgICAgICAgICAgICYmIHRoaXMuZ2VvbWV0cnkudmVydGV4Q291bnQgPiAwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJlZm9yZSByZW5kZXIgaG9va1xyXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxyXG4gICAgICovXHJcbiAgICBiZWZvcmVSZW5kZXI6IGZ1bmN0aW9uIChfZ2wpIHt9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmVmb3JlIHJlbmRlciBob29rXHJcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XHJcbiAgICAgKi9cclxuICAgIGFmdGVyUmVuZGVyOiBmdW5jdGlvbiAoX2dsLCByZW5kZXJTdGF0KSB7fSxcclxuXHJcbiAgICBnZXRCb3VuZGluZ0JveDogZnVuY3Rpb24gKGZpbHRlciwgb3V0KSB7XHJcbiAgICAgICAgb3V0ID0gTm9kZS5wcm90b3R5cGUuZ2V0Qm91bmRpbmdCb3guY2FsbCh0aGlzLCBmaWx0ZXIsIG91dCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2VvbWV0cnkgJiYgdGhpcy5nZW9tZXRyeS5ib3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICBvdXQudW5pb24odGhpcy5nZW9tZXRyeS5ib3VuZGluZ0JveCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb25lIGEgbmV3IHJlbmRlcmFibGVcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQHJldHVybiB7Y2xheS5SZW5kZXJhYmxlfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gW1xyXG4gICAgICAgICAgICAnY2FzdFNoYWRvdycsICdyZWNlaXZlU2hhZG93JyxcclxuICAgICAgICAgICAgJ21vZGUnLCAnY3VsbGluZycsICdjdWxsRmFjZScsICdmcm9udEZhY2UnLFxyXG4gICAgICAgICAgICAnZnJ1c3R1bUN1bGxpbmcnLFxyXG4gICAgICAgICAgICAncmVuZGVyT3JkZXInLCAnbGluZVdpZHRoJyxcclxuICAgICAgICAgICAgJ2lnbm9yZVBpY2tpbmcnLCAnaWdub3JlUHJlWicsICdpZ25vcmVHQnVmZmVyJ1xyXG4gICAgICAgIF07XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB2YXIgcmVuZGVyYWJsZSA9IE5vZGUucHJvdG90eXBlLmNsb25lLmNhbGwodGhpcyk7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJhYmxlLmdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcclxuICAgICAgICAgICAgcmVuZGVyYWJsZS5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gcHJvcGVydGllc1tpXTtcclxuICAgICAgICAgICAgICAgIC8vIFRyeSBub3QgdG8gb3ZlcndyaXRlIHRoZSBwcm90b3R5cGUgcHJvcGVydHlcclxuICAgICAgICAgICAgICAgIGlmIChyZW5kZXJhYmxlW25hbWVdICE9PSB0aGlzW25hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyYWJsZVtuYW1lXSA9IHRoaXNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpXHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLlBPSU5UUyA9IGdsZW51bS5QT0lOVFM7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5MSU5FUyA9IGdsZW51bS5MSU5FUztcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLkxJTkVfTE9PUCA9IGdsZW51bS5MSU5FX0xPT1A7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5MSU5FX1NUUklQID0gZ2xlbnVtLkxJTkVfU1RSSVA7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5UUklBTkdMRVMgPSBnbGVudW0uVFJJQU5HTEVTO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuVFJJQU5HTEVfU1RSSVAgPSBnbGVudW0uVFJJQU5HTEVfU1RSSVA7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5UUklBTkdMRV9GQU4gPSBnbGVudW0uVFJJQU5HTEVfRkFOO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuQkFDSyA9IGdsZW51bS5CQUNLO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuRlJPTlQgPSBnbGVudW0uRlJPTlQ7XHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKi9cclxuUmVuZGVyYWJsZS5GUk9OVF9BTkRfQkFDSyA9IGdsZW51bS5GUk9OVF9BTkRfQkFDSztcclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5SZW5kZXJhYmxlLkNXID0gZ2xlbnVtLkNXO1xyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblJlbmRlcmFibGUuQ0NXID0gZ2xlbnVtLkNDVztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJlbmRlcmFibGU7XHJcbiIsImltcG9ydCBSZW5kZXJhYmxlIGZyb20gJy4vUmVuZGVyYWJsZSc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuTWVzaFxyXG4gKiBAZXh0ZW5kcyBjbGF5LlJlbmRlcmFibGVcclxuICovXHJcbnZhciBNZXNoID0gUmVuZGVyYWJsZS5leHRlbmQoLyoqIEBsZW5kcyBjbGF5Lk1lc2gjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogVXNlZCB3aGVuIGl0IGlzIGEgc2tpbm5lZCBtZXNoXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5Ta2VsZXRvbn1cclxuICAgICAqL1xyXG4gICAgc2tlbGV0b246IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIEpvaW50cyBpbmRpY2VzIE1lc2hlcyBjYW4gc2hhcmUgdGhlIG9uZSBza2VsZXRvbiBpbnN0YW5jZSBhbmQgZWFjaCBtZXNoIGNhbiB1c2Ugb25lIHBhcnQgb2Ygam9pbnRzLiBKb2ludHMgaW5kaWNlcyBpbmRpY2F0ZSB0aGUgaW5kZXggb2Ygam9pbnQgaW4gdGhlIHNrZWxldG9uIGluc3RhbmNlXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyW119XHJcbiAgICAgKi9cclxuICAgIGpvaW50czogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHN0b3JlIHRoZSBza2luIG1hdHJpY2VzIGluIHZlcnRleCB0ZXh0dXJlXHJcbiAgICAgKiBAdHlwZSB7Ym9vbH1cclxuICAgICAqL1xyXG4gICAgdXNlU2tpbk1hdHJpY2VzVGV4dHVyZTogZmFsc2VcclxuXHJcbn0sIGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghdGhpcy5qb2ludHMpIHtcclxuICAgICAgICB0aGlzLmpvaW50cyA9IFtdO1xyXG4gICAgfVxyXG59LCB7XHJcblxyXG4gICAgaXNTa2lubmVkTWVzaDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiAhISh0aGlzLnNrZWxldG9uICYmIHRoaXMuam9pbnRzICYmIHRoaXMuam9pbnRzLmxlbmd0aCA+IDApO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtZXNoID0gUmVuZGVyYWJsZS5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgICAgICBtZXNoLnNrZWxldG9uID0gdGhpcy5za2VsZXRvbjtcclxuICAgICAgICBpZiAodGhpcy5qb2ludHMpIHtcclxuICAgICAgICAgICAgbWVzaC5qb2ludHMgPSB0aGlzLmpvaW50cy5zbGljZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWVzaDtcclxuICAgIH1cclxufSk7XHJcblxyXG4vLyBFbnVtc1xyXG5NZXNoLlBPSU5UUyA9IGdsZW51bS5QT0lOVFM7XHJcbk1lc2guTElORVMgPSBnbGVudW0uTElORVM7XHJcbk1lc2guTElORV9MT09QID0gZ2xlbnVtLkxJTkVfTE9PUDtcclxuTWVzaC5MSU5FX1NUUklQID0gZ2xlbnVtLkxJTkVfU1RSSVA7XHJcbk1lc2guVFJJQU5HTEVTID0gZ2xlbnVtLlRSSUFOR0xFUztcclxuTWVzaC5UUklBTkdMRV9TVFJJUCA9IGdsZW51bS5UUklBTkdMRV9TVFJJUDtcclxuTWVzaC5UUklBTkdMRV9GQU4gPSBnbGVudW0uVFJJQU5HTEVfRkFOO1xyXG5cclxuTWVzaC5CQUNLID0gZ2xlbnVtLkJBQ0s7XHJcbk1lc2guRlJPTlQgPSBnbGVudW0uRlJPTlQ7XHJcbk1lc2guRlJPTlRfQU5EX0JBQ0sgPSBnbGVudW0uRlJPTlRfQU5EX0JBQ0s7XHJcbk1lc2guQ1cgPSBnbGVudW0uQ1c7XHJcbk1lc2guQ0NXID0gZ2xlbnVtLkNDVztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1lc2g7XHJcbiIsImltcG9ydCBDYW1lcmEgZnJvbSAnLi4vQ2FtZXJhJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jYW1lcmEuUGVyc3BlY3RpdmVcclxuICogQGV4dGVuZHMgY2xheS5DYW1lcmFcclxuICovXHJcbnZhciBQZXJzcGVjdGl2ZSA9IENhbWVyYS5leHRlbmQoLyoqIEBsZW5kcyBjbGF5LmNhbWVyYS5QZXJzcGVjdGl2ZSMgKi97XHJcbiAgICAvKipcclxuICAgICAqIFZlcnRpY2FsIGZpZWxkIG9mIHZpZXcgaW4gZGVncmVlc1xyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZm92OiA1MCxcclxuICAgIC8qKlxyXG4gICAgICogQXNwZWN0IHJhdGlvLCB0eXBpY2FsbHkgdmlld3BvcnQgd2lkdGggLyBoZWlnaHRcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGFzcGVjdDogMSxcclxuICAgIC8qKlxyXG4gICAgICogTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbmVhcjogMC4xLFxyXG4gICAgLyoqXHJcbiAgICAgKiBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGZhcjogMjAwMFxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuY2FtZXJhLlBlcnNwZWN0aXZlLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgdXBkYXRlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHJhZCA9IHRoaXMuZm92IC8gMTgwICogTWF0aC5QSTtcclxuICAgICAgICB0aGlzLnByb2plY3Rpb25NYXRyaXgucGVyc3BlY3RpdmUocmFkLCB0aGlzLmFzcGVjdCwgdGhpcy5uZWFyLCB0aGlzLmZhcik7XHJcbiAgICB9LFxyXG4gICAgZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFycmF5O1xyXG4gICAgICAgIHZhciByYWQgPSBNYXRoLmF0YW4oMSAvIG1bNV0pICogMjtcclxuICAgICAgICB0aGlzLmZvdiA9IHJhZCAvIE1hdGguUEkgKiAxODA7XHJcbiAgICAgICAgdGhpcy5hc3BlY3QgPSBtWzVdIC8gbVswXTtcclxuICAgICAgICB0aGlzLm5lYXIgPSBtWzE0XSAvIChtWzEwXSAtIDEpO1xyXG4gICAgICAgIHRoaXMuZmFyID0gbVsxNF0gLyAobVsxMF0gKyAxKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuY2FtZXJhLlBlcnNwZWN0aXZlfVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGNhbWVyYSA9IENhbWVyYS5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgICAgICBjYW1lcmEuZm92ID0gdGhpcy5mb3Y7XHJcbiAgICAgICAgY2FtZXJhLmFzcGVjdCA9IHRoaXMuYXNwZWN0O1xyXG4gICAgICAgIGNhbWVyYS5uZWFyID0gdGhpcy5uZWFyO1xyXG4gICAgICAgIGNhbWVyYS5mYXIgPSB0aGlzLmZhcjtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNhbWVyYTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQZXJzcGVjdGl2ZTtcclxuIiwiaW1wb3J0IENhbWVyYSBmcm9tICcuLi9DYW1lcmEnO1xyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY2FtZXJhLk9ydGhvZ3JhcGhpY1xyXG4gKiBAZXh0ZW5kcyBjbGF5LkNhbWVyYVxyXG4gKi9cclxudmFyIE9ydGhvZ3JhcGhpYyA9IENhbWVyYS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5jYW1lcmEuT3J0aG9ncmFwaGljIyAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlZnQ6IC0xLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByaWdodDogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgbmVhcjogLTEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGZhcjogMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdG9wOiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBib3R0b206IC0xXHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jYW1lcmEuT3J0aG9ncmFwaGljLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgdXBkYXRlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdGhpcy5wcm9qZWN0aW9uTWF0cml4Lm9ydGhvKHRoaXMubGVmdCwgdGhpcy5yaWdodCwgdGhpcy5ib3R0b20sIHRoaXMudG9wLCB0aGlzLm5lYXIsIHRoaXMuZmFyKTtcclxuICAgIH0sXHJcblxyXG4gICAgZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtID0gdGhpcy5wcm9qZWN0aW9uTWF0cml4LmFycmF5O1xyXG4gICAgICAgIHRoaXMubGVmdCA9ICgtMSAtIG1bMTJdKSAvIG1bMF07XHJcbiAgICAgICAgdGhpcy5yaWdodCA9ICgxIC0gbVsxMl0pIC8gbVswXTtcclxuICAgICAgICB0aGlzLnRvcCA9ICgxIC0gbVsxM10pIC8gbVs1XTtcclxuICAgICAgICB0aGlzLmJvdHRvbSA9ICgtMSAtIG1bMTNdKSAvIG1bNV07XHJcbiAgICAgICAgdGhpcy5uZWFyID0gLSgtMSAtIG1bMTRdKSAvIG1bMTBdO1xyXG4gICAgICAgIHRoaXMuZmFyID0gLSgxIC0gbVsxNF0pIC8gbVsxMF07XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmNhbWVyYS5PcnRob2dyYXBoaWN9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgY2FtZXJhID0gQ2FtZXJhLnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGNhbWVyYS5sZWZ0ID0gdGhpcy5sZWZ0O1xyXG4gICAgICAgIGNhbWVyYS5yaWdodCA9IHRoaXMucmlnaHQ7XHJcbiAgICAgICAgY2FtZXJhLm5lYXIgPSB0aGlzLm5lYXI7XHJcbiAgICAgICAgY2FtZXJhLmZhciA9IHRoaXMuZmFyO1xyXG4gICAgICAgIGNhbWVyYS50b3AgPSB0aGlzLnRvcDtcclxuICAgICAgICBjYW1lcmEuYm90dG9tID0gdGhpcy5ib3R0b207XHJcblxyXG4gICAgICAgIHJldHVybiBjYW1lcmE7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgT3J0aG9ncmFwaGljO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5zdGFuZGFyZC5jaHVuay52YXJ5aW5nXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudmFyeWluZyB2ZWMzIHZfTm9ybWFsO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuI2lmIGRlZmluZWQoUEFSQUxMQVhPQ0NMVVNJT05NQVBfRU5BQkxFRCkgfHwgZGVmaW5lZChOT1JNQUxNQVBfRU5BQkxFRClcXG52YXJ5aW5nIHZlYzMgdl9UYW5nZW50O1xcbnZhcnlpbmcgdmVjMyB2X0JpdGFuZ2VudDtcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChBT01BUF9FTkFCTEVEKVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkMjtcXG4jZW5kaWZcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxudmFyeWluZyB2ZWM0IHZfQ29sb3I7XFxuI2VuZGlmXFxuQGVuZFxcbkBleHBvcnQgY2xheS5zdGFuZGFyZC5jaHVuay5saWdodF9oZWFkZXJcXG4jaWZkZWYgQU1CSUVOVF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuYW1iaWVudF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBBTUJJRU5UX1NIX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5hbWJpZW50X3NoX2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuYW1iaWVudF9jdWJlbWFwX2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIFBPSU5UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5wb2ludF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuZGlyZWN0aW9uYWxfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgU1BPVF9MSUdIVF9DT1VOVFxcbkBpbXBvcnQgY2xheS5oZWFkZXIuc3BvdF9saWdodFxcbiNlbmRpZlxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc3RhbmRhcmQudmVydGV4XFxuI2RlZmluZSBTSEFERVJfTkFNRSBzdGFuZGFyZFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG51bmlmb3JtIG1hdDQgd29ybGRJbnZlcnNlVHJhbnNwb3NlIDogV09STERJTlZFUlNFVFJBTlNQT1NFO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA9IHZlYzIoMS4wLCAxLjApO1xcbnVuaWZvcm0gdmVjMiB1dk9mZnNldCA9IHZlYzIoMC4wLCAwLjApO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbiNpZiBkZWZpbmVkKEFPTUFQX0VOQUJMRUQpXFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQyIDogVEVYQ09PUkRfMTtcXG4jZW5kaWZcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XFxuYXR0cmlidXRlIHZlYzQgdGFuZ2VudCA6IFRBTkdFTlQ7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbmF0dHJpYnV0ZSB2ZWM0IGFfQ29sb3IgOiBDT0xPUjtcXG4jZW5kaWZcXG5hdHRyaWJ1dGUgdmVjMyBiYXJ5Y2VudHJpYztcXG5AaW1wb3J0IGNsYXkuc3RhbmRhcmQuY2h1bmsudmFyeWluZ1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4gdmVjMyBza2lubmVkTm9ybWFsID0gbm9ybWFsO1xcbiB2ZWMzIHNraW5uZWRUYW5nZW50ID0gdGFuZ2VudC54eXo7XFxuI2lmZGVmIFNLSU5OSU5HXFxuIEBpbXBvcnQgY2xheS5jaHVuay5za2luX21hdHJpeFxcbiBza2lubmVkUG9zaXRpb24gPSAoc2tpbk1hdHJpeFdTICogdmVjNChwb3NpdGlvbiwgMS4wKSkueHl6O1xcbiBza2lubmVkTm9ybWFsID0gKHNraW5NYXRyaXhXUyAqIHZlYzQobm9ybWFsLCAwLjApKS54eXo7XFxuIHNraW5uZWRUYW5nZW50ID0gKHNraW5NYXRyaXhXUyAqIHZlYzQodGFuZ2VudC54eXosIDAuMCkpLnh5ejtcXG4jZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxuIHZfVGV4Y29vcmQgPSB0ZXhjb29yZCAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxuIHZfV29ybGRQb3NpdGlvbiA9ICh3b3JsZCAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApKS54eXo7XFxuIHZfQmFyeWNlbnRyaWMgPSBiYXJ5Y2VudHJpYztcXG4gdl9Ob3JtYWwgPSBub3JtYWxpemUoKHdvcmxkSW52ZXJzZVRyYW5zcG9zZSAqIHZlYzQoc2tpbm5lZE5vcm1hbCwgMC4wKSkueHl6KTtcXG4jaWYgZGVmaW5lZChQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEKSB8fCBkZWZpbmVkKE5PUk1BTE1BUF9FTkFCTEVEKVxcbiB2X1RhbmdlbnQgPSBub3JtYWxpemUoKHdvcmxkSW52ZXJzZVRyYW5zcG9zZSAqIHZlYzQoc2tpbm5lZFRhbmdlbnQsIDAuMCkpLnh5eik7XFxuIHZfQml0YW5nZW50ID0gbm9ybWFsaXplKGNyb3NzKHZfTm9ybWFsLCB2X1RhbmdlbnQpICogdGFuZ2VudC53KTtcXG4jZW5kaWZcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuIHZfQ29sb3IgPSBhX0NvbG9yO1xcbiNlbmRpZlxcbiNpZiBkZWZpbmVkKEFPTUFQX0VOQUJMRUQpXFxuIHZfVGV4Y29vcmQyID0gdGV4Y29vcmQyO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnN0YW5kYXJkLmZyYWdtZW50XFxuI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5XFxuI2RlZmluZSBHTE9TU0lORVNTX0NIQU5ORUwgMFxcbiNkZWZpbmUgUk9VR0hORVNTX0NIQU5ORUwgMFxcbiNkZWZpbmUgTUVUQUxORVNTX0NIQU5ORUwgMVxcbiNkZWZpbmUgRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxcbkBpbXBvcnQgY2xheS5zdGFuZGFyZC5jaHVuay52YXJ5aW5nXFxudW5pZm9ybSBtYXQ0IHZpZXdJbnZlcnNlIDogVklFV0lOVkVSU0U7XFxuI2lmZGVmIE5PUk1BTE1BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsTWFwO1xcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgbm9ybWFsU2NhbGU6IDEuMDtcXG4jaWZkZWYgRElGRlVTRU1BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZU1hcDtcXG4jZW5kaWZcXG4jaWZkZWYgU1BFQ1VMQVJNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwO1xcbiNlbmRpZlxcbiNpZmRlZiBVU0VfUk9VR0hORVNTXFxudW5pZm9ybSBmbG9hdCByb3VnaG5lc3MgOiAwLjU7XFxuICNpZmRlZiBST1VHSE5FU1NNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDtcXG4gI2VuZGlmXFxuI2Vsc2VcXG51bmlmb3JtIGZsb2F0IGdsb3NzaW5lc3M6IDAuNTtcXG4gI2lmZGVmIEdMT1NTSU5FU1NNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdsb3NzaW5lc3NNYXA7XFxuICNlbmRpZlxcbiNlbmRpZlxcbiNpZmRlZiBNRVRBTE5FU1NNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIG1ldGFsbmVzc01hcDtcXG4jZW5kaWZcXG4jaWZkZWYgT0NDTFVTSU9OTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBvY2NsdXNpb25NYXA7XFxuI2VuZGlmXFxuI2lmZGVmIEVOVklST05NRU5UTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXJDdWJlIGVudmlyb25tZW50TWFwO1xcbiAjaWZkZWYgUEFSQUxMQVhfQ09SUkVDVEVEXFxudW5pZm9ybSB2ZWMzIGVudmlyb25tZW50Qm94TWluO1xcbnVuaWZvcm0gdmVjMyBlbnZpcm9ubWVudEJveE1heDtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIEJSREZMT09LVVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGJyZGZMb29rdXA7XFxuI2VuZGlmXFxuI2lmZGVmIEVNSVNTSVZFTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBlbWlzc2l2ZU1hcDtcXG4jZW5kaWZcXG4jaWZkZWYgU1NBT01BUF9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgc3Nhb01hcDtcXG51bmlmb3JtIHZlYzQgdmlld3BvcnQgOiBWSUVXUE9SVDtcXG4jZW5kaWZcXG4jaWZkZWYgQU9NQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwO1xcbnVuaWZvcm0gZmxvYXQgYW9JbnRlbnNpdHk7XFxuI2VuZGlmXFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzEuMCwgMS4wLCAxLjBdO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGEgOiAxLjA7XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG51bmlmb3JtIGZsb2F0IGFscGhhQ3V0b2ZmOiAwLjk7XFxuI2VuZGlmXFxuI2lmZGVmIFVTRV9NRVRBTE5FU1NcXG51bmlmb3JtIGZsb2F0IG1ldGFsbmVzcyA6IDAuMDtcXG4jZWxzZVxcbnVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yIDogWzAuMSwgMC4xLCAwLjFdO1xcbiNlbmRpZlxcbnVuaWZvcm0gdmVjMyBlbWlzc2lvbiA6IFswLjAsIDAuMCwgMC4wXTtcXG51bmlmb3JtIGZsb2F0IGVtaXNzaW9uSW50ZW5zaXR5OiAxO1xcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoIDogMC4wO1xcbnVuaWZvcm0gdmVjNCBsaW5lQ29sb3IgOiBbMC4wLCAwLjAsIDAuMCwgMC42XTtcXG4jaWZkZWYgRU5WSVJPTk1FTlRNQVBfUFJFRklMVEVSXFxudW5pZm9ybSBmbG9hdCBtYXhNaXBtYXBMZXZlbDogNTtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkuc3RhbmRhcmQuY2h1bmsubGlnaHRfaGVhZGVyXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwuc3JnYlxcbkBpbXBvcnQgY2xheS5wbHVnaW4uY29tcHV0ZV9zaGFkb3dfbWFwXFxuQGltcG9ydCBjbGF5LnV0aWwucGFyYWxsYXhfY29ycmVjdFxcbkBpbXBvcnQgY2xheS51dGlsLkFDRVNcXG5mbG9hdCBHX1NtaXRoKGZsb2F0IGcsIGZsb2F0IG5kdiwgZmxvYXQgbmRsKVxcbntcXG4gZmxvYXQgcm91Z2huZXNzID0gMS4wIC0gZztcXG4gZmxvYXQgayA9IHJvdWdobmVzcyAqIHJvdWdobmVzcyAvIDIuMDtcXG4gZmxvYXQgRzFWID0gbmR2IC8gKG5kdiAqICgxLjAgLSBrKSArIGspO1xcbiBmbG9hdCBHMUwgPSBuZGwgLyAobmRsICogKDEuMCAtIGspICsgayk7XFxuIHJldHVybiBHMUwgKiBHMVY7XFxufVxcbnZlYzMgRl9TY2hsaWNrKGZsb2F0IG5kdiwgdmVjMyBzcGVjKSB7XFxuIHJldHVybiBzcGVjICsgKDEuMCAtIHNwZWMpICogcG93KDEuMCAtIG5kdiwgNS4wKTtcXG59XFxuZmxvYXQgRF9QaG9uZyhmbG9hdCBnLCBmbG9hdCBuZGgpIHtcXG4gZmxvYXQgYSA9IHBvdyg4MTkyLjAsIGcpO1xcbiByZXR1cm4gKGEgKyAyLjApIC8gOC4wICogcG93KG5kaCwgYSk7XFxufVxcbmZsb2F0IERfR0dYKGZsb2F0IGcsIGZsb2F0IG5kaCkge1xcbiBmbG9hdCByID0gMS4wIC0gZztcXG4gZmxvYXQgYSA9IHIgKiByO1xcbiBmbG9hdCB0bXAgPSBuZGggKiBuZGggKiAoYSAtIDEuMCkgKyAxLjA7XFxuIHJldHVybiBhIC8gKFBJICogdG1wICogdG1wKTtcXG59XFxuI2lmZGVmIFBBUkFMTEFYT0NDTFVTSU9OTUFQX0VOQUJMRURcXG51bmlmb3JtIGZsb2F0IHBhcmFsbGF4T2NjbHVzaW9uU2NhbGUgOiAwLjAyO1xcbnVuaWZvcm0gZmxvYXQgcGFyYWxsYXhNYXhMYXllcnMgOiAyMDtcXG51bmlmb3JtIGZsb2F0IHBhcmFsbGF4TWluTGF5ZXJzIDogNTtcXG51bmlmb3JtIHNhbXBsZXIyRCBwYXJhbGxheE9jY2x1c2lvbk1hcDtcXG5tYXQzIHRyYW5zcG9zZShpbiBtYXQzIGluTWF0KVxcbntcXG4gdmVjMyBpMCA9IGluTWF0WzBdO1xcbiB2ZWMzIGkxID0gaW5NYXRbMV07XFxuIHZlYzMgaTIgPSBpbk1hdFsyXTtcXG4gcmV0dXJuIG1hdDMoXFxuIHZlYzMoaTAueCwgaTEueCwgaTIueCksXFxuIHZlYzMoaTAueSwgaTEueSwgaTIueSksXFxuIHZlYzMoaTAueiwgaTEueiwgaTIueilcXG4gKTtcXG59XFxudmVjMiBwYXJhbGxheFV2KHZlYzIgdXYsIHZlYzMgdmlld0RpcilcXG57XFxuIGZsb2F0IG51bUxheWVycyA9IG1peChwYXJhbGxheE1heExheWVycywgcGFyYWxsYXhNaW5MYXllcnMsIGFicyhkb3QodmVjMygwLjAsIDAuMCwgMS4wKSwgdmlld0RpcikpKTtcXG4gZmxvYXQgbGF5ZXJIZWlnaHQgPSAxLjAgLyBudW1MYXllcnM7XFxuIGZsb2F0IGN1ckxheWVySGVpZ2h0ID0gMC4wO1xcbiB2ZWMyIGRlbHRhVXYgPSB2aWV3RGlyLnh5ICogcGFyYWxsYXhPY2NsdXNpb25TY2FsZSAvICh2aWV3RGlyLnogKiBudW1MYXllcnMpO1xcbiB2ZWMyIGN1clV2ID0gdXY7XFxuIGZsb2F0IGhlaWdodCA9IDEuMCAtIHRleHR1cmUyRChwYXJhbGxheE9jY2x1c2lvbk1hcCwgY3VyVXYpLnI7XFxuIGZvciAoaW50IGkgPSAwOyBpIDwgMzA7IGkrKykge1xcbiBjdXJMYXllckhlaWdodCArPSBsYXllckhlaWdodDtcXG4gY3VyVXYgLT0gZGVsdGFVdjtcXG4gaGVpZ2h0ID0gMS4wIC0gdGV4dHVyZTJEKHBhcmFsbGF4T2NjbHVzaW9uTWFwLCBjdXJVdikucjtcXG4gaWYgKGhlaWdodCA8IGN1ckxheWVySGVpZ2h0KSB7XFxuIGJyZWFrO1xcbiB9XFxuIH1cXG4gdmVjMiBwcmV2VXYgPSBjdXJVdiArIGRlbHRhVXY7XFxuIGZsb2F0IG5leHQgPSBoZWlnaHQgLSBjdXJMYXllckhlaWdodDtcXG4gZmxvYXQgcHJldiA9IDEuMCAtIHRleHR1cmUyRChwYXJhbGxheE9jY2x1c2lvbk1hcCwgcHJldlV2KS5yIC0gY3VyTGF5ZXJIZWlnaHQgKyBsYXllckhlaWdodDtcXG4gcmV0dXJuIG1peChjdXJVdiwgcHJldlV2LCBuZXh0IC8gKG5leHQgLSBwcmV2KSk7XFxufVxcbiNlbmRpZlxcbnZvaWQgbWFpbigpIHtcXG4gdmVjNCBhbGJlZG9Db2xvciA9IHZlYzQoY29sb3IsIGFscGhhKTtcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuIGFsYmVkb0NvbG9yICo9IHZfQ29sb3I7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIGFsYmVkb0NvbG9yID0gc1JHQlRvTGluZWFyKGFsYmVkb0NvbG9yKTtcXG4jZW5kaWZcXG4gdmVjMyBleWVQb3MgPSB2aWV3SW52ZXJzZVszXS54eXo7XFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3MgLSB2X1dvcmxkUG9zaXRpb24pO1xcbiB2ZWMyIHV2ID0gdl9UZXhjb29yZDtcXG4jaWYgZGVmaW5lZChQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEKSB8fCBkZWZpbmVkKE5PUk1BTE1BUF9FTkFCTEVEKVxcbiBtYXQzIHRibiA9IG1hdDModl9UYW5nZW50LCB2X0JpdGFuZ2VudCwgdl9Ob3JtYWwpO1xcbiNlbmRpZlxcbiNpZmRlZiBQQVJBTExBWE9DQ0xVU0lPTk1BUF9FTkFCTEVEXFxuIHV2ID0gcGFyYWxsYXhVdih2X1RleGNvb3JkLCBub3JtYWxpemUodHJhbnNwb3NlKHRibikgKiAtVikpO1xcbiNlbmRpZlxcbiNpZmRlZiBESUZGVVNFTUFQX0VOQUJMRURcXG4gdmVjNCB0ZXhlbCA9IHRleHR1cmUyRChkaWZmdXNlTWFwLCB1dik7XFxuICNpZmRlZiBTUkdCX0RFQ09ERVxcbiB0ZXhlbCA9IHNSR0JUb0xpbmVhcih0ZXhlbCk7XFxuICNlbmRpZlxcbiBhbGJlZG9Db2xvci5yZ2IgKj0gdGV4ZWwucmdiO1xcbiAjaWZkZWYgRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxcbiBhbGJlZG9Db2xvci5hICo9IHRleGVsLmE7XFxuICNlbmRpZlxcbiNlbmRpZlxcbiNpZmRlZiBVU0VfTUVUQUxORVNTXFxuIGZsb2F0IG0gPSBtZXRhbG5lc3M7XFxuICNpZmRlZiBNRVRBTE5FU1NNQVBfRU5BQkxFRFxcbiBmbG9hdCBtMiA9IHRleHR1cmUyRChtZXRhbG5lc3NNYXAsIHV2KVtNRVRBTE5FU1NfQ0hBTk5FTF07XFxuIG0gPSBjbGFtcChtMiArIChtIC0gMC41KSAqIDIuMCwgMC4wLCAxLjApO1xcbiAjZW5kaWZcXG4gdmVjMyBiYXNlQ29sb3IgPSBhbGJlZG9Db2xvci5yZ2I7XFxuIGFsYmVkb0NvbG9yLnJnYiA9IGJhc2VDb2xvciAqICgxLjAgLSBtKTtcXG4gdmVjMyBzcGVjID0gbWl4KHZlYzMoMC4wNCksIGJhc2VDb2xvciwgbSk7XFxuI2Vsc2VcXG4gdmVjMyBzcGVjID0gc3BlY3VsYXJDb2xvcjtcXG4jZW5kaWZcXG4jaWZkZWYgVVNFX1JPVUdITkVTU1xcbiBmbG9hdCBnID0gY2xhbXAoMS4wIC0gcm91Z2huZXNzLCAwLjAsIDEuMCk7XFxuICNpZmRlZiBST1VHSE5FU1NNQVBfRU5BQkxFRFxcbiBmbG9hdCBnMiA9IDEuMCAtIHRleHR1cmUyRChyb3VnaG5lc3NNYXAsIHV2KVtST1VHSE5FU1NfQ0hBTk5FTF07XFxuIGcgPSBjbGFtcChnMiArIChnIC0gMC41KSAqIDIuMCwgMC4wLCAxLjApO1xcbiAjZW5kaWZcXG4jZWxzZVxcbiBmbG9hdCBnID0gZ2xvc3NpbmVzcztcXG4gI2lmZGVmIEdMT1NTSU5FU1NNQVBfRU5BQkxFRFxcbiBmbG9hdCBnMiA9IHRleHR1cmUyRChnbG9zc2luZXNzTWFwLCB1dilbR0xPU1NJTkVTU19DSEFOTkVMXTtcXG4gZyA9IGNsYW1wKGcyICsgKGcgLSAwLjUpICogMi4wLCAwLjAsIDEuMCk7XFxuICNlbmRpZlxcbiNlbmRpZlxcbiNpZmRlZiBTUEVDVUxBUk1BUF9FTkFCTEVEXFxuIHNwZWMgKj0gc1JHQlRvTGluZWFyKHRleHR1cmUyRChzcGVjdWxhck1hcCwgdXYpKS5yZ2I7XFxuI2VuZGlmXFxuIHZlYzMgTiA9IHZfTm9ybWFsO1xcbiNpZmRlZiBET1VCTEVfU0lERURcXG4gaWYgKGRvdChOLCBWKSA8IDAuMCkge1xcbiBOID0gLU47XFxuIH1cXG4jZW5kaWZcXG4jaWZkZWYgTk9STUFMTUFQX0VOQUJMRURcXG4gaWYgKGRvdCh2X1RhbmdlbnQsIHZfVGFuZ2VudCkgPiAwLjApIHtcXG4gdmVjMyBub3JtYWxUZXhlbCA9IHRleHR1cmUyRChub3JtYWxNYXAsIHV2KS54eXo7XFxuIGlmIChkb3Qobm9ybWFsVGV4ZWwsIG5vcm1hbFRleGVsKSA+IDAuMCkgeyBOID0gKG5vcm1hbFRleGVsICogMi4wIC0gMS4wKTtcXG4gTiA9IG5vcm1hbGl6ZShOICogdmVjMyhub3JtYWxTY2FsZSwgbm9ybWFsU2NhbGUsIDEuMCkpO1xcbiB0Ym5bMV0gPSAtdGJuWzFdO1xcbiBOID0gbm9ybWFsaXplKHRibiAqIE4pO1xcbiB9XFxuIH1cXG4jZW5kaWZcXG4gdmVjMyBkaWZmdXNlVGVybSA9IHZlYzMoMC4wLCAwLjAsIDAuMCk7XFxuIHZlYzMgc3BlY3VsYXJUZXJtID0gdmVjMygwLjAsIDAuMCwgMC4wKTtcXG4gZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuIHZlYzMgZnJlc25lbFRlcm0gPSBGX1NjaGxpY2sobmR2LCBzcGVjKTtcXG4jaWZkZWYgQU1CSUVOVF9MSUdIVF9DT1VOVFxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX0xJR0hUX0NPVU5UOyBfaWR4XysrKVxcbiB7e1xcbiBkaWZmdXNlVGVybSArPSBhbWJpZW50TGlnaHRDb2xvcltfaWR4X107XFxuIH19XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfU0hfTElHSFRfQ09VTlRcXG4gZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge3tcXG4gZGlmZnVzZVRlcm0gKz0gY2FsY0FtYmllbnRTSExpZ2h0KF9pZHhfLCBOKSAqIGFtYmllbnRTSExpZ2h0Q29sb3JbX2lkeF9dO1xcbiB9fVxcbiNlbmRpZlxcbiNpZmRlZiBQT0lOVF9MSUdIVF9DT1VOVFxcbiNpZiBkZWZpbmVkKFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gZmxvYXQgc2hhZG93Q29udHJpYnNQb2ludFtQT0lOVF9MSUdIVF9DT1VOVF07XFxuIGlmKHNoYWRvd0VuYWJsZWQpXFxuIHtcXG4gY29tcHV0ZVNoYWRvd09mUG9pbnRMaWdodHModl9Xb3JsZFBvc2l0aW9uLCBzaGFkb3dDb250cmlic1BvaW50KTtcXG4gfVxcbiNlbmRpZlxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBQT0lOVF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge3tcXG4gdmVjMyBsaWdodFBvc2l0aW9uID0gcG9pbnRMaWdodFBvc2l0aW9uW19pZHhfXTtcXG4gdmVjMyBsYyA9IHBvaW50TGlnaHRDb2xvcltfaWR4X107XFxuIGZsb2F0IHJhbmdlID0gcG9pbnRMaWdodFJhbmdlW19pZHhfXTtcXG4gdmVjMyBMID0gbGlnaHRQb3NpdGlvbiAtIHZfV29ybGRQb3NpdGlvbjtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIHJhbmdlKTtcXG4gTCAvPSBkaXN0O1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIHNoYWRvd0NvbnRyaWIgPSBzaGFkb3dDb250cmlic1BvaW50W19pZHhfXTtcXG4gfVxcbiNlbmRpZlxcbiB2ZWMzIGxpID0gbGMgKiBuZGwgKiBhdHRlbnVhdGlvbiAqIHNoYWRvd0NvbnRyaWI7XFxuIGRpZmZ1c2VUZXJtICs9IGxpO1xcbiBzcGVjdWxhclRlcm0gKz0gbGkgKiBmcmVzbmVsVGVybSAqIERfUGhvbmcoZywgbmRoKTtcXG4gfX1cXG4jZW5kaWZcXG4jaWZkZWYgRElSRUNUSU9OQUxfTElHSFRfQ09VTlRcXG4jaWYgZGVmaW5lZChESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWJzRGlyW0RJUkVDVElPTkFMX0xJR0hUX0NPVU5UXTtcXG4gaWYoc2hhZG93RW5hYmxlZClcXG4ge1xcbiBjb21wdXRlU2hhZG93T2ZEaXJlY3Rpb25hbExpZ2h0cyh2X1dvcmxkUG9zaXRpb24sIHNoYWRvd0NvbnRyaWJzRGlyKTtcXG4gfVxcbiNlbmRpZlxcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge3tcXG4gdmVjMyBMID0gLW5vcm1hbGl6ZShkaXJlY3Rpb25hbExpZ2h0RGlyZWN0aW9uW19pZHhfXSk7XFxuIHZlYzMgbGMgPSBkaXJlY3Rpb25hbExpZ2h0Q29sb3JbX2lkeF9dO1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIHNoYWRvd0NvbnRyaWIgPSBzaGFkb3dDb250cmlic0RpcltfaWR4X107XFxuIH1cXG4jZW5kaWZcXG4gdmVjMyBsaSA9IGxjICogbmRsICogc2hhZG93Q29udHJpYjtcXG4gZGlmZnVzZVRlcm0gKz0gbGk7XFxuIHNwZWN1bGFyVGVybSArPSBsaSAqIGZyZXNuZWxUZXJtICogRF9QaG9uZyhnLCBuZGgpO1xcbiB9fVxcbiNlbmRpZlxcbiNpZmRlZiBTUE9UX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWJzU3BvdFtTUE9UX0xJR0hUX0NPVU5UXTtcXG4gaWYoc2hhZG93RW5hYmxlZClcXG4ge1xcbiBjb21wdXRlU2hhZG93T2ZTcG90TGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNTcG90KTtcXG4gfVxcbiNlbmRpZlxcbiBmb3IoaW50IGkgPSAwOyBpIDwgU1BPVF9MSUdIVF9DT1VOVDsgaSsrKVxcbiB7XFxuIHZlYzMgbGlnaHRQb3NpdGlvbiA9IHNwb3RMaWdodFBvc2l0aW9uW2ldO1xcbiB2ZWMzIHNwb3RMaWdodERpcmVjdGlvbiA9IC1ub3JtYWxpemUoc3BvdExpZ2h0RGlyZWN0aW9uW2ldKTtcXG4gdmVjMyBsYyA9IHNwb3RMaWdodENvbG9yW2ldO1xcbiBmbG9hdCByYW5nZSA9IHNwb3RMaWdodFJhbmdlW2ldO1xcbiBmbG9hdCBhID0gc3BvdExpZ2h0VW1icmFBbmdsZUNvc2luZVtpXTtcXG4gZmxvYXQgYiA9IHNwb3RMaWdodFBlbnVtYnJhQW5nbGVDb3NpbmVbaV07XFxuIGZsb2F0IGZhbGxvZmZGYWN0b3IgPSBzcG90TGlnaHRGYWxsb2ZmRmFjdG9yW2ldO1xcbiB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKEwpO1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgcmFuZ2UpO1xcbiBMIC89IGRpc3Q7XFxuIGZsb2F0IGMgPSBkb3Qoc3BvdExpZ2h0RGlyZWN0aW9uLCBMKTtcXG4gZmxvYXQgZmFsbG9mZjtcXG4gZmFsbG9mZiA9IGNsYW1wKChjIC0gYSkgLyhiIC0gYSksIDAuMCwgMS4wKTtcXG4gZmFsbG9mZiA9IHBvdyhmYWxsb2ZmLCBmYWxsb2ZmRmFjdG9yKTtcXG4gdmVjMyBIID0gbm9ybWFsaXplKEwgKyBWKTtcXG4gZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiNpZiBkZWZpbmVkKFNQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZiAoc2hhZG93RW5hYmxlZClcXG4ge1xcbiBzaGFkb3dDb250cmliID0gc2hhZG93Q29udHJpYnNTcG90W2ldO1xcbiB9XFxuI2VuZGlmXFxuIHZlYzMgbGkgPSBsYyAqIGF0dGVudWF0aW9uICogKDEuMCAtIGZhbGxvZmYpICogc2hhZG93Q29udHJpYiAqIG5kbDtcXG4gZGlmZnVzZVRlcm0gKz0gbGk7XFxuIHNwZWN1bGFyVGVybSArPSBsaSAqIGZyZXNuZWxUZXJtICogRF9QaG9uZyhnLCBuZGgpO1xcbiB9XFxuI2VuZGlmXFxuIHZlYzQgb3V0Q29sb3IgPSBhbGJlZG9Db2xvcjtcXG4gb3V0Q29sb3IucmdiICo9IG1heChkaWZmdXNlVGVybSwgdmVjMygwLjApKTtcXG4gb3V0Q29sb3IucmdiICs9IG1heChzcGVjdWxhclRlcm0sIHZlYzMoMC4wKSk7XFxuI2lmZGVmIEFNQklFTlRfQ1VCRU1BUF9MSUdIVF9DT1VOVFxcbiB2ZWMzIEwgPSByZWZsZWN0KC1WLCBOKTtcXG4gZmxvYXQgcm91Z2gyID0gY2xhbXAoMS4wIC0gZywgMC4wLCAxLjApO1xcbiBmbG9hdCBiaWFzMiA9IHJvdWdoMiAqIDUuMDtcXG4gdmVjMiBicmRmUGFyYW0yID0gdGV4dHVyZTJEKGFtYmllbnRDdWJlbWFwTGlnaHRCUkRGTG9va3VwWzBdLCB2ZWMyKHJvdWdoMiwgbmR2KSkueHk7XFxuIHZlYzMgZW52V2VpZ2h0MiA9IHNwZWMgKiBicmRmUGFyYW0yLnggKyBicmRmUGFyYW0yLnk7XFxuIHZlYzMgZW52VGV4ZWwyO1xcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBBTUJJRU5UX0NVQkVNQVBfTElHSFRfQ09VTlQ7IF9pZHhfKyspXFxuIHt7XFxuICNpZmRlZiBTVVBQT1JUX1RFWFRVUkVfTE9EXFxuIGVudlRleGVsMiA9IFJHQk1EZWNvZGUodGV4dHVyZUN1YmVMb2RFWFQoYW1iaWVudEN1YmVtYXBMaWdodEN1YmVtYXBbX2lkeF9dLCBMLCBiaWFzMiksIDguMTIpO1xcbiAjZWxzZVxcbiBlbnZUZXhlbDIgPSBSR0JNRGVjb2RlKHRleHR1cmVDdWJlKGFtYmllbnRDdWJlbWFwTGlnaHRDdWJlbWFwW19pZHhfXSwgTCksIDguMTIpO1xcbiAjZW5kaWZcXG4gb3V0Q29sb3IucmdiICs9IGFtYmllbnRDdWJlbWFwTGlnaHRDb2xvcltfaWR4X10gKiBlbnZUZXhlbDIgKiBlbnZXZWlnaHQyO1xcbiB9fVxcbiNlbmRpZlxcbiNpZmRlZiBFTlZJUk9OTUVOVE1BUF9FTkFCTEVEXFxuIHZlYzMgZW52V2VpZ2h0ID0gZyAqIGZyZXNuZWxUZXJtO1xcbiB2ZWMzIEwgPSByZWZsZWN0KC1WLCBOKTtcXG4gI2lmZGVmIFBBUkFMTEFYX0NPUlJFQ1RFRFxcbiBMID0gcGFyYWxsYXhDb3JyZWN0KEwsIHZfV29ybGRQb3NpdGlvbiwgZW52aXJvbm1lbnRCb3hNaW4sIGVudmlyb25tZW50Qm94TWF4KTtcXG4jZW5kaWZcXG4gI2lmZGVmIEVOVklST05NRU5UTUFQX1BSRUZJTFRFUlxcbiBmbG9hdCByb3VnaCA9IGNsYW1wKDEuMCAtIGcsIDAuMCwgMS4wKTtcXG4gZmxvYXQgYmlhcyA9IHJvdWdoICogbWF4TWlwbWFwTGV2ZWw7XFxuICNpZmRlZiBTVVBQT1JUX1RFWFRVUkVfTE9EXFxuIHZlYzMgZW52VGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZUN1YmVMb2RFWFQoZW52aXJvbm1lbnRNYXAsIEwsIGJpYXMpKS5yZ2I7XFxuICNlbHNlXFxuIHZlYzMgZW52VGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZUN1YmUoZW52aXJvbm1lbnRNYXAsIEwpKS5yZ2I7XFxuICNlbmRpZlxcbiAjaWZkZWYgQlJERkxPT0tVUF9FTkFCTEVEXFxuIHZlYzIgYnJkZlBhcmFtID0gdGV4dHVyZTJEKGJyZGZMb29rdXAsIHZlYzIocm91Z2gsIG5kdikpLnh5O1xcbiBlbnZXZWlnaHQgPSBzcGVjICogYnJkZlBhcmFtLnggKyBicmRmUGFyYW0ueTtcXG4gI2VuZGlmXFxuICNlbHNlXFxuIHZlYzMgZW52VGV4ZWwgPSB0ZXh0dXJlQ3ViZShlbnZpcm9ubWVudE1hcCwgTCkueHl6O1xcbiAjZW5kaWZcXG4gb3V0Q29sb3IucmdiICs9IGVudlRleGVsICogZW52V2VpZ2h0O1xcbiNlbmRpZlxcbiBmbG9hdCBhb0ZhY3RvciA9IDEuMDtcXG4jaWZkZWYgU1NBT01BUF9FTkFCTEVEXFxuIGFvRmFjdG9yID0gbWluKHRleHR1cmUyRChzc2FvTWFwLCAoZ2xfRnJhZ0Nvb3JkLnh5IC0gdmlld3BvcnQueHkpIC8gdmlld3BvcnQuencpLnIsIGFvRmFjdG9yKTtcXG4jZW5kaWZcXG4jaWZkZWYgQU9NQVBfRU5BQkxFRFxcbiBhb0ZhY3RvciA9IG1pbigxLjAgLSBjbGFtcCgoMS4wIC0gdGV4dHVyZTJEKGFvTWFwLCB2X1RleGNvb3JkMikucikgKiBhb0ludGVuc2l0eSwgMC4wLCAxLjApLCBhb0ZhY3Rvcik7XFxuI2VuZGlmXFxuI2lmZGVmIE9DQ0xVU0lPTk1BUF9FTkFCTEVEXFxuIGFvRmFjdG9yID0gbWluKDEuMCAtIGNsYW1wKCgxLjAgLSB0ZXh0dXJlMkQob2NjbHVzaW9uTWFwLCB2X1RleGNvb3JkKS5yKSwgMC4wLCAxLjApLCBhb0ZhY3Rvcik7XFxuI2VuZGlmXFxuIG91dENvbG9yLnJnYiAqPSBhb0ZhY3RvcjtcXG4gdmVjMyBsRW1pc3Npb24gPSBlbWlzc2lvbjtcXG4jaWZkZWYgRU1JU1NJVkVNQVBfRU5BQkxFRFxcbiBsRW1pc3Npb24gKj0gdGV4dHVyZTJEKGVtaXNzaXZlTWFwLCB1dikucmdiO1xcbiNlbmRpZlxcbiBvdXRDb2xvci5yZ2IgKz0gbEVtaXNzaW9uICogZW1pc3Npb25JbnRlbnNpdHk7XFxuIGlmKGxpbmVXaWR0aCA+IDAuKVxcbiB7XFxuIG91dENvbG9yLnJnYiA9IG1peChvdXRDb2xvci5yZ2IsIGxpbmVDb2xvci5yZ2IsICgxLjAgLSBlZGdlRmFjdG9yKGxpbmVXaWR0aCkpICogbGluZUNvbG9yLmEpO1xcbiB9XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG4gaWYgKG91dENvbG9yLmEgPCBhbHBoYUN1dG9mZikge1xcbiBkaXNjYXJkO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIFRPTkVNQVBQSU5HXFxuIG91dENvbG9yLnJnYiA9IEFDRVNUb25lTWFwcGluZyhvdXRDb2xvci5yZ2IpO1xcbiNlbmRpZlxcbiNpZmRlZiBTUkdCX0VOQ09ERVxcbiBvdXRDb2xvciA9IGxpbmVhclRvc1JHQihvdXRDb2xvcik7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihvdXRDb2xvcik7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc3RhbmRhcmRNUi52ZXJ0ZXhcXG5AaW1wb3J0IGNsYXkuc3RhbmRhcmQudmVydGV4XFxuQGVuZFxcbkBleHBvcnQgY2xheS5zdGFuZGFyZE1SLmZyYWdtZW50XFxuI2RlZmluZSBVU0VfTUVUQUxORVNTXFxuI2RlZmluZSBVU0VfUk9VR0hORVNTXFxuQGltcG9ydCBjbGF5LnN0YW5kYXJkLmZyYWdtZW50XFxuQGVuZFwiO1xyXG4iLCJpbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi9NYXRlcmlhbCc7XHJcblxyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4vU2hhZGVyJztcclxuaW1wb3J0IHN0YW5kYXJkRXNzbCBmcm9tICcuL3NoYWRlci9zb3VyY2Uvc3RhbmRhcmQuZ2xzbC5qcyc7XHJcbmltcG9ydCB1dGlsIGZyb20gJy4vY29yZS91dGlsJztcclxuXHJcbi8vIEltcG9ydCBzdGFuZGFyZCBzaGFkZXJcclxuU2hhZGVyWydpbXBvcnQnXShzdGFuZGFyZEVzc2wpO1xyXG5cclxudmFyIFRFWFRVUkVfUFJPUEVSVElFUyA9IFsnZGlmZnVzZU1hcCcsICdub3JtYWxNYXAnLCAncm91Z2huZXNzTWFwJywgJ21ldGFsbmVzc01hcCcsICdlbWlzc2l2ZU1hcCcsICdlbnZpcm9ubWVudE1hcCcsICdicmRmTG9va3VwJywgJ3NzYW9NYXAnLCAnYW9NYXAnXTtcclxudmFyIFNJTVBMRV9QUk9QRVJUSUVTID0gWydjb2xvcicsICdlbWlzc2lvbicsICdlbWlzc2lvbkludGVuc2l0eScsICdhbHBoYScsICdyb3VnaG5lc3MnLCAnbWV0YWxuZXNzJywgJ3V2UmVwZWF0JywgJ3V2T2Zmc2V0JywgJ2FvSW50ZW5zaXR5JywgJ2FscGhhQ3V0b2ZmJywgJ25vcm1hbFNjYWxlJ107XHJcbnZhciBQUk9QRVJUSUVTX0NIQU5HRV9TSEFERVIgPSBbJ2xpbmVhcicsICdlbmNvZGVSR0JNJywgJ2RlY29kZVJHQk0nLCAnZG91YmxlU2lkZWQnLCAnYWxwaGFUZXN0JywgJ3JvdWdobmVzc0NoYW5uZWwnLCAnbWV0YWxuZXNzQ2hhbm5lbCcsICdlbnZpcm9ubWVudE1hcFByZWZpbHRlcmVkJ107XHJcblxyXG52YXIgTlVNX0RFRklORV9NQVAgPSB7XHJcbiAgICAncm91Z2huZXNzQ2hhbm5lbCc6ICdST1VHSE5FU1NfQ0hBTk5FTCcsXHJcbiAgICAnbWV0YWxuZXNzQ2hhbm5lbCc6ICdNRVRBTE5FU1NfQ0hBTk5FTCdcclxufTtcclxudmFyIEJPT0xfREVGSU5FX01BUCA9IHtcclxuICAgICdsaW5lYXInOiAnU1JHQl9ERUNPREUnLFxyXG4gICAgJ2VuY29kZVJHQk0nOiAnUkdCTV9FTkNPREUnLFxyXG4gICAgJ2RlY29kZVJHQk0nOiAnUkdCTV9ERUNPREUnLFxyXG4gICAgJ2RvdWJsZVNpZGVkJzogJ0RPVUJMRV9TSURFRCcsXHJcbiAgICAnYWxwaGFUZXN0JzogJ0FMUEhBX1RFU1QnLFxyXG4gICAgJ2Vudmlyb25tZW50TWFwUHJlZmlsdGVyZWQnOiAnRU5WSVJPTk1FTlRNQVBfUFJFRklMVEVSJ1xyXG59O1xyXG5cclxuXHJcbnZhciBzdGFuZGFyZFNoYWRlcjtcclxuLyoqXHJcbiAqIFN0YW5kYXJkIG1hdGVyaWFsIHdpdGhvdXQgY3VzdG9tIHNoYWRlci5cclxuICogQGNvbnN0cnVjdG9yIGNsYXkuU3RhbmRhcmRNYXRlcmlhbFxyXG4gKiBAZXh0ZW5kcyBjbGF5LkJhc2VcclxuICogQGV4YW1wbGVcclxuICogdmFyIG1hdCA9IG5ldyBjbGF5LlN0YW5kYXJkTWF0ZXJpYWwoe1xyXG4gKiAgICAgY29sb3I6IFsxLCAxLCAxXSxcclxuICogICAgIGRpZmZ1c2VNYXA6IGRpZmZ1c2VUZXh0dXJlXHJcbiAqIH0pO1xyXG4gKiBtYXQucm91Z2huZXNzID0gMTtcclxuICovXHJcbnZhciBTdGFuZGFyZE1hdGVyaWFsID0gTWF0ZXJpYWwuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghc3RhbmRhcmRTaGFkZXIpIHtcclxuICAgICAgICBzdGFuZGFyZFNoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5zdGFuZGFyZE1SLnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkTVIuZnJhZ21lbnQnKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlN0YW5kYXJkTWF0ZXJpYWwjICovIHtcclxuICAgICAgICBzaGFkZXI6IHN0YW5kYXJkU2hhZGVyXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAob3B0aW9uKSB7XHJcbiAgICAvLyBQRU5ESU5HXHJcbiAgICB1dGlsLmV4dGVuZCh0aGlzLCBvcHRpb24pO1xyXG4gICAgLy8gRXh0ZW5kIGFmdGVyIHNoYWRlciBpcyBjcmVhdGVkLlxyXG4gICAgdXRpbC5kZWZhdWx0cyh0aGlzLCAvKiogQGxlbmRzIGNsYXkuU3RhbmRhcmRNYXRlcmlhbCMgKi8gIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgICAgICogQGRlZmF1bHQgWzEsIDEsIDFdXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29sb3I6IFsxLCAxLCAxXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxyXG4gICAgICAgICAqIEBkZWZhdWx0IFswLCAwLCAwXVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVtaXNzaW9uOiBbMCwgMCwgMF0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVtaXNzaW9uSW50ZW5zaXR5OiAwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDAuNVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJvdWdobmVzczogMC41LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAgICAgKi9cclxuICAgICAgICBtZXRhbG5lc3M6IDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQGRlZmF1bHQgMVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGFscGhhOiAxLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhbHBoYVRlc3Q6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDdXRvZmYgdGhyZXNob2xkIGZvciBhbHBoYSB0ZXN0XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBhbHBoYUN1dG9mZjogMC45LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBTY2FsYXIgbXVsdGlwbGllciBhcHBsaWVkIHRvIGVhY2ggbm9ybWFsIHZlY3RvciBvZiBub3JtYWwgdGV4dHVyZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBYWFggVGhpcyB2YWx1ZSBpcyBjb25zaWRlcmVkIG9ubHkgaWYgYSBub3JtYWwgdGV4dHVyZSBpcyBzcGVjaWZpZWQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbm9ybWFsU2NhbGU6IDEuMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgLy8gVE9ETyBNdXN0IGRpc2FibGUgY3VsbGluZy5cclxuICAgICAgICBkb3VibGVTaWRlZDogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkaWZmdXNlTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbm9ybWFsTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcm91Z2huZXNzTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWV0YWxuZXNzTWFwOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbWlzc2l2ZU1hcDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZUN1YmV9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LkJvdW5kaW5nQm94fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVudmlyb25tZW50Qm94OiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEJSREYgTG9va3VwIGlzIGdlbmVyYXRlZCBieSBjbGF5LnV0aWwuY3ViZW1hcC5pbnRlZ3JhdGVCcmRmXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGJyZGZMb29rdXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzc2FvTWFwOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYW9NYXA6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cclxuICAgICAgICAgKiBAZGVmYXVsdCBbMSwgMV1cclxuICAgICAgICAgKi9cclxuICAgICAgICB1dlJlcGVhdDogWzEsIDFdLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgICAgICogQGRlZmF1bHQgWzAsIDBdXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdXZPZmZzZXQ6IFswLCAwXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYW9JbnRlbnNpdHk6IDEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVudmlyb25tZW50TWFwUHJlZmlsdGVyZWQ6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBsaW5lYXI6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbmNvZGVSR0JNOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGVjb2RlUkdCTTogZmFsc2UsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtOdW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcm91Z2huZXNzQ2hhbm5lbDogMCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7TnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1ldGFsbmVzc0NoYW5uZWw6IDFcclxuICAgIH0pO1xyXG59LCB7XHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBtYXRlcmlhbCA9IG5ldyBTdGFuZGFyZE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgVEVYVFVSRV9QUk9QRVJUSUVTLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzW3Byb3BOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxbcHJvcE5hbWVdID0gdGhpc1twcm9wTmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgICAgICBTSU1QTEVfUFJPUEVSVElFUy5jb25jYXQoUFJPUEVSVElFU19DSEFOR0VfU0hBREVSKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wTmFtZSkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbFtwcm9wTmFtZV0gPSB0aGlzW3Byb3BOYW1lXTtcclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgICAgICByZXR1cm4gbWF0ZXJpYWw7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuU0lNUExFX1BST1BFUlRJRVMuZm9yRWFjaChmdW5jdGlvbiAocHJvcE5hbWUpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdGFuZGFyZE1hdGVyaWFsLnByb3RvdHlwZSwgcHJvcE5hbWUsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KHByb3BOYW1lKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybShwcm9wTmFtZSwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59KTtcclxuXHJcblRFWFRVUkVfUFJPUEVSVElFUy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wTmFtZSkge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCBwcm9wTmFtZSwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQocHJvcE5hbWUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVbmlmb3JtKHByb3BOYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxuUFJPUEVSVElFU19DSEFOR0VfU0hBREVSLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICB2YXIgcHJpdmF0ZUtleSA9ICdfJyArIHByb3BOYW1lO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCBwcm9wTmFtZSwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpc1twcml2YXRlS2V5XTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXNbcHJpdmF0ZUtleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHByb3BOYW1lIGluIE5VTV9ERUZJTkVfTUFQKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGVmaW5lTmFtZSA9IE5VTV9ERUZJTkVfTUFQW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lKCdmcmFnbWVudCcsIGRlZmluZU5hbWUsIHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBkZWZpbmVOYW1lID0gQk9PTF9ERUZJTkVfTUFQW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgICAgIHZhbHVlID8gdGhpcy5kZWZpbmUoJ2ZyYWdtZW50JywgZGVmaW5lTmFtZSkgOiB0aGlzLnVuZGVmaW5lKCdmcmFnbWVudCcsIGRlZmluZU5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0YW5kYXJkTWF0ZXJpYWwucHJvdG90eXBlLCAnZW52aXJvbm1lbnRCb3gnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZW52Qm94ID0gdGhpcy5fZW52aXJvbm1lbnRCb3g7XHJcbiAgICAgICAgaWYgKGVudkJveCkge1xyXG4gICAgICAgICAgICBlbnZCb3gubWluLnNldEFycmF5KHRoaXMuZ2V0KCdlbnZpcm9ubWVudEJveE1pbicpKTtcclxuICAgICAgICAgICAgZW52Qm94Lm1heC5zZXRBcnJheSh0aGlzLmdldCgnZW52aXJvbm1lbnRCb3hNYXgnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlbnZCb3g7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fZW52aXJvbm1lbnRCb3ggPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgdmFyIHVuaWZvcm1zID0gdGhpcy51bmlmb3JtcyA9IHRoaXMudW5pZm9ybXMgfHwge307XHJcbiAgICAgICAgdW5pZm9ybXNbJ2Vudmlyb25tZW50Qm94TWluJ10gPSB1bmlmb3Jtc1snZW52aXJvbm1lbnRCb3hNaW4nXSB8fCB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB1bmlmb3Jtc1snZW52aXJvbm1lbnRCb3hNYXgnXSA9IHVuaWZvcm1zWydlbnZpcm9ubWVudEJveE1heCddIHx8IHtcclxuICAgICAgICAgICAgdmFsdWU6IG51bGxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBUT0RPIENhbid0IGRldGVjdCBvcGVyYXRpb24gbGlrZSBib3gubWluID0gbmV3IFZlY3RvcigpXHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pZm9ybSgnZW52aXJvbm1lbnRCb3hNaW4nLCB2YWx1ZS5taW4uYXJyYXkpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFVuaWZvcm0oJ2Vudmlyb25tZW50Qm94TWF4JywgdmFsdWUubWF4LmFycmF5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRlZmluZSgnZnJhZ21lbnQnLCAnUEFSQUxMQVhfQ09SUkVDVEVEJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVuZGVmaW5lKCdmcmFnbWVudCcsICdQQVJBTExBWF9DT1JSRUNURUQnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3RhbmRhcmRNYXRlcmlhbDtcclxuIiwiaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5cclxudmFyIF9saWJyYXJ5ID0ge307XHJcblxyXG5mdW5jdGlvbiBTaGFkZXJMaWJyYXJ5ICgpIHtcclxuICAgIHRoaXMuX3Bvb2wgPSB7fTtcclxufVxyXG5cclxuU2hhZGVyTGlicmFyeS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgdmFyIGtleSA9IG5hbWU7XHJcblxyXG4gICAgaWYgKHRoaXMuX3Bvb2xba2V5XSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb29sW2tleV07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB2YXIgc291cmNlID0gX2xpYnJhcnlbbmFtZV07XHJcbiAgICAgICAgaWYgKCFzb3VyY2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU2hhZGVyIFwiJyArIG5hbWUgKyAnXCInICsgJyBpcyBub3QgaW4gdGhlIGxpYnJhcnknKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc2hhZGVyID0gbmV3IFNoYWRlcihzb3VyY2UudmVydGV4LCBzb3VyY2UuZnJhZ21lbnQpO1xyXG4gICAgICAgIHRoaXMuX3Bvb2xba2V5XSA9IHNoYWRlcjtcclxuICAgICAgICByZXR1cm4gc2hhZGVyO1xyXG4gICAgfVxyXG59O1xyXG5cclxuU2hhZGVyTGlicmFyeS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcclxuICAgIHRoaXMuX3Bvb2wgPSB7fTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIHRlbXBsYXRlKG5hbWUsIHZlcnRleCwgZnJhZ21lbnQpIHtcclxuICAgIF9saWJyYXJ5W25hbWVdID0ge1xyXG4gICAgICAgIHZlcnRleDogdmVydGV4LFxyXG4gICAgICAgIGZyYWdtZW50OiBmcmFnbWVudFxyXG4gICAgfTtcclxufVxyXG5cclxudmFyIGRlZmF1bHRMaWJyYXJ5ID0gbmV3IFNoYWRlckxpYnJhcnkoKTtcclxuXHJcbi8qKlxyXG4gKiAjIyMgQnVpbGluIHNoYWRlcnNcclxuICogKyBjbGF5LnN0YW5kYXJkXHJcbiAqICsgY2xheS5iYXNpY1xyXG4gKiArIGNsYXkubGFtYmVydFxyXG4gKiArIGNsYXkud2lyZWZyYW1lXHJcbiAqXHJcbiAqIEBuYW1lc3BhY2UgY2xheS5zaGFkZXIubGlicmFyeVxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYSBuZXcgc2hhZGVyIGxpYnJhcnkuXHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUxpYnJhcnk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFNoYWRlckxpYnJhcnkoKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBzaGFkZXIgZnJvbSBkZWZhdWx0IGxpYnJhcnkuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5TaGFkZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5zaGFkZXIubGlicmFyeVxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqICAgICBjbGF5LnNoYWRlci5saWJyYXJ5LmdldCgnY2xheS5zdGFuZGFyZCcpXHJcbiAgICAgKi9cclxuICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBkZWZhdWx0TGlicmFyeS5nZXQuYXBwbHkoZGVmYXVsdExpYnJhcnksIGFyZ3VtZW50cyk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5zaGFkZXIubGlicmFyeVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHZlcnRleCAtIFZlcnRleCBzaGFkZXIgY29kZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBmcmFnbWVudCAtIEZyYWdtZW50IHNoYWRlciBjb2RlXHJcbiAgICAgKi9cclxuICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSxcclxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRMaWJyYXJ5LmNsZWFyKCk7XHJcbiAgICB9XHJcbn07XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5Kb2ludFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEpvaW50ID0gQmFzZS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5Kb2ludCMgKi9cclxue1xyXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL2lzc3Vlcy8xOTMjaXNzdWVjb21tZW50LTI5MjE2NTc2XHJcbiAgICAvKipcclxuICAgICAqIEpvaW50IG5hbWVcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIG5hbWU6ICcnLFxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRleCBvZiBqb2ludCBpbiB0aGUgc2tlbGV0b25cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGluZGV4OiAtMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjZW5lIG5vZGUgYXR0YWNoZWQgdG9cclxuICAgICAqIEB0eXBlIHtjbGF5Lk5vZGV9XHJcbiAgICAgKi9cclxuICAgIG5vZGU6IG51bGxcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBKb2ludDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgSm9pbnQgZnJvbSAnLi9Kb2ludCc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi9tYXRoL0JvdW5kaW5nQm94JztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi9tYXRoL01hdHJpeDQnO1xyXG5cclxuaW1wb3J0IG1hdDQgZnJvbSAnLi9nbG1hdHJpeC9tYXQ0JztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi9nbG1hdHJpeC92ZWMzJztcclxuaW1wb3J0IHF1YXQgZnJvbSAnLi9nbG1hdHJpeC9xdWF0JztcclxuXHJcblxyXG52YXIgdG1wQm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxudmFyIHRtcE1hdDQgPSBuZXcgTWF0cml4NCgpO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LlNrZWxldG9uXHJcbiAqL1xyXG52YXIgU2tlbGV0b24gPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LlNrZWxldG9uIyAqL3tcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogUmVsYXRpdmUgcm9vdCBub2RlIHRoYXQgbm90IGFmZmVjdCB0cmFuc2Zvcm0gb2Ygam9pbnQuXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICByZWxhdGl2ZVJvb3ROb2RlOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbmFtZTogJycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIGpvaW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtBcnJheS48Y2xheS5Kb2ludD59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgam9pbnRzOiBbXSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogYm91bmRpbmcgYm94IHdpdGggYm91bmQgZ2VvbWV0cnkuXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuQm91bmRpbmdCb3h9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYm91bmRpbmdCb3g6IG51bGwsXHJcblxyXG4gICAgICAgIF9jbGlwczogW10sXHJcblxyXG4gICAgICAgIC8vIE1hdHJpeCB0byBqb2ludCBzcGFjZSAocmVsYXRpdmUgdG8gcm9vdCBqb2ludClcclxuICAgICAgICBfaW52QmluZFBvc2VNYXRyaWNlc0FycmF5OiBudWxsLFxyXG5cclxuICAgICAgICAvLyBVc2Ugc3ViYXJyYXkgaW5zdGVhZCBvZiBjb3B5IGJhY2sgZWFjaCB0aW1lIGNvbXB1dGluZyBtYXRyaXhcclxuICAgICAgICAvLyBodHRwOi8vanNwZXJmLmNvbS9zdWJhcnJheS12cy1jb3B5LWZvci1hcnJheS10cmFuc2Zvcm0vNVxyXG4gICAgICAgIF9qb2ludE1hdHJpY2VzU3ViQXJyYXlzOiBbXSxcclxuXHJcbiAgICAgICAgLy8gam9pbnRNYXRyaXggKiBjdXJyZW50UG9zZU1hdHJpeFxyXG4gICAgICAgIC8vIHdvcmxkVHJhbnNmb3JtIGlzIHJlbGF0aXZlIHRvIHRoZSByb290IGJvbmVcclxuICAgICAgICAvLyBzdGlsbCBpbiBtb2RlbCBzcGFjZSBub3Qgd29ybGQgc3BhY2VcclxuICAgICAgICBfc2tpbk1hdHJpY2VzQXJyYXk6IG51bGwsXHJcblxyXG4gICAgICAgIF9za2luTWF0cmljZXNTdWJBcnJheXM6IFtdLFxyXG5cclxuICAgICAgICBfc3ViU2tpbk1hdHJpY2VzQXJyYXk6IHt9XHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuU2tlbGV0b24ucHJvdG90eXBlICovXHJcbntcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBhIHNraW5uaW5nIGNsaXAgYW5kIGNyZWF0ZSBhIG1hcCBiZXR3ZWVuIGNsaXAgYW5kIHNrZWxldG9uXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuYW5pbWF0aW9uLlNraW5uaW5nQ2xpcH0gY2xpcFxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFttYXBSdWxlXSBNYXAgYmV0d2VlbiBqb2ludCBuYW1lIGluIHNrZWxldG9uIGFuZCBqb2ludCBuYW1lIGluIGNsaXBcclxuICAgICAqL1xyXG4gICAgYWRkQ2xpcDogZnVuY3Rpb24gKGNsaXAsIG1hcFJ1bGUpIHtcclxuICAgICAgICAvLyBDbGlwIGhhdmUgYmVlbiBleGlzdHMgaW5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NsaXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9jbGlwc1tpXS5jbGlwID09PSBjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gTWFwIHRoZSBqb2ludCBpbmRleCBpbiBza2VsZXRvbiB0byBqb2ludCBwb3NlIGluZGV4IGluIGNsaXBcclxuICAgICAgICB2YXIgbWFwcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbWFwc1tpXSA9IC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBDcmVhdGUgYXZhdGFyXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGlwLnRyYWNrcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tqXTtcclxuICAgICAgICAgICAgICAgIHZhciB0cmFjayA9IGNsaXAudHJhY2tzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50TmFtZSA9IGpvaW50Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAobWFwUnVsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGpvaW50TmFtZSA9IG1hcFJ1bGVbam9pbnROYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0cmFjay5uYW1lID09PSBqb2ludE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXBzW2pdID0gaTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fY2xpcHMucHVzaCh7XHJcbiAgICAgICAgICAgIG1hcHM6IG1hcHMsXHJcbiAgICAgICAgICAgIGNsaXA6IGNsaXBcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBzLmxlbmd0aCAtIDE7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LmFuaW1hdGlvbi5Ta2lubmluZ0NsaXB9IGNsaXBcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2xpcDogZnVuY3Rpb24gKGNsaXApIHtcclxuICAgICAgICB2YXIgaWR4ID0gLTE7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jbGlwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fY2xpcHNbaV0uY2xpcCA9PT0gY2xpcCkge1xyXG4gICAgICAgICAgICAgICAgaWR4ID0gaTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZHggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NsaXBzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBhbGwgY2xpcHNcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQ2xpcHNBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9jbGlwcyA9IFtdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBjbGlwIGJ5IGluZGV4XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGluZGV4XHJcbiAgICAgKi9cclxuICAgIGdldENsaXA6IGZ1bmN0aW9uIChpbmRleCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jbGlwc1tpbmRleF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBzW2luZGV4XS5jbGlwO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldENsaXBOdW1iZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpcHMubGVuZ3RoO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBqb2ludCBtYXRyaWNlcyBmcm9tIG5vZGUgdHJhbnNmb3JtXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqL1xyXG4gICAgdXBkYXRlSm9pbnRNYXRyaWNlczogKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIG00ID0gbWF0NC5jcmVhdGUoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmpvaW50cy5sZW5ndGggKiAxNik7XHJcbiAgICAgICAgICAgIHRoaXMuX3NraW5NYXRyaWNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmpvaW50cy5sZW5ndGggKiAxNik7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgICAgIG1hdDQuY29weShtNCwgam9pbnQubm9kZS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgICAgICBtYXQ0LmludmVydChtNCwgbTQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBpICogMTY7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE2OyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXlbb2Zmc2V0ICsgal0gPSBtNFtqXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVNYXRyaWNlc1N1YkFycmF5cygpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIGJvdW5kaW5nQm94IG9mIGVhY2ggam9pbnQgYm91bmQgdG8gZ2VvbWV0cnkuXHJcbiAgICAgKiBBU1NVTUUgc2tlbGV0b24gYW5kIGdlb21ldHJ5IGpvaW50cyBhcmUgbWF0Y2hlZC5cclxuICAgICAqIEBwYXJhbSB7Y2xheS5HZW9tZXRyeX0gZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgdXBkYXRlSm9pbnRzQm91bmRpbmdCb3hlczogZnVuY3Rpb24gKGdlb21ldHJ5KSB7XHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIHZhciBwb3NpdGlvbkF0dHIgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uO1xyXG4gICAgICAgIHZhciBqb2ludEF0dHIgPSBhdHRyaWJ1dGVzLmpvaW50O1xyXG4gICAgICAgIHZhciB3ZWlnaHRBdHRyID0gYXR0cmlidXRlcy53ZWlnaHQ7XHJcblxyXG4gICAgICAgIHZhciBqb2ludHNCb3VuZGluZ0JveGVzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBqb2ludHNCb3VuZGluZ0JveGVzW2ldID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgICAgIGpvaW50c0JvdW5kaW5nQm94ZXNbaV0uX191cGRhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdnR4Sm9pbnQgPSBbXTtcclxuICAgICAgICB2YXIgdnR4UG9zID0gW107XHJcbiAgICAgICAgdmFyIHZ0eFdlaWdodCA9IFtdO1xyXG4gICAgICAgIHZhciBtYXhKb2ludElkeCA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tZXRyeS52ZXJ0ZXhDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGpvaW50QXR0ci5nZXQoaSwgdnR4Sm9pbnQpO1xyXG4gICAgICAgICAgICBwb3NpdGlvbkF0dHIuZ2V0KGksIHZ0eFBvcyk7XHJcbiAgICAgICAgICAgIHdlaWdodEF0dHIuZ2V0KGksIHZ0eFdlaWdodCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDQ7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZ0eFdlaWdodFtrXSA+IDAuMDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgam9pbnRJZHggPSB2dHhKb2ludFtrXTtcclxuICAgICAgICAgICAgICAgICAgICBtYXhKb2ludElkeCA9IE1hdGgubWF4KG1heEpvaW50SWR4LCBqb2ludElkeCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtaW4gPSBqb2ludHNCb3VuZGluZ0JveGVzW2pvaW50SWR4XS5taW4uYXJyYXk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1heCA9IGpvaW50c0JvdW5kaW5nQm94ZXNbam9pbnRJZHhdLm1heC5hcnJheTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgam9pbnRzQm91bmRpbmdCb3hlc1tqb2ludElkeF0uX191cGRhdGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbWluID0gdmVjMy5taW4obWluLCBtaW4sIHZ0eFBvcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF4ID0gdmVjMy5tYXgobWF4LCBtYXgsIHZ0eFBvcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2pvaW50c0JvdW5kaW5nQm94ZXMgPSBqb2ludHNCb3VuZGluZ0JveGVzO1xyXG5cclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcblxyXG4gICAgICAgIGlmIChtYXhKb2ludElkeCA8IHRoaXMuam9pbnRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdHZW9tZXRyeSBqb2ludHMgYW5kIHNrZWxldG9uIGpvaW50cyBkb25cXCd0IG1hdGNoJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBzZXRKb2ludE1hdHJpY2VzQXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkgPSBhcnI7XHJcbiAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGFyci5sZW5ndGgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTWF0cmljZXNTdWJBcnJheXMoKTtcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlTWF0cmljZXNTdWJBcnJheXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2pvaW50TWF0cmljZXNTdWJBcnJheXNbaV0gPSB0aGlzLl9pbnZCaW5kUG9zZU1hdHJpY2VzQXJyYXkuc3ViYXJyYXkoaSAqIDE2LCAoaSsxKSAqIDE2KTtcclxuICAgICAgICAgICAgdGhpcy5fc2tpbk1hdHJpY2VzU3ViQXJyYXlzW2ldID0gdGhpcy5fc2tpbk1hdHJpY2VzQXJyYXkuc3ViYXJyYXkoaSAqIDE2LCAoaSsxKSAqIDE2KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHNraW5uaW5nIG1hdHJpY2VzXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB0aGlzLl9zZXRQb3NlKCk7XHJcblxyXG4gICAgICAgIHZhciBqb2ludHNCb3VuZGluZ0JveGVzID0gdGhpcy5fam9pbnRzQm91bmRpbmdCb3hlcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgbWF0NC5tdWx0aXBseShcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NraW5NYXRyaWNlc1N1YkFycmF5c1tpXSxcclxuICAgICAgICAgICAgICAgIGpvaW50Lm5vZGUud29ybGRUcmFuc2Zvcm0uYXJyYXksXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9qb2ludE1hdHJpY2VzU3ViQXJyYXlzW2ldXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIHRoaXMuYm91bmRpbmdCb3gubWluLnNldChJbmZpbml0eSwgSW5maW5pdHksIEluZmluaXR5KTtcclxuICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5tYXguc2V0KC1JbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHkpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBiYm94ID0gam9pbnRzQm91bmRpbmdCb3hlc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChiYm94Ll9fdXBkYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRtcEJvdW5kaW5nQm94LmNvcHkoYmJveCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdG1wTWF0NC5hcnJheSA9IHRoaXMuX3NraW5NYXRyaWNlc1N1YkFycmF5c1tpXTtcclxuICAgICAgICAgICAgICAgICAgICB0bXBCb3VuZGluZ0JveC5hcHBseVRyYW5zZm9ybSh0bXBNYXQ0KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3VuZGluZ0JveC51bmlvbih0bXBCb3VuZGluZ0JveCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFN1YlNraW5NYXRyaWNlczogZnVuY3Rpb24gKG1lc2hJZCwgam9pbnRzKSB7XHJcbiAgICAgICAgdmFyIHN1YkFycmF5ID0gdGhpcy5fc3ViU2tpbk1hdHJpY2VzQXJyYXlbbWVzaElkXTtcclxuICAgICAgICBpZiAoIXN1YkFycmF5KSB7XHJcbiAgICAgICAgICAgIHN1YkFycmF5XHJcbiAgICAgICAgICAgICAgICA9IHRoaXMuX3N1YlNraW5NYXRyaWNlc0FycmF5W21lc2hJZF1cclxuICAgICAgICAgICAgICAgID0gbmV3IEZsb2F0MzJBcnJheShqb2ludHMubGVuZ3RoICogMTYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY3Vyc29yID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgaWR4ID0gam9pbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE2OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIHN1YkFycmF5W2N1cnNvcisrXSA9IHRoaXMuX3NraW5NYXRyaWNlc0FycmF5W2lkeCAqIDE2ICsgal07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1YkFycmF5O1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRTdWJTa2luTWF0cmljZXNUZXh0dXJlOiBmdW5jdGlvbiAobWVzaElkLCBqb2ludHMpIHtcclxuICAgICAgICB2YXIgc2tpbk1hdHJpY2VzID0gdGhpcy5nZXRTdWJTa2luTWF0cmljZXMobWVzaElkLCBqb2ludHMpO1xyXG4gICAgICAgIHZhciBzaXplO1xyXG4gICAgICAgIHZhciBudW1Kb2ludHMgPSB0aGlzLmpvaW50cy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKG51bUpvaW50cyA+IDI1Nikge1xyXG4gICAgICAgICAgICBzaXplID0gNjQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG51bUpvaW50cyA+IDY0KSB7XHJcbiAgICAgICAgICAgIHNpemUgPSAzMjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobnVtSm9pbnRzID4gMTYpIHtcclxuICAgICAgICAgICAgc2l6ZSA9IDE2O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc2l6ZSA9IDg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMuX3NraW5NYXRyaWNlc1RleHR1cmUgPSB0aGlzLl9za2luTWF0cmljZXNUZXh0dXJlIHx8IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkZMT0FULFxyXG4gICAgICAgICAgICBtaW5GaWx0ZXI6IFRleHR1cmUuTkVBUkVTVCxcclxuICAgICAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgICAgIHVzZU1pcG1hcDogZmFsc2UsXHJcbiAgICAgICAgICAgIGZsaXBZOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRleHR1cmUud2lkdGggPSBzaXplO1xyXG4gICAgICAgIHRleHR1cmUuaGVpZ2h0ID0gc2l6ZTtcclxuXHJcbiAgICAgICAgaWYgKCF0ZXh0dXJlLnBpeGVscyB8fCB0ZXh0dXJlLnBpeGVscy5sZW5ndGggIT09IHNpemUgKiBzaXplICogNCkge1xyXG4gICAgICAgICAgICB0ZXh0dXJlLnBpeGVscyA9IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZSAqIHNpemUgKiA0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGV4dHVyZS5waXhlbHMuc2V0KHNraW5NYXRyaWNlcyk7XHJcbiAgICAgICAgdGV4dHVyZS5kaXJ0eSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0U2tpbk1hdHJpY2VzVGV4dHVyZTogZnVuY3Rpb24gKCkge1xyXG5cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NraW5NYXRyaWNlc1RleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIF9zZXRQb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NsaXBzWzBdKSB7XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gdGhpcy5fY2xpcHNbMF0uY2xpcDtcclxuICAgICAgICAgICAgdmFyIG1hcHMgPSB0aGlzLl9jbGlwc1swXS5tYXBzO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGpvaW50ID0gdGhpcy5qb2ludHNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAobWFwc1tpXSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBwb3NlID0gY2xpcC50cmFja3NbbWFwc1tpXV07XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gTm90IHVwZGF0ZSBpZiB0aGVyZSBpcyBubyBkYXRhLlxyXG4gICAgICAgICAgICAgICAgLy8gUEVORElORyBJZiBzeW5jIHBvc2UucG9zaXRpb24sIHBvc2Uucm90YXRpb24sIHBvc2Uuc2NhbGVcclxuICAgICAgICAgICAgICAgIGlmIChwb3NlLmNoYW5uZWxzLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmVjMy5jb3B5KGpvaW50Lm5vZGUucG9zaXRpb24uYXJyYXksIHBvc2UucG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBvc2UuY2hhbm5lbHMucm90YXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBxdWF0LmNvcHkoam9pbnQubm9kZS5yb3RhdGlvbi5hcnJheSwgcG9zZS5yb3RhdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocG9zZS5jaGFubmVscy5zY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuY29weShqb2ludC5ub2RlLnNjYWxlLmFycmF5LCBwb3NlLnNjYWxlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBqb2ludC5ub2RlLnBvc2l0aW9uLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBqb2ludC5ub2RlLnJvdGF0aW9uLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBqb2ludC5ub2RlLnNjYWxlLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoY2xvbmVkTm9kZXNNYXApIHtcclxuICAgICAgICB2YXIgc2tlbGV0b24gPSBuZXcgU2tlbGV0b24oKTtcclxuICAgICAgICBza2VsZXRvbi5uYW1lID0gdGhpcy5uYW1lO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuZXdKb2ludCA9IG5ldyBKb2ludCgpO1xyXG4gICAgICAgICAgICB2YXIgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuICAgICAgICAgICAgbmV3Sm9pbnQubmFtZSA9IGpvaW50Lm5hbWU7XHJcbiAgICAgICAgICAgIG5ld0pvaW50LmluZGV4ID0gam9pbnQuaW5kZXg7XHJcblxyXG4gICAgICAgICAgICBpZiAoY2xvbmVkTm9kZXNNYXApIHtcclxuICAgICAgICAgICAgICAgIHZhciBuZXdOb2RlID0gY2xvbmVkTm9kZXNNYXBbam9pbnQubm9kZS5fX3VpZF9fXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIW5ld05vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdDYW5cXCd0IGZpbmQgbm9kZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG5ld0pvaW50Lm5vZGUgPSBuZXdOb2RlIHx8IGpvaW50Lm5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBuZXdKb2ludC5ub2RlID0gam9pbnQubm9kZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2tlbGV0b24uam9pbnRzLnB1c2gobmV3Sm9pbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheSkge1xyXG4gICAgICAgICAgICB2YXIgbGVuID0gdGhpcy5faW52QmluZFBvc2VNYXRyaWNlc0FycmF5Lmxlbmd0aDtcclxuICAgICAgICAgICAgc2tlbGV0b24uX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkobGVuKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgc2tlbGV0b24uX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheVtpXSA9IHRoaXMuX2ludkJpbmRQb3NlTWF0cmljZXNBcnJheVtpXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2tlbGV0b24uX3NraW5NYXRyaWNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheShsZW4pO1xyXG5cclxuICAgICAgICAgICAgc2tlbGV0b24udXBkYXRlTWF0cmljZXNTdWJBcnJheXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNrZWxldG9uLl9qb2ludHNCb3VuZGluZ0JveGUgPSAodGhpcy5fam9pbnRzQm91bmRpbmdCb3hlcyB8fCBbXSkubWFwKGZ1bmN0aW9uIChiYm94KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBiYm94LmNsb25lKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNrZWxldG9uLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gc2tlbGV0b247XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2tlbGV0b247XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LnV0aWwucmFuZFxcbmhpZ2hwIGZsb2F0IHJhbmQodmVjMiB1dikge1xcbiBjb25zdCBoaWdocCBmbG9hdCBhID0gMTIuOTg5OCwgYiA9IDc4LjIzMywgYyA9IDQzNzU4LjU0NTM7XFxuIGhpZ2hwIGZsb2F0IGR0ID0gZG90KHV2Lnh5LCB2ZWMyKGEsYikpLCBzbiA9IG1vZChkdCwgMy4xNDE1OTI2NTM1ODk3OTMpO1xcbiByZXR1cm4gZnJhY3Qoc2luKHNuKSAqIGMpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxudW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkZhY3RvciA6IDUuMDtcXG5mbG9hdCBsaWdodEF0dGVudWF0aW9uKGZsb2F0IGRpc3QsIGZsb2F0IHJhbmdlKVxcbntcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSAxLjA7XFxuIGF0dGVudWF0aW9uID0gZGlzdCpkaXN0LyhyYW5nZSpyYW5nZSsxLjApO1xcbiBmbG9hdCBhdHRfcyA9IGF0dGVudWF0aW9uRmFjdG9yO1xcbiBhdHRlbnVhdGlvbiA9IDEuMC8oYXR0ZW51YXRpb24qYXR0X3MrMS4wKTtcXG4gYXR0X3MgPSAxLjAvKGF0dF9zKzEuMCk7XFxuIGF0dGVudWF0aW9uID0gYXR0ZW51YXRpb24gLSBhdHRfcztcXG4gYXR0ZW51YXRpb24gLz0gMS4wIC0gYXR0X3M7XFxuIHJldHVybiBjbGFtcChhdHRlbnVhdGlvbiwgMC4wLCAxLjApO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG4jaWZkZWYgU1VQUE9SVF9TVEFOREFSRF9ERVJJVkFUSVZFU1xcbmZsb2F0IGVkZ2VGYWN0b3IoZmxvYXQgd2lkdGgpXFxue1xcbiB2ZWMzIGQgPSBmd2lkdGgodl9CYXJ5Y2VudHJpYyk7XFxuIHZlYzMgYTMgPSBzbW9vdGhzdGVwKHZlYzMoMC4wKSwgZCAqIHdpZHRoLCB2X0JhcnljZW50cmljKTtcXG4gcmV0dXJuIG1pbihtaW4oYTMueCwgYTMueSksIGEzLnopO1xcbn1cXG4jZWxzZVxcbmZsb2F0IGVkZ2VGYWN0b3IoZmxvYXQgd2lkdGgpXFxue1xcbiByZXR1cm4gMS4wO1xcbn1cXG4jZW5kaWZcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuZW5jb2RlX2Zsb2F0XFxudmVjNCBlbmNvZGVGbG9hdChjb25zdCBpbiBmbG9hdCBkZXB0aClcXG57XFxuIGNvbnN0IHZlYzQgYml0U2hpZnRzID0gdmVjNCgyNTYuMCoyNTYuMCoyNTYuMCwgMjU2LjAqMjU2LjAsIDI1Ni4wLCAxLjApO1xcbiBjb25zdCB2ZWM0IGJpdF9tYXNrID0gdmVjNCgwLjAsIDEuMC8yNTYuMCwgMS4wLzI1Ni4wLCAxLjAvMjU2LjApO1xcbiB2ZWM0IHJlcyA9IGZyYWN0KGRlcHRoICogYml0U2hpZnRzKTtcXG4gcmVzIC09IHJlcy54eHl6ICogYml0X21hc2s7XFxuIHJldHVybiByZXM7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG5mbG9hdCBkZWNvZGVGbG9hdChjb25zdCBpbiB2ZWM0IGNvbG9yKVxcbntcXG4gY29uc3QgdmVjNCBiaXRTaGlmdHMgPSB2ZWM0KDEuMC8oMjU2LjAqMjU2LjAqMjU2LjApLCAxLjAvKDI1Ni4wKjI1Ni4wKSwgMS4wLzI1Ni4wLCAxLjApO1xcbiByZXR1cm4gZG90KGNvbG9yLCBiaXRTaGlmdHMpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuZmxvYXRcXG5AaW1wb3J0IGNsYXkudXRpbC5lbmNvZGVfZmxvYXRcXG5AaW1wb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucmdibV9kZWNvZGVcXG52ZWMzIFJHQk1EZWNvZGUodmVjNCByZ2JtLCBmbG9hdCByYW5nZSkge1xcbiByZXR1cm4gcmFuZ2UgKiByZ2JtLnJnYiAqIHJnYm0uYTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS51dGlsLnJnYm1fZW5jb2RlXFxudmVjNCBSR0JNRW5jb2RlKHZlYzMgY29sb3IsIGZsb2F0IHJhbmdlKSB7XFxuIGlmIChkb3QoY29sb3IsIGNvbG9yKSA9PSAwLjApIHtcXG4gcmV0dXJuIHZlYzQoMC4wKTtcXG4gfVxcbiB2ZWM0IHJnYm07XFxuIGNvbG9yIC89IHJhbmdlO1xcbiByZ2JtLmEgPSBjbGFtcChtYXgobWF4KGNvbG9yLnIsIGNvbG9yLmcpLCBtYXgoY29sb3IuYiwgMWUtNikpLCAwLjAsIDEuMCk7XFxuIHJnYm0uYSA9IGNlaWwocmdibS5hICogMjU1LjApIC8gMjU1LjA7XFxuIHJnYm0ucmdiID0gY29sb3IgLyByZ2JtLmE7XFxuIHJldHVybiByZ2JtO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1fZGVjb2RlXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibV9lbmNvZGVcXG52ZWM0IGRlY29kZUhEUih2ZWM0IGNvbG9yKVxcbntcXG4jaWYgZGVmaW5lZChSR0JNX0RFQ09ERSkgfHwgZGVmaW5lZChSR0JNKVxcbiByZXR1cm4gdmVjNChSR0JNRGVjb2RlKGNvbG9yLCA4LjEyKSwgMS4wKTtcXG4jZWxzZVxcbiByZXR1cm4gY29sb3I7XFxuI2VuZGlmXFxufVxcbnZlYzQgZW5jb2RlSERSKHZlYzQgY29sb3IpXFxue1xcbiNpZiBkZWZpbmVkKFJHQk1fRU5DT0RFKSB8fCBkZWZpbmVkKFJHQk0pXFxuIHJldHVybiBSR0JNRW5jb2RlKGNvbG9yLnh5eiwgOC4xMik7XFxuI2Vsc2VcXG4gcmV0dXJuIGNvbG9yO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuc3JnYlxcbnZlYzQgc1JHQlRvTGluZWFyKGluIHZlYzQgdmFsdWUpIHtcXG4gcmV0dXJuIHZlYzQobWl4KHBvdyh2YWx1ZS5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKDAuMDUyMTMyNzAxNCksIHZlYzMoMi40KSksIHZhbHVlLnJnYiAqIDAuMDc3Mzk5MzgwOCwgdmVjMyhsZXNzVGhhbkVxdWFsKHZhbHVlLnJnYiwgdmVjMygwLjA0MDQ1KSkpKSwgdmFsdWUudyk7XFxufVxcbnZlYzQgbGluZWFyVG9zUkdCKGluIHZlYzQgdmFsdWUpIHtcXG4gcmV0dXJuIHZlYzQobWl4KHBvdyh2YWx1ZS5yZ2IsIHZlYzMoMC40MTY2NikpICogMS4wNTUgLSB2ZWMzKDAuMDU1KSwgdmFsdWUucmdiICogMTIuOTIsIHZlYzMobGVzc1RoYW5FcXVhbCh2YWx1ZS5yZ2IsIHZlYzMoMC4wMDMxMzA4KSkpKSwgdmFsdWUudyk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxuI2lmZGVmIFNLSU5OSU5HXFxuYXR0cmlidXRlIHZlYzMgd2VpZ2h0IDogV0VJR0hUO1xcbmF0dHJpYnV0ZSB2ZWM0IGpvaW50IDogSk9JTlQ7XFxuI2lmZGVmIFVTRV9TS0lOX01BVFJJQ0VTX1RFWFRVUkVcXG51bmlmb3JtIHNhbXBsZXIyRCBza2luTWF0cmljZXNUZXh0dXJlIDogaWdub3JlO1xcbnVuaWZvcm0gZmxvYXQgc2tpbk1hdHJpY2VzVGV4dHVyZVNpemU6IGlnbm9yZTtcXG5tYXQ0IGdldFNraW5NYXRyaXgoc2FtcGxlcjJEIHRleCwgZmxvYXQgaWR4KSB7XFxuIGZsb2F0IGogPSBpZHggKiA0LjA7XFxuIGZsb2F0IHggPSBtb2Qoaiwgc2tpbk1hdHJpY2VzVGV4dHVyZVNpemUpO1xcbiBmbG9hdCB5ID0gZmxvb3IoaiAvIHNraW5NYXRyaWNlc1RleHR1cmVTaXplKSArIDAuNTtcXG4gdmVjMiBzY2FsZSA9IHZlYzIoc2tpbk1hdHJpY2VzVGV4dHVyZVNpemUpO1xcbiByZXR1cm4gbWF0NChcXG4gdGV4dHVyZTJEKHRleCwgdmVjMih4ICsgMC41LCB5KSAvIHNjYWxlKSxcXG4gdGV4dHVyZTJEKHRleCwgdmVjMih4ICsgMS41LCB5KSAvIHNjYWxlKSxcXG4gdGV4dHVyZTJEKHRleCwgdmVjMih4ICsgMi41LCB5KSAvIHNjYWxlKSxcXG4gdGV4dHVyZTJEKHRleCwgdmVjMih4ICsgMy41LCB5KSAvIHNjYWxlKVxcbiApO1xcbn1cXG5tYXQ0IGdldFNraW5NYXRyaXgoZmxvYXQgaWR4KSB7XFxuIHJldHVybiBnZXRTa2luTWF0cml4KHNraW5NYXRyaWNlc1RleHR1cmUsIGlkeCk7XFxufVxcbiNlbHNlXFxudW5pZm9ybSBtYXQ0IHNraW5NYXRyaXhbSk9JTlRfQ09VTlRdIDogU0tJTl9NQVRSSVg7XFxubWF0NCBnZXRTa2luTWF0cml4KGZsb2F0IGlkeCkge1xcbiByZXR1cm4gc2tpbk1hdHJpeFtpbnQoaWR4KV07XFxufVxcbiNlbmRpZlxcbiNlbmRpZlxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG5tYXQ0IHNraW5NYXRyaXhXUyA9IGdldFNraW5NYXRyaXgoam9pbnQueCkgKiB3ZWlnaHQueDtcXG5pZiAod2VpZ2h0LnkgPiAxZS00KVxcbntcXG4gc2tpbk1hdHJpeFdTICs9IGdldFNraW5NYXRyaXgoam9pbnQueSkgKiB3ZWlnaHQueTtcXG59XFxuaWYgKHdlaWdodC56ID4gMWUtNClcXG57XFxuIHNraW5NYXRyaXhXUyArPSBnZXRTa2luTWF0cml4KGpvaW50LnopICogd2VpZ2h0Lno7XFxufVxcbmZsb2F0IHdlaWdodFcgPSAxLjAtd2VpZ2h0Lngtd2VpZ2h0Lnktd2VpZ2h0Lno7XFxuaWYgKHdlaWdodFcgPiAxZS00KVxcbntcXG4gc2tpbk1hdHJpeFdTICs9IGdldFNraW5NYXRyaXgoam9pbnQudykgKiB3ZWlnaHRXO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwucGFyYWxsYXhfY29ycmVjdFxcbnZlYzMgcGFyYWxsYXhDb3JyZWN0KGluIHZlYzMgZGlyLCBpbiB2ZWMzIHBvcywgaW4gdmVjMyBib3hNaW4sIGluIHZlYzMgYm94TWF4KSB7XFxuIHZlYzMgZmlyc3QgPSAoYm94TWF4IC0gcG9zKSAvIGRpcjtcXG4gdmVjMyBzZWNvbmQgPSAoYm94TWluIC0gcG9zKSAvIGRpcjtcXG4gdmVjMyBmdXJ0aGVyID0gbWF4KGZpcnN0LCBzZWNvbmQpO1xcbiBmbG9hdCBkaXN0ID0gbWluKGZ1cnRoZXIueCwgbWluKGZ1cnRoZXIueSwgZnVydGhlci56KSk7XFxuIHZlYzMgZml4ZWRQb3MgPSBwb3MgKyBkaXIgKiBkaXN0O1xcbiB2ZWMzIGJveENlbnRlciA9IChib3hNYXggKyBib3hNaW4pICogMC41O1xcbiByZXR1cm4gbm9ybWFsaXplKGZpeGVkUG9zIC0gYm94Q2VudGVyKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZlYzQgY2xhbXBTYW1wbGUoY29uc3QgaW4gc2FtcGxlcjJEIHRleHR1cmUsIGNvbnN0IGluIHZlYzIgY29vcmQpXFxue1xcbiNpZmRlZiBTVEVSRU9cXG4gZmxvYXQgZXllID0gc3RlcCgwLjUsIGNvb3JkLngpICogMC41O1xcbiB2ZWMyIGNvb3JkQ2xhbXBlZCA9IGNsYW1wKGNvb3JkLCB2ZWMyKGV5ZSwgMC4wKSwgdmVjMigwLjUgKyBleWUsIDEuMCkpO1xcbiNlbHNlXFxuIHZlYzIgY29vcmRDbGFtcGVkID0gY2xhbXAoY29vcmQsIHZlYzIoMC4wKSwgdmVjMigxLjApKTtcXG4jZW5kaWZcXG4gcmV0dXJuIHRleHR1cmUyRCh0ZXh0dXJlLCBjb29yZENsYW1wZWQpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnV0aWwuQUNFU1xcbnZlYzMgQUNFU1RvbmVNYXBwaW5nKHZlYzMgY29sb3IpXFxue1xcbiBjb25zdCBmbG9hdCBBID0gMi41MTtcXG4gY29uc3QgZmxvYXQgQiA9IDAuMDM7XFxuIGNvbnN0IGZsb2F0IEMgPSAyLjQzO1xcbiBjb25zdCBmbG9hdCBEID0gMC41OTtcXG4gY29uc3QgZmxvYXQgRSA9IDAuMTQ7XFxuIHJldHVybiAoY29sb3IgKiAoQSAqIGNvbG9yICsgQikpIC8gKGNvbG9yICogKEMgKiBjb2xvciArIEQpICsgRSk7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuYmFzaWMudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA6IFsxLjAsIDEuMF07XFxudW5pZm9ybSB2ZWMyIHV2T2Zmc2V0IDogWzAuMCwgMC4wXTtcXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZCA6IFRFWENPT1JEXzA7XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBiYXJ5Y2VudHJpYztcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbmF0dHJpYnV0ZSB2ZWM0IGFfQ29sb3IgOiBDT0xPUjtcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuI2VuZGlmXFxuIHZfVGV4Y29vcmQgPSB0ZXhjb29yZCAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxuIHZfQmFyeWNlbnRyaWMgPSBiYXJ5Y2VudHJpYztcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbiB2X0NvbG9yID0gYV9Db2xvcjtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5iYXNpYy5mcmFnbWVudFxcbiNkZWZpbmUgRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGRpZmZ1c2VNYXA7XFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzEuMCwgMS4wLCAxLjBdO1xcbnVuaWZvcm0gdmVjMyBlbWlzc2lvbiA6IFswLjAsIDAuMCwgMC4wXTtcXG51bmlmb3JtIGZsb2F0IGFscGhhIDogMS4wO1xcbiNpZmRlZiBBTFBIQV9URVNUXFxudW5pZm9ybSBmbG9hdCBhbHBoYUN1dG9mZjogMC45O1xcbiNlbmRpZlxcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aCA6IDAuMDtcXG51bmlmb3JtIHZlYzQgbGluZUNvbG9yIDogWzAuMCwgMC4wLCAwLjAsIDAuNl07XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuQGltcG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwuc3JnYlxcbkBpbXBvcnQgY2xheS51dGlsLkFDRVNcXG52b2lkIG1haW4oKVxcbntcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgYWxwaGEpO1xcbiNpZmRlZiBWRVJURVhfQ09MT1JcXG4gZ2xfRnJhZ0NvbG9yICo9IHZfQ29sb3I7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIGdsX0ZyYWdDb2xvciA9IHNSR0JUb0xpbmVhcihnbF9GcmFnQ29sb3IpO1xcbiNlbmRpZlxcbiNpZmRlZiBESUZGVVNFTUFQX0VOQUJMRURcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlMkQoZGlmZnVzZU1hcCwgdl9UZXhjb29yZCkpO1xcbiNpZmRlZiBTUkdCX0RFQ09ERVxcbiB0ZXhlbCA9IHNSR0JUb0xpbmVhcih0ZXhlbCk7XFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoRElGRlVTRU1BUF9BTFBIQV9BTFBIQSlcXG4gZ2xfRnJhZ0NvbG9yLmEgPSB0ZXhlbC5hO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IucmdiICo9IHRleGVsLnJnYjtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yLnJnYiArPSBlbWlzc2lvbjtcXG4gaWYoIGxpbmVXaWR0aCA+IDAuKVxcbiB7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoZ2xfRnJhZ0NvbG9yLnJnYiwgbGluZUNvbG9yLnJnYiwgKDEuMCAtIGVkZ2VGYWN0b3IobGluZVdpZHRoKSkgKiBsaW5lQ29sb3IuYSk7XFxuIH1cXG4jaWZkZWYgQUxQSEFfVEVTVFxcbiBpZiAoZ2xfRnJhZ0NvbG9yLmEgPCBhbHBoYUN1dG9mZikge1xcbiBkaXNjYXJkO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIFRPTkVNQVBQSU5HXFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBBQ0VTVG9uZU1hcHBpbmcoZ2xfRnJhZ0NvbG9yLnJnYik7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfRU5DT0RFXFxuIGdsX0ZyYWdDb2xvciA9IGxpbmVhclRvc1JHQihnbF9GcmFnQ29sb3IpO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoZ2xfRnJhZ0NvbG9yKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5sYW1iZXJ0LnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG51bmlmb3JtIG1hdDQgd29ybGRJbnZlcnNlVHJhbnNwb3NlIDogV09STERJTlZFUlNFVFJBTlNQT1NFO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdCA6IFsxLjAsIDEuMF07XFxudW5pZm9ybSB2ZWMyIHV2T2Zmc2V0IDogWzAuMCwgMC4wXTtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkIDogVEVYQ09PUkRfMDtcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XFxuYXR0cmlidXRlIHZlYzMgYmFyeWNlbnRyaWM7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbmF0dHJpYnV0ZSB2ZWM0IGFfQ29sb3IgOiBDT0xPUjtcXG52YXJ5aW5nIHZlYzQgdl9Db2xvcjtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudmFyeWluZyB2ZWMzIHZfTm9ybWFsO1xcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuIHZlYzMgc2tpbm5lZE5vcm1hbCA9IG5vcm1hbDtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuIHNraW5uZWROb3JtYWwgPSAoc2tpbk1hdHJpeFdTICogdmVjNChub3JtYWwsIDAuMCkpLnh5ejtcXG4jZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNCggc2tpbm5lZFBvc2l0aW9uLCAxLjAgKTtcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkICogdXZSZXBlYXQgKyB1dk9mZnNldDtcXG4gdl9Ob3JtYWwgPSBub3JtYWxpemUoICggd29ybGRJbnZlcnNlVHJhbnNwb3NlICogdmVjNChza2lubmVkTm9ybWFsLCAwLjApICkueHl6ICk7XFxuIHZfV29ybGRQb3NpdGlvbiA9ICggd29ybGQgKiB2ZWM0KCBza2lubmVkUG9zaXRpb24sIDEuMCkgKS54eXo7XFxuIHZfQmFyeWNlbnRyaWMgPSBiYXJ5Y2VudHJpYztcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuIHZfQ29sb3IgPSBhX0NvbG9yO1xcbiNlbmRpZlxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmxhbWJlcnQuZnJhZ21lbnRcXG4jZGVmaW5lIERJRkZVU0VNQVBfQUxQSEFfQUxQSEFcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Ob3JtYWw7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG51bmlmb3JtIHNhbXBsZXIyRCBkaWZmdXNlTWFwO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xcbnVuaWZvcm0gdmVjMyBjb2xvciA6IFsxLjAsIDEuMCwgMS4wXTtcXG51bmlmb3JtIHZlYzMgZW1pc3Npb24gOiBbMC4wLCAwLjAsIDAuMF07XFxudW5pZm9ybSBmbG9hdCBhbHBoYSA6IDEuMDtcXG4jaWZkZWYgQUxQSEFfVEVTVFxcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuOTtcXG4jZW5kaWZcXG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aCA6IDAuMDtcXG51bmlmb3JtIHZlYzQgbGluZUNvbG9yIDogWzAuMCwgMC4wLCAwLjAsIDAuNl07XFxudmFyeWluZyB2ZWMzIHZfQmFyeWNlbnRyaWM7XFxuI2lmZGVmIFZFUlRFWF9DT0xPUlxcbnZhcnlpbmcgdmVjNCB2X0NvbG9yO1xcbiNlbmRpZlxcbiNpZmRlZiBBTUJJRU5UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5hbWJpZW50X2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfU0hfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLmFtYmllbnRfc2hfbGlnaHRcXG4jZW5kaWZcXG4jaWZkZWYgUE9JTlRfTElHSFRfQ09VTlRcXG5AaW1wb3J0IGNsYXkuaGVhZGVyLnBvaW50X2xpZ2h0XFxuI2VuZGlmXFxuI2lmZGVmIERJUkVDVElPTkFMX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5kaXJlY3Rpb25hbF9saWdodFxcbiNlbmRpZlxcbiNpZmRlZiBTUE9UX0xJR0hUX0NPVU5UXFxuQGltcG9ydCBjbGF5LmhlYWRlci5zcG90X2xpZ2h0XFxuI2VuZGlmXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LnV0aWwuZWRnZV9mYWN0b3JcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnBsdWdpbi5jb21wdXRlX3NoYWRvd19tYXBcXG5AaW1wb3J0IGNsYXkudXRpbC5BQ0VTXFxudm9pZCBtYWluKClcXG57XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IsIGFscGhhKTtcXG4jaWZkZWYgVkVSVEVYX0NPTE9SXFxuIGdsX0ZyYWdDb2xvciAqPSB2X0NvbG9yO1xcbiNlbmRpZlxcbiNpZmRlZiBTUkdCX0RFQ09ERVxcbiBnbF9GcmFnQ29sb3IgPSBzUkdCVG9MaW5lYXIoZ2xfRnJhZ0NvbG9yKTtcXG4jZW5kaWZcXG4jaWZkZWYgRElGRlVTRU1BUF9FTkFCTEVEXFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCBkaWZmdXNlTWFwLCB2X1RleGNvb3JkICk7XFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIHRleC5yZ2IgPSBwb3codGV4LnJnYiwgdmVjMygyLjIpKTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yLnJnYiAqPSB0ZXgucmdiO1xcbiNpZmRlZiBESUZGVVNFTUFQX0FMUEhBX0FMUEhBXFxuIGdsX0ZyYWdDb2xvci5hICo9IHRleC5hO1xcbiNlbmRpZlxcbiNlbmRpZlxcbiB2ZWMzIGRpZmZ1c2VDb2xvciA9IHZlYzMoMC4wLCAwLjAsIDAuMCk7XFxuI2lmZGVmIEFNQklFTlRfTElHSFRfQ09VTlRcXG4gZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgQU1CSUVOVF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge1xcbiBkaWZmdXNlQ29sb3IgKz0gYW1iaWVudExpZ2h0Q29sb3JbX2lkeF9dO1xcbiB9XFxuI2VuZGlmXFxuI2lmZGVmIEFNQklFTlRfU0hfTElHSFRfQ09VTlRcXG4gZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgQU1CSUVOVF9TSF9MSUdIVF9DT1VOVDsgX2lkeF8rKylcXG4ge3tcXG4gZGlmZnVzZUNvbG9yICs9IGNhbGNBbWJpZW50U0hMaWdodChfaWR4Xywgdl9Ob3JtYWwpICogYW1iaWVudFNITGlnaHRDb2xvcltfaWR4X107XFxuIH19XFxuI2VuZGlmXFxuI2lmZGVmIFBPSU5UX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBmbG9hdCBzaGFkb3dDb250cmlic1BvaW50W1BPSU5UX0xJR0hUX0NPVU5UXTtcXG4gaWYoIHNoYWRvd0VuYWJsZWQgKVxcbiB7XFxuIGNvbXB1dGVTaGFkb3dPZlBvaW50TGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNQb2ludCk7XFxuIH1cXG4jZW5kaWZcXG4gZm9yKGludCBpID0gMDsgaSA8IFBPSU5UX0xJR0hUX0NPVU5UOyBpKyspXFxuIHtcXG4gdmVjMyBsaWdodFBvc2l0aW9uID0gcG9pbnRMaWdodFBvc2l0aW9uW2ldO1xcbiB2ZWMzIGxpZ2h0Q29sb3IgPSBwb2ludExpZ2h0Q29sb3JbaV07XFxuIGZsb2F0IHJhbmdlID0gcG9pbnRMaWdodFJhbmdlW2ldO1xcbiB2ZWMzIGxpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIHZfV29ybGRQb3NpdGlvbjtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChsaWdodERpcmVjdGlvbik7XFxuIGZsb2F0IGF0dGVudWF0aW9uID0gbGlnaHRBdHRlbnVhdGlvbihkaXN0LCByYW5nZSk7XFxuIGxpZ2h0RGlyZWN0aW9uIC89IGRpc3Q7XFxuIGZsb2F0IG5kbCA9IGRvdCggdl9Ob3JtYWwsIGxpZ2h0RGlyZWN0aW9uICk7XFxuIGZsb2F0IHNoYWRvd0NvbnRyaWIgPSAxLjA7XFxuI2lmIGRlZmluZWQoUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiBpZiggc2hhZG93RW5hYmxlZCApXFxuIHtcXG4gc2hhZG93Q29udHJpYiA9IHNoYWRvd0NvbnRyaWJzUG9pbnRbaV07XFxuIH1cXG4jZW5kaWZcXG4gZGlmZnVzZUNvbG9yICs9IGxpZ2h0Q29sb3IgKiBjbGFtcChuZGwsIDAuMCwgMS4wKSAqIGF0dGVudWF0aW9uICogc2hhZG93Q29udHJpYjtcXG4gfVxcbiNlbmRpZlxcbiNpZmRlZiBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVFxcbiNpZiBkZWZpbmVkKERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gZmxvYXQgc2hhZG93Q29udHJpYnNEaXJbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdO1xcbiBpZihzaGFkb3dFbmFibGVkKVxcbiB7XFxuIGNvbXB1dGVTaGFkb3dPZkRpcmVjdGlvbmFsTGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNEaXIpO1xcbiB9XFxuI2VuZGlmXFxuIGZvcihpbnQgaSA9IDA7IGkgPCBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVDsgaSsrKVxcbiB7XFxuIHZlYzMgbGlnaHREaXJlY3Rpb24gPSAtZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbltpXTtcXG4gdmVjMyBsaWdodENvbG9yID0gZGlyZWN0aW9uYWxMaWdodENvbG9yW2ldO1xcbiBmbG9hdCBuZGwgPSBkb3Qodl9Ob3JtYWwsIG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbikpO1xcbiBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiNpZiBkZWZpbmVkKERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gaWYoIHNoYWRvd0VuYWJsZWQgKVxcbiB7XFxuIHNoYWRvd0NvbnRyaWIgPSBzaGFkb3dDb250cmlic0RpcltpXTtcXG4gfVxcbiNlbmRpZlxcbiBkaWZmdXNlQ29sb3IgKz0gbGlnaHRDb2xvciAqIGNsYW1wKG5kbCwgMC4wLCAxLjApICogc2hhZG93Q29udHJpYjtcXG4gfVxcbiNlbmRpZlxcbiNpZmRlZiBTUE9UX0xJR0hUX0NPVU5UXFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxuIGZsb2F0IHNoYWRvd0NvbnRyaWJzU3BvdFtTUE9UX0xJR0hUX0NPVU5UXTtcXG4gaWYoc2hhZG93RW5hYmxlZClcXG4ge1xcbiBjb21wdXRlU2hhZG93T2ZTcG90TGlnaHRzKHZfV29ybGRQb3NpdGlvbiwgc2hhZG93Q29udHJpYnNTcG90KTtcXG4gfVxcbiNlbmRpZlxcbiBmb3IoaW50IGkgPSAwOyBpIDwgU1BPVF9MSUdIVF9DT1VOVDsgaSsrKVxcbiB7XFxuIHZlYzMgbGlnaHRQb3NpdGlvbiA9IC1zcG90TGlnaHRQb3NpdGlvbltpXTtcXG4gdmVjMyBzcG90TGlnaHREaXJlY3Rpb24gPSAtbm9ybWFsaXplKCBzcG90TGlnaHREaXJlY3Rpb25baV0gKTtcXG4gdmVjMyBsaWdodENvbG9yID0gc3BvdExpZ2h0Q29sb3JbaV07XFxuIGZsb2F0IHJhbmdlID0gc3BvdExpZ2h0UmFuZ2VbaV07XFxuIGZsb2F0IGEgPSBzcG90TGlnaHRVbWJyYUFuZ2xlQ29zaW5lW2ldO1xcbiBmbG9hdCBiID0gc3BvdExpZ2h0UGVudW1icmFBbmdsZUNvc2luZVtpXTtcXG4gZmxvYXQgZmFsbG9mZkZhY3RvciA9IHNwb3RMaWdodEZhbGxvZmZGYWN0b3JbaV07XFxuIHZlYzMgbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiBmbG9hdCBkaXN0ID0gbGVuZ3RoKGxpZ2h0RGlyZWN0aW9uKTtcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIHJhbmdlKTtcXG4gbGlnaHREaXJlY3Rpb24gLz0gZGlzdDtcXG4gZmxvYXQgYyA9IGRvdChzcG90TGlnaHREaXJlY3Rpb24sIGxpZ2h0RGlyZWN0aW9uKTtcXG4gZmxvYXQgZmFsbG9mZjtcXG4gZmFsbG9mZiA9IGNsYW1wKChjIC0gYSkgLyggYiAtIGEpLCAwLjAsIDEuMCk7XFxuIGZhbGxvZmYgPSBwb3coZmFsbG9mZiwgZmFsbG9mZkZhY3Rvcik7XFxuIGZsb2F0IG5kbCA9IGRvdCh2X05vcm1hbCwgbGlnaHREaXJlY3Rpb24pO1xcbiBuZGwgPSBjbGFtcChuZGwsIDAuMCwgMS4wKTtcXG4gZmxvYXQgc2hhZG93Q29udHJpYiA9IDEuMDtcXG4jaWYgZGVmaW5lZChTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4gaWYoIHNoYWRvd0VuYWJsZWQgKVxcbiB7XFxuIHNoYWRvd0NvbnRyaWIgPSBzaGFkb3dDb250cmlic1Nwb3RbaV07XFxuIH1cXG4jZW5kaWZcXG4gZGlmZnVzZUNvbG9yICs9IGxpZ2h0Q29sb3IgKiBuZGwgKiBhdHRlbnVhdGlvbiAqICgxLjAtZmFsbG9mZikgKiBzaGFkb3dDb250cmliO1xcbiB9XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gZGlmZnVzZUNvbG9yO1xcbiBnbF9GcmFnQ29sb3IucmdiICs9IGVtaXNzaW9uO1xcbiBpZihsaW5lV2lkdGggPiAwLilcXG4ge1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbWl4KGdsX0ZyYWdDb2xvci5yZ2IsIGxpbmVDb2xvci5yZ2IsICgxLjAgLSBlZGdlRmFjdG9yKGxpbmVXaWR0aCkpICogbGluZUNvbG9yLmEpO1xcbiB9XFxuI2lmZGVmIEFMUEhBX1RFU1RcXG4gaWYgKGdsX0ZyYWdDb2xvci5hIDwgYWxwaGFDdXRvZmYpIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiNlbmRpZlxcbiNpZmRlZiBUT05FTUFQUElOR1xcbiBnbF9GcmFnQ29sb3IucmdiID0gQUNFU1RvbmVNYXBwaW5nKGdsX0ZyYWdDb2xvci5yZ2IpO1xcbiNlbmRpZlxcbiNpZmRlZiBTUkdCX0VOQ09ERVxcbiBnbF9GcmFnQ29sb3IgPSBsaW5lYXJUb3NSR0IoZ2xfRnJhZ0NvbG9yKTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGdsX0ZyYWdDb2xvcik7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkud2lyZWZyYW1lLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG51bmlmb3JtIG1hdDQgd29ybGQgOiBXT1JMRDtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIGJhcnljZW50cmljO1xcbkBpbXBvcnQgY2xheS5jaHVuay5za2lubmluZ19oZWFkZXJcXG52YXJ5aW5nIHZlYzMgdl9CYXJ5Y2VudHJpYztcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBza2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4jaWZkZWYgU0tJTk5JTkdcXG4gQGltcG9ydCBjbGF5LmNodW5rLnNraW5fbWF0cml4XFxuIHNraW5uZWRQb3NpdGlvbiA9IChza2luTWF0cml4V1MgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuI2VuZGlmXFxuIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjAgKTtcXG4gdl9CYXJ5Y2VudHJpYyA9IGJhcnljZW50cmljO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LndpcmVmcmFtZS5mcmFnbWVudFxcbnVuaWZvcm0gdmVjMyBjb2xvciA6IFswLjAsIDAuMCwgMC4wXTtcXG51bmlmb3JtIGZsb2F0IGFscGhhIDogMS4wO1xcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoIDogMS4wO1xcbnZhcnlpbmcgdmVjMyB2X0JhcnljZW50cmljO1xcbkBpbXBvcnQgY2xheS51dGlsLmVkZ2VfZmFjdG9yXFxudm9pZCBtYWluKClcXG57XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBjb2xvcjtcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAoMS4wLWVkZ2VGYWN0b3IobGluZVdpZHRoKSkgKiBhbHBoYTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5za3lib3gudmVydGV4XFxuI2RlZmluZSBTSEFERVJfTkFNRSBza3lib3hcXG51bmlmb3JtIG1hdDQgd29ybGQgOiBXT1JMRDtcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2X1dvcmxkUG9zaXRpb24gPSAod29ybGQgKiB2ZWM0KHBvc2l0aW9uLCAxLjApKS54eXo7XFxuIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc2t5Ym94LmZyYWdtZW50XFxuI2RlZmluZSBQSSAzLjE0MTU5MjZcXG51bmlmb3JtIG1hdDQgdmlld0ludmVyc2UgOiBWSUVXSU5WRVJTRTtcXG4jaWZkZWYgRVFVSVJFQ1RBTkdVTEFSXFxudW5pZm9ybSBzYW1wbGVyMkQgZW52aXJvbm1lbnRNYXA7XFxuI2Vsc2VcXG51bmlmb3JtIHNhbXBsZXJDdWJlIGVudmlyb25tZW50TWFwO1xcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgbG9kOiAwLjA7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuQGltcG9ydCBjbGF5LnV0aWwuc3JnYlxcbkBpbXBvcnQgY2xheS51dGlsLkFDRVNcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBleWVQb3MgPSB2aWV3SW52ZXJzZVszXS54eXo7XFxuIHZlYzMgViA9IG5vcm1hbGl6ZSh2X1dvcmxkUG9zaXRpb24gLSBleWVQb3MpO1xcbiNpZmRlZiBFUVVJUkVDVEFOR1VMQVJcXG4gZmxvYXQgcGhpID0gYWNvcyhWLnkpO1xcbiBmbG9hdCB0aGV0YSA9IGF0YW4oLVYueCwgVi56KSArIFBJICogMC41O1xcbiB2ZWMyIHV2ID0gdmVjMih0aGV0YSAvIDIuMCAvIFBJLCBwaGkgLyBQSSk7XFxuIHZlYzQgdGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZTJEKGVudmlyb25tZW50TWFwLCBmcmFjdCh1dikpKTtcXG4jZWxzZVxcbiAjaWYgZGVmaW5lZChMT0QpIHx8IGRlZmluZWQoU1VQUE9SVF9URVhUVVJFX0xPRClcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlQ3ViZUxvZEVYVChlbnZpcm9ubWVudE1hcCwgViwgbG9kKSk7XFxuICNlbHNlXFxuIHZlYzQgdGV4ZWwgPSBkZWNvZGVIRFIodGV4dHVyZUN1YmUoZW52aXJvbm1lbnRNYXAsIFYpKTtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfREVDT0RFXFxuIHRleGVsID0gc1JHQlRvTGluZWFyKHRleGVsKTtcXG4jZW5kaWZcXG4jaWZkZWYgVE9ORU1BUFBJTkdcXG4gdGV4ZWwucmdiID0gQUNFU1RvbmVNYXBwaW5nKHRleGVsLnJnYik7XFxuI2VuZGlmXFxuI2lmZGVmIFNSR0JfRU5DT0RFXFxuIHRleGVsID0gbGluZWFyVG9zUkdCKHRleGVsKTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHZlYzQodGV4ZWwucmdiLCAxLjApKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJpbXBvcnQgbGlnaHRFc3NsIGZyb20gJy4vc291cmNlL2hlYWRlci9saWdodCc7XHJcbmltcG9ydCB1dGlsRXNzbCBmcm9tICcuL3NvdXJjZS91dGlsLmdsc2wuanMnO1xyXG5cclxuaW1wb3J0IGJhc2ljRXNzbCBmcm9tICcuL3NvdXJjZS9iYXNpYy5nbHNsLmpzJztcclxuaW1wb3J0IGxhbWJlcnRFc3NsIGZyb20gJy4vc291cmNlL2xhbWJlcnQuZ2xzbC5qcyc7XHJcbmltcG9ydCBzdGFuZGFyZEVzc2wgZnJvbSAnLi9zb3VyY2Uvc3RhbmRhcmQuZ2xzbC5qcyc7XHJcbmltcG9ydCB3aXJlZnJhbWVFc3NsIGZyb20gJy4vc291cmNlL3dpcmVmcmFtZS5nbHNsLmpzJztcclxuaW1wb3J0IHNreWJveEVzc2wgZnJvbSAnLi9zb3VyY2Uvc2t5Ym94Lmdsc2wuanMnO1xyXG5pbXBvcnQgcHJlekVzc2wgZnJvbSAnLi9zb3VyY2UvcHJlei5nbHNsLmpzJztcclxuXHJcbmltcG9ydCBsaWJyYXJ5IGZyb20gJy4vbGlicmFyeSc7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuXHJcblxyXG5TaGFkZXJbJ2ltcG9ydCddKGxpZ2h0RXNzbCk7XHJcblNoYWRlclsnaW1wb3J0J10odXRpbEVzc2wpO1xyXG5cclxuLy8gU29tZSBidWlsZCBpbiBzaGFkZXJzXHJcblNoYWRlclsnaW1wb3J0J10oYmFzaWNFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXShsYW1iZXJ0RXNzbCk7XHJcblNoYWRlclsnaW1wb3J0J10oc3RhbmRhcmRFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXSh3aXJlZnJhbWVFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXShza3lib3hFc3NsKTtcclxuU2hhZGVyWydpbXBvcnQnXShwcmV6RXNzbCk7XHJcblxyXG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LmJhc2ljJywgU2hhZGVyLnNvdXJjZSgnY2xheS5iYXNpYy52ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZSgnY2xheS5iYXNpYy5mcmFnbWVudCcpKTtcclxubGlicmFyeS50ZW1wbGF0ZSgnY2xheS5sYW1iZXJ0JywgU2hhZGVyLnNvdXJjZSgnY2xheS5sYW1iZXJ0LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LmxhbWJlcnQuZnJhZ21lbnQnKSk7XHJcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkud2lyZWZyYW1lJywgU2hhZGVyLnNvdXJjZSgnY2xheS53aXJlZnJhbWUudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkud2lyZWZyYW1lLmZyYWdtZW50JykpO1xyXG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LnNreWJveCcsIFNoYWRlci5zb3VyY2UoJ2NsYXkuc2t5Ym94LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnNreWJveC5mcmFnbWVudCcpKTtcclxubGlicmFyeS50ZW1wbGF0ZSgnY2xheS5wcmV6JywgU2hhZGVyLnNvdXJjZSgnY2xheS5wcmV6LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnByZXouZnJhZ21lbnQnKSk7XHJcbmxpYnJhcnkudGVtcGxhdGUoJ2NsYXkuc3RhbmRhcmQnLCBTaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkLnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkLmZyYWdtZW50JykpO1xyXG5saWJyYXJ5LnRlbXBsYXRlKCdjbGF5LnN0YW5kYXJkTVInLCBTaGFkZXIuc291cmNlKCdjbGF5LnN0YW5kYXJkTVIudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkuc3RhbmRhcmRNUi5mcmFnbWVudCcpKTtcclxuXHJcbi8vIFRPRE8gTXVzdCBleHBvcnQgYSBtb2R1bGUgYW5kIGJlIHVzZWQgaW4gdGhlIG90aGVyIG1vZHVsZXMuIE9yIGl0IHdpbGwgYmUgdHJlZSBzaGFrZWRcclxuZXhwb3J0IGRlZmF1bHQgbGlicmFyeTsiLCIvKipcclxuICogZ2xURiBMb2FkZXJcclxuICogU3BlY2lmaWNhdGlvbiBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvYmxvYi9tYXN0ZXIvc3BlY2lmaWNhdGlvbi9SRUFETUUubWRcclxuICpcclxuICogVE9ETyBNb3JwaCB0YXJnZXRzXHJcbiAqL1xyXG5pbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuXHJcbmltcG9ydCBTY2VuZSBmcm9tICcuLi9TY2VuZSc7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBTdGFuZGFyZE1hdGVyaWFsIGZyb20gJy4uL1N0YW5kYXJkTWF0ZXJpYWwnO1xyXG5pbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcclxuaW1wb3J0IE5vZGUgZnJvbSAnLi4vTm9kZSc7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBzaGFkZXJMaWJyYXJ5IGZyb20gJy4uL3NoYWRlci9saWJyYXJ5JztcclxuaW1wb3J0IFNrZWxldG9uIGZyb20gJy4uL1NrZWxldG9uJztcclxuaW1wb3J0IEpvaW50IGZyb20gJy4uL0pvaW50JztcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcbmltcG9ydCBPcnRob2dyYXBoaWNDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL09ydGhvZ3JhcGhpYyc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi4vY29yZS9nbGVudW0nO1xyXG5cclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5cclxuaW1wb3J0IFRyYWNrQ2xpcCBmcm9tICcuLi9hbmltYXRpb24vVHJhY2tDbGlwJztcclxuaW1wb3J0IFNhbXBsZXJUcmFjayBmcm9tICcuLi9hbmltYXRpb24vU2FtcGxlclRyYWNrJztcclxuXHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcblxyXG4vLyBJbXBvcnQgYnVpbHRpbiBzaGFkZXJcclxuaW1wb3J0ICcuLi9zaGFkZXIvYnVpbHRpbic7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuXHJcbnZhciBzZW1hbnRpY0F0dHJpYnV0ZU1hcCA9IHtcclxuICAgICdOT1JNQUwnOiAnbm9ybWFsJyxcclxuICAgICdQT1NJVElPTic6ICdwb3NpdGlvbicsXHJcbiAgICAnVEVYQ09PUkRfMCc6ICd0ZXhjb29yZDAnLFxyXG4gICAgJ1RFWENPT1JEXzEnOiAndGV4Y29vcmQxJyxcclxuICAgICdXRUlHSFRTXzAnOiAnd2VpZ2h0JyxcclxuICAgICdKT0lOVFNfMCc6ICdqb2ludCcsXHJcbiAgICAnQ09MT1JfMCc6ICdjb2xvcidcclxufTtcclxuXHJcbnZhciBBUlJBWV9DVE9SX01BUCA9IHtcclxuICAgIDUxMjA6IHZlbmRvci5JbnQ4QXJyYXksXHJcbiAgICA1MTIxOiB2ZW5kb3IuVWludDhBcnJheSxcclxuICAgIDUxMjI6IHZlbmRvci5JbnQxNkFycmF5LFxyXG4gICAgNTEyMzogdmVuZG9yLlVpbnQxNkFycmF5LFxyXG4gICAgNTEyNTogdmVuZG9yLlVpbnQzMkFycmF5LFxyXG4gICAgNTEyNjogdmVuZG9yLkZsb2F0MzJBcnJheVxyXG59O1xyXG52YXIgU0laRV9NQVAgPSB7XHJcbiAgICBTQ0FMQVI6IDEsXHJcbiAgICBWRUMyOiAyLFxyXG4gICAgVkVDMzogMyxcclxuICAgIFZFQzQ6IDQsXHJcbiAgICBNQVQyOiA0LFxyXG4gICAgTUFUMzogOSxcclxuICAgIE1BVDQ6IDE2XHJcbn07XHJcblxyXG5mdW5jdGlvbiBnZXRBY2Nlc3NvckRhdGEoanNvbiwgbGliLCBhY2Nlc3NvcklkeCwgaXNJbmRpY2VzKSB7XHJcbiAgICB2YXIgYWNjZXNzb3JJbmZvID0ganNvbi5hY2Nlc3NvcnNbYWNjZXNzb3JJZHhdO1xyXG5cclxuICAgIHZhciBidWZmZXIgPSBsaWIuYnVmZmVyVmlld3NbYWNjZXNzb3JJbmZvLmJ1ZmZlclZpZXddO1xyXG4gICAgdmFyIGJ5dGVPZmZzZXQgPSBhY2Nlc3NvckluZm8uYnl0ZU9mZnNldCB8fCAwO1xyXG4gICAgdmFyIEFycmF5Q3RvciA9IEFSUkFZX0NUT1JfTUFQW2FjY2Vzc29ySW5mby5jb21wb25lbnRUeXBlXSB8fCB2ZW5kb3IuRmxvYXQzMkFycmF5O1xyXG5cclxuICAgIHZhciBzaXplID0gU0laRV9NQVBbYWNjZXNzb3JJbmZvLnR5cGVdO1xyXG4gICAgaWYgKHNpemUgPT0gbnVsbCAmJiBpc0luZGljZXMpIHtcclxuICAgICAgICBzaXplID0gMTtcclxuICAgIH1cclxuICAgIHZhciBhcnIgPSBuZXcgQXJyYXlDdG9yKGJ1ZmZlciwgYnl0ZU9mZnNldCwgc2l6ZSAqIGFjY2Vzc29ySW5mby5jb3VudCk7XHJcblxyXG4gICAgdmFyIHF1YW50aXplRXh0ZW5zaW9uID0gYWNjZXNzb3JJbmZvLmV4dGVuc2lvbnMgJiYgYWNjZXNzb3JJbmZvLmV4dGVuc2lvbnNbJ1dFQjNEX3F1YW50aXplZF9hdHRyaWJ1dGVzJ107XHJcbiAgICBpZiAocXVhbnRpemVFeHRlbnNpb24pIHtcclxuICAgICAgICB2YXIgZGVjb2RlZEFyciA9IG5ldyB2ZW5kb3IuRmxvYXQzMkFycmF5KHNpemUgKiBhY2Nlc3NvckluZm8uY291bnQpO1xyXG4gICAgICAgIHZhciBkZWNvZGVNYXRyaXggPSBxdWFudGl6ZUV4dGVuc2lvbi5kZWNvZGVNYXRyaXg7XHJcbiAgICAgICAgdmFyIGRlY29kZU9mZnNldDtcclxuICAgICAgICB2YXIgZGVjb2RlU2NhbGU7XHJcbiAgICAgICAgdmFyIGRlY29kZU9mZnNldCA9IG5ldyBBcnJheShzaXplKTtcclxuICAgICAgICB2YXIgZGVjb2RlU2NhbGUgPSBuZXcgQXJyYXkoc2l6ZSk7XHJcbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzaXplOyBrKyspIHtcclxuICAgICAgICAgICAgZGVjb2RlT2Zmc2V0W2tdID0gZGVjb2RlTWF0cml4W3NpemUgKiAoc2l6ZSArIDEpICsga107XHJcbiAgICAgICAgICAgIGRlY29kZVNjYWxlW2tdID0gZGVjb2RlTWF0cml4W2sgKiAoc2l6ZSArIDEpICsga107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWNjZXNzb3JJbmZvLmNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzaXplOyBrKyspIHtcclxuICAgICAgICAgICAgICAgIGRlY29kZWRBcnJbaSAqIHNpemUgKyBrXSA9IGFycltpICogc2l6ZSArIGtdICogZGVjb2RlU2NhbGVba10gKyBkZWNvZGVPZmZzZXRba107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFyciA9IGRlY29kZWRBcnI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBiYXNlNjRUb0JpbmFyeShpbnB1dCwgY2hhclN0YXJ0KSB7XHJcbiAgICB2YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XHJcbiAgICB2YXIgbG9va3VwID0gbmV3IFVpbnQ4QXJyYXkoMTMwKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsb29rdXBbY2hhcnMuY2hhckNvZGVBdChpKV0gPSBpO1xyXG4gICAgfVxyXG4gICAgLy8gSWdub3JlXHJcbiAgICB2YXIgbGVuID0gaW5wdXQubGVuZ3RoIC0gY2hhclN0YXJ0O1xyXG4gICAgaWYgKGlucHV0LmNoYXJBdChsZW4gLSAxKSA9PT0gJz0nKSB7IGxlbi0tOyB9XHJcbiAgICBpZiAoaW5wdXQuY2hhckF0KGxlbiAtIDEpID09PSAnPScpIHsgbGVuLS07IH1cclxuXHJcbiAgICB2YXIgdWFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoKGxlbiAvIDQpICogMyk7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBjaGFyU3RhcnQ7IGkgPCB1YXJyYXkubGVuZ3RoOykge1xyXG4gICAgICAgIHZhciBjMSA9IGxvb2t1cFtpbnB1dC5jaGFyQ29kZUF0KGorKyldO1xyXG4gICAgICAgIHZhciBjMiA9IGxvb2t1cFtpbnB1dC5jaGFyQ29kZUF0KGorKyldO1xyXG4gICAgICAgIHZhciBjMyA9IGxvb2t1cFtpbnB1dC5jaGFyQ29kZUF0KGorKyldO1xyXG4gICAgICAgIHZhciBjNCA9IGxvb2t1cFtpbnB1dC5jaGFyQ29kZUF0KGorKyldO1xyXG5cclxuICAgICAgICB1YXJyYXlbaSsrXSA9IChjMSA8PCAyKSB8IChjMiA+PiA0KTtcclxuICAgICAgICB1YXJyYXlbaSsrXSA9ICgoYzIgJiAxNSkgPDwgNCkgfCAoYzMgPj4gMik7XHJcbiAgICAgICAgdWFycmF5W2krK10gPSAoKGMzICYgMykgPDwgNikgfCBjNDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdWFycmF5LmJ1ZmZlcjtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBjbGF5LmxvYWRlci5HTFRGLlJlc3VsdFxyXG4gKiBAcHJvcGVydHkge09iamVjdH0ganNvblxyXG4gKiBAcHJvcGVydHkge2NsYXkuU2NlbmV9IHNjZW5lXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5Ob2RlfSByb290Tm9kZVxyXG4gKiBAcHJvcGVydHkge2NsYXkuQ2FtZXJhW119IGNhbWVyYXNcclxuICogQHByb3BlcnR5IHtjbGF5LlRleHR1cmVbXX0gdGV4dHVyZXNcclxuICogQHByb3BlcnR5IHtjbGF5Lk1hdGVyaWFsW119IG1hdGVyaWFsc1xyXG4gKiBAcHJvcGVydHkge2NsYXkuU2tlbGV0b25bXX0gc2tlbGV0b25zXHJcbiAqIEBwcm9wZXJ0eSB7Y2xheS5NZXNoW119IG1lc2hlc1xyXG4gKiBAcHJvcGVydHkge2NsYXkuYW5pbWF0aW9uLlRyYWNrQ2xpcFtdfSBjbGlwc1xyXG4gKiBAcHJvcGVydHkge2NsYXkuTm9kZVtdfSBub2Rlc1xyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5sb2FkZXIuR0xURlxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEdMVEZMb2FkZXIgPSBCYXNlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkubG9hZGVyLkdMVEYjICovIHtcclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtjbGF5Lk5vZGV9XHJcbiAgICAgKi9cclxuICAgIHJvb3ROb2RlOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBSb290IHBhdGggZm9yIHVyaSBwYXJzaW5nLlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgcm9vdFBhdGg6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb290IHBhdGggZm9yIHRleHR1cmUgdXJpIHBhcnNpbmcuIERlZmF1bHRseSB1c2UgdGhlIHJvb3RQYXRoXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICB0ZXh0dXJlUm9vdFBhdGg6IG51bGwsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSb290IHBhdGggZm9yIGJ1ZmZlciB1cmkgcGFyc2luZy4gRGVmYXVsdGx5IHVzZSB0aGUgcm9vdFBhdGhcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIGJ1ZmZlclJvb3RQYXRoOiBudWxsLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hhZGVyIHVzZWQgd2hlbiBjcmVhdGluZyB0aGUgbWF0ZXJpYWxzLlxyXG4gICAgICogQHR5cGUge3N0cmluZ3xjbGF5LlNoYWRlcn1cclxuICAgICAqIEBkZWZhdWx0ICdjbGF5LnN0YW5kYXJkJ1xyXG4gICAgICovXHJcbiAgICBzaGFkZXI6ICdjbGF5LnN0YW5kYXJkJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIElmIHVzZSB7QGxpbmsgY2xheS5TdGFuZGFyZE1hdGVyaWFsfVxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgdXNlU3RhbmRhcmRNYXRlcmlhbDogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBsb2FkaW5nIHRoZSBjYW1lcmFzLlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGluY2x1ZGVDYW1lcmE6IHRydWUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBsb2FkaW5nIHRoZSBhbmltYXRpb25zLlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGluY2x1ZGVBbmltYXRpb246IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIElmIGxvYWRpbmcgdGhlIG1lc2hlc1xyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIGluY2x1ZGVNZXNoOiB0cnVlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBsb2FkaW5nIHRoZSB0ZXh0dXJlcy5cclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpbmNsdWRlVGV4dHVyZTogdHJ1ZSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIGNyb3NzT3JpZ2luOiAnJyxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9LaHJvbm9zR3JvdXAvZ2xURi9pc3N1ZXMvNjc0XHJcbiAgICAgKi9cclxuICAgIHRleHR1cmVGbGlwWTogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBjb252ZXJ0IHRleHR1cmUgdG8gcG93ZXItb2YtdHdvXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgdGV4dHVyZUNvbnZlcnRUb1BPVDogZmFsc2UsXHJcblxyXG4gICAgc2hhZGVyTGlicmFyeTogbnVsbFxyXG59LFxyXG5mdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2hhZGVyTGlicmFyeSkge1xyXG4gICAgICAgIHRoaXMuc2hhZGVyTGlicmFyeSA9IHNoYWRlckxpYnJhcnkuY3JlYXRlTGlicmFyeSgpO1xyXG4gICAgfVxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkubG9hZGVyLkdMVEYucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxyXG4gICAgICovXHJcbiAgICBsb2FkOiBmdW5jdGlvbiAodXJsKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHZhciBpc0JpbmFyeSA9IHVybC5lbmRzV2l0aCgnLmdsYicpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yb290UGF0aCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm9vdFBhdGggPSB1cmwuc2xpY2UoMCwgdXJsLmxhc3RJbmRleE9mKCcvJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmVuZG9yLnJlcXVlc3QuZ2V0KHtcclxuICAgICAgICAgICAgdXJsOiB1cmwsXHJcbiAgICAgICAgICAgIG9ucHJvZ3Jlc3M6IGZ1bmN0aW9uIChwZXJjZW50LCBsb2FkZWQsIHRvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3Byb2dyZXNzJywgcGVyY2VudCwgbG9hZGVkLCB0b3RhbCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uZXJyb3I6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ2Vycm9yJywgZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogaXNCaW5hcnkgPyAnYXJyYXlidWZmZXInIDogJ3RleHQnLFxyXG4gICAgICAgICAgICBvbmxvYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNCaW5hcnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlQmluYXJ5KGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcnNlIGdsVEYgYmluYXJ5XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBidWZmZXJcclxuICAgICAqIEByZXR1cm4ge2NsYXkubG9hZGVyLkdMVEYuUmVzdWx0fVxyXG4gICAgICovXHJcbiAgICBwYXJzZUJpbmFyeTogZnVuY3Rpb24gKGJ1ZmZlcikge1xyXG4gICAgICAgIHZhciBoZWFkZXIgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyLCAwLCA0KTtcclxuICAgICAgICBpZiAoaGVhZGVyWzBdICE9PSAweDQ2NTQ2QzY3KSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCAnSW52YWxpZCBnbFRGIGJpbmFyeSBmb3JtYXQ6IEludmFsaWQgaGVhZGVyJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGhlYWRlclswXSA8IDIpIHtcclxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdlcnJvcicsICdPbmx5IGdsVEYyLjAgaXMgc3VwcG9ydGVkLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLCAxMik7XHJcblxyXG4gICAgICAgIHZhciBqc29uO1xyXG4gICAgICAgIHZhciBidWZmZXJzID0gW107XHJcbiAgICAgICAgLy8gUmVhZCBjaHVua3NcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFWaWV3LmJ5dGVMZW5ndGg7KSB7XHJcbiAgICAgICAgICAgIHZhciBjaHVua0xlbmd0aCA9IGRhdGFWaWV3LmdldFVpbnQzMihpLCB0cnVlKTtcclxuICAgICAgICAgICAgaSArPSA0O1xyXG4gICAgICAgICAgICB2YXIgY2h1bmtUeXBlID0gZGF0YVZpZXcuZ2V0VWludDMyKGksIHRydWUpO1xyXG4gICAgICAgICAgICBpICs9IDQ7XHJcblxyXG4gICAgICAgICAgICAvLyBqc29uXHJcbiAgICAgICAgICAgIGlmIChjaHVua1R5cGUgPT09IDB4NEU0RjUzNEEpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheShidWZmZXIsIGkgKyAxMiwgY2h1bmtMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETywgZm9yIHRoZSBicm93c2VyIG5vdCBzdXBwb3J0IFRleHREZWNvZGVyLlxyXG4gICAgICAgICAgICAgICAgdmFyIGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcclxuICAgICAgICAgICAgICAgIHZhciBzdHIgPSBkZWNvZGVyLmRlY29kZShhcnIpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShzdHIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2Vycm9yJywgJ0pTT04gUGFyc2UgZXJyb3I6JyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNodW5rVHlwZSA9PT0gMHgwMDRFNDk0Mikge1xyXG4gICAgICAgICAgICAgICAgYnVmZmVycy5wdXNoKGJ1ZmZlci5zbGljZShpICsgMTIsIGkgKyAxMiArIGNodW5rTGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGkgKz0gY2h1bmtMZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghanNvbikge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ2Vycm9yJywgJ0ludmFsaWQgZ2xURiBiaW5hcnkgZm9ybWF0OiBDYW5cXCd0IGZpbmQgSlNPTi4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2UoanNvbiwgYnVmZmVycyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGpzb25cclxuICAgICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJbXX0gW2J1ZmZlcl1cclxuICAgICAqIEByZXR1cm4ge2NsYXkubG9hZGVyLkdMVEYuUmVzdWx0fVxyXG4gICAgICovXHJcbiAgICBwYXJzZTogZnVuY3Rpb24gKGpzb24sIGJ1ZmZlcnMpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIHZhciBsaWIgPSB7XHJcbiAgICAgICAgICAgIGpzb246IGpzb24sXHJcbiAgICAgICAgICAgIGJ1ZmZlcnM6IFtdLFxyXG4gICAgICAgICAgICBidWZmZXJWaWV3czogW10sXHJcbiAgICAgICAgICAgIG1hdGVyaWFsczogW10sXHJcbiAgICAgICAgICAgIHRleHR1cmVzOiBbXSxcclxuICAgICAgICAgICAgbWVzaGVzOiBbXSxcclxuICAgICAgICAgICAgam9pbnRzOiBbXSxcclxuICAgICAgICAgICAgc2tlbGV0b25zOiBbXSxcclxuICAgICAgICAgICAgY2FtZXJhczogW10sXHJcbiAgICAgICAgICAgIG5vZGVzOiBbXSxcclxuICAgICAgICAgICAgY2xpcHM6IFtdXHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyBNb3VudCBvbiB0aGUgcm9vdCBub2RlIGlmIGdpdmVuXHJcbiAgICAgICAgdmFyIHJvb3ROb2RlID0gdGhpcy5yb290Tm9kZSB8fCBuZXcgU2NlbmUoKTtcclxuXHJcbiAgICAgICAgdmFyIGxvYWRpbmcgPSAwO1xyXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrTG9hZCgpIHtcclxuICAgICAgICAgICAgbG9hZGluZy0tO1xyXG4gICAgICAgICAgICBpZiAobG9hZGluZyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgYWZ0ZXJMb2FkQnVmZmVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSWYgYWxyZWFkeSBsb2FkIGJ1ZmZlcnNcclxuICAgICAgICBpZiAoYnVmZmVycykge1xyXG4gICAgICAgICAgICBsaWIuYnVmZmVycyA9IGJ1ZmZlcnMuc2xpY2UoKTtcclxuICAgICAgICAgICAgYWZ0ZXJMb2FkQnVmZmVyKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gTG9hZCBidWZmZXJzXHJcbiAgICAgICAgICAgIHV0aWwuZWFjaChqc29uLmJ1ZmZlcnMsIGZ1bmN0aW9uIChidWZmZXJJbmZvLCBpZHgpIHtcclxuICAgICAgICAgICAgICAgIGxvYWRpbmcrKztcclxuICAgICAgICAgICAgICAgIHZhciBwYXRoID0gYnVmZmVySW5mby51cmk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2VsZi5fbG9hZEJ1ZmZlcnMocGF0aCwgZnVuY3Rpb24gKGJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpYi5idWZmZXJzW2lkeF0gPSBidWZmZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkKCk7XHJcbiAgICAgICAgICAgICAgICB9LCBjaGVja0xvYWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGdldFJlc3VsdCgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGpzb246IGpzb24sXHJcbiAgICAgICAgICAgICAgICBzY2VuZTogc2VsZi5yb290Tm9kZSA/IG51bGwgOiByb290Tm9kZSxcclxuICAgICAgICAgICAgICAgIHJvb3ROb2RlOiBzZWxmLnJvb3ROb2RlID8gcm9vdE5vZGUgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgY2FtZXJhczogbGliLmNhbWVyYXMsXHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlczogbGliLnRleHR1cmVzLFxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxzOiBsaWIubWF0ZXJpYWxzLFxyXG4gICAgICAgICAgICAgICAgc2tlbGV0b25zOiBsaWIuc2tlbGV0b25zLFxyXG4gICAgICAgICAgICAgICAgbWVzaGVzOiBsaWIuaW5zdGFuY2VkTWVzaGVzLFxyXG4gICAgICAgICAgICAgICAgY2xpcHM6IGxpYi5jbGlwcyxcclxuICAgICAgICAgICAgICAgIG5vZGVzOiBsaWIubm9kZXNcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGFmdGVyTG9hZEJ1ZmZlcihpbW1lZGlhdGVseSkge1xyXG4gICAgICAgICAgICAvLyBCdWZmZXIgbm90IGxvYWQgY29tcGxldGUuXHJcbiAgICAgICAgICAgIGlmIChsaWIuYnVmZmVycy5sZW5ndGggIT09IGpzb24uYnVmZmVycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignZXJyb3InLCAnQnVmZmVyIG5vdCBsb2FkIGNvbXBsZXRlLicpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGpzb24uYnVmZmVyVmlld3MuZm9yRWFjaChmdW5jdGlvbiAoYnVmZmVyVmlld0luZm8sIGlkeCkge1xyXG4gICAgICAgICAgICAgICAgLy8gUEVORElORyBQZXJmb3JtYW5jZVxyXG4gICAgICAgICAgICAgICAgbGliLmJ1ZmZlclZpZXdzW2lkeF0gPSBsaWIuYnVmZmVyc1tidWZmZXJWaWV3SW5mby5idWZmZXJdXHJcbiAgICAgICAgICAgICAgICAgICAgLnNsaWNlKGJ1ZmZlclZpZXdJbmZvLmJ5dGVPZmZzZXQgfHwgMCwgKGJ1ZmZlclZpZXdJbmZvLmJ5dGVPZmZzZXQgfHwgMCkgKyAoYnVmZmVyVmlld0luZm8uYnl0ZUxlbmd0aCB8fCAwKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsaWIuYnVmZmVycyA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLmluY2x1ZGVNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5pbmNsdWRlVGV4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlVGV4dHVyZXMoanNvbiwgbGliKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlTWF0ZXJpYWxzKGpzb24sIGxpYik7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZU1lc2hlcyhqc29uLCBsaWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNlbGYuX3BhcnNlTm9kZXMoanNvbiwgbGliKTtcclxuXHJcbiAgICAgICAgICAgIC8vIE9ubHkgc3VwcG9ydCBvbmUgc2NlbmUuXHJcbiAgICAgICAgICAgIGlmIChqc29uLnNjZW5lcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNjZW5lSW5mbyA9IGpzb24uc2NlbmVzW2pzb24uc2NlbmUgfHwgMF07IC8vIERlZmF1bHQgdXNlIHRoZSBmaXJzdCBzY2VuZS5cclxuICAgICAgICAgICAgICAgIGlmIChzY2VuZUluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lSW5mby5ub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGxpYi5ub2Rlc1tzY2VuZUluZm8ubm9kZXNbaV1dO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290Tm9kZS5hZGQobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VsZi5pbmNsdWRlTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VTa2lucyhqc29uLCBsaWIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VsZi5pbmNsdWRlQW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZUFuaW1hdGlvbnMoanNvbiwgbGliKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaW1tZWRpYXRlbHkpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcignc3VjY2VzcycsIGdldFJlc3VsdCgpKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdzdWNjZXNzJywgZ2V0UmVzdWx0KCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZ2V0UmVzdWx0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmluYXJ5IGZpbGUgcGF0aCByZXNvbHZlci4gVXNlciBjYW4gb3ZlcnJpZGUgaXRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXHJcbiAgICAgKi9cclxuICAgIHJlc29sdmVCdWZmZXJQYXRoOiBmdW5jdGlvbiAocGF0aCkge1xyXG4gICAgICAgIGlmIChwYXRoICYmIHBhdGgubWF0Y2goL15kYXRhOiguKj8pYmFzZTY0LC8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJvb3RQYXRoID0gdGhpcy5idWZmZXJSb290UGF0aDtcclxuICAgICAgICBpZiAocm9vdFBhdGggPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByb290UGF0aCA9IHRoaXMucm9vdFBhdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1dGlsLnJlbGF0aXZlMmFic29sdXRlKHBhdGgsIHJvb3RQYXRoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZXh0dXJlIGZpbGUgcGF0aCByZXNvbHZlci4gVXNlciBjYW4gb3ZlcnJpZGUgaXRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXHJcbiAgICAgKi9cclxuICAgIHJlc29sdmVUZXh0dXJlUGF0aDogZnVuY3Rpb24gKHBhdGgpIHtcclxuICAgICAgICBpZiAocGF0aCAmJiBwYXRoLm1hdGNoKC9eZGF0YTooLio/KWJhc2U2NCwvKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciByb290UGF0aCA9IHRoaXMudGV4dHVyZVJvb3RQYXRoO1xyXG4gICAgICAgIGlmIChyb290UGF0aCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJvb3RQYXRoID0gdGhpcy5yb290UGF0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHV0aWwucmVsYXRpdmUyYWJzb2x1dGUocGF0aCwgcm9vdFBhdGgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ1ZmZlciBsb2FkZXJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb25zdWNjZXNzXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbmVycm9yXHJcbiAgICAgKi9cclxuICAgIGxvYWRCdWZmZXI6IGZ1bmN0aW9uIChwYXRoLCBvbnN1Y2Nlc3MsIG9uZXJyb3IpIHtcclxuICAgICAgICB2ZW5kb3IucmVxdWVzdC5nZXQoe1xyXG4gICAgICAgICAgICB1cmw6IHBhdGgsXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyxcclxuICAgICAgICAgICAgb25sb2FkOiBmdW5jdGlvbiAoYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgICBvbnN1Y2Nlc3MgJiYgb25zdWNjZXNzKGJ1ZmZlcik7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uZXJyb3I6IGZ1bmN0aW9uIChidWZmZXIpIHtcclxuICAgICAgICAgICAgICAgIG9uZXJyb3IgJiYgb25lcnJvcihidWZmZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXRTaGFkZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2hhZGVyID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaGFkZXJMaWJyYXJ5LmdldCh0aGlzLnNoYWRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc2hhZGVyIGluc3RhbmNlb2YgU2hhZGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNoYWRlcjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9sb2FkQnVmZmVyczogZnVuY3Rpb24gKHBhdGgsIG9uc3VjY2Vzcywgb25lcnJvcikge1xyXG4gICAgICAgIHZhciBiYXNlNjRQcmVmaXggPSAnZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCc7XHJcbiAgICAgICAgdmFyIHN0clN0YXJ0ID0gcGF0aC5zdWJzdHIoMCwgYmFzZTY0UHJlZml4Lmxlbmd0aCk7XHJcbiAgICAgICAgaWYgKHN0clN0YXJ0ID09PSBiYXNlNjRQcmVmaXgpIHtcclxuICAgICAgICAgICAgb25zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgYmFzZTY0VG9CaW5hcnkocGF0aCwgYmFzZTY0UHJlZml4Lmxlbmd0aClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZEJ1ZmZlcihcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZUJ1ZmZlclBhdGgocGF0aCksXHJcbiAgICAgICAgICAgICAgICBvbnN1Y2Nlc3MsXHJcbiAgICAgICAgICAgICAgICBvbmVycm9yXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYvaXNzdWVzLzEwMFxyXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGL2lzc3Vlcy8xOTNcclxuICAgIF9wYXJzZVNraW5zOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSBza2VsZXRvbnMgYW5kIGpvaW50c1xyXG4gICAgICAgIHZhciBoYXZlSW52QmluZE1hdHJpY2VzID0gZmFsc2U7XHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24uc2tpbnMsIGZ1bmN0aW9uIChza2luSW5mbywgaWR4KSB7XHJcbiAgICAgICAgICAgIHZhciBza2VsZXRvbiA9IG5ldyBTa2VsZXRvbih7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBza2luSW5mby5uYW1lXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNraW5JbmZvLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5vZGVJZHggPSBza2luSW5mby5qb2ludHNbaV07XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGxpYi5ub2Rlc1tub2RlSWR4XTtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IG5ldyBKb2ludCh7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHNrZWxldG9uLmpvaW50cy5sZW5ndGhcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgc2tlbGV0b24uam9pbnRzLnB1c2goam9pbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNrZWxldG9uLnJlbGF0aXZlUm9vdE5vZGUgPSBsaWIubm9kZXNbc2tpbkluZm8uc2tlbGV0b25dIHx8IHRoaXMucm9vdE5vZGU7XHJcbiAgICAgICAgICAgIGlmIChza2luSW5mby5pbnZlcnNlQmluZE1hdHJpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBoYXZlSW52QmluZE1hdHJpY2VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHZhciBJQk1JbmZvID0ganNvbi5hY2Nlc3NvcnNbc2tpbkluZm8uaW52ZXJzZUJpbmRNYXRyaWNlc107XHJcbiAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gbGliLmJ1ZmZlclZpZXdzW0lCTUluZm8uYnVmZmVyVmlld107XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IElCTUluZm8uYnl0ZU9mZnNldCB8fCAwO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNpemUgPSBJQk1JbmZvLmNvdW50ICogMTY7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIHNpemUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHNrZWxldG9uLnNldEpvaW50TWF0cmljZXNBcnJheShhcnJheSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbi51cGRhdGVKb2ludE1hdHJpY2VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGliLnNrZWxldG9uc1tpZHhdID0gc2tlbGV0b247XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGVuYWJsZVNraW5uaW5nRm9yTWVzaChtZXNoLCBza2VsZXRvbiwgam9pbnRJbmRpY2VzKSB7XHJcbiAgICAgICAgICAgIG1lc2guc2tlbGV0b24gPSBza2VsZXRvbjtcclxuICAgICAgICAgICAgbWVzaC5qb2ludHMgPSBqb2ludEluZGljZXM7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXNrZWxldG9uLmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbi51cGRhdGVKb2ludHNCb3VuZGluZ0JveGVzKG1lc2guZ2VvbWV0cnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBnZXRKb2ludEluZGV4KGpvaW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBqb2ludC5pbmRleDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHV0aWwuZWFjaChqc29uLm5vZGVzLCBmdW5jdGlvbiAobm9kZUluZm8sIG5vZGVJZHgpIHtcclxuICAgICAgICAgICAgaWYgKG5vZGVJbmZvLnNraW4gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNraW5JZHggPSBub2RlSW5mby5za2luO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNrZWxldG9uID0gbGliLnNrZWxldG9uc1tza2luSWR4XTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGxpYi5ub2Rlc1tub2RlSWR4XTtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludEluZGljZXMgPSBza2VsZXRvbi5qb2ludHMubWFwKGdldEpvaW50SW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlU2tpbm5pbmdGb3JNZXNoKG5vZGUsIHNrZWxldG9uLCBqb2ludEluZGljZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTWVzaCBoYXZlIG11bHRpcGxlIHByaW1pdGl2ZXNcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVTa2lubmluZ0Zvck1lc2goY2hpbGRyZW5baV0sIHNrZWxldG9uLCBqb2ludEluZGljZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGFyc2VUZXh0dXJlczogZnVuY3Rpb24gKGpzb24sIGxpYikge1xyXG4gICAgICAgIHV0aWwuZWFjaChqc29uLnRleHR1cmVzLCBmdW5jdGlvbiAodGV4dHVyZUluZm8sIGlkeCl7XHJcbiAgICAgICAgICAgIC8vIHNhbXBsZXJzIGlzIG9wdGlvbmFsXHJcbiAgICAgICAgICAgIHZhciBzYW1wbGVySW5mbyA9IChqc29uLnNhbXBsZXJzICYmIGpzb24uc2FtcGxlcnNbdGV4dHVyZUluZm8uc2FtcGxlcl0pIHx8IHt9O1xyXG4gICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHt9O1xyXG4gICAgICAgICAgICBbJ3dyYXBTJywgJ3dyYXBUJywgJ21hZ0ZpbHRlcicsICdtaW5GaWx0ZXInXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBzYW1wbGVySW5mb1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc1tuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdXRpbC5kZWZhdWx0cyhwYXJhbWV0ZXJzLCB7XHJcbiAgICAgICAgICAgICAgICB3cmFwUzogVGV4dHVyZS5SRVBFQVQsXHJcbiAgICAgICAgICAgICAgICB3cmFwVDogVGV4dHVyZS5SRVBFQVQsXHJcbiAgICAgICAgICAgICAgICBmbGlwWTogdGhpcy50ZXh0dXJlRmxpcFksXHJcbiAgICAgICAgICAgICAgICBjb252ZXJ0VG9QT1Q6IHRoaXMudGV4dHVyZUNvbnZlcnRUb1BPVFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0ZXh0dXJlSW5mby50YXJnZXQgfHwgZ2xlbnVtLlRFWFRVUkVfMkQ7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXQgPSB0ZXh0dXJlSW5mby5mb3JtYXQ7XHJcbiAgICAgICAgICAgIGlmIChmb3JtYXQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycy5mb3JtYXQgPSBmb3JtYXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQgPT09IGdsZW51bS5URVhUVVJFXzJEKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQocGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2VJbmZvID0ganNvbi5pbWFnZXNbdGV4dHVyZUluZm8uc291cmNlXTtcclxuICAgICAgICAgICAgICAgIHZhciB1cmk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2VJbmZvLnVyaSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVyaSA9IHRoaXMucmVzb2x2ZVRleHR1cmVQYXRoKGltYWdlSW5mby51cmkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW1hZ2VJbmZvLmJ1ZmZlclZpZXcgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVyaSA9IFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2xpYi5idWZmZXJWaWV3c1tpbWFnZUluZm8uYnVmZmVyVmlld11dLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGltYWdlSW5mby5taW1lVHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh1cmkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLmxvYWQodXJpLCB0aGlzLmNyb3NzT3JpZ2luKTtcclxuICAgICAgICAgICAgICAgICAgICBsaWIudGV4dHVyZXNbaWR4XSA9IHRleHR1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgX0tIUkNvbW1vbk1hdGVyaWFsVG9TdGFuZGFyZDogZnVuY3Rpb24gKG1hdGVyaWFsSW5mbywgbGliKSB7XHJcbiAgICAgICAgdmFyIHVuaWZvcm1zID0ge307XHJcbiAgICAgICAgdmFyIGNvbW1vbk1hdGVyaWFsSW5mbyA9IG1hdGVyaWFsSW5mby5leHRlbnNpb25zWydLSFJfbWF0ZXJpYWxzX2NvbW1vbiddO1xyXG4gICAgICAgIHVuaWZvcm1zID0gY29tbW9uTWF0ZXJpYWxJbmZvLnZhbHVlcyB8fCB7fTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB1bmlmb3Jtcy5kaWZmdXNlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICB1bmlmb3Jtcy5kaWZmdXNlID0gbGliLnRleHR1cmVzW3VuaWZvcm1zLmRpZmZ1c2VdIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgdW5pZm9ybXMuZW1pc3Npb24gPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIHVuaWZvcm1zLmVtaXNzaW9uID0gbGliLnRleHR1cmVzW3VuaWZvcm1zLmVtaXNzaW9uXSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGVuYWJsZWRUZXh0dXJlcyA9IFtdO1xyXG4gICAgICAgIGlmICh1bmlmb3Jtc1snZGlmZnVzZSddIGluc3RhbmNlb2YgVGV4dHVyZTJEKSB7XHJcbiAgICAgICAgICAgIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdkaWZmdXNlTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBlbmFibGVkVGV4dHVyZXMucHVzaCgnbm9ybWFsTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1bmlmb3Jtc1snZW1pc3Npb24nXSBpbnN0YW5jZW9mIFRleHR1cmUyRCkge1xyXG4gICAgICAgICAgICBlbmFibGVkVGV4dHVyZXMucHVzaCgnZW1pc3NpdmVNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG1hdGVyaWFsO1xyXG4gICAgICAgIHZhciBpc1N0YW5kYXJkTWF0ZXJpYWwgPSB0aGlzLnVzZVN0YW5kYXJkTWF0ZXJpYWw7XHJcbiAgICAgICAgaWYgKGlzU3RhbmRhcmRNYXRlcmlhbCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbCA9IG5ldyBTdGFuZGFyZE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgZG91YmxlU2lkZWQ6IG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgc2hhZGVyOiB0aGlzLl9nZXRTaGFkZXIoKVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1JPVUdITkVTUycpO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9NRVRBTE5FU1MnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbEluZm8uZG91YmxlU2lkZWQpIHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnRE9VQkxFX1NJREVEJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh1bmlmb3Jtcy50cmFuc3BhcmVudCkge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZXB0aE1hc2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhUZXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGRpZmZ1c2VQcm9wID0gdW5pZm9ybXNbJ2RpZmZ1c2UnXTtcclxuICAgICAgICBpZiAoZGlmZnVzZVByb3ApIHtcclxuICAgICAgICAgICAgLy8gQ29sb3JcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGlmZnVzZVByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBkaWZmdXNlUHJvcCA9IGRpZmZ1c2VQcm9wLnNsaWNlKDAsIDMpO1xyXG4gICAgICAgICAgICAgICAgaXNTdGFuZGFyZE1hdGVyaWFsID8gKG1hdGVyaWFsLmNvbG9yID0gZGlmZnVzZVByb3ApXHJcbiAgICAgICAgICAgICAgICAgICAgOiBtYXRlcmlhbC5zZXQoJ2NvbG9yJywgZGlmZnVzZVByb3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgeyAvLyBUZXh0dXJlXHJcbiAgICAgICAgICAgICAgICBpc1N0YW5kYXJkTWF0ZXJpYWwgPyAobWF0ZXJpYWwuZGlmZnVzZU1hcCA9IGRpZmZ1c2VQcm9wKVxyXG4gICAgICAgICAgICAgICAgICAgIDogbWF0ZXJpYWwuc2V0KCdkaWZmdXNlTWFwJywgZGlmZnVzZVByb3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBlbWlzc2lvblByb3AgPSB1bmlmb3Jtc1snZW1pc3Npb24nXTtcclxuICAgICAgICBpZiAoZW1pc3Npb25Qcm9wICE9IG51bGwpIHtcclxuICAgICAgICAgICAgLy8gQ29sb3JcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW1pc3Npb25Qcm9wKSkge1xyXG4gICAgICAgICAgICAgICAgZW1pc3Npb25Qcm9wID0gZW1pc3Npb25Qcm9wLnNsaWNlKDAsIDMpO1xyXG4gICAgICAgICAgICAgICAgaXNTdGFuZGFyZE1hdGVyaWFsID8gKG1hdGVyaWFsLmVtaXNzaW9uID0gZW1pc3Npb25Qcm9wKVxyXG4gICAgICAgICAgICAgICAgICAgIDogbWF0ZXJpYWwuc2V0KCdlbWlzc2lvbicsIGVtaXNzaW9uUHJvcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7IC8vIFRleHR1cmVcclxuICAgICAgICAgICAgICAgIGlzU3RhbmRhcmRNYXRlcmlhbCA/IChtYXRlcmlhbC5lbWlzc2l2ZU1hcCA9IGVtaXNzaW9uUHJvcClcclxuICAgICAgICAgICAgICAgICAgICA6IG1hdGVyaWFsLnNldCgnZW1pc3NpdmVNYXAnLCBlbWlzc2lvblByb3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gdGV4Q29vcmRcclxuICAgICAgICAgICAgdmFyIG5vcm1hbFRleHR1cmVJbmRleCA9IG1hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlLmluZGV4O1xyXG4gICAgICAgICAgICBpZiAoaXNTdGFuZGFyZE1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5ub3JtYWxNYXAgPSBsaWIudGV4dHVyZXNbbm9ybWFsVGV4dHVyZUluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdub3JtYWxNYXAnLCBsaWIudGV4dHVyZXNbbm9ybWFsVGV4dHVyZUluZGV4XSB8fCBudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodW5pZm9ybXNbJ3NoaW5pbmVzcyddICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdmFyIGdsb3NzaW5lc3MgPSBNYXRoLmxvZyh1bmlmb3Jtc1snc2hpbmluZXNzJ10pIC8gTWF0aC5sb2coODE5Mik7XHJcbiAgICAgICAgICAgIC8vIFVuaWZvcm0gZ2xvc3NpbmVzc1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ2dsb3NzaW5lc3MnLCBnbG9zc2luZXNzKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KCdyb3VnaG5lc3MnLCAxIC0gZ2xvc3NpbmVzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ2dsb3NzaW5lc3MnLCAwLjMpO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zZXQoJ3JvdWdobmVzcycsIDAuMyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh1bmlmb3Jtc1snc3BlY3VsYXInXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnc3BlY3VsYXJDb2xvcicsIHVuaWZvcm1zWydzcGVjdWxhciddLnNsaWNlKDAsIDMpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHVuaWZvcm1zWyd0cmFuc3BhcmVuY3knXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnYWxwaGEnLCB1bmlmb3Jtc1sndHJhbnNwYXJlbmN5J10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1hdGVyaWFsO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGJyTWV0YWxsaWNSb3VnaG5lc3NUb1N0YW5kYXJkOiBmdW5jdGlvbiAobWF0ZXJpYWxJbmZvLCBtZXRhbGxpY1JvdWdobmVzc01hdEluZm8sIGxpYikge1xyXG4gICAgICAgIHZhciBhbHBoYVRlc3QgPSBtYXRlcmlhbEluZm8uYWxwaGFNb2RlID09PSAnTUFTSyc7XHJcblxyXG4gICAgICAgIHZhciBpc1N0YW5kYXJkTWF0ZXJpYWwgPSB0aGlzLnVzZVN0YW5kYXJkTWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIG1hdGVyaWFsO1xyXG4gICAgICAgIHZhciBkaWZmdXNlTWFwLCByb3VnaG5lc3NNYXAsIG1ldGFsbmVzc01hcCwgbm9ybWFsTWFwLCBlbWlzc2l2ZU1hcCwgb2NjbHVzaW9uTWFwO1xyXG4gICAgICAgIHZhciBlbmFibGVkVGV4dHVyZXMgPSBbXTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhlIHNjYWxhciBtdWx0aXBsaWVyIGFwcGxpZWQgdG8gZWFjaCBub3JtYWwgdmVjdG9yIG9mIHRoZSBub3JtYWwgdGV4dHVyZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBYWFggVGhpcyB2YWx1ZSBpcyBpZ25vcmVkIGlmIGBtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZWAgaXMgbm90IHNwZWNpZmllZC5cclxuICAgICAgICAgKi9cclxuICAgICAgICB2YXIgbm9ybWFsU2NhbGUgPSAxLjA7XHJcblxyXG4gICAgICAgIC8vIFRPRE8gdGV4Q29vcmRcclxuICAgICAgICBpZiAobWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLmJhc2VDb2xvclRleHR1cmUpIHtcclxuICAgICAgICAgICAgZGlmZnVzZU1hcCA9IGxpYi50ZXh0dXJlc1ttZXRhbGxpY1JvdWdobmVzc01hdEluZm8uYmFzZUNvbG9yVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgZGlmZnVzZU1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnZGlmZnVzZU1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLm1ldGFsbGljUm91Z2huZXNzVGV4dHVyZSkge1xyXG4gICAgICAgICAgICByb3VnaG5lc3NNYXAgPSBtZXRhbG5lc3NNYXAgPSBsaWIudGV4dHVyZXNbbWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLm1ldGFsbGljUm91Z2huZXNzVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgcm91Z2huZXNzTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdtZXRhbG5lc3NNYXAnLCAncm91Z2huZXNzTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZSkge1xyXG5cclxuICAgICAgICAgICAgbm9ybWFsTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBub3JtYWxNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ25vcm1hbE1hcCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXRlcmlhbEluZm8ubm9ybWFsVGV4dHVyZS5zY2FsZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgIG5vcm1hbFNjYWxlID0gbWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUuc2NhbGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8uZW1pc3NpdmVUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5lbWlzc2l2ZVRleHR1cmUuaW5kZXhdIHx8IG51bGw7XHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdlbWlzc2l2ZU1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLm9jY2x1c2lvblRleHR1cmUpIHtcclxuICAgICAgICAgICAgb2NjbHVzaW9uTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5vY2NsdXNpb25UZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBvY2NsdXNpb25NYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ29jY2x1c2lvbk1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYmFzZUNvbG9yID0gbWV0YWxsaWNSb3VnaG5lc3NNYXRJbmZvLmJhc2VDb2xvckZhY3RvciB8fCBbMSwgMSwgMSwgMV07XHJcblxyXG4gICAgICAgIHZhciBjb21tb25Qcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwOiBkaWZmdXNlTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIHJvdWdobmVzc01hcDogcm91Z2huZXNzTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG1ldGFsbmVzc01hcDogbWV0YWxuZXNzTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG5vcm1hbE1hcDogbm9ybWFsTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG9jY2x1c2lvbk1hcDogb2NjbHVzaW9uTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwOiBlbWlzc2l2ZU1hcCB8fCBudWxsLFxyXG4gICAgICAgICAgICBjb2xvcjogYmFzZUNvbG9yLnNsaWNlKDAsIDMpLFxyXG4gICAgICAgICAgICBhbHBoYTogYmFzZUNvbG9yWzNdLFxyXG4gICAgICAgICAgICBtZXRhbG5lc3M6IG1ldGFsbGljUm91Z2huZXNzTWF0SW5mby5tZXRhbGxpY0ZhY3RvciB8fCAwLFxyXG4gICAgICAgICAgICByb3VnaG5lc3M6IG1ldGFsbGljUm91Z2huZXNzTWF0SW5mby5yb3VnaG5lc3NGYWN0b3IgfHwgMCxcclxuICAgICAgICAgICAgZW1pc3Npb246IG1hdGVyaWFsSW5mby5lbWlzc2l2ZUZhY3RvciB8fCBbMCwgMCwgMF0sXHJcbiAgICAgICAgICAgIGVtaXNzaW9uSW50ZW5zaXR5OiAxLFxyXG4gICAgICAgICAgICBhbHBoYUN1dG9mZjogbWF0ZXJpYWxJbmZvLmFscGhhQ3V0b2ZmIHx8IDAsXHJcbiAgICAgICAgICAgIG5vcm1hbFNjYWxlOiBub3JtYWxTY2FsZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGNvbW1vblByb3BlcnRpZXMucm91Z2huZXNzTWFwKSB7XHJcbiAgICAgICAgICAgIC8vIEluIGdsVEYgbWV0YWxsaWNGYWN0b3Igd2lsbCBkbyBtdWx0aXBseSwgd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gU3RhbmRhcmRNYXRlcmlhbC5cclxuICAgICAgICAgICAgLy8gU28gc2ltcGx5IGlnbm9yZSBpdFxyXG4gICAgICAgICAgICBjb21tb25Qcm9wZXJ0aWVzLm1ldGFsbmVzcyA9IDAuNTtcclxuICAgICAgICAgICAgY29tbW9uUHJvcGVydGllcy5yb3VnaG5lc3MgPSAwLjU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc1N0YW5kYXJkTWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgU3RhbmRhcmRNYXRlcmlhbCh1dGlsLmV4dGVuZCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBtYXRlcmlhbEluZm8ubmFtZSxcclxuICAgICAgICAgICAgICAgIGFscGhhVGVzdDogYWxwaGFUZXN0LFxyXG4gICAgICAgICAgICAgICAgZG91YmxlU2lkZWQ6IG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZCxcclxuICAgICAgICAgICAgICAgIC8vIEcgY2hhbm5lbFxyXG4gICAgICAgICAgICAgICAgcm91Z2huZXNzQ2hhbm5lbDogMSxcclxuICAgICAgICAgICAgICAgIC8vIEIgQ2hhbm5lbFxyXG4gICAgICAgICAgICAgICAgbWV0YWxuZXNzQ2hhbm5lbDogMlxyXG4gICAgICAgICAgICB9LCBjb21tb25Qcm9wZXJ0aWVzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogbWF0ZXJpYWxJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBzaGFkZXI6IHRoaXMuX2dldFNoYWRlcigpXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfUk9VR0hORVNTJyk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX01FVEFMTkVTUycpO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JPVUdITkVTU19DSEFOTkVMJywgMSk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnTUVUQUxORVNTX0NIQU5ORUwnLCAyKTtcclxuXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnRElGRlVTRU1BUF9BTFBIQV9BTFBIQScpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFscGhhVGVzdCkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdBTFBIQV9URVNUJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5kb3VibGVTaWRlZCkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2V0KGNvbW1vblByb3BlcnRpZXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5hbHBoYU1vZGUgPT09ICdCTEVORCcpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhNYXNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlcHRoVGVzdCA9IHRydWU7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcclxuICAgIH0sXHJcblxyXG4gICAgX3BiclNwZWN1bGFyR2xvc3NpbmVzc1RvU3RhbmRhcmQ6IGZ1bmN0aW9uIChtYXRlcmlhbEluZm8sIHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8sIGxpYikge1xyXG4gICAgICAgIHZhciBhbHBoYVRlc3QgPSBtYXRlcmlhbEluZm8uYWxwaGFNb2RlID09PSAnTUFTSyc7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnVzZVN0YW5kYXJkTWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU3RhbmRhcmRNYXRlcmlhbCBkb2VzblxcJ3Qgc3VwcG9ydCBzcGVjdWxhciBnbG9zc2luZXNzIHdvcmtmbG93IHlldCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG1hdGVyaWFsO1xyXG4gICAgICAgIHZhciBkaWZmdXNlTWFwLCBnbG9zc2luZXNzTWFwLCBzcGVjdWxhck1hcCwgbm9ybWFsTWFwLCBlbWlzc2l2ZU1hcCwgb2NjbHVzaW9uTWFwO1xyXG4gICAgICAgIHZhciBlbmFibGVkVGV4dHVyZXMgPSBbXTtcclxuICAgICAgICAvLyBUT0RPIHRleENvb3JkXHJcbiAgICAgICAgaWYgKHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uZGlmZnVzZVRleHR1cmUpIHtcclxuICAgICAgICAgICAgZGlmZnVzZU1hcCA9IGxpYi50ZXh0dXJlc1tzcGVjdWxhckdsb3NzaW5lc3NNYXRJbmZvLmRpZmZ1c2VUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdkaWZmdXNlTWFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzcGVjdWxhckdsb3NzaW5lc3NNYXRJbmZvLnNwZWN1bGFyR2xvc3NpbmVzc1RleHR1cmUpIHtcclxuICAgICAgICAgICAgZ2xvc3NpbmVzc01hcCA9IHNwZWN1bGFyTWFwID0gbGliLnRleHR1cmVzW3NwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uc3BlY3VsYXJHbG9zc2luZXNzVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgZ2xvc3NpbmVzc01hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnc3BlY3VsYXJNYXAnLCAnZ2xvc3NpbmVzc01hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLm5vcm1hbFRleHR1cmUpIHtcclxuICAgICAgICAgICAgbm9ybWFsTWFwID0gbGliLnRleHR1cmVzW21hdGVyaWFsSW5mby5ub3JtYWxUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBub3JtYWxNYXAgJiYgZW5hYmxlZFRleHR1cmVzLnB1c2goJ25vcm1hbE1hcCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF0ZXJpYWxJbmZvLmVtaXNzaXZlVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBlbWlzc2l2ZU1hcCA9IGxpYi50ZXh0dXJlc1ttYXRlcmlhbEluZm8uZW1pc3NpdmVUZXh0dXJlLmluZGV4XSB8fCBudWxsO1xyXG4gICAgICAgICAgICBlbWlzc2l2ZU1hcCAmJiBlbmFibGVkVGV4dHVyZXMucHVzaCgnZW1pc3NpdmVNYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5vY2NsdXNpb25UZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIG9jY2x1c2lvbk1hcCA9IGxpYi50ZXh0dXJlc1ttYXRlcmlhbEluZm8ub2NjbHVzaW9uVGV4dHVyZS5pbmRleF0gfHwgbnVsbDtcclxuICAgICAgICAgICAgb2NjbHVzaW9uTWFwICYmIGVuYWJsZWRUZXh0dXJlcy5wdXNoKCdvY2NsdXNpb25NYXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRpZmZ1c2VDb2xvciA9IHNwZWN1bGFyR2xvc3NpbmVzc01hdEluZm8uZGlmZnVzZUZhY3RvciB8fCBbMSwgMSwgMSwgMV07XHJcblxyXG4gICAgICAgIHZhciBjb21tb25Qcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICBkaWZmdXNlTWFwOiBkaWZmdXNlTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGdsb3NzaW5lc3NNYXA6IGdsb3NzaW5lc3NNYXAgfHwgbnVsbCxcclxuICAgICAgICAgICAgc3BlY3VsYXJNYXA6IHNwZWN1bGFyTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG5vcm1hbE1hcDogbm9ybWFsTWFwIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGVtaXNzaXZlTWFwOiBlbWlzc2l2ZU1hcCB8fCBudWxsLFxyXG4gICAgICAgICAgICBvY2NsdXNpb25NYXA6IG9jY2x1c2lvbk1hcCB8fCBudWxsLFxyXG4gICAgICAgICAgICBjb2xvcjogZGlmZnVzZUNvbG9yLnNsaWNlKDAsIDMpLFxyXG4gICAgICAgICAgICBhbHBoYTogZGlmZnVzZUNvbG9yWzNdLFxyXG4gICAgICAgICAgICBzcGVjdWxhckNvbG9yOiBzcGVjdWxhckdsb3NzaW5lc3NNYXRJbmZvLnNwZWN1bGFyRmFjdG9yIHx8IFsxLCAxLCAxXSxcclxuICAgICAgICAgICAgZ2xvc3NpbmVzczogc3BlY3VsYXJHbG9zc2luZXNzTWF0SW5mby5nbG9zc2luZXNzRmFjdG9yIHx8IDAsXHJcbiAgICAgICAgICAgIGVtaXNzaW9uOiBtYXRlcmlhbEluZm8uZW1pc3NpdmVGYWN0b3IgfHwgWzAsIDAsIDBdLFxyXG4gICAgICAgICAgICBlbWlzc2lvbkludGVuc2l0eTogMSxcclxuICAgICAgICAgICAgYWxwaGFDdXRvZmY6IG1hdGVyaWFsSW5mby5hbHBoYUN1dG9mZiA9PSBudWxsID8gMC45IDogbWF0ZXJpYWxJbmZvLmFscGhhQ3V0b2ZmXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoY29tbW9uUHJvcGVydGllcy5nbG9zc2luZXNzTWFwKSB7XHJcbiAgICAgICAgICAgIC8vIElnbm9yZSBzcGVjdWxhckZhY3RvclxyXG4gICAgICAgICAgICBjb21tb25Qcm9wZXJ0aWVzLmdsb3NzaW5lc3MgPSAwLjU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb21tb25Qcm9wZXJ0aWVzLnNwZWN1bGFyTWFwKSB7XHJcbiAgICAgICAgICAgIC8vIElnbm9yZSBzcGVjdWxhckZhY3RvclxyXG4gICAgICAgICAgICBjb21tb25Qcm9wZXJ0aWVzLnNwZWN1bGFyQ29sb3IgPSBbMSwgMSwgMV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIG5hbWU6IG1hdGVyaWFsSW5mby5uYW1lLFxyXG4gICAgICAgICAgICBzaGFkZXI6IHRoaXMuX2dldFNoYWRlcigpXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnR0xPU1NJTkVTU19DSEFOTkVMJywgMyk7XHJcbiAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdESUZGVVNFTUFQX0FMUEhBX0FMUEhBJyk7XHJcblxyXG4gICAgICAgIGlmIChhbHBoYVRlc3QpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdBTFBIQV9URVNUJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXRlcmlhbEluZm8uZG91YmxlU2lkZWQpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1hdGVyaWFsLnNldChjb21tb25Qcm9wZXJ0aWVzKTtcclxuXHJcbiAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5hbHBoYU1vZGUgPT09ICdCTEVORCcpIHtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGVwdGhNYXNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmRlcHRoVGVzdCA9IHRydWU7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtYXRlcmlhbDtcclxuICAgIH0sXHJcblxyXG4gICAgX3BhcnNlTWF0ZXJpYWxzOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24ubWF0ZXJpYWxzLCBmdW5jdGlvbiAobWF0ZXJpYWxJbmZvLCBpZHgpIHtcclxuICAgICAgICAgICAgaWYgKG1hdGVyaWFsSW5mby5leHRlbnNpb25zICYmIG1hdGVyaWFsSW5mby5leHRlbnNpb25zWydLSFJfbWF0ZXJpYWxzX2NvbW1vbiddKSB7XHJcbiAgICAgICAgICAgICAgICBsaWIubWF0ZXJpYWxzW2lkeF0gPSB0aGlzLl9LSFJDb21tb25NYXRlcmlhbFRvU3RhbmRhcmQobWF0ZXJpYWxJbmZvLCBsaWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGVyaWFsSW5mby5leHRlbnNpb25zICYmIG1hdGVyaWFsSW5mby5leHRlbnNpb25zWydLSFJfbWF0ZXJpYWxzX3BiclNwZWN1bGFyR2xvc3NpbmVzcyddKSB7XHJcbiAgICAgICAgICAgICAgICBsaWIubWF0ZXJpYWxzW2lkeF0gPSB0aGlzLl9wYnJTcGVjdWxhckdsb3NzaW5lc3NUb1N0YW5kYXJkKG1hdGVyaWFsSW5mbywgbWF0ZXJpYWxJbmZvLmV4dGVuc2lvbnNbJ0tIUl9tYXRlcmlhbHNfcGJyU3BlY3VsYXJHbG9zc2luZXNzJ10sIGxpYik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsaWIubWF0ZXJpYWxzW2lkeF0gPSB0aGlzLl9wYnJNZXRhbGxpY1JvdWdobmVzc1RvU3RhbmRhcmQobWF0ZXJpYWxJbmZvLCBtYXRlcmlhbEluZm8ucGJyTWV0YWxsaWNSb3VnaG5lc3MgfHwge30sIGxpYik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3BhcnNlTWVzaGVzOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICB1dGlsLmVhY2goanNvbi5tZXNoZXMsIGZ1bmN0aW9uIChtZXNoSW5mbywgaWR4KSB7XHJcbiAgICAgICAgICAgIGxpYi5tZXNoZXNbaWR4XSA9IFtdO1xyXG4gICAgICAgICAgICAvLyBHZW9tZXRyeVxyXG4gICAgICAgICAgICBmb3IgKHZhciBwcCA9IDA7IHBwIDwgbWVzaEluZm8ucHJpbWl0aXZlcy5sZW5ndGg7IHBwKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBwcmltaXRpdmVJbmZvID0gbWVzaEluZm8ucHJpbWl0aXZlc1twcF07XHJcbiAgICAgICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe1xyXG4gICAgICAgICAgICAgICAgICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFBFTkRJR05cclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBtZXNoSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94OiBuZXcgQm91bmRpbmdCb3goKVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAvLyBQYXJzZSBhdHRyaWJ1dGVzXHJcbiAgICAgICAgICAgICAgICB2YXIgc2VtYW50aWNzID0gT2JqZWN0LmtleXMocHJpbWl0aXZlSW5mby5hdHRyaWJ1dGVzKTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHNzID0gMDsgc3MgPCBzZW1hbnRpY3MubGVuZ3RoOyBzcysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbWFudGljID0gc2VtYW50aWNzW3NzXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYWNjZXNzb3JJZHggPSBwcmltaXRpdmVJbmZvLmF0dHJpYnV0ZXNbc2VtYW50aWNdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVJbmZvID0ganNvbi5hY2Nlc3NvcnNbYWNjZXNzb3JJZHhdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gc2VtYW50aWNBdHRyaWJ1dGVNYXBbc2VtYW50aWNdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYXR0cmlidXRlTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBTSVpFX01BUFthdHRyaWJ1dGVJbmZvLnR5cGVdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVBcnJheSA9IGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIGFjY2Vzc29ySWR4KTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBXZWJHTCBhdHRyaWJ1dGUgYnVmZmVyIG5vdCBzdXBwb3J0IHVpbnQzMi5cclxuICAgICAgICAgICAgICAgICAgICAvLyBEaXJlY3QgdXNlIEZsb2F0MzJBcnJheSBtYXkgYWxzbyBoYXZlIGlzc3VlLlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVBcnJheSBpbnN0YW5jZW9mIHZlbmRvci5VaW50MzJBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYXR0cmlidXRlQXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VtYW50aWMgPT09ICdXRUlHSFRTXzAnICYmIHNpemUgPT09IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2VpZ2h0IGRhdGEgaW4gUVRFSyBoYXMgb25seSAzIGNvbXBvbmVudCwgdGhlIGxhc3QgY29tcG9uZW50IGNhbiBiZSBldmFsdWF0ZWQgc2luY2UgaXQgaXMgbm9ybWFsaXplZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2VpZ2h0QXJyYXkgPSBuZXcgYXR0cmlidXRlQXJyYXkuY29uc3RydWN0b3IoYXR0cmlidXRlSW5mby5jb3VudCAqIDMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZUluZm8uY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk0ID0gaSAqIDQsIGkzID0gaSAqIDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdzEgPSBhdHRyaWJ1dGVBcnJheVtpNF0sIHcyID0gYXR0cmlidXRlQXJyYXlbaTQgKyAxXSwgdzMgPSBhdHRyaWJ1dGVBcnJheVtpNCArIDJdLCB3NCA9IGF0dHJpYnV0ZUFycmF5W2k0ICsgM107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd1N1bSA9IHcxICsgdzIgKyB3MyArIHc0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0QXJyYXlbaTNdID0gdzEgLyB3U3VtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0QXJyYXlbaTMgKyAxXSA9IHcyIC8gd1N1bTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodEFycmF5W2kzICsgMl0gPSB3MyAvIHdTdW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXS52YWx1ZSA9IHdlaWdodEFycmF5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzZW1hbnRpYyA9PT0gJ0NPTE9SXzAnICYmIHNpemUgPT09IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yQXJyYXkgPSBuZXcgYXR0cmlidXRlQXJyYXkuY29uc3RydWN0b3IoYXR0cmlidXRlSW5mby5jb3VudCAqIDQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZUluZm8uY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk0ID0gaSAqIDQsIGkzID0gaSAqIDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckFycmF5W2k0XSA9IGF0dHJpYnV0ZUFycmF5W2kzXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yQXJyYXlbaTQgKyAxXSA9IGF0dHJpYnV0ZUFycmF5W2kzICsgMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckFycmF5W2k0ICsgMl0gPSBhdHRyaWJ1dGVBcnJheVtpMyArIDJdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JBcnJheVtpNCArIDNdID0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdLnZhbHVlID0gY29sb3JBcnJheTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0udmFsdWUgPSBhdHRyaWJ1dGVBcnJheTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVUeXBlID0gJ2Zsb2F0JztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlQXJyYXkgaW5zdGFuY2VvZiB2ZW5kb3IuVWludDE2QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9ICd1c2hvcnQnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVBcnJheSBpbnN0YW5jZW9mIHZlbmRvci5JbnQxNkFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUgPSAnc2hvcnQnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVBcnJheSBpbnN0YW5jZW9mIHZlbmRvci5VaW50OEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVR5cGUgPSAndWJ5dGUnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVBcnJheSBpbnN0YW5jZW9mIHZlbmRvci5JbnQ4QXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVHlwZSA9ICdieXRlJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXS50eXBlID0gYXR0cmlidXRlVHlwZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbWFudGljID09PSAnUE9TSVRJT04nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJvdW5kaW5nIEJveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWluID0gYXR0cmlidXRlSW5mby5taW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXggPSBhdHRyaWJ1dGVJbmZvLm1heDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1pbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuYm91bmRpbmdCb3gubWluLnNldChtaW5bMF0sIG1pblsxXSwgbWluWzJdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5ib3VuZGluZ0JveC5tYXguc2V0KG1heFswXSwgbWF4WzFdLCBtYXhbMl0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIFBhcnNlIGluZGljZXNcclxuICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVJbmZvLmluZGljZXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBnZXRBY2Nlc3NvckRhdGEoanNvbiwgbGliLCBwcmltaXRpdmVJbmZvLmluZGljZXMsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChnZW9tZXRyeS52ZXJ0ZXhDb3VudCA8PSAweGZmZmYgJiYgZ2VvbWV0cnkuaW5kaWNlcyBpbnN0YW5jZW9mIHZlbmRvci5VaW50MzJBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5pbmRpY2VzID0gbmV3IHZlbmRvci5VaW50MTZBcnJheShnZW9tZXRyeS5pbmRpY2VzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZ2VvbWV0cnkuaW5kaWNlcyBpbnN0YW5jZW9mIHZlbmRvci5VaW50OEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgdmVuZG9yLlVpbnQxNkFycmF5KGdlb21ldHJ5LmluZGljZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBsaWIubWF0ZXJpYWxzW3ByaW1pdGl2ZUluZm8ubWF0ZXJpYWxdO1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsSW5mbyA9IChqc29uLm1hdGVyaWFscyB8fCBbXSlbcHJpbWl0aXZlSW5mby5tYXRlcmlhbF07XHJcbiAgICAgICAgICAgICAgICAvLyBVc2UgZGVmYXVsdCBtYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyOiBzZWxmLl9nZXRTaGFkZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIG1lc2ggPSBuZXcgTWVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IGdlb21ldHJ5LFxyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBtYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgICAgICBtb2RlOiBbTWVzaC5QT0lOVFMsIE1lc2guTElORVMsIE1lc2guTElORV9MT09QLCBNZXNoLkxJTkVfU1RSSVAsIE1lc2guVFJJQU5HTEVTLCBNZXNoLlRSSUFOR0xFX1NUUklQLCBNZXNoLlRSSUFOR0xFX0ZBTl1bcHJpbWl0aXZlSW5mby5tb2RlXSB8fCBNZXNoLlRSSUFOR0xFUyxcclxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVHQnVmZmVyOiBtYXRlcmlhbC50cmFuc3BhcmVudFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWxJbmZvICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNoLmN1bGxpbmcgPSAhbWF0ZXJpYWxJbmZvLmRvdWJsZVNpZGVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFtZXNoLmdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzaC5nZW9tZXRyeS5nZW5lcmF0ZVZlcnRleE5vcm1hbHMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICgoKG1hdGVyaWFsIGluc3RhbmNlb2YgU3RhbmRhcmRNYXRlcmlhbCkgJiYgbWF0ZXJpYWwubm9ybWFsTWFwKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IChtYXRlcmlhbC5pc1RleHR1cmVFbmFibGVkKCdub3JtYWxNYXAnKSlcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbWVzaC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRhbmdlbnQudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5nZW9tZXRyeS5nZW5lcmF0ZVRhbmdlbnRzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG1lc2guZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuZGVmaW5lKCdWRVJURVhfQ09MT1InKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBtZXNoLm5hbWUgPSBHTFRGTG9hZGVyLmdlbmVyYXRlTWVzaE5hbWUoanNvbi5tZXNoZXMsIGlkeCwgcHApO1xyXG5cclxuICAgICAgICAgICAgICAgIGxpYi5tZXNoZXNbaWR4XS5wdXNoKG1lc2gpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9pbnN0YW5jZUNhbWVyYTogZnVuY3Rpb24gKGpzb24sIG5vZGVJbmZvKSB7XHJcbiAgICAgICAgdmFyIGNhbWVyYUluZm8gPSBqc29uLmNhbWVyYXNbbm9kZUluZm8uY2FtZXJhXTtcclxuXHJcbiAgICAgICAgaWYgKGNhbWVyYUluZm8udHlwZSA9PT0gJ3BlcnNwZWN0aXZlJykge1xyXG4gICAgICAgICAgICB2YXIgcGVyc3BlY3RpdmVJbmZvID0gY2FtZXJhSW5mby5wZXJzcGVjdGl2ZSB8fCB7fTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBub2RlSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgYXNwZWN0OiBwZXJzcGVjdGl2ZUluZm8uYXNwZWN0UmF0aW8sXHJcbiAgICAgICAgICAgICAgICBmb3Y6IHBlcnNwZWN0aXZlSW5mby55Zm92IC8gTWF0aC5QSSAqIDE4MCxcclxuICAgICAgICAgICAgICAgIGZhcjogcGVyc3BlY3RpdmVJbmZvLnpmYXIsXHJcbiAgICAgICAgICAgICAgICBuZWFyOiBwZXJzcGVjdGl2ZUluZm8uem5lYXJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgb3J0aG9ncmFwaGljSW5mbyA9IGNhbWVyYUluZm8ub3J0aG9ncmFwaGljIHx8IHt9O1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9ydGhvZ3JhcGhpY0NhbWVyYSh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBub2RlSW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdG9wOiBvcnRob2dyYXBoaWNJbmZvLnltYWcsXHJcbiAgICAgICAgICAgICAgICByaWdodDogb3J0aG9ncmFwaGljSW5mby54bWFnLFxyXG4gICAgICAgICAgICAgICAgbGVmdDogLW9ydGhvZ3JhcGhpY0luZm8ueG1hZyxcclxuICAgICAgICAgICAgICAgIGJvdHRvbTogLW9ydGhvZ3JhcGhpY0luZm8ueW1hZyxcclxuICAgICAgICAgICAgICAgIG5lYXI6IG9ydGhvZ3JhcGhpY0luZm8uem5lYXIsXHJcbiAgICAgICAgICAgICAgICBmYXI6IG9ydGhvZ3JhcGhpY0luZm8uemZhclxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9wYXJzZU5vZGVzOiBmdW5jdGlvbiAoanNvbiwgbGliKSB7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGluc3RhbmNlTWVzaChtZXNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgTWVzaCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBtZXNoLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogbWVzaC5nZW9tZXRyeSxcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBtZXNoLm1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgY3VsbGluZzogbWVzaC5jdWxsaW5nLFxyXG4gICAgICAgICAgICAgICAgbW9kZTogbWVzaC5tb2RlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGliLmluc3RhbmNlZE1lc2hlcyA9IFtdO1xyXG5cclxuICAgICAgICB1dGlsLmVhY2goanNvbi5ub2RlcywgZnVuY3Rpb24gKG5vZGVJbmZvLCBpZHgpIHtcclxuICAgICAgICAgICAgdmFyIG5vZGU7XHJcbiAgICAgICAgICAgIGlmIChub2RlSW5mby5jYW1lcmEgIT0gbnVsbCAmJiB0aGlzLmluY2x1ZGVDYW1lcmEpIHtcclxuICAgICAgICAgICAgICAgIG5vZGUgPSB0aGlzLl9pbnN0YW5jZUNhbWVyYShqc29uLCBub2RlSW5mbyk7XHJcbiAgICAgICAgICAgICAgICBsaWIuY2FtZXJhcy5wdXNoKG5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG5vZGVJbmZvLm1lc2ggIT0gbnVsbCAmJiB0aGlzLmluY2x1ZGVNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcHJpbWl0aXZlcyA9IGxpYi5tZXNoZXNbbm9kZUluZm8ubWVzaF07XHJcbiAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBub2RlIHdpdGggbWVzaCBkaXJlY3RseVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gaW5zdGFuY2VNZXNoKHByaW1pdGl2ZXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldE5hbWUobm9kZUluZm8ubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpYi5pbnN0YW5jZWRNZXNoZXMucHVzaChub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBuZXcgTm9kZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldE5hbWUobm9kZUluZm8ubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcHJpbWl0aXZlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld01lc2ggPSBpbnN0YW5jZU1lc2gocHJpbWl0aXZlc1tqXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmFkZChuZXdNZXNoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYi5pbnN0YW5jZWRNZXNoZXMucHVzaChuZXdNZXNoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5vZGUgPSBuZXcgTm9kZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gUEVORElORyBEdWxwbGljYXRlIG5hbWUuXHJcbiAgICAgICAgICAgICAgICBub2RlLnNldE5hbWUobm9kZUluZm8ubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5vZGVJbmZvLm1hdHJpeCkge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5sb2NhbFRyYW5zZm9ybS5zZXRBcnJheShub2RlSW5mby5tYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgbm9kZS5kZWNvbXBvc2VMb2NhbFRyYW5zZm9ybSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGVJbmZvLnRyYW5zbGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5wb3NpdGlvbi5zZXRBcnJheShub2RlSW5mby50cmFuc2xhdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZUluZm8ucm90YXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnJvdGF0aW9uLnNldEFycmF5KG5vZGVJbmZvLnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChub2RlSW5mby5zY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2NhbGUuc2V0QXJyYXkobm9kZUluZm8uc2NhbGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsaWIubm9kZXNbaWR4XSA9IG5vZGU7XHJcbiAgICAgICAgfSwgdGhpcyk7XHJcblxyXG4gICAgICAgIC8vIEJ1aWxkIGhpZXJhcmNoeVxyXG4gICAgICAgIHV0aWwuZWFjaChqc29uLm5vZGVzLCBmdW5jdGlvbiAobm9kZUluZm8sIGlkeCkge1xyXG4gICAgICAgICAgICB2YXIgbm9kZSA9IGxpYi5ub2Rlc1tpZHhdO1xyXG4gICAgICAgICAgICBpZiAobm9kZUluZm8uY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZUluZm8uY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGRJZHggPSBub2RlSW5mby5jaGlsZHJlbltpXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBsaWIubm9kZXNbY2hpbGRJZHhdO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgX3BhcnNlQW5pbWF0aW9uczogZnVuY3Rpb24gKGpzb24sIGxpYikge1xyXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrQ2hhbm5lbFBhdGgoY2hhbm5lbEluZm8pIHtcclxuICAgICAgICAgICAgaWYgKGNoYW5uZWxJbmZvLnBhdGggPT09ICd3ZWlnaHRzJykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdHTFRGTG9hZGVyIG5vdCBzdXBwb3J0IG1vcnBoIHRhcmdldHMgeWV0LicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZ2V0Q2hhbm5lbEhhc2goY2hhbm5lbEluZm8sIGFuaW1hdGlvbkluZm8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNoYW5uZWxJbmZvLnRhcmdldC5ub2RlICsgJ18nICsgYW5pbWF0aW9uSW5mby5zYW1wbGVyc1tjaGFubmVsSW5mby5zYW1wbGVyXS5pbnB1dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0aW1lQWNjZXNzb3JNdWx0aXBsaWVkID0ge307XHJcbiAgICAgICAgdXRpbC5lYWNoKGpzb24uYW5pbWF0aW9ucywgZnVuY3Rpb24gKGFuaW1hdGlvbkluZm8sIGlkeCkge1xyXG4gICAgICAgICAgICB2YXIgY2hhbm5lbHMgPSBhbmltYXRpb25JbmZvLmNoYW5uZWxzLmZpbHRlcihjaGVja0NoYW5uZWxQYXRoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghY2hhbm5lbHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHRyYWNrcyA9IHt9O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5uZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hhbm5lbEluZm8gPSBjaGFubmVsc1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBjaGFubmVsSGFzaCA9IGdldENoYW5uZWxIYXNoKGNoYW5uZWxJbmZvLCBhbmltYXRpb25JbmZvKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0Tm9kZSA9IGxpYi5ub2Rlc1tjaGFubmVsSW5mby50YXJnZXQubm9kZV07XHJcbiAgICAgICAgICAgICAgICB2YXIgdHJhY2sgPSB0cmFja3NbY2hhbm5lbEhhc2hdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNhbXBsZXJJbmZvID0gYW5pbWF0aW9uSW5mby5zYW1wbGVyc1tjaGFubmVsSW5mby5zYW1wbGVyXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRyYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhY2sgPSB0cmFja3NbY2hhbm5lbEhhc2hdID0gbmV3IFNhbXBsZXJUcmFjayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRhcmdldE5vZGUgPyB0YXJnZXROb2RlLm5hbWUgOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXROb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhY2sudGFyZ2V0Tm9kZUluZGV4ID0gY2hhbm5lbEluZm8udGFyZ2V0Lm5vZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhY2suY2hhbm5lbHMudGltZSA9IGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIHNhbXBsZXJJbmZvLmlucHV0KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZnJhbWVMZW4gPSB0cmFjay5jaGFubmVscy50aW1lLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRpbWVBY2Nlc3Nvck11bHRpcGxpZWRbc2FtcGxlckluZm8uaW5wdXRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgZnJhbWVMZW47IGsrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2suY2hhbm5lbHMudGltZVtrXSAqPSAxMDAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVBY2Nlc3Nvck11bHRpcGxpZWRbc2FtcGxlckluZm8uaW5wdXRdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGludGVycG9sYXRpb24gPSBzYW1wbGVySW5mby5pbnRlcnBvbGF0aW9uIHx8ICdMSU5FQVInO1xyXG4gICAgICAgICAgICAgICAgaWYgKGludGVycG9sYXRpb24gIT09ICdMSU5FQVInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdHTFRGTG9hZGVyIG9ubHkgc3VwcG9ydCBMSU5FQVIgaW50ZXJwb2xhdGlvbi4nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcGF0aCA9IGNoYW5uZWxJbmZvLnRhcmdldC5wYXRoO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhdGggPT09ICd0cmFuc2xhdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gJ3Bvc2l0aW9uJztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0cmFjay5jaGFubmVsc1twYXRoXSA9IGdldEFjY2Vzc29yRGF0YShqc29uLCBsaWIsIHNhbXBsZXJJbmZvLm91dHB1dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHRyYWNrc0xpc3QgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaGFzaCBpbiB0cmFja3MpIHtcclxuICAgICAgICAgICAgICAgIHRyYWNrc0xpc3QucHVzaCh0cmFja3NbaGFzaF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjbGlwID0gbmV3IFRyYWNrQ2xpcCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBhbmltYXRpb25JbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBsb29wOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgdHJhY2tzOiB0cmFja3NMaXN0XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsaWIuY2xpcHMucHVzaChjbGlwKTtcclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcblxyXG4gICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICB2YXIgbWF4TGlmZSA9IGxpYi5jbGlwcy5yZWR1Y2UoZnVuY3Rpb24gKG1heFRpbWUsIGNsaXApIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KG1heFRpbWUsIGNsaXAubGlmZSk7XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgbGliLmNsaXBzLmZvckVhY2goZnVuY3Rpb24gKGNsaXApIHtcclxuICAgICAgICAgICAgY2xpcC5saWZlID0gbWF4TGlmZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxpYi5jbGlwcztcclxuICAgIH1cclxufSk7XHJcblxyXG5HTFRGTG9hZGVyLmdlbmVyYXRlTWVzaE5hbWUgPSBmdW5jdGlvbiAobWVzaGVzLCBpZHgsIHByaW1pdGl2ZUlkeCkge1xyXG4gICAgdmFyIG1lc2hJbmZvID0gbWVzaGVzW2lkeF07XHJcbiAgICB2YXIgbWVzaE5hbWUgPSBtZXNoSW5mby5uYW1lIHx8ICgnbWVzaF8nICsgaWR4KTtcclxuICAgIHJldHVybiBwcmltaXRpdmVJZHggPT09IDAgPyBtZXNoTmFtZSA6IChtZXNoTmFtZSArICckJyArIHByaW1pdGl2ZUlkeCk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHTFRGTG9hZGVyO1xyXG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsXHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICpcclxuICogQGV4YW1wbGVcclxuICogICAgIHZhciBsaWdodCA9IG5ldyBjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsKHtcclxuICogICAgICAgICBpbnRlbnNpdHk6IDAuNSxcclxuICogICAgICAgICBjb2xvcjogWzEuMCwgMC4wLCAwLjBdXHJcbiAqICAgICB9KTtcclxuICogICAgIGxpZ2h0LnBvc2l0aW9uLnNldCgxMCwgMTAsIDEwKTtcclxuICogICAgIGxpZ2h0Lmxvb2tBdChjbGF5LlZlY3RvcjMuWkVSTyk7XHJcbiAqICAgICBzY2VuZS5hZGQobGlnaHQpO1xyXG4gKi9cclxudmFyIERpcmVjdGlvbmFsTGlnaHQgPSBMaWdodC5leHRlbmQoLyoqIEBsZW5kcyBjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNoYWRvd0JpYXM6IDAuMDAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzaGFkb3dTbG9wZVNjYWxlOiAyLjAsXHJcbiAgICAvKipcclxuICAgICAqIFNoYWRvdyBjYXNjYWRlLlxyXG4gICAgICogVXNlIFBTU00gdGVjaG5pcXVlIHdoZW4gaXQgaXMgbGFyZ2VyIHRoYW4gMSBhbmQgaGF2ZSBhIHVuaXF1ZSBkaXJlY3Rpb25hbCBsaWdodCBpbiBzY2VuZS5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNoYWRvd0Nhc2NhZGU6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdmFpbGFibGUgd2hlbiBzaGFkb3dDYXNjYWRlIGlzIGxhcmdlciB0aGFuIDEgYW5kIGhhdmUgYSB1bmlxdWUgZGlyZWN0aW9uYWwgbGlnaHQgaW4gc2NlbmUuXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjYXNjYWRlU3BsaXRMb2dGYWN0b3I6IDAuMlxyXG59LCB7XHJcblxyXG4gICAgdHlwZTogJ0RJUkVDVElPTkFMX0xJR0hUJyxcclxuXHJcbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XHJcbiAgICAgICAgZGlyZWN0aW9uYWxMaWdodERpcmVjdGlvbjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5fX2RpciA9IGluc3RhbmNlLl9fZGlyIHx8IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBEaXJlY3Rpb24gaXMgdGFyZ2V0IHRvIGV5ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLl9fZGlyLmNvcHkoaW5zdGFuY2Uud29ybGRUcmFuc2Zvcm0ueikubm9ybWFsaXplKCkubmVnYXRlKCkuYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGRpcmVjdGlvbmFsTGlnaHRDb2xvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBpbnN0YW5jZS5jb2xvcjtcclxuICAgICAgICAgICAgICAgIHZhciBpbnRlbnNpdHkgPSBpbnN0YW5jZS5pbnRlbnNpdHk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW2NvbG9yWzBdICogaW50ZW5zaXR5LCBjb2xvclsxXSAqIGludGVuc2l0eSwgY29sb3JbMl0gKiBpbnRlbnNpdHldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5EaXJlY3Rpb25hbH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LkRpcmVjdGlvbmFsLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsaWdodCA9IExpZ2h0LnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGxpZ2h0LnNoYWRvd0JpYXMgPSB0aGlzLnNoYWRvd0JpYXM7XHJcbiAgICAgICAgbGlnaHQuc2hhZG93U2xvcGVTY2FsZSA9IHRoaXMuc2hhZG93U2xvcGVTY2FsZTtcclxuICAgICAgICByZXR1cm4gbGlnaHQ7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRGlyZWN0aW9uYWxMaWdodDtcclxuIiwiaW1wb3J0IExpZ2h0IGZyb20gJy4uL0xpZ2h0JztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5saWdodC5Qb2ludFxyXG4gKiBAZXh0ZW5kcyBjbGF5LkxpZ2h0XHJcbiAqL1xyXG52YXIgUG9pbnRMaWdodCA9IExpZ2h0LmV4dGVuZCgvKiogQGxlbmRzIGNsYXkubGlnaHQuUG9pbnQjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcmFuZ2U6IDEwMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNhc3RTaGFkb3c6IGZhbHNlXHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnUE9JTlRfTElHSFQnLFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBwb2ludExpZ2h0UG9zaXRpb246IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0V29ybGRQb3NpdGlvbigpLmFycmF5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwb2ludExpZ2h0UmFuZ2U6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmFuZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvaW50TGlnaHRDb2xvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0gKiBpbnRlbnNpdHksIGNvbG9yWzFdICogaW50ZW5zaXR5LCBjb2xvclsyXSAqIGludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmxpZ2h0LlBvaW50fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuUG9pbnQucHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgbGlnaHQgPSBMaWdodC5wcm90b3R5cGUuY2xvbmUuY2FsbCh0aGlzKTtcclxuICAgICAgICBsaWdodC5yYW5nZSA9IHRoaXMucmFuZ2U7XHJcbiAgICAgICAgcmV0dXJuIGxpZ2h0O1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBvaW50TGlnaHQ7XHJcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuU3BvdFxyXG4gKiBAZXh0ZW5kcyBjbGF5LkxpZ2h0XHJcbiAqL1xyXG52YXIgU3BvdExpZ2h0ID0gTGlnaHQuZXh0ZW5kKC8qKkBsZW5kcyBjbGF5LmxpZ2h0LlNwb3QgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYW5nZTogMjAsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHVtYnJhQW5nbGU6IDMwLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBwZW51bWJyYUFuZ2xlOiA0NSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZmFsbG9mZkZhY3RvcjogMi4wLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzaGFkb3dCaWFzOiAwLjAwMSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc2hhZG93U2xvcGVTY2FsZTogMi4wXHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnU1BPVF9MSUdIVCcsXHJcblxyXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xyXG4gICAgICAgIHNwb3RMaWdodFBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwb3RMaWdodFJhbmdlOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5yYW5nZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BvdExpZ2h0VW1icmFBbmdsZUNvc2luZToge1xyXG4gICAgICAgICAgICB0eXBlOiAnMWYnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5jb3MoaW5zdGFuY2UudW1icmFBbmdsZSAqIE1hdGguUEkgLyAxODApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzcG90TGlnaHRQZW51bWJyYUFuZ2xlQ29zaW5lOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmNvcyhpbnN0YW5jZS5wZW51bWJyYUFuZ2xlICogTWF0aC5QSSAvIDE4MCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwb3RMaWdodEZhbGxvZmZGYWN0b3I6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmZhbGxvZmZGYWN0b3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwb3RMaWdodERpcmVjdGlvbjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5fX2RpciA9IGluc3RhbmNlLl9fZGlyIHx8IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBEaXJlY3Rpb24gaXMgdGFyZ2V0IHRvIGV5ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLl9fZGlyLmNvcHkoaW5zdGFuY2Uud29ybGRUcmFuc2Zvcm0ueikubmVnYXRlKCkuYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwb3RMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0gKiBpbnRlbnNpdHksIGNvbG9yWzFdICogaW50ZW5zaXR5LCBjb2xvclsyXSAqIGludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmxpZ2h0LlNwb3R9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5TcG90LnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBsaWdodCA9IExpZ2h0LnByb3RvdHlwZS5jbG9uZS5jYWxsKHRoaXMpO1xyXG4gICAgICAgIGxpZ2h0LnJhbmdlID0gdGhpcy5yYW5nZTtcclxuICAgICAgICBsaWdodC51bWJyYUFuZ2xlID0gdGhpcy51bWJyYUFuZ2xlO1xyXG4gICAgICAgIGxpZ2h0LnBlbnVtYnJhQW5nbGUgPSB0aGlzLnBlbnVtYnJhQW5nbGU7XHJcbiAgICAgICAgbGlnaHQuZmFsbG9mZkZhY3RvciA9IHRoaXMuZmFsbG9mZkZhY3RvcjtcclxuICAgICAgICBsaWdodC5zaGFkb3dCaWFzID0gdGhpcy5zaGFkb3dCaWFzO1xyXG4gICAgICAgIGxpZ2h0LnNoYWRvd1Nsb3BlU2NhbGUgPSB0aGlzLnNoYWRvd1Nsb3BlU2NhbGU7XHJcbiAgICAgICAgcmV0dXJuIGxpZ2h0O1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNwb3RMaWdodDtcclxuIiwiaW1wb3J0IExpZ2h0IGZyb20gJy4uL0xpZ2h0JztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5saWdodC5BbWJpZW50XHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICovXHJcbnZhciBBbWJpZW50TGlnaHQgPSBMaWdodC5leHRlbmQoe1xyXG5cclxuICAgIGNhc3RTaGFkb3c6IGZhbHNlXHJcblxyXG59LCB7XHJcblxyXG4gICAgdHlwZTogJ0FNQklFTlRfTElHSFQnLFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBhbWJpZW50TGlnaHRDb2xvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0qaW50ZW5zaXR5LCBjb2xvclsxXSppbnRlbnNpdHksIGNvbG9yWzJdKmludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQG5hbWUgY2xvbmVcclxuICAgICAqIEByZXR1cm4ge2NsYXkubGlnaHQuQW1iaWVudH1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LmxpZ2h0LkFtYmllbnQucHJvdG90eXBlXHJcbiAgICAgKi9cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBBbWJpZW50TGlnaHQ7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4vY29yZS9CYXNlJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmVDdWJlIGZyb20gJy4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgZ2xlbnVtIGZyb20gJy4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgQ2FjaGUgZnJvbSAnLi9jb3JlL0NhY2hlJztcclxuXHJcbnZhciBLRVlfRlJBTUVCVUZGRVIgPSAnZnJhbWVidWZmZXInO1xyXG52YXIgS0VZX1JFTkRFUkJVRkZFUiA9ICdyZW5kZXJidWZmZXInO1xyXG52YXIgS0VZX1JFTkRFUkJVRkZFUl9XSURUSCA9IEtFWV9SRU5ERVJCVUZGRVIgKyAnX3dpZHRoJztcclxudmFyIEtFWV9SRU5ERVJCVUZGRVJfSEVJR0hUID0gS0VZX1JFTkRFUkJVRkZFUiArICdfaGVpZ2h0JztcclxudmFyIEtFWV9SRU5ERVJCVUZGRVJfQVRUQUNIRUQgPSBLRVlfUkVOREVSQlVGRkVSICsgJ19hdHRhY2hlZCc7XHJcbnZhciBLRVlfREVQVEhURVhUVVJFX0FUVEFDSEVEID0gJ2RlcHRodGV4dHVyZV9hdHRhY2hlZCc7XHJcblxyXG52YXIgR0xfRlJBTUVCVUZGRVIgPSBnbGVudW0uRlJBTUVCVUZGRVI7XHJcbnZhciBHTF9SRU5ERVJCVUZGRVIgPSBnbGVudW0uUkVOREVSQlVGRkVSO1xyXG52YXIgR0xfREVQVEhfQVRUQUNITUVOVCA9IGdsZW51bS5ERVBUSF9BVFRBQ0hNRU5UO1xyXG52YXIgR0xfQ09MT1JfQVRUQUNITUVOVDAgPSBnbGVudW0uQ09MT1JfQVRUQUNITUVOVDA7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5GcmFtZUJ1ZmZlclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEZyYW1lQnVmZmVyID0gQmFzZS5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5GcmFtZUJ1ZmZlciMgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB1c2UgZGVwdGggYnVmZmVyXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgZGVwdGhCdWZmZXI6IHRydWUsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICovXHJcbiAgICB2aWV3cG9ydDogbnVsbCxcclxuXHJcbiAgICBfd2lkdGg6IDAsXHJcbiAgICBfaGVpZ2h0OiAwLFxyXG5cclxuICAgIF90ZXh0dXJlczogbnVsbCxcclxuXHJcbiAgICBfYm91bmRSZW5kZXJlcjogbnVsbCxcclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gVXNlIGNhY2hlXHJcbiAgICB0aGlzLl9jYWNoZSA9IG5ldyBDYWNoZSgpO1xyXG5cclxuICAgIHRoaXMuX3RleHR1cmVzID0ge307XHJcbn0sXHJcblxyXG4vKipAbGVuZHMgY2xheS5GcmFtZUJ1ZmZlci5wcm90b3R5cGUuICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogR2V0IGF0dGFjaGVkIHRleHR1cmUgd2lkdGhcclxuICAgICAqIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIC8vIEZJWE1FIENhbid0IHVzZSBiZWZvcmUgI2JpbmRcclxuICAgIGdldFRleHR1cmVXaWR0aDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYXR0YWNoZWQgdGV4dHVyZSBoZWlnaHRcclxuICAgICAqIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldFRleHR1cmVIZWlnaHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJpbmQgdGhlIGZyYW1lYnVmZmVyIHRvIGdpdmVuIHJlbmRlcmVyIGJlZm9yZSByZW5kZXJpbmdcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGJpbmQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG5cclxuICAgICAgICBpZiAocmVuZGVyZXIuX19jdXJyZW50RnJhbWVCdWZmZXIpIHtcclxuICAgICAgICAgICAgLy8gQWxyZWFkeSBib3VuZFxyXG4gICAgICAgICAgICBpZiAocmVuZGVyZXIuX19jdXJyZW50RnJhbWVCdWZmZXIgPT09IHRoaXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdSZW5kZXJlciBhbHJlYWR5IGJvdW5kIHdpdGggYW5vdGhlciBmcmFtZWJ1ZmZlci4gVW5iaW5kIGl0IGZpcnN0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlbmRlcmVyLl9fY3VycmVudEZyYW1lQnVmZmVyID0gdGhpcztcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICBfZ2wuYmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCB0aGlzLl9nZXRGcmFtZUJ1ZmZlckdMKHJlbmRlcmVyKSk7XHJcbiAgICAgICAgdGhpcy5fYm91bmRSZW5kZXJlciA9IHJlbmRlcmVyO1xyXG4gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2NhY2hlO1xyXG5cclxuICAgICAgICBjYWNoZS5wdXQoJ3ZpZXdwb3J0JywgcmVuZGVyZXIudmlld3BvcnQpO1xyXG5cclxuICAgICAgICB2YXIgaGFzVGV4dHVyZUF0dGFjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIHdpZHRoO1xyXG4gICAgICAgIHZhciBoZWlnaHQ7XHJcbiAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLl90ZXh0dXJlcykge1xyXG4gICAgICAgICAgICBoYXNUZXh0dXJlQXR0YWNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF07XHJcbiAgICAgICAgICAgIGlmIChvYmopIHtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gRG8gd2lkdGgsIGhlaWdodCBjaGVja2luZywgbWFrZSBzdXJlIHNpemUgYXJlIHNhbWVcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gb2JqLnRleHR1cmUud2lkdGg7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBvYmoudGV4dHVyZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAvLyBBdHRhY2ggdGV4dHVyZXNcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RvQXR0YWNoKHJlbmRlcmVyLCBvYmoudGV4dHVyZSwgYXR0YWNobWVudCwgb2JqLnRhcmdldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAoIWhhc1RleHR1cmVBdHRhY2hlZCAmJiB0aGlzLmRlcHRoQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ011c3QgYXR0YWNoIHRleHR1cmUgYmVmb3JlIGJpbmQsIG9yIHJlbmRlcmJ1ZmZlciBtYXkgaGF2ZSBpbmNvcnJlY3Qgd2lkdGggYW5kIGhlaWdodC4nKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmlld3BvcnQpIHtcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodGhpcy52aWV3cG9ydCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZW5kZXJlci5zZXRWaWV3cG9ydCgwLCAwLCB3aWR0aCwgaGVpZ2h0LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBhdHRhY2hlZFRleHR1cmVzID0gY2FjaGUuZ2V0KCdhdHRhY2hlZF90ZXh0dXJlcycpO1xyXG4gICAgICAgIGlmIChhdHRhY2hlZFRleHR1cmVzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gYXR0YWNoZWRUZXh0dXJlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvRGV0YWNoKF9nbCwgYXR0YWNobWVudCwgdGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWNhY2hlLmdldChLRVlfREVQVEhURVhUVVJFX0FUVEFDSEVEKSAmJiB0aGlzLmRlcHRoQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyByZW5kZXIgYnVmZmVyXHJcbiAgICAgICAgICAgIGlmIChjYWNoZS5taXNzKEtFWV9SRU5ERVJCVUZGRVIpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUiwgX2dsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcmVuZGVyYnVmZmVyID0gY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHdpZHRoICE9PSBjYWNoZS5nZXQoS0VZX1JFTkRFUkJVRkZFUl9XSURUSClcclxuICAgICAgICAgICAgICAgICAgICB8fCBoZWlnaHQgIT09IGNhY2hlLmdldChLRVlfUkVOREVSQlVGRkVSX0hFSUdIVCkpIHtcclxuICAgICAgICAgICAgICAgIF9nbC5iaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIF9nbC5yZW5kZXJidWZmZXJTdG9yYWdlKEdMX1JFTkRFUkJVRkZFUiwgX2dsLkRFUFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSX1dJRFRILCB3aWR0aCk7XHJcbiAgICAgICAgICAgICAgICBjYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUl9IRUlHSFQsIGhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICBfZ2wuYmluZFJlbmRlcmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVJfQVRUQUNIRUQpKSB7XHJcbiAgICAgICAgICAgICAgICBfZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTtcclxuICAgICAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfUkVOREVSQlVGRkVSX0FUVEFDSEVELCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVbmJpbmQgdGhlIGZyYW1lIGJ1ZmZlciBhZnRlciByZW5kZXJpbmdcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIHVuYmluZDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIHN0YXR1cyByZWNvcmQgb24gcmVuZGVyZXJcclxuICAgICAgICByZW5kZXJlci5fX2N1cnJlbnRGcmFtZUJ1ZmZlciA9IG51bGw7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgX2dsLmJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgbnVsbCk7XHJcbiAgICAgICAgdGhpcy5fYm91bmRSZW5kZXJlciA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuX2NhY2hlLnVzZShyZW5kZXJlci5fX3VpZF9fKTtcclxuICAgICAgICB2YXIgdmlld3BvcnQgPSB0aGlzLl9jYWNoZS5nZXQoJ3ZpZXdwb3J0Jyk7XHJcbiAgICAgICAgLy8gUmVzZXQgdmlld3BvcnQ7XHJcbiAgICAgICAgaWYgKHZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KHZpZXdwb3J0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlTWlwbWFwKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gQmVjYXVzZSB0aGUgZGF0YSBvZiB0ZXh0dXJlIGlzIGNoYW5nZWQgb3ZlciB0aW1lLFxyXG4gICAgLy8gSGVyZSB1cGRhdGUgdGhlIG1pcG1hcHMgb2YgdGV4dHVyZSBlYWNoIHRpbWUgYWZ0ZXIgcmVuZGVyZWQ7XHJcbiAgICB1cGRhdGVNaXBtYXA6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMuX3RleHR1cmVzKSB7XHJcbiAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XTtcclxuICAgICAgICAgICAgaWYgKG9iaikge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBvYmoudGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIC8vIEZJWE1FIHNvbWUgdGV4dHVyZSBmb3JtYXQgY2FuJ3QgZ2VuZXJhdGUgbWlwbWFwXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUuTlBPVCAmJiB0ZXh0dXJlLnVzZU1pcG1hcFxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRleHR1cmUubWluRmlsdGVyID09PSBUZXh0dXJlLkxJTkVBUl9NSVBNQVBfTElORUFSKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRleHR1cmUudGV4dHVyZVR5cGUgPT09ICd0ZXh0dXJlQ3ViZScgPyBnbGVudW0uVEVYVFVSRV9DVUJFX01BUCA6IGdsZW51bS5URVhUVVJFXzJEO1xyXG4gICAgICAgICAgICAgICAgICAgIF9nbC5iaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUuZ2V0V2ViR0xUZXh0dXJlKHJlbmRlcmVyKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgX2dsLmJpbmRUZXh0dXJlKHRhcmdldCwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvLyAweDhDRDUsIDM2MDUzLCBGUkFNRUJVRkZFUl9DT01QTEVURVxyXG4gICAgLy8gMHg4Q0Q2LCAzNjA1NCwgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UXHJcbiAgICAvLyAweDhDRDcsIDM2MDU1LCBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVFxyXG4gICAgLy8gMHg4Q0Q5LCAzNjA1NywgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TXHJcbiAgICAvLyAweDhDREQsIDM2MDYxLCBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRFxyXG4gICAgY2hlY2tTdGF0dXM6IGZ1bmN0aW9uIChfZ2wpIHtcclxuICAgICAgICByZXR1cm4gX2dsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xfRlJBTUVCVUZGRVIpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZ2V0RnJhbWVCdWZmZXJHTDogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG5cclxuICAgICAgICBpZiAoY2FjaGUubWlzcyhLRVlfRlJBTUVCVUZGRVIpKSB7XHJcbiAgICAgICAgICAgIGNhY2hlLnB1dChLRVlfRlJBTUVCVUZGRVIsIHJlbmRlcmVyLmdsLmNyZWF0ZUZyYW1lYnVmZmVyKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNhY2hlLmdldChLRVlfRlJBTUVCVUZGRVIpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEF0dGFjaCBhIHRleHR1cmUoUlRUKSB0byB0aGUgZnJhbWVidWZmZXJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZX0gdGV4dHVyZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbYXR0YWNobWVudD1nbC5DT0xPUl9BVFRBQ0hNRU5UMF1cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW3RhcmdldD1nbC5URVhUVVJFXzJEXVxyXG4gICAgICovXHJcbiAgICBhdHRhY2g6IGZ1bmN0aW9uICh0ZXh0dXJlLCBhdHRhY2htZW50LCB0YXJnZXQpIHtcclxuXHJcbiAgICAgICAgaWYgKCF0ZXh0dXJlLndpZHRoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHRleHR1cmUgYXR0YWNoZWQgdG8gY29sb3IgYnVmZmVyIGlzIG5vdCBhIHZhbGlkLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPIHdpZHRoIGFuZCBoZWlnaHQgY2hlY2tcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIGRlcHRoX3RleHR1cmUgZXh0ZW5zaW9uIGlzIGVuYWJsZWQsIGRldmVsb3BlcnNcclxuICAgICAgICAvLyBDYW4gYXR0YWNoIGEgZGVwdGggdGV4dHVyZSB0byB0aGUgZGVwdGggYnVmZmVyXHJcbiAgICAgICAgLy8gaHR0cDovL2Jsb2cudG9qaWNvZGUuY29tLzIwMTIvMDcvdXNpbmctd2ViZ2xkZXB0aHRleHR1cmUuaHRtbFxyXG4gICAgICAgIGF0dGFjaG1lbnQgPSBhdHRhY2htZW50IHx8IEdMX0NPTE9SX0FUVEFDSE1FTlQwO1xyXG4gICAgICAgIHRhcmdldCA9IHRhcmdldCB8fCBnbGVudW0uVEVYVFVSRV8yRDtcclxuXHJcbiAgICAgICAgdmFyIGJvdW5kUmVuZGVyZXIgPSB0aGlzLl9ib3VuZFJlbmRlcmVyO1xyXG4gICAgICAgIHZhciBfZ2wgPSBib3VuZFJlbmRlcmVyICYmIGJvdW5kUmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXM7XHJcblxyXG4gICAgICAgIGlmIChfZ2wpIHtcclxuICAgICAgICAgICAgdmFyIGNhY2hlID0gdGhpcy5fY2FjaGU7XHJcbiAgICAgICAgICAgIGNhY2hlLnVzZShib3VuZFJlbmRlcmVyLl9fdWlkX18pO1xyXG4gICAgICAgICAgICBhdHRhY2hlZFRleHR1cmVzID0gY2FjaGUuZ2V0KCdhdHRhY2hlZF90ZXh0dXJlcycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGV4dHVyZSBhdHRhY2hlZFxyXG4gICAgICAgIHZhciBwcmV2aW91cyA9IHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdO1xyXG4gICAgICAgIGlmIChwcmV2aW91cyAmJiBwcmV2aW91cy50YXJnZXQgPT09IHRhcmdldFxyXG4gICAgICAgICAgICAmJiBwcmV2aW91cy50ZXh0dXJlID09PSB0ZXh0dXJlXHJcbiAgICAgICAgICAgICYmIChhdHRhY2hlZFRleHR1cmVzICYmIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0gIT0gbnVsbClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNhbkF0dGFjaCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGJvdW5kUmVuZGVyZXIpIHtcclxuICAgICAgICAgICAgY2FuQXR0YWNoID0gdGhpcy5fZG9BdHRhY2goYm91bmRSZW5kZXJlciwgdGV4dHVyZSwgYXR0YWNobWVudCwgdGFyZ2V0KTtcclxuICAgICAgICAgICAgLy8gU2V0IHZpZXdwb3J0IGFnYWluIGluY2FzZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgc2l6ZSB0ZXh0dXJlcy5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLnZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgICAgICBib3VuZFJlbmRlcmVyLnNldFZpZXdwb3J0KDAsIDAsIHRleHR1cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNhbkF0dGFjaCkge1xyXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XSA9IHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdIHx8IHt9O1xyXG4gICAgICAgICAgICB0aGlzLl90ZXh0dXJlc1thdHRhY2htZW50XS50ZXh0dXJlID0gdGV4dHVyZTtcclxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXNbYXR0YWNobWVudF0udGFyZ2V0ID0gdGFyZ2V0O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2RvQXR0YWNoOiBmdW5jdGlvbiAocmVuZGVyZXIsIHRleHR1cmUsIGF0dGFjaG1lbnQsIHRhcmdldCkge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICAvLyBNYWtlIHN1cmUgdGV4dHVyZSBpcyBhbHdheXMgdXBkYXRlZFxyXG4gICAgICAgIC8vIEJlY2F1c2UgdGV4dHVyZSB3aWR0aCBvciBoZWlnaHQgbWF5IGJlIGNoYW5nZWQgYW5kIGluIHRoaXMgd2UgY2FuJ3QgYmUgbm90aWZpZWRcclxuICAgICAgICAvLyBGSVhNRSBhd2t3YXJkO1xyXG4gICAgICAgIHZhciB3ZWJnbFRleHR1cmUgPSB0ZXh0dXJlLmdldFdlYkdMVGV4dHVyZShyZW5kZXJlcik7XHJcbiAgICAgICAgLy8gQXNzdW1lIGNhY2hlIGhhcyBiZWVuIHVzZWQuXHJcbiAgICAgICAgdmFyIGF0dGFjaGVkVGV4dHVyZXMgPSB0aGlzLl9jYWNoZS5nZXQoJ2F0dGFjaGVkX3RleHR1cmVzJyk7XHJcbiAgICAgICAgaWYgKGF0dGFjaGVkVGV4dHVyZXMgJiYgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSkge1xyXG4gICAgICAgICAgICB2YXIgb2JqID0gYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XTtcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGV4dHVyZSBhbmQgdGFyZ2V0IG5vdCBjaGFuZ2VkXHJcbiAgICAgICAgICAgIGlmIChvYmoudGV4dHVyZSA9PT0gdGV4dHVyZSAmJiBvYmoudGFyZ2V0ID09PSB0YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhdHRhY2htZW50ID0gK2F0dGFjaG1lbnQ7XHJcblxyXG4gICAgICAgIHZhciBjYW5BdHRhY2ggPSB0cnVlO1xyXG4gICAgICAgIGlmIChhdHRhY2htZW50ID09PSBHTF9ERVBUSF9BVFRBQ0hNRU5UIHx8IGF0dGFjaG1lbnQgPT09IGdsZW51bS5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpIHtcclxuICAgICAgICAgICAgdmFyIGV4dGVuc2lvbiA9IHJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdXRUJHTF9kZXB0aF90ZXh0dXJlJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWV4dGVuc2lvbikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRGVwdGggdGV4dHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyJyk7XHJcbiAgICAgICAgICAgICAgICBjYW5BdHRhY2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGV4dHVyZS5mb3JtYXQgIT09IGdsZW51bS5ERVBUSF9DT01QT05FTlRcclxuICAgICAgICAgICAgICAgICYmIHRleHR1cmUuZm9ybWF0ICE9PSBnbGVudW0uREVQVEhfU1RFTkNJTFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSB0ZXh0dXJlIGF0dGFjaGVkIHRvIGRlcHRoIGJ1ZmZlciBpcyBub3QgYSB2YWxpZC4nKTtcclxuICAgICAgICAgICAgICAgIGNhbkF0dGFjaCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBEaXNwb3NlIHJlbmRlciBidWZmZXIgY3JlYXRlZCBwcmV2aW91c1xyXG4gICAgICAgICAgICBpZiAoY2FuQXR0YWNoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVuZGVyYnVmZmVyID0gdGhpcy5fY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIF9nbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xfUkVOREVSQlVGRkVSLCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICBfZ2wuZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUucHV0KEtFWV9SRU5ERVJCVUZGRVIsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZS5wdXQoS0VZX1JFTkRFUkJVRkZFUl9BVFRBQ0hFRCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGUucHV0KEtFWV9ERVBUSFRFWFRVUkVfQVRUQUNIRUQsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBNaXBtYXAgbGV2ZWwgY2FuIG9ubHkgYmUgMFxyXG4gICAgICAgIF9nbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgYXR0YWNobWVudCwgdGFyZ2V0LCB3ZWJnbFRleHR1cmUsIDApO1xyXG5cclxuICAgICAgICBpZiAoIWF0dGFjaGVkVGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgYXR0YWNoZWRUZXh0dXJlcyA9IHt9O1xyXG4gICAgICAgICAgICB0aGlzLl9jYWNoZS5wdXQoJ2F0dGFjaGVkX3RleHR1cmVzJywgYXR0YWNoZWRUZXh0dXJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0gPSBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdIHx8IHt9O1xyXG4gICAgICAgIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0udGV4dHVyZSA9IHRleHR1cmU7XHJcbiAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XS50YXJnZXQgPSB0YXJnZXQ7XHJcblxyXG4gICAgICAgIHJldHVybiBjYW5BdHRhY2g7XHJcbiAgICB9LFxyXG5cclxuICAgIF9kb0RldGFjaDogZnVuY3Rpb24gKF9nbCwgYXR0YWNobWVudCwgdGFyZ2V0KSB7XHJcbiAgICAgICAgLy8gRGV0YWNoIGEgdGV4dHVyZSBmcm9tIGZyYW1lYnVmZmVyXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9XZWJHTC9ibG9iL21hc3Rlci9jb25mb3JtYW5jZS1zdWl0ZXMvMS4wLjAvY29uZm9ybWFuY2UvZnJhbWVidWZmZXItdGVzdC5odG1sI0wxNDVcclxuICAgICAgICBfZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIGF0dGFjaG1lbnQsIHRhcmdldCwgbnVsbCwgMCk7XHJcblxyXG4gICAgICAgIC8vIEFzc3VtZSBjYWNoZSBoYXMgYmVlbiB1c2VkLlxyXG4gICAgICAgIHZhciBhdHRhY2hlZFRleHR1cmVzID0gdGhpcy5fY2FjaGUuZ2V0KCdhdHRhY2hlZF90ZXh0dXJlcycpO1xyXG4gICAgICAgIGlmIChhdHRhY2hlZFRleHR1cmVzICYmIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0pIHtcclxuICAgICAgICAgICAgYXR0YWNoZWRUZXh0dXJlc1thdHRhY2htZW50XSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYXR0YWNobWVudCA9PT0gR0xfREVQVEhfQVRUQUNITUVOVCB8fCBhdHRhY2htZW50ID09PSBnbGVudW0uREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlLnB1dChLRVlfREVQVEhURVhUVVJFX0FUVEFDSEVELCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERldGFjaCBhIHRleHR1cmVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW2F0dGFjaG1lbnQ9Z2wuQ09MT1JfQVRUQUNITUVOVDBdXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IFt0YXJnZXQ9Z2wuVEVYVFVSRV8yRF1cclxuICAgICAqL1xyXG4gICAgZGV0YWNoOiBmdW5jdGlvbiAoYXR0YWNobWVudCwgdGFyZ2V0KSB7XHJcbiAgICAgICAgLy8gVE9ETyBkZXB0aCBleHRlbnNpb24gY2hlY2sgP1xyXG4gICAgICAgIHRoaXMuX3RleHR1cmVzW2F0dGFjaG1lbnRdID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5fYm91bmRSZW5kZXJlcikge1xyXG4gICAgICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuICAgICAgICAgICAgY2FjaGUudXNlKHRoaXMuX2JvdW5kUmVuZGVyZXIuX191aWRfXyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RvRGV0YWNoKHRoaXMuX2JvdW5kUmVuZGVyZXIuZ2wsIGF0dGFjaG1lbnQsIHRhcmdldCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZVxyXG4gICAgICogQHBhcmFtICB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBfZ2xcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICB2YXIgY2FjaGUgPSB0aGlzLl9jYWNoZTtcclxuXHJcbiAgICAgICAgY2FjaGUudXNlKHJlbmRlcmVyLl9fdWlkX18pO1xyXG5cclxuICAgICAgICB2YXIgcmVuZGVyQnVmZmVyID0gY2FjaGUuZ2V0KEtFWV9SRU5ERVJCVUZGRVIpO1xyXG4gICAgICAgIGlmIChyZW5kZXJCdWZmZXIpIHtcclxuICAgICAgICAgICAgX2dsLmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5kZXJCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZnJhbWVCdWZmZXIgPSBjYWNoZS5nZXQoS0VZX0ZSQU1FQlVGRkVSKTtcclxuICAgICAgICBpZiAoZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICAgICAgX2dsLmRlbGV0ZUZyYW1lYnVmZmVyKGZyYW1lQnVmZmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FjaGUuZGVsZXRlQ29udGV4dChyZW5kZXJlci5fX3VpZF9fKTtcclxuXHJcbiAgICAgICAgLy8gQ2xlYXIgY2FjaGUgZm9yIHJldXNpbmdcclxuICAgICAgICB0aGlzLl90ZXh0dXJlcyA9IHt9O1xyXG5cclxuICAgIH1cclxufSk7XHJcblxyXG5GcmFtZUJ1ZmZlci5ERVBUSF9BVFRBQ0hNRU5UID0gR0xfREVQVEhfQVRUQUNITUVOVDtcclxuRnJhbWVCdWZmZXIuQ09MT1JfQVRUQUNITUVOVDAgPSBHTF9DT0xPUl9BVFRBQ0hNRU5UMDtcclxuRnJhbWVCdWZmZXIuU1RFTkNJTF9BVFRBQ0hNRU5UID0gZ2xlbnVtLlNURU5DSUxfQVRUQUNITUVOVDtcclxuRnJhbWVCdWZmZXIuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UID0gZ2xlbnVtLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZyYW1lQnVmZmVyO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkIDogVEVYQ09PUkRfMDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52b2lkIG1haW4oKVxcbntcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkO1xcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBPcnRob0NhbWVyYSBmcm9tICcuLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcclxuaW1wb3J0IFBsYW5lIGZyb20gJy4uL2dlb21ldHJ5L1BsYW5lJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgTWVzaCBmcm9tICcuLi9NZXNoJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCB2ZXJ0ZXhHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvY29tcG9zaXRvci92ZXJ0ZXguZ2xzbC5qcyc7XHJcblxyXG5TaGFkZXJbJ2ltcG9ydCddKHZlcnRleEdsc2wpO1xyXG5cclxudmFyIHBsYW5lR2VvID0gbmV3IFBsYW5lKCk7XHJcbnZhciBtZXNoID0gbmV3IE1lc2goe1xyXG4gICAgZ2VvbWV0cnk6IHBsYW5lR2VvLFxyXG4gICAgZnJ1c3R1bUN1bGxpbmc6IGZhbHNlXHJcbn0pO1xyXG52YXIgY2FtZXJhID0gbmV3IE9ydGhvQ2FtZXJhKCk7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5QYXNzXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgUGFzcyA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5QYXNzIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRnJhZ21lbnQgc2hhZGVyIHN0cmluZ1xyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgLy8gUEVORElORyBzaGFkZXIgb3IgZnJhZ21lbnQgP1xyXG4gICAgICAgIGZyYWdtZW50OiAnJyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvdXRwdXRzOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5NYXRlcmlhbH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXRlcmlhbDogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYmxlbmRXaXRoUHJldmlvdXM6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGVhckNvbG9yOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY2xlYXJEZXB0aDogdHJ1ZVxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgdmFyIHNoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLnZlcnRleCcpLCB0aGlzLmZyYWdtZW50KTtcclxuICAgIHZhciBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgc2hhZGVyOiBzaGFkZXJcclxuICAgIH0pO1xyXG4gICAgbWF0ZXJpYWwuZW5hYmxlVGV4dHVyZXNBbGwoKTtcclxuXHJcbiAgICB0aGlzLm1hdGVyaWFsID0gbWF0ZXJpYWw7XHJcblxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5QYXNzLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcGFyYW0ge30gdmFsdWVcclxuICAgICAqL1xyXG4gICAgc2V0VW5pZm9ybTogZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsLnNldFVuaWZvcm0obmFtZSwgdmFsdWUpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHt9XHJcbiAgICAgKi9cclxuICAgIGdldFVuaWZvcm06IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgICB2YXIgdW5pZm9ybSA9IHRoaXMubWF0ZXJpYWwudW5pZm9ybXNbbmFtZV07XHJcbiAgICAgICAgaWYgKHVuaWZvcm0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuaWZvcm0udmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSB0ZXh0dXJlXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGF0dGFjaG1lbnRcclxuICAgICAqL1xyXG4gICAgYXR0YWNoT3V0cHV0OiBmdW5jdGlvbih0ZXh0dXJlLCBhdHRhY2htZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgdGhpcy5vdXRwdXRzID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF0dGFjaG1lbnQgPSBhdHRhY2htZW50IHx8IGdsZW51bS5DT0xPUl9BVFRBQ0hNRU5UMDtcclxuICAgICAgICB0aGlzLm91dHB1dHNbYXR0YWNobWVudF0gPSB0ZXh0dXJlO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5UZXh0dXJlfSB0ZXh0dXJlXHJcbiAgICAgKi9cclxuICAgIGRldGFjaE91dHB1dDogZnVuY3Rpb24odGV4dHVyZSkge1xyXG4gICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dHNbYXR0YWNobWVudF0gPT09IHRleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0c1thdHRhY2htZW50XSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGJpbmQ6IGZ1bmN0aW9uKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcikge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IHRoaXMub3V0cHV0c1thdHRhY2htZW50XTtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUsIGF0dGFjaG1lbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICB1bmJpbmQ6IGZ1bmN0aW9uKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgIGZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtICB7Y2xheS5GcmFtZUJ1ZmZlcn0gW2ZyYW1lQnVmZmVyXVxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcikge1xyXG5cclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIGlmIChmcmFtZUJ1ZmZlcikge1xyXG4gICAgICAgICAgICB0aGlzLmJpbmQocmVuZGVyZXIsIGZyYW1lQnVmZmVyKTtcclxuICAgICAgICAgICAgLy8gTVJUIFN1cHBvcnQgaW4gY2hyb21lXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3Nkay90ZXN0cy9jb25mb3JtYW5jZS9leHRlbnNpb25zL2V4dC1kcmF3LWJ1ZmZlcnMuaHRtbFxyXG4gICAgICAgICAgICB2YXIgZXh0ID0gcmVuZGVyZXIuZ2V0R0xFeHRlbnNpb24oJ0VYVF9kcmF3X2J1ZmZlcnMnKTtcclxuICAgICAgICAgICAgaWYgKGV4dCAmJiB0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBidWZzID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50IGluIHRoaXMub3V0cHV0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQgPSArYXR0YWNobWVudDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBfZ2wuQ09MT1JfQVRUQUNITUVOVDAgJiYgYXR0YWNobWVudCA8PSBfZ2wuQ09MT1JfQVRUQUNITUVOVDAgKyA4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZnMucHVzaChhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBleHQuZHJhd0J1ZmZlcnNFWFQoYnVmcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYmVmb3JlcmVuZGVyJywgdGhpcywgcmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAvLyBGSVhNRSBEb24ndCBjbGVhciBpbiBlYWNoIHBhc3MgaW4gZGVmYXVsdCwgbGV0IHRoZSBjb2xvciBvdmVyd3JpdGUgdGhlIGJ1ZmZlclxyXG4gICAgICAgIC8vIEZJWE1FIHBpeGVscyBtYXkgYmUgZGlzY2FyZFxyXG4gICAgICAgIHZhciBjbGVhckJpdCA9IHRoaXMuY2xlYXJEZXB0aCA/IF9nbC5ERVBUSF9CVUZGRVJfQklUIDogMDtcclxuICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmNsZWFyQ29sb3IpIHtcclxuICAgICAgICAgICAgY2xlYXJCaXQgPSBjbGVhckJpdCB8IF9nbC5DT0xPUl9CVUZGRVJfQklUO1xyXG4gICAgICAgICAgICBfZ2wuY29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgICB2YXIgY2MgPSB0aGlzLmNsZWFyQ29sb3I7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNjKSkge1xyXG4gICAgICAgICAgICAgICAgX2dsLmNsZWFyQ29sb3IoY2NbMF0sIGNjWzFdLCBjY1syXSwgY2NbM10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF9nbC5jbGVhcihjbGVhckJpdCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmJsZW5kV2l0aFByZXZpb3VzKSB7XHJcbiAgICAgICAgICAgIC8vIEJsZW5kIHdpdGggcHJldmlvdXMgcmVuZGVyZWQgc2NlbmUgaW4gdGhlIGZpbmFsIG91dHB1dFxyXG4gICAgICAgICAgICAvLyBGSVhNRSBDb25maWd1cmUgYmxlbmQuXHJcbiAgICAgICAgICAgIC8vIEZJWE1FIEl0IHdpbGwgY2F1c2Ugc2NyZWVuIGJsaW5r77yfXHJcbiAgICAgICAgICAgIF9nbC5lbmFibGUoX2dsLkJMRU5EKTtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC50cmFuc3BhcmVudCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBfZ2wuZGlzYWJsZShfZ2wuQkxFTkQpO1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnRyYW5zcGFyZW50ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlbmRlclF1YWQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2FmdGVycmVuZGVyJywgdGhpcywgcmVuZGVyZXIpO1xyXG5cclxuICAgICAgICBpZiAoZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICAgICAgdGhpcy51bmJpbmQocmVuZGVyZXIsIGZyYW1lQnVmZmVyKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2ltcGx5IGRvIHF1YWQgcmVuZGVyaW5nXHJcbiAgICAgKi9cclxuICAgIHJlbmRlclF1YWQ6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIG1lc2gubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoW21lc2hdLCBjYW1lcmEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge31cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQYXNzO1xyXG4iLCIvLyBUT0RPIFNob3VsZCBub3QgZGVyaXZlZCBmcm9tIG1lc2g/XHJcbmltcG9ydCBNZXNoIGZyb20gJy4uL01lc2gnO1xyXG5pbXBvcnQgQ3ViZUdlb21ldHJ5IGZyb20gJy4uL2dlb21ldHJ5L0N1YmUnO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4uL1NoYWRlcic7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL1RleHR1cmUnO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcclxuXHJcbmltcG9ydCBza3lib3hFc3NsIGZyb20gJy4uL3NoYWRlci9zb3VyY2Uvc2t5Ym94Lmdsc2wuanMnO1xyXG5TaGFkZXIuaW1wb3J0KHNreWJveEVzc2wpO1xyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGx1Z2luLlNreWJveFxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgdmFyIHNreVRleCA9IG5ldyBjbGF5LlRleHR1cmVDdWJlKCk7XHJcbiAqICAgICBza3lUZXgubG9hZCh7XHJcbiAqICAgICAgICAgJ3B4JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHguanBnJyxcclxuICogICAgICAgICAnbngnOiAnYXNzZXRzL3RleHR1cmVzL3NreS9ueC5qcGcnXHJcbiAqICAgICAgICAgJ3B5JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvcHkuanBnJ1xyXG4gKiAgICAgICAgICdueSc6ICdhc3NldHMvdGV4dHVyZXMvc2t5L255LmpwZydcclxuICogICAgICAgICAncHonOiAnYXNzZXRzL3RleHR1cmVzL3NreS9wei5qcGcnXHJcbiAqICAgICAgICAgJ256JzogJ2Fzc2V0cy90ZXh0dXJlcy9za3kvbnouanBnJ1xyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgc2t5Ym94ID0gbmV3IGNsYXkucGx1Z2luLlNreWJveCh7XHJcbiAqICAgICAgICAgc2NlbmU6IHNjZW5lXHJcbiAqICAgICB9KTtcclxuICogICAgIHNreWJveC5tYXRlcmlhbC5zZXQoJ2Vudmlyb25tZW50TWFwJywgc2t5VGV4KTtcclxuICovXHJcbnZhciBTa3lib3ggPSBNZXNoLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIHNreWJveFNoYWRlciA9IG5ldyBTaGFkZXIoe1xyXG4gICAgICAgIHZlcnRleDogU2hhZGVyLnNvdXJjZSgnY2xheS5za3lib3gudmVydGV4JyksXHJcbiAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkuc2t5Ym94LmZyYWdtZW50JylcclxuICAgIH0pO1xyXG4gICAgdmFyIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICBzaGFkZXI6IHNreWJveFNoYWRlcixcclxuICAgICAgICBkZXB0aE1hc2s6IGZhbHNlXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlNjZW5lfVxyXG4gICAgICAgICAqIEBtZW1iZXJPZiBjbGF5LnBsdWdpbi5Ta3lib3gucHJvdG90eXBlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2NlbmU6IG51bGwsXHJcblxyXG4gICAgICAgIGdlb21ldHJ5OiBuZXcgQ3ViZUdlb21ldHJ5KCksXHJcblxyXG4gICAgICAgIG1hdGVyaWFsOiBtYXRlcmlhbCxcclxuXHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXA6IG51bGwsXHJcblxyXG4gICAgICAgIGN1bGxpbmc6IGZhbHNlLFxyXG5cclxuICAgICAgICBfZHVtbXlDYW1lcmE6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgc2NlbmUgPSB0aGlzLnNjZW5lO1xyXG4gICAgaWYgKHNjZW5lKSB7XHJcbiAgICAgICAgdGhpcy5hdHRhY2hTY2VuZShzY2VuZSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudE1hcCkge1xyXG4gICAgICAgIHRoaXMuc2V0RW52aXJvbm1lbnRNYXAodGhpcy5lbnZpcm9ubWVudE1hcCk7XHJcbiAgICB9XHJcbn0sIC8qKiBAbGVuZHMgY2xheS5wbHVnaW4uU2t5Ym94IyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEF0dGFjaCB0aGUgc2t5Ym94IHRvIHRoZSBzY2VuZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICAgICAqL1xyXG4gICAgYXR0YWNoU2NlbmU6IGZ1bmN0aW9uIChzY2VuZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWNoU2NlbmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2NlbmUuc2t5Ym94ID0gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG4gICAgICAgIHNjZW5lLm9uKCdiZWZvcmVyZW5kZXInLCB0aGlzLl9iZWZvcmVSZW5kZXJTY2VuZSwgdGhpcyk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRhY2ggZnJvbSBzY2VuZVxyXG4gICAgICovXHJcbiAgICBkZXRhY2hTY2VuZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUub2ZmKCdiZWZvcmVyZW5kZXInLCB0aGlzLl9iZWZvcmVSZW5kZXJTY2VuZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc2t5Ym94ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IG51bGw7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBza3lib3hcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHRoaXMuZGV0YWNoU2NlbmUoKTtcclxuICAgICAgICB0aGlzLmdlb21ldHJ5LmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU2V0IGVudmlyb25tZW50IG1hcFxyXG4gICAgICogQHBhcmFtIHtjbGF5LlRleHR1cmVDdWJlfSBlbnZNYXBcclxuICAgICAqL1xyXG4gICAgc2V0RW52aXJvbm1lbnRNYXA6IGZ1bmN0aW9uIChlbnZNYXApIHtcclxuICAgICAgICBpZiAoZW52TWFwLnRleHR1cmVUeXBlID09PSAndGV4dHVyZTJEJykge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLmRlZmluZSgnRVFVSVJFQ1RBTkdVTEFSJyk7XHJcbiAgICAgICAgICAgIC8vIExJTkVBUiBmaWx0ZXIgY2FuIHJlbW92ZSB0aGUgYXJ0aWZhY3RzIGluIHBvbGVcclxuICAgICAgICAgICAgZW52TWFwLm1pbkZpbHRlciA9IFRleHR1cmUuTElORUFSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tYXRlcmlhbC51bmRlZmluZSgnRVFVSVJFQ1RBTkdVTEFSJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwuc2V0KCdlbnZpcm9ubWVudE1hcCcsIGVudk1hcCk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZW52aXJvbm1lbnQgbWFwXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmVDdWJlfVxyXG4gICAgICovXHJcbiAgICBnZXRFbnZpcm9ubWVudE1hcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hdGVyaWFsLmdldCgnZW52aXJvbm1lbnRNYXAnKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2JlZm9yZVJlbmRlclNjZW5lOiBmdW5jdGlvbihyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyU2t5Ym94KHJlbmRlcmVyLCBjYW1lcmEpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZW5kZXJTa3lib3g6IGZ1bmN0aW9uIChyZW5kZXJlciwgY2FtZXJhKSB7XHJcbiAgICAgICAgdmFyIGR1bW15Q2FtZXJhID0gdGhpcy5fZHVtbXlDYW1lcmE7XHJcbiAgICAgICAgZHVtbXlDYW1lcmEuYXNwZWN0ID0gcmVuZGVyZXIuZ2V0Vmlld3BvcnRBc3BlY3QoKTtcclxuICAgICAgICBkdW1teUNhbWVyYS5mb3YgPSBjYW1lcmEuZm92IHx8IDUwO1xyXG4gICAgICAgIGR1bW15Q2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICAgICAgICBNYXRyaXg0LmludmVydChkdW1teUNhbWVyYS5pbnZQcm9qZWN0aW9uTWF0cml4LCBkdW1teUNhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuICAgICAgICBkdW1teUNhbWVyYS53b3JsZFRyYW5zZm9ybS5jb3B5KGNhbWVyYS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgZHVtbXlDYW1lcmEudmlld01hdHJpeC5jb3B5KGNhbWVyYS52aWV3TWF0cml4KTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3NpdGlvbi5jb3B5KGNhbWVyYS5nZXRXb3JsZFBvc2l0aW9uKCkpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgICAgIC8vIERvbid0IHJlbWVtYmVyIHRvIGRpc2FibGUgYmxlbmRcclxuICAgICAgICByZW5kZXJlci5nbC5kaXNhYmxlKHJlbmRlcmVyLmdsLkJMRU5EKTtcclxuICAgICAgICBpZiAodGhpcy5tYXRlcmlhbC5nZXQoJ2xvZCcpID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnTE9EJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdMT0QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhbdGhpc10sIGR1bW15Q2FtZXJhKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTa3lib3g7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tICcuLi9jYW1lcmEvUGVyc3BlY3RpdmUnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5cclxudmFyIHRhcmdldHMgPSBbJ3B4JywgJ254JywgJ3B5JywgJ255JywgJ3B6JywgJ256J107XHJcblxyXG4vKipcclxuICogUGFzcyByZW5kZXJpbmcgc2NlbmUgdG8gYSBlbnZpcm9ubWVudCBjdWJlIG1hcFxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wcmVQYXNzLkVudmlyb25tZW50TWFwXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICAvLyBFeGFtcGxlIG9mIGNhciByZWZsZWN0aW9uXHJcbiAqICAgICB2YXIgZW52TWFwID0gbmV3IGNsYXkuVGV4dHVyZUN1YmUoe1xyXG4gKiAgICAgICAgIHdpZHRoOiAyNTYsXHJcbiAqICAgICAgICAgaGVpZ2h0OiAyNTZcclxuICogICAgIH0pO1xyXG4gKiAgICAgdmFyIGVudlBhc3MgPSBuZXcgY2xheS5wcmVQYXNzLkVudmlyb25tZW50TWFwKHtcclxuICogICAgICAgICBwb3NpdGlvbjogY2FyLnBvc2l0aW9uLFxyXG4gKiAgICAgICAgIHRleHR1cmU6IGVudk1hcFxyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgY2FyQm9keSA9IGNhci5nZXRDaGlsZEJ5TmFtZSgnYm9keScpO1xyXG4gKiAgICAgY2FyQm9keS5tYXRlcmlhbC5lbmFibGVUZXh0dXJlKCdlbnZpcm9ubWVudE1hcCcpO1xyXG4gKiAgICAgY2FyQm9keS5tYXRlcmlhbC5zZXQoJ2Vudmlyb25tZW50TWFwJywgZW52TWFwKTtcclxuICogICAgIC4uLlxyXG4gKiAgICAgYW5pbWF0aW9uLm9uKCdmcmFtZScsIGZ1bmN0aW9uKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgIGVudlBhc3MucmVuZGVyKHJlbmRlcmVyLCBzY2VuZSk7XHJcbiAqICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xyXG4gKiAgICAgfSk7XHJcbiAqL1xyXG52YXIgRW52aXJvbm1lbnRNYXBQYXNzID0gQmFzZS5leHRlbmQoZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgcmV0ID0gLyoqIEBsZW5kcyBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDYW1lcmEgcG9zaXRpb25cclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcG9zaXRpb246IG5ldyBWZWN0b3IzKCksXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FtZXJhIGZhciBwbGFuZVxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCNcclxuICAgICAgICAgKi9cclxuICAgICAgICBmYXI6IDEwMDAsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ2FtZXJhIG5lYXIgcGxhbmVcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbmVhcjogMC4xLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEVudmlyb25tZW50IGN1YmUgbWFwXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuVGV4dHVyZUN1YmV9XHJcbiAgICAgICAgICogQG1lbWJlck9mIGNsYXkucHJlUGFzcy5FbnZpcm9ubWVudE1hcCNcclxuICAgICAgICAgKi9cclxuICAgICAgICB0ZXh0dXJlOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBVc2VkIGlmIHlvdSB3YW4ndCBoYXZlIHNoYWRvdyBpbiBlbnZpcm9ubWVudCBtYXBcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5wcmVQYXNzLlNoYWRvd01hcH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzaGFkb3dNYXBQYXNzOiBudWxsLFxyXG4gICAgfTtcclxuICAgIHZhciBjYW1lcmFzID0gcmV0Ll9jYW1lcmFzID0ge1xyXG4gICAgICAgIHB4OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxyXG4gICAgICAgIG54OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxyXG4gICAgICAgIHB5OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxyXG4gICAgICAgIG55OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxyXG4gICAgICAgIHB6OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pLFxyXG4gICAgICAgIG56OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoeyBmb3Y6IDkwIH0pXHJcbiAgICB9O1xyXG4gICAgY2FtZXJhcy5weC5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9YLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgY2FtZXJhcy5ueC5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9YLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgY2FtZXJhcy5weS5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9ZLCBWZWN0b3IzLlBPU0lUSVZFX1opO1xyXG4gICAgY2FtZXJhcy5ueS5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9ZLCBWZWN0b3IzLk5FR0FUSVZFX1opO1xyXG4gICAgY2FtZXJhcy5wei5sb29rQXQoVmVjdG9yMy5QT1NJVElWRV9aLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG4gICAgY2FtZXJhcy5uei5sb29rQXQoVmVjdG9yMy5ORUdBVElWRV9aLCBWZWN0b3IzLk5FR0FUSVZFX1kpO1xyXG5cclxuICAgIC8vIEZJWE1FIEluIHdpbmRvd3MsIHVzZSBvbmUgZnJhbWVidWZmZXIgb25seSByZW5kZXJzIG9uZSBzaWRlIG9mIGN1YmVtYXBcclxuICAgIHJldC5fZnJhbWVCdWZmZXIgPSBuZXcgRnJhbWVCdWZmZXIoKTtcclxuXHJcbiAgICByZXR1cm4gcmV0O1xyXG59LCAgLyoqIEBsZW5kcyBjbGF5LnByZVBhc3MuRW52aXJvbm1lbnRNYXAjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSB0YXJnZXRcclxuICAgICAqIEByZXR1cm4gIHtjbGF5LkNhbWVyYX1cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FtZXJhOiBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbWVyYXNbdGFyZ2V0XTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlNjZW5lfSBzY2VuZVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW25vdFVwZGF0ZVNjZW5lPWZhbHNlXVxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uKHJlbmRlcmVyLCBzY2VuZSwgbm90VXBkYXRlU2NlbmUpIHtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgaWYgKCFub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgICAgICBzY2VuZS51cGRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVHdlYWsgZm92XHJcbiAgICAgICAgLy8gaHR0cDovL3RoZS13aXRuZXNzLm5ldC9uZXdzLzIwMTIvMDIvc2VhbWxlc3MtY3ViZS1tYXAtZmlsdGVyaW5nL1xyXG4gICAgICAgIHZhciBuID0gdGhpcy50ZXh0dXJlLndpZHRoO1xyXG4gICAgICAgIHZhciBmb3YgPSAyICogTWF0aC5hdGFuKG4gLyAobiAtIDAuNSkpIC8gTWF0aC5QSSAqIDE4MDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRhcmdldHNbaV07XHJcbiAgICAgICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLl9jYW1lcmFzW3RhcmdldF07XHJcbiAgICAgICAgICAgIFZlY3RvcjMuY29weShjYW1lcmEucG9zaXRpb24sIHRoaXMucG9zaXRpb24pO1xyXG5cclxuICAgICAgICAgICAgY2FtZXJhLmZhciA9IHRoaXMuZmFyO1xyXG4gICAgICAgICAgICBjYW1lcmEubmVhciA9IHRoaXMubmVhcjtcclxuICAgICAgICAgICAgY2FtZXJhLmZvdiA9IGZvdjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNoYWRvd01hcFBhc3MpIHtcclxuICAgICAgICAgICAgICAgIGNhbWVyYS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgYm91bmRpbmdCb3hMYXN0RnJhbWVcclxuICAgICAgICAgICAgICAgIHZhciBiYm94ID0gc2NlbmUuZ2V0Qm91bmRpbmdCb3goKTtcclxuICAgICAgICAgICAgICAgIGJib3guYXBwbHlUcmFuc2Zvcm0oY2FtZXJhLnZpZXdNYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgc2NlbmUudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lLmNvcHkoYmJveCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFkb3dNYXBQYXNzLnJlbmRlcihyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0dXJlLCBfZ2wuQ09MT1JfQVRUQUNITUVOVDAsXHJcbiAgICAgICAgICAgICAgICBfZ2wuVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgaVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEsIHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRW52aXJvbm1lbnRNYXBQYXNzO1xyXG4iLCJpbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi4vVGV4dHVyZUN1YmUnO1xyXG5cclxuLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9iYjk0Mzk5MSh2PXZzLjg1KS5hc3B4XHJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90b2ppL3dlYmdsLXRleHR1cmUtdXRpbHMvYmxvYi9tYXN0ZXIvdGV4dHVyZS11dGlsL2Rkcy5qc1xyXG52YXIgRERTX01BR0lDID0gMHgyMDUzNDQ0NDtcclxuXHJcbnZhciBERFNEX0NBUFMgPSAweDE7XHJcbnZhciBERFNEX0hFSUdIVCA9IDB4MjtcclxudmFyIEREU0RfV0lEVEggPSAweDQ7XHJcbnZhciBERFNEX1BJVENIID0gMHg4O1xyXG52YXIgRERTRF9QSVhFTEZPUk1BVCA9IDB4MTAwMDtcclxudmFyIEREU0RfTUlQTUFQQ09VTlQgPSAweDIwMDAwO1xyXG52YXIgRERTRF9MSU5FQVJTSVpFID0gMHg4MDAwMDtcclxudmFyIEREU0RfREVQVEggPSAweDgwMDAwMDtcclxuXHJcbnZhciBERFNDQVBTX0NPTVBMRVggPSAweDg7XHJcbnZhciBERFNDQVBTX01JUE1BUCA9IDB4NDAwMDAwO1xyXG52YXIgRERTQ0FQU19URVhUVVJFID0gMHgxMDAwO1xyXG5cclxudmFyIEREU0NBUFMyX0NVQkVNQVAgPSAweDIwMDtcclxudmFyIEREU0NBUFMyX0NVQkVNQVBfUE9TSVRJVkVYID0gMHg0MDA7XHJcbnZhciBERFNDQVBTMl9DVUJFTUFQX05FR0FUSVZFWCA9IDB4ODAwO1xyXG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9QT1NJVElWRVkgPSAweDEwMDA7XHJcbnZhciBERFNDQVBTMl9DVUJFTUFQX05FR0FUSVZFWSA9IDB4MjAwMDtcclxudmFyIEREU0NBUFMyX0NVQkVNQVBfUE9TSVRJVkVaID0gMHg0MDAwO1xyXG52YXIgRERTQ0FQUzJfQ1VCRU1BUF9ORUdBVElWRVogPSAweDgwMDA7XHJcbnZhciBERFNDQVBTMl9WT0xVTUUgPSAweDIwMDAwMDtcclxuXHJcbnZhciBERFBGX0FMUEhBUElYRUxTID0gMHgxO1xyXG52YXIgRERQRl9BTFBIQSA9IDB4MjtcclxudmFyIEREUEZfRk9VUkNDID0gMHg0O1xyXG52YXIgRERQRl9SR0IgPSAweDQwO1xyXG52YXIgRERQRl9ZVVYgPSAweDIwMDtcclxudmFyIEREUEZfTFVNSU5BTkNFID0gMHgyMDAwMDtcclxuXHJcbmZ1bmN0aW9uIGZvdXJDQ1RvSW50MzIodmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZS5jaGFyQ29kZUF0KDApICtcclxuICAgICAgICAodmFsdWUuY2hhckNvZGVBdCgxKSA8PCA4KSArXHJcbiAgICAgICAgKHZhbHVlLmNoYXJDb2RlQXQoMikgPDwgMTYpICtcclxuICAgICAgICAodmFsdWUuY2hhckNvZGVBdCgzKSA8PCAyNCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGludDMyVG9Gb3VyQ0ModmFsdWUpIHtcclxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFxyXG4gICAgICAgIHZhbHVlICYgMHhmZixcclxuICAgICAgICAodmFsdWUgPj4gOCkgJiAweGZmLFxyXG4gICAgICAgICh2YWx1ZSA+PiAxNikgJiAweGZmLFxyXG4gICAgICAgICh2YWx1ZSA+PiAyNCkgJiAweGZmXHJcbiAgICApO1xyXG59XHJcblxyXG52YXIgaGVhZGVyTGVuZ3RoSW50ID0gMzE7IC8vIFRoZSBoZWFkZXIgbGVuZ3RoIGluIDMyIGJpdCBpbnRzXHJcblxyXG52YXIgRk9VUkNDX0RYVDEgPSBmb3VyQ0NUb0ludDMyKCdEWFQxJyk7XHJcbnZhciBGT1VSQ0NfRFhUMyA9IGZvdXJDQ1RvSW50MzIoJ0RYVDMnKTtcclxudmFyIEZPVVJDQ19EWFQ1ID0gZm91ckNDVG9JbnQzMignRFhUNScpO1xyXG4vLyBPZmZzZXRzIGludG8gdGhlIGhlYWRlciBhcnJheVxyXG52YXIgb2ZmX21hZ2ljID0gMDtcclxuXHJcbnZhciBvZmZfc2l6ZSA9IDE7XHJcbnZhciBvZmZfZmxhZ3MgPSAyO1xyXG52YXIgb2ZmX2hlaWdodCA9IDM7XHJcbnZhciBvZmZfd2lkdGggPSA0O1xyXG5cclxudmFyIG9mZl9taXBtYXBDb3VudCA9IDc7XHJcblxyXG52YXIgb2ZmX3BmRmxhZ3MgPSAyMDtcclxudmFyIG9mZl9wZkZvdXJDQyA9IDIxO1xyXG5cclxudmFyIG9mZl9jYXBzID0gMjc7XHJcbnZhciBvZmZfY2FwczIgPSAyODtcclxudmFyIG9mZl9jYXBzMyA9IDI5O1xyXG52YXIgb2ZmX2NhcHM0ID0gMzA7XHJcblxyXG52YXIgcmV0ID0ge1xyXG4gICAgcGFyc2U6IGZ1bmN0aW9uKGFycmF5QnVmZmVyLCBvdXQpIHtcclxuICAgICAgICB2YXIgaGVhZGVyID0gbmV3IEludDMyQXJyYXkoYXJyYXlCdWZmZXIsIDAsIGhlYWRlckxlbmd0aEludCk7XHJcbiAgICAgICAgaWYgKGhlYWRlcltvZmZfbWFnaWNdICE9PSBERFNfTUFHSUMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaGVhZGVyKG9mZl9wZkZsYWdzKSAmIEREUEZfRk9VUkNDKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGZvdXJDQyA9IGhlYWRlcihvZmZfcGZGb3VyQ0MpO1xyXG4gICAgICAgIHZhciB3aWR0aCA9IGhlYWRlcltvZmZfd2lkdGhdO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSBoZWFkZXJbb2ZmX2hlaWdodF07XHJcbiAgICAgICAgdmFyIGlzQ3ViZU1hcCA9IGhlYWRlcltvZmZfY2FwczJdICYgRERTQ0FQUzJfQ1VCRU1BUDtcclxuICAgICAgICB2YXIgaGFzTWlwbWFwID0gaGVhZGVyW29mZl9mbGFnc10gJiBERFNEX01JUE1BUENPVU5UO1xyXG4gICAgICAgIHZhciBibG9ja0J5dGVzLCBpbnRlcm5hbEZvcm1hdDtcclxuICAgICAgICBzd2l0Y2goZm91ckNDKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRk9VUkNDX0RYVDE6XHJcbiAgICAgICAgICAgICAgICBibG9ja0J5dGVzID0gODtcclxuICAgICAgICAgICAgICAgIGludGVybmFsRm9ybWF0ID0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRk9VUkNDX0RYVDM6XHJcbiAgICAgICAgICAgICAgICBibG9ja0J5dGVzID0gMTY7XHJcbiAgICAgICAgICAgICAgICBpbnRlcm5hbEZvcm1hdCA9IFRleHR1cmUuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBGT1VSQ0NfRFhUNTpcclxuICAgICAgICAgICAgICAgIGJsb2NrQnl0ZXMgPSAxNjtcclxuICAgICAgICAgICAgICAgIGludGVybmFsRm9ybWF0ID0gVGV4dHVyZS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBkYXRhT2Zmc2V0ID0gaGVhZGVyW29mZl9zaXplXSArIDQ7XHJcbiAgICAgICAgLy8gVE9ETzogU3VwcG9zZSBhbGwgZmFjZSBhcmUgZXhpc3RlZFxyXG4gICAgICAgIHZhciBmYWNlTnVtYmVyID0gaXNDdWJlTWFwID8gNiA6IDE7XHJcbiAgICAgICAgdmFyIG1pcG1hcENvdW50ID0gMTtcclxuICAgICAgICBpZiAoaGFzTWlwbWFwKSB7XHJcbiAgICAgICAgICAgIG1pcG1hcENvdW50ID0gTWF0aC5tYXgoMSwgaGVhZGVyW29mZl9taXBtYXBDb3VudF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHRleHR1cmVzID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBmYWNlTnVtYmVyOyBmKyspIHtcclxuICAgICAgICAgICAgdmFyIF93aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgICB2YXIgX2hlaWdodCA9IGhlaWdodDtcclxuICAgICAgICAgICAgdGV4dHVyZXNbZl0gPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBfd2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IF9oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IGludGVybmFsRm9ybWF0XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgbWlwbWFwcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pcG1hcENvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBkYXRhTGVuZ3RoID0gTWF0aC5tYXgoNCwgX3dpZHRoKSAvIDQgKiBNYXRoLm1heCg0LCBfaGVpZ2h0KSAvIDQgKiBibG9ja0J5dGVzO1xyXG4gICAgICAgICAgICAgICAgdmFyIGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyLCBkYXRhT2Zmc2V0LCBkYXRhTGVuZ3RoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkYXRhT2Zmc2V0ICs9IGRhdGFMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBfd2lkdGggKj0gMC41O1xyXG4gICAgICAgICAgICAgICAgX2hlaWdodCAqPSAwLjU7XHJcbiAgICAgICAgICAgICAgICBtaXBtYXBzW2ldID0gYnl0ZUFycmF5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRleHR1cmVzW2ZdLnBpeGVscyA9IG1pcG1hcHNbMF07XHJcbiAgICAgICAgICAgIGlmIChoYXNNaXBtYXApIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmVzW2ZdLm1pcG1hcHMgPSBtaXBtYXBzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICAvLyByZXR1cm4gaXNDdWJlTWFwID8gdGV4dHVyZXMgOiB0ZXh0dXJlc1swXTtcclxuICAgICAgICBpZiAob3V0KSB7XHJcbiAgICAgICAgICAgIG91dC53aWR0aCA9IHRleHR1cmVzWzBdLndpZHRoO1xyXG4gICAgICAgICAgICBvdXQuaGVpZ2h0ID0gdGV4dHVyZXNbMF0uaGVpZ2h0O1xyXG4gICAgICAgICAgICBvdXQuZm9ybWF0ID0gdGV4dHVyZXNbMF0uZm9ybWF0O1xyXG4gICAgICAgICAgICBvdXQucGl4ZWxzID0gdGV4dHVyZXNbMF0ucGl4ZWxzO1xyXG4gICAgICAgICAgICBvdXQubWlwbWFwcyA9IHRleHR1cmVzWzBdLm1pcG1hcHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZXNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgcmV0O1xyXG4iLCJpbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG52YXIgdG9DaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcclxuXHJcbnZhciBNSU5FTEVOID0gODtcclxudmFyIE1BWEVMRU4gPSAweDdmZmY7XHJcbmZ1bmN0aW9uIHJnYmUyZmxvYXQocmdiZSwgYnVmZmVyLCBvZmZzZXQsIGV4cG9zdXJlKSB7XHJcbiAgICBpZiAocmdiZVszXSA+IDApIHtcclxuICAgICAgICB2YXIgZiA9IE1hdGgucG93KDIuMCwgcmdiZVszXSAtIDEyOCAtIDggKyBleHBvc3VyZSk7XHJcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDBdID0gcmdiZVswXSAqIGY7XHJcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDFdID0gcmdiZVsxXSAqIGY7XHJcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDJdID0gcmdiZVsyXSAqIGY7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBidWZmZXJbb2Zmc2V0ICsgMF0gPSAwO1xyXG4gICAgICAgIGJ1ZmZlcltvZmZzZXQgKyAxXSA9IDA7XHJcbiAgICAgICAgYnVmZmVyW29mZnNldCArIDJdID0gMDtcclxuICAgIH1cclxuICAgIGJ1ZmZlcltvZmZzZXQgKyAzXSA9IDEuMDtcclxuICAgIHJldHVybiBidWZmZXI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVpbnQ4MnN0cmluZyhhcnJheSwgb2Zmc2V0LCBzaXplKSB7XHJcbiAgICB2YXIgc3RyID0gJyc7XHJcbiAgICBmb3IgKHZhciBpID0gb2Zmc2V0OyBpIDwgc2l6ZTsgaSsrKSB7XHJcbiAgICAgICAgc3RyICs9IHRvQ2hhcihhcnJheVtpXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb3B5cmdiZShzLCB0KSB7XHJcbiAgICB0WzBdID0gc1swXTtcclxuICAgIHRbMV0gPSBzWzFdO1xyXG4gICAgdFsyXSA9IHNbMl07XHJcbiAgICB0WzNdID0gc1szXTtcclxufVxyXG5cclxuLy8gVE9ETyA6IGNoZWNrXHJcbmZ1bmN0aW9uIG9sZFJlYWRDb2xvcnMoc2NhbiwgYnVmZmVyLCBvZmZzZXQsIHhtYXgpIHtcclxuICAgIHZhciByc2hpZnQgPSAwLCB4ID0gMCwgbGVuID0geG1heDtcclxuICAgIHdoaWxlIChsZW4gPiAwKSB7XHJcbiAgICAgICAgc2Nhblt4XVswXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgc2Nhblt4XVsxXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgc2Nhblt4XVsyXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgc2Nhblt4XVszXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICAgICAgaWYgKHNjYW5beF1bMF0gPT09IDEgJiYgc2Nhblt4XVsxXSA9PT0gMSAmJiBzY2FuW3hdWzJdID09PSAxKSB7XHJcbiAgICAgICAgICAgIC8vIGV4cCBpcyBjb3VudCBvZiByZXBlYXRlZCBwaXhlbHNcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IChzY2FuW3hdWzNdIDw8IHJzaGlmdCkgPj4+IDA7IGkgPiAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgIGNvcHlyZ2JlKHNjYW5beC0xXSwgc2Nhblt4XSk7XHJcbiAgICAgICAgICAgICAgICB4Kys7XHJcbiAgICAgICAgICAgICAgICBsZW4tLTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByc2hpZnQgKz0gODtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB4Kys7XHJcbiAgICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgICByc2hpZnQgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvZmZzZXQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlYWRDb2xvcnMoc2NhbiwgYnVmZmVyLCBvZmZzZXQsIHhtYXgpIHtcclxuICAgIGlmICgoeG1heCA8IE1JTkVMRU4pIHwgKHhtYXggPiBNQVhFTEVOKSkge1xyXG4gICAgICAgIHJldHVybiBvbGRSZWFkQ29sb3JzKHNjYW4sIGJ1ZmZlciwgb2Zmc2V0LCB4bWF4KTtcclxuICAgIH1cclxuICAgIHZhciBpID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgIGlmIChpICE9IDIpIHtcclxuICAgICAgICByZXR1cm4gb2xkUmVhZENvbG9ycyhzY2FuLCBidWZmZXIsIG9mZnNldCAtIDEsIHhtYXgpO1xyXG4gICAgfVxyXG4gICAgc2NhblswXVsxXSA9IGJ1ZmZlcltvZmZzZXQrK107XHJcbiAgICBzY2FuWzBdWzJdID0gYnVmZmVyW29mZnNldCsrXTtcclxuXHJcbiAgICBpID0gYnVmZmVyW29mZnNldCsrXTtcclxuICAgIGlmICgoKChzY2FuWzBdWzJdIDw8IDgpID4+PiAwKSB8IGkpID4+PiAwICE9PSB4bWF4KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xyXG4gICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgeG1heDspIHtcclxuICAgICAgICAgICAgdmFyIGNvZGUgPSBidWZmZXJbb2Zmc2V0KytdO1xyXG4gICAgICAgICAgICBpZiAoY29kZSA+IDEyOCkge1xyXG4gICAgICAgICAgICAgICAgY29kZSA9IChjb2RlICYgMTI3KSA+Pj4gMDtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBidWZmZXJbb2Zmc2V0KytdO1xyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvZGUtLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjYW5beCsrXVtpXSA9IHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChjb2RlLS0pIHtcclxuICAgICAgICAgICAgICAgICAgICBzY2FuW3grK11baV0gPSBidWZmZXJbb2Zmc2V0KytdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9mZnNldDtcclxufVxyXG5cclxuXHJcbnZhciByZXQgPSB7XHJcbiAgICAvLyBodHRwOi8vd3d3LmdyYXBoaWNzLmNvcm5lbGwuZWR1L35iancvcmdiZS5odG1sXHJcbiAgICAvLyBCbGVuZGVyIHNvdXJjZVxyXG4gICAgLy8gaHR0cDovL3JhZHNpdGUubGJsLmdvdi9yYWRpYW5jZS9yZWZlci9Ob3Rlcy9waWN0dXJlX2Zvcm1hdC5odG1sXHJcbiAgICBwYXJzZVJHQkU6IGZ1bmN0aW9uKGFycmF5QnVmZmVyLCB0ZXh0dXJlLCBleHBvc3VyZSkge1xyXG4gICAgICAgIGlmIChleHBvc3VyZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGV4cG9zdXJlID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGRhdGEgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7XHJcbiAgICAgICAgdmFyIHNpemUgPSBkYXRhLmxlbmd0aDtcclxuICAgICAgICBpZiAodWludDgyc3RyaW5nKGRhdGEsIDAsIDIpICE9PSAnIz8nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZmluZCBlbXB0eSBsaW5lLCBuZXh0IGxpbmUgaXMgcmVzb2x1dGlvbiBpbmZvXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPCBzaXplOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRvQ2hhcihkYXRhW2ldKSA9PT0gJ1xcbicgJiYgdG9DaGFyKGRhdGFbaSsxXSkgPT09ICdcXG4nKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaSA+PSBzaXplKSB7IC8vIG5vdCBmb3VuZFxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGZpbmQgcmVzb2x1dGlvbiBpbmZvIGxpbmVcclxuICAgICAgICBpICs9IDI7XHJcbiAgICAgICAgdmFyIHN0ciA9ICcnO1xyXG4gICAgICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBfY2hhciA9IHRvQ2hhcihkYXRhW2ldKTtcclxuICAgICAgICAgICAgaWYgKF9jaGFyID09PSAnXFxuJykge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3RyICs9IF9jaGFyO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAtWSBNICtYIE5cclxuICAgICAgICB2YXIgdG1wID0gc3RyLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IHBhcnNlSW50KHRtcFsxXSk7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gcGFyc2VJbnQodG1wWzNdKTtcclxuICAgICAgICBpZiAoIXdpZHRoIHx8ICFoZWlnaHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVhZCBhbmQgZGVjb2RlIGFjdHVhbCBkYXRhXHJcbiAgICAgICAgdmFyIG9mZnNldCA9IGkrMTtcclxuICAgICAgICB2YXIgc2NhbmxpbmUgPSBbXTtcclxuICAgICAgICAvLyBtZW16ZXJvXHJcbiAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XHJcbiAgICAgICAgICAgIHNjYW5saW5lW3hdID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBzY2FubGluZVt4XVtqXSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBpeGVscyA9IG5ldyBGbG9hdDMyQXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTtcclxuICAgICAgICB2YXIgb2Zmc2V0MiA9IDA7XHJcbiAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZENvbG9ycyhzY2FubGluZSwgZGF0YSwgb2Zmc2V0LCB3aWR0aCk7XHJcbiAgICAgICAgICAgIGlmICghb2Zmc2V0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcclxuICAgICAgICAgICAgICAgIHJnYmUyZmxvYXQoc2NhbmxpbmVbeF0sIHBpeGVscywgb2Zmc2V0MiwgZXhwb3N1cmUpO1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0MiArPSA0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRleHR1cmUpIHtcclxuICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGV4dHVyZS53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRleHR1cmUuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgIHRleHR1cmUucGl4ZWxzID0gcGl4ZWxzO1xyXG4gICAgICAgIC8vIEhBTEZfRkxPQVQgY2FuJ3QgdXNlIEZsb2F0MzJBcnJheVxyXG4gICAgICAgIHRleHR1cmUudHlwZSA9IFRleHR1cmUuRkxPQVQ7XHJcbiAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhcnNlUkdCRUZyb21QTkc6IGZ1bmN0aW9uKHBuZykge1xyXG5cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHJldDtcclxuIiwiaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IEVudmlyb25tZW50TWFwUGFzcyBmcm9tICcuLi9wcmVQYXNzL0Vudmlyb25tZW50TWFwJztcclxuaW1wb3J0IFNreWRvbWUgZnJvbSAnLi4vcGx1Z2luL1NreWRvbWUnO1xyXG5pbXBvcnQgU2NlbmUgZnJvbSAnLi4vU2NlbmUnO1xyXG5cclxuaW1wb3J0IGRkcyBmcm9tICcuL2Rkcyc7XHJcbmltcG9ydCBoZHIgZnJvbSAnLi9oZHInO1xyXG5cclxuLyoqXHJcbiAqIEBhbGlhcyBjbGF5LnV0aWwudGV4dHVyZVxyXG4gKi9cclxudmFyIHRleHR1cmVVdGlsID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd8b2JqZWN0fSBwYXRoXHJcbiAgICAgKiBAcGFyYW0gIHtvYmplY3R9IFtvcHRpb25dXHJcbiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gW29uc3VjY2Vzc11cclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb25lcnJvcl1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZX1cclxuICAgICAqL1xyXG4gICAgbG9hZFRleHR1cmU6IGZ1bmN0aW9uIChwYXRoLCBvcHRpb24sIG9uc3VjY2Vzcywgb25lcnJvcikge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlO1xyXG4gICAgICAgIGlmICh0eXBlb2Yob3B0aW9uKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBvbnN1Y2Nlc3MgPSBvcHRpb247XHJcbiAgICAgICAgICAgIG9uZXJyb3IgPSBvbnN1Y2Nlc3M7XHJcbiAgICAgICAgICAgIG9wdGlvbiA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb3B0aW9uID0gb3B0aW9uIHx8IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mKHBhdGgpID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAocGF0aC5tYXRjaCgvLmhkciQvKSB8fCBvcHRpb24uZmlsZVR5cGUgPT09ICdoZHInKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHNSR0I6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRleHR1cmVVdGlsLl9mZXRjaFRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZHIucGFyc2VSR0JFKGRhdGEsIHRleHR1cmUsIG9wdGlvbi5leHBvc3VyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUuZGlydHkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25zdWNjZXNzICYmIG9uc3VjY2Vzcyh0ZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIG9uZXJyb3JcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChwYXRoLm1hdGNoKC8uZGRzJC8pIHx8IG9wdGlvbi5maWxlVHlwZSA9PT0gJ2RkcycpIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDBcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZVV0aWwuX2ZldGNoVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRkcy5wYXJzZShkYXRhLCB0ZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5kaXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbnN1Y2Nlc3MgJiYgb25zdWNjZXNzKHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgb25lcnJvclxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKCk7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLmxvYWQocGF0aCk7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnN1Y2Nlc3Mob25zdWNjZXNzKTtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUuZXJyb3Iob25lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHBhdGggPT09ICdvYmplY3QnICYmIHR5cGVvZihwYXRoLnB4KSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdGV4dHVyZSA9IG5ldyBUZXh0dXJlQ3ViZSgpO1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmxvYWQocGF0aCk7XHJcbiAgICAgICAgICAgIHRleHR1cmUuc3VjY2VzcyhvbnN1Y2Nlc3MpO1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmVycm9yKG9uZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMb2FkIGEgcGFub3JhbWEgdGV4dHVyZSBhbmQgcmVuZGVyIGl0IHRvIGEgY3ViZSBtYXBcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHBhdGhcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZUN1YmV9IGN1YmVNYXBcclxuICAgICAqIEBwYXJhbSAge29iamVjdH0gW29wdGlvbl1cclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtvcHRpb24uZW5jb2RlUkdCTV1cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW29wdGlvbi5leHBvc3VyZV1cclxuICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBbb25zdWNjZXNzXVxyXG4gICAgICogQHBhcmFtICB7RnVuY3Rpb259IFtvbmVycm9yXVxyXG4gICAgICovXHJcbiAgICBsb2FkUGFub3JhbWE6IGZ1bmN0aW9uIChyZW5kZXJlciwgcGF0aCwgY3ViZU1hcCwgb3B0aW9uLCBvbnN1Y2Nlc3MsIG9uZXJyb3IpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Yob3B0aW9uKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBvbnN1Y2Nlc3MgPSBvcHRpb247XHJcbiAgICAgICAgICAgIG9uZXJyb3IgPSBvbnN1Y2Nlc3M7XHJcbiAgICAgICAgICAgIG9wdGlvbiA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb3B0aW9uID0gb3B0aW9uIHx8IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGV4dHVyZVV0aWwubG9hZFRleHR1cmUocGF0aCwgb3B0aW9uLCBmdW5jdGlvbiAodGV4dHVyZSkge1xyXG4gICAgICAgICAgICAvLyBQRU5ESU5HXHJcbiAgICAgICAgICAgIHRleHR1cmUuZmxpcFkgPSBvcHRpb24uZmxpcFkgfHwgZmFsc2U7XHJcbiAgICAgICAgICAgIHNlbGYucGFub3JhbWFUb0N1YmVNYXAocmVuZGVyZXIsIHRleHR1cmUsIGN1YmVNYXAsIG9wdGlvbik7XHJcbiAgICAgICAgICAgIHRleHR1cmUuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIG9uc3VjY2VzcyAmJiBvbnN1Y2Nlc3MoY3ViZU1hcCk7XHJcbiAgICAgICAgfSwgb25lcnJvcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIGEgcGFub3JhbWEgdGV4dHVyZSB0byBhIGN1YmUgbWFwXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtICB7Y2xheS5UZXh0dXJlMkR9IHBhbm9yYW1hTWFwXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlRleHR1cmVDdWJlfSBjdWJlTWFwXHJcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvblxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW29wdGlvbi5lbmNvZGVSR0JNXVxyXG4gICAgICovXHJcbiAgICBwYW5vcmFtYVRvQ3ViZU1hcDogZnVuY3Rpb24gKHJlbmRlcmVyLCBwYW5vcmFtYU1hcCwgY3ViZU1hcCwgb3B0aW9uKSB7XHJcbiAgICAgICAgdmFyIGVudmlyb25tZW50TWFwUGFzcyA9IG5ldyBFbnZpcm9ubWVudE1hcFBhc3MoKTtcclxuICAgICAgICB2YXIgc2t5ZG9tZSA9IG5ldyBTa3lkb21lKHtcclxuICAgICAgICAgICAgc2NlbmU6IG5ldyBTY2VuZSgpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2t5ZG9tZS5zZXRFbnZpcm9ubWVudE1hcChwYW5vcmFtYU1hcCk7XHJcblxyXG4gICAgICAgIG9wdGlvbiA9IG9wdGlvbiB8fCB7fTtcclxuICAgICAgICBpZiAob3B0aW9uLmVuY29kZVJHQk0pIHtcclxuICAgICAgICAgICAgc2t5ZG9tZS5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fRU5DT0RFJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTaGFyZSBzUkdCXHJcbiAgICAgICAgY3ViZU1hcC5zUkdCID0gcGFub3JhbWFNYXAuc1JHQjtcclxuXHJcbiAgICAgICAgZW52aXJvbm1lbnRNYXBQYXNzLnRleHR1cmUgPSBjdWJlTWFwO1xyXG4gICAgICAgIGVudmlyb25tZW50TWFwUGFzcy5yZW5kZXIocmVuZGVyZXIsIHNreWRvbWUuc2NlbmUpO1xyXG4gICAgICAgIGVudmlyb25tZW50TWFwUGFzcy50ZXh0dXJlID0gbnVsbDtcclxuICAgICAgICBlbnZpcm9ubWVudE1hcFBhc3MuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgcmV0dXJuIGN1YmVNYXA7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBoZWlnaHQgbWFwIHRvIG5vcm1hbCBtYXBcclxuICAgICAqIEBwYXJhbSB7SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbWVudH0gaW1hZ2VcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoZWNrQnVtcD1mYWxzZV1cclxuICAgICAqIEByZXR1cm4ge0hUTUxDYW52YXNFbGVtZW50fVxyXG4gICAgICovXHJcbiAgICBoZWlnaHRUb05vcm1hbDogZnVuY3Rpb24gKGltYWdlLCBjaGVja0J1bXApIHtcclxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gY2FudmFzLndpZHRoID0gaW1hZ2Uud2lkdGg7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IGNhbnZhcy5oZWlnaHQgPSBpbWFnZS5oZWlnaHQ7XHJcbiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIGNoZWNrQnVtcCA9IGNoZWNrQnVtcCB8fCBmYWxzZTtcclxuICAgICAgICB2YXIgc3JjRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgdmFyIGRzdERhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3JjRGF0YS5kYXRhLmxlbmd0aDsgaSArPSA0KSB7XHJcbiAgICAgICAgICAgIGlmIChjaGVja0J1bXApIHtcclxuICAgICAgICAgICAgICAgIHZhciByID0gc3JjRGF0YS5kYXRhW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGcgPSBzcmNEYXRhLmRhdGFbaSArIDFdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGIgPSBzcmNEYXRhLmRhdGFbaSArIDJdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpZmYgPSBNYXRoLmFicyhyIC0gZykgKyBNYXRoLmFicyhnIC0gYik7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlmZiA+IDIwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdHaXZlbiBpbWFnZSBpcyBub3QgYSBoZWlnaHQgbWFwJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltYWdlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIE1vZGlmaWVkIGZyb20gaHR0cDovL21yZG9vYi5jb20vbGFiL2phdmFzY3JpcHQvaGVpZ2h0Mm5vcm1hbC9cclxuICAgICAgICAgICAgdmFyIHgxLCB5MSwgeDIsIHkyO1xyXG4gICAgICAgICAgICBpZiAoaSAlICh3aWR0aCAqIDQpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBsZWZ0IGVkZ2VcclxuICAgICAgICAgICAgICAgIHgxID0gc3JjRGF0YS5kYXRhW2ldO1xyXG4gICAgICAgICAgICAgICAgeDIgPSBzcmNEYXRhLmRhdGFbaSArIDRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGkgJSAod2lkdGggKiA0KSA9PT0gKHdpZHRoIC0gMSkgKiA0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyByaWdodCBlZGdlXHJcbiAgICAgICAgICAgICAgICB4MSA9IHNyY0RhdGEuZGF0YVtpIC0gNF07XHJcbiAgICAgICAgICAgICAgICB4MiA9IHNyY0RhdGEuZGF0YVtpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHgxID0gc3JjRGF0YS5kYXRhW2kgLSA0XTtcclxuICAgICAgICAgICAgICAgIHgyID0gc3JjRGF0YS5kYXRhW2kgKyA0XTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGkgPCB3aWR0aCAqIDQpIHtcclxuICAgICAgICAgICAgICAgIC8vIHRvcCBlZGdlXHJcbiAgICAgICAgICAgICAgICB5MSA9IHNyY0RhdGEuZGF0YVtpXTtcclxuICAgICAgICAgICAgICAgIHkyID0gc3JjRGF0YS5kYXRhW2kgKyB3aWR0aCAqIDRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGkgPiB3aWR0aCAqIChoZWlnaHQgLSAxKSAqIDQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGJvdHRvbSBlZGdlXHJcbiAgICAgICAgICAgICAgICB5MSA9IHNyY0RhdGEuZGF0YVtpIC0gd2lkdGggKiA0XTtcclxuICAgICAgICAgICAgICAgIHkyID0gc3JjRGF0YS5kYXRhW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgeTEgPSBzcmNEYXRhLmRhdGFbaSAtIHdpZHRoICogNF07XHJcbiAgICAgICAgICAgICAgICB5MiA9IHNyY0RhdGEuZGF0YVtpICsgd2lkdGggKiA0XTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZHN0RGF0YS5kYXRhW2ldID0gKHgxIC0geDIpICsgMTI3O1xyXG4gICAgICAgICAgICBkc3REYXRhLmRhdGFbaSArIDFdID0gKHkxIC0geTIpICsgMTI3O1xyXG4gICAgICAgICAgICBkc3REYXRhLmRhdGFbaSArIDJdID0gMjU1O1xyXG4gICAgICAgICAgICBkc3REYXRhLmRhdGFbaSArIDNdID0gMjU1O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdHgucHV0SW1hZ2VEYXRhKGRzdERhdGEsIDAsIDApO1xyXG4gICAgICAgIHJldHVybiBjYW52YXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBoZWlnaHQgbWFwIHRvIG5vcm1hbCBtYXBcclxuICAgICAqIEBwYXJhbSB7SFRNTEltYWdlRWxlbWVudHxIVE1MQ2FudmFzRWxlbWVudH0gaW1hZ2VcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoZWNrQnVtcD1mYWxzZV1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdGhyZXNob2xkPTIwXVxyXG4gICAgICogQHJldHVybiB7SFRNTENhbnZhc0VsZW1lbnR9XHJcbiAgICAgKi9cclxuICAgIGlzSGVpZ2h0SW1hZ2U6IGZ1bmN0aW9uIChpbWcsIGRvd25TY2FsZVNpemUsIHRocmVzaG9sZCkge1xyXG4gICAgICAgIGlmICghaW1nIHx8ICFpbWcud2lkdGggfHwgIWltZy5oZWlnaHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICB2YXIgc2l6ZSA9IGRvd25TY2FsZVNpemUgfHwgMzI7XHJcbiAgICAgICAgdGhyZXNob2xkID0gdGhyZXNob2xkIHx8IDIwO1xyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IGNhbnZhcy5oZWlnaHQgPSBzaXplO1xyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCBzaXplLCBzaXplKTtcclxuICAgICAgICB2YXIgc3JjRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgc2l6ZSwgc2l6ZSk7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcmNEYXRhLmRhdGEubGVuZ3RoOyBpICs9IDQpIHtcclxuICAgICAgICAgICAgdmFyIHIgPSBzcmNEYXRhLmRhdGFbaV07XHJcbiAgICAgICAgICAgIHZhciBnID0gc3JjRGF0YS5kYXRhW2kgKyAxXTtcclxuICAgICAgICAgICAgdmFyIGIgPSBzcmNEYXRhLmRhdGFbaSArIDJdO1xyXG4gICAgICAgICAgICB2YXIgZGlmZiA9IE1hdGguYWJzKHIgLSBnKSArIE1hdGguYWJzKGcgLSBiKTtcclxuICAgICAgICAgICAgaWYgKGRpZmYgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgX2ZldGNoVGV4dHVyZTogZnVuY3Rpb24gKHBhdGgsIG9uc3VjY2Vzcywgb25lcnJvcikge1xyXG4gICAgICAgIHZlbmRvci5yZXF1ZXN0LmdldCh7XHJcbiAgICAgICAgICAgIHVybDogcGF0aCxcclxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLFxyXG4gICAgICAgICAgICBvbmxvYWQ6IG9uc3VjY2VzcyxcclxuICAgICAgICAgICAgb25lcnJvcjogb25lcnJvclxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIGNoZXNzYm9hcmQgdGV4dHVyZVxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbc2l6ZV1cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gW3VuaXRTaXplXVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBbY29sb3IxXVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBbY29sb3IyXVxyXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgKi9cclxuICAgIGNyZWF0ZUNoZXNzYm9hcmQ6IGZ1bmN0aW9uIChzaXplLCB1bml0U2l6ZSwgY29sb3IxLCBjb2xvcjIpIHtcclxuICAgICAgICBzaXplID0gc2l6ZSB8fCA1MTI7XHJcbiAgICAgICAgdW5pdFNpemUgPSB1bml0U2l6ZSB8fCA2NDtcclxuICAgICAgICBjb2xvcjEgPSBjb2xvcjEgfHwgJ2JsYWNrJztcclxuICAgICAgICBjb2xvcjIgPSBjb2xvcjIgfHwgJ3doaXRlJztcclxuXHJcbiAgICAgICAgdmFyIHJlcGVhdCA9IE1hdGguY2VpbChzaXplIC8gdW5pdFNpemUpO1xyXG5cclxuICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgY2FudmFzLndpZHRoID0gc2l6ZTtcclxuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gc2l6ZTtcclxuICAgICAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGNvbG9yMjtcclxuICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgc2l6ZSwgc2l6ZSk7XHJcblxyXG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvcjE7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXBlYXQ7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJlcGVhdDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaXNGaWxsID0gaiAlIDIgPyAoaSAlIDIpIDogKGkgJSAyIC0gMSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGaWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KGkgKiB1bml0U2l6ZSwgaiAqIHVuaXRTaXplLCB1bml0U2l6ZSwgdW5pdFNpemUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICBpbWFnZTogY2FudmFzLFxyXG4gICAgICAgICAgICBhbmlzb3Ryb3BpYzogOFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYSBibGFuayBwdXJlIGNvbG9yIDF4MSB0ZXh0dXJlXHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGNvbG9yXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAqL1xyXG4gICAgY3JlYXRlQmxhbms6IGZ1bmN0aW9uIChjb2xvcikge1xyXG4gICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBjYW52YXMud2lkdGggPSAxO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xyXG4gICAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBjdHguZmlsbFN0eWxlID0gY29sb3I7XHJcbiAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEsIDEpO1xyXG5cclxuICAgICAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICBpbWFnZTogY2FudmFzXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdGV4dHVyZVV0aWw7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiI2RlZmluZSBTQU1QTEVfTlVNQkVSIDEwMjRcXG4jZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzlcXG51bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxEaXN0cmlidXRpb247XFxudW5pZm9ybSB2ZWMyIHZpZXdwb3J0U2l6ZSA6IFs1MTIsIDI1Nl07XFxuY29uc3QgdmVjMyBOID0gdmVjMygwLjAsIDAuMCwgMS4wKTtcXG5jb25zdCBmbG9hdCBmU2FtcGxlTnVtYmVyID0gZmxvYXQoU0FNUExFX05VTUJFUik7XFxudmVjMyBpbXBvcnRhbmNlU2FtcGxlTm9ybWFsKGZsb2F0IGksIGZsb2F0IHJvdWdobmVzcywgdmVjMyBOKSB7XFxuIHZlYzMgSCA9IHRleHR1cmUyRChub3JtYWxEaXN0cmlidXRpb24sIHZlYzIocm91Z2huZXNzLCBpKSkucmdiO1xcbiB2ZWMzIHVwVmVjdG9yID0gYWJzKE4ueSkgPiAwLjk5OSA/IHZlYzMoMS4wLCAwLjAsIDAuMCkgOiB2ZWMzKDAuMCwgMS4wLCAwLjApO1xcbiB2ZWMzIHRhbmdlbnRYID0gbm9ybWFsaXplKGNyb3NzKE4sIHVwVmVjdG9yKSk7XFxuIHZlYzMgdGFuZ2VudFogPSBjcm9zcyhOLCB0YW5nZW50WCk7XFxuIHJldHVybiBub3JtYWxpemUodGFuZ2VudFggKiBILnggKyBOICogSC55ICsgdGFuZ2VudFogKiBILnopO1xcbn1cXG5mbG9hdCBHX1NtaXRoKGZsb2F0IHJvdWdobmVzcywgZmxvYXQgTm9WLCBmbG9hdCBOb0wpIHtcXG4gZmxvYXQgayA9IHJvdWdobmVzcyAqIHJvdWdobmVzcyAvIDIuMDtcXG4gZmxvYXQgRzFWID0gTm9WIC8gKE5vViAqICgxLjAgLSBrKSArIGspO1xcbiBmbG9hdCBHMUwgPSBOb0wgLyAoTm9MICogKDEuMCAtIGspICsgayk7XFxuIHJldHVybiBHMUwgKiBHMVY7XFxufVxcbnZvaWQgbWFpbigpIHtcXG4gdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eSAvIHZpZXdwb3J0U2l6ZTtcXG4gZmxvYXQgTm9WID0gdXYueDtcXG4gZmxvYXQgcm91Z2huZXNzID0gdXYueTtcXG4gdmVjMyBWO1xcbiBWLnggPSBzcXJ0KDEuMCAtIE5vViAqIE5vVik7XFxuIFYueSA9IDAuMDtcXG4gVi56ID0gTm9WO1xcbiBmbG9hdCBBID0gMC4wO1xcbiBmbG9hdCBCID0gMC4wO1xcbiBmb3IgKGludCBpID0gMDsgaSA8IFNBTVBMRV9OVU1CRVI7IGkrKykge1xcbiB2ZWMzIEggPSBpbXBvcnRhbmNlU2FtcGxlTm9ybWFsKGZsb2F0KGkpIC8gZlNhbXBsZU51bWJlciwgcm91Z2huZXNzLCBOKTtcXG4gdmVjMyBMID0gcmVmbGVjdCgtViwgSCk7XFxuIGZsb2F0IE5vTCA9IGNsYW1wKEwueiwgMC4wLCAxLjApO1xcbiBmbG9hdCBOb0ggPSBjbGFtcChILnosIDAuMCwgMS4wKTtcXG4gZmxvYXQgVm9IID0gY2xhbXAoZG90KFYsIEgpLCAwLjAsIDEuMCk7XFxuIGlmIChOb0wgPiAwLjApIHtcXG4gZmxvYXQgRyA9IEdfU21pdGgocm91Z2huZXNzLCBOb1YsIE5vTCk7XFxuIGZsb2F0IEdfVmlzID0gRyAqIFZvSCAvIChOb0ggKiBOb1YpO1xcbiBmbG9hdCBGYyA9IHBvdygxLjAgLSBWb0gsIDUuMCk7XFxuIEEgKz0gKDEuMCAtIEZjKSAqIEdfVmlzO1xcbiBCICs9IEZjICogR19WaXM7XFxuIH1cXG4gfVxcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KHZlYzIoQSwgQikgLyBmU2FtcGxlTnVtYmVyLCAwLjAsIDEuMCk7XFxufVxcblwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIiNkZWZpbmUgU0hBREVSX05BTUUgcHJlZmlsdGVyXFxuI2RlZmluZSBTQU1QTEVfTlVNQkVSIDEwMjRcXG4jZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzlcXG51bmlmb3JtIG1hdDQgdmlld0ludmVyc2UgOiBWSUVXSU5WRVJTRTtcXG51bmlmb3JtIHNhbXBsZXJDdWJlIGVudmlyb25tZW50TWFwO1xcbnVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbERpc3RyaWJ1dGlvbjtcXG51bmlmb3JtIGZsb2F0IHJvdWdobmVzcyA6IDAuNTtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52ZWMzIGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQgaSwgZmxvYXQgcm91Z2huZXNzLCB2ZWMzIE4pIHtcXG4gdmVjMyBIID0gdGV4dHVyZTJEKG5vcm1hbERpc3RyaWJ1dGlvbiwgdmVjMihyb3VnaG5lc3MsIGkpKS5yZ2I7XFxuIHZlYzMgdXBWZWN0b3IgPSBhYnMoTi55KSA+IDAuOTk5ID8gdmVjMygxLjAsIDAuMCwgMC4wKSA6IHZlYzMoMC4wLCAxLjAsIDAuMCk7XFxuIHZlYzMgdGFuZ2VudFggPSBub3JtYWxpemUoY3Jvc3MoTiwgdXBWZWN0b3IpKTtcXG4gdmVjMyB0YW5nZW50WiA9IGNyb3NzKE4sIHRhbmdlbnRYKTtcXG4gcmV0dXJuIG5vcm1hbGl6ZSh0YW5nZW50WCAqIEgueCArIE4gKiBILnkgKyB0YW5nZW50WiAqIEgueik7XFxufVxcbnZvaWQgbWFpbigpIHtcXG4gdmVjMyBleWVQb3MgPSB2aWV3SW52ZXJzZVszXS54eXo7XFxuIHZlYzMgViA9IG5vcm1hbGl6ZSh2X1dvcmxkUG9zaXRpb24gLSBleWVQb3MpO1xcbiB2ZWMzIE4gPSBWO1xcbiB2ZWMzIHByZWZpbHRlcmVkQ29sb3IgPSB2ZWMzKDAuMCk7XFxuIGZsb2F0IHRvdGFsV2VpZ2h0ID0gMC4wO1xcbiBmbG9hdCBmTWF4U2FtcGxlTnVtYmVyID0gZmxvYXQoU0FNUExFX05VTUJFUik7XFxuIGZvciAoaW50IGkgPSAwOyBpIDwgU0FNUExFX05VTUJFUjsgaSsrKSB7XFxuIHZlYzMgSCA9IGltcG9ydGFuY2VTYW1wbGVOb3JtYWwoZmxvYXQoaSkgLyBmTWF4U2FtcGxlTnVtYmVyLCByb3VnaG5lc3MsIE4pO1xcbiB2ZWMzIEwgPSByZWZsZWN0KC1WLCBIKTtcXG4gZmxvYXQgTm9MID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuIGlmIChOb0wgPiAwLjApIHtcXG4gcHJlZmlsdGVyZWRDb2xvciArPSBkZWNvZGVIRFIodGV4dHVyZUN1YmUoZW52aXJvbm1lbnRNYXAsIEwpKS5yZ2IgKiBOb0w7XFxuIHRvdGFsV2VpZ2h0ICs9IE5vTDtcXG4gfVxcbiB9XFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUih2ZWM0KHByZWZpbHRlcmVkQ29sb3IgLyB0b3RhbFdlaWdodCwgMS4wKSk7XFxufVxcblwiO1xyXG4iLCIvLyBDdWJlbWFwIHByZWZpbHRlciB1dGlsaXR5XHJcbi8vIGh0dHA6Ly93d3cudW5yZWFsZW5naW5lLmNvbS9maWxlcy9kb3dubG9hZHMvMjAxM1NpZ2dyYXBoUHJlc2VudGF0aW9uc05vdGVzLnBkZlxyXG4vLyBodHRwOi8vaHR0cC5kZXZlbG9wZXIubnZpZGlhLmNvbS9HUFVHZW1zMy9ncHVnZW1zM19jaDIwLmh0bWxcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcclxuaW1wb3J0IFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgU2t5Ym94IGZyb20gJy4uL3BsdWdpbi9Ta3lib3gnO1xyXG5pbXBvcnQgU2NlbmUgZnJvbSAnLi4vU2NlbmUnO1xyXG5pbXBvcnQgRW52aXJvbm1lbnRNYXBQYXNzIGZyb20gJy4uL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IHRleHR1cmVVdGlsIGZyb20gJy4vdGV4dHVyZSc7XHJcblxyXG5pbXBvcnQgaW50ZWdyYXRlQlJERlNoYWRlckNvZGUgZnJvbSAnLi9zaGFkZXIvaW50ZWdyYXRlQlJERi5nbHNsLmpzJztcclxuaW1wb3J0IHByZWZpbHRlckZyYWdDb2RlIGZyb20gJy4vc2hhZGVyL3ByZWZpbHRlci5nbHNsLmpzJztcclxuXHJcbnZhciBjdWJlbWFwVXRpbCA9IHt9O1xyXG5cclxudmFyIHRhcmdldHMgPSBbJ3B4JywgJ254JywgJ3B5JywgJ255JywgJ3B6JywgJ256J107XHJcblxyXG4vLyBUT0RPIERvd25zYW1wbGVcclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkudXRpbC5jdWJlbWFwLnByZWZpbHRlckVudmlyb25tZW50TWFwXHJcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZX0gZW52TWFwXHJcbiAqIEBwYXJhbSAge09iamVjdH0gW3RleHR1cmVPcHRzXVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFt0ZXh0dXJlT3B0cy53aWR0aD02NF1cclxuICogQHBhcmFtICB7bnVtYmVyfSBbdGV4dHVyZU9wdHMuaGVpZ2h0PTY0XVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFt0ZXh0dXJlT3B0cy50eXBlXVxyXG4gKiBAcGFyYW0gIHtib29sZWFufSBbdGV4dHVyZU9wdHMuZW5jb2RlUkdCTT1mYWxzZV1cclxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3RleHR1cmVPcHRzLmRlY29kZVJHQk09ZmFsc2VdXHJcbiAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZTJEfSBbbm9ybWFsRGlzdHJpYnV0aW9uXVxyXG4gKiBAcGFyYW0gIHtjbGF5LlRleHR1cmUyRH0gW2JyZGZMb29rdXBdXHJcbiAqL1xyXG5jdWJlbWFwVXRpbC5wcmVmaWx0ZXJFbnZpcm9ubWVudE1hcCA9IGZ1bmN0aW9uIChcclxuICAgIHJlbmRlcmVyLCBlbnZNYXAsIHRleHR1cmVPcHRzLCBub3JtYWxEaXN0cmlidXRpb24sIGJyZGZMb29rdXBcclxuKSB7XHJcbiAgICAvLyBOb3QgY3JlYXRlIG90aGVyIHJlbmRlcmVyLCBpdCBpcyBlYXN5IGhhdmluZyBpc3N1ZSBvZiBjcm9zcyByZWZlcmVuY2Ugb2YgcmVzb3VyY2VzIGxpa2UgZnJhbWVidWZmZXJcclxuICAgIC8vIFBFTkRJTkcgcHJlc2VydmVEcmF3aW5nQnVmZmVyP1xyXG4gICAgaWYgKCFicmRmTG9va3VwIHx8ICFub3JtYWxEaXN0cmlidXRpb24pIHtcclxuICAgICAgICBub3JtYWxEaXN0cmlidXRpb24gPSBjdWJlbWFwVXRpbC5nZW5lcmF0ZU5vcm1hbERpc3RyaWJ1dGlvbigpO1xyXG4gICAgICAgIGJyZGZMb29rdXAgPSBjdWJlbWFwVXRpbC5pbnRlZ3JhdGVCUkRGKHJlbmRlcmVyLCBub3JtYWxEaXN0cmlidXRpb24pO1xyXG4gICAgfVxyXG4gICAgdGV4dHVyZU9wdHMgPSB0ZXh0dXJlT3B0cyB8fCB7fTtcclxuXHJcbiAgICB2YXIgd2lkdGggPSB0ZXh0dXJlT3B0cy53aWR0aCB8fCA2NDtcclxuICAgIHZhciBoZWlnaHQgPSB0ZXh0dXJlT3B0cy5oZWlnaHQgfHwgNjQ7XHJcblxyXG4gICAgdmFyIHRleHR1cmVUeXBlID0gdGV4dHVyZU9wdHMudHlwZSB8fCBlbnZNYXAudHlwZTtcclxuXHJcbiAgICAvLyBVc2Ugc2FtZSB0eXBlIHdpdGggZ2l2ZW4gZW52TWFwXHJcbiAgICB2YXIgcHJlZmlsdGVyZWRDdWJlTWFwID0gbmV3IFRleHR1cmVDdWJlKHtcclxuICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgdHlwZTogdGV4dHVyZVR5cGUsXHJcbiAgICAgICAgZmxpcFk6IGZhbHNlLFxyXG4gICAgICAgIG1pcG1hcHM6IFtdXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIXByZWZpbHRlcmVkQ3ViZU1hcC5pc1Bvd2VyT2ZUd28oKSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybignV2lkdGggYW5kIGhlaWdodCBtdXN0IGJlIHBvd2VyIG9mIHR3byB0byBlbmFibGUgbWlwbWFwLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBzaXplID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCk7XHJcbiAgICB2YXIgbWlwbWFwTnVtID0gTWF0aC5sb2coc2l6ZSkgLyBNYXRoLmxvZygyKSArIDE7XHJcblxyXG4gICAgdmFyIHByZWZpbHRlck1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoe1xyXG4gICAgICAgICAgICB2ZXJ0ZXg6IFNoYWRlci5zb3VyY2UoJ2NsYXkuc2t5Ym94LnZlcnRleCcpLFxyXG4gICAgICAgICAgICBmcmFnbWVudDogcHJlZmlsdGVyRnJhZ0NvZGVcclxuICAgICAgICB9KVxyXG4gICAgfSk7XHJcbiAgICBwcmVmaWx0ZXJNYXRlcmlhbC5zZXQoJ25vcm1hbERpc3RyaWJ1dGlvbicsIG5vcm1hbERpc3RyaWJ1dGlvbik7XHJcblxyXG4gICAgdGV4dHVyZU9wdHMuZW5jb2RlUkdCTSAmJiBwcmVmaWx0ZXJNYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fRU5DT0RFJyk7XHJcbiAgICB0ZXh0dXJlT3B0cy5kZWNvZGVSR0JNICYmIHByZWZpbHRlck1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnUkdCTV9ERUNPREUnKTtcclxuXHJcbiAgICB2YXIgZHVtbXlTY2VuZSA9IG5ldyBTY2VuZSgpO1xyXG4gICAgdmFyIHNreUVudjtcclxuXHJcbiAgICBpZiAoZW52TWFwLnRleHR1cmVUeXBlID09PSAndGV4dHVyZTJEJykge1xyXG4gICAgICAgIC8vIENvbnZlcnQgcGFub3JhbWEgdG8gY3ViZW1hcFxyXG4gICAgICAgIHZhciBlbnZDdWJlbWFwID0gbmV3IFRleHR1cmVDdWJlKHtcclxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICAgICAgLy8gRklYTUUgRkxPQVQgdHlwZSB3aWxsIGNhdXNlIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCBlcnJvciBvbiBpT1NcclxuICAgICAgICAgICAgdHlwZTogdGV4dHVyZVR5cGUgPT09IFRleHR1cmUuRkxPQVQgP1xyXG4gICAgICAgICAgICAgICAgVGV4dHVyZS5IQUxGX0ZMT0FUIDogdGV4dHVyZVR5cGVcclxuICAgICAgICB9KTtcclxuICAgICAgICB0ZXh0dXJlVXRpbC5wYW5vcmFtYVRvQ3ViZU1hcChyZW5kZXJlciwgZW52TWFwLCBlbnZDdWJlbWFwLCB7XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkcgZW5jb2RlUkdCTSBzbyBpdCBjYW4gYmUgZGVjb2RlZCBhcyBSR0JNXHJcbiAgICAgICAgICAgIGVuY29kZVJHQk06IHRleHR1cmVPcHRzLmRlY29kZVJHQk1cclxuICAgICAgICB9KTtcclxuICAgICAgICBlbnZNYXAgPSBlbnZDdWJlbWFwO1xyXG4gICAgfVxyXG4gICAgc2t5RW52ID0gbmV3IFNreWJveCh7XHJcbiAgICAgICAgc2NlbmU6IGR1bW15U2NlbmUsXHJcbiAgICAgICAgbWF0ZXJpYWw6IHByZWZpbHRlck1hdGVyaWFsXHJcbiAgICB9KTtcclxuICAgIHNreUVudi5tYXRlcmlhbC5zZXQoJ2Vudmlyb25tZW50TWFwJywgZW52TWFwKTtcclxuXHJcbiAgICB2YXIgZW52TWFwUGFzcyA9IG5ldyBFbnZpcm9ubWVudE1hcFBhc3Moe1xyXG4gICAgICAgIHRleHR1cmU6IHByZWZpbHRlcmVkQ3ViZU1hcFxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gRm9yY2UgdG8gYmUgVU5TSUdORURfQllURVxyXG4gICAgaWYgKHRleHR1cmVPcHRzLmVuY29kZVJHQk0pIHtcclxuICAgICAgICB0ZXh0dXJlVHlwZSA9IHByZWZpbHRlcmVkQ3ViZU1hcC50eXBlID0gVGV4dHVyZS5VTlNJR05FRF9CWVRFO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciByZW5kZXJUYXJnZXRUbXAgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgdHlwZTogdGV4dHVyZVR5cGVcclxuICAgIH0pO1xyXG4gICAgdmFyIGZyYW1lQnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKHtcclxuICAgICAgICBkZXB0aEJ1ZmZlcjogZmFsc2VcclxuICAgIH0pO1xyXG4gICAgdmFyIEFycmF5Q3RvciA9IHZlbmRvclt0ZXh0dXJlVHlwZSA9PT0gVGV4dHVyZS5VTlNJR05FRF9CWVRFID8gJ1VpbnQ4QXJyYXknIDogJ0Zsb2F0MzJBcnJheSddO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaXBtYXBOdW07IGkrKykge1xyXG4gICAgICAgIC8vIGNvbnNvbGUudGltZSgncHJlZmlsdGVyJyk7XHJcbiAgICAgICAgcHJlZmlsdGVyZWRDdWJlTWFwLm1pcG1hcHNbaV0gPSB7XHJcbiAgICAgICAgICAgIHBpeGVsczoge31cclxuICAgICAgICB9O1xyXG4gICAgICAgIHNreUVudi5tYXRlcmlhbC5zZXQoJ3JvdWdobmVzcycsIGkgLyAobWlwbWFwTnVtIC0gMSkpO1xyXG5cclxuICAgICAgICAvLyBUd2VhayBmb3ZcclxuICAgICAgICAvLyBodHRwOi8vdGhlLXdpdG5lc3MubmV0L25ld3MvMjAxMi8wMi9zZWFtbGVzcy1jdWJlLW1hcC1maWx0ZXJpbmcvXHJcbiAgICAgICAgdmFyIG4gPSByZW5kZXJUYXJnZXRUbXAud2lkdGg7XHJcbiAgICAgICAgdmFyIGZvdiA9IDIgKiBNYXRoLmF0YW4obiAvIChuIC0gMC41KSkgLyBNYXRoLlBJICogMTgwO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRhcmdldHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgdmFyIHBpeGVscyA9IG5ldyBBcnJheUN0b3IocmVuZGVyVGFyZ2V0VG1wLndpZHRoICogcmVuZGVyVGFyZ2V0VG1wLmhlaWdodCAqIDQpO1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5hdHRhY2gocmVuZGVyVGFyZ2V0VG1wKTtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gZW52TWFwUGFzcy5nZXRDYW1lcmEodGFyZ2V0c1tqXSk7XHJcbiAgICAgICAgICAgIGNhbWVyYS5mb3YgPSBmb3Y7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlcihkdW1teVNjZW5lLCBjYW1lcmEpO1xyXG4gICAgICAgICAgICByZW5kZXJlci5nbC5yZWFkUGl4ZWxzKFxyXG4gICAgICAgICAgICAgICAgMCwgMCwgcmVuZGVyVGFyZ2V0VG1wLndpZHRoLCByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgVGV4dHVyZS5SR0JBLCB0ZXh0dXJlVHlwZSwgcGl4ZWxzXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAvLyB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICAgIC8vIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICAgICAgLy8gY2FudmFzLndpZHRoID0gcmVuZGVyVGFyZ2V0VG1wLndpZHRoO1xyXG4gICAgICAgICAgICAvLyBjYW52YXMuaGVpZ2h0ID0gcmVuZGVyVGFyZ2V0VG1wLmhlaWdodDtcclxuICAgICAgICAgICAgLy8gdmFyIGltYWdlRGF0YSA9IGN0eC5jcmVhdGVJbWFnZURhdGEocmVuZGVyVGFyZ2V0VG1wLndpZHRoLCByZW5kZXJUYXJnZXRUbXAuaGVpZ2h0KTtcclxuICAgICAgICAgICAgLy8gZm9yICh2YXIgayA9IDA7IGsgPCBwaXhlbHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgLy8gICAgIGltYWdlRGF0YS5kYXRhW2tdID0gcGl4ZWxzW2tdO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIC8vIGN0eC5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcclxuICAgICAgICAgICAgLy8gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjYW52YXMpO1xyXG5cclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgcHJlZmlsdGVyZWRDdWJlTWFwLm1pcG1hcHNbaV0ucGl4ZWxzW3RhcmdldHNbal1dID0gcGl4ZWxzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyVGFyZ2V0VG1wLndpZHRoIC89IDI7XHJcbiAgICAgICAgcmVuZGVyVGFyZ2V0VG1wLmhlaWdodCAvPSAyO1xyXG4gICAgICAgIHJlbmRlclRhcmdldFRtcC5kaXJ0eSgpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUudGltZUVuZCgncHJlZmlsdGVyJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnJhbWVCdWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICByZW5kZXJUYXJnZXRUbXAuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICBza3lFbnYuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAvLyBSZW1vdmUgZ3B1IHJlc291cmNlIGFsbHVjYXRlZCBpbiByZW5kZXJlclxyXG4gICAgbm9ybWFsRGlzdHJpYnV0aW9uLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG5cclxuICAgIC8vIHJlbmRlcmVyLmRpc3Bvc2UoKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGVudmlyb25tZW50TWFwOiBwcmVmaWx0ZXJlZEN1YmVNYXAsXHJcbiAgICAgICAgYnJkZkxvb2t1cDogYnJkZkxvb2t1cCxcclxuICAgICAgICBub3JtYWxEaXN0cmlidXRpb246IG5vcm1hbERpc3RyaWJ1dGlvbixcclxuICAgICAgICBtYXhNaXBtYXBMZXZlbDogbWlwbWFwTnVtXHJcbiAgICB9O1xyXG59O1xyXG5cclxuY3ViZW1hcFV0aWwuaW50ZWdyYXRlQlJERiA9IGZ1bmN0aW9uIChyZW5kZXJlciwgbm9ybWFsRGlzdHJpYnV0aW9uKSB7XHJcbiAgICBub3JtYWxEaXN0cmlidXRpb24gPSBub3JtYWxEaXN0cmlidXRpb24gfHwgY3ViZW1hcFV0aWwuZ2VuZXJhdGVOb3JtYWxEaXN0cmlidXRpb24oKTtcclxuICAgIHZhciBmcmFtZWJ1ZmZlciA9IG5ldyBGcmFtZUJ1ZmZlcih7XHJcbiAgICAgICAgZGVwdGhCdWZmZXI6IGZhbHNlXHJcbiAgICB9KTtcclxuICAgIHZhciBwYXNzID0gbmV3IFBhc3Moe1xyXG4gICAgICAgIGZyYWdtZW50OiBpbnRlZ3JhdGVCUkRGU2hhZGVyQ29kZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdmFyIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICB3aWR0aDogNTEyLFxyXG4gICAgICAgIGhlaWdodDogMjU2LFxyXG4gICAgICAgIHR5cGU6IFRleHR1cmUuSEFMRl9GTE9BVCxcclxuICAgICAgICB3cmFwUzogVGV4dHVyZS5DTEFNUF9UT19FREdFLFxyXG4gICAgICAgIHdyYXBUOiBUZXh0dXJlLkNMQU1QX1RPX0VER0UsXHJcbiAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgdXNlTWlwbWFwOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgICBwYXNzLnNldFVuaWZvcm0oJ25vcm1hbERpc3RyaWJ1dGlvbicsIG5vcm1hbERpc3RyaWJ1dGlvbik7XHJcbiAgICBwYXNzLnNldFVuaWZvcm0oJ3ZpZXdwb3J0U2l6ZScsIFs1MTIsIDI1Nl0pO1xyXG4gICAgcGFzcy5hdHRhY2hPdXRwdXQodGV4dHVyZSk7XHJcbiAgICBwYXNzLnJlbmRlcihyZW5kZXJlciwgZnJhbWVidWZmZXIpO1xyXG5cclxuICAgIC8vIEZJWE1FIE9ubHkgY2hyb21lIGFuZCBmaXJlZm94IGNhbiByZWFkUGl4ZWxzIHdpdGggZmxvYXQgdHlwZS5cclxuICAgIC8vIGZyYW1lYnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgLy8gdmFyIHBpeGVscyA9IG5ldyBGbG9hdDMyQXJyYXkoNTEyICogMjU2ICogNCk7XHJcbiAgICAvLyByZW5kZXJlci5nbC5yZWFkUGl4ZWxzKFxyXG4gICAgLy8gICAgIDAsIDAsIHRleHR1cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0LFxyXG4gICAgLy8gICAgIFRleHR1cmUuUkdCQSwgVGV4dHVyZS5GTE9BVCwgcGl4ZWxzXHJcbiAgICAvLyApO1xyXG4gICAgLy8gdGV4dHVyZS5waXhlbHMgPSBwaXhlbHM7XHJcbiAgICAvLyB0ZXh0dXJlLmZsaXBZID0gZmFsc2U7XHJcbiAgICAvLyB0ZXh0dXJlLmRpcnR5KCk7XHJcbiAgICAvLyBmcmFtZWJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgIGZyYW1lYnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG5cclxuICAgIHJldHVybiB0ZXh0dXJlO1xyXG59O1xyXG5cclxuY3ViZW1hcFV0aWwuZ2VuZXJhdGVOb3JtYWxEaXN0cmlidXRpb24gPSBmdW5jdGlvbiAocm91Z2huZXNzTGV2ZWxzLCBzYW1wbGVTaXplKSB7XHJcblxyXG4gICAgLy8gaHR0cDovL2hvbGdlci5kYW1tZXJ0ei5vcmcvc3R1ZmYvbm90ZXNfSGFtbWVyc2xleU9uSGVtaXNwaGVyZS5odG1sXHJcbiAgICAvLyBHTFNMIG5vdCBzdXBwb3J0IGJpdCBvcGVyYXRpb24sIHVzZSBsb29rdXAgaW5zdGVhZFxyXG4gICAgLy8gViAtPiBpIC8gTiwgVSAtPiByb3VnaG5lc3NcclxuICAgIHZhciByb3VnaG5lc3NMZXZlbHMgPSByb3VnaG5lc3NMZXZlbHMgfHwgMjU2O1xyXG4gICAgdmFyIHNhbXBsZVNpemUgPSBzYW1wbGVTaXplIHx8IDEwMjQ7XHJcblxyXG4gICAgdmFyIG5vcm1hbERpc3RyaWJ1dGlvbiA9IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgIHdpZHRoOiByb3VnaG5lc3NMZXZlbHMsXHJcbiAgICAgICAgaGVpZ2h0OiBzYW1wbGVTaXplLFxyXG4gICAgICAgIHR5cGU6IFRleHR1cmUuRkxPQVQsXHJcbiAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgbWFnRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgd3JhcFM6IFRleHR1cmUuQ0xBTVBfVE9fRURHRSxcclxuICAgICAgICB3cmFwVDogVGV4dHVyZS5DTEFNUF9UT19FREdFLFxyXG4gICAgICAgIHVzZU1pcG1hcDogZmFsc2VcclxuICAgIH0pO1xyXG4gICAgdmFyIHBpeGVscyA9IG5ldyBGbG9hdDMyQXJyYXkoc2FtcGxlU2l6ZSAqIHJvdWdobmVzc0xldmVscyAqIDQpO1xyXG4gICAgdmFyIHRtcCA9IFtdO1xyXG5cclxuICAgIC8vIGZ1bmN0aW9uIHNvcnRGdW5jKGEsIGIpIHtcclxuICAgIC8vICAgICByZXR1cm4gTWF0aC5hYnMoYikgLSBNYXRoLmFicyhhKTtcclxuICAgIC8vIH1cclxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcm91Z2huZXNzTGV2ZWxzOyBqKyspIHtcclxuICAgICAgICB2YXIgcm91Z2huZXNzID0gaiAvIHJvdWdobmVzc0xldmVscztcclxuICAgICAgICB2YXIgYSA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVTaXplOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gaHR0cDovL2hvbGdlci5kYW1tZXJ0ei5vcmcvc3R1ZmYvbm90ZXNfSGFtbWVyc2xleU9uSGVtaXNwaGVyZS5odG1sXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy9CaXR3aXNlX09wZXJhdG9yc1xyXG4gICAgICAgICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE5MDg0OTIvdW5zaWduZWQtaW50ZWdlci1pbi1qYXZhc2NyaXB0XHJcbiAgICAgICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTgyMjM1MC93aGF0LWlzLXRoZS1qYXZhc2NyaXB0LW9wZXJhdG9yLWFuZC1ob3ctZG8teW91LXVzZS1pdFxyXG4gICAgICAgICAgICB2YXIgeSA9IChpIDw8IDE2IHwgaSA+Pj4gMTYpID4+PiAwO1xyXG4gICAgICAgICAgICB5ID0gKCh5ICYgMTQzMTY1NTc2NSkgPDwgMSB8ICh5ICYgMjg2MzMxMTUzMCkgPj4+IDEpID4+PiAwO1xyXG4gICAgICAgICAgICB5ID0gKCh5ICYgODU4OTkzNDU5KSA8PCAyIHwgKHkgJiAzNDM1OTczODM2KSA+Pj4gMikgPj4+IDA7XHJcbiAgICAgICAgICAgIHkgPSAoKHkgJiAyNTI2NDUxMzUpIDw8IDQgfCAoeSAmIDQwNDIzMjIxNjApID4+PiA0KSA+Pj4gMDtcclxuICAgICAgICAgICAgeSA9ICgoKHkgJiAxNjcxMTkzNSkgPDwgOCB8ICh5ICYgNDI3ODI1NTM2MCkgPj4+IDgpID4+PiAwKSAvIDQyOTQ5NjcyOTY7XHJcblxyXG4gICAgICAgICAgICAvLyBDREZcclxuICAgICAgICAgICAgdmFyIGNvc1RoZXRhID0gTWF0aC5zcXJ0KCgxIC0geSkgLyAoMSArIChhICogYSAtIDEuMCkgKiB5KSk7XHJcbiAgICAgICAgICAgIHRtcFtpXSA9IGNvc1RoZXRhO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzYW1wbGVTaXplOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IChpICogcm91Z2huZXNzTGV2ZWxzICsgaikgKiA0O1xyXG4gICAgICAgICAgICB2YXIgY29zVGhldGEgPSB0bXBbaV07XHJcbiAgICAgICAgICAgIHZhciBzaW5UaGV0YSA9IE1hdGguc3FydCgxLjAgLSBjb3NUaGV0YSAqIGNvc1RoZXRhKTtcclxuICAgICAgICAgICAgdmFyIHggPSBpIC8gc2FtcGxlU2l6ZTtcclxuICAgICAgICAgICAgdmFyIHBoaSA9IDIuMCAqIE1hdGguUEkgKiB4O1xyXG4gICAgICAgICAgICBwaXhlbHNbb2Zmc2V0XSA9IHNpblRoZXRhICogTWF0aC5jb3MocGhpKTtcclxuICAgICAgICAgICAgcGl4ZWxzW29mZnNldCArIDFdID0gY29zVGhldGE7XHJcbiAgICAgICAgICAgIHBpeGVsc1tvZmZzZXQgKyAyXSA9IHNpblRoZXRhICogTWF0aC5zaW4ocGhpKTtcclxuICAgICAgICAgICAgcGl4ZWxzW29mZnNldCArIDNdID0gMS4wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG5vcm1hbERpc3RyaWJ1dGlvbi5waXhlbHMgPSBwaXhlbHM7XHJcblxyXG4gICAgcmV0dXJuIG5vcm1hbERpc3RyaWJ1dGlvbjtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGN1YmVtYXBVdGlsO1xyXG4iLCIvLyBodHRwczovL2RvY3MudW5yZWFsZW5naW5lLmNvbS9sYXRlc3QvSU5UL0VuZ2luZS9SZW5kZXJpbmcvTGlnaHRpbmdBbmRTaGFkb3dzL0FtYmllbnRDdWJlbWFwL1xyXG5pbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xyXG5pbXBvcnQgY3ViZW1hcFV0aWwgZnJvbSAnLi4vdXRpbC9jdWJlbWFwJztcclxuXHJcbi8qKlxyXG4gKiBBbWJpZW50IGN1YmVtYXAgbGlnaHQgcHJvdmlkZXMgc3BlY3VsYXIgcGFydHMgb2YgSW1hZ2UgQmFzZWQgTGlnaHRpbmcuXHJcbiAqIFdoaWNoIGlzIGEgYmFzaWMgcmVxdWlyZW1lbnQgZm9yIFBoeXNpY2FsbHkgQmFzZWQgUmVuZGVyaW5nXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkFtYmllbnRDdWJlbWFwXHJcbiAqIEBleHRlbmRzIGNsYXkuTGlnaHRcclxuICovXHJcbnZhciBBbWJpZW50Q3ViZW1hcExpZ2h0ID0gTGlnaHQuZXh0ZW5kKHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlRleHR1cmVDdWJlfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuQW1iaWVudEN1YmVtYXAjXHJcbiAgICAgKi9cclxuICAgIGN1YmVtYXA6IG51bGwsXHJcblxyXG4gICAgLy8gVE9ET1xyXG4gICAgLy8gcmFuZ2U6IDEwMCxcclxuXHJcbiAgICBjYXN0U2hhZG93OiBmYWxzZSxcclxuXHJcbiAgICBfbm9ybWFsRGlzdHJpYnV0aW9uOiBudWxsLFxyXG4gICAgX2JyZGZMb29rdXA6IG51bGxcclxuXHJcbn0sIC8qKiBAbGVuZHMgY2xheS5saWdodC5BbWJpZW50Q3ViZW1hcCMgKi8ge1xyXG5cclxuICAgIHR5cGU6ICdBTUJJRU5UX0NVQkVNQVBfTElHSFQnLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRG8gcHJlZml0ZXJpbmcgdGhlIGN1YmVtYXBcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc2l6ZT0zMl1cclxuICAgICAqL1xyXG4gICAgcHJlZmlsdGVyOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNpemUpIHtcclxuICAgICAgICBpZiAoIXJlbmRlcmVyLmdldEdMRXh0ZW5zaW9uKCdFWFRfc2hhZGVyX3RleHR1cmVfbG9kJykpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXZpY2Ugbm90IHN1cHBvcnQgdGV4dHVyZUN1YmVMb2RFWFQnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuX2JyZGZMb29rdXApIHtcclxuICAgICAgICAgICAgdGhpcy5fbm9ybWFsRGlzdHJpYnV0aW9uID0gY3ViZW1hcFV0aWwuZ2VuZXJhdGVOb3JtYWxEaXN0cmlidXRpb24oKTtcclxuICAgICAgICAgICAgdGhpcy5fYnJkZkxvb2t1cCA9IGN1YmVtYXBVdGlsLmludGVncmF0ZUJSREYocmVuZGVyZXIsIHRoaXMuX25vcm1hbERpc3RyaWJ1dGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjdWJlbWFwID0gdGhpcy5jdWJlbWFwO1xyXG4gICAgICAgIGlmIChjdWJlbWFwLl9fcHJlZmlsdGVyZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGN1YmVtYXBVdGlsLnByZWZpbHRlckVudmlyb25tZW50TWFwKFxyXG4gICAgICAgICAgICByZW5kZXJlciwgY3ViZW1hcCwge1xyXG4gICAgICAgICAgICAgICAgZW5jb2RlUkdCTTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBzaXplLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBzaXplXHJcbiAgICAgICAgICAgIH0sIHRoaXMuX25vcm1hbERpc3RyaWJ1dGlvbiwgdGhpcy5fYnJkZkxvb2t1cFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5jdWJlbWFwID0gcmVzdWx0LmVudmlyb25tZW50TWFwO1xyXG4gICAgICAgIHRoaXMuY3ViZW1hcC5fX3ByZWZpbHRlcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY3ViZW1hcC5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0QlJERkxvb2t1cDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9icmRmTG9va3VwO1xyXG4gICAgfSxcclxuXHJcbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XHJcbiAgICAgICAgYW1iaWVudEN1YmVtYXBMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0qaW50ZW5zaXR5LCBjb2xvclsxXSppbnRlbnNpdHksIGNvbG9yWzJdKmludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBhbWJpZW50Q3ViZW1hcExpZ2h0Q3ViZW1hcDoge1xyXG4gICAgICAgICAgICB0eXBlOiAndCcsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5jdWJlbWFwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgYW1iaWVudEN1YmVtYXBMaWdodEJSREZMb29rdXA6IHtcclxuICAgICAgICAgICAgdHlwZTogJ3QnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UuX2JyZGZMb29rdXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICogQG5hbWUgY2xvbmVcclxuICAgICAqIEByZXR1cm4ge2NsYXkubGlnaHQuQW1iaWVudEN1YmVtYXB9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5saWdodC5BbWJpZW50Q3ViZW1hcC5wcm90b3R5cGVcclxuICAgICAqL1xyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFtYmllbnRDdWJlbWFwTGlnaHQ7XHJcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5cclxuLyoqXHJcbiAqIFNwaGVyaWNhbCBIYXJtb25pYyBBbWJpZW50IExpZ2h0XHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LkFtYmllbnRTSFxyXG4gKiBAZXh0ZW5kcyBjbGF5LkxpZ2h0XHJcbiAqL1xyXG52YXIgQW1iaWVudFNITGlnaHQgPSBMaWdodC5leHRlbmQoe1xyXG5cclxuICAgIGNhc3RTaGFkb3c6IGZhbHNlLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3BoZXJpY2FsIEhhcm1vbmljIENvZWZmaWNpZW50c1xyXG4gICAgICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuQW1iaWVudFNII1xyXG4gICAgICovXHJcbiAgICBjb2VmZmljaWVudHM6IFtdLFxyXG5cclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5fY29lZmZpY2llbnRzVG1wQXJyID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDMpO1xyXG59LCB7XHJcblxyXG4gICAgdHlwZTogJ0FNQklFTlRfU0hfTElHSFQnLFxyXG5cclxuICAgIHVuaWZvcm1UZW1wbGF0ZXM6IHtcclxuICAgICAgICBhbWJpZW50U0hMaWdodENvbG9yOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0gKiBpbnRlbnNpdHksIGNvbG9yWzFdICogaW50ZW5zaXR5LCBjb2xvclsyXSAqIGludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBhbWJpZW50U0hMaWdodENvZWZmaWNpZW50czoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29lZmZpY2llbnRzVG1wQXJyID0gaW5zdGFuY2UuX2NvZWZmaWNpZW50c1RtcEFycjtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5zdGFuY2UuY29lZmZpY2llbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29lZmZpY2llbnRzVG1wQXJyW2ldID0gaW5zdGFuY2UuY29lZmZpY2llbnRzW2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvZWZmaWNpZW50c1RtcEFycjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uXHJcbiAgICAgKiBAbmFtZSBjbG9uZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5saWdodC5BbWJpZW50fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkubGlnaHQuQW1iaWVudC5wcm90b3R5cGVcclxuICAgICAqL1xyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEFtYmllbnRTSExpZ2h0O1xyXG4iLCJpbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBnbGVudW0gZnJvbSAnLi4vY29yZS9nbGVudW0nO1xyXG5pbXBvcnQgdXRpbCBmcm9tICcuLi9jb3JlL3V0aWwnO1xyXG5cclxudmFyIFRleHR1cmVQb29sID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIHRoaXMuX3Bvb2wgPSB7fTtcclxuXHJcbiAgICB0aGlzLl9hbGxvY2F0ZWRUZXh0dXJlcyA9IFtdO1xyXG59O1xyXG5cclxuVGV4dHVyZVBvb2wucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBUZXh0dXJlUG9vbCxcclxuXHJcbiAgICBnZXQ6IGZ1bmN0aW9uIChwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IGdlbmVyYXRlS2V5KHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIGlmICghdGhpcy5fcG9vbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Bvb2xba2V5XSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbGlzdCA9IHRoaXMuX3Bvb2xba2V5XTtcclxuICAgICAgICBpZiAoIWxpc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gbmV3IFRleHR1cmUyRChwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaXN0LnBvcCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICBwdXQ6IGZ1bmN0aW9uICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IGdlbmVyYXRlS2V5KHRleHR1cmUpO1xyXG4gICAgICAgIGlmICghdGhpcy5fcG9vbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Bvb2xba2V5XSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbGlzdCA9IHRoaXMuX3Bvb2xba2V5XTtcclxuICAgICAgICBsaXN0LnB1c2godGV4dHVyZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGNsZWFyOiBmdW5jdGlvbiAocmVuZGVyZXIpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2FsbG9jYXRlZFRleHR1cmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FsbG9jYXRlZFRleHR1cmVzW2ldLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wb29sID0ge307XHJcbiAgICAgICAgdGhpcy5fYWxsb2NhdGVkVGV4dHVyZXMgPSBbXTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZhdWx0UGFyYW1zID0ge1xyXG4gICAgd2lkdGg6IDUxMixcclxuICAgIGhlaWdodDogNTEyLFxyXG4gICAgdHlwZTogZ2xlbnVtLlVOU0lHTkVEX0JZVEUsXHJcbiAgICBmb3JtYXQ6IGdsZW51bS5SR0JBLFxyXG4gICAgd3JhcFM6IGdsZW51bS5DTEFNUF9UT19FREdFLFxyXG4gICAgd3JhcFQ6IGdsZW51bS5DTEFNUF9UT19FREdFLFxyXG4gICAgbWluRmlsdGVyOiBnbGVudW0uTElORUFSX01JUE1BUF9MSU5FQVIsXHJcbiAgICBtYWdGaWx0ZXI6IGdsZW51bS5MSU5FQVIsXHJcbiAgICB1c2VNaXBtYXA6IHRydWUsXHJcbiAgICBhbmlzb3Ryb3BpYzogMSxcclxuICAgIGZsaXBZOiB0cnVlLFxyXG4gICAgdW5wYWNrQWxpZ25tZW50OiA0LFxyXG4gICAgcHJlbXVsdGlwbHlBbHBoYTogZmFsc2VcclxufTtcclxuXHJcbnZhciBkZWZhdWx0UGFyYW1Qcm9wTGlzdCA9IE9iamVjdC5rZXlzKGRlZmF1bHRQYXJhbXMpO1xyXG5cclxuZnVuY3Rpb24gZ2VuZXJhdGVLZXkocGFyYW1ldGVycykge1xyXG4gICAgdXRpbC5kZWZhdWx0c1dpdGhQcm9wTGlzdChwYXJhbWV0ZXJzLCBkZWZhdWx0UGFyYW1zLCBkZWZhdWx0UGFyYW1Qcm9wTGlzdCk7XHJcbiAgICBmYWxsQmFjayhwYXJhbWV0ZXJzKTtcclxuXHJcbiAgICB2YXIga2V5ID0gJyc7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlZmF1bHRQYXJhbVByb3BMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIG5hbWUgPSBkZWZhdWx0UGFyYW1Qcm9wTGlzdFtpXTtcclxuICAgICAgICB2YXIgY2h1bmsgPSBwYXJhbWV0ZXJzW25hbWVdLnRvU3RyaW5nKCk7XHJcbiAgICAgICAga2V5ICs9IGNodW5rO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleTtcclxufVxyXG5cclxuZnVuY3Rpb24gZmFsbEJhY2sodGFyZ2V0KSB7XHJcblxyXG4gICAgdmFyIElQT1QgPSBpc1Bvd2VyT2ZUd28odGFyZ2V0LndpZHRoLCB0YXJnZXQuaGVpZ2h0KTtcclxuXHJcbiAgICBpZiAodGFyZ2V0LmZvcm1hdCA9PT0gZ2xlbnVtLkRFUFRIX0NPTVBPTkVOVCkge1xyXG4gICAgICAgIHRhcmdldC51c2VNaXBtYXAgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIUlQT1QgfHwgIXRhcmdldC51c2VNaXBtYXApIHtcclxuICAgICAgICBpZiAodGFyZ2V0Lm1pbkZpbHRlciA9PSBnbGVudW0uTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCB8fFxyXG4gICAgICAgICAgICB0YXJnZXQubWluRmlsdGVyID09IGdsZW51bS5ORUFSRVNUX01JUE1BUF9MSU5FQVIpIHtcclxuICAgICAgICAgICAgdGFyZ2V0Lm1pbkZpbHRlciA9IGdsZW51bS5ORUFSRVNUO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHRhcmdldC5taW5GaWx0ZXIgPT0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTElORUFSIHx8XHJcbiAgICAgICAgICAgIHRhcmdldC5taW5GaWx0ZXIgPT0gZ2xlbnVtLkxJTkVBUl9NSVBNQVBfTkVBUkVTVFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0YXJnZXQubWluRmlsdGVyID0gZ2xlbnVtLkxJTkVBUjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIUlQT1QpIHtcclxuICAgICAgICB0YXJnZXQud3JhcFMgPSBnbGVudW0uQ0xBTVBfVE9fRURHRTtcclxuICAgICAgICB0YXJnZXQud3JhcFQgPSBnbGVudW0uQ0xBTVBfVE9fRURHRTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaXNQb3dlck9mVHdvKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHJldHVybiAod2lkdGggJiAod2lkdGgtMSkpID09PSAwICYmXHJcbiAgICAgICAgICAgIChoZWlnaHQgJiAoaGVpZ2h0LTEpKSA9PT0gMDtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZVBvb2w7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LnNtLmRlcHRoLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkIDogVEVYQ09PUkRfMDtcXG51bmlmb3JtIHZlYzIgdXZSZXBlYXQgPSB2ZWMyKDEuMCwgMS4wKTtcXG51bmlmb3JtIHZlYzIgdXZPZmZzZXQgPSB2ZWMyKDAuMCwgMC4wKTtcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudmFyeWluZyB2ZWM0IHZfVmlld1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpe1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4gdl9WaWV3UG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxuIGdsX1Bvc2l0aW9uID0gdl9WaWV3UG9zaXRpb247XFxuIHZfVGV4Y29vcmQgPSB0ZXhjb29yZCAqIHV2UmVwZWF0ICsgdXZPZmZzZXQ7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc20uZGVwdGguZnJhZ21lbnRcXG52YXJ5aW5nIHZlYzQgdl9WaWV3UG9zaXRpb247XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBmbG9hdCBiaWFzIDogMC4wMDE7XFxudW5pZm9ybSBmbG9hdCBzbG9wZVNjYWxlIDogMS4wO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuMDtcXG5AaW1wb3J0IGNsYXkudXRpbC5lbmNvZGVfZmxvYXRcXG52b2lkIG1haW4oKXtcXG4gZmxvYXQgZGVwdGggPSB2X1ZpZXdQb3NpdGlvbi56IC8gdl9WaWV3UG9zaXRpb24udztcXG4gaWYgKGFscGhhQ3V0b2ZmID4gMC4wKSB7XFxuIGlmICh0ZXh0dXJlMkQoYWxwaGFNYXAsIHZfVGV4Y29vcmQpLmEgPD0gYWxwaGFDdXRvZmYpIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiB9XFxuI2lmZGVmIFVTRV9WU01cXG4gZGVwdGggPSBkZXB0aCAqIDAuNSArIDAuNTtcXG4gZmxvYXQgbW9tZW50MSA9IGRlcHRoO1xcbiBmbG9hdCBtb21lbnQyID0gZGVwdGggKiBkZXB0aDtcXG4gI2lmZGVmIFNVUFBPUlRfU1RBTkRBUkRfREVSSVZBVElWRVNcXG4gZmxvYXQgZHggPSBkRmR4KGRlcHRoKTtcXG4gZmxvYXQgZHkgPSBkRmR5KGRlcHRoKTtcXG4gbW9tZW50MiArPSAwLjI1KihkeCpkeCtkeSpkeSk7XFxuICNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KG1vbWVudDEsIG1vbWVudDIsIDAuMCwgMS4wKTtcXG4jZWxzZVxcbiAjaWZkZWYgU1VQUE9SVF9TVEFOREFSRF9ERVJJVkFUSVZFU1xcbiBmbG9hdCBkeCA9IGRGZHgoZGVwdGgpO1xcbiBmbG9hdCBkeSA9IGRGZHkoZGVwdGgpO1xcbiBkZXB0aCArPSBzcXJ0KGR4KmR4ICsgZHkqZHkpICogc2xvcGVTY2FsZSArIGJpYXM7XFxuICNlbHNlXFxuIGRlcHRoICs9IGJpYXM7XFxuICNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVGbG9hdChkZXB0aCAqIDAuNSArIDAuNSk7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc20uZGVidWdfZGVwdGhcXG51bmlmb3JtIHNhbXBsZXIyRCBkZXB0aE1hcDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG52b2lkIG1haW4oKSB7XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKGRlcHRoTWFwLCB2X1RleGNvb3JkKTtcXG4jaWZkZWYgVVNFX1ZTTVxcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRleC5yZ2IsIDEuMCk7XFxuI2Vsc2VcXG4gZmxvYXQgZGVwdGggPSBkZWNvZGVGbG9hdCh0ZXgpO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGRlcHRoLCBkZXB0aCwgZGVwdGgsIDEuMCk7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuc20uZGlzdGFuY2UudmVydGV4XFxudW5pZm9ybSBtYXQ0IHdvcmxkVmlld1Byb2plY3Rpb24gOiBXT1JMRFZJRVdQUk9KRUNUSU9OO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuQGltcG9ydCBjbGF5LmNodW5rLnNraW5uaW5nX2hlYWRlclxcbnZhcnlpbmcgdmVjMyB2X1dvcmxkUG9zaXRpb247XFxudm9pZCBtYWluICgpe1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4jZW5kaWZcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24gLCAxLjApO1xcbiB2X1dvcmxkUG9zaXRpb24gPSAod29ybGQgKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKSkueHl6O1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LnNtLmRpc3RhbmNlLmZyYWdtZW50XFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSBmbG9hdCByYW5nZSA6IDEwMDtcXG52YXJ5aW5nIHZlYzMgdl9Xb3JsZFBvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS51dGlsLmVuY29kZV9mbG9hdFxcbnZvaWQgbWFpbigpe1xcbiBmbG9hdCBkaXN0ID0gZGlzdGFuY2UobGlnaHRQb3NpdGlvbiwgdl9Xb3JsZFBvc2l0aW9uKTtcXG4jaWZkZWYgVVNFX1ZTTVxcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGRpc3QsIGRpc3QgKiBkaXN0LCAwLjAsIDAuMCk7XFxuI2Vsc2VcXG4gZGlzdCA9IGRpc3QgLyByYW5nZTtcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlRmxvYXQoZGlzdCk7XFxuI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkucGx1Z2luLnNoYWRvd19tYXBfY29tbW9uXFxuQGltcG9ydCBjbGF5LnV0aWwuZGVjb2RlX2Zsb2F0XFxuZmxvYXQgdGFwU2hhZG93TWFwKHNhbXBsZXIyRCBtYXAsIHZlYzIgdXYsIGZsb2F0IHope1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRChtYXAsIHV2KTtcXG4gcmV0dXJuIHN0ZXAoeiwgZGVjb2RlRmxvYXQodGV4KSAqIDIuMCAtIDEuMCk7XFxufVxcbmZsb2F0IHBjZihzYW1wbGVyMkQgbWFwLCB2ZWMyIHV2LCBmbG9hdCB6LCBmbG9hdCB0ZXh0dXJlU2l6ZSwgdmVjMiBzY2FsZSkge1xcbiBmbG9hdCBzaGFkb3dDb250cmliID0gdGFwU2hhZG93TWFwKG1hcCwgdXYsIHopO1xcbiB2ZWMyIG9mZnNldCA9IHZlYzIoMS4wIC8gdGV4dHVyZVNpemUpICogc2NhbGU7XFxuI2lmZGVmIFBDRl9LRVJORUxfU0laRVxcbiBmb3IgKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgUENGX0tFUk5FTF9TSVpFOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2ICsgb2Zmc2V0ICogcGNmS2VybmVsW19pZHhfXSwgeik7XFxuIH19XFxuIHJldHVybiBzaGFkb3dDb250cmliIC8gZmxvYXQoUENGX0tFUk5FTF9TSVpFICsgMSk7XFxuI2Vsc2VcXG4gc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKG9mZnNldC54LCAwLjApLCB6KTtcXG4gc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKG9mZnNldC54LCBvZmZzZXQueSksIHopO1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIoLW9mZnNldC54LCBvZmZzZXQueSksIHopO1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIoMC4wLCBvZmZzZXQueSksIHopO1xcbiBzaGFkb3dDb250cmliICs9IHRhcFNoYWRvd01hcChtYXAsIHV2K3ZlYzIoLW9mZnNldC54LCAwLjApLCB6KTtcXG4gc2hhZG93Q29udHJpYiArPSB0YXBTaGFkb3dNYXAobWFwLCB1dit2ZWMyKC1vZmZzZXQueCwgLW9mZnNldC55KSwgeik7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMihvZmZzZXQueCwgLW9mZnNldC55KSwgeik7XFxuIHNoYWRvd0NvbnRyaWIgKz0gdGFwU2hhZG93TWFwKG1hcCwgdXYrdmVjMigwLjAsIC1vZmZzZXQueSksIHopO1xcbiByZXR1cm4gc2hhZG93Q29udHJpYiAvIDkuMDtcXG4jZW5kaWZcXG59XFxuZmxvYXQgcGNmKHNhbXBsZXIyRCBtYXAsIHZlYzIgdXYsIGZsb2F0IHosIGZsb2F0IHRleHR1cmVTaXplKSB7XFxuIHJldHVybiBwY2YobWFwLCB1diwgeiwgdGV4dHVyZVNpemUsIHZlYzIoMS4wKSk7XFxufVxcbmZsb2F0IGNoZWJ5c2hldlVwcGVyQm91bmQodmVjMiBtb21lbnRzLCBmbG9hdCB6KXtcXG4gZmxvYXQgcCA9IDAuMDtcXG4geiA9IHogKiAwLjUgKyAwLjU7XFxuIGlmICh6IDw9IG1vbWVudHMueCkge1xcbiBwID0gMS4wO1xcbiB9XFxuIGZsb2F0IHZhcmlhbmNlID0gbW9tZW50cy55IC0gbW9tZW50cy54ICogbW9tZW50cy54O1xcbiB2YXJpYW5jZSA9IG1heCh2YXJpYW5jZSwgMC4wMDAwMDAxKTtcXG4gZmxvYXQgbUQgPSBtb21lbnRzLnggLSB6O1xcbiBmbG9hdCBwTWF4ID0gdmFyaWFuY2UgLyAodmFyaWFuY2UgKyBtRCAqIG1EKTtcXG4gcE1heCA9IGNsYW1wKChwTWF4LTAuNCkvKDEuMC0wLjQpLCAwLjAsIDEuMCk7XFxuIHJldHVybiBtYXgocCwgcE1heCk7XFxufVxcbmZsb2F0IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiBzYW1wbGVyMkQgbWFwLCBtYXQ0IGxpZ2h0VlBNLCB2ZWMzIHBvc2l0aW9uLCBmbG9hdCB0ZXh0dXJlU2l6ZSwgdmVjMiBzY2FsZSwgdmVjMiBvZmZzZXRcXG4pIHtcXG4gdmVjNCBwb3NJbkxpZ2h0U3BhY2UgPSBsaWdodFZQTSAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxuIHBvc0luTGlnaHRTcGFjZS54eXogLz0gcG9zSW5MaWdodFNwYWNlLnc7XFxuIGZsb2F0IHogPSBwb3NJbkxpZ2h0U3BhY2UuejtcXG4gaWYoYWxsKGdyZWF0ZXJUaGFuKHBvc0luTGlnaHRTcGFjZS54eXosIHZlYzMoLTAuOTksIC0wLjk5LCAtMS4wKSkpICYmXFxuIGFsbChsZXNzVGhhbihwb3NJbkxpZ2h0U3BhY2UueHl6LCB2ZWMzKDAuOTksIDAuOTksIDEuMCkpKSl7XFxuIHZlYzIgdXYgPSAocG9zSW5MaWdodFNwYWNlLnh5KzEuMCkgLyAyLjA7XFxuICNpZmRlZiBVU0VfVlNNXFxuIHZlYzIgbW9tZW50cyA9IHRleHR1cmUyRChtYXAsIHV2ICogc2NhbGUgKyBvZmZzZXQpLnh5O1xcbiByZXR1cm4gY2hlYnlzaGV2VXBwZXJCb3VuZChtb21lbnRzLCB6KTtcXG4gI2Vsc2VcXG4gcmV0dXJuIHBjZihtYXAsIHV2ICogc2NhbGUgKyBvZmZzZXQsIHosIHRleHR1cmVTaXplLCBzY2FsZSk7XFxuICNlbmRpZlxcbiB9XFxuIHJldHVybiAxLjA7XFxufVxcbmZsb2F0IGNvbXB1dGVTaGFkb3dDb250cmliKHNhbXBsZXIyRCBtYXAsIG1hdDQgbGlnaHRWUE0sIHZlYzMgcG9zaXRpb24sIGZsb2F0IHRleHR1cmVTaXplKSB7XFxuIHJldHVybiBjb21wdXRlU2hhZG93Q29udHJpYihtYXAsIGxpZ2h0VlBNLCBwb3NpdGlvbiwgdGV4dHVyZVNpemUsIHZlYzIoMS4wKSwgdmVjMigwLjApKTtcXG59XFxuZmxvYXQgY29tcHV0ZVNoYWRvd0NvbnRyaWJPbW5pKHNhbXBsZXJDdWJlIG1hcCwgdmVjMyBkaXJlY3Rpb24sIGZsb2F0IHJhbmdlKVxcbntcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChkaXJlY3Rpb24pO1xcbiB2ZWM0IHNoYWRvd1RleCA9IHRleHR1cmVDdWJlKG1hcCwgZGlyZWN0aW9uKTtcXG4jaWZkZWYgVVNFX1ZTTVxcbiB2ZWMyIG1vbWVudHMgPSBzaGFkb3dUZXgueHk7XFxuIGZsb2F0IHZhcmlhbmNlID0gbW9tZW50cy55IC0gbW9tZW50cy54ICogbW9tZW50cy54O1xcbiBmbG9hdCBtRCA9IG1vbWVudHMueCAtIGRpc3Q7XFxuIGZsb2F0IHAgPSB2YXJpYW5jZSAvICh2YXJpYW5jZSArIG1EICogbUQpO1xcbiBpZihtb21lbnRzLnggKyAwLjAwMSA8IGRpc3Qpe1xcbiByZXR1cm4gY2xhbXAocCwgMC4wLCAxLjApO1xcbiB9ZWxzZXtcXG4gcmV0dXJuIDEuMDtcXG4gfVxcbiNlbHNlXFxuIHJldHVybiBzdGVwKGRpc3QsIChkZWNvZGVGbG9hdChzaGFkb3dUZXgpICsgMC4wMDAyKSAqIHJhbmdlKTtcXG4jZW5kaWZcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5wbHVnaW4uY29tcHV0ZV9zaGFkb3dfbWFwXFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpIHx8IGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKSB8fCBkZWZpbmVkKFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVClcXG4jaWZkZWYgU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRcXG51bmlmb3JtIHNhbXBsZXIyRCBzcG90TGlnaHRTaGFkb3dNYXBzW1NQT1RfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIG1hdDQgc3BvdExpZ2h0TWF0cmljZXNbU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gZmxvYXQgc3BvdExpZ2h0U2hhZG93TWFwU2l6ZXNbU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbiNlbmRpZlxcbiNpZmRlZiBESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlRcXG4jaWYgZGVmaW5lZChTSEFET1dfQ0FTQ0FERSlcXG51bmlmb3JtIHNhbXBsZXIyRCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwc1sxXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIG1hdDQgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzW1NIQURPV19DQVNDQURFXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIGZsb2F0IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBTaXplc1sxXTp1bmNvbmZpZ3VyYWJsZTtcXG51bmlmb3JtIGZsb2F0IHNoYWRvd0Nhc2NhZGVDbGlwc05lYXJbU0hBRE9XX0NBU0NBREVdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gZmxvYXQgc2hhZG93Q2FzY2FkZUNsaXBzRmFyW1NIQURPV19DQVNDQURFXTp1bmNvbmZpZ3VyYWJsZTtcXG4jZWxzZVxcbnVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzW0RJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxudW5pZm9ybSBtYXQ0IGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlc1tESVJFQ1RJT05BTF9MSUdIVF9TSEFET1dNQVBfQ09VTlRdOnVuY29uZmlndXJhYmxlO1xcbnVuaWZvcm0gZmxvYXQgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzW0RJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVF06dW5jb25maWd1cmFibGU7XFxuI2VuZGlmXFxuI2VuZGlmXFxuI2lmZGVmIFBPSU5UX0xJR0hUX1NIQURPV01BUF9DT1VOVFxcbnVuaWZvcm0gc2FtcGxlckN1YmUgcG9pbnRMaWdodFNoYWRvd01hcHNbUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UXTp1bmNvbmZpZ3VyYWJsZTtcXG4jZW5kaWZcXG51bmlmb3JtIGJvb2wgc2hhZG93RW5hYmxlZCA6IHRydWU7XFxuI2lmZGVmIFBDRl9LRVJORUxfU0laRVxcbnVuaWZvcm0gdmVjMiBwY2ZLZXJuZWxbUENGX0tFUk5FTF9TSVpFXTtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkucGx1Z2luLnNoYWRvd19tYXBfY29tbW9uXFxuI2lmIGRlZmluZWQoU1BPVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxudm9pZCBjb21wdXRlU2hhZG93T2ZTcG90TGlnaHRzKHZlYzMgcG9zaXRpb24sIGlub3V0IGZsb2F0IHNoYWRvd0NvbnRyaWJzW1NQT1RfTElHSFRfQ09VTlRdICkge1xcbiBmbG9hdCBzaGFkb3dDb250cmliO1xcbiBmb3IoaW50IF9pZHhfID0gMDsgX2lkeF8gPCBTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVDsgX2lkeF8rKykge3tcXG4gc2hhZG93Q29udHJpYiA9IGNvbXB1dGVTaGFkb3dDb250cmliKFxcbiBzcG90TGlnaHRTaGFkb3dNYXBzW19pZHhfXSwgc3BvdExpZ2h0TWF0cmljZXNbX2lkeF9dLCBwb3NpdGlvbixcXG4gc3BvdExpZ2h0U2hhZG93TWFwU2l6ZXNbX2lkeF9dXFxuICk7XFxuIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IHNoYWRvd0NvbnRyaWI7XFxuIH19XFxuIGZvcihpbnQgX2lkeF8gPSBTUE9UX0xJR0hUX1NIQURPV01BUF9DT1VOVDsgX2lkeF8gPCBTUE9UX0xJR0hUX0NPVU5UOyBfaWR4XysrKXt7XFxuIHNoYWRvd0NvbnRyaWJzW19pZHhfXSA9IDEuMDtcXG4gfX1cXG59XFxuI2VuZGlmXFxuI2lmIGRlZmluZWQoRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UKVxcbiNpZmRlZiBTSEFET1dfQ0FTQ0FERVxcbnZvaWQgY29tcHV0ZVNoYWRvd09mRGlyZWN0aW9uYWxMaWdodHModmVjMyBwb3NpdGlvbiwgaW5vdXQgZmxvYXQgc2hhZG93Q29udHJpYnNbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdKXtcXG4gZmxvYXQgZGVwdGggPSAoMi4wICogZ2xfRnJhZ0Nvb3JkLnogLSBnbF9EZXB0aFJhbmdlLm5lYXIgLSBnbF9EZXB0aFJhbmdlLmZhcilcXG4gLyAoZ2xfRGVwdGhSYW5nZS5mYXIgLSBnbF9EZXB0aFJhbmdlLm5lYXIpO1xcbiBmbG9hdCBzaGFkb3dDb250cmliO1xcbiBzaGFkb3dDb250cmlic1swXSA9IDEuMDtcXG4gZm9yIChpbnQgX2lkeF8gPSAwOyBfaWR4XyA8IFNIQURPV19DQVNDQURFOyBfaWR4XysrKSB7e1xcbiBpZiAoXFxuIGRlcHRoID49IHNoYWRvd0Nhc2NhZGVDbGlwc05lYXJbX2lkeF9dICYmXFxuIGRlcHRoIDw9IHNoYWRvd0Nhc2NhZGVDbGlwc0ZhcltfaWR4X11cXG4gKSB7XFxuIHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYihcXG4gZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHNbMF0sIGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlc1tfaWR4X10sIHBvc2l0aW9uLFxcbiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwU2l6ZXNbMF0sXFxuIHZlYzIoMS4wIC8gZmxvYXQoU0hBRE9XX0NBU0NBREUpLCAxLjApLFxcbiB2ZWMyKGZsb2F0KF9pZHhfKSAvIGZsb2F0KFNIQURPV19DQVNDQURFKSwgMC4wKVxcbiApO1xcbiBzaGFkb3dDb250cmlic1swXSA9IHNoYWRvd0NvbnRyaWI7XFxuIH1cXG4gfX1cXG4gZm9yKGludCBfaWR4XyA9IERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVDsgX2lkeF8gPCBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVDsgX2lkeF8rKykge3tcXG4gc2hhZG93Q29udHJpYnNbX2lkeF9dID0gMS4wO1xcbiB9fVxcbn1cXG4jZWxzZVxcbnZvaWQgY29tcHV0ZVNoYWRvd09mRGlyZWN0aW9uYWxMaWdodHModmVjMyBwb3NpdGlvbiwgaW5vdXQgZmxvYXQgc2hhZG93Q29udHJpYnNbRElSRUNUSU9OQUxfTElHSFRfQ09VTlRdKXtcXG4gZmxvYXQgc2hhZG93Q29udHJpYjtcXG4gZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmliID0gY29tcHV0ZVNoYWRvd0NvbnRyaWIoXFxuIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzW19pZHhfXSwgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzW19pZHhfXSwgcG9zaXRpb24sXFxuIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBTaXplc1tfaWR4X11cXG4gKTtcXG4gc2hhZG93Q29udHJpYnNbX2lkeF9dID0gc2hhZG93Q29udHJpYjtcXG4gfX1cXG4gZm9yKGludCBfaWR4XyA9IERJUkVDVElPTkFMX0xJR0hUX1NIQURPV01BUF9DT1VOVDsgX2lkeF8gPCBESVJFQ1RJT05BTF9MSUdIVF9DT1VOVDsgX2lkeF8rKykge3tcXG4gc2hhZG93Q29udHJpYnNbX2lkeF9dID0gMS4wO1xcbiB9fVxcbn1cXG4jZW5kaWZcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChQT0lOVF9MSUdIVF9TSEFET1dNQVBfQ09VTlQpXFxudm9pZCBjb21wdXRlU2hhZG93T2ZQb2ludExpZ2h0cyh2ZWMzIHBvc2l0aW9uLCBpbm91dCBmbG9hdCBzaGFkb3dDb250cmlic1tQT0lOVF9MSUdIVF9DT1VOVF0gKXtcXG4gdmVjMyBsaWdodFBvc2l0aW9uO1xcbiB2ZWMzIGRpcmVjdGlvbjtcXG4gZm9yKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBsaWdodFBvc2l0aW9uID0gcG9pbnRMaWdodFBvc2l0aW9uW19pZHhfXTtcXG4gZGlyZWN0aW9uID0gcG9zaXRpb24gLSBsaWdodFBvc2l0aW9uO1xcbiBzaGFkb3dDb250cmlic1tfaWR4X10gPSBjb21wdXRlU2hhZG93Q29udHJpYk9tbmkocG9pbnRMaWdodFNoYWRvd01hcHNbX2lkeF9dLCBkaXJlY3Rpb24sIHBvaW50TGlnaHRSYW5nZVtfaWR4X10pO1xcbiB9fVxcbiBmb3IoaW50IF9pZHhfID0gUE9JTlRfTElHSFRfU0hBRE9XTUFQX0NPVU5UOyBfaWR4XyA8IFBPSU5UX0xJR0hUX0NPVU5UOyBfaWR4XysrKSB7e1xcbiBzaGFkb3dDb250cmlic1tfaWR4X10gPSAxLjA7XFxuIH19XFxufVxcbiNlbmRpZlxcbiNlbmRpZlxcbkBlbmRcIjtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcclxuaW1wb3J0IEZydXN0dW0gZnJvbSAnLi4vbWF0aC9GcnVzdHVtJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcclxuaW1wb3J0IFJlbmRlcmVyIGZyb20gJy4uL1JlbmRlcmVyJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSAnLi4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IE9ydGhvQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9PcnRob2dyYXBoaWMnO1xyXG5cclxuaW1wb3J0IFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcclxuaW1wb3J0IFRleHR1cmVQb29sIGZyb20gJy4uL2NvbXBvc2l0b3IvVGV4dHVyZVBvb2wnO1xyXG5cclxuaW1wb3J0IG1hdDQgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0NCc7XHJcblxyXG52YXIgdGFyZ2V0cyA9IFsncHgnLCAnbngnLCAncHknLCAnbnknLCAncHonLCAnbnonXTtcclxuXHJcbmltcG9ydCBzaGFkb3dtYXBFc3NsIGZyb20gJy4uL3NoYWRlci9zb3VyY2Uvc2hhZG93bWFwLmdsc2wuanMnO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHNoYWRvd21hcEVzc2wpO1xyXG5cclxuZnVuY3Rpb24gZ2V0RGVwdGhNYXRlcmlhbFVuaWZvcm0ocmVuZGVyYWJsZSwgZGVwdGhNYXRlcmlhbCwgc3ltYm9sKSB7XHJcbiAgICBpZiAoc3ltYm9sID09PSAnYWxwaGFNYXAnKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdkaWZmdXNlTWFwJyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdhbHBoYUN1dG9mZicpIHtcclxuICAgICAgICBpZiAocmVuZGVyYWJsZS5tYXRlcmlhbC5pc0RlZmluZWQoJ2ZyYWdtZW50JywgJ0FMUEhBX1RFU1QnKVxyXG4gICAgICAgICAgICAmJiByZW5kZXJhYmxlLm1hdGVyaWFsLmdldCgnZGlmZnVzZU1hcCcpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHZhciBhbHBoYUN1dG9mZiA9IHJlbmRlcmFibGUubWF0ZXJpYWwuZ2V0KCdhbHBoYUN1dG9mZicpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWxwaGFDdXRvZmYgfHwgMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd1dlJlcGVhdCcpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ3V2UmVwZWF0Jyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChzeW1ib2wgPT09ICd1dk9mZnNldCcpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbC5nZXQoJ3V2T2Zmc2V0Jyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZGVwdGhNYXRlcmlhbC5nZXQoc3ltYm9sKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaXNEZXB0aE1hdGVyaWFsQ2hhbmdlZChyZW5kZXJhYmxlLCBwcmV2UmVuZGVyYWJsZSkge1xyXG4gICAgdmFyIG1hdEEgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgdmFyIG1hdEIgPSBwcmV2UmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgIHJldHVybiBtYXRBLmdldCgnZGlmZnVzZU1hcCcpICE9PSBtYXRCLmdldCgnZGlmZnVzZU1hcCcpXHJcbiAgICAgICAgfHwgKG1hdEEuZ2V0KCdhbHBoYUN1dG9mZicpIHx8IDApICE9PSAobWF0Qi5nZXQoJ2FscGhhQ3V0b2ZmJykgfHwgMCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXNzIHJlbmRlcmluZyBzaGFkb3cgbWFwLlxyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wcmVQYXNzLlNoYWRvd01hcFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgdmFyIHNoYWRvd01hcFBhc3MgPSBuZXcgY2xheS5wcmVQYXNzLlNoYWRvd01hcCh7XHJcbiAqICAgICAgICAgc29mdFNoYWRvdzogY2xheS5wcmVQYXNzLlNoYWRvd01hcC5WU01cclxuICogICAgIH0pO1xyXG4gKiAgICAgLi4uXHJcbiAqICAgICBhbmltYXRpb24ub24oJ2ZyYW1lJywgZnVuY3Rpb24gKGZyYW1lVGltZSkge1xyXG4gKiAgICAgICAgIHNoYWRvd01hcFBhc3MucmVuZGVyKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKTtcclxuICogICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAqICAgICB9KTtcclxuICovXHJcbnZhciBTaGFkb3dNYXBQYXNzID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5wcmVQYXNzLlNoYWRvd01hcCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNvZnQgc2hhZG93IHRlY2huaXF1ZS5cclxuICAgICAgICAgKiBDYW4gYmUge0BsaW5rIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAuUENGfSBvciB7QGxpbmsgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5WU019XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzb2Z0U2hhZG93OiBTaGFkb3dNYXBQYXNzLlBDRixcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU29mdCBzaGFkb3cgYmx1ciBzaXplXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzaGFkb3dCbHVyOiAxLjAsXHJcblxyXG4gICAgICAgIGxpZ2h0RnJ1c3R1bUJpYXM6ICdhdXRvJyxcclxuXHJcbiAgICAgICAga2VybmVsUENGOiBuZXcgRmxvYXQzMkFycmF5KFtcclxuICAgICAgICAgICAgMSwgMCxcclxuICAgICAgICAgICAgMSwgMSxcclxuICAgICAgICAgICAgLTEsIDEsXHJcbiAgICAgICAgICAgIDAsIDEsXHJcbiAgICAgICAgICAgIC0xLCAwLFxyXG4gICAgICAgICAgICAtMSwgLTEsXHJcbiAgICAgICAgICAgIDEsIC0xLFxyXG4gICAgICAgICAgICAwLCAtMVxyXG4gICAgICAgIF0pLFxyXG5cclxuICAgICAgICBwcmVjaXNpb246ICdoaWdocCcsXHJcblxyXG4gICAgICAgIF9sYXN0UmVuZGVyTm90Q2FzdFNoYWRvdzogZmFsc2UsXHJcblxyXG4gICAgICAgIF9mcmFtZUJ1ZmZlcjogbmV3IEZyYW1lQnVmZmVyKCksXHJcblxyXG4gICAgICAgIF90ZXh0dXJlczoge30sXHJcbiAgICAgICAgX3NoYWRvd01hcE51bWJlcjoge1xyXG4gICAgICAgICAgICAnUE9JTlRfTElHSFQnOiAwLFxyXG4gICAgICAgICAgICAnRElSRUNUSU9OQUxfTElHSFQnOiAwLFxyXG4gICAgICAgICAgICAnU1BPVF9MSUdIVCc6IDBcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBfZGVwdGhNYXRlcmlhbHM6IHt9LFxyXG4gICAgICAgIF9kaXN0YW5jZU1hdGVyaWFsczoge30sXHJcblxyXG4gICAgICAgIF9yZWNlaXZlcnM6IFtdLFxyXG4gICAgICAgIF9saWdodHNDYXN0U2hhZG93OiBbXSxcclxuXHJcbiAgICAgICAgX2xpZ2h0Q2FtZXJhczoge30sXHJcbiAgICAgICAgX2xpZ2h0TWF0ZXJpYWxzOiB7fSxcclxuXHJcbiAgICAgICAgX3RleHR1cmVQb29sOiBuZXcgVGV4dHVyZVBvb2woKVxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gR2F1c3NpYW4gZmlsdGVyIHBhc3MgZm9yIFZTTVxyXG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzSCA9IG5ldyBQYXNzKHtcclxuICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLmdhdXNzaWFuX2JsdXInKVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9nYXVzc2lhblBhc3NWID0gbmV3IFBhc3Moe1xyXG4gICAgICAgIGZyYWdtZW50OiBTaGFkZXIuc291cmNlKCdjbGF5LmNvbXBvc2l0b3IuZ2F1c3NpYW5fYmx1cicpXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2dhdXNzaWFuUGFzc0guc2V0VW5pZm9ybSgnYmx1clNpemUnLCB0aGlzLnNoYWRvd0JsdXIpO1xyXG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzSC5zZXRVbmlmb3JtKCdibHVyRGlyJywgMC4wKTtcclxuICAgIHRoaXMuX2dhdXNzaWFuUGFzc1Yuc2V0VW5pZm9ybSgnYmx1clNpemUnLCB0aGlzLnNoYWRvd0JsdXIpO1xyXG4gICAgdGhpcy5fZ2F1c3NpYW5QYXNzVi5zZXRVbmlmb3JtKCdibHVyRGlyJywgMS4wKTtcclxuXHJcbiAgICB0aGlzLl9vdXRwdXREZXB0aFBhc3MgPSBuZXcgUGFzcyh7XHJcbiAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkuc20uZGVidWdfZGVwdGgnKVxyXG4gICAgfSk7XHJcbn0sIHtcclxuICAgIC8qKlxyXG4gICAgICogUmVuZGVyIHNjZW5lIHRvIHNoYWRvdyB0ZXh0dXJlc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuU2NlbmV9IHNjZW5lXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LkNhbWVyYX0gc2NlbmVDYW1lcmFcclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtub3RVcGRhdGVTY2VuZT1mYWxzZV1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuU2hhZG93TWFwLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhLCBub3RVcGRhdGVTY2VuZSkge1xyXG4gICAgICAgIGlmICghc2NlbmVDYW1lcmEpIHtcclxuICAgICAgICAgICAgc2NlbmVDYW1lcmEgPSBzY2VuZS5nZXRNYWluQ2FtZXJhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYmVmb3JlcmVuZGVyJywgdGhpcywgcmVuZGVyZXIsIHNjZW5lLCBzY2VuZUNhbWVyYSk7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyU2hhZG93UGFzcyhyZW5kZXJlciwgc2NlbmUsIHNjZW5lQ2FtZXJhLCBub3RVcGRhdGVTY2VuZSk7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdhZnRlcnJlbmRlcicsIHRoaXMsIHJlbmRlcmVyLCBzY2VuZSwgc2NlbmVDYW1lcmEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlYnVnIHJlbmRlcmluZyBvZiBzaGFkb3cgdGV4dHVyZXNcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHNpemVcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnByZVBhc3MuU2hhZG93TWFwLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICByZW5kZXJEZWJ1ZzogZnVuY3Rpb24gKHJlbmRlcmVyLCBzaXplKSB7XHJcbiAgICAgICAgcmVuZGVyZXIuc2F2ZUNsZWFyKCk7XHJcbiAgICAgICAgdmFyIHZpZXdwb3J0ID0gcmVuZGVyZXIudmlld3BvcnQ7XHJcbiAgICAgICAgdmFyIHggPSAwLCB5ID0gMDtcclxuICAgICAgICB2YXIgd2lkdGggPSBzaXplIHx8IHZpZXdwb3J0LndpZHRoIC8gNDtcclxuICAgICAgICB2YXIgaGVpZ2h0ID0gd2lkdGg7XHJcbiAgICAgICAgaWYgKHRoaXMuc29mdFNoYWRvdyA9PT0gU2hhZG93TWFwUGFzcy5WU00pIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0RGVwdGhQYXNzLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0RGVwdGhQYXNzLm1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdVU0VfVlNNJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fdGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1tuYW1lXTtcclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQoeCwgeSwgd2lkdGggKiB0ZXh0dXJlLndpZHRoIC8gdGV4dHVyZS5oZWlnaHQsIGhlaWdodCk7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dERlcHRoUGFzcy5zZXRVbmlmb3JtKCdkZXB0aE1hcCcsIHRleHR1cmUpO1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXREZXB0aFBhc3MucmVuZGVyKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgeCArPSB3aWR0aCAqIHRleHR1cmUud2lkdGggLyB0ZXh0dXJlLmhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodmlld3BvcnQpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlc3RvcmVDbGVhcigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlUmVjZWl2ZXJzOiBmdW5jdGlvbiAocmVuZGVyZXIsIG1lc2gpIHtcclxuICAgICAgICBpZiAobWVzaC5yZWNlaXZlU2hhZG93KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlY2VpdmVycy5wdXNoKG1lc2gpO1xyXG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLnNldCgnc2hhZG93RW5hYmxlZCcsIDEpO1xyXG5cclxuICAgICAgICAgICAgbWVzaC5tYXRlcmlhbC5zZXQoJ3BjZktlcm5lbCcsIHRoaXMua2VybmVsUENGKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuc2V0KCdzaGFkb3dFbmFibGVkJywgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xyXG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xyXG4gICAgICAgICAgICBtZXNoLm1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdQQ0ZfS0VSTkVMX1NJWkUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9WU00nKTtcclxuICAgICAgICAgICAgdmFyIGtlcm5lbFBDRiA9IHRoaXMua2VybmVsUENGO1xyXG4gICAgICAgICAgICBpZiAoa2VybmVsUENGICYmIGtlcm5lbFBDRi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIG1lc2gubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdQQ0ZfS0VSTkVMX1NJWkUnLCBrZXJuZWxQQ0YubGVuZ3RoIC8gMik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtZXNoLm1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsICdQQ0ZfS0VSTkVMX1NJWkUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZTogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBzY2VuZS50cmF2ZXJzZShmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5fdXBkYXRlUmVjZWl2ZXJzKHJlbmRlcmVyLCByZW5kZXJhYmxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbGlnaHQgPSBzY2VuZS5saWdodHNbaV07XHJcbiAgICAgICAgICAgIGlmIChsaWdodC5jYXN0U2hhZG93ICYmICFsaWdodC5pbnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cucHVzaChsaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZW5kZXJTaGFkb3dQYXNzOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBzY2VuZUNhbWVyYSwgbm90VXBkYXRlU2NlbmUpIHtcclxuICAgICAgICAvLyByZXNldFxyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fc2hhZG93TWFwTnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NoYWRvd01hcE51bWJlcltuYW1lXSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3cubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9yZWNlaXZlcnMubGVuZ3RoID0gMDtcclxuXHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICBpZiAoIW5vdFVwZGF0ZVNjZW5lKSB7XHJcbiAgICAgICAgICAgIHNjZW5lLnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2NlbmVDYW1lcmEpIHtcclxuICAgICAgICAgICAgc2NlbmVDYW1lcmEudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzY2VuZS51cGRhdGVMaWdodHMoKTtcclxuICAgICAgICB0aGlzLl91cGRhdGUocmVuZGVyZXIsIHNjZW5lKTtcclxuXHJcbiAgICAgICAgLy8gTmVlZHMgdG8gdXBkYXRlIHRoZSByZWNlaXZlcnMgYWdhaW4gaWYgc2hhZG93cyBjb21lIGZyb20gMSB0byAwLlxyXG4gICAgICAgIGlmICghdGhpcy5fbGlnaHRzQ2FzdFNoYWRvdy5sZW5ndGggJiYgdGhpcy5fbGFzdFJlbmRlck5vdENhc3RTaGFkb3cpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fbGFzdFJlbmRlck5vdENhc3RTaGFkb3cgPSB0aGlzLl9saWdodHNDYXN0U2hhZG93ID09PSAwO1xyXG5cclxuICAgICAgICBfZ2wuZW5hYmxlKF9nbC5ERVBUSF9URVNUKTtcclxuICAgICAgICBfZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgICAgIF9nbC5kaXNhYmxlKF9nbC5CTEVORCk7XHJcblxyXG4gICAgICAgIC8vIENsZWFyIHdpdGggaGlnaC16LCBzbyB0aGUgcGFydCBub3QgcmVuZGVyZWQgd2lsbCBub3QgYmVlbiBzaGFkb3dlZFxyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICAvLyBUT0RPIHJlc3RvcmVcclxuICAgICAgICBfZ2wuY2xlYXJDb2xvcigxLjAsIDEuMCwgMS4wLCAxLjApO1xyXG5cclxuICAgICAgICAvLyBTaGFkb3cgdW5pZm9ybXNcclxuICAgICAgICB2YXIgc3BvdExpZ2h0U2hhZG93TWFwcyA9IFtdO1xyXG4gICAgICAgIHZhciBzcG90TGlnaHRNYXRyaWNlcyA9IFtdO1xyXG4gICAgICAgIHZhciBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcyA9IFtdO1xyXG4gICAgICAgIHZhciBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMgPSBbXTtcclxuICAgICAgICB2YXIgc2hhZG93Q2FzY2FkZUNsaXBzID0gW107XHJcbiAgICAgICAgdmFyIHBvaW50TGlnaHRTaGFkb3dNYXBzID0gW107XHJcblxyXG4gICAgICAgIHZhciBkaXJMaWdodEhhc0Nhc2NhZGU7XHJcbiAgICAgICAgLy8gQ3JlYXRlIHRleHR1cmVzIGZvciBzaGFkb3cgbWFwXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9saWdodHNDYXN0U2hhZG93Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBsaWdodCA9IHRoaXMuX2xpZ2h0c0Nhc3RTaGFkb3dbaV07XHJcbiAgICAgICAgICAgIGlmIChsaWdodC50eXBlID09PSAnRElSRUNUSU9OQUxfTElHSFQnKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRpckxpZ2h0SGFzQ2FzY2FkZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignT25seSBvbmUgZGlyZWVjdGlvbmFsIGxpZ2h0IHN1cHBvcnRlZCB3aXRoIHNoYWRvdyBjYXNjYWRlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobGlnaHQuc2hhZG93Q2FzY2FkZSA+IDQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1N1cHBvcnQgYXQgbW9zdCA0IGNhc2NhZGUnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChsaWdodC5zaGFkb3dDYXNjYWRlID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpckxpZ2h0SGFzQ2FzY2FkZSA9IGxpZ2h0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRGlyZWN0aW9uYWxMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlcixcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZSxcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZUNhbWVyYSxcclxuICAgICAgICAgICAgICAgICAgICBsaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHMsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxpZ2h0LnR5cGUgPT09ICdTUE9UX0xJR0hUJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJTcG90TGlnaHRTaGFkb3coXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2NlbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3BvdExpZ2h0TWF0cmljZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgc3BvdExpZ2h0U2hhZG93TWFwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChsaWdodC50eXBlID09PSAnUE9JTlRfTElHSFQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclBvaW50TGlnaHRTaGFkb3coXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2NlbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRMaWdodFNoYWRvd01hcHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3NoYWRvd01hcE51bWJlcltsaWdodC50eXBlXSsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgbGlnaHRUeXBlIGluIHRoaXMuX3NoYWRvd01hcE51bWJlcikge1xyXG4gICAgICAgICAgICB2YXIgbnVtYmVyID0gdGhpcy5fc2hhZG93TWFwTnVtYmVyW2xpZ2h0VHlwZV07XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBsaWdodFR5cGUgKyAnX1NIQURPV01BUF9DT1VOVCc7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcmVjZWl2ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWVzaCA9IHRoaXMuX3JlY2VpdmVyc1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IG1lc2gubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0ZXJpYWwuZnJhZ21lbnREZWZpbmVzW2tleV0gIT09IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCBrZXksIG51bWJlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1hdGVyaWFsLmlzRGVmaW5lZCgnZnJhZ21lbnQnLCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnVuZGVmaW5lKCdmcmFnbWVudCcsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcmVjZWl2ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXNoID0gdGhpcy5fcmVjZWl2ZXJzW2ldO1xyXG4gICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSBtZXNoLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICBpZiAoZGlyTGlnaHRIYXNDYXNjYWRlKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NIQURPV19DQVNDQURFJywgZGlyTGlnaHRIYXNDYXNjYWRlLnNoYWRvd0Nhc2NhZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1NIQURPV19DQVNDQURFJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzaGFkb3dVbmlmb3JtcyA9IHNjZW5lLnNoYWRvd1VuaWZvcm1zO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBnZXRTaXplKHRleHR1cmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB2YXIgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMubWFwKGdldFNpemUpO1xyXG4gICAgICAgICAgICBzaGFkb3dVbmlmb3Jtcy5kaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcyA9IHsgdmFsdWU6IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dNYXBzLCB0eXBlOiAndHYnIH07XHJcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLmRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlcyA9IHsgdmFsdWU6IGRpcmVjdGlvbmFsTGlnaHRNYXRyaWNlcywgdHlwZTogJ200dicgfTtcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzID0geyB2YWx1ZTogZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcFNpemVzLCB0eXBlOiAnMWZ2JyB9O1xyXG4gICAgICAgICAgICBpZiAoZGlyTGlnaHRIYXNDYXNjYWRlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93Q2FzY2FkZUNsaXBzTmVhciA9IHNoYWRvd0Nhc2NhZGVDbGlwcy5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNoYWRvd0Nhc2NhZGVDbGlwc0ZhciA9IHNoYWRvd0Nhc2NhZGVDbGlwcy5zbGljZSgpO1xyXG4gICAgICAgICAgICAgICAgc2hhZG93Q2FzY2FkZUNsaXBzTmVhci5wb3AoKTtcclxuICAgICAgICAgICAgICAgIHNoYWRvd0Nhc2NhZGVDbGlwc0Zhci5zaGlmdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgZnJvbSBmYXIgdG8gbmVhclxyXG4gICAgICAgICAgICAgICAgc2hhZG93Q2FzY2FkZUNsaXBzTmVhci5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHNGYXIucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgLy8gZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzLnJldmVyc2UoKTtcclxuICAgICAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLnNoYWRvd0Nhc2NhZGVDbGlwc05lYXIgPSB7IHZhbHVlOiBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyLCB0eXBlOiAnMWZ2JyB9O1xyXG4gICAgICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc2hhZG93Q2FzY2FkZUNsaXBzRmFyID0geyB2YWx1ZTogc2hhZG93Q2FzY2FkZUNsaXBzRmFyLCB0eXBlOiAnMWZ2JyB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3BvdExpZ2h0U2hhZG93TWFwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBzcG90TGlnaHRTaGFkb3dNYXBTaXplcyA9IHNwb3RMaWdodFNoYWRvd01hcHMubWFwKGdldFNpemUpO1xyXG4gICAgICAgICAgICB2YXIgc2hhZG93VW5pZm9ybXMgPSBzY2VuZS5zaGFkb3dVbmlmb3JtcztcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc3BvdExpZ2h0U2hhZG93TWFwcyA9IHsgdmFsdWU6IHNwb3RMaWdodFNoYWRvd01hcHMsIHR5cGU6ICd0dicgfTtcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc3BvdExpZ2h0TWF0cmljZXMgPSB7IHZhbHVlOiBzcG90TGlnaHRNYXRyaWNlcywgdHlwZTogJ200dicgfTtcclxuICAgICAgICAgICAgc2hhZG93VW5pZm9ybXMuc3BvdExpZ2h0U2hhZG93TWFwU2l6ZXMgPSB7IHZhbHVlOiBzcG90TGlnaHRTaGFkb3dNYXBTaXplcywgdHlwZTogJzFmdicgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwb2ludExpZ2h0U2hhZG93TWFwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHNoYWRvd1VuaWZvcm1zLnBvaW50TGlnaHRTaGFkb3dNYXBzID0geyB2YWx1ZTogcG9pbnRMaWdodFNoYWRvd01hcHMsIHR5cGU6ICd0dicgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbmRlckRpcmVjdGlvbmFsTGlnaHRTaGFkb3c6IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciBzcGxpdEZydXN0dW0gPSBuZXcgRnJ1c3R1bSgpO1xyXG4gICAgICAgIHZhciBzcGxpdFByb2pNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBjcm9wQkJveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHZhciBjcm9wTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICB2YXIgbGlnaHRWaWV3TWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICB2YXIgbGlnaHRWaWV3UHJvak1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcbiAgICAgICAgdmFyIGxpZ2h0UHJvak1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBzY2VuZUNhbWVyYSwgbGlnaHQsIHNoYWRvd0Nhc2NhZGVDbGlwcywgZGlyZWN0aW9uYWxMaWdodE1hdHJpY2VzLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93TWFwcykge1xyXG5cclxuICAgICAgICAgICAgdmFyIGRlZmF1bHRTaGFkb3dNYXRlcmlhbCA9IHRoaXMuX2dldERlcHRoTWF0ZXJpYWwobGlnaHQpO1xyXG4gICAgICAgICAgICB2YXIgcGFzc0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgIGdldE1hdGVyaWFsOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlLnNoYWRvd0RlcHRoTWF0ZXJpYWwgfHwgZGVmYXVsdFNoYWRvd01hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGlzTWF0ZXJpYWxDaGFuZ2VkOiBpc0RlcHRoTWF0ZXJpYWxDaGFuZ2VkLFxyXG4gICAgICAgICAgICAgICAgZ2V0VW5pZm9ybTogZ2V0RGVwdGhNYXRlcmlhbFVuaWZvcm0sXHJcbiAgICAgICAgICAgICAgICBpZlJlbmRlcjogZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5jYXN0U2hhZG93O1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNvcnRDb21wYXJlOiBSZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgLy8gRmlyc3QgZnJhbWVcclxuICAgICAgICAgICAgaWYgKCFzY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUuaXNGaW5pdGUoKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJvdW5kaW5nQm94ID0gc2NlbmUuZ2V0Qm91bmRpbmdCb3goKTtcclxuICAgICAgICAgICAgICAgIHNjZW5lLnZpZXdCb3VuZGluZ0JveExhc3RGcmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIC5jb3B5KGJvdW5kaW5nQm94KS5hcHBseVRyYW5zZm9ybShzY2VuZUNhbWVyYS52aWV3TWF0cml4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBDb25zaWRlcmluZyBtb3Zpbmcgc3BlZWQgc2luY2UgdGhlIGJvdW5kaW5nIGJveCBpcyBmcm9tIGxhc3QgZnJhbWVcclxuICAgICAgICAgICAgLy8gVE9ETzogYWRkIGEgYmlhc1xyXG4gICAgICAgICAgICB2YXIgY2xpcHBlZEZhciA9IE1hdGgubWluKC1zY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUubWluLnosIHNjZW5lQ2FtZXJhLmZhcik7XHJcbiAgICAgICAgICAgIHZhciBjbGlwcGVkTmVhciA9IE1hdGgubWF4KC1zY2VuZS52aWV3Qm91bmRpbmdCb3hMYXN0RnJhbWUubWF4LnosIHNjZW5lQ2FtZXJhLm5lYXIpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGxpZ2h0Q2FtZXJhID0gdGhpcy5fZ2V0RGlyZWN0aW9uYWxMaWdodENhbWVyYShsaWdodCwgc2NlbmUsIHNjZW5lQ2FtZXJhKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBsdnBNYXQ0QXJyID0gbGlnaHRWaWV3UHJvak1hdHJpeC5hcnJheTtcclxuICAgICAgICAgICAgbGlnaHRQcm9qTWF0cml4LmNvcHkobGlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgICAgIG1hdDQuaW52ZXJ0KGxpZ2h0Vmlld01hdHJpeC5hcnJheSwgbGlnaHRDYW1lcmEud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KGxpZ2h0Vmlld01hdHJpeC5hcnJheSwgbGlnaHRWaWV3TWF0cml4LmFycmF5LCBzY2VuZUNhbWVyYS53b3JsZFRyYW5zZm9ybS5hcnJheSk7XHJcbiAgICAgICAgICAgIG1hdDQubXVsdGlwbHkobHZwTWF0NEFyciwgbGlnaHRQcm9qTWF0cml4LmFycmF5LCBsaWdodFZpZXdNYXRyaXguYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGNsaXBQbGFuZXMgPSBbXTtcclxuICAgICAgICAgICAgdmFyIGlzUGVyc3BlY3RpdmUgPSBzY2VuZUNhbWVyYSBpbnN0YW5jZW9mIFBlcnNwZWN0aXZlQ2FtZXJhO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNjYWxlWiA9IChzY2VuZUNhbWVyYS5uZWFyICsgc2NlbmVDYW1lcmEuZmFyKSAvIChzY2VuZUNhbWVyYS5uZWFyIC0gc2NlbmVDYW1lcmEuZmFyKTtcclxuICAgICAgICAgICAgdmFyIG9mZnNldFogPSAyICogc2NlbmVDYW1lcmEubmVhciAqIHNjZW5lQ2FtZXJhLmZhciAvIChzY2VuZUNhbWVyYS5uZWFyIC0gc2NlbmVDYW1lcmEuZmFyKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbGlnaHQuc2hhZG93Q2FzY2FkZTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2xvZyA9IGNsaXBwZWROZWFyICogTWF0aC5wb3coY2xpcHBlZEZhciAvIGNsaXBwZWROZWFyLCBpIC8gbGlnaHQuc2hhZG93Q2FzY2FkZSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VuaSA9IGNsaXBwZWROZWFyICsgKGNsaXBwZWRGYXIgLSBjbGlwcGVkTmVhcikgKiBpIC8gbGlnaHQuc2hhZG93Q2FzY2FkZTtcclxuICAgICAgICAgICAgICAgIHZhciBjID0gY2xvZyAqIGxpZ2h0LmNhc2NhZGVTcGxpdExvZ0ZhY3RvciArIGN1bmkgKiAoMSAtIGxpZ2h0LmNhc2NhZGVTcGxpdExvZ0ZhY3Rvcik7XHJcbiAgICAgICAgICAgICAgICBjbGlwUGxhbmVzLnB1c2goYyk7XHJcbiAgICAgICAgICAgICAgICBzaGFkb3dDYXNjYWRlQ2xpcHMucHVzaCgtKC1jICogc2NhbGVaICsgb2Zmc2V0WikgLyAtYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9nZXRUZXh0dXJlKGxpZ2h0LCBsaWdodC5zaGFkb3dDYXNjYWRlKTtcclxuICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodFNoYWRvd01hcHMucHVzaCh0ZXh0dXJlKTtcclxuXHJcbiAgICAgICAgICAgIHZhciB2aWV3cG9ydCA9IHJlbmRlcmVyLnZpZXdwb3J0O1xyXG5cclxuICAgICAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5hdHRhY2godGV4dHVyZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmJpbmQocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICBfZ2wuY2xlYXIoX2dsLkNPTE9SX0JVRkZFUl9CSVQgfCBfZ2wuREVQVEhfQlVGRkVSX0JJVCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpZ2h0LnNoYWRvd0Nhc2NhZGU7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBzcGxpdHRlZCBmcnVzdHVtXHJcbiAgICAgICAgICAgICAgICB2YXIgbmVhclBsYW5lID0gY2xpcFBsYW5lc1tpXTtcclxuICAgICAgICAgICAgICAgIHZhciBmYXJQbGFuZSA9IGNsaXBQbGFuZXNbaSArIDFdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUGVyc3BlY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXQ0LnBlcnNwZWN0aXZlKHNwbGl0UHJvak1hdHJpeC5hcnJheSwgc2NlbmVDYW1lcmEuZm92IC8gMTgwICogTWF0aC5QSSwgc2NlbmVDYW1lcmEuYXNwZWN0LCBuZWFyUGxhbmUsIGZhclBsYW5lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdDQub3J0aG8oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0UHJvak1hdHJpeC5hcnJheSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NlbmVDYW1lcmEubGVmdCwgc2NlbmVDYW1lcmEucmlnaHQsIHNjZW5lQ2FtZXJhLmJvdHRvbSwgc2NlbmVDYW1lcmEudG9wLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZWFyUGxhbmUsIGZhclBsYW5lXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNwbGl0RnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbihzcGxpdFByb2pNYXRyaXgpO1xyXG4gICAgICAgICAgICAgICAgc3BsaXRGcnVzdHVtLmdldFRyYW5zZm9ybWVkQm91bmRpbmdCb3goY3JvcEJCb3gsIGxpZ2h0Vmlld01hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICBjcm9wQkJveC5hcHBseVByb2plY3Rpb24obGlnaHRQcm9qTWF0cml4KTtcclxuICAgICAgICAgICAgICAgIHZhciBfbWluID0gY3JvcEJCb3gubWluLmFycmF5O1xyXG4gICAgICAgICAgICAgICAgdmFyIF9tYXggPSBjcm9wQkJveC5tYXguYXJyYXk7XHJcbiAgICAgICAgICAgICAgICBfbWluWzBdID0gTWF0aC5tYXgoX21pblswXSwgLTEpO1xyXG4gICAgICAgICAgICAgICAgX21pblsxXSA9IE1hdGgubWF4KF9taW5bMV0sIC0xKTtcclxuICAgICAgICAgICAgICAgIF9tYXhbMF0gPSBNYXRoLm1pbihfbWF4WzBdLCAxKTtcclxuICAgICAgICAgICAgICAgIF9tYXhbMV0gPSBNYXRoLm1pbihfbWF4WzFdLCAxKTtcclxuICAgICAgICAgICAgICAgIGNyb3BNYXRyaXgub3J0aG8oX21pblswXSwgX21heFswXSwgX21pblsxXSwgX21heFsxXSwgMSwgLTEpO1xyXG4gICAgICAgICAgICAgICAgbGlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5tdWx0aXBseUxlZnQoY3JvcE1hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHNoYWRvd1NpemUgPSBsaWdodC5zaGFkb3dSZXNvbHV0aW9uIHx8IDUxMjtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBSZXZlcnNlZCwgbGVmdCB0byByaWdodCA9PiBmYXIgdG8gbmVhclxyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQoKGxpZ2h0LnNoYWRvd0Nhc2NhZGUgLSBpIC0gMSkgKiBzaGFkb3dTaXplLCAwLCBzaGFkb3dTaXplLCBzaGFkb3dTaXplLCAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcmVuZGVyTGlzdCA9IHNjZW5lLnVwZGF0ZVJlbmRlckxpc3QobGlnaHRDYW1lcmEpO1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhyZW5kZXJMaXN0Lm9wYXF1ZSwgbGlnaHRDYW1lcmEsIHBhc3NDb25maWcpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEZpbHRlciBmb3IgVlNNXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dhdXNzaWFuRmlsdGVyKHJlbmRlcmVyLCB0ZXh0dXJlLCB0ZXh0dXJlLndpZHRoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICAgICAgICAgIG1hdHJpeC5jb3B5KGxpZ2h0Q2FtZXJhLnZpZXdNYXRyaXgpXHJcbiAgICAgICAgICAgICAgICAgICAgLm11bHRpcGx5TGVmdChsaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb25hbExpZ2h0TWF0cmljZXMucHVzaChtYXRyaXguYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxpZ2h0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXguY29weShsaWdodFByb2pNYXRyaXgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAgICAgcmVuZGVyZXIuc2V0Vmlld3BvcnQodmlld3BvcnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIHJlbmRlclNwb3RMaWdodFNoYWRvdzogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgbGlnaHQsIHNwb3RMaWdodE1hdHJpY2VzLCBzcG90TGlnaHRTaGFkb3dNYXBzKSB7XHJcblxyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fZ2V0VGV4dHVyZShsaWdodCk7XHJcbiAgICAgICAgdmFyIGxpZ2h0Q2FtZXJhID0gdGhpcy5fZ2V0U3BvdExpZ2h0Q2FtZXJhKGxpZ2h0KTtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmF0dGFjaCh0ZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgX2dsLmNsZWFyKF9nbC5DT0xPUl9CVUZGRVJfQklUIHwgX2dsLkRFUFRIX0JVRkZFUl9CSVQpO1xyXG5cclxuICAgICAgICB2YXIgZGVmYXVsdFNoYWRvd01hdGVyaWFsID0gdGhpcy5fZ2V0RGVwdGhNYXRlcmlhbChsaWdodCk7XHJcbiAgICAgICAgdmFyIHBhc3NDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGdldE1hdGVyaWFsOiBmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGUuc2hhZG93RGVwdGhNYXRlcmlhbCB8fCBkZWZhdWx0U2hhZG93TWF0ZXJpYWw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGlzTWF0ZXJpYWxDaGFuZ2VkOiBpc0RlcHRoTWF0ZXJpYWxDaGFuZ2VkLFxyXG4gICAgICAgICAgICBnZXRVbmlmb3JtOiBnZXREZXB0aE1hdGVyaWFsVW5pZm9ybSxcclxuICAgICAgICAgICAgaWZSZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5jYXN0U2hhZG93O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzb3J0Q29tcGFyZTogUmVuZGVyZXIub3BhcXVlU29ydENvbXBhcmVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgcmVuZGVyTGlzdCA9IHNjZW5lLnVwZGF0ZVJlbmRlckxpc3QobGlnaHRDYW1lcmEpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MocmVuZGVyTGlzdC5vcGFxdWUsIGxpZ2h0Q2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgLy8gRmlsdGVyIGZvciBWU01cclxuICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xyXG4gICAgICAgICAgICB0aGlzLl9nYXVzc2lhbkZpbHRlcihyZW5kZXJlciwgdGV4dHVyZSwgdGV4dHVyZS53aWR0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICBtYXRyaXguY29weShsaWdodENhbWVyYS53b3JsZFRyYW5zZm9ybSlcclxuICAgICAgICAgICAgLmludmVydCgpXHJcbiAgICAgICAgICAgIC5tdWx0aXBseUxlZnQobGlnaHRDYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XHJcblxyXG4gICAgICAgIHNwb3RMaWdodFNoYWRvd01hcHMucHVzaCh0ZXh0dXJlKTtcclxuICAgICAgICBzcG90TGlnaHRNYXRyaWNlcy5wdXNoKG1hdHJpeC5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbmRlclBvaW50TGlnaHRTaGFkb3c6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGxpZ2h0LCBwb2ludExpZ2h0U2hhZG93TWFwcykge1xyXG4gICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fZ2V0VGV4dHVyZShsaWdodCk7XHJcbiAgICAgICAgdmFyIF9nbCA9IHJlbmRlcmVyLmdsO1xyXG4gICAgICAgIHBvaW50TGlnaHRTaGFkb3dNYXBzLnB1c2godGV4dHVyZSk7XHJcblxyXG4gICAgICAgIHZhciBkZWZhdWx0U2hhZG93TWF0ZXJpYWwgPSB0aGlzLl9nZXREZXB0aE1hdGVyaWFsKGxpZ2h0KTtcclxuICAgICAgICB2YXIgcGFzc0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uIChyZW5kZXJhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5zaGFkb3dEZXB0aE1hdGVyaWFsIHx8IGRlZmF1bHRTaGFkb3dNYXRlcmlhbDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0VW5pZm9ybTogZ2V0RGVwdGhNYXRlcmlhbFVuaWZvcm0sXHJcbiAgICAgICAgICAgIHNvcnRDb21wYXJlOiBSZW5kZXJlci5vcGFxdWVTb3J0Q29tcGFyZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJMaXN0RWFjaFNpZGUgPSB7XHJcbiAgICAgICAgICAgIHB4OiBbXSwgcHk6IFtdLCBwejogW10sIG54OiBbXSwgbnk6IFtdLCBuejogW11cclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciBiYm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdmFyIGxpZ2h0V29ybGRQb3NpdGlvbiA9IGxpZ2h0LmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcclxuICAgICAgICB2YXIgbGlnaHRCQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XHJcbiAgICAgICAgdmFyIHJhbmdlID0gbGlnaHQucmFuZ2U7XHJcbiAgICAgICAgbGlnaHRCQm94Lm1pbi5zZXRBcnJheShsaWdodFdvcmxkUG9zaXRpb24pO1xyXG4gICAgICAgIGxpZ2h0QkJveC5tYXguc2V0QXJyYXkobGlnaHRXb3JsZFBvc2l0aW9uKTtcclxuICAgICAgICB2YXIgZXh0ZW50ID0gbmV3IFZlY3RvcjMocmFuZ2UsIHJhbmdlLCByYW5nZSk7XHJcbiAgICAgICAgbGlnaHRCQm94Lm1heC5hZGQoZXh0ZW50KTtcclxuICAgICAgICBsaWdodEJCb3gubWluLnN1YihleHRlbnQpO1xyXG5cclxuICAgICAgICB2YXIgdGFyZ2V0c05lZWRSZW5kZXIgPSB7IHB4OiBmYWxzZSwgcHk6IGZhbHNlLCBwejogZmFsc2UsIG54OiBmYWxzZSwgbnk6IGZhbHNlLCBuejogZmFsc2UgfTtcclxuICAgICAgICBzY2VuZS50cmF2ZXJzZShmdW5jdGlvbiAocmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICBpZiAocmVuZGVyYWJsZS5pc1JlbmRlcmFibGUoKSAmJiByZW5kZXJhYmxlLmNhc3RTaGFkb3cpIHtcclxuICAgICAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IHJlbmRlcmFibGUuZ2VvbWV0cnk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWdlb21ldHJ5LmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YXJnZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxpc3RFYWNoU2lkZVt0YXJnZXRzW2ldXS5wdXNoKHJlbmRlcmFibGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBiYm94LnRyYW5zZm9ybUZyb20oZ2VvbWV0cnkuYm91bmRpbmdCb3gsIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFiYm94LmludGVyc2VjdEJvdW5kaW5nQm94KGxpZ2h0QkJveCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgYmJveC51cGRhdGVWZXJ0aWNlcygpO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YXJnZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c05lZWRSZW5kZXJbdGFyZ2V0c1tpXV0gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZ0eCA9IGJib3gudmVydGljZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHggPSB2dHhbMF0gLSBsaWdodFdvcmxkUG9zaXRpb25bMF07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHkgPSB2dHhbMV0gLSBsaWdodFdvcmxkUG9zaXRpb25bMV07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHogPSB2dHhbMl0gLSBsaWdodFdvcmxkUG9zaXRpb25bMl07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFic3ggPSBNYXRoLmFicyh4KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYWJzeSA9IE1hdGguYWJzKHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhYnN6ID0gTWF0aC5hYnMoeik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFic3ggPiBhYnN5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYnN4ID4gYWJzeikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c05lZWRSZW5kZXJbeCA+IDAgPyAncHgnIDogJ254J10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c05lZWRSZW5kZXJbeiA+IDAgPyAncHonIDogJ256J10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWJzeSA+IGFic3opIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHNOZWVkUmVuZGVyW3kgPiAwID8gJ3B5JyA6ICdueSddID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHNOZWVkUmVuZGVyW3ogPiAwID8gJ3B6JyA6ICdueiddID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFyZ2V0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRzTmVlZFJlbmRlclt0YXJnZXRzW2ldXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMaXN0RWFjaFNpZGVbdGFyZ2V0c1tpXV0ucHVzaChyZW5kZXJhYmxlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRhcmdldHNbaV07XHJcbiAgICAgICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLl9nZXRQb2ludExpZ2h0Q2FtZXJhKGxpZ2h0LCB0YXJnZXQpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYXR0YWNoKHRleHR1cmUsIF9nbC5DT0xPUl9BVFRBQ0hNRU5UMCwgX2dsLlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGkpO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgX2dsLmNsZWFyKF9nbC5DT0xPUl9CVUZGRVJfQklUIHwgX2dsLkRFUFRIX0JVRkZFUl9CSVQpO1xyXG5cclxuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhyZW5kZXJMaXN0RWFjaFNpZGVbdGFyZ2V0XSwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXREZXB0aE1hdGVyaWFsOiBmdW5jdGlvbiAobGlnaHQpIHtcclxuICAgICAgICB2YXIgc2hhZG93TWF0ZXJpYWwgPSB0aGlzLl9saWdodE1hdGVyaWFsc1tsaWdodC5fX3VpZF9fXTtcclxuICAgICAgICB2YXIgaXNQb2ludExpZ2h0ID0gbGlnaHQudHlwZSA9PT0gJ1BPSU5UX0xJR0hUJztcclxuICAgICAgICBpZiAoIXNoYWRvd01hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIHZhciBzaGFkZXJQcmVmaXggPSBpc1BvaW50TGlnaHQgPyAnY2xheS5zbS5kaXN0YW5jZS4nIDogJ2NsYXkuc20uZGVwdGguJztcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiB0aGlzLnByZWNpc2lvbixcclxuICAgICAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihTaGFkZXIuc291cmNlKHNoYWRlclByZWZpeCArICd2ZXJ0ZXgnKSwgU2hhZGVyLnNvdXJjZShzaGFkZXJQcmVmaXggKyAnZnJhZ21lbnQnKSlcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9saWdodE1hdGVyaWFsc1tsaWdodC5fX3VpZF9fXSA9IHNoYWRvd01hdGVyaWFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGlnaHQuc2hhZG93U2xvcGVTY2FsZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHNoYWRvd01hdGVyaWFsLnNldFVuaWZvcm0oJ3Nsb3BlU2NhbGUnLCBsaWdodC5zaGFkb3dTbG9wZVNjYWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxpZ2h0LnNoYWRvd0JpYXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzaGFkb3dNYXRlcmlhbC5zZXRVbmlmb3JtKCdiaWFzJywgbGlnaHQuc2hhZG93Qmlhcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNvZnRTaGFkb3cgPT09IFNoYWRvd01hcFBhc3MuVlNNKSB7XHJcbiAgICAgICAgICAgIHNoYWRvd01hdGVyaWFsLmRlZmluZSgnZnJhZ21lbnQnLCAnVVNFX1ZTTScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgJ1VTRV9WU00nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc1BvaW50TGlnaHQpIHtcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwuc2V0KCdsaWdodFBvc2l0aW9uJywgbGlnaHQuZ2V0V29ybGRQb3NpdGlvbigpLmFycmF5KTtcclxuICAgICAgICAgICAgc2hhZG93TWF0ZXJpYWwuc2V0KCdyYW5nZScsIGxpZ2h0LnJhbmdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzaGFkb3dNYXRlcmlhbDtcclxuICAgIH0sXHJcblxyXG4gICAgX2dhdXNzaWFuRmlsdGVyOiBmdW5jdGlvbiAocmVuZGVyZXIsIHRleHR1cmUsIHNpemUpIHtcclxuICAgICAgICB2YXIgcGFyYW1ldGVyID0ge1xyXG4gICAgICAgICAgICB3aWR0aDogc2l6ZSxcclxuICAgICAgICAgICAgaGVpZ2h0OiBzaXplLFxyXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkZMT0FUXHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgdG1wVGV4dHVyZSA9IHRoaXMuX3RleHR1cmVQb29sLmdldChwYXJhbWV0ZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5hdHRhY2godG1wVGV4dHVyZSk7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZ2F1c3NpYW5QYXNzSC5zZXRVbmlmb3JtKCd0ZXh0dXJlJywgdGV4dHVyZSk7XHJcbiAgICAgICAgdGhpcy5fZ2F1c3NpYW5QYXNzSC5zZXRVbmlmb3JtKCd0ZXh0dXJlV2lkdGgnLCBzaXplKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NILnJlbmRlcihyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmF0dGFjaCh0ZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NWLnNldFVuaWZvcm0oJ3RleHR1cmUnLCB0bXBUZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NWLnNldFVuaWZvcm0oJ3RleHR1cmVIZWlnaHQnLCBzaXplKTtcclxuICAgICAgICB0aGlzLl9nYXVzc2lhblBhc3NWLnJlbmRlcihyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVBvb2wucHV0KHRtcFRleHR1cmUpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZ2V0VGV4dHVyZTogZnVuY3Rpb24gKGxpZ2h0LCBjYXNjYWRlKSB7XHJcbiAgICAgICAgdmFyIGtleSA9IGxpZ2h0Ll9fdWlkX187XHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl90ZXh0dXJlc1trZXldO1xyXG4gICAgICAgIHZhciByZXNvbHV0aW9uID0gbGlnaHQuc2hhZG93UmVzb2x1dGlvbiB8fCA1MTI7XHJcbiAgICAgICAgY2FzY2FkZSA9IGNhc2NhZGUgfHwgMTtcclxuICAgICAgICBpZiAoIXRleHR1cmUpIHtcclxuICAgICAgICAgICAgaWYgKGxpZ2h0LnR5cGUgPT09ICdQT0lOVF9MSUdIVCcpIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZUN1YmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQXQgbW9zdCA0IGNhc2NhZGVcclxuICAgICAgICAgICAgLy8gVE9ETyBzaGFyZSB3aXRoIGhlaWdodCA/XHJcbiAgICAgICAgICAgIHRleHR1cmUud2lkdGggPSByZXNvbHV0aW9uICogY2FzY2FkZTtcclxuICAgICAgICAgICAgdGV4dHVyZS5oZWlnaHQgPSByZXNvbHV0aW9uO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zb2Z0U2hhZG93ID09PSBTaGFkb3dNYXBQYXNzLlZTTSkge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS50eXBlID0gVGV4dHVyZS5GTE9BVDtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUuYW5pc290cm9waWMgPSA0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5taW5GaWx0ZXIgPSBnbGVudW0uTkVBUkVTVDtcclxuICAgICAgICAgICAgICAgIHRleHR1cmUubWFnRmlsdGVyID0gZ2xlbnVtLk5FQVJFU1Q7XHJcbiAgICAgICAgICAgICAgICB0ZXh0dXJlLnVzZU1pcG1hcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3RleHR1cmVzW2tleV0gPSB0ZXh0dXJlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXRQb2ludExpZ2h0Q2FtZXJhOiBmdW5jdGlvbiAobGlnaHQsIHRhcmdldCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fbGlnaHRDYW1lcmFzLnBvaW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xpZ2h0Q2FtZXJhcy5wb2ludCA9IHtcclxuICAgICAgICAgICAgICAgIHB4OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcclxuICAgICAgICAgICAgICAgIG54OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcclxuICAgICAgICAgICAgICAgIHB5OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcclxuICAgICAgICAgICAgICAgIG55OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcclxuICAgICAgICAgICAgICAgIHB6OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKSxcclxuICAgICAgICAgICAgICAgIG56OiBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fbGlnaHRDYW1lcmFzLnBvaW50W3RhcmdldF07XHJcblxyXG4gICAgICAgIGNhbWVyYS5mYXIgPSBsaWdodC5yYW5nZTtcclxuICAgICAgICBjYW1lcmEuZm92ID0gOTA7XHJcbiAgICAgICAgY2FtZXJhLnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgICAgICBzd2l0Y2ggKHRhcmdldCkge1xyXG4gICAgICAgICAgICBjYXNlICdweCc6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuUE9TSVRJVkVfWCwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdueCc6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuTkVHQVRJVkVfWCwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdweSc6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuUE9TSVRJVkVfWSwgVmVjdG9yMy5QT1NJVElWRV9aKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdueSc6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuTkVHQVRJVkVfWSwgVmVjdG9yMy5ORUdBVElWRV9aKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdweic6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuUE9TSVRJVkVfWiwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdueic6XHJcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KFZlY3RvcjMuTkVHQVRJVkVfWiwgVmVjdG9yMy5ORUdBVElWRV9ZKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsaWdodC5nZXRXb3JsZFBvc2l0aW9uKGNhbWVyYS5wb3NpdGlvbik7XHJcbiAgICAgICAgY2FtZXJhLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FtZXJhO1xyXG4gICAgfSxcclxuXHJcbiAgICBfZ2V0RGlyZWN0aW9uYWxMaWdodENhbWVyYTogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgbGlnaHRWaWV3TWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICB2YXIgc2NlbmVWaWV3Qm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuICAgICAgICB2YXIgbGlnaHRWaWV3QkJveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIC8vIENhbWVyYSBvZiBkaXJlY3Rpb25hbCBsaWdodCB3aWxsIGJlIGFkanVzdGVkXHJcbiAgICAgICAgLy8gdG8gY29udGFpbiB0aGUgdmlldyBmcnVzdHVtIGFuZCBzY2VuZSBib3VuZGluZyBib3ggYXMgdGlnaHRseSBhcyBwb3NzaWJsZVxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobGlnaHQsIHNjZW5lLCBzY2VuZUNhbWVyYSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2xpZ2h0Q2FtZXJhcy5kaXJlY3Rpb25hbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbGlnaHRDYW1lcmFzLmRpcmVjdGlvbmFsID0gbmV3IE9ydGhvQ2FtZXJhKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNhbWVyYSA9IHRoaXMuX2xpZ2h0Q2FtZXJhcy5kaXJlY3Rpb25hbDtcclxuXHJcbiAgICAgICAgICAgIHNjZW5lVmlld0JvdW5kaW5nQm94LmNvcHkoc2NlbmUudmlld0JvdW5kaW5nQm94TGFzdEZyYW1lKTtcclxuICAgICAgICAgICAgc2NlbmVWaWV3Qm91bmRpbmdCb3guaW50ZXJzZWN0aW9uKHNjZW5lQ2FtZXJhLmZydXN0dW0uYm91bmRpbmdCb3gpO1xyXG4gICAgICAgICAgICAvLyBNb3ZlIHRvIHRoZSBjZW50ZXIgb2YgZnJ1c3R1bShpbiB3b3JsZCBzcGFjZSlcclxuICAgICAgICAgICAgY2FtZXJhLnBvc2l0aW9uXHJcbiAgICAgICAgICAgICAgICAuY29weShzY2VuZVZpZXdCb3VuZGluZ0JveC5taW4pXHJcbiAgICAgICAgICAgICAgICAuYWRkKHNjZW5lVmlld0JvdW5kaW5nQm94Lm1heClcclxuICAgICAgICAgICAgICAgIC5zY2FsZSgwLjUpXHJcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtTWF0NChzY2VuZUNhbWVyYS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIGNhbWVyYS5yb3RhdGlvbi5jb3B5KGxpZ2h0LnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgY2FtZXJhLnNjYWxlLmNvcHkobGlnaHQuc2NhbGUpO1xyXG4gICAgICAgICAgICBjYW1lcmEudXBkYXRlV29ybGRUcmFuc2Zvcm0oKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0byBsaWdodCB2aWV3IHNwYWNlXHJcbiAgICAgICAgICAgIE1hdHJpeDQuaW52ZXJ0KGxpZ2h0Vmlld01hdHJpeCwgY2FtZXJhLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgTWF0cml4NC5tdWx0aXBseShsaWdodFZpZXdNYXRyaXgsIGxpZ2h0Vmlld01hdHJpeCwgc2NlbmVDYW1lcmEud29ybGRUcmFuc2Zvcm0pO1xyXG5cclxuICAgICAgICAgICAgbGlnaHRWaWV3QkJveC5jb3B5KHNjZW5lVmlld0JvdW5kaW5nQm94KS5hcHBseVRyYW5zZm9ybShsaWdodFZpZXdNYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgdmFyIG1pbiA9IGxpZ2h0Vmlld0JCb3gubWluLmFycmF5O1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gbGlnaHRWaWV3QkJveC5tYXguYXJyYXk7XHJcblxyXG4gICAgICAgICAgICAvLyBNb3ZlIGNhbWVyYSB0byBhZGp1c3QgdGhlIG5lYXIgdG8gMFxyXG4gICAgICAgICAgICBjYW1lcmEucG9zaXRpb24uc2V0KChtaW5bMF0gKyBtYXhbMF0pIC8gMiwgKG1pblsxXSArIG1heFsxXSkgLyAyLCBtYXhbMl0pXHJcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtTWF0NChjYW1lcmEud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICBjYW1lcmEubmVhciA9IDA7XHJcbiAgICAgICAgICAgIGNhbWVyYS5mYXIgPSAtbWluWzJdICsgbWF4WzJdO1xyXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgcmVjZWl2ZXJzIG5vdCBpbiB0aGUgZnJ1c3R1bSB3aWxsIHN0aWwgcmVjZWl2ZSB0aGUgc2hhZG93LlxyXG4gICAgICAgICAgICBpZiAoaXNOYU4odGhpcy5saWdodEZydXN0dW1CaWFzKSkge1xyXG4gICAgICAgICAgICAgICAgY2FtZXJhLmZhciAqPSA0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY2FtZXJhLmZhciArPSB0aGlzLmxpZ2h0RnJ1c3R1bUJpYXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FtZXJhLmxlZnQgPSBtaW5bMF07XHJcbiAgICAgICAgICAgIGNhbWVyYS5yaWdodCA9IG1heFswXTtcclxuICAgICAgICAgICAgY2FtZXJhLnRvcCA9IG1heFsxXTtcclxuICAgICAgICAgICAgY2FtZXJhLmJvdHRvbSA9IG1pblsxXTtcclxuICAgICAgICAgICAgY2FtZXJhLnVwZGF0ZSh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBjYW1lcmE7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgX2dldFNwb3RMaWdodENhbWVyYTogZnVuY3Rpb24gKGxpZ2h0KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9saWdodENhbWVyYXMuc3BvdCkge1xyXG4gICAgICAgICAgICB0aGlzLl9saWdodENhbWVyYXMuc3BvdCA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy5fbGlnaHRDYW1lcmFzLnNwb3Q7XHJcbiAgICAgICAgLy8gVXBkYXRlIHByb3BlcnRpZXNcclxuICAgICAgICBjYW1lcmEuZm92ID0gbGlnaHQucGVudW1icmFBbmdsZSAqIDI7XHJcbiAgICAgICAgY2FtZXJhLmZhciA9IGxpZ2h0LnJhbmdlO1xyXG4gICAgICAgIGNhbWVyYS53b3JsZFRyYW5zZm9ybS5jb3B5KGxpZ2h0LndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICBjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgICAgIG1hdDQuaW52ZXJ0KGNhbWVyYS52aWV3TWF0cml4LmFycmF5LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG5cclxuICAgICAgICByZXR1cm4gY2FtZXJhO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ8V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBbcmVuZGVyZXJdXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5wcm90b3R5cGVcclxuICAgICAqL1xyXG4gICAgLy8gUEVORElORyBSZW5kZXJlciBvciBXZWJHTFJlbmRlcmluZ0NvbnRleHRcclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbCB8fCByZW5kZXJlcjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmRpc3Bvc2UoX2dsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5fdGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5fdGV4dHVyZXNbbmFtZV0uZGlzcG9zZShfZ2wpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVBvb2wuY2xlYXIocmVuZGVyZXIuZ2wpO1xyXG5cclxuICAgICAgICB0aGlzLl9kZXB0aE1hdGVyaWFscyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2Rpc3RhbmNlTWF0ZXJpYWxzID0ge307XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZXMgPSB7fTtcclxuICAgICAgICB0aGlzLl9saWdodENhbWVyYXMgPSB7fTtcclxuICAgICAgICB0aGlzLl9zaGFkb3dNYXBOdW1iZXIgPSB7XHJcbiAgICAgICAgICAgICdQT0lOVF9MSUdIVCc6IDAsXHJcbiAgICAgICAgICAgICdESVJFQ1RJT05BTF9MSUdIVCc6IDAsXHJcbiAgICAgICAgICAgICdTUE9UX0xJR0hUJzogMFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fbWVzaE1hdGVyaWFscyA9IHt9O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3JlY2VpdmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbWVzaCA9IHRoaXMuX3JlY2VpdmVyc1tpXTtcclxuICAgICAgICAgICAgLy8gTWVzaCBtYXkgYmUgZGlzcG9zZWRcclxuICAgICAgICAgICAgaWYgKG1lc2gubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYXRlcmlhbCA9IG1lc2gubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnUE9JTlRfTElHSFRfU0hBRE9XX0NPVU5UJyk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnRElSRUNUSU9OQUxfTElHSFRfU0hBRE9XX0NPVU5UJyk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC51bmRlZmluZSgnZnJhZ21lbnQnLCAnQU1CSUVOVF9MSUdIVF9TSEFET1dfQ09VTlQnKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnc2hhZG93RW5hYmxlZCcsIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9yZWNlaXZlcnMgPSBbXTtcclxuICAgICAgICB0aGlzLl9saWdodHNDYXN0U2hhZG93ID0gW107XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lIGNsYXkucHJlUGFzcy5TaGFkb3dNYXAuVlNNXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqL1xyXG5TaGFkb3dNYXBQYXNzLlZTTSA9IDE7XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5wcmVQYXNzLlNoYWRvd01hcC5QQ0ZcclxuICogQHR5cGUge251bWJlcn1cclxuICovXHJcblNoYWRvd01hcFBhc3MuUENGID0gMjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNoYWRvd01hcFBhc3M7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBSYXkgZnJvbSAnLi4vbWF0aC9SYXknO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tICcuLi9tYXRoL1ZlY3RvcjInO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgUmVuZGVyYWJsZSBmcm9tICcuLi9SZW5kZXJhYmxlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBpY2tpbmcuUmF5UGlja2luZ1xyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIFJheVBpY2tpbmcgPSBCYXNlLmV4dGVuZCgvKiogQGxlbmRzIGNsYXkucGlja2luZy5SYXlQaWNraW5nIyAqL3tcclxuICAgIC8qKlxyXG4gICAgICogVGFyZ2V0IHNjZW5lXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5TY2VuZX1cclxuICAgICAqL1xyXG4gICAgc2NlbmU6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFRhcmdldCBjYW1lcmFcclxuICAgICAqIEB0eXBlIHtjbGF5LkNhbWVyYX1cclxuICAgICAqL1xyXG4gICAgY2FtZXJhOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBUYXJnZXQgcmVuZGVyZXJcclxuICAgICAqIEB0eXBlIHtjbGF5LlJlbmRlcmVyfVxyXG4gICAgICovXHJcbiAgICByZW5kZXJlcjogbnVsbFxyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9yYXkgPSBuZXcgUmF5KCk7XHJcbiAgICB0aGlzLl9uZGMgPSBuZXcgVmVjdG9yMigpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkucGlja2luZy5SYXlQaWNraW5nLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaWNrIHRoZSBuZWFyZXN0IGludGVyc2VjdGlvbiBvYmplY3QgaW4gdGhlIHNjZW5lXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHggTW91c2UgcG9zaXRpb24geFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB5IE1vdXNlIHBvc2l0aW9uIHlcclxuICAgICAqIEBwYXJhbSAge2Jvb2xlYW59IFtmb3JjZVBpY2tBbGw9ZmFsc2VdIGlnbm9yZSBpZ25vcmVQaWNraW5nXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LnBpY2tpbmcuUmF5UGlja2luZ35JbnRlcnNlY3Rpb259XHJcbiAgICAgKi9cclxuICAgIHBpY2s6IGZ1bmN0aW9uICh4LCB5LCBmb3JjZVBpY2tBbGwpIHtcclxuICAgICAgICB2YXIgb3V0ID0gdGhpcy5waWNrQWxsKHgsIHksIFtdLCBmb3JjZVBpY2tBbGwpO1xyXG4gICAgICAgIHJldHVybiBvdXRbMF0gfHwgbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQaWNrIGFsbCBpbnRlcnNlY3Rpb24gb2JqZWN0cywgd2ljaCB3aWxsIGJlIHNvcnRlZCBmcm9tIG5lYXIgdG8gZmFyXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHggTW91c2UgcG9zaXRpb24geFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB5IE1vdXNlIHBvc2l0aW9uIHlcclxuICAgICAqIEBwYXJhbSAge0FycmF5fSBbb3V0cHV0XVxyXG4gICAgICogQHBhcmFtICB7Ym9vbGVhbn0gW2ZvcmNlUGlja0FsbD1mYWxzZV0gaWdub3JlIGlnbm9yZVBpY2tpbmdcclxuICAgICAqIEByZXR1cm4ge0FycmF5LjxjbGF5LnBpY2tpbmcuUmF5UGlja2luZ35JbnRlcnNlY3Rpb24+fVxyXG4gICAgICovXHJcbiAgICBwaWNrQWxsOiBmdW5jdGlvbiAoeCwgeSwgb3V0cHV0LCBmb3JjZVBpY2tBbGwpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcmVlblRvTkRDKHgsIHksIHRoaXMuX25kYyk7XHJcbiAgICAgICAgdGhpcy5jYW1lcmEuY2FzdFJheSh0aGlzLl9uZGMsIHRoaXMuX3JheSk7XHJcblxyXG4gICAgICAgIG91dHB1dCA9IG91dHB1dCB8fCBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5faW50ZXJzZWN0Tm9kZSh0aGlzLnNjZW5lLCBvdXRwdXQsIGZvcmNlUGlja0FsbCB8fCBmYWxzZSk7XHJcblxyXG4gICAgICAgIG91dHB1dC5zb3J0KHRoaXMuX2ludGVyc2VjdGlvbkNvbXBhcmVGdW5jKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH0sXHJcblxyXG4gICAgX2ludGVyc2VjdE5vZGU6IGZ1bmN0aW9uIChub2RlLCBvdXQsIGZvcmNlUGlja0FsbCkge1xyXG4gICAgICAgIGlmICgobm9kZSBpbnN0YW5jZW9mIFJlbmRlcmFibGUpICYmIG5vZGUuaXNSZW5kZXJhYmxlKCkpIHtcclxuICAgICAgICAgICAgaWYgKCghbm9kZS5pZ25vcmVQaWNraW5nIHx8IGZvcmNlUGlja0FsbClcclxuICAgICAgICAgICAgICAgICYmIChcclxuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHRyaWFuZ2xlIG1lc2ggc3VwcG9ydCByYXkgcGlja2luZ1xyXG4gICAgICAgICAgICAgICAgICAgIChub2RlLm1vZGUgPT09IGdsZW51bS5UUklBTkdMRVMgJiYgbm9kZS5nZW9tZXRyeS5pc1VzZUluZGljZXMoKSlcclxuICAgICAgICAgICAgICAgICAgICAvLyBPciBpZiBnZW9tZXRyeSBoYXMgaXQncyBvd24gcGlja0J5UmF5LCBwaWNrLCBpbXBsZW1lbnRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIHx8IG5vZGUuZ2VvbWV0cnkucGlja0J5UmF5XHJcbiAgICAgICAgICAgICAgICAgICAgfHwgbm9kZS5nZW9tZXRyeS5waWNrXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faW50ZXJzZWN0UmVuZGVyYWJsZShub2RlLCBvdXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5faW50ZXJzZWN0Tm9kZShub2RlLl9jaGlsZHJlbltpXSwgb3V0LCBmb3JjZVBpY2tBbGwpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX2ludGVyc2VjdFJlbmRlcmFibGU6IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgdmFyIHYyID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB2YXIgdjMgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgIHZhciByYXkgPSBuZXcgUmF5KCk7XHJcbiAgICAgICAgdmFyIHdvcmxkSW52ZXJzZSA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgb3V0KSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgaXNTa2lubmVkTWVzaCA9IHJlbmRlcmFibGUuaXNTa2lubmVkTWVzaCgpO1xyXG4gICAgICAgICAgICByYXkuY29weSh0aGlzLl9yYXkpO1xyXG4gICAgICAgICAgICBNYXRyaXg0LmludmVydCh3b3JsZEludmVyc2UsIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0pO1xyXG5cclxuICAgICAgICAgICAgLy8gU2tpbm5lZCBtZXNoIHdpbGwgaWdub3JlIHRoZSB3b3JsZCB0cmFuc2Zvcm0uXHJcbiAgICAgICAgICAgIGlmICghaXNTa2lubmVkTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgcmF5LmFwcGx5VHJhbnNmb3JtKHdvcmxkSW52ZXJzZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBnZW9tZXRyeSA9IHJlbmRlcmFibGUuZ2VvbWV0cnk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYmJveCA9IGlzU2tpbm5lZE1lc2ggPyByZW5kZXJhYmxlLnNrZWxldG9uLmJvdW5kaW5nQm94IDogZ2VvbWV0cnkuYm91bmRpbmdCb3g7XHJcblxyXG4gICAgICAgICAgICBpZiAoYmJveCAmJiAhcmF5LmludGVyc2VjdEJvdW5kaW5nQm94KGJib3gpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gVXNlIHVzZXIgZGVmaW5lZCBwaWNraW5nIGFsZ29yaXRobVxyXG4gICAgICAgICAgICBpZiAoZ2VvbWV0cnkucGljaykge1xyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkucGljayhcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9uZGMueCwgdGhpcy5fbmRjLnksXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlcixcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbWVyYSxcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLCBvdXRcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gVXNlIHVzZXIgZGVmaW5lZCByYXkgcGlja2luZyBhbGdvcml0aG1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZ2VvbWV0cnkucGlja0J5UmF5KSB7XHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5waWNrQnlSYXkocmF5LCByZW5kZXJhYmxlLCBvdXQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgY3VsbEJhY2sgPSAocmVuZGVyYWJsZS5jdWxsRmFjZSA9PT0gZ2xlbnVtLkJBQ0sgJiYgcmVuZGVyYWJsZS5mcm9udEZhY2UgPT09IGdsZW51bS5DQ1cpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IChyZW5kZXJhYmxlLmN1bGxGYWNlID09PSBnbGVudW0uRlJPTlQgJiYgcmVuZGVyYWJsZS5mcm9udEZhY2UgPT09IGdsZW51bS5DVyk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcG9pbnQ7XHJcbiAgICAgICAgICAgIHZhciBpbmRpY2VzID0gZ2VvbWV0cnkuaW5kaWNlcztcclxuICAgICAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb247XHJcbiAgICAgICAgICAgIHZhciB3ZWlnaHRBdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy53ZWlnaHQ7XHJcbiAgICAgICAgICAgIHZhciBqb2ludEF0dHIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLmpvaW50O1xyXG4gICAgICAgICAgICB2YXIgc2tpbk1hdHJpY2VzQXJyYXk7XHJcbiAgICAgICAgICAgIHZhciBza2luTWF0cmljZXMgPSBbXTtcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdmFsaWQuXHJcbiAgICAgICAgICAgIGlmICghcG9zaXRpb25BdHRyIHx8ICFwb3NpdGlvbkF0dHIudmFsdWUgfHwgIWluZGljZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNTa2lubmVkTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgc2tpbk1hdHJpY2VzQXJyYXkgPSByZW5kZXJhYmxlLnNrZWxldG9uLmdldFN1YlNraW5NYXRyaWNlcyhyZW5kZXJhYmxlLl9fdWlkX18sIHJlbmRlcmFibGUuam9pbnRzKTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVuZGVyYWJsZS5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBza2luTWF0cmljZXNbaV0gPSBza2luTWF0cmljZXNbaV0gfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCAxNjsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraW5NYXRyaWNlc1tpXVtrXSA9IHNraW5NYXRyaWNlc0FycmF5W2kgKiAxNiArIGtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBwb3MgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciB3ZWlnaHQgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciBqb2ludCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNraW5uZWRQb3MgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciB0bXAgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciBza2lubmVkUG9zaXRpb25BdHRyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5za2lubmVkUG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNraW5uZWRQb3NpdGlvbkF0dHIgfHwgIXNraW5uZWRQb3NpdGlvbkF0dHIudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeS5jcmVhdGVBdHRyaWJ1dGUoJ3NraW5uZWRQb3NpdGlvbicsICdmJywgMyk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2tpbm5lZFBvc2l0aW9uQXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbm5lZFBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHNraW5uZWRQb3NpdGlvbkF0dHIuaW5pdChnZW9tZXRyeS52ZXJ0ZXhDb3VudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb21ldHJ5LnZlcnRleENvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbkF0dHIuZ2V0KGksIHBvcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2VpZ2h0QXR0ci5nZXQoaSwgd2VpZ2h0KTtcclxuICAgICAgICAgICAgICAgICAgICBqb2ludEF0dHIuZ2V0KGksIGpvaW50KTtcclxuICAgICAgICAgICAgICAgICAgICB3ZWlnaHRbM10gPSAxIC0gd2VpZ2h0WzBdIC0gd2VpZ2h0WzFdIC0gd2VpZ2h0WzJdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuc2V0KHNraW5uZWRQb3MsIDAsIDAsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgNDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqb2ludFtrXSA+PSAwICYmIHdlaWdodFtrXSA+IDFlLTQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzMudHJhbnNmb3JtTWF0NCh0bXAsIHBvcywgc2tpbk1hdHJpY2VzW2pvaW50W2tdXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHNraW5uZWRQb3MsIHNraW5uZWRQb3MsIHRtcCwgd2VpZ2h0W2tdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBza2lubmVkUG9zaXRpb25BdHRyLnNldChpLCBza2lubmVkUG9zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSArPSAzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaTEgPSBpbmRpY2VzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIGkyID0gaW5kaWNlc1tpICsgMV07XHJcbiAgICAgICAgICAgICAgICB2YXIgaTMgPSBpbmRpY2VzW2kgKyAyXTtcclxuICAgICAgICAgICAgICAgIHZhciBmaW5hbFBvc0F0dHIgPSBpc1NraW5uZWRNZXNoXHJcbiAgICAgICAgICAgICAgICAgICAgPyBnZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5uZWRQb3NpdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIDogcG9zaXRpb25BdHRyO1xyXG4gICAgICAgICAgICAgICAgZmluYWxQb3NBdHRyLmdldChpMSwgdjEuYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgZmluYWxQb3NBdHRyLmdldChpMiwgdjIuYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgZmluYWxQb3NBdHRyLmdldChpMywgdjMuYXJyYXkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjdWxsQmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50ID0gcmF5LmludGVyc2VjdFRyaWFuZ2xlKHYxLCB2MiwgdjMsIHJlbmRlcmFibGUuY3VsbGluZyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwb2ludCA9IHJheS5pbnRlcnNlY3RUcmlhbmdsZSh2MSwgdjMsIHYyLCByZW5kZXJhYmxlLmN1bGxpbmcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBvaW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50VyA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NraW5uZWRNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjMudHJhbnNmb3JtTWF0NChwb2ludFcsIHBvaW50LCByZW5kZXJhYmxlLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gcG9pbnQgbWF5YmUgbm90IHJpZ2h0LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3IzLmNvcHkocG9pbnRXLCBwb2ludCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG91dC5wdXNoKG5ldyBSYXlQaWNraW5nLkludGVyc2VjdGlvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQsIHBvaW50VywgcmVuZGVyYWJsZSwgW2kxLCBpMiwgaTNdLCBpIC8gMyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yMy5kaXN0KHBvaW50VywgdGhpcy5fcmF5Lm9yaWdpbilcclxuICAgICAgICAgICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9KSgpLFxyXG5cclxuICAgIF9pbnRlcnNlY3Rpb25Db21wYXJlRnVuYzogZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICByZXR1cm4gYS5kaXN0YW5jZSAtIGIuZGlzdGFuY2U7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBpY2tpbmcuUmF5UGlja2luZ35JbnRlcnNlY3Rpb25cclxuICogQHBhcmFtIHtjbGF5LlZlY3RvcjN9IHBvaW50XHJcbiAqIEBwYXJhbSB7Y2xheS5WZWN0b3IzfSBwb2ludFdvcmxkXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSB0YXJnZXRcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gdHJpYW5nbGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHRyaWFuZ2xlSW5kZXhcclxuICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlXHJcbiAqL1xyXG5SYXlQaWNraW5nLkludGVyc2VjdGlvbiA9IGZ1bmN0aW9uIChwb2ludCwgcG9pbnRXb3JsZCwgdGFyZ2V0LCB0cmlhbmdsZSwgdHJpYW5nbGVJbmRleCwgZGlzdGFuY2UpIHtcclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJzZWN0aW9uIHBvaW50IGluIGxvY2FsIHRyYW5zZm9ybSBjb29yZGluYXRlc1xyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb2ludCA9IHBvaW50O1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcnNlY3Rpb24gcG9pbnQgaW4gd29ybGQgdHJhbnNmb3JtIGNvb3JkaW5hdGVzXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnBvaW50V29ybGQgPSBwb2ludFdvcmxkO1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcnNlY3Rpb24gc2NlbmUgbm9kZVxyXG4gICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XHJcbiAgICAvKipcclxuICAgICAqIEludGVyc2VjdGlvbiB0cmlhbmdsZSwgd2hpY2ggaXMgYW4gYXJyYXkgb2YgdmVydGV4IGluZGV4XHJcbiAgICAgKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgKi9cclxuICAgIHRoaXMudHJpYW5nbGUgPSB0cmlhbmdsZTtcclxuICAgIC8qKlxyXG4gICAgICogSW5kZXggb2YgaW50ZXJzZWN0aW9uIHRyaWFuZ2xlLlxyXG4gICAgICovXHJcbiAgICB0aGlzLnRyaWFuZ2xlSW5kZXggPSB0cmlhbmdsZUluZGV4O1xyXG4gICAgLyoqXHJcbiAgICAgKiBEaXN0YW5jZSBmcm9tIGludGVyc2VjdGlvbiBwb2ludCB0byByYXkgb3JpZ2luXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmRpc3RhbmNlID0gZGlzdGFuY2U7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBSYXlQaWNraW5nO1xyXG4iLCIvLyBTcGhlcmljYWwgSGFybW9uaWMgSGVscGVyc1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9UZXh0dXJlJztcclxuaW1wb3J0IEZyYW1lQnVmZmVyIGZyb20gJy4uL0ZyYW1lQnVmZmVyJztcclxuaW1wb3J0IFRleHR1cmUyRCBmcm9tICcuLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgUGFzcyBmcm9tICcuLi9jb21wb3NpdG9yL1Bhc3MnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IFNreWJveCBmcm9tICcuLi9wbHVnaW4vU2t5Ym94JztcclxuaW1wb3J0IFNreWRvbWUgZnJvbSAnLi4vcGx1Z2luL1NreWRvbWUnO1xyXG5pbXBvcnQgRW52aXJvbm1lbnRNYXBQYXNzIGZyb20gJy4uL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAnO1xyXG5pbXBvcnQgU2NlbmUgZnJvbSAnLi4vU2NlbmUnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxudmFyIHNoID0ge307XHJcblxyXG5pbXBvcnQgcHJvamVjdEVudk1hcFNoYWRlckNvZGUgZnJvbSAnLi9zaGFkZXIvcHJvamVjdEVudk1hcC5nbHNsLmpzJztcclxuXHJcbnZhciB0YXJnZXRzID0gWydweCcsICdueCcsICdweScsICdueScsICdweicsICdueiddO1xyXG5cclxuLy8gUHJvamVjdCBvbiBncHUsIGJ1dCBuZWVkcyBicm93c2VyIHRvIHN1cHBvcnQgcmVhZFBpeGVscyBhcyBGbG9hdDMyQXJyYXkuXHJcbmZ1bmN0aW9uIHByb2plY3RFbnZpcm9ubWVudE1hcEdQVShyZW5kZXJlciwgZW52TWFwKSB7XHJcbiAgICB2YXIgc2hUZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgd2lkdGg6IDksXHJcbiAgICAgICAgaGVpZ2h0OiAxLFxyXG4gICAgICAgIHR5cGU6IFRleHR1cmUuRkxPQVRcclxuICAgIH0pO1xyXG4gICAgdmFyIHBhc3MgPSBuZXcgUGFzcyh7XHJcbiAgICAgICAgZnJhZ21lbnQ6IHByb2plY3RFbnZNYXBTaGFkZXJDb2RlXHJcbiAgICB9KTtcclxuICAgIHBhc3MubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdURVhUVVJFX1NJWkUnLCBlbnZNYXAud2lkdGgpO1xyXG4gICAgcGFzcy5zZXRVbmlmb3JtKCdlbnZpcm9ubWVudE1hcCcsIGVudk1hcCk7XHJcblxyXG4gICAgdmFyIGZyYW1lYnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKCk7XHJcbiAgICBmcmFtZWJ1ZmZlci5hdHRhY2goc2hUZXh0dXJlKTtcclxuICAgIHBhc3MucmVuZGVyKHJlbmRlcmVyLCBmcmFtZWJ1ZmZlcik7XHJcblxyXG4gICAgZnJhbWVidWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAvLyBUT0RPIE9ubHkgY2hyb21lIGFuZCBmaXJlZm94IHN1cHBvcnQgRmxvYXQzMkFycmF5XHJcbiAgICB2YXIgcGl4ZWxzID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDQpO1xyXG4gICAgcmVuZGVyZXIuZ2wucmVhZFBpeGVscygwLCAwLCA5LCAxLCBUZXh0dXJlLlJHQkEsIFRleHR1cmUuRkxPQVQsIHBpeGVscyk7XHJcblxyXG4gICAgdmFyIGNvZWZmID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDMpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA5OyBpKyspIHtcclxuICAgICAgICBjb2VmZltpICogM10gPSBwaXhlbHNbaSAqIDRdO1xyXG4gICAgICAgIGNvZWZmW2kgKiAzICsgMV0gPSBwaXhlbHNbaSAqIDQgKyAxXTtcclxuICAgICAgICBjb2VmZltpICogMyArIDJdID0gcGl4ZWxzW2kgKiA0ICsgMl07XHJcbiAgICB9XHJcbiAgICBmcmFtZWJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgIGZyYW1lYnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgcGFzcy5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIHJldHVybiBjb2VmZjtcclxufVxyXG5cclxuZnVuY3Rpb24gaGFybW9uaWNzKG5vcm1hbCwgaW5kZXgpe1xyXG4gICAgdmFyIHggPSBub3JtYWxbMF07XHJcbiAgICB2YXIgeSA9IG5vcm1hbFsxXTtcclxuICAgIHZhciB6ID0gbm9ybWFsWzJdO1xyXG5cclxuICAgIGlmIChpbmRleCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiAxLjA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmRleCA9PT0gMSkge1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaW5kZXggPT09IDIpIHtcclxuICAgICAgICByZXR1cm4geTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGluZGV4ID09PSAzKSB7XHJcbiAgICAgICAgcmV0dXJuIHo7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmRleCA9PT0gNCkge1xyXG4gICAgICAgIHJldHVybiB4ICogejtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGluZGV4ID09PSA1KSB7XHJcbiAgICAgICAgcmV0dXJuIHkgKiB6O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaW5kZXggPT09IDYpIHtcclxuICAgICAgICByZXR1cm4geCAqIHk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpbmRleCA9PT0gNykge1xyXG4gICAgICAgIHJldHVybiAzLjAgKiB6ICogeiAtIDEuMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB4ICogeCAtIHkgKiB5O1xyXG4gICAgfVxyXG59XHJcblxyXG52YXIgbm9ybWFsVHJhbnNmb3JtID0ge1xyXG4gICAgcHg6IFsyLCAxLCAwLCAtMSwgLTEsIDFdLFxyXG4gICAgbng6IFsyLCAxLCAwLCAxLCAtMSwgLTFdLFxyXG4gICAgcHk6IFswLCAyLCAxLCAxLCAtMSwgLTFdLFxyXG4gICAgbnk6IFswLCAyLCAxLCAxLCAxLCAxXSxcclxuICAgIHB6OiBbMCwgMSwgMiwgLTEsIC0xLCAtMV0sXHJcbiAgICBuejogWzAsIDEsIDIsIDEsIC0xLCAxXVxyXG59O1xyXG5cclxuLy8gUHJvamVjdCBvbiBjcHUuXHJcbmZ1bmN0aW9uIHByb2plY3RFbnZpcm9ubWVudE1hcENQVShyZW5kZXJlciwgY3ViZVBpeGVscywgd2lkdGgsIGhlaWdodCkge1xyXG4gICAgdmFyIGNvZWZmID0gbmV3IHZlbmRvci5GbG9hdDMyQXJyYXkoOSAqIDMpO1xyXG4gICAgdmFyIG5vcm1hbCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICB2YXIgdGV4ZWwgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgdmFyIGZldGNoTm9ybWFsID0gdmVjMy5jcmVhdGUoKTtcclxuICAgIGZvciAodmFyIG0gPSAwOyBtIDwgOTsgbSsrKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IHZlYzMuY3JlYXRlKCk7XHJcbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0YXJnZXRzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIHZhciBwaXhlbHMgPSBjdWJlUGl4ZWxzW3RhcmdldHNba11dO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNpZGVSZXN1bHQgPSB2ZWMzLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICB2YXIgZGl2aWRlciA9IDA7XHJcbiAgICAgICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5vcm1hbFRyYW5zZm9ybVt0YXJnZXRzW2tdXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbFswXSA9IHggLyAod2lkdGggLSAxLjApICogMi4wIC0gMS4wO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gRmxpcCB5P1xyXG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbFsxXSA9IHkgLyAoaGVpZ2h0IC0gMS4wKSAqIDIuMCAtIDEuMDtcclxuICAgICAgICAgICAgICAgICAgICBub3JtYWxbMl0gPSAtMS4wO1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMubm9ybWFsaXplKG5vcm1hbCwgbm9ybWFsKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2hOb3JtYWxbMF0gPSBub3JtYWxbdHJhbnNmb3JtWzBdXSAqIHRyYW5zZm9ybVszXTtcclxuICAgICAgICAgICAgICAgICAgICBmZXRjaE5vcm1hbFsxXSA9IG5vcm1hbFt0cmFuc2Zvcm1bMV1dICogdHJhbnNmb3JtWzRdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZldGNoTm9ybWFsWzJdID0gbm9ybWFsW3RyYW5zZm9ybVsyXV0gKiB0cmFuc2Zvcm1bNV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzBdID0gcGl4ZWxzW2krK10gLyAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4ZWxbMV0gPSBwaXhlbHNbaSsrXSAvIDI1NTtcclxuICAgICAgICAgICAgICAgICAgICB0ZXhlbFsyXSA9IHBpeGVsc1tpKytdIC8gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFJHQk0gRGVjb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gcGl4ZWxzW2krK10gLyAyNTUgKiA4LjEyO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzBdICo9IHNjYWxlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzFdICo9IHNjYWxlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRleGVsWzJdICo9IHNjYWxlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2ZWMzLnNjYWxlQW5kQWRkKHNpZGVSZXN1bHQsIHNpZGVSZXN1bHQsIHRleGVsLCBoYXJtb25pY3MoZmV0Y2hOb3JtYWwsIG0pICogLW5vcm1hbFsyXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gLW5vcm1hbC56IGVxdWFscyBjb3ModGhldGEpIG9mIExhbWJlcnRpYW5cclxuICAgICAgICAgICAgICAgICAgICBkaXZpZGVyICs9IC1ub3JtYWxbMl07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmVjMy5zY2FsZUFuZEFkZChyZXN1bHQsIHJlc3VsdCwgc2lkZVJlc3VsdCwgMSAvIGRpdmlkZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29lZmZbbSAqIDNdID0gcmVzdWx0WzBdIC8gNi4wO1xyXG4gICAgICAgIGNvZWZmW20gKiAzICsgMV0gPSByZXN1bHRbMV0gLyA2LjA7XHJcbiAgICAgICAgY29lZmZbbSAqIDMgKyAyXSA9IHJlc3VsdFsyXSAvIDYuMDtcclxuICAgIH1cclxuICAgIHJldHVybiBjb2VmZjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAqIEBwYXJhbSAge2NsYXkuVGV4dHVyZX0gZW52TWFwXHJcbiAqIEBwYXJhbSAge09iamVjdH0gW3RleHR1cmVPcHRzXVxyXG4gKiBAcGFyYW0gIHtPYmplY3R9IFt0ZXh0dXJlT3B0cy5sb2RdXHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFt0ZXh0dXJlT3B0cy5kZWNvZGVSR0JNXVxyXG4gKi9cclxuc2gucHJvamVjdEVudmlyb25tZW50TWFwID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBlbnZNYXAsIG9wdHMpIHtcclxuXHJcbiAgICAvLyBUT0RPIHNSR0JcclxuXHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuICAgIG9wdHMubG9kID0gb3B0cy5sb2QgfHwgMDtcclxuXHJcbiAgICB2YXIgc2t5Ym94O1xyXG4gICAgdmFyIGR1bW15U2NlbmUgPSBuZXcgU2NlbmUoKTtcclxuICAgIHZhciBzaXplID0gNjQ7XHJcbiAgICBpZiAoZW52TWFwLnRleHR1cmVUeXBlID09PSAndGV4dHVyZTJEJykge1xyXG4gICAgICAgIHNreWJveCA9IG5ldyBTa3lkb21lKHtcclxuICAgICAgICAgICAgc2NlbmU6IGR1bW15U2NlbmUsXHJcbiAgICAgICAgICAgIGVudmlyb25tZW50TWFwOiBlbnZNYXBcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHNpemUgPSAoZW52TWFwLmltYWdlICYmIGVudk1hcC5pbWFnZS5weCkgPyBlbnZNYXAuaW1hZ2UucHgud2lkdGggOiBlbnZNYXAud2lkdGg7XHJcbiAgICAgICAgc2t5Ym94ID0gbmV3IFNreWJveCh7XHJcbiAgICAgICAgICAgIHNjZW5lOiBkdW1teVNjZW5lLFxyXG4gICAgICAgICAgICBlbnZpcm9ubWVudE1hcDogZW52TWFwXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBDb252ZXJ0IHRvIHJnYm1cclxuICAgIHZhciB3aWR0aCA9IE1hdGguY2VpbChzaXplIC8gTWF0aC5wb3coMiwgb3B0cy5sb2QpKTtcclxuICAgIHZhciBoZWlnaHQgPSBNYXRoLmNlaWwoc2l6ZSAvIE1hdGgucG93KDIsIG9wdHMubG9kKSk7XHJcbiAgICB2YXIgcmdibVRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHRcclxuICAgIH0pO1xyXG4gICAgdmFyIGZyYW1lYnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKCk7XHJcbiAgICBza3lib3gubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdSR0JNX0VOQ09ERScpO1xyXG4gICAgaWYgKG9wdHMuZGVjb2RlUkdCTSkge1xyXG4gICAgICAgIHNreWJveC5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgJ1JHQk1fREVDT0RFJyk7XHJcbiAgICB9XHJcbiAgICBza3lib3gubWF0ZXJpYWwuc2V0KCdsb2QnLCBvcHRzLmxvZCk7XHJcbiAgICB2YXIgZW52TWFwUGFzcyA9IG5ldyBFbnZpcm9ubWVudE1hcFBhc3Moe1xyXG4gICAgICAgIHRleHR1cmU6IHJnYm1UZXh0dXJlXHJcbiAgICB9KTtcclxuICAgIHZhciBjdWJlUGl4ZWxzID0ge307XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjdWJlUGl4ZWxzW3RhcmdldHNbaV1dID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTtcclxuICAgICAgICB2YXIgY2FtZXJhID0gZW52TWFwUGFzcy5nZXRDYW1lcmEodGFyZ2V0c1tpXSk7XHJcbiAgICAgICAgY2FtZXJhLmZvdiA9IDkwO1xyXG4gICAgICAgIGZyYW1lYnVmZmVyLmF0dGFjaChyZ2JtVGV4dHVyZSk7XHJcbiAgICAgICAgZnJhbWVidWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgcmVuZGVyZXIucmVuZGVyKGR1bW15U2NlbmUsIGNhbWVyYSk7XHJcbiAgICAgICAgcmVuZGVyZXIuZ2wucmVhZFBpeGVscyhcclxuICAgICAgICAgICAgMCwgMCwgd2lkdGgsIGhlaWdodCxcclxuICAgICAgICAgICAgVGV4dHVyZS5SR0JBLCBUZXh0dXJlLlVOU0lHTkVEX0JZVEUsIGN1YmVQaXhlbHNbdGFyZ2V0c1tpXV1cclxuICAgICAgICApO1xyXG4gICAgICAgIGZyYW1lYnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICB9XHJcblxyXG4gICAgc2t5Ym94LmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgZnJhbWVidWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICByZ2JtVGV4dHVyZS5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICByZXR1cm4gcHJvamVjdEVudmlyb25tZW50TWFwQ1BVKHJlbmRlcmVyLCBjdWJlUGl4ZWxzLCB3aWR0aCwgaGVpZ2h0KTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHNoO1xyXG4iLCJcclxuLyoqXHJcbiAqIEhlbHBlcnMgZm9yIGNyZWF0aW5nIGEgY29tbW9uIDNkIGFwcGxpY2F0aW9uLlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkuYXBwbGljYXRpb25cclxuICovXHJcblxyXG4gLy8gVE9ETyBjcmVhdGVDb21wb3NpdG9yXHJcbiAvLyBUT0RPIERpc3Bvc2UgdGVzdC4gZ2VvQ2FjaGUgdGVzdC5cclxuIC8vIFRPRE8gVG9uZW1hcHBpbmcgZXhwb3N1cmVcclxuIC8vIFRPRE8gZml0TW9kZWwuXHJcbiAvLyBUT0RPIFBhcnRpY2xlID9cclxuaW1wb3J0IFJlbmRlcmVyIGZyb20gJy4vUmVuZGVyZXInO1xyXG5pbXBvcnQgU2NlbmUgZnJvbSAnLi9TY2VuZSc7XHJcbmltcG9ydCBUaW1lbGluZSBmcm9tICcuL1RpbWVsaW5lJztcclxuaW1wb3J0IEN1YmVHZW8gZnJvbSAnLi9nZW9tZXRyeS9DdWJlJztcclxuaW1wb3J0IFNwaGVyZUdlbyBmcm9tICcuL2dlb21ldHJ5L1NwaGVyZSc7XHJcbmltcG9ydCBQbGFuZUdlbyBmcm9tICcuL2dlb21ldHJ5L1BsYW5lJztcclxuaW1wb3J0IFBhcmFtZXRyaWNTdXJmYWNlR2VvIGZyb20gJy4vZ2VvbWV0cnkvUGFyYW1ldHJpY1N1cmZhY2UnO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4vVGV4dHVyZTJEJztcclxuaW1wb3J0IFRleHR1cmVDdWJlIGZyb20gJy4vVGV4dHVyZUN1YmUnO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL1RleHR1cmUnO1xyXG5pbXBvcnQgTWVzaCBmcm9tICcuL01lc2gnO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tICcuL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcbmltcG9ydCBPcnRob2dyYXBoaWNDYW1lcmEgZnJvbSAnLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgR0xURkxvYWRlciBmcm9tICcuL2xvYWRlci9HTFRGJztcclxuaW1wb3J0IE5vZGUgZnJvbSAnLi9Ob2RlJztcclxuaW1wb3J0IERpcmVjdGlvbmFsTGlnaHQgZnJvbSAnLi9saWdodC9EaXJlY3Rpb25hbCc7XHJcbmltcG9ydCBQb2ludExpZ2h0IGZyb20gJy4vbGlnaHQvUG9pbnQnO1xyXG5pbXBvcnQgU3BvdExpZ2h0IGZyb20gJy4vbGlnaHQvU3BvdCc7XHJcbmltcG9ydCBBbWJpZW50TGlnaHQgZnJvbSAnLi9saWdodC9BbWJpZW50JztcclxuaW1wb3J0IEFtYmllbnRDdWJlbWFwTGlnaHQgZnJvbSAnLi9saWdodC9BbWJpZW50Q3ViZW1hcCc7XHJcbmltcG9ydCBBbWJpZW50U0hMaWdodCBmcm9tICcuL2xpZ2h0L0FtYmllbnRTSCc7XHJcbmltcG9ydCBTaGFkb3dNYXBQYXNzIGZyb20gJy4vcHJlUGFzcy9TaGFkb3dNYXAnO1xyXG5pbXBvcnQgUmF5UGlja2luZyBmcm9tICcuL3BpY2tpbmcvUmF5UGlja2luZyc7XHJcbmltcG9ydCBMUlVDYWNoZSBmcm9tICcuL2NvcmUvTFJVJztcclxuaW1wb3J0IHV0aWwgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgc2hVdGlsIGZyb20gJy4vdXRpbC9zaCc7XHJcbmltcG9ydCB0ZXh0dXJlVXRpbCBmcm9tICcuL3V0aWwvdGV4dHVyZSc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi9jb3JlL3ZlbmRvcic7XHJcblxyXG5pbXBvcnQgY29sb3JVdGlsIGZyb20gJy4vY29yZS9jb2xvcic7XHJcbnZhciBwYXJzZUNvbG9yID0gY29sb3JVdGlsLnBhcnNlVG9GbG9hdDtcclxuXHJcbmltcG9ydCBzaGFkZXJMaWJyYXJ5IGZyb20gJy4vc2hhZGVyL2J1aWx0aW4nO1xyXG5pbXBvcnQgU2hhZGVyIGZyb20gJy4vU2hhZGVyJztcclxuXHJcblxyXG52YXIgRVZFX05BTUVTID0gWydjbGljaycsICdkYmxjbGljaycsICdtb3VzZW92ZXInLCAnbW91c2VvdXQnLCAnbW91c2Vtb3ZlJyxcclxuICAgICd0b3VjaHN0YXJ0JywgJ3RvdWNoZW5kJywgJ3RvdWNobW92ZScsXHJcbiAgICAnbW91c2V3aGVlbCcsICdET01Nb3VzZVNjcm9sbCdcclxuXTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7c3RyaW5nfEhUTUxDYW52YXNFbGVtZW50fEhUTUxJbWFnZUVsZW1lbnR8SFRNTFZpZGVvRWxlbWVudH0gSW1hZ2VMaWtlXHJcbiAqL1xyXG4vKipcclxuICogQHR5cGVkZWYge3N0cmluZ3xIVE1MQ2FudmFzRWxlbWVudHxIVE1MSW1hZ2VFbGVtZW50fEhUTUxWaWRlb0VsZW1lbnR8Y2xheS5UZXh0dXJlMkR9IFRleHR1cmVMaWtlXHJcbiAqL1xyXG4vKipcclxuICogQHR5cGVkZWYge3N0cmluZ3xBcnJheS48bnVtYmVyPn0gQ29sb3JcclxuICovXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7SFRNTEVsZW1lbnR8c3RyaW5nfSBEb21RdWVyeVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBcHAzRE5hbWVzcGFjZVxyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBpbml0IEluaXRpYWxpemF0aW9uIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBpbml0aW5nIGFwcC5cclxuICogICAgICAgICAgICAgICAgICAgICAgWW91IGNhbiByZXR1cm4gYSBwcm9taXNlIGluIGluaXQgdG8gc3RhcnQgdGhlIGxvb3AgYXN5bmNocm9ub3VzbHkgd2hlbiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZC5cclxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gbG9vcCBMb29wIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgZWFjaCBmcmFtZS5cclxuICogQHByb3BlcnR5IHtib29sZWFufSBbYXV0b1JlbmRlcj10cnVlXSBJZiByZW5kZXIgYXV0b21hdGljYWxseSBlYWNoIGZyYW1lLlxyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBbYmVmb3JlUmVuZGVyXVxyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBbYWZ0ZXJSZW5kZXJdXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbd2lkdGhdIENvbnRhaW5lciB3aWR0aC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtoZWlnaHRdIENvbnRhaW5lciBoZWlnaHQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZGV2aWNlUGl4ZWxSYXRpb11cclxuICogQHByb3BlcnR5IHtPYmplY3QuPHN0cmluZywgRnVuY3Rpb24+fSBbbWV0aG9kc10gTWV0aG9kcyB0aGF0IHdpbGwgYmUgaW5qZWN0ZWQgdG8gQXBwM0QjbWV0aG9kcy5cclxuICogQHByb3BlcnR5IHtPYmplY3R9IFtncmFwaGljXSBHcmFwaGljIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIHNoYWRvdywgY29sb3Igc3BhY2UuXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2dyYXBoaWMuc2hhZG93PWZhbHNlXSBJZiBlbmFibGUgc2hhZG93XHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2dyYXBoaWMubGluZWFyPWZhbHNlXSBJZiB1c2UgbGluZWFyIGNvbG9yIHNwYWNlXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2dyYXBoaWMudG9uZW1hcHBpbmc9ZmFsc2VdIElmIGVuYWJsZSBBQ0VTIHRvbmUgbWFwcGluZy5cclxuICogQHByb3BlcnR5IHtib29sZWFufSBbZXZlbnQ9ZmFsc2VdIElmIGVuYWJsZSBtb3VzZS90b3VjaCBldmVudC4gSXQgd2lsbCBzbG93IGRvd24gdGhlIHN5c3RlbSBpZiBnZW9tZXRyaWVzIGFyZSBjb21wbGV4LlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdGFuZGFyZE1hdGVyaWFsTVJDb25maWdcclxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXVxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NoYWRlcj0nc3RhbmRhcmRNUiddXHJcbiAqIEBwcm9wZXJ0eSB7Q29sb3J9IFtjb2xvcl1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFthbHBoYV1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFttZXRhbG5lc3NdXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcm91Z2huZXNzXVxyXG4gKiBAcHJvcGVydHkge0NvbG9yfSBbZW1pc3Npb25dXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZW1pc3Npb25JbnRlbnNpdHldXHJcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3RyYW5zcGFyZW50XVxyXG4gKiBAcHJvcGVydHkge1RleHR1cmVMaWtlfSBbZGlmZnVzZU1hcF1cclxuICogQHByb3BlcnR5IHtUZXh0dXJlTGlrZX0gW25vcm1hbE1hcF1cclxuICogQHByb3BlcnR5IHtUZXh0dXJlTGlrZX0gW3JvdWdobmVzc01hcF1cclxuICogQHByb3BlcnR5IHtUZXh0dXJlTGlrZX0gW21ldGFsbmVzc01hcF1cclxuICogQHByb3BlcnR5IHtUZXh0dXJlTGlrZX0gW2VtaXNzaXZlTWFwXVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBVc2luZyBBcHAzRCBpcyBhIG11Y2ggbW9yZSBjb252ZW5pZW50IHdheSB0byBjcmVhdGUgYW5kIG1hbmFnZSB5b3VyIDNEIGFwcGxpY2F0aW9uLlxyXG4gKlxyXG4gKiBJdCBwcm92aWRlcyB0aGUgYWJpbGl0aWVzIHRvOlxyXG4gKlxyXG4gKiArIE1hbmFnZSBhcHBsaWNhdGlvbiBsb29wIGFuZCByZW5kZXJpbmcuXHJcbiAqICsgQ29sbGVjdCBHUFUgcmVzb3VyY2UgYXV0b21hdGljYWxseSB3aXRob3V0IG1lbW9yeSBsZWFrIGNvbmNlcm4uXHJcbiAqICsgTW91c2UgZXZlbnQgbWFuYWdlbWVudC5cclxuICogKyBDcmVhdGUgc2NlbmUgb2JqZWN0cywgbWF0ZXJpYWxzLCB0ZXh0dXJlcyB3aXRoIHNpbXBsZXIgY29kZS5cclxuICogKyBMb2FkIG1vZGVscyB3aXRoIG9uZSBsaW5lIG9mIGNvZGUuXHJcbiAqICsgUHJvbWlzZWQgaW50ZXJmYWNlcy5cclxuICpcclxuICogSGVyZSBpcyBhIGJhc2ljIGV4YW1wbGUgdG8gY3JlYXRlIGEgcm90YXRpbmcgY3ViZS5cclxuICpcclxuYGBganNcclxudmFyIGFwcCA9IGNsYXkuYXBwbGljYXRpb24uY3JlYXRlKCcjdmlld3BvcnQnLCB7XHJcbiAgICBpbml0OiBmdW5jdGlvbiAoYXBwKSB7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgcGVyc3BlY3RpdmUgY2FtZXJhLlxyXG4gICAgICAgIC8vIEZpcnN0IHBhcmFtZXRlciBpcyB0aGUgY2FtZXJhIHBvc2l0aW9uLiBXaGljaCBpcyBpbiBmcm9udCBvZiB0aGUgY3ViZS5cclxuICAgICAgICAvLyBTZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSBjYW1lcmEgbG9va0F0IHRhcmdldC4gV2hpY2ggaXMgdGhlIG9yaWdpbiBvZiB0aGUgd29ybGQsIGFuZCB3aGVyZSB0aGUgY3ViZSBwdXRzLlxyXG4gICAgICAgIHRoaXMuX2NhbWVyYSA9IGFwcC5jcmVhdGVDYW1lcmEoWzAsIDIsIDVdLCBbMCwgMCwgMF0pO1xyXG4gICAgICAgIC8vIENyZWF0ZSBhIHNhbXBsZSBjdWJlXHJcbiAgICAgICAgdGhpcy5fY3ViZSA9IGFwcC5jcmVhdGVDdWJlKCk7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgZGlyZWN0aW9uYWwgbGlnaHQuIFRoZSBkaXJlY3Rpb24gaXMgZnJvbSB0b3AgcmlnaHQgdG8gbGVmdCBib3R0b20sIGF3YXkgZnJvbSBjYW1lcmEuXHJcbiAgICAgICAgdGhpcy5fbWFpbkxpZ2h0ID0gYXBwLmNyZWF0ZURpcmVjdGlvbmFsTGlnaHQoWy0xLCAtMSwgLTFdKTtcclxuICAgIH0sXHJcbiAgICBsb29wOiBmdW5jdGlvbiAoYXBwKSB7XHJcbiAgICAgICAgLy8gU2ltcGx5IHJvdGF0aW5nIHRoZSBjdWJlIGV2ZXJ5IGZyYW1lLlxyXG4gICAgICAgIHRoaXMuX2N1YmUucm90YXRpb24ucm90YXRlWShhcHAuZnJhbWVUaW1lIC8gMTAwMCk7XHJcbiAgICB9XHJcbn0pO1xyXG5gYGBcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEXHJcbiAqIEBwYXJhbSB7RG9tUXVlcnl9IGRvbSBDb250YWluZXIgZG9tIGVsZW1lbnQgb3IgYSBzZWxlY3RvciBzdHJpbmcgdGhhdCBjYW4gYmUgdXNlZCBpbiBgcXVlcnlTZWxlY3RvcmBcclxuICogQHBhcmFtIHtBcHAzRE5hbWVzcGFjZX0gYXBwTlMgT3B0aW9ucyBhbmQgbmFtZXNwYWNlIHVzZWQgaW4gY3JlYXRpbmcgYXBwM0RcclxuICovXHJcbmZ1bmN0aW9uIEFwcDNEKGRvbSwgYXBwTlMpIHtcclxuXHJcbiAgICBhcHBOUyA9IGFwcE5TIHx8IHt9O1xyXG4gICAgYXBwTlMuZ3JhcGhpYyA9IGFwcE5TLmdyYXBoaWMgfHwge307XHJcblxyXG4gICAgaWYgKGFwcE5TLmF1dG9SZW5kZXIgPT0gbnVsbCkge1xyXG4gICAgICAgIGFwcE5TLmF1dG9SZW5kZXIgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgZG9tID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGRvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZG9tKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWRvbSkgeyB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZG9tJyk7IH1cclxuXHJcbiAgICB2YXIgaXNEb21DYW52YXMgPSAhZG9tLm5vZGVOYW1lICAvLyBOb3QgaW4gZG9tIGVudmlyb25tZW50XHJcbiAgICAgICAgfHwgZG9tLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdDQU5WQVMnO1xyXG5cclxuICAgIHZhciByZW5kZXJlck9wdHMgPSB7fTtcclxuICAgIGlzRG9tQ2FudmFzICYmIChyZW5kZXJlck9wdHMuY2FudmFzID0gZG9tKTtcclxuICAgIGFwcE5TLmRldmljZVBpeGVsUmF0aW8gJiYgKHJlbmRlcmVyT3B0cy5kZXZpY2VQaXhlbFJhdGlvID0gYXBwTlMuZGV2aWNlUGl4ZWxSYXRpbyk7XHJcblxyXG4gICAgdmFyIGdSZW5kZXJlciA9IG5ldyBSZW5kZXJlcihyZW5kZXJlck9wdHMpO1xyXG4gICAgdmFyIGdXaWR0aCA9IGFwcE5TLndpZHRoIHx8IGRvbS5jbGllbnRXaWR0aDtcclxuICAgIHZhciBnSGVpZ2h0ID0gYXBwTlMuaGVpZ2h0IHx8IGRvbS5jbGllbnRIZWlnaHQ7XHJcblxyXG4gICAgdmFyIGdTY2VuZSA9IG5ldyBTY2VuZSgpO1xyXG4gICAgdmFyIGdUaW1lbGluZSA9IG5ldyBUaW1lbGluZSgpO1xyXG4gICAgdmFyIGdTaGFkb3dQYXNzID0gYXBwTlMuZ3JhcGhpYy5zaGFkb3cgJiYgbmV3IFNoYWRvd01hcFBhc3MoKTtcclxuICAgIHZhciBnUmF5UGlja2luZyA9IGFwcE5TLmV2ZW50ICYmIG5ldyBSYXlQaWNraW5nKHtcclxuICAgICAgICBzY2VuZTogZ1NjZW5lLFxyXG4gICAgICAgIHJlbmRlcmVyOiBnUmVuZGVyZXJcclxuICAgIH0pO1xyXG5cclxuICAgICFpc0RvbUNhbnZhcyAmJiBkb20uYXBwZW5kQ2hpbGQoZ1JlbmRlcmVyLmNhbnZhcyk7XHJcblxyXG4gICAgZ1JlbmRlcmVyLnJlc2l6ZShnV2lkdGgsIGdIZWlnaHQpO1xyXG5cclxuICAgIHZhciBnRnJhbWVUaW1lID0gMDtcclxuICAgIHZhciBnRWxhcHNlZFRpbWUgPSAwO1xyXG5cclxuICAgIGdUaW1lbGluZS5zdGFydCgpO1xyXG5cclxuICAgIHZhciB1c2VyTWV0aG9kcyA9IHt9O1xyXG4gICAgZm9yICh2YXIga2V5IGluIGFwcE5TLm1ldGhvZHMpIHtcclxuICAgICAgICB1c2VyTWV0aG9kc1trZXldID0gYXBwTlMubWV0aG9kc1trZXldLmJpbmQoYXBwTlMsIHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBDb250YWluZXIgZG9tIGVsZW1lbnRcclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI2NvbnRhaW5lclxyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb250YWluZXI6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkb207IH0gfSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI3JlbmRlcmVyXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuUmVuZGVyZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVuZGVyZXI6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnUmVuZGVyZXI7IH19LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0Qjc2NlbmVcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5SZW5kZXJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzY2VuZTogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdTY2VuZTsgfX0sXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQG5hbWUgY2xheS5hcHBsaWNhdGlvbi5BcHAzRCN0aW1lbGluZVxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlJlbmRlcmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRpbWVsaW5lOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1RpbWVsaW5lOyB9fSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lIGVsYXBzZWQgc2luY2UgbGFzdCBmcmFtZS4gQ2FuIGJlIHVzZWQgaW4gbG9vcCB0byBjYWxjdWxhdGUgdGhlIG1vdmVtZW50LlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0QjZnJhbWVUaW1lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBmcmFtZVRpbWU6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnRnJhbWVUaW1lOyB9fSxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaW1lIGVsYXBzZWQgc2luY2UgYXBwbGljYXRpb24gY3JlYXRlZC5cclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI2VsYXBzZWRUaW1lXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbGFwc2VkVGltZTogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdFbGFwc2VkVGltZTsgfX0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdpZHRoIG9mIHZpZXdwb3J0LlxyXG4gICAgICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uQXBwM0Qjd2lkdGhcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHdpZHRoOiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1JlbmRlcmVyLmdldFdpZHRoKCk7IH19LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEhlaWdodCBvZiB2aWV3cG9ydC5cclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI2hlaWdodFxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaGVpZ2h0OiB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ1JlbmRlcmVyLmdldEhlaWdodCgpOyB9fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWV0aG9kcyBmcm9tIHtAbGluayBjbGF5LmFwcGxpY2F0aW9uLmNyZWF0ZX1cclxuICAgICAgICAgKiBAbmFtZSBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEI21ldGhvZHNcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1ldGhvZHM6IHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB1c2VyTWV0aG9kczsgfSB9LFxyXG5cclxuICAgICAgICBfc2hhZG93UGFzczogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdTaGFkb3dQYXNzOyB9IH0sXHJcblxyXG4gICAgICAgIF9hcHBOUzogeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFwcE5TOyB9IH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2l6ZSB0aGUgYXBwbGljYXRpb24uIFdpbGwgdXNlIHRoZSBjb250YWluZXIgY2xpZW50V2lkdGgvY2xpZW50SGVpZ2h0IGlmIHdpZHRoL2hlaWdodCBpbiBwYXJhbWV0ZXJzIGFyZSBub3QgZ2l2ZW4uXHJcbiAgICAgKiBAZnVuY3Rpb25cclxuICAgICAqIEBtZW1iZXJPZiB7Y2xheS5hcHBsaWNhdGlvbi5BcHAzRH1cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2lkdGhdXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2hlaWdodF1cclxuICAgICAqL1xyXG4gICAgdGhpcy5yZXNpemUgPSBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xyXG4gICAgICAgIGdXaWR0aCA9IHdpZHRoIHx8IGFwcE5TLndpZHRoIHx8IGRvbS5jbGllbnRXaWR0aDtcclxuICAgICAgICBnSGVpZ2h0ID0gaGVpZ2h0IHx8IGRvbS5oZWlnaHQgfHwgZG9tLmNsaWVudEhlaWdodDtcclxuICAgICAgICBnUmVuZGVyZXIucmVzaXplKGdXaWR0aCwgZ0hlaWdodCk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSB0aGUgYXBwbGljYXRpb25cclxuICAgICAqIEBmdW5jdGlvblxyXG4gICAgICovXHJcbiAgICB0aGlzLmRpc3Bvc2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoYXBwTlMuZGlzcG9zZSkge1xyXG4gICAgICAgICAgICBhcHBOUy5kaXNwb3NlKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBnVGltZWxpbmUuc3RvcCgpO1xyXG4gICAgICAgIGdSZW5kZXJlci5kaXNwb3NlU2NlbmUoZ1NjZW5lKTtcclxuICAgICAgICBnU2hhZG93UGFzcyAmJiBnU2hhZG93UGFzcy5kaXNwb3NlKGdSZW5kZXJlcik7XHJcblxyXG4gICAgICAgIGRvbS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICBFVkVfTkFNRVMuZm9yRWFjaChmdW5jdGlvbiAoZXZlVHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzW21ha2VIYW5kbGVyTmFtZShldmVUeXBlKV0gJiYgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCBtYWtlSGFuZGxlck5hbWUoZXZlVHlwZSkpO1xyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICBnUmF5UGlja2luZyAmJiB0aGlzLl9pbml0TW91c2VFdmVudHMoZ1JheVBpY2tpbmcpO1xyXG5cclxuICAgIHRoaXMuX2dlb0NhY2hlID0gbmV3IExSVUNhY2hlKDIwKTtcclxuICAgIHRoaXMuX3RleENhY2hlID0gbmV3IExSVUNhY2hlKDIwKTtcclxuXHJcbiAgICAvLyBHUFUgUmVzb3VyY2VzLlxyXG4gICAgdGhpcy5fdGV4dHVyZXNMaXN0ID0ge307XHJcbiAgICB0aGlzLl9nZW9tZXRyaWVzTGlzdCA9IHt9O1xyXG5cclxuICAgIC8vIERvIGluaXQgdGhlIGFwcGxpY2F0aW9uLlxyXG4gICAgdmFyIGluaXRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGFwcE5TLmluaXQgJiYgYXBwTlMuaW5pdCh0aGlzKSk7XHJcbiAgICAvLyBVc2UgdGhlIGluaXRlZCBjYW1lcmEuXHJcbiAgICBnUmF5UGlja2luZyAmJiAoZ1JheVBpY2tpbmcuY2FtZXJhID0gZ1NjZW5lLmdldE1haW5DYW1lcmEoKSk7XHJcblxyXG4gICAgaWYgKCFhcHBOUy5sb29wKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdNaXNzIGxvb3AgbWV0aG9kLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgIGluaXRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGdUaW1lbGluZS5vbignZnJhbWUnLCBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcbiAgICAgICAgICAgIGdGcmFtZVRpbWUgPSBmcmFtZVRpbWU7XHJcbiAgICAgICAgICAgIGdFbGFwc2VkVGltZSArPSBmcmFtZVRpbWU7XHJcblxyXG4gICAgICAgICAgICB2YXIgY2FtZXJhID0gZ1NjZW5lLmdldE1haW5DYW1lcmEoKTtcclxuICAgICAgICAgICAgaWYgKGNhbWVyYSkge1xyXG4gICAgICAgICAgICAgICAgY2FtZXJhLmFzcGVjdCA9IGdSZW5kZXJlci5nZXRWaWV3cG9ydEFzcGVjdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGdSYXlQaWNraW5nICYmIChnUmF5UGlja2luZy5jYW1lcmEgPSBjYW1lcmEpO1xyXG5cclxuICAgICAgICAgICAgYXBwTlMubG9vcCAmJiBhcHBOUy5sb29wKHNlbGYpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFwcE5TLmF1dG9SZW5kZXIpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVuZGVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHNlbGYuY29sbGVjdFJlc291cmNlcygpO1xyXG4gICAgICAgIH0sIHRoaXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZ1NjZW5lLm9uKCdiZWZvcmVyZW5kZXInLCBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIHJlbmRlckxpc3QpIHtcclxuICAgICAgICBpZiAodGhpcy5faW5SZW5kZXIpIHtcclxuICAgICAgICAgICAgLy8gT25seSB1cGRhdGUgZ3JhcGhpYyBvcHRpb25zIHdoZW4gdXNpbmcgI3JlbmRlciBmdW5jdGlvbi5cclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlR3JhcGhpY09wdGlvbnMoYXBwTlMuZ3JhcGhpYywgcmVuZGVyTGlzdC5vcGFxdWUsIGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlR3JhcGhpY09wdGlvbnMoYXBwTlMuZ3JhcGhpYywgcmVuZGVyTGlzdC50cmFuc3BhcmVudCwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIHRoaXMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0ltYWdlTGlrZUVsZW1lbnQodmFsKSB7XHJcbiAgICByZXR1cm4gKHR5cGVvZiBJbWFnZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgSW1hZ2UpXHJcbiAgICAgICAgfHwgKHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpXHJcbiAgICAgICAgfHwgKHR5cGVvZiBIVE1MVmlkZW9FbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB2YWwgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0S2V5RnJvbUltYWdlTGlrZSh2YWwpIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJ1xyXG4gICAgICAgID8gdmFsIDogKHZhbC5fX2tleV9fIHx8ICh2YWwuX19rZXlfXyA9IHV0aWwuZ2VuR1VJRCgpKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1ha2VIYW5kbGVyTmFtZShldmVUeXBlKSB7XHJcbiAgICByZXR1cm4gJ18nICsgZXZlVHlwZSArICdIYW5kbGVyJztcclxufVxyXG5cclxuZnVuY3Rpb24gcGFja2FnZUV2ZW50KGV2ZW50VHlwZSwgcGlja1Jlc3VsdCwgb2Zmc2V0WCwgb2Zmc2V0WSwgd2hlZWxEZWx0YSkge1xyXG4gICAgdmFyIGV2ZW50ID0gdXRpbC5jbG9uZShwaWNrUmVzdWx0KTtcclxuICAgIGV2ZW50LnR5cGUgPSBldmVudFR5cGU7XHJcbiAgICBldmVudC5vZmZzZXRYID0gb2Zmc2V0WDtcclxuICAgIGV2ZW50Lm9mZnNldFkgPSBvZmZzZXRZO1xyXG4gICAgaWYgKHdoZWVsRGVsdGEgIT09IG51bGwpIHtcclxuICAgICAgICBldmVudC53aGVlbERlbHRhID0gd2hlZWxEZWx0YTtcclxuICAgIH1cclxuICAgIHJldHVybiBldmVudDtcclxufVxyXG5cclxuZnVuY3Rpb24gYnViYmxpbmdFdmVudCh0YXJnZXQsIGV2ZW50KSB7XHJcbiAgICB3aGlsZSAodGFyZ2V0ICYmICFldmVudC5jYW5jZWxCdWJibGUpIHtcclxuICAgICAgICB0YXJnZXQudHJpZ2dlcihldmVudC50eXBlLCBldmVudCk7XHJcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LmdldFBhcmVudCgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5BcHAzRC5wcm90b3R5cGUuX2luaXRNb3VzZUV2ZW50cyA9IGZ1bmN0aW9uIChyYXlQaWNraW5nKSB7XHJcbiAgICB2YXIgZG9tID0gdGhpcy5jb250YWluZXI7XHJcblxyXG4gICAgdmFyIG9sZFRhcmdldCA9IG51bGw7XHJcbiAgICBFVkVfTkFNRVMuZm9yRWFjaChmdW5jdGlvbiAoX2V2ZVR5cGUpIHtcclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb20sIF9ldmVUeXBlLCB0aGlzW21ha2VIYW5kbGVyTmFtZShfZXZlVHlwZSldID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgaWYgKCFyYXlQaWNraW5nLmNhbWVyYSkgeyAvLyBOb3QgaGF2ZSBjYW1lcmEgeWV0LlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQgJiYgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGJveCA9IGRvbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgdmFyIG9mZnNldFgsIG9mZnNldFk7XHJcbiAgICAgICAgICAgIHZhciBldmVUeXBlID0gX2V2ZVR5cGU7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXZlVHlwZS5pbmRleE9mKCd0b3VjaCcpID49IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciB0b3VjaCA9IGV2ZVR5cGUgIT09ICd0b3VjaGVuZCdcclxuICAgICAgICAgICAgICAgICAgICA/IGUudGFyZ2V0VG91Y2hlc1swXVxyXG4gICAgICAgICAgICAgICAgICAgIDogZS5jaGFuZ2VkVG91Y2hlc1swXTtcclxuICAgICAgICAgICAgICAgIGlmIChldmVUeXBlID09PSAndG91Y2hzdGFydCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVUeXBlID0gJ21vdXNlZG93bic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChldmVUeXBlID09PSAndG91Y2hlbmQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlVHlwZSA9ICdtb3VzZXVwJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZVR5cGUgPT09ICd0b3VjaG1vdmUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlVHlwZSA9ICdtb3VzZW1vdmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0WCA9IHRvdWNoLmNsaWVudFggLSBib3gubGVmdDtcclxuICAgICAgICAgICAgICAgIG9mZnNldFkgPSB0b3VjaC5jbGllbnRZIC0gYm94LnRvcDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9mZnNldFggPSBlLmNsaWVudFggLSBib3gubGVmdDtcclxuICAgICAgICAgICAgICAgIG9mZnNldFkgPSBlLmNsaWVudFkgLSBib3gudG9wO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcGlja1Jlc3VsdCA9IHJheVBpY2tpbmcucGljayhvZmZzZXRYLCBvZmZzZXRZKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBkZWx0YTtcclxuICAgICAgICAgICAgaWYgKGV2ZVR5cGUgPT09ICdET01Nb3VzZVNjcm9sbCcgfHwgZXZlVHlwZSA9PT0gJ21vdXNld2hlZWwnKSB7XHJcbiAgICAgICAgICAgICAgICBkZWx0YSA9IChlLndoZWVsRGVsdGEpID8gZS53aGVlbERlbHRhIC8gMTIwIDogLShlLmRldGFpbCB8fCAwKSAvIDM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChwaWNrUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBKdXN0IGlnbm9yZSBzaWxlbnQgZWxlbWVudC5cclxuICAgICAgICAgICAgICAgIGlmIChwaWNrUmVzdWx0LnRhcmdldC5zaWxlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZVR5cGUgPT09ICdtb3VzZW1vdmUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUEVORElORyB0b3VjaGRvd24gc2hvdWxkIHRyaWdnZXIgbW91c2VvdmVyIGV2ZW50ID9cclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0Q2hhbmdlZCA9IHBpY2tSZXN1bHQudGFyZ2V0ICE9PSBvbGRUYXJnZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldENoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2xkVGFyZ2V0ICYmIGJ1YmJsaW5nRXZlbnQob2xkVGFyZ2V0LCBwYWNrYWdlRXZlbnQoJ21vdXNlb3V0Jywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBvbGRUYXJnZXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgb2Zmc2V0WCwgb2Zmc2V0WSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KHBpY2tSZXN1bHQudGFyZ2V0LCBwYWNrYWdlRXZlbnQoJ21vdXNlbW92ZScsIHBpY2tSZXN1bHQsIG9mZnNldFgsIG9mZnNldFkpKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KHBpY2tSZXN1bHQudGFyZ2V0LCBwYWNrYWdlRXZlbnQoJ21vdXNlb3ZlcicsIHBpY2tSZXN1bHQsIG9mZnNldFgsIG9mZnNldFkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBidWJibGluZ0V2ZW50KHBpY2tSZXN1bHQudGFyZ2V0LCBwYWNrYWdlRXZlbnQoZXZlVHlwZSwgcGlja1Jlc3VsdCwgb2Zmc2V0WCwgb2Zmc2V0WSwgZGVsdGEpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9sZFRhcmdldCA9IHBpY2tSZXN1bHQudGFyZ2V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG9sZFRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgYnViYmxpbmdFdmVudChvbGRUYXJnZXQsIHBhY2thZ2VFdmVudCgnbW91c2VvdXQnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBvbGRUYXJnZXRcclxuICAgICAgICAgICAgICAgIH0sIG9mZnNldFgsIG9mZnNldFkpKTtcclxuICAgICAgICAgICAgICAgIG9sZFRhcmdldCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0sIHRoaXMpO1xyXG59O1xyXG5cclxuQXBwM0QucHJvdG90eXBlLl91cGRhdGVHcmFwaGljT3B0aW9ucyA9IGZ1bmN0aW9uIChncmFwaGljT3B0cywgbGlzdCwgaXNTa3lib3gpIHtcclxuICAgIHZhciBlbmFibGVUb25lbWFwcGluZyA9ICEhZ3JhcGhpY09wdHMudG9uZW1hcHBpbmc7XHJcbiAgICB2YXIgaXNMaW5lYXJTcGFjZSA9ICEhZ3JhcGhpY09wdHMubGluZWFyO1xyXG5cclxuICAgIHZhciBwcmV2TWF0ZXJpYWw7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIG1hdCA9IGxpc3RbaV0ubWF0ZXJpYWw7XHJcbiAgICAgICAgaWYgKG1hdCA9PT0gcHJldk1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZW5hYmxlVG9uZW1hcHBpbmcgPyBtYXQuZGVmaW5lKCdmcmFnbWVudCcsICdUT05FTUFQUElORycpIDogbWF0LnVuZGVmaW5lKCdmcmFnbWVudCcsICdUT05FTUFQUElORycpO1xyXG4gICAgICAgIGlmIChpc0xpbmVhclNwYWNlKSB7XHJcbiAgICAgICAgICAgIHZhciBkZWNvZGVTUkdCID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGlzU2t5Ym94ICYmIG1hdC5nZXQoJ2Vudmlyb25tZW50TWFwJykgJiYgIW1hdC5nZXQoJ2Vudmlyb25tZW50TWFwJykuc1JHQikge1xyXG4gICAgICAgICAgICAgICAgZGVjb2RlU1JHQiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlY29kZVNSR0IgJiYgbWF0LmRlZmluZSgnZnJhZ21lbnQnLCAnU1JHQl9ERUNPREUnKTtcclxuICAgICAgICAgICAgbWF0LmRlZmluZSgnZnJhZ21lbnQnLCAnU1JHQl9FTkNPREUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdC51bmRlZmluZSgnZnJhZ21lbnQnLCAnU1JHQl9ERUNPREUnKTtcclxuICAgICAgICAgICAgbWF0LnVuZGVmaW5lKCdmcmFnbWVudCcsICdTUkdCX0VOQ09ERScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJldk1hdGVyaWFsID0gbWF0O1xyXG4gICAgfVxyXG59O1xyXG5cclxuQXBwM0QucHJvdG90eXBlLl9kb1JlbmRlciA9IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUpIHtcclxuICAgIHZhciBjYW1lcmEgPSBzY2VuZS5nZXRNYWluQ2FtZXJhKCk7XHJcbiAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSwgdHJ1ZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogRG8gcmVuZGVyXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5faW5SZW5kZXIgPSB0cnVlO1xyXG4gICAgdmFyIGFwcE5TID0gdGhpcy5fYXBwTlM7XHJcbiAgICBhcHBOUy5iZWZvcmVSZW5kZXIgJiYgYXBwTlMuYmVmb3JlUmVuZGVyKHNlbGYpO1xyXG5cclxuICAgIHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7XHJcbiAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xyXG4gICAgdmFyIHNoYWRvd1Bhc3MgPSB0aGlzLl9zaGFkb3dQYXNzO1xyXG5cclxuICAgIHNjZW5lLnVwZGF0ZSgpO1xyXG4gICAgdmFyIHNreWJveExpc3QgPSBbXTtcclxuICAgIHNjZW5lLnNreWJveCAmJiBza3lib3hMaXN0LnB1c2goc2NlbmUuc2t5Ym94KTtcclxuICAgIHNjZW5lLnNreWRvbWUgJiYgc2t5Ym94TGlzdC5wdXNoKHNjZW5lLnNreWRvbWUpO1xyXG5cclxuICAgIHRoaXMuX3VwZGF0ZUdyYXBoaWNPcHRpb25zKGFwcE5TLmdyYXBoaWMsIHNreWJveExpc3QsIHRydWUpO1xyXG4gICAgLy8gUmVuZGVyIHNoYWRvdyBwYXNzXHJcbiAgICBzaGFkb3dQYXNzICYmIHNoYWRvd1Bhc3MucmVuZGVyKHJlbmRlcmVyLCBzY2VuZSwgbnVsbCwgdHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5fZG9SZW5kZXIocmVuZGVyZXIsIHNjZW5lLCB0cnVlKTtcclxuXHJcbiAgICBhcHBOUy5hZnRlclJlbmRlciAmJiBhcHBOUy5hZnRlclJlbmRlcihzZWxmKTtcclxuICAgIHRoaXMuX2luUmVuZGVyID0gZmFsc2U7XHJcbn07XHJcblxyXG5BcHAzRC5wcm90b3R5cGUuY29sbGVjdFJlc291cmNlcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcbiAgICB2YXIgc2NlbmUgPSB0aGlzLnNjZW5lO1xyXG4gICAgdmFyIHRleHR1cmVzTGlzdCA9IHRoaXMuX3RleHR1cmVzTGlzdDtcclxuICAgIHZhciBnZW9tZXRyaWVzTGlzdCA9IHRoaXMuX2dlb21ldHJpZXNMaXN0O1xyXG4gICAgLy8gTWFyayBhbGwgcmVzb3VyY2VzIHVudXNlZDtcclxuICAgIG1hcmtVbnVzZWQodGV4dHVyZXNMaXN0KTtcclxuICAgIG1hcmtVbnVzZWQoZ2VvbWV0cmllc0xpc3QpO1xyXG5cclxuICAgIC8vIENvbGxlY3QgcmVzb3VyY2VzIHVzZWQgaW4gdGhpcyBmcmFtZS5cclxuICAgIHZhciBuZXdUZXh0dXJlc0xpc3QgPSBbXTtcclxuICAgIHZhciBuZXdHZW9tZXRyaWVzTGlzdCA9IFtdO1xyXG4gICAgY29sbGVjdFJlc291cmNlcyhzY2VuZSwgbmV3VGV4dHVyZXNMaXN0LCBuZXdHZW9tZXRyaWVzTGlzdCk7XHJcblxyXG4gICAgLy8gRGlzcG9zZSB0aG9zZSB1bnNlZCByZXNvdXJjZXMuXHJcbiAgICBjaGVja0FuZERpc3Bvc2UocmVuZGVyZXIsIHRleHR1cmVzTGlzdCk7XHJcbiAgICBjaGVja0FuZERpc3Bvc2UocmVuZGVyZXIsIGdlb21ldHJpZXNMaXN0KTtcclxuXHJcbiAgICB0aGlzLl90ZXh0dXJlc0xpc3QgPSBuZXdUZXh0dXJlc0xpc3Q7XHJcbiAgICB0aGlzLl9nZW9tZXRyaWVzTGlzdCA9IG5ld0dlb21ldHJpZXNMaXN0O1xyXG59O1xyXG5cclxuXHJcbmZ1bmN0aW9uIG1hcmtVbnVzZWQocmVzb3VyY2VMaXN0KSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc291cmNlTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHJlc291cmNlTGlzdFtpXS5fX3VzZWQgPSAwO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjaGVja0FuZERpc3Bvc2UocmVuZGVyZXIsIHJlc291cmNlTGlzdCkge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXNvdXJjZUxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoIXJlc291cmNlTGlzdFtpXS5fX3VzZWQpIHtcclxuICAgICAgICAgICAgcmVzb3VyY2VMaXN0W2ldLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdXBkYXRlVXNlZChyZXNvdXJjZSwgbGlzdCkge1xyXG4gICAgcmVzb3VyY2UuX191c2VkID0gcmVzb3VyY2UuX191c2VkIHx8IDA7XHJcbiAgICByZXNvdXJjZS5fX3VzZWQrKztcclxuICAgIGlmIChyZXNvdXJjZS5fX3VzZWQgPT09IDEpIHtcclxuICAgICAgICAvLyBEb24ndCBwdXNoIHRvIHRoZSBsaXN0IHR3aWNlLlxyXG4gICAgICAgIGxpc3QucHVzaChyZXNvdXJjZSk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gY29sbGVjdFJlc291cmNlcyhzY2VuZSwgdGV4dHVyZVJlc291cmNlTGlzdCwgZ2VvbWV0cnlSZXNvdXJjZUxpc3QpIHtcclxuICAgIHZhciBwcmV2TWF0ZXJpYWw7XHJcbiAgICB2YXIgcHJldkdlb21ldHJ5O1xyXG4gICAgc2NlbmUudHJhdmVyc2UoZnVuY3Rpb24gKHJlbmRlcmFibGUpIHtcclxuICAgICAgICBpZiAocmVuZGVyYWJsZS5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICB2YXIgZ2VvbWV0cnkgPSByZW5kZXJhYmxlLmdlb21ldHJ5O1xyXG4gICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG5cclxuICAgICAgICAgICAgLy8gVE9ETyBvcHRpbWl6ZSEhXHJcbiAgICAgICAgICAgIGlmIChtYXRlcmlhbCAhPT0gcHJldk1hdGVyaWFsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZVVuaWZvcm1zID0gbWF0ZXJpYWwuZ2V0VGV4dHVyZVVuaWZvcm1zKCk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IHRleHR1cmVVbmlmb3Jtcy5sZW5ndGg7IHUrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtTmFtZSA9IHRleHR1cmVVbmlmb3Jtc1t1XTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gbWF0ZXJpYWwudW5pZm9ybXNbdW5pZm9ybU5hbWVdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmlmb3JtVHlwZSA9IG1hdGVyaWFsLnVuaWZvcm1zW3VuaWZvcm1OYW1lXS50eXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodW5pZm9ybVR5cGUgPT09ICd0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVVc2VkKHZhbCwgdGV4dHVyZVJlc291cmNlTGlzdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVuaWZvcm1UeXBlID09PSAndHYnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdmFsLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsW2tdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVXNlZCh2YWxba10sIHRleHR1cmVSZXNvdXJjZUxpc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeSAhPT0gcHJldkdlb21ldHJ5KSB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVVc2VkKGdlb21ldHJ5LCBnZW9tZXRyeVJlc291cmNlTGlzdCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHByZXZNYXRlcmlhbCA9IG1hdGVyaWFsO1xyXG4gICAgICAgICAgICBwcmV2R2VvbWV0cnkgPSBnZW9tZXRyeTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBmb3IgKHZhciBrID0gMDsgayA8IHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgIC8vIFRyYWNrIEFtYmllbnRDdWJlbWFwXHJcbiAgICAgICAgaWYgKHNjZW5lLmxpZ2h0c1trXS5jdWJlbWFwKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZVVzZWQoc2NlbmUubGlnaHRzW2tdLmN1YmVtYXAsIHRleHR1cmVSZXNvdXJjZUxpc3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4vKipcclxuICogTG9hZCBhIHRleHR1cmUgZnJvbSBpbWFnZSBvciBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7SW1hZ2VMaWtlfSBpbWdcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSBUZXh0dXJlIG9wdGlvbnMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZmxpcFk9dHJ1ZV0gSWYgZmxpcFkuIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLmZsaXBZfVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmNvbnZlcnRUb1BPVD1mYWxzZV0gRm9yY2UgY29udmVydCBOb25lIFBvd2VyIG9mIFR3byB0ZXh0dXJlIHRvIFBvd2VyIG9mIHR3byBzbyBpdCBjYW4gYmUgdGlsZWQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5hbmlzb3Ryb3BpY10gQW5pc290cm9waWMgZmlsdGVyaW5nLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5hbmlzb3Ryb3BpY31cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLndyYXBTPWNsYXkuVGV4dHVyZS5SRVBFQVRdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLndyYXBTfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMud3JhcFQ9Y2xheS5UZXh0dXJlLlJFUEVBVF0gU2VlIHtAbGluayBjbGF5LlRleHR1cmUud3JhcFR9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5taW5GaWx0ZXI9Y2xheS5UZXh0dXJlLkxJTkVBUl9NSVBNQVBfTElORUFSXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5taW5GaWx0ZXJ9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5tYWdGaWx0ZXI9Y2xheS5UZXh0dXJlLkxJTkVBUl0gU2VlIHtAbGluayBjbGF5LlRleHR1cmUubWFnRmlsdGVyfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZXhwb3N1cmVdIE9ubHkgYmUgdXNlZCB3aGVuIHNvdXJjZSBpcyBhIEhEUiBpbWFnZS5cclxuICogQHBhcmFtIHtib29sZWFufSBbdXNlQ2FjaGVdIElmIHVzZSBjYWNoZS5cclxuICogQHJldHVybiB7UHJvbWlzZX1cclxuICogQGV4YW1wbGVcclxuICogIGFwcC5sb2FkVGV4dHVyZSgnZGlmZnVzZU1hcC5qcGcnKVxyXG4gKiAgICAgIC50aGVuKGZ1bmN0aW9uICh0ZXh0dXJlKSB7XHJcbiAqICAgICAgICAgIG1hdGVyaWFsLnNldCgnZGlmZnVzZU1hcCcsIHRleHR1cmUpO1xyXG4gKiAgICAgIH0pO1xyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmxvYWRUZXh0dXJlID0gZnVuY3Rpb24gKHVybE9ySW1nLCBvcHRzLCB1c2VDYWNoZSkge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgdmFyIGtleSA9IGdldEtleUZyb21JbWFnZUxpa2UodXJsT3JJbWcpO1xyXG4gICAgaWYgKHVzZUNhY2hlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3RleENhY2hlLmdldChrZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZXhDYWNoZS5nZXQoa2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPIFByb21pc2UgP1xyXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmUgPSBzZWxmLmxvYWRUZXh0dXJlU3luYyh1cmxPckltZywgb3B0cyk7XHJcbiAgICAgICAgaWYgKCF0ZXh0dXJlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgIHRleHR1cmUuc3VjY2VzcyhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRleHR1cmUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGV4dHVyZS5lcnJvcihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXNvbHZlKHRleHR1cmUpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHVzZUNhY2hlKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4Q2FjaGUucHV0KGtleSwgcHJvbWlzZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSB0ZXh0dXJlIGZyb20gaW1hZ2Ugb3Igc3RyaW5nIHN5bmNocm9ub3VzbHkuIFRleHR1cmUgY2FuIGJlIHVzZSBkaXJlY3RseSBhbmQgZG9uJ3QgaGF2ZSB0byB3YWl0IGZvciBpdCdzIGxvYWRlZC5cclxuICogQHBhcmFtIHtJbWFnZUxpa2V9IGltZ1xyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIFRleHR1cmUgb3B0aW9ucy5cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbGlwWT10cnVlXSBJZiBmbGlwWS4gU2VlIHtAbGluayBjbGF5LlRleHR1cmUuZmxpcFl9XHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuY29udmVydFRvUE9UPWZhbHNlXSBGb3JjZSBjb252ZXJ0IE5vbmUgUG93ZXIgb2YgVHdvIHRleHR1cmUgdG8gUG93ZXIgb2YgdHdvIHNvIGl0IGNhbiBiZSB0aWxlZC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmFuaXNvdHJvcGljXSBBbmlzb3Ryb3BpYyBmaWx0ZXJpbmcuIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLmFuaXNvdHJvcGljfVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMud3JhcFM9Y2xheS5UZXh0dXJlLlJFUEVBVF0gU2VlIHtAbGluayBjbGF5LlRleHR1cmUud3JhcFN9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy53cmFwVD1jbGF5LlRleHR1cmUuUkVQRUFUXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS53cmFwVH1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLm1pbkZpbHRlcj1jbGF5LlRleHR1cmUuTElORUFSX01JUE1BUF9MSU5FQVJdIFNlZSB7QGxpbmsgY2xheS5UZXh0dXJlLm1pbkZpbHRlcn1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLm1hZ0ZpbHRlcj1jbGF5LlRleHR1cmUuTElORUFSXSBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5tYWdGaWx0ZXJ9XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5leHBvc3VyZV0gT25seSBiZSB1c2VkIHdoZW4gc291cmNlIGlzIGEgSERSIGltYWdlLlxyXG4gKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICogQGV4YW1wbGVcclxuICogIHZhciB0ZXh0dXJlID0gYXBwLmxvYWRUZXh0dXJlKCdkaWZmdXNlTWFwLmpwZycsIHtcclxuICogICAgICBhbmlzb3Ryb3BpYzogOCxcclxuICogICAgICBmbGlwWTogZmFsc2VcclxuICogIH0pO1xyXG4gKiAgbWF0ZXJpYWwuc2V0KCdkaWZmdXNlTWFwJywgdGV4dHVyZSk7XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUubG9hZFRleHR1cmVTeW5jID0gZnVuY3Rpb24gKHVybE9ySW1nLCBvcHRzKSB7XHJcbiAgICB2YXIgdGV4dHVyZSA9IG5ldyBUZXh0dXJlMkQob3B0cyk7XHJcbiAgICBpZiAodHlwZW9mIHVybE9ySW1nID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGlmICh1cmxPckltZy5tYXRjaCgvLmhkciR8XmRhdGE6YXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vKSkge1xyXG4gICAgICAgICAgICB0ZXh0dXJlID0gdGV4dHVyZVV0aWwubG9hZFRleHR1cmUodXJsT3JJbWcsIHtcclxuICAgICAgICAgICAgICAgIGV4cG9zdXJlOiBvcHRzICYmIG9wdHMuZXhwb3N1cmUsXHJcbiAgICAgICAgICAgICAgICBmaWxlVHlwZTogJ2hkcidcclxuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS5kaXJ0eSgpO1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZS50cmlnZ2VyKCdzdWNjZXNzJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb3B0cykge1xyXG4gICAgICAgICAgICAgICAgdGV4dHVyZVtrZXldID0gb3B0c1trZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0ZXh0dXJlLmxvYWQodXJsT3JJbWcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGlzSW1hZ2VMaWtlRWxlbWVudCh1cmxPckltZykpIHtcclxuICAgICAgICB0ZXh0dXJlLmltYWdlID0gdXJsT3JJbWc7XHJcbiAgICAgICAgdGV4dHVyZS5keW5hbWljID0gdXJsT3JJbWcgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRleHR1cmU7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgdGV4dHVyZSBmcm9tIGltYWdlIG9yIHN0cmluZyBzeW5jaHJvbm91c2x5LiBUZXh0dXJlIGNhbiBiZSB1c2UgZGlyZWN0bHkgYW5kIGRvbid0IGhhdmUgdG8gd2FpdCBmb3IgaXQncyBsb2FkZWQuXHJcbiAqIEBwYXJhbSB7SW1hZ2VMaWtlfSBpbWdcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSBUZXh0dXJlIG9wdGlvbnMuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZmxpcFk9ZmFsc2VdIElmIGZsaXBZLiBTZWUge0BsaW5rIGNsYXkuVGV4dHVyZS5mbGlwWX1cclxuICogQHJldHVybiB7UHJvbWlzZX1cclxuICogQGV4YW1wbGVcclxuICogIGFwcC5sb2FkVGV4dHVyZUN1YmUoe1xyXG4gKiAgICAgIHB4OiAnc2t5Ym94L3B4LmpwZycsIHB5OiAnc2t5Ym94L3B5LmpwZycsIHB6OiAnc2t5Ym94L3B6LmpwZycsXHJcbiAqICAgICAgbng6ICdza3lib3gvbnguanBnJywgbnk6ICdza3lib3gvbnkuanBnJywgbno6ICdza3lib3gvbnouanBnJ1xyXG4gKiAgfSkudGhlbihmdW5jdGlvbiAodGV4dHVyZSkge1xyXG4gKiAgICAgIHNreWJveC5zZXRFbnZpcm9ubWVudE1hcCh0ZXh0dXJlKTtcclxuICogIH0pXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUubG9hZFRleHR1cmVDdWJlID0gZnVuY3Rpb24gKGltZ0xpc3QsIG9wdHMpIHtcclxuICAgIHZhciB0ZXh0dXJlQ3ViZSA9IHRoaXMubG9hZFRleHR1cmVDdWJlU3luYyhpbWdMaXN0LCBvcHRzKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgaWYgKHRleHR1cmVDdWJlLmlzUmVuZGVyYWJsZSgpKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUodGV4dHVyZUN1YmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGV4dHVyZUN1YmUuc3VjY2VzcyhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRleHR1cmVDdWJlKTtcclxuICAgICAgICAgICAgfSkuZXJyb3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHRleHR1cmUgZnJvbSBpbWFnZSBvciBzdHJpbmcgc3luY2hyb25vdXNseS4gVGV4dHVyZSBjYW4gYmUgdXNlIGRpcmVjdGx5IGFuZCBkb24ndCBoYXZlIHRvIHdhaXQgZm9yIGl0J3MgbG9hZGVkLlxyXG4gKiBAcGFyYW0ge0ltYWdlTGlrZX0gaW1nXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gVGV4dHVyZSBvcHRpb25zLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmZsaXBZPWZhbHNlXSBJZiBmbGlwWS4gU2VlIHtAbGluayBjbGF5LlRleHR1cmUuZmxpcFl9XHJcbiAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZUN1YmV9XHJcbiAqIEBleGFtcGxlXHJcbiAqICB2YXIgdGV4dHVyZSA9IGFwcC5sb2FkVGV4dHVyZUN1YmVTeW5jKHtcclxuICogICAgICBweDogJ3NreWJveC9weC5qcGcnLCBweTogJ3NreWJveC9weS5qcGcnLCBwejogJ3NreWJveC9wei5qcGcnLFxyXG4gKiAgICAgIG54OiAnc2t5Ym94L254LmpwZycsIG55OiAnc2t5Ym94L255LmpwZycsIG56OiAnc2t5Ym94L256LmpwZydcclxuICogIH0pO1xyXG4gKiAgc2t5Ym94LnNldEVudmlyb25tZW50TWFwKHRleHR1cmUpO1xyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmxvYWRUZXh0dXJlQ3ViZVN5bmMgPSBmdW5jdGlvbiAoaW1nTGlzdCwgb3B0cykge1xyXG4gICAgb3B0cyA9IG9wdHMgfHwge307XHJcbiAgICBvcHRzLmZsaXBZID0gb3B0cy5mbGlwWSB8fCBmYWxzZTtcclxuICAgIHZhciB0ZXh0dXJlQ3ViZSA9IG5ldyBUZXh0dXJlQ3ViZShvcHRzKTtcclxuICAgIGlmICghaW1nTGlzdCB8fCAhaW1nTGlzdC5weCB8fCAhaW1nTGlzdC5ueCB8fCAhaW1nTGlzdC5weSB8fCAhaW1nTGlzdC5ueSB8fCAhaW1nTGlzdC5weiB8fCAhaW1nTGlzdC5ueikge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjdWJlbWFwIGZvcm1hdC4gU2hvdWxkIGJlIGFuIG9iamVjdCBpbmNsdWRpbmcgcHgsbngscHksbnkscHosbnonKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgaW1nTGlzdC5weCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0ZXh0dXJlQ3ViZS5sb2FkKGltZ0xpc3QpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGV4dHVyZUN1YmUuaW1hZ2UgPSB1dGlsLmNsb25lKGltZ0xpc3QpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRleHR1cmVDdWJlO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIG1hdGVyaWFsLlxyXG4gKiBAcGFyYW0ge09iamVjdHxTdGFuZGFyZE1hdGVyaWFsTVJDb25maWd9IG1hdGVyaWFsQ29uZmlnLiBtYXRlcmlhbENvbmZpZyBjb250YWlucyBgc2hhZGVyYCwgYHRyYW5zcGFyZW50YCBhbmQgdW5pZm9ybXMgdGhhdCB1c2VkIGluIGNvcnJlc3BvbmRpbmcgdW5pZm9ybXMuXHJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pZm9ybXMgY2FuIGJlIGBjb2xvcmAsIGBhbHBoYWAgYGRpZmZ1c2VNYXBgIGV0Yy5cclxuICogQHBhcmFtIHtzdHJpbmd8Y2xheS5TaGFkZXJ9IFtzaGFkZXI9J2NsYXkuc3RhbmRhcmRNUiddIERlZmF1bHQgdG8gYmUgc3RhbmRhcmQgc2hhZGVyIHdpdGggbWV0YWxuZXNzIGFuZCByb3VnaG5lc3Mgd29ya2Zsb3cuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RyYW5zcGFyZW50PWZhbHNlXSBJZiBtYXRlcmlhbCBpcyB0cmFuc3BhcmVudC5cclxuICogQHBhcmFtIHtib29sZWFufSBbdGV4dHVyZUNvbnZlcnRUb1BPVD1mYWxzZV0gRm9yY2UgY29udmVydCBOb25lIFBvd2VyIG9mIFR3byB0ZXh0dXJlIHRvIFBvd2VyIG9mIHR3byBzbyBpdCBjYW4gYmUgdGlsZWQuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RleHR1cmVGbGlwWT10cnVlXSBJZiBmbGlwIHkgb2YgdGV4dHVyZS5cclxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3RleHR1cmVMb2FkZWRdIENhbGxiYWNrIHdoZW4gc2luZ2xlIHRleHR1cmUgbG9hZGVkLlxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbdGV4dHVyZXNSZWFkeV0gQ2FsbGJhY2sgd2hlbiBhbGwgdGV4dHVyZSBsb2FkZWQuXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0ZXJpYWx9XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlTWF0ZXJpYWwgPSBmdW5jdGlvbiAobWF0Q29uZmlnKSB7XHJcbiAgICBtYXRDb25maWcgPSBtYXRDb25maWcgfHwge307XHJcbiAgICBtYXRDb25maWcuc2hhZGVyID0gbWF0Q29uZmlnLnNoYWRlciB8fCAnY2xheS5zdGFuZGFyZE1SJztcclxuICAgIHZhciBzaGFkZXIgPSBtYXRDb25maWcuc2hhZGVyIGluc3RhbmNlb2YgU2hhZGVyID8gbWF0Q29uZmlnLnNoYWRlciA6IHNoYWRlckxpYnJhcnkuZ2V0KG1hdENvbmZpZy5zaGFkZXIpO1xyXG4gICAgdmFyIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICBzaGFkZXI6IHNoYWRlclxyXG4gICAgfSk7XHJcbiAgICBpZiAobWF0Q29uZmlnLm5hbWUpIHtcclxuICAgICAgICBtYXRlcmlhbC5uYW1lID0gbWF0Q29uZmlnLm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHRleHR1cmVzTG9hZGluZyA9IFtdO1xyXG4gICAgZnVuY3Rpb24gbWFrZVRleHR1cmVTZXR0ZXIoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0ZXh0dXJlKSB7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oa2V5LCB0ZXh0dXJlKTtcclxuICAgICAgICAgICAgbWF0Q29uZmlnLnRleHR1cmVMb2FkZWQgJiYgbWF0Q29uZmlnLnRleHR1cmVMb2FkZWQoa2V5LCB0ZXh0dXJlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGZvciAodmFyIGtleSBpbiBtYXRDb25maWcpIHtcclxuICAgICAgICBpZiAobWF0ZXJpYWwudW5pZm9ybXNba2V5XSkge1xyXG4gICAgICAgICAgICB2YXIgdmFsID0gbWF0Q29uZmlnW2tleV07XHJcbiAgICAgICAgICAgIGlmICgobWF0ZXJpYWwudW5pZm9ybXNba2V5XS50eXBlID09PSAndCcgfHwgaXNJbWFnZUxpa2VFbGVtZW50KHZhbCkpXHJcbiAgICAgICAgICAgICAgICAmJiAhKHZhbCBpbnN0YW5jZW9mIFRleHR1cmUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGxvYWQgYSB0ZXh0dXJlLlxyXG4gICAgICAgICAgICAgICAgdGV4dHVyZXNMb2FkaW5nLnB1c2godGhpcy5sb2FkVGV4dHVyZSh2YWwsIHtcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9QT1Q6IG1hdENvbmZpZy50ZXh0dXJlQ29udmVydFRvUE9UIHx8IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGZsaXBZOiBtYXRDb25maWcudGV4dHVyZUZsaXBZID09IG51bGwgPyB0cnVlIDogbWF0Q29uZmlnLnRleHR1cmVGbGlwWVxyXG4gICAgICAgICAgICAgICAgfSkudGhlbihtYWtlVGV4dHVyZVNldHRlcihrZXkpKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKGtleSwgdmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobWF0Q29uZmlnLnRyYW5zcGFyZW50KSB7XHJcbiAgICAgICAgbWF0Q29uZmlnLmRlcHRoTWFzayA9IGZhbHNlO1xyXG4gICAgICAgIG1hdENvbmZpZy50cmFuc3BhcmVudCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlmIChtYXRDb25maWcudGV4dHVyZXNSZWFkeSkge1xyXG4gICAgICAgIFByb21pc2UuYWxsKHRleHR1cmVzTG9hZGluZykudGhlbihmdW5jdGlvbiAodGV4dHVyZXMpIHtcclxuICAgICAgICAgICAgbWF0Q29uZmlnLnRleHR1cmVzUmVhZHkodGV4dHVyZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtYXRlcmlhbDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBjdWJlIG1lc2ggYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUgb3IgdGhlIGdpdmVuIHBhcmVudCBub2RlLlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtPYmplY3R8Y2xheS5NYXRlcmlhbH0gW21hdGVyaWFsXVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRvIGFwcGVuZC4gRGVmYXVsdCB0byBiZSBzY2VuZS5cclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxudW1iZXJ9IFtzdWJkaXZpc2lvbj0xXSBTdWJkaXZpc2lvbiBvZiBjdWJlLlxyXG4gKiAgICAgICAgICBDYW4gYmUgYSBudW1iZXIgdG8gcmVwcmVzZW50IGJvdGggd2lkdGgsIGhlaWdodCBhbmQgZGVwdGggZGltZW5zaW9ucy4gT3IgYW4gYXJyYXkgdG8gcmVwcmVzZW50IHRoZW0gcmVzcGVjdGl2ZWx5LlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XHJcbiAqIEBleGFtcGxlXHJcbiAqICAvLyBDcmVhdGUgYSB3aGl0ZSBjdWJlLlxyXG4gKiAgYXBwLmNyZWF0ZUN1YmUoKVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZUN1YmUgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIHBhcmVudE5vZGUsIHN1YmRpdikge1xyXG4gICAgaWYgKHN1YmRpdiA9PSBudWxsKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gMTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygc3ViZGl2ID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHN1YmRpdiA9IFtzdWJkaXYsIHN1YmRpdiwgc3ViZGl2XTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZ2VvS2V5ID0gJ2N1YmUtJyArIHN1YmRpdi5qb2luKCctJyk7XHJcbiAgICB2YXIgY3ViZSA9IHRoaXMuX2dlb0NhY2hlLmdldChnZW9LZXkpO1xyXG4gICAgaWYgKCFjdWJlKSB7XHJcbiAgICAgICAgY3ViZSA9IG5ldyBDdWJlR2VvKHtcclxuICAgICAgICAgICAgd2lkdGhTZWdtZW50czogc3ViZGl2WzBdLFxyXG4gICAgICAgICAgICBoZWlnaHRTZWdtZW50czogc3ViZGl2WzFdLFxyXG4gICAgICAgICAgICBkZXB0aFNlZ21lbnRzOiBzdWJkaXZbMl1cclxuICAgICAgICB9KTtcclxuICAgICAgICBjdWJlLmdlbmVyYXRlVGFuZ2VudHMoKTtcclxuICAgICAgICB0aGlzLl9nZW9DYWNoZS5wdXQoZ2VvS2V5LCBjdWJlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZU1lc2goY3ViZSwgbWF0ZXJpYWwsIHBhcmVudE5vZGUpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGN1YmUgbWVzaCB0aGF0IGNhbWVyYSBpcyBpbnNpZGUgdGhlIGN1YmUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge09iamVjdHxjbGF5Lk1hdGVyaWFsfSBbbWF0ZXJpYWxdXHJcbiAqIEBwYXJhbSB7Y2xheS5Ob2RlfSBbcGFyZW50Tm9kZV0gUGFyZW50IG5vZGUgdG8gYXBwZW5kLiBEZWZhdWx0IHRvIGJlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fG51bWJlcn0gW3N1YmRpdmlzaW9uPTFdIFN1YmRpdmlzaW9uIG9mIGN1YmUuXHJcbiAqICAgICAgICAgIENhbiBiZSBhIG51bWJlciB0byByZXByZXNlbnQgYm90aCB3aWR0aCwgaGVpZ2h0IGFuZCBkZXB0aCBkaW1lbnNpb25zLiBPciBhbiBhcnJheSB0byByZXByZXNlbnQgdGhlbSByZXNwZWN0aXZlbHkuXHJcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICogQGV4YW1wbGVcclxuICogIC8vIENyZWF0ZSBhIHdoaXRlIGN1YmUgaW5zaWRlLlxyXG4gKiAgYXBwLmNyZWF0ZUN1YmVJbnNpZGUoKVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZUN1YmVJbnNpZGUgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIHBhcmVudE5vZGUsIHN1YmRpdikge1xyXG4gICAgaWYgKHN1YmRpdiA9PSBudWxsKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gMTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygc3ViZGl2ID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHN1YmRpdiA9IFtzdWJkaXYsIHN1YmRpdiwgc3ViZGl2XTtcclxuICAgIH1cclxuICAgIHZhciBnZW9LZXkgPSAnY3ViZUluc2lkZS0nICsgc3ViZGl2LmpvaW4oJy0nKTtcclxuICAgIHZhciBjdWJlID0gdGhpcy5fZ2VvQ2FjaGUuZ2V0KGdlb0tleSk7XHJcbiAgICBpZiAoIWN1YmUpIHtcclxuICAgICAgICBjdWJlID0gbmV3IEN1YmVHZW8oe1xyXG4gICAgICAgICAgICBpbnNpZGU6IHRydWUsXHJcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IHN1YmRpdlswXSxcclxuICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IHN1YmRpdlsxXSxcclxuICAgICAgICAgICAgZGVwdGhTZWdtZW50czogc3ViZGl2WzJdXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY3ViZS5nZW5lcmF0ZVRhbmdlbnRzKCk7XHJcbiAgICAgICAgdGhpcy5fZ2VvQ2FjaGUucHV0KGdlb0tleSwgY3ViZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVzaChjdWJlLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgc3BoZXJlIG1lc2ggYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUgb3IgdGhlIGdpdmVuIHBhcmVudCBub2RlLlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtPYmplY3R8Y2xheS5NYXRlcmlhbH0gW21hdGVyaWFsXVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRvIGFwcGVuZC4gRGVmYXVsdCB0byBiZSBzY2VuZS5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtzdWJkaXZpc2lvbj0yMF0gU3ViZGl2aXNpb24gb2Ygc3BoZXJlLlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XHJcbiAqIEBleGFtcGxlXHJcbiAqICAvLyBDcmVhdGUgYSBzZW1pLXRyYW5zcGFyZW50IHNwaGVyZS5cclxuICogIGFwcC5jcmVhdGVTcGhlcmUoe1xyXG4gKiAgICAgIGNvbG9yOiBbMCwgMCwgMV0sXHJcbiAqICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAqICAgICAgYWxwaGE6IDAuNVxyXG4gKiAgfSlcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVTcGhlcmUgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIHBhcmVudE5vZGUsIHN1YmRpdmlzaW9uKSB7XHJcbiAgICBpZiAoc3ViZGl2aXNpb24gPT0gbnVsbCkge1xyXG4gICAgICAgIHN1YmRpdmlzaW9uID0gMjA7XHJcbiAgICB9XHJcbiAgICB2YXIgZ2VvS2V5ID0gJ3NwaGVyZS0nICsgc3ViZGl2aXNpb247XHJcbiAgICB2YXIgc3BoZXJlID0gdGhpcy5fZ2VvQ2FjaGUuZ2V0KGdlb0tleSk7XHJcbiAgICBpZiAoIXNwaGVyZSkge1xyXG4gICAgICAgIHNwaGVyZSA9IG5ldyBTcGhlcmVHZW8oe1xyXG4gICAgICAgICAgICB3aWR0aFNlZ21lbnRzOiBzdWJkaXZpc2lvbiAqIDIsXHJcbiAgICAgICAgICAgIGhlaWdodFNlZ21lbnRzOiBzdWJkaXZpc2lvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNwaGVyZS5nZW5lcmF0ZVRhbmdlbnRzKCk7XHJcbiAgICAgICAgdGhpcy5fZ2VvQ2FjaGUucHV0KGdlb0tleSwgc3BoZXJlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZU1lc2goc3BoZXJlLCBtYXRlcmlhbCwgcGFyZW50Tm9kZSk7XHJcbn07XHJcblxyXG4vLyBUT0RPIG1heSBiZSBtb2RpZmllZD9cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHBsYW5lIG1lc2ggYW5kIGFkZCBpdCB0byB0aGUgc2NlbmUgb3IgdGhlIGdpdmVuIHBhcmVudCBub2RlLlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtPYmplY3R8Y2xheS5NYXRlcmlhbH0gW21hdGVyaWFsXVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRvIGFwcGVuZC4gRGVmYXVsdCB0byBiZSBzY2VuZS5cclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxudW1iZXJ9IFtzdWJkaXZpc2lvbj0xXSBTdWJkaXZpc2lvbiBvZiBwbGFuZS5cclxuICogICAgICAgICAgQ2FuIGJlIGEgbnVtYmVyIHRvIHJlcHJlc2VudCBib3RoIHdpZHRoIGFuZCBoZWlnaHQgZGltZW5zaW9ucy4gT3IgYW4gYXJyYXkgdG8gcmVwcmVzZW50IHRoZW0gcmVzcGVjdGl2ZWx5LlxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XHJcbiAqIEBleGFtcGxlXHJcbiAqICAvLyBDcmVhdGUgYSByZWQgY29sb3IgcGxhbmUuXHJcbiAqICBhcHAuY3JlYXRlUGxhbmUoe1xyXG4gKiAgICAgIGNvbG9yOiBbMSwgMCwgMF1cclxuICogIH0pXHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlUGxhbmUgPSBmdW5jdGlvbiAobWF0ZXJpYWwsIHBhcmVudE5vZGUsIHN1YmRpdikge1xyXG4gICAgaWYgKHN1YmRpdiA9PSBudWxsKSB7XHJcbiAgICAgICAgc3ViZGl2ID0gMTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygc3ViZGl2ID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHN1YmRpdiA9IFtzdWJkaXYsIHN1YmRpdl07XHJcbiAgICB9XHJcbiAgICB2YXIgZ2VvS2V5ID0gJ3BsYW5lLScgKyBzdWJkaXYuam9pbignLScpO1xyXG4gICAgdmFyIHBsYW5lR2VvID0gdGhpcy5fZ2VvQ2FjaGUuZ2V0KGdlb0tleSk7XHJcbiAgICBpZiAoIXBsYW5lR2VvKSB7XHJcbiAgICAgICAgcGxhbmVHZW8gPSBuZXcgUGxhbmVHZW8oe1xyXG4gICAgICAgICAgICB3aWR0aFNlZ21lbnRzOiBzdWJkaXZbMF0sXHJcbiAgICAgICAgICAgIGhlaWdodFNlZ21lbnRzOiBzdWJkaXZbMV1cclxuICAgICAgICB9KTtcclxuICAgICAgICBwbGFuZUdlby5nZW5lcmF0ZVRhbmdlbnRzKCk7XHJcbiAgICAgICAgdGhpcy5fZ2VvQ2FjaGUucHV0KGdlb0tleSwgcGxhbmVHZW8pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVzaChwbGFuZUdlbywgbWF0ZXJpYWwsIHBhcmVudE5vZGUpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBtZXNoIHdpdGggcGFyYW1ldHJpYyBzdXJmYWNlIGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7T2JqZWN0fGNsYXkuTWF0ZXJpYWx9IFttYXRlcmlhbF1cclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtwYXJlbnROb2RlXSBQYXJlbnQgbm9kZSB0byBhcHBlbmQuIERlZmF1bHQgdG8gYmUgc2NlbmUuXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBnZW5lcmF0b3JcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2VuZXJhdG9yLnhcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2VuZXJhdG9yLnlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2VuZXJhdG9yLnpcclxuICogQHBhcmFtIHtBcnJheX0gW2dlbmVyYXRvci51PVswLCAxLCAwLjA1XV1cclxuICogQHBhcmFtIHtBcnJheX0gW2dlbmVyYXRvci52PVswLCAxLCAwLjA1XV1cclxuICogQHJldHVybiB7Y2xheS5NZXNofVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZVBhcmFtZXRyaWNTdXJmYWNlID0gZnVuY3Rpb24gKG1hdGVyaWFsLCBwYXJlbnROb2RlLCBnZW5lcmF0b3IpIHtcclxuICAgIHZhciBnZW8gPSBuZXcgUGFyYW1ldHJpY1N1cmZhY2VHZW8oe1xyXG4gICAgICAgIGdlbmVyYXRvcjogZ2VuZXJhdG9yXHJcbiAgICB9KTtcclxuICAgIGdlby5nZW5lcmF0ZVRhbmdlbnRzKCk7XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVNZXNoKGdlbywgbWF0ZXJpYWwsIHBhcmVudE5vZGUpO1xyXG59O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBnZW5lcmFsIG1lc2ggd2l0aCBnaXZlbiBnZW9tZXRyeSBpbnN0YW5jZSBhbmQgbWF0ZXJpYWwgY29uZmlnLlxyXG4gKiBAcGFyYW0ge2NsYXkuR2VvbWV0cnl9IGdlb21ldHJ5XHJcbiAqIEByZXR1cm4ge2NsYXkuTWVzaH1cclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVNZXNoID0gZnVuY3Rpb24gKGdlb21ldHJ5LCBtYXQsIHBhcmVudE5vZGUpIHtcclxuICAgIHZhciBtZXNoID0gbmV3IE1lc2goe1xyXG4gICAgICAgIGdlb21ldHJ5OiBnZW9tZXRyeSxcclxuICAgICAgICBtYXRlcmlhbDogbWF0IGluc3RhbmNlb2YgTWF0ZXJpYWwgPyBtYXQgOiB0aGlzLmNyZWF0ZU1hdGVyaWFsKG1hdClcclxuICAgIH0pO1xyXG4gICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgdGhpcy5zY2VuZTtcclxuICAgIHBhcmVudE5vZGUuYWRkKG1lc2gpO1xyXG4gICAgcmV0dXJuIG1lc2g7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGFuIGVtcHR5IG5vZGVcclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IHBhcmVudE5vZGVcclxuICogQHJldHVybiB7Y2xheS5Ob2RlfVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZU5vZGUgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSkge1xyXG4gICAgdmFyIG5vZGUgPSBuZXcgTm9kZSgpO1xyXG4gICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgdGhpcy5zY2VuZTtcclxuICAgIHBhcmVudE5vZGUuYWRkKG5vZGUpO1xyXG4gICAgcmV0dXJuIG5vZGU7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgcGVyc3BlY3RpdmUgb3Igb3J0aG9ncmFwaGljIGNhbWVyYSBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZS5cclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5LlZlY3RvcjN9IHBvc2l0aW9uXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58Y2xheS5WZWN0b3IzfSB0YXJnZXRcclxuICogQHBhcmFtIHtzdHJpbmd9IFt0eXBlPVwicGVyc3BlY3RpdmVcIl0gQ2FuIGJlICdwZXJzcGVjdGl2ZScgb3IgJ29ydGhvZ3JhcGhpYycoaW4gc2hvcnQgJ29ydGhvJylcclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5LlZlY3RvcjN9IFtleHRlbnRdIEV4dGVudCBpcyBhdmFpbGFibGUgb25seSBpZiB0eXBlIGlzIG9ydGhvZ3JhcGhpYy5cclxuICogQHJldHVybiB7Y2xheS5jYW1lcmEuUGVyc3BlY3RpdmV8Y2xheS5jYW1lcmEuT3J0aG9ncmFwaGljfVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZUNhbWVyYSA9IGZ1bmN0aW9uIChwb3NpdGlvbiwgdGFyZ2V0LCB0eXBlLCBleHRlbnQpIHtcclxuICAgIHZhciBDYW1lcmFDdG9yO1xyXG4gICAgdmFyIGlzT3J0aG8gPSBmYWxzZTtcclxuICAgIGlmICh0eXBlID09PSAnb3J0aG8nIHx8IHR5cGUgPT09ICdvcnRob2dyYXBoaWMnKSB7XHJcbiAgICAgICAgaXNPcnRobyA9IHRydWU7XHJcbiAgICAgICAgQ2FtZXJhQ3RvciA9IE9ydGhvZ3JhcGhpY0NhbWVyYTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0eXBlICYmIHR5cGUgIT09ICdwZXJzcGVjdGl2ZScpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVW5rb3duIGNhbWVyYSB0eXBlICcgKyB0eXBlICsgJy4gVXNlIGRlZmF1bHQgcGVyc3BlY3RpdmUgY2FtZXJhJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIENhbWVyYUN0b3IgPSBQZXJzcGVjdGl2ZUNhbWVyYTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY2FtZXJhID0gbmV3IENhbWVyYUN0b3IoKTtcclxuICAgIGlmIChwb3NpdGlvbiBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcclxuICAgICAgICBjYW1lcmEucG9zaXRpb24uY29weShwb3NpdGlvbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwb3NpdGlvbiBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgY2FtZXJhLnBvc2l0aW9uLnNldEFycmF5KHBvc2l0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMyh0YXJnZXRbMF0sIHRhcmdldFsxXSwgdGFyZ2V0WzJdKTtcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBWZWN0b3IzKSB7XHJcbiAgICAgICAgY2FtZXJhLmxvb2tBdCh0YXJnZXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChleHRlbnQgJiYgaXNPcnRobykge1xyXG4gICAgICAgIGV4dGVudCA9IGV4dGVudC5hcnJheSB8fCBleHRlbnQ7XHJcbiAgICAgICAgY2FtZXJhLmxlZnQgPSAtZXh0ZW50WzBdIC8gMjtcclxuICAgICAgICBjYW1lcmEucmlnaHQgPSBleHRlbnRbMF0gLyAyO1xyXG4gICAgICAgIGNhbWVyYS50b3AgPSBleHRlbnRbMV0gLyAyO1xyXG4gICAgICAgIGNhbWVyYS5ib3R0b20gPSAtZXh0ZW50WzFdIC8gMjtcclxuICAgICAgICBjYW1lcmEubmVhciA9IDA7XHJcbiAgICAgICAgY2FtZXJhLmZhciA9IGV4dGVudFsyXTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNhbWVyYS5hc3BlY3QgPSB0aGlzLnJlbmRlcmVyLmdldFZpZXdwb3J0QXNwZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zY2VuZS5hZGQoY2FtZXJhKTtcclxuXHJcbiAgICByZXR1cm4gY2FtZXJhO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGRpcmVjdGlvbmFsIGxpZ2h0IGFuZCBhZGQgaXQgdG8gdGhlIHNjZW5lLlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gZGlyIEEgVmVjdG9yMyBvciBhcnJheSB0byByZXByZXNlbnQgdGhlIGRpcmVjdGlvbi5cclxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2YgZGlyZWN0aW9uYWwgbGlnaHQsIGRlZmF1bHQgdG8gYmUgd2hpdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5XSBJbnRlbnNpdHkgb2YgZGlyZWN0aW9uYWwgbGlnaHQsIGRlZmF1bHQgdG8gYmUgMS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogIGFwcC5jcmVhdGVEaXJlY3Rpb25hbExpZ2h0KFstMSwgLTEsIC0xXSwgJyNmZmYnLCAyKTtcclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVEaXJlY3Rpb25hbExpZ2h0ID0gZnVuY3Rpb24gKGRpciwgY29sb3IsIGludGVuc2l0eSkge1xyXG4gICAgdmFyIGxpZ2h0ID0gbmV3IERpcmVjdGlvbmFsTGlnaHQoKTtcclxuICAgIGlmIChkaXIgaW5zdGFuY2VvZiBWZWN0b3IzKSB7XHJcbiAgICAgICAgZGlyID0gZGlyLmFycmF5O1xyXG4gICAgfVxyXG4gICAgbGlnaHQucG9zaXRpb24uc2V0QXJyYXkoZGlyKS5uZWdhdGUoKTtcclxuICAgIGxpZ2h0Lmxvb2tBdChWZWN0b3IzLlpFUk8pO1xyXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb2xvciA9IHBhcnNlQ29sb3IoY29sb3IpO1xyXG4gICAgfVxyXG4gICAgY29sb3IgIT0gbnVsbCAmJiAobGlnaHQuY29sb3IgPSBjb2xvcik7XHJcbiAgICBpbnRlbnNpdHkgIT0gbnVsbCAmJiAobGlnaHQuaW50ZW5zaXR5ID0gaW50ZW5zaXR5KTtcclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChsaWdodCk7XHJcbiAgICByZXR1cm4gbGlnaHQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgc3BvdCBsaWdodCBhbmQgYWRkIGl0IHRvIHRoZSBzY2VuZS5cclxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPnxjbGF5LlZlY3RvcjN9IHBvc2l0aW9uIFBvc2l0aW9uIG9mIHRoZSBzcG90IGxpZ2h0LlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gW3RhcmdldF0gVGFyZ2V0IHBvc2l0aW9uIHdoZXJlIHNwb3QgbGlnaHQgcG9pbnRzIHRvLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3JhbmdlPTIwXSBGYWxsb2ZmIHJhbmdlIG9mIHNwb3QgbGlnaHQuIERlZmF1bHQgdG8gYmUgMjAuXHJcbiAqIEBwYXJhbSB7Q29sb3J9IFtjb2xvcj0nI2ZmZiddIENvbG9yIG9mIHNwb3QgbGlnaHQsIGRlZmF1bHQgdG8gYmUgd2hpdGUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5PTFdIEludGVuc2l0eSBvZiBzcG90IGxpZ2h0LCBkZWZhdWx0IHRvIGJlIDEuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbdW1icmFBbmdsZT0zMF0gVW1icmEgYW5nbGUgb2Ygc3BvdCBsaWdodC4gRGVmYXVsdCB0byBiZSAzMCBkZWdyZWUgZnJvbSB0aGUgbWlkZGxlIGxpbmUuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGVudW1icmFBbmdsZT00NV0gUGVudW1icmEgYW5nbGUgb2Ygc3BvdCBsaWdodC4gRGVmYXVsdCB0byBiZSA0NSBkZWdyZWUgZnJvbSB0aGUgbWlkZGxlIGxpbmUuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqICBhcHAuY3JlYXRlU3BvdExpZ2h0KFs1LCA1LCA1XSwgWzAsIDAsIDBdLCAyMCwgIzkwMCk7XHJcbiAqL1xyXG5BcHAzRC5wcm90b3R5cGUuY3JlYXRlU3BvdExpZ2h0ID0gZnVuY3Rpb24gKHBvc2l0aW9uLCB0YXJnZXQsIHJhbmdlLCBjb2xvciwgaW50ZW5zaXR5LCB1bWJyYUFuZ2xlLCBwZW51bWJyYUFuZ2xlKSB7XHJcbiAgICB2YXIgbGlnaHQgPSBuZXcgU3BvdExpZ2h0KCk7XHJcbiAgICBsaWdodC5wb3NpdGlvbi5zZXRBcnJheShwb3NpdGlvbiBpbnN0YW5jZW9mIFZlY3RvcjMgPyBwb3NpdGlvbi5hcnJheSA6IHBvc2l0aW9uKTtcclxuXHJcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMyh0YXJnZXRbMF0sIHRhcmdldFsxXSwgdGFyZ2V0WzJdKTtcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBWZWN0b3IzKSB7XHJcbiAgICAgICAgbGlnaHQubG9va0F0KHRhcmdldCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb2xvciA9IHBhcnNlQ29sb3IoY29sb3IpO1xyXG4gICAgfVxyXG4gICAgcmFuZ2UgIT0gbnVsbCAmJiAobGlnaHQucmFuZ2UgPSByYW5nZSk7XHJcbiAgICBjb2xvciAhPSBudWxsICYmIChsaWdodC5jb2xvciA9IGNvbG9yKTtcclxuICAgIGludGVuc2l0eSAhPSBudWxsICYmIChsaWdodC5pbnRlbnNpdHkgPSBpbnRlbnNpdHkpO1xyXG4gICAgdW1icmFBbmdsZSAhPSBudWxsICYmIChsaWdodC51bWJyYUFuZ2xlID0gdW1icmFBbmdsZSk7XHJcbiAgICBwZW51bWJyYUFuZ2xlICE9IG51bGwgJiYgKGxpZ2h0LnBlbnVtYnJhQW5nbGUgPSBwZW51bWJyYUFuZ2xlKTtcclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChsaWdodCk7XHJcblxyXG4gICAgcmV0dXJuIGxpZ2h0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIHBvaW50IGxpZ2h0LlxyXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fGNsYXkuVmVjdG9yM30gcG9zaXRpb24gUG9zaXRpb24gb2YgcG9pbnQgbGlnaHQuLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3JhbmdlPTEwMF0gRmFsbG9mZiByYW5nZSBvZiBwb2ludCBsaWdodC5cclxuICogQHBhcmFtIHtDb2xvcn0gW2NvbG9yPScjZmZmJ10gQ29sb3Igb2YgcG9pbnQgbGlnaHQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5PTFdIEludGVuc2l0eSBvZiBwb2ludCBsaWdodC5cclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVQb2ludExpZ2h0ID0gZnVuY3Rpb24gKHBvc2l0aW9uLCByYW5nZSwgY29sb3IsIGludGVuc2l0eSkge1xyXG4gICAgdmFyIGxpZ2h0ID0gbmV3IFBvaW50TGlnaHQoKTtcclxuICAgIGxpZ2h0LnBvc2l0aW9uLnNldEFycmF5KHBvc2l0aW9uIGluc3RhbmNlb2YgVmVjdG9yMyA/IHBvc2l0aW9uLmFycmF5IDogcG9zaXRpb24pO1xyXG5cclxuICAgIGlmICh0eXBlb2YgY29sb3IgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgY29sb3IgPSBwYXJzZUNvbG9yKGNvbG9yKTtcclxuICAgIH1cclxuICAgIHJhbmdlICE9IG51bGwgJiYgKGxpZ2h0LnJhbmdlID0gcmFuZ2UpO1xyXG4gICAgY29sb3IgIT0gbnVsbCAmJiAobGlnaHQuY29sb3IgPSBjb2xvcik7XHJcbiAgICBpbnRlbnNpdHkgIT0gbnVsbCAmJiAobGlnaHQuaW50ZW5zaXR5ID0gaW50ZW5zaXR5KTtcclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChsaWdodCk7XHJcblxyXG4gICAgcmV0dXJuIGxpZ2h0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGFtYmllbnQgbGlnaHQuXHJcbiAqIEBwYXJhbSB7Q29sb3J9IFtjb2xvcj0nI2ZmZiddIENvbG9yIG9mIGFtYmllbnQgbGlnaHQuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW50ZW5zaXR5PTFdIEludGVuc2l0eSBvZiBhbWJpZW50IGxpZ2h0LlxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmNyZWF0ZUFtYmllbnRMaWdodCA9IGZ1bmN0aW9uIChjb2xvciwgaW50ZW5zaXR5KSB7XHJcbiAgICB2YXIgbGlnaHQgPSBuZXcgQW1iaWVudExpZ2h0KCk7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjb2xvciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBjb2xvciA9IHBhcnNlQ29sb3IoY29sb3IpO1xyXG4gICAgfVxyXG4gICAgY29sb3IgIT0gbnVsbCAmJiAobGlnaHQuY29sb3IgPSBjb2xvcik7XHJcbiAgICBpbnRlbnNpdHkgIT0gbnVsbCAmJiAobGlnaHQuaW50ZW5zaXR5ID0gaW50ZW5zaXR5KTtcclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChsaWdodCk7XHJcblxyXG4gICAgcmV0dXJuIGxpZ2h0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhbiBjdWJlbWFwIGFtYmllbnQgbGlnaHQgYW5kIGFuIHNwaGVyaWNhbCBoYXJtb25pYyBhbWJpZW50IGxpZ2h0XHJcbiAqIGZvciBzcGVjdWxhciBhbmQgZGlmZnVzZSBsaWdodGluZyBpbiBQQlIgcmVuZGVyaW5nXHJcbiAqIEBwYXJhbSB7SW1hZ2VMaWtlfFRleHR1cmVDdWJlfSBbZW52SW1hZ2VdIFBhbm9yYW1hIGVudmlyb25tZW50IGltYWdlLCBIRFIgZm9ybWF0IGlzIGJldHRlci4gT3IgYSBwcmUgbG9hZGVkIHRleHR1cmUgY3ViZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW3NwZWN1bGFySW50ZW5zdGl0eT0wLjddIEludGVuc2l0eSBvZiBzcGVjdWxhciBsaWdodC5cclxuICogQHBhcmFtIHtudW1iZXJ9IFtkaWZmdXNlSW50ZW5zdGl0eT0wLjddIEludGVuc2l0eSBvZiBkaWZmdXNlIGxpZ2h0LlxyXG4gKiBAcGFyYW0ge251bWJlcn0gW2V4cG9zdXJlPTFdIEV4cG9zdXJlIG9mIEhEUiBpbWFnZS4gT25seSBpZiBpbWFnZSBpbiBmaXJzdCBwYXJhbXRlciBpcyBIRFIuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlZmlsdGVyZWRDdWJlbWFwU2l6ZT0zMl0gVGhlIHNpemUgb2YgcHJlZmlsZXJ0ZWQgY3ViZW1hcC4gTGFyZ2VyIHZhbHVlIHdpbGwgdGFrZSBtb3JlIHRpbWUgdG8gZG8gZXhwZW5zaXZlIHByZWZpbHRlcmluZy5cclxuICogQHJldHVybiB7UHJvbWlzZX1cclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jcmVhdGVBbWJpZW50Q3ViZW1hcExpZ2h0ID0gZnVuY3Rpb24gKGVudkltYWdlLCBzcGVjSW50ZW5zaXR5LCBkaWZmSW50ZW5zaXR5LCBleHBvc3VyZSwgcHJlZmlsdGVyZWRDdWJlbWFwU2l6ZSkge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgaWYgKGV4cG9zdXJlID09IG51bGwpIHtcclxuICAgICAgICBleHBvc3VyZSA9IDA7XHJcbiAgICB9XHJcbiAgICBpZiAocHJlZmlsdGVyZWRDdWJlbWFwU2l6ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgcHJlZmlsdGVyZWRDdWJlbWFwU2l6ZSA9IDMyO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBzY2VuZSA9IHRoaXMuc2NlbmU7XHJcblxyXG4gICAgdmFyIGxvYWRQcm9taXNlO1xyXG4gICAgaWYgKGVudkltYWdlLnRleHR1cmVUeXBlID09PSAndGV4dHVyZUN1YmUnKSB7XHJcbiAgICAgICAgbG9hZFByb21pc2UgPSBlbnZJbWFnZS5pc1JlbmRlcmFibGUoKVxyXG4gICAgICAgICAgICA/IFByb21pc2UucmVzb2x2ZShlbnZJbWFnZSlcclxuICAgICAgICAgICAgOiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICBlbnZJbWFnZS5zdWNjZXNzKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGVudkltYWdlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGxvYWRQcm9taXNlID0gdGhpcy5sb2FkVGV4dHVyZShlbnZJbWFnZSwge1xyXG4gICAgICAgICAgICBleHBvc3VyZTogZXhwb3N1cmVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbG9hZFByb21pc2UudGhlbihmdW5jdGlvbiAoZW52VGV4dHVyZSkge1xyXG4gICAgICAgIHZhciBzcGVjTGlnaHQgPSBuZXcgQW1iaWVudEN1YmVtYXBMaWdodCh7XHJcbiAgICAgICAgICAgIGludGVuc2l0eTogc3BlY0ludGVuc2l0eSAhPSBudWxsID8gc3BlY0ludGVuc2l0eSA6IDAuN1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNwZWNMaWdodC5jdWJlbWFwID0gZW52VGV4dHVyZTtcclxuICAgICAgICBlbnZUZXh0dXJlLmZsaXBZID0gZmFsc2U7XHJcbiAgICAgICAgLy8gVE9ETyBDYWNoZSBwcmVmaWx0ZXIgP1xyXG4gICAgICAgIHNwZWNMaWdodC5wcmVmaWx0ZXIoc2VsZi5yZW5kZXJlciwgMzIpO1xyXG5cclxuICAgICAgICB2YXIgZGlmZkxpZ2h0ID0gbmV3IEFtYmllbnRTSExpZ2h0KHtcclxuICAgICAgICAgICAgaW50ZW5zaXR5OiBkaWZmSW50ZW5zaXR5ICE9IG51bGwgPyBkaWZmSW50ZW5zaXR5IDogMC43LFxyXG4gICAgICAgICAgICBjb2VmZmljaWVudHM6IHNoVXRpbC5wcm9qZWN0RW52aXJvbm1lbnRNYXAoXHJcbiAgICAgICAgICAgICAgICBzZWxmLnJlbmRlcmVyLCBzcGVjTGlnaHQuY3ViZW1hcCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZDogMVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2NlbmUuYWRkKHNwZWNMaWdodCk7XHJcbiAgICAgICAgc2NlbmUuYWRkKGRpZmZMaWdodCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNwZWN1bGFyOiBzcGVjTGlnaHQsXHJcbiAgICAgICAgICAgIGRpZmZ1c2U6IGRpZmZMaWdodCxcclxuICAgICAgICAgICAgLy8gT3JpZ2luYWwgZW52aXJvbm1lbnQgbWFwXHJcbiAgICAgICAgICAgIGVudmlyb25tZW50TWFwOiBlbnZUZXh0dXJlXHJcbiAgICAgICAgfTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIExvYWQgYSBbZ2xURl0oaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGKSBmb3JtYXQgbW9kZWwuXHJcbiAqIFlvdSBjYW4gY29udmVydCBGQlgvREFFL09CSiBmb3JtYXQgbW9kZWxzIHRvIFtnbFRGXShodHRwczovL2dpdGh1Yi5jb20vS2hyb25vc0dyb3VwL2dsVEYpIHdpdGggW2ZieDJnbHRmXShodHRwczovL2dpdGh1Yi5jb20vcGlzc2FuZy9jbGF5Z2wjZmJ4LXRvLWdsdGYyMC1jb252ZXJ0ZXIpIHB5dGhvbiBzY3JpcHQsXHJcbiAqIG9yIHNpbXBseSB1c2luZyB0aGUgW0NsYXkgVmlld2VyXShodHRwczovL2dpdGh1Yi5jb20vcGlzc2FuZy9jbGF5LXZpZXdlcikgY2xpZW50IGFwcGxpY2F0aW9uLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXHJcbiAqIEBwYXJhbSB7c3RyaW5nfGNsYXkuU2hhZGVyfSBbb3B0cy5zaGFkZXI9J2NsYXkuc3RhbmRhcmQnXSAnYmFzaWMnfCdsYW1iZXJ0J3wnc3RhbmRhcmQnLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLndhaXRUZXh0dXJlTG9hZGVkPWZhbHNlXSBJZiBhZGQgdG8gc2NlbmUgdXRpbCB0ZXh0dXJlcyBhcmUgYWxsIGxvYWRlZC5cclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5hdXRvUGxheUFuaW1hdGlvbj10cnVlXSBJZiBhdXRvcGxheSB0aGUgYW5pbWF0aW9uIG9mIG1vZGVsLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnVwQXhpcz0neSddIENoYW5nZSBtb2RlbCB0byB5IHVwIGlmIHVwQXhpcyBpcyAneidcclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy50ZXh0dXJlRmxpcFk9ZmFsc2VdXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMudGV4dHVyZUNvbnZlcnRUb1BPVD1mYWxzZV0gSWYgY29udmVydCB0ZXh0dXJlIHRvIHBvd2VyLW9mLXR3b1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMudGV4dHVyZVJvb3RQYXRoXSBSb290IHBhdGggb2YgdGV4dHVyZS4gRGVmYXVsdCB0byBiZSByZWxhdGl2ZSB3aXRoIGdsVEYgZmlsZS5cclxuICogQHBhcmFtIHtjbGF5Lk5vZGV9IFtwYXJlbnROb2RlXSBQYXJlbnQgbm9kZSB0aGF0IG1vZGVsIHdpbGwgYmUgbW91bnRlZC4gRGVmYXVsdCB0byBiZSBzY2VuZVxyXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxyXG4gKi9cclxuQXBwM0QucHJvdG90eXBlLmxvYWRNb2RlbCA9IGZ1bmN0aW9uICh1cmwsIG9wdHMsIHBhcmVudE5vZGUpIHtcclxuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBVUkwuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgb3B0cyA9IG9wdHMgfHwge307XHJcbiAgICBpZiAob3B0cy5hdXRvUGxheUFuaW1hdGlvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgb3B0cy5hdXRvUGxheUFuaW1hdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB2YXIgc2hhZGVyID0gb3B0cy5zaGFkZXIgfHwgJ2NsYXkuc3RhbmRhcmQnO1xyXG5cclxuICAgIHZhciBsb2FkZXJPcHRzID0ge1xyXG4gICAgICAgIHJvb3ROb2RlOiBuZXcgTm9kZSgpLFxyXG4gICAgICAgIHNoYWRlcjogc2hhZGVyLFxyXG4gICAgICAgIHRleHR1cmVSb290UGF0aDogb3B0cy50ZXh0dXJlUm9vdFBhdGgsXHJcbiAgICAgICAgY3Jvc3NPcmlnaW46ICdBbm9ueW1vdXMnLFxyXG4gICAgICAgIHRleHR1cmVGbGlwWTogb3B0cy50ZXh0dXJlRmxpcFksXHJcbiAgICAgICAgdGV4dHVyZUNvbnZlcnRUb1BPVDogb3B0cy50ZXh0dXJlQ29udmVydFRvUE9UXHJcbiAgICB9O1xyXG4gICAgaWYgKG9wdHMudXBBeGlzICYmIG9wdHMudXBBeGlzLnRvTG93ZXJDYXNlKCkgPT09ICd6Jykge1xyXG4gICAgICAgIGxvYWRlck9wdHMucm9vdE5vZGUucm90YXRpb24uaWRlbnRpdHkoKS5yb3RhdGVYKC1NYXRoLlBJIC8gMik7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGxvYWRlciA9IG5ldyBHTFRGTG9hZGVyKGxvYWRlck9wdHMpO1xyXG5cclxuICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlIHx8IHRoaXMuc2NlbmU7XHJcbiAgICB2YXIgdGltZWxpbmUgPSB0aGlzLnRpbWVsaW5lO1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gYWZ0ZXJMb2FkKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcGFyZW50Tm9kZS5hZGQocmVzdWx0LnJvb3ROb2RlKTtcclxuICAgICAgICAgICAgaWYgKG9wdHMuYXV0b1BsYXlBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5jbGlwcy5mb3JFYWNoKGZ1bmN0aW9uIChjbGlwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGltZWxpbmUuYWRkQ2xpcChjbGlwKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbG9hZGVyLnN1Y2Nlc3MoZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5fZGlzcG9zZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFvcHRzLndhaXRUZXh0dXJlTG9hZGVkKSB7XHJcbiAgICAgICAgICAgICAgICBhZnRlckxvYWQocmVzdWx0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKHJlc3VsdC50ZXh0dXJlcy5tYXAoZnVuY3Rpb24gKHRleHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS5pc1JlbmRlcmFibGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS5zdWNjZXNzKHJlc29sdmUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLmVycm9yKHJlc29sdmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSkpLnRoZW4oZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyTG9hZChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyTG9hZChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBsb2FkZXIuZXJyb3IoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBsb2FkZXIubG9hZCh1cmwpO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG5cclxuLy8gVE9ETyBjbG9uZU1vZGVsXHJcblxyXG4vKipcclxuICogU2ltaWxhciB0byBgYXBwLnNjZW5lLmNsb25lTm9kZWAsIGV4Y2VwdCBpdCB3aWxsIG1vdW50IHRoZSBjbG9uZWQgbm9kZSB0byB0aGUgc2NlbmUgYXV0b21hdGljYWxseS5cclxuICogU2VlIG1vcmUgaW4ge0BsaW5rIGNsYXkuU2NlbmUjY2xvbmVOb2RlfVxyXG4gKlxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gbm9kZVxyXG4gKiBAcGFyYW0ge2NsYXkuTm9kZX0gW3BhcmVudE5vZGVdIFBhcmVudCBub2RlIHRoYXQgbmV3IGNsb25lZCBub2RlIHdpbGwgYmUgbW91bnRlZC5cclxuICogICAgICAgICAgRGVmYXVsdCB0byBoYXZlIHNhbWUgcGFyZW50IHdpdGggc291cmNlIG5vZGUuXHJcbiAqIEByZXR1cm4ge2NsYXkuTm9kZX1cclxuICovXHJcbkFwcDNELnByb3RvdHlwZS5jbG9uZU5vZGUgPSBmdW5jdGlvbiAobm9kZSwgcGFyZW50Tm9kZSkge1xyXG4gICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUgfHwgbm9kZS5nZXRQYXJlbnQoKTtcclxuXHJcbiAgICB2YXIgbmV3Tm9kZSA9IHRoaXMuc2NlbmUuY2xvbmVOb2RlKG5vZGUsIHBhcmVudE5vZGUpO1xyXG4gICAgaWYgKHBhcmVudE5vZGUpIHtcclxuICAgICAgICBwYXJlbnROb2RlLmFkZChuZXdOb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmV3Tm9kZTtcclxufTtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBBcHAzRDogQXBwM0QsXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIDNEIGFwcGxpY2F0aW9uIHRoYXQgd2lsbCBtYW5hZ2UgdGhlIGFwcCBpbml0aWFsaXphdGlvbiBhbmQgbG9vcC5cclxuICAgICAqXHJcbiAgICAgKiBTZWUgbW9yZSBkZXRhaWxzIGF0IHtAbGluayBjbGF5LmFwcGxpY2F0aW9uLkFwcDNEfVxyXG4gICAgICpcclxuICAgICAqIEBuYW1lIGNsYXkuYXBwbGljYXRpb24uY3JlYXRlXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fHN0cmluZ30gZG9tIENvbnRhaW5lciBkb20gZWxlbWVudCBvciBhIHNlbGVjdG9yIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGluIGBxdWVyeVNlbGVjdG9yYFxyXG4gICAgICogQHBhcmFtIHtBcHAzRE5hbWVzcGFjZX0gYXBwTlMgT3B0aW9ucyBhbmQgbmFtZXNwYWNlIHVzZWQgaW4gY3JlYXRpbmcgYXBwM0RcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmFwcGxpY2F0aW9uLkFwcDNEfVxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiAgY2xheS5hcHBsaWNhdGlvbi5jcmVhdGUoJyNhcHAnLCB7XHJcbiAgICAgKiAgICAgIGluaXQ6IGZ1bmN0aW9uIChhcHApIHtcclxuICAgICAqICAgICAgICAgIGFwcC5jcmVhdGVDdWJlKCk7XHJcbiAgICAgKiAgICAgICAgICB2YXIgY2FtZXJhID0gYXBwLmNyZWF0ZUNhbWVyYSgpO1xyXG4gICAgICogICAgICAgICAgY2FtZXJhLnBvc2l0aW9uLnNldCgwLCAwLCAyKTtcclxuICAgICAqICAgICAgfSxcclxuICAgICAqICAgICAgbG9vcDogZnVuY3Rpb24gKCkgeyAvLyBub29wIH1cclxuICAgICAqICB9KVxyXG4gICAgICovXHJcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChkb20sIGFwcE5TKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBBcHAzRChkb20sIGFwcE5TKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQgbm90aWZpZXIgZnJvbSAnLi4vY29yZS9taXhpbi9ub3RpZmllcic7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgdXRpbCAgZnJvbSAnLi4vY29yZS91dGlsJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuYXN5bmMuVGFza1xyXG4gKiBAbWl4ZXMgY2xheS5jb3JlLm1peGluLm5vdGlmaWVyXHJcbiAqL1xyXG5mdW5jdGlvbiBUYXNrKCkge1xyXG4gICAgdGhpcy5fZnVsbGZpbGxlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcmVqZWN0ZWQgPSBmYWxzZTtcclxufTtcclxuLyoqXHJcbiAqIFRhc2sgc3VjY2Vzc2VkXHJcbiAqIEBwYXJhbSB7fSBkYXRhXHJcbiAqL1xyXG5UYXNrLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgdGhpcy5fZnVsbGZpbGxlZCA9IHRydWU7XHJcbiAgICB0aGlzLl9yZWplY3RlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy50cmlnZ2VyKCdzdWNjZXNzJywgZGF0YSk7XHJcbn07XHJcbi8qKlxyXG4gKiBUYXNrIGZhaWxlZFxyXG4gKiBAcGFyYW0ge30gZXJyXHJcbiAqL1xyXG5UYXNrLnByb3RvdHlwZS5yZWplY3QgPSBmdW5jdGlvbihlcnIpIHtcclxuICAgIHRoaXMuX3JlamVjdGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuX2Z1bGxmaWxsZWQgPSBmYWxzZTtcclxuICAgIHRoaXMudHJpZ2dlcignZXJyb3InLCBlcnIpO1xyXG59O1xyXG4vKipcclxuICogSWYgdGFzayBzdWNjZXNzZWRcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICovXHJcblRhc2sucHJvdG90eXBlLmlzRnVsbGZpbGxlZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Z1bGxmaWxsZWQ7XHJcbn07XHJcbi8qKlxyXG4gKiBJZiB0YXNrIGZhaWxlZFxyXG4gKiBAcmV0dXJuIHtib29sZWFufVxyXG4gKi9cclxuVGFzay5wcm90b3R5cGUuaXNSZWplY3RlZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlamVjdGVkO1xyXG59O1xyXG4vKipcclxuICogSWYgdGFzayBmaW5pc2hlZCwgZWl0aGVyIHN1Y2Nlc3NlZCBvciBmYWlsZWRcclxuICogQHJldHVybiB7Ym9vbGVhbn1cclxuICovXHJcblRhc2sucHJvdG90eXBlLmlzU2V0dGxlZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Z1bGxmaWxsZWQgfHwgdGhpcy5fcmVqZWN0ZWQ7XHJcbn07XHJcblxyXG51dGlsLmV4dGVuZChUYXNrLnByb3RvdHlwZSwgbm90aWZpZXIpO1xyXG5cclxuZnVuY3Rpb24gbWFrZVJlcXVlc3RUYXNrKHVybCwgcmVzcG9uc2VUeXBlKSB7XHJcbiAgICB2YXIgdGFzayA9IG5ldyBUYXNrKCk7XHJcbiAgICB2ZW5kb3IucmVxdWVzdC5nZXQoe1xyXG4gICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgIHJlc3BvbnNlVHlwZTogcmVzcG9uc2VUeXBlLFxyXG4gICAgICAgIG9ubG9hZDogZnVuY3Rpb24ocmVzKSB7XHJcbiAgICAgICAgICAgIHRhc2sucmVzb2x2ZShyZXMpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25lcnJvcjogZnVuY3Rpb24oZXJyb3IpIHtcclxuICAgICAgICAgICAgdGFzay5yZWplY3QoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRhc2s7XHJcbn1cclxuLyoqXHJcbiAqIE1ha2UgYSB2ZW5kb3IucmVxdWVzdCB0YXNrXHJcbiAqIEBwYXJhbSAge3N0cmluZ3xvYmplY3R8b2JqZWN0W118c3RyaW5nW119IHVybFxyXG4gKiBAcGFyYW0gIHtzdHJpbmd9IFtyZXNwb25zZVR5cGVdXHJcbiAqIEBleGFtcGxlXHJcbiAqICAgICB2YXIgdGFzayA9IFRhc2subWFrZVJlcXVlc3RUYXNrKCcuL2EuanNvbicpO1xyXG4gKiAgICAgdmFyIHRhc2sgPSBUYXNrLm1ha2VSZXF1ZXN0VGFzayh7XHJcbiAqICAgICAgICAgdXJsOiAnYi5iaW4nLFxyXG4gKiAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xyXG4gKiAgICAgfSk7XHJcbiAqICAgICB2YXIgdGFza3MgPSBUYXNrLm1ha2VSZXF1ZXN0VGFzayhbJy4vYS5qc29uJywgJy4vYi5qc29uJ10pO1xyXG4gKiAgICAgdmFyIHRhc2tzID0gVGFzay5tYWtlUmVxdWVzdFRhc2soW1xyXG4gKiAgICAgICAgIHt1cmw6ICdhLmpzb24nfSxcclxuICogICAgICAgICB7dXJsOiAnYi5iaW4nLCByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcid9XHJcbiAqICAgICBdKTtcclxuICogQHJldHVybiB7Y2xheS5hc3luYy5UYXNrfGNsYXkuYXN5bmMuVGFza1tdfVxyXG4gKi9cclxuVGFzay5tYWtlUmVxdWVzdFRhc2sgPSBmdW5jdGlvbih1cmwsIHJlc3BvbnNlVHlwZSkge1xyXG4gICAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIG1ha2VSZXF1ZXN0VGFzayh1cmwsIHJlc3BvbnNlVHlwZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh1cmwudXJsKSB7ICAgLy8gIENvbmZpZ3VyZSBvYmplY3RcclxuICAgICAgICB2YXIgb2JqID0gdXJsO1xyXG4gICAgICAgIHJldHVybiBtYWtlUmVxdWVzdFRhc2sob2JqLnVybCwgb2JqLnJlc3BvbnNlVHlwZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHVybCkpIHsgIC8vIFVybCBsaXN0XHJcbiAgICAgICAgdmFyIHVybExpc3QgPSB1cmw7XHJcbiAgICAgICAgdmFyIHRhc2tzID0gW107XHJcbiAgICAgICAgdXJsTGlzdC5mb3JFYWNoKGZ1bmN0aW9uKG9iaikge1xyXG4gICAgICAgICAgICB2YXIgdXJsLCByZXNwb25zZVR5cGU7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gb2JqO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKE9iamVjdChvYmopID09PSBvYmopIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IG9iai51cmw7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGUgPSBvYmoucmVzcG9uc2VUeXBlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRhc2tzLnB1c2gobWFrZVJlcXVlc3RUYXNrKHVybCwgcmVzcG9uc2VUeXBlKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRhc2tzO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogQHJldHVybiB7Y2xheS5hc3luYy5UYXNrfVxyXG4gKi9cclxuVGFzay5tYWtlVGFzayA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIG5ldyBUYXNrKCk7XHJcbn07XHJcblxyXG51dGlsLmV4dGVuZChUYXNrLnByb3RvdHlwZSwgbm90aWZpZXIpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGFzaztcclxuIiwiaW1wb3J0IHV0aWwgZnJvbSAnLi4vY29yZS91dGlsJztcclxuaW1wb3J0IFRhc2sgZnJvbSAnLi9UYXNrJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuYXN5bmMuVGFza0dyb3VwXHJcbiAqIEBleHRlbmRzIGNsYXkuYXN5bmMuVGFza1xyXG4gKi9cclxudmFyIFRhc2tHcm91cCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICBUYXNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcblxyXG4gICAgdGhpcy5fdGFza3MgPSBbXTtcclxuXHJcbiAgICB0aGlzLl9mdWxmaWxsZWROdW1iZXIgPSAwO1xyXG5cclxuICAgIHRoaXMuX3JlamVjdGVkTnVtYmVyID0gMDtcclxufTtcclxuXHJcbnZhciBDdG9yID0gZnVuY3Rpb24gKCl7fTtcclxuQ3Rvci5wcm90b3R5cGUgPSBUYXNrLnByb3RvdHlwZTtcclxuVGFza0dyb3VwLnByb3RvdHlwZSA9IG5ldyBDdG9yKCk7XHJcblxyXG5UYXNrR3JvdXAucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGFza0dyb3VwO1xyXG5cclxuLyoqXHJcbiAqIFdhaXQgZm9yIGFsbCBnaXZlbiB0YXNrcyBzdWNjZXNzZWQsIHRhc2sgY2FuIGFsc28gYmUgYW55IG5vdGlmaWVyIG9iamVjdCB3aGljaCB3aWxsIHRyaWdnZXIgc3VjY2VzcyBhbmQgZXJyb3IgZXZlbnRzLiBMaWtlIHtAbGluayBjbGF5LlRleHR1cmUyRH0sIHtAbGluayBjbGF5LlRleHR1cmVDdWJlfSwge0BsaW5rIGNsYXkubG9hZGVyLkdMVEZ9LlxyXG4gKiBAcGFyYW0gIHtBcnJheS48Y2xheS5hc3luYy5UYXNrPn0gdGFza3NcclxuICogQGNoYWluYWJsZVxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgLy8gTG9hZCB0ZXh0dXJlIGxpc3RcclxuICogICAgIHZhciBsaXN0ID0gWydhLmpwZycsICdiLmpwZycsICdjLmpwZyddXHJcbiAqICAgICB2YXIgdGV4dHVyZXMgPSBsaXN0Lm1hcChmdW5jdGlvbiAoc3JjKSB7XHJcbiAqICAgICAgICAgdmFyIHRleHR1cmUgPSBuZXcgY2xheS5UZXh0dXJlMkQoKTtcclxuICogICAgICAgICB0ZXh0dXJlLmxvYWQoc3JjKTtcclxuICogICAgICAgICByZXR1cm4gdGV4dHVyZTtcclxuICogICAgIH0pO1xyXG4gKiAgICAgdmFyIHRhc2tHcm91cCA9IG5ldyBjbGF5LmFzeW5jLlRhc2tHcm91cCgpO1xyXG4gKiAgICAgdGFza0dyb3VwLmFsbCh0ZXh0dXJlcykuc3VjY2VzcyhmdW5jdGlvbiAoKSB7XHJcbiAqICAgICAgICAgLy8gRG8gc29tZSB0aGluZyBhZnRlciBhbGwgdGV4dHVyZXMgbG9hZGVkXHJcbiAqICAgICB9KTtcclxuICovXHJcblRhc2tHcm91cC5wcm90b3R5cGUuYWxsID0gZnVuY3Rpb24gKHRhc2tzKSB7XHJcbiAgICB2YXIgY291bnQgPSAwO1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgdmFyIGRhdGEgPSBbXTtcclxuICAgIHRoaXMuX3Rhc2tzID0gdGFza3M7XHJcbiAgICB0aGlzLl9mdWxmaWxsZWROdW1iZXIgPSAwO1xyXG4gICAgdGhpcy5fcmVqZWN0ZWROdW1iZXIgPSAwO1xyXG5cclxuICAgIHV0aWwuZWFjaCh0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGlkeCkge1xyXG4gICAgICAgIGlmICghdGFzayB8fCAhdGFzay5vbmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY291bnQrKztcclxuICAgICAgICB0YXNrLm9uY2UoJ3N1Y2Nlc3MnLCBmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgIGNvdW50LS07XHJcblxyXG4gICAgICAgICAgICBzZWxmLl9mdWxmaWxsZWROdW1iZXIrKztcclxuICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICAvLyBTb21lIHRhc2tzIGxpa2UgdGV4dHVyZSwgbG9hZGVyIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gdGFza1xyXG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgc3RhdGVzIGhlcmVcclxuICAgICAgICAgICAgdGFzay5fZnVsZmlsbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGRhdGFbaWR4XSA9IHJlcztcclxuICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0YXNrLm9uY2UoJ2Vycm9yJywgZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICAgICAgc2VsZi5fcmVqZWN0ZWROdW1iZXIgKys7XHJcblxyXG4gICAgICAgICAgICB0YXNrLl9mdWxmaWxsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5yZWplY3QodGFzayk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIGlmIChjb3VudCA9PT0gMCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzZWxmLnJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuLyoqXHJcbiAqIFdhaXQgZm9yIGFsbCBnaXZlbiB0YXNrcyBmaW5pc2hlZCwgZWl0aGVyIHN1Y2Nlc3NlZCBvciBmYWlsZWRcclxuICogQHBhcmFtICB7QXJyYXkuPGNsYXkuYXN5bmMuVGFzaz59IHRhc2tzXHJcbiAqIEByZXR1cm4ge2NsYXkuYXN5bmMuVGFza0dyb3VwfVxyXG4gKi9cclxuVGFza0dyb3VwLnByb3RvdHlwZS5hbGxTZXR0bGVkID0gZnVuY3Rpb24gKHRhc2tzKSB7XHJcbiAgICB2YXIgY291bnQgPSAwO1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgdmFyIGRhdGEgPSBbXTtcclxuICAgIGlmICh0YXNrcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdzdWNjZXNzJywgZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICB0aGlzLl90YXNrcyA9IHRhc2tzO1xyXG5cclxuICAgIHV0aWwuZWFjaCh0YXNrcywgZnVuY3Rpb24gKHRhc2ssIGlkeCkge1xyXG4gICAgICAgIGlmICghdGFzayB8fCAhdGFzay5vbmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY291bnQrKztcclxuICAgICAgICB0YXNrLm9uY2UoJ3N1Y2Nlc3MnLCBmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgIGNvdW50LS07XHJcblxyXG4gICAgICAgICAgICBzZWxmLl9mdWxmaWxsZWROdW1iZXIrKztcclxuXHJcbiAgICAgICAgICAgIHRhc2suX2Z1bGZpbGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRhc2suX3JlamVjdGVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBkYXRhW2lkeF0gPSByZXM7XHJcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGFzay5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgY291bnQtLTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuX3JlamVjdGVkTnVtYmVyKys7XHJcblxyXG4gICAgICAgICAgICB0YXNrLl9mdWxmaWxsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGFzay5fcmVqZWN0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICBkYXRhW2lkeF0gPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoY291bnQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuLyoqXHJcbiAqIEdldCBzdWNjZXNzZWQgc3ViIHRhc2tzIG51bWJlciwgcmVjdXJzaXZlIGNhbiBiZSB0cnVlIGlmIHN1YiB0YXNrIGlzIGFsc28gYSBUYXNrR3JvdXAuXHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFtyZWN1cnNpdmVdXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblRhc2tHcm91cC5wcm90b3R5cGUuZ2V0RnVsZmlsbGVkTnVtYmVyID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xyXG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xyXG4gICAgICAgIHZhciBuRnVsZmlsbGVkID0gMDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3Rhc2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciB0YXNrID0gdGhpcy5fdGFza3NbaV07XHJcbiAgICAgICAgICAgIGlmICh0YXNrIGluc3RhbmNlb2YgVGFza0dyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBuRnVsZmlsbGVkICs9IHRhc2suZ2V0RnVsZmlsbGVkTnVtYmVyKHJlY3Vyc2l2ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZih0YXNrLl9mdWxmaWxsZWQpIHtcclxuICAgICAgICAgICAgICAgIG5GdWxmaWxsZWQgKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbkZ1bGZpbGxlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGZpbGxlZE51bWJlcjtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXQgZmFpbGVkIHN1YiB0YXNrcyBudW1iZXIsIHJlY3Vyc2l2ZSBjYW4gYmUgdHJ1ZSBpZiBzdWIgdGFzayBpcyBhbHNvIGEgVGFza0dyb3VwLlxyXG4gKiBAcGFyYW0gIHtib29sZWFufSBbcmVjdXJzaXZlXVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5UYXNrR3JvdXAucHJvdG90eXBlLmdldFJlamVjdGVkTnVtYmVyID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xyXG4gICAgaWYgKHJlY3Vyc2l2ZSkge1xyXG4gICAgICAgIHZhciBuUmVqZWN0ZWQgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGFza3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRhc2sgaW5zdGFuY2VvZiBUYXNrR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIG5SZWplY3RlZCArPSB0YXNrLmdldFJlamVjdGVkTnVtYmVyKHJlY3Vyc2l2ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZih0YXNrLl9yZWplY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgblJlamVjdGVkICs9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5SZWplY3RlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlamVjdGVkTnVtYmVyO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBmaW5pc2hlZCBzdWIgdGFza3MgbnVtYmVyLCByZWN1cnNpdmUgY2FuIGJlIHRydWUgaWYgc3ViIHRhc2sgaXMgYWxzbyBhIFRhc2tHcm91cC5cclxuICogQHBhcmFtICB7Ym9vbGVhbn0gW3JlY3Vyc2l2ZV1cclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVGFza0dyb3VwLnByb3RvdHlwZS5nZXRTZXR0bGVkTnVtYmVyID0gZnVuY3Rpb24gKHJlY3Vyc2l2ZSkge1xyXG5cclxuICAgIGlmIChyZWN1cnNpdmUpIHtcclxuICAgICAgICB2YXIgblNldHRsZWQgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGFza3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRhc2sgaW5zdGFuY2VvZiBUYXNrR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIG5TZXR0bGVkICs9IHRhc2suZ2V0U2V0dGxlZE51bWJlcihyZWN1cnNpdmUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYodGFzay5fcmVqZWN0ZWQgfHwgdGFzay5fZnVsZmlsbGVkKSB7XHJcbiAgICAgICAgICAgICAgICBuU2V0dGxlZCArPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuU2V0dGxlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGZpbGxlZE51bWJlciArIHRoaXMuX3JlamVjdGVkTnVtYmVyO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldCBhbGwgc3ViIHRhc2tzIG51bWJlciwgcmVjdXJzaXZlIGNhbiBiZSB0cnVlIGlmIHN1YiB0YXNrIGlzIGFsc28gYSBUYXNrR3JvdXAuXHJcbiAqIEBwYXJhbSAge2Jvb2xlYW59IFtyZWN1cnNpdmVdXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblRhc2tHcm91cC5wcm90b3R5cGUuZ2V0VGFza051bWJlciA9IGZ1bmN0aW9uIChyZWN1cnNpdmUpIHtcclxuICAgIGlmIChyZWN1cnNpdmUpIHtcclxuICAgICAgICB2YXIgblRhc2sgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGFza3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRhc2sgPSB0aGlzLl90YXNrc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRhc2sgaW5zdGFuY2VvZiBUYXNrR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIG5UYXNrICs9IHRhc2suZ2V0VGFza051bWJlcihyZWN1cnNpdmUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgblRhc2sgKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gblRhc2s7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90YXNrcy5sZW5ndGg7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBUYXNrR3JvdXA7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcblxyXG4vLyBQRU5ESU5HXHJcbi8vIFVzZSB0b3BvbG9naWNhbCBzb3J0ID9cclxuXHJcbi8qKlxyXG4gKiBOb2RlIG9mIGdyYXBoIGJhc2VkIHBvc3QgcHJvY2Vzc2luZy5cclxuICpcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZVxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKlxyXG4gKi9cclxudmFyIENvbXBvc2l0b3JOb2RlID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlIyAqLyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBuYW1lOiAnJyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW5wdXQgbGlua3MsIHdpbGwgYmUgdXBkYXRlZCBieSB0aGUgZ3JhcGhcclxuICAgICAgICAgKiBAZXhhbXBsZTpcclxuICAgICAgICAgKiAgICAgaW5wdXROYW1lOiB7XHJcbiAgICAgICAgICogICAgICAgICBub2RlOiBzb21lTm9kZSxcclxuICAgICAgICAgKiAgICAgICAgIHBpbjogJ3h4eHgnXHJcbiAgICAgICAgICogICAgIH1cclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlucHV0TGlua3M6IHt9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBPdXRwdXQgbGlua3MsIHdpbGwgYmUgdXBkYXRlZCBieSB0aGUgZ3JhcGhcclxuICAgICAgICAgKiBAZXhhbXBsZTpcclxuICAgICAgICAgKiAgICAgb3V0cHV0TmFtZToge1xyXG4gICAgICAgICAqICAgICAgICAgbm9kZTogc29tZU5vZGUsXHJcbiAgICAgICAgICogICAgICAgICBwaW46ICd4eHh4J1xyXG4gICAgICAgICAqICAgICB9XHJcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvdXRwdXRMaW5rczoge30sXHJcblxyXG4gICAgICAgIC8vIFNhdmUgdGhlIG91dHB1dCB0ZXh0dXJlIG9mIHByZXZpb3VzIGZyYW1lXHJcbiAgICAgICAgLy8gV2lsbCBiZSB1c2VkIHdoZW4gdGhlcmUgZXhpc3QgYSBjaXJjdWxhciByZWZlcmVuY2VcclxuICAgICAgICBfcHJldk91dHB1dFRleHR1cmVzOiB7fSxcclxuICAgICAgICBfb3V0cHV0VGV4dHVyZXM6IHt9LFxyXG5cclxuICAgICAgICAvLyBFeGFtcGxlOiB7IG5hbWU6IDIgfVxyXG4gICAgICAgIF9vdXRwdXRSZWZlcmVuY2VzOiB7fSxcclxuXHJcbiAgICAgICAgX3JlbmRlcmluZzogZmFsc2UsXHJcbiAgICAgICAgLy8gSWYgcmVuZGVyZWQgaW4gdGhpcyBmcmFtZVxyXG4gICAgICAgIF9yZW5kZXJlZDogZmFsc2UsXHJcblxyXG4gICAgICAgIF9jb21wb3NpdG9yOiBudWxsXHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZS5wcm90b3R5cGUgKi9cclxue1xyXG5cclxuICAgIC8vIFRPRE8gUmVtb3ZlIHBhcmFtZXRlciBmdW5jdGlvbiBjYWxsYmFja1xyXG4gICAgdXBkYXRlUGFyYW1ldGVyOiBmdW5jdGlvbiAob3V0cHV0TmFtZSwgcmVuZGVyZXIpIHtcclxuICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tvdXRwdXROYW1lXTtcclxuICAgICAgICB2YXIgcGFyYW1ldGVycyA9IG91dHB1dEluZm8ucGFyYW1ldGVycztcclxuICAgICAgICB2YXIgcGFyYW1ldGVyc0NvcHkgPSBvdXRwdXRJbmZvLl9wYXJhbWV0ZXJzQ29weTtcclxuICAgICAgICBpZiAoIXBhcmFtZXRlcnNDb3B5KSB7XHJcbiAgICAgICAgICAgIHBhcmFtZXRlcnNDb3B5ID0gb3V0cHV0SW5mby5fcGFyYW1ldGVyc0NvcHkgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkgIT09ICd3aWR0aCcgJiYga2V5ICE9PSAnaGVpZ2h0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNDb3B5W2tleV0gPSBwYXJhbWV0ZXJzW2tleV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHdpZHRoLCBoZWlnaHQ7XHJcbiAgICAgICAgaWYgKHBhcmFtZXRlcnMud2lkdGggaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHBhcmFtZXRlcnMud2lkdGguY2FsbCh0aGlzLCByZW5kZXJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHBhcmFtZXRlcnMud2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLmhlaWdodCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IHBhcmFtZXRlcnMuaGVpZ2h0LmNhbGwodGhpcywgcmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gcGFyYW1ldGVycy5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHkud2lkdGggIT09IHdpZHRoXHJcbiAgICAgICAgICAgIHx8IHBhcmFtZXRlcnNDb3B5LmhlaWdodCAhPT0gaGVpZ2h0XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9vdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0uZGlzcG9zZShyZW5kZXJlci5nbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcGFyYW1ldGVyc0NvcHkud2lkdGggPSB3aWR0aDtcclxuICAgICAgICBwYXJhbWV0ZXJzQ29weS5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJhbWV0ZXJzQ29weTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcGFyYW1ldGVyXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHBhcmFtIHt9IHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHNldFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7fSxcclxuICAgIC8qKlxyXG4gICAgICogR2V0IHBhcmFtZXRlciB2YWx1ZVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHt9XHJcbiAgICAgKi9cclxuICAgIGdldFBhcmFtZXRlcjogZnVuY3Rpb24gKG5hbWUpIHt9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcGFyYW1ldGVyc1xyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9ialxyXG4gICAgICovXHJcbiAgICBzZXRQYXJhbWV0ZXJzOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBvYmopIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXIobmFtZSwgb2JqW25hbWVdKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge30sXHJcblxyXG4gICAgZ2V0T3V0cHV0OiBmdW5jdGlvbiAocmVuZGVyZXIgLypvcHRpb25hbCovLCBuYW1lKSB7XHJcbiAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBSZXR1cm4gdGhlIG91dHB1dCB0ZXh0dXJlIHdpdGhvdXQgcmVuZGVyaW5nXHJcbiAgICAgICAgICAgIG5hbWUgPSByZW5kZXJlcjtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tuYW1lXTtcclxuICAgICAgICBpZiAoIW91dHB1dEluZm8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFscmVhZHkgYmVlbiByZW5kZXJlZCBpbiB0aGlzIGZyYW1lXHJcbiAgICAgICAgaWYgKHRoaXMuX3JlbmRlcmVkKSB7XHJcbiAgICAgICAgICAgIC8vIEZvcmNlIHJldHVybiB0ZXh0dXJlIGluIGxhc3QgZnJhbWVcclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ub3V0cHV0TGFzdEZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmluZyAgIC8vIFNvbHZlIENpcmN1bGFyIFJlZmVyZW5jZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tuYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgYmxhbmsgdGV4dHVyZSBhdCBmaXJzdCBwYXNzXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV0gPSB0aGlzLl9jb21wb3NpdG9yLmFsbG9jYXRlVGV4dHVyZShvdXRwdXRJbmZvLnBhcmFtZXRlcnMgfHwge30pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcmV2T3V0cHV0VGV4dHVyZXNbbmFtZV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlbmRlcihyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9vdXRwdXRUZXh0dXJlc1tuYW1lXTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVtb3ZlUmVmZXJlbmNlOiBmdW5jdGlvbiAob3V0cHV0TmFtZSkge1xyXG4gICAgICAgIHRoaXMuX291dHB1dFJlZmVyZW5jZXNbb3V0cHV0TmFtZV0tLTtcclxuICAgICAgICBpZiAodGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXSA9PT0gMCkge1xyXG4gICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tvdXRwdXROYW1lXTtcclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ua2VlcExhc3RGcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSA9IHRoaXMuX291dHB1dFRleHR1cmVzW291dHB1dE5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gT3V0cHV0IG9mIHRoaXMgbm9kZSBoYXZlIGFscmVheSBiZWVuIHVzZWQgYnkgYWxsIG90aGVyIG5vZGVzXHJcbiAgICAgICAgICAgICAgICAvLyBQdXQgdGhlIHRleHR1cmUgYmFjayB0byB0aGUgcG9vbC5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBsaW5rOiBmdW5jdGlvbiAoaW5wdXRQaW5OYW1lLCBmcm9tTm9kZSwgZnJvbVBpbk5hbWUpIHtcclxuXHJcbiAgICAgICAgLy8gVGhlIHJlbGF0aW9uc2hpcCBmcm9tIG91dHB1dCBwaW4gdG8gaW5wdXQgcGluIGlzIG9uZS1vbi1tdWx0aXBsZVxyXG4gICAgICAgIHRoaXMuaW5wdXRMaW5rc1tpbnB1dFBpbk5hbWVdID0ge1xyXG4gICAgICAgICAgICBub2RlOiBmcm9tTm9kZSxcclxuICAgICAgICAgICAgcGluOiBmcm9tUGluTmFtZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKCFmcm9tTm9kZS5vdXRwdXRMaW5rc1tmcm9tUGluTmFtZV0pIHtcclxuICAgICAgICAgICAgZnJvbU5vZGUub3V0cHV0TGlua3NbZnJvbVBpbk5hbWVdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZyb21Ob2RlLm91dHB1dExpbmtzW2Zyb21QaW5OYW1lXS5wdXNoKHtcclxuICAgICAgICAgICAgbm9kZTogdGhpcyxcclxuICAgICAgICAgICAgcGluOiBpbnB1dFBpbk5hbWVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gRW5hYmxlZCB0aGUgcGluIHRleHR1cmUgaW4gc2hhZGVyXHJcbiAgICAgICAgdGhpcy5wYXNzLm1hdGVyaWFsLmVuYWJsZVRleHR1cmUoaW5wdXRQaW5OYW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgY2xlYXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmlucHV0TGlua3MgPSB7fTtcclxuICAgICAgICB0aGlzLm91dHB1dExpbmtzID0ge307XHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZVJlZmVyZW5jZTogZnVuY3Rpb24gKG91dHB1dE5hbWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3JlbmRlcmluZykge1xyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpbnB1dE5hbWUgaW4gdGhpcy5pbnB1dExpbmtzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGluayA9IHRoaXMuaW5wdXRMaW5rc1tpbnB1dE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgbGluay5ub2RlLnVwZGF0ZVJlZmVyZW5jZShsaW5rLnBpbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvdXRwdXROYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dFJlZmVyZW5jZXNbb3V0cHV0TmFtZV0gKys7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBiZWZvcmVGcmFtZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5vdXRwdXRMaW5rcykge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRSZWZlcmVuY2VzW25hbWVdID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGFmdGVyRnJhbWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBQdXQgYmFjayBhbGwgdGhlIHRleHR1cmVzIHRvIHBvb2xcclxuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMub3V0cHV0TGlua3MpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX291dHB1dFJlZmVyZW5jZXNbbmFtZV0gPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLmtlZXBMYXN0RnJhbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJldk91dHB1dFRleHR1cmVzW25hbWVdID0gdGhpcy5fb3V0cHV0VGV4dHVyZXNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21wb3NpdG9yLnJlbGVhc2VUZXh0dXJlKHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDb21wb3NpdG9yTm9kZTtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IEdyYXBoTm9kZSBmcm9tICcuL0NvbXBvc2l0b3JOb2RlJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLkdyYXBoXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgR3JhcGggPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuR3JhcGgjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7QXJyYXkuPGNsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZT59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbm9kZXM6IFtdXHJcbiAgICB9O1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5HcmFwaC5wcm90b3R5cGUgKi9cclxue1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFyayB0byB1cGRhdGVcclxuICAgICAqL1xyXG4gICAgZGlydHk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZX0gbm9kZVxyXG4gICAgICovXHJcbiAgICBhZGROb2RlOiBmdW5jdGlvbiAobm9kZSkge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ub2Rlcy5pbmRleE9mKG5vZGUpID49IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ub2Rlcy5wdXNoKG5vZGUpO1xyXG5cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LmNvbXBvc2l0b3IuQ29tcG9zaXRvck5vZGV8c3RyaW5nfSBub2RlXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZU5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBub2RlID0gdGhpcy5nZXROb2RlQnlOYW1lKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaWR4ID0gdGhpcy5ub2Rlcy5pbmRleE9mKG5vZGUpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm5vZGVzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEByZXR1cm4ge2NsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZX1cclxuICAgICAqL1xyXG4gICAgZ2V0Tm9kZUJ5TmFtZTogZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubm9kZXNbaV0ubmFtZSA9PT0gbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZXNbaV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgbGlua3Mgb2YgZ3JhcGhcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZXNbaV0uY2xlYXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVHJhdmVyc2UgYWxsIHRoZSBub2RlcyBhbmQgYnVpbGQgdGhlIGdyYXBoXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5ub2Rlc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmICghbm9kZS5pbnB1dHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIGlucHV0TmFtZSBpbiBub2RlLmlucHV0cykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFub2RlLmlucHV0c1tpbnB1dE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5wYXNzICYmICFub2RlLnBhc3MubWF0ZXJpYWwuaXNVbmlmb3JtRW5hYmxlZChpbnB1dE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQaW4gJyAgKyBub2RlLm5hbWUgKyAnLicgKyBpbnB1dE5hbWUgKyAnIG5vdCB1c2VkLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIGZyb21QaW5JbmZvID0gbm9kZS5pbnB1dHNbaW5wdXROYW1lXTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgZnJvbVBpbiA9IHRoaXMuZmluZFBpbihmcm9tUGluSW5mbyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJvbVBpbikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUubGluayhpbnB1dE5hbWUsIGZyb21QaW4ubm9kZSwgZnJvbVBpbi5waW4pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmcm9tUGluSW5mbyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdOb2RlICcgKyBmcm9tUGluSW5mbyArICcgbm90IGV4aXN0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BpbiBvZiAnICsgZnJvbVBpbkluZm8ubm9kZSArICcuJyArIGZyb21QaW5JbmZvLnBpbiArICcgbm90IGV4aXN0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBmaW5kUGluOiBmdW5jdGlvbiAoaW5wdXQpIHtcclxuICAgICAgICB2YXIgbm9kZTtcclxuICAgICAgICAvLyBUcnkgdG8gdGFrZSBpbnB1dCBhcyBhIGRpcmVjdGx5IGEgbm9kZVxyXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgR3JhcGhOb2RlKSB7XHJcbiAgICAgICAgICAgIGlucHV0ID0ge1xyXG4gICAgICAgICAgICAgICAgbm9kZTogaW5wdXRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQubm9kZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdG1wID0gdGhpcy5ub2Rlc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmICh0bXAubmFtZSA9PT0gaW5wdXQubm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUgPSB0bXA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG5vZGUgPSBpbnB1dC5ub2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgICAgICB2YXIgaW5wdXRQaW4gPSBpbnB1dC5waW47XHJcbiAgICAgICAgICAgIGlmICghaW5wdXRQaW4pIHtcclxuICAgICAgICAgICAgICAgIC8vIFVzZSBmaXJzdCBwaW4gZGVmYXVsdGx5XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRQaW4gPSBPYmplY3Qua2V5cyhub2RlLm91dHB1dHMpWzBdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChub2RlLm91dHB1dHNbaW5wdXRQaW5dKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGluOiBpbnB1dFBpblxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHcmFwaDtcclxuIiwiaW1wb3J0IEdyYXBoIGZyb20gJy4vR3JhcGgnO1xyXG5pbXBvcnQgVGV4dHVyZVBvb2wgZnJvbSAnLi9UZXh0dXJlUG9vbCc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcblxyXG4vKipcclxuICogQ29tcG9zaXRvciBwcm92aWRlIGdyYXBoIGJhc2VkIHBvc3QgcHJvY2Vzc2luZ1xyXG4gKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JcclxuICogQGV4dGVuZHMgY2xheS5jb21wb3NpdG9yLkdyYXBoXHJcbiAqXHJcbiAqL1xyXG52YXIgQ29tcG9zaXRvciA9IEdyYXBoLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLy8gT3V0cHV0IG5vZGVcclxuICAgICAgICBfb3V0cHV0czogW10sXHJcblxyXG4gICAgICAgIF90ZXh0dXJlUG9vbDogbmV3IFRleHR1cmVQb29sKCksXHJcblxyXG4gICAgICAgIF9mcmFtZUJ1ZmZlcjogbmV3IEZyYW1lQnVmZmVyKHtcclxuICAgICAgICAgICAgZGVwdGhCdWZmZXI6IGZhbHNlXHJcbiAgICAgICAgfSlcclxuICAgIH07XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3IucHJvdG90eXBlICovXHJcbntcclxuICAgIGFkZE5vZGU6IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgICAgICBHcmFwaC5wcm90b3R5cGUuYWRkTm9kZS5jYWxsKHRoaXMsIG5vZGUpO1xyXG4gICAgICAgIG5vZGUuX2NvbXBvc2l0b3IgPSB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgcmVuZGVyOiBmdW5jdGlvbihyZW5kZXJlciwgZnJhbWVCdWZmZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5fZGlydHkpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHMubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubm9kZXNbaV0ub3V0cHV0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dHMucHVzaCh0aGlzLm5vZGVzW2ldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVmZXJlbmNlIG51bWJlciBvZiBlYWNoIG91dHB1dCB0ZXh0dXJlXHJcbiAgICAgICAgICAgIHRoaXMubm9kZXNbaV0uYmVmb3JlRnJhbWUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fb3V0cHV0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRzW2ldLnVwZGF0ZVJlZmVyZW5jZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vdXRwdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHNbaV0ucmVuZGVyKHJlbmRlcmVyLCBmcmFtZUJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gQ2xlYXIgdXBcclxuICAgICAgICAgICAgdGhpcy5ub2Rlc1tpXS5hZnRlckZyYW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBhbGxvY2F0ZVRleHR1cmU6IGZ1bmN0aW9uIChwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RleHR1cmVQb29sLmdldChwYXJhbWV0ZXJzKTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVsZWFzZVRleHR1cmU6IGZ1bmN0aW9uIChwYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVBvb2wucHV0KHBhcmFtZXRlcnMpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRGcmFtZUJ1ZmZlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9mcmFtZUJ1ZmZlcjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGNvbXBvc2l0b3JcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZVBvb2wuY2xlYXIocmVuZGVyZXIpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbXBvc2l0b3I7XHJcbiIsImltcG9ydCBDb21wb3NpdG9yTm9kZSBmcm9tICcuL0NvbXBvc2l0b3JOb2RlJztcclxuaW1wb3J0IGdsZW51bSBmcm9tICcuLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5TY2VuZU5vZGVcclxuICogQGV4dGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlXHJcbiAqL1xyXG52YXIgU2NlbmVOb2RlID0gQ29tcG9zaXRvck5vZGUuZXh0ZW5kKFxyXG4vKiogQGxlbmRzIGNsYXkuY29tcG9zaXRvci5TY2VuZU5vZGUjICovXHJcbntcclxuICAgIG5hbWU6ICdzY2VuZScsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlNjZW5lfVxyXG4gICAgICovXHJcbiAgICBzY2VuZTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuQ2FtZXJhfVxyXG4gICAgICovXHJcbiAgICBjYW1lcmE6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBhdXRvVXBkYXRlU2NlbmU6IHRydWUsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBwcmVaOiBmYWxzZVxyXG5cclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmZyYW1lQnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKCk7XHJcbn0sIHtcclxuICAgIHJlbmRlcjogZnVuY3Rpb24ocmVuZGVyZXIpIHtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gdHJ1ZTtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYmVmb3JlcmVuZGVyJyk7XHJcblxyXG4gICAgICAgIHZhciByZW5kZXJJbmZvO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMub3V0cHV0cykge1xyXG5cclxuICAgICAgICAgICAgcmVuZGVySW5mbyA9IHJlbmRlcmVyLnJlbmRlcih0aGlzLnNjZW5lLCB0aGlzLmNhbWVyYSwgIXRoaXMuYXV0b1VwZGF0ZVNjZW5lLCB0aGlzLnByZVopO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgZnJhbWVCdWZmZXIgPSB0aGlzLmZyYW1lQnVmZmVyO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMub3V0cHV0cykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhcmFtZXRlcnMgPSB0aGlzLnVwZGF0ZVBhcmFtZXRlcihuYW1lLCByZW5kZXJlcik7XHJcbiAgICAgICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIHZhciB0ZXh0dXJlID0gdGhpcy5fY29tcG9zaXRvci5hbGxvY2F0ZVRleHR1cmUocGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vdXRwdXRUZXh0dXJlc1tuYW1lXSA9IHRleHR1cmU7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGF0dGFjaG1lbnQgPSBvdXRwdXRJbmZvLmF0dGFjaG1lbnQgfHwgX2dsLkNPTE9SX0FUVEFDSE1FTlQwO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihhdHRhY2htZW50KSA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQgPSBfZ2xbYXR0YWNobWVudF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmcmFtZUJ1ZmZlci5hdHRhY2godGV4dHVyZSwgYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICAvLyBNUlQgU3VwcG9ydCBpbiBjaHJvbWVcclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc2RrL3Rlc3RzL2NvbmZvcm1hbmNlL2V4dGVuc2lvbnMvZXh0LWRyYXctYnVmZmVycy5odG1sXHJcbiAgICAgICAgICAgIHZhciBleHQgPSByZW5kZXJlci5nZXRHTEV4dGVuc2lvbignRVhUX2RyYXdfYnVmZmVycycpO1xyXG4gICAgICAgICAgICBpZiAoZXh0KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYnVmcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudCBpbiB0aGlzLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50ID0gcGFyc2VJbnQoYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gX2dsLkNPTE9SX0FUVEFDSE1FTlQwICYmIGF0dGFjaG1lbnQgPD0gX2dsLkNPTE9SX0FUVEFDSE1FTlQwICsgOCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWZzLnB1c2goYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZXh0LmRyYXdCdWZmZXJzRVhUKGJ1ZnMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBBbHdheXMgY2xlYXJcclxuICAgICAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgICAgICByZW5kZXJlci5zYXZlQ2xlYXIoKTtcclxuICAgICAgICAgICAgcmVuZGVyZXIuY2xlYXJCaXQgPSBnbGVudW0uREVQVEhfQlVGRkVSX0JJVCB8IGdsZW51bS5DT0xPUl9CVUZGRVJfQklUO1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvID0gcmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsIHRoaXMuY2FtZXJhLCAhdGhpcy5hdXRvVXBkYXRlU2NlbmUsIHRoaXMucHJlWik7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlc3RvcmVDbGVhcigpO1xyXG5cclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignYWZ0ZXJyZW5kZXInLCByZW5kZXJJbmZvKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZWQgPSB0cnVlO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNjZW5lTm9kZTtcclxuIiwiaW1wb3J0IENvbXBvc2l0b3JOb2RlIGZyb20gJy4vQ29tcG9zaXRvck5vZGUnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmNvbXBvc2l0b3IuVGV4dHVyZU5vZGVcclxuICogQGV4dGVuZHMgY2xheS5jb21wb3NpdG9yLkNvbXBvc2l0b3JOb2RlXHJcbiAqL1xyXG52YXIgVGV4dHVyZU5vZGUgPSBDb21wb3NpdG9yTm9kZS5leHRlbmQoZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmNvbXBvc2l0b3IuVGV4dHVyZU5vZGUjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGV4dHVyZTogbnVsbCxcclxuXHJcbiAgICAgICAgLy8gVGV4dHVyZSBub2RlIG11c3QgaGF2ZSBvdXRwdXQgd2l0aG91dCBwYXJhbWV0ZXJzXHJcbiAgICAgICAgb3V0cHV0czoge1xyXG4gICAgICAgICAgICBjb2xvcjoge31cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcbn0sIHtcclxuXHJcbiAgICBnZXRPdXRwdXQ6IGZ1bmN0aW9uIChyZW5kZXJlciwgbmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRleHR1cmU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIERvIG5vdGhpbmdcclxuICAgIGJlZm9yZUZyYW1lOiBmdW5jdGlvbiAoKSB7fSxcclxuICAgIGFmdGVyRnJhbWU6IGZ1bmN0aW9uICgpIHt9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZU5vZGU7XHJcbiIsIi8vIFRPRE8gU2hhZGVyIGxpYnJhcnlcclxuaW1wb3J0IFBhc3MgZnJvbSAnLi9QYXNzJztcclxuaW1wb3J0IENvbXBvc2l0b3JOb2RlIGZyb20gJy4vQ29tcG9zaXRvck5vZGUnO1xyXG5cclxuLy8gVE9ETyBjdXJsbm9pc2UgZGVtbyB3cm9uZ1xyXG5cclxuLy8gUEVORElOR1xyXG4vLyBVc2UgdG9wb2xvZ2ljYWwgc29ydCA/XHJcblxyXG4vKipcclxuICogRmlsdGVyIG5vZGVcclxuICpcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuY29tcG9zaXRvci5GaWx0ZXJOb2RlXHJcbiAqIEBleHRlbmRzIGNsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yTm9kZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gICAgdmFyIG5vZGUgPSBuZXcgY2xheS5jb21wb3NpdG9yLkZpbHRlck5vZGUoe1xyXG4gICAgICAgIG5hbWU6ICdmeGFhJyxcclxuICAgICAgICBzaGFkZXI6IGNsYXkuU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLmZ4YWEnKSxcclxuICAgICAgICBpbnB1dHM6IHtcclxuICAgICAgICAgICAgdGV4dHVyZToge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6ICdzY2VuZScsXHJcbiAgICAgICAgICAgICAgICAgICAgcGluOiAnY29sb3InXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIE11bHRpcGxlIG91dHB1dHMgaXMgcHJlc2VydmVkIGZvciBNUlQgc3VwcG9ydCBpbiBXZWJHTDIuMFxyXG4gICAgICAgIG91dHB1dHM6IHtcclxuICAgICAgICAgICAgY29sb3I6IHtcclxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ6IGNsYXkuRnJhbWVCdWZmZXIuQ09MT1JfQVRUQUNITUVOVDBcclxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IGNsYXkuVGV4dHVyZS5SR0JBLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiA1MTIsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1MTJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAvLyBOb2RlIHdpbGwga2VlcCB0aGUgUlRUIHJlbmRlcmVkIGluIGxhc3QgZnJhbWVcclxuICAgICAgICAgICAgICAgIGtlZXBMYXN0RnJhbWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAvLyBGb3JjZSB0aGUgbm9kZSBvdXRwdXQgdGhlIFJUVCByZW5kZXJlZCBpbiBsYXN0IGZyYW1lXHJcbiAgICAgICAgICAgICAgICBvdXRwdXRMYXN0RnJhbWU6IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgKlxyXG4gICAgKi9cclxudmFyIEZpbHRlck5vZGUgPSBDb21wb3NpdG9yTm9kZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkZpbHRlck5vZGUjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG5hbWU6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlucHV0czoge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgb3V0cHV0czogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBzaGFkZXI6ICcnLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnB1dCBsaW5rcywgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBncmFwaFxyXG4gICAgICAgICAqIEBleGFtcGxlOlxyXG4gICAgICAgICAqICAgICBpbnB1dE5hbWU6IHtcclxuICAgICAgICAgKiAgICAgICAgIG5vZGU6IHNvbWVOb2RlLFxyXG4gICAgICAgICAqICAgICAgICAgcGluOiAneHh4eCdcclxuICAgICAgICAgKiAgICAgfVxyXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaW5wdXRMaW5rczoge30sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE91dHB1dCBsaW5rcywgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSBncmFwaFxyXG4gICAgICAgICAqIEBleGFtcGxlOlxyXG4gICAgICAgICAqICAgICBvdXRwdXROYW1lOiB7XHJcbiAgICAgICAgICogICAgICAgICBub2RlOiBzb21lTm9kZSxcclxuICAgICAgICAgKiAgICAgICAgIHBpbjogJ3h4eHgnXHJcbiAgICAgICAgICogICAgIH1cclxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG91dHB1dExpbmtzOiB7fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuY29tcG9zaXRvci5QYXNzfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHBhc3M6IG51bGwsXHJcblxyXG4gICAgICAgIC8vIFNhdmUgdGhlIG91dHB1dCB0ZXh0dXJlIG9mIHByZXZpb3VzIGZyYW1lXHJcbiAgICAgICAgLy8gV2lsbCBiZSB1c2VkIHdoZW4gdGhlcmUgZXhpc3QgYSBjaXJjdWxhciByZWZlcmVuY2VcclxuICAgICAgICBfcHJldk91dHB1dFRleHR1cmVzOiB7fSxcclxuICAgICAgICBfb3V0cHV0VGV4dHVyZXM6IHt9LFxyXG5cclxuICAgICAgICAvLyBFeGFtcGxlOiB7IG5hbWU6IDIgfVxyXG4gICAgICAgIF9vdXRwdXRSZWZlcmVuY2VzOiB7fSxcclxuXHJcbiAgICAgICAgX3JlbmRlcmluZzogZmFsc2UsXHJcbiAgICAgICAgLy8gSWYgcmVuZGVyZWQgaW4gdGhpcyBmcmFtZVxyXG4gICAgICAgIF9yZW5kZXJlZDogZmFsc2UsXHJcblxyXG4gICAgICAgIF9jb21wb3NpdG9yOiBudWxsXHJcbiAgICB9O1xyXG59LCBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIHBhc3MgPSBuZXcgUGFzcyh7XHJcbiAgICAgICAgZnJhZ21lbnQ6IHRoaXMuc2hhZGVyXHJcbiAgICB9KTtcclxuICAgIHRoaXMucGFzcyA9IHBhc3M7XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5jb21wb3NpdG9yLkZpbHRlck5vZGUucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyZXIsIGZyYW1lQnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVyZW5kZXInLCByZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX3JlbmRlcmluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIHZhciBfZ2wgPSByZW5kZXJlci5nbDtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaW5wdXROYW1lIGluIHRoaXMuaW5wdXRMaW5rcykge1xyXG4gICAgICAgICAgICB2YXIgbGluayA9IHRoaXMuaW5wdXRMaW5rc1tpbnB1dE5hbWVdO1xyXG4gICAgICAgICAgICB2YXIgaW5wdXRUZXh0dXJlID0gbGluay5ub2RlLmdldE91dHB1dChyZW5kZXJlciwgbGluay5waW4pO1xyXG4gICAgICAgICAgICB0aGlzLnBhc3Muc2V0VW5pZm9ybShpbnB1dE5hbWUsIGlucHV0VGV4dHVyZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE91dHB1dFxyXG4gICAgICAgIGlmICghdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFzcy5vdXRwdXRzID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IuZ2V0RnJhbWVCdWZmZXIoKS51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wYXNzLnJlbmRlcihyZW5kZXJlciwgZnJhbWVCdWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wYXNzLm91dHB1dHMgPSB7fTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhdHRhY2hlZFRleHR1cmVzID0ge307XHJcbiAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5vdXRwdXRzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHRoaXMudXBkYXRlUGFyYW1ldGVyKG5hbWUsIHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc05hTihwYXJhbWV0ZXJzLndpZHRoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUGFyYW1ldGVyKG5hbWUsIHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSB0aGlzLl9jb21wb3NpdG9yLmFsbG9jYXRlVGV4dHVyZShwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dFRleHR1cmVzW25hbWVdID0gdGV4dHVyZTtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRhY2htZW50ID0gb3V0cHV0SW5mby5hdHRhY2htZW50IHx8IF9nbC5DT0xPUl9BVFRBQ0hNRU5UMDtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YoYXR0YWNobWVudCkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudCA9IF9nbFthdHRhY2htZW50XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF0dGFjaGVkVGV4dHVyZXNbYXR0YWNobWVudF0gPSB0ZXh0dXJlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IuZ2V0RnJhbWVCdWZmZXIoKS5iaW5kKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnQgaW4gYXR0YWNoZWRUZXh0dXJlcykge1xyXG4gICAgICAgICAgICAgICAgLy8gRklYTUUgYXR0YWNobWVudCBjaGFuZ2VzIGluIGRpZmZlcmVudCBub2Rlc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tcG9zaXRvci5nZXRGcmFtZUJ1ZmZlcigpLmF0dGFjaChcclxuICAgICAgICAgICAgICAgICAgICBhdHRhY2hlZFRleHR1cmVzW2F0dGFjaG1lbnRdLCBhdHRhY2htZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBhc3MucmVuZGVyKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEJlY2F1c2UgdGhlIGRhdGEgb2YgdGV4dHVyZSBpcyBjaGFuZ2VkIG92ZXIgdGltZSxcclxuICAgICAgICAgICAgLy8gSGVyZSB1cGRhdGUgdGhlIG1pcG1hcHMgb2YgdGV4dHVyZSBlYWNoIHRpbWUgYWZ0ZXIgcmVuZGVyZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IuZ2V0RnJhbWVCdWZmZXIoKS51cGRhdGVNaXBtYXAocmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgaW5wdXROYW1lIGluIHRoaXMuaW5wdXRMaW5rcykge1xyXG4gICAgICAgICAgICB2YXIgbGluayA9IHRoaXMuaW5wdXRMaW5rc1tpbnB1dE5hbWVdO1xyXG4gICAgICAgICAgICBsaW5rLm5vZGUucmVtb3ZlUmVmZXJlbmNlKGxpbmsucGluKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3JlbmRlcmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdhZnRlcnJlbmRlcicsIHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVE9ETyBSZW1vdmUgcGFyYW1ldGVyIGZ1bmN0aW9uIGNhbGxiYWNrXHJcbiAgICB1cGRhdGVQYXJhbWV0ZXI6IGZ1bmN0aW9uIChvdXRwdXROYW1lLCByZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBvdXRwdXRJbmZvID0gdGhpcy5vdXRwdXRzW291dHB1dE5hbWVdO1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzID0gb3V0cHV0SW5mby5wYXJhbWV0ZXJzO1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzQ29weSA9IG91dHB1dEluZm8uX3BhcmFtZXRlcnNDb3B5O1xyXG4gICAgICAgIGlmICghcGFyYW1ldGVyc0NvcHkpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHkgPSBvdXRwdXRJbmZvLl9wYXJhbWV0ZXJzQ29weSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3dpZHRoJyAmJiBrZXkgIT09ICdoZWlnaHQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc0NvcHlba2V5XSA9IHBhcmFtZXRlcnNba2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgd2lkdGgsIGhlaWdodDtcclxuICAgICAgICBpZiAodHlwZW9mIHBhcmFtZXRlcnMud2lkdGggPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgd2lkdGggPSBwYXJhbWV0ZXJzLndpZHRoLmNhbGwodGhpcywgcmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgd2lkdGggPSBwYXJhbWV0ZXJzLndpZHRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIHBhcmFtZXRlcnMuaGVpZ2h0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IHBhcmFtZXRlcnMuaGVpZ2h0LmNhbGwodGhpcywgcmVuZGVyZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gcGFyYW1ldGVycy5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpZHRoID0gTWF0aC5jZWlsKHdpZHRoKTtcclxuICAgICAgICBoZWlnaHQgPSBNYXRoLmNlaWwoaGVpZ2h0KTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHBhcmFtZXRlcnNDb3B5LndpZHRoICE9PSB3aWR0aFxyXG4gICAgICAgICAgICB8fCBwYXJhbWV0ZXJzQ29weS5oZWlnaHQgIT09IGhlaWdodFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX291dHB1dFRleHR1cmVzW291dHB1dE5hbWVdLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhcmFtZXRlcnNDb3B5LndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgcGFyYW1ldGVyc0NvcHkuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICByZXR1cm4gcGFyYW1ldGVyc0NvcHk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHBhcmFtZXRlclxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICAgICAqIEBwYXJhbSB7fSB2YWx1ZVxyXG4gICAgICovXHJcbiAgICBzZXRQYXJhbWV0ZXI6IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMucGFzcy5zZXRVbmlmb3JtKG5hbWUsIHZhbHVlKTtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIEdldCBwYXJhbWV0ZXIgdmFsdWVcclxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZVxyXG4gICAgICogQHJldHVybiB7fVxyXG4gICAgICovXHJcbiAgICBnZXRQYXJhbWV0ZXI6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFzcy5nZXRVbmlmb3JtKG5hbWUpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogU2V0IHBhcmFtZXRlcnNcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcclxuICAgICAqL1xyXG4gICAgc2V0UGFyYW1ldGVyczogZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UGFyYW1ldGVyKG5hbWUsIG9ialtuYW1lXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8vIC8qKlxyXG4gICAgLy8gICogU2V0IHNoYWRlciBjb2RlXHJcbiAgICAvLyAgKiBAcGFyYW0ge3N0cmluZ30gc2hhZGVyU3RyXHJcbiAgICAvLyAgKi9cclxuICAgIC8vIHNldFNoYWRlcjogZnVuY3Rpb24gKHNoYWRlclN0cikge1xyXG4gICAgLy8gICAgIHZhciBtYXRlcmlhbCA9IHRoaXMucGFzcy5tYXRlcmlhbDtcclxuICAgIC8vICAgICBtYXRlcmlhbC5zaGFkZXIuc2V0RnJhZ21lbnQoc2hhZGVyU3RyKTtcclxuICAgIC8vICAgICBtYXRlcmlhbC5hdHRhY2hTaGFkZXIobWF0ZXJpYWwuc2hhZGVyLCB0cnVlKTtcclxuICAgIC8vIH0sXHJcbiAgICAvKipcclxuICAgICAqIFByb3h5IG9mIHBhc3MubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsIHh4eCk7XHJcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHN5bWJvbFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBbdmFsXVxyXG4gICAgICovXHJcbiAgICBkZWZpbmU6IGZ1bmN0aW9uIChzeW1ib2wsIHZhbCkge1xyXG4gICAgICAgIHRoaXMucGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50Jywgc3ltYm9sLCB2YWwpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3h5IG9mIHBhc3MubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50JywgeHh4KVxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBzeW1ib2xcclxuICAgICAqL1xyXG4gICAgdW5kZWZpbmU6IGZ1bmN0aW9uIChzeW1ib2wpIHtcclxuICAgICAgICB0aGlzLnBhc3MubWF0ZXJpYWwudW5kZWZpbmUoJ2ZyYWdtZW50Jywgc3ltYm9sKTtcclxuICAgIH0sXHJcblxyXG4gICAgcmVtb3ZlUmVmZXJlbmNlOiBmdW5jdGlvbiAob3V0cHV0TmFtZSkge1xyXG4gICAgICAgIHRoaXMuX291dHB1dFJlZmVyZW5jZXNbb3V0cHV0TmFtZV0tLTtcclxuICAgICAgICBpZiAodGhpcy5fb3V0cHV0UmVmZXJlbmNlc1tvdXRwdXROYW1lXSA9PT0gMCkge1xyXG4gICAgICAgICAgICB2YXIgb3V0cHV0SW5mbyA9IHRoaXMub3V0cHV0c1tvdXRwdXROYW1lXTtcclxuICAgICAgICAgICAgaWYgKG91dHB1dEluZm8ua2VlcExhc3RGcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fcHJldk91dHB1dFRleHR1cmVzW291dHB1dE5hbWVdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZPdXRwdXRUZXh0dXJlc1tvdXRwdXROYW1lXSA9IHRoaXMuX291dHB1dFRleHR1cmVzW291dHB1dE5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gT3V0cHV0IG9mIHRoaXMgbm9kZSBoYXZlIGFscmVheSBiZWVuIHVzZWQgYnkgYWxsIG90aGVyIG5vZGVzXHJcbiAgICAgICAgICAgICAgICAvLyBQdXQgdGhlIHRleHR1cmUgYmFjayB0byB0aGUgcG9vbC5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvc2l0b3IucmVsZWFzZVRleHR1cmUodGhpcy5fb3V0cHV0VGV4dHVyZXNbb3V0cHV0TmFtZV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIENvbXBvc2l0b3JOb2RlLnByb3RvdHlwZS5jbGVhci5jYWxsKHRoaXMpO1xyXG5cclxuICAgICAgICAvLyBEZWZhdWx0IGRpc2FibGUgYWxsIHRleHR1cmVcclxuICAgICAgICB0aGlzLnBhc3MubWF0ZXJpYWwuZGlzYWJsZVRleHR1cmVzQWxsKCk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRmlsdGVyTm9kZTtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5jb2xvcmFkanVzdFxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBicmlnaHRuZXNzIDogMC4wO1xcbnVuaWZvcm0gZmxvYXQgY29udHJhc3QgOiAxLjA7XFxudW5pZm9ybSBmbG9hdCBleHBvc3VyZSA6IDAuMDtcXG51bmlmb3JtIGZsb2F0IGdhbW1hIDogMS4wO1xcbnVuaWZvcm0gZmxvYXQgc2F0dXJhdGlvbiA6IDEuMDtcXG5jb25zdCB2ZWMzIHcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCggdGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIHZlYzMgY29sb3IgPSBjbGFtcCh0ZXgucmdiICsgdmVjMyhicmlnaHRuZXNzKSwgMC4wLCAxLjApO1xcbiBjb2xvciA9IGNsYW1wKCAoY29sb3ItdmVjMygwLjUpKSpjb250cmFzdCt2ZWMzKDAuNSksIDAuMCwgMS4wKTtcXG4gY29sb3IgPSBjbGFtcCggY29sb3IgKiBwb3coMi4wLCBleHBvc3VyZSksIDAuMCwgMS4wKTtcXG4gY29sb3IgPSBjbGFtcCggcG93KGNvbG9yLCB2ZWMzKGdhbW1hKSksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbHVtaW5hbmNlID0gZG90KCBjb2xvciwgdyApO1xcbiBjb2xvciA9IG1peCh2ZWMzKGx1bWluYW5jZSksIGNvbG9yLCBzYXR1cmF0aW9uKTtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgdGV4LmEpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuYnJpZ2h0bmVzc1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBicmlnaHRuZXNzIDogMC4wO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCggdGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIHZlYzMgY29sb3IgPSB0ZXgucmdiICsgdmVjMyhicmlnaHRuZXNzKTtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgdGV4LmEpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuY29udHJhc3RcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gZmxvYXQgY29udHJhc3QgOiAxLjA7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKCB0ZXh0dXJlLCB2X1RleGNvb3JkKTtcXG4gdmVjMyBjb2xvciA9ICh0ZXgucmdiLXZlYzMoMC41KSkqY29udHJhc3QrdmVjMygwLjUpO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5leHBvc3VyZVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBleHBvc3VyZSA6IDAuMDtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIHZlYzMgY29sb3IgPSB0ZXgucmdiICogcG93KDIuMCwgZXhwb3N1cmUpO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5nYW1tYVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSBmbG9hdCBnYW1tYSA6IDEuMDtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIHZlYzMgY29sb3IgPSBwb3codGV4LnJnYiwgdmVjMyhnYW1tYSkpO1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCB0ZXguYSk7XFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkuY29tcG9zaXRvci5zYXR1cmF0aW9uXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IHNhdHVyYXRpb24gOiAxLjA7XFxuY29uc3QgdmVjMyB3ID0gdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKTtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXggPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxuIHZlYzMgY29sb3IgPSB0ZXgucmdiO1xcbiBmbG9hdCBsdW1pbmFuY2UgPSBkb3QoY29sb3IsIHcpO1xcbiBjb2xvciA9IG1peCh2ZWMzKGx1bWluYW5jZSksIGNvbG9yLCBzYXR1cmF0aW9uKTtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvciwgdGV4LmEpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3Iua2VybmVsLmdhdXNzaWFuXzlcXG5mbG9hdCBnYXVzc2lhbktlcm5lbFs5XTtcXG5nYXVzc2lhbktlcm5lbFswXSA9IDAuMDc7XFxuZ2F1c3NpYW5LZXJuZWxbMV0gPSAwLjA5O1xcbmdhdXNzaWFuS2VybmVsWzJdID0gMC4xMjtcXG5nYXVzc2lhbktlcm5lbFszXSA9IDAuMTQ7XFxuZ2F1c3NpYW5LZXJuZWxbNF0gPSAwLjE2O1xcbmdhdXNzaWFuS2VybmVsWzVdID0gMC4xNDtcXG5nYXVzc2lhbktlcm5lbFs2XSA9IDAuMTI7XFxuZ2F1c3NpYW5LZXJuZWxbN10gPSAwLjA5O1xcbmdhdXNzaWFuS2VybmVsWzhdID0gMC4wNztcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3Iua2VybmVsLmdhdXNzaWFuXzEzXFxuZmxvYXQgZ2F1c3NpYW5LZXJuZWxbMTNdO1xcbmdhdXNzaWFuS2VybmVsWzBdID0gMC4wMjtcXG5nYXVzc2lhbktlcm5lbFsxXSA9IDAuMDM7XFxuZ2F1c3NpYW5LZXJuZWxbMl0gPSAwLjA2O1xcbmdhdXNzaWFuS2VybmVsWzNdID0gMC4wODtcXG5nYXVzc2lhbktlcm5lbFs0XSA9IDAuMTE7XFxuZ2F1c3NpYW5LZXJuZWxbNV0gPSAwLjEzO1xcbmdhdXNzaWFuS2VybmVsWzZdID0gMC4xNDtcXG5nYXVzc2lhbktlcm5lbFs3XSA9IDAuMTM7XFxuZ2F1c3NpYW5LZXJuZWxbOF0gPSAwLjExO1xcbmdhdXNzaWFuS2VybmVsWzldID0gMC4wODtcXG5nYXVzc2lhbktlcm5lbFsxMF0gPSAwLjA2O1xcbmdhdXNzaWFuS2VybmVsWzExXSA9IDAuMDM7XFxuZ2F1c3NpYW5LZXJuZWxbMTJdID0gMC4wMjtcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZ2F1c3NpYW5fYmx1clxcbiNkZWZpbmUgU0hBREVSX05BTUUgZ2F1c3NpYW5fYmx1clxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7dmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBmbG9hdCBibHVyU2l6ZSA6IDIuMDtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemUgOiBbNTEyLjAsIDUxMi4wXTtcXG51bmlmb3JtIGZsb2F0IGJsdXJEaXIgOiAwLjA7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbkBpbXBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZvaWQgbWFpbiAodm9pZClcXG57XFxuIEBpbXBvcnQgY2xheS5jb21wb3NpdG9yLmtlcm5lbC5nYXVzc2lhbl85XFxuIHZlYzIgb2ZmID0gYmx1clNpemUgLyB0ZXh0dXJlU2l6ZTtcXG4gb2ZmICo9IHZlYzIoMS4wIC0gYmx1ckRpciwgYmx1ckRpcik7XFxuIHZlYzQgc3VtID0gdmVjNCgwLjApO1xcbiBmbG9hdCB3ZWlnaHRBbGwgPSAwLjA7XFxuIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKSB7XFxuIGZsb2F0IHcgPSBnYXVzc2lhbktlcm5lbFtpXTtcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZmxvYXQoaSAtIDQpICogb2ZmKSk7XFxuIHN1bSArPSB0ZXhlbCAqIHc7XFxuIHdlaWdodEFsbCArPSB3O1xcbiB9XFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihzdW0gLyBtYXgod2VpZ2h0QWxsLCAwLjAxKSk7XFxufVxcbkBlbmRcXG5cIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5oZHIubG9nX2x1bVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxuY29uc3QgdmVjMyB3ID0gdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKTtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuIGZsb2F0IGx1bWluYW5jZSA9IGRvdCh0ZXgucmdiLCB3KTtcXG4gbHVtaW5hbmNlID0gbG9nKGx1bWluYW5jZSArIDAuMDAxKTtcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHZlYzQodmVjMyhsdW1pbmFuY2UpLCAxLjApKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmhkci5sdW1fYWRhcHRpb25cXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG51bmlmb3JtIHNhbXBsZXIyRCBhZGFwdGVkTHVtO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGN1cnJlbnRMdW07XFxudW5pZm9ybSBmbG9hdCBmcmFtZVRpbWUgOiAwLjAyO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gZmxvYXQgZkFkYXB0ZWRMdW0gPSBkZWNvZGVIRFIodGV4dHVyZTJEKGFkYXB0ZWRMdW0sIHZlYzIoMC41LCAwLjUpKSkucjtcXG4gZmxvYXQgZkN1cnJlbnRMdW0gPSBleHAoZW5jb2RlSERSKHRleHR1cmUyRChjdXJyZW50THVtLCB2ZWMyKDAuNSwgMC41KSkpLnIpO1xcbiBmQWRhcHRlZEx1bSArPSAoZkN1cnJlbnRMdW0gLSBmQWRhcHRlZEx1bSkgKiAoMS4wIC0gcG93KDAuOTgsIDMwLjAgKiBmcmFtZVRpbWUpKTtcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHZlYzQodmVjMyhmQWRhcHRlZEx1bSksIDEuMCkpO1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IubHVtXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG5jb25zdCB2ZWMzIHcgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IHRleHR1cmUyRCggdGV4dHVyZSwgdl9UZXhjb29yZCApO1xcbiBmbG9hdCBsdW1pbmFuY2UgPSBkb3QodGV4LnJnYiwgdyk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhsdW1pbmFuY2UpLCAxLjApO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiXFxuQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IubHV0XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIHNhbXBsZXIyRCBsb29rdXA7XFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdGV4dHVyZTJEKHRleHR1cmUsIHZfVGV4Y29vcmQpO1xcbiBmbG9hdCBibHVlQ29sb3IgPSB0ZXguYiAqIDYzLjA7XFxuIHZlYzIgcXVhZDE7XFxuIHF1YWQxLnkgPSBmbG9vcihmbG9vcihibHVlQ29sb3IpIC8gOC4wKTtcXG4gcXVhZDEueCA9IGZsb29yKGJsdWVDb2xvcikgLSAocXVhZDEueSAqIDguMCk7XFxuIHZlYzIgcXVhZDI7XFxuIHF1YWQyLnkgPSBmbG9vcihjZWlsKGJsdWVDb2xvcikgLyA4LjApO1xcbiBxdWFkMi54ID0gY2VpbChibHVlQ29sb3IpIC0gKHF1YWQyLnkgKiA4LjApO1xcbiB2ZWMyIHRleFBvczE7XFxuIHRleFBvczEueCA9IChxdWFkMS54ICogMC4xMjUpICsgMC41LzUxMi4wICsgKCgwLjEyNSAtIDEuMC81MTIuMCkgKiB0ZXgucik7XFxuIHRleFBvczEueSA9IChxdWFkMS55ICogMC4xMjUpICsgMC41LzUxMi4wICsgKCgwLjEyNSAtIDEuMC81MTIuMCkgKiB0ZXguZyk7XFxuIHZlYzIgdGV4UG9zMjtcXG4gdGV4UG9zMi54ID0gKHF1YWQyLnggKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIHRleC5yKTtcXG4gdGV4UG9zMi55ID0gKHF1YWQyLnkgKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIHRleC5nKTtcXG4gdmVjNCBuZXdDb2xvcjEgPSB0ZXh0dXJlMkQobG9va3VwLCB0ZXhQb3MxKTtcXG4gdmVjNCBuZXdDb2xvcjIgPSB0ZXh0dXJlMkQobG9va3VwLCB0ZXhQb3MyKTtcXG4gdmVjNCBuZXdDb2xvciA9IG1peChuZXdDb2xvcjEsIG5ld0NvbG9yMiwgZnJhY3QoYmx1ZUNvbG9yKSk7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQobmV3Q29sb3IucmdiLCB0ZXgudyk7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci52aWduZXR0ZVxcbiNkZWZpbmUgT1VUUFVUX0FMUEhBXFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IGRhcmtuZXNzOiAxO1xcbnVuaWZvcm0gZmxvYXQgb2Zmc2V0OiAxO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gdmVjNCB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCkpO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gdGV4ZWwucmdiO1xcbiB2ZWMyIHV2ID0gKHZfVGV4Y29vcmQgLSB2ZWMyKDAuNSkpICogdmVjMihvZmZzZXQpO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodmVjNChtaXgodGV4ZWwucmdiLCB2ZWMzKDEuMCAtIGRhcmtuZXNzKSwgZG90KHV2LCB1dikpLCB0ZXhlbC5hKSk7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5vdXRwdXRcXG4jZGVmaW5lIE9VVFBVVF9BTFBIQVxcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleCA9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCkpO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gdGV4LnJnYjtcXG4jaWZkZWYgT1VUUFVUX0FMUEhBXFxuIGdsX0ZyYWdDb2xvci5hID0gdGV4LmE7XFxuI2Vsc2VcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihnbF9GcmFnQ29sb3IpO1xcbiNpZmRlZiBQUkVNVUxUSVBMWV9BTFBIQVxcbiBnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hO1xcbiNlbmRpZlxcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuYnJpZ2h0XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIGZsb2F0IHRocmVzaG9sZCA6IDE7XFxudW5pZm9ybSBmbG9hdCBzY2FsZSA6IDEuMDtcXG51bmlmb3JtIHZlYzIgdGV4dHVyZVNpemU6IFs1MTIsIDUxMl07XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuY29uc3QgdmVjMyBsdW1XZWlnaHQgPSB2ZWMzKDAuMjEyNSwgMC43MTU0LCAwLjA3MjEpO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52ZWM0IG1lZGlhbih2ZWM0IGEsIHZlYzQgYiwgdmVjNCBjKVxcbntcXG4gcmV0dXJuIGEgKyBiICsgYyAtIG1pbihtaW4oYSwgYiksIGMpIC0gbWF4KG1heChhLCBiKSwgYyk7XFxufVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkKSk7XFxuI2lmZGVmIEFOVElfRkxJQ0tFUlxcbiB2ZWMzIGQgPSAxLjAgLyB0ZXh0dXJlU2l6ZS54eXggKiB2ZWMzKDEuMCwgMS4wLCAwLjApO1xcbiB2ZWM0IHMxID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC54eikpO1xcbiB2ZWM0IHMyID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eikpO1xcbiB2ZWM0IHMzID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC56eSkpO1xcbiB2ZWM0IHM0ID0gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56eSkpO1xcbiB0ZXhlbCA9IG1lZGlhbihtZWRpYW4odGV4ZWwsIHMxLCBzMiksIHMzLCBzNCk7XFxuI2VuZGlmXFxuIGZsb2F0IGx1bSA9IGRvdCh0ZXhlbC5yZ2IgLCBsdW1XZWlnaHQpO1xcbiB2ZWM0IGNvbG9yO1xcbiBpZiAobHVtID4gdGhyZXNob2xkICYmIHRleGVsLmEgPiAwLjApXFxuIHtcXG4gY29sb3IgPSB2ZWM0KHRleGVsLnJnYiAqIHNjYWxlLCB0ZXhlbC5hICogc2NhbGUpO1xcbiB9XFxuIGVsc2VcXG4ge1xcbiBjb2xvciA9IHZlYzQoMC4wKTtcXG4gfVxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoY29sb3IpO1xcbn1cXG5AZW5kXFxuXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuZG93bnNhbXBsZVxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMiwgNTEyXTtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxuZmxvYXQgYnJpZ2h0bmVzcyh2ZWMzIGMpXFxue1xcbiByZXR1cm4gbWF4KG1heChjLnIsIGMuZyksIGMuYik7XFxufVxcbkBpbXBvcnQgY2xheS51dGlsLmNsYW1wX3NhbXBsZVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IGQgPSB2ZWM0KC0xLjAsIC0xLjAsIDEuMCwgMS4wKSAvIHRleHR1cmVTaXplLnh5eHk7XFxuI2lmZGVmIEFOVElfRkxJQ0tFUlxcbiB2ZWMzIHMxID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh5KSkucmdiO1xcbiB2ZWMzIHMyID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp5KSkucmdiO1xcbiB2ZWMzIHMzID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnh3KSkucmdiO1xcbiB2ZWMzIHM0ID0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp3KSkucmdiO1xcbiBmbG9hdCBzMXcgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzMSkgKyAxLjApO1xcbiBmbG9hdCBzMncgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzMikgKyAxLjApO1xcbiBmbG9hdCBzM3cgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzMykgKyAxLjApO1xcbiBmbG9hdCBzNHcgPSAxLjAgLyAoYnJpZ2h0bmVzcyhzNCkgKyAxLjApO1xcbiBmbG9hdCBvbmVEaXZpZGVTdW0gPSAxLjAgLyAoczF3ICsgczJ3ICsgczN3ICsgczR3KTtcXG4gdmVjNCBjb2xvciA9IHZlYzQoXFxuIChzMSAqIHMxdyArIHMyICogczJ3ICsgczMgKiBzM3cgKyBzNCAqIHM0dykgKiBvbmVEaXZpZGVTdW0sXFxuIDEuMFxcbiApO1xcbiNlbHNlXFxuIHZlYzQgY29sb3IgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHkpKTtcXG4gY29sb3IgKz0gZGVjb2RlSERSKGNsYW1wU2FtcGxlKHRleHR1cmUsIHZfVGV4Y29vcmQgKyBkLnp5KSk7XFxuIGNvbG9yICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54dykpO1xcbiBjb2xvciArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuencpKTtcXG4gY29sb3IgKj0gMC4yNTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGNvbG9yKTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIlxcbkBleHBvcnQgY2xheS5jb21wb3NpdG9yLnVwc2FtcGxlXFxuI2RlZmluZSBISUdIX1FVQUxJVFlcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gdmVjMiB0ZXh0dXJlU2l6ZSA6IFs1MTIsIDUxMl07XFxudW5pZm9ybSBmbG9hdCBzYW1wbGVTY2FsZTogMC41O1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG5AaW1wb3J0IGNsYXkudXRpbC5jbGFtcF9zYW1wbGVcXG52b2lkIG1haW4oKVxcbntcXG4jaWZkZWYgSElHSF9RVUFMSVRZXFxuIHZlYzQgZCA9IHZlYzQoMS4wLCAxLjAsIC0xLjAsIDAuMCkgLyB0ZXh0dXJlU2l6ZS54eXh5ICogc2FtcGxlU2NhbGU7XFxuIHZlYzQgcztcXG4gcyA9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC54eSkpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC53eSkpICogMi4wO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkIC0gZC56eSkpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56dykpICogMi4wO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICkpICogNC4wO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54dykpICogMi4wO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC56eSkpO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC53eSkpICogMi4wO1xcbiBzICs9IGRlY29kZUhEUihjbGFtcFNhbXBsZSh0ZXh0dXJlLCB2X1RleGNvb3JkICsgZC54eSkpO1xcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIocyAvIDE2LjApO1xcbiNlbHNlXFxuIHZlYzQgZCA9IHZlYzQoLTEuMCwgLTEuMCwgKzEuMCwgKzEuMCkgLyB0ZXh0dXJlU2l6ZS54eXh5O1xcbiB2ZWM0IHM7XFxuIHMgPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHkpKTtcXG4gcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuenkpKTtcXG4gcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQueHcpKTtcXG4gcyArPSBkZWNvZGVIRFIoY2xhbXBTYW1wbGUodGV4dHVyZSwgdl9UZXhjb29yZCArIGQuencpKTtcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHMgLyA0LjApO1xcbiNlbmRpZlxcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmNvbXBvc2l0b3IuaGRyLmNvbXBvc2l0ZVxcbiNkZWZpbmUgVE9ORU1BUFBJTkdcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbiNpZmRlZiBCTE9PTV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgYmxvb207XFxuI2VuZGlmXFxuI2lmZGVmIExFTlNGTEFSRV9FTkFCTEVEXFxudW5pZm9ybSBzYW1wbGVyMkQgbGVuc2ZsYXJlO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGxlbnNkaXJ0O1xcbiNlbmRpZlxcbiNpZmRlZiBMVU1fRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGx1bTtcXG4jZW5kaWZcXG4jaWZkZWYgTFVUX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXIyRCBsdXQ7XFxuI2VuZGlmXFxuI2lmZGVmIENPTE9SX0NPUlJFQ1RJT05cXG51bmlmb3JtIGZsb2F0IGJyaWdodG5lc3MgOiAwLjA7XFxudW5pZm9ybSBmbG9hdCBjb250cmFzdCA6IDEuMDtcXG51bmlmb3JtIGZsb2F0IHNhdHVyYXRpb24gOiAxLjA7XFxuI2VuZGlmXFxuI2lmZGVmIFZJR05FVFRFXFxudW5pZm9ybSBmbG9hdCB2aWduZXR0ZURhcmtuZXNzOiAxLjA7XFxudW5pZm9ybSBmbG9hdCB2aWduZXR0ZU9mZnNldDogMS4wO1xcbiNlbmRpZlxcbnVuaWZvcm0gZmxvYXQgZXhwb3N1cmUgOiAxLjA7XFxudW5pZm9ybSBmbG9hdCBibG9vbUludGVuc2l0eSA6IDAuMjU7XFxudW5pZm9ybSBmbG9hdCBsZW5zZmxhcmVJbnRlbnNpdHkgOiAxO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbkBpbXBvcnQgY2xheS51dGlsLnNyZ2JcXG52ZWMzIEFDRVNUb25lTWFwcGluZyh2ZWMzIGNvbG9yKVxcbntcXG4gY29uc3QgZmxvYXQgQSA9IDIuNTE7XFxuIGNvbnN0IGZsb2F0IEIgPSAwLjAzO1xcbiBjb25zdCBmbG9hdCBDID0gMi40MztcXG4gY29uc3QgZmxvYXQgRCA9IDAuNTk7XFxuIGNvbnN0IGZsb2F0IEUgPSAwLjE0O1xcbiByZXR1cm4gKGNvbG9yICogKEEgKiBjb2xvciArIEIpKSAvIChjb2xvciAqIChDICogY29sb3IgKyBEKSArIEUpO1xcbn1cXG5mbG9hdCBleWVBZGFwdGlvbihmbG9hdCBmTHVtKVxcbntcXG4gcmV0dXJuIG1peCgwLjIsIGZMdW0sIDAuNSk7XFxufVxcbiNpZmRlZiBMVVRfRU5BQkxFRFxcbnZlYzMgbHV0VHJhbnNmb3JtKHZlYzMgY29sb3IpIHtcXG4gZmxvYXQgYmx1ZUNvbG9yID0gY29sb3IuYiAqIDYzLjA7XFxuIHZlYzIgcXVhZDE7XFxuIHF1YWQxLnkgPSBmbG9vcihmbG9vcihibHVlQ29sb3IpIC8gOC4wKTtcXG4gcXVhZDEueCA9IGZsb29yKGJsdWVDb2xvcikgLSAocXVhZDEueSAqIDguMCk7XFxuIHZlYzIgcXVhZDI7XFxuIHF1YWQyLnkgPSBmbG9vcihjZWlsKGJsdWVDb2xvcikgLyA4LjApO1xcbiBxdWFkMi54ID0gY2VpbChibHVlQ29sb3IpIC0gKHF1YWQyLnkgKiA4LjApO1xcbiB2ZWMyIHRleFBvczE7XFxuIHRleFBvczEueCA9IChxdWFkMS54ICogMC4xMjUpICsgMC41LzUxMi4wICsgKCgwLjEyNSAtIDEuMC81MTIuMCkgKiBjb2xvci5yKTtcXG4gdGV4UG9zMS55ID0gKHF1YWQxLnkgKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIGNvbG9yLmcpO1xcbiB2ZWMyIHRleFBvczI7XFxuIHRleFBvczIueCA9IChxdWFkMi54ICogMC4xMjUpICsgMC41LzUxMi4wICsgKCgwLjEyNSAtIDEuMC81MTIuMCkgKiBjb2xvci5yKTtcXG4gdGV4UG9zMi55ID0gKHF1YWQyLnkgKiAwLjEyNSkgKyAwLjUvNTEyLjAgKyAoKDAuMTI1IC0gMS4wLzUxMi4wKSAqIGNvbG9yLmcpO1xcbiB2ZWM0IG5ld0NvbG9yMSA9IHRleHR1cmUyRChsdXQsIHRleFBvczEpO1xcbiB2ZWM0IG5ld0NvbG9yMiA9IHRleHR1cmUyRChsdXQsIHRleFBvczIpO1xcbiB2ZWM0IG5ld0NvbG9yID0gbWl4KG5ld0NvbG9yMSwgbmV3Q29sb3IyLCBmcmFjdChibHVlQ29sb3IpKTtcXG4gcmV0dXJuIG5ld0NvbG9yLnJnYjtcXG59XFxuI2VuZGlmXFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWM0IHRleGVsID0gdmVjNCgwLjApO1xcbiB2ZWM0IG9yaWdpbmFsVGV4ZWwgPSB2ZWM0KDAuMCk7XFxuI2lmZGVmIFRFWFRVUkVfRU5BQkxFRFxcbiB0ZXhlbCA9IGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCkpO1xcbiBvcmlnaW5hbFRleGVsID0gdGV4ZWw7XFxuI2VuZGlmXFxuI2lmZGVmIEJMT09NX0VOQUJMRURcXG4gdmVjNCBibG9vbVRleGVsID0gZGVjb2RlSERSKHRleHR1cmUyRChibG9vbSwgdl9UZXhjb29yZCkpO1xcbiB0ZXhlbC5yZ2IgKz0gYmxvb21UZXhlbC5yZ2IgKiBibG9vbUludGVuc2l0eTtcXG4gdGV4ZWwuYSArPSBibG9vbVRleGVsLmEgKiBibG9vbUludGVuc2l0eTtcXG4jZW5kaWZcXG4jaWZkZWYgTEVOU0ZMQVJFX0VOQUJMRURcXG4gdGV4ZWwgKz0gZGVjb2RlSERSKHRleHR1cmUyRChsZW5zZmxhcmUsIHZfVGV4Y29vcmQpKSAqIHRleHR1cmUyRChsZW5zZGlydCwgdl9UZXhjb29yZCkgKiBsZW5zZmxhcmVJbnRlbnNpdHk7XFxuI2VuZGlmXFxuIHRleGVsLmEgPSBtaW4odGV4ZWwuYSwgMS4wKTtcXG4jaWZkZWYgTFVNX0VOQUJMRURcXG4gZmxvYXQgZkx1bSA9IHRleHR1cmUyRChsdW0sIHZlYzIoMC41LCAwLjUpKS5yO1xcbiBmbG9hdCBhZGFwdGVkTHVtRGVzdCA9IDMuMCAvIChtYXgoMC4xLCAxLjAgKyAxMC4wKmV5ZUFkYXB0aW9uKGZMdW0pKSk7XFxuIGZsb2F0IGV4cG9zdXJlQmlhcyA9IGFkYXB0ZWRMdW1EZXN0ICogZXhwb3N1cmU7XFxuI2Vsc2VcXG4gZmxvYXQgZXhwb3N1cmVCaWFzID0gZXhwb3N1cmU7XFxuI2VuZGlmXFxuI2lmZGVmIFRPTkVNQVBQSU5HXFxuIHRleGVsLnJnYiAqPSBleHBvc3VyZUJpYXM7XFxuIHRleGVsLnJnYiA9IEFDRVNUb25lTWFwcGluZyh0ZXhlbC5yZ2IpO1xcbiNlbmRpZlxcbiB0ZXhlbCA9IGxpbmVhclRvc1JHQih0ZXhlbCk7XFxuI2lmZGVmIExVVF9FTkFCTEVEXFxuIHRleGVsLnJnYiA9IGx1dFRyYW5zZm9ybShjbGFtcCh0ZXhlbC5yZ2IsdmVjMygwLjApLHZlYzMoMS4wKSkpO1xcbiNlbmRpZlxcbiNpZmRlZiBDT0xPUl9DT1JSRUNUSU9OXFxuIHRleGVsLnJnYiA9IGNsYW1wKHRleGVsLnJnYiArIHZlYzMoYnJpZ2h0bmVzcyksIDAuMCwgMS4wKTtcXG4gdGV4ZWwucmdiID0gY2xhbXAoKHRleGVsLnJnYiAtIHZlYzMoMC41KSkqY29udHJhc3QrdmVjMygwLjUpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IGx1bSA9IGRvdCh0ZXhlbC5yZ2IsIHZlYzMoMC4yMTI1LCAwLjcxNTQsIDAuMDcyMSkpO1xcbiB0ZXhlbC5yZ2IgPSBtaXgodmVjMyhsdW0pLCB0ZXhlbC5yZ2IsIHNhdHVyYXRpb24pO1xcbiNlbmRpZlxcbiNpZmRlZiBWSUdORVRURVxcbiB2ZWMyIHV2ID0gKHZfVGV4Y29vcmQgLSB2ZWMyKDAuNSkpICogdmVjMih2aWduZXR0ZU9mZnNldCk7XFxuIHRleGVsLnJnYiA9IG1peCh0ZXhlbC5yZ2IsIHZlYzMoMS4wIC0gdmlnbmV0dGVEYXJrbmVzcyksIGRvdCh1diwgdXYpKTtcXG4jZW5kaWZcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKHRleGVsKTtcXG4jaWZkZWYgREVCVUdcXG4gI2lmIERFQlVHID09IDFcXG4gZ2xfRnJhZ0NvbG9yID0gZW5jb2RlSERSKGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCkpKTtcXG4gI2VsaWYgREVCVUcgPT0gMlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIoZGVjb2RlSERSKHRleHR1cmUyRChibG9vbSwgdl9UZXhjb29yZCkpICogYmxvb21JbnRlbnNpdHkpO1xcbiAjZWxpZiBERUJVRyA9PSAzXFxuIGdsX0ZyYWdDb2xvciA9IGVuY29kZUhEUihkZWNvZGVIRFIodGV4dHVyZTJEKGxlbnNmbGFyZSwgdl9UZXhjb29yZCkgKiBsZW5zZmxhcmVJbnRlbnNpdHkpKTtcXG4gI2VuZGlmXFxuI2VuZGlmXFxuIGlmIChvcmlnaW5hbFRleGVsLmEgPD0gMC4wMSAmJiBnbF9GcmFnQ29sb3IuYSA+IDFlLTUpIHtcXG4gZ2xfRnJhZ0NvbG9yLmEgPSBkb3QoZ2xfRnJhZ0NvbG9yLnJnYiwgdmVjMygwLjIxMjUsIDAuNzE1NCwgMC4wNzIxKSk7XFxuIH1cXG4jaWZkZWYgUFJFTVVMVElQTFlfQUxQSEFcXG4gZ2xfRnJhZ0NvbG9yLnJnYiAqPSBnbF9GcmFnQ29sb3IuYTtcXG4jZW5kaWZcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmxlbnNmbGFyZVxcbiNkZWZpbmUgU0FNUExFX05VTUJFUiA4XFxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcXG51bmlmb3JtIHNhbXBsZXIyRCBsZW5zY29sb3I7XFxudW5pZm9ybSB2ZWMyIHRleHR1cmVTaXplIDogWzUxMiwgNTEyXTtcXG51bmlmb3JtIGZsb2F0IGRpc3BlcnNhbCA6IDAuMztcXG51bmlmb3JtIGZsb2F0IGhhbG9XaWR0aCA6IDAuNDtcXG51bmlmb3JtIGZsb2F0IGRpc3RvcnRpb24gOiAxLjA7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuQGltcG9ydCBjbGF5LnV0aWwucmdibVxcbnZlYzQgdGV4dHVyZURpc3RvcnRlZChcXG4gaW4gdmVjMiB0ZXhjb29yZCxcXG4gaW4gdmVjMiBkaXJlY3Rpb24sXFxuIGluIHZlYzMgZGlzdG9ydGlvblxcbikge1xcbiByZXR1cm4gdmVjNChcXG4gZGVjb2RlSERSKHRleHR1cmUyRCh0ZXh0dXJlLCB0ZXhjb29yZCArIGRpcmVjdGlvbiAqIGRpc3RvcnRpb24ucikpLnIsXFxuIGRlY29kZUhEUih0ZXh0dXJlMkQodGV4dHVyZSwgdGV4Y29vcmQgKyBkaXJlY3Rpb24gKiBkaXN0b3J0aW9uLmcpKS5nLFxcbiBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUsIHRleGNvb3JkICsgZGlyZWN0aW9uICogZGlzdG9ydGlvbi5iKSkuYixcXG4gMS4wXFxuICk7XFxufVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMyIHRleGNvb3JkID0gLXZfVGV4Y29vcmQgKyB2ZWMyKDEuMCk7IHZlYzIgdGV4dHVyZU9mZnNldCA9IDEuMCAvIHRleHR1cmVTaXplO1xcbiB2ZWMyIGdob3N0VmVjID0gKHZlYzIoMC41KSAtIHRleGNvb3JkKSAqIGRpc3BlcnNhbDtcXG4gdmVjMiBoYWxvVmVjID0gbm9ybWFsaXplKGdob3N0VmVjKSAqIGhhbG9XaWR0aDtcXG4gdmVjMyBkaXN0b3J0aW9uID0gdmVjMygtdGV4dHVyZU9mZnNldC54ICogZGlzdG9ydGlvbiwgMC4wLCB0ZXh0dXJlT2Zmc2V0LnggKiBkaXN0b3J0aW9uKTtcXG4gdmVjNCByZXN1bHQgPSB2ZWM0KDAuMCk7XFxuIGZvciAoaW50IGkgPSAwOyBpIDwgU0FNUExFX05VTUJFUjsgaSsrKVxcbiB7XFxuIHZlYzIgb2Zmc2V0ID0gZnJhY3QodGV4Y29vcmQgKyBnaG9zdFZlYyAqIGZsb2F0KGkpKTtcXG4gZmxvYXQgd2VpZ2h0ID0gbGVuZ3RoKHZlYzIoMC41KSAtIG9mZnNldCkgLyBsZW5ndGgodmVjMigwLjUpKTtcXG4gd2VpZ2h0ID0gcG93KDEuMCAtIHdlaWdodCwgMTAuMCk7XFxuIHJlc3VsdCArPSB0ZXh0dXJlRGlzdG9ydGVkKG9mZnNldCwgbm9ybWFsaXplKGdob3N0VmVjKSwgZGlzdG9ydGlvbikgKiB3ZWlnaHQ7XFxuIH1cXG4gcmVzdWx0ICo9IHRleHR1cmUyRChsZW5zY29sb3IsIHZlYzIobGVuZ3RoKHZlYzIoMC41KSAtIHRleGNvb3JkKSkgLyBsZW5ndGgodmVjMigwLjUpKSk7XFxuIGZsb2F0IHdlaWdodCA9IGxlbmd0aCh2ZWMyKDAuNSkgLSBmcmFjdCh0ZXhjb29yZCArIGhhbG9WZWMpKSAvIGxlbmd0aCh2ZWMyKDAuNSkpO1xcbiB3ZWlnaHQgPSBwb3coMS4wIC0gd2VpZ2h0LCAxMC4wKTtcXG4gdmVjMiBvZmZzZXQgPSBmcmFjdCh0ZXhjb29yZCArIGhhbG9WZWMpO1xcbiByZXN1bHQgKz0gdGV4dHVyZURpc3RvcnRlZChvZmZzZXQsIG5vcm1hbGl6ZShnaG9zdFZlYyksIGRpc3RvcnRpb24pICogd2VpZ2h0O1xcbiBnbF9GcmFnQ29sb3IgPSByZXN1bHQ7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuY29tcG9zaXRvci5ibGVuZFxcbiNkZWZpbmUgU0hBREVSX05BTUUgYmxlbmRcXG4jaWZkZWYgVEVYVFVSRTFfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmUxO1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0MSA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTJfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmUyO1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0MiA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTNfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmUzO1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0MyA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTRfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU0O1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0NCA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTVfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU1O1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0NSA6IDEuMDtcXG4jZW5kaWZcXG4jaWZkZWYgVEVYVFVSRTZfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU2O1xcbnVuaWZvcm0gZmxvYXQgd2VpZ2h0NiA6IDEuMDtcXG4jZW5kaWZcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5yZ2JtXFxudm9pZCBtYWluKClcXG57XFxuIHZlYzQgdGV4ID0gdmVjNCgwLjApO1xcbiNpZmRlZiBURVhUVVJFMV9FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUxLCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQxO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFMl9FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUyLCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQyO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFM19FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmUzLCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQzO1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNF9FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmU0LCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQ0O1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNV9FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmU1LCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQ1O1xcbiNlbmRpZlxcbiNpZmRlZiBURVhUVVJFNl9FTkFCTEVEXFxuIHRleCArPSBkZWNvZGVIRFIodGV4dHVyZTJEKHRleHR1cmU2LCB2X1RleGNvb3JkKSkgKiB3ZWlnaHQ2O1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IgPSBlbmNvZGVIRFIodGV4KTtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5jb21wb3NpdG9yLmZ4YWFcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydCA6IFZJRVdQT1JUO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbiNkZWZpbmUgRlhBQV9SRURVQ0VfTUlOICgxLjAvMTI4LjApXFxuI2RlZmluZSBGWEFBX1JFRFVDRV9NVUwgKDEuMC84LjApXFxuI2RlZmluZSBGWEFBX1NQQU5fTUFYIDguMFxcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMiByZXNvbHV0aW9uID0gMS4wIC8gdmlld3BvcnQuenc7XFxuIHZlYzMgcmdiTlcgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAtMS4wLCAtMS4wICkgKSAqIHJlc29sdXRpb24gKSApLnh5ejtcXG4gdmVjMyByZ2JORSA9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIDEuMCwgLTEuMCApICkgKiByZXNvbHV0aW9uICkgKS54eXo7XFxuIHZlYzMgcmdiU1cgPSBkZWNvZGVIRFIoIHRleHR1cmUyRCggdGV4dHVyZSwgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAtMS4wLCAxLjAgKSApICogcmVzb2x1dGlvbiApICkueHl6O1xcbiB2ZWMzIHJnYlNFID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMS4wLCAxLjAgKSApICogcmVzb2x1dGlvbiApICkueHl6O1xcbiB2ZWM0IHJnYmFNID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAqIHJlc29sdXRpb24gKSApO1xcbiB2ZWMzIHJnYk0gPSByZ2JhTS54eXo7XFxuIGZsb2F0IG9wYWNpdHkgPSByZ2JhTS53O1xcbiB2ZWMzIGx1bWEgPSB2ZWMzKCAwLjI5OSwgMC41ODcsIDAuMTE0ICk7XFxuIGZsb2F0IGx1bWFOVyA9IGRvdCggcmdiTlcsIGx1bWEgKTtcXG4gZmxvYXQgbHVtYU5FID0gZG90KCByZ2JORSwgbHVtYSApO1xcbiBmbG9hdCBsdW1hU1cgPSBkb3QoIHJnYlNXLCBsdW1hICk7XFxuIGZsb2F0IGx1bWFTRSA9IGRvdCggcmdiU0UsIGx1bWEgKTtcXG4gZmxvYXQgbHVtYU0gPSBkb3QoIHJnYk0sIGx1bWEgKTtcXG4gZmxvYXQgbHVtYU1pbiA9IG1pbiggbHVtYU0sIG1pbiggbWluKCBsdW1hTlcsIGx1bWFORSApLCBtaW4oIGx1bWFTVywgbHVtYVNFICkgKSApO1xcbiBmbG9hdCBsdW1hTWF4ID0gbWF4KCBsdW1hTSwgbWF4KCBtYXgoIGx1bWFOVywgbHVtYU5FKSAsIG1heCggbHVtYVNXLCBsdW1hU0UgKSApICk7XFxuIHZlYzIgZGlyO1xcbiBkaXIueCA9IC0oKGx1bWFOVyArIGx1bWFORSkgLSAobHVtYVNXICsgbHVtYVNFKSk7XFxuIGRpci55ID0gKChsdW1hTlcgKyBsdW1hU1cpIC0gKGx1bWFORSArIGx1bWFTRSkpO1xcbiBmbG9hdCBkaXJSZWR1Y2UgPSBtYXgoICggbHVtYU5XICsgbHVtYU5FICsgbHVtYVNXICsgbHVtYVNFICkgKiAoIDAuMjUgKiBGWEFBX1JFRFVDRV9NVUwgKSwgRlhBQV9SRURVQ0VfTUlOICk7XFxuIGZsb2F0IHJjcERpck1pbiA9IDEuMCAvICggbWluKCBhYnMoIGRpci54ICksIGFicyggZGlyLnkgKSApICsgZGlyUmVkdWNlICk7XFxuIGRpciA9IG1pbiggdmVjMiggRlhBQV9TUEFOX01BWCwgRlhBQV9TUEFOX01BWCksXFxuIG1heCggdmVjMigtRlhBQV9TUEFOX01BWCwgLUZYQUFfU1BBTl9NQVgpLFxcbiBkaXIgKiByY3BEaXJNaW4pKSAqIHJlc29sdXRpb247XFxuIHZlYzMgcmdiQSA9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCBnbF9GcmFnQ29vcmQueHkgKiByZXNvbHV0aW9uICsgZGlyICogKCAxLjAgLyAzLjAgLSAwLjUgKSApICkueHl6O1xcbiByZ2JBICs9IGRlY29kZUhEUiggdGV4dHVyZTJEKCB0ZXh0dXJlLCBnbF9GcmFnQ29vcmQueHkgKiByZXNvbHV0aW9uICsgZGlyICogKCAyLjAgLyAzLjAgLSAwLjUgKSApICkueHl6O1xcbiByZ2JBICo9IDAuNTtcXG4gdmVjMyByZ2JCID0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAqIHJlc29sdXRpb24gKyBkaXIgKiAtMC41ICkgKS54eXo7XFxuIHJnYkIgKz0gZGVjb2RlSERSKCB0ZXh0dXJlMkQoIHRleHR1cmUsIGdsX0ZyYWdDb29yZC54eSAqIHJlc29sdXRpb24gKyBkaXIgKiAwLjUgKSApLnh5ejtcXG4gcmdiQiAqPSAwLjI1O1xcbiByZ2JCICs9IHJnYkEgKiAwLjU7XFxuIGZsb2F0IGx1bWFCID0gZG90KCByZ2JCLCBsdW1hICk7XFxuIGlmICggKCBsdW1hQiA8IGx1bWFNaW4gKSB8fCAoIGx1bWFCID4gbHVtYU1heCApIClcXG4ge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KCByZ2JBLCBvcGFjaXR5ICk7XFxuIH1cXG4gZWxzZSB7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQoIHJnYkIsIG9wYWNpdHkgKTtcXG4gfVxcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBjb2xvcmFkanVzdEVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9jb2xvcmFkanVzdC5nbHNsLmpzJztcclxuaW1wb3J0IGJsdXJFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvYmx1ci5nbHNsLmpzJztcclxuaW1wb3J0IGx1bUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9sdW0uZ2xzbC5qcyc7XHJcbmltcG9ydCBsdXRFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvbHV0Lmdsc2wuanMnO1xyXG5pbXBvcnQgdmlnZW50dGVFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvdmlnbmV0dGUuZ2xzbC5qcyc7XHJcbmltcG9ydCBvdXRwdXRFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3Ivb3V0cHV0Lmdsc2wuanMnO1xyXG5pbXBvcnQgYnJpZ2h0RXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2JyaWdodC5nbHNsLmpzJztcclxuaW1wb3J0IGRvd25zYW1wbGVFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvZG93bnNhbXBsZS5nbHNsLmpzJztcclxuaW1wb3J0IHVwc2FtcGxlRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL3Vwc2FtcGxlLmdsc2wuanMnO1xyXG5pbXBvcnQgaGRyRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2hkci5nbHNsLmpzJztcclxuaW1wb3J0IGxlbnNmbGFyZUVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9sZW5zZmxhcmUuZ2xzbC5qcyc7XHJcbmltcG9ydCBibGVuZEVzc2wgZnJvbSAnLi9zb3VyY2UvY29tcG9zaXRvci9ibGVuZC5nbHNsLmpzJztcclxuaW1wb3J0IGZ4YWFFc3NsIGZyb20gJy4vc291cmNlL2NvbXBvc2l0b3IvZnhhYS5nbHNsLmpzJztcclxuLy8gaW1wb3J0IGZ4YWEzRXNzbCBmcm9tICcuL3NvdXJjZS9jb21wb3NpdG9yL2Z4YWEzLmdsc2wuanMnO1xyXG5cclxuLy8gVE9ETyBNdXN0IGV4cG9ydCBhIG1vZHVsZSBhbmQgYmUgdXNlZCBpbiB0aGUgb3RoZXIgbW9kdWxlcy4gT3IgaXQgd2lsbCBiZSB0cmVlIHNoYWtlZFxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihTaGFkZXIpIHtcclxuICAgIC8vIFNvbWUgYnVpbGQgaW4gc2hhZGVyc1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShjb2xvcmFkanVzdEVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShibHVyRXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGx1bUVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShsdXRFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10odmlnZW50dGVFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10ob3V0cHV0RXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGJyaWdodEVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShkb3duc2FtcGxlRXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKHVwc2FtcGxlRXNzbCk7XHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGhkckVzc2wpO1xyXG4gICAgU2hhZGVyWydpbXBvcnQnXShsZW5zZmxhcmVFc3NsKTtcclxuICAgIFNoYWRlclsnaW1wb3J0J10oYmxlbmRFc3NsKTtcclxuXHJcbiAgICBTaGFkZXJbJ2ltcG9ydCddKGZ4YWFFc3NsKTtcclxuXHJcbn0iLCJpbXBvcnQgdXRpbCBmcm9tICcuL2NvcmUvdXRpbCc7XHJcbmltcG9ydCBDb21wb3NpdG9yIGZyb20gJy4vY29tcG9zaXRvci9Db21wb3NpdG9yJztcclxuaW1wb3J0IENvbXBvU2NlbmVOb2RlIGZyb20gJy4vY29tcG9zaXRvci9TY2VuZU5vZGUnO1xyXG5pbXBvcnQgQ29tcG9UZXh0dXJlTm9kZSBmcm9tICcuL2NvbXBvc2l0b3IvVGV4dHVyZU5vZGUnO1xyXG5pbXBvcnQgQ29tcG9GaWx0ZXJOb2RlIGZyb20gJy4vY29tcG9zaXRvci9GaWx0ZXJOb2RlJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuL1NoYWRlcic7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vVGV4dHVyZSc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi9UZXh0dXJlMkQnO1xyXG5pbXBvcnQgVGV4dHVyZUN1YmUgZnJvbSAnLi9UZXh0dXJlQ3ViZSc7XHJcblxyXG5pbXBvcnQgcmVnaXN0ZXJCdWlsdGluQ29tcG9zaXRvciBmcm9tICcuL3NoYWRlci9yZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yJztcclxuXHJcbnJlZ2lzdGVyQnVpbHRpbkNvbXBvc2l0b3IoU2hhZGVyKTtcclxuXHJcbnZhciBzaGFkZXJTb3VyY2VSZWcgPSAvXiNzb3VyY2VcXCgoLio/KVxcKS87XHJcblxyXG4vKipcclxuICogQG5hbWUgY2xheS5jcmVhdGVDb21wb3NpdG9yXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge09iamVjdH0ganNvblxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXHJcbiAqIEByZXR1cm4ge2NsYXkuY29tcG9zaXRvci5Db21wb3NpdG9yfVxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlQ29tcG9zaXRvcihqc29uLCBvcHRzKSB7XHJcbiAgICB2YXIgY29tcG9zaXRvciA9IG5ldyBDb21wb3NpdG9yKCk7XHJcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuXHJcbiAgICB2YXIgbGliID0ge1xyXG4gICAgICAgIHRleHR1cmVzOiB7fSxcclxuICAgICAgICBwYXJhbWV0ZXJzOiB7fVxyXG4gICAgfTtcclxuICAgIHZhciBhZnRlckxvYWQgPSBmdW5jdGlvbihzaGFkZXJMaWIsIHRleHR1cmVMaWIpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpzb24ubm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG5vZGVJbmZvID0ganNvbi5ub2Rlc1tpXTtcclxuICAgICAgICAgICAgdmFyIG5vZGUgPSBjcmVhdGVOb2RlKG5vZGVJbmZvLCBsaWIsIG9wdHMpO1xyXG4gICAgICAgICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgICAgICAgICAgY29tcG9zaXRvci5hZGROb2RlKG5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBmb3IgKHZhciBuYW1lIGluIGpzb24ucGFyYW1ldGVycykge1xyXG4gICAgICAgIHZhciBwYXJhbUluZm8gPSBqc29uLnBhcmFtZXRlcnNbbmFtZV07XHJcbiAgICAgICAgbGliLnBhcmFtZXRlcnNbbmFtZV0gPSBjb252ZXJ0UGFyYW1ldGVyKHBhcmFtSW5mbyk7XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPIGxvYWQgdGV4dHVyZSBhc3luY2hyb25vdXNcclxuICAgIGxvYWRUZXh0dXJlcyhqc29uLCBsaWIsIG9wdHMsIGZ1bmN0aW9uKHRleHR1cmVMaWIpIHtcclxuICAgICAgICBsaWIudGV4dHVyZXMgPSB0ZXh0dXJlTGliO1xyXG4gICAgICAgIGFmdGVyTG9hZCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGNvbXBvc2l0b3I7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZU5vZGUobm9kZUluZm8sIGxpYiwgb3B0cykge1xyXG4gICAgdmFyIHR5cGUgPSBub2RlSW5mby50eXBlIHx8ICdmaWx0ZXInO1xyXG4gICAgdmFyIHNoYWRlclNvdXJjZTtcclxuICAgIHZhciBpbnB1dHM7XHJcbiAgICB2YXIgb3V0cHV0cztcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gJ2ZpbHRlcicpIHtcclxuICAgICAgICB2YXIgc2hhZGVyRXhwID0gbm9kZUluZm8uc2hhZGVyLnRyaW0oKTtcclxuICAgICAgICB2YXIgcmVzID0gc2hhZGVyU291cmNlUmVnLmV4ZWMoc2hhZGVyRXhwKTtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIHNoYWRlclNvdXJjZSA9IFNoYWRlci5zb3VyY2UocmVzWzFdLnRyaW0oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNoYWRlckV4cC5jaGFyQXQoMCkgPT09ICcjJykge1xyXG4gICAgICAgICAgICBzaGFkZXJTb3VyY2UgPSBsaWIuc2hhZGVyc1tzaGFkZXJFeHAuc3Vic3RyKDEpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzaGFkZXJTb3VyY2UpIHtcclxuICAgICAgICAgICAgc2hhZGVyU291cmNlID0gc2hhZGVyRXhwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXNoYWRlclNvdXJjZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChub2RlSW5mby5pbnB1dHMpIHtcclxuICAgICAgICBpbnB1dHMgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBuYW1lIGluIG5vZGVJbmZvLmlucHV0cykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG5vZGVJbmZvLmlucHV0c1tuYW1lXSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0c1tuYW1lXSA9IG5vZGVJbmZvLmlucHV0c1tuYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlucHV0c1tuYW1lXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlSW5mby5pbnB1dHNbbmFtZV0ubm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBwaW46IG5vZGVJbmZvLmlucHV0c1tuYW1lXS5waW5cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAobm9kZUluZm8ub3V0cHV0cykge1xyXG4gICAgICAgIG91dHB1dHMgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBuYW1lIGluIG5vZGVJbmZvLm91dHB1dHMpIHtcclxuICAgICAgICAgICAgdmFyIG91dHB1dEluZm8gPSBub2RlSW5mby5vdXRwdXRzW25hbWVdO1xyXG4gICAgICAgICAgICBvdXRwdXRzW25hbWVdID0ge307XHJcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLmF0dGFjaG1lbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0c1tuYW1lXS5hdHRhY2htZW50ID0gb3V0cHV0SW5mby5hdHRhY2htZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLmtlZXBMYXN0RnJhbWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0c1tuYW1lXS5rZWVwTGFzdEZyYW1lID0gb3V0cHV0SW5mby5rZWVwTGFzdEZyYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLm91dHB1dExhc3RGcmFtZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRzW25hbWVdLm91dHB1dExhc3RGcmFtZSA9IG91dHB1dEluZm8ub3V0cHV0TGFzdEZyYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvdXRwdXRJbmZvLnBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dHNbbmFtZV0ucGFyYW1ldGVycyA9IGNvbnZlcnRQYXJhbWV0ZXIob3V0cHV0SW5mby5wYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBub2RlO1xyXG4gICAgaWYgKHR5cGUgPT09ICdzY2VuZScpIHtcclxuICAgICAgICBub2RlID0gbmV3IENvbXBvU2NlbmVOb2RlKHtcclxuICAgICAgICAgICAgbmFtZTogbm9kZUluZm8ubmFtZSxcclxuICAgICAgICAgICAgc2NlbmU6IG9wdHMuc2NlbmUsXHJcbiAgICAgICAgICAgIGNhbWVyYTogb3B0cy5jYW1lcmEsXHJcbiAgICAgICAgICAgIG91dHB1dHM6IG91dHB1dHNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGUgPT09ICd0ZXh0dXJlJykge1xyXG4gICAgICAgIG5vZGUgPSBuZXcgQ29tcG9UZXh0dXJlTm9kZSh7XHJcbiAgICAgICAgICAgIG5hbWU6IG5vZGVJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgIG91dHB1dHM6IG91dHB1dHNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIERlZmF1bHQgaXMgZmlsdGVyXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBub2RlID0gbmV3IENvbXBvRmlsdGVyTm9kZSh7XHJcbiAgICAgICAgICAgIG5hbWU6IG5vZGVJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgIHNoYWRlcjogc2hhZGVyU291cmNlLFxyXG4gICAgICAgICAgICBpbnB1dHM6IGlucHV0cyxcclxuICAgICAgICAgICAgb3V0cHV0czogb3V0cHV0c1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKG5vZGUpIHtcclxuICAgICAgICBpZiAobm9kZUluZm8ucGFyYW1ldGVycykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIG5vZGVJbmZvLnBhcmFtZXRlcnMpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBub2RlSW5mby5wYXJhbWV0ZXJzW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsLmNoYXJBdCgwKSA9PT0gJyMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGxpYi50ZXh0dXJlc1t2YWwuc3Vic3RyKDEpXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUub24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVmb3JlcmVuZGVyJywgY3JlYXRlU2l6ZVNldEhhbmRsZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgdHJ5Q29udmVydEV4cHIodmFsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLm9uKCdiZWZvcmVyZW5kZXInLCB2YWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbm9kZS5zZXRQYXJhbWV0ZXIobmFtZSwgdmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9kZUluZm8uZGVmaW5lcyAmJiBub2RlLnBhc3MpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBub2RlSW5mby5kZWZpbmVzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsID0gbm9kZUluZm8uZGVmaW5lc1tuYW1lXTtcclxuICAgICAgICAgICAgICAgIG5vZGUucGFzcy5tYXRlcmlhbC5kZWZpbmUoJ2ZyYWdtZW50JywgbmFtZSwgdmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBub2RlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBkZWZhdWx0V2lkdGhGdW5jKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHJldHVybiB3aWR0aDtcclxufVxyXG5mdW5jdGlvbiBkZWZhdWx0SGVpZ2h0RnVuYyh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb252ZXJ0UGFyYW1ldGVyKHBhcmFtSW5mbykge1xyXG4gICAgdmFyIHBhcmFtID0ge307XHJcbiAgICBpZiAoIXBhcmFtSW5mbykge1xyXG4gICAgICAgIHJldHVybiBwYXJhbTtcclxuICAgIH1cclxuICAgIFsndHlwZScsICdtaW5GaWx0ZXInLCAnbWFnRmlsdGVyJywgJ3dyYXBTJywgJ3dyYXBUJywgJ2ZsaXBZJywgJ3VzZU1pcG1hcCddXHJcbiAgICAgICAgLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICAgICAgICB2YXIgdmFsID0gcGFyYW1JbmZvW25hbWVdO1xyXG4gICAgICAgICAgICBpZiAodmFsICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIGVudW1cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IFRleHR1cmVbdmFsXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHBhcmFtW25hbWVdID0gdmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgdmFyIHNpemVTY2FsZSA9IHBhcmFtSW5mby5zY2FsZSB8fCAxO1xyXG4gICAgWyd3aWR0aCcsICdoZWlnaHQnXVxyXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKHBhcmFtSW5mb1tuYW1lXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFsID0gcGFyYW1JbmZvW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbVtuYW1lXSA9IGNyZWF0ZVNpemVQYXJzZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHRyeUNvbnZlcnRFeHByKHZhbCksIHNpemVTY2FsZVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbVtuYW1lXSA9IHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgaWYgKCFwYXJhbS53aWR0aCkge1xyXG4gICAgICAgIHBhcmFtLndpZHRoID0gZGVmYXVsdFdpZHRoRnVuYztcclxuICAgIH1cclxuICAgIGlmICghcGFyYW0uaGVpZ2h0KSB7XHJcbiAgICAgICAgcGFyYW0uaGVpZ2h0ID0gZGVmYXVsdEhlaWdodEZ1bmM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcmFtSW5mby51c2VNaXBtYXAgIT0gbnVsbCkge1xyXG4gICAgICAgIHBhcmFtLnVzZU1pcG1hcCA9IHBhcmFtSW5mby51c2VNaXBtYXA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFyYW07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxvYWRUZXh0dXJlcyhqc29uLCBsaWIsIG9wdHMsIGNhbGxiYWNrKSB7XHJcbiAgICBpZiAoIWpzb24udGV4dHVyZXMpIHtcclxuICAgICAgICBjYWxsYmFjayh7fSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIHRleHR1cmVzID0ge307XHJcbiAgICB2YXIgbG9hZGluZyA9IDA7XHJcblxyXG4gICAgdmFyIGNiZCA9IGZhbHNlO1xyXG4gICAgdmFyIHRleHR1cmVSb290UGF0aCA9IG9wdHMudGV4dHVyZVJvb3RQYXRoO1xyXG4gICAgdXRpbC5lYWNoKGpzb24udGV4dHVyZXMsIGZ1bmN0aW9uKHRleHR1cmVJbmZvLCBuYW1lKSB7XHJcbiAgICAgICAgdmFyIHRleHR1cmU7XHJcbiAgICAgICAgdmFyIHBhdGggPSB0ZXh0dXJlSW5mby5wYXRoO1xyXG4gICAgICAgIHZhciBwYXJhbWV0ZXJzID0gY29udmVydFBhcmFtZXRlcih0ZXh0dXJlSW5mby5wYXJhbWV0ZXJzKTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRoKSAmJiBwYXRoLmxlbmd0aCA9PT0gNikge1xyXG4gICAgICAgICAgICBpZiAodGV4dHVyZVJvb3RQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5tYXAoZnVuY3Rpb24oaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1dGlsLnJlbGF0aXZlMmFic29sdXRlKGl0ZW0sIHRleHR1cmVSb290UGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0ZXh0dXJlID0gbmV3IFRleHR1cmVDdWJlKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAodGV4dHVyZVJvb3RQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICBwYXRoID0gdXRpbC5yZWxhdGl2ZTJhYnNvbHV0ZShwYXRoLCB0ZXh0dXJlUm9vdFBhdGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGV4dHVyZS5sb2FkKHBhdGgpO1xyXG4gICAgICAgIGxvYWRpbmcrKztcclxuICAgICAgICB0ZXh0dXJlLm9uY2UoJ3N1Y2Nlc3MnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdGV4dHVyZXNbbmFtZV0gPSB0ZXh0dXJlO1xyXG4gICAgICAgICAgICBsb2FkaW5nLS07XHJcbiAgICAgICAgICAgIGlmIChsb2FkaW5nID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh0ZXh0dXJlcyk7XHJcbiAgICAgICAgICAgICAgICBjYmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAobG9hZGluZyA9PT0gMCAmJiAhY2JkKSB7XHJcbiAgICAgICAgY2FsbGJhY2sodGV4dHVyZXMpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVTaXplU2V0SGFuZGxlcihuYW1lLCBleHByRnVuYykge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIC8vIFBFTkRJTkcgdmlld3BvcnQgc2l6ZSBvciB3aW5kb3cgc2l6ZVxyXG4gICAgICAgIHZhciBkcHIgPSByZW5kZXJlci5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XHJcbiAgICAgICAgLy8gUEVORElORyBJZiBtdWx0aXBseSBkcHIgP1xyXG4gICAgICAgIHZhciB3aWR0aCA9IHJlbmRlcmVyLmdldFdpZHRoKCk7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IHJlbmRlcmVyLmdldEhlaWdodCgpO1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBleHByRnVuYyh3aWR0aCwgaGVpZ2h0LCBkcHIpO1xyXG4gICAgICAgIHRoaXMuc2V0UGFyYW1ldGVyKG5hbWUsIHJlc3VsdCk7XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVTaXplUGFyc2VyKG5hbWUsIGV4cHJGdW5jLCBzY2FsZSkge1xyXG4gICAgc2NhbGUgPSBzY2FsZSB8fCAxO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHZhciBkcHIgPSByZW5kZXJlci5nZXREZXZpY2VQaXhlbFJhdGlvKCk7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gcmVuZGVyZXIuZ2V0V2lkdGgoKSAqIHNjYWxlO1xyXG4gICAgICAgIHZhciBoZWlnaHQgPSByZW5kZXJlci5nZXRIZWlnaHQoKSAqIHNjYWxlO1xyXG4gICAgICAgIHJldHVybiBleHByRnVuYyh3aWR0aCwgaGVpZ2h0LCBkcHIpO1xyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gdHJ5Q29udmVydEV4cHIoc3RyaW5nKSB7XHJcbiAgICAvLyBQRU5ESU5HXHJcbiAgICB2YXIgZXhwclJlcyA9IC9eZXhwclxcKCguKilcXCkkLy5leGVjKHN0cmluZyk7XHJcbiAgICBpZiAoZXhwclJlcykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBmdW5jID0gbmV3IEZ1bmN0aW9uKCd3aWR0aCcsICdoZWlnaHQnLCAnZHByJywgJ3JldHVybiAnICsgZXhwclJlc1sxXSk7XHJcbiAgICAgICAgICAgIC8vIFRyeSBydW4gdFxyXG4gICAgICAgICAgICBmdW5jKDEsIDEpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGZ1bmM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBleHByZXNzaW9uLicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ29tcG9zaXRvcjtcclxuIiwiLy8gREVQUkVDQVRFRFxyXG5pbXBvcnQgY3JlYXRlQ29tcG9zaXRvciBmcm9tICcuLi9jcmVhdGVDb21wb3NpdG9yJztcclxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ29tcG9zaXRvcjsiLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5nYnVmZmVyLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXdQcm9qZWN0aW9uIDogV09STERWSUVXUFJPSkVDVElPTjtcXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiA6IFBPU0lUSU9OO1xcbiNpZiBkZWZpbmVkKFNFQ09ORF9QQVNTKSB8fCBkZWZpbmVkKEZJUlNUX1BBU1MpXFxuYXR0cmlidXRlIHZlYzIgdGV4Y29vcmQgOiBURVhDT09SRF8wO1xcbnVuaWZvcm0gdmVjMiB1dlJlcGVhdDtcXG51bmlmb3JtIHZlYzIgdXZPZmZzZXQ7XFxudmFyeWluZyB2ZWMyIHZfVGV4Y29vcmQ7XFxuI2VuZGlmXFxuI2lmZGVmIEZJUlNUX1BBU1NcXG51bmlmb3JtIG1hdDQgd29ybGRJbnZlcnNlVHJhbnNwb3NlIDogV09STERJTlZFUlNFVFJBTlNQT1NFO1xcbnVuaWZvcm0gbWF0NCB3b3JsZCA6IFdPUkxEO1xcbnZhcnlpbmcgdmVjMyB2X05vcm1hbDtcXG5hdHRyaWJ1dGUgdmVjMyBub3JtYWwgOiBOT1JNQUw7XFxuYXR0cmlidXRlIHZlYzQgdGFuZ2VudCA6IFRBTkdFTlQ7XFxudmFyeWluZyB2ZWMzIHZfVGFuZ2VudDtcXG52YXJ5aW5nIHZlYzMgdl9CaXRhbmdlbnQ7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxuI2lmZGVmIFRISVJEX1BBU1NcXG51bmlmb3JtIG1hdDQgcHJldldvcmxkVmlld1Byb2plY3Rpb247XFxudmFyeWluZyB2ZWM0IHZfVmlld1Bvc2l0aW9uO1xcbnZhcnlpbmcgdmVjNCB2X1ByZXZWaWV3UG9zaXRpb247XFxuI2lmZGVmIFNLSU5OSU5HXFxuI2lmZGVmIFVTRV9TS0lOX01BVFJJQ0VTX1RFWFRVUkVcXG51bmlmb3JtIHNhbXBsZXIyRCBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZTtcXG5tYXQ0IGdldFByZXZTa2luTWF0cml4KGZsb2F0IGlkeCkge1xcbiByZXR1cm4gZ2V0U2tpbk1hdHJpeChwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZSwgaWR4KTtcXG59XFxuI2Vsc2VcXG51bmlmb3JtIG1hdDQgcHJldlNraW5NYXRyaXhbSk9JTlRfQ09VTlRdO1xcbm1hdDQgZ2V0UHJldlNraW5NYXRyaXgoZmxvYXQgaWR4KSB7XFxuIHJldHVybiBwcmV2U2tpbk1hdHJpeFtpbnQoaWR4KV07XFxufVxcbiNlbmRpZlxcbiNlbmRpZlxcbiNlbmRpZlxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMzIHNraW5uZWRQb3NpdGlvbiA9IHBvc2l0aW9uO1xcbiB2ZWMzIHByZXZTa2lubmVkUG9zaXRpb24gPSBwb3NpdGlvbjtcXG4jaWZkZWYgRklSU1RfUEFTU1xcbiB2ZWMzIHNraW5uZWROb3JtYWwgPSBub3JtYWw7XFxuIHZlYzMgc2tpbm5lZFRhbmdlbnQgPSB0YW5nZW50Lnh5ejtcXG4gYm9vbCBoYXNUYW5nZW50ID0gZG90KHRhbmdlbnQsIHRhbmdlbnQpID4gMC4wO1xcbiNlbmRpZlxcbiNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gI2lmZGVmIEZJUlNUX1BBU1NcXG4gc2tpbm5lZE5vcm1hbCA9IChza2luTWF0cml4V1MgKiB2ZWM0KG5vcm1hbCwgMC4wKSkueHl6O1xcbiBpZiAoaGFzVGFuZ2VudCkge1xcbiBza2lubmVkVGFuZ2VudCA9IChza2luTWF0cml4V1MgKiB2ZWM0KHRhbmdlbnQueHl6LCAwLjApKS54eXo7XFxuIH1cXG4gI2VuZGlmXFxuICNpZmRlZiBUSElSRF9QQVNTXFxuIHtcXG4gbWF0NCBwcmV2U2tpbk1hdHJpeFdTID0gZ2V0UHJldlNraW5NYXRyaXgoam9pbnQueCkgKiB3ZWlnaHQueDtcXG4gaWYgKHdlaWdodC55ID4gMWUtNCkgeyBwcmV2U2tpbk1hdHJpeFdTICs9IGdldFByZXZTa2luTWF0cml4KGpvaW50LnkpICogd2VpZ2h0Lnk7IH1cXG4gaWYgKHdlaWdodC56ID4gMWUtNCkgeyBwcmV2U2tpbk1hdHJpeFdTICs9IGdldFByZXZTa2luTWF0cml4KGpvaW50LnopICogd2VpZ2h0Lno7IH1cXG4gZmxvYXQgd2VpZ2h0VyA9IDEuMC13ZWlnaHQueC13ZWlnaHQueS13ZWlnaHQuejtcXG4gaWYgKHdlaWdodFcgPiAxZS00KSB7IHByZXZTa2luTWF0cml4V1MgKz0gZ2V0UHJldlNraW5NYXRyaXgoam9pbnQudykgKiB3ZWlnaHRXOyB9XFxuIHByZXZTa2lubmVkUG9zaXRpb24gPSAocHJldlNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gfVxcbiAjZW5kaWZcXG4jZW5kaWZcXG4jaWYgZGVmaW5lZChTRUNPTkRfUEFTUykgfHwgZGVmaW5lZChGSVJTVF9QQVNTKVxcbiB2X1RleGNvb3JkID0gdGV4Y29vcmQgKiB1dlJlcGVhdCArIHV2T2Zmc2V0O1xcbiNlbmRpZlxcbiNpZmRlZiBGSVJTVF9QQVNTXFxuIHZfTm9ybWFsID0gbm9ybWFsaXplKCh3b3JsZEludmVyc2VUcmFuc3Bvc2UgKiB2ZWM0KHNraW5uZWROb3JtYWwsIDAuMCkpLnh5eik7XFxuIGlmIChoYXNUYW5nZW50KSB7XFxuIHZfVGFuZ2VudCA9IG5vcm1hbGl6ZSgod29ybGRJbnZlcnNlVHJhbnNwb3NlICogdmVjNChza2lubmVkVGFuZ2VudCwgMC4wKSkueHl6KTtcXG4gdl9CaXRhbmdlbnQgPSBub3JtYWxpemUoY3Jvc3Modl9Ob3JtYWwsIHZfVGFuZ2VudCkgKiB0YW5nZW50LncpO1xcbiB9XFxuIHZfV29ybGRQb3NpdGlvbiA9ICh3b3JsZCAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApKS54eXo7XFxuI2VuZGlmXFxuI2lmZGVmIFRISVJEX1BBU1NcXG4gdl9WaWV3UG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChza2lubmVkUG9zaXRpb24sIDEuMCk7XFxuIHZfUHJldlZpZXdQb3NpdGlvbiA9IHByZXZXb3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChwcmV2U2tpbm5lZFBvc2l0aW9uLCAxLjApO1xcbiNlbmRpZlxcbiBnbF9Qb3NpdGlvbiA9IHdvcmxkVmlld1Byb2plY3Rpb24gKiB2ZWM0KHNraW5uZWRQb3NpdGlvbiwgMS4wKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5kZWZlcnJlZC5nYnVmZmVyMS5mcmFnbWVudFxcbnVuaWZvcm0gbWF0NCB2aWV3SW52ZXJzZSA6IFZJRVdJTlZFUlNFO1xcbnVuaWZvcm0gZmxvYXQgZ2xvc3NpbmVzcztcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52YXJ5aW5nIHZlYzMgdl9Ob3JtYWw7XFxudmFyeWluZyB2ZWMzIHZfV29ybGRQb3NpdGlvbjtcXG51bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgZGlmZnVzZU1hcDtcXG52YXJ5aW5nIHZlYzMgdl9UYW5nZW50O1xcbnZhcnlpbmcgdmVjMyB2X0JpdGFuZ2VudDtcXG51bmlmb3JtIHNhbXBsZXIyRCByb3VnaEdsb3NzTWFwO1xcbnVuaWZvcm0gYm9vbCB1c2VSb3VnaEdsb3NzTWFwO1xcbnVuaWZvcm0gYm9vbCB1c2VSb3VnaG5lc3M7XFxudW5pZm9ybSBib29sIGRvdWJsZVNpZGVkO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGFDdXRvZmY6IDAuMDtcXG51bmlmb3JtIGZsb2F0IGFscGhhOiAxLjA7XFxudW5pZm9ybSBpbnQgcm91Z2hHbG9zc0NoYW5uZWw6IDA7XFxuZmxvYXQgaW5kZXhpbmdUZXhlbChpbiB2ZWM0IHRleGVsLCBpbiBpbnQgaWR4KSB7XFxuIGlmIChpZHggPT0gMykgcmV0dXJuIHRleGVsLmE7XFxuIGVsc2UgaWYgKGlkeCA9PSAxKSByZXR1cm4gdGV4ZWwuZztcXG4gZWxzZSBpZiAoaWR4ID09IDIpIHJldHVybiB0ZXhlbC5iO1xcbiBlbHNlIHJldHVybiB0ZXhlbC5yO1xcbn1cXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMyBOID0gdl9Ob3JtYWw7XFxuIGlmIChkb3VibGVTaWRlZCkge1xcbiB2ZWMzIGV5ZVBvcyA9IHZpZXdJbnZlcnNlWzNdLnh5ejtcXG4gdmVjMyBWID0gZXllUG9zIC0gdl9Xb3JsZFBvc2l0aW9uO1xcbiBpZiAoZG90KE4sIFYpIDwgMC4wKSB7XFxuIE4gPSAtTjtcXG4gfVxcbiB9XFxuIGlmIChhbHBoYUN1dG9mZiA+IDAuMCkge1xcbiBmbG9hdCBhID0gdGV4dHVyZTJEKGRpZmZ1c2VNYXAsIHZfVGV4Y29vcmQpLmEgKiBhbHBoYTtcXG4gaWYgKGEgPCBhbHBoYUN1dG9mZikge1xcbiBkaXNjYXJkO1xcbiB9XFxuIH1cXG4gaWYgKGRvdCh2X1RhbmdlbnQsIHZfVGFuZ2VudCkgPiAwLjApIHtcXG4gdmVjMyBub3JtYWxUZXhlbCA9IHRleHR1cmUyRChub3JtYWxNYXAsIHZfVGV4Y29vcmQpLnh5ejtcXG4gaWYgKGRvdChub3JtYWxUZXhlbCwgbm9ybWFsVGV4ZWwpID4gMC4wKSB7IE4gPSBub3JtYWxUZXhlbCAqIDIuMCAtIDEuMDtcXG4gbWF0MyB0Ym4gPSBtYXQzKHZfVGFuZ2VudCwgdl9CaXRhbmdlbnQsIHZfTm9ybWFsKTtcXG4gTiA9IG5vcm1hbGl6ZSh0Ym4gKiBOKTtcXG4gfVxcbiB9XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSAoTiArIDEuMCkgKiAwLjU7XFxuIGZsb2F0IGcgPSBnbG9zc2luZXNzO1xcbiBpZiAodXNlUm91Z2hHbG9zc01hcCkge1xcbiBmbG9hdCBnMiA9IGluZGV4aW5nVGV4ZWwodGV4dHVyZTJEKHJvdWdoR2xvc3NNYXAsIHZfVGV4Y29vcmQpLCByb3VnaEdsb3NzQ2hhbm5lbCk7XFxuIGlmICh1c2VSb3VnaG5lc3MpIHtcXG4gZzIgPSAxLjAgLSBnMjtcXG4gfVxcbiBnID0gY2xhbXAoZzIgKyAoZyAtIDAuNSkgKiAyLjAsIDAuMCwgMS4wKTtcXG4gfVxcbiBnbF9GcmFnQ29sb3IuYSA9IGcgKyAwLjAwNTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS5kZWZlcnJlZC5nYnVmZmVyMi5mcmFnbWVudFxcbnVuaWZvcm0gc2FtcGxlcjJEIGRpZmZ1c2VNYXA7XFxudW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwO1xcbnVuaWZvcm0gdmVjMyBjb2xvcjtcXG51bmlmb3JtIGZsb2F0IG1ldGFsbmVzcztcXG51bmlmb3JtIGJvb2wgdXNlTWV0YWxuZXNzTWFwO1xcbnVuaWZvcm0gYm9vbCBsaW5lYXI7XFxudW5pZm9ybSBmbG9hdCBhbHBoYUN1dG9mZjogMC4wO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGE6IDEuMDtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG5AaW1wb3J0IGNsYXkudXRpbC5zcmdiXFxudm9pZCBtYWluKClcXG57XFxuIGZsb2F0IG0gPSBtZXRhbG5lc3M7XFxuIGlmICh1c2VNZXRhbG5lc3NNYXApIHtcXG4gdmVjNCBtZXRhbG5lc3NUZXhlbCA9IHRleHR1cmUyRChtZXRhbG5lc3NNYXAsIHZfVGV4Y29vcmQpO1xcbiBtID0gY2xhbXAobWV0YWxuZXNzVGV4ZWwuciArIChtICogMi4wIC0gMS4wKSwgMC4wLCAxLjApO1xcbiB9XFxuIHZlYzQgdGV4ZWwgPSB0ZXh0dXJlMkQoZGlmZnVzZU1hcCwgdl9UZXhjb29yZCk7XFxuIGlmIChsaW5lYXIpIHtcXG4gdGV4ZWwgPSBzUkdCVG9MaW5lYXIodGV4ZWwpO1xcbiB9XFxuIGlmIChhbHBoYUN1dG9mZiA+IDAuMCkge1xcbiBmbG9hdCBhID0gdGV4ZWwuYSAqIGFscGhhO1xcbiBpZiAoYSA8IGFscGhhQ3V0b2ZmKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4gfVxcbiBnbF9GcmFnQ29sb3IucmdiID0gdGV4ZWwucmdiICogY29sb3I7XFxuIGdsX0ZyYWdDb2xvci5hID0gbSArIDAuMDA1O1xcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIzLmZyYWdtZW50XFxudW5pZm9ybSBib29sIGZpcnN0UmVuZGVyO1xcbnZhcnlpbmcgdmVjNCB2X1ZpZXdQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzQgdl9QcmV2Vmlld1Bvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMyIGEgPSB2X1ZpZXdQb3NpdGlvbi54eSAvIHZfVmlld1Bvc2l0aW9uLnc7XFxuIHZlYzIgYiA9IHZfUHJldlZpZXdQb3NpdGlvbi54eSAvIHZfUHJldlZpZXdQb3NpdGlvbi53O1xcbiBpZiAoZmlyc3RSZW5kZXIpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjApO1xcbiB9XFxuIGVsc2Uge1xcbiBnbF9GcmFnQ29sb3IgPSB2ZWM0KChhIC0gYikgKiAwLjUgKyAwLjUsIDAuMCwgMS4wKTtcXG4gfVxcbn1cXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmdidWZmZXIuZGVidWdcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlNDtcXG51bmlmb3JtIGludCBkZWJ1ZzogMDtcXG52b2lkIG1haW4gKClcXG57XFxuIEBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5nYnVmZmVyX3JlYWRcXG4gaWYgKGRlYnVnID09IDApIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChOLCAxLjApO1xcbiB9XFxuIGVsc2UgaWYgKGRlYnVnID09IDEpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNCh2ZWMzKHopLCAxLjApO1xcbiB9XFxuIGVsc2UgaWYgKGRlYnVnID09IDIpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gfVxcbiBlbHNlIGlmIChkZWJ1ZyA9PSAzKSB7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhnbG9zc2luZXNzKSwgMS4wKTtcXG4gfVxcbiBlbHNlIGlmIChkZWJ1ZyA9PSA0KSB7XFxuIGdsX0ZyYWdDb2xvciA9IHZlYzQodmVjMyhtZXRhbG5lc3MpLCAxLjApO1xcbiB9XFxuIGVsc2UgaWYgKGRlYnVnID09IDUpIHtcXG4gZ2xfRnJhZ0NvbG9yID0gdmVjNChhbGJlZG8sIDEuMCk7XFxuIH1cXG4gZWxzZSB7XFxuIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmU0LCB1dik7XFxuIGNvbG9yLnJnIC09IDAuNTtcXG4gY29sb3IucmcgKj0gMi4wO1xcbiBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG4gfVxcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2hlYWRcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTE7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUyO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMztcXG51bmlmb3JtIHZlYzIgd2luZG93U2l6ZTogV0lORE9XX1NJWkU7XFxudW5pZm9ybSB2ZWM0IHZpZXdwb3J0OiBWSUVXUE9SVDtcXG51bmlmb3JtIG1hdDQgdmlld1Byb2plY3Rpb25JbnY7XFxuI2lmZGVmIERFUFRIX0VOQ09ERURcXG5AaW1wb3J0IGNsYXkudXRpbC5kZWNvZGVfZmxvYXRcXG4jZW5kaWZcXG5AZW5kXFxuQGV4cG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC8gd2luZG93U2l6ZTtcXG4gdmVjMiB1djIgPSAoZ2xfRnJhZ0Nvb3JkLnh5IC0gdmlld3BvcnQueHkpIC8gdmlld3BvcnQuenc7XFxuIHZlYzQgdGV4ZWwxID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMSwgdXYpO1xcbiB2ZWM0IHRleGVsMyA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTMsIHV2KTtcXG4gaWYgKGRvdCh0ZXhlbDEucmdiLCB2ZWMzKDEuMCkpID09IDAuMCkge1xcbiBkaXNjYXJkO1xcbiB9XFxuIGZsb2F0IGdsb3NzaW5lc3MgPSB0ZXhlbDEuYTtcXG4gZmxvYXQgbWV0YWxuZXNzID0gdGV4ZWwzLmE7XFxuIHZlYzMgTiA9IHRleGVsMS5yZ2IgKiAyLjAgLSAxLjA7XFxuIGZsb2F0IHogPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUyLCB1dikuciAqIDIuMCAtIDEuMDtcXG4gdmVjMiB4eSA9IHV2MiAqIDIuMCAtIDEuMDtcXG4gdmVjNCBwcm9qZWN0ZWRQb3MgPSB2ZWM0KHh5LCB6LCAxLjApO1xcbiB2ZWM0IHA0ID0gdmlld1Byb2plY3Rpb25JbnYgKiBwcm9qZWN0ZWRQb3M7XFxuIHZlYzMgcG9zaXRpb24gPSBwNC54eXogLyBwNC53O1xcbiB2ZWMzIGFsYmVkbyA9IHRleGVsMy5yZ2I7XFxuIHZlYzMgZGlmZnVzZUNvbG9yID0gYWxiZWRvICogKDEuMCAtIG1ldGFsbmVzcyk7XFxuIHZlYzMgc3BlY3VsYXJDb2xvciA9IG1peCh2ZWMzKDAuMDQpLCBhbGJlZG8sIG1ldGFsbmVzcyk7XFxuQGVuZFxcbkBleHBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbmZsb2F0IERfUGhvbmcoaW4gZmxvYXQgZywgaW4gZmxvYXQgbmRoKSB7XFxuIGZsb2F0IGEgPSBwb3coODE5Mi4wLCBnKTtcXG4gcmV0dXJuIChhICsgMi4wKSAvIDguMCAqIHBvdyhuZGgsIGEpO1xcbn1cXG5mbG9hdCBEX0dHWChpbiBmbG9hdCBnLCBpbiBmbG9hdCBuZGgpIHtcXG4gZmxvYXQgciA9IDEuMCAtIGc7XFxuIGZsb2F0IGEgPSByICogcjtcXG4gZmxvYXQgdG1wID0gbmRoICogbmRoICogKGEgLSAxLjApICsgMS4wO1xcbiByZXR1cm4gYSAvICgzLjE0MTU5MjYgKiB0bXAgKiB0bXApO1xcbn1cXG52ZWMzIEZfU2NobGljayhpbiBmbG9hdCBuZHYsIHZlYzMgc3BlYykge1xcbiByZXR1cm4gc3BlYyArICgxLjAgLSBzcGVjKSAqIHBvdygxLjAgLSBuZHYsIDUuMCk7XFxufVxcbnZlYzMgbGlnaHRFcXVhdGlvbihcXG4gaW4gdmVjMyBsaWdodENvbG9yLCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciwgaW4gdmVjMyBzcGVjdWxhckNvbG9yLFxcbiBpbiBmbG9hdCBuZGwsIGluIGZsb2F0IG5kaCwgaW4gZmxvYXQgbmR2LCBpbiBmbG9hdCBnXFxuKVxcbntcXG4gcmV0dXJuIG5kbCAqIGxpZ2h0Q29sb3JcXG4gKiAoZGlmZnVzZUNvbG9yICsgRF9QaG9uZyhnLCBuZGgpICogRl9TY2hsaWNrKG5kdiwgc3BlY3VsYXJDb2xvcikpO1xcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciBmcm9tICcuLi9GcmFtZUJ1ZmZlcic7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuaW1wb3J0IFBhc3MgZnJvbSAnLi4vY29tcG9zaXRvci9QYXNzJztcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSAnLi4vbWF0aC9NYXRyaXg0JztcclxuaW1wb3J0IG1hdDQgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0NCc7XHJcblxyXG5pbXBvcnQgZ2J1ZmZlckVzc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9nYnVmZmVyLmdsc2wuanMnO1xyXG5pbXBvcnQgY2h1bmtFc3NsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvY2h1bmsuZ2xzbC5qcyc7XHJcblxyXG5TaGFkZXIuaW1wb3J0KGdidWZmZXJFc3NsKTtcclxuU2hhZGVyLmltcG9ydChjaHVua0Vzc2wpO1xyXG5cclxuZnVuY3Rpb24gY3JlYXRlRmlsbENhbnZhcyhjb2xvcikge1xyXG4gICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgY2FudmFzLndpZHRoID0gY2FudmFzLmhlaWdodCA9IDE7XHJcbiAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBjdHguZmlsbFN0eWxlID0gY29sb3IgfHwgJyMwMDAnO1xyXG4gICAgY3R4LmZpbGxSZWN0KDAsIDAsIDEsIDEpO1xyXG5cclxuICAgIHJldHVybiBjYW52YXM7XHJcbn1cclxuXHJcbi8vIFRPRE8gc3BlY3VsYXJDb2xvclxyXG4vLyBUT0RPIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50XHJcbmZ1bmN0aW9uIGdldEdldFVuaWZvcm1Ib29rMShkZWZhdWx0Tm9ybWFsTWFwLCBkZWZhdWx0Um91Z2huZXNzTWFwLCBkZWZhdWx0RGlmZnVzZU1hcCkge1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgZ0J1ZmZlck1hdCwgc3ltYm9sKSB7XHJcbiAgICAgICAgdmFyIHN0YW5kYXJkTWF0ZXJpYWwgPSByZW5kZXJhYmxlLm1hdGVyaWFsO1xyXG4gICAgICAgIGlmIChzeW1ib2wgPT09ICdkb3VibGVTaWRlZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsICdET1VCTEVfU0lERUQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAndXZSZXBlYXQnIHx8IHN5bWJvbCA9PT0gJ3V2T2Zmc2V0JyB8fCBzeW1ib2wgPT09ICdhbHBoYScpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KHN5bWJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ25vcm1hbE1hcCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KHN5bWJvbCkgfHwgZGVmYXVsdE5vcm1hbE1hcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAnZGlmZnVzZU1hcCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KHN5bWJvbCkgfHwgZGVmYXVsdERpZmZ1c2VNYXA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ2FscGhhQ3V0b2ZmJykge1xyXG4gICAgICAgICAgICAvLyBUT0RPIERJRkZVU0VNQVBfQUxQSEFfQUxQSEFcclxuICAgICAgICAgICAgaWYgKHN0YW5kYXJkTWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsICdBTFBIQV9URVNUJykpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhbHBoYUN1dG9mZiA9IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0KCdhbHBoYUN1dG9mZicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFscGhhQ3V0b2ZmIHx8IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgdXNlUm91Z2huZXNzV29ya2Zsb3cgPSBzdGFuZGFyZE1hdGVyaWFsLmlzRGVmaW5lZCgnZnJhZ21lbnQnLCAnVVNFX1JPVUdITkVTUycpO1xyXG4gICAgICAgICAgICB2YXIgcm91Z2hHbG9zc01hcCA9IHVzZVJvdWdobmVzc1dvcmtmbG93ID8gc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ3JvdWdobmVzc01hcCcpIDogc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ2dsb3NzaW5lc3NNYXAnKTtcclxuICAgICAgICAgICAgc3dpdGNoIChzeW1ib2wpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2dsb3NzaW5lc3MnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VSb3VnaG5lc3NXb3JrZmxvdyA/ICgxLjAgLSBzdGFuZGFyZE1hdGVyaWFsLmdldCgncm91Z2huZXNzJykpIDogc3RhbmRhcmRNYXRlcmlhbC5nZXQoJ2dsb3NzaW5lc3MnKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3JvdWdoR2xvc3NNYXAnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByb3VnaEdsb3NzTWFwO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAndXNlUm91Z2hHbG9zc01hcCc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhcm91Z2hHbG9zc01hcDtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3VzZVJvdWdobmVzcyc6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZVJvdWdobmVzc1dvcmtmbG93O1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncm91Z2hHbG9zc0NoYW5uZWwnOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VSb3VnaG5lc3NXb3JrZmxvd1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHN0YW5kYXJkTWF0ZXJpYWwuZ2V0RGVmaW5lKCdmcmFnbWVudCcsICdST1VHSE5FU1NfQ0hBTk5FTCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhbmRhcmRNYXRlcmlhbC5nZXREZWZpbmUoJ2ZyYWdtZW50JywgJ0dMT1NTSU5FU1NfQ0hBTk5FTCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0R2V0VW5pZm9ybUhvb2syKGRlZmF1bHREaWZmdXNlTWFwLCBkZWZhdWx0TWV0YWxuZXNzTWFwKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlbmRlcmFibGUsIGdCdWZmZXJNYXQsIHN5bWJvbCkge1xyXG4gICAgICAgIHZhciBzdGFuZGFyZE1hdGVyaWFsID0gcmVuZGVyYWJsZS5tYXRlcmlhbDtcclxuICAgICAgICBzd2l0Y2ggKHN5bWJvbCkge1xyXG4gICAgICAgICAgICBjYXNlICdjb2xvcic6XHJcbiAgICAgICAgICAgIGNhc2UgJ3V2UmVwZWF0JzpcclxuICAgICAgICAgICAgY2FzZSAndXZPZmZzZXQnOlxyXG4gICAgICAgICAgICBjYXNlICdhbHBoYSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5nZXQoc3ltYm9sKTtcclxuICAgICAgICAgICAgY2FzZSAnbWV0YWxuZXNzJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1hdGVyaWFsLmdldCgnbWV0YWxuZXNzJykgfHwgMDtcclxuICAgICAgICAgICAgY2FzZSAnZGlmZnVzZU1hcCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5nZXQoc3ltYm9sKSB8fCBkZWZhdWx0RGlmZnVzZU1hcDtcclxuICAgICAgICAgICAgY2FzZSAnbWV0YWxuZXNzTWFwJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdGFuZGFyZE1hdGVyaWFsLmdldChzeW1ib2wpIHx8IGRlZmF1bHRNZXRhbG5lc3NNYXA7XHJcbiAgICAgICAgICAgIGNhc2UgJ3VzZU1ldGFsbmVzc01hcCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gISFzdGFuZGFyZE1hdGVyaWFsLmdldCgnbWV0YWxuZXNzTWFwJyk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2xpbmVhcic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhbmRhcmRNYXRlcmlhbC5pc0RlZmluZWQoJ1NSR0JfREVDT0RFJyk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2FscGhhQ3V0b2ZmJzpcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gRElGRlVTRU1BUF9BTFBIQV9BTFBIQVxyXG4gICAgICAgICAgICAgICAgaWYgKHN0YW5kYXJkTWF0ZXJpYWwuaXNEZWZpbmVkKCdmcmFnbWVudCcsICdBTFBIQV9URVNUJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYWxwaGFDdXRvZmYgPSBzdGFuZGFyZE1hdGVyaWFsLmdldCgnYWxwaGFDdXRvZmYnKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxwaGFDdXRvZmYgfHwgMC4wO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDAuMDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG4vKipcclxuICogR0J1ZmZlciBpcyBwcm92aWRlZCBmb3IgZGVmZXJyZWQgcmVuZGVyaW5nIGFuZCBTU0FPLCBTU1IgcGFzcy5cclxuICogSXQgd2lsbCBkbyB0aHJlZSBwYXNzZXMgcmVuZGVyaW5nIHRvIGZvdXIgdGFyZ2V0IHRleHR1cmVzLiBTZWVcclxuICogKyB7QGxpbmsgY2xheS5kZWZlcnJlZC5HQnVmZmVyI2dldFRhcmdldFRleHR1cmUxfVxyXG4gKiArIHtAbGluayBjbGF5LmRlZmVycmVkLkdCdWZmZXIjZ2V0VGFyZ2V0VGV4dHVyZTJ9XHJcbiAqICsge0BsaW5rIGNsYXkuZGVmZXJyZWQuR0J1ZmZlciNnZXRUYXJnZXRUZXh0dXJlM31cclxuICogKyB7QGxpbmsgY2xheS5kZWZlcnJlZC5HQnVmZmVyI2dldFRhcmdldFRleHR1cmU0fVxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuZGVmZXJyZWQuR0J1ZmZlclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEdCdWZmZXIgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIGNvbW1vblRleHR1cmVPcHRzID0ge1xyXG4gICAgICAgIG1pbkZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxyXG4gICAgICAgIG1hZ0ZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxyXG4gICAgICAgIHdyYXBTOiBUZXh0dXJlLkNMQU1QX1RPX0VER0UsXHJcbiAgICAgICAgd3JhcFQ6IFRleHR1cmUuQ0xBTVBfVE9fRURHRSxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIC8qKiBAbGVuZHMgY2xheS5kZWZlcnJlZC5HQnVmZmVyIyAqLyB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBnYnVmZmVyIHRleHR1cmUgMS5cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbmFibGVUYXJnZXRUZXh0dXJlMTogdHJ1ZSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgZW5hYmxlIGdidWZmZXIgdGV4dHVyZSAyLlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGVuYWJsZVRhcmdldFRleHR1cmUyOiB0cnVlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJZiBlbmFibGUgZ2J1ZmZlciB0ZXh0dXJlIDMuXHJcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZW5hYmxlVGFyZ2V0VGV4dHVyZTM6IHRydWUsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBnYnVmZmVyIHRleHR1cmUgNC5cclxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBlbmFibGVUYXJnZXRUZXh0dXJlNDogZmFsc2UsXHJcblxyXG4gICAgICAgIHJlbmRlclRyYW5zcGFyZW50OiBmYWxzZSxcclxuXHJcbiAgICAgICAgX2dCdWZmZXJSZW5kZXJMaXN0OiBbXSxcclxuICAgICAgICAvLyAtIFI6IG5vcm1hbC54XHJcbiAgICAgICAgLy8gLSBHOiBub3JtYWwueVxyXG4gICAgICAgIC8vIC0gQjogbm9ybWFsLnpcclxuICAgICAgICAvLyAtIEE6IGdsb3NzaW5lc3NcclxuICAgICAgICBfZ0J1ZmZlclRleDE6IG5ldyBUZXh0dXJlMkQoT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkdcclxuICAgICAgICAgICAgdHlwZTogVGV4dHVyZS5IQUxGX0ZMT0FUXHJcbiAgICAgICAgfSwgY29tbW9uVGV4dHVyZU9wdHMpKSxcclxuXHJcbiAgICAgICAgLy8gLSBSOiBkZXB0aFxyXG4gICAgICAgIF9nQnVmZmVyVGV4MjogbmV3IFRleHR1cmUyRChPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgLy8gZm9ybWF0OiBUZXh0dXJlLkRFUFRIX0NPTVBPTkVOVCxcclxuICAgICAgICAgICAgLy8gdHlwZTogVGV4dHVyZS5VTlNJR05FRF9JTlRcclxuXHJcbiAgICAgICAgICAgIGZvcm1hdDogVGV4dHVyZS5ERVBUSF9TVEVOQ0lMLFxyXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMXHJcbiAgICAgICAgfSwgY29tbW9uVGV4dHVyZU9wdHMpKSxcclxuXHJcbiAgICAgICAgLy8gLSBSOiBhbGJlZG8uclxyXG4gICAgICAgIC8vIC0gRzogYWxiZWRvLmdcclxuICAgICAgICAvLyAtIEI6IGFsYmVkby5iXHJcbiAgICAgICAgLy8gLSBBOiBtZXRhbG5lc3NcclxuICAgICAgICBfZ0J1ZmZlclRleDM6IG5ldyBUZXh0dXJlMkQoY29tbW9uVGV4dHVyZU9wdHMpLFxyXG5cclxuICAgICAgICBfZ0J1ZmZlclRleDQ6IG5ldyBUZXh0dXJlMkQoT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgIC8vIEZMT0FUIFRleHR1cmUgaGFzIGJ1ZyBvbiBpT1MuIGlzIEhBTEZfRkxPQVQgZW5vdWdoP1xyXG4gICAgICAgICAgICB0eXBlOiBUZXh0dXJlLkhBTEZfRkxPQVRcclxuICAgICAgICB9LCBjb21tb25UZXh0dXJlT3B0cykpLFxyXG5cclxuICAgICAgICBfZGVmYXVsdE5vcm1hbE1hcDogbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjMDAwJylcclxuICAgICAgICB9KSxcclxuICAgICAgICBfZGVmYXVsdFJvdWdobmVzc01hcDogbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjZmZmJylcclxuICAgICAgICB9KSxcclxuICAgICAgICBfZGVmYXVsdE1ldGFsbmVzc01hcDogbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBjcmVhdGVGaWxsQ2FudmFzKCcjZmZmJylcclxuICAgICAgICB9KSxcclxuICAgICAgICBfZGVmYXVsdERpZmZ1c2VNYXA6IG5ldyBUZXh0dXJlMkQoe1xyXG4gICAgICAgICAgICBpbWFnZTogY3JlYXRlRmlsbENhbnZhcygnI2ZmZicpXHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIF9mcmFtZUJ1ZmZlcjogbmV3IEZyYW1lQnVmZmVyKCksXHJcblxyXG4gICAgICAgIF9nQnVmZmVyTWF0ZXJpYWwxOiBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoXHJcbiAgICAgICAgICAgICAgICBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmdidWZmZXIudmVydGV4JyksXHJcbiAgICAgICAgICAgICAgICBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmdidWZmZXIxLmZyYWdtZW50JylcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdmVydGV4RGVmaW5lczoge1xyXG4gICAgICAgICAgICAgICAgRklSU1RfUEFTUzogbnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmcmFnbWVudERlZmluZXM6IHtcclxuICAgICAgICAgICAgICAgIEZJUlNUX1BBU1M6IG51bGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIF9nQnVmZmVyTWF0ZXJpYWwyOiBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoXHJcbiAgICAgICAgICAgICAgICBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmdidWZmZXIudmVydGV4JyksXHJcbiAgICAgICAgICAgICAgICBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmdidWZmZXIyLmZyYWdtZW50JylcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdmVydGV4RGVmaW5lczoge1xyXG4gICAgICAgICAgICAgICAgU0VDT05EX1BBU1M6IG51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZnJhZ21lbnREZWZpbmVzOiB7XHJcbiAgICAgICAgICAgICAgICBTRUNPTkRfUEFTUzogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgX2dCdWZmZXJNYXRlcmlhbDM6IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgIHNoYWRlcjogbmV3IFNoYWRlcihcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlci52ZXJ0ZXgnKSxcclxuICAgICAgICAgICAgICAgIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlcjMuZnJhZ21lbnQnKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB2ZXJ0ZXhEZWZpbmVzOiB7XHJcbiAgICAgICAgICAgICAgICBUSElSRF9QQVNTOiBudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZyYWdtZW50RGVmaW5lczoge1xyXG4gICAgICAgICAgICAgICAgVEhJUkRfUEFTUzogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIF9kZWJ1Z1Bhc3M6IG5ldyBQYXNzKHtcclxuICAgICAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuZ2J1ZmZlci5kZWJ1ZycpXHJcbiAgICAgICAgfSlcclxuICAgIH07XHJcbn0sIC8qKiBAbGVuZHMgY2xheS5kZWZlcnJlZC5HQnVmZmVyIyAqL3tcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBHIEJ1ZmZlciBzaXplLlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XHJcbiAgICAgKi9cclxuICAgIHJlc2l6ZTogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgICAgICBpZiAodGhpcy5fZ0J1ZmZlclRleDEud2lkdGggPT09IHdpZHRoXHJcbiAgICAgICAgICAgICYmIHRoaXMuX2dCdWZmZXJUZXgxLmhlaWdodCA9PT0gaGVpZ2h0XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDEud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4MS5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXgyLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDIuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4My53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIHRoaXMuX2dCdWZmZXJUZXgzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDQud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyVGV4NC5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICB9LFxyXG5cclxuICAgIC8vIFRPRE8gaXMgZHByIG5lZWRlZD9cclxuICAgIHNldFZpZXdwb3J0OiBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgZHByKSB7XHJcbiAgICAgICAgdmFyIHZpZXdwb3J0O1xyXG4gICAgICAgIGlmICh0eXBlb2YgeCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgdmlld3BvcnQgPSB4O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmlld3BvcnQgPSB7XHJcbiAgICAgICAgICAgICAgICB4OiB4LCB5OiB5LFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICAgICAgICAgIGRldmljZVBpeGVsUmF0aW86IGRwciB8fCAxXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnZpZXdwb3J0ID0gdmlld3BvcnQ7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFZpZXdwb3J0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lQnVmZmVyLnZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mcmFtZUJ1ZmZlci52aWV3cG9ydDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB4OiAwLCB5OiAwLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMuX2dCdWZmZXJUZXgxLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLl9nQnVmZmVyVGV4MS5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBkZXZpY2VQaXhlbFJhdGlvOiAxXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBHQnVmZmVyXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuU2NlbmV9IHNjZW5lXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuQ2FtZXJhfSBjYW1lcmFcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBvcHRzKSB7XHJcbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XHJcblxyXG4gICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICB2YXIgZnJhbWVCdWZmZXIgPSB0aGlzLl9mcmFtZUJ1ZmZlcjtcclxuICAgICAgICB2YXIgdmlld3BvcnQgPSBmcmFtZUJ1ZmZlci52aWV3cG9ydDtcclxuXHJcbiAgICAgICAgdmFyIHJlbmRlckxpc3QgPSBzY2VuZS51cGRhdGVSZW5kZXJMaXN0KGNhbWVyYSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHZhciBvcGFxdWVMaXN0ID0gcmVuZGVyTGlzdC5vcGFxdWU7XHJcbiAgICAgICAgdmFyIHRyYW5zcGFyZW50TGlzdCA9IHJlbmRlckxpc3QudHJhbnNwYXJlbnQ7XHJcblxyXG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciBnQnVmZmVyUmVuZGVyTGlzdCA9IHRoaXMuX2dCdWZmZXJSZW5kZXJMaXN0O1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3BhcXVlTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIW9wYXF1ZUxpc3RbaV0uaWdub3JlR0J1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgZ0J1ZmZlclJlbmRlckxpc3Rbb2Zmc2V0KytdID0gb3BhcXVlTGlzdFtpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5yZW5kZXJUcmFuc3BhcmVudCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zcGFyZW50TGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0cmFuc3BhcmVudExpc3RbaV0uaWdub3JlR0J1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGdCdWZmZXJSZW5kZXJMaXN0W29mZnNldCsrXSA9IHRyYW5zcGFyZW50TGlzdFtpXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBnQnVmZmVyUmVuZGVyTGlzdC5sZW5ndGggPSBvZmZzZXQ7XHJcblxyXG4gICAgICAgIGdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7XHJcbiAgICAgICAgZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgICAgIGdsLmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICBnbC5kaXNhYmxlKGdsLkJMRU5EKTtcclxuXHJcbiAgICAgICAgdmFyIGVuYWJsZVRhcmdldFRleHR1cmUxID0gdGhpcy5lbmFibGVUYXJnZXRUZXh0dXJlMTtcclxuICAgICAgICB2YXIgZW5hYmxlVGFyZ2V0VGV4dHVyZTIgPSB0aGlzLmVuYWJsZVRhcmdldFRleHR1cmUyO1xyXG4gICAgICAgIHZhciBlbmFibGVUYXJnZXRUZXh0dXJlMyA9IHRoaXMuZW5hYmxlVGFyZ2V0VGV4dHVyZTM7XHJcbiAgICAgICAgdmFyIGVuYWJsZVRhcmdldFRleHR1cmU0ID0gdGhpcy5lbmFibGVUYXJnZXRUZXh0dXJlNDtcclxuICAgICAgICBpZiAoIWVuYWJsZVRhcmdldFRleHR1cmUxICYmICFlbmFibGVUYXJnZXRUZXh0dXJlMyAmJiAhZW5hYmxlVGFyZ2V0VGV4dHVyZTQpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdDYW5cXCd0IGRpc2FibGUgdGFyZ2V0VGV4dHVyZTEsIHRhcmdldFRleHR1cmUzLCB0YXJnZXRUZXh0dXJlNCBib3RoJyk7XHJcbiAgICAgICAgICAgIGVuYWJsZVRhcmdldFRleHR1cmUxID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbmFibGVUYXJnZXRUZXh0dXJlMikge1xyXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlci5hdHRhY2gob3B0cy50YXJnZXRUZXh0dXJlMiB8fCB0aGlzLl9nQnVmZmVyVGV4MiwgcmVuZGVyZXIuZ2wuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGNsZWFyVmlld3BvcnQoKSB7XHJcbiAgICAgICAgICAgIGlmICh2aWV3cG9ydCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRwciA9IHZpZXdwb3J0LmRldmljZVBpeGVsUmF0aW87XHJcbiAgICAgICAgICAgICAgICAvLyB1c2Ugc2Npc3NvciB0byBtYWtlIHN1cmUgb25seSBjbGVhciB0aGUgdmlld3BvcnRcclxuICAgICAgICAgICAgICAgIGdsLmVuYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xyXG4gICAgICAgICAgICAgICAgZ2wuc2Npc3Nvcih2aWV3cG9ydC54ICogZHByLCB2aWV3cG9ydC55ICogZHByLCB2aWV3cG9ydC53aWR0aCAqIGRwciwgdmlld3BvcnQuaGVpZ2h0ICogZHByKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCk7XHJcbiAgICAgICAgICAgIGlmICh2aWV3cG9ydCkge1xyXG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBpc01hdGVyaWFsQ2hhbmdlZChyZW5kZXJhYmxlLCBwcmV2UmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5tYXRlcmlhbCAhPT0gcHJldlJlbmRlcmFibGUubWF0ZXJpYWw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQRU5ESU5HLCBzY2VuZS5ib3VuZGluZ0JveExhc3RGcmFtZSBuZWVkcyBiZSB1cGRhdGVkIGlmIGhhdmUgc2hhZG93XHJcbiAgICAgICAgcmVuZGVyZXIuYmluZFNjZW5lUmVuZGVyaW5nKHNjZW5lKTtcclxuICAgICAgICBpZiAoZW5hYmxlVGFyZ2V0VGV4dHVyZTEpIHtcclxuICAgICAgICAgICAgLy8gUGFzcyAxXHJcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChvcHRzLnRhcmdldFRleHR1cmUxIHx8IHRoaXMuX2dCdWZmZXJUZXgxKTtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICBjbGVhclZpZXdwb3J0KCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZ0J1ZmZlck1hdGVyaWFsMSA9IHRoaXMuX2dCdWZmZXJNYXRlcmlhbDE7XHJcbiAgICAgICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ0J1ZmZlck1hdGVyaWFsMTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBnZXRVbmlmb3JtOiBnZXRHZXRVbmlmb3JtSG9vazEodGhpcy5fZGVmYXVsdE5vcm1hbE1hcCwgdGhpcy5fZGVmYXVsdFJvdWdobmVzc01hcCwgdGhpcy5fZGVmYXVsdERpZmZ1c2VNYXApLFxyXG4gICAgICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGlzTWF0ZXJpYWxDaGFuZ2VkLFxyXG4gICAgICAgICAgICAgICAgc29ydENvbXBhcmU6IHJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIFVzZSBNUlQgaWYgcG9zc2libGVcclxuICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhnQnVmZmVyUmVuZGVyTGlzdCwgY2FtZXJhLCBwYXNzQ29uZmlnKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbmFibGVUYXJnZXRUZXh0dXJlMykge1xyXG5cclxuICAgICAgICAgICAgLy8gUGFzcyAyXHJcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChvcHRzLnRhcmdldFRleHR1cmUzIHx8IHRoaXMuX2dCdWZmZXJUZXgzKTtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcblxyXG4gICAgICAgICAgICBjbGVhclZpZXdwb3J0KCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZ0J1ZmZlck1hdGVyaWFsMiA9IHRoaXMuX2dCdWZmZXJNYXRlcmlhbDI7XHJcbiAgICAgICAgICAgIHZhciBwYXNzQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ0J1ZmZlck1hdGVyaWFsMjtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBnZXRVbmlmb3JtOiBnZXRHZXRVbmlmb3JtSG9vazIodGhpcy5fZGVmYXVsdERpZmZ1c2VNYXAsIHRoaXMuX2RlZmF1bHRNZXRhbG5lc3NNYXApLFxyXG4gICAgICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGlzTWF0ZXJpYWxDaGFuZ2VkLFxyXG4gICAgICAgICAgICAgICAgc29ydENvbXBhcmU6IHJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnJlbmRlclBhc3MoZ0J1ZmZlclJlbmRlckxpc3QsIGNhbWVyYSwgcGFzc0NvbmZpZyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZW5hYmxlVGFyZ2V0VGV4dHVyZTQpIHtcclxuICAgICAgICAgICAgZnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyLmF0dGFjaChvcHRzLnRhcmdldFRleHR1cmU0IHx8IHRoaXMuX2dCdWZmZXJUZXg0KTtcclxuXHJcbiAgICAgICAgICAgIGNsZWFyVmlld3BvcnQoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlbW92ZSBqaXR0ZXJpbmcgaW4gdGVtcG9yYWwgYWEuXHJcbiAgICAgICAgICAgIC8vIFBFTkRJTkcuIEJldHRlciBzb2x1dGlvbj9cclxuICAgICAgICAgICAgY2FtZXJhLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGdCdWZmZXJNYXRlcmlhbDMgPSB0aGlzLl9nQnVmZmVyTWF0ZXJpYWwzO1xyXG4gICAgICAgICAgICB2YXIgY2FtZXJhVmlld1Byb2ogPSBtYXQ0LmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KGNhbWVyYVZpZXdQcm9qLCBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5hcnJheSwgY2FtZXJhLnZpZXdNYXRyaXguYXJyYXkpO1xyXG4gICAgICAgICAgICB2YXIgcGFzc0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgIGdldE1hdGVyaWFsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdCdWZmZXJNYXRlcmlhbDM7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgcmVuZGVyYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpc1NraW5uZWRNZXNoID0gcmVuZGVyYWJsZS5pc1NraW5uZWRNZXNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2tpbm5lZE1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNrZWxldG9uID0gcmVuZGVyYWJsZS5za2VsZXRvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpvaW50cyA9IHJlbmRlcmFibGUuam9pbnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoam9pbnRzLmxlbmd0aCA+IHJlbmRlcmVyLmdldE1heEpvaW50TnVtYmVyKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBza2luTWF0cmljZXNUZXh0dXJlID0gc2tlbGV0b24uZ2V0U3ViU2tpbk1hdHJpY2VzVGV4dHVyZShyZW5kZXJhYmxlLl9fdWlkX18sIGpvaW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJldlNraW5NYXRyaWNlc1RleHR1cmUgPSByZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc1RleHR1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZTa2luTWF0cmljZXNUZXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlNraW5NYXRyaWNlc1RleHR1cmUgPSByZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc1RleHR1cmUgPSBuZXcgVGV4dHVyZTJEKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVGV4dHVyZS5GTE9BVCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ0ZpbHRlcjogVGV4dHVyZS5ORUFSRVNULFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VNaXBtYXA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGlwWTogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJldlNraW5NYXRyaWNlc1RleHR1cmUucGl4ZWxzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldlNraW5NYXRyaWNlc1RleHR1cmUucGl4ZWxzLmxlbmd0aCAhPT0gc2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHMubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHMgPSBuZXcgRmxvYXQzMkFycmF5KHNraW5NYXRyaWNlc1RleHR1cmUucGl4ZWxzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlNraW5NYXRyaWNlc1RleHR1cmUucGl4ZWxzW2ldID0gc2tpbk1hdHJpY2VzVGV4dHVyZS5waXhlbHNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlNraW5NYXRyaWNlc1RleHR1cmUud2lkdGggPSBza2luTWF0cmljZXNUZXh0dXJlLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlNraW5NYXRyaWNlc1RleHR1cmUuaGVpZ2h0ID0gc2tpbk1hdHJpY2VzVGV4dHVyZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2tpbk1hdHJpY2VzQXJyYXkgPSBza2VsZXRvbi5nZXRTdWJTa2luTWF0cmljZXMocmVuZGVyYWJsZS5fX3VpZF9fLCBqb2ludHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc0FycmF5IHx8IHJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzQXJyYXkubGVuZ3RoICE9PSBza2luTWF0cmljZXNBcnJheS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJhYmxlLl9fcHJldlNraW5NYXRyaWNlc0FycmF5ID0gbmV3IEZsb2F0MzJBcnJheShza2luTWF0cmljZXNBcnJheS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyYWJsZS5fX3ByZXZTa2luTWF0cmljZXNBcnJheS5zZXQoc2tpbk1hdHJpY2VzQXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmFibGUuX19wcmV2V29ybGRWaWV3UHJvamVjdGlvbiA9IHJlbmRlcmFibGUuX19wcmV2V29ybGRWaWV3UHJvamVjdGlvbiB8fCBtYXQ0LmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1NraW5uZWRNZXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSB3b3JsZCB0cmFuc2Zvcm0gb2Ygc2tpbm5lZCBtZXNoLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQ0LmNvcHkocmVuZGVyYWJsZS5fX3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uLCBjYW1lcmFWaWV3UHJvaik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQ0Lm11bHRpcGx5KHJlbmRlcmFibGUuX19wcmV2V29ybGRWaWV3UHJvamVjdGlvbiwgY2FtZXJhVmlld1Byb2osIHJlbmRlcmFibGUud29ybGRUcmFuc2Zvcm0uYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBnZXRVbmlmb3JtOiBmdW5jdGlvbiAocmVuZGVyYWJsZSwgZ0J1ZmZlck1hdCwgc3ltYm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCA9PT0gJ3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5fX3ByZXZXb3JsZFZpZXdQcm9qZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdwcmV2U2tpbk1hdHJpeCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGUuX19wcmV2U2tpbk1hdHJpY2VzQXJyYXk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJ3ByZXZTa2luTWF0cmljZXNUZXh0dXJlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyYWJsZS5fX3ByZXZTa2luTWF0cmljZXNUZXh0dXJlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdmaXJzdFJlbmRlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFyZW5kZXJhYmxlLl9fcHJldldvcmxkVmlld1Byb2plY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ0J1ZmZlck1hdC5nZXQoc3ltYm9sKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaXNNYXRlcmlhbENoYW5nZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBBbHdheXMgdXBkYXRlIHByZXZXb3JsZFZpZXdQcm9qZWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc29ydENvbXBhcmU6IHJlbmRlcmVyLm9wYXF1ZVNvcnRDb21wYXJlXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKGdCdWZmZXJSZW5kZXJMaXN0LCBjYW1lcmEsIHBhc3NDb25maWcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyZXIuYmluZFNjZW5lUmVuZGVyaW5nKG51bGwpO1xyXG4gICAgICAgIGZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVidWcgb3V0cHV0IG9mIGdCdWZmZXIuIFVzZSBgdHlwZWAgcGFyYW1ldGVyIHRvIGNob29zIHRoZSBkZWJ1ZyBvdXRwdXQgdHlwZSwgd2hpY2ggY2FuIGJlOlxyXG4gICAgICpcclxuICAgICAqICsgJ25vcm1hbCdcclxuICAgICAqICsgJ2RlcHRoJ1xyXG4gICAgICogKyAncG9zaXRpb24nXHJcbiAgICAgKiArICdnbG9zc2luZXNzJ1xyXG4gICAgICogKyAnbWV0YWxuZXNzJ1xyXG4gICAgICogKyAnYWxiZWRvJ1xyXG4gICAgICogKyAndmVsb2NpdHknXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtjbGF5LlJlbmRlcmVyfSByZW5kZXJlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LkNhbWVyYX0gY2FtZXJhXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3R5cGU9J25vcm1hbCddXHJcbiAgICAgKi9cclxuICAgIHJlbmRlckRlYnVnOiBmdW5jdGlvbiAocmVuZGVyZXIsIGNhbWVyYSwgdHlwZSwgdmlld3BvcnQpIHtcclxuICAgICAgICB2YXIgZGVidWdUeXBlcyA9IHtcclxuICAgICAgICAgICAgbm9ybWFsOiAwLFxyXG4gICAgICAgICAgICBkZXB0aDogMSxcclxuICAgICAgICAgICAgcG9zaXRpb246IDIsXHJcbiAgICAgICAgICAgIGdsb3NzaW5lc3M6IDMsXHJcbiAgICAgICAgICAgIG1ldGFsbmVzczogNCxcclxuICAgICAgICAgICAgYWxiZWRvOiA1LFxyXG4gICAgICAgICAgICB2ZWxvY2l0eTogNlxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGRlYnVnVHlwZXNbdHlwZV0gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua293biB0eXBlIFwiJyArIHR5cGUgKyAnXCInKTtcclxuICAgICAgICAgICAgLy8gRGVmYXVsdCB1c2Ugbm9ybWFsXHJcbiAgICAgICAgICAgIHR5cGUgPSAnbm9ybWFsJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlbmRlcmVyLnNhdmVDbGVhcigpO1xyXG4gICAgICAgIHJlbmRlcmVyLnNhdmVWaWV3cG9ydCgpO1xyXG4gICAgICAgIHJlbmRlcmVyLmNsZWFyQml0ID0gcmVuZGVyZXIuZ2wuREVQVEhfQlVGRkVSX0JJVDtcclxuXHJcbiAgICAgICAgaWYgKHZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KHZpZXdwb3J0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHZpZXdQcm9qZWN0aW9uSW52ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHZpZXdQcm9qZWN0aW9uSW52LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0sIGNhbWVyYS5pbnZQcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgdmFyIGRlYnVnUGFzcyA9IHRoaXMuX2RlYnVnUGFzcztcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgndmlld3BvcnRTaXplJywgW3JlbmRlcmVyLmdldFdpZHRoKCksIHJlbmRlcmVyLmdldEhlaWdodCgpXSk7XHJcbiAgICAgICAgZGVidWdQYXNzLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMScsIHRoaXMuX2dCdWZmZXJUZXgxKTtcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUyJywgdGhpcy5fZ0J1ZmZlclRleDIpO1xyXG4gICAgICAgIGRlYnVnUGFzcy5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTMnLCB0aGlzLl9nQnVmZmVyVGV4Myk7XHJcbiAgICAgICAgZGVidWdQYXNzLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlNCcsIHRoaXMuX2dCdWZmZXJUZXg0KTtcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgnZGVidWcnLCBkZWJ1Z1R5cGVzW3R5cGVdKTtcclxuICAgICAgICBkZWJ1Z1Bhc3Muc2V0VW5pZm9ybSgndmlld1Byb2plY3Rpb25JbnYnLCB2aWV3UHJvamVjdGlvbkludi5hcnJheSk7XHJcbiAgICAgICAgZGVidWdQYXNzLnJlbmRlcihyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHJlbmRlcmVyLnJlc3RvcmVWaWV3cG9ydCgpO1xyXG4gICAgICAgIHJlbmRlcmVyLnJlc3RvcmVDbGVhcigpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBmaXJzdCB0YXJnZXQgdGV4dHVyZS5cclxuICAgICAqIENoYW5uZWwgc3RvcmFnZTpcclxuICAgICAqICsgUjogbm9ybWFsLnggKiAwLjUgKyAwLjVcclxuICAgICAqICsgRzogbm9ybWFsLnkgKiAwLjUgKyAwLjVcclxuICAgICAqICsgQjogbm9ybWFsLnogKiAwLjUgKyAwLjVcclxuICAgICAqICsgQTogZ2xvc3NpbmVzc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5UZXh0dXJlMkR9XHJcbiAgICAgKi9cclxuICAgIGdldFRhcmdldFRleHR1cmUxOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dCdWZmZXJUZXgxO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBzZWNvbmQgdGFyZ2V0IHRleHR1cmUuXHJcbiAgICAgKiBDaGFubmVsIHN0b3JhZ2U6XHJcbiAgICAgKiArIFI6IGRlcHRoXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAqL1xyXG4gICAgZ2V0VGFyZ2V0VGV4dHVyZTI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ0J1ZmZlclRleDI7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHRoaXJkIHRhcmdldCB0ZXh0dXJlLlxyXG4gICAgICogQ2hhbm5lbCBzdG9yYWdlOlxyXG4gICAgICogKyBSOiBhbGJlZG8uclxyXG4gICAgICogKyBHOiBhbGJlZG8uZ1xyXG4gICAgICogKyBCOiBhbGJlZG8uYlxyXG4gICAgICogKyBBOiBtZXRhbG5lc3NcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICovXHJcbiAgICBnZXRUYXJnZXRUZXh0dXJlMzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nQnVmZmVyVGV4MztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZm91cnRoIHRhcmdldCB0ZXh0dXJlLlxyXG4gICAgICogQ2hhbm5lbCBzdG9yYWdlOlxyXG4gICAgICogKyBSOiB2ZWxvY2l0eS5yXHJcbiAgICAgKiArIEc6IHZlbG9jaXR5LmdcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVGV4dHVyZTJEfVxyXG4gICAgICovXHJcbiAgICBnZXRUYXJnZXRUZXh0dXJlNDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nQnVmZmVyVGV4NDtcclxuICAgIH0sXHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKHJlbmRlcmVyKSB7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDEuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDIuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlclRleDMuZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2RlZmF1bHROb3JtYWxNYXAuZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdFJvdWdobmVzc01hcC5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9kZWZhdWx0TWV0YWxuZXNzTWFwLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2RlZmF1bHREaWZmdXNlTWFwLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEdCdWZmZXI7IiwiaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gJy4uL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuLi9nbG1hdHJpeC92ZWMzJztcclxuaW1wb3J0IHZlYzIgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMic7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkuZ2VvbWV0cnkuQ29uZVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC50b3BSYWRpdXNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmJvdHRvbVJhZGl1c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5jYXBTZWdtZW50c11cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuaGVpZ2h0U2VnbWVudHNdXHJcbiAqL1xyXG52YXIgQ29uZSA9IEdlb21ldHJ5LmV4dGVuZCgvKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ29uZSMgKi8ge1xyXG4gICAgZHluYW1pYzogZmFsc2UsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRvcFJhZGl1czogMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGJvdHRvbVJhZGl1czogMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodDogMixcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGNhcFNlZ21lbnRzOiAyMCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGhlaWdodFNlZ21lbnRzOiAxXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5idWlsZCgpO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ29uZS5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZCBjb25lIGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGJ1aWxkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gW107XHJcbiAgICAgICAgdmFyIHRleGNvb3JkcyA9IFtdO1xyXG4gICAgICAgIHZhciBmYWNlcyA9IFtdO1xyXG4gICAgICAgIHBvc2l0aW9ucy5sZW5ndGggPSAwO1xyXG4gICAgICAgIHRleGNvb3Jkcy5sZW5ndGggPSAwO1xyXG4gICAgICAgIGZhY2VzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgLy8gVG9wIGNhcFxyXG4gICAgICAgIHZhciBjYXBTZWdSYWRpYWwgPSBNYXRoLlBJICogMiAvIHRoaXMuY2FwU2VnbWVudHM7XHJcblxyXG4gICAgICAgIHZhciB0b3BDYXAgPSBbXTtcclxuICAgICAgICB2YXIgYm90dG9tQ2FwID0gW107XHJcblxyXG4gICAgICAgIHZhciByMSA9IHRoaXMudG9wUmFkaXVzO1xyXG4gICAgICAgIHZhciByMiA9IHRoaXMuYm90dG9tUmFkaXVzO1xyXG4gICAgICAgIHZhciB5ID0gdGhpcy5oZWlnaHQgLyAyO1xyXG5cclxuICAgICAgICB2YXIgYzEgPSB2ZWMzLmZyb21WYWx1ZXMoMCwgeSwgMCk7XHJcbiAgICAgICAgdmFyIGMyID0gdmVjMy5mcm9tVmFsdWVzKDAsIC15LCAwKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FwU2VnbWVudHM7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgdGhldGEgPSBpICogY2FwU2VnUmFkaWFsO1xyXG4gICAgICAgICAgICB2YXIgeCA9IHIxICogTWF0aC5zaW4odGhldGEpO1xyXG4gICAgICAgICAgICB2YXIgeiA9IHIxICogTWF0aC5jb3ModGhldGEpO1xyXG4gICAgICAgICAgICB0b3BDYXAucHVzaCh2ZWMzLmZyb21WYWx1ZXMoeCwgeSwgeikpO1xyXG5cclxuICAgICAgICAgICAgeCA9IHIyICogTWF0aC5zaW4odGhldGEpO1xyXG4gICAgICAgICAgICB6ID0gcjIgKiBNYXRoLmNvcyh0aGV0YSk7XHJcbiAgICAgICAgICAgIGJvdHRvbUNhcC5wdXNoKHZlYzMuZnJvbVZhbHVlcyh4LCAteSwgeikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQnVpbGQgdG9wIGNhcFxyXG4gICAgICAgIHBvc2l0aW9ucy5wdXNoKGMxKTtcclxuICAgICAgICAvLyBGSVhNRVxyXG4gICAgICAgIHRleGNvb3Jkcy5wdXNoKHZlYzIuZnJvbVZhbHVlcygwLCAxKSk7XHJcbiAgICAgICAgdmFyIG4gPSB0aGlzLmNhcFNlZ21lbnRzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHRvcENhcFtpXSk7XHJcbiAgICAgICAgICAgIC8vIEZJWE1FXHJcbiAgICAgICAgICAgIHRleGNvb3Jkcy5wdXNoKHZlYzIuZnJvbVZhbHVlcyhpIC8gbiwgMCkpO1xyXG4gICAgICAgICAgICBmYWNlcy5wdXNoKFswLCBpKzEsIChpKzEpICUgbiArIDFdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEJ1aWxkIGJvdHRvbSBjYXBcclxuICAgICAgICB2YXIgb2Zmc2V0ID0gcG9zaXRpb25zLmxlbmd0aDtcclxuICAgICAgICBwb3NpdGlvbnMucHVzaChjMik7XHJcbiAgICAgICAgdGV4Y29vcmRzLnB1c2godmVjMi5mcm9tVmFsdWVzKDAsIDEpKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBwb3NpdGlvbnMucHVzaChib3R0b21DYXBbaV0pO1xyXG4gICAgICAgICAgICAvLyBGSVhNRVxyXG4gICAgICAgICAgICB0ZXhjb29yZHMucHVzaCh2ZWMyLmZyb21WYWx1ZXMoaSAvIG4sIDApKTtcclxuICAgICAgICAgICAgZmFjZXMucHVzaChbb2Zmc2V0LCBvZmZzZXQrKChpKzEpICUgbiArIDEpLCBvZmZzZXQraSsxXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBCdWlsZCBzaWRlXHJcbiAgICAgICAgb2Zmc2V0ID0gcG9zaXRpb25zLmxlbmd0aDtcclxuICAgICAgICB2YXIgbjIgPSB0aGlzLmhlaWdodFNlZ21lbnRzO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjIrMTsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdiA9IGogLyBuMjtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHZlYzMubGVycCh2ZWMzLmNyZWF0ZSgpLCB0b3BDYXBbaV0sIGJvdHRvbUNhcFtpXSwgdikpO1xyXG4gICAgICAgICAgICAgICAgdGV4Y29vcmRzLnB1c2godmVjMi5mcm9tVmFsdWVzKGkgLyBuLCB2KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuMjsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaTEgPSBpICogKG4yICsgMSkgKyBqO1xyXG4gICAgICAgICAgICAgICAgdmFyIGkyID0gKChpICsgMSkgJSBuKSAqIChuMiArIDEpICsgajtcclxuICAgICAgICAgICAgICAgIHZhciBpMyA9ICgoaSArIDEpICUgbikgKiAobjIgKyAxKSArIGogKyAxO1xyXG4gICAgICAgICAgICAgICAgdmFyIGk0ID0gaSAqIChuMiArIDEpICsgaiArIDE7XHJcbiAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKFtvZmZzZXQraTIsIG9mZnNldCtpMSwgb2Zmc2V0K2k0XSk7XHJcbiAgICAgICAgICAgICAgICBmYWNlcy5wdXNoKFtvZmZzZXQraTQsIG9mZnNldCtpMywgb2Zmc2V0K2kyXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbi5mcm9tQXJyYXkocG9zaXRpb25zKTtcclxuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMudGV4Y29vcmQwLmZyb21BcnJheSh0ZXhjb29yZHMpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRJbmRpY2VzRnJvbUFycmF5KGZhY2VzKTtcclxuXHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVZlcnRleE5vcm1hbHMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xyXG4gICAgICAgIHZhciByID0gTWF0aC5tYXgodGhpcy50b3BSYWRpdXMsIHRoaXMuYm90dG9tUmFkaXVzKTtcclxuICAgICAgICB0aGlzLmJvdW5kaW5nQm94Lm1pbi5zZXQoLXIsIC10aGlzLmhlaWdodC8yLCAtcik7XHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveC5tYXguc2V0KHIsIHRoaXMuaGVpZ2h0LzIsIHIpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbmU7XHJcbiIsImltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBDb25lR2VvbWV0cnkgZnJvbSAnLi9Db25lJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5nZW9tZXRyeS5DeWxpbmRlclxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0XVxyXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdC5yYWRpdXNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmhlaWdodF1cclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHQuY2FwU2VnbWVudHNdXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0LmhlaWdodFNlZ21lbnRzXVxyXG4gKi9cclxudmFyIEN5bGluZGVyID0gR2VvbWV0cnkuZXh0ZW5kKFxyXG4vKiogQGxlbmRzIGNsYXkuZ2VvbWV0cnkuQ3lsaW5kZXIjICovXHJcbntcclxuICAgIGR5bmFtaWM6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYWRpdXM6IDEsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBoZWlnaHQ6IDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBjYXBTZWdtZW50czogNTAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBoZWlnaHRTZWdtZW50czogMVxyXG59LCBmdW5jdGlvbigpIHtcclxuICAgIHRoaXMuYnVpbGQoKTtcclxufSxcclxuLyoqIEBsZW5kcyBjbGF5Lmdlb21ldHJ5LkN5bGluZGVyLnByb3RvdHlwZSAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIGN5bGluZGVyIGdlb21ldHJ5XHJcbiAgICAgKi9cclxuICAgIGJ1aWxkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgY29uZSA9IG5ldyBDb25lR2VvbWV0cnkoe1xyXG4gICAgICAgICAgICB0b3BSYWRpdXM6IHRoaXMucmFkaXVzLFxyXG4gICAgICAgICAgICBib3R0b21SYWRpdXM6IHRoaXMucmFkaXVzLFxyXG4gICAgICAgICAgICBjYXBTZWdtZW50czogdGhpcy5jYXBTZWdtZW50cyxcclxuICAgICAgICAgICAgaGVpZ2h0U2VnbWVudHM6IHRoaXMuaGVpZ2h0U2VnbWVudHMsXHJcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHRcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlID0gY29uZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5ub3JtYWwudmFsdWUgPSBjb25lLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy50ZXhjb29yZDAudmFsdWUgPSBjb25lLmF0dHJpYnV0ZXMudGV4Y29vcmQwLnZhbHVlO1xyXG4gICAgICAgIHRoaXMuaW5kaWNlcyA9IGNvbmUuaW5kaWNlcztcclxuXHJcbiAgICAgICAgdGhpcy5ib3VuZGluZ0JveCA9IGNvbmUuYm91bmRpbmdCb3g7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ3lsaW5kZXI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmxpZ2h0X3ZvbHVtZS52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG52YXJ5aW5nIHZlYzMgdl9Qb3NpdGlvbjtcXG52b2lkIG1haW4oKVxcbntcXG4gZ2xfUG9zaXRpb24gPSB3b3JsZFZpZXdQcm9qZWN0aW9uICogdmVjNChwb3NpdGlvbiwgMS4wKTtcXG4gdl9Qb3NpdGlvbiA9IHBvc2l0aW9uO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLnNwb3RfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbkBpbXBvcnQgY2xheS51dGlsLmNhbGN1bGF0ZV9hdHRlbnVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodFBvc2l0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodERpcmVjdGlvbjtcXG51bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcXG51bmlmb3JtIGZsb2F0IHVtYnJhQW5nbGVDb3NpbmU7XFxudW5pZm9ybSBmbG9hdCBwZW51bWJyYUFuZ2xlQ29zaW5lO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRSYW5nZTtcXG51bmlmb3JtIGZsb2F0IGZhbGxvZmZGYWN0b3I7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0U2hhZG93TWFwO1xcbnVuaWZvcm0gbWF0NCBsaWdodE1hdHJpeDtcXG51bmlmb3JtIGZsb2F0IGxpZ2h0U2hhZG93TWFwU2l6ZTtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkucGx1Z2luLnNoYWRvd19tYXBfY29tbW9uXFxudm9pZCBtYWluKClcXG57XFxuIEBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5nYnVmZmVyX3JlYWRcXG4gdmVjMyBMID0gbGlnaHRQb3NpdGlvbiAtIHBvc2l0aW9uO1xcbiB2ZWMzIFYgPSBub3JtYWxpemUoZXllUG9zaXRpb24gLSBwb3NpdGlvbik7XFxuIGZsb2F0IGRpc3QgPSBsZW5ndGgoTCk7XFxuIEwgLz0gZGlzdDtcXG4gZmxvYXQgYXR0ZW51YXRpb24gPSBsaWdodEF0dGVudWF0aW9uKGRpc3QsIGxpZ2h0UmFuZ2UpO1xcbiBmbG9hdCBjID0gZG90KC1ub3JtYWxpemUobGlnaHREaXJlY3Rpb24pLCBMKTtcXG4gZmxvYXQgZmFsbG9mZiA9IGNsYW1wKChjIC0gdW1icmFBbmdsZUNvc2luZSkgLyAocGVudW1icmFBbmdsZUNvc2luZSAtIHVtYnJhQW5nbGVDb3NpbmUpLCAwLjAsIDEuMCk7XFxuIGZhbGxvZmYgPSBwb3coZmFsbG9mZiwgZmFsbG9mZkZhY3Rvcik7XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kbCA9IGNsYW1wKGRvdChOLCBMKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSAoMS4wIC0gZmFsbG9mZikgKiBhdHRlbnVhdGlvbiAqIGxpZ2h0RXF1YXRpb24oXFxuIGxpZ2h0Q29sb3IsIGRpZmZ1c2VDb2xvciwgc3BlY3VsYXJDb2xvciwgbmRsLCBuZGgsIG5kdiwgZ2xvc3NpbmVzc1xcbiApO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbiBmbG9hdCBzaGFkb3dDb250cmliID0gY29tcHV0ZVNoYWRvd0NvbnRyaWIoXFxuIGxpZ2h0U2hhZG93TWFwLCBsaWdodE1hdHJpeCwgcG9zaXRpb24sIGxpZ2h0U2hhZG93TWFwU2l6ZVxcbiApO1xcbiBnbF9GcmFnQ29sb3IucmdiICo9IHNoYWRvd0NvbnRyaWI7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXFxuXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmRpcmVjdGlvbmFsX2xpZ2h0XFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2hlYWRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfZXF1YXRpb25cXG51bmlmb3JtIHZlYzMgbGlnaHREaXJlY3Rpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbnVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0U2hhZG93TWFwO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRTaGFkb3dNYXBTaXplO1xcbnVuaWZvcm0gbWF0NCBsaWdodE1hdHJpY2VzW1NIQURPV19DQVNDQURFXTtcXG51bmlmb3JtIGZsb2F0IHNoYWRvd0Nhc2NhZGVDbGlwc05lYXJbU0hBRE9XX0NBU0NBREVdO1xcbnVuaWZvcm0gZmxvYXQgc2hhZG93Q2FzY2FkZUNsaXBzRmFyW1NIQURPV19DQVNDQURFXTtcXG4jZW5kaWZcXG5AaW1wb3J0IGNsYXkucGx1Z2luLnNoYWRvd19tYXBfY29tbW9uXFxudm9pZCBtYWluKClcXG57XFxuIEBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5nYnVmZmVyX3JlYWRcXG4gdmVjMyBMID0gLW5vcm1hbGl6ZShsaWdodERpcmVjdGlvbik7XFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gdmVjMyBIID0gbm9ybWFsaXplKEwgKyBWKTtcXG4gZmxvYXQgbmRsID0gY2xhbXAoZG90KE4sIEwpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kaCA9IGNsYW1wKGRvdChOLCBIKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGxpZ2h0RXF1YXRpb24oXFxuIGxpZ2h0Q29sb3IsIGRpZmZ1c2VDb2xvciwgc3BlY3VsYXJDb2xvciwgbmRsLCBuZGgsIG5kdiwgZ2xvc3NpbmVzc1xcbiApO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbiBmbG9hdCBzaGFkb3dDb250cmliID0gMS4wO1xcbiBmb3IgKGludCBfaWR4XyA9IDA7IF9pZHhfIDwgU0hBRE9XX0NBU0NBREU7IF9pZHhfKyspIHt7XFxuIGlmIChcXG4geiA+PSBzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyW19pZHhfXSAmJlxcbiB6IDw9IHNoYWRvd0Nhc2NhZGVDbGlwc0ZhcltfaWR4X11cXG4gKSB7XFxuIHNoYWRvd0NvbnRyaWIgPSBjb21wdXRlU2hhZG93Q29udHJpYihcXG4gbGlnaHRTaGFkb3dNYXAsIGxpZ2h0TWF0cmljZXNbX2lkeF9dLCBwb3NpdGlvbiwgbGlnaHRTaGFkb3dNYXBTaXplLFxcbiB2ZWMyKDEuMCAvIGZsb2F0KFNIQURPV19DQVNDQURFKSwgMS4wKSxcXG4gdmVjMihmbG9hdChfaWR4XykgLyBmbG9hdChTSEFET1dfQ0FTQ0FERSksIDAuMClcXG4gKTtcXG4gfVxcbiB9fVxcbiBnbF9GcmFnQ29sb3IucmdiICo9IHNoYWRvd0NvbnRyaWI7XFxuI2VuZGlmXFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXFxuXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLmFtYmllbnRfbGlnaHRcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTE7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ0J1ZmZlclRleHR1cmUzO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gdmVjMiB3aW5kb3dTaXplOiBXSU5ET1dfU0laRTtcXG52b2lkIG1haW4oKVxcbntcXG4gdmVjMiB1diA9IGdsX0ZyYWdDb29yZC54eSAvIHdpbmRvd1NpemU7XFxuIHZlYzQgdGV4ZWwxID0gdGV4dHVyZTJEKGdCdWZmZXJUZXh0dXJlMSwgdXYpO1xcbiBpZiAoZG90KHRleGVsMS5yZ2IsIHZlYzMoMS4wKSkgPT0gMC4wKSB7XFxuIGRpc2NhcmQ7XFxuIH1cXG4gdmVjMyBhbGJlZG8gPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUzLCB1dikucmdiO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRDb2xvciAqIGFsYmVkbztcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcIjtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkuZGVmZXJyZWQuYW1iaWVudF9zaF9saWdodFxcbnVuaWZvcm0gc2FtcGxlcjJEIGdCdWZmZXJUZXh0dXJlMTtcXG51bmlmb3JtIHNhbXBsZXIyRCBnQnVmZmVyVGV4dHVyZTM7XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29lZmZpY2llbnRzWzldO1xcbnVuaWZvcm0gdmVjMiB3aW5kb3dTaXplOiBXSU5ET1dfU0laRTtcXG52ZWMzIGNhbGNBbWJpZW50U0hMaWdodCh2ZWMzIE4pIHtcXG4gcmV0dXJuIGxpZ2h0Q29lZmZpY2llbnRzWzBdXFxuICsgbGlnaHRDb2VmZmljaWVudHNbMV0gKiBOLnhcXG4gKyBsaWdodENvZWZmaWNpZW50c1syXSAqIE4ueVxcbiArIGxpZ2h0Q29lZmZpY2llbnRzWzNdICogTi56XFxuICsgbGlnaHRDb2VmZmljaWVudHNbNF0gKiBOLnggKiBOLnpcXG4gKyBsaWdodENvZWZmaWNpZW50c1s1XSAqIE4ueiAqIE4ueVxcbiArIGxpZ2h0Q29lZmZpY2llbnRzWzZdICogTi55ICogTi54XFxuICsgbGlnaHRDb2VmZmljaWVudHNbN10gKiAoMy4wICogTi56ICogTi56IC0gMS4wKVxcbiArIGxpZ2h0Q29lZmZpY2llbnRzWzhdICogKE4ueCAqIE4ueCAtIE4ueSAqIE4ueSk7XFxufVxcbnZvaWQgbWFpbigpXFxue1xcbiB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC8gd2luZG93U2l6ZTtcXG4gdmVjNCB0ZXhlbDEgPSB0ZXh0dXJlMkQoZ0J1ZmZlclRleHR1cmUxLCB1dik7XFxuIGlmIChkb3QodGV4ZWwxLnJnYiwgdmVjMygxLjApKSA9PSAwLjApIHtcXG4gZGlzY2FyZDtcXG4gfVxcbiB2ZWMzIE4gPSB0ZXhlbDEucmdiICogMi4wIC0gMS4wO1xcbiB2ZWMzIGFsYmVkbyA9IHRleHR1cmUyRChnQnVmZmVyVGV4dHVyZTMsIHV2KS5yZ2I7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBsaWdodENvbG9yICogYWxiZWRvICogY2FsY0FtYmllbnRTSExpZ2h0KE4pO1xcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5hbWJpZW50X2N1YmVtYXBfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gc2FtcGxlckN1YmUgbGlnaHRDdWJlbWFwO1xcbnVuaWZvcm0gc2FtcGxlcjJEIGJyZGZMb29rdXA7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS51dGlsLnJnYm1cXG52b2lkIG1haW4oKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMzIFYgPSBub3JtYWxpemUoZXllUG9zaXRpb24gLSBwb3NpdGlvbik7XFxuIHZlYzMgTCA9IHJlZmxlY3QoLVYsIE4pO1xcbiBmbG9hdCBuZHYgPSBjbGFtcChkb3QoTiwgViksIDAuMCwgMS4wKTtcXG4gZmxvYXQgcm91Z2ggPSBjbGFtcCgxLjAgLSBnbG9zc2luZXNzLCAwLjAsIDEuMCk7XFxuIGZsb2F0IGJpYXMgPSByb3VnaCAqIDUuMDtcXG4gdmVjMiBicmRmUGFyYW0gPSB0ZXh0dXJlMkQoYnJkZkxvb2t1cCwgdmVjMihyb3VnaCwgbmR2KSkueHk7XFxuIHZlYzMgZW52V2VpZ2h0ID0gc3BlY3VsYXJDb2xvciAqIGJyZGZQYXJhbS54ICsgYnJkZlBhcmFtLnk7XFxuIHZlYzMgZW52VGV4ZWwgPSBSR0JNRGVjb2RlKHRleHR1cmVDdWJlTG9kRVhUKGxpZ2h0Q3ViZW1hcCwgTCwgYmlhcyksIDguMTIpO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRDb2xvciAqIGVudlRleGVsICogZW52V2VpZ2h0O1xcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5wb2ludF9saWdodFxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9oZWFkXFxuQGltcG9ydCBjbGF5LnV0aWwuY2FsY3VsYXRlX2F0dGVudWF0aW9uXFxuQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmxpZ2h0X2VxdWF0aW9uXFxudW5pZm9ybSB2ZWMzIGxpZ2h0UG9zaXRpb247XFxudW5pZm9ybSB2ZWMzIGxpZ2h0Q29sb3I7XFxudW5pZm9ybSBmbG9hdCBsaWdodFJhbmdlO1xcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvbjtcXG4jaWZkZWYgU0hBRE9XTUFQX0VOQUJMRURcXG51bmlmb3JtIHNhbXBsZXJDdWJlIGxpZ2h0U2hhZG93TWFwO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRTaGFkb3dNYXBTaXplO1xcbiNlbmRpZlxcbnZhcnlpbmcgdmVjMyB2X1Bvc2l0aW9uO1xcbkBpbXBvcnQgY2xheS5wbHVnaW4uc2hhZG93X21hcF9jb21tb25cXG52b2lkIG1haW4oKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gcG9zaXRpb247XFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gTCAvPSBkaXN0O1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGwgPSBjbGFtcChkb3QoTiwgTCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmRoID0gY2xhbXAoZG90KE4sIEgpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IG5kdiA9IGNsYW1wKGRvdChOLCBWKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBhdHRlbnVhdGlvbiA9IGxpZ2h0QXR0ZW51YXRpb24oZGlzdCwgbGlnaHRSYW5nZSk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgPSBhdHRlbnVhdGlvbiAqIGxpZ2h0RXF1YXRpb24oXFxuIGxpZ2h0Q29sb3IsIGRpZmZ1c2VDb2xvciwgc3BlY3VsYXJDb2xvciwgbmRsLCBuZGgsIG5kdiwgZ2xvc3NpbmVzc1xcbiApO1xcbiNpZmRlZiBTSEFET1dNQVBfRU5BQkxFRFxcbiBmbG9hdCBzaGFkb3dDb250cmliID0gY29tcHV0ZVNoYWRvd0NvbnRyaWJPbW5pKFxcbiBsaWdodFNoYWRvd01hcCwgLUwgKiBkaXN0LCBsaWdodFJhbmdlXFxuICk7XFxuIGdsX0ZyYWdDb2xvci5yZ2IgKj0gY2xhbXAoc2hhZG93Q29udHJpYiwgMC4wLCAxLjApO1xcbiNlbmRpZlxcbiBnbF9GcmFnQ29sb3IuYSA9IDEuMDtcXG59XFxuQGVuZFwiO1xyXG4iLCJleHBvcnQgZGVmYXVsdCBcIkBleHBvcnQgY2xheS5kZWZlcnJlZC5zcGhlcmVfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS51dGlsLmNhbGN1bGF0ZV9hdHRlbnVhdGlvblxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodFBvc2l0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRSYW5nZTtcXG51bmlmb3JtIGZsb2F0IGxpZ2h0UmFkaXVzO1xcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvbjtcXG52YXJ5aW5nIHZlYzMgdl9Qb3NpdGlvbjtcXG52b2lkIG1haW4oKVxcbntcXG4gQGltcG9ydCBjbGF5LmRlZmVycmVkLmNodW5rLmdidWZmZXJfcmVhZFxcbiB2ZWMzIEwgPSBsaWdodFBvc2l0aW9uIC0gcG9zaXRpb247XFxuIHZlYzMgViA9IG5vcm1hbGl6ZShleWVQb3NpdGlvbiAtIHBvc2l0aW9uKTtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gdmVjMyBSID0gcmVmbGVjdChWLCBOKTtcXG4gZmxvYXQgdG1wID0gZG90KEwsIFIpO1xcbiB2ZWMzIGNUb1IgPSB0bXAgKiBSIC0gTDtcXG4gZmxvYXQgZCA9IGxlbmd0aChjVG9SKTtcXG4gTCA9IEwgKyBjVG9SICogY2xhbXAobGlnaHRSYWRpdXMgLyBkLCAwLjAsIDEuMCk7XFxuIEwgPSBub3JtYWxpemUoTCk7XFxuIHZlYzMgSCA9IG5vcm1hbGl6ZShMICsgVik7XFxuIGZsb2F0IG5kbCA9IGNsYW1wKGRvdChOLCBMKSwgMC4wLCAxLjApO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IGF0dGVudWF0aW9uID0gbGlnaHRBdHRlbnVhdGlvbihkaXN0LCBsaWdodFJhbmdlKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGxpZ2h0Q29sb3IgKiBuZGwgKiBhdHRlbnVhdGlvbjtcXG4gZ2xvc3NpbmVzcyA9IGNsYW1wKGdsb3NzaW5lc3MgLSBsaWdodFJhZGl1cyAvIDIuMCAvIGRpc3QsIDAuMCwgMS4wKTtcXG4gZ2xfRnJhZ0NvbG9yLnJnYiA9IGF0dGVudWF0aW9uICogbGlnaHRFcXVhdGlvbihcXG4gbGlnaHRDb2xvciwgZGlmZnVzZUNvbG9yLCBzcGVjdWxhckNvbG9yLCBuZGwsIG5kaCwgbmR2LCBnbG9zc2luZXNzXFxuICk7XFxuIGdsX0ZyYWdDb2xvci5hID0gMS4wO1xcbn1cXG5AZW5kXCI7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LmRlZmVycmVkLnR1YmVfbGlnaHRcXG5AaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsubGlnaHRfaGVhZFxcbkBpbXBvcnQgY2xheS51dGlsLmNhbGN1bGF0ZV9hdHRlbnVhdGlvblxcbkBpbXBvcnQgY2xheS5kZWZlcnJlZC5jaHVuay5saWdodF9lcXVhdGlvblxcbnVuaWZvcm0gdmVjMyBsaWdodFBvc2l0aW9uO1xcbnVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xcbnVuaWZvcm0gZmxvYXQgbGlnaHRSYW5nZTtcXG51bmlmb3JtIHZlYzMgbGlnaHRFeHRlbmQ7XFxudW5pZm9ybSB2ZWMzIGV5ZVBvc2l0aW9uO1xcbnZhcnlpbmcgdmVjMyB2X1Bvc2l0aW9uO1xcbnZvaWQgbWFpbigpXFxue1xcbiBAaW1wb3J0IGNsYXkuZGVmZXJyZWQuY2h1bmsuZ2J1ZmZlcl9yZWFkXFxuIHZlYzMgTCA9IGxpZ2h0UG9zaXRpb24gLSBwb3NpdGlvbjtcXG4gdmVjMyBWID0gbm9ybWFsaXplKGV5ZVBvc2l0aW9uIC0gcG9zaXRpb24pO1xcbiB2ZWMzIFIgPSByZWZsZWN0KFYsIE4pO1xcbiB2ZWMzIEwwID0gbGlnaHRQb3NpdGlvbiAtIGxpZ2h0RXh0ZW5kIC0gcG9zaXRpb247XFxuIHZlYzMgTDEgPSBsaWdodFBvc2l0aW9uICsgbGlnaHRFeHRlbmQgLSBwb3NpdGlvbjtcXG4gdmVjMyBMRCA9IEwxIC0gTDA7XFxuIGZsb2F0IGxlbjAgPSBsZW5ndGgoTDApO1xcbiBmbG9hdCBsZW4xID0gbGVuZ3RoKEwxKTtcXG4gZmxvYXQgaXJyYSA9IDIuMCAqIGNsYW1wKGRvdChOLCBMMCkgLyAoMi4wICogbGVuMCkgKyBkb3QoTiwgTDEpIC8gKDIuMCAqIGxlbjEpLCAwLjAsIDEuMCk7XFxuIGZsb2F0IExERG90UiA9IGRvdChSLCBMRCk7XFxuIGZsb2F0IHQgPSAoTEREb3RSICogZG90KFIsIEwwKSAtIGRvdChMMCwgTEQpKSAvIChkb3QoTEQsIExEKSAtIExERG90UiAqIExERG90Uik7XFxuIHQgPSBjbGFtcCh0LCAwLjAsIDEuMCk7XFxuIEwgPSBMMCArIHQgKiBMRDtcXG4gZmxvYXQgZGlzdCA9IGxlbmd0aChMKTtcXG4gTCAvPSBkaXN0O1xcbiB2ZWMzIEggPSBub3JtYWxpemUoTCArIFYpO1xcbiBmbG9hdCBuZGggPSBjbGFtcChkb3QoTiwgSCksIDAuMCwgMS4wKTtcXG4gZmxvYXQgbmR2ID0gY2xhbXAoZG90KE4sIFYpLCAwLjAsIDEuMCk7XFxuIGdsb3NzaW5lc3MgPSBjbGFtcChnbG9zc2luZXNzIC0gMC4wIC8gMi4wIC8gZGlzdCwgMC4wLCAxLjApO1xcbiBnbF9GcmFnQ29sb3IucmdiID0gbGlnaHRDb2xvciAqIGlycmEgKiBsaWdodEF0dGVudWF0aW9uKGRpc3QsIGxpZ2h0UmFuZ2UpXFxuICogKGRpZmZ1c2VDb2xvciArIERfUGhvbmcoZ2xvc3NpbmVzcywgbmRoKSAqIEZfU2NobGljayhuZHYsIHNwZWN1bGFyQ29sb3IpKTtcXG4gZ2xfRnJhZ0NvbG9yLmEgPSAxLjA7XFxufVxcbkBlbmRcIjtcclxuIiwiLy8gTGlnaHQtcHJlIHBhc3MgZGVmZXJyZWQgcmVuZGVyaW5nXHJcbi8vIGh0dHA6Ly93d3cucmVhbHRpbWVyZW5kZXJpbmcuY29tL2Jsb2cvZGVmZXJyZWQtbGlnaHRpbmctYXBwcm9hY2hlcy9cclxuaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5pbXBvcnQgTWF0ZXJpYWwgZnJvbSAnLi4vTWF0ZXJpYWwnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgRnVsbFF1YWRQYXNzIGZyb20gJy4uL2NvbXBvc2l0b3IvUGFzcyc7XHJcbmltcG9ydCBUZXh0dXJlMkQgZnJvbSAnLi4vVGV4dHVyZTJEJztcclxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vVGV4dHVyZSc7XHJcbmltcG9ydCBNZXNoIGZyb20gJy4uL01lc2gnO1xyXG5pbXBvcnQgU3BoZXJlR2VvIGZyb20gJy4uL2dlb21ldHJ5L1NwaGVyZSc7XHJcbmltcG9ydCBDb25lR2VvIGZyb20gJy4uL2dlb21ldHJ5L0NvbmUnO1xyXG5pbXBvcnQgQ3lsaW5kZXJHZW8gZnJvbSAnLi4vZ2VvbWV0cnkvQ3lsaW5kZXInO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tICcuLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgR0J1ZmZlciBmcm9tICcuL0dCdWZmZXInO1xyXG5cclxuaW1wb3J0IHByZXpHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvcHJlei5nbHNsLmpzJztcclxuaW1wb3J0IHV0aWxHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvdXRpbC5nbHNsLmpzJztcclxuXHJcbmltcG9ydCBsaWdodHZvbHVtZUdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9saWdodHZvbHVtZS5nbHNsLmpzJztcclxuLy8gTGlnaHQgc2hhZGVyc1xyXG5pbXBvcnQgc3BvdEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcG90Lmdsc2wuanMnO1xyXG5pbXBvcnQgZGlyZWN0aW9uYWxHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvZGlyZWN0aW9uYWwuZ2xzbC5qcyc7XHJcbmltcG9ydCBhbWJpZW50R2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL2FtYmllbnQuZ2xzbC5qcyc7XHJcbmltcG9ydCBhbWJpZW50c2hHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudHNoLmdsc2wuanMnO1xyXG5pbXBvcnQgYW1iaWVudGN1YmVtYXBHbHNsIGZyb20gJy4uL3NoYWRlci9zb3VyY2UvZGVmZXJyZWQvYW1iaWVudGN1YmVtYXAuZ2xzbC5qcyc7XHJcbmltcG9ydCBwb2ludEdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9wb2ludC5nbHNsLmpzJztcclxuaW1wb3J0IHNwaGVyZUdsc2wgZnJvbSAnLi4vc2hhZGVyL3NvdXJjZS9kZWZlcnJlZC9zcGhlcmUuZ2xzbC5qcyc7XHJcbmltcG9ydCB0dWJlR2xzbCBmcm9tICcuLi9zaGFkZXIvc291cmNlL2RlZmVycmVkL3R1YmUuZ2xzbC5qcyc7XHJcblxyXG5TaGFkZXIuaW1wb3J0KHByZXpHbHNsKTtcclxuU2hhZGVyLmltcG9ydCh1dGlsR2xzbCk7XHJcblNoYWRlci5pbXBvcnQobGlnaHR2b2x1bWVHbHNsKTtcclxuXHJcbi8vIExpZ2h0IHNoYWRlcnNcclxuU2hhZGVyLmltcG9ydChzcG90R2xzbCk7XHJcblNoYWRlci5pbXBvcnQoZGlyZWN0aW9uYWxHbHNsKTtcclxuU2hhZGVyLmltcG9ydChhbWJpZW50R2xzbCk7XHJcblNoYWRlci5pbXBvcnQoYW1iaWVudHNoR2xzbCk7XHJcblNoYWRlci5pbXBvcnQoYW1iaWVudGN1YmVtYXBHbHNsKTtcclxuU2hhZGVyLmltcG9ydChwb2ludEdsc2wpO1xyXG5TaGFkZXIuaW1wb3J0KHNwaGVyZUdsc2wpO1xyXG5TaGFkZXIuaW1wb3J0KHR1YmVHbHNsKTtcclxuXHJcblNoYWRlci5pbXBvcnQocHJlekdsc2wpO1xyXG5cclxuLyoqXHJcbiAqIERlZmVycmVkIHJlbmRlcmVyXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5kZWZlcnJlZC5SZW5kZXJlclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIERlZmVycmVkUmVuZGVyZXIgPSBCYXNlLmV4dGVuZChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdmFyIGZ1bGxRdWFkVmVydGV4ID0gU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLnZlcnRleCcpO1xyXG4gICAgdmFyIGxpZ2h0Vm9sdW1lVmVydGV4ID0gU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5saWdodF92b2x1bWUudmVydGV4Jyk7XHJcblxyXG4gICAgdmFyIGRpcmVjdGlvbmFsTGlnaHRTaGFkZXIgPSBuZXcgU2hhZGVyKGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmRpcmVjdGlvbmFsX2xpZ2h0JykpO1xyXG5cclxuICAgIHZhciBsaWdodEFjY3VtdWxhdGVCbGVuZEZ1bmMgPSBmdW5jdGlvbiAoZ2wpIHtcclxuICAgICAgICBnbC5ibGVuZEVxdWF0aW9uKGdsLkZVTkNfQUREKTtcclxuICAgICAgICBnbC5ibGVuZEZ1bmNTZXBhcmF0ZShnbC5PTkUsIGdsLk9ORSwgZ2wuT05FLCBnbC5PTkUpO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgY3JlYXRlTGlnaHRQYXNzTWF0ID0gZnVuY3Rpb24gKHNoYWRlcikge1xyXG4gICAgICAgIHJldHVybiBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IHNoYWRlcixcclxuICAgICAgICAgICAgYmxlbmQ6IGxpZ2h0QWNjdW11bGF0ZUJsZW5kRnVuYyxcclxuICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICAgICAgICAgIGRlcHRoTWFzazogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGNyZWF0ZVZvbHVtZVNoYWRlciA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTaGFkZXIobGlnaHRWb2x1bWVWZXJ0ZXgsIFNoYWRlci5zb3VyY2UoJ2NsYXkuZGVmZXJyZWQuJyArIG5hbWUpKTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gUm90YXRlIGFuZCBwb3NpdGlvbmluZyB0byBmaXQgdGhlIHNwb3QgbGlnaHRcclxuICAgIC8vIFdoaWNoIHRoZSBjdXNwIG9mIGNvbmUgcG9pbnRpbmcgdG8gdGhlIHBvc2l0aXZlIHpcclxuICAgIC8vIGFuZCBwb3NpdGlvbmVkIG9uIHRoZSBvcmlnaW5cclxuICAgIHZhciBjb25lR2VvID0gbmV3IENvbmVHZW8oe1xyXG4gICAgICAgIGNhcFNlZ21lbnRzOiAxMFxyXG4gICAgfSk7XHJcbiAgICB2YXIgbWF0ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgIG1hdC5yb3RhdGVYKE1hdGguUEkgLyAyKVxyXG4gICAgICAgIC50cmFuc2xhdGUobmV3IFZlY3RvcjMoMCwgLTEsIDApKTtcclxuXHJcbiAgICBjb25lR2VvLmFwcGx5VHJhbnNmb3JtKG1hdCk7XHJcblxyXG4gICAgdmFyIGN5bGluZGVyR2VvID0gbmV3IEN5bGluZGVyR2VvKHtcclxuICAgICAgICBjYXBTZWdtZW50czogMTBcclxuICAgIH0pO1xyXG4gICAgLy8gQWxpZ24gd2l0aCB4IGF4aXNcclxuICAgIG1hdC5pZGVudGl0eSgpLnJvdGF0ZVooTWF0aC5QSSAvIDIpO1xyXG4gICAgY3lsaW5kZXJHZW8uYXBwbHlUcmFuc2Zvcm0obWF0KTtcclxuXHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LmRlZmVycmVkLlJlbmRlcmVyIyAqLyB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFByb3ZpZGUgU2hhZG93TWFwUGFzcyBmb3Igc2hhZG93IHJlbmRlcmluZy5cclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5wcmVQYXNzLlNoYWRvd01hcH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzaGFkb3dNYXBQYXNzOiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGVuYWJsZSBhdXRvIHJlc2l6aW5nIGZyb20gZ2l2ZW4gZGVmdWFsdCByZW5kZXJlciBzaXplLlxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGF1dG9SZXNpemU6IHRydWUsXHJcblxyXG4gICAgICAgIF9jcmVhdGVMaWdodFBhc3NNYXQ6IGNyZWF0ZUxpZ2h0UGFzc01hdCxcclxuXHJcbiAgICAgICAgX2dCdWZmZXI6IG5ldyBHQnVmZmVyKCksXHJcblxyXG4gICAgICAgIF9saWdodEFjY3VtRnJhbWVCdWZmZXI6IG5ldyBGcmFtZUJ1ZmZlcigpLFxyXG5cclxuICAgICAgICBfbGlnaHRBY2N1bVRleDogbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIC8vIEZJWE1FIERldmljZSBub3Qgc3VwcG9ydCBmbG9hdCB0ZXh0dXJlXHJcbiAgICAgICAgICAgIHR5cGU6IFRleHR1cmUuSEFMRl9GTE9BVCxcclxuICAgICAgICAgICAgbWluRmlsdGVyOiBUZXh0dXJlLk5FQVJFU1QsXHJcbiAgICAgICAgICAgIG1hZ0ZpbHRlcjogVGV4dHVyZS5ORUFSRVNUXHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIF9mdWxsUXVhZFBhc3M6IG5ldyBGdWxsUXVhZFBhc3Moe1xyXG4gICAgICAgICAgICBibGVuZFdpdGhQcmV2aW91czogdHJ1ZVxyXG4gICAgICAgIH0pLFxyXG5cclxuICAgICAgICBfZGlyZWN0aW9uYWxMaWdodE1hdDogY3JlYXRlTGlnaHRQYXNzTWF0KGRpcmVjdGlvbmFsTGlnaHRTaGFkZXIpLFxyXG5cclxuICAgICAgICBfYW1iaWVudE1hdDogY3JlYXRlTGlnaHRQYXNzTWF0KG5ldyBTaGFkZXIoXHJcbiAgICAgICAgICAgIGZ1bGxRdWFkVmVydGV4LCBTaGFkZXIuc291cmNlKCdjbGF5LmRlZmVycmVkLmFtYmllbnRfbGlnaHQnKVxyXG4gICAgICAgICkpLFxyXG4gICAgICAgIF9hbWJpZW50U0hNYXQ6IGNyZWF0ZUxpZ2h0UGFzc01hdChuZXcgU2hhZGVyKFxyXG4gICAgICAgICAgICBmdWxsUXVhZFZlcnRleCwgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5hbWJpZW50X3NoX2xpZ2h0JylcclxuICAgICAgICApKSxcclxuICAgICAgICBfYW1iaWVudEN1YmVtYXBNYXQ6IGNyZWF0ZUxpZ2h0UGFzc01hdChuZXcgU2hhZGVyKFxyXG4gICAgICAgICAgICBmdWxsUXVhZFZlcnRleCwgU2hhZGVyLnNvdXJjZSgnY2xheS5kZWZlcnJlZC5hbWJpZW50X2N1YmVtYXBfbGlnaHQnKVxyXG4gICAgICAgICkpLFxyXG5cclxuICAgICAgICBfc3BvdExpZ2h0U2hhZGVyOiBjcmVhdGVWb2x1bWVTaGFkZXIoJ3Nwb3RfbGlnaHQnKSxcclxuICAgICAgICBfcG9pbnRMaWdodFNoYWRlcjogY3JlYXRlVm9sdW1lU2hhZGVyKCdwb2ludF9saWdodCcpLFxyXG5cclxuICAgICAgICBfc3BoZXJlTGlnaHRTaGFkZXI6IGNyZWF0ZVZvbHVtZVNoYWRlcignc3BoZXJlX2xpZ2h0JyksXHJcbiAgICAgICAgX3R1YmVMaWdodFNoYWRlcjogY3JlYXRlVm9sdW1lU2hhZGVyKCd0dWJlX2xpZ2h0JyksXHJcblxyXG4gICAgICAgIF9saWdodFNwaGVyZUdlbzogbmV3IFNwaGVyZUdlbyh7XHJcbiAgICAgICAgICAgIHdpZHRoU2VnbWVudHM6IDEwLFxyXG4gICAgICAgICAgICBoZWlnaHRTZWdlbWVudHM6IDEwXHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIF9saWdodENvbmVHZW86IGNvbmVHZW8sXHJcblxyXG4gICAgICAgIF9saWdodEN5bGluZGVyR2VvOiBjeWxpbmRlckdlbyxcclxuXHJcbiAgICAgICAgX291dHB1dFBhc3M6IG5ldyBGdWxsUXVhZFBhc3Moe1xyXG4gICAgICAgICAgICBmcmFnbWVudDogU2hhZGVyLnNvdXJjZSgnY2xheS5jb21wb3NpdG9yLm91dHB1dCcpXHJcbiAgICAgICAgfSlcclxuICAgIH07XHJcbn0sIC8qKiBAbGVuZHMgY2xheS5kZWZlcnJlZC5SZW5kZXJlciMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBEbyByZW5kZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5TY2VuZX0gc2NlbmVcclxuICAgICAqIEBwYXJhbSB7Y2xheS5DYW1lcmF9IGNhbWVyYVxyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5yZW5kZXJUb1RhcmdldCA9IGZhbHNlXSBJZiBub3Qgb3VwdXQgYW5kIHJlbmRlciB0byB0aGUgdGFyZ2V0IHRleHR1cmVcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMubm90VXBkYXRlU2hhZG93ID0gdHJ1ZV0gSWYgbm90IHVwZGF0ZSB0aGUgc2hhZG93LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5ub3RVcGRhdGVTY2VuZSA9IHRydWVdIElmIG5vdCB1cGRhdGUgdGhlIHNjZW5lLlxyXG4gICAgICovXHJcbiAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgb3B0cykge1xyXG5cclxuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcclxuICAgICAgICBvcHRzLnJlbmRlclRvVGFyZ2V0ID0gb3B0cy5yZW5kZXJUb1RhcmdldCB8fCBmYWxzZTtcclxuICAgICAgICBvcHRzLm5vdFVwZGF0ZVNoYWRvdyA9IG9wdHMubm90VXBkYXRlU2hhZG93IHx8IGZhbHNlO1xyXG4gICAgICAgIG9wdHMubm90VXBkYXRlU2NlbmUgPSBvcHRzLm5vdFVwZGF0ZVNjZW5lIHx8IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoIW9wdHMubm90VXBkYXRlU2NlbmUpIHtcclxuICAgICAgICAgICAgc2NlbmUudXBkYXRlKGZhbHNlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2NlbmUudXBkYXRlTGlnaHRzKCk7XHJcbiAgICAgICAgLy8gUmVuZGVyIGxpc3Qgd2lsbCBiZSB1cGRhdGVkIGluIGdidWZmZXIuXHJcblxyXG4gICAgICAgIGNhbWVyYS51cGRhdGUodHJ1ZSk7XHJcblxyXG4gICAgICAgIC8vIFBFTkRJTkcgRm9yIHN0ZXJlbyByZW5kZXJpbmdcclxuICAgICAgICB2YXIgZHByID0gcmVuZGVyZXIuZ2V0RGV2aWNlUGl4ZWxSYXRpbygpO1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9SZXNpemVcclxuICAgICAgICAgICAgJiYgKHJlbmRlcmVyLmdldFdpZHRoKCkgKiBkcHIgIT09IHRoaXMuX2xpZ2h0QWNjdW1UZXgud2lkdGhcclxuICAgICAgICAgICAgfHwgcmVuZGVyZXIuZ2V0SGVpZ2h0KCkgKiBkcHIgIT09IHRoaXMuX2xpZ2h0QWNjdW1UZXguaGVpZ2h0KVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZShyZW5kZXJlci5nZXRXaWR0aCgpICogZHByLCByZW5kZXJlci5nZXRIZWlnaHQoKSAqIGRwcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9nQnVmZmVyLnVwZGF0ZShyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XHJcblxyXG4gICAgICAgIC8vIEFjY3VtdWxhdGUgbGlnaHQgYnVmZmVyXHJcbiAgICAgICAgdGhpcy5fYWNjdW11bGF0ZUxpZ2h0QnVmZmVyKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCAhb3B0cy5ub3RVcGRhdGVTaGFkb3cpO1xyXG5cclxuICAgICAgICBpZiAoIW9wdHMucmVuZGVyVG9UYXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0UGFzcy5zZXRVbmlmb3JtKCd0ZXh0dXJlJywgdGhpcy5fbGlnaHRBY2N1bVRleCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9vdXRwdXRQYXNzLnJlbmRlcihyZW5kZXJlcik7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuX2dCdWZmZXIucmVuZGVyRGVidWcocmVuZGVyZXIsIGNhbWVyYSwgJ25vcm1hbCcpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlRleHR1cmUyRH1cclxuICAgICAqL1xyXG4gICAgZ2V0VGFyZ2V0VGV4dHVyZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9saWdodEFjY3VtVGV4O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEByZXR1cm4ge2NsYXkuRnJhbWVCdWZmZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldFRhcmdldEZyYW1lQnVmZmVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlcjtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LmRlZmVycmVkLkdCdWZmZXJ9XHJcbiAgICAgKi9cclxuICAgIGdldEdCdWZmZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ0J1ZmZlcjtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gVE9ETyBpcyBkcHIgbmVlZGVkP1xyXG4gICAgc2V0Vmlld3BvcnQ6IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkcHIpIHtcclxuICAgICAgICB0aGlzLl9nQnVmZmVyLnNldFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQsIGRwcik7XHJcbiAgICAgICAgdGhpcy5fbGlnaHRBY2N1bUZyYW1lQnVmZmVyLnZpZXdwb3J0ID0gdGhpcy5fZ0J1ZmZlci5nZXRWaWV3cG9ydCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvLyBnZXRGdWxsUXVhZExpZ2h0UGFzczogZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gICAgIHJldHVybiB0aGlzLl9mdWxsUXVhZFBhc3M7XHJcbiAgICAvLyB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHJlbmRlcmVyIHNpemUuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcclxuICAgICAqL1xyXG4gICAgcmVzaXplOiBmdW5jdGlvbiAod2lkdGgsIGhlaWdodCkge1xyXG4gICAgICAgIHRoaXMuX2xpZ2h0QWNjdW1UZXgud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLl9saWdodEFjY3VtVGV4LmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgICAgLy8gUEVORElORyB2aWV3cG9ydCA/XHJcbiAgICAgICAgdGhpcy5fZ0J1ZmZlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9hY2N1bXVsYXRlTGlnaHRCdWZmZXI6IGZ1bmN0aW9uIChyZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdXBkYXRlU2hhZG93KSB7XHJcbiAgICAgICAgdmFyIGdsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgdmFyIGxpZ2h0QWNjdW1UZXggPSB0aGlzLl9saWdodEFjY3VtVGV4O1xyXG4gICAgICAgIHZhciBsaWdodEFjY3VtRnJhbWVCdWZmZXIgPSB0aGlzLl9saWdodEFjY3VtRnJhbWVCdWZmZXI7XHJcblxyXG4gICAgICAgIHZhciBleWVQb3NpdGlvbiA9IGNhbWVyYS5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXk7XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB2b2x1bWUgbWVzaGVzXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY2VuZS5saWdodHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCFzY2VuZS5saWdodHNbaV0uaW52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVMaWdodFByb3h5KHNjZW5lLmxpZ2h0c1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzaGFkb3dNYXBQYXNzID0gdGhpcy5zaGFkb3dNYXBQYXNzO1xyXG4gICAgICAgIGlmIChzaGFkb3dNYXBQYXNzICYmIHVwZGF0ZVNoYWRvdykge1xyXG4gICAgICAgICAgICBnbC5jbGVhckNvbG9yKDEsIDEsIDEsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLl9wcmVwYXJlTGlnaHRTaGFkb3cocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdiZWZvcmVsaWdodGFjY3VtdWxhdGUnLCByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgdXBkYXRlU2hhZG93KTtcclxuXHJcbiAgICAgICAgbGlnaHRBY2N1bUZyYW1lQnVmZmVyLmF0dGFjaChsaWdodEFjY3VtVGV4KTtcclxuICAgICAgICBsaWdodEFjY3VtRnJhbWVCdWZmZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgdmFyIGNsZWFyQ29sb3IgPSByZW5kZXJlci5jbGVhckNvbG9yO1xyXG5cclxuICAgICAgICB2YXIgdmlld3BvcnQgPSBsaWdodEFjY3VtRnJhbWVCdWZmZXIudmlld3BvcnQ7XHJcbiAgICAgICAgaWYgKHZpZXdwb3J0KSB7XHJcbiAgICAgICAgICAgIHZhciBkcHIgPSB2aWV3cG9ydC5kZXZpY2VQaXhlbFJhdGlvO1xyXG4gICAgICAgICAgICAvLyB1c2Ugc2Npc3NvciB0byBtYWtlIHN1cmUgb25seSBjbGVhciB0aGUgdmlld3BvcnRcclxuICAgICAgICAgICAgZ2wuZW5hYmxlKGdsLlNDSVNTT1JfVEVTVCk7XHJcbiAgICAgICAgICAgIGdsLnNjaXNzb3Iodmlld3BvcnQueCAqIGRwciwgdmlld3BvcnQueSAqIGRwciwgdmlld3BvcnQud2lkdGggKiBkcHIsIHZpZXdwb3J0LmhlaWdodCAqIGRwcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdsLmNsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7XHJcbiAgICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7XHJcbiAgICAgICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcclxuICAgICAgICBpZiAodmlld3BvcnQpIHtcclxuICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdzdGFydGxpZ2h0YWNjdW11bGF0ZScsIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKTtcclxuXHJcbiAgICAgICAgdmFyIHZpZXdQcm9qZWN0aW9uSW52ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHZpZXdQcm9qZWN0aW9uSW52LCBjYW1lcmEud29ybGRUcmFuc2Zvcm0sIGNhbWVyYS5pbnZQcm9qZWN0aW9uTWF0cml4KTtcclxuXHJcbiAgICAgICAgdmFyIHZvbHVtZU1lc2hMaXN0ID0gW107XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NlbmUubGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBsaWdodCA9IHNjZW5lLmxpZ2h0c1tpXTtcclxuICAgICAgICAgICAgaWYgKGxpZ2h0LmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciB1VHBsID0gbGlnaHQudW5pZm9ybVRlbXBsYXRlcztcclxuXHJcbiAgICAgICAgICAgIHZhciB2b2x1bWVNZXNoID0gbGlnaHQudm9sdW1lTWVzaCB8fCBsaWdodC5fX3ZvbHVtZU1lc2g7XHJcblxyXG4gICAgICAgICAgICBpZiAodm9sdW1lTWVzaCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGVyaWFsID0gdm9sdW1lTWVzaC5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICAgIC8vIFZvbHVtZSBtZXNoIHdpbGwgYWZmZWN0IHRoZSBzY2VuZSBib3VuZGluZyBib3ggd2hlbiByZW5kZXJpbmdcclxuICAgICAgICAgICAgICAgIC8vIGlmIGNhc3RTaGFkb3cgaXMgdHJ1ZVxyXG4gICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5jYXN0U2hhZG93ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHVua25vd25MaWdodFR5cGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAobGlnaHQudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BPSU5UX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwucG9pbnRMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UmFuZ2UnLCB1VHBsLnBvaW50TGlnaHRSYW5nZS52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFBvc2l0aW9uJywgdVRwbC5wb2ludExpZ2h0UG9zaXRpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnU1BPVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UG9zaXRpb24nLCB1VHBsLnNwb3RMaWdodFBvc2l0aW9uLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLnNwb3RMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UmFuZ2UnLCB1VHBsLnNwb3RMaWdodFJhbmdlLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0RGlyZWN0aW9uJywgdVRwbC5zcG90TGlnaHREaXJlY3Rpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgndW1icmFBbmdsZUNvc2luZScsIHVUcGwuc3BvdExpZ2h0VW1icmFBbmdsZUNvc2luZS52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdwZW51bWJyYUFuZ2xlQ29zaW5lJywgdVRwbC5zcG90TGlnaHRQZW51bWJyYUFuZ2xlQ29zaW5lLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2ZhbGxvZmZGYWN0b3InLCB1VHBsLnNwb3RMaWdodEZhbGxvZmZGYWN0b3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnU1BIRVJFX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuc3BoZXJlTGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFJhbmdlJywgdVRwbC5zcGhlcmVMaWdodFJhbmdlLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UmFkaXVzJywgdVRwbC5zcGhlcmVMaWdodFJhZGl1cy52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFBvc2l0aW9uJywgdVRwbC5zcGhlcmVMaWdodFBvc2l0aW9uLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1RVQkVfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvbG9yJywgdVRwbC50dWJlTGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFJhbmdlJywgdVRwbC50dWJlTGlnaHRSYW5nZS52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodEV4dGVuZCcsIHVUcGwudHViZUxpZ2h0RXh0ZW5kLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0UG9zaXRpb24nLCB1VHBsLnR1YmVMaWdodFBvc2l0aW9uLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd25MaWdodFR5cGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh1bmtub3duTGlnaHRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnZXllUG9zaXRpb24nLCBleWVQb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCd2aWV3UHJvamVjdGlvbkludicsIHZpZXdQcm9qZWN0aW9uSW52LmFycmF5KTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMScsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTEoKSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTInLCB0aGlzLl9nQnVmZmVyLmdldFRhcmdldFRleHR1cmUyKCkpO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUzJywgdGhpcy5fZ0J1ZmZlci5nZXRUYXJnZXRUZXh0dXJlMygpKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2b2x1bWVNZXNoTGlzdC5wdXNoKHZvbHVtZU1lc2gpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXNzID0gdGhpcy5fZnVsbFF1YWRQYXNzO1xyXG4gICAgICAgICAgICAgICAgdmFyIHVua25vd25MaWdodFR5cGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vIEZ1bGwgcXVhZCBsaWdodFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChsaWdodC50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQU1CSUVOVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwgPSB0aGlzLl9hbWJpZW50TWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLmFtYmllbnRMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0FNQklFTlRfU0hfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsID0gdGhpcy5fYW1iaWVudFNITWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLmFtYmllbnRTSExpZ2h0Q29sb3IudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodENvZWZmaWNpZW50cycsIHVUcGwuYW1iaWVudFNITGlnaHRDb2VmZmljaWVudHMudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQU1CSUVOVF9DVUJFTUFQX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbCA9IHRoaXMuX2FtYmllbnRDdWJlbWFwTWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q29sb3InLCB1VHBsLmFtYmllbnRDdWJlbWFwTGlnaHRDb2xvci52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0Q3ViZW1hcCcsIHVUcGwuYW1iaWVudEN1YmVtYXBMaWdodEN1YmVtYXAudmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy5tYXRlcmlhbC5zZXRVbmlmb3JtKCdicmRmTG9va3VwJywgdVRwbC5hbWJpZW50Q3ViZW1hcExpZ2h0QlJERkxvb2t1cC52YWx1ZShsaWdodCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdESVJFQ1RJT05BTF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNTaGFkb3cgPSBzaGFkb3dNYXBQYXNzICYmIGxpZ2h0LmNhc3RTaGFkb3c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwgPSB0aGlzLl9kaXJlY3Rpb25hbExpZ2h0TWF0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzLm1hdGVyaWFsW2hhc1NoYWRvdyA/ICdkZWZpbmUnIDogJ3VuZGVmaW5lJ10oJ2ZyYWdtZW50JywgJ1NIQURPV01BUF9FTkFCTEVEJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNTaGFkb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuZGVmaW5lKCdmcmFnbWVudCcsICdTSEFET1dfQ0FTQ0FERScsIGxpZ2h0LnNoYWRvd0Nhc2NhZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRDb2xvcicsIHVUcGwuZGlyZWN0aW9uYWxMaWdodENvbG9yLnZhbHVlKGxpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MubWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHREaXJlY3Rpb24nLCB1VHBsLmRpcmVjdGlvbmFsTGlnaHREaXJlY3Rpb24udmFsdWUobGlnaHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5rb253IGxpZ2h0IHR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93bkxpZ2h0VHlwZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodW5rbm93bkxpZ2h0VHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBwYXNzTWF0ZXJpYWwgPSBwYXNzLm1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2V5ZVBvc2l0aW9uJywgZXllUG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ3ZpZXdQcm9qZWN0aW9uSW52Jywgdmlld1Byb2plY3Rpb25JbnYuYXJyYXkpO1xyXG4gICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2dCdWZmZXJUZXh0dXJlMScsIHRoaXMuX2dCdWZmZXIuZ2V0VGFyZ2V0VGV4dHVyZTEoKSk7XHJcbiAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnZ0J1ZmZlclRleHR1cmUyJywgdGhpcy5fZ0J1ZmZlci5nZXRUYXJnZXRUZXh0dXJlMigpKTtcclxuICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdnQnVmZmVyVGV4dHVyZTMnLCB0aGlzLl9nQnVmZmVyLmdldFRhcmdldFRleHR1cmUzKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFRPRE9cclxuICAgICAgICAgICAgICAgIGlmIChzaGFkb3dNYXBQYXNzICYmIGxpZ2h0LmNhc3RTaGFkb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXAnLCBsaWdodC5fX3NoYWRvd01hcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFzc01hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0TWF0cmljZXMnLCBsaWdodC5fX2xpZ2h0TWF0cmljZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhc3NNYXRlcmlhbC5zZXRVbmlmb3JtKCdzaGFkb3dDYXNjYWRlQ2xpcHNOZWFyJywgbGlnaHQuX19jYXNjYWRlQ2xpcHNOZWFyKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnc2hhZG93Q2FzY2FkZUNsaXBzRmFyJywgbGlnaHQuX19jYXNjYWRlQ2xpcHNGYXIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBwYXNzTWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXBTaXplJywgbGlnaHQuc2hhZG93UmVzb2x1dGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGFzcy5yZW5kZXJRdWFkKHJlbmRlcmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyVm9sdW1lTWVzaExpc3QocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIHZvbHVtZU1lc2hMaXN0KTtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdsaWdodGFjY3VtdWxhdGUnLCByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSk7XHJcblxyXG4gICAgICAgIGxpZ2h0QWNjdW1GcmFtZUJ1ZmZlci51bmJpbmQocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIoJ2FmdGVybGlnaHRhY2N1bXVsYXRlJywgcmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgX3ByZXBhcmVMaWdodFNoYWRvdzogKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgd29ybGRWaWV3ID0gbmV3IE1hdHJpeDQoKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhKSB7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjZW5lLmxpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpZ2h0ID0gc2NlbmUubGlnaHRzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZvbHVtZU1lc2ggPSBsaWdodC52b2x1bWVNZXNoIHx8IGxpZ2h0Ll9fdm9sdW1lTWVzaDtcclxuICAgICAgICAgICAgICAgIGlmICghbGlnaHQuY2FzdFNoYWRvdyB8fCBsaWdodC5pbnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGxpZ2h0LnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdQT0lOVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnU1BPVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZydXN0dW0gY3VsbGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRyaXg0Lm11bHRpcGx5KHdvcmxkVmlldywgY2FtZXJhLnZpZXdNYXRyaXgsIHZvbHVtZU1lc2gud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NlbmUuaXNGcnVzdHVtQ3VsbGVkKHZvbHVtZU1lc2gsIGNhbWVyYSwgd29ybGRWaWV3LmFycmF5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVTaW5nbGVMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBsaWdodCwgdm9sdW1lTWVzaC5tYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdESVJFQ1RJT05BTF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVTaW5nbGVMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBsaWdodCwgbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH0pKCksXHJcblxyXG4gICAgX3ByZXBhcmVTaW5nbGVMaWdodFNoYWRvdzogZnVuY3Rpb24gKHJlbmRlcmVyLCBzY2VuZSwgY2FtZXJhLCBsaWdodCwgbWF0ZXJpYWwpIHtcclxuICAgICAgICBzd2l0Y2ggKGxpZ2h0LnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnUE9JTlRfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgdmFyIHNoYWRvd01hcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhZG93TWFwUGFzcy5yZW5kZXJQb2ludExpZ2h0U2hhZG93KFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLCBzY2VuZSwgbGlnaHQsIHNoYWRvd01hcHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodFNoYWRvd01hcCcsIHNoYWRvd01hcHNbMF0pO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXBTaXplJywgbGlnaHQuc2hhZG93UmVzb2x1dGlvbik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnU1BPVF9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICB2YXIgc2hhZG93TWFwcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIGxpZ2h0TWF0cmljZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhZG93TWFwUGFzcy5yZW5kZXJTcG90TGlnaHRTaGFkb3coXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIsIHNjZW5lLCBsaWdodCwgbGlnaHRNYXRyaWNlcywgc2hhZG93TWFwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldFVuaWZvcm0oJ2xpZ2h0U2hhZG93TWFwJywgc2hhZG93TWFwc1swXSk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zZXRVbmlmb3JtKCdsaWdodE1hdHJpeCcsIGxpZ2h0TWF0cmljZXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2V0VW5pZm9ybSgnbGlnaHRTaGFkb3dNYXBTaXplJywgbGlnaHQuc2hhZG93UmVzb2x1dGlvbik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnRElSRUNUSU9OQUxfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgdmFyIHNoYWRvd01hcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciBsaWdodE1hdHJpY2VzID0gW107XHJcbiAgICAgICAgICAgICAgICB2YXIgY2FzY2FkZUNsaXBzID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYWRvd01hcFBhc3MucmVuZGVyRGlyZWN0aW9uYWxMaWdodFNoYWRvdyhcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJlciwgc2NlbmUsIGNhbWVyYSwgbGlnaHQsIGNhc2NhZGVDbGlwcywgbGlnaHRNYXRyaWNlcywgc2hhZG93TWFwc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHZhciBjYXNjYWRlQ2xpcHNOZWFyID0gY2FzY2FkZUNsaXBzLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2FzY2FkZUNsaXBzRmFyID0gY2FzY2FkZUNsaXBzLnNsaWNlKCk7XHJcbiAgICAgICAgICAgICAgICBjYXNjYWRlQ2xpcHNOZWFyLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgY2FzY2FkZUNsaXBzRmFyLnNoaWZ0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSBmcm9tIGZhciB0byBuZWFyXHJcbiAgICAgICAgICAgICAgICBjYXNjYWRlQ2xpcHNOZWFyLnJldmVyc2UoKTtcclxuICAgICAgICAgICAgICAgIGNhc2NhZGVDbGlwc0Zhci5yZXZlcnNlKCk7XHJcbiAgICAgICAgICAgICAgICBsaWdodE1hdHJpY2VzLnJldmVyc2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsaWdodC5fX2Nhc2NhZGVDbGlwc05lYXIgPSBjYXNjYWRlQ2xpcHNOZWFyO1xyXG4gICAgICAgICAgICAgICAgbGlnaHQuX19jYXNjYWRlQ2xpcHNGYXIgPSBjYXNjYWRlQ2xpcHNGYXI7XHJcbiAgICAgICAgICAgICAgICBsaWdodC5fX3NoYWRvd01hcCA9IHNoYWRvd01hcHNbMF07XHJcbiAgICAgICAgICAgICAgICBsaWdodC5fX2xpZ2h0TWF0cmljZXMgPSBsaWdodE1hdHJpY2VzO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBVcGRhdGUgbGlnaHQgdm9sdW1lIG1lc2hcclxuICAgIC8vIExpZ2h0IHZvbHVtZSBtZXNoIGlzIHJlbmRlcmVkIGluIGxpZ2h0IGFjY3VtdWxhdGUgcGFzcyBpbnN0ZWFkIG9mIGZ1bGwgcXVhZC5cclxuICAgIC8vIEl0IHdpbGwgcmVkdWNlIHBpeGVscyBzaWduaWZpY2FudGx5IHdoZW4gbG9jYWwgbGlnaHQgaXMgcmVsYXRpdmVseSBzbWFsbC5cclxuICAgIC8vIEFuZCB3ZSBjYW4gdXNlIGN1c3RvbSB2b2x1bWUgbWVzaCB0byBzaGFwZSB0aGUgbGlnaHQuXHJcbiAgICAvL1xyXG4gICAgLy8gU2VlIFwiRGVmZXJyZWQgU2hhZGluZyBPcHRpbWl6YXRpb25zXCIgaW4gR0RDMjAxMVxyXG4gICAgX3VwZGF0ZUxpZ2h0UHJveHk6IGZ1bmN0aW9uIChsaWdodCkge1xyXG4gICAgICAgIHZhciB2b2x1bWVNZXNoO1xyXG4gICAgICAgIGlmIChsaWdodC52b2x1bWVNZXNoKSB7XHJcbiAgICAgICAgICAgIHZvbHVtZU1lc2ggPSBsaWdodC52b2x1bWVNZXNoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc3dpdGNoIChsaWdodC50eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBPbmx5IGxvY2FsIGxpZ2h0IChwb2ludCBhbmQgc3BvdCkgbmVlZHMgdm9sdW1lIG1lc2guXHJcbiAgICAgICAgICAgICAgICAvLyBEaXJlY3Rpb25hbCBhbmQgYW1iaWVudCBsaWdodCByZW5kZXJzIGluIGZ1bGwgcXVhZFxyXG4gICAgICAgICAgICAgICAgY2FzZSAnUE9JTlRfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnU1BIRVJFX0xJR0hUJzpcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2hhZGVyID0gbGlnaHQudHlwZSA9PT0gJ1NQSEVSRV9MSUdIVCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9zcGhlcmVMaWdodFNoYWRlciA6IHRoaXMuX3BvaW50TGlnaHRTaGFkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVm9sdW1lIG1lc2ggY3JlYXRlZCBhdXRvbWF0aWNhbGx5XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFsaWdodC5fX3ZvbHVtZU1lc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHQuX192b2x1bWVNZXNoID0gbmV3IE1lc2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWw6IHRoaXMuX2NyZWF0ZUxpZ2h0UGFzc01hdChzaGFkZXIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IHRoaXMuX2xpZ2h0U3BoZXJlR2VvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBjdWxsaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBsaWdodCB2b2x1bWUgbWVzaCBpbnRlcnNlY3QgY2FtZXJhIG5lYXIgcGxhbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgbWVzaCBpbnNpZGUgY2FuIHN0aWxsIGJlIHJlbmRlcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdWxsaW5nOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdm9sdW1lTWVzaCA9IGxpZ2h0Ll9fdm9sdW1lTWVzaDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgciA9IGxpZ2h0LnJhbmdlICsgKGxpZ2h0LnJhZGl1cyB8fCAwKTtcclxuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoLnNjYWxlLnNldChyLCByLCByKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ1NQT1RfTElHSFQnOlxyXG4gICAgICAgICAgICAgICAgICAgIGxpZ2h0Ll9fdm9sdW1lTWVzaCA9IGxpZ2h0Ll9fdm9sdW1lTWVzaCB8fCBuZXcgTWVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsOiB0aGlzLl9jcmVhdGVMaWdodFBhc3NNYXQodGhpcy5fc3BvdExpZ2h0U2hhZGVyKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IHRoaXMuX2xpZ2h0Q29uZUdlbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VsbGluZzogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhc3BlY3QgPSBNYXRoLnRhbihsaWdodC5wZW51bWJyYUFuZ2xlICogTWF0aC5QSSAvIDE4MCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gbGlnaHQucmFuZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5zY2FsZS5zZXQoYXNwZWN0ICogcmFuZ2UsIGFzcGVjdCAqIHJhbmdlLCByYW5nZSAvIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnVFVCRV9MSUdIVCc6XHJcbiAgICAgICAgICAgICAgICAgICAgbGlnaHQuX192b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoIHx8IG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWw6IHRoaXMuX2NyZWF0ZUxpZ2h0UGFzc01hdCh0aGlzLl90dWJlTGlnaHRTaGFkZXIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogdGhpcy5fbGlnaHRDeWxpbmRlckdlbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VsbGluZzogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB2b2x1bWVNZXNoID0gbGlnaHQuX192b2x1bWVNZXNoO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IGxpZ2h0LnJhbmdlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZU1lc2guc2NhbGUuc2V0KGxpZ2h0Lmxlbmd0aCAvIDIgKyByYW5nZSwgcmFuZ2UsIHJhbmdlKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodm9sdW1lTWVzaCkge1xyXG4gICAgICAgICAgICB2b2x1bWVNZXNoLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAvLyBBcHBseSBsaWdodCB0cmFuc2Zvcm1cclxuICAgICAgICAgICAgTWF0cml4NC5tdWx0aXBseSh2b2x1bWVNZXNoLndvcmxkVHJhbnNmb3JtLCBsaWdodC53b3JsZFRyYW5zZm9ybSwgdm9sdW1lTWVzaC53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIHZhciBoYXNTaGFkb3cgPSB0aGlzLnNoYWRvd01hcFBhc3MgJiYgbGlnaHQuY2FzdFNoYWRvdztcclxuICAgICAgICAgICAgdm9sdW1lTWVzaC5tYXRlcmlhbFtoYXNTaGFkb3cgPyAnZGVmaW5lJyA6ICd1bmRlZmluZSddKCdmcmFnbWVudCcsICdTSEFET1dNQVBfRU5BQkxFRCcpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3JlbmRlclZvbHVtZU1lc2hMaXN0OiAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB3b3JsZFZpZXcgPSBuZXcgTWF0cml4NCgpO1xyXG4gICAgICAgIHZhciBwcmVaTWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5wcmV6LnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnByZXouZnJhZ21lbnQnKSlcclxuICAgICAgICB9KTtcclxuICAgICAgICBmdW5jdGlvbiBnZXRQcmVaTWF0ZXJpYWwoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwcmVaTWF0ZXJpYWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAocmVuZGVyZXIsIHNjZW5lLCBjYW1lcmEsIHZvbHVtZU1lc2hMaXN0KSB7XHJcbiAgICAgICAgICAgIHZhciBnbCA9IHJlbmRlcmVyLmdsO1xyXG5cclxuICAgICAgICAgICAgZ2wuZGVwdGhGdW5jKGdsLkxFUVVBTCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZvbHVtZU1lc2hMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdm9sdW1lTWVzaCA9IHZvbHVtZU1lc2hMaXN0W2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEZydXN0dW0gY3VsbGluZ1xyXG4gICAgICAgICAgICAgICAgTWF0cml4NC5tdWx0aXBseSh3b3JsZFZpZXcsIGNhbWVyYS52aWV3TWF0cml4LCB2b2x1bWVNZXNoLndvcmxkVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgICAgIGlmIChzY2VuZS5pc0ZydXN0dW1DdWxsZWQodm9sdW1lTWVzaCwgY2FtZXJhLCB3b3JsZFZpZXcuYXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gVXNlIHByZXogdG8gYXZvaWQgb25lIHBpeGVsIHJlbmRlcmVkIHR3aWNlXHJcbiAgICAgICAgICAgICAgICBnbC5jb2xvck1hc2soZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgZ2wuZGVwdGhNYXNrKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgLy8gZGVwdGhNYXNrIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgY2xlYXIgREVQVEhfQlVGRkVSXHJcbiAgICAgICAgICAgICAgICBnbC5jbGVhcihnbC5ERVBUSF9CVUZGRVJfQklUKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKFt2b2x1bWVNZXNoXSwgY2FtZXJhLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0TWF0ZXJpYWw6IGdldFByZVpNYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gUmVuZGVyIGxpZ2h0XHJcbiAgICAgICAgICAgICAgICBnbC5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdm9sdW1lTWVzaC5tYXRlcmlhbC5kZXB0aE1hc2sgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyZXIucmVuZGVyUGFzcyhbdm9sdW1lTWVzaF0sIGNhbWVyYSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGdsLmRlcHRoRnVuYyhnbC5MRVNTKTtcclxuICAgICAgICB9O1xyXG4gICAgfSkoKSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSAge2NsYXkuUmVuZGVyZXJ9IHJlbmRlcmVyXHJcbiAgICAgKi9cclxuICAgIGRpc3Bvc2U6IGZ1bmN0aW9uIChyZW5kZXJlcikge1xyXG4gICAgICAgIHRoaXMuX2dCdWZmZXIuZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2xpZ2h0QWNjdW1GcmFtZUJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9saWdodEFjY3VtVGV4LmRpc3Bvc2UocmVuZGVyZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9saWdodENvbmVHZW8uZGlzcG9zZShyZW5kZXJlcik7XHJcbiAgICAgICAgdGhpcy5fbGlnaHRDeWxpbmRlckdlby5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9saWdodFNwaGVyZUdlby5kaXNwb3NlKHJlbmRlcmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZnVsbFF1YWRQYXNzLmRpc3Bvc2UocmVuZGVyZXIpO1xyXG4gICAgICAgIHRoaXMuX291dHB1dFBhc3MuZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcmVjdGlvbmFsTGlnaHRNYXQuZGlzcG9zZShyZW5kZXJlcik7XHJcblxyXG4gICAgICAgIHRoaXMuc2hhZG93TWFwUGFzcy5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEZWZlcnJlZFJlbmRlcmVyO1xyXG4iLCJcclxuXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB7IEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcblxyXG4vKipcclxuICogQGNsYXNzIDJ4MiBNYXRyaXhcclxuICogQG5hbWUgbWF0MlxyXG4gKi9cclxuXHJcbnZhciBtYXQyID0ge307XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBtYXQyXHJcbiAqXHJcbiAqIEByZXR1cm5zIHttYXQyfSBhIG5ldyAyeDIgbWF0cml4XHJcbiAqL1xyXG5tYXQyLmNyZWF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDQpO1xyXG4gICAgb3V0WzBdID0gMTtcclxuICAgIG91dFsxXSA9IDA7XHJcbiAgICBvdXRbMl0gPSAwO1xyXG4gICAgb3V0WzNdID0gMTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQyIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDJ9IGEgbmV3IDJ4MiBtYXRyaXhcclxuICovXHJcbm1hdDIuY2xvbmUgPSBmdW5jdGlvbihhKSB7XHJcbiAgICB2YXIgb3V0ID0gbmV3IEdMTUFUX0FSUkFZX1RZUEUoNCk7XHJcbiAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgb3V0WzFdID0gYVsxXTtcclxuICAgIG91dFsyXSA9IGFbMl07XHJcbiAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0MiB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xyXG5tYXQyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG91dFswXSA9IGFbMF07XHJcbiAgICBvdXRbMV0gPSBhWzFdO1xyXG4gICAgb3V0WzJdID0gYVsyXTtcclxuICAgIG91dFszXSA9IGFbM107XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNldCBhIG1hdDIgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xyXG5tYXQyLmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICBvdXRbMF0gPSAxO1xyXG4gICAgb3V0WzFdID0gMDtcclxuICAgIG91dFsyXSA9IDA7XHJcbiAgICBvdXRbM10gPSAxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXHJcbiAgICBpZiAob3V0ID09PSBhKSB7XHJcbiAgICAgICAgdmFyIGExID0gYVsxXTtcclxuICAgICAgICBvdXRbMV0gPSBhWzJdO1xyXG4gICAgICAgIG91dFsyXSA9IGExO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBvdXRbMF0gPSBhWzBdO1xyXG4gICAgICAgIG91dFsxXSA9IGFbMl07XHJcbiAgICAgICAgb3V0WzJdID0gYVsxXTtcclxuICAgICAgICBvdXRbM10gPSBhWzNdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIuaW52ZXJ0ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLFxyXG5cclxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XHJcbiAgICAgICAgZGV0ID0gYTAgKiBhMyAtIGEyICogYTE7XHJcblxyXG4gICAgaWYgKCFkZXQpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGRldCA9IDEuMCAvIGRldDtcclxuXHJcbiAgICBvdXRbMF0gPSAgYTMgKiBkZXQ7XHJcbiAgICBvdXRbMV0gPSAtYTEgKiBkZXQ7XHJcbiAgICBvdXRbMl0gPSAtYTIgKiBkZXQ7XHJcbiAgICBvdXRbM10gPSAgYTAgKiBkZXQ7XHJcblxyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBhZGp1Z2F0ZSBvZiBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXHJcbm1hdDIuYWRqb2ludCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgLy8gQ2FjaGluZyB0aGlzIHZhbHVlIGlzIG5lc3NlY2FyeSBpZiBvdXQgPT0gYVxyXG4gICAgdmFyIGEwID0gYVswXTtcclxuICAgIG91dFswXSA9ICBhWzNdO1xyXG4gICAgb3V0WzFdID0gLWFbMV07XHJcbiAgICBvdXRbMl0gPSAtYVsyXTtcclxuICAgIG91dFszXSA9ICBhMDtcclxuXHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cclxubWF0Mi5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4gYVswXSAqIGFbM10gLSBhWzJdICogYVsxXTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQyJ3NcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cclxubWF0Mi5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM107XHJcbiAgICB2YXIgYjAgPSBiWzBdLCBiMSA9IGJbMV0sIGIyID0gYlsyXSwgYjMgPSBiWzNdO1xyXG4gICAgb3V0WzBdID0gYTAgKiBiMCArIGEyICogYjE7XHJcbiAgICBvdXRbMV0gPSBhMSAqIGIwICsgYTMgKiBiMTtcclxuICAgIG91dFsyXSA9IGEwICogYjIgKyBhMiAqIGIzO1xyXG4gICAgb3V0WzNdID0gYTEgKiBiMiArIGEzICogYjM7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0Mi5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5tYXQyLm11bCA9IG1hdDIubXVsdGlwbHk7XHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIG1hdDIgYnkgdGhlIGdpdmVuIGFuZ2xlXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xyXG5tYXQyLnJvdGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXSxcclxuICAgICAgICBzID0gTWF0aC5zaW4ocmFkKSxcclxuICAgICAgICBjID0gTWF0aC5jb3MocmFkKTtcclxuICAgIG91dFswXSA9IGEwICogIGMgKyBhMiAqIHM7XHJcbiAgICBvdXRbMV0gPSBhMSAqICBjICsgYTMgKiBzO1xyXG4gICAgb3V0WzJdID0gYTAgKiAtcyArIGEyICogYztcclxuICAgIG91dFszXSA9IGExICogLXMgKyBhMyAqIGM7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MiBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKiovXHJcbm1hdDIuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sXHJcbiAgICAgICAgdjAgPSB2WzBdLCB2MSA9IHZbMV07XHJcbiAgICBvdXRbMF0gPSBhMCAqIHYwO1xyXG4gICAgb3V0WzFdID0gYTEgKiB2MDtcclxuICAgIG91dFsyXSA9IGEyICogdjE7XHJcbiAgICBvdXRbM10gPSBhMyAqIHYxO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXHJcbm1hdDIuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpKSlcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEwsIEQgYW5kIFUgbWF0cmljZXMgKExvd2VyIHRyaWFuZ3VsYXIsIERpYWdvbmFsIGFuZCBVcHBlciB0cmlhbmd1bGFyKSBieSBmYWN0b3JpemluZyB0aGUgaW5wdXQgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gTCB0aGUgbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBEIHRoZSBkaWFnb25hbCBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBVIHRoZSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIGlucHV0IG1hdHJpeCB0byBmYWN0b3JpemVcclxuICovXHJcblxyXG5tYXQyLkxEVSA9IGZ1bmN0aW9uIChMLCBELCBVLCBhKSB7XHJcbiAgICBMWzJdID0gYVsyXS9hWzBdO1xyXG4gICAgVVswXSA9IGFbMF07XHJcbiAgICBVWzFdID0gYVsxXTtcclxuICAgIFVbM10gPSBhWzNdIC0gTFsyXSAqIFVbMV07XHJcbiAgICByZXR1cm4gW0wsIEQsIFVdO1xyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG1hdDI7IiwiXHJcbi8qIENvcHlyaWdodCAoYykgMjAxMywgQnJhbmRvbiBKb25lcywgQ29saW4gTWFjS2VuemllIElWLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5cclxuUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbixcclxuYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxyXG5cclxuICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xyXG4gICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXHJcbiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uXHJcbiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cclxuXHJcblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxyXG5BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXHJcbkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXHJcbkFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xyXG4oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XHJcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxyXG5BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxyXG4oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xyXG5TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi9cclxuXHJcbmltcG9ydCB7IEdMTUFUX0FSUkFZX1RZUEUgfSBmcm9tICcuL2NvbW1vbic7XHJcblxyXG4vKipcclxuICogQGNsYXNzIDJ4MyBNYXRyaXhcclxuICogQG5hbWUgbWF0MmRcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIEEgbWF0MmQgY29udGFpbnMgc2l4IGVsZW1lbnRzIGRlZmluZWQgYXM6XHJcbiAqIDxwcmU+XHJcbiAqIFthLCBjLCB0eCxcclxuICogIGIsIGQsIHR5XVxyXG4gKiA8L3ByZT5cclxuICogVGhpcyBpcyBhIHNob3J0IGZvcm0gZm9yIHRoZSAzeDMgbWF0cml4OlxyXG4gKiA8cHJlPlxyXG4gKiBbYSwgYywgdHgsXHJcbiAqICBiLCBkLCB0eSxcclxuICogIDAsIDAsIDFdXHJcbiAqIDwvcHJlPlxyXG4gKiBUaGUgbGFzdCByb3cgaXMgaWdub3JlZCBzbyB0aGUgYXJyYXkgaXMgc2hvcnRlciBhbmQgb3BlcmF0aW9ucyBhcmUgZmFzdGVyLlxyXG4gKi9cclxuXHJcbnZhciBtYXQyZCA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0MmRcclxuICpcclxuICogQHJldHVybnMge21hdDJkfSBhIG5ldyAyeDMgbWF0cml4XHJcbiAqL1xyXG5tYXQyZC5jcmVhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgIHZhciBvdXQgPSBuZXcgR0xNQVRfQVJSQVlfVFlQRSg2KTtcclxuICAgIG91dFswXSA9IDE7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICBvdXRbNF0gPSAwO1xyXG4gICAgb3V0WzVdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQyZCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IGEgbmV3IDJ4MyBtYXRyaXhcclxuICovXHJcbm1hdDJkLmNsb25lID0gZnVuY3Rpb24oYSkge1xyXG4gICAgdmFyIG91dCA9IG5ldyBHTE1BVF9BUlJBWV9UWVBFKDYpO1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICBvdXRbNV0gPSBhWzVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0MmQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cclxubWF0MmQuY29weSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgb3V0WzBdID0gYVswXTtcclxuICAgIG91dFsxXSA9IGFbMV07XHJcbiAgICBvdXRbMl0gPSBhWzJdO1xyXG4gICAgb3V0WzNdID0gYVszXTtcclxuICAgIG91dFs0XSA9IGFbNF07XHJcbiAgICBvdXRbNV0gPSBhWzVdO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTZXQgYSBtYXQyZCB0byB0aGUgaWRlbnRpdHkgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cclxubWF0MmQuaWRlbnRpdHkgPSBmdW5jdGlvbihvdXQpIHtcclxuICAgIG91dFswXSA9IDE7XHJcbiAgICBvdXRbMV0gPSAwO1xyXG4gICAgb3V0WzJdID0gMDtcclxuICAgIG91dFszXSA9IDE7XHJcbiAgICBvdXRbNF0gPSAwO1xyXG4gICAgb3V0WzVdID0gMDtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xyXG5tYXQyZC5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIHZhciBhYSA9IGFbMF0sIGFiID0gYVsxXSwgYWMgPSBhWzJdLCBhZCA9IGFbM10sXHJcbiAgICAgICAgYXR4ID0gYVs0XSwgYXR5ID0gYVs1XTtcclxuXHJcbiAgICB2YXIgZGV0ID0gYWEgKiBhZCAtIGFiICogYWM7XHJcbiAgICBpZighZGV0KXtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGRldCA9IDEuMCAvIGRldDtcclxuXHJcbiAgICBvdXRbMF0gPSBhZCAqIGRldDtcclxuICAgIG91dFsxXSA9IC1hYiAqIGRldDtcclxuICAgIG91dFsyXSA9IC1hYyAqIGRldDtcclxuICAgIG91dFszXSA9IGFhICogZGV0O1xyXG4gICAgb3V0WzRdID0gKGFjICogYXR5IC0gYWQgKiBhdHgpICogZGV0O1xyXG4gICAgb3V0WzVdID0gKGFiICogYXR4IC0gYWEgKiBhdHkpICogZGV0O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cclxubWF0MmQuZGV0ZXJtaW5hbnQgPSBmdW5jdGlvbiAoYSkge1xyXG4gICAgcmV0dXJuIGFbMF0gKiBhWzNdIC0gYVsxXSAqIGFbMl07XHJcbn07XHJcblxyXG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0MmQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDJkfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cclxubWF0MmQubXVsdGlwbHkgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLCBhNCA9IGFbNF0sIGE1ID0gYVs1XSxcclxuICAgICAgICBiMCA9IGJbMF0sIGIxID0gYlsxXSwgYjIgPSBiWzJdLCBiMyA9IGJbM10sIGI0ID0gYls0XSwgYjUgPSBiWzVdO1xyXG4gICAgb3V0WzBdID0gYTAgKiBiMCArIGEyICogYjE7XHJcbiAgICBvdXRbMV0gPSBhMSAqIGIwICsgYTMgKiBiMTtcclxuICAgIG91dFsyXSA9IGEwICogYjIgKyBhMiAqIGIzO1xyXG4gICAgb3V0WzNdID0gYTEgKiBiMiArIGEzICogYjM7XHJcbiAgICBvdXRbNF0gPSBhMCAqIGI0ICsgYTIgKiBiNSArIGE0O1xyXG4gICAgb3V0WzVdID0gYTEgKiBiNCArIGEzICogYjUgKyBhNTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQyZC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xyXG5tYXQyZC5tdWwgPSBtYXQyZC5tdWx0aXBseTtcclxuXHJcblxyXG4vKipcclxuICogUm90YXRlcyBhIG1hdDJkIGJ5IHRoZSBnaXZlbiBhbmdsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cclxubWF0MmQucm90YXRlID0gZnVuY3Rpb24gKG91dCwgYSwgcmFkKSB7XHJcbiAgICB2YXIgYTAgPSBhWzBdLCBhMSA9IGFbMV0sIGEyID0gYVsyXSwgYTMgPSBhWzNdLCBhNCA9IGFbNF0sIGE1ID0gYVs1XSxcclxuICAgICAgICBzID0gTWF0aC5zaW4ocmFkKSxcclxuICAgICAgICBjID0gTWF0aC5jb3MocmFkKTtcclxuICAgIG91dFswXSA9IGEwICogIGMgKyBhMiAqIHM7XHJcbiAgICBvdXRbMV0gPSBhMSAqICBjICsgYTMgKiBzO1xyXG4gICAgb3V0WzJdID0gYTAgKiAtcyArIGEyICogYztcclxuICAgIG91dFszXSA9IGExICogLXMgKyBhMyAqIGM7XHJcbiAgICBvdXRbNF0gPSBhNDtcclxuICAgIG91dFs1XSA9IGE1O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTY2FsZXMgdGhlIG1hdDJkIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXHJcbiAqIEBwYXJhbSB7dmVjMn0gdiB0aGUgdmVjMiB0byBzY2FsZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqKi9cclxubWF0MmQuc2NhbGUgPSBmdW5jdGlvbihvdXQsIGEsIHYpIHtcclxuICAgIHZhciBhMCA9IGFbMF0sIGExID0gYVsxXSwgYTIgPSBhWzJdLCBhMyA9IGFbM10sIGE0ID0gYVs0XSwgYTUgPSBhWzVdLFxyXG4gICAgICAgIHYwID0gdlswXSwgdjEgPSB2WzFdO1xyXG4gICAgb3V0WzBdID0gYTAgKiB2MDtcclxuICAgIG91dFsxXSA9IGExICogdjA7XHJcbiAgICBvdXRbMl0gPSBhMiAqIHYxO1xyXG4gICAgb3V0WzNdID0gYTMgKiB2MTtcclxuICAgIG91dFs0XSA9IGE0O1xyXG4gICAgb3V0WzVdID0gYTU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRyYW5zbGF0ZXMgdGhlIG1hdDJkIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXHJcbiAqIEBwYXJhbSB7dmVjMn0gdiB0aGUgdmVjMiB0byB0cmFuc2xhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKiovXHJcbm1hdDJkLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgdmFyIGEwID0gYVswXSwgYTEgPSBhWzFdLCBhMiA9IGFbMl0sIGEzID0gYVszXSwgYTQgPSBhWzRdLCBhNSA9IGFbNV0sXHJcbiAgICAgICAgdjAgPSB2WzBdLCB2MSA9IHZbMV07XHJcbiAgICBvdXRbMF0gPSBhMDtcclxuICAgIG91dFsxXSA9IGExO1xyXG4gICAgb3V0WzJdID0gYTI7XHJcbiAgICBvdXRbM10gPSBhMztcclxuICAgIG91dFs0XSA9IGEwICogdjAgKyBhMiAqIHYxICsgYTQ7XHJcbiAgICBvdXRbNV0gPSBhMSAqIHYwICsgYTMgKiB2MSArIGE1O1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cclxubWF0MmQuZnJvYiA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4oTWF0aC5zcXJ0KE1hdGgucG93KGFbMF0sIDIpICsgTWF0aC5wb3coYVsxXSwgMikgKyBNYXRoLnBvdyhhWzJdLCAyKSArIE1hdGgucG93KGFbM10sIDIpICsgTWF0aC5wb3coYVs0XSwgMikgKyBNYXRoLnBvdyhhWzVdLCAyKSArIDEpKVxyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG1hdDJkOyIsIi8qKlxyXG4gKiBAZmlsZW92ZXJ2aWV3IGdsLW1hdHJpeCAtIEhpZ2ggcGVyZm9ybWFuY2UgbWF0cml4IGFuZCB2ZWN0b3Igb3BlcmF0aW9uc1xyXG4gKiBAYXV0aG9yIEJyYW5kb24gSm9uZXNcclxuICogQGF1dGhvciBDb2xpbiBNYWNLZW56aWUgSVZcclxuICogQHZlcnNpb24gMi4yLjJcclxuICovXHJcblxyXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTMsIEJyYW5kb24gSm9uZXMsIENvbGluIE1hY0tlbnppZSBJVi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuXHJcblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXHJcbmFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcclxuXHJcbiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcclxuICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxyXG4gICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxyXG4gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxyXG4gICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXHJcblxyXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcclxuQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcclxuV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxyXG5ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUlxyXG5BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcclxuKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xyXG5MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cclxuQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcclxuKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcclxuU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovXHJcblxyXG5pbXBvcnQgdmVjMiBmcm9tICcuL3ZlYzInO1xyXG5pbXBvcnQgdmVjMyBmcm9tICcuL3ZlYzMnO1xyXG5pbXBvcnQgdmVjNCBmcm9tICcuL3ZlYzQnO1xyXG5pbXBvcnQgbWF0MiBmcm9tICcuL21hdDInO1xyXG5pbXBvcnQgbWF0MmQgZnJvbSAnLi9tYXQyZCc7XHJcbmltcG9ydCBtYXQzIGZyb20gJy4vbWF0Myc7XHJcbmltcG9ydCBtYXQ0IGZyb20gJy4vbWF0NCc7XHJcbmltcG9ydCBxdWF0IGZyb20gJy4vcXVhdCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICB2ZWMyOiB2ZWMyLFxyXG4gICAgdmVjMzogdmVjMyxcclxuICAgIHZlYzQ6IHZlYzQsXHJcbiAgICBtYXQyOiBtYXQyLFxyXG4gICAgbWF0MmQ6IG1hdDJkLFxyXG4gICAgbWF0MzogbWF0MyxcclxuICAgIG1hdDQ6IG1hdDQsXHJcbiAgICBxdWF0OiBxdWF0XHJcbn07XHJcbiIsIi8vIERFUFJFQ0FURURcclxuaW1wb3J0IGdsbWF0cml4IGZyb20gJy4uL2dsbWF0cml4JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGdsbWF0cml4O1xyXG4iLCJpbXBvcnQgTGlnaHQgZnJvbSAnLi4vTGlnaHQnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxpZ2h0LlNwaGVyZVxyXG4gKiBAZXh0ZW5kcyB7Y2xheS5MaWdodH1cclxuICovXHJcbnZhciBTcGhlcmVMaWdodCA9IExpZ2h0LmV4dGVuZChcclxuLyoqIEBsZW5kcyBjbGF5LmxpZ2h0LlNwaGVyZSMgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICByYW5nZTogMTAwLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgcmFkaXVzOiA1XHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnU1BIRVJFX0xJR0hUJyxcclxuXHJcbiAgICB1bmlmb3JtVGVtcGxhdGVzOiB7XHJcbiAgICAgICAgc3BoZXJlTGlnaHRQb3NpdGlvbjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRXb3JsZFBvc2l0aW9uKCkuYXJyYXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwaGVyZUxpZ2h0UmFuZ2U6IHtcclxuICAgICAgICAgICAgdHlwZTogJzFmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2UucmFuZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNwaGVyZUxpZ2h0UmFkaXVzOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJhZGl1cztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3BoZXJlTGlnaHRDb2xvcjoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IGluc3RhbmNlLmNvbG9yO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVuc2l0eSA9IGluc3RhbmNlLmludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbY29sb3JbMF0qaW50ZW5zaXR5LCBjb2xvclsxXSppbnRlbnNpdHksIGNvbG9yWzJdKmludGVuc2l0eV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3BoZXJlTGlnaHQ7XHJcbiIsImltcG9ydCBMaWdodCBmcm9tICcuLi9MaWdodCc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkubGlnaHQuVHViZVxyXG4gKiBAZXh0ZW5kcyB7Y2xheS5MaWdodH1cclxuICovXHJcbnZhciBUdWJlTGlnaHQgPSBMaWdodC5leHRlbmQoXHJcbi8qKiBAbGVuZHMgY2xheS5saWdodC5UdWJlIyAqL1xyXG57XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHJhbmdlOiAxMDAsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBsZW5ndGg6IDEwXHJcbn0sIHtcclxuXHJcbiAgICB0eXBlOiAnVFVCRV9MSUdIVCcsXHJcblxyXG4gICAgdW5pZm9ybVRlbXBsYXRlczoge1xyXG4gICAgICAgIHR1YmVMaWdodFBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICczZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldFdvcmxkUG9zaXRpb24oKS5hcnJheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHR1YmVMaWdodEV4dGVuZDoge1xyXG4gICAgICAgICAgICB0eXBlOiAnM2YnLFxyXG4gICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHggPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRXh0ZW5kIGluIHggYXhpc1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4LmNvcHkoaW5zdGFuY2Uud29ybGRUcmFuc2Zvcm0ueClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm5vcm1hbGl6ZSgpLnNjYWxlKGluc3RhbmNlLmxlbmd0aCAvIDIpLmFycmF5O1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSkoKVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHR1YmVMaWdodFJhbmdlOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICcxZicsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihpbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJhbmdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdHViZUxpZ2h0Q29sb3I6IHtcclxuICAgICAgICAgICAgdHlwZTogJzNmJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBpbnN0YW5jZS5jb2xvcjtcclxuICAgICAgICAgICAgICAgIHZhciBpbnRlbnNpdHkgPSBpbnN0YW5jZS5pbnRlbnNpdHk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW2NvbG9yWzBdKmludGVuc2l0eSwgY29sb3JbMV0qaW50ZW5zaXR5LCBjb2xvclsyXSppbnRlbnNpdHldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFR1YmVMaWdodDtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IHZlbmRvciBmcm9tICcuLi9jb3JlL3ZlbmRvcic7XHJcbmltcG9ydCBjcmVhdGVDb21wb3NpdG9yIGZyb20gJy4uL2NyZWF0ZUNvbXBvc2l0b3InO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LmxvYWRlci5GWFxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEZYTG9hZGVyID0gQmFzZS5leHRlbmQoLyoqIEBsZW5kcyBjbGF5LmxvYWRlci5GWCMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICByb290UGF0aDogJycsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHRleHR1cmVSb290UGF0aDogJycsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHNoYWRlclJvb3RQYXRoOiAnJyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LlNjZW5lfVxyXG4gICAgICovXHJcbiAgICBzY2VuZTogbnVsbCxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LkNhbWVyYX1cclxuICAgICAqL1xyXG4gICAgY2FtZXJhOiBudWxsXHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5sb2FkZXIuRlgucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSB1cmxcclxuICAgICAqL1xyXG4gICAgbG9hZDogZnVuY3Rpb24odXJsKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMucm9vdFBhdGgpIHtcclxuICAgICAgICAgICAgdGhpcy5yb290UGF0aCA9IHVybC5zbGljZSgwLCB1cmwubGFzdEluZGV4T2YoJy8nKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZW5kb3IucmVxdWVzdC5nZXQoe1xyXG4gICAgICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICAgICAgb25wcm9ncmVzczogZnVuY3Rpb24ocGVyY2VudCwgbG9hZGVkLCB0b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyKCdwcm9ncmVzcycsIHBlcmNlbnQsIGxvYWRlZCwgdG90YWwpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvbmVycm9yOiBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoJ2Vycm9yJywgZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICBvbmxvYWQ6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBjcmVhdGVDb21wb3NpdG9yKEpTT04ucGFyc2UoZGF0YSksIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUm9vdFBhdGg6IHRoaXMudGV4dHVyZVJvb3RQYXRoIHx8IHRoaXMucm9vdFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FtZXJhOiB0aGlzLmNhbWVyYSxcclxuICAgICAgICAgICAgICAgICAgICBzY2VuZTogdGhpcy5zY2VuZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBGWExvYWRlcjtcclxuIiwiaW1wb3J0IG1hdDIgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0Mic7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5Lk1hdHJpeDJcclxuICovXHJcbnZhciBNYXRyaXgyID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIE1hdHJpeDJcclxuICAgICAqIEBuYW1lIGFycmF5XHJcbiAgICAgKiBAdHlwZSB7RmxvYXQzMkFycmF5fVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MiNcclxuICAgICAqL1xyXG4gICAgdGhpcy5hcnJheSA9IG1hdDIuY3JlYXRlKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MiNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuTWF0cml4Mi5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IE1hdHJpeDIsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gYXJyW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBNYXRyaXgyXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gKG5ldyBNYXRyaXgyKCkpLmNvcHkodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBjb3B5OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0Mi5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGFkanVnYXRlIG9mIHNlbGYsIGluLXBsYWNlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIGFkam9pbnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDIuYWRqb2ludCh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIG1hdHJpeCBkZXRlcm1pbmFudFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkZXRlcm1pbmFudDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hdDIuZGV0ZXJtaW5hbnQodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRvIGEgaWRlbnRpdHkgbWF0cml4XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIGlkZW50aXR5OiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQyLmlkZW50aXR5KHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnZlcnQgc2VsZlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gICAgICovXHJcbiAgICBpbnZlcnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDIuaW52ZXJ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXV0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDIubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXVsdGlwbHlMZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgbXVsTGVmdDogZnVuY3Rpb24oYSkge1xyXG4gICAgICAgIG1hdDIubXVsKHRoaXMuYXJyYXksIGEuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQyLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBhIGFuZCBzZWxmLCBhIGlzIG9uIHRoZSBsZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbihhKSB7XHJcbiAgICAgICAgbWF0Mi5tdWx0aXBseSh0aGlzLmFycmF5LCBhLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlIHNlbGYgYnkgYSBnaXZlbiByYWRpYW5cclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gICByYWRcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgcm90YXRlOiBmdW5jdGlvbihyYWQpIHtcclxuICAgICAgICBtYXQyLnJvdGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBzZWxmIGJ5IHNcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgc2NhbGU6IGZ1bmN0aW9uKHYpIHtcclxuICAgICAgICBtYXQyLnNjYWxlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zcG9zZSBzZWxmLCBpbi1wbGFjZS5cclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICAgICAqL1xyXG4gICAgdHJhbnNwb3NlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICBtYXQyLnRyYW5zcG9zZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge01hdHJpeDJ9IG91dFxyXG4gKiBAcGFyYW0gIHtNYXRyaXgyfSBhXHJcbiAqIEByZXR1cm4ge01hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLmFkam9pbnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDIuYWRqb2ludChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLmNvcHkgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDIuY29weShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5NYXRyaXgyLmRldGVybWluYW50ID0gZnVuY3Rpb24oYSkge1xyXG4gICAgcmV0dXJuIG1hdDIuZGV0ZXJtaW5hbnQoYS5hcnJheSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBvdXRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gKi9cclxuTWF0cml4Mi5pZGVudGl0eSA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgbWF0Mi5pZGVudGl0eShvdXQuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4Mn0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLmludmVydCA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgbWF0Mi5pbnZlcnQob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIubXVsID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICBtYXQyLm11bChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIubXVsdGlwbHkgPSBNYXRyaXgyLm11bDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJ9IGFcclxuICogQHBhcmFtICB7bnVtYmVyfSAgIHJhZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAqL1xyXG5NYXRyaXgyLnJvdGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XHJcbiAgICBtYXQyLnJvdGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHJhZCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyfVxyXG4gKi9cclxuTWF0cml4Mi5zY2FsZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgbWF0Mi5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7TWF0cml4Mn0gb3V0XHJcbiAqIEBwYXJhbSAge01hdHJpeDJ9IGFcclxuICogQHJldHVybiB7TWF0cml4Mn1cclxuICovXHJcbk1hdHJpeDIudHJhbnNwb3NlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBtYXQyLnRyYW5zcG9zZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWF0cml4MjtcclxuIiwiaW1wb3J0IG1hdDJkIGZyb20gJy4uL2dsbWF0cml4L21hdDJkJztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuTWF0cml4MmRcclxuICovXHJcbnZhciBNYXRyaXgyZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yYWdlIG9mIE1hdHJpeDJkXHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDJkI1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFycmF5ID0gbWF0MmQuY3JlYXRlKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuTWF0cml4MmQjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbk1hdHJpeDJkLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcjogTWF0cml4MmQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29tcG9uZW50cyBmcm9tIGFycmF5XHJcbiAgICAgKiBAcGFyYW0gIHtGbG9hdDMyQXJyYXl8bnVtYmVyW119IGFyclxyXG4gICAgICovXHJcbiAgICBzZXRBcnJheTogZnVuY3Rpb24gKGFycikge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5W2ldID0gYXJyW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBNYXRyaXgyZFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAobmV3IE1hdHJpeDJkKCkpLmNvcHkodGhpcyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBmcm9tIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQyZC5jb3B5KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGUgbWF0cml4IGRldGVybWluYW50XHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRldGVybWluYW50OiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbWF0MmQuZGV0ZXJtaW5hbnQodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHRvIGEgaWRlbnRpdHkgbWF0cml4XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBpZGVudGl0eTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbWF0MmQuaWRlbnRpdHkodGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydCBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICBpbnZlcnQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIG1hdDJkLmludmVydCh0aGlzLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11dGlwbHlcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDJkLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5TGVmdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgbXVsTGVmdDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIG1hdDJkLm11bCh0aGlzLmFycmF5LCBiLmFycmF5LCB0aGlzLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBtYXQyZC5tdWx0aXBseSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbHkgYSBhbmQgc2VsZiwgYSBpcyBvbiB0aGUgbGVmdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgbWF0MmQubXVsdGlwbHkodGhpcy5hcnJheSwgYi5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJkfVxyXG4gICAgICovXHJcbiAgICByb3RhdGU6IGZ1bmN0aW9uKHJhZCkge1xyXG4gICAgICAgIG1hdDJkLnJvdGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCByYWQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBzZWxmIGJ5IHNcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHNcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbihzKSB7XHJcbiAgICAgICAgbWF0MmQuc2NhbGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zbGF0ZSBzZWxmIGJ5IHZcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHZcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAgICAgKi9cclxuICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24odikge1xyXG4gICAgICAgIG1hdDJkLnRyYW5zbGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAqL1xyXG5NYXRyaXgyZC5jb3B5ID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICBtYXQyZC5jb3B5KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5NYXRyaXgyZC5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uKGEpIHtcclxuICAgIHJldHVybiBtYXQyZC5kZXRlcm1pbmFudChhLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBvdXRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLmlkZW50aXR5ID0gZnVuY3Rpb24ob3V0KSB7XHJcbiAgICBtYXQyZC5pZGVudGl0eShvdXQuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4MmR9XHJcbiAqL1xyXG5NYXRyaXgyZC5pbnZlcnQgPSBmdW5jdGlvbihvdXQsIGEpIHtcclxuICAgIG1hdDJkLmludmVydChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLm11bCA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgbWF0MmQubXVsKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLm11bHRpcGx5ID0gTWF0cml4MmQubXVsO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEBwYXJhbSAge251bWJlcn0gICByYWRcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLnJvdGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgcmFkKSB7XHJcbiAgICBtYXQyZC5yb3RhdGUob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCB2KSB7XHJcbiAgICBtYXQyZC5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4MmR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gIHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgyZH1cclxuICovXHJcbk1hdHJpeDJkLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKG91dCwgYSwgdikge1xyXG4gICAgbWF0MmQudHJhbnNsYXRlKG91dC5hcnJheSwgYS5hcnJheSwgdi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBNYXRyaXgyZDtcclxuIiwiaW1wb3J0IG1hdDMgZnJvbSAnLi4vZ2xtYXRyaXgvbWF0Myc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5Lk1hdHJpeDNcclxuICovXHJcbnZhciBNYXRyaXgzID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcmFnZSBvZiBNYXRyaXgzXHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDMjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSBtYXQzLmNyZWF0ZSgpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgX2RpcnR5XHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5Lk1hdHJpeDMjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxufTtcclxuXHJcbk1hdHJpeDMucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBNYXRyaXgzLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGNvbXBvbmVudHMgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcclxuICAgICAqL1xyXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uIChhcnIpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVtpXSA9IGFycltpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlIHRoZSBhZGp1Z2F0ZSBvZiBzZWxmLCBpbi1wbGFjZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBhZGpvaW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbWF0My5hZGpvaW50KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBNYXRyaXgzXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgTWF0cml4MygpKS5jb3B5KHRoaXMpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgZnJvbSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgY29weTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICBtYXQzLmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBtYXRyaXggZGV0ZXJtaW5hbnRcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZGV0ZXJtaW5hbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gbWF0My5kZXRlcm1pbmFudCh0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBNYXRyaXgyZCBhXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDJkfSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGZyb21NYXQyZDogZnVuY3Rpb24gKGEpIHtcclxuICAgICAgICBtYXQzLmZyb21NYXQyZCh0aGlzLmFycmF5LCBhLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29waWVzIHRoZSB1cHBlci1sZWZ0IDN4MyB2YWx1ZXMgb2YgTWF0cml4NFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGZyb21NYXQ0OiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIG1hdDMuZnJvbU1hdDQodGhpcy5hcnJheSwgYS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgYSByb3RhdGlvbiBtYXRyaXggZnJvbSB0aGUgZ2l2ZW4gcXVhdGVybmlvblxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGZyb21RdWF0OiBmdW5jdGlvbiAocSkge1xyXG4gICAgICAgIG1hdDMuZnJvbVF1YXQodGhpcy5hcnJheSwgcS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0byBhIGlkZW50aXR5IG1hdHJpeFxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBpZGVudGl0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIG1hdDMuaWRlbnRpdHkodGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmVydCBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIGludmVydDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIG1hdDMuaW52ZXJ0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3IgbXV0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICBtYXQzLm11bCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIG11bHRpcGx5TGVmdFxyXG4gICAgICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIG11bExlZnQ6IGZ1bmN0aW9uIChhKSB7XHJcbiAgICAgICAgbWF0My5tdWwodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGx5IHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24gKGIpIHtcclxuICAgICAgICBtYXQzLm11bHRpcGx5KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBseSBhIGFuZCBzZWxmLCBhIGlzIG9uIHRoZSBsZWZ0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICAgICAqL1xyXG4gICAgbXVsdGlwbHlMZWZ0OiBmdW5jdGlvbiAoYSkge1xyXG4gICAgICAgIG1hdDMubXVsdGlwbHkodGhpcy5hcnJheSwgYS5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJvdGF0ZSBzZWxmIGJ5IGEgZ2l2ZW4gcmFkaWFuXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICAgcmFkXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIHJvdGF0ZTogZnVuY3Rpb24gKHJhZCkge1xyXG4gICAgICAgIG1hdDMucm90YXRlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHJhZCk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHNlbGYgYnkgc1xyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfSAgc1xyXG4gICAgICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gICAgICovXHJcbiAgICBzY2FsZTogZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICBtYXQzLnNjYWxlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2xhdGUgc2VsZiBieSB2XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9ICB2XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAgICAgKi9cclxuICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICBtYXQzLnRyYW5zbGF0ZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCB2LmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIGEgM3gzIG5vcm1hbCBtYXRyaXggKHRyYW5zcG9zZSBpbnZlcnNlKSBmcm9tIHRoZSA0eDQgbWF0cml4XHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWF0cml4NH0gYVxyXG4gICAgICovXHJcbiAgICBub3JtYWxGcm9tTWF0NDogZnVuY3Rpb24gKGEpIHtcclxuICAgICAgICBtYXQzLm5vcm1hbEZyb21NYXQ0KHRoaXMuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc3Bvc2Ugc2VsZiwgaW4tcGxhY2UuXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDJ9XHJcbiAgICAgKi9cclxuICAgIHRyYW5zcG9zZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIG1hdDMudHJhbnNwb3NlKHRoaXMuYXJyYXksIHRoaXMuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gJ1snICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbCh0aGlzLmFycmF5LCAnLCcpICsgJ10nO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpO1xyXG4gICAgfVxyXG59O1xyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuYWRqb2ludCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMuYWRqb2ludChvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLmNvcHkgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBtYXQzLmNvcHkob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuTWF0cml4My5kZXRlcm1pbmFudCA9IGZ1bmN0aW9uIChhKSB7XHJcbiAgICByZXR1cm4gbWF0My5kZXRlcm1pbmFudChhLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLmlkZW50aXR5ID0gZnVuY3Rpb24gKG91dCkge1xyXG4gICAgbWF0My5pZGVudGl0eShvdXQuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLmludmVydCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMuaW52ZXJ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGJcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5tdWwgPSBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XHJcbiAgICBtYXQzLm11bChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMubXVsdGlwbHkgPSBNYXRyaXgzLm11bDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9ICBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgyZH0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLmZyb21NYXQyZCA9IGZ1bmN0aW9uIChvdXQsIGEpIHtcclxuICAgIG1hdDMuZnJvbU1hdDJkKG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuZnJvbU1hdDQgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBtYXQzLmZyb21NYXQ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSAgICBvdXRcclxuICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMuZnJvbVF1YXQgPSBmdW5jdGlvbiAob3V0LCBxKSB7XHJcbiAgICBtYXQzLmZyb21RdWF0KG91dC5hcnJheSwgcS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuTWF0cml4M31cclxuICovXHJcbk1hdHJpeDMubm9ybWFsRnJvbU1hdDQgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBtYXQzLm5vcm1hbEZyb21NYXQ0KG91dC5hcnJheSwgYS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXgzfSBhXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHJhZFxyXG4gKiBAcmV0dXJuIHtjbGF5Lk1hdHJpeDN9XHJcbiAqL1xyXG5NYXRyaXgzLnJvdGF0ZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHJhZCkge1xyXG4gICAgbWF0My5yb3RhdGUob3V0LmFycmF5LCBhLmFycmF5LCByYWQpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My5zY2FsZSA9IGZ1bmN0aW9uIChvdXQsIGEsIHYpIHtcclxuICAgIG1hdDMuc2NhbGUob3V0LmFycmF5LCBhLmFycmF5LCB2LmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDN9IGFcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My50cmFuc3Bvc2UgPSBmdW5jdGlvbiAob3V0LCBhKSB7XHJcbiAgICBtYXQzLnRyYW5zcG9zZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuTWF0cml4M30gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjJ9IHZcclxuICogQHJldHVybiB7Y2xheS5NYXRyaXgzfVxyXG4gKi9cclxuTWF0cml4My50cmFuc2xhdGUgPSBmdW5jdGlvbiAob3V0LCBhLCB2KSB7XHJcbiAgICBtYXQzLnRyYW5zbGF0ZShvdXQuYXJyYXksIGEuYXJyYXksIHYuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgTWF0cml4MztcclxuIiwiaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi9WZWN0b3IzJztcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSAnLi9WZWN0b3IyJztcclxuXHJcbi8qKlxyXG4gKiBSYW5kb20gb3IgY29uc3RhbnQgMWQsIDJkLCAzZCB2ZWN0b3IgZ2VuZXJhdG9yXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5WYWx1ZVxyXG4gKi9cclxudmFyIFZhbHVlID0gZnVuY3Rpb24oKSB7fTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ8Y2xheS5WZWN0b3IyfGNsYXkuVmVjdG9yM30gW291dF1cclxuICogQHJldHVybiB7bnVtYmVyfGNsYXkuVmVjdG9yMnxjbGF5LlZlY3RvcjN9XHJcbiAqL1xyXG5WYWx1ZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24ob3V0KSB7fTtcclxuXHJcbi8vIENvbnN0YW50XHJcbnZhciBDb25zdGFudFZhbHVlID0gZnVuY3Rpb24odmFsKSB7XHJcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9O1xyXG59O1xyXG5Db25zdGFudFZhbHVlLnByb3RvdHlwZSA9IG5ldyBWYWx1ZSgpO1xyXG5Db25zdGFudFZhbHVlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnN0YW50VmFsdWU7XHJcblxyXG4vLyBWZWN0b3JcclxudmFyIFZlY3RvclZhbHVlID0gZnVuY3Rpb24odmFsKSB7XHJcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB2YWwuY29uc3RydWN0b3I7XHJcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG5ldyBDb25zdHJ1Y3RvcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvdXQuY29weSh2YWwpO1xyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9O1xyXG59O1xyXG5WZWN0b3JWYWx1ZS5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcclxuVmVjdG9yVmFsdWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVjdG9yVmFsdWU7XHJcbi8vUmFuZG9tIDFEXHJcbnZhciBSYW5kb20xRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XHJcbiAgICB2YXIgcmFuZ2UgPSBtYXggLSBtaW47XHJcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogcmFuZ2UgKyBtaW47XHJcbiAgICB9O1xyXG59O1xyXG5SYW5kb20xRC5wcm90b3R5cGUgPSBuZXcgVmFsdWUoKTtcclxuUmFuZG9tMUQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZG9tMUQ7XHJcblxyXG4vLyBSYW5kb20yRFxyXG52YXIgUmFuZG9tMkQgPSBmdW5jdGlvbihtaW4sIG1heCkge1xyXG4gICAgdmFyIHJhbmdlWCA9IG1heC54IC0gbWluLng7XHJcbiAgICB2YXIgcmFuZ2VZID0gbWF4LnkgLSBtaW4ueTtcclxuXHJcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFZlY3RvcjIuc2V0KFxyXG4gICAgICAgICAgICBvdXQsXHJcbiAgICAgICAgICAgIHJhbmdlWCAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMF0sXHJcbiAgICAgICAgICAgIHJhbmdlWSAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMV1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfTtcclxufTtcclxuUmFuZG9tMkQucHJvdG90eXBlID0gbmV3IFZhbHVlKCk7XHJcblJhbmRvbTJELnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJhbmRvbTJEO1xyXG5cclxudmFyIFJhbmRvbTNEID0gZnVuY3Rpb24obWluLCBtYXgpIHtcclxuICAgIHZhciByYW5nZVggPSBtYXgueCAtIG1pbi54O1xyXG4gICAgdmFyIHJhbmdlWSA9IG1heC55IC0gbWluLnk7XHJcbiAgICB2YXIgcmFuZ2VaID0gbWF4LnogLSBtaW4uejtcclxuXHJcbiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKG91dCkge1xyXG4gICAgICAgIGlmICghb3V0KSB7XHJcbiAgICAgICAgICAgIG91dCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFZlY3RvcjMuc2V0KFxyXG4gICAgICAgICAgICBvdXQsXHJcbiAgICAgICAgICAgIHJhbmdlWCAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMF0sXHJcbiAgICAgICAgICAgIHJhbmdlWSAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMV0sXHJcbiAgICAgICAgICAgIHJhbmdlWiAqIE1hdGgucmFuZG9tKCkgKyBtaW4uYXJyYXlbMl1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfTtcclxufTtcclxuUmFuZG9tM0QucHJvdG90eXBlID0gbmV3IFZhbHVlKCk7XHJcblJhbmRvbTNELnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJhbmRvbTNEO1xyXG5cclxuLy8gRmFjdG9yeSBtZXRob2RzXHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgY29uc3RhbnQgMWQgdmFsdWUgZ2VuZXJhdG9yXHJcbiAqIEBwYXJhbSAge251bWJlcn0gY29uc3RhbnRcclxuICogQHJldHVybiB7Y2xheS5WYWx1ZX1cclxuICovXHJcblZhbHVlLmNvbnN0YW50ID0gZnVuY3Rpb24oY29uc3RhbnQpIHtcclxuICAgIHJldHVybiBuZXcgQ29uc3RhbnRWYWx1ZShjb25zdGFudCk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgY29uc3RhbnQgdmVjdG9yIHZhbHVlKDJkIG9yIDNkKSBnZW5lcmF0b3JcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3IyfGNsYXkuVmVjdG9yM30gdmVjdG9yXHJcbiAqIEByZXR1cm4ge2NsYXkuVmFsdWV9XHJcbiAqL1xyXG5WYWx1ZS52ZWN0b3IgPSBmdW5jdGlvbih2ZWN0b3IpIHtcclxuICAgIHJldHVybiBuZXcgVmVjdG9yVmFsdWUodmVjdG9yKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gMWQgdmFsdWUgZ2VuZXJhdG9yXHJcbiAqIEBwYXJhbSAge251bWJlcn0gbWluXHJcbiAqIEBwYXJhbSAge251bWJlcn0gbWF4XHJcbiAqIEByZXR1cm4ge2NsYXkuVmFsdWV9XHJcbiAqL1xyXG5WYWx1ZS5yYW5kb20xRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gbmV3IFJhbmRvbTFEKG1pbiwgbWF4KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gMmQgdmFsdWUgZ2VuZXJhdG9yXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gbWluXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yMn0gbWF4XHJcbiAqIEByZXR1cm4ge2NsYXkuVmFsdWV9XHJcbiAqL1xyXG5WYWx1ZS5yYW5kb20yRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gbmV3IFJhbmRvbTJEKG1pbiwgbWF4KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSByYW5kb20gM2QgdmFsdWUgZ2VuZXJhdG9yXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gbWluXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yM30gbWF4XHJcbiAqIEByZXR1cm4ge2NsYXkuVmFsdWV9XHJcbiAqL1xyXG5WYWx1ZS5yYW5kb20zRCA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7XHJcbiAgICByZXR1cm4gbmV3IFJhbmRvbTNEKG1pbiwgbWF4KTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFZhbHVlO1xyXG4iLCJpbXBvcnQgdmVjNCBmcm9tICcuLi9nbG1hdHJpeC92ZWM0JztcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3JcclxuICogQGFsaWFzIGNsYXkuVmVjdG9yNFxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKiBAcGFyYW0ge251bWJlcn0gelxyXG4gKiBAcGFyYW0ge251bWJlcn0gd1xyXG4gKi9cclxudmFyIFZlY3RvcjQgPSBmdW5jdGlvbih4LCB5LCB6LCB3KSB7XHJcblxyXG4gICAgeCA9IHggfHwgMDtcclxuICAgIHkgPSB5IHx8IDA7XHJcbiAgICB6ID0geiB8fCAwO1xyXG4gICAgdyA9IHcgfHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JhZ2Ugb2YgVmVjdG9yNCwgcmVhZCBhbmQgd3JpdGUgb2YgeCwgeSwgeiwgdyB3aWxsIGNoYW5nZSB0aGUgdmFsdWVzIGluIGFycmF5XHJcbiAgICAgKiBBbGwgbWV0aG9kcyBhbHNvIG9wZXJhdGUgb24gdGhlIGFycmF5IGluc3RlYWQgb2YgeCwgeSwgeiwgdyBjb21wb25lbnRzXHJcbiAgICAgKiBAbmFtZSBhcnJheVxyXG4gICAgICogQHR5cGUge0Zsb2F0MzJBcnJheX1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjQjXHJcbiAgICAgKi9cclxuICAgIHRoaXMuYXJyYXkgPSB2ZWM0LmZyb21WYWx1ZXMoeCwgeSwgeiwgdyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXJ0eSBmbGFnIGlzIHVzZWQgYnkgdGhlIE5vZGUgdG8gZGV0ZXJtaW5lXHJcbiAgICAgKiBpZiB0aGUgbWF0cml4IGlzIHVwZGF0ZWQgdG8gbGF0ZXN0XHJcbiAgICAgKiBAbmFtZSBfZGlydHlcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yNCNcclxuICAgICAqL1xyXG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG59O1xyXG5cclxuVmVjdG9yNC5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgY29uc3RydWN0b3I6IFZlY3RvcjQsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYiB0byBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgYWRkOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5hZGQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB4LCB5IGFuZCB6IGNvbXBvbmVudHNcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHhcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHlcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHpcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHdcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgc2V0OiBmdW5jdGlvbih4LCB5LCB6LCB3KSB7XHJcbiAgICAgICAgdGhpcy5hcnJheVswXSA9IHg7XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IHk7XHJcbiAgICAgICAgdGhpcy5hcnJheVsyXSA9IHo7XHJcbiAgICAgICAgdGhpcy5hcnJheVszXSA9IHc7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB4LCB5LCB6IGFuZCB3IGNvbXBvbmVudHMgZnJvbSBhcnJheVxyXG4gICAgICogQHBhcmFtICB7RmxvYXQzMkFycmF5fG51bWJlcltdfSBhcnJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgc2V0QXJyYXk6IGZ1bmN0aW9uKGFycikge1xyXG4gICAgICAgIHRoaXMuYXJyYXlbMF0gPSBhcnJbMF07XHJcbiAgICAgICAgdGhpcy5hcnJheVsxXSA9IGFyclsxXTtcclxuICAgICAgICB0aGlzLmFycmF5WzJdID0gYXJyWzJdO1xyXG4gICAgICAgIHRoaXMuYXJyYXlbM10gPSBhcnJbM107XHJcblxyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbG9uZSBhIG5ldyBWZWN0b3I0XHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjQodGhpcy54LCB0aGlzLnksIHRoaXMueiwgdGhpcy53KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3B5IGZyb20gYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIGNvcHk6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0LmNvcHkodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBkaXN0YW5jZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5kaXN0KHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGRpc3RhbmNlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQuZGlzdGFuY2UodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIGRpdmlkZVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIGRpdjogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQuZGl2KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXZpZGUgc2VsZiBieSBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgZGl2aWRlOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5kaXZpZGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERvdCBwcm9kdWN0IG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkb3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICByZXR1cm4gdmVjNC5kb3QodGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgb2YgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQubGVuKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIGxlbmd0aDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQubGVuZ3RoKHRoaXMuYXJyYXkpO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogTGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBhIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSAgdFxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBsZXJwOiBmdW5jdGlvbihhLCBiLCB0KSB7XHJcbiAgICAgICAgdmVjNC5sZXJwKHRoaXMuYXJyYXksIGEuYXJyYXksIGIuYXJyYXksIHQpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNaW5pbXVtIG9mIHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBtaW46IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0Lm1pbih0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWF4aW11bSBvZiBzZWxmIGFuZCBiXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgbWF4OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5tYXgodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBtdWx0aXBseVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIG11bDogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQubXVsKHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdXRpcGx5IHNlbGYgYW5kIGJcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBtdWx0aXBseTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHZlYzQubXVsdGlwbHkodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5lZ2F0ZSBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIG5lZ2F0ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmVjNC5uZWdhdGUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbGl6ZSBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmVjNC5ub3JtYWxpemUodGhpcy5hcnJheSwgdGhpcy5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlIHJhbmRvbSB4LCB5LCB6LCB3IGNvbXBvbmVudHMgd2l0aCBhIGdpdmVuIHNjYWxlXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIHJhbmRvbTogZnVuY3Rpb24oc2NhbGUpIHtcclxuICAgICAgICB2ZWM0LnJhbmRvbSh0aGlzLmFycmF5LCBzY2FsZSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlIHNlbGZcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIHNjYWxlOiBmdW5jdGlvbihzKSB7XHJcbiAgICAgICAgdmVjNC5zY2FsZSh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBzKTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZSBiIGFuZCBhZGQgdG8gc2VsZlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gICAgICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gICAgICovXHJcbiAgICBzY2FsZUFuZEFkZDogZnVuY3Rpb24oYiwgcykge1xyXG4gICAgICAgIHZlYzQuc2NhbGVBbmRBZGQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSwgcyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsaWFzIGZvciBzcXVhcmVkRGlzdGFuY2VcclxuICAgICAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXJEaXN0OiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQuc3FyRGlzdCh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gc2VsZiBhbmQgYlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxdWFyZWREaXN0YW5jZTogZnVuY3Rpb24oYikge1xyXG4gICAgICAgIHJldHVybiB2ZWM0LnNxdWFyZWREaXN0YW5jZSh0aGlzLmFycmF5LCBiLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGlhcyBmb3Igc3F1YXJlZExlbmd0aFxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcXJMZW46IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB2ZWM0LnNxckxlbih0aGlzLmFycmF5KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcXVhcmVkIGxlbmd0aCBvZiBzZWxmXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNxdWFyZWRMZW5ndGg6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB2ZWM0LnNxdWFyZWRMZW5ndGgodGhpcy5hcnJheSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxpYXMgZm9yIHN1YnRyYWN0XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgc3ViOiBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgdmVjNC5zdWIodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgYi5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFN1YnRyYWN0IGIgZnJvbSBzZWxmXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgc3VidHJhY3Q6IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2ZWM0LnN1YnRyYWN0KHRoaXMuYXJyYXksIHRoaXMuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2Zvcm0gc2VsZiB3aXRoIGEgTWF0cml4NCBtXHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5Lk1hdHJpeDR9IG1cclxuICAgICAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICAgICAqL1xyXG4gICAgdHJhbnNmb3JtTWF0NDogZnVuY3Rpb24obSkge1xyXG4gICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh0aGlzLmFycmF5LCB0aGlzLmFycmF5LCBtLmFycmF5KTtcclxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNmb3JtIHNlbGYgd2l0aCBhIFF1YXRlcm5pb24gcVxyXG4gICAgICogQHBhcmFtICB7Y2xheS5RdWF0ZXJuaW9ufSBxXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAgICAgKi9cclxuICAgIHRyYW5zZm9ybVF1YXQ6IGZ1bmN0aW9uKHEpIHtcclxuICAgICAgICB2ZWM0LnRyYW5zZm9ybVF1YXQodGhpcy5hcnJheSwgdGhpcy5hcnJheSwgcS5hcnJheSk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuICdbJyArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwodGhpcy5hcnJheSwgJywnKSArICddJztcclxuICAgIH0sXHJcblxyXG4gICAgdG9BcnJheTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KTtcclxuICAgIH1cclxufTtcclxuXHJcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcclxuLy8gR2V0dGVyIGFuZCBTZXR0ZXJcclxuaWYgKGRlZmluZVByb3BlcnR5KSB7XHJcblxyXG4gICAgdmFyIHByb3RvID0gVmVjdG9yNC5wcm90b3R5cGU7XHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHhcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3I0XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd4Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVswXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbMF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG5hbWUgeVxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LlZlY3RvcjRcclxuICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBkZWZpbmVQcm9wZXJ0eShwcm90bywgJ3knLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFycmF5WzFdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheVsxXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbmFtZSB6XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlck9mIGNsYXkuVmVjdG9yNFxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIGRlZmluZVByb3BlcnR5KHByb3RvLCAneicsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJyYXlbMl07XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5WzJdID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBuYW1lIHdcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS5WZWN0b3I0XHJcbiAgICAgKiBAaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgZGVmaW5lUHJvcGVydHkocHJvdG8sICd3Jywge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcnJheVszXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlbM10gPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG4vLyBTdXBwbHkgbWV0aG9kcyB0aGF0IGFyZSBub3QgaW4gcGxhY2VcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuYWRkID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWM0LmFkZChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHhcclxuICogQHBhcmFtICB7bnVtYmVyfSAgeVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB6XHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuc2V0ID0gZnVuY3Rpb24ob3V0LCB4LCB5LCB6LCB3KSB7XHJcbiAgICB2ZWM0LnNldChvdXQuYXJyYXksIHgsIHksIHosIHcpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuY29weSA9IGZ1bmN0aW9uKG91dCwgYikge1xyXG4gICAgdmVjNC5jb3B5KG91dC5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LmRpc3QgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICByZXR1cm4gdmVjNC5kaXN0YW5jZShhLmFycmF5LCBiLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LmRpc3RhbmNlID0gVmVjdG9yNC5kaXN0O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5kaXYgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzQuZGl2aWRlKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5kaXZpZGUgPSBWZWN0b3I0LmRpdjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQuZG90ID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgcmV0dXJuIHZlYzQuZG90KGEuYXJyYXksIGIuYXJyYXkpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LmxlbiA9IGZ1bmN0aW9uKGIpIHtcclxuICAgIHJldHVybiB2ZWM0Lmxlbmd0aChiLmFycmF5KTtcclxufTtcclxuXHJcbi8vIFZlY3RvcjQubGVuZ3RoID0gVmVjdG9yNC5sZW47XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICB0XHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubGVycCA9IGZ1bmN0aW9uKG91dCwgYSwgYiwgdCkge1xyXG4gICAgdmVjNC5sZXJwKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgdCk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0Lm1pbiA9IGZ1bmN0aW9uKG91dCwgYSwgYikge1xyXG4gICAgdmVjNC5taW4ob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubWF4ID0gZnVuY3Rpb24ob3V0LCBhLCBiKSB7XHJcbiAgICB2ZWM0Lm1heChvdXQuYXJyYXksIGEuYXJyYXksIGIuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5tdWwgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzQubXVsdGlwbHkob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0Lm11bHRpcGx5ID0gVmVjdG9yNC5tdWw7XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQubmVnYXRlID0gZnVuY3Rpb24ob3V0LCBhKSB7XHJcbiAgICB2ZWM0Lm5lZ2F0ZShvdXQuYXJyYXksIGEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0Lm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKG91dCwgYSkge1xyXG4gICAgdmVjNC5ub3JtYWxpemUob3V0LmFycmF5LCBhLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LnJhbmRvbSA9IGZ1bmN0aW9uKG91dCwgc2NhbGUpIHtcclxuICAgIHZlYzQucmFuZG9tKG91dC5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtudW1iZXJ9ICBzY2FsZVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LnNjYWxlID0gZnVuY3Rpb24ob3V0LCBhLCBzY2FsZSkge1xyXG4gICAgdmVjNC5zY2FsZShvdXQuYXJyYXksIGEuYXJyYXksIHNjYWxlKTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEBwYXJhbSAge251bWJlcn0gIHNjYWxlXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuc2NhbGVBbmRBZGQgPSBmdW5jdGlvbihvdXQsIGEsIGIsIHNjYWxlKSB7XHJcbiAgICB2ZWM0LnNjYWxlQW5kQWRkKG91dC5hcnJheSwgYS5hcnJheSwgYi5hcnJheSwgc2NhbGUpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yNC5zcXJEaXN0ID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgcmV0dXJuIHZlYzQuc3FyRGlzdChhLmFycmF5LCBiLmFycmF5KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYlxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5WZWN0b3I0LnNxdWFyZWREaXN0YW5jZSA9IFZlY3RvcjQuc3FyRGlzdDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuVmVjdG9yNC5zcXJMZW4gPSBmdW5jdGlvbihhKSB7XHJcbiAgICByZXR1cm4gdmVjNC5zcXJMZW4oYS5hcnJheSk7XHJcbn07XHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEByZXR1cm4ge251bWJlcn1cclxuICovXHJcblZlY3RvcjQuc3F1YXJlZExlbmd0aCA9IFZlY3RvcjQuc3FyTGVuO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gb3V0XHJcbiAqIEBwYXJhbSAge2NsYXkuVmVjdG9yNH0gYVxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGJcclxuICogQHJldHVybiB7Y2xheS5WZWN0b3I0fVxyXG4gKi9cclxuVmVjdG9yNC5zdWIgPSBmdW5jdGlvbihvdXQsIGEsIGIpIHtcclxuICAgIHZlYzQuc3VidHJhY3Qob3V0LmFycmF5LCBhLmFycmF5LCBiLmFycmF5KTtcclxuICAgIG91dC5fZGlydHkgPSB0cnVlO1xyXG4gICAgcmV0dXJuIG91dDtcclxufTtcclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBiXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQuc3VidHJhY3QgPSBWZWN0b3I0LnN1YjtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IG91dFxyXG4gKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjR9IGFcclxuICogQHBhcmFtICB7Y2xheS5NYXRyaXg0fSBtXHJcbiAqIEByZXR1cm4ge2NsYXkuVmVjdG9yNH1cclxuICovXHJcblZlY3RvcjQudHJhbnNmb3JtTWF0NCA9IGZ1bmN0aW9uKG91dCwgYSwgbSkge1xyXG4gICAgdmVjNC50cmFuc2Zvcm1NYXQ0KG91dC5hcnJheSwgYS5hcnJheSwgbS5hcnJheSk7XHJcbiAgICBvdXQuX2RpcnR5ID0gdHJ1ZTtcclxuICAgIHJldHVybiBvdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBvdXRcclxuICogQHBhcmFtICB7Y2xheS5WZWN0b3I0fSBhXHJcbiAqIEBwYXJhbSAge2NsYXkuUXVhdGVybmlvbn0gcVxyXG4gKiBAcmV0dXJuIHtjbGF5LlZlY3RvcjR9XHJcbiAqL1xyXG5WZWN0b3I0LnRyYW5zZm9ybVF1YXQgPSBmdW5jdGlvbihvdXQsIGEsIHEpIHtcclxuICAgIHZlYzQudHJhbnNmb3JtUXVhdChvdXQuYXJyYXksIGEuYXJyYXksIHEuYXJyYXkpO1xyXG4gICAgb3V0Ll9kaXJ0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gb3V0O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yNDtcclxuIiwiaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IHZlYzMgZnJvbSAnLi4vZ2xtYXRyaXgvdmVjMyc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqIEBhbGlhcyBjbGF5LnBhcnRpY2xlLlBhcnRpY2xlXHJcbiAqL1xyXG52YXIgUGFydGljbGUgPSBmdW5jdGlvbigpIHtcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2NsYXkuVmVjdG9yM31cclxuICAgICAqL1xyXG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2UgZXVsZXIgYW5nbGUgdG8gcmVwcmVzZW50IHBhcnRpY2xlIHJvdGF0aW9uXHJcbiAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnJvdGF0aW9uID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLnZlbG9jaXR5ID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WZWN0b3IzfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmFuZ3VsYXJWZWxvY2l0eSA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmxpZmUgPSAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5hZ2UgPSAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgdGhpcy5zcHJpdGVTaXplID0gMTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMud2VpZ2h0ID0gMTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtjbGF5LnBhcnRpY2xlLkVtaXR0ZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZW1pdHRlciA9IG51bGw7XHJcbn07XHJcblxyXG4vKipcclxuICogVXBkYXRlIHBhcnRpY2xlIHBvc2l0aW9uXHJcbiAqIEBwYXJhbSAge251bWJlcn0gZGVsdGFUaW1lXHJcbiAqL1xyXG5QYXJ0aWNsZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oZGVsdGFUaW1lKSB7XHJcbiAgICBpZiAodGhpcy52ZWxvY2l0eSkge1xyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQodGhpcy5wb3NpdGlvbi5hcnJheSwgdGhpcy5wb3NpdGlvbi5hcnJheSwgdGhpcy52ZWxvY2l0eS5hcnJheSwgZGVsdGFUaW1lKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFuZ3VsYXJWZWxvY2l0eSkge1xyXG4gICAgICAgIHZlYzMuc2NhbGVBbmRBZGQodGhpcy5yb3RhdGlvbi5hcnJheSwgdGhpcy5yb3RhdGlvbi5hcnJheSwgdGhpcy5hbmd1bGFyVmVsb2NpdHkuYXJyYXksIGRlbHRhVGltZSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQYXJ0aWNsZTtcclxuIiwiaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IFBhcnRpY2xlIGZyb20gJy4vUGFydGljbGUnO1xyXG5pbXBvcnQgVmFsdWUgZnJvbSAnLi4vbWF0aC9WYWx1ZSc7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGFydGljbGUuRW1pdHRlclxyXG4gKiBAZXh0ZW5kcyBjbGF5LmNvcmUuQmFzZVxyXG4gKi9cclxudmFyIEVtaXR0ZXIgPSBCYXNlLmV4dGVuZCggLyoqIEBsZW5kcyBjbGF5LnBhcnRpY2xlLkVtaXR0ZXIjICovIHtcclxuICAgIC8qKlxyXG4gICAgICogTWF4aW11bSBudW1iZXIgb2YgcGFydGljbGVzIGNyZWF0ZWQgYnkgdGhpcyBlbWl0dGVyXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBtYXg6IDEwMDAsXHJcbiAgICAvKipcclxuICAgICAqIE51bWJlciBvZiBwYXJ0aWNsZXMgY3JlYXRlZCBieSB0aGlzIGVtaXR0ZXIgZWFjaCBzaG90XHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBhbW91bnQ6IDIwLFxyXG5cclxuICAgIC8vIEluaXQgc3RhdHVzIGZvciBlYWNoIHBhcnRpY2xlXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRpY2xlIGxpZmUgZ2VuZXJhdG9yXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmFsdWUuPG51bWJlcj59XHJcbiAgICAgKi9cclxuICAgIGxpZmU6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRpY2xlIHBvc2l0aW9uIGdlbmVyYXRvclxyXG4gICAgICogQHR5cGUgez9jbGF5LlZhbHVlLjxjbGF5LlZlY3RvcjM+fVxyXG4gICAgICovXHJcbiAgICBwb3NpdGlvbjogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgcm90YXRpb24gZ2VuZXJhdG9yXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmFsdWUuPGNsYXkuVmVjdG9yMz59XHJcbiAgICAgKi9cclxuICAgIHJvdGF0aW9uOiBudWxsLFxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJ0aWNsZSB2ZWxvY2l0eSBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48Y2xheS5WZWN0b3IzPn1cclxuICAgICAqL1xyXG4gICAgdmVsb2NpdHk6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRpY2xlIGFuZ3VsYXIgdmVsb2NpdHkgZ2VuZXJhdG9yXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmFsdWUuPGNsYXkuVmVjdG9yMz59XHJcbiAgICAgKi9cclxuICAgIGFuZ3VsYXJWZWxvY2l0eTogbnVsbCxcclxuICAgIC8qKlxyXG4gICAgICogUGFydGljbGUgc3ByaXRlIHNpemUgZ2VuZXJhdG9yXHJcbiAgICAgKiBAdHlwZSB7P2NsYXkuVmFsdWUuPG51bWJlcj59XHJcbiAgICAgKi9cclxuICAgIHNwcml0ZVNpemU6IG51bGwsXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRpY2xlIHdlaWdodCBnZW5lcmF0b3JcclxuICAgICAqIEB0eXBlIHs/Y2xheS5WYWx1ZS48bnVtYmVyPn1cclxuICAgICAqL1xyXG4gICAgd2VpZ2h0OiBudWxsLFxyXG5cclxuICAgIF9wYXJ0aWNsZVBvb2w6IG51bGxcclxuXHJcbn0sIGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIHRoaXMuX3BhcnRpY2xlUG9vbCA9IFtdO1xyXG5cclxuICAgIC8vIFRPRE8gUmVkdWNlIGhlYXAgbWVtb3J5XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWF4OyBpKyspIHtcclxuICAgICAgICB2YXIgcGFydGljbGUgPSBuZXcgUGFydGljbGUoKTtcclxuICAgICAgICBwYXJ0aWNsZS5lbWl0dGVyID0gdGhpcztcclxuICAgICAgICB0aGlzLl9wYXJ0aWNsZVBvb2wucHVzaChwYXJ0aWNsZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZlbG9jaXR5KSB7XHJcbiAgICAgICAgICAgIHBhcnRpY2xlLnZlbG9jaXR5ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuYW5ndWxhclZlbG9jaXR5KSB7XHJcbiAgICAgICAgICAgIHBhcnRpY2xlLmFuZ3VsYXJWZWxvY2l0eSA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkucGFydGljbGUuRW1pdHRlci5wcm90b3R5cGUgKi9cclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0dGVyIG51bWJlciBvZiBwYXJ0aWNsZXMgYW5kIHB1c2ggdGhlbSB0byBhIGdpdmVuIHBhcnRpY2xlIGxpc3QuIEVtbWl0IG51bWJlciBpcyBkZWZpbmVkIGJ5IGFtb3VudCBwcm9wZXJ0eVxyXG4gICAgICogQHBhcmFtICB7QXJyYXkuPGNsYXkucGFydGljbGUuUGFydGljbGU+fSBvdXRcclxuICAgICAqL1xyXG4gICAgZW1pdDogZnVuY3Rpb24ob3V0KSB7XHJcbiAgICAgICAgdmFyIGFtb3VudCA9IE1hdGgubWluKHRoaXMuX3BhcnRpY2xlUG9vbC5sZW5ndGgsIHRoaXMuYW1vdW50KTtcclxuXHJcbiAgICAgICAgdmFyIHBhcnRpY2xlO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyBpKyspIHtcclxuICAgICAgICAgICAgcGFydGljbGUgPSB0aGlzLl9wYXJ0aWNsZVBvb2wucG9wKCk7XHJcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgcGFydGljbGUgc3RhdHVzXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uLmdldChwYXJ0aWNsZS5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMucm90YXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm90YXRpb24uZ2V0KHBhcnRpY2xlLnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy52ZWxvY2l0eSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52ZWxvY2l0eS5nZXQocGFydGljbGUudmVsb2NpdHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFuZ3VsYXJWZWxvY2l0eSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmd1bGFyVmVsb2NpdHkuZ2V0KHBhcnRpY2xlLmFuZ3VsYXJWZWxvY2l0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMubGlmZSkge1xyXG4gICAgICAgICAgICAgICAgcGFydGljbGUubGlmZSA9IHRoaXMubGlmZS5nZXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zcHJpdGVTaXplKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZS5zcHJpdGVTaXplID0gdGhpcy5zcHJpdGVTaXplLmdldCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLndlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgcGFydGljbGUud2VpZ2h0ID0gdGhpcy53ZWlnaHQuZ2V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGFydGljbGUuYWdlID0gMDtcclxuXHJcbiAgICAgICAgICAgIG91dC5wdXNoKHBhcnRpY2xlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBLaWxsIGEgZGVhZCBwYXJ0aWNsZSBhbmQgcHV0IGl0IGJhY2sgaW4gdGhlIHBvb2xcclxuICAgICAqIEBwYXJhbSAge2NsYXkucGFydGljbGUuUGFydGljbGV9IHBhcnRpY2xlXHJcbiAgICAgKi9cclxuICAgIGtpbGw6IGZ1bmN0aW9uKHBhcnRpY2xlKSB7XHJcbiAgICAgICAgdGhpcy5fcGFydGljbGVQb29sLnB1c2gocGFydGljbGUpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBjb25zdGFudCAxZCB2YWx1ZSBnZW5lcmF0b3IuIEFsaWFzIGZvciB7QGxpbmsgY2xheS5WYWx1ZS5jb25zdGFudH1cclxuICogQGZ1bmN0aW9uIGNsYXkucGFydGljbGUuRW1pdHRlci5jb25zdGFudFxyXG4gKi9cclxuRW1pdHRlci5jb25zdGFudCA9IFZhbHVlLmNvbnN0YW50O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIGNvbnN0YW50IHZlY3RvciB2YWx1ZSgyZCBvciAzZCkgZ2VuZXJhdG9yLiBBbGlhcyBmb3Ige0BsaW5rIGNsYXkuVmFsdWUudmVjdG9yfVxyXG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnZlY3RvclxyXG4gKi9cclxuRW1pdHRlci52ZWN0b3IgPSBWYWx1ZS52ZWN0b3I7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgcmFuZG9tIDFkIHZhbHVlIGdlbmVyYXRvci4gQWxpYXMgZm9yIHtAbGluayBjbGF5LlZhbHVlLnJhbmRvbTFEfVxyXG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnJhbmRvbTFEXHJcbiAqL1xyXG5FbWl0dGVyLnJhbmRvbTFEID0gVmFsdWUucmFuZG9tMUQ7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgcmFuZG9tIDJkIHZhbHVlIGdlbmVyYXRvci4gQWxpYXMgZm9yIHtAbGluayBjbGF5LlZhbHVlLnJhbmRvbTJEfVxyXG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnJhbmRvbTJEXHJcbiAqL1xyXG5FbWl0dGVyLnJhbmRvbTJEID0gVmFsdWUucmFuZG9tMkQ7XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgcmFuZG9tIDNkIHZhbHVlIGdlbmVyYXRvci4gQWxpYXMgZm9yIHtAbGluayBjbGF5LlZhbHVlLnJhbmRvbTNEfVxyXG4gKiBAZnVuY3Rpb24gY2xheS5wYXJ0aWNsZS5FbWl0dGVyLnJhbmRvbTNEXHJcbiAqL1xyXG5FbWl0dGVyLnJhbmRvbTNEID0gVmFsdWUucmFuZG9tM0Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBFbWl0dGVyO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGFydGljbGUuRmllbGRcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBGaWVsZCA9IEJhc2UuZXh0ZW5kKHt9LCB7XHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IGEgZmllbGQgdG8gdGhlIHBhcnRpY2xlIGFuZCB1cGRhdGUgdGhlIHBhcnRpY2xlIHZlbG9jaXR5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHZlbG9jaXR5XHJcbiAgICAgKiBAcGFyYW0gIHtjbGF5LlZlY3RvcjN9IHBvc2l0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHdlaWdodFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSBkZWx0YVRpbWVcclxuICAgICAqIEBtZW1iZXJPZiBjbGF5LnBhcnRpY2xlLkZpZWxkLnByb3RvdHlwZVxyXG4gICAgICovXHJcbiAgICBhcHBseVRvOiBmdW5jdGlvbih2ZWxvY2l0eSwgcG9zaXRpb24sIHdlaWdodCwgZGVsdGFUaW1lKSB7fVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZpZWxkO1xyXG4iLCJpbXBvcnQgRmllbGQgZnJvbSAnLi9GaWVsZCc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBhcnRpY2xlLkZvcmNlRmllbGRcclxuICogQGV4dGVuZHMgY2xheS5wYXJ0aWNsZS5GaWVsZFxyXG4gKi9cclxudmFyIEZvcmNlRmllbGQgPSBGaWVsZC5leHRlbmQoZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGZvcmNlOiBuZXcgVmVjdG9yMygpXHJcbiAgICB9O1xyXG59LCB7XHJcbiAgICBhcHBseVRvOiBmdW5jdGlvbih2ZWxvY2l0eSwgcG9zaXRpb24sIHdlaWdodCwgZGVsdGFUaW1lKSB7XHJcbiAgICAgICAgaWYgKHdlaWdodCA+IDApIHtcclxuICAgICAgICAgICAgdmVjMy5zY2FsZUFuZEFkZCh2ZWxvY2l0eS5hcnJheSwgdmVsb2NpdHkuYXJyYXksIHRoaXMuZm9yY2UuYXJyYXksIGRlbHRhVGltZSAvIHdlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEZvcmNlRmllbGQ7XHJcbiIsImV4cG9ydCBkZWZhdWx0IFwiQGV4cG9ydCBjbGF5LnBhcnRpY2xlLnZlcnRleFxcbnVuaWZvcm0gbWF0NCB3b3JsZFZpZXcgOiBXT1JMRFZJRVc7XFxudW5pZm9ybSBtYXQ0IHByb2plY3Rpb24gOiBQUk9KRUNUSU9OO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uIDogUE9TSVRJT047XFxuYXR0cmlidXRlIHZlYzMgbm9ybWFsIDogTk9STUFMO1xcbiNpZmRlZiBVVl9BTklNQVRJT05cXG5hdHRyaWJ1dGUgdmVjMiB0ZXhjb29yZDAgOiBURVhDT09SRF8wO1xcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkMSA6IFRFWENPT1JEXzE7XFxudmFyeWluZyB2ZWMyIHZfVXYwO1xcbnZhcnlpbmcgdmVjMiB2X1V2MTtcXG4jZW5kaWZcXG52YXJ5aW5nIGZsb2F0IHZfQWdlO1xcbnZvaWQgbWFpbigpIHtcXG4gdl9BZ2UgPSBub3JtYWwueDtcXG4gZmxvYXQgcm90YXRpb24gPSBub3JtYWwueTtcXG4gdmVjNCB3b3JsZFZpZXdQb3NpdGlvbiA9IHdvcmxkVmlldyAqIHZlYzQocG9zaXRpb24sIDEuMCk7XFxuIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHdvcmxkVmlld1Bvc2l0aW9uO1xcbiBmbG9hdCB3ID0gZ2xfUG9zaXRpb24udztcXG4gZ2xfUG9pbnRTaXplID0gbm9ybWFsLnogKiBwcm9qZWN0aW9uWzBdLnggLyB3O1xcbiAjaWZkZWYgVVZfQU5JTUFUSU9OXFxuIHZfVXYwID0gdGV4Y29vcmQwO1xcbiB2X1V2MSA9IHRleGNvb3JkMTtcXG4gI2VuZGlmXFxufVxcbkBlbmRcXG5AZXhwb3J0IGNsYXkucGFydGljbGUuZnJhZ21lbnRcXG51bmlmb3JtIHNhbXBsZXIyRCBzcHJpdGU7XFxudW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnQ7XFxudW5pZm9ybSB2ZWMzIGNvbG9yIDogWzEuMCwgMS4wLCAxLjBdO1xcbnVuaWZvcm0gZmxvYXQgYWxwaGEgOiAxLjA7XFxudmFyeWluZyBmbG9hdCB2X0FnZTtcXG4jaWZkZWYgVVZfQU5JTUFUSU9OXFxudmFyeWluZyB2ZWMyIHZfVXYwO1xcbnZhcnlpbmcgdmVjMiB2X1V2MTtcXG4jZW5kaWZcXG52b2lkIG1haW4oKSB7XFxuIHZlYzQgY29sb3IgPSB2ZWM0KGNvbG9yLCBhbHBoYSk7XFxuICNpZmRlZiBTUFJJVEVfRU5BQkxFRFxcbiAjaWZkZWYgVVZfQU5JTUFUSU9OXFxuIGNvbG9yICo9IHRleHR1cmUyRChzcHJpdGUsIG1peCh2X1V2MCwgdl9VdjEsIGdsX1BvaW50Q29vcmQpKTtcXG4gI2Vsc2VcXG4gY29sb3IgKj0gdGV4dHVyZTJEKHNwcml0ZSwgZ2xfUG9pbnRDb29yZCk7XFxuICNlbmRpZlxcbiAjZW5kaWZcXG4gI2lmZGVmIEdSQURJRU5UX0VOQUJMRURcXG4gY29sb3IgKj0gdGV4dHVyZTJEKGdyYWRpZW50LCB2ZWMyKHZfQWdlLCAwLjUpKTtcXG4gI2VuZGlmXFxuIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xcbn1cXG5AZW5kXCI7XHJcbiIsImltcG9ydCBSZW5kZXJhYmxlIGZyb20gJy4uL1JlbmRlcmFibGUnO1xyXG5cclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuaW1wb3J0IFNoYWRlciBmcm9tICcuLi9TaGFkZXInO1xyXG5cclxuaW1wb3J0IHBhcnRpY2xlRXNzbCBmcm9tICcuL3BhcnRpY2xlLmdsc2wuanMnO1xyXG5TaGFkZXJbJ2ltcG9ydCddKHBhcnRpY2xlRXNzbCk7XHJcblxyXG52YXIgcGFydGljbGVTaGFkZXIgPSBuZXcgU2hhZGVyKFNoYWRlci5zb3VyY2UoJ2NsYXkucGFydGljbGUudmVydGV4JyksIFNoYWRlci5zb3VyY2UoJ2NsYXkucGFydGljbGUuZnJhZ21lbnQnKSk7XHJcblxyXG4vKipcclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlXHJcbiAqIEBleHRlbmRzIGNsYXkuUmVuZGVyYWJsZVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgdmFyIHBhcnRpY2xlUmVuZGVyYWJsZSA9IG5ldyBjbGF5LnBhcnRpY2xlLlBhcnRpY2xlUmVuZGVyYWJsZSh7XHJcbiAqICAgICAgICAgc3ByaXRlQW5pbWF0aW9uVGlsZVg6IDQsXHJcbiAqICAgICAgICAgc3ByaXRlQW5pbWF0aW9uVGlsZVk6IDQsXHJcbiAqICAgICAgICAgc3ByaXRlQW5pbWF0aW9uUmVwZWF0OiAxXHJcbiAqICAgICB9KTtcclxuICogICAgIHNjZW5lLmFkZChwYXJ0aWNsZVJlbmRlcmFibGUpO1xyXG4gKiAgICAgLy8gRW5hYmxlIHV2IGFuaW1hdGlvbiBpbiB0aGUgc2hhZGVyXHJcbiAqICAgICBwYXJ0aWNsZVJlbmRlcmFibGUubWF0ZXJpYWwuZGVmaW5lKCdib3RoJywgJ1VWX0FOSU1BVElPTicpO1xyXG4gKiAgICAgdmFyIEVtaXR0ZXIgPSBjbGF5LnBhcnRpY2xlLkVtaXR0ZXI7XHJcbiAqICAgICB2YXIgVmVjdG9yMyA9IGNsYXkuVmVjdG9yMztcclxuICogICAgIHZhciBlbWl0dGVyID0gbmV3IEVtaXR0ZXIoe1xyXG4gKiAgICAgICAgIG1heDogMjAwMCxcclxuICogICAgICAgICBhbW91bnQ6IDEwMCxcclxuICogICAgICAgICBsaWZlOiBFbWl0dGVyLnJhbmRvbTFEKDEwLCAyMCksXHJcbiAqICAgICAgICAgcG9zaXRpb246IEVtaXR0ZXIudmVjdG9yKG5ldyBWZWN0b3IzKCkpLFxyXG4gKiAgICAgICAgIHZlbG9jaXR5OiBFbWl0dGVyLnJhbmRvbTNEKG5ldyBWZWN0b3IzKC0xMCwgMCwgLTEwKSwgbmV3IFZlY3RvcjMoMTAsIDAsIDEwKSk7XHJcbiAqICAgICB9KTtcclxuICogICAgIHBhcnRpY2xlUmVuZGVyYWJsZS5hZGRFbWl0dGVyKGVtaXR0ZXIpO1xyXG4gKiAgICAgdmFyIGdyYXZpdHlGaWVsZCA9IG5ldyBjbGF5LnBhcnRpY2xlLkZvcmNlRmllbGQoKTtcclxuICogICAgIGdyYXZpdHlGaWVsZC5mb3JjZS55ID0gLTEwO1xyXG4gKiAgICAgcGFydGljbGVSZW5kZXJhYmxlLmFkZEZpZWxkKGdyYXZpdHlGaWVsZCk7XHJcbiAqICAgICAuLi5cclxuICogICAgIGFuaW1hdGlvbi5vbignZnJhbWUnLCBmdW5jdGlvbihmcmFtZVRpbWUpIHtcclxuICogICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUudXBkYXRlUGFydGljbGVzKGZyYW1lVGltZSk7XHJcbiAqICAgICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xyXG4gKiAgICAgfSk7XHJcbiAqL1xyXG52YXIgUGFydGljbGVSZW5kZXJhYmxlID0gUmVuZGVyYWJsZS5leHRlbmQoLyoqIEBsZW5kcyBjbGF5LnBhcnRpY2xlLlBhcnRpY2xlUmVuZGVyYWJsZSMgKi8ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqL1xyXG4gICAgbG9vcDogdHJ1ZSxcclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIG9uZXNob3Q6IGZhbHNlLFxyXG4gICAgLyoqXHJcbiAgICAgKiBEdXJhdGlvbiBvZiBwYXJ0aWNsZSBzeXN0ZW0gaW4gbWlsbGlzZWNvbmRzXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBkdXJhdGlvbjogMSxcclxuXHJcbiAgICAvLyBVViBBbmltYXRpb25cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgc3ByaXRlQW5pbWF0aW9uVGlsZVg6IDEsXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHNwcml0ZUFuaW1hdGlvblRpbGVZOiAxLFxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBzcHJpdGVBbmltYXRpb25SZXBlYXQ6IDAsXHJcblxyXG4gICAgbW9kZTogUmVuZGVyYWJsZS5QT0lOVFMsXHJcblxyXG4gICAgaWdub3JlUGlja2luZzogdHJ1ZSxcclxuXHJcbiAgICBfZWxhcHNlZFRpbWU6IDAsXHJcblxyXG4gICAgX2VtaXR0aW5nOiB0cnVlXHJcblxyXG59LCBmdW5jdGlvbigpe1xyXG5cclxuICAgIHRoaXMuZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe1xyXG4gICAgICAgIGR5bmFtaWM6IHRydWVcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghdGhpcy5tYXRlcmlhbCkge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWwgPSBuZXcgTWF0ZXJpYWwoe1xyXG4gICAgICAgICAgICBzaGFkZXI6IHBhcnRpY2xlU2hhZGVyLFxyXG4gICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcclxuICAgICAgICAgICAgZGVwdGhNYXNrOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm1hdGVyaWFsLmVuYWJsZVRleHR1cmUoJ3Nwcml0ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3BhcnRpY2xlcyA9IFtdO1xyXG4gICAgdGhpcy5fZmllbGRzID0gW107XHJcbiAgICB0aGlzLl9lbWl0dGVycyA9IFtdO1xyXG59LFxyXG4vKiogQGxlbmRzIGNsYXkucGFydGljbGUuUGFydGljbGVSZW5kZXJhYmxlLnByb3RvdHlwZSAqL1xyXG57XHJcblxyXG4gICAgY3VsbGluZzogZmFsc2UsXHJcblxyXG4gICAgZnJ1c3R1bUN1bGxpbmc6IGZhbHNlLFxyXG5cclxuICAgIGNhc3RTaGFkb3c6IGZhbHNlLFxyXG4gICAgcmVjZWl2ZVNoYWRvdzogZmFsc2UsXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgZW1pdHRlclxyXG4gICAgICogQHBhcmFtIHtjbGF5LnBhcnRpY2xlLkVtaXR0ZXJ9IGVtaXR0ZXJcclxuICAgICAqL1xyXG4gICAgYWRkRW1pdHRlcjogZnVuY3Rpb24oZW1pdHRlcikge1xyXG4gICAgICAgIHRoaXMuX2VtaXR0ZXJzLnB1c2goZW1pdHRlcik7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGVtaXR0ZXJcclxuICAgICAqIEBwYXJhbSB7Y2xheS5wYXJ0aWNsZS5FbWl0dGVyfSBlbWl0dGVyXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUVtaXR0ZXI6IGZ1bmN0aW9uKGVtaXR0ZXIpIHtcclxuICAgICAgICB0aGlzLl9lbWl0dGVycy5zcGxpY2UodGhpcy5fZW1pdHRlcnMuaW5kZXhPZihlbWl0dGVyKSwgMSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIGZpZWxkXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkucGFydGljbGUuRmllbGR9IGZpZWxkXHJcbiAgICAgKi9cclxuICAgIGFkZEZpZWxkOiBmdW5jdGlvbihmaWVsZCkge1xyXG4gICAgICAgIHRoaXMuX2ZpZWxkcy5wdXNoKGZpZWxkKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgZmllbGRcclxuICAgICAqIEBwYXJhbSB7Y2xheS5wYXJ0aWNsZS5GaWVsZH0gZmllbGRcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlRmllbGQ6IGZ1bmN0aW9uKGZpZWxkKSB7XHJcbiAgICAgICAgdGhpcy5fZmllbGRzLnNwbGljZSh0aGlzLl9maWVsZHMuaW5kZXhPZihmaWVsZCksIDEpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0IHRoZSBwYXJ0aWNsZSBzeXN0ZW0uXHJcbiAgICAgKi9cclxuICAgIHJlc2V0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICAvLyBQdXQgYWxsIHRoZSBwYXJ0aWNsZXMgYmFja1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcGFydGljbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5fcGFydGljbGVzW2ldO1xyXG4gICAgICAgICAgICBwLmVtaXR0ZXIua2lsbChwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcGFydGljbGVzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgPSAwO1xyXG4gICAgICAgIHRoaXMuX2VtaXR0aW5nID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IGRlbHRhVGltZVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVQYXJ0aWNsZXM6IGZ1bmN0aW9uKGRlbHRhVGltZSkge1xyXG5cclxuICAgICAgICAvLyBNUyA9PiBTZWNvbmRzXHJcbiAgICAgICAgZGVsdGFUaW1lIC89IDEwMDA7XHJcbiAgICAgICAgdGhpcy5fZWxhcHNlZFRpbWUgKz0gZGVsdGFUaW1lO1xyXG5cclxuICAgICAgICB2YXIgcGFydGljbGVzID0gdGhpcy5fcGFydGljbGVzO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZW1pdHRpbmcpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9lbWl0dGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdHRlcnNbaV0uZW1pdChwYXJ0aWNsZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9uZXNob3QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFnaW5nXHJcbiAgICAgICAgdmFyIGxlbiA9IHBhcnRpY2xlcy5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47KSB7XHJcbiAgICAgICAgICAgIHZhciBwID0gcGFydGljbGVzW2ldO1xyXG4gICAgICAgICAgICBwLmFnZSArPSBkZWx0YVRpbWU7XHJcbiAgICAgICAgICAgIGlmIChwLmFnZSA+PSBwLmxpZmUpIHtcclxuICAgICAgICAgICAgICAgIHAuZW1pdHRlci5raWxsKHApO1xyXG4gICAgICAgICAgICAgICAgcGFydGljbGVzW2ldID0gcGFydGljbGVzW2xlbi0xXTtcclxuICAgICAgICAgICAgICAgIHBhcnRpY2xlcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZVxyXG4gICAgICAgICAgICB2YXIgcCA9IHBhcnRpY2xlc1tpXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2ZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX2ZpZWxkcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpZWxkc1tqXS5hcHBseVRvKHAudmVsb2NpdHksIHAucG9zaXRpb24sIHAud2VpZ2h0LCBkZWx0YVRpbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHAudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl91cGRhdGVWZXJ0aWNlcygpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlVmVydGljZXM6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XHJcbiAgICAgICAgLy8gSWYgaGFzIHV2IGFuaW1hdGlvblxyXG4gICAgICAgIHZhciBhbmltVGlsZVggPSB0aGlzLnNwcml0ZUFuaW1hdGlvblRpbGVYO1xyXG4gICAgICAgIHZhciBhbmltVGlsZVkgPSB0aGlzLnNwcml0ZUFuaW1hdGlvblRpbGVZO1xyXG4gICAgICAgIHZhciBhbmltUmVwZWF0ID0gdGhpcy5zcHJpdGVBbmltYXRpb25SZXBlYXQ7XHJcbiAgICAgICAgdmFyIG5VdkFuaW1GcmFtZSA9IGFuaW1UaWxlWSAqIGFuaW1UaWxlWCAqIGFuaW1SZXBlYXQ7XHJcbiAgICAgICAgdmFyIGhhc1V2QW5pbWF0aW9uID0gblV2QW5pbUZyYW1lID4gMTtcclxuICAgICAgICB2YXIgcG9zaXRpb25zID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZTtcclxuICAgICAgICAvLyBQdXQgcGFydGljbGUgc3RhdHVzIGluIG5vcm1hbFxyXG4gICAgICAgIHZhciBub3JtYWxzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwudmFsdWU7XHJcbiAgICAgICAgdmFyIHV2cyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMudGV4Y29vcmQwLnZhbHVlO1xyXG4gICAgICAgIHZhciB1dnMyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDEudmFsdWU7XHJcblxyXG4gICAgICAgIHZhciBsZW4gPSB0aGlzLl9wYXJ0aWNsZXMubGVuZ3RoO1xyXG4gICAgICAgIGlmICghcG9zaXRpb25zIHx8IHBvc2l0aW9ucy5sZW5ndGggIT09IGxlbiAqIDMpIHtcclxuICAgICAgICAgICAgLy8gVE9ETyBPcHRpbWl6ZVxyXG4gICAgICAgICAgICBwb3NpdGlvbnMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShsZW4gKiAzKTtcclxuICAgICAgICAgICAgbm9ybWFscyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShsZW4gKiAzKTtcclxuICAgICAgICAgICAgaWYgKGhhc1V2QW5pbWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB1dnMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMC52YWx1ZSA9IG5ldyBGbG9hdDMyQXJyYXkobGVuICogMik7XHJcbiAgICAgICAgICAgICAgICB1dnMyID0gZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDEudmFsdWUgPSBuZXcgRmxvYXQzMkFycmF5KGxlbiAqIDIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW52QW5pbVRpbGVYID0gMSAvIGFuaW1UaWxlWDtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXJ0aWNsZSA9IHRoaXMuX3BhcnRpY2xlc1tpXTtcclxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IGkgKiAzO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDM7IGorKykge1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25zW29mZnNldCArIGpdID0gcGFydGljbGUucG9zaXRpb24uYXJyYXlbal07XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW29mZnNldF0gPSBwYXJ0aWNsZS5hZ2UgLyBwYXJ0aWNsZS5saWZlO1xyXG4gICAgICAgICAgICAgICAgLy8gbm9ybWFsc1tvZmZzZXQgKyAxXSA9IHBhcnRpY2xlLnJvdGF0aW9uO1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsc1tvZmZzZXQgKyAxXSA9IDA7XHJcbiAgICAgICAgICAgICAgICBub3JtYWxzW29mZnNldCArIDJdID0gcGFydGljbGUuc3ByaXRlU2l6ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgb2Zmc2V0MiA9IGkgKiAyO1xyXG4gICAgICAgICAgICBpZiAoaGFzVXZBbmltYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE9cclxuICAgICAgICAgICAgICAgIHZhciBwID0gcGFydGljbGUuYWdlIC8gcGFydGljbGUubGlmZTtcclxuICAgICAgICAgICAgICAgIHZhciBzdGFnZSA9IE1hdGgucm91bmQocCAqIChuVXZBbmltRnJhbWUgLSAxKSkgKiBhbmltUmVwZWF0O1xyXG4gICAgICAgICAgICAgICAgdmFyIHYgPSBNYXRoLmZsb29yKHN0YWdlICogaW52QW5pbVRpbGVYKTtcclxuICAgICAgICAgICAgICAgIHZhciB1ID0gc3RhZ2UgLSB2ICogYW5pbVRpbGVYO1xyXG4gICAgICAgICAgICAgICAgdXZzW29mZnNldDJdID0gdSAvIGFuaW1UaWxlWDtcclxuICAgICAgICAgICAgICAgIHV2c1tvZmZzZXQyICsgMV0gPSAxIC0gdiAvIGFuaW1UaWxlWTtcclxuICAgICAgICAgICAgICAgIHV2czJbb2Zmc2V0Ml0gPSAodSArIDEpIC8gYW5pbVRpbGVYO1xyXG4gICAgICAgICAgICAgICAgdXZzMltvZmZzZXQyICsgMV0gPSAxIC0gKHYgKyAxKSAvIGFuaW1UaWxlWTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2VvbWV0cnkuZGlydHkoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAgICovXHJcbiAgICBpc0ZpbmlzaGVkOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZWxhcHNlZFRpbWUgPiB0aGlzLmR1cmF0aW9uICYmICF0aGlzLmxvb3A7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtICB7Y2xheS5SZW5kZXJlcn0gcmVuZGVyZXJcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24ocmVuZGVyZXIpIHtcclxuICAgICAgICAvLyBQdXQgYWxsIHRoZSBwYXJ0aWNsZXMgYmFja1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcGFydGljbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBwID0gdGhpcy5fcGFydGljbGVzW2ldO1xyXG4gICAgICAgICAgICBwLmVtaXR0ZXIua2lsbChwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZW9tZXRyeS5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgICAgICAvLyBUT0RPIERpc3Bvc2UgdGV4dHVyZSA/XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHJldHVybiB7Y2xheS5wYXJ0aWNsZS5QYXJ0aWNsZVJlbmRlcmFibGV9XHJcbiAgICAgKi9cclxuICAgIGNsb25lOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgcGFydGljbGVSZW5kZXJhYmxlID0gbmV3IFBhcnRpY2xlUmVuZGVyYWJsZSh7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsOiB0aGlzLm1hdGVyaWFsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLmxvb3AgPSB0aGlzLmxvb3A7XHJcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLmR1cmF0aW9uID0gdGhpcy5kdXJhdGlvbjtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUub25lc2hvdCA9IHRoaXMub25lc2hvdDtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuc3ByaXRlQW5pbWF0aW9uUmVwZWF0ID0gdGhpcy5zcHJpdGVBbmltYXRpb25SZXBlYXQ7XHJcbiAgICAgICAgcGFydGljbGVSZW5kZXJhYmxlLnNwcml0ZUFuaW1hdGlvblRpbGVZID0gdGhpcy5zcHJpdGVBbmltYXRpb25UaWxlWTtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuc3ByaXRlQW5pbWF0aW9uVGlsZVggPSB0aGlzLnNwcml0ZUFuaW1hdGlvblRpbGVYO1xyXG5cclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUucG9zaXRpb24uY29weSh0aGlzLnBvc2l0aW9uKTtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUucm90YXRpb24uY29weSh0aGlzLnJvdGF0aW9uKTtcclxuICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuc2NhbGUuY29weSh0aGlzLnNjYWxlKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBwYXJ0aWNsZVJlbmRlcmFibGUuYWRkKHRoaXMuX2NoaWxkcmVuW2ldLmNsb25lKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFydGljbGVSZW5kZXJhYmxlO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBhcnRpY2xlUmVuZGVyYWJsZTtcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkucGlja2luZy5jb2xvci52ZXJ0ZXhcXG51bmlmb3JtIG1hdDQgd29ybGRWaWV3UHJvamVjdGlvbiA6IFdPUkxEVklFV1BST0pFQ1RJT047XFxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24gOiBQT1NJVElPTjtcXG5AaW1wb3J0IGNsYXkuY2h1bmsuc2tpbm5pbmdfaGVhZGVyXFxudm9pZCBtYWluKCl7XFxuIHZlYzMgc2tpbm5lZFBvc2l0aW9uID0gcG9zaXRpb247XFxuICNpZmRlZiBTS0lOTklOR1xcbiBAaW1wb3J0IGNsYXkuY2h1bmsuc2tpbl9tYXRyaXhcXG4gc2tpbm5lZFBvc2l0aW9uID0gKHNraW5NYXRyaXhXUyAqIHZlYzQocG9zaXRpb24sIDEuMCkpLnh5ejtcXG4gI2VuZGlmXFxuIGdsX1Bvc2l0aW9uID0gd29ybGRWaWV3UHJvamVjdGlvbiAqIHZlYzQoc2tpbm5lZFBvc2l0aW9uLCAxLjApO1xcbn1cXG5AZW5kXFxuQGVuZFxcbkBleHBvcnQgY2xheS5waWNraW5nLmNvbG9yLmZyYWdtZW50XFxudW5pZm9ybSB2ZWM0IGNvbG9yIDogWzEuMCwgMS4wLCAxLjAsIDEuMF07XFxudm9pZCBtYWluKCkge1xcbiBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcXG59XFxuQGVuZFwiO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgRnJhbWVCdWZmZXIgZnJvbSAnLi4vRnJhbWVCdWZmZXInO1xyXG5pbXBvcnQgVGV4dHVyZTJEIGZyb20gJy4uL1RleHR1cmUyRCc7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuaW1wb3J0IE1hdGVyaWFsIGZyb20gJy4uL01hdGVyaWFsJztcclxuXHJcbmltcG9ydCBjb2xvckVzc2wgZnJvbSAnLi9jb2xvci5nbHNsLmpzJztcclxuU2hhZGVyLmltcG9ydChjb2xvckVzc2wpO1xyXG5cclxuLyoqXHJcbiAqIFBpeGVsIHBpY2tpbmcgaXMgZ3B1IGJhc2VkIHBpY2tpbmcsIHdoaWNoIGlzIGZhc3QgYW5kIGFjY3VyYXRlLlxyXG4gKiBCdXQgbm90IGxpa2UgcmF5IHBpY2tpbmcsIGl0IGNhbid0IGdldCB0aGUgaW50ZXJzZWN0aW9uIHBvaW50IGFuZCB0cmlhbmdsZS5cclxuICogQGNvbnN0cnVjdG9yIGNsYXkucGlja2luZy5QaXhlbFBpY2tpbmdcclxuICogQGV4dGVuZHMgY2xheS5jb3JlLkJhc2VcclxuICovXHJcbnZhciBQaXhlbFBpY2tpbmcgPSBCYXNlLmV4dGVuZChmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkucGlja2luZy5QaXhlbFBpY2tpbmcjICovIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUYXJnZXQgcmVuZGVyZXJcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5SZW5kZXJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICByZW5kZXJlcjogbnVsbCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEb3duc2FtcGxlIHJhdGlvIG9mIGhpZGRlbiBmcmFtZSBidWZmZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRvd25TYW1wbGVSYXRpbzogMSxcclxuXHJcbiAgICAgICAgd2lkdGg6IDEwMCxcclxuICAgICAgICBoZWlnaHQ6IDEwMCxcclxuXHJcbiAgICAgICAgbG9va3VwT2Zmc2V0OiAxLFxyXG5cclxuICAgICAgICBfZnJhbWVCdWZmZXI6IG51bGwsXHJcbiAgICAgICAgX3RleHR1cmU6IG51bGwsXHJcbiAgICAgICAgX3NoYWRlcjogbnVsbCxcclxuXHJcbiAgICAgICAgX2lkTWF0ZXJpYWxzOiBbXSxcclxuICAgICAgICBfbG9va3VwVGFibGU6IFtdLFxyXG5cclxuICAgICAgICBfbWVzaE1hdGVyaWFsczogW10sXHJcblxyXG4gICAgICAgIF9pZE9mZnNldDogMFxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5yZW5kZXJlcikge1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnJlbmRlcmVyLmdldFdpZHRoKCk7XHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnJlbmRlcmVyLmdldEhlaWdodCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faW5pdCgpO1xyXG59LCAvKiogQGxlbmRzIGNsYXkucGlja2luZy5QaXhlbFBpY2tpbmcucHJvdG90eXBlICovIHtcclxuICAgIF9pbml0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlID0gbmV3IFRleHR1cmUyRCh7XHJcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLndpZHRoICogdGhpcy5kb3duU2FtcGxlUmF0aW8sXHJcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgKiB0aGlzLmRvd25TYW1wbGVSYXRpb1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyID0gbmV3IEZyYW1lQnVmZmVyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3NoYWRlciA9IG5ldyBTaGFkZXIoU2hhZGVyLnNvdXJjZSgnY2xheS5waWNraW5nLmNvbG9yLnZlcnRleCcpLCBTaGFkZXIuc291cmNlKCdjbGF5LnBpY2tpbmcuY29sb3IuZnJhZ21lbnQnKSk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgcGlja2luZyBwcmVzaXNpb25cclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYXRpb1xyXG4gICAgICovXHJcbiAgICBzZXRQcmVjaXNpb246IGZ1bmN0aW9uKHJhdGlvKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dHVyZS53aWR0aCA9IHRoaXMud2lkdGggKiByYXRpbztcclxuICAgICAgICB0aGlzLl90ZXh0dXJlLmhlaWdodCA9IHRoaXMuaGVpZ2h0ICogcmF0aW87XHJcbiAgICAgICAgdGhpcy5kb3duU2FtcGxlUmF0aW8gPSByYXRpbztcclxuICAgIH0sXHJcbiAgICByZXNpemU6IGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlLndpZHRoID0gd2lkdGggKiB0aGlzLmRvd25TYW1wbGVSYXRpbztcclxuICAgICAgICB0aGlzLl90ZXh0dXJlLmhlaWdodCA9IGhlaWdodCAqIHRoaXMuZG93blNhbXBsZVJhdGlvO1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICB0aGlzLl90ZXh0dXJlLmRpcnR5KCk7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgdGhlIHBpY2tpbmcgZnJhbWVidWZmZXJcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByYXRpb1xyXG4gICAgICovXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uKHNjZW5lLCBjYW1lcmEpIHtcclxuICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xyXG4gICAgICAgIGlmIChyZW5kZXJlci5nZXRXaWR0aCgpICE9PSB0aGlzLndpZHRoIHx8IHJlbmRlcmVyLmdldEhlaWdodCgpICE9PSB0aGlzLmhlaWdodCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZShyZW5kZXJlci53aWR0aCwgcmVuZGVyZXIuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLmF0dGFjaCh0aGlzLl90ZXh0dXJlKTtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB0aGlzLl9pZE9mZnNldCA9IHRoaXMubG9va3VwT2Zmc2V0O1xyXG4gICAgICAgIHRoaXMuX3NldE1hdGVyaWFsKHNjZW5lKTtcclxuICAgICAgICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XHJcbiAgICAgICAgdGhpcy5fcmVzdG9yZU1hdGVyaWFsKCk7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVCdWZmZXIudW5iaW5kKHJlbmRlcmVyKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldE1hdGVyaWFsOiBmdW5jdGlvbihyb290KSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9MDsgaSA8IHJvb3QuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IHJvb3QuX2NoaWxkcmVuW2ldO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQuZ2VvbWV0cnkgJiYgY2hpbGQubWF0ZXJpYWwgJiYgY2hpbGQubWF0ZXJpYWwuc2hhZGVyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSB0aGlzLl9pZE9mZnNldCsrO1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkeCA9IGlkIC0gdGhpcy5sb29rdXBPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWF0ZXJpYWwgPSB0aGlzLl9pZE1hdGVyaWFsc1tpZHhdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRlcmlhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsID0gbmV3IE1hdGVyaWFsKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyOiB0aGlzLl9zaGFkZXJcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBwYWNrSUQoaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yWzBdIC89IDI1NTtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvclsxXSAvPSAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3JbMl0gLz0gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yWzNdID0gMS4wO1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNldCgnY29sb3InLCBjb2xvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faWRNYXRlcmlhbHNbaWR4XSA9IG1hdGVyaWFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWVzaE1hdGVyaWFsc1tpZHhdID0gY2hpbGQubWF0ZXJpYWw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb29rdXBUYWJsZVtpZHhdID0gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICBjaGlsZC5tYXRlcmlhbCA9IG1hdGVyaWFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5fY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRNYXRlcmlhbChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGljayB0aGUgb2JqZWN0XHJcbiAgICAgKiBAcGFyYW0gIHtudW1iZXJ9IHggTW91c2UgcG9zaXRpb24geFxyXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB5IE1vdXNlIHBvc2l0aW9uIHlcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cclxuICAgICAqL1xyXG4gICAgcGljazogZnVuY3Rpb24oeCwgeSkge1xyXG4gICAgICAgIHZhciByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcblxyXG4gICAgICAgIHZhciByYXRpbyA9IHRoaXMuZG93blNhbXBsZVJhdGlvO1xyXG4gICAgICAgIHggPSBNYXRoLmNlaWwocmF0aW8gKiB4KTtcclxuICAgICAgICB5ID0gTWF0aC5jZWlsKHJhdGlvICogKHRoaXMuaGVpZ2h0IC0geSkpO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICB2YXIgcGl4ZWwgPSBuZXcgVWludDhBcnJheSg0KTtcclxuICAgICAgICB2YXIgX2dsID0gcmVuZGVyZXIuZ2w7XHJcbiAgICAgICAgLy8gVE9ETyBvdXQgb2YgYm91bmRzID9cclxuICAgICAgICAvLyBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgP1xyXG4gICAgICAgIF9nbC5yZWFkUGl4ZWxzKHgsIHksIDEsIDEsIF9nbC5SR0JBLCBfZ2wuVU5TSUdORURfQllURSwgcGl4ZWwpO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lQnVmZmVyLnVuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgLy8gU2tpcCBpbnRlcnBvbGF0ZWQgcGl4ZWwgYmVjYXVzZSBvZiBhbnRpIGFsaWFzXHJcbiAgICAgICAgaWYgKHBpeGVsWzNdID09PSAyNTUpIHtcclxuICAgICAgICAgICAgdmFyIGlkID0gdW5wYWNrSUQocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSk7XHJcbiAgICAgICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVsID0gdGhpcy5fbG9va3VwVGFibGVbaWQgLSB0aGlzLmxvb2t1cE9mZnNldF07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF9yZXN0b3JlTWF0ZXJpYWw6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbG9va3VwVGFibGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fbG9va3VwVGFibGVbaV0ubWF0ZXJpYWwgPSB0aGlzLl9tZXNoTWF0ZXJpYWxzW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24ocmVuZGVyZXIpIHtcclxuICAgICAgICB0aGlzLl9mcmFtZUJ1ZmZlci5kaXNwb3NlKHJlbmRlcmVyKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5mdW5jdGlvbiBwYWNrSUQoaWQpe1xyXG4gICAgdmFyIHIgPSBpZCA+PiAxNjtcclxuICAgIHZhciBnID0gKGlkIC0gKHIgPDwgOCkpID4+IDg7XHJcbiAgICB2YXIgYiA9IGlkIC0gKHIgPDwgMTYpIC0gKGc8PDgpO1xyXG4gICAgcmV0dXJuIFtyLCBnLCBiXTtcclxufVxyXG5cclxuZnVuY3Rpb24gdW5wYWNrSUQociwgZywgYil7XHJcbiAgICByZXR1cm4gKHIgPDwgMTYpICsgKGc8PDgpICsgYjtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGl4ZWxQaWNraW5nO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuXHJcbnZhciBkb2MgPSB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnID8ge30gOiBkb2N1bWVudDtcclxuXHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5wbHVnaW4uRnJlZUNvbnRyb2xcclxuICogQGV4YW1wbGVcclxuICogICAgIHZhciBjb250cm9sID0gbmV3IGNsYXkucGx1Z2luLkZyZWVDb250cm9sKHtcclxuICogICAgICAgICB0YXJnZXQ6IGNhbWVyYSxcclxuICogICAgICAgICBkb21FbGVtZW50OiByZW5kZXJlci5jYW52YXNcclxuICogICAgIH0pO1xyXG4gKiAgICAgLi4uXHJcbiAqICAgICB0aW1lbGluZS5vbignZnJhbWUnLCBmdW5jdGlvbihmcmFtZVRpbWUpIHtcclxuICogICAgICAgICBjb250cm9sLnVwZGF0ZShmcmFtZVRpbWUpO1xyXG4gKiAgICAgICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTtcclxuICogICAgIH0pO1xyXG4gKi9cclxudmFyIEZyZWVDb250cm9sID0gQmFzZS5leHRlbmQoZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gLyoqIEBsZW5kcyBjbGF5LnBsdWdpbi5GcmVlQ29udHJvbCMgKi8ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNjZW5lIG5vZGUgdG8gY29udHJvbCwgbW9zdGx5IGl0IGlzIGEgY2FtZXJhXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0YXJnZXQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRhcmdldCBkb20gdG8gYmluZCB3aXRoIG1vdXNlIGV2ZW50c1xyXG4gICAgICAgICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cclxuICAgICAgICAgKi9cclxuICAgICAgICBkb21FbGVtZW50OiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNb3VzZSBtb3ZlIHNlbnNpdGl2aXR5XHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBzZW5zaXRpdml0eTogMSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGFyZ2V0IG1vdmUgc3BlZWRcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNwZWVkOiAwLjQsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFVwIGF4aXNcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHVwOiBuZXcgVmVjdG9yMygwLCAxLCAwKSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSWYgbG9jayB2ZXJ0aWNhbCBtb3ZlbWVudFxyXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHZlcnRpY2FsTW92ZUxvY2s6IGZhbHNlLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UaW1lbGluZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aW1lbGluZTogbnVsbCxcclxuXHJcbiAgICAgICAgX21vdmVGb3J3YXJkOiBmYWxzZSxcclxuICAgICAgICBfbW92ZUJhY2t3YXJkOiBmYWxzZSxcclxuICAgICAgICBfbW92ZUxlZnQ6IGZhbHNlLFxyXG4gICAgICAgIF9tb3ZlUmlnaHQ6IGZhbHNlLFxyXG5cclxuICAgICAgICBfb2Zmc2V0UGl0Y2g6IDAsXHJcbiAgICAgICAgX29mZnNldFJvbGw6IDBcclxuICAgIH07XHJcbn0sIGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5fbG9ja0NoYW5nZSA9IHRoaXMuX2xvY2tDaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuX2tleURvd24gPSB0aGlzLl9rZXlEb3duLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9rZXlVcCA9IHRoaXMuX2tleVVwLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9tb3VzZU1vdmUgPSB0aGlzLl9tb3VzZU1vdmUuYmluZCh0aGlzKTtcclxuXHJcbiAgICBpZiAodGhpcy5kb21FbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5wbHVnaW4uRnJlZUNvbnRyb2wucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogaW5pdCBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIGluaXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIC8vIFVzZSBwb2ludGVyIGxvY2tcclxuICAgICAgICAvLyBodHRwOi8vd3d3Lmh0bWw1cm9ja3MuY29tL2VuL3R1dG9yaWFscy9wb2ludGVybG9jay9pbnRyby9cclxuICAgICAgICB2YXIgZWwgPSB0aGlzLmRvbUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIC8vTXVzdCByZXF1ZXN0IHBvaW50ZXIgbG9jayBhZnRlciBjbGljayBldmVudCwgY2FuJ3Qgbm90IGRvIGl0IGRpcmVjdGx5XHJcbiAgICAgICAgLy9XaHkgPyA/XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZWwsICdjbGljaycsIHRoaXMuX3JlcXVlc3RQb2ludGVyTG9jayk7XHJcblxyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvYywgJ3BvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5fbG9ja0NoYW5nZSk7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9jLCAnbW96cG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLl9sb2NrQ2hhbmdlKTtcclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb2MsICd3ZWJraXRwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xyXG5cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb2MsICdrZXlkb3duJywgdGhpcy5fa2V5RG93bik7XHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9jLCAna2V5dXAnLCB0aGlzLl9rZXlVcCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZWxpbmUub24oJ2ZyYW1lJywgdGhpcy5fZGV0ZWN0TW92ZW1lbnRDaGFuZ2UsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwb3NlIGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBlbCA9IHRoaXMuZG9tRWxlbWVudDtcclxuXHJcbiAgICAgICAgZWwuZXhpdFBvaW50ZXJMb2NrID0gZWwuZXhpdFBvaW50ZXJMb2NrXHJcbiAgICAgICAgICAgIHx8IGVsLm1vekV4aXRQb2ludGVyTG9ja1xyXG4gICAgICAgICAgICB8fCBlbC53ZWJraXRFeGl0UG9pbnRlckxvY2s7XHJcblxyXG4gICAgICAgIGlmIChlbC5leGl0UG9pbnRlckxvY2spIHtcclxuICAgICAgICAgICAgZWwuZXhpdFBvaW50ZXJMb2NrKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihlbCwgJ2NsaWNrJywgdGhpcy5fcmVxdWVzdFBvaW50ZXJMb2NrKTtcclxuXHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9jLCAncG9pbnRlcmxvY2tjaGFuZ2UnLCB0aGlzLl9sb2NrQ2hhbmdlKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2MsICdtb3pwb2ludGVybG9ja2NoYW5nZScsIHRoaXMuX2xvY2tDaGFuZ2UpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvYywgJ3dlYmtpdHBvaW50ZXJsb2NrY2hhbmdlJywgdGhpcy5fbG9ja0NoYW5nZSk7XHJcblxyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvYywgJ2tleWRvd24nLCB0aGlzLl9rZXlEb3duKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2MsICdrZXl1cCcsIHRoaXMuX2tleVVwKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGltZWxpbmUpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lbGluZS5vZmYoJ2ZyYW1lJywgdGhpcy5fZGV0ZWN0TW92ZW1lbnRDaGFuZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX3JlcXVlc3RQb2ludGVyTG9jazogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGVsID0gdGhpcztcclxuICAgICAgICBlbC5yZXF1ZXN0UG9pbnRlckxvY2sgPSBlbC5yZXF1ZXN0UG9pbnRlckxvY2tcclxuICAgICAgICAgICAgfHwgZWwubW96UmVxdWVzdFBvaW50ZXJMb2NrXHJcbiAgICAgICAgICAgIHx8IGVsLndlYmtpdFJlcXVlc3RQb2ludGVyTG9jaztcclxuXHJcbiAgICAgICAgZWwucmVxdWVzdFBvaW50ZXJMb2NrKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udHJvbCB1cGRhdGUuIFNob3VsZCBiZSBpbnZva2VkIGV2ZXJ5IGZyYW1lXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZnJhbWVUaW1lIEZyYW1lIHRpbWVcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnRhcmdldC5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgeEF4aXMgPSB0YXJnZXQubG9jYWxUcmFuc2Zvcm0ueC5ub3JtYWxpemUoKTtcclxuICAgICAgICB2YXIgekF4aXMgPSB0YXJnZXQubG9jYWxUcmFuc2Zvcm0uei5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmVydGljYWxNb3ZlTG9jaykge1xyXG4gICAgICAgICAgICB6QXhpcy55ID0gMDtcclxuICAgICAgICAgICAgekF4aXMubm9ybWFsaXplKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc3BlZWQgPSB0aGlzLnNwZWVkICogZnJhbWVUaW1lIC8gMjA7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlRm9yd2FyZCkge1xyXG4gICAgICAgICAgICAvLyBPcHBvc2l0ZSBkaXJlY3Rpb24gb2YgelxyXG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh6QXhpcywgLXNwZWVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX21vdmVCYWNrd2FyZCkge1xyXG4gICAgICAgICAgICBwb3NpdGlvbi5zY2FsZUFuZEFkZCh6QXhpcywgc3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZUxlZnQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoeEF4aXMsIC1zcGVlZCAvIDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZVJpZ2h0KSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHhBeGlzLCBzcGVlZCAvIDIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGFyZ2V0LnJvdGF0ZUFyb3VuZCh0YXJnZXQucG9zaXRpb24sIHRoaXMudXAsIC10aGlzLl9vZmZzZXRQaXRjaCAqIGZyYW1lVGltZSAqIE1hdGguUEkgLyAzNjApO1xyXG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS54O1xyXG4gICAgICAgIHRhcmdldC5yb3RhdGVBcm91bmQodGFyZ2V0LnBvc2l0aW9uLCB4QXhpcywgLXRoaXMuX29mZnNldFJvbGwgKiBmcmFtZVRpbWUgKiBNYXRoLlBJIC8gMzYwKTtcclxuXHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0Um9sbCA9IHRoaXMuX29mZnNldFBpdGNoID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgX2xvY2tDaGFuZ2U6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgZG9jLnBvaW50ZXJMb2NrRWxlbWVudCA9PT0gdGhpcy5kb21FbGVtZW50XHJcbiAgICAgICAgICAgIHx8IGRvYy5tb3pQb2ludGVyTG9ja0VsZW1lbnQgPT09IHRoaXMuZG9tRWxlbWVudFxyXG4gICAgICAgICAgICB8fCBkb2Mud2Via2l0UG9pbnRlckxvY2tFbGVtZW50ID09PSB0aGlzLmRvbUVsZW1lbnRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIoZG9jLCAnbW91c2Vtb3ZlJywgdGhpcy5fbW91c2VNb3ZlLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2MsICdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX21vdXNlTW92ZTogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIHZhciBkeCA9IGUubW92ZW1lbnRYIHx8IGUubW96TW92ZW1lbnRYIHx8IGUud2Via2l0TW92ZW1lbnRYIHx8IDA7XHJcbiAgICAgICAgdmFyIGR5ID0gZS5tb3ZlbWVudFkgfHwgZS5tb3pNb3ZlbWVudFkgfHwgZS53ZWJraXRNb3ZlbWVudFkgfHwgMDtcclxuXHJcbiAgICAgICAgdGhpcy5fb2Zmc2V0UGl0Y2ggKz0gZHggKiB0aGlzLnNlbnNpdGl2aXR5IC8gMjAwO1xyXG4gICAgICAgIHRoaXMuX29mZnNldFJvbGwgKz0gZHkgKiB0aGlzLnNlbnNpdGl2aXR5IC8gMjAwO1xyXG5cclxuICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBldmVudCB0byByZW1pbmQgcmVuZGVyZXIgZG8gcmVuZGVyXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2UnKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2RldGVjdE1vdmVtZW50Q2hhbmdlOiBmdW5jdGlvbiAoZnJhbWVUaW1lKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX21vdmVGb3J3YXJkIHx8IHRoaXMuX21vdmVCYWNrd2FyZCB8fCB0aGlzLl9tb3ZlTGVmdCB8fCB0aGlzLl9tb3ZlUmlnaHQpIHtcclxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2UnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGUoZnJhbWVUaW1lKTtcclxuICAgIH0sXHJcblxyXG4gICAgX2tleURvd246IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICBzd2l0Y2goZS5rZXlDb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgODc6IC8vd1xyXG4gICAgICAgICAgICBjYXNlIDM3OiAvL3VwIGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlRm9yd2FyZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA4MzogLy9zXHJcbiAgICAgICAgICAgIGNhc2UgNDA6IC8vZG93biBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUJhY2t3YXJkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDY1OiAvL2FcclxuICAgICAgICAgICAgY2FzZSAzNzogLy9sZWZ0IGFycm93XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlTGVmdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA2ODogLy9kXHJcbiAgICAgICAgICAgIGNhc2UgMzk6IC8vcmlnaHQgYXJyb3dcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVSaWdodCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZXZlbnQgdG8gcmVtaW5kIHJlbmRlcmVyIGRvIHJlbmRlclxyXG4gICAgICAgIHRoaXMudHJpZ2dlcignY2hhbmdlJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9rZXlVcDogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIHN3aXRjaChlLmtleUNvZGUpIHtcclxuICAgICAgICAgICAgY2FzZSA4NzogLy93XHJcbiAgICAgICAgICAgIGNhc2UgMzc6IC8vdXAgYXJyb3dcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVGb3J3YXJkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA4MzogLy9zXHJcbiAgICAgICAgICAgIGNhc2UgNDA6IC8vZG93biBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUJhY2t3YXJkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA2NTogLy9hXHJcbiAgICAgICAgICAgIGNhc2UgMzc6IC8vbGVmdCBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUxlZnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDY4OiAvL2RcclxuICAgICAgICAgICAgY2FzZSAzOTogLy9yaWdodCBhcnJvd1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZVJpZ2h0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgRnJlZUNvbnRyb2w7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL2NvcmUvQmFzZSc7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gJy4uL21hdGgvVmVjdG9yMyc7XHJcbmltcG9ydCB2ZW5kb3IgZnJvbSAnLi4vY29yZS92ZW5kb3InO1xyXG5cclxuLyoqXHJcbiAqIEdhbWVwYWQgQ29udHJvbCBwbHVnaW4uXHJcbiAqXHJcbiAqIEBjb25zdHJ1Y3RvciBjbGF5LnBsdWdpbi5HYW1lcGFkQ29udHJvbFxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgIGluaXQ6IGZ1bmN0aW9uKGFwcCkge1xyXG4gKiAgICAgdGhpcy5fZ2FtZXBhZENvbnRyb2wgPSBuZXcgY2xheS5wbHVnaW4uR2FtZXBhZENvbnRyb2woe1xyXG4gKiAgICAgICAgIHRhcmdldDogY2FtZXJhLFxyXG4gKiAgICAgICAgIG9uU3RhbmRhcmRHYW1lcGFkUmVhZHk6IGN1c3RvbUNhbGxiYWNrXHJcbiAqICAgICB9KTtcclxuICogICB9LFxyXG4gKlxyXG4gKiAgIGxvb3A6IGZ1bmN0aW9uKGFwcCkge1xyXG4gKiAgICAgdGhpcy5fZ2FtZXBhZENvbnRyb2wudXBkYXRlKGFwcC5mcmFtZVRpbWUpO1xyXG4gKiAgIH1cclxuICovXHJcbnZhciBHYW1lcGFkQ29udHJvbCA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkucGx1Z2luLkdhbWVwYWRDb250cm9sIyAqLyB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNjZW5lIG5vZGUgdG8gY29udHJvbCwgbW9zdGx5IGl0IGlzIGEgY2FtZXJhLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge2NsYXkuTm9kZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0YXJnZXQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1vdmUgc3BlZWQuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1vdmVTcGVlZDogMC4xLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBMb29rIGFyb3VuZCBzcGVlZC5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbG9va0Fyb3VuZFNwZWVkOiAwLjEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFVwIGF4aXMuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5WZWN0b3IzfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHVwOiBuZXcgVmVjdG9yMygwLCAxLCAwKSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGltZWxpbmUuXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UaW1lbGluZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aW1lbGluZTogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSBzdGFuZGFyZCBnYW1lcGFkIGlzIHJlYWR5IHRvIHVzZS5cclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBvblN0YW5kYXJkR2FtZXBhZFJlYWR5OiBmdW5jdGlvbihnYW1lcGFkKXt9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhIGdhbWVwYWQgaXMgZGlzY29ubmVjdGVkLlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHR5cGUge2Z1bmN0aW9ufVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9uR2FtZXBhZERpc2Nvbm5lY3RlZDogZnVuY3Rpb24oZ2FtZXBhZCl7fSxcclxuXHJcbiAgICAgICAgLy8gUHJpdmF0ZSBwcm9wZXJ0aWVzOlxyXG5cclxuICAgICAgICBfbW92ZUZvcndhcmQ6IGZhbHNlLFxyXG4gICAgICAgIF9tb3ZlQmFja3dhcmQ6IGZhbHNlLFxyXG4gICAgICAgIF9tb3ZlTGVmdDogZmFsc2UsXHJcbiAgICAgICAgX21vdmVSaWdodDogZmFsc2UsXHJcblxyXG4gICAgICAgIF9vZmZzZXRQaXRjaDogMCxcclxuICAgICAgICBfb2Zmc2V0Um9sbDogMCxcclxuXHJcbiAgICAgICAgX2Nvbm5lY3RlZEdhbWVwYWRJbmRleDogMCxcclxuICAgICAgICBfc3RhbmRhcmRHYW1lcGFkQXZhaWxhYmxlOiBmYWxzZSxcclxuICAgICAgICBfZ2FtZXBhZEF4aXNUaHJlc2hvbGQ6IDAuM1xyXG5cclxuICAgIH07XHJcblxyXG59LCBmdW5jdGlvbigpIHtcclxuXHJcbiAgICB0aGlzLl9jaGVja0dhbWVwYWRDb21wYXRpYmlsaXR5ID0gdGhpcy5fY2hlY2tHYW1lcGFkQ29tcGF0aWJpbGl0eS5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fZGlzY29ubmVjdEdhbWVwYWQgPSB0aGlzLl9kaXNjb25uZWN0R2FtZXBhZC5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fZ2V0U3RhbmRhcmRHYW1lcGFkID0gdGhpcy5fZ2V0U3RhbmRhcmRHYW1lcGFkLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9zY2FuUHJlc3NlZEdhbWVwYWRCdXR0b25zID0gdGhpcy5fc2NhblByZXNzZWRHYW1lcGFkQnV0dG9ucy5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fc2NhbkluY2xpbmVkR2FtZXBhZEF4ZXMgPSB0aGlzLl9zY2FuSW5jbGluZWRHYW1lcGFkQXhlcy5iaW5kKHRoaXMpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlID0gdGhpcy51cGRhdGUuYmluZCh0aGlzKTtcclxuXHJcbiAgICAvLyBJZiBicm93c2VyIHN1cHBvcnRzIEdhbWVwYWQgQVBJOlxyXG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IuZ2V0R2FtZXBhZHMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuXHJcbn0sXHJcbi8qKiBAbGVuZHMgY2xheS5wbHVnaW4uR2FtZXBhZENvbnRyb2wucHJvdG90eXBlICovXHJcbntcclxuICAgIC8qKlxyXG4gICAgICogSW5pdC4gY29udHJvbC5cclxuICAgICAqL1xyXG4gICAgaW5pdDogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFdoZW4gdXNlciBiZWdpbnMgdG8gaW50ZXJhY3Qgd2l0aCBjb25uZWN0ZWQgZ2FtZXBhZDpcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2dhbWVwYWQvI2RvbS1nYW1lcGFkZXZlbnRcclxuICAgICAgICAgKi9cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csICdnYW1lcGFkY29ubmVjdGVkJywgdGhpcy5fY2hlY2tHYW1lcGFkQ29tcGF0aWJpbGl0eSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGltZWxpbmUub24oJ2ZyYW1lJywgdGhpcy51cGRhdGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmVuZG9yLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LCAnZ2FtZXBhZGRpc2Nvbm5lY3RlZCcsIHRoaXMuX2Rpc2Nvbm5lY3RHYW1lcGFkKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcG9zZSBjb250cm9sLlxyXG4gICAgICovXHJcbiAgICBkaXNwb3NlOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LCAnZ2FtZXBhZGNvbm5lY3RlZCcsIHRoaXMuX2NoZWNrR2FtZXBhZENvbXBhdGliaWxpdHkpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aW1lbGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lLm9mZignZnJhbWUnLCB0aGlzLnVwZGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3csICdnYW1lcGFkZGlzY29ubmVjdGVkJywgdGhpcy5fZGlzY29ubmVjdEdhbWVwYWQpO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250cm9sJ3MgdXBkYXRlLiBTaG91bGQgYmUgaW52b2tlZCBldmVyeSBmcmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZnJhbWVUaW1lIEZyYW1lIHRpbWUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGZyYW1lVGltZSkge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX3N0YW5kYXJkR2FtZXBhZEF2YWlsYWJsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zY2FuUHJlc3NlZEdhbWVwYWRCdXR0b25zKCk7XHJcbiAgICAgICAgdGhpcy5fc2NhbkluY2xpbmVkR2FtZXBhZEF4ZXMoKTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRhcmdldCBkZXBlbmRpbmcgb24gdXNlciBpbnB1dC5cclxuXHJcbiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0O1xyXG5cclxuICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnRhcmdldC5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgeEF4aXMgPSB0YXJnZXQubG9jYWxUcmFuc2Zvcm0ueC5ub3JtYWxpemUoKTtcclxuICAgICAgICB2YXIgekF4aXMgPSB0YXJnZXQubG9jYWxUcmFuc2Zvcm0uei5ub3JtYWxpemUoKTtcclxuXHJcbiAgICAgICAgdmFyIG1vdmVTcGVlZCA9IHRoaXMubW92ZVNwZWVkICogZnJhbWVUaW1lIC8gMjA7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlRm9yd2FyZCkge1xyXG4gICAgICAgICAgICAvLyBPcHBvc2l0ZSBkaXJlY3Rpb24gb2Ygei5cclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoekF4aXMsIC1tb3ZlU3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZUJhY2t3YXJkKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHpBeGlzLCBtb3ZlU3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZUxlZnQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb24uc2NhbGVBbmRBZGQoeEF4aXMsIC1tb3ZlU3BlZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fbW92ZVJpZ2h0KSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uLnNjYWxlQW5kQWRkKHhBeGlzLCBtb3ZlU3BlZWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGFyZ2V0LnJvdGF0ZUFyb3VuZCh0YXJnZXQucG9zaXRpb24sIHRoaXMudXAsIC10aGlzLl9vZmZzZXRQaXRjaCAqIGZyYW1lVGltZSAqIE1hdGguUEkgLyAzNjApO1xyXG4gICAgICAgIHZhciB4QXhpcyA9IHRhcmdldC5sb2NhbFRyYW5zZm9ybS54O1xyXG4gICAgICAgIHRhcmdldC5yb3RhdGVBcm91bmQodGFyZ2V0LnBvc2l0aW9uLCB4QXhpcywgLXRoaXMuX29mZnNldFJvbGwgKiBmcmFtZVRpbWUgKiBNYXRoLlBJIC8gMzYwKTtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiBJZiBuZWNlc3Nhcnk6IHRyaWdnZXIgYHVwZGF0ZWAgZXZlbnQuXHJcbiAgICAgICAgICogWFhYIFRoaXMgY2FuIGVjb25vbWl6ZSByZW5kZXJpbmcgT1BzLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmICh0aGlzLl9tb3ZlRm9yd2FyZCA9PT0gdHJ1ZSB8fCB0aGlzLl9tb3ZlQmFja3dhcmQgPT09IHRydWUgfHwgdGhpcy5fbW92ZUxlZnQgPT09IHRydWVcclxuICAgICAgICAgICAgfHwgdGhpcy5fbW92ZVJpZ2h0ID09PSB0cnVlIHx8IHRoaXMuX29mZnNldFBpdGNoICE9PSAwIHx8IHRoaXMuX29mZnNldFJvbGwgIT09IDApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIoJ3VwZGF0ZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVzZXQgdmFsdWVzIHRvIGF2b2lkIGxvc3Qgb2YgY29udHJvbC5cclxuXHJcbiAgICAgICAgdGhpcy5fbW92ZUZvcndhcmQgPSB0aGlzLl9tb3ZlQmFja3dhcmQgPSB0aGlzLl9tb3ZlTGVmdCA9IHRoaXMuX21vdmVSaWdodCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX29mZnNldFBpdGNoID0gdGhpcy5fb2Zmc2V0Um9sbCA9IDA7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICAvLyBQcml2YXRlIG1ldGhvZHM6XHJcblxyXG4gICAgX2NoZWNrR2FtZXBhZENvbXBhdGliaWxpdHk6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIElmIGNvbm5lY3RlZCBnYW1lcGFkIGhhcyBhICoqc3RhbmRhcmQqKiBsYXlvdXQ6XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9nYW1lcGFkLyNyZW1hcHBpbmcgYWJvdXQgc3RhbmRhcmQuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYgKGV2ZW50LmdhbWVwYWQubWFwcGluZyA9PT0gJ3N0YW5kYXJkJykge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fc3RhbmRhcmRHYW1lcGFkSW5kZXggPSBldmVudC5nYW1lcGFkLmluZGV4O1xyXG4gICAgICAgICAgICB0aGlzLl9zdGFuZGFyZEdhbWVwYWRBdmFpbGFibGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5vblN0YW5kYXJkR2FtZXBhZFJlYWR5KGV2ZW50LmdhbWVwYWQpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBfZGlzY29ubmVjdEdhbWVwYWQ6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YW5kYXJkR2FtZXBhZEF2YWlsYWJsZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLm9uR2FtZXBhZERpc2Nvbm5lY3RlZChldmVudC5nYW1lcGFkKTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIF9nZXRTdGFuZGFyZEdhbWVwYWQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICByZXR1cm4gbmF2aWdhdG9yLmdldEdhbWVwYWRzKClbdGhpcy5fc3RhbmRhcmRHYW1lcGFkSW5kZXhdO1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgX3NjYW5QcmVzc2VkR2FtZXBhZEJ1dHRvbnM6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgZ2FtZXBhZEJ1dHRvbnMgPSB0aGlzLl9nZXRTdGFuZGFyZEdhbWVwYWQoKS5idXR0b25zO1xyXG5cclxuICAgICAgICAvLyBGb3IgZWFjaCBnYW1lcGFkIGJ1dHRvbjpcclxuICAgICAgICBmb3IgKHZhciBnYW1lcGFkQnV0dG9uSWQgPSAwOyBnYW1lcGFkQnV0dG9uSWQgPCBnYW1lcGFkQnV0dG9ucy5sZW5ndGg7IGdhbWVwYWRCdXR0b25JZCsrKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgdXNlciBpbnB1dC5cclxuICAgICAgICAgICAgdmFyIGdhbWVwYWRCdXR0b24gPSBnYW1lcGFkQnV0dG9uc1tnYW1lcGFkQnV0dG9uSWRdO1xyXG5cclxuICAgICAgICAgICAgaWYgKGdhbWVwYWRCdXR0b24ucHJlc3NlZCkge1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2FtZXBhZEJ1dHRvbklkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEQtcGFkIFVwXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUZvcndhcmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRC1wYWQgRG93blxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVCYWNrd2FyZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBELXBhZCBMZWZ0XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxNDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZUxlZnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRC1wYWQgUmlnaHRcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE1OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlUmlnaHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG5cclxuICAgIF9zY2FuSW5jbGluZWRHYW1lcGFkQXhlczogZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBnYW1lcGFkQXhlcyA9IHRoaXMuX2dldFN0YW5kYXJkR2FtZXBhZCgpLmF4ZXM7XHJcblxyXG4gICAgICAgIC8vIEZvciBlYWNoIGdhbWVwYWQgYXhpczpcclxuICAgICAgICBmb3IgKHZhciBnYW1lcGFkQXhpc0lkID0gMDsgZ2FtZXBhZEF4aXNJZCA8IGdhbWVwYWRBeGVzLmxlbmd0aDsgZ2FtZXBhZEF4aXNJZCsrKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgdXNlciBpbnB1dC5cclxuICAgICAgICAgICAgdmFyIGdhbWVwYWRBeGlzID0gZ2FtZXBhZEF4ZXNbZ2FtZXBhZEF4aXNJZF07XHJcblxyXG4gICAgICAgICAgICAvLyBYWFggV2UgdXNlIGEgdGhyZXNob2xkIGJlY2F1c2UgYXhlcyBhcmUgbmV2ZXIgbmV1dHJhbC5cclxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGdhbWVwYWRBeGlzKSA+IHRoaXMuX2dhbWVwYWRBeGlzVGhyZXNob2xkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChnYW1lcGFkQXhpc0lkKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIExlZnQgc3RpY2sgWMKxXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlTGVmdCA9IGdhbWVwYWRBeGlzIDwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW92ZVJpZ2h0ID0gZ2FtZXBhZEF4aXMgPiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTGVmdCBzdGljayBZwrFcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVGb3J3YXJkID0gZ2FtZXBhZEF4aXMgPCAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlQmFja3dhcmQgPSBnYW1lcGFkQXhpcyA+IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBSaWdodCBzdGljayBYwrFcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29mZnNldFBpdGNoICs9IGdhbWVwYWRBeGlzICogdGhpcy5sb29rQXJvdW5kU3BlZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBSaWdodCBzdGljayBZwrFcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29mZnNldFJvbGwgKz0gZ2FtZXBhZEF4aXMgKiB0aGlzLmxvb2tBcm91bmRTcGVlZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBHYW1lcGFkQ29udHJvbDtcclxuIiwidmFyIEdlc3R1cmVNZ3IgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgdGhpcy5fdHJhY2sgPSBbXTtcclxufTtcclxuXHJcbkdlc3R1cmVNZ3IucHJvdG90eXBlID0ge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yOiBHZXN0dXJlTWdyLFxyXG5cclxuICAgIHJlY29nbml6ZTogZnVuY3Rpb24gKGV2ZW50LCB0YXJnZXQsIHJvb3QpIHtcclxuICAgICAgICB0aGlzLl9kb1RyYWNrKGV2ZW50LCB0YXJnZXQsIHJvb3QpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWNvZ25pemUoZXZlbnQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBjbGVhcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG5cclxuICAgIF9kb1RyYWNrOiBmdW5jdGlvbiAoZXZlbnQsIHRhcmdldCwgcm9vdCkge1xyXG4gICAgICAgIHZhciB0b3VjaGVzID0gZXZlbnQudGFyZ2V0VG91Y2hlcztcclxuXHJcbiAgICAgICAgaWYgKCF0b3VjaGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB0cmFja0l0ZW0gPSB7XHJcbiAgICAgICAgICAgIHBvaW50czogW10sXHJcbiAgICAgICAgICAgIHRvdWNoZXM6IFtdLFxyXG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcclxuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRvdWNoZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIHRvdWNoID0gdG91Y2hlc1tpXTtcclxuICAgICAgICAgICAgdHJhY2tJdGVtLnBvaW50cy5wdXNoKFt0b3VjaC5jbGllbnRYLCB0b3VjaC5jbGllbnRZXSk7XHJcbiAgICAgICAgICAgIHRyYWNrSXRlbS50b3VjaGVzLnB1c2godG91Y2gpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdHJhY2sucHVzaCh0cmFja0l0ZW0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcmVjb2duaXplOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gcmVjb2duaXplcnMpIHtcclxuICAgICAgICAgICAgaWYgKHJlY29nbml6ZXJzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBnZXN0dXJlSW5mbyA9IHJlY29nbml6ZXJzW2V2ZW50TmFtZV0odGhpcy5fdHJhY2ssIGV2ZW50KTtcclxuICAgICAgICAgICAgICAgIGlmIChnZXN0dXJlSW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXN0dXJlSW5mbztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmZ1bmN0aW9uIGRpc3QocG9pbnRQYWlyKSB7XHJcbiAgICB2YXIgZHggPSBwb2ludFBhaXJbMV1bMF0gLSBwb2ludFBhaXJbMF1bMF07XHJcbiAgICB2YXIgZHkgPSBwb2ludFBhaXJbMV1bMV0gLSBwb2ludFBhaXJbMF1bMV07XHJcblxyXG4gICAgcmV0dXJuIE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNlbnRlcihwb2ludFBhaXIpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgKHBvaW50UGFpclswXVswXSArIHBvaW50UGFpclsxXVswXSkgLyAyLFxyXG4gICAgICAgIChwb2ludFBhaXJbMF1bMV0gKyBwb2ludFBhaXJbMV1bMV0pIC8gMlxyXG4gICAgXTtcclxufVxyXG5cclxudmFyIHJlY29nbml6ZXJzID0ge1xyXG5cclxuICAgIHBpbmNoOiBmdW5jdGlvbiAodHJhY2ssIGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIHRyYWNrTGVuID0gdHJhY2subGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAoIXRyYWNrTGVuKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwaW5jaEVuZCA9ICh0cmFja1t0cmFja0xlbiAtIDFdIHx8IHt9KS5wb2ludHM7XHJcbiAgICAgICAgdmFyIHBpbmNoUHJlID0gKHRyYWNrW3RyYWNrTGVuIC0gMl0gfHwge30pLnBvaW50cyB8fCBwaW5jaEVuZDtcclxuXHJcbiAgICAgICAgaWYgKHBpbmNoUHJlXHJcbiAgICAgICAgICAgICYmIHBpbmNoUHJlLmxlbmd0aCA+IDFcclxuICAgICAgICAgICAgJiYgcGluY2hFbmRcclxuICAgICAgICAgICAgJiYgcGluY2hFbmQubGVuZ3RoID4gMVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB2YXIgcGluY2hTY2FsZSA9IGRpc3QocGluY2hFbmQpIC8gZGlzdChwaW5jaFByZSk7XHJcbiAgICAgICAgICAgICFpc0Zpbml0ZShwaW5jaFNjYWxlKSAmJiAocGluY2hTY2FsZSA9IDEpO1xyXG5cclxuICAgICAgICAgICAgZXZlbnQucGluY2hTY2FsZSA9IHBpbmNoU2NhbGU7XHJcblxyXG4gICAgICAgICAgICB2YXIgcGluY2hDZW50ZXIgPSBjZW50ZXIocGluY2hFbmQpO1xyXG4gICAgICAgICAgICBldmVudC5waW5jaFggPSBwaW5jaENlbnRlclswXTtcclxuICAgICAgICAgICAgZXZlbnQucGluY2hZID0gcGluY2hDZW50ZXJbMV07XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ3BpbmNoJyxcclxuICAgICAgICAgICAgICAgIHRhcmdldDogdHJhY2tbMF0udGFyZ2V0LFxyXG4gICAgICAgICAgICAgICAgZXZlbnQ6IGV2ZW50XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgR2VzdHVyZU1ncjtcclxuIiwiaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBQbGFuZSBmcm9tICcuLi9tYXRoL1BsYW5lJztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IFJheSBmcm9tICcuLi9tYXRoL1JheSc7XHJcblxyXG52YXIgdXZzID0gW1swLCAwXSwgWzAsIDFdLCBbMSwgMV0sIFsxLCAwXV07XHJcbnZhciB0cmlzID0gWzAsIDEsIDIsIDIsIDMsIDBdO1xyXG5cclxudmFyIEluZmluaXRlUGxhbmUgPSBNZXNoLmV4dGVuZCh7XHJcblxyXG4gICAgY2FtZXJhOiBudWxsLFxyXG5cclxuICAgIHBsYW5lOiBudWxsLFxyXG5cclxuICAgIG1heEdyaWQ6IDAsXHJcblxyXG4gICAgLy8gVE9ET1xyXG4gICAgZnJ1c3R1bUN1bGxpbmc6IGZhbHNlXHJcblxyXG59LCBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5ID0gbmV3IEdlb21ldHJ5KHtcclxuICAgICAgICBkeW5hbWljOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24uaW5pdCg2KTtcclxuICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLmluaXQoNik7XHJcbiAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMC5pbml0KDYpO1xyXG4gICAgZ2VvbWV0cnkuaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSg2KTtcclxuXHJcbiAgICB0aGlzLnBsYW5lID0gbmV3IFBsYW5lKCk7XHJcbn0sIHtcclxuXHJcbiAgICB1cGRhdGVHZW9tZXRyeTogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2YXIgY29vcmRzID0gdGhpcy5fdW5Qcm9qZWN0R3JpZCgpO1xyXG4gICAgICAgIGlmICghY29vcmRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgbm9ybWFsQXR0ciA9IHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWw7XHJcbiAgICAgICAgdmFyIHRleGNvb3JkcyA9IHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy50ZXhjb29yZDA7XHJcbiAgICAgICAgdmFyIGluZGljZXMgPSB0aGlzLmdlb21ldHJ5LmluZGljZXM7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBpZHggPSB0cmlzW2ldO1xyXG4gICAgICAgICAgICBwb3NpdGlvbkF0dHIuc2V0KGksIGNvb3Jkc1tpZHhdLmFycmF5KTtcclxuICAgICAgICAgICAgbm9ybWFsQXR0ci5zZXQoaSwgdGhpcy5wbGFuZS5ub3JtYWwuYXJyYXkpO1xyXG4gICAgICAgICAgICB0ZXhjb29yZHMuc2V0KGksIHV2c1tpZHhdKTtcclxuICAgICAgICAgICAgaW5kaWNlc1tpXSA9IGk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2VvbWV0cnkuZGlydHkoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8gaHR0cDovL2ZpbGVhZG1pbi5jcy5sdGguc2UvZ3JhcGhpY3MvdGhlc2VzL3Byb2plY3RzL3Byb2pncmlkL1xyXG4gICAgX3VuUHJvamVjdEdyaWQ6IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciBwbGFuZVZpZXdTcGFjZSA9IG5ldyBQbGFuZSgpO1xyXG4gICAgICAgIHZhciBsaW5lcyA9IFtcclxuICAgICAgICAgICAgMCwgMSwgMCwgMiwgMSwgMywgMiwgMyxcclxuICAgICAgICAgICAgNCwgNSwgNCwgNiwgNSwgNywgNiwgNyxcclxuICAgICAgICAgICAgMCwgNCwgMSwgNSwgMiwgNiwgMywgN1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHZhciBzdGFydCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgdmFyIGVuZCA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4gICAgICAgIHZhciBwb2ludHMgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gMS0tLS0yXHJcbiAgICAgICAgLy8gfCAgICB8XHJcbiAgICAgICAgLy8gMC0tLS0zXHJcbiAgICAgICAgdmFyIGNvb3JkcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvb3Jkc1tpXSA9IG5ldyBWZWN0b3IzKDAsIDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJheSA9IG5ldyBSYXkoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcGxhbmVWaWV3U3BhY2UuY29weSh0aGlzLnBsYW5lKTtcclxuICAgICAgICAgICAgcGxhbmVWaWV3U3BhY2UuYXBwbHlUcmFuc2Zvcm0odGhpcy5jYW1lcmEudmlld01hdHJpeCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgZnJ1c3R1bVZlcnRpY2VzID0gdGhpcy5jYW1lcmEuZnJ1c3R1bS52ZXJ0aWNlcztcclxuXHJcbiAgICAgICAgICAgIHZhciBuUG9pbnRzID0gMDtcclxuICAgICAgICAgICAgLy8gSW50ZXJzZWN0IHdpdGggbGluZXMgb2YgZnJ1c3R1bVxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0LmFycmF5ID0gZnJ1c3R1bVZlcnRpY2VzW2xpbmVzW2kgKiAyXV07XHJcbiAgICAgICAgICAgICAgICBlbmQuYXJyYXkgPSBmcnVzdHVtVmVydGljZXNbbGluZXNbaSAqIDIgKyAxXV07XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHBvaW50ID0gcGxhbmVWaWV3U3BhY2UuaW50ZXJzZWN0TGluZShzdGFydCwgZW5kLCBwb2ludHNbblBvaW50c10pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBvaW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwb2ludHNbblBvaW50c10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW25Qb2ludHNdID0gcG9pbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIG5Qb2ludHMrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoblBvaW50cyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblBvaW50czsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBwb2ludHNbaV0uYXBwbHlQcm9qZWN0aW9uKHRoaXMuY2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBtaW5YID0gcG9pbnRzWzBdLmFycmF5WzBdO1xyXG4gICAgICAgICAgICB2YXIgbWluWSA9IHBvaW50c1swXS5hcnJheVsxXTtcclxuICAgICAgICAgICAgdmFyIG1heFggPSBwb2ludHNbMF0uYXJyYXlbMF07XHJcbiAgICAgICAgICAgIHZhciBtYXhZID0gcG9pbnRzWzBdLmFycmF5WzFdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IG5Qb2ludHM7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHBvaW50c1tpXS5hcnJheVswXSk7XHJcbiAgICAgICAgICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcG9pbnRzW2ldLmFycmF5WzFdKTtcclxuICAgICAgICAgICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBwb2ludHNbaV0uYXJyYXlbMF0pO1xyXG4gICAgICAgICAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHBvaW50c1tpXS5hcnJheVsxXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1pblggPT0gbWF4WCB8fCBtaW5ZID09IG1heFkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb29yZHNbMF0uYXJyYXlbMF0gPSBtaW5YO1xyXG4gICAgICAgICAgICBjb29yZHNbMF0uYXJyYXlbMV0gPSBtaW5ZO1xyXG4gICAgICAgICAgICBjb29yZHNbMV0uYXJyYXlbMF0gPSBtaW5YO1xyXG4gICAgICAgICAgICBjb29yZHNbMV0uYXJyYXlbMV0gPSBtYXhZO1xyXG4gICAgICAgICAgICBjb29yZHNbMl0uYXJyYXlbMF0gPSBtYXhYO1xyXG4gICAgICAgICAgICBjb29yZHNbMl0uYXJyYXlbMV0gPSBtYXhZO1xyXG4gICAgICAgICAgICBjb29yZHNbM10uYXJyYXlbMF0gPSBtYXhYO1xyXG4gICAgICAgICAgICBjb29yZHNbM10uYXJyYXlbMV0gPSBtaW5ZO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhLmNhc3RSYXkoY29vcmRzW2ldLCByYXkpO1xyXG4gICAgICAgICAgICAgICAgcmF5LmludGVyc2VjdFBsYW5lKHRoaXMucGxhbmUsIGNvb3Jkc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBjb29yZHM7XHJcbiAgICAgICAgfTtcclxuICAgIH0pKClcclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBJbmZpbml0ZVBsYW5lO1xyXG4iLCJpbXBvcnQgQmFzZSBmcm9tICcuLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tICcuLi9tYXRoL1ZlY3RvcjInO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tICcuLi9tYXRoL1ZlY3RvcjMnO1xyXG5pbXBvcnQgR2VzdHVyZU1nciBmcm9tICcuL0dlc3R1cmVNZ3InO1xyXG5pbXBvcnQgdmVuZG9yIGZyb20gJy4uL2NvcmUvdmVuZG9yJztcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcblxyXG52YXIgTU9VU0VfQlVUVE9OX0tFWV9NQVAgPSB7XHJcbiAgICBsZWZ0OiAwLFxyXG4gICAgbWlkZGxlOiAxLFxyXG4gICAgcmlnaHQ6IDJcclxufTtcclxuXHJcbmZ1bmN0aW9uIGZpcnN0Tm90TnVsbCgpIHtcclxuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBpZiAoYXJndW1lbnRzW2ldICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1tpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbnZlcnRUb0FycmF5KHZhbCkge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHtcclxuICAgICAgICB2YWwgPSBbdmFsLCB2YWxdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKiBAYWxpYXMgY2xheS5wbHVnaW4uT3JiaXRDb250cm9sXHJcbiAqIEBleHRlbmRzIGNsYXkuY29yZS5CYXNlXHJcbiAqL1xyXG52YXIgT3JiaXRDb250cm9sID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIHJldHVybiAvKiogQGxlbmRzIGNsYXkucGx1Z2luLk9yYml0Q29udHJvbCMgKi8ge1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7Y2xheS5UaW1lbGluZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aW1lbGluZTogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRvbUVsZW1lbnQ6IG51bGwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5Lk5vZGV9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGFyZ2V0OiBudWxsLFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtjbGF5LlZlY3RvcjN9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgX2NlbnRlcjogbmV3IFZlY3RvcjMoKSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWluaW11bSBkaXN0YW5jZSB0byB0aGUgY2VudGVyXHJcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAgICAgKiBAZGVmYXVsdCAwLjVcclxuICAgICAgICAgKi9cclxuICAgICAgICBtaW5EaXN0YW5jZTogMC4xLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNYXhpbXVtIGRpc3RhbmNlIHRvIHRoZSBjZW50ZXJcclxuICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICAgICAqIEBkZWZhdWx0IDJcclxuICAgICAgICAgKi9cclxuICAgICAgICBtYXhEaXN0YW5jZTogMTAwMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogT25seSBhdmFpbGFibGUgd2hlbiBjYW1lcmEgaXMgb3J0aG9ncmFwaGljXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWF4T3J0aG9ncmFwaGljU2l6ZTogMzAwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBPbmx5IGF2YWlsYWJsZSB3aGVuIGNhbWVyYSBpcyBvcnRob2dyYXBoaWNcclxuICAgICAgICAgKi9cclxuICAgICAgICBtaW5PcnRob2dyYXBoaWNTaXplOiAzMCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQXNwZWN0IG9mIG9ydGhvZ3JhcGhpYyBjYW1lcmFcclxuICAgICAgICAgKiBPbmx5IGF2YWlsYWJsZSB3aGVuIGNhbWVyYSBpcyBvcnRob2dyYXBoaWNcclxuICAgICAgICAgKi9cclxuICAgICAgICBvcnRob2dyYXBoaWNBc3BlY3Q6IDEsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIE1pbmltdW0gYWxwaGEgcm90YXRpb25cclxuICAgICAgICAgKi9cclxuICAgICAgICBtaW5BbHBoYTogLTkwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNYXhpbXVtIGFscGhhIHJvdGF0aW9uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWF4QWxwaGE6IDkwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBNaW5pbXVtIGJldGEgcm90YXRpb25cclxuICAgICAgICAgKi9cclxuICAgICAgICBtaW5CZXRhOiAtSW5maW5pdHksXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTWF4aW11bSBiZXRhIHJvdGF0aW9uXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWF4QmV0YTogSW5maW5pdHksXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFN0YXJ0IGF1dG8gcm90YXRpbmcgYWZ0ZXIgc3RpbGwgZm9yIHRoZSBnaXZlbiB0aW1lXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXV0b1JvdGF0ZUFmdGVyU3RpbGw6IDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERpcmVjdGlvbiBvZiBhdXRvUm90YXRlLiBjdyBvciBjY3cgd2hlbiBsb29raW5nIHRvcCBkb3duLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGF1dG9Sb3RhdGVEaXJlY3Rpb246ICdjdycsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIERlZ3JlZSBwZXIgc2Vjb25kXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYXV0b1JvdGF0ZVNwZWVkOiA2MCxcclxuXHJcbiAgICAgICAgcGFuTW91c2VCdXR0b246ICdtaWRkbGUnLFxyXG4gICAgICAgIHJvdGF0ZU1vdXNlQnV0dG9uOiAnbGVmdCcsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFBhbiBvciByb3RhdGVcclxuICAgICAgICAgKiBAdHlwZSB7U3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIF9tb2RlOiAncm90YXRlJyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGFtcGluZzogMC44LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICByb3RhdGVTZW5zaXRpdml0eTogMSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgem9vbVNlbnNpdGl2aXR5OiAxLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn1cclxuICAgICAgICAgKi9cclxuICAgICAgICBwYW5TZW5zaXRpdml0eTogMSxcclxuXHJcbiAgICAgICAgX25lZWRzVXBkYXRlOiBmYWxzZSxcclxuXHJcbiAgICAgICAgX3JvdGF0aW5nOiBmYWxzZSxcclxuXHJcbiAgICAgICAgLy8gUm90YXRpb24gYXJvdW5kIHlBeGlzXHJcbiAgICAgICAgX3BoaTogMCxcclxuICAgICAgICAvLyBSb3RhdGlvbiBhcm91bmQgeEF4aXNcclxuICAgICAgICBfdGhldGE6IDAsXHJcblxyXG4gICAgICAgIF9tb3VzZVg6IDAsXHJcbiAgICAgICAgX21vdXNlWTogMCxcclxuXHJcbiAgICAgICAgX3JvdGF0ZVZlbG9jaXR5OiBuZXcgVmVjdG9yMigpLFxyXG5cclxuICAgICAgICBfcGFuVmVsb2NpdHk6IG5ldyBWZWN0b3IyKCksXHJcblxyXG4gICAgICAgIF9kaXN0YW5jZTogMjAsXHJcblxyXG4gICAgICAgIF96b29tU3BlZWQ6IDAsXHJcblxyXG4gICAgICAgIF9zdGlsbFRpbWVvdXQ6IDAsXHJcblxyXG4gICAgICAgIF9hbmltYXRvcnM6IFtdLFxyXG5cclxuICAgICAgICBfZ2VzdHVyZU1ncjogbmV3IEdlc3R1cmVNZ3IoKVxyXG4gICAgfTtcclxufSwgZnVuY3Rpb24gKCkge1xyXG4gICAgLy8gRWFjaCBPcmJpdENvbnRyb2wgaGFzIGl0J3Mgb3duIGhhbmRsZXJcclxuICAgIHRoaXMuX21vdXNlRG93bkhhbmRsZXIgPSB0aGlzLl9tb3VzZURvd25IYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9tb3VzZVdoZWVsSGFuZGxlciA9IHRoaXMuX21vdXNlV2hlZWxIYW5kbGVyLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyID0gdGhpcy5fbW91c2VNb3ZlSGFuZGxlci5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fbW91c2VVcEhhbmRsZXIgPSB0aGlzLl9tb3VzZVVwSGFuZGxlci5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5fcGluY2hIYW5kbGVyID0gdGhpcy5fcGluY2hIYW5kbGVyLmJpbmQodGhpcyk7XHJcblxyXG4gICAgdGhpcy5pbml0KCk7XHJcbn0sIC8qKiBAbGVuZHMgY2xheS5wbHVnaW4uT3JiaXRDb250cm9sIyAqLyB7XHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemUuXHJcbiAgICAgKiBNb3VzZSBldmVudCBiaW5kaW5nXHJcbiAgICAgKi9cclxuICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgZG9tID0gdGhpcy5kb21FbGVtZW50O1xyXG5cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb20sICd0b3VjaHN0YXJ0JywgdGhpcy5fbW91c2VEb3duSGFuZGxlcik7XHJcblxyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlZG93bicsIHRoaXMuX21vdXNlRG93bkhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ3doZWVsJywgdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aW1lbGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVsaW5lLm9uKCdmcmFtZScsIHRoaXMudXBkYXRlLCB0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVjb21wb3NlVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3Bvc2UuXHJcbiAgICAgKiBNb3VzZSBldmVudCB1bmJpbmRpbmdcclxuICAgICAqL1xyXG4gICAgZGlzcG9zZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBkb20gPSB0aGlzLmRvbUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNoc3RhcnQnLCB0aGlzLl9tb3VzZURvd25IYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICd0b3VjaG1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICd0b3VjaGVuZCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcclxuXHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2Vkb3duJywgdGhpcy5fbW91c2VEb3duSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2Vtb3ZlJywgdGhpcy5fbW91c2VNb3ZlSGFuZGxlcik7XHJcbiAgICAgICAgdmVuZG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoZG9tLCAnbW91c2V1cCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICd3aGVlbCcsIHRoaXMuX21vdXNlV2hlZWxIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZW91dCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGltZWxpbmUpIHtcclxuICAgICAgICAgICAgdGhpcy50aW1lbGluZS5vZmYoJ2ZyYW1lJywgdGhpcy51cGRhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0b3BBbGxBbmltYXRpb24oKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZGlzdGFuY2VcclxuICAgICAqIEByZXR1cm4ge251bWJlcn1cclxuICAgICAqL1xyXG4gICAgZ2V0RGlzdGFuY2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzdGFuY2U7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGRpc3RhbmNlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2VcclxuICAgICAqL1xyXG4gICAgc2V0RGlzdGFuY2U6IGZ1bmN0aW9uIChkaXN0YW5jZSkge1xyXG4gICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gZGlzdGFuY2U7XHJcbiAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBzaXplIG9mIG9ydGhvZ3JhcGhpYyB2aWV3aW5nIHZvbHVtZVxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBnZXRPcnRob2dyYXBoaWNTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX29ydGhvU2l6ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgc2l6ZSBvZiBvcnRob2dyYXBoaWMgdmlld2luZyB2b2x1bWVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzaXplXHJcbiAgICAgKi9cclxuICAgIHNldE9ydGhvZ3JhcGhpY1NpemU6IGZ1bmN0aW9uIChzaXplKSB7XHJcbiAgICAgICAgdGhpcy5fb3J0aG9TaXplID0gc2l6ZTtcclxuICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGFscGhhIHJvdGF0aW9uXHJcbiAgICAgKiBBbHBoYSBhbmdsZSBmb3IgdG9wLWRvd24gcm90YXRpb24uIFBvc2l0aXZlIHRvIHJvdGF0ZSB0byB0b3AuXHJcbiAgICAgKlxyXG4gICAgICogV2hpY2ggbWVhbnMgY2FtZXJhIHJvdGF0aW9uIGFyb3VuZCB4IGF4aXMuXHJcbiAgICAgKi9cclxuICAgIGdldEFscGhhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoZXRhIC8gTWF0aC5QSSAqIDE4MDtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYmV0YSByb3RhdGlvblxyXG4gICAgICogQmV0YSBhbmdsZSBmb3IgbGVmdC1yaWdodCByb3RhdGlvbi4gUG9zaXRpdmUgdG8gcm90YXRlIHRvIHJpZ2h0LlxyXG4gICAgICpcclxuICAgICAqIFdoaWNoIG1lYW5zIGNhbWVyYSByb3RhdGlvbiBhcm91bmQgeSBheGlzLlxyXG4gICAgICovXHJcbiAgICBnZXRCZXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIC10aGlzLl9waGkgLyBNYXRoLlBJICogMTgwO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBjb250cm9sIGNlbnRlclxyXG4gICAgICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59XHJcbiAgICAgKi9cclxuICAgIGdldENlbnRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jZW50ZXIudG9BcnJheSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhbHBoYSByb3RhdGlvbiBhbmdsZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGFscGhhXHJcbiAgICAgKi9cclxuICAgIHNldEFscGhhOiBmdW5jdGlvbiAoYWxwaGEpIHtcclxuICAgICAgICBhbHBoYSA9IE1hdGgubWF4KE1hdGgubWluKHRoaXMubWF4QWxwaGEsIGFscGhhKSwgdGhpcy5taW5BbHBoYSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3RoZXRhID0gYWxwaGEgLyAxODAgKiBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYmV0YSByb3RhdGlvbiBhbmdsZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJldGFcclxuICAgICAqL1xyXG4gICAgc2V0QmV0YTogZnVuY3Rpb24gKGJldGEpIHtcclxuICAgICAgICBiZXRhID0gTWF0aC5tYXgoTWF0aC5taW4odGhpcy5tYXhCZXRhLCBiZXRhKSwgdGhpcy5taW5CZXRhKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcGhpID0gLWJldGEgLyAxODAgKiBNYXRoLlBJO1xyXG4gICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29udHJvbCBjZW50ZXJcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IGNlbnRlclxyXG4gICAgICovXHJcbiAgICBzZXRDZW50ZXI6IGZ1bmN0aW9uIChjZW50ZXJBcnIpIHtcclxuICAgICAgICB0aGlzLl9jZW50ZXIuc2V0QXJyYXkoY2VudGVyQXJyKTtcclxuICAgIH0sXHJcblxyXG4gICAgc2V0T3B0aW9uOiBmdW5jdGlvbiAob3B0cykge1xyXG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xyXG5cclxuICAgICAgICBbJ2F1dG9Sb3RhdGUnLCAnYXV0b1JvdGF0ZUFmdGVyU3RpbGwnLFxyXG4gICAgICAgICAgICAnYXV0b1JvdGF0ZURpcmVjdGlvbicsICdhdXRvUm90YXRlU3BlZWQnLFxyXG4gICAgICAgICAgICAnZGFtcGluZycsXHJcbiAgICAgICAgICAgICdtaW5EaXN0YW5jZScsICdtYXhEaXN0YW5jZScsXHJcbiAgICAgICAgICAgICdtaW5PcnRob2dyYXBoaWNTaXplJywgJ21heE9ydGhvZ3JhcGhpY1NpemUnLCAnb3J0aG9ncmFwaGljQXNwZWN0JyxcclxuICAgICAgICAgICAgJ21pbkFscGhhJywgJ21heEFscGhhJywgJ21pbkJldGEnLCAnbWF4QmV0YScsXHJcbiAgICAgICAgICAgICdyb3RhdGVTZW5zaXRpdml0eScsICd6b29tU2Vuc2l0aXZpdHknLCAncGFuU2Vuc2l0aXZpdHknXHJcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgaWYgKG9wdHNba2V5XSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzW2tleV0gPSBvcHRzW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgaWYgKG9wdHMuZGlzdGFuY2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldERpc3RhbmNlKG9wdHMuZGlzdGFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3B0cy5vcnRob2dyYXBoaWNTaXplICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRPcnRob2dyYXBoaWNTaXplKG9wdHMub3J0aG9ncmFwaGljU2l6ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3B0cy5hbHBoYSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0QWxwaGEob3B0cy5hbHBoYSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRzLmJldGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldEJldGEob3B0cy5iZXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcHRzLmNlbnRlcikge1xyXG4gICAgICAgICAgICB0aGlzLnNldENlbnRlcihvcHRzLmNlbnRlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy50YXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVHJhbnNmb3JtKCk7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdHMuZGlzdGFuY2VcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLm9ydGhvZ3JhcGhpY1NpemVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLmFscGhhXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0cy5iZXRhXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBvcHRzLmNlbnRlclxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmR1cmF0aW9uPTEwMDBdXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZWFzaW5nPSdsaW5lYXInXVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmRvbmVdXHJcbiAgICAgKi9cclxuICAgIGFuaW1hdGVUbzogZnVuY3Rpb24gKG9wdHMpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIHZhciBvYmogPSB7fTtcclxuICAgICAgICB2YXIgdGFyZ2V0ID0ge307XHJcbiAgICAgICAgdmFyIHRpbWVsaW5lID0gdGhpcy50aW1lbGluZTtcclxuICAgICAgICBpZiAoIXRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuZGlzdGFuY2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvYmouZGlzdGFuY2UgPSB0aGlzLmdldERpc3RhbmNlKCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5kaXN0YW5jZSA9IG9wdHMuZGlzdGFuY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRzLm9ydGhvZ3JhcGhpY1NpemUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvYmoub3J0aG9ncmFwaGljU2l6ZSA9IHRoaXMuZ2V0T3J0aG9ncmFwaGljU2l6ZSgpO1xyXG4gICAgICAgICAgICB0YXJnZXQub3J0aG9ncmFwaGljU2l6ZSA9IG9wdHMub3J0aG9ncmFwaGljU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuYWxwaGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvYmouYWxwaGEgPSB0aGlzLmdldEFscGhhKCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5hbHBoYSA9IG9wdHMuYWxwaGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvcHRzLmJldGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBvYmouYmV0YSA9IHRoaXMuZ2V0QmV0YSgpO1xyXG4gICAgICAgICAgICB0YXJnZXQuYmV0YSA9IG9wdHMuYmV0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9wdHMuY2VudGVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgb2JqLmNlbnRlciA9IHRoaXMuZ2V0Q2VudGVyKCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5jZW50ZXIgPSBvcHRzLmNlbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRBbmltYXRvcihcclxuICAgICAgICAgICAgdGltZWxpbmUuYW5pbWF0ZShvYmopXHJcbiAgICAgICAgICAgICAgICAud2hlbihvcHRzLmR1cmF0aW9uIHx8IDEwMDAsIHRhcmdldClcclxuICAgICAgICAgICAgICAgIC5kdXJpbmcoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouYWxwaGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldEFscGhhKG9iai5hbHBoYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouYmV0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0QmV0YShvYmouYmV0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouZGlzdGFuY2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldERpc3RhbmNlKG9iai5kaXN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmoub3J0aG9ncmFwaGljU2l6ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0T3J0aG9ncmFwaGljU2l6ZShvYmoub3J0aG9ncmFwaGljU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmouY2VudGVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRDZW50ZXIob2JqLmNlbnRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuZG9uZShvcHRzLmRvbmUpXHJcbiAgICAgICAgKS5zdGFydChvcHRzLmVhc2luZyB8fCAnbGluZWFyJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcCBhbGwgYW5pbWF0aW9uc1xyXG4gICAgICovXHJcbiAgICBzdG9wQWxsQW5pbWF0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9hbmltYXRvcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5fYW5pbWF0b3JzW2ldLnN0b3AoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fYW5pbWF0b3JzLmxlbmd0aCA9IDA7XHJcbiAgICB9LFxyXG5cclxuICAgIF9pc0FuaW1hdGluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hbmltYXRvcnMubGVuZ3RoID4gMDtcclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIENhbGwgdXBkYXRlIGVhY2ggZnJhbWVcclxuICAgICAqIEBwYXJhbSAge251bWJlcn0gZGVsdGFUaW1lIEZyYW1lIHRpbWVcclxuICAgICAqL1xyXG4gICAgdXBkYXRlOiBmdW5jdGlvbiAoZGVsdGFUaW1lKSB7XHJcblxyXG4gICAgICAgIGRlbHRhVGltZSA9IGRlbHRhVGltZSB8fCAxNjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3JvdGF0aW5nKSB7XHJcbiAgICAgICAgICAgIHZhciByYWRpYW4gPSAodGhpcy5hdXRvUm90YXRlRGlyZWN0aW9uID09PSAnY3cnID8gMSA6IC0xKVxyXG4gICAgICAgICAgICAgICAgKiB0aGlzLmF1dG9Sb3RhdGVTcGVlZCAvIDE4MCAqIE1hdGguUEk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BoaSAtPSByYWRpYW4gKiBkZWx0YVRpbWUgLyAxMDAwO1xyXG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3JvdGF0ZVZlbG9jaXR5LmxlbigpID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy5fem9vbVNwZWVkKSA+IDAuMDEgfHwgdGhpcy5fcGFuVmVsb2NpdHkubGVuKCkgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fbmVlZHNVcGRhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRml4ZWQgZGVsdGFUaW1lXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlRGlzdGFuY2VPclNpemUoTWF0aC5taW4oZGVsdGFUaW1lLCA1MCkpO1xyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVBhbihNYXRoLm1pbihkZWx0YVRpbWUsIDUwKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVJvdGF0ZShNYXRoLm1pbihkZWx0YVRpbWUsIDUwKSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZVRyYW5zZm9ybSgpO1xyXG5cclxuICAgICAgICB0aGlzLnRhcmdldC51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyKCd1cGRhdGUnKTtcclxuXHJcbiAgICAgICAgdGhpcy5fbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZVJvdGF0ZTogZnVuY3Rpb24gKGRlbHRhVGltZSkge1xyXG4gICAgICAgIHZhciB2ZWxvY2l0eSA9IHRoaXMuX3JvdGF0ZVZlbG9jaXR5O1xyXG4gICAgICAgIHRoaXMuX3BoaSA9IHZlbG9jaXR5LnkgKiBkZWx0YVRpbWUgLyAyMCArIHRoaXMuX3BoaTtcclxuICAgICAgICB0aGlzLl90aGV0YSA9IHZlbG9jaXR5LnggKiBkZWx0YVRpbWUgLyAyMCArIHRoaXMuX3RoZXRhO1xyXG5cclxuICAgICAgICB0aGlzLnNldEFscGhhKHRoaXMuZ2V0QWxwaGEoKSk7XHJcbiAgICAgICAgdGhpcy5zZXRCZXRhKHRoaXMuZ2V0QmV0YSgpKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdmVjdG9yRGFtcGluZyh2ZWxvY2l0eSwgdGhpcy5kYW1waW5nKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZURpc3RhbmNlT3JTaXplOiBmdW5jdGlvbiAoZGVsdGFUaW1lKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0RGlzdGFuY2UodGhpcy5fZGlzdGFuY2UgKyB0aGlzLl96b29tU3BlZWQgKiBkZWx0YVRpbWUgLyAyMCk7XHJcbiAgICAgICAgaWYgKCEodGhpcy50YXJnZXQgaW5zdGFuY2VvZiBQZXJzcGVjdGl2ZUNhbWVyYSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0T3J0aG9TaXplKHRoaXMuX29ydGhvU2l6ZSArIHRoaXMuX3pvb21TcGVlZCAqIGRlbHRhVGltZSAvIDIwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3pvb21TcGVlZCAqPSBNYXRoLnBvdyh0aGlzLmRhbXBpbmcsIGRlbHRhVGltZSAvIDE2KTtcclxuICAgIH0sXHJcblxyXG4gICAgX3NldERpc3RhbmNlOiBmdW5jdGlvbiAoZGlzdGFuY2UpIHtcclxuICAgICAgICB0aGlzLl9kaXN0YW5jZSA9IE1hdGgubWF4KE1hdGgubWluKGRpc3RhbmNlLCB0aGlzLm1heERpc3RhbmNlKSwgdGhpcy5taW5EaXN0YW5jZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9zZXRPcnRob1NpemU6IGZ1bmN0aW9uIChzaXplKSB7XHJcbiAgICAgICAgdGhpcy5fb3J0aG9TaXplID0gTWF0aC5tYXgoTWF0aC5taW4oc2l6ZSwgdGhpcy5tYXhPcnRob2dyYXBoaWNTaXplKSwgdGhpcy5taW5PcnRob2dyYXBoaWNTaXplKTtcclxuICAgICAgICB2YXIgY2FtZXJhID0gdGhpcy50YXJnZXQ7XHJcbiAgICAgICAgdmFyIGNhbWVyYUhlaWdodCA9IHRoaXMuX29ydGhvU2l6ZTtcclxuICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgdmFyIGNhbWVyYVdpZHRoID0gY2FtZXJhSGVpZ2h0ICogdGhpcy5vcnRob2dyYXBoaWNBc3BlY3Q7XHJcbiAgICAgICAgY2FtZXJhLmxlZnQgPSAtY2FtZXJhV2lkdGggLyAyO1xyXG4gICAgICAgIGNhbWVyYS5yaWdodCA9IGNhbWVyYVdpZHRoIC8gMjtcclxuICAgICAgICBjYW1lcmEudG9wID0gY2FtZXJhSGVpZ2h0IC8gMjtcclxuICAgICAgICBjYW1lcmEuYm90dG9tID0gLWNhbWVyYUhlaWdodCAvIDI7XHJcbiAgICB9LFxyXG5cclxuICAgIF91cGRhdGVQYW46IGZ1bmN0aW9uIChkZWx0YVRpbWUpIHtcclxuICAgICAgICB2YXIgdmVsb2NpdHkgPSB0aGlzLl9wYW5WZWxvY2l0eTtcclxuICAgICAgICB2YXIgbGVuID0gdGhpcy5fZGlzdGFuY2U7XHJcblxyXG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldDtcclxuICAgICAgICB2YXIgeUF4aXMgPSB0YXJnZXQud29ybGRUcmFuc2Zvcm0ueTtcclxuICAgICAgICB2YXIgeEF4aXMgPSB0YXJnZXQud29ybGRUcmFuc2Zvcm0ueDtcclxuXHJcbiAgICAgICAgLy8gUEVORElOR1xyXG4gICAgICAgIHRoaXMuX2NlbnRlclxyXG4gICAgICAgICAgICAuc2NhbGVBbmRBZGQoeEF4aXMsIC12ZWxvY2l0eS54ICogbGVuIC8gMjAwKVxyXG4gICAgICAgICAgICAuc2NhbGVBbmRBZGQoeUF4aXMsIC12ZWxvY2l0eS55ICogbGVuIC8gMjAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5fdmVjdG9yRGFtcGluZyh2ZWxvY2l0eSwgMCk7XHJcblxyXG4gICAgICAgIHZlbG9jaXR5LnggPSB2ZWxvY2l0eS55ID0gMDtcclxuICAgIH0sXHJcblxyXG4gICAgX3VwZGF0ZVRyYW5zZm9ybTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBjYW1lcmEgPSB0aGlzLnRhcmdldDtcclxuXHJcbiAgICAgICAgdmFyIGRpciA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgICAgdmFyIHRoZXRhID0gdGhpcy5fdGhldGEgKyBNYXRoLlBJIC8gMjtcclxuICAgICAgICB2YXIgcGhpID0gdGhpcy5fcGhpICsgTWF0aC5QSSAvIDI7XHJcbiAgICAgICAgdmFyIHIgPSBNYXRoLnNpbih0aGV0YSk7XHJcblxyXG4gICAgICAgIGRpci54ID0gciAqIE1hdGguY29zKHBoaSk7XHJcbiAgICAgICAgZGlyLnkgPSAtTWF0aC5jb3ModGhldGEpO1xyXG4gICAgICAgIGRpci56ID0gciAqIE1hdGguc2luKHBoaSk7XHJcblxyXG4gICAgICAgIGNhbWVyYS5wb3NpdGlvbi5jb3B5KHRoaXMuX2NlbnRlcikuc2NhbGVBbmRBZGQoZGlyLCB0aGlzLl9kaXN0YW5jZSk7XHJcbiAgICAgICAgY2FtZXJhLnJvdGF0aW9uLmlkZW50aXR5KClcclxuICAgICAgICAgICAgLy8gRmlyc3QgYXJvdW5kIHksIHRoZW4gYXJvdW5kIHhcclxuICAgICAgICAgICAgLnJvdGF0ZVkoLXRoaXMuX3BoaSlcclxuICAgICAgICAgICAgLnJvdGF0ZVgoLXRoaXMuX3RoZXRhKTtcclxuICAgIH0sXHJcblxyXG4gICAgX3N0YXJ0Q291bnRpbmdTdGlsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zdGlsbFRpbWVvdXQpO1xyXG5cclxuICAgICAgICB2YXIgdGltZSA9IHRoaXMuYXV0b1JvdGF0ZUFmdGVyU3RpbGw7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmICghaXNOYU4odGltZSkgJiYgdGltZSA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RpbGxUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLl9yb3RhdGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIH0sIHRpbWUgKiAxMDAwKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIF92ZWN0b3JEYW1waW5nOiBmdW5jdGlvbiAodiwgZGFtcGluZykge1xyXG4gICAgICAgIHZhciBzcGVlZCA9IHYubGVuKCk7XHJcbiAgICAgICAgc3BlZWQgPSBzcGVlZCAqIGRhbXBpbmc7XHJcbiAgICAgICAgaWYgKHNwZWVkIDwgMWUtNCkge1xyXG4gICAgICAgICAgICBzcGVlZCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHYubm9ybWFsaXplKCkuc2NhbGUoc3BlZWQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBkZWNvbXBvc2VUcmFuc2Zvcm06IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudGFyZ2V0LnVwZGF0ZVdvcmxkVHJhbnNmb3JtKCk7XHJcblxyXG4gICAgICAgIHZhciBmb3J3YXJkID0gdGhpcy50YXJnZXQud29ybGRUcmFuc2Zvcm0uejtcclxuICAgICAgICB2YXIgYWxwaGEgPSBNYXRoLmFzaW4oZm9yd2FyZC55KTtcclxuICAgICAgICB2YXIgYmV0YSA9IE1hdGguYXRhbjIoZm9yd2FyZC54LCBmb3J3YXJkLnopO1xyXG5cclxuICAgICAgICB0aGlzLl90aGV0YSA9IGFscGhhO1xyXG4gICAgICAgIHRoaXMuX3BoaSA9IC1iZXRhO1xyXG5cclxuICAgICAgICB0aGlzLnNldEJldGEodGhpcy5nZXRCZXRhKCkpO1xyXG4gICAgICAgIHRoaXMuc2V0QWxwaGEodGhpcy5nZXRBbHBoYSgpKTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2V0RGlzdGFuY2UodGhpcy50YXJnZXQucG9zaXRpb24uZGlzdCh0aGlzLl9jZW50ZXIpKTtcclxuICAgICAgICBpZiAoISh0aGlzLnRhcmdldCBpbnN0YW5jZW9mIFBlcnNwZWN0aXZlQ2FtZXJhKSl7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldE9ydGhvU2l6ZSh0aGlzLnRhcmdldC50b3AgLSB0aGlzLnRhcmdldC5ib3R0b20pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgX21vdXNlRG93bkhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzQW5pbWF0aW5nKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgeCA9IGUuY2xpZW50WDtcclxuICAgICAgICB2YXIgeSA9IGUuY2xpZW50WTtcclxuICAgICAgICAvLyBUb3VjaFxyXG4gICAgICAgIGlmIChlLnRhcmdldFRvdWNoZXMpIHtcclxuICAgICAgICAgICAgdmFyIHRvdWNoID0gZS50YXJnZXRUb3VjaGVzWzBdO1xyXG4gICAgICAgICAgICB4ID0gdG91Y2guY2xpZW50WDtcclxuICAgICAgICAgICAgeSA9IHRvdWNoLmNsaWVudFk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9tb2RlID0gJ3JvdGF0ZSc7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzR2VzdHVyZShlLCAnc3RhcnQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChlLmJ1dHRvbiA9PT0gTU9VU0VfQlVUVE9OX0tFWV9NQVBbdGhpcy5yb3RhdGVNb3VzZUJ1dHRvbl0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vZGUgPSAncm90YXRlJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChlLmJ1dHRvbiA9PT0gTU9VU0VfQlVUVE9OX0tFWV9NQVBbdGhpcy5wYW5Nb3VzZUJ1dHRvbl0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vZGUgPSAncGFuJztcclxuXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIFZlbmRvcnMgbGlrZSBNb3ppbGxhIHByb3ZpZGUgYSBtb3VzZS1kcml2ZW4gcGFubmluZyBmZWF0dXJlXHJcbiAgICAgICAgICAgICAgICAgKiB0aGF0IGlzIGFjdGl2YXRlZCB3aGVuIHRoZSBtaWRkbGUgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQuXHJcbiAgICAgICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgICAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vdWlldmVudHMvI2V2ZW50LXR5cGUtbW91c2Vkb3duXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21vZGUgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZG9tID0gdGhpcy5kb21FbGVtZW50O1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNobW92ZScsIHRoaXMuX21vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ3RvdWNoZW5kJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG5cclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IuYWRkRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZXVwJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5hZGRFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlb3V0JywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG5cclxuICAgICAgICAvLyBSZXNldCByb3RhdGUgdmVsb2NpdHlcclxuICAgICAgICB0aGlzLl9yb3RhdGVWZWxvY2l0eS5zZXQoMCwgMCk7XHJcbiAgICAgICAgdGhpcy5fcm90YXRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5hdXRvUm90YXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0Q291bnRpbmdTdGlsbCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fbW91c2VYID0geDtcclxuICAgICAgICB0aGlzLl9tb3VzZVkgPSB5O1xyXG4gICAgfSxcclxuXHJcbiAgICBfbW91c2VNb3ZlSGFuZGxlcjogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBbmltYXRpbmcoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB4ID0gZS5jbGllbnRYO1xyXG4gICAgICAgIHZhciB5ID0gZS5jbGllbnRZO1xyXG5cclxuICAgICAgICB2YXIgaGF2ZUdlc3R1cmU7XHJcbiAgICAgICAgLy8gVG91Y2hcclxuICAgICAgICBpZiAoZS50YXJnZXRUb3VjaGVzKSB7XHJcbiAgICAgICAgICAgIHZhciB0b3VjaCA9IGUudGFyZ2V0VG91Y2hlc1swXTtcclxuICAgICAgICAgICAgeCA9IHRvdWNoLmNsaWVudFg7XHJcbiAgICAgICAgICAgIHkgPSB0b3VjaC5jbGllbnRZO1xyXG5cclxuICAgICAgICAgICAgaGF2ZUdlc3R1cmUgPSB0aGlzLl9wcm9jZXNzR2VzdHVyZShlLCAnY2hhbmdlJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgcGFuU2Vuc2l0aXZpdHkgPSBjb252ZXJ0VG9BcnJheSh0aGlzLnBhblNlbnNpdGl2aXR5KTtcclxuICAgICAgICB2YXIgcm90YXRlU2Vuc2l0aXZpdHkgPSBjb252ZXJ0VG9BcnJheSh0aGlzLnJvdGF0ZVNlbnNpdGl2aXR5KTtcclxuXHJcbiAgICAgICAgaWYgKCFoYXZlR2VzdHVyZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fbW9kZSA9PT0gJ3JvdGF0ZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JvdGF0ZVZlbG9jaXR5LnkgKz0gKHggLSB0aGlzLl9tb3VzZVgpIC8gdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoICogMiAqIHJvdGF0ZVNlbnNpdGl2aXR5WzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm90YXRlVmVsb2NpdHkueCArPSAoeSAtIHRoaXMuX21vdXNlWSkgLyB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0ICogMiAqIHJvdGF0ZVNlbnNpdGl2aXR5WzFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX21vZGUgPT09ICdwYW4nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wYW5WZWxvY2l0eS54ICs9ICh4IC0gdGhpcy5fbW91c2VYKSAvIHRoaXMuZG9tRWxlbWVudC5jbGllbnRXaWR0aCAqIHBhblNlbnNpdGl2aXR5WzBdICogNDAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcGFuVmVsb2NpdHkueSArPSAoLXkgKyB0aGlzLl9tb3VzZVkpIC8gdGhpcy5kb21FbGVtZW50LmNsaWVudEhlaWdodCAqIHBhblNlbnNpdGl2aXR5WzFdICogNDAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9tb3VzZVggPSB4O1xyXG4gICAgICAgIHRoaXMuX21vdXNlWSA9IHk7XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQgJiYgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfbW91c2VXaGVlbEhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzQW5pbWF0aW5nKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZGVsdGEgPSBlLmRlbHRhWTtcclxuICAgICAgICBpZiAoZGVsdGEgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl96b29tSGFuZGxlcihlLCBkZWx0YSA+IDAgPyAxIDogLTEpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcGluY2hIYW5kbGVyOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0FuaW1hdGluZygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fem9vbUhhbmRsZXIoZSwgZS5waW5jaFNjYWxlID4gMSA/IC0wLjQgOiAwLjQpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfem9vbUhhbmRsZXI6IGZ1bmN0aW9uIChlLCBkZWx0YSkge1xyXG5cclxuICAgICAgICB2YXIgc3BlZWQ7XHJcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0IGluc3RhbmNlb2YgUGVyc3BlY3RpdmVDYW1lcmEpIHtcclxuICAgICAgICAgICAgc3BlZWQgPSBNYXRoLm1heChNYXRoLm1heChNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlIC0gdGhpcy5taW5EaXN0YW5jZSxcclxuICAgICAgICAgICAgICAgIHRoaXMubWF4RGlzdGFuY2UgLSB0aGlzLl9kaXN0YW5jZVxyXG4gICAgICAgICAgICApKSAvIDIwLCAwLjUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc3BlZWQgPSBNYXRoLm1heChNYXRoLm1heChNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgIHRoaXMuX29ydGhvU2l6ZSAtIHRoaXMubWluT3J0aG9ncmFwaGljU2l6ZSxcclxuICAgICAgICAgICAgICAgIHRoaXMubWF4T3J0aG9ncmFwaGljU2l6ZSAtIHRoaXMuX29ydGhvU2l6ZVxyXG4gICAgICAgICAgICApKSAvIDIwLCAwLjUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fem9vbVNwZWVkID0gKGRlbHRhID4gMCA/IC0xIDogMSkgKiBzcGVlZCAqIHRoaXMuem9vbVNlbnNpdGl2aXR5O1xyXG5cclxuICAgICAgICB0aGlzLl9yb3RhdGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hdXRvUm90YXRlICYmIHRoaXMuX21vZGUgPT09ICdyb3RhdGUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0Q291bnRpbmdTdGlsbCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCAmJiBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIF9tb3VzZVVwSGFuZGxlcjogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIGRvbSA9IHRoaXMuZG9tRWxlbWVudDtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICd0b3VjaG1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICd0b3VjaGVuZCcsIHRoaXMuX21vdXNlVXBIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZW1vdmUnLCB0aGlzLl9tb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB2ZW5kb3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb20sICdtb3VzZXVwJywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG4gICAgICAgIHZlbmRvci5yZW1vdmVFdmVudExpc3RlbmVyKGRvbSwgJ21vdXNlb3V0JywgdGhpcy5fbW91c2VVcEhhbmRsZXIpO1xyXG5cclxuICAgICAgICB0aGlzLl9wcm9jZXNzR2VzdHVyZShldmVudCwgJ2VuZCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfYWRkQW5pbWF0b3I6IGZ1bmN0aW9uIChhbmltYXRvcikge1xyXG4gICAgICAgIHZhciBhbmltYXRvcnMgPSB0aGlzLl9hbmltYXRvcnM7XHJcbiAgICAgICAgYW5pbWF0b3JzLnB1c2goYW5pbWF0b3IpO1xyXG4gICAgICAgIGFuaW1hdG9yLmRvbmUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgaWR4ID0gYW5pbWF0b3JzLmluZGV4T2YoYW5pbWF0b3IpO1xyXG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIGFuaW1hdG9ycy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhbmltYXRvcjtcclxuICAgIH0sXHJcblxyXG5cclxuICAgIF9wcm9jZXNzR2VzdHVyZTogZnVuY3Rpb24gKGV2ZW50LCBzdGFnZSkge1xyXG4gICAgICAgIHZhciBnZXN0dXJlTWdyID0gdGhpcy5fZ2VzdHVyZU1ncjtcclxuXHJcbiAgICAgICAgc3RhZ2UgPT09ICdzdGFydCcgJiYgZ2VzdHVyZU1nci5jbGVhcigpO1xyXG5cclxuICAgICAgICB2YXIgZ2VzdHVyZUluZm8gPSBnZXN0dXJlTWdyLnJlY29nbml6ZShcclxuICAgICAgICAgICAgZXZlbnQsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHN0YWdlID09PSAnZW5kJyAmJiBnZXN0dXJlTWdyLmNsZWFyKCk7XHJcblxyXG4gICAgICAgIC8vIERvIG5vdCBkbyBhbnkgcHJldmVudERlZmF1bHQgaGVyZS4gVXBwZXIgYXBwbGljYXRpb24gZG8gdGhhdCBpZiBuZWNlc3NhcnkuXHJcbiAgICAgICAgaWYgKGdlc3R1cmVJbmZvKSB7XHJcbiAgICAgICAgICAgIHZhciB0eXBlID0gZ2VzdHVyZUluZm8udHlwZTtcclxuICAgICAgICAgICAgZXZlbnQuZ2VzdHVyZUV2ZW50ID0gdHlwZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3BpbmNoSGFuZGxlcihnZXN0dXJlSW5mby5ldmVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZ2VzdHVyZUluZm87XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIElmIGF1dG8gcm90YXRlIHRoZSB0YXJnZXRcclxuICogQHR5cGUge2Jvb2xlYW59XHJcbiAqIEBkZWZhdWx0IGZhbHNlXHJcbiAqL1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoT3JiaXRDb250cm9sLnByb3RvdHlwZSwgJ2F1dG9Sb3RhdGUnLCB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b1JvdGF0ZTtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcclxuICAgICAgICB0aGlzLl9hdXRvUm90YXRlID0gdmFsO1xyXG4gICAgICAgIHRoaXMuX3JvdGF0aW5nID0gdmFsO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShPcmJpdENvbnRyb2wucHJvdG90eXBlLCAndGFyZ2V0Jywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhcmdldDtcclxuICAgIH0sXHJcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcclxuICAgICAgICBpZiAodmFsICYmIHZhbC50YXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRDZW50ZXIodmFsLnRhcmdldC50b0FycmF5KCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl90YXJnZXQgPSB2YWw7XHJcbiAgICAgICAgdGhpcy5kZWNvbXBvc2VUcmFuc2Zvcm0oKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgT3JiaXRDb250cm9sO1xyXG4iLCIvKipcclxuICogU3RhdGljR2VvbWV0cnkgY2FuIG5vdCBiZSBjaGFuZ2VkIG9uY2UgdGhleSd2ZSBiZWVuIHNldHVwXHJcbiAqL1xyXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSAnLi9HZW9tZXRyeSc7XHJcbi8qKlxyXG4gKiBAY29uc3RydWN0b3IgY2xheS5TdGF0aWNHZW9tZXRyeVxyXG4gKiBAZXh0ZW5kcyBjbGF5Lkdlb21ldHJ5XHJcbiAqL1xyXG52YXIgU3RhdGljR2VvbWV0cnkgPSBHZW9tZXRyeS5leHRlbmQoe1xyXG4gICAgZHluYW1pYzogZmFsc2VcclxufSk7XHJcbmV4cG9ydCBkZWZhdWx0IFN0YXRpY0dlb21ldHJ5O1xyXG4iLCIvLyBUT0RPIHRlc3RcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gJy4uL0dlb21ldHJ5JztcclxuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XHJcbmltcG9ydCBOb2RlIGZyb20gJy4uL05vZGUnO1xyXG5pbXBvcnQgQm91bmRpbmdCb3ggZnJvbSAnLi4vbWF0aC9Cb3VuZGluZ0JveCc7XHJcbmltcG9ydCB2ZWMzIGZyb20gJy4uL2dsbWF0cml4L3ZlYzMnO1xyXG5pbXBvcnQgbWF0NCBmcm9tICcuLi9nbG1hdHJpeC9tYXQ0JztcclxuXHJcbi8qKlxyXG4gKiBAbmFtZXNwYWNlIGNsYXkudXRpbC5tZXNoXHJcbiAqL1xyXG52YXIgbWVzaFV0aWwgPSB7XHJcbiAgICAvKipcclxuICAgICAqIE1lcmdlIG11bHRpcGxlIG1lc2hlcyB0byBvbmUuXHJcbiAgICAgKiBOb3RlIHRoYXQgdGhlc2UgbWVzaGVzIG11c3QgaGF2ZSB0aGUgc2FtZSBtYXRlcmlhbFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7QXJyYXkuPGNsYXkuTWVzaD59IG1lc2hlc1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBhcHBseVdvcmxkVHJhbnNmb3JtXHJcbiAgICAgKiBAcmV0dXJuIHtjbGF5Lk1lc2h9XHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS51dGlsLm1lc2hcclxuICAgICAqL1xyXG4gICAgbWVyZ2U6IGZ1bmN0aW9uIChtZXNoZXMsIGFwcGx5V29ybGRUcmFuc2Zvcm0pIHtcclxuXHJcbiAgICAgICAgaWYgKCEgbWVzaGVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdGVtcGxhdGVNZXNoID0gbWVzaGVzWzBdO1xyXG4gICAgICAgIHZhciB0ZW1wbGF0ZUdlbyA9IHRlbXBsYXRlTWVzaC5nZW9tZXRyeTtcclxuICAgICAgICB2YXIgbWF0ZXJpYWwgPSB0ZW1wbGF0ZU1lc2gubWF0ZXJpYWw7XHJcblxyXG4gICAgICAgIHZhciBnZW9tZXRyeSA9IG5ldyBHZW9tZXRyeSh7XHJcbiAgICAgICAgICAgIGR5bmFtaWM6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZ2VvbWV0cnkuYm91bmRpbmdCb3ggPSBuZXcgQm91bmRpbmdCb3goKTtcclxuXHJcbiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWVzID0gdGVtcGxhdGVHZW8uZ2V0RW5hYmxlZEF0dHJpYnV0ZXMoKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVOYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWVzW2ldO1xyXG4gICAgICAgICAgICB2YXIgYXR0ciA9IHRlbXBsYXRlR2VvLmF0dHJpYnV0ZXNbbmFtZV07XHJcbiAgICAgICAgICAgIC8vIEV4dGVuZCBjdXN0b20gYXR0cmlidXRlc1xyXG4gICAgICAgICAgICBpZiAoIWdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV0gPSBhdHRyLmNsb25lKGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGludmVyc2VUcmFuc3Bvc2VNYXRyaXggPSBtYXQ0LmNyZWF0ZSgpO1xyXG4gICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGFycmF5IGRhdGEgYW5kIG1lcmdlIGJvdW5kaW5nIGJveFxyXG4gICAgICAgIHZhciBuVmVydGV4ID0gMDtcclxuICAgICAgICB2YXIgbkZhY2UgPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbWVzaGVzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50R2VvID0gbWVzaGVzW2tdLmdlb21ldHJ5O1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudEdlby5ib3VuZGluZ0JveCkge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudEdlby5ib3VuZGluZ0JveC5hcHBseVRyYW5zZm9ybShhcHBseVdvcmxkVHJhbnNmb3JtID8gbWVzaGVzW2tdLndvcmxkVHJhbnNmb3JtIDogbWVzaGVzW2tdLmxvY2FsVHJhbnNmb3JtKTtcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5LmJvdW5kaW5nQm94LnVuaW9uKGN1cnJlbnRHZW8uYm91bmRpbmdCb3gpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5WZXJ0ZXggKz0gY3VycmVudEdlby52ZXJ0ZXhDb3VudDtcclxuICAgICAgICAgICAgbkZhY2UgKz0gY3VycmVudEdlby50cmlhbmdsZUNvdW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGF0dHJpYnV0ZU5hbWVzLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZXNbbl07XHJcbiAgICAgICAgICAgIHZhciBhdHRyaWIgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzW25hbWVdO1xyXG4gICAgICAgICAgICBhdHRyaWIuaW5pdChuVmVydGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5WZXJ0ZXggPj0gMHhmZmZmKSB7XHJcbiAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgVWludDMyQXJyYXkobkZhY2UgKiAzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXMgPSBuZXcgVWludDE2QXJyYXkobkZhY2UgKiAzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2ZXJ0ZXhPZmZzZXQgPSAwO1xyXG4gICAgICAgIHZhciBpbmRpY2VzT2Zmc2V0ID0gMDtcclxuICAgICAgICB2YXIgdXNlSW5kaWNlcyA9IHRlbXBsYXRlR2VvLmlzVXNlSW5kaWNlcygpO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBtbSA9IDA7IG1tIDwgbWVzaGVzLmxlbmd0aDsgbW0rKykge1xyXG4gICAgICAgICAgICB2YXIgbWVzaCA9IG1lc2hlc1ttbV07XHJcbiAgICAgICAgICAgIHZhciBjdXJyZW50R2VvID0gbWVzaC5nZW9tZXRyeTtcclxuXHJcbiAgICAgICAgICAgIHZhciBuVmVydGV4ID0gY3VycmVudEdlby52ZXJ0ZXhDb3VudDtcclxuXHJcbiAgICAgICAgICAgIHZhciBtYXRyaXggPSBhcHBseVdvcmxkVHJhbnNmb3JtID8gbWVzaC53b3JsZFRyYW5zZm9ybS5hcnJheSA6IG1lc2gubG9jYWxUcmFuc2Zvcm0uYXJyYXk7XHJcbiAgICAgICAgICAgIG1hdDQuaW52ZXJ0KGludmVyc2VUcmFuc3Bvc2VNYXRyaXgsIG1hdHJpeCk7XHJcbiAgICAgICAgICAgIG1hdDQudHJhbnNwb3NlKGludmVyc2VUcmFuc3Bvc2VNYXRyaXgsIGludmVyc2VUcmFuc3Bvc2VNYXRyaXgpO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgbm4gPSAwOyBubiA8IGF0dHJpYnV0ZU5hbWVzLmxlbmd0aDsgbm4rKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lc1tubl07XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudEF0dHIgPSBjdXJyZW50R2VvLmF0dHJpYnV0ZXNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0QXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbbmFtZV07XHJcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHRoZSB1bnVzZWQgYXR0cmlidXRlcztcclxuICAgICAgICAgICAgICAgIGlmICghY3VycmVudEF0dHIudmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgbGVuID0gY3VycmVudEF0dHIudmFsdWUubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNpemUgPSBjdXJyZW50QXR0ci5zaXplO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IHZlcnRleE9mZnNldCAqIHNpemU7XHJcbiAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBsZW4gLyBzaXplO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldEF0dHIudmFsdWVbb2Zmc2V0ICsgaV0gPSBjdXJyZW50QXR0ci52YWx1ZVtpXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIFRyYW5zZm9ybSBwb3NpdGlvbiwgbm9ybWFsIGFuZCB0YW5nZW50XHJcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3Bvc2l0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlYzMuZm9yRWFjaCh0YXJnZXRBdHRyLnZhbHVlLCBzaXplLCBvZmZzZXQsIGNvdW50LCB2ZWMzLnRyYW5zZm9ybU1hdDQsIG1hdHJpeCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09PSAnbm9ybWFsJyB8fCBuYW1lID09PSAndGFuZ2VudCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZWMzLmZvckVhY2godGFyZ2V0QXR0ci52YWx1ZSwgc2l6ZSwgb2Zmc2V0LCBjb3VudCwgdmVjMy50cmFuc2Zvcm1NYXQ0LCBpbnZlcnNlVHJhbnNwb3NlTWF0cml4KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHVzZUluZGljZXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsZW4gPSBjdXJyZW50R2VvLmluZGljZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LmluZGljZXNbaSArIGluZGljZXNPZmZzZXRdID0gY3VycmVudEdlby5pbmRpY2VzW2ldICsgdmVydGV4T2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaW5kaWNlc09mZnNldCArPSBsZW47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZlcnRleE9mZnNldCArPSBuVmVydGV4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsLFxyXG4gICAgICAgICAgICBnZW9tZXRyeTogZ2VvbWV0cnlcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGxpdCBtZXNoIGludG8gc3ViIG1lc2hlcywgZWFjaCBtZXNoIHdpbGwgaGF2ZSBtYXhKb2ludE51bWJlciBqb2ludHMuXHJcbiAgICAgKiBAcGFyYW0ge2NsYXkuTWVzaH0gbWVzaFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heEpvaW50TnVtYmVyXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGluUGxhY2VcclxuICAgICAqIEByZXR1cm4ge2NsYXkuTm9kZX1cclxuICAgICAqXHJcbiAgICAgKiBAbWVtYmVyT2YgY2xheS51dGlsLm1lc2hcclxuICAgICAqL1xyXG5cclxuICAgIC8vIEZJWE1FLCBIYXZlIGlzc3VlcyBvbiBzb21lIG1vZGVsc1xyXG4gICAgc3BsaXRCeUpvaW50czogZnVuY3Rpb24gKG1lc2gsIG1heEpvaW50TnVtYmVyLCBpblBsYWNlKSB7XHJcbiAgICAgICAgdmFyIGdlb21ldHJ5ID0gbWVzaC5nZW9tZXRyeTtcclxuICAgICAgICB2YXIgc2tlbGV0b24gPSBtZXNoLnNrZWxldG9uO1xyXG4gICAgICAgIHZhciBtYXRlcmlhbCA9IG1lc2gubWF0ZXJpYWw7XHJcbiAgICAgICAgdmFyIGpvaW50cyA9IG1lc2guam9pbnRzO1xyXG4gICAgICAgIGlmICghZ2VvbWV0cnkgfHwgIXNrZWxldG9uIHx8ICFqb2ludHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGpvaW50cy5sZW5ndGggPCBtYXhKb2ludE51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gbWVzaDtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB2YXIgaW5kaWNlcyA9IGdlb21ldHJ5LmluZGljZXM7XHJcblxyXG4gICAgICAgIHZhciBmYWNlTGVuID0gZ2VvbWV0cnkudHJpYW5nbGVDb3VudDtcclxuICAgICAgICB2YXIgcmVzdCA9IGZhY2VMZW47XHJcbiAgICAgICAgdmFyIGlzRmFjZUFkZGVkID0gW107XHJcbiAgICAgICAgdmFyIGpvaW50VmFsdWVzID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5qb2ludC52YWx1ZTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZhY2VMZW47IGkrKykge1xyXG4gICAgICAgICAgICBpc0ZhY2VBZGRlZFtpXSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYWRkZWRKb2ludElkeFBlckZhY2UgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIGJ1Y2tldHMgPSBbXTtcclxuXHJcbiAgICAgICAgdmFyIGdldEpvaW50QnlJbmRleCA9IGZ1bmN0aW9uIChpZHgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGpvaW50c1tpZHhdO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgd2hpbGUgKHJlc3QgPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBidWNrZXRUcmlhbmdsZXMgPSBbXTtcclxuICAgICAgICAgICAgdmFyIGJ1Y2tldEpvaW50UmV2ZXJzZU1hcCA9IFtdO1xyXG4gICAgICAgICAgICB2YXIgYnVja2V0Sm9pbnRzID0gW107XHJcbiAgICAgICAgICAgIHZhciBzdWJKb2ludE51bWJlciA9IDA7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBidWNrZXRKb2ludFJldmVyc2VNYXBbaV0gPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGZhY2VMZW47IGYrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRmFjZUFkZGVkW2ZdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgY2FuQWRkVG9CdWNrZXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFkZGVkTnVtYmVyID0gMDtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpZHggPSBpbmRpY2VzW2YgKiAzICsgaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqb2ludElkeCA9IGpvaW50VmFsdWVzW2lkeCAqIDQgKyBqXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqb2ludElkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVja2V0Sm9pbnRSZXZlcnNlTWFwW2pvaW50SWR4XSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViSm9pbnROdW1iZXIgPCBtYXhKb2ludE51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRKb2ludFJldmVyc2VNYXBbam9pbnRJZHhdID0gc3ViSm9pbnROdW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEpvaW50c1tzdWJKb2ludE51bWJlcisrXSA9IGpvaW50SWR4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZEpvaW50SWR4UGVyRmFjZVthZGRlZE51bWJlcisrXSA9IGpvaW50SWR4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuQWRkVG9CdWNrZXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNhbkFkZFRvQnVja2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gUmV2ZXJzZSBvcGVyYXRpb25cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFkZGVkTnVtYmVyOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0Sm9pbnRSZXZlcnNlTWFwW2FkZGVkSm9pbnRJZHhQZXJGYWNlW2ldXSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXRKb2ludHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YkpvaW50TnVtYmVyLS07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0VHJpYW5nbGVzLnB1c2goaW5kaWNlcy5zdWJhcnJheShmICogMywgKGYgKyAxKSAqIDMpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaXNGYWNlQWRkZWRbZl0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3QtLTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBidWNrZXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdHJpYW5nbGVzOiBidWNrZXRUcmlhbmdsZXMsXHJcbiAgICAgICAgICAgICAgICBqb2ludHM6IGJ1Y2tldEpvaW50cy5tYXAoZ2V0Sm9pbnRCeUluZGV4KSxcclxuICAgICAgICAgICAgICAgIGpvaW50UmV2ZXJzZU1hcDogYnVja2V0Sm9pbnRSZXZlcnNlTWFwXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHJvb3QgPSBuZXcgTm9kZSh7XHJcbiAgICAgICAgICAgIG5hbWU6IG1lc2gubmFtZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHZhciBhdHRyaWJOYW1lcyA9IGdlb21ldHJ5LmdldEVuYWJsZWRBdHRyaWJ1dGVzKCk7XHJcblxyXG4gICAgICAgIGF0dHJpYk5hbWVzLnNwbGljZShhdHRyaWJOYW1lcy5pbmRleE9mKCdqb2ludCcpLCAxKTtcclxuICAgICAgICAvLyBNYXAgZnJvbSBvbGQgdmVydGV4IGluZGV4IHRvIG5ldyB2ZXJ0ZXggaW5kZXhcclxuICAgICAgICB2YXIgbmV3SW5kaWNlcyA9IFtdO1xyXG4gICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDwgYnVja2V0cy5sZW5ndGg7IGIrKykge1xyXG4gICAgICAgICAgICB2YXIgYnVja2V0ID0gYnVja2V0c1tiXTtcclxuICAgICAgICAgICAgdmFyIGpvaW50UmV2ZXJzZU1hcCA9IGJ1Y2tldC5qb2ludFJldmVyc2VNYXA7XHJcbiAgICAgICAgICAgIHZhciBzdWJKb2ludE51bWJlciA9IGJ1Y2tldC5qb2ludHMubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgdmFyIHN1YkdlbyA9IG5ldyBHZW9tZXRyeSgpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHN1Yk1lc2ggPSBuZXcgTWVzaCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBbbWVzaC5uYW1lLCBpXS5qb2luKCctJyksXHJcbiAgICAgICAgICAgICAgICAvLyBET04nVCBjbG9uZSBtYXRlcmlhbC5cclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsOiBtYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBzdWJHZW8sXHJcbiAgICAgICAgICAgICAgICBza2VsZXRvbjogc2tlbGV0b24sXHJcbiAgICAgICAgICAgICAgICBqb2ludHM6IGJ1Y2tldC5qb2ludHMuc2xpY2UoKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdmFyIG5WZXJ0ZXggPSAwO1xyXG4gICAgICAgICAgICB2YXIgblZlcnRleDIgPSBnZW9tZXRyeS52ZXJ0ZXhDb3VudDtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuVmVydGV4MjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdJbmRpY2VzW2ldID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQ291bnQgc3ViIGdlbyBudW1iZXJcclxuICAgICAgICAgICAgZm9yICh2YXIgZiA9IDA7IGYgPCBidWNrZXQudHJpYW5nbGVzLmxlbmd0aDsgZisrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmFjZSA9IGJ1Y2tldC50cmlhbmdsZXNbZl07XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpZHggPSBmYWNlW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdJbmRpY2VzW2lkeF0gPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0luZGljZXNbaWR4XSA9IG5WZXJ0ZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5WZXJ0ZXgrKztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBhdHRyaWJOYW1lcy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYk5hbWUgPSBhdHRyaWJOYW1lc1thXTtcclxuICAgICAgICAgICAgICAgIHZhciBzdWJBdHRyaWIgPSBzdWJHZW8uYXR0cmlidXRlc1thdHRyaWJOYW1lXTtcclxuICAgICAgICAgICAgICAgIHN1YkF0dHJpYi5pbml0KG5WZXJ0ZXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN1Ykdlby5hdHRyaWJ1dGVzLmpvaW50LnZhbHVlID0gbmV3IEZsb2F0MzJBcnJheShuVmVydGV4ICogNCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoblZlcnRleCA+IDB4ZmZmZikge1xyXG4gICAgICAgICAgICAgICAgc3ViR2VvLmluZGljZXMgPSBuZXcgVWludDMyQXJyYXkoYnVja2V0LnRyaWFuZ2xlcy5sZW5ndGggKiAzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN1Ykdlby5pbmRpY2VzID0gbmV3IFVpbnQxNkFycmF5KGJ1Y2tldC50cmlhbmdsZXMubGVuZ3RoICogMyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBpbmRpY2VzT2Zmc2V0ID0gMDtcclxuICAgICAgICAgICAgblZlcnRleCA9IDA7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgblZlcnRleDI7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbmV3SW5kaWNlc1tpXSA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBmID0gMDsgZiA8IGJ1Y2tldC50cmlhbmdsZXMubGVuZ3RoOyBmKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciB0cmlhbmdsZSA9IGJ1Y2tldC50cmlhbmdsZXNbZl07XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgaWR4ID0gdHJpYW5nbGVbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdJbmRpY2VzW2lkeF0gPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0luZGljZXNbaWR4XSA9IG5WZXJ0ZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmliTmFtZXMubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJOYW1lID0gYXR0cmliTmFtZXNbYV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cmliID0gZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJOYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJBdHRyaWIgPSBzdWJHZW8uYXR0cmlidXRlc1thdHRyaWJOYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gYXR0cmliLnNpemU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzaXplOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJBdHRyaWIudmFsdWVbblZlcnRleCAqIHNpemUgKyBqXSA9IGF0dHJpYi52YWx1ZVtpZHggKiBzaXplICsgal07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqb2ludElkeCA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMuam9pbnQudmFsdWVbaWR4ICogNCArIGpdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IG5WZXJ0ZXggKiA0ICsgajtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqb2ludElkeCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViR2VvLmF0dHJpYnV0ZXMuam9pbnQudmFsdWVbb2Zmc2V0XSA9IGpvaW50UmV2ZXJzZU1hcFtqb2ludElkeF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJHZW8uYXR0cmlidXRlcy5qb2ludC52YWx1ZVtvZmZzZXRdID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgblZlcnRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzdWJHZW8uaW5kaWNlc1tpbmRpY2VzT2Zmc2V0KytdID0gbmV3SW5kaWNlc1tpZHhdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN1Ykdlby51cGRhdGVCb3VuZGluZ0JveCgpO1xyXG5cclxuICAgICAgICAgICAgcm9vdC5hZGQoc3ViTWVzaCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IG1lc2guY2hpbGRyZW4oKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJvb3QuYWRkKGNoaWxkcmVuW2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcm9vdC5wb3NpdGlvbi5jb3B5KG1lc2gucG9zaXRpb24pO1xyXG4gICAgICAgIHJvb3Qucm90YXRpb24uY29weShtZXNoLnJvdGF0aW9uKTtcclxuICAgICAgICByb290LnNjYWxlLmNvcHkobWVzaC5zY2FsZSk7XHJcblxyXG4gICAgICAgIGlmIChpblBsYWNlKSB7XHJcbiAgICAgICAgICAgIGlmIChtZXNoLmdldFBhcmVudCgpKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gbWVzaC5nZXRQYXJlbnQoKTtcclxuICAgICAgICAgICAgICAgIHBhcmVudC5yZW1vdmUobWVzaCk7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnQuYWRkKHJvb3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByb290O1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbWVzaFV0aWw7XHJcbiIsImltcG9ydCB1dGlsIGZyb20gJy4uL2NvcmUvdXRpbCc7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCBmcm9tICcuLi9tYXRoL0JvdW5kaW5nQm94JztcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSAnLi4vbWF0aC9WZWN0b3IzJztcclxuXHJcbnZhciBNRVRBID0ge1xyXG4gICAgdmVyc2lvbjogMS4wLFxyXG4gICAgdHlwZTogJ0dlb21ldHJ5JyxcclxuICAgIGdlbmVyYXRvcjogJ3V0aWwudHJhbnNmZXJhYmxlLnRvT2JqZWN0J1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBhbGlhcyBjbGF5LnV0aWwudHJhbnNmZXJhYmxlXHJcbiAqL1xyXG52YXIgdHJhbnNmZXJhYmxlVXRpbCA9IHtcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydCBnZW9tZXRyeSB0byBhIG9iamVjdCBjb250YWluaW5nIHRyYW5zZmVyYWJsZSBkYXRhXHJcbiAgICAgKiBAcGFyYW0ge0dlb21ldHJ5fSBnZW9tZXRyeSBnZW9tZXRyeVxyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBzaGFsbG93IHdoZXRoZXIgc2hhbGxvdyBjb3B5XHJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSB7IGRhdGEgOiBkYXRhLCBidWZmZXJzIDogYnVmZmVycyB9LCBidWZmZXJzIGlzIHRoZSB0cmFuc2ZlcmFibGUgbGlzdFxyXG4gICAgICovXHJcbiAgICB0b09iamVjdCA6IGZ1bmN0aW9uIChnZW9tZXRyeSwgc2hhbGxvdykge1xyXG4gICAgICAgIGlmICghZ2VvbWV0cnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBkYXRhID0ge1xyXG4gICAgICAgICAgICBtZXRhZGF0YSA6IHV0aWwuZXh0ZW5kKHt9LCBNRVRBKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy90cmFuc2ZlcmFibGUgYnVmZmVyc1xyXG4gICAgICAgIHZhciBidWZmZXJzID0gW107XHJcblxyXG4gICAgICAgIC8vZHluYW1pY1xyXG4gICAgICAgIGRhdGEuZHluYW1pYyA9IGdlb21ldHJ5LmR5bmFtaWM7XHJcblxyXG4gICAgICAgIC8vYm91bmRpbmcgYm94XHJcbiAgICAgICAgaWYgKGdlb21ldHJ5LmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIGRhdGEuYm91bmRpbmdCb3ggPSB7XHJcbiAgICAgICAgICAgICAgICBtaW4gOiBnZW9tZXRyeS5ib3VuZGluZ0JveC5taW4udG9BcnJheSgpLFxyXG4gICAgICAgICAgICAgICAgbWF4IDogZ2VvbWV0cnkuYm91bmRpbmdCb3gubWF4LnRvQXJyYXkoKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9pbmRpY2VzXHJcbiAgICAgICAgaWYgKGdlb21ldHJ5LmluZGljZXMgJiYgZ2VvbWV0cnkuaW5kaWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGRhdGEuaW5kaWNlcyA9IGNvcHlJZk5lY2Vzc2FyeShnZW9tZXRyeS5pbmRpY2VzLCBzaGFsbG93KTtcclxuICAgICAgICAgICAgYnVmZmVycy5wdXNoKGRhdGEuaW5kaWNlcy5idWZmZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9hdHRyaWJ1dGVzXHJcbiAgICAgICAgZGF0YS5hdHRyaWJ1dGVzID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBnZW9tZXRyeS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeS5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KHApKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbcF07XHJcbiAgICAgICAgICAgICAgICAvL2lnbm9yZSBlbXB0eSBhdHRyaWJ1dGVzXHJcbiAgICAgICAgICAgICAgICBpZiAoYXR0ciAmJiBhdHRyLnZhbHVlICYmIGF0dHIudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dHIgPSBkYXRhLmF0dHJpYnV0ZXNbcF0gPSBjb3B5QXR0cmlidXRlKGF0dHIsIHNoYWxsb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChhdHRyLnZhbHVlLmJ1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRhdGEgOiBkYXRhLFxyXG4gICAgICAgICAgICBidWZmZXJzIDogYnVmZmVyc1xyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVwcm9kdWNlIGEgZ2VvbWV0cnkgZnJvbSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHRvT2JqZWN0XHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9iamVjdCBnZW5lcmF0ZWQgYnkgdG9PYmplY3RcclxuICAgICAqIEByZXR1cm5zIHtHZW9tZXRyeX0gZ2VvbWV0cnlcclxuICAgICAqL1xyXG4gICAgdG9HZW9tZXRyeSA6IGZ1bmN0aW9uIChvYmplY3QpIHtcclxuICAgICAgICBpZiAoIW9iamVjdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iamVjdC5kYXRhICYmIG9iamVjdC5idWZmZXJzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2ZlcmFibGVVdGlsLnRvR2VvbWV0cnkob2JqZWN0LmRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIW9iamVjdC5tZXRhZGF0YSB8fCBvYmplY3QubWV0YWRhdGEuZ2VuZXJhdG9yICE9PSBNRVRBLmdlbmVyYXRvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1t1dGlsLnRyYW5zZmVyYWJsZS50b0dlb21ldHJ5XSB0aGUgb2JqZWN0IGlzIG5vdCBnZW5lcmF0ZWQgYnkgdXRpbC50cmFuc2ZlcmFibGUuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2Jhc2ljIG9wdGlvbnNcclxuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgZHluYW1pYyA6IG9iamVjdC5keW5hbWljLFxyXG4gICAgICAgICAgICBpbmRpY2VzIDogb2JqZWN0LmluZGljZXNcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAob2JqZWN0LmJvdW5kaW5nQm94KSB7XHJcbiAgICAgICAgICAgIHZhciBtaW4gPSBuZXcgVmVjdG9yMygpLnNldEFycmF5KG9iamVjdC5ib3VuZGluZ0JveC5taW4pO1xyXG4gICAgICAgICAgICB2YXIgbWF4ID0gbmV3IFZlY3RvcjMoKS5zZXRBcnJheShvYmplY3QuYm91bmRpbmdCb3gubWF4KTtcclxuICAgICAgICAgICAgb3B0aW9ucy5ib3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveChtaW4sIG1heCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkob3B0aW9ucyk7XHJcblxyXG4gICAgICAgIC8vYXR0cmlidXRlc1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gb2JqZWN0LmF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgaWYgKG9iamVjdC5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KHApKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IG9iamVjdC5hdHRyaWJ1dGVzW3BdO1xyXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkuYXR0cmlidXRlc1twXSA9IG5ldyBHZW9tZXRyeS5BdHRyaWJ1dGUoYXR0ci5uYW1lLCBhdHRyLnR5cGUsIGF0dHIuc2l6ZSwgYXR0ci5zZW1hbnRpYyk7XHJcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzW3BdLnZhbHVlID0gYXR0ci52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGdlb21ldHJ5O1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gY29weUF0dHJpYnV0ZShhdHRyLCBzaGFsbG93KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5hbWUgOiBhdHRyLm5hbWUsXHJcbiAgICAgICAgdHlwZSA6IGF0dHIudHlwZSxcclxuICAgICAgICBzaXplIDogYXR0ci5zaXplLFxyXG4gICAgICAgIHNlbWFudGljIDogYXR0ci5zZW1hbnRpYyxcclxuICAgICAgICB2YWx1ZSA6IGNvcHlJZk5lY2Vzc2FyeShhdHRyLnZhbHVlLCBzaGFsbG93KVxyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29weUlmTmVjZXNzYXJ5KGFyciwgc2hhbGxvdykge1xyXG4gICAgaWYgKCFzaGFsbG93KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBhcnIuY29uc3RydWN0b3IoYXJyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGFycjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgdHJhbnNmZXJhYmxlVXRpbDtcclxuIiwiLyoqXHJcbiAqIEBuYW1lIGNsYXkudmVyc2lvblxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgJzEuMi4zJztcclxuIiwiZXhwb3J0IGRlZmF1bHQgXCJAZXhwb3J0IGNsYXkudnIuZGlzb3J0ZXIub3V0cHV0LnZlcnRleFxcbmF0dHJpYnV0ZSB2ZWMyIHRleGNvb3JkOiBURVhDT09SRF8wO1xcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOiBQT1NJVElPTjtcXG52YXJ5aW5nIHZlYzIgdl9UZXhjb29yZDtcXG52b2lkIG1haW4oKVxcbntcXG4gdl9UZXhjb29yZCA9IHRleGNvb3JkO1xcbiBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24ueHksIDAuNSwgMS4wKTtcXG59XFxuQGVuZFxcbkBleHBvcnQgY2xheS52ci5kaXNvcnRlci5vdXRwdXQuZnJhZ21lbnRcXG51bmlmb3JtIHNhbXBsZXIyRCB0ZXh0dXJlO1xcbnZhcnlpbmcgdmVjMiB2X1RleGNvb3JkO1xcbnZvaWQgbWFpbigpXFxue1xcbiBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4dHVyZSwgdl9UZXhjb29yZCk7XFxufVxcbkBlbmRcIjtcclxuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZXZyL3dlYnZyLXBvbHlmaWxsL2Jsb2IvbWFzdGVyL3NyYy9jYXJkYm9hcmQtZGlzdG9ydGVyLmpzXHJcblxyXG4vLyBVc2Ugd2VidnIgbWF5IGhhdmUgc2NhbGUgcHJvYmxlbS5cclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZXZyL3dlYnZyLXBvbHlmaWxsL2lzc3Vlcy8xNDBcclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZXZyL3dlYnZyLXBvbHlmaWxsL3NlYXJjaD9xPVNDQUxFJnR5cGU9SXNzdWVzJnV0Zjg9JUUyJTlDJTkzXHJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGV2ci93ZWJ2ci1wb2x5ZmlsbC9pc3N1ZXMvMTQ3XHJcblxyXG5cclxuaW1wb3J0IE1lc2ggZnJvbSAnLi4vTWVzaCc7XHJcbmltcG9ydCBNYXRlcmlhbCBmcm9tICcuLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tICcuLi9HZW9tZXRyeSc7XHJcbmltcG9ydCBTaGFkZXIgZnJvbSAnLi4vU2hhZGVyJztcclxuaW1wb3J0IEJhc2UgZnJvbSAnLi4vY29yZS9CYXNlJztcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcblxyXG5pbXBvcnQgb3V0cHV0RXNzbCBmcm9tICcuL291dHB1dC5nbHNsLmpzJztcclxuXHJcblNoYWRlci5pbXBvcnQob3V0cHV0RXNzbCk7XHJcblxyXG5mdW5jdGlvbiBsZXJwIChhLCBiLCB0KSB7XHJcbiAgICByZXR1cm4gYSAqICgxIC0gdCkgKyBiICogdDtcclxufVxyXG5cclxudmFyIENhcmRib2FyZERpc3RvcnRlciA9IEJhc2UuZXh0ZW5kKGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB7XHJcblxyXG4gICAgICAgIGNsZWFyQ29sb3I6IFswLCAwLCAwLCAxXSxcclxuXHJcbiAgICAgICAgX21lc2g6IG5ldyBNZXNoKHtcclxuICAgICAgICAgICAgZ2VvbWV0cnk6IG5ldyBHZW9tZXRyeSh7XHJcbiAgICAgICAgICAgICAgICBkeW5hbWljOiB0cnVlXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBjdWxsaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgbWF0ZXJpYWw6IG5ldyBNYXRlcmlhbCh7XHJcbiAgICAgICAgICAgICAgICAvLyBGSVhNRSBXaHkgZGlzYWJsZSBkZXB0aE1hc2sgd2lsbCBiZSB3cm9uZ1xyXG4gICAgICAgICAgICAgICAgLy8gZGVwdGhNYXNrOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGRlcHRoVGVzdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzaGFkZXI6IG5ldyBTaGFkZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIHZlcnRleDogU2hhZGVyLnNvdXJjZSgnY2xheS52ci5kaXNvcnRlci5vdXRwdXQudmVydGV4JyksXHJcbiAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQ6IFNoYWRlci5zb3VyY2UoJ2NsYXkudnIuZGlzb3J0ZXIub3V0cHV0LmZyYWdtZW50JylcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgX2Zha2VDYW1lcmE6IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpXHJcbiAgICB9O1xyXG59LCB7XHJcblxyXG4gICAgcmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyZXIsIHNvdXJjZVRleHR1cmUpIHtcclxuICAgICAgICB2YXIgY2xlYXJDb2xvciA9IHRoaXMuY2xlYXJDb2xvcjtcclxuICAgICAgICB2YXIgZ2wgPSByZW5kZXJlci5nbDtcclxuICAgICAgICBnbC5jbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pO1xyXG4gICAgICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xyXG5cclxuICAgICAgICBnbC5kaXNhYmxlKGdsLkJMRU5EKTtcclxuXHJcbiAgICAgICAgdGhpcy5fbWVzaC5tYXRlcmlhbC5zZXQoJ3RleHR1cmUnLCBzb3VyY2VUZXh0dXJlKTtcclxuXHJcbiAgICAgICAgLy8gRnVsbCBzaXplP1xyXG4gICAgICAgIHJlbmRlcmVyLnNhdmVWaWV3cG9ydCgpO1xyXG4gICAgICAgIHJlbmRlcmVyLnNldFZpZXdwb3J0KDAsIDAsIHJlbmRlcmVyLmdldFdpZHRoKCksIHJlbmRlcmVyLmdldEhlaWdodCgpKTtcclxuICAgICAgICByZW5kZXJlci5yZW5kZXJQYXNzKFt0aGlzLl9tZXNoXSwgdGhpcy5fZmFrZUNhbWVyYSk7XHJcbiAgICAgICAgcmVuZGVyZXIucmVzdG9yZVZpZXdwb3J0KCk7XHJcbiAgICAgICAgLy8gdGhpcy5fbWVzaC5tYXRlcmlhbC5zaGFkZXIuYmluZChyZW5kZXJlcik7XHJcbiAgICAgICAgLy8gdGhpcy5fbWVzaC5tYXRlcmlhbC5iaW5kKHJlbmRlcmVyKTtcclxuICAgICAgICAvLyB0aGlzLl9tZXNoLnJlbmRlcihyZW5kZXJlci5nbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZUZyb21WUkRpc3BsYXk6IGZ1bmN0aW9uICh2ckRpc3BsYXkpIHtcclxuXHJcbiAgICAgICAgLy8gRklYTUVcclxuICAgICAgICBpZiAodnJEaXNwbGF5LmRldmljZUluZm9fKSB7XHJcbiAgICAgICAgICAgIC8vIEhhcmRjb2RlZCBtZXNoIHNpemVcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTWVzaCgyMCwgMjAsIHZyRGlzcGxheS5kZXZpY2VJbmZvXyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NhbnQgZ2V0IHZyRGlzcGxheS5kZXZpY2VJbmZvXywgc2VlbXMgY29kZSBjaGFuZ2VkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfdXBkYXRlTWVzaDogZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIGRldmljZUluZm8pIHtcclxuXHJcbiAgICAgICAgdmFyIHBvc2l0aW9uQXR0ciA9IHRoaXMuX21lc2guZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbjtcclxuICAgICAgICB2YXIgdGV4Y29vcmRBdHRyID0gdGhpcy5fbWVzaC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRleGNvb3JkMDtcclxuICAgICAgICBwb3NpdGlvbkF0dHIuaW5pdCgyICogd2lkdGggKiBoZWlnaHQpO1xyXG4gICAgICAgIHRleGNvb3JkQXR0ci5pbml0KDIgKiB3aWR0aCAqIGhlaWdodCk7XHJcblxyXG4gICAgICAgIHZhciBsZW5zRnJ1c3R1bSA9IGRldmljZUluZm8uZ2V0TGVmdEV5ZVZpc2libGVUYW5BbmdsZXMoKTtcclxuICAgICAgICB2YXIgbm9MZW5zRnJ1c3R1bSA9IGRldmljZUluZm8uZ2V0TGVmdEV5ZU5vTGVuc1RhbkFuZ2xlcygpO1xyXG4gICAgICAgIHZhciB2aWV3cG9ydCA9IGRldmljZUluZm8uZ2V0TGVmdEV5ZVZpc2libGVTY3JlZW5SZWN0KG5vTGVuc0ZydXN0dW0pO1xyXG4gICAgICAgIHZhciB2aWR4ID0gMDtcclxuXHJcbiAgICAgICAgdmFyIHBvcyA9IFtdO1xyXG4gICAgICAgIHZhciB1diA9IFtdO1xyXG5cclxuICAgICAgICAvLyBWZXJ0aWNlc1xyXG4gICAgICAgIGZvciAodmFyIGUgPSAwOyBlIDwgMjsgZSsrKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaGVpZ2h0OyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd2lkdGg7IGkrKywgdmlkeCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHUgPSBpIC8gKHdpZHRoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHYgPSBqIC8gKGhlaWdodCAtIDEpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBHcmlkIHBvaW50cyByZWd1bGFybHkgc3BhY2VkIGluIFN0cmVvU2NyZWVuLCBhbmQgYmFycmVsIGRpc3RvcnRlZCBpblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBtZXNoLlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzID0gdTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHggPSBsZXJwKGxlbnNGcnVzdHVtWzBdLCBsZW5zRnJ1c3R1bVsyXSwgdSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHkgPSBsZXJwKGxlbnNGcnVzdHVtWzNdLCBsZW5zRnJ1c3R1bVsxXSwgdik7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBkZXZpY2VJbmZvLmRpc3RvcnRpb24uZGlzdG9ydEludmVyc2UoZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSB4ICogciAvIGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSB5ICogciAvIGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdSA9IChwIC0gbm9MZW5zRnJ1c3R1bVswXSkgLyAobm9MZW5zRnJ1c3R1bVsyXSAtIG5vTGVuc0ZydXN0dW1bMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAocSAtIG5vTGVuc0ZydXN0dW1bM10pIC8gKG5vTGVuc0ZydXN0dW1bMV0gLSBub0xlbnNGcnVzdHVtWzNdKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB1LHYgdG8gbWVzaCBzY3JlZW4gY29vcmRpbmF0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFzcGVjdCA9IGRldmljZUluZm8uZGV2aWNlLndpZHRoTWV0ZXJzIC8gZGV2aWNlSW5mby5kZXZpY2UuaGVpZ2h0TWV0ZXJzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIG9yaWdpbmFsIFVuaXR5IHBsdWdpbiBtdWx0aXBsaWVkIFUgYnkgdGhlIGFzcGVjdCByYXRpb1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFuZCBkaWRuJ3QgbXVsdGlwbHkgZWl0aGVyIHZhbHVlIGJ5IDIsIGJ1dCB0aGF0IHNlZW1zIHRvIGdldCBpdFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlYWxseSBjbG9zZSB0byBjb3JyZWN0IGxvb2tpbmcgZm9yIG1lLiBJIGhhdGUgdGhpcyBraW5kIG9mIFwiRG9uJ3RcclxuICAgICAgICAgICAgICAgICAgICAvLyBrbm93IHdoeSBpdCB3b3Jrc1wiIGNvZGUgdGhvdWdoLCBhbmQgd29sZCBsb3ZlIGEgbW9yZSBsb2dpY2FsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZXhwbGFuYXRpb24gb2Ygd2hhdCBuZWVkcyB0byBoYXBwZW4gaGVyZS5cclxuICAgICAgICAgICAgICAgICAgICB1ID0gKHZpZXdwb3J0LnggKyB1ICogdmlld3BvcnQud2lkdGggLSAwLjUpICogMi4wOyAvLyogYXNwZWN0O1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAodmlld3BvcnQueSArIHYgKiB2aWV3cG9ydC5oZWlnaHQgLSAwLjUpICogMi4wO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBwb3NbMF0gPSB1O1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc1sxXSA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zWzJdID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdXZbMF0gPSBzICogMC41ICsgZSAqIDAuNTtcclxuICAgICAgICAgICAgICAgICAgICB1dlsxXSA9IHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uQXR0ci5zZXQodmlkeCwgcG9zKTtcclxuICAgICAgICAgICAgICAgICAgICB0ZXhjb29yZEF0dHIuc2V0KHZpZHgsIHV2KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHcgPSBsZW5zRnJ1c3R1bVsyXSAtIGxlbnNGcnVzdHVtWzBdO1xyXG4gICAgICAgICAgICBsZW5zRnJ1c3R1bVswXSA9IC0odyArIGxlbnNGcnVzdHVtWzBdKTtcclxuICAgICAgICAgICAgbGVuc0ZydXN0dW1bMl0gPSB3IC0gbGVuc0ZydXN0dW1bMl07XHJcbiAgICAgICAgICAgIHcgPSBub0xlbnNGcnVzdHVtWzJdIC0gbm9MZW5zRnJ1c3R1bVswXTtcclxuICAgICAgICAgICAgbm9MZW5zRnJ1c3R1bVswXSA9IC0odyArIG5vTGVuc0ZydXN0dW1bMF0pO1xyXG4gICAgICAgICAgICBub0xlbnNGcnVzdHVtWzJdID0gdyAtIG5vTGVuc0ZydXN0dW1bMl07XHJcbiAgICAgICAgICAgIHZpZXdwb3J0LnggPSAxIC0gKHZpZXdwb3J0LnggKyB2aWV3cG9ydC53aWR0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJbmRpY2VzXHJcbiAgICAgICAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXkoMiAqICh3aWR0aCAtIDEpICogKGhlaWdodCAtIDEpICogNik7XHJcbiAgICAgICAgdmFyIGhhbGZ3aWR0aCA9IHdpZHRoIC8gMjtcclxuICAgICAgICB2YXIgaGFsZmhlaWdodCA9IGhlaWdodCAvIDI7XHJcbiAgICAgICAgdmFyIHZpZHggPSAwO1xyXG4gICAgICAgIHZhciBpaWR4ID0gMDtcclxuICAgICAgICBmb3IgKHZhciBlID0gMDsgZSA8IDI7IGUrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGhlaWdodDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdpZHRoOyBpKyssIHZpZHgrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwIHx8IGogPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEJ1aWxkIGEgcXVhZC4gIExvd2VyIHJpZ2h0IGFuZCB1cHBlciBsZWZ0IHF1YWRyYW50cyBoYXZlIHF1YWRzIHdpdGhcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgdHJpYW5nbGUgZGlhZ29uYWwgZmxpcHBlZCB0byBnZXQgdGhlIHZpZ25ldHRlIHRvIGludGVycG9sYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVjdGx5LlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoaSA8PSBoYWxmd2lkdGgpID09IChqIDw9IGhhbGZoZWlnaHQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFF1YWQgZGlhZ29uYWwgbG93ZXIgbGVmdCB0byB1cHBlciByaWdodC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gd2lkdGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFF1YWQgZGlhZ29uYWwgdXBwZXIgbGVmdCB0byBsb3dlciByaWdodC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXNbaWlkeCsrXSA9IHZpZHggLSB3aWR0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2VzW2lpZHgrK10gPSB2aWR4IC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc1tpaWR4KytdID0gdmlkeCAtIHdpZHRoIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX21lc2guZ2VvbWV0cnkuaW5kaWNlcyA9IGluZGljZXM7XHJcblxyXG4gICAgICAgIHRoaXMuX21lc2guZ2VvbWV0cnkuZGlydHkoKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDYXJkYm9hcmREaXN0b3J0ZXI7XHJcbiIsImltcG9ydCBCYXNlIGZyb20gJy4uL05vZGUnO1xyXG5pbXBvcnQgQ2FtZXJhIGZyb20gJy4uL2NhbWVyYS9QZXJzcGVjdGl2ZSc7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gJy4uL21hdGgvTWF0cml4NCc7XHJcblxyXG52YXIgdG1wUHJvamVjdGlvbk1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG52YXIgU3RlcmVvQ2FtZXJhID0gQmFzZS5leHRlbmQoZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuXHJcbiAgICAgICAgYXNwZWN0OiAwLjUsXHJcblxyXG4gICAgICAgIF9sZWZ0Q2FtZXJhOiBuZXcgQ2FtZXJhKCksXHJcblxyXG4gICAgICAgIF9yaWdodENhbWVyYTogbmV3IENhbWVyYSgpLFxyXG5cclxuICAgICAgICBfZXllTGVmdDogbmV3IE1hdHJpeDQoKSxcclxuICAgICAgICBfZXllUmlnaHQ6IG5ldyBNYXRyaXg0KCksXHJcblxyXG4gICAgICAgIF9mcmFtZURhdGE6IG51bGxcclxuICAgIH07XHJcbn0sIHtcclxuXHJcbiAgICB1cGRhdGVGcm9tQ2FtZXJhOiBmdW5jdGlvbiAoY2FtZXJhLCBmb2N1cywgem9vbSwgZXllU2VwKSB7XHJcbiAgICAgICAgaWYgKGNhbWVyYS50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignTm9kZSB0cmFuc2Zvcm0gaXMgbm90IHVwZGF0ZWQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvY3VzID0gZm9jdXMgPT0gbnVsbCA/IDEwIDogZm9jdXM7XHJcbiAgICAgICAgem9vbSA9IHpvb20gPT0gbnVsbCA/IDEgOiB6b29tO1xyXG4gICAgICAgIGV5ZVNlcCA9IGV5ZVNlcCA9PSBudWxsID8gMC4wNjQgOiBleWVTZXA7XHJcblxyXG4gICAgICAgIHZhciBmb3YgPSBjYW1lcmEuZm92O1xyXG4gICAgICAgIHZhciBhc3BlY3QgPSBjYW1lcmEuYXNwZWN0ICogdGhpcy5hc3BlY3Q7XHJcbiAgICAgICAgdmFyIG5lYXIgPSBjYW1lcmEubmVhcjtcclxuXHJcbiAgICAgICAgLy8gT2ZmLWF4aXMgc3RlcmVvc2NvcGljIGVmZmVjdCBiYXNlZCBvblxyXG4gICAgICAgIC8vIGh0dHA6Ly9wYXVsYm91cmtlLm5ldC9zdGVyZW9ncmFwaGljcy9zdGVyZW9yZW5kZXIvXHJcblxyXG4gICAgICAgIHRtcFByb2plY3Rpb25NYXRyaXguY29weShjYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgdmFyIGV5ZVNlcCA9IGV5ZVNlcCAvIDI7XHJcbiAgICAgICAgdmFyIGV5ZVNlcE9uUHJvamVjdGlvbiA9IGV5ZVNlcCAqIG5lYXIgLyBmb2N1cztcclxuICAgICAgICB2YXIgeW1heCA9IChuZWFyICogTWF0aC50YW4oTWF0aC5QSSAvIDE4MCAqIGZvdiAqIDAuNSApICkgLyB6b29tO1xyXG4gICAgICAgIHZhciB4bWluLCB4bWF4O1xyXG5cclxuICAgICAgICAvLyB0cmFuc2xhdGUgeE9mZnNldFxyXG4gICAgICAgIHRoaXMuX2V5ZUxlZnQuYXJyYXlbMTJdID0gLSBleWVTZXA7XHJcbiAgICAgICAgdGhpcy5fZXllUmlnaHQuYXJyYXlbMTJdID0gZXllU2VwO1xyXG5cclxuICAgICAgICAvLyBmb3IgbGVmdCBleWVcclxuICAgICAgICB4bWluID0gLSB5bWF4ICogYXNwZWN0ICsgZXllU2VwT25Qcm9qZWN0aW9uO1xyXG4gICAgICAgIHhtYXggPSB5bWF4ICogYXNwZWN0ICsgZXllU2VwT25Qcm9qZWN0aW9uO1xyXG5cclxuICAgICAgICB0bXBQcm9qZWN0aW9uTWF0cml4LmFycmF5WzBdID0gMiAqIG5lYXIgLyAoeG1heCAtIHhtaW4pO1xyXG4gICAgICAgIHRtcFByb2plY3Rpb25NYXRyaXguYXJyYXlbOF0gPSAoeG1heCArIHhtaW4gKSAvICh4bWF4IC0geG1pbik7XHJcblxyXG4gICAgICAgIHRoaXMuX2xlZnRDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5jb3B5KHRtcFByb2plY3Rpb25NYXRyaXgpO1xyXG5cclxuICAgICAgICAvLyBmb3IgcmlnaHQgZXllXHJcbiAgICAgICAgeG1pbiA9IC0geW1heCAqIGFzcGVjdCAtIGV5ZVNlcE9uUHJvamVjdGlvbjtcclxuICAgICAgICB4bWF4ID0geW1heCAqIGFzcGVjdCAtIGV5ZVNlcE9uUHJvamVjdGlvbjtcclxuXHJcbiAgICAgICAgdG1wUHJvamVjdGlvbk1hdHJpeC5hcnJheVswXSA9IDIgKiBuZWFyIC8gKHhtYXggLSB4bWluKTtcclxuICAgICAgICB0bXBQcm9qZWN0aW9uTWF0cml4LmFycmF5WzhdID0gKHhtYXggKyB4bWluICkgLyAoeG1heCAtIHhtaW4pO1xyXG5cclxuICAgICAgICB0aGlzLl9yaWdodENhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmNvcHkodG1wUHJvamVjdGlvbk1hdHJpeCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2xlZnRDYW1lcmEud29ybGRUcmFuc2Zvcm1cclxuICAgICAgICAgICAgLmNvcHkoY2FtZXJhLndvcmxkVHJhbnNmb3JtKVxyXG4gICAgICAgICAgICAubXVsdGlwbHkodGhpcy5fZXllTGVmdCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JpZ2h0Q2FtZXJhLndvcmxkVHJhbnNmb3JtXHJcbiAgICAgICAgICAgIC5jb3B5KGNhbWVyYS53b3JsZFRyYW5zZm9ybSlcclxuICAgICAgICAgICAgLm11bHRpcGx5KHRoaXMuX2V5ZVJpZ2h0KTtcclxuXHJcbiAgICAgICAgdGhpcy5fbGVmdENhbWVyYS5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgICAgIHRoaXMuX2xlZnRDYW1lcmEuZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG5cclxuICAgICAgICB0aGlzLl9yaWdodENhbWVyYS5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgICAgIHRoaXMuX3JpZ2h0Q2FtZXJhLmRlY29tcG9zZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlRnJvbVZSRGlzcGxheTogZnVuY3Rpb24gKHZyRGlzcGxheSwgcGFyZW50Tm9kZSkge1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIFZSRnJhbWVEYXRhID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZnJhbWVEYXRhID0gdGhpcy5fZnJhbWVEYXRhIHx8ICh0aGlzLl9mcmFtZURhdGEgPSBuZXcgVlJGcmFtZURhdGEoKSk7XHJcbiAgICAgICAgdnJEaXNwbGF5LmdldEZyYW1lRGF0YShmcmFtZURhdGEpO1xyXG4gICAgICAgIHZhciBsZWZ0Q2FtZXJhID0gdGhpcy5fbGVmdENhbWVyYTtcclxuICAgICAgICB2YXIgcmlnaHRDYW1lcmEgPSB0aGlzLl9yaWdodENhbWVyYTtcclxuXHJcbiAgICAgICAgbGVmdENhbWVyYS5wcm9qZWN0aW9uTWF0cml4LnNldEFycmF5KGZyYW1lRGF0YS5sZWZ0UHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgbGVmdENhbWVyYS5kZWNvbXBvc2VQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgbGVmdENhbWVyYS52aWV3TWF0cml4LnNldEFycmF5KGZyYW1lRGF0YS5sZWZ0Vmlld01hdHJpeCk7XHJcbiAgICAgICAgbGVmdENhbWVyYS5zZXRWaWV3TWF0cml4KGxlZnRDYW1lcmEudmlld01hdHJpeCk7XHJcblxyXG4gICAgICAgIHJpZ2h0Q2FtZXJhLnByb2plY3Rpb25NYXRyaXguc2V0QXJyYXkoZnJhbWVEYXRhLnJpZ2h0UHJvamVjdGlvbk1hdHJpeCk7XHJcbiAgICAgICAgcmlnaHRDYW1lcmEuZGVjb21wb3NlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgICAgIHJpZ2h0Q2FtZXJhLnZpZXdNYXRyaXguc2V0QXJyYXkoZnJhbWVEYXRhLnJpZ2h0Vmlld01hdHJpeCk7XHJcbiAgICAgICAgcmlnaHRDYW1lcmEuc2V0Vmlld01hdHJpeChyaWdodENhbWVyYS52aWV3TWF0cml4KTtcclxuXHJcbiAgICAgICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS53b3JsZFRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZS50cmFuc2Zvcm1OZWVkc1VwZGF0ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ05vZGUgdHJhbnNmb3JtIGlzIG5vdCB1cGRhdGVkJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGVmdENhbWVyYS53b3JsZFRyYW5zZm9ybS5tdWx0aXBseUxlZnQocGFyZW50Tm9kZS53b3JsZFRyYW5zZm9ybSk7XHJcbiAgICAgICAgICAgIGxlZnRDYW1lcmEuZGVjb21wb3NlV29ybGRUcmFuc2Zvcm0oKTtcclxuICAgICAgICAgICAgcmlnaHRDYW1lcmEud29ybGRUcmFuc2Zvcm0ubXVsdGlwbHlMZWZ0KHBhcmVudE5vZGUud29ybGRUcmFuc2Zvcm0pO1xyXG4gICAgICAgICAgICByaWdodENhbWVyYS5kZWNvbXBvc2VXb3JsZFRyYW5zZm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TGVmdENhbWVyYTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sZWZ0Q2FtZXJhO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRSaWdodENhbWVyYTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yaWdodENhbWVyYTtcclxuICAgIH1cclxufSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTdGVyZW9DYW1lcmE7XHJcbiIsIi8qKiBAbmFtZXNwYWNlIGNsYXkgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5tYXRoICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkuYW5pbWF0aW9uICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkuYXN5bmMgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5jYW1lcmEgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5jb21wb3NpdG9yICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkuY29yZSAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5Lmdlb21ldHJ5ICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkuaGVscGVyICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkubGlnaHQgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5sb2FkZXIgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5wYXJ0aWNsZSAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LnBsdWdpbiAqL1xyXG4vKiogQG5hbWVzcGFjZSBjbGF5LnByZVBhc3MgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS5zaGFkZXIgKi9cclxuLyoqIEBuYW1lc3BhY2UgY2xheS50ZXh0dXJlICovXHJcbi8qKiBAbmFtZXNwYWNlIGNsYXkudXRpbCAqL1xyXG5cclxuaW1wb3J0IEFuaW1hdG9yJDAgZnJvbSAnLi9hbmltYXRpb24vQW5pbWF0b3InO1xyXG5pbXBvcnQgQmxlbmQxRENsaXAkMSBmcm9tICcuL2FuaW1hdGlvbi9CbGVuZDFEQ2xpcCc7XHJcbmltcG9ydCBCbGVuZDJEQ2xpcCQyIGZyb20gJy4vYW5pbWF0aW9uL0JsZW5kMkRDbGlwJztcclxuaW1wb3J0IENsaXAkMyBmcm9tICcuL2FuaW1hdGlvbi9DbGlwJztcclxuaW1wb3J0IGVhc2luZyQ0IGZyb20gJy4vYW5pbWF0aW9uL2Vhc2luZyc7XHJcbmltcG9ydCBTYW1wbGVyVHJhY2skNSBmcm9tICcuL2FuaW1hdGlvbi9TYW1wbGVyVHJhY2snO1xyXG5pbXBvcnQgVGltZWxpbmUkNiBmcm9tICcuL2FuaW1hdGlvbi9UaW1lbGluZSc7XHJcbmltcG9ydCBUcmFja0NsaXAkNyBmcm9tICcuL2FuaW1hdGlvbi9UcmFja0NsaXAnO1xyXG5pbXBvcnQgYXBwbGljYXRpb24kOCBmcm9tICcuL2FwcGxpY2F0aW9uJztcclxuaW1wb3J0IFRhc2skOSBmcm9tICcuL2FzeW5jL1Rhc2snO1xyXG5pbXBvcnQgVGFza0dyb3VwJDEwIGZyb20gJy4vYXN5bmMvVGFza0dyb3VwJztcclxuaW1wb3J0IENhbWVyYSQxMSBmcm9tICcuL0NhbWVyYSc7XHJcbmltcG9ydCBPcnRob2dyYXBoaWMkMTIgZnJvbSAnLi9jYW1lcmEvT3J0aG9ncmFwaGljJztcclxuaW1wb3J0IFBlcnNwZWN0aXZlJDEzIGZyb20gJy4vY2FtZXJhL1BlcnNwZWN0aXZlJztcclxuaW1wb3J0IENvbXBvc2l0b3IkMTQgZnJvbSAnLi9jb21wb3NpdG9yL0NvbXBvc2l0b3InO1xyXG5pbXBvcnQgQ29tcG9zaXRvck5vZGUkMTUgZnJvbSAnLi9jb21wb3NpdG9yL0NvbXBvc2l0b3JOb2RlJztcclxuaW1wb3J0IGNyZWF0ZUNvbXBvc2l0b3IkMTYgZnJvbSAnLi9jb21wb3NpdG9yL2NyZWF0ZUNvbXBvc2l0b3InO1xyXG5pbXBvcnQgRmlsdGVyTm9kZSQxNyBmcm9tICcuL2NvbXBvc2l0b3IvRmlsdGVyTm9kZSc7XHJcbmltcG9ydCBHcmFwaCQxOCBmcm9tICcuL2NvbXBvc2l0b3IvR3JhcGgnO1xyXG5pbXBvcnQgUGFzcyQxOSBmcm9tICcuL2NvbXBvc2l0b3IvUGFzcyc7XHJcbmltcG9ydCBTY2VuZU5vZGUkMjAgZnJvbSAnLi9jb21wb3NpdG9yL1NjZW5lTm9kZSc7XHJcbmltcG9ydCBUZXh0dXJlTm9kZSQyMSBmcm9tICcuL2NvbXBvc2l0b3IvVGV4dHVyZU5vZGUnO1xyXG5pbXBvcnQgVGV4dHVyZVBvb2wkMjIgZnJvbSAnLi9jb21wb3NpdG9yL1RleHR1cmVQb29sJztcclxuaW1wb3J0IEJhc2UkMjMgZnJvbSAnLi9jb3JlL0Jhc2UnO1xyXG5pbXBvcnQgQ2FjaGUkMjQgZnJvbSAnLi9jb3JlL0NhY2hlJztcclxuaW1wb3J0IGNvbG9yJDI1IGZyb20gJy4vY29yZS9jb2xvcic7XHJcbmltcG9ydCBnbGVudW0kMjYgZnJvbSAnLi9jb3JlL2dsZW51bSc7XHJcbmltcG9ydCBHTEluZm8kMjcgZnJvbSAnLi9jb3JlL0dMSW5mbyc7XHJcbmltcG9ydCBMaW5rZWRMaXN0JDI4IGZyb20gJy4vY29yZS9MaW5rZWRMaXN0JztcclxuaW1wb3J0IExSVSQyOSBmcm9tICcuL2NvcmUvTFJVJztcclxuaW1wb3J0IGV4dGVuZCQzMCBmcm9tICcuL2NvcmUvbWl4aW4vZXh0ZW5kJztcclxuaW1wb3J0IG5vdGlmaWVyJDMxIGZyb20gJy4vY29yZS9taXhpbi9ub3RpZmllcic7XHJcbmltcG9ydCByZXF1ZXN0JDMyIGZyb20gJy4vY29yZS9yZXF1ZXN0JztcclxuaW1wb3J0IHV0aWwkMzMgZnJvbSAnLi9jb3JlL3V0aWwnO1xyXG5pbXBvcnQgdmVuZG9yJDM0IGZyb20gJy4vY29yZS92ZW5kb3InO1xyXG5pbXBvcnQgY3JlYXRlQ29tcG9zaXRvciQzNSBmcm9tICcuL2NyZWF0ZUNvbXBvc2l0b3InO1xyXG5pbXBvcnQgR0J1ZmZlciQzNiBmcm9tICcuL2RlZmVycmVkL0dCdWZmZXInO1xyXG5pbXBvcnQgUmVuZGVyZXIkMzcgZnJvbSAnLi9kZWZlcnJlZC9SZW5kZXJlcic7XHJcbmltcG9ydCBnbG1hdHJpeCQzOCBmcm9tICcuL2RlcC9nbG1hdHJpeCc7XHJcbmltcG9ydCBGcmFtZUJ1ZmZlciQzOSBmcm9tICcuL0ZyYW1lQnVmZmVyJztcclxuaW1wb3J0IEdlb21ldHJ5JDQwIGZyb20gJy4vR2VvbWV0cnknO1xyXG5pbXBvcnQgQ29uZSQ0MSBmcm9tICcuL2dlb21ldHJ5L0NvbmUnO1xyXG5pbXBvcnQgQ3ViZSQ0MiBmcm9tICcuL2dlb21ldHJ5L0N1YmUnO1xyXG5pbXBvcnQgQ3lsaW5kZXIkNDMgZnJvbSAnLi9nZW9tZXRyeS9DeWxpbmRlcic7XHJcbmltcG9ydCBQYXJhbWV0cmljU3VyZmFjZSQ0NCBmcm9tICcuL2dlb21ldHJ5L1BhcmFtZXRyaWNTdXJmYWNlJztcclxuaW1wb3J0IFBsYW5lJDQ1IGZyb20gJy4vZ2VvbWV0cnkvUGxhbmUnO1xyXG5pbXBvcnQgU3BoZXJlJDQ2IGZyb20gJy4vZ2VvbWV0cnkvU3BoZXJlJztcclxuaW1wb3J0IEdlb21ldHJ5QmFzZSQ0NyBmcm9tICcuL0dlb21ldHJ5QmFzZSc7XHJcbmltcG9ydCBKb2ludCQ0OCBmcm9tICcuL0pvaW50JztcclxuaW1wb3J0IExpZ2h0JDQ5IGZyb20gJy4vTGlnaHQnO1xyXG5pbXBvcnQgQW1iaWVudCQ1MCBmcm9tICcuL2xpZ2h0L0FtYmllbnQnO1xyXG5pbXBvcnQgQW1iaWVudEN1YmVtYXAkNTEgZnJvbSAnLi9saWdodC9BbWJpZW50Q3ViZW1hcCc7XHJcbmltcG9ydCBBbWJpZW50U0gkNTIgZnJvbSAnLi9saWdodC9BbWJpZW50U0gnO1xyXG5pbXBvcnQgRGlyZWN0aW9uYWwkNTMgZnJvbSAnLi9saWdodC9EaXJlY3Rpb25hbCc7XHJcbmltcG9ydCBQb2ludCQ1NCBmcm9tICcuL2xpZ2h0L1BvaW50JztcclxuaW1wb3J0IFNwaGVyZSQ1NSBmcm9tICcuL2xpZ2h0L1NwaGVyZSc7XHJcbmltcG9ydCBTcG90JDU2IGZyb20gJy4vbGlnaHQvU3BvdCc7XHJcbmltcG9ydCBUdWJlJDU3IGZyb20gJy4vbGlnaHQvVHViZSc7XHJcbmltcG9ydCBGWCQ1OCBmcm9tICcuL2xvYWRlci9GWCc7XHJcbmltcG9ydCBHTFRGJDU5IGZyb20gJy4vbG9hZGVyL0dMVEYnO1xyXG5pbXBvcnQgTWF0ZXJpYWwkNjAgZnJvbSAnLi9NYXRlcmlhbCc7XHJcbmltcG9ydCBCb3VuZGluZ0JveCQ2MSBmcm9tICcuL21hdGgvQm91bmRpbmdCb3gnO1xyXG5pbXBvcnQgRnJ1c3R1bSQ2MiBmcm9tICcuL21hdGgvRnJ1c3R1bSc7XHJcbmltcG9ydCBNYXRyaXgyJDYzIGZyb20gJy4vbWF0aC9NYXRyaXgyJztcclxuaW1wb3J0IE1hdHJpeDJkJDY0IGZyb20gJy4vbWF0aC9NYXRyaXgyZCc7XHJcbmltcG9ydCBNYXRyaXgzJDY1IGZyb20gJy4vbWF0aC9NYXRyaXgzJztcclxuaW1wb3J0IE1hdHJpeDQkNjYgZnJvbSAnLi9tYXRoL01hdHJpeDQnO1xyXG5pbXBvcnQgUGxhbmUkNjcgZnJvbSAnLi9tYXRoL1BsYW5lJztcclxuaW1wb3J0IFF1YXRlcm5pb24kNjggZnJvbSAnLi9tYXRoL1F1YXRlcm5pb24nO1xyXG5pbXBvcnQgUmF5JDY5IGZyb20gJy4vbWF0aC9SYXknO1xyXG5pbXBvcnQgdXRpbCQ3MCBmcm9tICcuL21hdGgvdXRpbCc7XHJcbmltcG9ydCBWYWx1ZSQ3MSBmcm9tICcuL21hdGgvVmFsdWUnO1xyXG5pbXBvcnQgVmVjdG9yMiQ3MiBmcm9tICcuL21hdGgvVmVjdG9yMic7XHJcbmltcG9ydCBWZWN0b3IzJDczIGZyb20gJy4vbWF0aC9WZWN0b3IzJztcclxuaW1wb3J0IFZlY3RvcjQkNzQgZnJvbSAnLi9tYXRoL1ZlY3RvcjQnO1xyXG5pbXBvcnQgTWVzaCQ3NSBmcm9tICcuL01lc2gnO1xyXG5pbXBvcnQgTm9kZSQ3NiBmcm9tICcuL05vZGUnO1xyXG5pbXBvcnQgRW1pdHRlciQ3NyBmcm9tICcuL3BhcnRpY2xlL0VtaXR0ZXInO1xyXG5pbXBvcnQgRmllbGQkNzggZnJvbSAnLi9wYXJ0aWNsZS9GaWVsZCc7XHJcbmltcG9ydCBGb3JjZUZpZWxkJDc5IGZyb20gJy4vcGFydGljbGUvRm9yY2VGaWVsZCc7XHJcbmltcG9ydCBQYXJ0aWNsZSQ4MCBmcm9tICcuL3BhcnRpY2xlL1BhcnRpY2xlJztcclxuaW1wb3J0IFBhcnRpY2xlUmVuZGVyYWJsZSQ4MSBmcm9tICcuL3BhcnRpY2xlL1BhcnRpY2xlUmVuZGVyYWJsZSc7XHJcbmltcG9ydCBQaXhlbFBpY2tpbmckODIgZnJvbSAnLi9waWNraW5nL1BpeGVsUGlja2luZyc7XHJcbmltcG9ydCBSYXlQaWNraW5nJDgzIGZyb20gJy4vcGlja2luZy9SYXlQaWNraW5nJztcclxuaW1wb3J0IEZyZWVDb250cm9sJDg0IGZyb20gJy4vcGx1Z2luL0ZyZWVDb250cm9sJztcclxuaW1wb3J0IEdhbWVwYWRDb250cm9sJDg1IGZyb20gJy4vcGx1Z2luL0dhbWVwYWRDb250cm9sJztcclxuaW1wb3J0IEdlc3R1cmVNZ3IkODYgZnJvbSAnLi9wbHVnaW4vR2VzdHVyZU1ncic7XHJcbmltcG9ydCBJbmZpbml0ZVBsYW5lJDg3IGZyb20gJy4vcGx1Z2luL0luZmluaXRlUGxhbmUnO1xyXG5pbXBvcnQgT3JiaXRDb250cm9sJDg4IGZyb20gJy4vcGx1Z2luL09yYml0Q29udHJvbCc7XHJcbmltcG9ydCBTa3lib3gkODkgZnJvbSAnLi9wbHVnaW4vU2t5Ym94JztcclxuaW1wb3J0IFNreWRvbWUkOTAgZnJvbSAnLi9wbHVnaW4vU2t5ZG9tZSc7XHJcbmltcG9ydCBFbnZpcm9ubWVudE1hcCQ5MSBmcm9tICcuL3ByZVBhc3MvRW52aXJvbm1lbnRNYXAnO1xyXG5pbXBvcnQgU2hhZG93TWFwJDkyIGZyb20gJy4vcHJlUGFzcy9TaGFkb3dNYXAnO1xyXG5pbXBvcnQgUmVuZGVyYWJsZSQ5MyBmcm9tICcuL1JlbmRlcmFibGUnO1xyXG5pbXBvcnQgUmVuZGVyZXIkOTQgZnJvbSAnLi9SZW5kZXJlcic7XHJcbmltcG9ydCBTY2VuZSQ5NSBmcm9tICcuL1NjZW5lJztcclxuaW1wb3J0IFNoYWRlciQ5NiBmcm9tICcuL1NoYWRlcic7XHJcbmltcG9ydCBsaWJyYXJ5JDk3IGZyb20gJy4vc2hhZGVyL2xpYnJhcnknO1xyXG5pbXBvcnQgcmVnaXN0ZXJCdWlsdGluQ29tcG9zaXRvciQ5OCBmcm9tICcuL3NoYWRlci9yZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yJztcclxuaW1wb3J0IGxpZ2h0JDk5IGZyb20gJy4vc2hhZGVyL3NvdXJjZS9oZWFkZXIvbGlnaHQnO1xyXG5pbXBvcnQgU2tlbGV0b24kMTAwIGZyb20gJy4vU2tlbGV0b24nO1xyXG5pbXBvcnQgU3RhbmRhcmRNYXRlcmlhbCQxMDEgZnJvbSAnLi9TdGFuZGFyZE1hdGVyaWFsJztcclxuaW1wb3J0IFN0YXRpY0dlb21ldHJ5JDEwMiBmcm9tICcuL1N0YXRpY0dlb21ldHJ5JztcclxuaW1wb3J0IFRleHR1cmUkMTAzIGZyb20gJy4vVGV4dHVyZSc7XHJcbmltcG9ydCBUZXh0dXJlMkQkMTA0IGZyb20gJy4vVGV4dHVyZTJEJztcclxuaW1wb3J0IFRleHR1cmVDdWJlJDEwNSBmcm9tICcuL1RleHR1cmVDdWJlJztcclxuaW1wb3J0IFRpbWVsaW5lJDEwNiBmcm9tICcuL1RpbWVsaW5lJztcclxuaW1wb3J0IGN1YmVtYXAkMTA3IGZyb20gJy4vdXRpbC9jdWJlbWFwJztcclxuaW1wb3J0IGRkcyQxMDggZnJvbSAnLi91dGlsL2Rkcyc7XHJcbmltcG9ydCBkZWxhdW5heSQxMDkgZnJvbSAnLi91dGlsL2RlbGF1bmF5JztcclxuaW1wb3J0IGhkciQxMTAgZnJvbSAnLi91dGlsL2hkcic7XHJcbmltcG9ydCBtZXNoJDExMSBmcm9tICcuL3V0aWwvbWVzaCc7XHJcbmltcG9ydCBzaCQxMTIgZnJvbSAnLi91dGlsL3NoJztcclxuaW1wb3J0IHRleHR1cmUkMTEzIGZyb20gJy4vdXRpbC90ZXh0dXJlJztcclxuaW1wb3J0IHRyYW5zZmVyYWJsZSQxMTQgZnJvbSAnLi91dGlsL3RyYW5zZmVyYWJsZSc7XHJcbmltcG9ydCB2ZXJzaW9uJDExNSBmcm9tICcuL3ZlcnNpb24nO1xyXG5pbXBvcnQgQ2FyZGJvYXJkRGlzdG9ydGVyJDExNiBmcm9tICcuL3ZyL0NhcmRib2FyZERpc3RvcnRlcic7XHJcbmltcG9ydCBTdGVyZW9DYW1lcmEkMTE3IGZyb20gJy4vdnIvU3RlcmVvQ2FtZXJhJztcclxuXHJcblxyXG52YXIgYW5pbWF0aW9uID0ge1xyXG4gICAgQW5pbWF0b3IgOiBBbmltYXRvciQwLFxyXG4gICAgQmxlbmQxRENsaXAgOiBCbGVuZDFEQ2xpcCQxLFxyXG4gICAgQmxlbmQyRENsaXAgOiBCbGVuZDJEQ2xpcCQyLFxyXG4gICAgQ2xpcCA6IENsaXAkMyxcclxuICAgIGVhc2luZyA6IGVhc2luZyQ0LFxyXG4gICAgU2FtcGxlclRyYWNrIDogU2FtcGxlclRyYWNrJDUsXHJcbiAgICBUaW1lbGluZSA6IFRpbWVsaW5lJDYsXHJcbiAgICBUcmFja0NsaXAgOiBUcmFja0NsaXAkN1xyXG59O1xyXG5leHBvcnQgeyBhbmltYXRpb24gfTtcclxuXHJcbmV4cG9ydCB7IGFwcGxpY2F0aW9uJDggYXMgYXBwbGljYXRpb24gfTtcclxuXHJcbnZhciBhc3luYyA9IHtcclxuICAgIFRhc2sgOiBUYXNrJDksXHJcbiAgICBUYXNrR3JvdXAgOiBUYXNrR3JvdXAkMTBcclxufTtcclxuZXhwb3J0IHsgYXN5bmMgfTtcclxuXHJcbmV4cG9ydCB7IENhbWVyYSQxMSBhcyBDYW1lcmEgfTtcclxuXHJcbnZhciBjYW1lcmEgPSB7XHJcbiAgICBPcnRob2dyYXBoaWMgOiBPcnRob2dyYXBoaWMkMTIsXHJcbiAgICBQZXJzcGVjdGl2ZSA6IFBlcnNwZWN0aXZlJDEzXHJcbn07XHJcbmV4cG9ydCB7IGNhbWVyYSB9O1xyXG5cclxuXHJcbnZhciBjb21wb3NpdG9yID0ge1xyXG4gICAgQ29tcG9zaXRvciA6IENvbXBvc2l0b3IkMTQsXHJcbiAgICBDb21wb3NpdG9yTm9kZSA6IENvbXBvc2l0b3JOb2RlJDE1LFxyXG4gICAgY3JlYXRlQ29tcG9zaXRvciA6IGNyZWF0ZUNvbXBvc2l0b3IkMTYsXHJcbiAgICBGaWx0ZXJOb2RlIDogRmlsdGVyTm9kZSQxNyxcclxuICAgIEdyYXBoIDogR3JhcGgkMTgsXHJcbiAgICBQYXNzIDogUGFzcyQxOSxcclxuICAgIFNjZW5lTm9kZSA6IFNjZW5lTm9kZSQyMCxcclxuICAgIFRleHR1cmVOb2RlIDogVGV4dHVyZU5vZGUkMjEsXHJcbiAgICBUZXh0dXJlUG9vbCA6IFRleHR1cmVQb29sJDIyXHJcbn07XHJcbmV4cG9ydCB7IGNvbXBvc2l0b3IgfTtcclxuXHJcblxyXG52YXIgY29yZSA9IHtcclxuICAgIEJhc2UgOiBCYXNlJDIzLFxyXG4gICAgQ2FjaGUgOiBDYWNoZSQyNCxcclxuICAgIGNvbG9yIDogY29sb3IkMjUsXHJcbiAgICBnbGVudW0gOiBnbGVudW0kMjYsXHJcbiAgICBHTEluZm8gOiBHTEluZm8kMjcsXHJcbiAgICBMaW5rZWRMaXN0IDogTGlua2VkTGlzdCQyOCxcclxuICAgIExSVSA6IExSVSQyOSxcclxuICAgIG1peGluIDoge1xyXG4gICAgICAgIGV4dGVuZCA6IGV4dGVuZCQzMCxcclxuICAgICAgICBub3RpZmllciA6IG5vdGlmaWVyJDMxXHJcbiAgICB9LFxyXG4gICAgcmVxdWVzdCA6IHJlcXVlc3QkMzIsXHJcbiAgICB1dGlsIDogdXRpbCQzMyxcclxuICAgIHZlbmRvciA6IHZlbmRvciQzNFxyXG59O1xyXG5leHBvcnQgeyBjb3JlIH07XHJcblxyXG5leHBvcnQgeyBjcmVhdGVDb21wb3NpdG9yJDM1IGFzIGNyZWF0ZUNvbXBvc2l0b3IgfTtcclxuXHJcbnZhciBkZWZlcnJlZCA9IHtcclxuICAgIEdCdWZmZXIgOiBHQnVmZmVyJDM2LFxyXG4gICAgUmVuZGVyZXIgOiBSZW5kZXJlciQzN1xyXG59O1xyXG5leHBvcnQgeyBkZWZlcnJlZCB9O1xyXG5cclxuXHJcbnZhciBkZXAgPSB7XHJcbiAgICBnbG1hdHJpeCA6IGdsbWF0cml4JDM4XHJcbn07XHJcbmV4cG9ydCB7IGRlcCB9O1xyXG5cclxuZXhwb3J0IHsgRnJhbWVCdWZmZXIkMzkgYXMgRnJhbWVCdWZmZXIgfTtcclxuZXhwb3J0IHsgR2VvbWV0cnkkNDAgYXMgR2VvbWV0cnkgfTtcclxuXHJcbnZhciBnZW9tZXRyeSA9IHtcclxuICAgIENvbmUgOiBDb25lJDQxLFxyXG4gICAgQ3ViZSA6IEN1YmUkNDIsXHJcbiAgICBDeWxpbmRlciA6IEN5bGluZGVyJDQzLFxyXG4gICAgUGFyYW1ldHJpY1N1cmZhY2UgOiBQYXJhbWV0cmljU3VyZmFjZSQ0NCxcclxuICAgIFBsYW5lIDogUGxhbmUkNDUsXHJcbiAgICBTcGhlcmUgOiBTcGhlcmUkNDZcclxufTtcclxuZXhwb3J0IHsgZ2VvbWV0cnkgfTtcclxuXHJcbmV4cG9ydCB7IEdlb21ldHJ5QmFzZSQ0NyBhcyBHZW9tZXRyeUJhc2UgfTtcclxuZXhwb3J0IHsgSm9pbnQkNDggYXMgSm9pbnQgfTtcclxuZXhwb3J0IHsgTGlnaHQkNDkgYXMgTGlnaHQgfTtcclxuXHJcbnZhciBsaWdodCA9IHtcclxuICAgIEFtYmllbnQgOiBBbWJpZW50JDUwLFxyXG4gICAgQW1iaWVudEN1YmVtYXAgOiBBbWJpZW50Q3ViZW1hcCQ1MSxcclxuICAgIEFtYmllbnRTSCA6IEFtYmllbnRTSCQ1MixcclxuICAgIERpcmVjdGlvbmFsIDogRGlyZWN0aW9uYWwkNTMsXHJcbiAgICBQb2ludCA6IFBvaW50JDU0LFxyXG4gICAgU3BoZXJlIDogU3BoZXJlJDU1LFxyXG4gICAgU3BvdCA6IFNwb3QkNTYsXHJcbiAgICBUdWJlIDogVHViZSQ1N1xyXG59O1xyXG5leHBvcnQgeyBsaWdodCB9O1xyXG5cclxuXHJcbnZhciBsb2FkZXIgPSB7XHJcbiAgICBGWCA6IEZYJDU4LFxyXG4gICAgR0xURiA6IEdMVEYkNTlcclxufTtcclxuZXhwb3J0IHsgbG9hZGVyIH07XHJcblxyXG5leHBvcnQgeyBNYXRlcmlhbCQ2MCBhcyBNYXRlcmlhbCB9O1xyXG5cclxudmFyIG1hdGggPSB7XHJcbiAgICBCb3VuZGluZ0JveCA6IEJvdW5kaW5nQm94JDYxLFxyXG4gICAgRnJ1c3R1bSA6IEZydXN0dW0kNjIsXHJcbiAgICBNYXRyaXgyIDogTWF0cml4MiQ2MyxcclxuICAgIE1hdHJpeDJkIDogTWF0cml4MmQkNjQsXHJcbiAgICBNYXRyaXgzIDogTWF0cml4MyQ2NSxcclxuICAgIE1hdHJpeDQgOiBNYXRyaXg0JDY2LFxyXG4gICAgUGxhbmUgOiBQbGFuZSQ2NyxcclxuICAgIFF1YXRlcm5pb24gOiBRdWF0ZXJuaW9uJDY4LFxyXG4gICAgUmF5IDogUmF5JDY5LFxyXG4gICAgdXRpbCA6IHV0aWwkNzAsXHJcbiAgICBWYWx1ZSA6IFZhbHVlJDcxLFxyXG4gICAgVmVjdG9yMiA6IFZlY3RvcjIkNzIsXHJcbiAgICBWZWN0b3IzIDogVmVjdG9yMyQ3MyxcclxuICAgIFZlY3RvcjQgOiBWZWN0b3I0JDc0XHJcbn07XHJcbmV4cG9ydCB7IG1hdGggfTtcclxuZXhwb3J0IHsgQm91bmRpbmdCb3gkNjEgYXMgQm91bmRpbmdCb3ggfTtcclxuZXhwb3J0IHsgRnJ1c3R1bSQ2MiBhcyBGcnVzdHVtIH07XHJcbmV4cG9ydCB7IE1hdHJpeDIkNjMgYXMgTWF0cml4MiB9O1xyXG5leHBvcnQgeyBNYXRyaXgyZCQ2NCBhcyBNYXRyaXgyZCB9O1xyXG5leHBvcnQgeyBNYXRyaXgzJDY1IGFzIE1hdHJpeDMgfTtcclxuZXhwb3J0IHsgTWF0cml4NCQ2NiBhcyBNYXRyaXg0IH07XHJcbmV4cG9ydCB7IFBsYW5lJDY3IGFzIFBsYW5lIH07XHJcbmV4cG9ydCB7IFF1YXRlcm5pb24kNjggYXMgUXVhdGVybmlvbiB9O1xyXG5leHBvcnQgeyBSYXkkNjkgYXMgUmF5IH07XHJcbmV4cG9ydCB7IFZhbHVlJDcxIGFzIFZhbHVlIH07XHJcbmV4cG9ydCB7IFZlY3RvcjIkNzIgYXMgVmVjdG9yMiB9O1xyXG5leHBvcnQgeyBWZWN0b3IzJDczIGFzIFZlY3RvcjMgfTtcclxuZXhwb3J0IHsgVmVjdG9yNCQ3NCBhcyBWZWN0b3I0IH07XHJcblxyXG5leHBvcnQgeyBNZXNoJDc1IGFzIE1lc2ggfTtcclxuZXhwb3J0IHsgTm9kZSQ3NiBhcyBOb2RlIH07XHJcblxyXG52YXIgcGFydGljbGUgPSB7XHJcbiAgICBFbWl0dGVyIDogRW1pdHRlciQ3NyxcclxuICAgIEZpZWxkIDogRmllbGQkNzgsXHJcbiAgICBGb3JjZUZpZWxkIDogRm9yY2VGaWVsZCQ3OSxcclxuICAgIFBhcnRpY2xlIDogUGFydGljbGUkODAsXHJcbiAgICBQYXJ0aWNsZVJlbmRlcmFibGUgOiBQYXJ0aWNsZVJlbmRlcmFibGUkODFcclxufTtcclxuZXhwb3J0IHsgcGFydGljbGUgfTtcclxuXHJcblxyXG52YXIgcGlja2luZyA9IHtcclxuICAgIFBpeGVsUGlja2luZyA6IFBpeGVsUGlja2luZyQ4MixcclxuICAgIFJheVBpY2tpbmcgOiBSYXlQaWNraW5nJDgzXHJcbn07XHJcbmV4cG9ydCB7IHBpY2tpbmcgfTtcclxuXHJcblxyXG52YXIgcGx1Z2luID0ge1xyXG4gICAgRnJlZUNvbnRyb2wgOiBGcmVlQ29udHJvbCQ4NCxcclxuICAgIEdhbWVwYWRDb250cm9sIDogR2FtZXBhZENvbnRyb2wkODUsXHJcbiAgICBHZXN0dXJlTWdyIDogR2VzdHVyZU1nciQ4NixcclxuICAgIEluZmluaXRlUGxhbmUgOiBJbmZpbml0ZVBsYW5lJDg3LFxyXG4gICAgT3JiaXRDb250cm9sIDogT3JiaXRDb250cm9sJDg4LFxyXG4gICAgU2t5Ym94IDogU2t5Ym94JDg5LFxyXG4gICAgU2t5ZG9tZSA6IFNreWRvbWUkOTBcclxufTtcclxuZXhwb3J0IHsgcGx1Z2luIH07XHJcblxyXG5cclxudmFyIHByZVBhc3MgPSB7XHJcbiAgICBFbnZpcm9ubWVudE1hcCA6IEVudmlyb25tZW50TWFwJDkxLFxyXG4gICAgU2hhZG93TWFwIDogU2hhZG93TWFwJDkyXHJcbn07XHJcbmV4cG9ydCB7IHByZVBhc3MgfTtcclxuXHJcbmV4cG9ydCB7IFJlbmRlcmFibGUkOTMgYXMgUmVuZGVyYWJsZSB9O1xyXG5leHBvcnQgeyBSZW5kZXJlciQ5NCBhcyBSZW5kZXJlciB9O1xyXG5leHBvcnQgeyBTY2VuZSQ5NSBhcyBTY2VuZSB9O1xyXG5leHBvcnQgeyBTaGFkZXIkOTYgYXMgU2hhZGVyIH07XHJcblxyXG52YXIgc2hhZGVyID0ge1xyXG4gICAgbGlicmFyeSA6IGxpYnJhcnkkOTcsXHJcbiAgICByZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yIDogcmVnaXN0ZXJCdWlsdGluQ29tcG9zaXRvciQ5OCxcclxuICAgIHNvdXJjZSA6IHtcclxuICAgIGhlYWRlciA6IHtcclxuICAgICAgICBsaWdodCA6IGxpZ2h0JDk5XHJcbiAgICB9XHJcbiAgICB9XHJcbn07XHJcbmV4cG9ydCB7IHNoYWRlciB9O1xyXG5cclxuZXhwb3J0IHsgU2tlbGV0b24kMTAwIGFzIFNrZWxldG9uIH07XHJcbmV4cG9ydCB7IFN0YW5kYXJkTWF0ZXJpYWwkMTAxIGFzIFN0YW5kYXJkTWF0ZXJpYWwgfTtcclxuZXhwb3J0IHsgU3RhdGljR2VvbWV0cnkkMTAyIGFzIFN0YXRpY0dlb21ldHJ5IH07XHJcbmV4cG9ydCB7IFRleHR1cmUkMTAzIGFzIFRleHR1cmUgfTtcclxuZXhwb3J0IHsgVGV4dHVyZTJEJDEwNCBhcyBUZXh0dXJlMkQgfTtcclxuZXhwb3J0IHsgVGV4dHVyZUN1YmUkMTA1IGFzIFRleHR1cmVDdWJlIH07XHJcbmV4cG9ydCB7IFRpbWVsaW5lJDEwNiBhcyBUaW1lbGluZSB9O1xyXG5cclxudmFyIHV0aWwgPSB7XHJcbiAgICBjdWJlbWFwIDogY3ViZW1hcCQxMDcsXHJcbiAgICBkZHMgOiBkZHMkMTA4LFxyXG4gICAgZGVsYXVuYXkgOiBkZWxhdW5heSQxMDksXHJcbiAgICBoZHIgOiBoZHIkMTEwLFxyXG4gICAgbWVzaCA6IG1lc2gkMTExLFxyXG4gICAgc2ggOiBzaCQxMTIsXHJcbiAgICB0ZXh0dXJlIDogdGV4dHVyZSQxMTMsXHJcbiAgICB0cmFuc2ZlcmFibGUgOiB0cmFuc2ZlcmFibGUkMTE0XHJcbn07XHJcbmV4cG9ydCB7IHV0aWwgfTtcclxuXHJcbmV4cG9ydCB7IHZlcnNpb24kMTE1IGFzIHZlcnNpb24gfTtcclxuXHJcbnZhciB2ciA9IHtcclxuICAgIENhcmRib2FyZERpc3RvcnRlciA6IENhcmRib2FyZERpc3RvcnRlciQxMTYsXHJcbiAgICBTdGVyZW9DYW1lcmEgOiBTdGVyZW9DYW1lcmEkMTE3XHJcbn07XHJcbmV4cG9ydCB7IHZyIH07XHJcbjtcclxuIl0sIm5hbWVzIjpbImVhc2luZyIsIkVhc2luZyIsImVhc2luZ0Z1bmNzIiwiR0xNQVRfUkFORE9NIiwidXRpbCIsIm5vdGlmaWVyTWl4aW4iLCJMUlUiLCJwYXJzZUNvbG9yIiwiZ2V0RGVmaW5lQ29kZSIsInByZXpFc3NsIiwibm9vcCIsInByb3RvIiwiZGVmaW5lUHJvcGVydHkiLCJsaWdodFNoYWRlciIsIlBsYW5lIiwidmVjM1NldCIsInZlYzNDb3B5IiwiRVBTSUxPTiIsInByb2dyYW1LZXlDYWNoZSIsImdldFByb2dyYW1LZXkiLCJMUlVDYWNoZSIsIkF0dHJpYnV0ZSIsIkN1YmUiLCJTcGhlcmUiLCJQYXJhbWV0cmljU3VyZmFjZSIsImlzUG93ZXJPZlR3byIsIlBlcnNwZWN0aXZlIiwiT3J0aG9ncmFwaGljIiwidXRpbEVzc2wiLCJzaGFkZXJMaWJyYXJ5IiwiUGVyc3BlY3RpdmVDYW1lcmEiLCJPcnRob2dyYXBoaWNDYW1lcmEiLCJjYW1lcmEiLCJPcnRob0NhbWVyYSIsIlNreWJveCIsIkN1YmVHZW9tZXRyeSIsInRhcmdldHMiLCJyZXQiLCJoZHIiLCJkZHMiLCJTa3lkb21lIiwiQ3ViZUdlbyIsIlNwaGVyZUdlbyIsIlBsYW5lR2VvIiwiUGFyYW1ldHJpY1N1cmZhY2VHZW8iLCJzaFV0aWwiLCJHcmFwaE5vZGUiLCJTY2VuZU5vZGUiLCJUZXh0dXJlTm9kZSIsIkZpbHRlck5vZGUiLCJyZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yIiwiQ29tcG9TY2VuZU5vZGUiLCJDb21wb1RleHR1cmVOb2RlIiwiQ29tcG9GaWx0ZXJOb2RlIiwiQ29uZSIsIkN5bGluZGVyIiwiQ29uZUdlb21ldHJ5IiwiQ29uZUdlbyIsIkN5bGluZGVyR2VvIiwiRnVsbFF1YWRQYXNzIiwib3V0cHV0RXNzbCIsIkJhc2UiLCJDYW1lcmEiLCJBbmltYXRvciQwIiwiQmxlbmQxRENsaXAkMSIsIkJsZW5kMkRDbGlwJDIiLCJDbGlwJDMiLCJlYXNpbmckNCIsIlNhbXBsZXJUcmFjayQ1IiwiVGltZWxpbmUkNiIsIlRyYWNrQ2xpcCQ3IiwiVGFzayQ5IiwiVGFza0dyb3VwJDEwIiwiT3J0aG9ncmFwaGljJDEyIiwiUGVyc3BlY3RpdmUkMTMiLCJDb21wb3NpdG9yJDE0IiwiQ29tcG9zaXRvck5vZGUkMTUiLCJjcmVhdGVDb21wb3NpdG9yJDE2IiwiRmlsdGVyTm9kZSQxNyIsIkdyYXBoJDE4IiwiUGFzcyQxOSIsIlNjZW5lTm9kZSQyMCIsIlRleHR1cmVOb2RlJDIxIiwiVGV4dHVyZVBvb2wkMjIiLCJCYXNlJDIzIiwiQ2FjaGUkMjQiLCJjb2xvciQyNSIsImdsZW51bSQyNiIsIkdMSW5mbyQyNyIsIkxpbmtlZExpc3QkMjgiLCJMUlUkMjkiLCJleHRlbmQkMzAiLCJub3RpZmllciQzMSIsInJlcXVlc3QkMzIiLCJ1dGlsJDMzIiwidmVuZG9yJDM0IiwiR0J1ZmZlciQzNiIsIlJlbmRlcmVyJDM3IiwiZ2xtYXRyaXgkMzgiLCJDb25lJDQxIiwiQ3ViZSQ0MiIsIkN5bGluZGVyJDQzIiwiUGFyYW1ldHJpY1N1cmZhY2UkNDQiLCJQbGFuZSQ0NSIsIlNwaGVyZSQ0NiIsIkFtYmllbnQkNTAiLCJBbWJpZW50Q3ViZW1hcCQ1MSIsIkFtYmllbnRTSCQ1MiIsIkRpcmVjdGlvbmFsJDUzIiwiUG9pbnQkNTQiLCJTcGhlcmUkNTUiLCJTcG90JDU2IiwiVHViZSQ1NyIsIkZYJDU4IiwiR0xURiQ1OSIsIkJvdW5kaW5nQm94JDYxIiwiRnJ1c3R1bSQ2MiIsIk1hdHJpeDIkNjMiLCJNYXRyaXgyZCQ2NCIsIk1hdHJpeDMkNjUiLCJNYXRyaXg0JDY2IiwiUGxhbmUkNjciLCJRdWF0ZXJuaW9uJDY4IiwiUmF5JDY5IiwidXRpbCQ3MCIsIlZhbHVlJDcxIiwiVmVjdG9yMiQ3MiIsIlZlY3RvcjMkNzMiLCJWZWN0b3I0JDc0IiwiRW1pdHRlciQ3NyIsIkZpZWxkJDc4IiwiRm9yY2VGaWVsZCQ3OSIsIlBhcnRpY2xlJDgwIiwiUGFydGljbGVSZW5kZXJhYmxlJDgxIiwiUGl4ZWxQaWNraW5nJDgyIiwiUmF5UGlja2luZyQ4MyIsIkZyZWVDb250cm9sJDg0IiwiR2FtZXBhZENvbnRyb2wkODUiLCJHZXN0dXJlTWdyJDg2IiwiSW5maW5pdGVQbGFuZSQ4NyIsIk9yYml0Q29udHJvbCQ4OCIsIlNreWJveCQ4OSIsIlNreWRvbWUkOTAiLCJFbnZpcm9ubWVudE1hcCQ5MSIsIlNoYWRvd01hcCQ5MiIsImxpYnJhcnkkOTciLCJyZWdpc3RlckJ1aWx0aW5Db21wb3NpdG9yJDk4IiwibGlnaHQkOTkiLCJjdWJlbWFwJDEwNyIsImRkcyQxMDgiLCJkZWxhdW5heSQxMDkiLCJoZHIkMTEwIiwibWVzaCQxMTEiLCJzaCQxMTIiLCJ0ZXh0dXJlJDExMyIsInRyYW5zZmVyYWJsZSQxMTQiLCJDYXJkYm9hcmREaXN0b3J0ZXIkMTE2IiwiU3RlcmVvQ2FtZXJhJDExNyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7O0FBS0EsSUFBSSxNQUFNLEdBQUc7Ozs7OztJQU1ULE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNoQixPQUFPLENBQUMsQ0FBQztLQUNaOzs7Ozs7SUFNRCxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2hCOzs7Ozs7SUFNRCxZQUFZLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3RCOzs7Ozs7SUFNRCxjQUFjLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2QsT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN0QjtRQUNELE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3RDOzs7Ozs7SUFNRCxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNwQjs7Ozs7O0lBTUQsUUFBUSxFQUFFLFNBQVMsQ0FBQyxF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LFFBQVEsR0FBRyxPQUFPLEVBQUU7UUFDekIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3RCLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3RCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUMvQjs7U0FFSTtRQUNELEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvQixFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDdEIsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRO1lBQ3RCLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRztZQUNyQixFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FB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QUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNwRDtTQUNKOzs7UUFHRCxPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsUUFBUSxFQUFFLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTs7UUFFdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDcEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3pELENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxD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LENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7O0FBVXZCLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUMxQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7O0FBUzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxD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QUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztJQUNyQixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ3JCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7O0lBRXJCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDOztJQUVoRCxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxZQUFZLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUM3RCxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxZQUFZLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUM3RCxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxZQUFZLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzs7SUFFN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3pDLENBQUM7Ozs7Ozs7QUFPRixXQUFXLENBQUMsU0FBUyxD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QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFVdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7OztBQVdGLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7SUFDMUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ3JDLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7O0FBUzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FB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QUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDcEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDdkIsSUFBSTtRQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNkO0lBQ0QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUN2QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xELENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXBDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2hDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsS0FBSyxFQUFFO0lBQ2hDLEtBQUssR0FBRyxLQUFLLElBQUksR0FBRyxDQUFDOztJQUVyQixJQUFJLENBQUMsR0FBR0EsY0FBWSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQ0EsY0FBWSxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNyQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDOztJQUV4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ25CLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7QUFXRixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTs7O0lBR3JDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7UUFHMUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUM3QixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDN0IsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7OztJQUduQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNsRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0dBQ2xDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDOztNQUVkLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7TUFHakIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUMzQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7OztNQUczQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFdkIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7SUFFakIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7OztJQUduQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0lBRzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUVyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDOztJQUVqQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7O0lBR25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDLENB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RyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7O0FBVXpCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFVdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtJQUMxQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUMvQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMzQyxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7OztBQVMxQixJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxD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QUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtRQUNULEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUN2QjtJQUNELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdkIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hFLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsR0FBRyxFQUFFLEtBQUssRUFBRTtJQUNoQyxLQUFLLEdBQUcsS0FBSyxJQUFJLEdBQUcsQ0FBQzs7O0lBR3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBR0EsY0FBWSxFQUFFLENBQUM7SUFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxjQUFZLEVBQUUsQ0FBQztJQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdBLGNBQVksRUFBRSxDQUFDO0lBQ3hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBR0EsY0FBWSxFQUFFLENBQUM7SUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7UUFHMUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUM3QixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQzdCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDN0IsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7OztJQUduQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFH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LENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsRUFBRTtJQUNyQixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUU7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTs7SUFFOUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO1FBQ1gsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDaEIsTUFBTTtRQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNqQjs7SUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzNCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFD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RyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXZDLE9BQU8sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUN6RyxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRWxDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztJQUUzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7QUFVekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7O0lBRWIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDOztJQUViLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7OztBQVVGLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNqQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVsQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRXRCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDOztJQUUzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7SUFFM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2IsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUV2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRWxCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDOUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7UUFFVixFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDOztJQUVqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7O0lBRWpCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7SUFFckIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDcEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7UUFFbEQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7OztRQUczQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhGLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDTixPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDOztJQUVuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQzs7SUFFbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7O0lBRW5ELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENB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QUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO0lBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDaEM7Ozs7Ozs7Ozs7O0FBV0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDOzs7Ozs7Ozs7O0FBVXBCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNoQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRS9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQy9DLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7Ozs7OztBQVd6QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Ozs7Ozs7Ozs7QUFVeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUU7SUFDOUIsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBRTtJQUM5QixJQUFJLEtB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SyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ2xCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDUixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1FBRWhCLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0tBQzFDOztJQUVELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7QUNyZ0JGOzs7QUFHQSxBQUlBLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0lBQ3BDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNmLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDOztJQUVuQyxPQUFPLEdBQUcsQ0FBQztDQUNkOztBQUVELFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFOzs7O0lBSXJDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzlELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDOztJQUVuRSxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7OztJQUd4QyxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7SUFFOUMsSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO1FBQ2IsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ2YsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ1YsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ1YsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ1YsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0tBQ2I7O0lBRUQsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLElBQUksUUFBUSxFQUFFOztRQUUxQixLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzdDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7S0FDeEM7U0FDSTs7O1FBR0QsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDakIsTUFBTSxHQUFHLENBQUMsQ0FBQztLQUNkOztJQUVELEdBQUcsQ0FBQyxD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R0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN2RTtRQUNELE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUM5RCxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDN0U7O0lBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hCLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJ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Q0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7UUFFaEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFD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QUM7SUFDOUQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9DLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDNUQsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlELGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RCxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0QsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4RCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRCxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRCxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxH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Q0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RCxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hELFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RCxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkQsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRCxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkQsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcs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LENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLEtBQUs7Z0JBQ04sR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDVixLQUFLLElBQUksQ0FBQztZQUNWLEtBQUssS0FBSztnQkFDTixHQUFHLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDN0MsTUFBTTtZQUNWLEtBQUssSUFBSSxDQUFDO1lBQ1YsS0FBSyxLQUFLO2dCQUNOLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM3QyxNQUFNO1lBQ1YsS0FBSyxLQUFLOztnQkFFTixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDakQsSUFBSSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQ3ZELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztvQkFDZixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDbkMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFOzRCQUN6QixLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQzdCO3FCQUNKO29CQUNELEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUNoRDtxQkFDSTtvQkFDRCxHQUFHLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDaEQ7Z0JBQ0QsTUFBTTtTQUNiO1FBQ0QsT0FBTyxJQUFJLENBQUM7S0FDZjs7SUFFRCxvQkFBb0IsRUFBRSxVQUFVLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ2hELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCxJQUFJLFlBQVksRUFBRTtZQUNkLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzVFO1FBQ0QsT0FBTyxLQUFLLENBQUM7S0FDaEI7Ozs7OztJQU1ELGdCQUFnQixFQUFFLFVBQVUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUU7UUFDbkQsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN0QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOztRQUU1QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDOztRQUVsQyxJQUFJLDZCQUE2QixDQUFDO1FBQ2xDLElBQUksR0FBRyxFQUFFO1lBQ0wsNkJBQTZCLEdBQUcsR0FBRyxDQUFDLHNCQUFzQixDQUFDO1NBQzlEO2FBQ0k7WUFDRCw2QkFBNkIsR0FBRyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDMUU7UUFDRCxJQUFJLENBQUMsNkJBQTZCLEVBQUU7OztZQUdoQyxJQUFJLEdBQUcsRUFBRTtnQkFDTCw2QkFBNkI7c0JBQ3ZCLEdBQUcsQ0FBQyxzQkFBc0I7c0JBQzFCLEVBQUUsQ0FBQzthQUNaO2lCQUNJO2dCQUNELDZCQUE2QjtzQkFDdkIsb0JBQW9CLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztzQkFDdEMsRUFBRSxDQUFDO2FBQ1o7U0FDSjtRQUNELElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzFCLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDckIsU0FBUzthQUNaO1lBQ0QsSUFBSSxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25DLElBQUksUUFBUSxJQUFJLElBQUksRUFBRTtnQkFDbEIsUUFBUSxHQUFHLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7O2dCQUVsRCxJQUFJLFFBQVEsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDakIsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNyQixTQUFTO2lCQUNaO2dCQUNELFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUM7YUFDbEM7WUFDRCxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDOztZQUUzQixJQUFJLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzFDLDZCQUE2QixDQUFDLFFBQVEsQ0FBQyxHQUFHLHNCQUFzQixDQUFDO2FBQ3BFO2lCQUNJO2dCQUNELDZCQUE2QixDQUFDLFFBQVEsQ0FBQyxHQUFHLHdCQUF3QixDQUFDO2FBQ3RFO1NBQ0o7O1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLDZCQUE2QixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzRCxPQUFPLDZCQUE2QixDQUFDLENBQUMsQ0FBQztnQkFDbkMsS0FBSyxzQkFBc0I7b0JBQ3ZCLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDL0IsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLEdBQUcsb0JBQW9CLENBQUM7b0JBQ3hELE1BQU07Z0JBQ1YsS0FBSyx3QkFBd0I7b0JBQ3pCLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO29CQUN4RCxNQUFNOztnQkFFVixLQUFLLG9CQUFvQjtvQkFDckIsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNoQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3JDLE1BQU07YUFDYjtTQUNKOztRQUVELE9BQU8sWUFBWSxDQUFDO0tBQ3ZCOztJQUVELFlBQVksRUFBRSxVQUFVLEdBQUcsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUU7UUFDdkUsSUFBSSxZQUFZLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkQsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDOztRQUVsQyxHQUFHLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2pELEdBQUcsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7O1FBRWhDLElBQUksY0FBYyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzNELEdBQUcsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDckQsR0FBRyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQzs7UUFFbEMsSUFBSSxHQUFHLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ25FLElBQUksR0FBRyxFQUFFO1lBQ0wsT0FBTyxHQUFHLENBQUM7U0FDZDtRQUNELEdBQUcsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDbkUsSUFBSSxHQUFHLEVBQUU7WUFDTCxPQUFPLEdBQUcsQ0FBQztTQUNkOztRQUVELEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3hDLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDOztRQUUxQyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN2QyxHQUFHLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDcEY7YUFDSTs7WUFFRCxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN4QyxHQUFHLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMvQzs7UUFFRCxHQUFHLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDOztRQUV6QixHQUFHLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9CLEdBQUcsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7O1FBRWpDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDOzs7UUFHeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQztRQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFHLGtCQUFrQixDQUFDOztRQUV2QyxJQUFJLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDcEQsT0FBTywwQkFBMEIsR0FBRyxHQUFHLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdEU7OztRQUdELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3QyxJQUFJLGFBQWEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztTQUNuRjs7S0FFSjtDQUNKLENBQUM7O0FDalVGLElBQUksU0FBUyxHQUFHLG1IQUFtSCxDQUFDOztBQUVwSSxTQUFTLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRTs7Ozs7Ozs7OztJQVVuRCxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUU7UUFDekMsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDOztRQUVoQixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNkLElBQUksS0FBSyxJQUFJLE9BQU8sRUFBRTtnQkFDbEIsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMxQjtpQkFDSTtnQkFDRCxLQUFLLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDckM7U0FDSjtRQUNELElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1osSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFO2dCQUNoQixHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3RCO2lCQUNJO2dCQUNELEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNqQztTQUNKOzs7UUFHRCxLQUFLLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFOztZQUV4RCxNQUFNLElBQUksR0FBRztrQkFDUCxPQUFPO3FCQUNKLE9BQU8sQ0FBQywwQkFBMEIsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNuRCxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQztjQUM3QixHQUFHLENBQUM7U0FDVDs7UUFFRCxPQUFPLE1BQU0sQ0FBQztLQUNqQjs7SUFFRCxJQUFJLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUM1QixLQUFLLElBQUksU0FBUyxJQUFJLGFBQWEsRUFBRTtRQUNqQyxrQkFBa0IsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3ZFO0lBQ0QsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztDQUNoRDs7QUFFRCxTQUFTSSxlQUFhLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUU7SUFDNUQsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ25CLElBQUksYUFBYSxFQUFFO1FBQ2YsS0FBSyxJQUFJLFNBQVMsSUFBSSxhQUFhLEVBQUU7WUFDakMsSUFBSSxLQUFLLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtnQkFDWCxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsV0FBVyxFQUFFLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDO2FBQzVFO1NBQ0o7S0FDSjtJQUNELElBQUksZUFBZSxFQUFFO1FBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzdDLElBQUksTUFBTSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUM7U0FDbEU7S0FDSjs7SUFFRCxLQUFLLElBQUksTUFBTSxJQUFJLE9BQU8sRUFBRTtRQUN4QixJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ2hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1NBQ3ZDO1lBQ0c7WUFDQSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQ2hFO0tBQ0o7SUFDRCxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDL0I7O0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7OztJQUc1QixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbEMsWUFBWSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUM7S0FDL0Q7SUFDRCxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDbEM7O0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUU7SUFDakMsT0FBTyxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUs7VUFDcEQsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLOztVQUVqRCxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztDQUNqRTs7QUFFRCxTQUFTLGNBQWMsQ0FBQyxRQUFRLEVBQUU7SUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7Q0FDcEI7O0FBRUQsY0FBYyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsVUFBVSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtJQUN6RSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDOztJQUV4QixJQUFJLGFBQWEsR0FBRyxVQUFVLENBQUMsYUFBYSxJQUFJLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxRSxJQUFJLEtBQUssRUFBRTtRQUNQLEdBQUcsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDNUQ7SUFDRCxJQUFJLGFBQWEsRUFBRTtRQUNmLEdBQUcsSUFBSSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7S0FDekM7SUFDRCxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRXpCLElBQUksT0FBTyxFQUFFO1FBQ1QsT0FBTyxPQUFPLENBQUM7S0FDbEI7O0lBRUQsSUFBSSxhQUFhLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQy9FLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDOUIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztJQUN0QixJQUFJLGVBQWUsR0FBRyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUNwRCxJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDeEIsSUFBSSxhQUFhLEVBQUU7UUFDZixJQUFJLFdBQVcsR0FBRztZQUNkLFFBQVEsRUFBRSxJQUFJO1lBQ2QsV0FBVyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTTtTQUN4QyxDQUFDO1FBQ0YsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtZQUN6RCxXQUFXLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO1NBQ2hEOztRQUVELGNBQWMsR0FBRyxJQUFJLEdBQUdBLGVBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDN0Q7OztJQUdELElBQUksZUFBZSxHQUFHLGNBQWMsR0FBR0EsZUFBYSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDOztJQUU3RyxJQUFJLGlCQUFpQixHQUFHLGNBQWMsR0FBR0EsZUFBYSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDOztJQUVqSCxJQUFJLFVBQVUsR0FBRyxlQUFlLEdBQUcsSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDOztJQUVqRSxJQUFJLFVBQVUsR0FBRztRQUNiLDBCQUEwQjtRQUMxQix3QkFBd0I7S0FDM0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLEVBQUU7UUFDcEIsT0FBTyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztLQUMvQyxDQUFDLENBQUM7O0lBRUgsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ25ELGlCQUFpQixJQUFJLCtCQUErQixDQUFDO0tBQ3hEO0lBQ0QsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3JELGlCQUFpQixJQUFJLHdDQUF3QyxDQUFDO0tBQ2pFOztJQUVELElBQUksWUFBWSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUk7VUFDaEQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUk7VUFDM0MsaUJBQWlCLEdBQUcsSUFBSTtVQUN4QixRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQzs7SUFFL0IsSUFBSSxlQUFlLEdBQUcsVUFBVSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3BGLElBQUksaUJBQWlCLEdBQUcsVUFBVSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDOztJQUUxRixJQUFJLE9BQU8sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0lBQzlCLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDO0lBQzVELE9BQU8sQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7SUFDaEQsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUM5RixPQUFPLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQzs7SUFFM0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQzs7SUFFckIsT0FBTyxPQUFPLENBQUM7Q0FDbEIsQ0FBQzs7QUNqTEY7Ozs7Ozs7QUFPQSxBQUdBLElBQUksWUFBWSxHQUFHLGlIQUFpSCxDQUFDO0FBQ3JJLElBQUksY0FBYyxHQUFHLHVEQUF1RCxDQUFDOztBQUU3RSxJQUFJLFdBQVcsR0FBRywwQ0FBMEMsQ0FBQzs7QUFFN0QsSUFBSSxjQUFjLEdBQUc7SUFDakIsTUFBTSxFQUFFLElBQUk7SUFDWixLQUFLLEVBQUUsSUFBSTtJQUNYLFdBQVcsRUFBRSxHQUFHO0lBQ2hCLGFBQWEsRUFBRSxHQUFHO0lBQ2xCLE9BQU8sRUFBRSxJQUFJO0lBQ2IsTUFBTSxFQUFFLElBQUk7SUFDWixNQUFNLEVBQUUsSUFBSTtJQUNaLE1BQU0sRUFBRSxJQUFJO0lBQ1osT0FBTyxFQUFFLElBQUk7SUFDYixPQUFPLEVBQUUsSUFBSTtJQUNiLE9BQU8sRUFBRSxJQUFJO0lBQ2IsTUFBTSxFQUFFLElBQUk7SUFDWixNQUFNLEVBQUUsSUFBSTtJQUNaLE1BQU0sRUFBRSxJQUFJO0NBQ2YsQ0FBQzs7QUFFRixTQUFTLGVBQWUsQ0FBQyxHQUFHLEVBQUU7SUFDMUIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLEdBQUcsQ0FBQztDQUNkOztBQUVELElBQUksdUJBQXVCLEdBQUc7SUFDMUIsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFO0lBQ3BDLEtBQUssRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRTtJQUNoQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUU7SUFDbEMsV0FBVyxFQUFFLFlBQVksRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFO0lBQ3pDLGFBQWEsRUFBRSxZQUFZLEVBQUUsT0FBTyxJQUFJLENBQUMsRUFBRTs7SUFFM0MsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ2xELE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNsRCxNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7O0lBRWxELE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFOztJQUVuRCxNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDbEQsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ2xELE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTs7SUFFbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFO0NBQ3RDLENBQUM7O0FBRUYsSUFBSSxrQkFBa0IsR0FBRztJQUNyQixVQUFVO0lBQ1YsUUFBUTtJQUNSLFVBQVU7SUFDVixTQUFTO0lBQ1QsVUFBVTtJQUNWLFlBQVk7SUFDWixZQUFZO0lBQ1osT0FBTzs7O0lBR1AsT0FBTztJQUNQLFFBQVE7Q0FDWCxDQUFDO0FBQ0YsSUFBSSxnQkFBZ0IsR0FBRztJQUNuQixhQUFhOztJQUViLGVBQWU7SUFDZixVQUFVO0lBQ1Ysa0JBQWtCOzs7SUFHbEIsYUFBYTs7SUFFYixNQUFNO0lBQ04sS0FBSzs7SUFFTCxNQUFNO0NBQ1QsQ0FBQztBQUNGLElBQUksZUFBZSxHQUFHO0lBQ2xCLE9BQU87SUFDUCxNQUFNO0lBQ04sWUFBWTtJQUNaLFdBQVc7SUFDWCxnQkFBZ0I7SUFDaEIscUJBQXFCO0lBQ3JCLGNBQWM7SUFDZCxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsNEJBQTRCO0lBQzVCLGdCQUFnQjtJQUNoQixlQUFlO0lBQ2YscUJBQXFCO0lBQ3JCLG9CQUFvQjtJQUNwQix5QkFBeUI7SUFDekIsOEJBQThCO0lBQzlCLHVCQUF1QjtJQUN2QixzQkFBc0I7SUFDdEIsNEJBQTRCO0lBQzVCLDJCQUEyQjtJQUMzQixnQ0FBZ0M7SUFDaEMscUNBQXFDO0NBQ3hDLENBQUM7O0FBRUYsSUFBSSxnQkFBZ0IsR0FBRzs7SUFFbkIsTUFBTSxFQUFFLENBQUM7SUFDVCxNQUFNLEVBQUUsQ0FBQztJQUNULE1BQU0sRUFBRSxDQUFDO0lBQ1QsT0FBTyxFQUFFLENBQUM7Q0FDYixDQUFDOzs7QUFHRixJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDdkIsSUFBSSxlQUFlLEdBQUcsRUFBRSxDQUFDOztBQUV6QixTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFO0lBQ25DLElBQUksR0FBRyxHQUFHLFNBQVMsR0FBRyxNQUFNLEdBQUcsV0FBVyxHQUFHLFFBQVEsQ0FBQztJQUN0RCxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNwQixPQUFPLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUM3QjtJQUNELElBQUksRUFBRSxHQUFHSixNQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEIsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7SUFFeEIsZUFBZSxDQUFDLEVBQUUsQ0FBQyxHQUFHO1FBQ2xCLE1BQU0sRUFBRSxNQUFNO1FBQ2QsUUFBUSxFQUFFLFFBQVE7S0FDckIsQ0FBQzs7SUFFRixPQUFPLEVBQUUsQ0FBQztDQUNiOztBQUVELFNBQVMsYUFBYSxDQUFDLElBQUksRUFBRTtJQUN6QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxFQUFFO1NBQ3RDLE9BQU8sQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLEVBQUUsQ0FBQztDQUNoRDs7QUFFRCxTQUFTLGNBQWMsR0FBRztJQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7Q0FDcEQ7O0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO0lBQ25DLElBQUksZUFBZSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxJQUFJLE1BQU0sR0FBRyxJQUFJOztTQUVaLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQztTQUNuRCxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztTQUNuQixLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzs7SUFFN0IsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3BDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUNsQyxTQUFTLENBQUMsSUFBSTtnQkFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDbkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDckIsQ0FBQztTQUNMO2FBQ0k7WUFDRCxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdCO0tBQ0o7SUFDRCxNQUFNLEdBQUcsU0FBUyxDQUFDOztJQUVuQixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDcEIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNqQixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDakIsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQzs7SUFFcEIsSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFDO0lBQ3pCLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN0QixJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQztJQUM1QixJQUFJLGtCQUFrQixDQUFDOztJQUV2QixTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0lBRXJCLFNBQVMsU0FBUyxDQUFDLE1BQU0sRUFBRTtRQUN2QixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsY0FBYyxFQUFFLENBQUM7U0FDcEI7UUFDRCxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN0QyxJQUFJLFNBQVMsRUFBRTtZQUNYLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDaEQsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3RDtLQUNKOztJQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3BDLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1IsU0FBUztTQUNaO1FBQ0QsSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFO1lBQ2YsSUFBSSxNQUFNLEtBQUssV0FBVztlQUN2QixNQUFNLEtBQUssUUFBUSxFQUFFO2dCQUNwQixjQUFjLEVBQUUsQ0FBQztnQkFDakIsTUFBTTthQUNUO1lBQ0QsTUFBTSxHQUFHLFdBQVcsQ0FBQzs7WUFFckIsU0FBUztTQUNaO2FBQ0ksSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFO1lBQ3BCLE1BQU0sR0FBRyxhQUFhLENBQUM7O1lBRXZCLFNBQVM7U0FDWjthQUNJLElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRTtZQUNwQixJQUFJLE1BQU0sS0FBSyxRQUFRLEVBQUU7Z0JBQ3JCLElBQUksRUFBRSxnQkFBZ0IsWUFBWSxLQUFLLENBQUMsRUFBRTtvQkFDdEMsY0FBYyxFQUFFLENBQUM7b0JBQ2pCLE1BQU07aUJBQ1Q7Z0JBQ0QsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2QztpQkFDSTtnQkFDRCxNQUFNLEdBQUcsV0FBVyxDQUFDO2FBQ3hCOztZQUVELFNBQVM7U0FDWjthQUNJLElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRTtZQUNwQixZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDbkYsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLE1BQU0sR0FBRyxXQUFXLENBQUM7WUFDckIsU0FBUztTQUNaO2FBQ0ksSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFO1lBQ3BCLElBQUksTUFBTSxLQUFLLFFBQVEsRUFBRTtnQkFDckIsY0FBYyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU07YUFDVDtZQUNELElBQUksRUFBRSxnQkFBZ0IsWUFBWSxLQUFLLENBQUMsRUFBRTtnQkFDdEMsY0FBYyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU07YUFDVDtZQUNELGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEMsU0FBUztTQUNaO2FBQ0ksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoQyxJQUFJLE1BQU0sS0FBSyxXQUFXOztlQUV2QixNQUFNLEtBQUssYUFBYSxFQUFFO2dCQUN6QixjQUFjLEVBQUUsQ0FBQztnQkFDakIsTUFBTTthQUNUO1lBQ0QsTUFBTSxHQUFHLFFBQVEsQ0FBQztZQUNsQixnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDdEIsU0FBUztTQUNaO2FBQ0ksSUFBSSxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQzdCLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtnQkFDakIsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxNQUFNLENBQUM7YUFDN0Q7aUJBQ0k7Z0JBQ0QsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM5RDtZQUNELGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUN4QixTQUFTO1NBQ1o7YUFDSSxJQUFJLE1BQU0sS0FBSyxhQUFhLEVBQUU7WUFDL0IsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7bUJBQ3RDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO21CQUN2QyxlQUFlLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Y0FDM0M7Z0JBQ0UsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQzthQUN4RDtpQkFDSSxJQUFJLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxLQUFLLGdCQUFnQixFQUFFO2dCQUM3RCxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2FBQ2xEO2lCQUNJOztnQkFFRCxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUU7b0JBQ2pCLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEtBQUssR0FBRyxRQUFRLEtBQUssTUFBTSxDQUFDO2lCQUNoRTtxQkFDSTtvQkFDRCxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUNqRTthQUNKO1lBQ0QsU0FBUztTQUNaOzs7UUFHRCxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakIsTUFBTSxHQUFHLFdBQVcsQ0FBQztLQUN4Qjs7SUFFRCxPQUFPLFlBQVksQ0FBQztDQUN2Qjs7Ozs7Ozs7Ozs7Ozs7OztBQWdCRCxTQUFTLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFOztJQUU5QixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtRQUM1QixRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUMzQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztLQUMxQjs7SUFFRCxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLFFBQVEsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7O0lBRW5DLElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQzs7SUFFL0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7Ozs7SUFLbEQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQzs7OztJQUk3QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQzs7OztJQUkxQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDOzs7O0lBSTNCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7Ozs7SUFJN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQzs7OztJQUkzQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQzs7OztJQUlyQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQzs7OztJQUluQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQzs7OztJQUl4QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQzs7SUFFMUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDeEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3RCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztDQUN4Qjs7QUFFRCxNQUFNLENBQUMsU0FBUyxHQUFHOztJQUVmLFdBQVcsRUFBRSxNQUFNOzs7SUFHbkIsY0FBYyxFQUFFLFlBQVk7UUFDeEIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDOztRQUVsQixLQUFLLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUNyQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0MsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHO2dCQUNmLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtnQkFDckIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUU7YUFDNUIsQ0FBQztTQUNMOztRQUVELE9BQU8sUUFBUSxDQUFDO0tBQ25COztJQUVELFlBQVksRUFBRSxZQUFZO1FBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUMxRDs7SUFFRCxtQkFBbUIsRUFBRSxVQUFVLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFOzs7UUFHMUQsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzNDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRztnQkFDaEMsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsSUFBSSxFQUFFLFdBQVc7YUFDcEIsQ0FBQztTQUNMO2FBQ0ksSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM3QyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBSSxtQkFBbUIsR0FBRyxRQUFRLENBQUM7WUFDbkMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUM5QixXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixtQkFBbUIsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQy9DO1lBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsR0FBRztnQkFDN0IsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLFdBQVcsRUFBRSxXQUFXO2dCQUN4QixtQkFBbUIsRUFBRSxtQkFBbUI7YUFDM0MsQ0FBQztTQUNMO2FBQ0ksSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsR0FBRztnQkFDOUIsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsSUFBSSxFQUFFLFdBQVc7YUFDcEIsQ0FBQztTQUNMO0tBQ0o7O0lBRUQsbUJBQW1CLEVBQUUsVUFBVSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUU7UUFDbkcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEdBQUc7WUFDdkIsSUFBSSxFQUFFLFdBQVc7WUFDakIsS0FBSyxFQUFFLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxnQkFBZ0IsSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RyxRQUFRLEVBQUUsSUFBSTtTQUNqQixDQUFDO0tBQ0w7O0lBRUQsY0FBYyxFQUFFLFlBQVk7UUFDeEIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUM7UUFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7O1FBRXZCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzFFLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7O1FBRTlFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzs7UUFFNUQsU0FBUyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUU7WUFDakMsT0FBTyxLQUFLLElBQUksSUFBSSxHQUFHLFlBQVksRUFBRSxPQUFPLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO1NBQy9EOztRQUVELFNBQVMsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQ3hDLElBQUksZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3hELElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUN4QixLQUFLLElBQUksTUFBTSxJQUFJLGdCQUFnQixFQUFFOztnQkFFakMsSUFBSSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzNDLElBQUksUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7Z0JBQ3BDLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQztnQkFDcEIsSUFBSSxXQUFXLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1RSxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRTtvQkFDbEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO29CQUN6RCxXQUFXLElBQUksR0FBRyxDQUFDO2lCQUN0Qjs7Z0JBRUQsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzs7Z0JBRTVCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztnQkFFL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7b0JBQ3JCLElBQUksSUFBSSxLQUFLLFdBQVcsSUFBSSxJQUFJLEtBQUssYUFBYSxFQUFFOzt3QkFFaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRzs0QkFDcEIsVUFBVSxFQUFFLFVBQVU7NEJBQ3RCLElBQUksRUFBRSxJQUFJO3lCQUNiLENBQUM7cUJBQ0w7O29CQUVELElBQUksUUFBUSxFQUFFOzt3QkFFVixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztxQkFDM0Q7eUJBQ0k7d0JBQ0QsSUFBSSxDQUFDLG1CQUFtQjs0QkFDcEIsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCOzRCQUMzQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUTt5QkFDN0MsQ0FBQztxQkFDTDtpQkFDSjthQUNKO1lBQ0QsT0FBTyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUM7a0JBQzFCLFVBQVUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztTQUN6RTs7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO0tBQ3BDOztJQUVELGdCQUFnQixFQUFFLFlBQVk7UUFDMUIsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDOztRQUU5RSxTQUFTLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQzFDLElBQUksa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDOztZQUUxRCxJQUFJLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkMsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDMUIsS0FBSyxJQUFJLE1BQU0sSUFBSSxrQkFBa0IsRUFBRTtnQkFDbkMsSUFBSSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUNuRCxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUc7O29CQUVqQixJQUFJLEVBQUUsT0FBTztvQkFDYixJQUFJLEVBQUUsSUFBSTtvQkFDVixRQUFRLEVBQUUsUUFBUSxJQUFJLElBQUk7aUJBQzdCLENBQUM7O2dCQUVGLElBQUksUUFBUSxFQUFFO29CQUNWLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUM7cUJBQ3pEO3lCQUNJO3dCQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRzs0QkFDaEMsTUFBTSxFQUFFLE1BQU07NEJBQ2QsSUFBSSxFQUFFLElBQUk7eUJBQ2IsQ0FBQztxQkFDTDtpQkFDSjtnQkFDRCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDakM7O1lBRUQsT0FBTyxZQUFZLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQ3pFOztRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0tBQ2hDOztJQUVELGFBQWEsRUFBRSxZQUFZO1FBQ3ZCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUM7UUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDeEUsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQzs7UUFFNUUsU0FBUyxhQUFhLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUFDdkMsSUFBSSxPQUFPLEdBQUcsVUFBVSxLQUFLLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDbEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDbEIsSUFBSSxLQUFLLEtBQUssT0FBTyxFQUFFO29CQUNuQixPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDO2lCQUMzQjtxQkFDSSxJQUFJLEtBQUssS0FBSyxNQUFNLEVBQUU7b0JBQ3ZCLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7aUJBQzFCO3FCQUNJO29CQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLOzsyQkFFaEIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDOzBCQUM1RCxJQUFJLENBQUM7aUJBQ2Q7YUFDSjtZQUNELE9BQU8sRUFBRSxDQUFDO1NBQ2I7S0FDSjs7Ozs7O0lBTUQsS0FBSyxFQUFFLFlBQVk7UUFDZixJQUFJLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLElBQUksTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sTUFBTSxDQUFDO0tBQ2pCO0NBQ0osQ0FBQzs7QUFFRixJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUU7SUFDdkIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRTtRQUNoRCxHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUN6QjtLQUNKLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUU7UUFDOUMsR0FBRyxFQUFFLFlBQVk7WUFDYixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7U0FDM0I7S0FDSixDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFO1FBQ2hELEdBQUcsRUFBRSxZQUFZO1lBQ2IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQzdCO0tBQ0osQ0FBQyxDQUFDO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRTtRQUNoRCxHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztTQUM1QjtLQUNKLENBQUMsQ0FBQztDQUNOOztBQUVELElBQUksV0FBVyxHQUFHLGtDQUFrQyxDQUFDO0FBQ3JELE1BQU0sQ0FBQyxXQUFXLEdBQUcsVUFBVSxTQUFTLEVBQUU7SUFDdEMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFVBQVUsR0FBRyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUU7UUFDaEYsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxJQUFJLEdBQUcsRUFBRTs7WUFFTCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbEM7YUFDSTtZQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxHQUFHLDBCQUEwQixDQUFDLENBQUM7WUFDMUUsT0FBTyxFQUFFLENBQUM7U0FDYjtLQUNKLENBQUMsQ0FBQztJQUNILE9BQU8sU0FBUyxDQUFDO0NBQ3BCLENBQUM7O0FBRUYsSUFBSSxXQUFXLEdBQUcscURBQXFELENBQUM7Ozs7Ozs7QUFPeEUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFVBQVUsU0FBUyxFQUFFO0lBQ3BDLFNBQVMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFVBQVUsR0FBRyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO1FBQzFFLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsK0NBQStDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0UsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xDLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsSUFBSSxHQUFHLENBQUM7WUFDUixPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDekIsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNYLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7aUJBQ2pCO2dCQUNELEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDbEI7WUFDRCxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2YsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztTQUNuQjtRQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2YsQ0FBQyxDQUFDO0NBQ04sQ0FBQzs7Ozs7Ozs7QUFRRixNQUFNLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQzs7Ozs7OztBQU9sQixNQUFNLENBQUMsTUFBTSxHQUFHLFVBQVUsSUFBSSxFQUFFO0lBQzVCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUIsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUM1QixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQixHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2xCO0lBQ0QsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7O1FBRXpCLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksR0FBRywwQkFBMEIsQ0FBQyxDQUFDO1FBQzlELE9BQU8sRUFBRSxDQUFDO0tBQ2I7SUFDRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7O0FDcnFCRixlQUFlLG93QkFBb3dCLENBQUM7O0FDQ3B4Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQSxBQU9BLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQzs7Ozs7OztBQU9kLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVztJQUNyQixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsRUFBRTtJQUNyQixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRTtJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTs7SUFFOUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO1FBQ1gsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztRQUVoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNkLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDZCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2pCLE1BQU07UUFDSCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ25COztJQUVELE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDM0IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7UUFFbEQsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7OztRQUczQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhGLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDTixPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDcEQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3BELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQzs7SUFFcEQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hELEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O0lBRXZELEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0csR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hELEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDOztRQUVsRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUMzQixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOzs7SUFHaEMsT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNoRixDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEQsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7O0lBR3ZELElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQzs7SUFFM0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQzs7SUFFM0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQzs7SUFFNUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUM1QyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdkMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNuQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7O0lBRzFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7OztJQUdsQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7OztJQUdsQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNsQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7OztJQUduQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUN6QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ3pDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7O0lBRXpDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDOzs7Ozs7QUFNekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDOzs7Ozs7Ozs7QUFTckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7O0lBRXZCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtRQUNYLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDckQsTUFBTTtRQUNILEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOztRQUVqRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3ZELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDdkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7UUFFekQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNqRDs7SUFFRCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7SUFFakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7O0FBV0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtJQUN2QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNyQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDUCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztRQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDYixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7UUFDYixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQzs7SUFFbEIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWEsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUU7O0lBRW5ELEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2QsQ0FBQyxJQUFJLEdBQUcsQ0FBQztJQUNULENBQUMsSUFBSSxHQUFHLENBQUM7SUFDVCxDQUFDLElBQUksR0FBRyxDQUFDOztJQUVULENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVWLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOzs7SUFHakQsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7OztJQUd0RSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDM0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFD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QUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDbkI7OztJQUdELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUMzQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFOztJQUVoRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNWLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQzs7UUFFVixFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN4QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7SUFFWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7O0FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDVixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDVixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7O1FBRVYsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFO1FBQ1gsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7O0lBRWhCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN0QixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztJQUVaLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNa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Q0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDMVYsQ0FBQzs7QUM3NkJGOztBQUVBLEFBYUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDSyxRQUFRLENBQUMsQ0FBQzs7QUFFM0IsQUFHQSxJQUFJLFVB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RSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7O0FBT0YsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7QUFPRixPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7Ozs7OztBQU0vQixPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMs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TUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0lBRWYsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDOztJQUUzQyxRQUFRLEtBQUs7UUFDVCxLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMs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R0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7O0FBT0YsVUFBVSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDN0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ3JDLENBQUM7Ozs7OztBQU1GLFVBQVUsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDMUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMvQixDQUFDOzs7Ozs7Ozs7OztBQVdGLFVBQVUsQ0FBQyxJQUFJLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsVUFBVSxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxRQUFRLENB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LENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsVUFBVSxDQUFDLFNBQVMsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFOztJQUU1QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzs7SUFFbEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDWixJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0lBQ3ZCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOztJQUU1QixJQUFJLEtBQUssR0FBRyxDQUFDLEtBQUssSUFBSSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7Ozs7OztJQU0zQyxRQUFRLEtBQUs7UUFDVCxLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNO1FBQ1YsS0FBSyxLQUFLO1lBQ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU07UUFDVixLQUFLLEtBQUs7WUFDTixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDeEMsTUFBTTtRQUNWLEtBQUssS0FBSztZQUNOLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN4QyxN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Ozs7OztJQVFELE9BQU8sRUFBRSxTQUFTLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELE9BQU8sRUFBRSxTQUFTLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELE9BQU8sRUFBRSxTQUFTLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7OztJQVFELFNBQVMsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FB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QUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7O1FBRTFCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQzNCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOztRQUUzQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztlQUNqRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1RTs7Ozs7OztJQU9ELFlBQVksRUFBRSxVQUFVLENBQUMsRUFBRTtRQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7UUFFMUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQzs7UUFFakIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7ZUFDeEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbkU7Ozs7O0lBS0QsUUFBUSxFQUFFLFlBQVk7UUFDbEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7ZUFDM0QsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdEU7Ozs7OztJQU1ELGNBQWMsRUFBRSxVQUFVLE1BQU0sRUFBRTtRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNwQzs7Ozs7OztJQU9ELGFBQWEsRUFBRSxDQUFDLFlBQVk7O1FBRXhCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOztRQUV2QixPQUFPLFVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRTtZQUM3QixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUMzQixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7WUFFM0IsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzs7WUFFckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFcEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFcEUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFckUsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3JCLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7WUFFMUYsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1lBRTFGLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7O1lBRXZCLE9BQU8sSUFBSSxDQUFDO1NBQ2YsQ0FBQztLQUNMLEdBQUc7Ozs7OztJQU1KLGVBQWUsRUFBRSxVQUFVLE1BQU0sRUFBRTtRQUMvQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzs7UUFFekIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzs7UUFFckIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRWpCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztRQUVqQixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7UUFFakIsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7O1lBRTdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFD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QyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7O1FBR3ZEQyxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7UUFFdEJBLFNBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOztRQUV0QkEsU0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7O1FBRXRCQSxTQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQzs7UUFFdEJBLFNBQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDOztRQUV0QkEsU0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDN0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7OztRQUd0QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ25DLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDN0IsSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHO1lBQ1osSUFBSSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVCLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUN0QixJQUFJLEtBQUssR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7O1lBRXhCLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqRCxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzs7OztZQUloREEsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbERBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs7WUFFakRBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqREEsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs7WUFFaERBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JEQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcERBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwREEsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN0RDthQUNJO1lBQ0QsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDO1lBQzNCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDM0IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUN6QixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDN0IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO1lBQzVCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7OztZQUcxQixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3ZGLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7O1lBRXZGLElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ2hDLElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOzs7WUFHaENBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUU3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdDQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRTdDQSxTQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0NBLFNBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3Q0EsU0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FB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Q0FBQyxHQUFHLEdBQUcsVUFBVSxHQUFHLEVBQUUsS0FBSyxFQUFFO2dCQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUMzQixDQUFDOztZQUVGLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDM0MsQ0FBQztZQUNGLE1BQU07UUFDVixLQUFLLENBQUM7WUFDRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsR0FBRyxFQUFFLEdBQUcsRUFBRTtnQkFDM0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDMUIsT0FBTyxHQUFHLENBQUM7YUFDZCxDQUFDO1lBQ0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUU7Z0JBQzNCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQ3JCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0IsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFO2dCQUNsQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUNyQixNQUFNLElBQUksQ0FBQyxDQUFD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LENBQUM7Z0JBQ3hCLElBQUksR0FBRyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztnQkFFNUIsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixHQUFHLEdBQUcsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZCLEdBQUcsR0FBRyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDdkIsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsR0FBRyxHQUFHLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOztZQUVoQyxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRztnQkFDZCxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUc7Z0JBQ2QsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHO2dCQUNkLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRztnQkFDZCxFQUFF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Q0FBQyxFQUFFO0lBQzdDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTs7SUFFN0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOztJQUUzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHO1FBQy9DLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7UUFFdkMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDdEM7O0lBRUQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO0NBQ3hCOzs7Ozs7Ozs7Ozs7Ozs7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LENBQUMsQ0FBQztZQUMxRCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFELENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUM7OztZQUd4RSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7U0FDckI7O1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNqQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7WUFDdkIsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUM5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QUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O29CQUU1QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDOztvQkFFMUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztvQkFDM0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO29CQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQzs7b0JBRS9CLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNyRCxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckQsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7O29CQUVyRCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUM3QixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUM3QixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcs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LEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQztZQUM3QixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUV0QyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3Qzs7O1FBR0QsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzs7UUFFbkIsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUUxQixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkM7OztRQUdELElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDOUIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUU3QixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVEOzs7UUFHRCxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2YsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JFLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0M7U0FDSjtRQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDekIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDOUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMs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Ozs7Ozs7O0FBU0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7O0lBRTlCLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtRQUNYLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0tBQ2YsTUFBTTtRQUNILEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDakI7O0lBRUQsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMzQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzs7UUFHMUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQzs7SUFFNUIsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNOLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDbkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDOztJQUVuQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFOztJQUU1QixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzs7SUFFYixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM1QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQyxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQVV6QixJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7SUFDakMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ25HLENBQUM7Ozs7Ozs7Ozs7QUFVRixJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3BCLENBQUM7O0FDNVBGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JBLEFBcUJBLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQzs7Ozs7OztBQU9mLEtBQUssQ0FBQyxNQUFNLEdBQUcsV0FBVztJQUN0QixJQUFJLEdBQUcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0lBQ3RCLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRTtJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDWCxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzVCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUUzQixJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDNUIsR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNKLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFDRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQzs7SUFFaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNyQyxPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtJQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNwQyxDQUFDOzs7Ozs7Ozs7O0FBVUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7Ozs7O0FBVzNCLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7Ozs7QUFVRixLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDOUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7O0FBVUYsS0FBSyxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEMsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLEtBQUssQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEVBQUU7SUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQy9JLENBQUM7O0FDcFBGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZCQSxBQVNBLGVBQWU7SUFDWCxJQUFJLEVBQUUsSUFBSTtJQUNWLElBQUksRUFBRSxJQUFJO0lBQ1YsSUFBSSxFQUFFLElBQUk7SUFDVixJQUFJLEVBQUUsSUFBSTtJQUNWLEtBQUssRUFBRSxLQUFLO0lBQ1osSUFBSSxFQUFFLElBQUk7SUFDVixJQUFJLEVBQUUsSUFBSTtJQUNWLElBQUksRUFBRSxJQUFJO0NBQ2IsQ0FBQzs7QUMvQ0YsYUFBYTs7QUNNYixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTTs7QUFFOUI7Ozs7SUFJSSxLQUFLLEVBQUUsR0FBRzs7Ozs7SUFLVixNQUFNLEVBQUUsQ0FBQztDQUNaLEVBQUU7O0lBRUMsSUFBSSxFQUFFLGNBQWM7O0lBRXBCLGdCQUFnQixFQUFFO1FBQ2QsbUJBQW1CLEVBQUU7WUFDakIsSUFBSSxFQUFFLElBQUk7WUFDVixLQUFLLEVBQUUsU0FBUyxRQUFRLEVBQUU7Z0JBQ3RCLE9BQU8sUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUMsS0FBSyxDQUFDO2FBQzVDO1NBQ0o7UUFDRCxnQkFBZ0IsRUFBRTtZQUNkLElBQUksRUFBRSxJQUFJO1lBQ1YsS0FBSyxFQUFFLFNBQVMsUUFBUSxFQUFFO2dCQUN0QixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUM7YUFDekI7U0FDSjtRQUNELGlCQUFpQixFQUFFO1lBQ2YsSUFBSSxFQUFFLElBQUk7WUFDVixLQUFLLEVBQUUsU0FBUyxRQUFRLEVBQUU7Z0JBQ3RCLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQzthQUMxQjtTQUNKO1FBQ0QsZ0JBQWdCLEVBQUU7WUFDZCxJQUFJLEVBQUUsSUFBSTtZQUNWLEtBQUssRUFBRSxTQUFTLFFBQVEsRUFBRTtnQkFDdEIsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFDM0IsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztnQkFDbkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDdkU7U0FDSjtLQUNKO0NBQ0osQ0FBQzs7QUMzQ0YsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU07O0FBRTVCOzs7O0lBSUksS0FBSyxFQUFFLEdBQUc7Ozs7O0lBS1YsTUFBTSxFQUFFLEVBQUU7Q0FDYixFQUFFOztJQUVDLElBQUksRUFBRSxZQUFZOztJQUVsQixnQkFBZ0IsRUFBRTtRQUNkLGlCQUFpQixFQUFFO1lBQ2YsSUFBSSxFQUFFLElBQUk7WUFDVixLQUFLLEVBQUUsU0FBUyxRQUFRLEVBQUU7Z0JBQ3RCLE9BQU8sUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUMsS0FBSyxDQUFDO2FBQzVDO1NBQ0o7O1FBRUQsZUFBZSxFQUFFO1lBQ2IsSUFBSSxFQUFFLElBQUk7WUFDVixLQUFLLEVBQUUsQ0FBQyxXQUFXO2dCQUNmLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sU0FBUyxRQUFRLEVBQUU7O29CQUV0QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7eUJBQ25DLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztpQkFDckQsQ0FBQzthQUNMLEdBQUc7U0FDUDs7UUFFRCxjQUFjLEVBQUU7WUFDWixJQUFJLEVBQUUsSUFBSTtZQUNWLEtBQUssRUFBRSxTQUFTLFFBQVEsRUFBRTtnQkFDdEIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDO2FBQ3pCO1NBQ0o7O1FBRUQsY0FBYyxFQUFFO1lBQ1osSUFBSSxFQUFFLElBQUk7WUFDVixLQUFLLEVBQUUsU0FBUyxRQUFRLEVBQUU7Z0JBQ3RCLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQzNCLElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7Z0JBQ25DLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3ZFO1NBQ0o7S0FDSjtDQUNKLENBQUM7O0FDbkRGLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLCtCQUErQjs7OztJQUlyRCxRQUFRLEVBQUUsRUFBRTs7OztJQUlaLGVBQWUsRUFBRSxFQUFFOzs7O0lBSW5CLGNBQWMsRUFBRSxFQUFFOzs7OztJQUtsQixLQUFLLEVBQUUsSUFBSTs7Ozs7SUFLWCxNQUFNLEVBQUUsSUFBSTtDQUNmOztBQUVEOzs7O0lBSUksSUFBSSxFQUFFLFNBQVMsR0FBRyxFQUFFO1FBQ2hCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQzs7UUFFaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDdEQ7O1FBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDZixHQUFHLEVBQUUsR0FBRztZQUNSLFVBQVUsRUFBRSxTQUFTLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ3BEO1lBQ0QsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFO2dCQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQzthQUM1QjtZQUNELFlBQVksRUFBRSxNQUFNO1lBQ3BCLE1BQU0sRUFBRSxVQUFVLElBQUksRUFBRTtnQkFDcEIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDL0IsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLFFBQVE7b0JBQ3RELE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtvQkFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2lCQUNwQixDQUFDLENBQUM7YUFDTjtTQUNKLENBQUMsQ0FBQztLQUNOO0NBQ0osQ0FBQzs7QUN4REYsSUFBSSxPQUFPLEdBQUcsV0FBVzs7Ozs7Ozs7SUFRckIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Ozs7Ozs7SUFPM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDdEIsQ0FBQzs7QUFFRixPQUFPLENBQUMsU0FBUyxHQUFHOztJQUVoQixXQUFXLEVBQUUsT0FBTzs7Ozs7O0lBTXBCLFFBQVEsRUFBRSxVQUFVLEdBQUcsRUFBRTtRQUNyQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDMUI7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7OztJQUtELEtBQUssRUFBRSxXQUFXO1FBQ2QsT0FBTyxDQUFDLElBQUksT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JDOzs7Ozs7O0lBT0QsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7SUFNRCxPQUFPLEVBQUUsV0FBVztRQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7OztJQU1ELFdBQVcsRUFBRSxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDdkM7Ozs7OztJQU1ELFFBQVEsRUFBRSxXQUFXO1FBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7OztJQU1ELE1BQU0sRUFBRSxXQUFXO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsR0FBRyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDakIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxZQUFZLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxNQUFNLEVBQUUsU0FBUyxHQUFHLEVBQUU7UUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7OztJQUtELFNBQVMsRUFBRSxXQUFXO1FBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7SUFFRCxRQUFRLEVBQUUsV0FBVztRQUNqQixPQUFPLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDakU7O0lBRUQsT0FBTyxFQUFFLFlBQVk7UUFDakIsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ2pEO0NBQ0osQ0FBQzs7Ozs7OztBQU9GLE9BQU8sQ0FBQyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7O0FBT0YsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLE9BQU8sQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDOUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUNwQyxDQUFDOzs7Ozs7QUFNRixPQUFPLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFO0lBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7OztBQU9GLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLE9BQU8sQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7Ozs7Ozs7O0FBUS9CLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7OztBQU1GLE9BQU8sQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOztBQ3RSRixJQUFJLFFBQVEsR0FBRyxXQUFXOzs7Ozs7O0lBT3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDOzs7Ozs7O0lBTzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0NBQ3RCLENBQUM7O0FBRUYsUUFBUSxDQUFDLFNBQVMsR0FBRzs7SUFFakIsV0FBVyxFQUFFLFFBQVE7Ozs7OztJQU1yQixRQUFRLEVBQUUsVUFBVSxHQUFHLEVBQUU7UUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7SUFLRCxLQUFLLEVBQUUsV0FBVztRQUNkLE9BQU8sQ0FBQyxJQUFJLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0Qzs7Ozs7OztJQU9ELElBQUksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNkLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7O0lBTUQsV0FBVyxFQUFFLFdBQVc7UUFDcEIsT0FBTyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN4Qzs7Ozs7O0lBTUQsUUFBUSxFQUFFLFdBQVc7UUFDakIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7O0lBTUQsTUFBTSxFQUFFLFdBQVc7UUFDZixLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDYixLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNqQixLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNsQixLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN0QixLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELE1BQU0sRUFBRSxTQUFTLEdBQUcsRUFBRTtRQUNsQixLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2YsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDbkIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7O0lBRUQsUUFBUSxFQUFFLFdBQVc7UUFDakIsT0FBTyxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2pFOztJQUVELE9BQU8sRUFBRSxZQUFZO1FBQ2pCLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNqRDtDQUNKLENBQUM7Ozs7Ozs7QUFPRixRQUFRLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUM3QixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7O0FBTUYsUUFBUSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsRUFBRTtJQUMvQixPQUFPLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ3JDLENBQUM7Ozs7OztBQU1GLFFBQVEsQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUU7SUFDOUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7O0FBT0YsUUFBUSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDL0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsUUFBUSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQy9CLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQzs7Ozs7Ozs7QUFRakMsUUFBUSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0lBQ3BDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixRQUFRLENBQUMsS0FBSyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDakMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixRQUFRLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDckMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7QUNwUUYsSUFBSSxPQUFPLEdBQUcsWUFBWTs7Ozs7Ozs7SUFRdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Ozs7Ozs7SUFPM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDdEIsQ0FBQzs7QUFFRixPQUFPLENBQUMsU0FBUyxHQUFHOztJQUVoQixXQUFXLEVBQUUsT0FBTzs7Ozs7O0lBTXBCLFFBQVEsRUFBRSxVQUFVLEdBQUcsRUFBRTtRQUNyQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDMUI7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7OztJQUtELE9BQU8sRUFBRSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7O0lBTUQsS0FBSyxFQUFFLFlBQVk7UUFDZixPQUFPLENBQUMsSUFBSSxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDckM7Ozs7Ozs7SUFPRCxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7OztJQU1ELFdBQVcsRUFBRSxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDdkM7Ozs7Ozs7SUFPRCxTQUFTLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsUUFBUSxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRTtRQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7OztJQU1ELFFBQVEsRUFBRSxZQUFZO1FBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7OztJQU1ELE1BQU0sRUFBRSxZQUFZO1FBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRTtRQUNkLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsUUFBUSxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsWUFBWSxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsTUFBTSxFQUFFLFVBQVUsR0FBRyxFQUFFO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxLQUFLLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxTQUFTLEVBQUUsVUFBVSxDQUFDLEVBQUU7UUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7O0lBS0QsY0FBYyxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7O0lBTUQsU0FBUyxFQUFFLFlBQVk7UUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOztJQUVELFFBQVEsRUFBRSxZQUFZO1FBQ2xCLE9BQU8sR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNqRTs7SUFFRCxPQUFPLEVBQUUsWUFBWTtRQUNqQixPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDakQ7Q0FDSixDQUFDOzs7Ozs7QUFNRixPQUFPLENBQUMsT0FBTyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7OztBQU9GLE9BQU8sQ0FBQyxJQUFJLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7QUFNRixPQUFPLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxFQUFFO0lBQy9CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDcEMsQ0FBQzs7Ozs7O0FBTUYsT0FBTyxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRTtJQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7QUFPRixPQUFPLENBQUMsTUFBTSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsR0FBRyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7O0FBU0YsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDOzs7Ozs7O0FBTy9CLE9BQU8sQ0FBQyxTQUFTLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7O0FBT0YsT0FBTyxDQUFDLFFBQVEsR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7QUFPRixPQUFPLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7OztBQU9GLE9BQU8sQ0FBQyxjQUFjLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0lBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7OztBQVFGLE9BQU8sQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtJQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEtBQUssR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7QUFPRixPQUFPLENBQUMsU0FBUyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRTtJQUNsQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsU0FBUyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLE9BQU8sR0FBRyxDQUFDO0NBQ2QsQ0FBQzs7QUNqWUYsSUFBSSxLQUFLLEdBQUcsV0FBVyxFQUFFLENBQUM7Ozs7Ozs7QUFPMUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsRUFBRSxDQUFDOzs7QUFHdkMsSUFBSSxhQUFhLEdBQUcsU0FBUyxHQUFHLEVBQUU7SUFDOUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXO1FBQ2xCLE9BQU8sR0FBRyxDQUFDO0tBQ2QsQ0FBQztDQUNMLENBQUM7QUFDRixhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFDdEMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDOzs7QUFHcEQsSUFBSSxXQUFXLEdBQUcsU0FBUyxHQUFHLEVBQUU7SUFDNUIsSUFBSSxXQUFXLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQztJQUNsQyxJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFO1FBQ3JCLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDTixHQUFHLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztTQUMzQjtRQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDZCxPQUFPLEdBQUcsQ0FBQztLQUNkLENBQUM7Q0FDTCxDQUFDO0FBQ0YsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ3BDLFdBQVcsQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQzs7QUFFaEQsSUFBSSxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFO0lBQzlCLElBQUksS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDdEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7S0FDdEMsQ0FBQztDQUNMLENBQUM7QUFDRixRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFDakMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDOzs7QUFHMUMsSUFBSSxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFO0lBQzlCLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzQixJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7O0lBRTNCLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUU7UUFDckIsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNOLEdBQUcsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxDQUFDLEdBQUc7WUFDUCxHQUFHO1lBQ0gsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNyQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3hDLENBQUM7O1FBRUYsT0FBTyxHQUFHLENBQUM7S0FDZCxDQUFDO0NBQ0wsQ0FBQztBQUNGLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNqQyxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7O0FBRTFDLElBQUksUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUM5QixJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0IsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNCLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQzs7SUFFM0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRTtRQUNyQixJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ04sR0FBRyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7U0FDdkI7UUFDRCxPQUFPLENBQUMsR0FBRztZQUNQLEdBQUc7WUFDSCxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDckMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUN4QyxDQUFDOztRQUVGLE9BQU8sR0FBRyxDQUFDO0tBQ2QsQ0FBQztDQUNMLENBQUM7QUFDRixRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFDakMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDOzs7Ozs7Ozs7QUFTMUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLFFBQVEsRUFBRTtJQUNoQyxPQUFPLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0NBQ3RDLENBQUM7Ozs7Ozs7QUFPRixLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsTUFBTSxFQUFFO0lBQzVCLE9BQU8sSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Q0FDbEMsQ0FBQzs7Ozs7Ozs7QUFRRixLQUFLLENBQUMsUUFBUSxHQUFHLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUNoQyxPQUFPLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNqQyxDQUFDOzs7Ozs7OztBQVFGLEtBQUssQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFO0lBQ2hDLE9BQU8sSUFBSSxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ2pDLENBQUM7Ozs7Ozs7O0FBUUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFDaEMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDakMsQ0FBQzs7QUNsSUYsSUFBSSxPQUFPLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7O0lBRS9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNYLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDOzs7Ozs7Ozs7SUFTWCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Ozs7Ozs7OztJQVN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztDQUN0QixDQUFDOztBQUVGLE9BQU8sQ0FBQyxTQUFTLEdBQUc7O0lBRWhCLFdBQVcsRUFBRSxPQUFPOzs7Ozs7O0lBT3BCLEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7Ozs7O0lBVUQsR0FBRyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxRQUFRLEVBQUUsU0FBUyxHQUFHLEVBQUU7UUFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O1FBRXZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7OztJQU1ELEtBQUssRUFBRSxXQUFXO1FBQ2QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDdEQ7Ozs7Ozs7SUFPRCxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDZCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDekM7Ozs7Ozs7SUFPRCxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDbEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzdDOzs7Ozs7O0lBT0QsR0FBRyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDYixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDeEM7Ozs7OztJQU1ELEdBQUcsRUFBRSxXQUFXO1FBQ1osT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUMvQjs7Ozs7O0lBTUQsTUFBTSxFQUFFLFdBQVc7UUFDZixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ2xDOzs7Ozs7OztJQVFELElBQUksRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmOzs7Ozs7O0lBT0QsR0FBRyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7O0lBTUQsTUFBTSxFQUFFLFdBQVc7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7OztJQU1ELFNBQVMsRUFBRSxXQUFXO1FBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELE1BQU0sRUFBRSxTQUFTLEtBQUssRUFBRTtRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7Ozs7Ozs7SUFPRCxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNqQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDNUM7Ozs7Ozs7SUFPRCxlQUFlLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDekIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3BEOzs7Ozs7SUFNRCxNQUFNLEVBQUUsV0FBVztRQUNmLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDbEM7Ozs7OztJQU1ELGFBQWEsRUFBRSxXQUFXO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDekM7Ozs7Ozs7SUFPRCxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELGFBQWEsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7Ozs7OztJQU9ELGFBQWEsRUFBRSxTQUFTLENBQUMsRUFBRTtRQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7S0FDZjs7SUFFRCxRQUFRLEVBQUUsV0FBVztRQUNqQixPQUFPLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDakU7O0lBRUQsT0FBTyxFQUFFLFlBQVk7UUFDakIsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ2pEO0NBQ0osQ0FBQzs7QUFFRixJQUFJL0MsZ0JBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDOztBQUUzQyxJQUFJQSxnQkFBYyxFQUFFOztJQUVoQixJQUFJRCxPQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQzs7Ozs7OztJQU85QkMsZ0JBQWMsQ0FBQ0QsT0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQzs7Ozs7Ozs7SUFRSEMsZ0JBQWMsQ0FBQ0QsT0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQzs7Ozs7Ozs7SUFRSEMsZ0JBQWMsQ0FBQ0QsT0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQzs7Ozs7Ozs7SUFRSEMsZ0JBQWMsQ0FBQ0QsT0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2QixHQUFHLEVBQUUsWUFBWTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELEdBQUcsRUFBRSxVQUFVLEtBQUssRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQUNKLENBQUMsQ0FBQztDQUNOOzs7Ozs7Ozs7O0FBVUQsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7OztBQVNGLE9BQU8sQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztDQUNyQixDQUFDOzs7Ozs7O0FBT0YsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7QUFPRixPQUFPLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUMxQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDMUMsQ0FBQzs7Ozs7Ozs7QUFRRixPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7Ozs7Ozs7O0FBUWhDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxHQUFHLENBQUM7Q0FDZCxDQUFDOzs7Ozs7Ozs7QUFTRixPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7Ozs7Ozs7QUFPN0IsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDekIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ3JDLENBQUM7Ozs7OztBQU1GLE9BQU8sQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLEVBQUU7SUFDdEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMvQixDQUFDOzs7Ozs7Ozs7OztBQVdGLE9BQU8sQ0FBQyxJQUFJLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7SUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixPQUFPLEdBQUcsQ0FBQztDQUNkLENBQUM7Ozs7Ozs7O0FBUUYsT0FBTyxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcs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 diff --git a/example/app_basic.html b/example/app_basic.html index d20999ddf..a2d49620d 100644 --- a/example/app_basic.html +++ b/example/app_basic.html @@ -32,7 +32,7 @@ loop: function (app) { this._cube.rotation.rotateY(app.frameTime / 1000); - // this._cube.rotation.rotateAxis([0,-1,0],app.frameTime / 1000); + // this._cube.rotation.rotateAxis([0,-1,0],app.frameTime / 1000); } }); diff --git a/src/glmatrix/quat.js b/src/glmatrix/quat.js index add8b4518..8e4c202a3 100644 --- a/src/glmatrix/quat.js +++ b/src/glmatrix/quat.js @@ -207,11 +207,9 @@ quat.setAxisAngle = function(out, axis, rad) { */ quat.rotateAxis = function (out,quat2,axis,rad) { - vec3.normalize(axis,axis); quat.setAxisAngle(quat2,axis,rad); quat.multiply(out,out,quat2); - } /** @@ -270,12 +268,9 @@ quat.scale = vec4.scale; * @returns {quat} out */ quat.rotateX = function (out,rad) { - var quat2 =[0,0,0,1]; var axis = [1,0,0]; - quat.rotateAxis(out,quat2,axis,rad); - return out; }; @@ -288,12 +283,9 @@ quat.rotateX = function (out,rad) { * @returns {quat} out */ quat.rotateY = function (out,rad) { - var quat2 =[0,0,0,1]; var axis = [0,1,0]; - quat.rotateAxis(out,quat2,axis,rad); - return out; }; @@ -308,9 +300,7 @@ quat.rotateY = function (out,rad) { quat.rotateZ = function (out,rad) { var quat2 =[0,0,0,1]; var axis = [0,0,1]; - quat.rotateAxis(out,quat2,axis,rad); - return out; }; @@ -325,7 +315,6 @@ quat.rotateZ = function (out,rad) { */ quat.calculateW = function (out, a) { var x = a[0], y = a[1], z = a[2]; - out[0] = x; out[1] = y; out[2] = z;